doublecmd-0.7.1/0000755000175000001440000000000012675717741012536 5ustar alexxusersdoublecmd-0.7.1/clean.bat0000644000175000001440000000411312650256475014302 0ustar alexxusers@echo Clean up output directory @del /Q /S units\i386-win32-win32\*.* @del /Q /S units\x86_64-win64-win32\*.* @del /Q src\*.*~ @del /Q src\*.~* @del /Q doublecmd.dbg @del /Q doublecmd.zdli @del /Q doublecmd*.exe @del /Q doublecmd*.old @echo Remove generated help files @del /Q doc\en\dev-help\*.* @echo Clean up tools output directories @del /Q /S tools\lib\*.* @del /Q tools\extractdwrflnfo.exe @echo Clean up plugins output directories @del /Q /S plugins\dsx\DSXLocate\lib\*.* @del /Q /S plugins\wcx\cpio\lib\*.* @del /Q /S plugins\wcx\deb\lib\*.* @del /Q /S plugins\wcx\lzma\lib\*.* @del /Q /S plugins\wcx\rpm\lib\*.* @del /Q /S plugins\wcx\unbz2\lib\*.* @del /Q /S plugins\wcx\unrar\lib\*.* @del /Q /S plugins\wcx\zip\lib\*.* @del /Q /S plugins\wdx\deb_wdx\lib\*.* @del /Q /S plugins\wdx\rpm_wdx\lib\*.* @del /Q /S plugins\wdx\svn_wdx\lib\*.* @del /Q /S plugins\wdx\xpi_wdx\lib\*.* @del /Q /S plugins\wfx\ftp\lib\*.* @del /Q /S plugins\wfx\gvfs\lib\*.* @del /Q /S plugins\wfx\samba\lib\*.* @del /Q /S plugins\wfx\sample\lib\*.* @del /Q /S plugins\wlx\simplewlx\lib\*.* @del /Q /S plugins\wlx\WlxMplayer\lib\*.* @echo Remove backup files @del /Q plugins\wcx\cpio\src\*.bak @del /Q plugins\wcx\rpm\src\*.bak @del /Q plugins\wcx\deb\src\*.bak @del /Q plugins\wcx\lzma\src\*.bak @del /Q plugins\wcx\zip\src\*.bak @del /Q plugins\wcx\unbz2\src\*.bak @del /Q plugins\wcx\unrar\src\*.bak @del /Q plugins\wcx\cpio\src\*.*~ @del /Q plugins\wcx\rpm\src\*.*~ @del /Q plugins\wcx\deb\src\*.*~ @del /Q plugins\wcx\lzma\src\*.*~ @del /Q plugins\wcx\zip\src\*.*~ @del /Q plugins\wcx\unbz2\src\*.*~ @del /Q plugins\wcx\unrar\src\*.*~ @echo Clean up components output directories @del /Q /S components\chsdet\lib\*.* @del /Q /S components\CmdLine\lib\*.* @del /Q /S components\dcpcrypt\lib\*.* @del /Q /S components\doublecmd\lib\*.* @del /Q /S components\gifanim\lib\*.* @del /Q /S components\KASToolBar\lib\*.* @del /Q /S components\multithreadprocs\lib\*.* @del /Q /S components\viewer\lib\*.* @del /Q /S components\ZVDateTimeCtrls\lib\*.* @echo Done.doublecmd-0.7.1/scripts/0000755000175000001440000000000012675717732014225 5ustar alexxusersdoublecmd-0.7.1/scripts/doublecmd-kde.py0000644000175000001440000000665712467727002017302 0ustar alexxusers# # Double Commander # ------------------------------------------------------------------------- # KDE integration module # # Copyright (C) 2013-2014 Alexander Koblov (alexx2000@mail.ru) # # 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. # import sys try: from PyKDE4.kdeui import KApplication from PyKDE4.kdecore import KService, KLocale, KGlobal from PyKDE4.kdecore import ki18n, KAboutData, KCmdLineArgs, KUrl, KCmdLineOptions from PyKDE4.kio import KFileItem, KFileItemList, KPropertiesDialog, KRun, KOpenWithDialog except: exit(1) # Show help message def Help(): print("\nSyntax:\n") print(" doublecmd-kde properties \n" " # Opens a file properties dialog\n\n") print(" doublecmd-kde openwith \n" " # Display the Open-With dialog for those URLs, and run the chosen application\n\n") exit(0) # Check argument count def CheckArguments(argc): if args.count() < argc: Help() #--------------- main ------------------ if __name__ == '__main__': appName = "doublecmd-kde" catalog = "kio4" programName = ki18n ("Double Commander") version = "1.0" description = ki18n ("Double Commander KDE helper") license = KAboutData.License_GPL copyright = ki18n ("(C) 2013-2014 Alexander Koblov") text = ki18n ("none") homePage = "doublecmd.sourceforge.net" bugEmail = "alexx2000@users.sourceforge.net" aboutData = KAboutData (appName, catalog, programName, version, description, license, copyright, text, homePage, bugEmail) KCmdLineArgs.init (sys.argv, aboutData, 0) options = KCmdLineOptions() options.add("+command", ki18n("Command")) options.add("+[URL(s)]", ki18n("Arguments for command")) KCmdLineArgs.addCmdLineOptions(options) args = KCmdLineArgs.parsedArgs() CheckArguments(1) app = KApplication() command = args.arg(0).toLocal8Bit(); if command == "properties": CheckArguments(2) fileList = [] for index in range(1, args.count()): fileList.append(KFileItem(args.url(index), "", 0)) propertiesDialog = KPropertiesDialog(KFileItemList(fileList)); propertiesDialog.exec_() elif command == "openwith": CheckArguments(2) fileList = [] for index in range(1, args.count()): fileList.append(args.url(index)) fileList = KUrl.List(fileList) propertiesDialog = KOpenWithDialog(fileList) if propertiesDialog.exec_(): service = propertiesDialog.service() if service == None: print("No service set, running " + propertiesDialog.text() + "\n") service = KService(propertiesDialog.text(), propertiesDialog.text(), "") KRun.run(service, fileList, None) else: Help() doublecmd-0.7.1/scripts/rabbit-vcs.py0000644000175000001440000000552612456715765016644 0ustar alexxusers# # This is an extension to the Double Commander to allow # integration with the version control systems. # # Copyright (C) 2009 Jason Heeris # Copyright (C) 2009 Bruce van der Kooij # Copyright (C) 2009 Adam Plumb # Copyright (C) 2014 Alexander Koblov # # RabbitVCS 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. # # RabbitVCS 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 RabbitVCS; If not, see . # import os, os.path import sys try: from rabbitvcs.util.contextmenuitems import * from rabbitvcs.util.contextmenu import MenuBuilder, MainContextMenu, MainContextMenuCallbacks from rabbitvcs.services.checkerservice import StatusCheckerStub except: exit(1) class DCSender: """Double Commander sender class""" def rescan_after_process_exit(self, proc, paths): print "rescan_after_process_exit" return class DCMenuItem: """Double Commander menu item class""" identifier = None label = None icon = None menu = [] def connect(self, signal, *callback): return class DCContextMenu(MenuBuilder): """Double Commander context menu class""" signal = "activate" def make_menu_item(self, item, id_magic): menuitem = DCMenuItem() if type(item) is MenuSeparator: menuitem.label = "-" else: menuitem.icon = item.icon menuitem.label = item.make_label() menuitem.identifier = item.callback_name return menuitem def attach_submenu(self, menu_node, submenu_list): menu_node.menu = [] menu_node.identifier = "" for item in submenu_list: menu_node.menu.append(item) def top_level_menu(self, items): return items class DCMainContextMenu(MainContextMenu): """Double Commander main context menu class""" def Execute(self, identifier): # Try to find and execute callback function if hasattr(self.callbacks, identifier): function = getattr(self.callbacks, identifier) if callable(function): function(self, None) def GetMenu(self): return DCContextMenu(self.structure, self.conditions, self.callbacks).menu def GetContextMenu(paths): upaths = [] for path in paths: upaths.append(unicode(path)) sender = DCSender() base_dir = os.path.dirname(upaths[0]) return DCMainContextMenu(sender, base_dir, upaths, None) if __name__ == "__main__": status_checker = StatusCheckerStub() doublecmd-0.7.1/scripts/terminal.sh0000755000175000001440000000113212664631677016375 0ustar alexxusers#!/usr/bin/env bash # Execute command in terminal emulator Mac OS X # Path to temporary script file SCRIPT_FILE=$(mktemp /var/tmp/doublecmd-XXXX) # Add shebang echo "#!/usr/bin/env bash" > $SCRIPT_FILE # Remove temporary script file at exit echo "trap 'rm -f $SCRIPT_FILE' INT TERM EXIT" >> $SCRIPT_FILE # Clear screen echo "clear" >> $SCRIPT_FILE # Change to directory printf -v DIR "%q" "$(pwd)" echo "cd $DIR" >> $SCRIPT_FILE # Copy over target command line echo "$@" >> $SCRIPT_FILE # Make executable chmod +x "$SCRIPT_FILE" # Execute in terminal open -b com.apple.terminal "$SCRIPT_FILE" doublecmd-0.7.1/libraries/0000755000175000001440000000000012675717726014515 5ustar alexxusersdoublecmd-0.7.1/libraries/i386-win32/0000755000175000001440000000000012675717726016146 5ustar alexxusersdoublecmd-0.7.1/libraries/x86_64-win64/0000755000175000001440000000000012675717726016420 5ustar alexxusersdoublecmd-0.7.1/libraries/src/0000755000175000001440000000000012675717726015304 5ustar alexxusersdoublecmd-0.7.1/libraries/src/libbz2/0000755000175000001440000000000012675717726016470 5ustar alexxusersdoublecmd-0.7.1/libraries/src/libbz2/libbz2.def0000644000175000001440000000027312161267161020315 0ustar alexxusersEXPORTS BZ2_bzCompressInit BZ2_bzCompress BZ2_bzCompressEnd BZ2_bzDecompressInit BZ2_bzDecompress BZ2_bzDecompressEnd BZ2_bzBuffToBuffCompress BZ2_bzBuffToBuffDecompress doublecmd-0.7.1/libraries/src/libbz2/blocksort.c0000644000175000001440000007374612161267161020636 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Block sorting machinery ---*/ /*--- blocksort.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ /*--- Fallback O(N log(N)^2) sorting ---*/ /*--- algorithm, for repetitive blocks ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ void fallbackSimpleSort ( UInt32* fmap, UInt32* eclass, Int32 lo, Int32 hi ) { Int32 i, j, tmp; UInt32 ec_tmp; if (lo == hi) return; if (hi - lo > 3) { for ( i = hi-4; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) fmap[j-4] = fmap[j]; fmap[j-4] = tmp; } } for ( i = hi-1; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) fmap[j-1] = fmap[j]; fmap[j-1] = tmp; } } /*---------------------------------------------*/ #define fswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define fvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ fswap(fmap[yyp1], fmap[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } #define fmin(a,b) ((a) < (b)) ? (a) : (b) #define fpush(lz,hz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ sp++; } #define fpop(lz,hz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; } #define FALLBACK_QSORT_SMALL_THRESH 10 #define FALLBACK_QSORT_STACK_SIZE 100 static void fallbackQSort3 ( UInt32* fmap, UInt32* eclass, Int32 loSt, Int32 hiSt ) { Int32 unLo, unHi, ltLo, gtHi, n, m; Int32 sp, lo, hi; UInt32 med, r, r3; Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; r = 0; sp = 0; fpush ( loSt, hiSt ); while (sp > 0) { AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); fpop ( lo, hi ); if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { fallbackSimpleSort ( fmap, eclass, lo, hi ); continue; } /* Random partitioning. Median of 3 sometimes fails to avoid bad cases. Median of 9 seems to help but looks rather expensive. This too seems to work but is cheaper. Guidance for the magic constants 7621 and 32768 is taken from Sedgewick's algorithms book, chapter 35. */ r = ((r * 7621) + 1) % 32768; r3 = r % 3; if (r3 == 0) med = eclass[fmap[lo]]; else if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else med = eclass[fmap[hi]]; unLo = ltLo = lo; unHi = gtHi = hi; while (1) { while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unLo]] - (Int32)med; if (n == 0) { fswap(fmap[unLo], fmap[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unHi]] - (Int32)med; if (n == 0) { fswap(fmap[unHi], fmap[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); if (gtHi < ltLo) continue; n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; if (n - lo > hi - m) { fpush ( lo, n ); fpush ( m, hi ); } else { fpush ( m, hi ); fpush ( lo, n ); } } } #undef fmin #undef fpush #undef fpop #undef fswap #undef fvswap #undef FALLBACK_QSORT_SMALL_THRESH #undef FALLBACK_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > 0 eclass exists for [0 .. nblock-1] ((UChar*)eclass) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)eclass) [0 .. nblock-1] holds block All other areas of eclass destroyed fmap [0 .. nblock-1] holds sorted order bhtab [ 0 .. 2+(nblock/32) ] destroyed */ #define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) #define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) #define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) #define WORD_BH(zz) bhtab[(zz) >> 5] #define UNALIGNED_BH(zz) ((zz) & 0x01f) static void fallbackSort ( UInt32* fmap, UInt32* eclass, UInt32* bhtab, Int32 nblock, Int32 verb ) { Int32 ftab[257]; Int32 ftabCopy[256]; Int32 H, i, j, k, l, r, cc, cc1; Int32 nNotDone; Int32 nBhtab; UChar* eclass8 = (UChar*)eclass; /*-- Initial 1-char radix sort to generate initial fmap and initial BH bits. --*/ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); for (i = 0; i < 257; i++) ftab[i] = 0; for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; for (i = 0; i < nblock; i++) { j = eclass8[i]; k = ftab[j] - 1; ftab[j] = k; fmap[k] = i; } nBhtab = 2 + (nblock / 32); for (i = 0; i < nBhtab; i++) bhtab[i] = 0; for (i = 0; i < 256; i++) SET_BH(ftab[i]); /*-- Inductively refine the buckets. Kind-of an "exponential radix sort" (!), inspired by the Manber-Myers suffix array construction algorithm. --*/ /*-- set sentinel bits for block-end detection --*/ for (i = 0; i < 32; i++) { SET_BH(nblock + 2*i); CLEAR_BH(nblock + 2*i + 1); } /*-- the log(N) loop --*/ H = 1; while (1) { if (verb >= 4) VPrintf1 ( " depth %6d has ", H ); j = 0; for (i = 0; i < nblock; i++) { if (ISSET_BH(i)) j = i; k = fmap[i] - H; if (k < 0) k += nblock; eclass[k] = j; } nNotDone = 0; r = -1; while (1) { /*-- find the next non-singleton bucket --*/ k = r + 1; while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (ISSET_BH(k)) { while (WORD_BH(k) == 0xffffffff) k += 32; while (ISSET_BH(k)) k++; } l = k - 1; if (l >= nblock) break; while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (!ISSET_BH(k)) { while (WORD_BH(k) == 0x00000000) k += 32; while (!ISSET_BH(k)) k++; } r = k - 1; if (r >= nblock) break; /*-- now [l, r] bracket current bucket --*/ if (r > l) { nNotDone += (r - l + 1); fallbackQSort3 ( fmap, eclass, l, r ); /*-- scan bucket and generate header bits-- */ cc = -1; for (i = l; i <= r; i++) { cc1 = eclass[fmap[i]]; if (cc != cc1) { SET_BH(i); cc = cc1; }; } } } if (verb >= 4) VPrintf1 ( "%6d unresolved strings\n", nNotDone ); H *= 2; if (H > nblock || nNotDone == 0) break; } /*-- Reconstruct the original block in eclass8 [0 .. nblock-1], since the previous phase destroyed it. --*/ if (verb >= 4) VPrintf0 ( " reconstructing block ...\n" ); j = 0; for (i = 0; i < nblock; i++) { while (ftabCopy[j] == 0) j++; ftabCopy[j]--; eclass8[fmap[i]] = (UChar)j; } AssertH ( j < 256, 1005 ); } #undef SET_BH #undef CLEAR_BH #undef ISSET_BH #undef WORD_BH #undef UNALIGNED_BH /*---------------------------------------------*/ /*--- The main, O(N^2 log(N)) sorting ---*/ /*--- algorithm. Faster for "normal" ---*/ /*--- non-repetitive blocks. ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ Bool mainGtU ( UInt32 i1, UInt32 i2, UChar* block, UInt16* quadrant, UInt32 nblock, Int32* budget ) { Int32 k; UChar c1, c2; UInt16 s1, s2; AssertD ( i1 != i2, "mainGtU" ); /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 9 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 10 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 11 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 12 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; k = nblock + 8; do { /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; if (i1 >= nblock) i1 -= nblock; if (i2 >= nblock) i2 -= nblock; k -= 8; (*budget)--; } while (k >= 0); return False; } /*---------------------------------------------*/ /*-- Knuth's increments seem to work better than Incerpi-Sedgewick here. Possibly because the number of elems to sort is usually small, typically <= 20. --*/ static Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, 9841, 29524, 88573, 265720, 797161, 2391484 }; static void mainSimpleSort ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 lo, Int32 hi, Int32 d, Int32* budget ) { Int32 i, j, h, bigN, hp; UInt32 v; bigN = hi - lo + 1; if (bigN < 2) return; hp = 0; while (incs[hp] < bigN) hp++; hp--; for (; hp >= 0; hp--) { h = incs[hp]; i = lo + h; while (True) { /*-- copy 1 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 2 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 3 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; if (*budget < 0) return; } } } /*---------------------------------------------*/ /*-- The following is an implementation of an elegant 3-way quicksort for strings, described in a paper "Fast Algorithms for Sorting and Searching Strings", by Robert Sedgewick and Jon L. Bentley. --*/ #define mswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define mvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ mswap(ptr[yyp1], ptr[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } static __inline__ UChar mmed3 ( UChar a, UChar b, UChar c ) { UChar t; if (a > b) { t = a; a = b; b = t; }; if (b > c) { b = c; if (a > b) b = a; } return b; } #define mmin(a,b) ((a) < (b)) ? (a) : (b) #define mpush(lz,hz,dz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ stackD [sp] = dz; \ sp++; } #define mpop(lz,hz,dz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; \ dz = stackD [sp]; } #define mnextsize(az) (nextHi[az]-nextLo[az]) #define mnextswap(az,bz) \ { Int32 tz; \ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } #define MAIN_QSORT_SMALL_THRESH 20 #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) #define MAIN_QSORT_STACK_SIZE 100 static void mainQSort3 ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 loSt, Int32 hiSt, Int32 dSt, Int32* budget ) { Int32 unLo, unHi, ltLo, gtHi, n, m, med; Int32 sp, lo, hi, d; Int32 stackLo[MAIN_QSORT_STACK_SIZE]; Int32 stackHi[MAIN_QSORT_STACK_SIZE]; Int32 stackD [MAIN_QSORT_STACK_SIZE]; Int32 nextLo[3]; Int32 nextHi[3]; Int32 nextD [3]; sp = 0; mpush ( loSt, hiSt, dSt ); while (sp > 0) { AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); mpop ( lo, hi, d ); if (hi - lo < MAIN_QSORT_SMALL_THRESH || d > MAIN_QSORT_DEPTH_THRESH) { mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); if (*budget < 0) return; continue; } med = (Int32) mmed3 ( block[ptr[ lo ]+d], block[ptr[ hi ]+d], block[ptr[ (lo+hi)>>1 ]+d] ); unLo = ltLo = lo; unHi = gtHi = hi; while (True) { while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unLo]+d]) - med; if (n == 0) { mswap(ptr[unLo], ptr[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unHi]+d]) - med; if (n == 0) { mswap(ptr[unHi], ptr[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "mainQSort3(2)" ); if (gtHi < ltLo) { mpush(lo, hi, d+1 ); continue; } n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); mpush (nextLo[0], nextHi[0], nextD[0]); mpush (nextLo[1], nextHi[1], nextD[1]); mpush (nextLo[2], nextHi[2], nextD[2]); } } #undef mswap #undef mvswap #undef mpush #undef mpop #undef mmin #undef mnextsize #undef mnextswap #undef MAIN_QSORT_SMALL_THRESH #undef MAIN_QSORT_DEPTH_THRESH #undef MAIN_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > N_OVERSHOOT block32 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)block32) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)block32) [0 .. nblock-1] holds block All other areas of block32 destroyed ftab [0 .. 65536 ] destroyed ptr [0 .. nblock-1] holds sorted order if (*budget < 0), sorting was abandoned */ #define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) #define SETMASK (1 << 21) #define CLEARMASK (~(SETMASK)) static void mainSort ( UInt32* ptr, UChar* block, UInt16* quadrant, UInt32* ftab, Int32 nblock, Int32 verb, Int32* budget ) { Int32 i, j, k, ss, sb; Int32 runningOrder[256]; Bool bigDone[256]; Int32 copyStart[256]; Int32 copyEnd [256]; UChar c1; Int32 numQSorted; UInt16 s; if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); /*-- set up the 2-byte frequency table --*/ for (i = 65536; i >= 0; i--) ftab[i] = 0; j = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; quadrant[i-1] = 0; j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); ftab[j]++; quadrant[i-2] = 0; j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); ftab[j]++; quadrant[i-3] = 0; j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); ftab[j]++; } for (; i >= 0; i--) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; } /*-- (emphasises close relationship of block & quadrant) --*/ for (i = 0; i < BZ_N_OVERSHOOT; i++) { block [nblock+i] = block[i]; quadrant[nblock+i] = 0; } if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); /*-- Complete the initial radix sort --*/ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; s = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; s = (s >> 8) | (block[i-1] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-1; s = (s >> 8) | (block[i-2] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-2; s = (s >> 8) | (block[i-3] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-3; } for (; i >= 0; i--) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; } /*-- Now ftab contains the first loc of every small bucket. Calculate the running order, from smallest to largest big bucket. --*/ for (i = 0; i <= 255; i++) { bigDone [i] = False; runningOrder[i] = i; } { Int32 vv; Int32 h = 1; do h = 3 * h + 1; while (h <= 256); do { h = h / 3; for (i = h; i <= 255; i++) { vv = runningOrder[i]; j = i; while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { runningOrder[j] = runningOrder[j-h]; j = j - h; if (j <= (h - 1)) goto zero; } zero: runningOrder[j] = vv; } } while (h != 1); } /*-- The main sorting loop. --*/ numQSorted = 0; for (i = 0; i <= 255; i++) { /*-- Process big buckets, starting with the least full. Basically this is a 3-step process in which we call mainQSort3 to sort the small buckets [ss, j], but also make a big effort to avoid the calls if we can. --*/ ss = runningOrder[i]; /*-- Step 1: Complete the big bucket [ss] by quicksorting any unsorted small buckets [ss, j], for j != ss. Hopefully previous pointer-scanning phases have already completed many of the small buckets [ss, j], so we don't have to sort them at all. --*/ for (j = 0; j <= 255; j++) { if (j != ss) { sb = (ss << 8) + j; if ( ! (ftab[sb] & SETMASK) ) { Int32 lo = ftab[sb] & CLEARMASK; Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; if (hi > lo) { if (verb >= 4) VPrintf4 ( " qsort [0x%x, 0x%x] " "done %d this %d\n", ss, j, numQSorted, hi - lo + 1 ); mainQSort3 ( ptr, block, quadrant, nblock, lo, hi, BZ_N_RADIX, budget ); numQSorted += (hi - lo + 1); if (*budget < 0) return; } } ftab[sb] |= SETMASK; } } AssertH ( !bigDone[ss], 1006 ); /*-- Step 2: Now scan this big bucket [ss] so as to synthesise the sorted order for small buckets [t, ss] for all t, including, magically, the bucket [ss,ss] too. This will avoid doing Real Work in subsequent Step 1's. --*/ { for (j = 0; j <= 255; j++) { copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; } for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyStart[c1]++ ] = k; } for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyEnd[c1]-- ] = k; } } AssertH ( (copyStart[ss]-1 == copyEnd[ss]) || /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. Necessity for this case is demonstrated by compressing a sequence of approximately 48.5 million of character 251; 1.0.0/1.0.1 will then die here. */ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), 1007 ) for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; /*-- Step 3: The [ss] big bucket is now done. Record this fact, and update the quadrant descriptors. Remember to update quadrants in the overshoot area too, if necessary. The "if (i < 255)" test merely skips this updating for the last bucket processed, since updating for the last bucket is pointless. The quadrant array provides a way to incrementally cache sort orderings, as they appear, so as to make subsequent comparisons in fullGtU() complete faster. For repetitive blocks this makes a big difference (but not big enough to be able to avoid the fallback sorting mechanism, exponential radix sort). The precise meaning is: at all times: for 0 <= i < nblock and 0 <= j <= nblock if block[i] != block[j], then the relative values of quadrant[i] and quadrant[j] are meaningless. else { if quadrant[i] < quadrant[j] then the string starting at i lexicographically precedes the string starting at j else if quadrant[i] > quadrant[j] then the string starting at j lexicographically precedes the string starting at i else the relative ordering of the strings starting at i and j has not yet been determined. } --*/ bigDone[ss] = True; if (i < 255) { Int32 bbStart = ftab[ss << 8] & CLEARMASK; Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; Int32 shifts = 0; while ((bbSize >> shifts) > 65534) shifts++; for (j = bbSize-1; j >= 0; j--) { Int32 a2update = ptr[bbStart + j]; UInt16 qVal = (UInt16)(j >> shifts); quadrant[a2update] = qVal; if (a2update < BZ_N_OVERSHOOT) quadrant[a2update + nblock] = qVal; } AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); } } if (verb >= 4) VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", nblock, numQSorted, nblock - numQSorted ); } #undef BIGFREQ #undef SETMASK #undef CLEARMASK /*---------------------------------------------*/ /* Pre: nblock > 0 arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)arr2) [0 .. nblock-1] holds block arr1 exists for [0 .. nblock-1] Post: ((UChar*)arr2) [0 .. nblock-1] holds block All other areas of block destroyed ftab [ 0 .. 65536 ] destroyed arr1 [0 .. nblock-1] holds sorted order */ void BZ2_blockSort ( EState* s ) { UInt32* ptr = s->ptr; UChar* block = s->block; UInt32* ftab = s->ftab; Int32 nblock = s->nblock; Int32 verb = s->verbosity; Int32 wfact = s->workFactor; UInt16* quadrant; Int32 budget; Int32 budgetInit; Int32 i; if (nblock < 10000) { fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } else { /* Calculate the location for quadrant, remembering to get the alignment right. Assumes that &(block[0]) is at least 2-byte aligned -- this should be ok since block is really the first section of arr2. */ i = nblock+BZ_N_OVERSHOOT; if (i & 1) i++; quadrant = (UInt16*)(&(block[i])); /* (wfact-1) / 3 puts the default-factor-30 transition point at very roughly the same place as with v0.1 and v0.9.0. Not that it particularly matters any more, since the resulting compressed stream is now the same regardless of whether or not we use the main sort or fallback sort. */ if (wfact < 1 ) wfact = 1; if (wfact > 100) wfact = 100; budgetInit = nblock * ((wfact-1) / 3); budget = budgetInit; mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); if (verb >= 3) VPrintf3 ( " %d work, %d block, ratio %5.2f\n", budgetInit - budget, nblock, (float)(budgetInit - budget) / (float)(nblock==0 ? 1 : nblock) ); if (budget < 0) { if (verb >= 2) VPrintf0 ( " too repetitive; using fallback" " sorting algorithm\n" ); fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } } s->origPtr = -1; for (i = 0; i < s->nblock; i++) if (ptr[i] == 0) { s->origPtr = i; break; }; AssertH( s->origPtr != -1, 1003 ); } /*-------------------------------------------------------------*/ /*--- end blocksort.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/libbz2.vcxproj0000644000175000001440000003376712161267161021270 0ustar alexxusers Debug Win32 Debug x64 Release Win32 Release x64 {7DF02769-ED34-4895-8ED7-2604BCC641B7} DynamicLibrary v110_xp false DynamicLibrary v110_xp false DynamicLibrary v110_xp false DynamicLibrary v110_xp false ..\..\i386-win32\ ..\..\i386-win32\ false bz2 false ..\..\x86_64-win64\ ..\..\x86_64-win64\ bz2 ..\..\i386-win32\ ..\..\i386-win32\ true bz2 true ..\..\x86_64-win64\ ..\..\x86_64-win64\ bz2 MultiThreaded Default true true MaxSpeed true Level3 WIN32;NDEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions) ..\..\i386-win32\ ..\..\i386-win32\libbz2.pch ..\..\i386-win32\ ..\..\i386-win32\ true NDEBUG;%(PreprocessorDefinitions) ..\..\i386-win32\libbz2.tlb true NUL Win32 0x0411 NDEBUG;%(PreprocessorDefinitions) true ..\..\i386-win32\libbz2.bsc true true Windows ..\..\i386-win32\bz2.dll ..\..\i386-win32\libbz2.lib odbc32.lib;odbccp32.lib;%(AdditionalDependencies) .\libbz2.def 5.01 MultiThreaded Default true true MaxSpeed true Level3 WIN32;NDEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions) ..\..\x86_64-win64\ ..\..\x86_64-win64\libbz2.pch ..\..\x86_64-win64\ ..\..\x86_64-win64\ true NDEBUG;%(PreprocessorDefinitions) ..\..\x86_64-win64\libbz2.tlb true NUL 0x0411 NDEBUG;%(PreprocessorDefinitions) true ..\..\x86_64-win64\libbz2.bsc true true Windows ..\..\x86_64-win64\bz2.dll ..\..\x86_64-win64\libbz2.lib odbc32.lib;odbccp32.lib;%(AdditionalDependencies) .\libbz2.def MultiThreadedDebug Default false Disabled true Level3 true EditAndContinue WIN32;_DEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions) ..\..\i386-win32\ ..\..\i386-win32\libbz2.pch ..\..\i386-win32\ ..\..\i386-win32\ true _DEBUG;%(PreprocessorDefinitions) ..\..\i386-win32\libbz2.tlb true NUL Win32 0x0411 _DEBUG;%(PreprocessorDefinitions) true ..\..\i386-win32\libbz2.bsc true true true Windows ..\..\i386-win32\bz2.dll ..\..\i386-win32\libbz2.lib odbc32.lib;odbccp32.lib;%(AdditionalDependencies) .\libbz2.def MultiThreadedDebug Default false Disabled true Level3 ProgramDatabase WIN32;_DEBUG;_WINDOWS;BZ_NO_STDIO;%(PreprocessorDefinitions) ..\..\x86_64-win64\ ..\..\x86_64-win64\libbz2.pch ..\..\x86_64-win64\ ..\..\x86_64-win64\ true _DEBUG;%(PreprocessorDefinitions) ..\..\x86_64-win64\libbz2.tlb true NUL 0x0411 _DEBUG;%(PreprocessorDefinitions) true ..\..\x86_64-win64\libbz2.bsc true true true Windows ..\..\x86_64-win64\bz2.dll ..\..\x86_64-win64\libbz2.lib odbc32.lib;odbccp32.lib;%(AdditionalDependencies) .\libbz2.def doublecmd-0.7.1/libraries/src/libbz2/decompress.c0000644000175000001440000005066712161267161020775 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Decompression machinery ---*/ /*--- decompress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ static void makeMaps_d ( DState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->seqToUnseq[s->nInUse] = i; s->nInUse++; } } /*---------------------------------------------------*/ #define RETURN(rrr) \ { retVal = rrr; goto save_state_and_return; }; #define GET_BITS(lll,vvv,nnn) \ case lll: s->state = lll; \ while (True) { \ if (s->bsLive >= nnn) { \ UInt32 v; \ v = (s->bsBuff >> \ (s->bsLive-nnn)) & ((1 << nnn)-1); \ s->bsLive -= nnn; \ vvv = v; \ break; \ } \ if (s->strm->avail_in == 0) RETURN(BZ_OK); \ s->bsBuff \ = (s->bsBuff << 8) | \ ((UInt32) \ (*((UChar*)(s->strm->next_in)))); \ s->bsLive += 8; \ s->strm->next_in++; \ s->strm->avail_in--; \ s->strm->total_in_lo32++; \ if (s->strm->total_in_lo32 == 0) \ s->strm->total_in_hi32++; \ } #define GET_UCHAR(lll,uuu) \ GET_BITS(lll,uuu,8) #define GET_BIT(lll,uuu) \ GET_BITS(lll,uuu,1) /*---------------------------------------------------*/ #define GET_MTF_VAL(label1,label2,lval) \ { \ if (groupPos == 0) { \ groupNo++; \ if (groupNo >= nSelectors) \ RETURN(BZ_DATA_ERROR); \ groupPos = BZ_G_SIZE; \ gSel = s->selector[groupNo]; \ gMinlen = s->minLens[gSel]; \ gLimit = &(s->limit[gSel][0]); \ gPerm = &(s->perm[gSel][0]); \ gBase = &(s->base[gSel][0]); \ } \ groupPos--; \ zn = gMinlen; \ GET_BITS(label1, zvec, zn); \ while (1) { \ if (zn > 20 /* the longest code */) \ RETURN(BZ_DATA_ERROR); \ if (zvec <= gLimit[zn]) break; \ zn++; \ GET_BIT(label2, zj); \ zvec = (zvec << 1) | zj; \ }; \ if (zvec - gBase[zn] < 0 \ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ RETURN(BZ_DATA_ERROR); \ lval = gPerm[zvec - gBase[zn]]; \ } /*---------------------------------------------------*/ Int32 BZ2_decompress ( DState* s ) { UChar uc; Int32 retVal; Int32 minLen, maxLen; bz_stream* strm = s->strm; /* stuff that needs to be saved/restored */ Int32 i; Int32 j; Int32 t; Int32 alphaSize; Int32 nGroups; Int32 nSelectors; Int32 EOB; Int32 groupNo; Int32 groupPos; Int32 nextSym; Int32 nblockMAX; Int32 nblock; Int32 es; Int32 N; Int32 curr; Int32 zt; Int32 zn; Int32 zvec; Int32 zj; Int32 gSel; Int32 gMinlen; Int32* gLimit; Int32* gBase; Int32* gPerm; if (s->state == BZ_X_MAGIC_1) { /*initialise the save area*/ s->save_i = 0; s->save_j = 0; s->save_t = 0; s->save_alphaSize = 0; s->save_nGroups = 0; s->save_nSelectors = 0; s->save_EOB = 0; s->save_groupNo = 0; s->save_groupPos = 0; s->save_nextSym = 0; s->save_nblockMAX = 0; s->save_nblock = 0; s->save_es = 0; s->save_N = 0; s->save_curr = 0; s->save_zt = 0; s->save_zn = 0; s->save_zvec = 0; s->save_zj = 0; s->save_gSel = 0; s->save_gMinlen = 0; s->save_gLimit = NULL; s->save_gBase = NULL; s->save_gPerm = NULL; } /*restore from the save area*/ i = s->save_i; j = s->save_j; t = s->save_t; alphaSize = s->save_alphaSize; nGroups = s->save_nGroups; nSelectors = s->save_nSelectors; EOB = s->save_EOB; groupNo = s->save_groupNo; groupPos = s->save_groupPos; nextSym = s->save_nextSym; nblockMAX = s->save_nblockMAX; nblock = s->save_nblock; es = s->save_es; N = s->save_N; curr = s->save_curr; zt = s->save_zt; zn = s->save_zn; zvec = s->save_zvec; zj = s->save_zj; gSel = s->save_gSel; gMinlen = s->save_gMinlen; gLimit = s->save_gLimit; gBase = s->save_gBase; gPerm = s->save_gPerm; retVal = BZ_OK; switch (s->state) { GET_UCHAR(BZ_X_MAGIC_1, uc); if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_2, uc); if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_3, uc) if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) if (s->blockSize100k < (BZ_HDR_0 + 1) || s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); s->blockSize100k -= BZ_HDR_0; if (s->smallDecompress) { s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); s->ll4 = BZALLOC( ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) ); if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); } else { s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); if (s->tt == NULL) RETURN(BZ_MEM_ERROR); } GET_UCHAR(BZ_X_BLKHDR_1, uc); if (uc == 0x17) goto endhdr_2; if (uc != 0x31) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_2, uc); if (uc != 0x41) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_3, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_4, uc); if (uc != 0x26) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_5, uc); if (uc != 0x53) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_6, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); s->currBlockNo++; if (s->verbosity >= 2) VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); s->storedBlockCRC = 0; GET_UCHAR(BZ_X_BCRC_1, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_2, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_3, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_4, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); s->origPtr = 0; GET_UCHAR(BZ_X_ORIGPTR_1, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_2, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_3, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); if (s->origPtr < 0) RETURN(BZ_DATA_ERROR); if (s->origPtr > 10 + 100000*s->blockSize100k) RETURN(BZ_DATA_ERROR); /*--- Receive the mapping table ---*/ for (i = 0; i < 16; i++) { GET_BIT(BZ_X_MAPPING_1, uc); if (uc == 1) s->inUse16[i] = True; else s->inUse16[i] = False; } for (i = 0; i < 256; i++) s->inUse[i] = False; for (i = 0; i < 16; i++) if (s->inUse16[i]) for (j = 0; j < 16; j++) { GET_BIT(BZ_X_MAPPING_2, uc); if (uc == 1) s->inUse[i * 16 + j] = True; } makeMaps_d ( s ); if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); alphaSize = s->nInUse+2; /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); if (nSelectors < 1) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { j = 0; while (True) { GET_BIT(BZ_X_SELECTOR_3, uc); if (uc == 0) break; j++; if (j >= nGroups) RETURN(BZ_DATA_ERROR); } s->selectorMtf[i] = j; } /*--- Undo the MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], tmp, v; for (v = 0; v < nGroups; v++) pos[v] = v; for (i = 0; i < nSelectors; i++) { v = s->selectorMtf[i]; tmp = pos[v]; while (v > 0) { pos[v] = pos[v-1]; v--; } pos[0] = tmp; s->selector[i] = tmp; } } /*--- Now the coding tables ---*/ for (t = 0; t < nGroups; t++) { GET_BITS(BZ_X_CODING_1, curr, 5); for (i = 0; i < alphaSize; i++) { while (True) { if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); GET_BIT(BZ_X_CODING_2, uc); if (uc == 0) break; GET_BIT(BZ_X_CODING_3, uc); if (uc == 0) curr++; else curr--; } s->len[t][i] = curr; } } /*--- Create the Huffman decoding tables ---*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } BZ2_hbCreateDecodeTables ( &(s->limit[t][0]), &(s->base[t][0]), &(s->perm[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); s->minLens[t] = minLen; } /*--- Now the MTF values ---*/ EOB = s->nInUse+1; nblockMAX = 100000 * s->blockSize100k; groupNo = -1; groupPos = 0; for (i = 0; i <= 255; i++) s->unzftab[i] = 0; /*-- MTF init --*/ { Int32 ii, jj, kk; kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); kk--; } s->mtfbase[ii] = kk + 1; } } /*-- end MTF init --*/ nblock = 0; GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); while (True) { if (nextSym == EOB) break; if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { es = -1; N = 1; do { /* Check that N doesn't get too big, so that es doesn't go negative. The maximum value that can be RUNA/RUNB encoded is equal to the block size (post the initial RLE), viz, 900k, so bounding N at 2 million should guard against overflow without rejecting any legitimate inputs. */ if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); if (nextSym == BZ_RUNA) es = es + (0+1) * N; else if (nextSym == BZ_RUNB) es = es + (1+1) * N; N = N * 2; GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); } while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); es++; uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; s->unzftab[uc] += es; if (s->smallDecompress) while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->ll16[nblock] = (UInt16)uc; nblock++; es--; } else while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->tt[nblock] = (UInt32)uc; nblock++; es--; }; continue; } else { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); /*-- uc = MTF ( nextSym-1 ) --*/ { Int32 ii, jj, kk, pp, lno, off; UInt32 nn; nn = (UInt32)(nextSym - 1); if (nn < MTFL_SIZE) { /* avoid general-case expense */ pp = s->mtfbase[0]; uc = s->mtfa[pp+nn]; while (nn > 3) { Int32 z = pp+nn; s->mtfa[(z) ] = s->mtfa[(z)-1]; s->mtfa[(z)-1] = s->mtfa[(z)-2]; s->mtfa[(z)-2] = s->mtfa[(z)-3]; s->mtfa[(z)-3] = s->mtfa[(z)-4]; nn -= 4; } while (nn > 0) { s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; }; s->mtfa[pp] = uc; } else { /* general case */ lno = nn / MTFL_SIZE; off = nn % MTFL_SIZE; pp = s->mtfbase[lno] + off; uc = s->mtfa[pp]; while (pp > s->mtfbase[lno]) { s->mtfa[pp] = s->mtfa[pp-1]; pp--; }; s->mtfbase[lno]++; while (lno > 0) { s->mtfbase[lno]--; s->mtfa[s->mtfbase[lno]] = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; lno--; } s->mtfbase[0]--; s->mtfa[s->mtfbase[0]] = uc; if (s->mtfbase[0] == 0) { kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; kk--; } s->mtfbase[ii] = kk + 1; } } } } /*-- end uc = MTF ( nextSym-1 ) --*/ s->unzftab[s->seqToUnseq[uc]]++; if (s->smallDecompress) s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); nblock++; GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); continue; } } /* Now we know what nblock is, we can do a better sanity check on s->origPtr. */ if (s->origPtr < 0 || s->origPtr >= nblock) RETURN(BZ_DATA_ERROR); /*-- Set up cftab to facilitate generation of T^(-1) --*/ /* Check: unzftab entries in range. */ for (i = 0; i <= 255; i++) { if (s->unzftab[i] < 0 || s->unzftab[i] > nblock) RETURN(BZ_DATA_ERROR); } /* Actually generate cftab. */ s->cftab[0] = 0; for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; /* Check: cftab entries in range. */ for (i = 0; i <= 256; i++) { if (s->cftab[i] < 0 || s->cftab[i] > nblock) { /* s->cftab[i] can legitimately be == nblock */ RETURN(BZ_DATA_ERROR); } } /* Check: cftab entries non-descending. */ for (i = 1; i <= 256; i++) { if (s->cftab[i-1] > s->cftab[i]) { RETURN(BZ_DATA_ERROR); } } s->state_out_len = 0; s->state_out_ch = 0; BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); s->state = BZ_X_OUTPUT; if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); if (s->smallDecompress) { /*-- Make a copy of cftab, used in generation of T --*/ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; /*-- compute the T vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->ll16[i]); SET_LL(i, s->cftabCopy[uc]); s->cftabCopy[uc]++; } /*-- Compute T^(-1) by pointer reversal on T --*/ i = s->origPtr; j = GET_LL(i); do { Int32 tmp = GET_LL(j); SET_LL(j, i); i = j; j = tmp; } while (i != s->origPtr); s->tPos = s->origPtr; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_SMALL(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_SMALL(s->k0); s->nblock_used++; } } else { /*-- compute the T^(-1) vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->tt[i] & 0xff); s->tt[s->cftab[uc]] |= (i << 8); s->cftab[uc]++; } s->tPos = s->tt[s->origPtr] >> 8; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_FAST(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_FAST(s->k0); s->nblock_used++; } } RETURN(BZ_OK); endhdr_2: GET_UCHAR(BZ_X_ENDHDR_2, uc); if (uc != 0x72) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_3, uc); if (uc != 0x45) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_4, uc); if (uc != 0x38) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_5, uc); if (uc != 0x50) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_6, uc); if (uc != 0x90) RETURN(BZ_DATA_ERROR); s->storedCombinedCRC = 0; GET_UCHAR(BZ_X_CCRC_1, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_2, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_3, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_4, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); s->state = BZ_X_IDLE; RETURN(BZ_STREAM_END); default: AssertH ( False, 4001 ); } AssertH ( False, 4002 ); save_state_and_return: s->save_i = i; s->save_j = j; s->save_t = t; s->save_alphaSize = alphaSize; s->save_nGroups = nGroups; s->save_nSelectors = nSelectors; s->save_EOB = EOB; s->save_groupNo = groupNo; s->save_groupPos = groupPos; s->save_nextSym = nextSym; s->save_nblockMAX = nblockMAX; s->save_nblock = nblock; s->save_es = es; s->save_N = N; s->save_curr = curr; s->save_zt = zt; s->save_zn = zn; s->save_zvec = zvec; s->save_zj = zj; s->save_gSel = gSel; s->save_gMinlen = gMinlen; s->save_gLimit = gLimit; s->save_gBase = gBase; s->save_gPerm = gPerm; return retVal; } /*-------------------------------------------------------------*/ /*--- end decompress.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/README0000644000175000001440000001663612161267161017343 0ustar alexxusers This is the README for bzip2/libzip2. This version is fully compatible with the previous public releases. ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in this file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ Complete documentation is available in Postscript form (manual.ps), PDF (manual.pdf) or html (manual.html). A plain-text version of the manual page is available as bzip2.txt. HOW TO BUILD -- UNIX Type 'make'. This builds the library libbz2.a and then the programs bzip2 and bzip2recover. Six self-tests are run. If the self-tests complete ok, carry on to installation: To install in /usr/local/bin, /usr/local/lib, /usr/local/man and /usr/local/include, type make install To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type make install PREFIX=/xxx/yyy If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do make -n install or make -n install PREFIX=/xxx/yyy respectively. The -n instructs make to show the commands it would execute, but not actually execute them. HOW TO BUILD -- UNIX, shared library libbz2.so. Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims that it works for any other platform, though I suspect it probably will work for most platforms employing both ELF and gcc. bzip2-shared, a client of the shared library, is also built, but not self-tested. So I suggest you also build using the normal Makefile, since that conducts a self-test. A second reason to prefer the version statically linked to the library is that, on x86 platforms, building shared objects makes a valuable register (%ebx) unavailable to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. Important note for people upgrading .so's from 0.9.0/0.9.5 to version 1.0.X. All the functions in the library have been renamed, from (eg) bzCompress to BZ2_bzCompress, to avoid namespace pollution. Unfortunately this means that the libbz2.so created by Makefile-libbz2_so will not work with any program which used an older version of the library. I do encourage library clients to make the effort to upgrade to use version 1.0, since it is both faster and more robust than previous versions. HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them on the master web site (http://www.bzip.org). Look there. However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. At least using MS Visual C++ 6, you can build from the unmodified sources by issuing, in a command shell: nmake -f makefile.msc (you may need to first run the MSVC-provided script VCVARS32.BAT so as to set up paths to the MSVC tools correctly). VALIDATION Correct operation, in the sense that a compressed file can always be decompressed to reproduce the original, is obviously of paramount importance. To validate bzip2, I used a modified version of Mark Nelson's churn program. Churn is an automated test driver which recursively traverses a directory structure, using bzip2 to compress and then decompress each file it encounters, and checking that the decompressed data is the same as the original. Please read and be aware of the following: WARNING: This program and library (attempts to) compress data by performing several non-trivial transformations on it. Unless you are 100% familiar with *all* the algorithms contained herein, and with the consequences of modifying them, you should NOT meddle with the compression or decompression machinery. Incorrect changes can and very likely *will* lead to disastrous loss of data. DISCLAIMER: I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. Great efforts in design, coding and testing have been made to ensure that this program works correctly. However, the complexity of the algorithms, and, in particular, the presence of various special cases in the code which occur with very low but non-zero probability make it impossible to rule out the possibility of bugs remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. That is not to say this program is inherently unreliable. Indeed, I very much hope the opposite is true. bzip2/libbzip2 has been carefully constructed and extensively tested. PATENTS: To the best of my knowledge, bzip2/libbzip2 does not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement. WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? * Approx 10% faster compression, 30% faster decompression * -t (test mode) is a lot quicker * Can decompress concatenated compressed files * Programming interface, so programs can directly read/write .bz2 files * Less restrictive (BSD-style) licensing * Flag handling more compatible with GNU gzip * Much more documentation, i.e., a proper user manual * Hopefully, improved portability (at least of the library) WHAT'S NEW IN 0.9.5 ? * Compression speed is much less sensitive to the input data than in previous versions. Specifically, the very slow performance caused by repetitive data is fixed. * Many small improvements in file and flag handling. * A Y2K statement. WHAT'S NEW IN 1.0.0 ? See the CHANGES file. WHAT'S NEW IN 1.0.2 ? See the CHANGES file. WHAT'S NEW IN 1.0.3 ? See the CHANGES file. WHAT'S NEW IN 1.0.4 ? See the CHANGES file. WHAT'S NEW IN 1.0.5 ? See the CHANGES file. WHAT'S NEW IN 1.0.6 ? See the CHANGES file. I hope you find bzip2 useful. Feel free to contact me at jseward@bzip.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this feedback. I thank you for your comments. bzip2's "home" is http://www.bzip.org/ Julian Seward jseward@bzip.org Cambridge, UK. 18 July 1996 (version 0.15) 25 August 1996 (version 0.21) 7 August 1997 (bzip2, version 0.1) 29 August 1997 (bzip2, version 0.1pl2) 23 August 1998 (bzip2, version 0.9.0) 8 June 1999 (bzip2, version 0.9.5) 4 Sept 1999 (bzip2, version 0.9.5d) 5 May 2000 (bzip2, version 1.0pre8) 30 December 2001 (bzip2, version 1.0.2pre1) 15 February 2005 (bzip2, version 1.0.3) 20 December 2006 (bzip2, version 1.0.4) 10 December 2007 (bzip2, version 1.0.5) 6 Sept 2010 (bzip2, version 1.0.6) doublecmd-0.7.1/libraries/src/libbz2/huffman.c0000644000175000001440000001551712161267161020250 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Huffman coding low-level stuff ---*/ /*--- huffman.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ #define WEIGHTOF(zz0) ((zz0) & 0xffffff00) #define DEPTHOF(zz1) ((zz1) & 0x000000ff) #define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) #define ADDWEIGHTS(zw1,zw2) \ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) #define UPHEAP(z) \ { \ Int32 zz, tmp; \ zz = z; tmp = heap[zz]; \ while (weight[tmp] < weight[heap[zz >> 1]]) { \ heap[zz] = heap[zz >> 1]; \ zz >>= 1; \ } \ heap[zz] = tmp; \ } #define DOWNHEAP(z) \ { \ Int32 zz, yy, tmp; \ zz = z; tmp = heap[zz]; \ while (True) { \ yy = zz << 1; \ if (yy > nHeap) break; \ if (yy < nHeap && \ weight[heap[yy+1]] < weight[heap[yy]]) \ yy++; \ if (weight[tmp] < weight[heap[yy]]) break; \ heap[zz] = heap[yy]; \ zz = yy; \ } \ heap[zz] = tmp; \ } /*---------------------------------------------------*/ void BZ2_hbMakeCodeLengths ( UChar *len, Int32 *freq, Int32 alphaSize, Int32 maxLen ) { /*-- Nodes and heap entries run from 1. Entry 0 for both the heap and nodes is a sentinel. --*/ Int32 nNodes, nHeap, n1, n2, i, j, k; Bool tooLong; Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; for (i = 0; i < alphaSize; i++) weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; while (True) { nNodes = alphaSize; nHeap = 0; heap[0] = 0; weight[0] = 0; parent[0] = -2; for (i = 1; i <= alphaSize; i++) { parent[i] = -1; nHeap++; heap[nHeap] = i; UPHEAP(nHeap); } AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); while (nHeap > 1) { n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); nNodes++; parent[n1] = parent[n2] = nNodes; weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); parent[nNodes] = -1; nHeap++; heap[nHeap] = nNodes; UPHEAP(nHeap); } AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); tooLong = False; for (i = 1; i <= alphaSize; i++) { j = 0; k = i; while (parent[k] >= 0) { k = parent[k]; j++; } len[i-1] = j; if (j > maxLen) tooLong = True; } if (! tooLong) break; /* 17 Oct 04: keep-going condition for the following loop used to be 'i < alphaSize', which missed the last element, theoretically leading to the possibility of the compressor looping. However, this count-scaling step is only needed if one of the generated Huffman code words is longer than maxLen, which up to and including version 1.0.2 was 20 bits, which is extremely unlikely. In version 1.0.3 maxLen was changed to 17 bits, which has minimal effect on compression ratio, but does mean this scaling step is used from time to time, enough to verify that it works. This means that bzip2-1.0.3 and later will only produce Huffman codes with a maximum length of 17 bits. However, in order to preserve backwards compatibility with bitstreams produced by versions pre-1.0.3, the decompressor must still handle lengths of up to 20. */ for (i = 1; i <= alphaSize; i++) { j = weight[i] >> 8; j = 1 + (j / 2); weight[i] = j << 8; } } } /*---------------------------------------------------*/ void BZ2_hbAssignCodes ( Int32 *code, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 n, vec, i; vec = 0; for (n = minLen; n <= maxLen; n++) { for (i = 0; i < alphaSize; i++) if (length[i] == n) { code[i] = vec; vec++; }; vec <<= 1; } } /*---------------------------------------------------*/ void BZ2_hbCreateDecodeTables ( Int32 *limit, Int32 *base, Int32 *perm, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 pp, i, j, vec; pp = 0; for (i = minLen; i <= maxLen; i++) for (j = 0; j < alphaSize; j++) if (length[j] == i) { perm[pp] = j; pp++; }; for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; for (i = 0; i < alphaSize; i++) base[length[i]+1]++; for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; vec = 0; for (i = minLen; i <= maxLen; i++) { vec += (base[i+1] - base[i]); limit[i] = vec-1; vec <<= 1; } for (i = minLen + 1; i <= maxLen; i++) base[i] = ((limit[i-1] + 1) << 1) - base[i]; } /*-------------------------------------------------------------*/ /*--- end huffman.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/crctable.c0000644000175000001440000001132212161267161020371 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Table for doing CRCs ---*/ /*--- crctable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*-- I think this is an implementation of the AUTODIN-II, Ethernet & FDDI 32-bit CRC standard. Vaguely derived from code by Rob Warnock, in Section 51 of the comp.compression FAQ. --*/ UInt32 BZ2_crc32Table[256] = { /*-- Ugly, innit? --*/ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L }; /*-------------------------------------------------------------*/ /*--- end crctable.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/LICENSE0000644000175000001440000000355512161267161017464 0ustar alexxusers -------------------------------------------------------------------------- This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2010 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, jseward@bzip.org bzip2/libbzip2 version 1.0.6 of 6 September 2010 -------------------------------------------------------------------------- doublecmd-0.7.1/libraries/src/libbz2/bzlib.h0000644000175000001440000001414512161267161017727 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Public header file for the library. ---*/ /*--- bzlib.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_H #define _BZLIB_H #ifdef __cplusplus extern "C" { #endif #define BZ_RUN 0 #define BZ_FLUSH 1 #define BZ_FINISH 2 #define BZ_OK 0 #define BZ_RUN_OK 1 #define BZ_FLUSH_OK 2 #define BZ_FINISH_OK 3 #define BZ_STREAM_END 4 #define BZ_SEQUENCE_ERROR (-1) #define BZ_PARAM_ERROR (-2) #define BZ_MEM_ERROR (-3) #define BZ_DATA_ERROR (-4) #define BZ_DATA_ERROR_MAGIC (-5) #define BZ_IO_ERROR (-6) #define BZ_UNEXPECTED_EOF (-7) #define BZ_OUTBUFF_FULL (-8) #define BZ_CONFIG_ERROR (-9) typedef struct { char *next_in; unsigned int avail_in; unsigned int total_in_lo32; unsigned int total_in_hi32; char *next_out; unsigned int avail_out; unsigned int total_out_lo32; unsigned int total_out_hi32; void *state; void *(*bzalloc)(void *,int,int); void (*bzfree)(void *,void *); void *opaque; } bz_stream; #ifndef BZ_IMPORT #define BZ_EXPORT #endif #ifndef BZ_NO_STDIO /* Need a definitition for FILE */ #include #endif #ifdef _WIN32 # include # ifdef small /* windows.h define small to char */ # undef small # endif # ifdef BZ_EXPORT # define BZ_API(func) WINAPI func # define BZ_EXTERN extern # else /* import windows dll dynamically */ # define BZ_API(func) (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API(func) func # define BZ_EXTERN extern #endif /*-- Core (low-level) library functions --*/ BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzCompress) ( bz_stream* strm, int action ); BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( bz_stream *strm, int verbosity, int small ); BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ); /*-- High(er) level library functions --*/ #ifndef BZ_NO_STDIO #define BZ_MAX_UNUSED 5000 typedef void BZFILE; BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ); BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( int* bzerror, BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ); BZ_EXTERN int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ); #endif /*-- Utility functions --*/ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ); /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( void ); #ifndef BZ_NO_STDIO BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ); BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ); BZ_EXTERN int BZ_API(BZ2_bzread) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzwrite) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzflush) ( BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzclose) ( BZFILE* b ); BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( BZFILE *b, int *errnum ); #endif #ifdef __cplusplus } #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib.h ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/bzlib_private.h0000644000175000001440000003167412161267161021467 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Private header file for the library. ---*/ /*--- bzlib_private.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_PRIVATE_H #define _BZLIB_PRIVATE_H #include #ifndef BZ_NO_STDIO #include #include #include #endif #include "bzlib.h" /*-- General stuff. --*/ #define BZ_VERSION "1.0.6, 6-Sept-2010" typedef char Char; typedef unsigned char Bool; typedef unsigned char UChar; typedef int Int32; typedef unsigned int UInt32; typedef short Int16; typedef unsigned short UInt16; #define True ((Bool)1) #define False ((Bool)0) #ifndef __GNUC__ #define __inline__ /* */ #endif #ifndef BZ_NO_STDIO extern void BZ2_bz__AssertH__fail ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } #if BZ_DEBUG #define AssertD(cond,msg) \ { if (!(cond)) { \ fprintf ( stderr, \ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ exit(1); \ }} #else #define AssertD(cond,msg) /* */ #endif #define VPrintf0(zf) \ fprintf(stderr,zf) #define VPrintf1(zf,za1) \ fprintf(stderr,zf,za1) #define VPrintf2(zf,za1,za2) \ fprintf(stderr,zf,za1,za2) #define VPrintf3(zf,za1,za2,za3) \ fprintf(stderr,zf,za1,za2,za3) #define VPrintf4(zf,za1,za2,za3,za4) \ fprintf(stderr,zf,za1,za2,za3,za4) #define VPrintf5(zf,za1,za2,za3,za4,za5) \ fprintf(stderr,zf,za1,za2,za3,za4,za5) #else extern void bz_internal_error ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) bz_internal_error ( errcode ); } #define AssertD(cond,msg) do { } while (0) #define VPrintf0(zf) do { } while (0) #define VPrintf1(zf,za1) do { } while (0) #define VPrintf2(zf,za1,za2) do { } while (0) #define VPrintf3(zf,za1,za2,za3) do { } while (0) #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) #endif #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) /*-- Header bytes. --*/ #define BZ_HDR_B 0x42 /* 'B' */ #define BZ_HDR_Z 0x5a /* 'Z' */ #define BZ_HDR_h 0x68 /* 'h' */ #define BZ_HDR_0 0x30 /* '0' */ /*-- Constants for the back end. --*/ #define BZ_MAX_ALPHA_SIZE 258 #define BZ_MAX_CODE_LEN 23 #define BZ_RUNA 0 #define BZ_RUNB 1 #define BZ_N_GROUPS 6 #define BZ_G_SIZE 50 #define BZ_N_ITERS 4 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) /*-- Stuff for randomising repetitive blocks. --*/ extern Int32 BZ2_rNums[512]; #define BZ_RAND_DECLS \ Int32 rNToGo; \ Int32 rTPos \ #define BZ_RAND_INIT_MASK \ s->rNToGo = 0; \ s->rTPos = 0 \ #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) #define BZ_RAND_UPD_MASK \ if (s->rNToGo == 0) { \ s->rNToGo = BZ2_rNums[s->rTPos]; \ s->rTPos++; \ if (s->rTPos == 512) s->rTPos = 0; \ } \ s->rNToGo--; /*-- Stuff for doing CRCs. --*/ extern UInt32 BZ2_crc32Table[256]; #define BZ_INITIALISE_CRC(crcVar) \ { \ crcVar = 0xffffffffL; \ } #define BZ_FINALISE_CRC(crcVar) \ { \ crcVar = ~(crcVar); \ } #define BZ_UPDATE_CRC(crcVar,cha) \ { \ crcVar = (crcVar << 8) ^ \ BZ2_crc32Table[(crcVar >> 24) ^ \ ((UChar)cha)]; \ } /*-- States and modes for compression. --*/ #define BZ_M_IDLE 1 #define BZ_M_RUNNING 2 #define BZ_M_FLUSHING 3 #define BZ_M_FINISHING 4 #define BZ_S_OUTPUT 1 #define BZ_S_INPUT 2 #define BZ_N_RADIX 2 #define BZ_N_QSORT 12 #define BZ_N_SHELL 18 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) /*-- Structure holding all the compression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* mode this stream is in, and whether inputting */ /* or outputting data */ Int32 mode; Int32 state; /* remembers avail_in when flush/finish requested */ UInt32 avail_in_expect; /* for doing the block sorting */ UInt32* arr1; UInt32* arr2; UInt32* ftab; Int32 origPtr; /* aliases for arr1 and arr2 */ UInt32* ptr; UChar* block; UInt16* mtfv; UChar* zbits; /* for deciding when to use the fallback sorting algorithm */ Int32 workFactor; /* run-length-encoding of the input */ UInt32 state_in_ch; Int32 state_in_len; BZ_RAND_DECLS; /* input and output limits and current posns */ Int32 nblock; Int32 nblockMAX; Int32 numZ; Int32 state_out_pos; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; UChar unseqToSeq[256]; /* the buffer for bit stream creation */ UInt32 bsBuff; Int32 bsLive; /* block and combined CRCs */ UInt32 blockCRC; UInt32 combinedCRC; /* misc administratium */ Int32 verbosity; Int32 blockNo; Int32 blockSize100k; /* stuff for coding the MTF values */ Int32 nMTF; Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; /* second dimension: only 3 needed; 4 makes index calculations faster */ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; } EState; /*-- externs for compression. --*/ extern void BZ2_blockSort ( EState* ); extern void BZ2_compressBlock ( EState*, Bool ); extern void BZ2_bsInitWrite ( EState* ); extern void BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); extern void BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); /*-- states for decompression. --*/ #define BZ_X_IDLE 1 #define BZ_X_OUTPUT 2 #define BZ_X_MAGIC_1 10 #define BZ_X_MAGIC_2 11 #define BZ_X_MAGIC_3 12 #define BZ_X_MAGIC_4 13 #define BZ_X_BLKHDR_1 14 #define BZ_X_BLKHDR_2 15 #define BZ_X_BLKHDR_3 16 #define BZ_X_BLKHDR_4 17 #define BZ_X_BLKHDR_5 18 #define BZ_X_BLKHDR_6 19 #define BZ_X_BCRC_1 20 #define BZ_X_BCRC_2 21 #define BZ_X_BCRC_3 22 #define BZ_X_BCRC_4 23 #define BZ_X_RANDBIT 24 #define BZ_X_ORIGPTR_1 25 #define BZ_X_ORIGPTR_2 26 #define BZ_X_ORIGPTR_3 27 #define BZ_X_MAPPING_1 28 #define BZ_X_MAPPING_2 29 #define BZ_X_SELECTOR_1 30 #define BZ_X_SELECTOR_2 31 #define BZ_X_SELECTOR_3 32 #define BZ_X_CODING_1 33 #define BZ_X_CODING_2 34 #define BZ_X_CODING_3 35 #define BZ_X_MTF_1 36 #define BZ_X_MTF_2 37 #define BZ_X_MTF_3 38 #define BZ_X_MTF_4 39 #define BZ_X_MTF_5 40 #define BZ_X_MTF_6 41 #define BZ_X_ENDHDR_2 42 #define BZ_X_ENDHDR_3 43 #define BZ_X_ENDHDR_4 44 #define BZ_X_ENDHDR_5 45 #define BZ_X_ENDHDR_6 46 #define BZ_X_CCRC_1 47 #define BZ_X_CCRC_2 48 #define BZ_X_CCRC_3 49 #define BZ_X_CCRC_4 50 /*-- Constants for the fast MTF decoder. --*/ #define MTFA_SIZE 4096 #define MTFL_SIZE 16 /*-- Structure holding all the decompression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* state indicator for this stream */ Int32 state; /* for doing the final run-length decoding */ UChar state_out_ch; Int32 state_out_len; Bool blockRandomised; BZ_RAND_DECLS; /* the buffer for bit stream reading */ UInt32 bsBuff; Int32 bsLive; /* misc administratium */ Int32 blockSize100k; Bool smallDecompress; Int32 currBlockNo; Int32 verbosity; /* for undoing the Burrows-Wheeler transform */ Int32 origPtr; UInt32 tPos; Int32 k0; Int32 unzftab[256]; Int32 nblock_used; Int32 cftab[257]; Int32 cftabCopy[257]; /* for undoing the Burrows-Wheeler transform (FAST) */ UInt32 *tt; /* for undoing the Burrows-Wheeler transform (SMALL) */ UInt16 *ll16; UChar *ll4; /* stored and calculated CRCs */ UInt32 storedBlockCRC; UInt32 storedCombinedCRC; UInt32 calculatedBlockCRC; UInt32 calculatedCombinedCRC; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; Bool inUse16[16]; UChar seqToUnseq[256]; /* for decoding the MTF values */ UChar mtfa [MTFA_SIZE]; Int32 mtfbase[256 / MTFL_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 minLens[BZ_N_GROUPS]; /* save area for scalars in the main decompress code */ Int32 save_i; Int32 save_j; Int32 save_t; Int32 save_alphaSize; Int32 save_nGroups; Int32 save_nSelectors; Int32 save_EOB; Int32 save_groupNo; Int32 save_groupPos; Int32 save_nextSym; Int32 save_nblockMAX; Int32 save_nblock; Int32 save_es; Int32 save_N; Int32 save_curr; Int32 save_zt; Int32 save_zn; Int32 save_zvec; Int32 save_zj; Int32 save_gSel; Int32 save_gMinlen; Int32* save_gLimit; Int32* save_gBase; Int32* save_gPerm; } DState; /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8; #define SET_LL4(i,n) \ { if (((i) & 0x1) == 0) \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ } #define GET_LL4(i) \ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) #define SET_LL(i,n) \ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ SET_LL4(i, n >> 16); \ } #define GET_LL(i) \ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/ extern Int32 BZ2_indexIntoF ( Int32, Int32* ); extern Int32 BZ2_decompress ( DState* ); extern void BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, Int32, Int32, Int32 ); #endif /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ #ifdef BZ_NO_STDIO #ifndef NULL #define NULL 0 #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib_private.h ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/error.c0000644000175000001440000000436312161267161017752 0ustar alexxusers#include "bzlib.h" #include void bz_internal_error ( int errcode ) { char error[2048]; wsprintf(error, "libbzip2: internal error number %d.\n" "This is a bug in libbzip2, %s.\n" "Please report it to me at: jseward@bzip.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() ); MessageBox(0, error, "Double Commander", MB_OK | MB_ICONERROR); if (errcode == 1007) { wsprintf(error, "*** A special note about internal error number 1007 ***\n" "\n" "Experience suggests that a common cause of i.e. 1007\n" "is unreliable memory or other hardware. The 1007 assertion\n" "just happens to cross-check the results of huge numbers of\n" "memory reads/writes, and so acts (unintendedly) as a stress\n" "test of your memory system.\n" "\n" "I suggest the following: try compressing the file again,\n" "possibly monitoring progress in detail with the -vv flag.\n" "\n" "* If the error cannot be reproduced, and/or happens at different\n" " points in compression, you may have a flaky memory system.\n" " Try a memory-test program. I have used Memtest86\n" " (www.memtest86.com). At the time of writing it is free (GPLd).\n" " Memtest86 tests memory much more thorougly than your BIOSs\n" " power-on test, and may find failures that the BIOS doesn't.\n" "\n" "* If the error can be repeatably reproduced, this is a bug in\n" " bzip2, and I would very much like to hear about it. Please\n" " let me know, and, ideally, save a copy of the file causing the\n" " problem -- without which I will be unable to investigate it.\n" "\n" ); MessageBox(0, error, "Double Commander", MB_OK | MB_ICONERROR); } } doublecmd-0.7.1/libraries/src/libbz2/bzlib.c0000644000175000001440000013165312161267161017726 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Library top-level functions. ---*/ /*--- bzlib.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). fixed bzWrite/bzRead to ignore zero-length requests. fixed bzread to correctly handle read requests after EOF. wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Compression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ #ifndef BZ_NO_STDIO void BZ2_bz__AssertH__fail ( int errcode ) { fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" "Please report it to me at: jseward@bzip.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() ); if (errcode == 1007) { fprintf(stderr, "\n*** A special note about internal error number 1007 ***\n" "\n" "Experience suggests that a common cause of i.e. 1007\n" "is unreliable memory or other hardware. The 1007 assertion\n" "just happens to cross-check the results of huge numbers of\n" "memory reads/writes, and so acts (unintendedly) as a stress\n" "test of your memory system.\n" "\n" "I suggest the following: try compressing the file again,\n" "possibly monitoring progress in detail with the -vv flag.\n" "\n" "* If the error cannot be reproduced, and/or happens at different\n" " points in compression, you may have a flaky memory system.\n" " Try a memory-test program. I have used Memtest86\n" " (www.memtest86.com). At the time of writing it is free (GPLd).\n" " Memtest86 tests memory much more thorougly than your BIOSs\n" " power-on test, and may find failures that the BIOS doesn't.\n" "\n" "* If the error can be repeatably reproduced, this is a bug in\n" " bzip2, and I would very much like to hear about it. Please\n" " let me know, and, ideally, save a copy of the file causing the\n" " problem -- without which I will be unable to investigate it.\n" "\n" ); } exit(3); } #endif /*---------------------------------------------------*/ static int bz_config_ok ( void ) { if (sizeof(int) != 4) return 0; if (sizeof(short) != 2) return 0; if (sizeof(char) != 1) return 0; return 1; } /*---------------------------------------------------*/ static void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) { void* v = malloc ( items * size ); return v; } static void default_bzfree ( void* opaque, void* addr ) { if (addr != NULL) free ( addr ); } /*---------------------------------------------------*/ static void prepare_new_block ( EState* s ) { Int32 i; s->nblock = 0; s->numZ = 0; s->state_out_pos = 0; BZ_INITIALISE_CRC ( s->blockCRC ); for (i = 0; i < 256; i++) s->inUse[i] = False; s->blockNo++; } /*---------------------------------------------------*/ static void init_RL ( EState* s ) { s->state_in_ch = 256; s->state_in_len = 0; } static Bool isempty_RL ( EState* s ) { if (s->state_in_ch < 256 && s->state_in_len > 0) return False; else return True; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ) { Int32 n; EState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL || blockSize100k < 1 || blockSize100k > 9 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(EState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; s->arr1 = NULL; s->arr2 = NULL; s->ftab = NULL; n = 100000 * blockSize100k; s->arr1 = BZALLOC( n * sizeof(UInt32) ); s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); if (s != NULL) BZFREE(s); return BZ_MEM_ERROR; } s->blockNo = 0; s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; s->combinedCRC = 0; s->blockSize100k = blockSize100k; s->nblockMAX = 100000 * blockSize100k - 19; s->verbosity = verbosity; s->workFactor = workFactor; s->block = (UChar*)s->arr2; s->mtfv = (UInt16*)s->arr1; s->zbits = NULL; s->ptr = (UInt32*)s->arr1; strm->state = s; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; init_RL ( s ); prepare_new_block ( s ); return BZ_OK; } /*---------------------------------------------------*/ static void add_pair_to_block ( EState* s ) { Int32 i; UChar ch = (UChar)(s->state_in_ch); for (i = 0; i < s->state_in_len; i++) { BZ_UPDATE_CRC( s->blockCRC, ch ); } s->inUse[s->state_in_ch] = True; switch (s->state_in_len) { case 1: s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 2: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 3: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; default: s->inUse[s->state_in_len-4] = True; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = ((UChar)(s->state_in_len-4)); s->nblock++; break; } } /*---------------------------------------------------*/ static void flush_RL ( EState* s ) { if (s->state_in_ch < 256) add_pair_to_block ( s ); init_RL ( s ); } /*---------------------------------------------------*/ #define ADD_CHAR_TO_BLOCK(zs,zchh0) \ { \ UInt32 zchh = (UInt32)(zchh0); \ /*-- fast track the common case --*/ \ if (zchh != zs->state_in_ch && \ zs->state_in_len == 1) { \ UChar ch = (UChar)(zs->state_in_ch); \ BZ_UPDATE_CRC( zs->blockCRC, ch ); \ zs->inUse[zs->state_in_ch] = True; \ zs->block[zs->nblock] = (UChar)ch; \ zs->nblock++; \ zs->state_in_ch = zchh; \ } \ else \ /*-- general, uncommon cases --*/ \ if (zchh != zs->state_in_ch || \ zs->state_in_len == 255) { \ if (zs->state_in_ch < 256) \ add_pair_to_block ( zs ); \ zs->state_in_ch = zchh; \ zs->state_in_len = 1; \ } else { \ zs->state_in_len++; \ } \ } /*---------------------------------------------------*/ static Bool copy_input_until_stop ( EState* s ) { Bool progress_in = False; if (s->mode == BZ_M_RUNNING) { /*-- fast track the common case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; } } else { /*-- general, uncommon case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; /*-- flush/finish end? --*/ if (s->avail_in_expect == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; s->avail_in_expect--; } } return progress_in; } /*---------------------------------------------------*/ static Bool copy_output_until_stop ( EState* s ) { Bool progress_out = False; while (True) { /*-- no output space? --*/ if (s->strm->avail_out == 0) break; /*-- block done? --*/ if (s->state_out_pos >= s->numZ) break; progress_out = True; *(s->strm->next_out) = s->zbits[s->state_out_pos]; s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } return progress_out; } /*---------------------------------------------------*/ static Bool handle_compress ( bz_stream* strm ) { Bool progress_in = False; Bool progress_out = False; EState* s = strm->state; while (True) { if (s->state == BZ_S_OUTPUT) { progress_out |= copy_output_until_stop ( s ); if (s->state_out_pos < s->numZ) break; if (s->mode == BZ_M_FINISHING && s->avail_in_expect == 0 && isempty_RL(s)) break; prepare_new_block ( s ); s->state = BZ_S_INPUT; if (s->mode == BZ_M_FLUSHING && s->avail_in_expect == 0 && isempty_RL(s)) break; } if (s->state == BZ_S_INPUT) { progress_in |= copy_input_until_stop ( s ); if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { flush_RL ( s ); BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); s->state = BZ_S_OUTPUT; } else if (s->nblock >= s->nblockMAX) { BZ2_compressBlock ( s, False ); s->state = BZ_S_OUTPUT; } else if (s->strm->avail_in == 0) { break; } } } return progress_in || progress_out; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) { Bool progress; EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; preswitch: switch (s->mode) { case BZ_M_IDLE: return BZ_SEQUENCE_ERROR; case BZ_M_RUNNING: if (action == BZ_RUN) { progress = handle_compress ( strm ); return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; } else if (action == BZ_FLUSH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FLUSHING; goto preswitch; } else if (action == BZ_FINISH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FINISHING; goto preswitch; } else return BZ_PARAM_ERROR; case BZ_M_FLUSHING: if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FLUSH_OK; s->mode = BZ_M_RUNNING; return BZ_RUN_OK; case BZ_M_FINISHING: if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (!progress) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FINISH_OK; s->mode = BZ_M_IDLE; return BZ_STREAM_END; } return BZ_OK; /*--not reached--*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) { EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } /*---------------------------------------------------*/ /*--- Decompression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressInit) ( bz_stream* strm, int verbosity, int small ) { DState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL) return BZ_PARAM_ERROR; if (small != 0 && small != 1) return BZ_PARAM_ERROR; if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(DState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; strm->state = s; s->state = BZ_X_MAGIC_1; s->bsLive = 0; s->bsBuff = 0; s->calculatedCombinedCRC = 0; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; s->smallDecompress = (Bool)small; s->ll4 = NULL; s->ll16 = NULL; s->tt = NULL; s->currBlockNo = 0; s->verbosity = verbosity; return BZ_OK; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_FAST ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { /* restore */ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; UChar c_state_out_ch = s->state_out_ch; Int32 c_state_out_len = s->state_out_len; Int32 c_nblock_used = s->nblock_used; Int32 c_k0 = s->k0; UInt32* c_tt = s->tt; UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out; Int32 ro_blockSize100k = s->blockSize100k; /* end restore */ UInt32 avail_out_INIT = cs_avail_out; Int32 s_save_nblockPP = s->save_nblock+1; unsigned int total_out_lo32_old; while (True) { /* try to finish existing run */ if (c_state_out_len > 0) { while (True) { if (cs_avail_out == 0) goto return_notr; if (c_state_out_len == 1) break; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); c_state_out_len--; cs_next_out++; cs_avail_out--; } s_state_out_len_eq_one: { if (cs_avail_out == 0) { c_state_out_len = 1; goto return_notr; }; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); cs_next_out++; cs_avail_out--; } } /* Only caused by corrupt data stream? */ if (c_nblock_used > s_save_nblockPP) return True; /* can a new run be started? */ if (c_nblock_used == s_save_nblockPP) { c_state_out_len = 0; goto return_notr; }; c_state_out_ch = c_k0; BZ_GET_FAST_C(k1); c_nblock_used++; if (k1 != c_k0) { c_k0 = k1; goto s_state_out_len_eq_one; }; if (c_nblock_used == s_save_nblockPP) goto s_state_out_len_eq_one; c_state_out_len = 2; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; c_state_out_len = 3; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; BZ_GET_FAST_C(k1); c_nblock_used++; c_state_out_len = ((Int32)k1) + 4; BZ_GET_FAST_C(c_k0); c_nblock_used++; } return_notr: total_out_lo32_old = s->strm->total_out_lo32; s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); if (s->strm->total_out_lo32 < total_out_lo32_old) s->strm->total_out_hi32++; /* save */ s->calculatedBlockCRC = c_calculatedBlockCRC; s->state_out_ch = c_state_out_ch; s->state_out_len = c_state_out_len; s->nblock_used = c_nblock_used; s->k0 = c_k0; s->tt = c_tt; s->tPos = c_tPos; s->strm->next_out = cs_next_out; s->strm->avail_out = cs_avail_out; /* end save */ } return False; } /*---------------------------------------------------*/ __inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) { Int32 nb, na, mid; nb = 0; na = 256; do { mid = (nb + na) >> 1; if (indx >= cftab[mid]) nb = mid; else na = mid; } while (na - nb != 1); return nb; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_SMALL ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); s->nblock_used++; } } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) { Bool corrupt; DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; while (True) { if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; if (s->state == BZ_X_OUTPUT) { if (s->smallDecompress) corrupt = unRLE_obuf_to_output_SMALL ( s ); else corrupt = unRLE_obuf_to_output_FAST ( s ); if (corrupt) return BZ_DATA_ERROR; if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { BZ_FINALISE_CRC ( s->calculatedBlockCRC ); if (s->verbosity >= 3) VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, s->calculatedBlockCRC ); if (s->verbosity >= 2) VPrintf0 ( "]" ); if (s->calculatedBlockCRC != s->storedBlockCRC) return BZ_DATA_ERROR; s->calculatedCombinedCRC = (s->calculatedCombinedCRC << 1) | (s->calculatedCombinedCRC >> 31); s->calculatedCombinedCRC ^= s->calculatedBlockCRC; s->state = BZ_X_BLKHDR_1; } else { return BZ_OK; } } if (s->state >= BZ_X_MAGIC_1) { Int32 r = BZ2_decompress ( s ); if (r == BZ_STREAM_END) { if (s->verbosity >= 3) VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", s->storedCombinedCRC, s->calculatedCombinedCRC ); if (s->calculatedCombinedCRC != s->storedCombinedCRC) return BZ_DATA_ERROR; return r; } if (s->state != BZ_X_OUTPUT) return r; } } AssertH ( 0, 6001 ); return 0; /*NOTREACHED*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) { DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->tt != NULL) BZFREE(s->tt); if (s->ll16 != NULL) BZFREE(s->ll16); if (s->ll4 != NULL) BZFREE(s->ll4); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ /*--- File I/O stuff ---*/ /*---------------------------------------------------*/ #define BZ_SETERR(eee) \ { \ if (bzerror != NULL) *bzerror = eee; \ if (bzf != NULL) bzf->lastErr = eee; \ } typedef struct { FILE* handle; Char buf[BZ_MAX_UNUSED]; Int32 bufN; Bool writing; bz_stream strm; Int32 lastErr; Bool initialisedOk; } bzFile; /*---------------------------------------------*/ static Bool myfeof ( FILE* f ) { Int32 c = fgetc ( f ); if (c == EOF) return True; ungetc ( c, f ); return False; } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ) { Int32 ret; bzFile* bzf = NULL; BZ_SETERR(BZ_OK); if (f == NULL || (blockSize100k < 1 || blockSize100k > 9) || (workFactor < 0 || workFactor > 250) || (verbosity < 0 || verbosity > 4)) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->bufN = 0; bzf->handle = f; bzf->writing = True; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; if (workFactor == 0) workFactor = 30; ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = 0; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (len == 0) { BZ_SETERR(BZ_OK); return; }; bzf->strm.avail_in = len; bzf->strm.next_in = buf; while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); if (ret != BZ_RUN_OK) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (bzf->strm.avail_in == 0) { BZ_SETERR(BZ_OK); return; }; } } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ) { BZ2_bzWriteClose64 ( bzerror, b, abandon, nbytes_in, NULL, nbytes_out, NULL ); } void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; if ((!abandon) && bzf->lastErr == BZ_OK) { while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (ret == BZ_STREAM_END) break; } } if ( !abandon && !ferror ( bzf->handle ) ) { fflush ( bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = bzf->strm.total_in_lo32; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = bzf->strm.total_in_hi32; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = bzf->strm.total_out_lo32; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = bzf->strm.total_out_hi32; BZ_SETERR(BZ_OK); BZ2_bzCompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ) { bzFile* bzf = NULL; int ret; BZ_SETERR(BZ_OK); if (f == NULL || (small != 0 && small != 1) || (verbosity < 0 || verbosity > 4) || (unused == NULL && nUnused != 0) || (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->handle = f; bzf->bufN = 0; bzf->writing = False; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; while (nUnused > 0) { bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; unused = ((void*)( 1 + ((UChar*)(unused)) )); nUnused--; } ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) { bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (bzf->initialisedOk) (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; if (len == 0) { BZ_SETERR(BZ_OK); return 0; }; bzf->strm.avail_out = len; bzf->strm.next_out = buf; while (True) { if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { n = fread ( bzf->buf, sizeof(UChar), BZ_MAX_UNUSED, bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; bzf->bufN = n; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; } ret = BZ2_bzDecompress ( &(bzf->strm) ); if (ret != BZ_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return 0; }; if (ret == BZ_OK && myfeof(bzf->handle) && bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; if (ret == BZ_STREAM_END) { BZ_SETERR(BZ_STREAM_END); return len - bzf->strm.avail_out; }; if (bzf->strm.avail_out == 0) { BZ_SETERR(BZ_OK); return len; }; } return 0; /*not reached*/ } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ) { bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (bzf->lastErr != BZ_STREAM_END) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (unused == NULL || nUnused == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; BZ_SETERR(BZ_OK); *nUnused = bzf->strm.avail_in; *unused = bzf->strm.next_in; } #endif /*---------------------------------------------------*/ /*--- Misc convenience stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || blockSize100k < 1 || blockSize100k > 9 || verbosity < 0 || verbosity > 4 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzCompressInit ( &strm, blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzCompress ( &strm, BZ_FINISH ); if (ret == BZ_FINISH_OK) goto output_overflow; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzCompressEnd ( &strm ); return BZ_OK; output_overflow: BZ2_bzCompressEnd ( &strm ); return BZ_OUTBUFF_FULL; errhandler: BZ2_bzCompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || (small != 0 && small != 1) || verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzDecompress ( &strm ); if (ret == BZ_OK) goto output_overflow_or_eof; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzDecompressEnd ( &strm ); return BZ_OK; output_overflow_or_eof: if (strm.avail_out > 0) { BZ2_bzDecompressEnd ( &strm ); return BZ_UNEXPECTED_EOF; } else { BZ2_bzDecompressEnd ( &strm ); return BZ_OUTBUFF_FULL; }; errhandler: BZ2_bzDecompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ /*-- return version like "0.9.5d, 4-Sept-1999". --*/ const char * BZ_API(BZ2_bzlibVersion)(void) { return BZ_VERSION; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ #if defined(_WIN32) || defined(OS2) || defined(MSDOS) # include # include # define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) #else # define SET_BINARY_MODE(file) #endif static BZFILE * bzopen_or_bzdopen ( const char *path, /* no use when bzdopen */ int fd, /* no use when bzdopen */ const char *mode, int open_mode) /* bzopen: 0, bzdopen:1 */ { int bzerr; char unused[BZ_MAX_UNUSED]; int blockSize100k = 9; int writing = 0; char mode2[10] = ""; FILE *fp = NULL; BZFILE *bzfp = NULL; int verbosity = 0; int workFactor = 30; int smallMode = 0; int nUnused = 0; if (mode == NULL) return NULL; while (*mode) { switch (*mode) { case 'r': writing = 0; break; case 'w': writing = 1; break; case 's': smallMode = 1; break; default: if (isdigit((int)(*mode))) { blockSize100k = *mode-BZ_HDR_0; } } mode++; } strcat(mode2, writing ? "w" : "r" ); strcat(mode2,"b"); /* binary mode */ if (open_mode==0) { if (path==NULL || strcmp(path,"")==0) { fp = (writing ? stdout : stdin); SET_BINARY_MODE(fp); } else { fp = fopen(path,mode2); } } else { #ifdef BZ_STRICT_ANSI fp = NULL; #else fp = fdopen(fd,mode2); #endif } if (fp == NULL) return NULL; if (writing) { /* Guard against total chaos and anarchy -- JRS */ if (blockSize100k < 1) blockSize100k = 1; if (blockSize100k > 9) blockSize100k = 9; bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, verbosity,workFactor); } else { bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, unused,nUnused); } if (bzfp == NULL) { if (fp != stdin && fp != stdout) fclose(fp); return NULL; } return bzfp; } /*---------------------------------------------------*/ /*-- open file for read or write. ex) bzopen("file","w9") case path="" or NULL => use stdin or stdout. --*/ BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ) { return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); } /*---------------------------------------------------*/ BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ) { return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) { int bzerr, nread; if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; nread = BZ2_bzRead(&bzerr,b,buf,len); if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { return nread; } else { return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) { int bzerr; BZ2_bzWrite(&bzerr,b,buf,len); if(bzerr == BZ_OK){ return len; }else{ return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzflush) (BZFILE *b) { /* do nothing now... */ return 0; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; FILE *fp; if (b==NULL) {return;} fp = ((bzFile *)b)->handle; if(((bzFile*)b)->writing){ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ BZ2_bzWriteClose(NULL,b,1,NULL,NULL); } }else{ BZ2_bzReadClose(&bzerr,b); } if(fp!=stdin && fp!=stdout){ fclose(fp); } } /*---------------------------------------------------*/ /*-- return last error code --*/ static const char *bzerrorstrings[] = { "OK" ,"SEQUENCE_ERROR" ,"PARAM_ERROR" ,"MEM_ERROR" ,"DATA_ERROR" ,"DATA_ERROR_MAGIC" ,"IO_ERROR" ,"UNEXPECTED_EOF" ,"OUTBUFF_FULL" ,"CONFIG_ERROR" ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ }; const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) { int err = ((bzFile *)b)->lastErr; if(err>0) err = 0; *errnum = err; return bzerrorstrings[err*-1]; } #endif /*-------------------------------------------------------------*/ /*--- end bzlib.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/readme.txt0000644000175000001440000000012012161267161020436 0ustar alexxuserslibbzip2 http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz Version 1.0.6 (20/09/2010) doublecmd-0.7.1/libraries/src/libbz2/Makefile0000644000175000001440000000124012161271501020075 0ustar alexxusers# This Makefile builds a shared version of the library libbz2.dll CC=gcc LDFLAGS=-Wl,--enable-stdcall-fixup -Wl,--strip-all CFLAGS=-Wall -Winline -O2 -D_FILE_OFFSET_BITS=64 -DBZ_NO_STDIO # Determine output directory ARCH=$(shell $(LD) --print-output-format) ifeq ($(ARCH), pei-i386) OUTPUT=..\..\i386-win32 else ifeq ($(ARCH), pei-x86-64) OUTPUT=..\..\x86_64-win64 endif OBJS= blocksort.o \ huffman.o \ crctable.o \ randtable.o \ compress.o \ decompress.o \ bzlib.o \ error.o all: $(OBJS) $(CC) -shared -static $(LDFLAGS) -o $(OUTPUT)\bz2.dll $(OBJS) libbz2.def clean: $(RM) -f $(OBJS) $(OUTPUT)\bz2.dll doublecmd-0.7.1/libraries/src/libbz2/compress.c0000644000175000001440000005012112161267161020445 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Compression machinery (not incl block sorting) ---*/ /*--- compress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- changed setting of nGroups in sendMTFValues() so as to do a bit better on small files */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Bit stream I/O ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ void BZ2_bsInitWrite ( EState* s ) { s->bsLive = 0; s->bsBuff = 0; } /*---------------------------------------------------*/ static void bsFinishWrite ( EState* s ) { while (s->bsLive > 0) { s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); s->numZ++; s->bsBuff <<= 8; s->bsLive -= 8; } } /*---------------------------------------------------*/ #define bsNEEDW(nz) \ { \ while (s->bsLive >= 8) { \ s->zbits[s->numZ] \ = (UChar)(s->bsBuff >> 24); \ s->numZ++; \ s->bsBuff <<= 8; \ s->bsLive -= 8; \ } \ } /*---------------------------------------------------*/ static __inline__ void bsW ( EState* s, Int32 n, UInt32 v ) { bsNEEDW ( n ); s->bsBuff |= (v << (32 - s->bsLive - n)); s->bsLive += n; } /*---------------------------------------------------*/ static void bsPutUInt32 ( EState* s, UInt32 u ) { bsW ( s, 8, (u >> 24) & 0xffL ); bsW ( s, 8, (u >> 16) & 0xffL ); bsW ( s, 8, (u >> 8) & 0xffL ); bsW ( s, 8, u & 0xffL ); } /*---------------------------------------------------*/ static void bsPutUChar ( EState* s, UChar c ) { bsW( s, 8, (UInt32)c ); } /*---------------------------------------------------*/ /*--- The back end proper ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ static void makeMaps_e ( EState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->unseqToSeq[i] = s->nInUse; s->nInUse++; } } /*---------------------------------------------------*/ static void generateMTFValues ( EState* s ) { UChar yy[256]; Int32 i, j; Int32 zPend; Int32 wr; Int32 EOB; /* After sorting (eg, here), s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, and ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] holds the original block data. The first thing to do is generate the MTF values, and put them in ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. Because there are strictly fewer or equal MTF values than block values, ptr values in this area are overwritten with MTF values only when they are no longer needed. The final compressed bitstream is generated into the area starting at (UChar*) (&((UChar*)s->arr2)[s->nblock]) These storage aliases are set up in bzCompressInit(), except for the last one, which is arranged in compressBlock(). */ UInt32* ptr = s->ptr; UChar* block = s->block; UInt16* mtfv = s->mtfv; makeMaps_e ( s ); EOB = s->nInUse+1; for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; wr = 0; zPend = 0; for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; for (i = 0; i < s->nblock; i++) { UChar ll_i; AssertD ( wr <= i, "generateMTFValues(1)" ); j = ptr[i]-1; if (j < 0) j += s->nblock; ll_i = s->unseqToSeq[block[j]]; AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); if (yy[0] == ll_i) { zPend++; } else { if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } { register UChar rtmp; register UChar* ryy_j; register UChar rll_i; rtmp = yy[1]; yy[1] = yy[0]; ryy_j = &(yy[1]); rll_i = ll_i; while ( rll_i != rtmp ) { register UChar rtmp2; ryy_j++; rtmp2 = rtmp; rtmp = *ryy_j; *ryy_j = rtmp2; }; yy[0] = rtmp; j = ryy_j - &(yy[0]); mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; } } } if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; s->nMTF = wr; } /*---------------------------------------------------*/ #define BZ_LESSER_ICOST 0 #define BZ_GREATER_ICOST 15 static void sendMTFValues ( EState* s ) { Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; Int32 nGroups, nBytes; /*-- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; is a global since the decoder also needs it. Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; are also globals only used in this proc. Made global to keep stack frame size small. --*/ UInt16 cost[BZ_N_GROUPS]; Int32 fave[BZ_N_GROUPS]; UInt16* mtfv = s->mtfv; if (s->verbosity >= 3) VPrintf3( " %d in block, %d after MTF & 1-2 coding, " "%d+2 syms in use\n", s->nblock, s->nMTF, s->nInUse ); alphaSize = s->nInUse+2; for (t = 0; t < BZ_N_GROUPS; t++) for (v = 0; v < alphaSize; v++) s->len[t][v] = BZ_GREATER_ICOST; /*--- Decide how many coding tables to use ---*/ AssertH ( s->nMTF > 0, 3001 ); if (s->nMTF < 200) nGroups = 2; else if (s->nMTF < 600) nGroups = 3; else if (s->nMTF < 1200) nGroups = 4; else if (s->nMTF < 2400) nGroups = 5; else nGroups = 6; /*--- Generate an initial set of coding tables ---*/ { Int32 nPart, remF, tFreq, aFreq; nPart = nGroups; remF = s->nMTF; gs = 0; while (nPart > 0) { tFreq = remF / nPart; ge = gs-1; aFreq = 0; while (aFreq < tFreq && ge < alphaSize-1) { ge++; aFreq += s->mtfFreq[ge]; } if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups-nPart) % 2 == 1)) { aFreq -= s->mtfFreq[ge]; ge--; } if (s->verbosity >= 3) VPrintf5( " initial group %d, [%d .. %d], " "has %d syms (%4.1f%%)\n", nPart, gs, ge, aFreq, (100.0 * (float)aFreq) / (float)(s->nMTF) ); for (v = 0; v < alphaSize; v++) if (v >= gs && v <= ge) s->len[nPart-1][v] = BZ_LESSER_ICOST; else s->len[nPart-1][v] = BZ_GREATER_ICOST; nPart--; gs = ge+1; remF -= aFreq; } } /*--- Iterate up to BZ_N_ITERS times to improve the tables. ---*/ for (iter = 0; iter < BZ_N_ITERS; iter++) { for (t = 0; t < nGroups; t++) fave[t] = 0; for (t = 0; t < nGroups; t++) for (v = 0; v < alphaSize; v++) s->rfreq[t][v] = 0; /*--- Set up an auxiliary length table which is used to fast-track the common case (nGroups == 6). ---*/ if (nGroups == 6) { for (v = 0; v < alphaSize; v++) { s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; } } nSelectors = 0; totc = 0; gs = 0; while (True) { /*--- Set group start & end marks. --*/ if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; /*-- Calculate the cost of this group as coded by each of the coding tables. --*/ for (t = 0; t < nGroups; t++) cost[t] = 0; if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ register UInt32 cost01, cost23, cost45; register UInt16 icv; cost01 = cost23 = cost45 = 0; # define BZ_ITER(nn) \ icv = mtfv[gs+(nn)]; \ cost01 += s->len_pack[icv][0]; \ cost23 += s->len_pack[icv][1]; \ cost45 += s->len_pack[icv][2]; \ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); # undef BZ_ITER cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { UInt16 icv = mtfv[i]; for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; } } /*-- Find the coding table which is best for this group, and record its identity in the selector table. --*/ bc = 999999999; bt = -1; for (t = 0; t < nGroups; t++) if (cost[t] < bc) { bc = cost[t]; bt = t; }; totc += bc; fave[bt]++; s->selector[nSelectors] = bt; nSelectors++; /*-- Increment the symbol frequencies for the selected table. --*/ if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); # undef BZ_ITUR } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) s->rfreq[bt][ mtfv[i] ]++; } gs = ge+1; } if (s->verbosity >= 3) { VPrintf2 ( " pass %d: size is %d, grp uses are ", iter+1, totc/8 ); for (t = 0; t < nGroups; t++) VPrintf1 ( "%d ", fave[t] ); VPrintf0 ( "\n" ); } /*-- Recompute the tables based on the accumulated frequencies. --*/ /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See comment in huffman.c for details. */ for (t = 0; t < nGroups; t++) BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), alphaSize, 17 /*20*/ ); } AssertH( nGroups < 8, 3002 ); AssertH( nSelectors < 32768 && nSelectors <= (2 + (900000 / BZ_G_SIZE)), 3003 ); /*--- Compute MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; for (i = 0; i < nGroups; i++) pos[i] = i; for (i = 0; i < nSelectors; i++) { ll_i = s->selector[i]; j = 0; tmp = pos[j]; while ( ll_i != tmp ) { j++; tmp2 = tmp; tmp = pos[j]; pos[j] = tmp2; }; pos[0] = tmp; s->selectorMtf[i] = j; } }; /*--- Assign actual codes for the tables. --*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); AssertH ( !(minLen < 1), 3005 ); BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); } /*--- Transmit the mapping table. ---*/ { Bool inUse16[16]; for (i = 0; i < 16; i++) { inUse16[i] = False; for (j = 0; j < 16; j++) if (s->inUse[i * 16 + j]) inUse16[i] = True; } nBytes = s->numZ; for (i = 0; i < 16; i++) if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); for (i = 0; i < 16; i++) if (inUse16[i]) for (j = 0; j < 16; j++) { if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); } /*--- Now the selectors. ---*/ nBytes = s->numZ; bsW ( s, 3, nGroups ); bsW ( s, 15, nSelectors ); for (i = 0; i < nSelectors; i++) { for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( "selectors %d, ", s->numZ-nBytes ); /*--- Now the coding tables. ---*/ nBytes = s->numZ; for (t = 0; t < nGroups; t++) { Int32 curr = s->len[t][0]; bsW ( s, 5, curr ); for (i = 0; i < alphaSize; i++) { while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; bsW ( s, 1, 0 ); } } if (s->verbosity >= 3) VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); /*--- And finally, the block data proper ---*/ nBytes = s->numZ; selCtr = 0; gs = 0; while (True) { if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; AssertH ( s->selector[selCtr] < nGroups, 3006 ); if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ UInt16 mtfv_i; UChar* s_len_sel_selCtr = &(s->len[s->selector[selCtr]][0]); Int32* s_code_sel_selCtr = &(s->code[s->selector[selCtr]][0]); # define BZ_ITAH(nn) \ mtfv_i = mtfv[gs+(nn)]; \ bsW ( s, \ s_len_sel_selCtr[mtfv_i], \ s_code_sel_selCtr[mtfv_i] ) BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); # undef BZ_ITAH } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { bsW ( s, s->len [s->selector[selCtr]] [mtfv[i]], s->code [s->selector[selCtr]] [mtfv[i]] ); } } gs = ge+1; selCtr++; } AssertH( selCtr == nSelectors, 3007 ); if (s->verbosity >= 3) VPrintf1( "codes %d\n", s->numZ-nBytes ); } /*---------------------------------------------------*/ void BZ2_compressBlock ( EState* s, Bool is_last_block ) { if (s->nblock > 0) { BZ_FINALISE_CRC ( s->blockCRC ); s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); s->combinedCRC ^= s->blockCRC; if (s->blockNo > 1) s->numZ = 0; if (s->verbosity >= 2) VPrintf4( " block %d: crc = 0x%08x, " "combined CRC = 0x%08x, size = %d\n", s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); BZ2_blockSort ( s ); } s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); /*-- If this is the first block, create the stream header. --*/ if (s->blockNo == 1) { BZ2_bsInitWrite ( s ); bsPutUChar ( s, BZ_HDR_B ); bsPutUChar ( s, BZ_HDR_Z ); bsPutUChar ( s, BZ_HDR_h ); bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); } if (s->nblock > 0) { bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); /*-- Now the block's CRC, so it is in a known place. --*/ bsPutUInt32 ( s, s->blockCRC ); /*-- Now a single bit indicating (non-)randomisation. As of version 0.9.5, we use a better sorting algorithm which makes randomisation unnecessary. So always set the randomised bit to 'no'. Of course, the decoder still needs to be able to handle randomised blocks so as to maintain backwards compatibility with older versions of bzip2. --*/ bsW(s,1,0); bsW ( s, 24, s->origPtr ); generateMTFValues ( s ); sendMTFValues ( s ); } /*-- If this is the last block, add the stream trailer. --*/ if (is_last_block) { bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); bsPutUInt32 ( s, s->combinedCRC ); if (s->verbosity >= 2) VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); bsFinishWrite ( s ); } } /*-------------------------------------------------------------*/ /*--- end compress.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/libraries/src/libbz2/randtable.c0000644000175000001440000000742412161267161020556 0ustar alexxusers /*-------------------------------------------------------------*/ /*--- Table for randomising repetitive blocks ---*/ /*--- randtable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ Int32 BZ2_rNums[512] = { 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 }; /*-------------------------------------------------------------*/ /*--- end randtable.c ---*/ /*-------------------------------------------------------------*/ doublecmd-0.7.1/pixmaps/0000755000175000001440000000000012675717730014215 5ustar alexxusersdoublecmd-0.7.1/pixmaps/archive_src.ico0000644000175000001440000001712611226363660017176 0ustar alexxusers  6 h( @ feeed d d c d b b b b a a ` ` _ _ _ ^ ^ ] ^ ] ] \ \ [s~|yvtqnlifda^[ \s}|zxwusrpnmkjhg^ \s}|zxvusrpnmkih_ \s~|{yxvusqonmjia \s~|zywutrpomljc \s}{yxwutrpnlke \s~|{yxvusqomlh \s~|{ywutrqomi \s}|zxvutrpnk \s}{zxvtsrpm \s}|zyxvtrqn \s}|zywvtrq \s}|zxwutr \s|{yxvtu \s~|zywuv \s~{zxwx \s~}{ywz \s}}{y| \s}|z~ \s~}{ \s \s}zxvspppppppppppppps~|ssssssssssssss(, Cvggfeed c c b a a ` _ ^ ^ ] ] \ [k{wsokgc [l~|zwusqnlih \m~{ywuronki \n~{xvtrolj ]o|zxutqnl ^pddddddddd~|zwtrpm _r~{yvsrp _r|zxvsq _tddd|zwvs `uddd{ywt avddddddddd~zxv bw}zw bx~|y cy~{ czrqpnnlkjiKyzuklllllllmzuFzzzzzzs  ?(  \ \ ] ^ ^ ^ ` ` b b cd degjlnnoqstuwxyzW\]`deijmqrvwz~y{||~}  E86420.,(&#!NdROIF@;9 Wg**VQMHC?:"^kZUPKFA=$hm**]XRMKC>%no`[TPMGB'sp**b_YSPKD)ur*ca\VQOJ+vtvL<7531/-qq*jillfedoublecmd-0.7.1/pixmaps/dctheme/0000755000175000001440000000000012675717730015626 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/index.theme0000644000175000001440000000301612561351202017737 0ustar alexxusers[Icon Theme] Name=DCTheme Comment=Double Commander default theme Directories=8x8/emblems,16x16/actions,16x16/apps,16x16/devices,16x16/emblems,16x16/mimetypes,16x16/places,22x22/actions,22x22/apps,22x22/devices,22x22/emblems,22x22/mimetypes,22x22/places,32x32/actions,32x32/apps,32x32/devices,32x32/emblems,32x32/mimetypes,32x32/places,48x48/actions,48x48/mimetypes [8x8/emblems] Size=8 Context=Emblems Type=Threshold [16x16/actions] Size=16 Context=Actions Type=Threshold [16x16/apps] Size=16 Context=Applications Type=Threshold [16x16/devices] Size=16 Context=Devices Type=Threshold [16x16/emblems] Size=16 Context=Emblems Type=Threshold [16x16/mimetypes] Size=16 Context=MimeTypes Type=Threshold [16x16/places] Size=16 Context=Places Type=Threshold [22x22/actions] Size=22 Context=Actions Type=Threshold [22x22/apps] Size=22 Context=Applications Type=Fixed [22x22/devices] Size=22 Context=Devices Type=Threshold [22x22/emblems] Size=22 Context=Emblems Type=Threshold [22x22/mimetypes] Size=22 Context=MimeTypes Type=Threshold [22x22/places] Size=22 Context=Places Type=Threshold [32x32/actions] Size=32 Context=Actions Type=Threshold [32x32/apps] Size=32 Context=Applications Type=Threshold [32x32/devices] Size=32 Context=Devices Type=Threshold [32x32/emblems] Size=32 Context=Emblems Type=Threshold [32x32/mimetypes] Size=32 Context=MimeTypes Type=Threshold [32x32/places] Size=32 Context=Places Type=Threshold [48x48/actions] Size=48 Context=Actions Type=Threshold [48x48/mimetypes] Size=48 Context=MimeTypes Type=Threshold doublecmd-0.7.1/pixmaps/dctheme/22x22/0000755000175000001440000000000012675717727016413 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/places/0000755000175000001440000000000012675717727017662 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/places/link.png0000644000175000001440000000145211323355446021310 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME #K(OIDAT8˭MkQs#4֊"T VX(m,. fGŶ ki&G373Idx0p9s.cqn} X\+ _Żi?xnSh"tIo&Eb[IeyD"pj QZ]ZrH%pS Vb@4æX\?`Qei+Y  fIy|%\3 _\t&P(emBEl E2 @xJ̯BQ;`(Yip- @Ш iUr]E-hmDŽVlrfv9 ip2 N@EDK.{[BAZa˜[ t*/MVλ?4$+}T ib@R/ °9 Oe]:7xzGt\.R(;L_*OF^5T)D Jebƣ"VeUߊcl.wXora?>V*ڡ.|eZK:Draf{pj&ǖ#s1I[ •G("OjEu3?:!nAnC:cIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/places/folder.png0000644000175000001440000000143111323355446021623 0ustar alexxusersPNG  IHDRĴl;sRGBbKGD pHYs  tIME ^4*tEXtCommentCreated with GIMPWtIDAT8ŕ;AwA6PL0PDUHp3>@X0H| &bnda9=3~TMSm/vbc}ՕNaG/ b1)}t-~ѮG=ȿ "م_~Bh$={Xt C|OxaG(rp&nk ^x 2e(Tŧ6IJg KX )2! LV_>~D/G9tqFe-C(Ŏ3@HD~'Jl .g%o6k@L=Y!R]kvJ5F X&.{p׬ K b[D$5m~ &LK YQ0}L O-.88:/\<'.J(+Шy6QAwp,,%80R3dc~@1¯KS42+XVjfhŨK3ӬnΩ1@ s9Fqgvyfk&:FL%62AvWDVŗV]ܒd5$"̩*Hx+do+\I|QBP#2KZ !`Z!j8y3_HRgdEoj?$gQ^0Ty:#BAU͑d-seps>鐉`k-A⠧vlT4q|}4K.,RڨrmBg0gV9KdF/@n#`ގtN]>P>]f̆r NZ%¾y@hJ8!+2К1bPjڑ_Ep beHzũ-Ki!w#E5^ֶ>^GT[ه٬%.+&;x$q8gЉ}w G~<"9H@}I=qe䀐Tl^@r\N9?^=ɱăKMPYC1:8s֑FBefSɊccS_Y2,*"H {xsZ!bqa,9'.}GY* W1Yƍ-oм$gpׯqB2wDa[r+ z8 zjzͯ'w՟RD:}KX7Mk֗VKssn~.1xsϟ}}9KMdc+dwMxtdNcgn2z\̆6'Yr7^"'EaP H=9N%I 1bTu-/|^&>ZrvGQ64~ydxe Yc&Ea8WP/'YΜƺ'WpI gfE;@xyGTVcw;Rbq-YC;x=4^ڣ]ȠlQDx<sCvAa.]FWf`$Unf 57O-oԪ5.y{zSZ ^/ȿpNIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/places/folder-link-broken.png0000644000175000001440000000231411361045050024022 0ustar alexxusersPNG  IHDRĴl;IDATxڵkLUwvXʛZk65*i?Ԫ1~iD- 3jx&W Z`#/`>̭jVjZ/OokhF>bjLgkiD9$ۊ͎v}Ap!zנ6lolю7)aGo7VXNH 5 ךC0o_jmjDZN M|e^^ gDĴ)Vx‚` tU\VuJMZ;Qns3YD:pLQۘ4F0 ~uw?H4IqGէBsX}%D|\"´ sbDEW)FjSF뾞nTt,QRW~dNFVaLi ܊?fk~b 7[IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/places/folder-virtual.png0000644000175000001440000000225211606044311023277 0ustar alexxusersPNG  IHDRj sBITO pHYsaa0UtEXtSoftwarewww.inkscape.org<@PLTE///UUUMMM000VVVWWWZZZUUU...OOOVVVqqqxxxYYYrrryyy///vvvpppppp---]]]^^^333///ooo///zzz~~~mmmrrrzzz024xxxgggwwwmmmfff|||тkkksssؓllliiigggjjjkkkdddӖYYY{{{|||~~~3I]tRNS $%'.034;===@@ABCEGLPX_abhikooqstwwz|}IsIDATc` tMM%}vٿo׶͛l8ab~n\y߾wn\8{’mر}#X3'NZr tZ`l%TTԩf̞7EMS5Em]pP]dM0iʔg'guU]ٝ-XWS۰('@,,QXVWޓ *ʊkԼ;)H߄ƊHF0GvbҎҒ9zRCal~1+r rȪ{qcNv 1&Eb-$!M'{k-֮ZR*ljieeeW._j   tSDGIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/emblems/0000755000175000001440000000000012675717727020037 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/emblems/emblem-symbolic-link.png0000644000175000001440000000146111312762055024537 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵOA̦YD '.\1Z#&=P=?MC(%P`$AiVke7yY'"rPz`v{B֓;Bº*>` -˯R-`0TGkhp:KЏ>mٞ@C`BV8TOCA}ssOs 0N.[NnnnN`230 L ~<[[q%+U$TC ǨO0B*RJjzzژh! #FmqFGo@M!^޻ow#X~ N'KfVoY``L4<78>>m9VW=ƄP8Wޭ;}p=\+,D8mŞ4ilKUϞ/@6$]e+asT**,-AkwW\.kho sδ 3H$P׻'CՂ'p~~wOtn%򧄳=&6\\>A;*(OVVbNv,"1 3 2DGopŊ Bc}}}w[b8ү&Y*d2>AKd|%!=ԫAC鳧0IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/emblems/emblem-unreadable.png0000644000175000001440000000250111362134553024062 0ustar alexxusersPNG  IHDRĴl;sBIT|dIDAT8}kTeye朹쬻ͺEfJeJJjHQTA(>U D QZy+$Uwݝ939E xW츲dZu)@ a҃ . "1:4Pb6n4U!u۞rk|y=pxR1nT{{g qC6N#-);x0̏xNyЅ>`IWvhOž,l,dUJG$fE4s|kt.L\g}S`î?fvV%TfLPcXGFZ s9 ,óZڻ &ZO7QBg SůVPg)u^v>rk|z \`%#TysE􅋘ngVs4L/ og҃LNNb͞M0D`V+ R!*Qth:mw,'zƦ.1ZVoFFD:gc~D̲@M˛A] O$ ۢ"V%kpo:2tgQSLn۴ ʹ$rZ4 `bsak2 t=R':~5}3zIͽ;B5"f3H%J5 8W R!A(q#k[=+B(HUë;{yZ &Z *CRC/|0YdU#44#&c*iS1r@A@lqp#>.ɟ97o3@1!%@Q XAId,{M +39Ʃ=}V|h܂leTǡ'x. C]C!!T/C͎зj>9MX$#c\>AWny ШMW@Ya Ka |zljrgB&~_;7) \!w ^<_n@@#a DDc "=2vEe7/]pp07d/,uFwwkC8~kRj1xcJ&@o υ&$BѨB} `~ H4 c`]w|h|gp6 yO ~< ;w! 3vh_nHv@Psp|.\zoULCTq6YLv|6IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/0000755000175000001440000000000012675717727020035 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/devices/drive-removable-media-usb.png0000755000175000001440000000173211715671161025461 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<WIDATxڭSnG=u=3vg"hbl)q"e>, v@`7H@h`xlܞnMUXY9RuUߺeYacc#[|DҜ4U+++XTě;1 I$wn/..g YJu> {w^!y;峿^.34<<³v"&()(~_iJ')a/1jKi&ҏgH:lańF#c$۰'I2smƧ?w/8D&N'1% C4P)Da1?TkC0 ?z%H"P>&WqXq8ShP@a7 ꓡ6IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/media-floppy.png0000644000175000001440000000142311323355446023112 0ustar alexxusersPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8kTWg F.,DRpcە躡֕.FPpQ RUJh7̦B @&{3V|k9xs_1p̮~%+.g@A 5~uסν[`3~cOn|ɩ|x [I9W(RK{i`w15kqqq4;>]Dži}0mHN2P%!;? jܽ8TɕT-nEJ S63WjN] efgg)˒((r4.#~5zsiR{*7)ՑB Cbf)qE+pM(˲`@#!bM1 WnM47ۦg$@&WcM(zز {1n/GOj !OBGHᣱA ^oٲ3\6=Cj RiGcMd$qAr{=c]{{zڶ/ߝ!3YBʂMC&[^:5Y} 5"<{,Vb 38)iĦM06KZM~ZtMCwmi5R9$RḬ΢A ИkQ,TU禛oB? z!,RL~?:p۸{ïs4ӌV6rarbbI`PJm긮$pD`|'BeǏٞމ5־{B-;e|a)gfB "M3wwqiZkRNR߇ߧvٻcǎl;N[؉B<!yIWB+Т4 0BJ幫u0X2A]qH4N+2u2'uxZ-k(Syuh[ sπ98ulsjB&y\($c]K;+5Ś_oTVOE! Ð)|` RHyڵkEf,B99}!I__*B[(jc cCetvv2<1#y]۷%nf'iIp2RJMɻX;.a$1割BᚗgƁ׭Tqrr9ONF!(4M z ){xMV\qϪ V@G Q),°e:9|0gGG>_U}+W,Ř %PX ]]ד)o}rtH <|dywI(y '#sj4fqy:{<1YOc(ю[9Ɓ-'O@ 0ϓOJT*y^pܹs###fffZWb]+IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/drive-removable-media.png0000644000175000001440000000114411633361331024656 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME ;/AIDAT8ՔMkQ4IB&3k$[ Auٝ.! ]BAno&4$KLg:.L> 3nzr99nPgyG'ǧjgPUueꗯ30ponZ4˱R-NOł%#q6S#4+' Vvnuup y{y VKڭ$D۶W۶M<GOJ\Rb*h4uH}}MJF7MqN$5-LQ֔B"#_pAB>Ԓ4MyDz,i=<2vzP(]bB.ȟs!q>||O|7 K`^M&~8.z$6hZ~)v=W,h_Dt:aMhZ> ee?!j} KC?R>-sh&Eo}IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/network-wired.png0000644000175000001440000000215211323355446023325 0ustar alexxusersPNG  IHDRĴl;sBIT|d!IDAT8k#UǿL2ZӤɤ)imiiU)K*V`XQDE`_?@/>?}(})X TJm]3$iu줓dr}L͖W_.>|9{nѨz񿀩ho[\}OJtslly~OGQo}굗'(o]_`iB.{:H9lNS4 P@=Mt@Qp%,//D"ģ(}RalllV(ʟ`~CQA,..b``i]7WVVp\D60z=H&(p\8>>F<B/eYx0LHe&$I|3{p^3M۴ pxwA8Q̟ct]7RTeY٭E5KJIQiAIVju5̸} !lvhn6uY#qyUU,FOkkkӱ @Njt^ 0BjtmZ^]]3v}5"*K.9=Xg U<75TO2f5f-<͋2>{ْ;V2xpo=OoK#s/zPpE:IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/drive-harddisk.png0000644000175000001440000000116011323355446023422 0ustar alexxusersPNG  IHDRĴl;bKGDC pHYs B(xtIME>;IDAT8AkAv3&Kظ[SXUzxR<֋B!/%ZHBXi7i2^iE<ޛxo&11js`oAˏ>'P{BW;/ډou]>Q]h'"\ץVnNЋzH)βv,wn tiիv>5VW7-+E2$^q9NZ@H)Ri@)%a^Iqp8Tjx(~eq\<۶E۝0Fc8qt/inA0\RTbi|fm:o+掹H * F4ve{MӰ, !ea6ahZ3w}"K$y bmm|\.G"`l|t`7pw2@k2a瑃_)2> HkhD{.-˞|73--nO@m-^ADUGL" EloTDēL2Sx2*  kdl|t2MIJ첪kEk.C%5B@4@c{{[iXMו\ڒnAX,>L&,KU "^:rJDvS2vlx_WWw6G(T`mm}D"Ε7sC=Z`7̙mq'7 nn2XXgxI5`>,dvvvFGX,N8\O$rWEOhj""ޘ b!jWWW%J֖Nvl&'`ii] ӴFdgHwʊJR!Fc|e o@.(e eb(ɚ;S##k a? զRZeqɉ__IC_IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/devices/media-flash.png0000644000175000001440000000146511323655670022706 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8ˋWs8&1#BPI!Yl7 nlBv+]H i&(F7Nzs>4g?xUnUn"a.WkyoR$N]Cʃ3C 6{ z L|}%9 Oo%{' Z_|&9yUz~'1ھÇ199y7Ca^:Ƙ 8;7s>zjJV|0 q]iv\TulaqwnWHo5mҾY o.Z_D.Xөo,,,T*|yg]EdU 1ƘT*USkݞFܟv5 zB Tq|:=u}9FdeIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/0000755000175000001440000000000012675717727020427 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/text-x-po.png0000644000175000001440000000220211323355446022757 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڥk\E?s\d4&Vj/QkPT|((žs>$(/X|(m^شtl6s-B=3wz%uѲFcg8@m:zr`V$cayڛK|D!0X*\DA*C' H]UZS$kT>H)퐵Ve(q<\_H+aP RB3&Ȓvd(N-r|Gw\ {]Gm8﷖9{J]EInH#vq׳0 4Z#"F5=ܮyՍV g8 h(!m^7,eK4eAP@99.Z/˄ڎy"v!c~/Z%M"F}NF ԓ%cn/YG &{N+tpQ҄ᵽF! HVWl#I(C(p*71$L nY!-؀KФu4;<Ll9oÃ$] 2=n~GctK8jKFrgp1ZAEA vFiC:d%N8c >/~\[Gjw\T'\q #̍{ tC/%x.^k/N<#CE=}c/M(*ez: cE.I*6󻇸>d̵ g}e4̹˜o, ]N{m$+sk"Z ^)7>*#7fՉ=;;{>xwyyk4ʕ+fqqqlV66F#[h/Jt:& ?dJXGF)u)"333cͦ_8xOpM:55hǽLp.tK V? IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/application-x-executable.png0000644000175000001440000000202411323355446026003 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIMEZIDAT8˵oEǿ3;];~*c;nBS(m)ATiZ m- \@ "rxBBHJy[vgnDHv>7O/|2^'o}o=(o~Z2;؄p]?kzeH*1=|i?8}!3H,koLd铠ׯ:ǁq۴籜޲zp ȰC^fϡV0  cp:5`us>+W:'ous^eLmyeVтSaPB0@ JG|9qXf.R691tv4 jD!66->#emʳGZ!gdRnfGE-j)'|hp)o*ʉMcueM&06eoX)6lA<^`1f -c/ 8`xn9IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/package-x-generic.png0000644000175000001440000000153411323355446024373 0ustar alexxusersPNG  IHDRĴl;sRGBbKGD pHYs  tIME #cutEXtCommentCreated with GIMPWIDAT8ŕ?\Eg])beNDo"""(6vFAzD `eYmۊ e@ ɒ,f!B09so|g﫷9=ĎN|imd#Q}˟'">ldJ>2yҟ|{<Nzy.[Ի߸ eBv\M0ϹgXOOqב)M2N6rn,6)ǔ p#gοOӖg޸ +KKxs/\9ʤj.mH!Pb <}1bKخm.kV] rr ]b>jl\3;C*r1fYr0ez -9=\.y)rOBly f|pN>Uk˜:6M\9y 2UL1z4,K}4DU܌kXVsfAnT}5;/ M`v5<Oҵ4m @۶kca ÂQy,>u0T FnM.Ϡx_ys8΢ۛ(kK6K(]Nb ;\>U |ߊoU޹IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/x-office-spreadsheet.png0000644000175000001440000000145111323355446025124 0ustar alexxusersPNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<VPLTE!!!999ϨݼvctRNS#&MS\l>z#$IDAT;nQs{"D44Q*`Y԰ *$`<9bZæYg@]9;|舄(}PΞv˸ &E$䐈0Uz*/"f߼ Up?uٺ1KHׇf'Im|<]Tpl2*"ۮpiκIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/text-html.png0000644000175000001440000000166611312762055023051 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<3IDATxڵOhU?o2;6viҒ6 )XTElpjjzv_ Αy!./>X=NCk:*eFya~x߶\i %-د.4~N$ba2ÉW<7SӴ^`*or,5ob8# Y\wwvblQG26@4K'89>snFÆ݃zR \/!A cjܸ[KXz.1CS\Yd< ΀df2hFs miոU)Z  #s"9DZz &|v6jT.8Ɩ 뇏һX6f!@Tv;!ҋN4McYVA74>|+'Wxy~s'.RBsf`,`Y׿-JWdh+Ű ~dqO5 96,X8ۜ>@XdmmB^6UZ-U* vFCV*eW(K) @.LN7iOUh^Re%7VʗѤQo_&!_2 Z$IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/application-x-cd-image.png0000644000175000001440000000173311312762055025332 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<XIDATxڥMkV_]}f$KNL&4qB]ol %Y q ?tdotu$Mp3Ituz3;遗+>=G#,KC/AY^^'kZ?Tk1O-x4:P$CVcvvvax*6(PU 4ZU9B6ty0!3 \QW=WpNq)iO CZc#o]$%c=B[/b/rpHE`tkH"FgLPtQ489:|'0b0-FP ϳiy<LvpsƁ]J0nBtYRI5jgt  H"YÍWUs޿tIȊNۋ`擁zd]/q։ hq /ߓ 6#KsyH]ʄT}W(@|YcSPS덦8~B=&Kz0'VlׄE&xȳ,Sk@>$ )I)5Yipa!cCfg;>8 OZ ӁKmj FT28=st=r.~R/Gh3 u]yNHHDžJRem)xج Nlz;;;!h4tYp}ݣ%Z^^T'Jpoe`nT#n%<::nWVU垡[ap91d&$Ir?Uibn`'_bx<,L>@ 3<||GYhN`X+e Y. bMH?-9?frhxׅl~0>gzYѿIӋԥL5D/pzn\:fY8}V  ȡ5ef KV1JQ3h2b,m Ջ2dki7Jt|\X w)o ׶XA`_ WUZ;;Hi|"|O85A/{w_pl ou{֚n@w7~;&Z/= n[Ɇa0p2"0`^JRH$**cdakԍ*RW2PTB>gBa;)&9Xcu1XfBHӍ;L)O|7YȞn5Mc`EQP}jj.GkG5~!)LI O 9< =ϋk0_?M1zo`L6)IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/video-x-generic.png0000644000175000001440000000160411312762055024100 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵUKSQz#S&Oi24"ShЫO"dWD"3={ "fsnw;x2Dž ?=;ws>\ c X,* ?9$eYR(iN2a|*ji ȃN#H@\ ǻsl!) s`~PEߚnH^d2*§eϿ+(,r,یa||sso18x'O\SSwUNBP2ё8QWCcq3Ni gyUvѠကi"ׅ^ͼ?(IԂa?M4xh葡J3"r},>0xhllWymWQBI`@gAtM֯6wlE Gi~8*+cKKKbq~WY %%dn͗rUCQT(F L2ƨ \X6ķH(x< Պ?Ҙ .1m7:A\Y@Vg\&ԬF &Jc2^__`{7!lZ&E"YM%iQ9,LD"FaB2mxvbojULOOM 96sƏKʍ䔏$b, p8̼^kZA#-񯯦 1HGQ2 oIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/application-pdf.png0000644000175000001440000000160611312762055024167 0ustar alexxusersPNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE!!!999ρ33ssի99ڛܪܷݙ,,޼LL22CCNNᙙ;;qq⛛QQWWJJ]]ccee00UU鏏uu눈뫫봴뼼~~퀀퉉PotRNS#&MS\l>z#BIDATxmWW0apV{ u[VQ 5 6n)'{Xsfp_ZS,?ˑ27 (I Qk\QDRՉWXa m!q<ѕ,|ݩD%Qk@~2tE[L w5rrI;gو`@N l1̂( (o ZECLf2Y֘.WPOݭ،r+Cp{i9X  icF" ?zci֕ ;dLzݩm>Ul ٦\{]Bi!P-l< u/c|Jq}st-6@qT$u1DY ikiHHXL ЌR v_IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/image-x-generic.png0000644000175000001440000000160411323355446024060 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME 1)IDAT8ՕOEޞޝf1D#Aѣg!G \<+xYL uuE#nc&̄=d3;{ig2hbCQUۥN, ,cX91Qy>M!F١z@: ,VGgÂI>|?Q)[@oeXGm#?Œؽ`IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/text-x-generic.png0000644000175000001440000000151211312762055023754 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵUn@=;vc(} BH; 6ln,݄?`۬hDUďuZ+D7gνsmH)qalТ+Ax$ Pa$"X1"MSh4FF=^9ömhLvLxE!fWżT/,CFh˰J%B(ժV\L̋GG,VH, v8i`2IH13R;풍=?4I@ɂ37Z[f2 !X&w–[B D`s(aa5Jd"@H R{gg(O9ajdap\zBRi$!LSm-La*RL'? }k5fO? T'뚎 jcUrp8qMF \Њ^3˭C (1'ꀨmôq'+S) 3dp.<4}}k%l6?mnn%m_Rml8VW( ~ 8{{{n˝s\ >.GkG5~!)LI O 9< =ϋk0_?M1zo`L6)IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/application-x-rpm.png0000644000175000001440000000204611312762055024460 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڵMhe|v$E-JꡂٛzOZ/ţx 7QE <*-T4Z4&mٝy|L{H=D5 P Cjźj5\r<d Qp~P(& *u7^S&M emI@rHIDR|5P!h;DҺHMJ@ҸAJF4Q:.Y"m~I'#+,3^h-DqZLmT}zHi断4K>_XFXo'8 .A+WM; /-/,S'iWgDkx|:Z0C>cqp/2oLeNIh⥟fxday1XPSxeS0OQ oթ'<=6|1fjl(% vԕfp>x'fY 7[cfׂ9 ffjYLm*M8Bڮ譕ۡRr"E?C(Y]Y Lg`IeM jv&)J0@KQ5]jml׺t n7MܣlLa}I<ȉ ;;jkt3IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/x-office-document.png0000644000175000001440000000121611323355446024432 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME  &IDAT8˵MkQs&&,ŝJmĈB"Tj$ƅ??&C\0F8bR#&bn&Lf9S~\)ns͵;rdʕ%Fj5 sI&)l677^DzA/^8GFU-[aL?VW2UptӼƇv@dW[G:M24?w҅y2 }+4xT Sۭu~v?;xR4bOoh 96 IP .@Zx.Nc>{nƉy.M)D`*d,J&8,8>^ϑJlR}^ e4v] E /`PAj'S}fKKז.Ob "TL}:80_tDP[DVp:'OSylg~#NoHںm|g>dfIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/audio-x-generic.png0000644000175000001440000000153011312762055024071 0ustar alexxusersPNG  IHDRj sBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE$$$***883999DDD} yz ""$&q'&+ 1'2&44:w6:= UBZZ[%`1wUwR}NzԢښ֩ƭѳ߹ꬽW:tRNS"1589;=GVi #*IDATxmѿKC1].X-ur]EZt"qTGApE*>l9H/ \>]`qPKO3EL)jg61bkQIYÜ%( 6D U" #!T=?QZnj*éHlOU5K4֞TxU=7by'Y(W} xiw~LM6嶗X{fKa`Yo"qR !…)٤pԔI!\9WN9&K7AU>wS&_Η/]ZG,?IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/mimetypes/application-x-deb.png0000644000175000001440000000203611312762055024413 0ustar alexxusersPNG  IHDRĴl;sBIT|d pHYsaa0UtEXtSoftwarewww.inkscape.org<IDATxڵ͋EƟl%?B=yH^r0~EW~EF&ٸ!dgLOvw}VΠۘl;O[UyR Q,Rqv&yy~[H .<`z;\sO~ܻ'#G.*洊@Sy6бDh@OO+>9{q&[Bp Ӻc@✴փ_ydl|-Fv{snxϾbŊx[۲ؐ##+,0cOXوPQ8Zd~;{ Vnpo `LVt/`8B#q>z+kAWӅk}]^.R*0׭ZN$b~ /x#oHx՛H[m} ,}}zNy['^o4cw7cgUBu-pfhNęg JZkVNN3ŔyҶ(_+1(ڊ[fMFHp} H|;/b[IHMa0eN=f/ӓl(0"(.3AAY16%̢IeX~˿zynەBfG*1}T ^Ox oSXv:!IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/0000755000175000001440000000000012675717727020600 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/newaddition.png0000644000175000001440000000150612405254001023561 0ustar alexxusersPNG  IHDRĴl;bKGDC pHYs B(xtIME \IDAT8ՕMkA3;M4U6TA BMZAD7vϝ?kN8Co\#;pEk@pT|޿tzI81!K>Oa`V ^م֒͛|׷,C9BzbڛE+SN#*MF,'Lgn\ul:(Ud__4'\}<ʥX;ץF(+B6_0_]kQj)&YCB;qONNضM"ѻdW6fTv+٧s|< 0(f˝k|wJUTo3cP.pIl7FXr:jRS?+ Xٴ*"a)1h Z6x&*x*}cT] &``0`Ú6#r p"K_ҒT]g`j1IfvQH;P?@OҾt;x xsmh(&/xj9@XQ,%hiP7*<2B)9Q" pgߞԃ`.Ā+F|wgxp (W J X\Ӏ$y_pc}DIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/dirmissing.png0000644000175000001440000000250112405254001023420 0ustar alexxusersPNG  IHDRĴl;sBIT|dIDAT8}kTeye朹쬻ͺEfJeJJjHQTA(>U D QZy+$Uwݝ939E xW츲dZu)@ a҃ . "1:4Pb6n4U!u۞rk|y=pxR1nT{{g qC6N#-);x0̏xNyЅ>`IWvhOž,l,dUJG$fE4s|kt.L\g}S`î?fvV%TfLPcXGFZ s9 ,óZڻ &ZO7QBg SůVPg)u^v>rk|z \`%#TysE􅋘ngVs4L/ og҃LNNb͞M0D`V+ R!*Qth:mw,'zƦ.1ZVoFFD:gc~D̲@M˛A] O$ ۢ"V%kpo:2tgQSLn۴ ʹ$rZ4 `bsak2 t=R':~5}3zIͽ;B5"f3H%J5 8W R!A(q#k[=+B(HUë;{yZ &Z *CRC/|0YdU#44#&c*iS1r@A@lqp#>.ɟ97o3@1!%@Q XAId,{M +39Ʃ=}V|h܂leTǡ'x. C]C!!T/C͎зj>9MX$#c\>AWny ШMW@Ya Ka |zljrgB&~_;7) \!w ^<_n@@#a DDc "=2vEe7/]pp07d/,uFwwkC8~kRj1xcJ&@o υ&$BѨB} `~ H4 c`]w|h|gp6 yO ~< ;w! 3vh_nHv@Psp|.\zoULCTq6YLv|6IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/newadditionfavtabs.png0000644000175000001440000000404412653161145025143 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs  tIME %/ΚoIDAT8Y G< :R?!'''_ EH0(213_   .  H( ,x ) *@?A¿(YX[_]b   } z~IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/submenufavtabs.png0000644000175000001440000000134312653161145024313 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs  tIMEnpIDAT8OMHTQy34##+Ir6j*DPTmrS s:kQ\nl6fJ4QDKTTjq~n u~fpw.\.C]x/,,:ܣ;u- !D8Œ~~mivC~ew[?}騙?c<ݥ>nˀ0l|#oJrb/:1@LLX+\nF`C1` pεCYM_Q3>rtWSDhۊZNengRwͭ#-|BXIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/submenuwithmissing.png0000644000175000001440000000402212405254001025214 0ustar alexxusersPNG  IHDRĴl; pHYs  tIME%#'XEIDAT8YƏ@9  6n@6E  ǵ[ .  ! 0AGڎ 40/-P6 >#444տ$/ ץ   ֧ "K)4ϙ.cc Gٝ̓O[͙/_V A@b "@빯ܘ8)Z`=: $xy  2-\C6J!ξ-h!,"ISr[ŷ  # 9H.7ئ 꼕EAl>nϥw-MeҲ 4̜\Lj5JыV ъ҅,/58Qڪٓ|] :9!s"  3 C [zB9 +`ԩ^֠ C! + %' >c1OIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/dirhotlist/submenu.png0000644000175000001440000000266012405254001022734 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>\IDAT8˝{LSgƏdK\F]3Qn"v60a6qEPEeB+ WטŐ- Df-r)E(޽=t %os7~=|F{13L\ZǛyn%Lb]"JUՔ1,d.kuCʴ0{wHS]]8^9ʸ.kI" i0) }eRVRVCW< DW<TE`B*j'+G +=H9؝msWB8į407P GG;q2aQ1$?eѪ`KV4m}*FX;ʎ*$@㽤Nص5s2fdԝJx#@_Ŵ(078ù0+gø0D=e(F%eį fRaPUzjgn&ּ'Ȋ`N$bO:๨}p6w4KHQ! G:fnC/i6=FURfl(Ǚx;q˂Ii<b0EҗX mLج僦)Cch8|0k.Af!Q/Й4T2誉y=ϵY^䣖$ƂyŃ[ ;G/S4ےzZ.~nվD}3Nq#`qǁiIhz <^XZ)"4kÇzJB>kJCAZ"!jquZY`v]ALN͈J _}pvr7;}݃օ?|*;`A?/hЧlqz tw, K d׏s=ŋ2)$1oV10V., gBjveqzq~vn{jvht~R\cgs|mzkwhu~gs|NW^%*0jw^iq6oIDATc`F&fl@P]]XD]CL\BRJMSFVN^AQ YGYEUM]C ut M`̜cb011>)>.9ƅ5%5-=#=#3+;';7/ =ȍٝBILufp:}Y4N;o -^1qe;Xwz'Ml]m{;w޳m> &߲ ¡^ ^G[p|+8y.=}Ųs@`iÎ]K\sUr5 ?!0(81GDbhj";Y%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:12+02:00[tEXtfilename:origKeyboardmtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/list-add.png0000644000175000001440000000060211323355446022241 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME ,+IDAT81KA;OPl,J4! I [-,lr s!1 Xd`af=vVc>jf;q`iݠn0V?575)w)C*.O2"1o\P@Y&v xz~G3agΉ„l=wzS6_ɽUZ}ET-cG܆f%Tn7W5Gؕ_F/-[->`|^4le'IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/edit-select-all.png0000644000175000001440000000120511323355446023510 0ustar alexxusersPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8=@$|(5'(qRP IQQPF'Dh(\K((`O8nzǻϾ3;EUeNgًu<;` "_,߼s*h_0Tcc4" 08n 4l6k_J=X,h6a "ɻN$$ܖ_ "|$JX~~k|R0l6{fJ/"VLym4^ JUJח"8`0(U[ǥmM*Ae&'R EQf-NR)|Wm8:UE$oZ8t):BDIJ,g4}y><uy<} q*RqEՊ|ͫ}Q"`)z=SJpyamۅ bnl.k2x*v7.WGbZ%#nH|p41qFޓ3༉H8fo}_ a ~IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_comparedirectories.png0000644000175000001440000000402212467744673025120 0ustar alexxusersPNG  IHDRĴl; pHYs  tIME !NIDAT8Y x3 C"/<$7J   I&'& 9      ?p1  F^- _) ϸ-ӆ (@n &5 -TRR_``kc`` # $BCC(((خ(9ڻ%$Hyxx "!!~ 2_ =84 ?I(*  3 8///);%.3= Uխ\ѦQʐ?*iKXٻҦFDD$""+gq-444ͅ  %SSS ABB!!D)3P 000/ ̊5&3 *.rX%F!v  i  u -AzIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_filespliter.png0000644000175000001440000000276412110457565023554 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE 8NGgAbAcBcGf 6K ^i][[dffegtvvucZt^x LkjihijiiciНߘݎ̋ʘܡ̾yluhɻ¹ncs`ocûڞtiq_ubshq^r_p]vko\o[mYtiznxfwdubvcvcubuirej[gYfXn`՞߀ո熸ײ捼٫ܣޜ̇~{qzpzpyo|q΄{hYucq_q^q^p^vcdU̮l^r_nZnZk\Ƨʬj\tap]p\k]˭ͯtbs`l]гj[wdk\Ҵٺm^k[ַ+(tRNSGEvuwwmjjji^\\\mw\x]Y@8C7@-YbKGD~?As pHYs  IDATc``df]CS ut,-MN.C#c 0153 mlll]llx\=<}||7W^аP^ظ$ HLHNIcOK/.,*NO WTAUeEuMi H jZZ;:{z{{:;Z['L4yiӧO:efΚ=g /=keW\zի׮Z~ò›6oٺm;h~7i0ٻw>|:vN:u3@α(qsϟpW^~ 7o;wļyCA'@/_={ b?~- %-#+r*PSv&zZ%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-07T23:44:44+02:00-NtEXtfilename:origFileSpliter!$9IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_comparecontents.png0000644000175000001440000000276212110457565024434 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8ˍ Peǟ^uezYKvWa8O+EβԼ6MDj0mcCL 6a/ om}yv}Ϧքz"5xDj$ Xd)l̅=-0-hܴ-Ru@X#RdON ѼUeK7 Q4wAGDU܏6P@ƸgXpbUɆ VW4[-^'wC `ژyg]6m= DfT#\c3q,`O Aq"7M46׮[6QuÊ;Z,~L}lͩ|z:po?8)-,tۙZĤ}La$_/=T/x[rpH h!Cҥȯ^)[pl"WȣvN*RL7 E1A\G%rE$@2/#n Dۗ^7\_]Hj:];)V6鞸=ĕ&"Sg "|=FPG ǁ6r/,Pa;`w'>qrEauz`쵢dUam6 HAJ Ff%;3{'8IFkwڒv( A7\jEōn.J*yy͗cR7#YM\h2BeF3]svކIBuws g*hΊN8U"i8Z毉_ %s4J[-#P]B} ZhDA_U{vde;8(~MP,Łe(nU6x`qxb^6yWزl,xӦk--94Hv.K(IEv /2@EUJ7N@APRmŔ;p F2cDB G$#ؒ-3 #k&j{,vėa|`>S¶|Y,^J{ď33&Y2ucʱ|;=F^ & p?/@%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-07T22:51:52+02:00tEXtfilename:origCompareContents8"*IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_multirename.png0000644000175000001440000000260512110457565023546 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>0IDAT8˕[LeG|1M&Z/h|0ŇĤIF}&5F x@ piʭ(vAB , Zva]f37feؿ BO왡M&F)5d0Z[_RUR;YF[5ü!ʫN("MC r;Dp8x<+##-GN>S[nP27NcPo^S! %.ˑjNg粎"QrTլ.mbޱ|x}~A`S6]SmHtL})o͐Tp0k@{3>Mj|d}*8Ǽ^8!鞂yv|u!a|}5 MgFX옵crzO7*R>˜]*V_Q̱ηS~ v sƾݨiLxbRŒ"-.Yʼ2N/h'ƾ d܄{ (RYXM-{P_́~yC{ ! H0_;s 7H) 21 z~kՊ z?Ā 4$ b(mE/2#@n,E*@z@K }yHDrVE ㆓vaqf=1?)H +$+NW:^Qְٝ*VerN$I] Ǒ}_3wA/aR%;A<ժT*qDD.m` .ȃeYr(ʵU,O~)c\ʑ含wl^ou{.cf#þeq=b=qlFIi.^dž{E{LǗ/R>c' O#=[Sb%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-09-07T00:11:12+03:00OR|tEXtfilename:origMultiRenameфtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_copynamestoclip.png0000644000175000001440000000302412110457565024431 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8ˍ{LWْ]bl1LvcEe)"4h)-RZ-b\, HfJ)dqS+"~;-pa7ys߽vHYwkV נ+~Z4f⪐&!}lZ%TDX VA揬jRQY/z.!C<A0d!؃fQ$ 1HX4#~p,7OPan޼f$*7`6F>#؍pE"{К AƜАΡUg6}jGx usbp δ >p`tt v#.Ѡ;]Z,U=KCUpff##¡g8D=M NCq)=ڬxcp,0=~v@8t0.iDɤFĮI.X :jns'6m=gO:? &''N n0r-?*)S.3LMM&S"n2$v d''~ OlEl"#iwE1=Lm"cC0Q_o"^WipEq446`>^񌋏gG??cbqq?GDF"/*%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T17:12:16+02:00:}tEXtfilename:origCopyNamesToClip;IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/system-search.png0000644000175000001440000000236311323654424023333 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME uIDAT8˵mlSU羴kGlD'c"st@ Q$!qF&F3Ad|N!pQ?2! ?(dPCm]{W~{=vI!cI=?O>b ^ 4mkSsՄ2J!R{w7 `xnӶg2k׬5f0<`M&L${w7y ;?1/w5nzp+߫9,KT* Chn*Ŕ-oo%"ڰj-HOoSjW ч 77n5ViF8-dN͓]FųQu'Z^\HQK !z" -D"#MZ!EXdԢe tQܐ jh%I I^7 3z,r9BrcȩKF^x8O fQEk0Gls 5o %zgO<#fSJI|8+1՛қ!B73D(C ̪Fz(JLz}g 89%`F80&0F͌P;%0r2ʧ\Xpv;y"U]uchnth-IuZ.8]WV8 1N\һrÇ/&Kk^ϞKXflxݪEv 7g U53˦]8t~^NQ;P=snvsG?>}sKR.Uy^p;(G~t5: !c,[QQqѦoaFtuuRj\؝bU~8~࢏ gH J 7P(::Hd] ;5߿hjKKK_X^y$Lt=n}][9W&ba5˲,>o{rZ53 SmJ{{{|whс>f( C}- `炅U=^uDeL0@qxt5bݘIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_restorefromtray.png0000644000175000001440000000202512110457565024467 0ustar alexxusersPNG  IHDRj PLTE&u%u'vmL?_*w"sL6^+x'vO'^ 1|iT7F%t$r0{<St&95~/z[v*p^v7vRecfYF?~*jc%g:xJC4F YqTnPkPjQjjxxǬVΧMRi؆%vk__׳OlPiNfE]xC[vC[vG_yE\wASgPe|NczMbzNc{]lqOgogH_yUIDAT8ˍ Tg0[E'jHZ/&)vD%Z/\+L"orԕR]Z{;9s}??= w]%7äo )HPܤs4皇rd0Lv3`&ڈgj{Fck!Oq[^#u5DlY72۰2BBd~Lmw8. dv)$yd_"^iHLJH56CDq'%/$\[{f4c<;nSb28'#`o9!c2S d9bnvc۹V\.#ssFX?P3}|va-'X- C~ lwps4rbUsjF!Ux756-W`Ix% &4G(L F_IJPIT4kfoUi3^=iD%YT5JnР1 S헑Uu[R[0#'kpK*[d/p5,| 'dk uNjB^mQ.eTD7jO c2: %U quX; / }5_O}$zȢZXd#z\wWoÊu5d"bL.TNLZ-u;%V@#!p=1O !WdU,~'T׋upHl <?^i61͍5'H) "?FuuMtugKp9=_Ԁkach3=9 ҧaΨyv.)|Wcq#8t Әܔʆ9v<+),ypJoIm1 x?`w!ٰ1inhރ@)ySԓs>]R>CdI'3`k Y({ЃΗ,49v3[L9 6 I0*O2; OpIϷ7!|~nW 49?''yqs5mb8?Tg=c,G{u b0I'}ُƲ#v]lǞ' /O'2ѥ^Umiq.u;n.R.LOI*hyvk%rf9<-ޒZ$zEJce7+H0 .d/ӿI{sԴutNY]a- 4셅 -. V1F00GleԌy?j ˗%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:12+02:00[tEXtfilename:origAbout tEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/go-up.png0000644000175000001440000000155511323355446021577 0ustar alexxusersPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8Mh\U~y1Fd,m1ŶBЅNRl) #.YKlRAp+?@\u"P BHݸ 2&LN;3ȼRK9p]=+ffF7tl6OMi'K;Ajۻz1b`T~`hihϑbϭ{'֋bp,K(ϒ{tƕVȷoD_޴Gƥz7āgKWjX|=YΝ wxpRSgg{'-.\gx~]FRgzURj~Yk|n)C[wӕQkwCwTObS|`PxYC]=}wU ?f1NaX =i BP0#y}vW'z5 8Vg__W5ϕ`0AUV~f$wFfЈFm ASE y^B +8o0N)6wuWȲ9)dk͸ B(IhJLQD "Jˀ|U8;J ", @$"q6w6u@kz&"g $<4d$S y6;Il3lIs$WI ,IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_loadselectionfromfile.png0000644000175000001440000000341412110457565025574 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˕U 4i3$b0 [jiMbNԶ(6h !---EH%ab4.cߝ:[:<=#94D}~M3pec;m(x}sЙDKHK؃|:#u(D,7(^Ar`Ab-}owfnKY:5E潤FovKT}o Z Ҳ ɞh|vW+WVyo?cIazaeÐB,8k-}ԑȅNCyAT#hOnJsVQ0L :AI YV0=0guHUM2]Va_Co@\_ DXd9\ r⢿ Ѡ;͙0`.1gOlY1CmFV%PU)LyҚrh,]B2,ێ*RʁD*y=6{<^ ?e5ۛ-4wh"'{!/#maSEIMFMbl͂^4ok9_' Iy{`(g \킞0[3UԻݹԵ׻F8cB$.Rw-t|S񺟳[A/$qt8׭SR;FZH`ΎIGm([h(ώ7V䨘knw9@z8 y$I¥ }ϡ+15*Nf'yH`,l1H[NծكГX3#Ѵ/l`(|lηXMk$aֲ׻I?J?k~kJda}hHUp6woNH)=<[gpi*0KuJs #F `6CE GHoXJПSpTvX:eR}q4v1zybj'smG f捱%zk/p-w|ZYK8~^$p`_ִf.uVX#ΰj#G-D5  ו^>뫊GpJ9Ƅ#)ڄ\@`HU#㼿a"95D -C`$ %UL /w:B\1A] Кs:a䯣 D)?)WP6)=L8y;t9-DO&]m T3`B&!!PCUHTWB{%iGOo@ڮ@k(Hi[8 @]G)ڂ5ȗD1+j..n^w8+ḫxgKP%F0F} 7Uoe9#QJ 'f\%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T16:53:38+02:00q/d#tEXtfilename:origLoadSelectionFromFileGIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_symlink.png0000644000175000001440000000252712110457565022715 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<yPLTEhjjKGvxx̺WYY⵷gkkOQQᶸ෹fhhEGGOPPľ8::8996 9ExCLHzl?u=6j67j98k;9k<:k>VWW;l?///nooghhfggiikSM>nA;j8GxBGwCGxCGxC7^6ݻϻκϺrssxvr|kKUv*{2`KxV٥eҖ[jPܩ̸ӕΈ:fJݩωp(=}_EИ`vU{vFЀߨߧગ\tPNJFEGNpPXeFtRNS  _LSSSSSS\qqrT {:#$LCbKGDCd pHYs  YIDATc``eswvNFo_^>&0{ 3CCB /,LUqK]JĥX+EAEq Zh@4`$%leSA]BrC҇N{g>sL&ߜ~'_mt}|zjUdZ wV ǟR%h>X.ХGu[:0o{oELPY߁#u$!' "I!>zUļ%[Օz=JEK> 0l. J9_E,J4hgr("^;Ϻ{p:ȶE_>L {=i]%Gq\F(]2;8mTjђ$Vsv${r[Ɖd|>}^BtG?‘3gsDžX4f&;Q뷑Z)jHJA^[w\&.]ҭ*:{c3wTútq+GJq'r1KOQz㷒r(3X+›D䗦hsQv#TZ\*ZV`úih=)[.' ˝UPx^Y2\uT8tI`ph LJ!y_X(T34#gqjCJhԯ:XK5kg@ Nbnd"ʆNE8 β / !8?>>ē 040nQnibMY1 'I^?Cj[d]T.$L6j4}C >ah<(c@@ 1e Q8ḹ {N<& # 1sĀ=l`"~p)?S~щI~"^9*XH̯p?Đ SJAXtzXr}]lpr ''99crx='v>wX- { &$&Jm70:7>g\rhVXX o2!<[7k333 VHm~CRK aӋx%M5k y9SjoڇI~aa"/V.olmbk^3;o5[BZ9RƾFN,oP$o&n M(k|B{ k۸kiBs3.1$ ɓ=K!`t`Lgr|7bK_`lt!^`צޢ1ILLm5Wr YZRu0%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T01:01:02+02:00:9tEXtfilename:origOperationsViewerIeWIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_editcomment.png0000644000175000001440000000223712110457565023535 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE;_[elm;`_-[S2s[hkjRrԛrQs%SnO\\ZZUAk$:ff$: 1W{qq2W{ ,Qshi.FZjcd]%' Cc!!UU^9Ń<@//( P 1Rf< rbKGD hV pHYsHHFk>4IDATӍ[Aq'-<ƱN{C{GFFFD)]s?'˛>/B5Ѩ&Cgsfa`[j YBpM$d,IvI(Ke>_dRLpO 9JU(|V#R)WG*hD/jcdJ*Тӧ3WU2i=_WsَNps[,ޑ }hf0 >>="oCFV0~|OL"S3&X _@XoXYY[Kc:{D}/ n{9A%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:00+02:00 tEXtfilename:origEditCommentNtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_restoreselection.png0000644000175000001440000000334412110457565024616 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˭ PG"! @[@*Z4T((bj!rQ 5xQrQ$  R gĎ:o">B4PIw/TH1kC\vFHkh6ŐՁxTʜѧ.JK>BԖheQ[lt@Uk3|ssWGw3 π竼2YO`Ş0^Ll>\ʫ{&KcH-h'%ey~} SUbx,zv0un~X62R=)Rπb R?Sp^pMԝ1di;o*!-3} =žQ 9tvx'5 ƓuS3¿KWtrn\ }5ˉ" F EK W="b$--O*&sɢ!cE4/ #d ]IyO H%x֑ԆL̒ 'd?-#^'ja0\{h9ޖMS8Nochӝj%ńGC ,c|ޮܽdM#񨀕{H-:ܽ#=oyIa~`hH2.88|{D {%`60 iG@X @T`-^fzkB+ʲn F3E,c?$6n[SVG_96QDgk :be%=W 돎I5mn8pR6Kdǧ=ҿ1VD9N4j 7mav ЅuH5ȗx) Tg;ng 6_dp eamâ{^ Qvg8+,"^6KU1v/tf~}ɒu= -鶵\JTeϼN.ꅀpV#pVչ5+E\A[ *BHH30_ۨt٘W й '-pe~6fQ3QS)%8x'?oC17>zȒpX>^)QzHkn|<9"K;`%휑ە|hYQ%C7qV^Ba8k<4c4]!meI$%V;z]h:QJIDAT8˕{LSW;IeLL\p88_Mdnb ˣ(Yˣ-+Uˣȣ z *`$L\2 <'>s YhN[liӫ:P^A_ Bٹ.XI)2nL%vNm0AsVGXEST H;ˊtS g00:~1N:6keZvYOfcq>^!?6x}HW֓uˊ?+j(8Ě;ZB׫;32beb=9jz(ж㺶zΈ{W*Rd]0'H:1t>8HFײl7K(À|)7uH}n!mQ$ e؁~~Nohf>T˭svקyĜ|8HE5v vS U҄NHT AP"ǟ k2Լ$(tܨ\BՌB k!. >/a@@iXW낓WPN-h 4`0 #KՎKj+a $Mxa[F :9[n321 F,|1y##k,ADoyq`ߺ7W)~>{k H5%Mq`2I(8?oxf Xoi BE<ƠUxYy1e_$cPTih EWG'߽tӆn/ .XZ-Qk4R\~cׇt>DBC*| jqXAs˼(D$7=UO;r'01j*:q0?|F2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat$Fc 1U_pBa?|VYF:tH-Wy5g0a0a0bDi\`Bh0a4f,VyMIKJu ܩFSqr ء:ܨFnm ՛1١:ik ͒&Ж,i `fkjgk`xhklxzz|ꎳ͘Í꛱ēάϕlԋ耦}}}Ɗq׿`_gZaqknks>o F6^>6! ;3ߢ#Ֆ6(`atRNS,,,,?;;kk?? <;,,,,,,,, >3 pHYs   IDATc`̂XA<|/ (I)QilbR2HJ +(JMQR fdfeedgee櫩30pjhVhis1UVUU766UUU25wtvuNh`bjfnfai5i)SYv NNN.g̜9k w9s͛ %\}.ZxR_?aeWX*0E88dk׬ CEO8?^EEj%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T22:56:34+02:00I$tEXtfilename:origSetTabOptionPathLockedu 1IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_fileassoc.png0000644000175000001440000000337312110457565023177 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>IDAT8mYPSW>LL_)3jmqa%\ %$nH0PF",W -&Eؾ3VX7 zn&7~w8)4>UPRk!P7^kق^NˤT;iܤp΋W"WT^aAqRE{FS9 F?*:6&D8!16Ud.%V{ ;;߽SX=""l30@J\菌 ryAᦦf(rlwBT/1t<g拫_qh_F@Ss 6cCx)`¡*vMlFVO߅cwP~/T{"酭ǎRIiiw oJӨ3j`xV=A!OBIhO`ҋң}+U?2,b=.!;vq@ @`VK%\N(rrjpFf6LrbQ>u٨P0+(z5ǭp4H_PI޼LX@YaXR*o#k`uvvڏٹ@:Or dɛ*{ V]!Ade 74jOz`{ * { + αZݟ²Zeojikc*pt\|1|Ii N໹]{}AjzO kgG09z}]7^8[zBٻ< NgA3pm~ ~] 5TYm8uG; 8,N( i$3<2:'}{#lIlj BWY qmu$a0=u x.֭5462pf4[c?*bDZx4AH%RAǨIl̍%9@(f r\p:;:KӜIJbb""뫬Gchq HHef q#/2*AT?asfA'Z;hmXJ] (|o^#v ?I2f\if'6m&cܰaÖ;vV1'AĚ^*-V¶nm/CL DOcHj~mgXvަYTcW#@?|3a_uYI^T87}hv}9e9NI #y%!#@t/ GnY|d6pYQR>G!<ߍkQ;=u`wg;lxVpX1=06>Ofr*9F$ {{WKѓ~Aâmܵ2dZkОrx>3; 9bh?] 1ީ.ǀxy sJAlpŭ/ɀ;AjG:uE*ٛL aNi Iv,ǀjP^{g޺7"xqo!BRo! >=/;d!5F<ژa8oʴEWfa/3&U(S@%<&yu(p\'&Og{8zܠ77=zκ]2a2%9X *cr-c1Ê!E: ]Ɯ3 Lj%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T23:31:58+02:00yY&tEXtfilename:origSetTabOptionDirsInNewTabׁIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_configdirhotlist.png0000644000175000001440000000377212405254001024570 0ustar alexxusersPNG  IHDRĴl;gAMA aIDAT8YƏ@9 =r@6E  ǵ[p .7p  ! 0AGڎ 40/-6ϕB >#444տ$/ ץ  N?.?  ,3`-+&304/0= "@빯 1*C! #2-INLK1UH ;(&$ * (;2IMt #> βo3 >߻ -  꼣!)+-''. 3G%"0ڂ 4̜\Lj3i/0/&467P7<6Qϳ %<$&$-)L ):9!s"  ůª!9JD1OҫpMR_B-cZRa^4$]սI$~hMքUlЅ2:3{fe"ˡ}.2>ޒπY3{٭ ڡ^*?[BTzJ$ Xߴ`ǵa2Y('-Np^;)ݎRFѨKgwRE)]cm( hFgcn3g,`Y-9c< GE!Ia57 Rݶ[?<.T۴b0n$285,U8}[`ο 8rUnV?K15H<by:,/%UcmOѼwH WzB&NA":2V C-_FtOXWՋ1?^Dkm%쎧!:7#ҋĵPi&!GbeaPiJUXhRjhm,r! ׃(\y[Zn҂^@RmRH.a:hLaBR"/p%%:HWxA\#0`bB"wLwGw~;Px{qKp;,:RAKC{m٘NY} G`1ߞj. L$, 0*8I\ŻM Ad\6MxaMץXF+hH4(zjbIӑF+FƓ0G]>/P1zY(9dY(&N1D~'\cTP p_| PNhK3C_izr6,)$&^)Å%SОnzakkt 29JgtgY#`jՊHG|U8r', b2a6̷"0[EI#$IHK߆ &G`a"/5IDAT8˽{PUo( %o1Zmt|, e1aA@UCLQ# , fx)oAdayPZ35oaAgs{}2ʔ;KCjj~MY0.J2Uұp1){ GaE:B \U׌JלWC3SUJX%M*}]IeC7l4r0ĝԎmfύ6vw)+U -!fۏ@u偸{2GG\l0de>Y+#K11uFݜ!54q߂Ei3gwNS>b m7(aM 0blI+ctuTZa,E" gafo8{Ʀ KLZG|!mMtσ0eښG0뀡,Zk gmX0bGj_Zbž 0`'܇}]K|.*0thht<R1 .xK3~su|@4؝}Z*zgBDw~wDi S{Q9o0V⎱%]OO7BXt t r+yX#$"^Y*XIlPQqd2߁SZv4Wpֹ -$;ㅇZgpLi/.s`|v3۰+ؕڈn\cChad?B@^v_lOv+||Qc~ |yZHXvH܁=ab :B.hiD)6z K+/b,IS37"@ a^'w~,3D!-`Pzga`kqmvrNՃ8vKckeH0!ѷ>Qk,J){Z[Y߁ I/ IUȢ4)l^pUmXEWaKH^*5)(KWs^jF`a<ս9 F'|-6>vJl=ۣohMkMa%Rb~loNoϥ"h ˈ arf"uCf;})2(WZ蘺{YxYx뱽?` [qh0&ʢ9L)&_8jE_%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2011-01-10T01:30:20+02:00tEXtfilename:origCalculateSpaceKotEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_dirhotlist.png0000644000175000001440000000266012110457565023412 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>\IDAT8˝{LSgƏdK\F]3Qn"v60a6qEPEeB+ WטŐ- Df-r)E(޽=t %os7~=|F{13L\ZǛyn%Lb]"JUՔ1,d.kuCʴ0{wHS]]8^9ʸ.kI" i0) }eRVRVCW< DW<TE`B*j'+G +=H9؝msWB8į407P GG;q2aQ1$?eѪ`KV4m}*FX;ʎ*$@㽤Nص5s2fdԝJx#@_Ŵ(078ù0+gø0D=e(F%eį fRaPUzjgn&ּ'Ȋ`N$bO:๨}p6w4KHQ! G:fnC/i6=FURfl(Ǚx;q˂Ii<b0EҗX mLج僦)Cch8|0k.Af!Q/Й4T2誉y=ϵY^䣖$ƂyŃ[ ;G/S4ےzZ.~nվD}3Nq#`qǁiIhz <^XZ)"4kÇzJB>kJCAZ"!jquZY`v]ALN͈J _}pvr7;}݃օ?|*;`A?/hЧlqz tw, K d׏s=ŋ2)$1oV10V., gUEh{ t <~A!@YY9 vZ*P8/ KJ @7ѨS݆4uUw tu0l9fx$ M=y=ʂn-I)7 {\WKQXG<f'rql&."·I~d y0wxNzNކBSQ^WJ9x5":z#eɝƗ~riKꮿ؟yX$ۀZjF(c%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-07T23:19:10+02:00 tEXtfilename:origPackFiles`-^IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_reverseorder.png0000644000175000001440000000120512110457565023726 0ustar alexxusersPNG  IHDRngAMA asRGB cHRMz&u0`:pQ<bKGD̿ pHYs  XIDAT(ϵ+Dq?f<ƣaPtfAI_@cXP)ea1%FXYBcEw&Ybηnv|ρ؆T` o+aVC)جH)gVe2Jj)[̐NJ:h`.8a/Nі) Q5r 2qFmx葼dQ 0a sRgiv4GPxgLKndj;\)BRtjxbDjW(r퓎gϱ6y20Z%1Z̫O2?PHCG&Ap:;{K KC%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T01:36:52+02:00 ˈtEXtfilename:origReverseOrder1IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_fileproperties.png0000644000175000001440000000265712110457565024267 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTEBFF›hjjUVXĖǔŗŠ[]]>@@899%&%}VXY;<>}~vwzrtvceg9:;|}%&'ijjijjfgggiiabbfhiikmdegTUWsuwYZ[BDFbce\^_&'(άֽ権аԾʞմ垠̣ޓŷʫ•ǫtWtRNS!" PE5Cpqqqh  !)^;*  /bKGDc +w pHYsHHFk>_IDATc` n^F&0㏌8A!fH|$$%BcRR -=#3+[B "yER`abHN/)-+OW@eUuMD.2`‘uH Q* MM-05mPОQQnꌅڮ>U5pXwP8vݻwoٰg:lh$ l|(;~gΚΝ/]7- ,m 񦓳 xzy1>0a( |t)%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:16+02:00'tEXtfilename:origFileProperties\ItEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_markinvert.png0000644000175000001440000000326512110457565023411 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˕ PSW/ QBA -R*2: BрX*jS@;jpaTh1P$(C V$aU$aM^N0?;w9s/BJkLƾRR?3meTqS3I*Cp5$;~jH6'>O4f:th-O.Vo #Dh7~V~(n njl:Б5êUfޓ]БtDfҖuO_0guJɵ)`-:?br*o/H'ik{MMp qmJ3׽aZ.,Ft ac]<4n\! ?'2F:M@H8]TWCr4%U7j ؁>V"q>S*/pl60>ޡQZjv%O7B7s%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T16:59:02+02:00LptEXtfilename:origMarkInvertX>IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_visithomepage.png0000644000175000001440000000241112110457565024063 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE~~vJ nkgfegd>SQ> a *&)a^kH79t`OQPPߘǠqɢsƯжŠrֱس]4|*Ұֳ^ժw0˯fɩyu꿤xŨzµåvw˴jѸə]ԣeiȼǪɝ_ȇķĨ–TްU´й§GޭOòʶ©rIDATc``dbFL ,Rh@MFVNʰ1+(*)*)e%Ev5u M8b u5Nm]=704261 [XXZY[;8ZX]\=<}|]\A!aQс1 ظĤԔXNجܼ¢ܜX.ʪںښʊ2pcSsKsk[{GggG{[+0ȅ O4yԩS&O,5mf͜1}Z\x/Xh͝3*xeW\j˖.Y ^fmk <|hO@AHX1KHb qRj6%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:48:44+02:00StEXtfilename:origVisitHomePagefHtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/go-next.png0000644000175000001440000000164211416270327022123 0ustar alexxusersPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<4IDAT8[hU5bE))('o탅 5ЂVAE"R|iII `Q>EPKiCZ )bK4&*54KԤӓe^>9u6чt̆5ڋ٢\ &ձym-76v/)`/Ty5oo&}?k6kMeb&hhQwYu#sN7lZlU}mʖӯȕ=2'Aա(N]Cwi`l|jZ{]NԞAőYRVw7{L),>u 1JDDdKiHdC4"ICb!-';Yq궆=AӢ`JI1.ҟHBH*Nb \ah nzp|p1dx[r?>S3>')jSDnXh40<#x,)gMv>끪LՕ&R宕O}˟>.PfYK!}9^K#fIwp)#~5CgsYn)ξ˫ U"B"g&MGZA*(AۀTH΁sK.S)SMR-'4IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_makedir.png0000644000175000001440000000211112253356421022625 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs  tIME * IDAT8˝[lTU9m[(ԂjP#Ih%A߬(T| * ⃄H$5*0mQ0_h;efz:g朳}DkGʪe(k A9AoʽyOGLܿ馔<[}P L2۹Ys@<<+7Nʢ3S6􍺤373CK4|SK_w c "iBĭtIaA|8Ɂg@~{ր`>vKhQDx'ׯ`ǖ_8ΏJD)I S^UhJ'кy.,m,M/mD1@u`q aлFCC+0&XJb0 <гmS#GV8&xU2ng|=MK  >5GY\q -pf 3h=/"6*|,´'j+psJҲl"y*ߕ27gzU>0WuɄ^7N?۾s?j|a1=Hf+peA*#N@&x%0TpZF zrln2|AXXٚ b*"0]zh5Iχ)*{(SqI #9^}bIHZN,VnCP7Z|.kpY4xmͪ?ZvL TD$,CqeEaO 'HVX;ΒnQy%Nt0wMA.īDzW$I>?pݡˮ97a15?8/M5ve'ξ<>raC9"oɠI[ӌ&0Y*qPGT,e~mly}os3e4֟bK1c8YseNa+6DicSwlʌWj<&fn̗톅'SwWnΏ5Y+& {YD%• ^ 3:ќ-Sjý* l#|%_TMsz^_X7>213[-]^m_y%tgi݊@'>ۋfO{o8Vl%.6ߕ@ܳ;S< -5g*Id CC3IXvƈ)-8NLbX@c8ō+pUv=EB"Nu[OGy `Ԑ \n.іRPm G4FږYygmAۂZ9/V⤅:"#wtrh3Wm*Ub^-phНYBԌ7eiBr(%J:T ?p60WM=?ӷ<՛CgNHThd#+{bANb+UN}#Hq|6/Wo(_wߔ"񱁀akc[irb)2klךT>hՆ1?e?.Z$-c( N7 MXIv1 nSGH B 8*'R\dtQ"|ZADZzdTZB2S\M ~Nz]Ql>&$teE1gW a/"vßex [Db{6m@_(UH5c巸gI(BF!aE.Wq( D>ߗ-h%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T16:59:32+02:00tEXtfilename:origSaveSelectionIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_renametab.png0000644000175000001440000000217212110457565023161 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE;q?J_`O>:q0?|Fccchhheee5L-N5!C2Kb0t9{SSfvS\dSZ`ScqS>/s.Lb"5=zdɄۉሺሻᆹއᅷ"4Do\[Eo 7\cmAd 3U^q$Fc 1U]mBa?|VYF:tH-Wy5g0a/`.`/aAeLasM^lDf/`4f,Vy3)!B=9A=::2+voݯʦcLONJy常bFKIJCx\>B@;w˱Ͳlԋ끦xqKXtRNS,,Ǥ/,?;;kk?◒? +991'" pHYs  IDATc`B¬l QNQ1q +(*)zDdPX[':&SRtYYY9yE%F@acҲʪںƦfS3.sֶή޾ -ml'M2u괩g̜5{̙sΛ`!,ZdX^>n~ ApPaKIDAT8˕U PSWh]F3ZEUPˎl `@DBE F-k-IÎ&!bVY. v\0GP[xgμ7wޝ > 0WFV&l!a)e&WvfTEɯ֚n"b$WI, 994_J#\ڬCpV= (=o;"|oPSN޿NsBDu6dTw씱'*OaRjx$lc[M^XE҇ZIJ5߻Uxv|65ۿ(OFZ}mv;%;L@-gWR E mHݿC+z|L/q=մK?e%:7ÅE|ؒ0Qt@A+BU2+U@3 [ xu-oҀP :%ȽCQ7kةyBR nL7|KmFw 6u0Bǒ0GL2#n,UŚj]qW0;[QnIgC?O;33c\2/6g\C R|N[Ea$!A찏-b4 %tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-05-12T18:23:34+03:00)8.tEXtfilename:origOptionsytEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_refresh.png0000644000175000001440000000271512110457565022664 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8ݕyLTWƿ7eXDdS4QPԀ`Ŋ:U1"R!TYf30X)JA4J)#(tib&5 VT\R?{w~{/seCj?\ $ykX`L󣫏X{٪ QQp*/9Jx'Qk'Ƴ_yUvH/CDw 4z5"p<ff4Bwdfm/vU.K &7JHoI7T;\#uX͟ uŠUPU7zܶ!4T1`E )yT&.gʻ4c~t,b3`h6{hNWe2CnkRJA)<_05Զ!o!*nSy5E OG5-I2p,݅,+2؆gR G֑ꪈ7Ĕ`vo'X`7,/)k#] @yzL\ۙJ |Y-!W9i苦Qaig>S7PE_lĘoɁÓ$ 9ѶtݮTI<065a~ x?D E)Yzq#r3>l,v61H'ۥb9mEdk j:N H?)>_eóʊJo;&ebuec[e5^)WHɌLqgfĞ&/³6!8 K5I'nc%v3%l, a?9gr $gF*EdeNIIo.?%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T00:33:20+02:00ytEXtfilename:origRefresho#IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_markunmarkall.png0000644000175000001440000000344412110457565024067 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8}T 4i]Y#^\ZDS!#-D2Tn-YfLJ4*cz0*B4fƼ<9>ߋ +a3:4@$HiOi=(Z /EzG1BISCze6rȚ-Az+)7pE=|ĭyhIGW4Ȇk~, w'tF}E^RtcmπŗНs!YG$HH}#_&ڕ d`>p鿢v1~Z#?5b/ܢ`yeILw:}y-@ouy"rΤ*vJN%380gDH}ˡLdp>d>-݅<@" /qr$mv]힮aṣ,Ou11竸EDyL f d^y YVmLϥ̡u0] ApYx3|OjtcQU_ߘ#8Ws xS{ .Vz.N><83ZgtVR=ڢ`7|m=>Q80_Mc܆ Xf| Cy?T|~Xb/@Af/ܦ/N(@79kjmj,?js2UreFfx3&)/m yNyDy 0]7. >xUgdlOf#YRQA 3 yj zCg>+:{#a $]7l1F%ol!*]0u%?@gv kV9'*w/;zL%с|LeIx18D?`C̖_9o 8@3OŜLT|XT.8|ͨo.y֞B)7& eQO g9M3+ rb|z_Lt K3kE? c/0K抂d(cR耱Yq+sbj6#I)yςkǯ+G4AOVEpEY!t! BW8Q/4 ^m,Xx\v_]H!KylONEፖtT-Xn > W` ȉ6x]?ziq$iue.:K-H_7JڎA4P}-:Ij⢛u  4T鉋$Vt%D2M4[w:\`U_Vg5C?mULGQNVsBeaqA џIDAT8˥LuR(a#2Mw;q;5J%P [LQASPBPQen6Z]-GϽ!(#IO>ű"!-U'wc(;c呓Uv.,<;Ͽ"]p;dtx_c̏A۽ѻMQxnoޔm5]Vs-Oݟ?"'jQZp۶f( ik3f= 0h}$-\ !_ZO2wrZ. >x7z;SN9 qq%}9|HX/ϥ%?{NsuEq#9@FanCtv!r 1W,S<5M(wъ}51 Hy~3I~\U"W.w[-cJ- Dl)V0@̎*cړ#'m *8Gy|+'ROuq VO(\a. pvN ϝPf}DH!c֕F߲AMNo*`2u L&ycp=?lZiC7{{v78+ YeҰQI/ 14+oX^+Ǒm_ zs0ILW4Y0(i= nU{`^HΉB-},˩2'7F_xT{Ͷ*1>V/-Ն4t_^={CcX.,w:@@T"͇A\mN C_.VzsvCyXaV +@\K@Pd7`8@Bf56RQI#m AŦDprB X4@MWk1\qslW:-}Dh\G3֌( Ee/z ~jtL],qA0iBq3Vj@vUD]::mvuU8CgvAB Jykqjaoj;.ߒ~ uVymNB˩$F3Q',:6*.ю(RZj՞ YYR9ךj?aK>>R G[!mDFJu>YZTo/G>T_$_?ռ%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T17:03:08+02:00S]@tEXtfilename:origMarkMarkAll.IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_thumbnailsview.png0000644000175000001440000000257312110457565024271 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>#IDAT8˭Ou&f7^L,z[5bL6'N/栛c:njJ"YLC9r(=`iVZz@ mhi>~Oz$|=O_/-^s]݄ f1StRg9 8)slbe)zBbĎwVl[yg,f)kWkP:b0lK`x@![#+ű}f0"ѧM6ۛp8,aait?;,=6 E'8~EN2`3 ny12IPG?4u8v4\ ZӅyk:v*.0‰[-A_ϡ\DŽJ9Lʠހ|O'jйEYji/f8հ@`ϋx/Ř4!TS5ܵdPe`NM1n: T tKX>rk%5ǰ@j jNfBR nNDS@(^-,oC|`18 4>̠1hY'HEaK&c)謵| MP uMpul> |V*fd<`$Ͱ~lD8\ bH\##VyG/3vHa#hDd'NЎQ82|b&y hF^?R?꾃;,|45Ys^I0L.R&dd_ Ə2߀n.L.ّ,LJ@-/ +3$k`W]HZ(}t?OӉs0) ύaYz" f)=_!:@NM: OìsxH4^O8;ԂhG߿B ".#[1NiPҞqp|ƚ R9 -/a6O_ 7 Xyj*\0_g)j8:&n zwNH:{ї*;{T'82k+sh>Z%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:48:44+02:00StEXtfilename:origThumbnailsViewItEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/view-sort-ascending.png0000644000175000001440000000064111323355446024433 0ustar alexxusersPNG  IHDRĴl;sRGBbKGDC pHYs B(xtIME)!IDAT8=n@ T)8}4oZ# qe%eZK9/tC bNREyJ͛YOHD~̠`Z<\͜e*(*A%$QW8-\qXx` m󾋂N5ܜUM(8PSQ)&HHg[NOoK9:ڍ^ΉۄG[WWkF46vfVW_stRNSOhjjjjjjjjjjkR3=| KbKGD37|^ pHYsHHFk>IDATebQF_9>:1:BDYp|n֤$Rj [:" v-grP,R JVgjf j0햀e'\{.nxϦxfv֛-Yݞٽ4q<|ވ,?L>@ (~pX$}CW=JQ%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:48:44+02:00S"tEXtfilename:origHorizontalFilePanelsrtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_exchange.png0000644000175000001440000000263412110457565023010 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  oIDAT8˭kL[e"FLD bLIc/|0%sc5cL.-sL r 0\J)wJ)@G-=m427NWp$Ua_#aT(=,3 ȓI,T#a>{Qׁz,\qP"-"*xSN36 LPi<2YNȵ&WfF-2m҂ ajRJ Үf\z J٠3S+b\!A冒dAh5#hՀ:OOcH_[e ?\[*PJyH:P&5R1jhJ0Į'6 #uN5$q2x'v,!=-Ƶ/$G7@FdFSC$#}';v S w~aiN,l}WCQ0=Q,Ǭٌ \r !<EH=.J9##/ N<1,L13@ؚ oĔ}hVBKz025 H!{Mlur 1h4̐QИA~(9)LF#1g"Ga\}3:I v;fg-kX,sVkB#3X*@r%]͆"Yrdc(zɏb2Ip]!xq0[̰ti ++XZZF鵑* wy"x\\")pPt $K>BImX ""[h$>~jpgcv6*|7wPs:6oJ@p;=^恋p / lCQ"nCJ ĪOѧmy?ނftjt8,YF ?VAp[OZ=Йj. ?@\v;%bN *C[OvQͬejjgsMjǷyRF_TMlod6w^ʢߌqlGsgr?EaaǿYnG %tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T00:14:08+02:00dx*tEXtfilename:origExchangeYIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_saveselectiontofile.png0000644000175000001440000000344212110457565025273 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˕ PG?%p$ V)ZVE' JI*jB@[)"* X  UQBۀ@H^tS3o7~.W "~iF|}zumŴ˞| Xsi 0-b.3ɂLRS]$c;aAv׷>&fq}?.jVUU)ïsFSZ6qե4. lκ68 VO4ڇt^Z Ws%gWMU@# k[Oo74vtYNt7@}*yI(*ZN3$<((p4iifYBgAɈ^2eؤw;ye]0:4N4o#.i\+C<"d"p#t\ј@/b\&s.!V j{{칏0|uM$&b;2b<1j w$LUה"X[~-ѮgP=9^mXKi$7MP[R&Lpe8ѯE;`@3MޞvOMauejUWYV v䓆%{;o[Cqpi!z2r˂)X C 0 P _kts] p嬑 ƀhK4o9ΚZSKKldiK5CE$nWvhM7XgԜ S^s}ہoX:ɦ iVl˄4[nE$*q6gfHY2aY/c2g?.\!r7}dfaDSu1*t1{vdoKl=4%fǟVxBZCaøqOϹb~V9-+[QA]/Β?}-כޥ\MY-{\xBmJ65BQm.ᱤt@mTƘN0-\;ohT@[2U!otx .Cmye5PW~pn=\~L$q394j|};3+O_7u,e޳I@*BaiH<~*;r׍X3ϲ/3d2卅]{'ޟE0#)'4|82` }02 aG&:鯤&>hI ߀1GYBOr9[;nnv29ȹ3[SG'NѿqE蹗n \ "Aܬ.8^q`05B!vwXKA^ %Ɋg@ U)iϕ-@K A^j# Pt[\Hl0n{&afI鴇1+d8f0:2Tчwn wzH m='hPCmP60L鴏t:ag|I> K{@@A[Pi[@O쀨R;A6m 3D:m[(x<"Dƺn{P)jbpz?S&0I#OC"zf7rP%|S ^(͵hū]YǧG$a xF:cBLy%0[FDmHk!' ; <%7|(נ<-KKW1B xTk_lqZ<j%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-07T23:23:04+02:00 tEXtfilename:origTestArchiveM0dIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_nexttab.png0000644000175000001440000000233112110457565022665 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE;q?J_O>:q0@A@~DP[5w6w6waO8tUnyxyqEoVUEo :afl@f 4Vat#Fc @_r4N@~KuyOD;vJ4eE~E}D|D|D~FJ pHYsHHFk>IDATc` 021 V6v('/ sqED%@RJT$*-2d 9ypVV/(RU5nu aѭoƦֶN=}î^0q)SM1ӈ -,g͞3w ll q%K,]əW\j5k=< $а QѮH®1q A.b)@% _d ?%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:20+02:00BptEXtfilename:origNextTab"AtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/view-refresh.png0000644000175000001440000000252411323355446023153 0ustar alexxusersPNG  IHDRĴl;sBIT|dtEXtSoftwarewww.inkscape.org<IDAT8iLg;3;K9[kEh&1iOM&415iZ$54iGb53LNUxO&3E,kÓ]zCM/ >5+5nmJ_;$ nB8,!Xd1 CH `"wĴUtyh*K1C!vò)B0cK`e)N,MZ.j\귊Ԥx iNl.HH01HK97rŢ.jHc,ҎGH^V@s>⪦1ǸqFO;Jkdl9ƀnL)@VZPv>,}\Gyd\5Bi^߉ հNITɰHll͜3nӖ)?FU4/],a}@8qܝ01kr08Đȁ-=])nJXb\d"CUzm)c5;_ft/EĴyϋW 3tǾg'NƐ֐8'k+z"0g4C5&8߱im˺,7`"0/M.R]MG e/$"0Ƥ FﺸqQʝ%իOMQ2ScaC0L ]qC=81raa"gu~s=}5)++ZZp:UFLߟ}6uE$ }͛ /PDFn%! !F\GPѢ1&́D a7oEcD0Ț)i\r`IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_markminus.png0000644000175000001440000000341712110457565023234 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˕U T[ &aTkZTTyZBCI*J(=.j,&rW.4a4E^K7]D?r˲||s~dRC:WķGݚҴ7lvHmL843@֜I¾"vQB2zt`Z˃:{K!{dԟ~G.n E7Dh]4H滰2U%_*an \  e60,mα. SّT,),=aqļh b/HAU;›}HFRPh{s*C~'n%tUHs ҒC^15:46i;2i(2QQLMM[ƫaqmH.Xʞ˽T죍ȌܻJ$ (] }Í{'pH  wt:F%5ȵ:|pӔƄISa 1/P: Pb]w_ uL̥(F+=@P&`3:E՛zGy!$\d{/h5I~޶\gsA^yq)w ?x UX80\O$\1tE-F}Fm٤Na*+v dw6?\&۠}IଙprL\ؾzy0aw;Qۣs('Cqq-U.&ny Na^(e1Ƽ e;jtNr4KHgme)0[񮘹-E#kGi_'/EG0XI?I3_l`vκj_rj&.JD2HY[hu Pi,w3Ǎnqكh>@7nkJEq P=9Zq93ۭm=AƔV6UxiY@USb|8K{ގlDZr?}V42}{~HD l Qj};Tce ԙJ~l3Kk:)@Q0ĄW:? FjO_Yb)h72`BSQ> a *&)a^kH79t`OQPߘ⟺ԭ©ܵӯ褿سǯỽٴ̶ܺŽ߸ӽȿzr5tRNSQ\\XjjjjjjkVR4=3>bKGDy pHYsHHFk>IDATc``dbFL ,2h@MVN^ɲ1+*) RQVRdgPS׀M - m u5N]=} 040263043 [XZY;8:99\=<<}<}<}||\A!aQ1q`ĤԴ̬lpNn^~AaVQqIiYXCCH׷iBI@SN>c欆s6͛4HxK.[bk֮[a㦅 [n}]ݷ@‡=vDSO79{ G/^kקq;w] pŋ<|#0>/bb R@R2%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:48:44+02:00StEXtfilename:origColumnsView:EtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_settaboptionpathresets.png0000644000175000001440000000273012110457565026041 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8kLSg?*axͅ1&BdC/S8a]m B]3("B)NR܄R jYJK!&bP퀆,&ϋ<8yh29sK#^WDiWJ3}#}&I[y3v&7Qhn%ԅiޘ3zne(է-jN杜*hQnRkv=MuS0|hpK~#ɸh Tf8[l|IDAT8˥LuR(a#2Mw;q;5J%P [LQASPBPQen6Z]-GϽ!(#IO>ű"!-U'wc(;c呓Uv.,<;Ͽ"]p;dtx_c̏A۽ѻMQxnoޔm5]Vs-Oݟ?"'jQZp۶f( ik3f= 0h}$-\ !_ZO2wrZ. >x:q0@A@~MwP[5w6w6waO8tUnyxyqEoVUEo :afl@f 4VaqMp @_ǘkw_38@~KutcMJLx;vvTd4eE~E}D|C|=oe|/!."1$1%TA1%w%G7G7w%0$P@0$-"H8YG\JLgfegggeccbuwvvɕ̓줄qg|jl|jukra}h\CP5}inՙtkq[K0I.K0t^okmZr]rrjSn]aNs[HjUq\o[hRgSkUiThThTlZtaubYJ]tRNS $ !%x%hfQj!%"wk_f7<vuy?ae  pHYsHHFk>IDATc` 021 V6v('/ sqED%@RJT$*-d I)VVɅ¢U5nuҲr0amhlֶΎ.=}>00q)SL6݈ -,g̜5{YsZ1XB .\hG'ptvYlV"U׬^Yg ! ;qhXxDdDxX(Z;FEDG92P(b4ֵ%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:20+02:00BptEXtfilename:origCloseTabtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_targetequalsource.png0000644000175000001440000000250712110457565024764 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˭[Lgǿ%[- ռXLf21lY6B4Ƅm,Y:nHl&lы]=P@UcYPNmiB=sii{RZ7{_MٿLY բν(LԎB5Ɵ!C1WԹ= rʶT96a;S$b4D+tbqC>/hNh; ŨUZ0] Q|F.Q}LkT?j&(M2G#;)^c{[}˻,ұ5G+t-"GBXx\vW] ~ >J[:h+E4=N~7X+E 5f4h2-Fcz澲|T̈́S:k,%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T00:03:38+02:00ɥtEXtfilename:origTargetEqualSource kIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_loadselectionfromclip.png0000644000175000001440000000340212110457565025601 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˝{PTWcg28әɤ5M\IF- Ew.c5.{aEYeeA@^X221q1z*os{w;ɿGu6LbN,16KL `D@xju 6dz"c8/juHIaMl0 W[ⶠ޾g,DC&`JsYۥa*/M7g&!{!_u{ Y2n="c8M!oq;#U2ёdo:whm6qyk+uh ;* dn/Wdk]8<>j};_ jp6_EۑM V%WȘVz] V&`ϑ1ס5E:DǸ໣KhoHDDȘ *SE3{p+vR&}0#ǣѩ_C{~,ҭރU-\) zl;%?wiNa>; s:&xֵ'<]|g2-l[+Mp^U_s؟M*Mob;q/xd҅l6lyq ZZ/F P*e-ۊ(\ t $GI6 1>rqeVg#'k% 'Ňh[%}*'|Y$Xuj.#gzFe8ZC}z'4+ifE6B}}Grg,pہז7R.t^|~h^@5@3~DF.=K.93ۆ@B啛g^RyUj5PN&cJ^rUbԄ`օaJ ?T\n]GB=C]1%_vV(^rTv*EQWS<%uoR4ࢤ0QI%g-7Yo xK[?(|3iUV]2FZagFl?uX(7f;%X/S}%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T17:07:06+02:00 7g#tEXtfilename:origLoadSelectionFromClipkIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_search.png0000644000175000001440000000321212110457565022464 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>:IDAT8uOTygYHP1QʪdXͺq]#2 Co33лL,8 0 H* <Cx1=ܛs9\orTjPj H4$-$陠AɩA f_Cg dH ӂn+8b1յǻ w tQ346@Vv.0~"r.'8i rG]SJ쭼s= W6"'jZڡ\FA*<"!'sZU{ / :ܰ:ӈ޾{䐍C&hQcXJ}_@ FFrH!qxHVg|6/ܺ pF7m08Y~CVXC髡(JM ,6wa?12F ?+1lrjzLbql{a&tTS/\K=053 c㔾$z?dbr za5װV0AcO֍eTˎ󥅛Dfn)q2xx4?hkj(IS%(>W8 x84 X0 5 u TOtl:dlS'F n||=紌O2 /Sxan \7eP(GV%z, _0nG[G\`1q(94,t,߳'&of8X[e aO;  {.VcU3vA%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:08+02:003,\jtEXtfilename:origSearch\WtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_unmarkcurrentextension.png0000644000175000001440000000337312110457565026064 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  IDAT8˵yPSW_4" KPJY,[(KE Ȏ R*` BK8-KBաV(E$ Կ7{yaDmǩXu'dZim}W\3 ũ}gu \,B}:bQ4[|&M.X)]bO&m :_X/ewkx?Ĥ& Z{Sbf>K@; 'AݼSt5MI*s.Ί`R_<S7ȼ" Лae .Xxj$G\42]5Nu^PO|.@\ɂѲж- 'A{Y0ovT'Y*aFaQG#o@[fz;"4RV~x.Jm1~ ()ݱBc==5K3C {"yTf%s5 6 /X, 0yNg&|Xj=]|ՂΠ;10&_LyIa>ˢ,$ z5n^hbŚzgӌ0"a>kH4ݙL=g#f1Th]8r٩ŷ'+]6k8B}Lb<Ϣ \`t7~8- Qr8b/'A +˓"kC`1AWu3{^Kul? *`yvǀ;t]N(InT+5%=k"v(5nV Ez{5 cZaNkA UPV:τsa1±W#`2Z>Tj5+|VDP!??<[7^d#6Qn*`.fF/O]5TZJ,W%PR7PT-n}򺜢h>j;=z-&/v*߹a\6iwi<%1U+0R^g|E*/.;yBF׍}33&+܇3&2|BZ]d·)_IW  U(J$ГxYסBL+ƩȔռM{SLzmKT;דL1+p%7b1cq!DyuĊǐ\ .u̎(U|[ԿzE~][u06AO X fRtXK|ܺrzAb[NUB}BSzU;) (l+x-n,4cЎ qܯ?kAbL%~XuGdvm7<nw>EqRGNRsߟ\[ &jaL|w 4SzԳ/s?J]g 1,ò -iTX>\8R#t mQXW2,G@3"v *cO;~*g8/F/4%هvkk瀙R *C5 fgIvͬ#&En"ʸQ;wCqQ &`vęE:ߙg3{ek?`5qΩoj2Mn $yW Pl!6Oy9 3\b5&d9([w};s)\SKv7< !}d9hLCt*12`Sa1~͉ ^6;72o2\bfXنZ֋,1w%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T21:01:40+02:00ȂctEXtfilename:origOpenDirInNewTab %IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_runterm.png0000644000175000001440000000232012110457565022712 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE{v~~~~~|{B`Cwrm sklggffii=OL? b&-())^_`_`_`^_g2!'-39@EKQ^K9W8ӬUNug[^`bcdfijtj`pZࢩǹuܖӽξμμμϽ϶ѽڕߓVQQ;:<=<><;=?>@@?A=<=WQQՓ\YYFFHooqDDFIIKJJLGGI]YYa]^||}ttvLLNNNPKKMa^^eaakknPPRSSUebaiefTTVkkmRRTWWYjffmjjUVXXX[Z[][[]XXZqnn\]__`burr`accdfyvvefhhikghj}zzjjmlloف}~mnqppslmqops֘ު2*tRNS3\\\\\\Z'7*hcjjjjjjk^R7==3;j pHYsHHFk>6IDATc``bfV `cccgegbd҆]=}C#^>~cS3s K+k[;{G'gWA!a7wO/o_?wаȨ蘘h0OOHLJeKIMKB\1¢R8(+ WUVUA]=H Z::{zA(;a0$wWfr}6Ƕ۩V1;lE&[%)6vȄ rc߻_g#s8H"Ja78!XB\ATqn_3EAf(`|Eq.bhhLg)YX[\ˁ'ChRcQ !  nbb}L&ʎ^8`So#4R)qCeI{m>˾ҹ%J?#H@yX6I*E*7G lMIga:vvQ܉ fccx fm.)F1(ؕלs =O9fv?>~d=Q^t!},1Xc?޶WPU\E>JyrLPV .kQ455[kidV." "E'{έDkiuRU)ECQ U{H ]Wt@dA!uC?ذvTc Lں`!uChrjR5 Bp+>É'6BuEڃ$ TM|{x|\*;ל1Xk֐Jx(ZusJw>|>_QtӇ@R$#T&4G%6|}Wq 6ߺM2 Nݑ6p0vwb0+vxzNpKM9-Q6킩|^Vw2yπ55af0Ys7^+?PAU`0q3Z/Ad| :Qz$(|L 3eU "^};?,Sv3o'Chԏnr>U qrwHH[ #Ky&i+9Mk'd{FL $ia&uab.l/hLM66f)qaw !#ׯÔ*g7<Ő(H9LKHuŪxl4.Lc48@J=*nV >J0iaq'0&g% +.0km=HUN)HJ55*9<'$ih|z^%0kjbR!j%24( ?06 tuF<뤌ݣՙGS.9 ">^⯆ʰ#j5 `|_@@6> w8ܸc0sʓ1k>v:q0@A@~@P[5w6w6waO8tUnyxyqEoVUEo :afm@f 4Var$Gs @_Y`+V-@~Ku؊?O.@;v=zO4eE~E}D|D|D}Es:t:gIDATc` 021 V6v('/ sqED%@RJT$*-d I)VVɅ¢U5nuҲr0amhlֶήn=}Þ޾~00q)SM2c[XΚ=gs,b;E,]|U N0zu7ltqE7Mlݶ}']Cv   E аȈPwrdcM.k"%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:20+02:00BptEXtfilename:origNewTabxrtEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_prevtab.png0000644000175000001440000000226412110457565022670 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE:q>O_J?;q0A@D@~Oa6w6w5w[P8tUqyxynEoUVEo@flf :a#Fcta 4V4Nr_ @DOyuK@~J;v8nX]T+ pHYs  IDATc` 021 V6v('/ sqED%@RJT$*-2d 9ypVV/(,*RU5nuʪjaѭohljnimkN=}î޾ 'M2uL1ӈd9s_ ,ll-^te!əuʕV^<}֭  B ( aQI)X35͓kV`& n %tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T20:24:36+02:00DtEXtfilename:origPrevTabiIIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_briefview.png0000644000175000001440000000261312110457565023205 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE~~vJ nkgffegd>SQ> a *&)a^kH79t`OQPߘ⟺ԭ©ޓ̴ؠֹ褿سǯ㘵кޥ٧̶ܺ鞺ӽɹȿ8tRNSQ\\XjjjjjjkVR4=3>bKGD˄p pHYsHHFk>|IDATc``dbFL ,2h@MVN^ɲ1+*)0PQVRdgPS@j Z::z:z: &'PXȴ s;8::9zv\@a/o_?0HpTtLl\|Btb|Rr  NK/(,2K@¥eU5嵕u @fcS)wisKk[{GgWwOo_?9ab)7Px)SkM1sV9@f\ .Zd+VZf恄oظvfm߱ܵ$g:|'8yj3gϝp+IWϜv~i0o>}LByx(gśyh0%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:48:44+02:00StEXtfilename:origBriefViewztEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_markcurrentextension.png0000644000175000001440000000317512110457565025521 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYs  DIDAT8˵{PSWO!<0HDQ@E8(ZqFQPKiBi4ERQZ_H""πlϕ_ݙoc={vE`_pQw2Xlm,K =_O1Lkt1 ZwyϘ^iW*h` t[# OOGzNWܞԖfA>тu[jZWI>HdNψX]%Uڋ)0ѐ"Ze)3䩎}?-crbokӼćj 8K,-eϻxցW</xvH?"4).W zfnCk3z4\|W]Hoqf(G V6ΔĜbhnC6ă)ZE9 Vz12:ѱ;26fh5͂Zv87!0spp)VLt+bM{g思YIlvX-_^MR6AE =;DJZHbw8aSt@| I\B^/CAC -JըMNNĥ[_1t\%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T00:30:34+02:00|^tEXtfilename:origQuickViewW;IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_settaboptionnormal.png0000644000175000001440000000145712110457565025154 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE;q?J_O>:q0?|F2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat$Fc 1U_pBa?|VYF:tH-Wy5g0a0a4f,Vyxhklxzlԋq׏ɗ=tRNS,,,,?;;kk??  pHYsHHFk>IDATc`̂XA<|/ (I)Qi= +(:8:9Á2PXE 30pjhzxz!Oo-m.]=_o``LLP% b4>,/%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:20+02:00Bp tEXtfilename:origSetTabOptionNormal$]tEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_hardlink.png0000644000175000001440000000266512110457565023026 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTEhjjAHvxx̺WYY⵷fjjOQQᶸ෹fhhEGGOPPľ8::899::9=!9t@'IfXAde 7Z`8Z^9Z[9ZY:YVWWW:Y///nooghhfgghhh^hqST<[(8p>u=t~&`\|G%& 0CSR %.-=CTL* Y9y`a)"0(.)-+ WVAAeeqT8 TÅkj࠶^&ܐM Ьn)/ֶN%eVpWz7TOPQUS OL6}fkjUϩ/Xh˴uW\r5k׭߰quz`-[A`;w޳w~}၃[vǎ8y광1(L@s/xS3k pn߹{殮P?xN@aW7pg@A`Q'%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-10T17:52:56+02:00թtEXtfilename:origHardLink ZIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_showsysfiles.png0000644000175000001440000000263312110457565023767 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>EIDAT8˕ LSg/2D)qlٲLECApsndLlZ"+ V&-y.nq=G Z6VJ+-Exd҅/s?K\G9>9ۗ9? 'hC_?ᐓDoElu}b5FI ŕ`8r_jxWcn+pv>Svpk9!,0u&'qU C" $Eoep2\(."YUMR2zSrNK=IXnãײT0J< I_BX0;TWoU(;pv+\ <0əhC&{L$?\Ѵ2XWHR;S | B6X qvo?C!S=ɠm=SZ߈Z}yL+az{ʶt{ǣ M<2:X'?ͪȕO "J ft `_up< 'D0#g( BPѬr(XTEhK438b&ܽ 6=,kG`rMܦザ+>m ;y! ݩ0M{l#`Rx0fjOF\^%;9.`jY-+&8Oូ:ᾴ驇GȗԴ%zN%̍Gr0%db'з0AcLZk/O o`nswcIͅDPwslCA̋ܺ#6ϱ|cQcĈ1\-j s@Zx*L% kr> a3.0 5OH{}1淇 6MA0mmQl{zexRk#'Xg6JOO2 ?텶>=ǺMȉlh{'V.eyjc(#gK=oGV% +F9&e2Hj *R9Eܝc:;9W7=miϻs[U.~s?YS9+I%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2010-01-05T11:49:10+02:00itEXtfilename:origShowSysFiles tEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_checksumcalc.png0000644000175000001440000000267012110457565023653 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<aPLTE())LMO}$&')uwx\]`acd~:<=:;<,-.)*++,-(()acd`acEFGEFGFGHRSU678jklDEFOQRoqs,-.$$%z|~<==\^^HIJYZ\99:Z\]122KLMfgi~qst[]^ijlŭ~]__fgiZ\_—::<=?A./1124/02''(&''"#$"#$##$""#ǰƹȳķ!{ItRNS6\\\6 cYZYm~# R|! 1pEC Y/!kp$RBMIDATc```1AXh%TR *,-l+WղrPay5k׭PT*Pa5u 6jjiBML23 3;8:X`fڴf/ _yK@ 30CPpȚ[CЄ#-*m{\|(+CbҎ;SREwlٕٱ{Kn^OA!/TdҲrv~ʪjpMm}[Z;]vIDAT8ˍ 4UYOmU 4C(35Zb"Lm<<;3eVR{܋2hz7B(ŢD|jլkُ}MQӋ279+pmv`ĖRh+pB-@dmq"$jasC9SNev7W "5 4R+p ?vIgD%k(qc50n_nx'׿BTS%6b2/z-h@^D 6~\q+'R, )ߙ{2)1co #R01lґ")bJG'!}EX}q8UK-P^HW٥M[.GpQ4 Sn .VbS(ᷟŠW/3Ɋ%N唌y5`Jk⋰B5[x!!@׷Z숩CP^/4 v$Z,٫mj~F]hacH *'z7x9co*h[vMh$q[1J\?zA渪!PB]=&(8{N "բ-}"xw`f)c&JL|ݘfT%t9ULx.;C+)U1F4*YN%T/o-2ulvs7"z:0 l62.%dzQx4c+Y׈19P)c5W7|=.T 0ai띩ALaF"F;~?=ic5rc1hwsucj)OaƫcB78p) cN~=P. ϝ=egQ>-M!X]b'i'5C3a+{K]b:Ӎai(;JLuBON'rSmG.雮E&;kKS;9^l!Mhw!3;zFDn#h|7nOcgvAd8>I\tAH~/‰/- tc4WМ[ 9IϠ>Z` :&S34S-WZp( I} tJ+#7drkc20ּϤ Knb|@N հ`H ~'_Vu4/1 nUH+IZTIUw7W܆s2АK TG8h5xIǂho R5dZHzu;AM\aIpiKJAǺp1?$}4(4 /@S(()GZtx('9lVr;> DCXߏv T jca^8*su2 |QT׀MoÏY,884 w@h{$a=lEŚM͜ASpsY('x:q0?|B2Kb0t9{SS>/s.Lb"5=zdɂچᆹᇺᅷ"4Do]]Eo 7\fpAd 3Uat#Fc 1U_u'F_?|V⟦gC:tD}-Wy5g0a0a0b?i^wdeh`yLg\ZXZ[^ YZ]iijacduwyRSUacd012TUXTUX012jlnjlnDEGrtv]^` TUVdegTVWxhklxzzzzyxۂޏӣlԋw˰̬c׵бطaptRNS,,,,?;;kj?^ e=eU-]!= (+!-1J pHYs   IDATc`̂XA<|/ (I)QilAa(, +(AiI2PXE kj854!CKAGW {zz &L4 &M:mϞc`bjfnVsYΟkg. =<x BA!a#"EE# -Yl̸dĤI iY9i(!p``؈{%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T20:51:08+02:00VtEXtfilename:origTabOptionszqIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/list-remove.png0000644000175000001440000000037411323355446023014 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME ;w({IDAT8풱 a F6n` w#8#aֶ"]Y؈ Gx !$_wnN=Tzn?Y+FMIzWvgHi\o$p.009Ʌ;,pp$ݥUIR Wb1OIENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_countdircontent.png0000644000175000001440000000274712110457565024455 0ustar alexxusersPNG  IHDRĴl;gAMA asRGB cHRMz&u0`:pQ<bKGD pHYsHHFk>IDAT8˭kL[eO0٢,yc(9oY؆.1ndB# ѡ3^qȸ7.K ڮh)nIa -PK I~y{=O_2\ȿv5"Pgi p5h0\߆nr@K}z)*R`;!>3?ImAY|TDAg/t18bHT'Bc06amմۂ,;NIsj B ېߎ;*\,T%R 97Pܥ ȭi9vmi+T  zP@cCAMU.e8ˎ-1m[Fۧ?)Tv8݈t^>jӂӅ) ?2 :5,A#75\5`!<X؀E8FPjX{βC;,:"}hB{g7j[B*Ryڹc ?N/)sd]h{7Zp-͟X],oj& v&ZkcnEO; 3:akv)_p[k|y9eY qBGHRS%_5{oNPs9zs֚y7ɤ9wa|]؍ad7;xxl+tu.v`|1pqjׇ *gyu] U3zy{6[ʲ$٫qq=V,PeY|R׵%M$1^864e{Tq<J0ñ)SM$[|EHwJB#Tϙ, E2KH[58|yKMsW2IeDW]ǧ˧1frâ?$Ӆ-*[YTmxZwwN Lĵ;"(4޵@4?)W*T@'(3,IENDB`doublecmd-0.7.1/pixmaps/dctheme/22x22/actions/cm_closealltabs.png0000644000175000001440000000254212110457565023674 0ustar alexxusersPNG  IHDRj gAMA asRGB cHRMz&u0`:pQ<PLTE;q?J_SCY`_O>:q0@A@~MwP[@J X)n7x6w6waO8tUnrWdvyxyqEoVUEo :afl@f 4VaqMp @_ǘkw_38@~KutcMJLx;vvTd4eE~E}C{AyGD|C|=oe|/!."1$1%TA1%w%G7G7w%0$P@0$-"H8YG\JLgfu{ؗdQ̓pfggeccbsXˋywvvɕ̓\ʊ줄qg|jl|jukuiВra}h\CP5}inՙ`̎tkq[K0I.K0t^okmZr]rrjSn]aNs[HjUq\o[hRgSkUiThThTlZtaub7mtRNS $ !%x%hfQj!%"wk_f7<vuy?ae pHYs  ?IDATc` 021spB7HOHXDTL\B eyAr J*`.' /(,*R-mnYyEeUu 746 [Z;ȘAtIL:u3g͞3\j -^d+VZƖnu7lܴi-[m߱s]]\=<ݷ}z1xBG=z  9yӧ΄"NXs/?w1"Y8*:+/! '$&%'%&qjZzFfFzZ*Zfedg2PkyȜ%tEXtdate:create2013-02-10T20:32:04+02:00,4%tEXtdate:modify2013-02-08T20:22:00+02:00"WtEXtfilename:origCloseAllTabsIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/0000755000175000001440000000000012675717727016421 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/16x16/places/0000755000175000001440000000000012675717727017670 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/16x16/places/link.png0000644000175000001440000000111711323355446021314 0ustar alexxusersPNG  IHDRabKGD pHYs B(xtIME '?!IDAT8˝MkQ;_MBLcm6v*~Tc B8nD+p;~Vu)D RjMu!)bL&Md'Ag^ùnjnjQgk[7<~`Mm.8q<LME^vx>'TpuXMUa?)}[PNeڧt5ɹ={V7c3Xu,O# : 6ĥ,-(靳㓱tw$Z 4nUxEG:=x{ `@fM{Uv"3C0c\@nFȂTbTZL\>{tWwvYk-0U4lQ4l69n7J]HaN3E.En ͽZ65$ݖ/܏nխϯ;v?$#P6$E/K^5IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/places/folder.png0000644000175000001440000000100311323355446021624 0ustar alexxusersPNG  IHDRasRGBbKGD pHYs  tIME 4Ґ tEXtCommentCreated with GIMPW^IDAT8͑jUA A1Z R V yA*䜝s=mlXݝ1bwڟ)K}G0_u'Wħ^//)=gWem"D335M abce' <ζFV:{PjS}^6 x7|5u\LL_D0|e6&k#Ͽwïb\#Ob `R,|,9 U'n|Larb¤d L~3L а8F$9A(6ԔKjIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/places/folder-link.png0000644000175000001440000000122711323355446022567 0ustar alexxusersPNG  IHDRasRGBbKGD pHYs  tIME $+TZtEXtCommentCreated with GIMPWIDAT8͑KUQG!@(IdPPD D EAҰ'hQ fADP$~ܤ(dfz9g7}*ԤI {ً[KS?6}^^ 0zn_I m~ϮC:>%eRGa| a!l@7!fs O~}"ӝu P`;|tؐR 7W'žT8eEYxFYU\HZ*JȔ" Ob! GIj, fv]NM@JF%ӤM8EBRCY fp-.R!L4`&&jb+m?R?JB$c4c" 'OT151p(# XDB? ݝ]fwvgfjwyy5QةAH=fb2 ؈FGי7 EDtJ\.`ڂNmNXwoov`tT$6l@(ʪKJB['N\UW Â{,kVT/ uR}}Bq'a=O,ix5%vJ{Q=m|{9혘e##+s'u!3W_NO2b\t;(gcTm $܋4^"DD@\߇ܨАRpnv^#e`nrY;Bчwһ@yBɭD'f@:0EyO>Z]#^E#-~jnVJ "~ Xa3szna[> F]5N~9Z^ wd2j5&7 I(f.em.Jo)"IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/devices/media-floppy.png0000644000175000001440000000106111323355446023116 0ustar alexxusersPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8A?34F,\#("Vbg(XɝXX\\an2"w!'/3Ãt: Оjgwog_$=D"vvwCRrJոi躎eZU/TZS!RŽ{ԏhBi =cXG+"@J ]7Fv)%GGGdYO޿;:P,XMێd2q0 ,L&#_g4Bhs$;;;Kڕi˲'''W ʼne߰_Rt !Dd9 QnJ:IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/devices/drive-removable-media.png0000644000175000001440000000077611633361331024676 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME PtEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDAT8˭JP)b ! v/:7ҡ J3HY:y,p;H 7ws84eO/w䱵*>VKPJA+ttwЩhQT{pBVnq8I4 2?)˲U!Dfw8_a7:{`YI8/޸7۶QJ9qP/ۛ!Q3GWGNP{QIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/devices/network-wired.png0000644000175000001440000000127311323355446023336 0ustar alexxusersPNG  IHDRagAMA a pHYs B(xtIME/KJIDAT8͒kpƟ蒬a`WuLOjềȆ C/ xqo<ҍR6 hꖮtKC3RePws{}.!"!dZ3}/}LQT,Z' !'G+1o{{K$!d"5!dS=Ы TeYFuLAEQ . 땪0Ɛ)Ʉc@$ btk-{vPv;mmKa<m[=㑪PUT$I8c97*"|2N#hLE ,ZKYwj\2gzվU&l IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/devices/drive-optical.png0000644000175000001440000000132011323355446023270 0ustar alexxusersPNG  IHDRabKGDC pHYs  tIMEsʥtEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDAT8˝MkQ3fd`S,Eԍ(n "Z]H?ЂPDXhEADJhI&f!ЄŤ"=ù>{=R8ZQ(\) `-$wj5 A*2=L }ՌUIAЃN,`߅FH4TSUETQWDCFpˇ`0`804 By^ 0!.^Ib v OL&F!ݿ]č7jA@E?~DS!_YY9O^.a'u]r/~]St:.E>!I߻gUqe/,oT7elnݾsk{nYݹW}-"[o?'IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/devices/media-flash.png0000644000175000001440000000113711323655670022710 0ustar alexxusersPNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8;kAn+((1 B,  {؋ 2? ,A`4FcA7K={7f<3s;Ngg怫 f6PD\8Z[pũ9`6_>9ɱ8\y%KW.t2cr33u,#Mif8Jy.d8a0!'`֋1 8ƞ$ۿ& msS:9.JqJBR((n Qo>B]#p67mll4(!aFEkb'Z5hYY)hi 䗾_6d֕Q6 e5FX;$"עMIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/0000755000175000001440000000000012675717727020435 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/text-x-po.png0000644000175000001440000000125611323355446022775 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<+IDATxڕ=hA۽ݻLiLxD QJAP `VB 1ѐ(hS/pHTb4I.{;?q`F(Bt)O_zmU@hD<4@6hO:5@`_ < aP !KCM|aDb10-eH%pB`X'._t9_c3Zwt Efx!a,{vu38ӷm>ZU5[bgj#/8o;0d-qgۆ*6 Q!5Pg`Eb$Ƨۛƣ,S\=%mfqz,O\;wˊ0($iodՇʾJ6pUW,g <rkWuS؎d2fӧ+2ɕbQIy|WRJU.U: ZW2uŠT*UkP(ѱ9`O-r;.~r IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/application-x-executable.png0000644000175000001440000000106011323355446026010 0ustar alexxusersPNG  IHDRabKGD pHYs B(xtIME8rJIDAT8˵NaofMH(`; (h aH7Mܰ`p.a4ހѕqB Q i e(.ffvY>ON!Y\ZYxz:IDd9gw=J"bi{vDҸ3>Lbd(T"/]{w]ItM31 ,;sDBO8=Xvf*dk38F 7Pp4Vھ݉\3o"5 egWָ:o]\9P$flX>o,;3`2{50$Lj3 r |C|.[8_.R,LDRxFMIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/package-x-generic.png0000644000175000001440000000106711323355446024402 0ustar alexxusersPNG  IHDRasRGBbKGD pHYs  tIME 9 $tEXtCommentCreated with GIMPWIDAT8͑=kTQY̟`)xl-X,k+/JD[VAfI@sn"ha0 E,l棾G[LvumϬgO%XLK:f419{ SƬދAr>r߯PkwW 95ՊV԰}^ǰ(Dxwغ($A>ɿVJF%q0|v KZ|뚪&䵪Z V mtƎ{u 2ح2PU5k.`]AJ:M` o&H7o(d6$JfķO3Rja{˪)7`v;RdD`&o~BK0IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/x-office-spreadsheet.png0000644000175000001440000000077211323355446025137 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<wIDATxڕS=O0}EU*€:0ЮlWǸu{4M4MeKɶ)(2yK2`WdBj!4y VAeIA,6g/>l@l9ۀ@BA~Z ( rr,+I c4i'J47b|2n sx( &l߻aU0AѓdJJl;ğgF\ }ȍIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/text-html.png0000644000175000001440000000127211312762055023050 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<7IDATxڕKOQN[ҖEJyEQ* h@҅;/p;WDL(,ƅↇUk\N-LLF&ipx8`&"Reo#0/_ ս/ fvF&H=]UTE ULFyWiv":pXG\nv7sd~ix|=xTc{ߦReu voQ>8xҮN6efff+VB%t]r_Y(⢘@?Ȟ2qݓaĄWY>>Ηֲ-|Q?v }IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/application-x-cd-image.png0000644000175000001440000000120511312762055025332 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<IDATxڕjAͥg&Zĝo#t5\F"/\zfzVeu48C%!'9PZg׿TVL1 /"̼Cz4c6W,c 5qw?ݢQ?%If d:+J˲h)Df0+*C=\2pk4HW@9v;~m۵px绔IZUBhƵ뺟|AI<(_,^9Y([O$Y  !FIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/unknown.png0000644000175000001440000000114611323355446022625 0ustar alexxusersPNG  IHDR(-SsBITO pHYs:tEXtSoftwarewww.inkscape.org<PLTEik)p1v<}HIVZjrwy}҃چՇ܋ܣި:tRNS$)./Rh5IDAT.DAM16064xd7`d!׺[Qj3b EkW0ro KmH0r5H`iCM N1Hx&0D:P$I˿[0Ddya@eY|NoZU׵v EK 9w8eIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/text-x-log.png0000644000175000001440000000116511323355446023137 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<IDATxڕSn@'n8C%7n KT<HKVmP8.Os`O3;/qp.?=v%}2SJIQtrQy_!`QKe59[nAmtj4@pPCh6ch x4p=x,ϕbqN")(DQ7ԪoJTBLۃs"̃hqm {p4VEKD8;9? x!|ݽީoF@탨 2hue0'<~8Yfc YZ/0P 0Ur8j8Zs@sb4"Y.//cW/Kphݮ,mtjy5$IQm~n)c]sgJrY߹PvP |j HL6IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/video-x-generic.png0000644000175000001440000000132111312762055024102 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<NIDATxڅSMkQ=3iڅta-&~A[Z XUjq!.\(V(bQ7J*(HVnZu$fQlL65GE3wy$AӴCh1xh-[SL yOsn&uuv4:n`Zk@ Hvuww0H)es &ض:{ɫ]IBUdIr^L:Ocn.۰{B W.O H$}6԰ğk 6+R C4zůEܙMb*e*5x>Xyl8::A8qnݯul؎BqF1}k@USy|Jo_?RhOnJ%Χ,  jTThh(BGOKS4;I##$y^U Z/>/j^T;3R(d<һfP*, D>[4A0yvyЉS W2y,T,!uWYT6{7oxsy;|ߗrԵL1·dhX~m8|nIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/application-pdf.png0000644000175000001440000000126011312762055024171 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<-IDATxڕKQǿoM%AzP,4!x*D hmoC1M4FAׅ>bwJ:~D"Adne0~P Rp`H& Ľ`bsmmH#>6O@$ k5TqI ϳOHgpsB.,$2xyr7ߏ9]a!gF"GPx0"4rem.,|R[ڬt:{(voO$@)+ B 5%GKd8E$if2 7xR8=@Ӗ{Q‚zq`)&/q¾۔{$JLPM/ +@EXE۶N@#F4mwqY9Cl~N WA <~V&kaJxfGr$(Qtԭ:6>|wUI qCnsz&H܉qi<Sz8'ȋUf).L5'`\wp3nՎ,":jht&3&?3┈?3ӀIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/image-x-generic.png0000644000175000001440000000105611323355446024067 0ustar alexxusersPNG  IHDRabKGD pHYs B(xtIME 6IDAT8˝MkA4ݘॅ\ĢSɃ@g(1 z @ ՞TD*C"&nٙab !{fgDQ[3ZyBQ3ZjQ31nKVWpf,µM4(HakM0؂33sZ$(l~{?CR@4yò,.1SrzoD'S@)_@JNh'-\̟.@:} b}x{_ʧ|=({hmh9%_}z=oj%1@usIo?GN7.nքaQN&x3iv$ĉqǨLdk&|[Z? Ƚk^CrB0EJXᖋBIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/text-x-generic.png0000644000175000001440000000116511312762055023766 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<IDATxڕSn@'n8C%7n KT<HKVmP8.Os`O3;/qp.?=v%}2SJIQtrQy_!`QKe59[nAmtj4@pPCh6ch x4p=x,ϕbqN")(DQ7ԪoJTBLۃs"̃hqm {p4VEKD8;9? x!|ݽީoF@탨 2hue0'<~8Yfc YZ/0P 0Ur8j8Zs@sb4"Y.//cW/Kphݮ,mtjy5$IQm~n)c]sgJrY߹PvP |j HL6IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/application-x-rpm.png0000644000175000001440000000134011312762055024462 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<]IDATxڥSMHQyOE|aDEqY+q鲶.h#HB(e"~|3oܿ7Ņ->ܙ{|92c .qgW06Xǯg: .90R?!ڐgdUxu4*=JłTe@E󮯯5W*O` .)YQ*3#$|: ^z0qm\,T&B7B)V |w.`zy.~lkHs\?ʹ`mw TLh%q/rJkHR4" H#H%fy ~t_G.MX 7R/8=e"Wޖm諔xzNam 4Jg kH%]T)W."NbiSS4!݋Wnߙ̼xrL6QZOV:zZx:,~#} h/m&5H8.HRL9ט{AY $5?\#A0{/N%IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/x-office-document.png0000644000175000001440000000061011323355446024435 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME  )TIDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,2mj [klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/mimetypes/audio-x-generic.png0000644000175000001440000000120311312762055024074 0ustar alexxusersPNG  IHDRasBIT|d pHYs:tEXtSoftwarewww.inkscape.org<IDATxڍSkAfdW֤HBNn%!+=#?" HC^KOH#h~$6 a7N=6&̬RB@? 2h4Hq#! ]}I 9R80&P0/ncq$>1q09(8O?=40UX)L]NmVs(}BRlvT iɶiaμ3Εe(fmXz4uIضVE >x<^]μ`D"9K#yub1"z, #ahL9~|;Ass98CT[01x!6 _{ W4Mt:`ۖO8 X{(zkMP\g/[}C(˧=}$?  il ci1 l22v\ޛБl*gH֡(UmSk繼Pa3. rf_>cvMl/~p0Urs0~d4Ydi1S(e`6H<%A4jF')εbm;M  T -v[7H0t]|TtZ|}OT#[mm:%b@VXF"R AbH 0"duE\6%,V4_=EP ԅ0Z`={QmAP pkk/Ggs]H"/\7ᚩIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/dirhotlist/dirmissing.png0000644000175000001440000000151112405254001023426 0ustar alexxusersPNG  IHDRasBIT|dIDAT8eMlu2M[ڭ%R>R?JB$c4c" 'OT151p(# XDB? ݝ]fwvgfjwyy5QةAH=fb2 ؈FGי7 EDtJ\.`ڂNmNXwoov`tT$6l@(ʪKJB['N\UW Â{,kVT/ uR}}Bq'a=O,ix5%vJ{Q=m|{9Pz.4TX]9lO4-r8\mXg[.h x~rs%^, &biI0MEaY["VL *aݲD%݅*>oxu<\{ ƪ?9/ Ho ӨCn+OX/$X%Y|lB-< s=Wb;T#!0N@tJgbގ fV6G6fk!!'6+k@GNEEA@RJER؋(HEUd]6ן(0gsa#5MCwK3 `BgқMcϊ\ H !0!@1AWrmi}R2pVMEpUPE%1W Ji/`,to[ 1 4nӶD0}nNJL-jic`^ X=*(s >,.b@Q$U}М*~bs:f 9.* 3HrYǏAd֌>qPQy$9%I[4ɪ0ύ# ,w),"w)7Bs,8`Fz(1JID, ,˽9#Fdz-lF>R'2>km<2@*4v!>ŨPŒi ,{SϹG.7^`uU oc}i)dCcfi$a*ufzC+I-rg!6.7rˊ*{X/Oɤܡ7 V v "m_2=өOyա^?u'p`x/Cf?Õ{> q(2hŒFų"hOS53`|.P OF 41)3>}ÐðxN?7`bOu@W,ݴ!6ː3F#0P`8r"8ts#4ղ03 .^ᅧ #RB׃ (]?0R /JstIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/list-add.png0000644000175000001440000000050311323355446022247 0ustar alexxusersPNG  IHDRabKGDC pHYs B(xtIME DxIDAT8͑``rҺ`6[;tqDdZ &g7Z,Vi1v`9=0+n/\ϵUR>.009xrbD["[-$mx\9XwV2@@PiAkeRjt&Rȿ&ROXNOӅ43kgO=TrK wIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/edit-select-all.png0000644000175000001440000000067111323355446023524 0ustar alexxusersPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<KIDAT8=N@X  .   @I.A ډ)wQ52ͬ3߼7 I<> FZKlo hi1ZkjRY12i4MX,0p/ DdqvXD"$IJžc:KVi" wxS8*9Q18m6*N7qRlFId2ٰEkWZh%{x.>+ml6[0."A%AP[dQQUl$Z-<@!`fqF2t IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_comparedirectories.png0000644000175000001440000000217412467744673025134 0ustar alexxusersPNG  IHDRa pHYs  tIME !:wIDAT8 zi $ \5% 9$. s   ) $ ? %Fn~=h$ }u=%-..B  U $'?e' O 7(= KN,-,.-,9 V z'5u ۼIY! &>YA  W )U-# $"Ϲ  Q IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_filespliter.png0000644000175000001440000000124412110457565023552 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME7,=QciTXtCommentCreated with GIMPd.eIDAT8˝?hSQ$/{77T,J)"Z EA:\MZN:):HJ)*Ԅ fpJ٥`b}ihho9{w"vղ2/*h{KvCyɹKA~܊ƭzSPV4 ֧'Ɏ%?zZ3N$'Ɏ -#lLayP:H#d|6Nh]in53'X~ s}\C?W..:ԽZՙV0L#(?0];[ }w_Q` RT63RN'i̇/8<ŠNby*J) @l޽t!ЭԓD"K?WN3 k$/JRvMfCz1} >_&_(#_(qd1G*輡, WuUʕ);P8ئDBr;+Qq]~n5fdIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_comparecontents.png0000644000175000001440000000114712110457565024436 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME4pIDAT8}=hSQsjj-AkE."N j2AtS]5"Pɦt*S0)*DAAlSHCJ{?w;u˟ަ#J}.&F p(~zSْtIYްdyÒ%""g""VْH4PZ23vkK4l7#”h L][*&R{!""jMVkR˯mʾy_4=JȝA<*DzTi $O^W̎nCm2 ǩ:hMIv (`4'^&qrT j ])&N/2l \[m N ryUAskj8}4=qOw}0yK!CG+;sXfb> ыH5)gKuK0n41D-T>IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_multirename.png0000644000175000001440000000141012110457565023545 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME*!NRIDAT8ˍ[HTQ猤e9ZQ$5jì%*C& z) *JLQ,) 2hjdd)99g0LIDio[??WWe%m#^(R(GL6/i&Y4E{^5*:>p%%%eyyM"c"3 KbMu&]a8PZ?0@jj*+o[+A:Bk(ncu 7u0*`8dgeq.\Ld>wʢ=LNe* @clv/䙋,urCa-njjkED$Ãt4JVbC"?C"T˃lD.KK~)۹W%/KNbDDȂd?h95hڈ?Tق Rh*O 8YNIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/system-search.png0000644000175000001440000000164711323654424023345 0ustar alexxusersPNG  IHDRabKGD pHYs B(xtIMElx4IDAT8˥[hTwgn646>|P4B5M5TZ4DThk&/}/Hh@[d޷=9%Z 3Ïo>W~7ߊ*qBfyxE |ͲQE&NgRg2{v[c ;֦[aHR,(ĥ\6J>iTw=6DrQcJK6 hDčآŃCro::毫<MqIʥ"3d"rIP\fU[,X6n0y}V34ݑApw־D$I v(x/7br]Hė4ʀ+m$yZ$QO&ژ LhbN80@D<ޙw2>s79(" q0ȭXt}rL&zee` DQJx+V5`rGArPpylxo#Eԉ} 6.@o{`rO^Z&`lZ[[[TCz ;fhOIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_restorefromtray.png0000644000175000001440000000124312110457565024476 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME PU0IDAT8˕OHTa{oL`6BAN + *KD4E!l B,% OBa4C|s[X(:Ё~r9RrizvTHyC_b[z]wzOKC72 ȋ2 ȍnpզKn)\9c?ɗ{gp`:D.b49{*ٙ]]χ8Djq﨡i;2 x| GjQ5`e0m YXXQRpM:Muql y;+- bHbc"uxrfcbFbHeC YDm=c3L/B'K Mh2vCm:EY?˅#my,?M-'c&)q4 WڥGfBF*9A Bi+JGmA5]x:j Pi?Vѥ nIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_sortbyattr.png0000644000175000001440000000102512110457565023442 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME5*&iTXtCommentCreated with GIMPd.eyIDAT8˽һkTQϺ! F$h 2(D(T"_(j+HT"Fs͍q3̜ iW\^kϺ}G'_ϬPvStfF:˷| yWE*THd^֐'{G-ત>\N:R .=;y.<W~̣1l_" YG1H u|%`'x3emj F ># {{Ng\C?̝G}YA"U Fzv_ W@ALcQ i)u][6/X۹Ϸ[5~Ϧ bOIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_about.png0000644000175000001440000000137412110457565022346 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxdSMHTQ޽gԑƬleH !r#P۴( 讠](V(ȍpQFRVPRZ8:<a;|{5sJzmp]璯iZJJo}3Kmдƺr)C0#'&"\ƶ^XoU[WjKx7ln9%,D}^$Na5pt~ x6$[6DIJ™|O3w\د8(HggI1ϸi 0Ppz.$hg;7uX/c>eC4P]i,dHU׳?ÔZ#p\0x*aIBsqƙ|-Xl-Twj@sK_P&s;6YWM;cZ4͕-@`:{ )<;J mUGmG"HPg9ZQzBS YئOT@smpʶ̪d$[xv/ gwɞK QLEFx5So<:~ԋ+U?cjJZۆ25|I=/b1 lܺ?n%&Fs'0۶К"IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_loadselectionfromfile.png0000644000175000001440000000160412110457565025601 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME #›IDAT8˥]lSe=kC0&!`L挋h MШhDTb4$jLtިDh!Q#' 3cƲҎ==}(TyiS_b]1[_^>{L?eM e&[g[*{aŇw%{L7 ^>+|4?[|!VX@&.dm>pdD\7\?v~q}ZXSn3dyKMpϿؕa4 kXP 6e"/ #TI޹s@ԙ P~;sK'G{2}[F~S,)7gC/7@ùw<ֹLE٫DWZb%ùƛ۷m\9}ߖڒ @(t|@*0u8wЋI6ګ7&S?eѪ9{7m2hS(OUجً_tn|9 +-(E~z#٥5 ǘU?>ʿ!nMW];v !E]PMIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_symlink.png0000644000175000001440000000116512110457565022720 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME oIDAT8}kSQ{ν&@?:Hl"~.Ek nn P(4T:бh[!mGͽ8&)m^s#Ě["\s*5:>(U*/255.'Ug2R). 3Z5Z۸$B=8XT7lۮ r9qsbm j`:`:ݾ#5ȷ>z5j{]J`""$$S/Q@'dm'o=lpd{:Td֌{0=J8=TdP*FΡ"tn|Ù:S_QCo8F%9ˋ.s? A%h6_7ΓIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_operationsviewer.png0000644000175000001440000000125112110457565024633 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME'(iTXtCommentCreated with GIMPd.e IDAT8ˍKUQϾ Ek-u> Q"l$ ́9( Y%8u`h *jt{5>΍l^\nlWDt( h9 nkC34PW6XU/Ĥ(!ldj+[`<@]]ܾ0B\sj>T8vHNh9HMAНa<6 &wl2kL-cg,8X)9O<魭1TSn>- А920(hmC(!emXn/!F+7o+Ā4/ׁ2 RլIɨ(S__"{C8@@)1DrXDUat؅AjwNͭo[%tet@ \5#z=Qm"bH\!,g' %;G1vT, GOu/O&WIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_savefavoritetabs.png0000644000175000001440000000221612656270711024601 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME IDAT8DHN|GDHhN;  I|GhO<8 bK8IJ X1       |F E ]?5:=;'ryG4 . 2i3~B>,W /" N= R )JE7 3   M~  'Z$<զ#4"J*Ȃ0uo@n6 S"/ok0uk I)οP+ Jw ݮ9w!<  sXZ>*b)YF5=IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_reloadfavoritetabs.png0000644000175000001440000000221612656270711025111 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME-`|IDAT8DHN|GDHhN;  I|GhO<8 bK8IJ X1 v     |F >"% ,(  .@)F:88U)>aD-88  E$mG,"58'ʀN R )JE7 3ع%F漅Á -/M*  'Z$-3!a զГȂգ}.mZWi'_ &"/ok0uk(4 }J4 ))o5&l2P_y4J8Z>IZ>I?EY =IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_editcomment.png0000644000175000001440000000126712110457565023545 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<YIDATxڌmHQy~*"!pdDѢ>!BFAF(,65Շ m)<"=\sHGU0&LIAUO$ne!aCV р3'iNvl$O6eW1JU+\kp77 |Z-up]zi5ְf%:ͫd*S)5ְf#gPʔEʧqiX TD#Oqd 32ìÄT< `3gumvhp;DTyqg kaVv'3vURG΀RuiiC˱6Ujst3Hp7f3;7 ފ= 6!'n Lh;w< <[PYiPwyڼp:{}}A n] ~|{g UQQ*D/X#Zx'T9=[ BeIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_restoreselection.png0000644000175000001440000000163312110457565024623 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME "(IDAT8˥KlTe63=3S3)(XL*bk Y(.ԅj0^ڨ[ZW^o &@RbSŔөs`f:]`2[}'} !KKzxe9;csELKydʾ @*G \nz?PEw6-mݶ;800^?wD/t?S6G{egX8E-W ¥ ᘫ'o4& ESWQO5WLO'OIfA|mFJMN5fMkki\EZvqNԓ&~ a wJHt,f G־Z4Ji'kJȡxuN-? U-JO5 P}ECY2YmA,RZ2*,|$uMQX>5{EtL^Z]9aZo g%:UIz=A;?Pļ)&l;g{e`B.8WY ~:~/N3{LUo'Vn)B.lӕw#x^0]B]qlygw/ѽa7 hd~x] C02!  pf;ZlإH'ZG{FzE*ʙ,DUo7LK"hNh !20>S_Nӹ^̓ˎx]sIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_sortbysize.png0000644000175000001440000000103512110457565023443 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME5?+iTXtCommentCreated with GIMPd.eIDAT8˽KTQϔ @( 䔫- ED KF)Ѱvw}3m!D\߹˸NgvX͌߉@e|v,Zu@QV,}!M^~JPUPJLzwp8d%j O1إTznlut9=?!bQX][|tz8ew0l Bv 5|S`Oʞ1a pK _ Zbgb3ɳI'q\# b: ϗ+BUXz |-nlzn(.-<&cY\knoXs&*W΋gIIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_openvirtualfilesystemlist.png0000644000175000001440000000134612110457565026604 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxtS]HQfgu@V, DZ{ȂՇYY6bz B ^B]"r!I(EA(?0L5|3w.;;̑8$ sp,d\:O0155Dߒ\!o}쬩<0 `5La~P6Wkv?1@9<2ވ+/ؿ+ò@ipSͩiHOu|b97W@۪, t|8_{-M)0U02eb&Zh*-@{7] (_RE,FhX@ ۀ3 y ^e#kCQ<yRAZ09rϨ{^REKj1Uذ p:ۑpCpwmBaך.XP[6/7 "D{Grfg+, ( ՁiXd\P=@qQRv$ 9)Fo|` K;9.|Ů@>t:r>J=>2.}E8UUMܰ@%Ʌ{ꅒ ) } WIvoii#(%IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/go-previous.png0000644000175000001440000000121711416270327023025 0ustar alexxusersPNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<!IDAT8OHqǿof~;RblB n["VLD"%t-z;$% n$W"KPl0wz{RJ7+[Z+a X&殅 e>"!'pњ CT`gd"1≀^;7 C4f10SSLd(~%CS9C]ZBQӁF=hTxL!VS+5.B>iGExd2/vXZ0Rؗqv ^ DPx^R8Z8*\y§W8Ԗ',^\wEjb0˞}vyG!a~Õ#c,26:L0a Dlz" 9rq Qrfa^AD1(Oz_20!NIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_loadfavoritetabs.png0000644000175000001440000000221612656270711024562 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME!NIDAT8DHN|GDHhN;  I|GhO<8 bK8IJ X1       |F D       FQbHBWJD0       2W3B>,WEm> R y33ғ7*X|5  'D׫$ё2#4"J* "0uo q' 8!Jw ݮ9wJ8Z>IZ>I?E>ӻ*LIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_resavefavoritetabs.png0000644000175000001440000000221612656270711025130 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME3n+IDAT8FGH [RT\bDHUDHhN; #,1~qd@hR< 8 J X1       |F E ]?5:=;'ryG4 . 2i3~B>,W /" N= R )JE7 3   M~  'Z$<զ#4"J*Ȃ0uo@n6 S"/ok0uk I)οP+ Jw ݮ9w!<  sXZ>*b)Y.VcIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_fileassoc.png0000644000175000001440000000155612110457565023206 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxlS[KTQ9gtF(]&2/"$(, c2D쵇(Ѝ *Ê r|b Aq93gڧ -wַaBe lv/cOm6>3L>u0:IDžgOI4:#c#?n@:{cc.,sK9ӵvUng GgG1XVJC5U'%i5Z cb䔐F\" Ղ+N9ǖJЮ\`,ρy7:'!f$shnnMMKSh]!Ł@ROC'$N7_ `S&IzзFM^ ƶEA( Cw< c{u5jj<$ˆ?Y ߼Exv.WKJw~?DOw7@"5m3xTn|N J^ ǏV+7 BWt]sjW J4g8Սd2i FqtX{#ɩ)knwر ׇIMSG֭[ ty4~Bჩu|c6/쟍7d9%fáHxTU磣nY=E-b/_ ~ RB !o/q:IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_settaboptiondirsinnewtab.png0000644000175000001440000000135212110457565026355 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME /wIDAT8œKHa4faQ"(8A nԮ]`-ZH!0qtFef5Fykka8ˁK,yM~V&5MD ]/i-/xdWTɒ\6%:B.U qlZ3lZ #^7w4F28T`Xq.:@ sGq:bX;5VPrDh(`peP*02~]O}-"i>0X> 2[9 wGp*9y܌u#L7-;q80\fS8Mbs&HٳzhT5 2JTsaan-i?ܼ-8aNe+8 𷃱ZH?q L 0p 7!k}5`,TF$baa9C:) ̣ D#v*LWP P~@Q&p , ۲R,kloDx5;=+x,aI rNR,|m'Xx]&-QKAd^WaEH TP\ZFWӲ9C)4JIxüE2AWtBzf'7t OIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_configdirhotlist.png0000644000175000001440000000214412405254001024566 0ustar alexxusersPNG  IHDRagAMA aIDAT8ҘCG-gД=/hΔZ.hڋS2hі^әE5-g #qY&ҘC #O јcQ3%ߑ76 '5rNd˶7?BX-  \]΢o2jO&JU v926M}  &]緋"@w աZ ܸ թٷ'kl %056<]!%Z;ѽ573KWF+?;&;Z^J8 o<03/XA- ݮ9w,_ +IW~GuT6%;sYZ>*b)o71#!$)c8IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_extractfiles.png0000644000175000001440000000156312110457565023731 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME dsfrIDAT8˝]h[eyOSav[B)"^ntY^HY+L&;{! ܘM܅ ?[ktm&inisYr^/UD|=7}j>^ԣWt_Op7b#<0#{dzu pt{@Jl_xg-"4 M79Ecu±+l`{w[^AA.KKKN^z; SOvT u<+ˊ4gcut|8qIz~S:'/4ּjW23H]Pt\.z4ޝM>NpCMoS-ܡu:'Gj-Fk gcF|<Z:ϭG4&Yjj4lmT, ˬ,dY."5w ೯s,I$Rd粬.0>z]գ?Z&=%>5G,C'2pRԚeZS֪1=gs9\L}cu.J)[Fv)4%!@]*Xr͝LLCN1^!pEt)Q@4un+><T;hY)U&^iKRiRY/xK}'Ef01Nj~\*Gf&cE̜f/hu116L7?<> $Ͽ&/4IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_calculatespace.png0000644000175000001440000000151612110457565024203 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڤSIhA}]==3c2YL4J\P- bDD%AŋAAAQpd,3ʟvD=_*& g'#dppͿ2B[sANK߿ e`(Xs,zܯNs TA=:ɉ`0!5@- iS !#6p04jB+k$C}8<&Q ^7tAg #dVT2lbhKs䈪(Zk,|1yk!4AOoT5P"M傛+Bn&6l_3g3OXz۩DcK3\Ov8 T DB_-\<Ү:}7bxÖ\U/Q\EKUZS#+㛟IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_dirhotlist.png0000644000175000001440000000147612110457565023424 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڄSKQ3$ZKZJ$؃PRу=T>EEA@RJER؋(HEUd]6ן(0gsa#5MCwK3 `BgқMcϊ\ H !0!@1AWrmi}R2pVMEpUPE%1W Ji/`,to[ 1 4nӶD0}nNJL-jic`^ X=*(s >,.b@Q$U}М*~bs:f 9.* 3HrYǏAd֌>qPQy$9%I[4ɪ0ύ# ,w),"w)7Bs,8`Fz(1JID, ,˽9#Fdz-lF>R'2>km<2@*4v!>ŨPŒi ,{SϹG.7^`uU oc}i)dCcfi$a*ufzC+I-rg!6.7rˊ*{X/Oɤܡ7 V v "m_2=өOyա^?H1W|1)If:ͦK&{9JD8ERc?4q]@,@4Rs K'Ph@gYQz^́(y #_Xj2e v$}R*DyđmvX~MtFБCvU'yVRw̍s* 𴽽 IUJZωR Z4Kuƌ S51t>q¸EuN8ptvIh4J,#4 Bb_VVFӓHPXIa;?D"C 6RWzǁKYrmBM8[0`oHA%lܞ;V! ݈'+Hٽ'Edo2 +¾!ۺЧz>'9Bi2)ZPF;;['+p{=)JTsr <|0Ѭ$)5ޟr|ȝ,gjcM)4.L x]|}_GR t%ҕIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_filelinker.png0000644000175000001440000000115012110457565023350 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME6fIDAT8˕=hSQ}}EQIAJAQ2dAQH+X7 P:HkMdSY'41]< j9+FDD"]]Z2x::]a:@V!< 8 P%iO`OsUfY-`٤1\yi"(R2̈́ 8C5 Jrkgp]F(VqfqO6Ű,kIxrzat5H mAW-@6ɵ|_n8Ӏ .IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_packfiles.png0000644000175000001440000000152612110457565023174 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME1TIDAT8UMlTU;33 hZK5ƍ E*[bX,it!ʀ ;RqM*NSԐINvu{er99˹~AD\eewyY.͇/>“k=ى,kWŵ확ӯ;LC'~nQ >TˆW]3s zf+srCMj\X=CIgGXbzjw߸I6&2?qq]{zjh$@_OܓrYv`Y.Gk8r#Gظ7Oc}z=|~[G/ "h.r*OX5fA'~o9ɯ/qp=$yMU>-\#jRø<VW0_q#6$?@0#޹NעCL%3<*$VBY ZUn/v{QClo J~ {R6Fk(:x)Xe!lb. yvl F,u#md;6@Oo7mY=m׵R eY -G"{]gOxo}`FKF +b_$.& }:qa &X^yrSo3kyX"bRC7>; 06>o-E羘\"R=kk2 IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_reverseorder.png0000644000175000001440000000041212110457565023733 0ustar alexxusersPNG  IHDRabKGD pHYs  tIMEġEIDAT8ұ q}o(o3d7<FhQJ[N_nCcTqKc5Ћ`-lF*` aJY5c )f]Ln"/Pi!L#l IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_fileproperties.png0000644000175000001440000000133412110457565024264 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<~IDATxڌRKa~a0uvSsPY̑s.M/B" "$b%sM$4ڦ-f_}sU4YTz I`I ,c8hJ\/G#a_7ɒ"]_~D`pz\~V%30(2T.*P_8\##큯' 9"XYJR__lrqvvp>*_ m C8>sp57#WۍY:Rߟ\'PcP244hy6xuy+122%:{<AB5 | )psV*p8ӡso.=xvwKB. o- -S2Ӊo++B9w[r>.,ږ1S囧'0v|f*&NFy|]Vm0/ IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_markinvert.png0000644000175000001440000000150012110457565023405 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 81,,>IDAT8˥S]HSa~Οg;nrFͬ4(n+ !".C!( *( *.Jc9<;;?_PEsSzMM*\Y?>4y-] jOk [R=-۽Jm,W[+kuN_ãh(~l'8MznIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_visithomepage.png0000644000175000001440000000115712110457565024077 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڜS=hTAvySőzc! bR  B,$AH iD k€IZITPRD޽{l11vvf[6EZrE؎ !btAB'8$ W+^"aLTOZ$[G (d cGl;5y'kUasy?,:* +L<{p-f)7",3x_3ԁ1|tSSRƣqwp5Xb55XxC}R0^hS/}(žԨIk&l6lfg!d۾ ~O80K~=n9'r#SLjKԱ ѾEf}+LC{r cnm zr /o{\8U:㟻CQO,{̜^jص&$PvhܽV/gK)i@ j  r<1[}wQ[de,:.Pp"סiPtG~Q,O(Qj} 6fTRa!o%fijމѷKW[9GFl' L}\ A CXC\kFe̍ɘ^2 o}Lv MPtK.r˒o$ e,l1C'uD3ayb/MWe*ɳ`P |ŸJ܌˛!nYcʞDߎF5kM3333333331wH3kUҕX/# afߋ)ArVN]Kܣ9~ \\`=эCw5=ɄIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_renametab.png0000644000175000001440000000076712110457565023177 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 3M%IDAT8œka~EP Y܂ Rp1 -HB fAAi RvV'AdppqqQ4ɗsGDH=wϝcD)}I^%N iͭmՕ=@UYMUڧgxۻɵ=DrZu~tcZ0wW߭i/QvмpZ0Cb_zܽ~WI Px8"{@w/'̓c89p.gr0+ځSް?wH$rA,j٩>󇕡KLLg{g.sKo,Av}G9x[:7 @/Zmq<-IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_options.png0000644000175000001440000000151512110457565022724 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڌS]HSq}unMn:Q\9S3 , $z(z)Ȉ >5z2{H7CR3,?pι۽WR ;?BGhE:;k6ވpQ`sl͟D Kј"j]3\":50&_n?'QFZVLvsƢ bR^0(oRR 11*'&P#D녥N|f̞e'aڽE^cT%Cć)|!0qY$3OPk!}={<1L 9贺rBf %$f0 kڊӡPĖP9X H|ǭPnc1 \Yz3y-QB9O=j*p ʃʠFs|R dG d;SCaj'݈(yk@0J$c".ZeD"Jt e"4iwp+/mʖMDCOE07?K J5&WΌ 1zޣR6uNk׻=tfQi8~17_ PNA( 0qBP%iXqTGɊ&e2"]DsW})鑕l7]9*ZYZifUTo% "$!1IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_refresh.png0000644000175000001440000000144412110457565022670 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME&J!IDAT8˥[HqoZ.78ٴ$ ,.B(Ԃ.((脆EQ!yᢠ.(Q0QZiWRRAV[͚m߿yHo{/_^~<)%3EMII"=&@L^MJ{b4uR袆xơF򵡘l)c@AN9iYSxﻋ_ 4`u? @5+yi[CskW`Cɐ`!.8 p=~spp'Yc.޵$ RšTp HH,I{c>P[R:vjτpKo!(  G@'?\|Ý0cdնv&Ӭ $Lx<n UabH[6Ƹ ε|e4C Bz^"Ut:=O)KLM H$ϳ.̋ HIF *8yG]w)q{Ѧ[0NЄ>< $p im@64 UoK`P"nqKOaCR?@U9:y0L'" Rq XLƶ2:j .쨄mp&=V-Yv)|rI|dg%e.- ֟WIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_markunmarkall.png0000644000175000001440000000163612110457565024076 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME &+IDAT8eKh\u{wd&60RAG*u JBtSHŅ*A]TT(vIL2d޹73jZgw>wCOOcVמHOFl mF Oƾ G zDZmϱ#:GKOFKmOt#*6&8`oԮ_R(j=}Й̉R@ePl-kޡga;ZsL|Q/{h"sdĒe(AظP^*9z!̧7?!s{]CK+_څH`ꛄ5#[rR~"BQ+n| fi֖mP;ri%ٍ/FBn q]UOhB``Oۃ#?AȬ [:c]@"Z`ԛ8͆)>1 $SO⩦I1SuG_5 gcH|@AX dVͤ@0ؕݣT3E~O2߇{_J6j:Y dڕ w<9S咱蘡_ 9rny{9 M9N:Ahk\ݧ(ɫ("Pz6Q5M^uJVDvʜX\|bl'yŶ@jk4U-.oǼƝ|rɝg}Tj^%T/$Ʌ1%<Y t1qhwTSM8w_f2J$IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_exit.png0000644000175000001440000000140512110457565022200 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڜSMHQ{EFE.v tEm EQ l@Grk% "#*ZQT{oͽs;w^3a9[wcip0ZѰ~3Ay5RU{WK踥U~IItrw;CLHDo,R [`+#%0] -Avavz /(FZW2^R!S3}*XQ0 ca4Af<;9H d销QL4->ग़ lnP 萛S$݌E E{"ب$&^bna]0ќiI)(6 14 h GEYT+|.ϝYuSCI'MsK dV!1B!B+P]b(55ap#w,V#OY^C2bb]QQCjPM#,+NFt LAF#$*8EaiSKk !. \Ec`~XuTF&#b)iU@^el:j@oDγeG^C"', d,N.#Hs- r]5֗y"X"CqiMr# dIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_markmarkall.png0000644000175000001440000000163312110457565023530 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<=IDATxdSMlE}3Ďl6IUi+*TC )9 TC/- V j*Q5HP@mU`봻z0bP'=ig{o7r>&~elmePy?8k݄-J dF"i:3&> <4@zyˬ ǃrxfazN(6f Kt֤UQPt ,.JuWQd_7p~y^w͑_j-ى׏ V A5GXh# #oK0/A\@;<0Ơ:r Pnf*Wѡ } T5مgnݭWu6g6ZQ|N?kSM3@\cw[1YEIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_configfavoritetabs.png0000644000175000001440000000221612656270711025110 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME IDAT8DHN|GDHhN;  I|GhO<8 bK8IJ X1       |F D     FQbHBW0%+   2W3B>,W3/! M> R )JE7 3_I=;TLғ7_ғ7E F1=]G*#4"J* "0uo O(*1#2ƈ[10!q' 8!L4j <{1Jw ݮ9w33`=Rԓ?x5J8Z>IZ>I?EG'FjIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/view-sort-ascending.png0000644000175000001440000000054011323355446024437 0ustar alexxusersPNG  IHDRasRGBbKGD pHYs B(xtIME-8aIDAT8c`%0I]$u5o?sˆKssX} gf07+f|0،v> ͙N ald̈́ a1gP;}_v>X OϊpT뱆 -%J gfǠG%Z3c> 2aI$%8 ̎_d/D`Vfd ,aT;}_ztFrVO[. IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_horizontalfilepanels.png0000644000175000001440000000056112110457565025465 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڤNP *U%U)y+CqU"ULvvXTvz6?زt9t=.ھ76Bp8IzD>&ϋ*4d: 0]}pZeAGj,[z`4'xߟDP~9%wD7j,HfK4QYV漑6*}-6Y肄i[:C?{A8 2|? yTG/z=4>rYIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_exchange.png0000644000175000001440000000122112110457565023005 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME1*..IDAT8˕;hTA;n6dAI A0F&BY6hea:" FE Z؈7RM ш 1 &K,Ό}C,03s93"UxQL82gb8I!fasf|Byݝ8AEkHͅGÍ*kCnk*a":"t@TeUem9;@ӷ%)V~bldmdC4 V&؛@jup}D~}&a"X T%(pw.iK2lRBRL]7BIe~r]=kR\<ٕd=½WYV~翸Rnh^J>~̹pSQ4T몋PA0lc0HJIØL3}{4.\??";Guj #y JO}w<;2rc ͳA'}L3 Kw:N훮kϖ (PivH?3=Z\;n TقX:kzCr֧K7+@3A5栱QoyҷoNfWñ1Jy2wݓᨅ0[u\}L2B3[=*(R$Bٙr|;X}?unPUJ՛+ahvq' !UrQ`/,]tk7^[eF ڶ@P0`fAPжN3Y8@LݸJ7젙eI-s. |Q,rQדE(,ڳbĖ+ЧQ<>@H%+Av|8ۑ:.E`V]?@`fP9 U{5^k乔B *%Pʧ^2YIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_testarchive.png0000644000175000001440000000121412110457565023546 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 6Ű(IDAT8˝KHQF'g%BEQV "gA4)dh!"Z.ZHAOEW-ʆGLI: 9i1ùp9w8Aw!8{VgI 5QXTXkAddEt!繛e4`x fYx 3_{T Β  #DamL_<IcfLfwHutH} eHEh]Fi0fJQ`wmr sx&Mc7b z\62'O-O|㋳̺n&/iopo,f \y>Ͼ73Pu{B]gW7FS&8ކn *"? 340(;Z c<{э=C`aO4 kt:z D`|C] m؊R |7&`VA$p;Osxi`<۶-P-`e/#KNC&*w@(IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_nexttab.png0000644000175000001440000000113712110457565022676 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxSKQ$hk$/(7PRJ%KKoQHHjDIS VMKJ-TEfuƈJ̾o2.c4Vv#{E۞uU )9g$cIT`vߧ;A~3.C!S긮}ЁU=pB3v6?3tn Fj:=KjwZvsSC4xW﫡>4e> 4}dCʲ_6=T2`-Ϝ HXs]̭NPήɣ# +{9'혈?}H8$·!8+x 귩NR\oOf騷`$<~`^^TD܀A/0Z/(8;@ c@[,Om`#b-crtAMlC Ɛ3P6NzƍT9U3Vnirv?F.W f43=gOk40ĭCձž _M^l8l?3]X1/23ǕgƧg^hڷuS( wD-HU/<A2e^ۏ^,}?,az  ,Hc$UgnSui&vn{'v>Eq4Akw_?߼''k'W%߼[0j>AX-/?ԩT=eYcJ奎Go@W!'$_ԓSln\{&?3 DV%r=?JeFmXv@x\qqah=Ѿ2;}З|9r-k5tT2>hMA҄ǡ̖MD, z=*];[x 8wyIuI1MN<-I7, #?[FՕD(̗ˣRmcer-0{ W1oR ]!PՑl.UvjeIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_markminus.png0000644000175000001440000000164412110457565023242 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 8 Y1IDAT8˥[he7|3ݸ6{i VPCJDXD˓JAE/O@" QX*bK&q6n^ٙ!&oq#<#rk}zԍOPE#<@fݻ qk˱'> i٥%}Kӕ;2ĆhFNWbГwLgD۰fTHƷ^(z)>]ٙt:6T]릁+J(:R+Wkj=VtR  Fs+mb;{"m$s4/R7_J<7b%rSHJBcE*όMc_wޢݾ!~F9{mfETt[[D$*^)B:zt׃a~P2C$U;<?o7 ~ nCrWLRi\AZWBzQ< G>@`- ԓlq\ƋjMR-E[x0dW_u4j&\'qK[o+ !d}ݹ@g;K!H A՜Af-1>>d*f~>AF,ЂKa/~ö= 0ʼn@^[.^UQ 3 krԑ7$}b Py@'M΂" ^ڲ\ut(ߕzAD1(X >~3ߘ~A Q;RIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_exitfromtray.png0000644000175000001440000000140512110457565023764 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڜSMHQ{EFE.v tEm EQ l@Grk% "#*ZQT{oͽs;w^3a9[wcip0ZѰ~3Ay5RU{WK踥U~IItrw;CLHDo,R [`+#%0] -Avavz /(FZW2^R!S3}*XQ0 ca4Af<;9H d销QL4->ग़ lnP 萛S$݌E E{"ب$&^bna]0ќiI)(6 14 h GEYT+|.ϝYuSCI'MsK dV!1B!B+P]b(55ap#w,V#OY^C2bb]QQCjPM#,+NFt LAF#$*8EaiSKk !. \Ec`~XuTF&#b)iU@^el:j@oDγeG^C"', d,N.#Hs- r]5֗y"X"CqiMr# dIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_closetab.png0000644000175000001440000000112212110457565023017 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxSKkSA}fK!s@Z_IYںūmY @e"ULPt~YݍNZyN< BSZ+[ !CU_7c|}'&8roRO?bO2 ކh˿ykq.э6FC_PSJ|Z:O$Icta3IJwgٞ;Hu+0l}9kN~0,zTIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_sortbyext.png0000644000175000001440000000066112110457565023275 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME4+'iTXtCommentCreated with GIMPd.eIDAT8˵=/Q/iBK` بΈ%DjC B|lUx<}-#-$+eV.:[VOW =+,^vY?%"R%_nTtr{>/?6M-c@BP2s6͙9壅82tRLP)= lXLw-%+Jw `m߁:Ю 42\;9p~@ v^Q.8e:@'%`4IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_loadselectionfromclip.png0000644000175000001440000000155312110457565025614 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 9IDAT8m]h[uHI~lĶvBz7˜n(ݍSȼPoU7ެW^^8o,::"RLAQ6iEXԶ49IN߫ݽ}>VUɽS~"^kΝ~Ų,82!KEڻ=o/P|ߟ;v4wK_|7+C]ӥ/ɘO@,1tk<5@ʼnFGhc   :ó  B#tJEڵmd n q=Nc戥'T~2v$/@>^LP0̐esfk{Ub?گ G.2'ֱ<wgL*U5" q~ aF$"}(v>T[e:  o\m<VM" -cW.ܳX)OP8ҫpI3ѕQTnUJ]kk+gb i5!Cmrō-^ #iD(3d;?f;Hnm=Y> =lVfo4 L‡H{ul7[n@~zf@W ]?K4nP/ybg+fMI@:zDZ+]/ #|,矙f^ P)IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_search.png0000644000175000001440000000132012110457565022470 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<rIDATx|SKOQf:Ӣ4ADMԍi 5.;\]hBHQ7ƸG/Rmu\}$b<;sr3³/Vj* L|C>Y` 0 x=^r\hxr.01#0iת@-xh4jf3}p^ܳ$Yz(u5lܑL Mޞdt[[?(_*~&0@*B&!b@$ij$Xn`kfm E$Tn蘙ƕy@Qp(-q$QReaAtmu5L;bG%M,l}v E J%D"p?~b$pc7fX,}8Nl$6r1;;Y^*/Hh7cݺ5i{#b;@g767׫@]4W ӊHQFX@ex<.T+f~L'kof>R\^ ׋ÃCsȳerv (VHry5ooM`Y+ˌ3;ӣ{? X\?[IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_unmarkcurrentextension.png0000644000175000001440000000162512110457565026070 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME t"IDAT8ˍ[heƟ}S4%g&mcW ZZVnC@,[2BAD)2f0E^ 8˲uz ]%Y|Ś@?5'ѱ]8B') sKg5I8ǵincR aDs{Z; R  n,F&iA<2I BQVʤY}1E$֕n6۲*KBC O>?~%('Ҿ"`#?;_Do5}M F:+213Bp(2nQ%XUU2Vhl0&`*3Iw}N+ӵz?uCŹ˟^||ױ}2yb @ v*J6 FwOPm6}lG-sCOBwJ_sp_'=l'/X5Jph(HTwdJPpNK9CnKy ,7`So+PaP3Uvyws16wr<K IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/view-sort-descending.png0000644000175000001440000000053611323355446024614 0ustar alexxusersPNG  IHDRasRGBbKGD pHYs B(xtIMEkIDAT8˝10*,˘ pwYk0!DVٸc0湴 ?iҼ{}eBm}]Fv%Sݤ*sQPٴT6-qQͯuPa^!spQ@ãs3MG2Nv;F"\h{hF# vi e' P! i$ uȵ98)Ĕ<,dW}`ۺIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_opendirinnewtab.png0000644000175000001440000000126712110457565024425 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME9H<DIDAT8œMHa~7.̢0E&яT$-0ȨfQҍBe1D$!!V+i")XXI f1N-$Ш,={cX +wƀ:/imWWR-RAlX+KKNb?@dXcA^QR rF#H4\t3cp?A(ıFme@k$'%*0U,/ ʍ>NIpq{rY%|/dl m@, 6ּ8IJ S˾Rz 1*d- F'FkaajPD\(Uxsa.4_Oۈ=h}F}Z_YX.7Y9灬Mس ]ybʰEYD&4@Z0wb՗=VNgK\9lR8` X[͏%;Biyޢ1&-9l+T;=0;INy : &B={M>Js"3xۺP?iqQm@_6 i  _2\dIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_runterm.png0000644000175000001440000000077312110457565022732 0ustar alexxusersPNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥S=KAE@sv ib#RF< ),Ԁ v邠GLvy]\ Yfgw͛UL,}|t5;"${FL촑h1;-~?O[e}O/K^JvO75utlI.j{FhǗ'ۤ* m֡jT`ǩoW*.t:jZ P0th4ZR^wvE;_N6m$IzvCF1M Zt3G| I@tFM-~"{de9}= kZL2#0y4VE}ϙ)pa粄[3b FU0r#fdo c붔@>=Sjt5JM[h\K lF"'^+26WLC#{y9z{7kVZ}=gƭFm ^zGGyW~kg|σyM._ظuzeӠ9_@魔^L'Y>wCUD\&*XUȘؽ%Bը L8qRlϦˆa $߆xS^ˤ@! D1 H!"bUtsTl&Y` H$83kk ,8ǒ%KUlo ! hޱcЁ0sk<tx [[[WgyCCwN@(fz(b ---3"R0|"آ/2}Nhm Azhfv?CkLZ"Q!`t8+2IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_markplus.png0000644000175000001440000000164412110457565023072 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 7ccs1IDAT8˥Ileߙ6/c;qlƞ6B 8j*U,UġBNMT\XT4RN, TH *j)&d 2;x<ϡ$ 7$wzg},.G\U+AµM:2g_OQSMPnnD &sA[ 쨓͇[ɌL<&l_- M:mC mB .3tSE-#E =$R4n"M~ٗrXBT|iWv=tQ81;|,sd_+şR7. 0cUIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_prevtab.png0000644000175000001440000000114212110457565022670 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME$ҙYIDAT8œOHQ}qR'e4"Fʕ2XBDB p)Ÿj͢D-$8#P٢p(*p)ڼw[|.:9󔈰h6 $3t͒wN|_q7y&z ٴfF'ؿ>m]Qxal9ʙނ $xZqa*wV "-̥N@H&hXfk 9 --4Fh464a wn% ƉHT|ZXxPJ43XkbףLV jlS#[8dq8a?~ʇRZ<މQ*䬏e E_8U3;x*ےJ! h W>Iwϖ _R<\thա}fI~B{_E2׭Je J&W17{rY'aTD{0# =Sd6q@D!J /PU`aΧ!Va^ՊMP>%\0 ꆔRh79M"%8ڎVmۇ{Xz uHBQJ4_;;m\4 6#:o1{k(L,(e<˞`v'n7CuᵺL8xlAWB~su9OԖ=BmC4:O0 xԢ+mϫJ|n ;zv+Ѐkm>:$<3d f&J8SíX5Ͽ/t IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_quickview.png0000644000175000001440000000125412110457565023240 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME()9IDAT8˕MHawu5ص6,;BBtحC.:t cq@,@ ! $d-Wl;yfF~.'Q w ?F3piEy1QJԯD@8ye]tNPwRIPaq=Xf P UIPi;)ξE!@}]=--7F`dYBkM.a _Z{7$(9xcNOTl`fltr{7& ζ%X:pǣDl`Л Yi@iȮ|j,60F J(MΎ!,5D,oM^oݱL(zC"EX]ၶU?EK}dnf>2xd!>B!B@"` 4VF\ݙ  baoaf!ː82 t 9WN;G"JmI)O`_TapާMb;Mjoв.UM3P$>Ugpٍ3M'7YF*pC& w_"6#4)ώ]4,/sϗ. ixof)6SIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_showsysfiles.png0000644000175000001440000000144712110457565023777 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڌSMOQ=ʹBH@D"`g4DF]%ƅ`KHхc‚"T@h-Hi m{(of̽s߹}"q"ik`b_/=co]&<93H0w@+cP[" wa0Xjn~UanT*͢uq];(&~dw(ݏm`v%isR?22$Z. -5ODW&!bu4loMY%Jc3pT2dbŔu]q2X:B uU=+>SOڸa͈%sc:Edx*J?DЇt4Zװ7 m[3~#:xxeG"0UJNn-A+`-0۽/l!B$g9EeL/*:41:\v ß֨ɥLuj.XS"˰>G<.b9#V5KN&}]1Q&ryȡ2D,s5(uЧ#gpv0?fim2iwl. x2|ꐷmiRfA=Fhf(Ţ!)d4žxqp)213uj9Le.gQRq(4ѸlCNC] p)q3i IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_checksumcalc.png0000644000175000001440000000113212110457565023651 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxb?,Xd`|lqVB\L:LjLssse/bHl]i@&V޿YVF7 Ξg`afF1DJJ PcEcx5{RL`[ `(lmm;MKKARLS _~JN{UĂ@=g1\f͘Gnܸs3&fSHjY'\RL?r/]s/jƦֳ̄_cG \QsOf+ûw^<6,-h ÇO|򲺪(̝EBL^TTw o߾eXha[] (yvݺ: tfނkAa1z`T6g2X 0 F|aFT4Ç.\2WRR" 0@e *)fIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_sortbydate.png0000644000175000001440000000074012110457565023410 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME5\GiTXtCommentCreated with GIMPd.eDIDAT8˵JQ?PDDUV|[K%`a4Xx-E+&xCVbD,#Q;wϜkٰt``˘;:kvZM^$`0w ew[JĻ:2\+ߊmhE6hWkG٪WjxƁX/W|1獬 0@5g(GcW؜88cR_RuAٿm'`_# dBǎ(uO |Iql<[5BRLY(Y#aCw!%!hDGZm;h w|IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_helpindex.png0000644000175000001440000000137112110457565023211 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxdSMHTQ{ޝqJ„ZHQdAjF?-مEk"E *~b؀ӌ93doƙ:Z.s}ǪN.q'Wc 6vB6`S5L ^O06+s@&oWO5!DX:0vp1@ }XHf h,ࢗoهw4`6?F^8RuIL%65lo@0 ^,*_3Sm\TF#1|i*83P=Kfh0);hRV[`P+$t!m'ƋOCz\0t %(~?yί6Gvm0",xM&y$dmJ* 0ăc@ MӐQ+ J GK:U 45_I>sqg?;yf塗4 &Lfg㙧xțdx. >983]a?tSryV쬯kw!;l "Ͽ^  Nj2Gׄ'F4˿@I CW&N^$Je^ ZIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_setfileproperties.png0000644000175000001440000000131112110457565024773 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME TvVIDAT8ˍMHTa;9#yDA gPAa5YE&@,jŠ ,uc dhqYys>Ppxw4%b "R])l66pH:_llX ?P1W\'zvW:PSY墀۶:6D ѦЀ'%4+>{hY M) ޭlkg"Q˳@b&LzzyK5S-) oUqd7;uXu@]f&%O* XܕrK?Ĕg`{QS[Oͩ 5|Z4=)4INJAtPZqW/|R\tV Pc"2F$"~CIq8$+{ ɻ1MSTA-:82\MjfyO Wt:I;@ͧ2TF{(R(ZE *±L̆NU|*V!d Hlh y- }筥>+Q( Mac lRX;A?(7JIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_taboptions.png0000644000175000001440000000120212110457565023404 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME23IDAT8ՓOHa?*mJK2 D&R?cg#B;v51-E7&R0ӊ%vt{zy}7PONiE-Vkd{@`z,V17SsAZQ$a"tod{^ ]8ͻl)񛴟hں @Eu1p)J%UNlq(p8x]ȋmħe왒EUQng8mఁn0hJSvSvs"Na @CSYES^fA 2Q׳e1ekOqvt~J3N ASz~{[[a/j{{;G) x &ZZFkR g).W+iZ,KWuvvz<vvwhlh H09;3F@`8@<J&ggʿi&a.Tj<<"ȷ3rf`lVИW/y}q .IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/list-remove.png0000644000175000001440000000036711323355446023024 0ustar alexxusersPNG  IHDRabKGDC pHYs B(xtIME ;"\IDAT8푱 Pi:+#mF stԶ"DO!ʳ3w&H6暺`?S-FIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_countdircontent.png0000644000175000001440000000115712110457565024455 0ustar alexxusersPNG  IHDRatEXtSoftwareAdobe ImageReadyqe<IDATxڜSkAfgf7mDsl= ѓw/ēdEڊDkAۚl̎ov4 =d_7]駦L 1F_\FvdCvwk->}^Ŋ#4BA/!,Xpҥt\qcTy/7)-!tfqN"(p~m\C&^ 2 PF0&*LT`GO| |3 \Q! ?捆4YA+ !BiqyS 48BY£3jtDmܩBǥ2$ψoQ# '4wpSmjb^јIa'w@T!Bj%35F0D &V.!6Roh}F۷SQMI.5Ǟ~+.V,WZ+ۇ|mtN?Gd;bH]5IENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_configtoolbars.png0000644000175000001440000000165112451473236024246 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME 8"86IDAT8]KL\uƿcysA`fISWJҍU6TkfHCb X4L\4]u 4)e3pI9INöFF/4͇>8*^RjzF1ӖmۋWǮ p({~+hX`Zp;b1pK 4 V.WǮ J)b1rH D IAŘ4;DS=5DPsBIENDB`doublecmd-0.7.1/pixmaps/dctheme/16x16/actions/cm_closealltabs.png0000644000175000001440000000117412110457565023702 0ustar alexxusersPNG  IHDRabKGD pHYs  tIME+@ IDAT8œKQs{_gf \*q#h A\jQcWK)- J $T4ma9fpƜE.:pq8N(΁#ΈlNPJ:R"aS<:ubCt-sPż˾=yjXگ`5GSz?-"McObbVyb).ں4R: 6;M3}:ZE(Csѫ~+j.VwR*>3lG}L-^uЗǓ8@` \ `:<,o[FIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/0000755000175000001440000000000012675717730016407 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/32x32/places/0000755000175000001440000000000012675717730017656 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/32x32/places/link.png0000644000175000001440000000145211323355446021312 0ustar alexxusersPNG  IHDRĴl;bKGD pHYs B(xtIME #K(OIDAT8˭MkQs#4֊"T VX(m,. fGŶ ki&G373Idx0p9s.cqn} X\+ _Żi?xnSh"tIo&Eb[IeyD"pj QZ]ZrH%pS Vb@4æX\?`Qei+Y  fIy|%\3 _\t&P(emBEl E2 @xJ̯BQ;`(Yip- @Ш iUr]E-hmDŽVlrfv9 ip2 N@EDK.{[BAZa˜[ t*/MVλ?4$+}T ib@R/ °9 Oe]:7xzGt\.R(;L_*OF^5T)D Jebƣ"VeUߊcl.wXora?>V*ڡ.|eZK:Draf{pj&ǖ#s1I[ •G("OjEu3?:!nAnC:cIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/places/folder.png0000644000175000001440000000175711323355446021640 0ustar alexxusersPNG  IHDR szzsRGBbKGD pHYs  tIME 'ȭgoIDATX헿]E)S + @bc:UV6b@ INJ| !|˙,ߞsL&.9Zk o+k~Flơ BBl|㷕aWFO ,P Vk(e ~ -l%KhrK?$/e3|/ao<ϸ67Cñm@UXn®߇͘[9ŋ*a\5`oIڕaSiC?T@N" g9jYS)%.z?4·V} }\<4EkN_mi%X5tLMĻ?c: IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/places/link-broken.png0000644000175000001440000000143711361045050022560 0ustar alexxusersPNG  IHDR szzIDATx]Ka쎛J&Q ceBD/`P}.>A?W](eAIDe*b殹ή3;Ogv7e&= 7`Gt^K={z6]3fA >5[X`5Pr=dÅ&Bt l>rOePd"[(sZ76DOCȠ*eLA Shn `)egu*͞C]V$Aݺ-x-Og(bsFqD!1`dx OWДhN\4Q/0` :Rl>a% tPp Bof[Z&[!{.*+|uuwS/q:wށ%Z#<4:f>*(P{5uk<zhtzI M]VfKkj%Uv+yQsx%$IJ!)܂c]^/#8КI㕲߯G`3p}w 7F#P1dӵTXR+'!$ׄ]| 0[6IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/places/folder-link.png0000644000175000001440000000301111323355446022554 0ustar alexxusersPNG  IHDR szzsRGBbKGD pHYs  tIME "- IDATX[S339mU!4BdmLE  x0.KLܒ-h%HHA$H*B ^LtnZ圑$^|߾_k?c]UEWo9P4~s S/ yVۿDӸʼn) 899RKH`Gb-%KRxz??\?v'q` 8 fN$TXSOzs~0L0UTLA=pW—WA3a6)֓菱 &(f=n:j0pspJ}V !e x:T bL9fW; -. df 9PEYĽѬ*0)X)>nPᄖYiz#:JvjjO3'yGij{捫Y~՞2L1us+[~\;T.?d M=ȯ#q!֞sz Shݷ^ V3T=*y*`]19jm3\FŻ8sqsr?L~<2 IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/places/folder-link-broken.png0000644000175000001440000000324511361045050024030 0ustar alexxusersPNG  IHDR szzlIDATx}LUeǿ˽HIlHBj&Mj6[3S0(Y.L|GT.3kp/Ery=9[[Oy<GUk>L]>VUK0gKdH^@p4^2]>p\=#;Ќ>}tٽ:l/Px@$OAm KɪZt^KqH}j;RTEЭ+GM bH\Ȕ5@X({Qu+,.›NH<ЃR@uB%Hn .u@~鑨x"P?f0*D0 D0[J9+-W-_@f*@ZgfnW $.&rp>(h(D2nznh#' )s|);p 9" Wt$ɸ#^ 4n*rUQ.fHNAY#5dE0T47w$?POZ'&Ve-07D=[Xs!L? \׻qDsd?Si0`~6$?;z.1mbmܱ#Y7Xr(0rRsFCua$4Eqc1Fej*wl9xկl& Y{@B $uSH>X(㺗 0hLx[4XdUbl$sؙ"mFB`T2+jtdMm)с"˲]Fu0Cڦ~$ B M(4$&f"&ce c3e-.adLN)Jw]'мI2n&Q`܈7 +<:zpTz{JlӶQ U@tCSVOy7:UĽo(x1lne<NTp4r }]aMWhxSa/L@͆ ("T^Lm ZvȏDr "zz U._n:y]ѼCʊ2/)LzDȌBxd}1^ 2&Ys>zK2< lAKIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/places/folder-virtual.png0000644000175000001440000000304111606044311023276 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxŗKH]W}(jb0!cEDk;bP 2:̼B3hIL:&[NbD@ߏD~Em؃xkY9s^׿aYT*L{Qlll^tttz|||jrrrroyW~BzmSٳҬDž_8p:~Lفo=nt)vvvvd^ *** 0!# @[fff/--=@{{+11[n1pS]rEI*aØqlS؛7o_zYSSӢ///ý:Rɷ^|ggGhbqnFHzfY[;۔D_xppDXի*&&0/+ 8%5bI<ˀ8NJDDkfCI= @{}}] {y‚b!#uǜN,A"PGpP^WIzǏ:! Z#ge5$$$(iJ`Љ"{xxxsJ:cvT xfiXgmm aw8;DN!MeRR$-\=NpysZҾa!'hD:ҔXL櫪FlppP^`Jю)AqnllDtuu؉ yvSJS)BwH_'LOOyb҈f%<,'4Gv\VVx4 BL{=eKsss:ڔkoU.Zv $]PF 6`\=9QŠvK3 xF@?b%Z) 1@fff4Q(ׂpXa*;;[Q)&ںmHD?l ˃Z:hJn<w;;PF k.7٬4@#Z#rRR,))!~tљ?y)_a'ݍ7Tee%)a :JqPWl\H)/Ka [ZZXtGx, 24`a8v*QO=c>M4 $ q*yNIljbUm]li\f|a’h-ˮT`c_m;Q~˩|A?sfIJո򻨱_EAZ\eX҆3d?Od['P''|DZVUΗ}v-7͠io߾?'[PPVe`4l*QG:=?<=?;=?<>?@A>@B?AB?BDACDADEBDFBFGEGHEHIFJJJJLHKKHKLILMJMMMMOKNOLOPNPQMPRNQSORTPTUQTVRUUUWYUYZYY[WZ\W[]X^`[`b]OtRNS )PQXY NXjIDATxڥJAwvbbDb k_ uNL)Q {K DK{].q,30/7,5Hu(?dI(` 1 8?w{+93>u}z8? :!"cGXU$rư "bi F /{ȱ0o'EID 9/WSHZLWȈ*ζ5㸖Y H:1xѦI!:fj]BtL>ۚ Bº@i|L:zFh~H5а=\&S@Z4 uDiJFMkbeHC4sէ5qÖԲh̹3IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/emblems/emblem-unreadable.png0000644000175000001440000000447511362134553024100 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX{]G=bbvrME]4ԕu:K[_?"k)2CA~k?gls/?п}T0*Q& &lW[iՅ1V +C_Dq|R"W΃ϿWsFM<0vOJ5Ap, }•X$qO y_~k4gy:L@dtīfg-~i+Ko|ҫ_cpTe82f5_{FkO)D5h^ɶvi:ު#U-?aR&rQx~Pt/Xޣ7Ys̾ƗH^`.n.uбd5 [**LFBX=C5&ǵ_5UY)W 7gg``YV.&]OIL%i5%)3[wL>hT8ASVF)O2K;!g9} ,P$ws7 Уk̥鞢ؓUs]9Сc!$sp2Ր KI{-zܻYMzA5cCm>K4 ֱES4rt 3VGDduڤM&Ab_VY3<O_feyG Csh (C U(r~=+Ro³79f^ p׳.==E&2 ӌN zsxG}g\,DIcrI&60Q ZyEOԥ9R$2?7S [ CbIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/0000755000175000001440000000000012675717730020031 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/32x32/devices/drive-removable-media-usb.png0000755000175000001440000000302411715671161025457 0ustar alexxusersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE LLLWWWlllzzzmmm```ccc999TTT[[[<<<;;;++}}бɹ˳鹝ǯͰ醙èũi~ƪȫor{ˬ}ͮnzˮаԷpqs˱̲ΧӲz˧ճsy~׵ȗָ~ɗŏծ~ʙƎ˘Ϡ†Ō4ѺAtRNS  "$(,4EI[cwzz dIDATxڅOKUQ>{e bFd%eM h%c}AE)N$ç{ww}:SZso6'ǂsQ@ @8 a!\N\iq f)zJr8^íOjͣ:n6}nkBřJF@:co 'qE~I9kys;8@y~Pk>XL\}?#< (P"^ BY#<"y}+fg!;j?0x9ǛߩĵFTԾ$@w~ T]+5ݱׁ 8J 8ƌ7I ` 0]p[uafXS ZۈJW/tV6H/</:T3 DxQ=&9FxOD\*J S8fs'`p +l:b4SsEB@&O.d jrWS @NhcK{ FD#wW!9TA\x{IuHRCCL;YN0e=VNf'I䀤@ʊN(X|"jUNlũ@vQ41<$(dIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/media-floppy.png0000644000175000001440000000157211323355446023121 0ustar alexxusersPNG  IHDR szzsBIT|d1IDATX?lE.qq.X@C?%qhP (hREAI!4n@BD4(ȊB6Etybwf}w{xٙy7;7}v&ڭ;xd_\7VV>FQe~" ;Me~?`Pw]LW^囟R#UTr"pO7iȇ?*b(Е*YɏC@tmll+@61[H<nFFHҐHe-A8n`P<' "dv"&C]` MeE{`6t _{{/ٳ#IP?дy .|a12]Č?$ mg,DZ% C(" þek-qchH3:1j5(⫯awg z}0 1jq'NK`Y`R/V*0dwg[kXki۹~D)=1(ɍ1 WG@Pmh`4\#(j-6ݖHp/ RGon3;U΃ #^scufϬ}=4@ 8] Axq|1K4xGd-$' 3Of=&n_x]j`%_ft1>GI֥Ǿ<@EKj3?ȰsϏIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/media-optical.png0000644000175000001440000000436011323355446023241 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX[]Uߺ9si)R tZ bcIlbL*>Jh"G|$@x3шyAAp%P`hg tzv9tF4b|s|;ko} ߋ|y_%"w7o֗e&IRc.)Zy_yV"0}ve5>>JH*j޻w ZCv<Ϗ=XvPJ}}fbb,); (1Xc6all 쬏1>e}~/NNNNڵK.KKKrh!*1hmJƚFR4K"c;]yVG#/<9;;WZz;wc1@8GPaH,uNmeݺu?Ro@7cuwQJdp"G~IYht]bD#8TefHzh=w޴( bh6! .\ĥ%^O١n@X*i;1gO:2R<9 zZk )KR |h(P@ݣ;|ڭ.NUU11~⣏>:6_ڹs!Bk Zb^DD\2kkc|QBڽ.-S%8!05M̊SSS91H b^JCEYʲqShfF&'?/^ZZTS@e!VXkUCRQbt$zOJ<>E)\6>|{ƘCι]$i~zyK NviRXպ;6vc$I4FS_b[o~(,:zg[˻ΑeJ1 .%Day[ˣGp1=ZGd:65XZ}(l4lA?| DT@7PxZ<ZGۧ2#XEY "Y-+391!!DEA!@ $xDcC"Ph."b@4{?z\).]o=֛Q"h-X-RQւ҈6(eր`RJPFdP'#>y>?}ί@h,,, .V}n|1c*B#q >DB5g^}եaW&H`%gϺÇa oz74ru^#`h1Xa3O??p@ 5 [={l߿&;mVozcU.NVsӧO3N_69sg|t#i-c!M1Cx(wtt@UU躾(D"1:22!!9_5_]gYx<ӽqR)8MMD:0$Izq!M7d(ELP$/--yEy>33?88@\J&h1044tX,>s`300t:S"\H$- 4M5e$|>EQDӴrJnUUe42ݍmG/y @bؽw!"}Mb+++< T*!O+ è>H&BGQE@5}>!~co׋P( Btm@9==F5߬Es+I |j[H$ꤳ{{zi,NNNrxW~[5~W UUz+R{.1e$KuQ(0$ C8*h4 B)nPJR===#խ~ׁ@hnnF63 Jo64tPx :੶6+Np( bϾ+{qIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/network-wired.png0000644000175000001440000000332511323355446023332 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX[Lg.k\ 6d FtEZ)ЗjCVڇjH]U}jPiDJza%"LVnl15YJ~ҧst3_ȳ`mEQHW @4xڵ杝wۿxV[;vzU|ABȝދE`#EQ۷o,>\O?oih AAP-zpB0uvv6P($,@Mf__v>w70 ]AQ,ܹh{UU?{nzx9\6 [0?A[P0LАI񱮮.oaqqQ~Μ9c%0j5M,E 0 q4 MMMBOO%J]> ,ߨ*xaLMMAKK P.A!MhooGXDPe'NիWA ø~-L&fBNq=gnCQ@ڸ+!ɠX,brr0 Q1?d2?|{/ `ѩT*ikۻQT:DQD<GGG1>>x| KKK܄r_Z۝pP=f;wށrڭ$vE_ Ah!DQaeY'7o>б{=)T\֒Yt>}*$DQqD"@RP((}t:)YVp,K C TUDb ][[}>"P(vVjTlRy^Q߿= Z2qT;LoJ7Wx,p$I21 QHIRyQJ+ù9UsiXRY\tyEQQa ԛPs~5Ƅ 4O]U|~m*+ƾ`_> {uk2(%ruIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/drive-harddisk.png0000644000175000001440000000220311323355446023423 0ustar alexxusersPNG  IHDR szzsBIT|d:IDATXoG j T(mA H""BDI*(z˭rg=s?@/p+\!$cٻJ+3;G4{{PXR:51R*M?0ѣGZwRonݺ866qÇ;88xNw):N B x+дJ988&7&ovmmmVJIE;XrBvT*1ZΕQIiJ0 lAkc RJ\׵mq$ ApU1?7q@ZmXv0*8A1'OĉkrK))T** ~*}WJqEWk}B\^^& C:]EQDݦ롔QVj5J^vM6y͡beeuKWx%Zk{2nAEcyΫoA֚ӧO>'PLdڍ> P rtC#?&>` |>IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/drive-optical.png0000644000175000001440000000247211323355446023275 0ustar alexxusersPNG  IHDR szzsBIT|dIDATXMkW;3Fm81J1Bdg1I: 6n ?q@ EC8El#![3sdl5]B_t99GwY"877w$0FX,~}޽/'Oׯ_hR `q\)8ѥ?P(tqrSSSJ%,BcXY R'&&ѨSpT';m$IFGG_|x7 jGz|>pm_x<>dVA~,b||H$2`vh4͙f)ehOviLNNloorI*ʁyPz'N  pҥGFF&mkKD J144tP(i/^V8ήZrVhp)MJ.EMӴϳ,j)~ձm\.a ѣs)!f{H)㌏z>؂+gϞ:"NհmӧO t:M^*n[VVűcPJ{H$ѣGmN/-۶V+8{ۂvT*nܸC_u&''w<BB)^SÇ>iJ)z{{㻪qMP866H)}(۶FA&appZCHӻi8B,"Hw0@.ٳgH)9|0ia`Y4LbY_FA" Rׯ^b #1FIܹsai0 v:RbH\FJix˲hZeVVVCut]$5ԟ<d2 "\p0,Hgl6B`rwL&b~?8O^PR黥ou]O{$I޼yC>gttԷ7wkMӐRcVWWy J]׉D"!Rmll|;G~v^ v=f6pff\6SӃiAU)EVX,/nիW ; TI ؑORԔiК*Wէkkkݿ׍-7T:@(d4 ;+HwW%-TBx-2\}wxq濡Q-˲ IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/devices/media-flash.png0000644000175000001440000000245311323655670022706 0ustar alexxusersPNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŖMlUޙ{,+B&\I"!ĕ &~.Xո(Qd΅.$1UAh"{3s{\׾jf23gsU"iQ#o"ٴ J@4U_w*#JFo^~k-\k%M2) 17nܠ1bقje :C~O^?6ŞsbYz߮WL݂'WOk 4xm}ۆAڂ:"\w3xBxBi?.B /}8'y<< جAܣR?£{8f=ŦԀZJ,H#-..lFx 6MҔJ-(,n+"m/}j/Be4y6"8t q,͒Y c!K$IB;R8Ađ!e)` tJ`mF.qyJҚڌ@wPC1h6% Ű= 'Mqyu%\Qf䭋3_R,1F9(QwmI֒&)3|06#M3@(n%"c(TF0:hiYRw0Dۜ$C [D1b- 1P@R`9Kz& $f`+ ̤WU+q$bL@ i`)`XvR=f/8h4kU:KԗN1͛0hdfXBLiԫTiz>U1g-sxv0d |[oa6[/235E>ѐ6+1}ɥ9RE(j ZZ\} @DPIĘsāMח8,3CV_B00OsEG1`9WL6i!M= K81^_m;3k5 ;װyQJt,JkDDxDDeer~,} ^Uk-N1 O _z!c7lcbE#14t%ʻ}lp+HĹ 1`M y&܋{S1]W~%,@X6۴'~]1_+ثP|lYg-^X0Z#6WvHcAkݓֲHҮ Eh!HjWmW[sՆN?`=AJv DRPZ{~ wB_ĝy=_gNr4#ۯd &FYi=|0~ULM.5^K9$IZkyUɴ6]ļ44$IrO%o6 ֚08 bX%_rc*VO>kI|9` LD8[7 3qr,,*"PP윭jb-/3>3&{MډłĪ(Egw> G$eȎfTDd:xBRaHzV YM&Rne ʛ E|_}3.1], lu%|Q~! M(R8Jd)&wxtSf|޾Af,"mʕTP4~+ȷ3@\B _ JA4N7Q2Z\o`\YqהƈԗwG4͈,Xm҇hjiA#K*),ttxA;hiAd+spz+̎ ]W7m^0Fey fju(h߼gptˇj%[8#1E)35}*1H[ERJ 0e "H(8/Yފ9%N|n8>t?_}sixK$I6t: Jc& C4 a:YE˘_KׯѸzfiJK4>y۶)8MU%K-!D$=O,LJvP;6 k}߳ 큻J]/]x+J9tvs'rkQ0[VEv"E |_?կIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/application-x-executable.png0000644000175000001440000000321311323355446026006 0ustar alexxusersPNG  IHDR szzsBIT|dBIDATXsTUǿwNҷ;ktHЀ hʒOS֤4> >X5%fE :AQB;[ol`!I{nbgVꜪ{|WuvtwjL%^ꋿ}$kg~^ CڇmǺN<:Ic缾X8FϸOvtwjC>;-(UD[vtwӅW^{E*+7iYzf§ǒض@[G8zi閧ůA C04߁]0[,< q7utŸ^K--Mvp^+ic 9oGCSےx@[G1p!iϞfD@,DK8dd[J-P<|!TC`|Ufw㘻s[wBH(tRb>~#;>6'g {q%Q9(PaNDvs nv}~h?} L=QpFc&EgGܜ3p{;&IAETp~Awm b4++)pTanaT};@DXLʵƦJݚd dT7kH3طۅ\}}ShO`] &xZGfbQbM Nܽ'®TC(ʃsBm7bmU$rՖC1P]iNDCa;a*VO^g[u$-2? PUPlq:B gm,f?]Noo*`FVk9?zp7dYC*$k()P_WՕiC1 Pf)mr:V_R`DÝS*(@9dQ@nG%"#ܪ08@Ot&P;2<t8jH*2aV Xp * WyxCDӳwdh趟żSPvRjuG"siQ{zӪ9n ߖ@N"hwbɊ*rwXa.)*f"Ғ" ^Oozumtߗ3$@P@Oll<~% M EWR,ch8w{..KW9Fic:[k'bnki:MYٞK|/?~gkn<xN@2DAbf:+U*&rةamƧ'r=7B@QBNB dDd'E+hΛ_0@@-øf1/ s,n5~cHiCRY$h ekq]!nnOÍ1(n׏+?Fx~2M|"IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/package-x-generic.png0000644000175000001440000000212011323355446024365 0ustar alexxusersPNG  IHDR szzsRGBbKGD pHYs  tIME **/IDATX=$Uӽ;lh`OHG*&e11aRwDFЊ  ;=[UM~s={ms=Ћ7]TΟysBuB,u b6vn cw?:334 `{'wns gwN1łvu sW_`{9p=;0w;xbrXeyOwnuV8p'@B ȝdXжm9^z|O_ xOPzV(?{pnώR/1#ߺ3x\(! yzFi.i &MCɩQ0OҜt~ xφ\.iȆ x"JYEtlXaWRL^A(M e?)Eθ@zA+:hq 2jh>I)9E| %Gs9+dgpD6yL`IS.x;;/q?.-~8gwJE9O6KM3b Yo> wZ$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/x-office-spreadsheet.png0000644000175000001440000000233211323355446025125 0ustar alexxusersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE װබݸ߸ǿ̿@(tRNS $'(+/189::;<>?F;IDATxmjQg۴VbŢdЛR R}ק|;K[?\%Ij4Ls&$3H7X q$qh@J5I(>R)_|@(`i)?w]-<ZSK+1X`Vc?eJ{/ی3`]Y*$/+d *և eFonSC+6d^6Y-`?$y*QT 8'.9æX*XTH} TqK, b9&3`flRI x E!u"m * 2wum( %@ I<2*(0~f{c7ƀ:$^MFQpc 8lqRL PcPXA:iCc)Q8Kχ[V["Xg๳!GvxSQB` 8-pRl*Wy\k䳂]RxW)'7)Mʖ`bq"^c{"ʖ9$5LSpzm}*}~wqqVx؄ڼMt N0(^rhHPq\0XF4r\-{ # w.oxF!)蚆ihdPA_ gꊅ-TmO'nWL9!1ضB@kD.kCKq jԠ+\DNDQ>U:RͶZPg s5Ci9& JD c|ri֗143ߘ ^ǵpZʔ &JCdi9^[=Ϣ\}&ե5i*&-7C ÀO) @E03LYp O@罯gtS5JJW)j:cslc8g[cn  oOaejr nk.O>pbͣVD[ph֨^s(| FնazVVf!(>L}۷Šs H>0O:KdiwQi8UU;2>Až'" ǰE|&[`a%`ZϓfFLmPoyv?KV+@Ғ/~~ OTxrC-fm1!EܮR5'N%_ @OfI^-x`e?,Ѫ'Oqҭy)0xjAP+A$qAgfvv6^k333KLHF0R@rR_ ^ť˧O~ܶ -`wzt+ԩS]o&i-G0p+q%iӂ>9qGSSS_?~i`$y4ax`S=B`-Fb|75IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/application-x-cd-image.png0000644000175000001440000000275311312762055025337 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<hIDATxڵoG3{-N@KDQ_ZJ}C)-O:łn`lRVe 6޹kRE:@@e-.fe>x6Cy?'U)1F#r#ɩ O6OTPZM8~}2! "TbAv"%-U_9+> scWs 0S)Z۞E7 7>Ziwyh!bݝHzadMP(9yek§)UC6%)^=ajF7J0!ɑZ@ \@<@sm NǍ+@2Uڻf$F8Ή^B_E1?awlLH]Qr=6Y"jrvLl.YujQ_q1 +[䮝+g.L&pyR%GuDhl."x&Zs ڃr5S܅qn>HuӘd@LӮ"2&OX+bS>yNꉅ35i<ͤ~C`־'sQ=@ɦl;20NwQr&v H@Sȯc @.!M:zg?@ qFzd#&18(g6qd:y)zŗ,gj6ښ{SnlluE! MGϬ;Rč!ulq]$ fZWVVݻCz  E8.p"ժΝ; ~:'H1R[n} ,ɾ > { ?es_T>a~9∁k!O(P6FY^HܜeDRIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/application-x-shellscript.png0000644000175000001440000000207511312762055026222 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵWMOW=&dRMHhv5XcV P>ZO4R& ɢڐ a{Ff3J{{~~CN!S? ҀSBi??C)@9L%*?N@YVasX !E9#1K"5bvc (xUJRP{Bq"@WǏ199\EdrFn}d{‚fvR|jj Lpxx8L1uy\#c|k/~ p}4&zZ6Ȁ+WK899JB$ w9 Q86ӹc`qm[rW *h4p̾7oc>˨=qnPf#Q> h<(sدSgRW˗~9\'D㽽=0~@;ݝ5?.Bxe_C? ^w]_ؑ@dg]@ +OO6 FqgW@mǯ ߗwS{aTĄ|lszȃA ~B7j? P0wapZa||VJemnn-4x#.ȍr[r~{/k fff/T8(}BZ .-*Iۿ]`&¢QȧEWҮXdYسlPB𽈯h:T$)GInC/J;VP1٩T*/D| Ni aGXnK.&L?<3 IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/unknown.png0000644000175000001440000000210311323355446022613 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxڵWKhQ=3TX"OVU\D0[,EV).ԅ•u).ݸVpB~3[65 3Ɍ&ϗq/#ys71|Ga5<, (',"x0N%P@D]qX'że!^W " Ժ -LSGj%7\+B %XΪKaTrz.Ts4 vejV(WNfP.6kh@$ 76>98 NlCf p֗ͦ;c 0D1۱*ϭ[-|s ZWd$Ʀ`Hi.-5⠖AbQRuZ% ʺ?س%dy'蜄Qbnn21Ι]!ϗض=@)"h znA}&gGdr Etw' WD@nֶ@_ZPޣVJ_i{{{n=ʟSv1gz<ɅbG鳪 IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/text-x-log.png0000644000175000001440000000356511323355446023141 0ustar alexxusersPNG  IHDR szzsRGBbKGD pHYs7\7\ǤtIME IDATXŗk\ޛ7#ɑSI#Np %R1!R!ݔ@LlM]l"hUpiJ1I#M$[H3޻t#Kcg77#;|;UED;tܹDQdC͐1,oŁM7ĉş1NZNJ"hϻ۫}t{'|򳥥w޻ҘA5 CƇ {A b~M3宱?Ν @c R:l}S'Hn)DG'O)"d>qB1^QT Jͽ"769TYnQ_xD sD9ӤjEUDvLMM177GIfH f/;FX]];SSDIf1UݕV##edX1չ0")Bt:Xc ENqx(.ɬ-Tu4'!dZdsss̰cǎ qt# 3VK)B18c4a:dY"hہ/P#0ā:X}'jA`] ZK##ƠZkQ0OBeȲl+Y8~=8" s<#$IRUHbWP.<}4z9,Xȑ9f@,R-:k-E*ưS>{ɓ'"jY~[[4rs" IG(=RSlvsB|W+>(q*ֹJ=[La{{ arr3>jqalTر;^v]:>Ev&&&HNWLsf񱲮TjX #gGL:rNY(KQ5HjʫW~Vَk-ZDּ̮V{CPU s( V~i:hYBo1q}ޔC1ަ^ :z{OQ9e9Bl[—j(BQ5ZnU~GE=z=iv}Q5L%`#w [c0"LL^nKEt])`(!Ib:$H5% "R~h w6)F=›WK.… ߼ީxr)zϿZyl6fcc>*y^]?ycLhZW^/7Ft:8s iRx)ScʡTș(l}۷o|e cl^n͛k |O?'xRyzi!cv^TB}yw^r /"[o?_tNLA*Fq1Z+u:/R왞nq\ׯ_iBIlQ®t[ZKٶv睛ґ 79ooULӄIdqCqD%QA(Ѕ~Bll|M,E8?yb!χ`Q&Ps*rfC}'k_qd2&uu︺8ҽݥ ,cdd?׮&͈FK /@l9yAٹ9%DؿV,_5HĻ^|y MW@UU\ qe`43ǟX̡a3{tK 0 H1rt2|>;Nv3_:kGߵ#WÙ_Pl{ eyܮxrD>k[O fN}{ |Mfff!." Ys@,d^n@7tLt\ \@Of+L:CI2(=F0jUS191ڵ&W\GUU%n}I f-v;_݆ÇcҞ7Pg64䴞z/-0 R{EA~Pyy96nzL*f1>>)TZ $'ꢎ;;;4 UQPTU'qztb &50*dFG1=5ɽko<,òeK`ydIAWMn'\R5j+e5'x~%FjH~`ͺud0:6MU 7pIa_u.fа@!+Ƚ)j wx?a rt{H]s1~9IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/application-pdf.png0000644000175000001440000000300111312762055024160 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<~IDATxڵ[hgUZToJ&A5A( EM| Dˣ- ^@7HLc`4udݝ^fw\vc=0L,H3;|4IӘfSI_!59jf&30!J!N# 34!V6m|^/D6G bGF f2C*`,XݶS۷؈77·s't]s@N@%or}r7<ĝ$~_fFM3G.iRx XMN*J́mJ~& Ey}s`:ٽ?…Ȝ8\< õJ͛Q~M߽͛ ]g,>#m{^f:*u+41κrK"J+\먔JjBe^skh ^^ sP?|Hk@M pbVOЃrcGGx%Xe'EW&P* ĔlQeTe$- >SnJQ<8B"3 x/ 66$DT2jz?"-8kXK\5si{|tdD+|> lg7 j^,Q@pJ^vuu$]][#)\/-ra=X&Umμ# eF)܋X^^FOOfgfH zP[[ KNܼy{E]]d࠼VUU%׫M&bJRHBBU]]M<{!^#}x]EjF+d*:8ri"yCŝyQ#h sa syu477jzƜ J۔ˏ? h;Nfܸ+bߑv-755 sdJFȀ5Q{Cc;0CR^ *TB{`]|!`;6{>C37)U }:98MLzE]3wg]´ $-`R)WVVXT4` |094jrڟ~ 'Yv#QX#s ]Y` K:DC[,"^4҇Ȧ#Ӹ2,/x6Tܵ\qmG0 Bj8S@ 2z1&'C%IgϾ`\=TJ^UXA"m+Bzݻwow9 V'}qbbp_m# 59Yg>lQK%@ ot_lKDJ(@TIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/image-x-generic.png0000644000175000001440000000221311323355446024057 0ustar alexxusersPNG  IHDR szzsBIT|dBIDATXk\U}2I26MlT G/',>7 AKQJhhK-VK[L~ə뙳/ˇImCA^}{7^Ź>xߝf-"xhpNNuNv.&Ja ϥ=8voLԫ\DH,lu~H'P $\{}|}^T*@9 iG_;[A) P:H.86D+@aZ=˩FV]]=#5]<ЭL:HJ-o{ 6"IeO^^* kn,LHro!K\6wt4A6qi6YAìy$7: mOP:BQ!TȌlɤnbi_FWI'e Betnz:sl:E/1t$pS#$Ą2"1KҿMvy]aH2Bq" "!?z}uiET֗9.c-Hy.0@kMP bAGuPG8gTKDi`L*vzsc,Ze<aL-9hFRp|qok-Au;C4[+k+9wf@)ŗ_;w/cZxժk̜319};9y0]]^x܅F ^r~AR\~pff~ ԁ -NK 7</?nײIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/text-x-generic.png0000644000175000001440000000356511312762055023770 0ustar alexxusersPNG  IHDR szzsRGBbKGD pHYs7\7\ǤtIMEOIDATXŗk\ޛ7#ɑSI#Np %R1!R!ݔ@LlM]l"hUpiJ1I#M$[H3޻t#Kcg77#;|;UED;tܹDQdC͐1,oŁM7ĉş1NZNJ"hϻ۫}t{'|򳥥w޻ҘA5 CƇ {A b~M3宱?Ν @c R:l}S'Hn)DG'O)"d>qB1^QT Jͽ"769TYnQ_xD sD9ӤjEUDvLMM177GIfH f/;FX]];SSDIf1UݕV##edX1չ0")Bt:Xc ENqx(.ɬ-Tu4'!dZdsss̰cǎ qt# 3VK)B18c4a:dY"hہ/P#0ā:X}'jA`] ZK##ƠZkQ0OBeȲl+Y8~=8" s<#$IRUHbWP.<}4z9,Xȑ9f@,R-:k-E*ưS>{ɓ'"jY~[[4rs" IG(=RSlvsB|W+>(q*ֹJ=[La{{ arr3>jqalTر;^v]:>Ev&&&HNWLsf񱲮TjX #gGL:rNY(KQ5HjʫW~Vَk-ZDּ̮V{CPU s( V~i:hYBo1q}ޔC1ަ^ :z{OQ9e9Bl[—j(BQ5ZnU~GE=z=iv}Q5L%`#w [c0"LL^nKEt])`(!Ib:$H5% "R~h w6)F=›WK.… ߼ީxr)zϿZyl6fcc>*y^]?ycLhZW^/7Ft:8s iRx)ScʡTș(l}۷o|e cl^n͛k |O?'xRyzi!cv^TB}yw^r /"[o?_tNLA*Fq1Z+u:/R왞nq\ׯ_iBhbPmPPnQFMBJt\ϙ vh*2! p(p!(#×(]3UMٖW}t$l,q,v"4 Plvz'>qE;u<ՕdA6ڦ][Y2x|6_u[b(roYcCFuzdL8v>^ LA#)ʉ SOWghP@rH2lہx!R1qP(,]U|oZfru17{1s kѼ\D<k$VﻅR5MG\T ?" +Kȍi |Qgbr 6&q3 3y苦?fSHP fD  㚚,@SLmcf)/=ut0{o򦅙Y ã&{°cIS0=[/ |u,5% 7Ef k/=%ƱdM(IVXY >pXu*l:$M]GP@ `L̠r"E| =a]Š Y"eDM[ Tt,[4C#6X2O*Q,ۊΝGuH.C7I$"pfl vP_lіe6ᅕKBt?NdY|(t啋Ey2K.C:Mv\ih_ӆIi3g7t]/#eb\܈D33Al`?zu]6:2*m)8 *'+h6<ʦ"S h<~iwׄƼk% H%GDE1I LnCL.&JB\mt_wNxYbq "(N[.l`YT>R\LxȽ ,& PN1z0 $X O(:G"%#vWpVCfqC AbA98dL&!קyA|x 0j-Gx D>EytIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/x-office-document.png0000644000175000001440000000160611323355446024437 0ustar alexxusersPNG  IHDR szzsBIT|d=IDATXAOG38&S;MQUUXȁߡsOЏ[.BBWNqMv;;9YϮg5JO}3~3cH>P<)%Q?aO} v<H7;;;q0 }u=_]} m(T*A`b"v AMh Yzfϳ)(A@V+HPh40*A{R y xrf !h4R0 P 666LOԐS퉦ۯ;av ]777IQο|Р^y)9: 㾭da312rrr2ǗO36Юfo6Ը`)b8NONN5z&>rTbe+++ |Wu||yXJS.IRB*hsU1i3 d}fek K8@_#eq>Vƨ@IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/audio-x-generic.png0000644000175000001440000000271511312762055024101 0ustar alexxusersPNG  IHDR DsBITO pHYsvv}ՂtEXtSoftwarewww.inkscape.org<PLTE opUX niy  #%&((+0%1 1225557&99:t6;-;>,?%@AAB'E5E3G(LAM:NO@O.P,QXBY:[[b(ffgBqQ|\}}}sȌש٫̮ܪ"P6n&tRNS  &(),/2:<<=@G,^IDATxmMkQǝivjqfn\TTޅ.uOƭp ؕbKVƴII'3̽k{8 R xe A1#2" L( 0!"@0+BVX'd&f"dDw1!v@&.vۏmR+1dL4{zxwSL|%מDiBߤKOHH'o')ߘͱq"d$%03t@h} ]B:@pr` Qo?$" pr㜿i}\í7V/HV.v~) xF$ʬ G?gZm?x*rI&X:uCHuX 7j*kςӊ X(}j\T*~AO|J6L,sDFuXKjӝb0=Zz/ "V$ya vA 4d4 aL~Q(;D:MC Y%0љ_-ӏ[A9IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/mimetypes/application-x-deb.png0000644000175000001440000000303711312762055024417 0ustar alexxusersPNG  IHDR szzsBIT|d pHYsvv}ՂtEXtSoftwarewww.inkscape.org<IDATxWklTE>sna*B IDD1c"QGL#?R_jhLD?bL 5 "H HKҖ>g33ٲ ~{v͙sδDsftuuFP/Sh`F69mڴ݌8omk(1iG c9- , J)X)(5q\qέ;?yt6gy]=D29aB.{PLJ”,*\}P_Xp9(0k98" _E(׈߉i‚7_y]/\LPiiJh&5Pku^Wv.X-5z$NA ν,]Č<CHEo`#M22Ve847N5ww]pvj;fy̝ P9m q a[t2U5=+z=a55zq>͏O{;`FC =} 7F!oI7UQҹEs=>{X1xa,^%<~Tfm^!W@hAXy>|wwq68r';\Θ/ ذvI=|xcajXAD,R8|{pix ϵ8etѫ+wup>=NȪ́y^eEx^ kW-(WAbE[r>2Wq`~>@1.[L݂L_作p|FF&k$WFd]ڲ#δDD!#@:n٣W*?86ƭ(`MD䠀e?Cy0=W FkwP,i.:a$]r:D)EI"H%7g.˘ptR=X;i $ &9:Egdt_!TM=B pkCH+˪cBp-b m_Kt RIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/0000755000175000001440000000000012675717730020574 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/newaddition.png0000644000175000001440000000256712405254001023573 0ustar alexxusersPNG  IHDR szzsBIT|d.IDATXˎI̬{Ut1!Y$xB9&>yp],CDBJG}xA!&7T8#pDuVjU~`]I@4@ w0&Domho"S',ymbnKe@D0DƘ޻wg~cݾngv($yZo:',Tz^GaYzܤөqsc6[\p]ltc@BC7yJ sln_s$/KҬ3E;+mD]ԴHuH> 8::Z9pQ_ч?o|8鍺|[_۽Dg:jf(>aMA#vWG!sΧiJ"4jy0p`ۭisfcPqvx2L&,{pցl<3 MՄsE(ߦV2TiT&$ф1EM{}]|E[0Ш&d3w%UIIdJyD, `uol20(64| wtjT+3"PL&]w+(jƖZZräbRlaM3όhY&3^TueY& ANk"XJ5*e!8JU%mthh´/Q=&/^na%ʥp9ӬdgT!"Ye/ Qe^eYqMV/>(.(!]3Ge<+*Gk"2- $/k= pp{{"4D y8(\BNsf6"+ΟVzhr$TO8f%!wz /VPɂ3rc(. */)1F(8O^AaTύyj@ @vyp H^3rNJ/HjiIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/dirmissing.png0000644000175000001440000000447512405254001023436 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX{]G=bbvrME]4ԕu:K[_?"k)2CA~k?gls/?п}T0*Q& &lW[iՅ1V +C_Dq|R"W΃ϿWsFM<0vOJ5Ap, }•X$qO y_~k4gy:L@dtīfg-~i+Ko|ҫ_cpTe82f5_{FkO)D5h^ɶvi:ު#U-?aR&rQx~Pt/Xޣ7Ys̾ƗH^`.n.uбd5 [**LFBX=C5&ǵ_5UY)W 7gg``YV.&]OIL%i5%)3[wL>hT8ASVF)O2K;!g9} ,P$ws7 Уk̥鞢ؓUs]9Сc!$sp2Ր KI{-zܻYMzA5cCm>K4 ֱES4rt 3VGDduڤM&Ab_VY3<O_feyG Csh (C U(r~=+Ro³79f^ p׳.==E&2 ӌN zsxG}g\,DIcrI&60Q ZyEOԥ9R$2?7S [ CbIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/newadditionfavtabs.png0000644000175000001440000000143412653161145025145 0ustar alexxusersPNG  IHDR szzsBIT|dIDATXˏE?~켖5^!e9/xO0FXnɲllkt J2LDWK-lum,I0 --J(^B÷r k;%*_'l( "#8?KQ^a"irduKZ\w^l*`I)BE1=.+;/~~ @^gu)hmiy0QUn?S Y6~eѸno@QaSx1m  O3O(׭ &1  B[l}(7;IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/submenufavtabs.png0000644000175000001440000000211112653161145024307 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME /'IDATXGKLUs@)HS& "66).0067.$Ai.\PQnHmj4[ R#46۔Ly|BX[f'ͽw=:묳eX}C׌)+ Dl*K&o譧"yU\z'wRYa:P+I><ص~+"%[#GgQ)]$ %4<_> 7 p ~Wgf9QN%+up <_@J$$%eA?,TBJ&IHqH *E,qBM%5 j"9j2@ ,IeӾ `.1裩Ir>Ϥxz,opy8u)~<}h|xO&ò׼EX?DZ1vz/j*@m 4G MUx%YyJ_zC&xӻL' j*%@U[7k^b<t1|7{ m8 + xcUwF}}d5ˆ_ #DށlTyK9-]??)^[}QUrS_ rϪ1Bݚ[.t{BRl f(ESɄD~i.ߤPיֱSfqT6"gPHOE;`eH+0 ! KY47A4v8 \B"5 ƭ#}/Ѓ[m,:c 8 ΛF|{߻Z!EfKV !   e6O IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/dirhotlist/submenu.png0000644000175000001440000000277112405254001022741 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW[lU7{.b/hEI BLHD@|1F10h|ME_| &&DL0@ !h+(WKvwn2snip?;s4M<ȴ ߾tDn͢˘vΝ4L8_{ږ5 0U\6l|>yWt~? wAO%qu1Xi4+`8c:{Za*Ns91 T{~?Y{gk1#-  2@g'+"!j%YdbZJVL<ϐuJ}0'O8L5yYwၻB@3 @?)* ZɊ2Oŀ/ 9p ȤRxPAcP9H߽/E qfTbH |$hZт1s>8Ԋfn .pjb*kZ敭ܔI2M\P_ŏ 8CГq`61$dRbN/@(K:'dRiP5DAԶSDG E9ͭ&)޵F@x~.BXja{A1ff2Yyz5_GZ1)hlldNI*\ՋOoCY MrdF"geWƇt AaP DiY&0Q ӢWPP bSC7eODkmGVETRiN${j}Mfeu@0q>e@䶙RYH_YVJd{|sEǵa GfYLEknΡߤ;1v8"CޮF}#NzzZCUsh_/z7R:%W9mBMe wtWM4D}hysG™aDB(o߉kR~ jRJ \Ͽ|SZCl1<"y`:!!z}l~VI@p?Yt8L{w8U?.r{.> Oݡ(IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/0000755000175000001440000000000012675717730020047 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_keyboard.png0000644000175000001440000000225512110457565023027 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<OIDATxW]lU>ݭbSR! ahHO D_J5'MlV5*M /$ ݔZԖ~.֍̙{sw2P1/M+X1PMVEzI1pG"Wvo?s_gl~퇠W<ա3N|uȯ `x`Gオ#!Ah<~@Ϟ~29sRo`(,+j)C!ɰ MX4V7>߲(a篶$ů۔m2;0@3G&'3+pen@z.E s=!QBalIfkU`(3 cSE:;DŽ~KՕkfZ/赐+aHkV/,ȁf[1rO2&ʥdRz`&:MG'-$vC *5l;s}Z4)MIaYE;~/sBPZk(/Ԛ{%ώѓ[kSGh0#?эuvP@D uz,(A7|nhnfO$lBFKilܼ~ >c*'{:n1KbĊ;K}q9A m\GzSs\^oݪi{}7QCU23˷cK6kzƃqפ * ts=XIʳT'tA69UICQ樓݆c"D3 >+Q޾Iv\W'OK@®6%:-mnYL{1w&%N]άfcv'Nx@6d%P2?>KTdx>qO}g_$=׾OA  qx8v*XfՁ< nhg&4:{>Gik##߰c6Hd-}5 QE\fH>rGؗ*? wKM&w(IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/list-add.png0000644000175000001440000000113111323355446022241 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX햱kAH$D+AX?B[CF+AA\aai#v"B,LD"hlryMv݋Zx ;70cDU۳z?v{:d֕3vO"ae3No3A d홆9{!K|=Swz"(-g˙Z|w͛ܐOK1ђ<'!${V3K8̈́ N΁u}'l('Aq)m/Ǒp0VLq &o3 s R7~1j>,$jt mPcT&tlV%~~3# jiw] (0[@ 4w$H^wIH|4N rZc'2Se_T0/]X&΍-OV +0JOhC3o? WLvIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_wipe.png0000644000175000001440000000400112451473236022163 0ustar alexxusersPNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<IDATXW[]Wuۗ9sfN3$M&Ѧ R-xy*} R+} ->ւh*AHiSۦA3Ld.͙9s}u߇ 3әPeֿBmx(C"Rʙo;;o#PJFU`l?z0"fF3_Ms "h`fcŶ&{{ z\ Q k-fggeٶ"yFFF+O;gxZ<=6&8w=}m ODӹ:Nf_wn?8F[crC6^g]f.v3ϝnx:[ND@s։{vt>'_..1sFM(X9!7=|= 3;rFIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_transferleft.png0000644000175000001440000000224612451473236023727 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<HIDATxW[lUefvEjфhܾ^0`4zAEI ^4!h 苉Fvnw{sr90c `$.;0f-2 .:B[<e-lik:[@Jl pR0,Kn ˯im[̢j $mJ# c=" A2 8}~-mfQo RD|ƙcȂiꅡ4-#pJtsʀde8hǢQҘ0 ktrFiC|ll2$M$\)H'0dZ(z')']{a܃'w57><:u Բ˧CJ !hF&Մ.߇e=5[TnQmN\)ى6="Co|{ng"rn{׈Ɗ6^jQS*ik{"%/i(18z ٿ1>YU{,^l?8pd?}n;Mk'!9M}Ǐ-E/fsw@q|{|YOIq,dmڤ4i513+Qcf~ԶhDMjx_Ia&k7-`1 H|&w{+dgIIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/edit-select-all.png0000644000175000001440000000116711323355446023521 0ustar alexxusersPNG  IHDR szzsBIT|d.IDATXŗn@*R- %qP)ox$@SBzhUd6㈹L7+s_m׽ipmmlg`p LMwcu2l 7* @c."s@`SDdnd:qym^VEi8>(wV.•8%]` Ǭ#E-ً/ x\-HխIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftsortbysize.png0000644000175000001440000001021412467744673024327 0ustar alexxusersPNG  IHDR szz pHYs  tIME 06:+IDATX  f#Eh /ݻ}!Cf(/mD(/!Cf>Af!Cf* 1@+l$YՔ߽|N'!Be*!19'Zߔߔ9'Z*!1!CfN&(Or+$22 F2 F+#1"Cfs1C ii+Qs& )44ۻp))G (`(` ,!Oҫ` 'Qn֮My= "  MM  az[fGi!8_=!"a13)B=^^OI[A,\~f֯Q (+YoIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_editpath.png0000644000175000001440000000230412451473236023025 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 8[R|QIDATXGV[kTW^2331Q|0FcAR`A4BDo"b  _BH4$Te[d΄aϚΞu=s?Iq Y9e|^-s 9gfRlex9p5kj;zne!ZR?KV8=`emt4ohU"DF@) ]Ο/!o߼'zDp>ܬS]) xG(/ tM>1Z";3.=JA^Zaq<)sO ^Ĺϔ]kIˏ berrR.^Uy!25P8|}0ɴaaott'۶b a f<67htKooO` QO|+)i )hXEJiz*ݔWW6ɽ1.dxv4#-"e|V=t. i胖sV EcB>AA !b, |EH+**+,,؍-F - .Cٸ50ї @ ؜*e <::  -}-  w 2ҏ +/۱* 2$ ۇ'8?- " %3!  ,,* O$.FL 5Y\׹ !- J*C2x͒* #A);"%@ њ5v1g$P'V 4sTP%l?mr ,A xKg@V5ї @؜;v <::  <f% ,!9 ~12۩* 5rS6= -  #2!  ,,*  Y a߼.F V  ;_=aѴ  (T֌5,I!Pi: >y/ -E-= "D $Pչ '"9/8]{ + TA-ݝaIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_networkconnect.png0000644000175000001440000000342112451473236024267 0ustar alexxusersPNG  IHDR szz pHYs  tIME  UmIDATXGWiLTW>͌VAB&" b1*EMI?-66QhjXMڤ4hBF "b2 o9ofd ;{w9=9RpqlYճFc Kbu)B~Ϛ ,6& Ce1o}aU2 Ȇiw|siA2ܾ8~۳i24LEde CZGIɎSj]VxE .T5$)@ؼQzh4 r .0PDžڃehs@ND6נwȑ#mJ $QѯiHaדYŀу`K@91p}Jt% #{ nqG̱ީ@`z#Abdiדra;*D &̄ 2U\^P; ؕ :0(k"aizG>&L7-F,\||& In#h-KOg}AAtwz ( 2/H 9 #Q%>s\ب0AmV fCMŀ^#ilm=7B PZBٵJv*hx|اyY?ZiZ& #uց0\|#xBR %fC [bSnjH]ֿcxdn^B>n1wXk(W_c#a˒翳jG1Uy۷XU_H- Δ^Eo΄ӥWaѼAz`wYD. ϻ1 -0ٿ٧؉[?BҙF|P"^Wz44}Zr3ހ"1X/ȃVèo] cCِKv-]j@кG-Ll3=rs0,"e E |cVsҚ]D?"9l 1Csx le` &b\ x@{Q*G [L=eg/ͦOMmvjPF~cu߾-z}-?iP(QˈFfTxҎ {V}*n]랜/8m dfU߿f(IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightequalleft.png0000644000175000001440000000256712451473236024256 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW[h\Ege79IvlR/61iE[D &,>c BU(&>AAE*bU%6ٴ$f9gefg$4eI%B CvVxvݤ.ƁPX+Ǟ|ygԋb!Ag߃ T| zqbS! nVX :_70WV%Nw#lL]}'y*`vv`]6f)Cqe V=K :`&}gR.pgs^@zF2a` vυuau<5sr{d]9WJ^.Ǹv'T{3nL8<`ۆjZ$jCk&)b3˳GyLOL o<.L tBJBk|4mX&>j$G:'NIܡQ0pؕz4* EKF (M@ʠn;\N[L H!qeL"h0BKcP:!|a=2Ts#sTJG8j.Z@ r0${.j4NkN/ `n:}O@>6P x/^_f&`19Ja2#g.@8CVaO`_Ǥ$tu&4i f@Ԍ'YlRJÔj՘ϢmS}LzN61C5=Tr]Hl@a 1?+*gkzuvs"b`ښۅ!87T;0$>цU~Ӹ[7 X2Eyz/SUr/*ELl ŸN8_Loa@/& ?ߗ9xT Qp2\P,h*و +>:lL Nk{8_ dՌ96'BZMNu% 00P:`0x^-Izufɹԩ?X*So;eQ^@DQ"/_p5^89ܳ*|/PzSG,#Asʁyqg{Lծduq')D`RU0 1oDډ־{q쵉PI6Wu $iXQe#ETzn\gIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftsortbydate.png0000644000175000001440000001021412467744673024272 0ustar alexxusersPNG  IHDR szz pHYs  tIME /xc+IDATX  f#Eh /ݻ}!Cf(/mD(/!Cfog7!Cf* 1@+lޒ@+l* 1!Cf#B{!Be*!19'Zߔߔ9'Z*!1!CfF:(Or+$22 F2 F+#1"Cf+Qs).4.4/&1%Ek< (`(` ,[gD>ҫ` 'Qn֮MHQY " Q:   1daR (hciL6g\~f֯Q %: V8IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_clearlogfile.png0000644000175000001440000000401212451473236023651 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME :'$϶IDATXGV{l}srH2zcM #UVt1Ι fٌ#6üQBDb N#8@ҦіB o9|yGéa_QӴtڳæ@9>_owe.lMM㉺۹4 6 0l۶Ѳi l݌+a=8080oms?|w:wn$W 1ѥH|{/#uG]4'TdU/4ڜm͋Y>tL6!fGK~;H>&Dt#MF}祕| joƘA,o|?;/>= 2瞜 V*iߢPfH%[QV^ @ 4b1`xܓ3\_uA^iTZh _qM=NMWr'2QӑhyBÅضYȘM]GN@d. B#:W/FKR)$I.-c0s,!C;&t$ѻ;ԀDش+IEmzwMH3(|ϮÎo"T#q)[NY^I/r){W^t R… s{;T!Rzj\!y"d"i L> rc ?Io ^tAs{)̊QFM}Oȡ[/]VW\T֎v}(QVR:">JK"R B T͋Β,8r(D,gܘ|4EW>F EfRXz1*B1_|>̜6݄v='^Q! 0T2yqk ̕|߆B>,mfRb/U՗bڔIC#tܸEY4e C28 7\ɹsg 8U*=x'QXg3-@ӛ7-fa1cS 7-jmzA:PJ v/=$weيxsf{ nDIx%%Z(c@,z᭑{lŪ kID2֒ԒXrVa8E?3Y vST4n9xYl"I 4J4([HTʒA4͔~fO4{|U{|2L=^ le$'=ؙ*[F NO@=IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_editnew.png0000644000175000001440000000346012451473236022666 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 1y)d}IDATXGWilTU޼YLt(*DQԠ҅Z D*Lj .7F"F#MiKYA@)@  Pf>sox>[[in{sw-7i(>\j(?l4BO. FcM8 (@4MZrgg;ݐ$ ^Oe׉D>S]}YYYHJLit58 4,h -+WUGcW)(>q)!9 Q= A%*SmOcSiB* s}1-Tb[[+Z]C+$%&X 7!2Y3a0DP^^G{$d @_f.'@Joa3bҗnc9>-E4VAg +0q?˰`Ghiwnxp)/G?]+HO(akF|-],hhsss9)χ--0-`}bsG5pz}Y?)Nس UHW*q$,fr>} dD ;Aɿى*q]B$\'r.͇t]&-*x/n7N7xosP) @?H M>żp>;@ #PՂ۬q #. AGIȟ.\!$<5c%''8\q5ыmS>U>sJ ClL/]#X5744tׇd44kE/>1V2Q\"Q5UXK.&`ay„ Ms +&'WW(RxcolY&@ mDձ]8H=A0SV/$g,>ɍWGO%WAGpp!g':*Ǖ%QR!D9c<7#{6̷b|iN(nnƖC~ T~DX!L8BLb~wLHQ//J?%!.[rvfIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_filespliter.png0000644000175000001440000000254312110457565023551 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME,,g^IDATXŗKlU=:ӖP5ãmT6&Q4Yh  D]U a3 F" Æ )}B3~Lt:Nܻs `4c#o_K*MHhR$~j`ޗi@7sEA J188H:h4SvHXB a08;b1|G)5Zk-˂c9%P6aJH&7xR/[}I&cXٜyyWz~QR}=[X{W,jVoN~ W .^ׇ-+w0wٱޞ qg46@6go88y"Hv:^%Bߋ lb[[0F2y 5Jq,GPhFFFBnVLO7&4X V¶uJYw" -@kΝ;m]E1fln!H$vm#W^EursdM/fvu` aq7,Yӊl{Β 08Ww7o`uP3ckB3N<~?z׼NSqg bҪB)O6JZ, .zyA %8'Nf҆cs]xPz\xn" d&a-VԬr8C|BmVD@Q-(T-֠Tfw\)֨.lgdAZ303fBHYԕR3I8}&FbO4e^}=r&סBJ*:'q}łf|ߧJ= D"75Q}(d4v5faNlXLXZ:8FfkgU(G&qG;wѪJ<-q"r<RF8B )8wGhhh܃D>0хjXL*<˫z( D"RehN RJArA΅TD*?+Ԕ&o8(ǧU@ A?k< ,IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_openbar.png0000644000175000001440000000130212451473236022646 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<dIDATx엿kAǿ3{{lK$v   6NզIBIX ,,{w;9Y0~;{̱,P(y8Xjq0j[eD_uޫq^L:-WUV zI4 s b# KovҵS=xlm &i6m6_YO?0;ssS:;w] '>_:acg/Vdb4@/Is?Kvt]`}ƈ6UQZ?:g  +(1 /T#>vmr-!@/?w{rP`/+o ~ H̤@ceD0AA?~7ɽ(vѨ$PasG[ͮpƓ7yqq<9gO\9\@h N%wi{TQa٠,V3fFse&L1 0CO.% 6<mHJLll`VqrHGF* ,Vv-ׁQ3IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_comparecontents.png0000644000175000001440000000210412110457565024424 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME34KTIDATXíkU?;٬iRmb-j`ֶ>Ҧ5DD}C҂/}Ʀ" *Fm(&ii&&&3vw̰;άfs y-`Y/\3GPhѨnS h(4[ ,x훑OaOf|Z<~ZPtFѠuJ}TJneɽFN-VQ G+-K*QZS.ܢs{nOLT BтQb9r $gLϞ}Հ0am;X Ş̰V U (H<n.2@WGJAnM h%e(`:Tviu[ZX{><;mkm7 /bC\mGF9;od%mh x,ӱ&.UojF'go k@KHd'8=:))$ Qt5S(:R |v-"" s+=g!ݔ`ks2v]+F@v5Jоn6?9kZˏW\TP(ܰ"DK9+^R'2Za;̘(ZK&?"+MyԊwܷ7_Y5"31|s/dzXqW8aNȕ78hÊ75b쯙Rߐ |8ےO/ת uu @9߸=v܆oTF(aiyRE`[oT+ j58ВoIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_multirename.png0000644000175000001440000000325412110457565023551 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<NIDATxڴW{PTUݻwwYDS)W"S VȠQSR4tiPrDCG+ h(ij1*YhCT @;gw}Lo}@:ZTT AX*͐`_&$9))&.>+&lZzۋ_697?T8o=!_+)_ok3 *pՁqG W,_+-Wg2&O (;Cvl].P 8OsZ46BYvb~Nt;D$o8!auL8o1p)2Da8 ~6FYCg% "y,ySG`op.C tgAg;w!<1c.;VENNs; /8z?Y^#z#d},ܮ'l6ϞF loEUe V_ w, ->#o(pG@H=m[݅>fFl!uh$~𨄸}ugmH;R@h0XgCbp 'IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copynamestoclip.png0000644000175000001440000001021412451473236024433 0ustar alexxusersPNG  IHDR szz pHYs  tIME  +X֋+IDATX  KZZ[Q KRRRL xEK9x# Lj`P KQ\lR]oK (ڲ=&N{,,[ipbd۲kMh` ;65noRk_]]ƀ<,4A,SuNl^ʌ=)8=(+(L r] A);Hjh\ͅ?':7%vVoB[]GoCjlZfYɖk  3U ƪP7jP7jŖts 2QvzI$ǫ"ir7 عܸvwO@C\zPAP3VM( :XqqS%KI@ ›uBM=$e /;WPdYH:4L?3 6k- )/.Ȧ[qE!:v_[eGp_*ED>2  -FusF)-iJ1 ɴu  -z lh@m;  9&IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_debugshowcommandparameters.png0000644000175000001440000000374712451473236026651 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ,TgtIDATXGW lS|m_ıY!U@x]AՄ[ŠimWTֵǦ S,4 yBBlDZ_wę9%#?9?M%ɬd2ē̖2&KWD^!?l&].\|SÙhahcds ~#q 8yadGEI(JZx#\9U vv_GO+=K`tduޒGzi&7"o0p apD!(2R:((;zc8}PEQ{(\"YtRg~ ?z >J q:5 HЋJxAZٹp3 3Y,%bNq`K' NA _"Ƃ LD&>7bMO9nI:n`, &*^{4ih%`d)|z8Ջ: !dXϙjH}8\rNmͤdyn^Q}tvK9s9H'qd2Gs4;Uf?tt5>Dn2&!5l>x+ sqcmђjF?d4ADz&U/d4Zűkdb@!.1c*^D`2U &nCEq sY_yNTi:M\d [WW2gۢ;w_K eŌSQOLEYaNRʝ{7+CWzp|ɲכJECTt:U{*™ꁎ/RH2,͜7Kԧ.yZV/"/Z0[ĮiBbL/1+&+'8d*:q HshS po2 c*JY1Y9TSfSщ5bJ [%¦ibet4ۥ7|vMw籝/ 9eZ6tz7~;aQb=W=& t,KxWx3&2/5Ǎ1ƒ{U/[eLVٸ rN9*ᒭsǾ$F/}_qd|= IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_cuttoclipboard.png0000644000175000001440000000372512451473236024251 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME  25bIDATXGWilTUޛfiKvZ EE R%-%р(F_&Ml $F KDR-mbtxyo Àdn={YsTU]c۶hRe~a5.^%{ͪUhSKD444!}Cdжzv,{j_"\5Mss P=iN" YФe|ؖ{E @nլL1 Ia⊒btuv̚= iG^ }z2`od ~46m Evc'B(TUQ3PPX޿m8 ܵ/q6LP9 34Pbvc,-QE`ٶ):]* H=YjB`޲ 3b03Ϣa`;RP]+uVin| DǒiNޠyK ֞ fA^~Q@fzĖF"^0upz2%) OUbv踾@feaАlII$ƞY}_K-[. 뿑y{p'lZuvm| w\!{)pPj:qS7AqxJ/6drlnn} WTJPBZL̳l'5V߆Mw;_+O"_3E>+qI)pS JySꙘgb `Ӱvn$L Q1h([qn~+q^-€eR!~v!(Q ,wb+x?Lim~dll/NDz#}pǡj./RbYaQ/%,azΤ砻, p"BX^ytr]\{ue4gNڽ%| \d]tƇFotbP)KÅbSh)!oj]$͛2K/"6/[i+IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightopendrives.png0000644000175000001440000001021412467744673024453 0ustar alexxusersPNG  IHDR szz pHYs  tIME # K+IDATX  K4 < KkH:-.z&"~<           *)'&>MV)**@MW))'XbDbk!\6 <tN=- 1z&  ~<      *)'&>MVL&.5¹584D,Vк:# l <sM=- 0z& ~<  *Ǿ:;4DAJO(888DMP 898 JNO~K@D^; Sv Sv5w85 ō;5 Zg .@ Sv "$&DCC* --0  }x"ϒ"'Y  K   Hq+0 ak#vIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_viewhistorynext.png0000644000175000001440000000233312451473236024520 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<}IDATxW]hU;;&lڀTTl-Bj y}o"*}iER/6`jHMqmlܙɒlDFp2;n9 Rb# H+45+lЅT:R=FUG!!apP/Xw9#$ؾ^tguըDW7k&b^jQӀLN" L*Ȭ혶G0Lf& BM@?Ek"!c@t [G`d)N?DIjL 8X[SW/@@AP(qA lviyOBӰw?k7z҉`3^L@27NcG$F<%vn=Dq9z}@prwƜǵ_/l2>h! 6};8=K =aV*!)\ߚ[[;TIEP %%ǡY˞"Ő_UIE NEa u?+봕 'ñO/B#YIkX un(1&dp+6G! NG`__n< \32~1; 5R Ǽ)pN :}i>\ڳxB HQw~7_x /4\ P ]t M:#4qvQHOX8S$ЀJ>ubvijᨭoΗU{ݻ7HhhiGt#4mvha/\sjF2ܙP@jt(3'}B ed`rf SSzhM!Ut7آQvڱbNne+^yhpNHo7j~;|=N݈;#2+*kgMg6b_i-Yl^-UzX͊IEŤ{WDS{n%ErY-%vF6cIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_srcopendrives.png0000644000175000001440000000333312467744673024131 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<}IDATxڴW[lU]g@޶!DMT%&~ Â"C#F!HbF&ÆZ,{>grKK&t}g̜}{uք}ia@a;SlX7n"K> %3n71L0[cd B 1} ~N@!zKS0sqOb4mC2ad]ә-Il|%lnE0#t6@ɤ*8P:n۲P*#c;BHi_ە)ܽŮk4dGz븵[R%It-=Ǻ!dHJaWF=c3)!=&"`ӳӊQ]!! 5 >?1G |!f>Y`J$:94DiرF"@(= &=zsX&,/ҊDi?ZǞQ"o #"fA't|9 3Rhu˯g꙯]dpHg^S FO@&ZEf{w(&K~WJEA݈BbrT뚩 +(>Pk 0%jSxR0ؓ)cKy4#l _U*r ٩޶F*-
    w|%Bv /]%+!+nGHlm9<#EE3f iIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_view.png0000644000175000001440000000314412451473236022200 0ustar alexxusersPNG  IHDR szzsBIT|dIDATXmh[^]ٖ7َ_j`[RҒMIf4Qؗ 01ePɖt]^x mΛ_f/8NHeɺ{!)v¾큇sAiJß1<4}/ܲf|Vnfx3~V:B21H}{9j'o[KU@)PXBޡu|Z'uouu󝷿Dvr)N S,sQL q;?ā0_}%r|AƁݍwŴž}/'!m{Ť{vos{ÁhNMrQS?4ĶۙGJ%Ⱦ (2/7f "M CZDZ`CT[,3Tϕ\u7e az~ SϰLk E I Kw-r{0t$@y&MsbH`ˢġ9q]L PYI34m'#  N#K* ̭UWW*}}]= /?wPeraFZ1 ~sss՗xloD68+$2** ز`G7CLMMH$n\RѦMܸq(羽w~!#3<꣺B0,F兩n"m5%IϹzcc /Auv2@"6>'m \l{&thNgΜYb!Rz1MVVҌ{*vCs:1I,O?PDQ4Mc|b1,ŋE=j_p(@4Eav6(3wI.'~p8B=LϹ_PQQA0n0??dv>ʵkWL>{Ote5^=A_rUv|8P`]s.8R>EQmx<z\ܿ%]IR,//L&I$$ 8TGbs۳,FZ67 vzzGNS k`)FU¥K;vVw X}Psj W ~::eK;= oIeYoL׳InyCP84K(8~A̐T<p̣!4=F Е6xZ5< @c*=4m(zKX1F34/Uԕ8iH1zFж8jM@J@Qmk*wEGϒbyqy?8/4k.'x=>o51h|NY"!''6,^V;m&ѐy[3O?KH'W,2o5Ϫ$ &!;bCI@VFv2 ΄+se@zNV 3jr1rY˽71SYH˕yKhiqh-!K8PPC{ 1WZtP[B-\V{l6[oZ5,Z %.$]%47%EiyCAضmB{1CGumBP<σR 0d066QrRy#5#GB+ۡ*4MimAE(ۍR! !/b?8|pP 2 .'JvM+죫ܿ>e| Μ9˲ּKeuj5z g;/&J&oOڥ84P5]R]mk~s1<<ݍYĥJ]u_ZoEY8^9^vҪޣH%HWBT6C~EQ011+l``8%X'O~cOL&-JPUb|tx###f5M[0zf!":;;d`0b/ZD", ؊~3R~__O?-}GGSpT*I 2N:d2~ٳ'k׮=o>0P(`6<>S\p}]ןo[\oO*to7ND"ѳqF^EB@A}}=z{{qڵulVFXcǎڴiS]t:!mۆٹhq URttt@$W^|A---n{rxUe(ku]:ugϞ޷~J6E( B,Bjw/bsNStAg]]dI3~.{vD% DMI )0%Rc&ATFc5MD` RUnwv-'_vs?3B)p> ,NTԬ#X*k,KEXffEՐ[J_A6bTuXQ=ؽR@_͟@'_ t>k p<VT`0`~Q e3rގ(i991 ~Qhdr0X}i0&%gSZʀJg&r;@тŝէ-Âg 6{rPeĮ4GVAtZLmF$`""¶h[(:!9_hR@V|ǵTka90=1oڏD8 yE#DlZ:Z}և՟Ԥ]v*kl_> R"cXBe[|}]R݇V64Gت' laDe [9+7{@s8RF;Г1UK0wzKn5e8Lw{z/N\[7bEahYaBm-l<:ڃsm .+C&cu? Kw ~EG}ahY7igߛ0bfZ[Z0 鿭#,֓2"1 ]pg : &g(}EK`OxYgsism6AP?` XSc&157>#@ol^]{Pа,t Il8 ?7q<{ Qp+RcL(M̠#p0t:!ۢ%Z1gx\N&y%_04wr 9q򇎡2<9Mn5icҩ5h#0o,C}Iv (T21xUnIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftflatview.png0000644000175000001440000001021412467744673023733 0ustar alexxusersPNG  IHDR szz pHYs  tIME m3+IDATX  g  :%   %-G)P%mmm ;DJU KVTTT P7B Qmmm# KROOO[YYU6< ^;Au  ;@W}Vjmmm ! \ZZCAAQ[XXU !2DAAQV::U  "9 "mmm#&$$\ZZL %V?Fmmm 544544 bmmm6h Mmmm"    %+C&O==S'.mmm#$Ufmmm  3YZ$USS3 *5*mmm#$ROOVTT ><<?<<mmm#&$$\ZZX@D)P-z寫"ӘPcFX17@ Sg2f#.oD$l*R6ϛ@L:iˀn`D8\$9Q`K@Vsr_^j[iR0'ib@=Mi3@tfN &J(I_S#;m^ /A# x c@'p/riA\%"i$M(xQ/:c*ܷf L 'jKX\fN }-( }_o?8ɧ@};ic@τݤi +Wx@JB w$!nbfK$vN+QAo[+_avp-k ,Qz~YwZsxf~/IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_about.png0000644000175000001440000000410012110457565022330 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڜWmpT~&lB1| VacGRpTP~(R3gv:SeZ ũN @DA&!&ٻٽ=ݸ,rgN=9=9 S+ES(ϛֲ=! d{'k?kLwU]yRh aEs.UaX0MiaVP#jZt;/NyC3. x=-k! 1k" Fr8yq?׍Ъ 5 *3q8.Ob"Î{Jڛpok-, =CqTF"'P+v|-@CIo_@|:U ɂ[hXU膉 {:Q_ž>O#o>R Bןzl}=o׏}ǯV."CO>Ys) t(6EW$$tKu1Kw;;aYXGp(*V dOgt ZDc,9@Ƨ1LY-ZNuw'f˭jO? ,oPp>ca yӎطg5~H3^{쀊Lx0 ʿjdR>RΧ;wchLÿΏRVw|7^ qĦhk }erN9잎z6~ 5|>Ewm^TY?{&#GOcy JHG6dO۶=6Ł$n{x3/Z/yuqk'8ÑHK6E]mea qYj*}2N]"zQH%Ja 0E%Z~-Gkc>1˿~ cn֭#C: o02h<%~,I "%H^,$Tz1L!P9i}l4Bbt h NYIbZ4%n߄yI1̥6H|6pj9ͦAIO|Qe.^u1}n-83ng|>F/$5 6w!I*dΞTzI8oYgH$4L?C6ٶ#8ٚK\|F+ڙR}~G.ŨBl|rο{%f kT> kT> 8 K              ==k ܴ봅;)bn4w=)_*6̼}W~[ -+3-rJ= .?_)vMf&Sl_rg>#0 .lU6LLtb&uk8--NCZ`ĚX~[{SnC:Ѹ=1g֝s "8 !-Xs״es쮉+PQk*]ʲ5'0idOGo#K{?t;JM?P^k/:c3U㿶ӝh5<?CقoNV\:<^1bkX,U-=k`^<&_=meunc ]_s_j:~n %+ }GJw4ڵ_VW/*:]N@U#QQcςg1J@E?{3 `(|~`%5ߐ N5!sHnax-]g\Xm[ۛgݶX玍5liY7hލ5;!1ؙ} $=m8 Q@*5PՁ ?\W~x0[f_p*tg TbAJ^7``PP{;#$䋑P+K_Ə$q\?GB;9wNah~ @ $FZaRKIh$Q:Eya&.] c)MalTfπ+PPoԆ1πg$sH>O m UIQ#:c  022i 4AzGj(VW_?T0R qP554Kgde2&l˂CD3CnPh'Ӵfg<9ioご|~IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_viewhistoryprev.png0000644000175000001440000000231112451473236024512 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<kIDATxW[h\E朙e&n%hj%!JIl-BDPP(}hQbM+*V*SQM45M23캉uC9s9äXb`˺`,[2?$3Lvo$, x|K7^bG_xăDXc~g_aiKs(a7$14&±$‰4~'hI& Ih M(XK]hIt}l˂k[p\jzv]sm^0<"lHnDI@WB ~"Eإ-F0HFOrr/O025G D@̇ G#S8J#w?ּ>MQ$ u1صngUCڽ(q|z ;g|XR,/* A"Uu V a҄x='I/NPy%u.OIOe2*mTU`&Q $+ @j $ppRB0 j`\݌\*|Ddt$HzCBүYܘU]!ޘFףuti% a96d "05sO] r.$j.(Fo8[4%-i"ffqqlv5m~ZOP[X$j& Y1;z ;5+F]?}l l&kgyjF7>V(CjtXp75-Ơ}NV֦U.*l?` m1IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_loadselectionfromfile.png0000644000175000001440000000444212110457565025600 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 5& |IDATXŗ{pT?ܻw&d !1P"bkqSS>qD,:֪T:v:-G뀔` "E $AMݻ{# ;̜ٽy<6>xP|+ L\Tqw*P]}C(l42rP5/P셽=]6i[daBTH4.[OV_=a8RX'N[yz 2ݢ M3dx$wœ7-:ޢ`OySP6V*,]ZTsɎxB8བtsMڌ+Ǟ5,;PSR{OAQv}(H~=ɟJ*}ZLh` x)X>}fOZqEV-u'3m]eetk.\ "AQz6|?gCh/&v %, 0%?b%34Nl[7Nƹ;|CnZ.cvl{#F| ?t&>r+5hS跃%{j_O5]`^"1l=>/4 m&:`ŧ%Q2QX$Hoyپ+:"I[%ׁ`< ~Uyd 7M ᔮwW3?Xھ`%)-_dWvo@f<ܖxǟFV YD*D""쀭hnnzx0>t/J'12!32]ɏq`1G'+.h>{2-7\VQU*gIMZ[#=tυ]xgC@RE ̥Ol|0g$Ȇ[)l5?)੘Sw9 2H5J32;p>XZ"G@ DA~ jvT1, K!i'!ǶQ-,+) S~F-A@8\(DL`E1a$pFA(޶\߇R"$` l$X0S: v\NGu#f&29+a>||UZ!xvjÖP^ps:NUuE%0:Ƒᯥs"[CISُOm3.-%pdoQuBqycǺg5Mڔ+k}UÙ.ri*[tq/βIі|gxVΨdҡw h#)4 `:g255-juz0bCG{?*ZUʆkʺ%6!Lyq uD]TR5e}D0=vПo+*IFulQ` lW;Oi(g+S,B9S}=IsMI ɨƴ_MЁor9Y!B*(f.MuU`K`Fg3vpr57c&=y~ϛ] Yl˳ض1ffܽ8SgŀplU5y2͍eER}a3?Jpj3#Bo!B !lF~] )+ZqsdG@gJb' zIEҹ8^&BF*~7/dn:H{kBہ}?YX%|c}S O =252kdMmGM8] bTu!8#~ւm1j5w.>7bZ@3 4'XPZ_X;[2ckϣz}Bwp1퀤nETuSMƨ# hqd?Z5HIfe 5ضF`޷7Q;< 0y@LH.l i\"pw;^@HWW]vJRqVsر'c/q%/V/hM۲Fk4 $0mb3se@81Tc]WRm1^TdخbIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_symlink.png0000644000175000001440000000201312110457565022705 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 4!IDATXŗMk\Usν3I*riicM,"n܈ 7\bJ446i-}EML}̝vn̝|s?#9Dnۈ⢈AEp׀ D]s񏙭rVvvvƍ(9Z>Fu?wO=ɷ뼹3XZzhՁĴ*1f*{{R*xܹQLhҢ`0077ﷶRA %LLP*>MZ4F3@Gwx~EE p({! _Z&ӵ4wSXE;ls>xy1TRx]eNx0 ]npcZ* hW_DApm[)~r`&L$N jx^fTa}\?N3&krC"Zt޷/=IZAh[XQ k{Kwa} jz)>fX-߼ۛT~fTzlb:\1ua#Nbӑsm`XkiӦ;Χw.C#BmZ#hz"0;f%^!B+;~c T_cV?87@qC  9`^CpeIf%IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_operationsviewer.png0000644000175000001440000000273712110457565024641 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIMEk+lIDATXýMeg㌊!H7AFc fBLʈ lBDuqDqcl`Cl0c{,}{^wg6St_]uUD"^SC!i5W\فE~W֩9]z7Oo6Ëϝވx@ZBFh_xv\:_^32a7#̜pwg L #"p nd~ίwIW^\v~-?ݥYADi{3Oލv ђU4hRK#hҜ6i!M.gGx< d]ɩsjrKxWEu75WTQSL^ UL{׎E97lgK DΉG@JceTˋrA"!$⹜<%"AAC{?b!P.8!8kz Qb* IN$f02r cl/;u{5sz`Tfr,qC;Dq^IvLRȃOœgG`a`=XEmO<̌:&?<-TqzZۂXq p$'s/#5q _1]&p+?܂$R2 JRú@Zq LD #K_ =,Rl/ˋ' M9ܶ(́T87^~0`!$6 BJuו&O85 KWHlhjE_BQ/M9P!IQvƵnWЀ8vO807|{|t$U͐\{=$LT0^irӏ?ammb(` K wƥ7 ђ[8ɻ zQhԿZ}_{JS;;80@PJ$8៼iWZqfmyea#  mp+䔹yYǁK;.at9U%5Zo&9 NQL6*i'1: dH<\V$r=} ;t G `>kLx- t/9̼qtve@fS\ ^z r]b^ɂw~cw l< {2(,wgβWva4,SgaNWVԁ2 \- 7G6i; vgC|; Qφu|rٰɉǞ}|K?8sgM?Mn%IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_savefavoritetabs.png0000644000175000001440000001021412653160641024567 0ustar alexxusersPNG  IHDR szz pHYs  tIME /4+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    1a kE7%i9)r*MhwD 3nFB?=h#  !ߛ&G1ڡ!e  UN9  8 ӣ{uɇ-w *iE *Px7yӉ79;ߚ8*+ ( E1Ed^> J:d !3Zݿ+˺ `<݅eF          eD޵ & &ݵeDVV17ym'K 7ym9chl958%%68a    A   A      N*n]֒5'# Nf}JoLmgڿ)h&AS>V/ */ '3 IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_reloadfavoritetabs.png0000644000175000001440000001023612653160641025103 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME!·Y+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    ?f!#"*Ǥa&=$Õw!+!lWycKNZ#KDɇ-w *iE *Px7yӉ󋸂 .3%W Eߚ8*+ ( E1Ed^̷w3X5&u3 J:d !3Zݿ+˺ -J <8G,#t`<݅eFVCB tG~eD޵ & &ݵeD JVt4Q  }n_u7ym 7ym"gͺx4`pwhy58%%68޾z FYA/1-tXy4yA   AͶu4'#W͸vv N`6`6 ND|KML:h&j))h&j>C3%3J0 $ IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightflatview.png0000644000175000001440000001021412467744673024116 0ustar alexxusersPNG  IHDR szz pHYs  tIME "3+e+IDATX  ܱi (7lf #遣>^)$Q@!XF RvLCou(A@~k`0[~*wBdD_cq+%jQ$nBH`?*PPd>J,݊`(){\qTGݺ(  ^d?6B0X.tYxhbƫb,HBCyي4}w&,\u8mq BI5$ME&H8v U%i0.Iy"g %`w.-D"AEA_o/N ~;¥ G4"nO.#DB 'T,_#5q;n4,IlWsщ$Vpk0Wt>6@) aJ ÓI:\Nś*"dk=y>,⩧DI8v&2!ǰlWsyC¢wᛖ?N7i&z85"Gw_mhRwa ̋Y`j+ä;.*1 C_}$dOǠw, a)J*~e&T>=تʹ)+K"ܣjqۏ#Ay⌕*v,os19' T$QVFޝߥZ!\B.ӒM)7BlĚc=  oz a૯/쀘fDvTav& Eق}mCŋZdGbt(p +Y?3A IȎͼmy8\5zHz΁^qehjjowep"IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_editcomment.png0000644000175000001440000000224112110457565023532 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<CIDATxWmlSU~67ltl&Lf|?DD*QBh4~#, 10cNLFbM)J˺i׮VҲ,Ϛ{<=$l2qSO~eUw$BPv% +ō//}nxƱ؂4ج]VRF5wt~-@^hdC+n#cM? V?$ Eċ::i`(?s":}5}Zr?fBD#l[`YU@\c<>8O=_yv Al~'H7WxDB349;`,`.8NpCZWmy۷=p3'%x*[D pЀVu}[,q<:eMl6NpCZ L'M%.3аwd}:-S3ႛ.H-XHr.9| (RЀ4 q7SΌ@94 ֌82?㞘sQ"$Y6W$!KދQ|>C92kZ@, |R)'-h&vy}Og߰?8 hA3Ԙ74Sn+pcε4SoCj]ñwVܸ Ӝ7(}6J`{#ADP굯MKM&lbiqKoo;Qpk7Wc4Q\Q0pSUbwo{S4fu*=};D'zis]#w1@ڊffS+)lX ͧؐ4c@d'ޛ x(cfD2}KTF>葉/n <્qH[i8@^}W;bDg2rH˶5>3m}b3ͭ_øι[*78t!*cbŎsAwy.ol ]m/8}>{?@1ґQdENf^hu&ɹu,͵rḝ,IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_pastefromclipboard.png0000644000175000001440000000333212451473236025105 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME gIDATXGWklU.%}B " *JEQH!D&j$!Gh" $(hXb6 .-}iyv_;3۝޹|qHPYY%$$Ii,[S3p:pw% XȨ)6455-Gz0%ڣX7k BQ.S3u?Ey:Ȋ"H7o$T!&G=7ZL,1arkaÊa 48~68alX%+@+Oڹy1K d: *'"-H"#;~!K/Rt݋#0 " L@DĉejTD bh[?E"=fR YY!t:I0YI2rec-aғy)o{:U3 bU&=d+#T?,QH__xMIwÀH-3Yҵph{^t\!}L8P]_9a6]d-6ZűqrN+b7((3P7w_4 na]KS(nÝ,kj:P)䙁\Ea$+g9ZQ<0@$_U*GLPÇ,12^ft!H?cUE (0 JBQi5,1^goc׏ xrj6'UlA8PgӳWFI]\ܭ-@Y2 ;s MƤ^32jSr}wF{ĊB$=&!U R1;{%5+&aRJq'M+O 輚BM{.(T [OI<^MHl]9:i?drd,du;ނKb_tvxvj &oJd$rǢ]؅NF_"T*{7T ܩ*C'`;NX]P9dF뙓)d|`'upF>eɩMA02f]A_@9hP 'NP2@8!fT1^ު'~znobdwPusFD"2 HBn¾$u]sO9 mSI;Mޟǧ7%K'ܯu/)PeTQRD 3Z> +󳶀oI|Q툹r,-CAZ2 M%WQ T L֟6h=qsE<>VE+}X2kpy%p:pO3{nfN0N+IB?ZrL8ClJ6mﰫdC)]I @ GLwh F͐þo !=/L(|X {!)=f=-mYVJp"ciӴo獭g{NmˈQ"|3+JKVIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_savetabs.png0000644000175000001440000001023612451473236023036 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 9 M+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3     +O;9)r*MhwD UN8  8  {G379;Ȍ[T> VV19chl9         }J#  Vx{hIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightsortbyext.png0000644000175000001440000001021412467744673024340 0ustar alexxusersPNG  IHDR szz pHYs  tIME -f*+IDATX  fFOxTC: QU({UfgC:!QkHHkH:!QCC;"Q`@LL`@;"QCG=%SS6viiS6v=%QEK<$E+W,WթyNfg کf`F/^` I r2BvIggggggő; fne$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_flatview.png0000644000175000001440000000335012451473236023046 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME uIDATXGW{LSWRJyd_Nf6dC 4sdY8qA|$?8b03 esA`JB}Җ>K>9wsǯpV& s6Y z압U;iOMGJ]zzfØ-C9sc5C ֆjaʼq?te}uӋLN{* 089dY>nNN rSj)a;_3mKJW3; Ӳ(u<INqXx]囁dg)J%qz}ԡEqxOMl4Je"d APzr1l~zz8FKt5gr,N|'ڧr|4iv_#O+kٍ7µ Yyq&!046㕖=MDO !6Q엎J.ڥ6<}`N+*c?4wm28G etoLIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copypathnosepoffilestoclip.png0000644000175000001440000001021412451473236026701 0ustar alexxusersPNG  IHDR szz pHYs  tIME 4;+IDATX  KZZ[Q KRRRL xEK9x# Lj`P KQ\lR]oK (ڲ=&N{,,[ipbd۲kMh` ;65noRk_]]ƀ<,4A,SuNl^ʌ=)8=(+(L r] A);Hjh\ͅ?':7%vVoB[]GoCjlZfYɖk  3UƪP7jP7jǫҩYSbykZMlٖ`K}}C ֵocS+4 j[ %(/  ")MZ7ʣ\WNd^=Lr$ifڣ qy ?gTA    ɴu  lh@u;  :ܸgl_IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_restoreselection.png0000644000175000001440000000443412110457565024621 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME IDATXWkpUyWroronrDQ!UkZu EtD:VH;j* :#%Q G5K qs>{f9k뛵^Xx/HejܵS:5kL:uw2/xʅVx҇ۜnߺ% |ǯop禹k]ڴ7"/|6.}:( ?մ ~]w y+ ]6Nr陶~ }6We $brT^WwzB"pj܂wC@ד߁Ot7qA7ikQ/Vʫ!玂yt.q[CZ,HYPNHK;7sȺuB3˼="Pkeϥ~pj0zH+Pڔy9hQ8/p3NOe)y* zDv":>Y9 t"ODӑ4 4`*+Ԅ@]7N灊i2àIJ,#iko@QtDSڏ_Q>hRi`e쐻a)ݲ)o!}ŋ 2DBZ_h^ɲV;".dӶ]0g-!G:h}xWnC ZK*Jڀ9G;GR,. @*V\ߔ ${v'_X|kez3j4udžwG@,~9*rkB nBiM`x 35tO9BA(qM 'S♧_ i :^_]j"78`%Dru( *dD6W8̬l( nh`ƭ\7W*x(lQc-Ѹާ'Uz+^ \L4/|hݰ=DF2GeSCG'JUenzXx.tÄaZvAc7{eL8U>^R0T;"9A-ѴO,dTQU{ +Ru!aKf-\"<s~C vwܽ_Nljv;95c.[r f |{6Iig4/'ԧ{e5ޘXV@=/rcLcܩ,e`2^8~mkx̌&3%Th5'L5Ln@K>B@ ñE4TBy"صyW=Z$e؉ʋ6޹`?SuoE8o3pi7"wɶuƃl긷d(Ů/r,>ߤJ\@;=ye3kqxm슲;*i)9='SKE[j{IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_sortbysize.png0000644000175000001440000000200112467744673023447 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ՅIDATXoTU߹3ZTPj,aHK K/B_ $  dY*h f%)-T(fIՙޙ5{09P//yNb%ToRg]I $=vt.87ddD턥;L&\rSg뚿uN$7@wYsz!">Zghm8%GݷlJl#B> g8>ۼ_ځxZјj [:p[$ KfZ-#J{ֺ&J {֚)h_!T%! YaOSExpԕ1_q6#AHC6<\O?1Yl zb ޛX1@%k5CM? 3Nk 4(`4J -ŏaߊEyX%}QX[CԞ/M`4+rb9AT>"sb[xN|ϴ$0jD(P(e|'sbq\Z1 AJkc*^g{8$ )H S)>wIJkbDZ koҲlM8FCiEǛR*eXz|7nsMo@Ұ%gg&l2UCVe8dNV qhz!w؂ř"iKAomK`,7G _ᣖ TZ\_` [A5<$~^p5p}GqHς$LJYnXk5J&i]@225VF_Dchx4/3oZ+ IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_openvirtualfilesystemlist.png0000644000175000001440000000322412110457565026575 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<6IDATxڬW{PTUݻ oRDA#GtT4E665a3&^6L3Y) 9 R| 0Cey{]hae̷gϽ;{sAҧ}]N_E! 41/KֆN S:Q+D_Q!i)_Zf &#(UtԜP sc\Ig(J@Ԇuxr0hiiR5q˴{O}WܲR #y`q%Boݸw/qa`,zz z@0}(bF>0łr㑴G'S WӂF{=oˮőUxko66[zxm)ҏELG L?H̎39س&vñ]md9%UjcnsJēoU2=fm?Ʋ.1qQaY%XDz>_l70ᛑΕܓXrRz{7P}δO[)85۲uhՏ1".=dr)cuHhi_0]Y@𜋢t)oT6N=YI][v8k౏93Դ r&wbi¼RngB0o#N x[Mq2ؕ41mr7ׄ)NYMBCE펄Cgˍؼq5 NeD@ȳX5 /d7\nhH^ʪQ(Q4ݳ)N"Kn@Bri]rx@Qόn8 ͽx b")!p:I0&sV2@$li+bĨAcDɯHN$+Gnabi),GtPbt"yҿK4 _Wʊ6608P7vB<{ڨ8]|q q,pf&֬ۀc'БnUG 7gD3_Voe1hCsK;,ͭ!!υ%SD]ya2fSҾE88T&oۨI IԲ E~Kgse).YmE0h]6CYgq"7WcJ@gU}}t48z^>3gʎ.@ctwIOuEgIèWui`M`ħ1&xIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/go-previous.png0000644000175000001440000000226011416270327023020 0ustar alexxusersPNG  IHDR szzsBIT|dgIDATXmhU?̊"ôYݩeVكJ SM{^ ^AA7EM0EJEe|u=޻{y۽׭@?tLa FU_้-; NȄ<&V oG޿sK_*S̵%>C- R xRւ0a MP͌Iڊ9KoKlޤoܣu n2 "Ey@|֔@zRTST #bc}+W'網Y$(_|C9A)xAGjC S-m[o$^ZJoD9YY4auXŎF GvUmOO_vSk#Cr~𗀄{4|il5N|he7vnbaͪ?P&uСd$mBR S$Ч>ןv7-q I`H9ybµF{M] /άGp;^>GpMpt2Ab̶.1CŘYttLT6rõu5)cFIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_settaboptionpathlocked.png0000644000175000001440000000210712110457565025775 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME8#sIDATXOlTE?3onnwBST֪xJ x11jRI`<czу$ Bb`KPCK mvxm-dg~V%g>~pްrjޥttǛuW~L1{߾߿O66F2|gW_>٫ Ny^qkTtƞu1  b,j &&pי TRJb `l.8FmJƲ&jfc-! }g]*8_JSUڴhk ֘lj!1EWOӆ:>U.:,,y 8q^^<Ƶq|D I6%u$mţAk˺]K'εahLJgWh+䂢OtҲ/pEbGXhh@_oDwYeL:ˉLLZvwl6*BE8F2Զn%^aw *L<Z #Օheߡ^\G h˭YG/"Ly. M~6o.9HGH:C]ncD H `5q tt0 0nDZ{-˗ \5Zrdzg3p6>QWXK kw?%/Cȅŧrv~HNEp682g'3{/&P8OCN$%=VC|f_/?@M_wQzU@#JsZ$zA {nƣ;P^D qwk1Ubawb/͠fI`t .Lc0Gà^\:w$0 CP† s*y'NX$Ib'!LByS~&,^|'AJ㜎[`_;ts ppmuP Aր3JA#.B3E=Y~ X뜆`V@Q "@,uoBG/XC;_&+^3`=l,:9]v֠a>%R6ःD&z?RNCtCIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_loadfavoritetabs.png0000644000175000001440000001021412653160641024550 0ustar alexxusersPNG  IHDR szz pHYs  tIME%r+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    ͳ>}Մ ږ7)( Hr E#h]  F:b !3Zݿ(˺#4-hDhLܿ & &ۿhL@~w @~w}+9%%},9 3   3I^J^JIL:Z!z55Z!z>C! y{43^IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_quickfilter.png0000644000175000001440000000553012451473236023551 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp wVIDATxڜW pTk7fC‚<@A^ili;cvƩ6lˌڱNf΀ia:-2eZ0@i;IL(!%l !!n{n b69LoƝgK!K|(T07zC72pye}nT10y |>d0ii݄/H?1#) K`, lU2Spz>q_5<.}5!j!©(p8d"C%$SRΟ||)]GU19S;Oe{|DI-\Ǻgނ˩ŕ)"E(LJT=g"ǒPyI+k:X2Ʉ?N͕m%c7 chRH $td&&z"}!a noBR7!CU,;U _%fQ[č $j$/}Cl յ9C#&6Uϵس`wc뮺C(6|Ǟ|xKX<%sbb"$zSlB"wixRFy e89i, Gʚ gOQH=R9m$n,+˷Xg?".6~VU^]S F]Ɲ;q;.]SF\miHdGC3;K+ ®98G?j)߷k)nf= 5#m#|)f6"*m/5Va S!`QpQIEsm}P,ՏT c8ڰ79nr2p<?{R9u)\ E:eU?Wo[1<܏ Q=>3H\Tޏhw8|2Hi@sCk>}*ܯP~{>K!gⵗ$Cd4 偽G$%Y݁ 2g?'7t ҅+k[^?S 9Kvmxr<ځ'Ͼxu(dYpб}<32%^_E{Wp'VXd" 7zG"[Xk $kә2稚 Ҵ8O%6gcʌlg$ IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_resavefavoritetabs.png0000644000175000001440000001023612653202722025117 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME51F+IDATX  ___L]]] K]!Y" GNP  "]W $ ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    |^?'9%%i9)r*MhwD=y%)=f# !ߛ&G1ڡ!e  UN9 y''(?MW***)`ac&=$Õw! *n|n{ *€KDɇ-w *iE *Px7yӉ7E~'()HVZ}*)*HUZV\\7Fߚ8*+ ( E1Ed^ xwQ\]  J:d !3Zݿ+˺ H! `<݅eF eDЌ$8#K2 '0tz d#[67ym'K 7ym [6[6 58%%68ag_YA  A   GHJ    N`6`6 N       k!hQ!hQkl iU$TΕ4ij3%3$ʿIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_gotolastfile.png0000644000175000001440000000125212451473236023720 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<LIDATxW=HAv5Hecg!9XإQD!FaqvҤ, ?777wsW̾RJjB(WC^B)ݛo#Ykak3|X4[_x&ɆI КƷZ=g& >RrH_bXBPT*"󐚀X@A{e(l $ e%i3 *Fc(nHF{q 4>\Z:46|RFa#Ph Q. U.țTwW,YGëT$˿_"564АZn ]ET1b Q8.ߟtv_8qUhhq#9?ZT. FvK骘yf-Ig,f`+qVrK1fjB-4&8Zp 7!˘dqZ"3t;zop|}&%%AFr}z(/Yŵڝ:BsIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_fileassoc.png0000644000175000001440000000412312110457565023173 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڜWpW{y HH)'f؎@vtc:"0REgZB,X[k X524RHHB# 4{ow߹/PmH`dw{w9u> J)`z~nKeuW\3.j"2~}펧vd|߇?}}Y'Pj<GpWaSMhPT;ɂPY0Y&LˆDpazʬu]448Z eVw((q>爘@ $Z"}g |+uN>3񞞼mM.Tp  Bqt~c(|^i02cKwtl9 ϲDai9BșYꑗ"{Fi(>q\+"i{3u 3eY@@ԫ IH dω^uUp$ =^/A˳"r{B5?W~La v1N(P>6n>EdK /?5/`b sXc"BV/:o/"H20(nQ<IJt FǛw<'Ó@.iTݍYJ/ M@¹n[%_A22ƮxQ VCwjACXOzzzC{7|eϏ{&CO*8`SMqyؿozS|E7L娭Y+W`w^ŷax'$cҥ,VX;8|3!=-bhmGnjv#؟_@ 7p[t[~?8΄ƆgV G¶T*\)-WC]YfژHalswq+kCFcS.QR7ƘJFBEsIaͬxmNeIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_settaboptiondirsinnewtab.png0000644000175000001440000000301112110457565026343 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME;XIDATXylTE?޼R-[ ֳūH?P4Lh&P&jhP<- @rZjK[ڽ5񶥥5 $33B)lǹ8 WnLĿ Hs$7?7v/ȋ䞅34DshN|&G~a魟Baz~dub屪!6(ue!]WDzW@X |rlS/ssMۉ55sWa&yp#k7֒nZr5sV2v4TB$Ri:ۈDyƩHnHIc<*\ͦ˨?kN4PVrsbw ّP`zvJf\O#q P^pLzb8M1kL c_p??dbA5+(/P);ާR}(f=?a<,S' DB&ee5$ٷ ]p?tK,uGIԠ7o36tMǃO1)>iB](JBã0C7h^M=* ndŋp'?`y{k+] b !me`8h8(O\VQԵqy_ugQ1;7M珬N7 EKK0tںMض8{;ؖ s`T&-AQiJ aįY}4ikm⭯0|**gZa g`"cij=R=,Y/\=C<3CV8 nm g2)/4My+jU8{<'ES,̒(:.Є| R_NPvXqΪE%[(/v=ř:db8[:x-\{J@Hߍzh3|o:ڠWpIZv6i:Ґ1;Ҽϵ,.FtJF: hG@A#yR <@! |󲾪c8 4*.r!*TY6@?FC?a@( 7ɓ-xR#FNp+ʉ{8Mo?6IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_edit.png0000644000175000001440000000276312451473236022161 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX]lWwlk;)%- mBR/A# j*ZT5)Uķ !J%ر "Niiݙ{xgctGGg?{*w' |ڿX@ap,uT555DdEvsL?FÛԗfr ?Õ˯q lΣ3j˲=CggK2:.ul٭lzN,}C>K&j^vo>y>| =ϳ1ߎǗ#3<>L\ xJKes~߾}75"Rx܊Z2[ eף ln8T,F bbgӻGUږ5<i Vb17"ظO9o%U0&֬o|51c̜b6`k0O_CKo 9*k׳1Rg0 @SSST iHzݺMMMs29qGqO $,k尜v};1LMM%Z`i >55wNj.J)6ǒ3K@5r0 C{ӦM3 bkkncţ϶mc9̎\4C@pf|g[9SH(XvnIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_configdirhotlist.png0000644000175000001440000001021412405254001024557 0ustar alexxusersPNG  IHDR szz pHYs  tIME-1y~+IDATX  ͔AK3lQ K/hїaL ׆^Α93lP3kї_K %sΑ:3lP4mјdK / ً I0! "5i  ,2DGMV"-uS2W9+~= %(  1+D0#0#H?=-> +#$2$=,B0 #Wݨ 2I<u.+4 < B5&h(;#aC  4n$ \C,i+F0HZ,@0! 1D 4b] ! "UԢc ,QN6\ݿ,˺! E 6N S(2 *hD޾" H; 8-%-A%.2(މ "- 'ݿ-rd BJ9' 0 %&A$ @+ +n X $<4K6  4~,9%%},9‡Wd~H4  f&k03  S 2  3†Vd I 2iCd I-pkӐ4!#I3333s-`=Rԓ?ԓ?8$At3( N;Z!z55Z!z>C+ !   ?PIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copynoask.png0000644000175000001440000000277112451473236023241 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME "lVCIDATXGW[hev&{K66\7Fbn%BE-->T|*^^ j ZDOZh iA؋XS l64gg/9L̤ ;Z|rukKک䲀"eX " X7vk., 7Rעo#sl`@Nqbqߡ 0} >&''Ez{/BSP)g G{yLbbbB!j%RA-rv; H83~&&,-J {Uds!'`6r} Sz:~{gғc`Urr:ki2qv̹JBf,^jcY\'z=WfdGe}%ra:="¢>B7,Ër R&Xk{ܷƐ@k.d2 ߙCpPS=񇱡2Jd&x!p:6o>bH)@wO7i$!q\d6Cee%l6:\@@X4Cw<AE d*BW/CFU 7\ڙ39بԓr)n[MK^_%Yo?x!ʄǸ^ckF%B2IXSjc9@oĈ|-[ 0F `!b9vXe}6Ul։O>J_~>_lVd'SwcjϤ}x@!xa6=z^/I~ʯ(_ܢHLjk$͞\xod,,]wM@Q518_RX 1$G7nۼ-qWی擳x<:7:`(ȺW `JPdV0aD:Odr]l7^?" 8IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_extractfiles.png0000644000175000001440000000427012110457565023723 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME:HEIDATXŗiU]t;v@ JAJ"ւP $؂e (4KCJJ@Н,Ysw9s K<9ysA}~cr3ZjvܵBig53ԽoSHO◯8 <*#{n]H}yT^E~gރ;yw~֓*$=D- y~ eRr}dRG4LlΥҵijӲJ0}q-tFs(n&PQO-7~c 7 nXrizʢQF#P >DB0Đh fo% Mx__+ t^gk{vᶇ U1zd(DnTE+;v|p<2b%?t{H~h[t5e^ N/A[Z֍e#4ecӔ*I[H !la Di|.P53/H`k;=2?цՀc%-kFe)MYҩK2\.A#} |.m_9EoaN_3tAr8q{ (b@ë_* i1L0 Sbi J*(އmI;7fm2C=>(_= 3ѱk)/ZFewO189hw=ꤤ,H8l" ,T0$[C"5I49@否iڒep<9Կj*[b4B|/w̻HPYh=eE婩IILi',B `(ًTߨ^[Y]IÜl<DJ.Zie`e;z;F8YF4]"ŀTw:{eUm X>D)i$za1B \%ѕdx`#Γ>/Ɯ6PU_hVVUknĴmRS)R׷w)%RJxC+A?Eg;-< c%wj§r1@RTxI ÷ t8OtS.|10IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rename.png0000644000175000001440000000210212451473236022466 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 3%Z QIDATXGWOA~-, xD r2`I܈ƔV  h#G Fc ' z QQbl}owt: dvf{{ӖsO!ޱQ=X1ٰS OUq28!A3lƂA5@ʼn;Xeϓ @5P05U 0s6 -F$R`sC0Dɓk-`4/)ApXOM3fШԗ  ı;D̕fԀ} F=="6&ٲA\|33dϬV+pJt4}h4JJ1X|<)v-wɘz :"G!'a\W,{0 0jH[DrH$v#rU_ A}=196  kp {ׯ*y hy g7!lQFJo @H(ڏcmTp( Bd/DBW7JN8e9M5Cpݽ-(k?3hf<=~=:>bl!>Dкf=NĻ\CoĖZe _7IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_calculatespace.png0000644000175000001440000000362212110457565024177 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<4IDATxWklWܙzįMb<0qMEmA  !!U?ETTRQHHD) "+m;M'v1]{z_;;0vJ~=ڙ;ss&(v@Eb_фد ѥѸ$1~ 4s VvsMUP4Ճ^q33=wlQXwNa?cqc; Z-pҤtBONT@UCmix?d}_] ;sZ9Vr0 y0(XyaGfWХ  A߶6Rz GG|W_kTiGTtDo08}l-ڈ2z$H=x ?NzERF~Xm=z4<}@0`:[\Ua(u|0y:r5XtC_￙vU߾=c-C0/>L:Cn|u2'XeH 4يÖ.MʉӘFhp56t"*,ȰrCEQi[CWc().B!d ܧ6 B0XՊmOT OpEu1n*kB'P~9t|0q sw@0\ΎvKmR˥IZ tPtR Mq7/AiS^5=|C-/ijtVŖJb!5e/Ҙ,JW)s4?&~WR7IR ˑ̥+#'_)&tLvp4WqSirabv WQȤ.s_:Vo<3BI3$'H6txF4KQ4`C082RyWt~? wAO%qu1Xi4+`8c:{Za*Ns91 T{~?Y{gk1#-  2@g'+"!j%YdbZJVL<ϐuJ}0'O8L5yYwၻB@3 @?)* ZɊ2Oŀ/ 9p ȤRxPAcP9H߽/E qfTbH |$hZт1s>8Ԋfn .pjb*kZ敭ܔI2M\P_ŏ 8CГq`61$dRbN/@(K:'dRiP5DAԶSDG E9ͭ&)޵F@x~.BXja{A1ff2Yyz5_GZ1)hlldNI*\ՋOoCY MrdF"geWƇt AaP DiY&0Q ӢWPP bSC7eODkmGVETRiN${j}Mfeu@0q>e@䶙RYH_YVJd{|sEǵa GfYLEknΡߤ;1v8"CޮF}#NzzZCUsh_/z7R:%W9mBMe wtWM4D}hysG™aDB(o߉kR~ jRJ \Ͽ|SZCl1<"y`:!!z}l~VI@p?Yt8L{w8U?.r{.> Oݡ(IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_minimize.png0000644000175000001440000000533012451473236023046 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp t]LIDATxڜW lUfXҢ(ᐂr.mQшbP@ @4Ġ(#[-H aQXBKKK^y٥ЦL;덂?ֱK =K4( a%Y97%f73F֪àu{xF*`-8%2Ch"2VUfaET ^\!?}b¤= @/j{,*zO3TW{,4 Y?y N]h5/4!)!hwAоX>|’)T&cBX@bY:aNSL(NqS3Gœ5;/ ɇ@2P#&&\<4lN8YrIp9ctCz="ekyX% hY*CsEVtr^o y$`WHKR=vċ? @Lr(̥lw69kbMZjdXCГi: 4,b(>zMMxoGU*+ Ԅwǖg%8Q#|yuvgF௚f3*0AgRz$=;9',l=u  ٧ze/YX /f " ; Թ UD{ uxbЋ\9I\drә'' Eo-8qEЏl@5$9۬U!VDu6%X[lFeI*t+(yQx݃CzyVզ;";̲/:N\N,KQ# j,瑣uIK˨f0 $<}ªF`e't:O2X4ꀿxQ{+*;x8ܺ?Dd%Rvu^ p;y0q>0SDRͲY&l한E5}ʨ%i=$k/imc[̋~*b+x0wRS2衎, QОdnOT3JG_bW.4! FUиIR^}RDm740RSb  BPɇ 4=?O5 wЎe 8M6[je1tXpoyQ#[V~чvv6BŅ!wej4 :2 /|s=\da%d7C' nR .g`y{ۍ6@73?-ȠW% 9Pu]){Ra}nxO@PXyA¿}g _%8bcN^6i#R@mU"\z`d<.a͌i#SewH—[Ji4!yVdj h}~Ũu>LTҮAHmvj q.w~zhb|kMh72"x5Oͤ9O6[Ƣ bU>nYWnprs!]OF[V(&,ÏeƷa &+\}g5)Bn4HbT'Kz}W݌6EL}%f 0 FIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_checksumverify.png0000644000175000001440000000366112110457565024260 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME!43g$r>IDATXŗ{P]eHmZt3uH'&@6b'"7VM h05Z;IlufѦ$ê˲^L3|;9y}Rړ~BPPX)% IEQR౵!ZPX\!H+s-^Wק(*$/'|.H[G0Kx8soC:a\X B 4CF@QEQ4~<!Pe@#PBU L֫Wi7fåKPUuH) }+\9ٙ-h`ۙʕy-W<7CǮ\_hnٿU^$NVm PKaT,4>sذ L&_vv%EE_Qqk>@@h^ V&yOs̙3q\? 0fmh}E BP`s)6Nd1_Ckƌw$>~*N`yB 7κAo=߻}6UQCppOIַ:rWuZGWܱ\gfVߙ[eigiEGWрQJI [m=GEOeYaE5ٷ LsüB䗎5܊,"+OR>~Pl޶{ȥ-|V{7E)d8JU.@߼Bz:sMԙv*atyܔ !RKJddҸ8 <w1_i|#%o$s>o߬I? ڌ &\MLLfquݬG7\#Qؗy!p5`;.۹;i:Nikk[5x<+ O%.+r ! e;o%$$qӃhd2 |i bhUM{W4VN/Y(b~*:䆇 x--`yL AS5yL dMVAw^UUq:ݬކGlk#4<U6xCCؾi1:stơbEQ1 4ch4dhX|=EZ^žJ'/ʉfmޚZjk/aԔK-n--|>חPIǘA[[ee ɔ !B 0 B; -dzX MhЬҎPM4dwu^ݲwD#jjmIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_viewlogfile.png0000644000175000001440000000426012451473236023542 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ;4j=IDATXGW l=3?{6ؔ5ࠢRABiZ6mJKR$RX I[7n!PhIE%ˀƋ?~f羵k{Ҽ̼w{[ 8tPiOڶ5=8G.bp>Msm]wVڹ,%8K^ >|2m$Igv\m:^۽ٺm{ Ue-wX|_aY.^ǶsϢRn !n0M V͝#n֞m[_HYhy6KiH|TX*'GJY3]ذYL.*\釛PɷN]m ?._=ŗKX:$zS6b1!@Ccma)y1N:# |IB(//C X;wmmm 䎀amtʲ-@HJXSRȣ0;^'Ņ|~,O>>w_4ӧzߟbFK8a\R5ŏ-Ľ9@e+㈶|z8BaBqx؂p'.F"I, $,.ts.!fl 8u&`rC8}}H LRѓ(g1zuD"B(RͳAlt:10{?(b`:d7o:V\ƙ7r:rY!i,pgQ̉" ׮]C̫$.Y Yh)9#8r, [_ax88@$k׮ž}2f͚̜|@x<[pD5jåݭx Ғ%Q Xpc!o<  fvx9Nuuri>i*I2=<|2;Pwރ(WHXN0q|rYbzOߏІ 3,|pFn\.RbaA|f-^tf#U"<Ū+YK=>b "W# biFMf񧿆$XzlwA|c8)|^7~U:WaD"YDI8! ޲ ?.ysim%N^؀nT U/q%QJgf 9NC x!O--Z.5#ߟ7oI(&bgaޜ JzDNiJDz|MCtFҴ)Ԝ\з%OYTrxsS+7ߨo3t 55rvB{{+3[TŞDZ;Kb!&ퟏ` |'lÂF HDٸ,YRuAES翺L3}]g8鍬}nO넸kPJ(*+ׯLRA#LJ`Ή'!|j)kv =T8j~-IN/6@'w곪w+u—~eAoIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_cmdlinenext.png0000644000175000001440000000311112451473236023532 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME -gbGIDATXGWmlU=3;n[ZJ[AQBP$5bbILj4VBi( H)@ v[I-vRHM^{syX c Cvm']9Os JBg^~BQo0t Í`DB৽a~dx1dCazUiwB3UpHD$T]킐hm2+! xxiWi(P#Ӥ?a ; hv!?YŤPJs ƹ R$;3l08 t?|bt|Ay?!h} JfNBjQ: pGpJCSZ3[w3m1cT%7BnN &\.@ɣӱ䑄Ӫ=u*Sf]. }PEaayHr.sL c+rƮUfބ@w۽ 3a@ECǂla@s mCSvMvCr' c*v@TO S‹AX"ƃ=Dle ò3>hbu!`wIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_nextfavoritetabs.png0000644000175000001440000001023612653160641024613 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME/&~.+IDATX  ~,${FbX0  @@$ Z  {Nc(2 ?3( 73 J-/T†V O+V/+ ~dJRÊ[If`4 : eM:ªˊ5W/,|D$w  ^3  ʴz y L& F1eYN; $!+1K   9)r*MhwD UN8   !ߛ&G1ڡ!e  UN9   &=$Õw!{G3Cӣ{uɇ-w *iE *Px7yӉߚ8*+ ( E1Ed^  J:d !3Zݿ+˺ MHr2`<݅eF=ZzaG_Y^];<eD޵ & &ݵeDD;%QE/Z|M!V $<4M"{UҦ/`к|I58%%68{DӠ-b¿cA  AyӞ%‰q N`6`6 NIHB|.L:h&j))h&j>C 3% Z@IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copyfiledetailstoclip.png0000644000175000001440000000365312451473236025626 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME (^8IDATXGW{T{g S#YY RjZ&6*lӦ5!&Y!&&Fi)MnEdCإbJD`" n1ݹwfIm^o4-ޭzyJip]P[[FTD[,p-:NKkk(UGo|rȮg?k`MXn-<* `'.Iq:=hn a i682ڱATVVb/_7H 76mlxt+wG !0{O{0T8U5CC#~ 4+ec xd-dI,JCf?^ Sf4Q^k!\3Ȁp,-x)'4I ϡ 79Mh-ռNiwb;5gj5I i;uOmNXXvˍr ZLdQbX> tx8R=)2? 6_z[Aww!}Ţ<첏 HqF Ʃa^r'^X,\~HǟbKh;<'ٹVa[@¥_?{'MqO/py$N_dDOnń:gBێNT۬g;CxqHpG]1i'νwƻpU\ՋZdLGR;%Q @@Ȇ$ CG"T&aj#YÝ[6#i}7KU[f{M'/%ELOo1Z|r ſ¯kvW 06ִz6f~- yy@7<.' /]o k5{fx\my zC2 Pp5m*1Sk38Ae9MbDiQx^l:ȹlYܻUUU 8ew&N`(h0 ]R?zbx6%ht| kVV}z ~ ?2#.`ӡXT\,ދR:zu$5pݙ 07ReKZa W0#\SY 0~Tl`ǭUdI[dNKaA's%.,u~ڬZ pOǂ2aLh SS4q3ffIVeuA<$ M@9]f: mfen9N_hnYq``;((گtO–23h_˪iG J.n.eM@,牉Bb@B53`p4>ڛ\ϼpb}:7I}(YXE8ӏdMq)Ťr0jr[A rA~^pm0Z1 [_¤" ma,yYax@& R{g%0EE(-_kC)4ס\Gfw9YA"jߐҡGlp:DcyAfo=GqmdOU:eFBmM5ɑQ"ܶ㓟s?.kϵI%A"nỖrtS`uZE%7rF5 _,)H _0Ay$ȼ.R{M_O~偮+Pl,6O./7sul:pul]f:>Zm83kOHSZtݟNp"pr0=N6E)iO%U.9?YFG{ C}$3h-V&2tR\/|}[ wٷy-n8Us$q?݊[݅^憾*`[oE0PU*]i {'=` 7L ??@.fG]s'\IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_packfiles.png0000644000175000001440000000411712110457565023167 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME i7 IDATXíklٙ]^;qiA( Q%H Q? Ҥ"4*A'Q(k+ۙ7w_o Ah({zNx)lF.< kr,˷/Qdtl:)}ק@hjN6q-s:z#*k-Z(bӺ57\BYc\g5"kfcB_`|l-kC6/ B6]C%0rk׭ 7RoԎ==oHzϟ< ˡfNZ<wKߍw2S#ǸJ:Bя-NhM/TKm]\z݃y?VOתVu _YKr5DlЛJ)W:lx'aTәogN>vvo;ʥ=(l|ʕ[MV(E?Í?WñJQhxbAv]EE>gJǞt;ϳONv~#pT"&}Fgav'[ׯax|t]{G#oIҔM8s Krȝw0 $XSs:6<1*ab:``M+/8S˜4t_;v-McKqeX uԹ u}Y dՊ,z\7`R4/k ι> 4,dAg(W@̋4^}s_͚ ;}A~ګ4֧y})Vd4q#rgoS|x9ZJ(`)OBi_e3){%6\"4Lcz?[i/23D^׀# ПBD!cq("`jU*>vԷ,>ۊJ7DB;Ѿ^Q Q(z6BL`- k S#G9JnP)2;Q&(c\+A J``nh8I)D J+ѮrDD!J3RJQlTAI͘BB:ᠴ/Dp\32ֺX4XGc# fZ'8P%恨YW ZDE((!Z#Z'>b`Le勉v4jbM%pn 1f9N V%$<<αA ?~/=0V]S_J˫ rqWmVG[+[1DSAB)Gz74﹃zC(Pf>`Aq:2-ۖuP8 8 sp? bezɪZ>!W0iovvyA{=F'.bk?߹T-atIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copy.png0000644000175000001440000000132312451473236022175 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX͗MkAxI~dA=-F'KтxWR-ţjU!I٤K^f<,;􁐙<8h1˅MY54fByv3/j(ES|>O=t%ʩDF5ոaPV%{˫ p`iiIy "%" a0Y"*Y!"OXqBT*AeIe tС( Dsev`px(@&,T),+ L]LjH BSU(HR璂~9BxHZ_H"D0n~$?T), DM c'a)iƘia IbJ{"~{b`{ fPi&"<|iLp4D>.k*q`n9We7;{7  I*c@O{a=?\I ڵJXup1 `6}9Y.W& TD"i҇1!}3?NP]zo.'[F񩤰nߵ1v0擕յiט{VT MIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_reverseorder.png0000644000175000001440000000071012110457565023730 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME$5;Q^UIDATX;Ka,ZXD H$[XX%?_ba)VE/`6ga^f0/ |{͹#ǿD hq%4gM>sl5k7:& Г5 qpp1vU @FPSBf`1fԀ|H# B;~E_]/Ky8`A9a4srb;w=ץۑ0mk0ky:;j>A 4{/G;ovEPa'?e%-n'QA$ě04<0_)%%yCgA,X2#P\\ٸN>܀_%/t'zzYϤp҉En/o  7obGqO6 U/АiHMI#q;$ XؐqtTTv Kx  b.]+[}}HJLy5ԟh@lZn%Z|q6Y WC̔Up\a/)y+*q @ATl±: -=5Gkuɖ q(ɈZ5YLj.+ŦTDo9,M͘vySMה[ׁ?HC(g  2:1؝vKAr:ټӮiDE&Y10,(N'*3Sا[7:;;FW(moɇ}b)o EEy>b.vw}~hͮ={-))>WۉioNrbYwe+1cp~.J62{H[^~w]_`8OSXIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightsortbydate.png0000644000175000001440000001021412467744673024455 0ustar alexxusersPNG  IHDR szz pHYs  tIME ,,E +IDATX  fFOxTC: QU({U f 1?C:!QkHZT:)2-߾{3 %<#C;"R`@[R8)2-߾36!G;#6R5vzE.v)1-޽~31(K>%I.W<'W)/5ܽ%3hI:C zD/D/zIB~9)%r2BvI`+16D4",  <:1;?;9gf[b! 6:fő; f L}BN+IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_changedirtohome.png0000644000175000001440000000347112451473236024371 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWilUfyKi&T'kX,P 0 $1*?_Fh FEV#.VEѴZ@@Wh>o}}O&]I^{\=_p< x&=]Qca 'z3uX\dXL%ېiEmY=2`Ђ?=?ӻE >8q#l\GI/_s܀A+1Kʲ@fȏpJΘCB@s>*DQKSS_߄p[9%!V#vB3>IJSpbldEOFnFetߐ?47<M!ѓ+nkbVe!nIHǫHGBG㮇lQ8s!acTkOSh Lv<gZ[GŴ<$b>srD%ss'xѓIsUEŤ>&s@Kx<3f A$<`%- h<څœ>}':_25@.BX/`jg'-0 ĎB!T @`t?]" H$Ѓ_ e6$,%JJ`uD{ &`:ϞFg٦X~n0~>WNzv;hy̹fTi]F$*a̩zH]75_ar?&Y^gt,I1)*h"nA.ǣ K  CH|dYaisg"?co:o J4WLpfF2d'ܰ%FBIH&H%SHӐ =0+֭BY}i2+@o* eA̢aY<ʱvRR{Pe2E#SƆmw!R+zٽ 嶕R5(]*Jv,ZCkY;IߠRz7 R#U;RL]DIgvON0|Һv3(8bB(ֆWe)9o#'S|z},޿t[iG"ʊ(-tcTXz WfSXcwL~&`ҪUĀkk#v(A>oj  }&`ʵeڄJqJGC-!= "`bXĵ42e ;ok8kI->ÎhVHfZ -BQuȪJLcBJE> }cśF@~;'"% 4CѤZT45ESޫUu.OQPULBj91߄"+l)󫖞΀bMkeL=PBm+t&܂W=Y!-EbEaeHl)8!/{XP1NDSa8h4sqWHiJGO??\<^8+RGa_jW}4gxSBF?sj: 5@zeyc( 7>=fv7VoN#@p@\X36hчK\l%u98ܗp.(;7qo.IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markinvert.png0000644000175000001440000000377412110457565023420 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ;+KIDATXWilT}۬xavMk!B(a -ZB)jJT%aqi=MTHu7$iA) c{`Z`THGOޣ{>swBF;8($W7+۔HgW=v- 矈 ө䳉DgkP @{|káS؝eM@\pgg:',_ָ+, ۮn.>v~nBpvT-z쩄zOO 8*!+s֡jƍ޺ܲD )0!G:p[qyz 8 8 J ;A z K\rBfY(fԑ.XYdǺMMs* 9"2qckE Z1G 2@}fOzϹ>f \߃Tކ"xxQ 4kY U> =Сn[Ea9:E_gAduɺܣ_Ļ]&"!@ )ۛ_fGHmoF0 U\Vem, ᨖUasNLT#\/Cd@hQ#6Yߪ PV ;Փ!]DOAj Ll3&444^F 37beM 砒:xU'l.*n@BgӐ.T' :@ "C2״T7:xA\d̼S1@1 ݴGC RKLPOIv  qA PL 8x> ӺYM/F`\QMy\rM%"e\Dp~97ȳ=#B\M6"I(*vA,aFh0;7bˏhIE7Bgoq=bƏ\-tvcklK(w tPper/z#EJfnqBIX}prwy g{oKiM?PtMs<Ѷtcck*H />'D @*}) @f,:\+D5P7fwOM2:gy}jI.@A35a_s5@ s\D\Ŭ扮C5 HЇK`ݺͿP= [=VR Bs-,sDX,Ŵ؍YuwBkT|7+ݗ~0 ތ[34)NXj/q;o;˥e~ўz^ fmmmذaWuu:&} HXRhr$JY:h 6m\G@/ӽ]GopDg9Ki}7:u%{9 ·>+9% 䵈yka 'E PH f|F0 x:xT0iJSzӝ-#D̨Wj~STֶ6>yߙ>T)?޹19@DưHbHݙq]CJxmƓsqh4?N$b Z[#n}Ah)IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_visithomepage.png0000644000175000001440000000254212110457565024072 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxVYh]Ef朻i4.}IKVb0T *Ji16u"֗H}qbhJK-T Im51Mg97w7l s30nѰVC^#c Wunh)'_jE %8[X c'Z Ē@eXa0hr@d=N[`Uu1DBxuL q!p[UYXFWE`xx_]FݢE'!w8x7L0+cАi X !3iahֹYdSҪ,EkV6] P &qm4_C M3J2òb@@'mۂ8Nh}jz }ƗC2hy{f;R 2J|j|݄QjrO1QJcSE ykyE6wۨWb,g˷҄(Jsq J3䡏97S3ARx,hF gVs&%4VѨHP#,˂*QlhuHf`'IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/go-next.png0000644000175000001440000000230311416270327022120 0ustar alexxusersPNG  IHDR szzsBIT|dzIDATXhUe?{qd3S ~.(*- C2#( B7#  D#,ei6r*͙S7ڶ{~yw_{=y}mhEQl=wu$O{b{% Zh-r凯}kǓ0nzloZR0p1'p˄JS.Ggjofe,(g0Z$8G*9b|rF [^Z=OAmti}wh,S.hdOdLl$=A-ݺ5 ,^e9H$BfJa &;k4SF?HyMi=I̯ؽS3> ).B,m (Z:NӞ:*glU_.=L3W]|Zx( d#;Nr7YqwsFmYh@"VatxhKJIsh;%m%S||VKkÒ6h Fq< gR?c FC=NGI.Ffw;2 l#"UDftӔ>qXrԮ0?rsIBB-0-g! vkK>ru"OW|1D^ 򡬢=pdA4.|,cҾdA}!/wtlɡx-H@ERF677-߳Z}ETA)ɊXIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_makedir.png0000644000175000001440000000304412253356421022635 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWklTUcm֦H[ ՘1BĈA@& ?0&!MPc0AAP Ev¶.m9}m%dr{o3Wm硐;`-nU PՋ֒˜,t6>,}VFqSgzd:zp?c(!EQ&1z GG'YlIwۄ5DՆo-u ] ==iSV*b@ Zuʍ{tU+C X@, D T2q@Fq S^2EFi 53(5mب65ht j)0%n+?c9'd"‚ cAܵN2;&hD,C8 Ye+ 7-(Ao8zN=UB@9`K;Qe%(g, dsN-M>"(ÿA㊞Psg#ۏ?2'Bh:z.tRKRɑ8W l*5}K}A$! yrWbU(D9mF7 ]W<8GAE[`_?T+ƍf#mKjT_8B&NJb~6t1}@5{5;3 w/UUXw߾w-gfS}`1rb`t/xn3(H=Dx2iipN%eKB:c(N1%ivZ'KtlyS\ȉ`emvh1Lu%*;;q`?ތV8ۇ~\c k֝l}jBۈ%7~k~.f~1EÅ=آqAW[?_ߍ'.Vz<'#BJ>JnXMu>yW'Z1ۆ=:D#rF}ۃ7wĝ -[i+alWkyQ }wh͍h[d#QsB3IZ(l:^f);CM{Z;{n]&|ۄ]$~rr縺[hFՌ2BJ"rRsm7 K}v|FI߭:AmK1*ඟfqQ/茛~=M- e1JA̔ IpYkyTt':C=ϟF vʖ<4XO&s dAMY+l;:ٶ߱N=rsvH!IɔN[T}$<tljofogr"m$99@7ǿ e/F@lIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_loadtabs.png0000644000175000001440000001023612451473236023017 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ki+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3   fFq  ҵU QMJ\[\ϲTy 9)r*MhwD UN8 A@B  UN9 #KJL  !\\\WWW˝_XoEy$  anɗIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_networkdisconnect.png0000644000175000001440000000346312451473236024775 0ustar alexxusersPNG  IHDR szz pHYs  tIME  ~RIDATXGWyLWfDԊPV`9@!T0j54m&=x&6V)56X "tKTvewfg7k]Ӿy|oPCV5O$[a@cW,\l^ݞUw\>?ql CC+G|=^pW<*;'%YD<xu-XWڴI@?l%舞څ/p|0+:'Ueb|[|ȏ5^e2lP~2`'뫸m*;R G8|)[w @aDA=Z${Sɺ+v>+< ̉(j_BB}S| ƽҧGC@Ed\UeYO/n9`hcCՓNɘHO|;/ꔯ9 P2a%'ʞ:S* B&Po/>ATP >WK~a|2\ٰ9+O;4!!ӧOf)(a}z' Z;v3)a?:)xQ[F𔦎xzY݁@e"c)cFb5x OBzT.,1gJrYYo uWPrMMϭ(C^ 2}΁7ͨ*%?[E0V+:F˜ (v*\L)rYŰp^6|Fy\T @wٷ uUm ;",N 0Lr&)*VaoK=>|#9Ȫ)+/7I >`Ġ0x`2#3+ߜ :t#gWH"l)7Tg Ll1}' 𸞞gGPӒWΞEGYzyI˺pkd;W ޓ=f8Xt!x@ٹrԿw pJd! ⶓqCۛmbgxl]AmTR9!2CniXâTgu0RM7S{ ixZrVKEZs΁k^[ncaXX g 6|֨5Tܳj&p7?;p@Jpҧ뾂y X~jͭǚZZ*HM q/˭IjIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_switchignorelist.png0000644000175000001440000000273112451473236024630 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME /3qfIDATXGV]lUO?lK[B-[`bBjը(1L OƄ'#VL $b@IQTʏn)-۲.t?vgvf<ζ4!Гٹs{wslIXZEqmY4硤@&\6:E||[k3 4UgO#] Y x)~m:J*IzBg}$( W&'*4pFlV! ;?pl“{e+AcDLT$$#q7z%Xpv6r`1Dž=_<ӴL4rk(gS`S ( -֭iqΐ`)cZkC/-X5F7.躎kރYZ >dZ?ENTBucXŃH$ħGӦP ނUw((eS@6g`*Df`0lMXV#=H< m2uc z~q#%oÎ;rk|===dH]. ' 0s&zKinJuuu>Jfрr-FSS<OP(H_;ENfOODsImj=qYn|*`\oiiO?!;ɯh<=sC}5 C:93xeK?^rJYls~/'_ Fdٜ"+r=6ƎU[pwU}DplݳgOfc=Sq\M~8a26SԞ )ߡoo봥IAg^R\eO?ӷ4DTXlZ\-rzO G;aS7q35:h,a9Ic -RD —N>9d#G&$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_previousfavoritetabs.png0000644000175000001440000001023612653160641025511 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME04+IDATX   B|?v2>w,F>wBC>F-b9(EAzBD7 :"` 0?޾ F=A" 9$Z 0-޾ J>A#"A$ .9)52ۻ^Uj Lr!Fw8N:_T†V/ZH VG8ű=vRÊ[ &D(: eM:ª  ^3  9      G!) V,3%BpIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_addpathandfilenametocmdline.png0000644000175000001440000001023612451473236026716 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME  \+IDATX  ;;ܑ;;ې::f:$&,ې:f::ff::ې:f::fff:::::f:ې::ې:fffې::f::f$&,$o::uI$&,IPfg%p:::p%gf:f:::::f::ff:ffې:f::f:f::fffff*  s~yfv2& vw            rrr&      qjb qib pib  wOhfe |i' {~ Brrr&Eq 3IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_saveselection.png0000644000175000001440000000435712110457565024100 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ;! L9|IDATX՗{pU<+>`A$EE҂TLGE:S@gӢ*EǙR "T M]t֕7p<  LrO?ni/ F_bm˺lCN(?U5/Ѻw y̘ɷnIt5K\ dМP1oJ_{K$SĂZ?> n\:Vע,P,wU= 9ڧNsq}pWQkޅ)ǁj`Rsmf϶;zUq+`C Ef{Z_ƀT [ P @ckv~j2$@pUnΨ2~KɯJkC Չc1Udj XK~]ОLrpE[z4-T$= :ϱCoX'hU )i"P膫e;HUyɣ+A729gveoݡO7[lȓ).V6z."St`ܷ=v.y<JbmD-GvnU,awIbVqlӿ .m=[қR[-  / [sWdQvlYjVHF1iR'ʫ' Fj^G'1[1x z9ذrJ>Ze rD.!0/;9==& \=@{`@ JQ¦Z%nj|ܴ #0(oBpƯ|5\X9<N*O@@h\ D*D/qK%V9$0+ 3NrLy0j FA (n G@D e4 +/'\_nBM{ކ@pJ ` @E.NP<;c+4 nekE45jC-z=ReyBÈu#<ÆXfhpE8GEYd'KRPt< Xd$X&Ё?bVrZWo~΀c{Fe4];/~Ľͯ#W4HJIA7WsLgiܣsX nQo =և^Ztkedv 5@ >9*| ,?%$(i<\V=rs٬@^b-|b7/Q !p\w& ;U@))9/ѯ5F:]. K iǢCKi8ܥ<`w,gO9Qwj=w6=}|ޚ33x r/< `@"&m?X8л ΞV/ XPly[0B{}9r &0::oّkuYw2* ;@8Di>Yu,ZXƮ(2FbC8'<ȕɠZlOfDZ?l1FUU{ '[%nP$vUvj8/Tb$PU L0w-/;j]Rvrj!bLJ\l@ϑ}wmlJs4gVf]Yzh7^jcg6. /A6$.<7W]υε_ /+m}PL$ ?)jΞ+)z;< vc8?,.{P4~_?mCk \rO#^F$gX 1:9N땃ڞRfH%G^D{gČHZc%Uh25[̬uܥhHm{cǁr˚FhW׏'$~qD1Kٳ[_(c7`ŗ`oesx2hI`￙-ڀOWX+.]sOx,zt,?!e$ /_;l IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_configfoldertabs.png0000644000175000001440000001023612656270711024541 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME&+IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    QP%,B0   UN9 8, +G. ⬋Tut$( 5Ά4D*!aE*絣qީb\Y+A0CՑ 2N9BRэCэC8$Aw5$33$=[vIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftreverseorder.png0000644000175000001440000001021412467744673024621 0ustar alexxusersPNG  IHDR szz pHYs  tIME -+IDATX  f.kETPPg)hF&gj #i j jbl\'lT3h1R2RK{}f]'bQ.<rj#-)9ISgW ?2<{A$!h1s!h12i(;E[8DgPyfTFIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathlocked.png0000644000175000001440000001023612653160641026651 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME&R+IDATX  ?zL T†V=vO iP; iP; iP; RÊ[ @kT> kT> kT> 8 K              f'.3 /"E+/9 *.8`H..3:,29Ҹ.' -0L?IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_showbuttonmenu.png0000644000175000001440000000110612451473236024323 0ustar alexxusersPNG  IHDR sgAMA a cHRMz&u0`:pQ<bKGD̿P0%ZX(* i0̳H.`7 -")UJ`DbF+~@htx%yݰVd5Dp @!*c|uzaElnx@i 6tC [j\aV2yìUVd!fEJ",fU߷@ҳM*Zwmck~eovsˎçwߊձ\nc,GsJ1WXIWG3O.9ZqK]*OI^ hO5jeF|a"EZw'{H(DIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_savefavoritetabsoverlastloaded.png0000644000175000001440000001023612653160641027524 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME51F+IDATX  ___L]]] K]!Y" GNP  "]W $ ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    |^?'9%%i9)r*MhwD=y%)=f# !ߛ&G1ڡ!e  UN9 y''(?MW***)`ac&=$Õw! *n|n{ *€KDɇ-w *iE *Px7yӉ7E~'()HVZ}*)*HUZV\\7Fߚ8*+ ( E1Ed^ xwQ\]  J:d !3Zݿ+˺ H! `<݅eF eDЌ$8#K2 '0tz d#[67ym'K 7ym [6[6 58%%68ag_YA  A   GHJ    N`6`6 N       k!hQ!hQkl iU$TΕ4ij3%3$ʿIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copypathoffilestoclip.png0000644000175000001440000001021412451473236025634 0ustar alexxusersPNG  IHDR szz pHYs  tIME  +C+IDATX  KZZ[Q KRRRL xEK9x# Lj`P KQ\lR]oK (ڲ=&N{,,[ipbd۲kMh` ;65noRk_]]ƀ<,4A,SuNl^ʌ=)8=(+(L r] A);Hjh\ͅ?':7%vVoB[]GoCjlZfYɖk  3UƪP7jP7jʝ9jS' ǫ  )87ҩYSbykZMl&6&ٖ`K}}C %.ֵocS+4 j[ '3D3 (/# "&" (9#)MZ7ʣ\WNd^=Lr $ifڣ qy ?gTA    5D$ ɴu  lh@u;  hG.IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_addfilenametocmdline.png0000644000175000001440000001023612451473236025356 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME "¥+IDATX  ~~~ '''\\\BBBBBB___ '''(((;;;SSS<<<PPP```@@@..."""!!![[[FFFEEE[[[*  s~yfv2& vw            rrr&      qjb qib pib  wOhfe |i' {~ Brrr&]dIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_open.png0000644000175000001440000000305212451473236022165 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME  `> IDATXGW]lUfvvfm"HiF4A@&F T7%&_$ ICeRhP(t--ngvf hCTjC|x*4WC`*q0?:9W ;=jJiB&P~j^JܖPvAYa;Bw_ȣ<-HiB4p9d7""4>EQqcL"͸b4p)r,˚P,M  2%wB*] t- Ωr[vRi ̞d &Pʟ-H7~ !DJj| GfUKn EMB)3GD]>DNJ`\ύ1p3pzާA }<01p,%5)C/LжW&~QܻtJ=R"dnLDE/zOCt?A8SE<4'ο[й]4nrsRKP: X i%iC%":NnOrryr.@ye JUWvܦ< Xкsg0M:ȯIs8|pUUBPpH7~@I2S3][0ۦg{ ֭C|lWv"lizPUxp J*['jJ687} p$cͱٖp 6{3rA|?jeU0=nMɷѲArvYli 1cT9{]rz\&Ϲ2 l8/[]>x cƒ7a i-:iON\VR}ng6-˱V6wV̟a̩88ŞB"/^\i!}Z:Qyb<pϱcٳl,uN26 zN[ܐI)WF~iF2bF"~RDǖ|;Nvڹfd s %<˽;̨=ÌCd 4 ½1 g%[@.Ѿ0 Q{,l0C$C_xǥdTPEu5S?n72OL^FwT"Zh&,3V?gY_܃,e {ǘbUKV_`ًgc+Id!& _Λ7sq=ΡN%zPaQOiM'I*(^ -FRtU+g~ )ˏ(cFWD[5c9@>Nc_IH$%AJ$SHOԍACUZHF8Uz۫Cy!G/''K6>KK}$AVOG7:@(j][*jh?Q^8k*c$9k~m4?;}іtrma'FI@h*4dU Q*GESSоauF򖠃1d"}! DH2 PX7y/`D".AD|=O4_ӼU6?g>?lj#x/rzG tXτnE=Ixbs?B(fXxb^U*JDmx? 9R??bń\mѠc5G\z Mr3JA}rAqLJe{ыpVÍ<5/qѵ䂍#ab cm^e-du!3NhieھnnPԃ~)us^!Ē_g+\`V*a{`k>"e7,k.VD+ Ă#f& ,a{fb)ecc8r2o4 Wm|KaiͅSX3:ch5#Š &H_BF.)R;"z~V ɸ~ń/nx+VO%.j6*FXʬ2RGj 6FaNiPۛ?݈YU?Ej|igDA0ay0+l7_BJT$ E:6vr~EBl) >AZۀ,B73Wmލ̟"02龔*^2Z|$efzrހ( 9եA5} c)f}#]-^.>9G`xRC7P5Tnm_ǭOmr7:?3[BJmp] L'O!8$7zvvޝ(O:)ǹCI1mEiى6嚖-Z HD%aP0K}|2 iuݏ;g_Z˒@o:ԟ#kU>$E{$T ֮̊AqNRf#e5KdT2$5'@I<[Y歚-, &]ڭO{kkQS_WƲbG}4ۀYC!7iBtqJr\RzJ{1 ,4$F9]/-iΔ)B+ 1؞ZK)):.1T݋^`,O׸ͼ4lj ݭ;܇ g^QUP7z%F*%tetxYz{7tno/ "(x7ڌ@] UTc|s0@B *2 0{\IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_refresh.png0000644000175000001440000000375012451473236022667 0ustar alexxusersPNG  IHDR szzsBIT|dIDATXŗilT޷q ij,\5(%%QBZ〚㦊RRPFE,iIҪ qC Mc xggz7͹;w= 66O7.(;U8[9sX n#u13mǷ[SZ[[Č5~0-ݰXtM#%Lp@`ʽ|s }?EAӢ߷xSt ~]U..eD$IK)s~3@ }Cn#e!XƇE]70-m]=kad^@ q$ %A )$|t}p&_[7U8y^e].jx:0+KrKdaX!P lWr$HlI0m3=6Yͬx)w|e"y`D8S'<&"F: &x\H"خBMb߉)ronmܸ(ۋo2'q>BI˝ vq3kwRgp͖:/177 @M 0f4Iv p*/>, N]YQUmk[cO2idmxmtF.i_pjH$w0XBL }f7{G 9w> kʷ uGkª8eME"9.^%8c_GO, %F,F%Y"/uvj}#_ TGѴPw枹Ա /S֤w?ڌ""/Ep UhP{'dt!qvKA hX~ɚ.q nIoK[6`{Cۉg:9@{@ݘ&n?s퍽ͅ{QZȒEJ)eii cp$`6҆d2&cmf}_y5n̓@r{Q8{s)*[ee5zQٗB 9*׈}8t\?Y 篆L*j~w;8l"1XN~aAX`l#BL ?َ.S!F=HA^UK /x!Nѻ$k >_=ˆm2svIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copysamepanel.png0000644000175000001440000001023612451473236024066 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 2o+IDATX  isqvxvzjsqv.wuz-(((þ:)xt M%N)Qyfv2&%%% vqw'''      qjb qib pib  !!!hfeigf       8g4!^XWZ```CCC''''''锖  sqvD@Fe*--=NHN  RNHN+e|u|}A\IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_transferright.png0000644000175000001440000000227012451473236024107 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<ZIDATxW]lUk&&Ő͟mڂ /J V$jH1  h@H H$j;w;ݙLr{w,SJ~>L>ı2yF5?"c RF^쓴-^ YstA9vOױ5LByoL_  - ckLj$! `" AR>ѱ0zE\<Қ!zg! R;ҷY. XOϬV-v~ X`x<ѫ4)^/i?'Ɣel;{&`.%*Z@[ gi pjg{!9Hb\A a7o ԟTRJ!ob[}atuTo)P3V65|Oom3ss N^BKҒ`NC? TRJcF9g ;1Lンh+=$:F*Ji`ݘņ 3ʻ6@@m?æé%eHDIIDȗ6} GnpىGѷT/rv5Dp-H0(XMoa)q4 NY؂Ļ'qrp4{L(B^gϫE8\'!1XQ'w= yOQZ4yi䯾~Cx=^F=zZA 9E4~vh*wUPϬr#؄'@㾸HWB6Mw-2_6Mhk!rhxse/s"]Rjh1 @Ae6cvA)6Vg/hտ\00#WXdc*Szbnhz'b37*3cnoe|9_T`ph9[у I^i`VK#b[ \bU6Sl$L{$.FNotscIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markunmarkall.png0000644000175000001440000000451512110457565024071 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME @IDATX՗yl\m33'$NP $4J P6!(-[@Dj+D %(kEP"E6P ^ƙcfLPP^鼑s=;߃t[*P}ߔՀr,MYxQv[8~']׻֗nZf?,ewz.nZҽiu߃u覫}G`dqTx?ϑ2Q}GF7]%um:f{* [p[pE+Y0U#ϩzނ?-rljVXܿQ/|d-6x/=09`ٞ#~)IB)+Ř/eFd,O@+nܞ5`@w"8$S>{}?ϖ|2HGE8.ٸ=wkW0r' Dn#|y(f 4m;B*5|5e[s/п4AkoD7; C=n$=Q_DjWZjWbA )$=絆||H&, 00J<T4UpG0A,Qd+0nV, ȏ# o,MaP "ov ``tM`dž"&bx]ܺݕ )<;/>-XG5/loAJUE~ qдXDڽrpsI WQ<3AFb&=G=~t3e"d}9[dU dr_K1@v3ccaL|lKx&ϐ`Nm{ѵAf˄YRyԪB _#U7 EsMAwWBy-mr`\RR lB}N/.t7{(b^+fA| +~a Vre-Ts3~j+]v<0_pNP@@:@1\re݃5U8A(Lj.* 0ȑjdaPRGO+9(,PA(]VvB,Dn.`, t5ɘ2Uu5~\Ht0w#͌EB怣܌x<߉"Pկ(G[KMɞx`gO%V{gwO[!r"TF0\uԟq!;*F/?SZPJlm3DtPk(b&7ɲ6˞LY|QU 8p klAus]똃`v S6|Օ8,cs/k*jN= i"4(f`>dQJ"pqVC8V3gh_)fUt(O?4P CѝYNJ5F$0{Z8i}t(B*# sDA1Gd|rd( BP+*)%v<„%pخf|QBQH nwqI #;f:o%ED@GKQ"$E'H58Ħ3 NO4b )H ŞJ]KK6֣h:BUо2EP5twƺc( 0ڎtǣf-ȷّj+pDuǣK|9tjvSC*BQQTUP5!:r >}1q~QY*8j׋K90穅Zz0{.`_}ѱv  |LNQ>>`M5KT}}IG ֮̓g^  mi wK@]1ϤlY7>$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_exit.png0000644000175000001440000000254612110457565022203 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼWkU{#ͶALM_E B Q(,}_A|I@(Ňkj_TD 4iSLbSj3s;w7"f̽7;lGL_:C~K3r|Gvv~*azE* %$Mp*}kzm޹`Bn@7?edQУAg{ -ܘ2@׌5P*~frٔ(ujE"0bõqwiB+2kBXM dDmtg+M#X+Zn!=97k@+3`K)KQG밢$ Ij~vF||=F&@D7ºJa{I(5@eeh4QgMD$]x7"ʡU@Rr%emGսHxu<ۋ9()T`Ӂ7G*Dt,EBV#r}%u/;9 N"3.9'VHS zWVsncb y5/n"4qyC3:h  ?zc=(mG^6YqOp?xKb T5)p&2d|$x6xbD7IrT}- \& NYXV , XSSPR.MO!3j>a7.D"[сq,lɦR!MCuY0%x8WǺP2xȲqI*Ե8}>u(8ut|_IMi;@ԅ^Wf&&VP:[715-O=".Mm38{}wDk˜JȖIQKyv(byAfȅ6~\cr4#,KVtp zi@گu<xs3!/VfL&(*n֭r簋?Dk p 63Rȷ0M<q.̏&*SXsEDo^&cFrÍh2zKm%#"2c΂ru"rn grŞwm/`o y;^Nd[ɨW](YrIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markmarkall.png0000644000175000001440000000425012110457565023522 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME Y5IDATX՗{T?湻3}PY5T(՚W񑶱jj},jFKlSU6XW6Hcv;ڝݙs{TA՞ܓ{|9P>\2Q{iOnߣM"އW~P躾eaMx#P |[u eUkB櫤{Khevٵ@|EG /er״|[2*ٿ&Tܿ'?>_5Dgpr#q l7P7+Xآпϯ z_7-;n#p5Z5Xl,X(͍a)_/ϓrpk5|Cd}XRv-iscXm @ŌN(vLd$H3كT[?=zy޻*.An0<$2M;w@qJ@WSo7_N[_Bel 1`aF)c'ЃaRn[xlt^,cuԴ<Lǩ@U~ag)KNl[ێ]9컇.lyYME,e?͹'>٥8JgcS8&QjS {nx)|Zg !4\<˞ӑBSϨh[De묦4nr6w?D@w+7{29~jY HdC&pŧ6D=>[j8iL!4Y}R)61\4\H34ϣB_]gF4PU'"#>چm(n6SʎJi{\m lLj?:`z݉1fqmuX֯CxCAw2O{4`+m hl_ҦO+bv]L9 }~&mhNȺV͡@X?&@+7k7:ԙ@@%P$MC 4?F*|S[&fx"no'C6Dgƿoj79IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftequalright.png0000644000175000001440000000262412451473236024250 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<6IDATxWMlE~?vN q#5+MB"U8'Rnp $$@*T h(OQ8 jTSD6"BmBqgޝc'mJRB*/Ϯ}og9z[8OwͲ鳡=18ys,@^ha >Ϋ W#M@k ~v>00k 4軽le!FsJh=Qc ϔ=NZMS ƕԝ 7O G:6Ć@%|W X r]2)[`呉b "887N0Fbf7 swG5Ň'D.&+{$zSc ՁM&`ngTKUW/{ܱ\qQ|ee88Ǚ7s\1)?CH\&xJ\4q A\aaEˎdU" wA=2ù07FxɉO#@=_ QieIqQc vb S ` / Ö qCS͇AxtP}ש'b::yuN3Qh] V9n{pC1n۲,V-MZ>3=/L!Y-rw3{ W/ͬwE0O"*oo\ fbG );*XbF".kdn'XitT`%k֔3<lm\bT,ȼICc= wKI9 `_0:005YIVZ$AiTO-Y'e #\ ,؍_$$wjv+e%-q3 R[) =m<}sLt6.шk;JݙT 3byV.[<\;v¯`iW@ ئWo4 ,'s=H^hBIJsyﵑItL+H0ZtF!إ2VB.fkIgEi@`uf-0T.d\h"|*h6; VCP`r($[l| 'C_qmM\84ihN)klaLׯOIMbCv(-@>R/Ȥ9Ԓٿm˦廟s.Y8#IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_thumbnailsview.png0000644000175000001440000000245612110457565024273 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼW;UcfCvE%(&aMW$$bbQ)RYHaEAZDXQb!>PL*mš Q-I9眙[ܻ{^w9#BȞsL/A!]_. { c-m|KTRsWzN-߄V8&fQg;m!! fcِjzG\(m=MLDxp{Fvl֕[ D0XYY MTVT+Ţkh^8e 1^8oicUL=bTFBeL*kZK/#m:udQp3GAP1;'%n %$5rs^ ΓES~J9FxC9?xФ|5(ZbʃtnntƷs$Hd`ZQz \s;K~Y1&PF:Gyo/bGJE ׾+&rJ <^"vT@|gɸn sրy!,V:g]@2 q?f3 d}v@odS|; π\zKߟD,n;L?&紐.h,};<-0pՐW^ۆdR}b )>P焬K+Mt3'?X5 őj88AIJR3_귨}.=!?zLN~Xb`f=VdB oO P̬^;d؇VXc @w |Iܠ„`Iukb7#7ac0N|d=@S\ҙ̚akthv,=( Gvp—qa[b`&l]ql@J;N Tn͋E5#}F*-}=̟WgB =7][ow}qLe*cr \G̿}akNo v/O {{Jyo ,, j>)IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftthumbview.png0000644000175000001440000001021412467744673024124 0ustar alexxusersPNG  IHDR szz pHYs  tIME 9--C+IDATX  h Bj - 4~JP -P. >M|K K     &&fT++,%"e7Y&8'kڕ&zL`*<G!     (أ(> ? +o- j7 n9̹ )4GƵ $.:K:Eƻ7JKY=O#4$0 fa    #-)5)5Xr@O@Okn I+n4O6IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_configfavoritetabs.png0000644000175000001440000001021412653160641025076 0ustar alexxusersPNG  IHDR szz pHYs  tIME ) +IDATX  ?zL T†V=vO iP; RÊ[ eN: : eM:ª  ^3    ý?C8C33$3333molBIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_renameonly.png0000644000175000001440000000153012451473236023374 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWnP>:iTj@H$<VނѱD@BWPtT5Ms97NbǾnwkTJ* V|nwEdge[yI3l26$=X*0'McVdVd,UUv\Ƹ {aPlpgnl.hV@Y6yXj=^\w " A0%  *4<%J -?[ U0! JKH",8 )*(%          -| u"TD), MNa2R2 FdqJ #$&  =J`ߜ> C  H<Z1  +@]Y|?+d0_7 jo$t"G6V$Mq%  ZF*QqP`M8dFxIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/view-sort-ascending.png0000644000175000001440000000100311323355446024426 0ustar alexxusersPNG  IHDR szzsRGBbKGDC pHYs  tIME:IDATX햱K@SuqYŵKAtV&vХk,]\]NEPsRXLz!9@fOכ=gHE)y"}V3"25,5L xauH"7\HhIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_horizontalfilepanels.png0000644000175000001440000000110412110457565025453 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxjPƿss;CGBpQp\h u }Bs*EZ's2dd\%7K 7bf@.Ers<򵗣~7 epd3j Jxgx{>#X1hpq4ڀjR sͧK(Xn'&г"rئʚ\:Z{O'ԤXڞj mc*28a 7Sȃmeҟ4y`95\<.CQ& 'X7o뮐q d>"Vjoqu ~z՜OBnK pÅ.pC4ܰ~fL0Ɉ6ޖ2Wpqw|,c8՟jm @ٚ0\o?S-ݸidbʽ1b'IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_exchange.png0000644000175000001440000000244612110457565023013 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME iTXtCommentCreated with GIMPd.eIDATXŗklU1;UB ؘ0*"G%b"`$@()0?(5$@yDWȳ-twnt89Q/O Yg[* )ḿu4nAb BHV9S<>bڳX~ ijqWTkyWFYBTFqt%BXƳ&eB{ӊQ,F@Tk҆eccZ蔁iU.Ӫ/ef)~"<!58rLz."e`-6ڈ9 %Հ AlYQZ(iQ=)':hw Rd*&)h1'ߋyt*.&?L}R]ĄKxo~k YIr_A 0jm(N%P.86\] rO$HOE<4V~g[f2ԀkCO*gE/h D%nO1 O@k n{LE6n6U#V:_a3** 5g[!҉EÃcM w,;;I׹IHZpo`ʲF~3Th[YE6@\ -$vǫ%yfֶX[J"K* bbHq9#(u,%]+߻~Њ+Žh%Ao ^~w+X0M_E󱭬ig}@"J(ʵı \8k߉CҝJS.ngӂb dYf$Q8[ۻr-=#L.~6n4Ao"қ7*óp~O e-4-Rߗ-yDgOÏߏe_K=ͩ8w^UK5r8,?>)<f79(Q^@ǼRɝTKb-%*"$m:JzGJ@ߙ$nzO= IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_saveselectiontofile.png0000644000175000001440000000445312110457565025300 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME ;/>IDATXŗyǿ;3;̱3{RvXPDPRBX&5HV-6J&E$mrE`ًeٹvwyǎt]ƤOZ@o?iFkΝOW&>SnZնAQ B xƋw󹁳֓6f nKuz\9Y"0#Y?j 1t&/5J0fKz_UrL/)˛3;_<4.Ve%~#3ԃ#^ZM2%nݒݲx!w (Bj|?UUW ݍ8p݋dRnnV??2C fCswfoP[!9Z@Z_goӤ\X'V-<8t @|ÐMw`;0'bڴJ3 w( 7/\ ؂LхtK5(%gsм f KqhL*ҮW;KW_6qk^!"{U3z`u 9ܫrO%_[ָ$d[rw* @U֚kk^]. d CW1{MG %P0C|SS's~3Uf_$NQj 7!j.58GP[:K9a]AU>H#Zd1Ws` \xt&9tB(@(d?UP5 JR8)*@> [yCQ `.1J&a 7w%0z_Br+ P@\Ĥ*B8 "0mS.Ux`-tW]L|#]u 7@o"KrLG.,S=t(ʗ䦲L6)+!I%lн5ƺ/_jΎkl5{||wBk7aGw~GdF 3 セ]d3F_FKAC (8x SuZ;ZX{,N63@SV>bt%H_ _vUI&PñdRO?ߺlXefg!.vC B cŲq_)z6 [ЪU,dmܞ; {#sÍUH @))l[`W6Pb"8lہșK9 x//(nph7hIםd4@tUx{γ/mWa()}tW)ّRcX=9 oMPix#RE1E'D:|iL|?_Q mE~wZ]=k )33+1B4 ] 8x>&2% G~0q8Mm;;6\ghu[=z;=V3x$G؜F!!(]gun0zJ(MOt4/ēŚ&5Z z 0sV^&(L! 3zQPJ?∄pOms|[fBSTAf2|^!\P$@SVT4F!SGA'3A("U*!1J/ ~?6Z\c,kŠ2ƭW\ pV G0a.--IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_testarchive.png0000644000175000001440000000257412110457565023554 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIMEg  IDATXݗLUe?{νWB*t`I _5 "e9'jLt 0f\%s4p$L30,u$(s\lݹy|9/C ~d/uM,zPCa꛹5/H7Ug8AWI/Oq =%;.כܗDdNW1gC ŸY;e bS)YH'`.HjhD)GBpӷגן|p@4L1L B34V4 t$`E\~ BeL|/V4!aeij$ʗڑvbmgً۰ u!ѥ3 zq5(C#u_4t7?lEHôX_nk.};$| ( ukϿ0ɽ99Pu5D$*)?|,߃ &n`g)[@(ÉФ,&+Z>"g#O k R}jRCZ?{[qsOݻx9~XmEj,0`iyTlP]>JLF^q9ƭ!*@XNwre.f[b20LŲr*r6qG9Z?S+.#S7.`;w_taB,Km}9lLeR C4I*v{,9D;)p;{j*eTv%AIh8_IQf*a Tk ;qv 4\!!1!S 'zH9'nt#^+ٜ5%%lNԅ2~8 nKe0"$X; WxXO[Y,uD}A3fPTC!`ʤ)#w~!YA NlFacF2t[K;!i㮹4hn癴O>Ϛ=y+tǏ&fL8!!Av4lFi;s۠MJg[KX@,Ǔbc)/^L3ڸK!1u{w0 եم~3km/&att,8_.7Ёs ]He`;{fDSRѵu tP{H Q_66y~'$u!qJ:pс"RJ)z@"IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_workwithdirectoryhotlist.png0000644000175000001440000000502612451473236026441 0ustar alexxusersPNG  IHDR szz pHYs  tIME  z IDATXGWyt75dHXLiPd,BZHYDR9mZ9==G(T(h-($ $L2$L207 P_sn|w}w}~$٦E鏺CrsDAO& 8U \nb|niTj27i>^}'oMcf,]ZobhM S$J6r~\Ow' ֏(T;]9O w̢7<:_d3Ia _N;Bϋw;e;C*%Cb~Լzr'2NμW3ϙo46XN2/N!iSҗ0Bೡd޻m? ƣhb|u \;{ œstBQf@Dr?G [%u*|%(zi5nEOi:V]S>.ݼ_€D8RHxWAexq蘊N|6ϖ{jűW,TΤ 1B.JJi@Xw"2(TlD|6ܞt*tz`ٹX!d0DxJn >Ĕrr&&+PO#ш?# DccXnU:i/E@0f]a%K>>F [*UmçkTª=6$E+gxrt. @$Pe lwDdm2 ",JwٺQݗ2&9|$ʣ^ܾ#oڑ*EKZ s2"Apb=l-mt{uE,ʆ >҆x;ڵAY"v\J(p19VOu;UȵA`[C)=)okrg.cǣPo+g?5p$zЧfS]=pd]VĀmD$ JRʓڵg9K9)9/q/vN@Z/®ri$uk'BRg m(֣rȉҍI9Љ8Aڻ'ͅ o+ 3̡!*sP|k*/y5 #QB`xIiZ xM1t("%0`Ոk܇ٰ\EkIRXmuETqbvmڏ  .m6YzI{!`fBYzFҶl7bd*bO$fR~SǎZ)v}V P&%cDj<>kRM+p#jR VJPK[\o kN&4$ OS !ˊU0HŶ)YhqDP-7fMЧACy+Dz ݏ=H#Nsx:^qם_r|yɩ19BЄȣGwӈUƊըyMةi|l(_׏!d&(;Srp5I.J#:\FY$SyMDvBsB2  i΁qh`honhj{T8b=Yg"΢4+ `i;`2%[=Cf3^BNA`/|zR܄)e(xhY)ꔞŮOdHc 38ѺL?:a0(2aV~-Y6^B4*VȀy50a !;[2=2K>LcmU!s0Ϗ TIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftsortbyattr.png0000644000175000001440000001021412467744673024327 0ustar alexxusersPNG  IHDR szz pHYs  tIME / lb+IDATX  f#Eh /ݻ}!Cf(/mD(/!Cf!Cf* 1@+lޒ@+l* 1!Cf;;!Be*!19'Zߔߔ9'Z*!1!CfUU(Or+$22 F2 F+#1"CfVV+Qs).4.4/&1%Ek89 (`(` ,UUҫ` 'Qn֮MVgV "  657  VVVV34"4V3wV1%3V4MYV.(3V4V\~f֯Q 5mvIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_contextmenu.png0000644000175000001440000000256212451473236023602 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼWOUݙ/qⶀh %jI+6> AL47Hϴ (B%6|-E؏;{Yr3;;wwff,4ACM`PGO)A 2|ˏOjKp; ?b7ܓ$T5$^Q3͠nᡇ<״Rs\s@&J#Ѝ YwB(Ș$JϿZ[H"N?xWAփ:AŦHZ3$ (8P&y V```.%T2_Y&t K3/x3? Bii pE{ޘttUr %ox9rM皤A.䐵a[ c)oA^OVP]S{8mx Kb+ pxCy҆!/be8s@bcΠEK 1|GGGrB!IHzX~{981^0mV]^*g7d4HcyqhDȱU{G9?[ ȿmW"^|hni)H4êkW\v".t / &oǬԤxp-խԿ-\$P| CßFwyׅ0=5KWP$h X__ n ByǙNDϵԶ $`dD%Bb}*~T4@ԝs|>,DFkttmwaJuK/ ŋ\.]Yc^v惡Pve9:^j<2r*RRYw8VnUr7n,蠆E8uwosqmQN.U!8 -Źs*5 [LJ.LhllL]]]2u.$:sDՋs:⛎=\ؠeehkk<@gg$&Yj͏<9]'h ]eD"d@ @umL&3AaiʤgS#K"ҵ<9s&g,ԑ9==cqyO-tk&"M2>%U=yoÞܷ2(:N/t = g\NG@T&jO`_?I}!H&sV(iMe#zm |#M%xXo!IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_universalsingledirectsort.png0000644000175000001440000000171012451473236026540 0ustar alexxusersPNG  IHDR szz pHYs  tIME  *35gIDATXGKHa? f EaAA y7 빬MEAPQ"++CuY0%y{kka̝7w.s 193f!t>hTL6%PfvlJ2` *ca F@j9eXj8zsjA0.]EC{!\Ó꺳=0tS5*@ȕ璉ƎYӰ6WP1NRϽ9JI@Ri)Ks+(,g\%A=Π~jF5} VzPStr>Ut5x _4Q,Ԃ@Q`!hk0X µ@+\njpU, pa~_ 7"E0c] U8 fujQm_ZS>;ڈ~X.,o.se{S5vA7[ qgKSysm([gȟU{OsnHC}c||t݀TF!~;LFJe$dcŜR>AKTV1!Xd::mR%IcQ*tA JgCYVoF]9=<X ?,)Zml䖥V6r̰~]K$"gДwC R#2)շwD- ;QM7^c^n._$ Eے5tA7L/ W/nFKSsSauD}GB ߒwX="4;Y`e9#1[[EKם^|GfqqR$G[LZEZy-W yoZk̢)4qR9=P  G23a#mrťL(\4l ` {?-@KCF(IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_dirhistory.png0000644000175000001440000000332412451473236023426 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME VaIDATXGVklUff}l)',tum9/ C%:Awh% 3N%1 ސT$w\|U0EB#b@4g%#+ӀR-ȳˏsnHfW5%AaK:w8'RU7>80ͭ,P5XWdyL՝!PRN?}} I$qC: d1Dܭt=^n6Xba$m`9)Iȝ7U. ⴸ9>iPx=QM%P5)1Ȣ o|06_ȴOJX҅8H+b2TZ3 lBǤ Tx<"*r,M&[^Evv6XtM#%Lp@`ʽ|s }?EAӢ߷xSt ~]U..eD$IK)s~3@ }Cn#e!XƇE]70-m]=kad^@ q$ %A )$|t}p&_[7U8y^e].jx:0+KrKdaX!P lWr$HlI0m3=6Yͬx)w|e"y`D8S'<&"F: &x\H"خBMb߉)ronmܸ(ۋo2'q>BI˝ vq3kwRgp͖:/177 @M 0f4Iv p*/>, N]YQUmk[cO2idmxmtF.i_pjH$w0XBL }f7{G 9w> kʷ uGkª8eME"9.^%8c_GO, %F,F%Y"/uvj}#_ TGѴPw枹Ա /S֤w?ڌ""/Ep UhP{'dt!qvKA hX~ɚ.q nIoK[6`{Cۉg:9@{@ݘ&n?s퍽ͅ{QZȒEJ)eii cp$`6҆d2&cmf}_y5n̓@r{Q8{s)*[ee5zQٗB 9*׈}8t\?Y 篆L*j~w;8l"1XN~aAX`l#BL ?َ.S!F=HA^UK /x!Nѻ$k >_=ˆm2svIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightthumbview.png0000644000175000001440000001021412467744673024307 0ustar alexxusersPNG  IHDR szz pHYs  tIME -+e:+IDATX  K2 < KL6-n-X-"    >>  X">9#!5 \@M?' I-9ڜ-#d*   +Dd+D%&H4K6@!B"˻5EVv#-˺`r\z-5%/:V  zffP    ;K;K OYuYu'0'0 5fP KHq+0o8LjIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightsortbyattr.png0000644000175000001440000001021412467744673024512 0ustar alexxusersPNG  IHDR szz pHYs  tIME ,-+IDATX  fFOxTC: QU({Ufwu$C:!QkHHkH:!QC##C;"Q`@LL`@;"QC33G=%SS6viiS6v=%QE43K@&L1WL1WB*QI!" zD/D/zI 33r2BvI4S|4 7!4# 33>84#'3 V4VOgO4&0V4VIP5d3)-DCV 4V%#3+fccő; f';tIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftcolumnsview.png0000644000175000001440000001021412467744673024465 0ustar alexxusersPNG  IHDR szz pHYs  tIME *JV+IDATX  fh Bj - 4~JP -P. >M|K K     &&fT++, }}nmjhgjihIHG\]9oomlljxynmjhgjihOOM  !_`?vussrp uunmjhgjihWVSsIP-bb {L ppnmjhgjih]\[sIP-dd {LlmnmjhgjihdcakGHff{Ljhgjihkigff |LknI+<'IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_clearlogwindow.png0000644000175000001440000000425012451473236024245 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 9%^5IDATXGWilT6/6M!@"H #4mBERHUUT*** "1Q4@@l0Ͼ73ec豎{w;=@:o6ʤkИb8A#!_h/-w]o@z? X_cdõˇͱ#yhsH"Ж=?f}ME?a|,0x7txj50Kn &I3P\KG.cZGE?quEc ld}UV:Z0D$$IOas0L8y -Y֋ND<\anlm 1{C@"KOE GJ_PP`&eӉKǑWd;dTmQz;? IH2H 3a@":pĈ(FVS.YVn|ӳV]= $HDhs{Z$>IM{0㮔 ˁvc,.LX!|[Bn!9#(f'bX|;ˀ,gD:OLF۔l,׬=/ qcckK)ɻD^F(wAZfƑIy n[zU>\I_Y,9FKE0r0!Hx@- p@vtod޺\)Œ X #Xi5P[Em/::!'90eaYy# ; *,4R+6e|T%#hs\y{߶[ѻTӄg[O2YDnvhaNCAY9؉;.nGvnֿ,_N)&Hd*\Ɇ"cg7#ٿF($RNmaOr&7ɴ4Z%Vo `MY#%~Lq tPZXW`9Q4eBJ.&3E-dE럴=\$䠍'GԹ >Ʀ1XB~ܓ|>끐cC腵HRy#N1Jsh1"Bn~KMo^Hh\ǞdEH&3y#,}~e$-jOGʟ,.FQ>r~I@YE98 3N zC86~ oy *u M*^']%iA٘K69!I S&lL:\@ ܼ9f;C1'ߋ]Z֞ vS'n7r'xG}c48y]|Gs`~4Q33#e0TpfUa%MHSܤRLb@kYXdd:>#N ==IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markminus.png0000644000175000001440000000462612110457565023241 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 6,S #IDATXŗyUǿ[fa 3XpAD"R%m)ѴTJ֦(.HlݬZH+5 Vсfͼyr}w;LMlHz;|9;y3-|z({$PSW+[毹'}&8>~ͤN B\ē ].}h^B}S]`^Eb8n_{#/b偋lRI-{—ݲf]p(d_53[)։npdB5V7\W~w.;p Z‚TpQ' $vլWk1 ::A5 pE{4_Q'˰^Dp6![\3L0ϭݔg4c (O1PS& O3Ӱ%p WL- `ٟm;?4δ`X=cE-YHTl0Ff;4rzg-jǫ쟇jTxr@r‚zz Tzۀ+M 7q*HCE|g(\5&_'8<U  8(1_=ӐND02B(P H> Wȼn@ep+ m%b&($zσ3xpLPR޷afy :eJA(NA&z|Rzz4 neT4K&+ ]umDF1qp?3mH{-y$HEQT yl"3퀵P{6wfD'U{>Pτ~to+?Yljg@B.cr%d_'MJWi%Tv`R ,O @5-31xd֎/r<&2w|8T~R΀p*!-چs}?>|=:v3T jFGCe.sB8!.mWo8}mG~OҖɞuW^HQLaCn9=xpDwBf/8ax& #QDɁglR,2A}տ64\n N0#i}ő*5O$13b"W^u˫jTAm 4@m T5;6~aͲ'7tOjb.n ˕^غ`zw ئȒ'gnn±ZpC?5dV'p%H@a}/g'>K 7,Nc)Е>k6 #I+9w0:cUu0T_ @'mk6HuݥkF~Hb6,iovR[@@N@̓pr4,T( XCs7z$ʤ˟9^_D_%,Ng@t,QVE1dzTTvUS@8_?J$EARL7J-;5å,v2*WF JPA(Nb8::>#S0XK !AD{^H PTQ`84}k$8#+P]ٶj٥U[\bИHKks,Qn^ %!(R=.ͫDD!($/Mԃx/ #BL3]SU}U5cEQ$S,8wwܟ~[vEc:x,K(r)|+z ɠxAǶ)0/Bi;rmjV\S1\?qe'}3Q5]IB~},hwI/<ҙ49c>)*$PlqzU,39}$ .ŸB٧)*[`pp,f)qPBTg5jχ:דBpݭ_M˛ѺC21T ēI)yH\N;*J9m@Hd}$ĄOr?x0@Zzv848@US>J.I8S9]]#`||B=}}'JEM³9wDJT[L؎|*942((e mfT"5I,BrBw樲MFo\OQW loPg_Up(pt`F|hIJs+2ceb4!V(3A)MA3BNaS׺ t[RGM--ʀ .?&L( OEA,ŅQH;@ xPQ) ht- ,Qm \tM2A*,H GQW0quvB#igxOrPk-zχ }"R ~J1A~~}=e,f^QoT)pmŕ>DI2nEdDL=UDTSS@l.6 uV.w D'0$ cѐSHM"pIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_quicksearch.png0000644000175000001440000000444012451473236023530 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<"iTXtXML:com.adobe.xmp vIDATxڼWklU٥ a%5((GIe_*BKL|5 A?b)<^}v[tC3{=~;e%~Dd0- :N<:wJ7ʦWڹ?n!an޾1.|V_Nz"?kN9d>o%Ylki ԯweۄ=G.l %&2IX:8&Ҏc>y[z]C T{tm%Zu֦“:pќըBmt)W fa#SL`Ee? 8'Z:$hE|{7IktRpr<" MR7 bKSx5ML{D0-U<[ $o8t MFB+=0-zN Q(qnc\L<4kLD$ $T*ȣk8qql运Fzc)]`L"d=Zf"5QIh`i\;6+_vք H6*I 9?׍a|2lOeLWǗ86/l\N QXto?I\&c9]diG ͘GVF29n%SeVj."UiS }65'0.xV`ﶵFg_cֵzNvDל_G aW%A3Lf37g~ЩA#T 30qO`sQ _#:VN;@:lGf$\$󥬗|)"e ȕg<_ W?Va'ޡ%8Kfy>u/9}q*4l{H_ϩmoM0lmۥ$$ [Z %-.(1BNM+ቕhIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_settaboptionpathresets.png0000644000175000001440000000332112110457565026040 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME^IDATX}pTswl$ D1H`A#Vvp1Sf[Ni(5 8chRJ "`[CiB@ Mv~q7]ʌu;ss?}>+R|Ɨ}+2~ XwR7pU" 3<2nARND!7JNne>.orzW ؁  xi$w k FkWDپ _ Q맥R4ߋ ('.H#cd q=bw86s1ǐacOj:ޯQ3s2hK}eMI (%0 im]|v۲DG[ L˽|\kWN L )h s] Ý~ݠOo3:z':}6. rɂrggC:aYN0$`fؽTIB@9Ri=E5n"#,n*$80@7H֡xѳhG?^SH!tBhwKkӴq,'vcFlVigϼ ƺQ#df_g/:k z?ʟ[aOm+@Pg<߹]z82[ؑ0mś8t?#}Lُ¾^>M;<`5U=,VH˶҈. |fdʓl3L%XͫP-8r 4 2fMg# iG! DFz]hi=PmE 4eB]RwW\֤7x8hh4/#S&,b_Zwb9[L[Mӑd}Yl[&8 W7-VP(e k6^{6"˂ǗcTז>V a 'ywc]Ď'勛׹`ą{Ag'R-BO]IԐ!+U`ŚR ;(-ZVlh}m iӮ0)ZkOnvԡ Tq6}Zܳ;9T\V .R?b|J_j'IKןgqtizLiX˅ ƕs1-P@~_t|5 |.פU>{8 ĂD8:x$j`"!^WXwK {/hUwBIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_exitfromtray.png0000644000175000001440000000254612110457565023767 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڼWkU{#ͶALM_E B Q(,}_A|I@(Ňkj_TD 4iSLbSj3s;w7"f̽7;lGL_:C~K3r|Gvv~*azE* %$Mp*}kzm޹`Bn@7?edQУAg{ -ܘ2@׌5P*~frٔ(ujE"0bõqwiB+2kBXM dDmtg+M#X+Zn!=97k@+3`K)KQG밢$ Ij~vF||=F&@D7ºJa{I(5@eeh4QgMD$]x7"ʡU@Rr%emGսHxu<ۋ9()T`Ӂ7G*Dt,EBV#r}%u/;9 N"3.9'VHS zWVsncb y5/n"4qyC3:h  ?zc=(mG^6YqOp?xKb T5)p&2d|$x6xbD7IrT}- \& NYXV , XSSPR.MO!3j>a7.D"[сq,lɦR!MCuY0%x8WǺP2xȲqI*Ե8}>u(8ut|_IMi;@ԅ^Wf&&VP:[715-O=".Mm38{}wDk˜JȖIQKyv(byAfȅ6~\cr4#,KVtp zi@گu<xs3!/VfL&(*n֭r簋?Dk p 63Rȷ0M<q.̏&*SXsEDo^&cFrÍh2zKm%#"2c΂ru"rn grŞwm/`o y;^Nd[ɨW](YrIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_closetab.png0000644000175000001440000000221212110457565023014 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<,IDATxWklSe~n^fBt(Ÿ$&$ß !hA LDe~(D͠[.Y/zz._5&9}{g6rX` W;>TUQ~hZ$}Gh6Gж kQSP8VVzkC1=omj8c"8:6bPw`O7B㏑ظ…-x4Elen?GAWB.kc zF[sCEӑ@}dpIPr6$D落 lI^1r(~Zl"LYEy~>vI[ =qٕ5), \@~2CUqG'7gZ9Cَۛq(M iCQQx஗DK!`ZIΆu7 Ī]4aczGv}UxдN8*bSƜΒd8c՞gQ&|Ur:gx$Vag&x{sf1b~oo]]7`d<7:ڋmH| sx<#m()Fn QT?ކ@b$ iÆ=t3QCٚzZdI&sj"s>x}ulRb'v6l  RXwkijzW8O1M l ͛a]S=2lQ-`>Ch ](K=%c"S`Gz/]F=죽عvCU*)(tRP-};h3!$ZK^X* +1üp8R"`݇[/;3G$QQP&|wb1̅CήũTgd2o=$tQ{eIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_targetequalsource.png0000644000175000001440000000162012110457565024761 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME'IDATXŗOhW%EHJ7X n4.,\HM7]IlCBR馛Bn B Y.f%"0=.My&is63;={]&:af`@T!0Ċ-,<9;kJg{6>fa*W~|0T|d#c@-2ΎQ+)ӋaoLEdAPJJA5%Od#z8L(@{6j]c+jݷp85RHjNeL:b$O>bD9iJVvM^:L^'KJ@u81}ָT Ppp9>4 x 8H]JIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_sortbyext.png0000644000175000001440000000136012467744673023304 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME :j|}IDATXŗKTQ?羙EA("\$DD!.pB"p)EDJp% B-Y( A0 y?m8=ufp>!5g0W  iAY]Lc\t 3 X->Y]5SoΘY34qpV0_a=|Y6Z2_37?ǥA~z(P PP1ǍAJBK"g^=ϩ>>,k\%NE&,o?gjز1#@wG9Kǀ?dfN동q1@%k =@X b{gX @_^F`ٷ/_\BZ vhrGfڑ@{Ǿy 791PCh 4pSvۚR5=`Z466)Yxua*=ŕwދH M 0?>*Uqc/<<,,ꍈ˘z7CC=Wor*^(;HVCT ֨0@6f͒^R]Cuf>l}Y|gmA{3eH3,4dj@S wHcppa}!L_~ ,Epg mOags5*-PA4xEOC8lǠW&e2ݫ`n{ <ʇw։ab)aV M#Õfj..4Q(7* PپO@I0H0PRrmDq`ZdSuהP=Fg%c@rJ(dئD3}$! }T1 8XsIdx`_(3Exsv9 mFŚ(hAGy$\˞J&gAէBkta1"T<6I(Qh8B 87#D28P! 0$HqrFH;ueףG^c}T&xg,KIҖv1Q T0i\U29HW>r&*n| IWUp ,o7P kF䒕Ǟg|gt8eҲF{ޡ-cI*eM|oV[@0|zzI2()WMyɮހzXF~e^Dd b9!"T,]L|$BH 3`Hug:6:*!3"igq*'P*D:5XK0a`qjP4AC5йn.R"$ ʂ؛h ;M eߏiz!јcA[JhjCt]cFğ ͠I:)7mc;NkpS]#dSՈ)Y,'A"w\K`RV'HN亍LO/”vIu>Eߩ[)|'LSȧ1l% DcId6jd:52Y=#d1d7+|{33 4sok#hIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftopendrives.png0000644000175000001440000001021412467744673024270 0ustar alexxusersPNG  IHDR szz pHYs  tIME  R+IDATX  h Bj -2~KP -o@,#ff-GK J ;d" &/4&.5¹8 ,s Lg;)A/~KPxF/%ff.GK J.";d"      ¸ ¸² , (3#ι:β: |~KPxE/%ff-GK J.";d"  *(''`a * (m{ 4D~')*]]]ry()+\^]z # =^  !Υ  Rz ]!X4X4X4 =^9޵sBBx~4?LcZ _njoy B,?XQhq#a f~ï`Xtb8e!s:w=p>MBxpm!yEf&çrdVs\06:TY,MrG8phRc OJx˄'=X鹣jS;[c(TRI=S F/_a _Ciޯ4-{4 nRz{Teutv WU_2p #oȇ7H3keh aI QWR/*fֱRBPZP8 ~ͬE~co6 s Os&nM0qONNvHW_~q=~cBy 4<אY___߷ l B۷Oe($h>eXM ڪ:'@ۆz3=$If K{YoC5+1%t`G#Qv GG }kYo› jtӴ8hq]j z?|tdz+[@IZް2J5HvڣQڭ,7}in3Wz 9(雎fdѾ4 $|)IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_changedirtoparent.png0000644000175000001440000000243112451473236024725 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 42IDATXGWkU>fhKR!XETԇoCPw|ZHEEɃFiЦ-nM4ٝ;33l:Cܝs9;?o18m+^oDQZB}; rC~Ɵ{C!{p~ (u j=elo6"[Cũ'u_"GQG`mMJ^I=>ɂ(}E+`p,V~1!{y4o4oiJR+ + "kS:xm/?9"΃I !I(Q39.TrUY;? gGK6QHyuuRiMR0~K>R$  acw%S\`3V^ ):ÎKg]7BPQx9{F:~J"@(jXH,$K\i#AdbrCa6 P@m(H_Wܼ%cϿ3a? !BK_0{$0[Y C^\O}B듲0r}-O>~#[x"g @d=xL.Č &'_@tXJ.9Ó v`k@ ;`aSd d]&%XNJ-IGe {@ :"@=OErߔklHѣ3O:_ȯ %~9.b\ Eػ uxn2āU.},eDf;,[+u`V6_WGdafFimaza7dbeEZپ 9j!9MN0TMʹǾc ,/Iy\x8.Дwb bLn3o/;6q"ED H bT$,޼"(xl)۶pB pv '(b\ a(`5f0Ʋ=,:e޾B^.јvpQ]N]847+ kT> kT> 8 K               vhX7oy I#NHBH@3:uigI/>':p7ˊRok|⦋`` PL4M!q#NRLޒvT&Y8<wAZ2* ׌i70i9o+@U%Bqx|(oP=^tAچ4٪cU MPɀ!j?ԖZtPh"YKijyXf㭉gkxֺ\γj갌﫜-|sѽK2%\" |O oښj"KL͡WC?|@BF^ڂyT/^Ocb2ʛz߇^=+ho/Zf9 :HJ(Ca\#8,%@ğrd70T@Ų ֎5TB( ^O*nEG(Eu7#!3\YePJ]C6fCm:`7 #@@B8Bs͆@) V#"Ob 'D .#ȏ yP:/UX`YĠ[ڕ0  Ѭf&3y+eL/GBnͣ9Tk]UNMw$fEQB=y12I3^gÃFgz+e6b#fsr ŞU>UhI?_֖bgu(i۲'5V xwa,_pH׿iʤGgHRE(3ҩUՃg2zZy;OQhM@Hq >ޯSVeu ONF,L+\7tO/.qTizUQ/nH6lKlLC8eXP @0: s]EOgE`D2N=@ku\0Jr׼r^% tȟ&iv`u`zr݉eJGRl!*F!]CپYS+X~Ti,M@yW~=04-<ޜ^6__YNl68SZ{_ObRh A Og8o l /՞@Ā7 ̊" Do}dzZ<<ƊK׉Ty0 pZP1p>`waDr g/B&"l vK  `@PtL0TE/B0RS: 7~?oOmIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/view-sort-descending.png0000644000175000001440000000077511323355446024615 0ustar alexxusersPNG  IHDR szzsRGBbKGDC pHYs  tIME .}IDATX/O@Ɵn A 3jg`gBzffЯ@&fCz/r-w׎>k7VdrPϜM>!p,7ί7Ϸc]" : 1y9^&#c%P R"x_l=WT@dLθs }s. HOA $~!%u? D4fN4TNt I`F9  ) H$`!X>0[xw;o<ΎY8Xr{yiZE&Y  XlǍm_s1Vt'0OIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_showmainmenu.png0000644000175000001440000000114312451473236023735 0ustar alexxusersPNG  IHDR sgAMA a cHRMz&u0`:pQ<bKGD̿YIDATHԱkA]j0 "h,XB+`'؈YC7cqIy_3|7{ ɐ0~!A2dǪ5hgOsin ~\rM.\HH5͌ [,B6Z$C6(ù[DB 碩'*w}0w2Rn(=W#^ۅvMU*.(tը:nˆ#mZ``QὡLYQ4uE5х+DZOEβf}l,H'u3y#]7D +ra1!qg%tEXtdate:create2014-03-13T04:43:43+02:00K,%tEXtdate:modify2011-01-08T17:30:16+02:00tEXtSoftwareAdobe ImageReadyqe<IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_openarchive.png0000644000175000001440000000424512451473236023534 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<GIDATxڜWil\W6؞8;nӤDPABcԖJ@lVJHmCRZLjhI7gyy\ǎ]tͻ~;=-v E[sCʂ1[O>?z?ૻ]chz\& ?“_߾w$1 S+#?dvht޽v9dbi9"|!Wφ:6qcZٺ{vѳB6JF/ "44?ғm1C}ilu64|B+)t!Y]8kt qkZ%3PY (B `# a|5c:':6zġɞ]<9D."CfATXlpx; =`s3aff!ܰj H 8#̧Gi B8EU |+^>y"٣cɄ?7%^tӱK97L ?t|ƶRuhjDˌa>u-BT9ѷ(ӏPaJMvuoַ wC7l F*xsDoV(A˺Y`)huױ5pz(LQGl_x_yoS4)^<9ڎ5 Ճt ضhNJ`4U1IR/|4hD (~6þE^Tm@ J~lD4:hIaD]Ɨ.[=u"=8Rd+PK-k̴Qh_::㜬?C)=ݺliX BSlWmZ8;ԔH _3bLd2q`u!ch8 {2fg;4TƝe+O+9v\BV\`p(=}8m7h"PXګtXU$ z/h'*hr0馻bHr"OQhd* d6ZC7=8|=7k 5#4ۇݶIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_runterm.png0000644000175000001440000000272012451473236022721 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX]E?3sv/KقH*mIȊZ5jW`b|a !"?^@ ?\kBD(Bn-l*w3gf_s=wƔ_=s3y3sOvF&JFDO^B}iqם |ͺ߼uڑU$|"^CQklKя^epxhX{,IF.Zv|s??ܘxK.9:o@tBkcL/3\a=AXhnHT$ZLLI@ /mO"BWz?v.|=Fk @n!R(?F5l4yXh q"1whm/Zq.ID:H Lq1"Y(욃>`9Kz& $f`+ ̤WU+q$bL@ i`)`XvR=f/8h4kU:KԗN1͛0hdfXBLiԫTiz>U1g-sxv0d |[oa6[/235E>ѐ6+1}ɥ9RE(j ZZ\} @DPIĘsāMח8,3CV_B00OsEG1`9WL6i!M= K81^_m;3k5 ;װyQJt,JkDDxDDeer~,} ^Uk-N1 O _z!c7lcbE#14t%ʻ}lp+HĹ 1`M y&܋{S1]W~%,@X6۴'~]1_+ثP|lYg-^X0Z#6WvHcAkݓֲHҮ Eh!HjWmW[sՆN?`=AJv DRPZ{~ wB_ĝy=_gNr4#ۯd &FYi=|0~ULM.5^K9$IZkyUɴ6]ļ44$IrO9,*'9}>9Ɖȷ;0L6ao||[u^]ے&7m.ЍXjt;Ry6BM!; v9҇p986 n9 Ρ8 !EWӉ@l`8-٨Y240| DžKKjx$՞ uu,̙tV*f P:߃r̝qe4U1H1ڳ<޶pYe:V"Wn?fŹ09Xg[Y4MMX ܵs 56"9f79BzW.c1|N\'5%آĞ(`qccUaַ ߍ3BʹO߸p*kZ('Y/ؚQHLF\ٙDm\i` I'hS7I@ 8Dr*q W!Qr FHẀҡ^XG"ol? ,xL)er#xÊhRBDsM˷EsIkFE|kVKP|`)U׷MW@>FxHU;\,ZLJ|݇:e,\q}@HpPuB`lŴ" Y4,5h!Ś:sHg>+$Yk!ݻ81@6(g/|F E4ճ3(E_F.Zoһ͖/N6(]M8Mxs0ŔfƃԪclL\`חhK_H<|7]dsNfVܿi%)HFX$/YNq5 Tdի3K?>#%%onk.CBAyynmB@@/.01/.01 onk.CBAyynmEED66676667   !onk.CBAyynmJIG/.01/.01 onk.CBAyynmNLLCCCECCCE((() onk.CBAyynmRQPOfP/.01/.01 onk.CBAyynmuKt {Kff +5fPKHq+0 I3fIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightsortbysize.png0000644000175000001440000001021412467744673024512 0ustar alexxusersPNG  IHDR szz pHYs  tIME -3k+IDATX  fFOxTC: QU({Uf%:# -DC:!QkGl<+L{Uf `/ ~C;"Q`@LL`@;"QCr/G;#6R5vzE.v)1-޽{6 Kb- MK>%I.W<'W)/5ܽ( b=12M zD/D/zI {r2BvIaO4  ..(D0&::+a U Pj|9+?`] ,(!9??X1t| #lu x5/ ]*88]w7'  =:!hő; fR"IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_setalltabsoptiondirsinnewtab.png0000644000175000001440000001023612653160641027224 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME'fs+IDATX  ?zL T†V=vO iP; iP; iP; RÊ[ @kT> kT> kT> 8 K              f'.3 }Gp  /"E2  +/9 *.8 `H.ֳ)N95 ֳ.3:,29|?tK'% |l.Y/%E<7h.ۻ'     1IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copyfullnamestoclip.png0000644000175000001440000001021412451473236025316 0ustar alexxusersPNG  IHDR szz pHYs  tIME  @+IDATX  KZZ[Q KRRRL xEK9x# Lj`P KQ\lR]oK (ڲ=&N{,,[ipbd۲kMh` ;65noRk_]]ƀ<,4A,SuNl^ʌ=)8=(+(L r] A);Hjh\ͅ?':7%vVoB[]GoCjlZfYɖk  3U ƪɜsnnĕg7/*@a{ƪSָl?  MrI$)87 ҩYSbykZ2  -FusF)-iJ1 ɴu  -z lh@m;  2EIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markplus.png0000644000175000001440000000467312110457565023073 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 7%O, HIDATXŗ{pT?}?Ivy$ +PhejkKөbѱSԪj_cLvj@+ EDQbf_>WHpAL3{~g;sp3Y\fkN^mUDڋ95*eA2ѻbh dLCZCLYfw-_ JvS 9yƂZ >}geS<ז]q'S|m?.:wMfgfUd W,mQ{>و9Pwp7H \9d龪nx9ˠQh~kIh@:!/x2)䲌H_J~,hYRa- kWT*sU`L:.v =ϣ\6oxFׁ̝[[E6 FBN1_w?ºyjFIetWģ)]W@tGq;X;:|u߾a*}kJnsU^Jmnj}@Đ!6Q]kfHu(b]k,TzG ^tΓ?іmJP5d@ *]$OtMPvntn!{) _DLFP5ed)2lkEAB!2B5)^GY$,Zݠ!IB.((BгFzu&t:`r "" fX Z0QDw5 5JDD $SuQ@>jg $ a"M'P4`F[d!r6xDžnAE0 D͠ǧhg``Q9!yYr鼢=˲jd=.KE&jk?C\s `Divm&沚Vj$%)J M0犀ڛ2PRD{'vhy^3:T_"ze[1WY5XMU>XShoU؀9aS& duÌ_Nm9!$:zxuog:VϪT8GyǦ,yb,0v;&t*KLɰoEyuŋM#8PœSgϲa8Itw2r? 0S#|d750Nb芾.Ӷ\KX&>4NUSrS셈F$X#@Nbcc~Dž,o̮X@$H M $s((jwPnwEG>=ވfer4:E^RU%4CUǨpϠ-;Hob'_a(OӴ'J2r0\ϣlT )g+wv`n+LSL?8;᧔3/=ඃ;m\qxd/3aw oU}tƶџ܉ɜev|z,z:BN\-,3L/)蠷kkNH _bki̬]R=3(g*t% pf&~AiwMf$fq%U  R~IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_sortbyname.png0000644000175000001440000000155212467744673023427 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME %bq]IDATXŗ_HA?{wՃ?^"$"ɐ@„,: A"!@A!T ͇B)A2,S,Nnoo5o/ }7 YcR%JJg^B϶1=V^@ fsd*QX t |!s']X 4y/'.n@2Y)jz>,vog1ciO}ӈ %Ԗwsik0NfB-Ta"'!L:R`9zS@)NuЀ$fW~6`䱡bُ4y X6ZS1uvX,L9TkdcU@40@Fyu#@ ,Rf͛ޛKPj$q0yW/qYaЄ(<Eunj 瀁ۉ>6!@̓`w8ĀЃؖp]x5V/- ')\n!8_BVBc5Ex~s1a A(n֍ģ'PG '^L?~˲ !EoGEx698x"е, ǟ.)xbK/9PnW!3| > Mú^&7wÞj fF*UySE2p w"'fK,r'$~bYhZc8C^w4l^Go"ʳD[Ѹt6z9CCN,L1uMǀ\ 4t%_FJ(45 gYKbq8 FJsk)W2B.5H,wZpvM`XoQ"k3p'[p}p(x-#@[>>aZ-mAO'uIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_viewhistory.png0000644000175000001440000000227312451473236023624 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<]IDATxWMhU̝y%y 1J@h.\rn n ҢE (]XZ(&jmb5{&}ET%/:?C?9lɀ@:X ^@yBJqCǁGO|rpkW$<~Ȼ}4T)eF7՚v}~Ϫ9w:ݽ( baXpVfM OcS(M৫b7)" \FgVq>NjEC/ ub[oUPL@B]w=Fnpk8ʅ`mTט18o~dםNϷ\7 ~ZXЫy&_7vqq/Wpak#b[b,Pkar:50~c^ BIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_delete.png0000644000175000001440000000246712451473236022477 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڬWklUv-mVABR%`*bDS H h!1BVM!!Ll1ĶZˣЖ햾wwfɳӔnn]v(Nف;qtœjSW@|(L*K+:&*. r]NhsǞt HL9DE"y/eљE =>V<1lp4l,ʭ=}}.rH99A&Yc5%`DE1&1úO$EN8|ДTCM< pZ{st }#SqX1-_3oZKneY02JD$fE )C4@;sX0<$l k "Mj<9r&`nmm:Z3 (V?\Қ}1'2RN5Go*Fuycjr/]DTOkKȖ$99H$ʯ߇?v]#-^}_~e#ؖ.A+#ٵ?eED䨙`fሸ[tҲ a)Mu\Dםh s6}Xcw-YQ>imĉAtJp$#" 6ZInͪǟ ,߳\6 ̺l ~Mo/Wv*,0?F$d>J@FII$ch*VS1 !l<2;M/zӣ&e&IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_cmdlineprev.png0000644000175000001440000000306412451473236023537 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME 0#IDATXGWkhWfg'3p7/cI;FIkE**ZmJ-}ZVALkK`Ka!PZkHbK0b-HFM6Q7l}̻>$M?=ps|9s$ 4 M<8^L1i~D.@z bY lyIhNzBK7F b~MwsX݃{Z{'Z\ "1)*bZ vBGMsnQC0,j aUϫ()C:տSDRb5]#\Bk-(ȌD { )i3v|"|6 >S34qK!g a E?2*fg", &8:.Eh2z\ Ơ rlnhG-%䄀-*Sy J7(0@ ZRR4R>YS9 ά, !pMwHq~w3he$dR0aXU]nAKynd"xFޛP9 AEr,ǪgKiyٓ%|>tawm+ ;G1թbٰ8.\C\&U Y"ʊ",b5";+ BI&7YLZyeeeHi^7Rc4>7n7D#I9 F4|pn?蔉QOgw6O$vivLs' /EoEc{"}ڢ7X4 g;I*ؼm?m3 G,hsQ͝.A!Vu&o+8D.IKL9iS,v @1)Hki)ډ`I [H֭[>D$zvIPX7t*DaBOڏ1'qI"܄qzNZߣIr,Ęω$6X>O7Xol~"|EQ7F5S9bF'چn;ū)ejGx$Mw7q/HD"F 3ƪ[G KB3IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_newtab.png0000644000175000001440000000216412110457565022506 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWkhUf繻6oSLڂQACX4CP(?jEB1j(DUִ>HiUB)M7Itl=ܙ6ƅ s=={3 rpLBtt5AV/V.ƿ`$p<-ێXo6%߷mj@U¬x}Q[-^6 a;];q]pow̉NPO;E"Lv݀p_pɰp*g^n0pїZ 0cSI'!uS?(+α+̜F'mg?=۳m*Kkv'J]h\hbjs xx5ZW3v Rݏ<6Cxdqڼ6tZJs\?O10V7B06 r)9K0e.W/+'# 63F]\)aiC+Nef{Jge55z蓑%Y2TdR'w{Kkė؏x= w͸'c@p0:EPEĚy!yshk%R)~⠥h{f7,dNJe۱>'&wR W *dL% T C6A畫VfYŠ;hɤLgG[XV>ێβeh[iG, D>T iOƑIp?JF$jz?mf[g$7hcg>n؎XX XLXhz e[ $~/DIۭ$_D(! DXdJ?=ۙgL1sodJBR -شWLB3IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_prevtab.png0000644000175000001440000000201112110457565022660 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME% IDATXMh\U}f&1 EQ6h)~ʹThmh҅ X(.Ah7Et D ֆ4Q "0Rkdq1/Mg,́=yWkiklj)PxǓ >;!V%J)b?IesR7[y)_(+Oosrm<I޸̅ Xe}t^B!U@knnH.CD%xi_! 'Жr2$ SV4DN >=ײ1c]1YAr%h,>?gl&ډ1Y83_c @ #\p=HۍxpՁ vZ12pjb {N;*P{#[*¹5&H!DLߜaOr #h"V{?LC[R Awa2 T*6?_5`,ko~= suHy_ R|,UxU>L䪪E\ l {w5/r5%Izd.wmC͕^ 1R.2001#iHgȍaPq'![ )exg&|!*7Hbqmdl/Xk/_be\hJ!&zG#Z[y Y`"R0׈ ?Q]{S.w$J07qJf{j*foDvѮ%'J鑋|iHpjG)g>ST+@Ms VʋMq"Wxn ]s];IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightcolumnsview.png0000644000175000001440000001021412467744673024650 0ustar alexxusersPNG  IHDR szz pHYs  tIME "&ώ+IDATX  fK2 < KL6-n-X-"    >>#%%6?>>??? ,+*/.01 BCBAA@6?>>??? 0/.6667GFEEDC6?>>??? 532<<>??? 876CCCENMMMLK 6?>>??? <;:BfPzKff6?>>??? fGf {Kff +5fPKHq+0y3ȻӼIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_briefview.png0000644000175000001440000000150012451473236023202 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME +#IDATX VMkQfLE4(]EĝƸwQ +ąDVnDh~E]`:_ F4^Kwνwe(TGqI+g PEuε$ISQ0RlWJn<~L$KeJOW(ndsHIljP* ĉA,&6 @ Z27<.lXdhnb͸C.= M '#[ti:6(~ M&qK wߗ#UyDq$ѷH\(FcK$}iB 2FaE{w2(98 C_ӳb<-|ӲcUTiQW|  jNDİ`ㆶ`| Ї˲oθ肅$О .*$ 1- u]p֢dEY21 LKJ*(j`po` PQQAT ;cr.ehEs|x%-]0\vTK˭t1U[x1AdJomQ`ZN|ڌpf.8Ip/yE5mTM5VUb\! wMrYV"IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_markcurrentextension.png0000644000175000001440000000402212110457565025513 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME  뇈IDATXkp]U{s}ޛդ&1RZhN)58HEtF3P,l"Qt2cuD,Emy)X m4iZIny=l?0֐@ 5Yg{^k;wFeGܑYݚ*^vض~uFTD">I @l`gwy:Wxݗ FnOn>@yK.{Oxk} 52pkߴV|>j|_8wu.8ھ؃4,E+Wn1GO'8a*C)ZpD,>ײU.| v=ݏi5OvK'͡Pخ .f]|ʙQ㒎fq5m^ ]&5#㑀,> nݘ޸z68rei .Ko\@*3MU?5wQ+f~{m#)}rkĜ{_Kڕr~|օnn|5$ ,7u?/oy`q?=cMb{|W&f *2Xڱ0еo$'|>`PgR#Qm#*"Q0co?[šyit\z/KdMWu@q NI]5D.D&&TDiƈ{Nr{].Jx[ب5g%ޝ\WUR/݁w][FE5Wa .؎+H;"MrGVt2U~Kc;)6B_ӢkKkʠiC f "ۑ(бmaC!F B eHe%5m{ I5.yYmLec(@9iUGMC 6Nc'(g‹sW аs`3(Pk DH@ lT'URi*V/W*]ʕMRPhi\\=RbG~~+p\n]w{50® =]NJOO]Px)P7+oz^2r|o˦c7tݼ|C>/-y+J<@;{뮆=gu?@Q8$}G l>)8wKY?tp9O Th@0SB`W-} a +gx0=|/z]F ]ʮ g[sPNY<])VnˎZGbVu k~ٰ` R(pi#/I$nm&K%Ʀ͛I4 5 m«j^Ѭ cGj \h@!# 5<eFGغX 33<ƺ?<ay_UL\=ie6cݺ!hG#p*Ƴޱp`o^޿zʖ-\Edi& 'Qp/1֑?0BT94ӻ[?\636qCѬR,qR[i[BZ=OG:rqn5&r@xG?(|{\cO.WPպ)0\7VZjM~{Ls^{ep)7sa"ח~ή,[`S|l{hVy_ܿ(g 0fsy40}%HۀՈWԞ[9MY{DT1yr?B`XU&2"zB37-'?#IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_closeduplicatetabs.png0000644000175000001440000001023612646743024025101 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME%5b+IDATX  ?zL T†V=vO iP; iP; RÊ[ eN: kT> : eM:ª   Ok_2    fff    ]'̳3Mbu ~8-}'ǧHNS U:#H*w/EiD<5( <5(  /\,v| MWג7u[ UN8 UN8 OUJOAų  ɸ8v÷19,{G3H75> O4. YA3  @"'y; &  _{^ja |ڤsZӧO2ߋ(xkq1` . Upvffob ]H2x\<֛Y.1KcH  gp?P:)$WPd4@b ;;B;rPRPTRZ8@s0 W~/1ѵ+N_<֓0 BFOޝDOkwS\hEoh<H27Ul+Ml ^y?m ,i!n8hY\ק"mLz.$Àߡ9Bh??+C&ʂf4;Mʫ]0 rI@=m׾XW$/vٵax8 <2ONGމ: 0Knܣ7fռcfIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_treeview.png0000644000175000001440000000236512617337032023061 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڴWoTE͜ڔ6hoJڒ`$4`Ŀ'[}*#hAI@Bb(t-]vҽso.{إp_2˙7]~2!c?^>e-<R1߶CiX 3/{q}_Z,\:eʏ t{4tM(\=!BE۾on0awvӯzjwj@fPd8V 0odPk@cYpd☼0 ]q %\d?pV`ɫg+ƎN2z<5Lq@(Gy.MOA{Ocsk OD"lE"Pppl|N~ ;K7uLΕݙ`5mzOǻ%" _s#OξYAOFĴq]cPxJ2 (Eߒ{УDFe͌*圊џ/'յ$,"H# 'KsDF|2((2L OQjttq Oq/'5`*FlDzHNH2:BJJQ5)q(+k%Ate,wJѲGJ,Z@Z-Rz$qȯ^-O9u*7wamؓ‹p<b?-(r8zs~x^G2*! 5еlYg_ݧo/|\~dV[p 8n2]u @jjSSoUF~˨6ǘ*TBy@@ f Bot! !=Fؠ ֺps =Elj^S*t U<k%4rbǴ܀fa 6kYY0 ZT ̨׋swMׯgZmypZk) :׏ Fp.YHgwFww7nwBbB4b4,/o3|&tܴpoI62t$4|=70t222Ӡ6:j?54hfMb{ AًF9.-っÀcUU%Ux{˜eC/6@;86'&A@D"#" rQ=00L؎?W.) NS 8/Dߚ 9 r55y,M{p`d ==]N6Wc)c 0KǼL=;N1o/+ ޽s%P.3@pZpG%tNgMf{N뙙z2F=ӱ0*& 686t o%&'@b@!V-[ {DAJ0۴uOm>V |w:nfk޽{rQ'ƍf(D^G#q8+#pߏ!^ROe=>6kh8-MpHwΤ |_/66{yZ7C3GΞlaQX]gg>w(9~~IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_showsysfiles.png0000644000175000001440000000266212110457565023773 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<TIDATxWklTE޻Zh-J*h,|AШ%bD4@"QBThA"EBki}vKwlw㙹nR4avν;|)fFS;jn _c᢭ǟ$>Y4S%/mi_ƀ'K4&[ϽGWmÀ+w??͊*;B=1=-'4cpE[۸iA=&{ڈ#Вi ?D|5@Oc@@J![oDfcHW =͡&f@&O;TQx[p[hlEW%?cVрa1 f"|BO6a,{0U(T2)ʑ3SU-MD5$&\`z dpj珳] ׉6U0=6ޓ5)p+Ӕsk=:N5@q x}CXy6F1$[3)1HN/@(),ǾcFB [DS/ʫ!)k #lRW˿|"GPtIgLJۗ>B.i?{(,A+&K T+=H@ Q\30U3} bՃ[H0LT/EKRLW+ĮAA6|&YzLpwx1Y)I;Q[%VTք#(|O6wL|'wzQSEsŏr5/,EuMJcrseЇ%sԾUdW*g8w/v`GEW?Z dN/ihAW6' ׬GŸzL:DCt 1*$>-59իT‡ន)UWc= Ǵӟj&q-Ct`KdoC?K]7[n~= x8b]+m%w>j&zS016CEbl@qp!Ŧg77PuMwm̾sYf ?IΝ`0b=uHY - ZSJLrk)V?Cm3DJ,+y4ۋ{YmHT|^SS~zF%j<ʺ{+n@M+Bkn|LI\;&Fr|r^ok "[v6FtCet3#Y1R]ld̷?'2iMѳS-MhD ?EIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_checksumcalc.png0000644000175000001440000000245012110457565023651 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxW]L[u?0BtM֢04m/64~L>*qh`o&&BLtI1ւ Ϲ vxå9ϕa?ED"{ up= R)̩Z[r/2(I>dpFO8+(*3??wňHQ\k\UWW7)T.SJ?)ŒP(K^f߷n233hFGGA& "= O` (9333abbn6\<6+fxcSZZZ -R Lg3 #T3l*սJ.ލ -###?P!$Z>RݑZ-Z!ZuƏ;\[VT-fۆ\P_ڝپ')IF-,..Ғ`|WKՃ#K$^BuZd)n7 PPPfFd3fԿ| 0N6t>lRBԼcqKPz\. {bp@YYlۖvJhNMCC  Byy9h;  R/m6 ܵHORZRv0Lmp#PRG1W,+zs0n=ӭxO;/|u%, (v b^:1ENv#c/x?$҆.KKK  Xor҅jyVinn.TV?9؂|dc|Lpn61AFXb|s'fc0ƙ'rhG8P*@!WD~i@@0Sqhf|DŃjz@lzJSU-V< Jk6@g_XcZ 0-le,_IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_sortbydate.png0000644000175000001440000000164012467744673023422 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME *]-IDATX_hU&"VAE4miERHQP k(y S!JHR *QDSFXMQv;ׇvfݵ`˽=s?+*wd\w( ;lbP|N &Pv Sama~a* w,;s{O8Q˕};7.-c .l~^LjwZ*twㇳ(Wӭw (F8]G_uwN!i –_uPMXƱQD!зk#6uSsDYq+cOV@%Oȁ"}cV uBZ ij P'H"ݔc*?iϮ @]ZρUpiՐ[ ) mJzcacTTwDbM.ȁ.!mN(jKP gX1@[t@)Եe`:./oʒF$:8>oeɌ6~17vWo 7jYkIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_helpindex.png0000644000175000001440000000433712110457565023212 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxڜWkpT>6!l@SGiJV?NXgl?iEeM[#3t- I , lv7w{  !9s%ߺ%; Ig$d\ё&?U^J7꿫ֵve+4{ 0ryē:&04:0zۋ'U(OY^xXv vyZ!HD$ə8z%֗z~h>-YPSX8q)D0aG=O UX^mUD/>Ǩ?46 |-hXn=5h Y(yHE6ga r@'/⋳xo_Qƽ#yOX[Th"@(4KT:cqg zV>@)aȲk'.1Tofg{7mX |`CU#*2 K%,2d7>h >Ԍd:ɸ3NCY&W۵ʖ7֨bQ}O 9Y uQ-BOYcfu$դ)d*v? ur`C:{4s.0n$4>4THJx9Vd|ːӢa|!\n66PAn+R%oq.lGwYYwo^c a\*VԌ0:GSGE\Sa͇D"C^$6G K+c?O$0M)I}j{ęB_ںWę)ARR!,nLC.i\u*q!>y#HsNUf!Jw ӧva۲`x. |mi`>0L?>vS$!ei#.xΗOsW6ۛ*t&IN7һ ZHs$zeɶM4ջ55:-bT0\8f4/jlhWТܺ'Wj U.idFD=z+]m$;xQSu:< WG FI<_@Ą`aJVgAsmfBcлyrp(FD-"8qQ/B6QZ'evo+))QϽnbC)-HϱVVz'Kh~4 0jD2 y0bFԘɽAV35.e2r 1u]kc#C`hSm~Dڬmaql({^|^S)RQnLZv p LK+5"]=ۯ-6gcwethJq&n`ם΋ r_-ȒLd=ebH/IMS|ĝ&eӖbijv{v _)/LjCɓ'qr R\\,GΜǪdGu]LfX/Ȭ'͒Cb [KvNu踌 `\=:lHrss !:&X"G*jFhmiT57z{1I"!)ZuO \'3g^Wpk'&8~:;8KG~ 9)yz~)iU 4Lha YKh< 38Px4;d;h@ @(ТSEDB[֞`W4.|Y(o6[vCV<_+RlĔf&';nH\B<DN|;k֬A$#.Fǖ,>^"#4i1/ał-ͼ.a,\ ` ]s{IiXVMf  f?P8otFˆ7 R Na7*{˦-gta3nǍMK'-kKcec UP1i om)OA"P WcܝJ;YEN(իt'w} 3ޑt}n ;G 'Q@]Hå6< 0zd'6IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_setalltabsoptionpathresets.png0000644000175000001440000001023612653160641026715 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME&+G3+IDATX  ?zL T†V=vO iP; iP; iP; RÊ[ @kT> kT> kT> 8 K              !3&-C"Cu!ٱ|!0aK@5r b@tČǪoP*1>f'.3(  P4Wҩ /"E.8 nQ5^+/9 *.8"O R5b̉w`H.?љ *Ӟ{.3:,290htP'.H_Vl.Y/G_\7wYV 7i"a[J#$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_taboptions.png0000644000175000001440000000231112110457565023402 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME38DVIDATX[lUK۴-]X h݂R .HbpqmCK4CLT(ź-)bR4]. )bx$prN2̜HBC]Jp;VVEO)C3Qeu8vR}\7ttuNpپ,_@o׮HS|.J>WTe 5r:abu[彖̒c)eт:c;% \I&!2gNapE%ھ8iM C:эi f(K DPῇG<~*@؎@ͷTz}>gVq_eM,n>ZдO'A@ LmB>DQN?Lov]s8UWWjU®倩N XT B PZZV b!pbNzIdsޯy~X,oг^o>ߏn$1YphׇeO7<&LY>,w,ɲ~)ԐtOp 30hj@byt(esY(;54B$)iT" 8p?\T"igBG1i<6C[n-C"j@Ku˭6ŀG4˩$IjTk?2k/[ЁM!.Mv\pZ)+\ !tXGTh_9#IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_leftbriefview.png0000644000175000001440000001021412467744673024074 0ustar alexxusersPNG  IHDR szz pHYs  tIME 2+IDATX  fh Bj - 4~JP -P. >M|K K     &&fT++, }}nmCBAyynmonkmlj]^1/.01xynmCBAyynmonkssp  !  !`a76667 uunmCBAyynmonk{zv]^1/.01xynmCBAyynmonk~sIP-fe {LlmnmCBAyynmonkkPQ]^{LCBAyynmonkff |LknI+)P'oŜIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/list-remove.png0000644000175000001440000000047511323355446023020 0ustar alexxusersPNG  IHDR szzsBIT|dIDATX!NCA}k8 p pE3 HȈRҤo+7$I$g_>~r }绋ugv.^N@)5Ng= ^HKc/Jj{kT퓦{5Sd L07-Mj%/^^g˶o^UFCj.a&c?pb>RUf/I$I2odIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_changedirtoroot.png0000644000175000001440000000250512451473236024421 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME -IDATXGVMh\U}$a2UҦ$ h(Q "JEt/ Aƍ` F."v!J%EklD;MĤLf&w{yo~&K0w=wsyou 4y 8\-41`(NᮻOq]`+s5v-̼HF|X \x$o7)ꝣz39\*6rGN|mkl3@$J^Nn-Uk6S;/x7Xp4]l;c*;duu.;Z&w|i\bSۆ|c'Olw4EhW8& r(GbjoQ% =?kf13µט:%ѫ% #?Ru=l_$KYX^^ ָ H <׾r-h*aI2/rj NR!&ru*4QF;||Z Q0"ZAܨt_<+i̅v,DD"SL&Qyqq/B $^`ۙ (ёԁMF+#}B|mxMA{rjwooP.޲Y#ÚȈѯ1e^vw'w_/$IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_countdircontent.png0000644000175000001440000000255512110457565024454 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<IDATxWnE=Ɍc`(BqA$ ,Y!YBql 1 $~pȃ(=X.wDR~Tߺ=un0I6A~Wcqr'wn(w50*ALex@$\pS~kwc[_g#5U,\7Z=u.'yVȫ3x{ᐇC3`" ;_!\X+oq t`$)U3yz.s&{H[@g:" I6uY A)l={{,n]2ΖS4)$ cH8&.\IEs}ȥUߧ$ ك ?9. NbZ/.FSSmRF3fq@$ d:Lt1ν |w$L-ȉЋϒMM?J D aN/G'U`> 38t<80hQhe>%?(Xӎ>ĔfW`Sj=쫨50[ox %r*m!+$.|g% 20@^g6H`_ u"97|PA3v~.\ÇsV!qz~ #aXLN&pejBtwBDq- n C uP{N 6~FHvw1GR_A(("sߝ{ט<#H>ө~C8DTqҡ3#gHd;WBMzX LB E$z]P0e|q' ]ss8VJC$4qX^ %HƴKy XV4 @B+vHBJ|]<4A:ſ<(i) YMBGIN)+YHR"˜IEK/QED$$%/4H pfq%߳g.\5fb$'8T9 #q<ҙlaLuO“,m~w<9b9 HhJx{ ٟG8`WBU8D/BJAJxp{I!+UlY!0GʧG*,CFGTez-ݧ7 lk$Q >Thvf }5zw'{D RH{j+䥓hmt;+)%"žYǗm}(wcSBwg 4ű:fZ&QJ&>m6t]Gl=!D}لmC'-tJ ܬsL%%%mO:t *Lřr@EYssٲ l;d˙ ,SW0R_6D !t]c j]AEeHrqG}VFճ\ lW/7-.pr/uu >HNREai5FJ- xNlC? prܸx5aH!:VdB % ӔAJ@ROؐHX1uqo!Ћ3.`Dp Z?ōG 0PJWYIT/_ SMQH0Rܶ?pG`9oILT_ mi6G1x=&;ͫ$!'ַњNTuGHKk|Nmjb&L?hiW˶\s0MWc GF)-rJc_7!΀qWa7Eɒ @/ҙ~ @z>_V4T75!'XR5m{3s;n`9|Swp|UU!{TH"!W=|uxnnh,Y^UmbR*mj]ΛO+[`ljP.LH)*.4!6!1@JRZ ]pd cK(cLA啶|j}e foza%  bH~mu 9x"HH)O]dïY۾? iAJ H J)H )OBgT%+a q[Cvm{vOwH{2O{doHviK|IENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_shellexecute.png0000644000175000001440000000336612451473236023726 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME !&VaIDATXGVilTU-3E(%H"$$V 1)5cbCTLHjфOKb\I@Eb LXLQQk)-]6 x%@!)z$Ud+JoX'qԧ*h_^ZU3múGxUlք/o`m=a1Iy2;3{Ix1LۃAj@3HN"\3M'Cc0F޽ ~×B{s:[XXȈg^vkL eب"ƴc_X#](>/Ġ}g@nJlqQ,>)*! p]i%*~=&ibr,W8DzO6l$SU0/U#W" ڹsm{CDȑf1D*QLiСCHҨߎEssB1 PCʑzӦMغu1;O8"-l1aSR]G-ʝmC0tzfĢeݻEDMD+ Qb JV"s(㰲2]Yu B' umm$P$U/Cizg YVA_ӛ6玛G.f^FH?:Vgʏ؄/VtrjJk1Հ)(WgkA#WGV弰| 7dN7G iA #~{ߴĝ9r "lB `$A ,EF Lh% yb3Q0p+fJ 5K8xEQDrvQ>dr_dl}'|RP\Q_ss~PIsNyG%L̙@ ZF97lpJf#wza+\tȫ9@7y-LyJ%*5#0N48k-BSBsdsV@1F3Jꘖނ>vAB3z8wpH2[r trG~D*ݫ2+"dv<@D0'OD43ޑ_yu—"Sz瀗<&e&\҇ Ϗhg:&ցt:#l#a N{?ɛed] y*<ϠIVg֣\Bb |W@lSsD>DJ"h)q8.mFD[ ehD xE$(0YGUAWNbڵ ʷ]U!y!cv_'w4g6fhCCLGbΝ8X~uυ>XAmvXKaTڤUtĈkD9K걤1Dz&-R..󜉃LvHy;2]1H{HH轀3ZF^<r^*IzK=G7QFdoKIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_copytoclipboard.png0000644000175000001440000000335012451473236024422 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME (IǝuIDATXGW[lTU]ΝW[nAhH%($6 X D"`Ø$1|H"@!IH1菨v\̝LNt㜽Y{}pLu%M8uukkykMdޘhÀ[SUUEJ0hjj%a`в 0-oVq5VV T =2Kҽ&tO^IT!&9Fک ;Ͼ0U] @€ Lj|j:;S/f͞ǶOO_[͇lBm!0'>Y55%%5=#btٍCak~E"Y6NpJl4cH0S 00o}Qӑj3l2\V6=jÉ:zG13U\ci1nDg0E+bKl&f3vi. /J89c]7 F(Ef6NKbGFy~΢<[}ã:KE!*:{08CX ̫O2g6U ?z=*F(hn `/a&'B~/Hqshzik\D0vH5FW2nkQ*Ԁld؈r^s܍gdN^X"'-v`(X>r1 \y(שIdJw=^\&tc?ވa"C7,JCVVlf>!K>ksa\꡵0>1^q36f[< 2M2!Ԉ{`ʝ8PVp(~lCe0xrKvCcw+BA0w - S`NR,̇gEDڐ_huRƚ8 ,AV#;iRqRaߍ8bD͜Mn&1xSL\<^~}O0ܐ_՚Īe/H@T+q;/%Oq2gi&m_<3 U=6]O'OY̹xsﴅBD DQHkj F LLH"(Ax0RQ {2N;3salg dd%>k0p3&-lA$Vvuy1u&艎UbrXP<[r`ݳO%eV<5 MrXw a6~}x~sY+%tlmut8+K_ ۵@ݔ W0U5)ľCphc1!b& G/Y@R .@)%:XZڸX`Ŀa)J@Ť xUo1O>]%}ԟ?ja=%4!i2wdѵ;-)Ko="9si*p$/>!u+MR^E`|}Ħ&Ϩ^+W~(3oB>GSlXh;ʌ/0m[d9 L̴7=6TuK jchp]'!㽰pH==X>_&[dQ;H|E ,8f*i^k0ףrlSC[C{)=]pLfD)Ii#|CLhܿ@ s^8{5К < \i_Ia/a^䯎'0AUg0LDd ٱH:AL/`Tbt$rܨ:Ȉ3 s&7B`IEodh=BpD>Ta)m47`e~z"G@u`hщ;ñ5XƒaI,)J!'OxM@!h@o;28T;y ayX~emn .(Iyb^}Մ'*9݌zR]o9# ^nPD 1ϔo&,Čig^ByMo 9 EjIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_rightsortbyname.png0000644000175000001440000001021412467744673024460 0ustar alexxusersPNG  IHDR szz pHYs  tIME -6vN+IDATX  fFFFMC: QU({Uf ggC:!QkHHkH:!QCCC;"Q`@LL`@;"QCKG=%SS6viiS6v=%QESK@&L1WL1WB*QI7# zD/D/zFYr2BvI$C=a^P 4 O]>IXB$Z#-`  @PV/%fső; f?!{ϟIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_changedir.png0000644000175000001440000000261712617337032023153 0ustar alexxusersPNG  IHDR szztEXtSoftwareAdobe ImageReadyqe<1IDATxW[lTU]>f-5! !-j &~QlCSqJ[ i; Ncf}νw3 {^{Sf&h*W?}U4 z51Iŷs+ n|ÛGX:d9`ʸk[~SGxN㽇ٶ>twC͡듧hd^#=%i`J.zSi1u6mۂE%8 0^ɀx;nu־K_89.qB4J Ĵ7;u#AvJ:Ә 3H5QI.pwL~z-%Eb@x;B1<1!`+h, JlzC23!e1qofuTm"~ra@.*Gd*~\JzKĀ$B iC%TT@ca`Mf!iRݺL P&!hsxbXb Z$ AyAHKV!:tߜ✒ 1 +ܻ"2m5S!)X5WB?⹟b@} ӻOUy7_MNg =4iQlldNN@e=Nv ,89K)lr վ6:k^ks?~Lb/b[5!Y'w&/pfzFN`{m\jCh8{»sħr͡}%t'->0؂gSX3^yr^=֟^M6%_6Qy5 R9mJ\pę$6r*xu۽ukoڻ}M\\/--Ǥz|= dw|jnģTEvxUyR+-a $Ret,>t"~Ny`8.CiFWRc)*P77ݻ(}y?4>Վ5frmi/ LM7}p3^ƱNS(.D}%tWjMཌྷIENDB`doublecmd-0.7.1/pixmaps/dctheme/32x32/actions/cm_panelssplitterperpos.png0000644000175000001440000000223612451473236025531 0ustar alexxusersPNG  IHDR szzbKGD pHYs  tIME )ϩm+IDATXGWoTU{3 LL(%XMXL[ lqElqR[)(AˇM ICJ&2;wͼf4gڹQ}b0Fˆ9i' &Pa++e͏l-͔ZH [8>b#~%ףn-Ae({ę8r}7!$n!oqE ^Ƃؖ!, N|PT-waq][\&đxJtcC]*>_1P;I<- iRLd UNq!KP&4O@j5Hj L d <-Giq⹖@),+ZHaHᤒ3'q%%h%FxvA+1Z 1`*/U$yrL1`JH -@ ]EgnrO!@83ɛG&b"P8Ӳ`IC7euNjHs8xwvH@÷ }X#<;o?^ⲧy,bw4HMqọE q{'0?*zlB9DC1`٧%\{=Dwy{ ^>A ]Uײ|JzgWݝN1Sa3 ޡr+ᥣc0CRw?{Wbn8 ujU$\.^p~?*Q6i,ݪjnc<Οpt78>`Vى .ߓ YMÞ}[_\GQ(1e1 xI|!0vpA*z#id}/&IJ؟ P 1xzf /n(~0&9(ټ7^g}"]+jMI,ҏK'=Q$a!Gu_#H9VϨWwdҟYcIENDB`doublecmd-0.7.1/pixmaps/dctheme/48x48/0000755000175000001440000000000012675717730016425 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/48x48/mimetypes/0000755000175000001440000000000012675717730020441 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/48x48/mimetypes/unknown.png0000644000175000001440000000275212561351202022632 0ustar alexxusersPNG  IHDR00WsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<gIDAThnFK.?Hd#6`đC"r ¯w և(};A\K`J[ hY$] AR֥?`gvfg$ANvH)!߄>~I+$]xUrDJ y0DB~zѳ42 uS B$89A5ܸqCUS{/O< &M.aۈe 9>eVu]{sss>EB4h0P(t۶SUW޵x!C4MӘeY5J?/_!yqVqJ)! #/DpΉi)Ƌ/~d@^Lܔ؈9 0nnn~?̀,4-(BUU{P )D|^upA1ϟ>}D\߬H)㕧4-|&O e0 ض]8>>L Ee|A@J R 10ƈ8{!r߿~ X,^Ν;ms(  85mV+ccgg(mr1 y[,//ÇPUP *d"2K̹ 󰾾˲h4@JTUy8::ϟaYj6ױ!)!"$1"&* Jh`~~0ʔeױR0Ơ(J~^l'6` jx客j+ UGfn !͛8dEA1^˟)"YEP0ưEQqt:8<<[{AO큼]TU躎UR8d,Dȵ`6jZjY3 i7쵤aD ]Z^ddY{n{`T'8RF04GԲP‡:VVV`>5dB&AGn.o.2jZ}v|\V7v: S z~R7oΦaqq1uJ%D_c*n20}b9gHb*{ CQLA,MVRׁhk Uד<8i6_rΆ t|N1?WZ|IENDB`doublecmd-0.7.1/pixmaps/dctheme/48x48/actions/0000755000175000001440000000000012675717730020065 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/48x48/actions/go-up.png0000644000175000001440000000544312561345244021617 0ustar alexxusersPNG  IHDR00WsBIT|d pHYs||BtEXtSoftwarewww.inkscape.org< tEXtTitleGo Up.CtEXtAuthorJakub Steiner/!tEXtSourcehttp://jimmac.musichall.czif^XtEXtCopyrightCC0 Public Domain Dedication http://creativecommons.org/publicdomain/zero/1.0/ IDAThXilT}y5!$,F6!a N$D"4%G&]Ҵ!HUtShUu!*,JPD*%1,k=c=qrg2^1jsujuq۲kq=ZCD/Tce7?pYnmOJVƊChc*ڏ*%?]8Q5wt"'\B('6ϟ[3gƹFyœ[O6Tѥ|f 3n-ߴz[i)d4,U,(r᪰xQMɺ"/KE Ef fF2;X+k6#Dϕ]s[t6:Wbk&>`=A^ܽ)cz ǹY`H\-Xp3]CWvTˇ7%1j.鎷3 .fhj.K$Ro ŋ=|qWug:E23 ZDr#w1{hZI٪<0I-4,5{?@P=k}`ft.%X0oy!Fe #)XVyYkޭ߳>7$` R]PjjN8̠aMǖ~Zw9=:`hYO~[i\ He$@ I#$ X!sk XQeRgOΊ?#d3vįxqی 4]n@IAB*<>9AYqAD꜁T6d/,܆D:JW{vU˿@t\3C/|XZg\2X(K: ei֬.as)g6r妁WR9ՋR@gQt(mϗO =*ubaK68!.4ҟgZH1? '@D5 ֋ tz]V׶c \; OMnTX#K;vF<ۇ= ;tTŪ@ c-szq2w4:GUe5{M~GEEf l5И &nl u"sP0(Xe\XZ=~/tƟe=*̸dzƗ/ 9\bV[r$KD3HdV qp HbAx߯D h7@h2S6 KH!0^g0dɟ;-tEHFp68.p!YEZf\0˧?Վ ‹,PQ30#DG0d!D!t5=OxJG,͒ |F!!ac vI}WA HEBI%Rv AfU\PަueY`Lo$t6,}+ɍ*W})pUID^@6! ~u=Q5I"H9h ,$t /pyһ[x[y@KkkIKW; v`2+9xe JH$;bew,B!s H6qZ_ gs+6/A.T<=(t`NIS{ 1g/p3Z&/f88]HEc#onkP[PK:/"qGz$"'TNJѷ|{{a'BP-^xGHu%N;.xƺ?hҏsdv@PeIENDB`doublecmd-0.7.1/pixmaps/dctheme/8x8/0000755000175000001440000000000012675717730016255 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/8x8/emblems/0000755000175000001440000000000012675717730017701 5ustar alexxusersdoublecmd-0.7.1/pixmaps/dctheme/8x8/emblems/emblem-symbolic-link.png0000644000175000001440000000046011312762055024405 0ustar alexxusersPNG  IHDRsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT1 `@f ^pfíQ $5B h}m[ 7gכ^<8mx$[j:Mx:7(Ԣ(=iHy~ "Lmј,K" P׆`X1eY!"iEmmuo bBIENDB`doublecmd-0.7.1/pixmaps/dctheme/8x8/emblems/emblem-unreadable.png0000644000175000001440000000050411362134553023733 0ustar alexxusersPNG  IHDRsBIT|dIDAT?Haww_wD'bAPKKm5HVnH{. AE[k JkJ; G5L6[ЕRoF+ O*Г=fLlSLJ<:mz 6^X7AzA2%J9Wi㕯P0wMν8LiF"‚_-vry>ޢyǝ2Е AӦv0. !}~?M?~ŝIENDB`doublecmd-0.7.1/pixmaps/mainicon/0000755000175000001440000000000012675717731016013 5ustar alexxusersdoublecmd-0.7.1/pixmaps/mainicon/alt/0000755000175000001440000000000012675717730016572 5ustar alexxusersdoublecmd-0.7.1/pixmaps/mainicon/alt/256px-doublecmd.png0000644000175000001440000003670511765566230022127 0ustar alexxusersPNG  IHDR\rfsBIT|d pHYsIIEtEXtSoftwarewww.inkscape.org< IDATxw%Unɉ&0 H$I@AQ @_e]װ|W  KNa<=g:\u?n{V|zVթsN;y!DPL3P(C B1QP`(3% F B1QP`(3# sY+r$=;s]:Z1ގQ>Ru]R??>܉o̹'5==whsK+;ҩ;n߹%;: D&k^y7GKXd1H'|dv"DSNi ~ #ZWҁ$\B$+Ⲋv( @Ymf1-n@֤4]:g!r$_h VP\q%綵ݶpEHSsV5k_tvvD1 a`:a e_3 W(Åxx,v98^`!)O4TW(Kvaig'G/^ re[w!D3w{\hW(ÈgID" _,VƂ }N?=b¯P4 I5cVef/8?b]]J# E#7;X Apky p=O~nW(Z@FB qK|V%/5z,ܓ4ΎNU+-]蚯(_D.Bvvv":(֑i,5SV')Op;< z)Ux'7]ZK+rk!ef%Pְ[v7"4Mf~93^dY@b " UMR*M=bޛ.r{N>'*Lk'`=!H$H)d27E4#{oSRV|tz&|Sʹ_mc&lַڱ~.@YbZKKbޓv  0cH#QwRz5P0AY)Fg6tT`bhL&eYat6Dkt,\̢}AOJ~V~e0bl6[z9A<, W5JL|iehF<EYu`5@4F saX8E(nfJwb|H" ϓB4bKWorΠ7#.Z}Ch4jԉeYd2ҎBſ=RM ӬJ]MΓOg?K$33TPM)iTt#1oxsRf9q 2ogyopU51զS0IɤIyyT3&@Q?K.sKy*h]d2!0= Q#"^1RG/z"z-cyUiN2to~1/qe6 -dW˗nxg.Jm% 8!O `zl|KWKRB^kC'ڂ$.. 0WMd"|g> ;kV!/DzQ`/=Ļ>)Dלs~Ø;+aՅ޸ xYI\ !}В,?ct|*ʹwP$"[D⒏ U&BD,ৈ,Zbo]ފJZIK0=SEh:/(k}(3V @IRM7I-X-{e$<_ީYڡދR###vOBܝ7nf_6:N>Od"l7cADSA ,t,-/Y L(ei =%-@7 s&Yܾ)KtJRwۙw y) `"FM[S>"t/FRfFZ h$ n 37L-6|%Gc VB|>?~\Lu0f@8ƛ5ě#7a[c*t]I݈RJLt ӊ^rv\ {eaYoyo0D"V8##vov4S!Uk|kHs[;D)I;N{{{:Cwno޹K@hn{cK_@!h A$]s @Xn)k6O_RJuf3Eb_pMViGQ,˝Z~%ܞ=X4f6`e3 4G?! /;p&WzÕ_`Zdb k8HaTwiόBY #r*[4ʐRs`( r9X} J)3i` L31gRJ"adlXi_[,#gglHvg/AZTKs+=ޡ!־+?m=췾1w>^t( ^-mF[`;Ry d2(HiI7%5 m:1')/hǟBlv.ӄ X)q)šAv3j0=|!䆧xۄ86yR-2OݱB[Eᅧ̦k/Lh$^~ބALu>x~v:̑5ncͦo)r²,FFF&|NJJG"vyy賺*kԽnFx_ᗒݿ;?ӮtQCwbtP622/Y[Z'8VB^))V.}}2Zٷ$vd2}p;/ʼn|ToE8 U=zV =fYzUǖ"CO<:o=;0RmdYwD/FP|WՌ"s\d y=gao #}ToE@zߕ  n=a Mv;܈qRc642^G{=880;> 0_/n|h :ٸV@ ڠ0 :^ZT64Ғnj !@Jx9Vv901gB"|q3'uv;SV< n:B>^xoͿ?ouچ'z~$zs.~y0ϒtz/ZxorS%oSs1;6%ǠfA=MN?A[Nㅇ?:v^z2cHI9_\.אѵ {jh;N<҈̰;m]3+!YHQ@LYȡG":f54cÏlθ+~shW߾lo}=^ ߋ[jѣ_>n8N'el_fޗ— ~Hn)\` J}0M;ǻZN,̀ԉ=h(T ~njԥ5JF1r?zP(~<)\ 6CdADZZ_ȫ50c7 IL̔: LP{Ҩ{ ;004xf0$T>rb܉QEǟֈB(Kk X[Y((zaviU=Arڬn"oUOؚ#ܞzTi99f pĴ{Wʔ-/:hN -Id2rJ;nmNOTAc>m+uy.HQʗLb'I쐗Tv3i>u%`>xD]DIqwqb [JA؋c-NkpTYa}ݍi (>z t)thf7RB1D%Qȫ._%i3 yOCN?gqZU 6d,>B+➸}dsӜO3~/|IڋX5&wG[TW܍iWW+'n_]qTP#溿m@$oZG'Z2mךF|5F,BTTN3-oX}bqB7c5j4Rz/QλGzݳ 鏲ڱɷ=ދZ h7i-X^e 9xgd7X3%u vc[ٶ9MtSiPI^71w/mhu+R߽aC83ffrw ! dzE'B>nF>"/PP'okNMV<C@tjpN^:8 @,K7?zqQ@{$ &Xs|SlZhj^@6{vC @li^flؖX&@Xjrg:^٪ &@ 0':948YZ "ڂ&@,Ko/BB!ta@)%ooZhblFi @f۷ۥI_`aD"D$2;:mE":-f|v~c+e9|3ٿ#vPx` X V& "H$i#Je/ԺXX,V.9ZХS "_ RZf.ˎ^8Z,COԉ=pܘR`G03iLb&A^+HV7}-ٺU|+0oZ4O'z<ZaPP/eN _X V.f:͂,7,{?MYٖAZ$ґHu~ND;8d6#aN oFHI1Nc att`:tt%0^da/-`P6IDATZ/H "DRɔ(P"@@9X$O)!0R)N]]DR4: G|2~@8AAAgaH)) "0&Mt֬}TP'bBtX@:\uAgiX"پ}dH,$a ԉ6*  \M^tVZmߊH`tucE%n{:;EM fZqz pElA@稵 f:CZ"'&g='ŽBӓ=;}i,O+?@+l%+ag6b B6-,:8:J@;P @гeio4gri/ԁ0 ڵ]cK˾Io-43<ᤀs^b9<5k',/!HD5jG @d!GaN#c3KO`w: [_fӘv,nin3 87/<@nFطY, :s |xV)9<<tr&Fs(d>GqO]nJGO9tE(` B6ܶM<`87PJnE{`aq:r=QIgl'`XDX,ͳy_pnڃ)mm]9?nX} / Waʭ0Rӏ<'qQ#IXpnόsoJtN#^dGF2vS гݾ3Zw` 0mzBV\h]sy`Xa B}þ˲\;?i+4)&y wLjɄg)]٧ lV'"4~(=+-c;pnBž^roWUDYDϺh4Bh ~!w4ݎA t1Ƭs^|m6?y`BTC{P9ɏ@ @$.~O //f[ah\ڼEο?-ӟu= ӗ?,(Xf.I~R8͟ghăJ:FƏXb ''Rb#FW7N!Foўl%L5=T`wĄ uϫ# -/؝xZ$O|CX& t_8mܳOPܻ3܌p( ?=%[D [(ni.B#mHk?r_x 6t]]@'Wa׾.2 %恽52co~0^v`mxp$vdk`?pn3p(Jy#؎9g}2G `eog;BsR;/P>9D"7t RuArv R244zzwU0TiRܳ \IOϹ+x_0fbCE= !_: .xSj=-smoU~F?/0"n0rm2#3o4]ТQ|_fOW*9 ;6a["Aoyy-a_ӎ4÷2~5Ty}`ZK/#{-FGg9k Eazd&8p/\-N͖` _{#pdl  M٧1?-+X hl1i7J/=$788ji?|,q'X~0ߍĊӛ>笹4\{(@jo#~ŷHڦ\P|D"ng?d svǠ~XN?cV/ޏYw&0<Ş}'_D ǙdBd2 c~tjwŽr: Mg?}C 5P"2 g|*zX{U"Holߡؿ` CK&Y N?sX$*bf{b>]}W E4#wp[Mf3 HjEur~ФLSܺk5*!f'r'D+-:x Ju.WL+Bj33ZJXO!2Ԩ_Ka ,ψؿRg]7000}u[ 8G#³+l' %߀awqa_:QZsvbx@r4o gzky2L[|ޫϿ^K tsH& МhF"ݤuxq8}?O!p5O!{brX~(ښc8(\T(3i/N _g\{9R)b 3X:&9]/;*LģA;#[6l1# ;vdq. $hnk(MGƒv'$"] eMԩ!¶4w5kO^Z׏SǼW&}5!^SRǝ̪o^ßnhxc!L͌lHfvCG( c Sq>%Gw ok_@%K< zzz8ŶtC2tMeWWz R  !ljAN0(zzzn.lURJ,²,Lt}3h4JGGgHkR|ƪo]Gq'4]M4 ]?g_WVE嚲74.X};L o980CJCk4X̙2 dYV[umGtvvD\4:;;E+K6= tÿZy,WΙ1OXP":::\op1=waD|T*UZ籿06nv|+ v۠vE @I$Zyb>/X !HdW>Sv(&ݗ}_T+c?[vF @b~} @k7̑!6}}wv06<]Px _4з W\3J%$4d2Ybs~vle'.࿯ơxk*sN|}sվd6\Lg෬A @pz9m ripڟ\vb)bX7b("NwW/ipΦ}Kz!ʪD1(Gc?>.e:+fz?~w'`5kVXֶ-J&I,?15d!Ϧ/^ޛ~X}&<08sۻS[ *Wfl`YlWlIJ|JD",:pj{dvcϯBFU`(r? |eqs6sI{uA5&@4ɤ[|O#s.k?Lk̑a6~ {W|-wtZ04xke|v~%w(_ŘsXxE>t6vرW J4 ]!wnZ8ֺ'IN!PPSJj_gtuuItx2/?5Pe~B4, 4}P.y kb̟wihVrNuO`{BxL @Mq(iFOE  Ptʪ];{j2OzYk7`gI!BQP__F׎~:t¿w6&l/怴, ٜj(5 '/F's?epLIξsxٗ`~,E!b /`/? x5ù) ǝCg߹q8ϗSŽFsHIPLFLՅX1Sр8 ,m{ ^heypnhyhXsW%|ԙDQ iQaԠtf=oH lCN=<{)ȿ-I绾 _]=/Ur*N44Xk(_+ˮcߓjϡZcqXg묞o Ҟ<];Iύ+WP!tt9V#U疎W:wSwca9ιP.rcaN$WJ٦~6kY';_JNp! T@ {6EڳlK ڳW-#Ym!$T;\ @m!~~Zߟy]7ZمP`Z@)w^u 3@( ExQP`(3% F B1QP`(3% ӌIENDB`doublecmd-0.7.1/pixmaps/mainicon/alt/info.txt0000644000175000001440000000010511765566230020256 0ustar alexxusersAlternative version of the main icon by Ivan Dzikovsky (vanyasmart). doublecmd-0.7.1/pixmaps/mainicon/alt/128px-doublecmd.png0000644000175000001440000001736511765566230022126 0ustar alexxusersPNG  IHDR>abKGDtIME7KIDATx}y\UwRkoIYl@MD6eQqeMy#AF>*7sA~Q!DYe K$@t:Iw.UVuUuUJ,s~;ι<1y *OG݈1UD#T9s!!BrL8ߋFV#֝8_XD/S(0 F_ Ľ(s/~IX0B~*P>?;/~s.JDWpfzS-B^]EGO[nk*Tb "0:f++A^pŅʙ(D =/|\)_B*(}BBqSDHs(|UX&*~%-#iFڱZ $[~6ꚜ@Xw˘-Psǂ BƅqI\}1nQeY%3D=)_4.J S>*>K/8))3HD[8yQʹ5`J}Upe ("IG"/*2__'ZR ?R[BQ0 -ɣZlq+Hs(t5QEWOUIEN fdlol{){*Ыw0xK+/[NBBi Tܒ0/v:eW7=|x+@E'3t/ϔ اl*N >^"KBqʔOq_0@=--:0ztvI]3!e @vsYFmaЪF"B؟f:ƤKzR\wGc1CBh0 IJQ1P,LhkŎ[sѦvK,65-$3(0 ]L4HiL$ [V x 1hpAZ$r& kt!\y4?,ÚEb=e=BxG,|] )ݎ0:3ӎ;ڽ o@/x+!3rO$%سWy  ^)$0,'ưp͚u^+V>\WǸ,(FA@>kl<$dO^7grz_qyRM\ &]4DZPKQ{)BKbh(xJ[Oi cʙܼ@RwND9 k;sf`i\ػރaSYIs?86M&fmېRN"3޼ڟw Yu0ZOdXP=dKSADD"s-$4D%c927 hkB]KbfW`?@%Fs|W Ήd5FX+"\CCZ)9]Xo֎X,6jJ.w_)UMN Gx<#_xigEGkIFUt\-nC,&-ZI\_E4sV4jJf $p{ `̗ ,&V(>h-c]8Mgiu]DϿ}9ȦSBb_$@u]z\KXus'/"̓xWC.`0;$Ym? |4gjg@ `u/qI^xr"C@_|V9}SJ]wG_:^yR@U1>J M֋OiZ1sᱫZ^*c5E7qv@ ȟًL&Sԗ3@u:Ģ0<>p#}ì~^˫ޝpwous 0䝷2 $hĽYJbO(ZN?(!as>u`xl:*j4eW LGXZ~LvMԼ_  uOsKjV-w sJ`& rQr%+ ]?[|6Pm :(t`q Ȝ{ rq_ 41-O[b *Lpa~e y`SB}o-[h bANj/f滏v79oZ_J2kOl)jP7h RW!0xrrTK{id= MCpz}:#B83QKe5 #7+V;!n/75ּayB^V镔\9R_5?Z MEPu]+K-wOJ ca 5=UjS ܋.ɧk4ar+0 Mݥ̓|BK7, X>ByrP0 t 㯾԰,3.ۛN42h-@DbjޱiHm|,gvj4pߛ-uX_.T&Uw<-m|>(ׅ5:k4Gr2 a--U6'@ VI8SW!#@tiSm#w!⭹RNjQM  h98Pw_"vs[J)E-vZLR##ZBSVRpN;-"8}udzwb9@u&t`KVmO`M;տDήM3$ܑp)= vEk_w\w>x %rm' u!(ARBvA8P AY{S-ew,@ vZAcn^.ܽ:S!۶~@{m9ln`V gp'?bӪ-[SjE|LJm-P b0f3Y\ T6 gW!G+΍>~19 d:`[n~42o@{w]R), (رXWՇΡ*5ӏ}?Rzej=j&[8;ނ;4zw]o币<ѿikrp'3 r ]&kE}9si|`e193tﮟp33$Ģ.¥}"k^Ƚn̬RB_˯bR/њ hn6?|_i{y7{*X5a.wfm\P*MTu _D ~Rhi"3 6OlF`~?,$}.Ghg/fQ]pw#1hg~!+(d2)X ?>kӆ/Ex@n LVt=N=]-^}qgDc.%1@$Xq8$(MG:Hח"CXq۬}̇p*E".JaYlF(ނU_V]u =0i8cc3gϞGzŰH C $D70B`3 {=&SւfT@0z7X&_(opύ#q(3#²,躎ο(A)mDfVNn*w94uwGvNiD8okW)%l.c!@[[R ɟ~'S߱jX+[K|sH̰[`4Mm_. c.{_ )} ICJͼś |S4 kSfWC,6@{_O:q,36(Kt 4D`J}ˡ]s-]?.eufx3HaA+:&6@]ųH@\3 ciP 9zPz"O>̹kESadSH|Kl\4%=lXIд4 mmm{ l<"Ռo?j.~L)  uR;Z#G[[[P (tH[Mwh2o^A_xt:ůAi,@8Fkk+Wl=~\w6]Iξ2ښ)8L؄T0M37bASe>n;]Wp#+%ѾL&B\  #,\ÿucNը4x ]&,z#V B0M*9Js$Oo_]BK?sY#5Bt]d{7w)ϙ^"G_~]EW뺅!3efD]aFaΚ#pYncJ?Ht~|90:us/z O"DY (w(x?",l``)kw6cu;ǟDG -GJYhuJCΜ2J48c~`p'xyO?䎷N*<j'@1bUZCѕ]zk Vhx#' x'}w aC!. 88u% P 0Y*a#Y4HCkwVXbD}&V A\m΅ڙGBeE dIL5P7D `דq&m6ҒY1uesgΣ,@@"f½j,%YAV@C'x\8Xe% p]fQR `I}\؊B2]%Ё<5N@g "|RޗYګtb8ּ%hfH,4RX_IK H0l"q36Xޥϟx,1'_I7p{7+}0)wN*) "'M7}j헭Ͼ|oV"P/f3 GV\eti+@g+R78. XH V&YǏ{?I@?C3ƞ#.,Tהȷ˾KDž,D#xUND DQB JL_\07L+//)Rb6nx $Q !n.}Fo!ߏ(xMc`~חN_|% Y0{V:ەڇ:VpI:%iC/O=zuV;bLPW7 0gl̛7lxAI ~RJ3y;di?Q25&;.]Q@;:hB455E ""flȹZ/ΏXe9IaxVݷZ^]ruBڕW.}.R Gv#Z^f=+YKwSH_F8 ep }\ڹ 3~upJ_Ũ7ξV|B,^.FoADp $@T )RLX/>T@ʹ' fŚsͺ8?`xYw $qɪxٗdr*twD%!. ')R( XAH fu`go/5әYgCEKWo5MMMX|25ɰ㺠TS E>&2,]}(x9u5l@)dr*d3L61lRHQ >8!mr,¶c=( ʺ[*>c";.Y~2@\Ūp3sw)4 8rvqp\g'݁iv`uQ ;Ze/YYuL"0a霖f\bZ}}y]u5gy'GŸ"c%UK;;q)jͼe鎊d,>j['"dL*)R{ً9ft^Y"6ۋsOV`mDxֲ+0Zܷ&o1۳w\iE)FaqX2+8ΠhJ8#ج2?{ A8H1ȱj0dnB X0Ԓ}H4clՉY8̪ )f+'miN+}I0/09ɬL"ܮpڋIb*jY.SG|1ó̙k%GpY2(GdL" v%pZZ&!ؗ%|HFd_Rh$Tr<+]HHKYY%:\i)f_*n>[ cRClkmS#Ě.%8i B|݅餻]&3Q0dc0bl*1äV#ÔŻ,AGpmo> <j#No~%p13ii'q,-}9a @ BODjcg&f81Di%EDг%(Rt8 Ge{{]  .x/+n_= E_V$YZE4AXiFb RE)Z vf6Z\]0؄f7j@fHc)K@@G,Ωs'G@ĞW%=59mNj XkvE &5\lR2H1$ =8TEgX)v̰ &'ah/#`Y5" [0=\Y4egǀO)=ҰD,sR @[ сL%"t"+!{20}|0ȑ􍠇7 ]AmHK)af`QBo! hw,ʽS;A32 >s@R|iY HV vl@JʣL"0Z J'@Ge2؋fz&)L<ɐ҇_(/  {sbx ڊ⡽0`4n%GoBkX3T"κ ?}~KG.o>DQ=Jvjj)C|K3ẍ5l Kcm-N5ǣc̞Cٶ6d[67#85,Dš(<bB!X"袋Jz Vj0n .2&z,FR"?8Cڷ7oDc?hz P :ʂX q5^H2 hw ϡ/Y>!i=ǝ>=]+VRǂhiP6ʵH4wt]Wy1A ߍA~v584րZ 4AHBX0PH|@k1-@aVfsjwʩ4gr4MAp˵h(Ѵ$]}-e( w<'N _ "E"\:>#Y3_CuSv-sd8-XqXzsduJHr-->Ttx*\}p䁻o_ȫXC `] _$05 D|-ƴ Bt-]z;^fy! `\`KҲ$ j`Rk1^J؍Z_UߩuFe8’ϥlsKݞh D"܂Eg_@ :{vbǏ}= >1$$A`Z` "lBmo|p]7^EsAbYI "t-Yw^GC=GΟ;~@de, :d0[[7Q$fbm )>zej敯IW:έM>fh='ʹWa/oD6Hb8,8hm XABc D09 ~<{Pp^y=j4iG8C^Jl|wC>va V Hl EmQI뇑{~}H'%<|qHm]]61c sN˷QWo753\LpY5}aa Иe[f=Zd9tO/xO|?O\=TeMDBP@VCa!)&M~ƪeqh4͝-\{ڌ)X "t?~3mՏyO GB\AqnHĺ4@8_E`dLKV oEMK}[q_E87uWǿQ.١ 8{)Be%.xP&>KQUq>L_)T@{hn| T-IjU[L! yaTo}g ]NӭD#%*B`ŗS\Dž#h @f #tl `BJGsG$~ݼ8\OѬS)= ܏~= |/Q%REKR-LSt H~1OQ}}+_*KHH-Qq]i3y> H3>O P~#tum"ц<UR88_>J>ٟH-1`g9Dz_G*SK?*zR<;w>.{' 6^bK `^>v e.LԔFr/M=)*Xm}ƹxE3uG w!%q Ԅu!+BC+ܔʣ7zT߼SE_Jq#ұ VQJOź~|vu90f +'Kx$-O5jiFG PCYT4 W|Z`S<-Y<`D4t []{hzJ@¶L:7%ĵXJ!KЄ5`:,<8lΫ-8iS'!* c-\^oCJkWdBW|O~?#6`'QJ`񺳒ӫWƤx5׍5(Sv\K{ЯGjR C /fO#Vcً_ϿF*7jՈfXJ X,BJM]]ffLD['+8zpSۓ"ӄEKfXOSP CvEۚh[ PhұAW@:.2B%'#9tz a0i_sd]*5Ihצ8,ղOw*H> \oo,D I@ؿ}vrO';z6JLO ]-0ρ̝{÷7EIytZg>ʒ#]RcBV@/c΃]֠RJp Ԍܼt5{1:O8/T|SwCljq3)q@+0U`UW_V`*iZծ/w{202Dz:HBqb P> eց$=+M:#FSEAWF[N fa66cf Fa%W"^3Φ×3beI MAF+Pb7V5V'%_ ,~SR+_ĞͷG6<mͱT}:X}_=ޤpɪFЃ*RGM82 p'e-4Bu AY[-D}Ҭ+'*y]@l>De_o a_Xc!uy8lx~b5 \HAƭWך.ad@h]FGD:dIM]p58Џa Ab!! k59HEN̚RksSK+o ȝ.`>B^sC0C0J\iFGdF<Ij@~p;~{?o)\(fGoEZ~7ًG `Ah1:=/fq 8"+Dl9~"V'_EbH aǽXR5<:/NlaT_HK`j 0idm\t,\)a/w|mFn~`[nowy&HX @Zdz !@+2.:2ڿ%"QvƩB8`!1C6c W o*/MXqE9ў~΅@RqEDЅ0јV~fXU)&Bk M/B@`\Whz%/ZwSyALSqV1d bϘV ƵmSty#DߪO߷|3|l P V`}9*|:NѤx%lyFhۨoa7RmіP$A>5/{aENմO%|ᕴ?_*R bw8ĵlk}#nzѕA;zx?'oVwj%9~IVB?J`ߵJ PFf`XfWbm%PJ”{ !U"" !KY/k(2\8⤫0e,ahW'RDZ&=fJ1#Iw('؆Ǒ$_X'|~ Ph掼Pcf t:G +oFf'hZu6<?p51<mbx }}ҩh?~mA& IDATX tVۦn=Ϙlb`; %i։kuzID7Ynt?wܻqd.kzqеb P.Ie^h5B1""0͓@S7~k^QblGZEw%8ǻԐa HV>(P`\=ZD]7Fsܱl;oJw1Mհ.b&~ {l]K@g|'F5u1 G7]#hǾӡd-ZjB$Z#IHV~1<'#hO6حٟ o0%v TD5$…4kw7=kH@ \x&JXo4) 9~T&v!extڀ./aʈaK?Sۈ-Sh;K`.7#[=k$G{Urs~um aڳJ֚vJ 'M3ɓ ^m %> y5A[d9o|<`C"P_XA $ 8xO_gB^Nǚl*etI6!>3VVMm|$i'|ۏxo CW FDm~9LZ@În,t##:2:VEK"% s-iǣ]+Gf<Ȟ#F@urtW%hزLL03gfrF>}NUt lڀ?^KZ\if"}> k5m^h a寴K6@,O(3MQac,MJ7׋?))HP[lEjRםKd  @` v#I+3#=}TJ;M^IkZuUڮ@kk@sQ"B&ǟT!OJRbw$e.ı4k#f3բ+ } =7JO:?D&ϼ(0C"`ǮgF0g]Mzc}qD<Cϣa/h䃙# " ~B8b5P?L+"{ˆZ.w~>bvtD`ip?ib4B^-rƓ:ov EEY5 {wH:^rΕkc56iTk/8Cb&Mi'aǝ`'AN=]3M5fWXAasU hH;$+2Yt}F6L4\``iπ.#Ҏ_Οo$`31LPе\Ot3!p[ #u$:LOK;i޻27|=&P0{,f0z'Hֹ#o4u-VAGu)l'?ǎ~MUx`@V􂘩r? Irh3ٹ#RV Krf|4.|)eʌ= +gZ# & [ѦY&hQN9#l&Uaf=rz$ϕ\J"~l*]+%vsv(g3 V4ph WIuŝ`]7a`K>c;z9)*dq+ @8=?I``[Aˌp䞻 ☴yҾjB^.mfF˼f+X@ Ҋ <r8xߟ,"?H @)>~1'yx[\7m2,ڗ 稁7 &.h]2Q.etч\-BBJ5?"CG v4FR[D@<@+u銊2w1dp?icWi % Z{!Byt-˥ PD+*`}$ÜWȓff}jcYcA $L1 el% ~@sXuIRc5[,䵀}{@߳yqrE+w4A IZ=ƃ5 f G(קUc!%r0c+4&;+d4ՊNKKI\-ލ?mM H `0Ub~Pv$\pk Sh֝{sz>PS7`dH `0Z%ρ\f _;^4/RBfq. !Q8`D«־mߠP QZdx^_/@  H< 8]݀S"7Ạ`ijY,:IH `W)~G\45qH/+PPP("/"y<7<`t},%wT8Ll"e45C45f/RX1K#T2Aj=Yz֬?zf!!a#%6A4ijܬ:g57ThH `0m ʙ)侥Œ?7 x27ox2? 0'd>XE$W1rPQNs +2݈x8uJ5H ~n X}]c DTE`V9Cdp[බmoS(RH `M/|G>PaWDKF'/pM#ˊC ( DpZභ!]=$#%Qtd2 a0p4 jrC~mi#n@r@ "wnWфL{܎d;&<AwAo/X$ #o?V:PNxPu ;k2@WKC/<[ 2]&?s kv}jvѠeBܗ8yF;rശiVLP5%"-^XX{^]GeÁP AxܻvBYம1[)A` =>Sqª{k:8hSSo.YNX´X$kd &;z#"Ypgu4%DFa c"Fe[(ij[>l%`F VԿ"A$'6pgF RZ;;P~XDےeo!OZM hi|Q";1y&amU [V0sɠR(;cHyٚR08D"crLʽsN;# j3w! |5C`3G| A@y !žcvoʞ ִr4}YD:'upJIH vA2ɪ[~.]Y,woPZM7Qڤ>{큝['cgm qjH @WB{Ez#s3r{wB>Zwv;E|ZQܾFwN8=~40`6P8|^u 1 &PGI B7`pƐ'!03u5m(8Sh\gAJ{#mr >gg7;3MpJ؎/==7_<2@SmkV@)R s9Fn쁗ׅF}DsfuA `#}sY>Hz{{hWJbҰ袋!ZZ#qCB)f4}܂M(;~ zh?B:N֧!p<|sc0msM;R8-A @s$`aKǎ Ivo?44ׁ@S.aMA"M,XML=w_"2#6Q`߃wx?[6x`7` ];Z3'V1qk9}R@sOFq2oR+ iO\,x`7[6;r ⯚H+j RD,*0з AB`@-K J %zͺj6̻,8Rmg5q {辆/-ֈ`f%)O\)4@j̇V j".Nkc 8COo;}Oa, jAB ىe/{~C3,p1ooGe{EH蜃/ ^}zI1/c_5]aml"K0S1Pؾ_r-z~!G\ګiWq@ ͻ%Gw6,e::pM@Eg+0uڋ¶'KBbIc󉧣ϛ>?8 Z6@ R LRNFN]?(H]'f=TTШ7_jk_*+.](5o,(W+V@y8tj1}$Gy+jL#&9ЇŽM6T o 1D 9 ͋OcLW,@ZC[Xfx-o pӹr V/#`TAj$9<(i;ZX?4McFvXpK޻׾}01g$:Nxۨ;[ͽF_Ѯӝ+'6Cs$a|-/uci3vV|k8 P ]e0ӆ} LcD C~!v<9~ >P@Xt5(`#whm뗐^%Z,iyDA@X;;wxߘHz7fK#e?Wsݳ}Z Z7[ײ/@v`yry=8;&)7âqj⎧F݂l;&G_LucFkLC8m ;E:L6LAM nلCF!p?J@(QK c0ޖdz`RK=Qܵ@\+;xTw[e50_I8[}`f[muq m(?48M87R5A"͇TF!?ݛ I2hCk$ŘӜn,{H4XS_Oo@c~2_ z}̍N)3Id@+n Ԝ`?;Z%2/å`4eX~g) |[&ocPہ@!%j`[۾ssCGK|רeي1$05P3`߇'ĤR_6MpϳPJ3Nk?C9Zow 2I ^`~G;E'1wGE _SNKew*(hډpL=Tv &Xz섷'0"6M~f?X5tϠ?b'ˤLXU0IVʯz}o!in9 -eA@.G c@Ed0aCv>=.rDMk4cUҢzA85,疯CD]A p"j}W?{uiuLϸ::뉛[2D~5XA# @Q(rҒ ?( %4%_Y ֯ AKMALE2gv(ࢯ~ZVl j%#JdPoR3-Q4#]a쪡va8*녁ge.4)(n,=/ Pn-;\8Sl V9_-J^FBҊ QbTѠKb ]IDAT9`fdGqVB!j3~(@A - ;?-H8nТ7D&;WR?CJj?޿H K/<47hVpE8MX7L+We[@T {{0QB\uE~E>1C ( hnL5s-&?bfYgCڳ?G#M 4/TyPMMm߈RDk7-+ t{~;*;L\=<ͯ7<!  -6="'8ͱ_7bŒE&"I&}G~S`1#X /9o#>s_7際 xq)ߟCӟBj$o`JW$@ 0C H`?ɳo>uhA^&,rz+7;~b ˫"l&CpG!.c떥QU_Ueܢ7y2P2@R~ː#o,?^_*7<'ۣ1S"t$w\,Ӭ _@N*L6v}s{r=\A/ pIk ?L! 2/)5Sqh^;F|ȴ<\z9s9nK0!BT:갤R7 ~N|]J+:؁V d+<{0 rf6 %!IZ'f`\U|2oYBK@fqeאMyG=\-.(V5f_d-.vF T HbO1 0Y9cG87_o6O凕BKNbCPja*}X*Zɋ(l(Nn#dw/M3Q,R]iuXlTEk1KgCL]mos{vZuaZڏS]Ү 1iox։ߥ9S[,>:;n9}ana !P^O/(0~M,@Dp !p2T`_=A`{f8nM u @h:z6u|d6P]Klǘ41*`b0gH0\zaç? 7Xikʗ+_ ܷ;s_m:`S0TMq٢SDc'Q~$Bt}=-#A e mQ7dݍ֡330Uz#}6<,\b,9IG1W6.u( `|c[n:Vo Gۢp߂>t=x?-#2pU i5ݗ d[U .[&-Sd)<A@R28쏟ࣨB̠݋]%YMKL?-_==$&j@YW*ZnJC"oҼssL{>_~_~yI܁۹v؎|_ s ;%cT$wi3pT#m 8 tΪmhi }BoZ!7߱ %BY~?c]g6i_|m]TO;in_UUfF `pK;·u6PEQ{?/ Yʵf13ZXI"Rʧ^~0~Ć@L&̒Up.\E& ]ׅS)>]_ÃWU~5x⮀d\̪}Cf08G|gn&qGi%5kaH 8ϾhPSd `)T7R؄hpd?dZ`o?ez %oÁ"so;:@J|?Sgٿ)ƈ#wߎߺ3'4w]]3 j܍& xO2Zrًƛ{]aw?~vw_;vk0dH-Zo3aY,вN9H `qg?[0"doUߠ?Sg>-8 1%~ lR`Ʀ?|_%)LG?^Iϵmn356  2%IXoAy3u)L+b7>˽=`/V~H1&;?5M$X>l:O&r;^opsnzÆ>&.36 E&J`S8;~ORnHǁwq~zd@_Vj?7o4$ SYNP6 S=˃w-)݃׿}JlI*FBamtw>Ցh )z3" ? DH$ ᧿u,=E1Qp ޴2Ic>L>TG ˳fq13c'!j_OMqa~~D%0ր‘2:F[^{wW?ՐZU `}]}v/75MHj,$]M :S Yx}xχ_ۖTBJ˗{#+jN%tA {k8 Z :TӔXp?)z/-S)$sy|@3dMxp.c&+jg`;;.Pɴ#u.&ZuY)XV1凑t FͺTOIfҒKv2ݿ̫pz_@d2uyFDJn*9Dh7&)d0^3u_-`g0(gc-RP;C'袋'13\?~"w,-G_KDME R?U=uᄫN8.(08oГ%zG⳪LBdK;}Y{~+pXtנ!__Ϗ~>\踋Lԟvj3r`0۲}Y$,v7>X +" A Q0սq$J@H?߃٧gO ;]ǟ){&-r[7p~zF9YBGÀ= W`F0 )&)1-P3MG}D@ZdпGг!/i<9}fv[w&֜rz1\n߻Qܳ {k+&P=L;#&A&"og/$ŸPa" blbˀ~"xGoľ @4`։'sjtuZkmHr&̳W?7>} wQ$>r%8q^k{7ag{z~x`TWtUW4n5| ͫ1_Hf=ku$YHHc9V@UЭ^;z | T/l+ՉHECHEu$p JV %:K̠Vۙ_ R(A+,_;tN_lg@zh h# f@]'jEJAވtyHhϒ:^QIؚ^Tpz gyYY+EhE+\@1edfVuiDum2re9p.\ѓ 0=oX^''ˢYmիS{ 7bJGvMq"eq2@:h+O22VY[; # ›Dd0Tb 3o\]g [Dсa bRB#$hftm yټϸsS/N)š] i)ߢw5Gnx[Z[ vJnJDw B00=> t2HIFK`9c/ \ 1i@oXǑj7 UI5ɾ689LgXVe0zk;Bf[o<C(~7! |ۏx M4ip=XEN/9]X{vDaFY*ڶ,e8j_=B*?}@"=S`N fGY̫p fj l+:%ȸ7WӮ[hW _g&9XͧPq,m$@9)$q_Fەlw p[SV|UPFಋ/N(Seddl0$_5Ɠty}niZw2ʳ.X*6bRNFFm`(g0_-Ow`Zzk:h`λeD1de###c=`?3y8kROx:7\|dzU&8w bnAkRC(p+\[L&Y ddl$l0ġ59VkV`'.0֖-J$+ CIk_C Z_Yԁ`ʖ>Y{D.^(\,3GlY2pFF4`3oe@OFzX>vg\P81L'j-H̏32ւ# xi",Ff=x To,"lqE"֖bK+"<:9#n` svGnu[Ps塳O)4btmW_~ue1u{t44C`,JhK oWol6> <Ϸ a$;MR z\9b; tm9 ㉾ӐNRP_o^ONaui6IqEq9%DH$ߴz~ :]o[.1n T+751\S~a_<{/(<m6-b#ք [g-Q>{TXˀ7UkeJCKK@l]ɫ?yjA¢ZH %hΌ!p) ͮ$̋WscoՍ݉{dy8~4^4_EfsΥ-h&I] HQNnSjg`]w Mϯ%ؾ?;|e/)ζU ЅmI[ Y߻6죮%mf{N̘޺cmO JGz䠲C7{pW&ޣx&)>^WGL˟6kWXLˏ\ V0Т⊅\=̋nߵZ]}nMˋK} ?m6GȃkD:Wø};?T2xVeSVY `Y-CwM]zػwx^eL~5QTwZ+saI܀6 0cGBr6Z960_|q8W# Y|ܾKW}l_7k쯺 ۄ:t$*ruW׈zSE,Xk!p]GTAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF_a <IENDB`doublecmd-0.7.1/pixmaps/mainicon/alt/128px-dcfinal.png0000644000175000001440000002277611765566230021572 0ustar alexxusersPNG  IHDR>abKGDtIME5" IDATxy%Uuk3ݡzlD@FA|$/?O38<5!>38D ($34|izC{QU=w;=|νuNڵk^{<1y"d\{ޑˁƹU#ʜ̉ӭ"FFO(j99^Sλ%y!Aۺv1 L_9#SWpsR*(W =*I=%ټ3ג $j}*QwՃ/)-?{~z)תryR ŤJE)KXejG3gk % pƓ5+lyq%=l]dILUŋf嚿hڼY)qelyWFzP=dzu <"r& Ɨ:D.+dAg+;}P4{=;<z%[Ar06ε|!ym!eಗej3]S}1Fyjq~ܹ hM_觗ǩ1?qKYt)F ""BFg =JFc((>U\į{{PǓbK2x'oyUBTVj,]c XH̢i(R9 jω P}X%w Á%/~ǮYNt/@vU(TP]st]p̑0ceX JU+VمXy:E xʕ :s+G/}Ogg.]y:ZyʊNY::ҎJZZ|?/gJLӏ8B0U ;;( gQ!<B䰎5"×uj+: CAC#rJ|"?.7'![2Vy8UʪrĂD/2^2X* TBG( DʂTwBv0o7N YQp1' N)8@pB^`IG` ߣ̈ %@,|[PTk6+}b$!͊`DkI҈$y2iv(.ѴKZ:D흙?H1b@>b9*0t:D06j,KJ' o F3+` aX+W5~$KT<.!CF(, '@$PD0<ީ oFD^Q,)Je9Eh䈢" }{ڡO2{I V`3``D4&4 ?4KDN;%rzB0!Cq r2s]H:1z ÐrT*D䚳:UTUD&`,wtҹtl8qqRfg}ޥ}wނ؏o 1i{<w)1"İvQ@(x1^r?xݑK/w$GXb ,YAchs>}29cKri5dU}*)(łTbks^,]KzØd!"t.YF_S~w_Q ϒy>ZFJEBG9ja3yA]L:0ưp:ʁvݷΛ[Ks%g IFςn!c"G]D-rT^z!{{9)!%@]Kq%W O|ߝY 5<)Q (9yٻc9- Ei"N|e>R,yOL<|&YD! qNa R,YEl{_Q6HvAC'|5rTˆrqܛΆ.Mq.ǟC!BRTKZx]S𮣋s?ds]8t$pZN/pzH5"s클OuCa`}l+H ےBS!Y1XTˆ r1Du[x_Dr/O72kڪ h?t1#Vh;uw0Lc()'}?^!#ϵ~sc ښ`9׽ !XH?^85PcMfiJvŪΒ#q_ԣ u`ez;Ywr<^qҏ4E)cLU\s PG2b b-ss?WJmn8!g!qS*aD%Xu%<‹$+aL$ \6WFaDVe\!P=K9 =RTcl6Z k9tukbW!Ɋ_;(y9+IðYs?97,\?6)Zӎ^}Qm|! ڸJ E<W H͎P/yօΰ1X$LQRюԶ=-8U/WIaKfUCX~T~WWFX1Lfkp;X;Li'*#Ҫһ};onZZ`0FNW*%QrVbgː@ q|x x"JBad/po]5VY|Y#Bi"6Cg/WO ր;+MD(⤿[).X'#QђE=_w؊/O (lUF(/5'm puF[X3T5 B8Q Q߻-kݲx9G=ha剧IS8, HiΩ*'ƪd7>|2]A{/7ǂ$$_4X r6d7aؚa7ŖN<#xI Gt9 9jwxr|';wvҷP kZH}阿9ֿM6氫/'|}g\YđRGZZ|FM Ą`y,(tunҙ/~ baC?SH^%/ʙ~o7nwEw߯Z.ϣó9OLìٲDP=]y i[Z {E@{i$vL+Z)|`P|~C+;{ IR{,߳]A9噬 56_#@7|Q1ڊ pժ:q c&\4 Qv4sDn5ڎĺ 0AOj&hꄵ PPVlGi۷`DDJܿ( rz\l;hK4n\?,R!,q2QFT: ԓAh0}]n9 |[(` XDfp$&j،2,D}D2^mϰ!@X<1IbiqÈ!хWS-ڎJ\nڝdmgnӄ1(_QjyB±Q WSo_؎n&64ʆ3>lyF4+MeW$ߕYXE>T{k[҂`Ǯ"ڜu.viOm6 'Bՙ:FXm LULF@~w>= 7]OM]V)7TW0! sT*#ڶ!d"qTW÷ ,=udKX` E:>d=چLAxIܳ-Hahr=ۧ]E? 0*=[}贻? x)*2j9!ឧ>0DA@.pJ ϛ?Hh,&/l-pH*e=[myh{MCZTyyL=xěFM 7`J:Vs_J]{ΤwpUhJ}f6G"M}5 n=]tI~V<O<{=#r:,)uʳY!u]۩oy 740zb4~N,8 +VM^׷K,D{q3.sZּ - V (9½;o~HهS*-ZW^6#]c*' r24Ȟ;oqY̲ -αQ8#P ڿG'dMm b,Gi@$NI$݇'/fDF^IԌ 62H1½;E%Rr .~tt@wCܕc<6モ3R'\zrʪTS"O}룸 Ozbx&G]2S}u䍐K759#<}38J|Xb* !wMZlpWxWbaZCU5&sL3; x1h_é,~y#Hp}%M taRS_c pνUoz ӵ2&^(fC0'B;6}\V^U)+TabFNNسhӣGOf|J51loz2o~ԫgj >7c8'ǿR/R(R%-e3MqlۈVFFiR%vĂ c tGϪ,|Kf`֟baM3wk/|Nx>CRQ S =LTR۹(atХ/JNuQl S\D}ϧ$r4::Elg`hy+{ɢk:?p30蔡D#4@L nO IUM6(TSJ/Y(ݴ1٘!86;idЅK<Yt΅=W_lh>ڛ7(!!/Jh`pl?87DXgK.M]ͦo}CvSJrM40$(!KڣxulzT#Pb%1 N] \SD^/d/LZ{wi=vFBe"D+O6_;`ۍ?]?VbgBpWjSⴹrCF`5JAVaWDq݆]4}j(Ecșxfar *DNyg| -\4kcXy٬v^9}[=C-s MI՝(&N%s]ڂ"t }߿Bj.O(Yv۬JH'UD?bg7qУr+`KQ *Cu݀#xFMHoE${,EByAyw;~b:\5XV֬t)^_*wtwvMʖ(٫\̄b=H$(I/-Uo6%gb>p3hm O%c!c>f;Ĕ%ѿJ$>]'%yQ_#N)rT^ 4g `zvXŌGF?GICҿK[YOٙԣ舅)H#e_-inq"= xP/Y6[:=k ۹[5V* ;KT F fwM;Hi%B X%1@r]dqNX#'B[[x1<&lOb2(IcxL: SE~L&"8+ 6QQQ+K%-647Tv(bb+=#koU"&0u:/gR@'K/򛣥uP(A]-g&AcTAϫhF%~nO#A+g <(8яo3[]4oa( < B;mbx2^kW?35cXϼa@tY\j2b1= '0܋U@Wc]7c؁s)yW{#%Fmt_]X2U4QτT/[uD7 X5aoD$8QvꄯM]8&F??kÌT3kܰ|2# ׎V7gP=^&M(:_~פ!ixuPDs5 :3~RDԗf?kx7O[i/¥eQػor\SAd)aFr5鏎 Ӽ5q3fd \۸) B?*U_ڍL6.sSjw*Gd+;&?k0Ietg+12~V woD߳|16=lGht*8WWv$J3m_R]]-N;hb9z5}#UĈ3w#i3E-'Gky#oU7$v rO1yc<&#<IENDB`doublecmd-0.7.1/pixmaps/mainicon/alt/dcfinal.svg0000644000175000001440000011261311765566230020713 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/alt/doublecmd.svg0000644000175000001440000006664011765566230021261 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/colored/0000755000175000001440000000000012675717731017442 5ustar alexxusersdoublecmd-0.7.1/pixmaps/mainicon/colored/v4_5.png0000644000175000001440000001334311765566230020724 0ustar alexxusersPNG  IHDRe^:ڡ pHYs  tEXtSoftwareAdobe ImageReadyqe<pIDATx t[WOeٲdyQǻ%5{ڐd2PJ,@[Z8sPsf:90 P 4ӆ6]HC$MqR;݉E}idKO4,=w[wqHCrq%E''{\%{XAo\3W_s&CLt=rx=s>":($.AI35a+ryKfMFM1 )1{Xqy*+9jDL99I{}v؇z~ H >ߺtOWrݵPRZ.)15텏}<-ڹ) o3}8^8]8g/?/Gzf9[KXT*5|=p⭿O ~> J?-wZWZ6;y0qBǺF B/}T@l@c})-xaaCvKBoVT61LL2c>0d k4d*6^e ] A!b.isͶ;W^ dO̡?8-Z`{ '쮥'?u&C%˷nݺ _qnӘ|ivY?_vXиC2>v+)`YC{B+/Ϻe:t9`յ otҖ\cNrWj/`ȃŲRP&¤ݻwdje/L; JؤVߵs|WYi. M:, ^T,6}7JvY0(рHQYwU$=v| S{Xز(g"eRK"=Xf{ǩ6{ Ȧ|]5***d ,(DᔖOYpNG=ZV41ȴ$(.%K𥻚P_BޕnkFyyyЛv(je!2I vﹳNJ[TQ!L&D5ۛQTT)^0IQZ Z]%(2g?2]dqۇ*w@U_T@(FGd4,G:96c@rrrX=*AxuN |. :j4~'cdנ€%z=x@P98Wy7Zg |ąq`tC`Ӗl3Ra1硳ow=>o㻾F+eVf <م\F]&`ODa>ۏN r1Bs~oo{4Σ͑3~lX-YL(, }_x3LF7l I ^>؉3z0eWE$uq={8\}[6uf*YSc m>_`r-j:' hd 8QuoD/:JT}$2*+%YfUTM**? ) Hj ,62˟c PUOj$ ySalv(Ӏ0M``Gz'\@u! $.DIIHj. (Wtig!>J",[#}]trLRfOd"T*-B)RCapt @ m-,9KA4+F1dÌ?Q;wގIG&Sa@Da?p;ң c6fyB` OG)[ Ս6aXeݧR#h/a B`טK&IOԄXM:j8E">-A%=]Z\4Zvg\P$s}AXNS DžmˠB@"U[J bH !C%\>,j#c2` RRJt(FS,CM尾U螑j,1L{ ϊjLMJ"2/F$bY.8nB4W8uVZ2ɕnЈ; "L4$NrbzJ %Àa!# @踪Y5(Чos\p A+ΝIi2V8:AdӘ#UfAԜ}1t{<);x:~+gLT0ˍRn"k̋0 <#WԚOdRCҳmcjL:IOk'FŋZ%NzՓ)sK Aw$b7ȰR;R$)rxmd2^u\{M`el7#v>fb5`~FSk 1*)(t+ՓK^,< _C[mKJ*TyOGN09X̌B<~7U^UwR>oVŒ\xt\!N5=9 dE9`#dbcaЋEV҃vdvfOi.TR3x3j+rV\ HHEf oN(} q:wU%H ٓco)'85e |=F9 a(@ J6I[>TUd(vQ/}m>rsMaե6:>q慩I ޻TI{H}Q<)O Yr<߾Yo=콫$]owHwzrD5l[}A"P_hb1E=)_ ѾgعUc j;ml|j gO[ln 1{$[mBP/̝mGFHBEB[?|h9CQ,Dؓ]0%+s߾odctiJЭ aTݻ*7haKb??=T&I̝n#_Uͦ/M T#(4̭>Z7mJx㉧G$)I }'1T$bx7aϏ8'3P(ކ0uPg0~ri=.SxvUm@e;cݍT/a05 j ַԪN-tHƇiҪ:F? |ҋSgqp?ИC}V]P鎎MϸJQRK;7k:27{?:#IsP|-|,RoF{1: :,Y;e6O)1>ŋw*POW")S Ixi 'ֽ9ZåZaN&Rm6<4~J>7e{gjD$M%?s<4 +?b@iE+khI{_v_+%{?9ֳ fAz.|Y=;{끓AIuӟ\A}_|MRY# Q/VHrov6Jd]Rˣ/m׾;./!UvCm#&뒒 Kۻ_ HG3k^<3V{6WϊPg}ϝHĭ_xM?e6L7RU~9uz>1uk+X#8TwS G 3Ӓd8ޓ1Aw|U3* ]Kc^  {xM7^8DG_>4&Q4յګkG5jY\~%șlLA VfxMc4 \wRΏr0s~u%+o=vtۤ<~ f+ P]aƆ\f^cG |ֶ}#۰*lKo;:=9eWGP*V:7H}.ICYM_yb@}Mgp6|QK&xLCRXՓ˖h-yN:gCs_k # p(աyi)99~eSxuvqiAp͞,uܬyp%IkV,O@+M(C\=c^4 _EL&I0@wwPŔ،6W;yqȽ7~" a^0ٵ^ 7us@BP(\iiox9LLz/.90(fv\#{c;oi˷mUkk`^%@EGMV3$&& yYW_2^|)z]}_yKtyokKPl4ot j=Ø@eãQyTKC1]= kt9ZnG&$8u_帢 И*]nQ<\1P@q֚ؿ$Eϣ^l'wA>ߪ~O{Bx.`IENDB`doublecmd-0.7.1/pixmaps/mainicon/colored/v4_3.png0000644000175000001440000001550611765566230020725 0ustar alexxusersPNG  IHDRgh, pHYs  tEXtSoftwareAdobe ImageReadyqe<IDATx] třhf$HIdY-6` 8!1`BBM&Yݷ<솗l^ 6vsuY1:f4W_S3YC2vLwW_GU7pbHY/q-U ' =^*v $C(/  i* QEUY 2EJ0r93dݗp-EngMAF<#8/%p`̂Q!ۿWss$!٧dwLq_rJKJa,pTR?;i-@8F kAa-)n{wAFT\iܹs-((ܱhp866ƁANC{eP]xX [\L3@3Ju*A]f@Ic텉d4q ^Za(1K![ˢPPRyCc0s 8 IAnDSq1 a8:N ʂ%E(`LmNu؜ReBv:(^|u8xv5E]SA6SϥmxHQo^#szM4GЅJ5Wr(**#T1gMԳHϻ^pS.V#7'$'+kQnBۡtf0GluaZJV%'7h+.g`H`2t+/Y;Vmʔnt5:no*g0Uup~ x XgN^QQ'j3VQ>rVLq]4VY;E1Qݦ/.9ڎ )V)PXX3vQfYJJJ _^[~֟w±Sܛ ZwE<:"l6v.<_ɒ=g |㭨0;C'sWnillt j߶kYc#^&Yr Y:KWT bĥӓ!=_|zPvdOV\KNW:1AAA v^qd5XIs?u_:FXa`lڴ)To]Y4 gf; 0^5HHtҵW3g[f# ʫ*!Lww7 c02`,l,'a?9y",a$^rAvyA/}͐0xUXǜ)>|=34ӗufgNȺ󎕎Bс]x,lq)G|Rrvj{DժNMEzգy5ˌԬXUUiqo7rJIN[H2ú~:VH u`p \n-YJ3yZkT]ެD*Nʟy)Ɨax,X{m?[XJyyQvR4ԉϢkr V7QJJiX@sOet7>}3gxcrهfק^#K`S7; o{ N!d<,@v``` j^%'q=Ԅa!d)kaWJهnc5 xHozxq+ÙjZ@Э,d64OtVg"Lvck.pwj\Vj S lve-PlLң9NilC;^|ެ+k'0B#-Gsssѕ_;BϪ3IY-GdWYd,:QZ5G$U `]0>' [3tIS0Zfd(p k5_C 7)|p}|f_i*.3\91.p F52™tqܒd-VbΧQk!?#A#(`R䐝=g sɓolSvLv$Jɫ>~6MYͭa`#sB K 99L9r8WH!YPT¥ јDb&@aG#;h4F"x"ɪV0U Q ktm(4ծu !zb$Fւc0 ѢMFLGKrhQ KȨ:Wyge&lBQ7I̸Ycs(N? E!ψ%`K#ƗN:*Nv*'Lni繷SQˠHUah9[A"VAbc,o09ᠰ9qK(vq5G\R<ֆpL"ؤ}q IS.}GZ0B `B%q|dlH/?(h@QT+uMQ=S ,sIS!צ'Qb hDNpdU @(98"JCE_.LJ#ozP<WQ&FUΆ;0ШDF:&)JVrp GG$D ҀoY%xGbcq'2on%glga>W\*Vb''oj,0ўĀJ ;A+yH {={1$~_gF&@i&mq)G@ {J $&KQe-oH:\o wwƪ4HKjC~EzE@MQAQE YH 6쟻 ;COo3~ޮCd38達bAHQYWX+QW0G4P;:^A {HW-$AշW_)l9Qu I kF|_xvF鍗aK_9kSH)o}j4HIC]cW+Stpoy1uoz϶#mi@{+_J$hwgeђqr!Y+aЫlanZތ9N]g*a|>R1 <:GQnZ,c(049n<Q,ZFUC;L{XW|Et9{ix.?C0Ou֕3;T6 !ʮk.Xlv57EY[6/P@R3!]c|X?o6lBw~z9]mpFE˩ۖt'.p]5(EJ|ɏSUJDJRP/,z MUX/ b}HT,,tt'.z̹Q&SyZ6Z^߉CKX3>z#@rzd*Fd*B֓z0Nka{8wg3w Lp>дjc7M;8:@ޣ?e;J ~ vF$(#ić%2Kٳht(z?a{!cfC?NH(f&vi = |ϋ?#RilxdF/> ;L[Q/qØn.d+m~Ӡ{ù70ҪM\%4|}=M7sud"m0 < gP|hB*r<=@=_Bͪ5~s'3E3@] hniVuténq3 ;{r:uB  K. og_~)$X^nV52hs`v,e?S=ş|{;E])E^&dԸ 8Aqx嵫+{a{ .\&!@$( L.fm܄oc[_XB0 &Sk;/BswBZtL嵚-h%|$)Oc]+}vSH_Qi$v{`6k.o[> Ko@=.1X'q$_TyeK+/GU ?GfN@W;818{vO8xUy-uP[¬ B=mAH7b%ă]#]uߋq>Wݕ&׀;y^>kwT7AktaIσYWko[MKq(\p+{+vׇfF LF.-@a^cK!(Q0|$-SM<BUsb~c~aUk}|pl (u#)!+ӤxówPvMF u>3YP0 $IQ`T1]f +P8x`TX{m6ǖkU/Z{VtwyH=¶+N4LdhM gRf9qiC&<DG 罂?~1 kUy>4RdԀdTR,$*>EeJ@Qem7M$:AH%tـ)}8)2jT!ACLW 4<0 j/kƅcp8@o P| @3ZRmoXIENDB`doublecmd-0.7.1/pixmaps/mainicon/colored/v4_2.png0000644000175000001440000001467711765566230020734 0ustar alexxusersPNG  IHDR_^EP pHYs  tEXtSoftwareAdobe ImageReadyqe<LIDATx] tչFZdyf'N:!!&!%Pвe+ByJr(=}4%@YZ KHH=!dKp8M,Y}sG3HdY#iՙhن,l+K`tB_؍0NYZ/lKuWhHZa|aovogP`~Q/Moي֬Þvm~|mKj7Ϙf w"C  '+~yI 0 c`x׻^.'@(c_u-];:vEybd1)R?sގIўmcd~& .voLbjn]{g_"饫reӰ۵, ߆kg\'<LJ`μ P%`hI;1{lXƔ,/e A'v ׎MbGTZx5pg =&WAg6\'|9|?MujaAo^i {x,ߘV ?v JZO$@rCxSj]H/|]^uTш cR[y<Hϫeod5nn9ßǻ?倭j?YG`ҘPGA7-1?ǎ 4|pucjajs.](Iȫ5'$=r `1f5MN }NʬcX?a5# HggW+n, [9SNC|P(O3\Cث. < oYF4nrf`R9{_ ,3mppp|y~<FèqVui_.zvGO q=o5~W} NMyg=]= Uv"bN\ms߇Jkʠi䩠[dv"4/2 (<Q6nw.?9BQǤ *B='j\1geٱoVx u bڼnȖnV|+9koa MA7ޟ,LdwNI] +V++[Ǧ[poL%]Oܰ\@>' H=F*r ;Һ1 nN`ҭ]A&I0cU!pZq~Þ?$gT9T![hq<-M] (7S ja3&ԥì9q+;;g~!;DtVuj`?zVԃ~PNi نL"3v|+\{A=CA.\fE$!'!Q BYqJVXILSNڴVFs :8}ѹ$@?yn [ѠLځ a ?;s9# a^F+Lfm $E1pr (_ ?y('$S;H@J)~z쟷%> jmYm¥=L/?743L~α*WHkp `B? iPU9& T†=SUObvt;(G'Sm/z>$'`1fؿ+j< ̖v/Ӛ>X4dpݺOt^AmV;U;HgSӓ)T& 3'nz!@ ~ 4r(ʨ1e^0ѕq%8m ҄qeTOQv/爴}uI`aHd s,"N!ҪBMg|!%v\vmx3l/?op)<>_Si^'6Ք!J$3tNL;0Hp Tɧ!^^8#9z ?O& 6 $$0¨#dFIT;^1w"FSFOCG6_Y|t#Ӊx@T/>EWF@d/IcLvrC:jO`E#u())Q ]Y{~\; lZ`~Hl>(T73 l%HTWE%^%/e:hz&Y  GQ-bP6TR) )騂+!k$8b* "R8 ģ}$nD$^"\|V䇔O_{BxV =&~9IE$ N PRA ~(5  Du1Щ6C ʲ_kC[ڨ/5QL[u5E3Uc( QDb[x~)իQ_ܼ_:FxGloy94. c+hye}ݹB+A= ҷH=уCNӌ%*_8IG4It3 ^P4r1I4 <@NPQUS9nXh6V0 O2Zhj94N72yUN:}O #B ~Ȍ3'Jꅂ)bRDHr )/%Gw[pat#VEk qe] }F!zDF4% )^aQ/D#n=U+;bN I R_1Ák,SP$ol{Q+z^15Q$y`@m`d-{bdj*b3$3&p^:Hl G8 {.]PtũB\=2E^Ζ`oA/=!뤩[mUD}eM&!IBLC*D38? 4(H`<).PQH!Wɕdm*yYʤ~˾ plݷC=rsU?*l!j$[å@r6 t.Ht.*E 6rxl~ѡw&(vO"CoX?a2$$""N 爀G4GXt:}:d3n54*p/#R ܤ R$VIKVˢQ)SQK9XWcJ cT=ͽAZkPi(^c;`PTBWgŚ"?Ο3pٷ.7@fѩjsRLϱŷV뿟6ymհ@Ʃ7^(ćyo',}HPLG:э*(ԏCi8QhxWFۂO'&T˂G=کO6qvKi2Ͱ_{ǝwP#M R)[>z08Ak ÔbzYE'u|~)lU΍ϊL;fT??_İ=Ūz9cymI )3DKi.jGSY+VYu}*'gˎm_]Γl868붽d?5ɺtǒNvcG?LyHx:}663*es(w)W5 ;41+U0r/ -ֈ}ޫI|ѹ.!lUGgOmqyw n{7$>l8) ЕڀOjNaS~ .-/oR-Zh 54Dpa9WKoϓ_g/Т LR kG|/p`On[O;57ۆ7=ZDPc'RO#W= +g.&On^ЌmV=)UWBFyj FZku@BxxS({ӂk.Esrb -cc? yVt_wFݓ1g ~jԫX%4VNI hPJ} *JcGS19r&'c ègǮq zP؏փ`1Ν܈c&CTOU4=5֣a^ y510퍑_V*-.4V @W_q=ۭa3&-2!5{-HL7\ĝ/GS/=\L7;\w~TLU7y@L&@(}9릠\}/yi/A (sQc}Ǝ)ylTLU.1Xf;-ȌI-q^ 4^PlsR+遦ؿ{raߊ siJM穭Q< Fk~H>C0T 8I46]; {Bgi<wy_Jv`J7s>IENDB`doublecmd-0.7.1/pixmaps/mainicon/colored/v4_6.png0000644000175000001440000001723311765566230020727 0ustar alexxusersPNG  IHDRe^:ڡ pHYs  tEXtSoftwareAdobe ImageReadyqe<(IDATx]yl}f#x߷(uٖhۉlNa$ îhu.?i uAHRmMq⤎8,[m]EEJ<^3-I)p۷;;|k~3$]+7[+IbI["YyRj@+.A4b"EQ/*AF DcwS|hW'EVMkHȤU dk~ P|lV_j^kkCq$>ľ gM*ީ"Nk=slOj7  %b tb"g>R 5BDmAD97Zvٰcl^:ϰ0(+b1V_9WŁuS߶c}A0yc BEDhuKZ/Ɛ{g@cJB Xbh"4:0THeKu9AM"7޹~!n,, /kz"lo:>.c4ow~ns\/QwISf{v/ElmCSnSPJ t|<]IT9XzٴB>^Z\n}N:Hq_Y4۩|/M}&]n:f5!衺3Ise=C:c!ljb2u8hseLWy\g7LvLB}mtq"(SO >ڊd*pv*qc:@_ |L,r5eq,jdP\Bsh+O15ڧhA ڧSBOq`/),ۧI/9ƬQtrtӨ3V u1(ȠXmBV򭾾w67#J)9و$ڄe5dcBD㘒ؓ 3$!H gI\ .  .Ҹܵx1 7a 59 8Ő{ &@ !TX;TU."Kh7MMxYm]@7ޓ*++=>1NOȀ qMOi)E|?RA?6s7/Wze52XpZZZ@COHӄ$vt$1C@H1d(Qb<+2zSسMF0˺mxnՋ{;PIduʢD3 E)iMT TSyݳ eeek3 n͜1Vmʠӵ&wz0TWWs.c )t0,R Gr~ˍޭ&E5cƸKFmv7 ?$.;7g S|-6Ck]ˍDoCœUoQ"YLݡD s{;:ր8K/k|OY؉`YG;эМY^~7מEooێ[p eXsÂ3x` U99tWͲJ VP3hk*s.SJxSߘ6`ao޼AǙ\lB6Q圉|Չ8>Pc{#1zӊv2JWeD(EykS k qlw8c:ouHPVw3ggxbdbbg/cl)x3re F\Jo@ɞ+_`9+ańYZzNNqܽ35ZQv Gcj"J(V]Icw<eM̸x"1I6 [XΣ&-CAd!B];~~ ÃMxyt :\wvNÛ[7xi;J Yvi6#Rҧ (OV~tpYCs-46yͫ90n"8}b\Oe',zڎ!^R =[՘S֙pGW :ZY_ҁ~k1ZhYX%xbs9kqzҪ_{Fk-uBN)"/جćDݫWs!Vʔ)Rβ+%GX  :HȀ9:ق؁wN ؽEd*2 P9 X'%I^y 80=R &g/Y3!?=?g(Y= u6bhh(0؍Q ]4c˽rs`ꉝNbdǎ#`r+<4!0BGr [L26@e 7_kz-20h^%Óry$5P3kc^C#8EٶM 7[ɮHŐ/,z QKRƸX1&Df;#1$gM)wpNmii W)"K@B8J_zrys8Vq Op:]UTT`WˌK,}8YǂOWH*Euޠ\kxKdZT&XfeJ Xe׷p%C\`ٰMs=7 oE\bM$r|{Ǘ*PPG{Ch$`DE,]`_(@cGp%`\CՓ.S3{TemPEQͷ##¤U Gw5FKaDAA"^^b{!>L7ZpӶya㗺% t]l ;`H9^xU1h4L&q.IBMjoH! w:i[D#,R9ǴMѣڔ"na28n8"Ru<r uzgʁPiS`PQ5"Ǻ,7>"%$Hq284ePYF#j &z$kPJh :G#~F W/6RKF;W7ZiXHS/^("Q@fxv ASrB!",8JdMGMJI?əfOF*u "S𵒨k똵P5/:ALS:1#(YeT)Y*$6&TKB&3ӕ]Uz P,|]|9,+)'eb:H$nchr{TKX] H!oRW O=u1&v\:p!r#tCdɭc9dD! q& g"w6zG4B[IH2T0ÇMҴYb-[U,^.|*%; @M1j;H>QF TMZ'+j+r>G (6cPJiEUsŘ'Qkӯsdp|# Q!>C\E9LIm41\`YؽJ?y1"/H`Q]H9 aڂD$7[*ScS<5m8~r A@.dZk6(%Z_ħG"TE}:FexCX3%*^!~$ ;;qKRgI(+P+iΪ i9b8f^Rŗ) Uc\y.T7EjE|ʍ߸ׂSMG`c! nȳQy9γb>|.˦W@.{\UV34ZWȵ> lcI&RGT9KwLD*af}`mG`a[7m?s'ӕR@j̚jRb[ux3 /z@X7{k 2yR4$S1Deα9wL%JvdʝH; y:23)S1 J1yX??E--M, Qdmq\/,?\U2-sxyB ~E1y!q)8I ,$ }A M]E1k-KB Y9)^1ჃחzOλ3;jej1v~²Db''.⌔RQ2ROv~bbj :s }Ѣ|w} )GkߺRY[G$Sv~[ZC\`b'(:I h%{F- }F 뾾ˑ3ͶO$ dV9lQ6{QNJz?iL|z%?0cH: +S DA3{vƭJD_D/&JdKV"^溨vs6@YA霔#3xwZ*s1J(/׻ydpӉLF#7/v֛'c߸i+ Ea '&Mb]i cD/9oVjm"tGK x4Pjc5{#7KE&|nJf +,af|f1ߔ?y ^Xg8H .YaoT3,zuq;ESz'؂uQer86)ĬY+c1ux!YG˾gBGuy2)rWpF ]JFJЭn %00vVai[D)%'K|D#b)YvO5`b)P@2晱ěu08;P[O-`\c]-iM,w|p뽈sxrpŵu ?\D6pػq|z|w)Cb%y%5oGwkڒA7z:H96ۄU=/_?g>P93^{SzŁ c"oMsןC,}ծe=_B˯ /T]H$st36>T9vo9>}  Xt5c},X|Yu=έtY* 1:iE+]Yu-7(d{~XBȐ)|o_} ,V!gi~x`2U +_Fz6)V*col>[}=6Β:!P6)3O-jH ߩb:Gf膺0!Uys]+$vsI)*+7&{BD) qDȽP4\|vlm:vkb;_}3ؙ {+/B4L-z MJ,,wN{脅6ȉs-_"+`,F"@K2|@?\SPzeճLMjq,@Q ѳr2V[e'jm^ܛ~8>'HPR\?j ? <] \͵E7sK⋷(:B) \n|٤䋭)Wrsk- w-a.3h>co^#ҽ"<^Ua w6$ϝ J(XyBM_dg*AOr_^܀O{|Z&݁UpQ/G$Os,|F_2c(G| R2WUK7♳.m>Qz)==qOnƏNB&ʭ#&, ~3ּN|e7<ܩ8.Ϊlzd޽k*֔r`MxW?oU4p*_?Ϙ?]]zJu Qo {{ьNI4}B~g(vtWjEкֳStDHpA&-QWrfr/\^:<[{o20:8kNsyqK (Y{?)&#655z  9O;pP}hItI'[n!gb``caketK~HR@V aJ> r@ε+\Z\W' 2ٺ1]W EG0<Қ`&-֥]<=ʁ܈ZY3@>[e58ѻ wFbjLxa¶` IENDB`doublecmd-0.7.1/pixmaps/mainicon/colored/v4_4.png0000644000175000001440000001514311765566230020723 0ustar alexxusersPNG  IHDRe]U pHYs  tEXtSoftwareAdobe ImageReadyqe<IDATx]y\G}zcg[ڕVuYucc)\_IA2$e*EP1|#cccK6`Z[,jW{ưwfv8R׾ury:3<jfg>ѹ.{AN*QUØ \"w5v=N?.\TXJ$ҿ|pѠşTֺæ{Vׂ8fqD-6ve~1Ai퇓4|LfՒ;?vd?c=g=Sl^[2cQD$InxN4_"IJ#y:17T-TnB\AifߝRnAq΁=~Ï}a PZ6?ܱկ~;WH3!!!L/rɓDYO9@w}*`=O irF#'75ٚ/+C)”ϕk_FЭIQ1Ux\H ܔhI h%o4y$=!Fc(hQPP5xD6M>Qp(-,!SHvb3,ՁKušP ̭TiAhaת eʒ؃^r8kN4uOJyT34)e.|OGvۤ=1Iz8;FJ'+q_U_C*SOz//I‘0"0$;l6'2S[;"j5OGWH^fΜ~ll?, }UUjjsB011#\$:Xe ] 'ՀdE MY D CV!Fk ?+o9@$fJ١5NtFpYKee%nA0ĥqfΎy[EZl qф֘$wNaJ& 1PJ=>@}kry߳I%E izva?'.cbFքV8&kZjc`.e h8RVSdk[jBE,\.>~:GFƕw4bZM#i J%PH #P$cd3¦:;/P`@)F Nmm-0s B B5ih?|odyQucX*P Qt[cswEXMk;[ݲE vˢV&%ýݏu0b,HEj<]kRQD4=+P]]J+◌SFx^|#Wf1*yuM ,s$ZjIܵ\DtSRo dYaD04Eˍ v.'Zj@r/~nggs+c!&rC= ̅z5hk[`"'|ż ~+(/Y?Y7,zMvԻWUGRcp,P 3[֔yqjj 'f0>x/90ON+.s[Sw^Jг]:=E'؟y"a=$F4>TGzO g[WL?\[d-:; l]\R.LJy8.gmު)e3+s7g?g43e1.2_w.X ̦bTak>$"O l ED2&}9ec[E&RCCC8x1ڴa!sXR)2ziMm,*~qɍCcY|q[[@d1ßl_&/g2/Ϟ:B/GKKgI# ţ82UT/ 8o< I48|nҮn#:=2;yqNd?^W7~kkz0 ?[:&]Nmg,`1__ `0SAƔ:w%eɬg >) *JSs>6?[梼ↆlv/kcY P49D܎+~era3ÜnӀp7^@^lq)1gR29Uac:t9aD r̨.9Os 0 L M%!D`k#[^W jfB+`#Qb9%!zEa:Ƚ!՛ȊK֔3N(q]Bpm|jD^X4ŕk:%&ZQ [ "$Q|;}namfQe9~}&љ&4S+œ| {4"wU\BI(W358jwTy- ]L72\V(~F!E 4RFs %%7pA*:ʀ)@߈AuF0<@wse5 3]քn(Tdr+w)u(*@QKO(҈@z6ԎsȍMIQpAϴ׸e/{<lxRaٲ)E%HK_xH[UYA0 WN1nQcgφEC5VQqcr?- UPCH\a&b9=zvc4a?B D\ FEp8-6K"e ȫxE=~O_ֱRENN[U~LQ-cI"\w"xAPByɁ*S(H3τ=MxhQj`*+ UM"ZulY_+,]sZW\CzcLrn*T[71/Qeups.b0l\B"M{g tYؘ(HH-T9 ^QP25ˉ`r ~5PfU>$ 0%D]x~SKffA(Y,KTK c`04/ V \_+9 tN>l_X^Z<ɩ01/j쳡BKZL|AiuTkf^'f*M~bPQrLnJSO/ys .:,Fjs*GĪjp$^hn̾]1uT[hJjwˣorܱ 4&4/PȂkXTni^}^/1>[|ʍM˙1fۥՆ>ei)MyyfS||΢{&QK-WOZ08{G#|bs`|=3|W Iz*Y):h󢹡J^6ǩZ.;0YϷgirz^pC(|C0b(h>ZN_Ǜz2h^SηUgN#;:n \)IUW吭)N֯%IfA8nzւWzt]2 P %975o\]}0)&$ܿqA?*wgN|뾍9c_Hh+~T/v #<3H^'NOlv bkgOѼ@֙k#zNΛqC{BZ>27{ /Wxqh~;njNZ6(rYʓ"juJt6;[p꾡x4cT$+~wuW߸}YTҔj,2=5+02mlm<5TU:nk*mUiZVSv;>@ASxefzшOC-gyRJIENDB`doublecmd-0.7.1/pixmaps/mainicon/dc_192.svg0000644000175000001440000003406711765566230017522 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/info.txt0000644000175000001440000000035011765566230017500 0ustar alexxusersAuthor of the Double Commander icon is Андрей Гудяк (Andryei Gudyak). The source file is dc.ai. SVG files are generated from it. The "colored" directory contains some early versions of the icon with different colors. doublecmd-0.7.1/pixmaps/mainicon/dc_256.svg0000644000175000001440000003431011765566230017512 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/dc.ai0000644000175000001440000130231011765566230016707 0ustar alexxusers%PDF-1.5 % 1 0 obj <>/OCGs[5 0 R 6 0 R 120 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream application/pdf v4_3 Adobe Illustrator CS4 2009-11-23T23:45:51+03:00 2009-11-26T01:53+02:00 2009-11-26T01:53+02:00 256 256 JPEG /9j/4AAQSkZJRgABAgEB0wHTAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAB0wAAAAEA AQHTAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhtR1TTN MtWutRu4bK1T7U9xIsSD/ZOQMaSATyYNqX59/llZOyLqT3rqaEWsEsi/Q5VUb6GyQi3DTT7kkm/5 yX8lqf3FneuPF4+H6ueS4B3r+Wn3fchD/wA5OeXqmmlzEdiXYf8AMrD4Y71/LT7vubT/AJyc8uFh z0yZV7kMxP3GIY+GO9fy0+77lUf85NeUajlY3QXuQCTT/gRj4Y71/LT7vuVf+hmPI/8Ayy3v/Isf 1weH5r+Wn3fc7/oZnyN/yy3v/Isf1x8PzX8tPu+53/QzPkb/AJZb3/kWP64+H5r+Wn3fc7/oZryN /wAst7/yLH9cfD81/LT7vua/6Ga8i/8ALLe/8ix/XHw/Nfy0+77nf9DNeRf+Wa9/5Fj+uHw/Nfy0 +77nf9DN+Rf+Wa9/5Fj+uPh+a/lp933O/wChm/In/LNe/wDIsf1x8PzX8tPu+53/AEM55E/5Zr3/ AJFj+uPh+a/lp933Nf8AQznkT/lmvf8AkWP64+H5r+Wn3fc7/oZzyJ/yzXv/ACLH9cfD81/LT7vu d/0M75D/AOWa9/5Fj+uPh+a/lp933O/6Gd8h/wDLPe/8ix/XHwvNfy0+77nf9DPeQv8Alnvf+RY/ rj4Xmv5afd9zX/Qz3kL/AJZ7z/kWP64+F5r+Wn3fcpN/zlB5LDHjZ3JXsSCD93E4+F5r+Wn3fc1/ 0ND5N/5Yrj8f+acfC81/LT7vuVIf+coPIpP762u0FeqJz2+nhj4Xmv5afd9zKfLv51/lxr0iQ22q pb3MhokF2PRY/Sfh/HInGWEsUo8wzhWV1DKQysKqw3BB7jINbeKuxV2KuxV2KvOfzB/NC503UV8s eVoFv/M0wBkZ94LRG25y06t4LjKQgLk5Wm0pyHyYJJ5YsJLr6/5qu5vMutdWM7kW8RPVY0HwgDwA pmsza48h9jvsGiAGwofj8bo1LiKAcbO0trRR0EMKL+JBzClmkXOjp4jvaN/dn9v/AIVf6ZDjLPwo rRqN4Ojj6VU/rGHjKnFFx1a+/nT/AJFx/wDNOS8QsfAj+CVp1e//AJ0/5Fx/804fEK+BH8ErTq9/ /On/ACKj/wCacfEK+BH8ErDrF/8Azp/yKj/5px8Qr4EfwSsOsah/On/IqL/mnD4hR4EfwStOs6h/ On/IqL/mnD4hXwI/glYdZ1D+dP8AkVF/zTh8Qr4EfwStOtaj/On/ACKi/wCacfEK+BH8ErDrWo/z p/yKi/5px4yvgR/BK063qP8AOn/IqL/mnDxlHgR/BK063qP86f8AIqL/AJpw8ZXwI/glYdc1L+dP +RUX/NOPGV8CP4JWnXNS/nT/AJFRf804eMr4EfwSsOu6l/On/IqL/mnDxlfAj+CVp13U/wCdP+RM X/NGPGUeBH8ErG13UiCOafRFEP8AjXDxlfBj+CVFtX1BhvIPoRB+oY8RT4UVM6rf/wC/f+FX+mPE U+HFoavqCnaUfSiH9Yw8RQcUVZPMd+u0kcEynqskKUI/2IXJCZYHTx8/msuG8n6qpj1XRoomb/j4 tgEYE9/h4n8Tl0M5DRLSnob96aaB5r8yfl4Y7qxu5PMHkpmAuLRzyntgTu0ZPSn8p2+WZmPMJ7H5 us1GiB5CpPoPRNa0zW9JtdW0ydbixvEEkEq9wdiCOzKdiOx2yZFOolEg0UbgQ7FXYqx78wPNSeVv KOo6zQNPAnC0jP7U8pCRD5cmBPthAZ44cUgHj3lfTZtJ0p7u7cy67q7G4v7p/t/GdxX57ZpdVqTO V/L3PWabTiIA6D7/ANn3oo5hOcsOFK04oWHCqw4qsOSVacULGxVYcKrThVYcKrDihYcKrTiqxsIQ tOFVhxVYcKrDhQtOFKw4oWHCq04qsOFVhwqr2OoTWcrMoDxSDhPA32XQ9Qf65IGmucBIMw/JTzKf L3nOTyo0hOha8HudJDU/dXSrydK7UEiKQR/MAB1ObHFk4o+YdF2jpq9Q/H4+59BZN07sVQVxrOnW 9w1vLIfWUBmRUdyAeh+FTirz3814bzzGNBsNOgkuLCC9a81B+DJxMMZWFSHClg5kPSvTK83FwER5 udoJ44TuZpKrvSdSaY0gYItFQmg+FRQHc+2aeWjy3y+530O08AH1fYf1IOTT7tOqb+AZT+o5E6XI OjbHtHAf4goS29xGKvGyjxKkDK5Y5DmC5EM8JfTIH4qJyDYsOFVhxVYckq04oWNiqw4VWnCqw4VW HFCw4VWnFVjYQhacKrDiqw4VWHChacKVhxQsOFVpxVaqO7BUUsx6KBUn7skEEgc0bF5d12YVSwnp 1qyMo+9qZMY5Ho48tXiHOQ+aIHkrzM9eNn08ZYh+t8n4E+5q/lHB/O+w/qdL5L85wSafqFlp/LUN KvIbu2HqQkH03V+NedKbGo98uwwlE7uPn1uCYri+w/Hp3Po8eYNLIqJJCP8AjDN/zRmU84jba5hu YVmhblG9eLUI6Gh2ND1GKpNckjV7uhpVYq0/1Tirub/zH78Vb9WT+Y/firjLIRQmoPUGh/Xiqg9n Yyfbtoqn9pVCt/wS0OKpdd+VtFuan0zEx8PiH0k/H/w2VTwQlzDk4tZlh9MikGo+QrlAXspBKB+z 3+7r91cw8mgH8Jdng7aI2mPkxa7sbu1cpPGUINCSNq5g5MMocw7nBqseUek2hTkHIWnFCxsVWHCq 04VWHCqw4oWHCq04qsbCELThVYcVWHCqw4ULThStAJNAKk7ADFBZDovkDXtUYMYjbw92cfEP9jtT /ZEZkQ08jz2dbn7UxQ2HqPl+tm+l/lXo9uA14xuJNiQxJH3Div38syo6eI83VZe1MsuXpHkyez0D SLNOFvbqi+Aov4IFH4ZcIgcnAnklLeRJRiW9ulCsSKR3CrX76YWCrzelORoOmKu5v/MfvxV3NvE4 qjtB/wCOXH/ry/8AJ1sVQF1/x1rv/Vi/4icVdirsVdirsVdirsVUbuztLxOF1EJRSlT9oD54CAdi mMiDY2LDNd8jyRBp9PPqRjcxnqPo/wA/ozAzaIHePyd1pO1yNsm472ISxvG5R1KsOoOa4xINF38Z iQsGwpNgZLDhVacKrDhVYcULDhVacVWNhCFpwqsOKrDhVYcKE00HyxqetThLaMiKvxTEbDxp4/51 y7FhM/c4mq1sMI33l3PU/L3kTSNIVZHUXF3+1Idx9/8AT8cz8eGMeTzmp1uTLzO3cyQUChQAqjZV AoB8gMtcR2KuxV2KuxV2KuxVH6D/AMcuP/Xl/wCTrYql91/x1rv/AFYv+InFXbYq7bFXbYq7bFXb Yq7bFXbYq6uKpD5h8r2upRmSFRHdDcEbBsozYI5BvzczSayeE7bx7nnF9Z3FnO0E6FHXx75qMmMw NF6rBnjljxRQpyDctOFVhwqsOKFhwqtOKrGwhC04VWHFVhwqynyj5IuNXkW4ugYrJaE1qCwP9cy8 Gn4tzydRru0RD0w+r7v2vWLOztLK3W3tYxHGoAoKVNPGmZ4FPOykSbPNW2wodtirtsVdtirtsVdt irtsVdtiqYaD/wAcuP8A15f+TrYql92f9y93/qxf8ROKra4q6uKurirq4q6uKurirq4q6uKuriqT +Y/L8Oq2xIFLpB8DePt8/wDP5VZsQmKLk6XVSwyscuo73l91by20zwyji6GhzTTgYmi9dhyxyREo 8ioHItqw4VWHFCw4VWnFVjYQhacKrDirJ/JflJ9Vuhc3C0s4jU1Gzf19h/DMzT4OLc8nUdpa7g9E Pq+79r1mKKOGJYol4RoKKo/z65sHnF1cVdXFXVxV1cVdXFXVxV1cVdXFXVxVMdB/45cf+tL/AMnW xVbdaMZruS5juXhaUKHULGw+EUB+JTirFfNuo6hod/p1tFP6y3sdw7MyRAqYGhUUonf1jmNqc5xg EOw0GjGfis1SR/4x1bxU+3FP4LmH/KJ7nZHsSP8AOPyVovO92G/ewoy+1a/ryce0R1DVPsSX8Mvs /tTO084aZNQS1hY+O4zJhq8cute9wc3ZuaHSx5b/ALU6hnhnTnC6yL4qa/fmS4CpirsVdirsVdir FvOnl4XcBvbdf38e7gd/9v8Az75janDxixzDseztZ4U6P0H8W85bNQ9WsOFVhxQsOFVpxVY2EIWn CqY+X9Fm1bUEt0FYwR6h9vDb5fdl2DFxnycPXaoYYX/EeT2awsYLG1jtoBREFK0pU+ObUCnkpSJN nmiMKHYq7FXYq2AT0xVKdW81aBpSn63drzHSOMhjkZSA5tuPDOZqItiV/wDnDYIStlZNJ4O5oP4f qyk6mPR2GPsjKeZASeX849YP93ZxJ9Ib9a5D815OQOxh1l9n7VKT849fW3kkEEVU6Ci+BP8AL7Yj UnuZfyPH+cXsWmafd3mm2l2966PcQxysgjioC6BiN17VzLdDIUaTewtBaWqW4cycKku1KksxY9KD qcUK+KvPfzPA/S2hnuIrwV+b22a/tDkPe77sT+P4fpYYc1D0Cw4ULDhSr2WpXllIJIJCpHau2X4t ROHLk4ep0WPL9Q37+rNtC8021+BDcERXPj0U/Pw/V8s22DURye95rV6GeE77x709IIND1zIcJ2Ku xV2KtEKwKsKqRRgehB6jFXl/nHRjp+pM6D9xMeSn3P8AX9dc1WrxcMrHIvT9larjhwn6o/cx45iu 1WHFCw4VWnFVjYQhoKzMFUVZjQAdSThCk1uXrXkjQk07TVmcAzzCvL2PX7z+AGbfDj4I08frNScu Qnp0ZJlriuxV2KuxVD3+oWen2zXN3II4lFanqaeGAmubKMTI0Ny8s80/mXf35e202ttadOY+0w+n +P4Zh5NSeUXe6XsoDfJue5g8skkjl5GLuerMSSfpOY127iMQBQ2CkcWSw4oWT/7xzfL/AI1bJRR1 fWukoU0qzQ9VgiB+YQDNo8Xk+o+9FYsHYq8+/M//AI6uh/8AGK8/4nbZru0OQ97vuxOU/h+lhZzU vQLDhQsOFK04oWq7IwdDxZdwRkgSDYYyiJCjyZz5V8yi7VbK7aky0EUh79gD/DNzptRxij9TyvaG hOE2PoP2MlzKdc7FXYq7FUk826WL/SZKD97F8Sn/AD96fRXKs2PjiQ5Okz+FkEunX3PKGBGx2I6j NK9ksOKrDhVacVWNhCE88naSdQ1ZKj93GRU+BNd/oUE/OmZWlx3K+51naufgx8I5y+7q9gVVVQqi iqAFA6ADoM2bzDeKuxV2KobUtRtdOs5Lu5YLFGK/M+GAmhZZQgZEAcy8U80+ab3XLxnkYraqf3MP ag6E5rsuYzPk9TotFHCO+XekJylzlhwqsOFVhxQsn/3jm+X/ABq2Sijq+uLD/eG2/wCMSf8AERmz DxeT6j71fCwdirz78z/+Orof/GK8/wCJ22a7tDkPe77sTlP4fpYWc1L0Cw4ULDhStOKFhwq6OV4p FkQ0ZemThMxNhry44ziYy5F6b5f1ZdS09ZCazR0WWvU+Dfhv75vcWQTiCHjNRgOKZieiZZY0uxV2 KtOiujI4qjgqw8QRQ4q8g8xWTWmrTxHuxaviakMf+CBzT6mHDMvW9nZuPCO8bfL9iVHKHOWHCq04 qsbCEPTPy500Q2DXLD4nGx93ox/4UJm100Kh73le083HmPdHZmOZDr3Yq7FXYq8j/MTzM2oX5sYH P1S32YDozdf8/wCzMHU5bPCHoeytJwx8Q8zy9zCzmK7hacVWHCqw4VWHFCyf/eOb5f8AGrZKKOr6 4sP94bb/AIxJ/wARGbMPF5PqPvV8LB2KvPvzP/46uh/8Yrz/AInbZru0OQ97vuxOU/h+lhZzUvQL DhQsOFK04oWHCqw4qnvk/U2tdSELH93N8JHap/tofozYaHJR4e90vbGnuIyDmOfuZ9658M2jzjXr nwxV3rnwxV3rnwxVgX5gW4+tR3IFOVOX+yFAP+SZP05ga6OwLvOxcm8o/Fh5zXu/WHCq04q3FE00 yRL9qRgg+bGmSiLNMJy4QSej2PRFW30yFEWisOYHsxqv3LQZuwKeIlIk2Ud658MKHeufDFXeufDF Up806z+j9EuJtuZXio9zt+PT6chklwxJb9Nh8TII97xKR3kdnclnclmY9STuTmpJeyAAFBSOFVpx VYcKrDhVYcULJ/8AeOb5f8atkoo6vriw/wB4bb/jEn/ERmzDxeT6j71fCwdirz78z/8Ajq6H/wAY rz/idtmu7Q5D3u+7E5T+H6WFnNS9AsOFCw4UrTihYcKrDircEpinjkrTiwJp4d8sxy4ZAtOfHxwM e8PTYp/UjRz1ZQT8yN86B4hd6gxV3qDFXeoMVY353jEmnBx1Tf8A4ZQPwJzG1YuBdj2XOs487YAc 1L1Sw4VWnFUXo6c9TgHdSXHzRSw/Vl+nFzDh6+XDhkfL79nrcdI41jHRAFH0Cmbd5Bd6gxV3qDFX eoMVYP8Amben0LS1B2di5/2I3H/DDMTVy2Adz2Njucpdw+954cwXoFhwqtOKrDhVYcKrDihZP/vH N8v+NWyUUdX1xYf7w23/ABiT/iIzZh4vJ9R96vhYOxV59+Z//HV0P/jFef8AE7bNd2hyHvd92Jyn 8P0sLOal6BYcKFhwpWnFCw4VWHFVhySs/wBLnL6bbMepjFfmd832I3AHyeI1MaySH9I/eivUyxpd 6mKu9TFUn80MG0t6jYBiSfZGb+GU6j6C5ehNZo+95y91EO+aW3suEqL3sQx4k8BUW1BBjxJ8NNfK VyLjW4kFOhP3/D/HMrSG8gdb2vGsB94eq+pm2eSd6mKu9TFXepirzL8ztSEetwwntAHof8okf8a5 r9ZL1AeT0vYmO8cj/S/Qw79JR5icTufDd9fiOStjwFv63Ce+G0GJb9aM9GwootcgehrhQtOKFk/+ 8c3y/wCNWyUUdX1xYf7w23/GJP8AiIzZh4vJ9R96vhYOxV59+Z//AB1dD/4xXn/E7bNd2hyHvd92 Jyn8P0sLOal6BYcKFhwpWnFCw4VWHFVNmA6nCrNdJ5fo22PYxqR9IzfYPoHueL1n99P+sUXVvHLX GdVvHFXVbxxVKPNUhTRrgk7COU/8kmynUH93L3OXoBeeH9YPIHvD45z3E+gcCg92fHG08Ci92fHD a8DIPy/uifMsK9SyMB9FG/hmXoT+8Dqe3If4OfeHsdW8c3bxLqt44q6reOKuq3jiryL84i0XmC1k 7SWqr7VVmP8Axtmr131D3PW+z++KQ/pfoDAfrh8cw7d7wO+unxw2jgbF+fHDaDBcNQPjkrYGCoup sO+SEmJxq6aqfHJCTA41dtSVrOYH2H/Ctk4lqMN32NYf7w23/GJP+IjNoHh8n1H3q+Fg7FXn35n/ APHV0P8A4xXn/E7bNd2hyHvd92Jyn8P0sLOal6BYcKFhwpWEgdcUKEk6L74LZCJQkt74HAZNgxoK S7ZmCruSaADxOR4mzgp6paQCG0ghH+641X+n4Z08I0AO588yz4pmXebVOOSa3ccVdxxVjfn+YQ+X bk9+FP8AgnVP+N8xdYaxF2XY8OLUwH45F4w8pznrfQKUmlOG00pNIcbWk48k3Qi802LE/aMiAe7x Mq/icytHKsodb2xj4tNP3fcQXvxAJNOnb5Z0D581xxV3HFXccVeX/nnYt9T0vUFHwxvJA58S4DL9 3DNf2hHYF6X2cyeqcO8A/L+14+ZTmsespaZjhRS0zHxwopr1z45JHC76yfHDbHhXC7PjkrYmKsLw /VpBX9pf1Nk4lrlF912H+8Nt/wAYk/4iM3AfPMn1H3q+Fg7FXn35n/8AHV0P/jFef8Tts13aHIe9 33YnKfw/Sws5qXoFjEDrhVDy3Cr0wGTIQQM92fHIGTbHGgJbk+ORMm0QQkk58cjbYIo7yrZPqGu2 0Q+xGwlc9gFO1f8AZUrmVosfHkHlu6/tbP4Wnkesth8f2PWWIrtsvRR4AdM6R4FrFXYq7FWA/mxe +npkduD8UsiinioqzfiEzXdpTrGB3l6D2cxcWcy/mx+/8F5OzHNI9qpsThVTY4qq6befUtTtLz/l nmjl/wCAYN/DLMcuGQPc06jH4mOUf5wIfSts4e2iYGoKgVHcr8JP3jOnfMCFTFXYq7FWO/mDojaz 5SvbWNeVwi+tbjvzQ1AH+sQBlOox8cCHO7N1Pg54yPLkfcXzQTmhfRVMnChYWwqsLYULS+SRTXqY UUvWX/R5P9df1Nk482Eg+/rD/eG2/wCMSf8AERm6D5tk+o+9XwsHYq8+/M//AI6uh/8AGK8/4nbZ ru0OQ97vuxOU/h+lhEkiqPfNQS9CBaBnueu+RMm6MEBNcHffKzJujBBSze+RJbBFCyS4LZiKGeTG 2VPTPIGhtY6a19OtLi7+yD1VB0/X/nTOh7P0/BCzzk8N25rfFy8Efph9/X9TKKZsHSOpirqYq6mK vG/zP1MXWuJbK1UtlJP+tJQ/8QVDmj7SyXPh7ntvZ3T8OEzP8Z+wftthbHNc9ApMcKqbHCqxsKH0 D+XmqDUvKdnITWWFRFJ41T4N/nw5fTnRaWfFjBfOu1cHhaiQ6E3892R0zIde6mKupirqAggiqkEM PEHYjFXzr+aflN9B8wySxL/oN8WlgYDYMTV126daj7u2aXV4eCVjkXu+xdb42LhP1w2P6CwljmM7 hY2FVNsKFNjhVYThQvVv3D/66fqbJx5sJP0FsP8AeG2/4xJ/xEZuw+aZPqPvV8LB2KvO/wA1H4an oZ8Yrz/idtmt7RPpHveg7CF8fw/S87nnO++aQyeojBATS5AltEUHLJkbbQEK74LZAKDtiypknkry q+qXS3l0tNPhNd/92MOw8R/n45s9Bo+M8UvpH2ug7a7UGGPhwP7w/wCxH6/7e56jQUAAooFFA7AZ 0DxDqYq6mKupiqE1W8istOnuZW4JGpJbw2JJ+hQTkZSEQSejPFjM5CI5k0+e9SvZL6+nu5NnncuR 2AJ2UewG2ctkmZSMj1fTsGEYoCA5RFINsi2qbYVU2wqpthQ9I/JfXlg1G40eZ6R3Q9SCp25gAOB7 7K3yU5s+zstExeY9o9LcY5R02Pu6fjzevlSCQdiOubd5F1MVdTFXUxVJ/Nfley8y6NLptyKOfit5 aCqSD7JFf8+3QnK8uITjRcrR6uWDIJx/tHc+ZvMGg6loWpy6dqERjmjPwn9l1rQOp8D/AGHfNHkx mBovoOm1MM0BOB2Spsi5Cm2FVNsKFjHCrY/uH/10/U2TjzYSfoRYf7w23/GJP+IjN2HzPJ9R96vh YOxV5r+bzcdR0I/5F5/xO2zV9qfTH3vR+z4+v4fpeaTSZoiXrAEHI++RtsAQ0jYGQCgxJNBuTill XlnyFc3zLdakDBZ1qIjs7/0GbXSdmmXqnsO55ztLt6MLhh3l39B+v7no8MEMEKQQII4YxREXYADN 8AAKDx0pGRs7kr6YWLqYq6mKupirzf8ANfzCqxpo8D/E3xXFP5Qen0sKf7H3zV9pZ6HAOvN6b2d0 XFI5jyjsPf8AseXNmlexU2woU2wqpthVTbChW03UbjTdRt763NJrdw6jsadVPsw2OWY5mJBHRqz4 Y5YGEuUg+mNG1S21jSLbU7Zucc6Dl4g+/vtv71zo8cxKII6vmufDLFMwlzCLpk2l1MVdTFXUxVIf OXknSfNmnfVrweldxgm1vB9pGIpv7eI7/cRVmwjIKLm6HXT08+KPLqO986ebvJGveWLxoNQgPoVp FdoCY3r037HbofoqN80+XBKB3e40XaGLUC4nfu6scbK3OU2woU2wq2P7h/8AXT9TZKPNhJ+hNh/v Dbf8Yk/4iM3gfM8n1H3q+Fgoy3lnC/CWeON+vF3VTT5E4q84/Nc/XL7RGs/9JEa3QkMXxheTW/Hk VrSvE9c1vaUJSjGhe70PYOWEOPiIGw5n3vN5bDUK0+rS/wDAN/TNH+XyfzZfIvUDWYP58P8ATBZH oes3BpFZysT0qpH66ZOOizS5RP3Nc+1dNDnMfDf7k0svy91m4YG5KW0fepq33ZmY+yZn6iA63P7S Yo/3cTI+ewZZo3k3R9MKycPrFwP92yb0+QzaYNFjx7gb95ee1naufPtI1HuHL9vxT075lutdTFXU xV1MVdTFUt8xa3baJpUt7M1HoRCv7RbpUe/h7+wOVZsoxxMi5Ok0ss+QQj1+zzeBajfT395Ldzms srVPgB0CivYDYZzGTIZyMjzL6Rp8EcUBCPIINsi3KbYUKbYVU2wqpthQpthV6L+UHnRdM1A6Lesf qV637gn9mU/s/wCy7e/+tmx0GfhPCeRec7f7P44+LH6o8/d+z7vc9sdOJ61B3Vh0IPQjNw8atpir qYq6mKupiqy6tbO9tmtb6BLq2ccWjkAYUPbfAQDzZRmYmwaLzTzL+QOg6g7T6Hdtp0rb/V5Bzir7 AkUr7NT2zDyaKJ5bO90vtBlhtMcY+Recax+SP5gaex4WSXse59S3kFKfKT0z92YstJMebu8Xbumn zJj7x+q2L3Hk3zbDIUfRr3kNjxt5GH0MqkZX4Mx0Lmx1+A8px+YWDyp5p9Fx+hr6vNf+PabsG/yc lHHK+RWWsw/z4/6YPuyx1HT1srdWuYgwjQEF1BBCj3zcB87yfUfejY5I5EDxsHRujKQQfpGFgxXW wv6YuDxBJWPcgHoD44qgwQOir/wK/wBMVbLk+H0AD+GKrSSepOKupirqYq6mKupirqYq6mKqdzcW 1pbSXVy/CCIEsSQK0FaCuAkAWWUIGRAAsl4f50813Gv6izA8bOI0gjFQDTblQ/h/UnOc1mqOWW30 h7/sns0aaG/95Ln+pjTZiO2U2wqpthQpthVTbCqm2FCm2FVhJBBBoRuCMKvdvys/MGLWrNdG1OQJ qcA/cysf7xfH/mr7++270mp4xR+oPDdsdlnBLjgP3Z+zy93cz9kKsVYUI6jM10bVMVdTFXUxV1MV dTFW1d1+yxX5GmKrjK5+0Q3zAP6xiq2o/lT/AIBf6Yq6o/lT/gF/pirJvLgpo8I7cpaf8jWxVJdb /wCOxP8A6sf/ABHFUHTFXUxV1MVdTFXUxV1MVdTFXUxVSu7m1srV7q8kEUCCpZiBWnhXIykIizyZ 48cpyEYiyXjvnfzxca7P9Xt6xabHsidOdD1Pt/tnsBoNZrTkPDH6fve57J7IGnHHPfJ9347/AMGI NmA7tTbCqm2FVNsKFNsKqbYVU2woU2wqpthVdbXVxaXMdzbSGKeFg8ci9Qw6ZKMiDYYZMcZxMZCw Xvn5c/mbZeY4E03U2W31eNaIa/DIAOq1/V1Hyzd6bVDJsfqeF7U7JlpzxR3x/d7/ANbOXjZG4tsc y3TtUxV1MVdTFXUxV1MVdTFXUxV1MVZP5e/45EP+tJ/ycbFUl1of7mJ/9WP/AIjiqDpirqYq6mKu pirqYq6mKthSTQCp8BiqUa/5p0fQoS1zIJLgj93boakn6P8Aa98x8+phiHqPwc3Rdn5dRKoDbv6B 5D5n826pr0/K4b07ZT+7t1Pwjwr4nNBqdXLKd9h3Pc9n9l49MNt59T+ruSBsxXZKbYUKbYVU2wqp thQpthVTbCqm2FCm2FVNsKrGwoWxyywypLE5jljIZHUkMrDcEEdCMINIlEEUeT1/yF+diqkemeZ/ iQfDHfjan+uB0+fTxp1zaafW9J/N5TtHsEi54f8AS/q/U9dge3uoFubOVbi3cBldDXY7jpmxBt5i USDR5uphQ6mKupirqYq6mKupirqYqyby9/xyYf8AWk/5ONiqTax/x17j/Vj/AOI4qhaYq6mKupir gpOw3xVtk4CshEYPQuQv68VSrVfNGg6Wp+tXIMg/3UtQ33UL/wDC098oy6nHj+ouZptBmz/REkd/ T5sC1/8ANG/uVaDS4/q0J2MjAcz/ALGrD7yfozU5+1SdoCvN6bR+zkI75TxHuHL9f3MFuJ5p5Wlm dpJXNWdyWYn3JzVmRJs83pIQjAVEUAoNgZKbYVU2woU2wqpthVTbChTbCqm2FVNsKFNsKqbYVWNh QpNhVY2FU88seevMnlqYPpt0RCDVrWSrRHx2qCv+xIy/FnlDk4Gs7Ow6j6h6u8c3sXln89vLWpBI dbjOnXR2MvWMn/XAp/wQX55ssetjLns8vquwc2PeHrj9vy/U9CtLzTr6JZrG7iuIpPsMrD4vka0P 0HMsEHk6ScDE0RRV2idPtKR8xhYraYq6mKupirqYqyPy/wD8cmH/AFpP+TjYqhtQ0a8nvpLiIwlJ FUUk5ggqKfs4qxvzdqE3li0tbu8hilhurgWq+lzJV2jeRS3Jl2PpkfOmVZ8oxxMiLpy9HpDnnwAg HzY/P+YttA4U2lahWBCmhVhUdZPfMCXasB0LtYezuWQ+qP2/qQU35oUH7uz3/wBgv6xJlR7Yj0i5 EfZmfWY+SV3n5n604IgjWIH+Zmb8E9MfhlM+15nkAHLxezOIfVKR92362PX3mnXruoku3RT1SKkY +nhQn6cw8mtyz5y/Q7TB2TpsXKAvz3+9JWJNSdyeuYzsVNsVUmwqsbCqm2FVNsKFNsKqbYVU2woU 2wqpthVTbChTbCqm2FVjYUKTYVWNhVTbCqm2FCvp+r6rpkpl0+7mtJD9owuyVHg1DuPnk4zMeRas uCGQVMCXvZfpX53efNOCq1xHdoNuMqFdv+eRjqfc1zJjrJjzdVl7B08uQMfcf12yW1/5yRv1UC80 hZW7ukqgf8D6Vf8AhsvGu7w4E/Zofwz+z9qZx/8AOSWimvraRKp7cKH76yrkxro9zjn2cy9JR+1M NN/P7RtQvtPsLbR7h7vUrhLW2jPEVeR1jUn970LN+By3HqRM0A4+fsTJiiZGUaHv/U9i/QepEfZt h785T+FMyHSptpNnLZ6fFbysHlTkXZdgSzFtq/PFUXiqS+cvLieY/LN9pBf0pbhA1tP/AL7niYSQ v8lkVSfEZGURIUeTdp8xxzEh0fP9o81/aTWs8Rt9Z0p3hvbJvtoUJ5r78WqQe6n2zmdTppYzwnpy 8w99ptXGYEx9MvsP7UFIMwnZAodxgZKLDCqk2FVNsVU2wqpthVTbCqm2FCm2FVNsKqbYUKbYVU2w qpthQpthVTbCqxsKFJsKrGwqpthVTbChTbCqm2FVNsKF1tazXUwiiG9CWY7KqjdmY9lA3OEC2MpA Cy9g/wCcbvI7a75ybzRLGTonl+sdizjaW7YEKQCP2Axc06MVzb6bDwRs8z9zyfbWu4h4cfj+PsfV eZDzbsVdirsVeZfml+Vl3rN0vmfyvKLPzRbqFkWvGO7jT7KSeDjoreGx7UhkxRyCpOdo9bLCf6Ly CTzLpxu3sPMlrL5e1uM8ZhJGxgZh34j4lr7VGafUdlyG4ep0vagI7x+Pxuik0/61vY3Vreqehgnj Y/8AAkhvwzWy0s49HaQ12Muby9q/++P+HT/mrIeDLubPzePv+9Rby7rH/LP/AMOn/NWHwZdyfzeP v+9TPl3WP+Wf/h0/5qx8GXcv5rH3/ept5d1j/ln/AOHT/mrD4Mu5fzWPv+9Tby5rP/LP/wAOn/NW HwZdy/msff8Aepny3rX/ACz/APDx/wDNWHwZdyPzWPv+9YfLetf8s3/Dx/8ANWPgy7l/NY+/71M+ Wtb/AOWb/h4/+asPhS7l/NY+/wC9YfLOt/8ALN/w8f8AzVh8KXcv5rH3/ept5Y1z/lm/4eP/AJqw +FLuR+ax9/3qZ8sa5/yzf8PH/wA1YfCl3L+ax9/3rG8r67/yzf8ADx/81YfCl3L+ax9/3qbeVtd/ 5Zf+Hj/5qw+FLuX81j7/AL1jeVte/wCWX/kpH/zVh8KSPzWPv+9Tbyrr3/LL/wAlI/8AmrD4Ul/N Y+/71h8qa/8A8sv/ACUj/wCasPhSX81j7/vUz5T1/wD5Zf8AkpH/AM1Y+FJH5rH3/esbyn5g/wCW X/kpH/zVh8OS/msff96mfKXmD/lk/wCSkf8AzVh8OS/msff96m3lHzD/AMsn/JSL/mrD4ckfmsfe sbyj5h/5ZP8AkpF/zVh8OS/msfesbyjryrzlhjhTu8s8CAfe+SGKR6MTrMY6/ehZ9O0ez31DV7eo /wB0WVbqU+1VpGPpfMiGimfJxsnacB9ItnnkH8n/ADP549MRWcvl7yc5Vrm+uP8Aeu8QUICVAqp7 UHAf5RGbDFpo4/Muh1vapO17vqzy55d0jy5otro2kQC3sLROEUY6nxZj3ZjuTlxNvPykZGymWBi7 FXYq7FXYqlHmHyj5a8x2/oa1p0N6g2VpF+Nf9VxRh9+ESITGRG4ec6j/AM4y+Qbhy9pLd2lTXh6n qKPYA0/XkuIdQ5A1mQdUvH/OLugAUGsXAA7cD/1Uwej+az/P5e93/Qrmgf8AV4uP+AP/AFUxqH81 fz+XvXJ/zi55bDfvNWuWXwVSp+8u2NQ/mr+fy96//oV3yl/1c7z7/wC3BUP5oX8/l73f9CueUv8A q5Xn3/241D+aF/P5e9r/AKFb8o/9XK8+/wDtxqH80L+fy97v+hWvKH/VyvPv/tx9P80L+fy97X/Q rPk//q5Xf3/24fT/ADQv5/L3u/6FY8n/APVxu/v/ALcfT/NC/n8ve1/0Kv5O/wCrjd/f/bj6f5oX 8/l73f8AQq/k7/q43f3/ANuPp/mhfz+Xvd/0Kt5N/wCrhd/f/bj6f5oX8/l72v8AoVXyZ/1cLv7/ AO3H0/zQv5/L3u/6FU8l/wDVwu/v/txuPcF/P5e9r/oVPyX/ANXC7+/+3G49y/n8ve7/AKFS8lf8 t939/wDzdjce5fz+XvWSf84oeTyB6eo3KnvyBb9TrhuP81fz+XvUJP8AnE3y0QPT1aVT35RM36pl xuP81fz+XvUJP+cTdH5fBqvJfFo5FP3CY4eKH81fz+XvWf8AQpmlf9XMf8BL/wBVcPFDuX8/l718 f/OJeiE/vdV4jtxjkb9cy4OKH81fz+XvTKz/AOcT/wAvUcNeXF3cU3Ko/pA/OvqH8ceMdAg63J3s 38tfkz+WflyRZtN0G3NypDLc3INzIGHQqZi/A/6tMiZFqnqJy5lmuRaXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k= xmp.did:1909C3C878D8DE11BA3FC4734EDA5420 uuid:79f4e077-af0a-49b0-8661-3c88af079b47 uuid:4BC73B30D582DE118E9E833D7C53E1E9 proof:pdf xmp.iid:1809C3C878D8DE11BA3FC4734EDA5420 xmp.did:1809C3C878D8DE11BA3FC4734EDA5420 uuid:4BC73B30D582DE118E9E833D7C53E1E9 proof:pdf saved xmp.iid:1709C3C878D8DE11BA3FC4734EDA5420 2009-11-23T23:40:14+02:00 Adobe Illustrator CS4 / saved xmp.iid:1809C3C878D8DE11BA3FC4734EDA5420 2009-11-23T23:44:22+02:00 Adobe Illustrator CS4 / saved xmp.iid:1909C3C878D8DE11BA3FC4734EDA5420 2009-11-23T23:45:49+02:00 Adobe Illustrator CS4 / Adobe PDF library 9.00 1 True False 100.000000 100.000000 Pixels Cyan Magenta Yellow Black Default Swatch Group 0 White RGB PROCESS 255 255 255 Black RGB PROCESS 0 0 0 Charcoal RGB PROCESS 63 63 63 Graphite RGB PROCESS 102 102 102 Ash RGB PROCESS 140 140 140 Smoke RGB PROCESS 178 178 178 Latte RGB PROCESS 228 188 150 Capuccino RGB PROCESS 213 151 88 Mochaccino RGB PROCESS 139 92 41 Chocolate RGB PROCESS 90 61 28 Mars Red RGB PROCESS 143 0 0 Ruby RGB PROCESS 191 0 0 Pure Red RGB PROCESS 255 0 0 Pumpkin RGB PROCESS 255 64 0 Squash RGB PROCESS 255 127 0 Sunshine RGB PROCESS 255 191 0 Yellow RGB PROCESS 255 255 0 Chartreuse Green RGB PROCESS 204 255 0 Fresh Grass Green RGB PROCESS 125 255 0 Pure Green RGB PROCESS 0 255 0 Spearmint RGB PROCESS 0 163 61 Holly Green RGB PROCESS 0 107 51 Sea Green RGB PROCESS 1 83 83 Caribbean Blue RGB PROCESS 4 115 145 Mediterranean Blue RGB PROCESS 0 160 198 Aloha Blue RGB PROCESS 0 96 182 Black Light Blue RGB PROCESS 0 60 255 Pure Blue RGB PROCESS 0 0 255 Sapphire Blue RGB PROCESS 34 16 210 Tanzanite RGB PROCESS 66 16 210 Brilliant Purple RGB PROCESS 93 16 210 Violet RGB PROCESS 130 16 210 Purple Orchid RGB PROCESS 171 16 210 Fuschia RGB PROCESS 208 16 177 Global Pure Red PROCESS 100.000000 RGB 255 0 0 Global Squash PROCESS 100.000000 RGB 255 126 0 Global Yellow PROCESS 100.000000 RGB 255 255 0 Global Pure Green PROCESS 100.000000 RGB 0 255 0 Global Mediterranean Blue PROCESS 100.000000 RGB 0 160 198 Global Pure Blue PROCESS 100.000000 RGB 0 0 255 Document endstream endobj 3 0 obj <> endobj 122 0 obj <>/Resources<>/ExtGState<>/Properties<>/Shading<>/XObject<>>>/Thumb 148 0 R/TrimBox[0.0 0.0 100.0 100.0]/Type/Page>> endobj 123 0 obj <>stream HVMo1 W7wN=}a *$NfUZ3dz>ݟ=kfӿK}>П_K=}C}I.QeJt.L>.@kuāLe*uDS:MW7;Ʋ۪xx&XN!v|TЪxS{긦X { CC\lNz}T7_`}EtR+^s]w:#EJ>ɜ3E/ʐ f}gO*3-.mҋG "c2%%3f&/aNM,rBޡ ܊ė@`3amUH״xɩI`tFKjHL6RTD\ȅmL1|!#vƒ!`wUC.\ĴX4w϶ i xvo#?Ē} 5f("fJlH&< ֣}sTEH!3_s{mJ٭d@=U`BF'vHhn "G k %|AM$N`c8B hB#F"bHLiUs-ő̆eg00;P֡eG v'Ly]h1`A򤌉UlgCc}K/ ?Y9^;)5SKFLҸ;F4$4:ۨiiI6jjч\9L&8v qwPkFfj^&7濻Oku endstream endobj 124 0 obj <> endobj 148 0 obj <>stream 8;TH&Yml4;%(iAMQZNRi0YmpAU7%IPRh*W\fQTk76<7pUNf5GP5e+@-2h3.j-C=c[ X>?7'ff1<=MJ!eeY$4!s/8sW4K8q\C--cHIW\"sBhR',F>s<)t)$&!h:Po~> endstream endobj 150 0 obj [/Indexed/DeviceRGB 255 151 0 R] endobj 151 0 obj <>stream 8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn 6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 136 0 obj <>/ExtGState<>/ProcSet[/PDF/ImageC/ImageI]/XObject<>>>/Subtype/Form>>stream q /GS0 gs 103 0 0 104 -1.2519531 -1.7480469 cm /Im0 Do Q endstream endobj 137 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 96.212 15.058 m 96.212 8.931 91.243 3.962 85.116 3.962 c 14.845 3.962 l 8.717 3.962 3.75 8.931 3.75 15.058 c 3.75 85.329 l 3.75 91.457 8.717 96.424 14.845 96.424 c 85.116 96.424 l 91.243 96.424 96.212 91.457 96.212 85.329 c h W n q 0 g /GS0 gs 69.5471954 0 0 -33.9607239 63.3984375 19.1269531 cm BX /Sh0 sh EX Q Q endstream endobj 138 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 93 13.6084 cm 0 0 m -25.587 0.464 -43.041 26.396 -33.12 50.419 c -28.93 60.568 -19.768 67.936 -9.37 70.94 c -5.22 72.14 -0.952 72.174 3.324 72.174 c 4.029 72.174 6.644 72.262 6.644 72.182 c 6.644 67.061 l 6.644 65.776 6.838 58.987 6.461 58.987 c 2.456 58.987 -1.518 59.179 -5.454 58.312 c -15.31 56.142 -22.082 46.627 -22.181 36.807 c -22.256 29.279 -19.142 22.479 -13.3 17.724 c -9.507 14.636 -4.445 13.187 0.386 13.187 c 5.256 13.187 l 7.01 13.187 6.644 13.519 6.644 11.56 c 6.644 0.959 l 6.644 -0.574 6.697 0 5.212 0 c 0 0 l -0.006 0 -0.006 -0.727 0 -0.727 c 6.647 -0.727 l 6.651 -0.727 6.651 -0.382 6.651 -0.363 c 6.651 13.55 l 6.651 13.568 6.651 13.913 6.647 13.913 c 1.272 13.913 -3.796 13.736 -8.885 15.822 c -16.377 18.895 -20.912 26.35 -22.019 34.097 c -23.294 43.028 -17.92 51.391 -10.417 55.671 c -5.163 58.669 0.841 58.262 6.647 58.262 c 6.651 58.262 6.651 58.605 6.651 58.625 c 6.651 72.537 l 6.651 72.556 6.651 72.899 6.647 72.899 c -3.479 72.899 -12.49 72.064 -21.092 66.079 c -29.982 59.893 -35.861 48.978 -36.065 38.143 c -36.462 17.169 -21.49 -0.336 0 -0.727 c 0.001 -0.727 0.01 -0.001 0 0 c f Q endstream endobj 139 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.584 0.584 0.584 scn /GS0 gs q 1 0 0 1 99.999 86.4976 cm 0 0 m 0 -8.302 l 0 -13.343 l 0 -14.996 -0.466 -14.557 -2.103 -14.557 c -12.256 -14.557 -21.036 -16.68 -26.366 -26.228 c -29.246 -31.387 -29.334 -37.473 -27.891 -43.036 c -25.236 -53.265 -15.646 -59.047 -5.554 -59.047 c -0.591 -59.047 l 0.405 -59.047 0 -60.057 0 -60.909 c 0 -72.331 l 0 -74.685 -4.432 -73.544 -6.389 -73.544 c -11.539 -73.544 -16.433 -72.595 -21.206 -70.663 c -45.354 -60.88 -50.09 -28.242 -32.323 -10.372 c -23.38 -1.377 -11.978 -0.061 0.001 -0.061 c 0.002 -0.061 0.002 0.061 0.001 0.061 c -11.299 0.061 -21.256 -1.08 -30.389 -8.501 c -38.647 -15.212 -43.442 -25.866 -43.442 -36.442 c -43.442 -47.266 -38.896 -57.359 -30.929 -64.642 c -22.124 -72.689 -11.302 -73.666 0.001 -73.666 c 0.002 -73.666 0.002 -73.608 0.002 -73.605 c 0.002 -58.987 l 0.002 -58.984 0.002 -58.926 0.001 -58.926 c -5.466 -58.926 -10.659 -59.158 -15.828 -57.009 c -23.162 -53.962 -27.593 -46.601 -28.671 -39.005 c -30.005 -29.606 -24.512 -20.828 -16.31 -16.705 c -11.27 -14.171 -5.458 -14.678 0.001 -14.678 c 0.002 -14.678 0.002 -14.62 0.002 -14.617 c 0.002 0 l 0.002 0.068 0 0.068 0 0 c f Q endstream endobj 140 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 14.8452 5.4121 cm 0 0 m -7.936 0.536 -9.893 6.795 -9.893 13.469 c -9.893 32.113 l -9.893 75.597 l -9.893 81.944 -8.775 87.948 -1.341 89.471 c 1.944 90.144 5.865 89.562 9.176 89.562 c 54.925 89.562 l 64.029 89.562 80.164 92.408 80.164 78.776 c 80.164 39.824 l 80.164 18.135 l 80.164 13.798 80.814 8.887 78.813 4.905 c 76.173 -0.348 70.332 0 65.428 0 c 45.917 0 l 0 0 l -0.004 0 -0.004 -0.5 0 -0.5 c 69.621 -0.5 l 81.847 -0.5 80.169 11.979 80.169 20.255 c 80.169 66.216 l 80.169 74.311 82.756 90.062 70.197 90.062 c 36.13 90.062 l 0.292 90.062 l -12.077 90.062 -9.897 75.947 -9.897 67.797 c -9.897 23.346 l -9.897 14.734 -12.484 0.343 0 -0.5 c -0.007 -0.499 0.015 -0.001 0 0 c f Q endstream endobj 141 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.051 0 0.231 scn /GS0 gs q 1 0 0 1 96.21 15.6602 cm 0 0 m -0.51 -8.207 -6.845 -11.073 -14.005 -11.073 c -31.712 -11.073 l -75.974 -11.073 l -81.106 -11.073 -85.64 -11.367 -89.66 -7.347 c -93.249 -3.757 -92.454 1.974 -92.454 6.579 c -92.454 51.744 l -92.454 61.266 -95.718 80.139 -81.072 80.139 c -45.235 80.139 l -11.168 80.139 l 3.628 80.139 -0.004 59.402 -0.004 49.96 c -0.004 -0.603 l -0.004 -1.31 0.008 -1.31 0.008 -0.603 c 0.008 69.019 l 0.008 75.759 -4.091 80.954 -11.094 81.389 c -14.36 81.592 -17.705 81.389 -20.977 81.389 c -66.85 81.389 l -76.392 81.389 -92.466 83.879 -92.466 69.668 c -92.466 37.513 l -92.466 0.048 l -92.466 -6.693 -88.367 -11.889 -81.365 -12.323 c -78.098 -12.526 -74.753 -12.323 -71.482 -12.323 c -28.145 -12.323 l -18.302 -12.323 -0.883 -15.476 0.004 -1.205 c 0.027 -0.829 -0.018 -0.293 0 0 c f Q endstream endobj 142 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 0 12.893 m 0 27.511 l 7 27.511 l 19.56 27.511 28.824 37.6 28.824 49.23 c 28.824 61.688 19.354 71.88 6.794 71.88 c 0 71.88 l 0 86.498 l 7 86.498 l 27.178 86.498 43.443 70.131 43.443 49.334 c 43.443 29.467 27.178 12.893 7 12.893 c h W n q 0 g /GS0 gs 0 73.6044922 73.6044922 0 21.7211914 12.8925781 cm BX /Sh0 sh EX Q Q endstream endobj 143 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 0 12.893 m 0 27.511 l 7 27.511 l 19.56 27.511 28.824 37.6 28.824 49.23 c 28.824 61.688 19.354 71.88 6.794 71.88 c 0 71.88 l 0 86.498 l 7 86.498 l 27.178 86.498 43.443 70.131 43.443 49.334 c 43.443 29.467 27.178 12.893 7 12.893 c h W n q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 21.7211914 86.4975586 cm BX /Sh0 sh EX Q Q endstream endobj 144 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 1 1 1 scn /GS0 gs q 1 0 0 1 0.356 13.2451 cm 0 0 m 0 8.438 l 0 13.143 l 0 14.115 2.06 13.55 3.32 13.55 c 13.909 13.55 22.95 17.372 27.326 27.653 c 29.708 33.251 29.104 40.175 26.962 45.689 c 23.033 55.81 13.212 59.351 3.217 59.351 c 2.514 59.351 0 59.261 0 59.342 c 0 63.506 l 0 69.293 l 0 70.263 -0.188 72.537 0.183 72.537 c 9.645 72.537 18.18 71.9 26.43 66.685 c 35.703 60.824 41.198 50.575 42.517 39.882 c 44.149 26.65 37.354 13.875 26.674 6.444 c 18.582 0.813 9.46 0.363 -0.003 0.363 c -0.009 0.363 -0.009 -0.363 -0.003 -0.363 c 11.069 -0.363 20.82 0.816 29.774 8.043 c 38.14 14.795 42.738 25.448 42.738 36.089 c 42.738 46.924 38.443 57.006 30.446 64.339 c 21.808 72.259 11.113 73.263 -0.003 73.263 c -0.008 73.263 -0.007 72.919 -0.007 72.9 c -0.007 58.988 l -0.007 58.969 -0.008 58.625 -0.003 58.625 c 5.372 58.625 10.439 58.802 15.528 56.715 c 23.021 53.643 27.556 46.187 28.662 38.44 c 29.937 29.509 24.564 21.146 17.061 16.866 c 11.807 13.869 5.803 14.276 -0.003 14.276 c -0.008 14.276 -0.007 13.932 -0.007 13.913 c -0.007 0 l -0.007 -0.41 0 -0.41 0 0 c f Q endstream endobj 145 0 obj <>/ExtGState<>>>/Subtype/Form>>stream /CS0 cs 0.584 0.584 0.584 scn /GS0 gs q 1 0 0 1 0.0005 12.8926 cm 0 0 m 0 8.303 l 0 13.344 l 0 14.997 0.466 14.558 2.103 14.558 c 12.256 14.558 21.037 16.681 26.366 26.229 c 29.246 31.387 29.333 37.473 27.89 43.036 c 25.236 53.265 15.647 59.048 5.554 59.048 c 0.592 59.048 l -0.405 59.048 0 60.058 0 60.91 c 0 72.331 l 0 74.685 4.433 73.544 6.39 73.544 c 11.54 73.544 16.434 72.595 21.206 70.662 c 45.356 60.881 50.09 28.243 32.324 10.373 c 23.381 1.378 11.979 0.061 0 0.061 c -0.001 0.061 -0.001 -0.061 0 -0.061 c 11.3 -0.061 21.257 1.08 30.389 8.502 c 38.648 15.213 43.443 25.865 43.443 36.441 c 43.443 47.266 38.897 57.359 30.929 64.642 c 22.125 72.689 11.303 73.666 0 73.666 c -0.001 73.666 -0.001 73.608 -0.001 73.605 c -0.001 58.988 l -0.001 58.985 -0.001 58.927 0 58.927 c 5.466 58.927 10.659 59.158 15.828 57.01 c 23.163 53.963 27.593 46.601 28.67 39.005 c 30.004 29.606 24.512 20.829 16.311 16.706 c 11.27 14.172 5.458 14.679 0 14.679 c -0.001 14.679 -0.001 14.621 -0.001 14.618 c -0.001 0 l -0.001 -0.068 0 -0.068 0 0 c f Q endstream endobj 146 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 100 86.498 m 100 71.88 l 93 71.88 l 80.441 71.88 71.175 61.791 71.175 50.159 c 71.175 37.702 80.646 27.511 93.205 27.511 c 100 27.511 l 100 12.893 l 93 12.893 l 72.822 12.893 56.558 29.26 56.558 50.056 c 56.558 69.925 72.822 86.498 93 86.498 c h W n q 0 g /GS0 gs 0 73.6044922 73.6044922 0 78.2792969 12.8925781 cm BX /Sh0 sh EX Q Q endstream endobj 147 0 obj <>/ExtGState<>/Shading<>>>/Subtype/Form>>stream q 100 86.498 m 100 71.88 l 93 71.88 l 80.441 71.88 71.175 61.791 71.175 50.159 c 71.175 37.702 80.646 27.511 93.205 27.511 c 100 27.511 l 100 12.893 l 93 12.893 l 72.822 12.893 56.558 29.26 56.558 50.056 c 56.558 69.925 72.822 86.498 93 86.498 c h W n q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 78.2792969 86.4975586 cm BX /Sh0 sh EX Q Q endstream endobj 171 0 obj <> endobj 167 0 obj <> endobj 126 0 obj [/ICCBased 174 0 R] endobj 173 0 obj <> endobj 175 0 obj <> endobj 176 0 obj <> endobj 177 0 obj <> endobj 178 0 obj <> endobj 174 0 obj <>stream HyTSwoɞc [5laQIBHADED2mtFOE.c}08׎8GNg9w߽'0 ֠Jb  2y.-;!KZ ^i"L0- @8(r;q7Ly&Qq4j|9 V)gB0iW8#8wթ8_٥ʨQQj@&A)/g>'Kt;\ ӥ$պFZUn(4T%)뫔0C&Zi8bxEB;Pӓ̹A om?W= x-[0}y)7ta>jT7@tܛ`q2ʀ&6ZLĄ?_yxg)˔zçLU*uSkSeO4?׸c. R ߁-25 S>ӣVd`rn~Y&+`;A4 A9=-tl`;~p Gp| [`L`< "A YA+Cb(R,*T2B- ꇆnQt}MA0alSx k&^>0|>_',G!"F$H:R!zFQd?r 9\A&G rQ hE]a4zBgE#H *B=0HIpp0MxJ$D1D, VĭKĻYdE"EI2EBGt4MzNr!YK ?%_&#(0J:EAiQ(()ӔWT6U@P+!~mD eԴ!hӦh/']B/ҏӿ?a0nhF!X8܌kc&5S6lIa2cKMA!E#ƒdV(kel }}Cq9 N')].uJr  wG xR^[oƜchg`>b$*~ :Eb~,m,-ݖ,Y¬*6X[ݱF=3뭷Y~dó ti zf6~`{v.Ng#{}}jc1X6fm;'_9 r:8q:˜O:ϸ8uJqnv=MmR 4 n3ܣkGݯz=[==<=GTB(/S,]6*-W:#7*e^YDY}UjAyT`#D="b{ų+ʯ:!kJ4Gmt}uC%K7YVfFY .=b?SƕƩȺy چ k5%4m7lqlioZlG+Zz͹mzy]?uuw|"űNwW&e֥ﺱ*|j5kyݭǯg^ykEklD_p߶7Dmo꿻1ml{Mś nLl<9O[$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km endstream endobj 172 0 obj <> endobj 179 0 obj <> endobj 180 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 78.2792969 86.4975586 cm BX /Sh0 sh EX Q endstream endobj 181 0 obj <> endobj 182 0 obj <> endobj 184 0 obj /DeviceGray endobj 185 0 obj <> endobj 186 0 obj <> endobj 187 0 obj <> endobj 188 0 obj <> endobj 189 0 obj <> endobj 128 0 obj <> endobj 183 0 obj /DeviceGray endobj 170 0 obj <> endobj 164 0 obj <> endobj 190 0 obj <> endobj 191 0 obj <> endobj 192 0 obj <> endobj 169 0 obj <> endobj 168 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 193 0 obj <> endobj 194 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /GS0 gs 0 -73.6054687 -73.6054687 0 21.7211914 86.4975586 cm BX /Sh0 sh EX Q endstream endobj 195 0 obj <> endobj 163 0 obj <> endobj 162 0 obj <> endobj 161 0 obj <> endobj 160 0 obj <> endobj 159 0 obj <> endobj 156 0 obj <> endobj 158 0 obj <> endobj 196 0 obj <> endobj 197 0 obj <> endobj 157 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <>/Shading<>>>/Subtype/Form>>stream q 0 g /GS0 gs 69.5471954 0 0 -33.9607239 63.3984375 19.1269531 cm BX /Sh0 sh EX Q endstream endobj 200 0 obj <> endobj 201 0 obj <> endobj 202 0 obj <> endobj 203 0 obj <> endobj 204 0 obj <> endobj 152 0 obj <> endobj 155 0 obj <>stream H1 Om x0) endstream endobj 153 0 obj [/Indexed 206 0 R 0 207 0 R] endobj 205 0 obj <>/Filter/FlateDecode/Height 104/Intent/RelativeColorimetric/Length 973/Name/X/Subtype/Image/Type/XObject/Width 103>>stream HOhfpK#L3]a9a RH ;١)%<ׇQF; g%i^V^}IlFؑ%e R{zby @ЉAC A>ae4eX)Th&lHfBS^; AN3gɴAI&&FdL! ongs\pۙ+s~';ޚl{E8߻~v+=:ޟ$f/fύVoHrl`+(D/ޅ8^4h9|~^\Xfa:z4^9>^U 7kU6Q3q'wJuLM`;dX_M<[1fIL0%ScZHCIN0e5:n3p`I0 `0 `0 `Ť^N'9t`/@+VDd]/McR:cAlݚ9ˑ.9j L&݀Af(X. 7eX|XagG5vNZ߿9ۇX խQBq k d=廴QC6YfEF7 M|zDIeEm_%q1whu^zIZGZ/"7]xE"2M㯎[zRriwMԩ /Iv#~bf/[k?nݺ﹩Nm帶WȘA>ST9Gޛ K/ED/'hr97qCѠu}`9&T`*43sqp~^ IR6FDr1ldUFA^W (F>stream endstream endobj 154 0 obj <> endobj 208 0 obj <> endobj 209 0 obj [0.0 0.0 0.0] endobj 210 0 obj <>/ProcSet[/PDF/ImageB]/XObject<>>>/Subtype/Form>>stream q /GS0 gs 103 0 0 104 -1.2519531 -1.7480469 cm /Im0 Do Q endstream endobj 211 0 obj <> endobj 213 0 obj <>/Filter/FlateDecode/Height 104/Intent/RelativeColorimetric/Length 973/Name/X/Subtype/Image/Type/XObject/Width 103>>stream HOhfpK#L3]a9a RH ;١)%<ׇQF; g%i^V^}IlFؑ%e R{zby @ЉAC A>ae4eX)Th&lHfBS^; AN3gɴAI&&FdL! ongs\pۙ+s~';ޚl{E8߻~v+=:ޟ$f/fύVoHrl`+(D/ޅ8^4h9|~^\Xfa:z4^9>^U 7kU6Q3q'wJuLM`;dX_M<[1fIL0%ScZHCIN0e5:n3p`I0 `0 `0 `Ť^N'9t`/@+VDd]/McR:cAlݚ9ˑ.9j L&݀Af(X. 7eX|XagG5vNZ߿9ۇX խQBq k d=廴QC6YfEF7 M|zDIeEm_%q1whu^zIZGZ/"7]xE"2M㯎[zRriwMԩ /Iv#~bf/[k?nݺ﹩Nm帶WȘA>ST9Gޛ K/ED/'hr97qCѠu}`9&T`*43sqp~^ IR6FDr1ldUFA^W (F> endobj 134 0 obj <> endobj 135 0 obj <> endobj 215 0 obj <> endobj 216 0 obj <> endobj 217 0 obj <> endobj 218 0 obj <> endobj 219 0 obj <> endobj 214 0 obj <> endobj 220 0 obj <> endobj 221 0 obj <> endobj 120 0 obj <> endobj 222 0 obj [/View/Design] endobj 223 0 obj <>>> endobj 127 0 obj <> endobj 129 0 obj <> endobj 130 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 125 0 obj <> endobj 224 0 obj <> endobj 225 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 14.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Administrator) () %%Title: (v4_3.ai) %%CreationDate: 11/26/2009 1:52 AM %%Canvassize: 16383 %%BoundingBox: -2 -2 102 103 %%HiResBoundingBox: -1.25195 -1.74805 101.748 102.252 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 10.0 %AI12_BuildNumber: 357 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0.627451 0.776471 (Global Mediterranean Blue) %%+ 0 0 1 (Global Pure Blue) %%+ 0 1 0 (Global Pure Green) %%+ 1 0 0 (Global Pure Red) %%+ 1 0.498039 0 (Global Squash) %%+ 1 1 0 (Global Yellow) %%+ 0 0 0 ([Registration]) %AI3_Cropmarks: 0 0 100 100 %AI3_TemplateBox: 50.5 49.5 50.5 49.5 %AI3_TileBox: -247.6001 -370.8701 347.4199 470.9902 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 6 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -110 120 4 1252 620 18 0 0 69 109 0 0 0 1 1 0 1 1 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 226 0 obj <>stream %%BoundingBox: -2 -2 102 103 %%HiResBoundingBox: -1.25195 -1.74805 101.748 102.252 %AI7_Thumbnail: 128 128 8 %%BeginData: 27134 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDFCFFFDFCFFFDFCFFFD1EFFCBA2A87D7E7D7D537D537D777D777E %7D7D7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E %7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA27D7E7DA2 %7D7E7DA27D7E7D7E7D7E7D7E7D7E7DA8A9FD20FFA87D4C4C4B4B214C4B4B %454C4B4B454C4B4B214C454B214B214B214B214B214B214B214B214B214B %214B214B214B214B214B214B214B214B214B214B214B214B214B214B214B %214B214B214B214B214B214B214B214B214B214B214B2145214C4CA2A8FD %1CFF764C6FA1A1C3A1C9C3C3A0C3C3C9A1C9C3C9A1C9A1C9A1C9A1C9A1C9 %A1C9A1C9A1C3A1C9A1C3A1C9A1C3A1C9A1C3A1C9A1C3A1C3A1C3A1C3A1C3 %A1C3A1C3A1C3A1C3A1C3A1C3A1C3A1A1A1C3A1A1A0C3A1A19AA19AA19AA1 %9AA19AFD05A176702152A2FD19FF7D4576A1C9C3C3C2C29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA09A %C29A9A9AC29A9A9AA09A9A9AA09A9A9AA0FD0E9A999A9A9A999A999A759A %999A6F9A999A759A9AA1A1C9A1A16F4B52FD16FFA9774BC3C9C9C2C29AC2 %C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29A9A9AC29A9A9AA0FD069A999A9A9A999A9A9A99 %9A9A9A999A9A9A999A9A9A999A9A9A999A9A9A759A999A6F9A939A75A1A1 %CA9A4B4CFD14FFAF524BC9C3C299C29AC29AC29AC29AC29AC29AC29AC299 %C29AC299C29AA099C29A9A99C29A9A99A09A9A999A9A9A999A999A999A99 %9A999A999A999A999A999A999A999A999A999A999A759A999A6F9A999A6F %9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A76A19A4B4CFD13FF7D %4BC9C9C2BCC3C2C2BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA0 %9AC29A9A9AC29A9A9AA0FD129A999A9A9A999A9A9A759A9A9A759A9A9A6F %C3A14B7DFD11FFA821A0C3C29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A99C29A9A99A09A9A999A %9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A759A999A %759A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6FA17645A8FD %10FF5276C3C39AC2C2C29AC2C2C29AC2C2C29AC2BCC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9AC2FD0A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A %9A759A9A9A6F9A9A9A6F9A759A6FA14B77FD0FFFA84B9AC39AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC299C29AC299C29A9A99C29A9A99C2 %9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A999A999A %999A999A759A999A6F9A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A %6F9A6F9A6F9A6F9A6F9A6F9A21CAFD0EFFA26FC9C2C2C2C3C2C2C2C3C2C2 %9AC3C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AA0FD12 %9A999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A6F9A9A6F7DFD0EFF76 %9AC2C2BCC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AA09AC29A9A9AC29A9A99C29A9A99C29A9A999A9A9A999A9A9A999A9A %9A999A9A9A999A999A999A999A999A999A999A999A759A999A6F9A999A6F %9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F76FD0DFFCA76A0C3 %9AC3C2C2A0C2C2C2BCC2C2C29AC2C2C29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A %9AA0FD0A9A999A9A9A999A9A9A999A9A9A999A9A9A999A9A9A759A9A9A6F %9A999A6F9A999A759A769A769A4BFD09FFA87DA8A8A87DA8A8A8A7A8A1A8 %A1A7A1A19AC29AC299C29AC29AC29AC299C29AC299C29AA099C29A9A99C2 %9A9A99A09A9A999A9A9A999A999A999A999A999A999A999A999A999A999A %999A999A999A999A759A999A6F9A999A6F9A759A6F9A6F9A6F9A6F9A6F9A %6F9A6F9A76A17DA1A1A87DA8A8A8A1FD06A8FD04FFA8FD0BFFAFFFAFFFA8 %FFA8A8A1C3A0C29AC2C2C29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AA09AC29AA09AC29A9A9AC29A9A9A %A0FD129A999A9A9A939A9AA1A1A8A8FFA8FFAFFFAFFFFFFFAFFFFFFFA8FF %FFA8FD04FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8AFA8A8A1A1 %9AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A99C29A9A99A0 %9A9A999A9A9A999A9A9A999A9A9A999A999A999A999A999A999A999A999A %759A999A759A999A6F9A759A6F9A76A1A1A8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFFFFFA8FFA8A8A1C3BCC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AC2FD0A9A999A9A9A999A9A %9A999A9A9A999A9A9A999A9AA1A1FFAFFFA8FFFFFFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8AFA8A19ABC99C29AC299C29A9A99C29A9A99C29A9A999A %9A9A999A9A9A999A999A999A999A999A999A999A999A999A999A999A999A %759A999A6F9A999A6F9A759A6F9A6F9A76A8A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFFFFFA8FFFFFFA8FF %FFFFA8FFFFFFA8FFFFFFA8FFA8FFA8FFAFA8A1C3BCC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9AA0FD0E9A999A9AA1A8FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FFFF %FFA8FFFFFFA8FFFFFFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19ABC9AC29AA09AC29A9A9AC29A9A %99C29A9A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A999A999A %999A999A999A999A999A759A999A76A8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFFA8A8A0C29AC29AC2 %9AC29AC29AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0 %FD0A9A999A9A9A999A9A9A93A0A1FFA9FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A19A99C29A %9A99C29A9A99A09A9A999A9A9A999A999A999A999A999A999A999A999A99 %9A999A999A999A999A999A759A999A6F9A93A0A1FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFFF %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFFFFFA1C39AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29A %A09AC29AA09AC29A9A9AC29A9A9AA0FD099AA1A8FFFFFFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA1A0999A9AC29A9A9AC29A9A99C29A9A99A09A9A999A9A9A99 %9A9A9A999A9A9A999A999A999A999A999A999A999A999A75A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFFFFFA8C39AC29AC29AC29AC29AC29AC29AC29A %C29AA09AC29A9A9AC29A9A9AC2FD0A9A999A9A9A999A9AA8A8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1999A99C29A9A999A9A9A999A9A9A99 %9A999A999A999A999A999A999A999A999A999A999A999A759A999A76A8A8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC29A9A9AA0FD079A %A8FFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FD05FFA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A099C29A9A %99C29A9A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A999A999A %999A999A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8A19AC29AC29AC29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0 %FD0B9AA8AFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFA8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA19A99A09A9A999A9A9A999A999A999A999A999A999A999A999A999A %999A999A999A999A99A1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD04FFA8FFA8FF %A8FFAFFFA8FFAFFFA8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFFFFFA1C29AC29AC29AC29AC29AC29AC29AC29AC29AA0 %9AC29AA09AC29A9A9AC2FD059AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFFAFFFFFFFAFFFFFFFA8FFA8A8FD04 %FFFD05A8A1A8A1A7A1A8A7A8A8AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8A9A0BC9A9A99C29A9A99A09A9A999A9A9A %999A9A9A999A9A9A999A999A999A999A93A1A8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFD04A87DA8A1A17DA1FD05A8 %FD09FF9AC2C3C2C29AC2A0C3A0C9A8A8A8FFFFFFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFFFA89AC29AC29AC29AC29AC29AA09AC29A9A %9AC29A9A9AC2FD099AA0A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFFFFFA8A87DA1769A759A6F9A759A6FCAFD0DFF9AC29AC29A %C29AC29AC299C29AA1A1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8A8999A9A9A999A9A9A999A999A999A999A999A999A999A99 %9A999A999A999A7DAFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A8769A6F9A6F9A6F9A6F9A6F9A6F6FA2FD0DFFA0C2C3C2C2C2C3 %C2C2C2C3C2C2BCC3A1A8A8FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8A79AC29AC29AC29AC29AC29AC29AC29AC29AA09AC29A9A9AC2 %9A9A9ABCA1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFFFFF %A1A19A9A939A9A9A759A9A9A6F9A9A9A6FCBFD0DFF9AC29AC29AC29AC29A %C29AC29AC29AC29AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A0999A99C29A9A999A9A9A999A9A9A999A9A9A999A9A9A999A99 %9A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8769A6F %9A6F9A6F9A6F9A6F9A6F9A6F9A756FA8FD0CFFCBFD07C29AC2C2C29AC2C2 %C29AC2BCC2A1FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA1 %C29AC29AC29AC29AC29A9A9AC29A9A9AC29A9A9AA0FD059AA1A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1769A999A759A9A9A6F9A9A %9A6F9A759A6F9A6FCAFD0DFF9AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC2A1A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD049A99 %9A999A999A999A999A999A999A999A999A999A93A07DFFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A16F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9AA8FD0DFFC2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2C2C29AC2 %A1AFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A89AC29AC29AC2 %9AC29AC29AC29AA09AC29AA09AC29A9A9ABCA1FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFCAFFA8A1999A999A9A9A759A9A9A759A9A9A6F9A9A9A %759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC29AC29AC2A0A8 %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A0999A99A09A9A999A %9A9A999A9A9A999A9A9A999A999A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA89A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A %A8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC2A1AFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA1C29AC29AC29AA09AC29A %9A9AC29A9A9AC2FD059AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A1999A999A9A9A759A9A9A6F9A9A9A6F9A759A6F9A769A6FFD0EFF9A %C29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC299C2A1A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD049A999A999A999A999A999A999A %999A999A999A7DAFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A16F9A %6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F6FA8FD0DFFC2C2C3C2 %C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2C29AC2BCC2A1FFFFFFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29AC29AC29AC29AA09AC29A %9A9ABCA0A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFAFA1999A9A9A99 %9A9A9A999A9A9A759A9A9A759A9A9A6F9A9A9A6FFD0EFF9AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC29AC29AA07DFFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8AF7DC29A9A999A9A9A999A9A9A999A9A9A999A9A9A99 %A1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8759A6F9A759A6F9A75 %9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F70A8FD0CFFCBFD07C29AC2C2C29A %C2C2C29AC2C2C29AC29AC29AC2BCA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFAFA89AC29AC29AC29A9A9AC29A9A9AC29A9A9AA09AA07DFFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFFFAF769A9A9A999A9A9A759A9A9A759A9A %9A6F9A9A9A6F9A759A6F9A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC29AC299C29AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A1999A999A999A999A999A999A999A999A999A76A8A8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FF7D9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9A6F76A8FD0DFFC2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2 %C2C29AC2C2C29AC29AC2A0FFFFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A1C29AC29AC29AC29AC29AA09AC29AA09AC29AA1A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8A1999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A %6F9A9A9A759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC27DFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04 %9A999A9A9A999A9A9A999A9A9A999A7DA8A8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8A8999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F %9A6F9AA8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC2 %9AC29AC29AA1A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AA0 %9AC29A9A9AC29A9A9AC29A9A9AA8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8AFFD049A999A9A9A999A9A9A759A9A9A6F9A9A9A6F9A759A6F9A769A6F %FD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC299 %C29AFD13A8A09A999A999A999A999A999A999A999A99A17EFFFD0FA8FFA1 %9A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F6FA8 %FD0DFFC2C2C3C2C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2C29AC29AC29AC2 %9AC2A1FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A19AC29AC29AC29AC2 %9AC29AA09AC29A9AA1AFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A1999A %9A9A999A9A9A999A9A9A999A9A9A759A9A9A759A9A9A6F9A9A9A6FFD0EFF %9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AA1 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8AFA19A999A9A9A999A9A9A999A %9A9A999A99A1A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD04A89A9A6F9A999A6F %9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F9A6F9A6F70A8FD0CFFCBFD07 %C29AC2C2C29AC2C2C29AC2C2C29AC29AC29AC29AC29AC2A0A8A8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8A89AC29AC29A9A9AC29A9A9AC29A9A9AC2A1 %A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A0999A999A9A9A999A9A9A75 %9A9A9A759A9A9A6F9A9A9A6F9A759A6F9A6FFD0EFF9AC29AC29AC29AC29A %C29AC29AC29AC29AC29AC29AC29AC299C29AC299C2A1FD11A87DA0999A99 %9A999A999A999A999A999A99FD13A86F9A759A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9A6F9A6F9A6F9A6F76A8FD0DFFC2C2C3C2C3C2C2C2C3C2C2 %BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC29AA8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8A8A0C29AC29AC29AC29AA09AC29AA09AC3A8AFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA1FD079A999A9A9A999A9A9A759A9A9A759A %9A9A6F9A9A9A759A6FFD0EFF9AC2A0C29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29AC29AC2A1FD11A87DA1999A999A9A9A999A999A999A %999A9AFD12A8A16F9A999A6F9A759A6F9A759A6F9A6F9A6F9A6F9A6F9A6F %9A6F9A6F9A6F9AA8FD0DFFC2C2C3C2C2BCC2C2C29AC2C2C29AC2C2C29AC2 %BCC29AC29AC29AC29AC29AC9FD12A8A0C29A9A99BC9A9A999A999A999A99 %9AA8AFFD0FA8AFA1996F9A939A6F9A999A6F9A999A6F9A9A9A759A9A9A6F %9A759A6F9A769A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29A %C29AC29AC29AC299C29ABCA0FD11A87EA0939A9999939A9399939993996F %9976FD12A8A16E936F936F936F996F936F996F996F9A6F9A6F9A6F9A6F9A %6F9A6F9A6F6FA8FD0DFFC2C2C3C2C2C2C3C2C2C2C3C2C29AC3C2C29AC2C2 %C29AC29AC29AC29AC29AC3FD12A89ABC999A999A9999939A93999399939A %A8AFFD0FA8AF9A936F996F936F996F996F996F996F9A6F996F9A6F9A6F9A %759A6F9A9A9A6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC29AC29AC29AC29ABCA0FD11A884A093999399939993936F9993936E93 %99FD12A8A168936E936E936E936F6F6E936F6F6F936F6F6F936F6F6F996F %936F9A6F6FA8FD0CFFCBFD07C29AC2C2C29AC2C2C29AC2C2C29AC29AC29A %C29AC29AC29AA1FD12A89A99939993999399939993999393929AFD11A8AF %76936E936E936F936E936F936E936F936F936F936F936F936F936F936F9A %6FFD0EFF9AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC29AC2 %9AC299BCA0A87DA8A8A87DA8A8A87DA8A8A87DA8A8A87D9A92936E939293 %6E936E936E936E936FA8A8A87DA8A8A87DA8A8A87DA8A8A87DA8A8A16893 %686F6893686F686F686F686F686F686F686F686F6E6F68FD056FA8FD0DFF %C2C2C3C2C3C2C2C2C3C2C2BCC3C2C29AC2C2C29AC2C2C29AC29AC29AC299 %A1FD12A89A939399939993999393929993939299FD11A8A9A1936E936E93 %6E936E936E936E936E936E936E936E936F936E936F936F996FFD0EFF9AC2 %A0C29AC29AC29AC29AC29AC29AC29AC29AC29AC29ABC99BC999A99BCA1FD %11A87D9A92936E9392936E9392936E936E926EFD13A86892686E6893686E %686F686E686F686E686F686F686F686F686F686F6E6FA8FD0DFFC2C2C3C2 %C2BCC2C2C29AC2C2C29AC2C2C29AC2BCC29AC29ABC99BC99BC99FD13A8FD %049392939293929392936E9392937DAFFD11A89968936E93689368936893 %686F6893686F6893686F686F686F686F6E6F68FD0EFF9AC29AC29AC29AC2 %9AC29AC29AC29AC29AC299C299BC99BC999993BB939A7DFD11A87D936E93 %92936E936E936E936E92689368A184FD10A8A97668686E686E686E686E68 %6E6868686E6868686E6868686E6868686F686FA8FD0DFFC2C2C3C2C2C2C3 %C2C2C2C3C2C29AC2C2C29AC29AC299C299BC99BC99BB9AAFFD0FA8FFA8A1 %9299929392939293929392939293929276AFFD11A8A16893689368936893 %689368936893686F6893686F6893686F686F686F68FD0EFF9AC29AC29AC2 %9AC29AC29AC29AC299C299BC99BC99BB99BB999993BB93A1FD12A876926E %9392936E9392936E936E926893689A84FD12A86F6892686E686E686E686E %6868686E6868686E6868686E6868686F6869A8FD0CFFCBFD07C29AC2C2C2 %9AC2BCC299C299BC99BC99BB99BB99BB93BCFD12A884A092939293929392 %939293929392936E9393FD12A8AF768C689368926893686E6893686E686F %686E686F686E686F686E686F68FD0EFF9AC29AC29AC29AC29AC299BC99BC %99BB99BB99BB93BB939992BB93939AFD13A86F9292936E936E9268936E92 %68936E9268937DFD12A8A16868686E6868686E6868686EFD0F6869A8FD0D %FFC2C2C3C2C3C2C2BCC2BCC299C2BBBC99BC99BB99BC99BB93BB99BB93FD %13A87D9992939293929392939293929392936E9392A1A8FFFD0FA8FFA89A %68936893689368926893686E6893686E686F686E686F686E686F68FD0EFF %9AC2A0C29AC29AC299C299BC99BC99BB99BB99BB93BB939992BB929AFD13 %A8A1929392936E9392926E936E9268936E92689275FD12A8AF7D6E686E68 %6E686E6868686E6868686EFD0B6869A8FD0DFFC2C2C3C2C29AC2BCC299C2 %BBBC99BC99BB99BB99BB93BB93BB92BBA7AFFD12A89A9292939293929392 %93929392936E9392936899FD13A8AF75686893686E6893686E686F686E68 %6E686E686E6868686E686E68FD0EFF9AC29AC299C299BC99BB99BB99BB93 %BB93BB92BB939992BB929276A9FD12A87D9392926E936E9268936E926893 %6E926893689268A1FD14A86868686E6868686EFD0E6844686868A8FD0DFF %C2C2C2BCC2BBC2BBC299C2BBBB99BB99BB99BB99BB93BB93BB99AFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8A192939293929392939293929392 %93929392936E929AAFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A168 %9368926893686E6893686E686F686E686F686E686E686F68FD0EFF9AC299 %C299BC99BC99BB99BB99BB93BB93BB92BB939992BB93FD15A86F9292936E %9392926E9392926E936E9268936E926893A1FD14A876686E6868686E6868 %686EFD0E68A8FD0CFFCBC2C2C299C2BBBC99BCBBBB99BB99BB93BB99BB93 %BB93BB92A7FD13A8AFA1939293929392939293929392936E9392936E9392 %9368A1FD13A8FFA8996893686E6893686E686E686E686E6868686E686868 %6F68FD0EFF99C299BC99BB99BB93BB99BB93BB93BB92BB929992BB92A1FD %14A8849A8C926E9392926E936E9268936E9268936892689268926FFD14A8 %AFA86F686EFD0E68446868684468A8FD0DFFC2BCC2BBC2BBBC99BCBBBB99 %BB99BB93BB99BB93BB93A1A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD %04A89393929992939293929392939293929392936E9392936E93A1FFA8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FFA899686E6893686E6893686E %686F686E686E6868686F68FD0EFF99C299BB99BB99BB93BB99BB93BB93BB %92BB92B592A7FD16A876929293929392936E9392926E936E9268936E9268 %936E926899FD15A8AFA89A6868686EFD1068A8FD0DFFBCBBC2BBBB99BBBB %BB99BB99BB93BB99BB92BB99A8A8FFFD13A8FFA199929392939293929392 %939293929392936E9392936E93929368A1FD15A8FFA8A16868686E686E68 %6E6868686E6868686E686E68FD0EFF99BC99BB99BB93BB93BB92BB93BB92 %BB92999AFD17A8849A92936E9392926E936E9268936E9268936E92689368 %92689268926FFD18A8A16FFD0D6844686868A8FD0DFFBCBBC2BBBB99BBBB %BB99BBBBBB92BB99A0A1FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %FFA8CAA8A8929392999293929392939293929392939293929392936E9392 %936E92A0FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFAFAF76 %936868686F686E686F686E686E686E68FD0EFF99BB99BB99BB93BB93BB92 %BB92999AFD1BA86F929293929392936E9392926E9392926E936E9268936E %92689368926893A1AFFD17A8AFA8A16FFD0D68A8FD0DFFBCFD06BB93BB99 %9A9AA7A8AFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %AF9A92929392939293929392939293929392936E9392936E9392936E936E %93689AA8FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD05A8FFA8FFA1 %9A6F6FFD0968FD0AFFA8FFA8A89AC3A0A09AA09AA17DFD1EA8A97D939293 %929392926E9392926E936E9268936E9268936892689268926892689268A1 %FD1BA8FFA8A8A1A876766F766F766F76A8FFA8FFA8FD04FFFD05A8FFA8FF %A8FFA8AFA8FFA8FFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8FFA89992939299929392999293929392939293929392939293 %6E9392936E9392936E936EA8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8FFA8FFA8FFA9FFA8FFA8FFA8A8A8FFA8A8FD04FFFD %2AA8FFA89A9293929392939293929392936E9392926E936E9268936E9268 %936E926893689268926FFD2CA8FD04FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8FFA8A0 %929392999293929392939293929392939293929392936E9392936E939293 %6E936E9368926FA9A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFFD04A8FD04FFFD28A8AFA8A19293 %9293929392936E9392926E936E9268936E9268936E926893689268926892 %68926892689275FD2AA8FD04FFA8A8A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A192BB929992 %99929392999293929392939293929392939293929392936E9392936E936E %936E936E9276FFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFFD28A8A192929293929392 %939293929392936E9392926E9392926E936E9268936E9268936892689368 %926892686E76AFFD27A8FD04FFFD05A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8 %A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A192B592939299929392 %9392939293929392939293929392936E9392936E9392936E936E9368936E %936893689275FFAFFFA8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8 %FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8FD04FFFD24A8AFA8A0929292939293 %92939293929392926E9392926E936E9268936E9268936892689268926892 %68926892686E689268686FFD26A8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A092BB92BB92 %9992BB929392999293929992939293929392939293929392936E9392936E %9392936E936E9368936E9368926FA8AFFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFFD22A8AFA199 %92939293929392939293929392939293929392936E9392926E936E926893 %6E9268936E9268936892689368926892686E689268A1A8FFFD21A8FD04FF %A8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8 %A8FFA8A89ABB929992BB9293929992939299929392939293929392939293 %9293929392936E9392936E9392936E936E9368936E9368936E926892689A %A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FFA8A8A8FF %FD04A8FD04FFFD1EA8AFA8A7999292939293929392939293929392939293 %6E9392926E936E9268936E9268936E926893689268926892689268926892 %686E6892686E686E686F7CAFFD1FA8FD04FFA8A8A8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8C292B592BB93BB92BB9399 %92BB92999299929392999293929392939293929392939293929392936E93 %92936E936E936E936E9368936E9368936893689275A8A8FFA8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FD05FFFD1AA8AFA8A8 %9A9992BB929392999293929392939293929392939293929392936E939292 %6E9392926E936E9268936E926893689268936892689268926892686E6892 %686E686868767DFFA8FFFD19A8FD04FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF %A8FFA8FFA8A8A8FFA8FFA8AFA7A093BB92BB92BB939992BB929992BB9293 %92999293929392939293929392939293929392936E9392936E9392936E93 %6E9368936E9368936E9368936892689368926892686F75A8A8FFA8FFA8FF %A8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8FD04FFFD12A8FFA8A9A8 %A9A1A199BB92939299929392939293929392939293929392939293929392 %926E9392926E936E9268936E926893689268926892689268926892686E68 %92686E6892686E686E686E686E6868686F76A8A8FFA8AFFD13A8FD04FFA8 %FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8A8A7C39ABB92BB93BB92BB93 %BB92BB93BB92BB939992BB929992BB929392999293929992939293929392 %939293929392936E9392936E9392936E936E9368936E9368936E93689368 %936893689368936868689A9AA8A8FFAFFFA8FFA8FFA8FFA8FFA8FFA8FFA8 %FFA8A8FD04FFFD06A8AFA8A8A8AFFD04A8A1A1A0A099BB92BB929992BB92 %9392BB92939299929392939293929392939293929392939293929392936E %9392926E936E9268936E9268936E9268936892689368926892686E689268 %6E6892686E686E6868686EFD05686F6F9A7DA8A1FD04A8AFA8AFA8FFFD04 %A87DFD06FFA8FFAFA19AC3A0C29AC29ABC99BB99BB92BB93BB92BB93BB92 %BB93BB92BB93BB92BB929992BB9293929992939299929392939293929392 %9392939293929392936E9392936E9392936E936E9368936E9368936E9268 %936892689368926893686E6893686E686E6868686E686F6E936F9A6F9A76 %7676FFA8FFA8FD0AFFA19299BB92BB92BB92BB92BB92BB92BB929992BB92 %939299929392999293929392939293929392939293929392936E9392926E %936E9268936E9268936E926893689268926892689268926892686E689268 %6E686E686E686E6868686E6868686EFD0A6844686868446E4477FD0FFF6F %C2C2BB99BBBBBB99BB99BB93BB99BB93BB93BB92BB93BB92BB93BB92BB93 %BB92BB939992BB9299929992939299929392939293929392939293929392 %9392936E9392936E936E936E936E9368936E936893689368936893689368 %926893686E6893686E686F686E686F686E686F6845A8FD0FFF7792C299BB %93BB93BB92BB93BB92BB92BB92BB929992BB929392BB9293929992939293 %92939293929392939293929392936E9392926E9392926E936E9268936E92 %6893689268936892689268926892686E6892686E686E686E686E6868686E %6868686EFD0C684CFD10FFA86FBBC3BBBB99BBBBBB93BB99BB92BB93BB92 %BB93BB92BB93BB92BB939992BB929992BB92939299929392939293929392 %9392939293929392936E9392936E9392936E936E9368936E9368936E9368 %936892689368926893686E6893686E6893686E686E686E686EFD04686E6F %20A8FD11FF776F99C293BB92BB93BB92BB92BB92BB929992BB9293929992 %9392939293929392939293929392939293929392926E9392926E936E9268 %936E926893689268926892689268926892686E6892686E6892686E686E68 %6E686E6868686EFD0F68932077FD13FF526FC2C399BBBBBB99BB99BB93BB %93BB93BB93BB92BB93BB92BB93BB92BB939992BB929992BB929392999293 %929992939293929392939293929392936E9392936E9392936E936E936893 %6E9368936E936893689368936893689368926893686E6893686E686F6868 %6F9A204CFD15FF4C4B9AC399BB92BB92BB92BB92BB929992BB929392BB92 %9392999293929392939293929392939293929392926E9392926E9392926E %936E9268936E926893689268926892689268926892686E6892686E689268 %6E686E6868686E6868686EFD0768936F70204CA8FD16FF524B6FA1C2C2BB %BB99BB99BB93BB99BB93BB93BB93BB93BB92BB93BB92BB939992BB939992 %99939392999293929992939293929392939293929392936E9392936E9392 %936E936E936E936E9368936E9368936E93689368936893686F689368936E %93939A704B2077FD19FF7D4C206F6F9A9AC29AC29AC29AC29AC29AC29AC2 %9AC29AA09AC29AA09AC29A9A99A09A9A99A09A9A999A9A9A999A9A9A999A %9A9A999A999A999A999A999A999A999A999A759A999A759A999A6F9A759A %6F9A759A6F9A759A6F9A6F9A6F9A76764B4C20214BA8FD1CFFA24C4C454B %45704B6F4B6F4B6F4B6F4B6F456F4B4B456F4B4B456F4B4B456F454B454B %454B454B454B454B454B454B454B454B454B454B454B454B454B454B454B %454B454B454B454B454B454B454B454B454B454B454B454B454B2145204B %4B77A8FD20FFA8A87D7D52775377527753775277537D537D777D537D777D %537D777D537D777D537D777D537D777D537D777D537D777D537D777D537D %777D537D777D537D777D537D777D537D5377527752534C534C534C534C53 %4C535253527D7DA8A8FD70FFA9FFAFFFA8FFAFFFA8FDFCFFFDFCFFFDA1FF %FF %%EndData endstream endobj 227 0 obj <>stream %AI12_CompressedDataxkɑ-CFXn#axVՌbhPjĽl/=~n+U̇gd<͎?eX=~|zOz~w~?n×ӷ>~>GϞqwOohl߼~$ OssU5>Կ;|͛o}34wz/Wt_]|xߦ/]W]ۡx/ rm?~Oa7~/̛a~3[_ n~[/޽ꟿOoa4Ǜ/q}|ۯ/~ {c|p??y_ӧ7{oz/wަX鳿~Ʒ'OWvf4}ۿ+fSS΃>}7緿ͯۯyg ٮz~=y>?ZWUW{ <#X9~S<ǻ-/4l۰A7?޿} 񱑎>~=#qz/*޽_73A?Φކo~˺\o~z[ =\RըZo8Ɛ_>˻_ӻY@+<gRޟ? W;sW"||:"x/l>C|  |K8bC/;x7>~o?ׯ?3_gpV@wp]o= oy}3>WO\3߿>cwϼG]5wWlDz!o#zʭ_>f~ۿ>:2{gzϏCť'/o޿Oo?/<tޫ΢?^/}b~? ;} ނ(_/pxɼ2} z_a`=o>8^Ç7_/P}aa^ׯ~UnjXMRnXRork]F7mM4Mׄnnfk׶k};~n]չwc7wk_uzߏ/oW$O~_6TC=Zn0`0˰pNc5#l،ء/ql;~5_vX֢uh=GF5d_me;Ubu^Κ֥#W?6i#^z2+)zXU x^ ~]ݪg>oq]:6wjj/-{(pe3}3eSWwB3}7?tkӃwׯ QH}ɟ_Ԩ'?E'eJx&M'P䣢 ~Jl`ȮFvmj'1izG9cMvF_mC4q#^xŭvW`;~#(3x E* *F++'Wlq2?YTOZ'ޤQrΣO!2W/z+Ywϲ%aːO%z53kbPx#,@pN\.'5̳O^I25bQx;;bW\=z3&i%U5Zn#\Da-sB4[4nr2ӅI"'XcifS .DPnEWpщ \aDsy\naV_p, <.Up(t#/=x 嘊㕘VZm9\qeeWNv5_ `[ٖ wqW[{Wn5Fr: ?uTomC?%XuSdI_խrZe|qڥYgֈk մnM]lwpcF_!I{.UxxF86`q(ʺWR{LB31fi^ 2oZ̐58jUj0Ri) f7N^Mf~ɣ9fFkpΣyOlL(]t6vŴͲmlnN[u`{7moȰVj fL/BHBU1ԇ|l/և:8'źr BuS+1UW_qU")ت*7 _H'{+@cTpꠂh2l~ )Kj qj2ZVIWgWTTQUEFix*euJG.+5YZя=M?ч؍cB/첦0Za^s:D.;w0cW0uk{[8NW4xl¸q#;.m.S8 Rh͗[j-\y2, |G\~23W\F%MpX[%vT oXrzgy<,2[e]Vt|RzDp+h]m=m`B5"~:gOh[6xm',>>d#6$>AHl|tM:a0no9۹ϼy1`_r0⚜\Fs.R1 }sι3Up6cG g熇h' g VHy8:88jLmp-˼LxXtxsۊɷ a:0搂;an4܈d2ANi:iG~x!Ai2 6NXI0&) S_\.G-LlȚ0m19rt҆ G,`} Gc6x5x]&bϐ8I&JpL#1^nG0tEت Ͻ+3/.&D; EȈ ^.'o*&G}7|AG-0Oc_ yFGpf<MzpYaJ7!'MxrmԵ)CBX)O{w_SnhO5Ӟr񔄨B}09~1fYw\h/C8˅Hg}`'Së \cAu?ZE0ߎqK N= [W)zG]6ؿ/h7CK.8d 5wbG1\㮩0t zo9Xsu\r*f\xǃNl9蘽{!L|=娿`5Ec ;q6븼_]/=Lxwhj|}qӀvc_CW)+W:C0?}&?vmiq9Bm{߾}kM$A7mkoĴ[H0 44NXQ-  ܭX{{U iMW_PV&BZ"W uCg&5mgҤYi3Q6HI 3&NI %:,oP/!$:7g7Lo0Df8x );ǭ9Ŭ:m(<avh14S@!s qcI5̌ :ht%%,='FpY]}Jik6љ:, .pyI&&_׬{um{P0Pr1kKbϭ.ǃե j HAҮ/եY_j6Wq+fL$Mr"ZB1)@}Zޫ0)Vg%ݷw[^;dYR|Q=Jc~Dm<̗[E4jr_Ù>cB\љџ,ӒJNŐs.z-+H%+&]`PҥO}`dJПdB0fVX$[ Op* D35lN`\UArI K^s^X0`>m05&[إ ی[GqjpJ`rˉ\]0Jٸeekh$z,|E  ,R/%W%?EWW.G׳V͙MBfSz#hlVѱ#Nh[H"p΂^jFO51DžHr$*_9Ԝ:/# cnBdbpP`!3>3I0MˆTp""[OjJgӄqyk28r_[̪"vS/Y&2Rň/IH 7PT.O$-Y󳣞!=s5rϓOϔOBBE-‰ ڒ'4AŁ m|'_=]Ǩc$.j$Ab,#I Qd?r{DG|rG]Lq9̺d>W~fJF. "4ʡp{Up#x'&az=qqkt`ƿ ?p .#}s\Zy"`b6BJա*Cφ@:ՠ8: vU㏮J87w [ĚXY-lJh>-ݒtW۝wT@ !Rs9C *Zbڲ`2X`Zilnl]3vg`M.|Z*Ҽڍhv*1,m|XhOZxϙv 3올c_a}Ȅc>Խm =ߗl!O$1IFsR'MJdnrᙄ-7=jW L 4~Y~cʴe39h>M'9pO k83 ,厇'˜m AaJ!pyUEUɟKr.$Wעo'|ހ{F7>^0%igJ#Yc V#!IE,x2 $ZA&Gd':FNH<$~ڐTUǬwH}v\mcs1S;뚊1-U4 {wDwS]-n~0!/6|\C>9̞$k)YIOE1`Ky$9XjUMjɮfd%+&D=94?^KGP?I:?Vs}mrek99 Xlۘ-`}*PJt .y)E&KfEϨK%/p( 0TP RHF &_hy͞.o#kCb8t~I@ )1`a%=p{pt*:1m fF5gsQ{IA Vw)s*VY<7NZWUQ g Y2SkZU<1 3'=k,,fiŬz&p9 y5hׁKBEQ)cTT'j5$]Ϟ\c9#8gȲM[C03I\* Te7>s✼9|ěx; ?JU& }ҹoG-pȳW1idfK eSVR>'J`ҫ е-|,.+>K9'Ũ/,dL%J'p r9VXR@zH_𙧁P&r̭>D)#^#VMéwІC3Z?ѲrdہFuhG4.ڮ1PQigw4Heq4 ,iߵyL~ X4~M gf[;_z xZWpA;Ha}pAr K= `Ln༲Į8{ɓ](8uRGڗ fa w]2x} ʗ{b)o#AdZ#>Wr3U:L`XRYy8ٶ0–c蛛A_q'?_C.di\m"ae3qֿmmAZj„Ieq8떯#:C,X[h0 6 ƊAhXg ZWBڭkVB] *ض+fE?ia2m?mڏ"!ʎ\1r3ZYόۂ9pZZҹB׷ɒ4.><|, (5.eRř&XBb- ^"1HAϷ$,}OpRۆ>IPTiFD)"K?0W&)22[|npuԥy1ڔc2/xDOU#=zBd䟁q02 qڽs82?Rbq_9W]MJdzC()݈j7o'D[`{R} XS͜#|s|gaskO3*FwlgPpT=v>yW9c5\t~ 8~@ݺV`e_ gt9$ƪ+6,֯r#SR5@!>lVrb%Sh<ΒOpf௙H58dzq"KА𔐂Pƙ̑Pq'Fy:yru]*4s4#In.'S%Z<1sVr3*&&;Ay3N dd 82J ,Ӝ潾 LT ]*<&-ǩ=1Dpv +]+`ipz@qk-և`2{O祧`:Ά '4q(L>Oz=&'rRG>Rm(>l2Dѐ./s^9BTbŠ}5z^n}#]ǟpvM_3&Hֈ`ʨItޠ!tW/hfh p Im"h HjzXe6Kb%Ṿ#Eۏ,`m4`]t=+n)7 IwClr He-ڥR(3|-.e vS Q>7 D>'.i4% CQGayD 3i܊[zp W2UJ1:,;n.H} 8Cdq?i<5 {Y] C`lO9>%Z+4~55Zí+ud=$Mն8miApwnm1v(,b3 }2/[ 0&b Ls혜!,]'Xzd2Lm?in#Ƃ3S_ Om^lēV'c;^ؒ`Ĝ4<ETw\ЂrrM{W&0o#NnO4}YF (%DpG0Uݍt!ěPc8%XBX*Ske*XIIe&&g"52p> Z馬^j\Lt6I^䀳%ß5غcQo I)åk^\1Z(0B23}윥P ^sh;T#f(qcКy26)#w "DN0͵0jXTCew3/1 \d"N^5gv[AMp]V"&xliΩtfPWPHg `^`9qV I(]C|=2_JkpR,$ FBEDP,Bp ϰ(~M,ڠh8 Ԕ3 %Lu7dU܁AkNgAwW9̍ޏ%@|5KV+q 6EqXη(W\AHJ0D~{Q_B4ߞ;xph<<z 7ehp5ӤNB7V>FYKH@PT՚bCpi!"|4"d!Y֌xփnJ"fDs&XE,}Z-'d*Y)s%*،!㿪*9x/ޝ] ϶90#1w-9i\,4J]'\Y||12}}' L~1;©&Vy3FôGzn/G2֛wOn?(Xǂ}6[Q^<"=hIv:m >?VFS[ή2ٴyTj/).Y[D%hWqj-s˨Aqx* r9wjt$H[B:5?0rmj`Β;c}L#}:=Xҭ>nr;:ǓsC29?P> kN] gV =1er߀tXN7a.&+cEA:1i=蛤GHn | 5kƅlŤp|mxՠzq'|>=Fkx19Ƙ3+!&5nTDsGZ.?yTf|v6*߽Oݿ[2Sc$pSl,|qp s/nڮū Ӫ=+jFk=?>Խ*LmdUb]wkV/W7N{m~ oW{~gpMuoc=:]IߒN+NYdW]6{UgS?|m[^+yuv'߿\6kbeaJypKW67/V_ gaf-#xI7Qvc߱_ӬaWW\} oߠjjqwpNL Is9U~*ӟ1᮳:?TEaC~|]5ZmCc1lkE^A[( ּaC<۵0u`!.#f|~+2Y.?";bUX |H?{I&A\rsR!ACc>d(OBtԪ^ Q:_tjrj0MuDՠaҎI h|FeY96k!@$"fb#e'65- 9Dۦ--F£Ȟ[>Z`,>Y^_&9l㼳ҷܿ=H8 6lޘv φ@$,{^MErRG|^ңzYf/}g:q[ m=g 6n)^|oCKe=NٯJbvoha, x)h!eK`trlG|c smdۍx~a%;b((\Zw%#.؅ 7 FZvmߌ+]0] 2l|-GHVAr M'5Y C _Oyb s# ]8b-) DŽg8'mjۢxWohu_ τaZ{Yh+ƊTP`"grG{WETʗ7\JF+7epX-mMie&?16OՊeGM&Igh̨wv5JW`LL Z I\m횈}<21_2.7JN5[4O%2 <`D&`\L@2eN G,'ĝ Y0\;$B,x 9#f<IW@>}@'4kab/w:yC/SF$y2rVJ8x#o؂pkfUHO}'jT l:`1[}0k$"es-7cHeW[ynfhlffU|̅OBzgw|n~̲<s~VGyar>@16g?3%uoٓN/bN( 'V#&ƿ Y=y+`!Rص^G'w *D^ޣE~BU3poqfs(6p~Q2cV#j6<#e,Od)p5,Hq,$HD=)\6U4,k@q-jJAqa |" [9DzűTq&q})yaFeAZrJl &O,&n]Gc 3H;E(ntC΢!Y'>Ɏx9#>%s|M)^G-kEV[`xͱ,ثgJ/l}2'ʭr&_=Wʙ`~ IK+yx CLɝ5D }d$]JcWp0XYN#+m 5&ur|PHI.?IG2?zpI>yFGhԬ2vkB>bI'܊Z|6D g3v 0Ds&MD Zs~+JʺM Ů. f/݌fgA)m si9蔌c,)7glrRQ& C}-^5:KN{ [{` A]>_O' 얼ܓW!(-uXJѺv`22nԺ!qS8bݘ-@(biMI'7cx;~B0ӄseb\&sʕ͏E#%$t%kVRbפt!C@+兟!.o)0KzXRĒ&6̂g5m,cI7ՓN0/'M(IjbG6} Ŕ]T%0swq7"oP 3JSUO4h@u,^Hc=PĂӆ_QVTQ{i:6󧋃 3apLOO=BZv;<)@ g%D i#LYYZ֚{ik紞amGA)YLM*hi/Ή\Ea`Q=ЊgiČ4r4=zٰ.5%أuL ŠjLκ"ФGA&9[ O<(3DoLIQۊpM'6Ad5_*D'*u,Zd7 }m#u'i3{9d'F^?կ4wZ#CHXA>G@^&@KR~rzʏlz+]Tj捕ɜ31~Nnt2{o;߇'{{ГM6%H2HL1HrE3yr &?xދF:C kP4VZ voZ$豵?ߎJs>xh0bϷ%ќmMPbXPD2{&ϕeupˈA)x8MZʢrhX&!Pa|8d42I] T^ (̚elRo5B6ڍ Unj&f΀\eo#OV Oc+-v0㒉vC7([auR2"MwWL-ZCs˽Љ=8 #v̠d/#>om[O3,65[(6 OҌ+2`;묭@0xAsY3i:U25%UT1$HV8ͪxVDVNn@tGEl#:TQXPzJ ińͶ[V Ǝ,T,o  X"rS0W %S:i#OԌ3 ~3ԌǰYt<74Hi:mt:m _.,xҧT n2z+$Ҝ\%z觌+`HI!:~ggrI)sq'r@S*S;I8VFCl8o0Wj?=Ed0"q(XǐpP؆Y"Xb F I. Tn Jhk34P!g|{Hc|-ZgHOޠNVW]#Tz'L`>jyIT=%??+#nju̐_c{BeB9=4b}t鿿طj+?bRzjmŶpÐ~hCHĔIU/enŖa ⛋ `F"BOQ$e,jg6`D;!9Y,w&e̦ Cާ]= k)T2uϠʼnRޔu~‹Gӄ?8aR1TT)mVkNz峲G5+e dHUjKL`kYsߧ<#`0b ;~M h0}r.xuWnƟ1z(АOr(Й\qP[k(GF ({@i%>!5, jDQg1iض[ F܎WO22tQDO5Q#OI#یl!鸕mVgQg@O#]y4Zn` lp$f a}1+AgzpsmE$%’F, j3hBD‚2,+GP;_ALzu`荕EMJ+q[Q1 _w?2ˈ7[,YjNJRFs!3iYTA#>ƪ{+qˑqF<Kt^0`Ļ"dyer! !d-^cD8g|k?!h&Z-@WEu*Vh`hA>RExSS/m[p@槵]! m75^δ^/[r%C=̓ƌٙv[23 L]ݷ-Io}apCZI? `C3cCVaUGդʩ)|@{ :K f\*ֆN FQHx"l9ia#&"ۇNLIyVߌ;aPZc1a8bQXLBK ؕwc=9SO'E69WOb{G©b-Ss_WVZ^Hj'+6V8;aѓkG_NsWP"xi(<{, SD\/b׀?^Cwp*?uPk=eBTbQN3(v**,-wX.X+Z1|'|GT׎94&˳>؏a4V:ln_␺`mWGoteie)D"P5P˂˟1dJlBzp¤)3ˆi[BJ <sl0"ssss,J,rV!{aR\ t2R"2OCY"'=Ipo&uLJf%\K$j 8¹~tf^{E?{Jq^UP@+{08hk`G2avH4b !0\o΀ H & ,*8A[Gr=P )*5R[PNHۮzoĉ:VE?v!Qv%@?AZ9mkȔ35!F|}4R_? Xs?@6L8$vP/Dà lD K30-Ru&$Y m }gA;IF$8Q[HW@#BN";EOCNx7c"_184>qPaH1+1,O Sڊ~҃Z.>x ܠXBKfKc~0;&!Y b"Ixo}b,,C兕 ~pD oCO±'\;Gh qY]lGVb=GP/!PR^v&KpssDQZe般eyQlg͊Yv)!ňG*(SοiZ2)!qP8\}c eR Xp#]x|hۆ'փ_ɵQ`m.<M>lM.3]z[NyJ$Lgw>bBZ#EՁ+kT-#%+.7!$W 7[_CH-n`>5o,>~#]dQQ. c25B.`co []}!͸9js s3Z]25Y*5^ է3<ZKҿߙO P#u=\@vÓJ:lEbZsQ6qV׌ t 2_3H'Q3 3FpYDq%-<6"SrܳJ5JKEl9vn I":RB[gKs.@_I|rV} ^dc]mC&ܫ^Y<`]dn:>g6$;`U.5˰kʮ\Cڕőn{~`ۺ&DaiWYH PKC; FU^2pֆ!QpINdαi@޺};{K \r7+M#>b/F$1 6-*IL V/r;…f;Eͼ\(i%l)鐋rWӠWkrדm@ҩ6!>p2$iXXٕ]VL-q1$iG0pot3YNӞ@_2ľvN:p%51KSF%(fB<jm Xu@/ΐ KܐP~ݚ٬bE8 ,!:?e6`3.szvd?jUϲLj/#TKQKXhl&V!ʤע_ |,XW$3)θ`2-p9k " ìΈ'CxWؚ`' ժHGqG䠪NˆKD JCNB E_ py}Uc >f.%SX{eħ7(?gTINgJ݅svbKT)WBgN #R{+i*:]$4 9wl5L 5wlLsvO(:ZtX2sF|Q{Q{Q{Qy5oZ/V_j}6V쓦P~D ,ELxNں=,sE^+~S̙0F%+M9'f4+e,&f_ ԨѪcV#djaJ%̂b%\HMFͣc6VnŕY4TEJmbt7̥7[wl0g65xu/ }݋B_ƁjǑS#EQ ]Rx/`=`c3CP\4c#oؕ *k#jj%jש*O?N%a>pq=?B~)ێ4t@1hq`s `yH>> fG!Z]{*Y3aA[4٬B_ʨF) }?vd6Sƻ<вf\㪶qoDc>׎ZGWzZ|H=bwGwphEܗNtKs`1uh9mք1M@'V+&: >W?%cWg"0HF_pKpG\{xLʇ# aȚq' DZz t\dRӟr6r^t'-Ų9=މhA)]Դ]gu)ԍLNe9Z|vJ좖-mF.-Qa%j9]8ƅdDWtn3b#@>rջKэ]qvm􇴖X{ ˸(6)ڳ|"pozIco`⟱pߜeܳjo*]J< PgIhqi\XbZk^x%48p*RQL?jF.Ip"IS;haTttwD">r&Q,cB3il6i]:rb -)nH!v*cGgJ\.G^Jp_shD+˴[T+AuR lkӸtk5p"T-q{R2btܕuSX/^Ki֚#K6Ui:du9Qޥ&HQzF".Dr&[\J6+ґnP+ɘH,EW+]vYPJmt9DvZR.svZi+k(:L0>r \bh8O5^:+LF`בBJU0'"6 l"|T`mi0E' 2(i>+pb&#F?Wٝ(zG&K E= =D0i#f|6h.XbB#6?e c1b3# btf;oz5#j&{m)m'z RD$ztAW#*kNl;f\/ d/7> x[\3+!,j:hVXϊ̝L7s|7X&JIv%bsܜW?Y!9 kGQw8[֛k\0b*A[! o668U>ޱ𝕽kݍ a:1 ĉ5_IE;MDj5#+g-pYyz(هGpFu"B`CF τpNX>z|FsCܲ 6C=ɏr(=y~ڨ,7$9<3Jj- k2vO՟Y/(U`6ٍH`6 r%ț7+EzNIpE(3HP"Rr㏫2y GHd_\<>^U0fw\znܰJ4kFm,&~fC~mNXuF&kr/ MVu*j֪f>x_ȭ6 ɭY{av&{'aNVkLYNK Opg>t ?{pV'p?Xb yA`ØEapz61KVlI6m,/6#㦽ĝōp{s.ĎDV}V0s_D E!;֝|T .d  *;LdpGg&9*K:tL9G5<"ǽ$Z&9͆GLgZDRtV"t<8{aSǢLb< 5}eei7ed!Ec!OJpVƖ3pt=5{h!bMxdxrt3l{sE_Nh@RrKI KR.1}*{5WCIRozZA<$t0I&K]kpqDݎ6U5 2 VY`Aٯ"jl,+U`oI EAkjŅ+z^XE`^xNnwRp :gyއB`|LWv>yyo=?>A -ox]O.ktv۴/4vbAh{>]nPHϲhtU-dDᤑ7az6JdBR2b%9Z6=ޟZmE V2( #|SHպ(QthЈYLaTH:*kQgif"4XD ~b?FeL<7>\~^0 89>p2;mQtlJ9# J$`.aLJo|]Oz& D'3M[dotHK| Qޱ.p=6QFz0iM!wt`((;8*lWJq+&C׿XSK1o(1ã{3ߕ,|^ˎ8 2CC;\6;>tORS3Fo#iZغ63jwc{|Ï3ёgş {3rн=ݢ_cac/,|fs( ˖FZ:N90@#2 . j{?LKmRaʒ4ǹ8ƋMO pk;'9m0m,idIct4G[6Ɍ"tMY pkPGq/${9/d]Ykq='nD,¼>@㞌r@pm<}==Ks! t]enN}c-3^"V͎2WX~Y"aWh!@Z!J:#E܏7c.іa,{'UÞ6/ =hk`^djA5[lE~SV} X7UuO9}8_ΈW鼳\Sqe͊ nWXr؆D٬cCmik&5}O\7[ ȫDz@YRq8dQd9 e]|iMs.\_)fT74GtazkY=pN!"uĭs~ħ>= 5ᎇ>jBߘ .Kỻ[Χ0tI^쓚u0:pqO1Py5@1 \ xê,sXޅB>X]gGo#rw6ZD( 'wt{֬Ti RI:E^=L>ԴfC9*u3O+A'9+^G=޴?v}=س>5*Ē&d&Ǽ%SJ\Yinq^C.iʶ*iҶ2P|cJ"]Qp]quae}m2dI Oq8u֧=6sKS,R1E8Sƌ/3k\q3f]`dA/dY4$KYGv$K$gVB)./'|i"N*Kbo9Nsan#ݭ޶%J{[$ECT7n)'@"}d0bV~XXJXb BJq9lAo F>Y ෭orkˈfMMGdX]#vIaY0?LD31ųj{Arf1!3#zi?#psKgZQ8 X~7pn0b>'4fbG=cqBcSRD]d􎓖&ژ9HoL'z0{UC_n[xtRr)$@h?\~ȴ+v,+ !T}vv4!'l{J[Ψ@2DýIݪEګ/G:m&;(X\i"3m ` M"۷(Q'7ڲd[&8,-K'ŊMJ,MD͌GwbRV?(:JAY4T¸aI͇e'*n@kdE+fwzchZ !^b!f0Rr" ,zHKδ}GD1ϣ>+fO#~o0}7{I;1x .3Aq!`v@0) B~=d- ?ڪ[LW43:d)j@B8OBIߧkqG "%$U^lZ&_K+V"^CH"_,Kw 3Ŕ#@rȍ$jߵzARZh:݌=utsO 85*z J]pm dqC )MPvsôMiNMWS1p2(IŵbhMij' 0lȾ[|_Y %C8<3QntzSXQ;s-;ܷܼ߿oOQ~ڃ[Q;֊x&.UoZŅE\/Qd(z$|HqM: [(:9\;/ZUJowZmE5'6UZQ:j+*T"S7#(%{(Dl6\KJ+K  浯 FAx5kd߿+>bԍ F&Bo<0sD#w6('MSWr!4%չ*V rְUTjEf\\mÃԠx@sYre(T?:Mͨ@³@QMx#tYEq =Aۑ3!.'@@<Da&*PsjU}TbfHo*dz .#rP͹4=)yLufDccƥ]T ?+FȚ-a$c ܤi22I޵b4k1"TtL`0+f\M]sccG41L )[G;^q4jU{Sv8̶cbvfVln);M46+*nl֠ g]TV!K%KѺͨ<+E.dÍڌں 6&Q¡ Q 6ɒݲrR3UI@jFaEV#C,d*A6=1jP6niӮOopO(wWb]iY6Ś&O򊷾e6Ԩ*>{)d3 <m{;_%;5TO_쐃;SO#:!0j\mGL3[q*}W@UPݾ~* ݛRv?{k4k7`-Fgl4c['Sl q(Txf3k'iO:RNj7ѦfEkxq8wyvO]\$-2ou.31Af.|2ouEkҴ6zYLSeM-cr|]>{L7y!هᚏ49GYԪ|y ;2sFN>w{wIyШaj <N;qVz+n#@7x8U'ڑGrc:u#*(3:7,ߘxl/3uSHXif޼fx]Ļ3rxdw4||3|Nlfre]1ÿ__> ?^>h4{׽!zg{=3`L0*N7e-g2QM {S.K֓O]jl훹v/ g;s+˨XHp>Ggg)_se{μg/`1znz@Ս!Fi1V5!جrivOZt.3 a`4,x6 %HiZZs\ՁTA|B7߿ThӸܦDn$I8d.=u_ ̈f P|<78iFN+v0 ͂,4_(7I# b@Yii[h|q5ӭDލ/@VC@)yuEpAG} ;ܛSGl爭T'H.2wEuLnf=Rw/Y۳|Y3 ,srfh /+3xrsɝIAqՌˉ[?;f"l[Ӌ??S欴kgF+b'ǃe3 >_!᳓ɶ3⟚ w7U3ٱ=kb\ *XWB+]xwcl] s/_&|0SKLUcNsRFQ=#I"\A3pW6oWh`$:;c8sU_;|8%ěɏ͛= YȐNyu |PNQa)3FXbD7Mw ټ^g;íqB_:^n*#'g548J˔܅)qq|N/ Hi`fl7LJs'p487Q=)X ^G<7_U7 ZlWV u6coMRsfu(=nc*SblCR\` ZThEZ78&C\3éd2=`og4R%;n|Hg<Ć@<"P3X#UN1#c%^;.~LhԮt^hvU juKy~F#uQ[zzE"cI>O17͕e\G (:MϏX-:cH~zV賁6 ~ ڑQ0W1"C1;!J$(41pvάb_5Q=l>g#H{jXyGƜ%UWN;(T BibŢ>;ΘSfjR)*y<;Ikba;ב㝘x cb8bL:ױdVח+.沐^Z<;h;R.!\Gyuo%NY0-kEV.ɹ|{\zYBRl.t;mUsk7oh_pm(ogpq#mC:]pET 5*5QyRfT78}x=ػs=ŪwܫR3ɰRW:KUNhw3vTk5 7J47DwHt$cpLvGZ8XEF UIֆUDifNKTaQ}g]]xڕRwb&QA^q~_dPGE 2"<2-Umڥh=ZQP{WVPJNڽՆ;Ak(i4Ycx5QC'8{uL[ͨ~Oe$b#wsswOUPD/ɪy%3M}*-=T5.9*G~CCPpKJl咰R_!_!mT{1ѤڀF0c3] {&tG*5(1T'Yg#+~+43@ìAJ:*5-E}\s !s{{h{OJ|Xʛ~&7GVgkx@VucGu*/v4lL1FNvFW2NyZq3gɴHѫǸ$xAǸ֪;z5 OH*+ʻ3_辭e\hvwǔ O_BH..жNW3/uxߤ=sSwܷ_C<]Zw:|~Axҍ6  ;FPwntWZPhY Ӷȴ^ ~>7,#|x3HLΰ1e;6)MdgSnɞ:S2Kl>sr:o)f8YROYdw; !*^bz72J/tr=e3#}q"%6t RV1ת0[X*\s$l*MhvQ=oh_ݖ)2:'S66{oQ޳1v`#?cYg'S%PTK 8_VP |3XsxB[Hĵp)/+p SLyE|/b6=/<>jmbCR9N ("_9t"2TY6 8'4M BZPOMI쓖@~dNgVuN0K<^exS]y]ٟ&'K-4MS&&E3ҧ'.nʔs)}_ "U!ㄶ=Rӓ%RS:WI<9׶{~;`/xjǛ=Vи?ڹ#<,-S3v{G;go.;n6aH҆ZX/6  .$sw{BU|uJ([y!eTø 1n/.;(̤ؑA:# [RQeȟ:7cF؀>-(;v{[%5$df[IgW4WoK,jPVJuq lQ66VTim8>SlkmFGo|TYmh f._Q#.S+99_bF%v>>3z'~9+3z.l$,zwYىFHss6h=-hJ5>@1b0sEZdppdM&k왡atŵ፸0D@`YΠb[׉&$Yuitʸ7 ҞOOy LwN \ uL}~-j7H܅Yb;saݵ;!慯աEe.ܵEhxܣKuhr#yr9vmgMԡU1Ez23LAxݗ=.x-e%Wjbҕ*v9j፤\%k$%6gY4wO E<  H=$Y6 qe*4:K蜤҂iq2 mNX^ &6V63SYe[v~l OUWC\Ԟݫ#V6PGیNZ5N#;1!#bYʄϹX= ھy3OKj5gҊSY 4N]

    W@7PɭglDq|=xGtՋr+=SKzײڸobDB 1^Gҟu𥏋v[קw8~I!4cM7oDjs,T`];>I&&n&4Ҏ3$^X|ѾO+bW(o>̬Ҙ~f+SX.w7}GKwŀ25mRR'-vxG|yGw?OaQeYAQ, o"@cgKg%h$[*  W`^9@J0ajp((:f1d0 ,u^¤7H'@-^؟\Ѱ6AxSdgy3组 33SK(HDz)mL[ aDVcïދՃcM+o=i9tV(dM Ldf?k@t#}.i`IOb6rbx;-;n*3`p2ݢ}.`H4 "-$/d’l΅d].Uv&(S{D2B6RE$8}^u]P/>?$KS/Uv 2W|i*5cd&0YX.uc(X =0*W徫[%SI  ++[-$Ue*o$ )fk4:xNqsRQR_8d5QjZKle6$srј}#XA8xs%J\$(15d]6u0 /}F[QL_\"ڝ[B(^9>ߡxwΒHMF@f-g%HAK80]`t7b p@E)*AAKL'A 4@ YM ,N i o E[= x ysęi !y4[4d 3!.eY;7wG{%_'ߓOS9d1QB2nB.%tχΫ˟z_ QYl+{̀c/{ȉ=zlOW-)eedI֤B̊grVMiaZ%*2,M@*h Ӌ̼T2JHW,LߋbG_' D@sw=ܫ ؇_ߵ5}+@QܵŝE7}iȞ^,BW$D})PNhn"ex>\ tR+7_1ƙ r&,fR&,d2&H=t$_;?=~#C]TZK]j$-ku;rR(EGi^r·S#Nm3rJ{UJW'*I{b[{sh]ϵcōPt1ah|s_*ǀqRHOY3#v`lQ3rMX7Wv*q@ yd#KF9z&iՍFgȕ7D"1q[Z!'$vI+#x0e.1 躯݀ד|-p$r &_Sa&kT/`L3.?Mu u.,ڮc->\:8c}jKΏ?qGWG. {s?rV\8}.R/}tC͐@QCNNDio:ڒR A8V\>LzT ﵻ1*ظ0g1:b-QՋ{g5V,{YuW/e*=Lb=[<sK=Ѝm1;D4'5kV_}J3_"'"ODR#y###;jo/㎣3cO wUdZi$c{ G8(x`My^. xÑ "R!FND)>mE5:R<2:QXy B^t]-"Trooܢf2NQL io+lT^ղ-jVj:)A}QU!y=ri'2{,AŃh,r0p3סzFou1oc=뼱~zzP2VoNnesU6ӝ]NH=(Ш8u'cg#|١^/;!zc@A5”,&1L@ǡaH {QF},($͍ݷ;^.uǫ=Fs|'K+ƳFFc* JNfCS .7 .Q'j͢ ɪ) B*)V/)q(*ӿ#;US=t4աm(duIcNZG5d͓R}x7y׽k'N$&#~0(xV)uEj~fεBZr:F6jֈ.b%GZoy}Nq{#w˝JKcJp [հ[k+f0VZb!kCV"FLb_bfz>OM`^ MP 6 Bn`Rr_ |Kr@h'wr[{G!jV~gZQs~$?Bpke(`E6郫QB6cZ޾ӏvK>!A(#]`@eq]>̝|u ho'/4λ Z),Xw9H^iucN%tSn o! !݃'=qߢ#HG<.UBh$RP\zL_Uī/?I(*=Pbo+vĺo"K$O_YwHnun`{}Ryc (L8az *`ox/T<m7KV6MB7*#|"3:l{q w:IXyrrj[ uZaRACVS0䐳8,5ROb c:HP! {Qlᤇj`SR|PNx"cIb5CV#('?*PWO #)ZK)R\"|^Fzq=XI|^{L1>̨[zύn<7&mbκz7SҦ62ô oJeD TB+HP`wc{p׏^@2P3@/'-=6oV_o3pQP_xGIWIJ;tmw+Wy("]Y W?Il8" pp*D{CrI4\F,bYZM`iJW +M]q VGZ3 JL)GP`6A(daR e~:Ҙ Yx"oF||ۀaTa.kU|5mWW3XrM.Um!.N0.5aG(D!^^\ }eK~u 0.]zunv }SfdUPfg6d\2yeL ~eESǍl>9C=R,Wǜ~C;KҰ&m;]\ cg'woǝWH 2_7H)f>QN?SxcOJj qGX1 z2 U,չx7 w3V,ڰ޳% fš(!KTW `ʌ7 _vcMn[$> Jq189͵dGMsRQKՖ2T1.uW:]t#ƍPd=%Bnb͈b>jur)Qx`DQmnFȚ9")c񉎥&@^īO~-(򖱒'Y Vf\@GM|]=.遶W8 8WPr('eX4C*؇g8 Ʃ>!tͦ,Y6A*=xg+=vSӓwN-AcCL?f Ϛex,\5Bf8ny  ӓڃvH+:5Uj>r 1xLVș }O 4,DpaZ')5&$ÆKu%9e+͜suKs`'l.aQ6Lb3e3\,xrNWjԱrV 4ˆ_6,_'r/dqLHV}m*{㼐JaZ'K8>!ꍟоU!ux>(f!>AsBwBE*%Ui!FJth X%G&~(PO8cu- 5//S+Dp"ϜafBlHDMgOz'mi)Os#! |=|}Hfw?qJG_D*,$:d%T!Qٹ9uBu0pB !GH@ߐV#>qWh)EtȫxI-qK[?#j$@@)LČRqR#Y6񬷝]M2܄5,pX1f q,%!u D$KEHH@9PdZ^F*s༡ӃNs.ѕԪ\UOD\=Ra& %UV$)^XB bL"o4QVӮ"d>fJlVQslwZƥEdTg>6٤]JM>Acm}n)Z Yhěj\-TXHDB^¬)ڲl^5LTa25`F<[*Qq˩\@]5sCUX2hCH4Û̀@0`r\TCAZҲ{,EeTKS]9_㱗eQօi0PFNq, R2x&V693 Q047S̮(M*BR*w&=vRy* n5Z > +^.TIXWgxdrd >0ҁN{fJ <`pgQu5b@Q9uţ?}Z̟>e>2Qtf>128jF[SaЖ{\2w9WW+/c!X+ P *B%ت ܯ*'JS]{Oך>e \~'p \~\k w+x;};T*%qB([73FraaF΢Ƞ H\**p sfo-^SBJJ?B4 ;.;fVEP(94FJB-Wl:w..Pz@^3u"nV%ʄq F0_q֕_J鸢I;TV%j_ҮkiR޶[_k& ( mj\dG/<9[#c~}&)|8Umw jƞU 0d稄(x%d`րXnrQux`q %d6p<4)jxf08tƫ&A))_WE ;}ǧ gAB]u׶'h PpO4瓊u=MaBҡS\ Pa;'D._Clnqs=s#Hv0<vs/xmnJ"*Zg =n, irAJSSjP*Fb $-oQ iG$ ;VtstkTJS' N2L[/_NݹK=!zUۅzY6g$C7:kx LJa2#Sքl;gDwnhyա],`^H}uvT3, ~܂9]h=_$Y uoȘIWsw*J:yȭ_e.(ez\2 Oe-3]cY0 O5FQuϮyYMBpNZĮ{F# -rWI2ӸVj֕ByULY.= QV]On;R; j7\e:Tv&w Nz-^Ϯ^kk|<1%<=)1bZ1^XTx:H!ͣDZ4ܝy0 g`bp=$$8 !WHnMeZ5Eb 84N)!Dv d>ziI6XƟD%a_֫ QZ]2i@n?/9x5 .K)H24DRkR W뫻p't34SIXVZu!|ajt᫋ےEgΊC 6do|g>1>k- &u 8_|@x_$ƗiI lw,s!tm Tf"SΆ˽ ^GpLO,l PlsJ#JJ|,4xu@k6*NR=&v(z}`t&t)Z25e}\drOs`B޺bVӉW]WՑHP VpZIv'y.3;\~ӑb䟫jI>%$G2^ Wop,/K²"+[!Y s*+YjqqLi ۥCB@"q3՝TCvD$, >=pP Qnurq??tU|# y)'J(Y&++INu31AsLb#){c_k[w}S/C3H[c1Y $X'P.7H0HM@L)o+52޽!ibdGi(F1Ѭt@)o LQW%8u F"3K1$"=ҾXMy9.TrsO<7sy|/w)S:d)J +fǑ5e" v$kz*yusꧠs1K 0gܵsvҝ!`dVHV\C,$ Upm^Z֟jgRh21O3:g2,chm'%+EZS=b#U]!gW\=ouZq|VʵI}W|}P5?cC;C퀙*L㇝?((%ԃTOԿaYI#9 gta|m&÷h؉EV "5fw'nMuekܠϞUP =et')UƂTl)&aWB[f*jlQb3l#Og>cݿ~2-Il> o-_im?@F&Px(УO@\/AGx:堡G U-kVOO~ 9X)eOPD1R~~Gx6\Yqo)K4!"/fZZ2#3b%Kveq,onO%)HKy'Q2 umJ?qU }ql{&=ag[yRe}÷wo@4 !Њ^0)f6R4 TP  KS* w)g{0}!`-D5fii ,LuuNgtbx@}sRXy;sqTX=WUqg/ :`P;ܑr'{ٵ}^{U#k{t,c/6ઓ;t |tN Zi 馵Tܗ{vJ\nGЂ4 < xgs~8bW=6ơΟ6, -={rgl^ؑDZGRz~Y?v Ÿ؎Pq$IuTooUyp{id._1OBAIJSV5FiZ2HR#e*uSb6(-#yۿQ$o`4w@nu PnlBgP7ʲDY\yNo AWe0b4ɲBv_Ӫ& 54M=@"69;v܊?߰ 6B3[*{ADx#qWAA`ū(?3BV¸&^Kkqz4 ?Kk/Vɀ-*v6.+,ۨ!r[4>ʟڽ:)/Wf{^z<,5KI*gc` hE6]ۓ_ÖّLYQgE Gd<tjV~pf&Np:B|g<b͒J']9,TENxez Wg8D3 uJsp4I *蜷('ɄՐD UY4m42ijkJƘ^D&_7d3U!QRXl!3!=!ɐHPurzmnpuf"t&{຦>l ݊=zxaN~=Gpm$ξoS]@*<(N<M4ΜZLS5U2Q赐{. MRf&$wuqv{B>ZHDqD%ӑ"O~r-$77=(odjU'm$|ˍyVh?*O$؋pIk! }~pUQќ dΌ2*wrrS |Y;,d5A)켧{+'S0^Wo.Y6l&*N7njV閵3o\5SA3)N_a+#DGVC;P'ST LW;LȽU2o&3o ^of,y4sQEj꣐nK"J`2q>guǻC)L`R`)L 0ԀT/2:7ǡZl#0nWøH@O pB+d/)w "V}S3Cp o\":CtG SՉV!1Q\lh;Z-RS㤸]{zslh"zuJTi9B=頲=:Z-1$ɍ"A]dGg&1 A`ĩV@5 rh (fwg2I?1>4cGuS*TԣfToRE4(EP%[A\js`WsF (wYX;0,gm^Qdb'T@C&D*I:I0-%JPNP3"8╶$W\@ QR-QM\oؓtbޱ7sMHe4tȦqQ14xIZ#Wrٙ;d$AZ "a!8Ɖ#2Ӈ{' V tpm4&Ҷf㶕BOjrzζҺwx?FV=_4Y]hKQƊ Z6e|g[֒rcKkoD(_]_wo<;z4z/tsCx!Ǩ*7߅滤$fʧ  #*(l fZ}9mqb[J[6WckcB=Z/Z[r9˔`6Rsz[_i{`LouLu_oG] lX/hȁo@ 1&W!|]%YT%zŒ?-y|>fD-2d,9 Tp0~o2ha0RXu u hoTzIu̍E\ϭ;*^vN2b=HjORG[bJ-6lZ- *bRX.@$Kg,WbCmK?dIAS0h. Z[-xZE*r^: s EV @1` lT%00HԌxL U$H+BJ)pB =|nI'>1X>I['I9G|&MƆm0FГQ]Wޚ/cp5u;]?Zp=ɤm?BpItfRYBn3 [Kn9}u>Ug^;`-bBoo@j$h&f2/XYĚMztE֧wlS*Ld>?#{@<'|PME3u.d>lڎ EN$9D$q҃5 ɋd=Ӈ 5=ХzFg4JZ{)NaS9B| }KvGvfM|z;/d!8QQ\vm{|́l=aqac4 Z5l8FqK8#8&MA+EVwp WŢE6^YSiNmBu+ `)U ˼H&Y3|!nf9{Ya8z|erRSI+ns(;VʧH8wXǂTS}6X\5H[HheU}V}\kvOm%t~VuQ>;6.7Ū.!WɎEFzF̀1dIb^@$x* Ivyw5 <k<&X?wB1f1ıi6-y'whnvFiXR{(!_bwC<}XPv2ġՋ)Sh{K54l!KF`D{Ӟ}A'ub!\㿟HH%) 80H]7";bdHWAH6<d*g|Ů(r$vO x  mWn0WfV(/DIX~24=\(c#\8UtS{.T*C39V͡'P>×X|.K>cdv] P~ 0怦Tf)0SnaU3r `Ŏ4%E7^^:lF_fCvͽw:@~w^zr*^v2@aUȢ3"+"x*q7Oðrxo9c^ O`OB\'@P"Wt.Z{mޗWt5煴Uİj ϤV'ΜXOz2˓ ≀Uz!)9t>-RFn$MjVDNj6qHM:ٱ+mb~3'mqiS4k!mWYWsӟ*[u hOg9  5㔞'f4c5b^'#c~.Ɯ4FIOg(ű &fXEg I S뱩7C<`b;Yy&X9)F1rX*Gv۹BBjZ=qz8ݔSyٕѵpѪ_ ]r•գ'L:cذ"WqՅndr S{2?3.+yJcr߀ns?n?c󗏍0 tx֥SMԤ79UOtR39 @I2Fv(p.u'cd%FU`lIU6`g(RɅ&(RUH0JTBeu! *6 :AHq-_c  _׌d04k 䚍 w6 WY19A7ق[q:RWd8/VrYiT:uJ+ߴOj5xOg7q@rraliW\B[:iw^iGyP7}?=hZ&|1 (Iٜ0*5M,7Ek0ٳ1=WѲ=_QRB^N(^B,+4ū mF0C %dD1udS&dmڕأZ_w?+J4?+J45+k3Fn+w篢ӟ\dž6Wb8VƱJ>7U -DL0kFw ɻhX__rC &|E;SP3zWƒ+9}yމ6$Bg;?! ֒ZK5jX t 0똧«@XJ(p;QY9pjEt|U} ?W(;*wVq_#\~ohាI5UxL{]#5w 0j? l&6ᗓ WK88?}Q3l<]+^[&5?G榡 b(r>DRlEA4/wfd  8gQ@/Hψn53N9zt!l1^"OUxzD1zGM1"5ycd%ԛ@6F8qμ@H@RE<ʕ:qu#Fr\cڿ|՟oίKVw5JZV;Xq ?Ú̦(Ɇ(ءH`(Q1BxdYdF UQ9pJ%Qh#lij]{u"{WIcM 3|~אUd _tbc,`To(r(:iݨ>s6|(w%K#"yc0*Ũw-9_vN Qݳ,tz@7vp:/j8 <;]"ZqlIg򇢃d+qׂܴ6Hf!(w/-J: :qc r8JύF;3fs)#'Z&Jg_r'&9]V ׮NYV{hO^!C:/XBX" Q^KQN(F(89Ej<_qy'X\W-YtݝøR,3;a縖cREQecyHgѓ/WHRX4N&>Խ6unͰ,an&\f{;*|Sf M{5|ײ-_xu7)Dkr;ci<6с+W',t|YsH=lr.Tk=¹o66۾\ݟ}uMdvyvzfANVןA8ۭYL7U, TEOq8>8S1S~ 5nV^hO?<ρY+cw.h^^1dto^o ~f.tjn҇^t'#tsT4.[꽫0w.Ai9_ʙҺW"^mjPkVk%65?GJ{/$q `EnQ-~6uO;ij>yY=/uTuTϫoɞ\ԽU)|{ B;SdDwɂU.䓞+7gOʎy"+e&07t (d !-@`{LX7zesKY R.YBP{Ŧ r~>VY>a#$)%Q%LF5CL﫞ICqsΚ!}8-~n+}txӏlO6UɅǺD~?w`_xW.oCfƸ>6%}thO0_M<[7z!g% !pҙ кx\wrbՆɺ}K2U[^ltMhEc|uaW\];j~Smh!pʍ0˗oqzlaIgHf{};]3K v<ǻe5~3oż7ƳJ#hr_|m_m>M⯸-$MeLɚ{i'{};4N:_rE;bp imq^ІMS7!?cȿא 5C`%2}mDbCs S~qcT@N%a,c9B*`c,7c_&0>韂>xn ->T|#/@T{" 3({ W&&3HF9} xL50lY"x3'Ѳ ۳@fM>Vcqƨzb+6M tN`ӳ-)e߿tiI+<0m ̱G_.hƖkbG:! %67V}fEfֺK&gk9A|ͼّY2^= eVsΤ 8q@if"vI %b8\ݯWIfIm6!6KۄK @.ނNh4%OIޅ E(e${s1R$QJ3#W s¦.j"m&qi o:'C@JLBKA`;$,)VJd^op\7fjV2/Ҧ56fӲͭ'kuuhW^YVcGa`KYq=S[Ny`iy>()kb`|Yt-'϶~dmwm G0^@a Y]벖Oi {E6O VJvʣh-$1M1!a;[y{{vRc΅LVr|8%R&urc$dǴzD:H KNm&ނ,Za 3Sg;e_x$:H"ͼ/D+{Ȓ+.x-qw5W4Weⵛ95yJi 3ٳ'y5I,pk5[ t8?"I (-iΠxUU0w;@֙4 f~u{5=on5AAs':mi~ͦY!@mVDJעYUd F O'TRnsHd2X$pDӕ<͓OCLmiffT0óBzLN-*rz5)=1=+/EeIKE} P&DQ(8(@ܠ!'w'3ȉ:2’uɘ 6m`n+h-_7\fi$6.7XQfx=vGf-ɔ3'ɉq%)iG`|c7o&%{̴A<]Ǽ[4C;,bN6=܀vZoԈHJ{˫CP2B◺0pplB??)+o*qRX7!\_6>n@/azcaˁʼ}ץꛥkR퀿/=ƕ wNp /p`[/ ӸK;e*2{K_#R) .Oxg2ST9[^pp1a` @|d\  T89;f2TF}%ҞBsU>%硫YhɲdUf[Mr +iL*@Xo K $gBY- k%3<ݾך,c:dIut{nn@IsĥoRʎ,tq3.qǕ>!.m`㚻\wC\ӓ&'}-1o͞ MdS/q-kI"gw;mvYY]|CZ8 WI$n,^y>=u]w9)HQGK:Zq&RǟgZ9+z `]0&")ZY_WƑ|"uO$|B8PTLzDRRh:$fFē땹.W"~Ŕ:7W40>TᘯLe6;ZlZ04H|}3$\vwRfDN8qN.RV€ԙiu[8xD֌njZDNw(Fs.ݰ,?)с4q-PO駦&,w{STc/}:oxcY)+O9A\۾ħÎ_M=IMn ujy7!'CHX\fݗJ1\iuQu0U2Hax)rG\ef. 7ٿ-hcR?%r ;Q`i|nwY+̑C!h>C~ύ e "fSDL<֩<+O4ys! ΒbdN>nQOL~%WgO<=dq_@ElG (3eO]>6j#qbv4,$ޑEViܡ6Ғ 92AF6L}إcUr߫lŬ0'nbH=(Q+:yM<+[*',I! JeTJCm%9f.C9s>~$;/s$V ͷ1LHί3 0Bб cdg+-btDޝz{&@4A?ԄXp"ueu>q!Z۫mt͡>dR^}s"<a&Bxaî^"cbG&@&q2RvI"ȸ_P' _ E_1ҍ*c~_T,QR`6]y='|R?P<"=f}َ_K!8@NOdA2SR)޶ŮC0J5kPq^Qɩh>SJƺI.ɐPbX M|c^d"R~C*g,Mn+>؅$Ǯw 9*FVa<2 3G)c|q @yfgbv8gjzi dޘ `˒mɴy\.~l| xsb;% }ٸwAJk&g3,,|%E1&Q4Śt;nJK3#pﳙ+V܀ƚj S6Ҙtn5TLVKnfLq=wm^svEkҴN>93Īo1 l:l}C9b ܛx,Vu@C2H~vXv^gh Æ)|A_d(hhH.X!L)BUr!r'(ٗ,=6m&:06dѱg~F/v@Tw! g%)5?< =>$3OhͰ?z + /Ό!3/̨ǚ'ý[=cbĆbZ0~Qx1!1yeZ q Uvtyҕ }%X`L, 9k  #4 8asb[ ѭf#1Ʊ\i҃bс-g4pÙջx!cJ#8A qԹ`ƶb00qp^-~ZW /v?~7^Qgn?|gt% bA Z!FPH6mHtP ~81i 2%؅(A:F F[qMn>stream ѰWOj`8Ӻ|fQ4A|uP~g4|ZOt–QM,Ƙ5Fa^Hx1G@-1iX@oJ}wc yT# 6 ie[UYzu\U9Ua9 wKr8}ZG H>LԱb,P\.ѭ81ug4+c|5FDg"V(+ī&xeC/B!|7E'\ e@tjMj}c5ρ,jbF%%ňCcxz+~4gn6lq^gΩQv()~IɘXKiRQ/SYt :~]Z!r1n 1'ƪg@tBWL@.qa "C"MB_Qq%!a<`0F㭣a0#B" oDy{F& a؈Wb`F0\@Wb-Ȑ][W$.R֟HkCZ'l,,yoX!-51= 3eU[=3E@u_@CC2A*e"Ʀu|R9nW}K~kQF-ƈ_mJ# co_M ciGtqLq?Fe;A<>$ȶ.+$fR*818tŒ,Dt8t1H}0DrfvfpS'隷$H%:;YrKIھu|d]j9\ǒ z9a!ǮOxkrI SE7#.G*;+RuGuuvB@,! hՆ*fk ̽f`oAr=bWAE| ]Dngqyدr O]܏`Q ZDV7y7WKɠd/X'zg`K'_YX#}! LDF%Ϊ^v?u w,=vر3AÌK#"d Dn*k>L TҪhnI-uM$RI vgOp(shKf-MXPlG5;6,'"5ai5bVRXkXɅ=wwKʘ*P/,#8QYܸ +!aVn7fF3fm8zPEyۙZQ/i;\ \a~P' \P.%t%7Jmwn;ޤY>Q\?$MQ6IzDgcGRmXN_0mV`I* E E eT5 34M8VcUX)Ii?Nr:0逓k, 6x5kB&odQRD)ƌZM-PQ٘X l|QĎ#1hմWcX(wQDs'If)8V[_(j#Dφܑɉfc%bLKHZX[ ȿmu,`Iy9R^Q&MG",a)eT0ҳ=-ָT)RC0$ֆYMS f%%GЃ`by.) $hbemU&",f\D%rQ1KIƼѼFL,+X90Y53is1 sҗ#0b:m.aD46{^ x6geszcSgPЉa"W@S,?E 1͉.kc%lUĖelC)XoʖdÆۂd-(Z*kTWHNNy0,/W_rxE ؠM"Jۦ$;]nV! OD[nt=ʤE#e I\Q d)%qUJĊ<,RqG {S[ؼL%]Եjjh)QYhh`IXE[ FѥR)Sa:-v%:*rtvUUVSasVK.1:hFMtlɎ!~Hs I ^Jcz0m V6 @bB1C;0PѢD!s?ǚNVNawzqudU>!Ư`|~H|,]BC&N27磘[M=6&R:c;]AK@.ȔؾjŦy!AvTKyOWY?o*!+f2e{%D]]ܺӱgc3sR#Hƀ"X!ե ukw0ӳ{6cڳI}<@ jly: E+%rU| H;(reDÌ CaV݈۽9gx{{NZN"֝ßtVz\A(irw''fr+笜gǩ=FhËZ:5@CWpp:3ݡɑGRooĵ+IA kEAv3-kƩB \b$"/$+JV׾G #b)1bZ.#O2E'ڨY!gN/TMB_<- `lH5TP}<|<S̾{8. RH@`x$pwID!>mO|{5˷{FӢ|"ȎL 9 M0U\*@F*AG D3'L<:SsψB9_/:A}(Xk&ʁKd=||wWCyUdsx)])3)N\ *kALf,|+][NWKZુ^qL@ n?D(:l=}|Ƥn iOX%m S{4C**h[-M;!H=wώ[BH>;ޙk v)dώwB;P"P/{(Y\ 85a8kMmŹ͎L $$ >|D-hDT'0c̺/Sj)\c9T>]CPqݛ=8= l1_ 9,O{%L-h: 9`ޱBNϯ)Ԩ(fYrx,c6ߧ݉&X\K*eOr~;e;mKƸvWaE! +oL=X4al`h *Bv;RӮO|%&Kɪ(G4.TvEXf;eʷ#O#J yh*s5IkԕlGIufh#M@"nȵl8FW &_;jUxw8(O.,~எE[!<'$xO.ܿ^q1yd0")k;UFh)iO<۸-)75,=4lhVA8FB&iB5`Q{D38p4BQ,} FvmF; .m3H gPz:&] ]u%k^&t)=r>/]8/=jrZ}@j` )rrJqxtރfS7@fh0u1GLU9e65zvިO AU'Pޭ(-|GYZJ#7ew$־™>hO'&}L; f\K_~AgcOG1YtFK?]EOu*d(E.<2 l6܁IQX,0n3RZ%nشמk>kRX:($!rlW:CL$G`<)"۠JqQ8ֵ]}vBp$v /($1ll2Q)G61@ .E JlۑF%ƕ[6gq>71d ıX^ OFAfBيoEpX3PRb6ۿ`yb&ZvscO$dZ8g 5'Vqb/2imb2 Z6zHA=T&@JB[Cu,!Q k0jJh~FVzx6Hha_yDc%QIT h$̈ϼ [Z=8MDl(OG񵟬^XsI3C>FZ*HeܛW'zȚ WCTФ'-E狈YI q =Q!K낊" ]LWA#5F$jZbg!o(T`flM?݁xO\Vje֫NG uf~vUz>{l0k?_ȔAxǟ4?R'RA}(^ G|ȒE(n!'3:VkZv~p껹{=])X t xP,H$Bˀ Ѡ $APk"@*eODގDE[t>$yԄu8,"3IƘ$oӒɎ]ChtL˜8Za2,+̽S2C9͝: ]E7+GkXK8$*z;zC"N6ڊP/Fp,7Ʒ'<N2R}fƒ9S6XHݭf,(R |g4#sxI3:_?_drÀxj@f_FS;*~7O|gbLvu$3a~5Q}gK3?3c )J1N_OيcC5aVIz~KgPPWIϞ )&=4FLQ>ze`gP6ٹu+|^'}`'h~75B=vK|Ζ";5eyPe˻&r%ti<>܄!jpj w: 4mS%&deGdi('K#Tw]>+c|+i<}K6GS`[H.pIP|lno|,"]+9pi#\ZbHk!afRAq.D*j9 X(J@)ht]ֱ7%.8Ũ ݨ zatT(E'd]>AJ0ubr`bCa26HKtX {XyS >^p)E"._B\n@ X)j}!&=cQޠErUq^Q8Zb8hÙ 6%! z{73;$gn]_~eC-JT$m[Ew];+,}34՟|wFɊqsHn%A'\ȵl#U{R;+QTS@ (%i7 @gȟ#kq+\z? {DNpo1@fNRNT.Hsx "k |m.#|xG3zG I% !ϡW0S17Z-ۦ--IJ{ה fXċ1` baAs8R;p(7j[[;@kAB uRbhvFUfT_*aݩ"IM2.<e1ՁO(y!mpuʸ!oZ;``.gY5)Dkf Τ{ɌםJjR8Jt^zL**vjV6mE"u$}5 J͈}\ ic:UUR&}33ʛq*uәX*#9N M%is 8(<+QƐ0+I!~w\s^"Yup`C@w\B$(HU0Ju°AL Z+k[cxf4/- 7lĥG8ƨdndgLɊo.>ͅWVOSDS祃ϸu*c4+-.΢oMcLo$ C5p[hhtS8ObQ8b8I] 5~gwz?TJd,CH-Qj bIw>NL =USG'UBGp럆rUHP{drlv8&*\)d&.Z:ͦw"+yNRA"7IHgĦZ4>h@%ў"=n-k". XÒ/-S?1QjFU_ԿUYZ u=onTYoOG)kvT&$\$lTxuv<,p(y] 0l71H kM]nktp_8XM +A*~;_:7aF}l T̥8)fcN@S>0wj˚ڱhN + F9v&XVeިa{ԬK/ 1l"n~*b e,({![F*pQ-b&MnqԨِnt[zbӭ4{_O`|x2cf瓍L GQd~u 50#xOͰÄAfc!ME&>5zafhV~c#OuFQ4`%ͺч`7Jo G=DP id@ ņf-Eߕ XEc<0FmDo)z׵*㙅τ6@ q #;24JvLnBGhO9/.*^HKk)s,?BUkU"x(OPCr8\>wB xPۏH`Zv֎<V]@6/; 7C-f{z߇)7tTvA9%!`5a(JH `ȳ͊сD@ V)@^P1}i@Q_ -+ItSqJe^XܠJ}NJ` cާ'RIHyDvVF_m@ڠB qQc22:b= V FxU#KoIz< %B,= :J:2!e8CD6X!x+uǮ"TW-b+0 ZX!  $Bag2s)>y;_6P܌w F8]z\m }'1M x >y $0apw׀&4}+@䁮e{@Q !pKgX 0f>2@ƫ뻕_ީb`qLp1IOR_@G' ٢͉cWc-^x7$ ^{qu!VkFܔhQZ²Lv I0AчrmqDS؈ [wt(vj w5 e-%3aj)5ĨlRARxsDN<@4[mRNFY3#1-)?W Ox^8OdP>( 9|&UNr?07m.͝Kz.C[y1`Ʊ`61enDVUVn'#3m#ClUrrNl #R'Ƨ ^rJp}z,]'p=W9K=|[kћ9'%+Qdadw'u|,`fb˕9pTtHA{Bs~_*| ? : S4@x|p=z"׌/E}b75jf \Ʀ`\4.(Â'Wd$/_*BoDwM(wJ+V-Wf*o?/ ~Sb?s95畳Dj 7Bzh+̙SixbNv9,\ | U,@!k`B2 6(<=j !DFFn0ÄPQ9FcGe.==ҪѿpYœÉ`;"0.]Z+4' Qn_6pvHĺxV90pQ9EEqVgϋrnZӳ# &G^ΚF>B9ֻ\u'zW:kMzG;[|wt7YP-я`F;Ñ@=Bk)"@'xFbT+jQ㻞 WW'PߧSV&J%3ʂܦv=gk\dyN~.E-a@$fIh(1TbNpZI3hH~ܠݨR V$yU j0 _{ᷞog939?^o0m!ꩿ>wjo7"N 0j񖙝XfZT0г *js Kܧ⮔=AO(FSOOIWgp uG^O@υ=djzvK={zUAڥϵVmo^δpδSCv(w ]Ιw=\gsFN5c.&ޟrc["ծF -Ϥ[&㝛-~Z '_ Lm-fUi#^40oi)ǘ~` `Ot@*Q  qcvSk'@'. L*E\Q%㴢:$גKjse5Tc jFٷX\y=cw1hgo|3:k-~Y ,zfR16mkH[ J8Zm|!e}%]f@-#rCX 4ehl^83"> OC9Kq"8}-'o.SF1&=mņѦJKRZa=$ANKTN |>Ѧ:DɪEqpzQ ,stb66#ij`6jL,Xi&7d 5B:t8-dDa&\|Mh4}4g'Ls?` ]`38QyL}nt+C]9_a5`>A26-# Y;44vgO3zsj9M  d ̊NO>ыG:P" hOΠk$YuDBB*^GFo%C@$q^wa- 1-cIifJTR~-hA{eN0N{T&U߹ M5mWWd ♐ʴz]$L;$fƫ@b-# j\!ȓ4!#7v1==Kѹg$ P|:ڣp⠋3fXfӔ9h>ΜVMG '.%nQ˼KQ2ڂo |dSaC3m;8\yG[be~bmp(f͢[׺B,{&{F/WB%Ja%iPI(6;T;oA&C7U~>Vc CD⃻@2-wL'TfCOK]%JDհjazT:m JDU Df$֍ B_lH^XZZpH+q$Ƭ^Z*Yr\{b Q-iת=~J:ԁɰ5;:"un/< x2Bf|G">:fq`p3Sg4=Ĭ"b!XDL!x){$^WܯŞ@4M2-E qةdl?B}dJl.mQĔxF)iB=H⹆X3 6: @cc-AJ?gC$p=s򽆪>F>7YkPGn3=0nFbdh7xɍsxoҞp졶yx>xoS(FQ]0YLc@^.h!5m=æpF:|k Ϛ$XǃDHtoH2W9TV":0D Kd܎:Աʈ8BL#:v_rmˎ;x^>Z X @!/UPf;;Z7:wdXБlp/95iP;27Y^E07 Ĭaޘ,0^:1Ɇi9c*fDq2[j'ICndVʃ뷐K֔M$@757|ìr!ю啭=Ì$?^CtD !OTAzA{|܋ƘlDcePS}1Cq`uC7jZ j@P\*;,%͆JfۑxvLO"Z^a.Ϝ9fcKܷP`1Bݨ-l+RT12>/vjO{ᾬ Č )]a">/Z'8ET%QZ!;z(Y_NK"菟? .Cuжѡ6 .[}}n+ϚJ2E0cErKFRFҸÄg#Kg3"1\QIx@=gՎz;tI'2#!$J &G,F3 oD3+bYi"d]VwEܥ)1o 1Ůb`6zQ^&vˢJKPպ,V%)TJ;&q:\kr>HJ+2fǟ:cӆj Z#X;FbƑM𽘭A0 ZZ)NQuNŠ_ʳ7 慝O8zf^Pr8GJQ/` (`8C u0 かD 6X'|mP ' /lpxAL%݌mFn~n;-C5`btJa#u8[ԷKzr~Vf#8)hqK'2JP&ZP%,[8D͊l>-կ٫dR-aUi N)ŷIxyP9 G CXm|dmGak9ciK_?L|+cf AQ/T]HU1ڨ+['$0b\E=y Ϧ6eʒ9/ SyNrGBnrZEܘ:}OE= qخAz`qJVƩщI7mX`[Bu'г mUݪamjs_ Pd?a3^TK>[yao D!!ZPAÚ |Ngъ`Cu=a{e| kYc{glNi[?J5_I! sՏTw'  ظ{o'=60y_Hv0ȗ㕞ދw :@?*cz'$@1! Ҋww~Qޚ[ӕ9Bi xUa 4ib-l cS|/g _OH KMb#5RB,y#@Fxx_]-uF[QpeCn[*HG*=LN{qJr`ъVkB.imPk5Íw %Jh.f q}xލ!c:,4Q- 3S#ײw>W.)wYY!ERFܳ-@[%AAU+pC@juQp[`HE6;dl A͂ -1Q# d;Z6E>`G|Alk$";gj s&dlli'Gc.)wL0>XOVa?X5}FF7 U<"H&Qܘ3zV`S`=%4ll6Ax*<&8+qU§tϑ)'ŃoקM[_w e[ TA-0gK- '4`{&Fq3L3L؍ toè'xooeh=ޥ<<`:b=0[ZxnV\2?j:AkPN;v/0{y`v08R) z-d O[T_?c&,7,~7:Ȥ}M#~pk|1 .һwz3.­:'vǏ^-bx;v }kq<7^5VAfu^f'z (9xCD*ιrD(lsKpe]|RgǞmep֪ϧ>>>>N݌ q ں%$и {/G8IGV"Ji5"whRUT*;iga!gދtr'ƉHCxTO+/n%',ͳ ;}}IIϝ%:YzW}.?$:?GEjܥ̩sq#`:}WS~WァN=@ow}x/4yp⪧:6|*ɦ@3zq.نϢb-JAqNAD͝!{)͜V\51 |R+Yb&xE.!:V5.9G,gѨԄ o6#[Vf8ļ 2t?zzKT>qP D YVA=Ğ"FXzXN8%(MQErV?'XDk$L4Ů1vhu S=UD9HVChu>0 z:N'Rx`"$^)E 9sWcu#9]k&*M2wg%JF {ّf+ 9~9-'I 73l{ΘU[BbVPOOs \6b@ac-P[-qJV>I3,4 \i"3*G;p4ӕ_QsUjqlrtc^ QUmI>!UZ (ܫw ;@d߆'4!ޭ/ĽLXM!+P !=`E;ʠ7ZOµ$R|ȣ`1wgަOgjЎ#Eu0N,Zf7ʳp|вƲj iIS,'uay]MZ=:J(zxL\jYż^I^fE+'TOVUޙ̢IYdXkJZZs0(^{Ly} 6ߔOޕv ;*?qeuO@q5;*WGJ_'q$Vy}8Vs}κTQ^w|#ԭ{֩MDoߍCl̋ھU>WFw=MKG4::ioVZ5‹*,%-m*ۖ396&0#]j0:۬V5rq96Q*LI$[T (_?&.[޵C)@, 9EʴI[6ೄEBR_N{6b)k?OŒ" yO9|% a vm,(n@<:0`I #o[y rVam6q Zn-ظԢ9M-@N I6V @RB ڒOQd+#^z| H@F5%D.b8h -2Y9ob8ǰ>=KO[`|.rv 1"C!N;—q|X,}o ӭܩlNna{CڑZ3r"~VK u z9?7tI:Jɤyoдt>DP?{`VY *U0 B3@[ 襤B+^0I*S%:<k!SL"IMvO݌鱵#ZZai%a3(w>3&  t^F*!)e$::#7@v0^ހ#D^4hF6Zl4o q9`2>dRofox:rCa0B@R9(!p癚 UmZi}C4|C0MD] wgI':ܛ#{>1 XUeU^:%{ؗ{KgtJVbCLdQ-Wav>`i'&㳑?^k=ä+tuQisF svjvIQJHUbdB2߫Nվ)ԃ^:w`GHBBApK+!<דkyuWtXޤa򆪰Ƀݦb'm=k@Qr2^!b@n)GڬCzDaFR; Th߫qbfo-o"} P_['zq;~ϯ~l9m>MSfzLN5`b!@'~hd304d3 7qߜ/ 4J8yЇqPc j U`;ea6 bn8v}#kXOxp1J;jNu h50 C@jwXJaBRŭ ߅wf3L5\WMwT"x W; -;p_~ftN14*cTwB>m\j繁r,(oP6FҐrFXTpݜS!a;Pz.RM/NNKKdRoLRMWp”4suҟ?>B_$`$#S='{RAǹ{Ah6P_2zE"lMmf<ن9 B")(!CD[JPEQb9:*j5 KtnGSY#MO ŕัD!E-r bZ#VY?9]:m3{tf+N9k{66y%C]g?)c=z%Medwƻf+NIqK^b"?_5.aƃTk)[?CٲktPӏ b QjU#EeF٬â.pOl$z oe[+ǚVf՞U]] ؞vcaׯlW8OQT`Zt{Ԥ:58XLж\8N5%k_007QmziƎ#Jx$zfHR2 uMs ATT؎`g+7.SS"MJTڃm.z}M;Q7,vnj J?j~Q|if :7-hz>0#S(=lHeugPxI<<~%xw@]h@cJ~&YcہP3 B>2FdU?m5OU:C1x"@Inu|U~ks15uSS/kwԗ!pб]7]יʊ*=r!JY$BW6vPS01x~`) iO(yIchB>Ni)X)L ՞: h8? 1\ÌÓ47Œ^'q60w) EHFdըF=FV)[#;cP[a Af@yq[h*"0;\ޖV&$[=Þ{"c*Ks vBf_7/^[ΘH>)B`a 辥>=qy=_yA\=q޳Ǭҥ:L"&3t*B\$VwelA h*~qNC[d?>è6.Ĵ* ,ү+ƿN ke3_}CS~xO;,s;~7F: +:gtzٱFQtO{quqaK]w4&UNs( 6y&#D롶CT"j3 Ɋdj*vx>N_ss9"3&8i_/a-+a 7r.Xm0.(@xF0%wW} Z0|>DZ0V"ތОc YlV 3ܞ(. жj V?Г _"1&c#̈?J[lJdYx#=eMwGs>ŒθQTўR_0|$,˰$$x,'Q/0 # gHjIy" %ޝƾ?x0I&*RR&Xȳ$!, H"z$1Af!!7;FX I"-vtTCbH"  KD&6|cS\\zH#S5&M@:S2d$Sa~>ŒWS÷x_|WNtG]\S8}0<1pWnQ=*{]&q?Y@%nn\>?ފF^V+mۚFPk)-GjT/} g aH uF콛]/gHr?FvPTqj}kJ㒊Aɏf]bWh\e}){{pl /3v NՖr ,2[%ĉsWxb> kQAO%AΜ"hх$a"Ksً/ϝ[t U "ۊMlKNKǯyZPG(ȏN|pjM1|:4]_w4 TjBi>n66k?`d|Utda]>h|Х/ȃ?j/4<'!jjj{3Tn$ le*ؽs$@Q7dT" me4qn| T۱ z"[DphN+hBkb@{s)𦩡hƦ X;)zoR0YЛ1Ɣ1QC.9)}$uFX6ԶوڲӚ)#_E@A#a? gѹzt-:բTMp Z0AUE~!Dկ1oUuTևdQ+mEpDrBJUELhhvf2*j\q?%+q:Cne7XT68ja'*>4$%m"x7\>,qqf 2j"S0fĥDAriN"U`@!X՛d5cFHZ70*]  mP'_ v5xJ @D@iϺSt&^5o4hِ$ʴҐmgw~f9g;Q݇+C U[&퉠#\)k猱s 3=~yƣ@U.B+i{/vm=< xQծ33_z2\䖁3F0RU;.rWq[(]̹ @ii:16]rCV073wV!!zbHqkO:NKX\zEiX"6o_8;!뻱8^a']['$ߕK]ے+Βɭ:"4 eKO Ed;1T ؝!e i҉"{>V$գX`6qʅ=()*Q8֥+k~ʨM;ѓ{yɷ Wv߁>i9W+2Ne9d\Z.n^ij0[Bc00ع 6tq37ra4@̛bi i}xs\wk*c9'/bFJHT||t"v+-lle\ۡk0z XZ\"}V!Bii`求m?LM_\&`]7 -c :v}n|Sk )VW^ױMw芆SwNؗ>3UI1;AN .w/ZrܠzK{ kKВV;t Rz-&S<%kc>9uI*GWj6&$r&Epy {}33JhϳgL0㥞KJxNCX! I\Z#2Fxn,[ϭu3 Tਤ)`*9!S*Djn&8nS;&\1uG;9|.d̜xH,^Q."K,qn:9xȷ3sOe!.2|)ŐrRBjf 髍|}8p9% geA *2wL(mf@+VSql$P$MiU}2U>#JXY;՘1sUO8i^U|"X,%Op~$_ v{yet%|@VҸXh7QJm0ߤUGWPe*Ӛ@ju}}oAVȻu5S֜vOnXXY㼅x(CMi^ϝ[@ "]6)nM?1ewq`R3~`Xƫ U'[q&W\s4Įקf8Np8+q.4;=#=oqL~58Tp jwqoyo*l+x#ZӦ")eS6[ݡ^0np?Z*Ԫ*kuYzECPrPXyq%=D[*^Dϖ߁A3^3>W~ C^mO1q.[\Ϥu7ODϬ DҲCFnn!='\(1/#ѠXeC|!(Ė\0 vjW&Q1>0W]09az$WFzR{>@TG̩E5PÏ" ,>GecFnԄg_[NqR?rIL֫AO 9Rb7>j5g [v#d~]:P[Ɯ3HYZ&f%}{ $0_eG< _O_Q|s+5oQef<W7j7ga5[ǟ:?$Jڼ]` !ыb;cTdwԊNiU\*h=V2GXP_6If`LQ;5dO^O{Ph ḡ(_ uĝ4U yTn쪲L;*i*&We 8DQb<{'Oj/Sg\׹s_i, Y%Q wBA=$yv8 %ZyP;k BD!`<yrfd#<7Eؿ%ɮ ɱ@Lpxc 39.nD\Ltc;nip> c{kׂeO)k鯞ڀnD_w'+Dz-^fbi>Pە!Vp#܃[Y՜a`N =^Md7 <,RlWԎX4ܥNz _%o5>a{r/)) i3'Ou⒇\I^^r:-jI5` #33 F֊7zũ~CxXPN3\ׄ {E9HD~EhJ7_\x낶VwNqgt`Ao)F+7׉^+ d wY7X@͂56ϘҞ;y7!hT;u+W`daV)A| Wc Y>rR3PN W6JjL=WJ6(D_X ?لx٘26[XNp9NЂD٘$cFy\J0wx2xsŻ&=ٺԆm_n?GBټL,`1`E!{M&^ iN`E:Fhnq>(_~WL@$/ů{* '`Q{gC}s?٥laFOuژ t[533nT/\^hjޫ 'Uôv8aHxcQ<-u _ً΋L?yQW3p0>v1F[3_%_N[װwK*GQfFaSR8aPaRo0NP0EйQ8nWQ5c,ct܄t eD؄4&/Q}ܵXKݕ:Y3<#uGhC$D.l"Wj]lGh0*7MEQBJwf./D 6olضE5% ̈́É"3=ɸDɌE#0cu瓯1Y;_&Q^{[r<cc  ` og0F$Ӏa#4iCۛߺq]5Ugoނ\\o%M~BOdѲ@{P(9!A bC1fL6SGa9;${%aFQa׍/0(jQ ":Z<¥{~*%oFЕ9zS`7 6d*zUҫ>I&]2In8GunIri5Φv/&qxKV:?_\I~aw<Cr(~gq'ރ(@& Aq&%ٮY%|'Y%1"Y ?>ڥM9sN/ KI .@$HJ~L:ї9 HLf8d gR3S71!lFY@ψ lBYތ=ћo2h'dFmP0k-ޅ> WlI*܂T3Mh2L0]sՕ 8zKd1_xYKZt䉯}RajL}lQH< a~tד8\TtwssO%G ծ]>c<{캰 fisfz>qq%'3A%Exd fN3g h9@=n#84ja"y9e%\ m,:g`R0@<*VpVb4_inݙ~!WށFpATvs@ü8ci@s5_ߩRbkVNNhIpFXM H"VӌpשO-!"#`y8"(9@V۠VpWӶun YGGplr6;M)p|7͉kPUHNs@l9El9s9%?8NPzdES,\VGbNjcCƢr2>{8@.{צhz޵) yaFm g(ܱS݉kSi&4$vm X8/@|O/ňwUqC/ł6U.RܥNV Y)h淸)+9)ocx-Y O|F^lv/?ﴵ␷v?lg-uG${qTrQt$luJ/!_^@[Ybܷ(hJRV' >udEf7œ`7sVUFmca@+SSVZ%cHD}C8(c*:vVTH)r,*TF b ߙHEtP'AtJj9b88H5?Iy/}K}NEדձlq][ WkD]b^G)^QJ+᪴N|xOe~5hr'O`TÒ~"h޻K @&jC?O,y3seI$ TY>,]Ã),&(G2lt 4_Z$1 |6;/KcI0nEA~,eS%qźhbk9{9vmkzpK>8^jׯsS'ʼn`ur9Zcpﺲ^k_ |:՘>{?]Ƿ_aT*guG\Hv@nN;&Z."6m/GѶ =`8:w] ù8dۜCh4 LV+#TIϮzO`<\ҥZ]@S KKxk|L)1;輕\9ȵNv3vWO"r٫]G_ߥ}J;^nn=X۳}}ܻnNit d}yoϮnu5^Xu ~|zx((>̀| ~@tzT 4Cӟ$]/YR"t- t[ZMXnc8Y -?',^sf\.yFs*/2}zUkO@:^䗩+8gw?| ,{ыfFz?z8[MM_nބD ͹l/ xGfGbw-YN;s~pylp""{]scG:2#U~)Ѹx^sK*)gu?\5W&wp>x݅vU~3HR+]uŋkt{1Mq*'IŬ J KQ:?}T̏O7 XgI6H%%hВH ސ&j-㘱 KEgVNF :o۶:ke+64so& %BIDO.ySK.w8<t w]|7\W|_#ׯ V/i__̓N%z xk:|5Sޏ^ƷZ1xB8? G~~18/βO:N\cs%wA5ƒu̲IyL]euL:K꯳[Q$zv=ZzY%!hm_QCgk tUPl`=FZbY| K pdkWAQ?XVw?j_1G&yBBNY ]&my]j`JkӘ =ߗM]|4 #5{q!Slxpwq{4$:lrFԻt7=XוUX ҝps3~NoӮz ^ gTQ;RMϡcPL`!^ս:ktAX|Pd];)D FNA)@@x!Uҷi‡ki 6FBc|4uO8n,Bౌ%Lh)g,e+d<;cg=_-Ly^3|uӽQ mB<涒tA:Uz,''DLaϒv4jcZĘƋ]R>f97fɻ0 0 `-N/j׫d;#o"S>sNBH0 A_~'(#cK@ȱlj[9пjָExlp]kOqs|7g{9%Zu6fE2+ :|¯~Uw_-誙E|| &nDAR;Mаޔ(!;2KNc\9Qt RI,9]L2R )ȮI?=9n40Y|_%l)e-k yIX:?'~Vx} ;/`^$L~Yyݐ0Юt) O35BQVD{ۓ:w~9ݵܵk"/vv4&K%UɌm=Nnڶ*J緙YZhL$U}s6+=O$ s,> >Y蘺St Nם!qzSPL:Pݷ[iޫNt Ht9zS3e&/QשtKjQsQ,>k~l/s9.re8~rW~5vዸï'b8 $lw]9d@@=TޝN9AĚ`n2H$J8GRӲȋ$%i}s540DGA$* ɢP"x:uY$}}J*&"sp$}AK*@5 TIg2\o5Riʥ,*_;;u!*Ǽ: U$u +|'NF񅀷6?OIU\&rp9 !)b Hp5 A1I0 uԕH8,6:Vz^:VM]ݏǥ&o j./j'AsXMXY&`fOV!X?Y&̼;ULS-#J˽\yKZ"‹]zO.wޮ>*dL$xn ѾX.-BwM5vmUk&ƵS7\勀% W~5Nɿ=,z~K#r5fgj;gri:QH˹Oh0}5>LSޛ.zƻ^]5ZUV )\R PНR `~-PqqޝzJhB;Ƭ۳BX]MZf ѲCbHe=Kg|賝@Pgqfe鳌d1g9gk#bLSڃZXѬ55R03_.g\~}fko 4퉸3Mk@-aHiݛhǕrvM*M hՐ)Qer(=+3z&n?g!-b>y+53TJFquJ^c.GR"3hؔ\6$ %25^Q@r_̗zW~5^-;rŕ|Ӛnd/ZӚ.Em_dxv{Д1<;k^y귙3]rLEE3s3J~ o0GL_خnȉ܅9L&䚣7P<ٿO;4X@]dҳPəTtsoem_e!>:C3mNS',;/Ks?VTn]DAWcs(B$V%D."LrŠܶK_tm$Q˱׬WD PZJ'/{ J+JnpMCY막1'f8L部7ç[ܢNhA{f}8s}[wY<̓y+Vӳ?ʫԮpoM?88A!gH,z -d_Qx夷Od:Z g2W_򕝐HDanfwo7/ƣ|xCT- sM22ijXIc\B_=<K@2^ѫoIQ%m `5WN0:쨾,^Rw*>%\Gd!$W:5T9waq 4Kr`:LbhX!j޴ӨRwZ:nO\}!//0s+SsfGD.HG[,BrNH I8rpѢ$N@]4By4>(WBy|N@>-:$!A ]ͳGd_ourV5JkNUkC_fr.Rss .̋ג*P'Di( (q0&Z;YJjo;fU%:8ױ*Ƌ!DTEwnY}ɥ-fvuZ92uٿlyAmo_G 5 t׿P4̎udd'E֕ONL KSR~錑uf}Y!l#W:eW!=jK;Y,2{*A muUNy^WS`ċkG6A RK /(]g$B㦐vlfI^ ٻHu"p=hd12  zjpo0ցL k8=n @ȆE4 YwtrX6Ӕ 4#N `_{O0 |=OgctbވDn|*ҾF 2\Vp[֣ X_Ⲕ`DK~9*ad(rR;Xt }>_m.4Vw)T-zm!}OP5GAOJr(5{Nhv8H5+KםKÁ!k0%[_n]d%򫷭t.D<s>Ɓ &\䇨^953@ ((ۡthĬ30\`r@T-<t X@LT 2ɻ7taŌ ψtq %q0qސbMpp ߟմdO_]^_o=ݑٱgwTlȈmdOm4mFi,\|.El_}$hbLv?3JRd~^w׽owW;Hc6Coz55ܗѭ]jS Ŀ 5ivV&~Bsx}6Zë=rl,Y崿0,DgH~-dWU};/OdOHm$.T_!@*Qʶy-6P㓰=(%w~-v7˧9T[U/7u_otp ,aUrb5ujw:}bH1|}mw^>6]K}o~l[V;}.}[uߪ@'뭎* bK_vݹYR0P';+mv&Vo$XP|%1'_zѕh%k`]207]u>we#k.tJw9VyVyV?=櫜 jdTއ ʺw ,e$O|q!4d/n&qGyi/ۛP@j&:R}Gj5ߕ;po|^V)ޗӗRGd R{'GɊ:5*! rP@Bh#(1F1{!{I>瓭B:+c纄F`O{ n9/Ty Y KF)aD^qJi u<*>5^VJi\emĝpgyC[k^x_m\ kq<)7k#>&6m:d]v($KƞQQ5: [:4wo,90mxxדw1I߳(=բnJ[hȑ\WbMSv#D!2WiN+sHi6H:acW$Dc &.wc#εNN(fEkx@%Rəd$ 9E܉ &) J3Kɕ8d,dw+}|\:ͺEj_.^o[ϾNAѿ+Yg[=u:oZٞʼnuVڜJ>Zg5~YkN 35f}mܛu<E{IY_sLJ Z;"׵"뉒!Ea1ˈxxGN 92e6 a&1xfFŨM5S A <9~R|^e{%{lyr_ @ |זxxqy]SLxjԲN ),q,,%у xA@1OxQws(VA<Q0 ŗLǝ UwT>'|~貛Fb@; x-ųV |sbFmv_b"YE$F]IJin}<YEve[V(uA{@i Z9Wzhh 5’Mڍ60RDnYWc}ڏ®Z(^.1}` R::ƈtY_ d$5@wݧ;1޴oT89=xitYKVZkL) 7|rO\ss%PE@T/ @2N}fIW~Vˤ2Q WZ Hgj?VZ/)ėW͔}QT}wqrs0!siլLm.d+\ky4EP 3JFKA >j4&߸s64FK9GgǯtI/f..x-QŐnwq)ϮZϼtN#]Φ]$O~m%SdTL02ngd܊+Wh{^sWM2^_O! 4Z|n\ȈRNߺ~>q ywOs"ps;{gi.&'v[d|o}e"C58k]?O;d˟2̋K (;!o72w9;Yq}y}ޜj-ZB%5П3ѷ\¢ew%l}^!7P(4,cz|$I7]S(gyrZkJ_U=R;r`U8ri<4_#7;JÔE6X;>! %a*-O)I%0`AﲡA]AhNx?9U] I~G #voN;Jr<'LJc1.6>ufLf[񬾔S [D<,ϞR4$6 ᳛'lzK9\7GpIT925)[X =v}/irDO(,+ Z Ǻo0 ?F(˵$!~qBey< Z %tw-G4|,u4{F NsHYLښnr b Y^ 5h2 3`7TBxGLF.!*ԅ\aܼ Єm^ rpK >e@ K QA=.b 4&ZjDw,M:r{Fh[B.KtȊ]c&Rr,XgOW1%5+؂A`Y9U/ZhhRj"M~8 ,mWQi '3$ǏE¡89 {1mgP4L4 1;y2jP49ersMDzL% ؄?P[0͡~j&\{7yB8{zB_&.CpXK`^W8 hfJ)y}*^K됒dLxSJQa}Jӥ(iZ~[0Őվ3u = ɉǔ}bbXՇ NZ9H'ynw} \KS-zjl5ibLE(:r0tIpsOL>#jwF$/:0RWOdU.ꃩlEKXRO=Dk-NZ҅?LS$AL]zI+5QA+E' J_;' %QB 8ǁ_ Ѯ_ǭkJ#:dБXXFdzSGHoґtt Fk#߫5N2|ə_o]K"8nUYbCi4KG?po!ܬ޸Fp9ۏB/LÇn䈔("bܨdEp[#圪t-G_c⾲0 ey,kTʼnmH{^3(Zm4j+\WʙI'wIpX|z*|.Zվ3?wDt 7o8po8pzQ"U|ba\Z7U(iَo7A M&}R7A MWôߪ 6 X-O??;/_|_-o?cd~$MJokm{YPnr~ooe/(_0i^{Ue*7~{j(܆fMpWuۺo lk"4$xZOX%*#o|$0Y+~X8oӶ?{ }|>"Yk+ۿ?6[WB4Ulڻ*J%?GŶݷUJ_IePnxpYsi?|%wMkmgmEWmM\o>ҿuh\R8c¡m*;5ԥF C7dغ2j>C-u(uƖ>~ݮ/m=~6MW4ܺD-4YyKhH$*ec˭O5GSWmPc!u.+>'*N_~yΫw@VTW6}ZQTIY7+B}UTia^Q>D{&JVT7'idMuecۭWFu%<_ͯKE;eZn}rT{4=}o7?!oZ{Է3ק/)uТ x}>Ml-JYק֒.nz3cpz^J1>lMO^^ק uD3ӱmPI[ٸO3wGU73e\T-[%Vm *.\dŦhF-ݞ#wi'e>-{fpC'8 YQ,Wv S;lm sz0M<4љܣ#y~e|]QWOskC 8ezKBa-a~t+t3~b^a }1]yeO범N|73{ LYΣm#n}[1}A3]\^̄3HkyӾ2yyzyӮ~b23“3S;Ew>A8젳6E5WwR==_Ν}.?_n 4Q\VA 6nhkUF 5?B]PU|? bJl^7T+=85QmYl$flbcW[GFXc۬ G+HBEs'"P)b(t}`KXeCK 2&ŕ(6+OoڗXH u,%܆u+ZJcԕPڅQT}V\E_-Cl$1eR M}"V"X+nXWjSjEQday"^obYm^c]G euZQo W?m^.6%D%(1St^l{]?LƾoGݺ٪ zz\*'ӝ%kֱߔ:\>nݏzoSuS(Rzg%2j3{A{\RWgVVWvD/񴡂gy 9cVyue=ýnRgȈ$X)r.lCCi %UQn$;!WSq_sK=Jq mNֺԇp[ѵlE+Zj BtƝun{zgX]*OaD; ҍvROttnCRw6Zgj[Kܥ[aBKFX镂v\[\iS(c"&u1[-^y!az>宺hsݞ(-Z=Vqj!`8 UJXLn^_q_mOT.C0걾QTTOoQv#YIJ/ug+ ֩Dj De_ud (UŪ9\%6vkBf}_jtm5fI+G]{"á/9`D!*\ˍLj#Ɉ,e4=cfs=_7 Z6{sebtXT_Ӳ1/u EwMOhX'-q`m8jCqE 7pIvTJF*TrV^D l2%`zk=Snu %kD/KRn%juXY:Ԭ3 25)98̝Ku,=mEeycƉ_kَ^ 4%PW:H⊬=FϦLo/+-^]%pumG}t !Tbv4>=8V]Y/ZL =L݃.z\ۋ!dxViPjT9Jp7F㋡R1h-ںC`%X7Z 07^cw{bfΦ*+{QŢEzHtbDl;|=[K^iu;JyغXHT%n@9\BjϴnԦ#6QZ3Ya76Ur@d9"@Yl׽@<ИpȪ:걲%>,!AwCmR K;@YPɨ-ʬڇ:8ZJ~ MГğ:ɯmL*O?^tF=ā{+xUVI6)0jP&8lЯn\ida!Wq,nNVWmEܑf8FZAUWLJbriv5knl#6)f2]eRDQ *-+0 rJzk xg8AZ@rvӑ0Pk /4&/)8}8G=%`z/B[-t,aU$ƶ06Nr"0 E`J̝>vrq| b@9Q,SΌ;+Pڎ !3߰?'Lj?2i3$A,L1m*L d b#%#6ZRb#*(y7ymLkTnEҦ> 9ᄀP6u]M$ߏBIUra*B:Y hş.*A7X'3Pe"sUJ Fl@)mzH r>-2VT+_-?@<<*[tO * *KAqMTŜ9XRgOP^$ٸ3Ԉ9K:XÇ!C f0OY0褜u o)@|el `_b#ۜF;qtpj6٢2v{x‘ gi[)bBí)E*?hS7s^=]ً*dZ Yn6 i@`Pj|D,Q~z k v*ڔ9gQ\YFP9T6»u wɰ] 3 װBE\ 8V}<.(Y{Od2]+?(/'gd 9#x#pJ<#{Gmf$!=O#tSV$=;%CTYJ޶[2|L=s&\&(gu3Mx6h`Xh:];zn{&*k4K-3ɠNQgi;YN'u)0q .Qg"h{XT}}t褙;[{6QQ-21~PmL-"t:Tu^! FQA#P<H"+ŗZL-p\ 9&r6(*UN5'N^7y|{8fB0Ov$N=@#n-:3p,E !SӱCX)!K іfQ];MBa2)AV#J1E 4a\BX/Z3F ŴzkƤ 80G .zEأBMb#,%t 0+/G{DnbXc eEΤ}USS m]7(AY!k `)-ɌiySY%M|X B:`ȭ~h]am {NQ܃"SW[Ǖ9#Br]qp YJo $QdnU{yj.(B= W+u%f [䅃kOq.i5vZ0$.K gq!gj3ޱljyZ3Սnq _7wOqP Me>\47#>;Hz=@?ޙB)4p3}е9ܓқQ_WΪz%:9AÚ$Gc; n@m*'HX"p6=wh7aj{b]Zi<ͫs8!cy-i B=K͂r HgNu7s\7+o!`'dCQ.d_Y:rtbS6^8\SWNtv*!3v+D<"g=r}.}Cn:VVcQaٵ0y e2FM rU .&9F Ξn.B6?]%UIԣ9.ùª}kwyl QlWIZ;Z2p΁{r[ 2)كkp$~۵^a7w'܍#r z:CйB5DyqvqPL6͊R+pPnG] ͂i-s͚sP%2-f޼UB\y9Q_%9X j=+!kU- tf3g-qk16gJ@!7oG碊q@]MF4RZj-a*HAzm9P5 7B[NE[Np~>6R夆4'rBNN[NTw<.\YW[Np `ʴ-'Cr6B9DɃPI($,r>B*LpՄi  [Mx>V(ɞe2(a)$SHapd$"i|%PJ/`adE4 FxHႝOzZAfIJ@-JH'Hmou?_"5)Eme!oz?٣M pD( ~7$Lvh`^+k40O$#@(M"'7aA}ԀZ | óA'AKI!ifəޛm%^kR9i,1^yQl PlFC f*+x)kp¸XLON;!:M<ڼĶ[V|. 7#qQ;?`hϔeI"(濈i˖ҿ0 4kþp,e`5,,^b\0Ʉ)0hXVys *{~ ;* ;U}I/#B*iUcÔh7|N)XAuo |T "sT=-)X&P! [K暖T.m9҂(0h #Z$o/ !|6Xa@ jTH5%] v>&ԭ`_*F0kkWth25+ѦZW(80HVwaOhF)+AJV_w sAV5HmoM K Q]ZĎ}B`Y079s)̅&-;3a"i@#Akes,Q^jp@P2KE,Jڵ/`P6u`v7``%K-PsKڗ"y(v"Q녠d ҥWa%qu$ƝX- )Fuf~ǃ=T{y}Z=Y8,ĦG:1Z)M)WAN6|G(Tq W a7FvX7q:;?tidJw kaB( d1Írw>I `wj"2m?i:WlGrSvE|aT* h7hg8@%[;2qywSpaKl,a*5ٝr3ZARZ9Տ+ ]$Z?kCb eCh)d' vf DqY0E`J(XZ \ {iLE?kS`E{`(R ʜCcM%B ٦ăn0nQhErP̢VCGt8ȀrЖ_bC݂r73#frPߥfr"3?.F%mJYZ=BC Ɵ"Qk4ͨ9vp6ReHe oh 1@o7/aU4`hA_(d.V&㽖 E5' LNۄ=%.`2~h=ݏ =d̍B/p_Zq` ۋE&%i0M-dW&UD5" ^[@X;zNc68E i, |ؚm OP0:.l°R( 'j\v+b.\k/~]@8O/3ZgHpwIS/H{B z7ט-mI #*'p \2( 8lƚF!_BFvm%zjS\#s\s>.Հ+Sn4,&H?@dL ڪE,}(rg/s52E2X$@վylA)733d%+ m78/)tq d5l'@BP, $yPNj#ߝU.#0E'ijH#b˔*7i ;Ev@6KE ghbc48@ݔՈ=&|ڬa@V̛O, 0sd1K|E f5@!1yu=!2ȋra"<1ɥ|E5ДCN@^3 #?Pʉo醉9LK0у[>Xΐ 'x (>+SmtnQKXuHs 9须]YGj Gt"#&b7DzgЌ"K %D<D7gf$Ly ʹ{--(ߺ13|{T4xN˓Y%tѡY*{R.5dBrCXkJš1AKӢs0`t C *j-8+/9D"mN@PZ PڡE 4>J|_93QI_덻x++vk<8bv4Յ!,g>k?-ĐjՙAnv.űfVcbrJڅE?d*X"XlzΕQJ` [唀r!P8I"j2E+mmn]dz,8"%ZeQ.U11)N#B7C^¾FGcVw/TܫS |^hRĭ*Xjid 6s\ԑkukGMG|PΔic@C SZHuz*e4)+soZ5yh+CrSkIDE`Cy,K[$g1Z(Z+Uv[NUv)#m$=%l};oG·cǹFE -ǻ2%\+(̺'];@ 1T V޷[;+zK_06ФJ5>KoE] ;GxS-][j(ՂkKS!I[ T']! b;FK]J^4T!-mhi-iwM}%ۤ?f_vgBV: 32*&P+Mq$-]BbI}hi-iwM}%iӧ#ZaD\}N%}H VIZJ}K)tcJ1 ?VXąmjCKoIn+&-Qöwk%H δ#r%}H X%޷ћPIIYer^&d!kۄv$n7!0vS*}KkJ%n;4im: _Lr]q>n+Z҇P Y%ah)-qwWNZw^4pE] YA}B>lԷi!-B -ߒvGoچJIK *EL;.h/חҋ)g:YDw۩={J7qehO 9v6VM>LUw ZmqØu%r-8V9.c(q[qVQC_%<W^D+q,9f톻\Yߪ=jŬlSahUg7Ʊ:nS6O]!,i/7%^@zlSwS_ڷq`dZtܺ70il8 e$))Tȍ|Ze"utdx* };c][aVs_[$%(QZY!z~ϕڣVUNUݸ*A WuǠr8:05:=aFm皺A+%m*-EޖO5IMOEBVʝNQA[Irjw&An;ԵhZ)wUu-}Ԕ&-ޏDi"uqVH dCm)-ڃVʝnU[mTS0ՍR0ah-} euk c=Z-YgN(<xd]B7Ht 9{NKɡURמzIs%cpPWHr0aJo*qߣH *9גuG ]wqL5kؼXJY+=(|)*Xm+9."MXEyl/wimCEeҞ pn_Jzj@RNCwxuBTQמ=mc{wKos߄eҞlnEyXRqh_5Gy[T޷hZA򅋜REGgᰎƚʤEųX*4FOFmr[+}{\$#q( q@ ^okJE_TBu\/d{9Te}9T&v\b\oBc"aЭ5[&U3خZgEzi 6ߞu6T4S-V6/h8V)[ؘe"u3R֔-RI-eb;Ö"&Eud )D9vly*o+!.UԺ72iWP(+`, kMu?Cn*C%oj*ICKon+9,2+(dR)Is'7ԷOY!-xӪن-tܖQ˗2 ezwW8k;L={K\* c{ºn*Z'Ow8P_Hp4::5UMe4z#7ԷOY!1VͺmZI[Q(Kl٭^`J,=TUv@v7-Co!ܸ©5jױq~fd+%UmɳVƊJߞ=$nԵr __;;/j)zfgo9\Wߨ=jfS*+Ƒ:*P+%Um6Zհn*Z9+%VQ:--kCwNK7?&䟐; * %}H ٛH*9ï1펻䘴$Jo^n,'cIX`HAJbߒ>ąYB<;mtW&-kOՓ|b&@`%Jbߒ>3CKoI74iWr(I]!utϽt&J}땤6TMT:jCK^aћPI$%RJb~ VZ"_PV>6G܊A6wP#Id`uHDPI[҇PC8i7IKq]!L\)mx`t;d;Mc%gRuhi[H-tN6Fx#{ k^|׽oKBŽhլC[k:$7屖ݖ̿zҺf;p4з  h Z]sFY&lu.セWqֽI W23ʄo{ڮiaqŴ.>}$`WnDiUd8# kUɳ|LBiBvrN0~?d2'Rn]S}Pgw. nPsiWXub}{]sE2~ԓK2 iA H+X!i-Qb $~w0ݠҍ 2{ $p_eL>+]kB_s.\uҺf'eSEL _0]E kݰX&&`8!<3&7-=Kb ̊ɧɕ2Yt[}V53)e-}u{JwQ]|4$JR'gꂱd0W~X6Rm3:FXoCە2?a.,_T7? äDY?alۧ љj6{ϖE2Y\)bVHFʇ2ҳ!LY\/o˟A0q'Df{ψXl#۞4WQkB_s.\',_(.ofR[/ H2]/wR>LR0?*j>tY}4MW^\vҿ /ٟ\)ŎiB|fln\"[brLڱ #ۓ좂zS@J1o]pҕ_L7? W 2|>MhΌ-=oRL7(j>kJ-7\ړ<Ө׽kˌ-g['|_&oFֹtٳYRlԫEN\:Ms-*Atq՘nj\?!A}&[[8X_r?}5, ("eU ?6w&enLeuvFk_֟2=tkiǸ>_CwrtкM'$t GD"ÄY{R/3%^eI𧓩w;cezN n>L>:9􈡟~4MF CW8Y>Я&|b2%e&W^`cODP:CjH=k:JQHא|zCq7'vκS:U-ZgQ:s7 W^{xؑn:)ivtRMA8B?!2#ZzðG?^hQ5FJ7m >gl!=:[T+j~6Y}?ҵoePi˓AG>#}ܤ"(y"9^.G^K"0˅a"3==avnJ%Qi]}!tΦ]0#3ώc3Ӷv4ʂʷۈR |>C]o_^7'ӹXC):UR5]wϴeSZ)e] ?}eL|q6 R·np?C'ۜ3ežE=4Lr X {ɜYrM|PfN&;(=Opkzz #]'}lJ VOw]Ja|I~Jź+/EdggL (qYRN۵2@qGݬM[C^I@XY@J!ZU|MU׻)7qc|C&ٶkц,] pw,)v—8Oq::z{ܿ91}ƭ1sŪ;4ӧh_ˠ:FKn/ tҽ }hͱ.nOlgkMB]i)WM{ NItn~obکMbgOQNiJ; q:ӗ4?_EmO¦_ W7}[bSIj=5}KcMq2D$P^{+lJ8HO[nJ*I  F}&1X5gW^ Xgmv}ueAd;xJc+zɇSbΪ1ʱґ A|UɅw9v봧Tgvon9;ю[W oGgbOO4pŠk)^C3T|fO}1hQ|zQskC#?4Pk~?r.uº]P6xMj Dg'5.(=f~h9oK+j|^[Axq>IwټV4ߴkeht|UI*o~OǏ3@uK;]ڟRq6_*e`ݟB<9݈γ2XF`|+Moq)qB"=::{ bGh"⡯$uxYo{{SJkrwHNgiiiiw|$|C]OXO뗰 %v>rGb>KOKOKNKNKBv;#.<-<-8-8-Anףn'}$֣~?/$w}4=Nr/UOqۧNNrDNr}(InƟO+OKr{cO_(In>In_~Z~ZvZvZ'ϯ$o%%|BNrDNrG}GIzO.wǼ?Ru}׎߫\{q8}ugԚ6G`Bvm}֫ZC$0j';'W6۾&G58Nvʣ?[z4XOO6ghi0'ؐ1#xܶ%cxBoGc?!ȧSc@|40i6ңvtm,}x4z8 _:vah?6^NCcv: ?~soG4|ih:/nKOÏia<ӀǮ|ZrZ#1+y>.[9Бv 暈E:i>6piivZOdpFGb;.<`}"EO˧=~^;~z e4󙥞|v"*N_OIâRQ!=8Mb7βݙ /R/ +EEģyȫ\dF8%T&ۗe*!O׏goiTGO؏slDIe{, ^+գU%5pzyk#wU%mmCq˿,6{ }gK~pF 嫦=9T[3[ +_9okK"7V)\Ś>yUvRI{6zv_wU j*e {褞o[@֔,RyFl=Eʳ|:ɟgGgGG(1ȷ=/aly2gln/XC3mkؾ"W/ 甔&HSnxϞ-W]}"˯Ϟ޴A:*ztZv ?ЉL3a]N M'w\M9X[v,!=6. pq[xmG4G vgw| UÎ)X"S7 `aweu":a \>>?5}x ]<.{m{,v͑1Mǹ?SlIF=]f6g#l=cls8_v%uZs pJոnư 86c=EMξ[j\'ф\ H<]d90Sz \Iw?Dw병kG-]#ggoCbux#5I~R OXm*}w(7姰h|4jZ7I]|4SgGWO Z:~n^h~R3γpptFoۑ+UNR]-bPlTg#Z"ܿp㣋DoվpCm,壚l4Ѧ~Fή|;xPو}ݬO)h|?\g[G} _-3C.m ~)olOYlC,>\gGo}()/5ZDpKI55? fܥYr¯V>y~;'<&w 3H߅)ETM0S9oO _+l 0zۡ)e¿j?Aל/ta˟7COy|Sş+. t \?vgL_OyT. x}o_3a|3`}Opmo=)$|8?+W!???]og?3?/O·?OE,-\fHR5WnW:>W˸w+Ekr~(Sb6J)(%H9yƣL3o>\9l9q{Z =6qE:yrb,9i8;vu{Tõ'{SWBG+m endstream endobj 229 0 obj <>stream o51Ы1QI+'hԱ}th틕;y'$@6d|ؚBO=![Biⶋ b).b~>)t]a~ڽ6]$R3b 1%chɞ2mߎ=xUߥs^̚*_fSFr9JtͧaX.uf޵Bڵd:]dka}'q1;v$_Z:n7w5ǽ&LEiVwYk-`"pm^'q~[t@~h&k\{dW`@ bq_>Ep^XxM 97ۄBԂB,:1bbMlOlY}_0B%V۩gky/ 8@p"NRz X"Ո N;Ҟi;Rk>umO۱Pl7YcuƩFX-s:"DiXi:!:&xdp,rżdpcSE%qEp aHD0EaCmz5.X4e Jlixɘ鯅IosҨBﳋ$S;>ߐJ>C;q4BE|_c2~ &UNB&<#W{ȠFe>Kы"h  A?&8:>[ߎ}KrKCl=uW;.u yIH.èC#DH!hIHUcrڽFv(vg;,4ȃ݋0 :8D@kr/y٨rΫ,v .zXNvS!۫y3J擑K^a$vfr4 ڮk{4Kx"!MqF̙w./K%mȋ*]J/a. ]m V% \ g4#j"D}pf?/ M~9LR֘6d>.UYTW˴nLL2U>ptU |1{н_ g8&jMd5"EhM^u䀑%#3b&Ķ+Z\ P %V)a-r> mc|L|kHzz=Gz5܊wr} lɡm͂cv^i%UGm $[(Z9ςD%:c[YF.lIb6@)٧"]עr4Ѩ.f/5Z ZfnUKvvhNoF՗H[A$IZچ|QP^C,bN Y6#Ν"a9{{56B 8U(l"Z)ri!HJ)f&ȩ{o+vUw#$u"*!vas/eT@bH ;Sv\3@jH Sԍ⒈ZƓ| -Wӈ]aN+I5&30ƑRBZ r9Ќ'nlY%N*'6a4%KN5?kZ\NWgRLEl#sb4IB !OAiw$RI:W0HֵjxUPDф+>)\; 5y_bL~чӒbRRG`;_rQw})-4%qۺDy,J"U9(BmZݬB+GuS ==!yny,+\\Ѯ Dmx\DQ|jơ\ Xߩזfe8D\IUa+ިy#5ʤ1>*y$K笑Aց` .)`s"AyF=L!DDt-M 8Cê^Ҳmm C[iVXZ0{ETzd Rr6k #Y;[Z+tЗ8D75F{s|SψfRhr;5%Y۝)MDDN& m,QMW.BF{FdFZr%cb-ô ]q40ye["؏E E z/b_&y dZ"6e\6t.et1(QΙ6mRf" I#I8p#Q \_8 q\ +Ƶ4^jge,kL\P5e}WCk)znu]ͲocR0)j%2fvWii/ 8g Ȳ!^I/}`b2x;"}>T]xkI˿\ v3j\'TLU.wԶ8\ -״6q0 KGi(҆7:Q|0+n9h,eQrO U㉠zLjPԘמšGlQBߕ/FWՇzBݠԵᨉƢqQ"*-`C :`:(q%c-bM[{1C ΙlmpyUfDMh'Gf1 &q5j>Fɹظyl]DX|GEe&R5ۉ X֎R"BV+^ڂXWDE Ϭ 'mZrP!gG)jߖF·WzNU2Tvb7 ~'U ]R#8 =GX}tWȭRݡ&ﱎgxSb=鄞;9e|65/WE'aI;@Cl\QKBu4ʹuXs|Ft[s{%D5AQt:+9h %k$Q WЈP`)fN87B^&,~n-鿈-Iܚ -k+[tSI"eL~h'_D:"vcbU9ab9 ?GGV07[Rm ʇ0+a]G{vD'ra!4 @⚆ 3"} l WQGFح fFi_\f'8Z!X&jP STLjKeaҦ}LKORTnh渘d)HKkBVF~yqA`uӱ9}T? +BLe1G{])Ћ /d+Bju2"X.1=qR6KG E=&68݀kЙ$ԩUʶ"@Hwr褩]yn 6D CͶt OA+άƤ{i~TZkc".qA@ACO`C0%vI D?VCPe !uY@-Y;2 ?(t>%!>[-&D*Uv08$w&3#=3(Α/u| HJ|,Z6n"1:Bp$00}b+b  =zDa_0Za&Ҹ@g)t~e>?¨2=~)\}?9e40XHW6{5̜S d>=ˈe-t Q?D]bKnz`D6 ۳Q\ݽҞ$ֈ\DK|lBjw\HVŖ(a f@mԈTFWIXb(灡];V TX߅H\1vȜ.s e-+9,W6Ur *ϔ}o!㭣BnGAǪs4nShcb(SA㣨]&0@[u@musf]$l+}r&j&w$J aI. Øp- 29CSՓlt\ 9gdB60"BQGr F; 8 efK=sԊaXޚȈ m F &m }4 E=pJȀo7'P7hDckc&3]mWΡg U׺AóI C1;<“8#V )#vognxC.zb:U w&pSA*>6bE'[儚IE&pv@ +ű 9vAwaq\cxw@hMͳUƁ]. P 9-MPbaX-8 ۽,'Er{҈S/Lh[ZAòDwzhA6sL2)q.v/anon0;G RJI׈Y?ǜ\aMk05`k?7 D L{|e%.nj}͋AM)~hn.e?'J ΅uvcH(i#>?x_MAO3 |tWb"qr=Ψ[F7Kp6QJԫ]LYo e>tRx#t Dfb _?`1qQoӢ,P/U bg@f@oN3 0˒%1 ishU9rmIe)eNnc!ox\W=E Z'źA8QS`5)C}@C,|5FJ fy+v[{q Eo̜O4Ywk< jG i됾C{Y~7DE"ewD KzyJ_]rFKs0k {bnc.Q4lnL[F?R\--o Tb BAKmMڌT&'bG@ع67Mrb WҩVޝ0O6]%=B׉i.vF9vۍxH:I9FwlGu r_.BL]$gj R, ÅY?}P4[dNc @KG|e8x1=3#/3q 0Ac`B3u-S6d= Q~E5ȇ#8G:m l!b|ZTzQ-6`Fqp=DzcXV̆ E"Q[lW ^y9ߙ]1uAn}-֠eBsR?vaqsߧi:Ku%GqRqdtN_2RrZ  >pKD\>zXdIou3Nx6jAcW7L|Of$xx= " lv#JGҗ$8uQkI.چν'i3z4pbF)KREcpw,pB.gOz7pqCo3X[{YaK~ͲuH7qtBZQaɕ$zn-x LP0ؗ!)0Nc]3Vb:#wstF#Lb%܍XO<$[xstb2^C^tG";hSU|^Oo!r?)M}')+Hnc|w}m;_-*oh/0["[hYc_0|?ng@[#U^}GQ18yrŶ+syBm w"jr@0Os'ŝgV f2=`T[XSK i"5+bHc焍yf{$T ʖ!6XP}1#14u-U3 {ܴQ$3-<:弘z]jJ`?WE(K ^YϯKsvJ9adn=臇 ,= I7]J~}5tљI!ݥڦʨ] NvaI" = -3z;ݔm LU5PϨz| K"pr,QmoJ8y|HJtBdǼ@2bv?R21,!SD.!8>`p_oIzI&ʄ r ܶ)yNι5zK< s(6Wp O-R:͉_xrmQH_ Ȗ=XQ0RfGDdG|ZBhX>8QnY_I'$|XƢWM+{v@+35;-1QU'9?N̶2Lf?4"˽²z$O_vKv׶  1 A) &F9{:70DzoNo +Hi1G!70_3>-Dl`U^>q,SRGQNmߟq4bw̡Hcqj;ŻW|t|o3 EfF |32*ĕoImAMS- u[4ѽnW=fA(e.A[ݏL5 K+Jǻ.nz#Xy,iVf|W߰1cVX'F @7`s|#wR8d+yi;[~w2WT0#%fUsW>sEƛN-/[J59NKR$b 0i4X{Ɖ逓JN7@gÓ! ҙ& \=x0s2~N+eb,Qy?=xqkw/H| >P 31|F;|՗ewP dk,8ciw pmVi[MӰ;{> B9Q[O2h,tIwM\2 ;Y$"zdF6G,^$Y(x߃aVl=゜z%}-댞cxx9G/q~?_/&?e>,W_}[*Ze\YIMR_Xz'W}%سYFХuGg Jq&K"NS弗Tt(IMJ`&L+y^ڒϞǰ 8Kw+6/{UrgQCeXEV8b\(\2XUmmJljd.p43X5DEk6[MhIȁH3z'`+G0۩ 읂^-d[JA1HȤR Ӻ0*Q=/dyn(WM؅w; RzISӣ #J>7%քNJѯnozQ[}k g ;@.?!_D6kaw(&y^t9=E'9h'% N#MJhydjlQC+:%n v_Gs ơ7GPk+r(]w6  D+єE%: D(0RiY?[Ո,6DB~ 9mnaBU Qo12B_dB/"tg1;S3)Je@Q9[.rF׋& lu4hT_'Bj&SYbT6)>U`-u'`UTLBh*FA3lC1 ITǭ2QBBɡ.0eZ*ύLrHK ^i<川VD7^* 3O:]+_ Pzx!g<}vdB#/Suُ ?W=ZFbHCЮ զ"bs4)Tۊg eu@899 Uh9m : KP0/NI,dJWimDRUZHy=nd!kk@\EֻVM2I;fQA}%aN'bef$ lָ͆=oJޫ%pv ċDbSkp7Ud{v6c,f'Tdd?r)n/0vuv$OTpW ^dFkoվ~`;MU.tIb'F$/ZA, 1EDq.ݧV8 tS^! \d/,T̟fSh.q-CT5k\rjZ@ꪪ;tz5* PujhruLNKTp旳4hjpS-A54Uؠ*j>!vն #j\s 6-9FhBZM:I<꾈1,/ #*{@l] pqN4VT<Ih'V%[@Zc 'tͨa[BX1Y4km. 0-QDhIQ\,?JN&gEpQL,I 9oRZ ux:aegKD&pX LSmcV5XFk1f@Iך&*49AL%ee֕h`&>NyϨjgI ɷ'UQ^^ Шl dĩ d\˖VJkj_@h[Vsh)8 dž'%Uvj6zoXWЈ٭'!Jj ɋsk@bn&PZv%A^`V +LWl rQf t_IU.ZEQ1$J;[߯VY8A[QEY_K6X݇̚E<BT()]m^0j0 EG1ۈd&6KL? RHUET7Jq?J5d|kkKW-Y WXNWz Xx7Z+ǵ3M =l0h&3\iRңI%a *S.3jN$nYm'@[fJSRYM1m`[ZWXjRQ;^o e #vQd1CJϞ^&7w}JiF8m`*Gt.fٍ8$5^W0"<}=f^f 5mMvJi @#OhWR1uu3W=3Y1E!&g6%Y1S}jgDJ "X1jUB#=)2/GΛ+fU**OV71,oEԼ+lfAde.J}LBoɁ*>!e+DTKD/t-= 4Fۺя>=%Oo -;'W v(ό nI_\>/6Xνy%v5I6*sG] D.V1N>D(}:QTg]7} $}1 xI(5iI܅<}fUQL<9@%~i?ï&?o??۟_ůϿc}[ tHW|`AZ Hm<ӕ'k#{[PNSaY@e0ѴeCIF9YUX{iԫ Ž:*JAQG3oSWq eOky6-\||n|Kx\F0N(3 X\ ʔ=Vu>ve,c$py`U/N%#P_c`D)jfAL!:]k@!.xuߒ#? 2cЗ3cPo'ߖ%s\/3̬i|?ʌV濰{ $$=C2zۦz*Q/l`Z pP`0Bb3n0-d efZd)4~5x(Tu닇4%5J6Ƅ$s5mVq Cْ̺}AJL\ZfrlCt"UȦYK OTt-BC"O~zŌͶn\ +=""Ȉl>|#*^T7"N-k|r<=ګ#y|Yrk1Żc=v1UfG!yh4Fd:0tnP[].C*SGfu6LY;k ΌAq}&3I*DRfqEt;^HsCȼ!>[ -8[?Ccmdžd3ߐumCmK{`v]i ׳o&;XluJi3QpF>/}@p!jģҋVwf2fԏ[8z`LJtkV+/?Mԉ߯]GLSͭUB_5xd]C=eVn{=qk6R/>uO7ч(nXu;޺V!%ΥthZy^:g<;{9{{dz,ّ}5Ґ4 $iSݍG݌tj}>9m7l|ؓVRm,pu a&RÚIO&aZR",0U ;X(O[xeų4C[`f`-Ie y#8G3 Κ EhU<%A֯A_UN֙HZze3`QhPVKec˵ HW9nY,2)ŬOP*d<^W_mٚGUQMia~鈊P$71Ua/9 n" u&昳lk=x{$p L9?WONȈGLSj]^ܵQ7EbdcJ^T^޷n;|yǞȂO"?L AyU&aQ,]W ~Kf^υsAD-"'u̪id*?olj=ƞf$Y`IXăO?R l Yb .m*JD:JcXeYKfn/i_8DtN(PIJsDIB4, ġE(-l<*$FBAdKV`cҒ!-)o_(Ry/D9V$BikY7eU*ͬj lNƄț|[J*Dhi @+]VIސA ڴӤ"ׁGm:BK1XT T"3&Xm^CZp\6bM,<PJΠ#bG6W^ ݲ<@eqE6J$^ sq(O_n^^0qC vF1l.QQ isn:]zo~ 'Ks"[RYm\$8T9JMX]GC!z<]ֻK0,YfjL+fV)P]3U`V3k841vn "5* ڲPc| 5#Khp1a #؞#Hie-ini7@fᶨLf𲥬^XVЫ2[XVj@/72dOl+!~`jBmd/ }W#\&^=N`ĸrlD[ɍ5!񔈝0v۲V{dý kM ob"/9!z/cL8Oؒ+zY-ZBH$*LS/l %ªe%š뱕˜؅,όU" 6$KyX6D`)R۵Ŵ+1 B j#˵ٟiU@91ԮAkL"݊S44su~M'CwdN\imk9 ﻶ̛U^ǎw:٫jt\@nBM u .pYċUޭ1VBēP:qJ1 Iga~y#xziGZݦ ,=f(D쑬E u&DձdQ63mT|SLw|'`Lx=_Ϥ2M3{)vi*Dwh[s1+QBD_a d.# DlSVvБJz)!Bb2ٓP :j]KO=* nM@jdNX*y+.}x&PlB8U>ld~iNv~9e:UG%O-F &НzP1,D}վx)yX.Jvаpɫ[&ˆ:,$h%3gKoǺf&1ho_cͬnIm fu3N/4!tNC"Hn&۴l/x% `'n%`4-V+RG4њ^cچ54ψm1ʸC%Oxfm tAuΓW8`TBonaaaG1V [*2;Z=!w4ku$t#+\"*ޙ^[J ڶ`p9}!OLxmOMl扥U]^תװ, +K^[F`/Kcm- ZF:Grl,ָ.lF;akdeoH+_KP5rx]Β61gw{􊟸5\d%+|J}w>@V6 KUKRki,[>hAVnIcx%/enaYJVcKYxm]('˸J" ila5?EH%Yi?;5Wtg{VNSᝯ\mrV1h I-`**rdλ:V^A3~Wa Lq"#{q,u0YOkj`[W讓unaϠc[ ``47XVyKGF L'}Ri[VN> &`FWӰRa@G61 B΀6B%&N#C9&rX5De(s7- mnt;;-իm s`ӣbwC!(I!qfڭtJ/-׃֪-m\7o 0$V+x/{. MLS.af/p!:b1_oI Z #"! vVu9nD~ q& Iyw /ڜv㱖P̋[Rck& \$8GyHuO$ ag%)^IfR)A2z,맥ޜ6OP.UIBlt>/zɔ67g(i.^%Z5#‰@S1vd6þ@$a|p '[ype{6+)Zj bk83ӛӝdB9gQN )SU3=CQL{PPeh-DֳVێT͓,$]tܶytL,vFhꗽ5Ĭ%C-!6/Ir'R K~ ڵ(Md2N gZ6sH q<鋯[g;" Λr"7Tf/jGܼD'Dh%o]|$S72s:ӣBCN=.5T-S#谵)bZN؇%҃7{ݺ2VT*9dDszYf U94}1Djm90K e3xf3{e+EmN<(δliBro#O7 `[&\ `Q:t z_iu;Rf4 ]HP$iCBiQvK(VY[*HyMFE5M\&s#x igܷI l |ugbUӚm6JaډWtw,+1KR~.Q]~G#\M<5Ԧ5DMhK˛̃p8x1]hV/NaD:qgOlLE<'X@wN v#[K %rB"Io;[օdJj\w'颦d)]'Zׄ^MFK2_l}O}&:\soԁޙٛ'/2&*+Qxƚ/-!"FW-no_n{#xN(N Vz7}34J]B\'GB*L vj"/iK&jcwFr4С u;Kk?:4w3y"-GMۑY^[+:Q-Uɜ-o+0WJ*D {q X`-OEuMezsgF`!ڵ)yO6A܈ } arzC*{qnZb8bq(lsxyإp״u{ѣ:3C?6LQ(6?;8 onށ "|;e+ɂ2Fdmó9HNR sFGb|tHDֱ8ؗ4C8j"(f݀b<ۚJ…鷐oeٓ% fRI)$TO0grX Y)w,6v2ᆰ f\YNpDMu5"R:dmhRgfz 3J$± AՃʰo%Œ"AwaW}:yb8#.պ d)v;BR0u[>Rxgo ŀb' [W/ nۈLm ϻMыxxkzqE~uk ْ=I[=L@8Djo8Hv=tUȴ_wϏ3];*Aا0z\'W>iq@ǽqqZs.>~R8©/3QN$qQ[t`[̍+9ܩեzp>SZY sfv֨Ii[{n"؜ns#L(Ү=,F,dO_ IܙWO8 4食#@9#yoR\OR~%zL^QA} A,6XEo8&QTg*D^ͱmxضhcZ"Lq/*xFZ(LʫC2ΐ{B`i|==kxy>NHY5RS3H1Lz>K낑>@Y4/㛭nI$jT`-ⒿkvX.5E<͒ЂF3X|j1R+c2N_fS:@p-ӈhcT=If91ϝD#3 Y5^:ʧ9]=kZ-zlAߧƾdR雱BQ%c@\jA*u#x.u(3xaF0`)! Lw.,F#7,%=.s H,vDQ)p)b)飮F\UW ߰1:@. X7FJ{]; y T\#iE4QAтtK:,R"[ ΁/ʈHF!{Gq|)1놃&k=+ݭkaT$xw++O#z8vp0 "RYVYIKD[ *ٔ4W+ jrJ;,T(W[(zdSbbt"6.A^E2T0{d"TvݫHh=kKJae/Xhi2Qq=Ũ;p~Tud6X K!׷GGzN, -x:#χEqkM-$kL.mrq1٣cg0DT E *j"['L #XI^M˹6륓:n)#Y=my*MH=afF?sRɥ )q2xS;P@2㦢 EN rr7f"ڤ˄/f)_jKՋߪg2Юc&=Ğ9i`=eGKH8=,Ŋ2+ξf+D~ū$Cn'Gd\9!W-*:#没U^ >'0RvP. )>4ZOݫL" m-`5R_F3ɴRf%$t{ K+xWd?Bɸ۶T<)@hnpH\k{x15I˺\/໴otZ$M +DV¦r6VVa ED yB#yvdۂ2<ٓw'f턹ɷΜ=c~%Rˬ BGBJ9'+4%z6T<}2)YyoZٕY"?އ'*fzYErMG#'r+=vHmx薸:QmE76Mu}U=Vc)0ӁP5#rwA1AV7sEB͋^]Q#߉DdB[J:!{4H錑@o+Tt4K1D%B5  gT56w-c^VsgY(Ak>D P#zG'H{Ƕ,Y$f yw {Jde4x1ZC:S64Τcݥ64 [OH6iR\vfK&w4N$h]iwUBf(N[rDp[_0e58c֮jfr2o7es QdڙdOy=I.O 3Cxӈ{v{Ξ]nBOB~stR0wzᄎ^J=)=ap%* т1ٓGo q4Y_f }6[6 |kbyzs}{.2WFpdHjuޮgː3(LQ@ZD!r/r:,+gr]%@:B`T=Nehq9*XZ& 0p'1CZm^8X b pU 0:I*<ۂ%%"D6rA.+Dtwz< ʨ-ېa a;(vBfHoBeBJgVN!A\z S(-YwC|o K"q#u8 ~;pjMZ"i c}x 㖧7] ߱OBW[rnIp,ci&%v'8Yƻ$BwM/V!2Z^;v]{l,dKnػ[Ț]Nj{Tv ݳPnz$C* ԕd0>8!˚uSPp9u]HͱϽvl^4ѽiWB}c>LZ;}ˠ%3 JT|p@sʆ+M-҈Cְ먲֚^WQ–XF輍(2/"bZzw@ _Bu+[}K)Ԝ öiлŠEBXKK ;ֈwGWbq6dDÚA+V[vgY}e9 :54JI'0q"-}=UxdWty^UCvlնk`Sk1n'N?ʹ䓆TY  #ozN;v uDWdE1`CrpȌm`` [zu!fu&\QL| "vJ+nfq(|;*m»T8:/(Oylp ElUbQ8,>o-J.\71Ӷd m3ywXƼ@MݞB:LF 1{۞a&{1K~㈂G/ޖ&Qѻ9-IėZWܨ+6+Ee"roqyOɍ^X?>6F~uS*Q}[uIrݻ`ClA7y [:ϪulX͸<b::]LmDNN$~/;bҩH`;;Yk=6p|ߝ@5"\bOwCW \bm2Yv4}7Lv0#3Mml"OD2D##s\rBcϯƉHxbd1?N6rjBf ! P_xI$ ;j,s[p oH/\חz f"B}0T#}!"xͪ2İȽ),@Qm҂,ڊqLDV\  q"%6koŷ^騽MѬ#Ҋ 3@؂˓sB_qk0P/ݫ_V՗8@T *Y ?ы牏ԗnσp*I%h2wL@7+z\;LoAN\,abkjoO9_YFԸG:$S)W*8 `yfT%|+ar;#aFB&ʧblsW"-| V_9Q"6+KNIGȳ;Hh:q8œ&2FTtȀ([^)eU(;:+xQ_ AX64|cO*VL4׈UNƜ跶;ΧxɕK J'nw')=' l\wP؋O1:.zCGC}h8@5>TR!]LaUu7prx}0|x&Y| # _$G>]:w\A*[p|^'YDLBN=NxyJ.tbT*L QKH*A:\pPv\8-Ľ17hSfBm[eĠاkA` .2Df.C!;+Otd3㊄=Zp5b?I2@F7>ciI:tAuz^mfĎh~p)CoU;j:W9'{eOXY! 8v?.yYhvQMbאַtu1ԯoS{.`*aD'O"t-DJ! ނ_oxaRw7a$#ǟ݆6-K ZfZq,_X.Iix74QgM:P YLV4kqlu~Dz(1S-&1_IӨ' CU'13>2S& aRR}@vGE@DisI#xr򎆁 8Q.4PBy9+׺ d=z;-6q#1y[6{Q{n0 FmEOw1k 7z 8@:-* a,$FTH}xpn"SZ!Ai#îF9Ն]Wj%AG UD*NX`iڢdG$@K8\*k.0@*?;CטOx~KspɶuV)-bkO1n޸y˛hEoXN[Tͩ#:rJ*98:YtjL9A)IA՜ b``Ŏ_ Bq9lIڨ*vcmZAX PW։[5o &hlmr^8< dN ;$JX#E~hZ9*1o V@0P#"UEWۂJ*F ;BatUXB,)\Jfbi3k8>56 O\P;ƋFe4a0[{B+=Vj-5^s5n$6P0)9,]$wŧ f^hjWdUPL`.*=p2?sȽV{r`cQ)"l;fAJ(9(ͨw`o $\L\uԳ 3N;Jf)A§Fw)VB}Y=j[O@٤+N9dП[T#UiNzcXioPi5ӈ-%~ɸ>t@ `߶'zX~W(eR}rv+x;Ő_ԻT66P;82~ 7OA\PK:NFN)<']Ŗ쓖vKh#?W";"Z0\jtv49:p+<LM.?kiH #vǛH oѿ::+jQbxEk]W~;DȣLdlEqg| ^D,CXbk7T#۹n|mIiL*\}?`ޤ9 &Tzt( 0=:=Rϱ=֏6f}S */``$8 x7Ԇv!INRO-?Mhb{Pd& Fs.^ -me8rRP^9pl?_hz} 9x7U'A&]!N\.[ eW{9rLy[tS|nX؇GKIC*L ezVtdzd /sQնVTb;XX(] ֨#p6hZZn.6/ 켌uK 7e&󲟇~S4W)1?ZlOzmVΰIIqo碒]unboag@B+nPzD:kZ&{=}2R;]o6#.ɓB]º.b>V" flrM֐A"V2}pe ݅K 8YIK*A}ӍteS=[u܇]ٕW[^#=t B1Oۗ\=^/{P_ĒRHS/Rb`]&E%R 7ዬ1g dpd1c;O3g|tUso0{)~Z.d.zO.3dfԒ\ U UQ"1CO\`ŋ4V/Rk|PI$Oh.N)b/ـB%V!.l^6^EirP aa=XC76.2EZr{ Z= U%MnMJpOVWgLAtœ"W,9Lr"R(vDR:fJJJ&'*"ILwiƭ* Vl<LaN몳 tx9v5VXܪ`7y ]V S&́2x7k[qiA;߽v|6,2bX6C$Qn}8c*ʞņCfނԸqURǍVB} UR;XA=-Dܿ3W,,ݕwLeM ް yY9k}TOP?rJ֏w2 pc:):!0C|.T3JIm> "/s+y h hqh0Ȁrp0#撸{7g~)sjK:U{47Y_#ܬ/%>,Qˮ<" ׿+PacF*|/P0IGnFS p\0w'>@\7|[a" :`G΍`d}I&z93xڝ^=Hcc8o+FĖIDA2 FO{{BBN9럕\# g_]O kCL-\ ΖeL/ b;̅{1=,-i"Y/5)k2 5jW:Ox8/+ trU\t+ր )O14\Ŕ2 z0H!= k\LH.AOB{z N&_^ -rjm9ˇ'!4 kOJ$}3x013+Yh "p;۔-KF3"/f5L*F+LDlq1RbgQ<LǗ?x42!G_Ex+ߖ.>ݱ] g[mIƜ2LvuɞC:2fmc+oU9!] -R)!,zٍ{p}x߃%m &[YJ!NzU,?ҟBBKKT !s`7A W HOB$K8FʙidDĞBȊG1Qpۢ7<V(vTEݔ by eB&inxP^KI#t>ZEq#'擖ͩy9'/K2°U6bkS/zhe"s6 om ،X;y`JԾzS de:5p FG҄lG/Į+b7 Is&4t3bݨAq2DQa`ӝq3I;>M>=&y0V³H wC9|mąx"JÉlDe25N{qM=<1U&Y;!=Y{#2mA.6K@} T:p Ik?,"&V!Q8P;ۊxBƈU <ª3.F ;21xW$y!P$ stq$j\K}y?<6a41}Nc:to wS6iv¡Q;3c0#ov˕9}وë[*qxKCi\u" ;wZv\#M:MpA}о wS!{۠Gp׷*2"dY?uJ:z 24Y;WnTۼ4̏&Umi[qcF0 168gc'8H`Wxxk ?kS /v;6`4gJGK#ie2.;'wA-MߢxŎF*Fe݈dq)o)eﵙCm1f DzN P{.[O|gN'쾘9N^ݝ{굆S3 ǰBt=yeKتS|mkM" Z /ЗU38u7I;~f2dpx 0Q2|uw-\ZV>ȈFXpdP Cvr;lxp1S7teּg$?{E{${YG"_O ?^@&^k-NGX,c8 ~^j$j/Y"zF@Q9`-L;HT4M99"?J:[DHԾ(+h*D eKGIa_m2U uC̭?`$SMHhp[ȳL\BDž 4ٶ7' 5M;QPdZیp$J!mDR(N͜_Y@vCUѺ (G1Û@Sw_8{?u!F^D 8n֝ic鎊>4O~-o%}xl ȪFDln"I Ccmh>`4HEqLZp䖧:ޢ/o>Co,[#{|40Q闗[ç9E[%3ebkuhFi &?v๟y3RC'C QDPnz5$ׯ/.M/n*E>OD6/wV9?SO顗.?~5jNUQg;?oyJ‰j`tKJߋ ʺa}'1PgB$$y(arc@exʱQO'%BIFIR s9c!/{`[[^yo&k;RCtDj,5Sn&NM߿i=w'e( vxvTXDiID/SHPs.Pot"q\V{m0oRGks$EVCyM 0wrRPUmօTf]HX#8/@=TY]o55cH&C3QCv(|,anXT]I\#%'3Ͻ'l)hbFl`u ]G'*׾$ f7; r"2ky첡S!Ub1:ƿ ܅t>LGρ>M-fV}(޹x 0S%sĢfwDV^d7?@>Jx*2 )Np8x(˩qᾙjn2$Q#&j:y JbX=:v]YP!U^JCفi!`1"VHPuWH yBC]ӋnIN+Hp,<8y5'#iz8BZ VNph3bWVl#G ~/*Mt r.Ұ]V.Y4.qQCj"YbT 2+RޠDNxy1DZ# 'J()0n.t'JNAӡsPx\."&)p\dhz.v fhu8a w-~uPz=2?RlzQ c (nHX@;׾; j -'v=9W0}S$/x I;Fۀ+j[ʳ9:5Xhb 3p-Nxt9PV;Tw/⸥9߾̥Ui;(z[kfL;rӜp>XO[7ĸlȖvWN&jum-yݘ.VMwoo*>}Z;y=Gk;|VlbBD>hg6 BvHFK]ԛ1wй]E W߈fAJݩbzX ۣ6̍󗠲1Ej!8\c]Ln*-#Ϩ( ,ʠZEwOB%#xOeJ IۉF3D~6Њ˃a]=xR-h̘'* <-I8kT|'a0#NZ z[`sP>S,~ɼ= $ׂڡ7 ycOux0a E&7E|J>$u`fE%ؽ:-D 7r&_5kHoRM) Y/d,^Uw ̑bDV_T`R>rN´VU@Vx͝ OPbIiV .eJyVl^~ҷwdφlP  ?)S f lLڶ2޾yxFBI/?)j b 2q3B0 e߽/#a0#~)Ԧ—xDyb@_-O&߿o츨-m6( H ok|uv їN(\:N\|6_}y wv*^Qsڛ߿n>~AbP[ e(rd(؂

    5,;v/ N%9!QP vfCRM" L}"xJlW_ݝnOrW`;ɓes/sKM<#uҗĞ,cc7=ݏxQc[^QͫR4|䬻WcEZ(ZI"Rm</! YG{߯8 LgM<|;1QWߥ{ls@|O]mu8DZ,9#QO8=bdt=U !n4>-wEL{5_DyGɫi>sODa7B_sЌa!o/l :8b˴;f:2tJ*8I<.{c: /rV7l_=siSrǥEVE"CeJtߔhk޴rܛPRﰷ͹^ 9A/FgNՎ:}mnIVqaʊc)lX} Mga% jڷO?nh}l5Mp7qo_'߄fμђɍYX7~vz$>spRh@b0/MQX *q7yb]JU2Ji@bG[geAC["*dyF+$68_ށhVO>>`?D0cP=Տ`s"3W:vSbImGpF+Wq1c[=+v/r&!o۽wJ ,[|U~T)!Rn"P#ς@DIj#)\kqg2/yIOq|{6څn"A .F>ֵ̈́7b)܋4Be۫ x0wxK>$]!@OBoOkO2,Kw=koETJn4V?5}(+bߐopJBr_?K,JAITBO/xZC ] Q4kN`~H:;Wڝ+1J+(锚-( ~#JrBaZ: v!yB笥~bŝsX+D{X vd܅d^P6q:Gq:.| xlXZX; xPG+v8NćC:"r(vK:cAFp:^zCiTiQ]Nᒿ`F}דn_!<3't7Us uV4be||{0-F)870!g8X a˔]mzho|w=sciDg|v]8YZʍ6\) l|™;"y$8"qo? _=U0bg=^.} TۼHZ)V? ͨBp%n1&.\C'!yړ+A\!_\ apJk'oQzEIN!!8/2pkvWyUqP\K\wC;IJi^[P=y ';򛛹˔kQհ$g>rpd{*qɱ"0ʮ bcKkuv-$FQ;Pƙa(օn~ߩvu/ݔ+z|w2mXg/9k+:\psU!g8 k˄HԹLiYU0fY ^ke|H`^P K6cKTj{8xXR~l Woiꔃ'нBO >ZCNZ&]>$sةP})cYQTT0~W5[sT.zhVGif.~nl-~})UJI`S R^ܸ+u] ~ |'Fac=xBPyktX5`@Jg+CA+ jfP@[8FYN>0P><üu>KDֿjv/>6vwr?$k?) 4P@I )>p@ts-mS|^i`47قǾN>ы;[\Uk"hXNs|X`{C*T(YM-Ls8%Un|.l ,[qa<҅:RE*ǖx271S;d19[/Oүk)X.__HAzЏkO>n}-f;k=t,F ԅ!Kj?^&L_m-G5Mb\yY{j;Be4_׫UP/︚^G!S _?Po ,ww#1Zݯ7j1ݣF1x}袊=pp< /܇}vIpfTbtxzF `.{ݡASk/,O%yaW$U;m4oxxxN"Vj]ѝ vNA hURI'V azHUۖf1n~ǘSMO|~1ޔ{,yaDXRQn2ovtӈ~0װ*z`8\y"q(8d:}]zH=*3M<҇i@-S\,?cM&ds/@ᴖ.fP(Uο~o;d*xuwaո 7[ n\ja=6A(L>)ti? f1zrJDWrC^W&lxMڠɢt?<.Ycn_!{2yA"+.`eqv|h(9,bx[>yN )-"A>f}}hJC[DU-p 7t/'A4ԇ̃3г|&]ܢȼJ>CWcI͈ k%"x9H*Lc tC4V ?E.n3f4Ju@0xaῤ.ruKDk"~`GM0tcTYqL%GvDKK.2Ck~,R2 LZ+ Q/Ȅ:^${vtT#T/(1#t̷ٰs*ܯpqsy4g<0w'(?ܰ _mjйIv.X4JL3QHUrsVh4b{ŊccЩ\WJYຍ)"''8s-}q~/m&&N* JMXpoɿp̞fLVgj _ʵtΡX;ACcjFxL@dM_Qwa`ז©`7)E0lS XAUAW-8sl¬۳đ~8:"'T;`q}U 8;dܸ_B*]̬%Q7\Y'# p.CyTV#W2}oTB*7Ox 7Hh]R|L |x@(Qa>[|.+`N6@Ӊ1PDR&ٴ"*z sPhnA:љ kBD5{Nh{ƙهBJ/"WЯ肪Ab1GVmڡg2T"r|&2 Pi cSc.A@o2gGϪTx(a>d'p3[N$9E ,nml"ȟiX?I\5 nmkDhƥ !G4Jna$e3@\pvN N]fJ# DV%1ڪ{Wq"|Z`>J^nX;C}c) ,k6PB~ FRYgO}aҕI>+1VD>qS#)0fǭ^Cf/B X->1Ad\J T Ard R)7j}#N>߬uOBKV1Sc3%6PEohV)[y'3b!T7ǵK:1#J!+2#pdzMX]k؅žc.ao:Q޼"d`?{_@RiRջV?Fhwdul/ɶWI 1/SCMTQc۬JmTz'իk-C=; ?3j8#4–17^!$=gP!Hz d_C"XP.37Xl)A0KtH+I]qODS@~m! )#l/,I& +_|1Z }!{hu;(Tg;g]F;mCgU2(ʧGmUZ\/T* R'KțRI7r]1"P$ /r myi{2Z=!tU ڌ5*9BV tփ "l!wkQބ c>Pn7LtT*Q 7ܱG;s}Ư̎&},3]3Ll}-[P͝sIا@Eb ;j)Wy=FnT@2蝰'\ w[?8' pQh5>N# 0^pK( 5booMlCtq2'rI YY b+^wy]A-`lvX8i5^ ^:u ˪-Ql0E6g1R Yk:/rYi*=`"6@y$=ŇxK:$~tꜴ>#2OܤV==wEdre|-uB87:ˁ^ah=;<Υh!|[yqP2FŰ> e-7H{=1/*ENҸ>xg*q~3J #J|z +M)/T9Nc30c\ bwpAWi%ѵ͞n ǿ2$[GBІ  t w^IpbP.t׾ۖ[+pCx$ίlaİT5:6.Y\ TFH?AyȆ#~K}Kk1oYW9nTv VB\Ď ":c 8Âkb&t"|}S2X E,. 5ZTՀ=\(D6 3f㵱8ø)Dl5ŘjtWT&*5quBiɉ@,j,ast1#\p9FP@G%G_9=_I^D}7i#S.kF u %%dQ~=5LUsNC R*‹]l m!Y 21Irud6wh?!P'Vv`>?`G|@Q4rQZO/#f^jD5WĸՈЁ^~|1FѠ ڇ#5XvDO4q¿B7KyU[.l8E|6}MeH%ɈR^<%BD10~)<`Ii i WCiP4Bd`L^qFq(zfƾI]r^9pbv-zxZ F >l#Wc!m(5X=c{@Qcͬkע׎?n͇t2,dƶP| sov/$([Ǭ0d$+J9E{]qjj?o!\AI`<e](@cw5bbԩحIbI]ť6z􋡏qMݢ^)_. ײSߴq/1a {ŖW7D5 Z:о 5W۟ǿ?on?۳_?ƿ]6_T_aǟO_OzfSIB+Y$e,';NO|gO&'p XE5%f=`I>B9(ǐnDpwIڒuv_|qHi:Z$mJ܍612N^'df8fWVBV1ļh$R*]Ltdub u/82oA vKTI)dᰟHJ\/}Q0TJG^1H8`>d](z}l$4 gKK7 H+" ^OFKޜ\Y0K BV\VCEɠ6P s 'Ι$ט!`+r аJ-%UaBxq0/Q/mrqGg4re#=9#&ўIZ7HAVP,J2&N%ELP/ÌrzAolZ#5E5͚RBhASMk$k? v- <, ڰ'hI 1D1Hc[X2o`"|X5AΌq9B!7Eng<Ī~y˲' I%oM3_ٴ`'pI )VaI 6/ lKBO(0^#X?V]W@VV(t,xɈGuلV(Pwҹ 9jNLʹ nub-;Y]tq2NecDmOV {L^0zTL&:,c8I~T F]s z6'I11 X|}뱊ao^C'A#ϱtk!0pC'*jbXA/`ą\D$Ⱦ%Փ\@Ӎˇ]p~ÜLTڊ 7q1< V;KOBNDha!^(MA sj[-`EWoDj$-Tŭ.XpF6xj߶QMZ JQ@^d<*5 aއHb【Py(Xj'RS+bYIdD.Zwॸ/>vT| >Brr{B{I- m 4&c# d4r Ua_vՉJ_1c%I{p6@/@:< OQdZAn;ZM%l \/<7N(~O@g\;pʨMn>Qx=DP݌U'ߦ+ A@(nMA!Ru9j*bc1y=/B &`AebSz@H>_Es4X etf8&sT|7Ztt֬5edX ?.}3ԇ` fl/jPҀt`zDSK[B{aIlC]؊ Do{\-AȘ MIUš͍\C7Iۋ}zW隃(zrde˃.Ղgi>H?I y%TFRLP/_@JD/L1.=aS>H.q&!Gu╅ J!ga㹬8 xPYMo3u)"R1A8ua$zɝ+UQ  ODQ$M}Od XP'.E2@ + :Ϥvsd}K@r_xP)$iQd5O߰.!".}@t.V4%( }f >OqR2mbl1Xmbfd=,q!ݐJk6g9gb6a%c\w%j@ híъ*Ħ)7Lyܰ{1a$=-򯊛Ca*XHb?Q0o$ yF}kI+ƹ"tQrBwy$~t\:Ë XVЁ\JztdCqN@峴l][,NSB)u72Y=lBEru;Pf1}0_XWVbv$HӺNE˥"Iŋ"Dز)t |e~F~糧@ Ha U@jX^CUW' $ũ+.NSx-BBǚZpؚ޸qpϺ ޒѠrT- 6ӊw_U:Pssu]LQr^SBx_Zƞ7u䇚:u}g^j-5im`Zh?hbi)y{Mu׍RZJ 3; } XJ#9oQ(ܝ|_K: %H5qFwҏ;Wqnl%a ;} R4R?Mc7 Q3.H6zdAyVNK/ͥyǴ y;EmqC #0/Av^j2_GXa'uWC/Y@.~4~#gp H)#bUIRJ:Ĵ9F>OxZmMp\C˂䒇G%x~\&F79qP pӁ'Cna1f٤\{:a"fbPf'FA$Nۇeԟ'zcp*o䌴cсʫ}^xc283SU55.oxC72[}r/!Eª=prX˓\:=Mݳتt{H*//&d }`rn@,WG[{뾛2ˮ+l<"UO1Rv4pX~=prkN.w#~4~&aNlW;U2@WU]4HSR&o׉B,dZx'HDy9׉Q!͉hD;;HD]V9>x2JkhTzX #]$oZޛ`k< k*ZHVttJ;';* ju3yQO?r^rK>H~h(ZhC,\/W}#W粚6*JMrBRon\XNQM,g:6b( &HۙAhU5@Wf#gk19W 6'fL0ezdľH<QY\ɫQ73}-ib:Plr湽`_6_-l*o*۬l7I.8t0Mk%syM'4s| |& p-Jll !i#t6뎭T<~z  oL|&~/V ^ƽAg [ e}9MMzriGA,bik >1KN剖9)5IP 3-Ei-TQRn.`ʝ#4IsBoavGA aB~EM-iBe:Bm6716塸6U|PHPC[җH5R`6+RB$A'`;֜pnjK>g.9h ' Ƹ mW Ҵ.A ŪKҤ' IN*=|/ZYʁ{eU, ͚ҥE@X.!:l]jo$^m W j8Zĸd~Pc#^RviB;-=}<έ "~Z .v8ċU\b'*YF- ΎrD3|$j2SĦdk!kljca |Vq}3,%*5q_nR%6hOHGÈ]ʌшnE`uoȞ/e{=# OwV^i!3H<s&d Hg-o""i_D_C{;aH#-6\~D 8ei+}~ MPв-3m[=dRgv-uΰw 8%@hr2Qi16<)*Hd>8Y?؇6Em`0-uBdTyEVħD2Lbl9-4-XkX$@@J&!!cAxJͿ'+ɜ);Bߴß BpYZɤ9L,DHSJ ]=t]x#]M%~ɺ!u;!B )7ƽȊ}2&jWܬU&0'I|?s?x0<-#}E0x=[jZ֝EPV^F&&^Kb4V)--@GNUg֖cx|u|saNL*IJZ QIl`4> ï& !>1壘K1y.cRRN9\H2ZW՘JU`~h]EꑋqZXy @qqxte|igb,X`Il`բt -<j"ڂ։P)8L3Ǿڱ:K{+t()*uUWg.&ܾe}iħ;v-\Ǎ˫)?x (ղXkFBRj %zQQbjg[V%Gv`@HOu#goF-v@[y"5BNb @ }WhYfDʧcYx2Ԁ9iC)n5W$B%$Hl:±bKЄԝ*}C Y.TS,KH6-#fbҍBG.W_КW2)Vpe0BN7zh a j([ށ&*\u!A@ O;[w]GB>O{:.B7bRHF-u-5m7l*xJf-q4cݒ{ܼf,'{?6cqSr(> 8>H͋d,(79(t:7IJBՅ65[pr.gCHX, I[.l1Rغ?=լt:[xfQ6rQA hih{0n)@?u*`wM\b± F)ı|,Jr2FWG/&+^7ҭ3J ]ƛ䙬GDZ^VVvK_L<E^-c#6c EFWsjAԲm ]*jz-2d|_3/ooIBBx1 y٘oBB&!$/aCLb`csU붺U]ۖ=P˨ Hc%"QYNJt> Q @vcM!xBu-¦xBkbѥVf{I8u\r&Ŵ!/=}5H lydZ`QA 7cW$q߿2%l,:1d-.m"F0:NI6.`"뵢l $PX2:-za^gkBcrЁiW:4TKZ8vL̲&%Ɏ|y^.f*Z X564&)S#" BZ0q qBg# C^%!A3 3669n9gd*;aع 1jח$βr^a>i`ԓ۬uE+)%=6Ai).(g864 Qu5$C롪&\ă ߄g\܉p Jx E[LAt+dJ~҇( ,_A=%KӍQRR))S] #I6RBc3 RAJlagN ;FcS؃Q'x8E -buN7K{iX28E`؜J2̸p %<[pN< B+ÈL.o{0R CAk0 mQO!dp 9y)^)rRǑqJM: W(tHĴ,EYٲ%GxR;/BaHt^&Mb1;JrbR_ʳ4?6ݼf2PVa ٕ=f(iCk^FopεC I=:RW' 0樚J$ l m& uBH΀ڻSՄ٣iFV:CND0t 6DnQG8刯gc6wu$yߩ[OYe7؃um6e (]ف BȜ3]F]RocM-K#ıX/"|R9H{"G5 %~"rtNmṊ\&hvƜiR%&[.eydVdBR9Br=2Y"N@%tҙD&DrI82Efa< h7JHƁb lR2¾T+!)(y@ܷYx]BPI8"'Ƃi+`lۄ}bAUZgvDq>zR[#.K@6 u*m+yؼ_:3H@#a\ePL3A976!W*,m !Φ8ƨ1pLI&qa px cJjD[U)2A'W GM2倓4:\i j%Ú\eIR%q݁o#Feҥtt@)ҘӮ؆,ZJnsi|g]+}הZ~;L# Y |NN8hZ"Q c"QߘƗ̬%XpER30cf)):,)d1=U#$ `.9UPfgFS1Qh9hʌmn$[KNY9vqڒ03e"^XMg 'Y,t<m,7l}=oZ9W rGā ;?1g ϴ pt ǜu9>;4,X9I*b-Xqjڀm0 '.wiaWgc}MX^+-,4oҫ8Q+)+^٤uva&^vٶdsɇ̌}aUH-r1CK<\@Ҟg3jpGg3ydEY(ّiz՟qHo$%'֡y)ߪv0@INũ i4k veӤ e3+Iz zr@6q+1 WDӺZ@!x#u2<{FYspdG/nFZoSLzi,Lb'hӂ|qL[ȩw&<I$ɞjE Z6w`xSqS?}GE@S.ObzG5+|e(/IȬj {Xjy>#[g:9=Լ A3Q6r<7hYAb #9>&Ű]ǂUBZ~,[JN V[~T 4 -YC)p*zAJeTx4=A5zY q66:j Գ^Y;S_L1^"ܺbjc8C:Mys+zhgüh-ȡh1ԎN将;s6ifO&ɤ1w*KT, ڳI`' pR4)Z|4NLT\Nht̅ ȅ]2l{v%F׳h2c'{K u2-gmEH 2fTγ$j2BX){(d.+ExL̩ƾ*-3 %*HPk߫SR(2j6]t }W+]omFa U-0܉DFx-gD(4M&(lP6֎N9.BF>-|496nPG{؆G'D-C.)=`X{ئYi@Q~Ĩ:.s]˹s]/'0eXTijiRmR+w+?e;7&e JH! ͜Ɉ6ǏkCT=!8*'%y mҔ׾M*Iw 8'BU9"(OY= b9~y<ŶU37\* O>sy{ sr,g1XVgWNsT{d[uVڝj:8;p{w]M_Nzg׷(nxhf TzN,1~FndXLiC(ҒYLQ.A3(*).hoU  3> (ƫ)'V)m))u\b&Q`w*["!%.. #dF-⬒|DΠz--aFDeE:Ji/O..qgIKA+؊ %)Њت Y7 J&5#T Y:a+CϺ'En'vj \8;M87UゎZ{i&+9?Lȗzu*,Xv ۳KX!r:n>e땸zR8j+фΗ=r&R@([ Ӹ9TFhYG0Zn_M"-V2NXJYn1B"OYI3bRS-HIc%%"c͔ GR8'XjQ)K1N+ Y0 m %8Ցs1|%' ]mmc6k2Ѡ`=BԴسclg=An8'Uqsm@:uQЪ)Z7,O:'Cyӆri"udBJItgϞx_!m\w :hJEjb +)`6yh"J@Y_J#Y7v<Ä3u;G^8 govmSy7Ԟv> ymݹ}ΏWj[uRJkf˰m3{=?[:+ʩ} KN{vŲ-iίJS[lJ a xl[|B>7!`RGҽOKONw\}n&w𖙃'3j)2xkмѸ=}ٕCPw €vey-=thjveu|3yQɽjlybKWض-)go.nZjkyl\S#ϳpdvyOE>3vV+kPD23=4"45l>ń"q[wdQ+cٰcեKœihgjw&q;kg&]l-5WK,}b7k]nv6i=['j*9tNC+9 ȡ~%r艥&pu˕$:ZDGR Z Z Z wnzۉ4!¨}2S@aP͹dDy Էq|~u :=mB>5fvr9;:y5WM9َit9:6,prOMTW3A9MKmԻGԻ;+ӢxֵuLP״p-r%ٓŠO3)ƕhUƣ9F'.w#nש+15X܌$pw3211P<^9l%N0n.WN.VJʊOX:8]-\׉Jm;:ʑk4Peh&EQ8&CMTudqMuZwn"⊶_\j:`9^->xEWbFs%f4;&Mk7KxL|kwidw{ש32~(Dӄ[ Ab]&ӛOP#Fge'G'?JH dt?*A*AmKٝ*+vĸN }JFn:tZZRڌ'5GX{On//7g[ ʭʼn$j Mnt$Ik^WrG>},}_'Lp: Tp)MRk #ofdC7)ht {bS4nD?nr~j'󥼸'aO,uJ̊ZkVוn ;fkA c'u"P6sqM9o"\*G5qMptbm4Q'ظ<6goΕgĸvFrM,[Mn+3όkK-ҭ>ϹJ2tOU:jv vG"G*1 UTH[W]BM ~H%4ijtnGRtF6ltwR(J2I^$I.,vk>b`YԸx2durrRd}w2oqd׭-q`*vb }699ɕҩR:UJJT1I4P{NҩR:0JT)*٠t-RTi.f HK[iRTj;$lPVa>~aJd0%hBÔфduJO om2L0Tx"*U'ƥFm1msm[zc's{irM"cL(1zJ*腄NA<5WbFk܌t1)8{rkRk? 8N\qf|6 "Z"jt,HE8 Bc]{G>%11T#|o)۞+*65Sbj'[kffۏkrJJ_d*ĩdJ%3A\xT2%fTd*L{OJo*$dPh\iq3D'2Xjή4oK.{X&8URI-6Ҥ^cLRǛ˭ZZmufK=k%uV޹L3b{l2;w4Єm̍>](1/j=y^bh[oN2ِHUWyFg5<_cu<`ԒY'D ޹jDJDJD- UEGf+Qtށp gclYtyVh%n=Rɢ,Zɢ*նFKMiB`ʣe6tsw-5KJ~S.D~m. U^c*ne>jL;1t};]|s5uS7Q//:4mwjB/MxD'#f\b*l 곀%8#; >,zI̶[wV悭AF';w̐lhߌJIr3211G]61txr^K`"\j\hZT㭏'фń3b\O ^_O2-D|Uv2X3A*&gw6uy>}']|Ic)ΞUVKYF&.'}rNKR~hǤś&?֕owtvΊ*$]o|6gJ6L(GprMh)ޱW>[ N *Nn@IfQ"2b~/vM-j<^b'Ikk[Ih\R-{hX~lD5vv#:ېࡱ:)XjvORf އuM7:iT9<3VʜJSGxp~6Vn8GP"ރ(oΜLGA3u;GBT]Nݻn[~|ةyV[z -lsݫwrgzx.vjJ1p 8JE:CU&!A{&Ѻvg;>Rw^`ڭݫn߽+Q Oq7Py84BFv- BWkwA#wk*Z78jk( #(] #n(?IjAC6 S (M OA/u`A!ACE:0zlop0b-F`! 5#kCX4ch%54C@QC Bu,@״iD@7?05S*%nO!̵ &o x`i> mN8 HG.1 "؉$,R>LO! endstream endobj 230 0 obj <>stream pTɠ - ))y. 8݉]>D&`l' 6IE0 1Xhp* 3³w#KFe76л]8¦M6 cYJGn# #1E ң3Ͱ$LjT|a nM i1,f;((Ib4.8|Cbʂ+"TB!1>Bdh!†baghIq'!a"0=.%"I8p;\h/Ŝcj\N~XOJPkmc y_k|@\8`'74)N\˄4 Sgx&p瀸H6 gƀAFa 8*2>tOgb-!Ujc )pA@>#Y2%F1atdiab-c|ք[i!a«'":f&M~h݇qL<$Yt_"O<ViY>ሸZؒ$ P3#i!j,'+U`,@+}NҍS䮲l ܊ef|D|̅Vؠ$e'sbOn/~ y"Nǫ<"o.mXq&#޾ L q>*@["m)/ .D⧍(X^fœ 5N$u*p"AgV:L8'8xx]'< /7BC*}Qo;uae\S kiXT5(ք CdT:E<*xE3hd_ D}34BZ 24nR]j>b_?NŹy2zrṚc5֞%Mߤ XMбDG-mP)58#"TPFD7C2JVWπϘn%!Vdً`88R$&,byteLr4~B$W wMJP| Oe-'Kj9%.4QBz?`v54TK7`o2,ѩ@ɩC=b։Y"D\Q;4@ dFJ˳>ϷK0y+2:_X&@lCĹi،[ ZneVN6kJjl4/nN9bP !eLl;4uJrD^N3PSlv7srI* #aQ E`({PKKT3sdp jѨPkO:/`,qN0c9T&j}fQ+I Ch( şÀ25e7"X {_8{#~I Wҷod5iļP(#RNhPAz$n!3F%g+QtFau·S⮧%| K#dJ<^Hm>&TѠ8j`Q;rWvBv=O9ߤkf(nd*ChK)Df ¸\ٝF@e=y~i(pL)a>BSh# XxpE-TX T1SB:(f5D"Bz\$Cd9I_(ֆ!\BS∄CC rPB'4rE8wQh' @%NȐN,)x9tlЕ$& @EEFвNH,4'IE .ʈ*[nՏ| @HH%YڪP^P( Cȼu .Z;DEԊ%t0*F5a5ۅ:$ tSB1s_-Č,a}&-jXI EF#"2MS|J&0Fbbf5MSag344"͜ɤɤ isfkQΊۀtx@ON j܏,me`aTe^LلabQ熽x" jk#OYؤXkJmX0W~YQ?=aP;L+Jeay`6i(5Ӥzj=6i#j̠_2&r֭\gz}{FCDv!%? i#RfO3ZJ"=&26dePO:dJX3Fut {Hh0uvVe/Fctz$#B2#Ð Q2!I|U%cwd }'% 8T gF eb%U&q>RI +G-;nAbȳ%ŘuU"MEu4 A .hvɴIDl?G*d!GP-!&GVҒ%V%)" /Ҏ8GdcK"d&])/jU@ 5ˑ!)В~b)Jx–Q)QOMŨh7&DzLO06A}`/նbV):@a#VQʸM!"Y;FM>P @Hr5Na!{&*%=~$Sg1Ynquc{ѶEhWaܢ;(+T޳؝Q+𷶙@^^lS+@/-KƇOބk[mM߼D AUhV"g+V;'DeNs"O EDr 35Ȭļ;<@GMl`Y]PJaRʕ>?=+Y)r5`!H$$-$!#S'0e1dS"/$ĥVr#G%p׻bpi%wg@Nvd=ůJSS[˭r3grIP i Ցf!t&p("2{ƔrYFVtF-,l{q*z/

    d||k'&ofԡ<ߡhj Zjε[8/u!6z&I*а_X% ` 'Ђ(nxq5Bh``ADBMZsU'㒇)w%?O~k_SW]龷緱==oݗk=k)q]9{?hoKn?}18~ob׶''xΣعƟ ۮQP_-?3BEػVqk5}o=x9{߭-,==}xںA<ѣǶ:J_mG_{Qf˜2gY/sJ2w.)gN/Sz;8u>\]L~mрBڲph0%ѬW9ZxsΡ4v;shS޽ץ)6\t>%٬> gܧ zK׈N՚b+QPSa`X>. N α~ʠ{hWI#hxSshѾ:z% 1D]]|qH9"wnй),1;ϭ(@ut6`[jWW5}wgo%9r|tOkn S3jvPmmݕ[ݥ98󌇟\Mf9w.-B8rj5!t;Di>@dDǐϠ_Ԡb=Eގ&L/9n5|vs1V)%lG)ľRPT/tց{JdLrӐ>zž/[w;__39/~?'8 :a#rv;scCFucRxixKSk;xvN39'e|rxBGܧO=? |/ c?v5^\l ?^bsk hOZ҇6{ςB;o=J|_>?7v|_ݯޜ}4[@R`bz]A;4'N^NϷ6x$}Tp<.F3D >)L2Ÿ1~ƘdžY_833 cÇtب!mH=#}:FY06vH2҆c1~˵sc' Mw{svs?w s=Ͽk{͕}>򫯏_w[o{bυر9{o~__ݿWyNs}m>z nS>0??7yoÏ?ھ;w]|;ʾO/Wvڟse>O=mh~OwƗg8o?}?6[_{mŗ]pN:{O>~}s~]CGw*^yO}5ԟ|?=W:Y?p_~`wB }sO[Mlk7GlOqs7;ysc/2ֽܮ<3%Od)^/>{>]u >o 3O>38W-bc_CB#_ß:dp$w: ~!o z'_ {P?|ox0ԯm^5Ц74 m10\(_w,3᳔ HW\qՔ70`&kRm~kĎ"GY;b`:\Y"jaԐz" }ΜP,@ Ibt8{d e)wtDE${p8DlG}3@K\j9V ޗ6)d=ű芏5Gc?qTKw0ߢrCݹ4%Ktp1CUv|:ʧp,l>7`ic${!aSLЛH?̹WQRknl{qY4@L$;?s.BPxL&b;/:?J蓊˩aI&Il *1_8cn"\ *֛56TӜ rOcYO*`t( @pSZr(oR!1mUnI*E{THҼ/*"< wSI; 3 RAtQ\{('v!Qh9j5,ET)aSnD$s5EUOCH[O`fBc$XHQb G5sܻܷ8wc Zُ>䋛/"<꿽 |OX~+=}c73>7g_7{n˯ /^ώg>gSK7>ē}hxgһ{]ݷދ>F84g~ }xvތv#2y']g#k5>?Ƌ>9WkrÚ|O~~`'3_ jC/ܕ$YϺ?YCt:~N=?V~K#_/D{P3Yx/<` u3Yfq-,3&TiqaDRR9i/^k2*p XP@Uq\52;wcQfǎ>ssP;㣱 /yK^v5{uUJl89+W{ ~Wswοy/~{]کc׀ҋ\r~s_x˯~ ~(hx_>ǎpy]+U QpCG{/<;ً{tnHw+~e{v˔0W6t%^]jhc_\]^{~7^ ?0W] /d׹{&^nj_{v^]- AWv0x#iG{~[*?Jn|_h~bX=nlm/:XYë~4`qu n\Uyzιݥ^D>"8Wyn49ѥА+_I&#sv ^}^LnE]׷V |e/fpŗy/{ \]@]pK.K. 1 ~v: wVfLC(u`+ic8ݘs4εTufʻ"aymF$E CUqG9֕ThXV # ^׋7If `jPohEnrCe \^^Ma}[j'=_>w@~ozz.7 x8u/p'~ji;OG~.}_t#MG^ntk)f<τk5?8ↁ[oBoX!:7}xQCǑxLwnMF {cx)݈%^j"dxciIcO-֫iASAJ5@LP'Fa_HgD00ۋ$h:blz$0!}n,Kj&t&ӵ{ҎNΌ}DS!*3'PQk*H d`\mgv$ Π #YGR8ͬRFe=xQ"ⶾ7w7?ٵ:_ k|u|dªjM[vSO_"D~m3oqr//<G2lƑ< U$~ W#OҩHZeSQ^Rn8z)I+ 9nS };+ >wĠeD8F٫6]Xvj'Bwիsڹ[:\Yi-u̷;KZKgwtNtI˚_3Qzp= u&F `fBiɂB$U@J_呉)1A@Mu~//6 l`*ۯwO`uyt枴}]v̰zfT}ɺ@_i"!LeR x1 -q h a&HTV8tKʔұL~H3Úy,$ 8 \:IA/A,9Lje8P.GChj0 0(6Hi N@0B$ hiR}(=44tlY~_)V*  Сxb8ꘐp71ʧO5\:++^$-l`'{Q`7h"E 0;)#~U4NT¶ F#*,kd Xq6G2~|"& : 6Cy 8waGG!\A"_؈ Ja JA@8Vc6O+ edANclIE3JLP ^9C"K15MF!puA " ;)CE)E\x6cTOw3[@ > >6pWӠdt0cI{xN ރB FL,Ht0ԀcI`3}hAxM$2@gnvVL7wݶHUVOnmvwjG@ނƗ5v9?{d{VﯙJvd4V>M͕Z)B[c+Ođ{GڳYoxo(x}PƱr<\k w׎.o'rl94i- y*ߞd3VEvt`Ħpxd:_ǰ' vxZǠɎ$2tX LpWio}*?uC^u'OH)oO&] f Ԧ;f1i )4<O暰C&;%fq#F"Ccm:c5fc&!Cc&uoM4)8t&R+ǷbNc5!w0p@ G4(6r9hpMљ_sv69 kXvO5?%0qz`S& fwzT"s{ $:-JL'\Kݻ[e%y{jy e5jbt]:lЀqFQH.FMP=Q;P۽/3h5khh3+\R6|itaY[j+T~e$ƲƤwc]V#ʺк:w7-n9277xcwѮA\/f{.#c r_wWFZzl4B:%~uVJ>p4>?pKgYnOާ"/?΅ʌ6\P~i"Nry_8lAxvUuEoY*vԍwLal/QGSEn˫K' L_je뾕%`WNڷtⲝO24=,[-WwuOku-| ۗZti%/7S[C<OD!e+, G4 :G?'s)(vxgW67 T~e8S[z|wyw[c+-yaKO[[ep#O5o^ GQ n//7O\sò^Ks>ԂYu*IG[Kˋ-bq\j.,N{ݜo5@cK{BqQ?w|-wrqvyiwEK fvG'u!u7Óݥw`9*r>>)>l t]QW$iCYxƅPQяԯ?gy3 s'1}ϼ1y{0=2;[6cTP(CI'JAoa^p3:f-)MM0~㤸$Lr"/P6T>gps α$:XR"۝{X}+T^vOY&r:y^fa+P1rTQ~KR͒G@5h#~>O_W诤$ ,>z[_|=U"ֹ̀.\:(#3?LR\"E{_aluHil KY1듣uqT1ÅQi驔53Ir&PP1NtNZ*d6Bf*l96q C}&gS+|;2sc1'p5eh]ۘ! [g-Bb3*gCnFad}YӶ;2M7dQ^*xYCx`Z % SD[֖X sjqni,Zjt΅s %,b*X%lW/p~5؜=9&Jd'b(Á֚9nw,bsNls5gVy ,l;>]lxuث{b-y+oI8Ǧ=8g^{dy{w@)54/XíZ2Tϛ"T':CN9c,)!`730++++qa-US8Cl|79֎m`glj@ݕ*n*nV^^ܟLݟƐRIv}:)[W`Ø+L7VZ_e8;lev+6XL)'ZQeU .H8#M<<1h axF8/9)BdPFɧW>!BO,67p1nS[T'ST@)fl3g s_MekWb@ܗ :c?S{7ث(3Eb"T#u2Dzmɧ7*{f9*fbr鳊Y&YUXw}0 ׮IgdFrpZS ֺ,[fwK(*q:=}5VE?69*48jDv_W,r"o!}-^g .ⴐoiņؑ=*h<؆2TRkL^Xڌ{ʢQ\ފnA[ym/zGΞK*=gX9+=疑EOjGf!"00۔t А6DHuU`e^y}4n#lϸ \LIegkgw:0~~ֺ7":Lp093J Yg{a]$*] 0%5sY)7F1ʍQnrcXGn,2u׼dXWf/du7/i~'_פGx8cS^0ɋ-|tyMVl15kv5?XQ![Q[)1bJwTze+;+QIΥ"Ϙ{rKj-䇙6Ks} @a[#i$ߢv%mOr}m{!$cSW[㬁h;j̨yzH].d'7#ak1 ⪈)83VC'õ&-V5YB0} v(3ɋ_Eg|U/ak'ϸZk?|˸]Dvmfgmf5Ge\ɢ)LJA Œ7$1 ճL\vqEة3 w5ú' f}*![RmWgM%6)!S0RrGBK-~Fj,6ͬ@E TTKhBczda팈dcjڀrzYY z#F.2Pq =ݾ 9:`'TDޔDD),&mQbEtV1K!kkz7^mbp`ڿv?ܨvH[n3/d^ܱ0"%Q@&90A& $xq ݚVhQ|caDiQ+I%pd "Snt[ÇeC;dd|ÒWϾDkah<5HCmfe;nh)nG)%ஶ8Y.)5Ж{wmPS48Z; FɗDdEvӮ\ O%%m1PCEtL7of^H_͖jÜakb̻0aJ/v9es҃ë8(X-ņDupHg$Be~,OgOkðB8Qn NeKc$&֏O!Y(4VGGc?b% w8`ל$[dIIdIp>/߱n[^b.๝=w`W'4 ؞>_ xT oy#^$R [bֈw+BCά4L( eZ"~J +rYS0R*۞Wr5D,֜dPu4Gf6s!)}=#\fHZB~3JES ?I:?xڿx*xS< cw%$NG$YTd; (!Ïx9N9C}4CdJ@Wp"#fdvddا!m%^NͽڈNRybNP@}j^-hEZk[WыxErZ6 g/.kYyϳK1%W}q]AkUX@tޞ R:Nw~]԰u!ZZx$.}8+'1U4,c)d|sF5tBE|ބ/1rF15ܿ;L:]h~ØTڏC~jYAK BWV\.ahu}y^,&l0s"}pIdF6]A]ZL-dqD9igo &lF\q+ Vpߋ'n,#,wǷKUgDě) WK"] ;V2C.S/; 0t)8kn Ac=EEL׽ q_q0^T){I_e,qU$o2W\"X-ZEA[>>A pFquALxM۪aeK ) 6yERtYR[t/(.X,!YIdٟ?\l(ChKN{Wq0lj8Ù>b E8tFÂI)U]dUOƋ*a)5bSO&_|Q|lm a[(b\PQ LCF.>蹭y㡣c X<: Fn~i AJ5m?%ljqZXRs$@~brt SeGF@~zC[b^IUwYz0d˪|![%0X\.{H2eb^&ѐV d,oш_rң@VLzui,G`bY%Qf =HYi<먔5"M)I!h`(A_Z-<Ě@ b~&ԤԸь.wvLwv(Gs>LꍨC12 ')QGUkU2!; ˶SvOC R@l'#вyrPձќq43/R\3U*SKO)ix%RH4O%~*S\"&K_$EMb9FCyB P"O -,/uh6TF_s@K.(H@J?!vPT_d⿩FӒ"bM=-g]1RڕWd362Lj4ZOol-$CndN65?VxHqߏms芄 e$.Z$FVb9I:I˷QPA*PF)o%B2^OUHΡWˈ& LTSӛS?BPtYJ %#U6Gfu "6k6;xKXcG$;#祕Anmd!g(>+C/e I$V@%(q^EѰ[||El=5eE(w2܉7,X*B $$Up(9#rZ~# !wEȊ$ËZ8I1Ĉ,XbȒHWxyXI1 6@:54A+M!j,BsԀaM`Q3,(:`77 EYHqS%*۵rRA$GwTh7FE;*ڍhwG v-M:N 86OUG.cn~Dy_ߩR2͢uPWyXc0LT,b,eAlAp,P+q V0N"p":- 2']{?4n [< Gee iqO闽g_E Jl{q53{./$gZ|b4Tam`<˾y^dHNJAD8!~$dbLcOsTCU1Ӏg=/&I~*q1qb?"V*x*FjmNxkI*D"V"{EVvB VFeʻȐ?'qƟ^d+j%_2d?]ކv^t}ӺV n`Szql2d?r:M>ZfZb,*=7u/홌߈z[9sF@ i :^X;/Y| Xދlq% j.@(TK4\ݩypq;}DRHWgB~i1)i1Zw@/p0,^1bLŘZZVX< Hb(tBS/H%pl"0&NjDII2feQF$ 2,xrvjL:kgiIK׈nax_[x!gh.ٓ-}Fߋ{?kN+8vZe B-5Q1p6(6Gv?)j/ղSԞ -;y<G '0!A8nq, vh!*Hj Jkcox{@ǫ*@FZƲY5]|*NgRo.ǛƔ8PTCQͷQ5L34R - 0S/ѡ{""8  ,SʄdؗL(3}@XpP` 21$ /Jv0,K h%!4Ѐ@4Ѐ7A%^9OJ+3#MUD~JT}'@"㈲ m{d+r|ok[r}p$ =3qwb lYgkq ge36 ڊۯL݃,;ؗvddk2dF1~$[}L98b-WPtX:[i)WuFY%n1 dbƍSe䈔HcP9+K1ÓDBU!+qv~mMMZ3i˄: [Xk3 X 8t`J0JX^?@g24VJP"Bc%y"5c+͵qtg@ht4d 2ϠZ!/2<vE(~xΟ IBl0~XOBOV 1VFo2Ӑ@CxLR*( J!JT'D![Z>cUB?hd*!3Fhp |o?u>:sٵˍёA fJk/gهmlPd8nr<߻Tdk @~kE_4?eO:f Rᔪ{mz3ޜZ }Sh%D NRaN)AaGゝQ# ;SM7yqcwT8cY g/ /$g%ta4B/`DV63#1UI[XN`{ȣ^j:2A SK&wTvFR$Sl]0R`tTUVSY'U8՗M $IX) /ID{ J#U\yJZ[q.g"^mT0GjSՐ`+R~Y^z."ST6P=CUj֨fCR q΁Ph+NS3(YO'M4iԬ-+ 8)~yK\T6@8jRV*5ϓA8JЃԃըZmT0`h$(oҢ>}:ꈜ2~:yӧBeʌLUʜh+DD N.b$U4>%ԵꀨP7`ˌ]{[!c*{M)" [敩Y,bk }1%ETh_A].2RQ_/BT8*iń+M*]=F5i~ ]Q:sz6i!{'(q%]1ǂ_)yoFkRvꛩ ?~8|)O~7cfjCq7qyf \$JgoWR< EȊĨ+NpNHN;'VL3|@SOK{9,_ߩQ-(ٛԚe%#$ GrKT d'Y`(BV[)Y2dR@ARF2SK)#HARFpA_NY eYbd8L!g`eM`֥V) HY@_-9 HP8!ZKD>`f^{ !# X0H2 %dG`#hyTF-4(J-[H2J }{-o}ΡWSfPOmOvMt rftXkNP2rx( Qџj6/msK!|3IԎsZ|ooRF(d`I9r V_ O2dN59e^r]@|!")>@&r=[1;Ի(g7tMuQ;$w|&? P B2.&SSlPQES+>\JET[!^bx/,ZZH)ʐ2=&jQS$"+ X 򵌮rVONz"ӔA艼H>F3S~! :8vJ '0p感S6|%(tG>0+{U׍?TFl "I^"(đ&HI 4nLo #8A$r4^e <Ẍ:VGk%PyrPUz؇ d#**62 /4iL0XMcPD]`U} ˽Hn4JdN iPQRN!pP Yd\%Y%% }?fM?WMҋcsF!S&ߨ"*b<V$D!52˓0D9/D2O//p+0V1ԑ ğH"tB?ޒh;U|.OtNq ^a4q֊eE6Yb ]iX;P"yGF=#^OT3-CA5`8\VS[o,s$\שJjQ)8=5Ed Vl}\ f6|}TeۭPwZVV(\/\~ҰOAݣ5x^7bղ7UpkeVoE}z*/H8'~Q#Ks3ANX :,Y@hދ,$  -6/ÉQ́!BƼd+&KȌuvC4Y5%Ui^$A+8!kC'` /6ʊ0TJU>։=A 6UhV ZR mJW p~HVܓuJ ~9 P?ߩ+O)\W~U*Ca'׫NX Ct'µmV$v_@ȤCxо+bftКLLqaRQ-%PTzTm)]k>٪By&Cc+ߥ?\s_]+fɤkM/:C%SX:_;Vؘj" (ﱡg_a2>$FSHT~,w:>iM[m"=ɭkajn5t؆ څ]o?J3#|;Şs_c_v/v-b׬BBi)% Hڼ||}_-:\ͭn+e5g%[C~s;'Z`]2#(E3ዾё\ WS),*8,_ߙam|xj`y(j!rQ_,FAʺro9h4uMŦRwimMceAs`?XAh@\F5+Zw-ɝ>Ҩ"M5VV 0}E7ViMtb!,]e 56~ZƷ#yxXn-2V#'~XF:((gd5%@zܪTGxԈ冗m؆Z53b7{cZYф.%5j.k]lwx)04ԙ뱅z\"9(,OkY]V˕73K@m˾gODOhRao yQZ #qc!0ZH4JJУbA}vUpC~߭}4*L@FխPNNKB}/gem *2mzju08ތުQ70a޶d0֏ɿ?%?1|藂Z11m=mxtX̷XDPgΌ2\6GtRAKypwzru7}K"jP*hjEHm+Db_ =緪ل>vI7y ckcV̠ ~`&VjXhcA7tߔBSg>6~px4bҌFY{?ޠ |&*=˺4A׉ lEɢ\-C"=zn9&+{,Yz/i:ksx;,e 1pf+禆Dپذ?&V8&`<Dbd5ߞl֒s #'%b*Vpuh[12m[E>=g.1(XW-t(JX+k^ n_Z#GQrRWۺGlP|jЫnmCj*(+VK$ѬJ݅ Tqė/QLZV+JԫJygB= M;]*jj&6~;J'̚g7]4TΫRk2lCS)K -鿨g-`vz=Ұ=q=׷[%Ja_,UkMw`(ŷFv-ΆL> J9͇ƍDұ;B/6݈4ud|%<`zo[7R4v3MinEfD|RHKC'f|a9R嗻ODpbU9:8WWgYÜ؎vۖ|x[+[ӊe?='@ԍ7&Bw7N wIq㼈.]8E5t31tQP EM[5tr--L{}BX/u;YشR ZZ.7XI" biL/ (KZDov}5t!?pϯK ]'gfch`ӊzwV%=@6J]5 VͷB>XEvi5ӫQ{twX ftmTF̗6`O95ަ) lVicoF:H45,DBضfjY+[cJ]#fw=jaFn;@Zd݉KqSvZL,HsXI6Y%Ҭ'zNR" >v⟛FcQK3̨ea)[3׵OҲq]*V)(@ 4F m,v.nZcRVMW,hsPz̢k3Ќ:4K])Ag(Aj$3] %n8~^BW ZCn5qE hg69XݒRrM0#E#[u(ts<[}GԱ}A1妙Ѻ>>7μ殙eh] U$nwJf(v&7k:4D"K)%3[pE5} akaJ}CKwӋ A["VQ1yd߮Ҩjz.A\\EUC2i˼ݑ٨ͼ6/40'T`~A/?Rhca+Q WPnoWkYGXd:ʟVFP=⨵w! V'ױ5{mLf =u=(jUSۊM/9~(9c| e>5Q ~|, Kl.ejd47( ?KXꊙoE w…Gy> hchv`>z\^ȮPVC=N\P3 }+aïs&ڝ׫!~=?BK]<~Axf+>aM"+qOgA ]fv±Yh)ood>pDջ={n؂B#T0ު9雈};={iq5v?\5zؿS1E{G^1epXx F{{g*/u|N7V fyc0s {:օ(\Lռ/%j8fC ES!)fO\4|z|#? YD3w?z#5#~Qt>݇eC^!n.jbޥgm6dH?xWo)ܿYxϮEsj?/[}.[vGr,iW7ՋxM3ąEV\#?\}K{_k3^;;Gݛ7^+Qq[0Ǟ`?Y.,gV#LgNg3̥~Q\3>3Τ h!;] RB:TLҜ]wsZv6fnuV*(٭_ٽAϞgOv`~vyqY.* ŜUߒw 3[f Zmne?7l œ1s\E`q NWo˵mpci&1l>eOss_\oV0 wg'ŧypa%:u3fEnx{y>)g*w/zc>_R6]Xg~a1X.J 8 {Zh oNŅ텇Ԃh›*<.j`vq|X wspqbi1|lbigwV[*-TsYxX89|]v16\/TY7N\*&RtT ,/zd5,,ヤr",Enem K|cu%8+|~倛SW. eP_VRמW**+3/&zWoOUe<~*W+3"fmu6ֶZٵ m`xwVF }@>x Tj4Rzp/Won7'[sA #nk=pyZ2zz~Q^8 b<+(q樒enޢL".a8[^8TSpm,HvC *ct8rޭY"M9/"¯k.!gyn{?ys ïW"ݯw+s^+en,W*|+ȼp~,o"•.'e%~ Ey9nNab4Vr[i$G¼y&i{+qB/ܔXnKΡ/mmh?B_j]mG0sǺGby*|=Zܬ(4+lE޵D.}HO[ه_ہJfyLɥ_o掷KGllGS;g+;vJZia7wwIbWEw͒"ﭟDnq/49G-ܿnnE%^ʿj!|\bKx6\2ӫhHlؓHR9dS7ѹj&*G`6~&c ;Z,,,ǮR/޾99~Jy߿/3<|tcu<`A4arŠvvusZ^~?~LG}hʞGɫQF9^:,o?#FFS,I+$C+'e9‘ӫk=}oVŷYnٳS:n\jg2糥DWXa>_;2cjoqٍS~witϬx=2L9}[c6_+{[k^]GmMQ%vpqūɈo-cdрb4>!>Wa!*'e$Wr;psw} 2G͉rVx| ]E7Gml񼷕?m|5ɢa~!>ߊw *\;k!'{[VGhۋ>-|`?Blњĝat,-\,ErVh[X ¶xD6i%?iI0hjs6LX] OIr/`yo(mpy/TL/VO7Ӷ+nZQ휸" :dpXSú(Xk?ߋndpvG/[7 65L)Σ%Y|,^V0`Mϳuek!_}00Bz!M0Lj'_Vw[ر>e޳՝}۶;̼ӬwaPQm )KJ3_>t*ͮeq. S[םU.] %ҧ+ gKݯjm,uAKޛh6ː-E*˫;)0Wz{7Now)IfBt+kaC~iM*pqWX{]]Guf >YyU ]Ut [ϰkB[UBi9UMsQۛX;Rێ 0W8=| X*%? ǡi<=p#=ma?zr>n6wyt??.nmnF*,ngM{yX6A: vy𠾮Muc2#gԷ'8~5S%E׵AvNC%.0[L쩶#ؚq:K?E M/<. \K+. y2 'زRN׽+qBpp66Up S1w^k"n/Ce\ծp|:<=~\5m) D`wѢ\AXGz^ZԱŌscwiiꀊg wx5la +m/Qxv:dsIhMNpjMk[טs)!dhW=qL5~_N?vه6ߓk>y͑-ge&@j4 ċ[@0P0枳zN}ln?mmS~6\8dŎ*[]V> PpnC۸6xcWD|9Иoy=2KH>lF 1 ?ә~r(\)>GWQ Րzrek33by&tuhҞ"eѩ߮iz,d-OzGyUCR7k3t̘Oė y7:9d}H.Y ,8,ɠuqv;r6(]+[&LꣵC  󡫨ޛH]a- L=վ733 0|00IyaBAh @chAl1(RܔsnmOﭪ{rO]%0\f>qG&6mD3Gy+v 73+ly.Ijaw%7GŅǽit Q--. t[FsoWA> $LZMi w4!O3Ov\뛲=>UEǷ`黗 blK ġjer`%t^RPgV/jŀ^YX#ɏg"eM߇F~oŻ͘|֜.F Ձ4̮2ť&q}+gs#ƪŀlgrn6/=ŅX)[l"aMFI(XR%wG`Nފrt*wOW| O N):?A:i%"NxZsۮmX/&io7B `폈׋+ַ*ǕʉHsJ=\>% quZ_)׮)䝕xRHMc,ŮǓwҶ9<vLYrl+MPv87r[Oo5F#;J>=7?]6s[;\;Ņ=tN*RZv ]>f.JTNJ}b&Q2>, hڀmcE Y|q|ad҄kN_y5(N)@NӥwŅˍb,VFyTz_6@/{E]vnu DK6&k3/Y8/0 GiǶ0Fbvv|v#oFF㵙cnWNJoǟLvܜ&`EZr4smBP *) !PߟoGK'鈵hFp&~8#eƃ猪}UI$SVk4tW,ȩVU>8U%wј mY<>ti'{|ne0ddxrs-R]XS`S7@6^)OT{So jo4]\LDEhTn͙:,yKlJO;I0ɕ}f8a23q9! tx S6^xH"nȺTkB9;sK>./Y:.? h.5a`<`'sHRpY4?j6Z5Jr[12o-˝>ގ3,fnoCȧbv4 ttu*ʘ:=kر;uXᲓnP[ɕ#4`:V8(Clji}#S!tҼpC3>)]rZgk*qf*Uns30d_׽2B;x9vݱq,H<*\:-۠N3rEmPGidAE0dGu}NRT,zA-2+';ԅ*Ȱ֠nMMP[<(l#FTmcPw'5ve0BM<n᥍.VG$ r䓰q~4[XCm6!P#$!rG]|9\v#ٶedS쌟>f=8`w^3ճWϻ@#hax6rq^&RNﴴN^ʭ7<.rs#]qb)Lw)FkN[HO;nU&s֤]G+0G']3-D [/q/+Ԣz0~Mtwi.'gW4o *&fS:u=Qw= H:AvFfEyewH8|;mfnf@FJ׳tFiDi4`)Б;T*w'TF*1\)l % U*-v9>;&us;'TT<^f8jvD7 *#PN,88j uO\Aը$'<A*J6bK_xކϝ?x>ѡ?:6)^اӍ<8D>lRƔצNgƷ{?s&?Om]G:~2ۋf;cfQXyB1OrQ@d̓i2Nu8f٤iƶf>\D0zgsFw֡8$Z[Ӊ35qҳ,ccȤݪ >ݪN$99 dֹ۬02‰#$5$.eq,FNzC[ k菥I;W(mR/ؼ Mz}y^3?}..H#"J-Bdd__{*DF+R:^hlv6rӒ9X,%?w$s}bk{F?B)tWuWkO j/H(І%P۷s?,>/z,U򉭏NT477~Lc"41x!t5t>\R/G_V'X(a(A8pdqI,GЎ#0BI[[0Du FRq똆-/g/;6gYDB$,(UZl &A9z\W^k.+8-AUxʣŋE>mZCFpK]Ø>2We>F+Pk[xTL_Juݰn~F5nȌ@GЈܬX=W.ԝ]T,`ǯyI7Et]hmw8Oqѱ2][@ذr3#y@ FU8Zq3 h[Ť51[^w64?Fp2GKQ!}ȦgAppo@)s&+t;~akx}[H+9HCl4ԍ֊J?Z=Q^g Թ0GtvQ^zhОSPk, =wh3rCS.ܕ`{tϤPX:Ўq`Jw3hA(t?тdփSҩ6NUH{wړMGtk`8{8?>×C{5[lWߏ}mSKS``vhcc5kv Ƕ?E{\[޾aW}H^j8QNS9Jt>\>!HC6t>\>3t>\#ut>\>DER{L0I3=G &/g(}=fL' |퓌>QޤwQSM>U@zm/@)w*Q.B >#1NiwvCW>y[ߩO ]~SUg T -/1䋿4D3\T{aprRrE,1 vbf@iw]Ǘ2b%[QrėYtPT[ %2Gk/M8;{@ ]/wӌ B5y9+ o7gkUx}tWOт&A S1|sƥMtz'txw^݄%\VV/p4V~0& ZhEK Z>ivEv1ii;=)wǐ'T"R:qѓ(wƝ=3}^GtWAwB x ݩ gX.T+:R o Y}{`]PkqAtG~4q۴/U.af[m)K7B[MCpiY/Ai }}kLw ?{pO#/T]we1tu2I(zR} #A~ El3Nzn/F_zo Rh?UͦbYHpBa_~ڂz Zo [ D!^:X E%XkkG?AID<- L5fUjec] {u:M)~?{[ .w0.g"MdV[}-ܴ l~98gi;#Xf^AdE/;zgk̼vNJڀ3}Ltfe=O$@f- ScyۙzSf٩aN]0vz  "!>9uAB/;R-߯ [h-U4;#P)SwHzG6uc07a~@l-zb ߍhm9#C=]xZ'\^ԧICFJ:Xtw:KĦcCޙ0Ħ{?/OZ&/@Yp5@I@s{i^N-I>R 4I>rޗmAHdd1om I@d`h#^  ؏v4fS^cǤѿs+4I~ocmK/ŏ(ּ3fbg3<' ^=$vE0v?+"!ݲҼY{NƣnuNZ_kkΟgK󙗉By{N> gK\U^,(%@ 9:h|]kRg˒j띓v\^pxhs1?:s"O՛>gybo[`fzn(mmz>^/aDWStOk7MN >  jh}nVz=a}nXblHs3iGo? (m ] %װiA'5Օ8Xb[SnRg}ΦJĤH%yal`0}n Ddq~q>a:/sb[Ħ>$eQ>ܲ">gVF{b_{/>^ܠ:݂/k?ӓ}iK}]O?NkwBL:A{I:u9c"֑{ :UnRST:Uuɋؐnu0OPVH!))^Bz8;+>GM ?u s!:}GN}gnOL,*m4ots;`N_Zji)@qS6 n&gRD&5Zx&S1\{.FƈIBS,%zp4`|q/ ւ|o/`$!@"G=m~PD_3k3pV}8ֹpv ;mVl߭~[G:B\)f9gq._dI]PD%Fv eegz)ڲ7Ra|F#por]'uP).r4^1Z ?HH|熼b 7Qh_5gq<wIi+.G_v_{dJ͇Mr_D;ܿHܨ,PG0.ەuns~_WQMٝh 4#fistHv~>GǗ8aS5=.̴v8/ 0bN*:ص|ZCf R.tN/oQMN"nyi.Wh'\JǤ@ݪ]}O-VnSԳO6me'*t.} ͤZtPQ{hefl.Zv9inҖcڲ=F|DM9%Z7SKI kGJL{#`AeJ['ݦ$]#{˔Ġ4A9$&훒)h1EiB'B qXa:0R+tHBWs.g6BBwXOO6 SƲ끇U'wimx[hoO@jEx?$1zUiA{vNð><;yࡿ4o'}ic"tB]x68K8K#އtw琈zo0ya<#VR C#Hq=Y]^<îĴ<O;t{?п7f CgjÈk"fg@vXyqLCzO;tFpaǔ_v假Jq+2.% _f\}ԙ`7bHa6'kvi,֥9V6GknZC2tզ.Mu= lfq8q:doeSTǬѕم4{\= |z<{wnLRs^ϯyi~ï1Q=oϷG.~z)+Y~vg=VƪkŅ⻑ͥcc.\ǚ(Hco#%KRMgwvӉay71OƔKybHkVT:oGf^vb&Kꈑ.l? |jԝPVS55wux;6_^t/20fvaU' Dc={=;̔95zw9|FkIXŀ!9+oo1K[KOa$z߳9HmEk'N*jrd>2`3˩]/0s\U>vvEclVƌ΃&Wq[۫%JU^Kcq̊M]17^4/6Fl0-I g 3IRvԄb!mVF\Vh$ɱr&'kFW nH7}Tn2•ynTϘְ:I΍W+0m5MNd 2Q*xxV6A7~~Hj\YQD$˳!_"]g/p6v/6vHh;9O`3T\<%nM B0S;ߥ&soK [1ӧPkcv4ūi&ڋ8md^|YmTNMrqs'ze2<0mmj9DCQ@1??X]sx_K 4u/A͡d킬ax1Q8!7FwyFvtq2w9;sq1A'{_"/W&~v@KLz8O42ƍ?{6e~E#8?޿0L, tj&8IVfKX&`E 4QEh0%rrF0T) Ј>I̤K)*dٙw%?ܙsva9b՚Ff ]ơ ZFj+ iX/Y&]9\?ԕWML{R7Rȍ/ ZqMX!ѹ%p1aR722;Wa.$-Y)-_e#b&M̶e*w81m KS)~|ꈅi.&}4ݓ!V wqbkG'􃡹 ۇtىɍB8b’c&yDH,!h8 6!Bv<dbQڤ_ؼNH%2.GshSnZ$Eup.Vlj+Gڰ-ߛz%p#"a $f\z~J/Ϊbd dxN\*yb쏲Mf`_,lf&n=S뮇xi&Yd>9i/ŌX;0nLk΢F-&Y:N|t )VL2sJ1NZ)|7M9?3  W"^hʋ)^h3SZд~tz\-1oO-mB'2MӰK b @a/i[c]6uƽ*#ʴJLLwV*OYKĺ1*-#rZcf M-9blLZ9M0'e#k.R[`%g/k24{qxjA9YٺE* U\\ʚs0QJI5z.;&rH inDۙtkOW<I6mM'v쎰O.cs5gjgq[Sibu ^ZeXm/Dz=:%W_ܕ r81-36^7&r2uμ!9C͔g)-D2<왙FsdO ,MaH5N=1]->?|A{^쿤5=&MZŏNꒆݪ7r\f2;4i~@M mnL7U bVq2@mЄZTn FS@ d1!?׻Fsysu0Xvl4xzxxer[E,6./C%I<)YP3Nlj~ZF7gŷ,!% D 2avzx. 'maH4-6Rbeya xw^zY \U̎GUnK^KB"EPհ{_Ƈӫd .ãE%3cpbcdu8q^sé9\ٯO>G.vJNJrʹ?RF')WP\TuSϐ"_BҋNG5etx}1TzZQ ؾE18haƸQM^X7`^kyT7^Tf&:4!(x_''A<&C6Wɒ"P\2$&5 heZI< @# w9ux !NZ1S^=L씧K;N :wPtkO0 ܤYKd|QPJy~]\w>kPm&qZu}F5B_: >ϰ qRiOYu:֯.҆qHCq?~{N-;&g^ԍa!Lly+m@^3Ig ˴ݚNi͝4M8qd}kIQB"$1R]c@g)UcnnQNԅpQ8Lf2 }hVY2r=9Hdbh~e '5) @vL^u`ӏL;-P!b] xbb{J5kr *t5g2܌infak6h,'6gwj%pb8҆CnaydJkZhoFuJoak`hNri9Ījͺ C= ɭg>vyj{\ ZkÆqJZV+ژ;4yZLf~nV>n#B;yDD׍yc`j=%(fK{<yI_ zG3N"_-1Yh4~Ť] FR/DIe,?CaRheJirm 27.X?^4|Rh(Е,gLeA,+ .QKtz}!eI/5M)9IkvAH a[ U4^jZN*G֚`cDMgLjRڙr;Sgky){4nۻ7#y+ZaBΗBxZ&xĵ_]MnP*aJ4T$4N{O9Jo+E}4LZK@Wthnpz ho M ,[+=\V=yDW7/57῜(*r<&FCer͗C,_YY(ekP q'vcf(ybҲbKxg~f2o(ܑ@s@ (&*7b 7J~h#s)6͉* QrCWqd0Z/ϱ/ '>p#Oz~ '~곟O ~3؇GO}?I ۇ'R3G>񙨴T{/}Wt}~O,(n?}t}w,O?~W]?ٟć`>_/w33ӆO¿?G?ƿ룟G?#_ CG|/Wp'p>o~P?3|՟|4~_wÜ?_܉,͗᷾O~׾'G_08?+!L& `B0!L& `B0!L& `B0!+0#nvi`޳CN}7ޗ{tHG>?Yӽ~*v˿p,pwx?//|`窿?8?o/gёz(ON?-clΟ|w?Ŧ|𱿫>wptGД_|ϾM_~W.?{_|KG?o篾Wv;}~_?z;y:l?f_џG]E"[f}G{_Oi󟢃>|Wٯo/iaU3|__/V2t 1Ó/_:*L ޲K_΂:s? G$?#L\f]ż[fhB6~?~茷ÏO~S~ӟ*޲§?1}m@ :< XXGW#or b j6뭗F3f55=E0Ckb_Q4Dz+Q*%$ lxnOCfY*y!UyeVTOˢ$) }9E—I /i-AW `F7dTAF*cTF(uV8w}rYi< <g&5)A)ZwaVT j4ƤU|{5 iIy[soyhwIJ OW/xUH}/DeRZq̢VFbaTq05h=³ieD,ENWDfS YVXЯ(ryҌFU؃|Zd(ˆf+dEf*pBXojQ2l?Y [M"v`U9p o!*oU2F`GDP̲K< j>ÀdJD#0$Qpp*v2L ćɊcXw,# !,)&f(e^08v,Q%iN% ݓ`P15`Xdx(2̸$rVS-eX O\R5l'Ud @bTF2ˀ$35p^E'D)3) x,"B{`3K 2J[h#e"K8p*oVqrQx f,/+w$EIddEE5vI`-r((kA0cQVW8d}0&򸰲((JBb/< %FCBp]آSX1T~7_[CۏwqB(a@x1Ǘ83eϫjȗ%J g恎Ȍ,pШ Iy5_7/7旆X7zi<\ i7.kP?r(6b^7&7UB-|eHUv l|8 b <+, s8Ӫˀt@| 82`5_۔%0Y*gKfdnzm4kaDy \2]IZGImwO;PAC H!"꡼%fN6d@̲|MU74`5%U m dQer*Xd贠hDBuP x*eFīD1@$^< :bD l$EH8Hj(F3*72>W(K(L6PUIUҌ'e ֞c iT UPb2 1#3JSfEF{y{ V8C@e $+2 n8T`CAHPa)}A 9\5QzCTaqV*s+ *bU2< (ļ/l _H #BePiEӯH')1*fŭo@X_Zf b9l dN'm#ȜBHK:hTAu"%v%Q_e؉Wi$DDDIjDbɊ(XyI0A Xˢ+ |)+E.h~<-iki 6wVuw,0{}yL7i#n.ƚy,RK56( `Df~>\56.&~xSo@wHphWWqV /d/d rn+_Yxh.5t_\k\b'oط10$mD'_-P}p"8ԟEd,IUɬ&p Kz "3Di6Kh &x 24D+Y@1(,cAͣj@ V*&( (C_`s-C~vPݽ)N $JT\VֺR =<+IT%£ƒ؂~W8-nC $o5Zz/Qot ~s }0;n㉜VTv@`oJtqdYvѬKce81U'" 2um]a1;Ʀ ^)̥~Mc,2| )jT57 :"#ښbQ~Qҝ-Ewx(J;@-=6/K +/*DN7Dk"zۇѲ"vQɩ6"C6^6Xͨ`8E%[-=>^[we[-` X#]UǨ$8YXͨ ʣ@_?6Z왈Uje:IS J2U!]ĪDX*4Ȳ%Ypz!#K$Kl5'YqdVaSl8( [KMTF`U/ P/ =Kwh-N`RjE(e$e٪@F>:I$ Ɍ01^w_,31b3,$1 rzpA:dh"y:2-RNr$OAȊ2 1]U pD3Өjp@7贷'X*2TTKJɲ! z%i؂2"?vt$f1n7 ^5Q`D4QI@Ҍb.'B֣yQM0hwDleQ45t)a&(DlB46~FU|V<ϣF@E# 8 i(X ? 7d8x=H(;6DxRQOl$(N^ #J >)*8^9^f(ij 1 e"/"J{ *C_Bi=I¤*?IS5%Io* Uq%`eD,Nj((<)DQy0 [\բ`B)ƭjQtb_v쨁fGX# #UI HbJDp HRQ"_.yQ2]zׅP^yb7C՛ks^w<0%_/7*@I0镘ɬH1D7B e[mF-XOjI .J$tȪG 'Ĝ!Y@/a7)ZGOL"+OAު(7悠|WˢUPʄ\TJ29(2,2W;c,3*_$gzMLz ^ f4M**jZbCDҳ!o238ͧ\t:K_s(rY7c(aՈLzEp#RZBj)FBG}0*>$D@-aQt12 $ДA'UB[b 0@$!-+i`U 7ʚ_,;zErGH 'I 6t/Q6frUUΦM)'UL-%V:IH2`RHN`"DIATV&~yFXl"đL9!/KBa  yt˘l.0`+J+)tY0$+FLY6.̠:2;`BrU@kHf))Iւ!I!42"Z|@0m<<4G4$-Jd1*1| B&B3؄@_hq[eUâ2+U%+KWLBu+XPj6}} k]7묉t&"m2+a0+A 5|Z&()0Z+ʊ7aԐ*I+ffLl#jފC/ 2@]1C1S&z"2(+^cD"!Hu,2tG A*yCH4B V̆&|D# 2/fѾ6@=,9-\e 2Ћ iҋFR'@kDW0S I] $" lOy"̊B| R!֨1*I^9])H  (@ } u(a#"*QET$@2^VW%ⳖC,h}$-GY,;241=$aQE"hS]{9 sEuY76jUG0 z;ٖF~:WÖ2:@I[f"@k4P T󦨚~YL6 2 w,P9F-cQW9XqN%ǎB VlcFM6.Bu/YEʒeEIT,(/ BU9I=)˥8lbP6`E(/y~$.Z0#0hP5D|>  ,0$f7_j4S)[_5;UPѣc1Ժ~"K ccr ݇ endstream endobj 149 0 obj [/ICCBased 174 0 R] endobj 5 0 obj <> endobj 6 0 obj <> endobj 110 0 obj [/View/Design] endobj 111 0 obj <>>> endobj 108 0 obj [/View/Design] endobj 109 0 obj <>>> endobj 121 0 obj [120 0 R] endobj 231 0 obj <> endobj xref 0 232 0000000004 65535 f 0000000016 00000 n 0000000174 00000 n 0000042784 00000 n 0000000008 00000 f 0000356296 00000 n 0000356368 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000356558 00000 n 0000356590 00000 n 0000356440 00000 n 0000356472 00000 n 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000000000 00000 f 0000068464 00000 n 0000356676 00000 n 0000042837 00000 n 0000043488 00000 n 0000044387 00000 n 0000069392 00000 n 0000055904 00000 n 0000068656 00000 n 0000060385 00000 n 0000068771 00000 n 0000068896 00000 n 0000069020 00000 n 0000069144 00000 n 0000069268 00000 n 0000067167 00000 n 0000067313 00000 n 0000045286 00000 n 0000045612 00000 n 0000046165 00000 n 0000047533 00000 n 0000048898 00000 n 0000049830 00000 n 0000050885 00000 n 0000051441 00000 n 0000051999 00000 n 0000053292 00000 n 0000054546 00000 n 0000055119 00000 n 0000044451 00000 n 0000356259 00000 n 0000044721 00000 n 0000044771 00000 n 0000063567 00000 n 0000063890 00000 n 0000065250 00000 n 0000063631 00000 n 0000062156 00000 n 0000062590 00000 n 0000062220 00000 n 0000062092 00000 n 0000062028 00000 n 0000061964 00000 n 0000061900 00000 n 0000061836 00000 n 0000060592 00000 n 0000061228 00000 n 0000061292 00000 n 0000055758 00000 n 0000061164 00000 n 0000061100 00000 n 0000060528 00000 n 0000055694 00000 n 0000059153 00000 n 0000055941 00000 n 0000056503 00000 n 0000056112 00000 n 0000056203 00000 n 0000056298 00000 n 0000056393 00000 n 0000059270 00000 n 0000059325 00000 n 0000059622 00000 n 0000059697 00000 n 0000060499 00000 n 0000059843 00000 n 0000059872 00000 n 0000060043 00000 n 0000060128 00000 n 0000060217 00000 n 0000060301 00000 n 0000060738 00000 n 0000060854 00000 n 0000060975 00000 n 0000061409 00000 n 0000061464 00000 n 0000061761 00000 n 0000062374 00000 n 0000062495 00000 n 0000062707 00000 n 0000062762 00000 n 0000063058 00000 n 0000063133 00000 n 0000063287 00000 n 0000063408 00000 n 0000063483 00000 n 0000063936 00000 n 0000065160 00000 n 0000065197 00000 n 0000065366 00000 n 0000065432 00000 n 0000065463 00000 n 0000065755 00000 n 0000067054 00000 n 0000065830 00000 n 0000068114 00000 n 0000067459 00000 n 0000067630 00000 n 0000067751 00000 n 0000067872 00000 n 0000067993 00000 n 0000068235 00000 n 0000068351 00000 n 0000068538 00000 n 0000068570 00000 n 0000069468 00000 n 0000069715 00000 n 0000070958 00000 n 0000098299 00000 n 0000163889 00000 n 0000229479 00000 n 0000295069 00000 n 0000356703 00000 n trailer <<7592BE616E403549899ECDF72B80D9A7>]>> startxref 356872 %%EOF doublecmd-0.7.1/pixmaps/mainicon/dc_96.svg0000644000175000001440000003764211765566230017447 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/dc_48.svg0000644000175000001440000003277211765566230017443 0ustar alexxusers doublecmd-0.7.1/pixmaps/mainicon/dc_128.svg0000644000175000001440000003403111765566230017510 0ustar alexxusers doublecmd-0.7.1/pixmaps/folder_src.ico0000644000175000001440000001712611226363660017030 0ustar alexxusers  6 h( @ feeed d d c d b b b b a a ` ` _ _ _ ^ ^ ] ^ ] ] \ \ [ [s~|yvtqnlifda^[ \s}|zxwusrpnmkjhg^ \s}|zxvusrpnmkih_ \s~|{yxvusqonmjia \s~|zywutrpomljc \s}{yxwutrpnlke \s~|{yxvusqomlh \s~|{ywutrqomi \s}|zxvutrpnk \s}{zxvtsrpm \s}|zyxvtrqn \s}|zywvtrq \s}|zxwutr \s|{yxvtu \s~|zywuv \s~{zxwx \s~}{ywz \s}}{y| \s}|z~ \s~}{ \s \s}zxvspppppppppppppps~|ssssssssssssss(, [Cvggfeed c c b a a ` _ ^ ^ ] ] \ [Rk{wsokgc [Sl~|zwusqnlih \Sm~{ywuronki \Rn~{xvtrolj ]Ro|zxutqnl ^Rp~|zwtrpm _Rr~{yvsrp _Rr|zxvsq _Qt|zwvs `Qu{ywt aQv~zxv bQw}zw bPx~|y cPy~{ cPzrqpnnlkji5KyjzuklllllllmRzuFssszzzzzzs  ?(  \ \ ] ^ ^ ^ ` ` b b cd degjlnnoqstuwxyzW\]`deijmqrvwz~y{||~} A420.,*(%# Jia[SNKEB<75TmgbXRMID?;6\tlc_WQLGB=9!owqh`ZUNIG?:"yztld^XPLIC>$}vqia]VOLG@&|wnf`YRMKF'yeTH831/-+)~~{xusr uupkjdoublecmd-0.7.1/pixmaps/cursors/0000755000175000001440000000000012675717727015723 5ustar alexxusersdoublecmd-0.7.1/pixmaps/cursors/ArrowCopy.cur0000644000175000001440000000427612512434150020344 0ustar alexxusers ( @~> ????doublecmd-0.7.1/pixmaps/cursors/ArrowLink.cur0000644000175000001440000000427612512434150020327 0ustar alexxusers ( @]~> ??doublecmd-0.7.1/pixmaps/cursors/ArrowMove.cur0000644000175000001440000000427612512434150020340 0ustar alexxusers ( @r~> ???doublecmd-0.7.1/pixmaps/folder-link_src.ico0000644000175000001440000001752611226363660017767 0ustar alexxusers!  6 h(!@ fddcbba`a_ __ _ ^ _ ^ _ ^ _ _ ^ ^ ] ^ ] ] \ \ [rTFQ}|xvxwutqnlifda^[ \rwF1Phrxwuutuutrrpnmkjhg^ \raƿN"}nb|zywwuvwvuusrpnmkih_ \rTN-؆\~}{yyxxxxwvusqonmjia \rN/\Zö~|||{yywutrpomljc \s6 5N~|{yxwutrpnlke \sd83NNw~|{yxvusqomlh \sN6HNNNw~|{ywutrqomi \sNBWPkN4Nw}|zxvutrpnk \sN>+uXzN?4N|}{zxvtsrpm \sN="}0+ӑNNNN:n4N|}|zyxvtrqn \sN4zy57>>>;jn4N{}|zywvtrq \s1/Ϗ@vuuuutxkhi4Nz}|zxwutr \sN?5wwwuwvohii4N|{yxvtu \ssN?ܚ<+Հ"z#|$}wyhi4N~|zywuv \sqN5=֕4440݅yr4N~{zxwx \sZɱNNNN4|4N~}{ywz \sN44N}}{y| \sN4N}|z~ \sNN~}{ \sN \s}zxvspppppppppppppps~|ssssssssssssss(, c2q9J& !Cvfeccaqxvqpvb\ \ ] ] ] ^ ] ] \ [kP!t\~yyxvsokgc [ls^)Kzxvussrqnlih \m0(֏ S{yxvuronki \nl9ݜ Ro8~}{xvtrolj ]o]ROu\>|zxutqnl ^p^9mD|%s0ڄ0~|zwtrpm _r_(݁/ z V V*yl)|H~{yvsrp _re4t(ڀ,܄,݃(jm#u6|zxvsq _t[ȳ02tvtvogf2߇5|zwvs `u90Ɇ8ד*ف)܂&~zk({&w{ywt avf-]]'xz)|@~zxv bwo4(y}zw bxb3~|y cy?~{ czrqpnnlkjiKyzuklllllllmzuFzzzzzzs  ?(  \ \ ] ^ ^ ^ ` ` b b cd degjlnnoqstuwxyz$kn"qssW\4~]`!deS"iljKm;śLqrQèxԋv?̛Tƫlw%؇[ÿz\ƺZɳ~Fَa˺֯el0`%߷g_PQyO{||~} fXUQKGB<3.(%!nsMOurojga\Y#v5'zwIqmid`[&x/+Ay2plgb]):Z" Nmld_,^9LF7-6$mhc0J1TV=C>ple4}DR@tqok8{v*;WSPHE? ~|doublecmd-0.7.1/pixmaps/folder-link-broken_src.ico0000644000175000001440000001652611361045050021232 0ustar alexxusers  6  h( @ fddcbba`a_ __ b a a ` _ ^ _ _ ^ ^ ] ^ ] ] \ \ [rT}FlQ{~|wvtqnlifda^[ \rwFv1YPhrxw}|zxwusrpnmkjhg^ \ra"I@b|zyw}|zxvusrpnmkih_ \rT-^+~}{y~|{ywvusqonmjia \r/fZ~~|zywutrpomljc \s6a 05h}{yxwutrpnlke \s68@3gw~|{yxvusqomlh \s6fHow~|{ywutrqomi \sBfWmk4cw}|zxvutrpnk \s>f+jV'z?f4c|!!{z!!tsrpm \s=f"[0k+T:eK4c|!!|z!!vtrqn \s4eZW5e7e>f>f>f;fCK4c{!!}|!!wvtrq \s1X/T@fTQQQQU\E@B4cz!!!!zxwutr \s?f5eTTUQTYL@BB4c|{yxvtu \ss?] #include -#include -#include #include "qobject_hook_c.cpp" @@ -182,32 +180,6 @@ #include "qstylefactory_c.cpp" #include "qgraphicsscene_c.cpp" #include "qgraphicsview_c.cpp" -#include "qsslcipher_c.cpp" -#include "qsslkey_c.cpp" -#include "qsslerror_c.cpp" -#include "qabstractsocket_c.cpp" -#include "qudpsocket_c.cpp" -#include "qtcpsocket_c.cpp" -#include "qtcpserver_c.cpp" -#include "qsslconfiguration_c.cpp" -#include "qsslsocket_c.cpp" -#include "qnetworkaccessmanager_c.cpp" -#include "qnetworkrequest_c.cpp" -#include "qnetworkreply_c.cpp" -#include "qnetworkcookie_c.cpp" -#include "qlclnetworkcookie_c.cpp" -#include "qnetworkproxy_c.cpp" -#include "qauthenticator_c.cpp" -#include "qwebframe_c.cpp" -#include "qwebsecurityorigin_c.cpp" -#include "qwebdatabase_c.cpp" -#include "qwebhistory_c.cpp" -#include "qwebhistoryinterface_c.cpp" -#include "qwebpage_c.cpp" -#include "qlclwebpage_c.cpp" -#include "qwebsettings_c.cpp" -#include "qwebview_c.cpp" -#include "qlclwebview_c.cpp" #include "qcoreapplication_hook_c.cpp" #include "qtimer_hook_c.cpp" #include "qabstractitemmodel_hook_c.cpp" @@ -282,17 +254,3 @@ #include "qprintpreviewdialog_hook_c.cpp" #include "qsystemtrayicon_hook_c.cpp" #include "qgraphicsscene_hook_c.cpp" -#include "qabstractsocket_hook_c.cpp" -#include "qudpsocket_hook_c.cpp" -#include "qtcpsocket_hook_c.cpp" -#include "qtcpserver_hook_c.cpp" -#include "qnetworkaccessmanager_hook_c.cpp" -#include "qnetworkreply_hook_c.cpp" -#include "qwebframe_hook_c.cpp" -#include "qwebsecurityorigin_hook_c.cpp" -#include "qwebdatabase_hook_c.cpp" -#include "qwebhistory_hook_c.cpp" -#include "qwebhistoryinterface_hook_c.cpp" -#include "qwebpage_hook_c.cpp" -#include "qwebsettings_hook_c.cpp" -#include "qwebview_hook_c.cpp" doublecmd-0.7.1/install/darwin/qt4/lcl.patch0000644000175000001440000000641312632341440017755 0ustar alexxusersIndex: interfaces/qt/qt45.pas =================================================================== --- interfaces/qt/qt45.pas (revision 47328) +++ interfaces/qt/qt45.pas (working copy) @@ -12411,7 +12411,7 @@ procedure QGraphicsView_invalidateScene(handle: QGraphicsViewH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsView_invalidateScene'; procedure QGraphicsView_updateSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_updateSceneRect'; - +{ type QSslKeyType = ( // QSsl::KeyType (1) QSslPrivateKey, QSslPublicKey ); @@ -13284,7 +13284,7 @@ function QLCLWebView_create(parent: QWidgetH = nil): QLCLWebViewH; cdecl; external Qt4PasLib name 'QLCLWebView_create'; procedure QLCLWebView_destroy(handle: QLCLWebViewH); cdecl; external Qt4PasLib name 'QLCLWebView_destroy'; procedure QLCLWebView_override_createWindow(handle: QLCLWebViewH; hook: QLCLWebView_createWindow_Override); cdecl; external Qt4PasLib name 'QLCLWebView_override_createWindow'; - +} function QCoreApplication_hook_create(handle: QObjectH): QCoreApplication_hookH; cdecl; external Qt4PasLib name 'QCoreApplication_hook_create'; procedure QCoreApplication_hook_destroy(handle: QCoreApplication_hookH); cdecl; external Qt4PasLib name 'QCoreApplication_hook_destroy'; procedure QCoreApplication_hook_hook_aboutToQuit(handle: QCoreApplication_hookH; hook: QCoreApplication_aboutToQuit_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_aboutToQuit'; @@ -13797,7 +13797,7 @@ procedure QGraphicsScene_hook_destroy(handle: QGraphicsScene_hookH); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_destroy'; procedure QGraphicsScene_hook_hook_sceneRectChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_sceneRectChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_sceneRectChanged'; procedure QGraphicsScene_hook_hook_selectionChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_selectionChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_selectionChanged'; - +{ function QAbstractSocket_hook_create(handle: QObjectH): QAbstractSocket_hookH; cdecl; external Qt4PasLib name 'QAbstractSocket_hook_create'; procedure QAbstractSocket_hook_destroy(handle: QAbstractSocket_hookH); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_destroy'; procedure QAbstractSocket_hook_hook_hostFound(handle: QAbstractSocket_hookH; hook: QAbstractSocket_hostFound_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_hostFound'; @@ -13898,9 +13898,9 @@ procedure QWebView_hook_hook_selectionChanged(handle: QWebView_hookH; hook: QWebView_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_selectionChanged'; procedure QWebView_hook_hook_iconChanged(handle: QWebView_hookH; hook: QWebView_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_iconChanged'; procedure QWebView_hook_hook_urlChanged(handle: QWebView_hookH; hook: QWebView_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_urlChanged'; +} - //======================================================= // Dynamic Qt Version //======================================================= doublecmd-0.7.1/install/darwin/make-unrar.sh0000755000175000001440000000135012217301130020035 0ustar alexxusers#!/bin/sh # Show help if [ -z $1 ]; then echo echo "Script for build unrar library" echo echo "Syntax:" echo echo "make-unrar.sh " echo exit 0 fi # Save destination directory DEST_DIR=$(pwd)/lib # Set minimal Mac OS X target version export MACOSX_DEPLOYMENT_TARGET=10.5 # Go to unrar source directory cd $1 # Build 32 bit library rm -f $DEST_DIR/i386/libunrar.dylib make clean lib CXXFLAGS+="-fPIC -DSILENT -m32" LDFLAGS+="-dylib -arch i386" STRIP=true mv libunrar.so $DEST_DIR/i386/libunrar.dylib # Build 64 bit library rm -f $DEST_DIR/x86_64/libunrar.dylib make clean lib CXXFLAGS+="-fPIC -DSILENT -m64" LDFLAGS+="-dylib -arch x86_64" STRIP=true mv libunrar.so $DEST_DIR/x86_64/libunrar.dylib doublecmd-0.7.1/install/darwin/doublecmd.xml0000644000175000001440000000225012562442777020146 0ustar alexxusers False False True Pascal sources *.pas;*.pp 32768 Pascal binaries *.ppu;*.o;*.dcu 16711680 Specified Executables * 55758 -rwxrwxr*x Executables * 32768 -*x* 32 True doublecmd-0.7.1/install/windows/0000755000175000001440000000000012675717724015677 5ustar alexxusersdoublecmd-0.7.1/install/windows/doublecmd.iss0000644000175000001440000001046312675713165020354 0ustar alexxusers; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] AppName=Double Commander AppVerName=Double Commander 0.7.1 beta AppPublisherURL=http://doublecmd.sourceforge.net AppSupportURL=http://doublecmd.sourceforge.net AppUpdatesURL=http://doublecmd.sourceforge.net DefaultDirName={pf}\Double Commander DefaultGroupName=Double Commander AllowNoIcons=yes LicenseFile=doublecmd\doc\COPYING.txt OutputDir=release Compression=lzma SolidCompression=yes ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ; On all other architectures it will install in "32-bit mode". ArchitecturesInstallIn64BitMode=x64 [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "greek"; MessagesFile: "compiler:Languages\Greek.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "nepali"; MessagesFile: "compiler:Languages\Nepali.islu" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "serbiancyrillic"; MessagesFile: "compiler:Languages\SerbianCyrillic.isl" Name: "serbianlatin"; MessagesFile: "compiler:Languages\SerbianLatin.isl" Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "doublecmd\doublecmd.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\doublecmd.zdli"; DestDir: "{app}"; Flags: ignoreversion Source: "doublecmd\doublecmd.xml"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\pixmaps.txt"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\multiarc.ini"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "doublecmd\doc\*"; DestDir: "{app}\doc"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\language\*"; DestDir: "{app}\language"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\pixmaps\*"; DestDir: "{app}\pixmaps"; Flags: ignoreversion recursesubdirs createallsubdirs Source: "doublecmd\plugins\*"; DestDir: "{app}\plugins"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files Source: "doublecmd\*.dll"; DestDir: "{app}"; Flags: skipifsourcedoesntexist [Icons] Name: "{group}\Double Commander"; Filename: "{app}\doublecmd.exe" Name: "{group}\{cm:ProgramOnTheWeb,Double Commander}"; Filename: "http://doublecmd.sourceforge.net" Name: "{group}\{cm:UninstallProgram,Double Commander}"; Filename: "{uninstallexe}" Name: "{commondesktop}\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: desktopicon Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Double Commander"; Filename: "{app}\doublecmd.exe"; Tasks: quicklaunchicon [Run] Filename: "{app}\doublecmd.exe"; Description: "{cm:LaunchProgram,Double Commander}"; Flags: nowait postinstall skipifsilent doublecmd-0.7.1/install/windows/release/0000755000175000001440000000000012675717724017317 5ustar alexxusersdoublecmd-0.7.1/install/windows/lib/0000755000175000001440000000000012675717724016445 5ustar alexxusersdoublecmd-0.7.1/install/windows/lib/i386/0000755000175000001440000000000012675717724017136 5ustar alexxusersdoublecmd-0.7.1/install/windows/lib/x86_64/0000755000175000001440000000000012675717724017403 5ustar alexxusersdoublecmd-0.7.1/install/windows/lib/readme.txt0000644000175000001440000000021312014201074020404 0ustar alexxusersBefore create packages (before run create_packages.bat) copy in this directory third-party libraries: - unrar.dll - needed for unrar plugindoublecmd-0.7.1/install/windows/install-help.bat0000644000175000001440000000055611610361336020747 0ustar alexxusersrem This script run from create_packages.bat rem If you run it direct, set up %BUILD_PACK_DIR% first set DC_HELP_INSTALL_DIR=%BUILD_PACK_DIR%\doublecmd\doc rem Clean help directory rm -rf %DC_HELP_INSTALL_DIR%\ rem Copy Russian help files xcopy /E doc\ru %DC_HELP_INSTALL_DIR%\ru\ rem Copy Ukrainian help files xcopy /E doc\uk %DC_HELP_INSTALL_DIR%\uk\doublecmd-0.7.1/install/windows/convert-zip-msi.bat0000644000175000001440000000335412562443722021427 0ustar alexxusers@echo off rem This script converts portable *.zip package to *.msi package rem Check command arguments if "%1" == "" ( echo. echo Syntax: echo. echo %~nx0 ^ goto :eof ) rem Path to Windows Installer XML (WiX) toolset set PATH=%PATH%;"C:\Program Files (x86)\WiX Toolset v3.9\bin" rem The new package will be created from here set BUILD_PACK_DIR=%TEMP%\doublecmd-%DATE: =% rem The new package will be saved here set PACK_DIR=%~dp0/release rem Determine package file name for /f %%i in ("%1") do set PACKAGE=%%~ni rem Get package version and architecture for /f "tokens=1,2,3,4,5 delims=-." %%a in ("%PACKAGE%") do ( set DC_VER=%%b.%%c.%%d set CPU_TARGET=%%e ) rem Prepare needed variables if "%CPU_TARGET%" == "i386" ( set CPU_TARGET=x86 set PF=ProgramFilesFolder ) else if "%CPU_TARGET%" == "x86_64" ( set CPU_TARGET=x64 set PF=ProgramFiles64Folder ) rem Prepare package build dir mkdir %BUILD_PACK_DIR% rem Extract archive unzip %1 -d %BUILD_PACK_DIR% rem Copy needed files copy license.rtf %BUILD_PACK_DIR%\ copy doublecmd.wxs %BUILD_PACK_DIR%\ copy ..\..\src\doublecmd.ico %BUILD_PACK_DIR%\ pushd %BUILD_PACK_DIR% del /Q doublecmd\doublecmd.xml move doublecmd "Double Commander" heat dir "Double Commander" -ag -cg HeatGroup -dr %PF% -var var.SourcePath -o include.wxs candle -arch %CPU_TARGET% -dProductVersion=%DC_VER% -dSourcePath="Double Commander" -dProgramFiles=%PF% doublecmd.wxs include.wxs light -ext WixUIExtension -cultures:en-us include.wixobj doublecmd.wixobj -o %PACKAGE%.msi rem Move created package move %PACKAGE%.msi %PACK_DIR%/ rem Clean temp directories popd rmdir /S /Q %BUILD_PACK_DIR% doublecmd-0.7.1/install/windows/doublecmd.wxs0000644000175000001440000000516712564066701020376 0ustar alexxusers NOT NEWERVERSIONDETECTED doublecmd-0.7.1/install/windows/license.rtf0000644000175000001440000004675012562436721020040 0ustar alexxusers{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fnil\fcharset0 Courier New;}} {\*\generator Riched20 10.0.10240}\viewkind4\uc1 \pard\f0\fs22\lang1033 GNU GENERAL PUBLIC LICENSE\par Version 2, June 1991\par \par Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par Everyone is permitted to copy and distribute verbatim copies\par of this license document, but changing it is not allowed.\par \par Preamble\par \par The licenses for most software are designed to take away your\par freedom to share and change it. By contrast, the GNU General Public\par License is intended to guarantee your freedom to share and change free\par software--to make sure the software is free for all its users. This\par General Public License applies to most of the Free Software\par Foundation's software and to any other program whose authors commit to\par using it. (Some other Free Software Foundation software is covered by\par the GNU Lesser General Public License instead.) You can apply it to\par your programs, too.\par \par When we speak of free software, we are referring to freedom, not\par price. Our General Public Licenses are designed to make sure that you\par have the freedom to distribute copies of free software (and charge for\par this service if you wish), that you receive source code or can get it\par if you want it, that you can change the software or use pieces of it\par in new free programs; and that you know you can do these things.\par \par To protect your rights, we need to make restrictions that forbid\par anyone to deny you these rights or to ask you to surrender the rights.\par These restrictions translate to certain responsibilities for you if you\par distribute copies of the software, or if you modify it.\par \par For example, if you distribute copies of such a program, whether\par gratis or for a fee, you must give the recipients all the rights that\par you have. You must make sure that they, too, receive or can get the\par source code. And you must show them these terms so they know their\par rights.\par \par We protect your rights with two steps: (1) copyright the software, and\par (2) offer you this license which gives you legal permission to copy,\par distribute and/or modify the software.\par \par Also, for each author's protection and ours, we want to make certain\par that everyone understands that there is no warranty for this free\par software. If the software is modified by someone else and passed on, we\par want its recipients to know that what they have is not the original, so\par that any problems introduced by others will not reflect on the original\par authors' reputations.\par \par Finally, any free program is threatened constantly by software\par patents. We wish to avoid the danger that redistributors of a free\par program will individually obtain patent licenses, in effect making the\par program proprietary. To prevent this, we have made it clear that any\par patent must be licensed for everyone's free use or not licensed at all.\par \par The precise terms and conditions for copying, distribution and\par modification follow.\par \par GNU GENERAL PUBLIC LICENSE\par TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par \par 0. This License applies to any program or other work which contains\par a notice placed by the copyright holder saying it may be distributed\par under the terms of this General Public License. The "Program", below,\par refers to any such program or work, and a "work based on the Program"\par means either the Program or any derivative work under copyright law:\par that is to say, a work containing the Program or a portion of it,\par either verbatim or with modifications and/or translated into another\par language. (Hereinafter, translation is included without limitation in\par the term "modification".) Each licensee is addressed as "you".\par \par Activities other than copying, distribution and modification are not\par covered by this License; they are outside its scope. The act of\par running the Program is not restricted, and the output from the Program\par is covered only if its contents constitute a work based on the\par Program (independent of having been made by running the Program).\par Whether that is true depends on what the Program does.\par \par 1. You may copy and distribute verbatim copies of the Program's\par source code as you receive it, in any medium, provided that you\par conspicuously and appropriately publish on each copy an appropriate\par copyright notice and disclaimer of warranty; keep intact all the\par notices that refer to this License and to the absence of any warranty;\par and give any other recipients of the Program a copy of this License\par along with the Program.\par \par You may charge a fee for the physical act of transferring a copy, and\par you may at your option offer warranty protection in exchange for a fee.\par \par 2. You may modify your copy or copies of the Program or any portion\par of it, thus forming a work based on the Program, and copy and\par distribute such modifications or work under the terms of Section 1\par above, provided that you also meet all of these conditions:\par \par a) You must cause the modified files to carry prominent notices\par stating that you changed the files and the date of any change.\par \par b) You must cause any work that you distribute or publish, that in\par whole or in part contains or is derived from the Program or any\par part thereof, to be licensed as a whole at no charge to all third\par parties under the terms of this License.\par \par c) If the modified program normally reads commands interactively\par when run, you must cause it, when started running for such\par interactive use in the most ordinary way, to print or display an\par announcement including an appropriate copyright notice and a\par notice that there is no warranty (or else, saying that you provide\par a warranty) and that users may redistribute the program under\par these conditions, and telling the user how to view a copy of this\par License. (Exception: if the Program itself is interactive but\par does not normally print such an announcement, your work based on\par the Program is not required to print an announcement.)\par \par These requirements apply to the modified work as a whole. If\par identifiable sections of that work are not derived from the Program,\par and can be reasonably considered independent and separate works in\par themselves, then this License, and its terms, do not apply to those\par sections when you distribute them as separate works. But when you\par distribute the same sections as part of a whole which is a work based\par on the Program, the distribution of the whole must be on the terms of\par this License, whose permissions for other licensees extend to the\par entire whole, and thus to each and every part regardless of who wrote it.\par \par Thus, it is not the intent of this section to claim rights or contest\par your rights to work written entirely by you; rather, the intent is to\par exercise the right to control the distribution of derivative or\par collective works based on the Program.\par \par In addition, mere aggregation of another work not based on the Program\par with the Program (or with a work based on the Program) on a volume of\par a storage or distribution medium does not bring the other work under\par the scope of this License.\par \par 3. You may copy and distribute the Program (or a work based on it,\par under Section 2) in object code or executable form under the terms of\par Sections 1 and 2 above provided that you also do one of the following:\par \par a) Accompany it with the complete corresponding machine-readable\par source code, which must be distributed under the terms of Sections\par 1 and 2 above on a medium customarily used for software interchange; or,\par \par b) Accompany it with a written offer, valid for at least three\par years, to give any third party, for a charge no more than your\par cost of physically performing source distribution, a complete\par machine-readable copy of the corresponding source code, to be\par distributed under the terms of Sections 1 and 2 above on a medium\par customarily used for software interchange; or,\par \par c) Accompany it with the information you received as to the offer\par to distribute corresponding source code. (This alternative is\par allowed only for noncommercial distribution and only if you\par received the program in object code or executable form with such\par an offer, in accord with Subsection b above.)\par \par The source code for a work means the preferred form of the work for\par making modifications to it. For an executable work, complete source\par code means all the source code for all modules it contains, plus any\par associated interface definition files, plus the scripts used to\par control compilation and installation of the executable. However, as a\par special exception, the source code distributed need not include\par anything that is normally distributed (in either source or binary\par form) with the major components (compiler, kernel, and so on) of the\par operating system on which the executable runs, unless that component\par itself accompanies the executable.\par \par If distribution of executable or object code is made by offering\par access to copy from a designated place, then offering equivalent\par access to copy the source code from the same place counts as\par distribution of the source code, even though third parties are not\par compelled to copy the source along with the object code.\par \par 4. You may not copy, modify, sublicense, or distribute the Program\par except as expressly provided under this License. Any attempt\par otherwise to copy, modify, sublicense or distribute the Program is\par void, and will automatically terminate your rights under this License.\par However, parties who have received copies, or rights, from you under\par this License will not have their licenses terminated so long as such\par parties remain in full compliance.\par \par 5. You are not required to accept this License, since you have not\par signed it. However, nothing else grants you permission to modify or\par distribute the Program or its derivative works. These actions are\par prohibited by law if you do not accept this License. Therefore, by\par modifying or distributing the Program (or any work based on the\par Program), you indicate your acceptance of this License to do so, and\par all its terms and conditions for copying, distributing or modifying\par the Program or works based on it.\par \par 6. Each time you redistribute the Program (or any work based on the\par Program), the recipient automatically receives a license from the\par original licensor to copy, distribute or modify the Program subject to\par these terms and conditions. You may not impose any further\par restrictions on the recipients' exercise of the rights granted herein.\par You are not responsible for enforcing compliance by third parties to\par this License.\par \par 7. If, as a consequence of a court judgment or allegation of patent\par infringement or for any other reason (not limited to patent issues),\par conditions are imposed on you (whether by court order, agreement or\par otherwise) that contradict the conditions of this License, they do not\par excuse you from the conditions of this License. If you cannot\par distribute so as to satisfy simultaneously your obligations under this\par License and any other pertinent obligations, then as a consequence you\par may not distribute the Program at all. For example, if a patent\par license would not permit royalty-free redistribution of the Program by\par all those who receive copies directly or indirectly through you, then\par the only way you could satisfy both it and this License would be to\par refrain entirely from distribution of the Program.\par \par If any portion of this section is held invalid or unenforceable under\par any particular circumstance, the balance of the section is intended to\par apply and the section as a whole is intended to apply in other\par circumstances.\par \par It is not the purpose of this section to induce you to infringe any\par patents or other property right claims or to contest validity of any\par such claims; this section has the sole purpose of protecting the\par integrity of the free software distribution system, which is\par implemented by public license practices. Many people have made\par generous contributions to the wide range of software distributed\par through that system in reliance on consistent application of that\par system; it is up to the author/donor to decide if he or she is willing\par to distribute software through any other system and a licensee cannot\par impose that choice.\par \par This section is intended to make thoroughly clear what is believed to\par be a consequence of the rest of this License.\par \par 8. If the distribution and/or use of the Program is restricted in\par certain countries either by patents or by copyrighted interfaces, the\par original copyright holder who places the Program under this License\par may add an explicit geographical distribution limitation excluding\par those countries, so that distribution is permitted only in or among\par countries not thus excluded. In such case, this License incorporates\par the limitation as if written in the body of this License.\par \par 9. The Free Software Foundation may publish revised and/or new versions\par of the General Public License from time to time. Such new versions will\par be similar in spirit to the present version, but may differ in detail to\par address new problems or concerns.\par \par Each version is given a distinguishing version number. If the Program\par specifies a version number of this License which applies to it and "any\par later version", you have the option of following the terms and conditions\par either of that version or of any later version published by the Free\par Software Foundation. If the Program does not specify a version number of\par this License, you may choose any version ever published by the Free Software\par Foundation.\par \par 10. If you wish to incorporate parts of the Program into other free\par programs whose distribution conditions are different, write to the author\par to ask for permission. For software which is copyrighted by the Free\par Software Foundation, write to the Free Software Foundation; we sometimes\par make exceptions for this. Our decision will be guided by the two goals\par of preserving the free status of all derivatives of our free software and\par of promoting the sharing and reuse of software generally.\par \par NO WARRANTY\par \par 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par REPAIR OR CORRECTION.\par \par 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par POSSIBILITY OF SUCH DAMAGES.\par \par END OF TERMS AND CONDITIONS\par \par How to Apply These Terms to Your New Programs\par \par If you develop a new program, and you want it to be of the greatest\par possible use to the public, the best way to achieve this is to make it\par free software which everyone can redistribute and change under these terms.\par \par To do so, attach the following notices to the program. It is safest\par to attach them to the start of each source file to most effectively\par convey the exclusion of warranty; and each file should have at least\par the "copyright" line and a pointer to where the full notice is found.\par \par \par Copyright (C) \par \par This program is free software; you can redistribute it and/or modify\par it under the terms of the GNU General Public License as published by\par the Free Software Foundation; either version 2 of the License, or\par (at your option) any later version.\par \par This program is distributed in the hope that it will be useful,\par but WITHOUT ANY WARRANTY; without even the implied warranty of\par MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par GNU General Public License for more details.\par \par You should have received a copy of the GNU General Public License along\par with this program; if not, write to the Free Software Foundation, Inc.,\par 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par \par Also add information on how to contact you by electronic and paper mail.\par \par If the program is interactive, make it output a short notice like this\par when it starts in an interactive mode:\par \par Gnomovision version 69, Copyright (C) year name of author\par Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par This is free software, and you are welcome to redistribute it\par under certain conditions; type `show c' for details.\par \par The hypothetical commands `show w' and `show c' should show the appropriate\par parts of the General Public License. Of course, the commands you use may\par be called something other than `show w' and `show c'; they could even be\par mouse-clicks or menu items--whatever suits your program.\par \par You should also get your employer (if you work as a programmer) or your\par school, if any, to sign a "copyright disclaimer" for the program, if\par necessary. Here is a sample; alter the names:\par \par Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par `Gnomovision' (which makes passes at compilers) written by James Hacker.\par \par , 1 April 1989\par Ty Coon, President of Vice\par \par This General Public License does not permit incorporating your program into\par proprietary programs. If your program is a subroutine library, you may\par consider it more useful to permit linking proprietary applications with the\par library. If this is what you want to do, use the GNU Lesser General\par Public License instead of this License.\par \par } doublecmd-0.7.1/install/windows/doublecmd.xml0000644000175000001440000000115112562442777020353 0ustar alexxusers False Pascal sources *.pas;*.pp 32768 Pascal binaries *.ppu;*.o;*.dcu 16711680 doublecmd-0.7.1/install/windows/install.bat0000644000175000001440000000425312670622177020031 0ustar alexxusersrem This script run from create_packages.bat rem If you run it direct, set up %BUILD_PACK_DIR% first rem Prepare all installation files set DC_INSTALL_DIR=%BUILD_PACK_DIR%\doublecmd mkdir %DC_INSTALL_DIR% mkdir %DC_INSTALL_DIR%\plugins rem WCX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wcx mkdir %DC_INSTALL_DIR%\plugins\wcx\deb mkdir %DC_INSTALL_DIR%\plugins\wcx\rpm mkdir %DC_INSTALL_DIR%\plugins\wcx\sevenzip mkdir %DC_INSTALL_DIR%\plugins\wcx\unrar mkdir %DC_INSTALL_DIR%\plugins\wcx\zip rem WDX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wdx mkdir %DC_INSTALL_DIR%\plugins\wdx\scripts mkdir %DC_INSTALL_DIR%\plugins\wdx\rpm_wdx mkdir %DC_INSTALL_DIR%\plugins\wdx\deb_wdx rem WFX plugins directories mkdir %DC_INSTALL_DIR%\plugins\wfx mkdir %DC_INSTALL_DIR%\plugins\wfx\ftp mkdir %DC_INSTALL_DIR%\doc rem Copy directories xcopy /E language %DC_INSTALL_DIR%\language\ xcopy /E pixmaps %DC_INSTALL_DIR%\pixmaps\ rem Copy files copy doc\*.txt %DC_INSTALL_DIR%\doc\ copy doublecmd.exe %DC_INSTALL_DIR%\ copy doublecmd.zdli %DC_INSTALL_DIR%\ copy install\windows\doublecmd.xml %DC_INSTALL_DIR%\ copy doublecmd.ext.example %DC_INSTALL_DIR%\ copy pixmaps.txt %DC_INSTALL_DIR%\ copy multiarc.ini %DC_INSTALL_DIR%\ rem Copy libraries copy *.dll %DC_INSTALL_DIR%\ rem copy plugins rem WCX copy plugins\wcx\deb\lib\deb.wcx %DC_INSTALL_DIR%\plugins\wcx\deb\ copy plugins\wcx\rpm\lib\rpm.wcx %DC_INSTALL_DIR%\plugins\wcx\rpm\ copy plugins\wcx\sevenzip\sevenzip.wcx %DC_INSTALL_DIR%\plugins\wcx\sevenzip\ copy plugins\wcx\unrar\lib\unrar.wcx %DC_INSTALL_DIR%\plugins\wcx\unrar\ copy plugins\wcx\zip\lib\zip.wcx %DC_INSTALL_DIR%\plugins\wcx\zip\ rem WDX copy plugins\wdx\rpm_wdx\lib\rpm_wdx.wdx %DC_INSTALL_DIR%\plugins\wdx\rpm_wdx\ copy plugins\wdx\deb_wdx\lib\deb_wdx.wdx %DC_INSTALL_DIR%\plugins\wdx\deb_wdx\ copy plugins\wdx\scripts\* %DC_INSTALL_DIR%\plugins\wdx\scripts\ rem WFX copy plugins\wfx\ftp\lib\ftp.wfx %DC_INSTALL_DIR%\plugins\wfx\ftp\ doublecmd-0.7.1/install/windows/portable.diff0000644000175000001440000000020111442624410020306 0ustar alexxusers4c4 < False --- > True doublecmd-0.7.1/install/linux/0000755000175000001440000000000012675717724015344 5ustar alexxusersdoublecmd-0.7.1/install/linux/doublecmd.xpm0000644000175000001440000002351112047725231020013 0ustar alexxusers/* XPM */ static char * doublecmd_xpm[] = { "32 32 489 2", " c None", ". c #AF858D", "+ c #CA847C", "@ c #C67468", "# c #C57468", "$ c #C4746A", "% c #C2756C", "& c #C2746C", "* c #BF736C", "= c #BE716B", "- c #BC6F6A", "; c #BB6E69", "> c #B96D69", ", c #B86B68", "' c #B66A67", ") c #B56966", "! c #B36766", "~ c #B26665", "{ c #B16464", "] c #AE6264", "^ c #AC6162", "/ c #A95A5C", "( c #A7585B", "_ c #A6575A", ": c #A4565B", "< c #A55E65", "[ c #AB767F", "} c #9C8195", "| c #AE7D83", "1 c #F79573", "2 c #EF8667", "3 c #EC8667", "4 c #EA8466", "5 c #E88165", "6 c #E57F64", "7 c #E37D63", "8 c #E07C62", "9 c #DE7961", "0 c #DC7760", "a c #DA745F", "b c #D8745E", "c c #D6715D", "d c #D36E5C", "e c #D16D5B", "f c #CE6A5B", "g c #CD6959", "h c #CB6758", "i c #C96457", "j c #C56256", "k c #C46157", "l c #C15F55", "m c #BF5C53", "n c #BD5B53", "o c #BA5751", "p c #B7534E", "q c #AD6265", "r c #D27967", "s c #F28563", "t c #F08564", "u c #ED8565", "v c #E88266", "w c #E37D64", "x c #DE7A62", "y c #D8745F", "z c #D36F5D", "A c #CF6B5C", "B c #CD695A", "C c #C96558", "D c #C56356", "E c #BD5A52", "F c #BA554F", "G c #B7514B", "H c #B74F49", "I c #8D4655", "J c #E1E1E1", "K c #E3E1E1", "L c #E0DFDE", "M c #E1D2CD", "N c #E2BFB5", "O c #E4A693", "P c #E3866C", "Q c #E67D62", "R c #E37E64", "S c #C46056", "T c #C05B51", "U c #C1726B", "V c #CA9894", "W c #D2BAB8", "X c #DAD1D1", "Y c #DFDFDE", "Z c #E2E1E1", "` c #DBDBDB", " . c #E7E7E7", ".. c #E8E8E8", "+. c #E6EAEA", "@. c #D8A89B", "#. c #E27E64", "$. c #C4685E", "%. c #D3C2C0", "&. c #EBECEC", "*. c #E3E3E3", "=. c #E6E6E6", "-. c #E7E9E9", ";. c #E0D6D3", ">. c #D8836D", ",. c #C96053", "'. c #C9928B", "). c #E8E9E9", "!. c #E2E2E2", "~. c #E6E8E8", "{. c #E7E7E8", "]. c #E6E7E7", "^. c #E7E6E6", "/. c #DA8570", "(. c #DC7660", "_. c #CB9992", ":. c #E8EEEE", "<. c #E7E8E8", "[. c #D6CFD2", "}. c #E0C0B5", "|. c #DCC8C2", "1. c #DFE0E0", "2. c #E5E6E6", "3. c #E5E5E5", "4. c #DFDFDF", "5. c #D87762", "6. c #CD6859", "7. c #C98176", "8. c #E4E5E5", "9. c #E6E6E5", "0. c #E8E9EA", "a. c #D7D3D2", "b. c #CFB7B6", "c. c #CEB0B0", "d. c #D4D4D5", "e. c #F68D6A", "f. c #F18665", "g. c #ED8465", "h. c #E49780", "i. c #DDC4BD", "j. c #E5EAEB", "k. c #DABAB3", "l. c #DB745F", "m. c #C97062", "n. c #DFE1E2", "o. c #E4E5E6", "p. c #C99692", "q. c #B8625D", "r. c #B6514B", "s. c #B44F4A", "t. c #B85B59", "u. c #F5906D", "v. c #F08969", "w. c #EF8869", "x. c #EB8061", "y. c #DCB0A4", "z. c #E6E5E5", "A. c #E3E6E7", "B. c #D77B68", "C. c #CF6A5B", "D. c #D1ACA6", "E. c #E1DEDD", "F. c #BA665E", "G. c #BD5951", "H. c #BA5852", "I. c #B95752", "J. c #B6544F", "K. c #BA615E", "L. c #E87F63", "M. c #D6BDB5", "N. c #D4BAB5", "O. c #D8715B", "P. c #CF695A", "Q. c #DBD8D7", "R. c #C27B73", "S. c #E38167", "T. c #DEDCDB", "U. c #DDDDDD", "V. c #D57561", "W. c #D16C5A", "X. c #C87E73", "Y. c #E1E5E5", "Z. c #E3E4E4", "`. c #CEB6B4", " + c #C0594E", ".+ c #E58065", "++ c #D9C0BA", "@+ c #D9D9D9", "#+ c #D38271", "$+ c #D26B59", "%+ c #C69E98", "&+ c #DADCDD", "*+ c #D9DCDD", "=+ c #C26F65", "-+ c #C25E54", ";+ c #D6A99E", ">+ c #D2D3D3", ",+ c #D2D2D2", "'+ c #D2D2D1", ")+ c #D18879", "!+ c #D5705C", "~+ c #D26B58", "{+ c #D06351", "]+ c #C5B0AD", "^+ c #D2D3D4", "/+ c #CFCCCB", "(+ c #C15C51", "_+ c #C05A50", ":+ c #BE5B52", "<+ c #BB5A53", "[+ c #B65450", "}+ c #D6A194", "|+ c #CACCCC", "1+ c #CACACA", "2+ c #CB7867", "3+ c #CC5038", "4+ c #C84A32", "5+ c #C43F29", "6+ c #C5B3B0", "7+ c #CBCBCC", "8+ c #C9C2C1", "9+ c #B4382A", "0+ c #B13529", "a+ c #B0362C", "b+ c #AF3930", "c+ c #AF3D35", "d+ c #B0443D", "e+ c #B14844", "f+ c #B75C59", "g+ c #E77E61", "h+ c #E37253", "i+ c #D39D90", "j+ c #C5604B", "k+ c #C53B21", "l+ c #C2371D", "m+ c #BF2E15", "n+ c #C19D97", "o+ c #CBCDCD", "p+ c #AC2616", "q+ c #A92012", "r+ c #A71F13", "s+ c #A51E14", "t+ c #A21F16", "u+ c #A22019", "v+ c #A1231D", "w+ c #A83936", "x+ c #F08A6A", "y+ c #EE8768", "z+ c #EA7E5D", "A+ c #E6714E", "B+ c #E26441", "C+ c #DD5A37", "D+ c #D0B0A7", "E+ c #CCCCCC", "F+ c #CDCDCD", "G+ c #CDCCCC", "H+ c #C34E36", "I+ c #C33317", "J+ c #C02F15", "K+ c #BD2910", "L+ c #BC756A", "M+ c #CED1D2", "N+ c #CED3D3", "O+ c #AF4E44", "P+ c #A61507", "Q+ c #A41509", "R+ c #A01409", "S+ c #9E1209", "T+ c #9B110A", "U+ c #99100A", "V+ c #A02622", "W+ c #F58F6D", "X+ c #EF8463", "Y+ c #EB7450", "Z+ c #E76842", "`+ c #E35D36", " @ c #E0552E", ".@ c #DA5632", "+@ c #CCC9C8", "@@ c #C6C4C4", "#@ c #C5391C", "$@ c #C33215", "%@ c #C02F14", "&@ c #BD2A11", "*@ c #B83B27", "=@ c #CDD3D4", "-@ c #CDCDCE", ";@ c #C6BBBA", ">@ c #A41204", ",@ c #A21407", "'@ c #9F1106", ")@ c #9C0E05", "!@ c #990C04", "~@ c #960803", "{@ c #9C1D19", "]@ c #F3845F", "^@ c #ED7149", "/@ c #E9653C", "(@ c #E55B32", "_@ c #E2542B", ":@ c #DE4920", "<@ c #CEBAB5", "[@ c #CECFD0", "}@ c #CECECE", "|@ c #CFD2D2", "1@ c #C18F84", "2@ c #C73011", "3@ c #C33114", "4@ c #C02E13", "5@ c #BD2B11", "6@ c #B9260F", "7@ c #CBB9B6", "8@ c #CFCFD0", "9@ c #B46760", "0@ c #A21104", "a@ c #9F1005", "b@ c #9C0D03", "c@ c #990B03", "d@ c #950701", "e@ c #9B1A17", "f@ c #F2754B", "g@ c #EC663B", "h@ c #E85C31", "i@ c #E65327", "j@ c #DE5027", "k@ c #D1A396", "l@ c #D0D1D1", "m@ c #D0D0D0", "n@ c #C74022", "o@ c #C63415", "p@ c #BA2710", "q@ c #C37E73", "r@ c #D1D3D3", "s@ c #D1D6D7", "t@ c #B36159", "u@ c #9D0B00", "v@ c #9C0C02", "w@ c #950600", "x@ c #9B1A16", "y@ c #F16D42", "z@ c #EB6134", "A@ c #E85A2E", "B@ c #D47458", "C@ c #D1CFCE", "D@ c #D2D2D3", "E@ c #CA9184", "F@ c #C93617", "G@ c #C63416", "H@ c #BA2811", "I@ c #B4210A", "J@ c #D2CFCE", "K@ c #C6ACAA", "L@ c #9F251D", "M@ c #9A0F07", "N@ c #960903", "O@ c #9C1B18", "P@ c #D0CFD1", "Q@ c #D9C3BB", "R@ c #D4C2BD", "S@ c #D1CDCC", "T@ c #D3D7D8", "U@ c #D3D3D4", "V@ c #D3D3D3", "W@ c #D4D5D5", "X@ c #CCB6B1", "Y@ c #CB3A19", "Z@ c #B6240D", "`@ c #B63F2E", " # c #D5D4D3", ".# c #D3D3D2", "+# c #D5D8D8", "@# c #CEC2C2", "## c #CAB5B4", "$# c #CAB7B6", "%# c #D4D4D4", "&# c #D4D7D8", "*# c #D2BFBB", "=# c #CF401F", "-# c #CD3A19", ";# c #B6250F", "># c #B3200B", ",# c #B96256", "'# c #D5D4D4", ")# c #D5D5D5", "!# c #D6D6D7", "~# c #D1A99F", "{# c #D3401B", "]# c #D03D1A", "^# c #CD3A18", "/# c #B3220D", "(# c #B01F0B", "_# c #B03B2D", ":# c #D9D8D7", "<# c #D5D6D6", "[# c #D7D7D7", "}# c #D7D8D8", "|# c #D8DBDC", "1# c #D5DEE1", "2# c #D4BAB3", "3# c #D67358", "4# c #D64019", "5# c #B01F0C", "6# c #AB1A08", "7# c #A81D0F", "8# c #BC7770", "9# c #D4CECE", "0# c #DBE2E2", "a# c #D8DADA", "b# c #D8C9C5", "c# c #D7C5C0", "d# c #D6BEB7", "e# c #D79885", "f# c #DC5D39", "g# c #DF4218", "h# c #DA451E", "i# c #D6431D", "j# c #AC1C0A", "k# c #A9190A", "l# c #A51506", "m# c #A00C00", "n# c #AC4B43", "o# c #C19593", "p# c #CAB8B7", "q# c #CFBEBD", "r# c #D1C6C7", "s# c #D6D6D6", "t# c #D16B54", "u# c #EB5A2C", "v# c #E85427", "w# c #E44F22", "x# c #E14B22", "y# c #DE4921", "z# c #A51608", "A# c #A21306", "B# c #9F0F04", "C# c #9B0A01", "D# c #980A02", "E# c #9D130B", "F# c #753045", "G# c #B18B94", "H# c #C16352", "I# c #E8663E", "J# c #EB5D31", "K# c #E7582C", "L# c #E4542B", "M# c #E1512A", "N# c #DD4E28", "O# c #DA4B26", "P# c #D74824", "Q# c #D44523", "R# c #D04222", "S# c #CD4021", "T# c #CA3D1F", "U# c #C7391E", "V# c #C4361C", "W# c #C1331B", "X# c #BE311A", "Y# c #BB2E19", "Z# c #B72B17", "`# c #B32715", " $ c #B12514", ".$ c #AE2213", "+$ c #AB1F12", "@$ c #A81C10", "#$ c #921A19", "$$ c #7F3545", "%$ c #6C4562", "&$ c #734258", "*$ c #744359", "=$ c #754158", "-$ c #733F56", ";$ c #723E56", ">$ c #713E55", ",$ c #703D54", "'$ c #703C54", ")$ c #6E3B54", "!$ c #6E3B53", "~$ c #6D3A53", "{$ c #6B3853", "]$ c #6B3952", "^$ c #6A3852", "/$ c #6A3752", "($ c #693651", "_$ c #6A3853", ":$ c #623251", "<$ c #613251", "[$ c #613150", "}$ c #633553", "|$ c #917289", " ", " ", " . + @ # $ % & * = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } ", " | 1 2 3 4 5 6 7 8 9 0 a b c d e f g h i j k l m n o p q ", " r s t u 4 v 6 w 8 x 0 a y c z e A B h C D k l m E F G H I ", " J K L M N O P Q R 8 x 0 a y c z e A B h C D S T U V W X Y Z ` ", " ..... . ...+.@.#.8 x 0 a y c z e A B h C D $.%.&... .......*.", " =. . . . . . .-.;.>.9 0 a y c z e A B h ,.'.K ). . . . . . .!.", " =.~.{.].=.=.=.=.^.K /.(.a y c z e A B h _.:.=.=.=.=.=. .<.<.!.", " [.}.|.1.].2.=.3.3.=.4.5.a y c z e A 6.7.8.9.3.3.3.=.0.a.b.c.d.", " e.f.g.h.i.j.3.=.3.].k.l.y c z e A m.n.=.=.=.=.o.p.q.r.s.t. ", " u.v.w.3 x.y.2.z.=.=.A.B.b c z e C.D.].3.=.3.E.F.G.H.I.J.K. ", " u.v.w.3 4 L.M.<.=.=.<.N.O.c z e P.Q.=.=.3.0.R.m n H.I.J.K. ", " u.v.w.3 4 v S.T.!.!.!.U.V.c z W.X.Y.!.!.Z.`. +m n H.I.J.K. ", " u.v.w.3 4 v .+++@+@+@+@+#+c z $+%+&+@+@+*+=+-+m n H.I.J.K. ", " u.v.w.3 4 v 6 ;+>+,+,+'+)+!+~+{+]+^+,+,+/+(+_+:+n <+I.[+K. ", " u.v.w.3 4 v .+}+|+1+1+1+2+3+4+5+6+7+1+1+8+9+0+a+b+c+d+e+f+ ", " u.v.w.3 4 g+h+i+|+1+1+1+j+k+l+m+n+o+1+1+|+p+q+r+s+t+u+v+w+ ", " u.x+y+z+A+B+C+D+E+F+F+G+H+I+J+K+L+M+F+F+N+O+P+Q+R+S+T+U+V+ ", " W+X+Y+Z+`+ @.@+@F+F+F+@@#@$@%@&@*@=@F+F+-@;@>@,@'@)@!@~@{@ ", " ]@^@/@(@_@:@<@[@}@}@|@1@2@3@4@5@6@7@}@}@}@8@9@0@a@b@c@d@e@ ", " f@g@h@i@j@k@l@m@m@m@F+n@o@3@4@5@p@q@r@m@m@m@s@t@u@v@c@w@x@ ", " y@z@A@B@C@,+,+,+,+D@E@F@G@3@4@5@H@I@J@,+,+,+,+>+K@L@M@N@O@ ", " P@Q@R@S@T@U@V@V@V@W@X@Y@F@G@3@4@5@H@Z@`@ #.#V@V@V@W@+#@###$#>+", " V@%#%#%#%#%#%#%#&#*#=#-#F@G@3@4@5@H@;#>#,#'#%#%#%#%#%#%#%#%#,+", " )#)#)#)#)#)#)#!#~#{#]#^#F@G@3@4@5@H@;#/#(#_#:#<#)#)#)#)#)#)#V@", " [#[#[#}#|#1#2#3#4#{#]#^#F@G@3@4@5@H@;#/#5#6#7#8#9#0#a#}#[#[#%#", " ` b#c#d#e#f#g#h#i#{#]#^#F@G@3@4@5@H@;#/#5#j#k#l#m#n#o#p#q#r#s#", " t#u#v#w#x#y#h#i#{#]#^#F@G@3@4@5@H@;#/#5#j#k#z#A#B#C#D#E#F# ", " G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$s+#$$$ ", " %$&$*$=$-$;$>$,$'$)$!$~$~${$]$^$/$($_$:$:$<$[$}$|$ ", " "}; doublecmd-0.7.1/install/linux/install.sh0000755000175000001440000001263512651213572017342 0ustar alexxusers#!/bin/bash set -e # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi # Determine library directory if [ "$CPU_TARGET" = "x86_64" ] && [ ! -f "/etc/debian_version" ] then LIB_SUFFIX=64 else LIB_SUFFIX= fi # Parse input parameters CKNAME=$(basename "$0") args=$(getopt -n $CKNAME -o P:,I: -l portable-prefix:,install-prefix:,default -- "$@") eval set -- $args for A do case "$A" in --) DC_INSTALL_DIR=/usr/lib$LIB_SUFFIX/doublecmd ;; -P|--portable-prefix) shift CK_PORTABLE=1 DC_INSTALL_DIR=$(eval echo $1/doublecmd) break ;; -I|--install-prefix) shift DC_INSTALL_PREFIX=$(eval echo $1) DC_INSTALL_DIR=$DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX/doublecmd break ;; esac shift done mkdir -p $DC_INSTALL_DIR mkdir -p $DC_INSTALL_DIR/plugins # WCX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wcx mkdir -p $DC_INSTALL_DIR/plugins/wcx/cpio mkdir -p $DC_INSTALL_DIR/plugins/wcx/deb mkdir -p $DC_INSTALL_DIR/plugins/wcx/rpm mkdir -p $DC_INSTALL_DIR/plugins/wcx/unrar mkdir -p $DC_INSTALL_DIR/plugins/wcx/zip # WDX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/scripts mkdir -p $DC_INSTALL_DIR/plugins/wdx/rpm_wdx mkdir -p $DC_INSTALL_DIR/plugins/wdx/deb_wdx # WFX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wfx mkdir -p $DC_INSTALL_DIR/plugins/wfx/ftp mkdir -p $DC_INSTALL_DIR/plugins/wfx/samba # WLX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/wlx mkdir -p $DC_INSTALL_DIR/plugins/wlx/wlxmplayer # DSX plugins directories mkdir -p $DC_INSTALL_DIR/plugins/dsx mkdir -p $DC_INSTALL_DIR/plugins/dsx/dsxlocate # Copy files cp -a doublecmd $DC_INSTALL_DIR/ cp -a doublecmd.zdli $DC_INSTALL_DIR/ cp -a install/linux/doublecmd.xml $DC_INSTALL_DIR/ cp -a doublecmd.ext.example $DC_INSTALL_DIR/ cp -a pixmaps.txt $DC_INSTALL_DIR/ cp -a multiarc.ini $DC_INSTALL_DIR/ # copy plugins # WCX install -m 644 plugins/wcx/cpio/lib/cpio.wcx $DC_INSTALL_DIR/plugins/wcx/cpio/ install -m 644 plugins/wcx/deb/lib/deb.wcx $DC_INSTALL_DIR/plugins/wcx/deb/ install -m 644 plugins/wcx/rpm/lib/rpm.wcx $DC_INSTALL_DIR/plugins/wcx/rpm/ install -m 644 plugins/wcx/unrar/lib/unrar.wcx $DC_INSTALL_DIR/plugins/wcx/unrar/ install -m 644 plugins/wcx/zip/lib/zip.wcx $DC_INSTALL_DIR/plugins/wcx/zip/ # WDX install -m 644 plugins/wdx/rpm_wdx/lib/rpm_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/rpm_wdx/ install -m 644 plugins/wdx/deb_wdx/lib/deb_wdx.wdx $DC_INSTALL_DIR/plugins/wdx/deb_wdx/ install -m 644 plugins/wdx/scripts/* $DC_INSTALL_DIR/plugins/wdx/scripts/ # WFX install -m 644 plugins/wfx/ftp/lib/ftp.wfx $DC_INSTALL_DIR/plugins/wfx/ftp/ install -m 644 plugins/wfx/samba/lib/samba.wfx $DC_INSTALL_DIR/plugins/wfx/samba/ # WLX install -m 644 plugins/wlx/WlxMplayer/lib/wlxmplayer.wlx $DC_INSTALL_DIR/plugins/wlx/wlxmplayer/ # DSX install -m 644 plugins/dsx/DSXLocate/lib/dsxlocate.dsx $DC_INSTALL_DIR/plugins/dsx/dsxlocate/ if [ -z $CK_PORTABLE ] then # Copy libraries install -d $DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX if [ "$(echo *.so*)" != "*.so*" ]; then install -m 644 *.so* $DC_INSTALL_PREFIX/usr/lib$LIB_SUFFIX fi # Create directory for platform independed files install -d $DC_INSTALL_PREFIX/usr/share/doublecmd # Copy man files install -d -m 755 $DC_INSTALL_PREFIX/usr/share/man/man1 install -c -m 644 install/linux/*.1 $DC_INSTALL_PREFIX/usr/share/man/man1 # Copy documentation install -d $DC_INSTALL_PREFIX/usr/share/doublecmd/doc install -m 644 doc/*.txt $DC_INSTALL_PREFIX/usr/share/doublecmd/doc ln -sf ../../share/doublecmd/doc $DC_INSTALL_DIR/doc # Copy scripts install -d $DC_INSTALL_DIR/scripts cp -a scripts/*.py $DC_INSTALL_DIR/scripts/ # Copy languages cp -r language $DC_INSTALL_PREFIX/usr/share/doublecmd ln -sf ../../share/doublecmd/language $DC_INSTALL_DIR/language # Copy pixmaps cp -r pixmaps $DC_INSTALL_PREFIX/usr/share/doublecmd ln -sf ../../share/doublecmd/pixmaps $DC_INSTALL_DIR/pixmaps # Create symlink and desktop files install -d $DC_INSTALL_PREFIX/usr/bin install -d $DC_INSTALL_PREFIX/usr/share/pixmaps install -d $DC_INSTALL_PREFIX/usr/share/applications ln -sf ../lib$LIB_SUFFIX/doublecmd/doublecmd $DC_INSTALL_PREFIX/usr/bin/doublecmd install -m 644 doublecmd.png $DC_INSTALL_PREFIX/usr/share/pixmaps/doublecmd.png install -m 644 install/linux/doublecmd.xpm $DC_INSTALL_PREFIX/usr/share/pixmaps/doublecmd.xpm install -m 644 install/linux/doublecmd.desktop $DC_INSTALL_PREFIX/usr/share/applications/doublecmd.desktop else # Copy documentation mkdir -p $DC_INSTALL_DIR/doc cp -a doc/*.txt $DC_INSTALL_DIR/doc/ # Copy script for execute portable version cp -a doublecmd.sh $DC_INSTALL_DIR/ # Copy directories cp -r language $DC_INSTALL_DIR/ cp -r pixmaps $DC_INSTALL_DIR/ # Copy scripts install -d $DC_INSTALL_DIR/scripts cp -a scripts/*.py $DC_INSTALL_DIR/scripts/ # Copy libraries install -m 644 *.so* $DC_INSTALL_DIR/ # Copy DC icon cp -a doublecmd.png $DC_INSTALL_DIR/doublecmd.png fi doublecmd-0.7.1/install/linux/rpm/0000755000175000001440000000000012675717724016142 5ustar alexxusersdoublecmd-0.7.1/install/linux/rpm/doublecmd-help.spec0000644000175000001440000000410512675713165021675 0ustar alexxusers# norootforbuild %define doublecmd_help doublecmd-help Name: doublecmd-help-en Summary: Documentation for the Double Commander (English) Version: 0.7.1 Release: 1 Url: http://doublecmd.sourceforge.net/ License: GPL-2+ Source0: %{doublecmd_help}-%{version}.tar.gz Group: Documentation Requires: doublecmd BuildArch: noarch %description This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in English. %package -n doublecmd-help-ru Summary: Documentation for the Double Commander (Russian) Group: Documentation Requires: doublecmd BuildArch: noarch %description -n doublecmd-help-ru This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in Russian. %package -n doublecmd-help-uk Summary: Documentation for the Double Commander (Ukrainian) Group: Documentation Requires: doublecmd BuildArch: noarch %description -n doublecmd-help-uk This package contains the documentation files for the Double Commander designed for use with the external web browsers. This package contains the documentation for the DC in Ukrainian. %prep %setup -q -n %{doublecmd_help}-%{version} %build %install install -d %{buildroot}/%{_datadir}/doublecmd/doc cp -r en %{buildroot}/%{_datadir}/doublecmd/doc cp -r ru %{buildroot}/%{_datadir}/doublecmd/doc cp -r uk %{buildroot}/%{_datadir}/doublecmd/doc %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/en %files -n doublecmd-help-ru %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/ru %files -n doublecmd-help-uk %defattr(-,root,root) %dir %{_datadir}/doublecmd %dir %{_datadir}/doublecmd/doc %doc %{_datadir}/doublecmd/doc/uk %changelog * Fri Jan 21 2011 - Alexander Koblov - Initial package, version 0.4.6 doublecmd-0.7.1/install/linux/rpm/doublecmd-gtk.spec0000644000175000001440000000263612675713165021541 0ustar alexxusers# norootforbuild %define doublecmd doublecmd Name: doublecmd-gtk Summary: Twin-panel (commander-style) file manager (GTK2) Version: 0.7.1 Release: 1 URL: http://doublecmd.sourceforge.net Source0: %{doublecmd}-%{version}.orig.tar.gz License: GPL Group: Applications/File BuildRequires: fpc >= 2.6.0 fpc-src glib2-devel gtk2-devel lazarus >= 1.0.0 %if 0%{?mandriva_version} BuildRequires: libncurses-devel libdbus-1-devel libbzip2-devel %endif %if 0%{?fedora_version} || 0%{?rhel} BuildRequires: xorg-x11-devel ncurses-devel dbus-devel bzip2-devel %endif %if 0%{?suse_version} >= 1110 BuildRequires: ncurses-devel dbus-1-devel libbz2-devel %endif Provides: doublecmd Conflicts: doublecmd-qt BuildRoot: %{_tmppath}/%{doublecmd}-%{version}-build %description Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. %prep %setup -q -n %{doublecmd}-%{version} %build ./build.sh beta gtk2 %install install/linux/install.sh --install-prefix=%{buildroot} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %{_libdir}/%{doublecmd} %{_bindir}/%{doublecmd} %{_datadir}/%{doublecmd} %{_datadir}/man/man1/%{doublecmd}.* %{_datadir}/pixmaps/%{doublecmd}.* %{_datadir}/applications/%{doublecmd}.desktop %changelog * Fri Jun 11 2010 - Alexander Koblov - Initial package, version 0.4.6 doublecmd-0.7.1/install/linux/rpm/libunrar.spec0000644000175000001440000001210512436430260020611 0ustar alexxusersName: libunrar Version: 5.2.2 Release: 1 Summary: Decompress library for RAR v5 archives Source: http://www.rarlab.com/rar/unrarsrc-%{version}.tar.gz Url: http://www.rarlab.com/rar_add.htm License: Freeware Group: System/Libraries BuildRequires: gcc-c++ BuildRoot: %{_tmppath}/%{name}-%{version}-root %description The libunrar library allows programs linking against it to decompress existing RAR v5 archives. %prep %setup -q -n unrar %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %build make lib CXXFLAGS+="-fPIC -DSILENT" STRIP=true %install install -d -m 755 %{buildroot}/%{_libdir} install -m 644 libunrar.so %{buildroot}/%{_libdir} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %doc license.txt readme.txt %{_libdir}/libunrar.so %changelog * Sun Jan 23 2011 Alexander Koblov - Initial release of library * Sat Jul 10 2010 Götz Waschk 3.93-1mdv2011.0 + Revision: 550262 - new version * Mon Dec 21 2009 Funda Wang 3.91-1mdv2010.1 + Revision: 480547 - new version 3.91 * Thu Aug 20 2009 Götz Waschk 3.90-2mdv2010.0 + Revision: 418576 - rebuild for broken build system * Thu Aug 20 2009 Götz Waschk 3.90-1mdv2010.0 + Revision: 418546 - new version * Mon Jul 13 2009 Götz Waschk 3.90-0.beta4.1mdv2010.0 + Revision: 395466 - new version * Sat Jun 20 2009 Götz Waschk 3.90-0.beta3.1mdv2010.0 + Revision: 387518 - new version * Mon Jun 08 2009 Götz Waschk 3.90-0.beta2.1mdv2010.0 + Revision: 383871 - new version * Thu May 07 2009 Götz Waschk 3.90-0.beta1.1mdv2010.0 + Revision: 372937 - new version * Tue Feb 03 2009 Guillaume Rousse 3.80-2mdv2009.1 + Revision: 337120 - keep bash completion in its own package * Wed Jan 07 2009 Götz Waschk 3.80-1mdv2009.1 + Revision: 326892 - new version * Sun Oct 12 2008 Funda Wang 3.80-0.beta4.1mdv2009.1 + Revision: 292676 - 3.8.4 - New version 3.8 beta3 * Wed Jun 25 2008 Funda Wang 3.80-0.beta2.1mdv2009.0 + Revision: 228841 - New version 3.80 beta 2 * Tue Jun 10 2008 Götz Waschk 3.80-0.beta1.1mdv2009.0 + Revision: 217391 - new version + Funda Wang - Revert to actual version of program - fix real version * Fri Feb 01 2008 Anssi Hannula 3.71-0.beta1.2mdv2008.1 + Revision: 161265 - move to Mandriva non-free from PLF (license is no longer unclear, it now allows redistribution explicitely) - drop pre-MDK10.0 support - fix license tag capitalization - import unrar * Wed Dec 12 2007 G�tz Waschk 3.71-0.beta1.1plf2008.1 - new version * Tue Nov 6 2007 G�tz Waschk 3.70-1plf2008.1 - new version * Mon Apr 16 2007 G�tz Waschk 3.70-0.beta7.1plf2007.1 - new version * Tue Mar 6 2007 G�tz Waschk 3.70-0.beta4.1plf2007.1 - new version * Tue Feb 6 2007 G�tz Waschk 3.70-0.beta3.1plf2007.1 - drop patch - new version * Wed Jan 24 2007 G�tz Waschk 3.70-0.beta1.1plf2007.1 - don't strip the binary at build stage - new version * Thu Nov 2 2006 G�tz Waschk 3.60-1plf2007.1 - update description - new version * Mon Jul 24 2006 G�tz Waschk 3.60-0.beta7.1plf2007.0 - new version * Wed Jun 28 2006 G�tz Waschk 3.60-0.beta5.1plf2007.0 - new version * Tue Oct 11 2005 G�tz Waschk 3.51-1plf - new version * Tue Aug 9 2005 G�tz Waschk 3.50-1plf - new version * Tue Apr 19 2005 G�tz Waschk 3.50-0.beta1.1plf - mkrel - new version * Mon Sep 20 2004 G�tz Waschk 3.40-1plf - fix description - new version * Sun Jun 6 2004 G�tz Waschk 3.30-2plf - rebuild for new g++ * Wed Apr 21 2004 G�tz Waschk 3.30-1plf - new version * Tue Dec 30 2003 G�tz Waschk 3.20-2plf - add unrar bash-completion for Cooker builds * Fri Jun 20 2003 G�tz Waschk 3.20-1plf - small build patch for gcc 3.3 - new version * Sun Mar 30 2003 G�tz Waschk 3.20-0.beta2.1plf - arrgh, the displayed version is 3.20 beta 2 * Sat Mar 29 2003 G�tz Waschk 3.2.0-0.beta2.1plf - new version * Fri Feb 14 2003 G�tz Waschk 3.10-2plf - use default optimization flags (Francisco Javier Felix) * Wed Jan 8 2003 G�tz Waschk 3.10-1plf * Tue Dec 3 2002 G�tz Waschk 3.10-0.beta3.1plf - 3.10 beta 3 * Tue Oct 22 2002 G�tz Waschk 3.10-0.beta1.1plf - fix url - add some docs - drop patch - quiet tar - set version to 3.10 beta 1, that's the output of the program - new version * Mon Aug 26 2002 Guillaume Rousse 3.0-1plf - first PLF release, with patch from Pascal Terjan doublecmd-0.7.1/install/linux/rpm/doublecmd-qt.spec0000644000175000001440000000257312675713165021400 0ustar alexxusers# norootforbuild %define doublecmd doublecmd Name: doublecmd-qt Summary: Twin-panel (commander-style) file manager (Qt4) Version: 0.7.1 Release: 1 URL: http://doublecmd.sourceforge.net Source0: %{doublecmd}-%{version}.orig.tar.gz License: GPL Group: Applications/File BuildRequires: fpc >= 2.6.0 fpc-src glib2-devel libQt4Pas5-devel >= 2.1 lazarus >= 1.0.0 %if 0%{?mandriva_version} BuildRequires: libdbus-1-devel libbzip2-devel %endif %if 0%{?fedora_version} || 0%{?rhel} BuildRequires: xorg-x11-devel dbus-devel bzip2-devel %endif %if 0%{?suse_version} >= 1110 BuildRequires: dbus-1-devel libbz2-devel %endif Provides: doublecmd Conflicts: doublecmd-gtk BuildRoot: %{_tmppath}/%{doublecmd}-%{version}-build %description Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. %prep %setup -q -n %{doublecmd}-%{version} %build ./build.sh beta qt %install install/linux/install.sh --install-prefix=%{buildroot} %clean [ %{buildroot} != "/" ] && ( rm -rf %{buildroot} ) %files %defattr(-,root,root) %{_libdir}/%{doublecmd} %{_bindir}/%{doublecmd} %{_datadir}/%{doublecmd} %{_datadir}/man/man1/%{doublecmd}.* %{_datadir}/pixmaps/%{doublecmd}.* %{_datadir}/applications/%{doublecmd}.desktop %changelog * Fri Jun 11 2010 - Alexander Koblov - Initial package, version 0.4.6 doublecmd-0.7.1/install/linux/release/0000755000175000001440000000000012675717724016764 5ustar alexxusersdoublecmd-0.7.1/install/linux/update-revision.sh0000755000175000001440000000045212650252770021006 0ustar alexxusers#!/bin/sh # DC revision number export DC_REVISION=$(svnversion $1 | sed -e 's/\([0-9]*\).*/\1/') # Update dcrevision.inc echo "// Created by Svn2RevisionInc" > $2/units/dcrevision.inc echo "const dcRevision = '$DC_REVISION';" >> $2/units/dcrevision.inc # Return revision echo $DC_REVISION doublecmd-0.7.1/install/linux/deb/0000755000175000001440000000000012675717724016076 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd/0000755000175000001440000000000012675717724020034 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd/doublecmd-qt.lintian-overrides0000644000175000001440000000035712561673162025770 0ustar alexxusers# From names of objects in lcl-units, not visible to the user doublecmd-qt: spelling-error-in-binary usr/lib/doublecmd/doublecmd Childs Children doublecmd-qt: shlib-with-non-pic-code usr/lib/doublecmd/plugins/wlx/wlxmplayer/wlxmplayer.wlx doublecmd-0.7.1/install/linux/deb/doublecmd/rules0000755000175000001440000000500312561677325021106 0ustar alexxusers#!/usr/bin/make -f # Set temporary HOME for lazarus primary config directory export HOME=$(CURDIR)/tmphome %: dh $@ override_dh_install: cd language ;\ if [ -f doublecmd.po ] ; then mv doublecmd.po doublecmd.en.po; fi ; # Remove convenience copy of Free Pascal Qt4 binding, use libqt4pas-dev instead rm -f plugins/wlx/WlxMplayer/src/qt4.pas # Build GTK2 version ./build.sh beta gtk2 ./install/linux/install.sh --install-prefix=$(CURDIR)/debian/doublecmd-common ./clean.sh # Build Qt4 version ./build.sh beta qt ./install/linux/install.sh --install-prefix=$(CURDIR)/debian/doublecmd-qt-temp ./clean.sh # Separate GTK2-specific files mkdir -p $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/plugins mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/doublecmd $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/ mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/plugins/wlx $(CURDIR)/debian/doublecmd-gtk/usr/lib/doublecmd/plugins/ mkdir -p $(CURDIR)/debian/doublecmd-gtk-dbg/usr/lib/doublecmd mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/doublecmd.zdli $(CURDIR)/debian/doublecmd-gtk-dbg/usr/lib/doublecmd/ # Separate Qt4-specific files mkdir -p $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/plugins mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/doublecmd $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/ mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/plugins/wlx $(CURDIR)/debian/doublecmd-qt/usr/lib/doublecmd/plugins/ mkdir -p $(CURDIR)/debian/doublecmd-qt-dbg/usr/lib/doublecmd mv $(CURDIR)/debian/doublecmd-qt-temp/usr/lib/doublecmd/doublecmd.zdli $(CURDIR)/debian/doublecmd-qt-dbg/usr/lib/doublecmd/ rm -rf $(CURDIR)/debian/doublecmd-qt-temp/ # Separate plugins mkdir -p $(CURDIR)/debian/doublecmd-plugins/usr/lib/doublecmd mv $(CURDIR)/debian/doublecmd-common/usr/lib/doublecmd/plugins $(CURDIR)/debian/doublecmd-plugins/usr/lib/doublecmd # Clean up common files rm -rf $(CURDIR)/debian/doublecmd-common/usr/share/doublecmd/doc find $(CURDIR)/debian/doublecmd-common/usr/share/ -type f | xargs chmod a-x ; dh_install override_dh_strip: # Strip plugins because dh_strip cannot handle non-standard extensions (bug #35733) find $(CURDIR)/debian/doublecmd-*/usr/lib/doublecmd/plugins/ -name '*.w?x' -o -name '*.dsx' | \ xargs strip --remove-section=.comment --strip-unneeded ; dh_strip override_dh_clean: ./clean.sh cd language ;\ if [ -f doublecmd.en.po ] ; then mv doublecmd.en.po doublecmd.po; fi ; # Clean up temporary HOME rm -rf $(CURDIR)/tmphome dh_clean doublecmd-0.7.1/install/linux/deb/doublecmd/source/0000755000175000001440000000000012675717724021334 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd/source/format0000644000175000001440000000001512277451532022531 0ustar alexxusers3.0 (quilt) doublecmd-0.7.1/install/linux/deb/doublecmd/control0000644000175000001440000000777112651173522021435 0ustar alexxusersSource: doublecmd Section: utils Priority: optional Maintainer: Pascal Packaging Team Uploaders: Graham Inggs Build-Depends: debhelper (>= 9), fp-utils (>= 2.6.2), fpc (>= 2.6.2), lcl (>= 1.4), lcl-gtk2, lcl-qt4, libbz2-dev, libdbus-1-dev, libglib2.0-dev, libgtk2.0-dev, libqt4pas-dev (>= 2.1) Standards-Version: 3.9.6 Vcs-Git: git://anonscm.debian.org/pkg-pascal/doublecmd.git Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-pascal/doublecmd.git Homepage: http://doublecmd.sourceforge.net/ Package: doublecmd-gtk Architecture: any Depends: doublecmd-common (= ${source:Version}), doublecmd-plugins (= ${binary:Version}), doublecmd-gtk-dbg (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Provides: doublecmd Conflicts: doublecmd Replaces: doublecmd Description: twin-panel (commander-style) file manager (GTK2) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar0 package from non-free. . This package contains the GTK2 user interface. Package: doublecmd-gtk-dbg Architecture: any Section: debug Priority: extra Provides: doublecmd-dbg Conflicts: doublecmd-dbg Replaces: doublecmd-dbg Depends: ${misc:Depends} Description: twin-panel (commander-style) file manager (GTK2 - debug) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . This package contains debugging symbols for the GTK2 user interface. Package: doublecmd-qt Architecture: any Depends: doublecmd-common (= ${source:Version}), doublecmd-plugins (= ${binary:Version}), doublecmd-qt-dbg (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends} Provides: doublecmd Conflicts: doublecmd Replaces: doublecmd Description: twin-panel (commander-style) file manager (Qt4) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar0 package from non-free. . This package contains the Qt4 user interface. Package: doublecmd-qt-dbg Architecture: any Section: debug Priority: extra Provides: doublecmd-dbg Conflicts: doublecmd-dbg Replaces: doublecmd-dbg Depends: ${misc:Depends} Description: twin-panel (commander-style) file manager (Qt4 - debug) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . This package contains debugging symbols for the Qt4 user interface. Package: doublecmd-plugins Architecture: any Depends: ${misc:Depends} Description: twin-panel (commander-style) file manager (plugins) Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar0 package from non-free. . This package contains plugins. Package: doublecmd-common Architecture: all Recommends: doublecmd-gtk | doublecmd-qt Depends: desktop-file-utils, ${misc:Depends} Suggests: doublecmd-help-en | doublecmd-help, libunrar0, mplayer2, rabbitvcs-core, libffmpegthumbnailer4, xterm | x-terminal-emulator Description: twin-panel (commander-style) file manager Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. . Support for RAR archives can be enabled by installing the libunrar0 package from non-free. . This package contains common files. doublecmd-0.7.1/install/linux/deb/doublecmd/doublecmd-gtk.lintian-overrides0000644000175000001440000000036112561673162026124 0ustar alexxusers# From names of objects in lcl-units, not visible to the user doublecmd-gtk: spelling-error-in-binary usr/lib/doublecmd/doublecmd Childs Children doublecmd-gtk: shlib-with-non-pic-code usr/lib/doublecmd/plugins/wlx/wlxmplayer/wlxmplayer.wlx doublecmd-0.7.1/install/linux/deb/doublecmd/compat0000644000175000001440000000000212277451532021220 0ustar alexxusers9 doublecmd-0.7.1/install/linux/deb/doublecmd/patches/0000755000175000001440000000000012675717724021463 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd/patches/x-terminal-emulator.patch0000644000175000001440000000201412671221652026371 0ustar alexxusersDescription: Change default terminal command to 'x-terminal-emulator' Author: Graham Inggs Forwarded: not-needed Last-Update: 2016-03-13 --- a/src/platform/uOSUtils.pas +++ b/src/platform/uOSUtils.pas @@ -63,11 +63,11 @@ RunInTermCloseParams = ''; MonoSpaceFont = 'Monaco'; {$ELSE} - RunTermCmd = 'xterm'; // default terminal + RunTermCmd = 'x-terminal-emulator'; // default terminal RunTermParams = ''; - RunInTermStayOpenCmd = 'xterm'; // default run in terminal command AND Stay open after command + RunInTermStayOpenCmd = 'x-terminal-emulator'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '-e sh -c ''{command}; echo -n Press ENTER to exit... ; read a'''; - RunInTermCloseCmd = 'xterm'; // default run in terminal command AND Close after command + RunInTermCloseCmd = 'x-terminal-emulator'; // default run in terminal command AND Close after command RunInTermCloseParams = '-e sh -c {command}'; MonoSpaceFont = 'Monospace'; {$ENDIF} doublecmd-0.7.1/install/linux/deb/doublecmd/patches/series0000644000175000001440000000003212277451532022661 0ustar alexxusersx-terminal-emulator.patch doublecmd-0.7.1/install/linux/deb/doublecmd/patches/hide-build-info.patch0000644000175000001440000000106112505476565025436 0ustar alexxusersDescription: Do not display build info in window title Author: Graham Inggs Forwarded: not-needed Last-Update: 2015-02-15 --- a/src/fmain.pas +++ b/src/fmain.pas @@ -797,13 +797,7 @@ if Length(UniqueInstance.ServernameByUser) > 0 then ServernameString := ' [' + UniqueInstance.ServernameByUser + ']'; - Result := Format('%s%s %s build %s; %s', - ['Double Commander', - ServernameString, - dcVersion, - dcRevision, - dcBuildDate] - ); + Result := 'Double Commander'; end; var doublecmd-0.7.1/install/linux/deb/doublecmd/changelog0000644000175000001440000001032512505476565021704 0ustar alexxusersdoublecmd (0.6.0-3) experimental; urgency=medium * Revert patch to not generate debug line info on big-endian architectures. * Work around ARM code generation bug in fpc < 3.0.1. -- Graham Inggs Fri, 27 Feb 2015 14:26:01 +0200 doublecmd (0.6.0-2) experimental; urgency=low * Disable PIC on ARM architectures. * Do not generate debug line info on big-endian architectures. * Update d/control: add Suggests on rabbitvcs-core. * Update d/copyright: new directory libraries/src/libbz2. * Update Lintian overrides. -- Graham Inggs Wed, 18 Feb 2015 11:09:44 +0200 doublecmd (0.6.0-1) experimental; urgency=medium * New upstream release. * Drop d/patches/hide-lazarus-revision.patch included upstream, refresh remaining patches. * New patch d/patches/clean-plugins-static-libs.patch to clean static libs from plugins directories. * Update d/rules: - do not rename files doublecmd.pb.po and doublecmd.zh.po that no longer exist - strip plugins because dh_strip cannot handle non-standard extensions * Update d/copyright: - update copyright years - add copyright information for new file plugins/wcx/zip/fparchive/abxz.pas - remove copyright information for removed directory libraries/src/libmime/ -- Graham Inggs Mon, 16 Feb 2015 14:09:06 +0200 doublecmd (0.5.11-1) unstable; urgency=medium * New upstream release. * Drop patches included upstream, refresh remaining patches. * Update d/rules: - do not delete symlink for doublecmd-help - remove new convenience copy of qt4.pas before building * Update d/copyright: - update copyright years - add copyright information for newly added qt4.pas - use dh_make copyright templates * Update d/control: add Suggests on mplayer2. * Update Lintian overrides. -- Graham Inggs Tue, 07 Oct 2014 15:58:52 +0200 doublecmd (0.5.10-2) unstable; urgency=medium * Add d/patches/hide-lazarus-revision.patch to build without lazarus-src * Update d/control: - drop build-depends on lazarus-src - clean up build-depends on lcl, lcl-gtk2 and lcl-qt4 -- Graham Inggs Mon, 02 Jun 2014 14:04:06 +0200 doublecmd (0.5.10-1) unstable; urgency=medium [ Graham Inggs ] * New upstream release (Closes: #746015) * Refresh d/patches/hide-build-info.patch. [ Paul Gevers ] * Update d/copyright with newly added file * Drop hack in fix_build.sh*.patch and convert it to not build the lazarus components, as that is fixed in Lazarus now. Renamed patch to dont_build_lazarus_components.patch -- Paul Gevers Sun, 18 May 2014 15:56:14 +0200 doublecmd (0.5.9-2) unstable; urgency=medium * Tweak fix_build.sh_for_lazarus-1.2.patch, fix FTBFS on i386. -- Graham Inggs Tue, 15 Apr 2014 15:00:27 +0200 doublecmd (0.5.9-1) unstable; urgency=medium [ Graham Inggs ] * New upstream. * Update d/control: - add Depends on desktop-file-utils - update Maintainer and Vcs-* fields for Pascal Packaging Team maintenance * Update d/patches: remove link-with-as-needed.patch and add-keywords-to-desktop-file.patch, included upstream. * Remove unnecessary d/doublecmd-*.dir files. * Do not install /usr/lib/doublecmd/doc. [ Paul Gevers ] * Add add_set-e_to_build_scripts.patch to let the build fail on failure * Add fix_build.sh_for_lazarus-1.2.patch and remove_red-haring__dont_install_.so_files.patch to prevent FTBFS (Closes: 741792) -- Paul Gevers Mon, 14 Apr 2014 21:51:22 +0200 doublecmd (0.5.8-1) unstable; urgency=low * New upstream. * Link with '--as-needed' flag to avoid unnecessary linking. * Add Keywords entry to desktop file. * Update d/control: bump Standards-Version to 3.9.5, no changes. -- Graham Inggs Sun, 19 Jan 2014 12:46:33 +0200 doublecmd (0.5.7-2) unstable; urgency=low * Fix FTBFS without writable HOME directory (Closes: #725647) -- Graham Inggs Mon, 07 Oct 2013 11:44:11 +0200 doublecmd (0.5.7-1) unstable; urgency=low * Initial release (Closes: #718778) -- Graham Inggs Wed, 25 Sep 2013 10:48:13 +0200 doublecmd-0.7.1/install/linux/deb/doublecmd/watch0000644000175000001440000000014412277451532021052 0ustar alexxusersversion=3 http://sf.net/doublecmd/doublecmd-(\d\S*)-src\.(?:zip|tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz))) doublecmd-0.7.1/install/linux/deb/doublecmd/doublecmd-common.menu0000644000175000001440000000026412277451532024136 0ustar alexxusers?package(doublecmd-common):needs="X11"\ section="Applications/File Management"\ icon="/usr/share/pixmaps/doublecmd.xpm"\ title="Double Commander"\ command="/usr/bin/doublecmd" doublecmd-0.7.1/install/linux/deb/doublecmd/copyright0000644000175000001440000004372012561673630021764 0ustar alexxusersFormat: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: Double Commander Upstream-Contact: Alexander Koblov Source: http://doublecmd.sourceforge.net/ Files: * Copyright: 2006-2015 Alexander Koblov 2008 Dmitry Kolomiets 2009-2013 Przemysław Nagay License: GPL-2.0+ Files: components/CmdLine/* Copyright: 2007 Julian Schutsch License: GPL-3.0+ Files: components/lclextensions/* Copyright: 2007 Luiz Américo Pereira Câmara License: LGPL-2.0+ Files: components/dcpcrypt/* Copyright: 1999-2002 David Barton License: X11 Files: components/gifanim/* Copyright: 2009 Laurent Jacques License: GPL-2.0+ Files: components/virtualtreeview/* Copyright: 2000-2003 Mike Lischke 2002-2004 Ralf Junker 2007 Marco Zehe License: MPL-1.1 or LGPL-2.1+ Files: components/viewer/viewercontrol.pas Copyright: 2003-2004 Radek Červinka 2006-2013 Alexander Koblov License: GPL-2.0+ Files: components/viewer/MappingFile.pas Copyright: 2005 Razumikhin Dmitry License: LGPL-2.0+ Files: components/chsdet/* Copyright: 2006 Nick Yakowlew License: LGPL-2.1+ Files: libraries/src/libbz2/* plugins/wcx/zip/fparchive/abbzip2.pas Copyright: 1996-2010 Julian Seward License: BSD-4-clause~bzip2 Files: plugins/wfx/ftp/synapse/* Copyright: 1999-2012 Lukas Gebauer License: BSD-3-clause Files: plugins/wfx/ftp/synapse/ssl_winssl_lib.pas Copyright: 2008 Boris Krasnovskiy 2013 Alexander Koblov License: GPL-2.0+ Files: plugins/wfx/ftp/synapse/ssl_gnutls_lib.pas Copyright: 2002 Andrew McDonald 2004-2006 Free Software Foundation 2013 Alexander Koblov License: GPL-2.0+ Files: plugins/wfx/ftp/src/* src/platform/unix/ujpegthumb.pas src/platform/unix/ukeyfile.pas src/platform/unix/upython.pas src/platform/win/uNTFSLinks.pas src/platform/win/uthumbnailprovider.pas Copyright: 2009-2015 Alexander Koblov License: LGPL-2.1+ Files: plugins/wdx/deb_wdx/src/minigzip.pas Copyright: 1995-1998 Jean-loup Gailly 1998 Jacques Nomssi Nzali License: Zlib Files: plugins/wdx/deb_wdx/src/deb_wdx_intf.pas Copyright: 2005 Ralgh Young License: GPL-2.0+ Files: plugins/wfx/gvfs/* Copyright: 2008-2009 Tomas Bzatek 2009-2010 Alexander Koblov License: LGPL-2.0+ Files: plugins/wdx/rpm_wdx/* plugins/wcx/rpm/* plugins/wcx/cpio/* Copyright: 2000-2002 Mandryka Yurij 2007 Alexander Koblov License: GPL-2.0+ Files: plugins/wcx/sevenzip/* Copyright: 2014-2015 Alexander Koblov License: LGPL-2.1+ Files: plugins/wcx/sevenzip/src/jcl/common/JclCompression.pas Copyright: 2004-2014 Matthias Thoma, Olivier Sannie (obones), Florent Ouchet (outchy), Jan Goyvaerts (jgsoft), Uwe Schuster (uschuster) License: MPL-1.1 or LGPL-2.1+ Files: plugins/wcx/sevenzip/src/jcl/windows/sevenzip.pas plugins/wcx/zip/lzma/* Copyright: 1999-2008 Igor Pavlov License: LGPL-2.1+ Files: plugins/wcx/unbz2/bzip2/bzip2.pas Copyright: 2002 by Daniel Mantione 2007-2009 Alexander Koblov License: GPL-2.0+ Files: plugins/wcx/zip/fparchive/* plugins/wcx/zip/src/ZipApp.pas Copyright: 1997-2002 TurboPower Software 2007-2012 Alexander Koblov License: MPL-1.1 Files: plugins/wcx/zip/fparchive/abxz.pas Copyright: 2014-2015 Alexander Koblov License: X11 Files: plugins/wlx/WlxMplayer/src/qt4.pas Copyright: 2005-2011 Jan Van hijfte License: LGPL-3.0+ Files: scripts/rabbit-vcs.py Copyright: 2009 Jason Heeris 2009 Bruce van der Kooij 2009 Adam Plumb 2014 Alexander Koblov License: GPL-2.0+ Files: src/platform/unix/uudev.pas Copyright: 2008 David Zeuthen 2014 Alexander Koblov License: GPL-2.0+ Files: src/platform/unix/uusersgroups.pas Copyright: 2003 Martin Matusu License: GPL-2.0+ Files: src/platform/unix/mime/umimetype.pas Copyright: 2007 Houng Jen Yee (PCMan) 2014-2015 Alexander Koblov License: GPL-2.0+ Files: src/platform/win/ugdiplus.pas Copyright: 2008 Alexander Koblov License: LGPL-2.0+ Files: src/fsyncdirsdlg.pas Copyright: 2013 Anton Panferov 2014 Alexander Koblov License: GPL-2.0+ Files: src/uhighlighterprocs.pas Copyright: 2000 Michael Hieke License: MPL-1.1 or GPL-2.0+ Files: src/uparitercontrols.pas Copyright: 2004 Flavio Etrusco 2011 Alexander Koblov License: BSD-2-clause Files: src/usyneditfiler.pas Copyright: 1999-2007 Lazarus development team License: MPL-1.1 or GPL-2.0+ Files: src/ufindthread.pas src/ffileproperties.pas src/uColorExt.pas src/ufindfiles.pas src/uglobs.pas src/fFindDlg.pas src/fmain.pas Copyright: 2002 Peter Cernoch 2003-2004 Radek Červinka 2003 Martin Matusu 2006-2012 Alexander Koblov 2008 Dmitry Kolomiets 2008 Vitaly Zotov 2010 Przemysław Nagay License: GPL-2.0+ Files: src/udiffond.pas src/udiffonp.pas Copyright: 2001-2009 Angus Johnson License: other~tdiff The code in the TDiff component is released as freeware provided you agree to the following terms & conditions: 1. the copyright notice, terms and conditions are left unchanged 2. modifications to the code by other authors must be clearly documented and accompanied by the modifier's name. 3. the TDiff component may be freely compiled into binary format and no acknowledgement is required. However, a discrete acknowledgement would be appreciated (eg. in a program's 'About Box'). Files: src/uresample.pas Copyright: 1997-1998 Anders Melander 2009 Alexander Koblov License: other~uresample This software is copyrighted as noted above. It may be freely copied, modified, and redistributed, provided that the copyright notice(s) is preserved on all copies. . There is no warranty or other guarantee of fitness for this software, it is provided solely "as is". Bug reports or fixes may be sent to the author, who may or may not act on them as he desires. . You may not include this software in a program or other software product without supplying the source, or without informing the end-user that the source is available for no extra charge. . If you modify this software, you should include a notice in the "Revision history" section giving the name of the person performing the modification, the date of modification, and the reason for such modification. Files: debian/* Copyright: 2010-2013 Alexander Koblov 2013-2015 Graham Inggs License: GPL-2.0+ License: GPL-2.0+ This package 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 package 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, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". License: GPL-3.0+ This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. . This package 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, see . . On Debian systems, the complete text of the GNU General Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". License: LGPL-2.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2". License: LGPL-2.1+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-2.1". License: LGPL-3.0+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . . On Debian systems, the complete text of the GNU Lesser General Public License can be found in "/usr/share/common-licenses/LGPL-3". License: BSD-2-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. . 3. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: BSD-4-clause~bzip2 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: . 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. . 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. . 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. . 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. . THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License: MPL-1.1 The contents of this file are 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/MPL/ . 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. License: X11 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License: Zlib This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. . Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: . 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. doublecmd-0.7.1/install/linux/deb/doublecmd/doublecmd-plugins.lintian-overrides0000644000175000001440000000147012561673162027022 0ustar alexxusersdoublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/dsx/dsxlocate/dsxlocate.dsx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wcx/cpio/cpio.wcx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wcx/deb/deb.wcx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wcx/rpm/rpm.wcx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wdx/deb_wdx/deb_wdx.wdx doublecmd-plugins: shared-lib-without-dependency-information usr/lib/doublecmd/plugins/wdx/rpm_wdx/rpm_wdx.wdx doublecmd-plugins: library-not-linked-against-libc usr/lib/doublecmd/plugins/wfx/ftp/ftp.wfx doublecmd-plugins: shlib-with-non-pic-code doublecmd-plugins: missing-depends-line doublecmd-0.7.1/install/linux/deb/libunrar/0000755000175000001440000000000012675717724017714 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/libunrar/rules0000755000175000001440000000177512222000001020737 0ustar alexxusers#!/usr/bin/make -f # Made with the aid of dh_make, by Petr Cech. # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess. # Some lines taken from debmake, by Christoph Lameter. build: dh_testdir make lib CXXFLAGS+="-fPIC -DSILENT" LDFLAGS+="-Wl,-soname,libunrar.so.0" clean: dh_testdir dh_testroot make clean rm -f libunrar.so dh_clean # Build architecture-independent files here. binary-indep: build # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build dh_testdir dh_testroot dh_prep dh_installdirs install -o root -g root -s -m 0644 libunrar.so debian/libunrar/usr/lib install -m 0644 debian/lintian/libunrar debian/libunrar/usr/share/lintian/overrides dh_link usr/lib/libunrar.so usr/lib/libunrar.so.0 dh_installdocs dh_installchangelogs dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary doublecmd-0.7.1/install/linux/deb/libunrar/dirs0000644000175000001440000000004411517020145020550 0ustar alexxusersusr/lib usr/share/lintian/overrides doublecmd-0.7.1/install/linux/deb/libunrar/source/0000755000175000001440000000000012675717724021214 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/libunrar/source/format0000644000175000001440000000001411516774223022410 0ustar alexxusers3.0 (quilt) doublecmd-0.7.1/install/linux/deb/libunrar/shlibs0000644000175000001440000000001411517020145021070 0ustar alexxuserslibunrar 0 doublecmd-0.7.1/install/linux/deb/libunrar/control0000644000175000001440000000105112436425752021304 0ustar alexxusersSource: unrar-nonfree Section: non-free/utils Priority: optional Maintainer: Alexander Koblov Homepage: http://www.rarlabs.com Build-Depends: debhelper (>= 7) Standards-Version: 3.8.4 XS-Autobuild: yes Package: libunrar Section: non-free/libs Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Unarchiver for .rar files (non-free version) - shared library Unrar can extract files from .rar archives. If you want to create .rar archives, install package rar. . This package includes the dynamic library. doublecmd-0.7.1/install/linux/deb/libunrar/postinst0000755000175000001440000000007611556027124021511 0ustar alexxusers#!/bin/sh set -e ldconfig /usr/lib/libunrar.so #DEBHELPER# doublecmd-0.7.1/install/linux/deb/libunrar/compat0000644000175000001440000000000211516774223021100 0ustar alexxusers7 doublecmd-0.7.1/install/linux/deb/libunrar/changelog0000644000175000001440000000022412436425752021554 0ustar alexxusersunrar-nonfree (5.2.2-0) unstable; urgency=low * Non-maintainer upload -- Alexander Koblov Sat, 29 Nov 2014 23:04:07 +0300 doublecmd-0.7.1/install/linux/deb/libunrar/lintian/0000755000175000001440000000000012675717724021352 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/libunrar/lintian/libunrar0000644000175000001440000000005411517020145023064 0ustar alexxuserslibunrar: package-name-doesnt-match-sonames doublecmd-0.7.1/install/linux/deb/libunrar/watch0000644000175000001440000000015511516774223020734 0ustar alexxusersversion=3 http://www.rarlab.com/rar_add.htm http://www.rarlab.com/rar/unrarsrc-(.*)\.tar\.gz debian uupdate doublecmd-0.7.1/install/linux/deb/libunrar/copyright0000644000175000001440000000460211516774223021637 0ustar alexxusersThis package was debianized by Petr Cech on Thu, 16 Mar 2000 18:51:33 +0100. Further modifications have been made by Chris Anderson on Wed Aug 25 19:03:47 EDT 2004 It was downloaded from http://www.rarlabs.com/rar_add.htm Copyright: Copyright (c) 1993-2005 Alexander L. Roshal NOTE: this software is non-free, therefore carefully read this license before doing anything with it. In particular, this source code may not be used for recreating the rar compression algorithm. Full license follows: ****** ***** ****** UnRAR - free utility for RAR archives ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ****** ******* ****** License for use and distribution of ** ** ** ** ** ** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ** ** ** ** ** ** FREE portable version ~~~~~~~~~~~~~~~~~~~~~ The source code of UnRAR utility is freeware. This means: 1. All copyrights to RAR and the utility UnRAR are exclusively owned by the author - Alexander Roshal. 2. The UnRAR sources may be used in any software to handle RAR archives without limitations free of charge, but cannot be used to re-create the RAR compression algorithm, which is proprietary. Distribution of modified UnRAR sources in separate form or as a part of other software is permitted, provided that it is clearly stated in the documentation and source comments that the code may not be used to develop a RAR (WinRAR) compatible archiver. 3. The UnRAR utility may be freely distributed. It is allowed to distribute UnRAR inside of other software packages. 4. THE RAR ARCHIVER AND THE UnRAR UTILITY ARE DISTRIBUTED "AS IS". NO WARRANTY OF ANY KIND IS EXPRESSED OR IMPLIED. YOU USE AT YOUR OWN RISK. THE AUTHOR WILL NOT BE LIABLE FOR DATA LOSS, DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR MISUSING THIS SOFTWARE. 5. Installing and using the UnRAR utility signifies acceptance of these terms and conditions of the license. 6. If you don't agree with terms of the license you must remove UnRAR files from your storage devices and cease to use the utility. Thank you for your interest in RAR and UnRAR. Alexander L. Roshal This package is auto-buildable doublecmd-0.7.1/install/linux/deb/libunrar/postrm0000755000175000001440000000013711556027124021150 0ustar alexxusers#!/bin/sh set -e if [ "$1" = "remove" ]; then ldconfig /usr/lib/libunrar.so fi #DEBHELPER# doublecmd-0.7.1/install/linux/deb/doublecmd-help/0000755000175000001440000000000012675717724020762 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd-help/rules0000755000175000001440000000334511610363331022022 0ustar alexxusers#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # GNU copyright 1997 to 1999 by Joey Hess. # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir # Add here commands to compile the package. touch build-stamp clean: dh_testdir dh_testroot # Add here commands to clean up after the build process. rm -f build-stamp configure-stamp dh_clean install: build dh_testdir dh_testroot dh_prep dh_installdirs -A usr/share/doublecmd/doc # Add here commands to install the package. cp -r en $(CURDIR)/debian/doublecmd-help-en/usr/share/doublecmd/doc cp -r ru $(CURDIR)/debian/doublecmd-help-ru/usr/share/doublecmd/doc cp -r uk $(CURDIR)/debian/doublecmd-help-uk/usr/share/doublecmd/doc for pkg in `dh_listpackages` ; do \ find $(CURDIR)/debian/$$pkg/usr/share/ -type f | xargs chmod a-x ; \ done # Build architecture-dependent files here. binary-arch: build install # We have nothing to do by default. # Build architecture-independent files here. binary-indep: build install dh_testdir dh_testroot # dh_movefiles dh_installchangelogs dh_link dh_installdocs dh_installexamples dh_install # dh_installmenu # dh_installdebconf # dh_installlogrotate # dh_installemacsen # dh_installpam # dh_installmime # dh_installinit # dh_installcron # dh_installinfo dh_installman dh_strip dh_compress dh_fixperms # dh_perl # dh_python # dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install doublecmd-0.7.1/install/linux/deb/doublecmd-help/source/0000755000175000001440000000000012675717724022262 5ustar alexxusersdoublecmd-0.7.1/install/linux/deb/doublecmd-help/source/format0000644000175000001440000000001411644070300023441 0ustar alexxusers3.0 (quilt) doublecmd-0.7.1/install/linux/deb/doublecmd-help/doublecmd-help-ru.doc-base0000644000175000001440000000047211516546640025662 0ustar alexxusersDocument: doublecmd-help-ru Title: Documentation for the Double Commander (Russian) Author: Rustem Rakhimov Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/ru/index.html Files: /usr/share/doublecmd/doc/ru/*.html doublecmd-0.7.1/install/linux/deb/doublecmd-help/control0000644000175000001440000000240411610363331022340 0ustar alexxusersSource: doublecmd-help Section: doc Priority: optional Maintainer: Alexander Koblov Build-Depends: debhelper (>= 7.0.0) Standards-Version: 3.8.4 Homepage: http://doublecmd.sourceforge.net/ Package: doublecmd-help-en Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (English) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in English. Package: doublecmd-help-ru Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (Russian) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in Russian. Package: doublecmd-help-uk Architecture: all Depends: doublecmd-gtk | doublecmd-qt Suggests: www-browser Description: Documentation for the Double Commander (Ukrainian) This package contains the documentation files for the Double Commander designed for use with the external web browsers. . This package contains the documentation for the DC in Ukrainian. doublecmd-0.7.1/install/linux/deb/doublecmd-help/doublecmd-help-uk.doc-base0000644000175000001440000000052711610366102025640 0ustar alexxusersDocument: doublecmd-help-uk Title: Documentation for the Double Commander (Ukrainian) Author: Rustem Rakhimov , Максим aka Ma$terok Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/uk/index.html Files: /usr/share/doublecmd/doc/uk/*.html doublecmd-0.7.1/install/linux/deb/doublecmd-help/compat0000644000175000001440000000000211516300753022137 0ustar alexxusers5 doublecmd-0.7.1/install/linux/deb/doublecmd-help/changelog0000644000175000001440000000024611516546200022614 0ustar alexxusersdoublecmd-help (0.4.6-3256~ppa) lucid; urgency=low * Initial release (Closes: #2931241) -- Alexander Koblov Thu, 30 May 2010 21:04:07 -0500 doublecmd-0.7.1/install/linux/deb/doublecmd-help/copyright0000644000175000001440000000213611516300753022676 0ustar alexxusersFormat-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 Name: Double Commander Source: http://doublecmd.sourceforge.net/ Maintainer: Alexander Koblov Copyright: © 2006-2010 Alexander Koblov License: GPL-2+ 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 package; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. doublecmd-0.7.1/install/linux/deb/doublecmd-help/doublecmd-help-en.doc-base0000644000175000001440000000053511516546640025636 0ustar alexxusersDocument: doublecmd-help-en Title: Documentation for the Double Commander (English) Author: Rustem Rakhimov , Rod J Abstract: This manual describes how to use Double Commander. Section: File Management Format: HTML Index: /usr/share/doublecmd/doc/en/index.html Files: /usr/share/doublecmd/doc/en/*.html doublecmd-0.7.1/install/linux/convert-rpm-txz.sh0000755000175000001440000000362312670622717020776 0ustar alexxusers#!/bin/bash # This script converts *.rpm package to portable package # Script directory SCRIPT_DIR=$(pwd) # Source directory DC_SOURCE_DIR=$SCRIPT_DIR/../.. # The new package will be saved here PACK_DIR=$SCRIPT_DIR/release # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Root directory DC_ROOT_DIR=$DC_TEMP_DIR/doublecmd # Base file name BASE_NAME=$(basename $1 .rpm) # Set widgetset LCL_PLATFORM=$(echo $BASE_NAME | grep -Po '(?<=doublecmd-)[^-]+') # Set version DC_VER=$(echo $BASE_NAME | grep -Po "(?<=doublecmd-$LCL_PLATFORM-)[^-]+") # Set processor architecture CPU_TARGET=${BASE_NAME##*.} if [ "$CPU_TARGET" = "i686" ]; then export CPU_TARGET=i386 fi # Update widgetset if [ "$LCL_PLATFORM" = "gtk" ]; then export LCL_PLATFORM=gtk2 fi # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR pushd $DC_TEMP_DIR $SCRIPT_DIR/rpm2cpio.sh $1 | cpio -idmv if [ "$CPU_TARGET" = "x86_64" ] then mv usr/lib64/doublecmd ./ else mv usr/lib/doublecmd ./ fi # Remove symlinks rm -f doublecmd/doc rm -f doublecmd/language rm -f doublecmd/pixmaps # Move directories and files mv usr/share/doublecmd/doc $DC_ROOT_DIR/ mv usr/share/doublecmd/language $DC_ROOT_DIR/ mv usr/share/doublecmd/pixmaps $DC_ROOT_DIR/ mv usr/share/pixmaps/doublecmd.png $DC_ROOT_DIR/ # Copy libraries pushd $DC_SOURCE_DIR/install/linux cp -a lib/$CPU_TARGET/*.so* $DC_ROOT_DIR/ cp -a lib/$CPU_TARGET/$LCL_PLATFORM/*.so* $DC_ROOT_DIR/ popd # Copy script for execute portable version install -m 755 $DC_SOURCE_DIR/doublecmd.sh $DC_ROOT_DIR/ # Make portable config file sed -i -e 's/False/True/' $DC_ROOT_DIR/doublecmd.xml # Create archive tar -cJvf $PACK_DIR/doublecmd-$DC_VER.$LCL_PLATFORM.$CPU_TARGET.tar.xz doublecmd popd # Clean rm -rf $DC_TEMP_DIR doublecmd-0.7.1/install/linux/lib/0000755000175000001440000000000012675717724016112 5ustar alexxusersdoublecmd-0.7.1/install/linux/lib/i386/0000755000175000001440000000000012675717724016603 5ustar alexxusersdoublecmd-0.7.1/install/linux/lib/i386/qt/0000755000175000001440000000000012675717724017227 5ustar alexxusersdoublecmd-0.7.1/install/linux/lib/x86_64/0000755000175000001440000000000012675717724017050 5ustar alexxusersdoublecmd-0.7.1/install/linux/lib/x86_64/qt/0000755000175000001440000000000012675717724017474 5ustar alexxusersdoublecmd-0.7.1/install/linux/lib/readme.txt0000644000175000001440000000031112014201074020050 0ustar alexxusersBefore create packages (before run create_packages.sh) copy in this directory third-party libraries: - libunrar.so - needed for unrar plugin - libqt4intf.so - needed for qt4 version of Double Commanderdoublecmd-0.7.1/install/linux/description-pak0000755000175000001440000000023410774773057020364 0ustar alexxusersDouble Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. doublecmd-0.7.1/install/linux/update-repo-obs.sh0000755000175000001440000000752412675713165020714 0ustar alexxusers#!/bin/bash # This script updates Double Commander Open Build Service (OBS) repository # Set Double Commander version DC_VER=0.7.1 # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/doublecmd-$DC_VER # Directory for DC help DC_HELP_DIR=$DC_TEMP_DIR/doublecmd-help-$DC_VER # Directory for the openSUSE Build Service (OBS) DC_OBS_DIR=$HOME/.obs # OBS project home directory DC_OBS_WEB_DIR=home:Alexx2000 # OBS project directory DC_OBS_PRJ_DIR=$DC_OBS_DIR/$DC_OBS_WEB_DIR # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR update_doublecmd() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Prepare doublecmd-*.spec file cp -a rpm/doublecmd-*.spec $DC_TEMP_DIR # Create archive with source code pushd $DC_TEMP_DIR tar -cvzf doublecmd-$DC_VER.tar.gz doublecmd-$DC_VER if [ ! -d "$DC_OBS_DIR" ] then mkdir -p $DC_OBS_DIR cd $DC_OBS_DIR osc checkout $DC_OBS_WEB_DIR else pushd $DC_OBS_PRJ_DIR/doublecmd-gtk osc up popd pushd $DC_OBS_PRJ_DIR/doublecmd-qt osc up popd fi # Upload GTK2 archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-gtk/doublecmd-gtk.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-gtk/doublecmd-$DC_VER.tar.gz mv doublecmd-gtk.spec $DC_OBS_PRJ_DIR/doublecmd-gtk/ cp -a doublecmd-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-gtk/ pushd $DC_OBS_PRJ_DIR/doublecmd-gtk osc commit doublecmd-gtk.spec doublecmd-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd # Upload Qt4 archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-qt/doublecmd-qt.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-qt/doublecmd-$DC_VER.tar.gz mv doublecmd-qt.spec $DC_OBS_PRJ_DIR/doublecmd-qt/ cp -a doublecmd-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-qt/ pushd $DC_OBS_PRJ_DIR/doublecmd-qt osc commit doublecmd-qt.spec doublecmd-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd popd } update_doublecmd_svn() { trap "stty echo; echo; exit" INT TERM EXIT read -s -p "Enter password: " PASSWORD; echo echo "Update Double Commander (Qt)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-qt?cmd=runservice echo "Update Double Commander (Gtk)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-gtk?cmd=runservice echo "Update Double Commander (Debian)" curl -u Alexx2000:$PASSWORD -X POST https://api.opensuse.org/source/home:Alexx2000:doublecmd-svn/doublecmd-deb?cmd=runservice exit 0 } update_doublecmd_help() { # Export from SVN svn export ../../doc $DC_HELP_DIR # Remove text files rm -f $DC_HELP_DIR/*.txt # Prepare doublecmd-help.spec file cp -a rpm/doublecmd-help.spec $DC_TEMP_DIR # Create archive with source code pushd $DC_TEMP_DIR tar -cvzf doublecmd-help-$DC_VER.tar.gz doublecmd-help-$DC_VER if [ ! -d "$DC_OBS_DIR" ] then mkdir -p $DC_OBS_DIR cd $DC_OBS_DIR osc checkout $DC_OBS_WEB_DIR else pushd $DC_OBS_PRJ_DIR/doublecmd-help osc up popd fi # Upload archive to OBS rm -f $DC_OBS_PRJ_DIR/doublecmd-help/doublecmd-help.spec rm -f $DC_OBS_PRJ_DIR/doublecmd-help/doublecmd-help-$DC_VER.tar.gz mv doublecmd-help.spec $DC_OBS_PRJ_DIR/doublecmd-help/ mv doublecmd-help-$DC_VER.tar.gz $DC_OBS_PRJ_DIR/doublecmd-help/ cd $DC_OBS_PRJ_DIR/doublecmd-help osc commit doublecmd-help.spec doublecmd-help-$DC_VER.tar.gz -m "Update to revision $DC_REVISION" popd } update_all() { update_doublecmd update_doublecmd_help } case $1 in doublecmd-help) update_doublecmd_help;; doublecmd-svn) update_doublecmd_svn;; doublecmd) update_doublecmd;; *) update_all;; esac # Clean rm -rf $DC_TEMP_DIR doublecmd-0.7.1/install/linux/update-repo-ppa.sh0000755000175000001440000000674112675713165020711 0ustar alexxusers#!/bin/bash # This script updates Double Commander Personal Package Archive (PPA) repository # Set Double Commander version DC_VER=0.7.1 # Set Ubuntu series DISTRO=( wily xenial ) # Temp directory DC_TEMP_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Directory for DC source code DC_SOURCE_DIR=$DC_TEMP_DIR/doublecmd-$DC_VER # Directory for DC help DC_HELP_DIR=$DC_TEMP_DIR/doublecmd-help-$DC_VER # Recreate temp directory rm -rf $DC_TEMP_DIR mkdir -p $DC_TEMP_DIR update_doublecmd() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Create doublecmd-x.x.x.orig.tar.gz pushd $DC_SOURCE_DIR/.. tar -cvzf $DC_TEMP_DIR/doublecmd_$DC_VER.orig.tar.gz doublecmd-$DC_VER popd # Prepare debian directory mkdir -p $DC_SOURCE_DIR/debian cp -r $DC_SOURCE_DIR/install/linux/deb/doublecmd/* $DC_SOURCE_DIR/debian # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_SOURCE_DIR/debian dch -D $DIST -v $DC_VER-0+svn$DC_REVISION~$DIST "Non-maintainer upload (revision $DC_REVISION)" popd # Create archive with source code pushd $DC_SOURCE_DIR if [ $DIST = ${DISTRO[0]} ] then debuild -S -sa else debuild -S -sd fi popd done } update_doublecmd_svn() { # Export from SVN svn export ../../ $DC_SOURCE_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Prepare debian directory mkdir -p $DC_SOURCE_DIR/debian cp -r $DC_SOURCE_DIR/install/linux/deb/doublecmd/* $DC_SOURCE_DIR/debian echo '1.0' > $DC_SOURCE_DIR/debian/source/format # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_SOURCE_DIR/debian dch -D $DIST -v $DC_VER-0+svn$DC_REVISION~$DIST "Non-maintainer upload (revision $DC_REVISION)" popd # Create archive with source code pushd $DC_SOURCE_DIR debuild -S -sa popd done # Upload archives to PPA cd $DC_TEMP_DIR dput -U ppa:alexx2000/doublecmd-svn $(ls -xrt --file-type *.changes) # Clean rm -rf $DC_TEMP_DIR # Exit exit 0 } update_doublecmd_help() { # Create output folder mkdir -p $DC_HELP_DIR # Save revision number DC_REVISION=`$(pwd)/update-revision.sh ../../ $DC_SOURCE_DIR` # Copy help files cp -r ../../doc/en $DC_HELP_DIR/ cp -r ../../doc/ru $DC_HELP_DIR/ cp -r ../../doc/uk $DC_HELP_DIR/ # Create doublecmd-help-x.x.x.orig.tar.gz pushd $DC_HELP_DIR/.. tar -cvzf $DC_TEMP_DIR/doublecmd-help_$DC_VER.orig.tar.gz doublecmd-help-$DC_VER popd # Prepare debian directory svn export deb/doublecmd-help $DC_HELP_DIR/debian # Create source package for each distro for DIST in "${DISTRO[@]}" do # Update changelog file pushd $DC_HELP_DIR/debian dch -m -D $DIST -v $DC_VER-$DC_REVISION~$DIST "Update to revision $DC_REVISION" popd # Create archive with source code pushd $DC_HELP_DIR if [ $DIST = ${DISTRO[0]} ] then debuild -S -sa else debuild -S -sd fi popd done } update_all() { update_doublecmd update_doublecmd_help } case $1 in doublecmd-help) update_doublecmd_help;; doublecmd-svn) update_doublecmd_svn;; doublecmd) update_doublecmd;; *) update_all;; esac # Upload archives to PPA cd $DC_TEMP_DIR dput -U ppa:alexx2000/doublecmd $(ls -xrt --file-type *.changes) # Clean rm -rf $DC_TEMP_DIR doublecmd-0.7.1/install/linux/doublecmd.xml0000644000175000001440000000237112562442777020025 0ustar alexxusers False Pascal sources *.pas;*.pp 32768 Pascal binaries *.ppu;*.o;*.dcu 16711680 Specified Executables * 55758 -rwxrwxr*x Executables * 32768 -*x* wlxMplayer %commander_path%/plugins/wlx/wlxmplayer/wlxmplayer.wlx (EXT="MPG")|(EXT="AVI")|(EXT="MPEG")|(EXT="FLV") doublecmd-0.7.1/install/linux/rpm2cpio.sh0000755000175000001440000000246212523377401017424 0ustar alexxusers#!/bin/sh # Prevent gawk >= 4.0.x from getting funny ideas wrt UTF in printf() LANG=C pkg=$1 if [ "$pkg" = "" -o ! -e "$pkg" ]; then echo "no package supplied" 1>&2 exit 1 fi leadsize=96 o=`expr $leadsize + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5` dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9` # echo "sig il: $il dl: $dl" sigsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $sigsize + \( 8 - \( $sigsize \% 8 \) \) \% 8 + 8` set `od -j $o -N 8 -t u1 $pkg` il=`expr 256 \* \( 256 \* \( 256 \* $2 + $3 \) + $4 \) + $5` dl=`expr 256 \* \( 256 \* \( 256 \* $6 + $7 \) + $8 \) + $9` # echo "hdr il: $il dl: $dl" hdrsize=`expr 8 + 16 \* $il + $dl` o=`expr $o + $hdrsize` comp=`dd if="$pkg" ibs=$o skip=1 count=1 2>/dev/null \ | dd bs=3 count=1 2>/dev/null` gz="`echo . | awk '{ printf("%c%c", 0x1f, 0x8b); }'`" lzma="`echo . | awk '{ printf("%cLZ", 0xff); }'`" xz="`echo . | awk '{ printf("%c7z", 0xfd); }'`" case "$comp" in BZh) dd if="$pkg" ibs=$o skip=1 2>/dev/null | bunzip2 ;; "$gz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | gunzip ;; "$xz"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | xzcat ;; "$lzma"*) dd if="$pkg" ibs=$o skip=1 2>/dev/null | unlzma ;; *) echo "Unrecognized rpm file: $pkg"; exit 1 ;; esac doublecmd-0.7.1/install/linux/doublecmd.10000644000175000001440000000105211646573261017353 0ustar alexxusers.TH "doublecmd" "1" "16 October 2011" "Double Commander" .SH "NAME" doublecmd \- Twin-panel (commander-style) file manager. .SH "SYNOPSIS" .B doublecmd .I "[options]" .SH "DESCRIPTION" Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. .SH "OPTIONS" .TP .BI " \-\-config\-dir=" config directory, where Double Commander stores its config files. Default is $HOME/.config/doublecmd. .SH "Websites" .IP .BR http://doublecmd.sourceforge.net doublecmd-0.7.1/install/linux/doublecmd.desktop0000755000175000001440000000102112673524511020656 0ustar alexxusers[Desktop Entry] Name=Double Commander Comment=Double Commander is a cross platform open source file manager with two panels side by side. Terminal=false Icon=doublecmd Exec=doublecmd %F Type=Application MimeType=inode/directory; Categories=Utility;FileTools;FileManager; Keywords=folder;manager;explore;disk;filesystem;orthodox;copy;queue;queuing;operations; Comment[ru]=Double Commander — это кроссплатформенный двухпанельный файловый менеджер с открытым кодом. doublecmd-0.7.1/install/linux/install-help.sh0000644000175000001440000000157312407307365020267 0ustar alexxusers#!/bin/sh set -e # Parse input parameters CKNAME=$(basename "$0") args=$(getopt -n $CKNAME -o P:,I: -l portable-prefix:,install-prefix:,default -- "$@") eval set -- $args for A do case "$A" in --) DC_HELP_INSTALL_DIR=/usr/share/doublecmd/doc ;; -P|--portable-prefix) shift DC_HELP_INSTALL_DIR=$(eval echo $1/doublecmd/doc) break ;; -I|--install-prefix) shift DC_INSTALL_PREFIX=$(eval echo $1) DC_HELP_INSTALL_DIR=$DC_INSTALL_PREFIX/usr/share/doublecmd/doc break ;; esac shift done # Clean help directory rm -rf $DC_HELP_INSTALL_DIR/* # Copy English help files cp -r doc/en $DC_HELP_INSTALL_DIR/ # Copy Russian help files cp -r doc/ru $DC_HELP_INSTALL_DIR/ # Copy Ukrainian help files cp -r doc/uk $DC_HELP_INSTALL_DIR/doublecmd-0.7.1/install/create_packages.mac0000755000175000001440000000332612675713165017772 0ustar alexxusers#!/bin/sh # Set Double Commander version DC_VER=0.7.1 # The new package will be saved here PACK_DIR=$(pwd)/darwin/release # Temp dir for creating *.dmg package BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Create temp dir for building BUILD_DC_TMP_DIR=/var/tmp/doublecmd-$DC_VER # Export from SVN rm -rf $BUILD_DC_TMP_DIR svn export ../ $BUILD_DC_TMP_DIR # Save revision number DC_REVISION=$(linux/update-revision.sh ../ $BUILD_DC_TMP_DIR) # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi # Set widgetset if [ -z $lcl ]; then # Use Qt4 when build 64 bit if [ "$CPU_TARGET" = "x86_64" ] then export lcl=qt else export lcl=carbon fi fi # Set minimal Mac OS X target version export MACOSX_DEPLOYMENT_TARGET=10.5 # Copy libraries cp -a darwin/lib/$CPU_TARGET/*.dylib $BUILD_DC_TMP_DIR/ cp -a darwin/lib/$CPU_TARGET/$lcl/*.dylib $BUILD_DC_TMP_DIR/ cd $BUILD_DC_TMP_DIR # Build all components of Double Commander ./build.sh beta # Update application bundle version defaults write $(pwd)/doublecmd.app/Contents/Info CFBundleVersion $DC_REVISION defaults write $(pwd)/doublecmd.app/Contents/Info CFBundleShortVersionString $DC_VER plutil -convert xml1 $(pwd)/doublecmd.app/Contents/Info.plist # Create *.dmg package mkdir -p $BUILD_PACK_DIR install/darwin/install.sh $BUILD_PACK_DIR cd $BUILD_PACK_DIR if [ "$lcl" = "qt" ]; then macdeployqt doublecmd.app fi mv doublecmd.app 'Double Commander.app' hdiutil create -anyowners -volname "Double Commander" -imagekey zlib-level=9 -format UDZO -srcfolder 'Double Commander.app' $PACK_DIR/doublecmd-$DC_VER-$DC_REVISION.$lcl.$CPU_TARGET.dmg # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR doublecmd-0.7.1/install/create_packages.sh0000755000175000001440000001012112675713165017633 0ustar alexxusers#!/bin/sh # Set Double Commander version DC_VER=0.7.1 # The new package will be saved here PACK_DIR=$(pwd)/linux/release # Temp dir for creating *.tar.bz2 package BUILD_PACK_DIR=/var/tmp/doublecmd-$(date +%y.%m.%d) # Create temp dir for building BUILD_DC_TMP_DIR=/var/tmp/doublecmd-$DC_VER help() { echo 'Usage: create_packages.sh [options]' echo echo "Options:" echo '-A: All packages (by default)' echo '-D: Debian package' echo '-R: RPM package' echo '-S: Slackware package' echo '-P: Portable package' echo '-H: Help package' echo '--cpu=: Target CPU' echo '--ws=: Target widgetset' echo exit 1 } # Parse input parameters CKNAME=$(basename "$0") args=$(getopt -n $CKNAME -o ADRSPHh -l cpu:,ws:,help,default -- "$@") eval set -- $args while [ "$1" != "--" ]; do case "$1" in -h|--help) help;; -A) shift;CK_DEBIAN=1;CK_REDHAT=1;CK_SLACKWARE=1;CK_PORTABLE=1;CK_HELP=1;; -D) shift;CK_DEBIAN=1;; -R) shift;CK_REDHAT=1;; -S) shift;CK_SLACKWARE=1;; -P) shift;CK_PORTABLE=1;; -H) shift;CK_HELP=1;; --cpu) shift;export CPU_TARGET=$(eval echo $1);shift;; --ws) shift;export lcl=$(eval echo $1);shift;; esac done if [ -z "$CK_DEBIAN" ] && [ -z "$CK_REDHAT" ] && [ -z "$CK_SLACKWARE" ] && [ -z "$CK_PORTABLE" ] && [ -z "$CK_HELP" ]; then CK_DEBIAN=1 CK_REDHAT=1 CK_SLACKWARE=1 CK_PORTABLE=1 CK_HELP=1 fi # Export from SVN rm -rf $BUILD_DC_TMP_DIR svn export ../ $BUILD_DC_TMP_DIR # Update revision number linux/update-revision.sh ../ $BUILD_DC_TMP_DIR # Copy package description file cp linux/description-pak $BUILD_DC_TMP_DIR/ # Set widgetset if [ -z $lcl ]; then export lcl=gtk2 fi # Set processor architecture if [ -z $CPU_TARGET ]; then export CPU_TARGET=$(fpc -iTP) fi # Debian package architecture if [ "$CPU_TARGET" = "x86_64" ] then export DEB_ARCH="amd64" else export DEB_ARCH=$CPU_TARGET fi # Copy libraries cp -a linux/lib/$CPU_TARGET/*.so* $BUILD_DC_TMP_DIR/ cp -a linux/lib/$CPU_TARGET/$lcl/*.so* $BUILD_DC_TMP_DIR/ cd $BUILD_DC_TMP_DIR # Build all components of Double Commander ./build.sh beta # Export variables for checkinstall export MAINTAINER="Alexander Koblov " if [ "$CK_REDHAT" ]; then # Create *.rpm package checkinstall -R --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$CPU_TARGET --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=Applications/File --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_DEBIAN" ]; then # Create *.deb package checkinstall -D --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$DEB_ARCH --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=contrib/misc --requires=libx11-6 --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_SLACKWARE" ]; then # Create *.tgz package checkinstall -S --default --pkgname=doublecmd --pkgversion=$DC_VER --pkgarch=$CPU_TARGET --pkgrelease=1.$lcl --pkglicense=GPL --pkggroup=Applications/File --nodoc --pakdir=$PACK_DIR $BUILD_DC_TMP_DIR/install/linux/install.sh fi if [ "$CK_PORTABLE" ]; then # Create *.tar.bz2 package mkdir -p $BUILD_PACK_DIR install/linux/install.sh --portable-prefix=$BUILD_PACK_DIR cp -r doc/en $BUILD_PACK_DIR/doublecmd/doc cd $BUILD_PACK_DIR sed -i -e 's/False/True/' doublecmd/doublecmd.xml tar -cJvf $PACK_DIR/doublecmd-$DC_VER.$lcl.$CPU_TARGET.tar.xz doublecmd fi if [ "$CK_HELP" ]; then # Create help packages cd $BUILD_DC_TMP_DIR # Copy help files install/linux/install-help.sh --portable-prefix=$BUILD_PACK_DIR # Create help package for each language cd $BUILD_PACK_DIR/doublecmd/doc for HELP_LANG in `ls` do cd $BUILD_PACK_DIR/doublecmd tar -cJvf $PACK_DIR/doublecmd-help-$HELP_LANG-$DC_VER.noarch.tar.xz doc/$HELP_LANG done fi # Clean DC build dir rm -rf $BUILD_DC_TMP_DIR rm -rf $BUILD_PACK_DIR doublecmd-0.7.1/install/create_packages.bat0000644000175000001440000000413512675713165017774 0ustar alexxusers rem Set Double Commander version set DC_VER=0.7.1 rem Path to subversion set SVN_EXE="c:\Program Files\SlikSvn\bin\svn.exe" rem Path to Inno Setup compiler set ISCC_EXE="c:\Program Files\Inno Setup 5\ISCC.exe" rem The new package will be created from here set BUILD_PACK_DIR=%TEMP%\doublecmd-%DATE: =% rem The new package will be saved here set PACK_DIR=%CD%\windows\release rem Create temp dir for building set BUILD_DC_TMP_DIR=%TEMP%\doublecmd-%DC_VER% rm -rf %BUILD_DC_TMP_DIR% %SVN_EXE% export ..\ %BUILD_DC_TMP_DIR% rem Save revision number mkdir %BUILD_DC_TMP_DIR%\.svn copy ..\.svn\entries %BUILD_DC_TMP_DIR%\.svn\ rem Prepare package build dir rm -rf %BUILD_PACK_DIR% mkdir %BUILD_PACK_DIR% mkdir %BUILD_PACK_DIR%\release rem Copy needed files copy windows\doublecmd.iss %BUILD_PACK_DIR%\ copy windows\portable.diff %BUILD_PACK_DIR%\ rem Get processor architecture if "%CPU_TARGET%" == "" ( if "%PROCESSOR_ARCHITECTURE%" == "x86" ( set CPU_TARGET=i386 set OS_TARGET=win32 ) else if "%PROCESSOR_ARCHITECTURE%" == "AMD64" ( set CPU_TARGET=x86_64 set OS_TARGET=win64 ) ) rem Copy libraries copy windows\lib\%CPU_TARGET%\*.dll %BUILD_DC_TMP_DIR%\ cd /D %BUILD_DC_TMP_DIR% rem Build all components of Double Commander call build.bat beta rem Prepare install files call %BUILD_DC_TMP_DIR%\install\windows\install.bat cd /D %BUILD_PACK_DIR% rem Create *.exe package %ISCC_EXE% /F"doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%" doublecmd.iss rem Move created package move release\*.exe %PACK_DIR% rem Create *.zip package patch doublecmd/doublecmd.xml portable.diff zip -9 -Dr %PACK_DIR%\doublecmd-%DC_VER%.%CPU_TARGET%-%OS_TARGET%.zip doublecmd rem Create help packages cd /D %BUILD_DC_TMP_DIR% rem Copy help files call %BUILD_DC_TMP_DIR%\install\windows\install-help.bat rem Create help package for each language cd %BUILD_PACK_DIR%\doublecmd for /D %%f in (doc\*) do zip -9 -Dr %PACK_DIR%\doublecmd-help-%%~nf-%DC_VER%.noarch.zip %%f rem Clean temp directories cd \ rm -rf %BUILD_DC_TMP_DIR% rm -rf %BUILD_PACK_DIR% doublecmd-0.7.1/units/0000755000175000001440000000000012675717741013700 5ustar alexxusersdoublecmd-0.7.1/units/x86_64-linux-gtk2/0000755000175000001440000000000012675717741016640 5ustar alexxusersdoublecmd-0.7.1/units/i386-linux-qt/0000755000175000001440000000000012675717741016150 5ustar alexxusersdoublecmd-0.7.1/units/i386-linux-gtk2/0000755000175000001440000000000012675717741016373 5ustar alexxusersdoublecmd-0.7.1/units/revision.inc0000644000175000001440000000007012651172634016214 0ustar alexxusers// Created by Svn2RevisionInc const RevisionStr = ''; doublecmd-0.7.1/units/x86_64-linux-qt/0000755000175000001440000000000012675717741016415 5ustar alexxusersdoublecmd-0.7.1/units/x86_64-win64-win32/0000755000175000001440000000000012675717741016543 5ustar alexxusersdoublecmd-0.7.1/units/x86_64-darwin-qt/0000755000175000001440000000000012675717741016542 5ustar alexxusersdoublecmd-0.7.1/units/dcrevision.inc0000644000175000001440000000007112675717741016536 0ustar alexxusers// Created by Svn2RevisionInc const dcRevision = '6739'; doublecmd-0.7.1/units/i386-win32-win32/0000755000175000001440000000000012675717741016271 5ustar alexxusersdoublecmd-0.7.1/units/i386-darwin-carbon/0000755000175000001440000000000012675717741017115 5ustar alexxusersdoublecmd-0.7.1/units-doc-win.txt0000644000175000001440000000042212014201074015743 0ustar alexxuserssrc\ufilelist.pas src\udcutils.pas src\platform\uOSUtils.pas src\platform\uosforms.pas src\uvfs.pas src\uexts.pas src\ufileprocs.pas src\udescr.pas src\platform\win\umywindows.pas src\platform\unix\umyunix.pas src\platform\unix\inotify.pp src\uvfsutil.pas src\uwcxmodule.pasdoublecmd-0.7.1/tools/0000755000175000001440000000000012675717741013676 5ustar alexxusersdoublecmd-0.7.1/tools/fsgenerator/0000755000175000001440000000000012675717741016215 5ustar alexxusersdoublecmd-0.7.1/tools/fsgenerator/fsgenerator.lpr0000644000175000001440000000637612046303231021240 0ustar alexxusers{ Filesystem traffic generator ------------------------------------------------------------------------- Creates, modifies, removes files, quickly and in large quantities. Useful for testing how a program behaves when there's a lot of traffic happening on the file system. Copyright (C) 2010-2012 Przemysław Nagay (cobines@gmail.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 } program fsgenerator; {$mode objfpc}{$H+} uses SysUtils, Classes, Windows; var Path: UTF8String; fs: TFileStream; filenames: TStringList; nr: Integer; buffer: array[0..16383] of byte; procedure GenNames; var i, j: Integer; name: String; begin for i := 0 to Random(1000) do begin name := ''; for j := 0 to random(100) do name := name + chr(random(ord('z') - ord('a')) + ord('a')); filenames.Add(name); end; end; function RandomName: String; begin Result := Path + filenames[Random(Filenames.Count)]; end; procedure Create(name: String); begin fs := TFileStream.Create(name, fmCreate); fs.Write(buffer, random(sizeof(buffer))); fs.Free; end; procedure Modify(name: String); var P: Int64; count: Int64; Mode: Word; size: int64; begin if not FileExists(name) then mode := fmCreate else mode := fmOpenReadWrite; fs := TFileStream.Create(Name, mode); if mode = fmCreate then begin fs.Write(buffer, random(sizeof(buffer))); fs.Seek(0, soBeginning); end; size := fs.size; p := random(size); fs.Seek(p, soBeginning); count := min(sizeof(buffer),random(size-p)); fs.Write(buffer, count); //writeln('writing ',count, ' p=',p,' size=',size); fs.Free; end; procedure Delete(name: String); begin if FileExists(Name) then Sysutils.DeleteFile(Name); end; begin if Paramcount = 0 then begin WriteLn('File system traffic generator.'); WriteLn('Creates, modifies, removes files, quickly and in large quantities.'); Writeln; WriteLn('Usage:'); WriteLn(ExtractFileName(ParamStr(0)) + ' '); Exit; end; FileNames := TStringList.Create; GenNames; Path := IncludeTrailingPathDelimiter(ParamStr(1)); ForceDirectories(Path); WriteLn('Starting changing ', Path); while True do begin case Random(6) of 0: Sleep(10); 1: Modify(RandomName); 2: Create(RandomName); 3: Modify(RandomName); 4: Delete(RandomName); 5: Modify(RandomName); end; Sleep(10); if (GetKeyState(VK_SPACE) < 0) or (GetKeyState(VK_SHIFT) < 0) or (GetKeyState(VK_ESCAPE) < 0) then Break; end; WriteLn('Finished changing'); Filenames.Free; end. doublecmd-0.7.1/tools/fsgenerator/fsgenerator.lpi0000644000175000001440000000363012046303231021215 0ustar alexxusers doublecmd-0.7.1/tools/extractdwrflnfo.lpi0000644000175000001440000000357212561625464017621 0ustar alexxusers doublecmd-0.7.1/tools/extractdwrflnfo.lpr0000755000175000001440000000440112045752321017613 0ustar alexxusers{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These (as of Jan. 2008 / FPC 2.2.0) both didn't work and had several limitations (e.g. inability to be used from a DLL) } {note: DON'T FORGET to compile your program with the -gw key Lazarus: you must type it in Project -> Compiler Options -> Other -> User parameters } {$mode delphi} {$longstrings on} {$ifndef unix} {$apptype console} {$endif} //extracts the line info in the dwarf format from the executable program extractdwrflnfo; uses SysUtils, Classes, un_xtrctdwrflnfo, zstream; var _dwarf: pointer; DwarfSize, CompressedDwarfSize: QWord; base_addr: QWord; f: TFileStream; CS: TCompressionStream; dllname, iname: ansistring; begin if Paramcount = 0 then begin WriteLn('Usage: ' + ExtractFileName(GetModuleName(0)) + ' '); exit; end; dllname:= ParamStr(1); WriteLn('Extracting Dwarf line info from ', dllname); try iname:= DlnNameByExename(dllname); if ExtractDwarfLineInfo(dllname, _dwarf, DwarfSize, base_addr) then begin f:= TFileStream.Create(iname , fmCreate); CS:= TCompressionStream.Create(clMax, f); CS.Write(dwarfsize, sizeof(dwarfsize)); // 8 bytes (QWORD) CS.Write(base_addr, sizeof(base_addr)); // 8 bytes (QWORD) CS.Write(_dwarf^, dwarfsize); CS.Free; CompressedDwarfSize := f.Size; f.free; WriteLn('Ok, saved ', CompressedDwarfSize, ' bytes to ', iname); end else begin if FileExists(iname) then DeleteFile(iname); WriteLn('Error: ' + ExtractDwarfLineInfoError); end; except WriteLn((ExceptObject as Exception).Message); end; end. doublecmd-0.7.1/multiarc.ini0000644000175000001440000001347712470130240015043 0ustar alexxusers[7Z] Extension=7z Description=7-Zip - www.7-zip.org ID=37 7A BC AF 27 1C IDPos=0 Archiver=7za Start=^------------------- End=^------------------- Format0=yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P -r0 l %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQU Test=%P t -y {%S} %AQA @%LQU Delete=%P d -y {%S} %AQA @%LQU Add=%P a -mx -y {-p%W} {-v%V} {%S} %AQA @%LQU AddSelfExtract=%P a -mx -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQU PasswordQuery=Enter password FormMode=8 Output=0 Enabled=0 Debug=0 [7Z (ro)] Archiver=7z Description=7-Zip - www.7-zip.org Extension=cab,z,taz,lzh,lha,iso,wim,swm,dmg,xar,hfs,ntfs,fat,vhd,mbr Start=^------------------- End=^------------------- Format0=yyyy tt dd hh mm ss aaaaa zzzzzzzzzzzz pppppppppppp nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P -r0 l %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQU ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQU Test=%P t -y {%S} %AQA @%LQU PasswordQuery=Enter password FormMode=8 Enabled=0 Output=0 Debug=0 [ACE] Archiver=ace Description=ACE v2.0.4 Extension=ace Start=^Date End=^listed: Format0=dd.tt.yy hh:mm ppppppppppp zzzzzzzzz nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P v -y %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQA ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQA Test=%P t -y %AQA Delete=%P d -y %AQA @%LQA Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQA AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQA Enabled=0 Output=0 Debug=0 [ARJ] Description=ARJ 3.15 by ARJ Software, Inc. Archiver=arj ID=60 EA IDPos=0 Extension=arj Start=^------------ End=^------------ Format0=* nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn Format1=???????????? zzzzzzzzzz pppppppppp yy-tt-dd hh:mm:ss aaaaaa Format2=? Format3=? List=%P v %AQA Extract=%P x -y {-g%W} {%S} %AQA !%LQA ExtractWithoutPath=%P e -y {-g%W} {%S} %AQA !%LQA Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA !%LQA Add=%P a -y {-g%W} {-v%V} {%S} %AQA !%LQA Enabled=0 Output=0 Debug=0 [RAR] Description=RAR 4.00 - http://www.rarlab.com Extension=rar Archiver=rar Start=^----------- End=^----------- Format0=?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn Format1=zzzzzzzzzzzzzzzzzzzzzz pppppppp dd-tt-yy hh:mm aaaaaaa List=%P v -c- {-p%W} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQ ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQ Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA @%LQ Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQ AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQ PasswordQuery=Enter password Enabled=0 Output=0 Debug=0 [RAR (5)] Archiver=rar Description=RAR 5.x - http://www.rarlab.com ID=52 61 72 21 IDPos= IDSeekRange= Extension=rar Start=^----------- End=^----------- Format0=aaaaaaaaaaa zzzzzzzzz dd-tt-yy hh:mm nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P l -c- {-p%W} %AQA Extract=%P x -y {-p%W} {%S} %AQA @%LQA ExtractWithoutPath=%P e -y {-p%W} {%S} %AQA @%LQA Test=%P t -y {%S} %AQA Delete=%P d -y {%S} %AQA @%LQA Add=%P a -y {-p%W} {-v%V} {%S} %AQA @%LQA AddSelfExtract=%P a -y -sfx {-p%W} {-v%V} {%S} %AQA @%LQA PasswordQuery=Enter password FormMode=0 Enabled=0 Output=0 Debug=0 [TXZ] Archiver=tar Description=Compressed tar file (tar.xz) Extension=txz Format0=aaaaaaaaaa zzzzzzz yyyy-tt-dd hh:mm nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P -tv --xz -f %AQA Extract=%P -x --xz {%S} -f %AQA -T %LFQA --no-recursion Add=%P -c --xz {%S} -f %AQA -T %LQA --no-recursion Enabled=0 Output=0 Debug=0 [FreeArc] Archiver=arc Description=FreeArc 0.67 ID=41 72 43 01 IDPos=0, -38, -39, -40, IDSeekRange= Extension=arc Start=^-- End=^-- Format0=yyyy tt dd hh mm ss aaaaaaa zzzzzzzzzzzzzzz ppppppppppppppp rrrrrrrr nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn List=%P v --noarcext -- %AQA Extract=%P x {-p%W} -y --noarcext -sclANSI -- %AQA @%LA ExtractWithoutPath=%P e {-p%W} -y --noarcext -sclANSI -- %AQA @%LA Test=%P t --noarcext -sclANSI -- %AQA Delete=%P d --noarcext -sclANSI -- %AQA @%LA Add=%P a {-p%W} {-ap%RQA} --noarcext -sclANSI {%S} -- %AQA @%LA AddSelfExtract=%P a {-p%W} {-ap%RQA} -sfx --noarcext -sclANSI {%S} -- %AQA @%LA PasswordQuery= FormMode=0 Enabled=0 Output=0 Debug=0 doublecmd-0.7.1/sdk/0000755000175000001440000000000012675717732013317 5ustar alexxusersdoublecmd-0.7.1/sdk/wfxplugin.h0000644000175000001440000002353011740433676015510 0ustar alexxusers#include "common.h" // contents of fsplugin.h version 2.0 (30.Jan.2009) // ids for FsGetFile #define FS_FILE_OK 0 #define FS_FILE_EXISTS 1 #define FS_FILE_NOTFOUND 2 #define FS_FILE_READERROR 3 #define FS_FILE_WRITEERROR 4 #define FS_FILE_USERABORT 5 #define FS_FILE_NOTSUPPORTED 6 #define FS_FILE_EXISTSRESUMEALLOWED 7 #define FS_EXEC_OK 0 #define FS_EXEC_ERROR 1 #define FS_EXEC_YOURSELF -1 #define FS_EXEC_SYMLINK -2 #define FS_COPYFLAGS_OVERWRITE 1 #define FS_COPYFLAGS_RESUME 2 #define FS_COPYFLAGS_MOVE 4 #define FS_COPYFLAGS_EXISTS_SAMECASE 8 #define FS_COPYFLAGS_EXISTS_DIFFERENTCASE 16 // flags for tRequestProc #define RT_Other 0 #define RT_UserName 1 #define RT_Password 2 #define RT_Account 3 #define RT_UserNameFirewall 4 #define RT_PasswordFirewall 5 #define RT_TargetDir 6 #define RT_URL 7 #define RT_MsgOK 8 #define RT_MsgYesNo 9 #define RT_MsgOKCancel 10 // flags for tLogProc #define MSGTYPE_CONNECT 1 #define MSGTYPE_DISCONNECT 2 #define MSGTYPE_DETAILS 3 #define MSGTYPE_TRANSFERCOMPLETE 4 #define MSGTYPE_CONNECTCOMPLETE 5 #define MSGTYPE_IMPORTANTERROR 6 #define MSGTYPE_OPERATIONCOMPLETE 7 // flags for FsStatusInfo #define FS_STATUS_START 0 #define FS_STATUS_END 1 #define FS_STATUS_OP_LIST 1 #define FS_STATUS_OP_GET_SINGLE 2 #define FS_STATUS_OP_GET_MULTI 3 #define FS_STATUS_OP_PUT_SINGLE 4 #define FS_STATUS_OP_PUT_MULTI 5 #define FS_STATUS_OP_RENMOV_SINGLE 6 #define FS_STATUS_OP_RENMOV_MULTI 7 #define FS_STATUS_OP_DELETE 8 #define FS_STATUS_OP_ATTRIB 9 #define FS_STATUS_OP_MKDIR 10 #define FS_STATUS_OP_EXEC 11 #define FS_STATUS_OP_CALCSIZE 12 #define FS_STATUS_OP_SEARCH 13 #define FS_STATUS_OP_SEARCH_TEXT 14 #define FS_STATUS_OP_SYNC_SEARCH 15 #define FS_STATUS_OP_SYNC_GET 16 #define FS_STATUS_OP_SYNC_PUT 17 #define FS_STATUS_OP_SYNC_DELETE 18 #define FS_ICONFLAG_SMALL 1 #define FS_ICONFLAG_BACKGROUND 2 #define FS_ICON_USEDEFAULT 0 #define FS_ICON_EXTRACTED 1 #define FS_ICON_EXTRACTED_DESTROY 2 #define FS_ICON_DELAYED 3 #define FS_BITMAP_NONE 0 #define FS_BITMAP_EXTRACTED 1 #define FS_BITMAP_EXTRACT_YOURSELF 2 #define FS_BITMAP_EXTRACT_YOURSELF_ANDDELETE 3 #define FS_BITMAP_CACHE 256 #define FS_CRYPT_SAVE_PASSWORD 1 #define FS_CRYPT_LOAD_PASSWORD 2 #define FS_CRYPT_LOAD_PASSWORD_NO_UI 3 // Load password only if master password has already been entered! #define FS_CRYPT_COPY_PASSWORD 4 // Copy encrypted password to new connection name #define FS_CRYPT_MOVE_PASSWORD 5 // Move password when renaming a connection #define FS_CRYPT_DELETE_PASSWORD 6 // Delete password #define FS_CRYPTOPT_MASTERPASS_SET 1 // The user already has a master password defined // flags for FsFindFirst/FsFindNext #define FILE_ATTRIBUTE_DIRECTORY 16 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 #define FILE_ATTRIBUTE_UNIX_MODE 0x80000000 typedef struct { DWORD SizeLow,SizeHigh; FILETIME LastWriteTime; int Attr; } RemoteInfoStruct; typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } FsDefaultParamStruct; // callback functions typedef int (DCPCALL *tProgressProc)(int PluginNr,char* SourceName, char* TargetName,int PercentDone); typedef int (DCPCALL *tProgressProcW)(int PluginNr,WCHAR* SourceName, WCHAR* TargetName,int PercentDone); typedef void (DCPCALL *tLogProc)(int PluginNr,int MsgType,char* LogString); typedef void (DCPCALL *tLogProcW)(int PluginNr,int MsgType,WCHAR* LogString); typedef BOOL (DCPCALL *tRequestProc)(int PluginNr,int RequestType,char* CustomTitle, char* CustomText,char* ReturnedText,int maxlen); typedef BOOL (DCPCALL *tRequestProcW)(int PluginNr,int RequestType,WCHAR* CustomTitle, WCHAR* CustomText,WCHAR* ReturnedText,int maxlen); typedef int (DCPCALL *tCryptProc)(int PluginNr,int CryptoNr,int Mode, char* ConnectionName,char* Password,int maxlen); typedef int (DCPCALL *tCryptProcW)(int PluginNr,int CryptoNr,int Mode, WCHAR* ConnectionName,WCHAR* Password,int maxlen); // Function prototypes int DCPCALL FsInit(int PluginNr,tProgressProc pProgressProc, tLogProc pLogProc,tRequestProc pRequestProc); int DCPCALL FsInitW(int PluginNr,tProgressProcW pProgressProcW, tLogProcW pLogProcW,tRequestProcW pRequestProcW); void DCPCALL FsSetCryptCallback(tCryptProc pCryptProc,int CryptoNr,int Flags); void DCPCALL FsSetCryptCallbackW(tCryptProcW pCryptProcW,int CryptoNr,int Flags); HANDLE DCPCALL FsFindFirst(char* Path,WIN32_FIND_DATAA *FindData); HANDLE DCPCALL FsFindFirstW(WCHAR* Path,WIN32_FIND_DATAW *FindData); BOOL DCPCALL FsFindNext(HANDLE Hdl,WIN32_FIND_DATAA *FindData); BOOL DCPCALL FsFindNextW(HANDLE Hdl,WIN32_FIND_DATAW *FindData); int DCPCALL FsFindClose(HANDLE Hdl); BOOL DCPCALL FsMkDir(char* Path); BOOL DCPCALL FsMkDirW(WCHAR* Path); int DCPCALL FsExecuteFile(HWND MainWin,char* RemoteName,char* Verb); int DCPCALL FsExecuteFileW(HWND MainWin,WCHAR* RemoteName,WCHAR* Verb); int DCPCALL FsRenMovFile(char* OldName,char* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri); int DCPCALL FsRenMovFileW(WCHAR* OldName,WCHAR* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri); int DCPCALL FsGetFile(char* RemoteName,char* LocalName,int CopyFlags, RemoteInfoStruct* ri); int DCPCALL FsGetFileW(WCHAR* RemoteName,WCHAR* LocalName,int CopyFlags, RemoteInfoStruct* ri); int DCPCALL FsPutFile(char* LocalName,char* RemoteName,int CopyFlags); int DCPCALL FsPutFileW(WCHAR* LocalName,WCHAR* RemoteName,int CopyFlags); BOOL DCPCALL FsDeleteFile(char* RemoteName); BOOL DCPCALL FsDeleteFileW(WCHAR* RemoteName); BOOL DCPCALL FsRemoveDir(char* RemoteName); BOOL DCPCALL FsRemoveDirW(WCHAR* RemoteName); BOOL DCPCALL FsDisconnect(char* DisconnectRoot); BOOL DCPCALL FsDisconnectW(WCHAR* DisconnectRoot); BOOL DCPCALL FsSetAttr(char* RemoteName,int NewAttr); BOOL DCPCALL FsSetAttrW(WCHAR* RemoteName,int NewAttr); BOOL DCPCALL FsSetTime(char* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime); BOOL DCPCALL FsSetTimeW(WCHAR* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime); void DCPCALL FsStatusInfo(char* RemoteDir,int InfoStartEnd,int InfoOperation); void DCPCALL FsStatusInfoW(WCHAR* RemoteDir,int InfoStartEnd,int InfoOperation); void DCPCALL FsGetDefRootName(char* DefRootName,int maxlen); int DCPCALL FsExtractCustomIcon(char* RemoteName,int ExtractFlags,HICON* TheIcon); int DCPCALL FsExtractCustomIconW(WCHAR* RemoteName,int ExtractFlags,HICON* TheIcon); void DCPCALL FsSetDefaultParams(FsDefaultParamStruct* dps); int DCPCALL FsGetPreviewBitmap(char* RemoteName,int width,int height,HBITMAP* ReturnedBitmap); int DCPCALL FsGetPreviewBitmapW(WCHAR* RemoteName,int width,int height,HBITMAP* ReturnedBitmap); BOOL DCPCALL FsLinksToLocalFiles(void); BOOL DCPCALL FsGetLocalName(char* RemoteName,int maxlen); BOOL DCPCALL FsGetLocalNameW(WCHAR* RemoteName,int maxlen); // ************************** content plugin extension **************************** // #define ft_nomorefields 0 #define ft_numeric_32 1 #define ft_numeric_64 2 #define ft_numeric_floating 3 #define ft_date 4 #define ft_time 5 #define ft_boolean 6 #define ft_multiplechoice 7 #define ft_string 8 #define ft_fulltext 9 #define ft_datetime 10 #define ft_stringw 11 // Should only be returned by Unicode function // for FsContentGetValue #define ft_nosuchfield -1 // error, invalid field number given #define ft_fileerror -2 // file i/o error #define ft_fieldempty -3 // field valid, but empty #define ft_ondemand -4 // field will be retrieved only when user presses #define ft_delayed 0 // field takes a long time to extract -> try again in background // for FsContentSetValue #define ft_setsuccess 0 // setting of the attribute succeeded // for FsContentGetSupportedFieldFlags #define contflags_edit 1 #define contflags_substsize 2 #define contflags_substdatetime 4 #define contflags_substdate 6 #define contflags_substtime 8 #define contflags_substattributes 10 #define contflags_substattributestr 12 #define contflags_substmask 14 // for FsContentSetValue #define setflags_first_attribute 1 // First attribute of this file #define setflags_last_attribute 2 // Last attribute of this file #define setflags_only_date 4 // Only set the date of the datetime value! #define CONTENT_DELAYIFSLOW 1 // ContentGetValue called in foreground typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ContentDefaultParamStruct; typedef struct { WORD wYear; WORD wMonth; WORD wDay; } tdateformat,*pdateformat; typedef struct { WORD wHour; WORD wMinute; WORD wSecond; } ttimeformat,*ptimeformat; int DCPCALL FsContentGetSupportedField(int FieldIndex,char* FieldName,char* Units,int maxlen); int DCPCALL FsContentGetValue(char* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); int DCPCALL FsContentGetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); void DCPCALL FsContentStopGetValue(char* FileName); void DCPCALL FsContentStopGetValueW(WCHAR* FileName); int DCPCALL FsContentGetDefaultSortOrder(int FieldIndex); void DCPCALL FsContentPluginUnloading(void); int DCPCALL FsContentGetSupportedFieldFlags(int FieldIndex); int DCPCALL FsContentSetValue(char* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL FsContentSetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); BOOL DCPCALL FsContentGetDefaultView(char* ViewContents,char* ViewHeaders,char* ViewWidths,char* ViewOptions,int maxlen); BOOL DCPCALL FsContentGetDefaultViewW(WCHAR* ViewContents,WCHAR* ViewHeaders,WCHAR* ViewWidths,WCHAR* ViewOptions,int maxlen);doublecmd-0.7.1/sdk/extension.h0000644000175000001440000000775011740433676015507 0ustar alexxusers#include "common.h" /* dialog messages */ #define DM_FIRST 0 #define DM_CLOSE DM_FIRST+1 /* A signal that the dialog is about to close */ #define DM_ENABLE DM_FIRST+2 #define DM_GETDLGDATA DM_FIRST+3 #define DM_GETDLGBOUNDS DM_FIRST+4 #define DM_GETITEMBOUNDS DM_FIRST+5 #define DM_GETTEXT DM_FIRST+6 /* Retrieve the text of an edit string or the caption of an item */ #define DM_KEYDOWN DM_FIRST+7 #define DM_KEYUP DM_FIRST+8 #define DM_SETDLGDATA DM_FIRST+9 #define DM_SETFOCUS DM_FIRST+10 /* Set the keyboard focus to the given dialog item */ #define DM_REDRAW DM_FIRST+11 /* Redraw the whole dialog */ #define DM_SETTEXT DM_FIRST+12 /* Set a new string value for an edit line or a new caption for an item */ #define DM_SETMAXTEXTLENGTH DM_FIRST+13 /* Set the maximum length of an edit string */ #define DM_SHOWDIALOG DM_FIRST+14 /* Show/hide the dialog window */ #define DM_SHOWITEM DM_FIRST+15 /* Show/hide a dialog item */ #define DM_GETCHECK DM_FIRST+16 /* Retrieve the state of TCheckBox or TRadioButton items */ #define DM_SETCHECK DM_FIRST+17 /* Change the state of TCheckBox and TRadioButton items */ #define DM_LISTGETITEM DM_FIRST+18 /* Retrieve a list item */ #define DM_LISTGETITEMINDEX DM_FIRST+19 /* Get current item index in a list */ #define DM_LISTSETITEMINDEX DM_FIRST+20 /* Set current item index in a list */ #define DM_LISTDELETE DM_FIRST+21 #define DM_LISTADD DM_FIRST+22 #define DM_LISTADDSTR DM_FIRST+23 #define DM_LISTUPDATE DM_FIRST+24 #define DM_LISTINSERT DM_FIRST+25 #define DM_LISTINDEXOF DM_FIRST+26 #define DM_LISTGETCOUNT DM_FIRST+27 #define DM_LISTGETDATA DM_FIRST+28 #define DM_LISTSETDATA DM_FIRST+29 #define DM_SETDLGBOUNDS DM_FIRST+30 #define DM_SETITEMBOUNDS DM_FIRST+31 #define DM_GETDROPPEDDOWN DM_FIRST+32 #define DM_SETDROPPEDDOWN DM_FIRST+33 #define DM_GETITEMDATA DM_FIRST+34 #define DM_SETITEMDATA DM_FIRST+35 #define DM_LISTSET DM_FIRST+36 /* events messages */ #define DN_FIRST 0x1000 #define DN_CLICK DN_FIRST+1 /* Sent after mouse click */ #define DN_DBLCLICK DN_FIRST+2 /* Sent after mouse double click */ #define DN_CHANGE DN_FIRST+3 /* Sent after the dialog item is changed */ #define DN_GOTFOCUS DN_FIRST+4 /* Sent when the dialog item gets input focus */ #define DN_INITDIALOG DN_FIRST+5 /* Sent before showing the dialog */ #define DN_KILLFOCUS DN_FIRST+6 /* Sent before a dialog item loses the input focus */ #define DN_KEYDOWN DM_KEYDOWN #define DN_KEYUP DM_KEYUP #define DN_CLOSE DM_CLOSE /* Sent before the dialog is closed */ #define DM_USER 0x4000 /* Starting value for user defined messages */ /* other */ #define EXT_MAX_PATH 16384 /* 16 Kb */ /* Dialog window callback function */ typedef intptr_t (DCPCALL *tDlgProc)(uintptr_t pDlg, char* DlgItemName, intptr_t Msg, intptr_t wParam, intptr_t lParam); /* Definition of callback functions called by the DLL */ typedef BOOL (DCPCALL *tInputBoxProc)(char* Caption, char* Prompt, BOOL MaskInput, char* Value, int ValueMaxLen); typedef int (DCPCALL *tMessageBoxProc)(char* Text, char* Caption, long Flags); typedef BOOL (DCPCALL *tDialogBoxLFMProc)(intptr_t LFMData, unsigned long DataSize, tDlgProc DlgProc); typedef BOOL (DCPCALL *tDialogBoxLRSProc)(intptr_t LRSData, unsigned long DataSize, tDlgProc DlgProc); typedef BOOL (DCPCALL *tDialogBoxLFMFileProc)(char* LFMFileName, tDlgProc DlgProc); #pragma pack(push) #pragma pack(1) typedef struct { unsigned long StructSize; char PluginDir[EXT_MAX_PATH]; char PluginConfDir[EXT_MAX_PATH]; tInputBoxProc InputBox; tMessageBoxProc MessageBox; tDialogBoxLFMProc DialogBoxLFM; tDialogBoxLRSProc DialogBoxLRS; tDialogBoxLFMFileProc DialogBoxLFMFile; tDlgProc SendDlgMsg; unsigned char Reserved[4096 * sizeof(void *)]; } tExtensionStartupInfo; #pragma pack(pop) typedef void (DCPCALL tExtensionInitializeProc)(tExtensionStartupInfo* StartupInfo); typedef void (DCPCALL tExtensionFinalizeProc)(void* Reserved); /* Plugin must implement this function for working with Extension API void DCPCALL ExtensionInitialize(tExtensionStartupInfo* StartupInfo); void DCPCALL ExtensionFinalize(void* Reserved); */ doublecmd-0.7.1/sdk/wlxplugin.h0000644000175000001440000000416611740433676015522 0ustar alexxusers#include "common.h" /* Contents of file listplug.h */ #define lc_copy 1 #define lc_newparams 2 #define lc_selectall 3 #define lc_setpercent 4 #define lcp_wraptext 1 #define lcp_fittowindow 2 #define lcp_ansi 4 #define lcp_ascii 8 #define lcp_variable 12 #define lcp_forceshow 16 #define lcp_fitlargeronly 32 #define lcp_center 64 #define lcs_findfirst 1 #define lcs_matchcase 2 #define lcs_wholewords 4 #define lcs_backwards 8 #define itm_percent 0xFFFE #define itm_fontstyle 0xFFFD #define itm_wrap 0xFFFC #define itm_fit 0xFFFB #define itm_next 0xFFFA #define itm_center 0xFFF9 #define LISTPLUGIN_OK 0 #define LISTPLUGIN_ERROR 1 typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ListDefaultParamStruct; HWND DCPCALL ListLoad(HWND ParentWin,char* FileToLoad,int ShowFlags); HWND DCPCALL ListLoadW(HWND ParentWin,WCHAR* FileToLoad,int ShowFlags); int DCPCALL ListLoadNext(HWND ParentWin,HWND PluginWin,char* FileToLoad,int ShowFlags); int DCPCALL ListLoadNextW(HWND ParentWin,HWND PluginWin,WCHAR* FileToLoad,int ShowFlags); void DCPCALL ListCloseWindow(HWND ListWin); void DCPCALL ListGetDetectString(char* DetectString,int maxlen); int DCPCALL ListSearchText(HWND ListWin,char* SearchString,int SearchParameter); int DCPCALL ListSearchTextW(HWND ListWin,WCHAR* SearchString,int SearchParameter); int DCPCALL ListSearchDialog(HWND ListWin,int FindNext); int DCPCALL ListSendCommand(HWND ListWin,int Command,int Parameter); int DCPCALL ListPrint(HWND ListWin,char* FileToPrint,char* DefPrinter, int PrintFlags,RECT* Margins); int DCPCALL ListPrintW(HWND ListWin,WCHAR* FileToPrint,WCHAR* DefPrinter, int PrintFlags,RECT* Margins); int DCPCALL ListNotificationReceived(HWND ListWin,int Message,WPARAM wParam,LPARAM lParam); void DCPCALL ListSetDefaultParams(ListDefaultParamStruct* dps); HBITMAP DCPCALL ListGetPreviewBitmap(char* FileToLoad,int width,int height, char* contentbuf,int contentbuflen); HBITMAP DCPCALL ListGetPreviewBitmapW(WCHAR* FileToLoad,int width,int height, char* contentbuf,int contentbuflen);doublecmd-0.7.1/sdk/calling.inc0000644000175000001440000000014411740433676015414 0ustar alexxusers{$MACRO ON} {$IFDEF MSWINDOWS} {$DEFINE dcpcall:=stdcall} {$ELSE} {$DEFINE dcpcall:=cdecl} {$ENDIF} doublecmd-0.7.1/sdk/help/0000755000175000001440000000000012675717732014247 5ustar alexxusersdoublecmd-0.7.1/sdk/help/pasdoc.css0000644000175000001440000001210311375744471016223 0ustar alexxusersbody { font-family: Verdana,Arial; color: black; background-color: white; font-size: 12px; } body.navigationframe { font-family: Verdana,Arial; color: white; background-color: #787878; font-size: 12px; } img { border:0px; } a:link {color:#C91E0C; text-decoration: none; } a:visited {color:#7E5C31; text-decoration: none; } a:hover {text-decoration: underline; } a:active {text-decoration: underline; } a.navigation:link { color: white; text-decoration: none; font-size: 12px;} a.navigation:visited { color: white; text-decoration: none; font-size: 12px;} a.navigation:hover { color: white; font-weight: bold; text-decoration: none; font-size: 12px; } a.navigation:active { color: white; text-decoration: none; font-size: 12px;} a.bold:link {color:#C91E0C; text-decoration: none; font-weight:bold; } a.bold:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } a.bold:hover {text-decoration: underline; font-weight:bold; } a.bold:active {text-decoration: underline; font-weight:bold; } a.section {color: green; text-decoration: none; font-weight: bold; } a.section:hover {color: green; text-decoration: underline; font-weight: bold; } ul.useslist a:link {color:#C91E0C; text-decoration: none; font-weight:bold; } ul.useslist a:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } ul.useslist a:hover {text-decoration: underline; font-weight:bold; } ul.useslist a:active {text-decoration: underline; font-weight:bold; } ul.hierarchy { list-style-type:none; } ul.hierarchylevel { list-style-type:none; } p.unitlink a:link {color:#C91E0C; text-decoration: none; font-weight:bold; } p.unitlink a:visited {color:#7E5C31; text-decoration: none; font-weight:bold; } p.unitlink a:hover {text-decoration: underline; font-weight:bold; } p.unitlink a:active {text-decoration: underline; font-weight:bold; } tr.list { background: #FFBF44; } tr.list2 { background: #FFC982; } tr.listheader { background: #C91E0C; color: white; } table.wide_list { border-spacing:2px; width:100%; } table.wide_list td { vertical-align:top; padding:4px; } table.markerlegend { width:auto; } table.markerlegend td.legendmarker { text-align:center; } table.sections { background:white; } table.sections td {background:lightgray; } table.summary td.itemcode { width:100%; } table.detail td.itemcode { width:100%; } td.itemname {white-space:nowrap; } td.itemunit {white-space:nowrap; } td.itemdesc { width:100%; } div.nodescription { color:red; } dl.parameters dt { color:blue; } /* Various browsers have various default styles for

    , sometimes ugly for our purposes, so it's best to set things like font-size and font-weight in out pasdoc.css explicitly. */ h6.description_section { /* font-size 100% means that it has the same font size as the parent element, i.e. normal description text */ font-size: 100%; font-weight: bold; /* By default browsers usually have some large margin-bottom and margin-top for tags. In our case, margin-bottom is unnecessary, we want to visually show that description_section is closely related to content below. In this situation (where the font size is just as a normal text), smaller bottom margin seems to look good. */ margin-bottom: 0em; } /* Style applied to Pascal code in documentation (e.g. produced by @longcode tag) } */ span.pascal_string { color: #000080; } span.pascal_keyword { font-weight: bolder; } span.pascal_comment { color: #000080; font-style: italic; } span.pascal_compiler_comment { color: #008000; } span.pascal_numeric { } span.pascal_hex { } p.hint_directive { color: red; } input#search_text { } input#search_submit_button { } acronym.mispelling { background-color: #ffa; } /* Actually this reduces vertical space between *every* paragraph inside list with @itemSpacing(compact). While we would like to reduce this space only for the top of 1st and bottom of last paragraph within each list item. But, well, user probably will not do any paragraph breaks within a list with @itemSpacing(compact) anyway, so it's acceptable solution. */ ul.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } ol.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } dl.compact_spacing p { margin-top: 0em; margin-bottom: 0em; } /* Style for table created by @table tags: just some thin border. This way we have some borders around the cells (so cells are visibly separated), but the border "blends with the background" so it doesn't look too ugly. Hopefully it looks satisfactory in most cases and for most people. We add padding for cells, otherwise they look too close. This is normal thing to do when border-collapse is set to collapse (because this eliminates spacing between cells). */ table.table_tag { border-collapse: collapse; } table.table_tag td { border: 1pt solid gray; padding: 0.3em; } table.table_tag th { border: 1pt solid gray; padding: 0.3em; } table.detail { border: 1pt solid gray; margin-top: 0.3em; margin-bottom: 0.3em; } doublecmd-0.7.1/sdk/help/dfxplugin.html0000644000175000001440000007503311451563402017125 0ustar alexxusers Writing file system plugins for Double Commander

    Writing file system plugins for Double Commander

    Description Structures Functions and Procedures Types Constants

    Description

    This help file is about writing file system plugins for Double Commander.

    Functions and Procedures

    HANDLE __stdcall VfsOpen(char* Path);
    void __stdcall VfsClose(HANDLE hInstance);
    BOOL __stdcall VfsFindFirst(HANDLE hInstance, char* Path, VFS_FIND_DATA* FindData);
    BOOL __stdcall VfsFindNext(HANDLE hInstance, VFS_FIND_DATA* FindData);
    void __stdcall VfsFindClose(HANDLE hInstance, VFS_FIND_DATA* FindData);
    int __stdcall VfsMoveFile(HANDLE hInstance, char* OldName, char* NewName, int CopyFlags);
    int __stdcall VfsDeleteFile(HANDLE hInstance, char* RemotePath);
    int __stdcall VfsGetFile(HANDLE hInstance, char* RemoteName, char* LocalName, int CopyFlags);
    int __stdcall VfsPutFile(HANDLE hInstance, char* LocalName, char* RemoteName, int CopyFlags);
    int __stdcall VfsExecuteFile(HANDLE hInstance, HWND MainWin, char* RemoteName, char* Verb);
    int __stdcall VfsCreateFolder(HANDLE hInstance, char* RemotePath);
    int __stdcall VfsRemoveFolder(HANDLE hInstance, char* RemotePath);
    void __stdcall VfsNetworkGetSupportedProtocols(char* Protocols, int MaxLen);
    int __stdcall VfsNetworkGetConnection(HANDLE hInstance, int Index, char* Connection, int MaxLen);
    int __stdcall VfsNetworkManageConnection(HANDLE hInstance, HWND MainWin, char* Connection, int Action, int MaxLen);
    int __stdcall VfsNetworkOpenConnection(HANDLE hInstance, char* Connection, char* RootDir, char* RemotePath, int MaxLen);
    int __stdcall VfsNetworkCloseConnection(HANDLE hInstance, char* Connection);

    Constants

    VFS_NM_ACTION_ADD     = 0;
    VFS_NM_ACTION_EDIT    = 1;
    VFS_NM_ACTION_DELETE  = 2;
    VFS_RET_OK    = 0;
    VFS_RET_FAILED  = 1;
    VFS_RET_ABORTED  = 2;
    VFS_RET_NOT_SUPPORTED    = 3;
    VFS_RET_FILE_NOT_FOUND  = 4;
    VFS_RET_FILE_EXISTS  = 5;
    VFS_RET_READ_ERROR    = 6;
    VFS_RET_WRITE_ERROR  = 7;
    VFS_EXEC_OK    = 0;
    VFS_EXEC_ERROR  = 1;
    VFS_EXEC_YOURSELF    = 2;
    VFS_EXEC_SYMLINK  = 3;

    Description

    Functions and Procedures

    HANDLE __stdcall VfsOpen(char* Path);

    Initialize and open plugin file system.

    Parameters
    Path
    Path that must be opened by plugin
    Returns

    The function returns plugin instance handle if successful, NULL otherwise

    void __stdcall VfsClose(HANDLE hInstance);

    Finalize and close plugin file system.

    Parameters
    Handle
    Plugin file system instance handle that have been returned by FsOpen
    BOOL __stdcall VfsMoveFile(HANDLE hInstance, char* OldName, char* NewName, int CopyFlags);

    VfsMoveFile is called to transfer (copy or move) a file within the plugin's file system.

    Parameters
    hInstance
    Plugin file system instance handle
    OldName
    Name of the remote source file, with full path
    NewName
    Name of the remote destination file, with full path
    CopyFlags
    Can be a combination of the VFS_COPYFLAGS_XXX flags
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsGetFile(HANDLE hInstance, char* RemoteName,char* LocalName,int CopyFlags);

    VfsGetFile is called to transfer a file from the plugin's file system to the normal file system.

    Parameters
    hInstance
    Plugin file system instance handle
    RemoteName
    Name of the file to be retrieved, with full path
    LocalName
    Local file name with full path
    CopyFlags
    Can be a combination of the VFS_COPYFLAGS_XXX flags
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsPutFile(HANDLE hInstance, char* LocalName, char* RemoteName, int CopyFlags);

    VfsPutFile is called to transfer a file from the normal file system to the plugin's file system.

    Parameters
    hInstance
    Plugin file system instance handle
    LocalName
    Local file name with full path
    RemoteName
    Name of the remote file, with full path
    CopyFlags
    Can be a combination of the VFS_COPYFLAGS_XXX flags
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsDeleteFile(HANDLE hInstance, char* RemotePath);

    VfsDeleteFile is called to delete a file from the plugin's file system.

    Parameters
    hInstance
    Plugin file system instance handle
    RemotePath
    Name of the file to be deleted, with full path
    Returns

    The function returns True if successful, False otherwise

    int __stdcall VfsExecuteFile(HANDLE hInstance, HWND MainWin, char* RemoteName, char* Verb);

    VfsExecuteFile is called to execute a file on the plugin's file system, or show its property sheet.

    Parameters
    hInstance
    Plugin file system instance handle
    MainWin
    Parent window which can be used for showing a property sheet
    RemoteName
    Name of the file to be executed, with full path
    Verb
    Plugin file system instance handle that have been returned by VfsOpen
    Returns

    The function returns True if successful, False otherwise

    int __stdcall VfsCreateFolder(HANDLE hInstance, char* RemoteName);

    VfsCreateFolder is called to create a directory on the plugin's file system.

    Parameters
    hInstance
    Plugin file system instance handle
    RemoteName
    Name of the directory to be created, with full path
    Returns

    The function returns True if successful, False otherwise

    int __stdcall VfsRemoveFolder(HANDLE hInstance, char* RemoteName);

    VfsRemoveFolder is called to remove a directory from the plugin's file system.

    Parameters
    hInstance
    Plugin file system instance handle
    RemoteName
    Name of the directory to be removed, with full path
    Returns

    The function returns True if successful, False otherwise

    void __stdcall VfsNetworkGetSupportedProtocols(char* Protocols, int MaxLen);

    VfsNetworkGetSupportedProtocols is called to retrieve protocols that supported by plugin.

    Parameters
    Protocols
    Pointer to a buffer (allocated by the calling program) which can receive the semicolon separated protocol list, e.g. "http://;ftp://"
    MaxLen
    Maximum number of characters (including the final 0) which fit in the buffer.
    BOOL __stdcall VfsNetworkGetConnection(int Index, char* Connection, int MaxLen);

    VfsNetworkGetConnection is called to enumerate all connections that plugin has. Index is increased by 1 starting from 0 until the plugin returns False.

    Parameters
    Index
    The index of the connection for which DC requests information. Starting with 0, the Index is increased until the plugin returns False.
    Connection
    Here the plugin has to return the name of the connection with index Index. You may return a maximum of maxlen characters, including the trailing 0.
    MaxLen
    The maximum number of characters, including the trailing 0, which may be returned in each of the connections.
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsNetworkManageConnection(HWND MainWin, char* Connection, int Action, int MaxLen);

    VfsNetworkManageConnection is called from "Connection manager" dialog when user wants to add/edit/delete connection.

    Parameters
    MainWin
    Parent window which can be used for showing a connection configuration dialog.
    Connection
    In: Connection name for edit/delete action
    Out: Connection name of new connection for add action
    Action
    Action type: FS_NM_ACTION_ADD or FS_NM_ACTION_EDIT or FS_NM_ACTION_DELETE
    MaxLen
    Maximum number of characters that you can return in Connection, including the final 0.
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsNetworkOpenConnection(char* Connection, char* RootDir, char* RemotePath, int MaxLen);

    VfsNetworkOpenConnection is called when the user wants to open a connection to the network.

    Parameters
    Connection
    In: Connection name
    Out: Server address, e.g. "ftp://ftp.chg.ru"
    RootDir
    Here the plugin has to return the root directory of the opening connection, e.g. "/"
    RemotePath
    Here the plugin has to return the remote path of the opening connection, e.g. "/pub/Linux"
    MaxLen
    Maximum number of characters that you can return in Connection, RootDir and RemotePath, including the final 0.
    Returns

    The function returns True if successful, False otherwise

    BOOL __stdcall VfsNetworkCloseConnection(char* Connection);

    VfsNetworkOpenConnection is called when the user wants to close a connection to the network.

    Parameters
    Connection
    Connection name
    Returns

    The function returns True if successful, False otherwise

    Constants

    VFS_NM_ACTION_ADD     = 0;

    Add connection action.

    VFS_NM_ACTION_EDIT    = 1;

    Edit connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_RET_OK  = 0;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.

    VFS_NM_ACTION_DELETE  = 2;

    Delete connection action.


    Double Commander DFX plugin API doublecmd-0.7.1/sdk/wdxplugin.pas0000644000175000001440000001014511740433676016040 0ustar alexxusersunit WdxPlugin; { Content plugins } interface uses SysUtils; const ft_nomorefields=0; ft_numeric_32=1; ft_numeric_64=2; ft_numeric_floating=3; ft_date=4; ft_time=5; ft_boolean=6; ft_multiplechoice=7; ft_string=8; ft_fulltext=9; ft_datetime=10; ft_stringw=11; // for ContentGetValue ft_nosuchfield=-1; ft_fileerror=-2; ft_fieldempty=-3; ft_ondemand=-4; ft_notsupported=-5; ft_setcancel=-6; ft_delayed=0; // for ContentSetValue ft_setsuccess=0; // setting of the attribute succeeded // for ContentGetSupportedFieldFlags contflags_edit=1; contflags_substsize=2; contflags_substdatetime=4; contflags_substdate=6; contflags_substtime=8; contflags_substattributes=10; contflags_substattributestr=12; contflags_passthrough_size_float=14; contflags_substmask=14; contflags_fieldedit=16; // for ContentSendStateInformation contst_readnewdir=1; contst_refreshpressed=2; contst_showhint=4; setflags_first_attribute=1; // First attribute of this file setflags_last_attribute=2; // Last attribute of this file setflags_only_date=4; // Only set the date of the datetime value! CONTENT_DELAYIFSLOW=1; // ContentGetValue called in foreground CONTENT_PASSTHROUGH=2; // If requested via contflags_passthrough_size_float: The size // is passed in as floating value, TC expects correct value // from the given units value, and optionally a text string type tContentDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pContentDefaultParamStruct=^tContentDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; { Function prototypes: } (* procedure ContentGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetValueW(FileName:pwidechar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSetDefaultParams(dps:pContentDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentPluginUnloading; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentStopGetValue(FileName:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentStopGetValueW(FileName:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetDefaultSortOrder(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentGetSupportedFieldFlags(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentSetValue(FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentSetValueW(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSendStateInformation(state:integer;path:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ContentSendStateInformationW(state:integer;path:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ContentEditValue(handle:thandle;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pchar;maxlen:integer;flags:integer;langidentifier:pchar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. doublecmd-0.7.1/sdk/common.h0000644000175000001440000000246512467647314014764 0ustar alexxusers#ifdef __GNUC__ #include #if defined(__WIN32__) || defined(_WIN32) || defined(_WIN64) #define DCPCALL __attribute__((stdcall)) #else #define DCPCALL __attribute__((cdecl)) #endif #define MAX_PATH 260 typedef uint32_t DWORD; typedef uint16_t WORD; typedef void *HANDLE; typedef HANDLE HICON; typedef HANDLE HBITMAP; typedef HANDLE HWND; typedef int BOOL; typedef char CHAR; typedef uint16_t WCHAR; #pragma pack(push, 1) typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME,*PFILETIME,*LPFILETIME; typedef struct _WIN32_FIND_DATAA { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; CHAR cFileName[MAX_PATH]; CHAR cAlternateFileName[14]; } WIN32_FIND_DATAA,*LPWIN32_FIND_DATAA; typedef struct _WIN32_FIND_DATAW { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; WCHAR cFileName[MAX_PATH]; WCHAR cAlternateFileName[14]; } WIN32_FIND_DATAW,*LPWIN32_FIND_DATAW; #pragma pack(pop) #else #if defined(_WIN32) || defined(_WIN64) #define DCPCALL __stdcall #else #define DCPCALL __cdecl #endif #endifdoublecmd-0.7.1/sdk/wcxplugin.pas0000644000175000001440000001522112065543106016026 0ustar alexxusers{ Contents of file wcxhead.pas } { It contains definitions of error codes, flags and callbacks } { Ver. 2.20 with Unicode support } unit WcxPlugin; interface const {Error codes returned to calling application} E_SUCCESS= 0; {Success} E_END_ARCHIVE= 10; {No more files in archive} E_NO_MEMORY= 11; {Not enough memory} E_BAD_DATA= 12; {Data is bad} E_BAD_ARCHIVE= 13; {CRC error in archive data} E_UNKNOWN_FORMAT= 14; {Archive format unknown} E_EOPEN= 15; {Cannot open existing file} E_ECREATE= 16; {Cannot create file} E_ECLOSE= 17; {Error closing file} E_EREAD= 18; {Error reading from file} E_EWRITE= 19; {Error writing to file} E_SMALL_BUF= 20; {Buffer too small} E_EABORTED= 21; {Function aborted by user} E_NO_FILES= 22; {No files found} E_TOO_MANY_FILES= 23; {Too many files to pack} E_NOT_SUPPORTED= 24; {Function not supported} {Unpacking flags} PK_OM_LIST= 0; PK_OM_EXTRACT= 1; {Flags for ProcessFile} PK_SKIP= 0; {Skip file (no unpacking)} PK_TEST= 1; {Test file integrity} PK_EXTRACT= 2; {Extract file to disk} {Flags passed through ChangeVolProc} PK_VOL_ASK= 0; {Ask user for location of next volume} PK_VOL_NOTIFY= 1; {Notify app that next volume will be unpacked} {Packing flags} {For PackFiles} PK_PACK_MOVE_FILES= 1; {Delete original after packing} PK_PACK_SAVE_PATHS= 2; {Save path names of files} PK_PACK_ENCRYPT= 4; {Ask user for password, then encrypt} {Returned by GetPackCaps} PK_CAPS_NEW= 1; {Can create new archives} PK_CAPS_MODIFY= 2; {Can modify exisiting archives} PK_CAPS_MULTIPLE= 4; {Archive can contain multiple files} PK_CAPS_DELETE= 8; {Can delete files} PK_CAPS_OPTIONS= 16; {Supports the options dialogbox} PK_CAPS_MEMPACK= 32; {Supports packing in memory} PK_CAPS_BY_CONTENT= 64; {Detect archive type by content} PK_CAPS_SEARCHTEXT= 128; {Allow searching for text in archives} { created with this plugin} PK_CAPS_HIDE= 256; { Show as normal files (hide packer icon) } { open with Ctrl+PgDn, not Enter } PK_CAPS_ENCRYPT= 512; { Plugin supports PK_PACK_ENCRYPT option } BACKGROUND_UNPACK=1; { Which operations are thread-safe? } BACKGROUND_PACK=2; BACKGROUND_MEMPACK=4; { For tar.pluginext in background } {Flags for packing in memory} MEM_OPTIONS_WANTHEADERS=1; {Return archive headers with packed data} {Errors returned by PackToMem} MEMPACK_OK= 0; {Function call finished OK, but there is more data} MEMPACK_DONE= 1; {Function call finished OK, there is no more data} {Flags for PkCryptProc callback} PK_CRYPT_SAVE_PASSWORD=1; PK_CRYPT_LOAD_PASSWORD=2; PK_CRYPT_LOAD_PASSWORD_NO_UI=3; { Load password only if master password has already been entered!} PK_CRYPT_COPY_PASSWORD=4; { Copy encrypted password to new archive name} PK_CRYPT_MOVE_PASSWORD=5; { Move password when renaming an archive} PK_CRYPT_DELETE_PASSWORD=6; { Delete password} PK_CRYPTOPT_MASTERPASS_SET = 1; // The user already has a master password defined type { Unsigned integer with pointer size } TArcHandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; {$IFNDEF LCL} HWND = type PtrUInt; // Defined as in LCL {$ENDIF} const wcxInvalidHandle = TArcHandle(-1); { For compatibility with Delphi use $IFDEF's to set calling convention } type {Definition of callback functions called by the DLL} {Ask to swap disk for multi-volume archive} PChangeVolProc=^TChangeVolProc; TChangeVolProc=function(ArcName:pchar;Mode:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PChangeVolProcW=^TChangeVolProcW; TChangeVolProcW=function(ArcName:pwidechar;Mode:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; {Notify that data is processed - used for progress dialog} PProcessDataProc=^TProcessDataProc; TProcessDataProc=function(FileName:pchar;Size:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PProcessDataProcW=^TProcessDataProcW; TProcessDataProcW=function(FileName:pwidechar;Size:longint):longint; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PPkCryptProc = ^TPkCryptProc; TPkCryptProc = function(CryptoNr: Integer; Mode: Integer; ArchiveName, Password: PAnsiChar; MaxLen: Integer): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; PPkCryptProcW = ^TPkCryptProcW; TPkCryptProcW = function(CryptoNr: Integer; Mode: Integer; ArchiveName, Password: PWideChar; MaxLen: Integer): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; type PHeaderData = ^THeaderData; THeaderData=packed record ArcName:array [0..259] of char; FileName:array [0..259] of char; Flags, PackSize, UnpSize, HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; end; PHeaderDataEx = ^THeaderDataEx; THeaderDataEx=packed record ArcName:array [0..1023] of char; FileName:array [0..1023] of char; Flags:longint; PackSize, PackSizeHigh, UnpSize, UnpSizeHigh:longword; HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; Reserved:array[0..1023] of char; end; PHeaderDataExW=^THeaderDataExW; THeaderDataExW=packed record ArcName:array [0..1023] of widechar; FileName:array [0..1023] of widechar; Flags:longint; PackSize, PackSizeHigh, UnpSize, UnpSizeHigh:longword; HostOS, FileCRC, FileTime, UnpVer, Method, FileAttr:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; Reserved:array[0..1023] of char; end; tOpenArchiveData=packed record ArcName:pchar; OpenMode, OpenResult:longint; CmtBuf:pchar; CmtBufSize, CmtSize, CmtState:longint; end; tOpenArchiveDataW=packed record ArcName:pwidechar; OpenMode, OpenResult:longint; CmtBuf:pwidechar; CmtBufSize, CmtSize, CmtState:longint; end; tPackDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..259] of char; end; pPackDefaultParamStruct=^tPackDefaultParamStruct; implementation end. doublecmd-0.7.1/sdk/wcxplugin.h0000644000175000001440000001371611740433676015512 0ustar alexxusers#include "common.h" /* Contents of file wcxhead.h */ /* It contains definitions of error codes, flags and callbacks */ /* Error codes returned to calling application */ #define E_SUCCESS 0 /* Success */ #define E_END_ARCHIVE 10 /* No more files in archive */ #define E_NO_MEMORY 11 /* Not enough memory */ #define E_BAD_DATA 12 /* Data is bad */ #define E_BAD_ARCHIVE 13 /* CRC error in archive data */ #define E_UNKNOWN_FORMAT 14 /* Archive format unknown */ #define E_EOPEN 15 /* Cannot open existing file */ #define E_ECREATE 16 /* Cannot create file */ #define E_ECLOSE 17 /* Error closing file */ #define E_EREAD 18 /* Error reading from file */ #define E_EWRITE 19 /* Error writing to file */ #define E_SMALL_BUF 20 /* Buffer too small */ #define E_EABORTED 21 /* Function aborted by user */ #define E_NO_FILES 22 /* No files found */ #define E_TOO_MANY_FILES 23 /* Too many files to pack */ #define E_NOT_SUPPORTED 24 /* Function not supported */ /* flags for unpacking */ #define PK_OM_LIST 0 #define PK_OM_EXTRACT 1 /* flags for ProcessFile */ #define PK_SKIP 0 /* Skip this file */ #define PK_TEST 1 /* Test file integrity */ #define PK_EXTRACT 2 /* Extract to disk */ /* Flags passed through ChangeVolProc */ #define PK_VOL_ASK 0 /* Ask user for location of next volume */ #define PK_VOL_NOTIFY 1 /* Notify app that next volume will be unpacked */ /* Flags for packing */ /* For PackFiles */ #define PK_PACK_MOVE_FILES 1 /* Delete original after packing */ #define PK_PACK_SAVE_PATHS 2 /* Save path names of files */ #define PK_PACK_ENCRYPT 4 /* Ask user for password, then encrypt */ /* Returned by GetPackCaps */ #define PK_CAPS_NEW 1 /* Can create new archives */ #define PK_CAPS_MODIFY 2 /* Can modify exisiting archives */ #define PK_CAPS_MULTIPLE 4 /* Archive can contain multiple files */ #define PK_CAPS_DELETE 8 /* Can delete files */ #define PK_CAPS_OPTIONS 16 /* Has options dialog */ #define PK_CAPS_MEMPACK 32 /* Supports packing in memory */ #define PK_CAPS_BY_CONTENT 64 /* Detect archive type by content */ #define PK_CAPS_SEARCHTEXT 128 /* Allow searching for text in archives */ /* created with this plugin} */ #define PK_CAPS_HIDE 256 /* Show as normal files (hide packer */ /* icon), open with Ctrl+PgDn, not Enter*/ #define PK_CAPS_ENCRYPT 512 /* Plugin supports PK_PACK_ENCRYPT option*/ /* Flags for packing in memory */ #define MEM_OPTIONS_WANTHEADERS 1 /* Return archive headers with packed data */ /* Errors returned by PackToMem */ #define MEMPACK_OK 0 /* Function call finished OK, but there is more data */ #define MEMPACK_DONE 1 /* Function call finished OK, there is no more data */ #define PK_CRYPT_SAVE_PASSWORD 1 #define PK_CRYPT_LOAD_PASSWORD 2 #define PK_CRYPT_LOAD_PASSWORD_NO_UI 3 // Load password only if master password has already been entered! #define PK_CRYPT_COPY_PASSWORD 4 // Copy encrypted password to new archive name #define PK_CRYPT_MOVE_PASSWORD 5 // Move password when renaming an archive #define PK_CRYPT_DELETE_PASSWORD 6 // Delete password #define PK_CRYPTOPT_MASTERPASS_SET 1 // The user already has a master password defined typedef struct { char ArcName[260]; char FileName[260]; int Flags; int PackSize; int UnpSize; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tHeaderData; typedef struct { char ArcName[1024]; char FileName[1024]; int Flags; unsigned int PackSize; unsigned int PackSizeHigh; unsigned int UnpSize; unsigned int UnpSizeHigh; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; char Reserved[1024]; } tHeaderDataEx; typedef struct { WCHAR ArcName[1024]; WCHAR FileName[1024]; int Flags; unsigned int PackSize; unsigned int PackSizeHigh; unsigned int UnpSize; unsigned int UnpSizeHigh; int HostOS; int FileCRC; int FileTime; int UnpVer; int Method; int FileAttr; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; char Reserved[1024]; } tHeaderDataExW; typedef struct { char* ArcName; int OpenMode; int OpenResult; char* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tOpenArchiveData; typedef struct { WCHAR* ArcName; int OpenMode; int OpenResult; WCHAR* CmtBuf; int CmtBufSize; int CmtSize; int CmtState; } tOpenArchiveDataW; typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } PackDefaultParamStruct; /* Definition of callback functions called by the DLL Ask to swap disk for multi-volume archive */ typedef int (DCPCALL *tChangeVolProc)(char *ArcName,int Mode); typedef int (DCPCALL *tChangeVolProcW)(WCHAR *ArcName,int Mode); /* Notify that data is processed - used for progress dialog */ typedef int (DCPCALL *tProcessDataProc)(char *FileName,int Size); typedef int (DCPCALL *tProcessDataProcW)(WCHAR *FileName,int Size); typedef int (DCPCALL *tPkCryptProc)(int CryptoNr,int Mode, char* ArchiveName,char* Password,int maxlen); typedef int (DCPCALL *tPkCryptProcW)(int CryptoNr,int Mode, WCHAR* ArchiveName,WCHAR* Password,int maxlen); doublecmd-0.7.1/sdk/wlxplugin.pas0000644000175000001440000000700212117073164016035 0ustar alexxusers// Lister API definitions. // This unit is written by Christian Ghisler, it's from Total Commander // Lister API Guide, which can be found at http://ghisler.com. // Version: 2.0. unit WlxPlugin; interface const lc_copy=1; lc_newparams=2; lc_selectall=3; lc_setpercent=4; lcp_wraptext=1; lcp_fittowindow=2; lcp_ansi=4; lcp_ascii=8; lcp_variable=12; lcp_forceshow=16; lcp_fitlargeronly=32; lcp_center=64; lcs_findfirst=1; lcs_matchcase=2; lcs_wholewords=4; lcs_backwards=8; itm_percent=$FFFE; itm_fontstyle=$FFFD; itm_wrap=$FFFC; itm_fit=$FFFB; itm_next=$FFFA; itm_center=$FFF9; LISTPLUGIN_OK=0; LISTPLUGIN_ERROR=1; const MAX_PATH=32000; type { Unsigned integer with pointer size } THandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; const wlxInvalidHandle: THandle = THandle(0); type tListDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pListDefaultParamStruct=^tListDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; type HBITMAP = type THandle; { Function prototypes: Functions need to be defined exactly like this!} (* function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadW(ParentWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadNext(ParentWin,PluginWin:thandle;FileToLoad:pchar;ShowFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListLoadNextW(ParentWin,PluginWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListCloseWindow(ListWin:thandle); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchText(ListWin:thandle;SearchString:pchar; SearchParameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchTextW(ListWin:thandle;SearchString:pwidechar; SearchParameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSearchDialog(ListWin:thandle;FindNext:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListSendCommand(ListWin:thandle;Command,Parameter:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListPrint(ListWin:thandle;FileToPrint,DefPrinter:pchar; PrintFlags:integer;var Margins:trect):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListPrintW(ListWin:thandle;FileToPrint,DefPrinter:pwidechar; PrintFlags:integer;var Margins:trect):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListNotificationReceived(ListWin:thandle;Message,wParam,lParam:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ListSetDefaultParams(dps:pListDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListGetPreviewBitmap(FileToLoad:pchar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function ListGetPreviewBitmapW(FileToLoad:pwidechar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. doublecmd-0.7.1/sdk/dsxplugin.pas0000644000175000001440000000332111740433676016032 0ustar alexxusersunit DsxPlugin; {$include calling.inc} interface uses SysUtils; type PDsxSearchRecord = ^TDsxSearchRecord; TDsxSearchRecord = record StartPath: array[0..1023] of AnsiChar; FileMask: array[0..1023] of AnsiChar; Attributes: Cardinal; AttribStr: array[0..127] of AnsiChar; CaseSensitive: Boolean; { Date/time search } IsDateFrom, IsDateTo, IsTimeFrom, IsTimeTo: Boolean; DateTimeFrom, DateTimeTo: TDateTime; { File size search } IsFileSizeFrom, IsFileSizeTo: Boolean; FileSizeFrom, FileSizeTo: Int64; { Find/replace text } IsFindText: Boolean; FindText: array[0..1023] of AnsiChar; IsReplaceText: Boolean; ReplaceText: array[0..1023] of AnsiChar; NotContainingText: Boolean; end; TDsxDefaultParamStruct = record Size, PluginInterfaceVersionLow, PluginInterfaceVersionHi: Longint; DefaultIniName: array[0..MAX_PATH - 1] of Char; end; PDsxDefaultParamStruct = ^TDsxDefaultParamStruct; { For compatibility with Delphi use $IFDEF's to set calling convention } {Prototypes} {Callbacks procs} TSAddFileProc = procedure(PluginNr: Integer; FoundFile: PChar); dcpcall; //if FoundFile='' then searching is finished TSUpdateStatusProc = procedure(PluginNr: Integer; CurrentFile: PChar; FilesScaned: Integer); dcpcall; {Mandatory (must be implemented)} TSInit = function(dps: PDsxDefaultParamStruct; pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): Integer; dcpcall; TSStartSearch = procedure(PluginNr: Integer; pSearchRec: PDsxSearchRecord); dcpcall; TSStopSearch = procedure(PluginNr: Integer); dcpcall; TSFinalize = procedure(PluginNr: Integer); dcpcall; implementation end. doublecmd-0.7.1/sdk/extension.pas0000644000175000001440000001446011740433676016037 0ustar alexxusersunit Extension; interface const // dialog messages DM_FIRST = 0; DM_CLOSE = DM_FIRST+1; // A signal that the dialog is about to close DM_ENABLE = DM_FIRST+2; DM_GETDLGDATA = DM_FIRST+3; DM_GETDLGBOUNDS = DM_FIRST+4; DM_GETITEMBOUNDS = DM_FIRST+5; DM_GETTEXT = DM_FIRST+6; // Retrieve the text of an edit string or the caption of an item DM_KEYDOWN = DM_FIRST+7; DM_KEYUP = DM_FIRST+8; DM_SETDLGDATA = DM_FIRST+9; DM_SETFOCUS = DM_FIRST+10; // Set the keyboard focus to the given dialog item DM_REDRAW = DM_FIRST+11; // Redraw the whole dialog DM_SETTEXT = DM_FIRST+12; // Set a new string value for an edit line or a new caption for an item DM_SETMAXTEXTLENGTH = DM_FIRST+13; // Set the maximum length of an edit string DM_SHOWDIALOG = DM_FIRST+14; // Show/hide the dialog window DM_SHOWITEM = DM_FIRST+15; // Show/hide a dialog item DM_GETCHECK = DM_FIRST+16; // Retrieve the state of TCheckBox or TRadioButton items DM_SETCHECK = DM_FIRST+17; // Change the state of TCheckBox and TRadioButton items DM_LISTGETITEM = DM_FIRST+18; // Retrieve a list item DM_LISTGETITEMINDEX = DM_FIRST+19; // Get current item index in a list DM_LISTSETITEMINDEX = DM_FIRST+20; // Set current item index in a list DM_LISTDELETE = DM_FIRST+21; DM_LISTADD = DM_FIRST+22; DM_LISTADDSTR = DM_FIRST+23; DM_LISTUPDATE = DM_FIRST+24; DM_LISTINSERT = DM_FIRST+25; DM_LISTINDEXOF = DM_FIRST+26; DM_LISTGETCOUNT = DM_FIRST+27; DM_LISTGETDATA = DM_FIRST+28; DM_LISTSETDATA = DM_FIRST+29; DM_SETDLGBOUNDS = DM_FIRST+30; DM_SETITEMBOUNDS = DM_FIRST+31; DM_GETDROPPEDDOWN = DM_FIRST+32; DM_SETDROPPEDDOWN = DM_FIRST+33; DM_GETITEMDATA = DM_FIRST+34; DM_SETITEMDATA = DM_FIRST+35; DM_LISTSET = DM_FIRST+36; // events messages DN_FIRST = $1000; DN_CLICK = DN_FIRST+1; // Sent after mouse click DN_DBLCLICK = DN_FIRST+2; // Sent after mouse double click DN_CHANGE = DN_FIRST+3; // Sent after the dialog item is changed DN_GOTFOCUS = DN_FIRST+4; // Sent when the dialog item gets input focus DN_INITDIALOG = DN_FIRST+5; // Sent before showing the dialog DN_KILLFOCUS = DN_FIRST+6; // Sent before a dialog item loses the input focus DN_KEYDOWN = DM_KEYDOWN; DN_KEYUP = DM_KEYUP; DN_CLOSE = DM_CLOSE; // Sent before the dialog is closed DM_USER = $4000; // Starting value for user defined messages const // MessageBox: To indicate the buttons displayed in the message box, // specify one of the following values. MB_OK = $00000000; MB_OKCANCEL = $00000001; MB_ABORTRETRYIGNORE = $00000002; MB_YESNOCANCEL = $00000003; MB_YESNO = $00000004; MB_RETRYCANCEL = $00000005; MB_ICONHAND = $00000010; MB_ICONQUESTION = $00000020; MB_ICONEXCLAMATION = $00000030; MB_ICONASTERICK = $00000040; MB_ICONWARNING = MB_ICONEXCLAMATION; MB_ICONERROR = MB_ICONHAND; MB_ICONSTOP = MB_ICONHAND; MB_ICONINFORMATION = MB_ICONASTERICK; // MessageBox: To indicate the default button, specify one of the following values. MB_DEFBUTTON1 = $00000000; MB_DEFBUTTON2 = $00000100; MB_DEFBUTTON3 = $00000200; MB_DEFBUTTON4 = $00000300; // MessageBox: Return values ID_OK = 1; ID_CANCEL = 2; ID_ABORT = 3; ID_RETRY = 4; ID_IGNORE = 5; ID_YES = 6; ID_NO = 7; ID_CLOSE = 8; ID_HELP = 9; const EXT_MAX_PATH = 16384; // 16 Kb { For compatibility with Delphi use $IFDEF's to set calling convention } type { Dialog window callback function } TDlgProc = function(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; { Definition of callback functions called by the DLL } TInputBoxProc = function(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TMessageBoxProc = function(Text, Caption: PAnsiChar; Flags: Longint): Integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLFMProc = function(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLRSProc = function(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TDialogBoxLFMFileProc = function(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; type PExtensionStartupInfo = ^TExtensionStartupInfo; TExtensionStartupInfo = packed record // The size of the structure, in bytes StructSize: LongWord; // Directory where plugin is located (UTF-8 encoded) PluginDir: packed array [0..Pred(EXT_MAX_PATH)] of AnsiChar; // Directory where plugin configuration file must be located (UTF-8 encoded) PluginConfDir: packed array [0..Pred(EXT_MAX_PATH)] of AnsiChar; // Dialog API InputBox: TInputBoxProc; MessageBox: TMessageBoxProc; DialogBoxLFM: TDialogBoxLFMProc; DialogBoxLRS: TDialogBoxLRSProc; DialogBoxLFMFile: TDialogBoxLFMFileProc; SendDlgMsg: TDlgProc; // Reserved for future API extension Reserved: packed array [0..Pred(4096 * SizeOf(Pointer))] of Byte; end; type TExtensionInitializeProc = procedure(StartupInfo: PExtensionStartupInfo); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TExtensionFinalizeProc = procedure(Reserved: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; implementation (* Plugin must implement this function for working with Extension API procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure ExtensionFinalize(Reserved: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) end. doublecmd-0.7.1/sdk/wdxplugin.h0000644000175000001440000000716511740433676015514 0ustar alexxusers#include "common.h" // Contents of file contplug.h version 2.0 #define ft_nomorefields 0 #define ft_numeric_32 1 #define ft_numeric_64 2 #define ft_numeric_floating 3 #define ft_date 4 #define ft_time 5 #define ft_boolean 6 #define ft_multiplechoice 7 #define ft_string 8 #define ft_fulltext 9 #define ft_datetime 10 #define ft_stringw 11 // for ContentGetValue #define ft_nosuchfield -1 // error, invalid field number given #define ft_fileerror -2 // file i/o error #define ft_fieldempty -3 // field valid, but empty #define ft_ondemand -4 // field will be retrieved only when user presses #define ft_notsupported -5 // function not supported #define ft_setcancel -6 // user clicked cancel in field editor #define ft_delayed 0 // field takes a long time to extract -> try again in background // for ContentSetValue #define ft_setsuccess 0 // setting of the attribute succeeded // for ContentGetSupportedFieldFlags #define contflags_edit 1 #define contflags_substsize 2 #define contflags_substdatetime 4 #define contflags_substdate 6 #define contflags_substtime 8 #define contflags_substattributes 10 #define contflags_substattributestr 12 #define contflags_passthrough_size_float 14 #define contflags_substmask 14 #define contflags_fieldedit 16 #define contst_readnewdir 1 #define contst_refreshpressed 2 #define contst_showhint 4 #define setflags_first_attribute 1 // First attribute of this file #define setflags_last_attribute 2 // Last attribute of this file #define setflags_only_date 4 // Only set the date of the datetime value! #define editflags_initialize 1 // The data passed to the plugin may be used to // initialize the edit dialog #define CONTENT_DELAYIFSLOW 1 // ContentGetValue called in foreground #define CONTENT_PASSTHROUGH 2 // If requested via contflags_passthrough_size_float: The size // is passed in as floating value, TC expects correct value // from the given units value, and optionally a text string typedef struct { int size; DWORD PluginInterfaceVersionLow; DWORD PluginInterfaceVersionHi; char DefaultIniName[MAX_PATH]; } ContentDefaultParamStruct; typedef struct { WORD wYear; WORD wMonth; WORD wDay; } tdateformat,*pdateformat; typedef struct { WORD wHour; WORD wMinute; WORD wSecond; } ttimeformat,*ptimeformat; int DCPCALL ContentGetDetectString(char* DetectString,int maxlen); int DCPCALL ContentGetSupportedField(int FieldIndex,char* FieldName,char* Units,int maxlen); int DCPCALL ContentGetValue(char* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); int DCPCALL ContentGetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,void* FieldValue,int maxlen,int flags); void DCPCALL ContentSetDefaultParams(ContentDefaultParamStruct* dps); void DCPCALL ContentPluginUnloading(void); void DCPCALL ContentStopGetValue(char* FileName); void DCPCALL ContentStopGetValueW(WCHAR* FileName); int DCPCALL ContentGetDefaultSortOrder(int FieldIndex); int DCPCALL ContentGetSupportedFieldFlags(int FieldIndex); int DCPCALL ContentSetValue(char* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL ContentSetValueW(WCHAR* FileName,int FieldIndex,int UnitIndex,int FieldType,void* FieldValue,int flags); int DCPCALL ContentEditValue(HWND ParentWin,int FieldIndex,int UnitIndex,int FieldType, void* FieldValue,int maxlen,int flags,char* langidentifier); void DCPCALL ContentSendStateInformation(int state,char* path); void DCPCALL ContentSendStateInformationW(int state,WCHAR* path);doublecmd-0.7.1/sdk/wfxplugin.pas0000644000175000001440000003470211740433676016047 0ustar alexxusersunit WfxPlugin; { Plugin definitions version 2.0 } interface uses SysUtils {$IFDEF MSWINDOWS}, Windows{$ENDIF}; { ids for FsGetFile } const FS_FILE_OK=0; FS_FILE_EXISTS=1; FS_FILE_NOTFOUND=2; FS_FILE_READERROR=3; FS_FILE_WRITEERROR=4; FS_FILE_USERABORT=5; FS_FILE_NOTSUPPORTED=6; FS_FILE_EXISTSRESUMEALLOWED=7; FS_EXEC_OK=0; FS_EXEC_ERROR=1; FS_EXEC_YOURSELF=-1; FS_EXEC_SYMLINK=-2; FS_COPYFLAGS_OVERWRITE=1; FS_COPYFLAGS_RESUME=2; FS_COPYFLAGS_MOVE=4; FS_COPYFLAGS_EXISTS_SAMECASE=8; FS_COPYFLAGS_EXISTS_DIFFERENTCASE=16; { flags for tRequestProc } const RT_Other=0; RT_UserName=1; RT_Password=2; RT_Account=3; RT_UserNameFirewall=4; RT_PasswordFirewall=5; RT_TargetDir=6; RT_URL=7; RT_MsgOK=8; RT_MsgYesNo=9; RT_MsgOKCancel=10; { flags for tLogProc } const msgtype_connect=1; msgtype_disconnect=2; msgtype_details=3; msgtype_transfercomplete=4; msgtype_connectcomplete=5; msgtype_importanterror=6; msgtype_operationcomplete=7; { flags for FsStatusInfo } const FS_STATUS_START=0; FS_STATUS_END=1; FS_STATUS_OP_LIST=1; FS_STATUS_OP_GET_SINGLE=2; FS_STATUS_OP_GET_MULTI=3; FS_STATUS_OP_PUT_SINGLE=4; FS_STATUS_OP_PUT_MULTI=5; FS_STATUS_OP_RENMOV_SINGLE=6; FS_STATUS_OP_RENMOV_MULTI=7; FS_STATUS_OP_DELETE=8; FS_STATUS_OP_ATTRIB=9; FS_STATUS_OP_MKDIR=10; FS_STATUS_OP_EXEC=11; FS_STATUS_OP_CALCSIZE=12; FS_STATUS_OP_SEARCH=13; FS_STATUS_OP_SEARCH_TEXT=14; FS_STATUS_OP_SYNC_SEARCH=15; FS_STATUS_OP_SYNC_GET=16; FS_STATUS_OP_SYNC_PUT=17; FS_STATUS_OP_SYNC_DELETE=18; FS_STATUS_OP_GET_MULTI_THREAD=19; FS_STATUS_OP_PUT_MULTI_THREAD=20; {Flags for FsExtractCustomIcon} const FS_ICONFLAG_SMALL=1; FS_ICONFLAG_BACKGROUND=2; FS_ICON_USEDEFAULT=0; FS_ICON_EXTRACTED=1; FS_ICON_EXTRACTED_DESTROY=2; FS_ICON_DELAYED=3; const FS_BITMAP_NONE=0; FS_BITMAP_EXTRACTED=1; FS_BITMAP_EXTRACT_YOURSELF=2; FS_BITMAP_EXTRACT_YOURSELF_ANDDELETE=3; FS_BITMAP_CACHE=256; {Flags for crypto callback function} FS_CRYPT_SAVE_PASSWORD=1; FS_CRYPT_LOAD_PASSWORD=2; FS_CRYPT_LOAD_PASSWORD_NO_UI=3; {Load password only if master password has already been entered!} FS_CRYPT_COPY_PASSWORD=4; FS_CRYPT_MOVE_PASSWORD=5; FS_CRYPT_DELETE_PASSWORD=6; FS_CRYPTOPT_MASTERPASS_SET=1; {The user already has a master password defined} {Flags for FsGetBackgroundFlags} BG_DOWNLOAD=1; { Plugin supports downloads in background } BG_UPLOAD=2; { Plugin supports uploads in background } BG_ASK_USER=4; { Plugin requires separate connection for background transfers -> ask user first } type { Unsigned integer with pointer size } THandle = {$IFDEF CPU64}QWord{$ELSE}LongWord{$ENDIF}; const wfxInvalidHandle: THandle = THandle(-1); { Some Windows specific stuff } const MAXDWORD = DWORD($FFFFFFFF); FILE_ATTRIBUTE_NORMAL = 128; FILE_ATTRIBUTE_DIRECTORY = 16; FILE_ATTRIBUTE_REPARSE_POINT = $0400; FILE_ATTRIBUTE_UNIX_MODE = $80000000; type TInt64Rec = packed record case Boolean of True : (Value : Int64); False : (Low, High : DWORD); end; BOOL = LongBool; HBITMAP = THandle; HICON = THandle; HWND = THandle; type {$IFDEF MSWINDOWS} FILETIME = Windows.FILETIME; {$ELSE} FILETIME = packed record dwLowDateTime : DWORD; dwHighDateTime : DWORD; end; {$ENDIF} TFileTime = FILETIME; // for compatibility with all plugins PFileTime = ^FILETIME; TWfxFileTime = FILETIME; PWfxFileTime = ^FILETIME; {$IFDEF MSWINDOWS} WIN32_FIND_DATAA = Windows.WIN32_FIND_DATA; {$ELSE} WIN32_FIND_DATAA = packed record dwFileAttributes : DWORD; ftCreationTime : TFILETIME; ftLastAccessTime : TFILETIME; ftLastWriteTime : TFILETIME; nFileSizeHigh : DWORD; nFileSizeLow : DWORD; dwReserved0 : DWORD; dwReserved1 : DWORD; cFileName : array[0..(MAX_PATH)-1] of CHAR; cAlternateFileName : array[0..13] of CHAR; end; {$ENDIF} TWin32FindData = WIN32_FIND_DATAA; {$IFDEF MSWINDOWS} WIN32_FIND_DATAW = Windows.WIN32_FIND_DATAW; {$ELSE} WIN32_FIND_DATAW = packed record dwFileAttributes : DWORD; ftCreationTime : TFILETIME; ftLastAccessTime : TFILETIME; ftLastWriteTime : TFILETIME; nFileSizeHigh : DWORD; nFileSizeLow : DWORD; dwReserved0 : DWORD; dwReserved1 : DWORD; cFileName : array[0..(MAX_PATH)-1] of WCHAR; cAlternateFileName : array[0..13] of WCHAR; end; {$ENDIF} TWin32FindDataW = WIN32_FIND_DATAW; type tRemoteInfo=record SizeLow,SizeHigh:longint; LastWriteTime:TFileTime; Attr:longint; end; pRemoteInfo=^tRemoteInfo; type tFsDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pFsDefaultParamStruct=^tFsDefaultParamStruct; { For compatibility with Delphi use $IFDEF's to set calling convention } { callback functions } type TProgressProc=function(PluginNr:integer;SourceName, TargetName:pchar;PercentDone:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TProgressProcW=function(PluginNr:integer;SourceName, TargetName:pwidechar;PercentDone:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TLogProc=procedure(PluginNr,MsgType:integer;LogString:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TLogProcW=procedure(PluginNr,MsgType:integer;LogString:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TRequestProc=function(PluginNr,RequestType:integer;CustomTitle,CustomText, ReturnedText:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TRequestProcW=function(PluginNr,RequestType:integer;CustomTitle,CustomText, ReturnedText:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TCryptProc=function(PluginNr,CryptoNumber:integer;mode:integer;ConnectionName, Password:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; TCryptProcW=function(PluginNr,CryptoNumber:integer;mode:integer;ConnectionName, Password:pwidechar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; { Function prototypes - the callback functions MUST be implemented exactly like this! } (* function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc; pRequestProc:tRequestProc):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsInitW(PluginNr:integer;pProgressProcW:tProgressProcW;pLogProcW:tLogProcW; pRequestProcW:tRequestProcW):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetCryptCallback(CryptProc:TCryptProc;CryptoNr,Flags:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetCryptCallbackW(CryptProcW:TCryptProcW;CryptoNr,Flags:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindFirst(path :pchar;var FindData:tWIN32FINDDATA):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindFirstW(path :pwidechar;var FindData:tWIN32FINDDATAW):thandle; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindNext(Hdl:thandle;var FindData:tWIN32FINDDATA):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindNextW(Hdl:thandle;var FindDataW:tWIN32FINDDATAW):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsFindClose(Hdl:thandle):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsMkDir(RemoteDir:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsMkDirW(RemoteDir:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExecuteFile(MainWin:HWND;RemoteName,Verb:pchar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExecuteFileW(MainWin:HWND;RemoteName,Verb:pwidechar):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRenMovFile(OldName,NewName:pchar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRenMovFileW(OldName,NewName:pwidechar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetFile(RemoteName,LocalName:pchar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetFileW(RemoteName,LocalName:pwidechar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsPutFile(LocalName,RemoteName:pchar;CopyFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsPutFileW(LocalName,RemoteName:pwidechar;CopyFlags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDeleteFile(RemoteName:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDeleteFileW(RemoteName:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRemoveDir(RemoteName:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsRemoveDirW(RemoteName:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDisconnect(DisconnectRoot:pchar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsDisconnectW(DisconnectRoot:pwidechar):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetAttr(RemoteName:pchar;NewAttr:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetAttrW(RemoteName:pwidechar;NewAttr:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetTime(RemoteName:pchar;CreationTime,LastAccessTime, LastWriteTime:PFileTime):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsSetTimeW(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PFileTime):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsStatusInfo(RemoteDir:pchar;InfoStartEnd,InfoOperation:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsStatusInfoW(RemoteDir:pwidechar;InfoStartEnd,InfoOperation:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsGetDefRootName(DefRootName:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExtractCustomIcon(RemoteName:pchar;ExtractFlags:integer; var TheIcon:hicon):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsExtractCustomIconW(RemoteName:pwidechar;ExtractFlags:integer; var TheIcon:hicon):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsSetDefaultParams(dps:pFsDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetPreviewBitmap(RemoteName:pchar;width,height:integer, var ReturnedBitmap:hbitmap):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetPreviewBitmapW(RemoteName:pwidechar;width,height:integer, var ReturnedBitmap:hbitmap):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsLinksToLocalFiles:bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetLocalName(RemoteName:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetLocalNameW(RemoteName:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) {****************************** content plugin part *****************************} const ft_nomorefields=0; ft_numeric_32=1; ft_numeric_64=2; ft_numeric_floating=3; ft_date=4; ft_time=5; ft_boolean=6; ft_multiplechoice=7; ft_string=8; ft_fulltext=9; ft_datetime=10; ft_stringw=11; // for ContentGetValue ft_nosuchfield=-1; ft_fileerror=-2; ft_fieldempty=-3; ft_ondemand=-4; ft_delayed=0; // for ContentSetValue ft_setsuccess=0; setflags_first_attribute=1; {First attribute of this file} setflags_last_attribute=2; setflags_only_date=4; CONTENT_DELAYIFSLOW=1; // ContentGetValue called in foreground type tContentDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pContentDefaultParamStruct=^tContentDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; { Function prototypes: } (* procedure FsContentGetDetectString(DetectString:pchar;maxlen:integer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetValueW(FileName:pwidechar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentSetDefaultParams(dps:pContentDefaultParamStruct); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentStopGetValue(FileName:pchar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; procedure FsContentStopGetValueW(FileName:pwidechar); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultSortOrder(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetSupportedFieldFlags(FieldIndex:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentSetValue(FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentSetValueW(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultView(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pchar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsContentGetDefaultViewW(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pwidechar;maxlen:integer):bool; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; function FsGetBackgroundFlags:integer; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; *) implementation end. doublecmd-0.7.1/doublecmd-noconsole.js0000644000175000001440000000145611525751770017026 0ustar alexxusers// Use this script to run Double Commander without console debug window // run as logged-in user: // First get the path of this script var script_path = WScript.ScriptFullName; script_path = script_path.substring(0, script_path.lastIndexOf('\\')); var shell = WScript.CreateObject("WScript.Shell"); // Then launch dc(DoubleCommander directory is supposed to be placed besides this script) shell.run("\"" + script_path + "\\doublecmd.exe\"", 0, false); /* // or this one asks for the desired user: var script_path = WScript.ScriptFullName; script_path = script_path.substring(0, script_path.lastIndexOf('\\')); var shell = WScript.CreateObject("WScript.Shell"); var app = WScript.CreateObject("Shell.Application"); app.ShellExecute(script_path + "\\doublecmd.exe", "", "", "runas", 0); */doublecmd-0.7.1/doublecmd.png0000644000175000001440000000725411324050326015165 0ustar alexxusersPNG  IHDR00WsRGBbKGD pHYs  tIME *3ⵆ,IDATh͚i]Wuk7v<; v&'@ @)@  JTPժZJm?Tb(B8RD(i;c;qMws^ι}vlBik#fо U9Kp.M"aq;A Ri ŗ\(p2 {Sv-+Wזk j[C ˡ8?+.C{OM'#Kkn:ykNKz "JfDq5'~tK/rf˒3uHfZllfQ[ojv:phypfj5?vz>8 E(\֚~?}~kS?PA%Ĝ`?ܛajh(m߯YbN9ofOs Ba`k3?N,ar=o̖Pӯ?o[װh'YgceF9^0^fˀ{Hqt>5h63614$=lak7 v{7%j Q/3$׍BI%*|{ +Ս[#R_Xy/χ[sD? chfMz-\{ncCMT/ "Y;N]r1DqG?MmM/(y/[? Q9꽷4R4: .&x?-]Lԗ_3S8UTܾ_ $$}9ب7>;{;R M#!$J[OafFCo=ZioZ] q jVTfh͑U*H=N7\u)>&&G8.2kF/?}y8}7tU-Y o̓ԅAPM!j@\ԜTM0z\@),/1]h0Y|2Z$Xe.~ Gm.d`ygH[-4]1*8'$c#dޯ\ej58U <^i @^9o S4* 4iLrqatEa0q /0@0<Y&&I 4IN5?GEqeX/ϐW%s!yT?}682U,K/pNJ*R..~ `I$M$J)2?h jx ^zBya!H 0_9R xњZ0<I.@x|A.@aYZf]`A\K$;W8'+@qf цMd*%""Hΐ @(N;Mf_M|A"LEPa94M u2xşy) h<6 ٙnm&,ڪq@rVхY ~i-bsԷ߄nQCξWP` H܆.H\fnyehJE \U<43QbV1 "1f 8 ,KJ'V\!SӹZ5D|Y]A}Bly-D7XUYqn%-#¸{k'A ~z;ԩ /:z>W ,ibY-Ly/Q?zԁ<J%;POL)|a@/@݊PߨAMH[Fg-DFTG!IԱ}!v%O=C3Q?\8YޏT $xҬA$-\Iŝ{rHTxlio ,~{ D#l|ೌݺSU@[.-@5Kq>#cc15}t*Yf y$A\Bf|hi ÇqN+r.\8RTЀ^Ywura>ξ|M7}>sԤff,y{ۇmkჵFFt;;=a`wY Esy<< la˶?rZy뺝no=lˉ/}2UQkQzj@enylgtF64,1c9Gɳ \1g0~o|LJ>r'ߗl,VVAff޴*#n7VЙJL|nE0RMGo]߲vm9TED;%F'F]\sS,q4%ih.W]mĊ㰋tb:=;$<48`TzMVk>i%ʶ;(\ZiʷUz RE ‚r@ZT9wn_ "tIENDB`doublecmd-0.7.1/build.bat0000644000175000001440000000340412045752321014306 0ustar alexxusers@echo off rem the next two line must be changed before run on your computer set lazpath=D:\Alexx\Prog\FreePascal\Lazarus set PATH=%lazpath%;%PATH% rem You can execute this script with different parameters: rem components - compiling components needed for DC rem plugins - compiling all DC plugins rem all - compiling components, plugins and DC rem default - compiling DC only rem beta - compile in beta mode (using by default) if not "%OS_TARGET%" == "" ( set DC_ARCH=%DC_ARCH% --os=%OS_TARGET% ) if not "%CPU_TARGET%" == "" ( set DC_ARCH=%DC_ARCH% --cpu=%CPU_TARGET% ) if "%1"=="components" ( call :components ) else ( if "%1"=="plugins" ( call :plugins ) else ( if "%1"=="beta" ( call :beta ) else ( if "%1"=="default" ( call :default ) else ( if "%1"=="nightly" ( call :nightly ) else ( if "%1"=="all" ( call :all ) else ( if "%1"=="" ( call :beta ) else ( echo ERROR: Mode not defined: %1 echo Available modes: components, plugins, default, nightly, all, beta ))))))) pause GOTO:EOF :components call components\build.bat GOTO:EOF :plugins call plugins\build.bat GOTO:EOF :beta call :components call :plugins rem Build Double Commander call :replace_old lazbuild src\doublecmd.lpi --bm=beta %DC_ARCH% rem Build Dwarf LineInfo Extractor lazbuild tools\extractdwrflnfo.lpi rem Extract debug line info tools\extractdwrflnfo doublecmd.dbg GOTO:EOF :all call :components call :plugins call :default GOTO:EOF :default call :replace_old lazbuild src\doublecmd.lpi %DC_ARCH% GOTO:EOF :nightly call :replace_old lazbuild src\doublecmd.lpi --bm=nightly %DC_ARCH% GOTO:EOF :replace_old del /Q doublecmd.exe.old ren doublecmd.exe doublecmd.exe.old GOTO:EOF doublecmd-0.7.1/doublecmd.sh0000755000175000001440000000023711740433676015027 0ustar alexxusers#!/bin/sh # Use this script for execute portable version of Double Commander cd "`dirname "$0"`" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) ./doublecmddoublecmd-0.7.1/src/0000755000175000001440000000000012675717741013325 5ustar alexxusersdoublecmd-0.7.1/src/uexts.pas0000644000175000001440000005235512532643273015202 0ustar alexxusers{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz storing commands (by file extensions) contributors: Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) } unit uExts; {$mode objfpc}{$H+} interface uses Graphics, Classes, Contnrs, uFile; type { What constitutes our basic info for the external actual action } TExtActionCommand = class FActionName: string; FCommandName: string; FParams: string; FStartPath: string; FIconIndex: integer; FIconBitmap: Graphics.TBitmap; public constructor Create(ParamActionName, ParamCommandName, ParamParams, ParamStartPath: string); destructor Destroy; override; function CloneExtAction: TExtActionCommand; property ActionName: string read FActionName write FActionName; property CommandName: string read FCommandName write FCommandName; property Params: string read FParams write FParams; property StartPath: string read FStartPath write FStartPath; property IconIndex: integer read FIconIndex write FIconIndex; property IconBitmap: Graphics.TBitmap read FIconBitmap write FIconBitmap; end; { Each file type may have more than one possible associated action ("TExtActionCommand"). This class is to hold a collection of this } TExtActionList = class(TList) private function GetExtActionCommand(Index: integer): TExtActionCommand; public constructor Create; procedure Clear; override; function Add(ExtActionCommand: TExtActionCommand): integer; procedure Insert(Index: integer; ExtActionCommand: TExtActionCommand); procedure DeleteExtActionCommand(Index: integer); property ExtActionCommand[Index: integer]: TExtActionCommand read GetExtActionCommand; end; { Class for storage actions by file extensions } TExtAction = class Name: string; //en< File type name, for example "Hyper text documents" Icon: string; //en< Path to icon IconIndex: integer; Extensions: TStringList; //en< List of extensions ActionList: TExtActionList; public constructor Create; destructor Destroy; override; function GetIconListForStorage: string; procedure SetIconListFromStorage(sStorage: string); end; { Main class for storage actions list by file extensions } TExts = class private function GetCount: integer; function GetItems(Index: integer): TExtAction; procedure LegacyLoadFromFile(const sName: string); protected FExtList: TObjectList; public constructor Create; destructor Destroy; override; procedure Clear; function AddItem(AExtAction: TExtAction): integer; procedure DeleteItem(Index: integer); procedure MoveItem(SrcIndex, DestIndex: integer); function Load: boolean; function LoadXMLFile: boolean; procedure SaveXMLFile; function GetExtActionCmd(aFile: TFile; const sActionName: string; var sCmd: string; var sParams: string; var sStartPath: string): boolean; function GetExtActions(aFile: TFile; paramActionList: TExtActionList; pIndexOfFirstPossibleFileType: PInteger = nil; bWantedAllActions: boolean = False): boolean; function ComputeSignature: dword; property Count: integer read GetCount; property Items[Index: integer]: TExtAction read GetItems; property FileType[Index: integer]: TExtAction read GetItems; end; const cMaskDefault = 'default'; cMaskFolder = 'folder'; cMaskFile = 'file'; implementation uses DCXmlConfig, uDCVersion, uGlobsPaths, uDCUtils, crc, uLng, SysUtils, uLog, DCClassesUtf8, DCOSUtils, strUtils; { TExtActionCommand.Create } constructor TExtActionCommand.Create(ParamActionName, ParamCommandName, ParamParams, ParamStartPath: string); begin inherited Create; FActionName := ParamActionName; FCommandName := ParamCommandName; FParams := ParamParams; FStartPath := ParamStartPath; FIconIndex := -1; // <--IconIndex is used only in "uShellContextMenu" to show an icon next to the command AND is filled correctly when doing "TExts.GetExtActions" FIconBitmap := nil; // <--IconBitmap is used only in "uShellContextMenu" to show an icon next to the command AND is filled correctly when doing "CreateActionSubMenu" from "uShellContextMenu" end; { TExtActionCommand.Destroy } destructor TExtActionCommand.Destroy; begin if Assigned(FIconBitmap) then FreeAndNil(FIconBitmap); inherited; end; { TExtActionCommand.CloneExtAction } function TExtActionCommand.CloneExtAction: TExtActionCommand; begin Result := TExtActionCommand.Create(self.FActionName, self.FCommandName, self.FParams, self.FStartPath); end; { TExtActionList.Create } constructor TExtActionList.Create; begin inherited Create; end; { TExtActionList.Clear } procedure TExtActionList.Clear; var i: integer; begin for i := 0 to Count - 1 do ExtActionCommand[i].Free; inherited Clear; end; { TExtActionList.Add } function TExtActionList.Add(ExtActionCommand: TExtActionCommand): integer; begin Result := inherited Add(ExtActionCommand); end; { TExtActionList.Insert } procedure TExtActionList.Insert(Index: integer; ExtActionCommand: TExtActionCommand); begin inherited Insert(Index, ExtActionCommand); end; { TExtActionList.DeleteExtActionCommand } procedure TExtActionList.DeleteExtActionCommand(Index: integer); begin ExtActionCommand[Index].Free; Delete(Index); end; { TExtActionList.GetExtActionCommand } function TExtActionList.GetExtActionCommand(Index: integer): TExtActionCommand; begin Result := TExtActionCommand(Items[Index]); end; constructor TExtAction.Create; begin inherited Create; Extensions := TStringList.Create; Extensions.CaseSensitive := False; ActionList := TExtActionList.Create; end; destructor TExtAction.Destroy; begin if Assigned(Extensions) then FreeAndNil(Extensions); if Assigned(ActionList) then FreeAndNil(ActionList); inherited; end; { TExtAction.GetIconListForStorage } function TExtAction.GetIconListForStorage: string; var iExtension: integer; begin Result := ''; if Extensions.Count = 0 then Result := rsMsgUserDidNotSetExtension else for iExtension := 0 to pred(Extensions.Count) do if Result = '' then Result := Extensions[iExtension] else Result := Result + '|' + Extensions[iExtension]; end; { TExtAction.SetIconListFromStorage } procedure TExtAction.SetIconListFromStorage(sStorage: string); var PosPipe, LastPosPipe: integer; begin LastPosPipe := 0; repeat PosPipe := posEx('|', sStorage, LastPosPipe + 1); if PosPipe <> 0 then begin Extensions.add(copy(sStorage, LastPosPipe + 1, ((PosPipe - LastPosPipe) - 1))); LastPosPipe := PosPipe; end; until PosPipe = 0; if length(sStorage) > LastPosPipe then Extensions.add(copy(sStorage, LastPosPipe + 1, (length(sStorage) - LastPosPipe))); if Extensions.Count = 0 then Extensions.Add(rsMsgUserDidNotSetExtension); end; { TExts.LegacyLoadFromFile } //We need to keep this routine to be able to load "old legacy format" of the //file associated action based on file extension that was using DC originally. procedure TExts.LegacyLoadFromFile(const sName: string); var extFile: TStringListEx; sLine, s, sExt: string; extCurrentFileType: TExtAction; I, iIndex: integer; sCommandName, sEndingPart, sCommandCmd, sParams: string; begin extFile := TStringListEx.Create; try extFile.LoadFromFile(sName); extCurrentFileType := nil; for I := 0 to extFile.Count - 1 do begin sLine := extFile.Strings[I]; sLine := Trim(sLine); if (sLine = '') or (sLine[1] = '#') then Continue; if sLine[1] = '[' then begin extCurrentFileType := TExtAction.Create; FExtList.Add(extCurrentFileType); iIndex := pos(']', sLine); if iIndex > 0 then sLine := Copy(sLine, 1, iIndex) else logWrite('] not found in line ' + sLine); extCurrentFileType.Name:=sLine; // Just in case we don't have a name later on, let's named the file type based on the extension defined. // fill extensions list s := sLine; Delete(s, 1, 1); // Delete '[' Delete(s, Length(s), 1); // Delete ']' s := s + '|'; while Pos('|', s) <> 0 do begin iIndex := Pos('|', s); sExt := Copy(s, 1, iIndex - 1); Delete(s, 1, iIndex); extCurrentFileType.Extensions.Add(sExt); end; end // end if.. '[' else begin // this must be a command if not assigned(extCurrentFileType) then begin logWrite('Command ' + sLine + ' have not defined extension - ignored.'); Continue; end; // now set command to lowercase s := sLine; for iIndex := 1 to Length(s) do begin if s[iIndex] = '=' then Break; s[iIndex] := LowerCase(s[iIndex]); end; // DCDebug(sLine); if Pos('name', s) = 1 then // File type name extCurrentFileType.Name := Copy(sLine, iIndex + 1, Length(sLine)) else if Pos('icon', s) = 1 then // File type icon extCurrentFileType.Icon := Copy(sLine, iIndex + 1, Length(sLine)) else // action begin sCommandName := Copy(sLine, 1, iIndex - 1); sEndingPart := Copy(sLine, iIndex + 1, Length(sLine)); try SplitCmdLineToCmdParams(sEndingPart, sCommandCmd, sParams); except sCommandCmd := ' '+sEndingPart; //Just in case the user has something wrong in his settings, LIKE a missing ending quote... sParams := ''; end; sCommandCmd := Trim(sCommandCmd); sParams := Trim(sParams); extCurrentFileType.ActionList.Add(TExtActionCommand.Create(sCommandName, sCommandCmd, sParams, '')); end; end; end; finally extFile.Free; end; end; function TExts.GetExtActions(aFile: TFile; paramActionList: TExtActionList; pIndexOfFirstPossibleFileType: PInteger = nil; bWantedAllActions: boolean = False): boolean; var I, iActionNo: integer; sMask: string; ExtActionCommand: TExtActionCommand; begin if pIndexOfFirstPossibleFileType <> nil then pIndexOfFirstPossibleFileType^ := -1; Result := False; if aFile.IsDirectory or aFile.IsLinkToDirectory then sMask := cMaskFolder else sMask := LowerCase(aFile.Extension); if Length(sMask) <> 0 then for I := 0 to FExtList.Count - 1 do with GetItems(i) do begin if Extensions.IndexOf(sMask) >= 0 then begin if paramActionList.Count > 0 then paramActionList.Add(TExtActionCommand.Create('-', '', '', '')); for iActionNo := 0 to pred(ActionList.Count) do begin ExtActionCommand := ActionList.ExtActionCommand[iActionNo].CloneExtAction; ExtActionCommand.IconIndex := IconIndex; paramActionList.Add(ExtActionCommand); end; if pIndexOfFirstPossibleFileType <> nil then if pIndexOfFirstPossibleFileType^ = -1 then pIndexOfFirstPossibleFileType^ := I; Result := True; if not bWantedAllActions then Break; end; end; if sMask = cMaskFolder then Exit; for I := 0 to FExtList.Count - 1 do with GetItems(i) do begin if Extensions.IndexOf(cMaskFile) >= 0 then begin if paramActionList.Count > 0 then paramActionList.Add(TExtActionCommand.Create('-', '', '', '')); for iActionNo := 0 to pred(ActionList.Count) do begin ExtActionCommand := ActionList.ExtActionCommand[iActionNo].CloneExtAction; ExtActionCommand.IconIndex := IconIndex; paramActionList.Add(ExtActionCommand); end; if pIndexOfFirstPossibleFileType <> nil then if pIndexOfFirstPossibleFileType^ = -1 then pIndexOfFirstPossibleFileType^ := I; Result := True; if not bWantedAllActions then Break; end; end; end; function TExts.GetCount: integer; begin Result := FExtList.Count; end; function TExts.GetItems(Index: integer): TExtAction; begin Result := TExtAction(FExtList.Items[Index]); end; constructor TExts.Create; begin inherited Create; FExtList := TObjectList.Create; end; destructor TExts.Destroy; begin if assigned(FExtList) then FreeAndNil(FExtList); inherited; end; procedure TExts.Clear; begin FExtList.Clear; end; function TExts.AddItem(AExtAction: TExtAction): integer; begin Result := FExtList.Add(AExtAction); end; procedure TExts.DeleteItem(Index: integer); begin FExtList.Delete(Index); end; procedure TExts.MoveItem(SrcIndex, DestIndex: integer); begin FExtList.Move(SrcIndex, DestIndex); end; function TExts.GetExtActionCmd(aFile: TFile; const sActionName: string; var sCmd: string; var sParams: string; var sStartPath: string): boolean; var I: integer; sMask: string; iAction: integer; begin Result := False; sCmd := ''; sParams := ''; sStartPath := ''; if aFile.IsDirectory or aFile.IsLinkToDirectory then sMask := cMaskFolder else sMask := LowerCase(aFile.Extension); if Length(sMask) <> 0 then begin for I := 0 to FExtList.Count - 1 do with GetItems(I) do begin if Extensions.IndexOf(sMask) >= 0 then begin iAction := 0; while (iAction < ActionList.Count) and (not Result) do begin if UpperCase(ActionList.ExtActionCommand[iAction].ActionName) = UpperCase(sActionName) then begin sCmd := ActionList.ExtActionCommand[iAction].CommandName; sParams := ActionList.ExtActionCommand[iAction].Params; sStartPath := ActionList.ExtActionCommand[iAction].StartPath; Result := True; Exit; end else begin Inc(iAction); end; end; end; end; end; // if command not found then try to find default command for I := 0 to FExtList.Count - 1 do with GetItems(I) do begin if Extensions.IndexOf(cMaskDefault) >= 0 then begin iAction := 0; while (iAction < ActionList.Count) and (not Result) do begin if UpperCase(ActionList.ExtActionCommand[iAction].ActionName) = UpperCase(sActionName) then begin sCmd := ActionList.ExtActionCommand[iAction].CommandName; sParams := ActionList.ExtActionCommand[iAction].Params; sStartPath := ActionList.ExtActionCommand[iAction].StartPath; Result := True; Exit; end else begin Inc(iAction); end; end; end; end; end; { TExts.ComputeSignature } function TExts.ComputeSignature: dword; var iExtType, iExtension, iAction: integer; begin Result := $00000000; for iExtType := 0 to pred(Count) do begin Result := crc32(Result, @Items[iExtType].Name[1], length(Items[iExtType].Name)); if length(Items[iExtType].Icon) > 0 then Result := crc32(Result, @Items[iExtType].Icon[1], length(Items[iExtType].Icon)); for iExtension := 0 to pred(Items[iExtType].Extensions.Count) do if length(Items[iExtType].Extensions.Strings[iExtension]) > 0 then Result := crc32(Result, @Items[iExtType].Extensions.Strings[iExtension][1], length(Items[iExtType].Extensions.Strings[iExtension])); for iAction := 0 to pred(Items[iExtType].ActionList.Count) do begin if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FActionName)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FCommandName)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FParams) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FParams[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FParams)); if length(Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath) > 0 then Result := crc32(Result, @Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath[1], length(Items[iExtType].ActionList.ExtActionCommand[iAction].FStartPath)); end; end; end; { TExts.SaveXMLFile } procedure TExts.SaveXMLFile; var ActionList: TExtActionList; iFileType, iAction: Integer; ExtXMLSettings: TXmlConfig = nil; Root, Node, SubNode, SubSubNode: TXmlNode; begin ExtXMLSettings := TXmlConfig.Create(gpCfgDir + gcfExtensionAssociation); try with ExtXMLSettings do begin Root := ExtXMLSettings.RootNode; SetAttr(Root, 'DCVersion', dcVersion); Node := FindNode(Root, 'ExtensionAssociation', True); ClearNode(Node); { Each file type has its own extensions } for iFileType := 0 to Pred(Count) do begin SubNode := AddNode(Node, 'FileType'); SetValue(SubNode, 'Name', FileType[iFileType].Name); SetValue(SubNode, 'IconFile', FileType[iFileType].Icon); SetValue(SubNode, 'ExtensionList', FileType[iFileType].GetIconListForStorage); SubNode := AddNode(SubNode, 'Actions'); ActionList := FileType[iFileType].ActionList; for iAction := 0 to Pred(ActionList.Count) do begin SubSubNode := AddNode(SubNode, 'Action'); SetValue(SubSubNode, 'Name', ActionList.ExtActionCommand[iAction].ActionName); if ActionList.ExtActionCommand[iAction].CommandName <> '' then SetValue(SubSubNode, 'Command', ActionList.ExtActionCommand[iAction].CommandName); if ActionList.ExtActionCommand[iAction].Params <> '' then SetValue(SubSubNode, 'Params', ActionList.ExtActionCommand[iAction].Params); if ActionList.ExtActionCommand[iAction].StartPath <> '' then SetValue(SubSubNode, 'StartPath', ActionList.ExtActionCommand[iAction].StartPath); end; end; end; ExtXMLSettings.Save; finally ExtXMLSettings.Free; end; end; { TExts.Load} function TExts.Load: boolean; begin Result := False; try if (mbFileExists(gpCfgDir + 'doublecmd.ext')) AND (not mbFileExists(gpCfgDir + gcfExtensionAssociation)) then begin LegacyLoadFromFile(gpCfgDir + 'doublecmd.ext'); SaveXmlFile; mbRenameFile(gpCfgDir + 'doublecmd.ext', gpCfgDir + 'doublecmd.ext.obsolete'); Result := True; end else begin Result := LoadXMLFile; end; except Result := False; end; end; { TExts.LoadXMLFile } function TExts.LoadXMLFile: boolean; var extCurrentFileType: TExtAction; ExtXMLSettings: TXmlConfig = nil; Node, SubNode, SubSubNode: TXmlNode; sName, sIconFilename, sExtensionList, sActionName, sCommandName, sParams, sStartPath: string; begin Result := False; try ExtXMLSettings := TXmlConfig.Create(gpCfgDir + gcfExtensionAssociation); try ExtXMLSettings.Load; with ExtXMLSettings do begin Node := FindNode(ExtXMLSettings.RootNode, 'ExtensionAssociation'); if Assigned(Node) then begin SubNode := Node.FirstChild; while Assigned(SubNode) do begin if SubNode.CompareName('FileType') = 0 then begin sName := ExtXMLSettings.GetValue(SubNode, 'Name', rsMsgUserDidNotSetName); if sName <> rsMsgUserDidNotSetName then begin sIconFilename := ExtXMLSettings.GetValue(SubNode, 'IconFile', ''); sExtensionList := ExtXMLSettings.GetValue(SubNode, 'ExtensionList', rsMsgUserDidNotSetExtension); extCurrentFileType := TExtAction.Create; extCurrentFileType.Name := sName; extCurrentFileType.Icon := sIconFilename; extCurrentFileType.SetIconListFromStorage(sExtensionList); SubSubNode := FindNode(SubNode, 'Actions'); if Assigned(SubSubNode) then begin SubSubNode := SubSubNode.FirstChild; while Assigned(SubSubNode) do begin if SubSubNode.CompareName('Action') = 0 then begin sActionName := ExtXMLSettings.GetValue(SubSubNode, 'Name', rsMsgUserDidNotSetName); sCommandName := ExtXMLSettings.GetValue(SubSubNode, 'Command', ''); sParams := ExtXMLSettings.GetValue(SubSubNode, 'Params', ''); sStartPath := ExtXMLSettings.GetValue(SubSubNode, 'StartPath', ''); extCurrentFileType.ActionList.Add(TExtActionCommand.Create(sActionName, sCommandName, sParams, sStartPath)); end; SubSubNode := SubSubNode.NextSibling; end; end; AddItem(extCurrentFileType); end; end; SubNode := SubNode.NextSibling; end; end; end; finally ExtXMLSettings.Free; end; Result := True; except Result := False; end; end; end. //Cleaner les >Action@//Utiliser ExtFileType comme nom au lieu de Action car pas tout de suite une action//Remplacer le Savefile by SaveXMLFile doublecmd-0.7.1/src/fsyncdirsdlg.lrt0000644000175000001440000000270112460214671016525 0ustar alexxusersTFRMSYNCDIRSDLG.CAPTION=Synchronize directories TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT=*.* TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION=>> TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION=>> TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION=Compare TFRMSYNCDIRSDLG.CHKONLYSELECTED.CAPTION=only selected TFRMSYNCDIRSDLG.LABEL1.CAPTION=(in main window) TFRMSYNCDIRSDLG.CHKASYMMETRIC.CAPTION=asymmetric TFRMSYNCDIRSDLG.CHKSUBDIRS.CAPTION=Subdirs TFRMSYNCDIRSDLG.CHKBYCONTENT.CAPTION=by content TFRMSYNCDIRSDLG.CHKIGNOREDATE.CAPTION=ignore date TFRMSYNCDIRSDLG.GROUPBOX1.CAPTION=Show: TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION=> TFRMSYNCDIRSDLG.SBEQUAL.CAPTION== TFRMSYNCDIRSDLG.SBNOTEQUAL.CAPTION=!= TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION=< TFRMSYNCDIRSDLG.SBDUPLICATES.CAPTION=duplicates TFRMSYNCDIRSDLG.SBSINGLES.CAPTION=singles TFRMSYNCDIRSDLG.BTNSYNCHRONIZE.CAPTION=Synchronize TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION=Close TFRMSYNCDIRSDLG.STATUSBAR1.PANELS[0].TEXT=Please press "Compare" to start TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION=Name TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION=Size TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION=Date TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[3].TITLE.CAPTION=<=> TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION=Date TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION=Size TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION=Name TFRMSYNCDIRSDLG.MENUITEMVIEWLEFT.CAPTION=View left TFRMSYNCDIRSDLG.MENUITEMVIEWRIGHT.CAPTION=View right TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION=Compare doublecmd-0.7.1/src/ufindmmap.pas0000644000175000001440000001113011740427612015771 0ustar alexxusers{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz implementind memory searching with case and mmap file to memory contributors: Copyright (C) 2006-2007 Koblov Alexander (Alexx2000@mail.ru) } unit uFindMmap; {$mode objfpc}{$H+} interface type TAbortFunction = function: Boolean of object; {en Searches data in memory for a string. @param(pDataAddr Pointer to the beginning of the data buffer.) @param(iDataLength Length of the data buffer in bytes.) @param(iStartPos Position in the buffer from which to begin search.) @param(sSearchText Text that is searched for in the data buffer.) @param(bCaseSensitive If @true the search is case sensitive.) @param(bSearchBackwards If @true the search is done in iStartPos..0. If @false the search is done in iStartPos..(iLength-1).) @returns(If the string was not found it returns -1. If the string was found it returns pointer to the data buffer where the searched text begins.) } function PosMem(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): Pointer; {en Searches a file for a string using memory mapping. @param(sFileName File to search in.) @param(sFindData String to search for.) @param(bCase If @true the search is case-sensitive.) @param(Abort This function is called repeatedly during searching. If it returns @true the search is aborted.) @returns(-1 in case of error @br 0 if the string wasn't found @br 1 if the string was found) } function FindMmap(const sFileName:String; const sFindData:String; bCase:Boolean; Abort: TAbortFunction):Integer; implementation uses DCOSUtils; function PosMem(pDataAddr: PChar; iDataLength, iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): Pointer; var SearchTextLength: Integer; function sPos2(pAdr: PChar):Boolean; var i: Integer; begin Result := False; for i := 1 to SearchTextLength do begin case bCaseSensitive of False: if UpCase(pAdr^) <> UpCase(sSearchText[i]) then Exit; // Only for Ansi True : if pAdr^ <> sSearchText[i] then Exit; end; Inc(pAdr); end; Result:=True; end; var pCurrentAddr, pEndAddr: PAnsiChar; begin Result := Pointer(-1); SearchTextLength := Length(sSearchText); if (SearchTextLength <= 0) or (iDataLength <= 0) then Exit; pCurrentAddr := pDataAddr + iStartPos; pEndAddr := pDataAddr + iDataLength - SearchTextLength; if bSearchBackwards and (pCurrentAddr > pEndAddr) then // Move to the first possible position for searching backwards. pCurrentAddr := pEndAddr; if (pEndAddr < pDataAddr) or (pCurrentAddr < pDataAddr) or (pCurrentAddr > pEndAddr) then Exit; while True do begin if (pCurrentAddr > pEndAddr) or (pCurrentAddr < pDataAddr) then Exit; if sPos2(pCurrentAddr) then begin Result := pCurrentAddr; Exit; end; case bSearchBackwards of False: Inc(pCurrentAddr); True : Dec(pCurrentAddr); end; end; end; function FindMmap(const sFileName, sFindData:String; bCase:Boolean; Abort: TAbortFunction):Integer; function PosMem(pAdr:PChar; iLength:Integer):Pointer; var xIndex:Integer; DataLength: Integer; function sPos(pAdr:PChar):Boolean; var i:Integer; begin Result:=False; for i:=1 to DataLength do begin case bCase of False:if UpCase(pAdr^)<>UpCase(sFindData[i]) then Exit; True: if pAdr^<>sFindData[i] then Exit; end; inc(pAdr); end; Result:=True; end; begin Result:=pointer(-1); DataLength := Length(sFindData); for xIndex:=0 to iLength - DataLength do begin if sPos(pAdr) then begin Result:=pAdr; Exit; end; inc(pAdr); if Abort() then Exit; end; end; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMem(fmr.MappedFile, fmr.FileSize) <> Pointer(-1) then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; end. doublecmd-0.7.1/src/fdescredit.pas0000644000175000001440000001155012654436727016147 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Dialog for editing file comments. Copyright (C) 2008-2016 Alexander Koblov (alexx2000@mail.ru) 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. } unit fDescrEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, ActnList, uDescr, uFormCommands, uFileView; type { TfrmDescrEdit } TfrmDescrEdit = class(TForm, IFormCommands) actSaveDescription: TAction; ActionList: TActionList; btnOK: TBitBtn; btnCancel: TBitBtn; cbEncoding: TComboBox; lblFileName: TLabel; lblEncoding: TLabel; lblEditCommentFor: TLabel; memDescr: TMemo; procedure actExecute(Sender: TObject); procedure cbEncodingChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure memDescrKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private FDescr: TDescription; FCommands: TFormCommands; procedure DisplayEncoding; property Commands: TFormCommands read FCommands implements IFormCommands; public constructor Create(TheOwner: TComponent); override; published procedure cm_SaveDescription(const Params: array of string); end; function ShowDescrEditDlg(const sFileName: String; FileView: TFileView): Boolean; implementation {$R *.lfm} uses LCLType, LConvEncoding, DCStrUtils, uHotkeyManager, uLng, uGlobs, uFileSystemFileSource; const HotkeysCategory = 'Edit Comment Dialog'; function ShowDescrEditDlg(const sFileName: String; FileView: TFileView): Boolean; const nbsp = #194#160; var FileSystem: Boolean; begin Result:= False; FileSystem:= FileView.FileSource.IsClass(TFileSystemFileSource); with TfrmDescrEdit.Create(Application) do try if not FileSystem then FDescr:= TDescription.Create(False) else begin FDescr:= (FileView.FileSource as TFileSystemFileSource).Description; FDescr.Reset; end; lblFileName.Caption:= sFileName; // Read description memDescr.Lines.Text:= StringReplace(FDescr.ReadDescription(sFileName), nbsp, LineEnding, [rfReplaceAll]); DisplayEncoding; if ShowModal = mrOK then begin FDescr.WriteDescription(sFileName, StringReplace(memDescr.Lines.Text, LineEnding, nbsp, [rfReplaceAll])); FDescr.SaveDescription; FileView.Reload(True); Result:= True; end; if not FileSystem then FDescr.Free; finally Free; end; end; { TfrmDescrEdit } procedure TfrmDescrEdit.FormCreate(Sender: TObject); var HMForm: THMForm; Hotkey: THotkey; begin // fill encoding combobox cbEncoding.Clear; GetSupportedEncodings(cbEncoding.Items); HMForm := HotMan.Register(Self, HotkeysCategory); Hotkey := HMForm.Hotkeys.FindByCommand('cm_SaveDescription'); if Assigned(Hotkey) then btnOK.Caption := btnOK.Caption + ' (' + ShortcutsToText(Hotkey.Shortcuts) + ')'; end; procedure TfrmDescrEdit.FormDestroy(Sender: TObject); begin HotMan.UnRegister(Self); end; procedure TfrmDescrEdit.memDescrKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then ModalResult:= btnCancel.ModalResult; end; procedure TfrmDescrEdit.DisplayEncoding; var I: Integer; begin for I:= 0 to cbEncoding.Items.Count - 1 do if SameText(NormalizeEncoding(cbEncoding.Items.Strings[I]), FDescr.Encoding) then begin cbEncoding.ItemIndex:= I; Break; end; end; constructor TfrmDescrEdit.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, actionList); end; procedure TfrmDescrEdit.cm_SaveDescription(const Params: array of string); begin ModalResult:= btnOK.ModalResult; end; procedure TfrmDescrEdit.cbEncodingChange(Sender: TObject); begin FDescr.Encoding:= cbEncoding.Text; memDescr.Lines.Text:= FDescr.ReadDescription(lblFileName.Caption); end; procedure TfrmDescrEdit.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; initialization TFormCommands.RegisterCommandsForm(TfrmDescrEdit, HotkeysCategory, @rsHotkeyCategoryEditCommentDialog); end. doublecmd-0.7.1/src/fconnectionmanager.lfm0000644000175000001440000002745312023046500017647 0ustar alexxusersobject frmConnectionManager: TfrmConnectionManager Left = 321 Height = 366 Top = 149 Width = 431 Caption = 'Connection manager' ClientHeight = 366 ClientWidth = 431 OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '1.1' object gbConnectTo: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnConnect AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 360 Top = 0 Width = 281 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 12 BorderSpacing.Bottom = 6 Caption = 'Connect to:' ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 337 ClientWidth = 277 TabOrder = 0 object tvConnections: TTreeView Left = 4 Height = 329 Top = 4 Width = 269 Align = alClient DefaultItemHeight = 24 ReadOnly = True StateImages = ImageList TabOrder = 0 OnSelectionChanged = tvConnectionsSelectionChanged Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end end object btnConnect: TBitBtn AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 16 Width = 120 Anchors = [akTop, akRight] BorderSpacing.Right = 12 Caption = 'C&onnect' Enabled = False OnClick = btnConnectClick TabOrder = 1 end object btnAdd: TBitBtn AnchorSideLeft.Control = btnConnect AnchorSideTop.Control = btnConnect AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnConnect AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 64 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 18 Caption = 'A&dd' Enabled = False OnClick = btnAddClick TabOrder = 2 end object btnEdit: TBitBtn AnchorSideLeft.Control = btnAdd AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAdd AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 100 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '&Edit' Enabled = False OnClick = btnEditClick TabOrder = 3 end object btnDelete: TBitBtn AnchorSideLeft.Control = btnEdit AnchorSideTop.Control = btnEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnEdit AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 136 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '&Delete' Enabled = False OnClick = btnDeleteClick TabOrder = 4 end object btnCancel: TBitBtn AnchorSideLeft.Control = btnDelete AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnDelete AnchorSideRight.Side = asrBottom Left = 299 Height = 30 Top = 172 Width = 120 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 5 end object ImageList: TImageList Height = 22 Width = 22 left = 345 top = 253 Bitmap = { 4C69020000001600000016000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000373AD01000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000273 AD00000000000373AD00007AB9FF007AB9FF007AB9FF007AB9FF007AB9FF007A B9FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000529A00007A B9FFA4FEFDFE9BF6FBFF96F1FDFF92EDFDFF8EE8FEFF8CE5FFFE0275B1FF0046 8A0F0373AD000000000000000000000000000000000000000000000000000000 0000000000000000000000000000006AA700007AB9FF93E6F2FF8FE4F3FF8CE1 F5FF89DFF6FF86DDF7FF83DBF8FF80D9F9FF80DAFDFF0275B1FF00000000006B A506006CA506006CA506006CA506006CA506006CA506006CA506006CA506006D A60400000000007AB9FFB8F5FEFEACEDFAFFA9EAF8FFA5E7F8FFA1E4F8FF9EE1 F7FF9ADEF6FF96DBF6FF92D9F5FE96DDFCFF0372ADFF0371ABFF0370A9FF046E A7FF056EA5FF056CA3FF056BA1FF066A9EFF06699DFF358DB900004B79140079 B8FFB7FBFFFFA4F5FEFFA2F3FDFF9FF1FCFF9DEEFCFF9AEDFBFF99EBFAFF95E9 F8FF94E6F8FF91E4F8FF8FE2F6FF8DE0F6FF8ADDF4FF88DBF4FF85D9F3FF82D7 F2FF80D4F1FF7ED3F1FF7BD1F0FF096395FF00507F000178B6FFB5FAFFFFA1F4 FDFF9FF1FDFF9DEFFCFF9AEDFBFF98EBF9FF96E9FAFF93E7F9FF91E5F7FF8EE2 F7FF8CE1F6FF8ADEF6FF88DCF4FF85DAF4FF83D7F3FF80D5F2FF7ED4F2FF7CD1 F0FF79D1F0FF096394FF00507F000177B4FFB2F8FFFF9FF3FCFF9EF0FDFF9BEF FCFF99ECFBFF97EAF9FF94E8F9FF92E5F9FF8FE3F7FF8DE1F6FF8ADFF6FF88DD F5FF85DAF4FF83D9F3FF81D6F2FF7FD5F2FF7DD3F1FF7AD0F0FF77CFF0FF0962 93FF00507F000176B2FFB0F7FFFF9FF1FCFF9CEFFBFF99EDFAFF97EBFAFF95E8 F9FF92E6F8FF90E3F8FF8EE2F7FF8CE0F6FF89DDF5FF87DCF4FF84D9F3FF82D7 F2FF7FD5F2FF7ED3F0FF7AD0F1FF78CEF0FF76CDEFFF0A6292FF00517F000275 B1FFAEF5FEFF9DEFFCFF9BEDFAFF98EBFBFF96E9F9FF93E7F9FF91E4F7FF8FE3 F7FF8CE0F6FF89DEF6FF87DCF4FF85DAF4FF83D8F2FF80D6F2FF7FD3F2FF7BD1 F0FF79CFF0FF77CCEFFF74CCEEFF0A6191FF00517F000274AFFFACF4FEFF9BEE FBFF98ECFBFF96E9F9FF93E7F8FF91E5F7FF8FE3F7FF8DE0F6FF8BDFF6FF88DC F5FF85DBF4FF83D9F3FF81D6F2FF7FD4F1FF7CD2F0FF7AD0F0FF77CDEFFF76CC EEFF73CAEEFF0A6090FF00517F000372AEFFAAF2FDFF9AECFAFF97EAFAFF94E8 F9FF92E6F8FF8FE3F7FF8EE1F7FF8BDFF6FF89DDF5FF86DBF5FF84D9F3FF82D7 F3FF7FD5F2FF7CD2F1FF7AD1F0FF78CEEFFF76CCEFFF73CAEDFF71C9EEFF0A5F 8FFF00517F000472ABFFA8F0FCFF98EBFAFF95E9FAFF92E6F8FF90E4F7FF8EE2 F7FF8CE0F6FF8ADFF6FF87DCF4FF85DAF3FF83D7F2FF80D6F2FF7ED3F1FF7BD1 F0FF79CFEFFF76CDEFFF73CAEDFF72C8EDFF70C7ECFF0A5F8EFF00527F000470 AAFFA5EEFBFF96EAFAFF93E7F9FF91E6F8FF8FE3F7FF8CE1F7FF8ADFF5FF88DC F5FF85DAF4FF83D8F3FF81D7F2FF7ED3F1FF7CD2F1FF7ACFF0FF77CEEFFF74CB EEFF72C9EEFF70C7ECFF6DC6EDFF0A5F8DFF00528000046FA8FFA4ECFBFF94E7 F8FF92E5F8FF8FE3F7FF8DE2F6FF8BDFF6FF89DDF5FF87DBF4FF84D8F3FF82D7 F2FF7FD5F2FF7CD3F1FF7AD0F0FF78CEEFFF75CBEEFF74CAEEFF71C8EDFF6EC5 ECFF6CC4EBFF0B5E8CFF00528000056EA7FFA1EBF9FF93E7F8FF90E4F7FF8EE2 F7FF8CE0F6FF89DEF4FF87DCF4FF84D9F4FF82D8F2FF80D5F2FF7ED3F1FF7BD0 F0FF78CFEFFF76CCEEFF74CAEDFF72C9EDFF6FC6ECFF6CC4EBFF6AC2ECFF0B5D 8BFF01528000056DA4FF9FE9F9FF91E5F7FF8FE2F7FF8CE0F7FF8ADEF6FF88DD F5FF85DAF4FF83D8F3FF80D5F1FF7ED4F1FF7BD1F1FF79D0F0FF77CCEFFF75CB EEFF72C9EEFF6FC6EDFF6EC5ECFF6BC3EBFF69C2EBFF0C5C89FF01528000066C A3FF9CE8F8FF8EE3F8FF8CE1F7FF8ADFF6FF88DDF5FF86DBF5FF83D9F4FF81D7 F3FF7ED5F3FF7CD3F1FF7AD1F1FF77CEF0FF75CCEFFF73CAEEFF71C8EEFF6EC6 EDFF6CC4EBFF69C1EBFF68C0ECFF0B5C89FF01538000066BA2FFB1E7F7FEA6E0 F3FFA2DDF1FF9EDBF0FF9AD9EEFF96D6EDFF92D3ECFF8FD0EAFF8ACDE9FF87CA E7FF82C8E6FF7FC5E4FF7BC2E4FF77BFE2FF73BCE0FF6FBADFFF6BB7DDFF67B4 DCFF63B2DBFF0B5B87FF025380000043761107679BFF07679AFF086699FF0865 98FF086597FF086496FF096395FF096393FF096293FF096191FF0A6191FF0A60 8FFF0A5F8EFF0B5E8DFF0B5E8CFF0B5D8CFF0B5D8AFF0B5C89FF0C5B88FF0352 7F00000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000C5B88000000 000000000000000000000000000000000000606060FF606060FF606060FF6060 60FF606060FF606060FF606060FF606060FF606060FF606060FF606060FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000606060FFE4E4E4FFFDFDFDFFFDFDFDFFFCFCFCFFFAFAFAFFFAFA FAFFF9F9F9FFF8F8F8FFF7F7F7FFF7F7F7FFC6C6C6FF606060FF000000000000 0000000000000000000000000000000000000000000000000000606060FFF9F9 F9FFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFF9F9F9FFF9F9 F9FFF7F7F7FFF7F7F7FFF6F6F6FFEEEEEEFF606060FF00000000000000000000 000000000000000000000000000000000000606060FFFAFAFAFFBDBDBDFFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBDBD BDFFBDBDBDFFFDFDFDFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFAFAFAFFB3B3B3FFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFB3B3B3FFF4F4 F4FF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFAFAFAFFBCBCBCFFDADADAFFD9D9D9FFD8D8D8FFD6D6D6FFD5D5 D5FFD4D4D4FFD3D3D3FFD2D2D2FFD2D2D2FFB7B7B7FFF2F2F2FF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFAFA FAFFB1B1B1FFB6B6B6FFB6B6B6FFB5B5B5FFB5B5B5FFB5B5B5FFB5B5B5FFB5B5 B5FFB4B4B4FFB4B4B4FFB1B1B1FFF2F2F2FF606060FF00000000000000000000 000000000000000000000000000000000000606060FFF8F8F8FFBCBCBCFFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE3E3E3FFE2E2 E2FFBBBBBBFFF4F4F4FF606060FF000000000000000000000000000000000000 00006060603E606060B3606060FFF8F8F8FFBBBBBBFFD1D1D1FFCFCFCFFFCECE CEFFCDCDCDFFCCCCCCFFCBCBCBFFCACACAFFC9C9C9FFC8C8C8FFB6B6B6FFF1F1 F1FF606060FF606060FF606060B30000000000000000CDCDCD10CDCDCD2FCDCD CD5E606060FFF8F8F8FFB2B2B2FFB7B7B7FFB7B7B7FFB6B6B6FFB6B6B6FFB6B6 B6FFB6B6B6FFB6B6B6FFB6B6B6FFB5B5B5FFB2B2B2FFF2F2F2FF606060FFCDCD CDBFCDCDCD76CDCDCD37CDCDCD170000000000000000606060B3606060FFFAFA FAFFE8E8E8FFE5E5E5FFE5E5E5FFE4E4E4FFE2E2E2FFE3E3E3FFDCDCDCFFDCDC DCFFE2E2E2FFD9D9D9FFDFDFDFFFF3F3F3FF606060FF606060FF606060B30000 000000000000000000000000000000000000606060FFFEFEFEFFA5A5A5FF8A8A 8AFFABABABFFD5D5D5FFBDBDBDFFBABABAFFB9B9B9FFB9B9B9FFB9B9B9FFB9B9 B9FFB8B8B8FFFCFCFCFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFEFEFEFF888888FFB2B2B2FF7E7E7EFFD6D6 D6FFC3C3C3FFDCDCDCFFDCDCDCFFDCDCDCFFDBDBDBFFDBDBDBFFB5B5B5FFFCFC FCFF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFDFDFDFFAAAAAAFF7C7C7CFFD3D3D3FFDEDEDEFFBDBDBDFFBDBD BDFFBCBCBCFFBCBCBCFFBCBCBCFFBCBCBCFFBDBDBDFFFCFCFCFF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFDFD FDFFDEDEDEFFDCDCDCFFDBDBDBFFDBDBDBFFDBDBDBFFDADADAFFDADADAFFDADA DAFFDADADAFFDADADAFFD9D9D9FFFCFCFCFF606060FF00000000000000000000 000000000000000000000000000000000000606060FFFDFDFDFFDADADAFFDADA DAFFAFAFAFFFC3C3C3FFA5A5A5FFC1C1C1FFADADADFFC3C3C3FFA3A3A3FFDCDC DCFFD7D7D7FFFCFCFCFF606060FF000000000000000000000000000000000000 00000000000000000000606060FFFDFDFDFFD7D7D7FFD6D6D6FFAEAEAEFFDBDB DBFFB6B6B6FFDADADAFFBBBBBBFFDCDCDCFFB4B4B4FFD7D7D7FFD3D3D3FFFCFC FCFF606060FF0000000000000000000000000000000000000000000000000000 0000606060FFFDFDFDFFD6D6D6FFD5D5D5FFB3B3B3FFD5D5D5FFAEAEAEFFD7D7 D7FFAFAFAFFFD6D6D6FFAAAAAAFFD4D4D4FFD3D3D3FFFCFCFCFF606060FF0000 0000000000000000000000000000000000000000000000000000606060FFFEFE FEFFFCFCFCFFFCFCFCFFFBFBFBFFFCFCFCFFFBFBFBFFFCFCFCFFFBFBFBFFFCFC FCFFFBFBFBFFFCFCFCFFFCFCFCFFFEFEFEFF606060FF00000000000000000000 00000000000000000000000000000000000053575591606060FF606060FF6060 60FF606060FF606060FF606060FF606060FF606060FF606060FF606060FF6060 60FF606060FF606060FF53575591000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end end doublecmd-0.7.1/src/ufilesorting.pas0000644000175000001440000010340112655352541016532 0ustar alexxusersunit uFileSorting; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileFunctions, uFile, uFileProperty, uDisplayFile; type TSortDirection = (sdNone, sdAscending, sdDescending); TFileSorting = record SortFunctions: TFileFunctions; SortDirection: TSortDirection; end; TFileSortings = array of TFileSorting; { TBaseSorter } TBaseSorter = class private FSortings: TFileSortings; {en Checks the files list for supported properties and removes not supported sortings. Currently treats files as if they all had the same properties. } procedure CheckSupportedProperties(SupportedFileProperties: TFilePropertiesTypes); {en Compares two file records using file functions. @param(ptr1 First file) @param(ptr2 Second file) @returns(-1 lesser @br 0 equal @br 1 greater) } class function Compare(const FileSorting: TFileSorting; File1, File2: TFile): Integer; public constructor Create(const Sortings: TFileSortings); reintroduce; end; { TFileSorter } TFileSorter = class(TBaseSorter) private FSortList: TFiles; function MultiCompare(item1, item2: Pointer):Integer; procedure QuickSort(FList: PPointerList; L, R : Longint); public {en Creates the sorter. @param(Files List of files to be sorted.) @param(FileSorting Sorting which will be used to sort file records.) } constructor Create(Files: TFiles; Sortings: TFileSortings); procedure Sort; {en Sorts files in FilesToSort using ASorting. } class procedure Sort(FilesToSort: TFiles; const ASortings: TFileSortings); end; { TDisplayFileSorter } TDisplayFileSorter = class(TBaseSorter) private FDisplaySortList: TDisplayFiles; FFileToInsert: TDisplayFile; FFilesToInsert: TDisplayFiles; FFileIndexToResort: Integer; FResortSingle: Boolean; FSequentialSearch: Boolean; // Use sequential search instead of binary protected procedure BinaryInsertSingle(FileToInsert: TDisplayFile; List: TFPList; L, R: Longint); procedure BinaryResortSingle(UnsortedIndex: Integer; PList: PPointerList; L, R : Longint); function BinarySearch(DisplayFile: Pointer; PList: PPointerList; L, R: Longint; out FoundIndex: Longint): Integer; procedure InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles); procedure InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles); function MultiCompare(item1, item2: Pointer):Integer; procedure QuickSort(FList: PPointerList; L, R : Longint); {en The single file at index IndexToResort should be repositioned in the SortedFiles list. All other elements, except for the element at IndexToResort, must be already sorted. } procedure ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles); procedure SequentialInsertSingle(FileToInsert: TDisplayFile; List: TFPList); public constructor Create(Files: TDisplayFiles; Sortings: TFileSortings); constructor Create(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings); constructor Create(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings; ASequentialSearch: Boolean = False); constructor Create(IndexToResort: Integer; SortedFiles: TDisplayFiles; const Sortings: TFileSortings); procedure Sort; class procedure InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings); class procedure InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings; ASequentialSearch: Boolean = False); class procedure ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles; const ASortings: TFileSortings); class procedure Sort(FilesToSort: TDisplayFiles; const ASortings: TFileSortings); end; {en Returns true if the file functions will sort by the given sort function. } function HasSortFunction(FileFunctions: TFileFunctions; SortFunction: TFileFunction): Boolean; function HasSortFunction(FileSortings: TFileSortings; SortFunction: TFileFunction): Boolean; function GetSortDirection(FileSortings: TFileSortings; SortFunction: TFileFunction): TSortDirection; function GetSortDirection(FileSortings: TFileSortings; SortFunctions: TFileFunctions): TSortDirection; {en Adds a function to the given list of functions. } procedure AddSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); {en Deletes a function from the given list of functions. } procedure DeleteSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); {en Adds sorting by functions with a given sorting direction to existing sorting. } procedure AddSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); procedure AddOrUpdateSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); {en Checks if there is a sorting by Name, NameNoExtension or Extension and adds such sortings if there isn't. } procedure AddSortingByNameIfNeeded(var FileSortings: TFileSortings); {en Creates a deep copy of sortings. } function CloneSortings(const Sortings: TFileSortings): TFileSortings; function ICompareByDirectory(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByName(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByNameNoExt(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByExt (item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareBySize(item1, item2: TFile; bSortNegative: Boolean):Integer; function ICompareByDate(date1, date2: TDateTime; bSortNegative: Boolean):Integer; function ICompareByAttr(item1, item2: TFile; bSortNegative: Boolean):Integer; function CloneAndAddSortByNameIfNeeded(const Sortings: TFileSortings): TFileSortings; function ReverseSortDirection(SortDirection: TSortDirection): TSortDirection; function ReverseSortDirection(Sortings: TFileSortings): TFileSortings; implementation uses DCBasicTypes, uGlobs, DCStrUtils, uDCUtils {$IFDEF fileSortingTime} , uDebug {$ENDIF} ; {$IFDEF fileSortingTime} var fileSortingTimer: TDateTime; {$ENDIF} procedure TFPListFastMove(CurIndex, NewIndex: Integer; PList: PPointerList); var Temp: Pointer; begin Temp := PList^[CurIndex]; if NewIndex > CurIndex then System.Move(PList^[CurIndex+1], PList^[CurIndex], (NewIndex - CurIndex) * SizeOf(Pointer)) else System.Move(PList^[NewIndex], PList^[NewIndex+1], (CurIndex - NewIndex) * SizeOf(Pointer)); PList^[NewIndex] := Temp; end; function HasSortFunction(FileFunctions: TFileFunctions; SortFunction: TFileFunction): Boolean; var i: Integer; begin for i := 0 to Length(FileFunctions) - 1 do begin if SortFunction = FileFunctions[i] then Exit(True); end; Result := False; end; function HasSortFunction(FileSortings: TFileSortings; SortFunction: TFileFunction): Boolean; var i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, SortFunction) then Exit(True); end; Result := False; end; function GetSortDirection(FileSortings: TFileSortings; SortFunction: TFileFunction): TSortDirection; var i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, SortFunction) then Exit(FileSortings[i].SortDirection); end; Result := sdNone; end; function GetSortDirection(FileSortings: TFileSortings; SortFunctions: TFileFunctions): TSortDirection; var i, j: Integer; Found: Boolean; begin for i := 0 to Length(FileSortings) - 1 do begin if Length(FileSortings[i].SortFunctions) = Length(SortFunctions) then begin Found := True; for j := 0 to Length(SortFunctions) - 1 do if FileSortings[i].SortFunctions[j] <> SortFunctions[j] then begin Found := False; Break; end; if Found then Exit(FileSortings[i].SortDirection); end; end; Result := sdNone; end; procedure AddSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); begin SetLength(FileFunctions, Length(FileFunctions) + 1); FileFunctions[Length(FileFunctions) - 1] := SortFunction; end; procedure DeleteSorting(var FileSortings: TFileSortings; Index: Integer); var Len: Integer; i: Integer; begin Len := Length(FileSortings); for i := Index + 1 to Len - 1 do FileSortings[i - 1] := FileSortings[i]; SetLength(FileSortings, Len - 1); end; procedure DeleteSortFunction(var FileFunctions: TFileFunctions; SortFunction: TFileFunction); var Len: Integer; i, j: Integer; begin for i := Low(FileFunctions) to High(FileFunctions) do if FileFunctions[i] = SortFunction then begin Len := Length(FileFunctions); for j := i + 1 to Len - 1 do FileFunctions[j - 1] := FileFunctions[j]; SetLength(FileFunctions, Len - 1); Break; end; end; procedure AddSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); var SortingIndex: Integer; begin if Length(SortFunctions) > 0 then begin SortingIndex := Length(Sortings); SetLength(Sortings, SortingIndex + 1); Sortings[SortingIndex].SortFunctions := SortFunctions; Sortings[SortingIndex].SortDirection := SortDirection; end; end; procedure AddSorting(var FileSortings: TFileSortings; SortFunction: TFileFunction; SortDirection: TSortDirection); var SortFunctions: TFileFunctions = nil; begin AddSortFunction(SortFunctions, SortFunction); AddSorting(FileSortings, SortFunctions, SortDirection); end; procedure AddOrUpdateSorting(var Sortings: TFileSortings; SortFunctions: TFileFunctions; SortDirection: TSortDirection); var i, j: Integer; RemainingFunctions: TFileFunctions; begin if Length(SortFunctions) = 0 then Exit; RemainingFunctions := SortFunctions; // Check if there is already sorting by the functions. // If it is then reverse direction of sorting. for i := Low(Sortings) to High(Sortings) do begin RemainingFunctions := SortFunctions; for j := Low(SortFunctions) to High(SortFunctions) do begin if HasSortFunction(Sortings[i].SortFunctions, SortFunctions[j]) then DeleteSortFunction(RemainingFunctions, SortFunctions[j]); end; if Length(RemainingFunctions) = 0 then begin // Sorting contains all functions - reverse direction. Sortings[i].SortDirection := ReverseSortDirection(Sortings[i].SortDirection); SortFunctions := nil; Break; end else if Length(RemainingFunctions) < Length(SortFunctions) then begin // Sorting contains some but not all functions - delete this one and later add sorting with all functions. Sortings[i].SortDirection := sdNone; end; end; for i := High(Sortings) downto Low(Sortings) do if Sortings[i].SortDirection = sdNone then DeleteSorting(Sortings, i); AddSorting(Sortings, SortFunctions, SortDirection); end; procedure AddSortingByNameIfNeeded(var FileSortings: TFileSortings); var bSortedByName: Boolean = False; bSortedByExtension: Boolean = False; i: Integer; begin for i := 0 to Length(FileSortings) - 1 do begin if HasSortFunction(FileSortings[i].SortFunctions, fsfName) then begin bSortedByName := True; bSortedByExtension := True; Exit; end else if HasSortFunction(FileSortings[i].SortFunctions, fsfNameNoExtension) then begin bSortedByName := True; end else if HasSortFunction(FileSortings[i].SortFunctions, fsfExtension) then begin bSortedByExtension := True; end; end; if not bSortedByName then begin if not bSortedByExtension then AddSorting(FileSortings, fsfName, sdAscending) else AddSorting(FileSortings, fsfNameNoExtension, sdAscending); end else if not bSortedByExtension then AddSorting(FileSortings, fsfExtension, sdAscending); // else // There is already a sorting by filename and extension. end; function CloneSortings(const Sortings: TFileSortings): TFileSortings; var i, j: Integer; begin SetLength(Result, Length(Sortings)); for i := 0 to Length(Sortings) - 1 do begin SetLength(Result[i].SortFunctions, Length(Sortings[i].SortFunctions)); for j := 0 to Length(Sortings[i].SortFunctions) - 1 do Result[i].SortFunctions[j] := Sortings[i].SortFunctions[j]; Result[i].SortDirection := Sortings[i].SortDirection; end; end; function CloneAndAddSortByNameIfNeeded(const Sortings: TFileSortings): TFileSortings; begin Result := CloneSortings(Sortings); // Add automatic sorting by name and/or extension if there wasn't any. AddSortingByNameIfNeeded(Result); end; function ICompareByDirectory(item1, item2: TFile; bSortNegative: Boolean):Integer; var IsDir1, IsDir2: Boolean; begin IsDir1 := item1.IsDirectory or item1.IsLinkToDirectory; IsDir2 := item2.IsDirectory or item2.IsLinkToDirectory; if (not IsDir1) and (not IsDir2) then Result := 0 else if (not IsDir1) and IsDir2 then Result := 1 else if IsDir1 and (not IsDir2) then Result := -1 // Put '..' first. else if item1.Name = '..' then Result := -1 else if item2.Name = '..' then Result := 1 else if (gSortFolderMode <> sfmSortNameShowFirst) then Result := 0 else Result := CompareStrings(item1.Name, item2.Name, gSortNatural, gSortCaseSensitivity); end; function ICompareByName(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Name, item2.Name, gSortNatural, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; function ICompareByNameNoExt(item1, item2: TFile; bSortNegative: Boolean):Integer; begin // Don't sort directories only by name. if item1.IsDirectory or item1.IsLinkToDirectory or item2.IsDirectory or item2.IsLinkToDirectory then begin // Sort by full name. Result := ICompareByName(item1, item2, bSortNegative); end else begin Result := CompareStrings(item1.NameNoExt, item2.NameNoExt, gSortNatural, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; end; function ICompareByExt(item1, item2: TFile; bSortNegative: Boolean):Integer; begin Result := CompareStrings(item1.Extension, item2.Extension, gSortNatural, gSortCaseSensitivity); if bSortNegative then Result := -Result; end; function ICompareByDate(date1, date2: TDateTime; bSortNegative: Boolean):Integer; begin if date1 = date2 then Result := 0 else begin if date1 < date2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ICompareByAttr(item1, item2: TFile; bSortNegative: Boolean):Integer; var Attr1, Attr2: TFileAttrs; begin Attr1 := item1.Attributes; Attr2 := item2.Attributes; if Attr1 = Attr2 then Result := 0 else begin if Attr1 > Attr2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ICompareBySize(item1, item2: TFile; bSortNegative: Boolean):Integer; var iSize1 : Int64; iSize2 : Int64; begin iSize1 := item1.Size; iSize2 := item2.Size; if iSize1 = iSize2 then Result := 0 else begin if iSize1 < iSize2 then Result := -1 else Result := +1; if bSortNegative then Result := -Result; end; end; function ReverseSortDirection(SortDirection: TSortDirection): TSortDirection; begin case SortDirection of sdAscending: Result := sdDescending; sdDescending: Result := sdAscending; end; end; function ReverseSortDirection(Sortings: TFileSortings): TFileSortings; var i: Integer; begin Result := CloneSortings(Sortings); for i := 0 to Length(Result) - 1 do Result[i].SortDirection := ReverseSortDirection(Result[i].SortDirection); end; { TBaseSorter } constructor TBaseSorter.Create(const Sortings: TFileSortings); begin FSortings := Sortings; inherited Create; end; procedure TBaseSorter.CheckSupportedProperties(SupportedFileProperties: TFilePropertiesTypes); var SortingIndex: Integer; FunctionIndex: Integer; i: Integer; begin // Check if each sort function is supported. SortingIndex := 0; while SortingIndex < Length(FSortings) do begin FunctionIndex := 0; while FunctionIndex < Length(FSortings[SortingIndex].SortFunctions) do begin if not (TFileFunctionToProperty[FSortings[SortingIndex].SortFunctions[FunctionIndex]] <= SupportedFileProperties) then begin for i := FunctionIndex to Length(FSortings[SortingIndex].SortFunctions) - 2 do FSortings[SortingIndex].SortFunctions[i] := FSortings[SortingIndex].SortFunctions[i+1]; SetLength(FSortings[SortingIndex].SortFunctions, Length(FSortings[SortingIndex].SortFunctions) - 1); end else Inc(FunctionIndex); end; if Length(FSortings[SortingIndex].SortFunctions) = 0 then begin for i := SortingIndex to Length(FSortings) - 2 do FSortings[i] := FSortings[i+1]; SetLength(FSortings, Length(FSortings) - 1); end else Inc(SortingIndex); end; end; class function TBaseSorter.Compare(const FileSorting: TFileSorting; File1, File2: TFile): Integer; var i: Integer; bNegative: Boolean; begin Result := 0; case FileSorting.SortDirection of sdAscending: bNegative := False; sdDescending: bNegative := True; else Exit; end; for i := 0 to Length(FileSorting.SortFunctions) - 1 do begin //------------------------------------------------------ // Only DC internal functions supported. case FileSorting.SortFunctions[i] of fsfName: Result := ICompareByName(File1, File2, bNegative); fsfExtension: Result := ICompareByExt(File1, File2, bNegative); fsfSize: Result := ICompareBySize(File1, File2, bNegative); fsfAttr: Result := ICompareByAttr(File1, File2, bNegative); fsfPath: begin Result := mbCompareText(File1.Path, File2.Path); if bNegative then Result := -Result; end; fsfGroup: begin Result := mbCompareText(File1.OwnerProperty.GroupStr, File2.OwnerProperty.GroupStr); if bNegative then Result := -Result; end; fsfOwner: begin Result := mbCompareText(File1.OwnerProperty.OwnerStr, File2.OwnerProperty.OwnerStr); if bNegative then Result := -Result; end; fsfModificationTime: Result := ICompareByDate(File1.ModificationTime, File2.ModificationTime, bNegative); fsfCreationTime: Result := ICompareByDate(File1.CreationTime, File2.CreationTime, bNegative); fsfLastAccessTime: Result := ICompareByDate(File1.LastAccessTime, File2.LastAccessTime, bNegative); fsfLinkTo: begin Result := mbCompareText(File1.LinkProperty.LinkTo, File2.LinkProperty.LinkTo); if bNegative then Result := -Result; end; fsfNameNoExtension: Result := ICompareByNameNoExt(File1, File2, bNegative); fsfType: begin Result := mbCompareText(File1.TypeProperty.Value, File2.TypeProperty.Value); if bNegative then Result := -Result; end; end; if Result <> 0 then Exit; end; end; { TDisplayFileSorter } constructor TDisplayFileSorter.Create(Files: TDisplayFiles; Sortings: TFileSortings); begin inherited Create(Sortings); FDisplaySortList := Files; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) then CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); end; constructor TDisplayFileSorter.Create(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings); begin inherited Create(Sortings); FFilesToInsert := FilesToInsert; FDisplaySortList := AlreadySortedFiles; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) and Assigned(FFilesToInsert) and (FFilesToInsert.Count > 0) then begin CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); CheckSupportedProperties(FFilesToInsert[0].FSFile.SupportedProperties); end; end; constructor TDisplayFileSorter.Create(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const Sortings: TFileSortings; ASequentialSearch: Boolean); begin inherited Create(Sortings); FFileToInsert := FileToInsert; FDisplaySortList := AlreadySortedFiles; FSequentialSearch := ASequentialSearch; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) and Assigned(FFileToInsert) then begin CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); CheckSupportedProperties(FFileToInsert.FSFile.SupportedProperties); end; end; constructor TDisplayFileSorter.Create(IndexToResort: Integer; SortedFiles: TDisplayFiles; const Sortings: TFileSortings); begin inherited Create(Sortings); FFileIndexToResort := IndexToResort; FResortSingle := True; FDisplaySortList := SortedFiles; if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 0) then CheckSupportedProperties(FDisplaySortList[0].FSFile.SupportedProperties); end; procedure TDisplayFileSorter.Sort; begin {$IFDEF fileSortingTime} fileSortingTimer := Now; {$ENDIF} // Restore this check when independent SortFunctions are implemented and sorting // by directory condition (gSortFolderMode <> sfmSortLikeFile) is removed from // the sorter and moved into Sortings. //if Length(FSortings) > 0 then begin if FResortSingle and Assigned(FDisplaySortList) then begin ResortSingle(FFileIndexToResort, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Resort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FFileToInsert) and Assigned(FDisplaySortList) then begin InsertSort(FFileToInsert, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Insert sort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FFilesToInsert) and Assigned(FDisplaySortList) then begin InsertSort(FFilesToInsert, FDisplaySortList); {$IFDEF fileSortingTime} DCDebug('FileSorter: Insert sort time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end else if Assigned(FDisplaySortList) and (FDisplaySortList.Count > 1) then begin QuickSort(FDisplaySortList.List.List, 0, FDisplaySortList.List.Count-1); {$IFDEF fileSortingTime} DCDebug('FileSorter: Sorting DisplayFiles time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end; end; end; class procedure TDisplayFileSorter.InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FilesToInsert, AlreadySortedFiles, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles; const ASortings: TFileSortings; ASequentialSearch: Boolean); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FileToInsert, AlreadySortedFiles, ASortings, ASequentialSearch); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(IndexToResort, SortedFiles, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; class procedure TDisplayFileSorter.Sort(FilesToSort: TDisplayFiles; const ASortings: TFileSortings); var FileListSorter: TDisplayFileSorter; begin FileListSorter := TDisplayFileSorter.Create(FilesToSort, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; procedure TDisplayFileSorter.BinaryInsertSingle(FileToInsert: TDisplayFile; List: TFPList; L, R: Longint); var CompareRes: Integer; FoundIndex: Longint; begin if List.Count = 0 then FoundIndex := 0 else begin CompareRes := BinarySearch(FileToInsert, List.List, L, R, FoundIndex); if CompareRes > 0 then Inc(FoundIndex); // Insert after because it's greater than FoundIndex item. end; List.Insert(FoundIndex, FileToInsert); end; procedure TDisplayFileSorter.BinaryResortSingle(UnsortedIndex: Integer; PList: PPointerList; L, R: Longint); var CompareRes: Integer; FoundIndex: Longint; begin CompareRes := BinarySearch(PList^[UnsortedIndex], PList, L, R, FoundIndex); if CompareRes = 0 then TFPListFastMove(UnsortedIndex, FoundIndex, PList) else begin if UnsortedIndex < FoundIndex then begin if CompareRes < 0 then Dec(FoundIndex); end else begin if CompareRes > 0 then Inc(FoundIndex); end; TFPListFastMove(UnsortedIndex, FoundIndex, PList); end; end; function TDisplayFileSorter.BinarySearch( DisplayFile: Pointer; PList: PPointerList; L, R: Longint; out FoundIndex: Longint): Integer; var I, J, K : Longint; begin I := L; J := R; repeat K := (I + J) div 2; Result := MultiCompare(DisplayFile, PList^[K]); if Result < 0 then J := K - 1 else if Result > 0 then I := K + 1 else Break; until I > J; FoundIndex := K; end; procedure TDisplayFileSorter.InsertSort(FilesToInsert, AlreadySortedFiles: TDisplayFiles); var i, j: PtrInt; L, R, FoundIndex: Longint; Psrc: PPointerList; Pcur: Pointer; SearchResult: Integer; DestList: TFPList; begin if FFilesToInsert.Count > 0 then begin if FFilesToInsert.Count = 1 then begin InsertSort(FFilesToInsert[0], AlreadySortedFiles); Exit; end else begin // First sort the files to insert of which there should be only a small number. QuickSort(FilesToInsert.List.List, 0, FilesToInsert.List.Count-1); end; Psrc := FilesToInsert.List.List; DestList := AlreadySortedFiles.List; L := 0; R := DestList.Count - 1; if R < 0 then begin // Add remaining files at the end. for j := 0 to FilesToInsert.Count - 1 do DestList.Add(Psrc^[j]); end else begin FoundIndex := 0; for i := 0 to FilesToInsert.Count - 1 do begin Pcur := Psrc^[i]; SearchResult := BinarySearch(Pcur, DestList.List, L, R, FoundIndex); // Insert Pcur after FoundIndex if it was greater. if SearchResult > 0 then Inc(FoundIndex); if FoundIndex > R then begin // Add remaining files at the end. for j := i to FilesToInsert.Count - 1 do DestList.Add(Psrc^[j]); Break; end; DestList.Insert(FoundIndex, Pcur); L := FoundIndex + 1; // Next time start searching from the next element after the one just inserted. Inc(R); // Number of elements has increased so also increase right boundary. end; end; end; end; procedure TDisplayFileSorter.InsertSort(FileToInsert: TDisplayFile; AlreadySortedFiles: TDisplayFiles); begin if FSequentialSearch then SequentialInsertSingle(FileToInsert, AlreadySortedFiles.List) else BinaryInsertSingle(FileToInsert, AlreadySortedFiles.List, 0, AlreadySortedFiles.Count - 1); end; function TDisplayFileSorter.MultiCompare(item1, item2: Pointer): Integer; var i : Integer; begin Result := 0; if item1 = item2 then Exit; // Put directories first. if (gSortFolderMode <> sfmSortLikeFile) then begin Result := ICompareByDirectory(TDisplayFile(item1).FSFile, TDisplayFile(item2).FSFile, False); // Ascending if Result <> 0 then Exit; end; for i := 0 to Length(FSortings) - 1 do begin Result := Compare(FSortings[i], TDisplayFile(item1).FSFile, TDisplayFile(item2).FSFile); if Result <> 0 then Exit; end; end; procedure TDisplayFileSorter.QuickSort(FList: PPointerList; L, R: Longint); var I, J : Longint; P, Q : Pointer; begin repeat I := L; J := R; P := FList^[ (L + R) div 2 ]; repeat while MultiCompare(P, FList^[i]) > 0 do I := I + 1; while MultiCompare(P, FList^[J]) < 0 do J := J - 1; If I <= J then begin Q := FList^[I]; Flist^[I] := FList^[J]; FList^[J] := Q; I := I + 1; J := J - 1; end; until I > J; if L < J then QuickSort(FList, L, J); L := I; until I >= R; end; procedure TDisplayFileSorter.ResortSingle(IndexToResort: Integer; SortedFiles: TDisplayFiles); var PUnsorted: Pointer; PSorted: PPointerList; begin PSorted := SortedFiles.List.List; PUnsorted := PSorted^[IndexToResort]; // The element at IndexToResort must either be moved left or right, // or should stay where it is. if (IndexToResort > 0) and (MultiCompare(PUnsorted, PSorted^[IndexToResort - 1]) < 0) then begin if IndexToResort = 1 then SortedFiles.List.Exchange(IndexToResort, IndexToResort - 1) else BinaryResortSingle(IndexToResort, PSorted, 0, IndexToResort - 1); end else if (IndexToResort < SortedFiles.List.Count - 1) and (MultiCompare(PUnsorted, PSorted^[IndexToResort + 1]) > 0) then begin if IndexToResort = SortedFiles.List.Count - 2 then SortedFiles.List.Exchange(IndexToResort, IndexToResort + 1) else BinaryResortSingle(IndexToResort, PSorted, IndexToResort + 1, SortedFiles.List.Count - 1); end; end; procedure TDisplayFileSorter.SequentialInsertSingle(FileToInsert: TDisplayFile; List: TFPList); var SortedIndex: PtrInt; Pdst: PPointerList; begin SortedIndex := 0; Pdst := List.List; while (SortedIndex < List.Count) and (MultiCompare(FileToInsert, Pdst^[SortedIndex]) > 0) do Inc(SortedIndex); List.Insert(SortedIndex, FileToInsert); end; { TFileSorter } constructor TFileSorter.Create(Files: TFiles; Sortings: TFileSortings); begin inherited Create(Sortings); FSortList := Files; if Assigned(FSortList) and (FSortList.Count > 0) then CheckSupportedProperties(FSortList.Items[0].SupportedProperties); end; procedure TFileSorter.Sort; begin {$IFDEF fileSortingTime} fileSortingTimer := Now; {$ENDIF} // Restore this check when independent SortFunctions are implemented and sorting // by directory condition (gSortFolderMode <> sfmSortLikeFile) is removed from // the sorter and moved into Sortings. //if Length(FSortings) > 0 then begin if Assigned(FSortList) and (FSortList.Count > 1) then begin QuickSort(FSortList.List.List, 0, FSortList.List.Count-1); {$IFDEF fileSortingTime} DCDebug('FileSorter: Sorting FSFiles time: ', IntToStr(DateTimeToTimeStamp(Now - fileSortingTimer).Time)); {$ENDIF} end; end; end; class procedure TFileSorter.Sort(FilesToSort: TFiles; const ASortings: TFileSortings); var FileListSorter: TFileSorter; begin FileListSorter := TFileSorter.Create(FilesToSort, ASortings); try FileListSorter.Sort; finally FreeAndNil(FileListSorter); end; end; { Return Values for ICompareByxxxx function > 0 (positive) Item1 is greater than Item2 0 Item1 is equal to Item2 < 0 (negative) Item1 is less than Item2 } { This function is simples support of sorting directory (handle uglobs.gDirSortFirst) Result is 0 if both parametres is directory and equal or not a directory (both). Else return +/- as ICompare**** } function TFileSorter.MultiCompare(item1, item2: Pointer):Integer; var i : Integer; begin Result := 0; if item1 = item2 then Exit; // Put directories first. if (gSortFolderMode <> sfmSortLikeFile) then begin Result := ICompareByDirectory(TFile(item1), TFile(item2), False); // Ascending if Result <> 0 then Exit; end; for i := 0 to Length(FSortings) - 1 do begin Result := Compare(FSortings[i], TFile(item1), TFile(item2)); if Result <> 0 then Exit; end; end; // From FPC: lists.inc. procedure TFileSorter.QuickSort(FList: PPointerList; L, R : Longint); var I, J : Longint; P, Q : Pointer; begin repeat I := L; J := R; P := FList^[ (L + R) div 2 ]; repeat while MultiCompare(P, FList^[i]) > 0 do I := I + 1; while MultiCompare(P, FList^[J]) < 0 do J := J - 1; If I <= J then begin Q := FList^[I]; Flist^[I] := FList^[J]; FList^[J] := Q; I := I + 1; J := J - 1; end; until I > J; if L < J then QuickSort(FList, L, J); L := I; until I >= R; end; end. doublecmd-0.7.1/src/foptions.lrt0000644000175000001440000000036312020403374015665 0ustar alexxusersTFRMOPTIONS.CAPTION=Options TFRMOPTIONS.LBLEMPTYEDITOR.CAPTION=Please select one of the subpages, this page does not contain any settings. TFRMOPTIONS.BTNOK.CAPTION=&OK TFRMOPTIONS.BTNCANCEL.CAPTION=&Cancel TFRMOPTIONS.BTNAPPLY.CAPTION=&Apply doublecmd-0.7.1/src/fviewoperations.lrt0000644000175000001440000000206311747211345017261 0ustar alexxusersTFRMVIEWOPERATIONS.CAPTION=File operations TFRMVIEWOPERATIONS.TBPAUSEALL.CAPTION=&Pause all TFRMVIEWOPERATIONS.BTNSTOP.CAPTION=S&top TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION=&Start TFRMVIEWOPERATIONS.LBLUSEDRAGDROP.CAPTION=Use "drag && drop" to move operations between queues TFRMVIEWOPERATIONS.CBALWAYSONTOP.CAPTION=Always on top TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION=Queue TFRMVIEWOPERATIONS.MNUQUEUE0.CAPTION=Out of queue TFRMVIEWOPERATIONS.MNUQUEUE1.CAPTION=Queue 1 TFRMVIEWOPERATIONS.MNUQUEUE2.CAPTION=Queue 2 TFRMVIEWOPERATIONS.MNUQUEUE3.CAPTION=Queue 3 TFRMVIEWOPERATIONS.MNUQUEUE4.CAPTION=Queue 4 TFRMVIEWOPERATIONS.MNUQUEUE5.CAPTION=Queue 5 TFRMVIEWOPERATIONS.MNUNEWQUEUE.CAPTION=New queue TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION=Show in detached window TFRMVIEWOPERATIONS.MNUPUTFIRSTINQUEUE.CAPTION=Put first in queue TFRMVIEWOPERATIONS.MNUPUTLASTINQUEUE.CAPTION=Put last in queue TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION=Cancel TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION=Show in detached window TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION=Cancel doublecmd-0.7.1/src/dmhigh.pas0000644000175000001440000004025312612505011015246 0ustar alexxusersunit dmHigh; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, SynEdit, StringHashList, LCLVersion, SynEditHighlighter, SynHighlighterPas, SynHighlighterCPP, SynHighlighterJava, SynHighlighterHTML, SynHighlighterXML, SynHighlighterLFM, SynHighlighterUNIXShellScript, SynHighlighterPHP, SynHighlighterTeX, SynHighlighterSQL, SynHighlighterPerl, SynHighlighterCss, SynHighlighterPython, SynHighlighterDiff, SynHighlighterVB, SynHighlighterBat, SynHighlighterIni, SynHighlighterPo; const HighlighterConfig = 'highlighters.xml'; SYNS_XML_DefaultText = 'Default text'; type { TSynPlainTextHighlighter } TSynPlainTextHighlighter = class(TSynCustomHighlighter) public class function GetLanguageName: string; override; end; { TdmHighl } TdmHighl = class(TDataModule) SynBatSyn1: TSynBatSyn; SynCppSyn1: TSynCppSyn; SynCssSyn1: TSynCssSyn; SynDiffSyn1: TSynDiffSyn; SynHTMLSyn1: TSynHTMLSyn; SynIniSyn1: TSynIniSyn; SynJavaSyn1: TSynJavaSyn; SynLFMSyn1: TSynLFMSyn; SynPasSyn1: TSynPasSyn; SynPerlSyn1: TSynPerlSyn; SynPHPSyn1: TSynPHPSyn; SynPoSyn1: TSynPoSyn; SynPythonSyn1: TSynPythonSyn; SynSQLSyn1: TSynSQLSyn; SynTeXSyn1: TSynTeXSyn; SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn; SynVBSyn1: TSynVBSyn; SynXMLSyn1: TSynXMLSyn; procedure dmHighlCreate(Sender: TObject); procedure dmHighlDestroy(Sender: TObject); private FTemp: Boolean; FChanged: Boolean; procedure ImportFromOldFormat; public SynHighlighterList: TStringList; SynHighlighterHashList: TStringHashList; SynPlainTextHighlighter: TSynPlainTextHighlighter; function GetSampleSource(Highlighter: TSynCustomHighlighter): string; public constructor Create(AOwner: TComponent; ATemp: Boolean); overload; procedure Assign(Source: TPersistent); override; function LoadFromFile(const FileName: String): Boolean; function SaveToFile(const FileName: String): Boolean; function GetHighlighterByExt(const sExtension: string): TSynCustomHighlighter; procedure SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); property Changed: Boolean read FChanged write FChanged; end; {$if lcl_fullversion >= 1010000} TSynHighlighterAttrFeature = ( hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafStyleMask, hafFrameStyle, hafFrameEdges ); TSynHighlighterAttrFeatures = set of TSynHighlighterAttrFeature; { TSynHighlighterAttributesHelper } TSynHighlighterAttributesHelper = class helper for TSynHighlighterAttributes private function GetFeatures: TSynHighlighterAttrFeatures; procedure SetFeatures(AValue: TSynHighlighterAttrFeatures); public property Features: TSynHighlighterAttrFeatures read GetFeatures write SetFeatures; end; {$endif} var dmHighl: TdmHighl; implementation {$R *.lfm} uses Graphics, SynEditTypes, uHighlighterProcs, DCXmlConfig, uGlobsPaths, DCClassesUtf8, DCOSUtils, uLng; const csDefaultName = 'editor.col'; function SynHighlighterSortCompare(List: TStringList; Index1, Index2: Integer): Integer; begin if CompareStr(List[Index1], rsSynLangPlainText) = 0 then Result:= -1 else if CompareStr(List[Index2], rsSynLangPlainText) = 0 then Result:= 1 else Result:= CompareStr(List[Index1], List[Index2]); end; { TSynPlainTextHighlighter } class function TSynPlainTextHighlighter.GetLanguageName: string; begin Result:= rsSynLangPlainText; end; { TdmHighl } procedure TdmHighl.dmHighlCreate(Sender: TObject); var I: LongWord; HighLighter: TSynCustomHighlighter; begin SynHighlighterList:= TStringList.Create; SynHighlighterHashList:= TStringHashList.Create(True); {$PUSH}{$HINTS OFF}{$WARNINGS OFF} SynPlainTextHighlighter:= TSynPlainTextHighlighter.Create(Self); {$POP} GetHighlighters(Self, SynHighlighterList, False); for I:= 0 to SynHighlighterList.Count - 1 do begin HighLighter:= TSynCustomHighlighter(SynHighlighterList.Objects[I]); SynHighlighterHashList.Add(HighLighter.LanguageName, HighLighter); with HighLighter.AddSpecialAttribute(rsSynDefaultText, SYNS_XML_DefaultText) do begin Features:= [hafBackColor, hafForeColor]; Background:= clWindow; Foreground:= clWindowText; end; end; SynHighlighterList.CustomSort(@SynHighlighterSortCompare); if (FTemp = False) then begin if not mbFileExists(gpCfgDir + csDefaultName) then LoadFromFile(gpCfgDir + HighlighterConfig) else begin ImportFromOldFormat; SaveToFile(gpCfgDir + HighlighterConfig); mbRenameFile(gpCfgDir + csDefaultName, gpCfgDir + csDefaultName + '.obsolete'); end; end; end; procedure TdmHighl.dmHighlDestroy(Sender: TObject); begin if FChanged and (FTemp = False) then SaveToFile(gpCfgDir + HighlighterConfig); SynHighlighterList.Free; SynHighlighterHashList.Free; SynPlainTextHighlighter.Free; end; procedure TdmHighl.ImportFromOldFormat; var I: Integer = 0; J, K: Integer; aFile: TStringListEx; s, sValue: String; Highlighter: TSynCustomHighlighter; Attribute: TSynHighlighterAttributes; begin aFile:= TStringListEx.Create; try aFile.LoadFromFile(gpCfgDir + csDefaultName); while I < aFile.Count do begin; s:= Trim(aFile[I]); Inc(I, 1); if s = '' then Continue; if s[1] = '#' then Continue; if s[1] <> '[' then Continue; Inc(I, 3); sValue:= Copy(s, 2, Length(s) - 2); for J:= 0 to SynHighlighterList.Count - 1 do begin Highlighter:= TSynCustomHighlighter(SynHighlighterList.Objects[J]); for K:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[K]; if SameText(sValue, Attribute.StoredName) then begin Attribute.Background := TColor(StrToIntDef(aFile.ValueFromIndex[I - 3], 0)); Attribute.Foreground := TColor(StrToIntDef(aFile.ValueFromIndex[I - 2], 0)); Attribute.Style := TFontStyles(StrToIntDef(aFile.ValueFromIndex[I - 1], 0)); Break; end; end; end; end; finally aFile.Free; end; end; function TdmHighl.GetSampleSource(Highlighter: TSynCustomHighlighter): string; begin if (Highlighter is TSynPlainTextHighlighter) then Result := 'Double Commander is a cross platform open source file manager'#13 + 'with two panels side by side. It is inspired by Total Commander'#13 + 'and features some new ideas.'#13 else if (Highlighter is TSynPasSyn) then Result := '{ Comment }'#13 + '{$R- compiler directive}'#13 + 'procedure TForm1.Button1Click(Sender: TObject);'#13 + 'var // Delphi Comment'#13 + ' Number, I, X: Integer;'#13 + 'begin'#13 + ' Number := 12345 * (2 + 9) // << Matching Brackets ;'#13 + ' Caption := ''The number is '' + IntToStr(Number);'#13 + ' asm'#13 + ' MOV AX,1234h'#13 + ' MOV Number,AX'#13 + ' end;'#13 + ' case ModalResult of'#13+ ' mrOK: inc(X);'#13+ ' mrCancel, mrIgnore: dec(X);'#13+ ' end;'#13+ ' ListBox1.Items.Add(IntToStr(X));'#13 + 'end;'#13 + #13 else if (Highlighter is TSynCppSyn) then Result := '/* Comment */'#13 + '#include '#13 + '#include '#13 + #13 + 'static char line_buf[LINE_BUF];'#13 + #13 + 'int main(int argc,char **argv){'#13 + ' FILE *file;'#13 + ' line_buf[0]=0;'#13 + ' printf("\n");'#13 + ' return 0;'#13 + '}'#13 + ''#13 + #13 else if (Highlighter is TSynDiffSyn) then Result := '*** /a/file'#13#10 + '--- /b/file'#13#10 + '***************'#13#10 + '*** 2,5 ****'#13#10 + '--- 2,5 ----'#13#10 + ' context'#13#10 + '- removed'#13#10 + '! Changed'#13#10 + '+ added'#13#10 + ' context'#13#10 else if (Highlighter is TSynHTMLSyn) then Result := ''#13 + 'Lazarus Sample source for html'#13 + ''#13 + ''#13 + ''#13 + '

    '#13 + ' Some Text'#13 + ' Ampersands:  F P C'#13 + '

    '#13 + ''#13 + ''#13 + ''#13 + ''#13 + #13 else if (Highlighter is TSynPerlSyn) then Result := '#!/usr/bin/perl'#13 + '# Perl sample code'#13 + ''#13 + '$i = "10";'#13 + 'print "$ENV{PATH}\n";'#13 + '($i =~ /\d+/) || die "Error\n";'#13 + ''#13 + '# Text Block'#13 + ''#13 + #13 else if (Highlighter is TSynUNIXShellScriptSyn) then Result := '#!/bin/bash'#13#13 + '# Bash syntax highlighting'#13#10 + 'set -x'#13#10 + 'set -e'#13#10 + 'Usage="Usage: $0 devel|stable"'#13#10 + 'FPCVersion=$1'#13#10 + 'for ver in devel stable; do'#13#10 + ' if [ "x$FPCVersion" = "x$ver" ]; then'#13#10 + ' fi'#13#10 + 'done'#13#10 + '# Text Block'#13#10 + #13#10 else Result:= EmptyStr; end; constructor TdmHighl.Create(AOwner: TComponent; ATemp: Boolean); begin inherited Create(AOwner); FTemp:= ATemp; end; procedure TdmHighl.Assign(Source: TPersistent); var I: LongWord; Highl: TdmHighl absolute Source; procedure CopyAttributes(SourceHighlighter, TargetHighlighter: TSynCustomHighlighter); var J: LongWord; begin TargetHighlighter.Tag:= SourceHighlighter.Tag; TargetHighlighter.DefaultFilter:= SourceHighlighter.DefaultFilter; for J:= 0 to SourceHighlighter.AttrCount - 1 do begin TargetHighlighter.Attribute[J].Background:= SourceHighlighter.Attribute[J].Background; TargetHighlighter.Attribute[J].Foreground:= SourceHighlighter.Attribute[J].Foreground; TargetHighlighter.Attribute[J].FrameColor:= SourceHighlighter.Attribute[J].FrameColor; TargetHighlighter.Attribute[J].FrameStyle:= SourceHighlighter.Attribute[J].FrameStyle; TargetHighlighter.Attribute[J].FrameEdges:= SourceHighlighter.Attribute[J].FrameEdges; TargetHighlighter.Attribute[J].Style := SourceHighlighter.Attribute[J].Style; TargetHighlighter.Attribute[J].StyleMask := SourceHighlighter.Attribute[J].StyleMask; end; end; begin FChanged:= True; for I:= 0 to SynHighlighterList.Count - 1 do begin CopyAttributes(TSynCustomHighlighter(Highl.SynHighlighterList.Objects[I]), TSynCustomHighlighter(SynHighlighterList.Objects[I]) ); end; end; function TdmHighl.LoadFromFile(const FileName: String): Boolean; var J: LongInt; Config: TXmlConfig = nil; Root, FormNode, AttributeNode: TXmlNode; Highlighter: TSynCustomHighlighter; Attribute: TSynHighlighterAttributes; LanguageName, AttributeName : String; begin try Result:= True; try Config:= TXmlConfig.Create(FileName, True); Root := Config.FindNode(Config.RootNode, 'Highlighters'); if Assigned(Root) then begin FormNode := Config.FindNode(Root, 'Highlighter'); if Assigned(FormNode) then begin while Assigned(FormNode) do begin LanguageName:= Config.GetAttr(FormNode, 'Name', EmptyStr); Highlighter:= TSynCustomHighlighter(SynHighlighterHashList.Data[LanguageName]); if Assigned(Highlighter) then begin Highlighter.Tag := Config.GetAttr(FormNode, 'Tag', 1); Highlighter.DefaultFilter:= Config.GetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); AttributeNode := Config.FindNode(FormNode, 'Attribute'); if Assigned(AttributeNode) then begin while Assigned(AttributeNode) do begin AttributeName:= Config.GetAttr(AttributeNode, 'Name', EmptyStr);; for J:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[J]; if SameText(Attribute.StoredName, AttributeName) then begin Attribute.Style := TFontStyles(Config.GetValue(AttributeNode, 'Style', Integer(Attribute.Style))); Attribute.StyleMask := TFontStyles(Config.GetValue(AttributeNode, 'StyleMask', Integer(Attribute.StyleMask))); Attribute.Foreground := TColor(Config.GetValue(AttributeNode, 'Foreground', Integer(Attribute.Foreground))); Attribute.Background := TColor(Config.GetValue(AttributeNode, 'Background', Integer(Attribute.Background))); Attribute.FrameColor := TColor(Config.GetValue(AttributeNode, 'FrameColor', Integer(Attribute.FrameColor))); Attribute.FrameStyle := TSynLineStyle(Config.GetValue(AttributeNode, 'FrameStyle', Integer(Attribute.FrameStyle))); Attribute.FrameEdges := TSynFrameEdges(Config.GetValue(AttributeNode, 'FrameEdges', Integer(Attribute.FrameEdges))); Break; end; end; AttributeNode := AttributeNode.NextSibling; end; end; end; FormNode := FormNode.NextSibling; end; end; end; except Result:= False; end; finally Config.Free; end; end; function TdmHighl.SaveToFile(const FileName: String): Boolean; var I: LongInt; Config: TXmlConfig; Root, FormNode, AttributeNode: TXmlNode; Attribute: TSynHighlighterAttributes; procedure SaveHighlighter(Highlighter: TSynCustomHighlighter); var J: LongWord; begin FormNode := Config.AddNode(Root, 'Highlighter'); Config.SetAttr(FormNode, 'Tag', Highlighter.Tag); Config.SetAttr(FormNode, 'Name', Highlighter.LanguageName); Config.SetValue(FormNode, 'DefaultFilter', Highlighter.DefaultFilter); for J:= 0 to Highlighter.AttrCount - 1 do begin Attribute:= Highlighter.Attribute[J]; AttributeNode := Config.AddNode(FormNode, 'Attribute'); Config.SetAttr(AttributeNode, 'Name', Attribute.StoredName); Config.SetValue(AttributeNode, 'Style', Integer(Attribute.Style)); Config.SetValue(AttributeNode, 'StyleMask', Integer(Attribute.StyleMask)); Config.SetValue(AttributeNode, 'Foreground', Integer(Attribute.Foreground)); Config.SetValue(AttributeNode, 'Background', Integer(Attribute.Background)); Config.SetValue(AttributeNode, 'FrameColor', Integer(Attribute.FrameColor)); Config.SetValue(AttributeNode, 'FrameStyle', Integer(Attribute.FrameStyle)); Config.SetValue(AttributeNode, 'FrameEdges', Integer(Attribute.FrameEdges)); end; end; begin Result:= True; Config := TXmlConfig.Create; try Config.FileName := FileName; Root := Config.FindNode(Config.RootNode, 'Highlighters', True); Config.ClearNode(Root); Config.SetAttr(Root, 'Version', 1); try for I := 0 to SynHighlighterList.Count - 1 do begin SaveHighlighter(TSynCustomHighlighter(SynHighlighterList.Objects[I])); end; Config.Save; except Result:= False; end; finally Config.Free; end; end; function TdmHighl.GetHighlighterByExt(const sExtension: string): TSynCustomHighlighter; begin Result:= GetHighlighterFromFileExt(SynHighlighterList, sExtension); if (Result = nil) then Result:= SynPlainTextHighlighter; end; procedure TdmHighl.SetHighlighter(SynEdit: TCustomSynEdit; Highlighter: TSynCustomHighlighter); var I: LongInt; Attribute: TSynHighlighterAttributes; begin if (Highlighter is TSynPlainTextHighlighter) then SynEdit.Highlighter:= nil else SynEdit.Highlighter:= Highlighter; I:= Highlighter.AttrCount - 1; repeat Attribute:= Highlighter.Attribute[I]; Dec(I); until (I < 0) or SameText(Attribute.StoredName, SYNS_XML_DefaultText); SynEdit.Color:= Attribute.Background; SynEdit.Font.Color:= Attribute.Foreground; end; {$if lcl_fullversion >= 1010000} { TSynHighlighterAttributesHelper } function TSynHighlighterAttributesHelper.GetFeatures: TSynHighlighterAttrFeatures; begin if SameText(StoredName, SYNS_XML_DefaultText) then Result:= [hafBackColor, hafForeColor] else Result:= [hafBackColor, hafForeColor, hafFrameColor, hafStyle, hafFrameStyle, hafFrameEdges]; end; procedure TSynHighlighterAttributesHelper.SetFeatures(AValue: TSynHighlighterAttrFeatures); begin end; {$endif} end. doublecmd-0.7.1/src/ufileproperty.pas0000644000175000001440000006001012612505011016710 0ustar alexxusersunit uFileProperty; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; type TFilePropertyType = ( fpName, fpSize, // = fpUncompressedSize fpCompressedSize, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime, fpChangeTime, fpLink, fpOwner, fpType, fpComment ); const fpAll = [Low(TFilePropertyType) .. High(TFilePropertyType)]; type TFilePropertiesTypes = set of TFilePropertyType; TFilePropertiesDescriptions = array of String;//TFileProperty; EInvalidFileProperty = class(Exception); // Forward declarations. IFilePropertyFormatter = interface; { TFileProperty } TFileProperty = class private public constructor Create; virtual; function Clone: TFileProperty; virtual; procedure CloneTo(FileProperty: TFileProperty); virtual; // Text description of the property. // Don't know if it will be really needed. class function GetDescription: String; virtual abstract; class function GetID: TFilePropertyType; virtual abstract; function AsString: String; virtual; // Formats the property value as a string using some formatter object. function Format(Formatter: IFilePropertyFormatter): String; virtual abstract; end; TFileProperties = array [TFilePropertyType] of TFileProperty//class(TList) { A list of TFileProperty. It would allow to query properties by index and name and by TFilePropertyType. Implement Clone if made into a class. } //end ; // -- Concrete properties --------------------------------------------------- TFileNameProperty = class(TFileProperty) private FName: String; // only name, no path procedure SetName(NewName: String); public constructor Create; override; constructor Create(Name: String); virtual; overload; function Clone: TFileNameProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; property Value: String read FName write SetName; end; TFileSizeProperty = class(TFileProperty) private FSize: Int64; public constructor Create; override; constructor Create(Size: Int64); virtual; overload; function Clone: TFileSizeProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; // Retrieve possible values for the property. function GetMinimumValue: Int64; function GetMaximumValue: Int64; function Format(Formatter: IFilePropertyFormatter): String; override; property Value: Int64 read FSize write FSize; end; { TFileCompressedSizeProperty } TFileCompressedSizeProperty = class(TFileSizeProperty) public function Clone: TFileCompressedSizeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; end; TFileDateTimeProperty = class(TFileProperty) private FDateTime: TDateTime; public constructor Create; override; constructor Create(DateTime: TDateTime); virtual; overload; procedure CloneTo(FileProperty: TFileProperty); override; // Retrieve possible values for the property. function GetMinimumValue: TDateTime; function GetMaximumValue: TDateTime; property Value: TDateTime read FDateTime write FDateTime; end; TFileModificationDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileModificationDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; TFileCreationDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileCreationDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; TFileLastAccessDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileLastAccessDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TFileChangeDateTimeProperty } TFileChangeDateTimeProperty = class(TFileDateTimeProperty) public function Clone: TFileChangeDateTimeProperty; override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; {en File system attributes. } TFileAttributesProperty = class(TFileProperty) private FAttributes: TFileAttrs; public constructor Create; override; constructor Create(Attr: TFileAttrs); virtual; overload; class function CreateOSAttributes: TFileAttributesProperty; overload; class function CreateOSAttributes(Attr: TFileAttrs): TFileAttributesProperty; overload; function Clone: TFileAttributesProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetID: TFilePropertyType; override; // Is the file a directory. function IsDirectory: Boolean; virtual; // Is this a system file. function IsSysFile: boolean; virtual abstract; // Is it a symbolic link. function IsLink: Boolean; virtual; // Retrieves raw attributes. function GetAttributes: TFileAttrs; virtual; // Sets raw attributes. procedure SetAttributes(Attributes: TFileAttrs); virtual; property Value: TFileAttrs read GetAttributes write SetAttributes; end; { TNtfsFileAttributesProperty } TNtfsFileAttributesProperty = class(TFileAttributesProperty) public function Clone: TNtfsFileAttributesProperty; override; // Is the file a directory. function IsDirectory: Boolean; override; // Is this a system file. function IsSysFile: boolean; override; // Is it a symbolic link. function IsLink: Boolean; override; function IsReadOnly: Boolean; function IsHidden: Boolean; class function GetDescription: String; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TUnixFileAttributesProperty } TUnixFileAttributesProperty = class(TFileAttributesProperty) public function Clone: TUnixFileAttributesProperty; override; // Is the file a directory. function IsDirectory: Boolean; override; // Is this a system file. function IsSysFile: boolean; override; // Is it a symbolic link. function IsLink: Boolean; override; function IsOwnerRead: Boolean; function IsOwnerWrite: Boolean; function IsOwnerExecute: Boolean; // ... class function GetDescription: String; override; function Format(Formatter: IFilePropertyFormatter): String; override; end; { TFileLinkProperty } TFileLinkProperty = class(TFileProperty) private FIsLinkToDirectory: Boolean; FIsValid: Boolean; FLinkTo: String; public constructor Create; override; function Clone: TFileLinkProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; property IsLinkToDirectory: Boolean read FIsLinkToDirectory write FIsLinkToDirectory; property IsValid: Boolean read FIsValid write FIsValid; property LinkTo: String read FLinkTo write FLinkTo; end; { TFileOwnerProperty } {en Owner of the file. } TFileOwnerProperty = class(TFileProperty) private FOwner: Cardinal; FGroup: Cardinal; FOwnerStr: String; FGroupStr: String; public constructor Create; override; function Clone: TFileOwnerProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; property Owner: Cardinal read FOwner write FOwner; property Group: Cardinal read FGroup write FGroup; property OwnerStr: String read FOwnerStr write FOwnerStr; property GroupStr: String read FGroupStr write FGroupStr; end; { TFileTypeProperty } {en File type description. } TFileTypeProperty = class(TFileProperty) private FType: String; public constructor Create; override; function Clone: TFileTypeProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; property Value: String read FType write FType; end; { TFileCommentProperty } TFileCommentProperty = class(TFileProperty) private FComment: String; public constructor Create; override; function Clone: TFileCommentProperty; override; procedure CloneTo(FileProperty: TFileProperty); override; class function GetDescription: String; override; class function GetID: TFilePropertyType; override; function Format(Formatter: IFilePropertyFormatter): String; override; property Value: String read FComment write FComment; end; // -- Property formatter interface ------------------------------------------ IFilePropertyFormatter = interface(IInterface) ['{18EF8E34-1010-45CD-8DC9-678C7C2DC89F}'] function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; implementation uses DCOSUtils, DCFileAttributes, uDefaultFilePropertyFormatter; resourcestring rsSizeDescription = 'Size'; rsCompressedSizeDescription = 'Compressed size'; rsDateTimeDescription = 'DateTime'; rsModificationDateTimeDescription = 'Modification date/time'; // ---------------------------------------------------------------------------- constructor TFileProperty.Create; begin inherited; end; function TFileProperty.Clone: TFileProperty; begin Result:= nil; raise Exception.Create('Cannot create abstract class'); end; procedure TFileProperty.CloneTo(FileProperty: TFileProperty); begin end; function TFileProperty.AsString: String; begin Result := Format(DefaultFilePropertyFormatter); end; // ---------------------------------------------------------------------------- constructor TFileNameProperty.Create; begin Self.Create(''); end; constructor TFileNameProperty.Create(Name: String); begin inherited Create; Value := Name; end; function TFileNameProperty.Clone: TFileNameProperty; begin Result := TFileNameProperty.Create; CloneTo(Result); end; procedure TFileNameProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileNameProperty do begin FName := Self.FName; end; end; end; class function TFileNameProperty.GetDescription: String; begin Result := 'name'; end; class function TFileNameProperty.GetID: TFilePropertyType; begin Result := fpName; end; function TFileNameProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatFileName(Self); end; procedure TFileNameProperty.SetName(NewName: String); var i: Integer; begin for i := 1 to Length(NewName) do if NewName[i] in AllowDirectorySeparators then raise EInvalidFileProperty.CreateFmt('Name cannot have directory separators: "%s"', [NewName]); FName := NewName; end; // ---------------------------------------------------------------------------- constructor TFileSizeProperty.Create; begin Self.Create(0); end; constructor TFileSizeProperty.Create(Size: Int64); begin inherited Create; Value := Size; end; function TFileSizeProperty.Clone: TFileSizeProperty; begin Result := TFileSizeProperty.Create; CloneTo(Result); end; procedure TFileSizeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileSizeProperty do begin FSize := Self.FSize; end; end; end; class function TFileSizeProperty.GetDescription: String; begin Result := rsSizeDescription; end; class function TFileSizeProperty.GetID: TFilePropertyType; begin Result := fpSize; end; function TFileSizeProperty.GetMinimumValue: Int64; begin Result := 0; end; function TFileSizeProperty.GetMaximumValue: Int64; begin Result := 0; // maximum file size end; function TFileSizeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatFileSize(Self); end; // ---------------------------------------------------------------------------- function TFileCompressedSizeProperty.Clone: TFileCompressedSizeProperty; begin Result := TFileCompressedSizeProperty.Create; CloneTo(Result); end; class function TFileCompressedSizeProperty.GetDescription: String; begin Result:= rsCompressedSizeDescription; end; class function TFileCompressedSizeProperty.GetID: TFilePropertyType; begin Result := fpCompressedSize; end; // ---------------------------------------------------------------------------- constructor TFileDateTimeProperty.Create; begin Self.Create(SysUtils.Now); end; constructor TFileDateTimeProperty.Create(DateTime: TDateTime); begin inherited Create; Value := DateTime; end; procedure TFileDateTimeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileDateTimeProperty do begin FDateTime := Self.FDateTime; end; end; end; function TFileDateTimeProperty.GetMinimumValue: TDateTime; begin Result := MinDateTime; end; function TFileDateTimeProperty.GetMaximumValue: TDateTime; begin Result := MaxDateTime; end; // ---------------------------------------------------------------------------- function TFileModificationDateTimeProperty.Clone: TFileModificationDateTimeProperty; begin Result := TFileModificationDateTimeProperty.Create; CloneTo(Result); end; class function TFileModificationDateTimeProperty.GetDescription: String; begin Result := rsModificationDateTimeDescription; end; class function TFileModificationDateTimeProperty.GetID: TFilePropertyType; begin Result := fpModificationTime; end; function TFileModificationDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatModificationDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileCreationDateTimeProperty.Clone: TFileCreationDateTimeProperty; begin Result := TFileCreationDateTimeProperty.Create; CloneTo(Result); end; class function TFileCreationDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileCreationDateTimeProperty.GetID: TFilePropertyType; begin Result := fpCreationTime; end; function TFileCreationDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileLastAccessDateTimeProperty.Clone: TFileLastAccessDateTimeProperty; begin Result := TFileLastAccessDateTimeProperty.Create; CloneTo(Result); end; class function TFileLastAccessDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileLastAccessDateTimeProperty.GetID: TFilePropertyType; begin Result := fpLastAccessTime; end; function TFileLastAccessDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- function TFileChangeDateTimeProperty.Clone: TFileChangeDateTimeProperty; begin Result := TFileChangeDateTimeProperty.Create; CloneTo(Result); end; class function TFileChangeDateTimeProperty.GetDescription: String; begin Result := rsDateTimeDescription; end; class function TFileChangeDateTimeProperty.GetID: TFilePropertyType; begin Result := fpChangeTime; end; function TFileChangeDateTimeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatDateTime(Self); end; // ---------------------------------------------------------------------------- constructor TFileAttributesProperty.Create; begin Create(0); end; constructor TFileAttributesProperty.Create(Attr: TFileAttrs); begin inherited Create; FAttributes := Attr; end; class function TFileAttributesProperty.CreateOSAttributes: TFileAttributesProperty; begin Result := CreateOSAttributes(0); end; class function TFileAttributesProperty.CreateOSAttributes(Attr: TFileAttrs): TFileAttributesProperty; begin {$IF DEFINED(WINDOWS)} Result := TNtfsFileAttributesProperty.Create(Attr); {$ELSEIF DEFINED(UNIX)} Result := TUnixFileAttributesProperty.Create(Attr); {$ELSE} Result := nil; {$ENDIF} end; function TFileAttributesProperty.Clone: TFileAttributesProperty; begin Result:= nil; raise Exception.Create('Cannot create abstract class'); end; procedure TFileAttributesProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileAttributesProperty do begin FAttributes := Self.FAttributes; end; end; end; class function TFileAttributesProperty.GetID: TFilePropertyType; begin Result := fpAttributes; end; function TFileAttributesProperty.GetAttributes: TFileAttrs; begin Result := FAttributes; end; procedure TFileAttributesProperty.SetAttributes(Attributes: TFileAttrs); begin FAttributes := Attributes; end; function TFileAttributesProperty.IsDirectory: Boolean; begin Result := fpS_ISDIR(FAttributes); end; function TFileAttributesProperty.IsLink: Boolean; begin Result := fpS_ISLNK(FAttributes); end; // ---------------------------------------------------------------------------- function TNtfsFileAttributesProperty.Clone: TNtfsFileAttributesProperty; begin Result := TNtfsFileAttributesProperty.Create; CloneTo(Result); end; function TNtfsFileAttributesProperty.IsDirectory: Boolean; begin Result:= ((FAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0); end; function TNtfsFileAttributesProperty.IsSysFile: boolean; begin Result := ((FAttributes and faSysFile) <> 0) or ((FAttributes and faHidden) <> 0); end; function TNtfsFileAttributesProperty.IsLink: Boolean; begin Result:= ((FAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0); end; function TNtfsFileAttributesProperty.IsReadOnly: Boolean; begin Result := (FAttributes and faReadOnly) <> 0; end; function TNtfsFileAttributesProperty.IsHidden: Boolean; begin Result := (FAttributes and faHidden) <> 0; end; class function TNtfsFileAttributesProperty.GetDescription: String; begin Result:= EmptyStr; end; function TNtfsFileAttributesProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatNtfsAttributes(Self) end; // ---------------------------------------------------------------------------- function TUnixFileAttributesProperty.Clone: TUnixFileAttributesProperty; begin Result := TUnixFileAttributesProperty.Create; CloneTo(Result); end; function TUnixFileAttributesProperty.IsDirectory: Boolean; begin Result:= ((FAttributes and S_IFMT) = S_IFDIR); end; function TUnixFileAttributesProperty.IsSysFile: Boolean; begin Result := False; end; function TUnixFileAttributesProperty.IsLink: Boolean; begin Result:= ((FAttributes and S_IFMT) = S_IFLNK); end; function TUnixFileAttributesProperty.IsOwnerRead: Boolean; begin Result:= False; end; function TUnixFileAttributesProperty.IsOwnerWrite: Boolean; begin Result:= False; end; function TUnixFileAttributesProperty.IsOwnerExecute: Boolean; begin Result:= False; end; class function TUnixFileAttributesProperty.GetDescription: String; begin Result:= EmptyStr; end; function TUnixFileAttributesProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := Formatter.FormatUnixAttributes(Self); end; // ---------------------------------------------------------------------------- constructor TFileLinkProperty.Create; begin inherited Create; FIsLinkToDirectory := False; FIsValid := True; end; function TFileLinkProperty.Clone: TFileLinkProperty; begin Result := TFileLinkProperty.Create; CloneTo(Result); end; procedure TFileLinkProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileLinkProperty do begin FIsLinkToDirectory := Self.FIsLinkToDirectory; FIsValid := Self.FIsValid; FLinkTo := Self.FLinkTo; end; end; end; class function TFileLinkProperty.GetDescription: String; begin Result := ''; end; class function TFileLinkProperty.GetID: TFilePropertyType; begin Result := fpLink; end; function TFileLinkProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := ''; end; // ---------------------------------------------------------------------------- constructor TFileOwnerProperty.Create; begin inherited Create; end; function TFileOwnerProperty.Clone: TFileOwnerProperty; begin Result := TFileOwnerProperty.Create; CloneTo(Result); end; procedure TFileOwnerProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileOwnerProperty do begin FOwner := Self.FOwner; FGroup := Self.FGroup; FOwnerStr := Self.FOwnerStr; FGroupStr := Self.FGroupStr; end; end; end; class function TFileOwnerProperty.GetDescription: String; begin Result := ''; end; class function TFileOwnerProperty.GetID: TFilePropertyType; begin Result := fpOwner; end; function TFileOwnerProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := ''; end; { TFileTypeProperty } constructor TFileTypeProperty.Create; begin inherited Create; end; function TFileTypeProperty.Clone: TFileTypeProperty; begin Result := TFileTypeProperty.Create; CloneTo(Result); end; procedure TFileTypeProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileTypeProperty do begin FType := Self.FType; end; end; end; class function TFileTypeProperty.GetDescription: String; begin Result := ''; end; class function TFileTypeProperty.GetID: TFilePropertyType; begin Result := fpType; end; function TFileTypeProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result := FType; end; { TFileCommentProperty } constructor TFileCommentProperty.Create; begin inherited Create; end; function TFileCommentProperty.Clone: TFileCommentProperty; begin Result := TFileCommentProperty.Create; CloneTo(Result); end; procedure TFileCommentProperty.CloneTo(FileProperty: TFileProperty); begin if Assigned(FileProperty) then begin inherited CloneTo(FileProperty); with FileProperty as TFileCommentProperty do begin FComment := Self.FComment; end; end; end; class function TFileCommentProperty.GetDescription: String; begin Result:= ''; end; class function TFileCommentProperty.GetID: TFilePropertyType; begin Result := fpComment; end; function TFileCommentProperty.Format(Formatter: IFilePropertyFormatter): String; begin Result:= FComment; end; end. doublecmd-0.7.1/src/fhotdirexportimport.pas0000644000175000001440000000155012405254001020137 0ustar alexxusersunit fhotdirexportimport; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ComCtrls; type { Tfrmhotdirexportimport } Tfrmhotdirexportimport = class(TForm) btnSelectAll: TBitBtn; btnSelectionDone: TBitBtn; btnCancelImportation: TBitBtn; lblHintHoldControl: TLabel; lbHint: TLabel; tvDirectoryHotlistToExportImport: TTreeView; procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var frmhotdirexportimport: Tfrmhotdirexportimport; implementation {$R *.lfm} uses uGlobs; { Tfrmhotdirexportimport } procedure Tfrmhotdirexportimport.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); end; end. doublecmd-0.7.1/src/uformcommands.pas0000644000175000001440000005417012505743661016703 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Implements custom commands for a component Copyright (C) 2011-2012 Przemyslaw Nagay (cobines@gmail.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 uFormCommands; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StringHashList, ActnList; type TCommandFuncResult = (cfrSuccess, cfrDisabled, cfrNotFound); TCommandFunc = procedure(const Params: array of string) of object; TCommandCaptionType = (cctShort, cctLong); TCommandCategorySortOrder = (ccsLegacy, ccsAlphabetical); TCommandSortOrder = (csLegacy, csAlphabetical); (* The commands are 'user' functions which can be assigned to toolbar button, hotkey, menu item, executed by scripts, etc. Only published functions and procedures can by found by MethodAddress. How to set up a form to handle hotkeys: 1. Specify that the form class implements IFormCommands (class (TForm, IFormCommands)). 2. Add private FCommands: TFormCommands that will implement the interface. 3. Add property that will specify that FCommands implements the interface in place of the form. property Commands: TFormCommands read FCommands{$IF FPC_FULLVERSION >= 020501} implements IFormCommands{$ENDIF}; For FPC < 2.5.1 "implements" does not work correctly so the form must implement the interface itself. For example see fViewer. {$IF FPC_FULLVERSION < 020501} // "implements" does not work in FPC < 2.5.1 function ExecuteCommand(Command: string; Param: String=''): TCommandFuncResult; function GetCommandCaption(Command: String; CaptionType: TCommandCaptionType): String; procedure GetCommandsList(List: TStrings); {$ENDIF} 4. Make sure a default constructor Create(TheOwner: TComponent) is present which will create the FCommands on demand when it is needed to read the hotkeys when the form is not currently created. 5. Register the form and action list in HotkeyManager somewhere in constructor: const HotkeysCategory = ; HMForm := HotMan.Register(Self, HotkeysCategory); HMForm.RegisterActionList(actionList); And unregister in destructor: HotMan.UnRegister(Self); 6. Register form as commands form so that it is displayed in Options: initialization TFormCommands.RegisterCommandsForm(Tfrm..., HotkeysCategory, @rsHotkeyCategory...); *) { IFormCommands } {$interfaces corba} // If a form/object implements this interface then it can execute custom // commands with parameters. IFormCommands = interface ['{0464B1C0-BA98-4258-A286-F0F726FF66C4}'] function ExecuteCommand(Command: String; const Params: array of string): TCommandFuncResult; function GetCommandCaption(Command: String; CaptionType: TCommandCaptionType = cctShort): String; procedure GetCommandsList(List: TStrings); procedure GetCommandCategoriesList(List: TStringList; CommandCategorySortOrder:TCommandCategorySortOrder); procedure GetCommandsListForACommandCategory(List: TStringList; sCategoryName:String; CommandSortOrder: TCommandSortOrder); procedure ExtractCommandFields(ItemInList: string; var sCategory:string; var sCommand: string; var sHint: string; var sHotKey: string; var FlagCategoryTitle: boolean); end; {$interfaces default} // Used to filter out commands. If this function returns True the command // is not included in the commands list. TCommandFilterFunc = function (Command: String): Boolean of object; TCommandRec = record Address: Pointer; // EmptyStr then LocalHint := TCommandRec(FMethods.List[Index]^.Data^).Action.Hint else LocalHint := StringReplace(TCommandRec(FMethods.List[Index]^.Data^).Action.Caption, '&', '', [rfReplaceAll]); if LocalHint<>EmptyStr then Command:=Command+'|'+sHotKey+'|'+LocalHint+'|'+Format('%2.2d',[TCommandRec(FMethods.List[Index]^.Data^).Action.Tag]); List.Add(HeaderSortedHelper+Command); end; end; end; List.Sort; if CommandSortOrder=csLegacy then for Index:=0 to pred(List.count) do List.Strings[Index]:=RightStr(List.Strings[Index],length(List.Strings[Index])-(2+3)); finally List.EndUpdate; end; end; procedure TFormCommands.ExtractCommandFields(ItemInList: string; var sCategory: string; var sCommand: string; var sHint: string; var sHotKey: string; var FlagCategoryTitle: boolean); var PosPipe: longint; sWorkingString: String; begin FlagCategoryTitle := False; sCommand := ''; sHint := ''; sHotKey := ''; sCategory := ''; PosPipe := Pos('|', ItemInList); if PosPipe <> 0 then begin if pos('||||', ItemInList) = 0 then begin sCommand := Copy(ItemInList, 1, pred(PosPipe)); sWorkingString := RightStr(ItemInList, length(ItemInList) - PosPipe); PosPipe := pos('|', sWorkingString); if PosPipe <> 0 then begin sHotKey := copy(sWorkingString, 1, pred(PosPipe)); sWorkingString := rightStr(sWorkingString, length(sWorkingString) - PosPipe); PosPipe := pos('|', sWorkingString); if PosPipe <> 0 then begin sHint := copy(sWorkingString, 1, pred(PosPipe)); sCategory := rightStr(sWorkingString, length(sWorkingString) - PosPipe); sCategory := FTranslatableCommandCategory.Strings[StrToIntDef(sCategory,0)]; end; end; end else begin sCommand := Copy(ItemInList, 1, pred(PosPipe)); FlagCategoryTitle := True; end; end; end; class procedure TFormCommands.GetMethodsList(Instance: TObject; MethodsList: TStringHashList; ActionList: TActionList); type pmethodnamerec = ^tmethodnamerec; tmethodnamerec = packed record name : pshortstring; addr : pointer; end; tmethodnametable = packed record count : dword; entries : tmethodnamerec; // first entry // subsequent tmethodnamerec records follow end; pmethodnametable = ^tmethodnametable; var methodtable : pmethodnametable; i : dword; vmt : tclass; pentry: pmethodnamerec; CommandRec: PCommandRec; Command: String; Action: TContainedAction; begin vmt := Instance.ClassType; while assigned(vmt) do begin methodtable := pmethodnametable((Pointer(vmt)+vmtMethodTable)^); if assigned(methodtable) then begin pentry := @methodtable^.entries; for i := 0 to methodtable^.count - 1 do begin Command := pentry[i].name^; if StrBegins(Command, 'cm_') then // TODO: Match functions parameter too. begin New(CommandRec); MethodsList.Add(Command, CommandRec); CommandRec^.Address := pentry[i].addr; CommandRec^.Action := nil; if Assigned(ActionList) then begin Action := ActionList.ActionByName('act' + Copy(Command, 4, Length(Command) - 3)); if Action is TAction then CommandRec^.Action := TAction(Action); end; end; end; end; vmt := pclass(pointer(vmt) + vmtParent)^; end; end; class procedure TFormCommands.GetCategoriesList(List: TStrings; Translated: TStrings); var i: Integer; begin List.Clear; Translated.Clear; for i := Low(CommandsForms) to High(CommandsForms) do begin List.Add(CommandsForms[i].Name); Translated.Add(CommandsForms[i].TranslatedName^); end; end; class function TFormCommands.GetCommandsForm(CategoryName: String): TComponentClass; var i: Integer; begin for i := Low(CommandsForms) to High(CommandsForms) do if CommandsForms[i].Name = CategoryName then begin Exit(CommandsForms[i].AClass); end; Result := nil; end; class procedure TFormCommands.RegisterCommandsForm(AClass: TClass; CategoryName: String; TranslatedName: PResStringRec); begin SetLength(CommandsForms, Length(CommandsForms) + 1); CommandsForms[High(CommandsForms)].AClass := TComponentClass(AClass); CommandsForms[High(CommandsForms)].Name := CategoryName; CommandsForms[High(CommandsForms)].TranslatedName := TranslatedName; end; function GetDefaultParam(const Params: array of String): String; begin if Length(Params) > 0 then Result := Params[0] else Result := ''; end; function GetParamValue(const Params: array of String; Key: String; out Value: String): Boolean; var Param: String; begin Key := Key + '='; for Param in Params do if StrBegins(Param, Key) then begin Value := Copy(Param, Length(Key) + 1, MaxInt); Exit(True); end; Value := ''; Result := False; end; function GetParamValue(const Param: String; Key: String; out Value: String): Boolean; begin Key := Key + '='; if StrBegins(Param, Key) then begin Value := Copy(Param, Length(Key) + 1, MaxInt); Exit(True); end; Value := ''; Result := False; end; function GetParamBoolValue(const Param: String; Key: String; out BoolValue: Boolean): Boolean; var sValue: String; begin Result := GetParamValue(Param, Key, sValue) and GetBoolValue(sValue, BoolValue); end; function GetBoolValue(StrValue: string; out BoolValue: Boolean): Boolean; begin StrValue := upcase(StrValue); if (StrValue = 'TRUE') or (StrValue = 'YES') or (StrValue = 'ON') or (StrValue = '1') then begin BoolValue := True; Result := True; end else if (StrValue = 'FALSE') or (StrValue = 'NO') or (StrValue = 'OFF') or (StrValue = '0') then begin BoolValue := False; Result := True; end else Result := False; end; end. doublecmd-0.7.1/src/feditsearch.lrt0000644000175000001440000000122112023046500016274 0ustar alexxusersTFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION=&Search for: TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION=&Replace with: TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION=Option TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION=C&ase sensitivity TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION=&Whole words only TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION=Selected &text only TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION=S&earch from caret TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION=&Regular expressions TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION=Direction TFRMEDITSEARCHREPLACE.BTNOK.CAPTION=&OK TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION=&Cancel doublecmd-0.7.1/src/ffileproperties.lrt0000644000175000001440000000377312023046500017233 0ustar alexxusersTFRMFILEPROPERTIES.CAPTION=Properties TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION=Properties TFRMFILEPROPERTIES.LBLFILENAME.CAPTION=??? TFRMFILEPROPERTIES.LBLFOLDER.CAPTION=??? TFRMFILEPROPERTIES.LBLTYPE.CAPTION=??? TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION=??? TFRMFILEPROPERTIES.LBLSIZE.CAPTION=??? TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION=??? TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION=??? TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION=??? TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION=??? TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION=Name: TFRMFILEPROPERTIES.LBLFOLDERSTR.CAPTION=Path: TFRMFILEPROPERTIES.LBLTYPESTR.CAPTION=Type: TFRMFILEPROPERTIES.LBLSYMLINKSTR.CAPTION=Symlink to: TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION=Size: TFRMFILEPROPERTIES.LBLLASTACCESSSTR.CAPTION=Last access: TFRMFILEPROPERTIES.LBLLASTMODIFSTR.CAPTION=Last modification: TFRMFILEPROPERTIES.LBLLASTSTCHANGESTR.CAPTION=Last status change: TFRMFILEPROPERTIES.LBLCONTAINSSTR.CAPTION=Contains: TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION=Attributes TFRMFILEPROPERTIES.LBLFILESTR.CAPTION=File name TFRMFILEPROPERTIES.LBLFILE.CAPTION=File name TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION=Owner TFRMFILEPROPERTIES.LBLWRITE.CAPTION=Write TFRMFILEPROPERTIES.LBLREAD.CAPTION=Read TFRMFILEPROPERTIES.LBLEXEC.CAPTION=Execute TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION=Group TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION=Other TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION=Text: TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION=----------- TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION=Bits: TFRMFILEPROPERTIES.LBLOCTAL.CAPTION=Octal: TFRMFILEPROPERTIES.CBSUID.CAPTION=SUID TFRMFILEPROPERTIES.CBSGID.CAPTION=SGID TFRMFILEPROPERTIES.CBSTICKY.CAPTION=Sticky TFRMFILEPROPERTIES.GBOWNER.CAPTION=Owner TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION=O&wner TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION=&Group TFRMFILEPROPERTIES.BTNSETPROPERTIES.CAPTION=&Set properties TFRMFILEPROPERTIES.BTNSETPROPERTIESTOALLFILES.CAPTION=Set to &all selected files TFRMFILEPROPERTIES.BTNSKIPFILE.CAPTION=Ski&p this file TFRMFILEPROPERTIES.BTNCLOSE.CAPTION=&Close doublecmd-0.7.1/src/fsetfileproperties.lrt0000644000175000001440000000275612577065770017777 0ustar alexxusersTFRMSETFILEPROPERTIES.CAPTION=Change attributes TFRMSETFILEPROPERTIES.BTNOK.CAPTION=&OK TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION=&Cancel TFRMSETFILEPROPERTIES.CHKRECURSIVE.CAPTION=Including subfolders TFRMSETFILEPROPERTIES.GBTIMESAMP.CAPTION=Timestamp properties TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION=Created: TFRMSETFILEPROPERTIES.CHKLASTWRITETIME.CAPTION=Modified: TFRMSETFILEPROPERTIES.CHKLASTACCESSTIME.CAPTION=Accessed: TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION=Attributes TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION=System TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION=Hidden TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION=Archive TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION=Read only TFRMSETFILEPROPERTIES.LBLATTRINFO.CAPTION=(gray field means unchanged value) TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION=Attributes TFRMSETFILEPROPERTIES.LBLREAD.CAPTION=Read TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION=Write TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION=Execute TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION=Owner TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION=Group TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION=Other TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION=Sticky TFRMSETFILEPROPERTIES.CBSGID.CAPTION=SGID TFRMSETFILEPROPERTIES.CBSUID.CAPTION=SUID TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION=Bits: TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION=Octal: TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION=Text: TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION=----------- TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION=(gray field means unchanged value) doublecmd-0.7.1/src/uhighlighterprocs.pas0000644000175000001440000001035411740433676017561 0ustar alexxusers{------------------------------------------------------------------------------- The contents of this file are 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/MPL/ 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. The Original Code is: uHighlighterProcs.pas, released 2000-06-23. The Initial Author of the Original Code is Michael Hieke. All Rights Reserved. Contributors to the SynEdit project are listed in the Contributors.txt file. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. $Id: uHighlighterProcs.pas,v 1.3 2002/06/15 06:57:24 etrusco Exp $ You may retrieve the latest version of this file at the SynEdit home page, located at http://SynEdit.SourceForge.net Known Issues: -------------------------------------------------------------------------------} unit uHighlighterProcs; interface uses Classes, SynEditHighlighter; procedure GetHighlighters(AOwner: TComponent; AHighlighters: TStringList; AppendToList: boolean); function GetHighlightersFilter(AHighlighters: TStringList): string; function GetHighlighterFromFileExt(AHighlighters: TStringList; Extension: string): TSynCustomHighlighter; implementation uses SysUtils; procedure GetHighlighters(AOwner: TComponent; AHighlighters: TStringList; AppendToList: boolean); var i: integer; Highlighter: TSynCustomHighlighter; begin if Assigned(AOwner) and Assigned(AHighlighters) then begin if not AppendToList then AHighlighters.Clear; for i := AOwner.ComponentCount - 1 downto 0 do begin if not (AOwner.Components[i] is TSynCustomHighlighter) then continue; Highlighter := AOwner.Components[i] as TSynCustomHighlighter; // only one highlighter for each language if AHighlighters.IndexOf(Highlighter.GetLanguageName) = -1 then AHighlighters.AddObject(Highlighter.GetLanguageName, Highlighter); end; AHighlighters.Sort; end; end; function GetHighlightersFilter(AHighlighters: TStringList): string; var i: integer; Highlighter: TSynCustomHighlighter; begin Result := ''; if Assigned(AHighlighters) then for i := 0 to AHighlighters.Count - 1 do begin if not (AHighlighters.Objects[i] is TSynCustomHighlighter) then continue; Highlighter := TSynCustomHighlighter(AHighlighters.Objects[i]); if Highlighter.DefaultFilter = '' then continue; Result := Result + Highlighter.DefaultFilter; if Result[Length(Result)] <> '|' then Result := Result + '|'; end; end; function GetHighlighterFromFileExt(AHighlighters: TStringList; Extension: string): TSynCustomHighlighter; var ExtLen: integer; i, j: integer; Highlighter: TSynCustomHighlighter; Filter: string; begin Extension := LowerCase(Extension); ExtLen := Length(Extension); if Assigned(AHighlighters) and (ExtLen > 0) then begin for i := 0 to AHighlighters.Count - 1 do begin if not (AHighlighters.Objects[i] is TSynCustomHighlighter) then continue; Highlighter := TSynCustomHighlighter(AHighlighters.Objects[i]); Filter := LowerCase(Highlighter.DefaultFilter); j := Pos('|', Filter); if j > 0 then begin Delete(Filter, 1, j); j := Pos(Extension, Filter); if (j > 0) and ((j + ExtLen > Length(Filter)) or (Filter[j + ExtLen] = ';')) then begin Result := Highlighter; exit; end; end; end; end; Result := nil; end; end. doublecmd-0.7.1/src/dmhigh.lfm0000644000175000001440000002474712175530433015265 0ustar alexxusersobject dmHighl: TdmHighl OnCreate = dmHighlCreate OnDestroy = dmHighlDestroy OldCreateOrder = False Height = 379 HorizontalOffset = 309 VerticalOffset = 86 Width = 457 object SynPasSyn1: TSynPasSyn Tag = 1 Enabled = False AsmAttri.Foreground = clGreen AsmAttri.FrameEdges = sfeAround CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IDEDirectiveAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround CaseLabelAttri.FrameEdges = sfeAround DirectiveAttri.Foreground = clRed DirectiveAttri.FrameEdges = sfeAround DirectiveAttri.Style = [fsBold] CompilerMode = pcmDelphi NestedComments = False left = 24 top = 8 end object SynCppSyn1: TSynCppSyn Tag = 1 Enabled = False AsmAttri.Foreground = clGreen AsmAttri.FrameEdges = sfeAround CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DirecAttri.Foreground = clBlue DirecAttri.FrameEdges = sfeAround DirecAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 96 top = 8 end object SynJavaSyn1: TSynJavaSyn Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DocumentAttri.Foreground = clBlue DocumentAttri.FrameEdges = sfeAround DocumentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 168 top = 8 end object SynHTMLSyn1: TSynHTMLSyn Tag = 1 Enabled = False AndAttri.FrameEdges = sfeAround ASPAttri.FrameEdges = sfeAround CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround UndefKeyAttri.FrameEdges = sfeAround ValueAttri.FrameEdges = sfeAround left = 328 top = 8 end object SynXMLSyn1: TSynXMLSyn Tag = 1 Enabled = False ElementAttri.FrameEdges = sfeAround AttributeAttri.FrameEdges = sfeAround NamespaceAttributeAttri.FrameEdges = sfeAround AttributeValueAttri.FrameEdges = sfeAround NamespaceAttributeValueAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround CDATAAttri.FrameEdges = sfeAround EntityRefAttri.FrameEdges = sfeAround ProcessingInstructionAttri.FrameEdges = sfeAround CommentAttri.FrameEdges = sfeAround DocTypeAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround WantBracesParsed = False left = 24 top = 72 end object SynLFMSyn1: TSynLFMSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround left = 96 top = 72 end object SynUNIXShellScriptSyn1: TSynUNIXShellScriptSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SecondKeyAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround VarAttri.FrameEdges = sfeAround left = 296 top = 72 end object SynPHPSyn1: TSynPHPSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidSymbolAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 96 top = 136 end object SynTeXSyn1: TSynTeXSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround ControlSequenceAttri.FrameEdges = sfeAround MathmodeAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround BraceAttri.FrameEdges = sfeAround BracketAttri.FrameEdges = sfeAround left = 168 top = 136 end object SynSQLSyn1: TSynSQLSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] DataTypeAttri.FrameEdges = sfeAround DefaultPackageAttri.FrameEdges = sfeAround ExceptionAttri.FrameEdges = sfeAround FunctionAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround PLSQLAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround SQLPlusAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround TableNameAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround SQLDialect = sqlSybase left = 240 top = 136 end object SynPerlSyn1: TSynPerlSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround InvalidAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround OperatorAttri.FrameEdges = sfeAround PragmaAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clNavy StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 240 top = 8 end object SynCssSyn1: TSynCssSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 24 top = 136 end object SynPythonSyn1: TSynPythonSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NonKeyAttri.FrameEdges = sfeAround SystemAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround HexAttri.FrameEdges = sfeAround OctalAttri.FrameEdges = sfeAround FloatAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround DocStringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround ErrorAttri.FrameEdges = sfeAround left = 328 top = 136 end object SynDiffSyn1: TSynDiffSyn Tag = 1 Enabled = False UnknownAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround OrigFileAttri.FrameEdges = sfeAround NewFileAttri.FrameEdges = sfeAround ChunkMarkerAttri.FrameEdges = sfeAround ChunkNewAttri.FrameEdges = sfeAround ChunkOldAttri.FrameEdges = sfeAround ChunkMixedAttri.FrameEdges = sfeAround LineAddedAttri.FrameEdges = sfeAround LineRemovedAttri.FrameEdges = sfeAround LineChangedAttri.FrameEdges = sfeAround LineContextAttri.FrameEdges = sfeAround left = 168 top = 72 end object SynVBSyn1: TSynVBSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.Foreground = clBlue StringAttri.FrameEdges = sfeAround SymbolAttri.Foreground = clRed SymbolAttri.FrameEdges = sfeAround left = 24 top = 200 end object SynBatSyn1: TSynBatSyn Tag = 1 Enabled = False CommentAttri.Foreground = clBlue CommentAttri.FrameEdges = sfeAround CommentAttri.Style = [fsBold] IdentifierAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.Foreground = clNavy NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround VariableAttri.FrameEdges = sfeAround left = 96 top = 200 end object SynIniSyn1: TSynIniSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround SectionAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround NumberAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround StringAttri.FrameEdges = sfeAround SymbolAttri.FrameEdges = sfeAround left = 168 top = 200 end object SynPoSyn1: TSynPoSyn Tag = 1 Enabled = False CommentAttri.FrameEdges = sfeAround TextAttri.FrameEdges = sfeAround KeyAttri.FrameEdges = sfeAround SpaceAttri.FrameEdges = sfeAround left = 240 top = 200 end end doublecmd-0.7.1/src/ffindview.lfm0000644000175000001440000000364112023046500015761 0ustar alexxusersinherited frmFindView: TfrmFindView Left = 365 Height = 104 Top = 311 Width = 344 HorzScrollBar.Page = 343 HorzScrollBar.Range = 103 VertScrollBar.Page = 96 VertScrollBar.Range = 90 ActiveControl = cbDataToFind BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Find' ClientHeight = 104 ClientWidth = 344 OnShow = FormShow Position = poScreenCenter object cbDataToFind: TComboBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 28 Top = 12 Width = 328 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 12 BorderSpacing.Right = 8 ItemHeight = 0 OnKeyUp = cbDataToFindKeyUp TabOrder = 0 end object btnFind: TBitBtn[1] AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnClose AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 150 Height = 32 Top = 68 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 4 Caption = '&Find' Default = True OnClick = btnFindClick TabOrder = 2 end object btnClose: TBitBtn[2] AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 246 Height = 32 Top = 68 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 3 end object cbCaseSens: TCheckBox[3] AnchorSideLeft.Control = cbDataToFind AnchorSideTop.Control = cbDataToFind AnchorSideTop.Side = asrBottom Left = 8 Height = 23 Top = 46 Width = 115 BorderSpacing.Top = 6 Caption = 'C&ase sensitive' TabOrder = 1 end end doublecmd-0.7.1/src/uoperationsmanager.pas0000644000175000001440000007060312673524511017730 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Manager that maintains a list of running file source operations and manages queues of operations. Copyright (C) 2010-2012 Przemysaw Nagay (cobines@gmail.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 uOperationsManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uOperationThread, uFileSourceOperation; type {en Handle to OperationsManager's operation.} TOperationHandle = type Longint; {en Identifier of OperationsManager's queue.} TOperationsManagerQueueIdentifier = type Longint; const InvalidOperationHandle = TOperationHandle(0); FreeOperationsQueueId = 0; ModalQueueId = Pred(FreeOperationsQueueId); SingleQueueId = Succ(FreeOperationsQueueId); type TOperationsManagerQueue = class; { TOperationsManagerItem } TOperationsManagerItem = class strict private FHandle : TOperationHandle; FOperation : TFileSourceOperation; FQueue : TOperationsManagerQueue; FThread : TOperationThread; private function RemoveFromQueue: Boolean; {en Inserts the item into new queue at specific position. @param(NewQueue To which queue to insert the item. If it is the same queue in which the item is currently nothing is performed.) @param(TargetOperation Handle to another operation in NewQueue near which the item should be placed.) @param(PlaceBefore If @true then places item before TargetOperation. If @false then places item after TargetOperation.) } procedure SetQueue(NewQueue: TOperationsManagerQueue; TargetOperation: TOperationHandle; PlaceBefore: Boolean); public constructor Create(AHandle: TOperationHandle; AOperation: TFileSourceOperation; AThread: TOperationThread); destructor Destroy; override; {en Moves the item and places it before or after another operation. @param(TargetOperation Handle to another operation where item should be moved. If handle belongs to operation from a different queue then the item is moved to that queue and placed before or after the operation.) @param(PlaceBefore If @true then places item before TargetOperation. If @false then places item after TargetOperation.) } procedure Move(TargetOperation: TOperationHandle; PlaceBefore: Boolean); procedure MoveToBottom; function MoveToNewQueue: TOperationsManagerQueueIdentifier; procedure MoveToTop; procedure SetQueue(NewQueue: TOperationsManagerQueue; InsertAtFront: Boolean = False); property Handle: TOperationHandle read FHandle; property Operation: TFileSourceOperation read FOperation; property Queue: TOperationsManagerQueue read FQueue; property Thread: TOperationThread read FThread; end; { TOperationsManagerQueue } TOperationsManagerQueue = class strict private FIdentifier: TOperationsManagerQueueIdentifier; FList: TFPList; FPaused: Boolean; function GetIndexByHandle(Handle: TOperationHandle): Integer; function GetItem(Index: Integer): TOperationsManagerItem; function GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; function GetOperationsCount: Integer; private {en Inserts new item into the queue. @param(InsertAt If -1 (default) it adds to the back of the queue. If 0 inserts at the front. If 0 < InsertAt < Count it inserts at specific position.) } function Insert(Item: TOperationsManagerItem; InsertAt: Integer = -1): Integer; {en Inserts new item into the queue. @param(InsertAtFront If @true then inserts at the front, if @false then inserts at the back.) } function Insert(Item: TOperationsManagerItem; TargetOperation: TOperationHandle; PlaceBefore: Boolean): Integer; {en Moves item within the queue. @param(SourceItem Which item should be moved.) @param(TargetItem SourceItem is moved placed either before or after TargetItem. If TargetItem is @nil then SourceItem is moved to the front if PlaceBefore is @true and to the back if PlaceBefore is @false.) @param(PlaceBefore If @true then SourceItem is placed before TargetItem. If @false then SourceItem is placed after TargetItem.) } procedure Move(SourceItem, TargetItem: TOperationsManagerItem; PlaceBefore: Boolean); function Remove(Item: TOperationsManagerItem): Boolean; public constructor Create(AIdentifier: TOperationsManagerQueueIdentifier); destructor Destroy; override; function GetDescription(IncludeCount: Boolean): String; {en Returns @true if this queue is a free operations queue. } function IsFree: Boolean; inline; procedure Pause; procedure Stop; procedure TogglePause; procedure UnPause; property Count: Integer read GetOperationsCount; property Identifier: TOperationsManagerQueueIdentifier read FIdentifier; property Items[Index: Integer]: TOperationsManagerItem read GetItem; property ItemByHandle[Handle: TOperationHandle]: TOperationsManagerItem read GetItemByHandle; property Paused: Boolean read FPaused; end; TOperationManagerEvent = (omevOperationAdded, omevOperationRemoved, omevOperationMoved); TOperationManagerEvents = set of TOperationManagerEvent; TOperationManagerEventNotify = procedure(Item: TOperationsManagerItem; Event: TOperationManagerEvent) of object; {en Manages file source operations. Executes them, stores threads, allows querying active operations (meaning operations being executed). } { TOperationsManager } TOperationsManager = class private FLastUsedHandle: TOperationHandle; FEventsListeners: array[TOperationManagerEvent] of TFPList; FQueues: TFPList; procedure ThreadTerminatedEvent(Sender: TObject); function GetItemByOperation(Operation: TFileSourceOperation): TOperationsManagerItem; function GetItemByIndex(Index: Integer): TOperationsManagerItem; function GetOperationsCount: Integer; function GetNextUnusedHandle: TOperationHandle; function GetQueueByIndex(Index: Integer): TOperationsManagerQueue; function GetQueueByIdentifier(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; function GetQueuesCount: Integer; function MoveToNewQueue(Item: TOperationsManagerItem): TOperationsManagerQueueIdentifier; procedure MoveToQueue(Item: TOperationsManagerItem; QueueIdentifier: TOperationsManagerQueueIdentifier); {en Notifies all listeners that an event has occurred (or multiple events). } procedure NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents); public constructor Create; destructor Destroy; override; {en Adds an operation to the manager. @param(ShowProgress If @true automatically shows progress window.) } function AddOperation(Operation: TFileSourceOperation; ShowProgress: Boolean = True): TOperationHandle; {en Adds an operation to the manager. @param(QueueIdentifier Specifies to which queue to put the operation.) @param(InsertAtFrontOfQueue If @true inserts the operation at the front of the queue, if @false inserts at the back of the queue.) @param(ShowProgress If @true automatically shows progress window.) } function AddOperation(Operation: TFileSourceOperation; QueueIdentifier: TOperationsManagerQueueIdentifier; InsertAtFrontOfQueue: Boolean; ShowProgress: Boolean = True): TOperationHandle; {en Adds an operation to the manager. Execute operation in the main thread and show progress in modal window. } function AddOperationModal(Operation: TFileSourceOperation): TOperationHandle; {en Operations retrieved this way can be safely used from the main GUI thread. But they should not be stored for longer use, because they may be destroyed by the Operations Manager when they finish. Operation handle can always be used to query OperationsManager if the operation item is still alive. } function GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; function GetOrCreateQueue(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; function GetNewQueueIdentifier: TOperationsManagerQueueIdentifier; procedure PauseAll; procedure StopAll; procedure UnPauseAll; function AllProgressPoint: Double; {en Adds a function to call on specific events. } procedure AddEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); {en Removes a registered function callback for events. } procedure RemoveEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); property OperationsCount: Integer read GetOperationsCount; property QueuesCount: Integer read GetQueuesCount; property QueueByIndex[Index: Integer]: TOperationsManagerQueue read GetQueueByIndex; property QueueByIdentifier[Identifier: TOperationsManagerQueueIdentifier]: TOperationsManagerQueue read GetQueueByIdentifier; end; var OperationsManager: TOperationsManager = nil; implementation uses uDebug, uLng, uFileSourceOperationMisc, uFileSourceProperty, uFileSource; type PEventsListItem = ^TEventsListItem; TEventsListItem = record EventFunction: TOperationManagerEventNotify; end; { TOperationsManagerItem } constructor TOperationsManagerItem.Create(AHandle: TOperationHandle; AOperation: TFileSourceOperation; AThread: TOperationThread); begin FHandle := AHandle; FOperation := AOperation; FThread := AThread; end; destructor TOperationsManagerItem.Destroy; begin inherited Destroy; FOperation.Free; end; procedure TOperationsManagerItem.Move(TargetOperation: TOperationHandle; PlaceBefore: Boolean); var TargetItem: TOperationsManagerItem; begin TargetItem := OperationsManager.GetItemByHandle(TargetOperation); if Assigned(TargetItem) then begin if Queue = TargetItem.Queue then Queue.Move(Self, TargetItem, PlaceBefore) else SetQueue(TargetItem.Queue, TargetOperation, PlaceBefore); end; end; procedure TOperationsManagerItem.MoveToBottom; begin Queue.Move(Self, nil, False); end; function TOperationsManagerItem.MoveToNewQueue: TOperationsManagerQueueIdentifier; begin Result := OperationsManager.MoveToNewQueue(Self); end; procedure TOperationsManagerItem.MoveToTop; begin Queue.Move(Self, nil, True); end; function TOperationsManagerItem.RemoveFromQueue: Boolean; begin Result := Queue.Remove(Self); if Queue.Count = 0 then begin OperationsManager.FQueues.Remove(Queue); Queue.Free; end; FQueue := nil; end; procedure TOperationsManagerItem.SetQueue(NewQueue: TOperationsManagerQueue; InsertAtFront: Boolean); begin if (Queue <> NewQueue) and Assigned(NewQueue) then begin if not Assigned(Queue) or RemoveFromQueue then begin FQueue := NewQueue; if InsertAtFront then NewQueue.Insert(Self, 0) // Insert at the front of the queue. else NewQueue.Insert(Self); // Add at the back of the queue. OperationsManager.NotifyEvents(Self, [omevOperationMoved]); end; end; end; procedure TOperationsManagerItem.SetQueue(NewQueue: TOperationsManagerQueue; TargetOperation: TOperationHandle; PlaceBefore: Boolean); begin if (Queue <> NewQueue) and Assigned(NewQueue) then begin if not Assigned(Queue) or RemoveFromQueue then begin FQueue := NewQueue; NewQueue.Insert(Self, TargetOperation, PlaceBefore); OperationsManager.NotifyEvents(Self, [omevOperationMoved]); end; end; end; { TOperationsManagerQueue } function TOperationsManagerQueue.GetIndexByHandle(Handle: TOperationHandle): Integer; begin for Result := 0 to Count - 1 do begin if TOperationsManagerItem(Items[Result]).Handle = Handle then Exit; end; Result := -1; end; function TOperationsManagerQueue.GetItem(Index: Integer): TOperationsManagerItem; begin Result := TOperationsManagerItem(FList.Items[Index]); end; function TOperationsManagerQueue.GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; var Index: Integer; begin for Index := 0 to Count - 1 do begin Result := Items[Index]; if Result.Handle = Handle then Exit; end; Result := nil; end; function TOperationsManagerQueue.GetOperationsCount: Integer; begin Result := FList.Count; end; constructor TOperationsManagerQueue.Create(AIdentifier: TOperationsManagerQueueIdentifier); begin FList := TFPList.Create; FIdentifier := AIdentifier; end; destructor TOperationsManagerQueue.Destroy; var i: Integer; begin inherited Destroy; for i := 0 to FList.Count - 1 do Items[i].Free; FList.Free; end; function TOperationsManagerQueue.GetDescription(IncludeCount: Boolean): String; begin Result := rsDlgQueue + ' #' + IntToStr(Identifier); if IncludeCount then Result := Result + ' [' + IntToStr(Count) + ']'; end; procedure TOperationsManagerQueue.Move(SourceItem, TargetItem: TOperationsManagerItem; PlaceBefore: Boolean); var FromIndex, ToIndex: Integer; ShouldMove: Boolean = False; begin FromIndex := GetIndexByHandle(SourceItem.Handle); if FromIndex >= 0 then begin if not Assigned(TargetItem) then begin if PlaceBefore then ToIndex := 0 else ToIndex := FList.Count - 1; ShouldMove := True; end else begin ToIndex := GetIndexByHandle(TargetItem.Handle); if ToIndex >= 0 then begin if PlaceBefore then begin if FromIndex < ToIndex then Dec(ToIndex); end else begin if FromIndex > ToIndex then Inc(ToIndex); end; ShouldMove := True; end; end; end; if ShouldMove and (FromIndex <> ToIndex) then begin if (not Paused) and ((FromIndex = 0) or (ToIndex = 0)) and not IsFree then Items[0].Operation.Pause; FList.Move(FromIndex, ToIndex); if (not Paused) and ((FromIndex = 0) or (ToIndex = 0)) and not IsFree then Items[0].Operation.Start; OperationsManager.NotifyEvents(SourceItem, [omevOperationMoved]); end; end; function TOperationsManagerQueue.Insert(Item: TOperationsManagerItem; InsertAt: Integer): Integer; begin if InsertAt = -1 then InsertAt := FList.Count else begin if (not Paused) and (InsertAt = 0) and not IsFree then Items[0].Operation.Pause; end; FList.Insert(InsertAt, Item); Result := InsertAt; if (not Paused) and (IsFree or (InsertAt = 0)) then begin Item.Operation.Start; end else Item.Operation.Pause; end; function TOperationsManagerQueue.Insert(Item: TOperationsManagerItem; TargetOperation: TOperationHandle; PlaceBefore: Boolean): Integer; begin Result := GetIndexByHandle(TargetOperation); if Result >= 0 then begin if not PlaceBefore then Inc(Result); Insert(Item, Result); end; end; function TOperationsManagerQueue.IsFree: Boolean; begin Result := (FIdentifier = FreeOperationsQueueId) or (FIdentifier = ModalQueueId); end; procedure TOperationsManagerQueue.Pause; var Index: Integer; begin if IsFree then begin for Index := 0 to Count - 1 do Items[Index].Operation.Pause; end else begin FPaused := True; if Count > 0 then Items[0].Operation.Pause; end; end; function TOperationsManagerQueue.Remove(Item: TOperationsManagerItem): Boolean; var Index: Integer; begin Index := FList.Remove(Item); Result := Index <> -1; if Result and (not Paused) and (not IsFree) and (Index = 0) and (Count > 0) then begin Items[0].Operation.Start; end; end; procedure TOperationsManagerQueue.Stop; var i: Integer; begin for i := 0 to Count - 1 do Items[i].Operation.Stop; end; procedure TOperationsManagerQueue.TogglePause; begin if Paused then UnPause else Pause; end; procedure TOperationsManagerQueue.UnPause; var Index: Integer; begin if IsFree then begin for Index := 0 to Count - 1 do Items[Index].Operation.Start; end else begin if Count > 0 then Items[0].Operation.Start; FPaused := False; end; end; { TOperationsManager } constructor TOperationsManager.Create; var Event: TOperationManagerEvent; begin FQueues := TFPList.Create; FLastUsedHandle := InvalidOperationHandle; for Event := Low(FEventsListeners) to High(FEventsListeners) do FEventsListeners[Event] := TFPList.Create; inherited Create; end; destructor TOperationsManager.Destroy; var i: Integer; Event: TOperationManagerEvent; begin inherited Destroy; for Event := Low(FEventsListeners) to High(FEventsListeners) do begin for i := 0 to FEventsListeners[Event].Count - 1 do Dispose(PEventsListItem(FEventsListeners[Event].Items[i])); FreeAndNil(FEventsListeners[Event]); end; if QueuesCount > 0 then DCDebug('Warning: Destroying Operations Manager with active operations!'); FreeAndNil(FQueues); end; function TOperationsManager.AddOperation(Operation: TFileSourceOperation; ShowProgress: Boolean): TOperationHandle; begin if fspListOnMainThread in (Operation.FileSource as IFileSource).Properties then Result := AddOperationModal(Operation) else begin Result := AddOperation(Operation, FreeOperationsQueueId, False, ShowProgress); end; end; function TOperationsManager.AddOperation( Operation: TFileSourceOperation; QueueIdentifier: TOperationsManagerQueueIdentifier; InsertAtFrontOfQueue: Boolean; ShowProgress: Boolean = True): TOperationHandle; var Thread: TOperationThread; Item: TOperationsManagerItem; begin if QueueIdentifier = ModalQueueId then begin Result:= AddOperationModal(Operation); Exit; end; Result := InvalidOperationHandle; if Assigned(Operation) then begin Thread := TOperationThread.Create(True, Operation); if Assigned(Thread) then begin if Assigned(Thread.FatalException) then raise Thread.FatalException; Item := TOperationsManagerItem.Create(GetNextUnusedHandle, Operation, Thread); if Assigned(Item) then try Operation.PreventStart; Result := Item.Handle; // Set OnTerminate event so that we can cleanup when thread finishes. // Or instead of this create a timer for each thread and do: // Thread.WaitFor (or WaitForThreadTerminate(Thread.ThreadID)) Thread.OnTerminate := @ThreadTerminatedEvent; Item.SetQueue(GetOrCreateQueue(QueueIdentifier), InsertAtFrontOfQueue); NotifyEvents(Item, [omevOperationAdded]); ShowOperation(Item); Thread.Start; except Item.Free; end; end; end; end; function TOperationsManager.AddOperationModal(Operation: TFileSourceOperation): TOperationHandle; var Thread: TOperationThread; Item: TOperationsManagerItem; begin Result := InvalidOperationHandle; if Assigned(Operation) then begin Thread := TOperationThread.Create(True, Operation); if Assigned(Thread) then begin if Assigned(Thread.FatalException) then raise Thread.FatalException; Item := TOperationsManagerItem.Create(GetNextUnusedHandle, Operation, Thread); if Assigned(Item) then try Operation.PreventStart; Result := Item.Handle; Item.SetQueue(GetOrCreateQueue(ModalQueueId), False); NotifyEvents(Item, [omevOperationAdded]); ShowOperationModal(Item); ThreadTerminatedEvent(Thread); except Item.Free; end; end; end; end; function TOperationsManager.GetOperationsCount: Integer; var QueueIndex: Integer; Queue: TOperationsManagerQueue; begin Result := 0; for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; Inc(Result, Queue.Count); end; end; function TOperationsManager.GetQueuesCount: Integer; begin Result := FQueues.Count; end; function TOperationsManager.MoveToNewQueue(Item: TOperationsManagerItem): TOperationsManagerQueueIdentifier; var NewQueueId: TOperationsManagerQueueIdentifier; NewQueue: TOperationsManagerQueue; begin for NewQueueId := Succ(FreeOperationsQueueId) to MaxInt do begin if not Assigned(QueueByIdentifier[NewQueueId]) then begin NewQueue := GetOrCreateQueue(NewQueueId); Item.SetQueue(NewQueue); Exit(NewQueueId); end; end; end; function TOperationsManager.GetItemByHandle(Handle: TOperationHandle): TOperationsManagerItem; var QueueIndex: Integer; Queue: TOperationsManagerQueue; begin if Handle <> InvalidOperationHandle then begin for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; Result := Queue.ItemByHandle[Handle]; if Assigned(Result) then Exit; end; end; Result := nil; end; function TOperationsManager.GetItemByOperation(Operation: TFileSourceOperation): TOperationsManagerItem; var OperIndex, QueueIndex: Integer; Item: TOperationsManagerItem; Queue: TOperationsManagerQueue; begin for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin Item := Queue.Items[OperIndex]; if Item.Operation = Operation then Exit(Item); end; end; Result := nil; end; function TOperationsManager.GetItemByIndex(Index: Integer): TOperationsManagerItem; var OperIndex, QueueIndex: Integer; Queue: TOperationsManagerQueue; Counter: Integer; begin Counter := 0; for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin if Counter = Index then Exit(Queue.Items[OperIndex]); Inc(Counter); end; end; Result := nil; end; function TOperationsManager.GetOrCreateQueue(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; begin Result := QueueByIdentifier[Identifier]; if not Assigned(Result) then begin Result := TOperationsManagerQueue.Create(Identifier); FQueues.Add(Result); end; end; function TOperationsManager.GetNewQueueIdentifier: TOperationsManagerQueueIdentifier; var NewQueueId: TOperationsManagerQueueIdentifier; begin for NewQueueId := Succ(FreeOperationsQueueId) to MaxInt do begin if not Assigned(QueueByIdentifier[NewQueueId]) then begin Exit(NewQueueId); end; end; end; procedure TOperationsManager.MoveToQueue(Item: TOperationsManagerItem; QueueIdentifier: TOperationsManagerQueueIdentifier); var Queue: TOperationsManagerQueue; begin Queue := GetOrCreateQueue(QueueIdentifier); Item.SetQueue(Queue); end; function TOperationsManager.GetNextUnusedHandle: TOperationHandle; begin // Handles are consecutively incremented. // Even if they overflow there is little probability that // there will be that many operations. Result := InterLockedIncrement(FLastUsedHandle); if Result = InvalidOperationHandle then Result := InterLockedIncrement(FLastUsedHandle); end; function TOperationsManager.GetQueueByIndex(Index: Integer): TOperationsManagerQueue; begin if (Index >= 0) and (Index < FQueues.Count) then Result := TOperationsManagerQueue(FQueues.Items[Index]) else Result := nil; end; function TOperationsManager.GetQueueByIdentifier(Identifier: TOperationsManagerQueueIdentifier): TOperationsManagerQueue; var i: Integer; Queue: TOperationsManagerQueue; begin for i := 0 to FQueues.Count - 1 do begin Queue := QueueByIndex[i]; if Queue.Identifier = Identifier then Exit(Queue); end; Result := nil; end; procedure TOperationsManager.ThreadTerminatedEvent(Sender: TObject); var Thread: TOperationThread; Item: TOperationsManagerItem; OperIndex, QueueIndex: Integer; Queue: TOperationsManagerQueue; begin // This function is executed from the GUI thread (through Synchronize). Thread := Sender as TOperationThread; // Search the terminated thread in the operations list. for QueueIndex := 0 to QueuesCount - 1 do begin Queue := QueueByIndex[QueueIndex]; for OperIndex := 0 to Queue.Count - 1 do begin Item := TOperationsManagerItem(Queue.Items[OperIndex]); if Item.Thread = Thread then begin Item.RemoveFromQueue; NotifyEvents(Item, [omevOperationRemoved]); // Here the operation should not be used anymore // (by the thread and by any operations viewer). Item.Free; Exit; end; end; end; end; procedure TOperationsManager.PauseAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].Pause; end; procedure TOperationsManager.StopAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].Stop; end; procedure TOperationsManager.UnPauseAll; var i: Integer; begin for i := 0 to QueuesCount - 1 do OperationsManager.QueueByIndex[i].UnPause; end; function TOperationsManager.AllProgressPoint: Double; var Item: TOperationsManagerItem; i: Integer; begin Result := 0; if OperationsManager.OperationsCount <> 0 then begin for i := 0 to OperationsCount - 1 do begin Item := OperationsManager.GetItemByIndex(i); if Assigned(Item) then Result := Result + Item.Operation.Progress; // calculate allProgressBar end; Result := Result / OperationsManager.OperationsCount; // end; end; procedure TOperationsManager.AddEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); var Item: PEventsListItem; Event: TOperationManagerEvent; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin Item := New(PEventsListItem); Item^.EventFunction := FunctionToCall; FEventsListeners[Event].Add(Item); end; end; end; procedure TOperationsManager.RemoveEventsListener(Events: TOperationManagerEvents; FunctionToCall: TOperationManagerEventNotify); var Item: PEventsListItem; Event: TOperationManagerEvent; i: Integer; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin for i := 0 to FEventsListeners[Event].Count - 1 do begin Item := PEventsListItem(FEventsListeners[Event].Items[i]); if Item^.EventFunction = FunctionToCall then begin FEventsListeners[Event].Delete(i); Dispose(Item); break; // break from one for only end; end; end; end; end; procedure TOperationsManager.NotifyEvents(Item: TOperationsManagerItem; Events: TOperationManagerEvents); var EventItem: PEventsListItem; Event: TOperationManagerEvent; i: Integer; begin for Event := Low(TOperationManagerEvent) to High(TOperationManagerEvent) do begin if Event in Events then begin // Call each listener function. for i := 0 to FEventsListeners[Event].Count - 1 do begin EventItem := PEventsListItem(FEventsListeners[Event].Items[i]); EventItem^.EventFunction(Item, Event); end; end; end; end; initialization OperationsManager := TOperationsManager.Create; finalization FreeAndNil(OperationsManager); end. doublecmd-0.7.1/src/ucryptproc.pas0000644000175000001440000001561212612505011016221 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- This unit contains Encrypt/Decrypt classes and functions. Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) 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 uCryptProc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8; type { TPasswordStore } TPasswordStore = class(TIniFileEx) private FMasterKey, FMasterKeyHash: AnsiString; public constructor Create(const AFileName: String); reintroduce; public function HasMasterKey: Boolean; function CheckMasterKey: Boolean; function WritePassword(Prefix, Name, Connection: String; const Password: AnsiString): Boolean; function ReadPassword(Prefix, Name, Connection: String; out Password: AnsiString): Boolean; function DeletePassword(Prefix, Name, Connection: String): Boolean; end; { EEncryptDecryptFailed } EEncryptDecryptFailed = class(Exception) public constructor Create; reintroduce; end; function Encode(MasterKey, Data: AnsiString): AnsiString; function Decode(MasterKey, Data: AnsiString): AnsiString; procedure InitPasswordStore; var PasswordStore: TPasswordStore = nil; implementation uses LCLProc, LCLType, Base64, BlowFish, md5, uShowMsg, uGlobsPaths, uLng, uDebug; type TBlowFishKeyRec = record dwSize: LongWord; case Boolean of True: (bBlowFishKey: TBlowFishKey); False: (cBlowFishKey: array [0..SizeOf(TBlowFishKey)] of AnsiChar); end; function Encode(MasterKey, Data: AnsiString): AnsiString; var BlowFishKeyRec: TBlowFishKeyRec; StringStream: TStringStream = nil; Base64EncodingStream: TBase64EncodingStream = nil; BlowFishEncryptStream: TBlowFishEncryptStream = nil; begin Result:= EmptyStr; BlowFishKeyRec.cBlowFishKey:= MasterKey; BlowFishKeyRec.dwSize:= Length(MasterKey); try StringStream:= TStringStream.Create(EmptyStr); Base64EncodingStream:= TBase64EncodingStream.Create(StringStream); BlowFishEncryptStream:= TBlowFishEncryptStream.Create(BlowFishKeyRec.bBlowFishKey, BlowFishKeyRec.dwSize, Base64EncodingStream); BlowFishEncryptStream.Write(PAnsiChar(Data)^, Length(Data)); BlowFishEncryptStream.Flush; Base64EncodingStream.Flush; Result:= StringStream.DataString; finally FreeThenNil(BlowFishEncryptStream); FreeThenNil(Base64EncodingStream); FreeThenNil(StringStream); end; end; function Decode(MasterKey, Data: AnsiString): AnsiString; var BlowFishKeyRec: TBlowFishKeyRec; StringStream: TStringStream = nil; Base64DecodingStream: TBase64DecodingStream = nil; BlowFishDeCryptStream: TBlowFishDeCryptStream = nil; begin Result:= EmptyStr; BlowFishKeyRec.cBlowFishKey:= MasterKey; BlowFishKeyRec.dwSize:= Length(MasterKey); try StringStream:= TStringStream.Create(Data); Base64DecodingStream:= TBase64DecodingStream.Create(StringStream); SetLength(Result, Base64DecodingStream.Size); BlowFishDeCryptStream:= TBlowFishDeCryptStream.Create(BlowFishKeyRec.bBlowFishKey, BlowFishKeyRec.dwSize, Base64DecodingStream); BlowFishDeCryptStream.Read(PAnsiChar(Result)^, Base64DecodingStream.Size); finally FreeThenNil(BlowFishDeCryptStream); FreeThenNil(Base64DecodingStream); FreeThenNil(StringStream); end; end; { TPasswordStore } constructor TPasswordStore.Create(const AFileName: String); begin inherited Create(AFileName); CacheUpdates:= False; if ReadOnly then DCDebug('Read only password store!'); FMasterKeyHash:= ReadString('General', 'MasterKey', EmptyStr); end; function TPasswordStore.HasMasterKey: Boolean; begin Result:= (Length(FMasterKey) <> 0); end; function TPasswordStore.CheckMasterKey: Boolean; var MasterKey, MasterKeyHash: AnsiString; begin Result:= False; if Length(FMasterKey) <> 0 then Exit(True); if not ShowInputQuery(rsMsgMasterPassword, rsMsgMasterPasswordEnter, True, MasterKey) then Exit; if Length(MasterKey) = 0 then Exit; MasterKeyHash:= MD5Print(MD5String(MasterKey)); MasterKeyHash:= Encode(MasterKey, MasterKeyHash); if FMasterKeyHash = EmptyStr then begin FMasterKeyHash:= MasterKeyHash; FMasterKey:= MasterKey; WriteString('General', 'MasterKey', FMasterKeyHash); Result:= True; end else if SameText(FMasterKeyHash, MasterKeyHash) then begin FMasterKey:= MasterKey; Result:= True; end else begin ShowMessageBox('Wrong password!'#13'Please try again!', 'Error!', MB_OK or MB_ICONERROR); end; end; function TPasswordStore.WritePassword(Prefix, Name, Connection: String; const Password: AnsiString): Boolean; var Data: AnsiString; begin Result:= False; if ReadOnly then Exit; if CheckMasterKey = False then Exit; Data:= Encode(FMasterKey, Password); if Length(Data) = 0 then raise EEncryptDecryptFailed.Create; try WriteString(Prefix + '_' + Name, Connection, Data); except Exit; end; Result:= True; end; function TPasswordStore.ReadPassword(Prefix, Name, Connection: String; out Password: AnsiString): Boolean; var Data: AnsiString = ''; begin Result:= False; if CheckMasterKey = False then Exit; Data:= ReadString(Prefix + '_' + Name, Connection, Data); if Length(Data) = 0 then Exit; Password:= Decode(FMasterKey, Data); if Length(Password) = 0 then raise EEncryptDecryptFailed.Create; Result:= True; end; function TPasswordStore.DeletePassword(Prefix, Name, Connection: String): Boolean; begin Result:= not ReadOnly; if Result then try DeleteKey(Prefix + '_' + Name, Connection); except Result:= False; end; end; procedure InitPasswordStore; var AFileName: String; begin AFileName := gpCfgDir + 'pwd.ini'; try PasswordStore:= TPasswordStore.Create(AFileName); except DCDebug('Can not create secure password store!'); end; end; { EEncryptDecryptFailed } constructor EEncryptDecryptFailed.Create; begin inherited Create('Encrypt/Decrypt failed'); end; finalization FreeThenNil(PasswordStore); end. doublecmd-0.7.1/src/fhotdirexportimport.lfm0000644000175000001440000000415412405254001020135 0ustar alexxusersobject frmhotdirexportimport: Tfrmhotdirexportimport Left = 686 Height = 283 Top = 295 Width = 427 Caption = 'Select the entries your want to import' ClientHeight = 283 ClientWidth = 427 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width;WindowState' LCLVersion = '1.2.4.0' object lblHintHoldControl: TLabel Left = 8 Height = 15 Top = 24 Width = 267 Caption = 'Hold CTRL and click entries to select multiple ones' ParentColor = False end object lbHint: TLabel Left = 8 Height = 15 Top = 8 Width = 298 Caption = 'When clicking a sub-menu, it will select the whole menu' ParentColor = False end object btnSelectAll: TBitBtn Left = 115 Height = 30 Top = 243 Width = 150 Anchors = [akRight, akBottom] Caption = 'Import all!' Kind = bkAll ModalResult = 8 TabOrder = 0 end object btnSelectionDone: TBitBtn Left = 269 Height = 30 Top = 243 Width = 150 Anchors = [akRight, akBottom] Caption = 'Import selected' Default = True Kind = bkOK ModalResult = 1 TabOrder = 1 end object btnCancelImportation: TBitBtn Left = 8 Height = 30 Top = 243 Width = 104 Anchors = [akRight, akBottom] Cancel = True DefaultCaption = True Kind = bkCancel ModalResult = 2 TabOrder = 2 end object tvDirectoryHotlistToExportImport: TTreeView AnchorSideRight.Side = asrBottom Left = 8 Height = 193 Top = 40 Width = 408 Anchors = [akTop, akLeft, akBottom] DefaultItemHeight = 18 DragMode = dmAutomatic HideSelection = False HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentFont = False ReadOnly = True RowSelect = True TabOrder = 3 Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end doublecmd-0.7.1/src/fconfirmcommandline.lrt0000644000175000001440000000103612532643273020050 0ustar alexxusersTTFRMCONFIRMCOMMANDLINE.CAPTION=TfrmConfirmCommandLine TTFRMCONFIRMCOMMANDLINE.BTNCANCEL.CAPTION=&Cancel TTFRMCONFIRMCOMMANDLINE.BTNOK.CAPTION=&OK TTFRMCONFIRMCOMMANDLINE.LBLECOMMANDLINE.EDITLABEL.CAPTION=Command line: TTFRMCONFIRMCOMMANDLINE.LBLECOMMANDLINE.TEXT=lbleCommandLine TTFRMCONFIRMCOMMANDLINE.LBLEPARAMETERS.EDITLABEL.CAPTION=Parameters: TTFRMCONFIRMCOMMANDLINE.LBLEPARAMETERS.TEXT=lbleParameters TTFRMCONFIRMCOMMANDLINE.LBLESTARTPATH.EDITLABEL.CAPTION=Start path: TTFRMCONFIRMCOMMANDLINE.LBLESTARTPATH.TEXT=lbleStartPath doublecmd-0.7.1/src/fconfirmcommandline.lfm0000644000175000001440000000641012532643273020026 0ustar alexxusersobject TfrmConfirmCommandLine: TTfrmConfirmCommandLine Left = 403 Height = 205 Top = 360 Width = 500 ActiveControl = btnOK Caption = 'TfrmConfirmCommandLine' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 205 ClientWidth = 500 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Width' LCLVersion = '1.2.6.0' object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 392 Height = 32 Top = 165 Width = 100 Anchors = [akRight, akBottom] BorderSpacing.Top = 12 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 2 end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideBottom.Side = asrBottom Left = 286 Height = 32 Top = 165 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 1 end object lbleCommandLine: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 30 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleCommandLine EditLabel.AnchorSideRight.Control = lbleCommandLine EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleCommandLine EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 12 EditLabel.Width = 484 EditLabel.Caption = 'Command line:' EditLabel.ParentColor = False TabOrder = 0 Text = 'lbleCommandLine' end object lbleParameters: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 80 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleParameters EditLabel.AnchorSideRight.Control = lbleParameters EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleParameters EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 62 EditLabel.Width = 484 EditLabel.Caption = 'Parameters:' EditLabel.ParentColor = False TabOrder = 3 Text = 'lbleParameters' end object lbleStartPath: TLabeledEdit AnchorSideLeft.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 130 Width = 484 Anchors = [akTop, akLeft, akRight] EditLabel.AnchorSideLeft.Control = lbleStartPath EditLabel.AnchorSideRight.Control = lbleStartPath EditLabel.AnchorSideRight.Side = asrBottom EditLabel.AnchorSideBottom.Control = lbleStartPath EditLabel.Left = 8 EditLabel.Height = 15 EditLabel.Top = 112 EditLabel.Width = 484 EditLabel.Caption = 'Start path:' EditLabel.ParentColor = False TabOrder = 4 Text = 'lbleStartPath' end end doublecmd-0.7.1/src/uoperationspanel.pas0000644000175000001440000003375112566375672017435 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Panel displaying file operations. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.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 uOperationsPanel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Forms, Graphics, fFileOpDlg, uFileSourceOperation, uOperationsManager, uFileSourceOperationUI; type { TOperationsPanel } TOperationsPanel = class(TScrollBox) private FUserInterface: TFileSourceOperationUI; FOperations, FQueues: TFPList; FParentWidth: Integer; procedure ClearItems; procedure DeleteItem(List: TFPList; Index: Integer); procedure GetStateColor(State: TFileSourceOperationState; out ColorFrom, ColorTo: TColor); procedure OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent); procedure ProgressWindowEvent(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent); procedure UpdateItems; procedure UpdateVisibility; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; procedure ParentResized(Sender: TObject); procedure UpdateView; end; implementation uses LCLIntf, LCLType, Math, fViewOperations, uDCUtils, uFileSourceOperationMisc, uFileSourceOperationMessageBoxesUI; const MinimumHeight = 25; MaximumItemWidth = 150; LeftRightTextMargin = 4; TopBottomTextMargin = 2; HorizontalSpaceBetween = 1; PanelBorderWidth = 1; type TOperationPanelItem = record Width: Integer; OperationHandle: TOperationHandle; QueueId: TOperationsManagerQueueIdentifier; end; POperationPanelItem = ^TOperationPanelItem; { TOperationsPanel } procedure TOperationsPanel.ParentResized(Sender: TObject); begin FParentWidth := (Sender as TControl).Width; UpdateItems; end; procedure TOperationsPanel.ClearItems; var p: Pointer; begin for p in FOperations do Dispose(POperationPanelItem(p)); for p in FQueues do Dispose(POperationPanelItem(p)); FOperations.Clear; FQueues.Clear; end; procedure TOperationsPanel.DeleteItem(List: TFPList; Index: Integer); begin Dispose(POperationPanelItem(List[Index])); List.Delete(Index); end; procedure TOperationsPanel.GetStateColor(State: TFileSourceOperationState; out ColorFrom, ColorTo: TColor); begin case State of // Green if running fsosRunning: begin ColorFrom:= RGB(203, 233, 171); ColorTo:= RGB(146, 208, 80); end; // Orange if in waiting fsosWaitingForFeedback, fsosWaitingForConnection: begin ColorFrom:= RGB(255, 202, 100); ColorTo:= RGB(255, 153, 4); end; // Red if paused, stopped fsosPaused, fsosStopped: begin ColorFrom:= RGB(255, 153, 149); ColorTo:= RGB(255, 110, 103); end; else begin ColorFrom:= RGB(0, 0, 0); ColorTo:= RGB(255, 255, 255); end; end; end; procedure TOperationsPanel.OperationsManagerEvent(Item: TOperationsManagerItem; Event: TOperationManagerEvent); begin UpdateItems; UpdateView; if Event = omevOperationAdded then Item.Operation.AddUserInterface(FUserInterface) else if Event = omevOperationRemoved then begin Item.Operation.RemoveUserInterface(FUserInterface); end; end; procedure TOperationsPanel.ProgressWindowEvent(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent); begin UpdateVisibility; end; procedure TOperationsPanel.UpdateItems; var OpManItem: TOperationsManagerItem; QueueIndex, OperIndex: Integer; OutString: String; ItemRect: TRect; Queue: TOperationsManagerQueue; OperationItem: POperationPanelItem; OverallHeight: Integer = MinimumHeight; OverallWidth: Integer = 0; Visibility: Boolean = False; procedure SetSize; begin ItemRect := Rect(0, 0, 0, 0); DrawText(Canvas.Handle, PChar(OutString), Length(OutString), ItemRect, DT_NOPREFIX or DT_CALCRECT); OperationItem^.Width := Min(ItemRect.Right + (LeftRightTextMargin + PanelBorderWidth) * 2, MaximumItemWidth); OverallHeight := Max(ItemRect.Bottom + (TopBottomTextMargin + PanelBorderWidth) * 2, OverallHeight); OverallWidth := OverallWidth + OperationItem^.Width + HorizontalSpaceBetween; end; begin ClearItems; for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Count > 0 then begin if Queue.Identifier = FreeOperationsQueueId then begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; if Assigned(OpManItem) then begin New(OperationItem); FOperations.Add(OperationItem); OperationItem^.QueueId := Queue.Identifier; OperationItem^.OperationHandle := OpManItem.Handle; OutString := IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(100); SetSize; if not TfrmFileOp.IsOpenedFor(OpManItem.Handle) and not (OpManItem.Operation.State in [fsosStopping, fsosStopped]) then Visibility := True; end; end; end else begin New(OperationItem); FQueues.Add(OperationItem); OperationItem^.QueueId := Queue.Identifier; OperationItem^.OperationHandle := InvalidOperationHandle; OutString := Queue.GetDescription(True) + LineEnding + Queue.Items[0].Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(100); SetSize; if not TfrmFileOp.IsOpenedFor(Queue.Identifier) then Visibility := True; end; end; end; ClientHeight := OverallHeight + 2; ClientWidth := Max(OverallWidth - HorizontalSpaceBetween, FParentWidth); Visible := Visibility; end; procedure TOperationsPanel.UpdateVisibility; var OpManItem: TOperationsManagerItem; QueueIndex, OperIndex: Integer; Queue: TOperationsManagerQueue; Visibility: Boolean = False; begin for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Count > 0 then begin if Queue.Identifier = FreeOperationsQueueId then begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; if Assigned(OpManItem) then begin if not TfrmFileOp.IsOpenedFor(OpManItem.Handle) and not (OpManItem.Operation.State in [fsosStopping, fsosStopped]) then Visibility := True; end; end; end else begin if not TfrmFileOp.IsOpenedFor(Queue.Identifier) then Visibility := True; end; end; end; Visible := Visibility; end; constructor TOperationsPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FOperations := TFPList.Create; FQueues := TFPList.Create; FUserInterface := TFileSourceOperationMessageBoxesUI.Create; OperationsManager.AddEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @OperationsManagerEvent); TfrmFileOp.AddEventsListener([opwevOpened, opwevClosed], @ProgressWindowEvent); end; destructor TOperationsPanel.Destroy; begin OperationsManager.RemoveEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @OperationsManagerEvent); TfrmFileOp.RemoveEventsListener([opwevOpened, opwevClosed], @ProgressWindowEvent); inherited Destroy; FUserInterface.Free; FOperations.Free; FQueues.Free; end; procedure TOperationsPanel.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ClickPos: TPoint; OpManItem: TOperationsManagerItem; procedure HandleItem(Item: POperationPanelItem); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin if Item^.OperationHandle = InvalidOperationHandle then begin case Button of mbLeft: TfrmFileOp.ShowFor(Item^.QueueId, [opwoIfExistsBringToFront]); mbMiddle: Queue.TogglePause; mbRight: ShowOperationsViewer(Item^.QueueId); end; end else begin OpManItem := Queue.ItemByHandle[Item^.OperationHandle]; if Assigned(OpManItem) then begin case Button of mbLeft: TfrmFileOp.ShowFor(OpManItem.Handle, [opwoIfExistsBringToFront]); mbMiddle: OpManItem.Operation.TogglePause; mbRight: ShowOperationsViewer(OpManItem.Handle); end; end; end; end; end; var ItemRect: TRect; Item: POperationPanelItem; begin inherited MouseDown(Button, Shift, X, Y); ClickPos := Point(X, Y); ItemRect := ClientRect; InflateRect(ItemRect, -PanelBorderWidth, -PanelBorderWidth); ItemRect.Right := ItemRect.Left - HorizontalSpaceBetween; for Item in FQueues do begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if PtInRect(ItemRect, ClickPos) then begin HandleItem(Item); Exit; end; end; for Item in FOperations do begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if PtInRect(ItemRect, ClickPos) then begin HandleItem(Item); Exit; end; end; end; procedure TOperationsPanel.Paint; var OpManItem: TOperationsManagerItem; ARect, ItemRect: TRect; ColorFrom, ColorTo: TColor; Queue: TOperationsManagerQueue; Item: POperationPanelItem; i: Integer; AProgress: Double; procedure DrawString(s: String); begin // Draw output string Canvas.Brush.Style := bsClear; ARect := ItemRect; InflateRect(ARect, -4, -2); DrawText(Canvas.Handle, PChar(s), Length(s), ARect, DT_LEFT or DT_VCENTER or DT_NOPREFIX); end; procedure DrawProgress(State: TFileSourceOperationState; Progress: Double); begin // Draw progress bar GetStateColor(State, ColorFrom, ColorTo); ARect := ItemRect; InflateRect(ARect, -1, -1); ARect.Right := ARect.Left + Round((ARect.Right - ARect.Left) * Progress); Canvas.GradientFill(ARect, ColorFrom, ColorTo, gdVertical); // Special indication if operation is paused/stopped if State in [fsosPaused, fsosStopped, fsosWaitingForFeedback] then begin Canvas.Brush.Color:= ColorFrom; Canvas.Brush.Style:= bsDiagCross; ARect.Left:= ARect.Right + 1; ARect.Right:= ItemRect.Right - 1; Canvas.FillRect(ARect); end; end; begin inherited Paint; ItemRect := ClientRect; Canvas.Pen.Color:= cl3DDkShadow; Canvas.Rectangle(ItemRect); InflateRect(ItemRect, -PanelBorderWidth, -PanelBorderWidth); Canvas.GradientFill(ItemRect, LightColor(clBtnHiLight, 20), clBtnFace, gdVertical); ItemRect.Right := ItemRect.Left - HorizontalSpaceBetween; i := 0; while i < FQueues.Count do begin Item := FQueues[i]; Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin OpManItem := Queue.Items[0]; if Assigned(OpManItem) then begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; // Draw border Canvas.Pen.Color := LightColor(cl3DDkShadow, 25); Canvas.Pen.Style := psSolid; Canvas.Rectangle(ItemRect); AProgress := OpManItem.Operation.Progress; DrawProgress(OpManItem.Operation.State, AProgress); DrawString(Queue.GetDescription(True) + LineEnding + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(AProgress)); Inc(i); end else DeleteItem(FQueues, i); end else DeleteItem(FQueues, i); end; i := 0; while i < FOperations.Count do begin Item := FOperations[i]; Queue := OperationsManager.QueueByIdentifier[Item^.QueueId]; if Assigned(Queue) and (Queue.Count > 0) then begin OpManItem := Queue.ItemByHandle[Item^.OperationHandle]; if Assigned(OpManItem) then begin ItemRect.Left := ItemRect.Right + HorizontalSpaceBetween; ItemRect.Right := ItemRect.Left + Item^.Width; if TfrmFileOp.IsOpenedFor(OpManItem.Handle) then Canvas.Pen.Color := clMenuHighlight else Canvas.Pen.Color := LightColor(cl3DDkShadow, 40); // Draw border Canvas.Pen.Style := psSolid; Canvas.Rectangle(ItemRect); AProgress := OpManItem.Operation.Progress; DrawProgress(OpManItem.Operation.State, AProgress); DrawString(IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + GetProgressString(AProgress)); Inc(i); end else DeleteItem(FOperations, i); end else DeleteItem(FOperations, i); end; end; procedure TOperationsPanel.UpdateView; begin Invalidate; end; end. doublecmd-0.7.1/src/fbuttonform.lfm0000644000175000001440000001330712612740246016361 0ustar alexxusersobject frmButtonForm: TfrmButtonForm Left = 634 Height = 402 Top = 161 Width = 609 ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 402 ClientWidth = 609 LCLVersion = '1.4.4.0' object pnlContent: TPanel Left = 8 Height = 348 Top = 8 Width = 593 Align = alClient AutoSize = True BevelOuter = bvNone Color = clForm ParentColor = False TabOrder = 0 end object pnlButtons: TPanel AnchorSideTop.Side = asrBottom Left = 8 Height = 34 Top = 360 Width = 593 Align = alBottom Anchors = [akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 BevelOuter = bvNone ClientHeight = 34 ClientWidth = 593 Color = clForm ParentColor = False TabOrder = 1 object btnAddToQueue: TBitBtn Left = 0 Height = 34 Top = 0 Width = 127 Align = alLeft AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'A&dd To Queue' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000004733AFF21824FFF638272FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF7ACFA4FF2C8C5AFF3D7659FFAEAEAEFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF82D8ACFF76D6A6FF3C9D6AFF27744CFFACAEADFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000009773FFF83DBAEFF1FC671FF72DEA7FF4BB27FFF177445FFA8ADAAFF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF83DCAFFF11C369FF1ACC73FF69DFA3FF5AC28DFF137643FF9EA7 A3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF10BD65FF11C167FF13C269FF59D395FF67C998FF167C 47FF889C92FF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0DB35EFF0EB660FF0EB660FF0DB45FFF47C484FF70CA 9CFF1D824DFF678C79FF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0CAA58FF12AE5EFF15AF60FF16AD61FF13AA5DFF3AB6 77FF75C79DFF288957FF4E8367FF000000000000000000000000000000000000 000004733AFFA9DCC1FF2EAD6BFF2BAD6AFF27AB68FF22A964FF1CA55FFF41B2 78FF78C69FFF298858FF678C79FF000000000000000000000000000000000000 000004733AFFA9DCC1FF36AD70FF32AC6DFF2DAA6AFF28A866FF58BC89FF78C5 9DFF1F804EFF839A8EFF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF3EB176FF3AAF73FF36AE70FF6FC598FF71BF97FF187B 49FFA6B0ABFF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF45B47BFF47B47CFF82CCA6FF67B68CFF177745FFC1C5 C3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA5DABFFF57BB87FF90D2B0FF5BAB82FF23774CFFD4D5D4FF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF9BD5B7FF4C9F73FF3D7D5CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA4D9BEFF3D9366FF5F8873FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF2D8859FF859C90FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 OnClick = btnAddToQueueClick TabOrder = 0 end object btnCreateSpecialQueue: TBitBtn Left = 127 Height = 34 Top = 0 Width = 23 Align = alLeft BorderSpacing.Right = 12 Glyph.Data = { 72000000424D7200000000000000360000002800000005000000030000000100 2000000000003C00000064000000640000000000000000000000000000000000 0000000000FF000000000000000000000000000000FF000000FF000000FF0000 0000000000FF000000FF000000FF000000FF000000FF } Layout = blGlyphBottom OnClick = btnCreateSpecialQueueClick PopupMenu = pmQueuePopup TabOrder = 1 end object btnCancel: TBitBtn Left = 411 Height = 34 Top = 0 Width = 86 Align = alRight AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 2 end object btnOK: TBitBtn Left = 505 Height = 34 Top = 0 Width = 88 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 3 end end object pmQueuePopup: TPopupMenu left = 280 top = 280 object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end end end doublecmd-0.7.1/src/dmhelpmanager.lfm0000644000175000001440000000072612045446211016614 0ustar alexxusersobject dmHelpManager: TdmHelpManager OnCreate = DataModuleCreate OldCreateOrder = False Height = 300 HorizontalOffset = 369 VerticalOffset = 200 Width = 400 object HTMLHelpDatabase: THTMLHelpDatabase BaseURL = 'file://doc/en/' AutoRegister = True KeywordPrefix = 'en/' left = 64 top = 48 end object HTMLBrowserHelpViewer: THTMLBrowserHelpViewer BrowserParams = '%s' AutoRegister = True left = 104 top = 48 end end doublecmd-0.7.1/src/un_xtrctdwrflnfo.pp0000644000175000001440000010461512047417134017267 0ustar alexxusers{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Parts (c) 2006 Thomas Schatzl, member of the FreePascal Development team Parts (c) 2000 Peter Vreman (adapted from original stabs line reader) Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These as of Jan. 2008 / FPC 2.2.0 both didn't work and had several limitations (e.g. inability to be used from a DLL) Oct 2009, by cobines Now can extract from ELF32, ELF64, PE regardless of base platform (Linux and Win). Fixed reading .debug_line section from PE files (now long section name is used). Nov 2012, by alexx2000 Now can extract from Mach-O binary (Mac OS X, Intel 32 and 64 bit). } {$mode delphi} {$longstrings on} {$ifndef endian_little} {$fatal powerpc architecture not supported} {$endif} unit un_xtrctdwrflnfo; interface uses SysUtils, Classes; function ExtractDwarfLineInfo( ExeFileName: ansistring; out _dlnfo: pointer; out _dlnfoSize: QWord; out Imagebase: QWord): longbool; { Reads the dwarf line info from an executable. In case of error, see ExtractDwarfLineInfoError for details. ImageBase is nil for unix DLLs in all other cases the value it receives must be substracted from the addresses in the dwarf line info (and then the real base address added, to account for the possible relocation) NOTE: currently in unix it is also NIL for the main executable, corresponding the GetModuleByAddr() in un_lineinfo also returning NIL as the base address for the main executable. } function DlnNameByExename(exename: string): string; {generates file names with .zdli extension. Use in cases when both your windows and linux binaries are placed in the same folder } var ExtractDwarfLineInfoError: WideString = ''; implementation uses zstream; const // Cannot use reference counted strings because they are emptied // when a function from this module is called two or more times // while an exception is being processed (don't know why). DwarfDebugLine: shortstring = '.debug_line'; DwarfZDebugLine: shortstring = '.zdebug_line'; DwarfDarwinDebugLine: shortstring = '__debug_line'; DwarfDarwinSegmentName: shortstring = '__DWARF'; TextDarwinSegmentName: shortstring = '__TEXT'; type TCheckResult = (header_not_found, header_invalid, no_debug_info, found_debug_info); {$MACRO ON} {$ifdef DEBUG_DWARF_PARSER} {$define DEBUG_WRITELN := WriteLn} {$define DEBUG_COMMENT := } {$else} {$define DEBUG_WRITELN := //} {$define DEBUG_COMMENT := //} {$endif} { ELF Header structures types} type Elf32_Half = Word; Elf64_Half = Word; { Types for signed and unsigned 32-bit quantities. } Elf32_Word = DWord; Elf32_Sword = Longint; Elf64_Word = DWord; Elf64_Sword = Longint; { Types for signed and unsigned 64-bit quantities. } Elf32_Xword = QWord; Elf32_Sxword = Int64; Elf64_Xword = QWord; Elf64_Sxword = Int64; { Type of addresses. } Elf32_Addr = DWord; Elf64_Addr = QWord; { Type of file offsets. } Elf32_Off = DWord; Elf64_Off = QWord; { Type for section indices, which are 16-bit quantities. } Elf32_Section = Word; Elf64_Section = Word; { Type for version symbol information. } Elf32_Versym = Elf32_Half; Elf64_Versym = Elf64_Half; { some constants from the corresponding header files } const El_NIDENT = 16; { some important indices into the e_ident signature of an ELF file } EI_MAG0 = 0; EI_MAG1 = 1; EI_MAG2 = 2; EI_MAG3 = 3; EI_CLASS = 4; { the first byte of the e_ident array must be of this value } ELFMAG0 = $7f; { the second byte of the e_ident array must be of this value } ELFMAG1 = Byte('E'); { the third byte of the e_ident array must be of this value } ELFMAG2 = Byte('L'); { the fourth byte of the e_ident array must be of this value } ELFMAG3 = Byte('F'); { the fifth byte specifies the bitness of the header; all other values are invalid } ELFCLASS32 = 1; ELFCLASS64 = 2; {$packrecords c} type { The ELF file header. This appears at the start of every ELF file, 32 bit version } TElf32_Ehdr = record e_ident : array[0..El_NIDENT-1] of Byte; { file identification } e_type : Elf32_Half; { file type } e_machine : Elf32_Half; { machine architecture } e_version : Elf32_Word; { ELF format version } e_entry : Elf32_Addr; { entry point } e_phoff : Elf32_Off; { program header file offset } e_shoff : Elf32_Off; { section header file offset } e_flags : Elf32_Word; { architecture specific flags } e_ehsize : Elf32_Half; { size of ELF header in bytes } e_phentsize : Elf32_Half; { size of program header entry } e_phnum : Elf32_Half; { number of program header entries } e_shentsize : Elf32_Half; { size of section header entry } e_shnum : Elf32_Half; { number of section header entry } e_shstrndx : Elf32_Half; { section name strings section index } end; { ELF32 Section header } TElf32_Shdr = record sh_name : Elf32_Word; { section name } sh_type : Elf32_Word; { section type } sh_flags : Elf32_Word; { section flags } sh_addr : Elf32_Addr; { virtual address } sh_offset : Elf32_Off; { file offset } sh_size : Elf32_Word; { section size } sh_link : Elf32_Word; { misc info } sh_info : Elf32_Word; { misc info } sh_addralign : Elf32_Word; { memory alignment } sh_entsize : Elf32_Word; { entry size if table } end; { The ELF file header. This appears at the start of every ELF file, 64 bit version } TElf64_Ehdr = record e_ident : array[0..El_NIDENT-1] of Byte; e_type : Elf64_Half; e_machine : Elf64_Half; e_version : Elf64_Word; e_entry : Elf64_Addr; e_phoff : Elf64_Off; e_shoff : Elf64_Off; e_flags : Elf64_Word; e_ehsize : Elf64_Half; e_phentsize : Elf64_Half; e_phnum : Elf64_Half; e_shentsize : Elf64_Half; e_shnum : Elf64_Half; e_shstrndx : Elf64_Half; end; { ELF64 Section header } TElf64_Shdr = record sh_name : Elf64_Word; sh_type : Elf64_Word; sh_flags : Elf64_Xword; sh_addr : Elf64_Addr; sh_offset : Elf64_Off; sh_size : Elf64_Xword; sh_link : Elf64_Word; sh_info : Elf64_Word; sh_addralign : Elf64_Xword; sh_entsize : Elf64_Xword; end; {$packrecords default} const (* Constant for the magic field of the TMacho32Header (32-bit architectures) *) MH_MAGIC = $feedface; (* the mach magic number *) MH_CIGAM = $cefaedfe; (* NXSwapInt(MH_MAGIC) *) (* Constant for the magic field of the TMacho64Header (64-bit architectures) *) MH_MAGIC_64 = $feedfacf; (* the 64-bit mach magic number *) MH_CIGAM_64 = $cffaedfe; (* NXSwapInt(MH_MAGIC_64) *) (* Constants for the cmd field of all load commands, the type *) LC_SEGMENT = $00000001; (* segment of this file to be mapped *) LC_SEGMENT_64 = $00000019; (* 64-bit segment of this file to be mapped *) type { The 32-bit mach header appears at the very beginning of the object file for 32-bit architectures. } TMacho32Header = packed record magic: longword; (* mach magic number identifier *) cputype: longint; (* cpu specifier *) cpusubtype: longint; (* machine specifier *) filetype: longword; (* type of file *) ncmds: longword; (* number of load commands *) sizeofcmds: longword; (* the size of all the load commands *) flags: longword; (* flags *) end; { The 64-bit mach header appears at the very beginning of object files for 64-bit architectures. } TMacho64Header = packed record magic: longword; (* mach magic number identifier *) cputype: longint; (* cpu specifier *) cpusubtype: longint; (* machine specifier *) filetype: longword; (* type of file *) ncmds: longword; (* number of load commands *) sizeofcmds: longword; (* the size of all the load commands *) flags: longword; (* flags *) reserved: longword; (* reserved *) end; { The load commands directly follow the mach_header. } TMachoLoadCommand = packed record cmd: longword; (* type of load command *) cmdsize: longword; (* total size of command in bytes *) end; { The segment load command indicates that a part of this file is to be mapped into the task's address space. } TMacho32SegmentCommand = packed record (* for 32-bit architectures *) cmd: longword; (* LC_SEGMENT *) cmdsize: longword; (* includes sizeof section structs *) segname: array[0..15] of ansichar; (* segment name *) vmaddr: longword; (* memory address of this segment *) vmsize: longword; (* memory size of this segment *) fileoff: longword; (* file offset of this segment *) filesize: longword; (* amount to map from the file *) maxprot: longint; (* maximum VM protection *) initprot: longint; (* initial VM protection *) nsects: longword; (* number of sections in segment *) flags: longword; (* flags *) end; { The 64-bit segment load command indicates that a part of this file is to be mapped into a 64-bit task's address space. } TMacho64SegmentCommand = packed record (* for 64-bit architectures *) cmd: longword; (* LC_SEGMENT_64 *) cmdsize: longword; (* includes sizeof section_64 structs *) segname: array[0..15] of ansichar; (* segment name *) vmaddr: qword; (* memory address of this segment *) vmsize: qword; (* memory size of this segment *) fileoff: qword; (* file offset of this segment *) filesize: qword; (* amount to map from the file *) maxprot: longint; (* maximum VM protection *) initprot: longint; (* initial VM protection *) nsects: longword; (* number of sections in segment *) flags: longword; (* flags *) end; { The 32-bit segment section header. } TMacho32SegmentSection = packed record (* for 32-bit architectures *) sectname: array[0..15] of ansichar; (* name of this section *) segname: array[0..15] of ansichar; (* segment this section goes in *) addr: longword; (* memory address of this section *) size: longword; (* size in bytes of this section *) offset: longword; (* file offset of this section *) align: longword; (* section alignment (power of 2) *) reloff: longword; (* file offset of relocation entries *) nreloc: longword; (* number of relocation entries *) flags: longword; (* flags (section type and attributes)*) reserved1: longword; (* reserved (for offset or index) *) reserved2: longword; (* reserved (for count or sizeof) *) end; { The 64-bit segment section header. } TMacho64SegmentSection = packed record (* for 64-bit architectures *) sectname: array[0..15] of ansichar; (* name of this section *) segname: array[0..15] of ansichar; (* segment this section goes in *) addr: qword; (* memory address of this section *) size: qword; (* size in bytes of this section *) offset: longword; (* file offset of this section *) align: longword; (* section alignment (power of 2) *) reloff: longword; (* file offset of relocation entries *) nreloc: longword; (* number of relocation entries *) flags: longword; (* flags (section type and attributes)*) reserved1: longword; (* reserved (for offset or index) *) reserved2: longword; (* reserved (for count or sizeof) *) reserved3: longword; (* reserved *) end; type tdosheader = packed record e_magic : word; e_cblp : word; e_cp : word; e_crlc : word; e_cparhdr : word; e_minalloc : word; e_maxalloc : word; e_ss : word; e_sp : word; e_csum : word; e_ip : word; e_cs : word; e_lfarlc : word; e_ovno : word; e_res : array[0..3] of word; e_oemid : word; e_oeminfo : word; e_res2 : array[0..9] of word; e_lfanew : longint; end; tpeheader = packed record PEMagic : longint; Machine : word; NumberOfSections : word; TimeDateStamp : longint; PointerToSymbolTable : longint; NumberOfSymbols : longint; SizeOfOptionalHeader : word; Characteristics : word; end; tpeoptionalheader32 = packed record Magic : word; MajorLinkerVersion : byte; MinorLinkerVersion : byte; SizeOfCode : longint; SizeOfInitializedData : longint; SizeOfUninitializedData : longint; AddressOfEntryPoint : longint; BaseOfCode : longint; BaseOfData : longint; ImageBase : longint; SectionAlignment : longint; FileAlignment : longint; MajorOperatingSystemVersion : word; MinorOperatingSystemVersion : word; MajorImageVersion : word; MinorImageVersion : word; MajorSubsystemVersion : word; MinorSubsystemVersion : word; Win32VersionValue : longint; SizeOfImage : longint; SizeOfHeaders : longint; CheckSum : longint; Subsystem : word; DllCharacteristics : word; SizeOfStackReserve : longint; SizeOfStackCommit : longint; SizeOfHeapReserve : longint; SizeOfHeapCommit : longint; LoaderFlags : longint; NumberOfRvaAndSizes : longint; DataDirectory : array[1..$80] of byte; end; tpeoptionalheader64 = packed record Magic : word; MajorLinkerVersion : byte; MinorLinkerVersion : byte; SizeOfCode : longint; SizeOfInitializedData : longint; SizeOfUninitializedData : longint; AddressOfEntryPoint : longint; BaseOfCode : longint; ImageBase : qword; SectionAlignment : longint; FileAlignment : longint; MajorOperatingSystemVersion : word; MinorOperatingSystemVersion : word; MajorImageVersion : word; MinorImageVersion : word; MajorSubsystemVersion : word; MinorSubsystemVersion : word; Win32VersionValue : longint; SizeOfImage : longint; SizeOfHeaders : longint; CheckSum : longint; Subsystem : word; DllCharacteristics : word; SizeOfStackReserve : qword; SizeOfStackCommit : qword; SizeOfHeapReserve : qword; SizeOfHeapCommit : qword; LoaderFlags : longint; NumberOfRvaAndSizes : longint; DataDirectory : array[1..$80] of byte; end; tcoffsechdr=packed record name : array[0..7] of char; vsize : longint; rvaofs : longint; datalen : longint; datapos : longint; relocpos : longint; lineno1 : longint; nrelocs : word; lineno2 : word; flags : longint; end; coffsymbol=packed record name : array[0..3] of char; { real is [0..7], which overlaps the strofs ! } strofs : longint; value : longint; section : smallint; empty : word; typ : byte; aux : byte; end; function DlnNameByExename(exename: string): string; begin Result := ChangeFileExt(exename, '.zdli'); end; function cntostr(cn: pchar): string; var i: integer = 0; begin Result:=''; repeat if cn^ = #0 then break; Result+= cn^; inc(i); inc(cn); until i = 8; end; function ExtractElf32( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var header : TElf32_Ehdr; strtab_header : TElf32_Shdr; cursec_header : TElf32_Shdr; i: Integer; buf : array[0..20] of char; sectionName: string; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the ELF header!'; Exit(false); end; { seek to the start of section headers } { first get string section header } f.Position:= header.e_shoff + (header.e_shstrndx * header.e_shentsize); if (f.read(strtab_header, sizeof(strtab_header)) <> sizeof(strtab_header)) then begin ExtractDwarfLineInfoError:='Could not read string section header'; Exit(false); end; for i := 0 to (header.e_shnum-1) do begin // Section nr 0 is reserved. if i = 0 then Continue; f.Position:= header.e_shoff + (i * header.e_shentsize); if (f.Read(cursec_header, sizeof(cursec_header)) <> sizeof(cursec_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; { paranoia TODO: check cursec_header.e_shentsize } f.Position:= strtab_header.sh_offset + cursec_header.sh_name; if (f.Read(buf, sizeof(buf)) <> sizeof(buf)) then begin ExtractDwarfLineInfoError:='Could not read section name'; Exit(false); end; buf[sizeof(buf)-1] := #0; sectionName := StrPas(pchar(@buf[0])); DEBUG_WRITELN('Section ', i, ': ', sectionName, ', offset ', IntToStr(cursec_header.sh_offset), ', size ', IntToStr(cursec_header.sh_size)); if sectionName = DwarfDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DwarfLineInfoSize := cursec_header.sh_size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); break; end else if sectionName = DwarfZDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); break; end; end; end; function ExtractElf64( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var header : TElf64_Ehdr; strtab_header : TElf64_Shdr; cursec_header : TElf64_Shdr; i: Integer; buf : array[0..20] of char; sectionName: string; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the ELF header!'; Exit(false); end; { seek to the start of section headers } { first get string section header } f.Position:= header.e_shoff + (header.e_shstrndx * header.e_shentsize); if (f.read(strtab_header, sizeof(strtab_header)) <> sizeof(strtab_header)) then begin ExtractDwarfLineInfoError:='Could not read string section header'; Exit(false); end; for i := 0 to (header.e_shnum-1) do begin f.Position:= header.e_shoff + (i * header.e_shentsize); if (f.Read(cursec_header, sizeof(cursec_header)) <> sizeof(cursec_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; { paranoia TODO: check cursec_header.e_shentsize } f.Position:= strtab_header.sh_offset + cursec_header.sh_name; if (f.Read(buf, sizeof(buf)) <> sizeof(buf)) then begin ExtractDwarfLineInfoError:='Could not read section name'; Exit(false); end; buf[sizeof(buf)-1] := #0; DEBUG_WRITELN('This section is ', pchar(@buf[0]), ', offset ', IntToStr(cursec_header.sh_offset), ', size ', IntToStr(cursec_header.sh_size)); sectionName := StrPas(pchar(@buf[0])); if sectionName = DwarfDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DwarfLineInfoSize := cursec_header.sh_size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); break; end; if sectionName = DwarfZDebugLine then begin DEBUG_WRITELN(sectionName + ' section found'); DwarfLineInfoOffset := cursec_header.sh_offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); break; end; end; end; function ExtractMacho32( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var I, J : Integer; header : TMacho32Header; load_command : TMachoLoadCommand; segment_header : TMacho32SegmentCommand; section_header : TMacho32SegmentSection; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the Mach-O header!'; Exit(false); end; for I:= 1 to header.ncmds do begin if (f.Read(load_command, sizeof(load_command)) <> sizeof(load_command)) then begin ExtractDwarfLineInfoError:='Could not read next segment header'; Exit(false); end; if (load_command.cmd <> LC_SEGMENT) then f.Seek(load_command.cmdsize - sizeof(load_command), soFromCurrent) else begin f.Seek(-sizeof(load_command), soFromCurrent); if (f.Read(segment_header, sizeof(segment_header)) <> sizeof(segment_header)) then begin ExtractDwarfLineInfoError:='Could not read segment name'; Exit(false); end; if segment_header.segname <> DwarfDarwinSegmentName then begin f.Seek(load_command.cmdsize - sizeof(segment_header), soFromCurrent); if segment_header.segname = TextDarwinSegmentName then Imagebase:= segment_header.vmaddr; end else begin for J:= 0 to segment_header.nsects - 1 do begin if (f.Read(section_header, sizeof(section_header)) <> sizeof(section_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; DEBUG_WRITELN('Section ', I, ': ', section_header.sectname, ', offset ', IntToStr(section_header.offset), ', size ', IntToStr(section_header.size)); if section_header.sectname = DwarfDarwinDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DwarfLineInfoSize := section_header.size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); Break; end else if section_header.sectname = DwarfZDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); Break; end; end; Break; end; end; end; end; function ExtractMacho64( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): boolean; var I, J : Integer; header : TMacho64Header; load_command : TMachoLoadCommand; segment_header : TMacho64SegmentCommand; section_header : TMacho64SegmentSection; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := False; if (f.read(header, sizeof(header)) <> sizeof(header)) then begin ExtractDwarfLineInfoError:='Could not read the Mach-O header!'; Exit(false); end; for I:= 1 to header.ncmds do begin if (f.Read(load_command, sizeof(load_command)) <> sizeof(load_command)) then begin ExtractDwarfLineInfoError:='Could not read next segment header'; Exit(false); end; if (load_command.cmd <> LC_SEGMENT_64) then f.Seek(load_command.cmdsize - sizeof(load_command), soFromCurrent) else begin f.Seek(-sizeof(load_command), soFromCurrent); if (f.Read(segment_header, sizeof(segment_header)) <> sizeof(segment_header)) then begin ExtractDwarfLineInfoError:='Could not read segment name'; Exit(false); end; if segment_header.segname <> DwarfDarwinSegmentName then begin f.Seek(load_command.cmdsize - sizeof(segment_header), soFromCurrent); if segment_header.segname = TextDarwinSegmentName then Imagebase:= segment_header.vmaddr; end else begin for J:= 0 to segment_header.nsects - 1 do begin if (f.Read(section_header, sizeof(section_header)) <> sizeof(section_header)) then begin ExtractDwarfLineInfoError:='Could not read next section header'; Exit(false); end; DEBUG_WRITELN('Section ', I, ': ', section_header.sectname, ', offset ', IntToStr(section_header.offset), ', size ', IntToStr(section_header.size)); if section_header.sectname = DwarfDarwinDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DwarfLineInfoSize := section_header.size; { more checks } DEBUG_WRITELN(' offset ', DwarfLineInfoOffset, ', size ', DwarfLineInfoSize); Result := (DwarfLineInfoOffset >= 0) and (DwarfLineInfoSize > 0); Break; end else if section_header.sectname = DwarfZDebugLine then begin DEBUG_WRITELN(section_header.sectname + ' section found'); DwarfLineInfoOffset := section_header.offset; DEBUG_WRITELN(' offset ', DwarfLineInfoOffset); IsCompressed:= true; Result := (DwarfLineInfoOffset >= 0); Break; end; end; Break; end; end; end; end; function CheckWindowsExe( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var dosheader : tdosheader; peheader : tpeheader; peoptheader32 : tpeoptionalheader32; peoptheader64 : tpeoptionalheader64; coffsec : tcoffsechdr; stringsSectionOffset: PtrUInt; sectionName : String; i: Integer; function GetLongSectionName(numberedSectionName: String): String; var sectionNameBuf : array[0..255] of char; stringOffset : Cardinal; oldOffset: Int64; code: Integer; begin Val(Copy(numberedSectionName, 2, 8), stringOffset, code); if code=0 then begin fillchar(sectionNameBuf, sizeof(sectionNameBuf), 0); oldOffset := f.Position; f.Seek(stringsSectionOffset + stringOffset, soBeginning); f.Read(sectionNameBuf, sizeof(sectionNameBuf)); f.Seek(oldOffset, soBeginning); Result := StrPas(sectionNameBuf); end else Result := ''; end; begin DwarfLineInfoOffset := 0; DwarfLineInfoSize := 0; Imagebase:= 0; IsCompressed := False; Result := header_not_found; { read and check header } if f.Size >= sizeof(tdosheader) then begin f.Read(dosheader, sizeof(tdosheader)); if dosheader.e_magic = $5A4D then // 'MZ' begin f.Position:= dosheader.e_lfanew; if (f.Size - f.Position) >= sizeof(tpeheader) then begin f.Read(peheader, sizeof(tpeheader)); if peheader.pemagic = $4550 then // 'PE' begin peoptheader32.magic := f.ReadWord; if (peoptheader32.magic = $10B) and (peheader.SizeOfOptionalHeader = sizeof(tpeoptionalheader32)) then begin DEBUG_WRITELN('Found Windows Portable Executable header (32-bit).'); f.Read(peoptheader32.MajorLinkerVersion, sizeof(tpeoptionalheader32) - sizeof(tpeoptionalheader32.Magic)); ImageBase:= peoptheader32.Imagebase; end else if (peoptheader32.magic = $20B) and (peheader.SizeOfOptionalHeader = sizeof(tpeoptionalheader64)) then begin DEBUG_WRITELN('Found Windows Portable Executable header (64-bit).'); peoptheader64.magic := peoptheader32.magic; f.Read(peoptheader64.MajorLinkerVersion, sizeof(tpeoptionalheader64) - sizeof(tpeoptionalheader64.Magic)); ImageBase:= peoptheader64.Imagebase; end else begin DEBUG_WRITELN('Unsupported Windows Portable Executable.'); Exit; end; stringsSectionOffset := peheader.PointerToSymbolTable + peheader.NumberOfSymbols * sizeof(coffsymbol); { read section info } for i:=1 to peheader.NumberOfSections do begin f.Read(coffsec, sizeof(tcoffsechdr)); sectionName := cntostr(@coffsec.name); if Length(sectionName) <= 0 then continue; if sectionName[1]='/' then // Section name longer than 8 characters. sectionName := GetLongSectionName(sectionName); DEBUG_WRITELN(sectionName); if sectionName = DwarfDebugLine then begin DwarfLineInfoOffset:= coffsec.datapos; DwarfLineInfoSize:= coffsec.datalen; break; end; if sectionName = DwarfZDebugLine then begin DwarfLineInfoOffset:= coffsec.datapos; IsCompressed:= true; break; end; end; if DwarfLineInfoOffset > 0 then Result := found_debug_info else Result := no_debug_info; end; end; end; end; end; function CheckUnixElf( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var fileIdentBuf : array[0..El_NIDENT-1] of byte; begin if f.Size >= El_NIDENT then begin if (f.read(fileIdentBuf, El_NIDENT) <> El_NIDENT) then begin Exit(header_not_found); end; { more paranoia checks } if (fileIdentBuf[EI_MAG0] <> ELFMAG0) or (fileIdentBuf[EI_MAG1] <> ELFMAG1) or (fileIdentBuf[EI_MAG2] <> ELFMAG2) or (fileIdentBuf[EI_MAG3] <> ELFMAG3) then begin ExtractDwarfLineInfoError:='Invalid ELF magic header.'; Exit(header_not_found); end; // Found header. f.Seek(0, soBeginning); case fileIdentBuf[EI_CLASS] of ELFCLASS32: begin DEBUG_WRITELN('Found Unix ELF 32-bit header.'); if ExtractElf32(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; ELFCLASS64: begin DEBUG_WRITELN('Found Unix ELF 64-bit header.'); if ExtractElf64(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; else begin Exit(header_invalid); end; end; Imagebase:= 0; end; end; function CheckDarwinMacho( f: TFileStream; out DwarfLineInfoSize: QWord; out DwarfLineInfoOffset: Int64; out Imagebase: QWord; out IsCompressed: Boolean): TCheckResult; var fileIdentBuf : LongWord; begin if f.Size >= SizeOf(LongWord) then begin if (f.read(fileIdentBuf, SizeOf(LongWord)) <> SizeOf(LongWord)) then begin Exit(header_not_found); end; f.Seek(0, soBeginning); case fileIdentBuf of MH_MAGIC, MH_CIGAM: begin DEBUG_WRITELN('Found Darwin Mach-O 32-bit header.'); if ExtractMacho32(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; MH_MAGIC_64, MH_CIGAM_64: begin DEBUG_WRITELN('Found Darwin Mach-O 64-bit header.'); if ExtractMacho64(f, DwarfLineInfoSize, DwarfLineInfoOffset, Imagebase, IsCompressed) then Result := found_debug_info else Result := no_debug_info; end; else begin Exit(header_not_found); end; end; end; end; function ExtractDwarfLineInfo( ExeFileName: ansistring; out _dlnfo: pointer; out _dlnfoSize: QWord; out Imagebase: QWord): longbool; var DwarfOffset : int64; DwarfSize : QWord; IsCompressed: boolean = False; f : TFileStream; DC: TDecompressionStream; CheckResult: TCheckResult; begin DEBUG_WRITELN('Reading dwarf line info from ', ExeFileName); Result := False; f:= TFileStream.Create(ExeFileName, fmOpenRead or fmShareDenyNone); try { Check for Windows PE. } CheckResult := CheckWindowsExe(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); { Check for Unix ELF. } if CheckResult = header_not_found then begin f.Seek(0, soBeginning); CheckResult := CheckUnixElf(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); end; { Check for Darwin Mach-O. } if CheckResult = header_not_found then begin f.Seek(0, soBeginning); CheckResult := CheckDarwinMacho(f, DwarfSize, DwarfOffset, Imagebase, IsCompressed); end; if CheckResult = found_debug_info then begin Result := True; if IsCompressed then begin f.Position:= DwarfOffset; DC:= TDecompressionStream.Create(f); DC.Read(DwarfSize, sizeof(DwarfSize)); // 8 bytes (QWORD) DC.Read(ImageBase, sizeof(ImageBase)); // 8 bytes (QWORD) _dlnfoSize:= DwarfSize; GetMem(_dlnfo, DwarfSize); DC.Read(_dlnfo^, DwarfSize); DC.Free; end else begin GetMem(_dlnfo, DwarfSize); _dlnfoSize:= DwarfSize; f.Position:= DwarfOffset; f.Read(_dlnfo^, DwarfSize); end; end else case CheckResult of header_not_found: ExtractDwarfLineInfoError := 'File not supported.'; header_invalid: ExtractDwarfLineInfoError := 'Invalid header.'; no_debug_info: ExtractDwarfLineInfoError := 'The debug line info section not found.'; end; finally f.Free; end; end; end. doublecmd-0.7.1/src/fstartingsplash.pas0000644000175000001440000000265412662424243017241 0ustar alexxusersunit fstartingsplash; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls; type { TfrmStartingSplash } TfrmStartingSplash = class(TForm) imgLogo: TImage; lblBuild: TLabel; lblFreePascalVer: TLabel; lblLazarusVer: TLabel; lblOperatingSystem: TLabel; lblPlatform: TLabel; lblRevision: TLabel; lblTitle: TLabel; lblVersion: TLabel; lblWidgetsetVer: TLabel; pnlVersionInfos: TPanel; pnlInfo: TPanel; procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var frmStartingSplash: TfrmStartingSplash; implementation {$R *.lfm} uses uDCVersion; { TfrmStartingSplash } procedure TfrmStartingSplash.FormCreate(Sender: TObject); begin lblVersion.Caption := lblVersion.Caption + #32 + dcVersion; lblRevision.Caption := lblRevision.Caption + #32 + dcRevision; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + lazVersion + '-' + lazRevision; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; end; end. doublecmd-0.7.1/src/doublecmd.manifest.rc0000644000175000001440000000014512562710227017401 0ustar alexxusers#define RT_MANIFEST 24 #define APP_MANIFEST 1 APP_MANIFEST RT_MANIFEST "doublecmd.exe.manifest" doublecmd-0.7.1/src/ufindfiles.pas0000644000175000001440000003613712626406755016170 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Structures and functions for searching files. Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2013 Koblov Alexander (Alexx2000@mail.ru) Copyright (C) 2010 Przemysaw Nagay (cobines@gmail.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 uFindFiles; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes, uFile; type TTimeUnit = (tuSecond, tuMinute, tuHour, tuDay, tuWeek, tuMonth, tuYear); TFileSizeUnit = (suBytes, suKilo, suMega, suGiga, suTera); TPluginOperator = (poEqual, poNotEqual, poMore, poLess, poMoreEqual, poLessEqual, poEqualCase, poNotEqualCase, poContains, poNotContains, poContainsCase, poNotContainsCase); TPluginSearchRec = record Plugin: String; Field: String; FieldType: Integer; Compare: TPluginOperator; Value: Variant; end; TSearchTemplateRec = record StartPath: String; ExcludeDirectories: String; FilesMasks: String; ExcludeFiles: String; SearchDepth: Integer; // -1 = unlimited RegExp: Boolean; IsPartialNameSearch: Boolean; FollowSymLinks: Boolean; AttributesPattern: String; FindInArchives: Boolean; { Date/time } IsDateFrom, IsDateTo, IsTimeFrom, IsTimeTo : Boolean; DateTimeFrom, DateTimeTo : TDateTime; IsNotOlderThan: Boolean; NotOlderThan: Integer; NotOlderThanUnit: TTimeUnit; { File size } IsFileSizeFrom, IsFileSizeTo : Boolean; FileSizeFrom, FileSizeTo : Int64; FileSizeUnit: TFileSizeUnit; { Find/replace text } IsFindText: Boolean; FindText: String; IsReplaceText : Boolean; ReplaceText: String; CaseSensitive, NotContainingText: Boolean; TextRegExp: Boolean; TextEncoding: String; { Plugins } SearchPlugin: String; ContentPlugin: Boolean; ContentPluginCombine: Boolean; ContentPlugins: array of TPluginSearchRec; end; TFindFileAttrsCheck = record HaveAttrs: TFileAttrs; //en> what attributes files must have DontHaveAttrs: TFileAttrs; //en> what attributes files must not have Negated: Boolean; end; TFindFileChecks = record FilesMasks: String; ExcludeFiles: String; ExcludeDirectories: String; RegExp: Boolean; DateTimeFrom, DateTimeTo : TDateTime; FileSizeFrom, FileSizeTo : Int64; Attributes: array of TFindFileAttrsCheck; //en> Each entry is OR'ed. end; procedure SearchTemplateToFindFileChecks(const SearchTemplate: TSearchTemplateRec; out FileChecks: TFindFileChecks); procedure DateTimeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const FileName: String) : Boolean; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String) : Boolean; function CheckDirectoryNameRelative(const FileChecks: TFindFileChecks; const FullPath, BasePath: String) : Boolean; function CheckFileName(const FileChecks: TFindFileChecks; const FileName: String) : Boolean; function CheckFileTime(const FileChecks: TFindFileChecks; FT : TFileTime) : Boolean; inline; function CheckFileDateTime(const FileChecks: TFindFileChecks; DT : TDateTime) : Boolean; function CheckFileSize(const FileChecks: TFindFileChecks; FileSize : Int64) : Boolean; function CheckFileAttributes(const FileChecks: TFindFileChecks; Attrs : TFileAttrs) : Boolean; function CheckFile(const SearchTemplate: TSearchTemplateRec; const FileChecks: TFindFileChecks; const AFile: TFile) : Boolean; implementation uses strutils, DateUtils, DCDateTimeUtils, DCFileAttributes, SynRegExpr, uMasks, DCStrUtils, uFileProperty, uGlobs, uWDXModule, LazUTF8; const cKilo = 1024; cMega = 1024 * cKilo; cGiga = 1024 * cMega; cTera = 1024 * cGiga; procedure FileMaskOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); var sMask, sTemp: String; begin FileChecks.FilesMasks := SearchTemplate.FilesMasks; if SearchTemplate.IsPartialNameSearch then begin sTemp:= EmptyStr; while (Length(FileChecks.FilesMasks) > 0) do begin sMask:= Copy2SymbDel(FileChecks.FilesMasks, ';'); if not ContainsOneOf(sMask, '*?') then begin if Length(sMask) = 0 then sMask:= AllFilesMask else begin sMask:= '*' + sMask + '*'; end; end; sTemp:= sTemp + sMask + ';'; end; if (Length(sTemp) = 0) then FileChecks.FilesMasks := AllFilesMask else FileChecks.FilesMasks := Copy(sTemp, 1, Length(sTemp) - 1); end; end; procedure DateTimeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); begin with FileChecks do begin if SearchTemplate.IsNotOlderThan then begin DateTimeFrom := SysUtils.Now; DateTimeTo := DateTimeFrom; case SearchTemplate.NotOlderThanUnit of tuSecond: DateTimeFrom := IncSecond(DateTimeFrom, -SearchTemplate.NotOlderThan); tuMinute: DateTimeFrom := IncMinute(DateTimeFrom, -SearchTemplate.NotOlderThan); tuHour: DateTimeFrom := IncHour(DateTimeFrom, -SearchTemplate.NotOlderThan); tuDay: DateTimeFrom := IncDay(DateTimeFrom, -SearchTemplate.NotOlderThan); tuWeek: DateTimeFrom := IncWeek(DateTimeFrom, -SearchTemplate.NotOlderThan); tuMonth: DateTimeFrom := IncMonth(DateTimeFrom, -SearchTemplate.NotOlderThan); tuYear: DateTimeFrom := IncYear(DateTimeFrom, -SearchTemplate.NotOlderThan); end; end else begin if SearchTemplate.IsDateFrom then begin if SearchTemplate.IsTimeFrom then DateTimeFrom := SearchTemplate.DateTimeFrom else DateTimeFrom := Trunc(SearchTemplate.DateTimeFrom); end else if SearchTemplate.IsTimeFrom then DateTimeFrom := Frac(SearchTemplate.DateTimeFrom) else DateTimeFrom := MinDateTime; if SearchTemplate.IsDateTo then begin if SearchTemplate.IsTimeTo then DateTimeTo := SearchTemplate.DateTimeTo else DateTimeTo := Trunc(SearchTemplate.DateTimeTo) + Frac(MaxDateTime); end else if SearchTemplate.IsTimeTo then DateTimeTo := Frac(SearchTemplate.DateTimeTo) else DateTimeTo := MaxDateTime; end; end; end; procedure FileSizeOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); function GetFileSizeWithUnit(Size: Int64): Int64; begin case SearchTemplate.FileSizeUnit of suBytes: Result := Size; suKilo: Result := Size * cKilo; suMega: Result := Size * cMega; suGiga: Result := Size * cGiga; suTera: Result := Size * cTera; end; end; begin if SearchTemplate.IsFileSizeFrom then FileChecks.FileSizeFrom := GetFileSizeWithUnit(SearchTemplate.FileSizeFrom) else FileChecks.FileSizeFrom := 0; if SearchTemplate.IsFileSizeTo then FileChecks.FileSizeTo := GetFileSizeWithUnit(SearchTemplate.FileSizeTo) else FileChecks.FileSizeTo := High(FileChecks.FileSizeTo); end; function AttrPatternToCheck(const AttrPattern: String): TFindFileAttrsCheck; var StartIndex, CurIndex: Integer; begin Result.HaveAttrs := 0; Result.DontHaveAttrs := 0; Result.Negated := False; StartIndex := 1; CurIndex := StartIndex; while CurIndex <= Length(AttrPattern) do begin case AttrPattern[CurIndex] of '+': begin Result.HaveAttrs := Result.HaveAttrs or SingleStrToFileAttr(Copy(AttrPattern, StartIndex, CurIndex - StartIndex)); StartIndex := CurIndex + 1; end; '-': begin Result.DontHaveAttrs := Result.DontHaveAttrs or SingleStrToFileAttr(Copy(AttrPattern, StartIndex, CurIndex - StartIndex)); StartIndex := CurIndex + 1; end; '!': begin if CurIndex = 1 then Result.Negated := True; StartIndex := CurIndex + 1; end; ' ': // omit spaces begin StartIndex := CurIndex + 1; end; end; Inc(CurIndex); end; end; procedure AttrsPatternOptionsToChecks(const SearchTemplate: TSearchTemplateRec; var FileChecks: TFindFileChecks); var AttrsPattern, CurPattern: String; begin FileChecks.Attributes := nil; AttrsPattern := SearchTemplate.AttributesPattern; while AttrsPattern <> '' do begin // For each pattern separated by '|' create a new TFindFileAttrsCheck. CurPattern := Copy2SymbDel(AttrsPattern, '|'); if CurPattern <> '' then with FileChecks do begin SetLength(Attributes, Length(Attributes) + 1); Attributes[Length(Attributes) - 1] := AttrPatternToCheck(CurPattern); end; end; end; procedure SearchTemplateToFindFileChecks(const SearchTemplate: TSearchTemplateRec; out FileChecks: TFindFileChecks); begin FileChecks.ExcludeFiles := SearchTemplate.ExcludeFiles; FileChecks.ExcludeDirectories := SearchTemplate.ExcludeDirectories; FileChecks.RegExp := SearchTemplate.RegExp; FileMaskOptionsToChecks(SearchTemplate, FileChecks); DateTimeOptionsToChecks(SearchTemplate, FileChecks); FileSizeOptionsToChecks(SearchTemplate, FileChecks); AttrsPatternOptionsToChecks(SearchTemplate, FileChecks); end; function CheckPlugin(const SearchTemplate: TSearchTemplateRec; const FileName: String): Boolean; var I: Integer; Work: Boolean; Value: Variant; Module: TWdxModule; begin Result := SearchTemplate.ContentPluginCombine; for I:= Low(SearchTemplate.ContentPlugins) to High(SearchTemplate.ContentPlugins) do with SearchTemplate do begin Module := gWDXPlugins.GetWdxModule(ContentPlugins[I].Plugin); if Module = nil then Continue; Value:= Module.CallContentGetValueV(FileName, ContentPlugins[I].Field, '', 0); case ContentPlugins[I].Compare of poEqual: Work:= (ContentPlugins[I].Value = Value); poNotEqual: Work:= (ContentPlugins[I].Value <> Value); poMore: Work := (ContentPlugins[I].Value > Value); poLess: Work := (ContentPlugins[I].Value < Value); poMoreEqual: Work := (ContentPlugins[I].Value >= Value); poLessEqual: Work := (ContentPlugins[I].Value <= Value); poEqualCase: Work:= UTF8CompareText(Value, ContentPlugins[I].Value) = 0; poNotEqualCase: Work:= UTF8CompareText(Value, ContentPlugins[I].Value) <> 0; poContains: Work := UTF8Pos(ContentPlugins[I].Value, Value) > 0; poNotContains: Work := UTF8Pos(ContentPlugins[I].Value, Value) = 0; poContainsCase: Work := UTF8Pos(UTF8LowerCase(ContentPlugins[I].Value), UTF8LowerCase(Value)) > 0; poNotContainsCase: Work := UTF8Pos(UTF8LowerCase(ContentPlugins[I].Value), UTF8LowerCase(Value)) = 0; end; if ContentPluginCombine then Result := Result and Work else Result := Result or Work; end; end; function CheckDirectoryName(const FileChecks: TFindFileChecks; const DirectoryName: String): Boolean; begin with FileChecks do begin Result := not MatchesMaskList(DirectoryName, ExcludeDirectories); end; end; function CheckDirectoryNameRelative(const FileChecks: TFindFileChecks; const FullPath, BasePath: String): Boolean; begin Result := True; with FileChecks do begin // Check if FullPath is a path relative to BasePath. if GetPathType(ExcludeDirectories) = ptRelative then begin Result := ExcludeDirectories <> ExtractDirLevel(BasePath, FullPath); end; end; end; function CheckFileName(const FileChecks: TFindFileChecks; const FileName: String): Boolean; begin with FileChecks do begin if RegExp then begin Result := ((FilesMasks = '') or ExecRegExpr(FilesMasks, FileName)) and ((ExcludeFiles = '') or not ExecRegExpr(ExcludeFiles, FileName)); end else begin Result := MatchesMaskList(FileName, FilesMasks) and not MatchesMaskList(FileName, ExcludeFiles); end; end; end; function CheckFileTime(const FileChecks: TFindFileChecks; FT : TFileTime) : Boolean; begin Result := CheckFileDateTime(FileChecks, FileTimeToDateTime(FT)); end; function CheckFileDateTime(const FileChecks: TFindFileChecks; DT : TDateTime) : Boolean; begin with FileChecks do Result := (DateTimeFrom <= DT) and (DT <= DateTimeTo); end; function CheckFileSize(const FileChecks: TFindFileChecks; FileSize: Int64): Boolean; begin with FileChecks do Result := (FileSizeFrom <= FileSize) and (FileSize <= FileSizeTo); end; function CheckFileAttributes(const FileChecks: TFindFileChecks; Attrs : TFileAttrs) : Boolean; var i: Integer; begin if Length(FileChecks.Attributes) = 0 then Result := True else begin for i := Low(FileChecks.Attributes) to High(FileChecks.Attributes) do begin with FileChecks.Attributes[i] do begin Result := ((Attrs and HaveAttrs) = HaveAttrs) and ((Attrs and DontHaveAttrs) = 0); if Negated then Result := not Result; if Result then Exit; end; end; Result := False; end; end; function CheckFile(const SearchTemplate: TSearchTemplateRec; const FileChecks: TFindFileChecks; const AFile: TFile): Boolean; var IsDir: Boolean; DirectoryName: String; begin Result := True; with SearchTemplate do begin IsDir := AFile.IsDirectory or AFile.IsLinkToDirectory; if (fpName in AFile.SupportedProperties) then begin DirectoryName:= ExtractFileName(ExcludeTrailingBackslash(AFile.Path)); Result := CheckDirectoryName(FileChecks, DirectoryName); if Result then Result := CheckFileName(FileChecks, AFile.Name); end; if Result and (fpModificationTime in AFile.SupportedProperties) then if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result:= CheckFileDateTime(FileChecks, AFile.ModificationTime); if Result and not IsDir and (fpSize in AFile.SupportedProperties) then if (IsFileSizeFrom or IsFileSizeTo) then Result:= CheckFileSize(FileChecks, AFile.Size); if Result and (fpAttributes in AFile.SupportedProperties) then Result:= CheckFileAttributes(FileChecks, AFile.Attributes); end; end; end. doublecmd-0.7.1/src/fmain.lfm0000644000175000001440000043104312660674103015110 0ustar alexxusersobject frmMain: TfrmMain Left = 485 Height = 370 Top = 269 Width = 760 Caption = 'Double Commander' ClientHeight = 370 ClientWidth = 760 KeyPreview = True OnClose = frmMainClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnKeyPress = FormKeyPress OnKeyUp = FormKeyUp OnShow = frmMainShow OnUTF8KeyPress = FormUTF8KeyPress OnWindowStateChange = FormWindowStateChange SessionProperties = 'nbConsole.Height;seLogWindow.Height;TreePanel.Width' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '1.4.4.0' Visible = True object MainToolBar: TKASToolBar AnchorSideTop.Control = Owner Left = 0 Height = 20 Top = 0 Width = 760 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [] Flat = True TabOrder = 1 OnDragDrop = MainToolBarDragDrop OnDragOver = MainToolBarDragOver OnMouseUp = MainToolBarMouseUp OnLoadButtonGlyph = MainToolBarLoadButtonGlyph OnToolButtonMouseDown = MainToolBarToolButtonMouseDown OnToolButtonMouseUp = MainToolBarToolButtonMouseUp OnToolButtonDragDrop = MainToolBarToolButtonDragDrop OnToolButtonDragOver = MainToolBarToolButtonDragOver OnToolItemShortcutsHint = MainToolBarToolItemShortcutsHint GlyphSize = 16 end object TreePanel: TPanel Left = 0 Height = 191 Top = 20 Width = 121 Align = alLeft BevelOuter = bvNone TabOrder = 0 end object TreeSplitter: TSplitter Left = 121 Height = 191 Top = 20 Width = 5 end object pnlMain: TPanel Left = 126 Height = 191 Top = 20 Width = 634 Align = alClient BevelOuter = bvNone ClientHeight = 191 ClientWidth = 634 TabOrder = 5 object pnlDisk: TPanel AnchorSideTop.Control = MainToolBar Left = 0 Height = 24 Top = 0 Width = 634 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 634 FullRepaint = False TabOrder = 0 Visible = False object pnlDskLeft: TPanel AnchorSideLeft.Control = pnlDisk AnchorSideTop.Control = pnlDisk Left = 0 Height = 24 Top = 0 Width = 170 BevelOuter = bvNone ClientHeight = 24 ClientWidth = 170 TabOrder = 0 Visible = False object dskLeft: TKASToolBar Left = 0 Height = 20 Top = 0 Width = 170 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [ebTop, ebBottom] Flat = True ShowCaptions = True TabOrder = 0 OnResize = dskLeftResize OnToolButtonClick = dskLeftToolButtonClick OnToolButtonMouseUp = dskToolButtonMouseUp OnToolButtonDragDrop = dskLeftRightToolButtonDragDrop RadioToolBar = True GlyphSize = 16 end end object pnlDskRight: TPanel AnchorSideTop.Control = pnlDisk AnchorSideRight.Control = pnlDisk AnchorSideRight.Side = asrBottom Left = 46 Height = 24 Top = 0 Width = 588 Anchors = [akTop, akRight] BevelOuter = bvNone ClientHeight = 24 ClientWidth = 588 TabOrder = 1 Visible = False object dskRight: TKASToolBar Left = 0 Height = 20 Top = 0 Width = 588 AutoSize = True Constraints.MinHeight = 20 EdgeBorders = [ebTop, ebBottom] Flat = True ShowCaptions = True TabOrder = 0 OnResize = dskRightResize OnToolButtonClick = dskRightToolButtonClick OnToolButtonMouseUp = dskToolButtonMouseUp OnToolButtonDragDrop = dskLeftRightToolButtonDragDrop RadioToolBar = True GlyphSize = 16 end end end object pnlNotebooks: TPanel Left = 0 Height = 167 Top = 24 Width = 634 Align = alClient BevelOuter = bvNone ClientHeight = 167 ClientWidth = 634 FullRepaint = False TabOrder = 1 OnResize = pnlNotebooksResize object pnlLeft: TPanel Left = 0 Height = 167 Top = 0 Width = 511 Align = alLeft BevelOuter = bvNone ClientHeight = 167 ClientWidth = 511 TabOrder = 0 OnDblClick = pnlLeftRightDblClick OnResize = pnlLeftResize object pnlDiskLeftInner: TPanel Left = 0 Height = 10 Top = 0 Width = 511 Align = alTop BevelOuter = bvNone TabOrder = 1 Visible = False end object pnlLeftTools: TPanel Left = 0 Height = 24 Top = 10 Width = 511 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 511 TabOrder = 0 object btnLeftDrive: TSpeedButton Left = 0 Height = 24 Top = 0 Width = 48 Action = actLeftOpenDrives Align = alLeft Constraints.MinHeight = 24 OnMouseUp = btnDriveMouseUp end object btnLeftHome: TSpeedButton Left = 465 Height = 24 Hint = 'Go to home directory' Top = 0 Width = 23 Align = alRight Caption = '~' OnClick = btnLeftClick end object btnLeftUp: TSpeedButton Left = 442 Height = 24 Hint = 'Go to parent directory' Top = 0 Width = 23 Align = alRight Caption = '..' OnClick = btnLeftClick end object btnLeftRoot: TSpeedButton Left = 419 Height = 24 Hint = 'Go to root directory' Top = 0 Width = 23 Align = alRight Caption = '/' OnClick = btnLeftClick end object btnLeftDirectoryHotlist: TSpeedButton Left = 396 Height = 24 Hint = 'Directory Hotlist' Top = 0 Width = 23 Align = alRight Caption = '*' OnClick = btnLeftDirectoryHotlistClick end object btnLeftEqualRight: TSpeedButton Left = 488 Height = 24 Hint = 'Show current directory of the right panel in the left panel' Top = 0 Width = 23 Action = actLeftEqualRight Align = alRight Caption = '<' end object pbxLeftDrive: TPaintBox AnchorSideLeft.Control = lblLeftDriveInfo AnchorSideTop.Control = lblLeftDriveInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblLeftDriveInfo AnchorSideRight.Side = asrBottom Left = 52 Height = 10 Top = 1 Width = 342 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 OnPaint = sboxDrivePaint end object lblLeftDriveInfo: TLabel AnchorSideLeft.Control = btnLeftDrive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftTools AnchorSideRight.Side = asrBottom Left = 50 Height = 1 Top = 0 Width = 346 Alignment = taCenter Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 ParentColor = False OnDblClick = lblDriveInfoDblClick end end end object pnlRight: TPanel Left = 511 Height = 167 Top = 0 Width = 123 Align = alClient BevelOuter = bvNone ClientHeight = 167 ClientWidth = 123 TabOrder = 1 OnDblClick = pnlLeftRightDblClick OnResize = pnlRightResize object pnlDiskRightInner: TPanel Left = 0 Height = 10 Top = 0 Width = 123 Align = alTop BevelOuter = bvNone TabOrder = 1 Visible = False end object pnlRightTools: TPanel Left = 0 Height = 24 Top = 10 Width = 123 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 24 ClientWidth = 123 TabOrder = 0 object btnRightDrive: TSpeedButton Left = 0 Height = 24 Top = 0 Width = 48 Action = actRightOpenDrives Align = alLeft Constraints.MinHeight = 24 OnMouseUp = btnDriveMouseUp end object btnRightHome: TSpeedButton Left = 77 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '~' OnClick = btnRightClick end object btnRightUp: TSpeedButton Left = 54 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '..' OnClick = btnRightClick end object btnRightRoot: TSpeedButton Left = 31 Height = 24 Top = 0 Width = 23 Align = alRight Caption = '/' OnClick = btnRightClick end object btnRightDirectoryHotlist: TSpeedButton Left = 25 Height = 24 Hint = 'Directory Hotlist' Top = 0 Width = 23 Align = alRight Caption = '*' OnClick = btnRightDirectoryHotlistClick end object btnRightEqualLeft: TSpeedButton Left = 100 Height = 24 Hint = 'Show current directory of the left panel in the right panel' Top = 0 Width = 23 Action = actRightEqualLeft Align = alRight Caption = '>' end object pbxRightDrive: TPaintBox AnchorSideLeft.Control = lblRightDriveInfo AnchorSideTop.Control = lblRightDriveInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblRightDriveInfo AnchorSideRight.Side = asrBottom Left = 52 Height = 10 Top = 1 Width = 0 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 OnPaint = sboxDrivePaint end object lblRightDriveInfo: TLabel AnchorSideLeft.Control = btnRightDrive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightTools AnchorSideRight.Side = asrBottom Left = 50 Height = 1 Top = 0 Width = 0 Alignment = taCenter Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 BorderSpacing.Right = 2 ParentColor = False OnDblClick = lblDriveInfoDblClick end end end object MainSplitter: TPanel Cursor = crHSplit Left = 429 Height = 78 Top = -40 Width = 5 Anchors = [] BevelOuter = bvNone PopupMenu = pmSplitterPercent TabOrder = 2 OnDblClick = MainSplitterDblClick OnMouseDown = MainSplitterMouseDown OnMouseMove = MainSplitterMouseMove OnMouseUp = MainSplitterMouseUp end end end object PanelAllProgress: TPanel Left = 0 Height = 0 Top = 211 Width = 760 Align = alBottom AutoSize = True BevelOuter = bvNone TabOrder = 2 end object ConsoleSplitter: TSplitter Cursor = crVSplit Left = 0 Height = 3 Top = 211 Width = 760 Align = alBottom AutoSnap = False OnCanResize = ConsoleSplitterCanResize ResizeAnchor = akBottom Visible = False end object pnlCommand: TPanel AnchorSideBottom.Control = LogSplitter Left = 0 Height = 81 Top = 214 Width = 760 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 81 ClientWidth = 760 FullRepaint = False TabOrder = 8 object pnlCmdLine: TPanel Left = 0 Height = 27 Top = 54 Width = 760 Align = alClient AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 2 ClientHeight = 27 ClientWidth = 760 TabOrder = 1 object lblCommandPath: TLabel AnchorSideTop.Control = edtCommand AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 6 Width = 24 Caption = 'Path' ParentColor = False ShowAccelChar = False end object edtCommand: TComboBoxWithDelItems AnchorSideLeft.Control = lblCommandPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlCmdLine AnchorSideRight.Control = pnlCmdLine AnchorSideRight.Side = asrBottom Left = 28 Height = 23 Top = 2 Width = 732 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 ItemHeight = 15 OnExit = edtCommandExit OnKeyDown = edtCommandKeyDown TabOrder = 0 TabStop = False end end object nbConsole: TPageControl Left = 0 Height = 54 Top = 0 Width = 760 TabStop = False ActivePage = pgConsole Align = alTop ShowTabs = False TabIndex = 0 TabOrder = 0 Visible = False object pgConsole: TTabSheet end end end object LogSplitter: TSplitter AnchorSideBottom.Control = seLogWindow Cursor = crVSplit Left = 0 Height = 4 Top = 295 Width = 760 Align = alBottom AutoSnap = False ResizeAnchor = akBottom ResizeStyle = rsLine Visible = False end inline seLogWindow: TSynEdit AnchorSideBottom.Control = pnlKeys Left = 0 Height = 51 Top = 299 Width = 760 Align = alBottom Font.Height = -16 Font.Name = 'courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False PopupMenu = pmLogMenu TabOrder = 4 TabStop = False Visible = False Gutter.Width = 0 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end> MouseActions = <> MouseTextActions = <> MouseSelActions = <> VisibleSpecialChars = [vscSpace, vscTabAtLast] ReadOnly = True RightEdge = 0 ScrollBars = ssVertical SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnSpecialLineColors = seLogWindowSpecialLineColors inline SynLeftGutterPartList1: TSynGutterPartList end end object pnlKeys: TPanel Left = 0 Height = 20 Top = 350 Width = 760 Align = alBottom BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 20 ClientWidth = 760 FullRepaint = False TabOrder = 3 Visible = False object btnF3: TSpeedButton Left = 0 Height = 20 Top = 0 Width = 89 Action = actView Flat = True end object btnF4: TSpeedButton Left = 89 Height = 20 Top = 0 Width = 84 Action = actEdit Flat = True end object btnF5: TSpeedButton Left = 173 Height = 20 Top = 0 Width = 92 Action = actCopy Flat = True end object btnF6: TSpeedButton Left = 265 Height = 20 Top = 0 Width = 94 Action = actRename Flat = True end object btnF7: TSpeedButton Left = 359 Height = 20 Top = 0 Width = 112 Action = actMakeDir Caption = 'Directory' Flat = True end object btnF8: TSpeedButton Left = 471 Height = 20 Top = 0 Width = 97 Caption = 'Delete' Flat = True OnClick = btnF8Click OnMouseDown = btnF8MouseDown end object btnF9: TSpeedButton Left = 568 Height = 20 Top = 0 Width = 110 Action = actRunTerm Caption = 'Terminal' Flat = True end object btnF10: TSpeedButton Left = 678 Height = 20 Top = 0 Width = 82 Action = actExit Caption = 'Exit' Flat = True end end object mnuMain: TMainMenu ParentBidiMode = False left = 232 top = 8 object mnuFiles: TMenuItem Caption = '&Files' object mnuFilesSymLink: TMenuItem Action = actSymLink end object mnuFilesHardLink: TMenuItem Action = actHardLink end object miMakeDir: TMenuItem Action = actMakeDir end object miLine1: TMenuItem Caption = '-' end object mnuSetFileProperties: TMenuItem Action = actSetFileProperties end object mnuFilesProperties: TMenuItem Action = actFileProperties end object miEditComment: TMenuItem Action = actEditComment end object mnuFilesSpace: TMenuItem Action = actCalculateSpace end object mnuFilesCmpCnt: TMenuItem Action = actCompareContents end object miMultiRename: TMenuItem Action = actMultiRename end object miLine2: TMenuItem Caption = '-' end object mnuPackFiles: TMenuItem Action = actPackFiles end object mnuExtractFiles: TMenuItem Action = actExtractFiles end object mnuTestArchive: TMenuItem Action = actTestArchive end object mnuFilesSplit: TMenuItem Action = actFileSpliter end object mnuFilesCombine: TMenuItem Action = actFileLinker end object mnuCheckSumCalc: TMenuItem Action = actCheckSumCalc end object mnuCheckSumVerify: TMenuItem Action = actCheckSumVerify end object miLine4: TMenuItem Caption = '-' end object miWipe: TMenuItem Action = actWipe end object miDelete: TMenuItem Action = actDelete end object miLine50: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExit end end object mnuMark: TMenuItem Caption = '&Mark' object mnuMarkSGroup: TMenuItem Action = actMarkPlus end object mnuMarkUGroup: TMenuItem Action = actMarkMinus end object mnuMarkSAll: TMenuItem Action = actMarkMarkAll end object mnuMarkUAll: TMenuItem Action = actMarkUnmarkAll end object mnuMarkInvert: TMenuItem Action = actMarkInvert end object mnuMarkCurrentExtension: TMenuItem Action = actMarkCurrentExtension end object mnuUnmarkCurrentExtension: TMenuItem Action = actUnmarkCurrentExtension end object miLine47: TMenuItem Caption = '-' end object mnuSaveSelection: TMenuItem Action = actSaveSelection end object mnuRestoreSelection: TMenuItem Action = actRestoreSelection end object mnuSaveSelectionToFile: TMenuItem Action = actSaveSelectionToFile end object mnuLoadSelectionFromFile: TMenuItem Action = actLoadSelectionFromFile end object mnuLoadSelectionFromClip: TMenuItem Action = actLoadSelectionFromClip end object miLine5: TMenuItem Caption = '-' end object miCopyNamesToClip: TMenuItem Action = actCopyNamesToClip end object miCopyFullNamesToClip: TMenuItem Action = actCopyFullNamesToClip end object miCopyFileDetailsToClip: TMenuItem Action = actCopyFileDetailsToClip end object miLine37: TMenuItem Caption = '-' end object miCompareDirectories: TMenuItem Action = actCompareDirectories end end object mnuCmd: TMenuItem Caption = '&Commands' object mnuCmdSearch: TMenuItem Action = actSearch end object mnuCmdDirHotlist: TMenuItem Action = actDirHotList end object mnuCmdSyncDirs: TMenuItem Action = actSyncDirs end object miLine6: TMenuItem Caption = '-' end object miRunTerm: TMenuItem Action = actRunTerm end object miLine9: TMenuItem Caption = '-' end object miFlatView: TMenuItem Action = actFlatView end object mnuOpenVFSList: TMenuItem Action = actOpenVirtualFileSystemList end object mnuCmdSwapSourceTarget: TMenuItem Action = actExchange end object mnuCmdTargetIsSource: TMenuItem Action = actTargetEqualSource end object miLine22: TMenuItem Caption = '-' end object mnuCountDirContent: TMenuItem Action = actCountDirContent end end object mnuNetwork: TMenuItem Caption = 'Network' object miNetworkConnect: TMenuItem Action = actNetworkConnect end object miNetworkQuickConnect: TMenuItem Action = actNetworkQuickConnect Visible = False end object miNetworkDisconnect: TMenuItem Action = actNetworkDisconnect Enabled = False end end object mnuTabs: TMenuItem Caption = '&Tabs' object mnuNewTab: TMenuItem Action = actNewTab end object mnuRenameTab: TMenuItem Action = actRenameTab end object mnuOpenDirInNewTab: TMenuItem Action = actOpenDirInNewTab end object miLine15: TMenuItem Caption = '-' end object mnuCloseTab: TMenuItem Action = actCloseTab end object mnuCloseAllTabs: TMenuItem Action = actCloseAllTabs end object mnuCloseDuplicateTabs: TMenuItem Action = actCloseDuplicateTabs end object miLine11: TMenuItem Caption = '-' end object mnuTabOptions: TMenuItem Caption = 'Tab &Options' object mnuTabOptionNormal: TMenuItem Action = actSetTabOptionNormal GroupIndex = 1 RadioItem = True end object mnuTabOptionPathLocked: TMenuItem Action = actSetTabOptionPathLocked GroupIndex = 1 RadioItem = True end object mnuTabOptionPathResets: TMenuItem Action = actSetTabOptionPathResets GroupIndex = 1 RadioItem = True end object mnuTabOptionDirsInNewTabs: TMenuItem Action = actSetTabOptionDirsInNewTab GroupIndex = 1 RadioItem = True end object miLine10: TMenuItem Caption = '-' end object mnuSetAllTabsOptionNormal: TMenuItem Action = actSetAllTabsOptionNormal end object mnuSetAllTabsOptionPathLocked: TMenuItem Action = actSetAllTabsOptionPathLocked end object mnuSetAllTabsOptionPathResets: TMenuItem Action = actSetAllTabsOptionPathResets end object mnuSetAllTabsOptionDirsInNewTab: TMenuItem Action = actSetAllTabsOptionDirsInNewTab end end object miLine17: TMenuItem Caption = '-' end object mnuNextTab: TMenuItem Action = actNextTab end object mnuPrevTab: TMenuItem Action = actPrevTab end object miLine38: TMenuItem Caption = '-' end object mnuSaveTabs: TMenuItem Action = actSaveTabs end object mnuLoadTabs: TMenuItem Action = actLoadTabs end object mnuSaveFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object mnuLoadFavoriteTabs: TMenuItem Action = actLoadFavoriteTabs end object miLine39: TMenuItem Caption = '-' end object mnuConfigurationFolderTabs: TMenuItem Action = actConfigFolderTabs end object mnuConfigurationFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object mnuFavoriteTabs: TMenuItem Caption = 'Favorites' object mnuCreateNewFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object mnuRewriteFavoriteTabs: TMenuItem Action = actResaveFavoriteTabs end object mnuReloadActiveFavoriteTabs: TMenuItem Action = actReloadFavoriteTabs end object mnuConfigureFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object mnuShow: TMenuItem Caption = '&Show' object mnuBriefView: TMenuItem Action = actBriefView end object mnuColumnsView: TMenuItem Action = actColumnsView end object mnuThumbnailsView: TMenuItem Action = actThumbnailsView end object miLine33: TMenuItem Caption = '-' end object mnuQuickView: TMenuItem Action = actQuickView end object mnuTreeView: TMenuItem Action = actTreeView end object miLine32: TMenuItem Caption = '-' end object mnuShowName: TMenuItem Action = actSortByName end object mnuShowExtension: TMenuItem Action = actSortByExt end object mnuShowSize: TMenuItem Action = actSortBySize end object mnuShowTime: TMenuItem Action = actSortByDate end object mnuShowAttrib: TMenuItem Action = actSortByAttr end object miLine7: TMenuItem Caption = '-' end object mnuShowReverse: TMenuItem Action = actReverseOrder end object mnuShowReread: TMenuItem Action = actRefresh end object miLine3: TMenuItem Caption = '-' end object mnuFilesShwSysFiles: TMenuItem Action = actShowSysFiles end object miLine20: TMenuItem Caption = '-' end object mnuShowHorizontalFilePanels: TMenuItem Action = actHorizontalFilePanels end object miLine13: TMenuItem Caption = '-' end object mnuShowOperations: TMenuItem Action = actOperationsViewer end end object mnuConfig: TMenuItem Caption = 'C&onfiguration' object mnuConfigOptions: TMenuItem Action = actOptions end object miLine40: TMenuItem Caption = '-' end object mnuCmdConfigDirHotlist: TMenuItem Action = actConfigDirHotList end object mnuConfigFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end object mnuFileAssoc: TMenuItem Action = actFileAssoc end object mnuConfigFolderTabs: TMenuItem Action = actConfigFolderTabs end end object mnuHelp: TMenuItem Caption = '&Help' object mnuHelpIndex: TMenuItem Action = actHelpIndex end object mnuHelpKeyboard: TMenuItem Action = actKeyboard end object mnuHelpVisitHomePage: TMenuItem Action = actVisitHomePage end object miLine18: TMenuItem Caption = '-' end object mnuHelpAbout: TMenuItem Action = actAbout end end object mnuAllOperProgress: TMenuItem RightJustify = True Visible = False OnClick = mnuAllOperProgressClick end object mnuAllOperStart: TMenuItem Caption = 'Start' RightJustify = True Visible = False OnClick = mnuAllOperStartClick end object mnuAllOperPause: TMenuItem Caption = '||' RightJustify = True Visible = False OnClick = mnuAllOperPauseClick end object mnuAllOperStop: TMenuItem Caption = 'Cancel' RightJustify = True Visible = False OnClick = mnuAllOperStopClick end end object actionLst: TActionList left = 320 top = 24 object actHorizontalFilePanels: TAction Tag = 16 Category = 'Window' Caption = '&Horizontal Panels Mode' OnExecute = actExecute end object actPanelsSplitterPerPos: TAction Tag = 16 Category = 'Window' Caption = 'Set splitter position' OnExecute = actExecute end object actView: TAction Tag = 4 Category = 'File Operations' Caption = 'View' HelpType = htKeyword OnExecute = actExecute end object actEdit: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit' HelpType = htKeyword OnExecute = actExecute end object actHelpIndex: TAction Tag = 15 Category = 'Help' Caption = '&Contents' OnExecute = actExecute end object actKeyboard: TAction Tag = 15 Category = 'Help' Caption = '&Keyboard' OnExecute = actExecute end object actVisitHomePage: TAction Tag = 15 Category = 'Help' Caption = '&Visit Double Commander Website' OnExecute = actExecute end object actAbout: TAction Tag = 15 Category = 'Help' Caption = '&About' HelpType = htKeyword OnExecute = actExecute end object actOptions: TAction Tag = 5 Category = 'Configuration' Caption = '&Options...' HelpType = htKeyword OnExecute = actExecute end object actMultiRename: TAction Tag = 18 Category = 'Tools' Caption = 'Multi &Rename Tool' HelpType = htKeyword OnExecute = actExecute end object actSearch: TAction Tag = 18 Category = 'Tools' Caption = '&Search...' HelpType = htKeyword OnExecute = actExecute end object actSyncDirs: TAction Tag = 18 Category = 'Tools' Caption = 'Synchronize dirs...' HelpType = htKeyword OnExecute = actExecute end object actConfigToolbars: TAction Tag = 5 Category = 'Configuration' Caption = 'Toolbar...' OnExecute = actExecute end object actConfigDirHotList: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Directory Hotlist' OnExecute = actExecute end object actWorkWithDirectoryHotlist: TAction Tag = 5 Category = 'Configuration' Caption = 'Work with Directory Hotlist and paramters' OnExecute = actExecute end object actFileAssoc: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of File &Associations' OnExecute = actExecute end object actCompareContents: TAction Tag = 18 Category = 'Tools' Caption = 'Compare by &Contents' HelpType = htKeyword OnExecute = actExecute end object actShowMainMenu: TAction Tag = 16 Category = 'Window' Caption = 'Menu' HelpType = htKeyword OnExecute = actExecute end object actShowButtonMenu: TAction Tag = 16 Category = 'Window' Caption = 'Show button menu' OnExecute = actExecute end object actOperationsViewer: TAction Tag = 16 Category = 'Window' Caption = 'Operations &Viewer' OnExecute = actExecute end object actRefresh: TAction Tag = 19 Category = 'View' Caption = '&Refresh' HelpType = htKeyword OnExecute = actExecute end object actShowSysFiles: TAction Tag = 19 Category = 'View' Caption = 'Show &Hidden/System Files' Checked = True HelpType = htKeyword OnExecute = actExecute end object actDirHistory: TAction Tag = 14 Category = 'Navigation' Caption = 'Directory history' HelpType = htKeyword OnExecute = actExecute end object actDirHotList: TAction Tag = 14 Category = 'Navigation' Caption = 'Directory &Hotlist' HelpType = htKeyword OnExecute = actExecute end object actMarkPlus: TAction Tag = 10 Category = 'Mark' Caption = 'Select a &Group...' HelpType = htKeyword OnExecute = actExecute end object actMarkMinus: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect a Gro&up...' HelpType = htKeyword OnExecute = actExecute end object actMarkMarkAll: TAction Tag = 10 Category = 'Mark' Caption = '&Select All' HelpType = htKeyword OnExecute = actExecute end object actMarkUnmarkAll: TAction Tag = 10 Category = 'Mark' Caption = '&Unselect All' HelpType = htKeyword OnExecute = actExecute end object actCalculateSpace: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Calculate &Occupied Space' HelpType = htKeyword OnExecute = actExecute end object actNewTab: TAction Tag = 21 Category = 'Tabs' Caption = '&New Tab' HelpType = htKeyword OnExecute = actExecute end object actCutToClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = 'Cu&t' OnExecute = actExecute end object actCopyToClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = '&Copy' OnExecute = actExecute end object actPasteFromClipboard: TAction Tag = 12 Category = 'Clipboard' Caption = '&Paste' OnExecute = actExecute end object actRunTerm: TAction Tag = 7 Category = 'Miscellaneous' Caption = 'Run &Terminal' HelpType = htKeyword OnExecute = actExecute end object actMarkInvert: TAction Tag = 10 Category = 'Mark' Caption = '&Invert Selection' HelpType = htKeyword OnExecute = actExecute end object actMarkCurrentExtension: TAction Tag = 10 Category = 'Mark' Caption = 'Select All with the Same E&xtension' OnExecute = actExecute end object actUnmarkCurrentExtension: TAction Tag = 10 Category = 'Mark' Caption = 'Unselect All with the Same Ex&tension' OnExecute = actExecute end object actCompareDirectories: TAction Tag = 10 Category = 'Mark' Caption = 'Compare Directories' Hint = 'Compare Directories' OnExecute = actExecute end object actEditNew: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit new file' HelpType = htKeyword OnExecute = actExecute end object actCopy: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy' HelpType = htKeyword OnExecute = actExecute end object actCopyNoAsk: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy files without asking for confirmation' OnExecute = actExecute end object actCopySamePanel: TAction Tag = 4 Category = 'File Operations' Caption = 'Copy to same panel' HelpType = htKeyword OnExecute = actExecute end object actRename: TAction Tag = 4 Category = 'File Operations' Caption = 'Move' HelpType = htKeyword OnExecute = actExecute end object actRenameNoAsk: TAction Tag = 4 Category = 'File Operations' Caption = 'Move/Rename files without asking for confirmation' OnExecute = actExecute end object actRenameOnly: TAction Tag = 4 Category = 'File Operations' Caption = 'Rename' HelpType = htKeyword OnExecute = actExecute end object actMakeDir: TAction Tag = 4 Category = 'File Operations' Caption = 'Create &Directory' HelpType = htKeyword OnExecute = actExecute end object actDelete: TAction Tag = 4 Category = 'File Operations' Caption = 'Delete' HelpType = htKeyword OnExecute = actExecute end object actWipe: TAction Tag = 4 Category = 'File Operations' Caption = 'Wipe' OnExecute = actExecute end object actPackFiles: TAction Tag = 4 Category = 'File Operations' Caption = '&Pack Files...' OnExecute = actExecute end object actTestArchive: TAction Tag = 4 Category = 'File Operations' Caption = '&Test Archive(s)' OnExecute = actExecute end object actOpenArchive: TAction Tag = 4 Category = 'File Operations' Caption = 'Try open archive' OnExecute = actExecute end object actExtractFiles: TAction Tag = 4 Category = 'File Operations' Caption = '&Extract Files...' OnExecute = actExecute end object actOpenVirtualFileSystemList: TAction Tag = 4 Category = 'File Operations' Caption = 'Open &VFS List' OnExecute = actExecute end object actFileProperties: TAction Tag = 4 Category = 'File Operations' Caption = 'Show &File Properties' HelpType = htKeyword OnExecute = actExecute end object actOpenDirInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Open &Folder in a New Tab' OnExecute = actExecute end object actNextTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Switch to Nex&t Tab' OnExecute = actExecute end object actPrevTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Switch to &Previous Tab' OnExecute = actExecute end object actSwitchIgnoreList: TAction Tag = 19 Category = 'View' Caption = 'Enable/disable ignore list file to not show file names' OnExecute = actExecute end object actCopyNamesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy &Filename(s) to Clipboard' OnExecute = actExecute end object actCopyFullNamesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Filename(s) with Full &Path' OnExecute = actExecute end object actSaveSelection: TAction Tag = 10 Category = 'Mark' Caption = 'Sa&ve Selection' OnExecute = actExecute end object actRestoreSelection: TAction Tag = 10 Category = 'Mark' Caption = '&Restore Selection' OnExecute = actExecute end object actSaveSelectionToFile: TAction Tag = 10 Category = 'Mark' Caption = 'Save S&election to File...' OnExecute = actExecute end object actLoadSelectionFromFile: TAction Tag = 10 Category = 'Mark' Caption = '&Load Selection from File...' OnExecute = actExecute end object actLoadSelectionFromClip: TAction Tag = 10 Category = 'Mark' Caption = 'Load Selection from Clip&board' OnExecute = actExecute end object actNetworkConnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Connect...' OnExecute = actExecute end object actNetworkQuickConnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Quick Connect...' OnExecute = actExecute end object actNetworkDisconnect: TAction Tag = 6 Category = 'Network' Caption = 'Network &Disconnect' OnExecute = actExecute end object actCopyPathOfFilesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Full Path of selected file(s)' OnExecute = actExecute end object actCopyPathNoSepOfFilesToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy Full Path of selected file(s) with no ending dir separator' OnExecute = actExecute end object actCopyFileDetailsToClip: TAction Tag = 12 Category = 'Clipboard' Caption = 'Copy all shown &columns' OnExecute = actExecute end object actRenameTab: TAction Tag = 21 Category = 'Tabs' Caption = '&Rename Tab' OnExecute = actExecute end object actLeftBriefView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Brief view on left panel' OnExecute = actExecute end object actLeftColumnsView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Columns view on left panel' OnExecute = actExecute end object actLeftThumbView: TAction Tag = 2 Category = 'Left Panel' Caption = 'Thumbnails view on left panel' OnExecute = actExecute end object actLeftFlatView: TAction Tag = 2 Category = 'Left Panel' Caption = '&Flat view on left panel' OnExecute = actExecute end object actLeftSortByName: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Name' OnExecute = actExecute end object actLeftSortByExt: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Extension' OnExecute = actExecute end object actLeftSortBySize: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Size' OnExecute = actExecute end object actLeftSortByDate: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Date' OnExecute = actExecute end object actLeftSortByAttr: TAction Tag = 2 Category = 'Left Panel' Caption = 'Sort left panel by &Attributes' OnExecute = actExecute end object actLeftReverseOrder: TAction Tag = 2 Category = 'Left Panel' Caption = 'Re&verse order on left panel' OnExecute = actExecute end object actLeftOpenDrives: TAction Tag = 2 Category = 'Left Panel' Caption = 'Open left drive list' OnExecute = actExecute end object actRightBriefView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Brief view on right panel' OnExecute = actExecute end object actRightColumnsView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Columns view on right panel' OnExecute = actExecute end object actRightThumbView: TAction Tag = 3 Category = 'Right Panel' Caption = 'Thumbnails view on right panel' OnExecute = actExecute end object actRightFlatView: TAction Tag = 3 Category = 'Right Panel' Caption = '&Flat view on right panel' OnExecute = actExecute end object actRightSortByName: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Name' OnExecute = actExecute end object actRightSortByExt: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Extension' OnExecute = actExecute end object actRightSortBySize: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Size' OnExecute = actExecute end object actRightSortByDate: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Date' OnExecute = actExecute end object actRightSortByAttr: TAction Tag = 3 Category = 'Right Panel' Caption = 'Sort right panel by &Attributes' OnExecute = actExecute end object actRightReverseOrder: TAction Tag = 3 Category = 'Right Panel' Caption = 'Re&verse order on right panel' OnExecute = actExecute end object actRightOpenDrives: TAction Tag = 3 Category = 'Right Panel' Caption = 'Open right drive list' OnExecute = actExecute end object actFocusCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Focus command line' OnExecute = actExecute end object actShowCmdLineHistory: TAction Tag = 17 Category = 'Command Line' Caption = 'Show command line history' HelpType = htKeyword OnExecute = actExecute end object actChangeDirToParent: TAction Tag = 14 Category = 'Navigation' Caption = 'Change Directory To Parent' OnExecute = actExecute end object actChangeDirToHome: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory to home' OnExecute = actExecute end object actChangeDirToRoot: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory to root' OnExecute = actExecute end object actTargetEqualSource: TAction Tag = 14 Category = 'Navigation' Caption = 'Target &= Source' OnExecute = actExecute end object actTransferLeft: TAction Tag = 14 Category = 'Navigation' Caption = 'Transfer dir under cursor to left window' OnExecute = actExecute end object actTransferRight: TAction Tag = 14 Category = 'Navigation' Caption = 'Transfer dir under cursor to right window' OnExecute = actExecute end object actLeftEqualRight: TAction Tag = 14 Category = 'Navigation' Caption = 'Left &= Right' OnExecute = actExecute end object actRightEqualLeft: TAction Tag = 14 Category = 'Navigation' Caption = 'Right &= Left' OnExecute = actExecute end object actBriefView: TAction Tag = 1 Category = 'Active Panel' Caption = 'Brief view' Hint = 'Brief View' OnExecute = actExecute end object actColumnsView: TAction Tag = 1 Category = 'Active Panel' Caption = 'Full' Hint = 'Columns View' OnExecute = actExecute end object actThumbnailsView: TAction Tag = 1 Category = 'Active Panel' Caption = 'Thumbnails' Hint = 'Thumbnails View' OnExecute = actExecute end object actFlatView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Flat view' OnExecute = actExecute end object actQuickView: TAction Tag = 1 Category = 'Active Panel' Caption = '&Quick View Panel' OnExecute = actExecute end object actSortByName: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Name' HelpType = htKeyword OnExecute = actExecute end object actSortByExt: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Extension' HelpType = htKeyword OnExecute = actExecute end object actSortBySize: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Size' HelpType = htKeyword OnExecute = actExecute end object actSortByDate: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Date' HelpType = htKeyword OnExecute = actExecute end object actSortByAttr: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort by &Attributes' HelpType = htKeyword OnExecute = actExecute end object actReverseOrder: TAction Tag = 1 Category = 'Active Panel' Caption = 'Re&verse Order' HelpType = htKeyword OnExecute = actExecute end object actSrcOpenDrives: TAction Tag = 1 Category = 'Active Panel' Caption = 'Open drive list' end object actExchange: TAction Tag = 14 Category = 'Navigation' Caption = 'Swap &Panels' OnExecute = actExecute end object actQuickSearch: TAction Tag = 14 Category = 'Navigation' Caption = 'Quick search' OnExecute = actExecute end object actViewLogFile: TAction Tag = 23 Category = 'Log' Caption = 'View log file' OnExecute = actExecute end object actClearLogFile: TAction Tag = 23 Category = 'Log' Caption = 'Clear log file' OnExecute = actExecute end object actClearLogWindow: TAction Tag = 23 Category = 'Log' Caption = 'Clear log window' OnExecute = actExecute end object actQuickFilter: TAction Tag = 14 Category = 'Navigation' Caption = 'Quick filter' OnExecute = actExecute end object actEditPath: TAction Tag = 14 Category = 'Navigation' Caption = 'Edit path field above file list' OnExecute = actExecute end object actChangeDir: TAction Tag = 14 Category = 'Navigation' Caption = 'Change directory' OnExecute = actExecute end object actCmdLineNext: TAction Tag = 17 Category = 'Command Line' Caption = 'Next Command Line' Hint = 'Set command line to next command in history' OnExecute = actExecute end object actCmdLinePrev: TAction Tag = 17 Category = 'Command Line' Caption = 'Previous Command Line' Hint = 'Set command line to previous command in history' OnExecute = actExecute end object actAddPathToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Copy path to command line' OnExecute = actExecute end object actAddFilenameToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Add file name to command line' OnExecute = actExecute end object actAddPathAndFilenameToCmdLine: TAction Tag = 17 Category = 'Command Line' Caption = 'Add path and file name to command line' OnExecute = actExecute end object actGoToFirstFile: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on first file in list' OnExecute = actExecute end object actGoToLastFile: TAction Tag = 14 Category = 'Navigation' Caption = 'Place cursor on last file in list' OnExecute = actExecute end object actViewHistory: TAction Tag = 14 Category = 'Navigation' Caption = 'Show history of visited paths for active view' OnExecute = actExecute end object actViewHistoryNext: TAction Tag = 14 Category = 'Navigation' Caption = 'Go to next entry in history' OnExecute = actExecute end object actViewHistoryPrev: TAction Tag = 14 Category = 'Navigation' Caption = 'Go to previous entry in history' OnExecute = actExecute end object actOpenBar: TAction Tag = 16 Category = 'Window' Caption = 'Open bar file' OnExecute = actExecute end object actMinimize: TAction Tag = 16 Category = 'Window' Caption = 'Minimize window' OnExecute = actExecute end object actExit: TAction Tag = 16 Category = 'Window' Caption = 'E&xit' HelpType = htKeyword OnExecute = actExecute end object actDebugShowCommandParameters: TAction Tag = 18 Category = 'Tools' Caption = 'Show Command Parameters' OnExecute = actExecute end object actDoAnyCmCommand: TAction Tag = 18 Category = 'Tools' Caption = 'Select any command and execute it' OnExecute = actExecute end object actSetFileProperties: TAction Tag = 4 Category = 'File Operations' Caption = 'Change &Attributes...' OnExecute = actExecute end object actEditComment: TAction Tag = 4 Category = 'File Operations' Caption = 'Edit Co&mment...' OnExecute = actExecute end object actContextMenu: TAction Tag = 4 Category = 'File Operations' Caption = 'Show context menu' OnExecute = actExecute end object actOpen: TAction Tag = 4 Category = 'File Operations' Caption = 'Open' OnExecute = actExecute end object actShellExecute: TAction Tag = 4 Category = 'File Operations' Caption = 'Open' Hint = 'Open using system associations' OnExecute = actExecute end object actSymLink: TAction Tag = 4 Category = 'File Operations' Caption = 'Create Symbolic &Link...' HelpType = htKeyword OnExecute = actExecute end object actHardLink: TAction Tag = 4 Category = 'File Operations' Caption = 'Create &Hard Link...' HelpType = htKeyword OnExecute = actExecute end object actFileSpliter: TAction Tag = 4 Category = 'File Operations' Caption = 'Spl&it File...' HelpType = htKeyword OnExecute = actExecute end object actFileLinker: TAction Tag = 4 Category = 'File Operations' Caption = 'Com&bine Files...' HelpType = htKeyword OnExecute = actExecute end object actCheckSumCalc: TAction Tag = 4 Category = 'File Operations' Caption = 'Calculate Check&sum...' OnExecute = actExecute end object actCheckSumVerify: TAction Tag = 4 Category = 'File Operations' Caption = '&Verify Checksum...' OnExecute = actExecute end object actUniversalSingleDirectSort: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sort according to parameters' OnExecute = actExecute end object actCountDirContent: TAction Tag = 1 Category = 'Active Panel' Caption = 'Sho&w Occupied Space' OnExecute = actExecute end object actToggleFullscreenConsole: TAction Tag = 17 Category = 'Command Line' Caption = 'Toggle fullscreen mode console' end object actTreeView: TAction Tag = 16 Category = 'Window' Caption = '&Tree View Panel' OnExecute = actExecute end object actConfigFolderTabs: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of folder tabs' OnExecute = actExecute end object actConfigFavoriteTabs: TAction Tag = 5 Category = 'Configuration' Caption = 'Configuration of Favorite Tabs' OnExecute = actExecute end object actCloseTab: TAction Tag = 21 Category = 'Tabs' Caption = '&Close Tab' HelpType = htKeyword OnExecute = actExecute end object actCloseAllTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Close &All Tabs' OnExecute = actExecute end object actCloseDuplicateTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Close Duplicate Tabs' OnExecute = actExecute end object actCopyAllTabsToOpposite: TAction Tag = 21 Category = 'Tabs' Caption = 'Copy all tabs to opposite side' OnExecute = actExecute end object actLoadTabs: TAction Tag = 21 Category = 'Tabs' Caption = '&Load Tabs from File' OnExecute = actExecute end object actSaveTabs: TAction Tag = 21 Category = 'Tabs' Caption = '&Save Tabs to File' OnExecute = actExecute end object actSetTabOptionNormal: TAction Tag = 21 Category = 'Tabs' Caption = '&Normal' OnExecute = actExecute end object actSetTabOptionPathLocked: TAction Tag = 21 Category = 'Tabs' Caption = '&Locked' OnExecute = actExecute end object actSetTabOptionPathResets: TAction Tag = 21 Category = 'Tabs' Caption = 'Locked with &Directory Changes Allowed' OnExecute = actExecute end object actSetTabOptionDirsInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'Locked with Directories Opened in New &Tabs' OnExecute = actExecute end object actSetAllTabsOptionNormal: TAction Tag = 21 Category = 'Tabs' Caption = 'Set all tabs to Normal' OnExecute = actExecute end object actSetAllTabsOptionPathLocked: TAction Tag = 21 Category = 'Tabs' Caption = 'Set all tabs to Locked' OnExecute = actExecute end object actSetAllTabsOptionPathResets: TAction Tag = 21 Category = 'Tabs' Caption = 'All tabs Locked with Dir Changes Allowed' OnExecute = actExecute end object actSetAllTabsOptionDirsInNewTab: TAction Tag = 21 Category = 'Tabs' Caption = 'All tabs Locked with Dir Opened in New Tabs' OnExecute = actExecute end object actLoadFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load tabs from Favorite Tabs' OnExecute = actExecute end object actSaveFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Save current tabs to a New Favorite Tabs' OnExecute = actExecute end object actReloadFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Reload the last Favorite Tabs loaded' OnExecute = actExecute end object actResaveFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Resave on the last Favorite Tabs loaded' OnExecute = actExecute end object actPreviousFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load the Previous Favorite Tabs in the list' OnExecute = actExecute end object actNextFavoriteTabs: TAction Tag = 21 Category = 'Tabs' Caption = 'Load the Next Favorite Tabs in the list' OnExecute = actExecute end end object pmHotList: TPopupMenu Images = imgLstDirectoryHotlist left = 128 top = 88 end object pmDirHistory: TPopupMenu AutoPopup = False left = 184 top = 104 end object pmToolBar: TPopupMenu OnPopup = pmToolBarPopup left = 48 top = 152 object tbEdit: TMenuItem Caption = 'Edit' OnClick = tbEditClick end object tbDelete: TMenuItem Caption = 'Delete' OnClick = tbDeleteClick end object tbChangeDir: TMenuItem Caption = 'CD' OnClick = tbChangeDirClick end object tbSeparator: TMenuItem Caption = '-' Visible = False end object tbCut: TMenuItem Caption = 'Cut' Visible = False OnClick = tbCopyClick end object tbCopy: TMenuItem Caption = 'Copy' Visible = False OnClick = tbCopyClick end object tbPaste: TMenuItem Caption = 'Paste' Visible = False OnClick = tbPasteClick end end object pmContextMenu: TPopupMenu left = 40 top = 96 object mnuContextOpen: TMenuItem Action = actOpen end object mnuContextView: TMenuItem Action = actView end object mnuContextLine1: TMenuItem Caption = '-' end object mnuContextCopy: TMenuItem Action = actCopy end object mnuContextRenameOnly: TMenuItem Action = actRenameOnly end object mnuContextDelete: TMenuItem Action = actDelete end object mnuContextLine2: TMenuItem Caption = '-' end object mnuContextFileProperties: TMenuItem Action = actFileProperties end end object pmColumnsMenu: TPopupMenu left = 344 top = 144 object MenuItem2: TMenuItem Caption = '-' end end object pmSplitterPercent: TPopupMenu left = 312 top = 96 object mi2080: TMenuItem Tag = 20 Caption = '&20/80' OnClick = mnuSplitterPercentClick end object mi3070: TMenuItem Tag = 30 Caption = '&30/70' OnClick = mnuSplitterPercentClick end object mi4060: TMenuItem Tag = 40 Caption = '&40/60' OnClick = mnuSplitterPercentClick end object mi5050: TMenuItem Tag = 50 Caption = '&50/50' OnClick = mnuSplitterPercentClick end object mi6040: TMenuItem Tag = 60 Caption = '&60/40' OnClick = mnuSplitterPercentClick end object mi7030: TMenuItem Tag = 70 Caption = '&70/30' OnClick = mnuSplitterPercentClick end object mi8020: TMenuItem Tag = 80 Caption = '&80/20' OnClick = mnuSplitterPercentClick end end object pmDropMenu: TPopupMenu left = 384 top = 72 object miCopy: TMenuItem Caption = 'Copy...' OnClick = mnuDropClick end object miMove: TMenuItem Caption = 'Move...' OnClick = mnuDropClick end object miHardLink: TMenuItem Caption = 'Create link...' OnClick = mnuDropClick end object miSymLink: TMenuItem Caption = 'Create symlink...' OnClick = mnuDropClick end object miLine12: TMenuItem Caption = '-' end object miCancel: TMenuItem Caption = 'Cancel' OnClick = mnuDropClick end end object MainTrayIcon: TTrayIcon PopUpMenu = pmTrayIconMenu Icon.Data = { 267D000000000100040010100000010020006804000046000000202000000100 2000A8100000AE0400003030000001002000A825000056150000404000000100 200028420000FE3A000028000000100000002000000001002000000000004004 00000000000000000000000000000000000000000000BCA3A51A8182BB517E82 C1586E72B94F6D70B64F6C6DB34F6B6BB14F6A68AE4F6966AB4F6764A84F736D AB57837CB1677A72AB607B6D9E3EFEEDD506B7A4B60D4F6BDAE62653E6FE234B DEFE2046D7FE1D3FD1FE1A39CAFE1834C4FE142EBEFE1228B8FE0F23B2FE0D1C ABFE0A17A4FF06109EFE050C97FE594F997BCECFD296BEC6DBFEB1BAD9FE889A D9FF2F52D7FF193ED2FF1939CCFF1634C6FF132DBFFF1127B9FF0E22B3FF0314 AAFF444EB3FF9295C4FFB1B2CCFFC2C2CFF7D1D0D0ABD7D7D5FFD6D6D5FFD6D6 D5FFD9D9D4FF4963D0FF1738CCFF1634C6FF132DBFFF1127B9FF0E22B3FF848B C5FFDBDBD7FFD6D6D5FFD7D7D6FED7D7D6FFAFB5D15A6A87E1FB8B9DD6FFD9D7 D2FFD3D3D3FFD1D1D2FF3F58CBFF1634C6FF132DBFFF0B22B8FF9299C8FFD7D6 D4FFD3D3D3FFC1C2CEFF5D62B1FF6868B0D69AA7E3344B72EDF92C58E9FF375C DDFFBFC2D0FFD0D0D0FFAAB0CAFF0D2DC6FF132DBFFF3245BDFFCECECFFFD3D3 D1FF9A9DC2FF040F9EFF000697FF2B2DA1C3A3ADE1366D8CF0F9577AECFF3E62 E3FF6D83D6FFCECECCFFD7D6CCFF2741C3FF122CBFFF616FC0FFCDCDCCFFC4C4 CAFF0514A5FF0712A0FF070E9AFF3334A3C4A3ADE1366D8CF0F96988EEFF6482 E9FF6F86DEFFCDCCCAFFD1D0CAFF5C6DC7FF213AC4FF8991C4FFCBCBCAFF9EA2 C3FF1C29ADFF222CAAFF2B32A9FF5858B3C4A3ADE1366D8CF0F96888EEFF6684 EAFF7E92E0FFD8D7D5FFDCDBD6FF7686D1FF596CD3FF9DA4CEFFD6D6D6FFB8BB D0FF545EC1FF555DBDFF5359BAFF6B6CBCC4A3ADE1366D8CF0F96888EEFF6583 EAFFAFBAE1FFE5E5E5FFE6E5E1FF596FD7FF5C6FD3FF8690D2FFE5E5E5FFE9E8 E5FF5F69C0FF525ABDFF5157B9FF6B6BBBC498A4E72F6687F1F96887EBFFA7B4 E3FFE6E6E5FFE6E6E6FFA5AFDCFF5D72D8FF5D6FD3FF6371CEFFE0E0E3FFE6E6 E6FFDBDCE1FF7A7FC4FF484EB5FF605FB4C2D9D9DC9CD8DAE1FFEAE8E3FFE7E7 E6FFE7E7E6FFD5D7E2FF677BDBFF5F74D8FF5D6FD3FF5A69CFFF7681CBFFE6E6 E5FFE6E6E6FFEBEBE8FFE6E6E3FFD7D8DEF9E0E0E0ABE8E8E8FFE9E9E8FFEEED E9FFB6BFE0FF677FE0FF6076DCFF5F74D8FF5D6FD3FF5B6BCFFF5866CBFF6F79 C9FFDBDCE0FFEEEDEAFFE9E9E8FEE8E8E8FFCECCD36EAFBDE9FD9BADE7FE768F E6FF5F7AE5FF627BE0FF6176DCFF5F74D8FF5C6FD3FF5B6BCFFF5866CBFF5662 C6FF4F59C0FF777DC4FF9699CBFFB5B2CCDEFFF0D5098283BBCA718EEFFC6683 E8FB6A82E4FB687FE0FB667ADCFB6478D7FB6373D3FB6170CEFB5F6CCBFB5C66 C5FB5660C0FB555CBCFB6A6CBDF9998DB15200000000FFFFFF0399839924917C 962A907B962A8F7B942A8F7A942A8F79942A8E79942A8E78932A8E78922A8F77 922A8F77922A8E76912A9D83921F000000008000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF8001FFFF2800000020000000400000000100 2000000000008010000000000000000000000000000000000000000000000000 000000000000FFFFFF03FFFFFF07FFFFFF0BFFFFFF14FFFFFF09FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF0CFFFFFF1AFFFFFF1CFFFF FF1CFFFFFF17FFFFFF0AFFFFFF04000000000000000000000000000000000000 0000FFFFFF10E1D6D55362456CBA584273D6594374DD584175D3563F73D2563E 72D2553E71D2543D70D2543C70D2543B6ED2533B6ED2533A6DD2533A6DD25338 6BD252396BD252386AD252376AD2513669D253386AD5513262E6513262E85132 61E8503161E4533563CA89729187FFFFFF2BFCFCFC040000000000000000FFFF FF08948BB17F5263C1FF3E66E8FF315DEBFF2C58E7FF2B54E4FF2A51E1FF284E DDFF264BDAFF2448D7FF2345D4FF2242D0FF2140CDFF1F3DCAFF1E39C7FF1C36 C4FF1B33C1FF1A31BEFF192EBBFF172BB7FF1527B3FF1425B1FF1322AEFF121F ABFF101CA8FF141EA5FF191A92FF45357FE4FEF6EE3AFFFFFF0200000000FFFF FF22546BD1F12C5AEBFE2754E8FF224FE4FF224BE1FF2149DEFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0816A5FF0613 A2FF040F9FFF010A9BFF020A98FF0B139DFF453075C7FFFFFF0ECACACA4EDBDB DBE7C5C9D8FFC0C5D7FFB7BED6FF8598D7FF395DDCFF1842DFFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0615A5FF000C A0FF434BACFF9395C1FFB7B8CAFFBDBECFFFC7C6D1FDD6D6D6E3C8C8C858D7D7 D7FFD7D7D7FFD7D7D7FFD8D8D7FFDCDBD8FFE1DED5FFB3BAD4FF5873D6FF1940 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF081AABFF0F1DA8FF7077BCFFCECE D4FFE2E2DBFFDADAD8FFD8D8D7FFD7D7D7FFD7D7D7FFD4D4D4FFC8C8C858D5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD7D6D6FF9FA9 D1FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0B1FB0FF2D3BB0FFD7D8D9FFD6D6D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD3D3D3FFC7C7C758D3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD8D7 D4FFBBBFD2FF1F40CFFF193ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0B20B3FF5662B9FFD4D4D5FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD2D2D2FFC8C8C84BD1CF D0E9BBC3D9FFBDC2D4FFCCCDD1FFD8D7D3FFD4D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFB1B6CCFF193ACBFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0D24B6FF2E3FB6FFD3D4D5FFD2D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFD8D8D5FFC2C2CEFFB4B5CAFFB6B7CAFDD3D3D2DBFFFFFF05BAA4 AD75426DF1FF3461EBFF2E5AE8FF5874D4FFCECFD1FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD3D2D2FF8491CAFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0A21B4FFCECFD2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3 D2FFAAACC6FF1D259FFF070F9AFF030996FF181B9CF4FAEEE322FFFFFF04B9A2 AD734B75F2FF3B66ECFF315CE8FF2753E6FF2750DEFF96A3D1FFD1D1D0FFD0D0 D0FFD0D0D0FFD0D0D0FFCDCDCDFF2240C7FF1534C6FF1431C3FF132EC0FF112B BDFF1027BAFF737EC3FFD3D3D1FFD0D0D0FFD0D0D0FFD0D0D0FFD7D6D1FF5961 B3FF000B9DFF020C9CFF030B99FF000695FF161A9BF4FFF4E71FFFFFFF04B7A1 AD735F84F3FF4971EDFF3C65E9FF325BE5FF2B54E2FF2049DEFFB5BACEFFD0CF CEFFCECECEFFCECECEFFD2D2CFFF848FC1FF1130C7FF1431C3FF132EC0FF112B BDFF0F26B9FFB6B9CBFFCECECEFFCECECEFFCECECEFFD0CFCFFF6067B4FF0411 A2FF05109FFF030D9CFF030B99FF010795FF171A9BF4FFF4E71FFFFFFF04B7A0 AC736D8FF5FF6384EFFF5074EBFF4268E7FF365DE3FF2E55E0FF3256DAFFC8C9 CCFFCDCDCDFFCDCDCDFFCDCDCDFFC4C4C6FF1C39C5FF1532C3FF142FC0FF112A BDFF273BB8FFD4D3CDFFCDCDCDFFCDCDCDFFCECDCDFFBABBC6FF0412A4FF0714 A2FF06119FFF050E9CFF040C99FF030896FF191D9CF4FFF3E71FFFFFFF04B7A0 AC736D90F5FF6A8AF0FF6887EEFF5D7EEAFF4E71E6FF4164E2FF375ADDFFA7B0 D0FFCCCCCCFFCDCDCDFFCDCDCDFFCCCCCDFF364EC3FF1733C3FF152FC0FF1029 BDFF6A75BCFFD2D1CEFFCDCDCDFFCDCDCDFFD3D3CEFF444EAFFF0715A6FF0915 A4FF0914A0FF09129EFF0A119BFF0A1099FF2226A0F4FDF1E61FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF617EE7FF5372E3FF909D D3FFCCCCCAFFCACACAFFCACACAFFCACACAFF4B60C5FF213BC5FF1D37C2FF152E BFFF979DC1FFCDCDCBFFCACACAFFCACACAFFCCCCCAFF1626ACFF1220A9FF131F A7FF141EA5FF161FA2FF1920A2FF1D23A1FF3639A8F4F8ECE41FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FF94A1 D6FFCCCCCAFFCACACAFFCACACAFFCACACAFF6778CBFF3850CCFF324AC8FF293F C4FFB0B3C5FFCCCBCBFFCACACAFFCACACAFFC1C2C9FF2A38B4FF2935B1FF2C36 B0FF3039AFFF353DAFFF3D44B0FF4448B1FF595CB7F4EFE3E01FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF647FE5FF9EA9 D6FFD3D3D2FFD2D2D2FFD2D2D2FFD1D2D2FF7988D1FF5C70D5FF586BD2FF5163 D0FFADB0C5FFD4D3D2FFD2D2D2FFD2D2D2FFCBCCCFFF515CC1FF505AC0FF525B BEFF535BBDFF535ABBFF5257B9FF5054B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FFBAC0 D9FFD9D9D9FFD9D9D9FFD9D9D9FFD9D9D9FF7182D3FF5D71D6FF5D6FD3FF596B D2FF989EC6FFDDDCDAFFD9D9D9FFD9D9D9FFDDDCD9FF656FC2FF545EC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6781E3FFDBDC DEFFE2E2E2FFE2E2E2FFE2E2E2FFDDDDDDFF6175D5FF5D71D6FF5D6FD3FF5A6C D1FF737EC8FFE5E5E1FFE2E2E2FFE2E2E2FFE4E4E3FFB4B6CEFF4E59C0FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF637FE8FFB5BDD6FFE8E8 E7FFE6E6E6FFE6E6E6FFE8E8E7FFB5BAD4FF5B71D8FF5D71D6FF5D6FD3FF5B6D D1FF5A69CFFFD7D8DBFFE6E6E6FFE6E6E6FFE5E5E5FFEAE9E8FF737BC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6180EBFFA4B0DCFFE6E6E5FFE5E5 E6FFE6E6E6FFE6E6E6FFE7E6E3FF687BD7FF5E74D8FF5D71D6FF5D6FD3FF5B6D D1FF5B6ACFFFA6ACD1FFE7E7E6FFE5E5E5FFE6E6E6FFE5E5E5FFDDDEE1FF5E66 BAFF5159BDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EFE3E11FFFFFFF01B29F BC6E6A8DF6FF6586F1FF6584EDFF8097E4FFBDC4DDFFEBEAE5FFE5E5E5FFE6E6 E6FFE5E5E5FFE7E7E6FFB3BADAFF5F74DBFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF6270C9FFE2E1DFFFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E5 E4FF9296C9FF5D62B8FF4B51B6FF4A4FB4FF595BB8F4D3B9BA1BCDCDCC3CD2CF D6CFB5C0E0FFC2C8DCFFE0E0DFFFE7E7E6FFE6E6E5FFE6E6E6FFE5E5E5FFE5E5 E5FFE6E6E6FFDFDFDFFF6277D8FF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5968CDFF7681C9FFE5E5E4FFE5E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFEAE9E8FFD2D3D7FFB6B7CFFFB0B0CEFBD5D4D4B3D2D2D259E6E6 E6FFE8E8E6FEE8E7E7FFE7E7E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E7FFE1E1E3FF7085DAFF6076DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF9299CBFFEEEEE8FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8E7FFE8E8E7FFE2E2E2FFD2D2D258E6E6 E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE9E9E7FFD3D6 E0FF6D83D8FF6179DEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5360C9FF8B92C9FFE1E1E3FFE9E9E8FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE2E2E2FFD2D2D258E7E7 E7FFE8E8E8FFE8E8E8FFE7E7E7FFE7E7E7FFE8E8E8FFEAEAE6FF9BA8D8FF647E E2FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5E68C4FFC0C2D3FFECEC EBFFE8E8E8FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE3E3E3FFCECECE57E1E1 E1FFE1E1E3FFDEDFE0FFCDD2E1FFB5BFE2FF93A6E4FF6C86E3FF627DE6FF647E E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5660C4FF515BC0FF6B72 C1FF9498CAFFB8BAD2FFD1D1DAFFDEDFDFFEE1E1E2FFDBDBDBFC00000000EFE3 E3386779D2FF6385F2FE6485F0FF6585EDFF6684EAFF6682E8FF647FE5FF647D E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5761C4FF555FC1FF535C BFFF525ABDFF4F55BAFF4B51B7FF494FB7FF55468DEAFFFFFF0900000000FFFF FF1D837DAED37395F7FF6786EFFE6786ECFF6684EAFF6581E8FF647FE5FF637D E3FF627CE0FF6179DEFF6077DCFF5F74DAFF5E74D8FF5D71D6FF5C6ED3FF5B6D D1FF5B6ACEFF5969CDFF5867CBFF5764C9FF5662C5FF5761C4FF555FC1FF535C BFFF535BBDFF5157BAFF4E53B7FE6562ADFFA18DA574FFFFFF0400000000F6F5 F604CFC0C3428D85AFC27C84CAF46874C6FF6874C5FF6A74C4FF6C75C2FF6C74 C2FF6C73BFFF6B71BEFF6A6FBCFF696EBBFF696DB9FF686BB8FF676AB6FF6669 B5FF6667B3FF6566B2FF6464B1FF6462AEFF6261ACFF5C5AA9FF5B58A7FF5A57 A6FF5B56A4FF655EA5FF7F76ABEF95819C93FFFFFF1300000000000000000000 0000FBFAFB02FFFFFF11FFFFFF2AFFFFF937D4C5C340D4C5C340D4C5C340D4C5 C340D4C5C340D5C6C340D5C6C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6 C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6C540D5C6C440D5C7C540D5C7 C540D5C6C440EBE2DF3BFFFFFF2CFFFFFF0E0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000E0000007C000 0001800000008000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000800000008000000080000001C0000003FFFFFFFF280000003000 0000600000000100200000000000802500000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF01FFFFFF03FFFF FF04FFFFFF07FFFFFF0BFFFFFF08FFFFFF04FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF05FFFFFF0BFFFFFF0FFFFFFF10FFFFFF10FFFFFF10FFFF FF0EFFFFFF09FFFFFF04FFFFFF02000000000000000000000000000000000000 0000000000000000000000000000FFFFFF01FFFFFF0AF0EBEC1FD4CAD332CCC3 D03BD4CDD947D9D3DD53D4CDD948CCC4D23BCAC1D039CAC1D039CAC1D039C9C1 D039C9C1D039C9C1CF39C9C0D039C9C1CF39C9C0CF39C9C0CF39C9C0CF39C9C0 CF39C9C0CF39C9C0CE39C9C0CE39C8C0CE39C9BFCE39C9BFCE39C9BFCE39C9BF CE39C9C0CE3ACEC6D340D8D1DB53DBD4DD61DCD5DE64DCD5DE64DCD5DE63DAD2 DC5DD3CBD64BCDC4D039D7CFD829FBFAF916FFFFFF0700000000000000000000 00000000000000000000FFFFFF02FFFFFE12D8CFD63F9B8CA88B675687CC5243 81E7514688EF504586F2504588EE4F4487EB4E4286EB4E4285EB4D4185EB4C40 84EB4C3F83EB4B3F82EB4B3E82EB4B3D80EB4B3C7FEB4A3C7FEB4A3B7EEB4A3A 7DEB49397CEB49397CEB49387AEB48387AEB48377AEB483679EB483578EB4835 77EB473476EB473476EC473274F2442C6CFA442C6CFA442C6BFA432B6AFB432A 6AFA442D6CF04B3370DE675284B6A394AE76E1D9DE37FFFFFF0EFFFFFF020000 00000000000000000000FFFFFF0BD1CAD545776FA3BB5157ABFF4F6EDEFF436C F0FF3963EEFF3661EBFF345EE9FF345BE7FF3359E4FF3158E2FF3056E0FF2F54 DEFF2E51DBFF2D4FDAFF2C4ED8FF2C4BD6FF2A49D3FF2A48D1FF2947D0FF2844 CDFF2742CBFF2640CAFF253FC8FF253CC5FF233BC3FF2239C2FF2237BFFF2135 BDFF2033BBFF1F31B9FF1E2FB7FF1D2EB5FF1C2CB4FF1B2AB1FF1B28AFFF1926 ADFF1C27ADFF232BA8FF292894FF362577FF715C8AADDAD1D83EFFFFFF0C0000 000000000000FFFFFF02DEDAE7237B7BB79D4D64CCFF3B6AF5FF2655EAFE2552 E6FF224FE3FF204CE1FF2049DFFF1F47DDFF1E45DBFF1C42D8FF1B41D5FF193F D3FF183DD1FF173BCFFF1638CDFF1636CBFF1534C9FF1433C6FF1331C4FF122F C2FF112DC0FF102ABEFF0F28BCFF0F26B9FF0E25B7FF0D23B5FF0B21B3FF0A1F B1FF091CAFFF081AACFF0818A9FF0716A7FF0615A5FF0513A3FF0411A1FF030E 9FFF010C9CFF00099AFF000699FE09129FFF271F83FF7664939CEDE9F024FFFF FF0100000000BAB9B309B2B6D9474D5FC2F14370F4FF2957EAFE2452E9FF1D4C E6FF1D4BE4FF1F4AE2FF214ADFFF2149DDFF1F46DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0817A6FF0715A4FF0612A2FF010D 9FFF00079CFF000298FF000597FF000695FE09119CFF2C1F7AEFC4C1CF4DB0B0 AF0CB0B0B016D4D4D4A5D1D2DABD9DA8D5FF98A9E0FF92A4DCFF899CDCFF758D DCFF5876DBFF355ADDFF1B46DFFF1A44DEFF1E45DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0716A6FF000EA2FF000C9FFF1E28 A3FF464DAEFF6469B5FF787CB9FF8285BCFF8184BBFE8E8BB7FFD3D3D6C4D1D1 D1A4B1B1B125D5D5D5FFD9D9D9FFDDDCD8FEDEDCD7FEDDDBD5FFDCDBD5FFD4D5 D6FFC4C8D7FFAEB7D7FF8A9BD7FF4C6AD6FF1B43DAFF1A41D8FF1C43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0414A7FF0615A4FF3F49ADFF8489C1FFABAE CBFFC2C3D1FFD4D5D5FFDDDDD8FFDFDFD9FFE0E0DBFEE0E1DCFEDADADAFFD4D4 D4FFB0B0B023D4D4D4FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD8D7 D7FFD9D9D7FFDBDAD7FFD5D5D5FFC3C8D7FF97A4D4FF3858D3FF173ED6FF1B40 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0515A9FF2C38ACFF969AC6FFC5C6D3FFD7D7D6FFDDDC D9FFDAD9D8FFD8D8D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD4D4 D4FFB0B0B023D3D3D3FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD8D8D6FFD4D5D5FFC3C6D5FF687DCFFF183D D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF091AABFF636BB9FFC6C8D4FFD5D5D5FFD9D9D7FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD3D3 D3FFB0B0B023D2D2D2FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D5D5FFD2D3D6FF8895 CCFF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0C20 B2FF0C1FAFFF888EC1FFD6D6D8FFD6D6D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD2D2 D2FFB0B0B023D2D2D2FFD4D4D4FFD3D3D3FFD3D3D3FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D3FFD6D6 D6FF99A3CBFF1438CFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0A1F B0FF989DC4FFD8D8D8FFD4D4D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4D4FFD1D1 D1FFB0B0B023D4D4D4FFD5D5D5FDD3D4D6FFD3D3D5FFD1D2D3FFD2D3D3FFD3D3 D3FFD4D4D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D5FF818EC7FF1436CDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0A20B3FF828A C0FFDAD9D8FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4 D3FFD4D4D4FFD3D3D3FFD2D2D3FFD3D3D4FFD2D3D4FFD2D2D4FFD5D5D5FCD4D4 D4FBB5B5B50CC5C4C469AAA6BDB46989E5FF6583E0FF728AD8FF909FD0FFB6BC CFFFCBCCD2FFD1D2D2FFD3D3D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD1D1D3FF5B6EC6FF1434CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0B21B5FF5864BAFFD8D8 D7FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2 D2FFCDCED3FFB4B5CBFF8084BAFF585CACFF3F43A3FF4144A3FFB1ACBF9DC1C1 C15B00000000FDF6F71A9B93BD914470F4FF3361EEFF2C5BECFF2453EBFF2651 E3FF5673D4FFA2ADD1FFCBCDD2FFD2D2D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFD2D2D1FFBFC2CDFF2A46C7FF1434C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0D25B8FF2135B6FFC6C8D2FFD1D1 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD2D2D2FFCDCED1FF9FA2 C5FF3F46A8FF000899FF000197FF000395FF000193FF060B97FFA59AC26CFFFF FF0AFFFFFF01F0EAEC209E96BD934F78F3FF3E69EEFF3763EBFF315CE9FF2C57 E7FF214EE6FF234EDEFF7389D5FFC1C4D0FFD1D1D0FFD0D0D0FFD0D0D0FFD0D0 D0FFD0D0D0FFD1D0D0FFCECED0FF8792C5FF1232C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0921B7FF8B93C5FFD0D0D1FFD0D0 D0FFD0D0D0FFD0D0D0FFD0D0D0FFD0D0D0FFD2D2D1FFC4C5CDFF6A71B6FF0814 9EFF00069CFF020C9BFF030B99FF020997FF000694FF0A0F98FFA79CC270F9F8 F910FFFFFF01F0EAEC20A098BD935A81F3FF4770EEFF3F68ECFF3861E9FF315C E7FF2D57E4FF2751E3FF1C47DFFF667ED3FFC3C6CFFFD0D0CFFFCFCFCFFFCFCF CFFFCFCFCFFFCFCFCFFFD1D0CFFFBBBECBFF364FC4FF1232C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF0D25BAFF2F41B8FFC5C6CFFFD0D0CFFFCFCF CFFFCFCFCFFFCFCFCFFFCFCFCFFFD1D1CFFFC4C5CCFF5E65B4FF000D9FFF020E 9FFF040F9DFF030C9BFF020B99FF020997FF000694FF0B1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39ABD93698CF5FF557BEFFF4A71EDFF4169EAFF3962 E8FF335BE5FF2E56E2FF2951E1FF1D46DDFF7D8FD1FFCBCCCFFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFC7C8CCFF7582C2FF0C2DC8FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF061EB9FF7A83C1FFCACBCEFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFCACACEFF747AB8FF020FA1FF0411A2FF0511 A0FF040F9DFF030D9BFF030B99FF020997FF000794FF0C1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F5FF6587F1FF5B7EEEFF4F74EBFF446B E9FF3D63E6FF365CE3FF3057E1FF2950DFFF2E52D9FFACB3CEFFCCCCCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECDCCFF9EA5C4FF1A37C5FF1432C5FF1531 C3FF132FC0FF122CBEFF112ABCFF0F27B8FFA9ADC7FFCECECDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFA7AAC4FF1421A6FF0412A3FF0713A2FF0611 9FFF050F9DFF040E9BFF040C9AFF040A98FF020895FF0D1299FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8BF2FF6788F0FF6182EEFF5779 EBFF4C6FE8FF4267E5FF3B60E2FF355AE0FF284EDEFF6C81CFFFCACBCFFFCDCD CCFFCCCCCCFFCCCCCCFFCCCCCCFFCECECCFFB2B6C8FF3A52C1FF1230C5FF1631 C3FF152FC0FF132DBEFF0E27BCFF3547B8FFB9BCCAFFCECECDFFCCCCCCFFCCCC CCFFCCCCCCFFCDCDCDFFC5C6CBFF6269B4FF000EA5FF0916A4FF0814A2FF0712 A0FF06109EFF060F9CFF060E9AFF070D99FF060B96FF11179BFFA89DC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6685 EDFF6080EAFF5778E8FF4C6EE5FF4465E2FF3B5DDFFF3E5ED9FFC7C9CEFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECECDFFBDBFC9FF586AC0FF1230C6FF1733 C3FF1631C0FF152EBFFF0D26BDFF5664BBFFBFC1CAFFCECDCDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFBDBECAFF1E2BA9FF0917A7FF0A17A6FF0A16A3FF0A15 A1FF0A149FFF0B139EFF0B139CFF0C129BFF0C1299FF191E9EFFA99EC370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6988EFFF6887 EEFF6786EBFF6583EAFF617FE8FF5A78E6FF5170E2FF4163E0FFB1B7CEFFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC1C2C8FF6B7AC1FF1835C8FF1E39 C4FF1C36C2FF1A33C0FF0F29BDFF717DBEFFC4C4C9FFCCCBCBFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFABAFC4FF0617A9FF101EA9FF101DA7FF111DA5FF111C A4FF121BA3FF131CA1FF151CA0FF181E9FFF191F9FFF272BA4FFABA0C370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF637EE5FF5B77E4FFA7B0CFFFC8C8 C9FFC9C9C9FFC9C9C9FFC9C9C9FFC9C9C9FFC5C5C6FF838DC3FF243FCBFF2942 C8FF263FC5FF243CC3FF1831C1FF838BC0FFC5C5C7FFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC7C7C8FF8F95BFFF1221ADFF1B29ACFF1B28ABFF1D28AAFF1E29 A9FF202AA8FF232BA7FF262DA7FF2A31A8FF2F34A8FF3F44AEFFAEA3C570F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607BE5FFAAB1D1FFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC9C9CAFF8F99C8FF3952D0FF3D54 CCFF3950CAFF364CC7FF2A40C5FF949AC5FFCACACBFFCCCCCBFFCBCBCBFFCBCB CBFFCBCBCBFFC9CACBFF9398C2FF2533B4FF2E3BB4FF303BB3FF323CB2FF353E B2FF3941B2FF3D45B2FF4349B3FF484DB4FF4B4FB4FF5659B8FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607AE5FFB1B7D2FFD0D0 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFCACBCEFF919BCAFF566BD7FF596C D4FF5668D2FF5265D0FF495CCEFF959CC6FFCDCDCEFFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFCFCFD0FF9EA2C6FF444FBEFF4C57BFFF4E58BDFF5058BCFF5159 BCFF5259BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF617BE4FFC6C9D2FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D6D5FFCCCDD2FF8D99CEFF596FD8FF5D71 D6FF5D70D3FF5C6ED2FF5669D2FF939BC8FFCFCFD2FFD6D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFBABCCEFF505BC3FF5660C2FF545EC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF637FE7FF7689D8FFD7D8DBFFDBDB DBFFDBDBDBFFDBDBDBFFDBDBDBFFDCDCDBFFCBCDD7FF7E8CCFFF5A70D8FF5D71 D6FF5D6FD3FF5C6ED2FF5769D2FF818AC7FFCFD0D7FFDBDBDBFFDBDBDBFFDBDB DBFFDBDBDBFFDBDBDAFFCDCED6FF5F69C0FF545EC2FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF607CE6FFA5AFD7FFDEDEE0FFE0E0 E0FFE0E0E0FFE0E0E0FFE0E0E0FFE2E2E0FFC7CADAFF6A7BD0FF5C71D8FF5D71 D6FF5D6FD3FF5C6ED2FF596BD2FF6D78C7FFCDCED8FFE1E1E0FFE0E0E0FFE0E0 E0FFE0E0E0FFE1E1E0FFDADADEFF8C92C6FF4F5AC1FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6683E9FF627FE8FF7389DDFFD6D8DFFFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E3FFB7BDD7FF5A70D7FF5E72D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6CD1FF5969CDFFBDC1D2FFE4E4E4FFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFC6C8D7FF5B65BFFF525CC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6381EAFF6781E2FFB5BDDAFFE4E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFDDDEE3FF919CD3FF5970D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5C6DD1FF5566D0FF969DC8FFE0E1E3FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE1E2E4FF9EA3CAFF525BBDFF525BBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6282EBFF6783E4FFA6B1DCFFE1E2E3FFE6E6E5FFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E5FFCDD1DEFF6679D5FF5E73D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5A6ACFFF6572C8FFCFD1DAFFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E6FFE7E7E6FFDBDCE0FF8F95C8FF515ABBFF5058 BDFF535ABBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB2A8C86FF9F8 F910FFFFFF01EFEAED20A39BC1937092F5FF6A8AF2FF6989F0FF6888EFFF6686 EFFF6081ECFF758DE1FFB1BADEFFE0E1E3FFE6E6E5FFE6E6E6FFE5E5E5FFE6E6 E6FFE5E5E5FFE6E6E6FFE2E3E5FF99A3D4FF5A70DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5666CDFF99A0C9FFE4E4E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFDBDCE0FF9EA2CBFF5D64 BBFF4B52BAFF5056BAFF5157B9FF5156B7FF4F53B5FF575BB9FFA596B775F7F5 F71000000000FDF6FF159D99CE8E6B8FF6FF6487F4FF6284F2FF6283EEFF768F E3FFA1AFDDFFCCD0E0FFE4E4E4FFE7E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE5E5E5FFC5C8D9FF6277D9FF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5A6ACEFF5F6EC9FFC9CBD5FFE6E6 E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFE2E2E3FFC3C5 D7FF9093C3FF5E63B5FF4A50B5FF484EB5FF484CB4FF5256B8FF9580A473FFFF FF05B4B4B413D7D6D793C3C2D6C9A3B4E5FFA7B5E0FFB2BCDEFFC5CBDEFFD5D9 E3FFE0E1E4FFE6E6E5FFE6E6E6FFE5E5E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5 E5FFE6E6E6FFDCDDDFFF7687D5FF5E74DCFF6074DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5867CDFF737EC7FFE1E1 E0FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6 E5FFDFDFE3FFD3D3DEFFBEC0D2FFABADCBFF9B9DC7FF9799C8FFC3BDC8BDD4D3 D487B2B2B222E0E0E0FFE4E4E5FCE1E2E5FFE2E3E5FFE3E3E4FFE5E5E5FFE6E6 E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6 E6FFE4E4E2FF8897D4FF5F76DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5867CBFF888F C6FFE8E8E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE3E3E4FFE1E1E3FFE1E1E3FFE4E4E4FBDFDF DFF8B2B2B223E1E1E1FFE7E7E7FFE7E7E6FEE7E7E6FFE7E7E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E7 E5FF8E9CD5FF6079DEFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 C9FF8C93C8FFE8E8E4FFE7E7E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E6FFE7E7E6FFE7E7E6FEE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE6E7E7FFE1E1E2FF8797 D5FF6079E0FF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF888EC5FFE3E3E2FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E7FFE5E5E7FFC9CCDCFF788BDAFF617B E1FF627ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5562C5FF7179C3FFCBCCD9FFE6E6E7FFE8E8E7FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE1E1 E1FFB2B2B223E2E2E2FFE8E8E8FFE8E8E8FEE8E8E8FFE8E8E8FFE8E8E8FFE9E9 E8FFE9E9E8FFE7E7E6FFE1E2E7FFD3D6E3FF99A7D9FF657EE1FF627CE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF545FC4FF5A64C2FF959AC9FFD0D1DCFFE1E1E5FFE7E7 E6FFE9E9E8FFE9E9E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FEE8E8E8FFE2E2 E2FFB2B2B223DFDFDFFFE5E5E5FEE4E5E6FFE5E5E5FEE2E3E4FFDEDFE5FFD9DC E6FFD0D5E5FFBDC6E2FF95A5DEFF6B84E2FF607CE6FF647DE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF555FC3FF505AC1FF5D66BFFF8C91C6FFB6B8 D2FFCACCDBFFD6D6DFFFDCDDE1FFE2E3E4FFE3E4E4FEE5E5E5FFE4E4E4FEDEDE DEFDB1B1B114D7D7D79CD3D1DAC0AAB1D5FFACBAE8FEA5B4E3FF97A9E3FF879C E2FF718BE3FF6180E9FF607FEAFF6480E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF525CC0FF4D56BEFF4F57 BBFF6268BAFF787CBEFF8B8EC3FF9A9DC9FF9B9ECAFEA09CBEFFD5D3D8BAD4D4 D4950000000000000000BBB4CF546367B2FF6D91FCFF6183F1FE6384F0FF6484 EFFF6585ECFF6684EAFF6683E9FF6681E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF545EC0FF545CBFFF535B BDFF5057BBFF4D54B9FF4B51B8FF474DB4FE4E54BBFF50418BF9D5CFE2450000 000000000000FFFFFF06D8D1DA3B7B6E9CCA7B8FE1FF6C8FF6FE6686EFFE6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF647FE6FF647DE4FF637DE2FF627C E0FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5D72D7FF5C70 D5FF5C6FD3FF5B6DD2FF5B6CD1FF5B6ACFFF5A6ACDFF5968CCFF5867CBFF5865 C9FF5764C8FF5663C5FF5661C4FF5660C3FF555FC2FF545EC0FF535CBFFF535B BDFF5259BBFF5056B9FF4D53B7FE585EBEFF6460ADFF7B6895AEE7E2E929FFFF FF0300000000FFFFFF02F8F4F419BBAEBE6A7E77A7E07B89D4FF7C9AF7FF6D8D F4FF6688F1FF6587F0FF6585EFFF6986EDFF6A88ECFF6A86EBFF6A85EAFF6984 E7FF6882E6FF6881E4FF677FE3FF667EE2FF667DE1FF657CDFFF657ADEFF6378 DCFF6377DAFF6276D9FF6275D7FF6273D6FF6172D4FF6071D3FF5F6FD2FF5F6D D0FF5E6CCFFF5C6BCCFF5A67CAFF5561C7FF5460C6FF535FC4FF525DC3FF525C C1FF565FC1FF6269C5FF7279CBFF6F6AADFF776491D3C4B8C650FCFAFA0E0000 00000000000000000000FFFFFF05F9F7F620BFB2C05D978DB2A47973A9DF6F6C ABFC6968AAFF6A68AAFF6967A9FF6B68A8FF6B68A7FF6B67A7FF6B66A7FF6B66 A5FF6A65A4FF6A65A4FF6A63A3FF6963A3FF6862A2FF6862A1FF6861A0FF6860 9FFF675F9EFF675F9EFF675E9DFF675D9CFF665D9CFF665C9BFF655B9AFF655A 99FF645A98FF645997FF635796FF615595FF615494FF605393FF605392FF6052 91FF625392FF65538DFF6F5B8BEA917F9EAEC0B2BF56FEFDFC17FFFFFF020000 0000000000000000000000000000FFFFFF04FFFFFF10DBD1D827C1B6C745C5BE D157B3A8BB62A696AA66A898AB66A797AB66A797AB66A797AA66A797AB66A797 AA66A796AA66A796AA66A796AA66A796AA66A696AA66A696A966A695A966A695 A966A695A966A695A866A695A866A694A866A694A866A694A866A694A866A694 A766A594A766A593A766A594A766A694A766A693A766A593A766A593A666A593 A666A593A665B5A7B95FC1B4C351DDD3D831FFFFFF11FFFFFF03000000000000 00000000000000000000000000000000000000000000FFFFFF02FFFFFF07FFFF FF0AFFFFFA0CF6EFEA0CF7F1EB0CF7F1EB0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1 EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F2EC0CF7F2 EC0CF7F2EC0CF7F2EC0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2 ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F3ED0CF8F3ED0CF8F3EE0CF8F2 ED0CF8F3EE0CFFFFFF0BFFFFFF09FFFFFF05FFFFFF0100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F8000000001FFFFFE00000000007FFFFC00000000001FFFFC00000000001 FFFF800000000000FFFF800000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF800000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF800000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFC00000000001FFFF800000000000FFFF800000000001 FFFFC00000000001FFFFE00000000003FFFFF80000000007FFFFFFFFFFFFFFFF FFFF280000004000000080000000010020000000000000420000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F7F7FA01FBFBFC04FCFCFC05FBFB FD03F6F6F90100000000F7F6FA0100000000F6F6F901F6F6F901F6F6F901F7F6 F901F6F6F901F6F6F901F7F6F901F6F6F901F7F6F901F6F5F901F6F5F901F6F5 F801F6F6F901F6F6F901F6F6F901F5F5F801F6F5F801F6F5F801F6F6F901F6F6 F901F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801FCFCFD04FCFC FD07FDFDFD08FCFCFD08FCFCFD08FDFDFD08FDFDFD08FCFCFC07FCFCFD04F5F4 F701000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FBFA FB01FBFBFC04FCFCFD0EFAF9F914F4F0F117F0EDF01BF4F1F325F4F1F32BF4F1 F324F1EDEF1BEEE9ED16EFEAED16EEEAED16EDE9EC15EFEAED16EDE9EC15EFEB ED16EFEAED16EFEBED16EFEAED16EEEAEC16EFEAED16EFEAED16EFEAED16EFEA ED16EFEAED16EFEAED16EEE9EC16EEEAED16EFEAED16EFEAED16EDE9EC15EFEA ED16EEEAED15EFEBEE16EFEBEE16EFEBED16EFEBEE17F2EEF01BF4F1F327F6F3 F533F5F3F438F5F3F438F5F3F438F5F3F438F5F3F438F4F2F333F4F2F326F4F1 F41AFBF9F913FCFCFC0DFBFBFB05F9F8F9020000000000000000000000000000 0000000000000000000000000000000000000000000000000000FDFDFD02FBFB FC0CF8F7F822E9E5E83ED5C8C95AA289927090748A80977C908A93778A979980 92879073897E8D6F867A8D6F867A8D70867A8D6F867A8D70867A8D70867A8C70 86798D70867A8D7086798D70857A8D70857A8D7085798D70857A8E6F867A8E6F 867A8E6F867A8E70867A8D6F857A8D70867A8D70867A8C6F867A8D7086798D70 857A8C70867A8D7086798D71867A8D71867A8D70867A92768B80977B908E9477 89A094788AA795788BA794778AA794788AA795788AA6917486A194788C8EA48E A275D7CACD58E4DEE53DF4F2F428FBFBFC16FAFAFB0600000000000000000000 00000000000000000000000000000000000000000000FCFCFD02F9F9F912F1EF F234C6BCCB696A4E72C4412B68F63B2E74FD48448DFD484793FE474693FD4645 92FE454391FE454290FE444190FE44408FFE443F8DFE433E8DFE433E8CFE423D 8BFD423C8AFE423B8AFE413B88FD413A87FE413986FE403985FE403785FE3F37 84FE3F3683FE3F3582FE3E3481FE3D3480FE3D3380FE3D337FFE3C327EFD3C31 7DFE3C317CFE3B307BFE3B2F7BFE3B2E7AFD3A2D79FE3A2C79FE3A2B78FD392A 77FE392A77FE392976FE382875FE382874FE382773FE372771FE372672FE2F16 59FD2B0C52FD4A2B63D7AB9CB085E0DAE14DF7F7F921FCFCFC09000000000000 00000000000000000000000000000000000000000000FAFAFB0DEFEDF034A699 B084493B7BEF6C79C9FD4C6EE1FD3E67EAFD355EE8FE325CE6FE3059E4FD2E57 E2FE2E55E1FE2D53DFFE2C52DEFE2B51DCFE2A50DAFE294DD8FE284CD7FE284A D5FD2748D4FE2647D2FE2645D0FD2544CFFE2543CEFE2442CCFE2340CBFE233F C9FE223DC7FE213CC6FE203AC4FE1F38C2FE1F37C1FE1E35BFFE1E34BEFD1D33 BCFE1C31BBFE1B30B9FE1B2EB8FE1A2DB6FD192BB4FE192AB2FE1828B1FD1727 AFFE1726AEFE1625ACFE1523AAFE1522A9FE1420A7FE131FA6FD121DA4FE1923 A6FD1C219EFD34339BFD4C3A7DFD553563CACCC3D055F8F7F921FBFAFB060000 000000000000000000000000000000000000F7F7F904F6F5F71FBFB7CC694946 93F76A8BF0FD315DE9FD2B57E6FE2854E5FE2550E3FE234EE0FF224CDFFE2149 DDFF2047DCFF1F46DAFF1F44D8FF1D43D6FF1D41D4FF1C40D3FF1A3ED1FF1A3D CFFE193BCEFF183ACCFF1839CBFE1737C9FF1736C7FF1635C6FF1533C4FF1532 C3FF1430C1FF132EBFFF122CBDFF112ABBFF1129BAFF1027B8FF0F26B7FE0E25 B5FF0D23B3FF0D22B2FF0C20B0FF0B1FAFFE0B1DACFF0A1BAAFF0A1AA9FE0918 A7FF0817A6FF0816A4FF0614A2FF0613A1FF05119FFF04109EFF040E9CFF030C 9AFE030B99FE000695FE070F9BFC38318AFD4F3265CDDCD6DE4DFAFAFA16F5F5 F70200000000000000000000000000000000FAFBFC0BD8D5E33C4A4592D95B82 F2FD315EEAFD2D59E8FE2A56E6FE2753E5FE2451E3FE234FE1FE214CE0FE2049 DEFE2048DDFE1F47DBFE1E44D9FE1D43D7FE1C42D5FE1C41D4FE1A3FD2FE1A3D D0FE193CCFFE183ACDFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F26B8FE0E25 B6FE0D23B4FE0D22B3FE0C20B1FE0B1FB0FE0B1DADFE0A1BABFE0A1AAAFE0918 A8FE0817A7FE0816A5FE0614A3FE0613A2FE0511A0FE04109FFE040E9DFE030C 9BFE020B9AFE020A98FE010895FE050A96FC302A8EFDA395AF87F3F1F429F8F8 FA05000000000000000000000000B6B6B608E2E2E419C2C4E05D4B69D7F65278 EDFD315EE9FE2E5AE8FE2956E6FF2652E4FD2350E2FF224DE0FF214BDFFD204A DDFF2049DCFF1E46DAFF1E44D9FF1D43D7FF1C42D4FF1C40D3FF193FD1FF1A3D D0FD193BCEFF173ACCFF1839CCFD1736C9FF1735C8FF1534C6FF1533C5FF1532 C4FF132FC2FF122EBFFF112BBDFF112ABBFF1129BAFF1026B8FF0F26B8FD0E24 B5FF0C23B3FF0C22B2FF0B20B0FF0B1FB0FD0A1DACFF091AABFF0A1AAAFD0818 A8FF0817A6FF0816A4FF0614A3FF0613A2FF0511A0FF04109FFF040E9DFF040C 9BFF030C9AFE040C99FF060B97FE060894FE1F229EFD3C2369DFD8D5DB40D2D2 D312B2B2B20300000000A6A6A605BDBDBD60C8C8C872B2B4CDA98597D5FD6B87 DEFE6D87DFFE6985DEFF4A6EE2FE3F65E1FD3860E0FF3158DEFF2850DEFD214A DDFF1F48DDFF1E46DAFF1E44D8FF1D43D6FF1C42D4FF1C40D4FF1A3FD2FF1A3D D0FD193CCFFF183ACDFF1839CCFD1737CAFF1735C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABBFF1128BBFF1027B9FF0F26B8FD0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FD0B1DADFF0A1AABFF0A1AAAFD0817 A8FF0817A7FF0816A5FF0614A3FF0512A1FF0814A0FF111BA0FF1821A2FF2027 A2FF252CA3FF3C42A8FE4F53ABFE4C4FA5FE5052A6FD564D8EFDC8C7C4A7C0C0 C07BB6B6B62D00000000A1A1A10CCFCFCFF7D8D8D8FCD8D8D6FCD8D8D7FED9D8 D6FED8D7D5FED9D8D6FED9D8D6FFD1D4D9FEBEC3D4FFA3ADD0FF7187D2FE3A5E DCFF274EDCFF2148DAFF1D44D9FF1D43D6FF1C42D4FF1B40D4FF1A3FD2FF193C CFFE193BCFFF1839CCFF1838CCFE1737CAFF1736C8FF1535C7FF1433C5FF1432 C4FF1330C1FF132EC0FF122BBEFF1129BCFF1128BBFF1027B9FF0E26B7FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1EB0FE0A1CADFF091BABFF0A1AA9FE0918 A8FF0817A6FF0917A5FF0C19A4FF161DA4FF3840AAFF7E82B9FFACAEC8FFC6C7 D4FFD6D7D6FFD8D8D5FFD8D9D7FFD9D9D8FEDADAD9FEDCDBD9FDD9D9D9FCD8D8 D8FDC0C0C07400000000A1A1A10CCFCFCFF3D6D6D6FCD5D5D5FDD6D6D6FED6D6 D7FED5D5D6FED6D6D7FED4D5D6FED4D5D6FDD5D6D7FED8D9D9FED9D9D7FDC7C9 D0FE8596D2FE4A67D6FE2C4FD7FE1E44D6FE1C42D4FE1C41D3FE1A3FD2FE1A3D D0FD193CCFFE183ACDFE1839CCFD1737CAFE1735C8FE1635C7FE1532C5FE1532 C4FE1430C2FE132EC0FE112CBEFE112ABCFE1129BBFE1027B9FE0F26B8FD0E25 B6FE0D22B4FE0D22B3FE0C20B1FE0B1FB0FD0B1DADFE0A1BABFE0A1AAAFD0919 A8FE0D1CA6FE2530AAFE4B54B2FE9FA3C3FED9D9D8FEDDDDDCFED6D7D7FED5D5 D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D5FDD6D6 D6FDC0C0C07300000000A1A1A10DCFCFCFF5D5D5D5FDD5D5D5FDD6D6D6FED6D6 D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FDD6D6D6FED5D5D5FED5D5D6FDD4D4 D6FED4D5D6FECCCED6FE909DCCFE3C5CD5FE2549D4FE1C41D3FE1A3FD1FE193D D0FD193BCEFE1739CCFE1839CBFD1636CAFE1635C8FE1535C7FE1532C4FE1532 C3FE142FC2FE122DBFFE122BBDFE112ABCFE1128BAFE1027B9FE0F26B8FD0E25 B5FE0D22B4FE0D22B2FE0C20B1FE0B1EAFFD0B1DADFE0A1BABFE0B1BA9FD1826 AAFE4650AFFEACAEC9FED5D6D9FED5D5D7FED5D5D6FED5D5D5FED5D5D5FED5D5 D5FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED5D5D5FED5D5D5FDD5D5 D5FEC0C0C07400000000A1A1A10DCFCFCFF5D4D4D4FED4D4D4FED5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FED5D5D5FFD4D4D4FFD4D4D4FED5D5 D5FFD4D4D4FFD4D3D5FFD5D5D7FFB7BCD0FF6379CFFF294CD2FF1C40D2FF193D CFFE193CCEFF183ACDFF1839CCFE1737CAFF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FE0B1DADFF0E20ABFF2B38ADFE7F84 BEFFCBCCD4FFD7D7D7FFD3D3D4FFD4D4D4FFD5D5D5FFD4D4D4FFD5D5D5FFD4D4 D4FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD4D4D4FFD4D4D4FED4D4 D4FFC0C0C07400000000A1A1A10DCECECEF5D3D3D3FED3D3D3FED4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FED3D3D3FFD3D3D3FFD4D4D4FED4D4 D4FFD4D4D4FFD3D3D4FFD2D2D3FFD3D3D4FFC8CAD4FF8290CBFF3252D1FF1C3F CFFE193CCEFF1739CDFF1839CCFE1737CAFF1736C8FF1635C6FF1532C4FF1532 C3FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0C1FB0FE1324AEFF3B48B3FFA8ACCBFED4D4 D7FFD3D3D4FFD2D2D3FFD3D3D3FFD3D3D3FFD4D4D4FFD3D3D3FFD4D4D4FFD3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FED4D4 D4FFC0C0C07400000000A2A2A20CCDCDCDF4D2D3D2FDD2D2D2FDD3D3D4FED3D3 D4FED3D3D3FED4D4D3FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED4D4D4FED4D4 D4FED4D4D4FED4D4D4FED3D3D3FED2D2D3FED2D2D3FECCCDD3FE939FCEFE3855 CEFE1C3DCEFE183ACCFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F25B8FE0E25 B6FE0D23B4FE0D22B2FE0D21B1FE1426B0FE4955B5FEB3B6CEFED3D4D5FED2D2 D2FED2D2D3FED3D3D3FED3D3D3FED3D3D3FED4D4D4FED3D3D3FED4D4D4FED3D3 D3FED4D4D4FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED3D3D3FED2D2D2FDD3D3 D3FEBFBFBF7300000000A2A2A20CCECECEF3D3D3D3FDD2D2D2FDD3D3D3FED3D3 D3FED3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD2D3D4FFCFD0D2FF9AA3 CBFE3552CCFF193BCDFF1839CBFE1736CAFF1735C7FF1635C6FF1533C4FF1531 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0E22B3FF1226B2FF4956B8FEB5B8CEFFD2D2D3FFD1D2D2FED3D3 D3FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD4D4D4FFD2D2 D2FFD3D3D3FFD3D3D3FFD2D2D3FFD2D2D3FFD2D2D3FED2D2D2FED2D2D2FDD3D3 D3FDBFBFBF7300000000A2A2A20CCCCCCCEFD1D1D1F9CFCFCFFCCFD0D3FECFD0 D3FED0D0D0FFD3D2D1FFD4D4D3FFD3D3D4FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2D2FFD1D1D2FFC7C9 CFFE8893C9FF2947CCFF193ACBFE1737C9FF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBDFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D24B4FF1124B2FF3C4BB6FFAAAECFFED1D2D5FFD2D2D2FFD3D3D3FED2D2 D2FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD2D2D2FFD2D2D3FFD2D2 D2FFD4D4D4FFD5D5D4FFD4D4D2FFCECED1FFCCCCD0FECDCDD0FED0D0D0FAD1D1 D1F9BEBEBE7100000000A4A4A408C7C7C7A9CFD0CFC0B7B4C0E8A1B0DAFE9EAD D9FEA2ADD2FEACB5D1FEB9BED1FEC6C8D0FECECED0FED0D1D1FED1D1D2FED1D1 D1FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1 D2FEC1C4D0FE7181C7FE203FCAFE1837C9FE1736C8FE1635C7FE1433C5FE1432 C4FE1430C2FE132EC0FE122CBEFE1129BCFE1129BAFE1027B8FE0F26B7FE0E25 B6FE1025B5FE2B3CB4FE959BC6FECCCDD1FED0D0D1FED1D1D1FED1D1D1FED2D2 D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1D1FED1D1D2FED2D2D3FECECE D1FEC0C1CEFEAFB0C9FEA4A4C3FE9292BDFE8C8CBAFE9293BCFECAC8CBCDCDCC CDB4BDBDBD4F0000000000000000EFF0F109ECEAF03B7C6C9CBB3E6BF1FE3361 ECFE2F5DEBFF335CE2FF516FD3FF7D8FCDFE9EAAD1FFB3BAD1FFCCCDCFFED2D2 D2FFD1D1D1FFD2D2D1FFD1D1D1FFD1D1D1FFD2D2D2FFD1D1D1FFD1D1D1FFD0D0 D0FED0D0D0FFABB1CDFF4B61C7FE1A39C9FF1736C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B7FE0F26 B6FF182CB5FF7780C0FFC5C7D0FFD1D1D3FED1D1D1FFD1D1D1FFD1D1D1FED1D1 D1FFD2D2D2FFD1D1D1FFD1D1D2FFD0D0D1FFD3D3D3FFC4C5CDFFACAECAFF9194 C1FF5458A9FF1B219AFF030695FF020494FF020392FE15199CFEC3B5C864F1F0 F113C9C9CA010000000000000000F4F4F50EEDEBF03F7E709DBC4570F0FD3A66 ECFD3562EAFE315DE8FE2D59E7FE2955E5FD3259DEFE5471D6FE96A3CEFDC1C4 D2FED0D0D1FED0D0D1FED0D0D0FED1D1D1FED1D1D1FED1D1D1FED1D1D1FED0D0 D0FDCFD0D0FECDCDCFFE959FC9FD2F4AC6FE1836C8FE1635C7FE1533C4FE1532 C3FE142FC2FE122DBFFE122CBDFE112ABBFE1128BBFE1027B9FE1027B8FD1027 B6FE4555B9FEABB0CAFED0D0D1FECFCFD0FDD1D1D1FED0D0D0FED0D0D0FDD1D1 D1FED1D1D1FED0D0D0FED0D0D1FECDCED0FEBABCCCFE777BB6FE2C34A3FE0811 9BFE020A99FE020A98FE020A96FE020895FE010593FD171C9DFDC3B5C868F3F2 F318D7D7DA020000000000000000FCFDFD0BEFECF13D7E6F9CBB4A73F1FD3F69 EDFD3864ECFF345EE9FF305BE7FF2D57E5FD2A55E3FF2651E2FF2E55DDFD7388 CFFFB2B9CFFFCFCECEFFCFCFCFFFD0D0CFFFCFCFCFFFD0D0D0FFCFCFCFFFCFCF CFFDCFCFCFFFCECED0FFB8BBCBFD6173C5FF1837C8FF1735C6FF1533C5FF1532 C4FF1430C1FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF1128B8FD1F34 B7FF9097C6FFCECFD0FFCECECFFFD0D0CFFDCFCFCFFFD0D0D0FFCFCFCFFDCFCF D0FFCFCFD0FFCECECFFFCCCCCFFFA3A6C7FF4E55ACFF0D169FFF050F9DFF040D 9BFF030C9AFF010A98FF010795FF000694FF000392FD161B9CFDC3B4C766F7F6 F715000000000000000000000000FCFDFD0CEFEDF23E80709DBC527AF2FD466E EEFD3F68EBFF3862EAFF345EE8FF2F5AE6FD2B56E3FF2853E1FF2851E0FD2C53 DCFF5A75D1FFB4BACDFFCECECFFFCECFCEFFCFCFCFFFCFCFCFFFCFCFCFFFCECE CEFDCECFCFFFCDCDCEFFCCCDCCFD949DC6FF2E49C5FF1635C6FF1533C5FF1431 C4FF1330C1FF132EC0FF112BBEFF112ABCFF1129BBFF1128B9FF0F26B8FD4E5C BCFFAEB2CAFFCECECFFFCECECEFFCFCFCFFDCFCFCFFFCFCFCFFFCECECEFDCFCF CFFFCDCDCFFFCBCBCEFFA2A4C4FF323BA9FF0A16A1FF06119FFF040E9DFF030C 9BFF010A99FF010998FF000896FF010795FF000493FD171C9DFDC3B5C867F8F6 F815F4F4F9010000000000000000FDFDFE0BEFEDF13E81729DBB5C82F2FD4E75 EEFD466FECFF3F69EAFF3962E8FF345EE7FD2F59E4FF2B55E2FF2952E0FD2750 DEFF2C52DCFF627BD2FFBEC1CDFFCDCECEFFCECECEFFCECECEFFCECECEFFCECE CEFDCECECEFFCDCDCDFFCDCECEFDB8BBC8FF6273C1FF1837C6FF1633C5FF1532 C3FF142FC1FF132EBFFF122CBDFF112ABBFF1129BAFF1129B9FF172CB8FD7D86 C2FFC6C7CBFFCCCDCDFFCDCDCEFFCECECDFDCECECEFFCECECEFFCDCDCDFDCDCD CDFFCCCCCFFFA6A9C4FF3A43ABFF0C18A2FF0611A0FF04109EFF030D9DFF030C 9BFF020B9AFF010A98FF010896FF010795FF000593FD171C9DFDC3B4C866F8F6 F816F4F4FA010000000000000000FDFDFE0CF0EDF23E83739DBC668AF3FE5A7E EFFE5076EDFF486FEBFF4168E9FF3B63E7FE355EE5FF3159E3FF2D55E1FE2A52 DFFF274FDDFF3255D9FF7C8ECCFFC8CACEFFCCCCCCFFCDCDCDFFCDCDCDFFCDCD CDFECDCDCDFFCDCDCDFFCCCCCDFEC6C7CBFF808CC6FF213EC5FF1634C5FF1431 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1028B9FF3C4DB9FEA3A8 C6FFCECECDFFCCCDCDFFCDCDCDFFCECECEFECECECEFFCECECEFFCDCDCDFECCCC CDFFBDBECAFF4F58B0FF101EA4FF0713A2FF0511A0FF04109FFF040E9DFF030C 9BFF030B9AFF020B98FF020996FF020895FF000593FE171C9DFEC2B5C867F8F6 F816F4F4F9010000000000000000FDFEFE0BF0EDF23D83739DBC6C8DF3FD6587 F0FD5D80EEFF5479ECFF4B71EAFF456BE8FD3E65E6FF385FE3FF335AE2FD2F56 E0FF2C52DEFF2A4FDCFF4464D6FFA6AECCFFCDCCCEFFCBCCCCFFCCCCCCFFCCCC CCFDCCCCCCFFCCCCCCFFCBCCCCFDCACACBFF969EC7FF364FC3FF1634C5FF1531 C3FF1330C1FF132EC0FF122CBEFF112ABCFF122ABBFF1229BAFF6672BDFDBCBE C9FFCCCCCCFFCCCCCCFFCDCDCDFFCCCCCCFDCDCDCDFFCCCCCCFFCBCBCCFDCACB CCFF787DB7FF1A27A7FF0615A3FF0613A2FF0511A0FF04109EFF040F9DFF040D 9BFF030C9AFF030B98FF020996FF020896FF010694FD191E9EFDC2B4C766F8F6 F815F5F5FA010000000000000000FDFEFE0CF0EDF23D83739DBC6C8DF3FE698A F0FE6688EFFF6082EDFF597CEBFF5174E9FE496DE7FF4167E5FF3C61E2FE365C E1FF3157DFFF2E53DDFF3457D8FF6C81CFFFCCCCCCFFCACBCBFFCBCCCCFFCBCB CBFECCCCCCFFCCCCCBFFCBCBCBFECACACBFFB0B4C5FF5669C0FF1432C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122BBCFF122BBBFF1930B9FF7D87C2FEC5C6 CBFFCACACBFFCBCBCBFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCACACBFEB8B8 C6FF3642ADFF0A18A5FF0815A3FF0714A2FF0612A0FF05109EFF050F9DFF040E 9CFF040D9BFF030C99FF040B98FF040A96FF040994FE1C219FFEC2B4C767F8F6 F816F5F5FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF4FE6989 F0FE6888EFFF6787EEFF6484ECFF5F7EEBFE5678E9FF4E71E6FF476AE4FE4064 E2FF3B5FE0FF375ADEFF3155DBFF4B68D7FFB2B7CAFFCBCBCCFFCBCBCBFFCCCC CBFECBCBCBFFCBCBCBFFCBCBCBFECACACBFFC2C2C4FF727EBFFF1734C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122CBCFF132CBBFF253ABAFF8B93C5FEC9CA CCFFCACBCBFFCBCBCCFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCDCDCDFE8B8F BBFF2431A9FF0A18A6FF0815A4FF0714A3FF0713A1FF06129FFF06119EFF0710 9CFF060F9BFF060E9AFF070E98FF080E97FF090D96FE2026A0FEC2B4C767F7F6 F716F5F5FA010000000000000000FDFDFD0CEFEDF13D84739DBC6D8EF4FE6A8A F1FE6888F0FE6787EEFE6886EDFE6785ECFE6281EAFE5D7DE8FE5676E6FE4F6F E4FE486AE2FE4264E0FE3C5EDEFE4766DAFE8B99D0FECACACBFECACACBFECBCB CAFECBCBCBFECBCBCBFECACACAFEC9C9CAFEC7C7C5FE838DC0FE2540C5FE1A36 C4FE1733C2FE1631C1FE152FBFFE152DBDFE142CBCFE3347BAFE969CC3FEC9C9 CAFEC9CACAFECACACAFECBCBCBFECACACAFECBCBCBFEC9C9CAFED0D0CDFE5860 B3FE1422A8FE0C19A6FE0B17A5FE0A16A3FE0A15A2FE0A15A0FE0A149FFE0B14 9EFE0B139DFE0B139CFE0C139BFE0E149AFE0F1499FE272CA3FEC2B3C766F8F6 F815F5F5FA010000000000000000FDFEFE0CEFEDF13E84749DBC6C8DF4FE6989 F0FE6988F0FF6788EEFF6886EDFF6785ECFE6685EAFF6584E9FF6280E8FE5D7C E6FF5876E4FF5270E2FF4B6BE0FF4C6ADDFF798CD4FFC9CACBFFC8C9CAFFCACA CAFECACACAFFCACACAFFCACAC9FEC9C9CAFFC8C7C7FF8D96C1FF334CC4FF1F3B C5FF1C37C3FF1A35C1FF1933BFFF1832BEFF162FBDFF4455B9FFA1A5C3FEC9C9 C9FFC9C9C9FFCACACAFFCACACAFFCACACAFECACACAFFC8C8C9FFC6C6C8FE3D48 B1FF0F1EA9FF0F1DA7FF0E1BA6FF0F1BA5FF0F1BA3FF0F1AA2FF101AA1FF111A A0FF111AA0FF131B9FFF151B9EFF171D9EFF191E9DFE3135A8FEC1B3C767F7F6 F816F5F6FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EDFF6785ECFE6585EAFF6584E9FF6482E8FE6481 E7FF637FE6FF5F7CE5FF5C78E3FF5A75DFFF7C8FD6FFC8C9CCFFC7C8C9FFC9C9 C9FEC9C9C9FFC9C9C9FFC9C9C8FEC8C8C8FFC7C7C7FF989FC3FF445AC3FF2741 C7FF243EC5FF223BC3FF1F39C1FF1F37BFFF1B33BEFF5564BBFFACAFC2FEC8C8 C8FFC8C8C8FFC9C9C8FFC9C9C9FFC9C9C9FEC8C8C8FFC7C8C9FFACAFC2FE3441 B1FF1422ABFF1523AAFF1522A9FF1623A8FF1723A6FF1723A5FF1923A5FF1A24 A4FF1C24A4FF1F26A4FF2128A4FF2429A4FF282CA4FE4145AEFEC1B2C667F7F5 F815F6F6FB010000000000000000FDFEFE0CEFEEF13D84749CBB6C8EF3FE6A8A F0FE6988F0FE6787EFFE6987EEFE6785ECFE6684EBFE6684E9FE6582E8FE6481 E7FE6480E6FE647FE5FE647EE4FE657DE1FE8394D8FEC8C9CDFEC7C8C9FEC9C9 C9FEC9C9C9FEC9C9C9FEC8C8C8FEC8C8C8FEC7C7C7FEA3A9C4FE576AC6FE334C CAFE2F48C8FE2D45C6FE2A42C4FE2A40C2FE243CC1FE6572BDFEB4B7C3FEC8C8 C8FEC8C8C8FEC9C9C8FEC9C9C9FEC9C9C9FEC8C8C8FEC7C8C9FE9C9FBFFE3844 B3FE1F2DAFFE202EAEFE212DADFE222EACFE242EABFE242FAAFE2730AAFE2932 ABFE2C34ABFE2F36ABFE3339ABFE383CACFE3D40ACFE5357B6FEC0B2C667F7F5 F816F7F7FB010000000000000000FDFEFE0CEFEEF23E84749DBC6C8DF4FE6989 F0FE6989F0FF6888EFFF6987EEFF6785ECFE6685EBFF6684EAFF6583E8FE6482 E8FF6480E6FF647EE5FF647EE3FF667EE1FF8596D9FFCACBCEFFCACACBFFCBCB CBFECBCBCBFFCBCBCBFFCBCBCBFECACACAFFCBCBCAFFA8AEC8FF6375C8FF445B CEFF4057CCFF3D53CBFF3A50C8FF394EC6FF3348C5FF7480C1FFBCBDC6FECACA CBFFCACACAFFCBCBCBFFCBCBCBFFCBCBCBFECACACAFFCACACBFF9FA3C2FE4550 B8FF303CB5FF313EB4FF333DB3FF343EB2FF3740B2FF3942B2FF3C44B2FF3E46 B3FF4148B2FF444AB2FF474CB3FF4A4EB3FF4C4FB3FE5E62BBFEBFB1C667F7F5 F816F7F7FB010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6987EDFF6886EDFE6685EBFF6684EAFF6583E9FE6582 E8FF6581E6FF647FE5FF647EE4FF677FE1FF8899DAFFCECFD2FFCECECFFFCFCF D0FECFCFCFFFD0D0D0FFCFCFCFFECFCFCFFFCECECEFFA9AFCAFF6A7BCDFF576B D3FF5368D1FF5165D0FF4E62CDFF4E60CCFF495CCBFF7984C4FFBBBDC8FECECF CFFFCFCFCFFFD0D0CFFFD0D0D0FFD0D0CFFECFCFCFFFCFCECFFFA5A8C4FE5761 BDFF4550BDFF4752BCFF4851BBFF4952BAFF4A53B9FF4C54B9FF4D54B8FF4E54 B8FF4E54B7FF4F54B7FF4F54B6FF4F53B5FF4E52B4FE5F63BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFDFD0CEFEEF13E84739DBC6D8EF4FE6A8A F1FE6989EFFE6888EEFE6987EEFE6886EDFE6685EBFE6684EAFE6683E9FE6582 E7FE6581E7FE657FE5FE647EE4FE6981E1FE909FDAFED1D2D3FED2D2D3FED2D2 D3FED3D3D3FED3D3D3FED2D2D2FED2D2D2FED0D0D0FEA7ADCCFE697BD0FE5E71 D5FE5C6FD3FE5B6ED2FE5A6DD1FE5A6CD0FE5869D0FE7B86C7FEB9BCCBFED2D2 D2FED2D2D2FED3D3D2FED3D3D3FED3D3D2FED2D2D2FED2D2D2FEB8BAC8FE6770 C3FE525CC2FE535DC0FE525CBFFE525BBEFE525BBCFE525ABBFE5158BAFE5157 B9FE5056B8FE4F55B7FE4F54B5FE4E53B5FE4E52B4FE5F62BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFEFE0CEFEDF23E84749DBC6D8EF4FE6A8A F1FE6989F0FF6887EFFF6987EEFF6886EDFE6585EBFF6584E9FF6683E9FE6582 E7FF6580E7FF657FE5FF647EE3FF6D84E0FFA0ABD6FFD5D5D6FFD6D6D6FFD6D6 D6FED7D7D7FFD7D7D7FFD6D6D6FED6D6D6FFD2D2D1FFA3ABCDFF6578D4FF5E71 D5FF5C6FD4FF5B6ED2FF5B6DD1FF5B6DD0FF5B6BD0FF7681CAFFB6BACEFED5D5 D6FFD6D6D6FFD6D6D6FFD7D7D7FFD6D6D6FED6D6D6FFD5D5D6FFD0D0D0FE767E C5FF5560C2FF545EC0FF525CBEFF525BBDFF525ABCFF5259BBFF5158BAFF5157 B9FF5056B8FF4F55B7FF5055B6FF4F54B6FF4F53B5FE6063BCFEBFB0C667F7F5 F815F8F8FC010000000000000000FCFDFD0CF0EEF13E84749CBC6C8EF4FE6A8A F1FE6989F0FE6787EFFE6987EEFE6886ECFE6685EAFE6683EAFE6683E9FE6582 E8FE6581E7FE657FE5FE637EE4FE758BDEFEBDC1D0FED9D9DAFED9D9D9FEDADA DAFEDADADAFEDADADAFED9D9D9FED9D9DAFED1D1D2FE98A2CDFE5E73D7FE5E72 D6FE5C70D4FE5B6ED3FE5B6DD1FE5B6CD0FE5B6CCFFE6A77CBFEAEB3D0FED8D8 D9FED9D9D9FED9D9D9FEDADADAFED9D9D9FEDADADAFED9D9D9FEDBDBD9FE8E94 C5FE5C66C1FE555FC0FE535CBFFE535CBEFE535BBDFE535ABCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4E54B6FE4F52B5FE6062BCFEBFB1C667F7F5 F816F8F8FC010000000000000000FCFDFD0CF0EEF23E84749DBC6D8EF4FD6A8A F1FD6889F0FE6888EFFE6887EEFE6786EDFD6685EBFE6684E9FE6583E9FD6582 E7FE6580E7FE6580E5FE6881E1FE8D9CD8FEDAD9DAFEDEDEDEFEDFDFDFFEDFDF DFFDDFDFDFFEDFDFDEFEDEDEDEFDDDDEDEFEC9CBD4FE8894CEFE5D71D7FE5E72 D6FE5C70D4FE5C6ED3FE5C6ED1FE5B6DD1FE5C6CD0FE6371CCFEA7ADD1FDD9D9 DBFEDEDEDEFEDEDEDEFEDFDFDFFEDFDFDFFDDFDFDFFEDEDEDEFEDFDFDFFDB4B7 CFFE6971C4FE555FC1FE535DBEFE535CBEFE535BBCFE5359BCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4F53B6FE4F53B5FD6063BCFDBFB1C666F7F5 F816F8F8FC010000000000000000FCFDFD0CEFEEF23E84749DBC6C8EF3FE6989 F0FE6989F0FF6888EFFF6987EDFF6785ECFE6685EBFF6684EAFF6582E8FE6582 E8FF6581E6FF6580E5FF768CE0FFB8BFD8FFE3E3E4FFE2E2E2FFE3E3E3FFE3E3 E3FEE3E3E3FFE3E3E2FFE2E2E2FEE0E1E2FFBBC0D9FF7585D2FF5E73D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5C6CD0FF5E6ECEFF989FCBFED5D5 D9FFE2E2E3FFE2E2E2FFE3E3E3FFE3E3E3FEE3E3E3FFE2E2E2FFE1E1E2FED6D6 DBFF7D84C6FF5861C0FF535DBFFF525CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4E52B4FE5F62BBFEBFB1C567F6F5 F816F8F8FC010000000000000000FDFEFE0CF0EEF23E84739DBC6D8EF4FE6A8A F1FE6888EFFF6888EFFF6887EEFF6886EDFE6685EBFF6683E9FF6583E9FE6581 E7FF6581E7FF6983E3FF92A1D8FFDADBE0FFE3E3E4FFE5E5E4FFE4E4E4FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E4E4FEE0E0E2FFAEB6DAFF677AD4FF5E73D6FF5E72 D5FF5C6FD5FF5C6FD3FF5C6ED1FF5B6DD1FF5B6CD0FF5C6BCEFF828BC5FEC8C9 D5FFE3E3E4FFE4E4E4FFE4E4E4FFE4E4E4FEE5E5E5FFE5E5E5FFE4E4E4FEE3E3 E3FFB6B9D1FF6971C1FF545EBEFF535DBEFF535BBDFF535ABCFF5258BAFF5258 BAFF5157B8FF5056B8FF5055B6FF4F54B6FF4F53B4FE6063BCFEBFB1C667F6F5 F816F8F8FC010000000000000000FDFEFE0BF0EEF23D84739CBB6D8EF4FD698A F1FD6888EFFF6787EFFF6886EDFF6886EDFD6584EAFF6583EAFF6583E9FD6682 E7FF6883E6FF8296DDFFC8CCDAFFE3E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5 E5FDE5E5E5FFE4E4E4FFE5E4E5FDD6D7DDFF98A2D2FF6175D6FF5E73D6FF5E71 D5FF5D6FD5FF5B6ED2FF5B6DD1FF5B6DD1FF5B6CCFFF5C6BCEFF6774CAFDAEB3 D0FFDFDFDFFFE4E4E4FFE4E4E4FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE4E4 E4FFDEDEE0FF999EC8FF5D66BFFF535DBFFF535BBCFF525ABBFF5259BAFF5258 BAFF5056B9FF4F55B7FF4F55B5FF4F54B5FF4F53B5FD6063BCFDBEB0C567F6F4 F716F7F7FB010000000000000000FDFEFE0CF0EDF23E83749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EEFF6786ECFE6685EBFF6684E9FF6683E8FE6783 E7FF788EDFFFBCC3D8FFE2E2E2FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E3E4FEBEC3DAFF7585D3FF5F74D7FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6BCEFF5B6ACDFE8E96 CBFFD0D1DAFFE4E4E4FFE4E4E4FFE5E5E5FEE5E5E5FFE5E5E5FFE5E5E5FEE5E5 E5FFE3E3E4FFD3D3DDFF8F94C4FF5B65BEFF545CBDFF535ABCFF5259BAFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4F53B5FE6063BCFEBEB0C567F6F4 F716F8F8FB010000000000000000FDFDFE0BEFEDF23D84749CBB6C8EF4FE6989 F1FE6888F0FE6787EFFE6886EDFE6886ECFE6685EAFE6684EAFE6784E8FE8195 DDFEBAC2DCFEE0E1E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED7D9E0FE9DA7D7FE6276D8FE5F74D7FE5E72D6FE5D71 D6FE5D6FD5FE5C6FD2FE5C6ED1FE5B6CD0FE5B6CD0FE5B6ACEFE5B6ACDFE6D7A C8FEB8BCD4FEE2E2E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED1D2DBFE9599C7FE5D65BCFE535BBCFE535ABBFE5258 B9FE5157B8FE4F55B7FE4F54B6FE4E53B6FE4E52B5FE5F63BCFEBAAABF68F6F4 F615000000000000000000000000F8F8F80DEFEDF33E8376AEBC6D8EF3FD6A8A F0FD6989EFFF6888EEFF6987EDFF6887ECFD6886EAFF6F8BE5FF96A5D8FDCBCF E1FFE0E0E2FFE5E5E6FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5 E5FDE4E4E4FFE4E4E4FFC0C6DEFD7888D4FF6074D9FF5F74D8FF5E72D6FF5D71 D6FF5D70D4FF5C6FD3FF5C6ED1FF5B6CD1FF5B6CD0FF5B6ACEFF5B6ACDFD5B6B CCFF9198C7FFD1D2D9FFE3E3E4FFE5E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE4E4E5FFD4D5DEFFAFB1CEFF6B72BEFF565DBAFF5359 BAFF5258B9FF5157B8FF5055B6FF4F54B6FF4F53B5FD6165BCFDA892A86FF1ED F017E1E1E3010000000000000000F5F5F60BEEECF43D8278BCBB6D8EF3FD698A F2FE6888F1FE6586F0FF6686EDFF768FE0FD9AAADBFFB9C2E1FFD3D6DEFDE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FDE4E4E4FFD1D4DDFF94A0D5FD6378D8FF6074D8FF5F74D8FF5E72D6FF5E71 D6FF5C70D5FF5B6FD3FF5B6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFD5969 CDFF6875C9FFAFB4D1FFDDDEE0FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E5FFDFDFE1FFC2C4D8FFA4A6CBFF7A7D B9FF5A5EB3FF4E54B7FF4E53B6FF4E53B6FE4F53B5FE6064BEFDA28AA171EFEB EE15D0D0D10100000000A7A7A704C9C9C957DBDBDB7C9F99C2D18CA3E5FE8EA1 DFFE96A6DCFFA2B0DBFFB6BEDAFFC9CFE1FED7D9E1FFE0E1E3FFE5E5E5FEE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E4FFE4E4 E4FEDCDDE2FFACB4D8FF6A7FD8FE6075DAFF5F74D9FF5F74D8FF5D71D7FF5D71 D5FF5D6FD4FF5B6ED3FF5B6DD1FF5B6CD0FF5B6CCFFF5B6ACDFF5A6ACDFE5A6A CCFF5A6ACCFF7A85C6FFC5C8D7FFE4E3E3FEE4E4E4FFE5E5E5FFE5E5E5FEE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE5E5E5FFE4E4E4FFDBDBDFFFD0D0 DCFFBDBDD1FFA4A6C5FF9194BEFF8587BDFF797BBBFE8385C1FEB7ACB7A0D0D0 D062B9B9B927000000009F9F9F0BD7D7D7D1E2E2E2E1D6D5DCF4D0D5E3FED1D5 E2FED4D7E0FED9DADFFFE0E0DFFFE5E5E4FEE5E5E5FFE5E5E5FFE4E5E5FEE5E5 E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE0E0 E1FEBBC1D8FF7688D7FF6177DBFE6075D9FF5F74D8FF5F73D8FF5E72D7FF5E72 D6FF5D70D4FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5D6CC8FF8991CAFFCDCFDCFEE3E3E4FFE5E4E4FFE6E6E6FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE6E6 E6FFE4E4E3FFDCDCDEFFD5D5DBFFD1D1DBFECCCDDBFECDCEDBFEDCDADCE9E1E1 E1DCC4C4C462000000009E9E9E0CD8D8D8F3E5E5E5FDE3E3E4FDE4E4E5FEE4E4 E5FEE4E4E5FEE3E3E4FFE4E4E5FFE4E4E4FDE4E4E4FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE4E4E4FFE5E5E5FFE5E5E5FFE4E4E4FFE3E3E4FFE2E2E3FFC6CA DBFD8292D5FF6279DBFF6077DAFD5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CCFFF5B6ACEFF5A6ACDFD5969 CDFF5868CBFF5968CAFF606DC8FF979ECBFDD5D6DDFFE3E4E4FFE4E4E4FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4 E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E5FEE4E4E5FEE4E4E4FEE4E4E4FDE5E5 E5FDC6C6C673000000009E9E9E0CD8D8D8F4E5E5E5FDE5E5E5FDE6E6E6FEE6E6 E6FEE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FEE6E6E6FFE6E6E6FFE6E6E6FEE6E6 E6FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE4E5E5FFE3E3E4FFC8CCDCFF8191 D5FE667CDBFF6078DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6DD2FF5B6DD1FF5B6CD0FF5B6ACEFF5A69CDFE5969 CDFF5868CBFF5867CAFF5966C9FF636FC8FE9A9FCBFFD6D6DEFFE4E4E5FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE5E5E5FEE5E5E5FDE5E5 E5FEC6C6C673000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FEE7E7E7FEE6E6E6FEE6E6E6FEE7E7E7FEE7E7E7FEE6E6E6FEE7E7E7FEE6E6 E6FEE6E6E6FEE6E6E6FEE5E6E6FEE5E5E5FEE3E3E2FEC3C7D8FE8092D9FE647C DCFE6179DCFE6077DBFE6076DBFE5F74DAFE5F74D9FE5F74D7FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6BD0FE5B6ACEFE596ACDFE5869 CDFE5868CBFE5867CBFE5865C8FE5865C8FE636FC6FE9198C9FED4D5DFFEE5E5 E6FEE4E4E5FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE7E7 E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE6E6E6FEE6E6E6FEE6E6 E6FEC6C6C674000000009E9E9E0DD8D8D8F5E6E6E6FEE6E6E6FEE7E7E7FFE7E7 E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE6E6E6FFE6E6E6FFE7E7E7FEE7E7 E6FFE6E6E5FFE5E5E6FFE4E5E5FFDDDEE2FFB3BBDAFF798CDCFF647DDEFF617A DEFE6179DCFF6077DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CAFF5865C9FF5864C7FE5764C6FF5E6AC5FF868CC4FEC7C8 D8FFE3E3E5FFE5E5E6FFE5E5E5FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FFE6E6E6FFE6E6E6FEE6E6 E6FFC6C6C674000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FFE7E7E7FEE6E6E6FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FFE7E7E7FEE6E6 E6FFE5E6E6FFE6E6E6FFCFD2DDFF919FD9FF7187DFFF647CE0FF627BDFFF617A DDFE6178DCFF6077DCFF5F77DAFE5F74D9FF5F74D8FF5F74D8FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACDFF5A6ACCFE5969 CDFF5868CBFF5866CBFF5865C8FF5764C8FE5764C6FF5662C5FF5C67C2FE7078 C6FFA4A8C8FFDCDDE0FFE6E6E6FFE4E5E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FEE6E6E6FEE6E6 E6FFC7C7C774000000009E9E9E0CD8D8D8F4E6E6E6FDE6E6E6FDE7E7E7FEE7E7 E7FEE6E6E7FFE6E6E6FFE6E6E7FFE6E6E7FEE6E6E7FFE5E6E6FFE8E8E8FEE7E6 E7FFCDD0DCFFA4B1DCFF798EDDFF6780E1FF637DE1FF637CE0FF617BDEFF6079 DEFE6179DDFF6077DCFF5F76DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5969CCFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C6FF5662C4FF5661C4FE5761 C3FF5E68C2FF7D84C4FFB0B2CFFFD7D7DBFFE8E8E7FFE7E7E8FFE6E6E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FEE6E6E6FEE6E6E6FDE6E6 E6FEC6C6C673000000009E9E9E0CD9D9D9F3E7E7E7FCE6E6E6FDE7E7E7FEE6E6 E7FEE6E7E7FEE6E6E7FEE5E6E7FEE6E7E7FDE6E7E9FEDEDFE3FEC3C8D6FD90A0 D8FE748DE4FE6C85E4FE657EE3FE647EE3FE637DE1FE637CE0FE617BDFFE617A DDFD6179DCFE5F77DBFE6076DBFD5E74D9FE5E73D8FE5E73D7FE5D72D6FE5D72 D5FE5D70D5FE5B6ED3FE5B6DD2FE5A6CD0FE5A6BCFFE5A69CDFE5A6ACDFD5869 CCFE5767CAFE5766CAFE5765C8FE5864C8FD5763C5FE5662C5FE5661C4FD5660 C3FE545FC2FE5862C0FE5F68C0FE6F76C4FE9DA0C5FEC7C8D1FEDCDCDFFEE4E4 E5FEE4E5E5FEE5E5E5FEE5E5E6FEE5E5E6FEE5E6E6FEE5E5E6FEE6E6E7FCE7E7 E7FDC7C7C77300000000A4A4A40CC6C6C6D8DADADAE6D2D1D6F2C9CCD7FDCCD0 DCFEC6CAD7FEB7BFD7FFAEB8D9FF9CACE0FD8A9EE3FF7C95E3FF718BE5FD6884 E6FF6481E7FF647FE5FF647EE3FF647EE2FF637CE1FF637CE1FF617BDFFF6179 DEFD6179DDFF6077DCFF6076DAFD5F75DAFF5F73D8FF5F73D7FF5E71D6FF5E71 D6FF5D70D5FF5B6FD3FF5B6ED2FF5B6DD1FF5B6BCFFF5B6ACDFF596ACCFD5969 CDFF5867CBFF5866CBFF5865C9FF5763C7FD5764C6FF5662C4FF5561C4FD5660 C3FF555FC2FF555FC1FF535DBFFF545DBEFF5A61BDFF646BBEFF7277C0FF8186 C3FF989AC7FFADAECAFFC1C2CFFFC0C0CCFEC7C8D3FEC7C6CFFDD0D0D1EBD2D2 D2E3BFBFBF6600000000A4A4A401C3C3C31CE0DFE235A599B894889AE0FD708F EFFE708EEEFE6F8CEDFF6E8BEBFE6C89EBFE6986E9FF6784E9FF6683E9FE6582 E8FF6581E6FF647FE4FF647EE3FF637DE3FF627CE2FF627CE1FF607BDFFF617A DEFE6078DDFF6077DCFF6077DBFE5F74D9FF5F73D9FF5F73D8FF5E72D7FF5E72 D5FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C5FF5762C5FF5661C5FE5660 C3FF545EC2FF555FC0FF535DBFFF535CBEFF535BBDFF535ABCFF545BBBFF565C BAFF575BBAFF585DB9FE595DB8FF585BB7FE5E63BBFE503C7CFDDCDAE05FD5D5 D523BEBEBE0D0000000000000000F2F2F402F7F5F81BC3BBCF6B696FB8FA7D9A F5FD6888F0FE6788EFFE6887EEFF6886ECFD6685EAFF6684E9FF6683E8FD6582 E7FF6481E7FF647EE5FF647EE4FF637DE3FF627CE2FF627CE1FF617BDEFF6179 DEFD6178DDFF6076DCFF6076DBFD5F74DAFF5F74D9FF5E73D8FF5D72D6FF5D71 D6FF5C70D5FF5C6FD3FF5B6ED2FF5B6DD1FF5A6CD0FF5A69CEFF5A6ACDFD5869 CDFF5868CAFF5867CAFF5765C9FF5764C8FD5663C6FF5662C4FF5661C5FD5560 C3FF555FC2FF555FC1FF525CBFFF535CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5156B9FF4F55B8FF4F54B6FE4D51B4FE5D5FB5FD593E75D8E6E1EA3BFCFC FD0C000000000000000000000000E9E8EA01FAFAFB13DBD4DD4D5C4678E08AA0 EDFD6786EEFD6889EEFE6887EEFE6886EDFD6685EAFE6584EAFE6582E9FD6481 E8FE6480E7FE657FE5FE657EE4FE647EE3FE637DE2FE637CE1FE617BDFFE617A DEFD6179DDFE6077DCFE6077DBFD5F75DAFE5F74D9FE5F74D8FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6CD0FE5B6ACEFE5A6ACDFD5969 CDFE5868CBFE5867CBFE5865C9FE5864C8FD5764C6FE5762C5FE5661C5FD5560 C3FE545EC2FE545EC1FE525CBFFE525BBEFE525ABDFE5259BCFE5259BBFE5258 BAFE5157B9FE5157B8FE4F54B5FE656AC0FC645B9EFDA99AB580F3F1F425F9F9 FA0600000000000000000000000000000000FBFBFC09F3F0F12EAD9BAA85645B 94FA93A8EFFD6989EEFD6787EDFE6785ECFD6684EAFE6683E9FE6682E8FD6581 E7FE6580E6FE647EE4FE647DE3FE637DE2FE627CE1FE627BE0FE617ADEFE6179 DDFD6178DCFE6076DBFE6076DAFD5F74D9FE5F73D8FE5E73D7FE5D71D5FE5D71 D5FE5C6FD4FE5C6ED2FE5B6DD1FE5B6CD0FE5A6BCFFE5A69CDFE5A69CCFD5968 CCFE5867CAFE5867CAFE5765C8FE5764C7FD5663C5FE5662C4FE5661C4FD5560 C2FE555FC1FE555FC0FE535DBEFE535CBDFE535BBCFE535ABBFE5259BAFE5258 B9FE5156B8FE5156B7FE6266BDFD7A74B2FD5D406CCFDCD6DF46FBFAFB100000 000000000000000000000000000000000000FBFAFB01FAFAFA14EBE7EA40A392 A791645388F48B97D7FD93ACF9FD7492F1FD6686ECFD6484EBFE6382EAFD6381 E9FE6581E9FE6D88E9FE6F89E8FE6F88E7FE6F88E6FE6F87E5FE6E86E3FE6E85 E2FD6D84E1FE6D82E0FE6C82DFFD6C81DEFE6C80DDFE6B7FDCFE6A7EDBFE6A7D DAFE697CD9FE687BD8FE687AD7FE6879D6FE6778D5FE6776D4FE6776D3FD6675 D2FE6574D1FE6573D0FE6471CEFE6470CDFD636FCCFE636ECBFE5E6AC8FD5560 C4FE535EC2FE525DC1FE515BBFFE505ABEFE515ABDFE5058BCFE5A61BFFE686E C4FE8186CFFE9297D5FD70649CFD6F5379CBCFC5CF5CF8F6F81FFBFAFB040000 00000000000000000000000000000000000000000000FDFCFD05FAF9FA16F0EE F137CFC7D560725A7FB365578BE5776EA0F47677B2FA7776B1F97775B2FA7775 B1FA7674B0FA7674AFFA7673AFFA7673AEFA7572AEFA7572ADFA7571ABFA7471 ABFA7571AAFA7470A9FA7470A9FA746FA9FA746EA8FA736EA8FA736DA7FA736D A7FA726DA6FA726CA6FA726BA5FA726BA4FA716AA4FA716AA3FA7169A3FA7168 A2FA7167A2FA7067A1FA7066A1FA7066A0FA7065A0FA70659FFA6F659EFA6F64 9DFA6F649DFA6F639CFA6E639CFA6D629BF96D629BFA6D619AFA6D6198F96C5F 97FA675384F6593B69E381647DA9D7CED753F8F6F824FBFBFB09000000000000 0000000000000000000000000000000000000000000000000000FBFBFB03FCFB FC0EF9F8FA1DE3DDE432DAD5DE4AD7D1DD5CCDC6D365A28D9C76A28D9C76A28D 9C76A18C9C77A28C9B77A18C9B77A28C9B76A28C9A77A28C9B77A18C9A77A28C 9B76A28C9B77A28C9A77A28C9A77A28C9A77A28C9A77A28C9A76A28B9A77A28C 9A77A18B9A76A18B9A77A28B9A77A28B9977A28A9977A28B9977A18A9977A28B 9877A28A9877A18B9876A18B9977A18B9976A18B9976A18A9877A18B9977A18B 9976A18B9977A18B9977A18B9976A18B9976A08A9877A18A9876A0899776B09E AB6FCFC6D161DCD5DD52EAE5E937FAF9FA1AFBFAFB09FCFCFC01000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F7F7F903FCFCFC08FBFBFC10FAF9FA17F7F6F718EEEAED18EEEAEC19EEE9 EC18EFEBED19EFEBED19EFEBED19EEEAEC19EFEBED19EFEBED19EFEBED19EEEA ED18EFEBED19EFEBED19EDE9EB18EFEBED19EFEBED19EFEBED19EFEBED19EFEB ED19EFEBED19EFEBED19EFEBED19EEEAEC18EFEBED19EFEBED19EEEAEC19EEEA EC19EEEAEC18EEEAEC19EFEBED19EEEAEC18EFEBED19EFEBED19EFEBED19EEEA EC19EFEBED19EFEBED19EEEAEC19EFEBED19EEEAEC19EEEAEC19EEEAEC19F2F0 F119F9F8F918FBFBFC14FDFCFD0BFAF9FA030000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000F6F6F901F6F6F901F6F5 F801F7F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F6 F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6 F901F6F6F901F6F6F901F6F6F901F6F6F901F6F5F801F6F5F801F6F5F801F6F5 F801F5F5F801F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801F6F5 F801F6F6F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5 F801000000000000000000000000000000000000000000000000000000000000 00000000000000000000FFFFFFFFFFFFFFFFFFC14000000003FFF80000000000 003FF00000000000001FE00000000000000FE000000000000007C00000000000 0003C00000000000000380000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001800000000000000180000000000000018000000000000003800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0003800000000000000180000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000180000000000000038000000000000003C00000000000 0007C000000000000007E00000000000000FF00000000000000FFC0000000000 003FFFE00000000003FF } Hint = 'Double Commander - click to restore' OnClick = MainTrayIconClick OnDblClick = MainTrayIconClick left = 220 top = 168 end object pmTabMenu: TPopupMenu left = 392 top = 128 object miNewTab: TMenuItem Action = actNewTab OnClick = mnuTabMenuClick end object miRenameTab: TMenuItem Action = actRenameTab OnClick = mnuTabMenuClick end object miOpenDirInNewTab: TMenuItem Action = actOpenDirInNewTab OnClick = mnuTabMenuClick end object miLine14: TMenuItem Caption = '-' end object miCloseTab: TMenuItem Action = actCloseTab OnClick = mnuTabMenuClick end object miCloseAllTabs: TMenuItem Action = actCloseAllTabs OnClick = mnuTabMenuClick end object miCloseDuplicateTabs: TMenuItem Action = actCloseDuplicateTabs end object miLine19: TMenuItem Caption = '-' end object miTabOptions: TMenuItem Caption = 'Tab options' object miTabOptionNormal: TMenuItem Action = actSetTabOptionNormal GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionPathLocked: TMenuItem Action = actSetTabOptionPathLocked GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionPathResets: TMenuItem Action = actSetTabOptionPathResets GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miTabOptionDirsInNewTab: TMenuItem Action = actSetTabOptionDirsInNewTab GroupIndex = 1 RadioItem = True OnClick = mnuTabMenuClick end object miLine16: TMenuItem Caption = '-' end object miSetAllTabsOptionNormal: TMenuItem Action = actSetAllTabsOptionNormal end object miSetAllTabsOptionPathLocked: TMenuItem Action = actSetAllTabsOptionPathLocked end object miSetAllTabsOptionPathResets: TMenuItem Action = actSetAllTabsOptionPathResets end object miSetAllTabsOptionDirsInNewTab: TMenuItem Action = actSetAllTabsOptionDirsInNewTab end end object miLine21: TMenuItem Caption = '-' end object miNextTab: TMenuItem Action = actNextTab end object miPrevTab: TMenuItem Action = actPrevTab end object miLine23: TMenuItem Caption = '-' end object miSaveTabs: TMenuItem Action = actSaveTabs end object miLoadTabs: TMenuItem Action = actLoadTabs end object miSaveFavoriteTabs: TMenuItem Action = actSaveFavoriteTabs end object miLoadFavoriteTabs: TMenuItem Action = actLoadFavoriteTabs end object miLine26: TMenuItem Caption = '-' end object miConfigFolderTabs: TMenuItem Action = actConfigFolderTabs end object miConfigFavoriteTabs: TMenuItem Action = actConfigFavoriteTabs end end object pmTrayIconMenu: TPopupMenu left = 294 top = 193 object miTrayIconRestore: TMenuItem Caption = 'Restore' OnClick = miTrayIconRestoreClick end object miLine8: TMenuItem Caption = '-' end object miTrayIconExit: TMenuItem Caption = 'E&xit' OnClick = miTrayIconExitClick end end object pmLogMenu: TPopupMenu left = 440 top = 136 object miLogCopy: TMenuItem Caption = 'Copy' OnClick = miLogMenuClick end object miLine24: TMenuItem Caption = '-' end object miLogSelectAll: TMenuItem Tag = 1 Caption = 'Select All' OnClick = miLogMenuClick end object miLine25: TMenuItem Caption = '-' end object miLogClear: TMenuItem Tag = 2 Caption = 'Clear' OnClick = miLogMenuClick end object miLogHide: TMenuItem Tag = 3 Caption = 'Hide' OnClick = miLogMenuClick end end object Timer: TTimer Enabled = False Interval = 100 OnTimer = AllProgressOnUpdateTimer left = 704 top = 152 end object imgLstActions: TImageList left = 64 top = 224 end object imgLstDirectoryHotlist: TImageList left = 200 top = 224 end object pmFavoriteTabs: TPopupMenu Images = imgLstActions left = 128 top = 152 end end doublecmd-0.7.1/src/udsxmodule.pas0000644000175000001440000002562012132053450016202 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- (DSX) Search plugin API implementation. DSX - Double commander Search eXtentions. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uDsxModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, dynlibs, LCLProc, DsxPlugin, DCClassesUtf8, uDCUtils, DCXmlConfig; type { TDsxModule } TDsxModule = class protected SStartSearch: TSStartSearch; SStopSearch: TSStopSearch; SAddFileProc: TSAddFileProc; SUpdateStatusProc: TSUpdateStatusProc; SInit: TSInit; SFinalize: TSFinalize; private FPluginNr: integer; FModuleHandle: TLibHandle; // Handle to .DLL or .so function GIsLoaded: boolean; public Name: string; FileName: string; Descr: string; //--------------------- constructor Create; destructor Destroy; override; //--------------------- function LoadModule: boolean; procedure UnloadModule; //--------------------- function CallInit(pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): integer; procedure CallStartSearch(SearchRec: TDsxSearchRecord); procedure CallStopSearch; procedure CallFinalize; //--------------------- property IsLoaded: boolean read GIsLoaded; property ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; end; { TDSXModuleList } TDSXModuleList = class private Flist: TStringList; function GetCount: integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Load(Ini: TIniFileEx); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(Ini: TIniFileEx); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure DeleteItem(Index: integer); //--------------------- function Add(Item: TDSXModule): integer; overload; function Add(FileName: string): integer; overload; function Add(AName, FileName, Descr: string): integer; overload; //--------------------- procedure Assign(OtherList: TDSXModuleList); //--------------------- function IsLoaded(AName: string): boolean; overload; function IsLoaded(Index: integer): boolean; overload; function LoadModule(AName: string): boolean; overload; function LoadModule(Index: integer): boolean; overload; //--------------------- function GetDSXModule(Index: integer): TDSXModule; overload; function GetDSXModule(AName: string): TDSXModule; overload; //--------------------- property Count: integer read GetCount; end; implementation uses DCOSUtils, uDebug, uGlobs, uGlobsPaths; const DsxIniFileName = 'dsx.ini'; { TDsxModule } function TDsxModule.GIsLoaded: boolean; begin Result := FModuleHandle <> 0; end; constructor TDsxModule.Create; begin FModuleHandle := 0; inherited Create; end; destructor TDsxModule.Destroy; begin if GIsLoaded then UnloadModule; inherited Destroy; end; function TDsxModule.LoadModule: boolean; begin FModuleHandle := mbLoadLibrary(Self.FileName); Result := (FModuleHandle <> 0); if FModuleHandle = 0 then exit; SStopSearch := TSStopSearch(GetProcAddress(FModuleHandle, 'StopSearch')); SStartSearch := TSStartSearch(GetProcAddress(FModuleHandle, 'StartSearch')); SInit := TSInit(GetProcAddress(FModuleHandle, 'Init')); SFinalize := TSFinalize(GetProcAddress(FModuleHandle, 'Finalize')); end; procedure TDsxModule.UnloadModule; begin if Assigned(SFinalize) then SFinalize(FPluginNr); {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; SStartSearch := nil; SStopSearch := nil; SInit := nil; SFinalize := nil; end; function TDsxModule.CallInit(pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): integer; var dps: TDsxDefaultParamStruct; begin if Assigned(SInit) then begin dps.DefaultIniName := gpCfgDir + DsxIniFileName; dps.PluginInterfaceVersionHi := 0; dps.PluginInterfaceVersionLow := 10; dps.size := SizeOf(TDsxDefaultParamStruct); FPluginNr := Sinit(@dps, pAddFileProc, pUpdateStatus); Result := FPluginNr; end; end; procedure TDsxModule.CallStartSearch(SearchRec: TDsxSearchRecord); begin if Assigned(SStartSearch) then SStartSearch(FPluginNr, @SearchRec); end; procedure TDsxModule.CallStopSearch; begin if Assigned(SStopSearch) then SStopSearch(FPluginNr); end; procedure TDsxModule.CallFinalize; begin if Assigned(SFinalize) then SFinalize(FPluginNr); end; { TDSXModuleList } function TDSXModuleList.GetCount: integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TDSXModuleList.Create; begin Flist := TStringList.Create; end; destructor TDSXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TDSXModuleList.Clear; begin while Flist.Count > 0 do begin TDSXModule(Flist.Objects[0]).Free; Flist.Delete(0); end; end; procedure TDSXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TDSXModuleList.Load(Ini: TIniFileEx); var xCount, I: integer; tmp: string; begin Self.Clear; xCount := Ini.ReadInteger('Search Plugins', 'PluginCount', 0); if xCount = 0 then Exit; for i := 0 to xCount - 1 do begin tmp := Ini.ReadString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', ''); Flist.AddObject(UpCase(tmp), TDSXModule.Create); TDSXModule(Flist.Objects[I]).Name := tmp; TDSXModule(Flist.Objects[I]).Descr := Ini.ReadString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Description', ''); TDSXModule(Flist.Objects[I]).FileName := GetCmdDirFromEnvVar(Ini.ReadString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', '')); end; end; procedure TDSXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; ADsxModule: TDSXModule; begin Clear; ANode := ANode.FindNode('DsxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('DsxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin ADsxModule := TDsxModule.Create; Flist.AddObject(UpCase(AName), ADsxModule); ADsxModule.Name := AName; ADsxModule.FileName := GetCmdDirFromEnvVar(APath); ADsxModule.Descr := AConfig.GetValue(ANode, 'Description', ''); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TDSXModuleList.Save(Ini: TIniFileEx); var i: integer; begin Ini.EraseSection('Search Plugins'); Ini.WriteInteger('Search Plugins', 'PluginCount', Flist.Count); for i := 0 to Flist.Count - 1 do begin Ini.WriteString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', TDSXModule(Flist.Objects[I]).Name); Ini.WriteString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Description', TDSXModule(Flist.Objects[I]).Descr); Ini.WriteString('Search Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', SetCmdDirAsEnvVar(TDSXModule(Flist.Objects[I]).FileName)); end; end; procedure TDSXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'DsxPlugins', True); AConfig.ClearNode(ANode); for i := 0 to Flist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'DsxPlugin'); AConfig.AddValue(SubNode, 'Name', TDSXModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', SetCmdDirAsEnvVar(TDSXModule(Flist.Objects[I]).FileName)); AConfig.AddValue(SubNode, 'Description', TDSXModule(Flist.Objects[I]).Descr); end; end; procedure TDSXModuleList.DeleteItem(Index: integer); begin if (Index > -1) and (Index < Flist.Count) then begin TDSXModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TDSXModuleList.Add(Item: TDSXModule): integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TDSXModuleList.Add(FileName: string): integer; var s: string; begin s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); Result := Flist.AddObject(UpCase(s), TDSXModule.Create); TDSXModule(Flist.Objects[Result]).Name := s; TDSXModule(Flist.Objects[Result]).FileName := FileName; end; function TDSXModuleList.Add(AName, FileName, Descr: string): integer; begin Result := Flist.AddObject(UpCase(AName), TDSXModule.Create); TDSXModule(Flist.Objects[Result]).Name := AName; TDSXModule(Flist.Objects[Result]).Descr := Descr; TDSXModule(Flist.Objects[Result]).FileName := FileName; end; procedure TDSXModuleList.Assign(OtherList: TDSXModuleList); var i: Integer; begin Clear; for i := 0 to OtherList.Flist.Count - 1 do begin with TDSXModule(OtherList.Flist.Objects[I]) do Add(Name, FileName, Descr); end; end; function TDSXModuleList.IsLoaded(AName: string): boolean; var x: integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetDSXModule(x).IsLoaded; end; end; function TDSXModuleList.IsLoaded(Index: integer): boolean; begin Result := GetDSXModule(Index).IsLoaded; end; function TDSXModuleList.LoadModule(AName: string): boolean; var x: integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetDSXModule(x).LoadModule; end; end; function TDSXModuleList.LoadModule(Index: integer): boolean; begin Result := GetDSXModule(Index).LoadModule; end; function TDSXModuleList.GetDSXModule(Index: integer): TDSXModule; begin Result := TDSXModule(Flist.Objects[Index]); end; function TDSXModuleList.GetDSXModule(AName: string): TDSXModule; var tmp: integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp > -1 then Result := TDSXModule(Flist.Objects[tmp]); end; end. doublecmd-0.7.1/src/doublecmd.lpi0000644000175000001440000017230612666540554015776 0ustar alexxusers <ResourceType Value="res"/> <XPManifest> <DpiAware Value="True"/> </XPManifest> <Icon Value="0"/> </General> <i18n> <EnableI18N Value="True"/> <OutDir Value="..\language"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="7"/> <StringTable FileDescription="Double Commander is a cross platform open source file manager with two panels side by side" InternalName="DOUBLECMD" LegalCopyright="Copyright (C) 2006-2015 Alexander Koblov" ProductName="Double Commander" ProductVersion=""/> </VersionInfo> <BuildModes Count="5"> <Item1 Name="Debug" Default="True"/> <Item2 Name="Debug + HeapTrc"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> </Debugging> </Linking> <Other> <CustomOptions Value="-dHEAPTRC -dHEAPTRC_EXTRA"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item2> <Item3 Name="NoDebug Full Optimizations"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Optimizations> <OptimizationLevel Value="3"/> <VariablesInRegisters Value="True"/> <UncertainOptimizations Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> <UseLineInfoUnit Value="False"/> </Debugging> </Linking> <Other> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item3> <Item4 Name="Nightly"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseLineInfoUnit Value="False"/> <UseExternalDbgSyms Value="True"/> </Debugging> </Linking> <Other> <CustomOptions Value="-dNIGHTLY_BUILD"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item4> <Item5 Name="Beta"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro --as-needed'; end; if LCLWidgetType <> GetIDEValue('LCLWidgetType') then begin UnitPath += '$(FallbackOutputRoot)/LazControls/lib/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType);'; UnitPath += '$(FallbackOutputRoot)/SynEdit/units/$(TargetCPU)-$(TargetOS)/$(LCLWidgetType);'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="2"/> <VariablesInRegisters Value="True"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseLineInfoUnit Value="False"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <Win32> <GraphicApplication Value="True"/> </Win32> </Options> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> <CustomOptions Value="-dNIGHTLY_BUILD"/> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> </Item5> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="11"> <Item1> <PackageName Value="DateTimeCtrls"/> </Item1> <Item2> <PackageName Value="dcpcrypt"/> </Item2> <Item3> <PackageName Value="chsdet"/> </Item3> <Item4> <PackageName Value="LazControls"/> <MinVersion Valid="True"/> </Item4> <Item5> <PackageName Value="pkg_gifanim"/> <MinVersion Major="1" Minor="4" Valid="True"/> </Item5> <Item6> <PackageName Value="cmdbox"/> </Item6> <Item7> <PackageName Value="KASComp"/> <MinVersion Major="1" Minor="8" Valid="True"/> </Item7> <Item8> <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item8> <Item9> <PackageName Value="SynEdit"/> <MinVersion Major="1" Valid="True"/> </Item9> <Item10> <PackageName Value="viewerpackage"/> </Item10> <Item11> <PackageName Value="doublecmd_common"/> <MinVersion Minor="3" Valid="True"/> </Item11> </RequiredPackages> <Units Count="228"> <Unit0> <Filename Value="doublecmd.lpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="fmain.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMain"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMain"/> </Unit1> <Unit2> <Filename Value="uwcxprototypes.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWCXprototypes"/> </Unit2> <Unit3> <Filename Value="fviewer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmViewer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fViewer"/> </Unit3> <Unit4> <Filename Value="feditor.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fEditor"/> </Unit4> <Unit5> <Filename Value="fMsg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMsg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit5> <Unit6> <Filename Value="dmcommondata.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="dmComData"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <UnitName Value="dmCommonData"/> </Unit6> <Unit7> <Filename Value="dmhigh.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="dmHighl"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <UnitName Value="dmHigh"/> </Unit7> <Unit8> <Filename Value="ffindview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFindView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFindView"/> </Unit8> <Unit9> <Filename Value="fAbout.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmAbout"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit9> <Unit10> <Filename Value="foptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptions"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOptions"/> </Unit10> <Unit11> <Filename Value="fFileOpDlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileOp"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit11> <Unit12> <Filename Value="fmkdir.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMkDir"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMkDir"/> </Unit12> <Unit13> <Filename Value="fcopymovedlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCopyDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCopyMoveDlg"/> </Unit13> <Unit14> <Filename Value="fFindDlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFindDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit14> <Unit15> <Filename Value="fsymlink.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSymLink"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSymLink"/> </Unit15> <Unit16> <Filename Value="fhardlink.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmHardLink"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fHardLink"/> </Unit16> <Unit17> <Filename Value="fmultirename.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMultiRename"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMultiRename"/> </Unit17> <Unit18> <Filename Value="fpackdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmPackDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fPackDlg"/> </Unit18> <Unit19> <Filename Value="flinker.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmLinker"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fLinker"/> </Unit19> <Unit20> <Filename Value="fsplitter.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSplitter"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSplitter"/> </Unit20> <Unit21> <Filename Value="ffileproperties.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileProperties"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileProperties"/> </Unit21> <Unit22> <Filename Value="fextractdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmExtractDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fExtractDlg"/> </Unit22> <Unit23> <Filename Value="ulng.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uLng"/> </Unit23> <Unit24> <Filename Value="frames\foptionsfileassocextra.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fOptionsFileAssocExtra"/> </Unit24> <Unit25> <Filename Value="fhackform.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmHackForm"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fHackForm"/> </Unit25> <Unit26> <Filename Value="fpackinfodlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmPackInfoDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fPackInfoDlg"/> </Unit26> <Unit27> <Filename Value="ftweakplugin.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmTweakPlugin"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fTweakPlugin"/> </Unit27> <Unit28> <Filename Value="udescr.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDescr"/> </Unit28> <Unit29> <Filename Value="fdescredit.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDescrEdit"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDescrEdit"/> </Unit29> <Unit30> <Filename Value="platform\win\ugdiplus.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGdiPlus"/> </Unit30> <Unit31> <Filename Value="platform\win\umywindows.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMyWindows"/> </Unit31> <Unit32> <Filename Value="platform\unix\umyunix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMyUnix"/> </Unit32> <Unit33> <Filename Value="dmhelpmanager.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="dmHelpManager"/> <HasResources Value="True"/> <ResourceBaseClass Value="DataModule"/> <UnitName Value="dmHelpManager"/> </Unit33> <Unit34> <Filename Value="feditsearch.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditSearchReplace"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fEditSearch"/> </Unit34> <Unit35> <Filename Value="platform\udragdropex.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropEx"/> </Unit35> <Unit36> <Filename Value="ushellexecute.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uShellExecute"/> </Unit36> <Unit37> <Filename Value="platform\uClipboard.pas"/> <IsPartOfProject Value="True"/> </Unit37> <Unit38> <Filename Value="platform\udragdropgtk.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropGtk"/> </Unit38> <Unit39> <Filename Value="usearchtemplate.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchTemplate"/> </Unit39> <Unit40> <Filename Value="platform\ukeyboard.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKeyboard"/> </Unit40> <Unit41> <Filename Value="platform\udragdropqt.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDragDropQt"/> </Unit41> <Unit42> <Filename Value="fchecksumverify.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCheckSumVerify"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCheckSumVerify"/> </Unit42> <Unit43> <Filename Value="fchecksumcalc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmCheckSumCalc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fCheckSumCalc"/> </Unit43> <Unit44> <Filename Value="uformcommands.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFormCommands"/> </Unit44> <Unit45> <Filename Value="ufileviewnotebook.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewNotebook"/> </Unit45> <Unit46> <Filename Value="platform\unix\mime\umimeactions.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeActions"/> </Unit46> <Unit47> <Filename Value="fsetfileproperties.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSetFileProperties"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSetFileProperties"/> </Unit47> <Unit48> <Filename Value="platform\upixmapgtk.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPixMapGtk"/> </Unit48> <Unit49> <Filename Value="uquickviewpanel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uQuickViewPanel"/> </Unit49> <Unit50> <Filename Value="fmaskinputdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMaskInputDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMaskInputDlg"/> </Unit50> <Unit51> <Filename Value="platform\uinfotooltip.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uInfoToolTip"/> </Unit51> <Unit52> <Filename Value="fattributesedit.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmAttributesEdit"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fAttributesEdit"/> </Unit52> <Unit53> <Filename Value="fmodview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmModView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fModView"/> </Unit53> <Unit54> <Filename Value="fdiffer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDiffer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDiffer"/> </Unit54> <Unit55> <Filename Value="fconnectionmanager.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmConnectionManager"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fConnectionManager"/> </Unit55> <Unit56> <Filename Value="ffileexecuteyourself.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmFileExecuteYourSelf"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileExecuteYourSelf"/> </Unit56> <Unit57> <Filename Value="uthumbnails.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uThumbnails"/> </Unit57> <Unit58> <Filename Value="platform\utrash.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uTrash"/> </Unit58> <Unit59> <Filename Value="uparitercontrols.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPariterControls"/> </Unit59> <Unit60> <Filename Value="ucmdlineparams.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uCmdLineParams"/> </Unit60> <Unit61> <Filename Value="upathlabel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uPathLabel"/> </Unit61> <Unit62> <Filename Value="frames\foptionstooltips.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolTips"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolTips"/> </Unit62> <Unit63> <Filename Value="frames\foptionsframe.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="OptionsEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFrame"/> </Unit63> <Unit64> <Filename Value="frames\foptionsplugins.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsPlugins"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsPlugins"/> </Unit64> <Unit65> <Filename Value="frames\foptionsfiletypescolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileTypesColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileTypesColors"/> </Unit65> <Unit66> <Filename Value="platform\utarwriter.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uTarWriter"/> </Unit66> <Unit67> <Filename Value="uconvencoding.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uConvEncoding"/> </Unit67> <Unit68> <Filename Value="uvfsmodule.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVfsModule"/> </Unit68> <Unit69> <Filename Value="frames\foptionslanguage.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLanguage"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLanguage"/> </Unit69> <Unit70> <Filename Value="frames\foptionsbehavior.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsBehavior"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsBehavior"/> </Unit70> <Unit71> <Filename Value="frames\foptionstools.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsViewer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTools"/> </Unit71> <Unit72> <Filename Value="frames\foptionshotkeys.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsHotkeys"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsHotkeys"/> </Unit72> <Unit73> <Filename Value="frames\foptionslayout.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLayout"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLayout"/> </Unit73> <Unit74> <Filename Value="frames\foptionsfonts.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFonts"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFonts"/> </Unit74> <Unit75> <Filename Value="frames\foptionsfileoperations.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileOperations"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileOperations"/> </Unit75> <Unit76> <Filename Value="frames\foptionsquicksearchfilter.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsQuickSearchFilter"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsQuickSearchFilter"/> </Unit76> <Unit77> <Filename Value="frames\foptionstabs.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTabs"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTabs"/> </Unit77> <Unit78> <Filename Value="frames\foptionslog.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsLog"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsLog"/> </Unit78> <Unit79> <Filename Value="frames\foptionsconfiguration.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsConfiguration"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsConfiguration"/> </Unit79> <Unit80> <Filename Value="frames\foptionscustomcolumns.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsCustomColumns"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsCustomColumns"/> </Unit80> <Unit81> <Filename Value="frames\foptionsmisc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsMisc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsMisc"/> </Unit81> <Unit82> <Filename Value="frames\foptionsautorefresh.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsAutoRefresh"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsAutoRefresh"/> </Unit82> <Unit83> <Filename Value="frames\foptionsicons.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsIcons"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsIcons"/> </Unit83> <Unit84> <Filename Value="frames\foptionsignorelist.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsIgnoreList"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsIgnoreList"/> </Unit84> <Unit85> <Filename Value="frames\foptionsarchivers.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsArchivers"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsArchivers"/> </Unit85> <Unit86> <Filename Value="fselecttextrange.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSelectTextRange"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSelectTextRange"/> </Unit86> <Unit87> <Filename Value="frames\fquicksearch.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmQuickSearch"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fQuickSearch"/> </Unit87> <Unit88> <Filename Value="frames\foptionsgroups.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="fOptionsGroups"/> </Unit88> <Unit89> <Filename Value="frames\foptionsfilepanelscolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFilePanelsColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFilePanelsColors"/> </Unit89> <Unit90> <Filename Value="frames\foptionstoolbase.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolBase"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolBase"/> </Unit90> <Unit91> <Filename Value="frames\foptionsterminal.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTerminal"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTerminal"/> </Unit91> <Unit92> <Filename Value="frames\foptionsmouse.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsMouse"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsMouse"/> </Unit92> <Unit93> <Filename Value="frames\foptionskeyboard.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsKeyboard"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsKeyboard"/> </Unit93> <Unit94> <Filename Value="frames\foptionsdragdrop.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDragDrop"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsDragDrop"/> </Unit94> <Unit95> <Filename Value="frames\foptionsfilesviews.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFilesViews"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFilesViews"/> </Unit95> <Unit96> <Filename Value="frames\foptionscolumnsview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsColumnsView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsColumnsView"/> </Unit96> <Unit97> <Filename Value="frames\foptionsdriveslistbutton.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDrivesListButton"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsDrivesListButton"/> </Unit97> <Unit98> <Filename Value="platform\unix\uoverlayscrollbarfix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOverlayScrollBarFix"/> </Unit98> <Unit99> <Filename Value="umaincommands.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMainCommands"/> </Unit99> <Unit100> <Filename Value="platform\win\uexceptionhandlerfix.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uExceptionHandlerFix"/> </Unit100> <Unit101> <Filename Value="frames\foptionseditorcolors.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsEditorColors"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsEditorColors"/> </Unit101> <Unit102> <Filename Value="uoperationspanel.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOperationsPanel"/> </Unit102> <Unit103> <Filename Value="foptionshotkeysedithotkey.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmEditHotkey"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOptionsHotkeysEditHotkey"/> </Unit103> <Unit104> <Filename Value="ukastoolitemsextended.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKASToolItemsExtended"/> </Unit104> <Unit105> <Filename Value="frames\foptionstoolbar.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsToolbar"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolbar"/> </Unit105> <Unit106> <Filename Value="fileviews\ufileviewwithmainctrl.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWithMainCtrl"/> </Unit106> <Unit107> <Filename Value="filesources\uarchivefilesource.pas"/> <IsPartOfProject Value="True"/> </Unit107> <Unit108> <Filename Value="filesources\uarchivefilesourceutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uArchiveFileSourceUtil"/> </Unit108> <Unit109> <Filename Value="filesources\ufilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSource"/> </Unit109> <Unit110> <Filename Value="filesources\ufilesourcecalcchecksumoperation.pas"/> <IsPartOfProject Value="True"/> </Unit110> <Unit111> <Filename Value="filesources\ufilesourcecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit111> <Unit112> <Filename Value="filesources\ufilesourcecombineoperation.pas"/> <IsPartOfProject Value="True"/> </Unit112> <Unit113> <Filename Value="filesources\ufilesourcecopyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceCopyOperation"/> </Unit113> <Unit114> <Filename Value="filesources\ufilesourcecreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit114> <Unit115> <Filename Value="filesources\ufilesourcedeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceDeleteOperation"/> </Unit115> <Unit116> <Filename Value="filesources\ufilesourceexecuteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceExecuteOperation"/> </Unit116> <Unit117> <Filename Value="filesources\ufilesourcelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceListOperation"/> </Unit117> <Unit118> <Filename Value="filesources\ufilesourcemoveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit118> <Unit119> <Filename Value="filesources\ufilesourceoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperation"/> </Unit119> <Unit120> <Filename Value="filesources\ufilesourceoperationmessageboxesui.pas"/> <IsPartOfProject Value="True"/> </Unit120> <Unit121> <Filename Value="filesources\ufilesourceoperationmisc.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceOperationMisc"/> </Unit121> <Unit122> <Filename Value="filesources\ufilesourceoperationoptions.pas"/> <IsPartOfProject Value="True"/> </Unit122> <Unit123> <Filename Value="filesources\ufilesourceoperationoptionsui.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="FileSourceOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="uFileSourceOperationOptionsUI"/> </Unit123> <Unit124> <Filename Value="filesources\ufilesourceoperationtypes.pas"/> <IsPartOfProject Value="True"/> </Unit124> <Unit125> <Filename Value="filesources\ufilesourceoperationui.pas"/> <IsPartOfProject Value="True"/> </Unit125> <Unit126> <Filename Value="filesources\ufilesourceproperty.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceProperty"/> </Unit126> <Unit127> <Filename Value="filesources\ufilesourcesetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceSetFilePropertyOperation"/> </Unit127> <Unit128> <Filename Value="filesources\ufilesourcesplitoperation.pas"/> <IsPartOfProject Value="True"/> </Unit128> <Unit129> <Filename Value="filesources\ufilesourcetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit129> <Unit130> <Filename Value="filesources\ufilesourceutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSourceUtil"/> </Unit130> <Unit131> <Filename Value="filesources\ufilesourcewipeoperation.pas"/> <IsPartOfProject Value="True"/> </Unit131> <Unit132> <Filename Value="filesources\ulocalfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit132> <Unit133> <Filename Value="filesources\uoperationthread.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOperationThread"/> </Unit133> <Unit134> <Filename Value="filesources\urealfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit134> <Unit135> <Filename Value="filesources\uvirtualfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit135> <Unit136> <Filename Value="filesources\filesystem\ffilesystemcopymoveoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="FileSystemCopyMoveOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fFileSystemCopyMoveOperationOptions"/> </Unit136> <Unit137> <Filename Value="filesources\filesystem\ufilesystemcalcchecksumoperation.pas"/> <IsPartOfProject Value="True"/> </Unit137> <Unit138> <Filename Value="filesources\filesystem\ufilesystemcalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit138> <Unit139> <Filename Value="filesources\filesystem\ufilesystemcombineoperation.pas"/> <IsPartOfProject Value="True"/> </Unit139> <Unit140> <Filename Value="filesources\filesystem\ufilesystemcopyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemCopyOperation"/> </Unit140> <Unit141> <Filename Value="filesources\filesystem\ufilesystemcreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit141> <Unit142> <Filename Value="filesources\filesystem\ufilesystemdeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemDeleteOperation"/> </Unit142> <Unit143> <Filename Value="filesources\filesystem\ufilesystemexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit143> <Unit144> <Filename Value="filesources\filesystem\ufilesystemfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemFileSource"/> </Unit144> <Unit145> <Filename Value="filesources\filesystem\ufilesystemlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemListOperation"/> </Unit145> <Unit146> <Filename Value="filesources\filesystem\ufilesystemmoveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit146> <Unit147> <Filename Value="filesources\filesystem\ufilesystemsetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemSetFilePropertyOperation"/> </Unit147> <Unit148> <Filename Value="filesources\filesystem\ufilesystemsplitoperation.pas"/> <IsPartOfProject Value="True"/> </Unit148> <Unit149> <Filename Value="filesources\filesystem\ufilesystemutil.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileSystemUtil"/> </Unit149> <Unit150> <Filename Value="filesources\filesystem\ufilesystemwipeoperation.pas"/> <IsPartOfProject Value="True"/> </Unit150> <Unit151> <Filename Value="filesources\multiarchive\fmultiarchivecopyoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="MultiArchiveCopyOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> </Unit151> <Unit152> <Filename Value="filesources\multiarchive\umultiarchivecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit152> <Unit153> <Filename Value="filesources\multiarchive\umultiarchivecopyinoperation.pas"/> <IsPartOfProject Value="True"/> </Unit153> <Unit154> <Filename Value="filesources\multiarchive\umultiarchivecopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveCopyOutOperation"/> </Unit154> <Unit155> <Filename Value="filesources\multiarchive\umultiarchivedeleteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit155> <Unit156> <Filename Value="filesources\multiarchive\umultiarchiveexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit156> <Unit157> <Filename Value="filesources\multiarchive\umultiarchivefilesource.pas"/> <IsPartOfProject Value="True"/> </Unit157> <Unit158> <Filename Value="filesources\multiarchive\umultiarchivelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiArchiveListOperation"/> </Unit158> <Unit159> <Filename Value="filesources\multiarchive\umultiarchivetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit159> <Unit160> <Filename Value="filesources\multiarchive\umultiarchiveutil.pas"/> <IsPartOfProject Value="True"/> </Unit160> <Unit161> <Filename Value="filesources\multilist\umultilistfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiListFileSource"/> </Unit161> <Unit162> <Filename Value="filesources\multilist\umultilistlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMultiListListOperation"/> </Unit162> <Unit163> <Filename Value="filesources\searchresult\usearchresultfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchResultFileSource"/> </Unit163> <Unit164> <Filename Value="filesources\searchresult\usearchresultlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSearchResultListOperation"/> </Unit164> <Unit165> <Filename Value="filesources\tempfilesystem\utempfilesystemfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit165> <Unit166> <Filename Value="filesources\vfs\uvfsexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit166> <Unit167> <Filename Value="filesources\vfs\uvfsfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit167> <Unit168> <Filename Value="filesources\vfs\uvfslistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uVfsListOperation"/> </Unit168> <Unit169> <Filename Value="filesources\wcxarchive\fwcxarchivecopyoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="WcxArchiveCopyOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> </Unit169> <Unit170> <Filename Value="filesources\wcxarchive\uwcxarchivecalcstatisticsoperation.pas"/> <IsPartOfProject Value="True"/> </Unit170> <Unit171> <Filename Value="filesources\wcxarchive\uwcxarchivecopyinoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveCopyInOperation"/> </Unit171> <Unit172> <Filename Value="filesources\wcxarchive\uwcxarchivecopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveCopyOutOperation"/> </Unit172> <Unit173> <Filename Value="filesources\wcxarchive\uwcxarchivedeleteoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveDeleteOperation"/> </Unit173> <Unit174> <Filename Value="filesources\wcxarchive\uwcxarchiveexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit174> <Unit175> <Filename Value="filesources\wcxarchive\uwcxarchivefilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveFileSource"/> </Unit175> <Unit176> <Filename Value="filesources\wcxarchive\uwcxarchivelistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveListOperation"/> </Unit176> <Unit177> <Filename Value="filesources\wcxarchive\uwcxarchivetestarchiveoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWcxArchiveTestArchiveOperation"/> </Unit177> <Unit178> <Filename Value="filesources\wfxplugin\fwfxplugincopymoveoperationoptions.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="WfxPluginCopyMoveOperationOptionsUI"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> </Unit178> <Unit179> <Filename Value="filesources\wfxplugin\uwfxplugincopyinoperation.pas"/> <IsPartOfProject Value="True"/> </Unit179> <Unit180> <Filename Value="filesources\wfxplugin\uwfxplugincopyoperation.pas"/> <IsPartOfProject Value="True"/> </Unit180> <Unit181> <Filename Value="filesources\wfxplugin\uwfxplugincopyoutoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginCopyOutOperation"/> </Unit181> <Unit182> <Filename Value="filesources\wfxplugin\uwfxplugincreatedirectoryoperation.pas"/> <IsPartOfProject Value="True"/> </Unit182> <Unit183> <Filename Value="filesources\wfxplugin\uwfxplugindeleteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit183> <Unit184> <Filename Value="filesources\wfxplugin\uwfxpluginexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit184> <Unit185> <Filename Value="filesources\wfxplugin\uwfxpluginfilesource.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginFileSource"/> </Unit185> <Unit186> <Filename Value="filesources\wfxplugin\uwfxpluginlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWfxPluginListOperation"/> </Unit186> <Unit187> <Filename Value="filesources\wfxplugin\uwfxpluginmoveoperation.pas"/> <IsPartOfProject Value="True"/> </Unit187> <Unit188> <Filename Value="filesources\wfxplugin\uwfxpluginsetfilepropertyoperation.pas"/> <IsPartOfProject Value="True"/> </Unit188> <Unit189> <Filename Value="filesources\wfxplugin\uwfxpluginutil.pas"/> <IsPartOfProject Value="True"/> </Unit189> <Unit190> <Filename Value="filesources\winnet\uwinnetexecuteoperation.pas"/> <IsPartOfProject Value="True"/> </Unit190> <Unit191> <Filename Value="filesources\winnet\uwinnetfilesource.pas"/> <IsPartOfProject Value="True"/> </Unit191> <Unit192> <Filename Value="filesources\winnet\uwinnetlistoperation.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uWinNetListOperation"/> </Unit192> <Unit193> <Filename Value="fileviews\ubrieffileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uBriefFileView"/> </Unit193> <Unit194> <Filename Value="fileviews\ucolumnsfileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uColumnsFileView"/> </Unit194> <Unit195> <Filename Value="fileviews\ucolumnsfileviewvtv.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uColumnsFileViewVtv"/> </Unit195> <Unit196> <Filename Value="fileviews\ufileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileView"/> </Unit196> <Unit197> <Filename Value="fileviews\ufileviewheader.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewHeader"/> </Unit197> <Unit198> <Filename Value="fileviews\ufileviewhistory.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewHistory"/> </Unit198> <Unit199> <Filename Value="fileviews\ufileviewwithpanels.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWithPanels"/> </Unit199> <Unit200> <Filename Value="fileviews\ufileviewworker.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uFileViewWorker"/> </Unit200> <Unit201> <Filename Value="fileviews\uorderedfileview.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uOrderedFileView"/> </Unit201> <Unit202> <Filename Value="fopenwith.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOpenWith"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fOpenWith"/> </Unit202> <Unit203> <Filename Value="platform\unix\ukeyfile.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uKeyFile"/> </Unit203> <Unit204> <Filename Value="fsyncdirsdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSyncDirsDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fSyncDirsDlg"/> </Unit204> <Unit205> <Filename Value="fsyncdirsperformdlg.pas"/> <IsPartOfProject Value="True"/> <HasResources Value="True"/> <UnitName Value="fSyncDirsPerformDlg"/> </Unit205> <Unit206> <Filename Value="platform\unix\glib\ugio2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGio2"/> </Unit206> <Unit207> <Filename Value="platform\unix\glib\ugobject2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGObject2"/> </Unit207> <Unit208> <Filename Value="platform\unix\glib\uglib2.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uGLib2"/> </Unit208> <Unit209> <Filename Value="uspecialdir.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uSpecialDir"/> </Unit209> <Unit210> <Filename Value="fstartingsplash.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmStartingSplash"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit210> <Unit211> <Filename Value="frames\foptionsdirectoryhotlist.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDirectoryHotlist"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="foptionsDirectoryHotlist"/> </Unit211> <Unit212> <Filename Value="fhotdirexportimport.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmhotdirexportimport"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> </Unit212> <Unit213> <Filename Value="platform\unix\mime\umimecache.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeCache"/> </Unit213> <Unit214> <Filename Value="platform\unix\uxdg.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uXdg"/> </Unit214> <Unit215> <Filename Value="platform\unix\mime\umimetype.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uMimeType"/> </Unit215> <Unit216> <Filename Value="frames\foptionstoolsdiffer.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsDiffer"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolsDiffer"/> </Unit216> <Unit217> <Filename Value="frames\foptionsfileassoc.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFileAssoc"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFileAssoc"/> </Unit217> <Unit218> <Filename Value="frames\foptionsbriefview.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsBriefView"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsBriefView"/> </Unit218> <Unit219> <Filename Value="fmaincommandsdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmMainCommandsDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fMainCommandsDlg"/> </Unit219> <Unit220> <Filename Value="frames\fsearchplugin.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmSearchPlugin"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fSearchPlugin"/> </Unit220> <Unit221> <Filename Value="udiffonp.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDiffONP"/> </Unit221> <Unit222> <Filename Value="udiffond.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="uDiffOND"/> </Unit222> <Unit223> <Filename Value="fdeletedlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmDeleteDlg"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="fDeleteDlg"/> </Unit223> <Unit224> <Filename Value="ufavoritetabs.pas"/> <IsPartOfProject Value="True"/> </Unit224> <Unit225> <Filename Value="frames\foptionsfavoritetabs.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsFavoriteTabs"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsFavoriteTabs"/> </Unit225> <Unit226> <Filename Value="frames\foptionstoolseditor.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsEditor"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsToolsEditor"/> </Unit226> <Unit227> <Filename Value="frames\foptionstabsextra.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="frmOptionsTabsExtra"/> <HasResources Value="True"/> <ResourceBaseClass Value="Frame"/> <UnitName Value="fOptionsTabsExtra"/> </Unit227> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\doublecmd"/> </Target> <SearchPaths> <IncludeFiles Value="$(LazarusDir)\ide;$(ProjOutDir);..\sdk;..\units"/> <OtherUnitFiles Value="platform;platform\$(SrcOS);..\sdk;frames;fileviews;filesources;filesources\filesystem;filesources\multiarchive;filesources\multilist;filesources\searchresult;filesources\tempfilesystem;filesources\vfs;filesources\wcxarchive;filesources\wfxplugin;filesources\winnet;platform\unix\glib;platform\unix\mime;filesources\gio"/> <UnitOutputDirectory Value="..\units\$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> <SrcPath Value="$(LazarusDir)\lcl;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType);$(fpcsrcdir)\packages\fcl-base\src"/> </SearchPaths> <Conditionals Value="if TargetOS = 'darwin' then begin UsageCustomOptions += ' -k-macosx_version_min -k10.5'; UsageCustomOptions += ' -XR/Developer/SDKs/MacOSX10.5.sdk/'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> <Optimizations> <OptimizationLevel Value="0"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <ExecuteBefore> <Command Value="$(ProjPath)\platform\svn2revisioninc$(ExeExt).cmd $MakeFile($(ProjOutDir))"/> <CompileReasons Run="False"/> </ExecuteBefore> </Other> </CompilerOptions> <Debugging> <Exceptions Count="1"> <Item1> <Name Value="EXmlConfigNotFound"/> </Item1> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffindview.lrt�������������������������������������������������������������������0000644�0001750�0000144�00000000223�12023046500�015775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMFINDVIEW.CAPTION=Find TFRMFINDVIEW.BTNFIND.CAPTION=&Find TFRMFINDVIEW.BTNCLOSE.CAPTION=&Cancel TFRMFINDVIEW.CBCASESENS.CAPTION=C&ase sensitive �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdescredit.lrt������������������������������������������������������������������0000644�0001750�0000144�00000000472�12351626461�016154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMDESCREDIT.CAPTION=File/folder comment TFRMDESCREDIT.LBLEDITCOMMENTFOR.CAPTION=E&dit comment for: TFRMDESCREDIT.LBLENCODING.CAPTION=&Encoding: TFRMDESCREDIT.LBLFILENAME.CAPTION=??? TFRMDESCREDIT.BTNOK.CAPTION=&OK TFRMDESCREDIT.BTNCANCEL.CAPTION=&Cancel TFRMDESCREDIT.ACTSAVEDESCRIPTION.CAPTION=Save Description ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwlxprototypes.pas��������������������������������������������������������������0000644�0001750�0000144�00000003366�11740433676�017204� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uwlxprototypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, WlxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory } TListLoad = function (ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; { Optional } TListLoadNext = function (ParentWin,PluginWin:thandle;FileToLoad:pchar;ShowFlags:integer):integer; TListCloseWindow = procedure (ListWin:thandle); TListGetDetectString = procedure (DetectString:pchar;maxlen:integer); TListSearchText = function (ListWin:thandle;SearchString:pchar; SearchParameter:integer):integer; TListSearchDialog = function (ListWin:thandle;FindNext:integer):integer; TListSendCommand = function (ListWin:thandle;Command,Parameter:integer):integer; TListPrint = function (ListWin:thandle;FileToPrint,DefPrinter:pchar; PrintFlags:integer;var Margins:trect):integer; TListNotificationReceived = function (ListWin:thandle;Message,wParam,lParam:integer):integer; TListSetDefaultParams = procedure (dps:pListDefaultParamStruct); TListGetPreviewBitmap = function (FileToLoad:pchar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; { Unicode } TListLoadW = function (ParentWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):thandle; TListLoadNextW = function (ParentWin,PluginWin:thandle;FileToLoad:pwidechar;ShowFlags:integer):integer; TListSearchTextW = function (ListWin:thandle;SearchString:pwidechar; SearchParameter:integer):integer; TListPrintW = function (ListWin:thandle;FileToPrint,DefPrinter:pwidechar; PrintFlags:integer;var Margins:trect):integer; TListGetPreviewBitmapW = function (FileToLoad:pwidechar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; {$CALLING DEFAULT} implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufunctionthread.pas�������������������������������������������������������������0000644�0001750�0000144�00000010362�11747211345�017222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Executing functions in a thread. Copyright (C) 2009-2011 Przemysław Nagay (cobines@gmail.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 uFunctionThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs; type TFunctionThreadMethod = procedure(Params: Pointer) of object; PFunctionThreadItem = ^TFunctionThreadItem; TFunctionThreadItem = record Method: TFunctionThreadMethod; Params: Pointer; end; TFunctionThread = class(TThread) private FFunctionsToCall: TFPList; FWaitEvent: PRTLEvent; FLock: TCriticalSection; FFinished: Boolean; protected procedure Execute; override; public constructor Create(CreateSuspended: Boolean); reintroduce; destructor Destroy; override; procedure QueueFunction(AFunctionToCall: TFunctionThreadMethod; AParams: Pointer = nil); procedure Finish; class procedure Finalize(var AThread: TFunctionThread); property Finished: Boolean read FFinished; end; implementation uses LCLProc, uDebug, uExceptions {$IFDEF MSWINDOWS} , ActiveX {$ENDIF} ; constructor TFunctionThread.Create(CreateSuspended: Boolean); begin FWaitEvent := RTLEventCreate; FFunctionsToCall := TFPList.Create; FLock := TCriticalSection.Create; FFinished := False; FreeOnTerminate := False; inherited Create(CreateSuspended, DefaultStackSize); end; destructor TFunctionThread.Destroy; var i: Integer; begin RTLeventdestroy(FWaitEvent); FLock.Acquire; for i := 0 to FFunctionsToCall.Count - 1 do Dispose(PFunctionThreadItem(FFunctionsToCall[i])); FLock.Release; FreeThenNil(FFunctionsToCall); FreeThenNil(FLock); inherited Destroy; end; procedure TFunctionThread.QueueFunction(AFunctionToCall: TFunctionThreadMethod; AParams: Pointer); var pItem: PFunctionThreadItem; begin if (not Terminated) and Assigned(AFunctionToCall) then begin New(pItem); pItem^.Method := AFunctionToCall; pItem^.Params := AParams; FLock.Acquire; try FFunctionsToCall.Add(pItem); finally FLock.Release; end; RTLeventSetEvent(FWaitEvent); end; end; procedure TFunctionThread.Finish; begin Terminate; RTLeventSetEvent(FWaitEvent); end; procedure TFunctionThread.Execute; var pItem: PFunctionThreadItem; begin {$IFDEF MSWINDOWS} CoInitializeEx(nil, COINIT_APARTMENTTHREADED); {$ENDIF} try while (not Terminated) or (FFunctionsToCall.Count > 0) do begin RTLeventResetEvent(FWaitEvent); pItem := nil; FLock.Acquire; try if FFunctionsToCall.Count > 0 then begin pItem := PFunctionThreadItem(FFunctionsToCall[0]); FFunctionsToCall.Delete(0); end; finally FLock.Release; end; if Assigned(pItem) then begin try pItem^.Method(pItem^.Params); Dispose(pItem); except on e: Exception do begin Dispose(pItem); HandleException(e, Self); end; end; end else begin RTLeventWaitFor(FWaitEvent); end; end; finally {$IFDEF MSWINDOWS} CoUninitialize; {$ENDIF} FFinished := True; end; end; class procedure TFunctionThread.Finalize(var AThread: TFunctionThread); begin AThread.Finish; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not AThread.Finished do CheckSynchronize(100); {$ENDIF} AThread.WaitFor; AThread.Free; AThread := nil; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fviewer.pas���������������������������������������������������������������������0000644�0001750�0000144�00000212525�12657663572�015512� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Integrated viewer form Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Radek Polak ported to lazarus: changes: 23.7. - fixed: scroll bar had wrong max value until user pressed key (by Radek Polak) - fixed: wrong scrolling with scroll bar - now look at ScrollBarVertScroll (by Radek Polak) Dmitry Kolomiets 15.03.08 changes: - Added WLX api support (TC WLX api v 1.8) Rustem Rakhimov 25.04.10 changes: - fullscreen - function for edit image - slide show - some Viwer function } unit fViewer; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls, ComCtrls, LMessages, LCLProc, Menus, Dialogs, ExtDlgs, StdCtrls, Buttons, ColorBox, Spin, Grids, ActnList, viewercontrol, GifAnim, fFindView, WLXPlugin, uWLXModule, uFileSource, fModView, Types, uThumbnails, uFormCommands, uOSForms; type { TfrmViewer } TfrmViewer = class(TAloneForm, IFormCommands) actAbout: TAction; actCopyFile: TAction; actDeleteFile: TAction; actMirror: TAction; actRotate270: TAction; actRotate180: TAction; actRotate90: TAction; actSaveAs: TAction; actStretchImage: TAction; actMoveFile: TAction; actLoadPrevFile: TAction; actLoadNextFile: TAction; actReload: TAction; actionList: TActionList; btnCopyFile1: TSpeedButton; btnDeleteFile1: TSpeedButton; btnMoveFile1: TSpeedButton; btnNext1: TSpeedButton; btnPrev1: TSpeedButton; btnReload1: TSpeedButton; cbSlideShow: TCheckBox; ColorBoxPaint: TColorBox; ComboBoxWidth: TComboBox; ComboBoxPaint: TComboBox; DrawPreview: TDrawGrid; gboxPaint: TGroupBox; gboxView: TGroupBox; gboxSlideShow: TGroupBox; GifAnim: TGifAnim; miReload: TMenuItem; miLookBook: TMenuItem; miDiv4: TMenuItem; miPreview: TMenuItem; miScreenshot: TMenuItem; miFullScreen: TMenuItem; miSave: TMenuItem; miSaveAs: TMenuItem; gboxHightlight: TGroupBox; Image: TImage; lblHightlight: TLabel; miZoomOut: TMenuItem; miZoomIn: TMenuItem; miRotate: TMenuItem; miMirror: TMenuItem; mi270: TMenuItem; mi180: TMenuItem; mi90: TMenuItem; miSearchPrev: TMenuItem; miPrint: TMenuItem; miSearchNext: TMenuItem; pnlFolder: TPanel; pnlPreview: TPanel; pnlEditFile: TPanel; PanelEditImage: TPanel; pmiSelectAll: TMenuItem; miDiv5: TMenuItem; pmiCopy: TMenuItem; pnlImage: TPanel; pnlText: TPanel; miDiv3: TMenuItem; miEncoding: TMenuItem; miPlugins: TMenuItem; miSeparator: TMenuItem; pmEditMenu: TPopupMenu; SavePictureDialog: TSavePictureDialog; sboxImage: TScrollBox; btnCutTuImage: TSpeedButton; btnResize: TSpeedButton; btnUndo: TSpeedButton; btnHightlight: TSpeedButton; btn270: TSpeedButton; btn90: TSpeedButton; btnMirror: TSpeedButton; btnZoomIn: TSpeedButton; btnZoomOut: TSpeedButton; btnReload: TSpeedButton; btnPaint: TSpeedButton; btnFullScreen: TSpeedButton; seTimeShow: TSpinEdit; btnRedEye: TSpeedButton; btnNext: TSpeedButton; btnPrev: TSpeedButton; btnMoveFile: TSpeedButton; btnDeleteFile: TSpeedButton; btnCopyFile: TSpeedButton; btnGifMove: TSpeedButton; btnGifToBmp: TSpeedButton; btnNextGifFrame: TSpeedButton; btnPrevGifFrame: TSpeedButton; Splitter: TSplitter; Status: TStatusBar; MainMenu: TMainMenu; miFile: TMenuItem; miPrev: TMenuItem; miNext: TMenuItem; miView: TMenuItem; miExit: TMenuItem; miImage: TMenuItem; miStretch: TMenuItem; miStretchOnlyLarge: TMenuItem; miCenter: TMenuItem; miText: TMenuItem; miBin: TMenuItem; miHex: TMenuItem; miWrapText: TMenuItem; miAbout: TMenuItem; miAbout2: TMenuItem; miDiv1: TMenuItem; miSearch: TMenuItem; miDiv2: TMenuItem; miGraphics: TMenuItem; miEdit: TMenuItem; miSelectAll: TMenuItem; miCopyToClipboard: TMenuItem; TimerViewer: TTimer; ViewerControl: TViewerControl; procedure actExecute(Sender: TObject); procedure btnCopyMoveFileClick(Sender: TObject); procedure btnCutTuImageClick(Sender: TObject); procedure btnDeleteFileClick(Sender: TObject); procedure btnFullScreenClick(Sender: TObject); procedure btnGifMoveClick(Sender: TObject); procedure btnGifToBmpClick(Sender: TObject); procedure btnPaintHightlight(Sender: TObject); procedure btnPrevGifFrameClick(Sender: TObject); procedure btnRedEyeClick(Sender: TObject); procedure btnResizeClick(Sender: TObject); procedure btnUndoClick(Sender: TObject); procedure DrawPreviewDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure DrawPreviewSelection(Sender: TObject; aCol, aRow: Integer); procedure DrawPreviewTopleftChanged(Sender: TObject); procedure FormCreate(Sender : TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormResize(Sender: TObject); procedure FormShow(Sender: TObject); procedure GifAnimMouseEnter(Sender: TObject); procedure ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ImageMouseEnter(Sender: TObject); procedure ImageMouseLeave(Sender: TObject); procedure ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer ); procedure ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure miPreviewClick(Sender: TObject); procedure miSaveAsClick(Sender: TObject); procedure miSaveClick(Sender: TObject); procedure miScreenShotClick(Sender: TObject); procedure miFullScreenClick(Sender: TObject); procedure miPluginsClick(Sender: TObject); procedure miPrintClick(Sender: TObject); procedure miSearchNextClick(Sender: TObject); procedure miSearchPrevClick(Sender: TObject); procedure miZoomClick(Sender: TObject); procedure PanelEditImageMouseEnter(Sender: TObject); procedure pnlImageResize(Sender: TObject); procedure pnlTextMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure pnlTextMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure sboxImageMouseEnter(Sender: TObject); procedure sboxImageMouseLeave(Sender: TObject); procedure sboxImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure btnNextGifFrameClick(Sender: TObject); procedure SplitterChangeBounds(Sender: TObject); procedure TimerViewerTimer(Sender: TObject); procedure ViewerControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure frmViewerClose(Sender: TObject; var CloseAction: TCloseAction); procedure frmViewerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure miExitClick(Sender: TObject); procedure miStretchClick(Sender: TObject); procedure miStretchOnlyLargeClick(Sender: TObject); procedure miCenterClick(Sender: TObject); procedure miTextClick(Sender: TObject); procedure miAbout2Click(Sender: TObject); procedure miSearchClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure miGraphicsClick(Sender: TObject); procedure miCopyToClipboardClick(Sender: TObject); procedure miSelectAllClick(Sender: TObject); procedure miChangeEncodingClick(Sender:TObject); procedure ViewerControlMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure ViewerControlMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure ViewerPositionChanged(Sender:TObject); procedure miRotateClick(Sender: TObject); function PluginShowFlags : Integer; procedure UpdateImagePlacement; private FileList: TStringList; iActiveFile, tmpX, tmpY, startX, startY, endX, endY, UndoSX, UndoSY, UndoEX, UndoEY, cas, i_timer:Integer; bAnimation, bImage, bPlugin, bQuickView, MDFlag, ImgEdit: Boolean; FThumbSize: TSize; FFindDialog:TfrmFindView; FFileSource: IFileSource; FLastSearchPos: PtrInt; tmp_all: TCustomBitmap; FModSizeDialog: TfrmModView; FThumbnailManager: TThumbnailManager; FBitmapList: TBitmapList; FCommands: TFormCommands; FZoomFactor: Double; //--------------------- WlxPlugins:TWLXModuleList; ActivePlugin:Integer; //--------------------- function GetListerRect: TRect; function CheckPlugins(const sFileName: String; bForce: Boolean = False): Boolean; function CheckGraphics(const sFileName:String):Boolean; function LoadGraphics(const sFileName:String): Boolean; procedure AdjustImageSize; procedure DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); procedure MakeTextEncodingsMenu; procedure ActivatePanel(Panel: TPanel); procedure ReopenAsTextIfNeeded; procedure CheckXY; procedure UndoTmp; procedure CreateTmp; procedure CutToImage; procedure Res(W, H: integer); procedure RedEyes; procedure SaveImageAs (Var sExt: String; senderSave: boolean; Quality: integer); procedure CreatePreview(FullPathToFile:string; index:integer; delete: boolean = false); property Commands: TFormCommands read FCommands implements IFormCommands; protected procedure WMSetFocus(var Message: TLMSetFocus); message LM_SETFOCUS; public constructor Create(TheOwner: TComponent; aFileSource: IFileSource; aQuickView: Boolean = False); overload; constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure LoadFile(const aFileName: String); procedure LoadNextFile(const aFileName: String); procedure LoadFile(iIndex:Integer); procedure ExitPluginMode; published // Commands for hotkey manager procedure cm_About(const Params: array of string); procedure cm_Reload(const Params: array of string); procedure cm_LoadNextFile(const Params: array of string); procedure cm_LoadPrevFile(const Params: array of string); procedure cm_MoveFile(const Params: array of string); procedure cm_CopyFile(const Params: array of string); procedure cm_DeleteFile(const Params: array of string); procedure cm_StretchImage(const Params: array of string); procedure cm_SaveAs(const Params: array of string); procedure cm_Rotate90(const Params: array of string); procedure cm_Rotate180(const Params: array of string); procedure cm_Rotate270(const Params: array of string); procedure cm_Mirror(const Params: array of string); end; procedure ShowViewer(const FilesToView:TStringList; const aFileSource: IFileSource = nil); implementation {$R *.lfm} uses FileUtil, IntfGraphics, Math, uLng, uShowMsg, uGlobs, LCLType, LConvEncoding, DCClassesUtf8, uFindMmap, DCStrUtils, uDCUtils, LCLIntf, uDebug, uHotkeyManager, uConvEncoding, DCBasicTypes, DCOSUtils, uOSUtils, uFindByrMr; const HotkeysCategory = 'Viewer'; // Status bar panels indexes. sbpFileName = 0; sbpFileNr = 1; // Text sbpPosition = 2; sbpFileSize = 3; sbpTextEncoding = 4; // WLX sbpPluginName = 2; // Graphics sbpCurrentResolution = 2; sbpFullResolution = 3; procedure ShowViewer(const FilesToView:TStringList; const aFileSource: IFileSource); var Viewer: TfrmViewer; begin //DCDebug('ShowViewer - Using Internal'); Viewer := TfrmViewer.Create(Application, aFileSource); Viewer.FileList.Assign(FilesToView);// Make a copy of the list Viewer.DrawPreview.RowCount:= Viewer.FileList.Count; with Viewer.ViewerControl do case gViewerMode of 1: ViewerMode:= vmText; 2: ViewerMode:= vmBin; 3: ViewerMode:= vmHex; 4: ViewerMode:= vmWrap; //5: ViewerMode:= vmBook; end; Viewer.LoadFile(0); Viewer.Show; if Viewer.miPreview.Checked then begin Viewer.miPreview.Checked := not(Viewer.miPreview.Checked); Viewer.miPreviewClick(Viewer); end; end; constructor TfrmViewer.Create(TheOwner: TComponent; aFileSource: IFileSource; aQuickView: Boolean); begin bQuickView:= aQuickView; inherited Create(TheOwner); FFileSource := aFileSource; FLastSearchPos := -1; FZoomFactor := 1.0; FThumbnailManager:= nil; if not bQuickView then Menu:= MainMenu; FBitmapList:= TBitmapList.Create(True); FCommands := TFormCommands.Create(Self, actionList); end; constructor TfrmViewer.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; destructor TfrmViewer.Destroy; begin FreeThenNil(FileList); FreeThenNil(FThumbnailManager); inherited Destroy; FreeAndNil(WlxPlugins); FFileSource := nil; // If this is temp file source, the files will be deleted. tmp_all.Free; end; procedure TfrmViewer.LoadFile(const aFileName: String); var i: Integer; aName: String; dwFileAttributes: TFileAttrs; begin dwFileAttributes := mbFileGetAttr(aFileName); if dwFileAttributes = faInvalidAttributes then begin ShowMessage(rsMsgErrNoFiles); Exit; end; FLastSearchPos := -1; Caption := aFileName; if bQuickView then begin iActiveFile := 0; FileList.Text := aFileName; end; // Clear text on status bar. for i := 0 to Status.Panels.Count - 1 do Status.Panels[i].Text := ''; Screen.Cursor:= crHourGlass; try if FPS_ISDIR(dwFileAttributes) then aName:= IncludeTrailingPathDelimiter(aFileName) else begin aName:= aFileName; end; if CheckPlugins(aName) then ActivatePanel(nil) else if FPS_ISDIR(dwFileAttributes) then begin ActivatePanel(pnlFolder); pnlFolder.Caption:= rsPropsFolder + ': ' + aFileName; end else if CheckGraphics(aFileName) and LoadGraphics(aFileName) then ActivatePanel(pnlImage) else begin ViewerControl.FileName := aFileName; ActivatePanel(pnlText); end; Status.Panels[sbpFileName].Text:= aFileName; finally Screen.Cursor:= crDefault; end; end; procedure TfrmViewer.LoadNextFile(const aFileName: String); begin if bPlugin then with WlxPlugins.GetWlxModule(ActivePlugin) do begin if FileParamVSDetectStr(aFileName, False) then begin if CallListLoadNext(Self.Handle, aFileName, PluginShowFlags) <> LISTPLUGIN_ERROR then Exit; end; end; ExitPluginMode; ViewerControl.ResetEncoding; LoadFile(aFileName); end; procedure TfrmViewer.LoadFile(iIndex: Integer); begin iActiveFile := iIndex; LoadFile(FileList.Strings[iIndex]); gboxPaint.Visible:=false; gboxHightlight.Visible:=false; Status.Panels[sbpFileNr].Text:=Format('%d/%d',[iIndex+1,FileList.Count]); end; procedure TfrmViewer.FormKeyPress(Sender: TObject; var Key: Char); begin // The following keys work only in QuickView mode because there is no menu there. // Otherwise this function is never called for those keys // because the menu shortcuts are automatically used. if bQuickView then case Key of 'N', 'n': begin cm_LoadNextFile([]); Key := #0; end; 'P', 'p': begin cm_LoadPrevFile([]); Key := #0; end; '1': begin miTextClick(miText); Key := #0; end; '2': begin miTextClick(miBin); Key := #0; end; '3': begin miTextClick(miHex); Key := #0; end; '4': begin miTextClick(miWrapText); Key := #0; end; '6': begin miGraphicsClick(miGraphics); Key := #0; end; '7': begin miPluginsClick(miPlugins); Key := #0; end; end; end; procedure TfrmViewer.FormResize(Sender: TObject); begin if bPlugin then WlxPlugins.GetWlxModule(ActivePlugin).ResizeWindow(GetListerRect); end; procedure TfrmViewer.FormShow(Sender: TObject); begin {$IF DEFINED(LCLGTK2)} if not pnlPreview.Visible then begin pnlPreview.Visible:= True; pnlPreview.Visible:= False; end; {$ENDIF} end; procedure TfrmViewer.GifAnimMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MDFlag := true; X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); cas:=0; if (button = mbLeft) and gboxHightlight.Visible then begin if (X>StartX) and (X<=StartX+10) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=1; tmpX:=X-StartX; tmpY:=Y-StartY; end; if (Y>StartY+10) and (Y<=EndY-10) then begin cas:=2; tmpX:=X-StartX; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=3; tmpX:=X-StartX; tmpY:=EndY-Y; end; if (Y<StartY) or (Y>EndY) then cas:=0; end; if (X>StartX+10) and (X<=EndX-10) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=4; tmpY:=Y-StartY; end; if (Y>StartY+10) and (Y<=EndY-10)then begin cas:=5; tmpX:=X-StartX; tmpY:=Y-StartY; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=6; tmpY:=EndY-Y; end; If (Y<StartY) or (Y>EndY) then cas:=0; end; if (X>EndX-10) and (X<=EndX) then begin if (Y>StartY) and (Y<=StartY+10) then begin cas:=7; tmpX := EndX-X; tmpY:=StartY-Y; end; if (Y>StartY+10) and (Y<=EndY-10) then begin cas:=8; tmpX := EndX-X; end; if (Y>EndY-9) and (Y<=EndY) then begin cas:=9; tmpX := EndX-X; tmpY:=EndY-Y; end; If (Y<StartY) or (Y>EndY) then cas:=0; end; if (X<StartX) or (X>EndX) then cas:=0; end; if cas=0 then begin StartX := X; StartY := Y; end; if gboxPaint.Visible then begin CreateTmp; Image.Picture.Bitmap.Canvas.MoveTo (x,y); end; if not (gboxHightlight.Visible) and not (gboxPaint.Visible) then begin tmpX:=x; tmpY:=y; Image.Cursor:=crHandPoint; end; end; procedure TfrmViewer.ImageMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.ImageMouseLeave(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=false; end; procedure TfrmViewer.ImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var tmp: integer; begin if gboxHightlight.Visible then Image.Cursor:=crCross; if miFullScreen.Checked then begin sboxImage.Cursor:=crDefault; Image.Cursor:=crDefault; i_timer:=0; end; X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); if MDFlag then begin if gboxHightlight.Visible then begin if cas=0 then begin EndX:=X; EndY:=Y; end; if cas=1 then begin StartX:= X-tmpX; StartY:=Y-tmpY; end; if cas=2 then StartX:= X-tmpX; if cas=3then begin StartX:= X-tmpX; EndY:=Y+tmpY; end; if cas=4 then StartY:=Y-tmpY; if cas=5 then begin tmp:=EndX-StartX; StartX:= X-tmpX; EndX:=StartX+tmp; tmp:=EndY-StartY; StartY:= Y-tmpY; EndY:=StartY+tmp; end; if cas=6 then EndY:=Y+tmpY; if cas=7 then begin EndX:=X+tmpX; StartY:=Y-tmpY; end; if cas=8 then endX:=X+tmpX; if cas=9 then begin EndX:=X+tmpX; EndY:=Y+tmpY; end; if StartX<0 then begin StartX:=0; EndX:= UndoEX; end; if StartY<0 then begin StartY:=0; EndY:= UndoEY; end; if endX> Image.Picture.Width then endX:=Image.Picture.Width; if endY> Image.Picture.Height then endY:=Image.Picture.Height; with Image.Picture.Bitmap.Canvas do begin DrawFocusRect(Rect(UndoSX,UndoSY,UndoEX,UndoEY)); DrawFocusRect(Rect(UndoSX+10,UndoSY+10,UndoEX-10,UndoEY-10)); DrawFocusRect(Rect(StartX,StartY,EndX,EndY)); DrawFocusRect(Rect(StartX+10,StartY+10,EndX-10,EndY-10));//Pen.Mode := pmNotXor; lblHightlight.Caption := IntToStr(EndX-StartX)+'x'+IntToStr(EndY-StartY); UndoSX:=StartX; UndoSY:=StartY; UndoEX:=EndX; UndoEY:=EndY; end; end; if gboxPaint.Visible then begin with Image.Picture.Bitmap.Canvas do begin Brush.Style:= bsClear; Pen.Width := StrToInt(ComboBoxWidth.Text); Pen.Color := ColorBoxPaint.Selected; Pen.Style := psSolid; tmp:= Pen.Width+10; if ComboBoxPaint.text='Pen' then LineTo (x,y) else begin if (startX>x) and (startY<y) then CopyRect (Rect(UndoSX+tmp,UndoSY-tmp,UndoEX-tmp,UndoEY+tmp), tmp_all.canvas,Rect(UndoSX+tmp,UndoSY-tmp,UndoEX-tmp,UndoEY+tmp)); if (startX<x) and (startY>y) then CopyRect (Rect(UndoSX-tmp,UndoSY+tmp,UndoEX+tmp,UndoEY-tmp), tmp_all.canvas,Rect(UndoSX-tmp,UndoSY+tmp,UndoEX+tmp,UndoEY-tmp)); if (startX>x) and (startY>y) then CopyRect (Rect(UndoSX+tmp,UndoSY+tmp,UndoEX-tmp,UndoEY-tmp), tmp_all.canvas,Rect(UndoSX+tmp,UndoSY+tmp,UndoEX-tmp,UndoEY-tmp)) else CopyRect (Rect(UndoSX-tmp,UndoSY-tmp,UndoEX+tmp,UndoEY+tmp), tmp_all.canvas,Rect(UndoSX-tmp,UndoSY-tmp,UndoEX+tmp,UndoEY+tmp));//UndoTmp; if ComboBoxPaint.text='Rect' then Rectangle(Rect(StartX,StartY,X,Y))else Ellipse(StartX,StartY,X,Y); end; UndoSX:=StartX; UndoSY:=StartY; UndoEX:=X; UndoEY:=Y; end; end; if not (gboxHightlight.Visible) and not (gboxPaint.Visible) then begin sboxImage.VertScrollBar.Position:=sboxImage.VertScrollBar.Position+tmpY-y; sboxImage.HorzScrollBar.Position:=sboxImage.HorzScrollBar.Position+tmpX-x; end; end; end; procedure TfrmViewer.ImageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin X:=round(X*Image.Picture.Width/Image.Width); // for correct paint after zoom Y:=round(Y*Image.Picture.Height/Image.Height); MDFlag:=false; if PanelEditImage.Visible then begin if (button = mbLeft) and gboxHightlight.Visible then begin UndoTmp; CheckXY; with Image.Picture.Bitmap.Canvas do begin Brush.Style := bsClear; Pen.Style := psDot; Pen.Color := clHighlight; DrawFocusRect(Rect(StartX,StartY,EndX,EndY)); DrawFocusRect(Rect(StartX+10,StartY+10,EndX-10,EndY-10)); lblHightlight.Caption := IntToStr(EndX-StartX)+'x'+IntToStr(EndY-StartY); end; end; end; Image.Cursor:=crDefault; end; procedure TfrmViewer.CreatePreview(FullPathToFile: String; index: integer; delete: Boolean = false); var bmpThumb : TBitmap = nil; begin if pnlPreview.Visible or delete then begin if not Assigned(FThumbnailManager) then FThumbnailManager:= TThumbnailManager.Create(DrawPreview.Canvas.Brush.Color); if delete then begin FThumbnailManager.RemovePreview(FullPathToFile); // delete thumb if need if pnlPreview.Visible then FBitmapList.Delete(index); end else begin bmpThumb:= FThumbnailManager.CreatePreview(FullPathToFile); // Insert to the BitmapList FBitmapList.Insert(index, bmpThumb); end; end; end; procedure TfrmViewer.WMSetFocus(var Message: TLMSetFocus); begin if bPlugin then WlxPlugins.GetWlxModule(ActivePlugin).SetFocus; end; procedure TfrmViewer.miPreviewClick(Sender: TObject); var i: integer; begin miPreview.Checked:= not (miPreview.Checked); pnlPreview.Visible := miPreview.Checked; Splitter.Visible := pnlPreview.Visible; if not pnlPreview.Visible then FBitmapList.Clear; Application.ProcessMessages; if miPreview.Checked then begin for i:=0 to FileList.Count-1 do CreatePreview(FileList.Strings[i], i); DrawPreview.FixedRows:= 0; DrawPreview.FixedCols:= 0; DrawPreview.Refresh; end; if bPlugin then WlxPlugins.GetWlxModule(ActivePlugin).ResizeWindow(GetListerRect); end; procedure TfrmViewer.miSaveAsClick(Sender: TObject); begin FModSizeDialog:= TfrmModView.Create(Application); try FModSizeDialog.pnlSize.Visible:=false; FModSizeDialog.pnlCopyMoveFile.Visible :=false; FModSizeDialog.pnlQuality.Visible:=true; FModSizeDialog.Caption:= rsViewImageType; if FModSizeDialog.ShowModal = mrOk then begin if StrToInt(FModSizeDialog.teQuality.Text)<=100 then SaveImageAs(FModSizeDialog.sExt,false,StrToInt(FModSizeDialog.teQuality.Text)) else msgError(rsViewBadQuality); end finally FreeAndNil(FModSizeDialog); end; end; procedure TfrmViewer.miSaveClick(Sender: TObject); var sExt: String; begin DrawPreview.BeginUpdate; try CreatePreview(FileList.Strings[iActiveFile], iActiveFile, True); sExt:= ExtractFileExt(FileList.Strings[iActiveFile]); SaveImageAs(sExt, True, 80); CreatePreview(FileList.Strings[iActiveFile], iActiveFile); finally DrawPreview.EndUpdate; end; end; procedure TfrmViewer.miFullScreenClick(Sender: TObject); begin miFullScreen.Checked:= not (miFullScreen.Checked); if miFullScreen.Checked then begin WindowState:= wsMaximized; BorderStyle:= bsNone; MainMenu.Items.Visible:=false; gboxPaint.Visible:= false; gboxHightlight.Visible:=false; miStretch.Checked:= miFullScreen.Checked; if miPreview.Checked then miPreviewClick(Sender); end else begin WindowState:= wsNormal; BorderStyle:= bsSizeable; //Viewer.MainMenu.Items.Visible:=true; // why it work ??? PanelEditImage.Height:= 50; Height:= Height div 2; Width:= Width div 2; end; if ExtractOnlyFileExt(FileList.Strings[iActiveFile]) <> 'gif' then begin btnHightlight.Visible:=not(miFullScreen.Checked); btnPaint.Visible:=not(miFullScreen.Checked); btnResize.Visible:=not(miFullScreen.Checked); end; sboxImage.HorzScrollBar.Visible:= not(miFullScreen.Checked); sboxImage.VertScrollBar.Visible:= not(miFullScreen.Checked); TimerViewer.Enabled:=miFullScreen.Checked; btnReload.Visible:=not(miFullScreen.Checked); Status.Visible:=not(miFullScreen.Checked); gboxSlideShow.Visible:=miFullScreen.Checked; AdjustImageSize; ShowOnTop; end; procedure TfrmViewer.RedEyes; var tmp:TBitMap; x,y,r,g,b: integer; col: TColor; begin if (EndX=StartX) or (EndY=StartY) then Exit; UndoTmp; tmp:=TBitMap.Create; tmp.Width:= EndX-StartX; tmp.Height:= EndY-StartY; for x:=0 to (EndX-StartX) div 2 do begin for y:=0 to (EndY-StartY) div 2 do begin if y<round(sqrt((1-(sqr(x)/sqr((EndX-StartX)/2)))*sqr((EndY-StartY)/2))) then begin col:=Image.Picture.Bitmap.Canvas.Pixels[x+StartX+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[x+(EndX-StartX) div 2,y+(EndY-StartY) div 2]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,y+(EndY-StartY) div 2]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX+x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2+x,(EndY-StartY) div 2-y]:= rgb(r,g,b); col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; r:=GetRValue(col); g:=GetGValue(col); b:=GetBValue(col); if (r>100) and (g<100) and (b<100) then r:=b; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,(EndY-StartY) div 2-y]:= rgb(r,g,b); end else begin col:=Image.Picture.Bitmap.Canvas.Pixels[x+StartX+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; tmp.Canvas.Pixels[x+(EndX-StartX) div 2,y+(EndY-StartY) div 2]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,y+StartY+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,y+(EndY-StartY) div 2]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX+x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2+x,(EndY-StartY) div 2-y]:= col; col:=Image.Picture.Bitmap.Canvas.Pixels[StartX-x+(EndX-StartX) div 2,StartY-y+(EndY-StartY) div 2]; tmp.Canvas.Pixels[(EndX-StartX) div 2-x,(EndY-StartY) div 2-y]:= col; end; end; end; Image.Picture.Bitmap.Canvas.Draw (StartX,StartY,tmp); CreateTmp; tmp.Free; end; procedure TfrmViewer.CutToImage; begin UndoTmp; Image.Picture.Bitmap.Canvas.CopyRect(rect(0,0,EndX-StartX,EndY-StartY), Image.Picture.Bitmap.Canvas, rect(startX,StartY,EndX,EndY)); Image.Picture.Bitmap.SetSize (EndX-StartX,EndY-StartY); CreateTmp; StartX:=0;StartY:=0;EndX:=0;EndY:=0; end; procedure TfrmViewer.UndoTmp; begin Image.Picture.Bitmap.Canvas.Clear; Image.Picture.Bitmap.Canvas.Draw(0,0,tmp_all); end; procedure TfrmViewer.CreateTmp; begin tmp_all.Free; tmp_all:= TBitmap.Create; tmp_all.Assign(Image.Picture.Graphic); end; procedure TfrmViewer.CheckXY; var tmp: integer; begin if EndX<StartX then begin tmp:=StartX; StartX:=EndX; EndX:=tmp end; if EndY<StartY then begin tmp:=StartY; StartY:=EndY; EndY:=tmp end; end; procedure TfrmViewer.Res (W, H: integer); var tmp: TCustomBitmap; r: TRect; begin if gboxHightlight.Visible then UndoTmp; tmp:= TBitmap.Create; tmp.Assign(Image.Picture.Graphic); r := Rect(0, 0, W, H); Image.Picture.Bitmap.SetSize(W,H); Image.Picture.Bitmap.Canvas.Clear; Image.Picture.Bitmap.Canvas.StretchDraw(r, tmp); tmp.free; CreateTmp; StartX:=0; StartY:=0; EndX:=0; EndY:=0; end; function TfrmViewer.PluginShowFlags : Integer; begin Result:= IfThen(miStretch.Checked, lcp_fittowindow, 0) or IfThen(miCenter.Checked, lcp_center, 0) or IfThen(miStretchOnlyLarge.Checked, lcp_fitlargeronly, 0) end; function TfrmViewer.CheckPlugins(const sFileName: String; bForce: Boolean = False): Boolean; var I: Integer; AFileName: String; ShowFlags: Integer; WlxModule: TWlxModule; begin AFileName:= ExcludeTrailingBackslash(sFileName); ShowFlags:= IfThen(bForce, lcp_forceshow, 0) or PluginShowFlags; // DCDebug('WlXPlugins.Count = ' + IntToStr(WlxPlugins.Count)); for I:= 0 to WlxPlugins.Count - 1 do if WlxPlugins.GetWlxModule(I).FileParamVSDetectStr(AFileName, bForce) then begin DCDebug('I = ' + IntToStr(I)); if not WlxPlugins.LoadModule(I) then Continue; WlxModule:= WlxPlugins.GetWlxModule(I); DCDebug('WlxModule.Name = ', WlxModule.Name); if WlxModule.CallListLoad(Self.Handle, sFileName, ShowFlags) = 0 then begin WlxModule.UnloadModule; Continue; end; ActivePlugin:= I; WlxModule.ResizeWindow(GetListerRect); miPrint.Enabled:= WlxModule.CanPrint; // Set focus to plugin window if not bQuickView then WlxModule.SetFocus; Exit(True); end; // Plugin not found ActivePlugin:= -1; Result:= False; end; procedure TfrmViewer.ExitPluginMode; begin if (WlxPlugins.Count > 0) and (ActivePlugin >= 0) then begin WlxPlugins.GetWlxModule(ActivePlugin).CallListCloseWindow; end; bPlugin:= False; ActivePlugin:= -1; miPrint.Enabled:= False; end; procedure TfrmViewer.miPluginsClick(Sender: TObject); begin bPlugin:= CheckPlugins(FileList.Strings[iActiveFile], True); if bPlugin then ActivatePanel(nil) else ViewerControl.FileName := FileList.Strings[iActiveFile]; end; procedure TfrmViewer.miPrintClick(Sender: TObject); var aRect: TRect; begin if bPlugin then begin aRect:= GetListerRect; WlxPlugins.GetWlxModule(ActivePlugin).CallListPrint(FileList[iActiveFile], EmptyStr, 0, aRect); end; end; procedure TfrmViewer.SaveImageAs(var sExt: String; senderSave: boolean; Quality: integer); var sFileName: string; ico : TIcon = nil; jpg : TJpegImage = nil; pnm : TPortableAnyMapGraphic = nil; fsFileStream: TFileStreamEx = nil; begin if senderSave then sFileName:= FileList.Strings[iActiveFile] else begin if not SavePictureDialog.Execute then Exit; sFileName:= ChangeFileExt(SavePictureDialog.FileName, sExt); end; try fsFileStream:= TFileStreamEx.Create(sFileName, fmCreate); if (sExt = '.jpg') or (sExt = '.jpeg') then begin jpg := TJpegImage.Create; try jpg.Assign(Image.Picture.Graphic); jpg.CompressionQuality := Quality; jpg.SaveToStream(fsFileStream); finally jpg.Free; end; end; if sExt = '.ico' then begin ico := TIcon.Create; try ico.Assign(Image.Picture.Graphic); ico.SaveToStream(fsFileStream); finally ico.Free; end; end; if sExt = '.pnm' then begin pnm := TPortableAnyMapGraphic.Create; try pnm.Assign(Image.Picture.Graphic); pnm.SaveToStream(fsFileStream); finally pnm.Free; end; end; if (sExt = '.png') or (sExt = '.bmp') then begin Image.Picture.SaveToStreamWithFileExt(fsFileStream, sExt); end; finally FreeThenNil(fsFileStream); end; end; procedure TfrmViewer.miSearchNextClick(Sender: TObject); begin DoSearch(True, False); end; procedure TfrmViewer.miSearchPrevClick(Sender: TObject); begin DoSearch(True, True); end; procedure TfrmViewer.miZoomClick(Sender: TObject); begin miStretch.Checked := False; FZoomFactor := Min(Image.ClientWidth / Image.Picture.Width, Image.ClientHeight / Image.Picture.Height); if (Sender = miZoomIn) or (Sender = btnZoomIn) then FZoomFactor := FZoomFactor * 1.1 else begin FZoomFactor := FZoomFactor / 1.1; end; AdjustImageSize; end; procedure TfrmViewer.PanelEditImageMouseEnter(Sender: TObject); begin if miFullScreen.Checked then PanelEditImage.Height:= 50; end; procedure TfrmViewer.pnlImageResize(Sender: TObject); begin if bImage then AdjustImageSize; end; procedure TfrmViewer.pnlTextMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin end; procedure TfrmViewer.pnlTextMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if Shift=[ssCtrl] then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; pnlText.Font.Size:=gFonts[dcfMain].Size; pnlText.Repaint; Handled:=True; Exit; end; end; procedure TfrmViewer.sboxImageMouseEnter(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=true; end; procedure TfrmViewer.sboxImageMouseLeave(Sender: TObject); begin if miFullScreen.Checked then TimerViewer.Enabled:=false; end; procedure TfrmViewer.sboxImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if miFullScreen.Checked then begin sboxImage.Cursor:=crDefault; Image.Cursor:=crDefault; i_timer:=0; end; end; procedure TfrmViewer.btnNextGifFrameClick(Sender: TObject); begin GifAnim.Animate:=false; GifAnim.NextFrame; end; procedure TfrmViewer.SplitterChangeBounds(Sender: TObject); begin if DrawPreview.Width div (DrawPreview.DefaultColWidth+6)>0 then DrawPreview.ColCount:= DrawPreview.Width div (DrawPreview.DefaultColWidth + 6); if FileList.Count mod DrawPreview.ColCount > 0 then DrawPreview.RowCount:= FileList.Count div DrawPreview.ColCount + 1 else DrawPreview.RowCount:= FileList.Count div DrawPreview.ColCount; if bPlugin then WlxPlugins.GetWlxModule(ActivePlugin).ResizeWindow(GetListerRect); end; procedure TfrmViewer.DrawPreviewDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var i,z,t, X, Y: Integer; sExt, sName, shortName: String; bmpThumb: TBitmap; begin aRect:= Classes.Rect(aRect.Left + 2, aRect.Top + 2, aRect.Right - 2, aRect.Bottom - 2); i:= (aRow * DrawPreview.ColCount) + aCol; // Calculate FileList index if (i >= 0) and (i < FileList.Count) then begin sName:= ExtractOnlyFileName(FileList.Strings[i]); sExt:= ExtractFileExt(FileList.Strings[i]); DrawPreview.Canvas.FillRect(aRect); // Clear cell if (i >= 0) and (i < FBitmapList.Count) then begin bmpThumb:= FBitmapList[i]; z:= DrawPreview.Canvas.TextHeight('Pp') + 4; X:= aRect.Left + (aRect.Right - aRect.Left - bmpThumb.Width) div 2; Y:= aRect.Top + (aRect.Bottom - aRect.Top - bmpThumb.Height - z) div 2; // Draw thumbnail at center DrawPreview.Canvas.Draw(X, Y, bmpThumb); end; z:= (DrawPreview.Width - DrawPreview.ColCount * DrawPreview.DefaultColWidth) div DrawPreview.ColCount div 2; if DrawPreview.Canvas.GetTextWidth(sName+sExt) < DrawPreview.DefaultColWidth then begin t:= (DrawPreview.DefaultColWidth-DrawPreview.Canvas.GetTextWidth(sName+sExt)) div 2; DrawPreview.Canvas.TextOut(aRect.Left+z+t, aRect.Top + FThumbSize.cy + 2, sName+sExt); end else begin shortName:= ''; t:= 1; while DrawPreview.Canvas.GetTextWidth(shortName+'...'+sExt) < (DrawPreview.DefaultColWidth-15) do begin shortName:= shortName + sName[t]; Inc(t); end; DrawPreview.Canvas.TextOut(aRect.Left+z, aRect.Top + FThumbSize.cy + 2, shortName+'...'+sExt); end; end; end; procedure TfrmViewer.DrawPreviewSelection(Sender: TObject; aCol, aRow: Integer); var I: Integer; begin gboxHightlight.Visible:= False; gboxPaint.Visible:= False; I:= DrawPreview.Row * DrawPreview.ColCount + DrawPreview.Col; if I < Filelist.Count then LoadNextFile(FileList.Strings[I]); end; procedure TfrmViewer.DrawPreviewTopleftChanged(Sender: TObject); begin DrawPreview.LeftCol:= 0; end; procedure TfrmViewer.TimerViewerTimer(Sender: TObject); begin if (miFullScreen.Checked) and (PanelEditImage.Height>3) then PanelEditImage.Height := PanelEditImage.Height-1; i_timer:=i_timer+1; if (cbSlideShow.Checked) and (i_timer=60*seTimeShow.Value) then begin cm_LoadNextFile([]); i_timer:=0; end; if i_timer=180 then begin sboxImage.Cursor:=crNone; Image.Cursor:=crNone; end; end; procedure TfrmViewer.ViewerControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then pmEditMenu.PopUp(); end; procedure TfrmViewer.frmViewerClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:=caFree; gImageStretch:= miStretch.Checked; gImageStretchOnlyLarge:= miStretchOnlyLarge.Checked; gImageCenter:= miCenter.Checked; gPreviewVisible := miPreview.Checked; gImagePaintMode := ComboBoxPaint.text; gImagePaintWidth := StrToInt(ComboBoxWidth.Text) ; gImagePaintColor := ColorBoxPaint.Selected; gTextPosition := ViewerControl.Position; case ViewerControl.ViewerMode of vmText: gViewerMode := 1; vmBin : gViewerMode := 2; vmHex : gViewerMode := 3; vmWrap: gViewerMode := 4; vmBook: gViewerMode := 4; end; if Assigned(WlxPlugins) then begin ExitPluginMode; end; end; procedure TfrmViewer.frmViewerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (not bQuickView) and (Key in [VK_Q, VK_ESCAPE]) then begin Key := 0; Close; Exit; end; if (not (bImage or bAnimation)) then case Key of VK_F: if Shift = [ssCtrl] then begin DoSearch(False, False); Key:= 0; Exit; end; VK_F3: if Shift - [ssShift] = [] then begin DoSearch(True, Shift = [ssShift]); Key:= 0; Exit; end; end; end; procedure TfrmViewer.miExitClick(Sender: TObject); begin Close; end; procedure TfrmViewer.UpdateImagePlacement; begin if bImage then begin if gboxHightlight.Visible then begin gboxPaint.Visible:=false; gboxHightlight.Visible:=false; gboxView.Visible:=true; UndoTmp; end; AdjustImageSize; end else if bPlugin then WlxPlugins.GetWLxModule(ActivePlugin).CallListSendCommand(lc_newparams , PluginShowFlags) end; procedure TfrmViewer.miStretchClick(Sender: TObject); begin FZoomFactor:= 1.0; miStretch.Checked:= not miStretch.Checked; UpdateImagePlacement; end; procedure TfrmViewer.miCenterClick(Sender: TObject); begin miCenter.Checked:= not miCenter.Checked; UpdateImagePlacement; end; procedure TfrmViewer.miStretchOnlyLargeClick(Sender: TObject); begin miStretchOnlyLarge.Checked:= not miStretchOnlyLarge.Checked; UpdateImagePlacement; end; procedure TfrmViewer.miTextClick(Sender: TObject); begin ExitPluginMode; ReopenAsTextIfNeeded; (Sender as TMenuItem).Checked:= True; if Sender = miText then ViewerControl.ViewerMode := vmText else if Sender = miBin then ViewerControl.ViewerMode := vmBin else if Sender = miHex then ViewerControl.ViewerMode := vmHex else if Sender = miWrapText then ViewerControl.ViewerMode := vmWrap; if Sender = miLookBook then begin with ViewerControl do begin ViewerMode := vmBook; Color:= gBookBackgroundColor; Font.Color:= gBookFontColor; Font.Quality:= fqAntialiased; ColCount:= gColCount; Position:= gTextPosition; end; FontOptionsToFont(gFonts[dcfViewerBook], ViewerControl.Font); end else begin with ViewerControl do begin Color:= clWindow; Font.Color:= clWindowText; Font.Quality:= fqDefault; ColCount:= 1; end; FontOptionsToFont(gFonts[dcfViewer], ViewerControl.Font); end; end; procedure TfrmViewer.miAbout2Click(Sender: TObject); begin MsgOK(rsViewAboutText); end; procedure TfrmViewer.miSearchClick(Sender: TObject); begin FLastSearchPos := -1; DoSearch(False, False); end; procedure TfrmViewer.FormCreate(Sender: TObject); var HMViewer: THMForm; begin if not bQuickView then InitPropStorage(Self); HMViewer := HotMan.Register(Self, HotkeysCategory); HMViewer.RegisterActionList(actionList); ViewerControl.OnGuessEncoding:= @DetectEncoding; FontOptionsToFont(gFonts[dcfViewer], ViewerControl.Font); FileList := TStringList.Create; WlxPlugins:=TWLXModuleList.Create; WlxPlugins.Assign(gWLXPlugins); DCDebug('WLX: Load - OK'); FFindDialog:=nil; // dialog is created in first use sboxImage.DoubleBuffered := True; miStretch.Checked := gImageStretch; miStretchOnlyLarge.Checked := gImageStretchOnlyLarge; miCenter.Checked := gImageCenter; miPreview.Checked := gPreviewVisible; ComboBoxPaint.Text := gImagePaintMode; ComboBoxWidth.Text := IntToStr(gImagePaintWidth); ColorBoxPaint.Selected := gImagePaintColor; Image.Stretch:= True; Image.AutoSize:= False; Image.Proportional:= False; Image.SetBounds(0, 0, sboxImage.ClientWidth, sboxImage.ClientHeight); FThumbSize := gThumbSize; DrawPreview.DefaultColWidth := FThumbSize.cx + 4; DrawPreview.DefaultRowHeight := FThumbSize.cy + DrawPreview.Canvas.TextHeight('Pp') + 6; MakeTextEncodingsMenu; Status.Panels[sbpFileNr].Alignment := taRightJustify; Status.Panels[sbpPosition].Alignment := taRightJustify; Status.Panels[sbpFileSize].Alignment := taRightJustify; ViewerPositionChanged(Self); FixFormIcon(Handle); end; procedure TfrmViewer.btnCutTuImageClick(Sender: TObject); begin CutToImage; end; procedure TfrmViewer.btnDeleteFileClick(Sender: TObject); begin if msgYesNo(Format(rsMsgDelSel, [FileList.Strings[iActiveFile]])) then begin CreatePreview(FileList.Strings[iActiveFile], iActiveFile, true); mbDeleteFile(FileList.Strings[iActiveFile]); FileList.Delete(iActiveFile); LoadFile(iActiveFile); DrawPreview.Repaint; SplitterChangeBounds(Sender); end; end; procedure TfrmViewer.btnCopyMoveFileClick(Sender: TObject); begin FModSizeDialog:= TfrmModView.Create(Application); try FModSizeDialog.pnlQuality.Visible:= False; FModSizeDialog.pnlSize.Visible:= False; FModSizeDialog.pnlCopyMoveFile.Visible:= True; if Sender = btnMoveFile then FModSizeDialog.Caption:= rsDlgMv else FModSizeDialog.Caption:= rsDlgCp; if FModSizeDialog.ShowModal = mrOk then begin if FModSizeDialog.Path = '' then msgError(rsMsgInvalidPath) else begin CopyFile(FileList.Strings[iActiveFile],FModSizeDialog.Path+PathDelim+ExtractFileName(FileList.Strings[iActiveFile])); if (Sender = btnMoveFile) or (Sender = btnMoveFile1) then begin CreatePreview(FileList.Strings[iActiveFile], iActiveFile, true); mbDeleteFile(FileList.Strings[iActiveFile]); FileList.Delete(iActiveFile); LoadFile(iActiveFile); DrawPreview.Repaint; SplitterChangeBounds(Sender); end; end; end; finally FreeAndNil(FModSizeDialog); end; end; procedure TfrmViewer.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmViewer.btnFullScreenClick(Sender: TObject); begin miFullScreenClick(Sender); end; procedure TfrmViewer.btnGifMoveClick(Sender: TObject); begin GifAnim.Animate:=not GifAnim.Animate; btnNextGifFrame.Enabled:= not GifAnim.Animate; btnPrevGifFrame.Enabled:= not GifAnim.Animate; if GifAnim.Animate then btnGifMove.Caption:='||' else btnGifMove.Caption:='|>'; end; procedure TfrmViewer.btnGifToBmpClick(Sender: TObject); begin GifAnim.Animate:=False; Image.Picture.Bitmap.Create; Image.Picture.Bitmap.Width := GifAnim.Width; Image.Picture.Bitmap.Height := GifAnim.Height; Image.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,GifAnim.Width,GifAnim.Height),GifAnim.Canvas,Rect(0,0,GifAnim.Width,GifAnim.Height)); miSaveAsClick(sender); end; procedure TfrmViewer.btnPaintHightlight(Sender: TObject); var bmp: TCustomBitmap = nil; GraphicClass: TGraphicClass; sExt: String; fsFileStream: TFileStreamEx = nil; begin if not ImgEdit then begin try sExt:= ExtractFileExt(FileList.Strings[iActiveFile]); fsFileStream:= TFileStreamEx.Create(FileList.Strings[iActiveFile], fmOpenRead or fmShareDenyNone); GraphicClass := GetGraphicClassForFileExtension(sExt); if (GraphicClass <> nil) and (GraphicClass.InheritsFrom(TCustomBitmap)) then begin Image.DisableAutoSizing; bmp := TCustomBitmap(GraphicClass.Create); bmp.LoadFromStream(fsFileStream); Image.Picture.Bitmap := TBitmap.Create; Image.Picture.Bitmap.Height:= bmp.Height; Image.Picture.Bitmap.Width:= bmp.Width; Image.Picture.Bitmap.Canvas.Draw(0, 0, bmp); Image.EnableAutoSizing; end; finally FreeThenNil(bmp); FreeThenNil(fsFileStream); end; {miStretch.Checked:= False; Image.Stretch:= miStretch.Checked; Image.Proportional:= Image.Stretch; Image.Autosize:= not(miStretch.Checked); AdjustImageSize; } end; if gboxHightlight.Visible then UndoTmp; if Sender = btnHightlight then begin gboxHightlight.Visible := not (gboxHightlight.Visible); gboxPaint.Visible:= False; end else begin gboxPaint.Visible:= not (gboxPaint.Visible); gboxHightlight.Visible:= False; end; ImgEdit:= True; CreateTmp; end; procedure TfrmViewer.btnPrevGifFrameClick(Sender: TObject); begin GifAnim.Animate:=False; GifAnim.PriorFrame; end; procedure TfrmViewer.btnRedEyeClick(Sender: TObject); begin RedEyes; end; procedure TfrmViewer.btnResizeClick(Sender: TObject); begin FModSizeDialog:= TfrmModView.Create(Application); try FModSizeDialog.pnlQuality.Visible:=false; FModSizeDialog.pnlCopyMoveFile.Visible :=false; FModSizeDialog.pnlSize.Visible:=true; FModSizeDialog.teHeight.Text:= IntToStr(Image.Picture.Bitmap.Height); FModSizeDialog.teWidth.Text := IntToStr(Image.Picture.Bitmap.Width); FModSizeDialog.Caption:= rsViewNewSize; if FModSizeDialog.ShowModal = mrOk then begin Res(StrToInt(FModSizeDialog.teWidth.Text), StrToInt(FModSizeDialog.teHeight.Text)); AdjustImageSize; end; finally FreeAndNil(FModSizeDialog); end; end; procedure TfrmViewer.btnUndoClick(Sender: TObject); begin UndoTmp; end; procedure TfrmViewer.FormDestroy(Sender: TObject); begin FreeAndNil(FFindDialog); FreeAndNil(FBitmapList); HotMan.UnRegister(Self); end; procedure TfrmViewer.ReopenAsTextIfNeeded; begin if bImage or bAnimation or bPlugin then begin Image.Picture := nil; ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; procedure TfrmViewer.miGraphicsClick(Sender: TObject); begin if CheckGraphics(FileList.Strings[iActiveFile]) then begin ViewerControl.FileName := ''; // unload current file if any is loaded if LoadGraphics(FileList.Strings[iActiveFile]) then ActivatePanel(pnlImage) else begin ViewerControl.FileName := FileList.Strings[iActiveFile]; ActivatePanel(pnlText); end; end; end; procedure TfrmViewer.miCopyToClipboardClick(Sender: TObject); begin if bPlugin then WlxPlugins.GetWLxModule(ActivePlugin).CallListSendCommand(lc_copy, 0) else ViewerControl.CopyToClipboard; end; procedure TfrmViewer.miSelectAllClick(Sender: TObject); begin if bPlugin then WlxPlugins.GetWLxModule(ActivePlugin).CallListSendCommand(lc_selectall, 0) else ViewerControl.SelectAll; end; procedure TfrmViewer.miChangeEncodingClick(Sender: TObject); begin ViewerControl.EncodingName := (Sender as TMenuItem).Caption; Status.Panels[4].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end; procedure TfrmViewer.ViewerControlMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift=[ssCtrl])and(gFonts[dcfViewer].Size>MIN_FONT_SIZE_VIEWER) then begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size-1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; Handled:=True; Exit; end; end; procedure TfrmViewer.ViewerControlMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin if (Shift=[ssCtrl])and(gFonts[dcfViewer].Size<MAX_FONT_SIZE_VIEWER) then begin gFonts[dcfViewer].Size:=gFonts[dcfViewer].Size+1; ViewerControl.Font.Size:=gFonts[dcfViewer].Size; ViewerControl.Repaint; Handled:=True; Exit; end; end; function TfrmViewer.CheckGraphics(const sFileName:String):Boolean; var sExt: String; {$IFDEF LCLGTK2} fsBitmap: TFileStreamEx = nil; {$ENDIF} begin sExt:= LowerCase(ExtractFileExt(sFileName)); {$IFDEF LCLGTK2} // TImage crash on displaying monochrome bitmap on Linux/GTK2 // See details at http://bugs.freepascal.org/view.php?id=12362 if (sExt = '.bmp') then try fsBitmap:= TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); // Get the number of bits per pixel from bitmap header fsBitmap.Seek($1C, soFromBeginning); // Don't open monochrome bitmap as image if (fsBitmap.ReadWord = 1) then Exit(False); finally fsBitmap.Free; end; {$ENDIF} Result:= Image.Picture.FindGraphicClassWithFileExt(sExt, False) <> nil; end; // Adjust Image size (width and height) to sboxImage size procedure TfrmViewer.AdjustImageSize; const fmtImageInfo = '%dx%d (%.0f %%)'; var dScaleFactor : Double; iLeft, iTop, iWidth, iHeight : Integer; begin dScaleFactor:= FZoomFactor; // Place and resize image if (miStretch.Checked) then begin dScaleFactor:= Min(sboxImage.ClientWidth / Image.Picture.Width ,sboxImage.ClientHeight / Image.Picture.Height); dScaleFactor:= IfThen((miStretchOnlyLarge.Checked) and (dScaleFactor > 1.0), 1.0, dScaleFactor); end; iWidth:= Trunc(Image.Picture.Width * dScaleFactor); iHeight:= Trunc(Image.Picture.Height * dScaleFactor); if (miCenter.Checked) then begin iLeft:= (sboxImage.ClientWidth - iWidth) div 2; iTop:= (sboxImage.ClientHeight - iHeight) div 2; end else begin iLeft:= 0; iTop:= 0; end; Image.SetBounds(Max(iLeft,0), Max(iTop,0), iWidth , iHeight); // Update scrollbars // TODO: fix - calculations are correct but it seems like scroll bars // are being updated only after a second call to Form.Resize if (iLeft < 0) then sboxImage.HorzScrollBar.Position:= -iLeft; if (iTop < 0) then sboxImage.VertScrollBar.Position:= -iTop; // Update status bar Status.Panels[sbpCurrentResolution].Text:= Format(fmtImageInfo, [iWidth,iHeight, 100.0 * dScaleFactor]); Status.Panels[sbpFullResolution].Text:= Format(fmtImageInfo, [Image.Picture.Width,Image.Picture.Height, 100.0]); end; // Try to rotate image procedure TfrmViewer.miRotateClick(Sender: TObject); var x, y: Integer; xWidth, yHeight: Integer; SourceImg: TLazIntfImage = nil; TargetImg: TLazIntfImage = nil; begin TargetImg:= TLazIntfImage.Create(0, 0); SourceImg:= Image.Picture.Bitmap.CreateIntfImage; TargetImg.DataDescription:= SourceImg.DataDescription; // use the same image format xWidth:= Image.Picture.Bitmap.Width - 1; yHeight:= Image.Picture.Bitmap.Height - 1; if Sender = mi180 then begin TargetImg.SetSize(xWidth + 1, yHeight + 1); for y:= 0 to yHeight do begin for x:= 0 to xWidth do begin TargetImg.Colors[x, y]:= SourceImg.Colors[xWidth - x, yHeight - y]; end; end; end; if (Sender = mi270) or (Sender =btn270)then begin TargetImg.SetSize(yHeight + 1, xWidth + 1); for y:= 0 to xWidth do begin for x:= 0 to yHeight do begin TargetImg.Colors[x, y]:= SourceImg.Colors[xWidth - y, x]; end; end; x:= Image.Width; Image.Width:= Image.Height; Image.Height:= x; end; if (Sender = mi90) or (Sender=btn90) then begin TargetImg.SetSize(yHeight + 1, xWidth + 1); for y:= 0 to xWidth do begin for x:= 0 to yHeight do begin TargetImg.Colors[x, y]:= SourceImg.Colors[y, yHeight - x]; end; end; x:= Image.Width; Image.Width:= Image.Height; Image.Height:= x; end; if (Sender = miMirror) or (Sender = btnMirror)then begin TargetImg.SetSize(xWidth + 1, yHeight + 1); for y:= 0 to yHeight do begin for x:= 0 to xWidth do begin TargetImg.Colors[x, y]:= SourceImg.Colors[xWidth - x, y]; end; end; end; Image.Picture.Bitmap.LoadFromIntfImage(TargetImg); FreeThenNil(SourceImg); FreeThenNil(TargetImg); AdjustImageSize; CreateTmp; end; function TfrmViewer.GetListerRect: TRect; begin Result:= ClientRect; Dec(Result.Bottom, Status.Height); if Splitter.Visible then begin Inc(Result.Left, Splitter.Left + Splitter.Width); end; end; procedure TfrmViewer.miScreenShotClick(Sender: TObject); var ScreenDC: HDC; bmp: TCustomBitmap; begin Visible:= False; Application.ProcessMessages; // Hide viewer window bmp := TBitmap.Create; ScreenDC := GetDC(0); bmp.LoadFromDevice(ScreenDC); ReleaseDC(0, ScreenDC); Image.Picture.Bitmap.Height:= bmp.Height; Image.Picture.Bitmap.Width:= bmp.Width; Image.Picture.Bitmap.Canvas.Draw(0, 0, bmp); CreateTmp; bmp.Free; Visible:= True; ImgEdit:= True; end; function TfrmViewer.LoadGraphics(const sFileName:String): Boolean; var sExt: String; fsFileHandle: System.THandle; fsFileStream: TFileStreamEx = nil; gifHeader: array[0..5] of AnsiChar; begin FZoomFactor:= 1.0; sExt:= ExtractOnlyFileExt(sFilename); if SameText(sExt, 'gif') then begin fsFileHandle:= mbFileOpen(sFileName, fmOpenRead or fmShareDenyNone); if (fsFileHandle = feInvalidHandle) then Exit(False); FileRead(fsFileHandle, gifHeader, SizeOf(gifHeader)); FileClose(fsFileHandle); end; // GifAnim supports only GIF89a if gifHeader <> 'GIF89a' then begin Image.Visible:= True; GifAnim.Visible:= False; try fsFileStream:= TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try Image.Picture.LoadFromStreamWithFileExt(fsFileStream, sExt); btnHightlight.Visible:= True; btnPaint.Visible:= True; btnResize.Visible:= True; miImage.Visible:= True; btnZoomIn.Visible:= True; btnZoomOut.Visible:= True; btn270.Visible:= True; btn90.Visible:= True; btnMirror.Visible:= True; btnGifMove.Visible:= False; btnGifToBmp.Visible:= False; btnNextGifFrame.Visible:= False; btnPrevGifFrame.Visible:= False; finally FreeAndNil(fsFileStream); end; miStretch.Checked:= not miStretch.Checked; miStretchClick(nil); except Exit(False); end; end else begin GifAnim.Visible:= True; Image.Visible:= False; try GifAnim.FileName:= UTF8ToSys(sFileName); btnHightlight.Visible:= False; btnPaint.Visible:= False; btnResize.Visible:= False; miImage.Visible:= False; btnZoomIn.Visible:= False; btnZoomOut.Visible:= False; btn270.Visible:= False; btn90.Visible:= False; btnMirror.Visible:= False; btnGifMove.Visible:= True; btnGifToBmp.Visible:= True; btnNextGifFrame.Visible:= True; btnPrevGifFrame.Visible:= True; except Exit(False); end; end; ImgEdit:= False; end; procedure TfrmViewer.DoSearch(bQuickSearch: Boolean; bSearchBackwards: Boolean); var PAdr: PtrInt; PAnsiAddr: PByte; bTextFound: Boolean; sSearchTextU: String; sSearchTextA: AnsiString; iSearchParameter: Integer; RecodeTable: TRecodeTable; begin // in first use create dialog if not Assigned(FFindDialog) then FFindDialog:= TfrmFindView.Create(Application); if (bQuickSearch and gFirstTextSearch) or not bQuickSearch then begin if bPlugin then begin // if plugin has specific search dialog if WlxPlugins.GetWLxModule(ActivePlugin).CallListSearchDialog(0) = LISTPLUGIN_OK then Exit; end; // Load search history FFindDialog.cbDataToFind.Items.Assign(glsSearchHistory); if FFindDialog.ShowModal <> mrOK then Exit; if FFindDialog.cbDataToFind.Text = '' then Exit; sSearchTextU:= FFindDialog.cbDataToFind.Text; // Save search history glsSearchHistory.Assign(FFindDialog.cbDataToFind.Items); gFirstTextSearch:= False; end else begin if bPlugin then begin // if plugin has specific search dialog if WlxPlugins.GetWLxModule(ActivePlugin).CallListSearchDialog(1) = LISTPLUGIN_OK then Exit; end; if glsSearchHistory.Count > 0 then sSearchTextU:= glsSearchHistory[0]; end; if bPlugin then begin iSearchParameter:= 0; if FFindDialog.cbCaseSens.Checked then iSearchParameter:= lcs_matchcase; WlxPlugins.GetWLxModule(ActivePlugin).CallListSearchText(sSearchTextU, iSearchParameter); end else begin // Choose search start position. if not bSearchBackwards then begin if FLastSearchPos = -1 then FLastSearchPos := 0 else if FLastSearchPos < ViewerControl.FileSize - 1 then FLastSearchPos := FLastSearchPos + 1; end else begin if FLastSearchPos = -1 then FLastSearchPos := ViewerControl.FileSize - 1 else if FLastSearchPos > 0 then FLastSearchPos := FLastSearchPos - 1; end; sSearchTextA:= ViewerControl.ConvertFromUTF8(sSearchTextU); // Using standard search algorithm if case insensitive and multibyte if FFindDialog.cbCaseSens.Checked and (ViewerControl.Encoding in ViewerEncodingMultiByte) then begin PAnsiAddr := PosMem(ViewerControl.GetDataAdr, ViewerControl.FileSize, FLastSearchPos, sSearchTextA, FFindDialog.cbCaseSens.Checked, bSearchBackwards); bTextFound := (PAnsiAddr <> Pointer(-1)); if bTextFound then FLastSearchPos := PAnsiAddr - ViewerControl.GetDataAdr; end // Using very slow search algorithm else if (ViewerControl.Encoding in ViewerEncodingMultiByte) or bSearchBackwards then begin PAdr := ViewerControl.FindUtf8Text(FLastSearchPos, sSearchTextU, FFindDialog.cbCaseSens.Checked, bSearchBackwards); bTextFound := (PAdr <> PtrInt(-1)); if bTextFound then FLastSearchPos := PAdr; end // Using very fast Boyer–Moore search algorithm else begin RecodeTable:= InitRecodeTable(ViewerControl.EncodingName, FFindDialog.cbCaseSens.Checked); PAdr := PosMemBoyerMur(ViewerControl.GetDataAdr + FLastSearchPos, ViewerControl.FileSize - FLastSearchPos, sSearchTextA, RecodeTable); bTextFound := (PAdr <> PtrInt(-1)); if bTextFound then FLastSearchPos := PAdr + FLastSearchPos; end; if bTextFound then begin // Text found, show it in ViewerControl if not visible ViewerControl.MakeVisible(FLastSearchPos); // Select found text. ViewerControl.SelectText(FLastSearchPos, FLastSearchPos + Length(sSearchTextA)); end else begin msgOK(Format(rsViewNotFound, ['"' + sSearchTextU + '"'])); FLastSearchPos := -1; end; end; end; procedure TfrmViewer.MakeTextEncodingsMenu; var I: Integer; mi: TMenuItem; EncodingsList: TStringList; begin miEncoding.Clear; EncodingsList := TStringList.Create; try ViewerControl.GetSupportedEncodings(EncodingsList); for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncoding); mi.Caption:= EncodingsList[I]; mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 1; mi.OnClick:= @miChangeEncodingClick; if ViewerControl.EncodingName = EncodingsList[I] then mi.Checked := True; miEncoding.Add(mi); end; finally FreeAndNil(EncodingsList); end; end; procedure TfrmViewer.ViewerPositionChanged(Sender:TObject); begin if ViewerControl.FileSize > 0 then begin Status.Panels[sbpPosition].Text := cnvFormatFileSize(ViewerControl.Position) + ' (' + IntToStr(ViewerControl.Percent) + ' %)'; end else Status.Panels[sbpPosition].Text:= cnvFormatFileSize(0) + ' (0 %)'; end; procedure TfrmViewer.ActivatePanel(Panel: TPanel); begin pnlFolder.Hide; pnlImage.Hide; pnlText.Hide; if Assigned(Panel) then Panel.Visible := True; bAnimation := (GifAnim.Visible); bImage := (Panel = pnlImage) and (bAnimation = False); bPlugin := (Panel = nil); miPlugins.Checked := (Panel = nil); miGraphics.Checked := (Panel = pnlImage); miEncoding.Visible := (Panel = pnlText); miEdit.Visible := (Panel = pnlText) or (Panel = nil); miImage.Visible := (bImage or bPlugin); miRotate.Visible := bImage; miZoomIn.Visible := bImage; miZoomOut.Visible := bImage; miFullScreen.Visible := bImage; miScreenshot.Visible := bImage; miSave.Visible := bImage; miSaveAs.Visible := bImage; if Panel = nil then begin Status.Panels[sbpPluginName].Text:= WlxPlugins.GetWLxModule(ActivePlugin).Name; end else if Panel = pnlText then begin if (not bQuickView) and CanFocus and ViewerControl.CanFocus then ViewerControl.SetFocus; case ViewerControl.ViewerMode of vmText: miText.Checked := True; vmWrap: miWrapText.Checked := True; vmBin: miBin.Checked := True; vmHex: miHex.Checked := True; vmBook: miLookBook.Checked := True; end; Status.Panels[sbpFileSize].Text:= cnvFormatFileSize(ViewerControl.FileSize) + ' (100 %)'; Status.Panels[sbpTextEncoding].Text := rsViewEncoding + ': ' + ViewerControl.EncodingName; end else if Panel = pnlImage then begin PanelEditImage.Visible:= not bQuickView; end; end; procedure TfrmViewer.cm_About(const Params: array of string); begin miAbout2Click(Self); end; procedure TfrmViewer.cm_Reload(const Params: array of string); begin LoadFile(iActiveFile); end; procedure TfrmViewer.cm_LoadNextFile(const Params: array of string); var I : Integer; begin I:= iActiveFile + 1; if I >= FileList.Count then I:= 0; if bPlugin then begin if (WlxPlugins.GetWlxModule(ActivePlugin).CallListLoadNext(Self.Handle, FileList[I], PluginShowFlags) <> LISTPLUGIN_ERROR) then Exit; end; ExitPluginMode; if pnlPreview.Visible then begin if DrawPreview.Col = DrawPreview.ColCount-1 then begin DrawPreview.Col:=0; DrawPreview.Row:= DrawPreview.Row+1; end else DrawPreview.Col:=DrawPreview.Col+1 end else LoadFile(I); end; procedure TfrmViewer.cm_LoadPrevFile(const Params: array of string); var I: Integer; begin I:= iActiveFile - 1; if I < 0 then I:= FileList.Count - 1; if bPlugin then begin if (WlxPlugins.GetWlxModule(ActivePlugin).CallListLoadNext(Self.Handle, FileList[I], PluginShowFlags) <> LISTPLUGIN_ERROR) then Exit; end; if pnlPreview.Visible then begin if DrawPreview.Col = 0 then begin DrawPreview.Col:=DrawPreview.ColCount-1; DrawPreview.Row:= DrawPreview.Row-1; end else DrawPreview.Col:=DrawPreview.Col-1 end else LoadFile(I); end; procedure TfrmViewer.cm_MoveFile(const Params: array of string); begin btnCopyMoveFileClick(btnMoveFile); end; procedure TfrmViewer.cm_CopyFile(const Params: array of string); begin btnCopyMoveFileClick(Self); end; procedure TfrmViewer.cm_DeleteFile(const Params: array of string); begin btnDeleteFileClick(Self); end; procedure TfrmViewer.cm_StretchImage(const Params: array of string); begin if bImage then miStretchClick(Self); end; procedure TfrmViewer.cm_SaveAs(const Params: array of string); begin if bAnimation or bImage then miSaveAsClick(Self); end; procedure TfrmViewer.cm_Rotate90(const Params: array of string); begin if bImage then miRotateClick(mi90); end; procedure TfrmViewer.cm_Rotate180(const Params: array of string); begin if bImage then miRotateClick(mi180); end; procedure TfrmViewer.cm_Rotate270(const Params: array of string); begin if bImage then miRotateClick(mi270); end; procedure TfrmViewer.cm_Mirror(const Params: array of string); begin if bImage then miRotateClick(miMirror); end; initialization TFormCommands.RegisterCommandsForm(TfrmViewer, HotkeysCategory, @rsHotkeyCategoryViewer); end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffileexecuteyourself.lfm��������������������������������������������������������0000644�0001750�0000144�00000004746�12045446211�020257� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmFileExecuteYourSelf: TfrmFileExecuteYourSelf Left = 366 Height = 102 Top = 182 Width = 320 AutoSize = True BorderIcons = [biSystemMenu, biMinimize] BorderStyle = bsSingle Caption = 'Wait...' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 102 ClientWidth = 320 OnClose = FormClose ShowInTaskBar = stAlways LCLVersion = '1.0.1.3' object lblPrompt: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 14 Top = 8 Width = 304 Anchors = [akTop, akLeft, akRight] Caption = 'Click on Close when the temporary file can be deleted!' ParentColor = False end object btnClose: TBitBtn AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblFromPathValue AnchorSideTop.Side = asrBottom Left = 123 Height = 30 Top = 70 Width = 75 BorderSpacing.Top = 8 Caption = '&Close' Kind = bkClose TabOrder = 0 end object lblFileNameValue: TLabel AnchorSideLeft.Control = lblFileName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 64 Height = 14 Top = 28 Width = 248 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 ParentColor = False end object lblFromPathValue: TLabel AnchorSideLeft.Control = lblFromPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileNameValue AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 43 Height = 14 Top = 48 Width = 269 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 ParentColor = False end object lblFileName: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom Left = 8 Height = 14 Top = 28 Width = 50 BorderSpacing.Top = 6 Caption = 'File name:' ParentColor = False end object lblFromPath: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom Left = 8 Height = 14 Top = 48 Width = 29 BorderSpacing.Top = 6 Caption = 'From:' ParentColor = False end end ��������������������������doublecmd-0.7.1/src/fviewer.lfm���������������������������������������������������������������������0000644�0001750�0000144�00000415374�12651427224�015476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmViewer: TfrmViewer Left = 275 Height = 480 Top = 46 Width = 640 HorzScrollBar.Page = 951 VertScrollBar.Page = 491 Caption = 'Viewer' ClientHeight = 480 ClientWidth = 640 Constraints.MinHeight = 100 Constraints.MinWidth = 200 Icon.Data = { 7E04000000000100010010100000010020006804000016000000280000001000 0000200000000100200000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000959595B4818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF959595A8000000000000 0000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0 F0FFF0F0F0FFF1F1F1FFF2F2F2FFF2F2F2FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEDEDEDFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFF2F2F2FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FF927A6DFF927B6EFF937B6EFF8F79 6DFF867469FF847368FFCF9F72FFF1F1F1FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FFAD9889FFAE9989FFAF9A8AFF948C 86FF948C86FFA29489FFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFCF9F72FFCCC2A8FFD6F1EDFFC4D4C0FFD8B8 9AFFD8B89AFFD8B89AFFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDED EDFFE5EDEDFFECECECFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEBEBEBFFC5C5C5FFC6C6C6FFC6C6C6FFC6C6C6FFC6C6 C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFFECEC ECFFEDEDEDFFEDEDEDFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFEAEAEAFFC4C4C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6 C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEB EBFFECECECFFECECECFFEDEDEDFFF0F0F0FFFFFFFFFF818181FF000000000000 0000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF000000000000 0000999999AC818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF81818156000000000000 0000FFFF00000003000000030000000300000003000000030000000300000003 0000000300000003000000030000000300000003000000030000000300000007 0000 } KeyPreview = True OnClose = frmViewerClose OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = frmViewerKeyDown OnKeyPress = FormKeyPress OnResize = FormResize OnShow = FormShow SessionProperties = 'Height;Width;Left;Top;WindowState' ShowInTaskBar = stAlways LCLVersion = '1.4.4.0' object pnlFolder: TPanel Left = 179 Height = 457 Top = 0 Width = 461 Align = alClient BevelOuter = bvNone TabOrder = 0 Visible = False end object Status: TStatusBar Left = 0 Height = 23 Top = 457 Width = 640 Panels = < item Width = 200 end item Width = 50 end item Width = 100 end item Width = 100 end item Width = 100 end> SimplePanel = False end object pnlText: TPanel Left = 179 Height = 457 Top = 0 Width = 461 Align = alClient BevelOuter = bvNone ClientHeight = 457 ClientWidth = 461 TabOrder = 2 Visible = False OnMouseWheelDown = pnlTextMouseWheelDown OnMouseWheelUp = pnlTextMouseWheelUp object ViewerControl: TViewerControl Left = 0 Height = 457 Top = 0 Width = 461 ViewerMode = vmText OnPositionChanged = ViewerPositionChanged OnMouseUp = ViewerControlMouseUp OnMouseWheelUp = ViewerControlMouseWheelUp OnMouseWheelDown = ViewerControlMouseWheelDown Align = alClient Color = clWindow Font.Color = clWindowText end end object pnlImage: TPanel Left = 179 Height = 457 Top = 0 Width = 461 Align = alClient BevelOuter = bvNone ClientHeight = 457 ClientWidth = 461 TabOrder = 3 Visible = False OnResize = pnlImageResize object sboxImage: TScrollBox Left = 0 Height = 407 Top = 50 Width = 461 HorzScrollBar.Page = 440 VertScrollBar.Page = 386 Align = alClient ClientHeight = 386 ClientWidth = 440 Color = clWhite ParentColor = False TabOrder = 0 OnMouseEnter = sboxImageMouseEnter OnMouseLeave = sboxImageMouseLeave object Image: TImage Left = 85 Height = 434 Top = 76 Width = 1037 Align = alCustom BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter OnMouseDown = ImageMouseDown OnMouseEnter = ImageMouseEnter OnMouseLeave = ImageMouseLeave OnMouseMove = ImageMouseMove OnMouseUp = ImageMouseUp Proportional = True end object GifAnim: TGifAnim Left = 0 Height = 90 Top = 0 Width = 90 OnMouseEnter = GifAnimMouseEnter end end object PanelEditImage: TPanel AnchorSideLeft.Control = pnlImage AnchorSideTop.Control = pnlImage AnchorSideRight.Control = pnlImage AnchorSideBottom.Control = sboxImage Left = 0 Height = 50 Top = 0 Width = 461 Align = alTop Alignment = taLeftJustify ClientHeight = 50 ClientWidth = 461 ParentShowHint = False ShowHint = True TabOrder = 1 OnMouseEnter = PanelEditImageMouseEnter object gboxHightlight: TGroupBox Left = 435 Height = 47 Top = 1 Width = 85 Align = alLeft AutoSize = True BorderSpacing.Left = 5 BorderSpacing.Bottom = 1 Caption = 'Highlight' ChildSizing.LeftRightSpacing = 4 ClientHeight = 27 ClientWidth = 81 TabOrder = 0 Visible = False object lblHightlight: TLabel AnchorSideLeft.Control = gboxHightlight AnchorSideTop.Control = btnCutTuImage AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 3 Width = 17 BorderSpacing.Left = 6 Caption = '0x0' ParentColor = False end object btnCutTuImage: TSpeedButton AnchorSideLeft.Control = lblHightlight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxHightlight Left = 28 Height = 20 Hint = 'Crop' Top = 0 Width = 20 AutoSize = True BorderSpacing.Left = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FF7315FFFF73 15FF000000000000000000000000000000000000000000000000000000000000 000000000000FF7315FFFF7315FF000000000000000000000000FFA263FFFFB8 73FFE39D6C17DFA884FCF0A36D17DEA884FCF0A36D17DEA884FCF0A36D17DEA8 84FCE29C6D17FFB873FFFFC57CFF00000000000000000000000000000000E69B 6717BC8A681EDC8F5B17D98F5C17D48F5F17D38F5F17D28F6017D38F5F17D28F 6017D18E5F17D99464170000000000000000000000000000000000000000E3A8 81FC818A8E7D757F82A4A08F833BDB8D5717D88D5817D78C5817D88C5817D88C 5817D78B5617D89F78F7F4B48C0500000000000000000000000000000000F3A2 6A17D4A07F20BCC3CAF38E9499FF858D91EDA8ACB1D1A5A5AAC597989CC59899 9FC5A1A6ACC5BEC1C5BB0000000000000000000000000000000000000000DFA7 83FCD4865117D4D5D9CBDDDEE0FFC9CBCCFF929494FF939695FFE9E9E9FFFFFF FFFFFFFFFFFFE29C6FFE0000000000000000000000000000000000000000F0A3 6D17D3865117CCCED3C5FFFFFFFFE4E4E4FFDEDEDDFFCBCBCCFF848788FF7477 75FFD3D9D9FFCBC7C8C60000000000000000000000000000000000000000DEA8 84FCD3875217CBCCD1C5FFFFFFFFFDFDFDFFD6D6D7FFCDCDD0FFC6C6C9FFB3B3 BAFF666869FF5B4B3CFF302F270D00000000000000000000000000000000F0A3 6D17D3865117CBCCD1C5FFFFFFFFFFFFFFFFF0F0F1FFB8B8BDFFB2B3B7FF8989 8CFF35332CFF3D3D36FF8F908FDA50505114000000000000000000000000DEA8 84FCD3875217CBCCD1C5FFFFFFFFFFFFFFFFFFFFFFFFD9DADDFF7F7E81FF2522 1BFF3E3C3AFF84848CFFA7A7AAFF90908FC2939393070000000000000000F0A3 6D17D3865117CBCDD2C5FFFFFFFFF7F7F7FFF4F4F4FFFBFBFBFF9E9E9BFF7875 72FFAFAFB5FF72737CFF8B8B90FFC7C7C7FFBFBFBE9D5858580000000000D1A4 87FCD18A5917CED2D8C5FDFFFFFFF6F9FBFFF5FAFDFFF8FBFCFFF7FCFFFFD7D6 DBFFECEDF0FFA2A2A9FFAAAAB0FFC0C0C2FFD0D0D1F0B1B1B13CFF7315FFFF75 04FFE3996717DDA075FEE9E6E8C5DC9869FEC9C4C5C5DE996CFEAFACACC5CF92 69FEE2E0E3F9E6E6E7FFBFBFC3FFB2B2B7FFC2C2C4F0CBCBCB57FFA263FFFFC5 7CFF000000000000000000000000000000000000000000000000000000000000 0000DEDFE239F0EDF0F7E2E2E3FFBABAC0FFB6B6BAF0C3C3C657000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000E4E2E459F3F2F3F2DDDDDEF2B9B9BDE4BBBBBF52000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000D2D0D23EE7E7E85ED0D0D358BABABF1E } OnClick = btnCutTuImageClick end object btnRedEye: TSpeedButton AnchorSideLeft.Control = btnCutTuImage AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxHightlight Left = 53 Height = 24 Hint = 'Red Eyes' Top = 0 Width = 24 BorderSpacing.Left = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000484D503ACED2D67CC5C7C7A3AAAA AAB28C8C8CAF6D6D6D995C5C5C5B000000048D8D8D0000000000000000000000 000000000000000000064D4E4E7E817C8DED493D98FF3F3279FFA29189FEF1F3 F4FFECECECFFD8D8D8FFA7A7A7FF8D8D8DEF4E4E4E3B1A1A1A00000000004A4A 4A00343434316C6D6DEDC5C6C9FF5143A6FE4E43C0FF3F36A1FF5343A2FFA194 8FFFECEEEEFFE6E6E6FFD2D2D2FF9B9B9BFE999999FF00000002666666003232 3227727272FFD1D2D2FE968ED4FF7D74D0FF241E5BFF292369FF736ACDFF4D40 A1FFF0F2F4FFEAEAEAFFC0C0C0FF8C8C8CFF8B8B8B7000000000000000007878 78D5959595FEEEEEF0FF928BD8FF4137A6FF3C3299FF221D58FF5F55C6FF6459 C1FFE0E0E2FFD0D0D0FF7E7E7EFF969696BA0000000000000000000000008A8A 8ABF6E6E6EFFDEDFDFFF9D97DCFF8C85D6FF958ED9FF4E43C0FF7E76D1FF564A C1FFCDCED0FF727272FE929292E0000000084444440500000000000000000000 0009848484DE646464FFC8C4C5FFB6B1E3FFB0ABE2FF9F98DDFFAFAAE1FF6E60 66FF6A6A6AFE8B8B8BE82929291300000002464646330000000000000000FFFF FF000000000C808080CD575757FF6A6465FE5A50C1FF4A3FBAFF585656FE6C6C 6CFF858586D11212121000000000484848740000000000000000131313014141 410B000000000000000077777774727273F06A6A6AFF6C6C6EFF777777F37E7E 7E7700000000000000004F4F4F7A686868380000000000000000000000004242 42500000000A000000000000000000000000313131203C3C3C23000000000000 0000000000003D3D3D7888888891000000000202020000000000000000000000 0000656565AF0000001F00000000000000000000000000000000000000000000 000C444444AC8F8F8FCC000000007E7E7E000000000000000000000000000000 00006565650A767676E9393939990D0D0D43010101250D0D0D413434348F5B5B 5BFB919191CD0000000100000000000000000000000000000000000000000000 0000000000003D3D3D08878787B86F6F6FFF575757FF616161FF7D7D7DFF8E8E 8E8D00000000FFFFFF0000000000000000000000000000000000000000000000 000000000000FFFFFF00000000009595952399999964A0A0A0587272720C0000 0000E2E2E2000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnRedEyeClick end end object gboxPaint: TGroupBox Left = 462 Height = 47 Top = 1 Width = 203 Align = alLeft BorderSpacing.Left = 5 BorderSpacing.Bottom = 1 Caption = 'Paint' ChildSizing.LeftRightSpacing = 2 ChildSizing.TopBottomSpacing = 2 ClientHeight = 27 ClientWidth = 199 TabOrder = 1 Visible = False object ColorBoxPaint: TColorBox AnchorSideLeft.Control = ComboBoxWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint Left = 154 Height = 22 Top = 2 Width = 39 DefaultColorColor = clRed NoneColorColor = clRed BorderSpacing.Left = 6 ItemHeight = 16 TabOrder = 0 end object btnUndo: TSpeedButton AnchorSideTop.Control = ComboBoxPaint AnchorSideTop.Side = asrCenter Left = 2 Height = 20 Hint = 'Undo' Top = 3 Width = 20 AutoSize = True Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002EBC D70119A7D50217A2DC010080D500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002EC0D1012ABB D20424B3D30C20ABD70B1895C90C056DA302FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0016A2D601FFFFFF00FFFFFF0025B5D30126B5D30423B2 D40A1EACD51A17A5D620119BD71D057CA573007FA66AFFFFFF00FFFFFF00FFFF FF00FFFFFF000994D901109CD701FFFFFF001DA5CE011C98B8040F8FB1131DA3 CA1617A4D62A119ED7340B96D83C0787C44902779EEB007FA633FFFFFF00FFFF FF00FFFFFF00048DDA010994D9061484AE051A7E9101007FA611007FA6980180 A7EB088FB9920B96D849058FD9540089DA5F046B97A8007FA692FFFFFF00FFFF FF00FFFFFF000381C7010484C90516758D03FFFFFF00FFFFFF00FFFFFF00007F A61B0485ADEF088ED06C0089DA6F0089DA7B036BA2AB01789FCC007FA63C007F A6B4007FA6FC007FA6FF017FA6FF007FA6FF007FA6FF007FA6E9007FA62AFFFF FF000180A89F0688C1B8048BDB890B8FDC9F0882C7B802698EF90585A9EF169C C2F8179FC4FD26AACAFD28B2D0FE20B9D5FE18B2D1FC0382A9E8007FA62AFFFF FF000181A89C078BC5CA1A96DEAE39A8E4C5349DD6DF03688CFA0D90B0F440BB E3FF50C8E6FF4ECFE7FF2EC9E1FF11BAD7FF0E89ABF4007FA651FFFFFF00007F A615067EA5F30384CAD633A7E3E348B4E8F33693C3FE03769CD40D91B1F45DCB EBFF5CCFEBFF56CEE9FF16B3DAFF119DC3FE0D7895F6027DA3B1037BA0A60867 85F7056599F91F9CE0FA56C1ECFD55C1ECFF3388AEFE007EA5950D91B0F464D1 EEFF63D3EFFF63D4EFFF55CDEBFF21AADEFF0E9CD5FF1496C8FE1990C5FE0688 CDFF27A2E2FF5CCAEEFF5FCCEFFF5BC6EAFF12789EF6007FA6370D91B0F369D9 F3FF69D9F3FF68DCF3FF66DBF3FF65DAF3FF5FCCEFFF3EB7E8FF3AB7E8FF54C8 EEFF66D9F3FF65D9F3FF68DAF3FF35A2C9F9017FA689FFFFFF000D91B0F367D9 F1FF27ACC5F948C5DDFA67DFF5FF67E5F7FF67E5F7FF67E5F7FF67E5F7FF67E5 F7FF67E5F7FF69E0F5FF3FB9E0F90383AACD007FA606FFFFFF000C8AADDC1D9C B9F5007FA6550283A86C24A9C4F754D3EBFF64DEF3FF71ECF9FF72ECF9FF69DF F4FF59D1EEFF21A3C8F50180A87E007FA604FFFFFF00FFFFFF00007FA61B007F A621FFFFFF00FFFFFF00007FA6220283A9811092B4C035A9C3EF44ADC8F31993 B7C60181A788007FA62BFFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = btnUndoClick end object ComboBoxPaint: TComboBox AnchorSideLeft.Control = btnUndo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint Left = 32 Height = 23 Top = 2 Width = 63 BorderSpacing.Left = 10 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Pen' 'Rect' 'Ellipse' ) Style = csDropDownList TabOrder = 1 Text = 'Pen' end object ComboBoxWidth: TComboBox AnchorSideLeft.Control = ComboBoxPaint AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxPaint Left = 101 Height = 23 Top = 2 Width = 47 BorderSpacing.Left = 6 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( '1' '2' '3' '4' '5' '6' '7' '8' '9' '10' '11' '12' '13' '14' '15' '16' '17' '18' '19' '20' '21' '22' '23' '24' '25' ) TabOrder = 2 Text = '1' end end object btnHightlight: TSpeedButton Left = 398 Height = 46 Hint = 'Highlight' Top = 1 Width = 32 Align = alLeft BorderSpacing.Left = 6 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 200000000000000900006400000064000000000000000000000000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A00AEAE AEFF949494FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A00AEAEAEFF949494FF00769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00AEAEAEFF949494FF00769A0000769A00AEAE AEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFAEAEAEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFDCC299FFDCC299FFAEAEAEFF949494FF00769A0000769A000076 9A00DCC299FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00C4C4C4FFBBBBBBFFBBBBBBFF929292FFA2A4A5FFADAD ADFF9B9B9BFF9C9C9CFFA5A5A5FFAFAFAFFFB8B8B8FFBBBBBBFFBBBBBBFFBBBB BBFFBBBBBBFFC4C4C4FF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFBFBFBFF303537FFA6B3 B8FFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9FFE6E6E6FFE1E1E1FFE7E7E7FFF2F2 F2FFFBFBFBFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFC3C6C8FFADC9 D4FF678C98FFFAFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9AA4 A9FFB0CBD5FF4793AAFFF4FAFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9EA EBFF488DA3FF354A51FF5AC4E5FFF9FCFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A00AEAE AEFF949494FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFCBE3EAFF3FA1C0FF395760FF69CBE9FFFDFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00AEAEAEFF949494FF00769A0000769A00AEAE AEFF949494FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBCDBE4FF3793AFFF3E636FFF7BD1EDFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00AEAEAEFF949494FF00769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFACD2DEFF34768BFF467280FF8EDDF4FFFFFFFFFFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF98C7D5FF336C7EFF4A8A9DFF9EE4F9FFFFFF FFFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF85C0D2FF356474FF5097AEFFADEA FDFFFFFFFFFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00BBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF72CDEAFF395E6AFF51A5 BFFFBBEEFDFFBBBBBBFF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A00C4C4C4FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFBABBBBFF4CB1D0FF314F 58FF49A5C1FF98C4D1FF00769A00DCC299FF00769A0000769A0000769A000076 9A00DCC299FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A0011AE DFFF1D3840FF24A7D0FF00769A00DCC299FF00769A0000769A0000769A00AEAE AEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC299FFDCC2 99FFDCC299FFAEAEAEFF949494FFDCC299FFDCC299FFDCC299FFDCC299FFD5C0 99FF51B7CDFF26393DFF49AEC5FF97AFB7FF949494FF00769A0000769A00AEAE AEFF949494FF00769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A00AEAEAEFF949494FF00769A0000769A0000769A0000769A000076 9A0000769A0021B5E4FF1A2E33FF90BDCBFF86979DFF00769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0083B0BEFF424F53FF043D4FFF00769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A00093542FF00769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A0000769A000076 9A0000769A0000769A0000769A0000769A0000769A0000769A00 } OnClick = btnPaintHightlight end object gboxView: TGroupBox Left = 214 Height = 47 Top = 1 Width = 178 Align = alLeft BorderSpacing.Left = 5 BorderSpacing.Right = 6 BorderSpacing.Bottom = 1 Caption = 'View' ChildSizing.LeftRightSpacing = 2 ChildSizing.TopBottomSpacing = 2 ChildSizing.ControlsPerLine = 1 ClientHeight = 27 ClientWidth = 174 TabOrder = 2 object btn270: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 72 Height = 20 Hint = '- 90' Top = -1 Width = 32 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00AA555500842F4A00792B430070273E0070273E00792B 4300842F4A00AA555500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0095395500812D4800884258FFB58293FFD1ACB9FFD1ACB9FFB582 93FF884258FF812D480095395500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF008D314E009D586EFFCA9DADFFD6B1BFFFE2C4D0FFE2C4D0FFD6B1 BFFFCA9DADFF9D586EFF8C314E00FF808000FFFFFF00FFFFFF00FFFFFF00FFFF FF00A23C550094405900BF879900C99AAAFFBD7C91FFA04762FFA04762FFBD7C 91FFC99AAAFFBF889AFF94405AFF9C375600FFFFFF00FFFFFF00FFFFFF00FFFF FF00AA405500A75C7400BB849800B36E83008825420081213C0081213C008825 4200B46D84FFBC8497FFA75D75FF9F385A00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00AF608000B77C8F00983B57007C213B00FFFFFF00FFFFFF007B1E 3800973B57FFB87C90FFAB657CFFA4385B00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF009F3050008522450066192D0057102100570F2200741A 320097425BFFC28F9FFFB06D82FFAD3C5F00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF008000800080223E0078283F00B88A99FF5E1024FF731A 3300BD8596FFD1AAB7FFC08699FFB73F6500FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00B83D66009E325200A95E75FFD3AFBBFFDABBC5FF8A4056FFBA84 95FFD6B4BFFFD4B1BCFFB95B78FFC4456C00FFFFFF00FFFFFF00FFFFFF00FFFF FF00C94A7200BA4A6C00C690A1FFDABCC6FFDCBFC8FFDCC0C9FFDCC0C9FFDCBF C8FFDABCC6FFBD798FFFB83D6300FF808000FFFFFF00FFFFFF00FFFFFF00FFFF FF00CB487400C14E7300CD9BAAFFE0C7CFFFE0C7CFFFE1C8D0FFDABCC6FFCDA0 AEFFB05A75FFB13A5E00BD426800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00CA467200BC3F6700BF7089FFE2CAD2FFE8D6DCFFA23254FFA735 5800B13B5D0080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00C6557100C0416900BA4D6E00D7AFBCFFB33B60FFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C6466E00C4446C00C4446C00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = miRotateClick end object btn90: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 104 Height = 20 Hint = '+ 90' Top = -1 Width = 32 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00AA555500842F4A00792B430070273E0070273E00792B 4300842F4A00AA555500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0095395500812D4800884258FFB58293FFD1ACB9FFD1ACB9FFB582 93FF884258FF812D480095395500FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FF8080008C314E009D586EFFCA9DADFFD6B1BFFFE2C4D0FFE2C4D0FFD6B1 BFFFCA9DADFF9D586EFF8D314E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009C37560094405AFFBF889AFFC99AAAFFBD7C91FFA04762FFA04762FFBD7C 91FFC99AAAFFBF87990094405900A23C5500FFFFFF00FFFFFF00FFFFFF00FFFF FF009F385A00A75D75FFBC8497FFB46D84FF8825420081213C0081213C008825 4200B36E8300BB849800A75C7400AA405500FFFFFF00FFFFFF00FFFFFF00FFFF FF00A4385B00AB657CFFB87C90FF973B57FF7B1E3800FFFFFF00FFFFFF007C21 3B00983B5700B77C8F00AF608000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00AD3C5F00B06D82FFC28F9FFF97425BFF741A320057102200570F21006619 2D00852245009F305000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00B73F6500C08699FFD1AAB7FFBD8596FF731A33005E1024FFB88A99FF7828 3F0080223E0080008000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00C4456C00B95B78FFD4B1BCFFD6B4BFFFBA8495FF8A4056FFDABBC5FFD3AF BBFFA95E75FF9E325200B83D6600FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FF808000B83D6300BD798FFFDABCC6FFDCBFC8FFDCC0C9FFDCC0C9FFDCBF C8FFDABCC6FFC690A1FFBA4A6C00C94A7200FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00BD426800B13A5E00B05A75FFCDA0AEFFDABCC6FFE1C8D0FFE0C7 CFFFE0C7CFFFCD9BAAFFC14E7300CC477200FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0080808000B13B5D00A7355800A23254FFE8D6DCFFE2CA D2FFBF7089FFBC3F6700CA467200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B33B60FFD7AFBCFFBA4D 6E00C0416900C6557100FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C5446C00C4446C00C646 6E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = miRotateClick end object btnMirror: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 136 Height = 20 Hint = 'Mirror' Top = -1 Width = 35 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 4 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000A4A4A402ACA6 A603AAAAAA02A5A5A501FFFFFF00000000000000000000000000F2813218F17D 2A6C00000000FFFF0000C8916E01CC915D02D3906403CC995D02ACA9A9C8ABA7 A7E4A9A5A5E4B0ADADE7D3D1D1F1E9E8E8F7F3F2F2EEDDCBCB02F2803020F17B 28FFF9C9A6FFF1DECFF6CF9462E4CF9462E4CF9462E4CF9361CCACA8A883C7C5 C5E4EDEDEDEAFEFCFAFEFCDAC2FFF8B98DFFF6A56BFFF38A40C9F282328DF288 3DFFF0741DFFFBDCC6FFF9F7F6F2F2EFEDE4E1C1A7E4CF936186ABA8A81DAEAA AAE1EAEAEAECFDECE0FFF7AA74FFF9C5A0FFFACFB1FFF2893E84F27F2FCFF078 22FFEF6F14FFF0751FFFFDEDE1FFF1EBE7EBD19A6BE2CF93612000000000AAA6 A695CCCACAE6FBFBFBFBFEFCFAFEF7F7F7F4C9C7C7EFA0A0A000F17C2A64F076 20FFF07823FFF8BA8EFFFDF8F5FEE3C8B2EACF9463990000000000000000A9A5 A52DB0ADADE4EBEBEBECEDEDEDECE8E8E8E4B4B0B0E9F1813318F17D2BEFF7B7 8AFFFEF6F0FFF7F5F4F8E8E1DDEAD29E74E4D095643000000000000000000000 0000A8A4A4A8D4D3D3EAEFEFEFEFEAEAEAE9A29D9DE400000000F17C2B0BF0DD CDF4F1EEECF4EEEAE7F2E4CEBEECD09667AC0000000000000000000000000000 0000A7A3A33FB1AEAEE5EEEEEEEFF2F2F2F1A29D9DE40000000000000000D29A 6DE0F2EFEDF5F2EEECF4D8AA86E7D1986A430000000000000000000000000000 0000B3999901A6A2A2BAD1D0D0E6F1F1F1F2A29D9DE30000000000000000D39D 70DFF6F4F2F6EDDED3F1D39B6EBDD59C71010000000000000000000000000000 000000000000A5A1A152B3B0B0E4E2E2E2E6A29D9DE30000000000000000D49F 73DFFAF8F7F9DFBA9BE9D49D7156000000000000000000000000000000000000 000000000000A8A1A104A49F9FC9D2D1D1E4A29D9DE20000000000000000D6A1 77DFF6EEE7F6D5A176CCD4A17405000000000000000000000000000000000000 00000000000000000000A39F9F65B6B3B3E4A29D9DE20000000000000000D7A4 7ADEE6C7AEECD6A3786800000000000000000000000000000000000000000000 00000000000000000000A49F9F0BA39E9ED5A29D9DE10000000000000000D8A7 7FDED8A881D7D8A57C0D00000000000000000000000000000000000000000000 0000000000000000000000000000A29D9D78A29D9DE10000000000000000D9AB 84DDD9AA837B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000A19D9D16A29D9DC00000000000000000DBAE 88BFDBAD86180000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = miRotateClick end object btnZoomIn: TSpeedButton Left = 4 Height = 20 Hint = 'Zoom In' Top = -1 Width = 28 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3E171B1B1B00000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000848484439B9B9BEF8C8C8C6C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000F0F0F0076767654939393F6B4B4B4FFC7C7C7AF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000222222006767676A858585FBBEBEBDFFCBCBCB9C65656506000000000000 0000000000000000000000000000000000000000000000000000000000002121 21015B5B5B7E7C7C7CFDCAC9C8FEC8C8C8834F4F4F0200000000000000000000 0000000000001716161B6F6D6D5A7F7D7C726F6D6C5A1716161B1D1D1D035252 528B7E7E7DFED2D2D0FAC0C0C0683A3A3A000000000000000000000000000000 00067A79787DBAB1AAECD2BA9BDAD9BE92CAD4BC9AD9BDB2A8EC717070C08787 86FFD7D6D5F3B4B4B44E1D1D1D00000000000000000000000000000000017877 7788BCA490EBD6A54999F3D35F71F9E07869F4D5616FDAAB4994C2A68DE7BEBD BCF2A2A2A23900000000000000000000000000000000000000004342422DA392 8AF5C8903BA4F3D25973FAE38265A16F30FFFAE38364F5D55D71CF9B3E9CA692 85F24443432D00000000000000000000000000000000000000007171717CA57C 5DE5DFB0458DF6D76474F9E1816CA25718FFF8DF806CF6D86672E3B74788A97C 57DD7473737C000000000000000000000000000000000000000078787898A36F 49DEDFAF4992A05215FFC86619FFA75616FF7B4011FF63340EFFE2B54B8EA56D 3FD77C7C7C9800000000000000000000000000000000000000007A7A7A809667 4BEED29E46A3ECC86294F8E088A89E652DFFF8E085A9EECB6592D5A2449C9764 42E87C7C7C8000000000000000000000000000000000000000006C6C6B31957E 73FAAD7341DCE5C480C8F5E1A5D39B713DFFF5E0A0CEE8C781BFB37C48D49478 69F96D6D6D310000000000000000000000000000000000000000000000019D9C 9B97956D59FBB07B50EEDFC08FF0E6C88CECE0C28FEBB58256E990644DFA9997 9797000000010000000000000000000000000000000000000000000000005D5C 5C05B5B4B391A58F84FB956B53FD96694AFC93684FFC9E8579FBADACAB915B5A 5A05000000000000000000000000000000000000000000000000000000000000 000005050500B4B3B224CCCACA6FCECDCC88CBCAC96FB3B2B224000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = miZoomClick end object btnZoomOut: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 34 Height = 20 Hint = 'Zoom Out' Top = -1 Width = 28 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000003E3E3E171B1B1B00000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000848484439B9B9BEF8C8C8C6C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000F0F0F0076767654939393F6B4B4B4FFC7C7C7AF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000222222006767676A858585FBBEBEBDFFCBCBCB9C65656506000000000000 0000000000000000000000000000000000000000000000000000000000002121 21015B5B5B7E7C7C7CFDCAC9C8FEC8C8C8834F4F4F0200000000000000000000 0000000000001716161B6F6D6D5A7F7D7C726F6D6C5A1716161B1D1D1D035252 528B7E7E7DFED2D2D0FAC0C0C0683A3A3A000000000000000000000000000000 00067A79787DBAB1AAECD2BA9BDAD9BE92CAD4BC9AD9BDB2A8EC717070C08787 86FFD7D6D5F3B4B4B44E1D1D1D00000000000000000000000000000000017877 7788BCA490EBD6A54999F3D35F71F9E07463F4D5616FDAAB4994C2A68DE7BEBD BCF2A2A2A23900000000000000000000000000000000000000004342422DA392 8AF5C8903BA4F3D25973FAE47E60FCED9355FAE5805FF5D55D71CF9B3E9CA692 85F24443432D00000000000000000000000000000000000000007171717CA57C 5DE5DFB0458DF0CD5E7AF6D7756FF4DA7E6AEFD5756EEBCB6078E3B74788A97C 57DD7473737C000000000000000000000000000000000000000078787898A36F 49DEDEAE4892A55A1CFCCC7022FEAF6523FE864E1CFE693B13FEDEB14A91A56D 3FD77C7C7C9800000000000000000000000000000000000000007A7A7A809667 4BEED29E46A3ECC86193F8E185A5F9E076A6F8E183A6EECB6491D5A2449C9764 42E87C7C7C8000000000000000000000000000000000000000006C6C6B31957E 73FAAD7341DCE5C480C8F5E1A4D2F4DB81C3F5E19FCCE8C781BFB37C48D49478 69F96D6D6D310000000000000000000000000000000000000000000000019D9C 9B97956D59FBB07B50EEDFC08FF0E6C88BEBE0C28FEBB58256E990644DFA9997 9797000000010000000000000000000000000000000000000000000000005D5C 5C05B5B4B391A58F84FB956B53FD96694AFC93684FFC9E8579FBADACAB915B5A 5A05000000000000000000000000000000000000000000000000000000000000 000005050500B4B3B224CCCACA6FCECDCC88CBCAC96FB3B2B224000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = miZoomClick end object btnGifMove: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 4 Height = 20 Top = -1 Width = 32 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = '||' OnClick = btnGifMoveClick end object btnGifToBmp: TSpeedButton Left = 139 Height = 21 Top = 0 Width = 32 Caption = 'S' OnClick = btnGifToBmpClick end object btnNextGifFrame: TSpeedButton Left = 96 Height = 22 Top = -1 Width = 31 Caption = '||>' OnClick = btnNextGifFrameClick end object btnPrevGifFrame: TSpeedButton Left = 48 Height = 22 Top = -1 Width = 28 Caption = '<||' OnClick = btnPrevGifFrameClick end end object btnResize: TSpeedButton AnchorSideLeft.Side = asrBottom Left = 433 Height = 46 Hint = 'Resize' Top = 1 Width = 28 Align = alRight AutoSize = True BorderSpacing.Left = 5 BorderSpacing.Right = 3 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000001D00000054000000540000005400000054000000540000 0054000000540000005400000054000000540000003800000001000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFDFDFFE8E8E8FFAAABABEF23232355000000010000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF9F9F9FFFAFAFAFFFAF1EBFFFCFCFCFFFCFC FCFFFDFDFDFFFEFEFEFFFCFCFCFFE4E4E4FFEEEFEFFFA2A3A3EF1C1C1C570000 0001000000000000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFFAF7F4FFF1863BFFFBF5F0FFFCFC FCFFFDFDFDFFFEFEFEFFFCFCFCFFE4E4E4FFFDFDFDFFEEEFEFFF999A9AEF1919 1957000000020000000000000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFF7D3BAFFF18438FFF8CFB2FFFCFC FCFFFDFDFDFFFEFEFEFFFDFDFDFFE1E1E1FFFEFEFEFFFDFDFDFFEEEFEFFF999A 9AF01C1C1C590000000200000000000000000000000000000000000000000000 00000000000000000049FBFBFBFFF8F8F8FFF9F9F9FFF3A46DFFFBFBFBFFFCFC FCFFFDFDFDFFFDFDFDFFFEFEFEFFDADBDBFFFEFEFEFFFEFEFEFFFDFDFDFFEEEF EFFFA2A3A2F02121215A00000002000000000000000000000000000000000000 00000000000000000049FBFBFBFFF7F7F7FFF9F9F9FFF3A771FFFBFBFBFFFCFC FCFFFCFCFCFFFDFDFDFFFEFEFEFFD1D2D2FFFEFEFEFFFEFEFEFFFEFEFEFFFDFD FDFFEEEFEFFFA9AAAAF000000038000000000000000000000000000000000000 00000000000000000049FBFBFBFFF7F7F6FFF8F8F8FFF4AD7BFFFAFAFAFFFBFB FBFFFCFCFCFFFDFDFDFFFDFDFDFFEDEEEDFFD0D0D0FFD9D9D9FFE0E0E0FFE4E4 E4FFE4E4E4FFE8E8E8FF0101014E000000000000000000000000000000000000 00000000000000000049FBFBFBFFF6F6F6FFF7F7F7FFF4B384FFFAFAFAFFFBFB FBFFFBFBFBFFFCFCFCFFFDFDFDFFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFD FDFFFCFCFCFFFDFDFDFF0000004E000000000000000000000000000000000000 00000000000000000049FBFBFBFFF5F5F5FFF6F6F6FFF5B98EFFFAFAFAFFFAFA FAFFFBFBFBFFFCFCFCFFFCFCFCFFFDFDFDFFFDFDFDFFFDFDFDFFFEFEFEFFFEFE FEFFFEFEFEFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF4F4F4FFF5F5F5FFF5BE97FFF8F8F8FFFAFA FAFFFAFAFAFFFBFBFBFFFBFBFBFFFCFCFCFFFCFCFCFFFDFDFDFFFDFDFDFFFDFD FDFFFDFDFDFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF3F3F2FFF4F4F4FFF6C4A0FFF7F7F7FFF9F9 F9FFFAFAFAFFFAFAFAFFFBFBFBFFFBFBFBFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFFFFFFFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF2F2F1FFF3F3F2FFF6CAA9FFF6F6F6FFF7F7 F7FFF8F8F8FFFAFAFAFFFAFAFAFFFAFAFAFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFF0F0F0FFF2F2F1FFF6CFB2FFF4F4F4FFF6F6 F6FFF7F7F7FFF8F8F8FFF9F9F9FFFAFAFAFFFAFAFAFFFAFAFAFFFAFAFAFFFAFA FAFFFAFAFAFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFB8B8B7FF9B9B9BFF9D938BFF9C9C9CFFB8B8 B8FFF5F5F5FFF6F6F6FFF7F7F7FFF8F8F8FFF9F9F9FFF9F9F9FFFAFAFAFFFAFA FAFFFAFAFAFFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA1A1A1FFEFEFEEFFF0F0F0FFF2F2F1FF9F9F 9FFFF4F4F3FFF5F5F4FFF6F6F5FFF6F6F6FFF7F7F7FFF7F7F7FFF8F8F8FFF6CD B0FFF8F3F0FFFEFEFEFF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA0A0A0FFEEEEEDFFEFEFEEFFF0F0EFFFA096 8EFFF6D1B6FFF5CBACFFF5C4A1FFF4BE96FFF4B78CFFF3B081FFF2A976FFF083 35FFF1883EFFFDF6F0FF0000004E000000000000000000000000000000000000 0000000000000000004AFBFBFBFFA0A09FFFECECEBFFEDEDECFFEEEEEEFF9E9E 9EFFF0F0F0FFF1F1F1FFF2F2F1FFF3F3F2FFF3F3F3FFF4F4F3FFF4F4F4FFF2CD B3FFF4F1EFFFFDFDFDFF0000004E000000000000000000000000000000000000 0000000000000000004BFBFBFBFFBBBBBAFFA3A3A3FFA4A4A3FFA4A4A4FFBBBB BBFFEFEFEEFFEFEFEFFFF0F0EFFFF1F1F0FFF1F1F1FFF2F2F1FFF2F2F2FFF2F2 F2FFF2F2F2FFFDFDFDFF0000004E000000000000000000000000000000000000 0000000000000000004BF0F0F0FEF4F4F4FEF4F4F4FEF4F4F4FEF3F3F3FEF3F3 F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3F3FEF3F3 F2FEF2F2F2FEF4F4F4FE0000004E000000000000000000000000000000000000 000000000000000000160000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000 003E0000003E0000003E00000017000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnResizeClick end object btnReload: TSpeedButton Left = 1 Height = 46 Top = 1 Width = 48 Action = actReload Align = alLeft BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000005B0007004E006C0050 01AB095E12DB015B01F5005D00F7095F11E2015102BA004F007F004A00110000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000050004C075D0DEB076B0DFF0A92 30FF15B125FF0AD113FF06E60BFF0DD317FF17B12CFF06790BFF05580AEE004E 006D004E00090000000000000000000000000000000000000000000000000000 00000000000000000000004E0009015002BB0B6515FD159227FF18A72DFF1AB1 31FF14C226FF0FD11DFF0CDA17FF0CDA17FF0FD11DFF14C226FF21AD3EFF1274 22F2005001C2004A001B00000000000000000000000000000000000000000000 00000000000000000000025003B80F721DFF0A9513FF0F9D1DFF15A427FF1AAA 31FF18B52FFF15C027FF12C723FF12C723FF14C027FF18B52EFF1AAA32F016A5 2ACD137923C0004F00A700550008000000000000000000000000000000000000 0000000000000051005C085B0FFE028D05FF07940DFF0C9A17FF119F20FF16A5 29FF19A931FF1BAE33FF19B330FF19B330FF1AAE33FF1AA931EF16A529D1119F 21AD0F9C1C8D0B68139B00540030000000000000000000000000000000000000 0000004D000F045108F505750AFF008C01FF049108FF08950FFF0D9A18FF17A2 2AFF0D7B19FF0B6A14FD0A6413FD0D7019FF189F2EEB14A326D3119F20B10D9A 1890089510730B95155809651137000000000000000000000000000000000000 00000255057B06530CFF007000FF008100FF018D02FF049109FF0F8E1CFF075F 0EF00253048F004C0041004E003B02500474045208D70D8019B00B99167E0895 0F6305910949018D02350D731824046A07020000000000000000000000000000 0000035306C1045109FF006300FF007300FF008300FF068E0AFF05590AF5004D 014F00000000000000000000000000000000004C0026025004B106880B490490 0730018D02230083001709770F0D05620B020000000000000000000000000000 0000045108E8014D01FF005500FF006400FF007300FF06660CFF015103AB0000 00000000000000000000000000000000000000000000004E01290A6211160263 040F02540609044F07050A5B140100000000000000000000000000000000004D 0001054D07F9085508FF0B570BFF0A5D0AFF006200FF055207FE014F015A0000 0000000000000000000000000000000000000000000000000000065210050957 1303000000000000000000000000000000000000000000000000000000000000 0000065108FB267026FF287228FF277127FF005000FF034B06FE014D015A0000 00000000000000000000004D0004125E1BEC025C03FF045C04FF045B05FF0459 06FF015503FF025304FF025405FF07600DA90000000000000000000000000000 000008550CE62B752BFF357E35FF357E35FF085408FF034B06FF035306870000 00000000000000000000004D0008024E04D1028004FF13C813FF2DC72DFF35BD 35FF34AF34FF249824FF127B12FF055A08FF0000000000000000000000000000 0000095B10BE266E27FF418A41FF418A41FF266F26FF014C01FF045107F30351 0311000000000000000000000000004D0033034F07E2027704FF019601FF20A1 20FF41AD41FF41A641FF419D41FF0B5F0EFF0000000000000000000000000000 000007610F7D1C641DFF4F964FFF4F964FFF4F964FFF166016FF014E03FF044F 08F30758105900802B030064140605540A6B034D05F7016A02FF017A01FF3CA2 3CFF4FAB4FFF4FA64FFF4FA24FFF0C610FFF0000000000000000000000000000 00000057000A09560BF4498F49FF5BA15BFF5BA15BFF549A54FF1B641BFF014D 01FF024C03FF024B04FE044C06FE024C03FF015401FF086508FF3F963FFF5BAC 5BFF5BAB5BFF5BA95BFF5BA75BFF0D610FFF0000000000000000000000000000 000000000000045C0852155F17FE66AA66FF68AD68FF68AD68FF69AE69FF468B 46FF226A22FF085408FF045004FF176017FF307930FF5FA75FFF68B068FF68B0 68FF68B068FF68AF68FF68AF68FF0E6210FF0000000000000000000000000000 00000000000000000000035A06BB337933FF70B570FF74B974FF74B974FF74B9 74FF74B974FF77BA77FF75B875FF74B974FF74B974FF74B974FF74B974FF76BA 76FF61A361FF539A55FF75B975FF0F6311FF0000000000000000000000000000 0000000000000000000000540007035D05B71C691DFE65A865FF81C581FF81C5 81FF81C581FF81C581FF81C581FF81C581FF81C581FF81C581FF80BF80FF367E 38FE025703D5015903D7479147FF116612FF0000000000000000000000000000 0000000000000000000000000000000000000060024D0E620EF1347C34FF5799 57FF74B474FF7FC47FFF84C984FF80BF80FF6EAA6EFF4A8E4AFF0D5E0DF40056 018C004D0010004D001F005C01B8458E45E60000000000000000000000000000 00000000000000000000000000000000000000000000006000080063007A0160 01B5216F21E6337633FD347634FE2D732DEF166816CA015C0194005000290000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnPaint: TSpeedButton Left = 462 Height = 46 Hint = 'Paint' Top = 1 Width = 32 Align = alLeft BorderSpacing.Left = 5 BorderSpacing.Bottom = 2 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000082E4D5933284A5765183B467C092027690105074D000000480000 004600000043000000410000003B000000340000002D00000027000000200000 001B00000015000000100000000A00000004000000010000000000000000689D B416689DB4AF679CB3FF5C8FA3FF4D8598FF2C6578FF134555D9134555370000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000689DB408689DB47378A7BCF88EBBCBFF7FBBCDFF5794A7FF205263D70000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000689DB43E6EA1B6F1ADCCD7FFA9CDDAFF6992A1FF1035 414A000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000689DB43082AEC1E9C4D8E0FF85949BFF344A 53A9555555030000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000689DB413698E9FCA717A7EFFA2A5 A6E48F8F8F8B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000078899103A2A5A6C2B0B0 B0C3A9A9A9E65555558F00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000AFAFAF369898 98EA545454FF202020FB1D1D1DA0000000050000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000002A2A 2A99151515FF080808FF0E0E0EFF1C1C1CB20000000300000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000404 0426030303F0141414FF161616FF161616FF191919A800000002000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000A1191919FF252525FF222222FF1A1A1AFF1313138F000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000220D0D0DE62E2E2EFF333333FF292929FF171717ED080808370000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000084242424FF424242FF3A3A3AFF2C2C2CFF111111BA0000 0001000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000006020202BB333333FF4A4A4AFF3B3B3BFF292929FE0B0B 0B71000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000111D1D1DCA424242FF414141FF353535FF1D1D 1DDE0404041B0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000015151520555555DC4A4A4AFF343434FF3333 33FF212121AB0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000020202031606060E7424242FF2626 26FF323232F91515155600000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000303030456B6B6BEF3434 34FF191919FF232323D300000008000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000003D3D3D5B7878 78F5202020FF414141FF6B6B6BB8000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000004B4B 4B73969696FC6B6B6BFF030303EB000000320000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000737373A37B7B7BFC060606FF0707079D0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000006A6A6AA1909090DE2F2F2F670000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnPaintHightlight end object btnFullScreen: TSpeedButton AnchorSideRight.Control = btnResize Left = 430 Height = 45 Hint = 'Full Screen' Top = 1 Width = 28 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Bottom = 3 Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF4343CBFF6262D4FFA0A0E5FFDEDEF6FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDE F6FFA0A0E5FF6262D4FF4343CBFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF6262D4FF0505BAFF0505BAFF4B4BCDFFF3F3FCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FCFF4B4B CDFF0505BAFF0505BAFF6262D4FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFA0A0E5FF0505BAFF0505BAFF8787DEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787 DEFF0505BAFF0505BAFFA0A0E5FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFDEDEF6FF4B4BCDFF8787DEFF0505BAFF8A8ADEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8ADEFF0505 BAFF8787DEFF4B4BCDFFDEDEF6FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFF3F3FCFFFFFFFFFF8A8ADEFF9C9CE4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9CE4FF8A8A DEFFFFFFFFFFF3F3FCFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFF3F3FCFFFFFFFFFF8A8ADEFF9C9CE4FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C9CE4FF8A8A DEFFFFFFFFFFF3F3FCFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFDEDEF6FF4B4BCDFF8787DEFF0505BAFF8A8ADEFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A8ADEFF0505 BAFF8787DEFF4B4BCDFFDEDEF6FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFA0A0E5FF0505BAFF0505BAFF8787DEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8787 DEFF0505BAFF0505BAFFA0A0E5FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF6262D4FF0505BAFF0505BAFF4B4BCDFFF3F3FCFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F3FCFF4B4B CDFF0505BAFF0505BAFF6262D4FFFFFFFFFF0000000000000000000000000000 0000FFFFFFFF4343CBFF6262D4FFA0A0E5FFDEDEF6FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDEDE F6FFA0A0E5FF6262D4FF4343CBFFFFFFFFFF0000000000000000000000000000 0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000 0000DCDBDBFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CF CFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CFCFFFD1CF CFFFD1CFCFFFD1CFCFFFD1CFCFFFDCDBDBFF0000000000000000000000000000 0000E1E0E0FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5 D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5D5FFD7D5 D5FFD7D5D5FFD7D5D5FFD7D5D5FFE1E0E0FF0000000000000000000000000000 0000E5E4E4FFCAC9C9FFCAC9C9FFDCDADAFFDCDADAFFDCDADAFFDCDADAFFDCDA DAFFDCDADAFFDCDADAFFDCDADAFFCAC9C9FFCAC9C9FFDCDADAFFCAC9C9FFCAC9 C9FFDCDADAFFCAC9C9FFCAC9C9FFE5E4E4FF0000000000000000000000000000 0000E9E8E8FFEEEEEEFFEEEEEEFFE2E0E0FFE2E0E0FFE2E0E0FFE2E0E0FFE2E0 E0FFE2E0E0FFE2E0E0FFE2E0E0FFEEEEEEFFEEEEEEFFE2E0E0FFEEEEEEFFEEEE EEFFE2E0E0FFEEEEEEFFEEEEEEFFE9E8E8FF0000000000000000000000000000 0000F6F6F6FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4 F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4F4FFF5F4 F4FFF5F4F4FFF5F4F4FFF5F4F4FFF6F6F6FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnFullScreenClick end object gboxSlideShow: TGroupBox AnchorSideRight.Control = btnFullScreen Left = 323 Height = 48 Top = 1 Width = 132 Align = alRight AutoSize = True BorderSpacing.Right = 6 Caption = 'Slide Show' ClientHeight = 28 ClientWidth = 128 TabOrder = 3 Visible = False object seTimeShow: TSpinEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gboxSlideShow AnchorSideRight.Control = gboxSlideShow AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 81 Height = 23 Top = 0 Width = 43 Anchors = [akTop, akRight] BorderSpacing.Right = 4 BorderSpacing.Bottom = 10 MinValue = 1 TabOrder = 0 Value = 1 end object cbSlideShow: TCheckBox AnchorSideTop.Control = seTimeShow AnchorSideTop.Side = asrCenter AnchorSideRight.Control = seTimeShow AnchorSideBottom.Side = asrBottom Left = 0 Height = 19 Top = 2 Width = 77 Anchors = [akTop, akRight] BorderSpacing.Top = 10 BorderSpacing.Right = 4 Caption = 'Slide Show' TabOrder = 1 end end object btnPrev: TSpeedButton Left = 49 Height = 48 Top = 1 Width = 32 Action = actLoadPrevFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000383004F189514EB048A 008D000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000048200841D9819FB2CA92AFF048B 00BC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000520005058501B5219E1EFE07A707FE18AF17FE048A 00BB000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000072001E0C8708DB1D9E1BFF01A701FF00B500FF16BE15FD0388 00B9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000372004A10870DF1149413FE009E00FF00AF00FF00BF00FF13C712FD0384 00B7000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000026F 007D128310FA0B850BFE008F00FF009F00FF00B000FF00C000FF11C610FF0381 00B5000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000660004037100AE026C 00FE057005FE007D00FF008D00FF009C00FF00AB00FF00B800FF0EBB0DFF037D 00B3000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000006A001C076C05D510650FFF005A 00FF006900FF007900FF008700FF009500FF00A200FF00AC00FF0CAD0BFF017A 00B1000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000590018086406EE094B09FE004700FF0357 03FF076807FF057505FF018001FF008C00FF009600FF009E00FF08A008FF0176 00AF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000005D00170B610AED316F31FE347434FF327E 32FF2E842EFF2D8C2DFF2B942BFF2A9A2AFF28A128FF26A426FF2CA62CFF0171 00AE000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000052001B045E03D02D722DFF4388 43FF408E40FF3D933DFF399739FF369B36FF329E32FF2FA12FFF319F31FF016D 00AC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000260004005600A52671 25FE519651FE4F9B4FFF4B9E4BFF48A048FF44A244FF41A341FF3D9F3DFF0069 00AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000051 00711C671CFA5A9F5AFE5EA75EFF5AA85AFF57A857FF53A753FF499F49FF0061 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000004B0041105910EB5DA05DFE6CB16CFF69B169FF65AF65FF56A256FE005A 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000055001A085208D0579657FF7CBC7CFF78BA78FF65A765FD0052 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000260004004D00A4478447FE8AC78AFF71AE71FE004E 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000004C0070347234FA7AAF7AFF0451 04AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000004C0040115811E3447D 4493000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000010000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnNext: TSpeedButton Left = 81 Height = 48 Top = 1 Width = 32 Action = actLoadNextFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000012950ED0169618D60078 0018000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001F9C1BF31EA41DFF1492 0FEF047B00400000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001B9C18F200AE00FF11AE 11FE199715FA027E007400000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000199C16F100C200FF00BD 00FF08B308FE1D9C1AFE037D00A8008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000169B13EF00D600FF00CA 00FF00BA00FF01A901FF028E00FF0A8006D2006B001600000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000149911EF00D200FF00CA 00FF00BB00FF00AB00FF009A00FF129111FE0D7F0AEC046A003C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000011930EEF00C300FF00BF 00FF00B400FF00A600FF009700FF008800FF0A7F0AFD0F7C0DF8026B006D0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000E8D0CEE00B300FF00B1 00FF00A900FF009E00FF009100FF008300FF007400FF056905FE10720EFE0266 00A0008000010000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B8709ED00A400FF00A2 00FF009C00FF009300FF028902FF067F06FF057105FF026102FF015101FF0D5E 0CFF046303BC0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188917ED23A723FF26A7 26FF28A428FF2BA12BFF2B9B2BFF2C922CFF2F8C2FFF338433FF377E37FF2770 27FF046003BA0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188418EC2DA22DFF30A3 30FF34A234FF37A037FF3A9C3AFF3D983DFF419441FF448D44FE217120FE0258 009B008000010000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177C17EB3FA33FFF42A5 42FF46A546FF49A449FF4CA34CFF4FA04FFF4A964AFE166615F7005200650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177417EB51A751FF54A9 54FF58AB58FF5BAB5BFF5EAB5EFF4D964DFE0C5B0CE600500035000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000176C17EA63AE63FF67B1 67FF6AB36AFF6EB46EFF468B46FF025102C50045001300000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000186518EB75B875FF79BC 79FF7BBB7BFF387B38FE004D0098008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001A601AEB87C587FF80BC 80FE286B28F7004D006300000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001C601CEC86B986FF165E 16E8004E00350000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B550BC61E611EC80045 0013000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000001000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnCopyFile: TSpeedButton Left = 113 Height = 48 Hint = 'Copy' Top = 1 Width = 32 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000008A8F8DAE868B 89FF868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF848A87FF848A 86FD858A88C3848A860A00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF2F2 F2FFF2F2F2FFF1F1F1FFF0F0F0FFF1F1F1FFF4F4F4FFF7F7F7FFF6F6F6FF858A 86FFB9BBBAFF858A88FF868C8861000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF7F7 F7FFEAEAEAFFE9E9E9FFEDEEEEFFF1F1F1FFF1F1F1FFF3F3F3FFF4F4F4FF878D 89FFCFCFCFFFB4B5B4FF858A88FF8F9490920000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCFAFA FAFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEFEFFFEFEFEFFFF1F1F1FF848A 86FFCFCFCFFFCFCFCFFFB9BBBAFF858A88FF858B876400000000000000008B90 8D57858A887F858A887F858A887F858A887F858A887F858A8883868B89FDFDFD FDFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFECECECFFF0F0F0FFEEEEEEFF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88CC0000000000000000858A 887EF2F2F27FF3F3F37FF1F1F17FF0F0F07FF1F1F17FEDEDED83878C8AFDFFFF FFFFECEDEDFFECECECFFEBECECFFEAEBEBFFEAEAEAFFEEEFEFFFF0F0F0FFEFEF EFFFF1F1F1FFF2F2F2FFF1F1F1FFBBBEBDFF868B89FC0000000000000000868B 897EF7F7F77FEAEAEA7FE9E9E97FE8E9E97FE8E8E87FE2E3E383878C8AFDFFFF FFFFEDEEEEFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEF EFFFEDEDEDFFEFEFEFFFF2F2F2FFF7F7F7FF888D8BFC0000000000000000868B 897EFAFAFA7FEAEBEB7FEAEAEA7FE9EAEA7FE9E9E97FE1E2E283878C8AFDFFFF FFFFEEEFEFFFC5C5C5FFC5C5C5FFC4C5C5FFC4C4C4FFC3C4C4FFC3C3C3FFCDCD CDFFDCDCDCFFDCDCDCFFF2F2F2FFF9F9F9FF888D8BFC0000000000000000868B 897EFDFDFD7FEBECEC7FEBEBEB7FEAEBEB7FEAEAEA7FE2E3E383878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEEEEFFEDEEEEFFECEDEDFFECEDEDFFEBECECFFEBEB EBFFEFEFEFFFF2F2F2FFEFEFEFFFFCFCFCFF898E8CFC0000000000000000868B 897EFFFFFF7FECEDED7FC7C7C77FC6C7C77FC5C6C67FC1C1C183868B89FDFFFF FFFFEFF0F0FFC7C8C8FFC6C7C7FFC6C7C7FFC5C6C6FFC5C6C6FFC5C5C5FFC5C5 C5FFEDEEEEFFEDEDEDFFF4F4F4FFFEFEFEFF898E8CFC0000000000000000868B 897EFFFFFF7FEDEEEE7FECEDED7FECECEC7FEBECEC7FE4E5E483878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEEEFEFFFEEEFEFFFEDEEEEFFEDED EDFFECEDEDFFEDEEEEFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEEEFEF7FC8C9C97FC8C8C87FC7C8C87FC2C3C383868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC5C6C6FFC5C5 C5FFC5C5C5FFC4C5C5FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEEEFEF7FEEEEEE7FEDEEEE7FE5E6E683878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEDEE EEFFEDEEEEFFECEDEDFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FC9CACA7FC9CACA7FC3C5C583868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC5C6C6FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE7E8E883878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEEEFEFFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC5C6C583868B89FDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE8E9E983868B89FEFFFF FFFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFFFFFF898E8CFD0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC9C9C980959997DA898E 8CFE898E8CFD898E8CFD898E8CFD8A8E8CFD8A8F8DFD898E8CFD898E8CFC898E 8CFC898E8CFC898E8CFC898E8CFC898E8CFD8A8F8DB40000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEEEFEF80E8E9 E983E8E9E983E8E9E983E8E9E983E7E8E883F6F6F6838D919082000000000000 000000000000000000000000000000000000000000000000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0 F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FFEFEFE7F8E92917E000000000000 000000000000000000000000000000000000000000000000000000000000858A 887EFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7F8D91907E000000000000 0000000000000000000000000000000000000000000000000000000000008B90 8D57898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E 8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F8B908D57000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCopyMoveFileClick end object btnMoveFile: TSpeedButton Left = 145 Height = 48 Hint = 'Move' Top = 1 Width = 32 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000010000000200000004000000060000000A0000000F0000 001000000010000000100000001200000013000000110000000D0000000A0000 0006000000030000000300000002000000000000000000000000000000000000 000000000003000000070808AC7D0707AEC00606ACC10505937D0000002B0000 002E0000002C0000002C00000030000000300000002C04048F810606A9C40707 ADC10808A6810000000D00000009000000040000000100000000000000000000 0001000000040C0CB58A1212C5FF1A1AD8FF1818D0FF0A0AB6FF0808A0AF0000 00390000003700000036000000390000003908089FB00A0AB6FF1818D0FF1A1A D8FF1212C5FF0C0CAD9000000010000000070000000200000000000000000000 0000000000020808AFE82121E1FF1515CCFB1111C7FF2323E3FF0909B2EA0404 948E0000002500000024000000240404958D0909B3E92323E3FF1111C7FF1515 CCFB2121E1FF0808AFE800000009000000040000000100000000000000000000 0000000000000C0DAECC2929EFFF0D0DBEFB020299480707B1EA2222E2FF0808 B3E40000000A00000008000000070808B3E42222E2FF0707B1EA020299480D0D BEFB2929EFFF0B0CADCD00000001000000000000000000000000000000000000 0000000000001112AEA82525E7FF1313C9FF0505AE960303AA831C1CD7FF0707 B1FF0000A257000000000000A4560707B1FF1C1CD7FF0303AA830505AE961313 C9FF2525E7FF1112AEA800000000000000000000000000000000000000000000 0000000000001B1CAE440505ADDF1E1EDCFF1111C4EC0606B0EE1717CEFF1515 CBFF0000A4875558AE990000A4871515CBFF1717CEFF0606B0EE1111C4EC1E1E DCFF0505ADDF1B1CAE4400000000000000000000000000000000000000000000 000000000000000000000606B0680909B5E61A1AD4FF1F1FDCFF2121E1FF2121 E1FF0303AAFE0303AAFF0303AAFE2121E1FF2121E1FF1F1FDCFF1A1AD4FF0909 B5E60606B0680000000000000000000000000000000000000000000000000000 00000000000000000000000000000000A4200808B3A10909B5F60505AEFE3031 DAFF393AC7FF0303AAFF393AC7FF3031DAFF0505AEFE0909B5F60808B3A10000 A420000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000606B0816B6F 94FFB1B3B6FF00000000B1B3B6FF6B6F94FF0606B08100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000858A88878B8F 9BFFE2E2E2FFD8D8D8FFBEC0BFFF9295A9FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A881F878C8AFCDEE0 DFFFDADADAFFD8D8D8FFB1B4B3FFBABCBAFF989C9BD500000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A88C0ABAEADFDDFDF DFFFDBDBDBFFAFB2B0FFBDBFBEFFDCDCDCFF959997FF858A883C000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A8857878C8AFFE9EAEAFFDCDC DCFFD6D6D6FFA7ABA9FFC1C3C1FFDBDBDBFFDDDEDEFF929795F9000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88EFC0C3C2FEE0E0E0FFDDDD DDFF9A9E9DFF9A9E9C90A2A5A4FFDCDCDCFFDCDCDCFFB0B2B1FF909593A80000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000858A889C8D9290FEEBEBEBFFDFDFDFFFC8C9 C9FFA8ABAAD900000000919694F1D3D5D4FFDDDDDDFFE2E2E2FF898E8CFF858A 881F000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A881F858A88FEDFE0E0FFE0E0E0FFE0E0E0FF959A 98FF0000000000000000858A883C8F9492FFE1E1E1FFDEDEDEFFCBCCCBFF8F93 91EF000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A88CF9A9E9DFDE8E8E8FFE1E1E1FFB1B3B2FFA2A6 A4BE000000000000000000000000929795CFC3C6C5FFDFDFDFFFE2E2E2FF959A 98FF858A88700000000000000000000000000000000000000000000000000000 000000000000000000008C918FF5EBEBEBFFE2E2E2FFDCDDDCFF989C9BFC0000 0000000000000000000000000000858A881F898E8CFFE2E3E3FFE0E0E0FFD8D9 D8FF929795F90000000000000000000000000000000000000000000000000000 00000000000000000000909593DAD6D8D7FFE2E2E2FF9C9F9FFF989C9B810000 000000000000000000000000000000000000909593A8A8ACABFFE3E3E3FFD0D1 D0FF9DA1A0DC0000000000000000000000000000000000000000000000000000 00000000000000000000858A88708E9391FEC1C4C2FF999D9CF7000000000000 000000000000000000000000000000000000000000008D9290FBD1D3D2FF9094 92FF858A88AF0000000000000000000000000000000000000000000000000000 00000000000000000000000000008C918FC78A8F8DFF858A883C000000000000 00000000000000000000000000000000000000000000858A8870858A88FF8E92 90E4000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCopyMoveFileClick end object btnDeleteFile: TSpeedButton Left = 177 Height = 48 Hint = 'Delete' Top = 1 Width = 32 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000972000009BC000009720000000000000 0000000000000000000000000000000000000000000000000000000097200000 9BC0000097200000000000000000000000000000000000000000000000000000 0000000000000000000000009F2001019DE02E2EB4FF05059FE000009F200000 0000000000000000000000000000000000000000000000009F2000009DE02525 B3FF01019EE100009F2000000000000000000000000000000000000000000000 00000000000000009F200101A1E03E3EBFFF2424C1FF4242C5FF0303A2E00000 9F200000000000000000000000000000000000009F200000A1E03838C4FF2C2C C9FF4242C4FF0101A2E100009F20000000000000000000000000000000000000 000000009F200101A3E04242C0FF1A1ABEFF0808C0FF1313C9FF4343CCFF0303 A4E000009F20000000000000000000009F200000A3E03A3ACBFF1C1CD1FF0707 C6FF1717C4FF4444C5FF0101A4E000009F200000000000000000000000000000 00000000A6C02525B5FF3232C3FF0808BEFF0707C4FF0606CCFF1313D4FF4444 D3FF0202A7E00000A7200000A7200101A6E03F3FD2FF1C1CDCFF0606D2FF0606 CCFF0707C4FF2424C5FF3636BDFF0000A6C00000000000000000000000000000 00000000A7200000A8E03D3DC4FF1F1FC7FF0606C8FF0606CFFF0505D7FF1414 E0FF4444D9FF0202A9E00101A8E04242D9FF1A1AE7FF0404DEFF0505D7FF0606 CFFF1313CBFF4848CBFF0505AAE00000A7200000000000000000000000000000 0000000000000000A7200000ABE03F3FCCFF1D1DD0FF0606D2FF0404DAFF0303 E1FF1414EAFF4545DFFF4444DFFF1818F1FF0202E8FF0303E1FF0404DAFF1515 D5FF4B4BD3FF0303ADE10000A720000000000000000000000000000000000000 000000000000000000000000AF200000AFE14343D2FF1C1CD8FF0404DCFF0303 E3FF0202E9FF1313F1FF1414F4FF0101F0FF0202E9FF0303E3FF1414DEFF4C4C DAFF0303B1E10000AF2000000000000000000000000000000000000000000000 00000000000000000000000000000000AF200000B1E14545D8FF1818DEFF0303 E1FF0202E7FF0202EBFF0101EDFF0202EBFF0202E7FF1515E3FF4D4DDFFF0303 B2E10000AF200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000AF200101B4E14B4BDEFF4646 E6FF5858EDFF6162F0FF6465F1FF6666EFFF6C6CEEFF8080EAFF0303B6E20000 AF20000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000B7200606B9E19899EBFF7D7E EDFF5D5EE9FF5555EAFF4E4EEAFF4748E9FF5151E8FF9191ECFF0707B9E20000 B720000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000B7200202BAE09495E9FF8082E9FF696B E8FF6465E8FF5B5CEAFF5555E7FF4F4FE7FF4748E4FF5555E4FF8B8BE7FF0404 BCE10000B7200000000000000000000000000000000000000000000000000000 000000000000000000000000BF200101BBE08F8FE4FF8C8EEAFF797AE7FF7273 E6FF6A6CE7FF7374E9FF6E6EE8FF5656E3FF5050E1FF4849DFFF5556DFFF8484 E2FF0202BCE10000BF2000000000000000000000000000000000000000000000 0000000000000000BF200000BFE08989E0FF989AE9FF8687E7FF7F81E6FF797A E7FF7F81E7FF8B8BE7FF8585E5FF6F6FE5FF5757DFFF5050DDFF4949D9FF5758 D9FF7C7CDDFF0101BFE10000BF20000000000000000000000000000000000000 00000000BF200000C2E08182DEFFA3A4EBFF9596E8FF8E8FE7FF8687E6FF898B E8FF8B8BE5FF0303C4E00202C3E08282E4FF6F6FE1FF5757DAFF5050D8FF4949 D3FF595AD4FF7676D9FF0202C0E10000BF200000000000000000000000000000 00000000C5C0B6B6EDFFB3B5EEFFA1A3EAFF9B9CE8FF9596E8FF9596E8FF8B8C E5FF0404C6E00000C7200000C7200303C5E08182E1FF6D6DDDFF5858D6FF5252 D2FF4A4ACDFF6D6ED4FF5353D2FF0000C5C00000000000000000000000000000 00000000C7202A2ACDE4ABACEFFFAEB0EEFFA1A3EAFFA1A3E9FF8C8CE2FF0606 C4E00000C72000000000000000000000C7200303C5E07F7FDFFF6B6CDAFF5959 D1FF6666D3FF7D7EDEFF0808C6E10000C7200000000000000000000000000000 0000000000000000C7201212C8E2A9ABEDFFB3B4EFFF8C8CE1FF0505C4E00000 C720000000000000000000000000000000000000C7200505C5E07D7EDEFF7E7F DBFF8081DDFF0606C6E10000C720000000000000000000000000000000000000 000000000000000000000000C7201D1DCAE3C3C3F1FF0606C4E10000C7200000 000000000000000000000000000000000000000000000000C7200505C5E0AAAB EAFF2525CCE30000C72000000000000000000000000000000000000000000000 00000000000000000000000000000000C7200000C5C00000C720000000000000 00000000000000000000000000000000000000000000000000000000C7200000 C5C00000C7200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnDeleteFileClick end end end object Splitter: TSplitter Left = 170 Height = 457 Top = 0 Width = 9 AutoSnap = False MinSize = 160 OnChangeBounds = SplitterChangeBounds Visible = False end object pnlPreview: TPanel Left = 0 Height = 457 Top = 0 Width = 170 Align = alLeft BevelOuter = bvNone ClientHeight = 457 ClientWidth = 170 TabOrder = 5 Visible = False object pnlEditFile: TPanel Left = 0 Height = 30 Top = 0 Width = 170 Align = alTop Alignment = taLeftJustify ClientHeight = 30 ClientWidth = 170 TabOrder = 0 object btnReload1: TSpeedButton AnchorSideBottom.Control = btnPrev1 Left = 1 Height = 28 Top = 1 Width = 32 Action = actReload Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000005B0007004E006C0050 01AB095E12DB015B01F5005D00F7095F11E2015102BA004F007F004A00110000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000050004C075D0DEB076B0DFF0A92 30FF15B125FF0AD113FF06E60BFF0DD317FF17B12CFF06790BFF05580AEE004E 006D004E00090000000000000000000000000000000000000000000000000000 00000000000000000000004E0009015002BB0B6515FD159227FF18A72DFF1AB1 31FF14C226FF0FD11DFF0CDA17FF0CDA17FF0FD11DFF14C226FF21AD3EFF1274 22F2005001C2004A001B00000000000000000000000000000000000000000000 00000000000000000000025003B80F721DFF0A9513FF0F9D1DFF15A427FF1AAA 31FF18B52FFF15C027FF12C723FF12C723FF14C027FF18B52EFF1AAA32F016A5 2ACD137923C0004F00A700550008000000000000000000000000000000000000 0000000000000051005C085B0FFE028D05FF07940DFF0C9A17FF119F20FF16A5 29FF19A931FF1BAE33FF19B330FF19B330FF1AAE33FF1AA931EF16A529D1119F 21AD0F9C1C8D0B68139B00540030000000000000000000000000000000000000 0000004D000F045108F505750AFF008C01FF049108FF08950FFF0D9A18FF17A2 2AFF0D7B19FF0B6A14FD0A6413FD0D7019FF189F2EEB14A326D3119F20B10D9A 1890089510730B95155809651137000000000000000000000000000000000000 00000255057B06530CFF007000FF008100FF018D02FF049109FF0F8E1CFF075F 0EF00253048F004C0041004E003B02500474045208D70D8019B00B99167E0895 0F6305910949018D02350D731824046A07020000000000000000000000000000 0000035306C1045109FF006300FF007300FF008300FF068E0AFF05590AF5004D 014F00000000000000000000000000000000004C0026025004B106880B490490 0730018D02230083001709770F0D05620B020000000000000000000000000000 0000045108E8014D01FF005500FF006400FF007300FF06660CFF015103AB0000 00000000000000000000000000000000000000000000004E01290A6211160263 040F02540609044F07050A5B140100000000000000000000000000000000004D 0001054D07F9085508FF0B570BFF0A5D0AFF006200FF055207FE014F015A0000 0000000000000000000000000000000000000000000000000000065210050957 1303000000000000000000000000000000000000000000000000000000000000 0000065108FB267026FF287228FF277127FF005000FF034B06FE014D015A0000 00000000000000000000004D0004125E1BEC025C03FF045C04FF045B05FF0459 06FF015503FF025304FF025405FF07600DA90000000000000000000000000000 000008550CE62B752BFF357E35FF357E35FF085408FF034B06FF035306870000 00000000000000000000004D0008024E04D1028004FF13C813FF2DC72DFF35BD 35FF34AF34FF249824FF127B12FF055A08FF0000000000000000000000000000 0000095B10BE266E27FF418A41FF418A41FF266F26FF014C01FF045107F30351 0311000000000000000000000000004D0033034F07E2027704FF019601FF20A1 20FF41AD41FF41A641FF419D41FF0B5F0EFF0000000000000000000000000000 000007610F7D1C641DFF4F964FFF4F964FFF4F964FFF166016FF014E03FF044F 08F30758105900802B030064140605540A6B034D05F7016A02FF017A01FF3CA2 3CFF4FAB4FFF4FA64FFF4FA24FFF0C610FFF0000000000000000000000000000 00000057000A09560BF4498F49FF5BA15BFF5BA15BFF549A54FF1B641BFF014D 01FF024C03FF024B04FE044C06FE024C03FF015401FF086508FF3F963FFF5BAC 5BFF5BAB5BFF5BA95BFF5BA75BFF0D610FFF0000000000000000000000000000 000000000000045C0852155F17FE66AA66FF68AD68FF68AD68FF69AE69FF468B 46FF226A22FF085408FF045004FF176017FF307930FF5FA75FFF68B068FF68B0 68FF68B068FF68AF68FF68AF68FF0E6210FF0000000000000000000000000000 00000000000000000000035A06BB337933FF70B570FF74B974FF74B974FF74B9 74FF74B974FF77BA77FF75B875FF74B974FF74B974FF74B974FF74B974FF76BA 76FF61A361FF539A55FF75B975FF0F6311FF0000000000000000000000000000 0000000000000000000000540007035D05B71C691DFE65A865FF81C581FF81C5 81FF81C581FF81C581FF81C581FF81C581FF81C581FF81C581FF80BF80FF367E 38FE025703D5015903D7479147FF116612FF0000000000000000000000000000 0000000000000000000000000000000000000060024D0E620EF1347C34FF5799 57FF74B474FF7FC47FFF84C984FF80BF80FF6EAA6EFF4A8E4AFF0D5E0DF40056 018C004D0010004D001F005C01B8458E45E60000000000000000000000000000 00000000000000000000000000000000000000000000006000080063007A0160 01B5216F21E6337633FD347634FE2D732DEF166816CA015C0194005000290000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnPrev1: TSpeedButton Left = 33 Height = 28 Top = 1 Width = 24 Action = actLoadPrevFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000383004F189514EB048A 008D000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000048200841D9819FB2CA92AFF048B 00BC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000520005058501B5219E1EFE07A707FE18AF17FE048A 00BB000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000072001E0C8708DB1D9E1BFF01A701FF00B500FF16BE15FD0388 00B9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000372004A10870DF1149413FE009E00FF00AF00FF00BF00FF13C712FD0384 00B7000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000026F 007D128310FA0B850BFE008F00FF009F00FF00B000FF00C000FF11C610FF0381 00B5000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000660004037100AE026C 00FE057005FE007D00FF008D00FF009C00FF00AB00FF00B800FF0EBB0DFF037D 00B3000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000006A001C076C05D510650FFF005A 00FF006900FF007900FF008700FF009500FF00A200FF00AC00FF0CAD0BFF017A 00B1000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000590018086406EE094B09FE004700FF0357 03FF076807FF057505FF018001FF008C00FF009600FF009E00FF08A008FF0176 00AF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000005D00170B610AED316F31FE347434FF327E 32FF2E842EFF2D8C2DFF2B942BFF2A9A2AFF28A128FF26A426FF2CA62CFF0171 00AE000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000052001B045E03D02D722DFF4388 43FF408E40FF3D933DFF399739FF369B36FF329E32FF2FA12FFF319F31FF016D 00AC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000260004005600A52671 25FE519651FE4F9B4FFF4B9E4BFF48A048FF44A244FF41A341FF3D9F3DFF0069 00AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000051 00711C671CFA5A9F5AFE5EA75EFF5AA85AFF57A857FF53A753FF499F49FF0061 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000004B0041105910EB5DA05DFE6CB16CFF69B169FF65AF65FF56A256FE005A 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000055001A085208D0579657FF7CBC7CFF78BA78FF65A765FD0052 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000260004004D00A4478447FE8AC78AFF71AE71FE004E 00A9000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000004C0070347234FA7AAF7AFF0451 04AA000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000004C0040115811E3447D 4493000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000010000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnNext1: TSpeedButton Left = 57 Height = 28 Top = 1 Width = 24 Action = actLoadNextFile Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000012950ED0169618D60078 0018000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001F9C1BF31EA41DFF1492 0FEF047B00400000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001B9C18F200AE00FF11AE 11FE199715FA027E007400000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000199C16F100C200FF00BD 00FF08B308FE1D9C1AFE037D00A8008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000169B13EF00D600FF00CA 00FF00BA00FF01A901FF028E00FF0A8006D2006B001600000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000149911EF00D200FF00CA 00FF00BB00FF00AB00FF009A00FF129111FE0D7F0AEC046A003C000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000011930EEF00C300FF00BF 00FF00B400FF00A600FF009700FF008800FF0A7F0AFD0F7C0DF8026B006D0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000E8D0CEE00B300FF00B1 00FF00A900FF009E00FF009100FF008300FF007400FF056905FE10720EFE0266 00A0008000010000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B8709ED00A400FF00A2 00FF009C00FF009300FF028902FF067F06FF057105FF026102FF015101FF0D5E 0CFF046303BC0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188917ED23A723FF26A7 26FF28A428FF2BA12BFF2B9B2BFF2C922CFF2F8C2FFF338433FF377E37FF2770 27FF046003BA0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000188418EC2DA22DFF30A3 30FF34A234FF37A037FF3A9C3AFF3D983DFF419441FF448D44FE217120FE0258 009B008000010000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177C17EB3FA33FFF42A5 42FF46A546FF49A449FF4CA34CFF4FA04FFF4A964AFE166615F7005200650000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000177417EB51A751FF54A9 54FF58AB58FF5BAB5BFF5EAB5EFF4D964DFE0C5B0CE600500035000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000176C17EA63AE63FF67B1 67FF6AB36AFF6EB46EFF468B46FF025102C50045001300000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000186518EB75B875FF79BC 79FF7BBB7BFF387B38FE004D0098008000010000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001A601AEB87C587FF80BC 80FE286B28F7004D006300000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000001C601CEC86B986FF165E 16E8004E00350000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000B550BC61E611EC80045 0013000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000001000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ShowCaption = False end object btnCopyFile1: TSpeedButton Left = 81 Height = 28 Hint = 'Copy' Top = 1 Width = 32 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000008A8F8DAE868B 89FF868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF848A87FF848A 86FD858A88C3848A860A00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF2F2 F2FFF2F2F2FFF1F1F1FFF0F0F0FFF1F1F1FFF4F4F4FFF7F7F7FFF6F6F6FF858A 86FFB9BBBAFF858A88FF868C8861000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCF7F7 F7FFEAEAEAFFE9E9E9FFEDEEEEFFF1F1F1FFF1F1F1FFF3F3F3FFF4F4F4FF878D 89FFCFCFCFFFB4B5B4FF858A88FF8F9490920000000000000000000000000000 0000000000000000000000000000000000000000000000000000868B89FCFAFA FAFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEFEFFFEFEFEFFFF1F1F1FF848A 86FFCFCFCFFFCFCFCFFFB9BBBAFF858A88FF858B876400000000000000008B90 8D57858A887F858A887F858A887F858A887F858A887F858A8883868B89FDFDFD FDFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFECECECFFF0F0F0FFEEEEEEFF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88CC0000000000000000858A 887EF2F2F27FF3F3F37FF1F1F17FF0F0F07FF1F1F17FEDEDED83878C8AFDFFFF FFFFECEDEDFFECECECFFEBECECFFEAEBEBFFEAEAEAFFEEEFEFFFF0F0F0FFEFEF EFFFF1F1F1FFF2F2F2FFF1F1F1FFBBBEBDFF868B89FC0000000000000000868B 897EF7F7F77FEAEAEA7FE9E9E97FE8E9E97FE8E8E87FE2E3E383878C8AFDFFFF FFFFEDEEEEFFEBECECFFEBEBEBFFEAEBEBFFEAEAEAFFE9EAEAFFECECECFFEFEF EFFFEDEDEDFFEFEFEFFFF2F2F2FFF7F7F7FF888D8BFC0000000000000000868B 897EFAFAFA7FEAEBEB7FEAEAEA7FE9EAEA7FE9E9E97FE1E2E283878C8AFDFFFF FFFFEEEFEFFFC5C5C5FFC5C5C5FFC4C5C5FFC4C4C4FFC3C4C4FFC3C3C3FFCDCD CDFFDCDCDCFFDCDCDCFFF2F2F2FFF9F9F9FF888D8BFC0000000000000000868B 897EFDFDFD7FEBECEC7FEBEBEB7FEAEBEB7FEAEAEA7FE2E3E383878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEEEEFFEDEEEEFFECEDEDFFECEDEDFFEBECECFFEBEB EBFFEFEFEFFFF2F2F2FFEFEFEFFFFCFCFCFF898E8CFC0000000000000000868B 897EFFFFFF7FECEDED7FC7C7C77FC6C7C77FC5C6C67FC1C1C183868B89FDFFFF FFFFEFF0F0FFC7C8C8FFC6C7C7FFC6C7C7FFC5C6C6FFC5C6C6FFC5C5C5FFC5C5 C5FFEDEEEEFFEDEDEDFFF4F4F4FFFEFEFEFF898E8CFC0000000000000000868B 897EFFFFFF7FEDEEEE7FECEDED7FECECEC7FEBECEC7FE4E5E483878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEEEFEFFFEEEFEFFFEDEEEEFFEDED EDFFECEDEDFFEDEEEEFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEEEFEF7FC8C9C97FC8C8C87FC7C8C87FC2C3C383868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC5C6C6FFC5C5 C5FFC5C5C5FFC4C5C5FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEEEFEF7FEEEEEE7FEDEEEE7FE5E6E683878C8AFDFFFF FFFFEFF0F0FFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEEEFEFFFEDEE EEFFEDEEEEFFECEDEDFFEDEDEDFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FC9CACA7FC9CACA7FC3C5C583868B89FDFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC5C6C6FFEEEEEEFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE7E8E883878C8AFDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEEEFEFFFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC5C6C583868B89FDFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFEFEFEFF898E8CFC0000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FE8E9E983868B89FEFFFF FFFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFFFFFF898E8CFD0000000000000000868C 8A7EFFFFFF7FEFF0F07FCACACA7FCACACA7FCACACA7FC9C9C980959997DA898E 8CFE898E8CFD898E8CFD898E8CFD8A8E8CFD8A8F8DFD898E8CFD898E8CFC898E 8CFC898E8CFC898E8CFC898E8CFC898E8CFD8A8F8DB40000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEEEFEF80E8E9 E983E8E9E983E8E9E983E8E9E983E7E8E883F6F6F6838D919082000000000000 000000000000000000000000000000000000000000000000000000000000868C 8A7EFFFFFF7FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FEFF0 F07FEFF0F07FEFF0F07FEFF0F07FEFF0F07FFEFEFE7F8E92917E000000000000 000000000000000000000000000000000000000000000000000000000000858A 887EFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7F8D91907E000000000000 0000000000000000000000000000000000000000000000000000000000008B90 8D57898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E 8C7F898E8C7F898E8C7F898E8C7F898E8C7F898E8C7F8B908D57000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCopyMoveFileClick end object btnMoveFile1: TSpeedButton Left = 145 Height = 28 Hint = 'Move' Top = 1 Width = 31 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000010000000200000004000000060000000A0000000F0000 001000000010000000100000001200000013000000110000000D0000000A0000 0006000000030000000300000002000000000000000000000000000000000000 000000000003000000070808AC7D0707AEC00606ACC10505937D0000002B0000 002E0000002C0000002C00000030000000300000002C04048F810606A9C40707 ADC10808A6810000000D00000009000000040000000100000000000000000000 0001000000040C0CB58A1212C5FF1A1AD8FF1818D0FF0A0AB6FF0808A0AF0000 00390000003700000036000000390000003908089FB00A0AB6FF1818D0FF1A1A D8FF1212C5FF0C0CAD9000000010000000070000000200000000000000000000 0000000000020808AFE82121E1FF1515CCFB1111C7FF2323E3FF0909B2EA0404 948E0000002500000024000000240404958D0909B3E92323E3FF1111C7FF1515 CCFB2121E1FF0808AFE800000009000000040000000100000000000000000000 0000000000000C0DAECC2929EFFF0D0DBEFB020299480707B1EA2222E2FF0808 B3E40000000A00000008000000070808B3E42222E2FF0707B1EA020299480D0D BEFB2929EFFF0B0CADCD00000001000000000000000000000000000000000000 0000000000001112AEA82525E7FF1313C9FF0505AE960303AA831C1CD7FF0707 B1FF0000A257000000000000A4560707B1FF1C1CD7FF0303AA830505AE961313 C9FF2525E7FF1112AEA800000000000000000000000000000000000000000000 0000000000001B1CAE440505ADDF1E1EDCFF1111C4EC0606B0EE1717CEFF1515 CBFF0000A4875558AE990000A4871515CBFF1717CEFF0606B0EE1111C4EC1E1E DCFF0505ADDF1B1CAE4400000000000000000000000000000000000000000000 000000000000000000000606B0680909B5E61A1AD4FF1F1FDCFF2121E1FF2121 E1FF0303AAFE0303AAFF0303AAFE2121E1FF2121E1FF1F1FDCFF1A1AD4FF0909 B5E60606B0680000000000000000000000000000000000000000000000000000 00000000000000000000000000000000A4200808B3A10909B5F60505AEFE3031 DAFF393AC7FF0303AAFF393AC7FF3031DAFF0505AEFE0909B5F60808B3A10000 A420000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000606B0816B6F 94FFB1B3B6FF00000000B1B3B6FF6B6F94FF0606B08100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000858A88878B8F 9BFFE2E2E2FFD8D8D8FFBEC0BFFF9295A9FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A881F878C8AFCDEE0 DFFFDADADAFFD8D8D8FFB1B4B3FFBABCBAFF989C9BD500000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000858A88C0ABAEADFDDFDF DFFFDBDBDBFFAFB2B0FFBDBFBEFFDCDCDCFF959997FF858A883C000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A8857878C8AFFE9EAEAFFDCDC DCFFD6D6D6FFA7ABA9FFC1C3C1FFDBDBDBFFDDDEDEFF929795F9000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88EFC0C3C2FEE0E0E0FFDDDD DDFF9A9E9DFF9A9E9C90A2A5A4FFDCDCDCFFDCDCDCFFB0B2B1FF909593A80000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000858A889C8D9290FEEBEBEBFFDFDFDFFFC8C9 C9FFA8ABAAD900000000919694F1D3D5D4FFDDDDDDFFE2E2E2FF898E8CFF858A 881F000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A881F858A88FEDFE0E0FFE0E0E0FFE0E0E0FF959A 98FF0000000000000000858A883C8F9492FFE1E1E1FFDEDEDEFFCBCCCBFF8F93 91EF000000000000000000000000000000000000000000000000000000000000 00000000000000000000858A88CF9A9E9DFDE8E8E8FFE1E1E1FFB1B3B2FFA2A6 A4BE000000000000000000000000929795CFC3C6C5FFDFDFDFFFE2E2E2FF959A 98FF858A88700000000000000000000000000000000000000000000000000000 000000000000000000008C918FF5EBEBEBFFE2E2E2FFDCDDDCFF989C9BFC0000 0000000000000000000000000000858A881F898E8CFFE2E3E3FFE0E0E0FFD8D9 D8FF929795F90000000000000000000000000000000000000000000000000000 00000000000000000000909593DAD6D8D7FFE2E2E2FF9C9F9FFF989C9B810000 000000000000000000000000000000000000909593A8A8ACABFFE3E3E3FFD0D1 D0FF9DA1A0DC0000000000000000000000000000000000000000000000000000 00000000000000000000858A88708E9391FEC1C4C2FF999D9CF7000000000000 000000000000000000000000000000000000000000008D9290FBD1D3D2FF9094 92FF858A88AF0000000000000000000000000000000000000000000000000000 00000000000000000000000000008C918FC78A8F8DFF858A883C000000000000 00000000000000000000000000000000000000000000858A8870858A88FF8E92 90E4000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCopyMoveFileClick end object btnDeleteFile1: TSpeedButton Left = 113 Height = 28 Hint = 'Delete' Top = 1 Width = 32 Align = alLeft Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 2000000000000009000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000972000009BC000009720000000000000 0000000000000000000000000000000000000000000000000000000097200000 9BC0000097200000000000000000000000000000000000000000000000000000 0000000000000000000000009F2001019DE02E2EB4FF05059FE000009F200000 0000000000000000000000000000000000000000000000009F2000009DE02525 B3FF01019EE100009F2000000000000000000000000000000000000000000000 00000000000000009F200101A1E03E3EBFFF2424C1FF4242C5FF0303A2E00000 9F200000000000000000000000000000000000009F200000A1E03838C4FF2C2C C9FF4242C4FF0101A2E100009F20000000000000000000000000000000000000 000000009F200101A3E04242C0FF1A1ABEFF0808C0FF1313C9FF4343CCFF0303 A4E000009F20000000000000000000009F200000A3E03A3ACBFF1C1CD1FF0707 C6FF1717C4FF4444C5FF0101A4E000009F200000000000000000000000000000 00000000A6C02525B5FF3232C3FF0808BEFF0707C4FF0606CCFF1313D4FF4444 D3FF0202A7E00000A7200000A7200101A6E03F3FD2FF1C1CDCFF0606D2FF0606 CCFF0707C4FF2424C5FF3636BDFF0000A6C00000000000000000000000000000 00000000A7200000A8E03D3DC4FF1F1FC7FF0606C8FF0606CFFF0505D7FF1414 E0FF4444D9FF0202A9E00101A8E04242D9FF1A1AE7FF0404DEFF0505D7FF0606 CFFF1313CBFF4848CBFF0505AAE00000A7200000000000000000000000000000 0000000000000000A7200000ABE03F3FCCFF1D1DD0FF0606D2FF0404DAFF0303 E1FF1414EAFF4545DFFF4444DFFF1818F1FF0202E8FF0303E1FF0404DAFF1515 D5FF4B4BD3FF0303ADE10000A720000000000000000000000000000000000000 000000000000000000000000AF200000AFE14343D2FF1C1CD8FF0404DCFF0303 E3FF0202E9FF1313F1FF1414F4FF0101F0FF0202E9FF0303E3FF1414DEFF4C4C DAFF0303B1E10000AF2000000000000000000000000000000000000000000000 00000000000000000000000000000000AF200000B1E14545D8FF1818DEFF0303 E1FF0202E7FF0202EBFF0101EDFF0202EBFF0202E7FF1515E3FF4D4DDFFF0303 B2E10000AF200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000AF200101B4E14B4BDEFF4646 E6FF5858EDFF6162F0FF6465F1FF6666EFFF6C6CEEFF8080EAFF0303B6E20000 AF20000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000B7200606B9E19899EBFF7D7E EDFF5D5EE9FF5555EAFF4E4EEAFF4748E9FF5151E8FF9191ECFF0707B9E20000 B720000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000B7200202BAE09495E9FF8082E9FF696B E8FF6465E8FF5B5CEAFF5555E7FF4F4FE7FF4748E4FF5555E4FF8B8BE7FF0404 BCE10000B7200000000000000000000000000000000000000000000000000000 000000000000000000000000BF200101BBE08F8FE4FF8C8EEAFF797AE7FF7273 E6FF6A6CE7FF7374E9FF6E6EE8FF5656E3FF5050E1FF4849DFFF5556DFFF8484 E2FF0202BCE10000BF2000000000000000000000000000000000000000000000 0000000000000000BF200000BFE08989E0FF989AE9FF8687E7FF7F81E6FF797A E7FF7F81E7FF8B8BE7FF8585E5FF6F6FE5FF5757DFFF5050DDFF4949D9FF5758 D9FF7C7CDDFF0101BFE10000BF20000000000000000000000000000000000000 00000000BF200000C2E08182DEFFA3A4EBFF9596E8FF8E8FE7FF8687E6FF898B E8FF8B8BE5FF0303C4E00202C3E08282E4FF6F6FE1FF5757DAFF5050D8FF4949 D3FF595AD4FF7676D9FF0202C0E10000BF200000000000000000000000000000 00000000C5C0B6B6EDFFB3B5EEFFA1A3EAFF9B9CE8FF9596E8FF9596E8FF8B8C E5FF0404C6E00000C7200000C7200303C5E08182E1FF6D6DDDFF5858D6FF5252 D2FF4A4ACDFF6D6ED4FF5353D2FF0000C5C00000000000000000000000000000 00000000C7202A2ACDE4ABACEFFFAEB0EEFFA1A3EAFFA1A3E9FF8C8CE2FF0606 C4E00000C72000000000000000000000C7200303C5E07F7FDFFF6B6CDAFF5959 D1FF6666D3FF7D7EDEFF0808C6E10000C7200000000000000000000000000000 0000000000000000C7201212C8E2A9ABEDFFB3B4EFFF8C8CE1FF0505C4E00000 C720000000000000000000000000000000000000C7200505C5E07D7EDEFF7E7F DBFF8081DDFF0606C6E10000C720000000000000000000000000000000000000 000000000000000000000000C7201D1DCAE3C3C3F1FF0606C4E10000C7200000 000000000000000000000000000000000000000000000000C7200505C5E0AAAB EAFF2525CCE30000C72000000000000000000000000000000000000000000000 00000000000000000000000000000000C7200000C5C00000C720000000000000 00000000000000000000000000000000000000000000000000000000C7200000 C5C00000C7200000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnDeleteFileClick end end object DrawPreview: TDrawGrid Left = 0 Height = 427 Top = 30 Width = 170 Align = alClient AutoAdvance = aaNone AutoFillColumns = True BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter BorderStyle = bsNone ColCount = 1 DefaultColWidth = 150 DefaultRowHeight = 140 ExtendedSelect = False FixedColor = clAppWorkspace FixedCols = 0 FixedRows = 0 Font.Style = [fsItalic] MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goSmoothScroll] ParentFont = False RowCount = 1 ScrollBars = ssAutoVertical TabOrder = 1 TitleFont.Style = [fsItalic] TitleStyle = tsNative OnDrawCell = DrawPreviewDrawCell OnSelection = DrawPreviewSelection OnTopleftChanged = DrawPreviewTopleftChanged ColWidths = ( 170 ) end end object MainMenu: TMainMenu ParentBidiMode = False left = 80 top = 64 object miFile: TMenuItem Caption = '&File' object miPrev: TMenuItem Action = actLoadPrevFile end object miNext: TMenuItem Action = actLoadNextFile end object miSave: TMenuItem Caption = 'Save' OnClick = miSaveClick end object miSaveAs: TMenuItem Caption = 'Save As...' OnClick = miSaveAsClick end object miPrint: TMenuItem Caption = 'Print...' Enabled = False ShortCut = 16464 OnClick = miPrintClick end object miReload: TMenuItem Action = actReload end object miSeparator: TMenuItem Caption = '-' end object miExit: TMenuItem Caption = 'E&xit' OnClick = miExitClick end end object miEdit: TMenuItem Caption = '&Edit' object miCopyToClipboard: TMenuItem Caption = 'Copy To Clipboard' ShortCut = 16451 OnClick = miCopyToClipboardClick end object miSelectAll: TMenuItem Caption = 'Select All' ShortCut = 16449 OnClick = miSelectAllClick end object miDiv3: TMenuItem Caption = '-' end object miSearch: TMenuItem Caption = 'Search' ShortCut = 16454 OnClick = miSearchClick end object miSearchNext: TMenuItem Caption = 'Search next' ShortCut = 114 OnClick = miSearchNextClick end object miSearchPrev: TMenuItem Caption = 'Search prev' ShortCut = 8306 OnClick = miSearchPrevClick end end object miView: TMenuItem Caption = '&View' object miPreview: TMenuItem Caption = 'Preview' OnClick = miPreviewClick end object miDiv4: TMenuItem Caption = '-' end object miText: TMenuItem AutoCheck = True Caption = 'Show as &Text' GroupIndex = 1 RadioItem = True ShortCut = 49 OnClick = miTextClick end object miBin: TMenuItem AutoCheck = True Caption = 'Show as &Bin' GroupIndex = 1 RadioItem = True ShortCut = 50 OnClick = miTextClick end object miHex: TMenuItem AutoCheck = True Caption = 'Show as &Hex' GroupIndex = 1 RadioItem = True ShortCut = 51 OnClick = miTextClick end object miWrapText: TMenuItem AutoCheck = True Caption = 'Show as &Wrap text' GroupIndex = 1 RadioItem = True ShortCut = 52 OnClick = miTextClick end object miLookBook: TMenuItem AutoCheck = True Caption = 'Show as B&ook' GroupIndex = 1 RadioItem = True ShortCut = 32781 OnClick = miTextClick end object miDiv2: TMenuItem Caption = '-' end object miGraphics: TMenuItem AutoCheck = True Caption = 'Graphics' GroupIndex = 1 RadioItem = True ShortCut = 54 OnClick = miGraphicsClick end object miDiv1: TMenuItem Caption = '-' end object miPlugins: TMenuItem AutoCheck = True Caption = 'Plugins' GroupIndex = 1 RadioItem = True ShortCut = 55 OnClick = miPluginsClick end end object miEncoding: TMenuItem Caption = 'En&coding' end object miImage: TMenuItem Caption = '&Image' object miStretch: TMenuItem Caption = 'Stretch' OnClick = miStretchClick end object miStretchOnlyLarge: TMenuItem Caption = 'Stretch only large' OnClick = miStretchOnlyLargeClick end object miCenter: TMenuItem Caption = 'Center' OnClick = miCenterClick end object miRotate: TMenuItem Caption = 'Rotate' object mi90: TMenuItem Caption = '+ 90' OnClick = miRotateClick end object mi180: TMenuItem Caption = '+ 180' OnClick = miRotateClick end object mi270: TMenuItem Caption = '- 90' OnClick = miRotateClick end object miMirror: TMenuItem Caption = 'Mirror' OnClick = miRotateClick end end object miZoomIn: TMenuItem Caption = 'Zoom In' OnClick = miZoomClick end object miZoomOut: TMenuItem Caption = 'Zoom Out' OnClick = miZoomClick end object miFullScreen: TMenuItem Caption = 'Full Screen' OnClick = miFullScreenClick end object miScreenshot: TMenuItem Caption = 'Screenshot' OnClick = miScreenshotClick end end object miAbout: TMenuItem Caption = 'About' object miAbout2: TMenuItem Action = actAbout end end end object pmEditMenu: TPopupMenu left = 152 top = 64 object pmiCopy: TMenuItem Caption = 'Copy To Clipboard' OnClick = miCopyToClipboardClick end object miDiv5: TMenuItem Caption = '-' end object pmiSelectAll: TMenuItem Caption = 'Select All' OnClick = miSelectAllClick end end object SavePictureDialog: TSavePictureDialog left = 304 top = 64 end object TimerViewer: TTimer Enabled = False Interval = 10 OnTimer = TimerViewerTimer left = 224 top = 64 end object actionList: TActionList left = 376 top = 64 object actAbout: TAction Category = 'Help' Caption = 'About Viewer...' Hint = 'Displays the About message' OnExecute = miAbout2Click end object actReload: TAction Category = 'File' Caption = 'Reload' Hint = 'Reload current file' OnExecute = actExecute end object actLoadNextFile: TAction Category = 'File' Caption = '&Next' Hint = 'Load Next File' OnExecute = actExecute end object actLoadPrevFile: TAction Category = 'File' Caption = '&Previous' Hint = 'Load Previous File' OnExecute = actExecute end object actMoveFile: TAction Category = 'File' Caption = 'Move File' Hint = 'Move File' OnExecute = actExecute end object actCopyFile: TAction Category = 'File' Caption = 'Copy File' Hint = 'Copy File' OnExecute = actExecute end object actDeleteFile: TAction Category = 'File' Caption = 'Delete File' Hint = 'Delete File' OnExecute = actExecute end object actStretchImage: TAction Category = 'Image' Caption = 'Stretch' Hint = 'Stretch Image' OnExecute = actExecute end object actSaveAs: TAction Category = 'File' Caption = 'Save As...' Hint = 'Save File As...' OnExecute = actExecute end object actRotate90: TAction Category = 'Image' Caption = 'Rotate 90' Hint = 'Rotate 90' OnExecute = actExecute end object actRotate180: TAction Category = 'Image' Caption = 'Rotate 180' Hint = 'Rotate 180' OnExecute = actExecute end object actRotate270: TAction Category = 'Image' Caption = 'Rotate 270' Hint = 'Rotate 270' OnExecute = actExecute end object actMirror: TAction Category = 'Image' Caption = 'Mirror' Hint = 'Mirror' OnExecute = actExecute end end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsyncdirsperformdlg.lfm���������������������������������������������������������0000644�0001750�0000144�00000006274�12546157411�020111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg Left = 234 Height = 200 Top = 137 Width = 326 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Synchronize' ClientHeight = 200 ClientWidth = 326 Position = poOwnerFormCenter LCLVersion = '1.4.0.4' object chkLeftToRight: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 19 Top = 3 Width = 20 BorderSpacing.Left = 6 BorderSpacing.Top = 3 Enabled = False ParentBidiMode = False TabOrder = 0 end object edRightPath: TEdit AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = chkLeftToRight AnchorSideTop.Side = asrBottom Left = 22 Height = 23 Top = 22 Width = 270 BorderSpacing.Left = 16 BorderSpacing.Right = 6 Enabled = False ReadOnly = True TabOrder = 1 end object chkRightToLeft: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = edRightPath AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 51 Width = 20 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Enabled = False ParentBidiMode = False TabOrder = 2 end object edLeftPath: TEdit AnchorSideLeft.Control = chkRightToLeft AnchorSideTop.Control = chkRightToLeft AnchorSideTop.Side = asrBottom Left = 22 Height = 23 Top = 70 Width = 270 BorderSpacing.Left = 16 Enabled = False ReadOnly = True TabOrder = 3 end object Bevel1: TBevel AnchorSideLeft.Control = Owner AnchorSideTop.Control = chkDeleteRight AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 6 Top = 121 Width = 326 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Shape = bsBottomLine end object chkConfirmOverwrites: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 133 Width = 121 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Confirm overwrites' Checked = True State = cbChecked TabOrder = 5 end object ButtonPanel1: TButtonPanel AnchorSideTop.Control = chkConfirmOverwrites AnchorSideTop.Side = asrBottom Left = 6 Height = 26 Top = 158 Width = 314 Align = alNone Anchors = [akTop, akLeft, akRight] OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 6 ShowButtons = [pbOK, pbCancel] ShowBevel = False end object chkDeleteRight: TCheckBox AnchorSideLeft.Control = chkLeftToRight AnchorSideTop.Control = edLeftPath AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 99 Width = 20 BorderSpacing.Top = 6 TabOrder = 4 end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fhardlink.pas�������������������������������������������������������������������0000644�0001750�0000144�00000004337�12630667552�015776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fHardLink; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons; type { TfrmHardLink } TfrmHardLink = class(TForm) lblExistingFile: TLabel; lblLinkToCreate: TLabel; edtExistingFile: TEdit; edtLinkToCreate: TEdit; btnOK: TBitBtn; btnCancel: TBitBtn; procedure btnOKClick(Sender: TObject); procedure FormShow(Sender: TObject); private FCurrentPath: String; public constructor Create(TheOwner: TComponent; CurrentPath: String); reintroduce; end; function ShowHardLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, uOSUtils, DCStrUtils; function ShowHardLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmHardLink.Create(Application, CurrentPath) do begin try edtLinkToCreate.Text := sLinkToCreate; edtExistingFile.Text := sExistingFile; Result:= (ShowModal = mrOK); finally Free; end; end; end; constructor TfrmHardLink.Create(TheOwner: TComponent; CurrentPath: String); begin inherited Create(TheOwner); FCurrentPath := CurrentPath; end; procedure TfrmHardLink.btnOKClick(Sender: TObject); var sSrc,sDst:String; begin sSrc:=edtExistingFile.Text; sDst:=edtLinkToCreate.Text; if CompareFilenames(sSrc, sDst) = 0 then Exit; sSrc := GetAbsoluteFileName(FCurrentPath, sSrc); sDst := GetAbsoluteFileName(FCurrentPath, sDst); if CreateHardLink(sSrc, sDst) then begin // write log if (log_cp_mv_ln in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess+rsMsgLogLink,[sSrc+' -> '+sDst]), lmtSuccess); end else begin // write log if (log_cp_mv_ln in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError+rsMsgLogLink,[sSrc+' -> '+sDst]), lmtError); // Standart error modal dialog MsgError(rsHardErrCreate); end; end; procedure TfrmHardLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/dmhelpmanager.pas���������������������������������������������������������������0000644�0001750�0000144�00000007240�12615153436�016626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Help manager Copyright (C) 2008 Koblov Alexander (Alexx2000@mail.ru) 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 dmHelpManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Dialogs, LazHelpHTML; type { TdmHelpManager } TdmHelpManager = class(TDataModule) HTMLBrowserHelpViewer: THTMLBrowserHelpViewer; HTMLHelpDatabase: THTMLHelpDatabase; procedure DataModuleCreate(Sender: TObject); private { private declarations } public { public declarations } end; procedure ShowHelpForKeywordWithAnchor(const Keyword: String); var dmHelpMgr: TdmHelpManager; implementation {$R *.lfm} uses {$IFDEF MSWINDOWS} LCLIntf, uOSUtils, uFileProcs, {$ELSE} HelpIntfs, {$ENDIF} uGlobsPaths, uGlobs, DCStrUtils, DCOSUtils, StrUtils; {$IF DEFINED(MSWINDOWS)} procedure OpenURLWithAnchor(URL: String); var hFile:THandle; TempoFilenameWithTheLink: String; begin TempoFilenameWithTheLink:= GetTempFolderDeletableAtTheEnd + 'FileWithALink.html'; hFile:= mbFileCreate(TempoFilenameWithTheLink); if hFile <> feInvalidHandle then try FileWriteLn(hFile,'<html>'); FileWriteLn(hFile,'<head><meta http-equiv="refresh" content="0;url=' + URL + '" /></head>'); // In case browser doesn't support auto-redirection, give a link to user. FileWriteLn(hFile,'<body><center><a href="' + URL + '">Click here</a> for help</center></body>'); FileWriteLn(hFile,'</html>'); finally FileClose(hFile); end; if mbFileExists(TempoFilenameWithTheLink) then OpenURL(TempoFilenameWithTheLink); end; {$ENDIF} procedure ShowHelpForKeywordWithAnchor(const Keyword: String); {$IF DEFINED(MSWINDOWS)} begin OpenURLWithAnchor(dmHelpMgr.HTMLHelpDatabase.BaseURL + Keyword); end; {$ELSE} begin ShowHelpOrErrorForKeyword('', Keyword); end; {$ENDIF} { TdmHelpManager } procedure TdmHelpManager.DataModuleCreate(Sender: TObject); {$IFDEF MSWindows} var ABrowser, AParams: String; {$ENDIF} begin if NumCountChars('.', gPOFileName) < 2 then gHelpLang:= 'en' else begin gHelpLang:= ExtractDelimited(2, gPOFileName, ['.']); if not mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then gHelpLang:= 'en'; end; if mbDirectoryExists(gpExePath + 'doc' + PathDelim + gHelpLang) then HTMLHelpDatabase.BaseURL:= 'file://' + gpExePath + 'doc' + PathDelim + gHelpLang else begin HTMLHelpDatabase.BaseURL:= 'http://doublecmd.github.io/doc/' + gHelpLang; end; HTMLHelpDatabase.KeywordPrefix:= '/'; {$IFDEF MSWindows} // Lazarus issue #0021637. if FindDefaultBrowser(ABrowser, AParams) then begin HTMLBrowserHelpViewer.BrowserPath := ABrowser; HTMLBrowserHelpViewer.BrowserParams := StringReplace(AParams, '%s', '"%s"', [rfReplaceAll]); end; {$ENDIF} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fMsg.lfm������������������������������������������������������������������������0000644�0001750�0000144�00000002516�12404343455�014710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmMsg: TfrmMsg Left = 572 Height = 254 Top = 233 Width = 426 HorzScrollBar.Page = 425 VertScrollBar.Page = 253 AutoSize = True ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 254 ClientWidth = 426 Constraints.MinWidth = 250 KeyPreview = True OnCreate = FormCreate OnKeyPress = FormKeyPress OnKeyUp = FormKeyUp LCLVersion = '1.2.4.0' object lblMsg: TLabel AnchorSideRight.Side = asrBottom Left = 12 Height = 15 Top = 12 Width = 402 Align = alTop BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 12 Caption = '456456465465465' ParentColor = False end object pnlButtons: TPanel AnchorSideBottom.Side = asrBottom Left = 12 Height = 203 Top = 39 Width = 402 Align = alClient AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 12 BorderSpacing.Bottom = 12 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 12 ChildSizing.VerticalSpacing = 4 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 3 Color = clForm ParentColor = False TabOrder = 0 end object mnuOther: TPopupMenu left = 120 top = 48 end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fattributesedit.lrt�������������������������������������������������������������0000644�0001750�0000144�00000002347�12023046500�017227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMATTRIBUTESEDIT.CAPTION=Choose attributes TFRMATTRIBUTESEDIT.CBSYMLINK.CAPTION=&Symlink TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION=&Directory TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION=Owner TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION=Write TFRMATTRIBUTESEDIT.LBLREAD.CAPTION=Read TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION=Execute TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION=Group TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION=Other TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION=Bits: TFRMATTRIBUTESEDIT.CBSUID.CAPTION=SUID TFRMATTRIBUTESEDIT.CBSGID.CAPTION=SGID TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION=Sticky TFRMATTRIBUTESEDIT.GBWINGENERAL.CAPTION=General attributes TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION=&Archive TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION=Read o&nly TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION=&Hidden TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION=S&ystem TFRMATTRIBUTESEDIT.GBNTFSATTRIBUTES.CAPTION=NTFS attributes TFRMATTRIBUTESEDIT.CBCOMPRESSED.CAPTION=Co&mpressed TFRMATTRIBUTESEDIT.CBENCRYPTED.CAPTION=&Encrypted TFRMATTRIBUTESEDIT.CBTEMPORARY.CAPTION=&Temporary TFRMATTRIBUTESEDIT.CBSPARSE.CAPTION=S&parse TFRMATTRIBUTESEDIT.LBLTEXTATTRS.CAPTION=As te&xt: TFRMATTRIBUTESEDIT.BTNRESET.CAPTION=&Reset TFRMATTRIBUTESEDIT.BTNOK.CAPTION=&OK TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION=&Cancel �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fselecttextrange.lrt������������������������������������������������������������0000644�0001750�0000144�00000000445�12023046500�017371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSELECTTEXTRANGE.LBLSELECTTEXT.CAPTION=&Select the characters to insert: TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION=&OK TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION=&Help TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION=&Close TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION=Cancel ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsyncdirsdlg.pas����������������������������������������������������������������0000644�0001750�0000144�00000106075�12630667552�016531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Directories synchronization utility (specially for DC) Copyright (C) 2013 Anton Panferov (ast.a_s@mail.ru) Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) 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 fSyncDirsDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Masks, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Grids, Menus, uFileView, uFileSource, uFileSourceCopyOperation, uFile, uFileSourceOperationMessageBoxesUI; type TSyncRecState = (srsUnknown, srsEqual, srsNotEq, srsCopyLeft, srsCopyRight, srsDeleteRight, srsDoNothing); { TfrmSyncDirsDlg } TfrmSyncDirsDlg = class(TForm) btnSelDir1: TButton; btnSelDir2: TButton; btnCompare: TButton; btnSynchronize: TButton; btnClose: TButton; chkAsymmetric: TCheckBox; chkSubDirs: TCheckBox; chkByContent: TCheckBox; chkIgnoreDate: TCheckBox; chkOnlySelected: TCheckBox; cbExtFilter: TComboBox; HeaderDG: TDrawGrid; MainDrawGrid: TDrawGrid; edPath1: TEdit; edPath2: TEdit; GroupBox1: TGroupBox; ImageList1: TImageList; Label1: TLabel; LeftPanel1: TPanel; LeftPanel2: TPanel; MenuItemCompare: TMenuItem; MenuItemViewRight: TMenuItem; MenuItemViewLeft: TMenuItem; pmGridMenu: TPopupMenu; sbCopyRight: TSpeedButton; sbEqual: TSpeedButton; sbNotEqual: TSpeedButton; sbCopyLeft: TSpeedButton; sbDuplicates: TSpeedButton; sbSingles: TSpeedButton; StatusBar1: TStatusBar; TopPanel: TPanel; procedure btnCloseClick(Sender: TObject); procedure btnSelDir1Click(Sender: TObject); procedure btnCompareClick(Sender: TObject); procedure btnSynchronizeClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure MainDrawGridDblClick(Sender: TObject); procedure MainDrawGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure MainDrawGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure HeaderDGHeaderClick(Sender: TObject; IsColumn: Boolean; Index: Integer); procedure HeaderDGHeaderSizing(sender: TObject; const IsColumn: boolean; const aIndex, aSize: Integer); procedure FilterSpeedButtonClick(Sender: TObject); procedure MenuItemViewClick(Sender: TObject); private { private declarations } FCancel: Boolean; FFoundItems: TStringList; FVisibleItems: TStringList; FSortIndex: Integer; FSortDesc: Boolean; FNtfsShift: Boolean; FFileExists: TSyncRecState; FFileSourceL, FFileSourceR: IFileSource; FCmpFileSourceL, FCmpFileSourceR: IFileSource; FCmpFilePathL, FCmpFilePathR: string; FAddressL, FAddressR: string; hCols: array [0..6] of record Left, Width: Integer end; CheckContentThread: TObject; Ftotal, Fequal, Fnoneq, FuniqueL, FuniqueR: Integer; FFileSourceOperationMessageBoxesUI: TFileSourceOperationMessageBoxesUI; procedure ClearFoundItems; procedure Compare; procedure FillFoundItemsDG; procedure InitVisibleItems; procedure RecalcHeaderCols; procedure ScanDirs; procedure SetSortIndex(AValue: Integer); procedure SortFoundItems; procedure SortFoundItems(sl: TStringList); procedure UpdateStatusBar; property SortIndex: Integer read FSortIndex write SetSortIndex; public { public declarations } constructor Create(AOwner: TComponent; FileView1, FileView2: TFileView); reintroduce; destructor Destroy; override; end; resourcestring rsComparingPercent = 'Comparing... %d%% (ESC to cancel)'; rsLeftToRightCopy = 'Left to Right: Copy %d files, total size: %d bytes'; rsRightToLeftCopy = 'Right to Left: Copy %d files, total size: %d bytes'; rsDeleteRight = 'Right: Delete %d file(s)'; rsFilesFound = 'Files found: %d (Identical: %d, Different: %d, ' + 'Unique left: %d, Unique right: %d)'; procedure ShowSyncDirsDlg(FileView1, FileView2: TFileView); implementation uses fMain, uDebug, fDiffer, fSyncDirsPerformDlg, uGlobs, LCLType, LazUTF8, LazFileUtils, DCClassesUtf8, uFileSystemFileSource, uFileSourceOperationOptions, DCDateTimeUtils, uFileSourceOperation, uDCUtils, uFileSourceUtil, uFileSourceOperationTypes, uShowForm, uFileSourceDeleteOperation, uOSUtils; {$R *.lfm} type { TFileSyncRec } TFileSyncRec = class private FRelPath: string; FState: TSyncRecState; FAction: TSyncRecState; FFileR, FFileL: TFile; FForm: TfrmSyncDirsDlg; public constructor Create(AForm: TfrmSyncDirsDlg; RelPath: string); destructor Destroy; override; procedure UpdateState(ignoreDate: Boolean); end; { TCheckContentThread } TCheckContentThread = class(TThread) private FOwner: TfrmSyncDirsDlg; FDone: Boolean; procedure UpdateGrid; procedure ReapplyFilter; procedure DoOnTerminate(Sender: TObject); protected procedure Execute; override; public constructor Create(Owner: TfrmSyncDirsDlg); property Done: Boolean read FDone; end; procedure ShowSyncDirsDlg(FileView1, FileView2: TFileView); begin if not Assigned(FileView1) then raise Exception.Create('ShowSyncDirsDlg: FileView1=nil'); if not Assigned(FileView2) then raise Exception.Create('ShowSyncDirsDlg: FileView2=nil'); with TfrmSyncDirsDlg.Create(Application, FileView1, FileView2) do Show; end; { TCheckContentThread } procedure TCheckContentThread.DoOnTerminate(Sender: TObject); begin FOwner.CheckContentThread := nil; FOwner := nil; end; procedure TCheckContentThread.UpdateGrid; begin FOwner.MainDrawGrid.Invalidate; FOwner.UpdateStatusBar; end; procedure TCheckContentThread.ReapplyFilter; begin FOwner.FillFoundItemsDG; FOwner.UpdateStatusBar; end; procedure TCheckContentThread.Execute; function CompareFiles(fn1, fn2: String; len: Int64): Boolean; const BUFLEN = 1024 * 32; var fs1, fs2: TFileStreamEx; buf1, buf2: array [1..BUFLEN] of Byte; i, j: Int64; begin fs1 := TFileStreamEx.Create(fn1, fmOpenRead or fmShareDenyWrite); try fs2 := TFileStreamEx.Create(fn2, fmOpenRead or fmShareDenyWrite); try i := 0; repeat if len - i <= BUFLEN then j := len - i else j := BUFLEN; fs1.Read(buf1, j); fs2.Read(buf2, j); i := i + j; Result := CompareMem(@buf1, @buf2, j); until Terminated or not Result or (i >= len); finally fs2.Free; end; finally fs1.Free; end; end; var i, j: Integer; r: TFileSyncRec; begin with FOwner do for i := 0 to FFoundItems.Count - 1 do for j := 0 to TStringList(FFoundItems.Objects[i]).Count - 1 do begin if Terminated then Exit; r := TFileSyncRec(TStringList(FFoundItems.Objects[i]).Objects[j]); if Assigned(r) and (r.FState = srsUnknown) then begin try if CompareFiles(r.FFileL.FullPath, r.FFileR.FullPath, r.FFileL.Size) then begin Inc(Fequal); r.FState := srsEqual end else r.FState := srsNotEq; if r.FAction = srsUnknown then r.FAction := r.FState; if j mod 20 = 0 then Synchronize(@UpdateGrid); except on e: Exception do DCDebug('[SyncDirs::CmpContentThread] ' + e.Message); end; end; end; FDone := True; Synchronize(@ReapplyFilter); end; constructor TCheckContentThread.Create(Owner: TfrmSyncDirsDlg); begin inherited Create(True); OnTerminate := @DoOnTerminate; FreeOnTerminate := True; FOwner := Owner; Start; end; constructor TFileSyncRec.Create(AForm: TfrmSyncDirsDlg; RelPath: string); begin FForm:= AForm; FRelPath := RelPath; end; destructor TFileSyncRec.Destroy; begin FreeAndNil(FFileL); FreeAndNil(FFileR); inherited Destroy; end; procedure TFileSyncRec.UpdateState(ignoreDate: Boolean); var FileTimeDiff: Integer; begin FState := srsNotEq; if Assigned(FFileR) and not Assigned(FFileL) then FState := FForm.FFileExists else if not Assigned(FFileR) and Assigned(FFileL) then FState := srsCopyRight else begin FileTimeDiff := FileTimeCompare(FFileL.ModificationTime, FFileR.ModificationTime, FForm.FNtfsShift); if ((FileTimeDiff = 0) or ignoreDate) and (FFileL.Size = FFileR.Size) then FState := srsEqual else if not ignoreDate then if FileTimeDiff > 0 then FState := srsCopyRight else if FileTimeDiff < 0 then FState := srsCopyLeft; end; FAction := FState; end; { TfrmSyncDirsDlg } procedure TfrmSyncDirsDlg.btnCloseClick(Sender: TObject); begin Close end; procedure TfrmSyncDirsDlg.btnSelDir1Click(Sender: TObject); var w: TEdit; begin w := nil; case TComponent(Sender).Tag of 0: w := edPath1; 1: w := edPath2; end; if w = nil then Exit; with TSelectDirectoryDialog.Create(Self) do try InitialDir := w.Text; if Execute then begin w.Text := FileName; case TComponent(Sender).Tag of 0: begin FFileSourceL := TFileSystemFileSource.GetFileSource; FAddressL := ''; end; 1: begin FFileSourceR := TFileSystemFileSource.GetFileSource; FAddressR := ''; end; end; end; finally Free end; end; procedure TfrmSyncDirsDlg.btnCompareClick(Sender: TObject); begin InsertFirstItem(Trim(cbExtFilter.Text), cbExtFilter); StatusBar1.Panels[0].Text := Format(rsComparingPercent, [0]); if Assigned(CheckContentThread) then with TCheckContentThread(CheckContentThread) do begin Terminate; WaitFor; end; Compare end; procedure TfrmSyncDirsDlg.btnSynchronizeClick(Sender: TObject); var OperationType: TFileSourceOperationType; FileExistsOption: TFileSourceOperationOptionFileExists; function CopyFiles(src, dst: IFileSource; fs: TFiles; Dest: string): Boolean; var Operation: TFileSourceCopyOperation; begin if GetCopyOperationType(Src, Dst, OperationType) then begin Fs.Path:= fs[0].Path; // Create destination directory Dst.CreateDirectory(Dest); // Determine operation type case OperationType of fsoCopy: begin // Copy within the same file source. Operation := Src.CreateCopyOperation( Fs, Dest) as TFileSourceCopyOperation; end; fsoCopyOut: begin // CopyOut to filesystem. Operation := Src.CreateCopyOutOperation( Dst, Fs, Dest) as TFileSourceCopyOperation; end; fsoCopyIn: begin // CopyIn from filesystem. Operation := Dst.CreateCopyInOperation( Src, Fs, Dest) as TFileSourceCopyOperation; end; end; Operation.FileExistsOption := FileExistsOption; Operation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try Operation.Execute; Result := Operation.Result = fsorFinished; FileExistsOption := Operation.FileExistsOption; finally Operation.Free; end; end; end; function DeleteFiles(FileSource: IFileSource; Files: TFiles): Boolean; var Operation: TFileSourceDeleteOperation; begin Operation:= FileSource.CreateDeleteOperation(Files) as TFileSourceDeleteOperation; Operation.AddUserInterface(FFileSourceOperationMessageBoxesUI); try Operation.Execute; Result := Operation.Result = fsorFinished; finally Operation.Free; end; end; var i, DeleteRightCount, CopyLeftCount, CopyRightCount: Integer; CopyLeftSize, CopyRightSize: Int64; fsr: TFileSyncRec; DeleteRight, CopyLeft, CopyRight: Boolean; DeleteRightFiles, CopyLeftFiles, CopyRightFiles: TFiles; Dest: string; begin DeleteRightCount := 0; CopyLeftCount := 0; CopyRightCount := 0; CopyLeftSize := 0; CopyRightSize := 0; for i := 0 to FVisibleItems.Count - 1 do if Assigned(FVisibleItems.Objects[i]) then begin fsr := TFileSyncRec(FVisibleItems.Objects[i]); case fsr.FAction of srsCopyLeft: begin Inc(CopyLeftCount); Inc(CopyLeftSize, fsr.FFileR.Size); end; srsCopyRight: begin Inc(CopyRightCount); Inc(CopyRightSize, fsr.FFileL.Size); end; srsDeleteRight: begin Inc(DeleteRightCount); end; end; end; with TfrmSyncDirsPerformDlg.Create(Self) do try edLeftPath.Text := FCmpFileSourceL.CurrentAddress + FCmpFilePathL; edRightPath.Text := FCmpFileSourceR.CurrentAddress + FCmpFilePathR; if (CopyLeftCount > 0) and GetCopyOperationType(FFileSourceR, FFileSourceL, OperationType) then begin chkRightToLeft.Enabled := True; chkRightToLeft.Checked := True; edLeftPath.Enabled := True; end; if (CopyRightCount > 0) and GetCopyOperationType(FFileSourceL, FFileSourceR, OperationType) then begin chkLeftToRight.Enabled := True; chkLeftToRight.Checked := True; edRightPath.Enabled := True; end; chkDeleteRight.Enabled := DeleteRightCount > 0; chkDeleteRight.Checked := chkDeleteRight.Enabled; chkDeleteRight.Caption := Format(rsDeleteRight, [DeleteRightCount]); chkLeftToRight.Caption := Format(rsLeftToRightCopy, [CopyRightCount, CopyRightSize]); chkRightToLeft.Caption := Format(rsRightToLeftCopy, [CopyLeftCount, CopyLeftSize]); if ShowModal = mrOk then begin if chkConfirmOverwrites.Checked then FileExistsOption := fsoofeNone else begin FileExistsOption := fsoofeOverwrite; end; CopyLeft := chkRightToLeft.Checked; CopyRight := chkLeftToRight.Checked; DeleteRight := chkDeleteRight.Checked; i := 0; while i < FVisibleItems.Count do begin CopyLeftFiles := TFiles.Create(''); CopyRightFiles := TFiles.Create(''); DeleteRightFiles := TFiles.Create(''); if FVisibleItems.Objects[i] <> nil then repeat fsr := TFileSyncRec(FVisibleItems.Objects[i]); Dest := fsr.FRelPath; case fsr.FAction of srsCopyRight: if CopyRight then CopyRightFiles.Add(fsr.FFileL.Clone); srsCopyLeft: if CopyLeft then CopyLeftFiles.Add(fsr.FFileR.Clone); srsDeleteRight: if DeleteRight then DeleteRightFiles.Add(fsr.FFileR.Clone); end; i := i + 1; until (i = FVisibleItems.Count) or (FVisibleItems.Objects[i] = nil); i := i + 1; if CopyLeftFiles.Count > 0 then begin if not CopyFiles(FCmpFileSourceR, FCmpFileSourceL, CopyLeftFiles, FCmpFilePathL + Dest) then Break; end else CopyLeftFiles.Free; if CopyRightFiles.Count > 0 then begin if not CopyFiles(FCmpFileSourceL, FCmpFileSourceR, CopyRightFiles, FCmpFilePathR + Dest) then Break; end else CopyRightFiles.Free; if DeleteRightFiles.Count > 0 then begin if not DeleteFiles(FCmpFileSourceR, DeleteRightFiles) then Break; end else DeleteRightFiles.Free; end; btnCompare.Click; end; finally Free end; end; procedure TfrmSyncDirsDlg.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction := caFree; { settings } gSyncDirsSubdirs := chkSubDirs.Checked; gSyncDirsIgnoreDate := chkIgnoreDate.Checked; gSyncDirsShowFilterCopyRight := sbCopyRight.Down; gSyncDirsShowFilterEqual := sbEqual.Down; gSyncDirsShowFilterNotEqual := sbNotEqual.Down; gSyncDirsShowFilterCopyLeft := sbCopyLeft.Down; gSyncDirsShowFilterDuplicates := sbDuplicates.Down; gSyncDirsShowFilterSingles := sbSingles.Down; gSyncDirsFileMask := cbExtFilter.Text; if chkByContent.Enabled then gSyncDirsByContent := chkByContent.Checked; glsMaskHistory.Assign(cbExtFilter.Items); end; procedure TfrmSyncDirsDlg.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); { settings } chkByContent.Enabled := FFileSourceL.IsClass(TFileSystemFileSource) and FFileSourceR.IsClass(TFileSystemFileSource); chkSubDirs.Checked := gSyncDirsSubdirs; chkByContent.Checked := gSyncDirsByContent and chkByContent.Enabled; chkIgnoreDate.Checked := gSyncDirsIgnoreDate; sbCopyRight.Down := gSyncDirsShowFilterCopyRight; sbEqual.Down := gSyncDirsShowFilterEqual; sbNotEqual.Down := gSyncDirsShowFilterNotEqual; sbCopyLeft.Down := gSyncDirsShowFilterCopyLeft; sbDuplicates.Down := gSyncDirsShowFilterDuplicates; sbSingles.Down := gSyncDirsShowFilterSingles; cbExtFilter.Items.Assign(glsMaskHistory); cbExtFilter.Text := gSyncDirsFileMask; end; procedure TfrmSyncDirsDlg.MainDrawGridDblClick(Sender: TObject); var r: Integer; sr: TFileSyncRec; begin r := MainDrawGrid.Row; if (r < 0) or (r >= FVisibleItems.Count) then Exit; sr := TFileSyncRec(FVisibleItems.Objects[r]); if not Assigned(sr) or not Assigned(sr.FFileR) or not Assigned(sr.FFileL) or (sr.FState = srsEqual) then Exit; ShowDifferByGlob(sr.FFileL.FullPath, sr.FFileR.FullPath); end; procedure TfrmSyncDirsDlg.MainDrawGridDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var r: TFileSyncRec; x: Integer; s: string; begin if (FVisibleItems = nil) or (aRow >= FVisibleItems.Count) then Exit; with MainDrawGrid.Canvas do begin r := TFileSyncRec(FVisibleItems.Objects[aRow]); if r = nil then begin Brush.Color := clBtnFace; FillRect(aRect); Font.Bold := True; Font.Color := clWindowText; TextOut(aRect.Left + 2, aRect.Top + 2, FVisibleItems[aRow]); end else begin case r.FState of srsNotEq: Font.Color := clRed; srsCopyLeft: Font.Color := clBlue; srsCopyRight: Font.Color := clGreen; srsDeleteRight: Font.Color := clBlue; else Font.Color := clWindowText; end; if Assigned(r.FFileL) then begin TextOut(aRect.Left + 2, aRect.Top + 2, FVisibleItems[aRow]); s := IntToStr(r.FFileL.Size); x := hCols[1].Left + hCols[1].Width - 2 - TextWidth(s); TextOut(x, aRect.Top + 2, s); s := DateTimeToStr(r.FFileL.ModificationTime); with hCols[2] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, s) end; if Assigned(r.FFileR) then begin TextOut(hCols[6].Left + 2, aRect.Top + 2, FVisibleItems[aRow]); s := IntToStr(r.FFileR.Size); x := hCols[5].Left + hCols[5].Width - 2 - TextWidth(s); TextOut(x, aRect.Top + 2, s); s := DateTimeToStr(r.FFileR.ModificationTime); with hCols[4] do TextRect(Rect(Left, aRect.Top, Left + Width, aRect.Bottom), Left + 2, aRect.Top + 2, s) end; ImageList1.Draw(MainDrawGrid.Canvas, hCols[3].Left + (hCols[3].Width - ImageList1.Width) div 2 - 2, (aRect.Top + aRect.Bottom - ImageList1.Height - 1) div 2, Ord(r.FAction)); end; end; end; procedure TfrmSyncDirsDlg.MainDrawGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var c, r: Integer; sr: TFileSyncRec; ca: TSyncRecState; begin MainDrawGrid.MouseToCell(X, Y, c, r); if (r < 0) or (r >= FVisibleItems.Count) or (x - 2 < hCols[3].Left) or (x - 2 > hCols[3].Left + hCols[3].Width) then Exit; sr := TFileSyncRec(FVisibleItems.Objects[r]); if not Assigned(sr) or (sr.FState = srsEqual) then Exit; ca := sr.FAction; case ca of srsNotEq: ca := srsCopyRight; srsCopyRight: if Assigned(sr.FFileR) then ca := srsCopyLeft else ca := srsDoNothing; srsCopyLeft: if Assigned(sr.FFileL) then ca := srsNotEq else ca := srsDoNothing; srsDeleteRight: ca := srsDoNothing; srsDoNothing: if Assigned(sr.FFileL) then ca := srsCopyRight else ca := FFileExists; end; sr.FAction := ca; MainDrawGrid.InvalidateRow(r); end; procedure TfrmSyncDirsDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key := 0; if not FCancel then FCancel := True else Close; end; end; procedure TfrmSyncDirsDlg.HeaderDGHeaderClick(Sender: TObject; IsColumn: Boolean; Index: Integer); begin if (Index <> 3) and (Index <= 6) then SortIndex := Index; end; procedure TfrmSyncDirsDlg.HeaderDGHeaderSizing(sender: TObject; const IsColumn: boolean; const aIndex, aSize: Integer); begin RecalcHeaderCols; MainDrawGrid.Invalidate; end; procedure TfrmSyncDirsDlg.FilterSpeedButtonClick(Sender: TObject); begin FillFoundItemsDG end; procedure TfrmSyncDirsDlg.MenuItemViewClick(Sender: TObject); var r: Integer; f: TFile = nil; sr: TFileSyncRec; begin r := MainDrawGrid.Row; if (r < 0) or (r >= FVisibleItems.Count) then Exit; sr := TFileSyncRec(FVisibleItems.Objects[r]); if Assigned(sr) then begin if Sender = MenuItemViewLeft then f := sr.FFileL else if Sender = MenuItemViewRight then begin f := sr.FFileR; end; if Assigned(f) then ShowViewerByGlob(f.FullPath); end; end; procedure TfrmSyncDirsDlg.SetSortIndex(AValue: Integer); var s: string; begin if AValue = FSortIndex then begin s := HeaderDG.Columns[AValue].Title.Caption; UTF8Delete(s, 1, 1); FSortDesc := not FSortDesc; if FSortDesc then s := '↑' + s else s := '↓' + s; HeaderDG.Columns[AValue].Title.Caption := s; SortFoundItems; FillFoundItemsDG; end else begin if FSortIndex >= 0 then begin s := HeaderDG.Columns[FSortIndex].Title.Caption; UTF8Delete(s, 1, 1); HeaderDG.Columns[FSortIndex].Title.Caption := s; end; FSortIndex := AValue; FSortDesc := False; with HeaderDG.Columns[FSortIndex].Title do Caption := '↓' + Caption; SortFoundItems; FillFoundItemsDG; end; end; procedure TfrmSyncDirsDlg.ClearFoundItems; var i, j: Integer; begin for i := 0 to FFoundItems.Count - 1 do with TStringList(FFoundItems.Objects[i]) do begin for j := 0 to Count - 1 do Objects[j].Free; Clear; end; FFoundItems.Clear; end; procedure TfrmSyncDirsDlg.Compare; begin TopPanel.Enabled := False; try ClearFoundItems; MainDrawGrid.RowCount := 0; ScanDirs; FillFoundItemsDG; finally TopPanel.Enabled := True; end; end; procedure TfrmSyncDirsDlg.FillFoundItemsDG; procedure CalcStat; var i: Integer; r: TFileSyncRec; begin Ftotal := 0; Fequal := 0; Fnoneq := 0; FuniqueL := 0; FuniqueR := 0; for i := 0 to FVisibleItems.Count - 1 do begin r := TFileSyncRec(FVisibleItems.Objects[i]); if Assigned(r) then begin Inc(Ftotal); if Assigned(r.FFileL) and not Assigned(r.FFileR) then Inc(FuniqueL) else if Assigned(r.FFileR) and not Assigned(r.FFileL) then Inc(FuniqueR); if r.FState = srsEqual then Inc(Fequal) else if r.FState = srsNotEq then Inc(Fnoneq); end; end; end; begin InitVisibleItems; MainDrawGrid.ColCount := 1; MainDrawGrid.RowCount := FVisibleItems.Count; MainDrawGrid.Invalidate; CalcStat; UpdateStatusBar; if FVisibleItems.Count > 0 then begin btnCompare.Default := False; btnSynchronize.Enabled := True; btnSynchronize.Default := True; end else begin btnCompare.Default := True; btnSynchronize.Enabled := False; btnSynchronize.Default := False; end; end; procedure TfrmSyncDirsDlg.InitVisibleItems; var i, j: Integer; filter: record copyLeft, copyRight, eq, neq: Boolean; dup, single: Boolean; end; r: TFileSyncRec; begin if not Assigned(FVisibleItems) then FVisibleItems := TStringList.Create else FVisibleItems.Clear; { init filter } with filter do begin copyLeft := sbCopyLeft.Down; copyRight := sbCopyRight.Down; eq := sbEqual.Down; neq := sbNotEqual.Down; dup := sbDuplicates.Down; single := sbSingles.Down; end; for i := 0 to FFoundItems.Count - 1 do begin if FFoundItems[i] <> '' then FVisibleItems.Add(AppendPathDelim(FFoundItems[i])); with TStringList(FFoundItems.Objects[i]) do for j := 0 to Count - 1 do begin { check filter } r := TFileSyncRec(Objects[j]); if ((Assigned(r.FFileL) <> Assigned(r.FFileR)) and filter.single or (Assigned(r.FFileL) = Assigned(r.FFileR)) and filter.dup) and ((r.FState = srsCopyLeft) and filter.copyLeft or (r.FState = srsCopyRight) and filter.copyRight or (r.FState = srsDeleteRight) and filter.copyLeft or (r.FState = srsEqual) and filter.eq or (r.FState = srsNotEq) and filter.neq or (r.FState = srsUnknown)) then FVisibleItems.AddObject(Strings[j], Objects[j]); end; end; { remove empty dirs after filtering } for i := FVisibleItems.Count - 1 downto 0 do if (FVisibleItems.Objects[i] = nil) and ((i + 1 >= FVisibleItems.Count) or (FVisibleItems.Objects[i + 1] = nil)) then FVisibleItems.Delete(i); end; procedure TfrmSyncDirsDlg.RecalcHeaderCols; var i, l: Integer; begin l := 0; for i := 0 to 6 do with hCols[i] do begin Left := l; Width := HeaderDG.Columns[i].Width; l := l + Width; end; end; procedure TfrmSyncDirsDlg.ScanDirs; var BaseDirL, BaseDirR: string; MasksStr: string; ignoreDate, Subdirs, ByContent: Boolean; procedure ScanDir(dir: string); procedure ProcessOneSide(it, dirs: TStringList; sideLeft: Boolean); var fs: TFiles; i, j: Integer; f: TFile; r: TFileSyncRec; begin if sideLeft then fs := FFileSourceL.GetFiles(BaseDirL + dir) else fs := FFileSourceR.GetFiles(BaseDirR + dir); try for i := 0 to fs.Count - 1 do begin f := fs.Items[i]; if not f.IsDirectory and MatchesMaskList(f.Name, MasksStr) then begin j := it.IndexOf(f.Name); if j < 0 then r := TFileSyncRec.Create(Self, dir) else r := TFileSyncRec(it.Objects[j]); if sideLeft then begin r.FFileL := f.Clone; r.UpdateState(ignoreDate); end else begin r.FFileR := f.Clone; r.UpdateState(ignoreDate); if ByContent and (r.FState = srsEqual) and (r.FFileR.Size > 0) then begin r.FAction := srsUnknown; r.FState := srsUnknown; end; end; it.AddObject(f.Name, r); end else if (f.NameNoExt <> '.') and (f.NameNoExt <> '..') then dirs.Add(f.Name); end; finally fs.Free; end; end; var i, j, tot: Integer; it: TStringList; dirsLeft, dirsRight: TStringList; d: string; begin i := FFoundItems.IndexOf(dir); if i < 0 then begin it := TStringList.Create; it.Sorted := True; FFoundItems.AddObject(dir, it); end else it := TStringList(FFoundItems.Objects[i]); if dir <> '' then dir := AppendPathDelim(dir); dirsLeft := TStringList.Create; dirsLeft.Sorted := True; dirsRight := TStringList.Create; dirsRight.Sorted := True; try Application.ProcessMessages; if FCancel then Exit; ProcessOneSide(it, dirsLeft, True); ProcessOneSide(it, dirsRight, False); SortFoundItems(it); if not Subdirs then Exit; tot := dirsLeft.Count + dirsRight.Count; for i := 0 to dirsLeft.Count - 1 do begin if dir = '' then StatusBar1.Panels[0].Text := Format(rsComparingPercent, [i * 100 div tot]); d := dirsLeft[i]; ScanDir(dir + d); j := dirsRight.IndexOf(d); if j >= 0 then begin dirsRight.Delete(j); Dec(tot); end end; for i := 0 to dirsRight.Count - 1 do begin if dir = '' then StatusBar1.Panels[0].Text := Format(rsComparingPercent, [(dirsLeft.Count + i) * 100 div tot]); d := dirsRight[i]; ScanDir(dir + d); end; finally dirsLeft.Free; dirsRight.Free; end; end; begin FCancel := False; FCmpFileSourceL := FFileSourceL; FCmpFileSourceR := FFileSourceR; MasksStr := cbExtFilter.Text; BaseDirL := AppendPathDelim(edPath1.Text); if (FAddressL <> '') and (Copy(BaseDirL, 1, Length(FAddressL)) = FAddressL) then Delete(BaseDirL, 1, Length(FAddressL)); BaseDirR := AppendPathDelim(edPath2.Text); if (FAddressR <> '') and (Copy(BaseDirR, 1, Length(FAddressR)) = FAddressR) then Delete(BaseDirR, 1, Length(FAddressR)); FCmpFilePathL := BaseDirL; FCmpFilePathR := BaseDirR; ignoreDate := chkIgnoreDate.Checked; Subdirs := chkSubDirs.Checked; ByContent := chkByContent.Checked; if chkAsymmetric.Checked then FFileExists:= srsDeleteRight else begin FFileExists:= srsCopyLeft; end; ScanDir(''); if (FFoundItems.Count > 0) and chkByContent.Checked then CheckContentThread := TCheckContentThread.Create(Self); FCancel := True; end; procedure TfrmSyncDirsDlg.SortFoundItems; var i: Integer; begin if FSortIndex < 0 then Exit; for i := 0 to FFoundItems.Count - 1 do SortFoundItems(TStringList(FFoundItems.Objects[i])); end; procedure TfrmSyncDirsDlg.SortFoundItems(sl: TStringList); function CompareFn(sl: TStringList; i, j: Integer): Integer; var r1, r2: TFileSyncRec; begin r1 := TFileSyncRec(sl.Objects[i]); r2 := TFileSyncRec(sl.Objects[j]); case FSortIndex of 0: if Assigned(r1.FFileL) <> Assigned(r2.FFileL) then Result := Ord(Assigned(r1.FFileL)) - Ord(Assigned(r2.FFileL)) else if Assigned(r1.FFileL) then Result := UTF8CompareStr(r1.FFileL.Name, r2.FFileL.Name) else Result := 0; 1: if (Assigned(r1.FFileL) < Assigned(r2.FFileL)) or Assigned(r2.FFileL) and (r1.FFileL.Size < r2.FFileL.Size) then Result := -1 else if (Assigned(r1.FFileL) > Assigned(r2.FFileL)) or Assigned(r1.FFileL) and (r1.FFileL.Size > r2.FFileL.Size) then Result := 1 else Result := 0; 2: if (Assigned(r1.FFileL) < Assigned(r2.FFileL)) or Assigned(r2.FFileL) and (r1.FFileL.ModificationTime < r2.FFileL.ModificationTime) then Result := -1 else if (Assigned(r1.FFileL) > Assigned(r2.FFileL)) or Assigned(r1.FFileL) and (r1.FFileL.ModificationTime > r2.FFileL.ModificationTime) then Result := 1 else Result := 0; 4: if (Assigned(r1.FFileR) < Assigned(r2.FFileR)) or Assigned(r2.FFileR) and (r1.FFileR.ModificationTime < r2.FFileR.ModificationTime) then Result := -1 else if (Assigned(r1.FFileR) > Assigned(r2.FFileR)) or Assigned(r1.FFileR) and (r1.FFileR.ModificationTime > r2.FFileR.ModificationTime) then Result := 1 else Result := 0; 5: if (Assigned(r1.FFileR) < Assigned(r2.FFileR)) or Assigned(r2.FFileR) and (r1.FFileR.Size < r2.FFileR.Size) then Result := -1 else if (Assigned(r1.FFileR) > Assigned(r2.FFileR)) or Assigned(r1.FFileR) and (r1.FFileR.Size > r2.FFileR.Size) then Result := 1 else Result := 0; 6: if Assigned(r1.FFileR) <> Assigned(r2.FFileR) then Result := Ord(Assigned(r1.FFileR)) - Ord(Assigned(r2.FFileR)) else if Assigned(r1.FFileR) then Result := UTF8CompareStr(r1.FFileR.Name, r2.FFileR.Name) else Result := 0; end; if FSortDesc then Result := -Result; end; procedure QuickSort(L, R: Integer; sl: TStringList); var Pivot, vL, vR: Integer; begin if R - L <= 1 then begin // a little bit of time saver if L < R then if CompareFn(sl, L, R) > 0 then sl.Exchange(L, R); Exit; end; vL := L; vR := R; Pivot := L + Random(R - L); // they say random is best while vL < vR do begin while (vL < Pivot) and (CompareFn(sl, vL, Pivot) <= 0) do Inc(vL); while (vR > Pivot) and (CompareFn(sl, vR, Pivot) > 0) do Dec(vR); sl.Exchange(vL, vR); if Pivot = vL then // swap pivot if we just hit it from one side Pivot := vR else if Pivot = vR then Pivot := vL; end; if Pivot - 1 >= L then QuickSort(L, Pivot - 1, sl); if Pivot + 1 <= R then QuickSort(Pivot + 1, R, sl); end; begin QuickSort(0, sl.Count - 1, sl); end; procedure TfrmSyncDirsDlg.UpdateStatusBar; var s: string; begin s := Format(rsFilesFound, [Ftotal, Fequal, Fnoneq, FuniqueL, FuniqueR]); if Assigned(CheckContentThread) and not TCheckContentThread(CheckContentThread).Done then s := s + ' ...'; StatusBar1.Panels[0].Text := s; end; constructor TfrmSyncDirsDlg.Create(AOwner: TComponent; FileView1, FileView2: TFileView); begin inherited Create(AOwner); FFoundItems := TStringList.Create; FFoundItems.Sorted := True; FFileSourceL := FileView1.FileSource; FFileSourceR := FileView2.FileSource; FAddressL := FileView1.CurrentAddress; FAddressR := FileView2.CurrentAddress; with FileView1 do edPath1.Text := FAddressL + CurrentPath; with FileView2 do edPath2.Text := FAddressR + CurrentPath; RecalcHeaderCols; MainDrawGrid.DoubleBuffered := True; MainDrawGrid.Font.Bold := True; FSortIndex := -1; SortIndex := 0; FSortDesc := False; MainDrawGrid.RowCount := 0; chkAsymmetric.Enabled := fsoDelete in FileView2.FileSource.GetOperationsTypes; FFileSourceOperationMessageBoxesUI := TFileSourceOperationMessageBoxesUI.Create; if (FFileSourceL.IsClass(TFileSystemFileSource)) and (FFileSourceR.IsClass(TFileSystemFileSource)) then begin FNtfsShift := gNtfsHourTimeDelay and NtfsHourTimeDelay(FileView1.CurrentPath, FileView2.CurrentPath); end; end; destructor TfrmSyncDirsDlg.Destroy; begin FFileSourceOperationMessageBoxesUI.Free; FVisibleItems.Free; ClearFoundItems; FFoundItems.Free; inherited Destroy; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/un_lineinfo.pp������������������������������������������������������������������0000644�0001750�0000144�00000070667�12454027263�016177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of the chelinfo library. Copyright (c) 2008 by Anton Rzheshevski Parts (c) 2006 Thomas Schatzl, member of the FreePascal Development team Parts (c) 2000 Peter Vreman (adapted from original stabs line reader) Dwarf LineInfo Extractor See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { 2008, Anton Rzheshevski aka Cheb: Like dr. Frankenshtein I sewn this library together from the dead meat of the the FPC RTL modules lineinfo.pp and lnfodwrf.pp. These (as of Jan. 2008 / FPC 2.2.0) both didn't work and had several limitations (e.g. inability to be used from a DLL) SUPPORTED TARGETS: Linux-32, Linux-64, Win32, Win64. Based on lnfodwrf.pp from FreePascal RTL. Oct 2009, by cobines - Removed the structures holding debugging info. Now the state machine is run for each address requiring line info, like in lnfodwrf.pp. It uses less memory but is slower. But since it is usually called only on unhandled exceptions the speed doesn't matter much. - Updated the code to lnfodwrf.pp from FPC 2.5.1 (rev. 14154). } {--------------------------------------------------------------------------- Generic Dwarf lineinfo reader The line info reader is based on the information contained in DWARF Debugging Information Format Version 3 Chapter 6.2 "Line Number Information" from the DWARF Debugging Information Format Workgroup. For more information on this document see also http://dwarf.freestandards.org/ ---------------------------------------------------------------------------} {$mode delphi} {$longstrings on} {$codepage utf-8} {$coperators on} {$pointermath on} {.$DEFINE DEBUG_DWARF_PARSER} unit un_lineinfo; interface uses SysUtils, Classes; function GetLineInfo(addr: pointer; var moduleFile, sourceFile: ansistring; var line, column: integer): Boolean; { The format of returned information: "moduleFile" *always* receives the full name of the executable file (the main exe or one of dlls it uses) the addr belongs to. In Linux, it returns the real file name, with all symlinks resolved. "line" can be negative, which means no line info has been found for this address. See LineInfoError (below) for details. "sourceFile" returns the source file name. It either doesn't or does contain a full path. If the source was in the same directory as the program itself, there will be no path. If the source was in the different directory, there will be a full path (for the moment when the program was compiled, NOT for the current location of that source). "column" is positive ONLY when there is more than one address stored for the same source line. FreePascal generates this on VERY rare occasions, mostly for the arithmetic formulas spanning several lines. So most of the time column will receive -1. } procedure InitLineInfo; { Installs the custom BackTraceStr handler. } procedure AddLineInfoPath(const Path: String); { Adds a path that will be searched for .zdli files. Paths can be absolute or relative to the directory with the executable module. } procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string); { This function allows you to know which executable (i.e. the main exe or one of the dlls loaded by it) owns this part of the virtual addres space. baseaddr receives the exe/dll base address (always NIL for the main exe in Linux). The mechnaism is made with possibility of a DLL relocation in mind, but that particular feature is untested. This function is used by GetLineInfo() to determine which executable to load line the info from. } var LineInfoError: WideString = ''; implementation uses {$ifdef unix} dl {$else} windows {$endif} , un_xtrctdwrflnfo, zstream; {$MACRO ON} {$ifdef DEBUG_DWARF_PARSER} {$define DEBUG_WRITELN := WriteLn} {$define DEBUG_COMMENT := } {$else} {$define DEBUG_WRITELN := //} {$define DEBUG_COMMENT := //} {$endif} var {You can store the .zdli files in a different folder than the Exe itself. Just fill in this array. Paths can be absolute or relative to BaseModulePath. For example: AddLineInfoPath('debug') - will search in <executable_path>/debug/ } LineInfoPaths: array of string = nil; {Path where the executable module is.} BaseModulePath: String; function ChelinfoBackTraceStr(addr : Pointer) : ShortString; var exe, src: ansistring; line, column: integer; Store : TBackTraceStrFunc; begin { reset to prevent infinite recursion if problems inside the code } Store := BackTraceStrFunc; BackTraceStrFunc := @SysBackTraceStr; GetLineInfo(addr, exe, src, line, column); { create string } Result := ' $' + HexStr(addr); if line >= 0 then begin Result += ' line ' + IntToStr(line); if column >= 0 then Result += ', column ' + IntToStr(column); Result += ' of ' + src; end; Result += ' in ' + exe; BackTraceStrFunc := Store; end; {$packrecords default} type Bool8 = ByteBool; { DWARF 2 default opcodes} const { Extended opcodes } DW_LNE_END_SEQUENCE = 1; DW_LNE_SET_ADDRESS = 2; DW_LNE_DEFINE_FILE = 3; { Standard opcodes } DW_LNS_COPY = 1; DW_LNS_ADVANCE_PC = 2; DW_LNS_ADVANCE_LINE = 3; DW_LNS_SET_FILE = 4; DW_LNS_SET_COLUMN = 5; DW_LNS_NEGATE_STMT = 6; DW_LNS_SET_BASIC_BLOCK = 7; DW_LNS_CONST_ADD_PC = 8; DW_LNS_FIXED_ADVANCE_PC = 9; DW_LNS_SET_PROLOGUE_END = 10; DW_LNS_SET_EPILOGUE_BEGIN = 11; DW_LNS_SET_ISA = 12; type { state record for the line info state machine } TMachineState = record address : QWord; // can hold 32-bit or 64-bit addresses (depending on DWARF type) file_id : DWord; line : QWord; column : DWord; is_stmt : Boolean; basic_block : Boolean; end_sequence : Boolean; prolouge_end : Boolean; epilouge_begin : Boolean; isa : QWord; append_row : Boolean; first_row : Boolean; end; { DWARF line number program header preceding the line number program, 64 bit version } TLineNumberProgramHeader64 = packed record magic : DWord; unit_length : QWord; version : Word; length : QWord; minimum_instruction_length : Byte; default_is_stmt : Bool8; line_base : ShortInt; line_range : Byte; opcode_base : Byte; end; { DWARF line number program header preceding the line number program, 32 bit version } TLineNumberProgramHeader32 = packed record unit_length : DWord; version : Word; length : DWord; minimum_instruction_length : Byte; default_is_stmt : Bool8; line_base : ShortInt; line_range : Byte; opcode_base : Byte; end; procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer; var filename: string); {$ifdef unix} var dlinfo: dl_info; begin FillChar(dlinfo, sizeof(dlinfo), 0); dladdr(addr, @dlinfo); baseaddr:= dlinfo.dli_fbase; filename:= String(dlinfo.dli_fname); {$if not defined(darwin)} if ExtractFileName(filename) = ExtractFileName(ParamStr(0)) then baseaddr:= nil; {$endif} end; {$else} var Tmm: TMemoryBasicInformation; TST: array[0..Max_Path] of Char; begin if VirtualQuery(addr, @Tmm, SizeOf(Tmm)) <> sizeof(Tmm) then raise Exception.Create('The VirualQuery() call failed.'); baseaddr:=Tmm.AllocationBase; TST[0]:= #0; GetModuleFileName(THandle(Tmm.AllocationBase), TST, SizeOf(TST)); filename:= String(PChar(@TST)); end; {$endif} procedure InitLineInfo; begin BackTraceStrFunc := @ChelinfoBacktraceStr; BaseModulePath := ExtractFilePath(ParamStr(0)); end; procedure AddLineInfoPath(const Path: String); begin SetLength(LineInfoPaths, Length(LineInfoPaths) + 1); LineInfoPaths[Length(LineInfoPaths) - 1] := ExcludeTrailingPathDelimiter(Path); end; function GetLineInfo(addr: Pointer; var moduleFile, sourceFile: ansistring; var line, column: integer): Boolean; var dli: TStream = nil; // Stream holding uncompressed debug line info. unit_base, next_base : QWord; unit_length: QWord; { Returns the next Byte from the input stream, or -1 if there has been an error } function ReadNext() : Longint; overload; var bytesread : Longint; b : Byte; begin ReadNext := -1; if (dli.Position < next_base) then begin bytesread := dli.Read(b, sizeof(b)); ReadNext := b; if (bytesread <> 1) then ReadNext := -1; end; end; { Reads the next size bytes into dest. Returns true if successful, false otherwise. Note that dest may be partially overwritten after returning false. } function ReadNext(var dest; size : SizeInt) : Boolean; overload; var bytesread : SizeInt; begin bytesread := 0; if ((dli.Position + size) < next_base) then begin bytesread := dli.Read(dest, size); end; ReadNext := (bytesread = size); end; { Reads an unsigned LEB encoded number from the input stream } function ReadULEB128() : QWord; var shift : Byte; data : PtrInt; val : QWord; begin shift := 0; result := 0; data := ReadNext(); while (data <> -1) do begin val := data and $7f; result := result or (val shl shift); inc(shift, 7); if ((data and $80) = 0) then break; data := ReadNext(); end; end; { Reads a signed LEB encoded number from the input stream } function ReadLEB128() : Int64; var shift : Byte; data : PtrInt; val : Int64; begin shift := 0; result := 0; data := ReadNext(); while (data <> -1) do begin val := data and $7f; result := result or (val shl shift); inc(shift, 7); if ((data and $80) = 0) then break; data := ReadNext(); end; { extend sign. Note that we can not use shl/shr since the latter does not translate to arithmetic shifting for signed types } result := (not ((result and (1 shl (shift-1)))-1)) or result; end; procedure SkipULEB128(); var temp : QWord; begin temp := ReadULEB128(); DEBUG_WRITELN('Skipping ULEB128 : ', temp); end; procedure SkipLEB128(); var temp : Int64; begin temp := ReadLEB128(); DEBUG_WRITELN('Skipping LEB128 : ', temp); end; function ReadString(): ansistring; var a: ansichar; begin Result:= ''; while (true) do begin dli.Read(a, sizeof(a)); if a = #0 then Exit; Result+= a; end; end; function CalculateAddressIncrement(_opcode : Integer; const header : TLineNumberProgramHeader64) : Int64; begin Result := _opcode - header.opcode_base; // adjusted_opcode Result := (Result div header.line_range) * header.minimum_instruction_length; end; { initializes the line info state to the default values } procedure InitStateRegisters(var state : TMachineState; const header : TLineNumberProgramHeader64); begin with state do begin address := 0; file_id := 1; line := 1; column := 0; is_stmt := header.default_is_stmt; basic_block := false; end_sequence := false; prolouge_end := false; epilouge_begin := false; isa := 0; append_row := false; first_row := true; end; end; { Skips all line info directory entries } procedure SkipDirectories(); var s : ShortString; begin while (true) do begin s := ReadString(); if (s = '') then break; DEBUG_WRITELN('Skipping directory : ', s); end; end; { Skips the filename section from the current file stream } procedure SkipFilenames(); var s : ShortString; begin while (true) do begin s := ReadString(); if (s = '') then break; DEBUG_WRITELN('Skipping filename : ', s); SkipULEB128(); { skip the directory index for the file } SkipULEB128(); { skip last modification time for file } SkipULEB128(); { skip length of file } end; end; function GetFullFilename(const filenameStart, directoryStart : Int64; const file_id : DWord) : ShortString; var i : DWord; filename, directory : ShortString; dirindex : QWord; {$IFDEF DEBUG_DWARF_PARSER} oldPos: Int64; {$ENDIF} begin filename := ''; directory := ''; i := 1; {$IFDEF DEBUG_DWARF_PARSER} oldPos := dli.Position; {$ENDIF} dli.Seek(filenameStart, soBeginning); while (i <= file_id) do begin filename := ReadString(); DEBUG_WRITELN('Found "', filename, '"'); if (filename = '') then break; dirindex := ReadULEB128(); { read the directory index for the file } SkipULEB128(); { skip last modification time for file } SkipULEB128(); { skip length of file } inc(i); end; { if we could not find the file index, exit } if (filename = '') then begin GetFullFilename := ''; end else begin dli.Seek(directoryStart, soBeginning); i := 1; while (i <= dirindex) do begin directory := ReadString(); if (directory = '') then break; inc(i); end; if (directory<>'') and (directory[length(directory)]<>'/') then directory:=directory+'/'; GetFullFilename := directory + filename; end; {$IFDEF DEBUG_DWARF_PARSER} dli.Position := oldPos; {$ENDIF} end; function ParseCompilationUnit(const addr : PtrUInt) : Boolean; var state : TMachineState; { we need both headers on the stack, although we only use the 64 bit one internally } header64 : TLineNumberProgramHeader64; header32 : TLineNumberProgramHeader32; header_length: QWord; {$ifdef DEBUG_DWARF_PARSER}s : ShortString;{$endif} adjusted_opcode : Int64; opcode, extended_opcode : Integer; extended_opcode_length : PtrInt; addrIncrement, lineIncrement: PtrInt; numoptable : array[1..255] of Byte; { the offset into the file where the include directories are stored for this compilation unit } include_directories : Int64; { the offset into the file where the file names are stored for this compilation unit } file_names : Int64; i: integer; prev_line : QWord; prev_column : DWord; prev_file : DWord; { Reads an address from the current input stream } function ReadAddress() : PtrUInt; begin ReadNext(Result, sizeof(PtrUInt)); end; { Reads an unsigned Half from the current input stream } function ReadUHalf() : Word; begin dli.Read(Result, SizeOf(Result)); end; begin Result := False; // Not found yet. // First DWORD is either unit length of 32-bit or magic value of 64-bit DWARF. dli.Seek(unit_base, soBeginning); dli.Read(header64.magic, sizeof(header64.magic)); dli.Seek(-sizeof(header64.magic), soCurrent); if (header64.magic <> $ffffffff) then begin DEBUG_WRITELN('32 bit DWARF detected'); dli.Read(header32, sizeof(header32)); header64.magic := $ffffffff; header64.unit_length := header32.unit_length; header64.version := header32.version; header64.length := header32.length; header64.minimum_instruction_length := header32.minimum_instruction_length; header64.default_is_stmt := header32.default_is_stmt; header64.line_base := header32.line_base; header64.line_range := header32.line_range; header64.opcode_base := header32.opcode_base; header_length := QWord(header32.length) + sizeof(header32.length) + sizeof(header32.version) + sizeof(header32.unit_length); unit_length := QWord(header32.unit_length) + sizeof(header32.unit_length); end else begin DEBUG_WRITELN('64 bit DWARF detected'); dli.Read(header64, sizeof(header64)); header_length := header64.length + sizeof(header64.magic) + sizeof(header64.length) + sizeof(header64.version) + sizeof(header64.unit_length); unit_length := header64.unit_length + sizeof(header64.magic) + sizeof(header64.unit_length); end; next_base:= unit_base + unit_length; // Read opcodes lengths table. fillchar(numoptable, sizeof(numoptable), #0); if not ReadNext(numoptable, header64.opcode_base - 1) then Exit; DEBUG_WRITELN('Opcode parameter count table'); for i := 1 to header64.opcode_base - 1 do begin DEBUG_WRITELN('Opcode[', i, '] - ', numoptable[i], ' parameters'); end; DEBUG_WRITELN('Reading directories...'); include_directories := dli.Position; SkipDirectories(); DEBUG_WRITELN('Reading filenames...'); file_names := dli.Position; SkipFilenames(); // Position stream after header to read state machine code. dli.Seek(unit_base + header_length, soBeginning); InitStateRegisters(state, header64); opcode := ReadNext(); while (opcode <> -1) do begin case (opcode) of { extended opcode } 0 : begin extended_opcode_length := ReadULEB128(); extended_opcode := ReadNext(); if extended_opcode = -1 then break; case (extended_opcode) of DW_LNE_END_SEQUENCE : begin state.end_sequence := true; state.append_row := true; DEBUG_WRITELN('DW_LNE_END_SEQUENCE'); end; DW_LNE_SET_ADDRESS : begin // Size of address should be extended_opcode_length - 1. state.address := ReadAddress(); DEBUG_WRITELN('DW_LNE_SET_ADDRESS (', hexstr(pointer(state.address)), ')'); end; DW_LNE_DEFINE_FILE : begin {$ifdef DEBUG_DWARF_PARSER}s := {$endif}ReadString(); SkipULEB128(); SkipULEB128(); SkipULEB128(); DEBUG_WRITELN('DW_LNE_DEFINE_FILE (', s, ')'); end; else begin DEBUG_WRITELN('Unknown extended opcode ', extended_opcode, ' (length ', extended_opcode_length, ')'); dli.Position:= dli.Position + extended_opcode_length - 1; end; end; end; DW_LNS_COPY : begin state.basic_block := false; state.prolouge_end := false; state.epilouge_begin := false; state.append_row := true; DEBUG_WRITELN('DW_LNS_COPY'); end; DW_LNS_ADVANCE_PC : begin state.address := state.address + ReadULEB128() * header64.minimum_instruction_length; DEBUG_WRITELN('DW_LNS_ADVANCE_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_ADVANCE_LINE : begin state.line := state.line + ReadLEB128(); DEBUG_WRITELN('DW_LNS_ADVANCE_LINE (', state.line, ')'); end; DW_LNS_SET_FILE : begin state.file_id := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_FILE (', state.file_id, ')'); end; DW_LNS_SET_COLUMN : begin state.column := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_COLUMN (', state.column, ')'); end; DW_LNS_NEGATE_STMT : begin state.is_stmt := not state.is_stmt; DEBUG_WRITELN('DW_LNS_NEGATE_STMT (', state.is_stmt, ')'); end; DW_LNS_SET_BASIC_BLOCK : begin state.basic_block := true; DEBUG_WRITELN('DW_LNS_SET_BASIC_BLOCK'); end; DW_LNS_CONST_ADD_PC : begin state.address := state.address + CalculateAddressIncrement(255, header64); DEBUG_WRITELN('DW_LNS_CONST_ADD_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_FIXED_ADVANCE_PC : begin state.address := state.address + ReadUHalf(); DEBUG_WRITELN('DW_LNS_FIXED_ADVANCE_PC (', hexstr(state.address, sizeof(state.address)*2), ')'); end; DW_LNS_SET_PROLOGUE_END : begin state.prolouge_end := true; DEBUG_WRITELN('DW_LNS_SET_PROLOGUE_END'); end; DW_LNS_SET_EPILOGUE_BEGIN : begin state.epilouge_begin := true; DEBUG_WRITELN('DW_LNS_SET_EPILOGUE_BEGIN'); end; DW_LNS_SET_ISA : begin state.isa := ReadULEB128(); DEBUG_WRITELN('DW_LNS_SET_ISA (', state.isa, ')'); end; else begin { special opcode } if (opcode < header64.opcode_base) then begin DEBUG_WRITELN('Unknown standard opcode $', hexstr(opcode, 2), '; skipping'); for i := 1 to numoptable[opcode] do SkipLEB128(); end else begin adjusted_opcode := opcode - header64.opcode_base; addrIncrement := CalculateAddressIncrement(opcode, header64); state.address := state.address + addrIncrement; lineIncrement := header64.line_base + (adjusted_opcode mod header64.line_range); state.line := state.line + lineIncrement; DEBUG_WRITELN('Special opcode $', hexstr(opcode, 2), ' address increment: ', addrIncrement, ' new line: ', lineIncrement); state.basic_block := false; state.prolouge_end := false; state.epilouge_begin := false; state.append_row := true; end; end; end; //case if (state.append_row) then begin {$IFDEF DEBUG_DWARF_PARSER} Writeln('Address = ', hexstr(pointer(state.address)), ', file_id = ', state.file_id, ', file = ' , GetFullFilename(file_names, include_directories, state.file_id), ', line = ', state.line, ' column = ', state.column); {$ENDIF} if (state.first_row) then begin if (state.address > addr) then break; state.first_row := false; end; { when we have found the address we need to return the previous line because that contains the call instruction } if (state.address >= addr) then begin line := prev_line; column := prev_column; sourceFile := GetFullFilename(file_names, include_directories, prev_file); Exit(True); end else begin { save line information } prev_file := state.file_id; prev_line := state.line; prev_column := state.column; end; state.append_row := false; if (state.end_sequence) then begin // Reset state machine when sequence ends. InitStateRegisters(state, header64); end; end; opcode := ReadNext(); end; //while end; type TPathType = ( ptNone, ptRelative, ptAbsolute ); function GetPathType(sPath : String): TPathType; begin Result := ptNone; {$IFDEF MSWINDOWS} {check for drive/unc info} if ( Pos( '\\', sPath ) > 0 ) or ( Pos( DriveDelim, sPath ) > 0 ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (sPath[1] = PathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative; end; function ExpandAbsolutePath(Path: String): String; var I, J: Integer; begin {First remove all references to '\.\'} I := Pos (DirectorySeparator + '.' + DirectorySeparator, Path); while I <> 0 do begin Delete (Path, I, 2); I := Pos (DirectorySeparator + '.' + DirectorySeparator, Path); end; {Then remove all references to '\..\'} I := Pos (DirectorySeparator + '..', Path); while (I <> 0) do begin J := Pred (I); while (J > 0) and (Path [J] <> DirectorySeparator) do Dec (J); if (J = 0) then Delete (Path, I, 3) else Delete (Path, J, I - J + 3); I := Pos (DirectorySeparator + '..', Path); end; Result := Path; end; function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; begin case GetPathType(sRelativeFileName) of ptNone, ptRelative: Result := ExpandAbsolutePath(sPath + sRelativeFileName); else Result := sRelativeFileName; end; end; var i: Integer; dc, ts: TStream; DwarfLineInfo: Pointer; externalFile: AnsiString; DwarfSize: Qword; base_addr: Pointer; ExeImageBase: QWord; begin Result := False; moduleFile := ''; sourceFile := ''; line := -1; column := -1; LineInfoError:= ''; GetModuleByAddr(addr, base_addr, moduleFile); if moduleFile = '' then Exit(False); // No module found at this address. // Never read modules or .zdli files from current directory. // If module path is relative make it relative to BaseModulePath. // (for example ./doublecmd must be expanded). moduleFile := GetAbsoluteFileName(BaseModulePath, moduleFile); DEBUG_WRITELN('Module ', moduleFile, ' at $', hexStr(base_addr)); try try { First, try the external file with line information. Failing that, try to parse the executable itself } externalFile := DlnNameByExename(moduleFile); i:= -1; repeat DEBUG_WRITELN('Checking external file: ', externalFile); if FileExists(externalFile) then break else externalFile := ''; inc(i); if i > high(LineInfoPaths) then break; // Check additional paths. externalFile := GetAbsoluteFileName(BaseModulePath, LineInfoPaths[i]); externalFile := IncludeTrailingPathDelimiter(externalFile) + DlnNameByExename(ExtractFileName(moduleFile)); until False; if externalFile <> '' //and (FileAge(moduleFile) <= FileAge(externalFile)) then begin DEBUG_WRITELN('Reading debug info from external file ', externalFile); //the compression streams are unable to seek, //so we decompress to a memory stream first. ts := TFileStream.Create(externalFile, fmOpenRead or fmShareDenyNone); dc := TDecompressionStream.Create(ts); dli := TMemoryStream.Create; dc.Read(DwarfSize, SizeOf(DwarfSize)); // 8 bytes (QWORD) dc.Read(ExeImageBase, SizeOf(ExeImageBase)); // 8 bytes (QWORD) dli.CopyFrom(dc, DwarfSize); FreeAndNil(dc); FreeAndNil(ts); end else begin DEBUG_WRITELN('Reading debug info from ', moduleFile); if not ExtractDwarfLineInfo(moduleFile, DwarfLineInfo, DwarfSize, ExeImageBase) then begin DEBUG_WRITELN('Debug info not found.'); LineInfoError:= ExtractDwarfLineInfoError; Exit(false); end; dli:= TMemoryStream.Create; dli.Write(DwarfLineInfo^, DwarfSize); FreeMem(DwarfLineInfo); end; DEBUG_WRITELN('dwarf line info: ', dli.size, ' bytes.'); // Account for the possible relocation (in 99% cases ExeImagebase = base_addr) {$PUSH} {$overflowchecks off} {$rangechecks off} {$warnings off} addr := addr - base_addr + Pointer(ExeImageBase); {$POP} next_base := 0; while next_base < dli.Size do begin unit_base := next_base; if ParseCompilationUnit(PtrUInt(addr)) then break; // Found line info end; Result := True; except LineInfoError := 'Crashed parsing the dwarf line info: ' + (ExceptObject as Exception).Message; Result := False; end; finally if Assigned(dli) then FreeAndNil(dli); end; if not Result then DEBUG_WRITELN('Cannot read DWARF debug line info: ', LineInfoError); end; initialization InitLineInfo; end. �������������������������������������������������������������������������doublecmd-0.7.1/src/uresample.pas�������������������������������������������������������������������0000644�0001750�0000144�00000047773�12076506300�016027� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// ----------------------------------------------------------------------------- // Project: bitmap resampler // Module: resample // Description: Interpolated Bitmap Resampling using filters. // Version: 01.03 // Release: 1 // Date: 19-DEC-2009 // Target: Free Pascal 2.2.4, Lazarus 0.9.29 // Author(s): anme: Anders Melander, anders@melander.dk // Alexx2000: Alexander Koblov, Alexx2000@mail.ru // Copyright (c) 1997,98 by Anders Melander // Copyright (c) 2009 by Alexander Koblov // Formatting: 2 space indent, 8 space tabs, 80 columns. // ----------------------------------------------------------------------------- // This software is copyrighted as noted above. It may be freely copied, // modified, and redistributed, provided that the copyright notice(s) is // preserved on all copies. // // There is no warranty or other guarantee of fitness for this software, // it is provided solely "as is". Bug reports or fixes may be sent // to the author, who may or may not act on them as he desires. // // You may not include this software in a program or other software product // without supplying the source, or without informing the end-user that the // source is available for no extra charge. // // If you modify this software, you should include a notice in the "Revision // history" section giving the name of the person performing the modification, // the date of modification, and the reason for such modification. // ----------------------------------------------------------------------------- // Here's some additional copyrights for you: // // From filter.c: // The authors and the publisher hold no copyright restrictions // on any of these files; this source code is public domain, and // is freely available to the entire computer graphics community // for study, use, and modification. We do request that the // comment at the top of each file, identifying the original // author and its original publication in the book Graphics // Gems, be retained in all programs that use these files. // // ----------------------------------------------------------------------------- // Revision history: // // 0100 110997 anme - Adapted from fzoom v0.20 by Dale Schumacher. // // 0101 110198 anme - Added Lanczos3 and Mitchell filters. // - Fixed range bug. // Min value was not checked on conversion from Single to // byte. // - Numerous optimizations. // - Added TImage stretch on form resize. // - Added support for Delphi 2 via TCanvas.Pixels. // - Renamed module from stretch to resample. // - Moved demo code to separate module. // // 0102 150398 anme - Fixed a problem that caused all pixels to be shifted // 1/2 pixel down and to the right (in source // coordinates). Thanks to David Ullrich for the // solution. // 0103 191209 Alexx2000 - Ported to FreePascal/Lazarus // - Added alpha channel support // ----------------------------------------------------------------------------- // Credits: // The algorithms and methods used in this library are based on the article // "General Filtered Image Rescaling" by Dale Schumacher which appeared in the // book Graphics Gems III, published by Academic Press, Inc. // // The edge offset problem was fixed by: // * David Ullrich <ullrich@hardy.math.okstate.edu> // ----------------------------------------------------------------------------- // To do (in rough order of priority): // * Implement Dale Schumacher's "Optimized Bitmap Scaling Routines". // * Fix BoxFilter. // * Optimize to use integer math instead of floating point where possible. // ----------------------------------------------------------------------------- unit uReSample; interface {$mode delphi}{$R-} {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} {$POINTERMATH ON} {$ENDIF} uses SysUtils, Classes, Graphics; type // Type of a filter for use with Stretch() TFilterProc = function(Value: Single): Single; // Sample filters for use with Stretch() function SplineFilter(Value: Single): Single; function BellFilter(Value: Single): Single; function TriangleFilter(Value: Single): Single; function BoxFilter(Value: Single): Single; function HermiteFilter(Value: Single): Single; function Lanczos3Filter(Value: Single): Single; function MitchellFilter(Value: Single): Single; // Interpolator // Src: Source bitmap // Dst: Destination bitmap // filter: Weight calculation filter // fwidth: Relative sample radius procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single); // ----------------------------------------------------------------------------- // // List of Filters // // ----------------------------------------------------------------------------- const ResampleFilters: array[0..6] of record Name: string; // Filter name Filter: TFilterProc;// Filter implementation Width: Single; // Suggested sampling width/radius end = ( (Name: 'Box'; Filter: BoxFilter; Width: 0.5), (Name: 'Triangle'; Filter: TriangleFilter; Width: 1.0), (Name: 'Hermite'; Filter: HermiteFilter; Width: 1.0), (Name: 'Bell'; Filter: BellFilter; Width: 1.5), (Name: 'B-Spline'; Filter: SplineFilter; Width: 2.0), (Name: 'Lanczos3'; Filter: Lanczos3Filter; Width: 3.0), (Name: 'Mitchell'; Filter: MitchellFilter; Width: 2.0) ); implementation uses Math, IntfGraphics, GraphType, FPImage; // ----------------------------------------------------------------------------- // // Filter functions // // ----------------------------------------------------------------------------- // Hermite filter function HermiteFilter(Value: Single): Single; begin // f(t) = 2|t|^3 - 3|t|^2 + 1, -1 <= t <= 1 if (Value < 0.0) then Value := -Value; if (Value < 1.0) then Result := (2.0 * Value - 3.0) * Sqr(Value) + 1.0 else Result := 0.0; end; // Box filter // a.k.a. "Nearest Neighbour" filter // anme: I have not been able to get acceptable // results with this filter for subsampling. function BoxFilter(Value: Single): Single; begin if (Value > -0.5) and (Value <= 0.5) then Result := 1.0 else Result := 0.0; end; // Triangle filter // a.k.a. "Linear" or "Bilinear" filter function TriangleFilter(Value: Single): Single; begin if (Value < 0.0) then Value := -Value; if (Value < 1.0) then Result := 1.0 - Value else Result := 0.0; end; // Bell filter function BellFilter(Value: Single): Single; begin if (Value < 0.0) then Value := -Value; if (Value < 0.5) then Result := 0.75 - Sqr(Value) else if (Value < 1.5) then begin Value := Value - 1.5; Result := 0.5 * Sqr(Value); end else Result := 0.0; end; // B-spline filter function SplineFilter(Value: Single): Single; var tt : single; begin if (Value < 0.0) then Value := -Value; if (Value < 1.0) then begin tt := Sqr(Value); Result := 0.5*tt*Value - tt + 2.0 / 3.0; end else if (Value < 2.0) then begin Value := 2.0 - Value; Result := 1.0/6.0 * Sqr(Value) * Value; end else Result := 0.0; end; // Lanczos3 filter function Lanczos3Filter(Value: Single): Single; function SinC(Value: Single): Single; begin if (Value <> 0.0) then begin Value := Value * Pi; Result := sin(Value) / Value end else Result := 1.0; end; begin if (Value < 0.0) then Value := -Value; if (Value < 3.0) then Result := SinC(Value) * SinC(Value / 3.0) else Result := 0.0; end; function MitchellFilter(Value: Single): Single; const B = (1.0 / 3.0); C = (1.0 / 3.0); var tt : single; begin if (Value < 0.0) then Value := -Value; tt := Sqr(Value); if (Value < 1.0) then begin Value := (((12.0 - 9.0 * B - 6.0 * C) * (Value * tt)) + ((-18.0 + 12.0 * B + 6.0 * C) * tt) + (6.0 - 2 * B)); Result := Value / 6.0; end else if (Value < 2.0) then begin Value := (((-1.0 * B - 6.0 * C) * (Value * tt)) + ((6.0 * B + 30.0 * C) * tt) + ((-12.0 * B - 48.0 * C) * Value) + (8.0 * B + 24 * C)); Result := Value / 6.0; end else Result := 0.0; end; // ----------------------------------------------------------------------------- // // Interpolator // // ----------------------------------------------------------------------------- type // Contributor for a pixel TContributor = record pixel: integer; // Source pixel weight: single; // Pixel weight end; TContributorList = array[0..0] of TContributor; PContributorList = ^TContributorList; // List of source pixels contributing to a destination pixel TCList = record n : integer; p : PContributorList; end; TCListList = array[0..0] of TCList; PCListList = ^TCListList; TRGBA = packed record r, g, b, a : single; end; // Physical bitmap pixel TColorRGBA = packed record r, g, b, a : BYTE; end; PColorRGBA = ^TColorRGBA; // Physical bitmap scanline (row) TRGBAList = packed array[0..0] of TColorRGBA; PRGBAList = ^TRGBAList; function CreateAlphaFromMask(Bitmap: TBitmap): TLazIntfImage; var SrcIntfImage: TLazIntfImage; x, y, xStop, yStop: Integer; Color: TFPColor; begin SrcIntfImage := TLazIntfImage.Create(Bitmap.RawImage, False); with SrcIntfImage do begin if MaskData = nil then Exit(SrcIntfImage); Result := TLazIntfImage.Create(Width, Height, [riqfRGB, riqfAlpha]); Result.CreateData; xStop := Width - 1; yStop := Height - 1; end; for x:= 0 to xStop do for y:= 0 to yStop do begin Color := SrcIntfImage.Colors[x, y]; if SrcIntfImage.Masked[x, y] then Color.Alpha := Low(Color.Alpha) else Color.Alpha := High(Color.Alpha); Result.Colors[x, y] := Color; end; SrcIntfImage.Free; end; procedure Stretch(Src, Dst: TBitmap; filter: TFilterProc; fwidth: single); var xscale, yscale : single; // Zoom scale factors i, j, k : integer; // Loop variables center : single; // Filter calculation variables width, fscale, weight : single; // Filter calculation variables left, right : integer; // Filter calculation variables n : integer; // Pixel number Work : PRGBAList; contrib : PCListList; rgba : TRGBA; color : TColorRGBA; SourceLine , DestLine : PRGBAList; SrcDelta : integer; SrcIntfImage, DstIntfImage : TLazIntfImage; ImgFormatDescription : TRawImageDescription; SrcWidth , SrcHeight , DstWidth , DstHeight : integer; function Color2RGBA(Color: TFPColor): TColorRGBA; begin Result.r := Color.Red shr 8; Result.g := Color.Green shr 8; Result.b := Color.Blue shr 8; Result.a := Color.Alpha shr 8; end; function RGBA2Color(Color: TColorRGBA): TFPColor; begin Result.Red := Color.r shl 8; Result.Green := Color.g shl 8; Result.Blue := Color.b shl 8; Result.Alpha := Color.a shl 8; end; begin DstWidth := Dst.Width; DstHeight := Dst.Height; SrcWidth := Src.Width; SrcHeight := Src.Height; if (SrcWidth < 1) or (SrcHeight < 1) then raise Exception.Create('Source bitmap too small'); // Create intermediate buffer to hold horizontal zoom Work := GetMem(DstWidth * SrcHeight * SizeOf(TColorRGBA)); try // xscale := DstWidth / SrcWidth; // yscale := DstHeight / SrcHeight; // Improvement suggested by David Ullrich: if (SrcWidth = 1) then xscale:= DstWidth / SrcWidth else xscale:= (DstWidth - 1) / (SrcWidth - 1); if (SrcHeight = 1) then yscale:= DstHeight / SrcHeight else yscale:= (DstHeight - 1) / (SrcHeight - 1); {++++++++++++++++++++} if Src.RawImage.Description.AlphaPrec = 0 then // if bitmap has not alpha channel SrcIntfImage := CreateAlphaFromMask(Src) else SrcIntfImage := TLazIntfImage.Create(Src.RawImage, False); DstIntfImage := TLazIntfImage.Create(Dst.RawImage, False); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(DstWidth, DstHeight); DstIntfImage.DataDescription := ImgFormatDescription; {++++++++++++++++++++} // -------------------------------------------- // Pre-calculate filter contributions for a row // ----------------------------------------------- GetMem(contrib, DstWidth* sizeof(TCList)); // Horizontal sub-sampling // Scales from bigger to smaller width if (xscale < 1.0) then begin width := fwidth / xscale; fscale := 1.0 / xscale; for i := 0 to DstWidth-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor)); center := i / xscale; // Original code: // left := ceil(center - width); // right := floor(center + width); left := floor(center - width); right := ceil(center + width); for j := left to right do begin weight := filter((center - j) / fscale) / fscale; if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcWidth) then n := SrcWidth - j + SrcWidth - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end else // Horizontal super-sampling // Scales from smaller to bigger width begin for i := 0 to DstWidth-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor)); center := i / xscale; // Original code: // left := ceil(center - fwidth); // right := floor(center + fwidth); left := floor(center - fwidth); right := ceil(center + fwidth); for j := left to right do begin weight := filter(center - j); if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcWidth) then n := SrcWidth - j + SrcWidth - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end; // ---------------------------------------------------- // Apply filter to sample horizontally from Src to Work // ---------------------------------------------------- for k := 0 to SrcHeight-1 do begin {++++++++++++++++++++} DestLine := Work + k * DstWidth; {++++++++++++++++++++} for i := 0 to DstWidth-1 do begin rgba.r := 0.0; rgba.g := 0.0; rgba.b := 0.0; rgba.a := 0.0; for j := 0 to contrib^[i].n-1 do begin {++++++++++++++++++++} color := Color2RGBA(SrcIntfImage.Colors[contrib^[i].p^[j].pixel, k]); {++++++++++++++++++++} weight := contrib^[i].p^[j].weight; if (weight = 0.0) then continue; rgba.r := rgba.r + color.r * weight; rgba.g := rgba.g + color.g * weight; rgba.b := rgba.b + color.b * weight; rgba.a := rgba.a + color.a * weight; end; if (rgba.r > 255.0) then color.r := 255 else if (rgba.r < 0.0) then color.r := 0 else color.r := round(rgba.r); if (rgba.g > 255.0) then color.g := 255 else if (rgba.g < 0.0) then color.g := 0 else color.g := round(rgba.g); if (rgba.b > 255.0) then color.b := 255 else if (rgba.b < 0.0) then color.b := 0 else color.b := round(rgba.b); if (rgba.a > 255.0) then color.a := 255 else if (rgba.a < 0.0) then color.a := 0 else color.a := round(rgba.a); {++++++++++++++++++++} // Set new pixel value DestLine^[i] := color; {++++++++++++++++++++} end; end; // Free the memory allocated for horizontal filter weights for i := 0 to DstWidth-1 do FreeMem(contrib^[i].p); FreeMem(contrib); // ----------------------------------------------- // Pre-calculate filter contributions for a column // ----------------------------------------------- GetMem(contrib, DstHeight* sizeof(TCList)); // Vertical sub-sampling // Scales from bigger to smaller height if (yscale < 1.0) then begin width := fwidth / yscale; fscale := 1.0 / yscale; for i := 0 to DstHeight-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(width * 2.0 + 1) * sizeof(TContributor)); center := i / yscale; // Original code: // left := ceil(center - width); // right := floor(center + width); left := floor(center - width); right := ceil(center + width); for j := left to right do begin weight := filter((center - j) / fscale) / fscale; if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcHeight) then n := SrcHeight - j + SrcHeight - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end end else // Vertical super-sampling // Scales from smaller to bigger height begin for i := 0 to DstHeight-1 do begin contrib^[i].n := 0; GetMem(contrib^[i].p, trunc(fwidth * 2.0 + 1) * sizeof(TContributor)); center := i / yscale; // Original code: // left := ceil(center - fwidth); // right := floor(center + fwidth); left := floor(center - fwidth); right := ceil(center + fwidth); for j := left to right do begin weight := filter(center - j); if (weight = 0.0) then continue; if (j < 0) then n := -j else if (j >= SrcHeight) then n := SrcHeight - j + SrcHeight - 1 else n := j; k := contrib^[i].n; contrib^[i].n := contrib^[i].n + 1; contrib^[i].p^[k].pixel := n; contrib^[i].p^[k].weight := weight; end; end; end; // -------------------------------------------------- // Apply filter to sample vertically from Work to Dst // -------------------------------------------------- {++++++++++++++++++++} SourceLine := Work; SrcDelta := DstWidth; {++++++++++++++++++++} for k := 0 to DstWidth-1 do begin for i := 0 to DstHeight-1 do begin rgba.r := 0; rgba.g := 0; rgba.b := 0; rgba.a := 0; // weight := 0.0; for j := 0 to contrib^[i].n-1 do begin {++++++++++++++++++++} color := PColorRGBA(SourceLine+contrib^[i].p^[j].pixel*SrcDelta)^; {++++++++++++++++++++} weight := contrib^[i].p^[j].weight; if (weight = 0.0) then continue; rgba.r := rgba.r + color.r * weight; rgba.g := rgba.g + color.g * weight; rgba.b := rgba.b + color.b * weight; rgba.a := rgba.a + color.a * weight; end; if (rgba.r > 255.0) then color.r := 255 else if (rgba.r < 0.0) then color.r := 0 else color.r := round(rgba.r); if (rgba.g > 255.0) then color.g := 255 else if (rgba.g < 0.0) then color.g := 0 else color.g := round(rgba.g); if (rgba.b > 255.0) then color.b := 255 else if (rgba.b < 0.0) then color.b := 0 else color.b := round(rgba.b); if (rgba.a > 255.0) then color.a := 255 else if (rgba.a < 0.0) then color.a := 0 else color.a := round(rgba.a); {++++++++++++++++++++} DstIntfImage.Colors[k, i]:= RGBA2Color(color); {++++++++++++++++++++} end; {++++++++++++++++++++} Inc(SourceLine); {++++++++++++++++++++} end; // Free the memory allocated for vertical filter weights for i := 0 to DstHeight-1 do FreeMem(contrib^[i].p); FreeMem(contrib); Dst.LoadFromIntfImage(DstIntfImage); finally FreeMem(Work); DstIntfImage.Free; SrcIntfImage.Free; end; end; end. �����doublecmd-0.7.1/src/fextractdlg.lfm�����������������������������������������������������������������0000644�0001750�0000144�00000014072�12616371371�016326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmExtractDlg: TfrmExtractDlg Left = 552 Height = 222 Top = 162 Width = 516 HelpContext = 160 HorzScrollBar.Page = 446 HorzScrollBar.Range = 437 HorzScrollBar.Visible = False VertScrollBar.Page = 182 VertScrollBar.Range = 177 ActiveControl = edtExtractTo AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Unpack files' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 222 ClientWidth = 516 Constraints.MinWidth = 500 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'cbOverwrite.Checked' inherited pnlContent: TPanel Left = 6 Height = 148 Top = 5 Width = 500 Align = alNone ChildSizing.TopBottomSpacing = 4 ClientHeight = 148 ClientWidth = 500 Constraints.MinWidth = 500 object pnlLabels: TPanel[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = cbFileMask AnchorSideBottom.Control = edtPassword AnchorSideBottom.Side = asrBottom Left = 0 Height = 140 Top = 5 Width = 166 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 140 ClientWidth = 166 Color = clForm ParentColor = False TabOrder = 4 object lblFileMask: TLabel AnchorSideLeft.Control = pnlLabels AnchorSideTop.Control = pnlLabels Left = 0 Height = 15 Top = 3 Width = 166 BorderSpacing.Top = 3 Caption = '&Extract files matching file mask:' FocusControl = cbFileMask ParentColor = False end object lblPassword: TLabel AnchorSideLeft.Control = pnlLabels AnchorSideBottom.Control = pnlLabels AnchorSideBottom.Side = asrBottom Left = 0 Height = 15 Top = 122 Width = 151 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 3 Caption = '&Password for encrypted files:' FocusControl = edtPassword ParentColor = False end object lblExtractTo: TLabel AnchorSideTop.Control = lblFileMask AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 26 Width = 86 BorderSpacing.Top = 8 Caption = 'To the &directory:' FocusControl = edtExtractTo ParentColor = False end end object cbFileMask: TComboBox[1] AnchorSideLeft.Control = pnlLabels AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 5 Width = 321 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Top = 2 BorderSpacing.Right = 36 ItemHeight = 15 ParentFont = False TabOrder = 0 Text = '*.*' end object edtExtractTo: TDirectoryEdit[2] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = cbFileMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbFileMask AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 30 Width = 321 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 MaxLength = 0 TabOrder = 1 end object edtPassword: TEdit[3] AnchorSideLeft.Control = cbFileMask AnchorSideTop.Control = pnlCheckBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExtractTo AnchorSideRight.Side = asrBottom Left = 171 Height = 23 Top = 122 Width = 321 Anchors = [akTop, akLeft, akRight] EchoMode = emPassword Enabled = False PasswordChar = '*' TabOrder = 3 end object pnlCheckBoxes: TPanel[4] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = edtExtractTo AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 69 Top = 53 Width = 506 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 69 ClientWidth = 506 Color = clForm ParentColor = False TabOrder = 2 object cbInSeparateFolder: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 6 Width = 351 BorderSpacing.Top = 2 Caption = 'Unpack each archive to a &separate subdir (name of the archive)' TabOrder = 0 end object cbExtractPath: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 25 Width = 351 Caption = '&Unpack path names if stored with files' Checked = True OnChange = cbExtractPathChange State = cbChecked TabOrder = 1 end object cbOverwrite: TCheckBox AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 44 Width = 351 Caption = 'O&verwrite existing files' Checked = True State = cbChecked TabOrder = 2 end end end inherited pnlButtons: TPanel AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = DividerBevel AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 6 Top = 176 Width = 500 Align = alNone Anchors = [akTop, akLeft, akRight] ClientWidth = 500 inherited btnCancel: TBitBtn Left = 318 end inherited btnOK: TBitBtn Left = 412 end end object DividerBevel: TDividerBevel[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 157 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Font.Style = [fsBold] ParentFont = False end inherited pmQueuePopup: TPopupMenu[3] end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/usearchcontent.pas��������������������������������������������������������������0000644�0001750�0000144�00000017045�12612505011�017036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Content plugin search control Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) 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 uSearchContent; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, ExtCtrls, uFindFiles; type { TPluginPanel } TPluginPanel = class(TPanel) private FPlugin, FField, FOperator, FValue: TComboBox; private function GetCompare: TPluginOperator; function GetField: String; function GetFieldType: Integer; function GetPlugin: String; function GetValue: Variant; procedure PluginChange(Sender: TObject); procedure FieldChange(Sender: TObject); procedure SetCompare(AValue: TPluginOperator); procedure SetField(AValue: String); procedure SetPlugin(AValue: String); procedure SetValue(AValue: Variant); procedure SetComboBox(ComboBox: TComboBox; const Value, Error: String); public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; public property Plugin: String read GetPlugin write SetPlugin; property Field: String read GetField write SetField; property FieldType: Integer read GetFieldType; property Compare: TPluginOperator read GetCompare write SetCompare; property Value: Variant read GetValue write SetValue; end; implementation uses Variants, StrUtils, WdxPlugin, uGlobs, uWDXModule, Graphics, uShowMsg; { TPluginPanel } function TPluginPanel.GetCompare: TPluginOperator; begin Result:= TPluginOperator(PtrInt(FOperator.Items.Objects[FOperator.ItemIndex])); end; function TPluginPanel.GetField: String; begin Result:= FField.Text; end; function TPluginPanel.GetFieldType: Integer; begin Result:= PtrInt(FField.Items.Objects[FField.ItemIndex]); end; function TPluginPanel.GetPlugin: String; begin Result:= FPlugin.Text; end; function TPluginPanel.GetValue: Variant; begin Result:= StrToVar(FValue.Text, PtrInt(FField.Items.Objects[FField.ItemIndex])); end; procedure TPluginPanel.PluginChange(Sender: TObject); var I: Integer; Module: TWDXModule; begin if FPlugin.ItemIndex < 0 then Exit; FField.Items.Clear; Module:= gWdxPlugins.GetWdxModule(FPlugin.Text); if Assigned(Module) then for I:= 0 to Module.FieldList.Count - 1 do begin FField.Items.AddObject(Module.FieldList[I], TObject(PtrInt(TWdxField(Module.FieldList.Objects[I]).FType))); end; if FField.Items.Count > 0 then begin FField.ItemIndex:= 0; FieldChange(FField); end; end; procedure TPluginPanel.FieldChange(Sender: TObject); var I, J: Integer; sUnits: String; Module: TWDXModule; begin FValue.Items.Clear; FOperator.Items.Clear; Module:= gWdxPlugins.GetWdxModule(FPlugin.Text); J:= Module.GetFieldIndex(FField.Text); if J < 0 then Exit; I:= TWdxField(Module.FieldList.Objects[J]).FType; case I of FT_NUMERIC_32, FT_NUMERIC_64, FT_NUMERIC_FLOATING, FT_DATE, FT_TIME, FT_DATETIME: begin FValue.Style:= csDropDown; FOperator.Items.AddObject('=', TObject(PtrInt(poEqual))); FOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqual))); FOperator.Items.AddObject('>', TObject(PtrInt(poMore))); FOperator.Items.AddObject('<', TObject(PtrInt(poLess))); FOperator.Items.AddObject('>=', TObject(PtrInt(poMoreEqual))); FOperator.Items.AddObject('<=', TObject(PtrInt(poLessEqual))); end; FT_BOOLEAN: begin FValue.Items.Add('True'); FValue.Items.Add('False'); FValue.ItemIndex:= 0; FValue.Style:= csDropDownList; FOperator.Items.AddObject('=', TObject(PtrInt(poEqual))); end; FT_MULTIPLECHOICE: begin begin FValue.Style:= csDropDownList; FOperator.Items.AddObject('=', TObject(PtrInt(poEqual))); FOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqual))); sUnits:= TWdxField(Module.FieldList.Objects[J]).FUnits; while sUnits <> EmptyStr do begin FValue.Items.Add(Copy2SymbDel(sUnits, '|')); end; if FValue.Items.Count > 0 then FValue.ItemIndex:= 0; end; end; FT_STRING, FT_STRINGW, FT_FULLTEXT: begin FValue.Style:= csDropDown; FOperator.Items.AddObject('=', TObject(PtrInt(poEqual))); FOperator.Items.AddObject('!=', TObject(PtrInt(poNotEqual))); FOperator.Items.AddObject('=(case)', TObject(PtrInt(poEqualCase))); FOperator.Items.AddObject('!=(case)', TObject(PtrInt(poNotEqualCase))); FOperator.Items.AddObject('contains', TObject(PtrInt(poContains))); FOperator.Items.AddObject('!contains', TObject(PtrInt(poNotContains))); FOperator.Items.AddObject('contains(case)', TObject(PtrInt(poContainsCase))); FOperator.Items.AddObject('!contains(case)', TObject(PtrInt(poNotContainsCase))); end; end; if FOperator.Items.Count > 0 then FOperator.ItemIndex:= 0; end; procedure TPluginPanel.SetCompare(AValue: TPluginOperator); var Index: Integer; begin Index:= FOperator.Items.IndexOfObject(TObject(PtrInt(AValue))); if Index >= 0 then FOperator.ItemIndex:= Index; end; procedure TPluginPanel.SetField(AValue: String); begin SetComboBox(FField, AValue, Format('Field %s not found!', [AValue])); end; procedure TPluginPanel.SetPlugin(AValue: String); begin SetComboBox(FPlugin, AValue, Format('Plugin %s not found!', [AValue])); end; procedure TPluginPanel.SetValue(AValue: Variant); begin FValue.Text:= VarToStr(AValue) end; procedure TPluginPanel.SetComboBox(ComboBox: TComboBox; const Value, Error: String); var Index: Integer; begin Index:= ComboBox.Items.IndexOf(Value); if Index < 0 then msgError(Error) else begin ComboBox.ItemIndex:= Index; if Assigned(ComboBox.OnChange) then ComboBox.OnChange(ComboBox); end; end; constructor TPluginPanel.Create(TheOwner: TComponent); var I: Integer; begin inherited Create(TheOwner); AutoSize:= True; BevelOuter:= bvNone; ChildSizing.ControlsPerLine:= 4; ChildSizing.Layout:= cclLeftToRightThenTopToBottom; ChildSizing.EnlargeHorizontal:= crsScaleChilds; FPlugin:= TComboBox.Create(Self); FPlugin.Parent:= Self; FPlugin.Style:= csDropDownList; FPlugin.OnChange:= @PluginChange; FField:= TComboBox.Create(Self); FField.Parent:= Self; FField.Style:= csDropDownList; FField.OnChange:= @FieldChange; FOperator:= TComboBox.Create(Self); FOperator.Parent:= Self; FOperator.Style:= csDropDownList; FValue:= TComboBox.Create(Self); FValue.Parent:= Self; for I:= 0 to gWDXPlugins.Count - 1do begin if gWdxPlugins.GetWdxModule(I).IsLoaded or gWdxPlugins.GetWdxModule(I).LoadModule then begin FPlugin.Items.Add(gWdxPlugins.GetWdxModule(I).Name); end; end; if FPlugin.Items.Count > 0 then begin FPlugin.ItemIndex:= 0; PluginChange(FPlugin); end; end; destructor TPluginPanel.Destroy; begin FPlugin.Free; FField.Free; FOperator.Free; FValue.Free; inherited Destroy; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ftweakplugin.pas����������������������������������������������������������������0000644�0001750�0000144�00000025741�12457526337�016540� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Plugin tweak window Copyright (C) 2008-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fTweakPlugin; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, uWCXModule, uTypes; type { TfrmTweakPlugin } TfrmTweakPlugin = class(TForm) btnAdd: TButton; btnCancel: TButton; btnChange: TButton; btnDefault: TButton; btnOK: TButton; btnRemove: TButton; cbExt: TComboBox; cbPK_CAPS_BY_CONTENT: TCheckBox; cbPK_CAPS_DELETE: TCheckBox; cbPK_CAPS_ENCRYPT: TCheckBox; cbPK_CAPS_HIDE: TCheckBox; cbPK_CAPS_MEMPACK: TCheckBox; cbPK_CAPS_MODIFY: TCheckBox; cbPK_CAPS_MULTIPLE: TCheckBox; cbPK_CAPS_NEW: TCheckBox; cbPK_CAPS_OPTIONS: TCheckBox; cbPK_CAPS_SEARCHTEXT: TCheckBox; edtDescription: TEdit; edtDetectStr: TEdit; edtName: TEdit; edtPlugin: TEdit; pnlTweakOther: TPanel; lblDescription: TLabel; lblDetectStr: TLabel; lblName: TLabel; lblExtension: TLabel; lblFlags: TLabel; lblFlagsValue: TLabel; lblPlugin1: TLabel; lblPackerPlugin: TLabel; lblPlugin: TLabel; edtPlugin1: TEdit; nbTweakAll: TNotebook; pnlButtons: TPanel; pnlFlags: TPanel; pnlPackerExtsButtons: TPanel; pgTweakPacker: TPage; pgTweakOther: TPage; pnlTweak: TPanel; procedure btnAddClick(Sender: TObject); procedure btnChangeClick(Sender: TObject); procedure btnDefaultClick(Sender: TObject); procedure btnRemoveClick(Sender: TObject); procedure cbExtChange(Sender: TObject); procedure cbPackerFlagsClick(Sender: TObject); procedure FormCreate(Sender: TObject); private FWCXPlugins: TWCXModuleList; FPluginFileName: String; iPrevIndex: Integer; function GetDefaultFlags(PluginFileName: String): PtrInt; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; end; function ShowTweakPluginDlg(PluginType: TPluginType; PluginIndex: Integer): Boolean; implementation {$R *.lfm} uses Dialogs, fOptionsPlugins, WcxPlugin, uDCUtils, uLng, LCLVersion, uGlobs; function ShowTweakPluginDlg(PluginType: TPluginType; PluginIndex: Integer): Boolean; var I, iIndex: Integer; begin with TfrmTweakPlugin.Create(Application) do try case PluginType of ptDSX: begin nbTweakAll.PageIndex:= 1; edtPlugin1.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).FileName; edtDescription.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).Descr; edtName.Text:= tmpDSXPlugins.GetDsxModule(PluginIndex).Name; lblDetectStr.Visible:= False; edtDetectStr.Visible:= False; end; ptWCX: begin nbTweakAll.PageIndex:= 0; FWCXPlugins:= TWCXModuleList.Create; FWCXPlugins.Assign(tmpWCXPlugins); FPluginFileName := FWCXPlugins.FileName[PluginIndex]; edtPlugin.Text:= FPluginFileName; for I:= 0 to FWCXPlugins.Count - 1 do if FWCXPlugins.FileName[I] = edtPlugin.Text then cbExt.Items.AddObject(FWCXPlugins.Ext[I], TObject(FWCXPlugins.Flags[I])); iPrevIndex:= -1; cbExt.ItemIndex:= 0; cbExtChange(cbExt); btnRemove.Enabled:= (cbExt.Items.Count > 1); end; ptWDX: begin nbTweakAll.PageIndex:= 1; edtPlugin1.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).FileName; edtDetectStr.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).DetectStr; edtName.Text:= tmpWDXPlugins.GetWdxModule(PluginIndex).Name; lblDescription.Visible:= False; edtDescription.Visible:= False; end; ptWFX: begin nbTweakAll.PageIndex:= 1; edtPlugin1.Text:= tmpWFXPlugins.FileName[PluginIndex]; edtName.Text:= tmpWFXPlugins.Name[PluginIndex]; lblDetectStr.Visible:= False; edtDetectStr.Visible:= False; lblDescription.Visible:= False; edtDescription.Visible:= False; end; ptWLX: begin nbTweakAll.PageIndex:= 1; edtPlugin1.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).FileName; edtDetectStr.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).DetectStr; edtName.Text:= tmpWLXPlugins.GetWlxModule(PluginIndex).Name; lblDescription.Visible:= False; edtDescription.Visible:= False; end; end; Result:= (ShowModal = mrOK); if Result then case PluginType of ptDSX: begin tmpDSXPlugins.GetDsxModule(PluginIndex).FileName:= edtPlugin1.Text; tmpDSXPlugins.GetDsxModule(PluginIndex).Descr := edtDescription.Text; tmpDSXPlugins.GetDsxModule(PluginIndex).Name:= edtName.Text; end; ptWCX: begin for I:= 0 to cbExt.Items.Count - 1 do begin iIndex:= FWCXPlugins.Find(FPluginFileName, cbExt.Items[I]); if iIndex >= 0 then begin FWCXPlugins.FileName[iIndex]:= edtPlugin.Text; FWCXPlugins.Flags[iIndex]:= PtrInt(cbExt.Items.Objects[I]); end; end; tmpWCXPlugins.Assign(FWCXPlugins); end; ptWDX: begin tmpWDXPlugins.GetWdxModule(PluginIndex).FileName:= edtPlugin1.Text; tmpWDXPlugins.GetWdxModule(PluginIndex).DetectStr:= edtDetectStr.Text; tmpWDXPlugins.GetWdxModule(PluginIndex).Name:= edtName.Text; end; ptWFX: begin tmpWFXPlugins.FileName[PluginIndex]:= edtPlugin1.Text; tmpWFXPlugins.Name[PluginIndex]:= edtName.Text; end; ptWLX: begin tmpWLXPlugins.GetWlxModule(PluginIndex).FileName:= edtPlugin1.Text; tmpWLXPlugins.GetWlxModule(PluginIndex).DetectStr:= edtDetectStr.Text; tmpWLXPlugins.GetWlxModule(PluginIndex).Name:= edtName.Text; end; end; finally Free; end; end; { TfrmTweakPlugin } constructor TfrmTweakPlugin.Create(TheOwner: TComponent); begin FWCXPlugins := nil; iPrevIndex := -1; inherited; end; destructor TfrmTweakPlugin.Destroy; begin inherited; if Assigned(FWCXPlugins) then FreeAndNil(FWCXPlugins); end; procedure TfrmTweakPlugin.cbExtChange(Sender: TObject); var iFlags: PtrInt; begin iPrevIndex:= cbExt.ItemIndex; iFlags:= PtrInt(cbExt.Items.Objects[cbExt.ItemIndex]); lblFlagsValue.Caption:= '('+IntToStr(iFlags)+')'; cbPK_CAPS_NEW.Checked := (iFlags and PK_CAPS_NEW) <> 0; cbPK_CAPS_MODIFY.Checked := (iFlags and PK_CAPS_MODIFY) <> 0; cbPK_CAPS_MULTIPLE.Checked := (iFlags and PK_CAPS_MULTIPLE) <> 0; cbPK_CAPS_DELETE.Checked := (iFlags and PK_CAPS_DELETE) <> 0; cbPK_CAPS_OPTIONS.Checked := (iFlags and PK_CAPS_OPTIONS) <> 0; cbPK_CAPS_MEMPACK.Checked := (iFlags and PK_CAPS_MEMPACK) <> 0; cbPK_CAPS_BY_CONTENT.Checked := (iFlags and PK_CAPS_BY_CONTENT) <> 0; cbPK_CAPS_SEARCHTEXT.Checked := (iFlags and PK_CAPS_SEARCHTEXT) <> 0; cbPK_CAPS_HIDE.Checked := (iFlags and PK_CAPS_HIDE) <> 0; cbPK_CAPS_ENCRYPT.Checked := (iFlags and PK_CAPS_ENCRYPT) <> 0; end; procedure TfrmTweakPlugin.cbPackerFlagsClick(Sender: TObject); var iFlags: PtrInt; begin if iPrevIndex >= 0 then // save new flags begin iFlags:= 0; if cbPK_CAPS_NEW.Checked then iFlags:= iFlags or PK_CAPS_NEW; if cbPK_CAPS_MODIFY.Checked then iFlags:= iFlags or PK_CAPS_MODIFY; if cbPK_CAPS_MULTIPLE.Checked then iFlags:= iFlags or PK_CAPS_MULTIPLE; if cbPK_CAPS_DELETE.Checked then iFlags:= iFlags or PK_CAPS_DELETE; if cbPK_CAPS_OPTIONS.Checked then iFlags:= iFlags or PK_CAPS_OPTIONS; if cbPK_CAPS_MEMPACK.Checked then iFlags:= iFlags or PK_CAPS_MEMPACK; if cbPK_CAPS_BY_CONTENT.Checked then iFlags:= iFlags or PK_CAPS_BY_CONTENT; if cbPK_CAPS_SEARCHTEXT.Checked then iFlags:= iFlags or PK_CAPS_SEARCHTEXT; if cbPK_CAPS_HIDE.Checked then iFlags:= iFlags or PK_CAPS_HIDE; if cbPK_CAPS_ENCRYPT.Checked then iFlags:= iFlags or PK_CAPS_ENCRYPT; cbExt.Items.Objects[iPrevIndex]:= TObject(iFlags); lblFlagsValue.Caption:= '('+IntToStr(iFlags)+')'; end; end; procedure TfrmTweakPlugin.FormCreate(Sender: TObject); begin {$if not declared(lcl_fullversion) or (lcl_fullversion < 093100)} nbTweakAll.ShowTabs := False; nbTweakAll.TabStop := True; {$endif} end; procedure TfrmTweakPlugin.btnDefaultClick(Sender: TObject); begin cbExt.Items.Objects[cbExt.ItemIndex]:= TObject(GetDefaultFlags(edtPlugin.Text)); iPrevIndex:= -1; cbExtChange(cbExt); end; procedure TfrmTweakPlugin.btnRemoveClick(Sender: TObject); var I, OldIndex: Integer; begin iPrevIndex:= -1; // Must be before cbExt.Items.Delete, because it may trigger cbExtChange. OldIndex := cbExt.ItemIndex; I:= FWCXPlugins.Find(FPluginFileName, cbExt.Text); if I >= 0 then FWCXPlugins.Delete(I); cbExt.Items.Delete(cbExt.ItemIndex); if OldIndex >= cbExt.Items.Count then OldIndex := OldIndex - 1; cbExt.ItemIndex := OldIndex; if iPrevIndex = -1 then // Call only if not already triggerred. cbExtChange(cbExt); btnRemove.Enabled:= (cbExt.Items.Count > 1); end; procedure TfrmTweakPlugin.btnAddClick(Sender: TObject); var sExt: String = ''; iFlags: PtrInt; begin if InputQuery(rsOptEnterExt,Format(rsOptAssocPluginWith, [GetCmdDirFromEnvVar(edtPlugin.Text)]), sExt) then begin iFlags:= GetDefaultFlags(edtPlugin.Text); cbExt.ItemIndex:= cbExt.Items.AddObject(sExt, TObject(iFlags)); FWCXPlugins.Add(cbExt.Items[cbExt.ItemIndex], iFlags, FPluginFileName); iPrevIndex:= -1; cbExtChange(cbExt); end; end; procedure TfrmTweakPlugin.btnChangeClick(Sender: TObject); var I: Integer; sExt: String; begin sExt:= cbExt.Items[cbExt.ItemIndex]; I:= FWCXPlugins.Find(FPluginFileName, sExt); if (I >= 0) and InputQuery(rsOptEnterExt,Format(rsOptAssocPluginWith, [GetCmdDirFromEnvVar(edtPlugin.Text)]), sExt) then begin FWCXPlugins.Ext[I]:= sExt; cbExt.Items[cbExt.ItemIndex]:= sExt; end; end; function TfrmTweakPlugin.GetDefaultFlags(PluginFileName: String): PtrInt; var WcxModule: TWcxModule; begin WcxModule := gWCXPlugins.LoadModule(GetCmdDirFromEnvVar(PluginFileName)); if not Assigned(WcxModule) then Exit(0); Result := WcxModule.GetPluginCapabilities; end; end. �������������������������������doublecmd-0.7.1/src/ugraphics.pas�������������������������������������������������������������������0000644�0001750�0000144�00000002722�12577046507�016016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Graphic functions Copyright (C) 2013-2014 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uGraphics; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics; procedure BitmapAssign(Bitmap: TBitmap; Image: TRasterImage); implementation uses GraphType; type TRawAccess = class(TRasterImage) end; procedure BitmapAssign(Bitmap: TBitmap; Image: TRasterImage); var RawImage: PRawImage; begin RawImage:= TRawAccess(Image).GetRawImagePtr; // Simply change raw image owner without data copy Bitmap.LoadFromRawImage(RawImage^, True); // Set image data pointer to nil, so it will not free double RawImage^.ReleaseData; end; end. ����������������������������������������������doublecmd-0.7.1/src/usearchtemplate.pas�������������������������������������������������������������0000644�0001750�0000144�00000044463�12615075222�017214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Load/Save search templates Copyright (C) 2009-2013 Alexander Koblov (alexx2000@mail.ru) 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 uSearchTemplate; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, uFile, DCXmlConfig, uFindFiles; type { TSearchTemplate } TSearchTemplate = class private FTemplateName: String; FSearchRecord: TSearchTemplateRec; FFileChecks: TFindFileChecks; procedure MakeFileChecks; procedure SetSearchRecord(const AValue: TSearchTemplateRec); public constructor Create; function CheckFile(const AFile: TFile): Boolean; property SearchRecord: TSearchTemplateRec read FSearchRecord write SetSearchRecord; property TemplateName: String read FTemplateName write FTemplateName; end; { TSearchTemplateList } TSearchTemplateList = class(TList) private function GetTemplate(Index: Integer): TSearchTemplate; function GetTemplate(const AName: String): TSearchTemplate; public procedure Clear; override; function Add(SearchTemplate: TSearchTemplate): Integer; procedure DeleteTemplate(Index: Integer); procedure LoadToStringList(StringList: TStrings); procedure LoadFromIni(IniFile: TIniFileEx); procedure LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveToIni(IniFile: TIniFileEx); procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); property TemplateByName[const AName: String]: TSearchTemplate read GetTemplate; property Templates[Index: Integer]: TSearchTemplate read GetTemplate; end; const cTemplateSign = '>'; function IsMaskSearchTemplate(const sMask: String): Boolean; inline; implementation uses Variants, DCFileAttributes, DCBasicTypes, WdxPlugin, uWdxModule; function IsMaskSearchTemplate(const sMask: String): Boolean; inline; begin Result:= (Length(sMask) > 0) and (sMask[1] = cTemplateSign); end; { TSearchTemplate } constructor TSearchTemplate.Create; begin inherited Create; FillByte(FSearchRecord, SizeOf(FSearchRecord), 0); end; procedure TSearchTemplate.MakeFileChecks; begin SearchTemplateToFindFileChecks(FSearchRecord, FFileChecks); end; procedure TSearchTemplate.SetSearchRecord(const AValue: TSearchTemplateRec); begin FSearchRecord := AValue; MakeFileChecks; end; function TSearchTemplate.CheckFile(const AFile: TFile): Boolean; begin // If template has IsNotOlderThan option then DateTime checks must be recalculated // everytime because they depend on current time. if FSearchRecord.IsNotOlderThan then DateTimeOptionsToChecks(FSearchRecord, FFileChecks); Result := uFindFiles.CheckFile(FSearchRecord, FFileChecks, AFile); end; { TSearchTemplateList } function TSearchTemplateList.GetTemplate(Index: Integer): TSearchTemplate; begin Result:= TSearchTemplate(Items[Index]); end; function TSearchTemplateList.GetTemplate(const AName: String): TSearchTemplate; var I: Integer; sName: String; begin Result:= nil; if IsMaskSearchTemplate(AName) then sName:= PChar(AName) + 1 // skip template sign else sName:= AName; for I:= 0 to Count - 1 do if SameText(TSearchTemplate(Items[I]).TemplateName, sName) then begin Result:= TSearchTemplate(Items[I]); Exit; end; end; procedure TSearchTemplateList.Clear; var i: Integer; begin for i := 0 to Count - 1 do Templates[i].Free; inherited Clear; end; function TSearchTemplateList.Add(SearchTemplate: TSearchTemplate): Integer; begin Result:= inherited Add(SearchTemplate); end; procedure TSearchTemplateList.DeleteTemplate(Index: Integer); begin Templates[Index].Free; Delete(Index); end; procedure TSearchTemplateList.LoadToStringList(StringList: TStrings); var I: Integer; begin StringList.Clear; for I:= 0 to Count - 1 do StringList.Add(Templates[I].TemplateName); end; const cSection = 'SearchTemplates'; procedure TSearchTemplateList.LoadFromIni(IniFile: TIniFileEx); var I, iCount: Integer; sTemplate: String; SearchTemplate: TSearchTemplate; FloatNotOlderThan: Double; iAttr: LongInt; begin Clear; iCount:= IniFile.ReadInteger(cSection, 'TemplateCount', 0); for I:= 0 to iCount - 1 do begin SearchTemplate:= TSearchTemplate.Create; with SearchTemplate.FSearchRecord do begin sTemplate:= 'Template' + IntToStr(I+1); SearchTemplate.TemplateName:= IniFile.ReadString(cSection, sTemplate+'Name', ''); StartPath:= IniFile.ReadString(cSection, sTemplate+'StartPath', ''); FilesMasks:= IniFile.ReadString(cSection, sTemplate+'FileMask', '*'); iAttr:= IniFile.ReadInteger(cSection, sTemplate+'Attributes', faAnyFile); if iAttr <> faAnyFile then AttributesPattern := FileAttrToStr(TFileAttrs(iAttr)); //AttributesPattern:= IniFile.ReadString(cSection, sTemplate+'AttribStr', ''); // date/time CaseSensitive:= IniFile.ReadBool(cSection, sTemplate+'CaseSens', False); IsDateFrom:= IniFile.ReadBool(cSection, sTemplate+'IsDateFrom', False); IsDateTo:= IniFile.ReadBool(cSection, sTemplate+'IsDateTo', False); IsTimeFrom:= IniFile.ReadBool(cSection, sTemplate+'IsTimeFrom', False); IsTimeTo:= IniFile.ReadBool(cSection, sTemplate+'IsTimeTo', False); if IsDateFrom or IsTimeFrom then DateTimeFrom:= IniFile.ReadDateTime(cSection, sTemplate+'DateTimeFrom', 0); if IsDateTo or IsTimeTo then DateTimeTo:= IniFile.ReadDateTime(cSection, sTemplate+'DateTimeTo', Now); // not older than IsNotOlderThan:= IniFile.ReadBool(cSection, sTemplate+'IsNotOlderThan', False); if IsNotOlderThan then begin FloatNotOlderThan:= IniFile.ReadFloat(cSection, sTemplate+'NotOlderThan', 0); NotOlderThan:= Trunc(FloatNotOlderThan); NotOlderThanUnit:= TTimeUnit(Round(Frac(FloatNotOlderThan)*10) + 1); end; // file size IsFileSizeFrom:= IniFile.ReadBool(cSection, sTemplate+'IsFileSizeFrom', False); IsFileSizeTo:= IniFile.ReadBool(cSection, sTemplate+'IsFileSizeTo', False); if IsFileSizeFrom then FileSizeFrom:= IniFile.ReadInteger(cSection, sTemplate+'FileSizeFrom', 0); if IsFileSizeTo then FileSizeTo:= IniFile.ReadInteger(cSection, sTemplate+'FileSizeTo', MaxInt); // find text NotContainingText:= IniFile.ReadBool(cSection, sTemplate+'IsNoThisText', False); IsFindText:= IniFile.ReadBool(cSection, sTemplate+'FindInFiles', False); if IsFindText then FindText:= IniFile.ReadString(cSection, sTemplate+'FindData', ''); // replace text IsReplaceText:= IniFile.ReadBool(cSection, sTemplate+'ReplaceInFiles', False); if IsReplaceText then ReplaceText:= IniFile.ReadString(cSection, sTemplate+'ReplaceData', ''); end; SearchTemplate.MakeFileChecks; Add(SearchTemplate); end; end; procedure TSearchTemplateList.LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); var Index: Integer; SearchTemplate: TSearchTemplate; FloatNotOlderThan: Double; Node: TXmlNode; begin Clear; ANode := ANode.FindNode(cSection); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Template') = 0 then begin SearchTemplate:= TSearchTemplate.Create; with SearchTemplate.FSearchRecord do begin SearchTemplate.TemplateName:= AConfig.GetValue(ANode, 'Name', ''); StartPath:= AConfig.GetValue(ANode, 'StartPath', ''); ExcludeDirectories:= AConfig.GetValue(ANode, 'ExcludeDirectories', ''); FilesMasks:= AConfig.GetValue(ANode, 'FilesMasks', '*'); ExcludeFiles:= AConfig.GetValue(ANode, 'ExcludeFiles', ''); SearchDepth:= AConfig.GetValue(ANode, 'SearchDepth', -1); IsPartialNameSearch:= AConfig.GetValue(ANode, 'IsPartialNameSearch', False); RegExp:= AConfig.GetValue(ANode, 'RegExp', False); FollowSymLinks:= AConfig.GetValue(ANode, 'FollowSymLinks', False); FindInArchives:= AConfig.GetValue(ANode, 'FindInArchives', False); AttributesPattern:= AConfig.GetValue(ANode, 'AttributesPattern', ''); // date/time IsDateFrom:= AConfig.GetValue(ANode, 'IsDateFrom', False); IsDateTo:= AConfig.GetValue(ANode, 'IsDateTo', False); IsTimeFrom:= AConfig.GetValue(ANode, 'IsTimeFrom', False); IsTimeTo:= AConfig.GetValue(ANode, 'IsTimeTo', False); if IsDateFrom or IsTimeFrom then DateTimeFrom:= AConfig.GetValue(ANode, 'DateTimeFrom', TDateTime(0)); if IsDateTo or IsTimeTo then DateTimeTo:= AConfig.GetValue(ANode, 'DateTimeTo', Now); // not older than IsNotOlderThan:= AConfig.GetValue(ANode, 'IsNotOlderThan', False); if IsNotOlderThan then begin // Workaround because old value was floating point. FloatNotOlderThan:= AConfig.GetValue(ANode, 'NotOlderThan', Double(0)); NotOlderThan:= Trunc(FloatNotOlderThan); NotOlderThanUnit:= TTimeUnit(AConfig.GetValue(ANode, 'NotOlderThanUnit', 0)); end; // file size IsFileSizeFrom:= AConfig.GetValue(ANode, 'IsFileSizeFrom', False); IsFileSizeTo:= AConfig.GetValue(ANode, 'IsFileSizeTo', False); if IsFileSizeFrom then FileSizeFrom:= AConfig.GetValue(ANode, 'FileSizeFrom', Int64(0)); if IsFileSizeTo then FileSizeTo:= AConfig.GetValue(ANode, 'FileSizeTo', High(Int64)); FileSizeUnit:= TFileSizeUnit(AConfig.GetValue(ANode, 'FileSizeUnit', 0)); // find text IsFindText:= AConfig.GetValue(ANode, 'IsFindText', False); if IsFindText then FindText:= AConfig.GetValue(ANode, 'FindText', ''); // replace text IsReplaceText:= AConfig.GetValue(ANode, 'IsReplaceText', False); if IsReplaceText then ReplaceText:= AConfig.GetValue(ANode, 'ReplaceText', ''); CaseSensitive:= AConfig.GetValue(ANode, 'CaseSensitive', False); NotContainingText:= AConfig.GetValue(ANode, 'NotContainingText', False); TextRegExp:= AConfig.GetValue(ANode, 'TextRegExp', False); TextEncoding:= AConfig.GetValue(ANode, 'TextEncoding', ''); // plugins SearchPlugin:= AConfig.GetValue(ANode, 'SearchPlugin', ''); Node := AConfig.FindNode(ANode, 'ContentPlugins', True); ContentPlugin:= AConfig.GetAttr(Node, 'Enabled', False); if ContentPlugin then begin ContentPluginCombine:= AConfig.GetAttr(Node, 'Combine', True); Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Plugin') = 0 then begin Index:= Length(ContentPlugins); SetLength(ContentPlugins, Index + 1); ContentPlugins[Index].Plugin:= AConfig.GetValue(Node, 'Name', EmptyStr); ContentPlugins[Index].Field:= AConfig.GetValue(Node, 'Field', EmptyStr); ContentPlugins[Index].FieldType:= AConfig.GetValue(Node, 'FieldType', ft_string); ContentPlugins[Index].Compare:= TPluginOperator(AConfig.GetValue(Node, 'Compare', 0)); ContentPlugins[Index].Value:= StrToVar(AConfig.GetValue(Node, 'Value', EmptyStr), ContentPlugins[Index].FieldType); end; Node := Node.NextSibling; end; end; end; SearchTemplate.MakeFileChecks; Add(SearchTemplate); end; ANode := ANode.NextSibling; end; end; end; procedure TSearchTemplateList.SaveToIni(IniFile: TIniFileEx); var I: Integer; sTemplate: String; FloatNotOlderThan: Double; begin IniFile.EraseSection(cSection); IniFile.WriteInteger(cSection, 'TemplateCount', Count); for I:= 0 to Count - 1 do with Templates[I].SearchRecord do begin sTemplate:= 'Template' + IntToStr(I+1); IniFile.WriteString(cSection, sTemplate+'Name', Templates[I].TemplateName); IniFile.WriteString(cSection, sTemplate+'StartPath', StartPath); IniFile.WriteString(cSection, sTemplate+'FileMask', FilesMasks); //IniFile.WriteInteger(cSection, sTemplate+'Attributes', Attributes); //IniFile.WriteString(cSection, sTemplate+'AttribStr', AttributesPattern); // date/time IniFile.WriteBool(cSection, sTemplate+'CaseSens', CaseSensitive); IniFile.WriteBool(cSection, sTemplate+'IsDateFrom', IsDateFrom); IniFile.WriteBool(cSection, sTemplate+'IsDateTo', IsDateTo); IniFile.WriteBool(cSection, sTemplate+'IsTimeFrom', IsTimeFrom); IniFile.WriteBool(cSection, sTemplate+'IsTimeTo', IsTimeTo); if IsDateFrom or IsTimeFrom then IniFile.WriteDateTime(cSection, sTemplate+'DateTimeFrom', DateTimeFrom); if IsDateTo or IsTimeTo then IniFile.WriteDateTime(cSection, sTemplate+'DateTimeTo', DateTimeTo); // not older than IniFile.WriteBool(cSection, sTemplate+'IsNotOlderThan', IsNotOlderThan); if IsNotOlderThan then begin FloatNotOlderThan := Double(NotOlderThan) + Double(Integer(NotOlderThanUnit) - 1) / 10; IniFile.WriteFloat(cSection, sTemplate+'NotOlderThan', FloatNotOlderThan); end; // file size IniFile.WriteBool(cSection, sTemplate+'IsFileSizeFrom', IsFileSizeFrom); IniFile.WriteBool(cSection, sTemplate+'IsFileSizeTo', IsFileSizeTo); if IsFileSizeFrom then IniFile.WriteInteger(cSection, sTemplate+'FileSizeFrom', FileSizeFrom); if IsFileSizeTo then IniFile.WriteInteger(cSection, sTemplate+'FileSizeTo', FileSizeTo); // find text IniFile.WriteBool(cSection, sTemplate+'IsNoThisText', NotContainingText); IniFile.WriteBool(cSection, sTemplate+'FindInFiles', IsFindText); if IsFindText then IniFile.WriteString(cSection, sTemplate+'FindData', FindText); // replace text IniFile.WriteBool(cSection, sTemplate+'ReplaceInFiles', IsReplaceText); if IsReplaceText then IniFile.WriteString(cSection, sTemplate+'ReplaceData', ReplaceText); end; end; procedure TSearchTemplateList.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); var I, J: Integer; Node, SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, cSection, True); AConfig.ClearNode(ANode); for I:= 0 to Count - 1 do with Templates[I].SearchRecord do begin SubNode := AConfig.AddNode(ANode, 'Template'); AConfig.AddValue(SubNode, 'Name', Templates[I].TemplateName); AConfig.AddValue(SubNode, 'StartPath', StartPath); AConfig.AddValue(SubNode, 'ExcludeDirectories', ExcludeDirectories); AConfig.AddValue(SubNode, 'FilesMasks', FilesMasks); AConfig.AddValue(SubNode, 'ExcludeFiles', ExcludeFiles); AConfig.AddValue(SubNode, 'SearchDepth', SearchDepth); AConfig.AddValue(SubNode, 'IsPartialNameSearch', IsPartialNameSearch); AConfig.AddValue(SubNode, 'RegExp', RegExp); AConfig.AddValue(SubNode, 'FollowSymLinks', FollowSymLinks); AConfig.AddValue(SubNode, 'FindInArchives', FindInArchives); AConfig.AddValue(SubNode, 'AttributesPattern', AttributesPattern); // date/time AConfig.AddValue(SubNode, 'IsDateFrom', IsDateFrom); AConfig.AddValue(SubNode, 'IsDateTo', IsDateTo); AConfig.AddValue(SubNode, 'IsTimeFrom', IsTimeFrom); AConfig.AddValue(SubNode, 'IsTimeTo', IsTimeTo); if IsDateFrom or IsTimeFrom then AConfig.AddValue(SubNode, 'DateTimeFrom', DateTimeFrom); if IsDateTo or IsTimeTo then AConfig.AddValue(SubNode, 'DateTimeTo', DateTimeTo); // not older than AConfig.AddValue(SubNode, 'IsNotOlderThan', IsNotOlderThan); if IsNotOlderThan then begin AConfig.AddValue(SubNode, 'NotOlderThan', NotOlderThan); AConfig.AddValue(SubNode, 'NotOlderThanUnit', Integer(NotOlderThanUnit)); end; // file size AConfig.AddValue(SubNode, 'IsFileSizeFrom', IsFileSizeFrom); AConfig.AddValue(SubNode, 'IsFileSizeTo', IsFileSizeTo); if IsFileSizeFrom then AConfig.AddValue(SubNode, 'FileSizeFrom', FileSizeFrom); if IsFileSizeTo then AConfig.AddValue(SubNode, 'FileSizeTo', FileSizeTo); AConfig.AddValue(SubNode, 'FileSizeUnit', Integer(FileSizeUnit)); // find text AConfig.AddValue(SubNode, 'IsFindText', IsFindText); if IsFindText then AConfig.AddValue(SubNode, 'FindText', FindText); // replace text AConfig.AddValue(SubNode, 'IsReplaceText', IsReplaceText); if IsReplaceText then AConfig.AddValue(SubNode, 'ReplaceText', ReplaceText); AConfig.AddValue(SubNode, 'CaseSensitive', CaseSensitive); AConfig.AddValue(SubNode, 'NotContainingText', NotContainingText); AConfig.AddValue(SubNode, 'TextRegExp', TextRegExp); AConfig.AddValue(SubNode, 'TextEncoding', TextEncoding); // plugins AConfig.AddValue(SubNode, 'SearchPlugin', SearchPlugin); Node := AConfig.FindNode(SubNode, 'ContentPlugins', True); AConfig.SetAttr(Node, 'Enabled', ContentPlugin); if ContentPlugin then begin AConfig.SetAttr(Node, 'Combine', ContentPluginCombine); for J:= Low(ContentPlugins) to High(ContentPlugins) do begin SubNode := AConfig.AddNode(Node, 'Plugin'); AConfig.SetValue(SubNode, 'Name', ContentPlugins[J].Plugin); AConfig.SetValue(SubNode, 'Field', ContentPlugins[J].Field); AConfig.SetValue(SubNode, 'FieldType', ContentPlugins[J].FieldType); AConfig.SetValue(SubNode, 'Compare', Integer(ContentPlugins[J].Compare)); AConfig.SetValue(SubNode, 'Value', VarToStr(ContentPlugins[J].Value)); end; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fconnectionmanager.lrt����������������������������������������������������������0000644�0001750�0000144�00000000517�12023046500�017662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMCONNECTIONMANAGER.CAPTION=Connection manager TFRMCONNECTIONMANAGER.GBCONNECTTO.CAPTION=Connect to: TFRMCONNECTIONMANAGER.BTNCONNECT.CAPTION=C&onnect TFRMCONNECTIONMANAGER.BTNADD.CAPTION=A&dd TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION=&Edit TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION=&Delete TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION=&Cancel ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fviewer.lrt���������������������������������������������������������������������0000644�0001750�0000144�00000007271�12646517645�015525� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMVIEWER.CAPTION=Viewer TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION=Highlight TFRMVIEWER.LBLHIGHTLIGHT.CAPTION=0x0 TFRMVIEWER.BTNCUTTUIMAGE.HINT=Crop TFRMVIEWER.BTNREDEYE.HINT=Red Eyes TFRMVIEWER.GBOXPAINT.CAPTION=Paint TFRMVIEWER.BTNUNDO.HINT=Undo TFRMVIEWER.COMBOBOXPAINT.TEXT=Pen TFRMVIEWER.COMBOBOXWIDTH.TEXT=1 TFRMVIEWER.BTNHIGHTLIGHT.HINT=Highlight TFRMVIEWER.GBOXVIEW.CAPTION=View TFRMVIEWER.BTN270.HINT=- 90 TFRMVIEWER.BTN90.HINT=+ 90 TFRMVIEWER.BTNMIRROR.HINT=Mirror TFRMVIEWER.BTNZOOMIN.HINT=Zoom In TFRMVIEWER.BTNZOOMOUT.HINT=Zoom Out TFRMVIEWER.BTNGIFMOVE.CAPTION=|| TFRMVIEWER.BTNGIFTOBMP.CAPTION=S TFRMVIEWER.BTNNEXTGIFFRAME.CAPTION=||> TFRMVIEWER.BTNPREVGIFFRAME.CAPTION=<|| TFRMVIEWER.BTNRESIZE.HINT=Resize TFRMVIEWER.BTNPAINT.HINT=Paint TFRMVIEWER.BTNFULLSCREEN.HINT=Full Screen TFRMVIEWER.GBOXSLIDESHOW.CAPTION=Slide Show TFRMVIEWER.CBSLIDESHOW.CAPTION=Slide Show TFRMVIEWER.BTNCOPYFILE.HINT=Copy TFRMVIEWER.BTNMOVEFILE.HINT=Move TFRMVIEWER.BTNDELETEFILE.HINT=Delete TFRMVIEWER.BTNCOPYFILE1.HINT=Copy TFRMVIEWER.BTNMOVEFILE1.HINT=Move TFRMVIEWER.BTNDELETEFILE1.HINT=Delete TFRMVIEWER.MIFILE.CAPTION=&File TFRMVIEWER.MISAVE.CAPTION=Save TFRMVIEWER.MISAVEAS.CAPTION=Save As... TFRMVIEWER.MIPRINT.CAPTION=Print... TFRMVIEWER.MISEPARATOR.CAPTION=- TFRMVIEWER.MIEXIT.CAPTION=E&xit TFRMVIEWER.MIEDIT.CAPTION=&Edit TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION=Copy To Clipboard TFRMVIEWER.MISELECTALL.CAPTION=Select All TFRMVIEWER.MIDIV3.CAPTION=- TFRMVIEWER.MISEARCH.CAPTION=Search TFRMVIEWER.MISEARCHNEXT.CAPTION=Search next TFRMVIEWER.MISEARCHPREV.CAPTION=Search prev TFRMVIEWER.MIVIEW.CAPTION=&View TFRMVIEWER.MIPREVIEW.CAPTION=Preview TFRMVIEWER.MIDIV4.CAPTION=- TFRMVIEWER.MITEXT.CAPTION=Show as &Text TFRMVIEWER.MIBIN.CAPTION=Show as &Bin TFRMVIEWER.MIHEX.CAPTION=Show as &Hex TFRMVIEWER.MIWRAPTEXT.CAPTION=Show as &Wrap text TFRMVIEWER.MILOOKBOOK.CAPTION=Show as B&ook TFRMVIEWER.MIDIV2.CAPTION=- TFRMVIEWER.MIGRAPHICS.CAPTION=Graphics TFRMVIEWER.MIDIV1.CAPTION=- TFRMVIEWER.MIPLUGINS.CAPTION=Plugins TFRMVIEWER.MIENCODING.CAPTION=En&coding TFRMVIEWER.MIIMAGE.CAPTION=&Image TFRMVIEWER.MISTRETCH.CAPTION=Stretch TFRMVIEWER.MISTRETCHONLYLARGE.CAPTION=Stretch only large TFRMVIEWER.MICENTER.CAPTION=Center TFRMVIEWER.MIROTATE.CAPTION=Rotate TFRMVIEWER.MI90.CAPTION=+ 90 TFRMVIEWER.MI180.CAPTION=+ 180 TFRMVIEWER.MI270.CAPTION=- 90 TFRMVIEWER.MIMIRROR.CAPTION=Mirror TFRMVIEWER.MIZOOMIN.CAPTION=Zoom In TFRMVIEWER.MIZOOMOUT.CAPTION=Zoom Out TFRMVIEWER.MIFULLSCREEN.CAPTION=Full Screen TFRMVIEWER.MISCREENSHOT.CAPTION=Screenshot TFRMVIEWER.MIABOUT.CAPTION=About TFRMVIEWER.PMICOPY.CAPTION=Copy To Clipboard TFRMVIEWER.MIDIV5.CAPTION=- TFRMVIEWER.PMISELECTALL.CAPTION=Select All TFRMVIEWER.ACTABOUT.CAPTION=About Viewer... TFRMVIEWER.ACTABOUT.HINT=Displays the About message TFRMVIEWER.ACTRELOAD.CAPTION=Reload TFRMVIEWER.ACTRELOAD.HINT=Reload current file TFRMVIEWER.ACTLOADNEXTFILE.CAPTION=&Next TFRMVIEWER.ACTLOADNEXTFILE.HINT=Load Next File TFRMVIEWER.ACTLOADPREVFILE.CAPTION=&Previous TFRMVIEWER.ACTLOADPREVFILE.HINT=Load Previous File TFRMVIEWER.ACTMOVEFILE.CAPTION=Move File TFRMVIEWER.ACTMOVEFILE.HINT=Move File TFRMVIEWER.ACTCOPYFILE.CAPTION=Copy File TFRMVIEWER.ACTCOPYFILE.HINT=Copy File TFRMVIEWER.ACTDELETEFILE.CAPTION=Delete File TFRMVIEWER.ACTDELETEFILE.HINT=Delete File TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION=Stretch TFRMVIEWER.ACTSTRETCHIMAGE.HINT=Stretch Image TFRMVIEWER.ACTSAVEAS.CAPTION=Save As... TFRMVIEWER.ACTSAVEAS.HINT=Save File As... TFRMVIEWER.ACTROTATE90.CAPTION=Rotate 90 TFRMVIEWER.ACTROTATE90.HINT=Rotate 90 TFRMVIEWER.ACTROTATE180.CAPTION=Rotate 180 TFRMVIEWER.ACTROTATE180.HINT=Rotate 180 TFRMVIEWER.ACTROTATE270.CAPTION=Rotate 270 TFRMVIEWER.ACTROTATE270.HINT=Rotate 270 TFRMVIEWER.ACTMIRROR.CAPTION=Mirror TFRMVIEWER.ACTMIRROR.HINT=Mirror ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fchecksumverify.lfm�������������������������������������������������������������0000644�0001750�0000144�00000020242�12534575343�017214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmCheckSumVerify: TfrmCheckSumVerify Left = 290 Height = 300 Top = 175 Width = 400 Caption = 'Verify checksum...' ClientHeight = 300 ClientWidth = 400 Constraints.MinHeight = 200 Constraints.MinWidth = 300 OnClose = FormClose Position = poScreenCenter ShowInTaskBar = stAlways LCLVersion = '1.4.0.4' inline seCheckSumVerify: TSynEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 10 Height = 240 Top = 10 Width = 380 BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 BorderSpacing.Bottom = 10 Anchors = [akTop, akLeft, akRight, akBottom] ParentColor = False ParentFont = False TabOrder = 0 Gutter.Visible = False Gutter.Width = 0 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = EcFoldCurrent ShortCut = 41005 end item Command = EcUnFoldCurrent ShortCut = 41003 end item Command = EcToggleMarkupWord ShortCut = 32845 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end item Command = ecColSelUp ShortCut = 40998 end item Command = ecColSelDown ShortCut = 41000 end item Command = ecColSelLeft ShortCut = 40997 end item Command = ecColSelRight ShortCut = 40999 end item Command = ecColSelPageDown ShortCut = 40994 end item Command = ecColSelPageBottom ShortCut = 57378 end item Command = ecColSelPageUp ShortCut = 40993 end item Command = ecColSelPageTop ShortCut = 57377 end item Command = ecColSelLineStart ShortCut = 40996 end item Command = ecColSelLineEnd ShortCut = 40995 end item Command = ecColSelEditorTop ShortCut = 57380 end item Command = ecColSelEditorBottom ShortCut = 57379 end> MouseActions = <> MouseTextActions = <> MouseSelActions = <> VisibleSpecialChars = [vscSpace, vscTabAtLast] ReadOnly = True ScrollBars = ssAutoBoth SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnSpecialLineColors = seCheckSumVerifySpecialLineColors inline SynLeftGutterPartList1: TSynGutterPartList end end object btnClose: TBitBtn AnchorSideLeft.Control = seCheckSumVerify AnchorSideLeft.Side = asrCenter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 150 Height = 30 Top = 260 Width = 100 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 10 Caption = '&Close' Kind = bkClose TabOrder = 1 end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fhackform.lfm�������������������������������������������������������������������0000644�0001750�0000144�00000000252�12045446211�015742� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmHackForm: TfrmHackForm Left = 455 Height = 300 Top = 236 Width = 400 Position = poScreenCenter ShowInTaskBar = stNever LCLVersion = '1.0.1.3' end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmaskinputdlg.pas���������������������������������������������������������������0000644�0001750�0000144�00000007240�12612505011�016655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File mask input dialog Copyright (C) 2010-2014 Koblov Alexander (Alexx2000@mail.ru) 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 fMaskInputDlg; {$mode objfpc}{$H+} interface uses Classes, Forms, Controls, StdCtrls, Buttons; type { TfrmMaskInputDlg } TfrmMaskInputDlg = class(TForm) btnDefineTemplate: TBitBtn; lblPrompt: TLabel; lblSearchTemplate: TLabel; cmbMask: TComboBox; btnOK: TBitBtn; btnCancel: TBitBtn; lbxSearchTemplate: TListBox; procedure btnDefineTemplateClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lbxSearchTemplateClick(Sender: TObject); procedure lbxSearchTemplateDblClick(Sender: TObject); private { private declarations } public { public declarations } end; function ShowMaskInputDlg(const sCaption, sPrompt: String; slValueList: TStringList; var sValue: String): Boolean; implementation {$R *.lfm} uses fFindDlg, uGlobs, uSearchTemplate; function ShowMaskInputDlg(const sCaption, sPrompt: String; slValueList: TStringList; var sValue: String): Boolean; var Index: Integer; begin Result:= False; with TfrmMaskInputDlg.Create(Application) do try Caption:= sCaption; lblPrompt.Caption:= sPrompt; cmbMask.Items.Assign(slValueList); cmbMask.Text:= sValue; if IsMaskSearchTemplate(sValue) then begin Index:= lbxSearchTemplate.Items.IndexOf(PAnsiChar(sValue) + 1); if Index >= 0 then lbxSearchTemplate.ItemIndex:= Index; end; if ShowModal = mrOK then begin if not IsMaskSearchTemplate(cmbMask.Text) then if slValueList.IndexOf(cmbMask.Text) < 0 then slValueList.Add(cmbMask.Text); sValue:= cmbMask.Text; Result:= True; end; finally Free; end; end; { TfrmMaskInputDlg } procedure TfrmMaskInputDlg.lbxSearchTemplateClick(Sender: TObject); begin if lbxSearchTemplate.ItemIndex < 0 then Exit; cmbMask.Text:= cTemplateSign + lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; end; procedure TfrmMaskInputDlg.lbxSearchTemplateDblClick(Sender: TObject); begin if lbxSearchTemplate.ItemIndex < 0 then Exit; cmbMask.Text:= cTemplateSign + lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; Close; ModalResult:= mrOK; end; procedure TfrmMaskInputDlg.FormCreate(Sender: TObject); var I: Integer; begin InitPropStorage(Self); for I:= 0 to gSearchTemplateList.Count - 1 do lbxSearchTemplate.Items.Add(gSearchTemplateList.Templates[I].TemplateName); end; procedure TfrmMaskInputDlg.btnDefineTemplateClick(Sender: TObject); var sTemplateName: String; begin if lbxSearchTemplate.ItemIndex >= 0 then sTemplateName:= lbxSearchTemplate.Items[lbxSearchTemplate.ItemIndex]; if ShowDefineTemplateDlg(sTemplateName) then begin lbxSearchTemplate.ItemIndex:= lbxSearchTemplate.Items.Add(sTemplateName); cmbMask.Text:= cTemplateSign + sTemplateName; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/feditor.lfm���������������������������������������������������������������������0000644�0001750�0000144�00000361271�12650202123�015443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmEditor: TfrmEditor Left = 255 Height = 480 Top = 163 Width = 640 ActiveControl = Editor Caption = 'Editor' ClientHeight = 460 ClientWidth = 640 Icon.Data = { 7E04000000000100010010100000010020006804000016000000280000001000 0000200000000100200000000000000000000000000000000000000000000000 000000000000858A88A3858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88A3000000000000 000000000000858A88FFEEEEEEFFB2B2B2FFB2B2B2FFB2B2B2FFB2B2B2FFB2B2 B2FFB2B2B2FFB2B2B2FFB1B1B1FFB2B2B2FFB2B2B2FF858A88FF000000000000 000000000000858A88FFFFFFFFFFECECECFFEBEBEBFFEAEAEAFFEAEAEAFFE9E9 E9FFEBEBEBFFEAEAEAFFEBEBEBFFECECECFFB2B2B2FF858A88FF000000000000 000000000000858A88FFFFFFFFFFDBDBDBFFCBCBCBFFC4C4C4FF000000FF0259 8FFF636363FF8C8C8CFFCACACAFFDADADAFFB2B2B2FF858A88FF000000020000 000000000000858A88FFFFFFFFFFECECECFFECECECFFE9E9E9FF02598FFF2642 4CFF36576BFF02598FFF9D9D9DFFD6D6D6FFAEAEAEFF858A88FF000000000000 000000000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCBCBCBFF757575FF395B 70FF8AABC2FF5585A3FF02598FFF8F8F8FFF868686FF858A88FF000000010000 000000000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFEBEBEBFF0259 8FFFC4E5EDFF649FC8FF5787A4FF02598FFF717171FF858A88FF000000000000 000100000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCCCCCCFFCCCCCCFFB7B7 B7FF02598FFFC5E6EDFF68A6CEFF5784A0FF02598FFF858A88FF000000000000 000100000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFECECECFFECEC ECFFD3D3D3FF02598FFFC6EAEEFF69AACFFF5683A0FF02598FFF02598F330000 000000000000858A88FFFFFFFFFFDBDBDBFFCCCCCCFFCCCCCCFFCCCCCCFFCCCC CCFFCCCCCCFFB7B7B7FF02598FFFC7EBEFFF6AACD2FF5787A4FF02598FFF0259 8F3300000000858A88FFFFFFFFFFECECECFFECECECFFECECECFFECECECFFECEC ECFFECECECFFECECECFFD3D3D3FF02598FFFC7EBEFFF6AACD2FF5583A1FC0259 8FFF00000000858A88FFEBEBEBFF00A0C4FFBCBCBCFF00A0C4FFB8B8B8FF00A0 C4FFB8B8B8FF00A0C4FFB8B8B8FF00A0C4FF02598FFFC6EAEEFF71ADCFFF0259 8FFF00000000858A88FF00A0C4FF3DB1EBFF00A0C4FF3DB1EBFF00A0C4FF3DB1 EBFF00A0C4FF3DB1EBFF00A0C4FF3DB1EBFF00A0C4FF02598FFF02598FFF0259 8F5C00000000858A886600A0C4FFC6E8F9FF00A0C4FFC6E8F9FF00A0C4FFC6E8 F9FF00A0C4FFC6E8F9FF00A0C4FFC6E8F9FF00A0C4FF00000000000000000000 0000000000000000000000A0C44400A0C4FF00A0C44400A0C4FF00A0C44400A0 C4FF00A0C44400A0C4FF00A0C44400A0C4FF00A0C44400000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000800300008003000080030000800300008003000080030000800300008003 00008003000080010000800000008000000080010000C0070000EAAF0000FFFF 0000 } KeyPreview = True Menu = MainMenu1 OnClose = frmEditorClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnMouseWheelDown = FormMouseWheelDown OnMouseWheelUp = FormMouseWheelUp SessionProperties = 'Height;Width;WindowState;Left;Top' ShowInTaskBar = stAlways LCLVersion = '1.4.4.0' object StatusBar: TStatusBar Left = 0 Height = 23 Top = 437 Width = 640 Panels = < item Width = 50 end item Width = 150 end item Width = 50 end item Width = 50 end> SimplePanel = False end inline Editor: TSynEdit Left = 0 Height = 411 Top = 26 Width = 640 Align = alClient Anchors = [akTop] Font.Color = clBlack Font.Height = 13 Font.Name = 'adobe-courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False PopupMenu = pmContextMenu TabOrder = 0 OnKeyDown = EditorKeyDown OnKeyPress = EditorKeyPress OnMouseWheelDown = EditorMouseWheelDown OnMouseWheelUp = EditorMouseWheelUp BookMarkOptions.Xoffset = 48 Gutter.Width = 57 Gutter.MouseActions = < item ClickCount = ccAny ClickDir = cdDown Command = emcOnMainGutterClick end item Button = mbRight Command = emcContextMenu end> RightGutter.Width = 0 RightGutter.MouseActions = < item ClickCount = ccAny ClickDir = cdDown Command = emcOnMainGutterClick end item Button = mbRight Command = emcContextMenu end> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end> MouseActions = < item ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartSelections MoveCaret = True end item Shift = [ssShift] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartSelections MoveCaret = True Option = 1 end item Shift = [ssAlt] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartColumnSelections MoveCaret = True end item Shift = [ssShift, ssAlt] ShiftMask = [ssShift, ssAlt] ClickDir = cdDown Command = emcStartColumnSelections MoveCaret = True Option = 1 end item Button = mbRight Command = emcContextMenu end item ClickCount = ccDouble ClickDir = cdDown Command = emcSelectWord MoveCaret = True end item ClickCount = ccTriple ClickDir = cdDown Command = emcSelectLine MoveCaret = True end item ClickCount = ccQuad ClickDir = cdDown Command = emcSelectPara MoveCaret = True end item Button = mbMiddle ClickDir = cdDown Command = emcPasteSelection MoveCaret = True end item Shift = [ssCtrl] ShiftMask = [ssShift, ssAlt, ssCtrl] Command = emcMouseLink end> MouseTextActions = <> MouseSelActions = < item ClickDir = cdDown Command = emcStartDragMove end> VisibleSpecialChars = [vscSpace, vscTabAtLast] SelectedColor.BackPriority = 50 SelectedColor.ForePriority = 50 SelectedColor.FramePriority = 50 SelectedColor.BoldPriority = 50 SelectedColor.ItalicPriority = 50 SelectedColor.UnderlinePriority = 50 SelectedColor.StrikeOutPriority = 50 BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone OnChange = EditorChange OnReplaceText = EditorReplaceText OnStatusChange = EditorStatusChange inline SynLeftGutterPartList1: TSynGutterPartList object SynGutterMarks1: TSynGutterMarks Width = 24 MouseActions = <> end object SynGutterLineNumber1: TSynGutterLineNumber Width = 17 MouseActions = <> MarkupInfo.Background = clBtnFace MarkupInfo.Foreground = clNone DigitCount = 2 ShowOnlyLineNumbersMultiplesOf = 1 ZeroStart = False LeadingZeros = False end object SynGutterChanges1: TSynGutterChanges Width = 4 MouseActions = <> ModifiedColor = 59900 SavedColor = clGreen end object SynGutterSeparator1: TSynGutterSeparator Width = 2 MouseActions = <> MarkupInfo.Background = clWhite MarkupInfo.Foreground = clGray end object SynGutterCodeFolding1: TSynGutterCodeFolding MouseActions = < item Button = mbRight Command = emcCodeFoldContextMenu end item ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps end item Shift = [ssShift] ShiftMask = [ssShift] Button = mbMiddle ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps Option = 1 end item ClickCount = ccAny ClickDir = cdDown Command = emcNone end> MarkupInfo.Background = clNone MarkupInfo.Foreground = clGray MouseActionsExpanded = < item ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldCollaps end> MouseActionsCollapsed = < item Shift = [ssCtrl] ShiftMask = [ssCtrl] ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldExpand end item ShiftMask = [ssCtrl] ClickCount = ccAny ClickDir = cdDown Command = emcCodeFoldExpand Option = 1 end> end end end object tbToolBar: TToolBar Left = 0 Height = 26 Top = 0 Width = 640 Images = ilImageList ParentShowHint = False ShowHint = True TabOrder = 1 object tbNew: TToolButton Left = 1 Top = 2 Action = actFileNew end object tbOpen: TToolButton Left = 24 Top = 2 Action = actFileOpen end object tbSave: TToolButton Left = 47 Top = 2 Action = actFileSave end object tbSeparator1: TToolButton Left = 70 Height = 22 Top = 2 Width = 10 Style = tbsSeparator end object tbCut: TToolButton Left = 80 Top = 2 Action = actEditCut end object tbCopy: TToolButton Left = 103 Top = 2 Action = actEditCopy end object tbPaste: TToolButton Left = 126 Top = 2 Action = actEditPaste end object tbSeparator2: TToolButton Left = 149 Height = 22 Top = 2 Width = 10 Style = tbsSeparator end object tbUndo: TToolButton Left = 159 Top = 2 Action = actEditUndo end object tbRedo: TToolButton Left = 182 Top = 2 Action = actEditRedo end object tbSeparator3: TToolButton Left = 205 Height = 22 Top = 2 Width = 10 Style = tbsSeparator end object tbConfig: TToolButton Left = 215 Top = 2 Action = actConfHigh end object tbHelp: TToolButton Left = 238 Top = 2 Action = actAbout end end object MainMenu1: TMainMenu Images = ilImageList left = 48 top = 32 object miFile: TMenuItem Caption = '&File' object New1: TMenuItem Action = actFileNew Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000009E9E9EFF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF9E9E9EFF0000000000000000818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF2F2F2FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF1F1F1FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1 F1FFF1F1F1FFF1F1F1FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFF0F0F0FFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFEFEFEFFFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFE2EE EEFFB1F0F3FF92F0F5FF9AF0F5FF779696FF0000000000000000818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFE0EEEFFF96EF F4FF63F1F8FF46F3FBFF45F3FBFF5DEFF7FF0000000000000000818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFFEDEDEDFFB1EEF1FF67F1 F8FF40F4FDFF71F7FDFF72F7FDFF43F3FCFF24ECF6FF00000000818181FFFFFF FFFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFF9BEFF3FF4EF2 FAFF6AF6FDFFBBFAFEFFBFFBFEFF6EF6FDFF22F0FAFF00000000818181FFFFFF FFFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFF9CEEF2FF4EF2 FAFF67F6FDFFB5FAFEFFB8FAFEFF6BF5FDFF22EFFAFF00000000818181FFFFFF FFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFB4EDF0FF6AF0 F7FF3AF4FCFF68F6FDFF6AF6FDFF3CF2FBFF1EEFF9FF00000000818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BEE F2FF69F0F7FF4DF2FAFF46EFF7FF28EBF4FF00000000000000009E9E9EFF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF7C8C 8CFF729F9FFF6AAEAFFF36E4EDFF000000000000000000000000 } OnClick = actFileNewExecute end object Open1: TMenuItem Action = actFileOpen Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000089603EFFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FF86603FFF00000000535755FFA9AB A9FFD7AF89FFCD9B6BFFCD9A6BFFCD9A6AFFCD9969FFCD9868FFCC9866FFCD98 65FFCC9765FFCC9664FFCC9563FFDEBA9AFF967153FF795D45FF535755FFBFC0 C0FF9B7658FFDDBB9BFFCE9E70FFCF9D70FFCE9D6EFFCE9C6EFFCE9C6DFFCE9B 6CFFCD9B6BFFCE9A6AFFCD9969FFCD9968FFDBB694FFA46534FF535755FFC9C9 C9FFA46534FFE3C7ADFFD7B08BFFD8B18CFFD7B08BFFD7AF8AFFD6AE88FFD5AC 85FFD4A981FFD2A67CFFD0A276FFCF9F72FFDDBB9CFFA46534FF535755FFBFC0 C0FFA46534FFE3C7AEFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B1 8CFFD8B18CFFD8B18CFFD8B18CFFD6AE89FFE0C2A6FFA46534FF535755FFC9C9 C9FFA46534FFEBD8C6FFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2 BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFEBD8C6FFA46534FF535755FFBFC0 C0FF9A7A61FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FF9D6B43FF575B59FFC9C9 C9FFA6A6A6FFA6A6A6FFA4A9A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACC CCFFD7D8D8FFF4F5F5FFF4F5F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFBFC0 C0FF959796FF959796FFA4A9A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFF4F5F5FFF4F5F5FFF4F5F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFC9C9 C9FFA6A6A6FFA6A6A6FFA4A9A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACC CCFFCACCCCFFCACCCCFFF4F5F5FFFFFFFFFFA4A9A7FF000000005F6361FFBFC0 C0FF959796FF959796FFA4A9A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFF4F5F5FFF4F5F5FFF4F5F5FFFFFFFFFFA4A9A7FF00000000656967FFC9C9 C9FFA6A6A6FFA6A6A6FFA4A9A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA4A9A7FF00000000686C6AFFBFC0 C0FF959796FF959796FF989C9AFFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9 A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FF929996FF000000006B6F6DFFCECE CEFFCECECEFFCECECEFFCECECEFFCECECEFFCECECEFFC5C6C6FF616563FF0000 0000000000000000000000000000000000000000000000000000000000006B6F 6DFF6B6F6DFF6B6F6DFF6B6F6DFF6B6F6DFF656967FF656967FF000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actFileOpenExecute end object Save1: TMenuItem Action = actFileSave Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000006B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFFDDDD DDFFDCDCDCFFDCDCDCFFDCDCDCFFD5D5D5FFD5D5D5FFCFCFCFFFCFCFCFFFCFCF CFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCACACAFF6B706EFF6B706EFFCDCD CDFFC3C3C3FFA9AAAAFFB4B4B4FFC2C2C2FFC4C4C4FFC8C8C8FFCBCBCBFFA8A7 A8FFD1D1D1FFA7A7A8FFD1D1D1FFB6B6B7FFCACACAFF6B706EFF6B706EFFCECE CEFFC5C5C5FF9F9F9FFFAFAFAFFFBCBCBCFFC4C4C4FFC8C8C8FFD0D0D0FFA9A9 A9FFD2D2D2FFA9A9A9FFD2D2D2FFB9B9B9FFCACACAFF6B706EFF6B706EFFCECE CEFFC9C9C9FFC9C9C9FFC9C9C9FFC9C9C9FFC5C5C5FFC9C9C9FFC9C9C9FFC5C5 C5FFC5C5C5FFC5C5C5FFC5C5C5FFC5C5C5FFD6D6D6FF6B706EFF6B706EFFFEFE FEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4 F4FFF4F4F4FFEBEBEBFFEBEBEBFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFF7F7 F7FFE3E3E3FFEEEEEEFFFAFAFAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE 9AFFFAFAFAFFFCFCFCFFEEEEEEFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFF9F9 F9FFEEEEEEFFFAFAFAFFE4E4E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B 3BFFACA692FFE4E4E4FFFAFAFAFFEEEEEEFFF1F1F1FF6B706EFF6B706EFFF9F9 F9FFFAFAFAFFE4E4E4FFBFCBC5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8 ABFF8B6738FFACA692FFE4E4E4FFF4F4F4FFF1F1F1FF6B706EFF6B706EFFFAFA FAFFEAE9E9FFC4CFCAFF8B6738FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F 73FFD8BB96FF8B6738FFAFA995FFEAE9EAFFF2F2F2FF6B706EFF6B706EFFFCFB FCFFECECEBFF8B6738FF8B6738FF8B6738FF8B6738FFCAA779FFBD9258FF8B67 38FF8B6738FF8B6738FF8B6738FFECECECFFF3F3F3FF6B706EFF6B7572FFFDFD FDFFEEEEEEFFEDEDEDFFDEE2DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B 3DFFC3BCACFFEEEDEDFFEEEEEDFFEDEEEDFFF3F4F3FF6B706EFF6E716BFFDDE6 E2FFFFFFFFFFD6E1DDFFDDD6C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D 54FFE5DFD5FFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FF6B706EFF887F6BFF7371 66FF757062FF856D4AFF9A7441FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A 4EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF000000000000 000000000000E6CEB1FFEFDFD0FFECDBC5FFDFC29BFFA08B68FF886E43FF0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000008B6738FF8B6738FF8B6738FF8A693DFF80714AFF7A7858FF0000 0000000000000000000000000000000000000000000000000000 } OnClick = actFileSaveExecute end object SaveAs1: TMenuItem Action = actFileSaveAs Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000066DBEAFF11A6C2FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000043C4DBFF43C5D8FF0000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFF5DDAE9FF23A6C0FF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000002ACC8FF88E7F2FF11A2C2FF00000000000000000000 0000000000000000000000A0C4FF76EDFBFF00A0C4FF00000000000000000000 00000000000000A0C4FF6DE6F5FF76E2EFFF19A3C1FF00000000000000000000 00000000000000A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0FF00000000000000000000 000000A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFFF000000000000000000A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5FF15A0BCFF0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDFF00000000000000000000000000A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FF13A3C1FF000000000000000000000000000000000000 000000A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7FF14A1BCFF14A3C1FF00000000000000000000000000000000000000000000 00000000000000A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159F BBFF1BA1BBFF0000000000000000000000000000000000000000000000000000 0000000000000000000000A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } ImageIndex = 8 OnClick = actFileSaveAsExecute end object miDiv: TMenuItem Caption = '-' end object miConfHigh: TMenuItem Action = actConfHigh Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000009595 95FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF959595FF00000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0 F0FFE0E0E0FFADADADFFBABABAFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFC6C6C6FFC7C7C7FFC7C7C7FFC8C8C8FFC8C8C8FFB5B5 B5FF929292FF9E9E9EFFABABABFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFD4D4D4FF7777 77FF858585FF909090FF9D9D9DFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFB0B0B0FF585858FF585858FF585858FF585858FF5959 59FF626262FF6C6C6CFFDCDCDCFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFF696969FF696969FF696969FF6A6A6AFF6A6A6AFF6A6A 6AFF6A6A6AFFD6D6D6FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF585858FF585858FFB0B0B0FF585858FF6A6A6AFF6A6A 6AFFCCD2D2FFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF696969FFD2D2D2FFECECECFFD2D2D2FF696969FF6669 69FFECECECFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFFC5C5C5FFC6C6C6FFB0B0B0FF585858FF585858FF5858 58FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFEBEBEBFFEBEBEBFF696969FF696969FF696969FFD2D2 D2FFEDEDEDFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFC4C4C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6C6FFC6C6 C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFEDEDEDFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000009999 99FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF0000000000000000 } OnClick = actConfHighExecute end object N1: TMenuItem Caption = '-' end object Exit1: TMenuItem Action = actFileExit Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000595D5BFF686B 69FF545856FF555957FF565A58FF565A58FF565A58FF565A58FF575B59FF575B 59FF575B59FF575B59FF575B59FF565A58FF5D615FFF00000000535755FFC3C3 C3FF979898FF909392FFBBC1BEFFC1C6C3FFC3C8C6FFC3C9C6FFC4C9C6FFC4C9 C6FFC4C9C6FFC4C9C6FFC4C9C6FFC1C7C5FF5F6361FF00000000535755FFBEBE BEFFABABABFFAFAFAFFF858685FF8B8F8DFFC5C9C7FFD2D6D4FFD5D9D7FFD6DA D8FFD7DBD9FF8688C5FF4345B6FFD4D8D6FF717573FF00000000535755FFBEBE BEFFAAAAAAFFA9A9A9FFA1A1A1FF999999FF6F6F6FFF888A89FFD0D2D0FFE3E5 E4FF6B6CC4FF1111ACFF0C0CA9FFE4E6E5FF868887FF00000000535755FFBEBE BEFFAAAAAAFFA5A5A5FF9D9D9DFF959595FF8F8F8FFF828282FF5E5F64FF4849 BBFF1B1BB5FF3535D3FF0404A6FF1E1EB0FF1314A5FF0B0BAAFF535755FFBEBE BEFFAAAAAAFFA3A3A3FF9A9A9AFF929292FF898989FF797986FF2425ACFF2424 BCFF3838D6FF4141D9FF3A3AD4FF3C3CD2FF3D3DD2FF0000A5FF535755FFBEBE BEFFA9A9A9FFA1A1A1FF989898FF8F8F8FFF73738BFF0E0EA2FF2D2DC4FF3636 D7FF0808CEFF0C0CCEFF0C0CCEFF0E0ECFFF5151DCFF0101A5FF535755FFBEBE BEFFA7A7A7FF9E9E9EFF969696FF8D8D8DFF1616A1FF3636C5FF5656DDFF2D2D D5FF2525D3FF1A1AD1FF1010CFFF1B1BD2FF6E6EE2FF0404A6FF535755FFBEBE BEFFA4A4A4FF9C9C9CFF939393FF8B8B8BFF64648AFF1111A6FF5E5ED5FF6969 E1FF4848DBFF4A4ADBFF4C4CDBFF4D4DDBFF8D8DE8FF0303A6FF535755FFBEBE BEFFA2A2A2FF9A9A9AFF919191FF888888FF808080FF6A6A7EFF2121B0FF6565 D2FF8888E7FF8E8EE8FF9595EAFF9696EAFF9A9AEBFF0101A5FF535755FFBDBD BDFFA0A0A0FF979797FF8F8F8FFF868686FF7E7E7EFF767676FFE1E3ECFF3C3C B9FF6161CDFFA7A7ECFF3030BCFF2828B7FF2122B1FF0101A5FF535755FFBBBB BBFF9D9D9DFF949494FF898989FF7F7F7FFF767676FF707070FFEEF0F0FFEFF1 F3FF6565C7FF5151C4FF1515ACFFD3D4EDFF8889A2FF00000000535755FFBABA BAFF959595FF898989FF7E7E7EFF757575FF6E6E6EFF686868FFEEEFEFFFF2F4 F4FFF9F9F9FF9292D7FF3E3EBCFFFAFAFAFFA1A3A2FF00000000535755FFADAD ADFF8C8C8CFF7F7F7FFF757575FF6C6C6CFF646464FF606060FFEDEFEFFFF2F3 F3FFF7F8F8FFFAFBFBFFFBFBFBFFF9F9F9FF989B9AFF00000000535755FFA6A6 A6FF858585FF797979FF6E6E6EFF656565FF5D5D5DFF595959FFEDEFEFFFEFF1 F1FFF3F4F4FFF5F6F6FFF5F6F6FFECEEEDFF7D817FFF00000000595D5BFF5357 55FF535755FF535755FF535755FF535755FF535755FF535755FF545856FF5A5E 5CFF626564FF666968FF676A68FF636765FF6B6E6DFF00000000 } OnClick = actFileExitExecute end end object miEdit: TMenuItem Caption = '&Edit' object miUndo: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000066DBEAFF11A6C2FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000043C4DBFF43C5D8FF0000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFF5DDAE9FF23A6C0FF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000002ACC8FF88E7F2FF11A2C2FF00000000000000000000 0000000000000000000000A0C4FF76EDFBFF00A0C4FF00000000000000000000 00000000000000A0C4FF6DE6F5FF76E2EFFF19A3C1FF00000000000000000000 00000000000000A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0FF00000000000000000000 000000A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFFF000000000000000000A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5FF15A0BCFF0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDFF00000000000000000000000000A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FF13A3C1FF000000000000000000000000000000000000 000000A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7FF14A1BCFF14A3C1FF00000000000000000000000000000000000000000000 00000000000000A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159F BBFF1BA1BBFF0000000000000000000000000000000000000000000000000000 0000000000000000000000A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miRedo: TMenuItem Action = actEditRedo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000FA85AFF2CD6C0FF02999AFF000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF23C7AFFF059D91FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF3ADDB8FF069A4EFF0000000000000000000000000000000000000000069A 4EFF00000000000000000000000000000000000000000000000000000000069A 4EFF37D9B3FF069A4EFF0000000000000000000000000000000000000000069A 4EFF069A4EFF000000000000000000000000000000000000000000000000069A 4EFF46E2BEFF05A699FF069A4EFF00000000000000000000000000000000069A 4EFF34E28AFF069A4EFF00000000000000000000000000000000000000000A9D 52FF64ECB2FF24D6CDFF0BA193FF069A4EFF069A4EFF069A4EFF069A4EFF069A 4EFF1ED4CCFF34E28AFF069A4EFF000000000000000000000000000000000C9F 55FF63E9B1FF31E0BAFF17D4CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DA A1FF23DED9FF16D273FF34E28AFF069A4EFF000000000000000000000000069A 4EFF30C29DFF60EDB1FF26DFA5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D2 73FF16D273FF16D273FF16D273FF34E28AFF069A4EFF00000000000000000000 0000069A4EFF46D8A9FF65EFB1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7 AFFF16D273FF16D273FF16D273FF18D375FF6CF3AEFF069A4EFF000000000000 000000000000069A4EFF45D9ACFF67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DB A0FF24DBA0FF16D273FF16D273FF6CF3AEFF069A4EFF00000000000000000000 00000000000000000000069A4EFF0C9B8FFF49DEA9FF6AF1AEFF6BF2AEFF73F5 B3FF61EFA6FF16D273FF6CF3AEFF069A4EFF0000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4EFF069A4EFF069A 4EFF6CF3AEFF6CF3AEFF069A4EFF000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF6CF3AEFF069A4EFF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF069A4EFF0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF000000000000000000000000000000000000000000000000 } OnClick = actEditRedoExecute end object N3: TMenuItem Caption = '-' end object miCut: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000E0EAAFF1010ABFF1616ABFF000000000000000000000000000000000000 0000000000000D0DAAFF0B0BAAFF0B0BA9FF0000000000000000000000001313 ABFF2727DBFF1F1FD0FF1D1DCEFF0707A8FF0000000000000000000000000000 00000808AAFF2222D4FF1D1DCFFF1D1DCEFF1313ABFF00000000000000000D0D ABFF1D1DCFFF000000000B0BB5FF2121D3FF0C0CAAFF00000000000000000909 AAFF2323D6FF0D0DB8FF000000001F1FD1FF1111ABFF00000000000000001414 ABFF2323D5FF00000000000000001D1DCEFF0A0AA9FF00000000000000000303 A8FF1A1BCAFF00000000000000002020D1FF1414ABFF00000000000000000000 00000606A8FF1F1FD0FF0303A8FF1415C0FF0101A6FF00000000000000001C1D CDFF1315C0FF0303A8FF1D1DCDFF0606A7FF0000000000000000000000000000 0000000000000707A9FF2020D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1A C9FF2020D1FF1F1FCBFF0A0AA9FF000000000000000000000000000000000000 000000000000000000001818AEFF1616ABFF0606A6FF454AA3FF0202A6FF191A C7FF1717ADFF1818AEFF00000000000000000000000000000000000000000000 000000000000000000000000000000000000848989FFC3C6C5FFAFB2B3FF2C2F 9CFF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B90 8EFF878C8AFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9 A8FF888D8BFF0000000000000000000000000000000000000000000000000000 000000000000000000008A8F8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6 B5FFB5BAB8FF888D8BFF00000000000000000000000000000000000000000000 00000000000000000000888D8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8 B6FFCBCECDFF888D8BFF00000000000000000000000000000000000000000000 0000000000008A8F8DFFB0B5B3FFF6F7F7FF888D8BFF00000000000000008B90 8EFFC9CECCFFABAFAEFF888D8BFF000000000000000000000000000000000000 000000000000888D8BFFD0D4D2FFEFF0EFFF8F9492FF00000000000000000000 0000A7ACAAFFC3C8C6FF8A8F8DFF000000000000000000000000000000000000 0000000000008B908EFFF7F7F7FF888D8BFF0000000000000000000000000000 00008D9190FFD0D3D2FF8C918FFF000000000000000000000000000000000000 00000000000000000000888D8BFF909593FF0000000000000000000000000000 0000888D8BFF8C918FFF00000000000000000000000000000000 } OnClick = actEditCutExecute end object miCopy: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CFF868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF000000000000000000000000000000000000 00000000000000000000868B89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF0000000000000000000000000000 00000000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88FF000000000000 00000000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF000000000000 00000000000000000000979B9AFF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditCopyExecute end object miPaste: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000001436CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BFF0000000000000000000000000143 6CFF237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BFF00000000000000000245 6EFF2687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFF00000000000000000144 6DFF2484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CFF00000000000000000000 000001446DFF01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CFF0000000000000000000000000000 00000000000000000000000000005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FFF0000000000000000000000000000000000000000 } OnClick = actEditPasteExecute end object miDelete: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8FFF919493FFADB0AFFF0000000000000000909492FF9DA09FFF989C9AFF0000 000000000000000000007B7E7DFF989B9AFF0000000000000000000000008C90 8FFFFAFAFAFF949897FF999C9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E 9DFF989B9AFF8B8E8DFFFFFFFFFF8F9392FF0000000000000000000000008C90 8FFF858988FFF6F6F6FF999C9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCE CDFF989B9AFFEBEBEBFF969998FF000000000000000000000000000000000000 0000858988FFC9CBCAFF838885FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0 C0FF7C807FFFE2E3E3FF8B8E8DFF000000000000000000000000000000000000 0000727675FFC7C9C8FF797E7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAF AEFF7C807FFFB7B8B7FF767978FF000000000000000000000000000000000000 00006A6E6DFFCCCDCDFF656968FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2 B1FF6E7271FFB2B3B3FF6C706FFF000000000000000000000000874920FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920FF874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF00000000874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF00000000000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391FF0000000000000000 } OnClick = actEditDeleteExecute end object miSelectAll: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000898E 8CFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000000000000000858A 88FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFF0000000000000000858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFF0000000000000000858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFF0000000000000000898D 8BFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8CFF00000000 } OnClick = actEditSelectAllExecute end object N4: TMenuItem Caption = '-' end object miFind: TMenuItem Action = actEditFind Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000008C8E8DFF8C8E8DFF828484FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000008C8E8DFFB7B8B8FFA3A4A3FF828484FF000000000000 0000000000000000000000000000000000006A6E6CFF808381FF808381FF8083 81FF808381FF8C8E8DFFB7B8B8FFA3A4A3FFA3A4A3FF828484FF898E8CFF868B 89FF858A88FF858A88FF858A88FF7B807EFF808381FFDCC8B3FFCFAC8BFFD1A8 80FFD0B399FF808381FFA3A4A3FFA3A4A3FF6A6E6CFF00000000868B89FFFFFF FFFFFFFFFFFFFFFFFFFFCDCFCFFF808381FFD1B89FFFD6B391FFDFC5AFFFE3CA B2FFD6BAA0FFD3B497FF808381FF737675FF0000000000000000868B89FFF9FA FAFFEFF0F0FFEFF0F0FF808381FFC3B5A7FFD0AB89FFE5CAB3FFEBD7C3FFEAD4 C1FFEEDDCFFFDABDA3FFCEAF93FF808381FF0000000000000000868B89FFFDFE FEFFEFF0F0FFEFF0F0FF808381FFD6BFA9FFE0C1A5FFEEDED0FFF2E5DAFFEDDC CDFFECD9C8FFE8D0BCFFD1A780FF808381FF0000000000000000878C8AFFFFFF FFFFEFF0F0FFEFF0F0FF808381FFD0B8A2FFDFC0A5FFF1E4D9FFF3EAE0FFF2E7 DDFFE9D4C1FFDFBEA0FFD0A681FF808381FF0000000000000000878C8AFFFFFF FFFFEFF0F0FFC6C7C7FF808381FFBBAEA3FFCFA985FFF2E6DCFFF7EEE8FFF5EC E4FFECDACAFFD8B28EFFCBAF97FF808381FF0000000000000000868B89FFFFFF FFFFEFF0F0FFEFF0F0FFD5D7D6FF808381FFC8B7A8FFD2AC8AFFE7D3BFFFEAD7 C5FFD9BA9CFFCBAD90FF808381FF000000000000000000000000878C8AFFFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFA6A9A8FF808381FFC8BAAEFFD2BCA6FFD4BA A2FFCDB9A8FF808381FF00000000000000000000000000000000868B89FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFD5D6D6FF808381FF808381FF8083 81FF808381FF808482FF00000000000000000000000000000000878C8AFFFFFF FFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0 F0FFFFFFFFFF858A88FF00000000000000000000000000000000868B89FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFFFFFFFF858A88FF00000000000000000000000000000000878C8AFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF858A88FF00000000000000000000000000000000979B9AFF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8DFF00000000000000000000000000000000 } OnClick = actEditFindExecute end object miFindNext: TMenuItem Action = actEditFindNext OnClick = actEditFindNextExecute end object miReplace: TMenuItem Action = actEditRplc Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000898E8CFF868B89FF858A88FF858A88FF858A88FF848987FF838886FF8287 85FF838886FF838886FF838886FF888D8BFF0000000000000000000000000000 0000868B89FFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFFF7F7F7FFE9E9E9FFE2E2 E2FFE5E5E5FFEAEAEAFFEFEFEFFF7F8482FF0000000000000000000000000000 0000868B89FFF9FAFAFFEFF0F0FFEFF0F0FFEDEEEEFF000000FF02598FFF96A9 B3FFC2C2C2FFCACBCBFFE2E2E2FF7B7F7DFF0000000000000000000000000000 0000868B89FFFDFEFEFFEFF0F0FFEFF0F0FFEEEFEFFF02598FFF26424CFF3657 6BFF02598FFFAFC1CCFFEFEFEFFF7F8482FF0000000000000000000000008C8E 8DFF868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEEEFEFFF395B70FF8AAB C2FF5585A3FF02598FFFCADCE7FF848987FF0000000000000000828484FFB7B8 B8FF8C8E8DFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FF02598FFFC4E5 EDFF649FC8FF5784A0FF02598FFF6A8089FF0000000000000000828484FFA3A4 A3FFB7B8B8FF8C8E8DFF808381FF808381FF808381FFAFB1B0FFEFF0F0FF0259 8FFFC5E6EDFF69AACFFF5683A0FF02598FFF0000000000000000000000008284 84FFA3A4A3FF808381FFDDC8B3FFD1A77FFFD1B499FF808381FF939695FFC6C7 C7FF02598FFFC7EBEFFF6AACD2FF5787A4FF02598FFF00000000000000000000 0000808381FFD1B89FFFD6B391FFE6D0BBFFD8BEA6FFD3B597FF808381FFD0D2 D1FFEFF0F0FF02598FFFC7EBEFFF6AACD2FF5583A1FF02598FFF000000008083 81FFC2B5A7FFD0AA88FFE8D0BBFFEEDCCDFFF3E8DEFFDCC1A8FFCEB094FF8083 81FFC6C7C7FFEFF0F0FF02598FFFC6EAEEFF71ADCFFF02598FFF000000008083 81FFD0B8A2FFDEC0A4FFF1E4D9FFF2E7DDFFEAD5C3FFDFBFA2FFD0A580FF8083 81FFEFF0F0FFEFF0F0FFFFFFFFFF02598FFF02598FFF00000000000000008083 81FFBBAEA2FFCFA884FFF2E6DCFFF5ECE4FFECDACAFFD8B18DFFCBB097FF8083 81FFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000000000000000000000000000 0000808381FFC8B7A7FFD1AC8AFFEAD7C5FFD9B99BFFCBAC90FF808381FF8387 85FF858A88FF858A88FF858A88FF8A8F8DFF0000000000000000000000000000 000000000000808381FFC8BAAEFFD4BAA2FFCCB9A7FF808381FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000808381FF808381FF808381FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditRplcExecute end object miGotoLine: TMenuItem Action = actEditGotoLine Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00BBBB BBFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FFBBBBBBFFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFFFFFFFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFD4D4D4FFD4D4D4FF874A20FF874A 20FFD4D4D4FFD4D4D4FFD4D4D4FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBB ADFF874A20FFFFFFFFFFFFFFFFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFF874A20FFBAA38FFFB5957AFFB595 7AFFCCBBADFF874A20FFC8C8C8FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFF874A20FFBAA38FFFB5957AFFB5957AFFB595 7AFFB5957AFFCCBBADFF874A20FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FF874A20FFBAA38FFFBAA38FFFBAA38FFFB5957AFFB595 7AFFB5957AFFB5957AFFCCBBADFF874A20FF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FF874A20FF874A20FF874A20FF874A20FF874A20FFBAA38FFFCCBB ADFF874A20FF874A20FF874A20FF874A20FF874A20FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFBFBFBFFF874A20FFBAA38FFFCCBB ADFF874A20FFBFBFBFFFBFBFBFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFD8D8D8FFD8D8D8FFBBBBBBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBB ADFF874A20FFFFFFFFFFFFFFFFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFBBBBBBFFBBBBBBFF948A7CFF9A7441FF9F7844FFBAA38FFFBAA38FFFCCBB ADFF874A20FFB7B7B7FFB7B7B7FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A 88FFA59C8FFFB2ADA8FFBAA38FFFBAA38FFFBAA38FFFBAA38FFFCCBBADFF874A 20FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FFFFFFFF00FFFFFF00BBBB BBFF9B958AFFA09990FF948A7CFF886F4FFF8B6738FF896A40FF7F7253FF858A 88FF858A88FF858A88FF858A88FF858A88FFBBBBBBFFFFFFFF00 } ImageIndex = 16 end object N5: TMenuItem Caption = '-' end object miLineEndType: TMenuItem Caption = 'End Of Line' object miEditLineEndCrLf: TMenuItem Action = actEditLineEndCrLf AutoCheck = True end object miEditLineEndLf: TMenuItem Action = actEditLineEndLf AutoCheck = True end object miEditLineEndCr: TMenuItem Action = actEditLineEndCr AutoCheck = True end end end object miEncoding: TMenuItem Caption = 'En&coding' object miEncodingIn: TMenuItem Caption = 'Open as' end object miEncodingOut: TMenuItem Caption = 'Save as' end end object miHighlight: TMenuItem Caption = 'Syntax highlight' end object Help1: TMenuItem Caption = '&Help' object miAbout: TMenuItem Action = actAbout Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000874A20FF894D23FF884C22FF884C22FF8B4F 25FF884B21FF0000000000000000000000000000000000000000000000000000 000000000000000000008F552EFFCBAF9BFFE5D6CBFFF8F4F1FFF9F5F2FFE8DB D1FFD3B9A6FF915831FF00000000000000000000000000000000000000000000 0000874A20FFAC8264FFF3EDE9FFDDC9BAFFC7A58BFFBB9171FFC19979FFD5B7 9FFFE9DACDFFF8F3EFFFB58D71FF8B4F26FF0000000000000000000000000000 0000AB8163FFF3EEE9FFB78F72FFA5724CFFB38765FFFFFFFFFFFFFFFFFFC197 74FFC59B78FFD7B9A0FFF9F5F1FFB2886BFF0000000000000000000000008E55 2DFFF2EBE6FFB18769FF9D6740FFA36F49FFB28462FFFFFFFFFFFFFFFFFFBD92 6FFFC19672FFC59B78FFD6B79DFFF7F1EDFF8F572FFF00000000874A20FFC3A5 90FFD3BCADFF945C33FF9A643CFFA16C45FFA97852FFC8A88FFFCCAD94FFB789 65FFBB8F6BFFBF9370FFC19673FFE7D7C9FFCFB4A0FF884B21FF874A20FFDDCC C0FFAF866AFF91582FFF976038FF9D6740FFA77651FFE4D4C8FFE5D6CAFFB486 62FFB68763FFB98B67FFBA8E6AFFD1B29BFFE6D7CCFF8A4E24FF874A20FFF5F0 EDFF945E38FF8E532AFF945B33FF99623AFF9F6942FFF3EDE8FFFFFFFFFFD0B5 A0FFB07F5AFFB2835EFFB48560FFBD9475FFF8F3F0FF884B22FF874A20FFF5F0 EDFF935C36FF8A4F25FF90562DFF955D34FF9A633BFFB58B6DFFFCFBF9FFFEFE FEFFC19D82FFAC7A54FFAD7C56FFB78D6CFFF7F3EFFF884B21FF874A20FFDDCC C0FFAC8265FF874A20FF8B5027FF90562DFF955C34FF99623AFFC2A189FFFFFF FFFFF3ECE8FFA5724BFFA6734DFFC3A186FFE1D2C6FF894C23FF874A20FFC3A5 90FFD0B9A9FF874A20FF874A20FF9F6E4BFFA06F4DFF945B32FFA87A59FFFFFF FFFFFDFCFBFFA16D46FF9F6A43FFDAC6B7FFC6A994FF874A20FF000000008E55 2DFFF1EAE5FFA57858FF874A20FFB0886CFFFEFDFDFFE9DED6FFF6F2EFFFFFFF FFFFDCCABDFF986038FFB3896BFFF2EBE6FF8D552DFF00000000000000000000 0000AA7E61FFF2EBE7FFA67859FF9C6947FFDECEC2FFF7F3F0FFF1EAE6FFD0B8 A7FFA06F4DFFAD8264FFF3EDE8FFA87C5DFF0000000000000000000000000000 0000874A20FFA77A5BFFF0E8E3FFD0B9A9FFAC8265FF96603BFF96603BFFAC82 65FFD1BAAAFFF0E9E4FFA77B5CFF874A20FF0000000000000000000000000000 000000000000000000008D542CFFC1A18CFFDBC9BDFFF4EFEBFFF4EFEBFFDBC9 BDFFC1A28CFF8D542CFF00000000000000000000000000000000000000000000 0000000000000000000000000000874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF0000000000000000000000000000000000000000 } OnClick = actAboutExecute end end end object ActListEdit: TActionList Images = ilImageList left = 96 top = 32 object actAbout: TAction Category = 'Help' Caption = 'About' HelpType = htKeyword Hint = 'About' ImageIndex = 13 OnExecute = actAboutExecute end object actFileOpen: TAction Category = 'File' Caption = '&Open' HelpType = htKeyword Hint = 'Open' ImageIndex = 1 OnExecute = actFileOpenExecute ShortCut = 16463 end object actFileClose: TAction Category = 'File' Caption = '&Close' HelpType = htKeyword Hint = 'Close' end object actFileSave: TAction Category = 'File' Caption = '&Save' HelpType = htKeyword Hint = 'Save' ImageIndex = 2 OnExecute = actFileSaveExecute SecondaryShortCuts.Strings = ( 'Ctrl+S' ) ShortCut = 113 end object actFileSaveAs: TAction Category = 'File' Caption = 'Save &As..' HelpType = htKeyword Hint = 'Save As' ImageIndex = 3 OnExecute = actFileSaveAsExecute end object actFileNew: TAction Category = 'File' Caption = '&New' HelpType = htKeyword Hint = 'New' ImageIndex = 0 OnExecute = actFileNewExecute ShortCut = 16462 end object actFileExit: TAction Category = 'File' Caption = 'E&xit' HelpType = htKeyword Hint = 'Exit' ImageIndex = 12 OnExecute = actFileExitExecute ShortCut = 32856 end object actSaveAll: TAction Category = 'File' Caption = 'Sa&ve All' HelpType = htKeyword Hint = 'Save All' ShortCut = 24659 end object actEditFind: TAction Category = 'Edit' Caption = '&Find' HelpType = htKeyword Hint = 'Find' ImageIndex = 10 OnExecute = actEditFindExecute ShortCut = 16454 end object actEditRplc: TAction Category = 'Edit' Caption = '&Replace' HelpType = htKeyword Hint = 'Replace' ImageIndex = 11 OnExecute = actEditRplcExecute ShortCut = 16466 end object actConfHigh: TAction Category = 'File' Caption = '&Configuration' HelpType = htKeyword Hint = 'Configuration' ImageIndex = 4 OnExecute = actConfHighExecute end object actEditCut: TAction Category = 'Edit' Caption = 'Cut' HelpType = htKeyword Hint = 'Cut' ImageIndex = 5 OnExecute = actEditCutExecute ShortCut = 16472 end object actEditCopy: TAction Category = 'Edit' Caption = 'Copy' HelpType = htKeyword Hint = 'Copy' ImageIndex = 6 OnExecute = actEditCopyExecute ShortCut = 16451 end object actEditPaste: TAction Category = 'Edit' Caption = 'Paste' HelpType = htKeyword Hint = 'Paste' ImageIndex = 7 OnExecute = actEditPasteExecute ShortCut = 16470 end object actEditUndo: TAction Category = 'Edit' Caption = 'Undo' HelpType = htKeyword Hint = 'Undo' ImageIndex = 8 OnExecute = actEditUndoExecute ShortCut = 16474 end object actEditRedo: TAction Category = 'Edit' Caption = 'Redo' HelpType = htKeyword Hint = 'Redo' ImageIndex = 9 OnExecute = actEditRedoExecute ShortCut = 24666 end object actEditSelectAll: TAction Category = 'Edit' Caption = 'Select&All' HelpType = htKeyword Hint = 'Select All' ImageIndex = 15 OnExecute = actEditSelectAllExecute ShortCut = 16449 end object actEditDelete: TAction Category = 'Edit' Caption = 'Delete' Hint = 'Delete' ImageIndex = 14 OnExecute = actEditDeleteExecute ShortCut = 46 end object actEditFindNext: TAction Category = 'Edit' Caption = 'Find next' Hint = 'Find next' OnExecute = actEditFindNextExecute ShortCut = 114 end object actEditLineEndCr: TAction Category = 'Edit' AutoCheck = True Caption = 'Mac (CR)' GroupIndex = 1 Hint = 'Mac (CR)' OnExecute = actEditLineEndCrExecute end object actEditLineEndLf: TAction Category = 'Edit' AutoCheck = True Caption = 'Unix (LF)' GroupIndex = 1 Hint = 'Unix (LF)' OnExecute = actEditLineEndLfExecute end object actEditLineEndCrLf: TAction Category = 'Edit' AutoCheck = True Caption = 'Windows (CRLF)' GroupIndex = 1 Hint = 'Windows (CRLF)' OnExecute = actEditLineEndCrLfExecute end object actEditGotoLine: TAction Category = 'Edit' Caption = 'Goto Line...' OnExecute = actEditGotoLineExecute ShortCut = 16455 end end object pmContextMenu: TPopupMenu Images = ilImageList left = 144 top = 32 object miUndoContext: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000066DBEAFF11A6C2FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000043C4DBFF43C5D8FF0000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFF5DDAE9FF23A6C0FF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000002ACC8FF88E7F2FF11A2C2FF00000000000000000000 0000000000000000000000A0C4FF76EDFBFF00A0C4FF00000000000000000000 00000000000000A0C4FF6DE6F5FF76E2EFFF19A3C1FF00000000000000000000 00000000000000A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0FF00000000000000000000 000000A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFFF000000000000000000A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5FF15A0BCFF0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDFF00000000000000000000000000A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FF13A3C1FF000000000000000000000000000000000000 000000A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7FF14A1BCFF14A3C1FF00000000000000000000000000000000000000000000 00000000000000A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159F BBFF1BA1BBFF0000000000000000000000000000000000000000000000000000 0000000000000000000000A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miSeparator1: TMenuItem Caption = '-' end object miCutContext: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000E0EAAFF1010ABFF1616ABFF000000000000000000000000000000000000 0000000000000D0DAAFF0B0BAAFF0B0BA9FF0000000000000000000000001313 ABFF2727DBFF1F1FD0FF1D1DCEFF0707A8FF0000000000000000000000000000 00000808AAFF2222D4FF1D1DCFFF1D1DCEFF1313ABFF00000000000000000D0D ABFF1D1DCFFF000000000B0BB5FF2121D3FF0C0CAAFF00000000000000000909 AAFF2323D6FF0D0DB8FF000000001F1FD1FF1111ABFF00000000000000001414 ABFF2323D5FF00000000000000001D1DCEFF0A0AA9FF00000000000000000303 A8FF1A1BCAFF00000000000000002020D1FF1414ABFF00000000000000000000 00000606A8FF1F1FD0FF0303A8FF1415C0FF0101A6FF00000000000000001C1D CDFF1315C0FF0303A8FF1D1DCDFF0606A7FF0000000000000000000000000000 0000000000000707A9FF2020D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1A C9FF2020D1FF1F1FCBFF0A0AA9FF000000000000000000000000000000000000 000000000000000000001818AEFF1616ABFF0606A6FF454AA3FF0202A6FF191A C7FF1717ADFF1818AEFF00000000000000000000000000000000000000000000 000000000000000000000000000000000000848989FFC3C6C5FFAFB2B3FF2C2F 9CFF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B90 8EFF878C8AFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9 A8FF888D8BFF0000000000000000000000000000000000000000000000000000 000000000000000000008A8F8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6 B5FFB5BAB8FF888D8BFF00000000000000000000000000000000000000000000 00000000000000000000888D8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8 B6FFCBCECDFF888D8BFF00000000000000000000000000000000000000000000 0000000000008A8F8DFFB0B5B3FFF6F7F7FF888D8BFF00000000000000008B90 8EFFC9CECCFFABAFAEFF888D8BFF000000000000000000000000000000000000 000000000000888D8BFFD0D4D2FFEFF0EFFF8F9492FF00000000000000000000 0000A7ACAAFFC3C8C6FF8A8F8DFF000000000000000000000000000000000000 0000000000008B908EFFF7F7F7FF888D8BFF0000000000000000000000000000 00008D9190FFD0D3D2FF8C918FFF000000000000000000000000000000000000 00000000000000000000888D8BFF909593FF0000000000000000000000000000 0000888D8BFF8C918FFF00000000000000000000000000000000 } OnClick = actEditCutExecute end object miCopyContext: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CFF868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF000000000000000000000000000000000000 00000000000000000000868B89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF0000000000000000000000000000 00000000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88FF000000000000 00000000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF000000000000 00000000000000000000979B9AFF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditCopyExecute end object miPasteContext: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000001436CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BFF0000000000000000000000000143 6CFF237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BFF00000000000000000245 6EFF2687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFF00000000000000000144 6DFF2484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CFF00000000000000000000 000001446DFF01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CFF0000000000000000000000000000 00000000000000000000000000005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FFF0000000000000000000000000000000000000000 } OnClick = actEditPasteExecute end object miDeleteContext: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8FFF919493FFADB0AFFF0000000000000000909492FF9DA09FFF989C9AFF0000 000000000000000000007B7E7DFF989B9AFF0000000000000000000000008C90 8FFFFAFAFAFF949897FF999C9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E 9DFF989B9AFF8B8E8DFFFFFFFFFF8F9392FF0000000000000000000000008C90 8FFF858988FFF6F6F6FF999C9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCE CDFF989B9AFFEBEBEBFF969998FF000000000000000000000000000000000000 0000858988FFC9CBCAFF838885FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0 C0FF7C807FFFE2E3E3FF8B8E8DFF000000000000000000000000000000000000 0000727675FFC7C9C8FF797E7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAF AEFF7C807FFFB7B8B7FF767978FF000000000000000000000000000000000000 00006A6E6DFFCCCDCDFF656968FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2 B1FF6E7271FFB2B3B3FF6C706FFF000000000000000000000000874920FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920FF874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF00000000874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF00000000000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391FF0000000000000000 } OnClick = actEditDeleteExecute end object miSeparator2: TMenuItem Caption = '-' end object miSelectAllContext: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000898E 8CFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000000000000000858A 88FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFF0000000000000000858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFF0000000000000000858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFF0000000000000000898D 8BFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8CFF00000000 } OnClick = actEditSelectAllExecute end end object ilImageList: TImageList left = 192 top = 32 Bitmap = { 4C691100000010000000100000009E9E9EFF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF7C8C8CFF729F9FFF6AAEAFFF36E4 EDFF000000000000000000000000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BEEF2FF69F0F7FF4DF2FAFF46EF F7FF28EBF4FF0000000000000000818181FFFFFFFFFFECECECFFEAEAEAFFEAEA EAFFEBEBEBFFEBEBEBFFEBEBEBFFB4EDF0FF6AF0F7FF3AF4FCFF68F6FDFF6AF6 FDFF3CF2FBFF1EEFF9FF00000000818181FFFFFFFFFFEAEAEAFFEAEAEAFFEBEB EBFFEBEBEBFFECECECFFECECECFF9CEEF2FF4EF2FAFF67F6FDFFB5FAFEFFB8FA FEFF6BF5FDFF22EFFAFF00000000818181FFFFFFFFFFEAEAEAFFEBEBEBFFEBEB EBFFECECECFFECECECFFECECECFF9BEFF3FF4EF2FAFF6AF6FDFFBBFAFEFFBFFB FEFF6EF6FDFF22F0FAFF00000000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFECECECFFEDEDEDFFB1EEF1FF67F1F8FF40F4FDFF71F7FDFF72F7 FDFF43F3FCFF24ECF6FF00000000818181FFFFFFFFFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFEDEDEDFFEDEDEDFFE0EEEFFF96EFF4FF63F1F8FF46F3FBFF45F3 FBFF5DEFF7FF0000000000000000818181FFFFFFFFFFEBEBEBFFECECECFFECEC ECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFE2EEEEFFB1F0F3FF92F0F5FF9AF0 F5FF779696FF0000000000000000818181FFFFFFFFFFECECECFFECECECFFEDED EDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFF0F0F0FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFECECECFFEDED EDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEDEDEDFFEEEE EEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1F1FFF1F1F1FFF1F1F1FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEE EEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF1F1F1FFF2F2F2FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDEDEDFFEEEE EEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1F1FFF2F2F2FFF2F2F2FFFFFF FFFF818181FF0000000000000000818181FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF818181FF00000000000000009E9E9EFF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF9E9E9EFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000006B6F6DFF6B6F6DFF6B6F6DFF6B6F 6DFF6B6F6DFF656967FF656967FF000000000000000000000000000000000000 00000000000000000000000000006B6F6DFFCECECEFFCECECEFFCECECEFFCECE CEFFCECECEFFCECECEFFC5C6C6FF616563FF0000000000000000000000000000 0000000000000000000000000000686C6AFFBFC0C0FF959796FF959796FF989C 9AFFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9A7FFA4A9 A7FFA4A9A7FF929996FF00000000656967FFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4A9A7FF000000005F6361FFBFC0C0FF959796FF959796FFA4A9 A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACCCCFFCACCCCFFCACCCCFFF4F5 F5FFFFFFFFFFA4A9A7FF000000005B5F5DFFBFC0C0FF959796FF959796FFA4A9 A7FFFFFFFFFFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF00000000575B59FFC9C9C9FFA6A6A6FFA6A6A6FFA4A9 A7FFFFFFFFFFF4F5F5FFCACCCCFFCACCCCFFCACCCCFFD7D8D8FFF4F5F5FFF4F5 F5FFFFFFFFFFA4A9A7FF00000000535755FFBFC0C0FF9A7A61FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FF9D6B43FF535755FFC9C9C9FFA46534FFEBD8C6FFE8D2 BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2BEFFE8D2 BEFFE8D2BEFFEBD8C6FFA46534FF535755FFBFC0C0FFA46534FFE3C7AEFFD8B1 8CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B18CFFD8B1 8CFFD6AE89FFE0C2A6FFA46534FF535755FFC9C9C9FFA46534FFE3C7ADFFD7B0 8BFFD8B18CFFD7B08BFFD7AF8AFFD6AE88FFD5AC85FFD4A981FFD2A67CFFD0A2 76FFCF9F72FFDDBB9CFFA46534FF535755FFBFC0C0FF9B7658FFDDBB9BFFCE9E 70FFCF9D70FFCE9D6EFFCE9C6EFFCE9C6DFFCE9B6CFFCD9B6BFFCE9A6AFFCD99 69FFCD9968FFDBB694FFA46534FF535755FFA9ABA9FFD7AF89FFCD9B6BFFCD9A 6BFFCD9A6AFFCD9969FFCD9868FFCC9866FFCD9865FFCC9765FFCC9664FFCC95 63FFDEBA9AFF967153FF795D45FF89603EFFA46534FFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FF86603FFF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000008B6738FF8B67 38FF8B6738FF8A693DFF80714AFF7A7858FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000E6CEB1FFEFDF D0FFECDBC5FFDFC29BFFA08B68FF886E43FF0000000000000000000000000000 0000000000000000000000000000887F6BFF737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706EFF6B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706EFF6B706EFFFCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706EFF6B706EFFFAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706EFF6B706EFFF9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706EFF6B706EFFF9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706EFF6B706EFFF7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFFEFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FFF4F4F4FFEBEBEBFFEBEB EBFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFCECECEFFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC5C5C5FFC9C9C9FFC9C9C9FFC5C5C5FFC5C5C5FFC5C5C5FFC5C5 C5FFC5C5C5FFD6D6D6FF6B706EFF6B706EFFCECECEFFC5C5C5FF9F9F9FFFAFAF AFFFBCBCBCFFC4C4C4FFC8C8C8FFD0D0D0FFA9A9A9FFD2D2D2FFA9A9A9FFD2D2 D2FFB9B9B9FFCACACAFF6B706EFF6B706EFFCDCDCDFFC3C3C3FFA9AAAAFFB4B4 B4FFC2C2C2FFC4C4C4FFC8C8C8FFCBCBCBFFA8A7A8FFD1D1D1FFA7A7A8FFD1D1 D1FFB6B6B7FFCACACAFF6B706EFF6B706EFFDDDDDDFFDCDCDCFFDCDCDCFFDCDC DCFFD5D5D5FFD5D5D5FFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF CFFFCFCFCFFFCACACAFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF0000000000000000000000008B6738FF8B67 38FF8B6738FF8A693DFF80714AFF7A7858FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000E6CEB1FFEFDF D0FFECDBC5FFDFC29BFFA08B68FF886E43FF0000000000000000000000000000 0000000000000000000000000000887F6BFF737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706EFF6B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706EFF6B706EFFFCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706EFF6B706EFFFAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706EFF6B706EFFF9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706EFF6B706EFFF9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706EFF6B706EFFF7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706EFF6B706EFFA1A4A3FFA1A4A2FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FF6B706EFF6B706EFFDCDCDCFFDBDBDCFFDBDCDCFFDCDC DCFFDCDBDCFFDBDCDCFFDCDBDCFFDCDCDCFFDBDCDBFFDCDCDBFF000000FFDBDC DCFFDCDCDBFFDCDCDCFF6B706EFF6B706EFFEFEFEFFFADB0AFFFAEB0AEFFAEB0 AFFFADB0AEFFADB0AFFFADB0AFFFADB0AFFFADB0AFFFEFEEEFFF000000FFEEEF EEFFEFEEEEFFEFEEEFFF6B706EFF6B706EFFFFFFFFFFB6B8B7FFB6B8B7FFB6B8 B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706EFF6B706EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B706EFF6B70 6EFF6B706EFF6B706EFF6B706EFF00000000999999FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF000000000000000000000000818181FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEAEA EAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEAEAEAFFC4C4 C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6C6FFC6C6C6FFC6C6C6FFC7C7C7FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEAEAEAFFEBEB EBFFEBEBEBFF696969FF696969FF696969FFD2D2D2FFEDEDEDFFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFFC5C5 C5FFC6C6C6FFB0B0B0FF585858FF585858FF585858FFC6C6C6FFC7C7C7FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFF6969 69FFD2D2D2FFECECECFFD2D2D2FF696969FF666969FFECECECFFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEBEBEBFF5858 58FF585858FFB0B0B0FF585858FF6A6A6AFF6A6A6AFFCCD2D2FFEEEEEEFFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFF6969 69FF696969FF696969FF6A6A6AFF6A6A6AFF6A6A6AFF6A6A6AFFD6D6D6FFF0F0 F0FFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFB0B0 B0FF585858FF585858FF585858FF585858FF595959FF626262FF6C6C6CFFDCDC DCFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFECECECFFEDED EDFFEEEEEEFFEEEEEEFFEFEFEFFFD4D4D4FF777777FF858585FF909090FF9D9D 9DFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFC6C6 C6FFC7C7C7FFC7C7C7FFC8C8C8FFC8C8C8FFB5B5B5FF929292FF9E9E9EFFABAB ABFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFEDEDEDFFEDED EDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFE0E0E0FFADADADFFBABA BAFFFFFFFFFF818181FF0000000000000000818181FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF818181FF0000000000000000959595FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF959595FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000888D 8BFF909593FF00000000000000000000000000000000888D8BFF8C918FFF0000 00000000000000000000000000000000000000000000000000008B908EFFF7F7 F7FF888D8BFF000000000000000000000000000000008D9190FFD0D3D2FF8C91 8FFF000000000000000000000000000000000000000000000000888D8BFFD0D4 D2FFEFF0EFFF8F9492FF000000000000000000000000A7ACAAFFC3C8C6FF8A8F 8DFF0000000000000000000000000000000000000000000000008A8F8DFFB0B5 B3FFF6F7F7FF888D8BFF00000000000000008B908EFFC9CECCFFABAFAEFF888D 8BFF00000000000000000000000000000000000000000000000000000000888D 8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8B6FFCBCECDFF888D8BFF0000 0000000000000000000000000000000000000000000000000000000000008A8F 8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6B5FFB5BAB8FF888D8BFF0000 0000000000000000000000000000000000000000000000000000000000000000 0000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9A8FF888D8BFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B908EFF878C8AFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000848989FFC3C6C5FFAFB2B3FF2C2F9CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000001818 AEFF1616ABFF0606A6FF454AA3FF0202A6FF191AC7FF1717ADFF1818AEFF0000 00000000000000000000000000000000000000000000000000000707A9FF2020 D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1AC9FF2020D1FF1F1FCBFF0A0A A9FF00000000000000000000000000000000000000000606A8FF1F1FD0FF0303 A8FF1415C0FF0101A6FF00000000000000001C1DCDFF1315C0FF0303A8FF1D1D CDFF0606A7FF0000000000000000000000001414ABFF2323D5FF000000000000 00001D1DCEFF0A0AA9FF00000000000000000303A8FF1A1BCAFF000000000000 00002020D1FF1414ABFF00000000000000000D0DABFF1D1DCFFF000000000B0B B5FF2121D3FF0C0CAAFF00000000000000000909AAFF2323D6FF0D0DB8FF0000 00001F1FD1FF1111ABFF00000000000000001313ABFF2727DBFF1F1FD0FF1D1D CEFF0707A8FF000000000000000000000000000000000808AAFF2222D4FF1D1D CFFF1D1DCEFF1313ABFF0000000000000000000000000E0EAAFF1010ABFF1616 ABFF0000000000000000000000000000000000000000000000000D0DAAFF0B0B AAFF0B0BA9FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000979B 9AFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF8A8F8DFF00000000000000000000000000000000878C 8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF00000000000000000000000000000000868B 89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFFF3F3F3FF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEEEE EEFFF6F7F7FFC3C4C3FF858A88FF00000000000000000000000000000000878C 8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FF898E8CFF898E 8CFF898E8CFF898E8CFF858A88FF00000000000000000000000000000000868B 89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFF959A98FFFAFA FAFFF7F8F8FFE2E4E3FF858A88FF00000000000000000000000000000000868B 89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFFAFAFAFF959A98FFFAFA FAFFE2E3E3FF858A88FF858A88FF00000000000000000000000000000000868B 89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFBFBFFD4D4D4FF969A98FFE2E4 E3FF858A88FF000000000000000000000000000000000000000000000000898E 8CFF868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF000000000000000000000000000000000000000000000000000000000000 00005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C5CFF5E5F5FFF000000000000 0000000000000000000000000000000000000000000001446DFF01446CFF0344 6BFF5B5C5CFF899595FF8A9797FF8A9797FF899595FF5B5C5CFF03446BFF0144 6CFF01446CFF00000000000000000000000001446DFF2484C0FF3E7EA4FF646D 70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E7EFF5E5E5EFF646C6EFF407C A1FF237FB9FF01436CFF000000000000000002466FFF2788C6FF646F71FFF1F1 F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFE0E0E0FFF2F2F2FF646D 6EFF2787C5FF00426AFF000000000000000002466FFF2788C6FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466FFF2687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5B3FFEEEFEFFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466FFF2687C5FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEFEFFFEBEDEDFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2B1FFE8EAEAFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EAEAFFD9DBDBFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DADAFFCACDCCFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002466EFF2687C5FF646866FFFFFF FFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BAB9FFB5B9B8FFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002456EFF2687C5FF646866FFFFFF FFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFFFFFFFFFFFFFFFFFFFFFF6469 67FF2886C2FF00426AFF000000000000000002456EFF2687C5FF646866FFFFFF FFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFFFFFFFFFFFFFF646967FF2787 C5FF2886C2FF00426AFF000000000000000002456EFF2687C5FF636D70FFEDEE EDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFEFEFF646967FF2787C5FF2787 C5FF2787C5FF00426AFF000000000000000001436CFF237FBAFF3B7DA7FF646F 73FF686C6AFF686C6AFF686C6AFF686C6AFF686C6AFF3D7CA3FF3D7CA3FF3D7C A3FF227BB3FF01436BFF00000000000000000000000001436CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01436BFF0000000000000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000A0 C4FFADF3FBFF00A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C4FFADF3 FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159FBBFF1BA1BBFF000000000000 0000000000000000000000000000000000000000000000A0C4FFADF3FBFF31E1 F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8F7FF14A1BCFF14A3C1FF0000 00000000000000000000000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2 F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9ECFF69E7F6FF41CEE3FF13A3 C1FF00000000000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2F8FF32E2 F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2E8FF1DD2E8FF36D9ECFF40CD E1FF16A1BDFF00000000000000000000000000A0C4FF79EDFBFF32E2F8FF2CDF F4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2E8FF1DD2E8FF0BC8DFFF6AE5 F3FF1BABC5FF15A0BCFF00000000000000000000000000A0C4FF76EDFBFF04C3 DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EAF9FF05DDF7FF0AC8DFFF07C2 D8FF6FDCEBFF1BA3BFFF0000000000000000000000000000000000A0C4FF76ED FBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0C4FF01A9C4FF6EE1EEFF0FC9 DFFF69E4F2FF1AA4C0FF000000000000000000000000000000000000000000A0 C4FF76EDFBFF00A0C4FF0000000000000000000000000000000000A0C4FF6DE6 F5FF76E2EFFF19A3C1FF00000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF000000000000000000000000000000000000000002AC C8FF88E7F2FF11A2C2FF00000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000EAA CBFF5DDAE9FF23A6C0FF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000043C4 DBFF43C5D8FF0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000066DB EAFF11A6C2FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF6CF3AEFF069A4EFF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000069A4EFF069A4EFF069A4EFF069A4EFF6CF3AEFF6CF3AEFF069A 4EFF00000000000000000000000000000000000000000000000000000000069A 4EFF0C9B8FFF49DEA9FF6AF1AEFF6BF2AEFF73F5B3FF61EFA6FF16D273FF6CF3 AEFF069A4EFF0000000000000000000000000000000000000000069A4EFF45D9 ACFF67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DBA0FF24DBA0FF16D273FF16D2 73FF6CF3AEFF069A4EFF000000000000000000000000069A4EFF46D8A9FF65EF B1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7AFFF16D273FF16D273FF16D2 73FF18D375FF6CF3AEFF069A4EFF00000000069A4EFF30C29DFF60EDB1FF26DF A5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D273FF16D273FF16D273FF16D2 73FF34E28AFF069A4EFF00000000000000000C9F55FF63E9B1FF31E0BAFF17D4 CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DAA1FF23DED9FF16D273FF34E2 8AFF069A4EFF0000000000000000000000000A9D52FF64ECB2FF24D6CDFF0BA1 93FF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF1ED4CCFF34E28AFF069A 4EFF00000000000000000000000000000000069A4EFF46E2BEFF05A699FF069A 4EFF00000000000000000000000000000000069A4EFF34E28AFF069A4EFF0000 000000000000000000000000000000000000069A4EFF37D9B3FF069A4EFF0000 000000000000000000000000000000000000069A4EFF069A4EFF000000000000 000000000000000000000000000000000000069A4EFF3ADDB8FF069A4EFF0000 000000000000000000000000000000000000069A4EFF00000000000000000000 000000000000000000000000000000000000069A4EFF23C7AFFF059D91FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000FA85AFF2CD6C0FF0299 9AFF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000979B9AFF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000 0000000000000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFD5D6D6FF808381FF808381FF808381FF808381FF808482FF0000 0000000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7 C7FFA6A9A8FF808381FFC8BAAEFFD2BCA6FFD4BAA2FFCDB9A8FF808381FF0000 0000000000000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFD5D7 D6FF808381FFC8B7A8FFD2AC8AFFE7D3BFFFEAD7C5FFD9BA9CFFCBAD90FF8083 81FF000000000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FF8083 81FFBBAEA3FFCFA985FFF2E6DCFFF7EEE8FFF5ECE4FFECDACAFFD8B28EFFCBAF 97FF808381FF0000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FF8083 81FFD0B8A2FFDFC0A5FFF1E4D9FFF3EAE0FFF2E7DDFFE9D4C1FFDFBEA0FFD0A6 81FF808381FF0000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FF8083 81FFD6BFA9FFE0C1A5FFEEDED0FFF2E5DAFFEDDCCDFFECD9C8FFE8D0BCFFD1A7 80FF808381FF0000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FF8083 81FFC3B5A7FFD0AB89FFE5CAB3FFEBD7C3FFEAD4C1FFEEDDCFFFDABDA3FFCEAF 93FF808381FF0000000000000000868B89FFFFFFFFFFFFFFFFFFFFFFFFFFCDCF CFFF808381FFD1B89FFFD6B391FFDFC5AFFFE3CAB2FFD6BAA0FFD3B497FF8083 81FF737675FF0000000000000000898E8CFF868B89FF858A88FF858A88FF858A 88FF7B807EFF808381FFDCC8B3FFCFAC8BFFD1A880FFD0B399FF808381FFA3A4 A3FFA3A4A3FF6A6E6CFF00000000000000000000000000000000000000000000 0000000000006A6E6CFF808381FF808381FF808381FF808381FF8C8E8DFFB7B8 B8FFA3A4A3FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000008C8E 8DFFB7B8B8FFA3A4A3FF828484FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00008C8E8DFF8C8E8DFF828484FF000000000000000000000000000000008083 81FF808381FF808381FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000808381FFC8BA AEFFD4BAA2FFCCB9A7FF808381FF000000000000000000000000000000000000 00000000000000000000000000000000000000000000808381FFC8B7A7FFD1AC 8AFFEAD7C5FFD9B99BFFCBAC90FF808381FF838785FF858A88FF858A88FF858A 88FF8A8F8DFF000000000000000000000000808381FFBBAEA2FFCFA884FFF2E6 DCFFF5ECE4FFECDACAFFD8B18DFFCBB097FF808381FFFFFFFFFFFFFFFFFFFFFF FFFF858A88FF000000000000000000000000808381FFD0B8A2FFDEC0A4FFF1E4 D9FFF2E7DDFFEAD5C3FFDFBFA2FFD0A580FF808381FFEFF0F0FFEFF0F0FFFFFF FFFF02598FFF02598FFF0000000000000000808381FFC2B5A7FFD0AA88FFE8D0 BBFFEEDCCDFFF3E8DEFFDCC1A8FFCEB094FF808381FFC6C7C7FFEFF0F0FF0259 8FFFC6EAEEFF71ADCFFF02598FFF0000000000000000808381FFD1B89FFFD6B3 91FFE6D0BBFFD8BEA6FFD3B597FF808381FFD0D2D1FFEFF0F0FF02598FFFC7EB EFFF6AACD2FF5583A1FF02598FFF00000000828484FFA3A4A3FF808381FFDDC8 B3FFD1A77FFFD1B499FF808381FF939695FFC6C7C7FF02598FFFC7EBEFFF6AAC D2FF5787A4FF02598FFF00000000828484FFA3A4A3FFB7B8B8FF8C8E8DFF8083 81FF808381FF808381FFAFB1B0FFEFF0F0FF02598FFFC5E6EDFF69AACFFF5683 A0FF02598FFF0000000000000000828484FFB7B8B8FF8C8E8DFFFFFFFFFFEFF0 F0FFC6C7C7FFC6C7C7FFC6C7C7FF02598FFFC4E5EDFF649FC8FF5784A0FF0259 8FFF6A8089FF0000000000000000000000008C8E8DFF868B89FFFFFFFFFFEFF0 F0FFEFF0F0FFEFF0F0FFEEEFEFFF395B70FF8AABC2FF5585A3FF02598FFFCADC E7FF848987FF00000000000000000000000000000000868B89FFFDFEFEFFEFF0 F0FFEFF0F0FFEEEFEFFF02598FFF26424CFF36576BFF02598FFFAFC1CCFFEFEF EFFF7F8482FF00000000000000000000000000000000868B89FFF9FAFAFFEFF0 F0FFEFF0F0FFEDEEEEFF000000FF02598FFF96A9B3FFC2C2C2FFCACBCBFFE2E2 E2FF7B7F7DFF00000000000000000000000000000000868B89FFFFFFFFFFFFFF FFFFFFFFFFFFFEFEFEFFF7F7F7FFE9E9E9FFE2E2E2FFE5E5E5FFEAEAEAFFEFEF EFFF7F8482FF00000000000000000000000000000000898E8CFF868B89FF858A 88FF858A88FF858A88FF848987FF838886FF828785FF838886FF838886FF8388 86FF888D8BFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000595D5BFF535755FF535755FF535755FF5357 55FF535755FF535755FF535755FF545856FF5A5E5CFF626564FF666968FF676A 68FF636765FF6B6E6DFF00000000535755FFA6A6A6FF858585FF797979FF6E6E 6EFF656565FF5D5D5DFF595959FFEDEFEFFFEFF1F1FFF3F4F4FFF5F6F6FFF5F6 F6FFECEEEDFF7D817FFF00000000535755FFADADADFF8C8C8CFF7F7F7FFF7575 75FF6C6C6CFF646464FF606060FFEDEFEFFFF2F3F3FFF7F8F8FFFAFBFBFFFBFB FBFFF9F9F9FF989B9AFF00000000535755FFBABABAFF959595FF898989FF7E7E 7EFF757575FF6E6E6EFF686868FFEEEFEFFFF2F4F4FFF9F9F9FF9292D7FF3E3E BCFFFAFAFAFFA1A3A2FF00000000535755FFBBBBBBFF9D9D9DFF949494FF8989 89FF7F7F7FFF767676FF707070FFEEF0F0FFEFF1F3FF6565C7FF5151C4FF1515 ACFFD3D4EDFF8889A2FF00000000535755FFBDBDBDFFA0A0A0FF979797FF8F8F 8FFF868686FF7E7E7EFF767676FFE1E3ECFF3C3CB9FF6161CDFFA7A7ECFF3030 BCFF2828B7FF2122B1FF0101A5FF535755FFBEBEBEFFA2A2A2FF9A9A9AFF9191 91FF888888FF808080FF6A6A7EFF2121B0FF6565D2FF8888E7FF8E8EE8FF9595 EAFF9696EAFF9A9AEBFF0101A5FF535755FFBEBEBEFFA4A4A4FF9C9C9CFF9393 93FF8B8B8BFF64648AFF1111A6FF5E5ED5FF6969E1FF4848DBFF4A4ADBFF4C4C DBFF4D4DDBFF8D8DE8FF0303A6FF535755FFBEBEBEFFA7A7A7FF9E9E9EFF9696 96FF8D8D8DFF1616A1FF3636C5FF5656DDFF2D2DD5FF2525D3FF1A1AD1FF1010 CFFF1B1BD2FF6E6EE2FF0404A6FF535755FFBEBEBEFFA9A9A9FFA1A1A1FF9898 98FF8F8F8FFF73738BFF0E0EA2FF2D2DC4FF3636D7FF0808CEFF0C0CCEFF0C0C CEFF0E0ECFFF5151DCFF0101A5FF535755FFBEBEBEFFAAAAAAFFA3A3A3FF9A9A 9AFF929292FF898989FF797986FF2425ACFF2424BCFF3838D6FF4141D9FF3A3A D4FF3C3CD2FF3D3DD2FF0000A5FF535755FFBEBEBEFFAAAAAAFFA5A5A5FF9D9D 9DFF959595FF8F8F8FFF828282FF5E5F64FF4849BBFF1B1BB5FF3535D3FF0404 A6FF1E1EB0FF1314A5FF0B0BAAFF535755FFBEBEBEFFAAAAAAFFA9A9A9FFA1A1 A1FF999999FF6F6F6FFF888A89FFD0D2D0FFE3E5E4FF6B6CC4FF1111ACFF0C0C A9FFE4E6E5FF868887FF00000000535755FFBEBEBEFFABABABFFAFAFAFFF8586 85FF8B8F8DFFC5C9C7FFD2D6D4FFD5D9D7FFD6DAD8FFD7DBD9FF8688C5FF4345 B6FFD4D8D6FF717573FF00000000535755FFC3C3C3FF979898FF909392FFBBC1 BEFFC1C6C3FFC3C8C6FFC3C9C6FFC4C9C6FFC4C9C6FFC4C9C6FFC4C9C6FFC4C9 C6FFC1C7C5FF5F6361FF00000000595D5BFF686B69FF545856FF555957FF565A 58FF565A58FF565A58FF565A58FF575B59FF575B59FF575B59FF575B59FF575B 59FF565A58FF5D615FFF00000000000000000000000000000000000000000000 0000874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF000000000000 0000000000000000000000000000000000000000000000000000000000008D54 2CFFC1A18CFFDBC9BDFFF4EFEBFFF4EFEBFFDBC9BDFFC1A28CFF8D542CFF0000 00000000000000000000000000000000000000000000874A20FFA77A5BFFF0E8 E3FFD0B9A9FFAC8265FF96603BFF96603BFFAC8265FFD1BAAAFFF0E9E4FFA77B 5CFF874A20FF00000000000000000000000000000000AA7E61FFF2EBE7FFA678 59FF9C6947FFDECEC2FFF7F3F0FFF1EAE6FFD0B8A7FFA06F4DFFAD8264FFF3ED E8FFA87C5DFF0000000000000000000000008E552DFFF1EAE5FFA57858FF874A 20FFB0886CFFFEFDFDFFE9DED6FFF6F2EFFFFFFFFFFFDCCABDFF986038FFB389 6BFFF2EBE6FF8D552DFF00000000874A20FFC3A590FFD0B9A9FF874A20FF874A 20FF9F6E4BFFA06F4DFF945B32FFA87A59FFFFFFFFFFFDFCFBFFA16D46FF9F6A 43FFDAC6B7FFC6A994FF874A20FF874A20FFDDCCC0FFAC8265FF874A20FF8B50 27FF90562DFF955C34FF99623AFFC2A189FFFFFFFFFFF3ECE8FFA5724BFFA673 4DFFC3A186FFE1D2C6FF894C23FF874A20FFF5F0EDFF935C36FF8A4F25FF9056 2DFF955D34FF9A633BFFB58B6DFFFCFBF9FFFEFEFEFFC19D82FFAC7A54FFAD7C 56FFB78D6CFFF7F3EFFF884B21FF874A20FFF5F0EDFF945E38FF8E532AFF945B 33FF99623AFF9F6942FFF3EDE8FFFFFFFFFFD0B5A0FFB07F5AFFB2835EFFB485 60FFBD9475FFF8F3F0FF884B22FF874A20FFDDCCC0FFAF866AFF91582FFF9760 38FF9D6740FFA77651FFE4D4C8FFE5D6CAFFB48662FFB68763FFB98B67FFBA8E 6AFFD1B29BFFE6D7CCFF8A4E24FF874A20FFC3A590FFD3BCADFF945C33FF9A64 3CFFA16C45FFA97852FFC8A88FFFCCAD94FFB78965FFBB8F6BFFBF9370FFC196 73FFE7D7C9FFCFB4A0FF884B21FF000000008E552DFFF2EBE6FFB18769FF9D67 40FFA36F49FFB28462FFFFFFFFFFFFFFFFFFBD926FFFC19672FFC59B78FFD6B7 9DFFF7F1EDFF8F572FFF000000000000000000000000AB8163FFF3EEE9FFB78F 72FFA5724CFFB38765FFFFFFFFFFFFFFFFFFC19774FFC59B78FFD7B9A0FFF9F5 F1FFB2886BFF00000000000000000000000000000000874A20FFAC8264FFF3ED E9FFDDC9BAFFC7A58BFFBB9171FFC19979FFD5B79FFFE9DACDFFF8F3EFFFB58D 71FF8B4F26FF0000000000000000000000000000000000000000000000008F55 2EFFCBAF9BFFE5D6CBFFF8F4F1FFF9F5F2FFE8DBD1FFD3B9A6FF915831FF0000 0000000000000000000000000000000000000000000000000000000000000000 0000874A20FF894D23FF884C22FF884C22FF8B4F25FF884B21FF000000000000 000000000000000000000000000000000000000000008F9391FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF8F9391FF00000000000000000000000000000000858A88FFF1F1F1FFEBEB EBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9 E9FF858A88FF000000000000000000000000874A20FF858A88FFE7E7E7FFD7D7 D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5D5FFD5D5D5FFDADADAFFDCDC DCFF858A88FF874A20FF00000000874A20FFDDBB9CFF777C7AFFD9D9D9FFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBCBCFFBCBCBCFFBFBFBFFFC0C0 C0FF777C7AFFDDBB9CFF874A20FF874A20FFDDBB9CFF6A5B4EFFC9C9C9FF9C9C 9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB9CFF86522CFF86512BFF8651 2BFF86512BFF86512BFF86512BFF86522CFF86522CFF86522CFF86522CFF8652 2CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFDDBB9CFF874A20FF874920FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874920FF00000000000000006A6E6DFFCCCDCDFF6569 68FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2B1FF6E7271FFB2B3B3FF6C70 6FFF0000000000000000000000000000000000000000727675FFC7C9C8FF797E 7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAFAEFF7C807FFFB7B8B7FF7679 78FF0000000000000000000000000000000000000000858988FFC9CBCAFF8388 85FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0C0FF7C807FFFE2E3E3FF8B8E 8DFF000000000000000000000000000000008C908FFF858988FFF6F6F6FF999C 9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCECDFF989B9AFFEBEBEBFF9699 98FF000000000000000000000000000000008C908FFFFAFAFAFF949897FF999C 9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E9DFF989B9AFF8B8E8DFFFFFF FFFF8F9392FF0000000000000000000000008C908FFF919493FFADB0AFFF0000 000000000000909492FF9DA09FFF989C9AFF0000000000000000000000007B7E 7DFF989B9AFF000000000000000000000000898D8BFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF898E8CFF0000000000000000858A88FFFDFDFDFFFEFEFEFFFEFE FEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFAFAFAFFFAFA FAFFF9F9F9FF888D8BFF0000000000000000858A88FFFDFDFDFFD6BEA8FFD7BF A9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1 ABFFF8F8F8FF888D8BFF0000000000000000858A88FFFEFEFEFFD7BFA9FFAF97 81FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF9781FFAF9781FFAF9781FFDAC2 ACFFF8F8F8FF888D8BFF0000000000000000858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3ADFFDBC3ADFFDBC3ADFFDBC3 ADFFF8F8F8FF888D8BFF0000000000000000858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4AEFFDCC4AEFFDCC4AEFFEBEB EBFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFD9C1ABFFAF97 81FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF9781FFAF9781FFDDC5AFFFECEC ECFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFDAC2ACFFDAC2 ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDEC6B0FFEEEE EEFFF8F8F8FF888D8BFF0000000000000000858A88FFFCFCFCFFDAC2ACFFDBC3 ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDFC7B1FFDFC7B1FFF0F0 F0FFF8F8F8FF888D8BFF0000000000000000858A88FFFBFBFBFFDAC2ACFFAF97 81FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFE0C8B2FFF2F2 F2FFF7F7F7FF888D8BFF0000000000000000858A88FFFBFBFBFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8B2FF000000FFE1C9B3FFF4F4 F4FFF7F7F7FF888D8BFF0000000000000000858A88FFFAFAFAFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF5F5F5FFF6F6F6FFF6F6 F6FFF7F7F7FF888D8BFF0000000000000000858A88FFF9F9F9FFDBC3ADFFB098 82FFB09882FFB09882FFB09882FFE0C8B2FF000000FFF7F7F7FFF8F8F8FFF7F7 F7FFF7F7F7FF888D8BFF0000000000000000858A88FFF9F9F9FFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF7F7F7FFF9F9F9FFF8F8 F8FFF7F7F7FF888D8BFF0000000000000000858A88FFF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8F8FF000000FFF8F8F8FFF8F8 F8FFF8F8F8FF888D8BFF0000000000000000898E8CFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8DFF00000000FFFFFF00BBBBBBFF9B958AFFA09990FF948A 7CFF886F4FFF8B6738FF896A40FF7F7253FF858A88FF858A88FF858A88FF858A 88FF858A88FFBBBBBBFFFFFFFF00FFFFFF00858A88FFA59C8FFFB2ADA8FFBAA3 8FFFBAA38FFFBAA38FFFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF858A88FFFFFFFF00FFFFFF00858A88FFBBBBBBFFBBBBBBFF948A 7CFF9A7441FF9F7844FFBAA38FFFBAA38FFFCCBBADFF874A20FFB7B7B7FFB7B7 B7FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFBFBFBFFF874A20FFBAA38FFFCCBBADFF874A20FFBFBFBFFFBFBF BFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FF874A20FF874A 20FF874A20FF874A20FF874A20FFBAA38FFFCCBBADFF874A20FF874A20FF874A 20FF874A20FF874A20FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FF874A 20FFBAA38FFFBAA38FFFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBB ADFF874A20FF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFF874A20FFBAA38FFFB5957AFFB5957AFFB5957AFFB5957AFFCCBBADFF874A 20FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFF874A20FFBAA38FFFB5957AFFB5957AFFCCBBADFF874A20FFC8C8 C8FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFF874A20FFBAA38FFFCCBBADFF874A20FFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFD4D4D4FFD4D4D4FF874A20FF874A20FFD4D4D4FFD4D4D4FFD4D4 D4FFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFEFEFEFF858A88FFFFFFFF00FFFFFF00858A88FFD8D8D8FFD8D8D8FFBBBB BBFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFFFFFFFF858A88FFFFFFFF00FFFFFF00BBBBBBFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FFBBBBBBFFFFFFFF00 } end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uconnectionmanager.pas����������������������������������������������������������0000644�0001750�0000144�00000015360�12673524511�017703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uConnectionManager; {$mode delphi} interface uses Classes, SysUtils, uFileSource, uDrive, uDrivesList; type TFileSourceRecord = record Count: Integer; Name, Path: String; FileSource: IFileSource; end; PFileSourceRecord = ^TFileSourceRecord; function GetNetworkPath(ADrive: PDrive): String; procedure UpdateDriveList(ADriveList: TDrivesList); procedure ShowVirtualDriveMenu(ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); procedure AddNetworkConnection(const Name, Path: String; FileSource: IFileSource); procedure RemoveNetworkConnection(const Name, Path: String); procedure CloseNetworkConnection(); var WfxConnectionList: TStringList = nil; implementation uses Menus, StrUtils, DCStrUtils, fMain, uWfxPluginFileSource, uLog, uGlobs, uFileSourceUtil, uFileView; var ContextMenu: TPopupMenu = nil; function GetConnectionName(const Name, Path: String): String; inline; begin Result:= Name + ': ' + Path; end; function NewFileSourceRecord(FileSource: IFileSource; const Name, Path: String): PFileSourceRecord; begin New(Result); Result^.Count:= 1; Result^.Name:= Name; Result^.Path:= Path; Result^.FileSource:= FileSource; end; procedure DisposeFileSourceRecord(FileSourceRecord: PFileSourceRecord); begin FileSourceRecord^.FileSource:= nil; Dispose(FileSourceRecord); end; procedure CloseConnection(Index: Integer); var Connection: TFileSourceRecord; FileSource: IWfxPluginFileSource; begin PFileSourceRecord(WfxConnectionList.Objects[Index]).Count:= 1; Connection:= PFileSourceRecord(WfxConnectionList.Objects[Index])^; FileSource:= Connection.FileSource as IWfxPluginFileSource; FileSource.WfxModule.WfxDisconnect(Connection.Path); with frmMain do begin if ActiveFrame.FileSource.Equals(FileSource) and IsInPath(Connection.Path, ActiveFrame.CurrentPath, True, True) then begin ActiveFrame.RemoveCurrentFileSource; end else if NotActiveFrame.FileSource.Equals(FileSource) and IsInPath(Connection.Path, NotActiveFrame.CurrentPath, True, True) then begin NotActiveFrame.RemoveCurrentFileSource end; end; end; procedure OnNetworkDisconnect(Self, Sender: TObject); var Index: Integer; MenuItem: TMenuItem absolute Sender; begin Index:= WfxConnectionList.IndexOf(MenuItem.Hint); if Index >= 0 then CloseConnection(Index); end; function GetNetworkPath(ADrive: PDrive): String; begin Result:= ADrive^.DeviceId + StringReplace(ADrive^.Path, '\', '/', [rfReplaceAll]); end; procedure UpdateDriveList(ADriveList: TDrivesList); var Drive: PDrive; Index: Integer; FileSourceRecord: PFileSourceRecord; begin for Index:= 0 to WfxConnectionList.Count - 1 do begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); New(Drive); Drive^.IsMounted:= True; Drive^.DriveType:= dtVirtual; Drive^.Path:= FileSourceRecord.Path; Drive^.DisplayName:= IntToStr(Index); Drive^.DeviceId:= 'wfx://' + FileSourceRecord.Name; Drive^.DriveLabel:= GetConnectionName(FileSourceRecord.Name, FileSourceRecord.Path); ADriveList.Add(Drive); end; end; procedure ShowVirtualDriveMenu(ADrive: PDrive; X, Y: Integer; CloseEvent: TNotifyEvent); var Handler: TMethod; MenuItem: TMenuItem; begin // Free previous created menu FreeAndNil(ContextMenu); // Create new context menu ContextMenu:= TPopupMenu.Create(nil); ContextMenu.OnClose := CloseEvent; MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= ADrive.DriveLabel; MenuItem.Enabled:= False; ContextMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= '-'; ContextMenu.Items.Add(MenuItem); MenuItem:= TMenuItem.Create(ContextMenu); MenuItem.Caption:= frmMain.actNetworkDisconnect.Caption; MenuItem.Hint:= ADrive.DriveLabel; Handler.Data:= MenuItem; Handler.Code:= @OnNetworkDisconnect; MenuItem.OnClick:= TNotifyEvent(Handler); ContextMenu.Items.Add(MenuItem); // Show context menu ContextMenu.PopUp(X, Y); end; procedure AddNetworkConnection(const Name, Path: String; FileSource: IFileSource); var Index: Integer; ConnectionName: String; FileSourceRecord: PFileSourceRecord; begin ConnectionName:= GetConnectionName(Name, Path); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); FileSourceRecord.Count:= FileSourceRecord.Count + 1; end else begin FileSourceRecord:= NewFileSourceRecord(FileSource, Name, Path); WfxConnectionList.AddObject(ConnectionName, TObject(FileSourceRecord)); with frmMain do begin miNetworkDisconnect.Enabled:= WfxConnectionList.Count > 0; UpdateDiskCount; end; end; end; procedure RemoveNetworkConnection(const Name, Path: String); var Index: Integer; ConnectionName: String; FileSourceRecord: PFileSourceRecord; begin ConnectionName:= GetConnectionName(Name, Path); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then with frmMain do begin FileSourceRecord:= PFileSourceRecord(WfxConnectionList.Objects[Index]); FileSourceRecord^.Count:= FileSourceRecord^.Count - 1; if FileSourceRecord^.Count > 0 then Exit; DisposeFileSourceRecord(PFileSourceRecord(WfxConnectionList.Objects[Index])); WfxConnectionList.Delete(Index); miNetworkDisconnect.Enabled:= WfxConnectionList.Count > 0; if WfxConnectionList.Count = 0 then begin if gLogWindow = False then ShowLogWindow(False); end; UpdateDiskCount; end; end; procedure CloseNetworkConnection; var Index: Integer; ConnectionName: String; FileView: TFileView = nil; begin if WfxConnectionList.Count > 0 then with frmMain do begin if ActiveFrame.FileSource.IsInterface(IWfxPluginFileSource) and (ActiveFrame.CurrentPath <> PathDelim) then FileView:= ActiveFrame else if NotActiveFrame.FileSource.IsInterface(IWfxPluginFileSource) and (NotActiveFrame.CurrentPath <> PathDelim) then begin FileView:= NotActiveFrame end; if Assigned(FileView) then begin ConnectionName:= ExtractWord(2, FileView.CurrentAddress, ['/']); ConnectionName:= GetConnectionName(ConnectionName, PathDelim + ExtractWord(1, FileView.CurrentPath, [PathDelim])); Index:= WfxConnectionList.IndexOf(ConnectionName); if Index >= 0 then CloseConnection(Index); end // Close last connection else begin CloseConnection(WfxConnectionList.Count - 1); end; end; end; initialization WfxConnectionList:= TStringList.Create; finalization FreeAndNil(WfxConnectionList); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fopenwith.pas�������������������������������������������������������������������0000755�0001750�0000144�00000016172�12612505011�016017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Open with other application dialog Copyright (C) 2012 Alexander Koblov (alexx2000@mail.ru) 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 fOpenWith; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, TreeFilterEdit, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, EditBtn, Buttons, ButtonPanel, ComCtrls, Menus, Types; type { TfrmOpenWith } TfrmOpenWith = class(TForm) btnCommands: TSpeedButton; ButtonPanel: TButtonPanel; chkSaveAssociation: TCheckBox; chkCustomCommand: TCheckBox; chkUseAsDefault: TCheckBox; fneCommand: TFileNameEdit; ImageList: TImageList; lblMimeType: TLabel; miListOfURLs: TMenuItem; miSingleURL: TMenuItem; miListOfFiles: TMenuItem; miSingleFileName: TMenuItem; pnlFilter: TPanel; pnlOpenWith: TPanel; pmFieldCodes: TPopupMenu; tfeApplications: TTreeFilterEdit; tvApplications: TTreeView; procedure btnCommandsClick(Sender: TObject); procedure CancelButtonClick(Sender: TObject); procedure chkCustomCommandChange(Sender: TObject); procedure chkSaveAssociationChange(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure miFieldCodeClick(Sender: TObject); procedure OKButtonClick(Sender: TObject); procedure tvApplicationsDeletion(Sender: TObject; Node: TTreeNode); procedure tvApplicationsSelectionChanged(Sender: TObject); private FMimeType: String; FFileList: TStringList; procedure LoadApplicationList; public constructor Create(TheOwner: TComponent; AFileList: TStringList); reintroduce; end; procedure ShowOpenWithDlg(const FileList: TStringList); implementation {$R *.lfm} uses LCLProc, DCStrUtils, uOSUtils, uPixMapManager, uGlobs, uKeyFile, uMimeActions, uMimeType, uLng; procedure ShowOpenWithDlg(const FileList: TStringList); begin with TfrmOpenWith.Create(Application, FileList) do begin Show; end; end; { TfrmOpenWith } constructor TfrmOpenWith.Create(TheOwner: TComponent; AFileList: TStringList); begin FFileList:= AFileList; inherited Create(TheOwner); InitPropStorage(Self); end; procedure TfrmOpenWith.FormCreate(Sender: TObject); begin ImageList.Width:= gIconsSize; ImageList.Height:= gIconsSize; FMimeType:= GetFileMimeType(FFileList[0]); lblMimeType.Caption:= Format(lblMimeType.Caption, [FMimeType]); LoadApplicationList; tvApplications.AlphaSort; end; procedure TfrmOpenWith.chkCustomCommandChange(Sender: TObject); begin pnlOpenWith.Enabled:= chkCustomCommand.Checked; end; procedure TfrmOpenWith.chkSaveAssociationChange(Sender: TObject); begin chkUseAsDefault.Enabled:= chkSaveAssociation.Checked; end; procedure TfrmOpenWith.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmOpenWith.btnCommandsClick(Sender: TObject); begin pmFieldCodes.PopUp(); end; procedure TfrmOpenWith.CancelButtonClick(Sender: TObject); begin Close; end; procedure TfrmOpenWith.FormDestroy(Sender: TObject); begin FFileList.Free; end; procedure TfrmOpenWith.miFieldCodeClick(Sender: TObject); begin fneCommand.Text:= fneCommand.Text + #32 + TMenuItem(Sender).Hint; fneCommand.SelStart:= UTF8Length(fneCommand.Text); end; procedure TfrmOpenWith.OKButtonClick(Sender: TObject); var DesktopEntry: TDesktopFileEntry; DesktopFile: PDesktopFileEntry = nil; begin if chkCustomCommand.Checked then begin DesktopFile:= @DesktopEntry; DesktopEntry.MimeType:= FMimeType; DesktopEntry.ExecWithParams:= fneCommand.Text; end else if tvApplications.SelectionCount > 0 then begin DesktopFile:= PDesktopFileEntry(tvApplications.Selected.Data); fneCommand.Text:= DesktopFile^.DesktopFilePath; end; if Assigned(DesktopFile) then begin if chkSaveAssociation.Checked then begin if not AddDesktopEntry(FMimeType, fneCommand.Text, chkUseAsDefault.Checked) then begin MessageDlg(rsMsgErrSaveAssociation, mtError, [mbOK], 0); end; end; fneCommand.Text:= TranslateAppExecToCmdLine(DesktopFile, FFileList); ExecCmdFork(fneCommand.Text); end; Close; end; procedure TfrmOpenWith.tvApplicationsDeletion(Sender: TObject; Node: TTreeNode); var DesktopFile: PDesktopFileEntry; begin DesktopFile:= PDesktopFileEntry(Node.Data); Dispose(DesktopFile); end; procedure TfrmOpenWith.tvApplicationsSelectionChanged(Sender: TObject); var DesktopFile: PDesktopFileEntry; begin if tvApplications.SelectionCount > 0 then begin chkCustomCommand.Checked:= False; DesktopFile:= PDesktopFileEntry(tvApplications.Selected.Data); fneCommand.Text:= DesktopFile^.ExecWithParams; end; end; procedure TfrmOpenWith.LoadApplicationList; const Folders: array [1..2] of String = ('/.local/share/applications', '/usr/share/applications'); var I, J: Integer; Bitmap: TBitmap; ImageIndex: PtrInt; TreeNode: TTreeNode; Applications: TStringList; DesktopFile: PDesktopFileEntry; begin Folders[1]:= GetHomeDir + Folders[1]; for I:= Low(Folders) to High(Folders) do begin Applications:= FindAllFiles(Folders[I], '*.desktop', True); for J:= 0 to Applications.Count - 1 do begin DesktopFile:= GetDesktopEntry(Applications[J]); if Assigned(DesktopFile) then begin if DesktopFile^.Hidden or (Pos('Screensaver', DesktopFile^.Categories) > 0) then begin Dispose(DesktopFile); Continue; end; with DesktopFile^ do begin DesktopFilePath:= ExtractDirLevel(Folders[I] + PathDelim, DesktopFilePath); DesktopFilePath:= StringReplace(DesktopFilePath, PathDelim, '-', [rfReplaceAll]); end; TreeNode:= tvApplications.Items.AddChild(nil, DesktopFile^.DisplayName); TreeNode.Data:= DesktopFile; ImageIndex:= PixMapManager.GetIconByName(DesktopFile^.IconName); if ImageIndex >= 0 then begin Bitmap:= PixMapManager.GetBitmap(ImageIndex); if Assigned(Bitmap) then begin TreeNode.ImageIndex:= ImageList.Add(Bitmap, nil); TreeNode.SelectedIndex:= TreeNode.ImageIndex; TreeNode.StateIndex:= TreeNode.ImageIndex; Bitmap.Free; end; end; end; end; Applications.Free; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufindthread.pas�����������������������������������������������������������������0000644�0001750�0000144�00000040627�12675512324�016326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Thread for search files (called from frmSearchDlg) Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 uFindThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFindFiles, uFindEx, uFindByrMr, uMasks; type { TFindThread } TFindThread = class(TThread) private FItems: TStrings; FCurrentDir:String; FFilesScanned:Integer; FFilesFound:Integer; FFoundFile:String; FCurrentDepth: Integer; FSearchTemplate: TSearchTemplateRec; FSelectedFiles: TStringList; FFileChecks: TFindFileChecks; FLinkTargets: TStringList; // A list of encountered directories (for detecting cycles) RecodeTable:TRecodeTable; FFilesMasks: TMaskList; FExcludeFiles: TMaskList; FExcludeDirectories: TMaskList; procedure FindInArchive(const FileName: String); function CheckFileName(const FileName: String) : Boolean; function CheckDirectoryName(const DirectoryName: String) : Boolean; function CheckFile(const Folder : String; const sr : TSearchRecEx) : Boolean; function CheckDirectory(const CurrentDir, FolderName : String) : Boolean; function FindInFile(const sFileName: String; sData: String; bCase, bRegExp: Boolean): Boolean; protected procedure Execute; override; public constructor Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); destructor Destroy; override; procedure AddFile; procedure AddArchiveFile; procedure DoFile(const sNewDir: String; const sr : TSearchRecEx); procedure WalkAdr(const sNewDir: String); function IsAborting: Boolean; property FilesScanned: Integer read FFilesScanned; property FilesFound: Integer read FFilesFound; property CurrentDir: String read FCurrentDir; property Items:TStrings write FItems; end; implementation uses LCLProc, StrUtils, LConvEncoding, SynRegExpr, DCStrUtils, uLng, DCClassesUtf8, uFindMmap, uGlobs, uShowMsg, DCOSUtils, uOSUtils, uLog, uWCXmodule, WcxPlugin, Math, uDCUtils, uConvEncoding; { TFindThread } constructor TFindThread.Create(const AFindOptions: TSearchTemplateRec; SelectedFiles: TStringList); begin inherited Create(True); FLinkTargets := TStringList.Create; FSearchTemplate := AFindOptions; FSelectedFiles := SelectedFiles; with FSearchTemplate do begin if SearchDepth < 0 then SearchDepth := MaxInt; FindText := ConvertEncoding(FindText, EncodingUTF8, TextEncoding); ReplaceText := ConvertEncoding(ReplaceText, EncodingUTF8, TextEncoding); if IsFindText and SingleByteEncoding(TextEncoding) then RecodeTable := InitRecodeTable(TextEncoding, CaseSensitive); end; SearchTemplateToFindFileChecks(FSearchTemplate, FFileChecks); with FFileChecks do begin FFilesMasks := TMaskList.Create(FilesMasks); FExcludeFiles := TMaskList.Create(ExcludeFiles); FExcludeDirectories := TMaskList.Create(ExcludeDirectories); end; end; destructor TFindThread.Destroy; begin FreeAndNil(FFilesMasks); FreeAndNil(FExcludeFiles); FreeThenNil(FLinkTargets); FreeAndNil(FExcludeDirectories); inherited Destroy; end; procedure TFindThread.Execute; var I: Integer; sr: TSearchRecEx; sTemp, sPath: String; begin FreeOnTerminate := True; try Assert(Assigned(FItems), 'Assert: FItems is empty'); FCurrentDepth:= -1; if not Assigned(FSelectedFiles) or (FSelectedFiles.Count = 0) then begin // Normal search (all directories). sTemp:= FSearchTemplate.StartPath; while sTemp <> EmptyStr do begin sPath:= Copy2SymbDel(sTemp, ';'); sPath:= ExcludeBackPathDelimiter(sPath); WalkAdr(sPath); end; end else begin // Search only selected directories. for I := 0 to FSelectedFiles.Count - 1 do begin if FindFirstEx(FSelectedFiles[I], faAnyFile, sr) = 0 then begin if FPS_ISDIR(sr.Attr) then WalkAdr(FSelectedFiles[I]) else DoFile(ExtractFileDir(FSelectedFiles[I]), sr); end; FindCloseEx(sr); end; end; FCurrentDir:= rsOperFinished; except on E:Exception do msgError(Self, E.Message); end; end; procedure TFindThread.AddFile; begin FItems.Add(FFoundFile); end; procedure TFindThread.AddArchiveFile; begin FItems.AddObject(FFoundFile, Self); end; function TFindThread.CheckDirectory(const CurrentDir, FolderName : String): Boolean; begin with FSearchTemplate do begin Result := CheckDirectoryName(FolderName) and CheckDirectoryNameRelative(FFileChecks, CurrentDir + PathDelim + FolderName, FSearchTemplate.StartPath); end; end; function TFindThread.FindInFile(const sFileName: String; sData: String; bCase, bRegExp: Boolean): Boolean; var fs: TFileStreamEx; function FillBuffer(Buffer: PAnsiChar; BytesToRead: Longint): Longint; var DataRead: Longint; begin Result := 0; repeat DataRead := fs.Read(Buffer[Result], BytesToRead - Result); if DataRead = 0 then Break; Result := Result + DataRead; until Result >= BytesToRead; end; var lastPos, sDataLength, DataRead: Longint; Buffer: PAnsiChar = nil; BufferSize: Integer; S: String; begin Result := False; if sData = '' then Exit; // Simple regular expression search (don't work for very big files) if bRegExp then begin fs := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try if fs.Size = 0 then Exit; {$PUSH}{$R-} SetLength(S, fs.Size); {$POP} if Length(S) = 0 then raise EFOpenError.Create(EmptyStr); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; Exit(ExecRegExpr(sData, S)); end; if gUseMmapInSearch then begin // Memory mapping should be slightly faster and use less memory if SingleByteEncoding(FSearchTemplate.TextEncoding) then lastPos:= FindMmapBM(sFileName, sData, RecodeTable, @IsAborting) else begin lastPos:= FindMmap(sFileName, sData, bCase, @IsAborting); end; case lastPos of 0 : Exit(False); 1 : Exit(True); // else fall back to searching via stream reading end; end; BufferSize := gCopyBlockSize; sDataLength := Length(sData); if sDataLength > BufferSize then raise Exception.Create(rsMsgErrSmallBuf); fs := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try if sDataLength > fs.Size then // string longer than file, cannot search Exit; // Buffer is extended by sDataLength-1 and BufferSize + sDataLength - 1 // bytes are read. Then strings of length sDataLength are compared with // sData starting from offset 0 to BufferSize-1. The remaining part of the // buffer [BufferSize, BufferSize+sDataLength-1] is moved to the beginning, // buffer is filled up with BufferSize bytes and the search continues. GetMem(Buffer, BufferSize + sDataLength - 1); if Assigned(Buffer) then try if FillBuffer(Buffer, sDataLength-1) = sDataLength-1 then begin while not Terminated do begin DataRead := FillBuffer(@Buffer[sDataLength-1], BufferSize); if DataRead = 0 then Break; for lastPos := 0 to DataRead - 1 do begin if PosMem(@Buffer[lastPos], sDataLength, 0, sData, bCase, False) <> Pointer(-1) then Exit(True); // found end; // Copy last 'sDataLength-1' bytes to the beginning of the buffer // (to search 'on the boundary' - where previous buffer ends, // and the next buffer starts). Move(Buffer[DataRead], Buffer^, sDataLength-1); end; end; except end; finally FreeAndNil(fs); if Assigned(Buffer) then begin FreeMem(Buffer); Buffer := nil; end; end; end; procedure FileReplaceString(const FileName, SearchString, ReplaceString: string; bCase, bRegExp: Boolean); var S: String; fs: TFileStreamEx; Flags : TReplaceFlags = []; begin fs := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try if fs.Size = 0 then Exit; {$PUSH}{$R-} SetLength(S, fs.Size); {$POP} if Length(S) = 0 then raise EFOpenError.Create(EmptyStr); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; if bRegExp then S := ReplaceRegExpr(SearchString, S, replaceString, False) else begin Include(Flags, rfReplaceAll); if not bCase then Include(Flags, rfIgnoreCase); S := StringReplace(S, SearchString, replaceString, Flags); end; fs := TFileStreamEx.Create(FileName, fmCreate); try fs.WriteBuffer(S[1], Length(S)); finally fs.Free; end; end; procedure TFindThread.FindInArchive(const FileName: String); var Index: Integer; Header: TWcxHeader; function CheckHeader: Boolean; var DirectoryName: String; begin with FSearchTemplate do begin DirectoryName:= ExtractFileName(ExtractFileDir(Header.FileName)); if not CheckDirectoryName(DirectoryName) then Exit(False); if not CheckFileName(ExtractFileName(Header.FileName)) then Exit(False); if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result := CheckFileDateTime(FFileChecks, WcxFileTimeToDateTime(Header)); if (IsFileSizeFrom or IsFileSizeTo) and Result then Result := CheckFileSize(FFileChecks, Header.UnpSize); if Result then Result := CheckFileAttributes(FFileChecks, Header.FileAttr); end; end; var Flags: Integer; Result: Boolean; Operation: Integer; TargetPath: String; ArcHandle: TArcHandle; TargetFileName: String; WcxModule: TWcxModule = nil; begin TargetPath:= ExtractOnlyFileExt(FileName); for Index := 0 to gWCXPlugins.Count - 1 do begin if SameText(TargetPath, gWCXPlugins.Ext[Index]) and (gWCXPlugins.Enabled[Index]) then begin if FSearchTemplate.IsFindText and (gWCXPlugins.Flags[Index] and PK_CAPS_SEARCHTEXT = 0) then Continue; WcxModule:= gWCXPlugins.LoadModule(GetCmdDirFromEnvVar(gWCXPlugins.FileName[Index])); Break; end; end; if Assigned(WcxModule) then begin if FSearchTemplate.IsFindText then begin Flags:= PK_OM_EXTRACT; Operation:= PK_EXTRACT; end else begin Flags:= PK_OM_LIST; Operation:= PK_SKIP; end; ArcHandle := WcxModule.OpenArchiveHandle(FileName, Flags, Index); if ArcHandle <> 0 then try TargetPath:= GetTempName(GetTempFolder); if not mbCreateDir(TargetPath) then Exit; WcxModule.WcxSetChangeVolProc(ArcHandle, nil, nil); WcxModule.WcxSetProcessDataProc(ArcHandle, nil, nil); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do begin Result:= CheckHeader; if Terminated then Break; Flags:= IfThen(Result, Operation, PK_SKIP); if Flags = PK_EXTRACT then TargetFileName:= TargetPath + PathDelim + ExtractFileName(Header.FileName); if WcxModule.WcxProcessFile(ArcHandle, Flags, EmptyStr, TargetFileName) = E_SUCCESS then begin with FSearchTemplate do begin if Result and IsFindText then begin Result:= FindInFile(TargetFileName, FindText, CaseSensitive, TextRegExp); if NotContainingText then Result:= not Result; mbDeleteFile(TargetFileName); end; end; end; if Result then begin FFoundFile := FileName + ReversePathDelim + Header.FileName; Synchronize(@AddArchiveFile); Inc(FFilesFound); end; FreeAndNil(Header); end; mbRemoveDir(TargetPath); finally WcxModule.CloseArchive(ArcHandle); end; end; end; function TFindThread.CheckFileName(const FileName: String): Boolean; begin with FFileChecks do begin if RegExp then begin Result := ((FilesMasks = '') or ExecRegExpr(FilesMasks, FileName)) and ((ExcludeFiles = '') or not ExecRegExpr(ExcludeFiles, FileName)); end else begin Result := FFilesMasks.Matches(FileName) and not FExcludeFiles.Matches(FileName); end; end; end; function TFindThread.CheckDirectoryName(const DirectoryName: String): Boolean; begin with FFileChecks do begin Result := not FExcludeDirectories.Matches(DirectoryName); end; end; function TFindThread.CheckFile(const Folder : String; const sr : TSearchRecEx) : Boolean; begin Result := True; with FSearchTemplate do begin if not CheckFileName(sr.Name) then Exit(False); if (IsDateFrom or IsDateTo or IsTimeFrom or IsTimeTo or IsNotOlderThan) then Result := CheckFileTime(FFileChecks, sr.Time); if (IsFileSizeFrom or IsFileSizeTo) and Result then Result := CheckFileSize(FFileChecks, sr.Size); if Result then Result := CheckFileAttributes(FFileChecks, sr.Attr); if (Result and IsFindText) then begin if FPS_ISDIR(sr.Attr) then Exit(False); try Result := FindInFile(Folder + PathDelim + sr.Name, FindText, CaseSensitive, TextRegExp); if (Result and IsReplaceText) then FileReplaceString(Folder + PathDelim + sr.Name, FindText, ReplaceText, CaseSensitive, TextRegExp); if NotContainingText then Result := not Result; except on E : Exception do begin Result := False; if (log_errors in gLogOptions) then begin logWrite(Self, rsMsgLogError + E.Message + ' (' + Folder + PathDelim + sr.Name + ')', lmtError); end; end; end; end; if Result and ContentPlugin then begin Result:= CheckPlugin(FSearchTemplate, Folder + PathDelim + sr.Name); end; end; end; procedure TFindThread.DoFile(const sNewDir: String; const sr : TSearchRecEx); begin if FSearchTemplate.FindInArchives then FindInArchive(IncludeTrailingBackslash(sNewDir) + sr.Name); if CheckFile(sNewDir, sr) then begin FFoundFile := sNewDir + PathDelim + sr.Name; Synchronize(@AddFile); Inc(FFilesFound); end; Inc(FFilesScanned); end; procedure TFindThread.WalkAdr(const sNewDir:String); var sr: TSearchRecEx; Path, SubPath: String; IsLink: Boolean; begin if Terminated then Exit; Inc(FCurrentDepth); FCurrentDir := sNewDir; // Search all files to display statistics Path := sNewDir + PathDelim + '*'; if FindFirstEx(Path, faAnyFile, sr) = 0 then repeat if not FPS_ISDIR(sr.Attr) then DoFile(sNewDir, sr) else if (sr.Name <> '.') and (sr.Name <> '..') then begin DoFile(sNewDir, sr); // Search in sub folders if (FCurrentDepth < FSearchTemplate.SearchDepth) and CheckDirectory(sNewDir, sr.Name) then begin SubPath := sNewDir + PathDelim + sr.Name; IsLink := FPS_ISLNK(sr.Attr); if FSearchTemplate.FollowSymLinks then begin if IsLink then SubPath := mbReadAllLinks(SubPath); if FLinkTargets.IndexOf(SubPath) >= 0 then Continue; // Link already encountered - links form a cycle. // Add directory to already-searched list. FLinkTargets.Add(SubPath); end else if IsLink then Continue; WalkAdr(SubPath); FCurrentDir := sNewDir; end; end; until (FindNextEx(sr) <> 0) or Terminated; FindCloseEx(sr); Dec(FCurrentDepth); end; function TFindThread.IsAborting: Boolean; begin Result := Terminated; end; end. ���������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fcopymovedlg.pas����������������������������������������������������������������0000644�0001750�0000144�00000025104�12673524511�016517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fCopyMoveDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, KASPathEdit, uFileSource, uFileViewNotebook, uFileSourceOperation, uFileSourceOperationOptionsUI, uOperationsManager, uFormCommands; type TCopyMoveDlgType = (cmdtCopy, cmdtMove); { TfrmCopyDlg } TfrmCopyDlg = class(TForm, IFormCommands) btnCancel: TBitBtn; btnOK: TBitBtn; btnAddToQueue: TBitBtn; btnOptions: TButton; btnSaveOptions: TButton; edtDst: TKASPathEdit; grpOptions: TGroupBox; lblCopySrc: TLabel; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue4: TMenuItem; mnuQueue5: TMenuItem; mnuQueue1: TMenuItem; mnuNewQueue: TMenuItem; pmQueuePopup: TPopupMenu; pnlButtons: TPanel; pnlOptions: TPanel; pnlSelector: TPanel; btnCreateSpecialQueue: TBitBtn; procedure btnCreateSpecialQueueClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnOptionsClick(Sender: TObject); procedure btnSaveOptionsClick(Sender: TObject); procedure btnStartModeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormPaint(Sender: TObject); procedure frmCopyDlgShow(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); procedure pnlOptionsResize(Sender: TObject); private FCommands: TFormCommands; FDialogType: TCopyMoveDlgType; noteb: TFileViewNotebook; FFileSource: IFileSource; FOperationOptionsUIClass: TFileSourceOperationOptionsUIClass; FOperationOptionsUI: TFileSourceOperationOptionsUI; function GetQueueIdentifier: TOperationsManagerQueueIdentifier; procedure SetQueueIdentifier(AValue: TOperationsManagerQueueIdentifier); function ShowTabsSelector: integer; procedure TabsSelector(Sender: TObject); procedure TabsSelectorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ShowOptions(bShow: Boolean); procedure UpdateSize; property Commands: TFormCommands read FCommands implements IFormCommands; public constructor Create(TheOwner: TComponent; DialogType: TCopyMoveDlgType; AFileSource: IFileSource; AOperationOptionsUIClass: TFileSourceOperationOptionsUIClass); reintroduce; constructor Create(TheOwner: TComponent); override; procedure SetOperationOptions(Operation: TFileSourceOperation); property QueueIdentifier: TOperationsManagerQueueIdentifier read GetQueueIdentifier write SetQueueIdentifier; published procedure cm_AddToQueue(const Params: array of String); end; implementation {$R *.lfm} uses fMain, uFileSourceProperty, LCLType, LCLVersion, uGlobs, uLng, uHotkeyManager, DCStrUtils; const HotkeysCategory = 'Copy/Move Dialog'; var FQueueIdentifier: TOperationsManagerQueueIdentifier = SingleQueueId; constructor TfrmCopyDlg.Create(TheOwner: TComponent; DialogType: TCopyMoveDlgType; AFileSource: IFileSource; AOperationOptionsUIClass: TFileSourceOperationOptionsUIClass); begin FDialogType := DialogType; FFileSource := AFileSource; FOperationOptionsUIClass := AOperationOptionsUIClass; FCommands := TFormCommands.Create(Self); inherited Create(TheOwner); end; constructor TfrmCopyDlg.Create(TheOwner: TComponent); begin Create(TheOwner, cmdtCopy, nil, nil); end; procedure TfrmCopyDlg.SetOperationOptions(Operation: TFileSourceOperation); begin if Assigned(FOperationOptionsUI) then FOperationOptionsUI.SetOperationOptions(Operation); end; procedure TfrmCopyDlg.cm_AddToQueue(const Params: array of String); var Value: Integer; sQueueId: String; begin if FQueueIdentifier = ModalQueueId then Exit; if GetParamValue(Params, 'queueid', sQueueId) and TryStrToInt(sQueueId, Value) then begin if Value < 0 then mnuNewQueue.Click else FQueueIdentifier := Value end else FQueueIdentifier := SingleQueueId; ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmCopyDlg.TabsSelector(Sender: TObject); begin edtDst.Text := noteb[(Sender as TButton).tag].CurrentPath; end; procedure TfrmCopyDlg.TabsSelectorMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin edtDst.Text := noteb[(Sender as TButton).tag].CurrentPath; end; function TfrmCopyDlg.ShowTabsSelector: integer; var btnS, btnL: TButton; i, tc: PtrInt; st: TStringList; s: String; begin noteb := frmMain.NotActiveNotebook; if noteb.PageCount = 1 then begin Result:=0; exit; end; tc := noteb.PageCount; st := TStringList.Create; try for i:=0 to tc-1 do if noteb.View[i].Visible then begin s:=noteb[i].CurrentPath; if st.IndexOf(s)=-1 then begin st.Add(s); st.Objects[st.Count-1]:=TObject(i); end; end; tc := st.Count; btnL := nil; if tc>10 then tc:=10; for i:=0 to tc-1 do begin btnS:= TButton.Create(Self); btns.Parent:=pnlSelector; btns.Tag:=PtrInt(st.Objects[i]); if i<9 then btns.Caption := '&' + IntToStr(i+1) + ' - ' + noteb.Page[PtrInt(st.Objects[i])].Caption else btns.Caption := '&0 - ' + noteb.Page[PtrInt(st.Objects[i])].Caption; btnS.OnClick := @TabsSelector; btnS.OnMouseDown := @TabsSelectorMouseDown; btns.AutoSize:=True; btns.Left := 0; btns.Top := 0; btns.Anchors :=[akLeft,akTop,akBottom]; btns.Visible := True; if btnL <> nil then begin btns.AnchorSideLeft.Control := btnL; btns.AnchorSideLeft.Side := asrRight; end; btnL := btnS; if (Self.Width < (btnL.Left+btnL.Width+200)) then // 200 = Ok + Cancel Self.Width := (btnL.Left+btnL.Width+200); end; finally st.Free; end; end; function TfrmCopyDlg.GetQueueIdentifier: TOperationsManagerQueueIdentifier; begin Result:= FQueueIdentifier; end; procedure TfrmCopyDlg.SetQueueIdentifier(AValue: TOperationsManagerQueueIdentifier); begin FQueueIdentifier:= AValue; end; procedure TfrmCopyDlg.frmCopyDlgShow(Sender: TObject); begin case FDialogType of cmdtCopy: begin Caption := rsDlgCp; end; cmdtMove: begin Caption := rsDlgMv; end; end; if gShowCopyTabSelectPanel then ShowTabsSelector; edtDst.SelectAll; edtDst.SetFocus; end; procedure TfrmCopyDlg.mnuNewQueueClick(Sender: TObject); begin FQueueIdentifier := OperationsManager.GetNewQueueIdentifier; ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmCopyDlg.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: TOperationsManagerQueueIdentifier; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin FQueueIdentifier := NewQueueNumber; ModalResult := btnAddToQueue.ModalResult; end; end; procedure TfrmCopyDlg.pnlOptionsResize(Sender: TObject); begin UpdateSize; end; procedure TfrmCopyDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if gShowCopyTabSelectPanel and (edtDst.Focused=false) and (key-49<pnlSelector.ControlCount) then begin if (key>=VK_1) and (Key<=VK_9) then TButton(pnlSelector.Controls[key-49]).Click; if key=vk_0 then TButton(pnlSelector.Controls[9]).Click; end; {$IF lcl_fullversion < 093100} case Key of VK_ESCAPE: // Must handle before drag manager. Lazarus bug 0020676. begin ModalResult := mrCancel; Key := 0; end; end; {$ENDIF} end; procedure TfrmCopyDlg.FormPaint(Sender: TObject); begin OnPaint := nil; AutoSize := False; Constraints.MinWidth := 0; end; procedure TfrmCopyDlg.btnCreateSpecialQueueClick(Sender: TObject); begin btnCreateSpecialQueue.PopupMenu.PopUp; end; procedure TfrmCopyDlg.btnOKClick(Sender: TObject); begin if FQueueIdentifier <> ModalQueueId then FQueueIdentifier := FreeOperationsQueueId; end; procedure TfrmCopyDlg.btnOptionsClick(Sender: TObject); begin Constraints.MinWidth := Width; ShowOptions(not pnlOptions.Visible); btnOptions.Enabled := not btnOptions.Enabled; ClientWidth := pnlOptions.Width + ChildSizing.LeftRightSpacing * 2; pnlOptions.Anchors := pnlOptions.Anchors + [akRight]; MoveToDefaultPosition; Constraints.MinWidth := 0; end; procedure TfrmCopyDlg.btnSaveOptionsClick(Sender: TObject); begin if Assigned(FOperationOptionsUI) then FOperationOptionsUI.SaveOptions; end; procedure TfrmCopyDlg.btnStartModeClick(Sender: TObject); begin btnOK.PopupMenu.PopUp; end; procedure TfrmCopyDlg.FormCreate(Sender: TObject); var HMForm: THMForm; Hotkey: THotkey; begin Constraints.MinWidth := Width; pnlSelector.Visible := gShowCopyTabSelectPanel; btnOK.Caption := rsDlgOpStart; if FQueueIdentifier <= FreeOperationsQueueId then FQueueIdentifier:= SingleQueueId; btnAddToQueue.Caption:= btnAddToQueue.Caption + ' #' + IntToStr(FQueueIdentifier); // Fix align of options panel and dialog size at start. if not pnlSelector.Visible then pnlOptions.Top := pnlOptions.Top - (pnlSelector.Height + pnlSelector.BorderSpacing.Top + pnlSelector.BorderSpacing.Bottom); // Operation options. if Assigned(FOperationOptionsUIClass) then begin FOperationOptionsUI := FOperationOptionsUIClass.Create(Self, FFileSource); FOperationOptionsUI.Parent := grpOptions; FOperationOptionsUI.Align := alClient; end else btnOptions.Visible := False; ShowOptions(False); HMForm := HotMan.Register(Self, HotkeysCategory); Hotkey := HMForm.Hotkeys.FindByCommand('cm_AddToQueue'); if Assigned(Hotkey) then btnAddToQueue.Caption := btnAddToQueue.Caption + ' (' + ShortcutsToText(Hotkey.Shortcuts) + ')'; end; procedure TfrmCopyDlg.FormDestroy(Sender: TObject); begin HotMan.UnRegister(Self); end; procedure TfrmCopyDlg.ShowOptions(bShow: Boolean); begin pnlOptions.Visible := bShow; UpdateSize; end; procedure TfrmCopyDlg.UpdateSize; begin if pnlOptions.Visible then Self.Height := pnlOptions.Top + pnlOptions.Height + pnlOptions.BorderSpacing.Top + pnlOptions.BorderSpacing.Bottom else Self.Height := pnlOptions.Top; end; initialization TFormCommands.RegisterCommandsForm(TfrmCopyDlg, HotkeysCategory, @rsHotkeyCategoryCopyMoveDialog); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ulng.pas������������������������������������������������������������������������0000644�0001750�0000144�00000130134�12666540554�014775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Localization core unit Copyright (C) 2007-2016 Alexander Koblov (alexx2000@mail.ru) 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 uLng; {$mode objfpc}{$H+} interface uses LResources; resourcestring // File operations. rsMsgNotDelete = 'Can not delete file %s'; rsMsgCannotDeleteDirectory = 'Cannot delete directory %s'; rsMsgErrDirExists = 'Directory %s exists!'; rsMsgErrRename = 'Cannot rename file %s to %s'; rsMsgErrCannotCopyFile = 'Cannot copy file %s to %s'; rsMsgFileExistsOverwrite = 'Overwrite:'; rsMsgFileExistsWithFile = 'With file:'; rsMsgFileExistsFileInfo = '%s bytes, %s'; rsMsgFileExistsRwrt = 'File %s exists, overwrite?'; rsMsgFileChangedSave = 'File %s changed, save?'; rsMsgFolderExistsRwrt = 'Folder %s exists, overwrite?'; rsMsgFileReadOnly = 'File %s is marked as read-only. Delete it?'; rsMsgNewFile = 'New file'; rsMsgDelFlDr = 'Delete %d selected files/directories?'; rsMsgDelSel = 'Delete selected "%s"?'; // 12.05.2009 - another message, when deleting to trash rsMsgDelFlDrT = 'Delete %d selected files/directories into trash can?'; rsMsgDelSelT = 'Delete selected "%s" into trash can?'; rsMsgDelToTrashForce = 'Can not delete "%s" to trash! Delete directly?'; rsMsgFileNotFound = 'File "%s" not found.'; // --- rsMsgWipeFlDr = 'Wipe %d selected files/directories?'; rsMsgWipeSel = 'Wipe selected "%s"?'; rsMsgCpFlDr = 'Copy %d selected files/directories?'; rsMsgCpSel = 'Copy selected "%s"?'; rsMsgRenFlDr = 'Rename/move %d selected files/directories?'; rsMsgRenSel = 'Rename/move selected "%s"?'; rsMsgErrForceDir = 'Can not create directory %s!'; rsMsgSelectedInfo = 'Selected: %s of %s, files: %d of %d, folders: %d of %d'; rsMsgPopUpHotAdd = '&Add %s'; rsMsgPopUpHotCnf = '&Configure'; rsMsgCloseLockedTab = 'This tab (%s) is locked! Close anyway?'; rsMsgTabForOpeningInNewTab = 'This tab (%s) is locked! Open directory in another tab?'; rsSpaceMsg = 'Files: %d, Dirs: %d, Size: %s (%s bytes)'; rsSelectDir = 'Select a directory'; rsMarkPlus = 'Select mask'; rsMarkMinus = 'Unselect mask'; rsMaskInput = 'Input mask:'; rsFreeMsg = 'Free %s from %s bytes'; rsFreeMsgShort = '%s bytes free'; rsMsgPopUpHotDelete = '&Delete %s'; rsMsgDiskNotAvail = 'Disk is not available'; rsMsgChDirFailed = 'ChDir to [%s] failed!'; rsMsgNoFreeSpaceCont = 'No enough free space on target drive, Continue?'; rsMsgNoFreeSpaceRetry = 'No enough free space on target drive, Retry?'; rsMsgSetVolumeLabel = 'Set volume label'; rsMsgVolumeLabel = 'Volume label:'; rsMsgRestartForApplyChanges = 'Please, restart Double Commander in order to apply changes'; rsMsgEnterName = 'Enter name:'; rsMsgEnterFileExt = 'Enter file extension:'; rsMsgDefaultCustomActionName = 'Custom action'; rsMsgSelectExecutableFile = 'Select executable file for'; rsMsgWithActionWith = 'with'; rsMsgFollowSymlink = 'Follow symlink "%s"?'; rsMsgFileSizeTooBig = 'The file size of "%s" is too big for destination file system!'; rsMsgCloseAllInActiveTabs = 'Remove all inactive tabs?'; rsMsgErrRegExpSyntax = 'Syntax error in regular expression!'; rsMsgNoFilesSelected = 'No files selected.'; rsMsgTooManyFilesSelected = 'Too many files selected.'; rsMsgInvalidSelection = 'Invalid selection.'; rsMsgNotImplemented = 'Not implemented.'; rsMsgInvalidFilename = 'Invalid filename'; rsMsgInvalidPath = 'Invalid path'; rsMsgInvalidPathLong = 'Path %s contains forbidden characters.'; rsMsgSelectOnlyCheckSumFiles = 'Please select only checksum files!'; rsMsgPresetAlreadyExists = 'Preset "%s" already exists. Overwrite?'; rsMsgVolumeSizeEnter = 'Please enter the volume size:'; rsMsgArchiverCustomParams = 'Additional parameters for archiver command-line:'; rsMsgMasterPassword = 'Master Password'; rsMsgMasterPasswordEnter = 'Please enter the master password:'; rsMsgPasswordEnter = 'Please enter the password:'; rsMsgPasswordVerify = 'Please re-enter the password for verification:'; rsMsgPasswordDiff = 'Passwords are different!'; rsMsgUserName = 'User name:'; rsMsgPassword = 'Password:'; rsMsgAccount = 'Account:'; rsMsgUserNameFirewall = 'User name (Firewall):'; rsMsgPasswordFirewall = 'Password (Firewall):'; rsMsgTargetDir = 'Target path:'; rsMsgURL = 'URL:'; rsMsgLoadingFileList = 'Loading file list...'; rsMsgNoFiles = 'No files'; rsMsgErrSetAttribute = 'Can not set attributes for "%s"'; rsMsgErrSetDateTime = 'Can not set date/time for "%s"'; rsMsgErrSetOwnership = 'Can not set owner/group for "%s"'; rsMsgErrSetPermissions = 'Can not set permissions for "%s"'; rsMsgErrDateNotSupported = 'Date %s is not supported'; rsMsgErrSaveFile = 'Cannot save file'; rsMsgErrCanNotConnect = 'Can not connect to server: "%s"'; rsMsgErrSaveAssociation = 'Can not save association!'; rsMsgFileOperationsActive = 'File operations active'; rsMsgFileOperationsActiveLong = 'Some file operations have not yet finished. Closing Double Commander may result in data loss.'; rsMsgConfirmQuit = 'Are you sure you want to quit?'; rsMsgCanNotCopyMoveItSelf = 'You can not copy/move a file "%s" to itself!'; rsMsgTabRenameCaption = 'Rename tab'; rsMsgTabRenamePrompt = 'New tab name:'; rsMsgInvalidPlugin = 'This is not a valid plugin!'; rsMsgInvalidPluginArchitecture = 'This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!'; rsMsgErrCreateFileDirectoryExists = 'There already exists a directory named "%s".'; rsMsgDeletePartiallyCopied = 'Delete the partially copied file ?'; rsMsgInvalidCommandLine = 'Error in command line'; rsMsgInvalidQuoting = 'Invalid quoting'; rsMsgErrorInContextMenuCommand = 'Error in context menu command'; rsMsgErrorLoadingConfiguration = 'Error when loading configuration'; rsMsgInvalidFormatOfConfigurationFile = 'Invalid format of configuration file'; rsDefaultSuffixDroppedText = '_DroppedText'; rsDefaultSuffixDroppedTextRichtextFilename = '_DroppedRichtext'; rsDefaultSuffixDroppedTextHTMLFilename = '_DroppedHTMLtext'; rsDefaultSuffixDroppedTextUnicodeUTF16Filename = '_DroppedUnicodeUTF16text'; rsDefaultSuffixDroppedTextUnicodeUTF8Filename = '_DroppedUnicodeUTF8text'; rsDefaultSuffixDroppedTextSimpleFilename = '_DroppedSimpleText'; rsCaptionForAskingFilename = 'Enter filename, with extension, for dropped text'; rsMsgPromptAskingFilename = 'Filename for dropped text:'; rsCaptionForTextFormatToImport = 'Text format to import'; rsMsgForTextFormatToImport = 'Select the text format to import'; rsMsgDragAndDropModifiedWantToSave = 'Options regarding mouse drag && drop have been modified. Do you want to save before to exit?'; rsMsgFileOperationsModifiedWantToSave = 'Options regarding file operations have been modified. Do you want to save before to exit?'; rsMsgMiscellaneousModifiedWantToSave = 'Miscellaneous options have been modified. Do you want to save before to exit?'; rsMsgUserDidNotSetExtension = '<NO EXT>'; rsMsgUserDidNotSetName = '<NO NAME>'; rsMsgProblemExecutingCommand = 'Problem executing command (%s)'; rsMsgCopyBackward = 'The file %s has changed. Do you want to copy it backward?'; rsMsgCouldNotCopyBackward = 'Could not copy backward - do you want to keep the changed file?'; //Hot Dir related rsMsgHotDirWhatToDelete = 'Do you want to delete all elements inside the sub-menu [%s]?'+#$0A+'Answering NO will delete only menu delimiters but will keep element inside sub-menu.'; rsMsgHotDirAddThisDirectory = 'Add current dir: '; rsMsgHotDirAddSelectedDirectory = 'Add selected dir: '; rsMsgHotDirReAddSelectedDirectory = 'Re-Add selected dir: '; rsMsgHotDirReAddThisDirectory = 'Re-Add current dir: '; rsMsgHotDirAddSelectedDirectories = 'Add %d selected dirs'; rsMsgHotDirConfigHotlist = 'Configuration of Directory Hotlist'; rsMsgHotDirDeleteAllEntries = 'Are you sure you want to remove all entries of your Directory Hotlist? (There is no "undo" to this action!)'; rsMsgHotDirName = 'Hotdir name'; rsMsgHotDirPath = 'Hotdir path'; rsMsgHotDirJustPath = 'Path'; rsMsgHotDirTarget = 'Hotdir target'; rsMsgHotDirSubMenuName = 'Submenu name'; rsMsgHotDirModifiedWantToSave = 'Directory Hotlist has been modified. Do you want to save before to exit?'; rsMsgHotDirSimpleName = 'Name:'; rsMsgHotDirSimpleSeparator = '(separator)'; rsMsgHotDirSimpleMenu = 'Menu name:'; rsMsgHotDirSimpleEndOfMenu = '(end of sub menu)'; rsMsgHotDirSimpleCommand = 'Command:'; rsMsgHotDirCommandName = 'Do command'; rsMsgHotDirCommandSample = 'cm_somthing'; rsMsgHotDirDemoName = 'This is hot dir named '; rsMsgHotDirDemoPath = 'This will change active frame to the following path:'; rsMsgHotDirDemoCommand = 'This will execute the following command:'; rsMsgHotDirDemoTarget = 'And inactive frame would change to the following path:'; rsMsgHotDirLocateHotlistFile = 'Locate ".hotlist" file to import'; rsMsgHotDirWhereToSave = 'Enter location and filename where to save a Directory Hotlist file'; rsMsgHotDirRestoreWhat = 'Enter location and filename of Directory Hotlist to restore'; rsMsgHotDirImportall = 'Import all!'; rsMsgHotDirImportSel = 'Import selected'; rsMsgHotDirImportHotlist = 'Import Directory Hotlist - Select the entries you want to import'; rsMsgHotDirExportall = 'Export all!'; rsMsgHotDirExportSel = 'Export selected'; rsMsgHotDirExportHotlist = 'Export Directory Hotlist - Select the entries you want to export'; rsMsgHotDirNbNewEntries = 'Number of new entries: %d'; rsMsgHotDirTotalExported = 'Total entries exported: '; rsMsgHotDirErrorExporting = 'Error exporting entries...'; rsMsgHotDirNothingToExport = 'Nothing selected to export!'; rsMsgHotDirTipSpecialDirBut = 'Some functions to select appropriate path relative, absolute, windows special folders, etc.'; rsMsgHotDirTipOrderPath = 'Determine if you want the active frame to be sorted in a specified order after changing directory'; rsMsgHotDirTipOrderTarget = 'Determine if you want the not active frame to be sorted in a specified order after changing directory'; rsMsgHotDirTotalBackuped = 'Total entries saved: %d'+#$0A+#$0A+'Backup filename: %s'; rsMsgHotDirErrorBackuping = 'Error backuping entries...'; rsHotDirWarningAbortRestoreBackup = 'Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.'+#$0A+#$0A+ 'Are you sure you want to proceed?'; rsHotDirNothingToImport = 'Sorry, nothing detected to import!'; rsHotDirForceSortingOrderChoices = 'none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9'; //Special dir related rsMsgSpecialDirUseDC = 'Use Double Commander special path...'; rsMsgSpecialDirUseTC = 'Use Windows special folder (TC)...'; rsMsgSpecialDirUseOther = 'Use other Windows special folder...'; rsMsgSpecialDirEnvVar = 'Use environment variable...'; rsMsgSpecialDirMkDCRel = 'Make relative to Double Commander special path...'; rsMsgSpecialDirMkTCTel = 'Make relative to Windows special folder (TC)...'; rsMsgSpecialDirMkWnRel = 'Make relative to other Windows special folder...'; rsMsgSpecialDirMkEnvRel = 'Make relative to environment variable...'; rsMsgSpecialDirMkAbso = 'Make path absolute'; rsMsgSpecialDirAddActi = 'Add path from active frame'; rsMsgSpecialDirAddNonActi = 'Add path from inactive frame'; rsMsgSpecialDirBrowsSel = 'Browse and use selected path'; rsMsgSpecialDir = 'Special Dirs'; rsMsgSpecialDirGotoDC = 'Go to Double Commander special path...'; rsMsgSpecialDirGotoTC = 'Go to Windows special folder (TC)...'; rsMsgSpecialDirGotoOther = 'Go to other Windows special folder...'; rsMsgSpecialDirGotoEnvVar = 'Go to environment variable...'; rsMsgSpecialDirUseHotDir = 'Use hotdir path'; rsMsgSpecialDirMakeRelToHotDir = 'Make relative to hotdir path'; //Favorite Tabs related rsMsgFavoriteTabsModifiedWantToSave = 'Favorite Tabs have been modified. Do you want to save before to exit?'; rsMsgFavoriteTabsEnterName = 'Enter a name this Favorite Tabs entry'; rsMsgFavoriteTabsEnterNameTitle = 'Saving a new Favorite Tabs entry'; rsMsgFavoriteTabsSubMenuName = 'Submenu name'; rsMsgFavoriteTabsImportSubMenuName = 'Legacy tabs imported'; rsMsgFavoriteTabsDragHereEntry = 'Drag here other entries'; rsMsgFavoriteTabsName = 'Name'; rsMsgFavoriteTabsSimpleSeparator = '(separator)'; rsMsgFavoriteTabsSimpleMenu = 'Menu name:'; rsMsgFavoriteTabsEndOfMenu = '(end of sub menu)'; rsMsgFavortieTabsSaveOverExisting = 'Save current tabs over existing Favorite Tabs entry'; rsMsgFavoriteTabsSaveLastLoadOver = 'Save to Favorite Tabs over last loaded entry (%s)'; rsOptFavoriteTabsWhereToAddInList = 'Add at beginning;Add at the end;Alphabetical sort'; rsMsgFavoriteTabsNameSample = 'This will load your Favorites Tabs entry setup called %s'; rsMsgFavoriteTabsThisWillLoadFavTabs = 'This will load the Favorite Tabs: "%s"'; rsMsgFavoriteTabsHasBeenAdded = 'Favorite Tabs have been added in memory!'; //Don't write "Saved" since it will be saved only when quiting. rsMsgFavoriteTabsDeleteAllEntries = 'Are you sure you want to remove all entries of your Favorite Tabs? (There is no "undo" to this action!)'; rsMsgFavoriteTabsErrorLoading = 'Error loading Favorite Tabs...'; rsMsgFavoriteTabsErrorSaving = 'Error saving Favorite Tabs...'; rsTitleRenameFavTabs = 'Rename Favorite Tabs'; rsMsgRenameFavTabs = 'Enter new friendly name for this Favorite Tabs'; rsTitleRenameFavTabsMenu = 'Rename Favorite Tabs sub-menu'; rsMsgRenameFavTabsMenu = 'Enter new name for this menu'; rsMsgFavoriteTabsImportedSuccessfully = 'Number of file(s) imported successfully: %d on %d'; rsMsgFavoriteTabsExportedSuccessfully = 'Number of Favorite Tabs exported successfully: %d on %d'; rsMsgFavoriteTabsModifiedNoImport = 'Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?'; rsMsgFavoriteTabsSimpleMode = 'Keep saving dir history with Favorite Tabs:'; rsMsgFavoriteTabsExtraMode = 'Default extra setting for save dir history for new Favorite Tabs:'; rsTabsActionOnDoubleClickChoices = 'Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu'; rsFavTabsPanelSideSelection = 'Left;Right;Active;Inactive;Both;None'; rsFavTabsSaveDirHistory = 'No;Yes'; rsMsgFavoriteTabsImportTitle = 'Select .tab file(s) to import (could be more than one at the time!)'; //Total Commander related message rsMsgLocateTCExecutable = 'Locate TC executable file (totalcmd.exe or totalcmd64.exe)'; rsMsgLocateTCConfiguation = 'Locate TC configuration file (wincmd.ini)'; rsDefaultImportedTCToolbarHint = 'Imported TC toolbar'; rsDefaultImportedDCToolbarHint = 'Imported DC toolbar'; rsFilenameExportedTCBarPrefix = 'Exported_from_DC'; // for context menu rsMnuActions = 'Actions'; rsMnuOpen = 'Open'; rsMnuView = 'View'; rsMnuEdit = 'Edit'; rsMnuOpenWith = 'Open with'; rsMnuOpenWithOther = 'Other...'; rsMnuMount = 'Mount'; rsMnuUmount = 'Unmount'; rsMnuNoMedia = 'No media available'; rsMnuEject = 'Eject'; rsMnuSortBy = 'Sort by'; rsMnuNew = 'New'; rsMnuPackHere = 'Pack here...'; rsMnuExtractHere = 'Extract here...'; // for main menu rsMnuMapNetworkDrive = 'Map Network Drive...'; rsMnuDisconnectNetworkDrive = 'Disconnect Network Drive...'; // wcx module messages rsMsgSelLocNextVol = 'Please select location of next volume'; rsMsgNextVolUnpack = 'Next volume will be unpacked'; // wcx module errors messages rsMsgErrEndArchive = 'No more files in archive'; rsMsgErrNoMemory = 'Not enough memory'; rsMsgErrBadData = 'Data is bad'; rsMsgErrBadArchive = 'CRC error in archive data'; rsMsgErrUnknownFormat = 'Archive format unknown'; rsMsgErrEOpen = 'Cannot open existing file'; rsMsgErrECreate = 'Cannot create file'; rsMsgErrEClose = 'Error closing file'; rsMsgErrERead = 'Error reading from file'; rsMsgErrEWrite = 'Error writing to file'; rsMsgErrSmallBuf = 'Buffer too small'; rsMsgErrEAborted = 'Function aborted by user'; rsMsgErrNoFiles = 'No files found'; rsMsgErrTooManyFiles = 'Too many files to pack'; rsMsgErrNotSupported = 'Function not supported!'; rsMsgErrInvalidLink = 'Invalid link'; // Vfs rsVfsNetwork = 'Network'; // Buttons. rsDlgButtonOK = '&OK'; rsDlgButtonNo = '&No'; rsDlgButtonYes = '&Yes'; rsDlgButtonCancel = '&Cancel'; rsDlgButtonNone = 'Non&e'; rsDlgButtonAppend = 'A&ppend'; rsDlgButtonResume = '&Resume'; rsDlgButtonRename = 'R&ename'; rsDlgButtonCopyInto = 'Copy &Into'; rsDlgButtonCopyIntoAll = 'Copy Into &All'; rsDlgButtonOverwrite = '&Overwrite'; rsDlgButtonOverwriteAll = 'Overwrite &All'; rsDlgButtonOverwriteOlder = 'Overwrite All Ol&der'; rsDlgButtonOverwriteSmaller = 'Overwrite All S&maller'; rsDlgButtonOverwriteLarger = 'Overwrite All &Larger'; rsDlgButtonAutoRenameSource = 'A&uto-rename source files'; rsDlgButtonSkip = '&Skip'; rsDlgButtonSkipAll = 'S&kip All'; rsDlgButtonIgnoreAll = 'I&gnore All'; rsDlgButtonAll = 'A&ll'; rsDlgButtonRetry = 'Re&try'; rsDlgButtonAbort = 'Ab&ort'; rsDlgButtonOther = 'Ot&her'; rsDlgButtonContinue = '&Continue'; rsDlgButtonExitProgram = 'E&xit program'; // Log file rsMsgLogSuccess = 'Done: '; rsMsgLogError = 'Error: '; rsMsgLogInfo = 'Info: '; rsMsgLogCopy = 'Copy file %s'; rsMsgLogMove = 'Move file %s'; rsMsgLogDelete = 'Delete file %s'; rsMsgLogWipe = 'Wipe file %s'; rsMsgLogLink = 'Create link %s'; rsMsgLogSymLink = 'Create symlink %s'; rsMsgLogMkDir = 'Create directory %s'; rsMsgLogRmDir = 'Remove directory %s'; rsMsgLogWipeDir = 'Wipe directory %s'; rsMsgLogPack = 'Pack to file %s'; rsMsgLogExtract = 'Extract file %s'; rsMsgLogTest = 'Test file integrity %s'; rsMsgLogExtCmdLaunch = 'Launch external'; rsMsgLogExtCmdResult = 'Result external'; rsMsgLogOptionsModifiedWantToSave = 'Options regarding log have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; rsSearchResult = 'Search result'; rsShowHelpFor = '&Show help for %s'; rsClipboardContainsInvalidToolbarData = 'Clipboard doesn''t contain any valid toolbar data.'; //Terminal rsMsgTerminalOptionsModifiedWantToSave = 'Options regarding terminal have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; //Panel Color Configuration rsMsgFilePanelColorModifiedWantToSave = 'Options regarding panel color have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; rsMsgPanelPreview = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.'; // File operations dialog rsDlgAllOpComplete = 'All operations completed'; rsDlgAllOpProgress = 'Progress of all operations %d %%'; rsDlgCalcStatistics = 'Calculate files and folders'; rsDlgCheckSumCalc = 'Calculate checksum...'; rsDlgCheckSumVerify = 'Verify checksum...'; rsDlgCp = 'Copy file(s)'; rsDlgDel = 'Delete file(s)'; rsDlgMv = 'Move file(s)'; rsDlgOpPause = 'Pau&se'; rsDlgOpStart = '&Start'; rsDlgQueue = 'Queue'; rsDlgSpeed = 'Speed %s/s'; rsDlgSpeedTime = 'Speed %s/s, time remaining %s'; rsDlgSplit = 'Split'; rsDlgWipe = 'Wipe file(s)'; // File operations rsFileOpFileExistsOptions = 'Ask;Overwrite;Overwrite Older;Skip'; rsFileOpDirectoryExistsOptions = 'Ask;Overwrite;Copy into;Skip'; rsFileOpSetPropertyErrorOptions = 'Ask;Don''t set anymore;Ignore errors'; // Viewer rsViewAboutText = 'Internal Viewer of Double Commander.'; rsViewNotFound = '%s not found!'; rsViewEncoding = 'Encoding'; rsViewNewSize = 'New Size'; rsViewImageType = 'Image Type'; rsViewBadQuality = 'Bad Quality'; // Editor rsEditGotoLineTitle = 'Goto Line'; rsEditGotoLineQuery = 'Goto line:'; rsEditAboutText = 'Internal Editor of Double Commander.'; // Editor Highlighters rsSynLangPlainText = 'Plain text'; rsSynDefaultText = 'Default text'; // Columns in file panel rsColName = 'Name'; rsColExt = 'Ext'; rsColSize = 'Size'; rsColDate = 'Date'; rsColAttr = 'Attr'; // Filter status in file panel rsFilterStatus = 'FILTER'; rsSearchStatus = 'SEARCH'; // Cancel operations in file panel rsCancelFilter = 'Cancel Quick Filter'; rsCancelOperation = 'Cancel Current Operation'; // File function names rsFuncName = 'Name'; rsFuncExt = 'Extension'; rsFuncSize = 'Size'; rsFuncAttr = 'Attributes'; rsFuncPath = 'Path'; rsFuncGroup = 'Group'; rsFuncOwner = 'Owner'; rsFuncMTime = 'Modification date/time'; rsFuncCTime = 'Creation date/time'; rsFuncATime = 'Access date/time'; rsFuncHTime = 'Change date/time'; rsFuncLinkTo = 'Link to'; rsFuncNameNoExt = 'Name without extension'; rsFuncType = 'Type'; rsFuncComment = 'Comment'; rsFuncCompressedSize = 'Compressed size'; // Tools rsToolViewer = 'Viewer'; rsToolEditor = 'Editor'; rsToolDiffer = 'Differ'; rsToolTerminal = 'Terminal'; rsToolErrorOpeningViewer = 'Error opening viewer'; rsToolErrorOpeningEditor = 'Error opening editor'; rsToolErrorOpeningDiffer = 'Error opening differ'; rsToolErrorOpeningTerminal = 'Error opening terminal'; // Configure custom columns dialog rsConfColDelete = 'Delete'; rsConfColCaption = 'Caption'; rsConfColWidth = 'Width'; rsConfColAlign = 'Align'; rsConfColFieldCont = 'Field contents'; rsConfColMove='Move'; rsConfColConfig='Config'; rsConfCustHeader='Customize column'; // File properties dialog rsPropsYes = 'Yes (%s)'; rsPropsNo = 'No'; rsPropsFolder = 'Directory'; rsPropsFile = 'File'; rsPropsSpChrDev = 'Special character device'; rsPropsSpBlkDev = 'Special block device'; rsPropsNmdPipe = 'Named pipe'; rsPropsSymLink = 'Symbolic link'; rsPropsSocket = 'Socket'; rsPropsUnknownType = 'Unknown type'; rsPropsContains = 'Files: %d, folders: %d'; rsPropsErrChMod = 'Can not change access rights for "%s"'; rsPropsErrChOwn = 'Can not change owner for "%s"'; // Compare by content Dialog rsDiffMatches = ' Matches: '; rsDiffModifies = ' Modifies: '; rsDiffAdds = ' Adds: '; rsDiffDeletes = ' Deletes: '; rsDiffFilesIdentical = 'The two files are identical!'; // Find files dialog rsFindSearchFiles = 'Find files'; rsFindDefineTemplate = 'Define template'; rsFindScanning = 'Scanning'; rsFindScanned = 'Scanned: %d'; rsFindFound = 'Found: %d'; rsFindWhereBeg = 'Begin at'; rsFindDirNoEx = 'Directory %s does not exist!'; rsFindDepthAll = 'all (unlimited depth)'; rsFindDepthCurDir = 'current dir only'; rsFindDepth = '%s level(s)'; rsFindSaveTemplateCaption = 'Save search template'; rsFindSaveTemplateTitle = 'Template name:'; rsSearchTemplateUnnamed = '<unnamed template>'; rsTimeUnitSecond = 'Second(s)'; rsTimeUnitMinute = 'Minute(s)'; rsTimeUnitHour = 'Hour(s)'; rsTimeUnitDay = 'Day(s)'; rsTimeUnitWeek = 'Week(s)'; rsTimeUnitMonth = 'Month(s)'; rsTimeUnitYear = 'Year(s)'; rsSizeUnitBytes = 'Bytes'; rsSizeUnitKBytes = 'Kilobytes'; rsSizeUnitMBytes = 'Megabytes'; rsSizeUnitGBytes = 'Gigabytes'; rsSizeUnitTBytes = 'Terabytes'; // Other rsCopyNameTemplate = 'Copy (%d) %s'; // Symlink dialog rsSymErrCreate = 'Error creating symlink.'; // Hardlink dialog rsHardErrCreate = 'Error creating hardlink.'; // Linker dialog rsLinkMsgOK = 'Linker complete'; // Splitter dialog rsSplitSelDir = 'Select directory:'; rsSplitErrFileSize = 'Incorrect file size format!'; rsSplitErrDirectory = 'Unable to create target directory!'; rsSplitErrSplitFile = 'Unable to split the file!'; rsSplitMsgManyParts = 'The number of parts is more than 100! Continue?'; // MultiRename dialog rsMulRenFileNameStyleList = 'No change;UPPERCASE;lowercase;First char uppercase;' + 'First Char Of Every Word Uppercase;'; // CheckSumCalcVerify dialog rsCheckSumVerifyTitle = 'Verify checksum'; rsCheckSumVerifyText = 'Enter checksum and select algorithm:'; // CheckSumVerify dialog rsCheckSumVerifyGeneral = 'General:'; rsCheckSumVerifyTotal = 'Total:'; rsCheckSumVerifySuccess = 'Success:'; rsCheckSumVerifyMissing = 'Missing:'; rsCheckSumVerifyBroken = 'Broken:'; rsCheckSumVerifyReadError = 'Read error:'; // Drive status rsDriveNoMedia = '<no media>'; rsDriveNoLabel = '<no label>'; // Edit rsEditNewFile = 'new.txt'; rsEditNewOpen = 'Open file'; rsEditNewFileName = 'Filename:'; // Edit search rsEditSearchCaption = 'Search'; rsEditSearchReplace ='Replace'; rsEditSearchFrw = '&Forward'; rsEditSearchBack = '&Backward'; rsZeroReplacement = 'No replacement took place.'; rsXReplacements = 'Number of replacement: %d'; // Options editors rsOptionsEditorArchivers = 'Archivers'; rsOptionsEditorAutoRefresh = 'Auto refresh'; rsOptionsEditorBehavior = 'Behaviors'; rsOptionsEditorColors = 'Colors'; rsOptionsEditorBriefView = 'Brief'; rsOptionsEditorColumnsView = 'Columns'; rsOptionsEditorCustomColumns = 'Custom columns'; rsOptionsEditorConfiguration = 'Configuration'; rsOptionsEditorDragAndDrop = 'Drag & drop'; rsOptionsEditorDrivesListButton = 'Drives list button'; rsOptionsEditorFileOperations = 'File operations'; rsOptionsEditorFilePanels = 'File panels'; rsOptionsEditorFileTypes = 'File types'; rsOptionsEditorFilesViews = 'Files views'; rsOptionsEditorFolderTabs = 'Folder tabs'; rsOptionsEditorFolderTabsExtra = 'Folder tabs extra'; rsOptionsEditorFonts = 'Fonts'; rsOptionsEditorHighlighters = 'Highlighters'; rsOptionsEditorHotKeys = 'Hot keys'; rsOptionsEditorIcons = 'Icons'; rsOptionsEditorIgnoreList = 'Ignore list'; rsOptionsEditorKeyboard = 'Keys'; rsOptionsEditorLanguage = 'Language'; rsOptionsEditorLayout = 'Layout'; rsOptionsEditorLog = 'Log'; rsOptionsEditorMiscellaneous = 'Miscellaneous'; rsOptionsEditorMouse = 'Mouse'; rsOptionsEditorPlugins = 'Plugins'; rsOptionsEditorQuickSearch = 'Quick search/filter'; rsOptionsEditorTerminal = 'Terminal'; rsOptionsEditorToolbar = 'Toolbar'; rsOptionsEditorToolbarComplement = 'Complements'; rsOptionsEditorTools = 'Tools'; rsOptionsEditorTooltips = 'Tooltips'; rsOptionsEditorFileAssoc = 'File associations'; rsOptionsEditorFileAssicExtra = 'File associations extra'; rsOptionsEditorDirectoryHotlist = 'Directory Hotlist'; rsOptionsEditorFavoriteTabs = 'Favorite Tabs'; //------------------------------- rsOptConfigSortOrder = 'Classic, legacy order;Alphabetic order (but language still first)'; rsOptDifferFramePosition = 'Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right'; //------------------------------- rsOptArchiveParam = 'Parameter'; rsOptArchiveValue = 'Value'; rsOptArchiveDelete = 'Delete:'; rsOptArchiveTest = 'Test:'; rsOptArchiveExtractWithoutPath = 'Extract without path:'; rsOptArchiveSelfExtract = 'Create self extracting archive:'; rsOptArchiveID = 'ID:'; rsOptArchiveIDPos = 'ID Position:'; rsOptArchiveIDSeekRange = 'ID Seek Range:'; rsOptArchivePasswordQuery = 'Password query string:'; rsOptArchiveFormMode = 'Format parsing mode:'; //------------------------------- rsOptEnterExt = 'Enter extension'; rsOptAssocPluginWith = 'Associate plugin "%s" with:'; rsOptEnable = 'Enable'; rsOptDisable = 'Disable'; rsOptMouseSelectionButton = 'Left button;Right button;'; rsOptAutoSizeColumn = 'First;Last;'; rsOptTabsPosition = 'Top;Bottom;'; rsOptArchiveTypeName = 'Archive type name:'; //------------------------------- rsOptExampleMark = 'Mark'; rsOptExampleText = 'Text'; rsOptExampleCursor = 'Cursor'; rsOptExampleMarkCursor = 'Mark + Cursor'; // Hotkeys rsOptHotkeysAddDeleteShortcutLong = 'Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting.'; rsOptHotkeysAddShortcutButton = 'Add shortcut'; rsOptHotkeysCannotSetShortcut = 'Cannot set shortcut'; rsOptHotkeysChangeShortcut = 'Change shortcut'; rsOptHotkeysDeleteTrashCanOverrides = 'Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?'; rsOptHotkeysDeleteTrashCanParameterExists = 'Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?'; rsOptHotkeysSetDeleteShortcut = 'Set shortcut to delete file'; rsOptHotkeysShortcutForDeleteAlreadyAssigned = 'For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?'; rsOptHotkeysShortcutForDeleteIsSequence = 'Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work.'; rsOptHotkeysCommand = 'Command'; rsOptHotkeysDescription = 'Description'; rsOptHotkeysFixParameter = 'Fix parameter'; rsOptHotkeysHotkeys = 'Hotkeys'; rsOptHotkeysHotkey = 'Hotkey'; rsOptHotkeysNoHotkey = '<none>'; rsOptHotkeysParameters = 'Parameters'; rsOptHotkeysShortCutUsed = 'Shortcut in use'; rsOptHotkeysShortCutUsedText1 = 'Shortcut %s is already used.'; rsOptHotkeysShortCutUsedText2 = 'Change it to %s?'; rsOptHotkeysUsedBy = 'used for %s in %s'; rsOptHotkeysUsedWithDifferentParams = 'used for this command but with different parameters'; rsOptHotkeysAddHotkey = 'Add hotkey for %s'; rsOptHotkeysEditHotkey = 'Edit hotkey for %s'; rsHotkeyCategoryMain = 'Main'; rsHotkeyCategoryViewer = 'Viewer'; rsHotkeyCategoryDiffer = 'Differ'; rsHotkeyCategoryCopyMoveDialog = 'Copy/Move Dialog'; rsHotkeyCategoryEditCommentDialog = 'Edit Comment Dialog'; rsCmdCategoryListInOrder='All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log'; rsCmdKindOfSort='Legacy sorted;A-Z sorted'; rsMsgThisIsNowInClipboard = '"%s" is now in the clipboard'; rsSimpleWordAll = 'All'; rsSimpleWordCommand = 'Command'; rsSimpleWordCategory = 'Category'; rsSimpleWordFilename = 'Filename'; rsSimpleWordParameter = 'Param'; rsSimpleWordWorkDir = 'WorkDir'; rsSimpleWordResult = 'Result'; rsSimpleWordPreview = 'Preview'; rsSimpleWordColumnSingular = 'Column'; rsSimpleWordSaved = 'Saved!'; // Plugins rsOptPluginsActive = 'Active'; rsOptPluginsName = 'Name'; rsOptPluginsRegisteredFor = 'Registered for'; rsOptPluginsFileName = 'File name'; rsOptPluginAlreadyAssigned = 'Plugin %s is already assigned for the following extensions:'; //------------------------------- rsOptSortMethod = 'Alphabetical, considering accents;Natural sorting: alphabetical and numbers'; rsOptSortCaseSens = 'not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)'; rsOptSortFolderMode = 'sort by name and show first;sort like files and show first;sort like files'; rsOptNewFilesPosition = 'at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list'; rsOptUpdatedFilesPosition = 'don''t change position;use the same setting as for new files;to sorted position'; rsOptFileOperationsProgressKind = 'separate window;minimized separate window;operations panel'; rsOptTypeOfDuplicatedRename = 'DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext'; rsOptFileSizeFormat = 'float;B;K;M;G'; // Keyboard rsOptLetters = 'None;Command Line;Quick Search;Quick Filter'; // Directory hotlist rsOptAddFromMainPanel = 'Add at beginning;Add at the end;Smart add'; //File Associations rsMsgTitleExtNotInFileType = 'Extension of selected file is not in any recognized file types'; rsMsgSekectFileType = 'Select to which file type to add extension "%s"'; rsMsgCreateANewFileType = '< Create a new file type "%s files" >'; rsMsgEnterNewFileTypeName = 'Enter name of new file type to create for extension "%s"'; rsMsgEnterCustomAction = 'Enter custom action name:'; rsSimpleWordFiles = 'files'; rsMsgFileAssociationsModifiedWantToSave = 'File extension associations have been modified.'+#$0A+#$0A+'Do you want to save before to exit?'; rsMsgFileAssociationsExtraModifiedWantToSave = 'File extension associations extra options have been modified.'+#$0A+#$0A+'Do you want to save before to exit?'; rsViewWithInternalViewer = 'with internal viewer'; rsEditWithInternalEditor = 'with internal editor'; rsViewWithExternalViewer = 'with external viewer'; rsEditWithExternalEditor = 'with external editor'; rsExecuteViaShell = 'Execute via shell'; rsExecuteViaTerminalClose = 'Execute via terminal and close'; rsExecuteViaTerminalStayOpen = 'Execute via terminal and stay open'; rsConfigurationFileAssociation = 'Configure file association'; //Folder tab rsMsgTabsOptionsModifiedWantToSave = 'Options regarding folder tabs have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; rsMsgTabsExtraOptionsModifiedWantToSave = 'Options regarding folder tabs extra have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; //Variables rsConfirmExecution = 'Confirming command line and parameters'; rsVarHelpWith = 'Help with "%" variables'; rsVarOtherExamples = 'Other example of what''s possible'; rsVarOnlyFilename = 'Only filename'; rsVarPath = 'Path, with ending delimiter'; rsVarFullPath = 'Complete filename (path+filename)'; rsVarFilenameNoExt = 'Just filename, no extension'; rsVarOnlyExtension = 'Only file extension'; rsVarRelativePathAndFilename = 'Filename with relative path'; rsVarCurrentPath = 'Path of panel'; rsVarListFilename = 'Temporary filename of list of filenames'; rsVarListFullFilename = 'Temporary filename of list of complete filenames (path+filename)'; rsVarListRelativeFilename = 'Temporary filename of list of filenames with relative path'; rsVarSourcePanel = 'Active panel (source)'; rsVarTargetPanel = 'Inactive panel (target)'; rsVarLeftPanel = 'Left panel'; rsVarRightPanel = 'Right panel'; rsVarBothPanelLeftToRight = 'Both panels, from left to right'; rsVarBothPanelActiveToInactive = 'Both panels, from active to inactive'; rsVarShowCommandPrior = 'Show command prior execute'; rsVarPercentSign = 'Return the percent sign'; rsVarPercentChangeToPound = 'From here to the end of the line, the percent-variable indicator is the "#" sign'; rsVarPoundChangeToPercent = 'From here to the end of the line, the percent-variable indicator is back the "%" sign'; rsVarWillNotBeQuoted = 'Filenames will not be quoted from here'; rsVarWillBeQuoted = 'Filenames will be quoted from here (default)'; rsVarWillNotHaveEndingDelimiter = 'Paths will not have ending delimiter (default)'; rsVarWillHaveEndingDelimiter = 'Paths will have ending delimiter'; rsVarWillNotDoInTerminal = 'Command will be done in terminal, closed at the end'; rsVarWillDoInTerminal = 'Command will be done in terminal, remaining opened at the end'; rsVarSimpleMessage = '%[Simple message]'; rsVarSimpleShowMessage = 'Will show a simple message'; rsVarPromptUserForParam = '%[Prompt user for param;Default value proposed]'; rsVarInputParam = 'Will request request user to enter a parameter with a default suggested value'; rsVarPrependElement = 'Prepend each name with "-a " or what you want'; rsVarEncloseElement = 'Enclose each name in brackets or what you want'; rsVarSecondElementRightPanel = 'Full path of second selected file in right panel'; // Quick Search/Filter rsOptSearchItems = '&Files;Di&rectories;Files a&nd Directories'; rsOptSearchCase = '&Sensitive;&Insensitive'; rsOptSearchOpt = '&Hide filter panel when not focused;Keep saving setting modifications for next session'; // Toolbar rsOptToolbarButtonType = 'S&eparator;Inte&rnal command;E&xternal command;Men&u'; rsImportToolbarProblem = 'Cannot find reference to default bar file'; rsMsgToolbarSaved = 'Saved!'+#$0A+'Toolbar filename: %s'; rsMsgToolbarErrorNotSaved = 'Error! Problem saving toolbar!'; rsMsgTCToolbarWhereToSave = 'Enter location and filename where to save a TC Toolbar file'; rsMsgDCToolbarWhereToSave = 'Enter location and filename where to save a DC Toolbar file'; rsMsgToolbarRestoreWhat = 'Enter location and filename of Toolbar to restore'; rsMsgToolbarLocateTCToolbarFile = 'Locate ".BAR" file to import'; rsMsgToolbarLocateDCToolbarFile = 'Locate ".toolbar" file to import'; rsMsgTCToolbarNotFound = 'Error! Cannot find the desired wanted TC toolbar output folder:'+#$0A+'%s'; rsMsgTCConfigNotFound = 'Error! Cannot find the TC configuration file:'+#$0A+'%s'; rsMsgTCExecutableNotFound = 'Error! Cannot find the TC configuration executable:'+#$0A+'%s'; rsMsgTCisRunning = 'Error! TC is still running but it should be closed for this operation.'+#$0A+'Close it and press OK or press CANCEL to abort.'; rsMsgToolbarModifiedWantToSave = 'Toolbar has been modified. Do you want to save before to exit?'; //Columns Menu rsMenuConfigureCustomColumns= 'Configure custom columns'; rsMenuConfigureThisCustomColumn= 'Configure this custom columns view'; rsMenuConfigureEnterCustomColumnName = 'Enter new custom columns name'; rsMenuConfigureColumnsSaveToChange = 'To change current editing colmuns view, either SAVE, COPY or DELETE current editing one'; rsMenuConfigureColumnsAlreadyExists = 'A columns view with that name already exists.'; rsMsgColumnsModifiedWantToSave = 'Options regarding columns view have been modified.'+#$0A+#$0A+'Do you want to save them before to exit?'; // Operation states. rsOperNotStarted = 'Not started'; rsOperStarting = 'Starting'; rsOperRunning = 'Running'; rsOperPausing = 'Pausing'; rsOperPaused = 'Paused'; rsOperWaitingForFeedback = 'Waiting for user response'; rsOperWaitingForConnection = 'Waiting for access to file source'; rsOperStopping = 'Stopping'; rsOperStopped = 'Stopped'; rsOperFinished = 'Finished'; rsOperAborted = 'Aborted'; rsOperQueued = 'Queued'; // Operations descriptions. rsOperCalculatingCheckSum = 'Calculating checksum'; rsOperCalculatingCheckSumIn = 'Calculating checksum in "%s"'; rsOperCalculatingCheckSumOf = 'Calculating checksum of "%s"'; rsOperCalculatingStatictics = 'Calculating'; rsOperCalculatingStatisticsIn = 'Calculating "%s"'; rsOperCombining = 'Joining'; rsOperCombiningFromTo = 'Joining files in "%s" to "%s"'; rsOperCopying = 'Copying'; rsOperCopyingFromTo = 'Copying from "%s" to "%s"'; rsOperCopyingSomethingTo = 'Copying "%s" to "%s"'; rsOperCreatingDirectory = 'Creating directory'; rsOperCreatingSomeDirectory = 'Creating directory "%s"'; rsOperDeleting = 'Deleting'; rsOperDeletingIn = 'Deleting in "%s"'; rsOperDeletingSomething = 'Deleting "%s"'; rsOperExecuting = 'Executing'; rsOperExecutingSomething = 'Executing "%s"'; rsOperExtracting = 'Extracting'; rsOperExtractingFromTo = 'Extracting from "%s" to "%s"'; rsOperListing = 'Listing'; rsOperListingIn = 'Listing "%s"'; rsOperMoving = 'Moving'; rsOperMovingFromTo = 'Moving from "%s" to "%s"'; rsOperMovingSomethingTo = 'Moving "%s" to "%s"'; rsOperPacking = 'Packing'; rsOperPackingFromTo = 'Packing from "%s" to "%s"'; rsOperPackingSomethingTo = 'Packing "%s" to "%s"'; rsOperSettingProperty = 'Setting property'; rsOperSettingPropertyIn = 'Setting property in "%s"'; rsOperSettingPropertyOf = 'Setting property of "%s"'; rsOperSplitting = 'Splitting'; rsOperSplittingFromTo = 'Splitting "%s" to "%s"'; rsOperTesting = 'Testing'; rsOperTestingSomething = 'Testing "%s"'; rsOperTestingIn = 'Testing in "%s"'; rsOperVerifyingCheckSum = 'Verifying checksum'; rsOperVerifyingCheckSumIn = 'Verifying checksum in "%s"'; rsOperVerifyingCheckSumOf = 'Verifying checksum of "%s"'; rsOperWiping = 'Wiping'; rsOperWipingIn = 'Wiping in "%s"'; rsOperWipingSomething = 'Wiping "%s"'; rsOperWorking = 'Working'; // Generic description for unknown operation //Split/Combine operation special message rsMsgBadCRC32 = 'Bad CRC32 for resulting file:'+#$0A+'"%s"'+#$0A+#$0A+'Do you want to keep the resulting corrupted file anyway?'; rsMsgProvideThisFile = 'Please, make this file available. Retry?'; rsMsgIncorrectFilelength = 'Incorrect resulting filelength for file : "%s"'; rsMSgUndeterminedNumberOfFile = 'Undetermined'; rsMsgInsertNextDisk = 'Please insert next disk or something similar.'+#$0A+#$0A+'It is to allow writing this file:'+#$0A+'"%s"'+#$0A+''+#$0A+'Number of bytes still to write: %d'; msgTryToLocateCRCFile = 'This file cannot be found and could help to validate final combination of files:'+#$0A+'%s'+#$0A+#$0A+'Could you make it available and press "OK" when ready,'+#$0A+'or press "CANCEL" to continue without it?'; // Unhandled error. rsUnhandledExceptionMessage = 'Please report this error to the bug tracker with a description ' + 'of what you were doing and the following file:%s' + 'Press %s to continue or %s to abort the program.'; function GetLanguageName(poFileName : String) : String; procedure lngLoadLng(const sFileName:String); procedure DoLoadLng; implementation uses Forms, Classes, SysUtils, StrUtils, GetText, Translations, uGlobs, uGlobsPaths, uTranslator, uDebug, uFileProcs, DCOSUtils, DCStrUtils; function GetLanguageName(poFileName : String) : String; var poFile : Integer; sLine : String; iPos1, iPos2 : Integer; begin poFile:= mbFileOpen(poFileName, fmOpenRead); // find first msgid line FileReadLn(poFile, sLine); while Pos('msgid', sLine) = 0 do FileReadLn(poFile, sLine); // read msgstr line FileReadLn(poFile, sLine); repeat FileReadLn(poFile, sLine); // find language name line if Pos('X-Native-Language:', sLine) <> 0 then begin iPos1 := Pos(':', sLine) + 2; iPos2 := Pos('\n', sLine) - 1; Result := Copy(sLine, iPos1, (iPos2 - iPos1) + 1); FileClose(poFile); Exit; end; until Pos('msgid', sLine) = 1; FileClose(poFile); Result := 'Unknown'; end; procedure TranslateLCL(poFileName: String); const BidiModeMap: array[Boolean] of TBiDiMode = (bdLeftToRight, {$IF DEFINED(LCLWIN32)} bdRightToLeftNoAlign // see http://bugs.freepascal.org/view.php?id=28483 {$ELSE} bdRightToLeft {$ENDIF} ); var UserLang, LCLLngDir: String; Lang: String = ''; FallbackLang: string = ''; begin LCLLngDir:= gpLngDir + PathDelim + 'lcl' + PathDelim; if NumCountChars('.', poFileName) >= 2 then begin UserLang:= ExtractDelimited(2, poFileName, ['.']); Application.BidiMode:= BidiModeMap[Application.IsRTLLang(UserLang)]; poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [UserLang]); if not mbFileExists(poFileName) then begin GetLanguageIDs(Lang,FallbackLang); poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [Lang]); end; if not mbFileExists(poFileName) then poFileName:= LCLLngDir + Format('lclstrconsts.%s.po', [FallbackLang]); if mbFileExists(poFileName) then Translations.TranslateUnitResourceStrings('LCLStrConsts', poFileName); end; end; procedure lngLoadLng(const sFileName:String); var Lang: String = ''; FallbackLang: String = ''; begin { Localization } if sFileName = 'doublecmd.po' then Exit; // default english interface gPOFileName := sFileName; if not mbFileExists(gpLngDir + gPOFileName) then begin gPOFileName := 'doublecmd.%s.po'; GetLanguageIDs(Lang, FallbackLang); gPOFileName := Format(gPOFileName,[FallbackLang]); end; if not mbFileExists(gpLngDir + gPOFileName) then begin gPOFileName := Format(gPOFileName,[Lang]); end; if mbFileExists(gpLngDir + gPOFileName) then begin DCDebug('Loading lng file: ' + gpLngDir + gPOFileName); LRSTranslator := TTranslator.Create(gpLngDir + gPOFileName); TranslateLCL(gPOFileName); end; end; procedure DoLoadLng; begin lngLoadLng(gPOFileName); end; finalization if Assigned(LRSTranslator) then FreeAndNil(LRSTranslator); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffindview.pas�������������������������������������������������������������������0000644�0001750�0000144�00000002772�12076507125�016007� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Find dialog for Viewer Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: } unit fFindView; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, uOSForms; type TfrmFindView = class(TModalForm) cbDataToFind: TComboBox; btnFind: TBitBtn; btnClose: TBitBtn; cbCaseSens: TCheckBox; procedure FormShow(Sender: TObject); procedure btnFindClick(Sender: TObject); procedure cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; implementation {$R *.lfm} uses LCLProc, LCLType, uDCUtils; procedure TfrmFindView.FormShow(Sender: TObject); begin if cbDataToFind.Text = EmptyStr then begin if cbDataToFind.Items.Count > 0 then cbDataToFind.Text:= cbDataToFind.Items[0]; end; cbDataToFind.SelectAll; cbDataToFind.SetFocus; end; procedure TfrmFindView.btnFindClick(Sender: TObject); begin InsertFirstItem(cbDataToFind.Text, cbDataToFind); ModalResult:= mrOk; end; procedure TfrmFindView.cbDataToFindKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin inherited; if (Key = VK_Down) and (cbDataToFind.Items.Count > 0) then cbDataToFind.DroppedDown:= True; if Key = 13 then begin Key:= 0; btnFind.Click; end; if Key = 27 then begin Key:= 0; ModalResult:= mrCancel; end; end; end. ������doublecmd-0.7.1/src/fchecksumcalc.pas���������������������������������������������������������������0000644�0001750�0000144�00000012322�12612505011�016575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Calculate checksum dialog Copyright (C) 2009-2013 Alexander Koblov (alexx2000@mail.ru) 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 fCheckSumCalc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, fButtonForm, uHash, uOperationsManager; type { TfrmCheckSumCalc } TfrmCheckSumCalc = class(TfrmButtonForm) cbSeparateFile: TCheckBox; cbOpenAfterJobIsComplete: TCheckBox; edtSaveTo: TEdit; lblSaveTo: TLabel; lbHashAlgorithm: TListBox; procedure cbSeparateFileChange(Sender: TObject); procedure edtSaveToChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); private FFileName: String; FAlgorithm: THashAlgorithm; public { public declarations } end; function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; out QueueId: TOperationsManagerQueueIdentifier): Boolean; function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm): Boolean; implementation {$R *.lfm} uses uGlobs, uLng; function ShowCalcCheckSum(var sFileName: String; out SeparateFile: Boolean; out HashAlgorithm: THashAlgorithm; out OpenFileAfterJobCompleted: Boolean; out QueueId: TOperationsManagerQueueIdentifier): Boolean; begin with TfrmCheckSumCalc.Create(Application) do try FFileName:= sFileName; Result:= (ShowModal = mrOK); if Result then begin sFileName:= edtSaveTo.Text; SeparateFile:= cbSeparateFile.Checked; OpenFileAfterJobCompleted:=(cbOpenAfterJobIsComplete.Checked AND cbOpenAfterJobIsComplete.Enabled); HashAlgorithm:= FAlgorithm; QueueId:= QueueIdentifier end; finally Free; end; end; function ShowCalcVerifyCheckSum(out Hash: String; out HashAlgorithm: THashAlgorithm): Boolean; begin with TfrmCheckSumCalc.Create(Application) do try OnShow:= nil; edtSaveTo.Text:= EmptyStr; SessionProperties:= EmptyStr; Caption:= rsCheckSumVerifyTitle; cbSeparateFile.Visible:= False; btnAddToQueue.Visible:= False; btnCreateSpecialQueue.Visible:= False; cbOpenAfterJobIsComplete.Visible:= False; lbHashAlgorithm.OnSelectionChange:= nil; edtSaveTo.OnChange:= @edtSaveToChange; lblSaveTo.Caption:= rsCheckSumVerifyText; Result:= (ShowModal = mrOK); if Result then begin Hash:= Trim(edtSaveTo.Text); Result:= Length(Hash) > 0; HashAlgorithm:= THashAlgorithm(lbHashAlgorithm.ItemIndex); end; finally Free; end; end; { TfrmCheckSumCalc } procedure TfrmCheckSumCalc.cbSeparateFileChange(Sender: TObject); begin if cbSeparateFile.Checked then edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + '*.' + HashFileExt[FAlgorithm] else edtSaveTo.Text:= ExtractFilePath(edtSaveTo.Text) + ExtractFileName(FFileName) + '.' + HashFileExt[FAlgorithm]; cbOpenAfterJobIsComplete.Enabled:=not cbSeparateFile.Checked; end; procedure TfrmCheckSumCalc.edtSaveToChange(Sender: TObject); begin case Length(Trim(edtSaveTo.Text)) of 8: lbHashAlgorithm.ItemIndex:= Integer(HASH_SFV); 32: lbHashAlgorithm.ItemIndex:= Integer(HASH_MD5); 40: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA1); 64: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA256); 96: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA384); 128: lbHashAlgorithm.ItemIndex:= Integer(HASH_SHA512); end; end; procedure TfrmCheckSumCalc.FormCreate(Sender: TObject); var I: THashAlgorithm; begin for I:= Low(HashFileExt) to High(HashFileExt) do begin lbHashAlgorithm.Items.Add(UpperCase(HashFileExt[I])); end; InitPropStorage(Self); // Must be *after* lbHashAlgorithm.Items has been loaded so index is restored correctly. if (lbHashAlgorithm.ItemIndex=-1) AND (lbHashAlgorithm.Count>0) then lbHashAlgorithm.ItemIndex:= 0; end; procedure TfrmCheckSumCalc.FormShow(Sender: TObject); begin edtSaveTo.Text:= FFileName + ExtensionSeparator; lbHashAlgorithmSelectionChange(lbHashAlgorithm,FALSE); end; procedure TfrmCheckSumCalc.lbHashAlgorithmSelectionChange(Sender: TObject; User: boolean); begin FAlgorithm:= THashAlgorithm(lbHashAlgorithm.ItemIndex); edtSaveTo.Text:= ChangeFileExt(edtSaveTo.Text, '.' + HashFileExt[FAlgorithm]); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/foptionshotkeysedithotkey.pas���������������������������������������������������0000644�0001750�0000144�00000042305�12646752277�021401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Editor for hotkeys Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsHotkeysEditHotkey; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons, uHotkeyManager, DCBasicTypes; type TEditHotkeyOption = (ehoHideParams); TEditHotkeyOptions = set of TEditHotkeyOption; { TfrmEditHotkey } TfrmEditHotkey = class(TForm) btnOK: TBitBtn; btnCancel: TBitBtn; btnShowCommandHelp: TButton; cgHKControls: TCheckGroup; lblShortcuts: TLabel; lblHotKeyConflict: TLabel; lblParameters: TLabel; edtParameters: TMemo; pnlShortcuts: TPanel; btnAddShortcut: TSpeedButton; btnRemoveShortcut: TSpeedButton; procedure btnAddShortcutClick(Sender: TObject); procedure btnRemoveShortcutClick(Sender: TObject); procedure btnShowCommandHelpClick(Sender: TObject); procedure cgHKControlsItemClick(Sender: TObject; Index: integer); procedure edtShortcutKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtShortcutKeyPress(Sender: TObject; var Key: char); procedure edtShortcutKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private FCommand: String; FEditMode: Boolean; FForm: String; FForms, FFormsTranslated: TStringList; FOldHotkey: THotkey; FOptions: TEditHotkeyOptions; function ApplyHotkey: Boolean; procedure AddShortcutEditor; {en Check if combination of pressed hotkey and checked controls are already in use. Conflicting hotkeys are deleted if DeleteConflicts parameter is true. } procedure CheckHotKeyConflicts(DeleteConflicts: Boolean = false); procedure FillHKControlList; function GetShortcutsEditorsCount: Integer; function GetParameters: TDynamicStringArray; function GetShortcuts: TDynamicStringArray; function GetTranslatedControlName(const AName: String): String; function GetTranslatedFormName(const AName: String): String; procedure RemoveLastShortcutEditor; procedure SetBitmapOrCaption(Button: TSpeedButton; const AIconName, ACaption: String); procedure SetCommand(NewCommand: String); procedure SetControls(const NewControls: TDynamicStringArray); procedure SetHotkey(Hotkey: THotkey); procedure SetParameters(const NewParameters: TDynamicStringArray); procedure SetShortcuts(const NewShortcuts: TDynamicStringArray); public destructor Destroy; override; function Execute(EditMode: Boolean; Form: String; Command: String; Hotkey: THotkey; AControls: TDynamicStringArray; Options: TEditHotkeyOptions = []): Boolean; function CloneNewHotkey: THotkey; end; implementation {$R *.lfm} uses HelpIntfs, LCLType, dmHelpManager, uOSUtils, uKeyboard, uLng, uGlobs, uFormCommands, DCStrUtils, uPixMapManager; const MaxShortcutSequenceLength = 5; { TfrmEditHotkey } procedure TfrmEditHotkey.AddShortcutEditor; var EditControl: TEdit; begin if GetShortcutsEditorsCount < MaxShortcutSequenceLength then begin EditControl := TEdit.Create(Self); EditControl.Font.Color:=clRed; EditControl.Parent := pnlShortcuts; EditControl.OnKeyDown := @edtShortcutKeyDown; EditControl.OnKeyPress := @edtShortcutKeyPress; EditControl.OnKeyUp := @edtShortcutKeyUp; end; end; function TfrmEditHotkey.ApplyHotkey: Boolean; procedure UpdateHotkey(ShouldBePresent: Boolean; HotkeyOld, HotkeyNew: THotkey; Hotkeys: THotkeys); var hotkey: THotkey; begin if FEditMode then begin hotkey := Hotkeys.Find(HotkeyOld.Shortcuts); if Assigned(hotkey) and (hotkey.Command = FCommand) then begin if ShouldBePresent then begin hotkey.Assign(HotkeyNew); Hotkeys.UpdateHotkey(hotkey); end else if hotkey.SameParams(HotkeyOld.Params) then Hotkeys.Remove(hotkey); end else if ShouldBePresent then Hotkeys.Add(HotkeyNew.Shortcuts, HotkeyNew.Params, HotkeyNew.Command); end else if ShouldBePresent then begin // Overwrite old hotkey in Add mode too. hotkey := Hotkeys.Find(HotkeyNew.Shortcuts); if Assigned(hotkey) and (hotkey.Command = FCommand) then begin hotkey.Assign(HotkeyNew); Hotkeys.UpdateHotkey(hotkey); end else Hotkeys.Add(HotkeyNew.Shortcuts, HotkeyNew.Params, HotkeyNew.Command); end; end; var i: Integer; HMForm: THMForm; HMControl: THMControl; NewHotkey: THotkey; IsFormHotkey: Boolean; begin Result := False; NewHotkey := CloneNewHotkey; try // check for invalid hotkey if Length(NewHotkey.Shortcuts) = 0 then Exit; if (lblHotKeyConflict.Caption <> EmptyStr) then begin if (MessageDlg(rsOptHotkeysShortCutUsed, // delete command on assigned shortcut Format(rsOptHotkeysShortCutUsedText1, // if another was applied [ShortcutsToText(NewHotkey.Shortcuts)]) + LineEnding + Format(rsOptHotkeysShortCutUsedText2, [NewHotkey.Command]), mtConfirmation, mbYesNo, 0) = mrYes) then CheckHotKeyConflicts(True) else Exit; end; HMForm := HotMan.Forms.FindOrCreate(FForm); IsFormHotkey := True; for i := 0 to cgHKControls.Items.Count - 1 do begin HMControl := THMControl(cgHKControls.Items.Objects[i]); if Assigned(HMControl) then begin if cgHKControls.Checked[i] then IsFormHotkey := False; UpdateHotkey(cgHKControls.Checked[i], FOldHotkey, NewHotkey, HMControl.Hotkeys); end; end; UpdateHotkey(IsFormHotkey, FOldHotkey, NewHotkey, HMForm.Hotkeys); Result := True; finally NewHotkey.Free; end; end; procedure TfrmEditHotkey.btnAddShortcutClick(Sender: TObject); begin AddShortcutEditor; end; procedure TfrmEditHotkey.btnRemoveShortcutClick(Sender: TObject); begin RemoveLastShortcutEditor; end; procedure TfrmEditHotkey.btnShowCommandHelpClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor(edtParameters.HelpKeyword); end; procedure TfrmEditHotkey.cgHKControlsItemClick(Sender: TObject; Index: integer); begin CheckHotKeyConflicts; end; procedure TfrmEditHotkey.CheckHotKeyConflicts(DeleteConflicts: Boolean); var ConflictsCount: Integer; ShortConflicts, LongConflicts: String; procedure AddCommandConflict(Hotkey: THotkey; const AName: String); var sConflict: String; begin sConflict := Format(rsOptHotkeysUsedBy, [Hotkey.Command, AName]); AddStrWithSep(ShortConflicts, sConflict, LineEnding); AddStrWithSep(LongConflicts, sConflict, LineEnding); end; procedure AddParamsConflict(Hotkey: THotkey); var sConflict: String; Param: String; begin sConflict := rsOptHotkeysUsedWithDifferentParams; AddStrWithSep(ShortConflicts, sConflict, LineEnding); if Length(Hotkey.Params) > 0 then begin sConflict := sConflict + ':'; for Param in Hotkey.Params do AddStrWithSep(sConflict, ' ' + Param, LineEnding); end; AddStrWithSep(LongConflicts, sConflict, LineEnding); end; procedure CheckHotkey(Hotkeys: THotkeys; const AObjectName: String; HotkeyToSearch: THotkey); var Hotkey: THotkey; begin Hotkey := Hotkeys.Find(HotkeyToSearch.Shortcuts); if Assigned(Hotkey) then begin if Hotkey.Command <> FCommand then begin Inc(ConflictsCount); if DeleteConflicts then Hotkeys.Remove(Hotkey) else AddCommandConflict(Hotkey, GetTranslatedControlName(AObjectName)); end else if not Hotkey.SameParams(HotkeyToSearch.Params) then begin Inc(ConflictsCount); if DeleteConflicts then Hotkeys.Remove(Hotkey) else AddParamsConflict(Hotkey); end; end; end; var HMForm: THMForm; HMControl: THMControl; i: Integer; IsFormHotKey: Boolean; Hotkey: THotkey; begin lblHotKeyConflict.Caption := EmptyStr; lblHotKeyConflict.Hint := EmptyStr; HMForm := HotMan.Forms.Find(FForm); if not Assigned(HMForm) then Exit; Hotkey := CloneNewHotkey; try ConflictsCount := 0; if Length(Hotkey.Shortcuts) > 0 then begin IsFormHotKey := True; // search if any checked control has same hotkey assigned somewhere else for i := 0 to cgHKControls.Items.Count - 1 do begin if cgHKControls.Checked[i] then begin IsFormHotKey := False; HMControl := THMControl(cgHKControls.Items.Objects[i]); if Assigned(HMControl) then CheckHotkey(HMControl.Hotkeys, HMControl.Name, Hotkey); end; end; if IsFormHotKey then CheckHotkey(HMForm.Hotkeys, HMForm.Name, Hotkey); lblHotKeyConflict.Caption := ShortConflicts; lblHotKeyConflict.Hint := LongConflicts; end; lblHotKeyConflict.Visible := ConflictsCount > 0; finally Hotkey.Free; end; end; function TfrmEditHotkey.CloneNewHotkey: THotkey; begin Result := THotkey.Create; Result.Shortcuts := GetShortcuts; Result.Params := GetParameters; Result.Command := FCommand; end; destructor TfrmEditHotkey.Destroy; begin inherited Destroy; FForms.Free; FFormsTranslated.Free; FOldHotkey.Free; end; procedure TfrmEditHotkey.edtShortcutKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ShortCut: TShortCut; sShortCut: String; EditControl: TEdit; begin ShortCut := KeyToShortCutEx(Key, GetKeyShiftStateEx); sShortCut := ShortCutToTextEx(ShortCut); EditControl := Sender as TEdit; // Allow closing the dialog if Escape pressed twice. if (ShortCut <> VK_ESCAPE) or (EditControl.Text <> sShortCut) then begin EditControl.Text := sShortCut; Key := 0; btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; CheckHotKeyConflicts; end; end; procedure TfrmEditHotkey.edtShortcutKeyPress(Sender: TObject; var Key: char); var EditControl: TEdit; begin EditControl := Sender as TEdit; EditControl.Text := ''; btnOK.Enabled := GetShortcuts <> nil; Key := #0; end; procedure TfrmEditHotkey.edtShortcutKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var ShortCut: TShortCut; sShortCut: String; EditControl: TEdit; begin ShortCut := KeyToShortCutEx(Key, GetKeyShiftStateEx); sShortCut := ShortCutToTextEx(ShortCut); EditControl := Sender as TEdit; // Select next shortcut editor. if (ShortCut <> VK_ESCAPE) and (sShortCut <> '') and (EditControl.Text = sShortCut) then pnlShortcuts.SelectNext(EditControl, True, True); end; function TfrmEditHotkey.Execute( EditMode: Boolean; Form: String; Command: String; Hotkey: THotkey; AControls: TDynamicStringArray; Options: TEditHotkeyOptions = []): Boolean; begin FEditMode := EditMode; FForm := Form; FOptions := Options; SetHotkey(Hotkey); SetCommand(Command); SetControls(AControls); if EditMode then Caption := Format(rsOptHotkeysEditHotkey, [Command]) else Caption := Format(rsOptHotkeysAddHotkey, [Command]); lblParameters.Visible := not (ehoHideParams in Options); edtParameters.Visible := not (ehoHideParams in Options); btnShowCommandHelp.Visible := not (ehoHideParams in Options); btnOK.Enabled := GetShortcuts <> nil; lblHotKeyConflict.Caption := ''; lblHotKeyConflict.Hint := ''; lblHotKeyConflict.Visible := False; if ShowModal = mrOK then Result := ApplyHotkey else Result := False; end; procedure TfrmEditHotkey.FillHKControlList; var HMForm: THMForm; i: Integer; ControlsList: TStringList; begin ControlsList := TStringList.Create; try HMForm := HotMan.Forms.Find(FForm); if Assigned(HMForm) then begin for i := 0 to HMForm.Controls.Count - 1 do ControlsList.AddObject(HMForm.Controls[i].Name, HMForm.Controls[i]); end; ControlsList.Sort; cgHKControls.Items.Assign(ControlsList); cgHKControls.Visible := cgHKControls.Items.Count <> 0; finally ControlsList.Free; end; end; procedure TfrmEditHotkey.FormCreate(Sender: TObject); begin lblHotKeyConflict.Color := clHighlight; lblHotKeyConflict.Font.Color := clHighlightText; FForms := TStringList.Create; FFormsTranslated := TStringList.Create; TFormCommands.GetCategoriesList(FForms, FFormsTranslated); SetBitmapOrCaption(btnAddShortcut, 'list-add', '+'); SetBitmapOrCaption(btnRemoveShortcut, 'list-remove', '-'); AddShortcutEditor; end; procedure TfrmEditHotkey.FormShow(Sender: TObject); var EditControl: TEdit; begin if pnlShortcuts.ControlCount > 0 then begin EditControl := pnlShortcuts.Controls[0] as TEdit; EditControl.SetFocus; EditControl.SelStart := Length(EditControl.Text); EditControl.SelLength := 0; end; end; function TfrmEditHotkey.GetParameters: TDynamicStringArray; begin Result := GetArrayFromStrings(edtParameters.Lines); end; function TfrmEditHotkey.GetShortcuts: TDynamicStringArray; var i: Integer; EditControl: TEdit; begin Result := nil; for i := 0 to pnlShortcuts.ControlCount - 1 do begin EditControl := pnlShortcuts.Controls[i] as TEdit; if EditControl.Text <> '' then AddString(Result, EditControl.Text); end; end; function TfrmEditHotkey.GetShortcutsEditorsCount: Integer; begin Result := pnlShortcuts.ControlCount; end; function TfrmEditHotkey.GetTranslatedControlName(const AName: String): String; begin // TODO: Translate controls names. Result := AName; end; function TfrmEditHotkey.GetTranslatedFormName(const AName: String): String; var i: Integer; begin i := FForms.IndexOf(AName); if i >= 0 then Result := FFormsTranslated.Strings[i] else Result := AName; end; procedure TfrmEditHotkey.RemoveLastShortcutEditor; begin if pnlShortcuts.ControlCount > 1 then pnlShortcuts.Controls[pnlShortcuts.ControlCount - 1].Free; end; procedure TfrmEditHotkey.SetBitmapOrCaption(Button: TSpeedButton; const AIconName, ACaption: String); var Bmp: TBitmap = nil; IconIndex: PtrInt; begin IconIndex := PixMapManager.GetIconByName(AIconName); if IconIndex <> -1 then Bmp := PixMapManager.GetBitmap(IconIndex); if Assigned(Bmp) then begin Button.Glyph := Bmp; Button.Height := gIconsSize; Button.Width := gIconsSize; Bmp.Free; end else begin Button.Caption := ACaption; end; end; procedure TfrmEditHotkey.SetCommand(NewCommand: String); begin FCommand := NewCommand; btnShowCommandHelp.Caption := Format(rsShowHelpFor, [FCommand]); edtParameters.HelpKeyword := '/cmds.html#' + FCommand; end; procedure TfrmEditHotkey.SetControls(const NewControls: TDynamicStringArray); var sControl: String; i: Integer; begin FillHKControlList; // Mark controls to which hotkey applies. for i := 0 to cgHKControls.Items.Count - 1 do begin cgHKControls.Checked[i] := False; for sControl in NewControls do if cgHKControls.Items[i] = sControl then begin cgHKControls.Checked[i] := True; Break; end; end; end; procedure TfrmEditHotkey.SetHotkey(Hotkey: THotkey); begin FreeAndNil(FOldHotkey); if Assigned(Hotkey) then begin FOldHotkey := Hotkey.Clone; SetShortcuts(Hotkey.Shortcuts); SetParameters(Hotkey.Params); end else begin SetShortcuts(nil); SetParameters(nil); end; end; procedure TfrmEditHotkey.SetParameters(const NewParameters: TDynamicStringArray); begin SetStringsFromArray(edtParameters.Lines, NewParameters); end; procedure TfrmEditHotkey.SetShortcuts(const NewShortcuts: TDynamicStringArray); var Index: Integer; EditControl: TEdit; Shortcut: String; begin if Assigned(NewShortcuts) then begin while pnlShortcuts.ControlCount < Length(NewShortcuts) do AddShortcutEditor; while pnlShortcuts.ControlCount > Length(NewShortcuts) do RemoveLastShortcutEditor; Index := 0; for Shortcut in NewShortcuts do begin EditControl := pnlShortcuts.Controls[Index] as TEdit; EditControl.Text := Shortcut; Inc(Index); end; end else begin while pnlShortcuts.ControlCount > 1 do RemoveLastShortcutEditor; if pnlShortcuts.ControlCount > 0 then begin EditControl := pnlShortcuts.Controls[0] as TEdit; EditControl.Clear; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/feditor.lrt���������������������������������������������������������������������0000644�0001750�0000144�00000004324�12266437726�015505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMEDITOR.CAPTION=Editor TFRMEDITOR.MIFILE.CAPTION=&File TFRMEDITOR.MIDIV.CAPTION=- TFRMEDITOR.N1.CAPTION=- TFRMEDITOR.MIEDIT.CAPTION=&Edit TFRMEDITOR.N3.CAPTION=- TFRMEDITOR.N4.CAPTION=- TFRMEDITOR.N5.CAPTION=- TFRMEDITOR.MILINEENDTYPE.CAPTION=End Of Line TFRMEDITOR.MIENCODING.CAPTION=En&coding TFRMEDITOR.MIENCODINGIN.CAPTION=Open as TFRMEDITOR.MIENCODINGOUT.CAPTION=Save as TFRMEDITOR.MIHIGHLIGHT.CAPTION=Syntax highlight TFRMEDITOR.HELP1.CAPTION=&Help TFRMEDITOR.ACTABOUT.CAPTION=About TFRMEDITOR.ACTABOUT.HINT=About TFRMEDITOR.ACTFILEOPEN.CAPTION=&Open TFRMEDITOR.ACTFILEOPEN.HINT=Open TFRMEDITOR.ACTFILECLOSE.CAPTION=&Close TFRMEDITOR.ACTFILECLOSE.HINT=Close TFRMEDITOR.ACTFILESAVE.CAPTION=&Save TFRMEDITOR.ACTFILESAVE.HINT=Save TFRMEDITOR.ACTFILESAVEAS.CAPTION=Save &As.. TFRMEDITOR.ACTFILESAVEAS.HINT=Save As TFRMEDITOR.ACTFILENEW.CAPTION=&New TFRMEDITOR.ACTFILENEW.HINT=New TFRMEDITOR.ACTFILEEXIT.CAPTION=E&xit TFRMEDITOR.ACTFILEEXIT.HINT=Exit TFRMEDITOR.ACTSAVEALL.CAPTION=Sa&ve All TFRMEDITOR.ACTSAVEALL.HINT=Save All TFRMEDITOR.ACTEDITFIND.CAPTION=&Find TFRMEDITOR.ACTEDITFIND.HINT=Find TFRMEDITOR.ACTEDITRPLC.CAPTION=&Replace TFRMEDITOR.ACTEDITRPLC.HINT=Replace TFRMEDITOR.ACTCONFHIGH.CAPTION=&Configuration TFRMEDITOR.ACTCONFHIGH.HINT=Configuration TFRMEDITOR.ACTEDITCUT.CAPTION=Cut TFRMEDITOR.ACTEDITCUT.HINT=Cut TFRMEDITOR.ACTEDITCOPY.CAPTION=Copy TFRMEDITOR.ACTEDITCOPY.HINT=Copy TFRMEDITOR.ACTEDITPASTE.CAPTION=Paste TFRMEDITOR.ACTEDITPASTE.HINT=Paste TFRMEDITOR.ACTEDITUNDO.CAPTION=Undo TFRMEDITOR.ACTEDITUNDO.HINT=Undo TFRMEDITOR.ACTEDITREDO.CAPTION=Redo TFRMEDITOR.ACTEDITREDO.HINT=Redo TFRMEDITOR.ACTEDITSELECTALL.CAPTION=Select&All TFRMEDITOR.ACTEDITSELECTALL.HINT=Select All TFRMEDITOR.ACTEDITDELETE.CAPTION=Delete TFRMEDITOR.ACTEDITDELETE.HINT=Delete TFRMEDITOR.ACTEDITFINDNEXT.CAPTION=Find next TFRMEDITOR.ACTEDITFINDNEXT.HINT=Find next TFRMEDITOR.ACTEDITLINEENDCR.CAPTION=Mac (CR) TFRMEDITOR.ACTEDITLINEENDCR.HINT=Mac (CR) TFRMEDITOR.ACTEDITLINEENDLF.CAPTION=Unix (LF) TFRMEDITOR.ACTEDITLINEENDLF.HINT=Unix (LF) TFRMEDITOR.ACTEDITLINEENDCRLF.CAPTION=Windows (CRLF) TFRMEDITOR.ACTEDITLINEENDCRLF.HINT=Windows (CRLF) TFRMEDITOR.ACTEDITGOTOLINE.CAPTION=Goto Line... TFRMEDITOR.MISEPARATOR1.CAPTION=- TFRMEDITOR.MISEPARATOR2.CAPTION=- ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufavoritetabs.pas���������������������������������������������������������������0000644�0001750�0000144�00000156535�12660674103�016713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Structure/Load/Save/Working With FavoriteTab and List of them Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) 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 -This unit has been added in 2016, inspired a lot from "uhotdir". } unit ufavoritetabs; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Menus, ExtCtrls, Controls, ComCtrls, //DC DCXmlConfig; const FAVORITETABS_SEPARATORSTRING: string = '···························'; // In "uMainCommands", the procedure "DoOnClickMenuJobFavoriteTabs" is called when a menu item of "FavoriteTabs" popup menu item is clicked. // Associted to the "tag" properties of the menuitem, these offset are added to "tag" to help for dispatching of action. TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING = $10000; TAGOFFSET_FAVTABS_SOMETHINGELSE = $20000; // These must match with the order of "TTabConfigLocation" afew lines below. gsConfigLocationName: array[0..5] of string = ('left', 'right', 'active', 'inactive', 'both', 'none'); type { TTabsConfigLocation } // These must match with the order of "gsConfigLocationName" // Note: NEVER CHANGE THE ORDER OF THESE CONSTANTS SINCE SETTINGS SAVED ASSUMED THIS ORDER FOREVER. TTabsConfigLocation = (tclLeft, tclRight, tclActive, tclInactive, tclBoth, tclNone); TTabsFlagsAlreadyDestroyed = set of (tfadLeft, tfadRight); { TKindOfFavoriteTabsEntry } TKindOfFavoriteTabsEntry = (fte_NULL, fte_ACTUALFAVTABS, fte_SEPARATOR, fte_STARTMENU, fte_ENDMENU); { TKindFavoriteTabsMenuPopulation } TKindFavoriteTabsMenuPopulation = (ftmp_JUSTFAVTABS, ftmp_FAVTABSWITHCONFIG); { TPositionWhereToAddFavoriteTabs } TPositionWhereToAddFavoriteTabs = (afte_First, afte_Last, afte_Alphabetical); { TProcedureWhenClickMenuItem} TProcedureWhenClickOnMenuItem = procedure(Sender: TObject) of object; { TFavoriteTabs } TFavoriteTabs = class private FDispatcher: TKindOfFavoriteTabsEntry; FFavoriteTabsName: string; // Friendly name, what the user decides, see, use, breath! FDestinationForSavedLeftTabs: TTabsConfigLocation; // Configured restoration destination side for what was saved from left panel. FDestinationForSavedRightTabs: TTabsConfigLocation; // Configured restoration destination side for what was saved from right panel. FExistingTabsToKeep: TTabsConfigLocation; // Useful when we restore tabs, to determine if we keep or not the existing ones. FSaveDirHistory: boolean; // Indicate if we save the dir history or not for that setup. FUniqueID: TGUID; // Key info! This is the unique number identifying the FactoriteTabs. FGroupNumber: integer; // We won't save in the XML. Just useful run-time with the tree. public constructor Create; procedure CopyToFavoriteTabs(DestinationFavoriteTabs: TFavoriteTabs; bExactCopyWanted: boolean = True); function GuidToXMLString: string; procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); property Dispatcher: TKindOfFavoriteTabsEntry read FDispatcher write FDispatcher; property FavoriteTabsName: string read FFavoriteTabsName write FFavoriteTabsName; property DestinationForSavedLeftTabs: TTabsConfigLocation read FDestinationForSavedLeftTabs write FDestinationForSavedLeftTabs; property DestinationForSavedRightTabs: TTabsConfigLocation read FDestinationForSavedRightTabs write FDestinationForSavedRightTabs; property ExistingTabsToKeep: TTabsConfigLocation read FExistingTabsToKeep write FExistingTabsToKeep; property SaveDirHistory: boolean read FSaveDirHistory write FSaveDirHistory; property UniqueID: TGUID read FUniqueID write FUniqueID; property GroupNumber: integer read FGroupNumber write FGroupNumber; end; { TFavoriteTabsList } TFavoriteTabsList = class(TList) private FLastFavoriteTabsLoadedUniqueId: TGUID; FLastImportationStringUniqueId: TStringList; FAssociatedMainMenuItem: TMenuItem; function GetFavoriteTabs(Index: integer): TFavoriteTabs; function GetBestIndexForAlphabeticalNewFavoriteTabs(sFavoriteTabsNameToFindAPlaceFor: string): integer; function GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName: string): integer; procedure AddToListAndToXmlFileHeader(paramFavoriteTabs: TFavoriteTabs; AConfig: TXmlConfig; SpecifiedIndex: integer = -1); function ActualDumpFavoriteTabsListInXml(AConfig: TXmlConfig): boolean; public constructor Create; destructor Destroy; override; procedure Clear; override; function Add(FavoriteTabs: TFavoriteTabs): integer; procedure DeleteFavoriteTabs(Index: integer); procedure CopyFavoriteTabsListToFavoriteTabsList(var DestinationFavoriteTabsList: TFavoriteTabsList); function GetIndexLastFavoriteTabsLoaded: integer; function GetIndexPreviousLastFavoriteTabsLoaded: integer; function GetIndexNextLastFavoriteTabsLoaded: integer; function GetIndexForSuchUniqueID(SearchedGUID: TGUID): integer; function GetSuggestedParamsForFavoriteTabs(sAttemptedName: string; var SuggestedFavoriteTabsName: string): boolean; function ComputeSignature: dword; procedure LoadAllListFromXml; function LoadTabsFromXmlEntry(paramIndexToLoad: integer): boolean; function SaveNewEntryFavoriteTabs(paramFavoriteTabsEntryName: string): boolean; function ReSaveTabsToXMLEntry(paramIndexToSave: integer): boolean; function SaveCurrentFavoriteTabsIfAnyPriorToChange: boolean; function RefreshXmlFavoriteTabsListSection: boolean; procedure PopulateMenuWithFavoriteTabs(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenFavoriteTabItemClicked: TProcedureWhenClickOnMenuItem; KindFavoriteTabMenuPopulation: TKindFavoriteTabsMenuPopulation); procedure RefreshAssociatedMainMenu; procedure LoadTTreeView(ParamTreeView: TTreeView); procedure RefreshFromTTreeView(ParamTreeView: TTreeView); function ImportFromLegacyTabsFile(paramFilename: string; SpecifiedIndex: integer = -1): boolean; function ExportToLegacyTabsFile(index: integer; OutputDirectory: string): boolean; property FavoriteTabs[Index: integer]: TFavoriteTabs read GetFavoriteTabs; property LastFavoriteTabsLoadedUniqueId: TGUID read FLastFavoriteTabsLoadedUniqueId write FLastFavoriteTabsLoadedUniqueId; property AssociatedMainMenuItem: TMenuItem read FAssociatedMainMenuItem write FAssociatedMainMenuItem; property LastImportationStringUniqueId: TStringList read FLastImportationStringUniqueId write FLastImportationStringUniqueId; end; { GetNewUniqueID } function GetNewUniqueID: TGUID; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, crc, Graphics, Forms, lazutf8, Dialogs, //DC fMain, DCFileAttributes, uDebug, uDCUtils, uLng, DCOSUtils, uGlobs, uShowMsg, uFilePanelSelect, DCStrUtils; { GetSingleXmlFavoriteTabsFilename } function GetSingleXmlFavoriteTabsFilename: string; begin Result := mbExpandFileName(IncludeTrailingPathDelimiter(EnvVarConfigPath) + 'favoritetabs.xml'); end; { GetNewUniqueID } function GetNewUniqueID: TGUID; var iIndex: integer; begin if CreateGuid(Result) <> 0 then begin Result.Data1 := random($233528DE); Result.Data2 := random($FFFF); Result.Data3 := random($FFFF); for iIndex := 0 to 7 do Result.Data4[iIndex] := random($FF); end; end; { XmlStringToGuid } function XmlStringToGuid(sXmlString: string): TGUID; begin sXmlString := '{' + copy(sXmlString, 5, (length(sXmlString) - 4)) + '}'; Result := StringToGuid(sXmlString); end; { TFavoriteTabs } { TFavoriteTabs.Create } constructor TFavoriteTabs.Create; begin inherited Create; FDispatcher := fte_NULL; FFavoriteTabsName := ''; FDestinationForSavedLeftTabs := tclLeft; FDestinationForSavedRightTabs := tclRight; FExistingTabsToKeep := tclNone; FSaveDirHistory := False; FUniqueID := GetNewUniqueID; FGroupNumber := 0; end; { TFavoriteTabs.CopyToFavoriteTabs } procedure TFavoriteTabs.CopyToFavoriteTabs(DestinationFavoriteTabs: TFavoriteTabs; bExactCopyWanted: boolean = True); begin DestinationFavoriteTabs.Dispatcher := FDispatcher; DestinationFavoriteTabs.FavoriteTabsName := FFavoriteTabsName; DestinationFavoriteTabs.DestinationForSavedLeftTabs := FDestinationForSavedLeftTabs; DestinationFavoriteTabs.DestinationForSavedRightTabs := FDestinationForSavedRightTabs; DestinationFavoriteTabs.ExistingTabsToKeep := FExistingTabsToKeep; DestinationFavoriteTabs.SaveDirHistory := FSaveDirHistory; if bExactCopyWanted then DestinationFavoriteTabs.UniqueID := FUniqueId else DestinationFavoriteTabs.UniqueID := GetNewUniqueID; DestinationFavoriteTabs.GroupNumber := FGroupNumber; end; {TFavoriteTabs.GuidToXMLString } function TFavoriteTabs.GuidToXMLString: string; begin Result := GuidToString(FUniqueID); Result := 'GUID' + copy(Result, 2, (length(Result) - 2)); end; { TFavoriteTabs.SaveToXml } procedure TFavoriteTabs.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode); begin AConfig.SetAttr(ANode, 'UniqueID', GuidToString(FUniqueID)); case Dispatcher of fte_NULL: begin AConfig.SetAttr(ANode, 'Name', ''); end; fte_ACTUALFAVTABS: begin AConfig.SetAttr(ANode, 'Name', FFavoriteTabsName); AConfig.SetAttr(ANode, 'DestLeft', integer(FDestinationForSavedLeftTabs)); AConfig.SetAttr(ANode, 'DestRight', integer(FDestinationForSavedRightTabs)); AConfig.SetAttr(ANode, 'ExistingKeep', integer(FExistingTabsToKeep)); AConfig.SetAttr(ANode, 'SaveDirHistory', FSaveDirHistory); end; fte_SEPARATOR: begin AConfig.SetAttr(ANode, 'Name', '-'); end; fte_STARTMENU: begin AConfig.SetAttr(ANode, 'Name', '-' + FFavoriteTabsName); end; fte_ENDMENU: begin AConfig.SetAttr(ANode, 'Name', '--'); end; end; end; { TFavoriteTabsList } { TFavoriteTabsList.Create } constructor TFavoriteTabsList.Create; begin inherited Create; FLastFavoriteTabsLoadedUniqueId := GetNewUniqueID; FLastImportationStringUniqueId := TStringList.Create; FAssociatedMainMenuItem := nil; end; { TFavoriteTabsList.Destroy } destructor TFavoriteTabsList.Destroy; begin if Assigned(FLastImportationStringUniqueId) then FreeAndNil(FLastImportationStringUniqueId); inherited; end; { TFavoriteTabsList.Clear } procedure TFavoriteTabsList.Clear; var i: integer; begin for i := 0 to Count - 1 do FavoriteTabs[i].Free; inherited Clear; end; { TFavoriteTabsList.Add } function TFavoriteTabsList.Add(FavoriteTabs: TFavoriteTabs): integer; begin Result := inherited Add(FavoriteTabs); end; { TFavoriteTabsList.DeleteFavoriteTab } procedure TFavoriteTabsList.DeleteFavoriteTabs(Index: integer); begin FavoriteTabs[Index].Free; Delete(Index); end; { TFavoriteTabsList.GetFavoriteTabs } function TFavoriteTabsList.GetFavoriteTabs(Index: integer): TFavoriteTabs; begin Result := TFavoriteTabs(Items[Index]); end; { GenericCopierProcessNode } // Will copy a given Xml structure from a certain node to another one. // Maybe this function should be located elsewhere but for now it's here. // WARNING: "GenericCopierProcessNode" is recursive and may call itself! procedure GenericCopierProcessNode(paramInputNode: TXmlNode; paramOutputConfig: TXmlConfig; paramOutputNode: TXmlNode); var InnerInputNode, InnerOutputNode: TXmlNode; iAttribute: integer; begin if paramInputNode = nil then Exit; // Stoppe si on a atteint une feuille if paramInputNode.NodeName <> '#text' then begin if paramOutputNode <> nil then InnerOutputNode := paramOutputConfig.AddNode(paramOutputNode, paramInputNode.NodeName) else InnerOutputNode := paramOutputConfig.FindNode(paramOutputConfig.RootNode, paramInputNode.NodeName, True); end else begin paramOutputConfig.SetValue(paramOutputNode, '', UTF16ToUTF8(paramInputNode.NodeValue)); end; // Ajoute un nœud à l'arbre s'il existe if paramInputNode.HasAttributes and (paramInputNode.Attributes.Length > 0) then for iAttribute := 0 to pred(paramInputNode.Attributes.Length) do paramOutputConfig.SetAttr(InnerOutputNode, paramInputNode.Attributes[iAttribute].NodeName, UTF16ToUTF8(paramInputNode.Attributes[iAttribute].NodeValue)); // Va au nœud enfant InnerInputNode := paramInputNode.ChildNodes.Item[0]; // Traite tous les nœuds enfants while InnerInputNode <> nil do begin GenericCopierProcessNode(InnerInputNode, paramOutputConfig, InnerOutputNode); InnerInputNode := InnerInputNode.NextSibling; end; end; { TFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList } procedure TFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(var DestinationFavoriteTabsList: TFavoriteTabsList); var LocalFavoriteTabs: TFavoriteTabs; Index: longint; begin // Let's delete possible previous list content for Index := pred(DestinationFavoriteTabsList.Count) downto 0 do DestinationFavoriteTabsList.DeleteFavoriteTabs(Index); DestinationFavoriteTabsList.Clear; // Now let's create entries and add them one by one to the destination list. for Index := 0 to pred(Count) do begin LocalFavoriteTabs := TFavoriteTabs.Create; FavoriteTabs[Index].CopyToFavoriteTabs(LocalFavoriteTabs); DestinationFavoriteTabsList.Add(LocalFavoriteTabs); end; // So when we go in the editor, we know which one was the latest one. DestinationFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := FLastFavoriteTabsLoadedUniqueId; end; { TFavoriteTabsList.GetIndexLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexLastFavoriteTabsLoaded: integer; var Index: integer; begin Result := -1; Index := 0; while (Index < Count) and (Result = -1) do if IsEqualGUID(FavoriteTabs[Index].UniqueID, FLastFavoriteTabsLoadedUniqueId) then Result := Index else Inc(Index); end; { TFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded: integer; var SearchingIndex: integer; begin Result := -1; SearchingIndex := GetIndexLastFavoriteTabsLoaded; if SearchingIndex > 0 then begin while (Result = -1) and (SearchingIndex > 0) do begin Dec(SearchingIndex); if FavoriteTabs[SearchingIndex].Dispatcher = fte_ACTUALFAVTABS then Result := SearchingIndex; end; end; end; { TFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded } function TFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded: integer; var SearchingIndex: integer; begin Result := -1; SearchingIndex := GetIndexLastFavoriteTabsLoaded; if SearchingIndex < pred(Count) then begin while (Result = -1) and (SearchingIndex < pred(Count)) do begin Inc(SearchingIndex); if FavoriteTabs[SearchingIndex].Dispatcher = fte_ACTUALFAVTABS then Result := SearchingIndex; end; end; end; { TFavoriteTabsList.GetIndexForSuchUniqueID } function TFavoriteTabsList.GetIndexForSuchUniqueID(SearchedGUID: TGUID): integer; var iSearchedIndex: integer; begin Result := -1; iSearchedIndex := 0; while (Result = -1) and (iSearchedIndex < Count) do begin if IsEqualGUID(SearchedGUID, FavoriteTabs[iSearchedIndex].UniqueID) then Result := iSearchedIndex else Inc(iSearchedIndex); end; end; { TFavoriteTabsList.GetIndexForSuchFavoriteTabsName } function TFavoriteTabsList.GetIndexForSuchFavoriteTabsName(sSearchedFavoriteTabsName: string): integer; var iSearchedIndex: integer; begin Result := -1; iSearchedIndex := 0; while (Result = -1) and (iSearchedIndex < Count) do begin if FavoriteTabs[iSearchedIndex].FavoriteTabsName = sSearchedFavoriteTabsName then Result := iSearchedIndex else Inc(iSearchedIndex); end; end; { TFavoriteTabsList.GetSuggestedParamsForFavoriteTabs } // It won't hurt anything here if user want to use more than once the SAME name... // By adding the (1), (2), etc. between parenthesis, it's a kind of friendly indication the same name already exists. // But we do not blocked this. If he ever decides to specifically rename with the same name. This was a kind of friendly reminder. function TFavoriteTabsList.GetSuggestedParamsForFavoriteTabs(sAttemptedName: string; var SuggestedFavoriteTabsName: string): boolean; var iIndexInCaseFound: integer; begin Result := False; if length(sAttemptedName) > 0 then sAttemptedName := UTF8UpperCase(LeftStr(sAttemptedName, 1)) + RightStr(sAttemptedName, length(sAttemptedName) - 1); SuggestedFavoriteTabsName := sAttemptedName; iIndexInCaseFound := 1; while GetIndexForSuchFavoriteTabsName(SuggestedFavoriteTabsName) <> -1 do begin SuggestedFavoriteTabsName := Format('%s(%d)', [sAttemptedName, iIndexInCaseFound]); Inc(iIndexInCaseFound); end; if InputQuery(rsMsgFavoriteTabsEnterName, rsMsgFavoriteTabsEnterNameTitle, SuggestedFavoriteTabsName) then Result := (length(SuggestedFavoriteTabsName) > 0); end; { TFavoriteTabsList.ComputeSignature } // Routine tries to pickup all char chain from element of favorite tabs list to compute a unique CRC32. // This CRC32 will be a kind of signature of the favorite tabs list. // We compute the CRC32 at the start of edition (TfrmOptionsFavoriteTabs.Load) and // at the end (TfrmOptionsFavoriteTabs.CanWeClose). // If they are different, it's a sign that favorite tabs list have been modified. // It's not "perfect" since it might happen that two different combinaisons will // give the same CRC32 but odds are very good that it will be a different one. function TFavoriteTabsList.ComputeSignature: dword; var Index: integer; begin Result := $000000002; for Index := 0 to pred(Count) do begin Result := crc32(Result, @FavoriteTabs[Index].Dispatcher, 1); if length(FavoriteTabs[Index].FavoriteTabsName) > 0 then Result := crc32(Result, @FavoriteTabs[Index].FavoriteTabsName[1], length(FavoriteTabs[Index].FavoriteTabsName)); Result := crc32(Result, @FavoriteTabs[Index].DestinationForSavedLeftTabs, sizeof(TTabsConfigLocation)); Result := crc32(Result, @FavoriteTabs[Index].DestinationForSavedRightTabs, sizeof(TTabsConfigLocation)); Result := crc32(Result, @FavoriteTabs[Index].ExistingTabsToKeep, sizeof(TTabsConfigLocation)); end; end; { TFavoriteTabsList.LoadAllListFromXml} procedure TFavoriteTabsList.LoadAllListFromXml; var ANode: TXmlNode; AConfig: TXmlConfig; LocalFavoriteTabs: TFavoriteTabs; sName: string; CurrentMenuLevel: integer; FlagAvortInsertion: boolean; begin Clear; CurrentMenuLevel := 0; // We don't add it to the list UNTIL a new entry has been added to the XML file. AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ANode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('FavoriteTabs') = 0 then begin if AConfig.TryGetAttr(ANode, 'Name', sName) then begin FlagAvortInsertion := False; LocalFavoriteTabs := TFavoriteTabs.Create; if sName = '-' then begin LocalFavoriteTabs.Dispatcher := fte_SEPARATOR; end else begin if sName = '--' then begin LocalFavoriteTabs.Dispatcher := fte_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; // Sanity correction in case we got corrupted from any ways end else begin if (UTF8Length(sName) > 1) then begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalFavoriteTabs.Dispatcher := fte_STARTMENU; LocalFavoriteTabs.FavoriteTabsName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalFavoriteTabs.Dispatcher = fte_NULL then begin LocalFavoriteTabs.FavoriteTabsName := sName; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.DestinationForSavedLeftTabs := TTabsConfigLocation(AConfig.GetAttr(Anode, 'DestLeft', integer(tclLeft))); LocalFavoriteTabs.DestinationForSavedRightTabs := TTabsConfigLocation(AConfig.GetAttr(Anode, 'DestRight', integer(tclRight))); LocalFavoriteTabs.ExistingTabsToKeep := TTabsConfigLocation(AConfig.GetAttr(Anode, 'ExistingKeep', integer(tclNone))); LocalFavoriteTabs.SaveDirHistory := AConfig.GetAttr(Anode, 'SaveDirHistory', False); LocalFavoriteTabs.UniqueID := StringToGuid(AConfig.GetAttr(Anode, 'UniqueID', GuidToString(GetNewUniqueID))); end; end; end; if not FlagAvortInsertion then begin Add(LocalFavoriteTabs); end else begin LocalFavoriteTabs.Free; end; end; end; ANode := ANode.NextSibling; end; while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ENDMENU; Add(LocalFavoriteTabs); end; end; finally FreeAndNil(AConfig); end; RefreshAssociatedMainMenu; end; { TFavoriteTabsList.LoadTabsFromXmlEntry } function TFavoriteTabsList.LoadTabsFromXmlEntry(paramIndexToLoad: integer): boolean; var AConfig: TXmlConfig; sActualTabSection: string; TestNode: TXmlNode; // Use just to validate there will be something to load from file. originalFilePanel: TFilePanelSelect; // Following variables are "pre-initialized" to default values AND are values used when not using the possibility to configure redirection of tabs in our setups. TargetDestinationForLeft: TTabsConfigLocation = tclLeft; TargetDestinationForRight: TTabsConfigLocation = tclRight; DestinationToKeep: TTabsConfigLocation = tclNone; TabsAlreadyDestroyedFlags: TTabsFlagsAlreadyDestroyed = []; begin Result := False; if (paramIndexToLoad >= 0) and (paramIndexToLoad < Count) then begin if FavoriteTabs[paramIndexToLoad].Dispatcher = fte_ACTUALFAVTABS then begin // 1. We remember to restore later the current selected panel. originalFilePanel := frmMain.SelectedPanel; // 2. We set the section-path to our wanted setup. (Don't forget the trailing slash at the end because "LoadTheseTabsWithThisConfig" requires it for the "ABranch" parameter. sActualTabSection := 'ActualTabs/' + FavoriteTabs[paramIndexToLoad].GuidToXMLString + '/'; // 3. We set the location where to restore tabs according to our setup IF we're configure for it. if gFavoriteTabsUseRestoreExtraOptions then begin TargetDestinationForLeft := FavoriteTabs[paramIndexToLoad].DestinationForSavedLeftTabs; TargetDestinationForRight := FavoriteTabs[paramIndexToLoad].DestinationForSavedRightTabs; DestinationToKeep := FavoriteTabs[paramIndexToLoad].ExistingTabsToKeep; end; // 4. We're ready to open the config files and actually load the stored tabs to the correct target side. AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); if Assigned(AConfig) then begin try // 5.1. We load the left tabs (We check before to make sure there is a "Left" section to don't possibly destroy existing tabs and later realize there is no section to load (But it should not happen...)). TestNode := AConfig.FindNode(AConfig.RootNode, sActualTabSection + 'Left/Tab'); if Assigned(TestNode) then frmMain.LoadTheseTabsWithThisConfig(AConfig, sActualTabSection, tclLeft, TargetDestinationForLeft, DestinationToKeep, TabsAlreadyDestroyedFlags); // 5.2. We load the right tabs (We check before to make sure there is a "Right" section to don't possibly destroy existing tabs and later realize there is no section to load (But it should not happen...)). TestNode := AConfig.FindNode(AConfig.RootNode, sActualTabSection + 'Right/Tab'); if Assigned(TestNode) then frmMain.LoadTheseTabsWithThisConfig(AConfig, sActualTabSection, tclRight, TargetDestinationForRight, DestinationToKeep, TabsAlreadyDestroyedFlags); // 6. We've loaded a setup, let's remember it. FLastFavoriteTabsLoadedUniqueId := FavoriteTabs[paramIndexToLoad].FUniqueID; // 7. We need to refresh main menu so the check will be on the right setup. The "Reload" and "Resave" will be enabled also. RefreshAssociatedMainMenu; // 8. If we reach that point, we deserve to return True! Result := True; finally FreeAndNil(AConfig); end; end; // 9. We restore focuse to what was our active panel, ready to play in it. frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; end; end; { TFavoriteTabsList.GetBestIndexForAlphabeticalNewFavoriteTabs } // We take the whole list of "FavoriteTabsName" seen as one single alphabetical sorted list. // We find the exact place where our string to add could fit. // We insert it right in front of the one its is closed to go. // If we have the last one, we placed it last! function TFavoriteTabsList.GetBestIndexForAlphabeticalNewFavoriteTabs(sFavoriteTabsNameToFindAPlaceFor: string): integer; var I, iPosInserted: integer; localFavoriteTabsNameToFindAPlaceFor: string; MagickSortedList: TStringList; begin Result := -1; localFavoriteTabsNameToFindAPlaceFor := UTF8LowerCase(sFavoriteTabsNameToFindAPlaceFor); MagickSortedList := TStringList.Create; try MagickSortedList.Sorted := True; MagickSortedList.Duplicates := dupAccept; // 1. We add in the list only the actual FavoriteTabsName. for I := 0 to pred(Count) do if FavoriteTabs[I].Dispatcher = fte_ACTUALFAVTABS then MagickSortedList.Add(UTF8LowerCase(FavoriteTabs[I].FavoriteTabsName) + DirectorySeparator + IntToStr(I)); // 2. Add to list our string. iPosInserted := MagickSortedList.Add(localFavoriteTabsNameToFindAPlaceFor); // 3. We now know the best place to insert our entry (unless it's last one). if MagickSortedList.Count > 1 then begin if iPosInserted < pred(MagickSortedList.Count) then begin Result := StrToInt(GetLastDir(MagickSortedList.Strings[iPosInserted + 1])); end else begin Result := (StrToInt(GetLastDir(MagickSortedList.Strings[iPosInserted - 1]))) + 1; if Result >= Count then Result := -1; end; end; finally MagickSortedList.Free; end; end; { TFavoriteTabsList.AddToListAndToXmlFileHeader } procedure TFavoriteTabsList.AddToListAndToXmlFileHeader(paramFavoriteTabs: TFavoriteTabs; AConfig: TXmlConfig; SpecifiedIndex: integer = -1); var SubNode, RootNode: TXmlNode; iIndexToInsert: integer; begin if SpecifiedIndex = -1 then begin case gWhereToAddNewFavoriteTabs of afte_Last: begin // The simplest case: We add the node, we add it at the end of the list, that's it! RootNode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList', True); SubNode := AConfig.AddNode(RootNode, 'FavoriteTabs'); paramFavoriteTabs.SaveToXml(AConfig, SubNode); Add(paramFavoriteTabs); end; afte_First: begin // A bit more complicated: we will "insert" at position 0 our Favorites Tabs in our list and then we'll recreate the index at the beginning of our Xml file. Insert(0, paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; afte_Alphabetical: begin //A medium bit more complicated: we will iIndexToInsert := GetBestIndexForAlphabeticalNewFavoriteTabs(paramFavoriteTabs.FavoriteTabsName); if (iIndexToInsert >= 0) and (Count > 0) then Insert(iIndexToInsert, paramFavoriteTabs) else Add(paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; end; end else begin if SpecifiedIndex < pred(Count) then Insert(SpecifiedIndex, paramFavoriteTabs) else Add(paramFavoriteTabs); ActualDumpFavoriteTabsListInXml(AConfig); end; end; { TFavoriteTabsList.SaveNewEntryFavoriteTabs } function TFavoriteTabsList.SaveNewEntryFavoriteTabs(paramFavoriteTabsEntryName: string): boolean; var AConfig: TXmlConfig; sActualTabSection: string; LocalFavoriteTabs: TFavoriteTabs; bFlagToSaveHistoryOrNot: boolean; begin try LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.FavoriteTabsName := paramFavoriteTabsEntryName; LocalFavoriteTabs.DestinationForSavedLeftTabs := gDefaultTargetPanelLeftSaved; LocalFavoriteTabs.DestinationForSavedRightTabs := gDefaultTargetPanelRightSaved; LocalFavoriteTabs.ExistingTabsToKeep := gDefaultExistingTabsToKeep; LocalFavoriteTabs.SaveDirHistory := gFavoriteTabsSaveDirHistory; //The UniqueID is not assigned here because it has already been set when "LocalFavoriteTabs" has been created. if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := LocalFavoriteTabs.SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try AddToListAndToXmlFileHeader(LocalFavoriteTabs, AConfig); sActualTabSection := 'ActualTabs/' + LocalFavoriteTabs.GuidToXMLString; frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.LeftTabs, bFlagToSaveHistoryOrNot); frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.RightTabs, bFlagToSaveHistoryOrNot); AConfig.Save; FLastFavoriteTabsLoadedUniqueId := LocalFavoriteTabs.UniqueID; RefreshAssociatedMainMenu; // To possibly enable the action for the "ReLoad" and "ReSave". finally FreeAndNil(AConfig); end; Result := True; // If we get here, we'll assumed Favorite Tabs has been saved! except Result := False; end; end; { TFavoriteTabsList.ReSaveTabsToXMLEntry } // When "ReSaving", we must first find in the Xml the previous entry to write over it. function TFavoriteTabsList.ReSaveTabsToXMLEntry(paramIndexToSave: integer): boolean; var ANode: TXmlNode; AConfig: TXmlConfig; sActualTabSection, sGUIDTemp: string; bFlagSaved: boolean = False; bFlagToSaveHistoryOrNot: boolean; begin Result := False; if (paramIndexToSave >= 0) and (paramIndexToSave < Count) then begin if FavoriteTabs[paramIndexToSave].Dispatcher = fte_ACTUALFAVTABS then begin AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ANode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) and (not bFlagSaved) do begin if ANode.CompareName('FavoriteTabs') = 0 then begin if AConfig.TryGetAttr(ANode, 'UniqueID', sGUIDTemp) then begin if IsEqualGUID(FavoriteTabs[paramIndexToSave].UniqueID, StringToGuid(sGUIDTemp)) then begin FavoriteTabs[paramIndexToSave].SaveToXml(AConfig, ANode); bFlagSaved := True; FLastFavoriteTabsLoadedUniqueId := FavoriteTabs[paramIndexToSave].UniqueID; end; end; end; ANode := ANode.NextSibling; end; end; if bFlagSaved then begin if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := FavoriteTabs[paramIndexToSave].SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; sActualTabSection := 'ActualTabs/' + FavoriteTabs[paramIndexToSave].GuidToXMLString; frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.LeftTabs, bFlagToSaveHistoryOrNot); frmMain.SaveTabsXml(AConfig, sActualTabSection, frmMain.RightTabs, bFlagToSaveHistoryOrNot); AConfig.Save; Result := True; end; finally FreeAndNil(AConfig); end; end; end; end; { TFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange } function TFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange: boolean; var iIndex: integer; bFlagToSaveHistoryOrNot: boolean; begin Result := True; iIndex := GetIndexLastFavoriteTabsLoaded; if iIndex <> -1 then begin if gFavoriteTabsUseRestoreExtraOptions then bFlagToSaveHistoryOrNot := FavoriteTabs[iIndex].SaveDirHistory else bFlagToSaveHistoryOrNot := gFavoriteTabsSaveDirHistory; if bFlagToSaveHistoryOrNot then Result := ReSaveTabsToXMLEntry(iIndex); end; end; { TFavoriteTabsList.ActualDumpFavoriteTabsListInXml } // Since we save everything, we will will flush the current "FavoriteTabsList" header section to restore it. // We need to do in case we would delete entries. // Also, certainly we could have done something like "AConfig.DeleteNode(ListNode)" and then rewrite completely our table after. // BUT, doing that would place our list at the end. That's fine and functional. But it's nice for human to see it on top when debugging. // So that's why we delete item one by one without deleting the initial node. // Also, we need to do a kind of purge of the subsequent node regarding actual tab setup. // To do that, we check each node to see if we have a correspondant entry in the header. // If not, we flush that node! function TFavoriteTabsList.ActualDumpFavoriteTabsListInXml(AConfig: TXmlConfig): boolean; var SubNode, ListNode, ANode, BNode: TXmlNode; iIndex: integer; begin ListNode := AConfig.FindNode(AConfig.RootNode, 'FavoriteTabsList', True); if Assigned(ListNode) then begin ANode := ListNode.FirstChild; while Assigned(ANode) do begin BNode := ANode.NextSibling; AConfig.DeleteNode(ANode); ANode := BNode; end; end; // 1. Write the kind of "Table" of Favorite Tabs iIndex := 0; while iIndex < Count do begin case FavoriteTabs[iIndex].Dispatcher of fte_ACTUALFAVTABS, fte_SEPARATOR, fte_STARTMENU, fte_ENDMENU: begin SubNode := AConfig.AddNode(ListNode, 'FavoriteTabs'); FavoriteTabs[iIndex].SaveToXml(AConfig, SubNode); end; end; Inc(iIndex); end; // 2. Validate if bare data for actual tabs have a matching entry in our table. // If not, flush it. ListNode := AConfig.FindNode(AConfig.RootNode, 'ActualTabs'); if Assigned(ListNode) then begin ANode := ListNode.FirstChild; while Assigned(ANode) do begin BNode := ANode.NextSibling; if GetIndexForSuchUniqueID(XmlStringToGuid(ANode.NodeName)) = -1 then AConfig.DeleteNode(ANode); ANode := BNode; end; end; end; { TFavoriteTabsList.RefreshXmlFavoriteTabsListSection } function TFavoriteTabsList.RefreshXmlFavoriteTabsListSection: boolean; var AConfig: TXmlConfig; begin Result := False; try AConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try ActualDumpFavoriteTabsListInXml(AConfig); AConfig.Save; finally FreeAndNil(AConfig); end; Result := True; except on E: Exception do msgError(E.Message); end; end; { TFavoriteTabsList.PopulateMenuWithFavoriteTabs } procedure TFavoriteTabsList.PopulateMenuWithFavoriteTabs(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenFavoriteTabItemClicked: TProcedureWhenClickOnMenuItem; KindFavoriteTabMenuPopulation: TKindFavoriteTabsMenuPopulation); var I: longint; //Same variable for main and local routine // WARNING: "CompleteMenu" is recursive and may call itself! function CompleteMenu(ParamMenuItem: TComponent; TagOffset: integer = 0): longint; // WARNING: "DoCheckedBackToTop" is recursive and may call itself! procedure DoCheckedBackToTop(paramTMenuItem: TComponent); begin if (paramTMenuItem.ClassType = TMenuItem) and (TMenuItem(paramTMenuItem).Caption <> rsMsgFavortieTabsSaveOverExisting) then if TMenuItem(paramTMenuItem).Parent <> nil then if (TMenuItem(paramTMenuItem).Parent.ClassType <> TMainMenu) then begin TMenuItem(paramTMenuItem).Checked := True; DoCheckedBackToTop(TMenuItem(paramTMenuItem).Parent); end; end; var localmi: TMenuItem; LocalLastAdditionIsASeparator: boolean; begin Result := 0; LocalLastAdditionIsASeparator := False; while I < Count do begin Inc(I); case FavoriteTabs[I - 1].Dispatcher of fte_ACTUALFAVTABS: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := FavoriteTabs[I - 1].FFavoriteTabsName; localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenFavoriteTabItemClicked; localmi.Checked := IsEqualGUID(FavoriteTabs[I - 1].UniqueID, FLastFavoriteTabsLoadedUniqueId); if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then begin TMenuItem(ParamMenuItem).Add(localmi); if localmi.Checked then DoCheckedBackToTop(localmi); end; LocalLastAdditionIsASeparator := False; Inc(Result); end; fte_SEPARATOR: begin if (not LocalLastAdditionIsASeparator) then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := '-'; if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Add(localmi); LocalLastAdditionIsASeparator := True; Inc(Result); end; end; fte_STARTMENU: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := FavoriteTabs[I - 1].FavoriteTabsName; //if gIconsInMenus then // localmi.ImageIndex := frmMain.miLoadFavoriteTabs.ImageIndex; if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items.Add(localmi) else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Add(localmi); CompleteMenu(localmi, TagOffset); if localmi.Count <> 0 then begin LocalLastAdditionIsASeparator := False; Inc(Result); end else begin localmi.Free; end; end; fte_ENDMENU: begin if LocalLastAdditionIsASeparator then begin if ParamMenuItem.ClassType = TPopupMenu then TPopupMenu(ParamMenuItem).Items[pred(TPopupMenu(ParamMenuItem).Items.Count)].Free else if ParamMenuItem.ClassType = TMenuItem then TMenuItem(ParamMenuItem).Items[pred(TMenuItem(ParamMenuItem).Count)].Free; Dec(Result); end; exit; end; end; //case FavoriteTabs[I-1].Dispatcher of end; //while I<Count do end; var miMainTree: TMenuItem; begin // 1. Let's clear possible previous items in the menu to create a fresh new one. if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Clear; // 2. Add the Favorite Tabs shortcuts if we have any. if Count > 0 then begin I := 0; CompleteMenu(mncmpMenuComponentToPopulate, 0); end; // 3. Customize minimally our menu. If we wants some configuration and saving, let's add them. case KindFavoriteTabMenuPopulation of ftmp_FAVTABSWITHCONFIG: begin // 3.1. Add the reload/resave items. if (Count > 0) and (GetIndexLastFavoriteTabsLoaded <> -1) then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := ('-'); if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actReloadFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actResaveFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.2. Add a delimiter, a simple line to separate. if Count > 0 then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.3 Now add "Add current tabs to Favorite Tabs". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actSaveFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.4. If we have at least one entry, let's create the "Save Over Existing.." items. if Count > 0 then begin // 3.4.1. Add the "Save current tabs over existing Favorite Tabs entry" in a submenu. // It's placed in a sub menu since when it's time to saved since it's less frequent then keeping accessing... // ...and to avoid to click on it by accident and overwring existing stuff. miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := rsMsgFavortieTabsSaveOverExisting; miMainTree.ImageIndex := frmMain.actResaveFavoriteTabs.ImageIndex; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.4.1. And then add our favorite tabs again BUT with the "TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING" offset in the tag. I := 0; CompleteMenu(miMainTree, TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING); // 3.4.2. Then another separator. // Intentionnally there is no separator when user has no favorite tabs and there is one when there is at least one... // It seems stupid to have a single separator when there is only two items... // ... and when we have many items, it looks good to have the "Save's" enclose between separators. miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // 3.5 Now add "Configure Folder tab". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actConfigFolderTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // 3.6 Now add "Configure Favorite Tabs". miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Action := frmMain.actConfigFavoriteTabs; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; //case KindFavoriteTabMenuPopulation of if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then if TPopupMenu(mncmpMenuComponentToPopulate).Images = nil then TPopupMenu(mncmpMenuComponentToPopulate).Images := frmMain.imgLstActions; if mncmpMenuComponentToPopulate.ClassType = TMenuItem then if TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images = nil then TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images := frmMain.imgLstActions; end; { TFavoriteTabsList.RefreshAssociatedMainMenu } procedure TFavoriteTabsList.RefreshAssociatedMainMenu; var iIndex: integer; miMainTree: TMenuItem; begin if FAssociatedMainMenuItem <> nil then begin if FAssociatedMainMenuItem <> nil then begin if FAssociatedMainMenuItem.Count > 4 then begin iIndex := pred(FAssociatedMainMenuItem.Count); while iIndex > 3 do begin FAssociatedMainMenuItem.Delete(iIndex); Dec(iIndex); end; end; if Count > 0 then begin miMainTree := TMenuItem.Create(FAssociatedMainMenuItem); miMainTree.Caption := '-'; FAssociatedMainMenuItem.Add(miMainTree); end; if GetIndexLastFavoriteTabsLoaded = -1 then begin frmMain.actReloadFavoriteTabs.Enabled := False; frmMain.actResaveFavoriteTabs.Enabled := False; end else begin frmMain.actReloadFavoriteTabs.Enabled := True; frmMain.actResaveFavoriteTabs.Enabled := True; end; end; PopulateMenuWithFavoriteTabs(FAssociatedMainMenuItem, @frmMain.Commands.DoOnClickMenuJobFavoriteTabs, ftmp_JUSTFAVTABS); end; end; { TFavoriteTabsList.LoadTTreeView } // We'll try to restore what was selected prior the reload for the situation where it's pertinent. procedure TFavoriteTabsList.LoadTTreeView(ParamTreeView: TTreeView); var Index: longint; procedure RecursivAddElements(WorkingNode: TTreeNode); var FlagGetOut: boolean = False; LocalNode: TTreeNode; begin while (FlagGetOut = False) and (Index < Count) do begin case FavoriteTabs[Index].Dispatcher of fte_STARTMENU: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FavoriteTabs[Index].FavoriteTabsName, FavoriteTabs[Index]); LocalNode.Data := FavoriteTabs[Index]; Inc(Index); RecursivAddElements(LocalNode); end; fte_ENDMENU: begin FlagGetOut := True; Inc(Index); end; fte_SEPARATOR: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FAVORITETABS_SEPARATORSTRING, FavoriteTabs[Index]); LocalNode.Data := FavoriteTabs[Index]; Inc(Index); end else // ...but should not happened. begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, FavoriteTabs[Index].FavoriteTabsName, FavoriteTabs[Index]); Inc(Index); end; end; end; end; begin ParamTreeView.Items.Clear; Index := 0; RecursivAddElements(nil); end; { TFavoriteTabsList.RefreshFromTTreeView } // The routine will recreate the complete TFavoriteTabsList from a TTreeView. // It cannot erase or replace immediately the current list because the TTreeView refer to it! // So it create it into the "TransitFavoriteTabsList" and then, it will copy it to self one. // It will remember what was selected before based on the unique ID and then restore what is possible to restored after. procedure TFavoriteTabsList.RefreshFromTTreeView(ParamTreeView: TTreeView); var TransitFavoriteTabsList: TFavoriteTabsList; iIndex: integer; slRememberCurrentSelections: TStringList; procedure RecursiveEncapsulateSubMenu(WorkingTreeNode: TTreeNode); var MaybeChildNode: TTreeNode; WorkingFavoriteTabEntry: TFavoriteTabs; begin while WorkingTreeNode <> nil do begin MaybeChildNode := WorkingTreeNode.GetFirstChild; if MaybeChildNode <> nil then begin WorkingFavoriteTabEntry := TFavoriteTabs.Create; TFavoriteTabs(WorkingTreeNode.Data).CopyToFavoriteTabs(WorkingFavoriteTabEntry); WorkingFavoriteTabEntry.Dispatcher := fte_STARTMENU; //Probably not necessary, but let's make sure it will start a menu TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); RecursiveEncapsulateSubMenu(MaybeChildNode); WorkingFavoriteTabEntry := TFavoriteTabs.Create; WorkingFavoriteTabEntry.Dispatcher := fte_ENDMENU; TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); end else begin //We won't copy EMPTY submenu so that's why we check for "fte_STARTMENU". And the check for "fte_ENDMENU" is simply probably unecessary protection if (TFavoriteTabs(WorkingTreeNode.Data).Dispatcher <> fte_STARTMENU) and (TFavoriteTabs(WorkingTreeNode.Data).Dispatcher <> fte_ENDMENU) then begin WorkingFavoriteTabEntry := TFavoriteTabs.Create; TFavoriteTabs(WorkingTreeNode.Data).CopyToFavoriteTabs(WorkingFavoriteTabEntry); TransitFavoriteTabsList.Add(WorkingFavoriteTabEntry); end; end; WorkingTreeNode := WorkingTreeNode.GetNextSibling; end; end; begin if ParamTreeView.Items.Count > 0 then begin slRememberCurrentSelections := TStringList.Create; TransitFavoriteTabsList := TFavoriteTabsList.Create; try //Saving a trace of what is selected right now. for iIndex := 0 to pred(ParamTreeView.Items.Count) do if ParamTreeView.Items[iIndex].Selected then if TFavoriteTabs(ParamTreeView.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then slRememberCurrentSelections.Add(GUIDtoString(TFavoriteTabs(ParamTreeView.Items[iIndex].Data).UniqueID)); TransitFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := FLastFavoriteTabsLoadedUniqueId; RecursiveEncapsulateSubMenu(ParamTreeView.Items.Item[0]); TransitFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(self); LoadTTreeView(ParamTreeView); // Restoring what was selected. ParamTreeView.ClearSelection(False); for iIndex := 0 to pred(ParamTreeView.Items.Count) do if TFavoriteTabs(ParamTreeView.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then ParamTreeView.Items[iIndex].Selected := (slRememberCurrentSelections.IndexOf(GUIDtoString(TFavoriteTabs(ParamTreeView.Items[iIndex].Data).UniqueID)) <> -1); finally TransitFavoriteTabsList.Clear; TransitFavoriteTabsList.Free; FreeAndNil(slRememberCurrentSelections); end; end else begin Self.Clear; mbDeleteFile(GetSingleXmlFavoriteTabsFilename); end; end; { TFavoriteTabsList.ImportFromLegacyTabsFile } function TFavoriteTabsList.ImportFromLegacyTabsFile(paramFilename: string; SpecifiedIndex: integer = -1): boolean; var iNode, oNode: TXmlNode; InputXmlConfig: TXmlConfig; OutputXmlConfig: TXmlConfig; LocalFavoriteTabs: TFavoriteTabs; begin Result := False; try LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := fte_ACTUALFAVTABS; LocalFavoriteTabs.FavoriteTabsName := ExtractOnlyFileName(paramFilename); LocalFavoriteTabs.DestinationForSavedLeftTabs := tclLeft; LocalFavoriteTabs.DestinationForSavedRightTabs := tclRight; LocalFavoriteTabs.ExistingTabsToKeep := tclNone; //The UniqueID is not assigned here because it has already been set when "LocalFavoriteTabs" has been created. InputXmlConfig := TXmlConfig.Create(paramFilename, True); OutputXmlConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); try AddToListAndToXmlFileHeader(LocalFavoriteTabs, OutputXmlConfig, SpecifiedIndex); iNode := InputXmlConfig.FindNode(InputXmlConfig.RootNode, 'Tabs/OpenedTabs/Left'); oNode := OutputXmlConfig.FindNode(OutputXmlConfig.RootNode, 'ActualTabs/' + LocalFavoriteTabs.GuidToXMLString, True); while iNode <> nil do begin GenericCopierProcessNode(iNode, OutputXmlConfig, oNode); // Procédure récursive iNode := iNode.NextSibling; end; OutputXmlConfig.Save; gFavoriteTabsList.LastImportationStringUniqueId.Add(GUIDToString(LocalFavoriteTabs.UniqueID)); Result := True; finally FreeAndNil(OutputXmlConfig); FreeAndNil(InputXmlConfig); end; except on E: Exception do msgError(E.Message); end; end; { TFavoriteTabsList.ExportToLegacyTabsFile } function TFavoriteTabsList.ExportToLegacyTabsFile(index: integer; OutputDirectory: string): boolean; var iNode, oNode: TXmlNode; InputXmlConfig: TXmlConfig; OutputXmlConfig: TXmlConfig; sBasicOutputFilename, sConfigFilename: string; iAttempt: integer; begin Result := False; try // 1. Let's try to give an exported filename based of the Favorite Tabs friendly name. // If a filename like that already exists, add "(x)" to the name and increase "x" until the file does not already exists! sBasicOutputFilename := RemoveInvalidCharsFromFileName(FavoriteTabs[index].FavoriteTabsName); if sBasicOutputFilename = '' then sBasicOutputFilename := 'TabsExported'; sBasicOutputFilename := IncludeTrailingPathDelimiter(OutputDirectory) + sBasicOutputFilename; sConfigFilename := sBasicOutputFilename + '.tab'; iAttempt := 1; while FileExists(sConfigFilename) do begin sConfigFilename := sBasicOutputFilename + '(' + IntToStr(iAttempt) + ').tab'; Inc(iAttempt); end; // 2. Ok. Let's start our exportatation. Basically we start from the section of the source setup and write it to a new single isolated one. InputXmlConfig := TXmlConfig.Create(GetSingleXmlFavoriteTabsFilename, True); OutputXmlConfig := TXmlConfig.Create(sConfigFilename); try iNode := InputXmlConfig.FindNode(InputXmlConfig.RootNode, 'ActualTabs/' + FavoriteTabs[index].GuidToXMLString + '/Left'); if iNode <> nil then begin oNode := OutputXmlConfig.FindNode(OutputXmlConfig.RootNode, 'Tabs/OpenedTabs', True); while iNode <> nil do begin GenericCopierProcessNode(iNode, OutputXmlConfig, oNode); // Procédure récursive iNode := iNode.NextSibling; end; OutputXmlConfig.Save; gFavoriteTabsList.LastImportationStringUniqueId.Add(sConfigFilename); Result := True; end; finally FreeAndNil(OutputXmlConfig); FreeAndNil(InputXmlConfig); end; except on E: Exception do msgError(E.Message); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fcopymovedlg.lfm����������������������������������������������������������������0000644�0001750�0000144�00000025726�12503231714�016514� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmCopyDlg: TfrmCopyDlg Left = 462 Height = 263 Top = 260 Width = 612 HorzScrollBar.Page = 349 HorzScrollBar.Range = 337 VertScrollBar.Page = 205 VertScrollBar.Range = 186 ActiveControl = edtDst AutoSize = True BorderIcons = [biSystemMenu, biMaximize] Caption = 'Copy file(s)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 263 ClientWidth = 612 KeyPreview = True OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnPaint = FormPaint OnShow = frmCopyDlgShow Position = poScreenCenter LCLVersion = '1.2.4.0' object lblCopySrc: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 20 Top = 8 Width = 596 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 ParentColor = False end object edtDst: TKASPathEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblCopySrc AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 27 Top = 34 Width = 596 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 TabOrder = 0 ObjectTypes = [otFolders, otNonFolders] FileSortType = fstFoldersFirst end object pnlSelector: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = edtDst AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 69 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 8 BevelOuter = bvNone Color = clForm ParentColor = False TabOrder = 1 end object pnlButtons: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = pnlSelector AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 36 Top = 74 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 596 Color = clForm ParentColor = False TabOrder = 2 object btnOptions: TButton Left = 0 Height = 36 Top = 0 Width = 100 Align = alLeft AutoSize = True Caption = 'O&ptions' Constraints.MinWidth = 100 OnClick = btnOptionsClick TabOrder = 0 end object btnAddToQueue: TBitBtn Left = 268 Height = 36 Top = 0 Width = 118 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'A&dd To Queue' Constraints.MinHeight = 34 Constraints.MinWidth = 88 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000004733AFF21824FFF638272FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF7ACFA4FF2C8C5AFF3D7659FFAEAEAEFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF82D8ACFF76D6A6FF3C9D6AFF27744CFFACAEADFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000009773FFF83DBAEFF1FC671FF72DEA7FF4BB27FFF177445FFA8ADAAFF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF83DCAFFF11C369FF1ACC73FF69DFA3FF5AC28DFF137643FF9EA7 A3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF10BD65FF11C167FF13C269FF59D395FF67C998FF167C 47FF889C92FF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0DB35EFF0EB660FF0EB660FF0DB45FFF47C484FF70CA 9CFF1D824DFF678C79FF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0CAA58FF12AE5EFF15AF60FF16AD61FF13AA5DFF3AB6 77FF75C79DFF288957FF4E8367FF000000000000000000000000000000000000 000004733AFFA9DCC1FF2EAD6BFF2BAD6AFF27AB68FF22A964FF1CA55FFF41B2 78FF78C69FFF298858FF678C79FF000000000000000000000000000000000000 000004733AFFA9DCC1FF36AD70FF32AC6DFF2DAA6AFF28A866FF58BC89FF78C5 9DFF1F804EFF839A8EFF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF3EB176FF3AAF73FF36AE70FF6FC598FF71BF97FF187B 49FFA6B0ABFF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF45B47BFF47B47CFF82CCA6FF67B68CFF177745FFC1C5 C3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA5DABFFF57BB87FF90D2B0FF5BAB82FF23774CFFD4D5D4FF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF9BD5B7FF4C9F73FF3D7D5CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA4D9BEFF3D9366FF5F8873FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF2D8859FF859C90FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 TabOrder = 1 end object btnCreateSpecialQueue: TBitBtn Left = 386 Height = 36 Top = 0 Width = 23 Align = alRight BorderSpacing.Right = 12 Glyph.Data = { 72000000424D7200000000000000360000002800000005000000030000000100 2000000000003C00000064000000640000000000000000000000000000000000 0000000000FF000000000000000000000000000000FF000000FF000000FF0000 0000000000FF000000FF000000FF000000FF000000FF } Layout = blGlyphBottom OnClick = btnCreateSpecialQueueClick PopupMenu = pmQueuePopup TabOrder = 2 end object btnCancel: TBitBtn Left = 421 Height = 36 Top = 0 Width = 79 Align = alRight AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 3 end object btnOK: TBitBtn Left = 508 Height = 36 Top = 0 Width = 88 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Constraints.MinHeight = 34 Constraints.MinWidth = 88 Default = True Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000004733AFF21824FFF638272FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF7ACFA4FF2C8C5AFF3D7659FFAEAEAEFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF82D8ACFF76D6A6FF3C9D6AFF27744CFFACAEADFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000009773FFF83DBAEFF1FC671FF72DEA7FF4BB27FFF177445FFA8ADAAFF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF83DCAFFF11C369FF1ACC73FF69DFA3FF5AC28DFF137643FF9EA7 A3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF10BD65FF11C167FF13C269FF59D395FF67C998FF167C 47FF889C92FF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0DB35EFF0EB660FF0EB660FF0DB45FFF47C484FF70CA 9CFF1D824DFF678C79FF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF0CAA58FF12AE5EFF15AF60FF16AD61FF13AA5DFF3AB6 77FF75C79DFF288957FF4E8367FF000000000000000000000000000000000000 000004733AFFA9DCC1FF2EAD6BFF2BAD6AFF27AB68FF22A964FF1CA55FFF41B2 78FF78C69FFF298858FF678C79FF000000000000000000000000000000000000 000004733AFFA9DCC1FF36AD70FF32AC6DFF2DAA6AFF28A866FF58BC89FF78C5 9DFF1F804EFF839A8EFF00000000000000000000000000000000000000000000 000004733AFFA9DCC1FF3EB176FF3AAF73FF36AE70FF6FC598FF71BF97FF187B 49FFA6B0ABFF0000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF45B47BFF47B47CFF82CCA6FF67B68CFF177745FFC1C5 C3FF000000000000000000000000000000000000000000000000000000000000 000004733AFFA5DABFFF57BB87FF90D2B0FF5BAB82FF23774CFFD4D5D4FF0000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA9DCC1FF9BD5B7FF4C9F73FF3D7D5CFF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFFA4D9BEFF3D9366FF5F8873FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000004733AFF2D8859FF859C90FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } ModalResult = 1 OnClick = btnOKClick TabOrder = 4 end end object pnlOptions: TPanel AnchorSideLeft.Control = edtDst AnchorSideTop.Control = pnlButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtDst AnchorSideRight.Side = asrBottom Left = 8 Height = 39 Top = 114 Width = 596 AutoSize = True BorderSpacing.Top = 4 BevelOuter = bvNone ClientHeight = 39 ClientWidth = 596 Color = clForm ParentColor = False TabOrder = 3 OnResize = pnlOptionsResize object grpOptions: TGroupBox AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 4 Top = 0 Width = 596 Anchors = [akTop, akLeft, akRight] AutoSize = True TabOrder = 0 end object btnSaveOptions: TButton AnchorSideLeft.Control = grpOptions AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = grpOptions AnchorSideTop.Side = asrBottom Left = 207 Height = 27 Top = 12 Width = 183 AutoSize = True BorderSpacing.Top = 8 Caption = 'Sa&ve these options as default' OnClick = btnSaveOptionsClick TabOrder = 1 end end object pmQueuePopup: TPopupMenu left = 296 top = 184 object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end end end ������������������������������������������doublecmd-0.7.1/src/uwcxmodule.pas������������������������������������������������������������������0000644�0001750�0000144�00000066415�12673232504�016225� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Archive File support - class for manage WCX plugins (Version 2.20) Copyright (C) 2006-2015 Koblov Alexander (Alexx2000@mail.ru) 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 uWCXmodule; {$mode objfpc}{$H+} interface uses LCLType, Classes, Dialogs, LazUTF8Classes, dynlibs, uWCXprototypes, WcxPlugin, Extension, DCClassesUtf8, DCBasicTypes, DCXmlConfig; Type TWCXOperation = (OP_EXTRACT, OP_PACK, OP_DELETE); { TWCXHeaderData } { Handles THeaderData and THeaderDataEx } TWCXHeader = class private function PCharLToUTF8(CharString: PChar; MaxSize: Integer): String; public ArcName: String; FileName: String; Flags, HostOS, FileCRC, FileTime, UnpVer, Method: Longint; FileAttr: TFileAttrs; PackSize, UnpSize: Int64; Cmt: String; CmtState: Longint; constructor Create(const Data: PHeaderData); overload; constructor Create(const Data: PHeaderDataEx); overload; constructor Create(const Data: PHeaderDataExW); overload; constructor Create; overload; // allows creating empty record end; { TWcxModule } TWcxModule = class private FModuleHandle: TLibHandle; // Handle to .DLL or .so FBackgroundFlags: Integer; public // module's functions { Mandatory } OpenArchive : TOpenArchive; ReadHeader : TReadHeader; ProcessFile : TProcessFile; CloseArchive : TCloseArchive; { Optional } ReadHeaderEx : TReadHeaderEx; PackFiles : TPackFiles; DeleteFiles : TDeleteFiles; GetPackerCaps : TGetPackerCaps; ConfigurePacker : TConfigurePacker; SetChangeVolProc : TSetChangeVolProc; SetProcessDataProc : TSetProcessDataProc; StartMemPack : TStartMemPack; PackToMem : TPackToMem; DoneMemPack : TDoneMemPack; CanYouHandleThisFile : TCanYouHandleThisFile; PackSetDefaultParams : TPackSetDefaultParams; PkSetCryptCallback : TPkSetCryptCallback; GetBackgroundFlags: TGetBackgroundFlags; { Unicode } OpenArchiveW: TOpenArchiveW; ReadHeaderExW: TReadHeaderExW; ProcessFileW: TProcessFileW; SetChangeVolProcW: TSetChangeVolProcW; SetProcessDataProcW:TSetProcessDataProcW; PackFilesW: TPackFilesW; DeleteFilesW: TDeleteFilesW; StartMemPackW: TStartMemPackW; CanYouHandleThisFileW: TCanYouHandleThisFileW; PkSetCryptCallbackW : TPkSetCryptCallbackW; { Extension API } ExtensionInitialize: TExtensionInitializeProc; ExtensionFinalize: TExtensionFinalizeProc; private function LoadModule(const sName:String):Boolean; {Load WCX plugin} procedure UnloadModule; {UnLoad WCX plugin} public constructor Create; destructor Destroy; override; { Reads WCX header using ReadHeaderEx if available or ReadHeader. } function ReadWCXHeader(hArcData: TArcHandle; out HeaderData: TWCXHeader): Integer; function OpenArchiveHandle(FileName: String; anOpenMode: Longint; out OpenResult: Longint): TArcHandle; function WcxProcessFile(hArcData: TArcHandle; Operation: LongInt; DestPath, DestName: String): LongInt; function WcxPackFiles(PackedFile, SubPath, SrcPath, AddList: String; Flags: LongInt): LongInt; function WcxDeleteFiles(PackedFile, DeleteList: String): LongInt; function WcxCanYouHandleThisFile(FileName: String): Boolean; function WcxStartMemPack(Options: LongInt; FileName: String): TArcHandle; procedure WcxSetChangeVolProc(hArcData: TArcHandle; ChangeVolProcA: TChangeVolProc; ChangeVolProcW: TChangeVolProcW); procedure WcxSetProcessDataProc(hArcData: TArcHandle; ProcessDataProcA: TProcessDataProc; ProcessDataProcW: TProcessDataProcW); procedure WcxSetCryptCallback(CryptoNr, Flags: Integer; PkCryptProcA: TPkCryptProc; PkCryptProcW: TPkCryptProcW); procedure VFSConfigure(Parent: HWND); function GetPluginCapabilities: Integer; function IsLoaded: Boolean; property BackgroundFlags: Integer read FBackgroundFlags write FBackgroundFlags; end; { TWCXModuleList } TWCXModuleList = class(TStringList) private FModuleList: TStringListUTF8; private function GetAEnabled(Index: Integer): Boolean; function GetAExt(Index: Integer): String; function GetAFileName(Index: Integer): String; function GetAFlags(Index: Integer): PtrInt; procedure SetAEnabled(Index: Integer; const AValue: Boolean); procedure SetAFileName(Index: Integer; const AValue: String); procedure SetAFlags(Index: Integer; const AValue: PtrInt); procedure SetExt(Index: Integer; const AValue: String); public constructor Create; reintroduce; destructor Destroy; override; public procedure Load(Ini: TIniFileEx); procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(Ini: TIniFileEx); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); function Add(Ext: String; Flags: PtrInt; FileName: String): Integer; reintroduce; function FindFirstEnabledByName(Name: String): Integer; function Find(const aFileName, aExt: String): Integer; overload; function LoadModule(const FileName: String): TWcxModule; property FileName[Index: Integer]: String read GetAFileName write SetAFileName; property Flags[Index: Integer]: PtrInt read GetAFlags write SetAFlags; property Ext[Index: Integer]: String read GetAExt write SetExt; property Enabled[Index: Integer]: Boolean read GetAEnabled write SetAEnabled; end; function GetErrorMsg(iErrorMsg : Integer): String; function WcxFileTimeToDateTime(Header: TWCXHeader): TDateTime; implementation uses SysUtils, LazUTF8, uLng, fDialogBox, uGlobsPaths, FileUtil, uOSUtils, DCOSUtils, DCDateTimeUtils, DCConvertEncoding, uDebug; const WcxIniFileName = 'wcx.ini'; constructor TWcxModule.Create; begin FModuleHandle := 0; end; destructor TWcxModule.Destroy; begin if IsLoaded then begin if Assigned(ExtensionFinalize) then ExtensionFinalize(nil); //------------------------------------------------------ UnloadModule; end; end; function TWcxModule.OpenArchiveHandle(FileName: String; anOpenMode: Longint; out OpenResult: Longint): TArcHandle; var ArcFile: tOpenArchiveData; ArcFileW: tOpenArchiveDataW; AnsiFileName: AnsiString; WideFileName: WideString; begin if (anOpenMode >= PK_OM_LIST) and (anOpenMode <= PK_OM_EXTRACT) then begin if Assigned(OpenArchiveW) then begin FillChar(ArcFileW, SizeOf(ArcFileW), #0); WideFileName := UTF8Decode(FileName); ArcFileW.ArcName := PWideChar(WideFileName); // Pointer to local variable. ArcFileW.OpenMode := anOpenMode; Result := OpenArchiveW(ArcFileW); if Result = 0 then OpenResult := ArcFileW.OpenResult else OpenResult := E_SUCCESS; end else if Assigned(OpenArchive) then begin FillChar(ArcFile, SizeOf(ArcFile), #0); AnsiFileName := mbFileNameToSysEnc(FileName); ArcFile.ArcName := PAnsiChar(AnsiFileName); // Pointer to local variable. ArcFile.OpenMode := anOpenMode; Result := OpenArchive(ArcFile); if Result = 0 then OpenResult := ArcFile.OpenResult else OpenResult := E_SUCCESS; end; end else raise Exception.Create('Invalid WCX open mode'); end; function TWcxModule.WcxProcessFile(hArcData: TArcHandle; Operation: LongInt; DestPath, DestName: String): LongInt; begin if Assigned(ProcessFileW) then begin if DestPath = EmptyStr then Result:= ProcessFileW(hArcData, Operation, nil, PWideChar(UTF8Decode(DestName))) else Result:= ProcessFileW(hArcData, Operation, PWideChar(UTF8Decode(DestPath)), PWideChar(UTF8Decode(DestName))); end else if Assigned(ProcessFile) then begin if DestPath = EmptyStr then Result:= ProcessFile(hArcData, Operation, nil, PAnsiChar(CeUtf8ToSys(DestName))) else Result:= ProcessFile(hArcData, Operation, PAnsiChar(CeUtf8ToSys(DestPath)), PAnsiChar(CeUtf8ToSys(DestName))); end; end; function TWcxModule.WcxPackFiles(PackedFile, SubPath, SrcPath, AddList: String; Flags: LongInt): LongInt; begin if Assigned(PackFilesW) then begin if SubPath = EmptyStr then Result:= PackFilesW(PWideChar(UTF8Decode(PackedFile)), nil, PWideChar(UTF8Decode(SrcPath)), PWideChar(UTF8Decode(AddList)), Flags) else Result:= PackFilesW(PWideChar(UTF8Decode(PackedFile)), PWideChar(UTF8Decode(SubPath)), PWideChar(UTF8Decode(SrcPath)), PWideChar(UTF8Decode(AddList)), Flags); end else if Assigned(PackFiles) then begin if SubPath = EmptyStr then Result:= PackFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), nil, PAnsiChar(CeUtf8ToSys(SrcPath)), PAnsiChar(CeUtf8ToSys(AddList)), Flags) else Result:= PackFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), PAnsiChar(CeUtf8ToSys(SubPath)), PAnsiChar(CeUtf8ToSys(SrcPath)), PAnsiChar(CeUtf8ToSys(AddList)), Flags); end; end; function TWcxModule.WcxDeleteFiles(PackedFile, DeleteList: String): LongInt; begin if Assigned(DeleteFilesW) then Result:= DeleteFilesW(PWideChar(UTF8Decode(PackedFile)), PWideChar(UTF8Decode(DeleteList))) else if Assigned(DeleteFiles) then Result:= DeleteFiles(PAnsiChar(CeUtf8ToSys(PackedFile)), PAnsiChar(CeUtf8ToSys(DeleteList))); end; function TWcxModule.WcxCanYouHandleThisFile(FileName: String): Boolean; begin if Assigned(CanYouHandleThisFileW) then Result:= CanYouHandleThisFileW(PWideChar(UTF8Decode(FileName))) else if Assigned(CanYouHandleThisFile) then Result:= CanYouHandleThisFile(PAnsiChar(CeUtf8ToSys(FileName))) else Result:= True; end; function TWcxModule.WcxStartMemPack(Options: LongInt; FileName: String): TArcHandle; begin if Assigned(StartMemPackW) then Result:= StartMemPackW(Options, PWideChar(UTF8Decode(FileName))) else if Assigned(StartMemPack) then Result:= StartMemPack(Options, PAnsiChar(CeUtf8ToSys(FileName))); end; procedure TWcxModule.WcxSetChangeVolProc(hArcData: TArcHandle; ChangeVolProcA: TChangeVolProc; ChangeVolProcW: TChangeVolProcW); begin if Assigned(SetChangeVolProcW) then SetChangeVolProcW(hArcData, ChangeVolProcW); if Assigned(SetChangeVolProc) then SetChangeVolProc(hArcData, ChangeVolProcA); end; procedure TWcxModule.WcxSetProcessDataProc(hArcData: TArcHandle; ProcessDataProcA: TProcessDataProc; ProcessDataProcW: TProcessDataProcW); begin if Assigned(SetProcessDataProcW) then SetProcessDataProcW(hArcData, ProcessDataProcW); if Assigned(SetProcessDataProc) then SetProcessDataProc(hArcData, ProcessDataProcA); end; procedure TWcxModule.WcxSetCryptCallback(CryptoNr, Flags: Integer; PkCryptProcA: TPkCryptProc; PkCryptProcW: TPkCryptProcW); begin if Assigned(PkSetCryptCallbackW) then PkSetCryptCallbackW(PkCryptProcW, CryptoNr, Flags); if Assigned(PkSetCryptCallback) then PkSetCryptCallback(PkCryptProcA, CryptoNr, Flags); end; function TWcxModule.LoadModule(const sName:String):Boolean; var PackDefaultParamStruct : TPackDefaultParamStruct; StartupInfo: TExtensionStartupInfo; begin FModuleHandle := mbLoadLibrary(sName); if FModuleHandle = 0 then Exit(False); DCDebug('WCX module loaded ' + sName + ' at ' + hexStr(Pointer(FModuleHandle))); // Mandatory functions OpenArchive:= TOpenArchive(GetProcAddress(FModuleHandle,'OpenArchive')); ReadHeader:= TReadHeader(GetProcAddress(FModuleHandle,'ReadHeader')); ReadHeaderEx:= TReadHeaderEx(GetProcAddress(FModuleHandle,'ReadHeaderEx')); ProcessFile:= TProcessFile(GetProcAddress(FModuleHandle,'ProcessFile')); CloseArchive:= TCloseArchive(GetProcAddress(FModuleHandle,'CloseArchive')); // Unicode OpenArchiveW:= TOpenArchiveW(GetProcAddress(FModuleHandle,'OpenArchiveW')); ReadHeaderExW:= TReadHeaderExW(GetProcAddress(FModuleHandle,'ReadHeaderExW')); ProcessFileW:= TProcessFileW(GetProcAddress(FModuleHandle,'ProcessFileW')); Result:= (OpenArchive <> nil) and (ReadHeader <> nil) and (ProcessFile <> nil); if (Result = False) then begin OpenArchive:= nil; ReadHeader:= nil; ProcessFile:= nil; Result:= (OpenArchiveW <> nil) and (ReadHeaderExW <> nil) and (ProcessFileW <> nil); end; if (Result = False) or (CloseArchive = nil) then begin OpenArchiveW:= nil; ReadHeaderExW:= nil; ProcessFileW:= nil; CloseArchive:= nil; Exit(False); end; // Optional functions PackFiles:= TPackFiles(GetProcAddress(FModuleHandle,'PackFiles')); DeleteFiles:= TDeleteFiles(GetProcAddress(FModuleHandle,'DeleteFiles')); GetPackerCaps:= TGetPackerCaps(GetProcAddress(FModuleHandle,'GetPackerCaps')); ConfigurePacker:= TConfigurePacker(GetProcAddress(FModuleHandle,'ConfigurePacker')); SetChangeVolProc:= TSetChangeVolProc(GetProcAddress(FModuleHandle,'SetChangeVolProc')); SetProcessDataProc:= TSetProcessDataProc(GetProcAddress(FModuleHandle,'SetProcessDataProc')); StartMemPack:= TStartMemPack(GetProcAddress(FModuleHandle,'StartMemPack')); PackToMem:= TPackToMem(GetProcAddress(FModuleHandle,'PackToMem')); DoneMemPack:= TDoneMemPack(GetProcAddress(FModuleHandle,'DoneMemPack')); CanYouHandleThisFile:= TCanYouHandleThisFile(GetProcAddress(FModuleHandle,'CanYouHandleThisFile')); PackSetDefaultParams:= TPackSetDefaultParams(GetProcAddress(FModuleHandle,'PackSetDefaultParams')); PkSetCryptCallback:= TPkSetCryptCallback(GetProcAddress(FModuleHandle,'PkSetCryptCallback')); GetBackgroundFlags:= TGetBackgroundFlags(GetProcAddress(FModuleHandle,'GetBackgroundFlags')); // Unicode SetChangeVolProcW:= TSetChangeVolProcW(GetProcAddress(FModuleHandle,'SetChangeVolProcW')); SetProcessDataProcW:= TSetProcessDataProcW(GetProcAddress(FModuleHandle,'SetProcessDataProcW')); PackFilesW:= TPackFilesW(GetProcAddress(FModuleHandle,'PackFilesW')); DeleteFilesW:= TDeleteFilesW(GetProcAddress(FModuleHandle,'DeleteFilesW')); StartMemPackW:= TStartMemPackW(GetProcAddress(FModuleHandle,'StartMemPackW')); CanYouHandleThisFileW:= TCanYouHandleThisFileW(GetProcAddress(FModuleHandle,'CanYouHandleThisFileW')); PkSetCryptCallbackW:= TPkSetCryptCallbackW(GetProcAddress(FModuleHandle,'PkSetCryptCallbackW')); // Extension API ExtensionInitialize:= TExtensionInitializeProc(GetProcAddress(FModuleHandle,'ExtensionInitialize')); ExtensionFinalize:= TExtensionFinalizeProc(GetProcAddress(FModuleHandle,'ExtensionFinalize')); if Assigned(PackSetDefaultParams) then begin with PackDefaultParamStruct do begin Size := SizeOf(PackDefaultParamStruct); PluginInterfaceVersionLow := 10; PluginInterfaceVersionHi := 2; DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WcxIniFileName); end; PackSetDefaultParams(@PackDefaultParamStruct); end; if not Assigned(GetBackgroundFlags) then FBackgroundFlags:= 0 else FBackgroundFlags:= GetBackgroundFlags(); // Extension API if Assigned(ExtensionInitialize) then begin FillByte(StartupInfo, SizeOf(TExtensionStartupInfo), 0); with StartupInfo do begin StructSize:= SizeOf(TExtensionStartupInfo); PluginDir:= ExtractFilePath(sName); PluginConfDir:= gpCfgDir; InputBox:= @fDialogBox.InputBox; MessageBox:= @fDialogBox.MessageBox; DialogBoxLFM:= @fDialogBox.DialogBoxLFM; DialogBoxLRS:= @fDialogBox.DialogBoxLRS; DialogBoxLFMFile:= @fDialogBox.DialogBoxLFMFile; SendDlgMsg:= @fDialogBox.SendDlgMsg; end; ExtensionInitialize(@StartupInfo); end; end; procedure TWcxModule.UnloadModule; begin if FModuleHandle <> NilHandle then begin FreeLibrary(FModuleHandle); FModuleHandle := NilHandle; end; // Mandatory OpenArchive:= nil; ReadHeader:= nil; ReadHeaderEx:= nil; ProcessFile:= nil; CloseArchive:= nil; // Optional PackFiles:= nil; DeleteFiles:= nil; GetPackerCaps:= nil; ConfigurePacker:= nil; SetChangeVolProc:= nil; SetProcessDataProc:= nil; StartMemPack:= nil; PackToMem:= nil; DoneMemPack:= nil; CanYouHandleThisFile:= nil; PackSetDefaultParams:= nil; PkSetCryptCallback:= nil; GetBackgroundFlags:= nil; // Unicode OpenArchiveW:= nil; ReadHeaderExW:= nil; ProcessFileW:= nil; SetChangeVolProcW:= nil; SetProcessDataProcW:= nil; PackFilesW:= nil; DeleteFilesW:= nil; StartMemPackW:= nil; CanYouHandleThisFileW:= nil; PkSetCryptCallbackW:= nil; // Extension API ExtensionInitialize:= nil; ExtensionFinalize:= nil; end; function GetErrorMsg(iErrorMsg : Integer): String; begin case iErrorMsg of E_END_ARCHIVE : Result := rsMsgErrEndArchive; E_NO_MEMORY : Result := rsMsgErrNoMemory; E_BAD_DATA : Result := rsMsgErrBadData; E_BAD_ARCHIVE : Result := rsMsgErrBadArchive; E_UNKNOWN_FORMAT : Result := rsMsgErrUnknownFormat; E_EOPEN : Result := rsMsgErrEOpen; E_ECREATE : Result := rsMsgErrECreate; E_ECLOSE : Result := rsMsgErrEClose; E_EREAD : Result := rsMsgErrERead; E_EWRITE : Result := rsMsgErrEWrite; E_SMALL_BUF : Result := rsMsgErrSmallBuf; E_EABORTED : Result := rsMsgErrEAborted; E_NO_FILES : Result := rsMsgErrNoFiles; E_TOO_MANY_FILES : Result := rsMsgErrTooManyFiles; E_NOT_SUPPORTED : Result := rsMsgErrNotSupported; else Result := IntToStr(iErrorMsg); end; end; procedure TWcxModule.VFSConfigure(Parent: HWND); begin if Assigned(ConfigurePacker) then ConfigurePacker(Parent, FModuleHandle); end; function TWcxModule.ReadWCXHeader(hArcData: TArcHandle; out HeaderData: TWCXHeader): Integer; var ArcHeader : THeaderData; ArcHeaderEx : THeaderDataEx; ArcHeaderExW : THeaderDataExW; begin HeaderData := nil; if Assigned(ReadHeaderExW) then begin FillChar(ArcHeaderExW, SizeOf(ArcHeaderExW), #0); Result := ReadHeaderExW(hArcData, ArcHeaderExW); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderDataExW(@ArcHeaderExW)); end; end else if Assigned(ReadHeaderEx) then begin FillChar(ArcHeaderEx, SizeOf(ArcHeaderEx), #0); Result := ReadHeaderEx(hArcData, ArcHeaderEx); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderDataEx(@ArcHeaderEx)); end; end else if Assigned(ReadHeader) then begin FillChar(ArcHeader, SizeOf(ArcHeader), #0); Result := ReadHeader(hArcData, ArcHeader); if Result = E_SUCCESS then begin HeaderData := TWCXHeader.Create(PHeaderData(@ArcHeader)); end; end else begin Result := E_NOT_SUPPORTED; end; end; function TWcxModule.GetPluginCapabilities: Integer; begin if Assigned(GetPackerCaps) then Result := GetPackerCaps() else Result := 0; end; function TWcxModule.IsLoaded: Boolean; begin Result := (FModuleHandle <> NilHandle); end; { TWCXModuleList } function TWCXModuleList.GetAEnabled(Index: Integer): Boolean; begin Result:= Boolean(PtrInt(Objects[Index])); end; function TWCXModuleList.GetAExt(Index: Integer): String; begin Result:= Names[Index]; end; function TWCXModuleList.GetAFileName(Index: Integer): String; var sCurrPlugin: String; iPosComma : Integer; begin sCurrPlugin:= ValueFromIndex[Index]; iPosComma:= Pos(',', sCurrPlugin); //get file name Result:= Copy(sCurrPlugin, iPosComma + 1, Length(sCurrPlugin) - iPosComma); end; function TWCXModuleList.GetAFlags(Index: Integer): PtrInt; var sCurrPlugin: String; iPosComma : Integer; begin sCurrPlugin:= ValueFromIndex[Index]; iPosComma:= Pos(',', sCurrPlugin); // get packer flags Result:= StrToInt(Copy(sCurrPlugin, 1, iPosComma-1)); end; procedure TWCXModuleList.SetAEnabled(Index: Integer; const AValue: Boolean); begin Objects[Index]:= TObject(PtrInt(AValue)); end; procedure TWCXModuleList.SetAFileName(Index: Integer; const AValue: String); begin ValueFromIndex[Index]:= IntToStr(GetAFlags(Index)) + #44 + AValue; end; procedure TWCXModuleList.SetAFlags(Index: Integer; const AValue: PtrInt); begin ValueFromIndex[Index]:= IntToStr(AValue) + #44 + GetAFileName(Index); end; procedure TWCXModuleList.SetExt(Index: Integer; const AValue: String); var sValue : String; begin sValue:= ValueFromIndex[Index]; Self[Index]:= AValue + '=' + sValue; end; constructor TWCXModuleList.Create; begin FModuleList:= TStringListUTF8.Create; FModuleList.Sorted:= True; end; destructor TWCXModuleList.Destroy; var I: Integer; begin for I:= 0 to FModuleList.Count - 1 do begin TWcxModule(FModuleList.Objects[I]).Free; end; FreeAndNil(FModuleList); inherited Destroy; end; procedure TWCXModuleList.Load(Ini: TIniFileEx); var I: Integer; sCurrPlugin, sValue: String; begin Ini.ReadSectionRaw('PackerPlugins', Self); for I:= 0 to Count - 1 do if Pos('#', Names[I]) = 0 then begin Enabled[I]:= True; end else begin sCurrPlugin:= Names[I]; sValue:= ValueFromIndex[I]; Self[I]:= Copy(sCurrPlugin, 2, Length(sCurrPlugin) - 1) + '=' + sValue; Enabled[I]:= False; end; end; procedure TWCXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; AExt, APath: String; AFlags: Integer; begin Clear; ANode := ANode.FindNode('WcxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WcxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'ArchiveExt', AExt) and AConfig.TryGetValue(ANode, 'Path', APath) then begin AFlags := AConfig.GetValue(ANode, 'Flags', 0); I := Add(AExt, AFlags, APath); Enabled[I] := AConfig.GetAttr(ANode, 'Enabled', True); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWCXModuleList.Save(Ini: TIniFileEx); var I: Integer; begin Ini.EraseSection('PackerPlugins'); for I := 0 to Count - 1 do begin if Enabled[I] then begin Ini.WriteString('PackerPlugins', Names[I], ValueFromIndex[I]) end else begin Ini.WriteString('PackerPlugins', '#' + Names[I], ValueFromIndex[I]); end; end; end; procedure TWCXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WcxPlugins', True); AConfig.ClearNode(ANode); for I := 0 to Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WcxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', Enabled[I]); AConfig.AddValue(SubNode, 'ArchiveExt', Ext[I]); AConfig.AddValue(SubNode, 'Path', FileName[I]); AConfig.AddValue(SubNode, 'Flags', Flags[I]); end; end; function TWCXModuleList.Add(Ext: String; Flags: PtrInt; FileName: String): Integer; begin Result:= AddObject(Ext + '=' + IntToStr(Flags) + #44 + FileName, TObject(True)); end; function TWCXModuleList.FindFirstEnabledByName(Name: String): Integer; begin Result:=0; while Result < Count do begin if Enabled[Result] and (DoCompareText(Names[Result], Name) = 0) then Exit else Result := Result + 1; end; if Result=Count then Result:=-1; end; function TWCXModuleList.Find(const aFileName, aExt: String): Integer; begin Result:=0; while Result < Count do begin if (DoCompareText(Ext[Result], aExt) = 0) and (DoCompareText(FileName[Result], aFileName) = 0) then Exit else Result := Result + 1; end; if Result=Count then Result:=-1; end; function TWCXModuleList.LoadModule(const FileName: String): TWcxModule; var Index: Integer; begin if FModuleList.Find(FileName, Index) then Result := TWcxModule(FModuleList.Objects[Index]) else begin Result := TWcxModule.Create; if not Result.LoadModule(FileName) then FreeAndNil(Result) else begin FModuleList.AddObject(FileName, Result); end; end; end; { TWCXHeader } constructor TWCXHeader.Create(const Data: PHeaderData); begin ArcName := PCharLToUTF8(Data^.ArcName, SizeOf(Data^.ArcName)); FileName := PCharLToUTF8(Data^.FileName, SizeOf(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Data^.PackSize; UnpSize := Data^.UnpSize; if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; end; constructor TWCXHeader.Create(const Data: PHeaderDataEx); function Combine64(High, Low: LongWord): Int64; begin Result := Int64(High) shl (SizeOf(Int64) shl 2); Result := Result + Int64(Low); end; begin ArcName := PCharLToUTF8(Data^.ArcName, SizeOf(Data^.ArcName)); FileName := PCharLToUTF8(Data^.FileName, SizeOf(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Combine64(Data^.PackSizeHigh, Data^.PackSize); UnpSize := Combine64(Data^.UnpSizeHigh, Data^.UnpSize); if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; end; constructor TWCXHeader.Create(const Data: PHeaderDataExW); function Combine64(High, Low: LongWord): Int64; begin Result := Int64(High) shl (SizeOf(Int64) shl 2); Result := Result + Int64(Low); end; begin ArcName := UTF16ToUTF8(UnicodeString(Data^.ArcName)); FileName := UTF16ToUTF8(UnicodeString(Data^.FileName)); Flags := Data^.Flags; HostOS := Data^.HostOS; FileCRC := Data^.FileCRC; FileTime := Data^.FileTime; UnpVer := Data^.UnpVer; Method := Data^.Method; FileAttr := TFileAttrs(Data^.FileAttr); PackSize := Combine64(Data^.PackSizeHigh, Data^.PackSize); UnpSize := Combine64(Data^.UnpSizeHigh, Data^.UnpSize); if Assigned(Data^.CmtBuf) then Cmt := PCharLToUTF8(Data^.CmtBuf, Data^.CmtSize); CmtState := Data^.CmtState; end; constructor TWCXHeader.Create; begin end; function TWCXHeader.PCharLToUTF8(CharString: PChar; MaxSize: Integer): String; var NameLength: Integer; TempString: AnsiString; begin NameLength := strlen(CharString); if NameLength > MaxSize then NameLength := MaxSize; SetString(TempString, CharString, NameLength); Result := CeSysToUtf8(TempString); end; // -- function WcxFileTimeToDateTime(Header: TWCXHeader): TDateTime; begin {$IF DEFINED(MSWINDOWS)} Result := DosFileTimeToDateTime(Header.FileTime); {$ELSEIF DEFINED(UNIX)} {$PUSH}{$R-} Result := FileTimeToDateTime(Header.FileTime); {$POP} {$ELSE} Result := 0; {$ENDIF} end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uvfsmodule.pas������������������������������������������������������������������0000644�0001750�0000144�00000005010�12616350071�016177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVfsModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type { TFileSourceClass } TFileSourceClass = class of TFileSource; { TVfsModule } TVfsModule = class Visible: Boolean; FileSourceClass: TFileSourceClass; end; { TVfsModuleList } TVfsModuleList = class(TStringList) private function GetVfsModule(const S: String): TVfsModule; public destructor Destroy; override; function GetFileSource(const Path: String): TFileSourceClass; function FindFileSource(const AClassName: String): TFileSourceClass; property VfsModule[const S: String]: TVfsModule read GetVfsModule; end; procedure RegisterVirtualFileSource(AName: String; AFileSourceClass: TFileSourceClass; Visible: Boolean = True); var // All of file sources from this list will be displayed // in the Virtual File System List. It can be used for example // for system specific virtual folders (Control Panel, Desktop, etc.) gVfsModuleList: TVfsModuleList; implementation procedure RegisterVirtualFileSource(AName: String; AFileSourceClass: TFileSourceClass; Visible: Boolean = True); var VfsModule: TVfsModule; begin VfsModule:= TVfsModule.Create; VfsModule.Visible:= Visible; VfsModule.FileSourceClass:= AFileSourceClass; gVfsModuleList.AddObject(AName, VfsModule); end; { TVfsModuleList } function TVfsModuleList.GetVfsModule(const S: String): TVfsModule; var I: Integer; begin I:= IndexOf(S); if I < 0 then Exit(nil); Result:= TVfsModule(Objects[I]); end; destructor TVfsModuleList.Destroy; var I: Integer; begin for I:= 0 to Count - 1 do TVfsModule(Objects[I]).Free; inherited Destroy; end; function TVfsModuleList.GetFileSource(const Path: String): TFileSourceClass; var I: Integer; begin Result:= nil; for I:= 0 to Count - 1 do with TVfsModule(Objects[I]) do begin if FileSourceClass.IsSupportedPath(Path) then begin Result:= FileSourceClass; Break; end; end; end; function TVfsModuleList.FindFileSource(const AClassName: String): TFileSourceClass; var I: Integer; begin Result:= nil; for I:= 0 to Count - 1 do with TVfsModule(Objects[I]) do begin if FileSourceClass.ClassNameIs(AClassName) then begin Result:= FileSourceClass; Break; end; end; end; initialization gVfsModuleList := TVfsModuleList.Create; finalization FreeAndNil(gVfsModuleList); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffileproperties.lfm�������������������������������������������������������������0000644�0001750�0000144�00000050016�12474360200�017206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmFileProperties: TfrmFileProperties Left = 309 Height = 469 Top = 101 Width = 520 ActiveControl = pcPageControl Caption = 'Properties' ClientHeight = 469 ClientWidth = 520 Constraints.MinHeight = 432 Constraints.MinWidth = 458 KeyPreview = True OnCreate = FormCreate OnKeyDown = FormKeyDown Position = poScreenCenter LCLVersion = '1.1' object pcPageControl: TPageControl AnchorSideBottom.Control = gbOwner Left = 8 Height = 281 Top = 8 Width = 502 ActivePage = tsProperties Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Bottom = 6 TabIndex = 0 TabOrder = 0 object tsProperties: TTabSheet Caption = 'Properties' ClientHeight = 242 ClientWidth = 496 object pnlData: TPanel AnchorSideLeft.Control = pnlCaption AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = tsProperties AnchorSideRight.Control = tsProperties AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tsProperties AnchorSideBottom.Side = asrBottom Left = 147 Height = 242 Top = 0 Width = 349 Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 242 ClientWidth = 349 TabOrder = 1 object lblFileName: TLabel AnchorSideLeft.Control = pnlData AnchorSideTop.Control = pnlData AnchorSideRight.Control = pnlData AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 12 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = '???' ParentColor = False ShowAccelChar = False end object lblFolder: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 36 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblType: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblFolder AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 60 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblSymlink: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblType AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 84 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblSize: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblSymlink AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 108 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblLastAccess: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblContains AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 162 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 Caption = '???' ParentColor = False ShowAccelChar = False end object lblLastModif: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblLastAccess AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 186 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblLastStChange: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblLastModif AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 210 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end object lblContains: TLabel AnchorSideLeft.Control = lblFileName AnchorSideTop.Control = lblSize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblFileName AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 132 Width = 329 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = '???' ParentColor = False ShowAccelChar = False end end object pnlCaption: TPanel AnchorSideLeft.Control = tsProperties AnchorSideTop.Control = tsProperties AnchorSideBottom.Control = tsProperties AnchorSideBottom.Side = asrBottom Left = 0 Height = 242 Top = 0 Width = 147 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 242 ClientWidth = 147 TabOrder = 0 object lblFileNameStr: TLabel AnchorSideTop.Control = pnlCaption Left = 10 Height = 18 Top = 12 Width = 41 BorderSpacing.Top = 12 Caption = 'Name:' ParentColor = False ParentFont = False end object lblFolderStr: TLabel AnchorSideTop.Control = lblFileNameStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 36 Width = 34 BorderSpacing.Top = 6 Caption = 'Path:' ParentColor = False end object lblTypeStr: TLabel AnchorSideTop.Control = lblFolderStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 60 Width = 36 BorderSpacing.Top = 6 Caption = 'Type:' ParentColor = False end object lblSymlinkStr: TLabel AnchorSideTop.Control = lblTypeStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 84 Width = 72 BorderSpacing.Top = 6 Caption = 'Symlink to:' ParentColor = False end object lblSizeStr: TLabel AnchorSideTop.Control = lblSymlinkStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 108 Width = 32 BorderSpacing.Top = 6 Caption = 'Size:' ParentColor = False end object lblLastAccessStr: TLabel AnchorSideTop.Control = lblContainsStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 162 Width = 79 BorderSpacing.Top = 12 Caption = 'Last access:' ParentColor = False end object lblLastModifStr: TLabel AnchorSideTop.Control = lblLastAccessStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 186 Width = 113 BorderSpacing.Top = 6 Caption = 'Last modification:' ParentColor = False end object lblLastStChangeStr: TLabel AnchorSideTop.Control = lblLastModifStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 210 Width = 127 BorderSpacing.Top = 6 Caption = 'Last status change:' ParentColor = False end object lblContainsStr: TLabel AnchorSideTop.Control = lblSizeStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 132 Width = 61 BorderSpacing.Top = 6 Caption = 'Contains:' ParentColor = False end end end object tsAttributes: TTabSheet Caption = 'Attributes' ClientHeight = 242 ClientWidth = 496 object lblFileStr: TLabel AnchorSideTop.Control = tsAttributes Left = 8 Height = 18 Top = 12 Width = 62 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False end object lblFile: TLabel AnchorSideTop.Control = tsAttributes Left = 104 Height = 18 Top = 12 Width = 62 BorderSpacing.Top = 12 Caption = 'File name' ParentColor = False ParentFont = False end object lblAttrOwnerStr: TLabel AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 63 Width = 46 Caption = 'Owner' ParentColor = False end object lblWrite: TLabel AnchorSideTop.Control = lblFile AnchorSideTop.Side = asrBottom Left = 176 Height = 18 Top = 38 Width = 38 BorderSpacing.Top = 8 Caption = 'Write' ParentColor = False end object lblRead: TLabel AnchorSideTop.Control = lblFile AnchorSideTop.Side = asrBottom Left = 104 Height = 18 Top = 38 Width = 32 BorderSpacing.Top = 8 Caption = 'Read' ParentColor = False end object lblExec: TLabel AnchorSideTop.Control = lblFile AnchorSideTop.Side = asrBottom Left = 240 Height = 18 Top = 38 Width = 53 BorderSpacing.Top = 8 Caption = 'Execute' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 89 Width = 41 Caption = 'Group' ParentColor = False end object lblAttrOtherStr: TLabel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 115 Width = 40 Caption = 'Other' ParentColor = False end object lblAttrTextStr: TLabel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrBottom Left = 8 Height = 18 Top = 203 Width = 35 BorderSpacing.Left = 8 BorderSpacing.Top = 6 Caption = 'Text:' ParentColor = False end object lblAttrText: TLabel AnchorSideLeft.Control = edtOctal AnchorSideTop.Control = lblAttrTextStr AnchorSideTop.Side = asrCenter Left = 112 Height = 18 Top = 203 Width = 55 Caption = '-----------' ParentColor = False ParentFont = False end object lblAttrBitsStr: TLabel AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 142 Width = 29 Caption = 'Bits:' ParentColor = False end object lblOctal: TLabel AnchorSideLeft.Control = tsAttributes AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 174 Width = 41 BorderSpacing.Left = 8 Caption = 'Octal:' FocusControl = edtOctal ParentColor = False end object cbReadOwner: TCheckBox AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 62 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 0 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = lblWrite AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 62 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 1 end object cbExecOwner: TCheckBox AnchorSideTop.Control = lblExec AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 62 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 2 end object cbReadGroup: TCheckBox AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 88 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideTop.Control = cbWriteOwner AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 88 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideTop.Control = cbExecOwner AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 88 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 5 end object cbReadOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 114 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideTop.Control = cbWriteGroup AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 114 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 114 Width = 20 BorderSpacing.Top = 6 OnClick = cbChangeModeClick TabOrder = 8 end object cbSuid: TCheckBox AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 140 Width = 57 BorderSpacing.Top = 6 Caption = 'SUID' OnClick = cbChangeModeClick TabOrder = 9 end object cbSgid: TCheckBox AnchorSideTop.Control = cbWriteOther AnchorSideTop.Side = asrBottom Left = 184 Height = 23 Top = 140 Width = 58 BorderSpacing.Top = 6 Caption = 'SGID' OnClick = cbChangeModeClick TabOrder = 10 end object cbSticky: TCheckBox AnchorSideTop.Control = cbExecOther AnchorSideTop.Side = asrBottom Left = 256 Height = 23 Top = 140 Width = 61 BorderSpacing.Top = 6 Caption = 'Sticky' OnClick = cbChangeModeClick TabOrder = 11 end object edtOctal: TEdit AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrBottom Left = 112 Height = 28 Top = 169 Width = 80 BorderSpacing.Top = 6 MaxLength = 4 OnKeyPress = edtOctalKeyPress OnKeyUp = edtOctalKeyUp TabOrder = 12 end end end object gbOwner: TGroupBox AnchorSideBottom.Control = btnSetProperties Left = 8 Height = 95 Top = 295 Width = 502 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 Caption = 'Owner' ClientHeight = 72 ClientWidth = 498 TabOrder = 1 object lblOwnerStr: TLabel AnchorSideLeft.Control = gbOwner AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrCenter Left = 24 Height = 18 Top = 11 Width = 46 BorderSpacing.Left = 24 Caption = 'O&wner' FocusControl = cbxUsers ParentColor = False end object lblGroupStr: TLabel AnchorSideLeft.Control = gbOwner AnchorSideTop.Control = cbxGroups AnchorSideTop.Side = asrCenter Left = 24 Height = 18 Top = 43 Width = 41 BorderSpacing.Left = 24 Caption = '&Group' FocusControl = cbxGroups ParentColor = False end object cbxUsers: TComboBox AnchorSideTop.Control = gbOwner Left = 135 Height = 28 Top = 6 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 0 Sorted = True TabOrder = 0 end object cbxGroups: TComboBox AnchorSideTop.Control = cbxUsers AnchorSideTop.Side = asrBottom Left = 135 Height = 28 Top = 38 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 BorderSpacing.Bottom = 6 ItemHeight = 0 Sorted = True TabOrder = 1 end end object btnSetProperties: TBitBtn AnchorSideRight.Control = btnSetPropertiesToAllFiles AnchorSideBottom.Control = btnSetPropertiesToAllFiles AnchorSideBottom.Side = asrBottom Left = 67 Height = 31 Top = 396 Width = 128 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 Caption = '&Set properties' Default = True Kind = bkOK OnClick = btnSetPropertiesClick TabOrder = 2 end object btnSetPropertiesToAllFiles: TBitBtn AnchorSideRight.Control = btnSkipFile AnchorSideBottom.Control = btnSkipFile AnchorSideBottom.Side = asrBottom Left = 201 Height = 31 Top = 396 Width = 188 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 6 Caption = 'Set to &all selected files' Kind = bkAll OnClick = btnSetPropertiesToAllFilesClick TabOrder = 3 end object btnSkipFile: TBitBtn AnchorSideRight.Control = btnClose AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnClose Left = 395 Height = 32 Top = 395 Width = 115 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 4 Caption = 'Ski&p this file' Kind = bkIgnore ModalResult = 5 OnClick = btnSkipFileClick TabOrder = 4 end object btnClose: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 437 Height = 32 Top = 431 Width = 73 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Right = 10 BorderSpacing.Bottom = 6 Cancel = True Caption = '&Close' Kind = bkClose ModalResult = 2 OnClick = btnCloseClick TabOrder = 5 end object tmUpdateFolderSize: TTimer Enabled = False Interval = 500 OnTimer = tmUpdateFolderSizeTimer left = 350 top = 216 end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/feditsearch.lfm�����������������������������������������������������������������0000644�0001750�0000144�00000013664�12470100066�016273� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmEditSearchReplace: TfrmEditSearchReplace Left = 748 Height = 218 Top = 377 Width = 356 ActiveControl = cbSearchText BorderIcons = [] ChildSizing.TopBottomSpacing = 6 ClientHeight = 218 ClientWidth = 356 OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnShow = FormShow SessionProperties = 'Left;Top;Width;Height' LCLVersion = '1.2.6.0' object lblSearchFor: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 16 Width = 56 BorderSpacing.Left = 12 Caption = '&Search for:' FocusControl = cbSearchText ParentColor = False end object lblReplaceWith: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 45 Width = 70 BorderSpacing.Left = 12 Caption = '&Replace with:' FocusControl = cbReplaceText ParentColor = False end object cbSearchText: TComboBox AnchorSideLeft.Control = lblSearchFor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 74 Height = 23 Top = 12 Width = 274 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 8 ItemHeight = 15 TabOrder = 0 end object gbSearchOptions: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom Left = 12 Height = 133 Top = 76 Width = 141 AutoSize = True BorderSpacing.Left = 12 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Caption = 'Option' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 115 ClientWidth = 137 TabOrder = 2 object cbSearchCaseSensitive: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = gbSearchOptions Left = 8 Height = 19 Top = 6 Width = 100 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'C&ase sensitivity' TabOrder = 0 end object cbSearchWholeWords: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchCaseSensitive AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 27 Width = 115 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Whole words only' TabOrder = 1 end object cbSearchSelectedOnly: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchWholeWords AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 48 Width = 112 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'Selected &text only' TabOrder = 2 end object cbSearchFromCursor: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchSelectedOnly AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 69 Width = 113 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'S&earch from caret' TabOrder = 3 end object cbSearchRegExp: TCheckBox AnchorSideLeft.Control = gbSearchOptions AnchorSideTop.Control = cbSearchFromCursor AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 90 Width = 123 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = '&Regular expressions' TabOrder = 4 end end object rgSearchDirection: TRadioGroup AnchorSideLeft.Control = gbSearchOptions AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbReplaceText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 159 Height = 88 Top = 76 Width = 114 AutoFill = True BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 8 Caption = 'Direction' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 70 ClientWidth = 110 Items.Strings = ( '&Forward' '&Backward' ) TabOrder = 3 end object cbReplaceText: TComboBox AnchorSideLeft.Control = lblReplaceWith AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSearchText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 88 Height = 23 Top = 41 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 8 ItemHeight = 15 TabOrder = 1 end object btnOK: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = gbSearchOptions AnchorSideBottom.Side = asrBottom Left = 162 Height = 31 Top = 174 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 4 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 4 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbSearchOptions AnchorSideBottom.Side = asrBottom Left = 258 Height = 31 Top = 174 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 5 end end ����������������������������������������������������������������������������doublecmd-0.7.1/src/umasks.pas����������������������������������������������������������������������0000644�0001750�0000144�00000015423�12452217710�015322� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Modified version of standart Masks unit Copyright (C) 2010-2015 Alexander Koblov (alexx2000@mail.ru) This file is based on masks.pas from the Lazarus Component Library (LCL) See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the copyright. 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. } unit uMasks; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Contnrs; type TMaskCharType = (mcChar, mcAnyChar, mcAnyText); TMaskChar = record case CharType: TMaskCharType of mcChar: (CharValue: WideChar); mcAnyChar, mcAnyText: (); end; TMaskString = record MinLength: Integer; MaxLength: Integer; Chars: Array of TMaskChar; end; { TMask } TMask = class private FMask: TMaskString; FCaseSensitive: Boolean; public constructor Create(const AValue: String; CaseSensitive: Boolean = False); function Matches(const AFileName: String): Boolean; end; { TParseStringList } TParseStringList = class(TStringList) public constructor Create(const AText, ASeparators: String); end; { TMaskList } TMaskList = class private FMasks: TObjectList; function GetCount: Integer; function GetItem(Index: Integer): TMask; public constructor Create(const AValue: String; ASeparator: Char = ';'); destructor Destroy; override; function Matches(const AFileName: String): Boolean; property Count: Integer read GetCount; property Items[Index: Integer]: TMask read GetItem; end; function MatchesMask(const FileName, Mask: String; CaseSensitive: Boolean = False): Boolean; function MatchesMaskList(const FileName, Mask: String; Separator: Char = ';'): Boolean; implementation uses LazUTF8; function MatchesMask(const FileName, Mask: String; CaseSensitive: Boolean = False): Boolean; var AMask: TMask; begin if Mask <> '' then begin AMask := TMask.Create(Mask, CaseSensitive); try Result := AMask.Matches(FileName); finally AMask.Free; end; end else Result := False; end; function MatchesMaskList(const FileName, Mask: String; Separator: Char): Boolean; var AMaskList: TMaskList; begin if Mask <> '' then begin AMaskList := TMaskList.Create(Mask, Separator); try Result := AMaskList.Matches(FileName); finally AMaskList.Free; end; end else Result := False; end; { TMask } constructor TMask.Create(const AValue: String; CaseSensitive: Boolean = False); var I: Integer; S: UnicodeString; SkipAnyText: Boolean; procedure AddAnyText; begin if SkipAnyText then begin Inc(I); Exit; end; SetLength(FMask.Chars, Length(FMask.Chars) + 1); FMask.Chars[High(FMask.Chars)].CharType := mcAnyText; FMask.MaxLength := MaxInt; SkipAnyText := True; Inc(I); end; procedure AddAnyChar; begin SkipAnyText := False; SetLength(FMask.Chars, Length(FMask.Chars) + 1); FMask.Chars[High(FMask.Chars)].CharType := mcAnyChar; Inc(FMask.MinLength); if FMask.MaxLength < MaxInt then Inc(FMask.MaxLength); Inc(I); end; procedure AddChar; begin SkipAnyText := False; SetLength(FMask.Chars, Length(FMask.Chars) + 1); with FMask.Chars[High(FMask.Chars)] do begin CharType := mcChar; CharValue := S[I]; end; Inc(FMask.MinLength); if FMask.MaxLength < MaxInt then Inc(FMask.MaxLength); Inc(I); end; begin SetLength(FMask.Chars, 0); FMask.MinLength := 0; FMask.MaxLength := 0; SkipAnyText := False; FCaseSensitive := CaseSensitive; if FCaseSensitive then S := UTF8Decode(AValue) else begin S := UTF8Decode(UTF8LowerCase(AValue)); end; I := 1; while I <= Length(S) do begin case S[I] of '*': AddAnyText; '?': AddAnyChar; else AddChar; end; end; end; function TMask.Matches(const AFileName: String): Boolean; var L: Integer; S: UnicodeString; function MatchToEnd(MaskIndex, CharIndex: Integer): Boolean; var I, J: Integer; begin Result := False; for I := MaskIndex to High(FMask.Chars) do begin case FMask.Chars[I].CharType of mcChar: begin if CharIndex > L then Exit; //DCDebug('Match ' + S[CharIndex] + '<?>' + FMask.Chars[I].CharValue); if S[CharIndex] <> FMask.Chars[I].CharValue then Exit; Inc(CharIndex); end; mcAnyChar: begin if CharIndex > L then Exit; Inc(CharIndex); end; mcAnyText: begin if I = High(FMask.Chars) then begin Result := True; Exit; end; for J := CharIndex to L do if MatchToEnd(I + 1, J) then begin Result := True; Exit; end; end; end; end; Result := CharIndex > L; end; begin Result := False; if FCaseSensitive then S := UTF8Decode(AFileName) else begin S := UTF8Decode(UTF8LowerCase(AFileName)); end; L := Length(S); if L = 0 then begin if FMask.MinLength = 0 then Result := True; Exit; end; if (L < FMask.MinLength) or (L > FMask.MaxLength) then Exit; Result := MatchToEnd(0, 1); end; { TParseStringList } constructor TParseStringList.Create(const AText, ASeparators: String); var I, S: Integer; begin inherited Create; S := 1; for I := 1 to Length(AText) do begin if Pos(AText[I], ASeparators) > 0 then begin if I > S then Add(Copy(AText, S, I - S)); S := I + 1; end; end; if Length(AText) >= S then Add(Copy(AText, S, Length(AText) - S + 1)); end; { TMaskList } function TMaskList.GetItem(Index: Integer): TMask; begin Result := TMask(FMasks.Items[Index]); end; function TMaskList.GetCount: Integer; begin Result := FMasks.Count; end; constructor TMaskList.Create(const AValue: String; ASeparator: Char); var L: String; I: Integer; S: TParseStringList; begin FMasks := TObjectList.Create(True); L := UTF8LowerCase(AValue); S := TParseStringList.Create(L, ASeparator); try for I := 0 to S.Count - 1 do FMasks.Add(TMask.Create(S[I], True)); finally S.Free; end; end; destructor TMaskList.Destroy; begin FMasks.Free; inherited Destroy; end; function TMaskList.Matches(const AFileName: String): Boolean; var S: String; I: Integer; begin Result := False; S := UTF8LowerCase(AFileName); for I := 0 to FMasks.Count - 1 do begin if TMask(FMasks.Items[I]).Matches(S) then begin Result := True; Exit; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fviewoperations.pas�������������������������������������������������������������0000644�0001750�0000144�00000107416�12332211021�017231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fViewOperations; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, StdCtrls, ExtCtrls, LCLType, ComCtrls, Buttons, LCLIntf, Menus, uFileSourceOperation, uOperationsManager, Themes; type TViewBaseItem = class; TViewBaseItemClick = procedure(Item: TViewBaseItem; Button: TMouseButton; Shift: TShiftState; const Pt: TPoint) of object; TViewBaseItemContextMenu = procedure(Item: TViewBaseItem; const Point: TPoint) of object; TViewBaseItemSelected = procedure(Item: TViewBaseItem) of object; TViewOperationsStatusIcon = (vosiPlay, vosiPause, vosiHourglass); { TViewBaseItem } TViewBaseItem = class private FOnClick: TViewBaseItemClick; FOnContextMenu: TViewBaseItemContextMenu; FOnSelected: TViewBaseItemSelected; FTreeNode: TTreeNode; FText: String; FTextRect: TRect; procedure CalculateSizes(Canvas: TCanvas; NeedsStatusIcon, NeedsProgress: Boolean); procedure DrawProgress(Canvas: TCanvas; NodeRect: TRect; Progress: Double); procedure DrawStatusIcon(Canvas: TCanvas; NodeRect: TRect; Icon: TViewOperationsStatusIcon); procedure DrawThemedBackground(Canvas: TCanvas; Element: TThemedTreeview; ARect: TRect); procedure DrawThemedText(Canvas: TCanvas; Element: TThemedTreeview; NodeRect: TRect; Center: Boolean; AText: String); function GetStatusIconRect(NodeRect: TRect): TRect; function GetTextIndent: Integer; virtual; abstract; procedure UpdateView(Canvas: TCanvas); virtual; abstract; public constructor Create(ANode: TTreeNode); virtual; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); virtual; procedure Draw(Canvas: TCanvas; NodeRect: TRect); virtual; abstract; function GetBackgroundColor: TColor; virtual; abstract; procedure KeyDown(var Key: Word; Shift: TShiftState); virtual; procedure Selected; virtual; procedure StartPause; virtual; abstract; procedure Stop; virtual; abstract; property OnClick: TViewBaseItemClick read FOnClick write FOnClick; property OnContextMenu: TViewBaseItemContextMenu read FOnContextMenu write FOnContextMenu; property OnSelected: TViewBaseItemSelected read FOnSelected write FOnSelected; end; { TViewQueueItem } TViewQueueItem = class(TViewBaseItem) private FQueueIdentifier: TOperationsManagerQueueIdentifier; function GetTextIndent: Integer; override; procedure UpdateView(Canvas: TCanvas); override; public constructor Create(ANode: TTreeNode; AQueueId: TOperationsManagerQueueIdentifier); reintroduce; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); override; procedure Draw(Canvas: TCanvas; NodeRect: TRect); override; function GetBackgroundColor: TColor; override; procedure StartPause; override; procedure Stop; override; end; TViewOperationItem = class; { TViewOperationItem } TViewOperationItem = class(TViewBaseItem) private FOperationHandle: TOperationHandle; FProgress: Double; function GetTextIndent: Integer; override; procedure UpdateView(Canvas: TCanvas); override; public constructor Create(ANode: TTreeNode; AOperationHandle: TOperationHandle); reintroduce; procedure Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); override; procedure Draw(Canvas: TCanvas; NodeRect: TRect); override; function GetBackgroundColor: TColor; override; procedure StartPause; override; procedure Stop; override; end; { TfrmViewOperations } TfrmViewOperations = class(TForm) btnStop: TBitBtn; btnStartPause: TBitBtn; cbAlwaysOnTop: TCheckBox; lblUseDragDrop: TLabel; mnuCancelQueue: TMenuItem; mnuNewQueue: TMenuItem; mnuCancelOperation: TMenuItem; mnuPutFirstInQueue: TMenuItem; mnuPutLastInQueue: TMenuItem; mnuOperationShowDetached: TMenuItem; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue5: TMenuItem; mnuQueue4: TMenuItem; mnuQueue1: TMenuItem; mnuQueue0: TMenuItem; mnuQueue: TMenuItem; mnuQueueShowDetached: TMenuItem; pnlHeader: TPanel; pmQueuePopup: TPopupMenu; pnlTopHeader: TPanel; pmOperationPopup: TPopupMenu; tbPauseAll: TToggleBox; tvOperations: TTreeView; UpdateTimer: TTimer; procedure btnStopClick(Sender: TObject); procedure cbAlwaysOnTopChange(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure mnuCancelOperationClick(Sender: TObject); procedure mnuCancelQueueClick(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuPutFirstInQueueClick(Sender: TObject); procedure mnuPutLastInQueueClick(Sender: TObject); procedure mnuOperationShowDetachedClick(Sender: TObject); procedure mnuQueueShowDetachedClick(Sender: TObject); procedure OnOperationItemContextMenu(Item: TViewBaseItem; const Point: TPoint); procedure OnOperationItemSelected(Item: TViewBaseItem); procedure OnQueueContextMenu(Item: TViewBaseItem; const Point: TPoint); procedure OnQueueItemSelected(Item: TViewBaseItem); procedure OnUpdateTimer(Sender: TObject); procedure btnStartPauseClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); procedure tbPauseAllChange(Sender: TObject); procedure tvOperationsCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); procedure tvOperationsDeletion(Sender: TObject; Node: TTreeNode); procedure tvOperationsDragDrop(Sender, Source: TObject; X, Y: Integer); procedure tvOperationsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure tvOperationsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tvOperationsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tvOperationsResize(Sender: TObject); procedure tvOperationsSelectionChanged(Sender: TObject); private FDraggedOperation: TOperationHandle; FMenuOperation: TOperationHandle; FMenuQueueIdentifier: TOperationsManagerQueueIdentifier; procedure CreateNodes; function GetFocusedItem: TViewBaseItem; procedure MoveWithinQueue(MoveToTop: Boolean); procedure SetFocusItem(AOperationHandle: TOperationHandle); procedure SetFocusItem(AQueueIdentifier: TOperationsManagerQueueIdentifier); procedure SetNewQueue(Item: TViewOperationItem; NewQueue: TOperationsManagerQueueIdentifier); procedure SetStartPauseCaption(SetPause: Boolean); procedure UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent); procedure UpdateSizes; end; procedure ShowOperationsViewer; procedure ShowOperationsViewer(AOperationHandle: TOperationHandle); procedure ShowOperationsViewer(AQueueIdentifier: TOperationsManagerQueueIdentifier); implementation {$R *.lfm} uses GraphMath, GraphType, Math, fFileOpDlg, uLng, uGlobs, uFileSourceOperationMisc; const ExpandSignSize = 9; StatusIconPlay: array[0..2] of TPoint = ((x: 5; y: 1), (x: 13; y: 9), (x: 5; y: 17)); StatusIconPause1: array[0..3] of TPoint = ((x: 3; y: 2), (x: 3; y: 16), (x: 7; y: 16), (x: 7; y: 2)); StatusIconPause2: array[0..3] of TPoint = ((x: 10; y: 2), (x: 10; y: 16), (x: 14; y: 16), (x: 14; y: 2)); StatusIconHourglass1: array[0..2] of TPoint = ((x: 3; y: 4), (x: 13; y: 4), (x: 8; y: 10)); StatusIconHourglass2: array[0..2] of TPoint = ((x: 8; y: 10), (x: 13; y: 15), (x: 3; y: 15)); StatusIconFrame: TRect = (Left: 0; Top: 0; Right: 18; Bottom: 19); StatusIconRightMargin = 5; ProgressHeight = 16; ProgressWidth = 150; ProgressHorizontalMargin = 5; FreeOperationTextIndent = 3; MarginTopBottom = 2; var frmViewOperations: TfrmViewOperations = nil; ProgressRight: Integer; procedure ShowOperationsViewer; begin if not Assigned(frmViewOperations) then frmViewOperations := TfrmViewOperations.Create(Application); frmViewOperations.ShowOnTop; end; procedure ShowOperationsViewer(AOperationHandle: TOperationHandle); begin ShowOperationsViewer; if AOperationHandle <> InvalidOperationHandle then frmViewOperations.SetFocusItem(AOperationHandle); end; procedure ShowOperationsViewer(AQueueIdentifier: TOperationsManagerQueueIdentifier); begin ShowOperationsViewer; frmViewOperations.SetFocusItem(AQueueIdentifier); end; procedure ApplyProgress(var ARect: TRect; Progress: Double); begin ARect.Right := ARect.Left + Round((ARect.Right - ARect.Left) * Progress); end; function MoveRect(aRect: TRect; DeltaX, DeltaY: Integer): TRect; begin Result.Left := aRect.Left + DeltaX; Result.Right := aRect.Right + DeltaX; Result.Top := aRect.Top + DeltaY; Result.Bottom := aRect.Bottom + DeltaY; end; procedure DrawMovePolygon(Canvas: TCanvas; const Points: array of TPoint; DeltaX, DeltaY: Integer); var CopyPoints: PPoint; i: Integer; begin CopyPoints := GetMem(SizeOf(TPoint) * Length(Points)); for i := 0 to Length(Points) - 1 do begin CopyPoints[i].x := Points[i].x + DeltaX; CopyPoints[i].y := Points[i].y + DeltaY; end; Canvas.Polygon(CopyPoints, Length(Points), True); FreeMem(CopyPoints); end; { TViewBaseItem } procedure TViewBaseItem.DrawThemedBackground(Canvas: TCanvas; Element: TThemedTreeview; ARect: TRect); var Details: TThemedElementDetails; begin Details := ThemeServices.GetElementDetails(Element); if ThemeServices.HasTransparentParts(Details) then begin Canvas.Brush.Color := GetBackgroundColor; Canvas.FillRect(ARect); end; ThemeServices.DrawElement(Canvas.Handle, Details, ARect, nil); end; procedure TViewBaseItem.DrawProgress(Canvas: TCanvas; NodeRect: TRect; Progress: Double); var Details: TThemedElementDetails; begin if Progress > 0 then begin NodeRect.Right := NodeRect.Right - ProgressRight; NodeRect.Left := NodeRect.Right - ProgressWidth; NodeRect.Top := NodeRect.Top + (NodeRect.Bottom - NodeRect.Top - ProgressHeight) div 2; NodeRect.Bottom := NodeRect.Top + ProgressHeight; if ThemeServices.ThemesEnabled then begin Details := ThemeServices.GetElementDetails(tpBar); ThemeServices.DrawElement(Canvas.Handle, Details, NodeRect, nil); Details := ThemeServices.GetElementDetails(tpChunk); InflateRect(NodeRect, -2, -2); ApplyProgress(NodeRect, Progress); ThemeServices.DrawElement(Canvas.Handle, Details, NodeRect, nil); end else begin Canvas.Pen.Color := clWindowText; Canvas.Brush.Color := clForm; Canvas.RoundRect(NodeRect, 3, 3); Canvas.Brush.Color := clHighlight; ApplyProgress(NodeRect, Progress); Canvas.RoundRect(NodeRect, 3, 3); end; end; end; procedure TViewBaseItem.DrawStatusIcon(Canvas: TCanvas; NodeRect: TRect; Icon: TViewOperationsStatusIcon); var IconRect: TRect; begin Canvas.Brush.Color := GetBackgroundColor; Canvas.Pen.Color := clWindowText; IconRect := MoveRect(GetStatusIconRect(NodeRect), NodeRect.Left, NodeRect.Top); Canvas.Rectangle(IconRect); case Icon of vosiPlay: // Paint "Play" triangle begin Canvas.Brush.Color := RGBToColor(0, 200, 0); DrawMovePolygon(Canvas, StatusIconPlay, IconRect.Left, IconRect.Top); end; vosiPause: // Paint "Pause" double line begin Canvas.Brush.Color := RGBToColor(0, 0, 200); DrawMovePolygon(Canvas, StatusIconPause1, IconRect.Left, IconRect.Top); DrawMovePolygon(Canvas, StatusIconPause2, IconRect.Left, IconRect.Top); end; else // Paint "Hourglass" begin Canvas.Brush.Color := RGBToColor(255, 255, 255); DrawMovePolygon(Canvas, StatusIconHourglass1, IconRect.Left, IconRect.Top); DrawMovePolygon(Canvas, StatusIconHourglass2, IconRect.Left, IconRect.Top); end; end; end; procedure TViewBaseItem.DrawThemedText(Canvas: TCanvas; Element: TThemedTreeview; NodeRect: TRect; Center: Boolean; AText: String); var Details: TThemedElementDetails; Flags: Cardinal = DT_WORDBREAK or DT_NOPREFIX; begin Details := ThemeServices.GetElementDetails(Element); if Center then Flags := Flags + DT_VCENTER; ThemeServices.DrawText(Canvas, Details, AText, NodeRect, Flags, 0); end; function TViewBaseItem.GetStatusIconRect(NodeRect: TRect): TRect; begin Result := MoveRect(StatusIconFrame, (NodeRect.Right - NodeRect.Left) - (StatusIconFrame.Right - StatusIconFrame.Left) - StatusIconRightMargin, ((NodeRect.Bottom - NodeRect.Top) - (StatusIconFrame.Bottom - StatusIconFrame.Top)) div 2); end; constructor TViewBaseItem.Create(ANode: TTreeNode); begin FTreeNode := ANode; end; procedure TViewBaseItem.CalculateSizes(Canvas: TCanvas; NeedsStatusIcon, NeedsProgress: Boolean); var NodeRect: TRect; NeededHeight: Integer; begin // Calculate available width for text. NodeRect := FTreeNode.DisplayRect(False); FTextRect := Rect(0, 0, 0, 0); FTextRect.Right := (NodeRect.Right - NodeRect.Left) - GetTextIndent - (ProgressRight + ProgressWidth + ProgressHorizontalMargin); // Calculate text height. DrawText(Canvas.Handle, PChar(FText), Length(FText), FTextRect, DT_NOPREFIX + DT_CALCRECT + DT_WORDBREAK); // Take max of text, progress and status icon. NeededHeight := FTextRect.Bottom - FTextRect.Top; if NeedsProgress then NeededHeight := Max(NeededHeight, ProgressHeight); if NeedsStatusIcon then NeededHeight := Max(NeededHeight, StatusIconFrame.Bottom - StatusIconFrame.Top); Inc(NeededHeight, 2 * MarginTopBottom); FTextRect := MoveRect(FTextRect, NodeRect.Left + GetTextIndent, NodeRect.Top); FTreeNode.Height := NeededHeight; end; procedure TViewBaseItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; begin case Button of mbRight: if Assigned(FOnContextMenu) then begin OnContextMenu(Self, Pt); Handled := True; end; end; if not Handled and Assigned(FOnClick) then FOnClick(Self, Button, Shift, Pt); end; procedure TViewBaseItem.KeyDown(var Key: Word; Shift: TShiftState); var Rect: TRect; Point: TPoint; begin case Key of VK_APPS: if Assigned(FOnContextMenu) then begin Rect := FTreeNode.DisplayRect(False); Point.x := Rect.Left + (Rect.Right - Rect.Left) div 2; Point.y := Rect.Top + (Rect.Bottom - Rect.Top) div 2; OnContextMenu(Self, Point); Key := 0; end; VK_SPACE: begin StartPause; Key := 0; end; VK_DELETE, VK_BACK: begin Stop; Key := 0; end; end; end; procedure TViewBaseItem.Selected; begin if Assigned(FOnSelected) then FOnSelected(Self); end; { TViewOperationItem } constructor TViewOperationItem.Create(ANode: TTreeNode; AOperationHandle: TOperationHandle); begin FOperationHandle := AOperationHandle; inherited Create(ANode); end; procedure TViewOperationItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; OpManItem: TOperationsManagerItem; NodeRect: TRect; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin case Button of mbLeft: if OpManItem.Queue.IsFree then begin NodeRect := FTreeNode.DisplayRect(False); if ((ssDouble in Shift) or PtInRect(GetStatusIconRect(NodeRect), Pt)) then begin StartPause; Handled := True; end; end; end; end; if not Handled then inherited Click(Pt, Button, Shift); end; procedure TViewOperationItem.Draw(Canvas: TCanvas; NodeRect: TRect); var OpManItem: TOperationsManagerItem; Element: TThemedTreeview; Icon: TViewOperationsStatusIcon; begin if FTreeNode.Selected then Element := ttItemSelected else Element := ttItemNormal; DrawThemedBackground(Canvas, Element, NodeRect); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin DrawThemedText(Canvas, Element, FTextRect, True, FText); if OpManItem.Queue.IsFree then begin case OpManItem.Operation.State of fsosRunning: Icon := vosiPlay; fsosPaused: Icon := vosiPause; else Icon := vosiHourglass; end; DrawStatusIcon(Canvas, NodeRect, Icon); end; DrawProgress(Canvas, NodeRect, FProgress); end; end; function TViewOperationItem.GetBackgroundColor: TColor; begin Result := FTreeNode.TreeView.BackgroundColor; end; procedure TViewOperationItem.StartPause; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) and OpManItem.Queue.IsFree then OpManItem.Operation.TogglePause; end; procedure TViewOperationItem.Stop; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.Stop; end; procedure TViewOperationItem.UpdateView(Canvas: TCanvas); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin FText := IntToStr(OpManItem.Handle) + ': ' + OpManItem.Operation.GetDescription(fsoddJobAndTarget); FProgress := OpManItem.Operation.Progress; if FProgress > 0 then FText := FText + ' - ' + GetProgressString(FProgress); FText := FText + GetOperationStateString(OpManItem.Operation.State); CalculateSizes(Canvas, OpManItem.Queue.IsFree, FProgress > 0); end else begin FText := ''; FProgress := 0; FTreeNode.Height := 10; end; end; function TViewOperationItem.GetTextIndent: Integer; begin Result := FTreeNode.DisplayExpandSignLeft; if FTreeNode.Level = 0 then Inc(Result, FreeOperationTextIndent) else Dec(Result, TTreeView(FTreeNode.TreeView).Indent * (FTreeNode.Level - 1)); end; { TViewQueueItem } procedure TViewQueueItem.Click(const Pt: TPoint; Button: TMouseButton; Shift: TShiftState); var Handled: Boolean = False; NodeRect: TRect; begin case Button of mbLeft: begin NodeRect := FTreeNode.DisplayRect(False); if (ssDouble in Shift) or PtInRect(GetStatusIconRect(NodeRect), Pt) then begin StartPause; Handled := True; end; end; end; if not Handled then inherited Click(Pt, Button, Shift); end; constructor TViewQueueItem.Create(ANode: TTreeNode; AQueueId: TOperationsManagerQueueIdentifier); begin FQueueIdentifier := AQueueId; inherited Create(ANode); end; procedure TViewQueueItem.Draw(Canvas: TCanvas; NodeRect: TRect); var Element: TThemedTreeview; Queue: TOperationsManagerQueue; Icon: TViewOperationsStatusIcon; begin if FTreeNode.Selected then Element := ttItemSelected else Element := ttItemSelectedNotFocus; DrawThemedBackground(Canvas, Element, NodeRect); Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin DrawThemedText(Canvas, Element, FTextRect, True, FText); if Queue.Paused then Icon := vosiPause else Icon := vosiPlay; DrawStatusIcon(Canvas, NodeRect, Icon); end; end; function TViewQueueItem.GetBackgroundColor: TColor; begin Result := FTreeNode.TreeView.BackgroundColor; end; function TViewQueueItem.GetTextIndent: Integer; var ATreeView: TCustomTreeView; begin Result := FTreeNode.DisplayExpandSignLeft; ATreeView := FTreeNode.TreeView; if ATreeView is TTreeView then Inc(Result, TTreeView(ATreeView).Indent); end; procedure TViewQueueItem.StartPause; var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then Queue.TogglePause; end; procedure TViewQueueItem.Stop; var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin Queue.Stop; end; end; procedure TViewQueueItem.UpdateView(Canvas: TCanvas); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if Assigned(Queue) then begin FText := Queue.GetDescription(False); if Queue.Paused then FText := FText + GetOperationStateString(fsosPaused); CalculateSizes(Canvas, True, False); end else begin FText := ''; FTreeNode.Height := 10; end; end; { TfrmViewOperations } procedure TfrmViewOperations.FormCreate(Sender: TObject); begin InitPropStorage(Self); cbAlwaysOnTopChange(nil); FMenuOperation := InvalidOperationHandle; tvOperations.DoubleBuffered := True; DoubleBuffered := True; CreateNodes; OperationsManager.AddEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @UpdateView); tvOperations.OnResize := @tvOperationsResize; end; procedure TfrmViewOperations.btnStopClick(Sender: TObject); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.Stop; end; procedure TfrmViewOperations.cbAlwaysOnTopChange(Sender: TObject); begin if cbAlwaysOnTop.Checked then begin FormStyle := fsStayOnTop; ShowInTaskBar := stDefault; end else begin FormStyle := fsNormal; ShowInTaskBar := stAlways; end; end; procedure TfrmViewOperations.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction := caFree; frmViewOperations := nil; end; procedure TfrmViewOperations.FormDestroy(Sender: TObject); begin OperationsManager.RemoveEventsListener( [omevOperationAdded, omevOperationRemoved, omevOperationMoved], @UpdateView); end; procedure TfrmViewOperations.mnuNewQueueClick(Sender: TObject); var Item: TViewBaseItem; OpManItem: TOperationsManagerItem; begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then OpManItem.MoveToNewQueue; end; end; procedure TfrmViewOperations.mnuPutFirstInQueueClick(Sender: TObject); begin MoveWithinQueue(True); end; procedure TfrmViewOperations.mnuPutLastInQueueClick(Sender: TObject); begin MoveWithinQueue(False); end; procedure TfrmViewOperations.mnuOperationShowDetachedClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) and OpManItem.Queue.IsFree then TfrmFileOp.ShowFor(OpManItem.Handle, [opwoIfExistsBringToFront]); end; procedure TfrmViewOperations.OnOperationItemContextMenu(Item: TViewBaseItem; const Point: TPoint); var i: Integer; PopupPoint: TPoint; OpManItem: TOperationsManagerItem; begin FMenuOperation := (Item as TViewOperationItem).FOperationHandle; OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) then begin for i := 0 to mnuQueue.Count - 1 do if i = OpManItem.Queue.Identifier then mnuQueue.Items[i].Checked := True else mnuQueue.Items[i].Checked := False; mnuOperationShowDetached.Enabled := OpManItem.Queue.IsFree; PopupPoint := tvOperations.ClientToScreen(Point); pmOperationPopup.PopUp(PopupPoint.x, PopupPoint.y); end; end; procedure TfrmViewOperations.OnOperationItemSelected(Item: TViewBaseItem); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then begin SetStartPauseCaption(OpManItem.Operation.State in [fsosStarting, fsosRunning, fsosWaitingForConnection]); btnStartPause.Enabled := OpManItem.Queue.IsFree; btnStop.Enabled := True; end else begin btnStartPause.Enabled := False; btnStop.Enabled := False; end; end; procedure TfrmViewOperations.OnQueueContextMenu(Item: TViewBaseItem; const Point: TPoint); var PopupPoint: TPoint; begin FMenuQueueIdentifier := (Item as TViewQueueItem).FQueueIdentifier; PopupPoint := tvOperations.ClientToScreen(Point); pmQueuePopup.PopUp(PopupPoint.x, PopupPoint.y); end; procedure TfrmViewOperations.OnQueueItemSelected(Item: TViewBaseItem); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[TViewQueueItem(Item).FQueueIdentifier]; if Assigned(Queue) then begin SetStartPauseCaption(not Queue.Paused); btnStartPause.Enabled := True; end else begin btnStartPause.Enabled := False; end; btnStop.Enabled := btnStartPause.Enabled; end; procedure TfrmViewOperations.OnUpdateTimer(Sender: TObject); begin UpdateSizes; tvOperationsSelectionChanged(tvOperations); tvOperations.Invalidate; end; procedure TfrmViewOperations.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: integer; Item: TViewBaseItem; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then SetNewQueue(TViewOperationItem(Item), NewQueueNumber); end; end; procedure TfrmViewOperations.mnuQueueShowDetachedClick(Sender: TObject); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FMenuQueueIdentifier]; if Assigned(Queue) then TfrmFileOp.ShowFor(Queue.Identifier, [opwoIfExistsBringToFront]); end; procedure TfrmViewOperations.tbPauseAllChange(Sender: TObject); begin if tbPauseAll.State = cbChecked then OperationsManager.PauseAll else OperationsManager.UnPauseAll; end; procedure TfrmViewOperations.tvOperationsCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var Item: TViewBaseItem; NodeRect: TRect; procedure DrawExpandSign(MidX, MidY: integer; CollapseSign: boolean); const ExpandSignColor = clWindowText; var HalfSize, ALeft, ATop, ARight, ABottom: integer; Points: array [0..2] of TPoint; R: TRect; begin with Sender.Canvas do begin Brush.Color := clWindow; Pen.Color := ExpandSignColor; Pen.Style := psSolid; HalfSize := ExpandSignSize shr 1; if not Odd(ExpandSignSize) then dec(HalfSize); ALeft := MidX - HalfSize; ATop := MidY - HalfSize; ARight := ALeft + ExpandSignSize; ABottom := ATop + ExpandSignSize; // draw an arrow. down for collapse and right for expand R := Rect(ALeft, ATop, ARight, ABottom); if CollapseSign then begin // draw an arrow down Points[0] := Point(R.Left, MidY); Points[1] := Point(R.Right - 1, MidY); Points[2] := Point(MidX, R.Bottom - 1); end else begin // draw an arrow right Points[0] := Point(MidX - 1, ATop); Points[1] := Point(R.Right - 2, MidY); Points[2] := Point(MidX - 1, R.Bottom - 1); end; Polygon(Points, False); end; end; var VertMid: Integer; begin if not Assigned(Node.Data) then Exit; Item := TViewBaseItem(Node.Data); NodeRect := Node.DisplayRect(False); Item.Draw(Sender.Canvas, NodeRect); if tvOperations.ShowButtons and Node.HasChildren and ((tvoShowRoot in tvOperations.Options) or (Node.Parent <> nil)) then begin VertMid := (NodeRect.Top + NodeRect.Bottom) div 2; DrawExpandSign(Node.DisplayExpandSignLeft + tvOperations.Indent shr 1, VertMid, Node.Expanded); end; // draw separator if (tvoShowSeparators in tvOperations.Options) then begin Sender.Canvas.Pen.Color:=tvOperations.SeparatorColor; Sender.Canvas.MoveTo(NodeRect.Left,NodeRect.Bottom-1); Sender.Canvas.LineTo(NodeRect.Right,NodeRect.Bottom-1); end; DefaultDraw := False; end; procedure TfrmViewOperations.tvOperationsDeletion(Sender: TObject; Node: TTreeNode); var Item: TViewBaseItem; begin Item := TViewBaseItem(Node.Data); Node.Data := nil; Item.Free; end; procedure TfrmViewOperations.tvOperationsDragDrop(Sender, Source: TObject; X, Y: Integer); var TargetNode: TTreeNode; NodeRect: TRect; TargetItem: TViewBaseItem; QueueItem: TViewQueueItem; OperItem: TViewOperationItem; SourceOpManItem, TargetOpManItem: TOperationsManagerItem; TargetQueue: TOperationsManagerQueue; TargetQueueId: TOperationsManagerQueueIdentifier; HitTopPart: Boolean; begin if Source = tvOperations then begin SourceOpManItem := OperationsManager.GetItemByHandle(FDraggedOperation); if Assigned(SourceOpManItem) then begin TargetNode := tvOperations.GetNodeAt(X, Y); if not Assigned(TargetNode) then begin SourceOpManItem.MoveToNewQueue; end else begin NodeRect := TargetNode.DisplayRect(False); TargetItem := TViewBaseItem(TargetNode.Data); HitTopPart := Y - NodeRect.Top < (NodeRect.Bottom - NodeRect.Top) div 2; if TargetItem is TViewQueueItem then begin QueueItem := TViewQueueItem(TargetItem); if HitTopPart and (TargetNode = tvOperations.Items.GetFirstNode) and (QueueItem.FQueueIdentifier <> FreeOperationsQueueId) then begin // There are no free operations and item was dropped at the top of the list // on some queue. Create a free operations queue and move to it. TargetQueueId := FreeOperationsQueueId; TargetQueue := OperationsManager.GetOrCreateQueue(TargetQueueId); end else begin TargetQueueId := QueueItem.FQueueIdentifier; TargetQueue := OperationsManager.QueueByIdentifier[TargetQueueId]; end; SourceOpManItem.SetQueue(TargetQueue); end else if (TargetItem is TViewOperationItem) and (FDraggedOperation <> TViewOperationItem(TargetItem).FOperationHandle) then begin OperItem := TViewOperationItem(TargetItem); TargetOpManItem := OperationsManager.GetItemByHandle(OperItem.FOperationHandle); if Assigned(TargetOpManItem) then SourceOpManItem.Move(TargetOpManItem.Handle, HitTopPart); end; end; end; end; end; procedure TfrmViewOperations.tvOperationsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := True; end; procedure TfrmViewOperations.tvOperationsKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.KeyDown(Key, Shift); end; procedure TfrmViewOperations.tvOperationsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Node: TTreeNode; NodeRect: TRect; begin FDraggedOperation := InvalidOperationHandle; Node := tvOperations.GetNodeAt(X, Y); if Assigned(Node) then begin NodeRect := Node.DisplayRect(False); TViewBaseItem(Node.Data).Click(Point(X - NodeRect.Left, Y - NodeRect.Top), Button, Shift); if TViewBaseItem(Node.Data) is TViewOperationItem then FDraggedOperation := TViewOperationItem(Node.Data).FOperationHandle; end; end; procedure TfrmViewOperations.tvOperationsResize(Sender: TObject); begin UpdateSizes; end; procedure TfrmViewOperations.tvOperationsSelectionChanged(Sender: TObject); var Node: TTreeNode; begin Node := tvOperations.Selected; if Assigned(Node) then TViewBaseItem(Node.Data).Selected; end; function TfrmViewOperations.GetFocusedItem: TViewBaseItem; var Node: TTreeNode; begin Node := tvOperations.Selected; if Assigned(Node) then Result := TViewBaseItem(Node.Data) else Result := nil; end; procedure TfrmViewOperations.mnuCancelOperationClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FMenuOperation); if Assigned(OpManItem) then OpManItem.Operation.Stop; end; procedure TfrmViewOperations.mnuCancelQueueClick(Sender: TObject); var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[FMenuQueueIdentifier]; if Assigned(Queue) then Queue.Stop; end; procedure TfrmViewOperations.MoveWithinQueue(MoveToTop: Boolean); var Item: TViewBaseItem; OpManItem: TOperationsManagerItem; begin Item := GetFocusedItem; if Assigned(Item) and (Item is TViewOperationItem) then begin OpManItem := OperationsManager.GetItemByHandle(TViewOperationItem(Item).FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.Identifier <> FreeOperationsQueueId then begin if MoveToTop then OpManItem.MoveToTop else OpManItem.MoveToBottom; end; end; end; end; procedure TfrmViewOperations.SetFocusItem(AOperationHandle: TOperationHandle); var Node: TTreeNode; begin for Node in tvOperations.Items do begin if (TViewBaseItem(Node.Data) is TViewOperationItem) and (TViewOperationItem(Node.Data).FOperationHandle = AOperationHandle) then begin Node.Selected := True; Exit; end; end; end; procedure TfrmViewOperations.SetFocusItem(AQueueIdentifier: TOperationsManagerQueueIdentifier); var Node: TTreeNode; begin for Node in tvOperations.Items do begin if (TViewBaseItem(Node.Data) is TViewQueueItem) and (TViewQueueItem(Node.Data).FQueueIdentifier = AQueueIdentifier) then begin Node.Selected := True; Exit; end; end; end; procedure TfrmViewOperations.SetNewQueue(Item: TViewOperationItem; NewQueue: TOperationsManagerQueueIdentifier); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(Item.FOperationHandle); if Assigned(OpManItem) then OpManItem.SetQueue(OperationsManager.GetOrCreateQueue(NewQueue)); end; procedure TfrmViewOperations.SetStartPauseCaption(SetPause: Boolean); begin if SetPause then btnStartPause.Caption := rsDlgOpPause else btnStartPause.Caption := rsDlgOpStart; end; procedure TfrmViewOperations.btnStartPauseClick(Sender: TObject); var Item: TViewBaseItem; begin Item := GetFocusedItem; if Assigned(Item) then Item.StartPause; end; procedure TfrmViewOperations.CreateNodes; procedure AddOperations(Queue: TOperationsManagerQueue; QueueNode: TTreeNode); var OperIndex: Integer; OpManItem: TOperationsManagerItem; OperNode: TTreeNode; Item: TViewBaseItem; begin for OperIndex := 0 to Queue.Count - 1 do begin OpManItem := Queue.Items[OperIndex]; OperNode := tvOperations.Items.AddChild(QueueNode, ''); Item := TViewOperationItem.Create(OperNode, OpManItem.Handle); OperNode.Data := Item; Item.UpdateView(tvOperations.Canvas); Item.OnContextMenu := @OnOperationItemContextMenu; Item.OnSelected := @OnOperationItemSelected; end; end; var QueueIndex: Integer; Queue: TOperationsManagerQueue; QueueNode: TTreeNode; Item: TViewBaseItem; begin tvOperations.Items.Clear; // First add all free operations. Queue := OperationsManager.QueueByIdentifier[FreeOperationsQueueId]; if Assigned(Queue) then AddOperations(Queue, nil); for QueueIndex := 0 to OperationsManager.QueuesCount - 1 do begin Queue := OperationsManager.QueueByIndex[QueueIndex]; if Queue.Identifier <> FreeOperationsQueueId then begin QueueNode := tvOperations.Items.AddChild(nil, ''); Item := TViewQueueItem.Create(QueueNode, Queue.Identifier); QueueNode.Data := Item; Item.UpdateView(tvOperations.Canvas); Item.OnContextMenu := @OnQueueContextMenu; Item.OnSelected := @OnQueueItemSelected; AddOperations(Queue, QueueNode); end; end; end; procedure TfrmViewOperations.UpdateSizes; var Node: TTreeNode; begin Node := tvOperations.Items.GetFirstNode; while Assigned(Node) do begin TViewBaseItem(Node.Data).UpdateView(tvOperations.Canvas); Node := Node.GetNext; end; end; procedure TfrmViewOperations.UpdateView(Item: TOperationsManagerItem; Event: TOperationManagerEvent); begin CreateNodes; tvOperations.Invalidate; end; initialization ProgressRight := ProgressHorizontalMargin + StatusIconRightMargin + (StatusIconFrame.Right - StatusIconFrame.Left); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/upathlabel.pas������������������������������������������������������������������0000644�0001750�0000144�00000013653�12265547351�016154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Label displaying a path, highlighting directories with mouse. Copyright (C) 2010-2011 Przemysław Nagay (cobines@gmail.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 uPathLabel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls; type { TPathLabel } TPathLabel = class(TLabel) private FAllowHighlight: Boolean; FHighlightStartPos: Integer; FHighlightText: String; {en How much space to leave between the text and left border. } FLeftSpacing: Integer; {en If a user clicks on a parent directory of the path, this stores the full path of that parent directory. } FSelectedDir: String; {en If a mouse if over some parent directory of the currently displayed path, it is highlighted, so that user can click on it. } procedure Highlight(MousePosX, MousePosY: Integer); protected procedure MouseEnter; override; procedure MouseMove(Shift: TShiftState; X,Y: Integer); override; procedure MouseLeave; override; public constructor Create(AOwner: TComponent; bAllowHighlight: Boolean = False); reintroduce; procedure Paint; override; {en Changes drawing colors depending active/inactive state. } procedure SetActive(Active: Boolean); property AllowHighlight: Boolean read FAllowHighlight write FAllowHighlight; property LeftSpacing: Integer read FLeftSpacing write FLeftSpacing; property SelectedDir: String read FSelectedDir; end; implementation uses Controls, Graphics, math; { TPathLabel } constructor TPathLabel.Create(AOwner: TComponent; bAllowHighlight: Boolean); begin FLeftSpacing := 3; // set before painting inherited Create(AOwner); FAllowHighlight := bAllowHighlight; FSelectedDir := ''; FHighlightStartPos := -1; FHighlightText := ''; SetActive(False); end; procedure TPathLabel.Paint; var TextTop: Integer; begin Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Center vertically. TextTop := (Height - Canvas.TextHeight(Text)) div 2; Canvas.FillRect(0, 0, Width, Height); // background Canvas.TextOut(LeftSpacing, TextTop, Text); // path // Highlight part of the path if mouse is over it. if FHighlightStartPos <> -1 then begin Canvas.Brush.Color := Font.Color; // reverse colors Canvas.Font.Color := Color; Canvas.TextOut(FHighlightStartPos, TextTop, FHighlightText); end; end; procedure TPathLabel.SetActive(Active: Boolean); begin case Active of False: begin Color := clBtnFace; Font.Color := clBtnText; end; True: begin Color := clHighlight; Font.Color := clHighlightText; end; end; end; procedure TPathLabel.Highlight(MousePosX, MousePosY: Integer); var PartText: String; StartPos, CurPos: Integer; PartWidth: Integer; CurrentHighlightPos, NewHighlightPos: Integer; TextLen: Integer; PathDelimWidth: Integer; begin CurrentHighlightPos := LeftSpacing; // start at the beginning of the path NewHighlightPos := -1; Canvas.Font := Self.Font; PathDelimWidth := Canvas.TextWidth(PathDelim); TextLen := Length(Text); // Start from the first character, but omit any path delimiters at the beginning. StartPos := 1; while (StartPos <= TextLen) and (Text[StartPos] = PathDelim) do Inc(StartPos); // Move the canvas position after the skipped text (if any). CurrentHighlightPos := CurrentHighlightPos + (StartPos - 1) * PathDelimWidth; for CurPos := StartPos + 1 to TextLen - 1 do begin if Text[CurPos] = PathDelim then begin PartText := Copy(Text, StartPos, CurPos - StartPos); PartWidth := Canvas.TextWidth(PartText); // If mouse is over this part of the path - highlight it. if InRange(MousePosX, CurrentHighlightPos, CurrentHighlightPos + PartWidth) then begin NewHighlightPos := CurrentHighlightPos; Break; end; CurrentHighlightPos := CurrentHighlightPos + PartWidth + PathDelimWidth; StartPos := CurPos + 1; end; end; // Repaint if highlighted part has changed. if NewHighlightPos <> FHighlightStartPos then begin // Omit minimized part of the displayed path. if PartText = '..' then FHighlightStartPos := -1 else FHighlightStartPos := NewHighlightPos; if FHighlightStartPos <> -1 then begin Cursor := crHandPoint; FHighlightText := PartText; // If clicked, this will be the new directory. FSelectedDir := Copy(Text, 1, CurPos - 1); end else begin Cursor := crDefault; FSelectedDir := ''; FHighlightText := ''; end; Self.Invalidate; end; end; procedure TPathLabel.MouseEnter; begin inherited MouseEnter; if FAllowHighlight then begin Cursor := crDefault; Invalidate; end; end; procedure TPathLabel.MouseMove(Shift: TShiftState; X,Y: Integer); begin inherited MouseMove(Shift, X, Y); if FAllowHighlight then Highlight(X, Y); end; procedure TPathLabel.MouseLeave; begin inherited MouseLeave; if FAllowHighlight then begin FSelectedDir := ''; FHighlightStartPos := -1; FHighlightText := ''; Cursor := crDefault; Invalidate; end; end; end. �������������������������������������������������������������������������������������doublecmd-0.7.1/src/doublecmd.lpr�������������������������������������������������������������������0000644�0001750�0000144�00000014317�12660674103�015774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ $threading on} program doublecmd; {%File 'doc/changelog.txt'} {.$APPTYPE GUI} uses {$IFDEF DARWIN} uAppleMagnifiedModeFix, {$ENDIF} {$IF DEFINED(WIN64) AND (FPC_FULLVERSION < 30000)} uExceptionHandlerFix, {$ENDIF} {$IFDEF UNIX} cthreads, {$IFNDEF HEAPTRC} cmem, {$ENDIF} cwstring, clocale, {$IFDEF LCLGTK2} uOverlayScrollBarFix, gtk2, Gtk2Int, {$ENDIF} {$ENDIF} DCConvertEncoding, Interfaces, LCLProc, Classes, SysUtils, Forms, LCLVersion, Math, {$IF DEFINED(NIGHTLY_BUILD)} un_lineinfo, {$ENDIF} uGlobsPaths, uGlobs, fHackForm, fMain, fMkDir, dmHigh, dmHelpManager, dmCommonData, uShowMsg, uCryptProc, uPixMapManager, uKeyboard, uUniqueInstance, uDCVersion, uCmdLineParams, uDebug, uOSUtils, uspecialdir, fstartingsplash, ulog, uVariableMenuSupport {$IFDEF MSWINDOWS} , uMyWindows {$ENDIF} {$IFDEF UNIX} , uMyUnix {$ENDIF} ; {$IF NOT (DEFINED(DARWIN) AND DEFINED(LCLQT))} {$R *.res} {$ENDIF} {$IF DEFINED(MSWINDOWS)} {$R doublecmd.manifest.rc} {$ENDIF} {$IFDEF HEAPTRC} var LogPath: String; {$ENDIF} begin DCDebug('Starting Double Commander'); // Initialize random number generator Randomize; // Disable invalid floating point operation exception SetExceptionMask(GetExceptionMask + [exInvalidOp]); {$IF DEFINED(NIGHTLY_BUILD)} InitLineInfo; AddLineInfoPath(ExtractFileDir(ParamStr(0))); {$ENDIF} {$IFDEF HEAPTRC} LogPath := IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'logs'; CreateDir(LogPath); SetHeapTraceOutput(LogPath + '/heaptrc-' + FormatDateTime('yyyy-mm-dd hh.mm.ss', Now) + '.log'); {$ENDIF} {$IFDEF MSWINDOWS} uMyWindows.InitErrorMode; uMyWindows.FixCommandLineToUTF8; {$ENDIF} // Fix default BidiMode // see http://bugs.freepascal.org/view.php?id=22044 Application.BidiMode:= bdLeftToRight; Application.Title:= 'Double Commander'; Application.Initialize; uDCVersion.InitializeVersionInfo; // Initializing keyboard module on GTK needs GTKProc.InitKeyboardTables // which is called by Application.Initialize. uKeyboard.InitializeKeyboard; // Use only current directory separator AllowDirectorySeparators:= [DirectorySeparator]; {$IF lcl_fullversion >= 093100} // Disable because we set a few of our own format settings and we don't want // them to be changed. There's no way currently to react to Application.IntfSettingsChange. // If in future we move to a Unicode RTL this could be removed. {$PUSH}{$WARN SYMBOL_PLATFORM OFF} Application.UpdateFormatSettings := False; {$POP} {$ENDIF} DefaultFormatSettings.ThousandSeparator:= ' '; {$IFDEF UNIX} uMyUnix.FixDateTimeSeparators; {$ENDIF} FixDateNamesToUTF8; DCDebug('Double Commander ' + dcVersion); DCDebug('Revision: ' + dcRevision); DCDebug('Build: ' + dcBuildDate); DCDebug('Lazarus: ' + GetLazarusVersion); DCDebug('Free Pascal: ' + fpcVersion); DCDebug('Platform: ' + TargetCPU + '-' + TargetOS + '-' + TargetWS); DCDebug('System: ' + OSVersion); {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} DCDebug('Desktop Environment: ' + DesktopName[DesktopEnv]); {$ENDIF} if WSVersion <> EmptyStr then DCDebug('Widgetset library: ' + WSVersion); DCDebug('This program is free software released under terms of GNU GPL 2'); DCDebug('(C)opyright 2006-2016 Alexander Koblov (alexx2000@mail.ru)'); DCDebug(' and contributors (see about dialog)'); Application.ShowMainForm:= False; Application.CreateForm(TfrmHackForm, frmHackForm); ProcessCommandLineParams; // before load paths if not CommandLineParams.NoSplash then begin // Let's show the starting slash screen to confirm user application has been started Application.CreateForm(TfrmStartingSplash, frmStartingSplash); frmStartingSplash.Show; end; LoadPaths; // before loading config LoadWindowsSpecialDir; // Load the list with special path. *Must* be located AFTER "LoadPaths" and BEFORE "InitGlobs" LoadVariableMenuSupport; //Load support for the popup menu with variable if InitGlobs then //-- NOTE: before, only IsInstanceAllowed was called, and all the magic on creation // new instance or sending params to the existing server happened inside // IsInstanceAllowed() function as a side effect. // Functions with side effects are generally bad, so, // new function was added to explicitly initialize instance. InitInstance; if IsInstanceAllowed then begin if (log_start_shutdown in gLogOptions) then logWrite('Program start ('+GetCurrentUserName+'/'+GetComputerNetName+')'); InitPasswordStore; LoadPixMapManager; Application.CreateForm(TfrmMain, frmMain); // main form Application.CreateForm(TdmHighl, dmHighl); // highlighters Application.CreateForm(TdmComData, dmComData); // common data Application.CreateForm(TdmHelpManager, dmHelpMgr); // help manager Application.CreateForm(TfrmMkDir, frmMkDir); // 21.05.2009 - makedir form {$IF DEFINED(LCLGTK2) AND (lcl_fullversion >= 093100)} // LCLGTK2 uses Application.MainForm as the clipboard widget, however our // MainForm is TfrmHackForm and it never gets realized. GTK2 doesn't // seem to allow a not realized widget to have clipboard ownership. // We switch to frmMain instead which will be realized at some point. GTK2WidgetSet.SetClipboardWidget(PGtkWidget(frmMain.Handle)); {$ENDIF} // Hooking on QT needs the handle of the main form which is created // in Application.CreateForm above. uKeyboard.HookKeyboardLayoutChanged; if not CommandLineParams.NoSplash then begin // We may now remove the starting splash screen, most of the application has been started now frmStartingSplash.Close; frmStartingSplash.Release; end; Application.Run; if not UniqueInstance.isAnotherDCRunningWhileIamRunning then DeleteTempFolderDeletableAtTheEnd; if (log_start_shutdown in gLogOptions) then logWrite('Program shutdown ('+GetCurrentUserName+'/'+GetComputerNetName+')'); end else begin DCDebug('Another instance of DC is already running. Exiting.'); end; uKeyboard.CleanupKeyboard; DCDebug('Finished Double Commander'); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uspecialdir.pas�����������������������������������������������������������������0000644�0001750�0000144�00000065476�12666540554�016354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Working with SpecialDir Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) 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 -This unit has been added in 2014. -Inspired a lot from "usearchtemplate" -Icon used for button to work with path is called "folder_wrench.png" and was taken from "http://www.famfamfam.com/lab/icons/silk/". It is already mentionned in the "about" section of the application that icons are coming from this site. } unit uSpecialDir; {$mode objfpc}{$H+} interface uses Menus, Classes, SysUtils; const TAGOFFSET_FORHOTDIRUSEINPATHHELPER = $10000; TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER = $20000; type { TKindOfPathFile } TKindOfPathFile = (pfFILE, pfPATH); { TKindOfSpecialDir } TKindOfSpecialDir = (sd_NULL, sd_DOUBLECOMMANDER, sd_WINDOWSTC, sd_WINDOWSNONTC, sd_ENVIRONMENTVARIABLE); { TKindSpecialDirMenuPopulation } TKindSpecialDirMenuPopulation = (mp_PATHHELPER, mp_CHANGEDIR); { TProcedureWithJustASender } TProcedureWithJustASender = procedure(Sender: TObject) of Object; { TSpecialDir } TSpecialDir = class private fDispatcher: TKindOfSpecialDir; fVariableName: string; fPathValue: string; public constructor Create; property Dispatcher: TKindOfSpecialDir read fDispatcher write fDispatcher; property VariableName: string read fVariableName write fVariableName; property PathValue: string read fPathValue write fPathValue; end; { TSpecialDirList } TSpecialDirList = class(TList) private fIndexOfSpecialDirComptibleTC:longint; //Index of first windows SpecialDir compatible with TC fIndexOfNewVariableNotInTC:longint; //Index of first SpecialDir non-compatible TC fIndexOfEnvironmentVariable:longint; //Index of first EnvironmentVariable fRecipientComponent:TComponent; fRecipientType:TKindOfPathFile; function GetSpecialDir(Index: Integer): TSpecialDir; public constructor Create; procedure Clear; override; procedure PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate:TComponent; KindSpecialDirMenuPopulation:TKindSpecialDirMenuPopulation; ProcedureIfChangeDirClick:TProcedureWithJustASender); procedure SpecialDirMenuClick(Sender: TObject); procedure PopulateSpecialDir; procedure SetSpecialDirRecipientAndItsType(ParamComponent:TComponent; ParamKindOfPathFile:TKindOfPathFile); property SpecialDir[Index: Integer]: TSpecialDir read GeTSpecialDir; property IndexOfSpecialDirComptibleTC: longint read fIndexOfSpecialDirComptibleTC write fIndexOfSpecialDirComptibleTC; //Index of first windows Special Dir compatible with TC property IndexOfNewVariableNotInTC: longint read fIndexOfNewVariableNotInTC write fIndexOfNewVariableNotInTC; //Index of first non-compatible Total Commander path property IndexOfEnvironmentVariable: longint read fIndexOfEnvironmentVariable write fIndexOfEnvironmentVariable; //Index of first EnvironmentVariable end; function GetMenuCaptionAccordingToOptions(const WantedCaption:string; const MatchingPath:string):string; procedure LoadWindowsSpecialDir; implementation uses //Lazarus, Free-Pascal, etc. EditBtn, Dialogs, ExtCtrls, StrUtils, StdCtrls, lazutf8, {$IFDEF MSWINDOWS} ShlObj, {$ENDIF} //DC DCOSUtils, uDCUtils, uGlobsPaths, fmain, uLng, uGlobs, uHotDir, uOSUtils, DCStrUtils; { The special path are sorted first by type of special path they represent (DC, Windows, Environment...) Then, by alphabetical order. But also, the most commun useful path could be placed first to be more user friendly.} function CompareSpecialDir(Item1,Item2:Pointer):integer; function GetWeigth(sSpecialDir:string):longint; begin result:=10; if sSpecialDir='%$PERSONAL%' then result:=1; if sSpecialDir='%$DESKTOP%' then result:=2; if sSpecialDir='%$APPDATA%' then result:=3; end; var Weight1,Weight2:longint; begin if TSpecialDir(Item1).Dispatcher<>TSpecialDir(Item2).Dispatcher then begin if TSpecialDir(Item1).Dispatcher<TSpecialDir(Item2).Dispatcher then result:=-1 else result:=1; end else begin Weight1:=GetWeigth(TSpecialDir(Item1).VariableName); Weight2:=GetWeigth(TSpecialDir(Item2).VariableName); if Weight1<>Weight2 then begin if Weight1<Weight2 then result:=-1 else result:=1; end else begin result:=CompareText(TSpecialDir(Item1).VariableName,TSpecialDir(Item2).VariableName); end; end; end; { TSpecialDir.Create } constructor TSpecialDir.Create; begin inherited Create; fDispatcher:=sd_NULL; fVariableName:=''; fPathValue:=''; end; { TSpecialDirList.Create } constructor TSpecialDirList.Create; begin inherited Create; fIndexOfSpecialDirComptibleTC:=0; fIndexOfNewVariableNotInTC:=0; fIndexOfEnvironmentVariable:=0; end; { TSpecialDirList.GetSpecialDir } function TSpecialDirList.GetSpecialDir(Index: Integer): TSpecialDir; begin Result:= TSpecialDir(Items[Index]); end; { TSpecialDirList.Clear } procedure TSpecialDirList.Clear; var i: Integer; begin for i := pred(Count) downto 0 do SpecialDir[i].Free; inherited Clear; end; { TSpecialDirList.PopulatePopupMenuWithSpecialDir } procedure TSpecialDirList.PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate:TComponent; KindSpecialDirMenuPopulation:TKindSpecialDirMenuPopulation; ProcedureIfChangeDirClick:TProcedureWithJustASender); var miMainTree:TMenuItem; IndexVariable:longint; procedure AddStraightToMainTree(CaptionForMenuItem:string; TagForMenuItem:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); begin miMainTree:=TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption:=CaptionForMenuItem; if (CaptionForMenuItem<>'-') AND (ProcedureWhenClickOnMenuItem<>nil) then begin miMainTree.Tag:=TagForMenuItem; miMainTree.OnClick:=ProcedureWhenClickOnMenuItem; end; if mncmpMenuComponentToPopulate.ClassType=TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType=TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; procedure AddToSubMenu(ParamMenuItem:TMenuItem; TagRequested:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); var localmi:TMenuItem; begin localmi:=TMenuItem.Create(ParamMenuItem); localmi.Caption:=GetMenuCaptionAccordingToOptions(SpecialDir[IndexVariable].VariableName,SpecialDir[IndexVariable].PathValue); localmi.tag:=TagRequested; localmi.OnClick:=ProcedureWhenClickOnMenuItem; ParamMenuItem.Add(localmi); end; procedure AddBatchOfMenuItems(SubMenuTitle:string; StartingIndex,StopIndex,TagOffset:longint; ProcedureWhenClickOnMenuItem:TProcedureWhenClickOnMenuItem); begin if StopIndex>StartingIndex then begin miMainTree:=TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption:=SubMenuTitle; if mncmpMenuComponentToPopulate.ClassType=TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType=TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); IndexVariable:=StartingIndex; while IndexVariable<StopIndex do begin AddToSubMenu(miMainTree,TagOffset+IndexVariable,ProcedureWhenClickOnMenuItem); inc(IndexVariable); end; end; end; begin case KindSpecialDirMenuPopulation of mp_PATHHELPER: begin //1o) "Use special path...", we add the special path used by TC AddBatchOfMenuItems(rsMsgSpecialDirUseDC,0,IndexOfSpecialDirComptibleTC,100,@SpecialDirMenuClick); //2o) "Use special path...", if in Windows, we add the Windows special folder beginning with TC compatible ones and then the newer ones we introduce in DC {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirUseTC,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,100,@SpecialDirMenuClick); AddBatchOfMenuItems(rsMsgSpecialDirUseOther,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,100,@SpecialDirMenuClick); {$ENDIF} //3o) "Use special path...", then, the ones from environment variable AddBatchOfMenuItems(rsMsgSpecialDirEnvVar,IndexOfEnvironmentVariable,Count,100,@SpecialDirMenuClick); //4o) "Use hotdir path...", then the ones user might have with his HotDir AddStraightToMainTree(rsMsgSpecialDirUseHotDir, 0, nil); gDirectoryHotlist.PopulateMenuWithHotDir(miMainTree,@SpecialDirMenuClick,nil,mpPATHHELPER,TAGOFFSET_FORHOTDIRUSEINPATHHELPER); AddStraightToMainTree('-',0,nil); //5o) "Make relative to special path...", we add the special path used by TC AddBatchOfMenuItems(rsMsgSpecialDirMkDCRel,0,IndexOfSpecialDirComptibleTC,1100,@SpecialDirMenuClick); //6o) "Make relative to special path...", if in Windows, we add the Windows special folder beginning with TC compatible ones and then the newer ones we introduce in DC {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirMkTCTel,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,1100,@SpecialDirMenuClick); AddBatchOfMenuItems(rsMsgSpecialDirMkWnRel,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,1100,@SpecialDirMenuClick); {$ENDIF} //7o) "Make relative to special path...", then, the ones from environment variable AddBatchOfMenuItems(rsMsgSpecialDirMkEnvRel,IndexOfEnvironmentVariable,Count,1100,@SpecialDirMenuClick); //8o) "Make relative to HotDir path...", then, the ones from hotdir AddStraightToMainTree(rsMsgSpecialDirMakeRelToHotDir, 0, nil); gDirectoryHotlist.PopulateMenuWithHotDir(miMainTree,@SpecialDirMenuClick,nil,mpPATHHELPER,TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER); AddStraightToMainTree('-',0,nil); //9o) Then add the item to make the path in absolute format AddStraightToMainTree(rsMsgSpecialDirMkAbso,1,@SpecialDirMenuClick); AddStraightToMainTree('-',0,nil); //10o) Then allow to indicate the one from the active and non-active panel AddStraightToMainTree(rsMsgSpecialDirAddActi,2,@SpecialDirMenuClick); AddStraightToMainTree(rsMsgSpecialDirAddNonActi,3,@SpecialDirMenuClick); //11o) Finally, offer the possibility to browse into folder AddStraightToMainTree(rsMsgSpecialDirBrowsSel,4,@SpecialDirMenuClick); end; //mp_PATHHELPER: mp_CHANGEDIR: begin AddStraightToMainTree(rsMsgSpecialDir,0,nil); mncmpMenuComponentToPopulate:=miMainTree; AddBatchOfMenuItems(rsMsgSpecialDirGotoDC,0,IndexOfSpecialDirComptibleTC,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); {$IFDEF MSWINDOWS} AddBatchOfMenuItems(rsMsgSpecialDirGotoTC,IndexOfSpecialDirComptibleTC,IndexOfNewVariableNotInTC,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); AddBatchOfMenuItems(rsMsgSpecialDirGotoOther,IndexOfNewVariableNotInTC,IndexOfEnvironmentVariable,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); {$ENDIF} AddBatchOfMenuItems(rsMsgSpecialDirGotoEnvVar,IndexOfEnvironmentVariable,Count,TAGOFFSET_FORCHANGETOSPECIALDIR,ProcedureIfChangeDirClick); end; //mp_CHANGEDIR end; //case KindSpecialDirMenuPopulation of end; { TSpecialDirList.SpecialDirMenuClick } procedure TSpecialDirList.SpecialDirMenuClick(Sender: TObject); function GetCorrectPathForHotDirFromHints(AnyPath, WindowsVariableName, WindowsPathName:String):String; var SubWorkingPath,MaybeSubstitionPossible:String; begin result:=''; SubWorkingPath:=mbExpandFileName(AnyPath); SubWorkingPath:=IncludeTrailingPathDelimiter(SubWorkingPath); if lowercase(SubWorkingPath)=lowercase(WindowsPathName+PathDelim) then begin result:=WindowsVariableName; end else begin MaybeSubstitionPossible:=ExtractRelativePath(WindowsPathName+PathDelim,SubWorkingPath); if MaybeSubstitionPossible<>SubWorkingPath then begin result:=WindowsVariableName+PathDelim+MaybeSubstitionPossible; end else begin result:=AnyPath; end; end; end; var Dispatcher:longint; //Indicate wich menuitem user selected RememberFilename, OriginalPath, MaybeResultingOutputPath, sSelectedPath:string; begin with Sender as TComponent do Dispatcher:=tag; OriginalPath:=''; if fRecipientComponent.ClassType=TLabeledEdit then OriginalPath:=TLabeledEdit(fRecipientComponent).Text else if fRecipientComponent.ClassType=TFileNameEdit then OriginalPath:=TFileNameEdit(fRecipientComponent).FileName else if fRecipientComponent.ClassType=TEdit then OriginalPath:=TEdit(fRecipientComponent).Text else if fRecipientComponent.ClassType=TDirectoryEdit then OriginalPath:=TDirectoryEdit(fRecipientComponent).Text; if fRecipientType=pfFILE then begin RememberFilename:=ExtractFilename(OriginalPath); OriginalPath:=ExtractFilePath(OriginalPath); end; MaybeResultingOutputPath:=OriginalPath; //Let's play safe: returned path, by default, if nothing is trig, is the same as the original one, so, no change... case Dispatcher of 1: //Make path absolute begin MaybeResultingOutputPath:=mbExpandFileName(OriginalPath); end; 2: //Add path from active frame begin MaybeResultingOutputPath:=frmMain.ActiveFrame.CurrentPath; end; 3: //Add path from inactive frame begin MaybeResultingOutputPath:=frmMain.NotActiveFrame.CurrentPath; end; 4: //Browse and use selected path begin //by default, let's try to initialise dir browser to current dir value and if it's not present, let's take the current path of the active frame if MaybeResultingOutputPath='' then MaybeResultingOutputPath:=frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, mbExpandFileName(MaybeResultingOutputPath), sSelectedPath, False) then MaybeResultingOutputPath:=sSelectedPath; end; 100..1099: //Use... begin MaybeResultingOutputPath:=gSpecialDirList.SpecialDir[Dispatcher-100].VariableName; end; 1100..2099: //Make relative to... begin MaybeResultingOutputPath:=GetCorrectPathForHotDirFromHints(OriginalPath,gSpecialDirList.SpecialDir[Dispatcher-1100].VariableName,gSpecialDirList.SpecialDir[Dispatcher-1100].PathValue); end; TAGOFFSET_FORHOTDIRUSEINPATHHELPER..(TAGOFFSET_FORHOTDIRUSEINPATHHELPER+$FFFF): begin MaybeResultingOutputPath:=gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRUSEINPATHHELPER].HotDirPath; end; TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER..(TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER+$FFFF): begin MaybeResultingOutputPath:=GetCorrectPathForHotDirFromHints(OriginalPath,gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER].HotDirPath,gDirectoryHotlist.HotDir[Dispatcher-TAGOFFSET_FORHOTDIRRELATIVEINPATHHELPER].HotDirPath); end; end; if (MaybeResultingOutputPath<>'') then MaybeResultingOutputPath:=IncludeTrailingPathDelimiter(MaybeResultingOutputPath); if fRecipientType=pfFILE then MaybeResultingOutputPath:=MaybeResultingOutputPath+RememberFilename; if lowercase(OriginalPath)<>lowercase(MaybeResultingOutputPath) then begin if fRecipientComponent.ClassType=TLabeledEdit then TLabeledEdit(fRecipientComponent).Text:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TFileNameEdit then TFileNameEdit(fRecipientComponent).FileName:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TEdit then TEdit(fRecipientComponent).Text:=MaybeResultingOutputPath else if fRecipientComponent.ClassType=TDirectoryEdit then TDirectoryEdit(fRecipientComponent).Text:=MaybeResultingOutputPath; end; end; { TSpecialDirList.PopulateSpecialDir } procedure TSpecialDirList.PopulateSpecialDir; var NbOfEnvVar, IndexVar, EqualPos:integer; EnvVar, EnvValue:string; LocalSpecialDir:TSpecialDir; MyYear,MyMonth,MyDay:word; {$IFDEF MSWINDOWS} procedure GetAndStoreSpecialDirInfos(SpecialConstant:integer; VariableName:string; ParamKindOfSpecialDir: TKindOfSpecialDir); var FilePath: array [0..Pred(MAX_PATH)] of WideChar; begin FillChar(FilePath, MAX_PATH, 0); SHGetSpecialFolderPathW(0, @FilePath[0], SpecialConstant, FALSE); if FilePath<>'' then begin LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=ParamKindOfSpecialDir; LocalSpecialDir.VariableName:=VariableName; LocalSpecialDir.PathValue:= UTF16ToUTF8(UnicodeString(FilePath)); Add(LocalSpecialDir); end; end; {$ENDIF} begin //Since in configuration we might need to recall this routine, let's clear the list if gSpecialDirList.Count>0 then gSpecialDirList.Clear; LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'COMMANDER_PATH'+VARDELIMITER_END; LocalSpecialDir.PathValue:=ExcludeTrailingPathDelimiter(gpExePath); Add(LocalSpecialDir); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'DC_CONFIG_PATH'+VARDELIMITER_END; LocalSpecialDir.PathValue:=ExcludeTrailingPathDelimiter(gpCfgDir); Add(LocalSpecialDir); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=ENVVARTODAYSDATE; LocalSpecialDir.PathValue:=Format('%d-%2.2d-%2.2d',[1980,01,01]); //Don't worry for the exact date: the routine "ReplaceEnvVars" will substitue for the correct date value Add(LocalSpecialDir); DecodeDate(now,MyYear,MyMonth,MyDay); LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_DOUBLECOMMANDER; LocalSpecialDir.VariableName:=VARDELIMITER+'CURRENTUSER'+VARDELIMITER_END; LocalSpecialDir.PathValue:=GetCurrentUserName; Add(LocalSpecialDir); IndexOfSpecialDirComptibleTC:=count; {$IFDEF MSWINDOWS} //Done with the help of: http://stackoverflow.com/questions/471123/accessing-localapplicationdata-equivalent-in-delphi //Also with the help of: http://www.ghisler.ch/board/viewtopic.php?t=12709 //The following ones are compatible with Total Commander //The first three ones are the most susceptible to be used so to speed up time when searching, we'll placed them first in the list //Please note that TC is using this convention for variable name: %$varname% GetAndStoreSpecialDirInfos(CSIDL_PERSONAL,'%$PERSONAL%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_DESKTOP,'%$DESKTOP%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_APPDATA,'%$APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_APPDATA,'%$COMMON_APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_DESKTOPDIRECTORY,'%$COMMON_DESKTOPDIRECTORY%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_DOCUMENTS,'%$COMMON_DOCUMENTS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_PICTURES,'%$COMMON_PICTURES%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_PROGRAMS,'%$COMMON_PROGRAMS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_STARTMENU,'%$COMMON_STARTMENU%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_COMMON_STARTUP,'%$COMMON_STARTUP%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_FONTS,'%$FONTS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_LOCAL_APPDATA,'%$LOCAL_APPDATA%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYMUSIC,'%$MYMUSIC%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYVIDEO,'%$MYVIDEO%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_MYPICTURES,'%$MYPICTURES%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_PROGRAMS,'%$PROGRAMS%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTMENU,'%$STARTMENU%',sd_WINDOWSTC); GetAndStoreSpecialDirInfos(CSIDL_STARTUP,'%$STARTUP%',sd_WINDOWSTC); //These ones are new ones non-compatible on 2014-05-21 with Total Commander IndexOfNewVariableNotInTC:=count; GetAndStoreSpecialDirInfos(CSIDL_INTERNET,'%$INTERNET%',sd_WINDOWSNONTC); //{ Internet Explorer (icon on desktop) } GetAndStoreSpecialDirInfos(CSIDL_CONTROLS,'%$CONTROLS%',sd_WINDOWSNONTC); //{ My Computer\Control Panel } GetAndStoreSpecialDirInfos(CSIDL_PRINTERS,'%$PRINTERS%',sd_WINDOWSNONTC); //{ My Computer\Printers } GetAndStoreSpecialDirInfos(CSIDL_PERSONAL,'%$PERSONALXP%',sd_WINDOWSNONTC); //{ My Documents. This is equivalent to CSIDL_MYDOCUMENTS in XP and above } GetAndStoreSpecialDirInfos(CSIDL_FAVORITES,'%$FAVORITES%',sd_WINDOWSNONTC); //{ <user name>\Favorites } GetAndStoreSpecialDirInfos(CSIDL_RECENT,'%$RECENT%',sd_WINDOWSNONTC); //{ <user name>\Recent } GetAndStoreSpecialDirInfos(CSIDL_SENDTO,'%$SENDTO%',sd_WINDOWSNONTC); //{ <user name>\SendTo } GetAndStoreSpecialDirInfos(CSIDL_BITBUCKET,'%$BITBUCKET%',sd_WINDOWSNONTC); //{ <desktop>\Recycle Bin } GetAndStoreSpecialDirInfos(CSIDL_DESKTOPDIRECTORY,'%$DESKTOPDIRECTORY%',sd_WINDOWSNONTC); //{ <user name>\Desktop } GetAndStoreSpecialDirInfos(CSIDL_DRIVES,'%$DRIVES%',sd_WINDOWSNONTC); //{ My Computer } GetAndStoreSpecialDirInfos(CSIDL_NETWORK,'%$NETWORK%',sd_WINDOWSNONTC); //{ Network Neighborhood (My Network Places) } GetAndStoreSpecialDirInfos(CSIDL_NETHOOD,'%$NETHOOD%',sd_WINDOWSNONTC); //{ <user name>\nethood } GetAndStoreSpecialDirInfos(CSIDL_TEMPLATES,'%$TEMPLATES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_PRINTHOOD,'%$PRINTHOOD%',sd_WINDOWSNONTC); //{ <user name>\PrintHood } GetAndStoreSpecialDirInfos(CSIDL_ALTSTARTUP,'%$ALTSTARTUP%',sd_WINDOWSNONTC); //{ non localized startup } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ALTSTARTUP,'%$COMMON_ALTSTARTUP%',sd_WINDOWSNONTC); // { non localized common startup } GetAndStoreSpecialDirInfos(CSIDL_COMMON_FAVORITES,'%$COMMON_FAVORITES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_INTERNET_CACHE,'%$INTERNET_CACHE%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_COOKIES,'%$COOKIES%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_HISTORY,'%$HISTORY%',sd_WINDOWSNONTC); // GetAndStoreSpecialDirInfos(CSIDL_WINDOWS,'%$WINDOWS%',sd_WINDOWSNONTC); // { GetWindowsDirectory() } GetAndStoreSpecialDirInfos(CSIDL_SYSTEM,'%$SYSTEM%',sd_WINDOWSNONTC); // { GetSystemDirectory() } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES,'%$PROGRAM_FILES%',sd_WINDOWSNONTC); // { C:\Program Files } GetAndStoreSpecialDirInfos(CSIDL_PROFILE,'%$PROFILE%',sd_WINDOWSNONTC); // { USERPROFILE } GetAndStoreSpecialDirInfos(CSIDL_SYSTEMX86,'%$SYSTEMX86%',sd_WINDOWSNONTC); //{ x86 system directory on RISC } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILESX86,'%$PROGRAM_FILESX86%',sd_WINDOWSNONTC); // { x86 C:\Program Files on RISC } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES_COMMON,'%$PROGRAM_FILES_COMMON%',sd_WINDOWSNONTC); // { C:\Program Files\Common } GetAndStoreSpecialDirInfos(CSIDL_PROGRAM_FILES_COMMONX86,'%$PROGRAM_FILES_COMMONX86%',sd_WINDOWSNONTC); // { x86 C:\Program Files\Common on RISC } GetAndStoreSpecialDirInfos(CSIDL_COMMON_TEMPLATES,'%$COMMON_TEMPLATES%',sd_WINDOWSNONTC); // { All Users\Templates } GetAndStoreSpecialDirInfos(CSIDL_COMMON_ADMINTOOLS,'%$COMMON_ADMINTOOLS%',sd_WINDOWSNONTC); // { All Users\Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_ADMINTOOLS,'%$ADMINTOOLS%',sd_WINDOWSNONTC); // { <user name>\Start Menu\Programs\Administrative Tools } GetAndStoreSpecialDirInfos(CSIDL_CONNECTIONS,'%$CONNECTIONS%',sd_WINDOWSNONTC); // { Network and Dial-up Connections } GetAndStoreSpecialDirInfos(CSIDL_COMMON_MUSIC,'%$COMMON_MUSIC%',sd_WINDOWSNONTC); // { All Users\My Music } GetAndStoreSpecialDirInfos(CSIDL_COMMON_VIDEO,'%$COMMON_VIDEO%',sd_WINDOWSNONTC); // { All Users\My Video } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES,'%$RESOURCES%',sd_WINDOWSNONTC); // { Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_RESOURCES_LOCALIZED,'%$RESOURCES_LOCALIZED%',sd_WINDOWSNONTC); // { Localized Resource Directory } GetAndStoreSpecialDirInfos(CSIDL_COMMON_OEM_LINKS,'%$COMMON_OEM_LINKS%',sd_WINDOWSNONTC); // { Links to All Users OEM specific apps } GetAndStoreSpecialDirInfos(CSIDL_CDBURN_AREA,'%$CDBURN_AREA%',sd_WINDOWSNONTC); // { USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning } GetAndStoreSpecialDirInfos(CSIDL_COMPUTERSNEARME,'%$COMPUTERSNEARME%',sd_WINDOWSNONTC); // { Computers Near Me (computered from Workgroup membership) } //GetAndStoreSpecialDirInfos(CSIDL_PROFILES,'%PROFILES%'); //Does not work everywhere, let's remove it. {$ENDIF} IndexOfEnvironmentVariable:=count; //Let's store environment variable. It will be possible to search in faster eventually, if required NbOfEnvVar:= GetEnvironmentVariableCount; if NbOfEnvVar>0 then begin for IndexVar:= 1 to NbOfEnvVar do begin EnvVar:= mbGetEnvironmentString(IndexVar); EqualPos:= PosEx('=', EnvVar, 2); if EqualPos <> 0 then begin EnvValue:=copy(EnvVar, EqualPos + 1, MaxInt); {$IFDEF MSWINDOWS} if (not gShowOnlyValidEnv) OR (ExtractFileDrive(EnvValue)<>'') then {$ELSE} if (not gShowOnlyValidEnv) OR (UTF8LeftStr(EnvValue,1)=PathDelim) then {$ENDIF} begin LocalSpecialDir:=TSpecialDir.Create; LocalSpecialDir.fDispatcher:=sd_ENVIRONMENTVARIABLE; LocalSpecialDir.VariableName:=VARDELIMITER+copy(EnvVar, 1, EqualPos - 1)+VARDELIMITER_END; LocalSpecialDir.PathValue:=IncludeTrailingPathDelimiter(EnvValue); Add(LocalSpecialDir); end; end; end; end; Sort(@CompareSpecialDir); end; { TSpecialDirList.SetSpecialDirRecipientAndItsType } procedure TSpecialDirList.SetSpecialDirRecipientAndItsType(ParamComponent:TComponent; ParamKindOfPathFile:TKindOfPathFile); begin fRecipientComponent:=ParamComponent; fRecipientType:=ParamKindOfPathFile; end; function GetMenuCaptionAccordingToOptions(const WantedCaption:string; const MatchingPath:string):string; begin result:=WantedCaption; if gShowPathInPopup then begin if UTF8length(MatchingPath)<100 then result:=result + ' - ['+IncludeTrailingPathDelimiter(MatchingPath)+']' else result:=result + ' - ['+IncludeTrailingPathDelimiter('...'+UTF8RightStr(MatchingPath,100))+']'; end; end; procedure LoadWindowsSpecialDir; begin gSpecialDirList:=TSpecialDirList.Create; gSpecialDirList.PopulateSpecialDir; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsyncdirsperformdlg.lrt���������������������������������������������������������0000644�0001750�0000144�00000000164�12250542615�020120� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSYNCDIRSPERFORMDLG.CAPTION=Synchronize TFRMSYNCDIRSPERFORMDLG.CHKCONFIRMOVERWRITES.CAPTION=Confirm overwrites ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/umultiarc.pas�������������������������������������������������������������������0000644�0001750�0000144�00000036133�12612505011�016015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Implementation of multi archiver support Copyright (C) 2010-2013 Koblov Alexander (Alexx2000@mail.ru) 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 uMultiArc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; const MaxSignSize = 1024; SignSeekRange = 1024 * 1024; type TSignature = record Value: array[0..Pred(MaxSignSize)] of Byte; Size: LongInt; end; PSignature = ^TSignature; { TSignatureList } TSignatureList = class(TFPList) private function GetSignature(Index: Integer): PSignature; public destructor Destroy; override; procedure Clean; property Items[Index: Integer]: PSignature read GetSignature; default; end; TSignaturePosition = record Value: LongInt; Sign: Boolean; end; PSignaturePosition = ^TSignaturePosition; { TSignaturePositionList } TSignaturePositionList = class(TFPList) private function GetSignaturePosition(Index: Integer): PSignaturePosition; public destructor Destroy; override; procedure Clean; property Items[Index: Integer]: PSignaturePosition read GetSignaturePosition; default; end; { TArchiveItem } TArchiveItem = class FileName, FileExt, FileLink: String; PackSize, UnpSize: Int64; Year, Month, Day, Hour, Minute, Second: Word; Attributes: TFileAttrs; end; { TMultiArcItem } TMultiArcItem = class private FSeekAfterSignPos: Boolean; FSignature, FSignaturePosition: AnsiString; FSignatureSeekRange: LongInt; FSignatureList: TSignatureList; FSignaturePositionList: TSignaturePositionList; function GetSignatureSeekRange: AnsiString; procedure SetSignature(const AValue: AnsiString); procedure SetSignaturePosition(const AValue: AnsiString); procedure SetSignatureSeekRange(const AValue: AnsiString); public FArchiver, FDescription, FExtension, FStart, FEnd: String; FFormat: TStringList; FList, FExtract, FExtractWithoutPath, FTest, FDelete, FAdd, FAddSelfExtract, FPasswordQuery: String; FFormMode: Integer; public FEnabled: Boolean; FOutput: Boolean; FDebug: Boolean; constructor Create; destructor Destroy; override; function CanYouHandleThisFile(const FileName: String): Boolean; property FID: AnsiString read FSignature write SetSignature; property FIDPos: AnsiString read FSignaturePosition write SetSignaturePosition; property FIDSeekRange: AnsiString read GetSignatureSeekRange write SetSignatureSeekRange; end; { TMultiArcList } TMultiArcList = class FList: TStringList; private function GetCount: LongInt; function GetItem(Index: Integer): TMultiArcItem; function GetName(Index: Integer): String; procedure SetName(Index: Integer; const AValue: String); public constructor Create; virtual; destructor Destroy; override; procedure AutoConfigure; procedure Clear; procedure LoadFromFile(const FileName: String); procedure SaveToFile(const FileName: String); function Add(const S: String; aMultiArcItem: TMultiArcItem): Integer; procedure Delete(Index: Integer); property Names[Index: Integer]: String read GetName write SetName; property Items[Index: Integer]: TMultiArcItem read GetItem; default; property Count: LongInt read GetCount; end; implementation uses LCLProc, StrUtils, Math, FileUtil, DCClassesUtf8, uDCUtils, DCOSUtils; { TMultiArcList } function TMultiArcList.GetCount: LongInt; begin Result:= FList.Count; end; function TMultiArcList.GetItem(Index: Integer): TMultiArcItem; begin Result:= TMultiArcItem(FList.Objects[Index]); end; function TMultiArcList.GetName(Index: Integer): String; begin Result:= FList.Strings[Index]; end; procedure TMultiArcList.SetName(Index: Integer; const AValue: String); begin FList.Strings[Index]:= AValue; end; constructor TMultiArcList.Create; begin FList:= TStringList.Create; end; destructor TMultiArcList.Destroy; begin Clear; FreeThenNil(FList); inherited Destroy; end; procedure TMultiArcList.AutoConfigure; var I: Integer; ExePath: String; begin for I:= 0 to Count - 1 do begin ExePath:= Items[I].FArchiver; if not mbFileExists(ReplaceEnvVars(ExePath)) then ExePath:= FindDefaultExecutablePath(ExePath); if ExePath = EmptyStr then Items[I].FEnabled:= False else begin Items[I].FArchiver:= ExePath; Items[I].FEnabled:= True; end; end; end; procedure TMultiArcList.Clear; var I: Integer; begin for I:= FList.Count - 1 downto 0 do if Assigned(FList.Objects[I]) then begin FList.Objects[I].Free; FList.Objects[I]:= nil; FList.Delete(I); end; end; procedure TMultiArcList.LoadFromFile(const FileName: String); var I, J: Integer; IniFile: TIniFileEx = nil; Sections: TStringList = nil; Section, Format: String; FirstTime: Boolean = True; MultiArcItem: TMultiArcItem; begin IniFile:= TIniFileEx.Create(FileName, fmOpenRead); try Sections:= TStringList.Create; IniFile.ReadSections(Sections); for I:= 0 to Sections.Count - 1 do begin Section:= Sections[I]; if SameText(Section, 'MultiArc') then begin FirstTime:= IniFile.ReadBool(Section, 'FirstTime', True); Continue; end; MultiArcItem:= TMultiArcItem.Create; with MultiArcItem do begin FArchiver:= FixExeExt(TrimQuotes(IniFile.ReadString(Section, 'Archiver', EmptyStr))); FDescription:= TrimQuotes(IniFile.ReadString(Section, 'Description', EmptyStr)); FID:= TrimQuotes(IniFile.ReadString(Section, 'ID', EmptyStr)); FIDPos:= TrimQuotes(IniFile.ReadString(Section, 'IDPos', EmptyStr)); FIDSeekRange:= IniFile.ReadString(Section, 'IDSeekRange', EmptyStr); FExtension:= TrimQuotes(IniFile.ReadString(Section, 'Extension', EmptyStr)); FStart:= TrimQuotes(IniFile.ReadString(Section, 'Start', EmptyStr)); FEnd:= TrimQuotes(IniFile.ReadString(Section, 'End', EmptyStr)); for J:= 0 to 50 do begin Format:= TrimQuotes(IniFile.ReadString(Section, 'Format' + IntToStr(J), EmptyStr)); if Format <> EmptyStr then FFormat.Add(Format) else Break; end; FList:= TrimQuotes(IniFile.ReadString(Section, 'List', EmptyStr)); FExtract:= TrimQuotes(IniFile.ReadString(Section, 'Extract', EmptyStr)); FExtractWithoutPath:= TrimQuotes(IniFile.ReadString(Section, 'ExtractWithoutPath', EmptyStr)); FTest:= TrimQuotes(IniFile.ReadString(Section, 'Test', EmptyStr)); FDelete:= TrimQuotes(IniFile.ReadString(Section, 'Delete', EmptyStr)); FAdd:= TrimQuotes(IniFile.ReadString(Section, 'Add', EmptyStr)); FAddSelfExtract:= TrimQuotes(IniFile.ReadString(Section, 'AddSelfExtract', EmptyStr)); FPasswordQuery:= IniFile.ReadString(Section, 'PasswordQuery', EmptyStr); // optional FFormMode:= IniFile.ReadInteger(Section, 'FormMode', 0); FEnabled:= IniFile.ReadBool(Section, 'Enabled', True); FOutput:= IniFile.ReadBool(Section, 'Output', False); FDebug:= IniFile.ReadBool(Section, 'Debug', False); end; FList.AddObject(Section, MultiArcItem); end; if FirstTime then AutoConfigure; finally FreeThenNil(IniFile); FreeThenNil(Sections); end; end; procedure TMultiArcList.SaveToFile(const FileName: String); var I, J: Integer; IniFile: TIniFileEx; Section: String; MultiArcItem: TMultiArcItem; begin IniFile:= TIniFileEx.Create(FileName, fmOpenWrite); try for I:= 0 to FList.Count - 1 do begin Section:= FList.Strings[I]; MultiArcItem:= TMultiArcItem(FList.Objects[I]); with MultiArcItem do begin IniFile.WriteString(Section, 'Archiver', FArchiver); IniFile.WriteString(Section, 'Description', FDescription); IniFile.WriteString(Section, 'ID', FID); IniFile.WriteString(Section, 'IDPos', FIDPos); IniFile.WriteString(Section, 'IDSeekRange', FIDSeekRange); IniFile.WriteString(Section, 'Extension', FExtension); IniFile.WriteString(Section, 'Start', FStart); IniFile.WriteString(Section, 'End', FEnd); for J:= 0 to FFormat.Count - 1 do begin IniFile.WriteString(Section, 'Format' + IntToStr(J), FFormat[J]); end; IniFile.WriteString(Section, 'List', FList); IniFile.WriteString(Section, 'Extract', FExtract); IniFile.WriteString(Section, 'ExtractWithoutPath', FExtractWithoutPath); IniFile.WriteString(Section, 'Test', FTest); IniFile.WriteString(Section, 'Delete', FDelete); IniFile.WriteString(Section, 'Add', FAdd); IniFile.WriteString(Section, 'AddSelfExtract', FAddSelfExtract); IniFile.WriteString(Section, 'PasswordQuery', FPasswordQuery); // optional IniFile.WriteInteger(Section, 'FormMode', FFormMode); IniFile.WriteBool(Section, 'Enabled', FEnabled); IniFile.WriteBool(Section, 'Output', FOutput); IniFile.WriteBool(Section, 'Debug', FDebug); end; end; IniFile.WriteBool('MultiArc', 'FirstTime', False); IniFile.UpdateFile; finally IniFile.Free; end; end; function TMultiArcList.Add(const S: String; aMultiArcItem: TMultiArcItem): Integer; begin Result := FList.AddObject(S, aMultiArcItem); end; procedure TMultiArcList.Delete(Index: Integer); begin Items[Index].Free; FList.Delete(Index); end; { TMultiArcItem } function TMultiArcItem.GetSignatureSeekRange: AnsiString; begin if FSignatureSeekRange = SignSeekRange then Result:= EmptyStr else Result:= IntToStr(FSignatureSeekRange); end; procedure TMultiArcItem.SetSignature(const AValue: AnsiString); var I: Integer; Sign: AnsiString; Value: AnsiString; Signature: PSignature; begin FSignature:= AValue; FSignatureList.Clean; if AValue = EmptyStr then Exit; Value:= AValue; repeat I:= 0; New(Signature); Sign:= Trim(Copy2SymbDel(Value, ',')); try while (Sign <> EmptyStr) and (I < MaxSignSize) do begin Signature^.Value[I]:= StrToInt('$' + Copy2SymbDel(Sign, #32)); Inc(I); end; Signature^.Size:= I; FSignatureList.Add(Signature); except Dispose(Signature); end; until Value = EmptyStr; end; procedure TMultiArcItem.SetSignaturePosition(const AValue: AnsiString); var SignPos, Value: AnsiString; SignaturePosition: PSignaturePosition; begin FSignaturePosition:= AValue; FSignaturePositionList.Clean; if AValue = EmptyStr then Exit; Value:= StringReplace(AValue, '0x', '$', [rfReplaceAll]); repeat SignPos:= Trim(Copy2SymbDel(Value, ',')); if SignPos = '<SeekID>' then FSeekAfterSignPos:= True else try New(SignaturePosition); SignaturePosition^.Value:= StrToInt(SignPos); SignaturePosition^.Sign:= not (SignaturePosition^.Value < 0); SignaturePosition^.Value:= abs(SignaturePosition^.Value); FSignaturePositionList.Add(SignaturePosition); except Dispose(SignaturePosition); end; until Value = EmptyStr; end; procedure TMultiArcItem.SetSignatureSeekRange(const AValue: AnsiString); begin if not TryStrToInt(AValue, FSignatureSeekRange) then FSignatureSeekRange:= SignSeekRange; end; constructor TMultiArcItem.Create; begin FSignatureList:= TSignatureList.Create; FSignaturePositionList:= TSignaturePositionList.Create; FFormat:= TStringList.Create; end; destructor TMultiArcItem.Destroy; begin FreeThenNil(FSignatureList); FreeThenNil(FSignaturePositionList); FreeThenNil(FFormat); inherited Destroy; end; function TMultiArcItem.CanYouHandleThisFile(const FileName: String): Boolean; var FileMapRec : TFileMapRec; hFile: THandle; I, J: LongInt; lpBuffer: PByte = nil; Origin: LongInt; dwMaxSignSize: LongWord = 0; dwReaded: LongWord; dwOffset: LongWord = 0; begin Result:= False; hFile:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); if hFile <> feInvalidHandle then begin // Determine maximum signature size for J:= 0 to FSignatureList.Count - 1 do dwMaxSignSize := Max(FSignatureList[J]^.Size, dwMaxSignSize); { if (FSkipSfxPart) then dwOffset := FSfxOffset } lpBuffer:= GetMem(dwMaxSignSize); if Assigned(lpBuffer) then try // Try to determine by IDPOS for I:= 0 to FSignaturePositionList.Count - 1 do begin case FSignaturePositionList[I]^.Sign of True: Origin:= fsFromBeginning; False: Origin:= fsFromEnd; end; if (FileSeek(hFile, dwOffset + FSignaturePositionList[I]^.Value, Origin) <> -1) then begin dwReaded:= FileRead(hFile, lpBuffer^, dwMaxSignSize); if (dwReaded = dwMaxSignSize) then begin for J := 0 to FSignatureList.Count - 1 do begin if(CompareByte(lpBuffer^, FSignatureList[J]^.Value, FSignatureList[J]^.Size) = 0) then Exit(True); end; end; end; end; finally FreeMem(lpBuffer); FileClose(hFile); end; // if Assigned(lpBuffer) end; // Try raw seek id if (Result = False) and FSeekAfterSignPos then begin FillByte(FileMapRec, SizeOf(FileMapRec), 0); if MapFile(FileName, FileMapRec) then try dwOffset:= Min(FSignatureSeekRange, FileMapRec.FileSize); for I:= 0 to dwOffset do begin for J:= 0 to FSignatureList.Count - 1 do begin if(CompareByte((FileMapRec.MappedFile + I)^, FSignatureList[J]^.Value, FSignatureList[J]^.Size) = 0) then Exit(True); end; end; finally UnMapFile(FileMapRec); end; end; end; { TSignatureList } function TSignatureList.GetSignature(Index: Integer): PSignature; begin Result:= PSignature(Get(Index)); end; destructor TSignatureList.Destroy; begin Clean; inherited Destroy; end; procedure TSignatureList.Clean; var I: Integer; begin for I:= Count - 1 downto 0 do begin Dispose(Items[I]); Delete(I); end; end; { TSignaturePositionList } function TSignaturePositionList.GetSignaturePosition(Index: Integer): PSignaturePosition; begin Result:= PSignaturePosition(Get(Index)); end; destructor TSignaturePositionList.Destroy; begin Clean; inherited Destroy; end; procedure TSignaturePositionList.Clean; var I: Integer; begin for I:= Count - 1 downto 0 do begin Dispose(Items[I]); Delete(I); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fopenwith.lfm�������������������������������������������������������������������0000755�0001750�0000144�00000017071�12462741455�016032� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmOpenWith: TfrmOpenWith Left = 421 Height = 474 Top = 126 Width = 410 Caption = 'Choose an application' ClientHeight = 474 ClientWidth = 410 OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy LCLVersion = '1.2.4.0' object lblMimeType: TLabel Left = 6 Height = 17 Top = 6 Width = 404 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'File type to be opened: %s' ParentColor = False end object pnlOpenWith: TPanel Left = 0 Height = 39 Top = 341 Width = 410 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 39 ClientWidth = 410 Color = clForm Enabled = False ParentColor = False TabOrder = 0 object fneCommand: TFileNameEdit AnchorSideLeft.Control = pnlOpenWith AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCommands AnchorSideBottom.Side = asrBottom Left = 6 Height = 27 Top = 7 Width = 354 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 MaxLength = 0 TabOrder = 0 end object btnCommands: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneCommand AnchorSideRight.Control = pnlOpenWith AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 384 Height = 27 Top = 7 Width = 20 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Left = 24 BorderSpacing.Right = 6 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCommandsClick PopupMenu = pmFieldCodes end end object ButtonPanel: TButtonPanel Left = 6 Height = 40 Top = 428 Width = 398 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True OKButton.OnClick = OKButtonClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True CancelButton.OnClick = CancelButtonClick TabOrder = 1 ShowButtons = [pbOK, pbCancel] end object tvApplications: TTreeView Left = 0 Height = 252 Top = 29 Width = 410 Align = alClient BorderSpacing.Top = 6 Images = ImageList ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 2 OnDeletion = tvApplicationsDeletion OnSelectionChanged = tvApplicationsSelectionChanged Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end object chkUseAsDefault: TCheckBox AnchorSideTop.Side = asrBottom Left = 6 Height = 21 Top = 401 Width = 404 Align = alBottom BorderSpacing.Left = 6 Caption = 'Set selected application as default action' Enabled = False TabOrder = 3 end object chkCustomCommand: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 21 Top = 320 Width = 398 Align = alBottom Anchors = [akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = 'Custom command' OnChange = chkCustomCommandChange TabOrder = 4 end object chkSaveAssociation: TCheckBox Left = 6 Height = 21 Top = 380 Width = 404 Align = alBottom BorderSpacing.Left = 6 Caption = 'Save association' OnChange = chkSaveAssociationChange TabOrder = 5 end object pnlFilter: TPanel Left = 0 Height = 39 Top = 281 Width = 410 Align = alBottom AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ClientHeight = 39 ClientWidth = 410 Color = clForm ParentColor = False TabOrder = 6 object tfeApplications: TTreeFilterEdit AnchorSideLeft.Control = pnlFilter AnchorSideTop.Control = pnlFilter AnchorSideRight.Side = asrBottom Left = 6 Height = 27 Top = 6 Width = 375 ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 MaxLength = 0 TabOrder = 0 FilteredTreeview = tvApplications end end object ImageList: TImageList left = 208 top = 136 end object pmFieldCodes: TPopupMenu left = 123 top = 135 object miSingleFileName: TMenuItem Caption = 'Single file name' Hint = '%f' OnClick = miFieldCodeClick end object miListOfFiles: TMenuItem Caption = 'Multiple file names' Hint = '%F' OnClick = miFieldCodeClick end object miSingleURL: TMenuItem Caption = 'Single URI' Hint = '%u' OnClick = miFieldCodeClick end object miListOfURLs: TMenuItem Caption = 'Multiple URIs' Hint = '%U' OnClick = miFieldCodeClick end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/flinker.lfm���������������������������������������������������������������������0000644�0001750�0000144�00000012135�12567136531�015451� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmLinker: TfrmLinker Left = 411 Height = 425 Top = 166 Width = 397 HorzScrollBar.Page = 359 HorzScrollBar.Range = 289 VertScrollBar.Page = 363 VertScrollBar.Range = 331 ActiveControl = edSave BorderIcons = [biSystemMenu, biMaximize] Caption = 'Linker' ClientHeight = 425 ClientWidth = 397 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width' inherited pnlContent: TPanel Height = 371 Width = 381 ClientHeight = 371 ClientWidth = 381 object gbSaveTo: TGroupBox[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = lstFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 76 Top = 290 Width = 381 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Save to...' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 56 ClientWidth = 377 TabOrder = 1 object lblFileName: TLabel AnchorSideLeft.Control = gbSaveTo AnchorSideTop.Control = gbSaveTo Left = 6 Height = 15 Top = 6 Width = 51 Caption = '&File name' FocusControl = edSave ParentColor = False end object edSave: TEdit AnchorSideLeft.Control = gbSaveTo AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSave Left = 6 Height = 23 Top = 27 Width = 334 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 TabOrder = 0 end object btnSave: TButton AnchorSideTop.Control = edSave AnchorSideRight.Control = gbSaveTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edSave AnchorSideBottom.Side = asrBottom Left = 346 Height = 23 Top = 27 Width = 25 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSaveClick TabOrder = 1 end end object grbxControl: TGroupBox[1] AnchorSideTop.Control = lstFile AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lstFile AnchorSideBottom.Side = asrBottom Left = 281 Height = 284 Top = 0 Width = 100 Anchors = [akTop, akRight, akBottom] Caption = 'Item' ClientHeight = 264 ClientWidth = 96 TabOrder = 2 object spbtnUp: TButton AnchorSideLeft.Control = grbxControl AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Up' Top = 1 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = '&Up' OnClick = spbtnUpClick ParentShowHint = False TabOrder = 0 end object spbtnDown: TButton AnchorSideLeft.Control = grbxControl AnchorSideTop.Control = spbtnUp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Down' Top = 39 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 6 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = 'Do&wn' OnClick = spbtnDownClick ParentShowHint = False TabOrder = 1 end object spbtnRem: TButton AnchorSideLeft.Control = grbxControl AnchorSideTop.Control = spbtnDown AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grbxControl AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Hint = 'Delete' Top = 77 Width = 88 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 6 BorderSpacing.Right = 4 BorderSpacing.InnerBorder = 4 Caption = '&Remove' OnClick = spbtnRemClick ParentShowHint = False TabOrder = 2 end end object lstFile: TListBox[2] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideRight.Control = grbxControl Left = 0 Height = 284 Top = 0 Width = 275 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ItemHeight = 0 ScrollWidth = 240 TabOrder = 0 end end inherited pnlButtons: TPanel Top = 383 Width = 381 ClientWidth = 381 inherited btnCancel: TBitBtn Left = 199 end inherited btnOK: TBitBtn Left = 293 end end object dlgSaveAll: TSaveDialog[3] Filter = 'All files|*.*' FilterIndex = 0 left = 288 top = 160 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fextractdlg.lrt�����������������������������������������������������������������0000644�0001750�0000144�00000000772�12616371371�016353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMEXTRACTDLG.CAPTION=Unpack files TFRMEXTRACTDLG.LBLFILEMASK.CAPTION=&Extract files matching file mask: TFRMEXTRACTDLG.LBLPASSWORD.CAPTION=&Password for encrypted files: TFRMEXTRACTDLG.LBLEXTRACTTO.CAPTION=To the &directory: TFRMEXTRACTDLG.CBFILEMASK.TEXT=*.* TFRMEXTRACTDLG.CBINSEPARATEFOLDER.CAPTION=Unpack each archive to a &separate subdir (name of the archive) TFRMEXTRACTDLG.CBEXTRACTPATH.CAPTION=&Unpack path names if stored with files TFRMEXTRACTDLG.CBOVERWRITE.CAPTION=O&verwrite existing files ������doublecmd-0.7.1/src/doublecmd.exe.manifest����������������������������������������������������������0000644�0001750�0000144�00000002775�12562710227�017571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApp" type="win32"/> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3"> <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> <dpiAware>true</dpiAware> </asmv3:windowsSettings> </asmv3:application> <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> <application> <!-- Windows Vista --> <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> <!-- Windows 7 --> <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/> <!-- Windows 8 --> <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/> <!-- Windows 8.1 --> <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/> <!-- Windows 10 --> <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> </application> </compatibility> </assembly>���doublecmd-0.7.1/src/doublecmd.ico�������������������������������������������������������������������0000644�0001750�0000144�00001322626�12474406374�015765� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �h��f��� ��� �����00��� �%��v��@@��� �(B��;����� �(�F}������� �( �n�(������ ���� �����������������������������Q~XnrOmpOlmOkkOjhOifOgdOsmW|gzr`{m> Ok&S#K F?94.(#   YO{Җ/R>94-'"DNЫIc84-'"Zj?X4- "]bhh֚4Kr,X7\ --2E�+-ã6mWz>bm'A,ao34ģ6mido\m!:)",+2XXģ6mhf~vYlT^U]SYklģ6mheYo\o_iRZQWkkĘ/fh]r]ocqzHN`_ܜg{_t]oZivg`v_t]o[kXfoynv_zb{av_t\o[kXfVbOYw} qfjhfzdxcsap_l\fV`U\jlR����$|*{*{*z*y*y*x*x*w*w*v*����������������������������������������������������(��� ���@���� �������������������������������������    ��������������������SbElXBsYCtXAuV?sV>rU>qT=pT<pT;nS;nS:mS:mS8kR9kR8jR7jQ6iS8jQ2bQ2bQ2aP1aS5cʉr+��������Rc>f1],X+T*Q(N&K$H#E"B!@=9631.+'%"E5:����"Tk,Z'T"O"K!IEC@=:641.+(% "     E0uN9]BEC@=:641.+(% "   � CKXXs@@=:641.+(% " pwX@=:641.+(% " -;X@:641.+(% VbK:641.+( $.?uBm4a.ZXt641.+( !% "sKu;f1\'S'P"@41.+'s~Ya�   �s_Iq<e2[+T I01.+&`g  smcPtBh6].U2V92/*'; smjh]~NqAd7Z6N3/)juDN     "&smiigfa~SrK`!;7.&  #69smiigffegx8P2J)?*8)5,6095==DDHY\smiigffdy\pXkQcQ\PZR[S[SZRWPT^asmiigffeq]q]oYkeoT^S\S[RXRWOT^asmiigffgau]q]oZls~NYS\S[RXRWOT^asmiigfc[q]q]o[mZis{S\S[RXRWOT^asmiigah{^t]q]o[m[j^fQYRXRWOT^anjee_t_t]q]o[m\kbp]bKQJOY[ӹ<ϵbw_t_t]q]o[m\kYhvԳYp`v_t_t]q]o[m\kZiXgXmay`w_t_t]q]o[m\kZiXgS`Xd~b|bz`w_t_t]q]o[m\kZiXgXeVc^hWlb}d~b|bz`w_t_t]q]o[m\kZiXgXeVcV`Q[kr����8gycdeffdd}b|bz`w_t_t]q]o[m\kZiXgXeVcWaU_S\RZOUKQIOUF ����}sggfedc}b|ay`w_t^t]q\n[m[jYiXgWdVbWaU_S\S[QWNSebt����B|hthtjtlultlskqjoinimhkgjfifgefdddbba\Z[XZW[Ve^v������������*7@@@@@@@@@@@@@@@@@@@@@;,������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���0���`���� ���������������������������������������������   �������������������������������� 2;GSH;9999999999999999ɿ9ɿ9ɿ9ɿ9:@Saddc]K9)��������������������?gVRCQFPEPEODNBNBMAL@L?K?K>K=K<J<J;~J:}I9|I9|I8zH8zH7zH6yH5xH5wG4vG4vG2tD,lD,lD,kC+jC*jD-lK3pgRv7������������ EwoQWOnCl9c6a4^4[3Y1X0V/T.Q-O,N,K*I*H)G(D'B&@%?%<#;"9"7!5 31/.,*(&'#+)(6%wq\> ��������#{{Md;j&U%R"O L IGEBA?=;86431/-*(&% # !   � � 'vd$���� GM_Cp)W$RLKJ!J!IFDCA><:86531.,*('%# !     ���� ,zM ԥڽuXv5ZFDEDCA><:86531.,*('%# !    �� (FMdix|Ѥ%LjCACA><:86531.,*('%# !   ?I#8X>@><:86531.,*('%# !  ,8#h}=><:86531.,*('%# !  ck#><:86531.,*('%# #8:86531.,*('%# #686531.,*('% iier[n46531.,*(' !XdX\?CAD[����Dp3a,[$S&QVs*F4531.,*( %!5?F���� l  Ox>i7c1\,W!N#Ns2531.,*( !jq�   � p ZGp?h8a1\-W'QGf~6O231.,* %/A^e�    � p iU{JqAi9b3[.V)QF}u -31.,*ztz   � p pe[~OtDk=c6\0W)P.R721/,*'!   p pjgaWyLoBg;`5Z(Nl:R01/-'5Gbi�   p pjihf`WxLnDe;]>^Xj031. &Vd+         p pjiihgeaZxQpAckz5963)q}'+p pjihhgfeec~[w$?)B&?$<1!)(() *#+&-*1/4?Dp pjihhgfefe`{9R=T9P6L*@%3.;0;2<5>9A=ECIHMKOVYp pjihhgfefe`zVkYlVhReI\DOLWNXPXQYRYRXRWQVOSW[p pjihhgfefea{Yo]q]p\nViP[V`T^T\S[SYRXRWQVOSW[p pjihhgfefcv~Zp]q]o\nWi_iT^T^S\S[SYRXRWQVOSW[p pjihhgfef`|j{\q]q]o\nYkmxOZT^S\S[SYRXRWQVOSW[p pjihhgffbsZp^r]q]o\n[lYi[eR\T\S[SYRXRWQVOSW[p pjihhgfcgYp^s]q]o\n\mUfR[R[S[SYRXRWQVOSW[p pjihhgbgfy^s^s]q]o\n[mZjerQZPXSZRXRWQVOSW[o pjihf`uZp_t^s]q]o\n[m\kVf]dKRPVQWQVOSW[u����Ύkdbbvbw_t_t^s]q]o\n[m\kZj_n^cJPHNHLRVsדɣv^t`t_t^s]q]o\n[m\k[kXgs~ýȽԇ"_v`v_t_t^s]q]o\n[m\k[kZiXg#`y`w`v_t_t^s]q]o\n[m\k[kZiYhYf#`yay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWd#xa{bzay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdUbqy#e~b|c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcT_Zd#k`|d}d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaU_PZ]fלqa`dee~d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaV`U_R\MVOWbhx|غԕ��������Tcgmacdefffee~d~c}azay`w`v_t_t^s]q]o\n[m\k[kZiYhYfWdVcWaV`U_T^T\S[PWMTKQGMNTPAE��������;{n{lfhgfeedd}c}b|azay`w`v_t_t]r\p\o[m[l[jZjYhXgXeWdVcVaV`U_T^S\S[RYPVMSX^d`{h)����j~w{|mfeeijjjihhgf~f}e|ezcxcwbvbubsar`q_o_m^l\kZgUaT`S_R]R\V_biryojwdĸP������������ ]ysolihjhigkhkhkgkfkfjejejcichbhbhah`g_g_g^g]f]f\e[eZdZdYcWaUaT`S`S`RbSeSo[V����������������'EžWbfffffffffffffffffffffffffffffffe_Q1���������������������������� �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(���@������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%+$'3888883& ���������������������������������������� ">Zpt|ws~ozozpzozpzpzpypzpypzpzpypzozozozpzozpzpzozpypzpzpyqzqzpzv{wxxwxxtxuX=(��������������������������������4ƼijNrA+h;.tHDHGGFFEECEBDAD@D?C>C>B=B<B;A;A:A9@9@7?7?6?5>4=4=3=3<2~<1}<1|;0{;/{;.z:-y:,y:+x9*w9*w9)v8(u8(t8's7'q7&r/Y+ RJ+c׫M! ���������������������������� 4I;{lyLn>g5^2\0Y.W.U-S,R+Q*P)M(L(J'H&G&E%D%C$B#@#?"=!< :8754310.-+*('&%#" #!43L:}U5cU!��������������������iIFj1]+W(T%P#N"L!I GFDCA@>=;:9765320.,*)'&% # "       �81O2eM���������������� <JE[1^-Y*V'S$Q#O!L I HGDCBA?=<:9765320.,*)'&% # "         0*)������������]KiRx1^.Z)V&R#P"M!K J IFDCB@?=;:965432/.+*)&&$ # "        "<#i@����`rͩkmiJn?e8`1X(P!JHFDCB@?=<:9755320.,*('&% # "    ! '%,<BOSLOPRVMħ{-���� q:^'N!HDCB@?<;98765320.+)('&% # "       8@~t���� Jg,ODBA?=<:9755220.,*)'&% " "      %0KTs���� <\%IA?=;9965522/-+*('&% " "    &FPt���� cy)L@=<:9765320.,*)'&% # "   +8t���� 2R?<99765220.,*)'&% # " $;Ht���� 8U=:9765320.,*)'%% # " !&IUs���� 5R;9655310.,*)'&% #"&IVs���� )G:765320.,*)'&% $$<Kq����ǩ衰q ?765320.,))'&%%+<ʹO�������� ;|l>k3a/]3\Qo}Ka965320-,*)'&&,wTX!õd��������?~pEp:f5b1]-Y)U2YTq/J6532/-,*('''EUw{,4   õh�������� =~oJs?i8d4^0[-W*U&Q.Usas75320-,*)'(4NU    ��ôf������������ >pRzFn?h8b4^/Z+V(S(Q,SZu.I5310.+*)(&N\2;    ��õg�������� >r\NuFo?i9b4^/Y+U)R'P,Rb{bs732/.,*)),}:C     �ôf�������� >sfZ~PvHoAh;c5^1Y-U*R'O2U|!>410.,*)(<MOX    �µg�������� =sle]TyKqEk>e8_3Z/V,R*ODd6O410.,**)frx}'    ´f�������� =slif`Y|QtImAg<a6\1W.S4WlVi230/-++0}6B      !´g�������� >tmihgd_~VxNqGj@d;_7Z1UKhr~430/-,,%:$1  &´g�������� =smjhghgb]}VvOoHjBd<^Gf%@631/-,3GX`"          ',³f�������� >tliighgfeb]|XvRpKkLjy3L;7532/DU=H15g�������� >tmjihhgeeddc_|\xZu|DZ'A$>";973Ud4A"#"####$$&!($)(,AEg�������� =tljigigffedddd~e}Wj3L/H-E*B*@$<er8D- .!-".$.$/'0)2,4/6398<=@SWg�������� >tliihigffeddd~d~f~cuD[@W=S:P9N3HtEP0<1>3=4>7@9B<D>FAHDJGLJNLO^bg�������� >tmjihihffeeedd~gj{WkShQeNbN`I\yWaEPGRHQIRJSLTMTNTNTOTOTOSNR_cg�������� >smjihihfffeeed~ii{^q\o[nZmZlXi{gpR\S]R\R[R[RZQXQWPVOUOTNSNR_bg�������� >tmjihiheefeeed~mex^q\o[n[m[m[kvv~U`T^R\R[RZRYQXQWPVOUPUOTOS`cg�������� >tljigihfffeeec~u^s^r\p[n[m[l[ljw\fU_S\S\S[SZRYRXQWPVPUNTOR`bg�������� >tmjhhhgffeeeeh]q^r\p\n\n[m\lcqiqU_S]S\S[SYRYRXQWPVPUOSOS`cf�������� >tliihigffeeeevu^s^r]p\o\n[m\l^n}XaS]R\S[SZRYRXQWPVPUOTNR_bg�������� >smjhhhhffeeeigz^s^r\o\o\n[m[l\kiqT^S]S[SZRXRXQWPVPUOTOS`cg�������� =smihghheeefhau^s^q]o[n[m[m[l\kgt]fS]S[RZRYRXPVOUOUOTOS`cg�������� >tmjihhgfffgxu_t^r^r]p\o\n[m[l[k[j[eT\SZRYRXQWPVPUOTOS`cg�������� =tlihghhffgbv_t^r]q]o\o\n[l[l[j[jmz]eS[SZRXQWOUOTNSNR_ch������������ >vmjihihhox`t_t^r]q]p\o\n[l[l[j[j[kkrV]SYRXQWPUOTOSaeo�������� =xmihefvcx`t_t^r^q\p[o[n[l[l[jZjYihuz}Z^NTNSNSOS`dq����W|ьj`u_t_t]q]q]o[n[m[l[l[jZjZjZjzy{b'���� vaw`u_t_s^r^r]p\o\n[m[l[jZjYiXh]lb���� by`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhYh`ms���� f|`x`w_u_t_t^r^r]p\o\m[m[l[jZiYiXhXgYfcos���� d|ay`w`v_t_t_t^r^r]p\o\n[m[k[jYjXiXhXgXeXecot���� yd}azay`w`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhXgXeXdWd^jt���� qd|b{azax`w_w_t_t_t^r^r]p\o\n[l[l[jZjYiXhXfXeWdWdVb\gpxt���� ygc}c|a{`yay`w_v_u_t_t^r^r]p\o\n[m[l[jYiYiXhXgXeXdWdVbVaWa^h}s���� tle~d~c}c|a{azay_w`v^t^s^s]r]r]p[n[mZlZkZiZjXiWgWfWeXdWcVbVaV`T_Xb_hovs���� |qhddd~d~c|c|a{ayay`w`v_u_s_s^q^q]p[o[n[m[k[jYjYiXgXfXeWcWdVbUaV`U_U_S]T]Zadkrw㿿f����5pponligfeedd~c}b|b|`{az`x`w`w_t_s_s^r^r]p\o\n[l[l[jZjYiXhXgXeXdWdWbVaV`T^U_S]S\S[SZT[V\W[X]Y]X[^cP<|_# ��������ûkio}hghhfffedd~d~c}b|b|a{ayax`v`v_t_t^s]r]q\p\o[n[mZlZiZjXiXhXgWeWdVcVbVaU`U_U_R\S\S[SZRYRXQVOUOTMQ]_Y>u; ������������M\Fxghhhfeeddee~d~c}c|a{azay`w`w_u_t_t^r^r]p\o\n[m[l[jZjYiXhXgXeXdWdWbVaU`T^T^R\R[RZRYRYRXQWQWOTejd[%���������������� .d[iggfffeed~d}c}b|b{azayax`v`v_t_s^s]q]q\o\n[m[lZkZiZiYhXgXgWeWdVcVbVaU`U_U_S]S\S[SZRYRXQVQVbfzt]@lF��������������������@dStfdccemoooonnmmlllkj~j}i|h{hzhygxgvgvfuetesdqdpcocn^jU`S^R]Q[PZQZPXZahnpdoSy\������������������������7`rZeWwnvwwvwuwuvtvtvsvsururuqtquqtptptotnsnsmsmrmrlrkrkqjqjqiqhqgpgpfpfpepeoeododocncmbmbmamal_gSY;id}S$ ��������������������������������2J\evvvwwwvwwwvwwwwwvwwvwwwwwwwwvwvvwwvwwvvwvvoaR7 ���������������������������������������� ������������������������������������������������������������������������������������������������������������������������?������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������(���������� ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������U=>1@D@D@D@D@D@D<D<D<D<D<D<D8D8D8D8D8D8D8D5D5D5D5D5D5D5D5D1D1D1D1D1D1D1D1D-D-D-D-D-D)D)D)D)D)D)D)D)D&D&D&D&D&D&D&D"D"D"D"D"D"D"D"DDDDDDDD|D|D |D |D |D xD xD xD tD tD tD tD tD qD qD qD qD qDqDmDmDmD m1 f��U�������������������������������������������������������������������������������������������������������������U CH C B B A@@??>>==<<;;::9988766554433221100//..-,,++**))((''&&%%$##""!!  ~~}| { z z y x w v v u t s r r q p o o n m lkkk jhG��������������������������������������������������������������������������������������������!CT!D!C B!D!E EEECCBB@@@@@?====;;:::888766544422210////---,++**))'''&%%$$$""!!                 wih h gR�������������������������������������������������������������������������������G!D!D!E HHGGFFEDDCCBAA@@?>>==<;;::98877655443321100/..--,++**)((''&% % $ $ # " " ! !            j g f�i��������������������������������������������������������������������"D-!E!E"HIII!K#M$M$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                  f f c,������������������������������������������������������������#F"F"E IJJ#N&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                   e d d����������������������������������������������������F !F"E!IJ!M&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                    d d��f ������������������������������������������������!F"F"JK"N'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                     d c��������������������������������������������$I"F"HK M'R'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                     o d b����������������������������������������"F"G LK%S'S'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      c a�������������������������������������U#G#IL"O'T'S'R&R&Q&P%P%O%N$N$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      m b���������������������������������!G=#F!JK%Q&S&R&Q%Q%P&O%O%N%M$M$M$L#K#K"J"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      a \:����������������������������� C~!DHI&O%O%N%M$M$M$L#L#L$K#L#K#K"J#J"I"I"I!H!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                      ^[{���������������������������� @ @DE#I"I"I"H!H!G"G!G!G"G!G!G"G!G"H!H!H"H!G!G!G F E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                    XU��� �������������������������><?? CCBBBA@AAAABBB DD D F F F!F E E EDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!                   ~~}|{SR����������������������o򬮲dwIa,H=>??ABC DDD DDCCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!            7=V[sw򦦦j���������������uwKb!?<=>?AACCBCBAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!             <Csxp���������������vWl=:<=?@ABAAA@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!           IQp���������������v8Q8:<=?@@@@?>>=<<;::98876654432110//.--,++*))(''&%$$#""!          )3p���������������v:Q79;=>???>>=<<;::98876654432110//.--,++*))(''&%$$#""!        +5p���������������v;R79;=>>>>=<<;::98876654432110//.--,++*))(''&%$$#""!       /9p���������������vv:69;<=>=<<;::98876654432110//.--,++*))(''&%$$#""!      ntp���������������vUg579;<<<<;::98876654432110//.--,++*))(''&%$$#""!     MVp���������������v|657:;;<;::98876654432110//.--,++*))(''&%$$#""!    {p���������������v.E369:;;::98876654432110//.--,++*))(''&%$$#""    ".p���������������vPb357::::98876654432110//.--,++*))(''&%$$#"!   ISp���������������vZk24799:98876654432110//.--,++*))(''&%$$#! !   T]p���������������vhw1468998876654432110//.--,++*))(''&%$$" !   bjp���������������v~136888876654432110//.--,++*))(''&%$$"   zp���������������vds03678876654432110//.--,++*))(''&%$#!  _hp���������������uWf0357876654432110//.--,++*))(''&%#"  Q[p���������������e媭GY035776654432110//.--,++*))(''&$" CN䭭`���������������������?<?A D D C CBA!B7TQht'>13666654432110//.--,++*))(''&#! !/gk>D!'   ~XU��� ������������������������� B BEG$K#K#J#I"I"G!F ECA?'E^r/1456654432110//.--,++*))(''%"  NS         ^ Z�����������������������������)L"FJ!M&P%P%O%N$N$M$L#K"I"G EC@=2Nu.245654432110//.--,++*))('&$! s{|%          c ^������������������������������.Q&I,V#O(S'S'R'Q&Q&P%O$N$M$K"J"H!EB@=.J6J/24554432110//.--,++*))('%# 2?#        f `�������������������������������.Q'JNs>e*U'T'S'R&R&Q&P%P%N%M#M#K#I!G EB>;G^.02554432110//.--,++*))(&$!6>        g b��������������������������������.Q'JNsRuOs0['S'R&R&Q&P%P%O%N$N$M$K"J"I FC@<&BVf.1444432110//.--,++*))(%# U_        g b��������������������������������.Q'JNsRuVxTx?f(S&R&Q&P%P%O%N$N$M$L#K#J!I!F DA<9fw6/244432110//.--,++*))'$"(X_        g b��������������������������������.Q'JNsRuVxUxUwKn/Y&Q&P%P%O%N$N$M$L#K#K"J"H!GDA>9arjw-033432110//.--,++*))&# hqT[        g b��������������������������������.Q'JNsRuVxUxUwUwSv?e(Q%P%O%N$N$M$L#K#K"J"I"H G DA=9Vi1/13432110//.--,++*)(%"'GN        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvOq3[%O%N$N$M$L#K#K"J"I"I!H F DA<8k{cq-02332110//.--,++*)'$ cmah        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuFj+S$N$M$L#K#K"J"I"I!H!G!FD@<7-.1332110//.--,++*(&#"v{        g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStRs>c'P$L#K#K"J"I"I!H!G!G EB?::HX-0232110//.--,++*(%"EQ           g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsNo7[$L#K"J"I"I!H!G!G FDB>8/G+.222110//.--,++)'$!*           g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrKk1V"J"I"I!H!G!G F ED@;7t1-122110//.--,++)&#*ho            g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqFg,R"I!H!G!G F E DB>:8Zi,012110//.--,++)%"\g              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpEf.S!G!G F E EC@<7br+.12110//.--,+*(%!T\              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoFe/S F E ECA>97+-02110//.--,+*($"              g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnGg1T!FDB@;6o}3F,/2110//.--,+*'#2Adk               g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlLi7X$FA=8-Edq,/2110//.--,+*&"eo*               g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMi:Z'H94+.2110//.--,+)&"                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMjKf@Z+Fq*.2110//.--,*)%!gn                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLgHaBY]n*.2110//.--,*)%!2=                g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLhIbD[>S#8-2110//.--,*($#3                 g b��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMhJdE]>T>P-2110//.--,*($=J                  gh��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKdE]?UIY-2110//.--,*($HU               #)387< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeF^?VTc-2110//.--,*'#S_v}          $)/7=8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@Vp{,A(B820//.--,*'#\gmt          !#,/77?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@V}?RG]G]EZ;Q1H(@!92-,*'#gqck           (&0.87@:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@V}?RG]G]G]G\G[G[FZFYDX=P3H+>!3mvck      $'-%1*50<8B<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeG_@Vv?RG]G]G]G\G[G[FZFYFYDXCU?P9Is|{+70=6D:F;H>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKeF_?Vp|?RG]G]G]G\G[G[FZFYFYDXCU?Q9Imu4?9E=I?J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMiKdF^?Uiv?SG]G]G]G\G[G[FZFYFYEYCV@Q:Jfp3?8D<I>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkMhJdE]>Tbp@SG]G]G]G\G[G[FZFYFYEYCV@Q:J]h3>8C<H>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLhIbD[?TK[@SG]G]G]G\G[G[FZFYFYEYDV@R;KHU4?7B;G>J>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkLgHaBYbr;M@TG]G]G]G\G[G[FZFYFYEYDWAS;L7FPY6A:F=I>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMjKfF_AW:MAUG]G]G]G\G[G[FZFYFYEYDWBT<M7E|4?9E=H>I>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkMiJdE]?U;NBVG]G]G]G\G[G[FZFYFYEYDWBU=N8F3=8C<G=I>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMjLhHbCZWi<PBVG]G]G]G\G[G[FZFYFYEYDWCU>O9HDN6A:E<H>I>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlMjKfF_AW_m>QCWG]G]G]G\G[G[FZFYFYEYEXCV?Q:J]g4?9C;G=I>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlLhHcD\AV=N?SDYG]G]G]G\G[G[FZFYFYEYEXDV@R;K8F4?7A:E=H>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlMkKfFaAX;N@UEZG]G]G]G\G[G[FZFYFYEYEXDWAS=M7Ftz4>8C;G=I=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlNkLiHcC\EZ<PBWF[G]G]G]G\G[G[FZFYFYEYEXDWBT>N9H6@5@:E<H=H=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlMjJfE_@XIY>RCYF\G]G]G]G\G[G[FZFYFYEYEXEXBU?P;JHU3=7B;F<H=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmNjLgGbBZ^p<N@UE[G]G]G]G]G\G[G[FZFYFYEYEXEXCVAR<L7FIR4>8C:F<G<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnNlLhHcC]@W>QBWF\G]G]G]G]G\G[G[FZFYFYEYEXEXCVBS>O8I|5>5@8C;E;G<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnOmMjIdE^?X>R@TCYG]H^G]G]G]G\G[G[FZFYFYEYEXEXDWCT@Q:K;I2<5@9C:F;F<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoOmMkIeE_AY=QBWE[G^H^G]G]G]G\G[G[FZFYFYEYEXEXDWCUAR<N8Gv{2<6?8C:E;F<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpOmMjJfE`AYEV?TDYF\H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVBT>P:IANou2;5?8B:D;F<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqRqQpPoOnMjIeF`@Y<PBWF[G^H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVCU@R<L7Fot1;4>7A9D;E<D;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsRrRqQpPnNlLiHeE^AYL\?TDZG]G^H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVCUAT>O:IER094=6@8B:C:D;C;C:C:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStSsRsRsQqQoOmMjKgGcC]Ka>QBWF]H_H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVBU@Q<L8F8@2<5>7@8A9B:B:B:C:B9B9A9@8?8?8?8>8>8=7<7<7< hj��������������������������������.Q'JNsRuVxUxUwUwTwTvTuSuStRrQrPqOnNkLiHdE`B[=Q@TD[G_H_H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVBUAS?O:I8Emr193;5>7?8@8A9B9A9A9A9@8?8?8?8>8>8=7<7<7< hj�������������������������������.Q'IMrQtUwTwTvTvSvSuSsQsQqPoNnMlKhIdFaC\`sq}>SCXF]H`I`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVBT@R=L8FjsKQ192:4;5=6?7?7@7?8?7>7>7>7=8>8=7<7<7< gj�����������������������������-O&HKnNpRsQsQrQrPrPpOoMmLkLiIfGdE`C\ex=PBWF\H_IaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUBS?O;J6CQW07182:4;4<5<5<5<5<6<6;6;6:59595: eg����������������������������+K$DFhIiMkLkLjLjJiJhIfHeGcE`C^Qi>S@UE[H^H`IaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUBTAQ>M9G9F<C/6071717171828272727161626 _b����������������������������(G!?A`C`FbEbEaEaD`D_HblZj?TCYG^I`IaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUBS@O<K8EU_|WZ16-3-3-2.3.2-1-1.2 Y]��� �������������������Ñ>SBYF]I`JaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTBQ>M;I7D~���������������ë=RAXE]H_IaJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTBR@P>M:H5Bš���������������ë=RBWE]H`IaJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSAQ@O=L9G5BÜ���������������ë=RAXE\G`IbJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRAQ@O<K8F5AŞ���������������ëATAWE]H`IbJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRAQ>N<J8E8BĠ���������������ë=RBXE]HaJbJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBR@P>N<I7D4@ģ���������������ë>TBXF]HaJcKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQ@P>M;H7D4@ƥ���������������ët?UBZF^IaJcKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQ@O=L;I8D4@nvɦ���������������ëL_@WD[G`IbKcKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP?N>L;H8E5AGQǨ���������������ë?UBYE]HaJdKeLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O?N>L;I9F6B3=Ǩ���������������ëWjAWD\G_IcKeKfLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O?M>L<J:F7B4?NUǨ���������������ëv?WC[F^IbJdKfLfLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?M>L=J;G8D6@2<ouǨ���������������ë?WBZE^HaJdLfLgMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N>L=J<H:E7A4>2;Ǩ���������������ëq@WB[D^GaIeLgMgMhMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?K>K=H:F8C6A3=1:fmǨ���������������ëH`AZC\E_HbIeKgLiMiNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?J=I<G:E7B6?3=1:;CǨ���������������ë`tB[C]E_GbHdJfLhLjMjNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J=I=I;F9D7B5?4=2;19SXǨ���������������ëZoB[D^D^FaHcIeJfLiMjMjNkNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=H<G:F9C8B6@5>4<2:1806JQ|Ǩ���������������������'D<?]@]D_C_D_D_C_D_D^C_D_E_EaFbGcHdJfJgLiMjMkNkOlNlOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<G;F;E:D9B8@6?5=4;2:1917/7.5.4-3-3-2-1-1,0,0,1,0 SX���������������������������� +J@BbFdKhJhJhJhIhJhJgJhJhKhKiLjMkNkOmNlOnPnOnPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<F;E;D9C9A8@6?6>5<3<3:391817171616150405,1 X^��� ��������������������������)J!DAdJlQqPqPpPpOpPpPoOoOoPoOoPpPpQoQpPoQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;D;C:B9B8A8@7@7>6=5<5<5<5;5:594849*. ]`������������������������������#FB"F:]LpRuSvSuTuSuStStRtRsRrQrRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:A9A9@8?7>7>7>7=7=7<6;6<" `]?��������������������������������U&I+PNrQtUxUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7=7=r c��������������������������������������%I"GCgNqTwUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>8=7>)/ c c����������������������������������������&D"#G-QNqOsUwUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8>7>7>u c f��������������������������������������������!F"F:]NqQsUwTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8?7>$ d c������������������������������������������������F "G#FAcNpPsTwTvTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8>8?'- e f��f ����������������������������������������������������#F#F"F<`NpNqRtTuSuStSsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A9@8?8?8?8?$* e e d������������������������������������������������������������"E%#E!E5WKnNpNpPrRsRsRsRsRrRqRqQpQpQpPoPnPnOmOlOlNlNkNkNjNiNiMhMhMgLgLfLeKeKeKdJdJcJbJbJaIaIaI`H_H_H^G]G]G]G\G[G[FZFYFYEYEXEXDWDVDVCVCUCUCTCSBRBRBRAQAQAP@O@O@N?N?N?M?L?L?K>J>J>J=I=H<H<G<G<G<F<E;E;D;C:C:C:B9B9A8A8@8?4<  f fc$�������������������������������������������������������������������� @!E!D$F:]HkMnMnLmLmLlLlKlKkKkKjJiJiJhJhJhJgJgIfIfIeIeHeHdHdHcGbGbGaGaGaG`G`F_F_F^F^E]E]E]E\D\D[DZCZCYCYCYCXCXCWCWBVBVBVBUAUATAS@S@R@R@R?Q?Q?P?P?O?O?N?N>N>M>M=L=K=K=J<J<J<I<I<H<H<G;G;G;F;F:E:D:D:C9C9C9B9B8A8A3:!) k g e�m������������������������������������������������������������������������������"C[!D!C C)K4U8Y<]=^=]=]=]=]=\=[=[=Z=Z;Y:X:X:X:X:W:V:U:U:U:U:T:S9R8R7R7R7R7Q7P7O7O7O7N7M6M5L5L5L4K4J4J4I4I4I4H4H3G3F3F3F2E2D2D1D1C1B1B1A0A0@0@/?/?/?/>/>/=.<.<.<-<-;,9,9,9,9,8,8,7,6,6+6*6*5*3*3*3)3)3&/!)#{ih h hX�������������������������������������������������������������������������������������������$I"AJ C B B A@@??>>==<<;;::9988766554433221100//..-,,++**))((''&&%%$##""!!  ~~}| { z z y x w v v u t s r r q p o o n m lkkk jiI��m�������������������������������������������������������������������������������������������������������������U=>1AK?U?U?U?U?U<U<U<U<U<U<U9U9U9U9U9U9U6U6U6U6U6U3U3U3U3U3U3U0U0U0U0U0U0U-U-U-U-U-U*U*U*U*U*U*U'U'U'U'U'U'U$U$U$U$U$U!U!U!U!U!U!UUUUU~U~U~U~U{U {U {U {U xU xU xU uU uU uU uU rU rU rU rU oU oU oU oU lU mK m1 f��U��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?������������������������������������������������������������������������������?��������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������?����������������������������������������������������������������������������?(���������� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$IC*BQ @o Ay B? ? ? ? ? ? ??>>>>>>><<<<::::::::9999999777755555555444444422220000000////////----+++++++********((((&&&&&&&%%%%%%%%####!!!!!!!            } } } { { { { { z z z z z x x v v v v v u u u u u s s s q q q q q p p p ppnnnll l mkylo lP g*��m������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!B6 Bx B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjji iw j5��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$I!B{!C C B B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjjiiiiz f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$@"C!D!C!C C B B B B A B!C D B B B B A A AA@@@@@@?>>>>=======<;;;::::9999888877776665444444433221110000000/....-------,,,,+***)))((((('''&&&&%%$$$$$$####""!                                            ~~}}xrljjjiihh i g h��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@@!Du!D!D!D!C!C C C EEFGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                   lihh h g g fs����������������������������������������������������������������������������������������������������������������������������������������������������������������������"D-!F!D!D!D!D!C!FGHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                    {i h g g f f e+������������������������������������������������������������������������������������������������������������������������������������������������������������#F_"E!E!D!D!D!GIHHHGGGGFFFEEEEDDDCCCBBBBAAA@@@????>>>===<<<<;;;::::999888777766655544443332221111000////...---,,,,+++***))))((('''&&&&%% % $ $ $ $ # # # " " " ! ! ! !                         h g f f f e[�������������������������������������������������������������������������������������������������������������������������������������������������!F"E"E!E!D!FHIIHHHGI!J"L$L#M$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                t f f f e e��������������������������������������������������������������������������������������������������������������������������������������33#E"E"E"E!E HJIIIHI"L$P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                    g f e e e��f������������������������������������������������������������������������������������������������������������������������������"F"F"E"E#FIJJII K#N&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                     j e e e e���������������������������������������������������������������������������������������������������������������������������"G"F"F"E"FJJJJJ#M&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                      l e e d e��������������������������������������������������������������������������������������������������������������������!E\"F"F"F"G JJJJ L%Q&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                       l e d d dW������������������������������������������������������������������������������������������������������������$I*"F"F"F"GKKJJ!M'Q&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        i d d ce&�����������������������������������������������������������������������������������������������������"H"F"F"F JKKJ!N'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         e d c c��������������������������������������������������������������������������������������������������"Gh"G"F"F"KKKK!M'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          d c c cd��������������������������������������������������������������������������������������������K$G"G"F"HLKK!M'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          o c c c�f����������������������������������������������������������������������������������������$H#G"G"F KLK K%R'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           d c c c|������������������������������������������������������������������������������������$I#G#G"G"ILLK#P'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           w c c b�b ��������������������������������������������������������������������������������#Ge#G#G"GKLL M'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                           c c b cb������������������������������������������������������������������������������#H#G#G"ILLL$P'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            r c b b������������������������������������������������������������������������"E%#F#F#F!KKK L(R'S'R'R'R'Q'Q&Q&P&P&P&O&O%O%N%N%N%M$M$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            b a a]!�����������������������������������������������������������������#Fm"F"F"FKKK#O'R&R&Q&Q&Q&P&P%P%O%O%O%N%N$N$N$N$N$M$M$M$L$L$L$K#K#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            b ` ` `h����������������������������������������������������������������"F"E"E"GJII%P&Q%Q%P%P%P&O&O%O%N%N%N%M%M$M$M$M$M$L#L#L#K#K#L#K#K#K#J#J#J#J"J"J"I"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            n _ _ _���������������������������������������������������������������"E"D!D HIHH&P&O%O%N%N%N%M%M$M$M$M$M$L$L#L#K#K#L#K#K#K#J#K#K#J"J"K"J"J"J#I"I"I"H"I"I"H!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                          ] ^ ^�����������������������������������������������������������1v!D!C!BFGFH%N%M$M$L$L$L$K$K#K#J#J#J#J#J"J"I"I#J#I"I"I"I"I"I"I"I"I"I"I"I"I!I!I"H"H"H"G!H!H!G!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         [ \ \��7�������������������������������������������������������� :B!C A AEED H#K#J"J"I#J#J#I#I"I"H"H"H"H"H!H!G!G"H"G!G!H!G!G!H"G!G!H!G!G!H"G!H!H!G!H!H!G!G!G!F!G!G F F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                         Y Z[N>��� �������������������������������������������������� ���;c B@?CCA F"I"H!G!G!G!G!F!F F E E!F!E!E E D E E!E E E E E E!E E F E!F!F!F F!G!F!F!G!F G G F!F!F E F E E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                            V XYQ_��� ��� ���������������������������������������������� ���;q@>>A@?D!F!E E D D D C CDCCCB CCBBCBBCBCC CCDC D D DD E E E F!E E F E F F E E D E E DDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        X VWNo������ ������������������������������������������� ������:?==?>=B C CBABBAAA@@@@@@@@@@@@@@A@AAAABBBCCC D CDE D D EDED D D CDDCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                                        ~ } } }|||{{|{Y TUO~������ ����������������������������������������ƨ򫫫󭮰l~WmB\,J>=>>>>?>?@?@A@ABBBCCC DCDCDD CCCCCCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                              -4FK_cuy򨨨򥥥������������������������������������Ѫi|Ia%C=<===>>>?@@@AAABBBBCCCCCBBCBBBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                         7>\a������������������������������������Ѫ\p/K;;<<=>=>???@@AAABBBBBBBABBAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                       #MS|������������������������������������ Ѫp@X;:;;<==>>>??@A@ABABBAABAAA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                     .6ej������������������������������������ ѪOe;:::;<<==>???@@AAAAA@AA@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                    BI������������������������������������ ѪAX89::;;<==>???@@@A@@@@@@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   3;������������������������������������ ѪWk =899:;;<==>???@?@@??@???>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   RY������������������������������������ Ѫ6O7899:;;<==>?>?@??????>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                   )2������������������������������������ ѪH]77899:;<===>?>?????>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                  <E������������������������������������ ѪAW6778::;<<=>=>>>>?>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !                3=������������������������������������ ѪAX56889::;<<=>=>>>>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !              5?������������������������������������ Ѫ,F66788:;;<===>=>>===<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             (������������������������������������ Ѫo~ :567899:;<<=======<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             fm������������������������������������ ѪUi556779::;<<<=<==<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             LU������������������������������������ Ѫ)A466789:;;<<<<=<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !            &������������������������������������ Ѫ`q4457789:;;;<<<<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!! !             Ya������������������������������������ Ѫ":4557889::;<;<<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!!           !������������������������������������ ѪEZ34567899:;;;<;;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""!          >H������������������������������������ Ѫbr23556889::;;:;;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"""          Yb������������������������������������ Ѫ734567899::::;:::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###""!        !������������������������������������ Ѫ4J23557889:9:::::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###"!!        *6������������������������������������ Ѫ@S2335678999:9::99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$###!! !        6A������������������������������������ ѪUf223557889999:99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$##"! !       NW������������������������������������ Ѫu12345778989:99988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$#"" !      qx������������������������������������ Ѫn{1224567889999988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$$"""      pw������������������������������������ Ѫ212456778989988777666555444333222111000///...---,,,++***)))((('''&&&%%%$$#"" !      z������������������������������������ Ѫ21335667888988777666555444333222111000///...---,,,++***)))((('''&&&%%%$##"! !      ������������������������������������ Ѫ|0123556778888777666555444333222111000///...---,,,++***)))((('''&&&%%%$##!!     w~������������������������������������ Ѫu002345677878777666555444333222111000///...---,,,++***)))((('''&&&%%%##"!     rz������������������������������������ Ѫp~/1234567777777666555444333222111000///...---,,,++***)))((('''&&&%%$#""     nu������������������������������������ ѪTe/113456767777666555444333222111000///...---,,,++***)))((('''&&&%$$#"!    NY������������������������������������Ѫ>Q/02345667677666555444333222111000///...---,,,++***)))((('''&&&$$$"!!    :G������������������������������������Ѫ4I/0234556667666555444333222111000///...---,,,++***)))((('''&&&$$#"!   -:������������������������������������܋7/113446566666555444333222111000///...---,,,++***)))((('''&&%$##!   'ۮ��������������������������������������� ������;@=>@?>D D DDCCCBBBA@@?'GA\]rz/002345556666555444333222111000///...---,,,++***)))((('''&%%$#"   mqLP,2  ~ ~  ~ ~ ~~~~}}}}\ UVP������ ����������������������������������������������� ���< A?@BA@ F!G!F!F!E!E!E D D D CCCBAA@@??@[qjx./1234456566555444333222111000///...---,,,++***)))((('''&%%#""   jrdh,4            _ WWS������ ����������������������������������������������� ��� ? B @ADDB!I#J#I"I"H"H"H"G"G!G!F!F E D DCBBA@@?>=:UzDW./123345556555444333222111000///...---,,,++***)))((('''%%$#"!   ALlp$+                   a YYT��� ����������������������������������������������������� @!D!B CFFE"L$M$K#K#K#K#K#J#J"I"H"H"H"G"G!F E D D CBA@??=>Si6.012245556555444333222111000///...---,,,++***)))(((''&%$$"!  'CI                     d [[X��� ������������������������������������������������������,M!E!C!EHHG#N%O%N$N$M$M$M$L$L#L#K#K#J#I#I"H"H!G!F!E EDBBA?>=< ?fx-//1234455555444333222111000///...---,,,++***)))(((''&%$#!   W\                      g ] ][~���������������������������������������������������������3S"F"E"FJJI$P&Q&P%P%O%O%O%N%N$N$M$M$M$K$K#K"I"I"I"G!G F E DCBA@>=<=at[j./0123445555444333222111000///...---,,,++***)))((('&&$##!  ZdRX                     i _ ^\}����������������������������������������������������������5S"G"F'J!MKJ%R'S'Q&Q&P&P&P&O&O%O%N%N%N%M%M#M#L#K#K#I"I!H!G!F E DCB@?><;;^q'>-/013345455444333222111000///...---,,,++***)))(((&&%$#"  !/MT                    j ` _]|�����������������������������������������������������������5V#G#F*NFk(TK%S'T'S&S&R&R&R&Q&P%P%O%O%O%N%N$N$M$M$L$K"K"J"I"H!H!F EDBB@?><:*F-./02234445444333222111000///...---,,,++***)))(((&&%#"!  z~                  l a `_{�������������������������������������������������������������6Vą#H#G+NMrMq4\&S(T(S'S'R'R'R'Q'Q&Q&P&P&P&O&O$O$N$M$M$L#L#L#J"J"I"H!G F E DCA@><;:BYJ[-./1234445444333222111000///...---,,,++***)))(('&%%#"!  FR09                 l b a_{���������������������������������������������������������������6Vą#H#G+ONsNsNrJp/Z(T'T'S'S'S'R'R&R&Q&Q&Q&P&O%O%N%N%N%M#M#L#K#K#K#I!I!H!G!F E CBA>=<:9at4-.0123344444333222111000///...---,,,++***)))(('&%$"! 'SY                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxRv7`'T'S'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%M$M$M$L#L#K#K"J"J"H!G!G!EDCA?><;9BYt,./013344444333222111000///...---,,,++***)))(''%%$"  v~-6                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxFm+V'S'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$L$L$K"K"K"I"I"H!F FDCB@>=;9&B*>-./02234344333222111000///...---,,,++***)))(''%$#! '5                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxQu6_'S'R'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$K#K#K"J"J"I"H!G F DCB@?=;:8ct,-.01134344333222111000///...---,,,++***)))''&$#"  U\                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwEk*U'R&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#J#J"J"I!H!G!F E DB@?=;:8NcCT,-/0123334333222111000///...---,,,++***)))''&$#" AN>F                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwPs5]&R&Q&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#J#I!I!I!G!F E CBA?=<98E[,,.0013334333222111000///...---,,,++***))('&%#"!  7@                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwEj*T&Q&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"I"I!H!G!F!EDC@?>;:7;SFW,-/012233333222111000///...---,,,++***))('&%#"! ER,6                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwQs7_&Q&P&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"I"H!H!H!F EDBA?=;97-G,,./02233333222111000///...---,,,++***)((&%$"! '                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvHl-U&P%P%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"H"H!G F ECBA?=:97=TFV,-.01123233222111000///...---,,,++***)((&%$"! DQ.7                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvSt?d(R%O%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"H"G G F DCB@?<:96K`+,-/0123233222111000///...---,,,++***(('%%#! =G                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuMp3Z%O%O%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"G!G G E DDA@><:86]o4G,-.0012233222111000///...---,,,++***(('%$#! />KS                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStEi+T%N$N$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!G!G F E DCA?><976p+,./012223222111000///...---,,,++***(''%$" ci                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStQs:_%O$N$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!F F EDC@?=;976"8+-//12223222111000///...---,,,++**)('&$#" -                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsMo3Z$M$M$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!F FDDA@?<:96+Eiu+,..01122222111000///...---,,,++**)('&$#!gp&                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsEh,S$M$L#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!FEDCA@><:76K_*,-.01122222111000///...---,,,++*))'&%#"! =F                     m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRr?c)P#L#L#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G EECBA?=;975sBT+--/0112222111000///...---,,,++*))'&%#" ANgn                      m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsPp9^%M#K#K#K#J"J"J"I"I"I"H!H!H!G!G!G F EDCB@>=:868*,-.0012222111000///...---,,,++*))'&%#!                        m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrNo8\$L#K#J"J"J"I"I"I"H!H!H!G!G!G F E DDCA?>;:85L`-+,./012222111000///...---,,,++))(&%$"!#=G                         m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqKk3X#J"J"J"I"I"I"H!H!H!G!G!G F F D DCBA?<;964JY+,-//12222111000///...---,,,++))(&%$" HU                          m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqIi0U"J"I"I"I"H!H!H!G!G!G F F E DDBA@=<:75+D*+-./01222111000///...---,,,+*))(&%#! (                           m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpGi.S"I"I"H!H!H!G!G!G F F E E DCBA?=;865n},+,./01222111000///...---,,,+*)('%$#!$bj                             m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpHh1U"H!H!H!G!G!G F F E E D CBB?><976#=@Q*,-.01222111000///...---,,,+*)('%$# =J                             m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpGg-R!H!G!G!G F F E E E CCB@?=:874wv*+-./1222111000///...---,,,+*)('%$" vmt                               m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoFg/S!G!G F F E E E CCCA@>;975'@)+-./0222111000///...---,,,**)('$#" %                               m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnIh2U!G F E E E DCCA@?<:864|$9*,-/0222111000///...---,,,**('&$#!"3ry                                m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnGg3V#G E E DDCBA?=;975,ERa*,-/0222111000///...---,,,**('&$#!R]*                                m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmLi8Y$I DDCBA@><:753}*+,.0222111000///...---,,,**('&$"!}                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNl>])LCBBA>=;864aq)+,.0222111000///...---,,+*)('%#"!U]                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlFd1Q CA?=<975#;1+,./222111000///...---,,+*)(&%#")                                 m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjIf6U#C><:863<N*,./222111000///...---,,+*)'&%#!;I                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjLiKe;X'F:863Se`m*+-/222111000///...---,,+*)'&%"!_jFP                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMiLgJeHcB\0K<4&?*+-/222111000///...---,,+*)'&$"!#                                  m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMjLhKfIcG`E]BY4K$=*+-/222111000///...---,,+*)'&$"!                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhKfJdHaE]CZAV>S)+-/222111000///...---,++))'%$" tz                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhLgJeHbF^D[AW>Thw0+-.222111000///...---,++)(&%$"*BM                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgKeIbG_D\BX?TCX4G*,.222111000///...---,++)(&%$!4C                                   m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMiLhKfIcG`E]BY?U=RM]*,.222111000///...---,++)(&%#!LX                                    m b a`z����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfJcH`E]CY?V=Rer*,.222111000///...---,++)(&%#!fp                                    m b aj����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhLgJdHaF^CZ@V>Sw*,.222111000///...---,++)(&$#!xy                                    & p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHaF^DZ@W>Tz*,.222111000///...---,++)(&$#!Yb                                 %+5;7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHbF_D[AW>Tcs*,.222111000///...---,++)(&$#!;E                              !)06<7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgKdIbG_D[AX?TNa*,.222111000///...---,++)(&$#!".                           '.5;8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMiLhKdIbG`E[AX?TCX*,.222111000///...---,++)(%$#!#                      #*/68?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIbG`E\AX?U<R!61.222111000///...---,+*)'%$#!                    "%-2;8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>Q=Q9Q.G#=411000///...---,+*)'%$#                      "+-67?9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]?U5L,D$=5///...---,+*)'%$#                      )(21::B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\FZ=S5L-D%=6/--++*)'%$#                    #)&10:9B;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFY?T8M/E)@#92+%$#                     $*$1-85?;E<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q<M4D->(7             $&+"0&2-93?8D<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIcG`E\BY?U=R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q=M:J8H6D$')+#0'5*7-;/>4B7D;H>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjMiLhKeIbG`E\AX?U<R;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS?Q=M:K8H6D3>3?5A8C9E;G=H>I=J>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMiLhKdIbG`E[AX?UDY;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAS@Q=M:K8H6D<F3?5A7C9E;G<H>I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgKdIbG_D[AX?TQd;M>QATG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAT@Q=N;K9H6DEO3?5A7B9E;G<H=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHbF_D[AW>Tgw;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDWCVAT@Q=N;K9H6EW`3>5A7B9E;G<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiMhLgJdHaF^DZ@W>T;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCVAT@Q=N;K9H7Epw3>5@7B9D;G<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhLgJdHaF^CZ@V>S;M>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R=N;K9I7E2>4@6B8D:F<G=I=J>I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfJcH`E]CY?V=R<N>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R=N;L9I7E2=4?6A8D:F<G=H=J=I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkMiLhKfIcG`E]BY?U=Rp|<N>QAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBT@R>O;L9I7Flu2=4?6A8C:E;G=H=I=I>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgKeIbG_D\BX?TEZZh<N?RAUG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYDXDXCWBTAR>O<L:J7FWb7B3?5@7C9E;F<H<I=I>I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjMhLgJeHbF^D[AW>TrDU<O?RBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXCWBUAS>O<M:J8FBO\d3>5@7B9D;F<G<I=I>I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkMjLhKfJdHaF^C[AV>S9L<O?SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAS>P<M:J8G6D2>4?6B8D:E<G<H=I=I>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMjLhKfIdG`E]BY@U=R:L=O@SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAS?P=N:K8G6D2=4>6A8C:E;G<H=H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjMiLgJeIcG_D\BY?TG\:L=P@SBVG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDWCUAT?Q=N;K9G7E:D3>5@7B9D;F;H<H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkMjLiLgJeHbF^D[AW?T|:M=P@SBWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBT?Q=N;L9H7Efn3=5?7B8C:E;G<H=I>I>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjMjLhKfIdGaE]CZ@V>Rgu;M>P@TCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBT?Q>O<L9I7Fal2<4?6A8B:E:G<G=H=I>I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjMiLhJeHcG`D\BY?UJ]CT;N>Q@TCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYDXDXCVBU@R>O<M:I8F@N9C3>5@7B9D:F;G<H=I>I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlMjLiKgJdHbF_C[AW?T9L<O>QAUCWG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDVCU@R>P=M:J8G6Dqw3=4?6A8C9E;F<G=I=I>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlMkMiLhKfIcG`E^BY@V>S:L<O?RAUCXG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDVCUAS?Q=N;K9G7E2<4>6@8B8D:E;G<H=I>I=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlMkLiKgJfHbF_D\AX?UWi~:M=P?SBVDXG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDWCVAS?Q=N;K9H7EyFO3=5?7A8C9D;F<G=I=I=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlMkMjLhKfIdGaE^C[@V>TO_;M=Q@SBVDYG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYDXDWCVAS@R>O<L:I7FKX2=4>6@7B9D:E;G<H=I=I=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlNkMkLjKgJfHcF_D\BY?UK]9L<O>R@TBWDYG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDVBT@R>P<L:J8G5D<F3=5?6A8C9D;F<G=I<I=H=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlNkMjLiKfIdGbE^C[AX>T:L<O>RATCWEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDVBTAS?Q=M;K9G6E2<4>5@7B9D:E;G<H<I=H=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNkNkLiKhJeHcF`D\AY?VG[q}:M=P?SAUCXEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDWBUAS?Q>N;K9I6Flv8A3=4?6@8B9D;F<G<H<H=H=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlNkMjLiJgIdGaE^C[@W>T>O;N=Q@TBVDXEZG]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYDWDWBUAT@R>O<L:I7F;H2<3>5?7A8C:E;G;H<H=H=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlNkNjMiKhIfHbF`D]AY?VPc:M<O>R@UBWDYF[G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCUBT@R?O=M;J8G6E=G2=4>6@7B9D:F;G;G<H=H=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmNkNkMiLhJfHdFaE^B[@W>T;N<P?SAVCWEZF[G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCUBTAS?P=N;K8H6Ey1;3=5?6A8C:E:F;F<H<H=G=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmNlNkMjMiKgIeGbE_C\AY?UpBS<O=Q@TBVCXEZF\G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXDWCVBUAS@Q>N<L9I7F=L[b2;4>5@7B9D9E:F;G<H<G=G<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmNlMjMiLgJfHcFaD]AZ?WAX:M=P>R@UBWDYE[G\G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCUBT@Q>O=M:J8G6E3<2<4>6@7B8D9E:F;G<G=G<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnNlNkMiLhKfIdFaD^B[@X>Ut;N>Q?SAVCXEZF[G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCUBTAR?P=N:K8I6Fpz1;3=5?6A7C8D:E;F<F<G<G<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnOmNkMjLhKfIdHbE_C\AY?Vj{=N<O>R@TBWCYEZF\G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXCVCVBUAR@Q>O;L9I7G8EW^2;4>5?6A7B9D:E;E<F;G<F<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnOmOlMjLiKfJeHbF`C]AZ?VI^;M=P?S@UBXDZE[G\G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCUBS@Q?O<M:J8H6D;C2<4>5@6A7B9D:E;E;F;F<F<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoOmOlNkLiKhJeHcF`D^A[@X>UTd<N>Q@TAVCYE[F[G]G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCVBSAR?P=N;K9I7EOZ1;3<3>5?6A8C9C:E:F;E;F<F<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoOnOlNkMkKhJfHcGaD^C[@Y>V:N<O?RAUBWDYE[F\G]G]G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWCVCVBTAS@Q=O<M:J7F6D1;2=3>5@7A8B9C9E:E;E;F<F<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpPnOnOmNkMjLiJfHdGaE^C[AY>Vmz;O>Q@TBWCXDZF\G\G]H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWCVCTBSAR>P<N:K8H6Ekuhn1;2<4>5@7@8B8C9D:D;E;F<F<F<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpPoPnOmNlMjLiKgHdGaE^C[AY?Vo:M<P>RAUCXCYE[F\G]G]H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWCVCUBTAR?Q=O;L9I7F5DZa1:2<4>5?7@7B8C9D:D;E;F;F<E<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpPoPoOmNlMkLhKgIeGaE_C[AY@Wdu;N=Q?SBVDYDZE\G]G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCTBS?Q>P<M:J8G6EPX1;2<4=5?6@7A8B9C:D:E;F;E<E<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpPoPoPnOnNlMkLiJfIeHbE_C\AY@W\n=O<P>S@UBWDZE[F\G^G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCUBT@R?P=N;K9H7F7EKR1;2;4=4?6?7A8B9C:D:E;E;E<E<D;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpPoPoPnOmNlNjLiJgIdGbE_C\AZ?Vcs<N=Q?TAVCXE[E\G]G^G]H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWCUCUBTAS?Q>O<L:J8G6DOW1:2;3=4>5?7A8B9C9D:D;D;E;D;D;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqQpQoPnOnOmNlMkLhJfHeGaE_C]AY?Wq=O=P>S@VBWDZF\F\G^G^H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVCUCUAT@R?P=M;K9H7E7E[a1:1;3<4=5?6@7A8C9C:D:D;D:D:C;C;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrQpQpQoPnOmNlNkMjKhJfHdFbE^C\AZ?W~<N>Q?TAWCXE[F]F]G^G^H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVCUCUATAS?Q>N<L:J8F6Dzsx091:2<4=5>6@7A8A9B9C:C:C:C:C;C;B;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrQqQqQoPoPnOlNlMjLiKhJfHcFaD_C[AY?W;M=P?S@VBXDZF\G]G^G^H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVCUBTAS@R?O=M;K9G7E5C081:2;3=4>5?7@8A8B9A9B9B:B:C:B;B:B:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsQrQrQqQpPpPnOmOmNkLiKhJfIeGcF`C^B\AYJ`ly<O>Q@TBWCYE[F]G^G^G^H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVCUBUATAS?P>N<L:I8F6Dfo7?092;3<4=5>6?7@8@8A8A9A9B:A:B9B9B:B:B:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsQrQrQrQrQqPpPoOnOmNlMjLhJgIeHdGbE`D]A[@Yk};N=P?SBVBXD[F\G]H^G^H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVBUBUAT@Q?O=M;J9H7F6BPW091:2;3<4=5>6?6?7?8@8A9@9A9A9B9B9B9A:A9A9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am����������������������������������������������������������������6Vą#H#G+ONsNsNrTxVyVxUxUwUwUwUwUwTwTvTvTvTuStRtRsRsRsRrQqQqPqPpPpOnNmNlMjLiKhJeHdGbF`D^C]AZ?XM^<O>R@TCWDZE\F]H^H_G^H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVBUBUATAR?P>O<K:I8G7DKV08092:3;4<5=5>5>6>7?8?8@7@8A8A9A9A9A8A8@9@9@9?9?8?8?8?8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< p b am���������������������������������������������������������������6Vą#H#G+NMrMrMqSwUxUwTwTvTvTvTvTvSvSuSuSuStStRtRrRrQrQpPpOoOoOnNnMlMkLjKhJfIeHbFaE_C]B[AZi{;O>Q@SBVDYD[F]G]H^H_H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVBUBUAS@Q?P=M<K:H8E6CT[08192:3:3<4<5=5>6=7>6?7?7@8@8@8@7@8?8@8@8?8?7?7>7>8?8?8?8?8>8>8>8=7=7=7<7<7=7<7< o b am������������������������������������������������������������5V#G#F*NMrMqMpSvUwUvTvTuTuTuTuTuRuRtRtRtRsRrQrQqPpPpPnNnNnMmMlLkLiKhJgIeHcGaE_C]B[AZKa;N=P?SAUCXEZE\G^H^H_H_H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVBUBUBSAR@Q>N=L;J9F7D7D6>0819192:3;4<5<5<5=5>6>7?7>7?7?7?7?7?7>8>7>7>7>7>7>7>7>7=7=7=7<6<6<6;6;6<6;6; o a `l����������������������������������������������������������5T"G"F*MLpLpLoRuTvTuSuStStRsRsRsQsQrQrQrQqQpOpOoOoOnNlMlLkLjKiJhIfHeGcFaE`D^C\AZC\Zk<P>R@TBWDYF[F]G_H^H_I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVBUBTAS@R?O=M<K:H8F6CV`3:/708192:3:3:3;4<5=5=5=6=5>6=6>6>7=7=6=6=6=6=6=6=6=6<6<6<6;5;5;5:5:5;5:6; n ` _k���������������������������������������������������������3S"F"E)LKnKnKmPsRsRrQrQqQqQqQqQqPqPpPpOpOoOnNnMlMlLkLjKiJhIgIfHeGbFaE`D^C\B[H^;P>Q@TBVCXE[G\G^H_H_I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVBTBSAR@P?N=L;I9G8E5B3:/7071828292:3;3;4;4<4<4<5<5<5<5<5<5<5<5<5<5<5<5;5;5;5:4:4:49595:595: l _ ^j���������������������������������������������������������2R!E!D)KIlIlIjNpPpPpOpOoOoOoOoOnNnNmMmMlMkMkLjKiKhJhJfHeGdGcFbEaD_D^C]BZJa;O=Q?SAVCWDZF\G^G_H`H_I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVBTBTASAQ?O>N<K;I9F6C4A6=/6060708182929292:3:3:3:4:4:3:3:3:4:4:4:4:4:4:4:4939393838394848 j ] ]f�������������������������������������������������������� 2O!D!B(IGiGiGgLlNmNlMlMkMkLkLkLkKjKjKjKiJhJgIgIeHeHdGbEaEaD`D_C]B\AZrXh<P>S@UBXDYF[G]H^H_H`I`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUBTBTAR@P?O=L<J:H7E6CQ\^c.5/6/6070717081818182828182828282828292828383727272626272727 g [[f����������������������������������������������������� ��� /L B A'GEfEeDdIhKiKhJhJgJgJgJgJgIgHfHeHeHdGdFcFbEaE`D_C^B]B\A[r;P>R@UBWCYE[G\H^I_H`H`I`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUBTBTBRAQ@P?M=L;J9F7D5B[a.5.5/5.6/6/6060606060606060617171616161505050404051515 e YYb��� �������������������������������������������������� ���.I A?%ECcBbB`GeHfHeGdGcGcGcGcGcFcFbFbFbE`E`D_C^C]B]B[[q;P=R?TAWCYE[F\G^H_I`H`IaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUBTBSARAQ?N>M<K:H8F6D5BEL-3.4.4.4.4.4.4.4.4/4/4/4/4/4/4/3.3.3.2.3.3/3/4 b WX_������ ������������������������������������������� ������,I@>$CA`@^@]DaEbE`D`D`D`D`D`D`C_C^C^C^C]Ri{=Q<R>S@VBYDZF\G]H^I_I`IaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUBSBSAR@P?N>L;J9G8E6C8Cfj:@,2-2-2-2-2-3-2-2-2-1,1,1,0,0-2-1.2 _ UV\������ ����������������������������������������︼L_<Q>T@VBXDZE\G^H^I_I`I`IaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUBSBSBRAP@O?N<K;I9G7E6CGTͿ������������������������������������m{<Q>S@VBXCZE\F]H_I_I`I`JaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTBSBSBQAP@O=L<K:H9F7D5Bhq������������������������������������<Q=S?UAXCZD\F^G_H`I_I`JaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTBSBRAQ@P>M=L<J:H8F6D4A������������������������������������ <Q>S?UAWBZD[F^G_H_I`I`JaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTBRBRAQ?O>M=L;J:H7E6C4A������������������������������������ <P=S@V@WBYD\F]G_H`I`IaI`JaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTBRBRBQ@O?N>M=K;I9G7D5B4@������������������������������������ <P=R?UAXBYD\E^G^H`IaIaIaJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSBRBRAP@O?N>M<K:I8F7D5B4@������������������������������������ ?R=R?UAXCZD[E]G_H`HaIaIaJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSBRAQ@P@O?N>M;K:H8F7D5A7B������������������������������������ ?R=R?UAWBZD\E]F_G`HaIaIbJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSAQAQ@P@O?N<L;J:H8F7C5A7B������������������������������������ AV=R?UAWBZD\F^F_G`HbIaIbJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRAQAQ@P@O>N<K;J:H8E7C4A8D������������������������������������ @S>S?UAWBZD[F^G_G`HaIbIbIbJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRAQAQAQ@P>O=M<K;I:G8E6C4@7B������������������������������������ <Q>S@VAWBZD[F^G_HaHaIbIcIbJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRAQAQAP?P>N=M<K;H:G7E6B4@3?������������������������������������ =R>S@VBXBZD[F^G_HaIbIbIcIcJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRAQAQ@P?O>N=M<J;H9G7D6B4@3>������������������������������������ =R>T@VBXCZD\F^G_HaIbJcIcIcJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRAQ@Q@O?O>N=L<J:I9F7D6C4@3>������������������������������������ m|>S?U@WBXD[E]F^G_HaIbJcJdIcJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBR@Q@P@O?O>M=L;J:H9F7D6B5@3?fn������������������������������������ Tf>T@UAXBZD[E]G_G`HaIbJcJdJdJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRAR@P@P@O?N>M=L;I:H9G8D6B4A3?OY������������������������������������ AT?T@VBXBZD\E]G_HaHaIbJcJdJdKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQ@P@P@N?N=M=K<J:H9F8D6C4A3?5@������������������������������������ >S?UAWBYDZD\F_G`HaIbIcJcJdJdKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQ@P@O@O>N>L=K<J;H9F7E6C5A3?2>������������������������������������ ]n>T?VAXCZD\F]F_HaHaIbJdJcJdJdKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQ@O@O?O>M>L=K<I;H9G8E6C5A4?3>T\������������������������������������ >S?T@VBYC[E]F_G_HaIcJcJdKdJdJdKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAP@O?O?N>M>M=K<I:H9G8E7C6B4@3>2<������������������������������������ kz?T@VAWBYD[E]F_HaIaIcJdKdKeKeKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P?N?N?M>L=K<J;H:G9E7D6B5@4>3=dj������������������������������������ >T?UAWBYDZD\F^G`HaIcJcJdKeKeKeLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O?N?N?L>L=K<J;I:G9E8D7B5@4?3=2;������������������������������������ Wj?U@WAXCZD\F]F_HaHbJdKeKeKeKfKeLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O?N?M?M>L=L<K;H:G9F8D7B6A5?4=2<OV������������������������������������ s>V@VAXBZD[E]F_H_HaIcJdKeKfLeKfKfLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O?M?M>M>L=L=J<I;H:F9E8C7A5@4>3<2;lr������������������������������������ >U?WAYBYC[E]F^G`HaIbIcJdKeKfLgLfLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?M>M>L=K=J<I;H:F9E8C7B5@4>3=2<1;������������������������������������ @X?W@XAZC[D\E^G`H`IbJcKdKeKfLfLgLgMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?M>M>L>K=K<I<H;G:E9D7C6@5?4>3=2<2=������������������������������������ ?V@W@YAZB[D]E^F_GaHcIcJdKeLeKfLgLgLgMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?M?L>L>K=J=I<H;G;F9E8B7A6@5?4>2=1;0:������������������������������������ n?V@WAYBZB\D^E^F`GaHbIcJeKeLfLgMfLgLgMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?L>L>K>J=J=H<G:F9D8C7B7A6@4?3=2<1;19gl������������������������������������ bu?W@XAYB[C\D^E_FaGaHcIdJdKeKfLfLgMhMgLgMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?L?K>K>K=I=H;H;F:E9D8C7B6A5?4>3=2;2:0:V]������������������������������������ AY@XAZAZC\D\D^F_GaGbHdIdJeKfKfLgLhMgMhMhNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?K>K>J>J<I<G;G;F:E9D7C7A6@5?4>3<2<1:092:������������������������������������ K`@YAZBZC[D]D^E_F_GaHbIdIeJfJfKgLhLhMhMiMhNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?J>J=J=H<H<G;G;F9E8C7B7B6@5?4>3<2;1:1:09:C������������������������������������ QhAZAZB[C\C]D^E_F`FaGbHcIdJeKfJgKhLhLhLiMiMiMiNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?J>J=I=I=H<H<G:G:E9D8D8B7A5@4>4=3<2<2;1:0908DJ������������������������������������ atAYAZB[B\C]D^E^E_FaGaHbHdHdIeJeKfLgLhLiLiLiMjMjMiNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>I>I=I=I=H;H;F:F:E9C8C7B6@6?5?4>4=3<2;2:1918/7/6TY������������������������������������PfA[B[B[C\D\C]D^E_F`GbGbGcHdIdJeJfJgKgLgLhMiMiLjMkMjMjNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>I>I=I<I<G;G;F:E:D8D8B7A7A6@5?5?4=4<3<3:19180707/6/5@F|������������������������������������}[qA[A\B\B]C]C]D^D^E_E`F`FaGbGcHdIeJeIfJgKgLhLiLiMjMiMjNjNkMkMkNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>I=I<H<H<H;F;F:E9D9C8C8B7A7A6?5>5>4<3<2:2:29181707/6/6.6.5.4MRpt��������������������������������������� ������(B?<"A@^?\>[C_D_D_C_C^C^C^C^C^C^C]C]C^C]C^B^C]C^C^D^C^D_D_D`EaE`FaFbGbGbHcIcHdIeJfJgKhLhLiLiMiMjMkMjMkNjNkNkNkNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=H=H<H<G<G;F:E:D9D9C9C8C8A7@7@6?5>4<4<3;3:3:191818080706.6.5.5.5.3.3-3-2-2,2,2,2,2,1,1,1,0+0+0+/,0,1,0-1 [ TUV������ ������������������������������������������� ��� ���#Av@>!@BaA`A^EbFcFbEbFbFbFbFbFbEbEaEaFbFaFaEaEaFaFbFaFbFbFcGdGdHdHeIeIeJfKgKgKhKhLiMjMkNjMkMlNkNlOlNlNlNkNkOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=H=G<G;G;F;F:E:E:D9D9C9B8B8@7@6>6>5=5<5<3;3;2:2:29281807070705/5/5.4.4.4.4.4.4.3.3.3.2-2-2-1-1.2.2.3 Y VW Vt������ ����������������������������������������������� ���;c B? @CdCcCaGfIgIfHfHeHeHeHeIfHfHeHeHeHdHeHeHeHeIeIeHeIfIfIgJhJgKhKiLiLiMjMiMjMkNkNlNlOlNlNmOlOmOmNlOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<G<F;F;F;F;E:E:D:D9C9B8A8@7@7?7>6=5=5=4<4<4;3:2:29292917170706060606060605050504/4/4/3/3/4/4/3 W XXP`��� ��� �������������������������������������������������� 8D!C A @AcFgEeIhLkLjKjKiKiKiKiKiJiJiKiKiKiKiJiKhKiKiLiKiKjLjLjLkMjMkMlNkNlNlOlNlOmOmOnOnPmOnOnOmOmPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<F<F<F;F;F;E;E;D:C9C9B8A8A8@8?6?6?6>6>5=5=4<4;4;3;39392928282828282817171716161615151616+0 Y ZZNA��� �����������������������������������������������������/q!D!C!B>_HjHiJjOoOnNnNmNmNmNmNmMmMlMlMlMlMlMlMlMlMlNlMlMlMmNmNnNmOnOnOmPnPnPmOnPnPnPoPoPnOnPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<F<F<E;E;E;D:D:B9B9B9A9A8@7@7@7@7>7>6>5=5=5<5;5;4;4:3:3:3:3:3:39393938282827282837%* [ \ \��7������������������������������������������������������������$G!D!D7YJmIkJlQrQqPqPpPpPpPpPpOpOpOpOpOoPoOoOoOoOoOnOnOoOoOoOoPoPoPpPoQoQoQoPoPoPoQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<E<D;D:C:C:C:B:B9A8A8A8A8@8@7?7>7>6>6=6=5=5<5<5<5<5;5;5:5:5:59494948494949  ] ^ _����������������������������������������������������������������#G"E"E.PKoKnKnRrSsRsRrRrRrRrRsQsQrQrQrQqQqPqPpQqQqQpPpPpPqPqQqQpQqQqQpQpQpRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;C;C;B:B9B9B9B9B9A9@8@8?7?7?7>7>6>6=6=6=6=6=6=6<6<6<6;5;5;5;5;5;5:s _ _ ^�����������������������������������������������������������������#Fm"F"F#GJnLoLoPsTuSuStStStStStRuRtRtRtRsRsQsRrRrRrRqQrQrQrQrQrQqQqRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:B:B:B:B9A9A8A8@8@8@8?8?7?7>7>7>7>7>7>7=7=7=7<6<6<6<6<6<38 c ` ` `h������������������������������������������������������������������"E%#F#F#F=bMqMqNrUvTwTvTvTvTvTvSvSuSuSuStStRtRsRsRsRrQrRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9A9@9@9@9?9?8?8?7>7>7>7>7>7=7=7=7<6<6<6<6<6<#( b a a]!�����������������������������������������������������������������������#G#G#G-RNrNrNrQtTwUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7>7=7=7=x c b b������������������������������������������������������������������������������$Hj#G#G"GDiNrNrPsTxUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7=7=7=7=,1 c c b cg��������������������������������������������������������������������������������$I#G#G"G1UNrNrNqRuUwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8=7>7>7=7=| c c b�b ������������������������������������������������������������������������������������$H#G"G"FDhNrNqOqTwUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>8>7>7>7=+1 d c c c|����������������������������������������������������������������������������������������K#G"G"F*NMqNqNqPrUwUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>7>7>7>6<r c c c�f��������������������������������������������������������������������������������������������#Hn"G"F"F8\NqNqNqPsUwUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8>8>7>7>7>" d c c cj�������������������������������������������������������������������������������������������������U"G"F"F#FBgNqNqNpQsUwUwTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8>8?8?7>7>*0 d d c c������������������������������������������������������������������������������������������������������$I*"F"F"F&JGkNqNpNpQsUvTwTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?8?7>/6 k d d ce&������������������������������������������������������������������������������������������������������������!E\"F"F"F(KJlNpNpNpOrSvTvTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?8?17 o e d d dW��������������������������������������������������������������������������������������������������������������������#E"F"F"E'JGiNpNpNpNpRsTvTvTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8?8?8?8?8?8?8?/6 m e e d c��������������������������������������������������������������������������������������������������������������������������#E"F"E"E&HBeNpNpNpNpOqRsTuTuSuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8?8@8?8?8?8?8?+1 k e e e d�������������������������������������������������������������������������������������������������������������������������������33#G"E"E"E"E8[MpNpNpNpMoNpQrRuStStStSsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A9@9@8@8@8@8?8?8?7>& g f e e e��f�������������������������������������������������������������������������������������������������������������������������������������#E"E"E!E!D+MDgNpNpMoMoMoMnNpOqQrRsRsRsRsRsRsRrRrRrRqRqRqRpQpQpQpQpQpQoPoPoPnPnPnOmOmOlOlOlOlNlNlNkNkNkNjNjNjNiNiNiNhMhMhMhMhMhMgLgLgLfLfLfKeKeKeKeKeKeJdJdJdJcJcJcJbJbJaJaJaJaIaIaI`I`I`H_H_H_H^H^H^G]G]G]G]G]G]G\G\G\G[G[G[FZFZFZFYFYFYEYEYEYEXEXDWDWDWDVDVDVCVCVCVCUCUCUCTCTCTCSCSCSBRBRBRBRBRARAQAQAQAPAP@P@O@O@O@N@N?N?N?N?M?M?M?L?L?L?K?K>K>J>J>J>J>J=J=I=I=I=H=H<H<G<G<G<G<G<G<F<F<F<E;E;D;D;D;C;C:C:C:C:C:B:B9B9A9A9A8A8A8@8@8@8?8?-4x f f f e f��������������������������������������������������������������������������������������������������������������������������������������������������!Dl"E!E!D!D"D1TGiMoMoMoMnMnMnMnMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B8A8A8A8A8@8@8@/6 h g f f f fi������������������������������������������������������������������������������������������������������������������������������������������������������������ E0!F!D!D!D!D!C.Q?bLnMnMnMnMnMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B8A8A8A8A6>(0i h g g f f f-��������������������������������������������������������������������������������������������������������������������������������������������������������������������@@!Du!D!D!D!C!C C#F/P:\EeLmMmLmLmLlLlLlLlLlKlKlKkKkKkKjKjKjJjJiJiJiJhJhJhJhJhJhJhJgJgJgJfIfIfIeIeIeIeIeHeHeHdHdHdHdHcGcGcGbGbGbGaGaGaGaGaGaGaG`G`G`F_F_F_F_F^F^F^F]E]E]E]E]E]E]E\D\D\D[D[D[D[DZDZCZCYCYCYCYCYCYCYCXCXCXCWCWCWCVBVBVBVBVBVBVBUAUAUATATATATASAS@S@R@R@R@R@R@R?R?Q?Q?Q?P?P?P?P?O?O?O?N?N?N?N>N>N>N>M>M>M>L>L=L=K=K=K=K=J=J<J<J<J<J<J<I<I<I<H<H<H<G<G<G<G;G;G;G;F;F;F;E:E:E:E:D:D:D:C:C9C9C9C9C9C9B9B8B6@/8#+ nihh h g g fs����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$@"C!D!C!C C B B B B!A&G*K,N.N/P/P/P/O/O/O.O.N.N.M.M.M.M.M-L-L-L-L-K,K,K,K,J,J,J,J,I,I,I,H+H+H+H+G+G+G+G+F*F*F*F*E*E*E*E*E*D*D*C)C)C)C)B)B(B(A(A(A(A(A(@(@'@'?'?'?'>'>'>'>'>'='='='='<'<'<%<%<%;%;%:%:%:%:$9$9$9$9$8$8$8$8#7#7#7#7#6#6#6#6"6"6"5"4"4"4"4"3!3!3!3!3!3!3 2 1 1 1 0 0 0 0 0 000....-------,+++********)))''''''''&&&&$$$$$$$#"""!!! |uljjjiihh i g h������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������$I!B{!C C B B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjjiiiiz f������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������"D< A B B B A A AA@@@@????>>>====<<<<;;;;::::9998888777766665555444333322221111000////....----,,,,+++****))))((((''''&&&%%%%$$$$####""""!!!    ~~~}}}|| { { { z z y y y x x w w w v v u u u t t s s s r r r q q p p p o o n n n m m l llkkjjkj j:��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������9 C*BQAr Ay B@ A A A ? ? ??>>>>>>><<<<;;;;;;;;9998888888866665555555333322222222000////////----,,,,,,,****))))))))''''&&&&&&&$$$$########!!!        ~~~}}}}}{{{zzzzz x x w w w w w u u u t t t t t r r r q q q q q o o n n n n n l mky kr lP g*�q ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������?��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fstartingsplash.lfm�������������������������������������������������������������0000644�0001750�0000144�00000251227�12662424243�017236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmStartingSplash: TfrmStartingSplash Left = 120 Height = 314 Top = 207 Width = 256 Anchors = [] AutoSize = True BorderIcons = [] BorderStyle = bsNone Caption = 'Double Commander' ClientHeight = 314 ClientWidth = 256 Color = 15396089 FormStyle = fsSplash Icon.Data = { 267D000000000100040010100000010020006804000046000000202000000100 2000A8100000AE0400003030000001002000A825000056150000404000000100 200028420000FE3A000028000000100000002000000001002000000000004004 00000000000000000000000000000000000000000000BCA3A51A8182BB517E82 C1586E72B94F6D70B64F6C6DB34F6B6BB14F6A68AE4F6966AB4F6764A84F736D AB57837CB1677A72AB607B6D9E3EFEEDD506B7A4B60D4F6BDAE62653E6FE234B DEFE2046D7FE1D3FD1FE1A39CAFE1834C4FE142EBEFE1228B8FE0F23B2FE0D1C ABFE0A17A4FF06109EFE050C97FE594F997BCECFD296BEC6DBFEB1BAD9FE889A D9FF2F52D7FF193ED2FF1939CCFF1634C6FF132DBFFF1127B9FF0E22B3FF0314 AAFF444EB3FF9295C4FFB1B2CCFFC2C2CFF7D1D0D0ABD7D7D5FFD6D6D5FFD6D6 D5FFD9D9D4FF4963D0FF1738CCFF1634C6FF132DBFFF1127B9FF0E22B3FF848B C5FFDBDBD7FFD6D6D5FFD7D7D6FED7D7D6FFAFB5D15A6A87E1FB8B9DD6FFD9D7 D2FFD3D3D3FFD1D1D2FF3F58CBFF1634C6FF132DBFFF0B22B8FF9299C8FFD7D6 D4FFD3D3D3FFC1C2CEFF5D62B1FF6868B0D69AA7E3344B72EDF92C58E9FF375C DDFFBFC2D0FFD0D0D0FFAAB0CAFF0D2DC6FF132DBFFF3245BDFFCECECFFFD3D3 D1FF9A9DC2FF040F9EFF000697FF2B2DA1C3A3ADE1366D8CF0F9577AECFF3E62 E3FF6D83D6FFCECECCFFD7D6CCFF2741C3FF122CBFFF616FC0FFCDCDCCFFC4C4 CAFF0514A5FF0712A0FF070E9AFF3334A3C4A3ADE1366D8CF0F96988EEFF6482 E9FF6F86DEFFCDCCCAFFD1D0CAFF5C6DC7FF213AC4FF8991C4FFCBCBCAFF9EA2 C3FF1C29ADFF222CAAFF2B32A9FF5858B3C4A3ADE1366D8CF0F96888EEFF6684 EAFF7E92E0FFD8D7D5FFDCDBD6FF7686D1FF596CD3FF9DA4CEFFD6D6D6FFB8BB D0FF545EC1FF555DBDFF5359BAFF6B6CBCC4A3ADE1366D8CF0F96888EEFF6583 EAFFAFBAE1FFE5E5E5FFE6E5E1FF596FD7FF5C6FD3FF8690D2FFE5E5E5FFE9E8 E5FF5F69C0FF525ABDFF5157B9FF6B6BBBC498A4E72F6687F1F96887EBFFA7B4 E3FFE6E6E5FFE6E6E6FFA5AFDCFF5D72D8FF5D6FD3FF6371CEFFE0E0E3FFE6E6 E6FFDBDCE1FF7A7FC4FF484EB5FF605FB4C2D9D9DC9CD8DAE1FFEAE8E3FFE7E7 E6FFE7E7E6FFD5D7E2FF677BDBFF5F74D8FF5D6FD3FF5A69CFFF7681CBFFE6E6 E5FFE6E6E6FFEBEBE8FFE6E6E3FFD7D8DEF9E0E0E0ABE8E8E8FFE9E9E8FFEEED E9FFB6BFE0FF677FE0FF6076DCFF5F74D8FF5D6FD3FF5B6BCFFF5866CBFF6F79 C9FFDBDCE0FFEEEDEAFFE9E9E8FEE8E8E8FFCECCD36EAFBDE9FD9BADE7FE768F E6FF5F7AE5FF627BE0FF6176DCFF5F74D8FF5C6FD3FF5B6BCFFF5866CBFF5662 C6FF4F59C0FF777DC4FF9699CBFFB5B2CCDEFFF0D5098283BBCA718EEFFC6683 E8FB6A82E4FB687FE0FB667ADCFB6478D7FB6373D3FB6170CEFB5F6CCBFB5C66 C5FB5660C0FB555CBCFB6A6CBDF9998DB15200000000FFFFFF0399839924917C 962A907B962A8F7B942A8F7A942A8F79942A8E79942A8E78932A8E78922A8F77 922A8F77922A8E76912A9D83921F000000008000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 FFFF0000FFFF0000FFFF0000FFFF8001FFFF2800000020000000400000000100 2000000000008010000000000000000000000000000000000000000000000000 000000000000FFFFFF03FFFFFF07FFFFFF0BFFFFFF14FFFFFF09FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFF FF07FFFFFF07FFFFFF07FFFFFF07FFFFFF07FFFFFF0CFFFFFF1AFFFFFF1CFFFF FF1CFFFFFF17FFFFFF0AFFFFFF04000000000000000000000000000000000000 0000FFFFFF10E1D6D55362456CBA584273D6594374DD584175D3563F73D2563E 72D2553E71D2543D70D2543C70D2543B6ED2533B6ED2533A6DD2533A6DD25338 6BD252396BD252386AD252376AD2513669D253386AD5513262E6513262E85132 61E8503161E4533563CA89729187FFFFFF2BFCFCFC040000000000000000FFFF FF08948BB17F5263C1FF3E66E8FF315DEBFF2C58E7FF2B54E4FF2A51E1FF284E DDFF264BDAFF2448D7FF2345D4FF2242D0FF2140CDFF1F3DCAFF1E39C7FF1C36 C4FF1B33C1FF1A31BEFF192EBBFF172BB7FF1527B3FF1425B1FF1322AEFF121F ABFF101CA8FF141EA5FF191A92FF45357FE4FEF6EE3AFFFFFF0200000000FFFF FF22546BD1F12C5AEBFE2754E8FF224FE4FF224BE1FF2149DEFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0816A5FF0613 A2FF040F9FFF010A9BFF020A98FF0B139DFF453075C7FFFFFF0ECACACA4EDBDB DBE7C5C9D8FFC0C5D7FFB7BED6FF8598D7FF395DDCFF1842DFFF1E45DAFF1D43 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF0A1CACFF0A19A9FF0615A5FF000C A0FF434BACFF9395C1FFB7B8CAFFBDBECFFFC7C6D1FDD6D6D6E3C8C8C858D7D7 D7FFD7D7D7FFD7D7D7FFD8D8D7FFDCDBD8FFE1DED5FFB3BAD4FF5873D6FF1940 D6FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0C1FB0FF081AABFF0F1DA8FF7077BCFFCECE D4FFE2E2DBFFDADAD8FFD8D8D7FFD7D7D7FFD7D7D7FFD4D4D4FFC8C8C858D5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD7D6D6FF9FA9 D1FF1B40D3FF1A3DD0FF183ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0D22B3FF0B1FB0FF2D3BB0FFD7D8D9FFD6D6D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD3D3D3FFC7C7C758D3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD8D7 D4FFBBBFD2FF1F40CFFF193ACDFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0F25B6FF0B20B3FF5662B9FFD4D4D5FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD2D2D2FFC8C8C84BD1CF D0E9BBC3D9FFBDC2D4FFCCCDD1FFD8D7D3FFD4D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFB1B6CCFF193ACBFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0D24B6FF2E3FB6FFD3D4D5FFD2D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D4FFD8D8D5FFC2C2CEFFB4B5CAFFB6B7CAFDD3D3D2DBFFFFFF05BAA4 AD75426DF1FF3461EBFF2E5AE8FF5874D4FFCECFD1FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD3D2D2FF8491CAFF1736C9FF1634C6FF1431C3FF132EC0FF112B BDFF1128BAFF0A21B4FFCECFD2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3 D2FFAAACC6FF1D259FFF070F9AFF030996FF181B9CF4FAEEE322FFFFFF04B9A2 AD734B75F2FF3B66ECFF315CE8FF2753E6FF2750DEFF96A3D1FFD1D1D0FFD0D0 D0FFD0D0D0FFD0D0D0FFCDCDCDFF2240C7FF1534C6FF1431C3FF132EC0FF112B BDFF1027BAFF737EC3FFD3D3D1FFD0D0D0FFD0D0D0FFD0D0D0FFD7D6D1FF5961 B3FF000B9DFF020C9CFF030B99FF000695FF161A9BF4FFF4E71FFFFFFF04B7A1 AD735F84F3FF4971EDFF3C65E9FF325BE5FF2B54E2FF2049DEFFB5BACEFFD0CF CEFFCECECEFFCECECEFFD2D2CFFF848FC1FF1130C7FF1431C3FF132EC0FF112B BDFF0F26B9FFB6B9CBFFCECECEFFCECECEFFCECECEFFD0CFCFFF6067B4FF0411 A2FF05109FFF030D9CFF030B99FF010795FF171A9BF4FFF4E71FFFFFFF04B7A0 AC736D8FF5FF6384EFFF5074EBFF4268E7FF365DE3FF2E55E0FF3256DAFFC8C9 CCFFCDCDCDFFCDCDCDFFCDCDCDFFC4C4C6FF1C39C5FF1532C3FF142FC0FF112A BDFF273BB8FFD4D3CDFFCDCDCDFFCDCDCDFFCECDCDFFBABBC6FF0412A4FF0714 A2FF06119FFF050E9CFF040C99FF030896FF191D9CF4FFF3E71FFFFFFF04B7A0 AC736D90F5FF6A8AF0FF6887EEFF5D7EEAFF4E71E6FF4164E2FF375ADDFFA7B0 D0FFCCCCCCFFCDCDCDFFCDCDCDFFCCCCCDFF364EC3FF1733C3FF152FC0FF1029 BDFF6A75BCFFD2D1CEFFCDCDCDFFCDCDCDFFD3D3CEFF444EAFFF0715A6FF0915 A4FF0914A0FF09129EFF0A119BFF0A1099FF2226A0F4FDF1E61FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF617EE7FF5372E3FF909D D3FFCCCCCAFFCACACAFFCACACAFFCACACAFF4B60C5FF213BC5FF1D37C2FF152E BFFF979DC1FFCDCDCBFFCACACAFFCACACAFFCCCCCAFF1626ACFF1220A9FF131F A7FF141EA5FF161FA2FF1920A2FF1D23A1FF3639A8F4F8ECE41FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FF94A1 D6FFCCCCCAFFCACACAFFCACACAFFCACACAFF6778CBFF3850CCFF324AC8FF293F C4FFB0B3C5FFCCCBCBFFCACACAFFCACACAFFC1C2C9FF2A38B4FF2935B1FF2C36 B0FF3039AFFF353DAFFF3D44B0FF4448B1FF595CB7F4EFE3E01FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF647FE5FF9EA9 D6FFD3D3D2FFD2D2D2FFD2D2D2FFD1D2D2FF7988D1FF5C70D5FF586BD2FF5163 D0FFADB0C5FFD4D3D2FFD2D2D2FFD2D2D2FFCBCCCFFF515CC1FF505AC0FF525B BEFF535BBDFF535ABBFF5257B9FF5054B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6580E5FFBAC0 D9FFD9D9D9FFD9D9D9FFD9D9D9FFD9D9D9FF7182D3FF5D71D6FF5D6FD3FF596B D2FF989EC6FFDDDCDAFFD9D9D9FFD9D9D9FFDDDCD9FF656FC2FF545EC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF6682E8FF6781E3FFDBDC DEFFE2E2E2FFE2E2E2FFE2E2E2FFDDDDDDFF6175D5FF5D71D6FF5D6FD3FF5A6C D1FF737EC8FFE5E5E1FFE2E2E2FFE2E2E2FFE4E4E3FFB4B6CEFF4E59C0FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6684EAFF637FE8FFB5BDD6FFE8E8 E7FFE6E6E6FFE6E6E6FFE8E8E7FFB5BAD4FF5B71D8FF5D71D6FF5D6FD3FF5B6D D1FF5A69CFFFD7D8DBFFE6E6E6FFE6E6E6FFE5E5E5FFEAE9E8FF737BC2FF535C BFFF535BBDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EEE1DF1FFFFFFF04B7A0 AC736D90F5FF6989F0FF6988EFFF6786ECFF6180EBFFA4B0DCFFE6E6E5FFE5E5 E6FFE6E6E6FFE6E6E6FFE7E6E3FF687BD7FF5E74D8FF5D71D6FF5D6FD3FF5B6D D1FF5B6ACFFFA6ACD1FFE7E7E6FFE5E5E5FFE6E6E6FFE5E5E5FFDDDEE1FF5E66 BAFF5159BDFF5258BAFF5257B9FF4F54B6FF5E61BAF4EFE3E11FFFFFFF01B29F BC6E6A8DF6FF6586F1FF6584EDFF8097E4FFBDC4DDFFEBEAE5FFE5E5E5FFE6E6 E6FFE5E5E5FFE7E7E6FFB3BADAFF5F74DBFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF6270C9FFE2E1DFFFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E5 E4FF9296C9FF5D62B8FF4B51B6FF4A4FB4FF595BB8F4D3B9BA1BCDCDCC3CD2CF D6CFB5C0E0FFC2C8DCFFE0E0DFFFE7E7E6FFE6E6E5FFE6E6E6FFE5E5E5FFE5E5 E5FFE6E6E6FFDFDFDFFF6277D8FF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5968CDFF7681C9FFE5E5E4FFE5E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFEAE9E8FFD2D3D7FFB6B7CFFFB0B0CEFBD5D4D4B3D2D2D259E6E6 E6FFE8E8E6FEE8E7E7FFE7E7E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E7FFE1E1E3FF7085DAFF6076DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF9299CBFFEEEEE8FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E8E7FFE8E8E7FFE2E2E2FFD2D2D258E6E6 E6FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE9E9E7FFD3D6 E0FF6D83D8FF6179DEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5360C9FF8B92C9FFE1E1E3FFE9E9E8FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE2E2E2FFD2D2D258E7E7 E7FFE8E8E8FFE8E8E8FFE7E7E7FFE7E7E7FFE8E8E8FFEAEAE6FF9BA8D8FF647E E2FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5E68C4FFC0C2D3FFECEC EBFFE8E8E8FFE7E7E7FFE8E8E8FFE8E8E8FFE8E8E8FFE3E3E3FFCECECE57E1E1 E1FFE1E1E3FFDEDFE0FFCDD2E1FFB5BFE2FF93A6E4FF6C86E3FF627DE6FF647E E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5660C4FF515BC0FF6B72 C1FF9498CAFFB8BAD2FFD1D1DAFFDEDFDFFEE1E1E2FFDBDBDBFC00000000EFE3 E3386779D2FF6385F2FE6485F0FF6585EDFF6684EAFF6682E8FF647FE5FF647D E3FF627CE0FF627ADEFF6077DCFF5F74DAFF5F74D8FF5D71D6FF5D6FD3FF5B6D D1FF5C6BCFFF5A69CDFF5867CBFF5865C9FF5663C5FF5761C4FF555FC1FF535C BFFF525ABDFF4F55BAFF4B51B7FF494FB7FF55468DEAFFFFFF0900000000FFFF FF1D837DAED37395F7FF6786EFFE6786ECFF6684EAFF6581E8FF647FE5FF637D E3FF627CE0FF6179DEFF6077DCFF5F74DAFF5E74D8FF5D71D6FF5C6ED3FF5B6D D1FF5B6ACEFF5969CDFF5867CBFF5764C9FF5662C5FF5761C4FF555FC1FF535C BFFF535BBDFF5157BAFF4E53B7FE6562ADFFA18DA574FFFFFF0400000000F6F5 F604CFC0C3428D85AFC27C84CAF46874C6FF6874C5FF6A74C4FF6C75C2FF6C74 C2FF6C73BFFF6B71BEFF6A6FBCFF696EBBFF696DB9FF686BB8FF676AB6FF6669 B5FF6667B3FF6566B2FF6464B1FF6462AEFF6261ACFF5C5AA9FF5B58A7FF5A57 A6FF5B56A4FF655EA5FF7F76ABEF95819C93FFFFFF1300000000000000000000 0000FBFAFB02FFFFFF11FFFFFF2AFFFFF937D4C5C340D4C5C340D4C5C340D4C5 C340D4C5C340D5C6C340D5C6C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6 C440D5C6C440D5C6C440D5C6C440D5C6C440D5C6C540D5C6C440D5C7C540D5C7 C540D5C6C440EBE2DF3BFFFFFF2CFFFFFF0E0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000E0000007C000 0001800000008000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000800000008000000080000001C0000003FFFFFFFF280000003000 0000600000000100200000000000802500000000000000000000000000000000 00000000000000000000000000000000000000000000FFFFFF01FFFFFF03FFFF FF04FFFFFF07FFFFFF0BFFFFFF08FFFFFF04FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFFFF03FFFF FF03FFFFFF03FFFFFF05FFFFFF0BFFFFFF0FFFFFFF10FFFFFF10FFFFFF10FFFF FF0EFFFFFF09FFFFFF04FFFFFF02000000000000000000000000000000000000 0000000000000000000000000000FFFFFF01FFFFFF0AF0EBEC1FD4CAD332CCC3 D03BD4CDD947D9D3DD53D4CDD948CCC4D23BCAC1D039CAC1D039CAC1D039C9C1 D039C9C1D039C9C1CF39C9C0D039C9C1CF39C9C0CF39C9C0CF39C9C0CF39C9C0 CF39C9C0CF39C9C0CE39C9C0CE39C8C0CE39C9BFCE39C9BFCE39C9BFCE39C9BF CE39C9C0CE3ACEC6D340D8D1DB53DBD4DD61DCD5DE64DCD5DE64DCD5DE63DAD2 DC5DD3CBD64BCDC4D039D7CFD829FBFAF916FFFFFF0700000000000000000000 00000000000000000000FFFFFF02FFFFFE12D8CFD63F9B8CA88B675687CC5243 81E7514688EF504586F2504588EE4F4487EB4E4286EB4E4285EB4D4185EB4C40 84EB4C3F83EB4B3F82EB4B3E82EB4B3D80EB4B3C7FEB4A3C7FEB4A3B7EEB4A3A 7DEB49397CEB49397CEB49387AEB48387AEB48377AEB483679EB483578EB4835 77EB473476EB473476EC473274F2442C6CFA442C6CFA442C6BFA432B6AFB432A 6AFA442D6CF04B3370DE675284B6A394AE76E1D9DE37FFFFFF0EFFFFFF020000 00000000000000000000FFFFFF0BD1CAD545776FA3BB5157ABFF4F6EDEFF436C F0FF3963EEFF3661EBFF345EE9FF345BE7FF3359E4FF3158E2FF3056E0FF2F54 DEFF2E51DBFF2D4FDAFF2C4ED8FF2C4BD6FF2A49D3FF2A48D1FF2947D0FF2844 CDFF2742CBFF2640CAFF253FC8FF253CC5FF233BC3FF2239C2FF2237BFFF2135 BDFF2033BBFF1F31B9FF1E2FB7FF1D2EB5FF1C2CB4FF1B2AB1FF1B28AFFF1926 ADFF1C27ADFF232BA8FF292894FF362577FF715C8AADDAD1D83EFFFFFF0C0000 000000000000FFFFFF02DEDAE7237B7BB79D4D64CCFF3B6AF5FF2655EAFE2552 E6FF224FE3FF204CE1FF2049DFFF1F47DDFF1E45DBFF1C42D8FF1B41D5FF193F D3FF183DD1FF173BCFFF1638CDFF1636CBFF1534C9FF1433C6FF1331C4FF122F C2FF112DC0FF102ABEFF0F28BCFF0F26B9FF0E25B7FF0D23B5FF0B21B3FF0A1F B1FF091CAFFF081AACFF0818A9FF0716A7FF0615A5FF0513A3FF0411A1FF030E 9FFF010C9CFF00099AFF000699FE09129FFF271F83FF7664939CEDE9F024FFFF FF0100000000BAB9B309B2B6D9474D5FC2F14370F4FF2957EAFE2452E9FF1D4C E6FF1D4BE4FF1F4AE2FF214ADFFF2149DDFF1F46DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0817A6FF0715A4FF0612A2FF010D 9FFF00079CFF000298FF000597FF000695FE09119CFF2C1F7AEFC4C1CF4DB0B0 AF0CB0B0B016D4D4D4A5D1D2DABD9DA8D5FF98A9E0FF92A4DCFF899CDCFF758D DCFF5876DBFF355ADDFF1B46DFFF1A44DEFF1E45DBFF1E44D8FF1D43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0918A8FF0716A6FF000EA2FF000C9FFF1E28 A3FF464DAEFF6469B5FF787CB9FF8285BCFF8184BBFE8E8BB7FFD3D3D6C4D1D1 D1A4B1B1B125D5D5D5FFD9D9D9FFDDDCD8FEDEDCD7FEDDDBD5FFDCDBD5FFD4D5 D6FFC4C8D7FFAEB7D7FF8A9BD7FF4C6AD6FF1B43DAFF1A41D8FF1C43D6FF1C41 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0A1AAAFF0414A7FF0615A4FF3F49ADFF8489C1FFABAE CBFFC2C3D1FFD4D5D5FFDDDDD8FFDFDFD9FFE0E0DBFEE0E1DCFEDADADAFFD4D4 D4FFB0B0B023D4D4D4FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD8D7 D7FFD9D9D7FFDBDAD7FFD5D5D5FFC3C8D7FF97A4D4FF3858D3FF173ED6FF1B40 D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF0A1CACFF0515A9FF2C38ACFF969AC6FFC5C6D3FFD7D7D6FFDDDC D9FFDAD9D8FFD8D8D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD7D7D7FFD4D4 D4FFB0B0B023D3D3D3FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD8D8D6FFD4D5D5FFC3C6D5FF687DCFFF183D D4FF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0D21 B2FF0B1EAFFF091AABFF636BB9FFC6C8D4FFD5D5D5FFD9D9D7FFD6D6D6FFD6D6 D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD3D3 D3FFB0B0B023D2D2D2FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D5D5FFD2D3D6FF8895 CCFF1A3ED1FF193CCFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0C20 B2FF0C1FAFFF888EC1FFD6D6D8FFD6D6D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD2D2 D2FFB0B0B023D2D2D2FFD4D4D4FFD3D3D3FFD3D3D3FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D3FFD6D6 D6FF99A3CBFF1438CFFF183ACDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0E23B4FF0A1F B0FF989DC4FFD8D8D8FFD4D4D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4D4FFD1D1 D1FFB0B0B023D4D4D4FFD5D5D5FDD3D4D6FFD3D3D5FFD1D2D3FFD2D3D3FFD3D3 D3FFD4D4D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3 D3FFD5D5D5FF818EC7FF1436CDFF1838CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0F25B6FF0A20B3FF828A C0FFDAD9D8FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FFD4D4 D3FFD4D4D4FFD3D3D3FFD2D2D3FFD3D3D4FFD2D3D4FFD2D2D4FFD5D5D5FCD4D4 D4FBB5B5B50CC5C4C469AAA6BDB46989E5FF6583E0FF728AD8FF909FD0FFB6BC CFFFCBCCD2FFD1D2D2FFD3D3D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2 D2FFD2D2D2FFD1D1D3FF5B6EC6FF1434CBFF1736C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF1027B8FF0B21B5FF5864BAFFD8D8 D7FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2 D2FFCDCED3FFB4B5CBFF8084BAFF585CACFF3F43A3FF4144A3FFB1ACBF9DC1C1 C15B00000000FDF6F71A9B93BD914470F4FF3361EEFF2C5BECFF2453EBFF2651 E3FF5673D4FFA2ADD1FFCBCDD2FFD2D2D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFD2D2D1FFBFC2CDFF2A46C7FF1434C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0D25B8FF2135B6FFC6C8D2FFD1D1 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFD2D2D2FFCDCED1FF9FA2 C5FF3F46A8FF000899FF000197FF000395FF000193FF060B97FFA59AC26CFFFF FF0AFFFFFF01F0EAEC209E96BD934F78F3FF3E69EEFF3763EBFF315CE9FF2C57 E7FF214EE6FF234EDEFF7389D5FFC1C4D0FFD1D1D0FFD0D0D0FFD0D0D0FFD0D0 D0FFD0D0D0FFD1D0D0FFCECED0FF8792C5FF1232C9FF1635C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF1128BAFF0921B7FF8B93C5FFD0D0D1FFD0D0 D0FFD0D0D0FFD0D0D0FFD0D0D0FFD0D0D0FFD2D2D1FFC4C5CDFF6A71B6FF0814 9EFF00069CFF020C9BFF030B99FF020997FF000694FF0A0F98FFA79CC270F9F8 F910FFFFFF01F0EAEC20A098BD935A81F3FF4770EEFF3F68ECFF3861E9FF315C E7FF2D57E4FF2751E3FF1C47DFFF667ED3FFC3C6CFFFD0D0CFFFCFCFCFFFCFCF CFFFCFCFCFFFCFCFCFFFD1D0CFFFBBBECBFF364FC4FF1232C7FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF0D25BAFF2F41B8FFC5C6CFFFD0D0CFFFCFCF CFFFCFCFCFFFCFCFCFFFCFCFCFFFD1D1CFFFC4C5CCFF5E65B4FF000D9FFF020E 9FFF040F9DFF030C9BFF020B99FF020997FF000694FF0B1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39ABD93698CF5FF557BEFFF4A71EDFF4169EAFF3962 E8FF335BE5FF2E56E2FF2951E1FF1D46DDFF7D8FD1FFCBCCCFFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFC7C8CCFF7582C2FF0C2DC8FF1533C5FF1431 C3FF132EC0FF122CBEFF122ABCFF061EB9FF7A83C1FFCACBCEFFCECECEFFCECE CEFFCECECEFFCECECEFFCFCFCEFFCACACEFF747AB8FF020FA1FF0411A2FF0511 A0FF040F9DFF030D9BFF030B99FF020997FF000794FF0C1098FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F5FF6587F1FF5B7EEEFF4F74EBFF446B E9FF3D63E6FF365CE3FF3057E1FF2950DFFF2E52D9FFACB3CEFFCCCCCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECDCCFF9EA5C4FF1A37C5FF1432C5FF1531 C3FF132FC0FF122CBEFF112ABCFF0F27B8FFA9ADC7FFCECECDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFA7AAC4FF1421A6FF0412A3FF0713A2FF0611 9FFF050F9DFF040E9BFF040C9AFF040A98FF020895FF0D1299FFA79CC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8BF2FF6788F0FF6182EEFF5779 EBFF4C6FE8FF4267E5FF3B60E2FF355AE0FF284EDEFF6C81CFFFCACBCFFFCDCD CCFFCCCCCCFFCCCCCCFFCCCCCCFFCECECCFFB2B6C8FF3A52C1FF1230C5FF1631 C3FF152FC0FF132DBEFF0E27BCFF3547B8FFB9BCCAFFCECECDFFCCCCCCFFCCCC CCFFCCCCCCFFCDCDCDFFC5C6CBFF6269B4FF000EA5FF0916A4FF0814A2FF0712 A0FF06109EFF060F9CFF060E9AFF070D99FF060B96FF11179BFFA89DC270F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6685 EDFF6080EAFF5778E8FF4C6EE5FF4465E2FF3B5DDFFF3E5ED9FFC7C9CEFFCDCD CDFFCDCDCDFFCDCDCDFFCDCDCDFFCECECDFFBDBFC9FF586AC0FF1230C6FF1733 C3FF1631C0FF152EBFFF0D26BDFF5664BBFFBFC1CAFFCECDCDFFCDCDCDFFCDCD CDFFCDCDCDFFCDCDCDFFBDBECAFF1E2BA9FF0917A7FF0A17A6FF0A16A3FF0A15 A1FF0A149FFF0B139EFF0B139CFF0C129BFF0C1299FF191E9EFFA99EC370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6988EFFF6887 EEFF6786EBFF6583EAFF617FE8FF5A78E6FF5170E2FF4163E0FFB1B7CEFFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC1C2C8FF6B7AC1FF1835C8FF1E39 C4FF1C36C2FF1A33C0FF0F29BDFF717DBEFFC4C4C9FFCCCBCBFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFABAFC4FF0617A9FF101EA9FF101DA7FF111DA5FF111C A4FF121BA3FF131CA1FF151CA0FF181E9FFF191F9FFF272BA4FFABA0C370F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF637EE5FF5B77E4FFA7B0CFFFC8C8 C9FFC9C9C9FFC9C9C9FFC9C9C9FFC9C9C9FFC5C5C6FF838DC3FF243FCBFF2942 C8FF263FC5FF243CC3FF1831C1FF838BC0FFC5C5C7FFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC7C7C8FF8F95BFFF1221ADFF1B29ACFF1B28ABFF1D28AAFF1E29 A9FF202AA8FF232BA7FF262DA7FF2A31A8FF2F34A8FF3F44AEFFAEA3C570F9F8 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607BE5FFAAB1D1FFCBCB CBFFCBCBCBFFCBCBCBFFCBCBCBFFCCCCCBFFC9C9CAFF8F99C8FF3952D0FF3D54 CCFF3950CAFF364CC7FF2A40C5FF949AC5FFCACACBFFCCCCCBFFCBCBCBFFCBCB CBFFCBCBCBFFC9CACBFF9398C2FF2533B4FF2E3BB4FF303BB3FF323CB2FF353E B2FF3941B2FF3D45B2FF4349B3FF484DB4FF4B4FB4FF5659B8FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF607AE5FFB1B7D2FFD0D0 D1FFD1D1D1FFD1D1D1FFD1D1D1FFD1D1D1FFCACBCEFF919BCAFF566BD7FF596C D4FF5668D2FF5265D0FF495CCEFF959CC6FFCDCDCEFFD1D1D1FFD1D1D1FFD1D1 D1FFD1D1D1FFCFCFD0FF9EA2C6FF444FBEFF4C57BFFF4E58BDFF5058BCFF5159 BCFF5259BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF6580E6FF617BE4FFC6C9D2FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD6D6D5FFCCCDD2FF8D99CEFF596FD8FF5D71 D6FF5D70D3FF5C6ED2FF5669D2FF939BC8FFCFCFD2FFD6D5D5FFD5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFBABCCEFF505BC3FF5660C2FF545EC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF637FE7FF7689D8FFD7D8DBFFDBDB DBFFDBDBDBFFDBDBDBFFDBDBDBFFDCDCDBFFCBCDD7FF7E8CCFFF5A70D8FF5D71 D6FF5D6FD3FF5C6ED2FF5769D2FF818AC7FFCFD0D7FFDBDBDBFFDBDBDBFFDBDB DBFFDBDBDBFFDBDBDAFFCDCED6FF5F69C0FF545EC2FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6583E9FF6681E7FF607CE6FFA5AFD7FFDEDEE0FFE0E0 E0FFE0E0E0FFE0E0E0FFE0E0E0FFE2E2E0FFC7CADAFF6A7BD0FF5C71D8FF5D71 D6FF5D6FD3FF5C6ED2FF596BD2FF6D78C7FFCDCED8FFE1E1E0FFE0E0E0FFE0E0 E0FFE0E0E0FFE1E1E0FFDADADEFF8C92C6FF4F5AC1FF545EC0FF535CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6683E9FF627FE8FF7389DDFFD6D8DFFFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E3FFB7BDD7FF5A70D7FF5E72D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6CD1FF5969CDFFBDC1D2FFE4E4E4FFE5E5E5FFE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFC6C8D7FF5B65BFFF525CC0FF545CBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6684EAFF6381EAFF6781E2FFB5BDDAFFE4E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFDDDEE3FF919CD3FF5970D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5C6DD1FF5566D0FF969DC8FFE0E1E3FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE1E2E4FF9EA3CAFF525BBDFF525BBFFF535B BDFF5359BBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB1A6C670F9F7 F910FFFFFF01EFEAEC20A39BBD937092F6FF6A8AF2FF6989F0FF6888EFFF6887 EEFF6786EBFF6282EBFF6783E4FFA6B1DCFFE1E2E3FFE6E6E5FFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E5FFCDD1DEFF6679D5FF5E73D9FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5A6ACFFF6572C8FFCFD1DAFFE5E5E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E6FFE7E7E6FFDBDCE0FF8F95C8FF515ABBFF5058 BDFF535ABBFF5258BAFF5257B9FF5156B7FF4F53B5FF575BB9FFB2A8C86FF9F8 F910FFFFFF01EFEAED20A39BC1937092F5FF6A8AF2FF6989F0FF6888EFFF6686 EFFF6081ECFF758DE1FFB1BADEFFE0E1E3FFE6E6E5FFE6E6E6FFE5E5E5FFE6E6 E6FFE5E5E5FFE6E6E6FFE2E3E5FF99A3D4FF5A70DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5666CDFF99A0C9FFE4E4E5FFE6E6 E6FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFDBDCE0FF9EA2CBFF5D64 BBFF4B52BAFF5056BAFF5157B9FF5156B7FF4F53B5FF575BB9FFA596B775F7F5 F71000000000FDF6FF159D99CE8E6B8FF6FF6487F4FF6284F2FF6283EEFF768F E3FFA1AFDDFFCCD0E0FFE4E4E4FFE7E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE5E5E5FFC5C8D9FF6277D9FF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5A6ACEFF5F6EC9FFC9CBD5FFE6E6 E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE7E7E6FFE2E2E3FFC3C5 D7FF9093C3FF5E63B5FF4A50B5FF484EB5FF484CB4FF5256B8FF9580A473FFFF FF05B4B4B413D7D6D793C3C2D6C9A3B4E5FFA7B5E0FFB2BCDEFFC5CBDEFFD5D9 E3FFE0E1E4FFE6E6E5FFE6E6E6FFE5E5E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5 E5FFE6E6E6FFDCDDDFFF7687D5FF5E74DCFF6074DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5867CDFF737EC7FFE1E1 E0FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FFE6E6 E5FFDFDFE3FFD3D3DEFFBEC0D2FFABADCBFF9B9DC7FF9799C8FFC3BDC8BDD4D3 D487B2B2B222E0E0E0FFE4E4E5FCE1E2E5FFE2E3E5FFE3E3E4FFE5E5E5FFE6E6 E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6 E6FFE4E4E2FF8897D4FF5F76DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5867CBFF888F C6FFE8E8E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE3E3E4FFE1E1E3FFE1E1E3FFE4E4E4FBDFDF DFF8B2B2B223E1E1E1FFE7E7E7FFE7E7E6FEE7E7E6FFE7E7E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E7FFE8E7 E5FF8E9CD5FF6079DEFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 C9FF8C93C8FFE8E8E4FFE7E7E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE7E7E6FFE7E7E6FFE7E7E6FEE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE6E7E7FFE1E1E2FF8797 D5FF6079E0FF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF888EC5FFE3E3E2FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FFE1E1 E1FFB2B2B223E1E1E1FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E7FFE5E5E7FFC9CCDCFF788BDAFF617B E1FF627ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5562C5FF7179C3FFCBCCD9FFE6E6E7FFE8E8E7FFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE1E1 E1FFB2B2B223E2E2E2FFE8E8E8FFE8E8E8FEE8E8E8FFE8E8E8FFE8E8E8FFE9E9 E8FFE9E9E8FFE7E7E6FFE1E2E7FFD3D6E3FF99A7D9FF657EE1FF627CE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF545FC4FF5A64C2FF959AC9FFD0D1DCFFE1E1E5FFE7E7 E6FFE9E9E8FFE9E9E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FEE8E8E8FFE2E2 E2FFB2B2B223DFDFDFFFE5E5E5FEE4E5E6FFE5E5E5FEE2E3E4FFDEDFE5FFD9DC E6FFD0D5E5FFBDC6E2FF95A5DEFF6B84E2FF607CE6FF647DE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF555FC3FF505AC1FF5D66BFFF8C91C6FFB6B8 D2FFCACCDBFFD6D6DFFFDCDDE1FFE2E3E4FFE3E4E4FEE5E5E5FFE4E4E4FEDEDE DEFDB1B1B114D7D7D79CD3D1DAC0AAB1D5FFACBAE8FEA5B4E3FF97A9E3FF879C E2FF718BE3FF6180E9FF607FEAFF6480E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF525CC0FF4D56BEFF4F57 BBFF6268BAFF787CBEFF8B8EC3FF9A9DC9FF9B9ECAFEA09CBEFFD5D3D8BAD4D4 D4950000000000000000BBB4CF546367B2FF6D91FCFF6183F1FE6384F0FF6484 EFFF6585ECFF6684EAFF6683E9FF6681E7FF6580E6FF657EE4FF647EE3FF637D E1FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5E73D7FF5D71 D6FF5D6FD3FF5C6ED2FF5B6DD1FF5C6BCFFF5B6BCEFF5A69CDFF5968CCFF5966 CAFF5764C8FF5663C5FF5761C4FF5660C3FF555FC2FF545EC0FF545CBFFF535B BDFF5057BBFF4D54B9FF4B51B8FF474DB4FE4E54BBFF50418BF9D5CFE2450000 000000000000FFFFFF06D8D1DA3B7B6E9CCA7B8FE1FF6C8FF6FE6686EFFE6887 EEFF6786EBFF6684EAFF6583E9FF6581E7FF647FE6FF647DE4FF637DE2FF627C E0FF617ADFFF6179DDFF6077DCFF6076DBFF5F74DAFF5F74D8FF5D72D7FF5C70 D5FF5C6FD3FF5B6DD2FF5B6CD1FF5B6ACFFF5A6ACDFF5968CCFF5867CBFF5865 C9FF5764C8FF5663C5FF5661C4FF5660C3FF555FC2FF545EC0FF535CBFFF535B BDFF5259BBFF5056B9FF4D53B7FE585EBEFF6460ADFF7B6895AEE7E2E929FFFF FF0300000000FFFFFF02F8F4F419BBAEBE6A7E77A7E07B89D4FF7C9AF7FF6D8D F4FF6688F1FF6587F0FF6585EFFF6986EDFF6A88ECFF6A86EBFF6A85EAFF6984 E7FF6882E6FF6881E4FF677FE3FF667EE2FF667DE1FF657CDFFF657ADEFF6378 DCFF6377DAFF6276D9FF6275D7FF6273D6FF6172D4FF6071D3FF5F6FD2FF5F6D D0FF5E6CCFFF5C6BCCFF5A67CAFF5561C7FF5460C6FF535FC4FF525DC3FF525C C1FF565FC1FF6269C5FF7279CBFF6F6AADFF776491D3C4B8C650FCFAFA0E0000 00000000000000000000FFFFFF05F9F7F620BFB2C05D978DB2A47973A9DF6F6C ABFC6968AAFF6A68AAFF6967A9FF6B68A8FF6B68A7FF6B67A7FF6B66A7FF6B66 A5FF6A65A4FF6A65A4FF6A63A3FF6963A3FF6862A2FF6862A1FF6861A0FF6860 9FFF675F9EFF675F9EFF675E9DFF675D9CFF665D9CFF665C9BFF655B9AFF655A 99FF645A98FF645997FF635796FF615595FF615494FF605393FF605392FF6052 91FF625392FF65538DFF6F5B8BEA917F9EAEC0B2BF56FEFDFC17FFFFFF020000 0000000000000000000000000000FFFFFF04FFFFFF10DBD1D827C1B6C745C5BE D157B3A8BB62A696AA66A898AB66A797AB66A797AB66A797AA66A797AB66A797 AA66A796AA66A796AA66A796AA66A796AA66A696AA66A696A966A695A966A695 A966A695A966A695A866A695A866A694A866A694A866A694A866A694A866A694 A766A594A766A593A766A594A766A694A766A693A766A593A766A593A666A593 A666A593A665B5A7B95FC1B4C351DDD3D831FFFFFF11FFFFFF03000000000000 00000000000000000000000000000000000000000000FFFFFF02FFFFFF07FFFF FF0AFFFFFA0CF6EFEA0CF7F1EB0CF7F1EB0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1 EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F1EC0CF7F2EC0CF7F2 EC0CF7F2EC0CF7F2EC0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2ED0CF7F2 ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F2ED0CF8F3ED0CF8F3ED0CF8F3EE0CF8F2 ED0CF8F3EE0CFFFFFF0BFFFFFF09FFFFFF05FFFFFF0100000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F8000000001FFFFFE00000000007FFFFC00000000001FFFFC00000000001 FFFF800000000000FFFF800000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF800000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF800000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFF000000000000FFFF000000000000FFFF000000000000 FFFF000000000000FFFFC00000000001FFFF800000000000FFFF800000000001 FFFFC00000000001FFFFE00000000003FFFFF80000000007FFFFFFFFFFFFFFFF FFFF280000004000000080000000010020000000000000420000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000F7F7FA01FBFBFC04FCFCFC05FBFB FD03F6F6F90100000000F7F6FA0100000000F6F6F901F6F6F901F6F6F901F7F6 F901F6F6F901F6F6F901F7F6F901F6F6F901F7F6F901F6F5F901F6F5F901F6F5 F801F6F6F901F6F6F901F6F6F901F5F5F801F6F5F801F6F5F801F6F6F901F6F6 F901F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801FCFCFD04FCFC FD07FDFDFD08FCFCFD08FCFCFD08FDFDFD08FDFDFD08FCFCFC07FCFCFD04F5F4 F701000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000FBFA FB01FBFBFC04FCFCFD0EFAF9F914F4F0F117F0EDF01BF4F1F325F4F1F32BF4F1 F324F1EDEF1BEEE9ED16EFEAED16EEEAED16EDE9EC15EFEAED16EDE9EC15EFEB ED16EFEAED16EFEBED16EFEAED16EEEAEC16EFEAED16EFEAED16EFEAED16EFEA ED16EFEAED16EFEAED16EEE9EC16EEEAED16EFEAED16EFEAED16EDE9EC15EFEA ED16EEEAED15EFEBEE16EFEBEE16EFEBED16EFEBEE17F2EEF01BF4F1F327F6F3 F533F5F3F438F5F3F438F5F3F438F5F3F438F5F3F438F4F2F333F4F2F326F4F1 F41AFBF9F913FCFCFC0DFBFBFB05F9F8F9020000000000000000000000000000 0000000000000000000000000000000000000000000000000000FDFDFD02FBFB FC0CF8F7F822E9E5E83ED5C8C95AA289927090748A80977C908A93778A979980 92879073897E8D6F867A8D6F867A8D70867A8D6F867A8D70867A8D70867A8C70 86798D70867A8D7086798D70857A8D70857A8D7085798D70857A8E6F867A8E6F 867A8E6F867A8E70867A8D6F857A8D70867A8D70867A8C6F867A8D7086798D70 857A8C70867A8D7086798D71867A8D71867A8D70867A92768B80977B908E9477 89A094788AA795788BA794778AA794788AA795788AA6917486A194788C8EA48E A275D7CACD58E4DEE53DF4F2F428FBFBFC16FAFAFB0600000000000000000000 00000000000000000000000000000000000000000000FCFCFD02F9F9F912F1EF F234C6BCCB696A4E72C4412B68F63B2E74FD48448DFD484793FE474693FD4645 92FE454391FE454290FE444190FE44408FFE443F8DFE433E8DFE433E8CFE423D 8BFD423C8AFE423B8AFE413B88FD413A87FE413986FE403985FE403785FE3F37 84FE3F3683FE3F3582FE3E3481FE3D3480FE3D3380FE3D337FFE3C327EFD3C31 7DFE3C317CFE3B307BFE3B2F7BFE3B2E7AFD3A2D79FE3A2C79FE3A2B78FD392A 77FE392A77FE392976FE382875FE382874FE382773FE372771FE372672FE2F16 59FD2B0C52FD4A2B63D7AB9CB085E0DAE14DF7F7F921FCFCFC09000000000000 00000000000000000000000000000000000000000000FAFAFB0DEFEDF034A699 B084493B7BEF6C79C9FD4C6EE1FD3E67EAFD355EE8FE325CE6FE3059E4FD2E57 E2FE2E55E1FE2D53DFFE2C52DEFE2B51DCFE2A50DAFE294DD8FE284CD7FE284A D5FD2748D4FE2647D2FE2645D0FD2544CFFE2543CEFE2442CCFE2340CBFE233F C9FE223DC7FE213CC6FE203AC4FE1F38C2FE1F37C1FE1E35BFFE1E34BEFD1D33 BCFE1C31BBFE1B30B9FE1B2EB8FE1A2DB6FD192BB4FE192AB2FE1828B1FD1727 AFFE1726AEFE1625ACFE1523AAFE1522A9FE1420A7FE131FA6FD121DA4FE1923 A6FD1C219EFD34339BFD4C3A7DFD553563CACCC3D055F8F7F921FBFAFB060000 000000000000000000000000000000000000F7F7F904F6F5F71FBFB7CC694946 93F76A8BF0FD315DE9FD2B57E6FE2854E5FE2550E3FE234EE0FF224CDFFE2149 DDFF2047DCFF1F46DAFF1F44D8FF1D43D6FF1D41D4FF1C40D3FF1A3ED1FF1A3D CFFE193BCEFF183ACCFF1839CBFE1737C9FF1736C7FF1635C6FF1533C4FF1532 C3FF1430C1FF132EBFFF122CBDFF112ABBFF1129BAFF1027B8FF0F26B7FE0E25 B5FF0D23B3FF0D22B2FF0C20B0FF0B1FAFFE0B1DACFF0A1BAAFF0A1AA9FE0918 A7FF0817A6FF0816A4FF0614A2FF0613A1FF05119FFF04109EFF040E9CFF030C 9AFE030B99FE000695FE070F9BFC38318AFD4F3265CDDCD6DE4DFAFAFA16F5F5 F70200000000000000000000000000000000FAFBFC0BD8D5E33C4A4592D95B82 F2FD315EEAFD2D59E8FE2A56E6FE2753E5FE2451E3FE234FE1FE214CE0FE2049 DEFE2048DDFE1F47DBFE1E44D9FE1D43D7FE1C42D5FE1C41D4FE1A3FD2FE1A3D D0FE193CCFFE183ACDFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F26B8FE0E25 B6FE0D23B4FE0D22B3FE0C20B1FE0B1FB0FE0B1DADFE0A1BABFE0A1AAAFE0918 A8FE0817A7FE0816A5FE0614A3FE0613A2FE0511A0FE04109FFE040E9DFE030C 9BFE020B9AFE020A98FE010895FE050A96FC302A8EFDA395AF87F3F1F429F8F8 FA05000000000000000000000000B6B6B608E2E2E419C2C4E05D4B69D7F65278 EDFD315EE9FE2E5AE8FE2956E6FF2652E4FD2350E2FF224DE0FF214BDFFD204A DDFF2049DCFF1E46DAFF1E44D9FF1D43D7FF1C42D4FF1C40D3FF193FD1FF1A3D D0FD193BCEFF173ACCFF1839CCFD1736C9FF1735C8FF1534C6FF1533C5FF1532 C4FF132FC2FF122EBFFF112BBDFF112ABBFF1129BAFF1026B8FF0F26B8FD0E24 B5FF0C23B3FF0C22B2FF0B20B0FF0B1FB0FD0A1DACFF091AABFF0A1AAAFD0818 A8FF0817A6FF0816A4FF0614A3FF0613A2FF0511A0FF04109FFF040E9DFF040C 9BFF030C9AFE040C99FF060B97FE060894FE1F229EFD3C2369DFD8D5DB40D2D2 D312B2B2B20300000000A6A6A605BDBDBD60C8C8C872B2B4CDA98597D5FD6B87 DEFE6D87DFFE6985DEFF4A6EE2FE3F65E1FD3860E0FF3158DEFF2850DEFD214A DDFF1F48DDFF1E46DAFF1E44D8FF1D43D6FF1C42D4FF1C40D4FF1A3FD2FF1A3D D0FD193CCFFF183ACDFF1839CCFD1737CAFF1735C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABBFF1128BBFF1027B9FF0F26B8FD0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FD0B1DADFF0A1AABFF0A1AAAFD0817 A8FF0817A7FF0816A5FF0614A3FF0512A1FF0814A0FF111BA0FF1821A2FF2027 A2FF252CA3FF3C42A8FE4F53ABFE4C4FA5FE5052A6FD564D8EFDC8C7C4A7C0C0 C07BB6B6B62D00000000A1A1A10CCFCFCFF7D8D8D8FCD8D8D6FCD8D8D7FED9D8 D6FED8D7D5FED9D8D6FED9D8D6FFD1D4D9FEBEC3D4FFA3ADD0FF7187D2FE3A5E DCFF274EDCFF2148DAFF1D44D9FF1D43D6FF1C42D4FF1B40D4FF1A3FD2FF193C CFFE193BCFFF1839CCFF1838CCFE1737CAFF1736C8FF1535C7FF1433C5FF1432 C4FF1330C1FF132EC0FF122BBEFF1129BCFF1128BBFF1027B9FF0E26B7FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1EB0FE0A1CADFF091BABFF0A1AA9FE0918 A8FF0817A6FF0917A5FF0C19A4FF161DA4FF3840AAFF7E82B9FFACAEC8FFC6C7 D4FFD6D7D6FFD8D8D5FFD8D9D7FFD9D9D8FEDADAD9FEDCDBD9FDD9D9D9FCD8D8 D8FDC0C0C07400000000A1A1A10CCFCFCFF3D6D6D6FCD5D5D5FDD6D6D6FED6D6 D7FED5D5D6FED6D6D7FED4D5D6FED4D5D6FDD5D6D7FED8D9D9FED9D9D7FDC7C9 D0FE8596D2FE4A67D6FE2C4FD7FE1E44D6FE1C42D4FE1C41D3FE1A3FD2FE1A3D D0FD193CCFFE183ACDFE1839CCFD1737CAFE1735C8FE1635C7FE1532C5FE1532 C4FE1430C2FE132EC0FE112CBEFE112ABCFE1129BBFE1027B9FE0F26B8FD0E25 B6FE0D22B4FE0D22B3FE0C20B1FE0B1FB0FD0B1DADFE0A1BABFE0A1AAAFD0919 A8FE0D1CA6FE2530AAFE4B54B2FE9FA3C3FED9D9D8FEDDDDDCFED6D7D7FED5D5 D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D6FED5D5D5FDD6D6 D6FDC0C0C07300000000A1A1A10DCFCFCFF5D5D5D5FDD5D5D5FDD6D6D6FED6D6 D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FDD6D6D6FED5D5D5FED5D5D6FDD4D4 D6FED4D5D6FECCCED6FE909DCCFE3C5CD5FE2549D4FE1C41D3FE1A3FD1FE193D D0FD193BCEFE1739CCFE1839CBFD1636CAFE1635C8FE1535C7FE1532C4FE1532 C3FE142FC2FE122DBFFE122BBDFE112ABCFE1128BAFE1027B9FE0F26B8FD0E25 B5FE0D22B4FE0D22B2FE0C20B1FE0B1EAFFD0B1DADFE0A1BABFE0B1BA9FD1826 AAFE4650AFFEACAEC9FED5D6D9FED5D5D7FED5D5D6FED5D5D5FED5D5D5FED5D5 D5FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED6D6D6FED5D5D5FED5D5D5FDD5D5 D5FEC0C0C07400000000A1A1A10DCFCFCFF5D4D4D4FED4D4D4FED5D5D5FFD5D5 D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FED5D5D5FFD4D4D4FFD4D4D4FED5D5 D5FFD4D4D4FFD4D3D5FFD5D5D7FFB7BCD0FF6379CFFF294CD2FF1C40D2FF193D CFFE193CCEFF183ACDFF1839CCFE1737CAFF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0B1FB0FE0B1DADFF0E20ABFF2B38ADFE7F84 BEFFCBCCD4FFD7D7D7FFD3D3D4FFD4D4D4FFD5D5D5FFD4D4D4FFD5D5D5FFD4D4 D4FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD5D5D5FFD4D4D4FFD4D4D4FED4D4 D4FFC0C0C07400000000A1A1A10DCECECEF5D3D3D3FED3D3D3FED4D4D4FFD4D4 D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FED3D3D3FFD3D3D3FFD4D4D4FED4D4 D4FFD4D4D4FFD3D3D4FFD2D2D3FFD3D3D4FFC8CAD4FF8290CBFF3252D1FF1C3F CFFE193CCEFF1739CDFF1839CCFE1737CAFF1736C8FF1635C6FF1532C4FF1532 C3FF1430C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0D22B3FF0C20B1FF0C1FB0FE1324AEFF3B48B3FFA8ACCBFED4D4 D7FFD3D3D4FFD2D2D3FFD3D3D3FFD3D3D3FFD4D4D4FFD3D3D3FFD4D4D4FFD3D3 D3FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD4D4D4FFD3D3D3FED4D4 D4FFC0C0C07400000000A2A2A20CCDCDCDF4D2D3D2FDD2D2D2FDD3D3D4FED3D3 D4FED3D3D3FED4D4D3FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED4D4D4FED4D4 D4FED4D4D4FED4D4D4FED3D3D3FED2D2D3FED2D2D3FECCCDD3FE939FCEFE3855 CEFE1C3DCEFE183ACCFE1839CCFE1737CAFE1736C8FE1635C7FE1533C5FE1532 C4FE1430C2FE132EC0FE122CBEFE112ABCFE1129BBFE1027B9FE0F25B8FE0E25 B6FE0D23B4FE0D22B2FE0D21B1FE1426B0FE4955B5FEB3B6CEFED3D4D5FED2D2 D2FED2D2D3FED3D3D3FED3D3D3FED3D3D3FED4D4D4FED3D3D3FED4D4D4FED3D3 D3FED4D4D4FED4D4D4FED4D4D4FED3D3D3FED3D3D3FED3D3D3FED2D2D2FDD3D3 D3FEBFBFBF7300000000A2A2A20CCECECEF3D3D3D3FDD2D2D2FDD3D3D3FED3D3 D3FED3D3D3FFD3D3D3FFD3D3D3FFD3D3D3FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD2D3D4FFCFD0D2FF9AA3 CBFE3552CCFF193BCDFF1839CBFE1736CAFF1735C7FF1635C6FF1533C4FF1531 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D23B4FF0E22B3FF1226B2FF4956B8FEB5B8CEFFD2D2D3FFD1D2D2FED3D3 D3FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD3D3D3FFD4D4D4FFD2D2 D2FFD3D3D3FFD3D3D3FFD2D2D3FFD2D2D3FFD2D2D3FED2D2D2FED2D2D2FDD3D3 D3FDBFBFBF7300000000A2A2A20CCCCCCCEFD1D1D1F9CFCFCFFCCFD0D3FECFD0 D3FED0D0D0FFD3D2D1FFD4D4D3FFD3D3D4FED2D2D2FFD2D2D2FFD3D3D3FED3D3 D3FFD3D3D3FFD3D3D3FFD2D2D2FFD2D2D2FFD3D3D3FFD2D2D2FFD1D1D2FFC7C9 CFFE8893C9FF2947CCFF193ACBFE1737C9FF1736C8FF1635C7FF1533C5FF1532 C4FF1430C2FF132EC0FF122CBDFF112ABCFF1129BBFF1027B9FF0F26B8FE0E25 B6FF0D24B4FF1124B2FF3C4BB6FFAAAECFFED1D2D5FFD2D2D2FFD3D3D3FED2D2 D2FFD3D3D3FFD3D3D3FFD3D3D3FFD2D2D2FFD3D3D3FFD2D2D2FFD2D2D3FFD2D2 D2FFD4D4D4FFD5D5D4FFD4D4D2FFCECED1FFCCCCD0FECDCDD0FED0D0D0FAD1D1 D1F9BEBEBE7100000000A4A4A408C7C7C7A9CFD0CFC0B7B4C0E8A1B0DAFE9EAD D9FEA2ADD2FEACB5D1FEB9BED1FEC6C8D0FECECED0FED0D1D1FED1D1D2FED1D1 D1FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1 D2FEC1C4D0FE7181C7FE203FCAFE1837C9FE1736C8FE1635C7FE1433C5FE1432 C4FE1430C2FE132EC0FE122CBEFE1129BCFE1129BAFE1027B8FE0F26B7FE0E25 B6FE1025B5FE2B3CB4FE959BC6FECCCDD1FED0D0D1FED1D1D1FED1D1D1FED2D2 D2FED2D2D2FED2D2D2FED2D2D2FED1D1D1FED1D1D1FED1D1D2FED2D2D3FECECE D1FEC0C1CEFEAFB0C9FEA4A4C3FE9292BDFE8C8CBAFE9293BCFECAC8CBCDCDCC CDB4BDBDBD4F0000000000000000EFF0F109ECEAF03B7C6C9CBB3E6BF1FE3361 ECFE2F5DEBFF335CE2FF516FD3FF7D8FCDFE9EAAD1FFB3BAD1FFCCCDCFFED2D2 D2FFD1D1D1FFD2D2D1FFD1D1D1FFD1D1D1FFD2D2D2FFD1D1D1FFD1D1D1FFD0D0 D0FED0D0D0FFABB1CDFF4B61C7FE1A39C9FF1736C8FF1635C6FF1533C4FF1532 C4FF1430C2FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF0F26B7FE0F26 B6FF182CB5FF7780C0FFC5C7D0FFD1D1D3FED1D1D1FFD1D1D1FFD1D1D1FED1D1 D1FFD2D2D2FFD1D1D1FFD1D1D2FFD0D0D1FFD3D3D3FFC4C5CDFFACAECAFF9194 C1FF5458A9FF1B219AFF030695FF020494FF020392FE15199CFEC3B5C864F1F0 F113C9C9CA010000000000000000F4F4F50EEDEBF03F7E709DBC4570F0FD3A66 ECFD3562EAFE315DE8FE2D59E7FE2955E5FD3259DEFE5471D6FE96A3CEFDC1C4 D2FED0D0D1FED0D0D1FED0D0D0FED1D1D1FED1D1D1FED1D1D1FED1D1D1FED0D0 D0FDCFD0D0FECDCDCFFE959FC9FD2F4AC6FE1836C8FE1635C7FE1533C4FE1532 C3FE142FC2FE122DBFFE122CBDFE112ABBFE1128BBFE1027B9FE1027B8FD1027 B6FE4555B9FEABB0CAFED0D0D1FECFCFD0FDD1D1D1FED0D0D0FED0D0D0FDD1D1 D1FED1D1D1FED0D0D0FED0D0D1FECDCED0FEBABCCCFE777BB6FE2C34A3FE0811 9BFE020A99FE020A98FE020A96FE020895FE010593FD171C9DFDC3B5C868F3F2 F318D7D7DA020000000000000000FCFDFD0BEFECF13D7E6F9CBB4A73F1FD3F69 EDFD3864ECFF345EE9FF305BE7FF2D57E5FD2A55E3FF2651E2FF2E55DDFD7388 CFFFB2B9CFFFCFCECEFFCFCFCFFFD0D0CFFFCFCFCFFFD0D0D0FFCFCFCFFFCFCF CFFDCFCFCFFFCECED0FFB8BBCBFD6173C5FF1837C8FF1735C6FF1533C5FF1532 C4FF1430C1FF132DC0FF122CBEFF112ABCFF1129BBFF1027B9FF1128B8FD1F34 B7FF9097C6FFCECFD0FFCECECFFFD0D0CFFDCFCFCFFFD0D0D0FFCFCFCFFDCFCF D0FFCFCFD0FFCECECFFFCCCCCFFFA3A6C7FF4E55ACFF0D169FFF050F9DFF040D 9BFF030C9AFF010A98FF010795FF000694FF000392FD161B9CFDC3B4C766F7F6 F715000000000000000000000000FCFDFD0CEFEDF23E80709DBC527AF2FD466E EEFD3F68EBFF3862EAFF345EE8FF2F5AE6FD2B56E3FF2853E1FF2851E0FD2C53 DCFF5A75D1FFB4BACDFFCECECFFFCECFCEFFCFCFCFFFCFCFCFFFCFCFCFFFCECE CEFDCECFCFFFCDCDCEFFCCCDCCFD949DC6FF2E49C5FF1635C6FF1533C5FF1431 C4FF1330C1FF132EC0FF112BBEFF112ABCFF1129BBFF1128B9FF0F26B8FD4E5C BCFFAEB2CAFFCECECFFFCECECEFFCFCFCFFDCFCFCFFFCFCFCFFFCECECEFDCFCF CFFFCDCDCFFFCBCBCEFFA2A4C4FF323BA9FF0A16A1FF06119FFF040E9DFF030C 9BFF010A99FF010998FF000896FF010795FF000493FD171C9DFDC3B5C867F8F6 F815F4F4F9010000000000000000FDFDFE0BEFEDF13E81729DBB5C82F2FD4E75 EEFD466FECFF3F69EAFF3962E8FF345EE7FD2F59E4FF2B55E2FF2952E0FD2750 DEFF2C52DCFF627BD2FFBEC1CDFFCDCECEFFCECECEFFCECECEFFCECECEFFCECE CEFDCECECEFFCDCDCDFFCDCECEFDB8BBC8FF6273C1FF1837C6FF1633C5FF1532 C3FF142FC1FF132EBFFF122CBDFF112ABBFF1129BAFF1129B9FF172CB8FD7D86 C2FFC6C7CBFFCCCDCDFFCDCDCEFFCECECDFDCECECEFFCECECEFFCDCDCDFDCDCD CDFFCCCCCFFFA6A9C4FF3A43ABFF0C18A2FF0611A0FF04109EFF030D9DFF030C 9BFF020B9AFF010A98FF010896FF010795FF000593FD171C9DFDC3B4C866F8F6 F816F4F4FA010000000000000000FDFDFE0CF0EDF23E83739DBC668AF3FE5A7E EFFE5076EDFF486FEBFF4168E9FF3B63E7FE355EE5FF3159E3FF2D55E1FE2A52 DFFF274FDDFF3255D9FF7C8ECCFFC8CACEFFCCCCCCFFCDCDCDFFCDCDCDFFCDCD CDFECDCDCDFFCDCDCDFFCCCCCDFEC6C7CBFF808CC6FF213EC5FF1634C5FF1431 C3FF1330C2FF132EC0FF122CBEFF112ABCFF1129BBFF1028B9FF3C4DB9FEA3A8 C6FFCECECDFFCCCDCDFFCDCDCDFFCECECEFECECECEFFCECECEFFCDCDCDFECCCC CDFFBDBECAFF4F58B0FF101EA4FF0713A2FF0511A0FF04109FFF040E9DFF030C 9BFF030B9AFF020B98FF020996FF020895FF000593FE171C9DFEC2B5C867F8F6 F816F4F4F9010000000000000000FDFEFE0BF0EDF23D83739DBC6C8DF3FD6587 F0FD5D80EEFF5479ECFF4B71EAFF456BE8FD3E65E6FF385FE3FF335AE2FD2F56 E0FF2C52DEFF2A4FDCFF4464D6FFA6AECCFFCDCCCEFFCBCCCCFFCCCCCCFFCCCC CCFDCCCCCCFFCCCCCCFFCBCCCCFDCACACBFF969EC7FF364FC3FF1634C5FF1531 C3FF1330C1FF132EC0FF122CBEFF112ABCFF122ABBFF1229BAFF6672BDFDBCBE C9FFCCCCCCFFCCCCCCFFCDCDCDFFCCCCCCFDCDCDCDFFCCCCCCFFCBCBCCFDCACB CCFF787DB7FF1A27A7FF0615A3FF0613A2FF0511A0FF04109EFF040F9DFF040D 9BFF030C9AFF030B98FF020996FF020896FF010694FD191E9EFDC2B4C766F8F6 F815F5F5FA010000000000000000FDFEFE0CF0EDF23D83739DBC6C8DF3FE698A F0FE6688EFFF6082EDFF597CEBFF5174E9FE496DE7FF4167E5FF3C61E2FE365C E1FF3157DFFF2E53DDFF3457D8FF6C81CFFFCCCCCCFFCACBCBFFCBCCCCFFCBCB CBFECCCCCCFFCCCCCBFFCBCBCBFECACACBFFB0B4C5FF5669C0FF1432C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122BBCFF122BBBFF1930B9FF7D87C2FEC5C6 CBFFCACACBFFCBCBCBFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCACACBFEB8B8 C6FF3642ADFF0A18A5FF0815A3FF0714A2FF0612A0FF05109EFF050F9DFF040E 9CFF040D9BFF030C99FF040B98FF040A96FF040994FE1C219FFEC2B4C767F8F6 F816F5F5FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF4FE6989 F0FE6888EFFF6787EEFF6484ECFF5F7EEBFE5678E9FF4E71E6FF476AE4FE4064 E2FF3B5FE0FF375ADEFF3155DBFF4B68D7FFB2B7CAFFCBCBCCFFCBCBCBFFCCCC CBFECBCBCBFFCBCBCBFFCBCBCBFECACACBFFC2C2C4FF727EBFFF1734C5FF1733 C3FF1430C2FF142FC0FF132DBEFF122CBCFF132CBBFF253ABAFF8B93C5FEC9CA CCFFCACBCBFFCBCBCCFFCCCCCCFFCBCBCBFECCCCCCFFCBCBCBFFCDCDCDFE8B8F BBFF2431A9FF0A18A6FF0815A4FF0714A3FF0713A1FF06129FFF06119EFF0710 9CFF060F9BFF060E9AFF070E98FF080E97FF090D96FE2026A0FEC2B4C767F7F6 F716F5F5FA010000000000000000FDFDFD0CEFEDF13D84739DBC6D8EF4FE6A8A F1FE6888F0FE6787EEFE6886EDFE6785ECFE6281EAFE5D7DE8FE5676E6FE4F6F E4FE486AE2FE4264E0FE3C5EDEFE4766DAFE8B99D0FECACACBFECACACBFECBCB CAFECBCBCBFECBCBCBFECACACAFEC9C9CAFEC7C7C5FE838DC0FE2540C5FE1A36 C4FE1733C2FE1631C1FE152FBFFE152DBDFE142CBCFE3347BAFE969CC3FEC9C9 CAFEC9CACAFECACACAFECBCBCBFECACACAFECBCBCBFEC9C9CAFED0D0CDFE5860 B3FE1422A8FE0C19A6FE0B17A5FE0A16A3FE0A15A2FE0A15A0FE0A149FFE0B14 9EFE0B139DFE0B139CFE0C139BFE0E149AFE0F1499FE272CA3FEC2B3C766F8F6 F815F5F5FA010000000000000000FDFEFE0CEFEDF13E84749DBC6C8DF4FE6989 F0FE6988F0FF6788EEFF6886EDFF6785ECFE6685EAFF6584E9FF6280E8FE5D7C E6FF5876E4FF5270E2FF4B6BE0FF4C6ADDFF798CD4FFC9CACBFFC8C9CAFFCACA CAFECACACAFFCACACAFFCACAC9FEC9C9CAFFC8C7C7FF8D96C1FF334CC4FF1F3B C5FF1C37C3FF1A35C1FF1933BFFF1832BEFF162FBDFF4455B9FFA1A5C3FEC9C9 C9FFC9C9C9FFCACACAFFCACACAFFCACACAFECACACAFFC8C8C9FFC6C6C8FE3D48 B1FF0F1EA9FF0F1DA7FF0E1BA6FF0F1BA5FF0F1BA3FF0F1AA2FF101AA1FF111A A0FF111AA0FF131B9FFF151B9EFF171D9EFF191E9DFE3135A8FEC1B3C767F7F6 F816F5F6FA010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EDFF6785ECFE6585EAFF6584E9FF6482E8FE6481 E7FF637FE6FF5F7CE5FF5C78E3FF5A75DFFF7C8FD6FFC8C9CCFFC7C8C9FFC9C9 C9FEC9C9C9FFC9C9C9FFC9C9C8FEC8C8C8FFC7C7C7FF989FC3FF445AC3FF2741 C7FF243EC5FF223BC3FF1F39C1FF1F37BFFF1B33BEFF5564BBFFACAFC2FEC8C8 C8FFC8C8C8FFC9C9C8FFC9C9C9FFC9C9C9FEC8C8C8FFC7C8C9FFACAFC2FE3441 B1FF1422ABFF1523AAFF1522A9FF1623A8FF1723A6FF1723A5FF1923A5FF1A24 A4FF1C24A4FF1F26A4FF2128A4FF2429A4FF282CA4FE4145AEFEC1B2C667F7F5 F815F6F6FB010000000000000000FDFEFE0CEFEEF13D84749CBB6C8EF3FE6A8A F0FE6988F0FE6787EFFE6987EEFE6785ECFE6684EBFE6684E9FE6582E8FE6481 E7FE6480E6FE647FE5FE647EE4FE657DE1FE8394D8FEC8C9CDFEC7C8C9FEC9C9 C9FEC9C9C9FEC9C9C9FEC8C8C8FEC8C8C8FEC7C7C7FEA3A9C4FE576AC6FE334C CAFE2F48C8FE2D45C6FE2A42C4FE2A40C2FE243CC1FE6572BDFEB4B7C3FEC8C8 C8FEC8C8C8FEC9C9C8FEC9C9C9FEC9C9C9FEC8C8C8FEC7C8C9FE9C9FBFFE3844 B3FE1F2DAFFE202EAEFE212DADFE222EACFE242EABFE242FAAFE2730AAFE2932 ABFE2C34ABFE2F36ABFE3339ABFE383CACFE3D40ACFE5357B6FEC0B2C667F7F5 F816F7F7FB010000000000000000FDFEFE0CEFEEF23E84749DBC6C8DF4FE6989 F0FE6989F0FF6888EFFF6987EEFF6785ECFE6685EBFF6684EAFF6583E8FE6482 E8FF6480E6FF647EE5FF647EE3FF667EE1FF8596D9FFCACBCEFFCACACBFFCBCB CBFECBCBCBFFCBCBCBFFCBCBCBFECACACAFFCBCBCAFFA8AEC8FF6375C8FF445B CEFF4057CCFF3D53CBFF3A50C8FF394EC6FF3348C5FF7480C1FFBCBDC6FECACA CBFFCACACAFFCBCBCBFFCBCBCBFFCBCBCBFECACACAFFCACACBFF9FA3C2FE4550 B8FF303CB5FF313EB4FF333DB3FF343EB2FF3740B2FF3942B2FF3C44B2FF3E46 B3FF4148B2FF444AB2FF474CB3FF4A4EB3FF4C4FB3FE5E62BBFEBFB1C667F7F5 F816F7F7FB010000000000000000FDFEFE0CF0EEF23E84749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6987EDFF6886EDFE6685EBFF6684EAFF6583E9FE6582 E8FF6581E6FF647FE5FF647EE4FF677FE1FF8899DAFFCECFD2FFCECECFFFCFCF D0FECFCFCFFFD0D0D0FFCFCFCFFECFCFCFFFCECECEFFA9AFCAFF6A7BCDFF576B D3FF5368D1FF5165D0FF4E62CDFF4E60CCFF495CCBFF7984C4FFBBBDC8FECECF CFFFCFCFCFFFD0D0CFFFD0D0D0FFD0D0CFFECFCFCFFFCFCECFFFA5A8C4FE5761 BDFF4550BDFF4752BCFF4851BBFF4952BAFF4A53B9FF4C54B9FF4D54B8FF4E54 B8FF4E54B7FF4F54B7FF4F54B6FF4F53B5FF4E52B4FE5F63BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFDFD0CEFEEF13E84739DBC6D8EF4FE6A8A F1FE6989EFFE6888EEFE6987EEFE6886EDFE6685EBFE6684EAFE6683E9FE6582 E7FE6581E7FE657FE5FE647EE4FE6981E1FE909FDAFED1D2D3FED2D2D3FED2D2 D3FED3D3D3FED3D3D3FED2D2D2FED2D2D2FED0D0D0FEA7ADCCFE697BD0FE5E71 D5FE5C6FD3FE5B6ED2FE5A6DD1FE5A6CD0FE5869D0FE7B86C7FEB9BCCBFED2D2 D2FED2D2D2FED3D3D2FED3D3D3FED3D3D2FED2D2D2FED2D2D2FEB8BAC8FE6770 C3FE525CC2FE535DC0FE525CBFFE525BBEFE525BBCFE525ABBFE5158BAFE5157 B9FE5056B8FE4F55B7FE4F54B5FE4E53B5FE4E52B4FE5F62BBFEBFB1C667F7F5 F716F7F7FB010000000000000000FDFEFE0CEFEDF23E84749DBC6D8EF4FE6A8A F1FE6989F0FF6887EFFF6987EEFF6886EDFE6585EBFF6584E9FF6683E9FE6582 E7FF6580E7FF657FE5FF647EE3FF6D84E0FFA0ABD6FFD5D5D6FFD6D6D6FFD6D6 D6FED7D7D7FFD7D7D7FFD6D6D6FED6D6D6FFD2D2D1FFA3ABCDFF6578D4FF5E71 D5FF5C6FD4FF5B6ED2FF5B6DD1FF5B6DD0FF5B6BD0FF7681CAFFB6BACEFED5D5 D6FFD6D6D6FFD6D6D6FFD7D7D7FFD6D6D6FED6D6D6FFD5D5D6FFD0D0D0FE767E C5FF5560C2FF545EC0FF525CBEFF525BBDFF525ABCFF5259BBFF5158BAFF5157 B9FF5056B8FF4F55B7FF5055B6FF4F54B6FF4F53B5FE6063BCFEBFB0C667F7F5 F815F8F8FC010000000000000000FCFDFD0CF0EEF13E84749CBC6C8EF4FE6A8A F1FE6989F0FE6787EFFE6987EEFE6886ECFE6685EAFE6683EAFE6683E9FE6582 E8FE6581E7FE657FE5FE637EE4FE758BDEFEBDC1D0FED9D9DAFED9D9D9FEDADA DAFEDADADAFEDADADAFED9D9D9FED9D9DAFED1D1D2FE98A2CDFE5E73D7FE5E72 D6FE5C70D4FE5B6ED3FE5B6DD1FE5B6CD0FE5B6CCFFE6A77CBFEAEB3D0FED8D8 D9FED9D9D9FED9D9D9FEDADADAFED9D9D9FEDADADAFED9D9D9FEDBDBD9FE8E94 C5FE5C66C1FE555FC0FE535CBFFE535CBEFE535BBDFE535ABCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4E54B6FE4F52B5FE6062BCFEBFB1C667F7F5 F816F8F8FC010000000000000000FCFDFD0CF0EEF23E84749DBC6D8EF4FD6A8A F1FD6889F0FE6888EFFE6887EEFE6786EDFD6685EBFE6684E9FE6583E9FD6582 E7FE6580E7FE6580E5FE6881E1FE8D9CD8FEDAD9DAFEDEDEDEFEDFDFDFFEDFDF DFFDDFDFDFFEDFDFDEFEDEDEDEFDDDDEDEFEC9CBD4FE8894CEFE5D71D7FE5E72 D6FE5C70D4FE5C6ED3FE5C6ED1FE5B6DD1FE5C6CD0FE6371CCFEA7ADD1FDD9D9 DBFEDEDEDEFEDEDEDEFEDFDFDFFEDFDFDFFDDFDFDFFEDEDEDEFEDFDFDFFDB4B7 CFFE6971C4FE555FC1FE535DBEFE535CBEFE535BBCFE5359BCFE5259BBFE5258 BAFE5157B9FE5056B8FE5055B6FE4F53B6FE4F53B5FD6063BCFDBFB1C666F7F5 F816F8F8FC010000000000000000FCFDFD0CEFEEF23E84749DBC6C8EF3FE6989 F0FE6989F0FF6888EFFF6987EDFF6785ECFE6685EBFF6684EAFF6582E8FE6582 E8FF6581E6FF6580E5FF768CE0FFB8BFD8FFE3E3E4FFE2E2E2FFE3E3E3FFE3E3 E3FEE3E3E3FFE3E3E2FFE2E2E2FEE0E1E2FFBBC0D9FF7585D2FF5E73D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5C6CD0FF5E6ECEFF989FCBFED5D5 D9FFE2E2E3FFE2E2E2FFE3E3E3FFE3E3E3FEE3E3E3FFE2E2E2FFE1E1E2FED6D6 DBFF7D84C6FF5861C0FF535DBFFF525CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4E52B4FE5F62BBFEBFB1C567F6F5 F816F8F8FC010000000000000000FDFEFE0CF0EEF23E84739DBC6D8EF4FE6A8A F1FE6888EFFF6888EFFF6887EEFF6886EDFE6685EBFF6683E9FF6583E9FE6581 E7FF6581E7FF6983E3FF92A1D8FFDADBE0FFE3E3E4FFE5E5E4FFE4E4E4FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E4E4FEE0E0E2FFAEB6DAFF677AD4FF5E73D6FF5E72 D5FF5C6FD5FF5C6FD3FF5C6ED1FF5B6DD1FF5B6CD0FF5C6BCEFF828BC5FEC8C9 D5FFE3E3E4FFE4E4E4FFE4E4E4FFE4E4E4FEE5E5E5FFE5E5E5FFE4E4E4FEE3E3 E3FFB6B9D1FF6971C1FF545EBEFF535DBEFF535BBDFF535ABCFF5258BAFF5258 BAFF5157B8FF5056B8FF5055B6FF4F54B6FF4F53B4FE6063BCFEBFB1C667F6F5 F816F8F8FC010000000000000000FDFEFE0BF0EEF23D84739CBB6D8EF4FD698A F1FD6888EFFF6787EFFF6886EDFF6886EDFD6584EAFF6583EAFF6583E9FD6682 E7FF6883E6FF8296DDFFC8CCDAFFE3E4E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5 E5FDE5E5E5FFE4E4E4FFE5E4E5FDD6D7DDFF98A2D2FF6175D6FF5E73D6FF5E71 D5FF5D6FD5FF5B6ED2FF5B6DD1FF5B6DD1FF5B6CCFFF5C6BCEFF6774CAFDAEB3 D0FFDFDFDFFFE4E4E4FFE4E4E4FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE4E4 E4FFDEDEE0FF999EC8FF5D66BFFF535DBFFF535BBCFF525ABBFF5259BAFF5258 BAFF5056B9FF4F55B7FF4F55B5FF4F54B5FF4F53B5FD6063BCFDBEB0C567F6F4 F716F7F7FB010000000000000000FDFEFE0CF0EDF23E83749DBC6D8EF3FE6A8A F1FE6989F0FF6888EFFF6887EEFF6786ECFE6685EBFF6684E9FF6683E8FE6783 E7FF788EDFFFBCC3D8FFE2E2E2FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FEE5E5E5FFE4E4E4FFE4E3E4FEBEC3DAFF7585D3FF5F74D7FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6BCEFF5B6ACDFE8E96 CBFFD0D1DAFFE4E4E4FFE4E4E4FFE5E5E5FEE5E5E5FFE5E5E5FFE5E5E5FEE5E5 E5FFE3E3E4FFD3D3DDFF8F94C4FF5B65BEFF545CBDFF535ABCFF5259BAFF5258 BAFF5157B9FF5056B8FF5055B6FF4F54B6FF4F53B5FE6063BCFEBEB0C567F6F4 F716F8F8FB010000000000000000FDFDFE0BEFEDF23D84749CBB6C8EF4FE6989 F1FE6888F0FE6787EFFE6886EDFE6886ECFE6685EAFE6684EAFE6784E8FE8195 DDFEBAC2DCFEE0E1E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED7D9E0FE9DA7D7FE6276D8FE5F74D7FE5E72D6FE5D71 D6FE5D6FD5FE5C6FD2FE5C6ED1FE5B6CD0FE5B6CD0FE5B6ACEFE5B6ACDFE6D7A C8FEB8BCD4FEE2E2E2FEE4E4E4FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5E5FEE5E5 E5FEE5E5E5FEE4E4E4FED1D2DBFE9599C7FE5D65BCFE535BBCFE535ABBFE5258 B9FE5157B8FE4F55B7FE4F54B6FE4E53B6FE4E52B5FE5F63BCFEBAAABF68F6F4 F615000000000000000000000000F8F8F80DEFEDF33E8376AEBC6D8EF3FD6A8A F0FD6989EFFF6888EEFF6987EDFF6887ECFD6886EAFF6F8BE5FF96A5D8FDCBCF E1FFE0E0E2FFE5E5E6FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5 E5FDE4E4E4FFE4E4E4FFC0C6DEFD7888D4FF6074D9FF5F74D8FF5E72D6FF5D71 D6FF5D70D4FF5C6FD3FF5C6ED1FF5B6CD1FF5B6CD0FF5B6ACEFF5B6ACDFD5B6B CCFF9198C7FFD1D2D9FFE3E3E4FFE5E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE4E4E5FFD4D5DEFFAFB1CEFF6B72BEFF565DBAFF5359 BAFF5258B9FF5157B8FF5055B6FF4F54B6FF4F53B5FD6165BCFDA892A86FF1ED F017E1E1E3010000000000000000F5F5F60BEEECF43D8278BCBB6D8EF3FD698A F2FE6888F1FE6586F0FF6686EDFF768FE0FD9AAADBFFB9C2E1FFD3D6DEFDE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5 E5FDE4E4E4FFD1D4DDFF94A0D5FD6378D8FF6074D8FF5F74D8FF5E72D6FF5E71 D6FF5C70D5FF5B6FD3FF5B6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFD5969 CDFF6875C9FFAFB4D1FFDDDEE0FFE4E4E4FDE5E5E5FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E5FFDFDFE1FFC2C4D8FFA4A6CBFF7A7D B9FF5A5EB3FF4E54B7FF4E53B6FF4E53B6FE4F53B5FE6064BEFDA28AA171EFEB EE15D0D0D10100000000A7A7A704C9C9C957DBDBDB7C9F99C2D18CA3E5FE8EA1 DFFE96A6DCFFA2B0DBFFB6BEDAFFC9CFE1FED7D9E1FFE0E1E3FFE5E5E5FEE4E4 E4FFE4E4E4FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E4FFE4E4 E4FEDCDDE2FFACB4D8FF6A7FD8FE6075DAFF5F74D9FF5F74D8FF5D71D7FF5D71 D5FF5D6FD4FF5B6ED3FF5B6DD1FF5B6CD0FF5B6CCFFF5B6ACDFF5A6ACDFE5A6A CCFF5A6ACCFF7A85C6FFC5C8D7FFE4E3E3FEE4E4E4FFE5E5E5FFE5E5E5FEE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE5E5E5FFE4E4E4FFDBDBDFFFD0D0 DCFFBDBDD1FFA4A6C5FF9194BEFF8587BDFF797BBBFE8385C1FEB7ACB7A0D0D0 D062B9B9B927000000009F9F9F0BD7D7D7D1E2E2E2E1D6D5DCF4D0D5E3FED1D5 E2FED4D7E0FED9DADFFFE0E0DFFFE5E5E4FEE5E5E5FFE5E5E5FFE4E5E5FEE5E5 E5FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE4E4E4FFE0E0 E1FEBBC1D8FF7688D7FF6177DBFE6075D9FF5F74D8FF5F73D8FF5E72D7FF5E72 D6FF5D70D4FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5D6CC8FF8991CAFFCDCFDCFEE3E3E4FFE5E4E4FFE6E6E6FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4E4FFE6E6 E6FFE4E4E3FFDCDCDEFFD5D5DBFFD1D1DBFECCCDDBFECDCEDBFEDCDADCE9E1E1 E1DCC4C4C462000000009E9E9E0CD8D8D8F3E5E5E5FDE3E3E4FDE4E4E5FEE4E4 E5FEE4E4E5FEE3E3E4FFE4E4E5FFE4E4E4FDE4E4E4FFE5E5E5FFE5E5E5FDE5E5 E5FFE5E5E5FFE4E4E4FFE5E5E5FFE5E5E5FFE4E4E4FFE3E3E4FFE2E2E3FFC6CA DBFD8292D5FF6279DBFF6077DAFD5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CCFFF5B6ACEFF5A6ACDFD5969 CDFF5868CBFF5968CAFF606DC8FF979ECBFDD5D6DDFFE3E4E4FFE4E4E4FDE5E5 E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5E5FFE4E4E4FFE4E4 E4FFE4E4E4FFE4E4E4FFE4E4E4FFE4E4E5FEE4E4E5FEE4E4E4FEE4E4E4FDE5E5 E5FDC6C6C673000000009E9E9E0CD8D8D8F4E5E5E5FDE5E5E5FDE6E6E6FEE6E6 E6FEE6E6E6FFE5E5E5FFE5E5E5FFE6E6E6FEE6E6E6FFE6E6E6FFE6E6E6FEE6E6 E6FFE5E5E5FFE5E5E5FFE6E6E6FFE5E5E5FFE4E5E5FFE3E3E4FFC8CCDCFF8191 D5FE667CDBFF6078DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6DD2FF5B6DD1FF5B6CD0FF5B6ACEFF5A69CDFE5969 CDFF5868CBFF5867CAFF5966C9FF636FC8FE9A9FCBFFD6D6DEFFE4E4E5FEE5E5 E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6E6FFE5E5E5FFE6E6E6FFE6E6 E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE5E5E5FEE5E5E5FDE5E5 E5FEC6C6C673000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FEE7E7E7FEE6E6E6FEE6E6E6FEE7E7E7FEE7E7E7FEE6E6E6FEE7E7E7FEE6E6 E6FEE6E6E6FEE6E6E6FEE5E6E6FEE5E5E5FEE3E3E2FEC3C7D8FE8092D9FE647C DCFE6179DCFE6077DBFE6076DBFE5F74DAFE5F74D9FE5F74D7FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6BD0FE5B6ACEFE596ACDFE5869 CDFE5868CBFE5867CBFE5865C8FE5865C8FE636FC6FE9198C9FED4D5DFFEE5E5 E6FEE4E4E5FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE6E6E6FEE7E7 E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE7E7E7FEE6E6E6FEE6E6E6FEE6E6 E6FEC6C6C674000000009E9E9E0DD8D8D8F5E6E6E6FEE6E6E6FEE7E7E7FFE7E7 E7FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FEE6E6E6FFE6E6E6FFE7E7E7FEE7E7 E6FFE6E6E5FFE5E5E6FFE4E5E5FFDDDEE2FFB3BBDAFF798CDCFF647DDEFF617A DEFE6179DCFF6077DCFF6077DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CAFF5865C9FF5864C7FE5764C6FF5E6AC5FF868CC4FEC7C8 D8FFE3E3E5FFE5E5E6FFE5E5E5FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FFE6E6E6FFE6E6E6FEE6E6 E6FFC6C6C674000000009E9E9E0DD9D9D9F5E6E6E6FEE6E6E6FEE7E7E7FEE7E7 E7FFE7E7E7FEE6E6E6FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FFE7E7E7FEE6E6 E6FFE5E6E6FFE6E6E6FFCFD2DDFF919FD9FF7187DFFF647CE0FF627BDFFF617A DDFE6178DCFF6077DCFF5F77DAFE5F74D9FF5F74D8FF5F74D8FF5E72D6FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACDFF5A6ACCFE5969 CDFF5868CBFF5866CBFF5865C8FF5764C8FE5764C6FF5662C5FF5C67C2FE7078 C6FFA4A8C8FFDCDDE0FFE6E6E6FFE4E5E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7 E7FFE7E7E7FFE7E7E7FFE7E7E7FFE7E7E7FEE7E7E7FFE6E6E6FEE6E6E6FEE6E6 E6FFC7C7C774000000009E9E9E0CD8D8D8F4E6E6E6FDE6E6E6FDE7E7E7FEE7E7 E7FEE6E6E7FFE6E6E6FFE6E6E7FFE6E6E7FEE6E6E7FFE5E6E6FFE8E8E8FEE7E6 E7FFCDD0DCFFA4B1DCFF798EDDFF6780E1FF637DE1FF637CE0FF617BDEFF6079 DEFE6179DDFF6077DCFF5F76DBFE5F75DAFF5F74D9FF5F74D8FF5E72D7FF5E72 D6FF5D70D5FF5C6FD3FF5C6ED2FF5B6DD1FF5B6CD0FF5B6ACEFF5969CCFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C6FF5662C4FF5661C4FE5761 C3FF5E68C2FF7D84C4FFB0B2CFFFD7D7DBFFE8E8E7FFE7E7E8FFE6E6E7FFE6E6 E6FFE6E6E6FFE7E7E7FFE6E6E6FFE7E7E7FFE7E7E7FEE6E6E6FEE6E6E6FDE6E6 E6FEC6C6C673000000009E9E9E0CD9D9D9F3E7E7E7FCE6E6E6FDE7E7E7FEE6E6 E7FEE6E7E7FEE6E6E7FEE5E6E7FEE6E7E7FDE6E7E9FEDEDFE3FEC3C8D6FD90A0 D8FE748DE4FE6C85E4FE657EE3FE647EE3FE637DE1FE637CE0FE617BDFFE617A DDFD6179DCFE5F77DBFE6076DBFD5E74D9FE5E73D8FE5E73D7FE5D72D6FE5D72 D5FE5D70D5FE5B6ED3FE5B6DD2FE5A6CD0FE5A6BCFFE5A69CDFE5A6ACDFD5869 CCFE5767CAFE5766CAFE5765C8FE5864C8FD5763C5FE5662C5FE5661C4FD5660 C3FE545FC2FE5862C0FE5F68C0FE6F76C4FE9DA0C5FEC7C8D1FEDCDCDFFEE4E4 E5FEE4E5E5FEE5E5E5FEE5E5E6FEE5E5E6FEE5E6E6FEE5E5E6FEE6E6E7FCE7E7 E7FDC7C7C77300000000A4A4A40CC6C6C6D8DADADAE6D2D1D6F2C9CCD7FDCCD0 DCFEC6CAD7FEB7BFD7FFAEB8D9FF9CACE0FD8A9EE3FF7C95E3FF718BE5FD6884 E6FF6481E7FF647FE5FF647EE3FF647EE2FF637CE1FF637CE1FF617BDFFF6179 DEFD6179DDFF6077DCFF6076DAFD5F75DAFF5F73D8FF5F73D7FF5E71D6FF5E71 D6FF5D70D5FF5B6FD3FF5B6ED2FF5B6DD1FF5B6BCFFF5B6ACDFF596ACCFD5969 CDFF5867CBFF5866CBFF5865C9FF5763C7FD5764C6FF5662C4FF5561C4FD5660 C3FF555FC2FF555FC1FF535DBFFF545DBEFF5A61BDFF646BBEFF7277C0FF8186 C3FF989AC7FFADAECAFFC1C2CFFFC0C0CCFEC7C8D3FEC7C6CFFDD0D0D1EBD2D2 D2E3BFBFBF6600000000A4A4A401C3C3C31CE0DFE235A599B894889AE0FD708F EFFE708EEEFE6F8CEDFF6E8BEBFE6C89EBFE6986E9FF6784E9FF6683E9FE6582 E8FF6581E6FF647FE4FF647EE3FF637DE3FF627CE2FF627CE1FF607BDFFF617A DEFE6078DDFF6077DCFF6077DBFE5F74D9FF5F73D9FF5F73D8FF5E72D7FF5E72 D5FF5D70D5FF5C6FD3FF5C6ED2FF5B6CD1FF5B6CD0FF5B6ACEFF5A6ACDFE5969 CDFF5868CBFF5867CBFF5865C9FF5864C8FE5764C5FF5762C5FF5661C5FE5660 C3FF545EC2FF555FC0FF535DBFFF535CBEFF535BBDFF535ABCFF545BBBFF565C BAFF575BBAFF585DB9FE595DB8FF585BB7FE5E63BBFE503C7CFDDCDAE05FD5D5 D523BEBEBE0D0000000000000000F2F2F402F7F5F81BC3BBCF6B696FB8FA7D9A F5FD6888F0FE6788EFFE6887EEFF6886ECFD6685EAFF6684E9FF6683E8FD6582 E7FF6481E7FF647EE5FF647EE4FF637DE3FF627CE2FF627CE1FF617BDEFF6179 DEFD6178DDFF6076DCFF6076DBFD5F74DAFF5F74D9FF5E73D8FF5D72D6FF5D71 D6FF5C70D5FF5C6FD3FF5B6ED2FF5B6DD1FF5A6CD0FF5A69CEFF5A6ACDFD5869 CDFF5868CAFF5867CAFF5765C9FF5764C8FD5663C6FF5662C4FF5661C5FD5560 C3FF555FC2FF555FC1FF525CBFFF535CBEFF535BBDFF535ABCFF5259BBFF5258 BAFF5156B9FF4F55B8FF4F54B6FE4D51B4FE5D5FB5FD593E75D8E6E1EA3BFCFC FD0C000000000000000000000000E9E8EA01FAFAFB13DBD4DD4D5C4678E08AA0 EDFD6786EEFD6889EEFE6887EEFE6886EDFD6685EAFE6584EAFE6582E9FD6481 E8FE6480E7FE657FE5FE657EE4FE647EE3FE637DE2FE637CE1FE617BDFFE617A DEFD6179DDFE6077DCFE6077DBFD5F75DAFE5F74D9FE5F74D8FE5E72D7FE5E72 D6FE5D70D5FE5C6FD3FE5C6ED2FE5B6DD1FE5B6CD0FE5B6ACEFE5A6ACDFD5969 CDFE5868CBFE5867CBFE5865C9FE5864C8FD5764C6FE5762C5FE5661C5FD5560 C3FE545EC2FE545EC1FE525CBFFE525BBEFE525ABDFE5259BCFE5259BBFE5258 BAFE5157B9FE5157B8FE4F54B5FE656AC0FC645B9EFDA99AB580F3F1F425F9F9 FA0600000000000000000000000000000000FBFBFC09F3F0F12EAD9BAA85645B 94FA93A8EFFD6989EEFD6787EDFE6785ECFD6684EAFE6683E9FE6682E8FD6581 E7FE6580E6FE647EE4FE647DE3FE637DE2FE627CE1FE627BE0FE617ADEFE6179 DDFD6178DCFE6076DBFE6076DAFD5F74D9FE5F73D8FE5E73D7FE5D71D5FE5D71 D5FE5C6FD4FE5C6ED2FE5B6DD1FE5B6CD0FE5A6BCFFE5A69CDFE5A69CCFD5968 CCFE5867CAFE5867CAFE5765C8FE5764C7FD5663C5FE5662C4FE5661C4FD5560 C2FE555FC1FE555FC0FE535DBEFE535CBDFE535BBCFE535ABBFE5259BAFE5258 B9FE5156B8FE5156B7FE6266BDFD7A74B2FD5D406CCFDCD6DF46FBFAFB100000 000000000000000000000000000000000000FBFAFB01FAFAFA14EBE7EA40A392 A791645388F48B97D7FD93ACF9FD7492F1FD6686ECFD6484EBFE6382EAFD6381 E9FE6581E9FE6D88E9FE6F89E8FE6F88E7FE6F88E6FE6F87E5FE6E86E3FE6E85 E2FD6D84E1FE6D82E0FE6C82DFFD6C81DEFE6C80DDFE6B7FDCFE6A7EDBFE6A7D DAFE697CD9FE687BD8FE687AD7FE6879D6FE6778D5FE6776D4FE6776D3FD6675 D2FE6574D1FE6573D0FE6471CEFE6470CDFD636FCCFE636ECBFE5E6AC8FD5560 C4FE535EC2FE525DC1FE515BBFFE505ABEFE515ABDFE5058BCFE5A61BFFE686E C4FE8186CFFE9297D5FD70649CFD6F5379CBCFC5CF5CF8F6F81FFBFAFB040000 00000000000000000000000000000000000000000000FDFCFD05FAF9FA16F0EE F137CFC7D560725A7FB365578BE5776EA0F47677B2FA7776B1F97775B2FA7775 B1FA7674B0FA7674AFFA7673AFFA7673AEFA7572AEFA7572ADFA7571ABFA7471 ABFA7571AAFA7470A9FA7470A9FA746FA9FA746EA8FA736EA8FA736DA7FA736D A7FA726DA6FA726CA6FA726BA5FA726BA4FA716AA4FA716AA3FA7169A3FA7168 A2FA7167A2FA7067A1FA7066A1FA7066A0FA7065A0FA70659FFA6F659EFA6F64 9DFA6F649DFA6F639CFA6E639CFA6D629BF96D629BFA6D619AFA6D6198F96C5F 97FA675384F6593B69E381647DA9D7CED753F8F6F824FBFBFB09000000000000 0000000000000000000000000000000000000000000000000000FBFBFB03FCFB FC0EF9F8FA1DE3DDE432DAD5DE4AD7D1DD5CCDC6D365A28D9C76A28D9C76A28D 9C76A18C9C77A28C9B77A18C9B77A28C9B76A28C9A77A28C9B77A18C9A77A28C 9B76A28C9B77A28C9A77A28C9A77A28C9A77A28C9A77A28C9A76A28B9A77A28C 9A77A18B9A76A18B9A77A28B9A77A28B9977A28A9977A28B9977A18A9977A28B 9877A28A9877A18B9876A18B9977A18B9976A18B9976A18A9877A18B9977A18B 9976A18B9977A18B9977A18B9976A18B9976A08A9877A18A9876A0899776B09E AB6FCFC6D161DCD5DD52EAE5E937FAF9FA1AFBFAFB09FCFCFC01000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000F7F7F903FCFCFC08FBFBFC10FAF9FA17F7F6F718EEEAED18EEEAEC19EEE9 EC18EFEBED19EFEBED19EFEBED19EEEAEC19EFEBED19EFEBED19EFEBED19EEEA ED18EFEBED19EFEBED19EDE9EB18EFEBED19EFEBED19EFEBED19EFEBED19EFEB ED19EFEBED19EFEBED19EFEBED19EEEAEC18EFEBED19EFEBED19EEEAEC19EEEA EC19EEEAEC18EEEAEC19EFEBED19EEEAEC18EFEBED19EFEBED19EFEBED19EEEA EC19EFEBED19EFEBED19EEEAEC19EFEBED19EEEAEC19EEEAEC19EEEAEC19F2F0 F119F9F8F918FBFBFC14FDFCFD0BFAF9FA030000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000F6F6F901F6F6F901F6F5 F801F7F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F6 F901F6F6F901F6F5F801F6F6F901F6F6F901F6F6F901F6F5F801F6F6F901F6F6 F901F6F6F901F6F6F901F6F6F901F6F6F901F6F5F801F6F5F801F6F5F801F6F5 F801F5F5F801F6F5F801F6F5F801F6F5F801F6F6F901F6F5F801F6F5F801F6F5 F801F6F6F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5F801F6F5 F801000000000000000000000000000000000000000000000000000000000000 00000000000000000000FFFFFFFFFFFFFFFFFFC14000000003FFF80000000000 003FF00000000000001FE00000000000000FE000000000000007C00000000000 0003C00000000000000380000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001800000000000000180000000000000018000000000000003800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0001800000000000000180000000000000018000000000000001800000000000 0003800000000000000180000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000100000000000000010000000000000001000000000000 0001000000000000000180000000000000038000000000000003C00000000000 0007C000000000000007E00000000000000FF00000000000000FFC0000000000 003FFFE00000000003FF } OnCreate = FormCreate Position = poScreenCenter LCLVersion = '1.4.4.0' object pnlInfo: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 11 Height = 283 Top = 11 Width = 196 AutoSize = True BorderSpacing.Around = 11 BevelInner = bvRaised BevelOuter = bvLowered BevelWidth = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 283 ClientWidth = 196 TabOrder = 0 object lblTitle: TLabel AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = imgLogo AnchorSideTop.Side = asrBottom Left = 43 Height = 15 Top = 96 Width = 111 BorderSpacing.Top = 6 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Double Commander' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False end object pnlVersionInfos: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = lblTitle AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlInfo AnchorSideBottom.Side = asrBottom Left = 24 Height = 168 Top = 111 Width = 104 AutoSize = True BorderSpacing.Left = 20 BorderSpacing.Right = 20 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 10 ClientHeight = 168 ClientWidth = 104 TabOrder = 0 object lblVersion: TLabel AnchorSideLeft.Control = pnlVersionInfos AnchorSideTop.Control = pnlVersionInfos Left = 0 Height = 15 Top = 10 Width = 38 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Version' ParentColor = False end object lblRevision: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblVersion AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 29 Width = 44 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Revision' ParentColor = False end object lblBuild: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblRevision AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 48 Width = 27 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False end object lblLazarusVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblBuild AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 67 Width = 39 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False end object lblFreePascalVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblLazarusVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 86 Width = 58 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False end object lblPlatform: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblFreePascalVer AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 105 Width = 46 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Platform' ParentColor = False end object lblOperatingSystem: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblPlatform AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 124 Width = 94 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Operating System' ParentColor = False end object lblWidgetsetVer: TLabel AnchorSideLeft.Control = lblVersion AnchorSideTop.Control = lblOperatingSystem AnchorSideTop.Side = asrBottom Left = 0 Height = 15 Top = 143 Width = 69 BorderSpacing.Top = 4 BorderSpacing.Right = 10 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'WidgetsetVer' ParentColor = False end end object imgLogo: TImage AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfo AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 66 Height = 64 Top = 26 Width = 64 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 62 BorderSpacing.Top = 22 BorderSpacing.Right = 62 Center = True Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963F511000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000B1300000B1301009A9C180000000774494D4507DA021112343B F8979BBE000011754944415478DADD9B79905D559DC73FE7DC7BDFD24BBAD39D 3D241D9640020414102C4046CA5229401C71199771CA1A7416D19A9A19A79CC2 3F8471299491C1D1D2A15C81128D5A52AC53208B16191C9180C8960D1224E94E 27E974F7DBEF727EBFF9E3DED7FD3A74BFEEA483C0DCAA5B6F3BEFDCF3FB9EDF FEFB1D6873A92AFF5FAE996831330D36C6B4FED1BCDEE937C64CA16B5600000F 08803C901751CF5AA3AFB75D37C6C44023BBDDA14098E90857D5A231A60758B8 77F0C08A91DD7B97D66A8DE2C3BF7A6231869941505EF6A379F9903F05E166F1 92858D0DA79F38BAEAA48191C58B7B770383C0412032667223CD21C4FBC04260 0038EE1F2EF9E415FD94CE59B36E4D61755F1038455140D31724FB22235C9B00 A8A06A50145533051955455BDF4F3C3F7D159D44B229B72AA046419AD31826A7 555426E748D7A324899A3D2315F7DC737B4ACBCF3CF3A1AFDE74F50F45E4596B ED2010021863A600605575A13166DD2DDFFAD97B5F7AE0BE2B3F70C986DC9A1E 341CDA6DA2F238A2922E42155130B9226A6DBAC08C46D17401A293C4AAA68B97 560054106D8ECFFEAF9344A828922172E85C2E8E496AF50C7445267E4B3F7BC5 4EFC8E4E3A962CA5B864098F6D19E67F9FDEFBD4B5777CEBEAAE62F028306C8C 8955750A0005E0B8DB7E72FFFB776CBCF9EA2B3F7601D1738FA1C68282A84C2E 36DB0991960793EEBAA8A0A228267B4D7728DD451091740745D3B16A5A884BE7 C4804AF3790691942B9C4EEEB6A4AC82A84ECCD91C27D926A1E0C4915BD0A3C9 CAB5E6D6BB9E7CEEBB8F6EFC7BCF9ADF1B63C68D31D8A6CC00C5F1B1CAEA5F7E E3C68F5FF9A1B388B76E56635FF7CA1F632D61A964823DDBF5ED672C5BBFE917 F79F6B8C599429F814804C17148777ED5EF9E7672F5E69CA073198D73BF553AE FAD898E94F4AFCE26BDFFD04D00714547502000572BFBFFBA1F5EBD7AF32EEC0 E084401A32017F1DBA029ACA29886054F1C23AF9FAC163A37AB26C4209DE70C3 0DC50B2EB860477F7F7F978BE3BC7571DEF33D5CE220AC93D42AB8B103C8C161 BCE15D2C2CED070CCED84CD65E233A40158962B4A3133D6680DCC0B1E417F651 5CB49862FFA25439FA3EA28A09821AC6C443434357F9F57ADD747676F6E6F3F9 0ECDE526D0F301E8A5600CD6AEC3F7031255F68D1C441E7F88DE179FC536AA18 15F4D5E40E154C90C35BB21CFFBC3FA377DD29F47477E15B9B01ABD3B9C11D00 BEEF17FC294ECB0C62EF9CC3390740FF822EB8F032709730B6FB45F4819FB2A0 3A8EBE1A0A338E70679DCBB20BDF4EEFD265586B271C0AE7DCA4B7370D5D4D50 FCB93CE76513A8A2C6D0B7E6781A1FFB2C639B1F26F8DD031424CE7485BEA29A 9D3846561F4FEFA5EF61F989EB9038CECC9ECEBA99875E7E2B22871BFD254982 0FF49FF516AAEBDE48E317DF215FDAFFCABABBD6D2F8B38B38E5DD9723714C12 86F38A5EEDA13B7D24B788D0D1D949E1C39FE6C09AD3B04D4D7594AFC47AE43F 7405A75CF61E3449E6B5E609005A3FB42A8DC3B99BFFF5AD65F9BB3FCAC1B567 A2224795ED136BE9FAD015ACDE703A9224539E7BA46B9E108136DAF2B02F1387 2C7EC7E5ECC3B070CB63B8A3A01C9DE7D3F9D79F66D9EA01E2383EAA5CE58B88 F13CAF03C0063E82A7C66002CFC7B918750E1599369930B3985AFADF7939FBC7 46E81DDE354F4023F4D20FB274D5EA299A7D2ED91F630C412E87F53CD41892D4 92A9C69111278848CE6CDAB4C90E0F0FBFE1A4D34E5DF7C2CDB75D79C6A29173 EB62A9E73AA167116EF9712C5CB90AAF73019EE7CF59C3AB2A61AD4A74F3F578 61E3081CA1F4F7D28673D8F0171F250EC359896F6E92029AC48C0C0EB26FDB56 AA2FEE42460E62460F52E8E961F771E77C79C5DAFEFF2E97CB5BFCF3CE3B4F80 2D406E308A2BBD12D29324485442CB83E8EE27897FE71316BB195A7B0ECBCE38 0F5C3CABA931C650E8EA66FF85EFA3FF9E1FA273B3B853E45E8B5DAC7AC7BB48 A2684EC4FB41C081B1315EFAD98F31DBB7A1F53A8890270554150AF900EB7243 175F7CF173C088DF120C99FDCE4E666D4C6ACF552DBE0AB63ACA9ACD77B27FFB E3D8F3DF45F7CA01C4256D17A622AC39F534869E594FC78BDB0E2B9E50111A17 7F80EEAECE39E92607ECBAE74E2AF7DE85278A1A8B41119B725BF3D18A215FC8 4993E62966B024A6ED129DF5E92B0FD37DCFF7D8FBCC13F841D07671C6189238 2677FE45187187B5FFB5E5AB597BEA8659895755C439B6FCC75768DC7737BEB5 60BD36C02A6B4F5C559BD60F98EBE5A9B0F4E19F33F4DB5FE3FBFEAC20F4AC58 C5E8CA13A6786A6D159F4BC8BFF9ADB35A2655A55A6FB0F5BA2F100CED066BE7 AA9FCCBC00500CD65AFA1EBF9FBD2FEE4C7DF07656411CC1F917A173D0E00608 7BFAE93E615D5BCBA39A263B76DFFA03BCD19194F823B0E2763E262A5061C12F 7F44AD566BBB5322C2E2E52B483ABAE714DD554F7F33FDDDDD6DF58BE7FB6C79 F8D778DB9E9997EB3D2F0014C84575CACF3E91C6DA22D3DEAA8A18835BB21233 8B18489063C1C0713897CC389F8850191BC3BBF776F0BCF9394247C39BCA3FFE 10E3A79C49CEB40D2929AF389EC2F63FA0DECCB8BB7C919EFE45842D41CE748E D681271FC73897E522F4D504C0D01355D9B3F5297AD79EDC5ED1AD5883710978 C18C392CEDEE41B24873C627FA0195C71F25DF525778553940AC47D71FB790AC 59DB9E53F2391A0B971054CB33CABF5BB4141521690364BD56A330F847D47A73 B62CAF2800184BA1B49F4A1CD32E99EC594354E83C04009DB42DAA84411ED74C 36CE6056E37D7BD318C5D879275F8E0E008036EA181562D7C61A00B19F4BC359 E790895B5282C2107A1692B489F88C31D477EE40CA65D40FC09A1488EC566B53 636A4CB34E97BDD75716005471CE913899D17C19CFC3292423C3B824233E71A9 A57082346A18CF6FCB01188346118D7D4368904B95A0B12836F505AC07D6C378 1EF801C6F3534B619AC0BC52001883384792CC1CB2AA7368A3463C368A388713 C93841D33478BD8688A40AB00D0061B54A343E0E418064142936DD706B338EF0 52403C1F633DF0739820C02B16302D8EDB3C0150D4254814E2A2104CEA21CE04 40248ADB3784AB551027290788A63546716818D3D8F62C9D03C7B575820A2B8E A15229A1F9425AB7C4A46175C6F54A260E4DD1C8B802CFC3063E7D2DBEC36101 6068C6EE0E091B4818E2C206124548771F4EB5AD5B6CACC19447D3FFBAB4F0A1 2E739444D124A4806067516E1D1BDE806BD453229B79846639BE09064D4052D6 579B7245AEA32B158F2301409308693490B03149781C236148BC7A7D2A7B6DB4 77A31E523C308826719A656AEEBE6B569D159EDF9289EACC1C902F1691638EC5 0C0F4D94D155D2DE82664F82D0AC5899C9DB18A25A6D6A52742E6C2E7184544A 486914298F219571A45A46EB15A45E85D2412AA79EDF369456559228C40EBE98 EA02972A3E9AAEB2086A2CC9CEADD85982266934E8BEE83254252DC989A0EA52 CE1487B8044D92543C9338BDE3080943246E4CC902D8765A5D5D8256CB687914 ADA6444BAD8234AA6858471A0D340A29AF389EDC09A7CC1ABB7BCF6ECE185B5F E60334DF6B691CC27AFBF4781CD377FE5B5385A79A02A16912455D5A88D44CC1 AA7399D94D1097207132C555B1D3C5A3AA9212582921D512522F23F52A1AD6D0 A891DAEB3844E3084D62920BDF8749A2B679783586FCE65FA5B6BBD94FD32CE1 B6DCA63C4EEDC07E3CCF6B3B5F71D500C1056F87A6CFD09208553D24D3AD69C7 491310DA8A804BA056416A25B45E411B55B4D140C30634094F22344E3049447D F971D853CF4145DA174FEA35ECAEADD3D4AF5B3301293794EED8885FEC680F68 92B0E6AA2F60962C9F0AE6840FA1531E937289BECCBCDA431724B50A52AF40A3 86366A681442DC8038425D9C56649C0371D4BB16A29FFA4A0A5A3BD6F73C4677 EEC0AB8CCFC9ADB60FDC4EA334FB582F89597ECD7568239AE2274C4A550B7761 A6345ECD08006115C23A12A54413479942895197803890847AA183EADF7E39DD F9594A54A1F5E9BAEB87734F89F93EB55FDE411004B396B7166F78030337DE32 4B44903536CD9A105145C354B199388224CA884EC00946047509F5FE95C49FBB 897CFF524CE6FCB4BBC3271E21B7FDA939E7ECB01EA53B7F425028CC3A771285 F49DF64606FEEB16BC053D6D4A7266AAEE995E07282431B838DB7197B2B713AC 8B8815062FFF47DC3F7D738A3BD97E3703B8E3A654F91D4EE27578905DDFFE77 FC4261160FDC20E2E85FB79E33EE7C908EF77D18899239B7F5F859EB681D68B8 3811AB554CA3868D631227943BFA48161D43E584337067BF93EE7C0E49662F8C A4A5B61CC3B7DD44CF0B4FE3FCFC61C6A901C9EDB7125EF25E724B576415A5F6 7E8603CEFEFC9738F05757B0EFE73FE6C06F1EA1B6631B321EA66D7D808411D6 78215037C6A8B9F9E69B0B2B56ACB8B7A3A3A3AF323276CC325BE945A09CEF26 E85B42B158C40222EEB08AA7D65A6A2FEEC07EF99369A4279AF51666BD449239 3F5939ACD9DBD73A4E4449D69CC4FAEFFC94A85A3DACE77B9E47B1B31327C2D8 F838E5A79FA251AEE0E5028A6B4FDA8161AC5C2E5FEF8F8C8CD80D1B36BC2997 CB157B7B7B9B4DADA627435CC5212DEC36E7C246A5827EFDB3A9DE9847B8E56D 7F86E7AFFE0C277FF1064A6363735E8388502DA789978E5C8ECEB3DE34C92C22 27349374D6A6DE944EB8A322A655911C6EE381F53C3C6B31D75E49502DCDBFBB CE0F881EBC8767BF7D3D9D3DBD47B4AE66F528BB4D935611517FBAB2F2BC6AF9 5184FBD2DF111C18E468B54818DF27FAD177D852AD72FABF5EC3D8C18347ED30 87DFACBE98793686068502B55DDB906F7E8E60642FD2260D75A40997C6C61FF0 44699C933EF72554E4A8344BF887B2D4E165C1D2F8DFF33C0EFEFA1EBA6FB916 C164C473F4AF5C9EC67D77B2F9F78FB1EEEBDFA773C54A92AC43EC48D60E60E7 C301F98E4EC68776137EF1132CB8F5AB737774E69981F68687D8FAE14B79EEDA 6BB07E404767E71130544AF39C1A259B20D92CE91839811D7FA0BCE96EFA7F77 2F0E9BC9FB2BDD23D8E2EF8BA37AFB4FD8FCF083F4BFFF23AC7CD7E514571C03 71441C4573E60AFF50E2D3EEDC34B1636DAAD573BE4FB55CA65C29C353FFC3C2 077F8C19DD8F6011EB672EA6F027BD34F53275EC20FB6FFC3AC3FF791D85B3CF 65E9DF7C8AFE934EA66BC1021211DCCB2B4C0A98894ED18E8E8EA8542A7D5EA1 9703074ECF0D3E776971740F188B28D8A19D24A5118A95125DE307208A70D643 3D0FDC6BE70C95C9E5A93FF65B9EFFCD23BCD0D58DE95B44D0D74F61E531E4FA FA09A308CF0F745F1898B3FEF99377C5B5DAF65AADF670EB89919EFD3B5EB870 FC6B9FDAB878412E48F63C6F347138254D604A56C0902CE426B3A54EB3A32F4D 0F4F264E92A4AF9A75AC1F9927D89C5315DCB4E3B465CED6F9B235389706B00E 8ACB97B04906F67C7FF0D1CB80678C31A16DD188C982D5ABF7FCFCE978B0B8A8 DFE0E750CFCF2A2E66EA3D21E7E6357E8C40B3DA80C1F8505F7A2CEFBFFEDFBE 075452B275D20A00613EE70F5DFA8D1BAFF9C6DD2F49EEF4F3D2AA8A01632D86 26107A88AEB31908AF45240C9208413E50F7A6B7B1A9BAF0C9B7BDE76D8FA8EA 28904C9C1A6BF1AA3A513DF1BEDB7E75C9DDD75C73D527FEF22DC5BE3D4FE097 4690B0813A87CB8A186931A37960213B5425D9692F6DF6F9B58EC958B2E5BB66 5A7CEA7720B4FE3639D7D4CF2DA230B186C9FF193FD0C8A929AC3D991D1D03FA CCEEEA533F7DE6F6AB80A78121634C34E5D458068455D51E63CCC0F667779E71 C3BF5C77857B69C7590B6C985BB9BC9BBC6F303A29BBDACCE5A3538EBC35534F D27A3E509838E6D63C77A8ADC7E1267215538FC071E8B896A4C644AE0F404DCB 7B78693422ACC72C583DB0EDF2CF7C7CE3C51FB9649331662BE991B9B0797872 BA93A31628AAEA6263CCF29D8363AB6EDF78FFCAD20B7F5C58E8ECE8A854EBFD BDBD5DA3D552AD1A27499C2E6B9A63A86D4CF8DC98F7E5838DC1E6F3B99CF1BD FE5A2DECF7BC433D2FD5247671B198DF7BEC9A657BDEF2C18B77AEEC2BEE0646 5575D418330EC4D39E1C6D7578B236321F28909E1DB6A467893BB3EF22A00AC4 7F1ACF674A062B007A80E234952DC9D6546A595F98AD3731C6C8B440CF00C274 E3BC6C114ADA9C29AF82F66B6E8E9DE1D90A24D9FAB4D5D19BCE3BFC3F18A85F E1469E4F0B0000000049454E44AE426082 } Proportional = True end end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwcxprototypes.pas��������������������������������������������������������������0000644�0001750�0000144�00000005162�11740433676�017167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWCXprototypes; {$mode objfpc}{$H+} interface uses LCLType, WcxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory } TOpenArchive = function (var ArchiveData : tOpenArchiveData): TArcHandle; TReadHeader = function (hArcData: TArcHandle; var HeaderData : THeaderData): Integer; TProcessFile = function (hArcData: TArcHandle; Operation: Integer; DestPath: PAnsiChar; DestName: PAnsiChar): Integer; TCloseArchive = function (hArcData: TArcHandle): Integer; { Optional } TPackFiles = function (PackedFile: PAnsiChar; SubPath: PAnsiChar; SrcPath: PAnsiChar; AddList: PAnsiChar; Flags: Integer): Integer; TDeleteFiles = function (PackedFile: PAnsiChar; DeleteList: PAnsiChar): Integer; TGetPackerCaps = function () : Integer; TConfigurePacker = procedure (Parent: HWND; DllInstance: THandle); TSetChangeVolProc = procedure (hArcData: TArcHandle; ChangeVolProc: tChangeVolProc); TSetProcessDataProc = procedure (hArcData: TArcHandle; ProcessDataProc: TProcessDataProc); TStartMemPack = function (Options: Integer; FileName: PAnsiChar): TArcHandle; TPackToMem = function (hMemPack: TArcHandle; BufIn: PByte; InLen: Integer; Taken: pInteger; BufOut: PByte; OutLen: Integer; Written: pInteger; SeekBy: pInteger): Integer; TDoneMemPack = function (hMemPack: TArcHandle): Integer; TCanYouHandleThisFile = function (FileName: PAnsiChar): boolean; TPackSetDefaultParams = procedure (dps: pPackDefaultParamStruct); TReadHeaderEx = function (hArcData: TArcHandle; var HeaderDataEx : THeaderDataEx): Integer; TPkSetCryptCallback = procedure (PkCryptProc: TPkCryptProc; CryptoNr, Flags: Integer); TGetBackgroundFlags = function(): Integer; { Unicode } TOpenArchiveW = function (var ArchiveData : tOpenArchiveDataW): TArcHandle; TReadHeaderExW = function (hArcData: TArcHandle; var HeaderDataExW : THeaderDataExW): Integer; TProcessFileW = function (hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; TSetChangeVolProcW = procedure (hArcData: TArcHandle; ChangeVolProc: tChangeVolProcW); TSetProcessDataProcW = procedure (hArcData: TArcHandle; ProcessDataProc: TProcessDataProcW); TPackFilesW = function (PackedFile, SubPath, SrcPath, AddList: PWideChar; Flags: Integer): Integer; TDeleteFilesW = function (PackedFile, DeleteList: PWideChar): Integer; TStartMemPackW = function (Options: Integer; FileName: PWideChar): TArcHandle; TCanYouHandleThisFileW = function (FileName: PWideChar): boolean; TPkSetCryptCallbackW = procedure (PkCryptProc: TPkCryptProcW; CryptoNr, Flags: Integer); {$CALLING DEFAULT} implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmodview.pas��������������������������������������������������������������������0000644�0001750�0000144�00000017353�12646706137�015656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fModView; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls, ButtonPanel, uOSForms; type { TfrmModView } TfrmModView = class(TModalForm) btnPath1: TSpeedButton; btnPath2: TSpeedButton; btnPath3: TSpeedButton; btnPath4: TSpeedButton; btnPath5: TSpeedButton; btnProportion: TSpeedButton; bplButtons: TButtonPanel; ImageList: TImageList; lblHeight: TLabel; lblPath1: TLabel; lblPath2: TLabel; lblPath3: TLabel; lblPath4: TLabel; lblPath5: TLabel; lblQuality: TLabel; lblWidth: TLabel; pnlMain: TPanel; pnlCopyMoveFile: TPanel; pnlQuality: TPanel; pnlSize: TPanel; rbBmp: TRadioButton; rbIco: TRadioButton; rbJpg: TRadioButton; rbPath1: TRadioButton; rbPath2: TRadioButton; rbPath3: TRadioButton; rbPath4: TRadioButton; rbPath5: TRadioButton; rbPng: TRadioButton; rbPnm: TRadioButton; sddCopyMoveFile: TSelectDirectoryDialog; tbQuality: TTrackBar; teHeight: TEdit; tePath1: TEdit; tePath2: TEdit; tePath3: TEdit; tePath4: TEdit; tePath5: TEdit; teQuality: TEdit; teWidth: TEdit; procedure btnCancelClick(Sender: TObject); procedure btnOkClick(Sender: TObject); procedure btnPathClick(Sender: TObject); procedure btnProportionClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: char); procedure FormShow(Sender: TObject); procedure rbBmpChange(Sender: TObject); procedure rbIcoChange(Sender: TObject); procedure rbJpgChange(Sender: TObject); procedure rbPngChange(Sender: TObject); procedure rbPnmChange(Sender: TObject); procedure tbQualityMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure teHeightKeyPress(Sender: TObject; var Key: char); procedure teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure teQualityKeyPress(Sender: TObject; var Key: char); procedure teQualityKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure teWidthKeyPress(Sender: TObject; var Key: char); procedure teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } prX, prY: integer; public Path, sExt : string; { public declarations } end; implementation {$R *.lfm} uses uGlobs; procedure TfrmModView.btnProportionClick(Sender: TObject); begin if btnProportion.Down then ImageList.GetBitmap(0, btnProportion.Glyph) else begin ImageList.GetBitmap(1, btnProportion.Glyph); end; end; procedure TfrmModView.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin gCopyMovePath1 := tePath1.Text; gCopyMovePath2 := tePath2.Text; gCopyMovePath3 := tePath3.Text; gCopyMovePath4 := tePath4.Text; gCopyMovePath5 := tePath5.Text; end; procedure TfrmModView.FormCreate(Sender: TObject); begin ImageList.GetBitmap(0, btnProportion.Glyph); end; procedure TfrmModView.FormKeyPress(Sender: TObject; var Key: char); begin if pnlCopyMoveFile.Visible then begin rbPath1.Checked:= false; rbPath2.Checked:= false; rbPath3.Checked:= false; rbPath4.Checked:= false; rbPath5.Checked:= false; case Key of '1': begin rbPath1.Checked:= true; Key := #0; btnOkClick(Sender); end; '2': begin rbPath2.Checked:= true; Key := #0; btnOkClick(Sender); end; '3': begin rbPath3.Checked:= true; Key := #0; btnOkClick(Sender); end; '4': begin rbPath4.Checked:= true; Key := #0; btnOkClick(Sender); end; '5': begin rbPath5.Checked:= true; Key := #0; btnOkClick(Sender); end; end; end; end; procedure TfrmModView.FormShow(Sender: TObject); begin if pnlSize.Visible then begin prX:=StrToInt(teWidth.Text); prY:=StrToInt(teHeight.Text); end; if pnlCopyMoveFile.Visible then begin rbPath1.SetFocus; tePath1.Text := gCopyMovePath1; tePath2.Text := gCopyMovePath2; tePath3.Text := gCopyMovePath3; tePath4.Text := gCopyMovePath4; tePath5.Text := gCopyMovePath5; end; if pnlQuality.Visible then begin sExt:= '.jpg'; tbQuality.Enabled:=true; lblQuality.Enabled:=True; end; end; procedure TfrmModView.rbBmpChange(Sender: TObject); begin sExt:='.bmp'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbIcoChange(Sender: TObject); begin sExt:='.ico'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbJpgChange(Sender: TObject); begin sExt:='.jpg'; tbQuality.Enabled:=True; teQuality.Enabled:=True; lblQuality.Enabled:=True; end; procedure TfrmModView.rbPngChange(Sender: TObject); begin sExt:='.png'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.rbPnmChange(Sender: TObject); begin sExt:='.pnm'; tbQuality.Enabled:=False; teQuality.Enabled:=False; lblQuality.Enabled:=False; end; procedure TfrmModView.tbQualityMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin teQuality.Text:= intToStr(tbQuality.Position); end; procedure TfrmModView.btnOkClick(Sender: TObject); begin if pnlCopyMoveFile.Visible then begin if rbPath1.Checked then Path:=tePath1.Text; if rbPath2.Checked then Path:=tePath2.Text; if rbPath3.Checked then Path:=tePath3.Text; if rbPath4.Checked then Path:=tePath4.Text; if rbPath5.Checked then Path:=tePath5.Text; end; ModalResult:= mrOk; end; procedure TfrmModView.btnPathClick(Sender: TObject); begin if sddCopyMoveFile.Execute then begin if sender=btnPath1 then begin tePath1.Text:= sddCopyMoveFile.Filename; rbPath1.Checked:=true; end; if sender=btnPath2 then begin tePath2.Text:= sddCopyMoveFile.Filename; rbPath2.Checked:=true; end; if sender=btnPath3 then begin tePath3.Text:= sddCopyMoveFile.Filename; rbPath3.Checked:=true; end; if sender=btnPath4 then begin tePath4.Text:= sddCopyMoveFile.Filename; rbPath4.Checked:=true; end; if sender=btnPath5 then begin tePath5.Text:= sddCopyMoveFile.Filename; rbPath5.Checked:=true; end; end; end; procedure TfrmModView.btnCancelClick(Sender: TObject); begin ModalResult:= mrCancel; end; procedure TfrmModView.teHeightKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teHeightKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if btnProportion.Down then begin teWidth.Text := IntToStr(Round(StrToInt(teHeight.Text) * prX / prY)); end; end; procedure TfrmModView.teQualityKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teQualityKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if StrToInt(teQuality.Text)<=100 then tbQuality.Position:=StrToInt(teQuality.Text); end; procedure TfrmModView.teWidthKeyPress(Sender: TObject; var Key: char); begin if not (key in ['0'..'9', #8]) then key:=#0; end; procedure TfrmModView.teWidthKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if btnProportion.Down then begin teHeight.Text := IntToStr(Round(StrToInt(teWidth.Text) * prY / prX)); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/usyndiffcontrols.pas������������������������������������������������������������0000644�0001750�0000144�00000037330�12631007216�017430� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSynDiffControls; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, SynEdit, SynEditMiscClasses, SynGutterBase, SynTextDrawer, uDiffOND; const { Default differ colors } clPaleGreen: TColor = $AAFFAA; clPaleRed : TColor = $AAAAFF; clPaleBlue : TColor = $FFAAAA; type TPaintStyle = (psForeground, psBackground); type { TDiffColors } TDiffColors = class(TPersistent) private fColors: array [TChangeKind] of TColor; fOnChange: TNotifyEvent; function GetColor(const AIndex: TChangeKind): TColor; procedure SetColor(const AIndex: TChangeKind; const AValue: TColor); public constructor Create; procedure Assign(aSource: TPersistent); override; property Colors[const aIndex: TChangeKind]: TColor read GetColor write SetColor; default; property OnChange: TNotifyEvent read fOnChange write fOnChange; published property Added: TColor index ckAdd read GetColor write SetColor; property Modified: TColor index ckModify read GetColor write SetColor; property Deleted: TColor index ckDelete read GetColor write SetColor; end; { TSynDiffGutterLineNumber } TSynDiffGutterLineNumber = class(TSynGutterPartBase) private FTextDrawer: TheTextDrawer; FDigitCount: integer; FAutoSizeDigitCount: integer; FLeadingZeros: boolean; procedure SetDigitCount(AValue : integer); procedure SetLeadingZeros(const AValue : boolean); function FormatLineNumber(Line: PtrInt; Kind: TChangeKind): string; protected procedure Init; override; function PreferedWidth: Integer; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); override; published property MarkupInfo; property DigitCount: integer read FDigitCount write SetDigitCount; property LeadingZeros: boolean read FLeadingZeros write SetLeadingZeros; end; { TSynDiffGutterChanges } TSynDiffGutterChanges = class(TSynGutterPartBase) private FColors: TDiffColors; protected function PreferedWidth: Integer; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); override; published property Colors: TDiffColors read FColors write FColors; end; { TSynDiffEdit } TSynDiffEdit = class(TCustomSynEdit) private FPaintStyle: TPaintStyle; FEncoding: String; FColors: TDiffColors; FOriginalFile, FModifiedFile: TSynDiffEdit; private procedure SetModifiedFile(const AValue: TSynDiffEdit); procedure SetOriginalFile(const AValue: TSynDiffEdit); procedure SetPaintStyle(const AValue: TPaintStyle); protected procedure SpecialLineMarkupEvent(Sender: TObject; Line: Integer; var Special: boolean; AMarkup: TSynSelectedColor); public constructor Create(AOwner: TComponent); override; destructor Destroy; override; public procedure StartCompare; procedure FinishCompare; function DiffBegin(ALine: Integer): Integer; function DiffEnd(ALine: Integer): Integer; property PaintStyle: TPaintStyle read FPaintStyle write SetPaintStyle; property Encoding: String read FEncoding write FEncoding; property Colors: TDiffColors read FColors write FColors; property OriginalFile: TSynDiffEdit read FOriginalFile write SetOriginalFile; property ModifiedFile: TSynDiffEdit read FModifiedFile write SetModifiedFile; published property OnStatusChange; end; { TStringsHelper } TStringsHelper = class helper for TStrings private function GetKind(AIndex: Integer): TChangeKind; function GetNumber(AIndex: Integer): PtrInt; procedure SetKind(AIndex: Integer; AValue: TChangeKind); procedure SetNumber(AIndex: Integer; AValue: PtrInt); public procedure RemoveFake; procedure Append(const S: String; AKind: TChangeKind); procedure InsertFake(AIndex: Integer; AKind: TChangeKind); procedure SetKindAndNumber(AIndex: Integer; AKind: TChangeKind; ANumber: PtrInt); public property Kind[AIndex: Integer]: TChangeKind read GetKind write SetKind; property Number[AIndex: Integer]: PtrInt read GetNumber write SetNumber; end; implementation uses LCLIntf, LCLType, SynEditMiscProcs; const KindShift = 8; // Line kind shift KindMask = $FF; // Line kind mask FakeLine = PtrInt(High(PtrUInt) shr KindShift); { TDiffColors } function TDiffColors.GetColor(const AIndex: TChangeKind): TColor; begin Result:= fColors[AIndex]; end; procedure TDiffColors.SetColor(const AIndex: TChangeKind; const AValue: TColor); begin if fColors[AIndex] <> AValue then begin fColors[AIndex] := AValue; if Assigned(OnChange) then OnChange(Self); end; end; constructor TDiffColors.Create; begin fColors[ckAdd] := clPaleGreen; fColors[ckModify] := clPaleBlue; fColors[ckDelete] := clPaleRed; end; procedure TDiffColors.Assign(aSource: TPersistent); begin if (aSource is TDiffColors) then with (aSource as TDiffColors) do begin fColors[ckAdd]:= Added; fColors[ckModify]:= Modified; fColors[ckDelete]:= Deleted; end; end; { TSynDiffEdit } procedure TSynDiffEdit.SetModifiedFile(const AValue: TSynDiffEdit); begin if FModifiedFile <> AValue then begin if (AValue <> nil) and (FOriginalFile <> nil) then raise Exception.Create('Having both ModifiedFile and OriginalFile is not supported'); FModifiedFile := AValue; end; end; procedure TSynDiffEdit.SetOriginalFile(const AValue: TSynDiffEdit); begin if FOriginalFile <> AValue then begin if (AValue <> nil) and (FModifiedFile <> nil) then raise Exception.Create('Having both OriginalFile and ModifiedFile is not supported'); FOriginalFile := AValue; end; end; procedure TSynDiffEdit.SetPaintStyle(const AValue: TPaintStyle); begin if FPaintStyle <> AValue then begin FPaintStyle := AValue; Invalidate; end; end; procedure TSynDiffEdit.SpecialLineMarkupEvent(Sender: TObject; Line: Integer; var Special: boolean; AMarkup: TSynSelectedColor); var Kind: TChangeKind; LineColor: TColor; begin if Line > Lines.Count then Exit; Kind:= Lines.Kind[Line - 1]; if (Kind <> ckNone) then with AMarkup do begin case Kind of ckDelete: LineColor := FColors.Deleted; ckAdd: LineColor := FColors.Added; ckModify: if Assigned(Highlighter) then Exit else LineColor := FColors.Modified; end; Special:= True; if FPaintStyle = psForeground then begin Foreground := LineColor; Background := clWindow; end else begin Foreground:= clWindowText; Background := LineColor; end; end; end; procedure TSynDiffEdit.StartCompare; begin BeginUpdate; // Remove fake lines Lines.RemoveFake; end; procedure TSynDiffEdit.FinishCompare; begin EndUpdate; Invalidate; end; function TSynDiffEdit.DiffBegin(ALine: Integer): Integer; var Kind: TChangeKind; begin Result:= ALine; if ALine = 0 then Exit; // Skip lines with current difference type Kind := Lines.Kind[ALine]; while (ALine > 0) and (Lines.Kind[ALine] = Kind) do Dec(ALine); Result:= ALine + 1; end; function TSynDiffEdit.DiffEnd(ALine: Integer): Integer; var Kind: TChangeKind; begin Result:= ALine; if ALine = Lines.Count - 1 then Exit; // Skip lines with current difference type Kind := Lines.Kind[ALine]; while (ALine < Lines.Count - 1) and (Lines.Kind[ALine] = Kind) do Inc(ALine); Result:= ALine - 1; end; constructor TSynDiffEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); if not(csLoading in AOwner.ComponentState) then begin Gutter.Parts.Clear; with TSynDiffGutterLineNumber.Create(Gutter.Parts) do Name:= 'SynDiffGutterLineNumber'; with TSynDiffGutterChanges.Create(Gutter.Parts) do Name:= 'SynDiffGutterChanges'; end; FPaintStyle:= psBackground; FColors:= TDiffColors.Create; OnSpecialLineMarkup:= @SpecialLineMarkupEvent; end; destructor TSynDiffEdit.Destroy; begin if Assigned(FColors) then FreeAndNil(FColors); inherited Destroy; end; { TSynDiffGutterChanges } function TSynDiffGutterChanges.PreferedWidth: Integer; begin Result := 4; end; constructor TSynDiffGutterChanges.Create(AOwner: TComponent); begin inherited Create(AOwner); FColors:= TDiffColors.Create; MarkupInfo.Background := clNone; end; destructor TSynDiffGutterChanges.Destroy; begin if Assigned(FColors) then FreeAndNil(FColors); inherited Destroy; end; procedure TSynDiffGutterChanges.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); var rcLine: TRect; LineHeight: Integer; I, LineNumber: Integer; SynDiffEdit: TSynDiffEdit; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight := SynDiffEdit.LineHeight; if MarkupInfo.Background <> clNone then begin Canvas.Brush.Color := MarkupInfo.Background; Canvas.FillRect(AClip); end; Canvas.Pen.Width := Width; Canvas.Pen.EndCap:= pecFlat; rcLine := AClip; rcLine.Left := rcLine.Left + Width div 2; rcLine.Bottom := FirstLine * LineHeight; for I := FirstLine to LastLine do begin LineNumber := FoldView.TextIndex[I]; // next line rect rcLine.Top := rcLine.Bottom; Inc(rcLine.Bottom, LineHeight); if (LineNumber >= 0) and (LineNumber < SynDiffEdit.Lines.Count) then begin case SynDiffEdit.Lines.Kind[LineNumber] of ckNone: Continue; ckAdd: Canvas.Pen.Color := FColors.Added; ckDelete: Canvas.Pen.Color := FColors.Deleted; ckModify: Canvas.Pen.Color := FColors.Modified; end; Canvas.Line(rcLine.Left, rcLine.Top + 1, rcLine.Left, rcLine.Bottom - 1); end; end; end; { TSynDiffGutterLineNumber } procedure TSynDiffGutterLineNumber.SetDigitCount(AValue: integer); begin AValue := MinMax(AValue, 2, 12); if FDigitCount <> AValue then begin FDigitCount := AValue; if AutoSize then begin FAutoSizeDigitCount := Max(FDigitCount, FAutoSizeDigitCount); DoAutoSize; end else FAutoSizeDigitCount := FDigitCount; DoChange(Self); end; end; procedure TSynDiffGutterLineNumber.SetLeadingZeros(const AValue: boolean); begin if FLeadingZeros <> AValue then begin FLeadingZeros := AValue; DoChange(Self); end; end; function TSynDiffGutterLineNumber.FormatLineNumber(Line: PtrInt; Kind: TChangeKind): string; var I: Integer; begin Result := EmptyStr; // if a symbol must be showed if (Line = 0) or (Line = FakeLine) then begin case Kind of ckAdd: Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '+'; ckDelete: Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '-'; else Result := StringOfChar(' ', FAutoSizeDigitCount-1) + '.'; end; end // else format the line number else begin Str(Line : FAutoSizeDigitCount, Result); if FLeadingZeros then for I := 1 to FAutoSizeDigitCount - 1 do begin if (Result[I] <> ' ') then Break; Result[I] := '0'; end; end; end; function TSynDiffGutterLineNumber.PreferedWidth: Integer; begin Result := FAutoSizeDigitCount * FTextDrawer.CharWidth + 1; end; procedure TSynDiffGutterLineNumber.Init; begin inherited Init; FTextDrawer := Gutter.TextDrawer; end; constructor TSynDiffGutterLineNumber.Create(AOwner: TComponent); begin FDigitCount := 4; FAutoSizeDigitCount := FDigitCount; FLeadingZeros := False; inherited Create(AOwner); end; destructor TSynDiffGutterLineNumber.Destroy; begin inherited Destroy; end; procedure TSynDiffGutterLineNumber.Assign(Source: TPersistent); var Src: TSynDiffGutterLineNumber; begin if Assigned(Source) and (Source is TSynDiffGutterLineNumber) then begin Src := TSynDiffGutterLineNumber(Source); FLeadingZeros := Src.FLeadingZeros; FDigitCount := Src.FDigitCount; FAutoSizeDigitCount := Src.FAutoSizeDigitCount; end; inherited Assign(Source); end; procedure TSynDiffGutterLineNumber.Paint(Canvas: TCanvas; AClip: TRect; FirstLine, LastLine: Integer); var DC: HDC; S: String; rcLine: TRect; LineNumber: PtrInt; LineKind: TChangeKind; I, LineHeight: Integer; SynDiffEdit: TSynDiffEdit; begin if not Visible then Exit; SynDiffEdit:= TSynDiffEdit(SynEdit); LineHeight := SynDiffEdit.LineHeight; // Changed to use fTextDrawer.BeginDrawing and fTextDrawer.EndDrawing only // when absolutely necessary. Note: Never change brush / pen / font of the // canvas inside of this block (only through methods of fTextDrawer)! if MarkupInfo.Background <> clNone then Canvas.Brush.Color := MarkupInfo.Background else Canvas.Brush.Color := Gutter.Color; DC := Canvas.Handle; {$PUSH}{$R-} LCLIntf.SetBkColor(DC, Canvas.Brush.Color); {$POP} FTextDrawer.BeginDrawing(DC); try if MarkupInfo.Background <> clNone then FTextDrawer.SetBackColor(MarkupInfo.Background) else FTextDrawer.SetBackColor(Gutter.Color); if MarkupInfo.Foreground <> clNone then fTextDrawer.SetForeColor(MarkupInfo.Foreground) else fTextDrawer.SetForeColor(SynDiffEdit.Font.Color); fTextDrawer.SetFrameColor(MarkupInfo.FrameColor); fTextDrawer.Style := MarkupInfo.Style; // prepare the rect initially rcLine := AClip; rcLine.Bottom := FirstLine * LineHeight; for I := FirstLine to LastLine do begin LineNumber := FoldView.DisplayNumber[I]; LineKind := SynDiffEdit.Lines.Kind[LineNumber - 1]; LineNumber:= SynDiffEdit.Lines.Number[LineNumber - 1]; // next line rect rcLine.Top := rcLine.Bottom; // Get the formatted line number or dot S := FormatLineNumber(LineNumber, LineKind); Inc(rcLine.Bottom, LineHeight); // erase the background and draw the line number string in one go fTextDrawer.ExtTextOut(rcLine.Left, rcLine.Top, ETO_OPAQUE or ETO_CLIPPED, rcLine, PChar(Pointer(S)),Length(S)); end; // now erase the remaining area if any if AClip.Bottom > rcLine.Bottom then begin rcLine.Top := rcLine.Bottom; rcLine.Bottom := AClip.Bottom; with rcLine do fTextDrawer.ExtTextOut(Left, Top, ETO_OPAQUE, rcLine, nil, 0); end; finally fTextDrawer.EndDrawing; end; end; { TStringsHelper } function TStringsHelper.GetKind(AIndex: Integer): TChangeKind; var AKind: PtrInt; begin AKind:= PtrInt(Objects[AIndex]); Result:= TChangeKind(AKind and KindMask); end; function TStringsHelper.GetNumber(AIndex: Integer): PtrInt; begin Result:= PtrInt(Objects[AIndex]) shr KindShift; end; procedure TStringsHelper.SetKind(AIndex: Integer; AValue: TChangeKind); var ANumber: PtrInt; begin ANumber:= GetNumber(AIndex); Objects[AIndex]:= TObject(PtrInt(AValue) or (ANumber shl KindShift)); end; procedure TStringsHelper.SetNumber(AIndex: Integer; AValue: PtrInt); var AKind: TChangeKind; begin AKind:= GetKind(AIndex); Objects[AIndex]:= TObject(PtrInt(AKind) or (AValue shl KindShift)); end; procedure TStringsHelper.RemoveFake; var I: Integer; begin for I:= Count - 1 downto 0 do begin if ((PtrInt(Objects[I]) shr KindShift) = FakeLine) and (Self[I] = EmptyStr) then Delete(I); end; end; procedure TStringsHelper.Append(const S: String; AKind: TChangeKind); begin InsertObject(Count, S, TObject(PtrInt(AKind) or (Count shl KindShift))); end; procedure TStringsHelper.InsertFake(AIndex: Integer; AKind: TChangeKind); begin InsertObject(AIndex, EmptyStr, TObject(PtrInt(AKind) or PtrInt(FakeLine shl KindShift))); end; procedure TStringsHelper.SetKindAndNumber(AIndex: Integer; AKind: TChangeKind; ANumber: PtrInt); begin Objects[AIndex]:= TObject(PtrInt(AKind) or (ANumber shl KindShift)); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwdxprototypes.pas��������������������������������������������������������������0000644�0001750�0000144�00000004007�11740433676�017165� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uwdxprototypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, WdxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { Mandatory (must be implemented) } TContentGetSupportedField = function (FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; TContentGetValue = function (FileName:pchar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; { Optional (must NOT be implemented if unsupported!) } TContentGetDetectString = procedure (DetectString:pchar;maxlen:integer); TContentSetDefaultParams = procedure (dps:pContentDefaultParamStruct); TContentStopGetValue = procedure (FileName:pchar); TContentGetDefaultSortOrder = function (FieldIndex:integer):integer; TContentPluginUnloading = procedure; TContentGetSupportedFieldFlags = function (FieldIndex:integer):integer; TContentSetValue = function (FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TContentEditValue = function (handle:thandle;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pchar;maxlen:integer;flags:integer; langidentifier:pchar):integer; TContentSendStateInformation = procedure (state:integer;path:pchar); { Unicode } TContentGetValueW = function (FileName:pwidechar;FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; TContentStopGetValueW = procedure (FileName:pwidechar); TContentSetValueW = function (FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TContentSendStateInformationW = procedure (state:integer;path:pwidechar); {$CALLING DEFAULT} implementation end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ucmdlineparams.pas��������������������������������������������������������������0000644�0001750�0000144�00000006762�12612505011�017021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uCmdLineParams; {$mode objfpc}{$H+} interface type TCommandLineParams = packed record NewTab: Boolean; NoSplash: Boolean; ActivePanelSpecified: Boolean; ActiveRight: Boolean; LeftPath: array[0..1023] of AnsiChar; RightPath: array[0..1023] of AnsiChar; ActivePanelPath: array[0..1023] of AnsiChar; Client: Boolean; Servername: array[0..1023] of AnsiChar; end; procedure ProcessCommandLineParams; var CommandLineParams: TCommandLineParams; implementation uses Forms, Dialogs, SysUtils, uOSUtils, uDCUtils, uGlobsPaths, getopts, uDebug, uLng; procedure ProcessCommandLineParams; var Option: AnsiChar = #0; OptionIndex: LongInt = 0; Options: array[1..5] of TOption; OptionUnknown: String; begin FillChar(Options, SizeOf(Options), #0); with Options[1] do begin Name:= 'no-console'; end; with Options[2] do begin Name:= 'config-dir'; Has_arg:= 1; end; with Options[3] do begin Name:= 'client'; end; with Options[4] do begin Name:= 'servername'; Has_arg:= 1; end; with Options[5] do begin Name:= 'no-splash'; end; FillChar(CommandLineParams, SizeOf(TCommandLineParams), #0); repeat try Option:= GetLongOpts('L:l:R:r:P:p:TtCc', @Options[1], OptionIndex); except MessageDlg(Application.Title, rsMsgInvalidCommandLine, mtError, [mbOK], 0, mbOK); Exit; end; case Option of #0: begin case OptionIndex of 1: begin {$IF DEFINED(NIGHTLY_BUILD)} HideConsoleWindow; {$ENDIF} end; 2: begin gpCmdLineCfgDir:= ParamStrU(TrimQuotes(OptArg)); end; 3: begin CommandLineParams.Client:= True; CommandLineParams.NoSplash:= True; end; 4: begin CommandLineParams.Servername:= ParamStrU(TrimQuotes(OptArg)); end; 5: begin CommandLineParams.NoSplash:= True; end; end; end; 'L', 'l': CommandLineParams.LeftPath:= ParamStrU(TrimQuotes(OptArg)); 'R', 'r': CommandLineParams.RightPath:= ParamStrU(TrimQuotes(OptArg)); 'P', 'p': begin CommandLineParams.ActivePanelSpecified:= True; CommandLineParams.ActiveRight:= (UpperCase(OptArg) = 'R'); end; 'T', 't': CommandLineParams.NewTab:= True; 'C', 'c': begin CommandLineParams.Client:= True; CommandLineParams.NoSplash:= True; end; '?', ':': DCDebug ('Error with opt : ', OptOpt); end; { case } until Option = EndOfOptions; if OptInd <= ParamCount then begin // If also found one parameter then use it as path of active panel if ParamCount - OptInd = 0 then begin CommandLineParams.ActivePanelPath:= ParamStrU(OptInd); Inc(OptInd, 1); end // If also found two parameters then use it as paths in panels else if ParamCount - OptInd = 1 then begin CommandLineParams.LeftPath:= ParamStrU(OptInd); CommandLineParams.RightPath:= ParamStrU(OptInd + 1); Inc(OptInd, 2); end; // Unknown options, print to console if OptInd <= ParamCount then begin while OptInd <= ParamCount do begin OptionUnknown:= ParamStrU(OptInd) + ' '; Inc(OptInd) end; DCDebug ('Non options : ', OptionUnknown); end; end; end; end. ��������������doublecmd-0.7.1/src/fdiffer.lrt���������������������������������������������������������������������0000644�0001750�0000144�00000005545�11752246222�015450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMDIFFER.CAPTION=Compare files TFRMDIFFER.BTNLEFTENCODING.HINT=Encoding TFRMDIFFER.BTNRIGHTENCODING.HINT=Encoding TFRMDIFFER.MNUFILE.CAPTION=&File TFRMDIFFER.MIDIVIDER7.CAPTION=- TFRMDIFFER.MIDIVIDER6.CAPTION=- TFRMDIFFER.MNUEDIT.CAPTION=&Edit TFRMDIFFER.MIDIVIDER8.CAPTION=- TFRMDIFFER.MIDIVIDER9.CAPTION=- TFRMDIFFER.MNUOPTIONS.CAPTION=&Options TFRMDIFFER.MIDIVIDER10.CAPTION=- TFRMDIFFER.MIDIVIDER4.CAPTION=- TFRMDIFFER.MIDIVIDER3.CAPTION=- TFRMDIFFER.MNUACTIONS.CAPTION=&Actions TFRMDIFFER.MIDIVIDER1.CAPTION=- TFRMDIFFER.MIDIVIDER2.CAPTION=- TFRMDIFFER.MIDIVIDER5.CAPTION=- TFRMDIFFER.MNUENCODING.CAPTION=En&coding TFRMDIFFER.MIENCODINGLEFT.CAPTION=&Left TFRMDIFFER.MIENCODINGRIGHT.CAPTION=&Right TFRMDIFFER.ACTSAVE.CAPTION=Save TFRMDIFFER.ACTSAVE.HINT=Save TFRMDIFFER.ACTSAVEAS.CAPTION=Save as... TFRMDIFFER.ACTSAVEAS.HINT=Save as... TFRMDIFFER.ACTSTARTCOMPARE.CAPTION=Compare TFRMDIFFER.ACTSTARTCOMPARE.HINT=Compare TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION=Last Difference TFRMDIFFER.ACTLASTDIFFERENCE.HINT=Last Difference TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION=Next Difference TFRMDIFFER.ACTNEXTDIFFERENCE.HINT=Next Difference TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION=Previous Difference TFRMDIFFER.ACTPREVDIFFERENCE.HINT=Previous Difference TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION=First Difference TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT=First Difference TFRMDIFFER.ACTIGNORECASE.CAPTION=Ignore Case TFRMDIFFER.ACTIGNOREWHITESPACE.CAPTION=Ignore Blanks TFRMDIFFER.ACTKEEPSCROLLING.CAPTION=Keep Scrolling TFRMDIFFER.ACTCANCELCOMPARE.CAPTION=Cancel TFRMDIFFER.ACTCANCELCOMPARE.HINT=Cancel TFRMDIFFER.ACTBINARYCOMPARE.CAPTION=Binary Mode TFRMDIFFER.ACTPAINTBACKGROUND.CAPTION=Paint Background TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION=Copy Block Right TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT=Copy Block Right TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION=Copy Block Left TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT=Copy Block Left TFRMDIFFER.ACTSAVELEFT.CAPTION=Save Left TFRMDIFFER.ACTSAVELEFT.HINT=Save Left TFRMDIFFER.ACTSAVERIGHT.CAPTION=Save Right TFRMDIFFER.ACTSAVERIGHT.HINT=Save Right TFRMDIFFER.ACTRELOAD.CAPTION=&Reload TFRMDIFFER.ACTRELOAD.HINT=Reload TFRMDIFFER.ACTOPENLEFT.CAPTION=Open Left... TFRMDIFFER.ACTOPENRIGHT.CAPTION=Open Right... TFRMDIFFER.ACTEXIT.CAPTION=E&xit TFRMDIFFER.ACTEDITCUT.CAPTION=Cut TFRMDIFFER.ACTEDITCOPY.CAPTION=Copy TFRMDIFFER.ACTEDITPASTE.CAPTION=Paste TFRMDIFFER.ACTEDITDELETE.CAPTION=Delete TFRMDIFFER.ACTEDITSELECTALL.CAPTION=Select &All TFRMDIFFER.ACTEDITREDO.CAPTION=Redo TFRMDIFFER.ACTEDITUNDO.CAPTION=Undo TFRMDIFFER.ACTSAVELEFTAS.CAPTION=Save Left As... TFRMDIFFER.ACTSAVELEFTAS.HINT=Save Left As... TFRMDIFFER.ACTSAVERIGHTAS.CAPTION=Save Right As... TFRMDIFFER.ACTSAVERIGHTAS.HINT=Save Right As... TFRMDIFFER.ACTABOUT.CAPTION=About TFRMDIFFER.ACTLINEDIFFERENCES.CAPTION=Line Differences TFRMDIFFER.ACTAUTOCOMPARE.CAPTION=Auto Compare TFRMDIFFER.MISEPARATOR1.CAPTION=- TFRMDIFFER.MISEPARATOR2.CAPTION=- �����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/flinker.pas���������������������������������������������������������������������0000644�0001750�0000144�00000011444�12612505011�015440� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : Pavel Letko (letcuv@centrum.cz) File combiner contributors: Radek Cervinka } unit fLinker; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Forms, Dialogs, StdCtrls, //DC fButtonForm, uFileSource, uFile; type { TfrmLinker } TfrmLinker = class(TfrmButtonForm) lblFileName: TLabel; lstFile: TListBox; gbSaveTo: TGroupBox; edSave: TEdit; btnSave: TButton; grbxControl: TGroupBox; spbtnUp: TButton; spbtnDown: TButton; spbtnRem: TButton; dlgSaveAll: TSaveDialog; procedure spbtnUpClick(Sender: TObject); procedure spbtnDownClick(Sender: TObject); procedure spbtnRemClick(Sender: TObject); procedure btnSaveClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; { ShowLinkerFilesForm: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} function ShowLinkerFilesForm(aFileSource: IFileSource; aFiles: TFiles; TargetPath: String): Boolean; { DoDynamicFilesLinking: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} procedure DoDynamicFilesLinking(aFileSource: IFileSource; aFiles: TFiles; TargetPath, aFirstFilenameOfSeries: String); implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Controls, //DC uFileProcs, uOperationsManager, uFileSourceCombineOperation, uGlobs; { ShowLinkerFilesForm: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} function ShowLinkerFilesForm(aFileSource: IFileSource; aFiles: TFiles; TargetPath: String): Boolean; var I: Integer; xFiles: TFiles = nil; Operation: TFileSourceCombineOperation = nil; begin with TfrmLinker.Create(Application) do begin try // Fill file list box lstFile.Sorted:=TRUE; for I:= 0 to aFiles.Count - 1 do with lstFile.Items do begin AddObject(aFiles[I].Name, aFiles[I]); end; lstFile.Sorted:=FALSE; // Use first file name without extension as target file name edSave.Text:= TargetPath + aFiles[0].NameNoExt; // Show form Result:= (ShowModal = mrOk); if Result then begin if mbForceDirectory(ExtractFileDir(edSave.Text)) then try // Fill file list with new file order xFiles:= TFiles.Create(aFiles.Path); for I:= 0 to lstFile.Count - 1 do with lstFile.Items do begin xFiles.Add(TFile(Objects[I]).Clone); end; Operation:= aFileSource.CreateCombineOperation(xFiles, edSave.Text) as TFileSourceCombineOperation; OperationsManager.AddOperation(Operation, QueueIdentifier, False); finally FreeThenNil(xFiles); end; end; finally Free; end; end; end; { DoDynamicFilesLinking: "TMainCommands.cm_FileLinker" function from "uMainCommands.pas" is calling this routine.} procedure DoDynamicFilesLinking(aFileSource: IFileSource; aFiles: TFiles; TargetPath, aFirstFilenameOfSeries: String); var xFiles: TFiles = nil; Operation: TFileSourceCombineOperation = nil; begin xFiles:= TFiles.Create(aFiles.Path); try //Fill file list with new file order xFiles.Add(aFiles[0].Clone); Operation:= aFileSource.CreateCombineOperation(xFiles, TargetPath + aFiles[0].NameNoExt) as TFileSourceCombineOperation; Operation.RequireDynamicMode:=TRUE; OperationsManager.AddOperation(Operation); finally FreeThenNil(xFiles); end; end; { TfrmLinker.spbtnDownClick } procedure TfrmLinker.spbtnDownClick(Sender: TObject); var iSelected: Integer; begin with lstFile do begin if ItemIndex < 0 then Exit; if ItemIndex = Items.Count - 1 then Exit; iSelected:= ItemIndex; Items.Move(iSelected, iSelected + 1); ItemIndex:= iSelected + 1; end; end; { TfrmLinker.spbtnUpClick } procedure TfrmLinker.spbtnUpClick(Sender: TObject); var iSelected: Integer; begin with lstFile do begin if ItemIndex < 1 then Exit; iSelected:= ItemIndex; Items.Move(iSelected, iSelected - 1); ItemIndex:= iSelected - 1; end; end; { TfrmLinker.spbtnRemClick } procedure TfrmLinker.spbtnRemClick(Sender: TObject); begin with lstFile do begin if ItemIndex > -1 then Items.Delete(ItemIndex); end; end; { TfrmLinker.btnSaveClick } procedure TfrmLinker.btnSaveClick(Sender: TObject); begin dlgSaveAll.InitialDir:= ExtractFileDir(edSave.Text); dlgSaveAll.FileName:= ExtractFileName(edSave.Text); if dlgSaveAll.Execute then edSave.Text:= dlgSaveAll.FileName; end; {TfrmLinker.FormCreate } procedure TfrmLinker.FormCreate(Sender: TObject); begin InitPropStorage(Self); // Initialize property storage end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmkdir.lfm����������������������������������������������������������������������0000644�0001750�0000144�00000004507�12023046500�015256� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmMkDir: TfrmMkDir Left = 366 Height = 77 Top = 429 Width = 350 ActiveControl = cbMkDir AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create new directory' ClientHeight = 77 ClientWidth = 350 Constraints.MinHeight = 50 Constraints.MinWidth = 350 KeyPreview = True OnKeyPress = FormKeyPress Position = poScreenCenter LCLVersion = '1.1' object lblMakeDir: TLabel Left = 6 Height = 18 Top = 3 Width = 338 Align = alTop BorderSpacing.Left = 6 BorderSpacing.Top = 3 BorderSpacing.Right = 6 Caption = '&Input new directory name:' FocusControl = cbMkDir ParentColor = False end object cbMkDir: TComboBox Left = 6 Height = 28 Top = 21 Width = 338 Align = alTop AutoComplete = True AutoCompleteText = [cbactEnabled, cbactEndOfLineComplete, cbactRetainPrefixCase, cbactSearchAscending] BorderSpacing.Left = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 3 DropDownCount = 5 ItemHeight = 0 TabOrder = 0 end object pnlBottom: TPanel Left = 6 Height = 36 Top = 55 Width = 338 Align = alTop AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 338 TabOrder = 1 object pnlButtons: TPanel Left = 192 Height = 36 Top = 0 Width = 146 Align = alRight AutoSize = True BevelOuter = bvNone ClientHeight = 36 ClientWidth = 146 TabOrder = 0 object btnOK: TBitBtn Left = 0 Height = 36 Top = 0 Width = 59 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 50 Default = True Kind = bkOK ModalResult = 1 TabOrder = 0 end object btnCancel: TBitBtn Left = 62 Height = 36 Top = 0 Width = 84 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 50 Kind = bkCancel ModalResult = 2 TabOrder = 1 end end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udiffonp.pas��������������������������������������������������������������������0000644�0001750�0000144�00000067101�12475401266�015637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uDiffONP; (******************************************************************************* * Component TDiff * * Version: 4.1 * * Date: 7 November 2009 * * Compilers: Delphi 7 - Delphi 2009 * * Author: Angus Johnson - angusj-AT-myrealbox-DOT-com * * Copyright: 2001-2009 Angus Johnson * * * * Licence to use, terms and conditions: * * The code in the TDiff component is released as freeware * * provided you agree to the following terms & conditions: * * 1. the copyright notice, terms and conditions are * * left unchanged * * 2. modifications to the code by other authors must be * * clearly documented and accompanied by the modifier's name. * * 3. the TDiff component may be freely compiled into binary * * format and no acknowledgement is required. However, a * * discrete acknowledgement would be appreciated (eg. in a * * program's 'About Box'). * * * * Description: Component to list differences between two integer arrays * * using a "longest common subsequence" algorithm. * * Typically, this component is used to diff 2 text files * * once their individuals lines have been hashed. * * * * Acknowledgements: The key algorithm in this component is based on: * * "An O(NP) Sequence Comparison Algorithm" * * by Sun Wu, Udi Manber & Gene Myers * * and uses a "divide-and-conquer" technique to avoid * * using exponential amounts of memory as described in * * "An O(ND) Difference Algorithm and its Variations" * * By E Myers - Algorithmica Vol. 1 No. 2, 1986, pp. 251-266 * *******************************************************************************) (******************************************************************************* * History: * * 13 December 2001 - Original release (used Myer's O(ND) Difference Algorithm) * * 22 April 2008 - Complete rewrite to greatly improve the code and * * provide a much simpler view of differences through a new * * 'Compares' property. * * 21 May 2008 - Another complete code rewrite to use Sun Wu et al.'s * * O(NP) Sequence Comparison Algorithm which more than * * halves times of typical comparisons. * * 24 May 2008 - Reimplemented "divide-and-conquer" technique (which was * * omitted in 21 May release) so memory use is again minimal.* * 25 May 2008 - Removed recursion to avoid the possibility of running out * * of stack memory during massive comparisons. * * 2 June 2008 - Bugfix: incorrect number of appended AddChangeInt() calls * * in Execute() for integer arrays. (It was OK with Chars) * * Added check to prevent repeat calls to Execute() while * * already executing. * * Added extra parse of differences to find occasional * * missed matches. (See readme.txt for further discussion) * * 7 November 2009 - Updated so now compiles in newer versions of Delphi. * *******************************************************************************) {$mode delphi} interface uses SysUtils, Classes, Math, Forms, Dialogs; const MAX_DIAGONAL = $FFFFFF; //~16 million type {$IFDEF UNICODE} P8Bits = PByte; {$ELSE} P8Bits = PAnsiChar; {$ENDIF} PDiags = ^TDiags; TDiags = array [-MAX_DIAGONAL .. MAX_DIAGONAL] of integer; PIntArray = ^TIntArray; TIntArray = array[0 .. MAXINT div sizeof(integer) -1] of Integer; PChrArray = ^TChrArray; TChrArray = array[0 .. MAXINT div sizeof(char) -1] of Char; TChangeKind = (ckNone, ckAdd, ckDelete, ckModify); PCompareRec = ^TCompareRec; TCompareRec = record Kind : TChangeKind; oldIndex1, oldIndex2 : integer; case boolean of false : (chr1, chr2 : Char); true : (int1, int2 : integer); end; PDiffVars = ^TDiffVars; TDiffVars = record offset1 : integer; offset2 : integer; len1 : integer; len2 : integer; end; TDiffStats = record matches : integer; adds : integer; deletes : integer; modifies : integer; end; TDiff = class(TComponent) private fCompareList: TList; fDiffList: TList; //this TList circumvents the need for recursion fCancelled: boolean; fExecuting: boolean; fCompareInts: boolean; //ie are we comparing integer arrays or char arrays DiagBufferF: pointer; DiagBufferB: pointer; DiagF, DiagB: PDiags; Ints1, Ints2: PIntArray; Chrs1, Chrs2: PChrArray; fDiffStats: TDiffStats; fLastCompareRec: TCompareRec; procedure PushDiff(offset1, offset2, len1, len2: integer); function PopDiff: boolean; procedure InitDiagArrays(len1, len2: integer); procedure DiffInt(offset1, offset2, len1, len2: integer); procedure DiffChr(offset1, offset2, len1, len2: integer); function SnakeChrF(k,offset1,offset2,len1,len2: integer): boolean; function SnakeChrB(k,offset1,offset2,len1,len2: integer): boolean; function SnakeIntF(k,offset1,offset2,len1,len2: integer): boolean; function SnakeIntB(k,offset1,offset2,len1,len2: integer): boolean; procedure AddChangeChr(offset1, range: integer; ChangeKind: TChangeKind); procedure AddChangeInt(offset1, range: integer; ChangeKind: TChangeKind); function GetCompareCount: integer; function GetCompare(index: integer): TCompareRec; public constructor Create(aOwner: TComponent); override; destructor Destroy; override; //compare either and array of characters or an array of integers ... function Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; overload; function Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; overload; //Cancel allows interrupting excessively prolonged comparisons procedure Cancel; procedure Clear; property Cancelled: boolean read fCancelled; property Count: integer read GetCompareCount; property Compares[index: integer]: TCompareRec read GetCompare; default; property DiffStats: TDiffStats read fDiffStats; end; implementation procedure Register; begin RegisterComponents('Samples', [TDiff]); end; //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ constructor TDiff.Create(aOwner: TComponent); begin inherited; fCompareList := TList.create; fDiffList := TList.Create; end; //------------------------------------------------------------------------------ destructor TDiff.Destroy; begin Clear; fCompareList.free; fDiffList.Free; inherited; end; //------------------------------------------------------------------------------ function TDiff.Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; var i, Len1Minus1: integer; begin result := not fExecuting; if not result then exit; fCancelled := false; fExecuting := true; try Clear; Len1Minus1 := len1 -1; fCompareList.Capacity := len1 + len2; fCompareInts := true; GetMem(DiagBufferF, sizeof(integer)*(len1+len2+3)); GetMem(DiagBufferB, sizeof(integer)*(len1+len2+3)); Ints1 := pointer(pints1); Ints2 := pointer(pints2); try PushDiff(0, 0, len1, len2); while PopDiff do; finally freeMem(DiagBufferF); freeMem(DiagBufferB); end; if fCancelled then begin result := false; Clear; exit; end; //correct the occasional missed match ... for i := 1 to count -1 do with PCompareRec(fCompareList[i])^ do if (Kind = ckModify) and (int1 = int2) then begin Kind := ckNone; Dec(fDiffStats.modifies); Inc(fDiffStats.matches); end; //finally, append any trailing matches onto compareList ... with fLastCompareRec do AddChangeInt(oldIndex1,len1Minus1-oldIndex1, ckNone); finally fExecuting := false; end; end; //------------------------------------------------------------------------------ function TDiff.Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; var i, Len1Minus1: integer; begin result := not fExecuting; if not result then exit; fCancelled := false; fExecuting := true; try Clear; Len1Minus1 := len1 -1; fCompareList.Capacity := len1 + len2; fDiffList.Capacity := 1024; fCompareInts := false; GetMem(DiagBufferF, sizeof(integer)*(len1+len2+3)); GetMem(DiagBufferB, sizeof(integer)*(len1+len2+3)); Chrs1 := pointer(pchrs1); Chrs2 := pointer(pchrs2); try PushDiff(0, 0, len1, len2); while PopDiff do; finally freeMem(DiagBufferF); freeMem(DiagBufferB); end; if fCancelled then begin result := false; Clear; exit; end; //correct the occasional missed match ... for i := 1 to count -1 do with PCompareRec(fCompareList[i])^ do if (Kind = ckModify) and (chr1 = chr2) then begin Kind := ckNone; Dec(fDiffStats.modifies); Inc(fDiffStats.matches); end; //finally, append any trailing matches onto compareList ... with fLastCompareRec do AddChangeChr(oldIndex1,len1Minus1-oldIndex1, ckNone); finally fExecuting := false; end; end; //------------------------------------------------------------------------------ procedure TDiff.PushDiff(offset1, offset2, len1, len2: integer); var DiffVars: PDiffVars; begin new(DiffVars); DiffVars.offset1 := offset1; DiffVars.offset2 := offset2; DiffVars.len1 := len1; DiffVars.len2 := len2; fDiffList.Add(DiffVars); end; //------------------------------------------------------------------------------ function TDiff.PopDiff: boolean; var DiffVars: PDiffVars; idx: integer; begin idx := fDiffList.Count -1; result := idx >= 0; if not result then exit; DiffVars := PDiffVars(fDiffList[idx]); with DiffVars^ do if fCompareInts then DiffInt(offset1, offset2, len1, len2) else DiffChr(offset1, offset2, len1, len2); Dispose(DiffVars); fDiffList.Delete(idx); end; //------------------------------------------------------------------------------ procedure TDiff.InitDiagArrays(len1, len2: integer); var i: integer; begin //assumes that top and bottom matches have been excluded P8Bits(DiagF) := P8Bits(DiagBufferF) - sizeof(integer)*(MAX_DIAGONAL-(len1+1)); for i := - (len1+1) to (len2+1) do DiagF[i] := -MAXINT; DiagF[1] := -1; P8Bits(DiagB) := P8Bits(DiagBufferB) - sizeof(integer)*(MAX_DIAGONAL-(len1+1)); for i := - (len1+1) to (len2+1) do DiagB[i] := MAXINT; DiagB[len2-len1+1] := len2; end; //------------------------------------------------------------------------------ procedure TDiff.DiffInt(offset1, offset2, len1, len2: integer); var p, k, delta: integer; begin //trim matching bottoms ... while (len1 > 0) and (len2 > 0) and (Ints1[offset1] = Ints2[offset2]) do begin inc(offset1); inc(offset2); dec(len1); dec(len2); end; //trim matching tops ... while (len1 > 0) and (len2 > 0) and (Ints1[offset1+len1-1] = Ints2[offset2+len2-1]) do begin dec(len1); dec(len2); end; //stop diff'ing if minimal conditions reached ... if (len1 = 0) then begin AddChangeInt(offset1 ,len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeInt(offset1 ,len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeInt(offset1, 1, ckDelete); AddChangeInt(offset1, 1, ckAdd); exit; end; p := -1; delta := len2 - len1; InitDiagArrays(len1, len2); if delta < 0 then begin repeat inc(p); if (p mod 1024) = 1023 then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := p downto delta +1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := -p + delta to delta-1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := delta -p to -1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; for k := p downto 1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; if SnakeIntF(delta,offset1,offset2,len1,len2) then exit; if SnakeIntB(0,offset1,offset2,len1,len2) then exit; until(false); end else begin repeat inc(p); if (p mod 1024) = 1023 then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := -p to delta -1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := p + delta downto delta +1 do if SnakeIntF(k,offset1,offset2,len1,len2) then exit; for k := delta + p downto 1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; for k := -p to -1 do if SnakeIntB(k,offset1,offset2,len1,len2) then exit; if SnakeIntF(delta,offset1,offset2,len1,len2) then exit; if SnakeIntB(0,offset1,offset2,len1,len2) then exit; until(false); end; end; //------------------------------------------------------------------------------ procedure TDiff.DiffChr(offset1, offset2, len1, len2: integer); var p, k, delta: integer; begin //trim matching bottoms ... while (len1 > 0) and (len2 > 0) and (Chrs1[offset1] = Chrs2[offset2]) do begin inc(offset1); inc(offset2); dec(len1); dec(len2); end; //trim matching tops ... while (len1 > 0) and (len2 > 0) and (Chrs1[offset1+len1-1] = Chrs2[offset2+len2-1]) do begin dec(len1); dec(len2); end; //stop diff'ing if minimal conditions reached ... if (len1 = 0) then begin AddChangeChr(offset1 ,len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeChr(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeChr(offset1, 1, ckDelete); AddChangeChr(offset1, 1, ckAdd); exit; end; p := -1; delta := len2 - len1; InitDiagArrays(len1, len2); if delta < 0 then begin repeat inc(p); if (p mod 1024 = 1023) then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := p downto delta +1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := -p + delta to delta-1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := delta -p to -1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; for k := p downto 1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; if SnakeChrF(delta,offset1,offset2,len1,len2) then exit; if SnakeChrB(0,offset1,offset2,len1,len2) then exit; until(false); end else begin repeat inc(p); if (p mod 1024 = 1023) then begin Application.ProcessMessages; if fCancelled then exit; end; //nb: the Snake order is important here for k := -p to delta -1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := p + delta downto delta +1 do if SnakeChrF(k,offset1,offset2,len1,len2) then exit; for k := delta + p downto 1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; for k := -p to -1 do if SnakeChrB(k,offset1,offset2,len1,len2) then exit; if SnakeChrF(delta,offset1,offset2,len1,len2) then exit; if SnakeChrB(0,offset1,offset2,len1,len2) then exit; until(false); end; end; //------------------------------------------------------------------------------ function TDiff.SnakeChrF(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagF[k+1] > DiagF[k-1] then y := DiagF[k+1] else y := DiagF[k-1]+1; x := y - k; while (x < len1-1) and (y < len2-1) and (Chrs1[offset1+x+1] = Chrs2[offset2+y+1]) do begin inc(x); inc(y); end; DiagF[k] := y; result := (DiagF[k] >= DiagB[k]); if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeChrB(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagB[k-1] < DiagB[k+1] then y := DiagB[k-1] else y := DiagB[k+1]-1; x := y - k; while (x >= 0) and (y >= 0) and (Chrs1[offset1+x] = Chrs2[offset2+y]) do begin dec(x); dec(y); end; DiagB[k] := y; result := DiagB[k] <= DiagF[k]; if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeIntF(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagF[k+1] > DiagF[k-1] then y := DiagF[k+1] else y := DiagF[k-1]+1; x := y - k; while (x < len1-1) and (y < len2-1) and (Ints1[offset1+x+1] = Ints2[offset2+y+1]) do begin inc(x); inc(y); end; DiagF[k] := y; result := (DiagF[k] >= DiagB[k]); if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ function TDiff.SnakeIntB(k,offset1,offset2,len1,len2: integer): boolean; var x,y: integer; begin if DiagB[k-1] < DiagB[k+1] then y := DiagB[k-1] else y := DiagB[k+1]-1; x := y - k; while (x >= 0) and (y >= 0) and (Ints1[offset1+x] = Ints2[offset2+y]) do begin dec(x); dec(y); end; DiagB[k] := y; result := DiagB[k] <= DiagF[k]; if not result then exit; inc(x); inc(y); PushDiff(offset1+x, offset2+y, len1-x, len2-y); PushDiff(offset1, offset2, x, y); end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeChr(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (fLastCompareRec.oldIndex1 < offset1 -1) do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckNone: for i := 1 to range do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; ckAdd : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := fLastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).chr2 := Chrs2[oldIndex2]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; chr1 := #0; inc(oldIndex2); chr2 := Chrs2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := fLastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).chr1 := Chrs1[oldIndex1]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; chr2 := #0; inc(oldIndex1); chr1 := Chrs1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeInt(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (fLastCompareRec.oldIndex1 < offset1 -1) do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckNone: for i := 1 to range do begin with fLastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; ckAdd : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := fLastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).int2 := Ints2[oldIndex2]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; int1 := $0; inc(oldIndex2); int2 := Ints2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with fLastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(fLastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := fLastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).int1 := Ints1[oldIndex1]; if j = fCompareList.Count-1 then fLastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; int2 := $0; inc(oldIndex1); int1 := Ints1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := fLastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.Clear; var i: integer; begin for i := 0 to fCompareList.Count-1 do dispose(PCompareRec(fCompareList[i])); fCompareList.clear; fLastCompareRec.Kind := ckNone; fLastCompareRec.oldIndex1 := -1; fLastCompareRec.oldIndex2 := -1; fDiffStats.matches := 0; fDiffStats.adds := 0; fDiffStats.deletes :=0; fDiffStats.modifies :=0; Ints1 := nil; Ints2 := nil; Chrs1 := nil; Chrs2 := nil; end; //------------------------------------------------------------------------------ function TDiff.GetCompareCount: integer; begin result := fCompareList.count; end; //------------------------------------------------------------------------------ function TDiff.GetCompare(index: integer): TCompareRec; begin result := PCompareRec(fCompareList[index])^; end; //------------------------------------------------------------------------------ procedure TDiff.Cancel; begin fCancelled := true; end; //------------------------------------------------------------------------------ end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwlxmodule.pas������������������������������������������������������������������0000644�0001750�0000144�00000052713�12613126742�016232� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- WLX-API implementation (TC WLX-API v2.0). Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) contributors: Copyright (C) 2009-2013 Alexander Koblov (alexx2000@mail.ru) 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 uWlxModule; {$mode objfpc}{$H+} interface uses Classes, SysUtils, dynlibs, uDetectStr, uWlxPrototypes, WlxPlugin, DCClassesUtf8, uDCUtils, LCLProc, LCLType, DCXmlConfig {$IFDEF LCLWIN32} , Windows {$ENDIF} {$IFDEF LCLGTK} , gtk, glib, gdk, gtkproc {$ENDIF} {$IFDEF LCLGTK2} , gtk2, glib2, gtk2proc {$ENDIF} {$IFDEF LCLQT} , qt4, qtwidgets // The Qt widgetset must be used to load plugins on qt {$ENDIF} ; type { TWlxModule } TWlxModule = class protected // a) Mandatory (must be implemented) ListLoad: TListLoad; // b) Optional (must NOT be implemented if unsupported!) ListLoadNext: TListLoadNext; ListCloseWindow: TListCloseWindow; ListGetDetectString: TListGetDetectString; ListSearchText: TListSearchText; ListSearchDialog: TListSearchDialog; ListSendCommand: TListSendCommand; ListPrint: TListPrint; ListNotificationReceived: TListNotificationReceived; ListSetDefaultParams: TListSetDefaultParams; ListGetPreviewBitmap: TListGetPreviewBitmap; // c) Unicode ListLoadW: TListLoadW; ListLoadNextW: TListLoadNextW; ListSearchTextW: TListSearchTextW; ListPrintW: TListPrintW; ListGetPreviewBitmapW: TListGetPreviewBitmapW; private FModuleHandle: TLibHandle; // Handle to .DLL or .so FParser: TParserControl; FPluginWindow: HWND; function GetCanPrint: Boolean; function GIsLoaded: Boolean; public Name: String; FileName: String; DetectStr: String; pShowFlags: Integer; Enabled: Boolean; //--------------------- constructor Create; destructor Destroy; override; //--------------------- function LoadModule: Boolean; procedure UnloadModule; //--------------------- function CallListLoad(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): HWND; function CallListLoadNext(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): Integer; function CallListGetDetectString: String; procedure CallListSetDefaultParams; procedure CallListCloseWindow; function CallListGetPreviewBitmap(FileToLoad: String; Width, Height: Integer; contentbuf: String): hbitmap; function CallListNotificationReceived(Msg, wParam, lParam: Integer): Integer; function CallListPrint(FileToPrint, DefPrinter: String; PrintFlags: Integer; var Margins: trect): Integer; function CallListSearchDialog(FindNext: Integer): Integer; function CallListSearchText(SearchString: String; SearchParameter: Integer): Integer; function CallListSendCommand(Command, Parameter: Integer): Integer; //--------------------- function FileParamVSDetectStr(AFileName: String; bForce: Boolean): Boolean; //--------------------- procedure SetFocus; procedure ResizeWindow(aRect: TRect); //--------------------- property IsLoaded: Boolean read GIsLoaded; property ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; property PluginWindow: HWND read FPluginWindow; property CanPrint: Boolean read GetCanPrint; end; { TWLXModuleList } TWLXModuleList = class private Flist: TStringList; function GetCount: Integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Load(Ini: TIniFileEx); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(Ini: TIniFileEx); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure DeleteItem(Index: Integer); //--------------------- function Add(Item: TWlxModule): Integer; overload; function Add(FileName: String): Integer; overload; function Add(AName, FileName, DetectStr: String): Integer; overload; //--------------------- procedure Assign(OtherList: TWLXModuleList); function IndexOfName(const AName: string): Integer; //--------------------- function IsLoaded(AName: String): Boolean; overload; function IsLoaded(Index: Integer): Boolean; overload; function LoadModule(AName: String): Boolean; overload; function LoadModule(Index: Integer): Boolean; overload; //--------------------- function GetWlxModule(Index: Integer): TWlxModule; overload; function GetWlxModule(AName: String): TWlxModule; overload; //--------------------- //--------------------- //property WlxList:TStringList read Flist; property Count: Integer read GetCount; end; implementation uses FileUtil, uDebug, DCOSUtils, DCConvertEncoding, uOSUtils, uGlobsPaths, uGlobs; const WlxIniFileName = 'wlx.ini'; {$IF DEFINED(LCLWIN32)} var WindowProcAtom: PWideChar; function PluginProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var WindowProc: WNDPROC; begin if Msg = WM_KEYDOWN then begin PostMessage(GetParent(hWnd), Msg, wParam, lParam); end; WindowProc := WNDPROC(GetPropW(hWnd, WindowProcAtom)); if Assigned(WindowProc) then Result := CallWindowProc(WindowProc, hWnd, Msg, wParam, lParam) else Result := DefWindowProc(hWnd, Msg, wParam, lParam); end; {$ENDIF} procedure WlxPrepareContainer(var ParentWin: HWND); begin {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} ParentWin := HWND(GetFixedWidget(Pointer(ParentWin))); {$ELSEIF DEFINED(LCLQT)} ParentWin := HWND(TQtWidget(ParentWin).GetContainerWidget); {$ENDIF} end; { TWlxModule } function TWlxModule.GIsLoaded: Boolean; begin Result := FModuleHandle <> 0; end; function TWlxModule.GetCanPrint: Boolean; begin Result := Assigned(ListPrint) or Assigned(ListPrintW); end; constructor TWlxModule.Create; begin Enabled := True; FParser := TParserControl.Create; end; destructor TWlxModule.Destroy; begin {$IF NOT DEFINED(LCLWIN32)} if GIsLoaded then UnloadModule; {$ENDIF} if Assigned(FParser) then FParser.Free; inherited Destroy; end; function TWlxModule.LoadModule: Boolean; begin // DCDebug('WLXM LoadModule entered'); FModuleHandle := mbLoadLibrary(Self.FileName); Result := (FModuleHandle <> NilHandle); if FModuleHandle = NilHandle then Exit; { Mandatory } ListLoad := TListLoad(GetProcAddress(FModuleHandle, 'ListLoad')); { Optional } ListLoadNext := TListLoadNext(GetProcAddress(FModuleHandle, 'ListLoadNext')); ListCloseWindow := TListCloseWindow(GetProcAddress(FModuleHandle, 'ListCloseWindow')); ListGetDetectString := TListGetDetectString(GetProcAddress(FModuleHandle, 'ListGetDetectString')); ListSearchText := TListSearchText(GetProcAddress(FModuleHandle, 'ListSearchText')); ListSearchDialog := TListSearchDialog(GetProcAddress(FModuleHandle, 'ListSearchDialog')); ListSendCommand := TListSendCommand(GetProcAddress(FModuleHandle, 'ListSendCommand')); ListPrint := TListPrint(GetProcAddress(FModuleHandle, 'ListPrint')); ListNotificationReceived := TListNotificationReceived(GetProcAddress(FModuleHandle, 'ListNotificationReceived')); ListSetDefaultParams := TListSetDefaultParams(GetProcAddress(FModuleHandle, 'ListSetDefaultParams')); ListGetPreviewBitmap := TListGetPreviewBitmap(GetProcAddress(FModuleHandle, 'ListGetPreviewBitmap')); { Unicode } ListLoadW := TListLoadW(GetProcAddress(FModuleHandle, 'ListLoadW')); ListLoadNextW := TListLoadNextW(GetProcAddress(FModuleHandle, 'ListLoadNextW')); ListSearchTextW := TListSearchTextW(GetProcAddress(FModuleHandle, 'ListSearchTextW')); ListPrintW := TListPrintW(GetProcAddress(FModuleHandle, 'ListPrintW')); ListGetPreviewBitmapW := TListGetPreviewBitmapW(GetProcAddress(FModuleHandle, 'ListGetPreviewBitmapW')); // ListSetDefaultParams must be called immediately after loading the DLL, before ListLoad. CallListSetDefaultParams; // DCDebug('WLXM LoadModule Leaved'); end; procedure TWlxModule.UnloadModule; begin {$IF NOT DEFINED(LCLQT)} {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; { Mandatory } ListLoad := nil; { Optional } ListLoadNext := nil; ListCloseWindow := nil; ListGetDetectString := nil; ListSearchText := nil; ListSearchDialog := nil; ListSendCommand := nil; ListPrint := nil; ListNotificationReceived := nil; ListSetDefaultParams := nil; ListGetPreviewBitmap := nil; { Unicode } ListLoadW := nil; ListLoadNextW := nil; ListSearchTextW := nil; ListPrintW := nil; ListGetPreviewBitmapW := nil; {$ENDIF} end; function TWlxModule.CallListLoad(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): HWND; begin WlxPrepareContainer(ParentWin); if Assigned(ListLoadW) then FPluginWindow := ListLoadW(ParentWin, PWideChar(UTF8Decode(FileToLoad)), ShowFlags) else if Assigned(ListLoad) then FPluginWindow := ListLoad(ParentWin, PAnsiChar(CeUtf8ToSys(FileToLoad)), ShowFlags) else Exit(wlxInvalidHandle); {$IF DEFINED(LCLWIN32)} // Subclass plugin window to catch some hotkeys like 'n' or 'p'. Result := SetWindowLongPtr(FPluginWindow, GWL_WNDPROC, LONG_PTR(@PluginProc)); Windows.SetPropW(FPluginWindow, WindowProcAtom, Result); {$ENDIF} Result := FPluginWindow; end; function TWlxModule.CallListLoadNext(ParentWin: HWND; FileToLoad: String; ShowFlags: Integer): Integer; begin WlxPrepareContainer(ParentWin); if Assigned(ListLoadNextW) then Result := ListLoadNextW(ParentWin, FPluginWindow, PWideChar(UTF8Decode(FileToLoad)), ShowFlags) else if Assigned(ListLoadNext) then Result := ListLoadNext(ParentWin, FPluginWindow, PAnsiChar(CeUtf8ToSys(FileToLoad)), ShowFlags) else Result := LISTPLUGIN_ERROR; end; procedure TWlxModule.CallListCloseWindow; begin // DCDebug('Try to call ListCloseWindow'); try {$IF DEFINED(LCLWIN32)} SetWindowLongPtr(FPluginWindow, GWL_WNDPROC, RemovePropW(FPluginWindow, WindowProcAtom)); {$ENDIF} if Assigned(ListCloseWindow) then ListCloseWindow(FPluginWindow) {$IF DEFINED(LCLWIN32)} else DestroyWindow(FPluginWindow) {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} else gtk_widget_destroy(PGtkWidget(FPluginWindow)); {$ELSEIF DEFINED(LCLQT)} else QWidget_Destroy(QWidgetH(FPluginWindow)); {$ENDIF} finally FPluginWindow := 0; end; // DCDebug('Call ListCloseWindow success'); end; function TWlxModule.CallListGetDetectString: String; const MAX_LEN = 2048; // See listplugin.hlp fo details begin // DCDebug('GetDetectstr Entered'); if Assigned(ListGetDetectString) then begin SetLength(Result, MAX_LEN); Result[1] := #0; ListGetDetectString(PAnsiChar(Result), MAX_LEN); Result := PAnsiChar(Result); end else Result := EmptyStr; // DCDebug('GetDetectStr Leaved'); end; function TWlxModule.CallListSearchText(SearchString: String; SearchParameter: Integer): Integer; begin if Assigned(ListSearchTextW) then Result := ListSearchTextW(FPluginWindow, PWideChar(UTF8Decode(SearchString)), SearchParameter) else if Assigned(ListSearchText) then Result := ListSearchText(FPluginWindow, PAnsiChar(CeUtf8ToSys(SearchString)), SearchParameter) else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListSearchDialog(FindNext: Integer): Integer; begin if Assigned(ListSearchDialog) then begin Result := ListSearchDialog(FPluginWindow, FindNext); end else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListSendCommand(Command, Parameter: Integer): Integer; begin if Assigned(ListSendCommand) then begin Result := ListSendCommand(FPluginWindow, Command, Parameter); end else Result := LISTPLUGIN_ERROR; end; function TWlxModule.FileParamVSDetectStr(AFileName: String; bForce: Boolean): Boolean; begin if not Enabled then Exit(False); FParser.IsForce:= bForce; FParser.DetectStr := Self.DetectStr; DCDebug('DetectStr = ' + FParser.DetectStr); DCDebug('AFileName = ' + AFileName); Result := FParser.TestFileResult(AFileName); end; procedure TWlxModule.SetFocus; begin {$IF DEFINED(LCLWIN32)} Windows.SetFocus(FPluginWindow); {$ELSEIF DEFINED(LCLQT)} QWidget_setFocus(QWidgetH(FPluginWindow)); {$ELSEIF DEFINED(LCLGTK2)} gtk_widget_grab_focus(PGtkWidget(FPluginWindow)); {$ENDIF} end; procedure TWlxModule.ResizeWindow(aRect: TRect); begin //ToDo: Implement for other widgetsets with aRect do begin {$IF DEFINED(LCLWIN32)} MoveWindow(FPluginWindow, Left, Top, Right - Left, Bottom - Top, True); {$ELSEIF DEFINED(LCLQT)} QWidget_move(QWidgetH(FPluginWindow), Left, Top); QWidget_resize(QWidgetH(FPluginWindow), Right - Left, Bottom - Top); {$ELSEIF DEFINED(LCLGTK2)} gtk_widget_set_uposition(PGtkWidget(FPluginWindow), Left, -1); gtk_widget_set_usize(PGtkWidget(FPluginWindow), Right - Left, Bottom - Top); {$ENDIF} end; end; function TWlxModule.CallListPrint(FileToPrint, DefPrinter: String; PrintFlags: Integer; var Margins: trect): Integer; begin if Assigned(ListPrintW) then Result := ListPrintW(FPluginWindow, PWideChar(UTF8Decode(FileToPrint)), PWideChar(UTF8Decode(DefPrinter)), PrintFlags, Margins) else if Assigned(ListPrint) then Result := ListPrint(FPluginWindow, PAnsiChar(CeUtf8ToSys(FileToPrint)), PAnsiChar(CeUtf8ToSys(DefPrinter)), PrintFlags, Margins) else Result := LISTPLUGIN_ERROR; end; function TWlxModule.CallListNotificationReceived(Msg, wParam, lParam: Integer): Integer; begin if Assigned(ListNotificationReceived) then begin Result := ListNotificationReceived(FPluginWindow, Msg, wParam, lParam); end; end; procedure TWlxModule.CallListSetDefaultParams; var dps: TListDefaultParamStruct; begin if Assigned(ListSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WlxIniFileName); dps.PluginInterfaceVersionHi := 2; dps.PluginInterfaceVersionLow := 0; dps.Size := SizeOf(TListDefaultParamStruct); ListSetDefaultParams(@dps); end; end; function TWlxModule.CallListGetPreviewBitmap(FileToLoad: String; Width, Height: Integer; contentbuf: String): hbitmap; begin if Assigned(ListGetPreviewBitmapW) then Result := ListGetPreviewBitmapW(PWideChar(UTF8Decode(FileToLoad)), Width, Height, PChar(contentbuf), length(contentbuf)) else if Assigned(ListGetPreviewBitmap) then Result := ListGetPreviewBitmap(PAnsiChar(CeUtf8ToSys(FileToLoad)), Width, Height, PChar(contentbuf), length(contentbuf)); end; { TWLXModuleList } function TWLXModuleList.GetCount: Integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TWLXModuleList.Create; begin Flist := TStringList.Create; end; destructor TWLXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TWLXModuleList.Clear; begin while Flist.Count > 0 do begin TWlxModule(Flist.Objects[0]).Free; Flist.Delete(0); end; end; procedure TWLXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TWLXModuleList.Load(Ini: TIniFileEx); var xCount, I: Integer; tmp: String; begin Self.Clear; xCount := Ini.ReadInteger('Lister Plugins', 'PluginCount', 0); if xCount = 0 then Exit; for i := 0 to xCount - 1 do begin tmp := Ini.ReadString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', ''); Flist.AddObject(UpCase(tmp), TWlxModule.Create); TWlxModule(Flist.Objects[I]).Name := tmp; TWlxModule(Flist.Objects[I]).DetectStr := Ini.ReadString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Detect', ''); TWlxModule(Flist.Objects[I]).FileName := GetCmdDirFromEnvVar(Ini.ReadString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', '')); end; end; procedure TWLXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; AWlxModule: TWlxModule; begin Clear; ANode := ANode.FindNode('WlxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WlxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin AWlxModule := TWlxModule.Create; Flist.AddObject(UpCase(AName), AWlxModule); AWlxModule.Name := AName; AWlxModule.FileName := GetCmdDirFromEnvVar(APath); AWlxModule.DetectStr := AConfig.GetValue(ANode, 'DetectString', ''); AWlxModule.Enabled:= AConfig.GetAttr(ANode, 'Enabled', True); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWLXModuleList.Save(Ini: TIniFileEx); var i: Integer; begin Ini.EraseSection('Lister Plugins'); Ini.WriteInteger('Lister Plugins', 'PluginCount', Flist.Count); for i := 0 to Flist.Count - 1 do begin Ini.WriteString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', TWlxModule(Flist.Objects[I]).Name); Ini.WriteString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Detect', TWlxModule(Flist.Objects[I]).DetectStr); Ini.WriteString('Lister Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', SetCmdDirAsEnvVar(TWlxModule(Flist.Objects[I]).FileName)); end; end; procedure TWLXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WlxPlugins', True); AConfig.ClearNode(ANode); for i := 0 to Flist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WlxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', TWlxModule(Flist.Objects[I]).Enabled); AConfig.AddValue(SubNode, 'Name', TWlxModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', SetCmdDirAsEnvVar(TWlxModule(Flist.Objects[I]).FileName)); AConfig.AddValue(SubNode, 'DetectString', TWlxModule(Flist.Objects[I]).DetectStr); end; end; procedure TWLXModuleList.DeleteItem(Index: Integer); begin if (Index > -1) and (Index < Flist.Count) then begin TWlxModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TWLXModuleList.Add(Item: TWlxModule): Integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TWLXModuleList.Add(FileName: String): Integer; var s: String; begin // DCDebug('WLXLIST Add entered'); s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); Result := Flist.AddObject(UpCase(s), TWlxModule.Create); TWlxModule(Flist.Objects[Result]).Name := s; TWlxModule(Flist.Objects[Result]).FileName := FileName; if TWlxModule(Flist.Objects[Result]).LoadModule then begin TWlxModule(Flist.Objects[Result]).DetectStr := TWlxModule(Flist.Objects[Result]).CallListGetDetectString; TWlxModule(Flist.Objects[Result]).UnloadModule; end; // DCDebug('WLXLIST ADD Leaved'); end; function TWLXModuleList.Add(AName, FileName, DetectStr: String): Integer; begin Result := Flist.AddObject(UpCase(AName), TWlxModule.Create); TWlxModule(Flist.Objects[Result]).Name := AName; TWlxModule(Flist.Objects[Result]).DetectStr := DetectStr; TWlxModule(Flist.Objects[Result]).FileName := FileName; end; procedure TWLXModuleList.Assign(OtherList: TWLXModuleList); var I, J: Integer; begin Clear; for I := 0 to OtherList.Flist.Count - 1 do begin with TWlxModule(OtherList.Flist.Objects[I]) do begin J:= Add(Name, FileName, DetectStr); GetWlxModule(J).Enabled:= Enabled; end; end; end; function TWLXModuleList.IndexOfName(const AName: string): Integer; begin Result := Flist.IndexOf(UpCase(AName)); end; function TWLXModuleList.IsLoaded(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetWlxModule(x).IsLoaded; end; end; function TWLXModuleList.IsLoaded(Index: Integer): Boolean; begin Result := GetWlxModule(Index).IsLoaded; end; function TWLXModuleList.LoadModule(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetWlxModule(x).LoadModule; end; end; function TWLXModuleList.LoadModule(Index: Integer): Boolean; begin Result := GetWlxModule(Index).LoadModule; end; function TWLXModuleList.GetWlxModule(Index: Integer): TWlxModule; begin Result := TWlxModule(Flist.Objects[Index]); end; function TWLXModuleList.GetWlxModule(AName: String): TWlxModule; var tmp: Integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp > -1 then Result := TWlxModule(Flist.Objects[tmp]); end; {$IF DEFINED(LCLWIN32)}{$WARNINGS OFF} initialization WindowProcAtom := Pointer(GlobalAddAtomW('Double Commander')); finalization Windows.GlobalDeleteAtom(ATOM(WindowProcAtom)); {$ENDIF} end. �����������������������������������������������������doublecmd-0.7.1/src/fhotdirexportimport.lrt���������������������������������������������������������0000644�0001750�0000144�00000000607�12405254001�020157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMHOTDIREXPORTIMPORT.CAPTION=Select the entries your want to import TFRMHOTDIREXPORTIMPORT.LBLHINTHOLDCONTROL.CAPTION=Hold CTRL and click entries to select multiple ones TFRMHOTDIREXPORTIMPORT.LBHINT.CAPTION=When clicking a sub-menu, it will select the whole menu TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION=Import all! TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION=Import selected �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsetfileproperties.pas����������������������������������������������������������0000644�0001750�0000144�00000040275�12666540554�017754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Change file properties dialog Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) 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 fSetFileProperties; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, ExtCtrls, StdCtrls, Buttons, uFileSourceSetFilePropertyOperation, DCBasicTypes, DateTimePicker; type { TfrmSetFileProperties } TfrmSetFileProperties = class(TForm) Bevel2: TBevel; Bevel1: TBevel; btnCancel: TBitBtn; btnCreationTime: TSpeedButton; btnLastAccessTime: TSpeedButton; btnLastWriteTime: TSpeedButton; btnOK: TBitBtn; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; chkArchive: TCheckBox; chkCreationTime: TCheckBox; chkHidden: TCheckBox; chkLastAccessTime: TCheckBox; chkLastWriteTime: TCheckBox; chkReadOnly: TCheckBox; chkRecursive: TCheckBox; chkSystem: TCheckBox; edtOctal: TEdit; gbTimeSamp: TGroupBox; gbWinAttributes: TGroupBox; gbUnixAttributes: TGroupBox; lblAttrBitsStr: TLabel; lblAttrGroupStr: TLabel; lblAttrInfo: TLabel; lblModeInfo: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblAttrText: TLabel; lblAttrTextStr: TLabel; lblExec: TLabel; lblOctal: TLabel; lblRead: TLabel; lblWrite: TLabel; DatesPanel: TPanel; ChecksPanel: TPanel; ZVCreationDateTime: TDateTimePicker; ZVLastWriteDateTime: TDateTimePicker; ZVLastAccessDateTime: TDateTimePicker; procedure btnCreationTimeClick(Sender: TObject); procedure btnLastAccessTimeClick(Sender: TObject); procedure btnLastWriteTimeClick(Sender: TObject); procedure SetOtherDateLikeThis(ReferenceZVDateTimePicker:TDateTimePicker); procedure btnOKClick(Sender: TObject); procedure cbChangeModeClick(Sender: TObject); procedure chkChangeAttrClick(Sender: TObject); procedure chkCreationTimeChange(Sender: TObject); procedure chkLastAccessTimeChange(Sender: TObject); procedure chkLastWriteTimeChange(Sender: TObject); procedure edtOctalKeyPress(Sender: TObject; var Key: char); procedure edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure ZVCreationDateTimeChange(Sender: TObject); procedure ZVLastAccessDateTimeChange(Sender: TObject); procedure ZVLastWriteDateTimeChange(Sender: TObject); private FOperation: TFileSourceSetFilePropertyOperation; FChangeTriggersEnabled: Boolean; procedure ShowMode(Mode: TFileAttrs); procedure ShowAttr(Attr: TFileAttrs); procedure UpdateAllowGrayed(AllowGrayed: Boolean); function GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; function GetAttrFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; public constructor Create(aOwner: TComponent; const aOperation: TFileSourceSetFilePropertyOperation); reintroduce; end; function ShowChangeFilePropertiesDialog(const aOperation: TFileSourceSetFilePropertyOperation): Boolean; implementation {$R *.lfm} uses LCLType, DCFileAttributes, DCStrUtils, uDCUtils, uFileProperty, uKeyboard; function ShowChangeFilePropertiesDialog(const aOperation: TFileSourceSetFilePropertyOperation): Boolean; begin with TfrmSetFileProperties.Create(Application, aOperation) do try Result:= (ShowModal = mrOK); finally Free; end; end; { TfrmSetFileProperties } procedure TfrmSetFileProperties.btnOKClick(Sender: TObject); var theNewProperties: TFileProperties; begin with FOperation do begin theNewProperties:= NewProperties; if fpAttributes in SupportedProperties then begin if theNewProperties[fpAttributes] is TNtfsFileAttributesProperty then IncludeAttributes:= GetAttrFromForm(ExcludeAttributes); if theNewProperties[fpAttributes] is TUnixFileAttributesProperty then IncludeAttributes:= GetModeFromForm(ExcludeAttributes); // Nothing changed, clear new property if (IncludeAttributes = 0) and (ExcludeAttributes = 0) then begin theNewProperties[fpAttributes].Free; theNewProperties[fpAttributes]:= nil; end; end; if chkCreationTime.Checked then (theNewProperties[fpCreationTime] as TFileCreationDateTimeProperty).Value:= ZVCreationDateTime.DateTime else begin theNewProperties[fpCreationTime].Free; theNewProperties[fpCreationTime]:= nil; end; if chkLastWriteTime.Checked then (theNewProperties[fpModificationTime] as TFileModificationDateTimeProperty).Value:= ZVLastWriteDateTime.DateTime else begin theNewProperties[fpModificationTime].Free; theNewProperties[fpModificationTime]:= nil; end; if chkLastAccessTime.Checked then (theNewProperties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value:= ZVLastAccessDateTime.DateTime else begin theNewProperties[fpLastAccessTime].Free; theNewProperties[fpLastAccessTime]:= nil; end; NewProperties:= theNewProperties; Recursive:= chkRecursive.Checked; end; end; procedure TfrmSetFileProperties.cbChangeModeClick(Sender: TObject); var ExcludeAttrs: TFileAttrs; CheckBox: TCheckBox absolute Sender; begin if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; if CheckBox.State = cbGrayed then edtOctal.Text:= EmptyStr else begin edtOctal.Text:= DecToOct(GetModeFromForm(ExcludeAttrs)); end; FChangeTriggersEnabled := True; end; end; procedure TfrmSetFileProperties.chkChangeAttrClick(Sender: TObject); begin // Called after checking any windows-check end; procedure TfrmSetFileProperties.edtOctalKeyPress(Sender: TObject; var Key: char); begin if not ((Key in ['0'..'7']) or (Key = Chr(VK_BACK))) then Key:= #0; end; procedure TfrmSetFileProperties.edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if FChangeTriggersEnabled then begin FChangeTriggersEnabled := False; ShowMode(OctToDec(edtOctal.Text)); FChangeTriggersEnabled := True; end; end; procedure TfrmSetFileProperties.FormCreate(Sender: TObject); begin end; procedure TfrmSetFileProperties.ShowMode(Mode: TFileAttrs); begin cbReadOwner.Checked:= ((Mode and S_IRUSR) = S_IRUSR); cbWriteOwner.Checked:= ((Mode and S_IWUSR) = S_IWUSR); cbExecOwner.Checked:= ((Mode and S_IXUSR) = S_IXUSR); cbReadGroup.Checked:= ((Mode and S_IRGRP) = S_IRGRP); cbWriteGroup.Checked:= ((Mode and S_IWGRP) = S_IWGRP); cbExecGroup.Checked:= ((Mode and S_IXGRP) = S_IXGRP); cbReadOther.Checked:= ((Mode and S_IROTH) = S_IROTH); cbWriteOther.Checked:= ((Mode and S_IWOTH) = S_IWOTH); cbExecOther.Checked:= ((Mode and S_IXOTH) = S_IXOTH); cbSuid.Checked:= ((Mode and S_ISUID) = S_ISUID); cbSgid.Checked:= ((Mode and S_ISGID) = S_ISGID); cbSticky.Checked:= ((Mode and S_ISVTX) = S_ISVTX); end; procedure TfrmSetFileProperties.ShowAttr(Attr: TFileAttrs); begin chkArchive.Checked:= ((Attr and FILE_ATTRIBUTE_ARCHIVE) <> 0); chkReadOnly.Checked:= ((Attr and FILE_ATTRIBUTE_READONLY) <> 0); chkHidden.Checked:= ((Attr and FILE_ATTRIBUTE_HIDDEN) <> 0); chkSystem.Checked:= ((Attr and FILE_ATTRIBUTE_SYSTEM) <> 0); end; procedure TfrmSetFileProperties.UpdateAllowGrayed(AllowGrayed: Boolean); var Index: Integer; begin lblAttrInfo.Visible:= AllowGrayed; for Index:= 0 to gbWinAttributes.ControlCount - 1 do begin if gbWinAttributes.Controls[Index] is TCheckBox then TCheckBox(gbWinAttributes.Controls[Index]).AllowGrayed:= AllowGrayed; end; lblModeInfo.Visible:= AllowGrayed; for Index:= 0 to gbUnixAttributes.ControlCount - 1 do begin if gbUnixAttributes.Controls[Index] is TCheckBox then TCheckBox(gbUnixAttributes.Controls[Index]).AllowGrayed:= AllowGrayed; end; end; function TfrmSetFileProperties.GetModeFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; begin Result:= 0; ExcludeAttrs:= 0; case cbReadOwner.State of cbChecked: Result:= (Result or S_IRUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRUSR; end; case cbWriteOwner.State of cbChecked: Result:= (Result or S_IWUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWUSR; end; case cbExecOwner.State of cbChecked: Result:= (Result or S_IXUSR); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXUSR; end; case cbReadGroup.State of cbChecked: Result:= (Result or S_IRGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IRGRP; end; case cbWriteGroup.State of cbChecked: Result:= (Result or S_IWGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWGRP; end; case cbExecGroup.State of cbChecked: Result:= (Result or S_IXGRP); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXGRP; end; case cbReadOther.State of cbChecked: Result:= (Result or S_IROTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IROTH; end; case cbWriteOther.State of cbChecked: Result:= (Result or S_IWOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IWOTH; end; case cbExecOther.State of cbChecked: Result:= (Result or S_IXOTH); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_IXOTH; end; case cbSuid.State of cbChecked: Result:= (Result or S_ISUID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISUID; end; case cbSgid.State of cbChecked: Result:= (Result or S_ISGID); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISGID; end; case cbSticky.State of cbChecked: Result:= (Result or S_ISVTX); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or S_ISVTX; end; end; function TfrmSetFileProperties.GetAttrFromForm(out ExcludeAttrs: TFileAttrs): TFileAttrs; begin Result:= 0; ExcludeAttrs:= 0; case chkArchive.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_ARCHIVE); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_ARCHIVE; end; case chkReadOnly.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_READONLY); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_READONLY; end; case chkHidden.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_HIDDEN); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_HIDDEN; end; case chkSystem.State of cbChecked: Result:= (Result or FILE_ATTRIBUTE_SYSTEM); cbUnchecked: ExcludeAttrs:= ExcludeAttrs or FILE_ATTRIBUTE_SYSTEM; end; end; constructor TfrmSetFileProperties.Create(aOwner: TComponent; const aOperation: TFileSourceSetFilePropertyOperation); begin inherited Create(aOwner); FOperation:= aOperation; FChangeTriggersEnabled:= True; ZVCreationDateTime.DateTime:= NullDate; ZVLastWriteDateTime.DateTime:= NullDate; ZVLastAccessDateTime.DateTime:= NullDate; // Enable only supported file properties with FOperation do begin if fpAttributes in SupportedProperties then begin UpdateAllowGrayed((TargetFiles.Count > 1) or TargetFiles[0].IsDirectory); if NewProperties[fpAttributes] is TNtfsFileAttributesProperty then begin if TargetFiles.Count = 1 then ShowAttr((NewProperties[fpAttributes] as TNtfsFileAttributesProperty).Value); gbWinAttributes.Show; end; if NewProperties[fpAttributes] is TUnixFileAttributesProperty then begin if TargetFiles.Count = 1 then ShowMode((NewProperties[fpAttributes] as TUnixFileAttributesProperty).Value); gbUnixAttributes.Show; end; end; if (fpCreationTime in SupportedProperties) and Assigned(NewProperties[fpCreationTime]) then begin ZVCreationDateTime.DateTime:= (NewProperties[fpCreationTime] as TFileCreationDateTimeProperty).Value; ZVCreationDateTime.Enabled:= True; chkCreationTime.Enabled:= True; btnCreationTime.Enabled:= True; end; if (fpModificationTime in SupportedProperties) and Assigned(NewProperties[fpModificationTime]) then begin ZVLastWriteDateTime.DateTime:= (NewProperties[fpModificationTime] as TFileModificationDateTimeProperty).Value; ZVLastWriteDateTime.Enabled:= True; chkLastWriteTime.Enabled:= True; btnLastWriteTime.Enabled:= True; end; if (fpLastAccessTime in SupportedProperties) and Assigned(NewProperties[fpLastAccessTime]) then begin ZVLastAccessDateTime.DateTime:= (NewProperties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value; ZVLastAccessDateTime.Enabled:= True; chkLastAccessTime.Enabled:= True; btnLastAccessTime.Enabled:= True; end; end; chkCreationTime.Checked:=False; chkLastWriteTime.Checked:=False; chkLastAccessTime.Checked:=False; end; procedure TfrmSetFileProperties.btnCreationTimeClick(Sender: TObject); begin ZVCreationDateTime.DateTime:= Now; if not chkCreationTime.Checked then chkCreationTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVCreationDateTime); end; procedure TfrmSetFileProperties.btnLastWriteTimeClick(Sender: TObject); begin ZVLastWriteDateTime.DateTime:= Now; if not chkLastWriteTime.Checked then chkLastWriteTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastWriteDateTime); end; procedure TfrmSetFileProperties.btnLastAccessTimeClick(Sender: TObject); begin ZVLastAccessDateTime.DateTime:= Now; if not chkLastAccessTime.Checked then chkLastAccessTime.Checked:=TRUE; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastAccessDateTime); end; procedure TfrmSetFileProperties.SetOtherDateLikeThis(ReferenceZVDateTimePicker:TDateTimePicker); begin if ReferenceZVDateTimePicker<>ZVCreationDateTime then begin ZVCreationDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkCreationTime.Checked:=TRUE; end; if ReferenceZVDateTimePicker<>ZVLastWriteDateTime then begin ZVLastWriteDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkLastWriteTime.Checked:=TRUE; end; if ReferenceZVDateTimePicker<>ZVLastAccessDateTime then begin ZVLastAccessDateTime.DateTime:=ReferenceZVDateTimePicker.DateTime; chkLastAccessTime.Checked:=TRUE; end; ReferenceZVDateTimePicker.SetFocus; end; procedure TfrmSetFileProperties.chkCreationTimeChange(Sender: TObject); begin UpdateColor(ZVCreationDateTime, chkCreationTime.Checked); if (chkCreationTime.Checked and Visible) then ZVCreationDateTime.SetFocus; end; procedure TfrmSetFileProperties.chkLastAccessTimeChange(Sender: TObject); begin UpdateColor(ZVLastAccessDateTime, chkLastAccessTime.Checked); if (chkLastAccessTime.Checked and Visible) then ZVLastAccessDateTime.SetFocus; end; procedure TfrmSetFileProperties.chkLastWriteTimeChange(Sender: TObject); begin UpdateColor(ZVLastWriteDateTime, chkLastWriteTime.Checked); if (chkLastWriteTime.Checked and Visible) then ZVLastWriteDateTime.SetFocus; end; procedure TfrmSetFileProperties.ZVCreationDateTimeChange(Sender: TObject); begin chkCreationTime.Checked:=True; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVCreationDateTime); end; procedure TfrmSetFileProperties.ZVLastAccessDateTimeChange(Sender: TObject); begin chkLastAccessTime.Checked:=True; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastAccessDateTime); end; procedure TfrmSetFileProperties.ZVLastWriteDateTimeChange(Sender: TObject); begin chkLastWriteTime.Checked:=True; if ssCtrl in GetKeyShiftStateEx then SetOtherDateLikeThis(ZVLastWriteDateTime); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udescr.pas����������������������������������������������������������������������0000644�0001750�0000144�00000027770�12646776232�015332� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This unit contains class for working with file comments. Copyright (C) 2008-2014 Alexander Koblov (alexx2000@mail.ru) 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 uDescr; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8; const DESCRIPT_ION = 'descript.ion'; type { TDescription } TDescription = class(TStringListEx) private FLastDescrFile, FEncoding: String; FModified: Boolean; FNewEncoding: String; FDestDescr: TDescription; procedure PrepareDescrFile(FileName: String); function GetDescription(Index: Integer): String; function GetDescription(const FileName: String): String; procedure SetDescription(Index: Integer; const AValue: String); procedure SetDescription(const FileName: String; const AValue: String); procedure SetEncoding(const AValue: String); public {en Create TDescription class @param(UseSubDescr @true if need Copy/Move functions) } constructor Create(UseSubDescr: Boolean); {en Destroy TDescription class } destructor Destroy; override; {en Load data from description file } procedure LoadFromFile(const FileName: String); override; {en Save data to description file } procedure SaveToFile(const FileName: String); override; {en Add description for file @param(FileName File name) @param(Descr Description) @returns(Index of added item) } function AddDescription(FileName, Descr: String): Integer; {en Read description by file name @param(FileName File name) @returns(Description of file) } function ReadDescription(FileName: String): String; {en Write description for file @param(FileName File name) @param(Descr Description) } procedure WriteDescription(FileName: String; const Descr: String); {en Delete description by file name @param(FileName File name) @returns(The function returns @true if successful, @false otherwise) } function DeleteDescription(const FileName: String): Boolean; {en Copy description for file @param(FileNameFrom Source file name) @param(FileNameTo Destination file name) @returns(The function returns @true if successful, @false otherwise) } function CopyDescription(const FileNameFrom, FileNameTo: String): Boolean; {en Move description for file @param(FileNameFrom Source file name) @param(FileNameTo Destination file name) @returns(The function returns @true if successful, @false otherwise) } function MoveDescription(const FileNameFrom, FileNameTo: String): Boolean; {en Save all changes to description file } procedure SaveDescription; {en Reset last description file name } procedure Reset; {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5)) or ((FPC_VERSION = 2) and (FPC_RELEASE = 4) and (FPC_PATCH >= 4))} function Find(const S: string; out Index: Integer): Boolean; override; {$ELSE} function Find(const S: string; var Index: Integer): Boolean; override; {$ENDIF} {en File description encoding } property Encoding: String read FEncoding write SetEncoding; {en Get description by file name } property DescrByFileName[const FileName: String]: String read GetDescription write SetDescription; {en Get description by file name index } property DescrByIndex[Index: Integer]: String read GetDescription write SetDescription; end; implementation uses LConvEncoding, uDebug, DCOSUtils, uConvEncoding; { TDescription } procedure TDescription.PrepareDescrFile(FileName: String); var sDescrFile: String; begin sDescrFile:= ExtractFilePath(FileName) + DESCRIPT_ION; if sDescrFile <> FLastDescrFile then try // save previous decription file if need if FModified and (FLastDescrFile <> EmptyStr) and (Count > 0) then SaveToFile(FLastDescrFile); // load description file if exists FLastDescrFile:= sDescrFile; if not mbFileExists(FLastDescrFile) then FEncoding:= FNewEncoding // use new encoding if new file else begin LoadFromFile(FLastDescrFile); // try to guess encoding FEncoding:= DetectEncoding(Text); // set target encoding if Assigned(FDestDescr) then FDestDescr.FNewEncoding:= FEncoding; if FEncoding <> EncodingUTF8 then Text:= ConvertEncoding(Text, FEncoding, EncodingUTF8); end; except on E: Exception do DCDebug('TDescription.PrepareDescrFile - ' + E.Message); end; end; {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5)) or ((FPC_VERSION = 2) and (FPC_RELEASE = 4) and (FPC_PATCH >= 4))} function TDescription.Find(const S: string; out Index: Integer): Boolean; {$ELSE} function TDescription.Find(const S: string; var Index: Integer): Boolean; {$ENDIF} var iIndex, iPosOfDivider, iLength, iFirstStringPos: Integer; sFileName, sIndexString: String; cSearchChar : Char; begin Result:= False; sFileName:= ExtractFileName(S); //DCDebug('#########################'); //DCDebug('sFileName: '+ sFileName); for iIndex:= Count - 1 downto 0 do begin sIndexString := Self[iIndex]; //DCDebug('Self[I]: '+ sIndexString); //DCDebug('iIndex: '+ IntToStr(iIndex)); //DCDebug('Count: '+ IntToStr(Count)); //DCDebug('Pos(sFileName, Self[I]): '+ IntToStr(Pos(sFileName, sIndexString))); // File comment length iLength := Length(sIndexString); if iLength = 0 then Continue; //at the first, look if first char a " if(sIndexString[1]='"')then begin // YES cSearchChar := '"'; iFirstStringPos := 2; end else begin //NO cSearchChar := ' '; iFirstStringPos := 1; end; // find position of next cSearchChar in sIndexString iPosOfDivider:= 2; while (iPosOfDivider < iLength) do // don't look above the strings length begin // is at this position the cSearchChar? if (sIndexString[iPosOfDivider] = cSearchChar) then begin // YES // found the sFileName in the sIndexString (no more, no less) if mbCompareFileNames(sFileName, Copy(sIndexString, iFirstStringPos, iPosOfDivider-iFirstStringPos)) then begin // YES Index := iIndex; Exit(True); end else begin // NO Break; end; end; Inc(iPosOfDivider); end; end; end; function TDescription.GetDescription(Index: Integer): String; var sLine: String; iDescrStart: Integer; begin sLine:= Self[Index]; if Pos(#34, sLine) <> 1 then begin iDescrStart:= Pos(#32, sLine); Result:= Copy(sLine, iDescrStart+1, Length(sLine) - iDescrStart); end else begin iDescrStart:= Pos(#34#32, sLine); Result:= Copy(sLine, iDescrStart+2, Length(sLine) - iDescrStart); end; end; function TDescription.GetDescription(const FileName: String): String; var I: Integer; begin Result:= ''; if Find(FileName, I) then Result:= GetDescription(I); end; procedure TDescription.SetDescription(Index: Integer; const AValue: String); var sLine, sFileName: String; iDescrStart: Integer; begin FModified:= True; sLine:= Self[Index]; if Pos('"', sLine) <> 1 then begin iDescrStart:= Pos(#32, sLine); sFileName:= Copy(sLine, 1, iDescrStart); Self[Index]:= sFileName + AValue; end else begin iDescrStart:= Pos(#34#32, sLine); sFileName:= Copy(sLine, 1, iDescrStart+1); Self[Index]:= sFileName + AValue; end; end; procedure TDescription.SetDescription(const FileName: String; const AValue: String); var I: Integer; begin if Find(FileName, I) then SetDescription(I, AValue) else AddDescription(FileName, AValue); end; procedure TDescription.SetEncoding(const AValue: String); begin if FEncoding <> AValue then begin FEncoding:= AValue; if mbFileExists(FLastDescrFile) then LoadFromFile(FLastDescrFile); end; end; constructor TDescription.Create(UseSubDescr: Boolean); begin FModified:= False; FEncoding:= EncodingUTF8; // by default FNewEncoding:= EncodingUTF8; if UseSubDescr then FDestDescr:= TDescription.Create(False) else FDestDescr:= nil; inherited Create; end; destructor TDescription.Destroy; begin if Assigned(FDestDescr) then FreeAndNil(FDestDescr); inherited Destroy; end; procedure TDescription.LoadFromFile(const FileName: String); begin FModified:= False; inherited LoadFromFile(FileName); if FEncoding <> EncodingUTF8 then Text:= ConvertEncoding(Text, FEncoding, EncodingUTF8); end; procedure TDescription.SaveToFile(const FileName: String); begin FModified:= False; if FEncoding <> EncodingUTF8 then Text:= ConvertEncoding(Text, EncodingUTF8, FEncoding); inherited SaveToFile(FileName); end; function TDescription.AddDescription(FileName, Descr: String): Integer; begin FModified:= True; FileName:= ExtractFileName(FileName); if Pos(#32, FileName) <> 0 then Result := Add(#34+FileName+#34#32+Descr) else Result := Add(FileName+#32+Descr); end; function TDescription.ReadDescription(FileName: String): String; begin PrepareDescrFile(FileName); Result:= GetDescription(FileName); end; procedure TDescription.WriteDescription(FileName: String; const Descr: String); begin PrepareDescrFile(FileName); SetDescription(FileName, Descr); end; function TDescription.DeleteDescription(const FileName: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileName); if Find(FileName, I) then begin Delete(I); FModified:= True; Result:= True; end; end; function TDescription.CopyDescription(const FileNameFrom, FileNameTo: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileNameFrom); if Find(FileNameFrom, I) then begin DCDebug(FileNameFrom, '=', DescrByIndex[I]); FDestDescr.WriteDescription(FileNameTo, DescrByIndex[I]); Result:= True; end; end; function TDescription.MoveDescription(const FileNameFrom, FileNameTo: String): Boolean; var I: Integer; begin Result:= False; PrepareDescrFile(FileNameFrom); if Find(FileNameFrom, I) then begin DCDebug(FileNameFrom, '=', DescrByIndex[I]); FDestDescr.WriteDescription(FileNameTo, DescrByIndex[I]); Delete(I); FModified:= True; Result:= True; end; end; procedure TDescription.SaveDescription; begin try if Count > 0 then SaveToFile(FLastDescrFile) else mbDeleteFile(FLastDescrFile); if Assigned(FDestDescr) then FDestDescr.SaveDescription; except on E: Exception do DCDebug('TDescription.SaveDescription - ' + E.Message); end; end; procedure TDescription.Reset; begin FLastDescrFile:= EmptyStr; end; end. ��������doublecmd-0.7.1/src/fmaincommandsdlg.pas������������������������������������������������������������0000644�0001750�0000144�00000040265�12646752277�017345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Internal Main Commands Selection Dialog Window Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 fMainCommandsDlg; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, Menus, ExtCtrls, //DC uFormCommands, types; type { TfrmMainCommandsDlg } TfrmMainCommandsDlg = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; cbCategorySortOrNot: TComboBox; cbCommandsSortOrNot: TComboBox; cbSelectAllCategoryDefault: TCheckBox; gbSelection: TGroupBox; imgCommandIcon: TImage; lblSelectedCommandCategory: TLabel; lblSelectedCommandHotkey: TLabel; lblHotKey: TLabel; lblSelectedCommandHelp: TLabel; lbledtFilter: TLabeledEdit; lblCategory: TLabel; lblCommandName: TLabel; lblHint: TLabel; lbCategory: TListBox; lbCommands: TListBox; lblSelectedCommand: TLabel; lblSelectedCommandHint: TLabel; pnlImage: TPanel; procedure cbCategorySortOrNotChange(Sender: TObject); procedure cbCommandsSortOrNotChange(Sender: TObject); procedure cbSelectAllCategoryDefaultChange(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure lbCategoryEnter(Sender: TObject); procedure lbCategoryExit(Sender: TObject); procedure lbCategorySelectionChange(Sender: TObject; {%H-}User: boolean); procedure lbCommandsDblClick(Sender: TObject); procedure lbCommandsDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); procedure lbCommandsEnter(Sender: TObject); procedure lbCommandsExit(Sender: TObject); procedure lbCommandsKeyPress(Sender: TObject; var Key: char); procedure lbledtFilterChange(Sender: TObject); procedure AttemptToSetupForThisCommand(CommandToShow: string); procedure lbledtFilterEnter(Sender: TObject); procedure lbledtFilterExit(Sender: TObject); procedure lblPlaceCaptionInClipClick(Sender: TObject); procedure lblSelectedCommandHelpClick(Sender: TObject); procedure lblSelectedCommandHelpMouseEnter(Sender: TObject); procedure lblSelectedCommandHelpMouseLeave(Sender: TObject); private { Private declarations } FFormCommands: IFormCommands; ListCommands: TStringList; OffsetForHotKey: integer; OffsetForHint: integer; public { Public declarations } procedure LoadCategoryListbox(CategoryToSelectIfAny: string); procedure LoadCommandsListbox(WantedCommandToSelect: string); end; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowMainCommandDlgForm(DefaultCmd: string; var ReturnedCmd: string): boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Clipbrd, LCLType, Graphics, //DC DCStrUtils, dmHelpManager, uLng, uPixMapManager, uGlobs, fMain, uDebug, LazUTF8, LCLIntf; function ShowMainCommandDlgForm(DefaultCmd: string; var ReturnedCmd: string): boolean; var frmMainCommandsDlg: TfrmMainCommandsDlg; begin ReturnedCmd := ''; frmMainCommandsDlg := TfrmMainCommandsDlg.Create(Application); //Did not use the "with..." here to make absolutely sure of what is referenced in the following. try // Show form frmMainCommandsDlg.AttemptToSetupForThisCommand(DefaultCmd); Result := (frmMainCommandsDlg.ShowModal = mrOk) and (frmMainCommandsDlg.lbCommands.ItemIndex <> -1); if Result then begin ReturnedCmd := frmMainCommandsDlg.lbCommands.Items.Strings[frmMainCommandsDlg.lbCommands.ItemIndex]; if pos('|', ReturnedCmd) <> 0 then ReturnedCmd := leftstr(ReturnedCmd, (pos('|', ReturnedCmd) - 1)); end; finally frmMainCommandsDlg.Free; end; end; { TfrmMainCommandsDlg.FormCreate } procedure TfrmMainCommandsDlg.FormCreate(Sender: TObject); begin ParseLineToList(rsCmdKindOfSort, cbCategorySortOrNot.Items); ParseLineToList(rsCmdKindOfSort, cbCommandsSortOrNot.Items); InitPropStorage(Self); // Initialize property storage FFormCommands := frmMain as IFormCommands; ListCommands := TStringList.Create; end; { TfrmMainCommandsDlg.FormDestroy } procedure TfrmMainCommandsDlg.FormDestroy(Sender: TObject); begin ListCommands.Free; end; { TfrmMainCommandsDlg.lbCategoryEnter } procedure TfrmMainCommandsDlg.lbCategoryEnter(Sender: TObject); begin lblCategory.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbCategoryExit } procedure TfrmMainCommandsDlg.lbCategoryExit(Sender: TObject); begin lblCategory.Font.Style := []; end; { TfrmMainCommandsDlg.lbCategorySelectionChange } procedure TfrmMainCommandsDlg.lbCategorySelectionChange(Sender: TObject; User: boolean); begin LoadCommandsListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.lbCommandsDblClick } procedure TfrmMainCommandsDlg.lbCommandsDblClick(Sender: TObject); begin ModalResult := mrOk; //No need to call "CLOSE", setting the "ModalResult" close the window there. end; { TfrmMainCommandsDlg.lbCommandsDrawItem } procedure TfrmMainCommandsDlg.lbCommandsDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var sCommand: string = ''; sHint: string = ''; sHotKey: string = ''; sCategory: string = ''; FlagCategoryTitle: boolean = False; Bitmap: TBitmap = nil; begin with Control as TListbox do begin FFormCommands.ExtractCommandFields(Items.Strings[Index], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if FlagCategoryTitle then begin Canvas.Brush.Color := clBtnFace; Canvas.FillRect(ARect); Canvas.Font.Style := [fsItalic, fsBold]; if (odSelected in State) then Canvas.Font.Color := clBlack; Canvas.TextOut(ARect.Left, ARect.Top, ' ' + rsSimpleWordCategory + ': ' + sCommand); //A little offset to the right, it's prettier. end else begin Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left, ARect.Top, sCommand); Canvas.TextOut(ARect.Left + OffsetForHint, ARect.Top, sHint); if not (odSelected in State) then Canvas.Font.Color := clRed; Canvas.TextOut(ARect.Left + OffsetForHotKey, ARect.Top, sHotKey); end; if odSelected in State then begin if not FlagCategoryTitle then begin lblSelectedCommand.Caption := sCommand; if sHotKey <> '' then lblSelectedCommandHotkey.Caption := '(' + sHotKey + ')' else lblSelectedCommandHotkey.Caption := ''; if sCategory <> '' then lblSelectedCommandCategory.Caption := rsSimpleWordCategory + ': ' + sCategory + ' -' else lblSelectedCommandCategory.Caption := ''; lblSelectedCommandHint.Caption := sHint; try Bitmap := PixMapManager.LoadBitmapEnhanced(LowerCase(sCommand), 32, True, clDefault, nil); imgCommandIcon.Picture.Bitmap.Assign(Bitmap); finally Bitmap.Free; end; end else begin lblSelectedCommand.Caption := ''; lblSelectedCommandHotkey.Caption := ''; lblSelectedCommandHint.Caption := ''; lblSelectedCommandCategory.Caption := ''; imgCommandIcon.Picture.Bitmap.Clear; end; end; end; end; { TfrmMainCommandsDlg.lbCommandsEnter } procedure TfrmMainCommandsDlg.lbCommandsEnter(Sender: TObject); begin lblCommandName.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbCommandsExit } procedure TfrmMainCommandsDlg.lbCommandsExit(Sender: TObject); begin lblCommandName.Font.Style := []; end; procedure TfrmMainCommandsDlg.lbCommandsKeyPress(Sender: TObject; var Key: char); begin case Key of #$0D: begin Key := #$00; ModalResult := mrOk; end; #$1B: begin Key := #$00; ModalResult := mrCancel; end; else inherited; end; end; { TfrmMainCommandsDlg.lbledtFilterChange } procedure TfrmMainCommandsDlg.lbledtFilterChange(Sender: TObject); var IndexItem: longint; LastSelectedText: string; begin lblSelectedCommand.Caption := ''; lblSelectedCommandHint.Caption := ''; imgCommandIcon.Picture.Bitmap.Clear; if lbCommands.ItemIndex <> -1 then LastSelectedText := lbCommands.Items.Strings[lbCommands.ItemIndex] else LastSelectedText := ''; lbCommands.Items.Clear; for IndexItem := 0 to pred(ListCommands.Count) do begin if (lbledtFilter.Text = '') or (pos(lowercase(lbledtFilter.Text), lowercase(ListCommands.Strings[IndexItem])) <> 0) then lbCommands.Items.Add(ListCommands.Strings[IndexItem]); end; if LastSelectedText <> '' then lbCommands.ItemIndex := lbCommands.Items.IndexOf(LastSelectedText); if (lbCommands.ItemIndex = -1) and (lbCommands.Items.Count > 0) then lbCommands.ItemIndex := 0; end; { procedure TfrmMainCommandsDlg.cbCategorySortOrNotChange } procedure TfrmMainCommandsDlg.cbCategorySortOrNotChange(Sender: TObject); begin LoadCategoryListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.cbCommandsSortOrNotChange } procedure TfrmMainCommandsDlg.cbCommandsSortOrNotChange(Sender: TObject); begin LoadCommandsListbox(''); lbledtFilter.OnChange := nil; lbledtFilter.Text := ''; lbledtFilter.OnChange := @lbledtFilterChange; end; { TfrmMainCommandsDlg.cbSelectAllCategoryDefaultChange } procedure TfrmMainCommandsDlg.cbSelectAllCategoryDefaultChange(Sender: TObject); begin if cbSelectAllCategoryDefault.Checked then if (lbCategory.ItemIndex <> 0) and (lbCategory.Count > 0) then lbCategory.ItemIndex := 0; end; procedure TfrmMainCommandsDlg.FormActivate(Sender: TObject); begin lbCommands.MakeCurrentVisible; //Looks like it's not necessary with Windows, but with Linux it is. lbCategory.MakeCurrentVisible; end; { TfrmMainCommandsDlg.LoadCategoryListbox } procedure TfrmMainCommandsDlg.LoadCategoryListbox(CategoryToSelectIfAny: string); var ListCategory: TStringList; LastCategorySelected: string; begin ListCategory := TStringList.Create; try if lbCategory.ItemIndex <> -1 then LastCategorySelected := lbCategory.Items.Strings[lbCategory.ItemIndex] else LastCategorySelected := ''; FFormCommands.GetCommandCategoriesList(ListCategory, TCommandCategorySortOrder(cbCategorySortOrNot.ItemIndex)); lbCategory.Items.Assign(ListCategory); lbCategory.ItemIndex := lbCategory.Items.IndexOf(CategoryToSelectIfAny); if lbCategory.ItemIndex = -1 then begin if LastCategorySelected <> '' then lbCategory.ItemIndex := lbCategory.Items.IndexOf(LastCategorySelected); if (lbCategory.ItemIndex = -1) and (lbCategory.Items.Count > 0) then lbCategory.ItemIndex := 0; end; finally ListCategory.Free; end; end; { TfrmMainCommandsDlg.LoadCommandsListbox } procedure TfrmMainCommandsDlg.LoadCommandsListbox(WantedCommandToSelect: string); var LastSelectedCommand: string; SearchingIndex, WantedCommandIndex, LastSelectedIndex: longint; sCommand: string = ''; sHint: string = ''; sHotKey: string = ''; sCategory: string; FlagCategoryTitle: boolean = False; LargestCommandName, LargestHotKeyName: longint; begin LastSelectedCommand := ''; if lbCommands.ItemIndex <> -1 then begin FFormCommands.ExtractCommandFields(ListCommands.Strings[lbCommands.ItemIndex], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if not FlagCategoryTitle then LastSelectedCommand := sCommand; end; FFormCommands.GetCommandsListForACommandCategory(ListCommands, lbCategory.Items.Strings[lbCategory.ItemIndex], TCommandSortOrder(cbCommandsSortOrNot.ItemIndex)); LargestCommandName := lbCommands.Canvas.TextWidth(lblCommandName.Caption); LargestHotKeyName := lbCommands.Canvas.TextWidth(lblHotKey.Caption); //This way, if the word "hotkey" once translated is longer than a hotkey, label will not be overwritten. WantedCommandIndex := -1; LastSelectedIndex := -1; SearchingIndex := 0; while (SearchingIndex < ListCommands.Count) do begin FFormCommands.ExtractCommandFields(ListCommands.Strings[SearchingIndex], sCategory, sCommand, sHint, sHotKey, FlagCategoryTitle); if not FlagCategoryTitle then begin if lbCommands.Canvas.TextWidth(sCommand) > LargestCommandName then LargestCommandName := lbCommands.Canvas.TextWidth(sCommand); if lbCommands.Canvas.TextWidth(sHotKey) > LargestHotKeyName then LargestHotKeyName := lbCommands.Canvas.TextWidth(sHotKey); if (WantedCommandToSelect <> '') and (WantedCommandToSelect = sCommand) then WantedCommandIndex := SearchingIndex; if (LastSelectedCommand <> '') and (LastSelectedCommand = sCommand) then LastSelectedIndex := SearchingIndex; end; Inc(SearchingIndex); end; OffsetForHotKey := LargestCommandName + 10; lblHotKey.BorderSpacing.Left := OffsetForHotKey; OffsetForHint := LargestCommandName + 10 + LargestHotKeyName + 10; lblHint.BorderSpacing.Left := OffsetForHint; lbCommands.Items.Assign(ListCommands); if WantedCommandIndex <> -1 then lbCommands.ItemIndex := WantedCommandIndex else if LastSelectedIndex <> -1 then lbCommands.ItemIndex := LastSelectedIndex else if lbCommands.Items.Count > 0 then lbCommands.ItemIndex := 0; end; { TfrmMainCommandsDlg.AttemptToSetupForThisCommand } procedure TfrmMainCommandsDlg.AttemptToSetupForThisCommand(CommandToShow: string); var CommandRec: PCommandRec; begin CommandRec := frmMain.Commands.Commands.GetCommandRec(CommandToShow); if Assigned(CommandRec) then begin if Assigned(CommandRec^.Action) and CommandRec^.Action.Enabled then begin if cbSelectAllCategoryDefault.Checked then LoadCategoryListbox('') else LoadCategoryListbox(CommandRec^.Action.Category); LoadCommandsListbox(CommandToShow); end; end; end; { TfrmMainCommandsDlg.lbledtFilterEnter } procedure TfrmMainCommandsDlg.lbledtFilterEnter(Sender: TObject); begin lbledtFilter.EditLabel.Font.Style := [fsBold]; end; { TfrmMainCommandsDlg.lbledtFilterExit } procedure TfrmMainCommandsDlg.lbledtFilterExit(Sender: TObject); begin lbledtFilter.EditLabel.Font.Style := []; end; { TfrmMainCommandsDlg.lblPlaceCaptionInClipClick } procedure TfrmMainCommandsDlg.lblPlaceCaptionInClipClick(Sender: TObject); begin with Sender as TLabel do Clipboard.AsText := Caption; ShowMessage(Format(rsMsgThisIsNowInClipboard, [Clipboard.AsText])); end; { TfrmMainCommandsDlg.lblSelectedCommandHelpClick } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/cmds.html#' + lblSelectedCommand.Caption); end; { TfrmMainCommandsDlg.lblSelectedCommandHelpClick } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpMouseEnter(Sender: TObject); begin lblSelectedCommandHelp.Font.Color := clRed; end; { TfrmMainCommandsDlg.lblSelectedCommandHelpMouseLeave } procedure TfrmMainCommandsDlg.lblSelectedCommandHelpMouseLeave(Sender: TObject); begin lblSelectedCommandHelp.Font.Color := clDefault; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdeletedlg.pas������������������������������������������������������������������0000644�0001750�0000144�00000001766�12646426226�016134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fDeleteDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Menus, StdCtrls, fButtonForm, uOperationsManager, uFileSource; type { TfrmDeleteDlg } TfrmDeleteDlg = class(TfrmButtonForm) lblMessage: TLabel; private { private declarations } public { public declarations } end; function ShowDeleteDialog(const Message: String; FileSource: IFileSource; out QueueId: TOperationsManagerQueueIdentifier): Boolean; implementation function ShowDeleteDialog(const Message: String; FileSource: IFileSource; out QueueId: TOperationsManagerQueueIdentifier): Boolean; begin with TfrmDeleteDlg.Create(Application, FileSource) do begin Caption:= Application.Title; lblMessage.Caption:= Message; Constraints.MinWidth:= 400; Constraints.MaxWidth:= 800; Result:= ShowModal = mrOK; QueueId:= QueueIdentifier; Free; end; end; {$R *.lfm} end. ����������doublecmd-0.7.1/src/uwdxmodule.pas������������������������������������������������������������������0000644�0001750�0000144�00000112644�12626406755�016233� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- WDX-API implementation. (TC WDX-API v1.5) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Some ideas were found in sources of WdxGuide by Alexey Torgashin and SuperWDX by Pavel Dubrovsky and Dmitry Vorotilin. 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 uWDXModule; {$mode delphi}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, uWdxPrototypes, WdxPlugin, dynlibs, uDetectStr, lua, uFile, DCXmlConfig; type { TWdxField } TWdxField = class FName: String; FUnits: String; FType: Integer; function GetUnitIndex(UnitName: String): Integer; end; { TWDXModule } TWDXModule = class private function GetAName: String; virtual; abstract; function GetAFileName: String; virtual; abstract; function GetADetectStr: String; virtual; abstract; procedure SetAName(AValue: String); virtual; abstract; procedure SetAFileName(AValue: String); virtual; abstract; procedure SetADetectStr(const AValue: String); virtual; abstract; public //--------------------- function LoadModule: Boolean; virtual; abstract; procedure UnloadModule; virtual; abstract; function IsLoaded: Boolean; virtual; abstract; //--------------------- function FieldList: TStringList; virtual; abstract; function WdxFieldType(n: Integer): String; function GetFieldIndex(FieldName: String): Integer; virtual; abstract; function FileParamVSDetectStr(const aFile: TFile): Boolean; virtual; abstract; //------------------------------------------------------ procedure CallContentGetSupportedField; virtual; abstract; procedure CallContentSetDefaultParams; virtual; abstract; procedure CallContentStopGetValue(FileName: String); virtual; abstract; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; virtual; abstract; function CallContentGetDetectString: String; virtual; abstract; function CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; overload; virtual; abstract; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; virtual; abstract; function CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; overload; virtual; abstract; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; virtual; abstract; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; virtual; abstract; {ContentSetValue ContentEditValue ContentSendStateInformation} //------------------------------------------------------ property Name: String read GetAName write SetAName; property FileName: String read GetAFileName write SetAFileName; property DetectStr: String read GetADetectStr write SetADetectStr; //--------------------- end; { TPluginWDX } TPluginWDX = class(TWDXModule) private FFieldsList: TStringList; FModuleHandle: TLibHandle; // Handle to .DLL or .so FForce: Boolean; FParser: TParserControl; FName: String; FFileName: String; FDetectStr: String; function GetAName: String; override; function GetAFileName: String; override; function GetADetectStr: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; procedure SetADetectStr(const AValue: String); override; protected //a) Mandatory (must be implemented) ContentGetSupportedField: TContentGetSupportedField; ContentGetValue: TContentGetValue; //b) Optional (must NOT be implemented if unsupported!) ContentGetDetectString: TContentGetDetectString; ContentSetDefaultParams: TContentSetDefaultParams; ContentStopGetValue: TContentStopGetValue; ContentGetDefaultSortOrder: TContentGetDefaultSortOrder; ContentPluginUnloading: TContentPluginUnloading; ContentGetSupportedFieldFlags: TContentGetSupportedFieldFlags; ContentSetValue: TContentSetValue; ContentEditValue: TContentEditValue; ContentSendStateInformation: TContentSendStateInformation; //c) Unicode ContentGetValueW: TContentGetValueW; ContentStopGetValueW: TContentStopGetValueW; ContentSetValueW: TContentSetValueW; ContentSendStateInformationW: TContentSendStateInformationW; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; override; //--------------------- function FieldList: TStringList; override; function GetFieldIndex(FieldName: String): Integer; override; function FileParamVSDetectStr(const aFile: TFile): Boolean; override; //------------------------------------------------------ procedure CallContentGetSupportedField; override; procedure CallContentSetDefaultParams; override; procedure CallContentStopGetValue(FileName: String); override; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; override; function CallContentGetDetectString: String; override; function CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; overload; override; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; override; function CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; overload; override; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; override; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; override; {ContentSetValue ContentEditValue ContentSendStateInformation} //------------------------------------------------------ property ModuleHandle: TLibHandle read FModuleHandle write FModuleHandle; property Force: Boolean read FForce write FForce; property Name: String read GetAName write SetAName; property FileName: String read GetAFileName write SetAFileName; property DetectStr: String read GetADetectStr write SetADetectStr; //--------------------- end; { TLuaWdx } TLuaWdx = class(TWdxModule) private L: Plua_State; FFieldsList: TStringList; FForce: Boolean; FParser: TParserControl; FName: String; FFileName: String; FDetectStr: String; function GetAName: String; override; function GetAFileName: String; override; function GetADetectStr: String; override; procedure SetAName(AValue: String); override; procedure SetAFileName(AValue: String); override; procedure SetADetectStr(const AValue: String); override; function DoScript(AName: String): Integer; function WdxLuaContentGetSupportedField(Index: Integer; var xFieldName, xUnits: String): Integer; procedure WdxLuaContentPluginUnloading; public constructor Create; destructor Destroy; override; //--------------------- function LoadModule: Boolean; override; procedure UnloadModule; override; function IsLoaded: Boolean; override; //--------------------- function FieldList: TStringList; override; function GetFieldIndex(FieldName: String): Integer; override; function FileParamVSDetectStr(const aFile: TFile): Boolean; override; //------------------------------------------------------ procedure CallContentGetSupportedField; override; procedure CallContentSetDefaultParams; override; procedure CallContentStopGetValue(FileName: String); override; //--------------------- function CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; override; function CallContentGetDetectString: String; override; function CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; overload; override; function CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; overload; override; function CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; overload; override; function CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; overload; override; function CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; override; //--------------------- property Force: Boolean read FForce write FForce; property Name: String read GetAName write SetAName; property FileName: String read GetAFileName write SetAFileName; property DetectStr: String read GetADetectStr write SetADetectStr; end; { TWDXModuleList } TWDXModuleList = class private Flist: TStringList; function GetCount: Integer; public //--------------------- constructor Create; destructor Destroy; override; //--------------------- procedure Assign(Source: TWDXModuleList); function IndexOfName(const AName: String): Integer; //--------------------- procedure Clear; procedure Exchange(Index1, Index2: Integer); procedure Load(Ini: TIniFileEx); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(Ini: TIniFileEx); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure DeleteItem(Index: Integer); //--------------------- function Add(Item: TWDXModule): Integer; overload; function Add(FileName: String): Integer; overload; function Add(AName, FileName, DetectStr: String): Integer; overload; function IsLoaded(AName: String): Boolean; overload; function IsLoaded(Index: Integer): Boolean; overload; function LoadModule(AName: String): Boolean; overload; function LoadModule(Index: Integer): Boolean; overload; function GetWdxModule(Index: Integer): TWDXModule; overload; function GetWdxModule(AName: String): TWDXModule; overload; //--------------------- //property WdxList:TStringList read Flist; property Count: Integer read GetCount; end; function StrToVar(const Value: String; FieldType: Integer): Variant; implementation uses StrUtils, LazUTF8, uGlobs, uGlobsPaths, FileUtil, uDebug, uDCUtils, uOSUtils, DCBasicTypes, DCOSUtils, DCDateTimeUtils, DCConvertEncoding; const WdxIniFileName = 'wdx.ini'; function StrToVar(const Value: String; FieldType: Integer): Variant; begin case FieldType of ft_fieldempty: Result := Null; ft_numeric_32: Result := StrToInt(Value); ft_numeric_64: Result := StrToInt64(Value); ft_numeric_floating: Result := StrToFloat(Value); ft_date: Result := StrToDate(Value); ft_time: Result := StrToTime(Value); ft_datetime: Result := StrToDateTime(Value); ft_boolean: Result := StrToBool(Value); ft_multiplechoice, ft_string, ft_fulltext, ft_stringw: Result := Value; else Result := Null; end; end; { TWDXModuleList } function TWDXModuleList.GetCount: Integer; begin if Assigned(Flist) then Result := Flist.Count else Result := 0; end; constructor TWDXModuleList.Create; begin Flist := TStringList.Create; end; destructor TWDXModuleList.Destroy; begin Clear; FreeAndNil(Flist); inherited Destroy; end; procedure TWDXModuleList.Assign(Source: TWDXModuleList); var I: Integer; begin if Assigned(Source) then begin Clear; for I := 0 to Source.Flist.Count - 1 do begin with TWdxModule(Source.Flist.Objects[I]) do Add(Name, FileName, DetectStr); end; end; end; function TWDXModuleList.IndexOfName(const AName: String): Integer; begin Result := Flist.IndexOf(UpCase(AName)); end; procedure TWDXModuleList.Clear; var i: Integer; begin for i := 0 to Flist.Count - 1 do TWDXModule(Flist.Objects[i]).Free; Flist.Clear; end; procedure TWDXModuleList.Exchange(Index1, Index2: Integer); begin FList.Exchange(Index1, Index2); end; procedure TWDXModuleList.Load(Ini: TIniFileEx); var Count, I: Integer; tmp, tp: String; begin Self.Clear; Count := Ini.ReadInteger('Content Plugins', 'PluginCount', 0); if Count = 0 then Exit; For i := 0 to Count - 1 do begin tmp := Ini.ReadString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', ''); // читать FileName - читать расширение и создавать нужный обьект tp := GetCmdDirFromEnvVar(Ini.ReadString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', '')); DCDebug('WDX:LOAD:' + tp); if UpCase(ExtractFileExt(tp)) = '.LUA' then Flist.AddObject(UpCase(tmp), TLuaWdx.Create) else Flist.AddObject(UpCase(tmp), TPluginWDX.Create); TWDXModule(Flist.Objects[I]).Name := tmp; TWDXModule(Flist.Objects[I]).DetectStr := Ini.ReadString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Detect', ''); TWDXModule(Flist.Objects[I]).FileName := tp;//GetCmdDirFromEnvVar(Ini.ReadString('Content Plugins','Plugin'+IntToStr(I+1)+'Path','')); end; end; procedure TWDXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName, APath: String; AWdxModule: TWDXModule; begin Self.Clear; ANode := ANode.FindNode('WdxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WdxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin // Create a correct object based on plugin file extension. APath := GetCmdDirFromEnvVar(APath); DCDebug('WDX: LOAD: ' + APath); if UpCase(ExtractFileExt(APath)) = '.LUA' then AWdxModule := TLuaWdx.Create else AWdxModule := TPluginWDX.Create; AWdxModule.Name := AName; AWdxModule.FileName := APath; AWdxModule.DetectStr := AConfig.GetValue(ANode, 'DetectString', ''); Flist.AddObject(UpCase(AName), AWdxModule); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWDXModuleList.Save(Ini: TIniFileEx); var i: Integer; begin Ini.EraseSection('Content Plugins'); Ini.WriteInteger('Content Plugins', 'PluginCount', Flist.Count); For i := 0 to Flist.Count - 1 do begin Ini.WriteString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Name', TWDXModule(Flist.Objects[I]).Name); Ini.WriteString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Detect', TWDXModule(Flist.Objects[I]).DetectStr); Ini.WriteString('Content Plugins', 'Plugin' + IntToStr(I + 1) + 'Path', SetCmdDirAsEnvVar(TWDXModule(Flist.Objects[I]).FileName)); end; end; procedure TWDXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var i: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WdxPlugins', True); AConfig.ClearNode(ANode); For i := 0 to Flist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WdxPlugin'); AConfig.AddValue(SubNode, 'Name', TWDXModule(Flist.Objects[I]).Name); AConfig.AddValue(SubNode, 'Path', SetCmdDirAsEnvVar(TWDXModule(Flist.Objects[I]).FileName)); AConfig.AddValue(SubNode, 'DetectString', TWDXModule(Flist.Objects[I]).DetectStr); end; end; procedure TWDXModuleList.DeleteItem(Index: Integer); begin if (Index > -1) and (Index < Flist.Count) then begin TWDXModule(Flist.Objects[Index]).Free; Flist.Delete(Index); end; end; function TWDXModuleList.Add(Item: TWDXModule): Integer; begin Result := Flist.AddObject(UpCase(item.Name), Item); end; function TWDXModuleList.Add(FileName: String): Integer; var s: String; begin s := ExtractFileName(FileName); if pos('.', s) > 0 then Delete(s, pos('.', s), length(s)); if UpCase(ExtractFileExt(FileName)) = '.LUA' then Result := Flist.AddObject(UpCase(s), TLuaWdx.Create) else Result := Flist.AddObject(UpCase(s), TPluginWDX.Create); TWDXModule(Flist.Objects[Result]).Name := s; TWDXModule(Flist.Objects[Result]).FileName := FileName; if TWDXModule(Flist.Objects[Result]).LoadModule then begin TWDXModule(Flist.Objects[Result]).DetectStr := TWDXModule(Flist.Objects[Result]).CallContentGetDetectString; TWDXModule(Flist.Objects[Result]).UnloadModule; end; end; function TWDXModuleList.Add(AName, FileName, DetectStr: String): Integer; begin if UpCase(ExtractFileExt(FileName)) = '.LUA' then Result := Flist.AddObject(UpCase(AName), TLuaWdx.Create) else Result := Flist.AddObject(UpCase(AName), TPluginWDX.Create); TWDXModule(Flist.Objects[Result]).Name := AName; TWDXModule(Flist.Objects[Result]).DetectStr := DetectStr; TWDXModule(Flist.Objects[Result]).FileName := FileName; end; function TWDXModuleList.IsLoaded(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(AName); if x = -1 then Result := False else begin Result := GetWdxModule(x).IsLoaded; end; end; function TWDXModuleList.IsLoaded(Index: Integer): Boolean; begin Result := GetWdxModule(Index).IsLoaded; end; function TWDXModuleList.LoadModule(AName: String): Boolean; var x: Integer; begin x := Flist.IndexOf(UpCase(AName)); if x = -1 then Result := False else begin Result := GetWdxModule(x).LoadModule; end; end; function TWDXModuleList.LoadModule(Index: Integer): Boolean; begin Result := GetWdxModule(Index).LoadModule; end; function TWDXModuleList.GetWdxModule(Index: Integer): TWDXModule; begin if (Flist.Objects[Index] is TPluginWDX) then Result := TPluginWDX(Flist.Objects[Index]) else if (Flist.Objects[Index] is TLuaWdx) then Result := TLuaWdx(Flist.Objects[Index]); end; function TWDXModuleList.GetWdxModule(AName: String): TWDXModule; var tmp: Integer; begin tmp := Flist.IndexOf(upcase(AName)); if tmp < 0 then Exit(nil); if (Flist.Objects[tmp] is TPluginWDX) then Result := TPluginWDX(Flist.Objects[tmp]) else if (Flist.Objects[tmp] is TLuaWdx) then Result := TLuaWdx(Flist.Objects[tmp]); end; { TPluginWDX } function TPluginWDX.IsLoaded: Boolean; begin Result := FModuleHandle <> 0; end; function TPluginWDX.FieldList: TStringList; begin Result := FFieldsList; end; function TPluginWDX.GetADetectStr: String; begin Result := FDetectStr; end; function TPluginWDX.GetAName: String; begin Result := FName; end; function TPluginWDX.GetAFileName: String; begin Result := FFileName; end; procedure TPluginWDX.SetADetectStr(const AValue: String); begin FDetectStr := AValue; end; procedure TPluginWDX.SetAName(AValue: String); begin FName := AValue; end; procedure TPluginWDX.SetAFileName(AValue: String); begin FFileName := AValue; end; constructor TPluginWDX.Create; begin FFieldsList := TStringList.Create; FParser := TParserControl.Create; end; destructor TPluginWDX.Destroy; var i: Integer; begin if assigned(FParser) then FParser.Free; if assigned(FFieldsList) then begin for i := 0 to FFieldsList.Count - 1 do TWdxField(FFieldsList.Objects[i]).Free; FFieldsList.Free; end; Self.UnloadModule; inherited Destroy; end; function TPluginWDX.LoadModule: Boolean; begin FModuleHandle := mbLoadLibrary(Self.FileName); Result := (FModuleHandle <> 0); if FModuleHandle = 0 then exit; { Mandatory } ContentGetSupportedField := TContentGetSupportedField(GetProcAddress(FModuleHandle, 'ContentGetSupportedField')); ContentGetValue := TContentGetValue(GetProcAddress(FModuleHandle, 'ContentGetValue')); { Optional (must NOT be implemented if unsupported!) } ContentGetDetectString := TContentGetDetectString(GetProcAddress(FModuleHandle, 'ContentGetDetectString')); ContentSetDefaultParams := TContentSetDefaultParams(GetProcAddress(FModuleHandle, 'ContentSetDefaultParams')); ContentStopGetValue := TContentStopGetValue(GetProcAddress(FModuleHandle, 'ContentStopGetValue')); ContentGetDefaultSortOrder := TContentGetDefaultSortOrder(GetProcAddress(FModuleHandle, 'ContentGetDefaultSortOrder')); ContentPluginUnloading := TContentPluginUnloading(GetProcAddress(FModuleHandle, 'ContentPluginUnloading')); ContentGetSupportedFieldFlags := TContentGetSupportedFieldFlags(GetProcAddress(FModuleHandle, 'ContentGetSupportedFieldFlags')); ContentSetValue := TContentSetValue(GetProcAddress(FModuleHandle, 'ContentSetValue')); ContentEditValue := TContentEditValue(GetProcAddress(FModuleHandle, 'ContentEditValue')); ContentSendStateInformation := TContentSendStateInformation(GetProcAddress(FModuleHandle, 'ContentSendStateInformation')); { Unicode } ContentGetValueW := TContentGetValueW(GetProcAddress(FModuleHandle, 'ContentGetValueW')); ContentStopGetValueW := TContentStopGetValueW(GetProcAddress(FModuleHandle, 'ContentStopGetValueW')); ContentSetValueW := TContentSetValueW(GetProcAddress(FModuleHandle, 'ContentSetValueW')); ContentSendStateInformationW := TContentSendStateInformationW(GetProcAddress(FModuleHandle, 'ContentSendStateInformationW')); CallContentSetDefaultParams; CallContentGetSupportedField; if Length(Self.DetectStr) = 0 then Self.DetectStr := CallContentGetDetectString; end; procedure TPluginWDX.CallContentSetDefaultParams; var dps: tContentDefaultParamStruct; begin if assigned(ContentSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WdxIniFileName); dps.PluginInterfaceVersionHi := 1; dps.PluginInterfaceVersionLow := 50; dps.size := SizeOf(tContentDefaultParamStruct); ContentSetDefaultParams(@dps); end; end; procedure TPluginWDX.CallContentStopGetValue(FileName: String); begin if Assigned(ContentStopGetValueW) then ContentStopGetValueW(PWideChar(UTF8Decode(FileName))) else if Assigned(ContentStopGetValue) then ContentStopGetValue(PAnsiChar(CeUtf8ToSys(FileName))); end; function TPluginWDX.CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; var x: Integer; begin if Assigned(ContentGetDefaultSortOrder) then begin x := ContentGetDefaultSortOrder(FieldIndex); case x of 1: Result := False; //a..z 1..9 -1: Result := True; //z..a 9..1 end; end; end; procedure TPluginWDX.UnloadModule; begin if assigned(ContentPluginUnloading) then ContentPluginUnloading; {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; { Mandatory } ContentGetSupportedField := nil; ContentGetValue := nil; { Optional (must NOT be implemented if unsupported!) } ContentGetDetectString := nil; ContentSetDefaultParams := nil; ContentStopGetValue := nil; ContentGetDefaultSortOrder := nil; ContentPluginUnloading := nil; ContentGetSupportedFieldFlags := nil; ContentSetValue := nil; ContentEditValue := nil; ContentSendStateInformation := nil; { Unicode } ContentGetValueW := nil; ContentStopGetValueW := nil; ContentSetValueW := nil; ContentSendStateInformationW := nil; end; procedure TPluginWDX.CallContentGetSupportedField; var Index, MaxLen, I, Rez: Integer; xFieldName: PAnsiChar; xUnits: PAnsiChar; sFieldName: String; begin if not Assigned(ContentGetSupportedField) then Exit; Index := 0; GetMem(xFieldName, MAX_PATH); GetMem(xUnits, MAX_PATH); maxlen := MAX_PATH; repeat Rez := ContentGetSupportedField(Index, xFieldName, xUnits, MaxLen); if Rez <> ft_nomorefields then begin sFieldName := CeSysToUtf8(StrPas(xFieldName)); I := FFieldsList.AddObject(sFieldName, TWdxField.Create); with TWdxField(FFieldsList.Objects[I]) do begin FName := sFieldName; FUnits := xUnits; FType := Rez; end; end; Inc(Index); until Rez = ft_nomorefields; FreeMem(xFieldName); FreeMem(xUnits); end; function TPluginWDX.CallContentGetDetectString: String; var pacDetectString: PAnsiChar; begin if Assigned(ContentGetDetectString) then begin GetMem(pacDetectString, MAX_PATH); FillChar(pacDetectString^, MAX_PATH, #0); ContentGetDetectString(pacDetectString, MAX_PATH); Result := StrPas(pacDetectString); FreeMem(pacDetectString); end else Result := ''; end; function TPluginWDX.CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; var FieldIndex, UnitIndex: Integer; begin FieldIndex := GetFieldIndex(FieldName); if FieldIndex <> -1 then begin UnitIndex := TWdxField(FieldList.Objects[FieldIndex]).GetUnitIndex(UnitName); Result := CallContentGetValuev(FileName, FieldIndex, UnitIndex, flags); end else Result := Null; end; function TPluginWDX.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; var Rez: Integer; Buf: array[0..2 * 1024] of Byte; fnval: Integer absolute buf; fnval64: Int64 absolute buf; ffval: Double absolute buf; fdate: TDateFormat absolute buf; ftime: TTimeFormat absolute buf; wtime: TWinFileTime absolute buf; begin if Assigned(ContentGetValueW) then Rez := ContentGetValueW(PWideChar(UTF8Decode(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags) else if Assigned(ContentGetValue) then Rez := ContentGetValue(PAnsiChar(CeUtf8ToSys(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags); case Rez of ft_fieldempty: Result := Null; ft_numeric_32: Result := fnval; ft_numeric_64: Result := fnval64; ft_numeric_floating: Result := ffval; ft_date: Result := EncodeDate(fdate.wYear, fdate.wMonth, fdate.wDay); ft_time: Result := EncodeTime(ftime.wHour, ftime.wMinute, ftime.wSecond, 0); ft_datetime: Result := WinFileTimeToDateTime(wtime); ft_boolean: Result := Boolean(fnval); ft_multiplechoice, ft_string, ft_fulltext: Result := CeSysToUtf8(AnsiString(PAnsiChar(@Buf[0]))); ft_stringw: Result := UTF16ToUTF8(UnicodeString(PWideChar(@Buf[0]))); else Result := Null; end; end; function TPluginWDX.CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; var FieldIndex, UnitIndex: Integer; begin FieldIndex := GetFieldIndex(FieldName); if FieldIndex <> -1 then begin UnitIndex := TWdxField(FieldList.Objects[FieldIndex]).GetUnitIndex(UnitName); Result := CallContentGetValue(FileName, FieldIndex, UnitIndex, flags); end else Result := EmptyStr; end; function TPluginWDX.CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; var Rez: Integer; Buf: array[0..2 * 1024] of Byte; fnval: Integer absolute buf; fnval64: Int64 absolute buf; ffval: Double absolute buf; fdate: TDateFormat absolute buf; ftime: TTimeFormat absolute buf; wtime: TWinFileTime absolute buf; begin if Assigned(ContentGetValueW) then Rez := ContentGetValueW(PWideChar(UTF8Decode(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags) else if Assigned(ContentGetValue) then Rez := ContentGetValue(PAnsiChar(CeUtf8ToSys(FileName)), FieldIndex, UnitIndex, @Buf, SizeOf(buf), flags); case Rez of ft_fieldempty: Result := ''; ft_numeric_32: Result := IntToStr(fnval); ft_numeric_64: Result := IntToStr(fnval64); ft_numeric_floating: Result := FloatToStr(ffval); ft_date: Result := Format('%2.2d.%2.2d.%4.4d', [fdate.wDay, fdate.wMonth, fdate.wYear]); ft_time: Result := Format('%2.2d:%2.2d:%2.2d', [ftime.wHour, ftime.wMinute, ftime.wSecond]); ft_datetime: Result := DateTimeToStr(WinFileTimeToDateTime(wtime)); ft_boolean: if fnval = 0 then Result := 'FALSE' else Result := 'TRUE'; ft_multiplechoice, ft_string, ft_fulltext: Result := CeSysToUtf8(AnsiString(PAnsiChar(@Buf[0]))); ft_stringw: Result := UTF16ToUTF8(UnicodeString(PWideChar(@Buf[0]))); //TODO: FT_DELAYED,ft_ondemand else Result := ''; end; end; function TPluginWDX.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin if assigned(ContentGetSupportedFieldFlags) then Result := ContentGetSupportedFieldFlags(FieldIndex); end; function TPluginWDX.GetFieldIndex(FieldName: String): Integer; begin Result := FFieldsList.IndexOf(FieldName); end; function TPluginWDX.FileParamVSDetectStr(const aFile: TFile): Boolean; begin FParser.DetectStr := Self.DetectStr; Result := FParser.TestFileResult(aFile); end; { TLuaWdx } function TLuaWdx.GetAName: String; begin Result := FName; end; function TLuaWdx.GetAFileName: String; begin Result := FFileName; end; function TLuaWdx.GetADetectStr: String; begin Result := FDetectStr; end; procedure TLuaWdx.SetAName(AValue: String); begin FName := AValue; end; procedure TLuaWdx.SetAFileName(AValue: String); begin FFileName := AValue; end; procedure TLuaWdx.SetADetectStr(const AValue: String); begin FDetectStr := AValue; end; function TLuaWdx.DoScript(AName: String): Integer; begin Result := LUA_ERRRUN; if not assigned(L) then exit; Result := luaL_dofile(L, PChar(AName)); end; constructor TLuaWdx.Create; begin if not IsLuaLibLoaded then LoadLuaLib(gLuaLib); //Todo вынести загрузку либы в VmClass FFieldsList := TStringList.Create; FParser := TParserControl.Create; end; destructor TLuaWdx.Destroy; begin if Assigned(FParser) then FParser.Free; if Assigned(FFieldsList) then begin while FFieldsList.Count > 0 do begin TWdxField(FFieldsList.Objects[0]).Free; FFieldsList.Delete(0); end; FreeAndNil(FFieldsList); end; Self.UnloadModule; //UnloadLuaLib; //Todo вынести выгрузку либы в VmClass inherited Destroy; end; function TLuaWdx.LoadModule: Boolean; begin Result := False; if not IsLuaLibLoaded then exit; L := lua_open; if not Assigned(L) then exit; luaL_openlibs(L); if DoScript(Self.FFileName) = 0 then Result := True else Result := False; CallContentSetDefaultParams; CallContentGetSupportedField; if Length(Self.DetectStr) = 0 then Self.DetectStr := CallContentGetDetectString; end; procedure TLuaWdx.UnloadModule; begin WdxLuaContentPluginUnloading; if Assigned(L) then begin lua_close(L); L := nil; end; end; function TLuaWdx.IsLoaded: Boolean; begin Result := IsLuaLibLoaded and Assigned(Self.L); end; function TLuaWdx.FieldList: TStringList; begin Result := FFieldsList; end; function TLuaWdx.GetFieldIndex(FieldName: String): Integer; begin Result := FFieldsList.IndexOf(FieldName); end; function TLuaWdx.FileParamVSDetectStr(const aFile: TFile): Boolean; begin FParser.DetectStr := Self.DetectStr; Result := FParser.TestFileResult(aFile); end; function TLuaWdx.WdxLuaContentGetSupportedField(Index: Integer; var xFieldName, xUnits: String): Integer; begin Result := ft_nomorefields; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetSupportedField'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, Index); lua_call(L, 1, 3); xFieldName := lua_tostring(L, -3); xUnits := lua_tostring(L, -2); Result := lua_tointeger(L, -1); lua_pop(L, 3); end; procedure TLuaWdx.WdxLuaContentPluginUnloading; begin if not assigned(L) then exit; lua_getglobal(L, 'ContentPluginUnloading'); if not lua_isfunction(L, -1) then exit; lua_call(L, 0, 0); end; procedure TLuaWdx.CallContentGetSupportedField; var Index, Rez, tmp: Integer; xFieldName, xUnits: String; begin Index := 0; repeat Rez := WdxLuaContentGetSupportedField(Index, xFieldName, xUnits); DCDebug('WDX:CallGetSupFields:' + IntToStr(Rez)); if Rez <> ft_nomorefields then begin tmp := FFieldsList.AddObject(xFieldName, TWdxField.Create); TWdxField(FFieldsList.Objects[tmp]).FName := xFieldName; TWdxField(FFieldsList.Objects[tmp]).FUnits := xUnits; TWdxField(FFieldsList.Objects[tmp]).FType := Rez; end; Inc(Index); until Rez = ft_nomorefields; end; procedure TLuaWdx.CallContentSetDefaultParams; begin if not assigned(L) then exit; lua_getglobal(L, 'ContentSetDefaultParams'); if not lua_isfunction(L, -1) then exit; lua_pushstring(L, PChar(gpCfgDir + WdxIniFileName)); lua_pushinteger(L, 1); lua_pushinteger(L, 50); lua_call(L, 3, 0); end; procedure TLuaWdx.CallContentStopGetValue(FileName: String); begin if not assigned(L) then exit; lua_getglobal(L, 'ContentStopGetValue'); if not lua_isfunction(L, -1) then exit; lua_pushstring(L, PChar(FileName)); lua_call(L, 1, 0); end; function TLuaWdx.CallContentGetDefaultSortOrder(FieldIndex: Integer): Boolean; var x: Integer; begin Result := False; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetDefaultSortOrder'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, FieldIndex); lua_call(L, 1, 1); x := lua_tointeger(L, -1); case x of 1: Result := False; //a..z 1..9 -1: Result := True; //z..a 9..1 end; lua_pop(L, 1); end; function TLuaWdx.CallContentGetDetectString: String; begin Result := ''; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetDetectString'); if not lua_isfunction(L, -1) then exit; lua_call(L, 0, 1); Result := lua_tostring(L, -1); lua_pop(L, 1); end; function TLuaWdx.CallContentGetValueV(FileName: String; FieldName: String; UnitName: String; flags: Integer): Variant; begin Result := Unassigned; end; function TLuaWdx.CallContentGetValueV(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): Variant; begin Result := Unassigned; end; function TLuaWdx.CallContentGetValue(FileName: String; FieldName: String; UnitName: String; flags: Integer): String; var FieldIndex, UnitIndex: Integer; begin FieldIndex := GetFieldIndex(FieldName); if FieldIndex <> -1 then begin UnitIndex := TWdxField(FieldList.Objects[FieldIndex]).GetUnitIndex(UnitName); Result := CallContentGetValue(FileName, FieldIndex, UnitIndex, flags); end else Result := EmptyStr; end; function TLuaWdx.CallContentGetValue(FileName: String; FieldIndex, UnitIndex: Integer; flags: Integer): String; begin Result := ''; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetValue'); if not lua_isfunction(L, -1) then exit; lua_pushstring(L, PChar(FileName)); lua_pushinteger(L, FieldIndex); lua_pushinteger(L, UnitIndex); lua_pushinteger(L, flags); lua_call(L, 4, 1); Result := lua_tostring(L, -1); lua_pop(L, 1); end; function TLuaWdx.CallContentGetSupportedFieldFlags(FieldIndex: Integer): Integer; begin Result := 0; if not assigned(L) then exit; lua_getglobal(L, 'ContentGetSupportedFieldFlags'); if not lua_isfunction(L, -1) then exit; lua_pushinteger(L, FieldIndex); lua_call(L, 1, 1); Result := lua_tointeger(L, -1); lua_pop(L, 1); end; { TWDXModule } function TWDXModule.WdxFieldType(n: Integer): String; begin case n of FT_NUMERIC_32: Result := 'FT_NUMERIC_32'; FT_NUMERIC_64: Result := 'FT_NUMERIC_64'; FT_NUMERIC_FLOATING: Result := 'FT_NUMERIC_FLOATING'; FT_DATE: Result := 'FT_DATE'; FT_TIME: Result := 'FT_TIME'; FT_DATETIME: Result := 'FT_DATETIME'; FT_BOOLEAN: Result := 'FT_BOOLEAN'; FT_MULTIPLECHOICE: Result := 'FT_MULTIPLECHOICE'; FT_STRING: Result := 'FT_STRING'; FT_FULLTEXT: Result := 'FT_FULLTEXT'; FT_NOSUCHFIELD: Result := 'FT_NOSUCHFIELD'; FT_FILEERROR: Result := 'FT_FILEERROR'; FT_FIELDEMPTY: Result := 'FT_FIELDEMPTY'; FT_DELAYED: Result := 'FT_DELAYED'; else Result := '?'; end; end; { TWdxField } function TWdxField.GetUnitIndex(UnitName: String): Integer; var sUnits: String; begin Result := -1; sUnits := FUnits; while sUnits <> EmptyStr do begin Inc(Result); if SameText(UnitName, Copy2SymbDel(sUnits, '|')) then Exit; end; Result := 0; end; end. ��������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�015652� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationoptionsui.pas�����������������������������������0000644�0001750�0000144�00000001673�11747240010�024557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperationOptionsUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms; type TFileSourceOperationOptionsUIClass = class of TFileSourceOperationOptionsUI; { TFileSourceOperationOptionsUI } TFileSourceOperationOptionsUI = class(TFrame) public constructor Create(AOwner: TComponent; AFileSource: IInterface); virtual; reintroduce; class function GetOptionsClass: TFileSourceOperationOptionsUIClass; procedure SaveOptions; virtual; abstract; {en Set operation options from GUI controls. } procedure SetOperationOptions(Operation: TObject); virtual; abstract; end; implementation { TFileSourceOperationOptionsUI } constructor TFileSourceOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner); end; class function TFileSourceOperationOptionsUI.GetOptionsClass: TFileSourceOperationOptionsUIClass; begin Result := Self; end; end. ���������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717733�016427� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiofilesourceutil.pas������������������������������������������0000644�0001750�0000144�00000065457�12612505011�023046� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, uFile, uFileSource, uFileSourceOperation, uFileSourceCopyOperation, uFileSystemUtil, uFileSourceOperationOptions, uFileSourceTreeBuilder, uGioFileSource, uGLib2, uGio2, uLog, uGlobs; const CONST_DEFAULT_QUERY_INFO_ATTRIBUTES = FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_NAME + ',' + FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME + ',' + FILE_ATTRIBUTE_STANDARD_SIZE + ',' + FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET + ',' + FILE_ATTRIBUTE_TIME_MODIFIED + ',' + FILE_ATTRIBUTE_TIME_ACCESS + ',' + FILE_ATTRIBUTE_TIME_CREATED + ',' + FILE_ATTRIBUTE_UNIX_MODE + ',' + FILE_ATTRIBUTE_UNIX_UID + ',' + FILE_ATTRIBUTE_UNIX_GID; type TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; TCopyMoveFileFunction = function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; { TGioTreeBuilder } TGioTreeBuilder = class(TFileSourceTreeBuilder) protected procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); override; procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); override; end; { TGioOperationHelper } TGioOperationHelper = class private FGioFileSource: IGioFileSource; FOperation: TFileSourceOperation; FCopyMoveFile: TCopyMoveFileFunction; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FLogCaption: String; FRenamingFiles, FRenamingRootDir: Boolean; FCancel: PGCancellable; FRootDir: TFile; FSkipAnyError: Boolean; FStatistics: TFileSourceCopyOperationStatistics; FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; procedure ShowError(const Message: String; AError: PGError); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; function ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String; Flags: TGFileCopyFlags): Boolean; function TargetExists(aNode: TFileTreeNode; var aTargetFile: PGFile; var AbsoluteTargetFileName: String) : TFileSystemOperationTargetExistsResult; function DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean): TFileSourceOperationOptionDirectoryExists; function FileExists(aFile: TFile; aTargetInfo: PGFileInfo; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure CountStatistics(aNode: TFileTreeNode); public constructor Create(FileSource: IFileSource; Operation: TFileSourceOperation; Statistics: TFileSourceCopyOperationStatistics; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; CopyMoveFileFunction: TCopyMoveFileFunction; TargetPath: String ); destructor Destroy; override; procedure Initialize; procedure ProcessTree(aFileTree: TFileTree); property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; property RenameMask: String read FRenameMask write FRenameMask; end; procedure ShowError(AError: PGError); procedure FreeAndNil(var AError: PGError); overload; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); implementation uses Forms, StrUtils, DCDateTimeUtils, uFileProperty, uFileSourceOperationUI, uShowMsg, uLng, uGObject2, DCFileAttributes; procedure ShowError(AError: PGError); begin msgError(nil, AError^.message); g_error_free(AError); end; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); var I: Integer; aFile: TFile; procedure FillAndCountRec(const srcPath: String); var AFolder: PGFile; AError: PGError; AInfo: PGFileInfo; AFileName: Pgchar; AFileEnum: PGFileEnumerator; begin AFolder:= g_file_new_for_commandline_arg (Pgchar(srcPath)); AFileEnum:= g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); while Assigned(AInfo) do begin AFileName:= g_file_info_get_name(AInfo); if (aFileName <> '.') and (aFileName <> '..') then begin aFile:= TGioFileSource.CreateFile(srcPath, AFolder, AInfo); NewFiles.Add(aFile); if aFile.IsLink then begin end else if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + aFileName + PathDelim); end else begin Inc(FilesSize, aFile.Size); Inc(FilesCount); end; end; AInfo:= g_file_enumerator_next_file (AFileEnum, nil, @AError); end; if Assigned(AError) then ShowError(AError); end; begin FilesCount:= 0; FilesSize:= 0; NewFiles := TFiles.Create(Files.Path); for I := 0 to Files.Count - 1 do begin aFile := Files[I]; NewFiles.Add(aFile.Clone); if aFile.IsDirectory and (not aFile.IsLinkToDirectory) then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.FullPath + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); // in first level we know file size -> use it end; end; end; function FileExistsMessage(SourceFile: TFile; TargetInfo: PGFileInfo; const TargetName: String): String; begin Result:= rsMsgFileExistsOverwrite + LineEnding + TargetName + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(g_file_info_get_size(TargetInfo))), DateTimeToStr(UnixFileTimeToDateTime(g_file_info_get_attribute_uint64(TargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)))]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + SourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(SourceFile.Size)), DateTimeToStr(SourceFile.ModificationTime)]); end; procedure FreeAndNil(var AError: PGError); begin g_error_free(AError); AError:= nil; end; procedure ProgressCallback(current_num_bytes: gint64; total_num_bytes: gint64; user_data: gpointer); cdecl; var Helper: TGioOperationHelper absolute user_data; begin with Helper do begin if FOperation.State = fsosStopping then // Cancel operation begin g_cancellable_cancel(FCancel); Exit; end; FStatistics.CurrentFileDoneBytes:= current_num_bytes; FStatistics.CurrentFileTotalBytes:= total_num_bytes; UpdateStatistics(FStatistics); CheckOperationState; end; end; { TGioTreeBuilder } procedure TGioTreeBuilder.AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); begin // Add as normal file/directory aFile.Attributes:= aFile.Attributes and (not S_IFLNK); if aFile.IsLinkToDirectory then begin aFile.Attributes:= aFile.Attributes or S_IFDIR; AddDirectory(aFile, CurrentNode); end else begin AddFile(aFile, CurrentNode); end; end; procedure TGioTreeBuilder.AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); var AFile: TFile; AFolder: PGFile; AInfo: PGFileInfo; AError: PGError = nil; AFileEnum: PGFileEnumerator; begin AFolder:= g_file_new_for_commandline_arg(Pgchar(srcPath)); try AFileEnum := g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); // List files try AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); while Assigned(AInfo) do begin CheckOperationState; AFile:= TGioFileSource.CreateFile(srcPath, AFolder, AInfo); g_object_unref(AInfo); AddItem(aFile, CurrentNode); AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); end; if Assigned(AError) then ShowError(AError); finally g_object_unref(AFileEnum); end; finally g_object_unref(PGObject(AFolder)); end; end; { TGioOperationHelper } procedure TGioOperationHelper.ShowError(const Message: String; AError: PGError); begin try if not gSkipFileOpError then begin if AskQuestion(Message + LineEnding + AError^.message, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin AbortOperation; end; end; if log_errors in gLogOptions then logWrite(FOperation.Thread, Message, lmtError, gSkipFileOpError); finally g_error_free(AError); end; end; procedure TGioOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperation.Thread, sMessage, logMsgType); end; end; function TGioOperationHelper.ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; var aFile: TFile; ProcessedOk: Boolean; TargetName: String; CurrentFileIndex: Integer; CurrentSubNode: TFileTreeNode; begin Result := True; for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do begin CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex]; aFile := CurrentSubNode.TheFile; if FRenamingRootDir and (aFile = FRootDir) then TargetName := CurrentTargetPath + FRenameMask else if FRenamingFiles then TargetName := CurrentTargetPath + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask) else TargetName := CurrentTargetPath + aFile.Name; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTo := TargetName; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); if aFile.IsDirectory then ProcessedOk := ProcessDirectory(CurrentSubNode, TargetName) else if aFile.IsLink then ProcessedOk := ProcessLink(CurrentSubNode, TargetName) else ProcessedOk := ProcessFile(CurrentSubNode, TargetName, G_FILE_COPY_NONE); if not ProcessedOk then Result := False; CheckOperationState; end; end; function TGioOperationHelper.ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var AError: PGError = nil; bRemoveDirectory: Boolean; NodeData: TFileTreeNodeData; SourceFile, TargetFile: PGFile; begin NodeData := aNode.Data as TFileTreeNodeData; SourceFile:= g_file_new_for_commandline_arg(Pgchar(aNode.TheFile.FullPath)); TargetFile:= g_file_new_for_commandline_arg(Pgchar(AbsoluteTargetFileName)); try // If some files will not be moved then source directory cannot be deleted. bRemoveDirectory := (FCopyMoveFile = g_file_move) and (NodeData.SubnodesHaveExclusions = False); case TargetExists(aNode, TargetFile, AbsoluteTargetFileName) of fsoterSkip: begin Result := False; CountStatistics(aNode); end; fsoterNotExists: begin // Try moving whole directory tree. It can be done only if we don't have // to process each subnode: if the files are not being renamed or excluded. if (FCopyMoveFile = g_file_move) and (not FRenamingFiles) and (NodeData.SubnodesHaveExclusions = False) and g_file_move(SourceFile, TargetFile, G_FILE_COPY_NOFOLLOW_SYMLINKS or G_FILE_COPY_NO_FALLBACK_FOR_MOVE, nil, nil, nil, nil) then begin // Success. CountStatistics(aNode); Result := True; bRemoveDirectory := False; end else begin // Create target directory. if g_file_make_directory_with_parents(TargetFile, nil, @AError) then begin // Copy/Move all files inside. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end else begin // Error - all files inside not copied/moved. ShowError(rsMsgLogError + Format(rsMsgErrForceDir, [AbsoluteTargetFileName]), AError); Result := False; CountStatistics(aNode); end; end; end; fsoterAddToTarget: begin // Don't create existing directory, but copy files into it. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end; else raise Exception.Create('Invalid TargetExists result'); end; if bRemoveDirectory and Result then begin g_file_delete(SourceFile, nil, nil); end; finally g_object_unref(PGObject(SourceFile)); g_object_unref(PGObject(TargetFile)); end; end; function TGioOperationHelper.ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; begin Result:= ProcessFile(aNode, AbsoluteTargetFileName, G_FILE_COPY_NOFOLLOW_SYMLINKS); end; function TGioOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String; Flags: TGFileCopyFlags): Boolean; var AError: PGError = nil; SourceFile, TargetFile: PGFile; begin FCancel:= g_cancellable_new(); SourceFile:= g_file_new_for_commandline_arg(Pgchar(aNode.TheFile.FullPath)); TargetFile:= g_file_new_for_commandline_arg(Pgchar(AbsoluteTargetFileName)); try repeat Result:= FCopyMoveFile(SourceFile, TargetFile, Flags, FCancel, @ProgressCallback, Self, @AError); if Assigned(AError) then try if AError^.code = G_IO_ERROR_CANCELLED then AbortOperation else if AError^.code = G_IO_ERROR_EXISTS then begin case TargetExists(aNode, TargetFile, AbsoluteTargetFileName) of fsoterDeleted: begin FreeAndNil(AError); Flags += G_FILE_COPY_OVERWRITE; end; fsoterSkip: begin Result:= True; Break; end; fsoterNotExists: FreeAndNil(AError); end; end else begin if FSkipAnyError then Break; case AskQuestion(AError^.message, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourCancel], fsourRetry, fsourCancel) of fsourSkip: Break; fsourSkipAll: begin FSkipAnyError:= True; Break; end; fsourRetry: FreeAndNil(AError); fsourCancel: AbortOperation; end; end; except on EFileSourceOperationAborting do begin FreeAndNil(AError); raise; end; end; until Result; if Result then begin LogMessage(Format(rsMsgLogSuccess + FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogError + FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]) + LineEnding + AError^.message, [log_vfs_op], lmtError); FreeAndNil(AError); end; finally g_object_unref(FCancel); g_object_unref(PGObject(SourceFile)); g_object_unref(PGObject(TargetFile)); end; end; function TGioOperationHelper.TargetExists(aNode: TFileTreeNode; var aTargetFile: PGFile; var AbsoluteTargetFileName: String ): TFileSystemOperationTargetExistsResult; var AInfo, ASymlinkInfo: PGFileInfo; AFileType: TGFileType; SourceFile: TFile; function DoDirectoryExists(AllowCopyInto: Boolean): TFileSystemOperationTargetExistsResult; begin case DirExists(SourceFile, AbsoluteTargetFileName, AllowCopyInto) of fsoodeSkip: Exit(fsoterSkip); fsoodeCopyInto: begin Exit(fsoterAddToTarget); end; else raise Exception.Create('Invalid dir exists option'); end; end; function DoFileExists(): TFileSystemOperationTargetExistsResult; begin case FileExists(SourceFile, AInfo, AbsoluteTargetFileName) of fsoofeSkip: Exit(fsoterSkip); fsoofeAutoRenameSource: begin g_object_unref(PGObject(aTargetFile)); aTargetFile:= g_file_new_for_commandline_arg(Pgchar(AbsoluteTargetFileName)); Exit(fsoterNotExists); end; fsoofeOverwrite: Exit(fsoterDeleted); else raise Exception.Create('Invalid file exists option'); end; end; begin AInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_SIZE +','+ FILE_ATTRIBUTE_TIME_MODIFIED, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil); if Assigned(AInfo) then begin SourceFile:= aNode.TheFile; AFileType:= g_file_info_get_file_type(AInfo); // Target exists - ask user what to do. if AFileType = G_FILE_TYPE_DIRECTORY then begin Result := DoDirectoryExists(SourceFile.IsDirectory) end else if AFileType = G_FILE_TYPE_SYMBOLIC_LINK then begin // Check if target of the link exists. ASymlinkInfo:= g_file_query_info(aTargetFile, FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, nil, nil); if Assigned(ASymlinkInfo) then begin AFileType:= g_file_info_get_file_type(ASymlinkInfo); if AFileType = G_FILE_TYPE_DIRECTORY then Result := DoDirectoryExists(SourceFile.IsDirectory) else begin Result := DoFileExists(); end; g_object_unref(ASymlinkInfo); end else // Target of link doesn't exist. Treat link as file. Result := DoFileExists(); end else begin // Existing target is a file. Result := DoFileExists(); end; g_object_unref(AInfo); end else Result := fsoterNotExists; end; function TGioOperationHelper.DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean ): TFileSourceOperationOptionDirectoryExists; var PossibleResponses: array of TFileSourceOperationUIResponse = nil; DefaultOkResponse: TFileSourceOperationUIResponse; procedure AddResponse(Response: TFileSourceOperationUIResponse); begin SetLength(PossibleResponses, Length(PossibleResponses) + 1); PossibleResponses[Length(PossibleResponses) - 1] := Response; end; begin case FDirExistsOption of fsoodeNone: begin if AllowCopyInto then begin AddResponse(fsourCopyInto); AddResponse(fsourCopyIntoAll); end; AddResponse(fsourSkip); AddResponse(fsourSkipAll); AddResponse(fsourCancel); if AllowCopyInto then DefaultOkResponse := fsourCopyInto else DefaultOkResponse := fsourSkip; case AskQuestion(Format(rsMsgFolderExistsRwrt, [AbsoluteTargetFileName]), '', PossibleResponses, DefaultOkResponse, fsourSkip) of fsourCopyInto: Result := fsoodeCopyInto; fsourCopyIntoAll: begin FDirExistsOption := fsoodeCopyInto; Result := fsoodeCopyInto; end; fsourSkip: Result := fsoodeSkip; fsourSkipAll: begin FDirExistsOption := fsoodeSkip; Result := fsoodeSkip; end; fsourNone, fsourCancel: AbortOperation; end; end; else Result := FDirExistsOption; end; end; function TGioOperationHelper.FileExists(aFile: TFile; aTargetInfo: PGFileInfo; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const Responses: array[0..8] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourOverwriteOlder,fsourOverwriteSmaller, fsourOverwriteLarger, fsourCancel); var Answer: Boolean; Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aFile.ModificationTime > UnixFileTimeToDateTime(g_file_info_get_attribute_uint64(aTargetInfo, FILE_ATTRIBUTE_TIME_MODIFIED)) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > g_file_info_get_size(aTargetInfo) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < g_file_info_get_size(aTargetInfo) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: repeat Answer := True; Message:= FileExistsMessage(aFile, aTargetInfo, AbsoluteTargetFileName); case AskQuestion(Message, '', Responses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(FOperation.Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: AbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else Result := FFileExistsOption; end; end; procedure TGioOperationHelper.CountStatistics(aNode: TFileTreeNode); procedure CountNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do CountNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then DoneFiles := DoneFiles + 1 else // Count target of link. CountNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aNode.TheFile.Size; end; end; end; begin CountNodeStatistics(aNode); UpdateStatistics(FStatistics); end; constructor TGioOperationHelper.Create(FileSource: IFileSource; Operation: TFileSourceOperation; Statistics: TFileSourceCopyOperationStatistics; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; CopyMoveFileFunction: TCopyMoveFileFunction; TargetPath: String); begin FGioFileSource:= FileSource as IGioFileSource; FOperation:= Operation; FStatistics:= Statistics; AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; FCopyMoveFile := CopyMoveFileFunction; FFileExistsOption := fsoofeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FRenamingFiles := False; FRenamingRootDir := False; inherited Create; end; destructor TGioOperationHelper.Destroy; begin inherited Destroy; end; procedure TGioOperationHelper.Initialize; begin if FCopyMoveFile = g_file_copy then FLogCaption := rsMsgLogCopy else begin FLogCaption := rsMsgLogMove; end; SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); end; procedure TGioOperationHelper.ProcessTree(aFileTree: TFileTree); var aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFileTree.SubNodesCount = 1) and FRenamingFiles then begin aFile := aFileTree.SubNodes[0].TheFile; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; FRootDir := aFile; end; end; ProcessNode(aFileTree, FRootTargetPath); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiofilesource.pas����������������������������������������������0000644�0001750�0000144�00000040733�12612505011�022136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, URIParser, SyncObjs, uFileSourceProperty, uFileSourceOperationTypes, uRealFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile, uGLib2, uGObject2, uGio2; type IGioFileSource = interface(IRealFileSource) ['{6DC5BCCA-BDD5-43DA-A0D6-7BAA26D93B92}'] function MountPath(AFile: PGFile; out AError: PGError): Boolean; end; { TGioFileSource } TGioFileSource = class(TRealFileSource, IGioFileSource) private MountTry: Integer; MountLoop: TSimpleEvent; MountError: PGError; protected function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public function MountPath(AFile: PGFile; out AError: PGError): Boolean; public constructor Create(const URI: TURI); override; class function IsSupportedPath(const Path: String): Boolean; override; function CreateDirectory(const Path: String): Boolean; override; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; procedure Reload(const PathsToReload: TPathsArray); override; function GetParentDir(sPath : String): String; override; function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; function GetOperationsTypes: TFileSourceOperationTypes; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; end; implementation uses DCFileAttributes, DCDateTimeUtils, uGioListOperation, uGioCopyOperation, uGioDeleteOperation, uGioExecuteOperation, uGioCreateDirectoryOperation, uGioMoveOperation, uGioSetFilePropertyOperation, uDebug, fGioAuthDlg, DCBasicTypes, DCStrUtils, uShowMsg; { TGioFileSource } function TGioFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result:= [fsoList, fsoCopy, fsoCopyIn, fsoCopyOut, fsoDelete, fsoExecute, fsoCreateDirectory, fsoMove, fsoSetFileProperty]; end; class function TGioFileSource.CreateFile(const APath: String): TFile; begin Result:=inherited CreateFile(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TGioFileSource.CreateFile(const APath: String; AFolder: PGFile; AFileInfo: PGFileInfo): TFile; var AFile: PGFile; ATarget: Pgchar; AFileType: TGFileType; ASymlinkInfo: PGFileInfo; begin Result:= CreateFile(APath); Result.Name:= g_file_info_get_name(AFileInfo); Result.Size:= g_file_info_get_size (AFileInfo); Result.Attributes:= g_file_info_get_attribute_uint32 (AFileInfo, FILE_ATTRIBUTE_UNIX_MODE); Result.ModificationTime:= UnixFileTimeToDateTime(g_file_info_get_attribute_uint64 (AFileInfo, FILE_ATTRIBUTE_TIME_MODIFIED)); Result.LinkProperty := TFileLinkProperty.Create; // Get a file's type (whether it is a regular file, symlink, etc). AFileType:= g_file_info_get_file_type (AFileInfo); if AFileType = G_FILE_TYPE_DIRECTORY then begin Result.Attributes:= Result.Attributes or S_IFDIR; end else if AFileType = G_FILE_TYPE_SYMBOLIC_LINK then begin ATarget:= g_file_info_get_symlink_target(AFileInfo); AFile:= g_file_get_child(AFolder, ATarget); ASymlinkInfo := g_file_query_info (AFile, FILE_ATTRIBUTE_STANDARD_TYPE, G_FILE_QUERY_INFO_NONE, nil, nil); Result.LinkProperty.LinkTo := ATarget; Result.LinkProperty.IsValid := Assigned(ASymlinkInfo); if (Result.LinkProperty.IsValid) then begin AFileType:= g_file_info_get_file_type(ASymlinkInfo); Result.LinkProperty.IsLinkToDirectory := (AFileType = G_FILE_TYPE_DIRECTORY); g_object_unref(ASymlinkInfo); end; g_object_unref(PGObject(AFile)); end; end; procedure TGioFileSource.Reload(const PathsToReload: TPathsArray); var Index: Integer; PathList: TPathsArray; begin SetLength(PathList, Length(PathsToReload)); for Index:= Low(PathsToReload) to High(PathsToReload) do begin PathList[Index]:= StringReplace(PathsToReload[Index], FCurrentAddress, '', []); end; inherited Reload(PathList); end; function TGioFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result:= TRue; //inherited SetCurrentWorkingDirectory(NewDir); end; procedure ask_password_cb (op: PGMountOperation; const message: Pgchar; const default_user: Pgchar; const default_domain: Pgchar; flags: TGAskPasswordFlags; user_data: gpointer); cdecl; var UserName, Password, Domain: String; password_save: TGPasswordSave; mount_handled: gboolean = FALSE; FileSource: TGioFileSource absolute user_data; begin Inc(FileSource.MountTry); //* First pass, look if we have a password to supply */ if (FileSource.MountTry = 1) then begin if ((flags and G_ASK_PASSWORD_NEED_USERNAME <> 0) and (Length(FileSource.FURI.Username) > 0)) then begin g_printf ('(WW) ask_password_cb: mount_try = %d, trying login with saved username...\n', [FileSource.MountTry]); g_mount_operation_set_username (op, Pgchar(FileSource.FURI.Username)); mount_handled := TRUE; end; if ((flags and G_ASK_PASSWORD_NEED_PASSWORD <> 0) and (Length(FileSource.FURI.Password) > 0)) then begin g_printf ('(WW) ask_password_cb: mount_try = %d, trying login with saved password...\n', [FileSource.MountTry]); g_mount_operation_set_password (op, Pgchar(FileSource.FURI.Password)); mount_handled := TRUE; end; if (mount_handled) then begin g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); Exit; end; end; //* Handle abort message from certain backends properly */ //* - e.g. SMB backends use this to mask multiple auth callbacks from smbclient */ if ((default_user <> nil) and (strcomp(default_user, 'ABORT') = 0)) then begin g_print ('(WW) default_user == "ABORT", aborting\n', []); g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); Exit; end; password_save := G_PASSWORD_SAVE_NEVER; Username:= default_user; Domain:= default_domain; if not ShowAuthDlg(message, flags, UserName, Domain, Password) then g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED) else begin if (flags and G_ASK_PASSWORD_NEED_USERNAME <> 0) then g_mount_operation_set_username (op, Pgchar(Username)); if (flags and G_ASK_PASSWORD_NEED_DOMAIN <> 0) then g_mount_operation_set_domain (op, Pgchar(Domain)); if (flags and G_ASK_PASSWORD_NEED_PASSWORD <> 0) then g_mount_operation_set_password (op, Pgchar(password)); if (flags and G_ASK_PASSWORD_ANONYMOUS_SUPPORTED <> 0) then g_mount_operation_set_anonymous (op, True); end; if (flags and G_ASK_PASSWORD_SAVING_SUPPORTED <> 0) then g_mount_operation_set_password_save (op, password_save); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); end; procedure ask_question_cb(op: PGMountOperation; const message: Pgchar; const choices: PPgchar; user_data: gpointer); cdecl; var len: Integer = 0; choice: Integer = -1; buttons: TDynamicStringArray; begin g_print('(WW) ask_question_cb: message = "%s"\n', [message]); while (choices[len] <> nil) do begin AddString(buttons, StrPas(choices[len])); g_print('(WW) ask_question_cb: choice[%d] = "%s"\n', [len, choices[len]]); Inc(len); end; DCDebug(' (II) Spawning callback_ask_question...'); // At this moment, only SFTP uses ask_question and the second button is cancellation choice:= MsgChoiceBox(nil, message, buttons); g_print(' (II) Received choice = %d\n', [choice]); if (choice < 0) then g_mount_operation_reply(op, G_MOUNT_OPERATION_ABORTED) else begin g_mount_operation_set_choice(op, choice); g_mount_operation_reply(op, G_MOUNT_OPERATION_HANDLED); end; end; procedure mount_done_cb (object_: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; var Result: gboolean; FileSource: TGioFileSource absolute user_data; begin Result := g_file_mount_enclosing_volume_finish (PGFile(object_), res, @FileSource.MountError); if Result then begin DCDebug('(II) Mount successful.'); FileSource.MountError:= nil; end else begin g_print ('(EE) Error mounting location: %s\n', [FileSource.MountError^.message]); end; FileSource.MountLoop.SetEvent; end; function TGioFileSource.MountPath(AFile: PGFile; out AError: PGError): Boolean; var Operation: PGMountOperation; begin Operation:= g_mount_operation_new(); g_signal_connect_data(Operation, 'ask-password', TGCallback(@ask_password_cb), Self, nil, 0); g_signal_connect_data(Operation, 'ask-question', TGCallback(@ask_question_cb), Self, nil, 0); MountTry:= 0; MountError:= nil; MountLoop:= TSimpleEvent.Create; g_file_mount_enclosing_volume (AFile, G_MOUNT_MOUNT_NONE, Operation, nil, @mount_done_cb, Self); repeat if g_main_context_pending(g_main_context_default) then g_main_context_iteration(g_main_context_default, False); until MountLoop.WaitFor(1) <> wrTimeout; MountLoop.Free; g_object_unref (Operation); Result:= MountError = nil; AError:= MountError; end; constructor TGioFileSource.Create(const URI: TURI); begin inherited Create(URI); FOperationsClasses[fsoMove] := TGioMoveOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TGioCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TGioCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TGioCopyOutOperation.GetOperationClass; end; class function TGioFileSource.IsSupportedPath(const Path: String): Boolean; var GVfs: PGVfs; Schemes: PPgchar; begin GVfs := g_vfs_get_default (); Schemes := g_vfs_get_supported_uri_schemes (GVfs); while Schemes^ <> nil do begin Result := (Pos(Schemes^ + '://', Path) = 1); if Result then Exit; Inc(Schemes); end; end; function TGioFileSource.CreateDirectory(const Path: String): Boolean; var AGFile: PGFile; begin AGFile:= g_file_new_for_commandline_arg(Pgchar(Path)); Result:= g_file_make_directory_with_parents(AGFile, nil, nil); g_object_unref(PGObject(AGFile)); end; function TGioFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize: Int64): Boolean; var AFile: PGFile; AInfo: PGFileInfo; begin AFile := g_file_new_for_commandline_arg(Pgchar(Path)); AInfo := g_file_query_filesystem_info (AFile, FILE_ATTRIBUTE_FILESYSTEM_FREE + ',' + FILE_ATTRIBUTE_FILESYSTEM_SIZE, nil, nil); Result := Assigned(AInfo); if Result then begin FreeSize := g_file_info_get_attribute_uint64(AInfo, FILE_ATTRIBUTE_FILESYSTEM_FREE); TotalSize := g_file_info_get_attribute_uint64(AInfo, FILE_ATTRIBUTE_FILESYSTEM_SIZE); g_object_unref(AInfo); end; g_object_unref(PGObject(AFile)); end; function TGioFileSource.GetParentDir(sPath: String): String; begin Result:=inherited GetParentDir(sPath); end; function TGioFileSource.IsPathAtRoot(Path: String): Boolean; begin Result:=inherited IsPathAtRoot(Path); end; function TGioFileSource.GetRootDir(sPath: String): String; begin Result:=inherited GetRootDir(sPath); end; function TGioFileSource.GetRootDir: String; begin Result:=inherited GetRootDir; end; function TGioFileSource.GetProperties: TFileSourceProperties; begin Result:=inherited GetProperties; end; function TGioFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TGioListOperation.Create(TargetFileSource, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result:= TGioCopyOperation.Create(SourceFileSource, SourceFileSource, SourceFiles, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TGioCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result := TGioCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TGioFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; SourceFiles.Path:= FCurrentAddress + SourceFiles.Path; Result := TGioMoveOperation.Create(TargetFileSource, SourceFiles, FCurrentAddress + TargetPath); end; function TGioFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; FilesToDelete.Path:= FCurrentAddress + FilesToDelete.Path; Result := TGioDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TGioFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TGioCreateDirectoryOperation.Create(TargetFileSource, FCurrentAddress + BasePath, DirectoryPath); end; function TGioFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TGioExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TGioFileSource.CreateSetFilePropertyOperation( var theTargetFiles: TFiles; var theNewProperties: TFileProperties ): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; theTargetFiles.Path:= FCurrentAddress + theTargetFiles.Path; Result := TGioSetFilePropertyOperation.Create( TargetFileSource, theTargetFiles, theNewProperties); end; end. �������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiodeleteoperation.pas�����������������������������������������0000644�0001750�0000144�00000013462�12544013212�023161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uGioFileSource, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog; type TGioDeleteOperation = class(TFileSourceDeleteOperation) private FWfxPluginFileSource: IGioFileSource; FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected function ProcessFile(aFile: TFile): Boolean; function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCOSUtils, uLng, uGlib2, uGio2, uGObject2, uGioFileSourceUtil; constructor TGioDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := False; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; FWfxPluginFileSource:= aTargetFileSource as IGioFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TGioDeleteOperation.Destroy; begin inherited Destroy; end; procedure TGioDeleteOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(FilesToDelete, True, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TGioDeleteOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; procedure TGioDeleteOperation.Finalize; begin end; function TGioDeleteOperation.ProcessFile(aFile: TFile): Boolean; var AGFile: PGFile; FileName: String; bRetry: Boolean; sMessage, sQuestion: String; logOptions: TLogOptions; begin Result := False; FileName := aFile.Path + aFile.Name; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [FileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll], fsourYes, fsourSkip) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; end; fsoogNo: Exit; end; end; repeat bRetry := False; //if FileIsReadOnly(aFile.Attributes) then // mbFileSetReadOnly(FileName, False); AGFile:= g_file_new_for_commandline_arg(Pgchar(FileName)); Result:= g_file_delete(AGFile, nil, nil); g_object_unref(PGObject(AGFile)); if Result then begin // success if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [FileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_vfs_op], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end else begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end; if gSkipFileOpError or (FSkipErrors = True) then LogMessage(sMessage, logOptions, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; function TGioDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if gSkipFileOpError then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TGioDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugioexecuteoperation.pas����������������������������������������0000644�0001750�0000144�00000003256�12647525604�023402� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileSourceExecuteOperation; type { TGioExecuteOperation } TGioExecuteOperation = class(TFileSourceExecuteOperation) public procedure MainExecute; override; end; implementation uses uGio, uGio2, uGObject2, uGLib2, fFileProperties, uFile; procedure TGioExecuteOperation.MainExecute; var AFile: PGFile; AFiles: TFiles; AInfo: PGFileInfo; AFileType: TGFileType; begin if Verb = 'properties' then begin AFiles:= TFiles.Create(CurrentPath); try AFiles.Add(ExecutableFile.Clone); ShowFileProperties(FileSource as IFileSource, AFiles); finally AFiles.Free; end; Exit; end; AFile:= g_file_new_for_commandline_arg(Pgchar(AbsolutePath)); try AInfo := g_file_query_info (AFile, FILE_ATTRIBUTE_STANDARD_TYPE + ',' + FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, nil); if Assigned(AInfo) then try AFileType:= g_file_info_get_file_type(AInfo); if AFileType in [G_FILE_TYPE_SHORTCUT, G_FILE_TYPE_MOUNTABLE] then begin ResultString:= g_file_info_get_attribute_string(AInfo, FILE_ATTRIBUTE_STANDARD_TARGET_URI); if Length(ResultString) > 0 then begin FExecuteOperationResult:= fseorSymLink; Exit(); end; end; finally g_object_unref(AInfo); end; finally g_object_unref(PGObject(AFile)); end; if GioOpen(AbsolutePath) then FExecuteOperationResult:= fseorSuccess else begin FExecuteOperationResult:= fseorError; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/fgioauthdlg.pas�������������������������������������������������0000644�0001750�0000144�00000004134�12576570674�021434� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fGioAuthDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, ButtonPanel, uGio2; type { TfrmGioAuthDialog } TfrmGioAuthDialog = class(TForm) ButtonPanel: TButtonPanel; edtDomain: TEdit; edtPassword: TEdit; edtUserName: TEdit; imgAuth: TImage; lblDomain: TLabel; lblMessage: TLabel; lblPassword: TLabel; lblUserName: TLabel; pnlUser: TPanel; pnlConnect: TPanel; rbAnonymous: TRadioButton; rbConnetAs: TRadioButton; procedure rbAnonymousChange(Sender: TObject); private procedure ShowThread; public { public declarations } end; function ShowAuthDlg(const Message: String; var Flags: TGAskPasswordFlags; var DefaultUser, DefaultDomain: String; out Password: String): Boolean; implementation function ShowAuthDlg(const Message: String; var Flags: TGAskPasswordFlags; var DefaultUser, DefaultDomain: String; out Password: String): Boolean; begin with TfrmGioAuthDialog.Create(Application) do try Caption:= Application.Title; lblMessage.Caption:= Message; rbAnonymous.Checked:= (Flags and G_ASK_PASSWORD_ANONYMOUS_SUPPORTED <> 0); pnlConnect.Visible:= rbAnonymous.Checked; pnlUser.Enabled:= not pnlConnect.Visible; edtUserName.Text:= DefaultUser; edtDomain.Text:= DefaultDomain; lblDomain.Visible:= (Flags and G_ASK_PASSWORD_NEED_DOMAIN <> 0); edtDomain.Visible:= lblDomain.Visible; TThread.Synchronize(nil, @ShowThread); Result:= ModalResult = mrOK; if Result then begin if not rbAnonymous.Checked then begin Password:= edtPassword.Text; DefaultUser:= edtUserName.Text; DefaultDomain:= edtDomain.Text; if pnlConnect.Visible then Flags -= G_ASK_PASSWORD_ANONYMOUS_SUPPORTED; end; end; finally Free; end; end; {$R *.lfm} { TfrmGioAuthDialog } procedure TfrmGioAuthDialog.rbAnonymousChange(Sender: TObject); begin pnlUser.Enabled:= not rbAnonymous.Checked; end; procedure TfrmGioAuthDialog.ShowThread; begin ShowModal; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiomoveoperation.pas�������������������������������������������0000644�0001750�0000144�00000005050�12573301222�022662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceMoveOperation, uFileSource, uFile, uGioFileSourceUtil; type { TGioMoveOperation } TGioMoveOperation = class(TFileSourceMoveOperation) private FOperationHelper: TGioOperationHelper; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); virtual reintroduce; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationOptions, uGio2; constructor TGioMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TGioMoveOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TGioMoveOperation.Initialize; var TreeBuilder: TGioTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TGioTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := fsooslDontFollow; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; FOperationHelper := TGioOperationHelper.Create( FileSource as IFileSource, Self, FStatistics, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, g_file_move, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.Initialize; end; procedure TGioMoveOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TGioMoveOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiocopyoperation.pas�������������������������������������������0000644�0001750�0000144�00000007721�12573301222�022675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uGioFileSourceUtil; type { TGioCopyOperation } TGioCopyOperation = class(TFileSourceCopyOperation) private FOperationHelper: TGioOperationHelper; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics protected FSymLinkOption: TFileSourceOperationOptionSymLink; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; end; { Both operations are the same, just source and target reversed. Implement them in terms of the same functions, or have one use the other. } { TGioCopyInOperation } TGioCopyInOperation = class(TGioCopyOperation) protected function GetID: TFileSourceOperationType; override; end; { TGioCopyOutOperation } TGioCopyOutOperation = class(TGioCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses fGioCopyMoveOperationOptions, uGio2; constructor TGioCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TGioCopyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); end; procedure TGioCopyOperation.Initialize; var TreeBuilder: TGioTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TGioTreeBuilder.Create(@AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := Self.SymLinkOption; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; FOperationHelper := TGioOperationHelper.Create( FileSource as IFileSource, Self, FStatistics, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, g_file_copy, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.Initialize; end; procedure TGioCopyOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TGioCopyOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TGioCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TGioCopyOperationOptionsUI; end; { TGioCopyInOperation } function TGioCopyInOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyIn; end; { TGioCopyOutOperation } function TGioCopyOutOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyOut; end; end. �����������������������������������������������doublecmd-0.7.1/src/filesources/gio/fgioauthdlg.lfm�������������������������������������������������0000644�0001750�0000144�00000027315�12576577006�021431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmGioAuthDialog: TfrmGioAuthDialog Left = 487 Height = 215 Top = 67 Width = 375 AutoSize = True BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 215 ClientWidth = 375 Constraints.MaxHeight = 215 Constraints.MinWidth = 375 LCLVersion = '1.4.2.0' object imgAuth: TImage AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 8 Height = 48 Top = 8 Width = 48 AutoSize = True Picture.Data = { 1754506F727461626C654E6574776F726B477261706869639E0C000089504E47 0D0A1A0A0000000D49484452000000300000003008060000005702F987000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000DD700000DD70142289B780000000774494D4507DB080F071810 46DD836300000C1E4944415468DEED99696C5CD775C7FFF7BE75567286FB4E4A 946451FB92C892BA08B12CD5B69C1510827C285023C856A4881D470E69B4982F 7165C9551314719AB641F3A51FE43A4E1D25B2C5489614CB5A182D96646DDCB7 216786E4BCD9E76DF7DE7E9811CB2869E02816ED02BDC0C50CDE9CF3707FE79C 7BCEB97780FFE383FC6F3F9C3C79D2AF7AA4373CBAE7615DD36555D50A9515A1 F16231F72BCBB2DF4CA5B2C7366FDE5CF8C8029C38D57BA3BEB6BEABA9B119B2 A2429115A8AA0AC77190CEA45028E4529665FFB8E09A3F58BF727DFF470EA0F7 ADA37CD3BA8F93A9E94930E62210A8444B730B2CCB86AA2A2084229FCFC148CD 8942A1D06B99C57D9B363D7C6DB101E8EF2163966DC1B48A30D2C6778D64AA66 70F0CEA3F178F4603C3E356EA4E62049148D0DCDA4AEB661B7C7E7BBDC77F9C2 BF9EEC3B59FF9100101CE763F1289A1A9B0190AF1AC6CCEAAEAEB5C73B3B1FDA D7D27271492697FED4ECDCEC9BF1C4342714686FED901A6AEBBFE8A7DAC0E9B7 4FFEF5871E42478F1E0DCA3A195CD1B9A2C6A37B71EBF60DC7B2EDAFEFDAF9D8 0F17CADD18B8B18A30719052F258385405894A181D1F412693FE0FDBE45FDEBD 7B77FE43010080DEDE23CBA8A2FCAA6BC5AA7A55D5717BE0268AF9DCCB3E6FFE D96DDBF61617CABE7BFDE22EEEF2433E5F60556D4D2DA663D3181E1932870747 662DCBC901483026AE13224E158B9EDE48E46F320F1C00008E1D3BD64264F67A 5B6BFB86CA8A10C627C661A4674708A4AF3FFA89BFF8C55DB9175E7AA14B97E4 7FEA5CD6F9677575F5726B4B3B72B90C46C68621530D54926099261289193B11 9F7518633F1682753FF7DC73D9070A0000478E1CF16A5EF9DF7D5EEFDEF6B60E 388E83F1C93198A6F95330F6DCBBEFBEB79DCAF4E5952BBBB4D87482FA033ED4 D5D56049C712148B266289692C695F0ADBB2E03206C7B171FBCE803D32343AE3 38D8D5D3F3ECCD070A00004208F2CB136F7E89CAE4859AAADAF0D28E6548A753 38DF775644A7A6F8C73FB645BA72F92AEAEBEBB17EFD5A080023A3837868D94A 4CC7A730376BA0ABAB0B9665C2765CC812453C9E1017CE5F4A3A8EB5B9BBBB7B F403CD42BF454A88D8B5F3B11FC29597C713B17FBE72EDD73C9E886162224AB6 6DDD2E0DF40FA1A6BA06EBD7AF43201044DA48636C64323B363186C6FA26B8CC 16972F5D81AAE9A004B01D1BB575B564C3C6B52145D17E1E8944E80305B83B76 EEDC39B7EB91C7BF5AB48A5BCEF59D8B3FF4D00AE40B7918C934D66F5C8B5C3E 034A292E5EBC84C6E6FA002040A90C5991AD3B7706012E402905A5121CC7466B 6B330D87431D5EAFFF8B8B02309F757E7D63B2982F56B4B4B462B07F18EBD6AD 06E70C9C7364B319D8B68BBAEA3A04FD15181A1940A150B846482962A9248152 0A42081CD7C5EAB52BBD94D26F2D2A0083B3A7B5A58D73C66024D3686E6982EB B890CA96ED58D28E4B97DF15935313666236716AF0CEE8FAA6A606C88A0C4208 2452F282E00C55E12AA8AADA78E0C081A57FE83AE4FB059065795B5575D89B4E 67E1F379A1280A6CDB02A5148EEB60E5CAE5B06D8B5CBF7A471742EC686F6FC3 B6ED5B21B88044244002280400094270545787D9D858612380A14501A0200DAA AA2197CB4255D5D2334A21840000D8B68575EBD660C38675E09CC3EBF54140C0 751C104A4041200909800040E0F3F9144250BD681E0050E442409452ECFCC604 0444F9B96599701C079C73A4520602C10AE89A064A693935030214945230CE04 40DC45DB035CB09BB94C96852A2A90C96421D1D24238E7C8E5F2309249CCCECE 219BCBC1B26D702150C8E5C05C0610024A4AF2129520491272D9BC0DB0F14503 70B97B2A3A1D2D042B2B000264B279082E70EBD66DC46271E4727970CE41CAD5 92828250A050CC838094C2A8EC3521041289844708D1B768004BDB569C4C1B29 DB344D842A2B30D03F009FDF875028044A040821A5C513024228082D7D7221E0 D81608290148928CA9A99820845CE8EEEE36160D60EFDEBDCCE5ACE7CAE5CB85 CE651DB8736700F97C014B3ADA21ABDA6F742B64BE6B21902885CBDCB2F54B21 77E9E295A265B9DD8B5A0700C02A38FF964A1B971389B8D3D45C8F13C7DF02A5 0A562C5F01BFCF575AB3004048C9E28494810884E02020E8EBBB683A8EFD9F3D 3DFBDE5974804824C2298A4F0E8F8E4E575404A0A80A7E71F40D70C6D0D1B114 ADAD6D08852AA1EB1EE89A024DD7A1697A290B09829B376FB1B1D1F16B994CFA 2B1FF891F2FD8EA79F8EA408A0D4D7376069673B344DC14F7EF23AAE5DBB0E89 4AA8AAAA4175751582C14A783C1EC89204C761E04240D3344A08FA23918879DF 05F58F053874E890C7E5569522CBA80A57419224787D31F40F0CE0EAD5EBF0FB FDF8DCE73E09084040802A145CE4C05C070D0D0D8473EC7E2087FAF73B9E79E6 992221F8FB2BD7AF145455452010404B4B33EA1BAAB17CC51214CD8298994942 966548B4D4C4C9928CA269A2A232084D537DF7D3037D6000A5AAC65F8B4E44F5 4C26035996C1184355388C254B97A0582C3867CF9E2B663219288A024996A069 2A0AF90220085A5A9AC19878F44301884422F41FBF77E0652AAB7D1B366C2415 C10A101098A6054551C0980BCBCE8B4462F61BAFBEFA5FC69933E74C4A283C1E 0F2CCB826D5B686B6BF1EABAFE990F05C0EB55D6CBB2FA977B9E7852EBECEC24 5C7030C6619945783C5E1849033E9FFF4277F7BE7F9124F967B222498CB1524D 20402A9D467D431D1CC7FD93575E79455A74004678D0716C52340BF3876BD32C 82730E8FD783583C6672CE7FBA7FFFFE559462EFDA35AB15D775C13883A66A30 92B3D0351DC1A09F0D0D8D6F5C7480EE6FFDED29DB743E7BE2C4F1ECCCCCAC90 6505D96C0E9AAA419664C462319711F4027447737353B95B2D75AF5EAF8E39C3 80E338686D6D5125E9FEB2D11FBD89BFFDEDE78FB9AEFD77232343454A095269 03814000C54211B66DBB3DCFF6DCE49C9E181E1EC1E1C3AFE64F9D7E3B373D15 13FE4010AEE3209D4EA1A1A1419365F9338B5A07BE73F03BAB3DB2FA82107CB3 00426D6DEDBA6DDB706C1BA1501813D14948941C07809E9E676F0B217CFBF7EF 5F3A3A52FC6C3693ED79FCF1DD153E9F17B3C939B4B6B4C175DDD59148C41B89 440A8BE201954A7FD5D6DEF6C49E3D9F6CF8C2E7BFA037373523954E43D33CF0 FA7C88C5A6338ECD7EB6F05A261C0E8FC9B2FC312A490AE70CC1400552460A12 95100E878BBAAEFFE9A28510A5D4234BB253110CE2EEC92C9BC92014AA84E01C B1585C755571FCAEFC8B2FBE18C8E70B6FD737D4EDD9B163BBD7652EFC8100F2 851C6CDB465373634051D43D8B06609BECF9FE8101DB4819A52B1200D96C06D5 55D5481A491082D8F34F3F3FBDC0033ED7659BB66CD9A40380EB32E8BA064228 32D934EAEA6A28409F583400429C660891E8EFEF679450148A45702E50595981 582CCE39134717CAEFDBB72F46A974A6B7F7547E2E999A3F3BFBFD3E18461295 9595E09C351E3C78B0F68103BC74E8408FAAEBE7B73EBCB5EDE12D5B25102093 CE201008824A0AA2D1C92C13EED17BF5BEF9CD6F7C229FCB7CEDD45B6F174647 26C08580DFE7472A950221404D4D95EDBAE291070E40089EFED4939FF6AE5CB9 4AA612052514D95C06E1AA305CC7C15C72CE63E69DD3BFEB7E9531761610B4AA 3A0CC65CF87DFEF9B6A2A1A12EA069CAA71F14000120B7B7B7EB103C1E9D8ABA 840094500801E47239842B4388CF24204BF2ED728F7FEFED379165E507CB972F 95155502671CB22243D554188681503804D7658F00D0CA299E7C1075800290CA B2D2E8E8A8D477E1CAE705C8D9DA9ADA406D6D1DF2F92C0821F0FB03B8FEDE7B 762E9FFB39001D0003E0960F9614800C821ADDA3CB9CF3BB775A08F883300C03 9AEA018028004F59F7AEBE0B80DF8F074879F14A79AA00B4C3870F272727A3DD BDC77F59304D1373C924828120F2F93C868787D87474EA4C59765EA7FC5D9E9D 99FBFEB5AB37F217CE5D2CCC2593E09C83CA14F1C40C060606AD6432F94A595E 2D1B4DFE7DDE90DE07C05D0FD085F3FCB90B835BB76E69BC71EB46576226614A 9244CEF79DB70C23F5BD7F78E9BBAF952DC6CBD69F37D83BEF9CE99F9818FF51 5D5D5D3A39975E3D31314526C6A2C865F3C9542AF3C6E9D3277F343E3E9E5FA0 BF70DED73F34BF1142F74CB266CD1AFF23BB766C095586FE3C9F2D5C3870E0A5 D717B8FFB7436881BECFE7939F7AEAA9EDA3A3D1D123475E8B2E58287BBF2144 FEC04D7CAF27EED517F7588CDDE301B20080CE5F16FDCF058C58F00EF63BF4FF 7F7CE4C67F0326A2B675DDA7D6BA0000000049454E44AE426082 } end object pnlUser: TPanel AnchorSideLeft.Control = pnlConnect AnchorSideTop.Control = pnlConnect AnchorSideTop.Side = asrBottom Left = 72 Height = 72 Top = 83 Width = 290 AutoSize = True BorderSpacing.Top = 10 BevelOuter = bvNone ClientHeight = 72 ClientWidth = 290 Color = clForm ParentColor = False TabOrder = 0 object lblUserName: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 3 Width = 72 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = lblUserName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUser AnchorSideRight.Side = asrBottom Left = 90 Height = 20 Top = 0 Width = 200 BorderSpacing.Left = 18 TabOrder = 0 end object lblDomain: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 29 Width = 51 Caption = 'Domain:' ParentColor = False end object edtDomain: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 90 Height = 20 Top = 26 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblPassword: TLabel AnchorSideLeft.Control = pnlUser AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 55 Width = 63 Caption = 'Password:' ParentColor = False end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 90 Height = 20 Top = 52 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 2 end end object lblMessage: TLabel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = imgAuth Left = 72 Height = 1 Top = 8 Width = 1 BorderSpacing.Left = 16 ParentColor = False end object pnlConnect: TPanel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblMessage AnchorSideTop.Side = asrBottom Left = 72 Height = 40 Top = 33 Width = 163 AutoSize = True BorderSpacing.Left = 16 BorderSpacing.Top = 24 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 40 ClientWidth = 163 Color = clForm ParentColor = False TabOrder = 1 object rbAnonymous: TRadioButton Left = 0 Height = 20 Top = 0 Width = 163 Caption = 'Connect anonymously' Checked = True OnChange = rbAnonymousChange TabOrder = 1 TabStop = True end object rbConnetAs: TRadioButton Left = 0 Height = 20 Top = 20 Width = 163 Caption = 'Connect as user:' TabOrder = 0 end end object ButtonPanel: TButtonPanel AnchorSideTop.Control = pnlUser AnchorSideTop.Side = asrBottom Left = 193 Height = 28 Top = 171 Width = 174 Align = alNone Anchors = [akTop, akRight] BorderSpacing.Top = 16 BorderSpacing.Around = 0 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True TabOrder = 2 Spacing = 10 ShowButtons = [pbOK, pbCancel] ShowBevel = False end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiolistoperation.pas�������������������������������������������0000644�0001750�0000144�00000004403�12550146326�022677� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioListOperation; {$macro on} {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uGioFileSource, uFileSource, uGLib2, uGio2; type { TGioListOperation } TGioListOperation = class(TFileSourceListOperation) private FGioFileSource: IGioFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, Dialogs, uFile, DCDateTimeUtils, uGioFileSourceUtil, uGObject2; {$DEFINE G_IO_ERROR:= g_io_error_quark()} constructor TGioListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FGioFileSource := aFileSource as IGioFileSource; inherited Create(aFileSource, aPath); end; procedure TGioListOperation.MainExecute; var AFile: TFile; AFolder: PGFile; AInfo: PGFileInfo; AError: PGError = nil; AFileEnum: PGFileEnumerator; begin FFiles.Clear; with FGioFileSource do begin AFolder:= g_file_new_for_commandline_arg(Pgchar(Path)); try while True do begin AFileEnum := g_file_enumerate_children (AFolder, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, nil, @AError); // Mount the target if (Assigned(AError) and g_error_matches (AError, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) then begin FreeAndNil(AError); if FGioFileSource.MountPath(AFolder, AError) then Continue else begin ShowError(AError); Break; end; end; // List files try AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); while Assigned(AInfo) do begin CheckOperationState; AFile:= TGioFileSource.CreateFile(Path, AFolder, AInfo); g_object_unref(AInfo); FFiles.Add(AFile); AInfo:= g_file_enumerator_next_file(AFileEnum, nil, @AError); end; if Assigned(AError) then ShowError(AError); finally g_object_unref(AFileEnum); end; Break; end; finally g_object_unref(PGObject(AFolder)); end; end; // FGioFileSource end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/fgiocopymoveoperationoptions.pas��������������������������������0000644�0001750�0000144�00000010075�12550161266�025164� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fGioCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, KASComboBox, uGioCopyOperation, uGioMoveOperation; type { TGioCopyMoveOperationOptionsUI } TGioCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) cbFollowLinks: TCheckBox; cmbDirectoryExists: TComboBoxAutoWidth; cmbFileExists: TComboBoxAutoWidth; grpOptions: TGroupBox; lblDirectoryExists: TLabel; lblFileExists: TLabel; pnlCheckboxes: TPanel; pnlComboBoxes: TPanel; private procedure SetOperationOptions(CopyOperation: TGioCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TGioMoveOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TGioCopyOperationOptionsUI = class(TGioCopyMoveOperationOptionsUI) end; { TGioMoveOperationOptionsUI } TGioMoveOperationOptionsUI = class(TGioCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; implementation {$R *.lfm} uses DCStrUtils, uLng, uGlobs, uFileSourceOperationOptions; { TGioCopyMoveOperationOptionsUI } constructor TGioCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); ParseLineToList(rsFileOpFileExistsOptions, cmbFileExists.Items); ParseLineToList(rsFileOpDirectoryExistsOptions, cmbDirectoryExists.Items); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; case gOperationOptionDirectoryExists of fsoodeNone : cmbDirectoryExists.ItemIndex := 0; fsoodeCopyInto : cmbDirectoryExists.ItemIndex := 1; fsoodeSkip : cmbDirectoryExists.ItemIndex := 2; end; case gOperationOptionSymLinks of fsooslFollow : cbFollowLinks.State := cbChecked; fsooslDontFollow : cbFollowLinks.State := cbUnchecked; fsooslNone : cbFollowLinks.State := cbGrayed; end; end; procedure TGioCopyMoveOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TGioCopyOperation then SetOperationOptions(Operation as TGioCopyOperation) else if Operation is TGioMoveOperation then SetOperationOptions(Operation as TGioMoveOperation); end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions( CopyOperation: TGioCopyOperation); begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cbFollowLinks.State of cbChecked : SymLinkOption := fsooslFollow; cbUnchecked: SymLinkOption := fsooslDontFollow; cbGrayed : SymLinkOption := fsooslNone; end; end; end; procedure TGioCopyMoveOperationOptionsUI.SetOperationOptions( MoveOperation: TGioMoveOperation); begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; end; end; { TGioMoveOperationOptionsUI } constructor TGioMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); cbFollowLinks.Visible:= False; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiocreatedirectoryoperation.pas��������������������������������0000644�0001750�0000144�00000002710�12544020450�025103� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource; type TGioCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) public procedure MainExecute; override; end; implementation uses uFileSourceOperationUI, uLog, uLng, uGlobs, uGio2, uGLib2, uGObject2; procedure TGioCreateDirectoryOperation.MainExecute; var AGFile: PGFile; AResult: Boolean; AError: PGError = nil; begin AGFile:= g_file_new_for_commandline_arg(Pgchar(AbsolutePath)); AResult:= g_file_make_directory_with_parents(AGFile, nil, @AError); g_object_unref(PGObject(AGFile)); if Assigned(AError) then begin AResult:= g_error_matches (AError, g_io_error_quark(), G_IO_ERROR_EXISTS); if not AResult then; begin if g_error_matches (AError, g_io_error_quark(), G_IO_ERROR_NOT_SUPPORTED) then AskQuestion(rsMsgErrNotSupported, '', [fsourOk], fsourOk, fsourOk) else begin // write log error if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); end; end; g_error_free(AError); end; if AResult then begin // write log success if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir, [AbsolutePath]), lmtSuccess) end end; end. ��������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/ugiosetfilepropertyoperation.pas��������������������������������0000644�0001750�0000144�00000014400�12544026053�025157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGioSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFile, uGio2, uGLib2, uFileProperty, uWfxPluginFileSource; type { TGioSetFilePropertyOperation } TGioSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; private function SetFileTime(AFile: PGFile; ATime: Pgchar; AValue: TDateTime): Boolean; protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCBasicTypes, DCDateTimeUtils, uGioFileSourceUtil, uGObject2; constructor TGioSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; end; destructor TGioSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; end; procedure TGioSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles:= FFullFilesTree.Count; end else begin FillAndCount(TargetFiles, True, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TGioSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; function TGioSetFilePropertyOperation.SetFileTime(AFile: PGFile; ATime: Pgchar; AValue: TDateTime): Boolean; begin Result:= g_file_set_attribute_uint64 (AFile, ATime, DateTimeToUnixFileTime(AValue), G_FILE_QUERY_INFO_NONE, nil, nil); end; function TGioSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; var AGFile: PGFile; AGNewFile: PGFile; NewAttributes: TFileAttrs; begin Result := sfprSuccess; AGFile:= g_file_new_for_commandline_arg(Pgchar(aFile.FullPath)); case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin AGNewFile:= g_file_set_display_name(AGFile, Pgchar((aTemplateProperty as TFileNameProperty).Value), nil, nil); if (AGNewFile = nil) then Result := sfprError else begin g_object_unref(PGObject(AGNewFile)); end; end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin NewAttributes := (aTemplateProperty as TFileAttributesProperty).Value; if aTemplateProperty is TUnixFileAttributesProperty then begin if not g_file_set_attribute_uint32 (AGFile, FILE_ATTRIBUTE_UNIX_MODE, NewAttributes, G_FILE_QUERY_INFO_NONE, nil, nil) then Result := sfprError; end else raise Exception.Create('Unsupported file attributes type'); end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_MODIFIED, (aTemplateProperty as TFileModificationDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_CREATED, (aTemplateProperty as TFileCreationDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin if not SetFileTime(AGFile, FILE_ATTRIBUTE_TIME_ACCESS, (aTemplateProperty as TFileLastAccessDateTimeProperty).Value) then Result := sfprError; end else Result := sfprSkipped; else raise Exception.Create('Trying to set unsupported property'); end; g_object_unref(PGObject(AGFile)); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/fgioauthdlg.lrt�������������������������������������������������0000644�0001750�0000144�00000000375�12545763133�021443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMGIOAUTHDIALOG.LBLUSERNAME.CAPTION=User name: TFRMGIOAUTHDIALOG.LBLDOMAIN.CAPTION=Domain: TFRMGIOAUTHDIALOG.LBLPASSWORD.CAPTION=Password: TFRMGIOAUTHDIALOG.RBANONYMOUS.CAPTION=Connect anonymously TFRMGIOAUTHDIALOG.RBCONNETAS.CAPTION=Connect as user: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/gio/fgiocopymoveoperationoptions.lfm��������������������������������0000644�0001750�0000144�00000005070�12550161266�025156� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object GioCopyMoveOperationOptionsUI: TGioCopyMoveOperationOptionsUI Left = 453 Height = 158 Top = 166 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 LCLVersion = '1.4.0.4' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner Left = 0 Height = 57 Top = 0 Width = 240 AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 5 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 57 ClientWidth = 240 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 14 Top = 8 Width = 135 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBoxAutoWidth Left = 140 Height = 20 Top = 5 Width = 100 ItemHeight = 14 Items.Strings = ( 'Ask' 'Overwrite' 'Skip' ) Style = csDropDownList TabOrder = 0 end object lblDirectoryExists: TLabel Left = 0 Height = 14 Top = 35 Width = 135 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When dir&ectory exists' FocusControl = cmbDirectoryExists ParentColor = False end object cmbDirectoryExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblDirectoryExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDirectoryExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 140 Height = 20 Top = 32 Width = 100 ItemHeight = 14 Style = csDropDownList TabOrder = 1 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes Left = 248 Height = 29 Top = 0 Width = 95 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone BevelWidth = 8 ChildSizing.TopBottomSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 29 ClientWidth = 95 TabOrder = 1 object cbFollowLinks: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = pnlCheckboxes Left = 0 Height = 19 Top = 5 Width = 95 AllowGrayed = True Caption = 'Fo&llow links' TabOrder = 0 end end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717733�020035� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemcopyoperation.pas�����������������������������0000644�0001750�0000144�00000016513�12573301222�025710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uFileSystemUtil, DCOSUtils, uSearchTemplate; type { TFileSystemCopyOperation } TFileSystemCopyOperation = class(TFileSourceCopyOperation) private FOperationHelper: TFileSystemOperationHelper; FExcludeEmptyTemplateDirectories: Boolean; FSearchTemplate: TSearchTemplate; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options. FReserveSpace, FCheckFreeSpace: Boolean; FCopyAttributesOptions: TCopyAttributesOptions; FSkipAllBigFiles: Boolean; FAutoRenameItSelf: Boolean; FSymLinkOption: TFileSourceOperationOptionSymLink; FCorrectSymLinks: Boolean; procedure SetSearchTemplate(AValue: TSearchTemplate); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property AutoRenameItSelf: Boolean read FAutoRenameItSelf write FAutoRenameItSelf; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Operation takes ownership of assigned template and will free it. } property SearchTemplate: TSearchTemplate read FSearchTemplate write SetSearchTemplate; end; { Both operations are the same, just source and target reversed. Implement them in terms of the same functions, or have one use the other. } { TFileSystemCopyInOperation } TFileSystemCopyInOperation = class(TFileSystemCopyOperation) protected function GetID: TFileSourceOperationType; override; end; { TFileSystemCopyOutOperation } TFileSystemCopyOutOperation = class(TFileSystemCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses fFileSystemCopyMoveOperationOptions, uGlobs; // -- TFileSystemCopyOperation --------------------------------------------- constructor TFileSystemCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin // Here we can read global settings if there are any. FCopyAttributesOptions := []; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; if gDropReadOnlyFlag then FCopyAttributesOptions := FCopyAttributesOptions + [caoRemoveReadOnlyAttr]; FSymLinkOption := gOperationOptionSymLinks; FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; FSetPropertyError := gOperationOptionSetPropertyError; FReserveSpace := gOperationOptionReserveSpace; FCheckFreeSpace := gOperationOptionCheckFreeSpace; FSkipAllBigFiles := False; FAutoRenameItSelf := False; FCorrectSymLinks := gOperationOptionCorrectLinks; FExcludeEmptyTemplateDirectories := True; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TFileSystemCopyOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); FreeAndNil(FOperationHelper); FreeAndNil(FSearchTemplate); end; procedure TFileSystemCopyOperation.Initialize; var TreeBuilder: TFileSystemTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TFileSystemTreeBuilder.Create( @AskQuestion, @CheckOperationState); try TreeBuilder.SymLinkOption := Self.SymLinkOption; TreeBuilder.SearchTemplate := Self.SearchTemplate; TreeBuilder.ExcludeEmptyTemplateDirectories := Self.ExcludeEmptyTemplateDirectories; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TFileSystemOperationHelper.Create( @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, fsohmCopy, TargetPath, FStatistics); FOperationHelper.RenameMask := RenameMask; FOperationHelper.ReserveSpace := FReserveSpace; FOperationHelper.CheckFreeSpace := CheckFreeSpace; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.SkipAllBigFiles := SkipAllBigFiles; FOperationHelper.AutoRenameItSelf := AutoRenameItSelf; FOperationHelper.CorrectSymLinks := CorrectSymLinks; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.SetPropertyError := SetPropertyError; FOperationHelper.Initialize; end; procedure TFileSystemCopyOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TFileSystemCopyOperation.SetSearchTemplate(AValue: TSearchTemplate); begin FSearchTemplate.Free; FSearchTemplate := AValue; end; procedure TFileSystemCopyOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FreeAndNil(FOperationHelper); end; class function TFileSystemCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TFileSystemCopyOperationOptionsUI; end; { TFileSystemCopyInOperation } function TFileSystemCopyInOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyIn; end; { TFileSystemCopyOutOperation } function TFileSystemCopyOutOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopyOut; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemutil.pas��������������������������������������0000644�0001750�0000144�00000136323�12612505011�023770� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uDescr, uLog, uGlobs, DCOSUtils, uFile, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uFileSourceCopyOperation, uFileSourceTreeBuilder; function ApplyRenameMask(aFile: TFile; NameMask: String; ExtMask: String): String; overload; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function FileExistsMessage(const TargetName, SourceName: String; SourceSize: Int64; SourceTime: TDateTime): String; type TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; TFileSystemOperationTargetExistsResult = (fsoterNotExists, fsoterDeleted, fsoterAddToTarget, fsoterResume, fsoterSkip); TFileSystemOperationHelperMode = (fsohmCopy, fsohmMove); TFileSystemOperationHelperCopyMode = (fsohcmDefault, fsohcmAppend, fsohcmResume); TFileSystemOperationHelperMoveOrCopy = function(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean of object; { TFileSystemTreeBuilder } TFileSystemTreeBuilder = class(TFileSourceTreeBuilder) protected procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); override; procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); override; end; { TFileSystemOperationHelper } TFileSystemOperationHelper = class private FOperationThread: TThread; FMode: TFileSystemOperationHelperMode; FBuffer: Pointer; FBufferSize: LongWord; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FDescription: TDescription; FLogCaption: String; FRenamingFiles: Boolean; FRenamingRootDir: Boolean; FRootDir: TFile; FReserveSpace, FCheckFreeSpace: Boolean; FSkipAllBigFiles: Boolean; FSkipOpenForReadingError: Boolean; FSkipOpenForWritingError: Boolean; FSkipReadError: Boolean; FSkipWriteError: Boolean; FAutoRenameItSelf: Boolean; FCorrectSymLinks: Boolean; FCopyAttributesOptions: TCopyAttributesOptions; FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; MoveOrCopy: TFileSystemOperationHelperMoveOrCopy; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function CopyFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; function MoveFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; procedure CopyProperties(SourceFileName, TargetFileName: String); function ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; function ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; function TargetExists(aNode: TFileTreeNode; var AbsoluteTargetFileName: String) : TFileSystemOperationTargetExistsResult; function DirExists(aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean; AllowDelete: Boolean): TFileSourceOperationOptionDirectoryExists; function FileExists(aFile: TFile; var AbsoluteTargetFileName: String; AllowAppend: Boolean): TFileSourceOperationOptionFileExists; procedure CountStatistics(aNode: TFileTreeNode); public constructor Create(AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; OperationThread: TThread; Mode: TFileSystemOperationHelperMode; TargetPath: String; StartingStatistics: TFileSourceCopyOperationStatistics); destructor Destroy; override; procedure Initialize; procedure ProcessTree(aFileTree: TFileTree); property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property AutoRenameItSelf: Boolean read FAutoRenameItSelf write FAutoRenameItSelf; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property RenameMask: String read FRenameMask write FRenameMask; end; implementation uses uDebug, uOSUtils, DCStrUtils, FileUtil, uFindEx, DCClassesUtf8, uFileProcs, uLng, DCBasicTypes, uFileSource, uFileSystemFileSource, uFileProperty, StrUtils, DCDateTimeUtils, uShowMsg, Forms; function ApplyRenameMask(aFile: TFile; NameMask: String; ExtMask: String): String; overload; begin // Only change name for files. if aFile.IsDirectory or aFile.IsLink then Result := aFile.Name else Result := ApplyRenameMask(aFile.Name, NameMask, ExtMask); end; procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure FillAndCountRec(const srcPath: String); var sr: TSearchRecEx; aFile: TFile; begin if FindFirstEx(srcPath + '*', faAnyFile, sr) = 0 then begin repeat if (sr.Name='.') or (sr.Name='..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); NewFiles.Add(aFile); if aFile.IsLink then begin end else if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + sr.Name + DirectorySeparator); // go down to directory end else begin FilesSize:= FilesSize + aFile.Size; Inc(FilesCount); end; until FindNextEx(sr) <> 0; end; FindCloseEx(sr); end; var i: Integer; aFile: TFile; begin FilesCount:= 0; FilesSize:= 0; if ExcludeRootDir then begin if Files.Count <> 1 then raise Exception.Create('Only a single directory can be set with ExcludeRootDir=True'); NewFiles := TFiles.Create(Files[0].FullPath); FillAndCountRec(Files[0].FullPath + DirectorySeparator); end else begin NewFiles := TFiles.Create(Files.Path); for i := 0 to Files.Count - 1 do begin aFile := Files[i]; NewFiles.Add(aFile.Clone); if aFile.IsDirectory and (not aFile.IsLinkToDirectory) then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.Path + aFile.Name + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); FilesSize:= FilesSize + aFile.Size; // in first level we know file size -> use it end; end; end; end; function FileExistsMessage(const TargetName, SourceName: String; SourceSize: Int64; SourceTime: TDateTime): String; var TargetInfo: TSearchRec; begin Result:= rsMsgFileExistsOverwrite + LineEnding + TargetName + LineEnding; if mbFileGetAttr(TargetName, TargetInfo) then begin Result:= Result + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(TargetInfo.Size)), DateTimeToStr(FileDateToDateTime(TargetInfo.Time))]) + LineEnding; end; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + SourceName + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(SourceSize)), DateTimeToStr(SourceTime)]); end; // ---------------------------------------------------------------------------- procedure TFileSystemTreeBuilder.AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); var LinkedFilePath: String; LinkedFile: TFile = nil; AddedNode: TFileTreeNode; AddedIndex: Integer; begin LinkedFilePath := mbReadAllLinks(aFile.FullPath); if LinkedFilePath <> '' then begin try LinkedFile := TFileSystemFileSource.CreateFileFromFile(LinkedFilePath); // Add link to current node. AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create; (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; // Then add linked file/directory as a subnode of the link. AddItem(LinkedFile, AddedNode); except on EFileNotFound do begin // Link target doesn't exist - add symlink instead of target (or ask user). AddLink(aFile, CurrentNode); end; end; end else begin // error - cannot follow symlink - adding symlink instead of target (or ask user) AddLink(aFile, CurrentNode); end; end; procedure TFileSystemTreeBuilder.AddFilesInDirectory( srcPath: String; CurrentNode: TFileTreeNode); var sr: TSearchRecEx; aFile: TFile; begin if FindFirstEx(srcPath + '*', faAnyFile, sr) = 0 then begin repeat if (sr.Name = '.') or (sr.Name = '..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); AddItem(aFile, CurrentNode); until FindNextEx(sr) <> 0; end; FindCloseEx(sr); end; // ---------------------------------------------------------------------------- constructor TFileSystemOperationHelper.Create(AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; OperationThread: TThread; Mode: TFileSystemOperationHelperMode; TargetPath: String; StartingStatistics: TFileSourceCopyOperationStatistics); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; FOperationThread := OperationThread; FMode := Mode; FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); FCheckFreeSpace := True; FSkipAllBigFiles := False; FSkipReadError := False; FSkipWriteError := False; FCopyAttributesOptions := CopyAttributesOptionCopyAll; FFileExistsOption := fsoofeNone; FDirExistsOption := fsoodeNone; FSetPropertyError := fsoospeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FStatistics := StartingStatistics; FRenamingFiles := False; FRenamingRootDir := False; FRootDir := nil; if gProcessComments then FDescription := TDescription.Create(True) else FDescription := nil; case FMode of fsohmCopy: begin MoveOrCopy := @CopyFile; FLogCaption := rsMsgLogCopy; end; fsohmMove: begin MoveOrCopy := @MoveFile; FLogCaption := rsMsgLogMove; end; else raise Exception.Create('Invalid operation mode'); end; inherited Create; end; destructor TFileSystemOperationHelper.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; end; procedure TFileSystemOperationHelper.Initialize; begin SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); // Create destination path if it doesn't exist. if not mbDirectoryExists(FRootTargetPath) then if not mbForceDirectory(FRootTargetPath) then Exit; // do error end; procedure TFileSystemOperationHelper.ProcessTree(aFileTree: TFileTree); var aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFileTree.SubNodesCount = 1) and FRenamingFiles then begin aFile := aFileTree.SubNodes[0].TheFile; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; FRootDir := aFile; end; end; ProcessNode(aFileTree, FRootTargetPath); end; // ---------------------------------------------------------------------------- function TFileSystemOperationHelper.CopyFile( SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; var SourceFileStream, TargetFileStream: TFileStreamEx; iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; NewPos: Int64; DeleteFile: Boolean = False; procedure OpenSourceFile; var bRetry: Boolean = True; begin while bRetry do begin bRetry := False; SourceFileStream.Free; // In case stream was created but 'while' loop run again try SourceFileStream := TFileStreamEx.Create(SourceFile.FullPath, fmOpenRead or fmShareDenyNone); except on EFOpenError do begin if not FSkipOpenForReadingError then begin case AskQuestion(rsMsgErrEOpen + ': ' + SourceFile.FullPath, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourAbort: AbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipOpenForReadingError := True; end; end; end; end; end; if not Assigned(SourceFileStream) and (log_errors in gLogOptions) then logWrite(FOperationThread, rsMsgLogError + rsMsgErrEOpen + ': ' + SourceFile.FullPath, lmtError, True); end; procedure OpenTargetFile; function GetMsgByMode: String; begin if Mode in [fsohcmAppend, fsohcmResume] then Result := rsMsgErrEOpen else Result := rsMsgErrECreate; end; function HandleError: Boolean; begin Result := False; if not FSkipOpenForWritingError then begin case AskQuestion(GetMsgByMode + ': ' + TargetFileName, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: Result := True; fsourAbort: AbortOperation; fsourSkip: ; // Do nothing fsourSkipAll: FSkipOpenForWritingError := True; end; end; end; var bRetry: Boolean = True; begin while bRetry do begin bRetry := False; try TargetFileStream.Free; // In case stream was created but 'while' loop run again case Mode of fsohcmAppend: begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmOpenReadWrite); TargetFileStream.Seek(0, soFromEnd); // seek to end TotalBytesToRead := SourceFileStream.Size; end; fsohcmResume: begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmOpenReadWrite); NewPos := TargetFileStream.Seek(0, soFromEnd); SourceFileStream.Seek(NewPos, soFromBeginning); TotalBytesToRead := SourceFileStream.Size - NewPos; end else begin TargetFileStream := TFileStreamEx.Create(TargetFileName, fmCreate); TotalBytesToRead := SourceFileStream.Size; if FReserveSpace then begin TargetFileStream.Size:= SourceFileStream.Size; TargetFileStream.Seek(0, fsFromBeginning); end; end; end; except on EFOpenError do bRetry := HandleError; on EFCreateError do bRetry := HandleError; end; end; if not Assigned(TargetFileStream) and (log_errors in gLogOptions) then logWrite(FOperationThread, rsMsgLogError + GetMsgByMode + ': ' + TargetFileName, lmtError, True); end; begin Result := False; { Check disk free space } if FCheckFreeSpace = True then begin GetDiskFreeSpace(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize); if SourceFile.Size > iFreeDiskSize then begin if FSkipAllBigFiles = True then begin Exit; end else begin case AskQuestion('', rsMsgNoFreeSpaceCont, [fsourYes, fsourAll, fsourNo, fsourSkip, fsourSkipAll], fsourYes, fsourNo) of fsourNo: AbortOperation; fsourSkip: Exit; fsourAll: FCheckFreeSpace := False; fsourSkipAll: begin FSkipAllBigFiles := True; Exit; end; end; end; end; end; BytesToRead := FBufferSize; SourceFileStream := nil; TargetFileStream := nil; // for safety exception handling try try OpenSourceFile; if not Assigned(SourceFileStream) then Exit; OpenTargetFile; if not Assigned(TargetFileStream) then Exit; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := SourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := TargetFileStream.Write((FBuffer + BytesWritten)^, BytesRead); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesRead then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(ExtractFilePath(TargetFileName), iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo, fsourSkip], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: AbortOperation; fsourSkip: Exit; end; // case end else begin DeleteFile := FSkipWriteError and not (Mode in [fsohcmAppend, fsohcmResume]); if FSkipWriteError then Exit; case AskQuestion(rsMsgErrEWrite + ' ' + TargetFileName + ':', E.Message, [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: AbortOperation; fsourSkip: Exit; fsourSkipAll: begin DeleteFile := not (Mode in [fsohcmAppend, fsohcmResume]); FSkipWriteError := True; Exit; end; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin DeleteFile := FSkipReadError and not (Mode in [fsohcmAppend, fsohcmResume]); if FSkipReadError then Exit; case AskQuestion(rsMsgErrERead + ' ' + SourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: AbortOperation; fsourSkip: Exit; fsourSkipAll: begin DeleteFile := not (Mode in [fsohcmAppend, fsohcmResume]); FSkipReadError := True; Exit; end; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end;//while Result:= True; except on EFileSourceOperationAborting do begin // Always delete file when user aborted operation. DeleteFile := True; raise; end; end; finally FreeAndNil(SourceFileStream); if Assigned(TargetFileStream) then begin FreeAndNil(TargetFileStream); if TotalBytesToRead > 0 then begin // There was some error, because not all of the file has been copied. // Ask if delete the not completed target file. if DeleteFile or (AskQuestion('', rsMsgDeletePartiallyCopied, [fsourYes, fsourNo], fsourYes, fsourNo) = fsourYes) then begin mbDeleteFile(TargetFileName); end; end; end; end; CopyProperties(SourceFile.FullPath, TargetFileName); end; procedure TFileSystemOperationHelper.CopyProperties(SourceFileName, TargetFileName: String); var CopyAttrResult: TCopyAttributesOptions; Msg: String = ''; begin if FCopyAttributesOptions <> [] then begin CopyAttrResult := mbFileCopyAttr(SourceFileName, TargetFileName, FCopyAttributesOptions); if CopyAttrResult <> [] then begin case FSetPropertyError of fsoospeIgnoreErrors: ; // Do nothing fsoospeDontSet: FCopyAttributesOptions := FCopyAttributesOptions - CopyAttrResult; fsoospeNone: begin if caoCopyAttributes in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetAttribute, [SourceFileName]), LineEnding); if caoCopyTime in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetDateTime, [SourceFileName]), LineEnding); if caoCopyOwnership in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetOwnership, [SourceFileName]), LineEnding); if caoCopyPermissions in CopyAttrResult then AddStrWithSep(Msg, Format(rsMsgErrSetPermissions, [SourceFileName]), LineEnding); case AskQuestion(Msg, '', [fsourSkip, fsourSkipAll, fsourIgnoreAll, fsourAbort], fsourSkip, fsourIgnoreAll) of //fsourSkip: do nothing fsourSkipAll: // Don't set properties that failed to be set anymore. FCopyAttributesOptions := FCopyAttributesOptions - CopyAttrResult; fsourIgnoreAll: FSetPropertyError := fsoospeIgnoreErrors; fsourAbort: AbortOperation; end; end else Assert(False, 'Invalid TFileSourceOperationOptionSetPropertyError value.'); end; end; end; end; function TFileSystemOperationHelper.MoveFile(SourceFile: TFile; TargetFileName: String; Mode: TFileSystemOperationHelperCopyMode): Boolean; begin if (Mode in [fsohcmAppend, fsohcmResume]) or (not mbRenameFile(SourceFile.FullPath, TargetFileName)) then begin if CopyFile(SourceFile, TargetFileName, Mode) then begin if FileIsReadOnly(SourceFile.Attributes) then mbFileSetReadOnly(SourceFile.FullPath, False); Result := mbDeleteFile(SourceFile.FullPath) end else Result := False; end else Result := True; end; function TFileSystemOperationHelper.ProcessNode(aFileTreeNode: TFileTreeNode; CurrentTargetPath: String): Boolean; var aFile: TFile; ProcessedOk: Boolean; TargetName: String; CurrentFileIndex: Integer; CurrentSubNode: TFileTreeNode; begin Result := True; for CurrentFileIndex := 0 to aFileTreeNode.SubNodesCount - 1 do begin CurrentSubNode := aFileTreeNode.SubNodes[CurrentFileIndex]; aFile := CurrentSubNode.TheFile; if FRenamingRootDir and (aFile = FRootDir) then TargetName := CurrentTargetPath + FRenameMask else if FRenamingFiles then TargetName := CurrentTargetPath + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask) else TargetName := CurrentTargetPath + aFile.Name; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTo := TargetName; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Check if moving to the same file. if mbSameFile(TargetName, aFile.FullPath) then begin if (FMode = fsohmCopy) and FAutoRenameItSelf then TargetName := GetNextCopyName(TargetName) else case AskQuestion(Format(rsMsgCanNotCopyMoveItSelf, [TargetName]), '', [fsourAbort, fsourSkip], fsourAbort, fsourSkip) of fsourAbort: AbortOperation(); else begin Result := False; CountStatistics(CurrentSubNode); CheckOperationState; Continue; end; end; end; if aFile.IsDirectory then ProcessedOk := ProcessDirectory(CurrentSubNode, TargetName) else if aFile.IsLink then ProcessedOk := ProcessLink(CurrentSubNode, TargetName) else ProcessedOk := ProcessFile(CurrentSubNode, TargetName); if not ProcessedOk then Result := False; CheckOperationState; end; end; function TFileSystemOperationHelper.ProcessDirectory(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var bRemoveDirectory: Boolean; NodeData: TFileTreeNodeData; begin NodeData := aNode.Data as TFileTreeNodeData; // If some files will not be moved then source directory cannot be deleted. bRemoveDirectory := (FMode = fsohmMove) and (NodeData.SubnodesHaveExclusions = False); case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: begin Result := False; CountStatistics(aNode); end; fsoterDeleted, fsoterNotExists: begin // Try moving whole directory tree. It can be done only if we don't have // to process each subnode: if there are no links, or they're not being // processed, if the files are not being renamed or excluded. if (FMode = fsohmMove) and (not FRenamingFiles) and ((FCorrectSymlinks = False) or (NodeData.SubnodesHaveLinks = False)) and (NodeData.SubnodesHaveExclusions = False) and mbRenameFile(aNode.TheFile.FullPath, AbsoluteTargetFileName) then begin // Success. CountStatistics(aNode); Result := True; bRemoveDirectory := False; end else begin // Create target directory. if mbCreateDir(AbsoluteTargetFileName) then begin // Copy/Move all files inside. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); // Copy attributes after copy/move directory contents, because this operation can change date/time CopyProperties(aNode.TheFile.FullPath, AbsoluteTargetFileName); end else begin // Error - all files inside not copied/moved. ShowError(rsMsgLogError + Format(rsMsgErrForceDir, [AbsoluteTargetFileName])); Result := False; CountStatistics(aNode); end; end; end; fsoterAddToTarget: begin // Don't create existing directory, but copy files into it. Result := ProcessNode(aNode, IncludeTrailingPathDelimiter(AbsoluteTargetFileName)); end; else raise Exception.Create('Invalid TargetExists result'); end; if bRemoveDirectory and Result then begin if FileIsReadOnly(aNode.TheFile.Attributes) then mbFileSetReadOnly(aNode.TheFile.FullPath, False); mbRemoveDir(aNode.TheFile.FullPath); end; end; function TFileSystemOperationHelper.ProcessLink(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var LinkTarget, CorrectedLink: String; aFile: TFile; aSubNode: TFileTreeNode; begin Result := True; // If link was followed then it's target is stored in a subnode. if aNode.SubNodesCount > 0 then begin aSubNode := aNode.SubNodes[0]; //DCDebug('Link ' + aFile.FullPath + ' followed to ' // + (aSubNode.TheFile as TFileSystemFile).FullPath // + ' will be copied as: ' + AbsoluteTargetFileName); if aSubNode.TheFile.AttributesProperty.IsDirectory then Result := ProcessDirectory(aSubNode, AbsoluteTargetFileName) else Result := ProcessFile(aSubNode, AbsoluteTargetFileName); Exit; // exit without counting statistics, because they are not counted for followed links end; aFile := aNode.TheFile; case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: Result := False; fsoterDeleted, fsoterNotExists: begin if (FMode <> fsohmMove) or (not mbRenameFile(aFile.FullPath, AbsoluteTargetFileName)) then begin LinkTarget := ReadSymLink(aFile.FullPath); // use sLinkTo ? if LinkTarget <> '' then begin if FCorrectSymlinks then begin CorrectedLink := GetAbsoluteFileName(aFile.Path, LinkTarget); // If the link was relative - make also the corrected link relative. if GetPathType(LinkTarget) = ptRelative then LinkTarget := ExtractRelativepath(AbsoluteTargetFileName, CorrectedLink) else LinkTarget := CorrectedLink; end; if CreateSymlink(LinkTarget, AbsoluteTargetFileName) then begin CopyProperties(aFile.FullPath, AbsoluteTargetFileName); end else begin ShowError(rsMsgLogError + Format(rsMsgLogSymLink, [AbsoluteTargetFileName])); Result := False; end; end else begin DCDebug('Error reading link'); Result := False; end; end; end; fsoterAddToTarget: raise Exception.Create('Cannot add to link'); else raise Exception.Create('Invalid TargetExists result'); end; Inc(FStatistics.DoneFiles); UpdateStatistics(FStatistics); end; function TFileSystemOperationHelper.ProcessFile(aNode: TFileTreeNode; AbsoluteTargetFileName: String): Boolean; var OldDoneBytes: Int64; // for if there was an error begin // If there will be an error the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; // Skip descript.ion, it will be processed below if gProcessComments and (FStatistics.TotalFiles > 1) and mbCompareFileNames(aNode.TheFile.Name, DESCRIPT_ION) then Result:= True else begin Result:= False; if (aNode.TheFile.Size > GetDiskMaxFileSize(ExtractFileDir(AbsoluteTargetFileName))) then case AskQuestion('', Format(rsMsgFileSizeTooBig, [aNode.TheFile.Name]), [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := False; else AbortOperation; end else case TargetExists(aNode, AbsoluteTargetFileName) of fsoterSkip: Result := False; fsoterDeleted, fsoterNotExists: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmDefault); fsoterAddToTarget: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmAppend); fsoterResume: Result := MoveOrCopy(aNode.TheFile, AbsoluteTargetFileName, fsohcmResume); else raise Exception.Create('Invalid TargetExists result'); end; end; if Result = True then begin LogMessage(Format(rsMsgLogSuccess+FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtSuccess); // process comments if need if gProcessComments then begin case FMode of fsohmCopy: FDescription.CopyDescription(aNode.TheFile.FullPath, AbsoluteTargetFileName); fsohmMove: FDescription.MoveDescription(aNode.TheFile.FullPath, AbsoluteTargetFileName); end; end; end else begin LogMessage(Format(rsMsgLogError+FLogCaption, [aNode.TheFile.FullPath + ' -> ' + AbsoluteTargetFileName]), [log_cp_mv_ln], lmtError); end; with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aNode.TheFile.Size; UpdateStatistics(FStatistics); end; end; // ---------------------------------------------------------------------------- function TFileSystemOperationHelper.TargetExists(aNode: TFileTreeNode; var AbsoluteTargetFileName: String): TFileSystemOperationTargetExistsResult; var Attrs, LinkTargetAttrs: TFileAttrs; SourceFile: TFile; function DoDirectoryExists(AllowCopyInto: Boolean; AllowDeleteDirectory: Boolean): TFileSystemOperationTargetExistsResult; begin case DirExists(SourceFile, AbsoluteTargetFileName, AllowCopyInto, AllowDeleteDirectory) of fsoodeSkip: Exit(fsoterSkip); fsoodeDelete: begin if FPS_ISLNK(Attrs) then mbDeleteFile(AbsoluteTargetFileName) else DelTree(AbsoluteTargetFileName); Exit(fsoterDeleted); end; fsoodeCopyInto: begin Exit(fsoterAddToTarget); end; else raise Exception.Create('Invalid dir exists option'); end; end; function DoFileExists(AllowAppend: Boolean): TFileSystemOperationTargetExistsResult; begin case FileExists(SourceFile, AbsoluteTargetFileName, AllowAppend) of fsoofeSkip: Exit(fsoterSkip); fsoofeOverwrite: begin if FileIsReadOnly(Attrs) then mbFileSetReadOnly(AbsoluteTargetFileName, False); if FPS_ISLNK(Attrs) or (FMode = fsohmMove) then begin mbDeleteFile(AbsoluteTargetFileName); Exit(fsoterDeleted); end; Exit(fsoterNotExists); end; fsoofeAppend: begin Exit(fsoterAddToTarget); end; fsoofeResume: begin Exit(fsoterResume); end; fsoofeAutoRenameSource: begin Exit(fsoterNotExists); end else raise Exception.Create('Invalid file exists option'); end; end; function IsLinkFollowed: Boolean; begin // If link was followed then it's target is stored in a subnode. Result := SourceFile.AttributesProperty.IsLink and (aNode.SubNodesCount > 0); end; function AllowAppendFile: Boolean; begin Result := (not SourceFile.AttributesProperty.IsDirectory) and (not FReserveSpace) and ((not SourceFile.AttributesProperty.IsLink) or (IsLinkFollowed and (not aNode.SubNodes[0].TheFile.AttributesProperty.IsDirectory))); end; function AllowCopyInto: Boolean; begin Result := SourceFile.AttributesProperty.IsDirectory or (IsLinkFollowed and aNode.SubNodes[0].TheFile.IsDirectory); end; function AllowDeleteDirectory: Boolean; begin Result := (not (SourceFile.AttributesProperty.IsDirectory or (IsLinkFollowed and aNode.SubNodes[0].TheFile.IsDirectory))) or gOverwriteFolder; end; begin Attrs := mbFileGetAttr(AbsoluteTargetFileName); if Attrs <> faInvalidAttributes then begin SourceFile := aNode.TheFile; // Target exists - ask user what to do. if FPS_ISDIR(Attrs) then begin Result := DoDirectoryExists(AllowCopyInto, AllowDeleteDirectory) end else if FPS_ISLNK(Attrs) then begin // Check if target of the link exists. LinkTargetAttrs := mbFileGetAttrNoLinks(AbsoluteTargetFileName); if (LinkTargetAttrs <> faInvalidAttributes) then begin if FPS_ISDIR(LinkTargetAttrs) then Result := DoDirectoryExists(AllowCopyInto, AllowDeleteDirectory) else Result := DoFileExists(AllowAppendFile); end else // Target of link doesn't exist. Treat link as file and don't allow append. Result := DoFileExists(False); end else // Existing target is a file. Result := DoFileExists(AllowAppendFile); end else Result := fsoterNotExists; end; function TFileSystemOperationHelper.DirExists( aFile: TFile; AbsoluteTargetFileName: String; AllowCopyInto: Boolean; AllowDelete: Boolean): TFileSourceOperationOptionDirectoryExists; var PossibleResponses: array of TFileSourceOperationUIResponse = nil; DefaultOkResponse: TFileSourceOperationUIResponse; procedure AddResponse(Response: TFileSourceOperationUIResponse); begin SetLength(PossibleResponses, Length(PossibleResponses) + 1); PossibleResponses[Length(PossibleResponses) - 1] := Response; end; begin case FDirExistsOption of fsoodeNone: begin if AllowDelete then AddResponse(fsourOverwrite); if AllowCopyInto then begin AddResponse(fsourCopyInto); AddResponse(fsourCopyIntoAll); end; AddResponse(fsourSkip); if AllowDelete then AddResponse(fsourOverwriteAll); AddResponse(fsourSkipAll); AddResponse(fsourCancel); if AllowCopyInto then DefaultOkResponse := fsourCopyInto else if AllowDelete then DefaultOkResponse := fsourOverwrite else DefaultOkResponse := fsourSkip; case AskQuestion(Format(rsMsgFolderExistsRwrt, [AbsoluteTargetFileName]), '', PossibleResponses, DefaultOkResponse, fsourSkip) of fsourOverwrite: Result := fsoodeDelete; fsourCopyInto: Result := fsoodeCopyInto; fsourCopyIntoAll: begin FDirExistsOption := fsoodeCopyInto; Result := fsoodeCopyInto; end; fsourSkip: Result := fsoodeSkip; fsourOverwriteAll: begin FDirExistsOption := fsoodeDelete; Result := fsoodeDelete; end; fsourSkipAll: begin FDirExistsOption := fsoodeSkip; Result := fsoodeSkip; end; fsourNone, fsourCancel: AbortOperation; end; end; else Result := FDirExistsOption; end; end; function TFileSystemOperationHelper.FileExists(aFile: TFile; var AbsoluteTargetFileName: String; AllowAppend: Boolean ): TFileSourceOperationOptionFileExists; const Responses: array[0..11] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourResume, fsourOverwriteOlder, fsourCancel, fsourAppend, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource); ResponsesNoAppend: array[0..9] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourRenameSource, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel, fsourOverwriteLarger, fsourAutoRenameSource); var Answer: Boolean; Message: String; PossibleResponses: array of TFileSourceOperationUIResponse; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aFile.ModificationTime > FileTimeToDateTime(mbFileAge(AbsoluteTargetFileName)) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: repeat Answer := True; case AllowAppend of True : PossibleResponses := Responses; False: PossibleResponses := ResponsesNoAppend; end; Message:= FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime); case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourAppend: begin //FFileExistsOption := fsoofeAppend; - for AppendAll Result := fsoofeAppend; end; fsourResume: begin Result := fsoofeResume; end; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourAutoRenameSource: begin Result:= fsoofeAutoRenameSource; FFileExistsOption:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName); end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(FOperationThread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: AbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; fsoofeAutoRenameSource: begin Result:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName); end; else Result := FFileExistsOption; end; end; procedure TFileSystemOperationHelper.ShowError(sMessage: String); begin if gSkipFileOpError then begin if log_errors in gLogOptions then logWrite(FOperationThread, sMessage, lmtError, True); end else begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) <> fsourSkip then begin AbortOperation; end; end; end; procedure TFileSystemOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperationThread, sMessage, logMsgType); end; end; procedure TFileSystemOperationHelper.CountStatistics(aNode: TFileTreeNode); procedure CountNodeStatistics(aNode: TFileTreeNode); var aFileAttrs: TFileAttributesProperty; i: Integer; begin aFileAttrs := aNode.TheFile.AttributesProperty; with FStatistics do begin if aFileAttrs.IsDirectory then begin // No statistics for directory. // Go through subdirectories. for i := 0 to aNode.SubNodesCount - 1 do CountNodeStatistics(aNode.SubNodes[i]); end else if aFileAttrs.IsLink then begin // Count only not-followed links. if aNode.SubNodesCount = 0 then DoneFiles := DoneFiles + 1 else // Count target of link. CountNodeStatistics(aNode.SubNodes[0]); end else begin // Count files. DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aNode.TheFile.Size; end; end; end; begin CountNodeStatistics(aNode); UpdateStatistics(FStatistics); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemdeleteoperation.pas���������������������������0000644�0001750�0000144�00000023605�12457764250�026217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uDescr, uGlobs, uLog; type { TFileSystemDeleteOperation } TFileSystemDeleteOperation = class(TFileSourceDeleteOperation) private FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics FDescription: TDescription; // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FRecycle: Boolean; FDeleteReadOnly, FDeleteDirectly: TFileSourceOperationOptionGeneral; procedure DeleteSubDirectory(const aFile: TFile); protected procedure ProcessFile(aFile: TFile); procedure ProcessList(aFiles: TFiles); function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; // For delete to trash property Recycle : boolean read FRecycle write FRecycle default false; property DeleteReadOnly: TFileSourceOperationOptionGeneral read FDeleteReadOnly write FDeleteReadOnly; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; property SkipErrors: Boolean read FSkipErrors write FSkipErrors; end; implementation uses DCOSUtils, uLng, uFileSystemUtil, uTrash; constructor TFileSystemDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := gSkipFileOpError; FRecycle := False; FDeleteReadOnly := fsoogNone; FDeleteDirectly:= fsoogNone; if gProcessComments then FDescription := TDescription.Create(True); inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TFileSystemDeleteOperation.Destroy; begin inherited Destroy; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; if not FRecycle then begin FreeAndNil(FFullFilesTreeToDelete); end; end; procedure TFileSystemDeleteOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if FRecycle then begin FFullFilesTreeToDelete:= FilesToDelete; FStatistics.TotalFiles:= FFullFilesTreeToDelete.Count; end else begin FillAndCount(FilesToDelete, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; if gProcessComments then FDescription.Clear; end; procedure TFileSystemDeleteOperation.MainExecute; begin ProcessList(FFullFilesTreeToDelete); end; procedure TFileSystemDeleteOperation.Finalize; begin end; procedure TFileSystemDeleteOperation.DeleteSubDirectory(const aFile: TFile); var RootFiles: TFiles = nil; SubFiles: TFiles = nil; FilesCount, BytesCount: Int64; begin RootFiles := TFiles.Create(aFile.Path); try RootFiles.Add(aFile.Clone); // Only count statistics for subfiles because statistics for the root dir // have already been counted. FillAndCount(RootFiles, True, True, SubFiles, FilesCount, BytesCount); FStatistics.TotalFiles := FStatistics.TotalFiles + FilesCount; FStatistics.TotalBytes := FStatistics.TotalBytes + BytesCount; // Only now insert root directory. SubFiles.Insert(aFile.Clone, 0); // This function will only be called if deleting to trash failed // so we can assume Recycle is True. Turn off temporarily as we delete this subdirectory. FRecycle := False; ProcessList(SubFiles); finally RootFiles.Free; SubFiles.Free; FRecycle := True; end; end; procedure TFileSystemDeleteOperation.ProcessFile(aFile: TFile); var FileName: String; bRetry: Boolean; RemoveDirectly: TFileSourceOperationOptionGeneral = fsoogNone; sMessage, sQuestion: String; logOptions: TLogOptions; DeleteResult: Boolean; begin FileName := aFile.FullPath; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [FileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll], fsourYes, fsourSkip) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; end; fsoogNo: Exit; end; end; repeat bRetry := False; if (FRecycle = False) then begin if FileIsReadOnly(aFile.Attributes) then mbFileSetReadOnly(FileName, False); if aFile.IsDirectory then // directory begin DeleteResult := mbRemoveDir(FileName); end else begin // files and other stuff DeleteResult := mbDeleteFile(FileName); end; end else begin // Delete to trash (one function for file and folder) DeleteResult:= FileTrashUtf8(FileName); if not DeleteResult then begin case FDeleteDirectly of fsoogNone: case AskQuestion(Format(rsMsgDelToTrashForce, [FileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll, fsourAbort], fsourYes, fsourSkip) of fsourYes: RemoveDirectly:= fsoogYes; fsourAll: begin FDeleteDirectly := fsoogYes; RemoveDirectly:= fsoogYes; end; fsourSkip: RemoveDirectly:= fsoogNo; fsourSkipAll: begin FDeleteDirectly := fsoogNo; RemoveDirectly:= fsoogNo; end; fsourAbort: RaiseAbortOperation; end; fsoogYes: RemoveDirectly:= fsoogYes; fsoogNo: RemoveDirectly:= fsoogNo; end; if RemoveDirectly = fsoogYes then begin if aFile.IsLinkToDirectory then begin DeleteResult := mbRemoveDir(FileName); end else if aFile.IsDirectory then // directory begin DeleteSubDirectory(aFile); // This directory has already been processed. Exit; end else // files and other stuff begin DeleteResult := mbDeleteFile(FileName); end; end; end; end; if DeleteResult then begin // success // process comments if need if gProcessComments then FDescription.DeleteDescription(FileName); if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [FileName]), [log_dir_op, log_delete], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_delete], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_dir_op, log_delete]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [FileName]); sQuestion := Format(rsMsgCannotDeleteDirectory, [FileName]); end else begin logOptions := [log_delete]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end; if FSkipErrors or (RemoveDirectly = fsoogNo) then LogMessage(sMessage, logOptions, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; procedure TFileSystemDeleteOperation.ProcessList(aFiles: TFiles); var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := aFiles.Count - 1 downto 0 do begin aFile := aFiles[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; end; UpdateStatistics(FStatistics); CheckOperationState; end; end; function TFileSystemDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if FSkipErrors then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TFileSystemDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ���������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lrt������������������0000644�0001750�0000144�00000002607�12563163061�030217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION=When &file exists TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLDIRECTORYEXISTS.CAPTION=When dir&ectory exists TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLSETPROPERTYERROR.CAPTION=When ca&nnot set property TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CMBSETPROPERTYERROR.HINT=What to do when cannot set file time, attributes, etc. TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCHECKFREESPACE.CAPTION=C&heck free space TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBFOLLOWLINKS.CAPTION=Fo&llow links TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCORRECTLINKS.CAPTION=Correct lin&ks TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYATTRIBUTES.CAPTION=Cop&y attributes TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION=Drop readonly fla&g TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYTIME.CAPTION=Copy d&ate/time TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYOWNERSHIP.CAPTION=Copy o&wnership TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBRESERVESPACE.CAPTION=&Reserve space TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBCOPYPERMISSIONS.CAPTION=Copy &permissions TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.GBFILETEMPLATE.CAPTION=Use file template TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.BTNSEARCHTEMPLATE.HINT=Choose template... TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLTEMPLATENAME.CAPTION=<no template> TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBEXCLUDEEMPTYDIRECTORIES.CAPTION=E&xclude empty directories �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemfilesource.pas��������������������������������0000644�0001750�0000144�00000073604�12646776232�025203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uLocalFileSource, uFileSource, uFileSourceProperty, uFileProperty, uFile, uDescr, DCBasicTypes, DCStrUtils, uFindEx ; type {en Real file system. } IFileSystemFileSource = interface(ILocalFileSource) ['{59EDCF45-F151-4AE2-9DCE-3586E6191496}'] end; { TFileSystemFileSource } TFileSystemFileSource = class(TLocalFileSource, IFileSystemFileSource) private FDescr: TDescription; protected function GetCurrentWorkingDirectory: String; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public constructor Create; override; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; pSearchRecord: PSearchRecEx): TFile; overload; {en Creates a file object using an existing file/directory as a template. All the properties will reflect the existing file. @param(FilePath denotes absolute path to a file to use as a template.) } class function CreateFileFromFile(const aFilePath: String): TFile; {en Creates file list from a list of template files. @param(APath Path to which the files names are relative.) @param(FileNamesList A list of absolute paths to files.) @param(OmitNotExisting If @true then silently omits not existing files. If @false an exception is raised when file not exists.) } class function CreateFilesFromFileList(const APath: String; const FileNamesList: TStringList; OmitNotExisting: Boolean = False): TFiles; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); override; class function GetFileSource: IFileSystemFileSource; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetProperties: TFileSourceProperties; override; function IsPathAtRoot(Path: String): Boolean; override; function GetParentDir(sPath : String): String; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetPathType(sPath : String): TPathType; override; function CreateDirectory(const Path: String): Boolean; override; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; override; function CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; // ------------------------------------------------------ property Description: TDescription read FDescr; end; { TFileSystemFileSourceConnection } TFileSystemFileSourceConnection = class(TFileSourceConnection) protected procedure SetCurrentPath(NewPath: String); override; end; implementation uses uOSUtils, DCOSUtils, DCDateTimeUtils, uGlobs, uGlobsPaths, uLog, uLng, {$IFDEF MSWINDOWS} uMyWindows, Windows, {$ENDIF} {$IFDEF UNIX} BaseUnix, uUsersGroups, FileUtil, uMyUnix, {$ENDIF} uFileSystemListOperation, uFileSystemCopyOperation, uFileSystemMoveOperation, uFileSystemDeleteOperation, uFileSystemWipeOperation, uFileSystemSplitOperation, uFileSystemCombineOperation, uFileSystemCreateDirectoryOperation, uFileSystemExecuteOperation, uFileSystemCalcChecksumOperation, uFileSystemCalcStatisticsOperation, uFileSystemSetFilePropertyOperation; {$IF DEFINED(MSWINDOWS)} procedure SetOwner(AFile: TFile); var sUser, sGroup: String; begin with AFile do begin OwnerProperty := TFileOwnerProperty.Create; if GetFileOwner(FullPath, sUser, sGroup) then begin OwnerProperty.OwnerStr := sUser; OwnerProperty.GroupStr := sGroup; end; end; end; procedure FillFromFindData( AFile: TFile; AFilePath: String; pFindData: PWIN32FINDDATAW); var LinkAttrs: TFileAttrs; begin with AFile do begin AttributesProperty := TNtfsFileAttributesProperty.Create( pFindData^.dwFileAttributes); SizeProperty := TFileSizeProperty.Create( QWord(pFindData^.nFileSizeHigh) shl 32 + pFindData^.nFileSizeLow); ModificationTimeProperty := TFileModificationDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftLastWriteTime)); CreationTimeProperty := TFileCreationDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftCreationTime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( WinFileTimeToDateTime(pFindData^.ftLastAccessTime)); LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(pFindData^.dwFileAttributes) then begin LinkAttrs := mbFileGetAttrNoLinks(AFilePath); LinkProperty.LinkTo := ReadSymLink(AFilePath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs) else // On Windows links to directories are marked with Directory flag on the link. LinkProperty.IsLinkToDirectory := fpS_ISDIR(pFindData^.dwFileAttributes); end; end; end; {$ELSEIF DEFINED(UNIX)} procedure FillFromStat( AFile: TFile; AFilePath: String; pStatInfo: BaseUnix.PStat); var LinkStatInfo: BaseUnix.Stat; begin with AFile do begin AttributesProperty := TUnixFileAttributesProperty.Create(pStatInfo^.st_mode); if fpS_ISDIR(pStatInfo^.st_mode) then // On Unix a size for directory entry on filesystem is returned in StatInfo. // We don't want to use it. SizeProperty := TFileSizeProperty.Create(0) else SizeProperty := TFileSizeProperty.Create(Int64(pStatInfo^.st_size)); ModificationTimeProperty := TFileModificationDateTimeProperty.Create( FileTimeToDateTime(pStatInfo^.st_mtime)); Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTime(pStatInfo^.st_ctime)); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTime(pStatInfo^.st_atime)); LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(pStatInfo^.st_mode) then begin LinkProperty.LinkTo := ReadSymLink(AFilePath); // Stat (as opposed to Lstat) will take info of the file that the link points to (recursively). LinkProperty.IsValid := fpStat(PChar(UTF8ToSys(AFilePath)), LinkStatInfo) = 0; if LinkProperty.IsValid then begin LinkProperty.IsLinkToDirectory := FPS_ISDIR(LinkStatInfo.st_mode); end; end; end; end; {$ELSE} procedure FillFromSearchRecord( AFile: TFile; AFilePath: String; pSearchRecord: PSearchRecEx; PropertiesToSet: TFilePropertiesTypes = []); begin with AFile do begin AttributesProperty := TFileAttributesProperty.Create(pSearchRecord^.Attr); SizeProperty := TFileSizeProperty.Create(pSearchRecord^.Size); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(pSearchRecord^.Time); CreationTimeProperty := TFileCreationDateTimeProperty.Create(pSearchRecord^.Time); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(pSearchRecord^.Time); LinkProperty := TFileLinkProperty.Create; end; end; {$ENDIF} // ---------------------------------------------------------------------------- constructor TFileSystemFileSource.Create; begin inherited Create; FDescr := TDescription.Create(False); FOperationsClasses[fsoList] := TFileSystemListOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TFileSystemCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TFileSystemCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TFileSystemCopyOutOperation.GetOperationClass; FOperationsClasses[fsoMove] := TFileSystemMoveOperation.GetOperationClass; FOperationsClasses[fsoDelete] := TFileSystemDeleteOperation.GetOperationClass; FOperationsClasses[fsoWipe] := TFileSystemWipeOperation.GetOperationClass; FOperationsClasses[fsoCombine] := TFileSystemCombineOperation.GetOperationClass; FOperationsClasses[fsoCreateDirectory] := TFileSystemCreateDirectoryOperation.GetOperationClass; FOperationsClasses[fsoCalcChecksum] := TFileSystemCalcChecksumOperation.GetOperationClass; FOperationsClasses[fsoCalcStatistics] := TFileSystemCalcStatisticsOperation.GetOperationClass; FOperationsClasses[fsoSetFileProperty] := TFileSystemSetFilePropertyOperation.GetOperationClass; FOperationsClasses[fsoExecute] := TFileSystemExecuteOperation.GetOperationClass; end; destructor TFileSystemFileSource.Destroy; begin inherited Destroy; FDescr.Free; end; class function TFileSystemFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; class function TFileSystemFileSource.CreateFile(const APath: String; pSearchRecord: PSearchRecEx): TFile; begin Result := TFile.Create(APath); {$IF DEFINED(MSWINDOWS)} FillFromFindData(Result, APath + pSearchRecord^.Name, @(pSearchRecord^.FindData)); {$ELSEIF DEFINED(UNIX)} FillFromStat(Result, APath + pSearchRecord^.Name, @(PUnixFindData(pSearchRecord^.FindHandle)^.StatRec)); {$ELSE} FillFromSearchRecord(Result, APath + pSearchRecord^.Name, pSearchRecord); {$ENDIF} // Set name after assigning Attributes property, because it is used to get extension. Result.Name := pSearchRecord^.Name; end; class function TFileSystemFileSource.CreateFileFromFile(const aFilePath: String): TFile; var {$IF DEFINED(MSWINDOWS)} FindData: TWIN32FINDDATAW; FindHandle: THandle; {$ELSEIF DEFINED(UNIX)} StatInfo: BaseUnix.Stat; {$ELSE} SearchRecord: TSearchRecEx; FindResult: Longint; {$ENDIF} begin Result := nil; {$IF DEFINED(MSWINDOWS)} FindHandle := FindFirstFileW(PWideChar(UTF8Decode(aFilePath)), @FindData); if FindHandle = INVALID_HANDLE_VALUE then raise EFileNotFound.Create(aFilePath); Windows.FindClose(FindHandle); FindData.dwFileAttributes:= ExtractFileAttributes(FindData); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromFindData(Result, aFilePath, @FindData); {$ELSEIF DEFINED(UNIX)} if fpLStat(UTF8ToSys(AFilePath), StatInfo) = -1 then raise EFileNotFound.Create(aFilePath); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromStat(Result, aFilePath, @StatInfo); {$ELSE} FindResult := FindFirstEx(aFilePath, faAnyFile, SearchRecord); try if FindResult <> 0 then raise EFileNotFound.Create(aFilePath); Result := TFile.Create(ExtractFilePath(aFilePath)); FillFromSearchRecord(Result, aFilePath, @SearchRecord); finally FindCloseEx(SearchRecord); end; {$ENDIF} // Set name after assigning Attributes property, because it is used to get extension. Result.FullPath := aFilePath; end; class function TFileSystemFileSource.CreateFilesFromFileList( const APath: String; const FileNamesList: TStringList; OmitNotExisting: Boolean): TFiles; var i: Integer; begin Result := TFiles.Create(APath); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then begin for i := 0 to FileNamesList.Count - 1 do begin try Result.Add(CreateFileFromFile(FileNamesList[i])); except on EFileNotFound do if not OmitNotExisting then begin FreeAndNil(Result); raise; end; on Exception do begin FreeAndNil(Result); raise; end; end; end; end; end; procedure TFileSystemFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); var sFullPath: String; Attrs: TFileAttrs; AProps: TFilePropertiesTypes; {$IF DEFINED(UNIX)} StatInfo, LinkInfo: BaseUnix.Stat; //buffer for stat info {$ELSEIF DEFINED(MSWINDOWS)} FindData: TWIN32FINDDATAW; FindHandle: THandle; LinkAttrs: TFileAttrs; {$ELSE} SearchRec: TSearchRecEx; {$ENDIF} begin AProps := AFile.AssignedProperties; // Omit properties that are already assigned. PropertiesToSet := PropertiesToSet - AProps; if PropertiesToSet = [] then Exit; // Already have requested properties. // Assume that Name property is always present. sFullPath := AFile.FullPath; with AFile do begin {$IF DEFINED(MSWINDOWS)} // Check if need to get file info record. if ([fpAttributes, fpSize, fpModificationTime, fpCreationTime, fpLastAccessTime] * PropertiesToSet <> []) or ((fpLink in PropertiesToSet) and (not (fpAttributes in AProps))) then begin FindHandle := FindFirstFileW(PWideChar(UTF8Decode(sFullPath)), @FindData); if FindHandle = INVALID_HANDLE_VALUE then raise EFileNotFound.Create(sFullPath); Windows.FindClose(FindHandle); FindData.dwFileAttributes:= ExtractFileAttributes(FindData); if not (fpAttributes in AProps) then AttributesProperty := TNtfsFileAttributesProperty.Create( FindData.dwFileAttributes); if not (fpSize in AProps) then SizeProperty := TFileSizeProperty.Create( QWord(FindData.nFileSizeHigh) shl 32 + FindData.nFileSizeLow); if not (fpModificationTime in AProps) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftLastWriteTime)); if not (fpCreationTime in AProps) then CreationTimeProperty := TFileCreationDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftCreationTime)); if not (fpLastAccessTime in AProps) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( WinFileTimeToDateTime(FindData.ftLastAccessTime)); end; if fpLink in PropertiesToSet then begin Attrs := Attributes; LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(Attrs) then begin LinkAttrs := mbFileGetAttrNoLinks(sFullPath); LinkProperty.LinkTo := ReadSymLink(sFullPath); LinkProperty.IsValid := LinkAttrs <> faInvalidAttributes; if LinkProperty.IsValid then LinkProperty.IsLinkToDirectory := fpS_ISDIR(LinkAttrs) else // On Windows links to directories are marked with Directory flag on the link. LinkProperty.IsLinkToDirectory := fpS_ISDIR(Attrs); end; end; if fpOwner in PropertiesToSet then begin SetOwner(AFile); end; if fpType in PropertiesToSet then begin TypeProperty := TFileTypeProperty.Create; TypeProperty.Value := GetFileDescription(sFullPath); end; if fpCompressedSize in PropertiesToSet then begin CompressedSizeProperty := TFileCompressedSizeProperty.Create; CompressedSizeProperty.Value := mbGetCompressedFileSize(sFullPath); end; {$ELSEIF DEFINED(UNIX)} if ([fpAttributes, fpSize, fpModificationTime, fpChangeTime, fpLastAccessTime, fpOwner] * PropertiesToSet <> []) or ((uFileProperty.fpLink in PropertiesToSet) and (not (fpAttributes in AssignedProperties))) then begin if fpLstat(UTF8ToSys(sFullPath), StatInfo) = -1 then raise EFileNotFound.Create(sFullPath); if not (fpAttributes in AssignedProperties) then AttributesProperty := TUnixFileAttributesProperty.Create(StatInfo.st_mode); if not (fpSize in AssignedProperties) then begin if fpS_ISDIR(StatInfo.st_mode) then // On Unix a size for directory entry on filesystem is returned in StatInfo. // We don't want to use it. SizeProperty := TFileSizeProperty.Create(0) else SizeProperty := TFileSizeProperty.Create(Int64(StatInfo.st_size)); end; if not (fpModificationTime in AssignedProperties) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create( FileTimeToDateTime(StatInfo.st_mtime)); if not (fpChangeTime in AssignedProperties) then Properties[fpChangeTime] := TFileChangeDateTimeProperty.Create( FileTimeToDateTime(StatInfo.st_ctime)); if not (fpLastAccessTime in AssignedProperties) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create( FileTimeToDateTime(StatInfo.st_atime)); end; if uFileProperty.fpLink in PropertiesToSet then begin Attrs := Attributes; LinkProperty := TFileLinkProperty.Create; if fpS_ISLNK(Attrs) then begin LinkProperty.LinkTo := ReadSymLink(sFullPath); // Stat (as opposed to Lstat) will take info of the file that the link points to (recursively). LinkProperty.IsValid := fpStat(PChar(UTF8ToSys(sFullPath)), LinkInfo) = 0; if LinkProperty.IsValid then begin LinkProperty.IsLinkToDirectory := FPS_ISDIR(LinkInfo.st_mode); end; end; end; if fpOwner in PropertiesToSet then begin OwnerProperty := TFileOwnerProperty.Create; OwnerProperty.Owner := StatInfo.st_uid; OwnerProperty.Group := StatInfo.st_gid; OwnerProperty.OwnerStr := UIDToStr(StatInfo.st_uid); OwnerProperty.GroupStr := GIDToStr(StatInfo.st_gid); end; if fpType in PropertiesToSet then begin TypeProperty := TFileTypeProperty.Create; TypeProperty.Value:= GetFileMimeType(sFullPath); end; {$ELSE} if FindFirstEx(sFullPath, 0, SearchRec) = -1 then raise EFileNotFound.Create(sFullPath); if not (fpAttributes in AssignedProperties) then AttributesProperty := TFileAttributesProperty.Create(SearchRec.Attr); if not (fpSize in AssignedProperties) then SizeProperty := TFileSizeProperty.Create(SearchRec.Size); if not (fpModificationTime in AssignedProperties) then ModificationTimeProperty := TFileModificationDateTimeProperty.Create(SearchRec.Time); if not (fpCreationTime in AssignedProperties) then CreationTimeProperty := TFileCreationDateTimeProperty.Create(SearchRec.Time); if not (fpLastAccessTime in AssignedProperties) then LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(SearchRec.Time); FindCloseEx(SearchRec); if fpLink in PropertiesToSet then LinkProperty := TFileLinkProperty.Create; if fpOwner in PropertiesToSet then OwnerProperty := TFileOwnerProperty.Create; if fpType in PropertiesToSet then TypeProperty := TFileTypeProperty.Create; {$ENDIF} if fpComment in PropertiesToSet then begin CommentProperty := TFileCommentProperty.Create; CommentProperty.Value := FDescr.ReadDescription(sFullPath); end; end; end; class function TFileSystemFileSource.GetFileSource: IFileSystemFileSource; var aFileSource: IFileSource; begin aFileSource := FileSourceManager.Find(TFileSystemFileSource, ''); if not Assigned(aFileSource) then Result := TFileSystemFileSource.Create else Result := aFileSource as IFileSystemFileSource; end; function TFileSystemFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoCopy, fsoCopyIn, fsoCopyOut, fsoMove, fsoDelete, fsoWipe, fsoSplit, fsoCombine, fsoCreateDirectory, fsoCalcChecksum, fsoCalcStatistics, fsoSetFileProperty, fsoExecute]; end; function TFileSystemFileSource.GetProperties: TFileSourceProperties; begin Result := [ fspDirectAccess, fspListFlatView {$IFDEF UNIX} , fspCaseSensitive {$ENDIF} ]; end; function TFileSystemFileSource.GetCurrentWorkingDirectory: String; begin Result := mbGetCurrentDir(); if Result <> '' then Result := IncludeTrailingPathDelimiter(Result); end; function TFileSystemFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin if not mbDirectoryExists(NewDir) then Result := False else Result := mbSetCurrentDir(NewDir); end; function TFileSystemFileSource.IsPathAtRoot(Path: String): Boolean; var sPath: String; begin sPath := ExcludeTrailingPathDelimiter(Path); if (Pos('\\', sPath) = 1) and (NumCountChars(PathDelim, sPath) = 3) then Exit(True); Result := (DCStrUtils.GetParentDir(Path) = ''); end; function TFileSystemFileSource.GetParentDir(sPath: String): String; begin Result:= inherited GetParentDir(sPath); Result:= GetDeepestExistingPath(Result); if Length(Result) = 0 then Result:= gpExePath; end; function TFileSystemFileSource.GetRootDir(sPath : String): String; begin Result := DCStrUtils.GetRootDir(sPath); end; function TFileSystemFileSource.GetRootDir: String; begin Result := Self.GetRootDir(mbGetCurrentDir); end; function TFileSystemFileSource.GetPathType(sPath : String): TPathType; begin Result := DCStrUtils.GetPathType(sPath); end; function TFileSystemFileSource.CreateDirectory(const Path: String): Boolean; begin Result := mbCreateDir(Path); if Result then begin if (log_dir_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess + rsMsgLogMkDir, [Path]), lmtSuccess); end else begin if (log_dir_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError + rsMsgLogMkDir, [Path]), lmtError); end; end; function TFileSystemFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := uOSUtils.GetDiskFreeSpace(Path, FreeSize, TotalSize); end; function TFileSystemFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, {$IF DEFINED(MSWINDOWS)} fpCreationTime, {$ELSE} fpChangeTime, {$ENDIF} fpLastAccessTime, uFileProperty.fpLink ]; end; function TFileSystemFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result := inherited GetRetrievableFileProperties + [fpSize, fpAttributes, fpModificationTime, {$IF DEFINED(MSWINDOWS)} fpCreationTime, {$ELSE} fpChangeTime, {$ENDIF} fpLastAccessTime, uFileProperty.fpLink, fpOwner, fpType, fpComment {$IF DEFINED(MSWINDOWS)} , fpCompressedSize {$ENDIF} ]; end; function TFileSystemFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemListOperation.Create(TargetFileSource, TargetPath); end; function TFileSystemFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var FileSource: IFileSource; begin FileSource := Self; Result := TFileSystemCopyOperation.Create(FileSource, FileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCopyInOperation.Create( SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemCopyOutOperation.Create( SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemMoveOperation.Create(TargetFileSource, SourceFiles, TargetPath); end; function TFileSystemFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TFileSystemFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemWipeOperation.Create(TargetFileSource, FilesToWipe); end; function TFileSystemFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemSplitOperation.Create(SourceFileSource, aSourceFile, aTargetPath); end; function TFileSystemFileSource.CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TFileSystemCombineOperation.Create(SourceFileSource, SourceFiles, aTargetFile); end; function TFileSystemFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCreateDirectoryOperation.Create(TargetFileSource, BasePath, DirectoryPath); end; function TFileSystemFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TFileSystemExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TFileSystemFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCalcChecksumOperation.Create( TargetFileSource, theFiles, aTargetPath, aTargetMask); end; function TFileSystemFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TFileSystemFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TFileSystemSetFilePropertyOperation.Create( TargetFileSource, theTargetFiles, theNewProperties); end; { TFileSystemFileSourceConnection } procedure TFileSystemFileSourceConnection.SetCurrentPath(NewPath: String); begin if not mbDirectoryExists(NewPath) then NewPath := mbGetCurrentDir else mbSetCurrentDir(NewPath); inherited SetCurrentPath(NewPath); end; end. ����������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemcombineoperation.pas��������������������������0000644�0001750�0000144�00000042124�12630662776�026371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemCombineOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCombineOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog, DCClassesUtf8; type { TFileSystemCombineOperation } TFileSystemCombineOperation = class(TFileSourceCombineOperation) private FFullFilesTreeToCombine: TFiles; // source files including all files FStatistics: TFileSourceCombineOperationStatistics; // local copy of statistics FTargetPath: String; FBuffer: Pointer; FBufferSize: LongWord; FCheckFreeSpace: Boolean; FExtensionLengthRequired : longint; protected function Combine(aSourceFile: TFile; aTargetFileStream: TFileStreamEx): Boolean; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function TryToGetInfroFromTheCRC32VerificationFile:boolean; procedure BegForPresenceOfThisFile(aFilename: String); public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, crc, //DC uOSUtils, DCOSUtils, uLng, uFileSystemUtil, uFileSystemFileSource, uFileProcs, DCConvertEncoding; { TFileSystemCombineOperation.Create } constructor TFileSystemCombineOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); begin FFullFilesTreeToCombine := nil; FCheckFreeSpace := True; FTargetPath := ExtractFilePath(aTargetFile); FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); inherited Create(aFileSource, theSourceFiles, aTargetFile); end; { TFileSystemCombineOperation.Destroy } destructor TFileSystemCombineOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; if Assigned(FFullFilesTreeToCombine) then FreeAndNil(FFullFilesTreeToCombine); end; { TFileSystemCombineOperation.Initialize } procedure TFileSystemCombineOperation.Initialize; var MaybeFileIndex: integer; MaybeAdditionalSourceFilename: String; MaybeFile: TFile; begin // If we're under "RequireDynamicMode", we have just ONE file in "SourceFiles" list, // so let's see immediately if we would have the other ready... if RequireDynamicMode then begin // If we're under "RequireDynamicMode", we'll make sure the ".001" file is // the first one in the list and available. We need to do that since in main // panel we did not force user to select the ".001" file to make this // user friendly // // Also, since we're here, let''s try to see if we have other files // in the series ready in the current same folder. // It is pertinent to do that so the bar graph will be set as close // as possible right from the start as oppose as TC which don't have a global graph. FExtensionLengthRequired:=length(SourceFiles[0].Extension); MaybeFileIndex:=1; repeat MaybeAdditionalSourceFilename:=SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + Format('%.*d',[FExtensionLengthRequired, MaybeFileIndex]); if (mbFileExists(MaybeAdditionalSourceFilename)) OR (MaybeFileIndex=1) then begin //Let's make sure the first file is available and if not, beg for it! if (mbFileExists(MaybeAdditionalSourceFilename)=FALSE) AND (MaybeFileIndex=1) then BegForPresenceOfThisFile(MaybeAdditionalSourceFilename); MaybeFile := TFileSystemFileSource.CreateFileFromFile(MaybeAdditionalSourceFilename); SourceFiles.Add(MaybeFile); end; inc(MaybeFileIndex); until (not mbFileExists(MaybeAdditionalSourceFilename)) AND (MaybeFileIndex<>1); SourceFiles.Delete(0); //We may now delete the first one, which could have been any of the series end; //if RequireDynamicMode then... // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.CurrentFileTo:= TargetFile; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCombine, FStatistics.TotalFiles, FStatistics.TotalBytes); // count files //If we're under "RequireDynamicMode", check if we have a summary file like TC //We do that *after* the standard statistic in case we need to correct them from info in the summary file if RequireDynamicMode AND (not WeGotTheCRC32VerificationFile) then TryToGetInfroFromTheCRC32VerificationFile; end; { TFileSystemCombineOperation.MainExecute } procedure TFileSystemCombineOperation.MainExecute; var aFile, DynamicNextFile: TFile; CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; TargetFileStream: TFileStreamEx = nil; DynamicNextFilename : String; UserAnswer: TFileSourceOperationUIResponse; begin try { Check disk free space } if FCheckFreeSpace = True then begin GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if FStatistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; // Create destination file TargetFileStream := TFileStreamEx.Create(TargetFile, fmCreate); try CurrentFileIndex:=0; while (CurrentFileIndex<FFullFilesTreeToCombine.Count) OR (RequireDynamicMode AND (FStatistics.DoneBytes < FStatistics.TotalBytes)) do begin // In "RequireDynamicMode", we might be here with the next file not available. // Let's make sure it's not the case and if so, let's add it to current list if (CurrentFileIndex>=FFullFilesTreeToCombine.Count) then begin DynamicNextFilename:=SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + Format('%.*d',[FExtensionLengthRequired, (CurrentFileIndex+1)]); BegForPresenceOfThisFile(DynamicNextFilename); DynamicNextFile := TFileSystemFileSource.CreateFileFromFile(DynamicNextFilename); SourceFiles.Add(DynamicNextFile); FFullFilesTreeToCombine.Add(DynamicNextFile.Clone); end; aFile := FFullFilesTreeToCombine[CurrentFileIndex]; with FStatistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Combine with current file if not Combine(aFile, TargetFileStream) then Break; with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; inc(CurrentFileIndex); end; finally if Assigned(TargetFileStream) then begin FreeAndNil(TargetFileStream); if (FStatistics.DoneBytes <> FStatistics.TotalBytes) then begin // There was some error, because not all files has been combined. // Delete the not completed target file. mbDeleteFile(TargetFile); // In "RequireDynamicMode", to give little feedback to user, let's him know he won't have his file if RequireDynamicMode then begin ShowError(rsMsgLogError + Format(rsMsgIncorrectFilelength,[TargetFile])); end; end else begin // If all the data have been copied, in the case of the "RequireDynamicMode", we may validate the CRC32, // if it was available, so we could valide the integrity of resulting file if RequireDynamicMode AND (ExpectedCRC32<>$00000000) then begin if CurrentCRC32<>ExpectedCRC32 then begin UserAnswer:=AskQuestion('',rsMsgLogError + Format(rsMsgBadCRC32,[TargetFile]),[fsourNo,fsourYes], fsourNo, fsourNo); if UserAnswer=fsourNo then mbDeleteFile(TargetFile); RaiseAbortOperation; end; end; end; end; end; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + TargetFile); end; end; end; { TFileSystemCombineOperation.Finalize } procedure TFileSystemCombineOperation.Finalize; begin end; { TFileSystemCombineOperation.Combine } function TFileSystemCombineOperation.Combine(aSourceFile: TFile; aTargetFileStream: TFileStreamEx): Boolean; var SourceFileStream: TFileStreamEx; iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; SourceFileStream := nil; // for safety exception handling try try SourceFileStream := TFileStreamEx.Create(aSourceFile.FullPath, fmOpenRead or fmShareDenyNone); TotalBytesToRead := SourceFileStream.Size; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := SourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesWritten := 0; if BytesRead>0 then CurrentCRC32:=crc32(CurrentCRC32,FBuffer,BytesRead); repeat try bRetryWrite := False; BytesWrittenTry := aTargetFileStream.Write((FBuffer + BytesWritten)^, BytesRead); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesRead then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: RaiseAbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + TargetFile + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + aSourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end;//while finally if Assigned(SourceFileStream) then FreeAndNil(SourceFileStream); end; Result:= True; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + aSourceFile.FullPath); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + TargetFile); end; end; end; { TFileSystemCombineOperation.ShowError } procedure TFileSystemCombineOperation.ShowError(sMessage: String); begin if gSkipFileOpError then logWrite(Thread, sMessage, lmtError, True) else begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; { TFileSystemCombineOperation.LogMessage } procedure TFileSystemCombineOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; { TFileSystemCombineOperation.TryToGetInfroFromTheCRC32VerificationFile } function TFileSystemCombineOperation.TryToGetInfroFromTheCRC32VerificationFile:boolean; var PosOfEqualSign: integer; MaybeSummaryFilename: String; hSummaryFile: THandle; LineToParse: string; UserAnswer: TFileSourceOperationUIResponse; begin Result:= False; //We just mimic TC who set in uppercase the "CRC" extension if the filename (without extension!) is made all with capital letters. if SourceFiles[0].NameNoExt = UTF8UpperCase(SourceFiles[0].NameNoExt) then MaybeSummaryFilename:= SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + 'CRC' else begin MaybeSummaryFilename:= SourceFiles[0].Path + SourceFiles[0].NameNoExt + ExtensionSeparator + 'crc'; end; //If CRC32 verification file is not found, try to ask user to make it available for us or maybe continue without it if it is what user want UserAnswer:=fsourOk; while (not mbFileExists(MaybeSummaryFilename)) AND (UserAnswer=fsourOk) do begin UserAnswer:=AskQuestion(Format(msgTryToLocateCRCFile,[MaybeSummaryFilename]), '' , [fsourOk,fsourCancel], fsourOk, fsourCancel); end; if mbFileExists(MaybeSummaryFilename) then begin hSummaryFile:= mbFileOpen(MaybeSummaryFilename, fmOpenRead); try while FileReadLn(hSummaryFile, LineToParse) do //"FileReadLn" return FALSE when we're at the end of the file! Wow! Let's use it for the loop control then! begin PosOfEqualSign := UTF8Pos('=', LineToParse); if PosOfEqualSign > 0 then //Investiguate *only* if the equal sign is present begin // Let's see if we could extract final filename. // We first look for a UTF8 filename style. If so, take it, if not, search for the ANSI flavor if UTF8Pos('filenameutf8=', UTF8LowerCase(LineToParse)) > 0 then begin TargetFile:= ExtractFilePath(TargetFile) + UTF8Copy(LineToParse, (PosOfEqualSign + 1), MaxInt); end else begin if Pos('filename=', LowerCase(LineToParse)) > 0 then TargetFile:= ExtractFilePath(TargetFile) + CeSysToUtf8(Copy(LineToParse,(PosOfEqualSign + 1) ,MaxInt)); end; //Let's see if we could extract final filesize... if UTF8Pos('size=',UTF8LowerCase(LineToParse))>0 then FStatistics.TotalBytes:=StrToInt64(UTF8Copy(LineToParse,(PosOfEqualSign+1),(UTF8length(LineToParse)-PosOfEqualSign))); //Let's see if we could extract final CRC32... if UTF8Pos('crc32=',UTF8LowerCase(LineToParse))>0 then ExpectedCRC32:=StrToQWord('x'+UTF8Copy(LineToParse,(PosOfEqualSign+1),(UTF8length(LineToParse)-PosOfEqualSign))); end; end; finally FileClose(hSummaryFile); end; WeGotTheCRC32VerificationFile:=TRUE; result:=TRUE; end; end; { TFileSystemCombineOperation.BegForPresenceOfThisFile } procedure TFileSystemCombineOperation.BegForPresenceOfThisFile(aFilename: String); begin while not mbFileExists(aFilename) do begin case AskQuestion(Format(rsMsgFileNotFound+#$0A+rsMsgProvideThisFile,[aFilename]), '', [fsourRetry, fsourAbort], fsourRetry, fsourAbort) of fsourAbort: RaiseAbortOperation; end; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemcalcstatisticsoperation.pas�������������������0000644�0001750�0000144�00000011627�11747211345�027764� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog; type TFileSystemCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessLink(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uFileSourceOperationOptions, uOSUtils, uLng, uFindEx, uFileSystemFileSource; constructor TFileSystemCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); end; destructor TFileSystemCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TFileSystemCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TFileSystemCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TFileSystemCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); case FSymLinkOption of fsooslFollow: ProcessLink(aFile); fsooslDontFollow: ; // do nothing fsooslNone: begin case AskQuestion('', Format(rsMsgFollowSymlink, [aFile.Name]), [fsourYes, fsourAll, fsourNo, fsourSkipAll], fsourYes, fsourNo) of fsourYes: ProcessLink(aFile); fsourAll: begin FSymLinkOption := fsooslFollow; ProcessLink(aFile); end; fsourNo: ; // do nothing fsourSkipAll: FSymLinkOption := fsooslDontFollow; end; end; end; end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TFileSystemCalcStatisticsOperation.ProcessLink(aFile: TFile); var PathToFile: String; aLinkFile: TFile = nil; begin PathToFile := mbReadAllLinks(aFile.FullPath); if PathToFile <> '' then begin try aLinkFile := TFileSystemFileSource.CreateFileFromFile(PathToFile); try ProcessFile(aLinkFile); finally FreeAndNil(aLinkFile); end; except on EFileNotFound do begin LogMessage(rsMsgErrInvalidLink + ': ' + aFile.FullPath + ' -> ' + PathToFile, [log_errors], lmtError); end; end; end else begin LogMessage(rsMsgErrInvalidLink + ': ' + aFile.FullPath + ' -> ' + PathToFile, [log_errors], lmtError); end; end; procedure TFileSystemCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var sr: TSearchRecEx; aFile: TFile; FindResult: Longint; begin FindResult := FindFirstEx(srcPath + '*', faAnyFile, sr); try if FindResult = 0 then repeat if (sr.Name='.') or (sr.Name='..') then Continue; aFile := TFileSystemFileSource.CreateFile(srcPath, @sr); try ProcessFile(aFile); finally FreeAndNil(aFile); end; CheckOperationState; until FindNextEx(sr) <> 0; finally FindCloseEx(sr); end; end; procedure TFileSystemCalcStatisticsOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ���������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemsetfilepropertyoperation.pas������������������0000644�0001750�0000144�00000030560�12612505011�030170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFile, uFileProperty; type TFileSystemSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; function RenameFile(const OldName: String; NewName: String): TSetFilePropertyResult; protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uGlobs, uLng, DCDateTimeUtils, uFileSystemUtil, uFileSourceOperationUI, DCOSUtils, DCStrUtils, DCBasicTypes {$IF DEFINED(MSWINDOWS)} , Windows, ShellAPI, LCLProc {$ELSEIF DEFINED(UNIX)} , BaseUnix, FileUtil {$ENDIF} ; constructor TFileSystemSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; end; destructor TFileSystemSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; end; procedure TFileSystemSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles := FFullFilesTree.Count; end else begin FillAndCount(TargetFiles, True, False, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TFileSystemSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; procedure TFileSystemSetFilePropertyOperation.Finalize; begin end; function TFileSystemSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; begin Result := sfprSuccess; try case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin Result := RenameFile( aFile.FullPath, (aTemplateProperty as TFileNameProperty).Value); end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin if mbFileSetAttr( aFile.FullPath, (aTemplateProperty as TFileAttributesProperty).Value) <> 0 then begin Result := sfprError; end; end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin if not mbFileSetTime( aFile.FullPath, DateTimeToFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value), 0, 0) then begin Result := sfprError; end; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin if not mbFileSetTime( aFile.FullPath, 0, DateTimeToFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value), 0) then begin Result := sfprError; end; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin if not mbFileSetTime( aFile.FullPath, 0, 0, DateTimeToFileTime((aTemplateProperty as TFileLastAccessDateTimeProperty).Value)) then begin Result := sfprError; end; end else Result := sfprSkipped; else raise Exception.Create('Trying to set unsupported property'); end; except on e: EDateOutOfRange do begin if not gSkipFileOpError then case AskQuestion(rsMsgLogError + Format(rsMsgErrDateNotSupported, [DateTimeToStr(e.DateTime)]), '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := sfprSkipped; fsourAbort: RaiseAbortOperation; end; end; on e: EConvertError do begin if not gSkipFileOpError then case AskQuestion(rsMsgLogError + e.Message, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) of fsourSkip: Result := sfprSkipped; fsourAbort: RaiseAbortOperation; end; end; end; end; function TFileSystemSetFilePropertyOperation.RenameFile(const OldName: String; NewName: String): TSetFilePropertyResult; function AskIfOverwrite(Attrs: TFileAttrs): TFileSourceOperationUIResponse; var sQuestion: String; begin if DCOSUtils.FPS_ISDIR(Attrs) then sQuestion := rsMsgFolderExistsRwrt else sQuestion := rsMsgFileExistsRwrt; Result := AskQuestion(Format(sQuestion, [NewName]), '', [fsourYes, fsourNo, fsourAbort], fsourYes, fsourNo); end; {$IFDEF MSWINDOWS} function ShellRename: Boolean; var wsFromName, wsToName: WideString; FileOpStruct: TSHFileOpStructW; begin wsFromName := UTF8Decode(OldName) + #0; wsToName := UTF8Decode(NewName) + #0; FillByte(FileOpStruct, SizeOf(FileOpStruct), 0); with FileOpStruct do begin Wnd := GetForegroundWindow; // Use rename operation when only file name case is changed if UTF8LowerCase(OldName) = UTF8LowerCase(NewName) then wFunc := FO_RENAME else wFunc := FO_MOVE; pFrom := PWideChar(wsFromName); pTo := PWideChar(wsToName); end; Result := (SHFileOperationW(@FileOpStruct) = 0) and (not FileOpStruct.fAnyOperationsAborted); end; {$ENDIF} var {$IFDEF UNIX} tmpFileName: String; OldFileStat, NewFileStat: stat; {$ELSE} NewFileAttrs: TFileAttrs; {$ENDIF} begin if FileSource.GetPathType(NewName) <> ptAbsolute then NewName := ExtractFilePath(OldName) + NewName; if OldName = NewName then Exit(sfprSkipped); {$IFDEF UNIX} if fpLstat(UTF8ToSys(OldName), OldFileStat) <> 0 then Exit(sfprError); // Check if target file exists. if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // Check if source and target are the same files (same inode and same device). if (OldFileStat.st_ino = NewFileStat.st_ino) and (OldFileStat.st_dev = NewFileStat.st_dev) then begin // Check number of links. // If it is 1 then source and target names most probably differ only // by case on a case-insensitive filesystem. Direct rename() in such case // fails on Linux, so we use a temporary file name and rename in two stages. // If number of links is more than 1 then it's enough to simply unlink // the source file, since both files are technically identical. // (On Linux rename() returns success but doesn't do anything // if renaming a file to its hard link.) // We cannot use st_nlink for directories because it means "number of // subdirectories"; hard links to directories are not supported on Linux // or Windows anyway (on MacOSX they are). Therefore we always treat // directories as if they were a single link and rename them using temporary name. if (NewFileStat.st_nlink = 1) or BaseUnix.fpS_ISDIR(NewFileStat.st_mode) then begin tmpFileName := GetTempName(OldName); if FpRename(UTF8ToSys(OldName), UTF8ToSys(tmpFileName)) = 0 then begin if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // We have renamed the old file but the new file name still exists, // so this wasn't a single file on a case-insensitive filesystem // accessible by two names that differ by case. FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. {$IFDEF DARWIN} // If it was a directory with multiple hard links then fall through // to asking for overwrite and unlinking source link. if not (BaseUnix.fpS_ISDIR(NewFileStat.st_mode) and (NewFileStat.st_nlink > 1)) then {$ENDIF} Exit(sfprError); end else if FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(NewName)) = 0 then begin Exit(sfprSuccess); end else begin FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. Exit(sfprError); end; end else Exit(sfprError); end; // Both names are hard links to the same file. case AskIfOverwrite(NewFileStat.st_mode) of fsourYes: ; // continue fsourNo: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; // Multiple links - simply unlink the source file. if fpUnLink(UTF8ToSys(OldName)) = 0 then Result := sfprSuccess else Result := sfprError; Exit; end else begin case AskIfOverwrite(NewFileStat.st_mode) of fsourYes: ; // continue fsourNo: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; if FpRename(UTF8ToSys(OldName), UTF8ToSys(NewName)) = 0 then Result := sfprSuccess else Result := sfprError; {$ELSE} if gUseShellForFileOperations then begin if ShellRename then Result := sfprSuccess else Result := sfprError; end else begin // Windows XP doesn't allow two filenames that differ only by case (even on NTFS). if UTF8LowerCase(OldName) <> UTF8LowerCase(NewName) then begin NewFileAttrs := mbFileGetAttr(NewName); if NewFileAttrs <> faInvalidAttributes then // If target file exists. begin case AskIfOverwrite(NewFileAttrs) of fsourYes: ; // continue fsourNo: Exit(sfprSkipped); fsourAbort: RaiseAbortOperation; end; end; end; if mbRenameFile(OldName, NewName) then Result := sfprSuccess else Result := sfprError; end; {$ENDIF} end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemcreatedirectoryoperation.pas������������������0000644�0001750�0000144�00000003620�11747211345�030131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource, uFileSystemFileSource; type TFileSystemCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) private FFileSystemFileSource: IFileSystemFileSource; public constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationUI, uFileProcs, uLog, uLng, uGlobs, DCOSUtils; constructor TFileSystemCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin FFileSystemFileSource := aTargetFileSource as IFileSystemFileSource; inherited Create(aTargetFileSource, aCurrentPath, aDirectoryPath); end; procedure TFileSystemCreateDirectoryOperation.Initialize; begin end; procedure TFileSystemCreateDirectoryOperation.MainExecute; begin if mbFileGetAttr(AbsolutePath) <> faInvalidAttributes then begin AskQuestion(Format(rsMsgErrDirExists, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end else if uFileProcs.mbForceDirectory(AbsolutePath) = False then begin if (log_dir_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); AskQuestion(Format(rsMsgErrForceDir, [AbsolutePath]), '', [fsourOk], fsourOk, fsourOk); end else begin if (log_dir_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir,[AbsolutePath]), lmtSuccess); end; end; procedure TFileSystemCreateDirectoryOperation.Finalize; begin end; end. ����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.lfm������������������0000644�0001750�0000144�00000024436�12563163061�030200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object FileSystemCopyMoveOperationOptionsUI: TFileSystemCopyMoveOperationOptionsUI Left = 438 Height = 248 Top = 173 Width = 637 AutoSize = True ClientHeight = 248 ClientWidth = 637 LCLVersion = '1.4.3.0' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 0 Height = 79 Top = 0 Width = 242 AutoSize = True BorderSpacing.Right = 10 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 5 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 79 ClientWidth = 242 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 15 Top = 5 Width = 137 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When &file exists' FocusControl = cmbFileExists ParentColor = False end object lblDirectoryExists: TLabel Left = 0 Height = 15 Top = 30 Width = 137 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When dir&ectory exists' FocusControl = cmbDirectoryExists ParentColor = False end object lblSetPropertyError: TLabel Left = 0 Height = 15 Top = 55 Width = 137 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When ca&nnot set property' FocusControl = cmbSetPropertyError ParentColor = False end object cmbFileExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblFileExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 142 Height = 23 Top = 1 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 Style = csDropDownList TabOrder = 0 end object cmbDirectoryExists: TComboBoxAutoWidth AnchorSideLeft.Control = lblDirectoryExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDirectoryExists AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 142 Height = 23 Top = 26 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 Style = csDropDownList TabOrder = 1 end object cmbSetPropertyError: TComboBoxAutoWidth AnchorSideLeft.Control = lblSetPropertyError AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSetPropertyError AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 142 Height = 23 Hint = 'What to do when cannot set file time, attributes, etc.' Top = 51 Width = 100 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 ParentShowHint = False ShowHint = True Style = csDropDownList TabOrder = 2 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 252 Height = 171 Top = 0 Width = 128 AutoSize = True BevelOuter = bvNone BevelWidth = 8 ClientHeight = 171 ClientWidth = 128 TabOrder = 1 object cbCheckFreeSpace: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = pnlCheckboxes Left = 0 Height = 19 Top = 0 Width = 109 Caption = 'C&heck free space' TabOrder = 0 end object cbFollowLinks: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = cbReserveSpace AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 38 Width = 82 AllowGrayed = True Caption = 'Fo&llow links' TabOrder = 2 Visible = False end object cbCorrectLinks: TCheckBox AnchorSideLeft.Control = cbFollowLinks AnchorSideTop.Control = cbFollowLinks AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 57 Width = 86 Caption = 'Correct lin&ks' TabOrder = 3 end object cbCopyAttributes: TCheckBox AnchorSideLeft.Control = cbCorrectLinks AnchorSideTop.Control = cbCorrectLinks AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 76 Width = 101 Caption = 'Cop&y attributes' OnChange = cbCopyAttributesChange TabOrder = 4 end object cbDropReadOnlyFlag: TCheckBox AnchorSideLeft.Control = cbCopyAttributes AnchorSideTop.Control = cbCopyAttributes AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 95 Width = 118 BorderSpacing.Left = 10 Caption = 'Drop readonly fla&g' TabOrder = 5 Visible = False end object cbCopyTime: TCheckBox AnchorSideLeft.Control = cbCopyAttributes AnchorSideTop.Control = cbDropReadOnlyFlag AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 114 Width = 103 Caption = 'Copy d&ate/time' TabOrder = 6 end object cbCopyOwnership: TCheckBox AnchorSideLeft.Control = cbCopyTime AnchorSideTop.Control = cbCopyTime AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 133 Width = 106 Caption = 'Copy o&wnership' TabOrder = 7 end object cbReserveSpace: TCheckBox AnchorSideLeft.Control = pnlCheckboxes AnchorSideTop.Control = cbCheckFreeSpace AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 19 Width = 93 Caption = '&Reserve space' OnChange = cbReserveSpaceChange TabOrder = 1 end object cbCopyPermissions: TCheckBox AnchorSideLeft.Control = cbCopyOwnership AnchorSideTop.Control = cbCopyOwnership AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 152 Width = 114 Caption = 'Copy &permissions' TabOrder = 8 Visible = False end end object gbFileTemplate: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlComboBoxes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlComboBoxes AnchorSideRight.Side = asrBottom Left = 0 Height = 76 Top = 79 Width = 242 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Use file template' ClientHeight = 56 ClientWidth = 238 TabOrder = 2 object btnSearchTemplate: TBitBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFileTemplate AnchorSideRight.Control = gbFileTemplate AnchorSideRight.Side = asrBottom Left = 201 Height = 32 Hint = 'Choose template...' Top = 0 Width = 32 Anchors = [akTop, akRight] BorderSpacing.Right = 5 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 0 end object lblTemplateName: TLabel AnchorSideLeft.Control = gbFileTemplate AnchorSideTop.Control = btnSearchTemplate AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSearchTemplate Left = 5 Height = 15 Top = 9 Width = 186 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 5 BorderSpacing.Right = 10 Caption = '<no template>' ParentColor = False end object cbExcludeEmptyDirectories: TCheckBox AnchorSideLeft.Control = gbFileTemplate AnchorSideTop.Control = btnSearchTemplate AnchorSideTop.Side = asrBottom Left = 5 Height = 19 Top = 37 Width = 155 BorderSpacing.Left = 5 BorderSpacing.Top = 5 BorderSpacing.Right = 5 Caption = 'E&xclude empty directories' Checked = True State = cbChecked TabOrder = 1 end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemmoveoperation.pas�����������������������������0000644�0001750�0000144�00000013533�12573301222�025703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceMoveOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uFileSystemUtil, DCOSUtils, uSearchTemplate; type { TFileSystemMoveOperation } TFileSystemMoveOperation = class(TFileSourceMoveOperation) private FCopyAttributesOptions: TCopyAttributesOptions; FOperationHelper: TFileSystemOperationHelper; FExcludeEmptyTemplateDirectories: Boolean; FSearchTemplate: TSearchTemplate; FSetPropertyError: TFileSourceOperationOptionSetPropertyError; FSourceFilesTree: TFileTree; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics // Options. FReserveSpace, FCheckFreeSpace: Boolean; FSkipAllBigFiles: Boolean; FCorrectSymlinks: Boolean; procedure SetSearchTemplate(AValue: TSearchTemplate); protected public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property CheckFreeSpace: Boolean read FCheckFreeSpace write FCheckFreeSpace; property ReserveSpace: Boolean read FReserveSpace write FReserveSpace; property CopyAttributesOptions: TCopyAttributesOptions read FCopyAttributesOptions write FCopyAttributesOptions; property SkipAllBigFiles: Boolean read FSkipAllBigFiles write FSkipAllBigFiles; property CorrectSymLinks: Boolean read FCorrectSymLinks write FCorrectSymLinks; property SetPropertyError: TFileSourceOperationOptionSetPropertyError read FSetPropertyError write FSetPropertyError; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Operation takes ownership of assigned template and will free it. } property SearchTemplate: TSearchTemplate read FSearchTemplate write SetSearchTemplate; end; implementation uses fFileSystemCopyMoveOperationOptions, uGlobs; constructor TFileSystemMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin // Here we can read global settings if there are any. FCopyAttributesOptions := []; if gOperationOptionCopyAttributes then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyAttributes]; if gOperationOptionCopyTime then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyTime]; if gOperationOptionCopyOwnership then FCopyAttributesOptions := FCopyAttributesOptions + [caoCopyOwnership]; FFileExistsOption := gOperationOptionFileExists; FDirExistsOption := gOperationOptionDirectoryExists; FSetPropertyError := gOperationOptionSetPropertyError; FReserveSpace := gOperationOptionReserveSpace; FCheckFreeSpace := gOperationOptionCheckFreeSpace; FSkipAllBigFiles := False; FCorrectSymlinks := gOperationOptionCorrectLinks; FExcludeEmptyTemplateDirectories := True; inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TFileSystemMoveOperation.Destroy; begin inherited Destroy; FreeAndNil(FSourceFilesTree); FreeAndNil(FOperationHelper); FreeAndNil(FSearchTemplate); end; procedure TFileSystemMoveOperation.Initialize; var TreeBuilder: TFileSystemTreeBuilder; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; TreeBuilder := TFileSystemTreeBuilder.Create( @AskQuestion, @CheckOperationState); try // In move operation don't follow symlinks. TreeBuilder.SymLinkOption := fsooslDontFollow; TreeBuilder.SearchTemplate := Self.SearchTemplate; TreeBuilder.ExcludeEmptyTemplateDirectories := Self.ExcludeEmptyTemplateDirectories; TreeBuilder.BuildFromFiles(SourceFiles); FSourceFilesTree := TreeBuilder.ReleaseTree; FStatistics.TotalFiles := TreeBuilder.FilesCount; FStatistics.TotalBytes := TreeBuilder.FilesSize; finally FreeAndNil(TreeBuilder); end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TFileSystemOperationHelper.Create( @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, fsohmMove, TargetPath, FStatistics); FOperationHelper.RenameMask := RenameMask; FOperationHelper.ReserveSpace := FReserveSpace; FOperationHelper.CheckFreeSpace := CheckFreeSpace; FOperationHelper.CopyAttributesOptions := CopyAttributesOptions; FOperationHelper.SkipAllBigFiles := SkipAllBigFiles; FOperationHelper.CorrectSymLinks := CorrectSymLinks; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.DirExistsOption := DirExistsOption; FOperationHelper.SetPropertyError := SetPropertyError; FOperationHelper.Initialize; end; procedure TFileSystemMoveOperation.MainExecute; begin FOperationHelper.ProcessTree(FSourceFilesTree); end; procedure TFileSystemMoveOperation.SetSearchTemplate(AValue: TSearchTemplate); begin FSearchTemplate.Free; FSearchTemplate := AValue; end; procedure TFileSystemMoveOperation.Finalize; begin FileExistsOption := FOperationHelper.FileExistsOption; FreeAndNil(FOperationHelper); end; class function TFileSystemMoveOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TFileSystemMoveOperationOptionsUI; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemsplitoperation.pas����������������������������0000644�0001750�0000144�00000031444�12630662776�026113� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemSplitOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSplitOperation, uFileSource, uFileSourceOperationUI, uFile, uGlobs, uLog, DCClassesUtf8; type { TFileSystemSplitOperation } TFileSystemSplitOperation = class(TFileSourceSplitOperation) private FStatistics: TFileSourceSplitOperationStatistics; // local copy of statistics FTargetpath: String; FBuffer: Pointer; FBufferSize: LongWord; FCheckFreeSpace: Boolean; protected function Split(aSourceFileStream: TFileStreamEx; TargetFile: String): Boolean; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses //Lazarus, Free-Pascal, etc. LCLProc, crc, //DC DCConvertEncoding, uOSUtils, DCOSUtils, uLng, uFileProcs; constructor TFileSystemSplitOperation.Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); begin FCheckFreeSpace := True; FTargetpath := IncludeTrailingPathDelimiter(aTargetPath); FBufferSize := gCopyBlockSize; GetMem(FBuffer, FBufferSize); inherited Create(aFileSource, aSourceFile, aTargetPath); end; destructor TFileSystemSplitOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; end; //TC, when creating the CRC32 verification file after a split will include the target filename with both ANSI and UTF8 string filename //In the ANSI filename, he puts "_" to replace any UTF8 needed character, not present in regular ANSI set. //Let's do the same! // function ConvertStringToTCStringUTF8CharReplacedByUnderscore(const sString: string): string; begin Result:= StringReplace(CeUtf8ToSys(sString), '?', '_', [rfReplaceAll]); end; procedure TFileSystemSplitOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin CurrentFileFrom:= SourceFile.FullPath; TotalFiles:= VolumeNumber; TotalBytes:= SourceFile.Size; end; end; procedure TFileSystemSplitOperation.MainExecute; var iExt, CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; SourceFileStream: TFileStreamEx = nil; TargetFilename: String; hSummaryFile: THandle; SummaryFilename:String; respAutomaticSwapDisk: TFileSourceOperationUIResponse; begin try if not AutomaticSplitMode then begin { Check disk free space } if FCheckFreeSpace = True then begin GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); if FStatistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; end; // Open source file SourceFileStream := TFileStreamEx.Create(SourceFile.FullPath, fmOpenRead or fmShareDenyNone); try // Calculate extension length iExt:= 3; // Minimum length 3 symbols if not AutomaticSplitMode then begin CurrentFileIndex:= (FStatistics.TotalFiles div 1000); while CurrentFileIndex >= 1 do begin CurrentFileIndex:= CurrentFileIndex div 10; Inc(iExt); end; end; //For-loop has been replaced by a while if for any reason the number of files has been miscomputed, it won't create hundreds of file of 0 byte long! CurrentFileIndex:=1; while ((CurrentFileIndex<=FStatistics.TotalFiles) OR AutomaticSplitMode) AND (FStatistics.TotalBytes>FStatistics.DoneBytes) do begin //Determine what will be the next filename to the output file if RequireACRC32VerificationFile then TargetFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex]) //like TC else TargetFilename:= FTargetpath + SourceFile.Name + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex]); //like DC originally if AutomaticSplitMode then begin repeat GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); VolumeSize:=iFreeDiskSize-(64*1024); //Let's keep a possible 64KB free of space on target even after copy if VolumeSize<(64*1024) then begin respAutomaticSwapDisk:=AskQuestion('',Format(rsMsgInsertNextDisk,[TargetFilename,(FStatistics.TotalBytes-FStatistics.DoneBytes)]),[fsourOk,fsourAbort],fsourOk,fsourAbort); if respAutomaticSwapDisk = fsourAbort then RaiseAbortOperation; if respAutomaticSwapDisk = fsourOk then VolumeSize:=1*1024*1024; //~~~Debug end; until (VolumeSize >= (64*1024)); FStatistics.TotalFiles:=FStatistics.TotalFiles+1; end; with FStatistics do begin // Last file can be smaller then volume size if (TotalBytes - DoneBytes) < VolumeSize then VolumeSize:= TotalBytes - DoneBytes; CurrentFileTo := TargetFilename; CurrentFileTotalBytes := VolumeSize; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); // Split with current file if not Split(SourceFileStream, TargetFilename) then Break; with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; CheckOperationState; inc(CurrentFileIndex); end; finally if Assigned(SourceFileStream) then begin FreeAndNil(SourceFileStream); if (FStatistics.DoneBytes <> FStatistics.TotalBytes) then begin for CurrentFileIndex := 1 to FStatistics.TotalFiles do // There was some error, because not all files has been created. // Delete the not completed target files. mbDeleteFile(FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + Format('%.*d',[iExt, CurrentFileIndex])); end else begin //If requested, let's create the CRC32 verification file if RequireACRC32VerificationFile then begin //We just mimic TC who set in uppercase the "CRC" extension if the filename (without extension!) is made all with capital letters. if SourceFile.NameNoExt = UTF8UpperCase(SourceFile.NameNoExt) then SummaryFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + 'CRC' else SummaryFilename:= FTargetpath + SourceFile.NameNoExt + ExtensionSeparator + 'crc'; hSummaryFile := mbFileCreate(SummaryFilename); try FileWriteLn(hSummaryFile,'filename='+ConvertStringToTCStringUTF8CharReplacedByUnderscore(SourceFile.Name)); FileWriteLn(hSummaryFile,'filenameutf8='+SourceFile.Name); FileWriteLn(hSummaryFile,'size='+IntToStr(SourceFile.Size)); FileWriteLn(hSummaryFile,'crc32='+hexStr(CurrentCRC32,8)); finally FileClose(hSummaryFile); end; end; end; end; end; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + SourceFile.FullPath); end; end; end; procedure TFileSystemSplitOperation.Finalize; begin end; function TFileSystemSplitOperation.Split(aSourceFileStream: TFileStreamEx; TargetFile: String): Boolean; var TargetFileStream: TFileStreamEx = nil; // for safety exception handling iTotalDiskSize, iFreeDiskSize: Int64; bRetryRead, bRetryWrite: Boolean; BytesRead, BytesToRead, BytesWrittenTry, BytesWritten: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; try try TargetFileStream := TFileStreamEx.Create(TargetFile, fmCreate); TotalBytesToRead := VolumeSize; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := aSourceFileStream.Read(FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); if RequireACRC32VerificationFile then CurrentCRC32:=crc32(CurrentCRC32,FBuffer,BytesRead); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := TargetFileStream.Write((FBuffer + BytesWritten)^, BytesRead); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesRead then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(TargetPath, iFreeDiskSize, iTotalDiskSize); if BytesRead > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: RaiseAbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + TargetFile + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + SourceFile.FullPath + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end; //while finally if Assigned(TargetFileStream) then FreeAndNil(TargetFileStream); end; Result:= True; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + TargetFile); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + TargetFile); end; end; end; procedure TFileSystemSplitOperation.ShowError(sMessage: String); begin if gSkipFileOpError then logWrite(Thread, sMessage, lmtError, True) else begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); RaiseAbortOperation; end; end; procedure TFileSystemSplitOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ffilesystemcopymoveoperationoptions.pas������������������0000644�0001750�0000144�00000027052�12563163061�030202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fFileSystemCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, Buttons, uFileSourceOperationOptionsUI, uFileSystemCopyOperation, uFileSystemMoveOperation, uSearchTemplate, KASComboBox; type { TFileSystemCopyMoveOperationOptionsUI } TFileSystemCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) btnSearchTemplate: TBitBtn; cbCheckFreeSpace: TCheckBox; cbCorrectLinks: TCheckBox; cbDropReadOnlyFlag: TCheckBox; cbFollowLinks: TCheckBox; cbCopyAttributes: TCheckBox; cbCopyTime: TCheckBox; cbCopyOwnership: TCheckBox; cbExcludeEmptyDirectories: TCheckBox; cbReserveSpace: TCheckBox; cbCopyPermissions: TCheckBox; cmbDirectoryExists: TComboBoxAutoWidth; cmbFileExists: TComboBoxAutoWidth; cmbSetPropertyError: TComboBoxAutoWidth; gbFileTemplate: TGroupBox; grpOptions: TGroupBox; lblSetPropertyError: TLabel; lblTemplateName: TLabel; lblDirectoryExists: TLabel; lblFileExists: TLabel; pnlComboBoxes: TPanel; pnlCheckboxes: TPanel; procedure btnSearchTemplateClick(Sender: TObject); procedure cbCopyAttributesChange(Sender: TObject); procedure cbReserveSpaceChange(Sender: TObject); private FTemplate: TSearchTemplate; procedure SetOperationOptions(CopyOperation: TFileSystemCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TFileSystemMoveOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; destructor Destroy; override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TFileSystemCopyOperationOptionsUI = class(TFileSystemCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; TFileSystemMoveOperationOptionsUI = class(TFileSystemCopyMoveOperationOptionsUI) end; implementation {$R *.lfm} uses uGlobs, uLng, uFileSourceOperationOptions, DCOSUtils, DCStrUtils, fFindDlg; procedure SetCopyOption(var Options: TCopyAttributesOptions; Option: TCopyAttributesOption; IsSet: Boolean); begin if IsSet then Options := Options + [Option] else Options := Options - [Option]; end; { TFileSystemCopyMoveOperationOptionsUI } procedure TFileSystemCopyMoveOperationOptionsUI.btnSearchTemplateClick(Sender: TObject); begin if ShowUseTemplateDlg(FTemplate) and Assigned(FTemplate) then begin if FTemplate.TemplateName = '' then lblTemplateName.Caption := rsSearchTemplateUnnamed else lblTemplateName.Caption := FTemplate.TemplateName; end; end; procedure TFileSystemCopyMoveOperationOptionsUI.cbCopyAttributesChange(Sender: TObject); begin cbDropReadOnlyFlag.Enabled := cbCopyAttributes.Checked; end; procedure TFileSystemCopyMoveOperationOptionsUI.cbReserveSpaceChange(Sender: TObject); begin if (cbReserveSpace.Checked = False) then cbCheckFreeSpace.Checked := Boolean(cbCheckFreeSpace.Tag) else begin cbCheckFreeSpace.Tag := PtrInt(cbCheckFreeSpace.Checked); cbCheckFreeSpace.Checked := cbReserveSpace.Checked; end; cbCheckFreeSpace.Enabled := not cbReserveSpace.Checked; end; constructor TFileSystemCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; {$IFDEF MSWINDOWS} cbCopyOwnership.Visible := False; cbCopyPermissions.Visible := True; {$ENDIF} ParseLineToList(rsFileOpFileExistsOptions, cmbFileExists.Items); ParseLineToList(rsFileOpDirectoryExistsOptions, cmbDirectoryExists.Items); ParseLineToList(rsFileOpSetPropertyErrorOptions, cmbSetPropertyError.Items); if not gOverwriteFolder then cmbDirectoryExists.Items.Delete(1); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite : cmbFileExists.ItemIndex := 1; fsoofeOverwriteOlder: cmbFileExists.ItemIndex := 2; fsoofeSkip : cmbFileExists.ItemIndex := 3; end; if gOverwriteFolder then case gOperationOptionDirectoryExists of fsoodeNone : cmbDirectoryExists.ItemIndex := 0; fsoodeDelete : cmbDirectoryExists.ItemIndex := 1; fsoodeCopyInto : cmbDirectoryExists.ItemIndex := 2; fsoodeSkip : cmbDirectoryExists.ItemIndex := 3; end else case gOperationOptionDirectoryExists of fsoodeNone : cmbDirectoryExists.ItemIndex := 0; fsoodeCopyInto : cmbDirectoryExists.ItemIndex := 1; fsoodeSkip : cmbDirectoryExists.ItemIndex := 2; end; case gOperationOptionSetPropertyError of fsoospeNone : cmbSetPropertyError.ItemIndex := 0; fsoospeDontSet : cmbSetPropertyError.ItemIndex := 1; fsoospeIgnoreErrors : cmbSetPropertyError.ItemIndex := 2; end; cbCopyAttributes.Checked := gOperationOptionCopyAttributes; cbCopyTime.Checked := gOperationOptionCopyTime; cbCopyOwnership.Checked := gOperationOptionCopyOwnership; cbCopyPermissions.Checked := gOperationOptionCopyPermissions; cbDropReadOnlyFlag.Checked := gDropReadOnlyFlag; case gOperationOptionSymLinks of fsooslFollow : cbFollowLinks.State := cbChecked; fsooslDontFollow : cbFollowLinks.State := cbUnchecked; fsooslNone : cbFollowLinks.State := cbGrayed; end; cbCorrectLinks.Checked := gOperationOptionCorrectLinks; cbReserveSpace.Checked := gOperationOptionReserveSpace; cbCheckFreeSpace.Checked := gOperationOptionCheckFreeSpace; end; destructor TFileSystemCopyMoveOperationOptionsUI.Destroy; begin inherited Destroy; FTemplate.Free; end; procedure TFileSystemCopyMoveOperationOptionsUI.SaveOptions; begin case cmbFileExists.ItemIndex of 0: gOperationOptionFileExists := fsoofeNone; 1: gOperationOptionFileExists := fsoofeOverwrite; 2: gOperationOptionFileExists := fsoofeOverwriteOlder; 3: gOperationOptionFileExists := fsoofeSkip; end; if gOverwriteFolder then case cmbDirectoryExists.ItemIndex of 0: gOperationOptionDirectoryExists := fsoodeNone; 1: gOperationOptionDirectoryExists := fsoodeDelete; 2: gOperationOptionDirectoryExists := fsoodeCopyInto; 3: gOperationOptionDirectoryExists := fsoodeSkip; end else case cmbDirectoryExists.ItemIndex of 0: gOperationOptionDirectoryExists := fsoodeNone; 1: gOperationOptionDirectoryExists := fsoodeCopyInto; 2: gOperationOptionDirectoryExists := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: gOperationOptionSetPropertyError := fsoospeNone; 1: gOperationOptionSetPropertyError := fsoospeDontSet; 2: gOperationOptionSetPropertyError := fsoospeIgnoreErrors; end; gOperationOptionCopyAttributes := cbCopyAttributes.Checked; gOperationOptionCopyTime := cbCopyTime.Checked; gOperationOptionCopyOwnership := cbCopyOwnership.Checked; gOperationOptionCopyPermissions := cbCopyPermissions.Checked; gDropReadOnlyFlag := cbDropReadOnlyFlag.Checked; case cbFollowLinks.State of cbChecked : gOperationOptionSymLinks := fsooslFollow; cbUnchecked : gOperationOptionSymLinks := fsooslDontFollow; cbGrayed : gOperationOptionSymLinks := fsooslNone; end; gOperationOptionCorrectLinks := cbCorrectLinks.Checked; gOperationOptionReserveSpace := cbReserveSpace.Checked; gOperationOptionCheckFreeSpace := cbCheckFreeSpace.Checked; end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TFileSystemCopyOperation then SetOperationOptions(Operation as TFileSystemCopyOperation) else if Operation is TFileSystemMoveOperation then SetOperationOptions(Operation as TFileSystemMoveOperation); end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(CopyOperation: TFileSystemCopyOperation); var Options: TCopyAttributesOptions; begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeOverwriteOlder; 3: FileExistsOption := fsoofeSkip; end; if gOverwriteFolder then case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeDelete; 2: DirExistsOption := fsoodeCopyInto; 3: DirExistsOption := fsoodeSkip; end else case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: SetPropertyError := fsoospeNone; 1: SetPropertyError := fsoospeDontSet; 2: SetPropertyError := fsoospeIgnoreErrors; end; case cbFollowLinks.State of cbChecked : SymLinkOption := fsooslFollow; cbUnchecked: SymLinkOption := fsooslDontFollow; cbGrayed : SymLinkOption := fsooslNone; end; Options := CopyAttributesOptions; SetCopyOption(Options, caoCopyAttributes, cbCopyAttributes.Checked); SetCopyOption(Options, caoCopyTime, cbCopyTime.Checked); SetCopyOption(Options, caoCopyOwnership, cbCopyOwnership.Checked); SetCopyOption(Options, caoCopyPermissions, cbCopyPermissions.Checked); SetCopyOption(Options, caoRemoveReadOnlyAttr, cbDropReadOnlyFlag.Checked); CopyAttributesOptions := Options; CorrectSymLinks := cbCorrectLinks.Checked; CheckFreeSpace := cbCheckFreeSpace.Checked; ReserveSpace := cbReserveSpace.Checked; if Assigned(FTemplate) then begin SearchTemplate := FTemplate; FTemplate := nil; end; ExcludeEmptyTemplateDirectories := cbExcludeEmptyDirectories.Checked; end; end; procedure TFileSystemCopyMoveOperationOptionsUI.SetOperationOptions(MoveOperation: TFileSystemMoveOperation); var Options: TCopyAttributesOptions; begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeOverwriteOlder; 3: FileExistsOption := fsoofeSkip; end; if gOverwriteFolder then case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeDelete; 2: DirExistsOption := fsoodeCopyInto; 3: DirExistsOption := fsoodeSkip; end else case cmbDirectoryExists.ItemIndex of 0: DirExistsOption := fsoodeNone; 1: DirExistsOption := fsoodeCopyInto; 2: DirExistsOption := fsoodeSkip; end; case cmbSetPropertyError.ItemIndex of 0: SetPropertyError := fsoospeNone; 1: SetPropertyError := fsoospeDontSet; 2: SetPropertyError := fsoospeIgnoreErrors; end; CorrectSymLinks := cbCorrectLinks.Checked; CheckFreeSpace := cbCheckFreeSpace.Checked; ReserveSpace := cbReserveSpace.Checked; Options := CopyAttributesOptions; SetCopyOption(Options, caoCopyAttributes, cbCopyAttributes.Checked); SetCopyOption(Options, caoCopyTime, cbCopyTime.Checked); SetCopyOption(Options, caoCopyOwnership, cbCopyOwnership.Checked); SetCopyOption(Options, caoCopyPermissions, cbCopyPermissions.Checked); CopyAttributesOptions := Options; if Assigned(FTemplate) then begin SearchTemplate := FTemplate; FTemplate := nil; end; ExcludeEmptyTemplateDirectories := cbExcludeEmptyDirectories.Checked; end; end; { TFileSystemCopyOperationOptionsUI } constructor TFileSystemCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; cbDropReadOnlyFlag.Visible := True; cbFollowLinks.Visible := True; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemlistoperation.pas�����������������������������0000644�0001750�0000144�00000004271�12612505011�025703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource ; type { TFileSystemListOperation } TFileSystemListOperation = class(TFileSourceListOperation) private procedure FlatView(const APath: String); public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses DCOSUtils, uFile, uFindEx, uOSUtils, uFileSystemFileSource; procedure TFileSystemListOperation.FlatView(const APath: String); var AFile: TFile; sr: TSearchRecEx; begin try if FindFirstEx(APath + '*', faAnyFile, sr) = 0 then repeat CheckOperationState; if (sr.Name = '.') or (sr.Name = '..') then Continue; if FPS_ISDIR(sr.Attr) then FlatView(APath + sr.Name + DirectorySeparator) else begin AFile := TFileSystemFileSource.CreateFile(APath, @sr); FFiles.Add(AFile); end; until FindNextEx(sr) <> 0; finally FindCloseEx(sr); end; end; constructor TFileSystemListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); inherited Create(aFileSource, aPath); end; procedure TFileSystemListOperation.MainExecute; var AFile: TFile; sr: TSearchRecEx; IsRootPath, Found: Boolean; begin FFiles.Clear; if FFlatView then begin FlatView(Path); Exit; end; IsRootPath := FileSource.IsPathAtRoot(Path); Found := FindFirstEx(FFiles.Path + '*', faAnyFile, sr) = 0; try if not Found then begin { No files have been found. } if not IsRootPath then begin AFile := TFileSystemFileSource.CreateFile(Path); AFile.Name := '..'; AFile.Attributes := faFolder; FFiles.Add(AFile); end; end else begin repeat CheckOperationState; if sr.Name='.' then Continue; // Don't include '..' in the root directory. if (sr.Name='..') and IsRootPath then Continue; AFile := TFileSystemFileSource.CreateFile(Path, @sr); FFiles.Add(AFile); until FindNextEx(sr)<>0; end; finally FindCloseEx(sr); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemexecuteoperation.pas��������������������������0000644�0001750�0000144�00000004727�12612505011�026400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileSourceExecuteOperation, uFileSystemFileSource, uFile; type { TFileSystemExecuteOperation } TFileSystemExecuteOperation = class(TFileSourceExecuteOperation) private FFileSystemFileSource: IFileSystemFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses Forms, Controls, DCOSUtils, uOSUtils, uOSForms, uShellContextMenu, uExceptions; constructor TFileSystemExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FFileSystemFileSource := aTargetFileSource as IFileSystemFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TFileSystemExecuteOperation.Initialize; begin Screen.Cursor:= crHourGlass; end; procedure TFileSystemExecuteOperation.MainExecute; var aFiles: TFiles; begin if Verb = 'properties' then begin FExecuteOperationResult:= fseorSuccess; aFiles:= TFiles.Create(ExecutableFile.Path); try aFiles.Add(ExecutableFile.Clone); try Screen.Cursor:= crDefault; ShowFilePropertiesDialog(FFileSystemFileSource, aFiles); except on E: EContextMenuException do ShowException(E); end; finally FreeAndNil(aFiles); end; Exit; end; // if file is link to folder then return fseorSymLink if FileIsLinkToFolder(AbsolutePath, FResultString) then begin FExecuteOperationResult:= fseorSymLink; Exit; end; // try to open by system mbSetCurrentDir(CurrentPath); case ShellExecute(AbsolutePath) of True: FExecuteOperationResult:= fseorSuccess; False: FExecuteOperationResult:= fseorError; end; end; procedure TFileSystemExecuteOperation.Finalize; begin Screen.Cursor:= crDefault; end; end. �����������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemcalcchecksumoperation.pas���������������������0000644�0001750�0000144�00000032243�12612505011�027355� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSystemCalcChecksumOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, uFileSourceCalcChecksumOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog, uHash, DCClassesUtf8; type { TFileSystemCalcChecksumOperation } TFileSystemCalcChecksumOperation = class(TFileSourceCalcChecksumOperation) private FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCalcChecksumOperationStatistics; // local copy of statistics FCheckSumFile: TStringListEx; FBuffer: Pointer; FBufferSize: LongWord; FChecksumsList: TObjectList; // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; procedure InitializeVerifyMode; procedure InitializeRightToLeft(const Path: String); procedure InitializeLeftToRight(const Path: String); procedure AddFile(const Path, FileName, Hash: String); function CheckSumCalc(aFile: TFile; out aValue: String): Boolean; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function CalcChecksumProcessFile(aFile: TFile): Boolean; function VerifyChecksumProcessFile(aFile: TFile; ExpectedChecksum: String): Boolean; public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses LCLProc, FileUtil, uLng, uFileSystemUtil, uFileSystemFileSource, DCOSUtils, DCStrUtils; type TChecksumEntry = class public Checksum: String; Algorithm: THashAlgorithm; end; const SFV_HEADER = '; Generated by WIN-SFV32 v1.0'; DC_HEADER = '; (Compatible: Double Commander)'; constructor TFileSystemCalcChecksumOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); begin FBuffer := nil; FSymLinkOption := fsooslNone; FSkipErrors := False; FFullFilesTree := nil; FCheckSumFile := TStringListEx.Create; FChecksumsList := TObjectList.Create(True); inherited Create(aTargetFileSource, theFiles, aTargetPath, aTargetMask); end; destructor TFileSystemCalcChecksumOperation.Destroy; begin inherited Destroy; if Assigned(FBuffer) then begin FreeMem(FBuffer); FBuffer := nil; end; if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); if Assigned(FCheckSumFile) then FreeAndNil(FCheckSumFile); if Assigned(FChecksumsList) then FreeAndNil(FChecksumsList); end; procedure TFileSystemCalcChecksumOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; case Mode of checksum_calc: begin FillAndCount(Files, False, False, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) if (Algorithm = HASH_SFV) and OneFile then begin FCheckSumFile.Add(SFV_HEADER); FCheckSumFile.Add(DC_HEADER); end; end; checksum_verify: InitializeVerifyMode; end; FBufferSize := gHashBlockSize; GetMem(FBuffer, FBufferSize); end; procedure TFileSystemCalcChecksumOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; OldDoneBytes: Int64; // for if there was an error Entry: TChecksumEntry; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; with FStatistics do begin CurrentFile := aFile.Path + aFile.Name; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(FStatistics); if not aFile.IsDirectory then begin // If there will be an error in ProcessFile the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; case Mode of checksum_calc: CalcChecksumProcessFile(aFile); checksum_verify: begin Entry := FChecksumsList.Items[CurrentFileIndex] as TChecksumEntry; Algorithm := Entry.Algorithm; VerifyChecksumProcessFile(aFile, Entry.Checksum); end; end; with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; end; CheckOperationState; end; case Mode of checksum_calc: // make result if OneFile then try FCheckSumFile.SaveToFile(TargetMask); except on E: EFCreateError do AskQuestion(rsMsgErrECreate + ' ' + TargetMask + ':', E.Message, [fsourOk], fsourOk, fsourOk); on E: EWriteError do AskQuestion(rsMsgErrEWrite + ' ' + TargetMask + ':', E.Message, [fsourOk], fsourOk, fsourOk); end; checksum_verify: begin end; end; end; procedure TFileSystemCalcChecksumOperation.Finalize; begin end; procedure TFileSystemCalcChecksumOperation.AddFile(const Path, FileName, Hash: String); var aFileToVerify: TFile; Entry: TChecksumEntry; begin try aFileToVerify := TFileSystemFileSource.CreateFileFromFile(Path + FileName); if not (aFileToVerify.IsDirectory or aFileToVerify.IsLinkToDirectory) then begin with FStatistics do begin TotalFiles := TotalFiles + 1; TotalBytes := TotalBytes + aFileToVerify.Size; end; FFullFilesTree.Add(aFileToVerify); Entry := TChecksumEntry.Create; FChecksumsList.Add(Entry); Entry.Checksum := Hash; Entry.Algorithm := Algorithm; end else FreeAndNil(aFileToVerify); except on EFileNotFound do begin AddString(FResult.Missing, FileName); end else begin FreeAndNil(aFileToVerify); raise; end; end; end; procedure TFileSystemCalcChecksumOperation.InitializeRightToLeft(const Path: String); var I: Integer; Hash, FileName: String; begin for I := 1 to FCheckSumFile.Count - 1 do begin // Skip empty lines if (Length(FCheckSumFile[I]) = 0) then Continue; // Skip comments if (FCheckSumFile[I][1] = ';') then Continue; FileName := FCheckSumFile[I]; Hash := Copy(FileName, Length(FileName) - 7, 8); FileName := Copy(FileName, 1, Length(FileName) - 9); AddFile(Path, FileName, Hash); CheckOperationState; end; end; procedure TFileSystemCalcChecksumOperation.InitializeLeftToRight(const Path: String); var I: Integer; FileName: String; begin for I := 0 to FCheckSumFile.Count - 1 do begin // Skip empty lines if (Length(FCheckSumFile[I]) = 0) then Continue; // Skip comments if (FCheckSumFile[I][1] = ';') then Continue; FileName := Copy(FCheckSumFile.ValueFromIndex[I], 2, MaxInt); AddFile(Path, FileName, FCheckSumFile.Names[I]); CheckOperationState; end; end; procedure TFileSystemCalcChecksumOperation.InitializeVerifyMode; var aFile: TFile; Entry: TChecksumEntry; CurrentFileIndex: Integer; begin FFullFilesTree := TFiles.Create(Files.Path); if Length(TargetPath) > 0 then begin aFile := Files[0].Clone; with FStatistics do begin TotalFiles := TotalFiles + 1; TotalBytes := TotalBytes + aFile.Size; end; FFullFilesTree.Add(aFile); Entry := TChecksumEntry.Create; FChecksumsList.Add(Entry); Entry.Checksum := TargetPath; Entry.Algorithm := Algorithm; CheckOperationState; Exit; end; FChecksumsList.Clear; for CurrentFileIndex := 0 to Files.Count - 1 do begin aFile := Files[CurrentFileIndex]; FCheckSumFile.Clear; FCheckSumFile.NameValueSeparator:= #32; FCheckSumFile.LoadFromFile(aFile.FullPath); if (FCheckSumFile.Count = 0) then Continue; Algorithm := FileExtToHashAlg(aFile.Extension); if (Algorithm = HASH_SFV) and (FCheckSumFile[0] = SFV_HEADER) then InitializeRightToLeft(aFile.Path) else begin InitializeLeftToRight(aFile.Path); end; end; end; function TFileSystemCalcChecksumOperation.CalcChecksumProcessFile(aFile: TFile): Boolean; var FileName: String; sCheckSum: String; begin Result := False; FileName := aFile.Path + aFile.Name; if not OneFile then begin FCheckSumFile.Clear; if Algorithm = HASH_SFV then begin FCheckSumFile.Add(SFV_HEADER); FCheckSumFile.Add(DC_HEADER); end; end; CheckSumCalc(aFile, sCheckSum); if Algorithm = HASH_SFV then begin FCheckSumFile.Add(ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name + ' ' + sCheckSum); end else begin FCheckSumFile.Add(sCheckSum + ' *' + ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name); end; if not OneFile then try FCheckSumFile.SaveToFile(FileName + '.' + HashFileExt[Algorithm]); except on E: EFCreateError do AskQuestion(rsMsgErrECreate + ' ' + FileName + '.' + HashFileExt[Algorithm] + ':', E.Message, [fsourOk], fsourOk, fsourOk); on E: EWriteError do AskQuestion(rsMsgErrEWrite + ' ' + FileName + '.' + HashFileExt[Algorithm] + ':', E.Message, [fsourOk], fsourOk, fsourOk); end; end; function TFileSystemCalcChecksumOperation.VerifyChecksumProcessFile( aFile: TFile; ExpectedChecksum: String): Boolean; var sCheckSum: String; sFileName: String; begin Result:= False; sFileName:= ExtractDirLevel(FFullFilesTree.Path, aFile.Path) + aFile.Name; if (CheckSumCalc(aFile, sCheckSum) = False) then AddString(FResult.ReadError, sFileName) else begin if (CompareText(sCheckSum, ExpectedChecksum) = 0) then AddString(FResult.Success, sFileName) else AddString(FResult.Broken, sFileName); end; end; function TFileSystemCalcChecksumOperation.CheckSumCalc(aFile: TFile; out aValue: String): Boolean; var hFile: THandle; Context: THashContext; BytesRead, BytesToRead: Int64; bRetryRead: Boolean; TotalBytesToRead: Int64 = 0; begin hFile := feInvalidHandle; BytesToRead := FBufferSize; HashInit(Context, Algorithm); try hFile:= mbFileOpen(aFile.FullPath, fmOpenRead or fmShareDenyNone); Result:= hFile <> feInvalidHandle; if Result then begin TotalBytesToRead := mbFileSize(aFile.FullPath); while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; repeat try bRetryRead := False; BytesRead := FileRead(hFile, FBuffer^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); TotalBytesToRead := TotalBytesToRead - BytesRead; HashUpdate(Context, FBuffer^, BytesRead); except on E: EReadError do begin if gSkipFileOpError then begin LogMessage(rsMsgErrERead + ' ' + aFile.FullPath + ': ' + E.Message, [], lmtError); Exit(False); end else case AskQuestion(rsMsgErrERead + ' ' + aFile.FullPath + ': ', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: RaiseAbortOperation; fsourSkip: Exit(False); end; // case end; end; until not bRetryRead; with FStatistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(FStatistics); end; CheckOperationState; // check pause and stop end;//while end; finally HashFinal(Context, aValue); if hFile <> feInvalidHandle then begin FileClose(hFile); hFile := feInvalidHandle; end; end; end; procedure TFileSystemCalcChecksumOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/filesystem/ufilesystemwipeoperation.pas�����������������������������0000644�0001750�0000144�00000031005�12365151656�025710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This module implements a secure erase of disk media as per the Department of Defense clearing and sanitizing standard: DOD 5220.22-M The standard states that hard disk media is erased by overwriting with a character, then the character's complement, and then a random character. Note that the standard specicically states that this method is not suitable for TOP SECRET information. TOP SECRET data sanatizing is only achievable by a Type 1 or 2 degauss of the disk, or by disintegrating, incinerating, pulverizing, shreding, or melting the disk. Copyright (C) 2008-2012 Alexander Koblov (alexx2000@mail.ru) Based on: WP - wipes files in a secure way. version 3.2 - By Uri Fridman. urifrid@yahoo.com www.geocities.com/urifrid 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 uFileSystemWipeOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceWipeOperation, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uDescr, uGlobs, uLog; type { TFileSystemWipeOperation } TFileSystemWipeOperation = class(TFileSourceWipeOperation) private FEverythingOK: Boolean; FErrors, files, directories: Integer; buffer: array [0..4095] of Byte; procedure Fill(chr: Integer); procedure SecureDelete(pass: Integer; FileName: String); procedure WipeDir(dir: string); procedure WipeFile(filename: String); private FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceWipeOperationStatistics; // local copy of statistics FDescription: TDescription; // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected procedure Wipe(aFile: TFile); function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uDebug, uLng, uFindEx, DCClassesUtf8, uFileSystemUtil, DCOSUtils; constructor TFileSystemWipeOperation.Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := False; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; if gProcessComments then FDescription := TDescription.Create(True) else FDescription := nil; inherited Create(aTargetFileSource, theFilesToWipe); end; destructor TFileSystemWipeOperation.Destroy; begin inherited Destroy; if Assigned(FDescription) then begin FDescription.SaveDescription; FreeAndNil(FDescription); end; if Assigned(FFullFilesTreeToDelete) then FreeAndNil(FFullFilesTreeToDelete); end; procedure TFileSystemWipeOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(FilesToWipe, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) if gProcessComments then FDescription.Clear; FEverythingOK := True; end; procedure TFileSystemWipeOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; OldDoneBytes: Int64; // for if there was an error begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); // If there will be an error in Wipe the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := FStatistics.DoneBytes; Wipe(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; // Correct statistics if file not correctly processed. if DoneBytes < (OldDoneBytes + aFile.Size) then DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; CheckOperationState; end; end; procedure TFileSystemWipeOperation.Finalize; begin end; //fill buffer with characters //0 = with 0, 1 = with 1 and 2 = random procedure TFileSystemWipeOperation.Fill(chr: Integer); var I: Integer; begin case chr of 0: begin for I := Low(buffer) to High(buffer) do buffer[I] := $00; end; 1: begin for I := Low(buffer) to High(buffer) do buffer[I] := $FF; end; 2: begin for I := Low(buffer) to High(buffer) do buffer[I] := Random($100); end; end; end; procedure TFileSystemWipeOperation.SecureDelete(pass: Integer; FileName: String); var i, j, n: Integer; max: Int64; fs: TFileStreamEx; sTempFileName: String; // renames file to delete begin if mbFileAccess(FileName, fmOpenWrite) then begin sTempFileName:= GetTempName(ExtractFilePath(FileName)) + '.tmp'; if mbRenameFile(FileName, sTempFileName) then begin FileName:= sTempFileName; end else begin ShowError(Format(rsMsgErrRename, [FileName, sTempFileName])); Exit; end; end else begin ShowError(rsMsgErrEOpen + #32 + FileName); Exit; end; fs := TFilestreamEx.Create(FileName, fmOpenReadWrite or fmShareExclusive); try for i := 1 to pass do begin //---------------Progress-------------- CheckOperationState; // check pause and stop FStatistics.CurrentFileTotalBytes:= fs.Size * 3; FStatistics.CurrentFileDoneBytes:= 0; UpdateStatistics(FStatistics); //------------------------------------- for j:= 0 to 2 do begin fill(j); max := fs.Size; fs.Position := 0; while max > 0 do begin if max > SizeOf(buffer) then n := SizeOf(buffer) else n := max; fs.Write(Buffer, n); max := max - n; //---------------Progress-------------- with FStatistics do begin Inc(CurrentFileDoneBytes, n); Inc(DoneBytes, n div (3 * pass)); UpdateStatistics(FStatistics); CheckOperationState; // check pause and stop end; //------------------------------------- end; FileFlush(fs.Handle); CheckOperationState; // check pause and stop end; end; FileTruncate(fs.Handle, 0); FreeAndNil(fs); except on E: Exception do begin FreeAndNil(fs); ShowError(E.Message); Exit; end; end; if not mbDeleteFile(FileName) then begin ShowError(Format(rsMsgNotDelete, [FileName])); Exit; end; files:= files+1; DCDebug('OK'); FEverythingOK:= True; end; procedure TFileSystemWipeOperation.WipeDir(dir: string); var Search: TSearchRecEx; ok: Integer; sPath: String; begin sPath:= IncludeTrailingPathDelimiter(dir); ok:= FindFirstEx(sPath + '*', faAnyFile, Search); while ok = 0 do begin if ((Search.Name <> '.' ) and (Search.Name <> '..')) then begin //remove read-only attr try if not mbFileSetReadOnly(sPath + Search.Name, False) then DCDebug('wp: FAILED when trying to remove read-only attr on '+ sPath + Search.Name); except DCDebug('wp: FAILED when trying to remove read-only attr on '+ sPath + Search.Name); end; if fpS_ISDIR(Search.Attr) then begin DCDebug('Entering '+ sPath + Search.Name); WipeDir(sPath + Search.Name); end else begin DCDebug('Wiping '+ sPath + Search.Name); SecureDelete(gWipePassNumber, sPath + Search.Name); end; end; ok:= FindNextEx(Search); end; FindCloseEx(Search); try if FEverythingOK then begin DCDebug('Wiping ' + dir); if not mbRemoveDir(dir) then begin DCDebug('wp: error wiping directory ' + dir); // write log ------------------------------------------------------------------- LogMessage(Format(rsMsgLogError+rsMsgLogWipeDir, [dir]), [log_dir_op, log_delete], lmtError); //------------------------------------------------------------------------------ end else begin directories:= directories + 1; DCDebug('OK'); // write log ------------------------------------------------------------------- LogMessage(Format(rsMsgLogSuccess+rsMsgLogWipeDir, [dir]), [log_dir_op, log_delete], lmtSuccess); //------------------------------------------------------------------------------ end; end; except on EInOutError do DCDebug('Couldn''t remove '+ dir); end; end; procedure TFileSystemWipeOperation.WipeFile(filename: String); var Found: Integer; SRec: TSearchRecEx; sPath: String; begin sPath:= ExtractFilePath(filename); { Use FindFirst so we can specify wild cards in the filename } Found:= FindFirstEx(filename,faReadOnly or faSysFile or faArchive or faHidden, SRec); if Found <> 0 then begin DCDebug('wp: file not found: ', filename); FErrors:= FErrors + 1; Exit; end; while Found = 0 do begin //remove read-only attr try if not mbFileSetReadOnly(sPath + SRec.Name, False) then DCDebug('wp: FAILED when trying to remove read-only attr on '+ sPath + SRec.Name); except DCDebug('wp: can''t wipe '+ sPath + SRec.Name + ', file might be in use.'); FEverythingOK:= False; FErrors:= FErrors + 1; Exit; end; DCDebug('Wiping ' + sPath + SRec.Name); SecureDelete(gWipePassNumber, sPath + SRec.Name); // write log ------------------------------------------------------------------- if FEverythingOK then LogMessage(Format(rsMsgLogSuccess+rsMsgLogWipe, [sPath + SRec.Name]), [log_delete], lmtSuccess) else LogMessage(Format(rsMsgLogError+rsMsgLogWipe, [sPath + SRec.Name]), [log_delete], lmtError); // ----------------------------------------------------------------------------- Found:= FindNextEx(SRec); { Find the next file } end; FindCloseEx(SRec); end; procedure TFileSystemWipeOperation.Wipe(aFile: TFile); var FileName: String; begin try FileName:= aFile.Path + aFile.Name; if aFile.AttributesProperty.IsDirectory then // directory WipeDir(FileName) else // files WipeFile(FileName); // process comments if need if gProcessComments then FDescription.DeleteDescription(FileName); except DCDebug('Can not wipe ', FileName); end; end; function TFileSystemWipeOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin FEverythingOK:= False; Inc(FErrors); if gSkipFileOpError then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TFileSystemWipeOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationui.pas������������������������������������������0000644�0001750�0000144�00000003040�12266246673�023153� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperationUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceOperationUIResponse = (fsourInvalid, fsourOk, fsourNo, fsourYes, fsourCancel, fsourNone, fsourAppend, // for files fsourResume, // for files fsourCopyInto, // for directories fsourCopyIntoAll, // for directories fsourOverwrite, fsourOverwriteAll, fsourOverwriteOlder, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourRenameSource, fsourSkip, fsourSkipAll, fsourIgnoreAll, fsourAll, fsourRetry, fsourAbort); {en General interface for communication: operation <-> user. } TFileSourceOperationUI = class public constructor Create; virtual; destructor Destroy; override; function AskQuestion(Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse ) : TFileSourceOperationUIResponse; virtual abstract; // Add possibility to display files properties (for example: to compare older - newer) // Add general option "remember this choice for all files of this type" (checkbox) end; implementation constructor TFileSourceOperationUI.Create; begin inherited; end; destructor TFileSourceOperationUI.Destroy; begin inherited; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcemoveoperation.pas����������������������������������������0000644�0001750�0000144�00000013305�12550156450�023476� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceMoveOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that moves or renames files within the same file source (for example: in the same archive, in the same ftp server). } { TFileSourceMoveOperation } TFileSourceMoveOperation = class(TFileSourceOperation) private FStatistics: TFileSourceMoveOperationStatistics; FStatisticsAtStartTime: TFileSourceMoveOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FSourceFiles: TFiles; FTargetPath: String; FRenameMask: String; protected FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceMoveOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property SourceFiles: TFiles read FSourceFiles; property TargetPath: String read FTargetPath; public {en @param(aFileSource File source within which the operation should take place. Class takes ownership of the pointer.) @param(theSourceFiles Files which are to be moved. Class takes ownership of the pointer.) @param(aTargetPath Path in the file source where the files should be moved.) } constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceMoveOperationStatistics; property RenameMask: String read FRenameMask write FRenameMask; property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; end; implementation uses uDCUtils, uLng; // -- TFileSourceMoveOperation ------------------------------------------------ constructor TFileSourceMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin with FStatistics do begin CurrentFileFrom := ''; CurrentFileTo := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aFileSource); FFileSource := aFileSource; FSourceFiles := theSourceFiles; theSourceFiles := nil; FTargetPath := IncludeTrailingPathDelimiter(aTargetPath); FRenameMask := ''; end; destructor TFileSourceMoveOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FSourceFiles) then FreeAndNil(FSourceFiles); end; procedure TFileSourceMoveOperation.UpdateStatistics(var NewStatistics: TFileSourceMoveOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceMoveOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceMoveOperation.RetrieveStatistics: TFileSourceMoveOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceMoveOperation.GetID: TFileSourceOperationType; begin Result := fsoMove; end; procedure TFileSourceMoveOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 2); Paths[0] := FSourceFiles.Path; // Move source path Paths[1] := FTargetPath; // Move target path FFileSource.Reload(Paths); end; function TFileSourceMoveOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperMovingSomethingTo, [SourceFiles[0].Name, TargetPath]) else Result := Format(rsOperMovingFromTo, [SourceFiles.Path, TargetPath]); end; else Result := rsOperMoving; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperation.pas��������������������������������������������0000644�0001750�0000144�00000112270�12646515343�022616� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperation; {$mode objfpc}{$H+} // If defined causes to synchronize executing callback for events. // This ensures that the callbacks always have the operation in the current state, // which might be safer, but it is slower because the operation must wait // until all callbacks are executed. // If undefined then all events are sent asynchronously, which is faster. // However, it may result in those events to be reported much later after // they have happened in the operation and the operation state might // not be valid anymore. //{$DEFINE fsoSynchronizeEvents} // If defined it will only send one event and will not send more // until that event is processed (so some events may be lost). // This normally shouldn't be defined. //{$DEFINE fsoSendOnlyCurrentState} //{$DEFINE debugFileSourceOperation} interface uses Classes, SysUtils, syncobjs, uLng, uFileSourceOperationOptionsUI, uFileSourceOperationTypes, uFileSourceOperationUI; type TFileSourceOperationState = (fsosNotStarted, //<en before operation has started fsosStarting, //<en responded to Start command fsosRunning, fsosPausing, //<en responded to Pause command fsosPaused, fsosWaitingForFeedback, //<en waiting for a response from a user through the assigned UI fsosWaitingForConnection, //<en waiting for an available connection to TFileSource fsosStopping, //<en responded to Stop command fsosStopped); //<en finished due to Stop command or on its own TFileSourceOperationStates = set of TFileSourceOperationState; const fsosAllStates = [Low(TFileSourceOperationState) .. High(TFileSourceOperationState)]; type TFileSourceOperationResult = (fsorFinished, //<en operation has finished successfully fsorAborted); //<en operation has been aborted by user TFileSourceOperationDescriptionDetails = (fsoddJob, //<en What the operation is supposed to be doing in general: copying, deleting, etc. fsoddJobAndTarget); //<en Job + on what the operation works: copying from /path to /path2, deleting from /path, etc. const FileSourceOperationStateText: array[TFileSourceOperationState] of string = (rsOperNotStarted, rsOperStarting, rsOperRunning, rsOperPausing, rsOperPaused, rsOperWaitingForFeedback, rsOperWaitingForConnection, rsOperStopping, rsOperStopped); FileSourceOperationResultText: array[TFileSourceOperationResult] of string = (rsOperFinished, rsOperAborted); type TFileSourceOperation = class; TFileSourceOperationStateChangedNotify = procedure(Operation: TFileSourceOperation; State: TFileSourceOperationState) of object; TAskQuestionFunction = function(Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse ) : TFileSourceOperationUIResponse of object; TAbortOperationFunction = procedure of object; TCheckOperationStateFunction = procedure of object; TFileSourceOperationClass = class of TFileSourceOperation; {en Base class for each file source operation. } { TFileSourceOperation } TFileSourceOperation = class private { Progress and StopReason don't need synchronization, because they are written to from a single thread only (operation running thread) and just read from other threads. DesiredState works the other way around. It is written to only by the GUI thread and read from only by the operation running thread, so also no synchronization needed. State must by synchronized as its written to by both threads. } {en General progress of the operation (0 - 100 %). Specific statistics are returned by the individual operations. } FProgress: Double; FDesiredState: TFileSourceOperationState; FOperationResult: TFileSourceOperationResult; FState: TFileSourceOperationState; FStateLock: TCriticalSection; {en This event is used to wait for start and wait for unpausing. } FPauseEvent: TSimpleEvent; {en This event is used to wait for an available connection to TFileSource. } FConnectionAvailableEvent: TSimpleEvent; {en A list of listeners of state-changed event. Must be synchronized using FEventsLock. } FStateChangedEventListeners: TFPList; {en Used to synchronize access to: - FStateChangedEventListeners - FScheduledEventsListenersCalls - FNoEventsListenersCallsScheduledEvent } FEventsLock: TCriticalSection; {en The thread that runs this operation. It is used for synchronizing events (notifying of them from the main thread). } FThread: TThread; {$IFNDEF fsoSynchronizeEvents} {en How many events are scheduled to execute. } FScheduledEventsListenersCalls: Integer; {en Before finishing, the operation waits for this event, so that it doesn't finish until all scheduled calls to CallEventsListeners are made. } FNoEventsListenersCallsScheduledEvent: PRTLEvent; {$ENDIF} {en List of assigned user interfaces that operation can use to ask user questions. Don't access this list from the operation thread. } FUserInterfaces: TFPList; // of TFileSourceOperationUI {en Event used to notify operation thread that an UI was assigned, so it can wake up and ask questions. } FUserInterfaceAssignedEvent: PRTLEvent; // Parameters for UI question. // Used to pass from operation thread to GUI thread. FUIMessage: String; FUIQuestion: String; FUIPossibleResponses: array of TFileSourceOperationUIResponse; FUIDefaultOKResponse: TFileSourceOperationUIResponse; FUIDefaultCancelResponse: TFileSourceOperationUIResponse; FUIResponse: TFileSourceOperationUIResponse; FTryAskQuestionResult: Boolean; {en Used to determine whether the operation has started or not. } FOperationInitialized : Boolean; {en Last start time (when operation started or resumed after pause). } FStartTime: TDateTime; {en File source on which this operation is executed. } FFileSource: IInterface; // This function is called from main thread. {$IFDEF fsoSynchronizeEvents} procedure CallEventsListeners; {$ELSE} procedure CallEventsListeners(Data: Pointer); {$ENDIF} // This should be run from GUI thread only. procedure TryAskQuestion; {en Checks (under lock) if current state is one of ExpectedStates. If yes then changes state to NewState and returns @true. If no then does not change state and returns @false. If state already is NewState then does nothing and returns @true. } function UpdateState(NewState: TFileSourceOperationState; ExpectedStates: TFileSourceOperationStates = fsosAllStates): Boolean; function GetState: TFileSourceOperationState; function GetUserInterface: TFileSourceOperationUI; procedure UpdateStartTime(NewStartTime: TDateTime); {en Must be called from the operation thread. @param(DesiredStates If desired state is one of these states the pause is executed. Otherwise nothing happens.) } procedure DoPauseIfNeeded(DesiredStates: TFileSourceOperationStates); {en Must be called from the controller thread (GUI). } procedure DoUnPause; function DoWaitForConnection: TWaitResult; {en Pauses the operation until it is notified that a connection is available. } function WaitForConnection: TWaitResult; {en Reloads any file sources changed by the operation. } procedure ReloadFileSources; protected {en File source connection. } FConnection: TObject; {en If @true a connection is requested from file source before the operation starts. By default this is @true if file source has fspUsesConnections property, but this variable may be changed on a per-operation basis in the operation's constructor. } FNeedsConnection: Boolean; {en If @true then file source should create a new connection on request. By default this is @false, but this variable can be changed on a per-operation basis. } FWantsNewConnection: Boolean; {en Sets the time to wait while trying to request a connection before terminating the attempt. The default value is INFINITE, but this variable can be changed on a per-operation basis. } FConnectionTimeout: Cardinal; {en So that when operation runs another operation the inner operation can access some inheritable properties, like user interface. } FParentOperation: TFileSourceOperation; procedure UpdateProgress(NewProgress: Double); function GetDesiredState: TFileSourceOperationState; {en Reloads changed file sources. It is called from main thread. } procedure DoReloadFileSources; virtual; {en Retrieves an available connection from the file source (TFileSourceConnection). } function GetConnection: TObject; virtual; {en This should be set to the correct file operation type in each concrete descendant. We rely on this when making a decision based on operation type. This way it's easier to maintain different sorts of things we can do with operations and statistics, without having to include knowledge of those things in the operations classes hierarchy. } function GetID: TFileSourceOperationType; virtual abstract; procedure Initialize; virtual; procedure MainExecute; virtual abstract; procedure Finalize; virtual; {en Notifies all listeners that operation has changed its state. This function can be called from the operation thread or from the main thread. Don't call it under the FEventsLock lock. } procedure NotifyStateChanged(NewState: TFileSourceOperationState); {en General function to ask questions from operations. It is run from the operation thread and is thread-safe. The function stops executing the operation until the question can be asked and the response from the user is received. While the operation is waiting for a response it may be aborted by the user in which case the function will throw EFileSourceOperationAborting exception. The most recently (last) assigned user interface is used to ask the question. } function AskQuestion( Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse ) : TFileSourceOperationUIResponse; {en Remember statistics at start time (used for estimating remaining time). } procedure UpdateStatisticsAtStartTime; virtual abstract; {en This function does some checks on the current and desired state of the operation: If the desired state is fsosPaused it pauses the thread. If the desired state is fsosStopped it throws EFileSourceOperationAborting exception. The function should be run from the operation thread from the most repeated points. } procedure CheckOperationState; function AppProcessMessages(CheckState: Boolean = False): Boolean; class procedure RaiseAbortOperation; property ParentOperation: TFileSourceOperation read FParentOperation write FParentOperation; public constructor Create(const aFileSource: IInterface); virtual; destructor Destroy; override; {en Executes operation. } procedure Execute; { The Start/Pause/Stop functions only have sense if the operation is run in a separate thread (most probably via OperationsManager). } {en Tries to start/resume operation. First immediately sets state to fsosStarting and after it is started to fsosRunning. } procedure Start; {en Tries to put operation into a paused state. First immediately sets state to fsosPausing and after it is paused to fsosPaused. } procedure Pause; {en Tries to stop operation. First immediately sets state to fsosStopping and after it is stopped to fsosStopped. } procedure Stop; {en Prevents auto start of the operation on Execute. Makes sense only before first call to Execute. } procedure PreventStart; {en If the operation can be paused it pauses otherwise starts the operation. } procedure TogglePause; {en Notifies the operation that possibly a connection is available from the file source, but it does not guarantee it. The operation should ask the file source for the connection. Usually will be called from the file source. } procedure ConnectionAvailableNotify; {en Sets the thread assigned to this operation. } procedure AssignThread(AThread: TThread); {en Adds a function to call when the operation's state changes. @param(States The function will be called if the operation changes its state to one of these states.) } procedure AddStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); {en Removes a registered function callback for state-changed event. } procedure RemoveStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); // These functions are run from the GUI thread. procedure AddUserInterface(UserInterface: TFileSourceOperationUI); procedure RemoveUserInterface(UserInterface: TFileSourceOperationUI); {en Returns graphical interface class for user to set operation options. } class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; virtual; class function GetOperationClass: TFileSourceOperationClass; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; virtual; property Thread: TThread read FThread; property Progress: Double read FProgress; property ID: TFileSourceOperationType read GetID; property State: TFileSourceOperationState read GetState; property StartTime: TDateTime read FStartTime; property Result: TFileSourceOperationResult read FOperationResult; property FileSource: IInterface read FFileSource; property WantsNewConnection: Boolean read FWantsNewConnection write FWantsNewConnection; end; EFileSourceOperationAborting = class(Exception) public constructor Create; reintroduce; end; implementation uses InterfaceBase, Forms, uFileSource, uFileSourceProperty, uDebug, uExceptions {$IFNDEF fsoSynchronizeEvents} , uGuiMessageQueue {$ENDIF} ; type PStateChangedEventEntry = ^TStateChangedEventEntry; TStateChangedEventEntry = record FunctionToCall: TFileSourceOperationStateChangedNotify; States : TFileSourceOperationStates; end; PUserInterfacesEntry = ^TUserInterfacesEntry; TUserInterfacesEntry = record UserInterface: TFileSourceOperationUI; end; constructor TFileSourceOperation.Create(const aFileSource: IInterface); begin FState := fsosNotStarted; FDesiredState := fsosRunning; // set for auto-start unless prevented by PreventStart FOperationResult := fsorFinished; FPauseEvent := TSimpleEvent.Create; FConnectionAvailableEvent := TSimpleEvent.Create; FStateLock := TCriticalSection.Create; FEventsLock := TCriticalSection.Create; {$IFNDEF fsoSynchronizeEvents} FNoEventsListenersCallsScheduledEvent := RTLEventCreate; // Set at start because we don't have any calls scheduled at this time. RTLeventSetEvent(FNoEventsListenersCallsScheduledEvent); {$ENDIF} FUserInterfaces := TFPList.Create; FUserInterfaceAssignedEvent := RTLEventCreate; // Reset at start because we have no interface assigned. RTLeventResetEvent(FUserInterfaceAssignedEvent); FStateChangedEventListeners := TFPList.Create; FFileSource := aFileSource; FWantsNewConnection := False; FConnectionTimeout := SyncObjs.INFINITE; FNeedsConnection := (fspUsesConnections in (FileSource as IFileSource).Properties); inherited Create; end; destructor TFileSourceOperation.Destroy; var i: Integer; begin inherited Destroy; // Remove operation from the queue of operations waiting for a connection // (it can still be there if it was aborted while waiting). (FileSource as IFileSource).RemoveOperationFromQueue(Self); for i := 0 to FStateChangedEventListeners.Count - 1 do Dispose(PStateChangedEventEntry(FStateChangedEventListeners.Items[i])); FreeAndNil(FStateChangedEventListeners); for i := 0 to FUserInterfaces.Count - 1 do Dispose(PUserInterfacesEntry(FUserInterfaces.Items[i])); FreeAndNil(FUserInterfaces); // Just to be sure - set all events when we're destroying the object // in case the thread is still waiting (this should normally not happen). FPauseEvent.SetEvent; FConnectionAvailableEvent.SetEvent; {$IFNDEF fsoSynchronizeEvents} RTLeventSetEvent(FNoEventsListenersCallsScheduledEvent); {$ENDIF} RTLeventSetEvent(FUserInterfaceAssignedEvent); FreeAndNil(FPauseEvent); FreeAndNil(FConnectionAvailableEvent); {$IFNDEF fsoSynchronizeEvents} RTLeventdestroy(FNoEventsListenersCallsScheduledEvent); {$ENDIF} RTLeventdestroy(FUserInterfaceAssignedEvent); FreeAndNil(FStateLock); FreeAndNil(FEventsLock); end; procedure TFileSourceOperation.Initialize; begin // Override in descendant classes. end; procedure TFileSourceOperation.Finalize; begin // Override in descendant classes. end; procedure TFileSourceOperation.Execute; begin try {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(Self), ' ', FormatDateTime('nnss.zzzz', Now), ': Start operation ', ClassName); {$ENDIF} UpdateProgress(0); FOperationResult := fsorAborted; try // Wait for start command if not started automatically. DoPauseIfNeeded([fsosNotStarted, fsosPaused]); // Check if wasn't aborted while paused. CheckOperationState; if FNeedsConnection then begin // Wait for connection to file source. while True do begin FConnection := GetConnection; if Assigned(FConnection) then break; UpdateState(fsosWaitingForConnection); if DoWaitForConnection = wrTimeout then break; // Allow pausing and aborting the operation. CheckOperationState; end; end; // Initialize. UpdateState(fsosStarting); Initialize; FOperationInitialized := True; UpdateStartTime(SysUtils.Now); UpdateState(fsosRunning); {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(Self), ' ', FormatDateTime('nnss.zzzz', Now), ': Before main execute'); {$ENDIF} MainExecute; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(Self), ' ', FormatDateTime('nnss.zzzz', Now), ': After main execute'); {$ENDIF} FOperationResult := fsorFinished; except on EFileSourceOperationAborting do begin FOperationResult := fsorAborted; end; end; if FOperationInitialized then Finalize; UpdateProgress(1); finally UpdateState(fsosStopped); {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Operation finished ', ClassName); {$ENDIF} {$IFNDEF fsoSynchronizeEvents} // Wait until all the scheduled calls to events listeners have been processed // by the main thread (otherwise the calls can be made to a freed memory location). RTLeventWaitFor(FNoEventsListenersCallsScheduledEvent); {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': After wait for events'); {$ENDIF} {$ENDIF} end; // It is best to reload after the operation and all events are finished. if FOperationInitialized then ReloadFileSources; end; procedure TFileSourceOperation.UpdateProgress(NewProgress: Double); begin FProgress := NewProgress; end; function TFileSourceOperation.UpdateState(NewState: TFileSourceOperationState; ExpectedStates: TFileSourceOperationStates): Boolean; begin FStateLock.Acquire; try if FState = NewState then Exit(True) else if not (FState in ExpectedStates) then Exit(False); FState := NewState; finally FStateLock.Release; end; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Updated state to ', IntToStr(Integer(NewState))); {$ENDIF} NotifyStateChanged(NewState); Result := True; end; function TFileSourceOperation.GetDesiredState: TFileSourceOperationState; begin Result := FDesiredState; end; function TFileSourceOperation.GetState: TFileSourceOperationState; begin FStateLock.Acquire; try Result := FState; finally FStateLock.Release; end; end; function TFileSourceOperation.GetUserInterface: TFileSourceOperationUI; begin if Assigned(ParentOperation) then Result := ParentOperation.GetUserInterface else begin if FUserInterfaces.Count > 0 then // Get the UI that was most recently added. Result := PUserInterfacesEntry(FUserInterfaces.Last)^.UserInterface else Result := nil; end; end; procedure TFileSourceOperation.DoPauseIfNeeded(DesiredStates: TFileSourceOperationStates); begin FStateLock.Acquire; try if not (GetDesiredState in DesiredStates) then Exit; FPauseEvent.ResetEvent; finally FStateLock.Release; end; if GetCurrentThreadId <> MainThreadID then FPauseEvent.WaitFor(INFINITE) // wait indefinitely else begin while FPauseEvent.WaitFor(100) = wrTimeout do WidgetSet.AppProcessMessages; end; end; procedure TFileSourceOperation.DoUnPause; begin FPauseEvent.SetEvent; end; function TFileSourceOperation.DoWaitForConnection: TWaitResult; begin FConnectionAvailableEvent.ResetEvent; Result:= FConnectionAvailableEvent.WaitFor(FConnectionTimeout); end; function TFileSourceOperation.WaitForConnection: TWaitResult; begin UpdateState(fsosWaitingForConnection); Result:= DoWaitForConnection; UpdateStartTime(SysUtils.Now); UpdateState(fsosRunning); end; procedure TFileSourceOperation.ConnectionAvailableNotify; begin FConnectionAvailableEvent.SetEvent; end; function TFileSourceOperation.GetConnection: TObject; begin Result := (FileSource as IFileSource).GetConnection(Self); end; function TFileSourceOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin Result := rsOperWorking; end; procedure TFileSourceOperation.CheckOperationState; begin case GetDesiredState of fsosPaused: begin if UpdateState(fsosPaused, [fsosPausing]) then begin DoPauseIfNeeded([fsosPaused]); // Check if the operation was unpaused because it is being aborted. if GetDesiredState = fsosStopped then RaiseAbortOperation; UpdateStartTime(SysUtils.Now); if FOperationInitialized then UpdateState(fsosRunning) else UpdateState(fsosStarting); end; end; fsosStopped: // operation was asked to stop (via Stop function) begin RaiseAbortOperation; end; // else: we're left with fsosRunning end; end; function TFileSourceOperation.AppProcessMessages(CheckState: Boolean): Boolean; begin if GetCurrentThreadId <> MainThreadID then begin if CheckState then CheckOperationState; end else begin WidgetSet.AppProcessMessages; if CheckState then try CheckOperationState; except on E: EFileSourceOperationAborting do Exit(False); end; end; Result:= True; end; procedure TFileSourceOperation.UpdateStartTime(NewStartTime: TDateTime); begin FStartTime := NewStartTime; UpdateStatisticsAtStartTime; end; procedure TFileSourceOperation.Start; var LocalState: TFileSourceOperationState; begin FStateLock.Acquire; try if FState in [fsosPausing] then // The operation didn't manage to pause yet, so simply go back to running state. FState := fsosRunning else if FState in [fsosNotStarted, fsosPaused] then FState := fsosStarting else Exit; LocalState := FState; finally FStateLock.Release; end; NotifyStateChanged(LocalState); FDesiredState := fsosRunning; DoUnPause; end; procedure TFileSourceOperation.Pause; begin FStateLock.Acquire; try if FState in [fsosStarting, fsosRunning, fsosWaitingForConnection] then FState := fsosPausing else Exit; finally FStateLock.Release; end; NotifyStateChanged(fsosPausing); FDesiredState := fsosPaused; // Also set "Connection available" event in case the operation is waiting // for a connection and the user wants to pause it // (this must be after setting desired state). ConnectionAvailableNotify; end; procedure TFileSourceOperation.Stop; begin FStateLock.Acquire; try if not (FState in [fsosStopping, fsosStopped]) then FState := fsosStopping else Exit; finally FStateLock.Release; end; NotifyStateChanged(fsosStopping); FDesiredState := fsosStopped; DoUnPause; // Also set "Connection available" event in case the operation is waiting // for a connection and the user wants to abort it // (this must be after setting desired state). ConnectionAvailableNotify; // The operation may be waiting for the user's response. // Wake it up then, because it is being aborted // (this must be after setting state to Stopping). RTLeventSetEvent(FUserInterfaceAssignedEvent); end; procedure TFileSourceOperation.TogglePause; begin if State in [fsosStarting, fsosRunning, fsosWaitingForConnection] then Pause else Start; end; procedure TFileSourceOperation.PreventStart; begin FDesiredState := fsosNotStarted; end; procedure TFileSourceOperation.AssignThread(AThread: TThread); begin FThread := AThread; end; procedure TFileSourceOperation.AddStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); var Entry: PStateChangedEventEntry; i: Integer; begin FEventsLock.Acquire; try // Check if this function isn't already added. for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); if Entry^.FunctionToCall = FunctionToCall then begin // Add states to listen for. Entry^.States := Entry^.States + States; Exit; end; end; // Add new listener. Entry := New(PStateChangedEventEntry); Entry^.FunctionToCall := FunctionToCall; Entry^.States := States; FStateChangedEventListeners.Add(Entry); finally FEventsLock.Release; end; end; procedure TFileSourceOperation.RemoveStateChangedListener( States: TFileSourceOperationStates; FunctionToCall: TFileSourceOperationStateChangedNotify); var Entry: PStateChangedEventEntry; i: Integer; begin FEventsLock.Acquire; try for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); if Entry^.FunctionToCall = FunctionToCall then begin // Remove listening for states. Entry^.States := Entry^.States - States; // If all states removed - remove the callback function itself. if Entry^.States = [] then begin FStateChangedEventListeners.Delete(i); Dispose(Entry); end; break; end; end; finally FEventsLock.Release; end; end; procedure TFileSourceOperation.NotifyStateChanged(NewState: TFileSourceOperationState); var i: Integer; found: Boolean = False; begin FEventsLock.Acquire; try {$IFNDEF fsoSynchronizeEvents} {$IFDEF fsoSendOnlyCurrentState} // If we only want to notify about the current state, first check // if there already isn't scheduled (queued) a call to CallEventsListeners. if FScheduledEventsListenersCalls > 0 then Exit; {$ENDIF} {$ENDIF} // Check if there is at least one listener that wants the new state. for i := 0 to FStateChangedEventListeners.Count - 1 do begin if NewState in PStateChangedEventEntry(FStateChangedEventListeners.Items[i])^.States then begin found := True; break; end; end; if not found then Exit; {$IFNDEF fsoSynchronizeEvents} // This must be under the same lock as in CallEventsListeners. InterLockedIncrement(FScheduledEventsListenersCalls); RTLeventResetEvent(FNoEventsListenersCallsScheduledEvent); {$ENDIF} finally FEventsLock.Release; end; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Before notify events'); {$ENDIF} if GetCurrentThreadID <> MainThreadID then // NotifyStateChanged() is run from the operation thread so we cannot // call event listeners directly, because they may update the GUI. {$IFDEF fsoSynchronizeEvents} // Call listeners through Synchronize. TThread.Synchronize(Thread, @CallEventsListeners) {$ELSE} // Schedule listeners through asynchronous message queue. GuiMessageQueue.QueueMethod(@CallEventsListeners, Pointer(PtrUInt(NewState))) {$ENDIF} else begin // The function was called from main thread - call directly. if GetCurrentThreadID <> MainThreadID then begin // The operation runs in a thread. // Handle exceptions for the GUI thread because it controls the operation // and in case of error the operation may be left in infinite waiting state. try {$IFDEF fsoSynchronizeEvents} CallEventsListeners; {$ELSE} CallEventsListeners(Pointer(PtrUInt(NewState))); {$ENDIF} except on Exception do begin WriteExceptionToErrorFile; DCDebug(ExceptionToString); ShowExceptionDialog; end; end; end else begin {$IFDEF fsoSynchronizeEvents} CallEventsListeners; {$ELSE} CallEventsListeners(Pointer(PtrUInt(NewState))); {$ENDIF} end; end; {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': After notify events'); {$ENDIF} end; {$IFDEF fsoSynchronizeEvents} procedure TFileSourceOperation.CallEventsListeners; {$ELSE} procedure TFileSourceOperation.CallEventsListeners(Data: Pointer); {$ENDIF} var Entry: PStateChangedEventEntry; i: Integer; aState: TFileSourceOperationState; FunctionsToCall: array of TFileSourceOperationStateChangedNotify; FunctionsCount: Integer = 0; begin {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(self), ' ', FormatDateTime('nnss.zzzz', Now), ': Before call events'); {$ENDIF} {$IFDEF fsoSynchronizeEvents} aState := Self.State; {$ELSE} {$IFDEF fsoSendOnlyCurrentState} aState := Self.State; {$ELSE} aState := TFileSourceOperationState(PtrUInt(Data)); {$ENDIF} InterLockedDecrement(FScheduledEventsListenersCalls); {$ENDIF} // First the listeners functions must be copied under lock before calling them, // because any function called may attempt to add/remove listeners from the list. FEventsLock.Acquire; try SetLength(FunctionsToCall, FStateChangedEventListeners.Count); for i := 0 to FStateChangedEventListeners.Count - 1 do begin Entry := PStateChangedEventEntry(FStateChangedEventListeners.Items[i]); // Check if the listener wants this state. if (aState in Entry^.States) then begin FunctionsToCall[FunctionsCount] := Entry^.FunctionToCall; Inc(FunctionsCount, 1); end; end; finally FEventsLock.Release; end; // Call each listener function (not under lock). for i := 0 to FunctionsCount - 1 do FunctionsToCall[i](Self, aState); {$IFNDEF fsoSynchronizeEvents} FEventsLock.Acquire; try // This must be under the same lock as in NotifyStateChanged. if FScheduledEventsListenersCalls = 0 then RTLeventSetEvent(FNoEventsListenersCallsScheduledEvent); finally FEventsLock.Release; end; {$ENDIF} {$IFDEF debugFileSourceOperation} DCDebug('Op: ', hexStr(Self), ' ', FormatDateTime('nnss.zzzz', Now), ': After call events'); {$ENDIF} end; procedure TFileSourceOperation.AddUserInterface(UserInterface: TFileSourceOperationUI); var Entry: PUserInterfacesEntry; begin Entry := New(PUserInterfacesEntry); Entry^.UserInterface := UserInterface; FUserInterfaces.Add(Entry); // Notify a possibly waiting operation thread that an UI was assigned. RTLeventSetEvent(FUserInterfaceAssignedEvent); end; procedure TFileSourceOperation.RemoveUserInterface(UserInterface: TFileSourceOperationUI); var Entry: PUserInterfacesEntry; i: Integer; begin for i := 0 to FUserInterfaces.Count - 1 do begin Entry := PUserInterfacesEntry(FUserInterfaces.Items[i]); if Entry^.UserInterface = UserInterface then begin FUserInterfaces.Delete(i); Dispose(Entry); break; end; end; if FUserInterfaces.Count = 0 then // Last interface was removed - reset event so that operation // thread will wait for an UI if it wants to ask a question. RTLeventResetEvent(FUserInterfaceAssignedEvent); end; class function TFileSourceOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := nil; end; class function TFileSourceOperation.GetOperationClass: TFileSourceOperationClass; begin Result := Self; end; function TFileSourceOperation.AskQuestion( Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse): TFileSourceOperationUIResponse; var i: Integer; bStateChanged: Boolean = False; OldState: TFileSourceOperationState; begin FStateLock.Acquire; try if FState in [fsosStopping, fsosStopped] then RaiseAbortOperation else begin OldState := FState; FState := fsosWaitingForFeedback; end; finally FStateLock.Release; end; NotifyStateChanged(fsosWaitingForFeedback); // Set up parameters through variables because // we cannot pass them via Synchronize call to TryAskQuestion. FUIMessage := Msg; FUIQuestion := Question; SetLength(FUIPossibleResponses, Length(PossibleResponses)); for i := 0 to Length(PossibleResponses) - 1 do FUIPossibleResponses[i] := PossibleResponses[i]; FUIDefaultOKResponse := DefaultOKResponse; FUIDefaultCancelResponse := DefaultCancelResponse; if GetCurrentThreadID <> MainThreadID then begin while True do begin TThread.Synchronize(Thread, @TryAskQuestion); // Check result of TryAskQuestion. if FTryAskQuestionResult = False then begin // There is no UI assigned - wait until it is assigned. RTLeventWaitFor(FUserInterfaceAssignedEvent); // Check why the event was set. // It is either because an UI was assigned or because the operation is being aborted. if State in [fsosStopping, fsosStopped] then begin // The operation is being aborted. RaiseAbortOperation; break; end; // else we got an UI assigned - retry asking question end else begin // Received answer from the user. Result := FUIResponse; break; end; end; end else begin // The operation is probably run from main thread - call directly. TryAskQuestion; if FTryAskQuestionResult = False then // There is no UI assigned - assume default OK answer. Result := DefaultOKResponse else Result := FUIResponse; end; FStateLock.Acquire; try // Check, if the state is still the same as before asking question. if FState = fsosWaitingForFeedback then begin UpdateStartTime(SysUtils.Now); FState := OldState; bStateChanged := True; end; finally FStateLock.Release; end; if bStateChanged then NotifyStateChanged(OldState); end; procedure TFileSourceOperation.TryAskQuestion; var UI: TFileSourceOperationUI; begin // This is run from GUI thread. FTryAskQuestionResult := False; // We have no answer yet. UI := GetUserInterface; if Assigned(UI) then begin FUIResponse := UI.AskQuestion( FUIMessage, FUIQuestion, FUIPossibleResponses, FUIDefaultOKResponse, FUIDefaultCancelResponse); FTryAskQuestionResult := True; // We do have an answer now. end; // else We have no UIs assigned - cannot ask question. end; procedure TFileSourceOperation.ReloadFileSources; begin TThread.Synchronize(Thread, @DoReloadFileSources); // Calls virtual function end; procedure TFileSourceOperation.DoReloadFileSources; begin // Nothing by default. end; class procedure TFileSourceOperation.RaiseAbortOperation; begin raise EFileSourceOperationAborting.Create; end; constructor EFileSourceOperationAborting.Create; begin inherited Create('aborting file source operation'); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcedeleteoperation.pas��������������������������������������0000644�0001750�0000144�00000010726�11747211345�024000� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type TFileSourceDeleteOperationStatistics = record CurrentFile: String; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; FilesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that deletes files from an arbitrary file source. File source should match the class type. } { TFileSourceDeleteOperation } TFileSourceDeleteOperation = class(TFileSourceOperation) private FStatistics: TFileSourceDeleteOperationStatistics; FStatisticsAtStartTime: TFileSourceDeleteOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FFilesToDelete: TFiles; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceDeleteOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property FilesToDelete: TFiles read FFilesToDelete; public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceDeleteOperationStatistics; end; implementation uses uDCUtils, uLng; constructor TFileSourceDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin with FStatistics do begin CurrentFile := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; FilesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; aTargetFileSource := nil; FFilesToDelete := theFilesToDelete; theFilesToDelete := nil; end; destructor TFileSourceDeleteOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FFilesToDelete) then FreeAndNil(FFilesToDelete); end; function TFileSourceDeleteOperation.GetID: TFileSourceOperationType; begin Result := fsoDelete; end; procedure TFileSourceDeleteOperation.DoReloadFileSources; begin FFileSource.Reload(FFilesToDelete.Path); end; function TFileSourceDeleteOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if FilesToDelete.Count = 1 then Result := Format(rsOperDeletingSomething, [FilesToDelete[0].FullPath]) else Result := Format(rsOperDeletingIn, [FilesToDelete.Path]); end; else Result := rsOperDeleting; end; end; procedure TFileSourceDeleteOperation.UpdateStatistics(var NewStatistics: TFileSourceDeleteOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneFiles <> NewStatistics.DoneFiles then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneFiles, DoneFiles, TotalFiles, StartTime, SysUtils.Now, FilesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneFiles/TotalFiles); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceDeleteOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceDeleteOperation.RetrieveStatistics: TFileSourceDeleteOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. ������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcecombineoperation.pas�������������������������������������0000644�0001750�0000144�00000013527�12365151656�024161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceCombineOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceCombineOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that combine files within the same file source. } { TFileSourceCombineOperation } TFileSourceCombineOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCombineOperationStatistics; FStatisticsAtStartTime: TFileSourceCombineOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FSourceFiles: TFiles; FTargetFile: String; FRequireDynamicMode, FWeGotTheCRC32VerificationFile: boolean; FExpectedCRC32: dword; FCurrentCRC32: dword; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceCombineOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property SourceFiles: TFiles read FSourceFiles; property TargetFile: String read FTargetFile write FTargetFile; //FTargetFile might be written when in "RequireDynamicMode" public {en @param(aFileSource File source within which the operation should take place. Class takes ownership of the pointer.) @param(theSourceFiles Files which are to be combined. Class takes ownership of the pointer.) @param(aTargetFile Target name of combined file.) } constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceCombineOperationStatistics; property RequireDynamicMode: boolean read FRequireDynamicMode write FRequireDynamicMode; property CurrentCRC32: dword read FCurrentCRC32 write FCurrentCRC32; property ExpectedCRC32: dword read FExpectedCRC32 write FExpectedCRC32; property WeGotTheCRC32VerificationFile: boolean read FWeGotTheCRC32VerificationFile write FWeGotTheCRC32VerificationFile; end; implementation uses uDCUtils, uLng; // -- TFileSourceCombineOperation ------------------------------------------------ constructor TFileSourceCombineOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetFile: String); begin with FStatistics do begin CurrentFileFrom := ''; CurrentFileTo := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; RequireDynamicMode := FALSE; // By default, DC mode which means user selected ALL the files. ExpectedCRC32 := $00000000; // By default, the expected CRC32 is 0, which is undefined CurrentCRC32 := $00000000; // Initial value of CRC32 WeGotTheCRC32VerificationFile := FALSE; // By default, we still don't have in hand info from summary file end; FStatisticsLock := TCriticalSection.Create; inherited Create(aFileSource); FFileSource := aFileSource; FSourceFiles := theSourceFiles; theSourceFiles := nil; FTargetFile := aTargetFile; end; destructor TFileSourceCombineOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FSourceFiles) then FreeAndNil(FSourceFiles); end; procedure TFileSourceCombineOperation.UpdateStatistics(var NewStatistics: TFileSourceCombineOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCombineOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCombineOperation.RetrieveStatistics: TFileSourceCombineOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCombineOperation.GetID: TFileSourceOperationType; begin Result := fsoCombine; end; procedure TFileSourceCombineOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := ExtractFilePath(FTargetFile); // Combine target path FFileSource.Reload(Paths); end; function TFileSourceCombineOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperCombiningFromTo, [SourceFiles.Path, TargetFile]); else Result := rsOperCombining; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/�������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�020346� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivecalcstatisticsoperation.pas���������������0000644�0001750�0000144�00000007320�12612505011�030563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uMultiArchiveFileSource, uFile; type TMultiArchiveCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses uMultiArc, DCStrUtils; constructor TMultiArchiveCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); FMultiArchiveFileSource:= aTargetFileSource as IMultiArchiveFileSource; end; destructor TMultiArchiveCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TMultiArchiveCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TMultiArchiveCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TMultiArchiveCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TMultiArchiveCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var I: Integer; ArchiveItem: TArchiveItem; CurrFileName: String; ModificationTime: TDateTime; begin for I:= 0 to FMultiArchiveFileSource.ArchiveFileList.Count - 1 do begin ArchiveItem := TArchiveItem(FMultiArchiveFileSource.ArchiveFileList.Items[I]); CurrFileName := PathDelim + ArchiveItem.FileName; if not IsInPath(srcPath, CurrFileName, True, False) then Continue; if FMultiArchiveFileSource.FileIsDirectory(ArchiveItem) then Inc(FStatistics.Directories) else if FMultiArchiveFileSource.FileIsLink(ArchiveItem) then Inc(FStatistics.Links) else begin Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + ArchiveItem.UnpSize; try with ArchiveItem do ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); if ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := ModificationTime; if ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := ModificationTime; except on EConvertError do; end; end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivedeleteoperation.pas�����������������������0000644�0001750�0000144�00000015625�12612505011�027017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceDeleteOperation, uFileSource, uFileSourceOperationUI, uFile, uMultiArchiveFileSource, uGlobs, uLog, un_process; type { TMultiArchiveDeleteOperation } TMultiArchiveDeleteOperation = class(TFileSourceDeleteOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories procedure ShowError(sMessage: String; logOptions: TLogOptions); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const FileName: String; ExitStatus: LongInt); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure UpdateProgress(SourceName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uOSUtils, DCOSUtils, uLng, uMultiArc, uMultiArchiveUtil, LCLProc; constructor TMultiArchiveDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FFullFilesTreeToDelete:= nil; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TMultiArchiveDeleteOperation.Destroy; begin FreeThenNil(FFullFilesTreeToDelete); inherited Destroy; end; procedure TMultiArchiveDeleteOperation.Initialize; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FMultiArchiveFileSource do FillAndCount('*.*', FilesToDelete, True, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveDeleteOperation.MainExecute; var I: Integer; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand, sCommandLine: String; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sCommandLine:= MultiArcItem.FDelete; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // delete file by file for I:=0 to FFullFilesTreeToDelete.Count - 1 do begin aFile:= FFullFilesTreeToDelete[I]; UpdateProgress(aFile.FullPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath , FExProcess.ExitStatus); end else // delete whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTreeToDelete, EmptyStr, EmptyStr, FTempFile ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus); end; end; procedure TMultiArchiveDeleteOperation.Finalize; begin FreeThenNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveDeleteOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveDeleteOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveDeleteOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt); begin if ExitStatus > FErrorLevel then begin ShowError(Format(rsMsgLogError + rsMsgLogDelete, [FileName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_arc_op], lmtSuccess); end; end; procedure TMultiArchiveDeleteOperation.UpdateProgress(SourceName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFile:= SourceName; DoneBytes := DoneBytes + IncSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveDeleteOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. �����������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivefilesource.pas����������������������������0000644�0001750�0000144�00000047264�12627362625�026022� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, StringHashList, uOSUtils, uMultiArc, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation, uMultiArchiveUtil, DCBasicTypes; type { IMultiArchiveFileSource } IMultiArchiveFileSource = interface(IArchiveFileSource) ['{71BF41D3-1E40-4E84-83BB-B6D3E0DEB6FC}'] function GetPassword: String; function GetArcFileList: TObjectList; function GetMultiArcItem: TMultiArcItem; function FileIsLink(ArchiveItem: TArchiveItem): Boolean; function FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; procedure FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); property Password: String read GetPassword; property ArchiveFileList: TObjectList read GetArcFileList; property MultiArcItem: TMultiArcItem read GetMultiArcItem; end; { TMultiArchiveFileSource } TMultiArchiveFileSource = class(TArchiveFileSource, IMultiArchiveFileSource) private FPassword: String; FOutputParser: TOutputParser; FArcFileList : TObjectList; FMultiArcItem: TMultiArcItem; FAllDirsList, FExistsDirList: TStringHashList; FLinkAttribute, FDirectoryAttribute: TFileAttrs; function GetPassword: String; function GetMultiArcItem: TMultiArcItem; procedure OnGetArchiveItem(ArchiveItem: TArchiveItem); function ReadArchive(bCanYouHandleThisFile : Boolean = False): Boolean; function FileIsLink(ArchiveItem: TArchiveItem): Boolean; function FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; function GetArcFileList: TObjectList; protected function GetSupportedFileProperties: TFilePropertiesTypes; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; procedure DoReload(const PathsToReload: TPathsArray); override; public procedure FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); public constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aMultiArcItem: TMultiArcItem); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String; ArchiveItem: TArchiveItem; FormMode: Integer): TFile; overload; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; class function CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; class function CreateByArchiveType(anArchiveFileSource: IFileSource; anArchiveFileName, anArchiveType: String): IMultiArchiveFileSource; class function CreateByArchiveName(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; {en Returns @true if there is an addon registered for the archive type (only extension is checked). } class function CheckAddonByExt(anArchiveType: String): Boolean; property Password: String read GetPassword; property ArchiveFileList: TObjectList read GetArcFileList; property MultiArcItem: TMultiArcItem read GetMultiArcItem; end; implementation uses uDebug, uGlobs, DCFileAttributes, DCOSUtils, DCStrUtils, FileUtil, uMasks, uMultiArchiveListOperation, uMultiArchiveCopyInOperation, uMultiArchiveCopyOutOperation, uMultiArchiveDeleteOperation, uMultiArchiveExecuteOperation, uMultiArchiveTestArchiveOperation, uMultiArchiveCalcStatisticsOperation ; class function TMultiArchiveFileSource.CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; var I: Integer; aMultiArcItem: TMultiArcItem; begin Result := nil; // Check if there is a registered addon for the archive file by content. for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if (aMultiArcItem.FEnabled) and (aMultiArcItem.FID <> EmptyStr) then begin if aMultiArcItem.CanYouHandleThisFile(anArchiveFileName) then begin Result := TMultiArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, aMultiArcItem); DCDebug('Found registered addon "' + aMultiArcItem.FDescription + '" for archive ' + anArchiveFileName); Break; end; end; end; end; class function TMultiArchiveFileSource.CreateByArchiveType( anArchiveFileSource: IFileSource; anArchiveFileName, anArchiveType: String): IMultiArchiveFileSource; var I: Integer; aMultiArcItem: TMultiArcItem; begin Result := nil; // Check if there is a registered addon for the extension of the archive file name. for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if MatchesMaskList(anArchiveType, aMultiArcItem.FExtension, ',') and (aMultiArcItem.FEnabled) then begin Result := TMultiArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, aMultiArcItem); DCDebug('Found registered addon "' + aMultiArcItem.FDescription + '" for archive ' + anArchiveFileName); Break; end; end; end; class function TMultiArchiveFileSource.CreateByArchiveName( anArchiveFileSource: IFileSource; anArchiveFileName: String): IMultiArchiveFileSource; begin Result:= CreateByArchiveType(anArchiveFileSource, anArchiveFileName, ExtractOnlyFileExt(anArchiveFileName)); end; class function TMultiArchiveFileSource.CheckAddonByExt(anArchiveType: String): Boolean; var I: Integer; aMultiArcItem: TMultiArcItem; begin for I := 0 to gMultiArcList.Count - 1 do begin aMultiArcItem:= gMultiArcList.Items[I]; if MatchesMaskList(anArchiveType, aMultiArcItem.FExtension, ',') and (aMultiArcItem.FEnabled) then Exit(True); end; Result := False; end; // ---------------------------------------------------------------------------- constructor TMultiArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aMultiArcItem: TMultiArcItem); begin inherited Create(anArchiveFileSource, anArchiveFileName); FMultiArcItem := aMultiArcItem; FArcFileList := TObjectList.Create(True); FOutputParser := TOutputParser.Create(aMultiArcItem, anArchiveFileName); FOutputParser.OnGetArchiveItem:= @OnGetArchiveItem; FOperationsClasses[fsoCopyIn] := TMultiArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TMultiArchiveCopyOutOperation.GetOperationClass; with FMultiArcItem do begin if (FFormMode and MAF_UNIX_ATTR) <> 0 then begin FLinkAttribute:= S_IFLNK; FDirectoryAttribute:= S_IFDIR; end else if (FFormMode and MAF_WIN_ATTR) <> 0 then begin FLinkAttribute:= FILE_ATTRIBUTE_REPARSE_POINT; FDirectoryAttribute:= FILE_ATTRIBUTE_DIRECTORY; end else begin FLinkAttribute:= faSymLink; FDirectoryAttribute:= faFolder; end; end; ReadArchive; end; destructor TMultiArchiveFileSource.Destroy; begin inherited Destroy; if Assigned(FArcFileList) then FreeAndNil(FArcFileList); end; class function TMultiArchiveFileSource.CreateFile(const APath: String; ArchiveItem: TArchiveItem; FormMode: Integer): TFile; begin Result := TFile.Create(APath); with Result do begin { Comment, } SizeProperty := TFileSizeProperty.Create(ArchiveItem.UnpSize); CompressedSizeProperty := TFileCompressedSizeProperty.Create(ArchiveItem.PackSize); if (FormMode and MAF_UNIX_ATTR) <> 0 then AttributesProperty := TUnixFileAttributesProperty.Create(ArchiveItem.Attributes) else if (FormMode and MAF_WIN_ATTR) <> 0 then AttributesProperty := TNtfsFileAttributesProperty.Create(ArchiveItem.Attributes) else AttributesProperty := TFileAttributesProperty.CreateOSAttributes(ArchiveItem.Attributes); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0); try with ArchiveItem do ModificationTime := EncodeDate(Year, Month, Day) + EncodeTime(Hour, Minute, Second, 0); except on EConvertError do; end; if AttributesProperty.IsLink and (Length(ArchiveItem.FileLink) > 0) then begin LinkProperty := TFileLinkProperty.Create; LinkProperty.LinkTo := ArchiveItem.FileLink; end; // Set name after assigning Attributes property, because it is used to get extension. Name := ExtractFileName(ArchiveItem.FileName); if ArchiveItem.FileExt <> EmptyStr then Name:= Name + '.' + ArchiveItem.FileExt; end; end; function TMultiArchiveFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoExecute]; if FMultiArcItem.FList <> EmptyStr then Result := Result + [fsoList, fsoCalcStatistics]; if FMultiArcItem.FAdd <> EmptyStr then Result := Result + [fsoCopyIn]; if FMultiArcItem.FExtract <> EmptyStr then Result := Result + [fsoCopyOut]; if FMultiArcItem.FDelete <> EmptyStr then Result := Result + [fsoDelete]; if FMultiArcItem.FTest <> EmptyStr then Result := Result + [fsoTestArchive]; end; function TMultiArchiveFileSource.GetProperties: TFileSourceProperties; begin Result := []; end; function TMultiArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpLink]; end; function TMultiArchiveFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; var I: Integer; ArchiveItem: TArchiveItem; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); // Search file list for a directory with name NewDir. for I := 0 to FArcFileList.Count - 1 do begin ArchiveItem := TArchiveItem(FArcFileList.Items[I]); if FileIsDirectory(ArchiveItem) and (Length(ArchiveItem.FileName) > 0) then begin if NewDir = IncludeTrailingPathDelimiter(GetRootDir() + ArchiveItem.FileName) then Exit(True); end; end; end; end; function TMultiArchiveFileSource.GetArcFileList: TObjectList; begin Result := FArcFileList; end; function TMultiArchiveFileSource.GetMultiArcItem: TMultiArcItem; begin Result := FMultiArcItem; end; function TMultiArchiveFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveListOperation.Create(TargetFileSource, TargetPath); end; function TMultiArchiveFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TMultiArchiveFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TMultiArchiveCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TMultiArchiveFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TMultiArchiveFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TMultiArchiveExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TMultiArchiveFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result:= TMultiArchiveTestArchiveOperation.Create(SourceFileSource, theSourceFiles); end; function TMultiArchiveFileSource.CreateCalcStatisticsOperation( var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TMultiArchiveCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; procedure TMultiArchiveFileSource.OnGetArchiveItem(ArchiveItem: TArchiveItem); procedure CollectDirs(Path: PAnsiChar; var DirsList: TStringHashList); var I : Integer; Dir : AnsiString; begin // Scan from the second char from the end, to the second char from the beginning. for I := strlen(Path) - 2 downto 1 do begin if Path[I] = PathDelim then begin SetString(Dir, Path, I); if DirsList.Find(Dir) = -1 then // Add directory and continue scanning for parent directories. DirsList.Add(Dir) else // This directory is already in the list and we assume // that all parent directories are too. Exit; end end; end; var NameLength: Integer; begin // Some archivers end directories with path delimiter. // And not set directory attribute. So delete path // delimiter if present and add directory attribute. NameLength := Length(ArchiveItem.FileName); if (ArchiveItem.FileName[NameLength] = PathDelim) then begin Delete(ArchiveItem.FileName, NameLength, 1); ArchiveItem.Attributes := ArchiveItem.Attributes or FDirectoryAttribute; end; //**************************************************************************** // Workaround for archivers that don't give a list of folders // or the list does not include all of the folders. if FileIsDirectory(ArchiveItem) then begin // Collect directories that the plugin supplies. if (FExistsDirList.Find(ArchiveItem.FileName) < 0) then FExistsDirList.Add(ArchiveItem.FileName); end; // Collect all directories. CollectDirs(PAnsiChar(ArchiveItem.FileName), FAllDirsList); //**************************************************************************** FArcFileList.Add(ArchiveItem); end; function TMultiArchiveFileSource.GetPassword: String; begin Result:= FPassword; end; function TMultiArchiveFileSource.ReadArchive(bCanYouHandleThisFile : Boolean = False): Boolean; var I : Integer; ArchiveItem: TArchiveItem; begin if not mbFileAccess(ArchiveFileName, fmOpenRead) then begin Result := False; Exit; end; { if bCanYouHandleThisFile and (Assigned(WcxModule.CanYouHandleThisFile) or Assigned(WcxModule.CanYouHandleThisFileW)) then begin Result := WcxModule.WcxCanYouHandleThisFile(ArchiveFileName); if not Result then Exit; end; } { Get File List } FArcFileList.Clear; FExistsDirList := TStringHashList.Create(True); FAllDirsList := TStringHashList.Create(True); try DCDebug('Get File List'); FOutputParser.Password:= FPassword; FOutputParser.Prepare; FOutputParser.Execute; FPassword:= FOutputParser.Password; (* if archiver does not give a list of folders *) for I := 0 to FAllDirsList.Count - 1 do begin // Add only those directories that were not supplied by the plugin. if FExistsDirList.Find(FAllDirsList.List[I]^.Key) < 0 then begin ArchiveItem:= TArchiveItem.Create; try ArchiveItem.FileName := FAllDirsList.List[I]^.Key; ArchiveItem.Attributes := FDirectoryAttribute; FArcFileList.Add(ArchiveItem); except FreeAndNil(ArchiveItem); end; end; end; finally FreeAndNil(FAllDirsList); FreeAndNil(FExistsDirList); end; Result := True; end; function TMultiArchiveFileSource.FileIsLink(ArchiveItem: TArchiveItem): Boolean; begin Result:= (ArchiveItem.Attributes and FLinkAttribute <> 0); end; function TMultiArchiveFileSource.FileIsDirectory(ArchiveItem: TArchiveItem): Boolean; begin Result:= (ArchiveItem.Attributes and FDirectoryAttribute <> 0); end; procedure TMultiArchiveFileSource.DoReload(const PathsToReload: TPathsArray); begin ReadArchive; end; procedure TMultiArchiveFileSource.FillAndCount(const FileMask: String; Files: TFiles; CountDirs: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); var I, J: Integer; ArchiveItem: TArchiveItem; sFileName: String; aFile: TFile; begin NewFiles:= TFiles.Create(Files.Path); FilesCount:= 0; FilesSize:= 0; for I := 0 to ArchiveFileList.Count - 1 do begin ArchiveItem := TArchiveItem(ArchiveFileList.Items[I]); sFileName:= PathDelim + ArchiveItem.FileName; if ((FileMask = '*.*') or (FileMask = '*') or // And name matches file mask MatchesMaskList(ExtractFileName(ArchiveItem.FileName), FileMask)) then for J := 0 to Files.Count - 1 do begin aFile := Files[J]; if (aFile.FullPath = sFileName) or // Item in the list is a file, only compare names. (aFile.AttributesProperty.IsDirectory and IsInPath(aFile.FullPath, sFileName, True, False)) then // Check if 'FileName' is in this directory or any of its subdirectories. begin if FileIsDirectory(ArchiveItem) then begin if CountDirs then Inc(FilesCount); end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); end; aFile:= TMultiArchiveFileSource.CreateFile(ExtractFilePath(ArchiveItem.FileName), ArchiveItem, FMultiArcItem.FFormMode); aFile.FullPath:= ExcludeFrontPathDelimiter(aFile.FullPath); NewFiles.Add(aFile); end; end; // for J end; // for I end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lfm������������������0000644�0001750�0000144�00000001674�11747211345�030132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited MultiArchiveCopyOperationOptionsUI: TMultiArchiveCopyOperationOptionsUI Height = 158 Width = 549 AutoSize = True BorderSpacing.Around = 6 ClientHeight = 158 ClientWidth = 549 TabOrder = 0 DesignLeft = 535 DesignTop = 391 object lblFileExists: TLabel[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbFileExists AnchorSideTop.Side = asrCenter Left = 6 Height = 14 Top = 3 Width = 77 BorderSpacing.Around = 6 Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox[1] AnchorSideLeft.Control = lblFileExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner Left = 91 Height = 21 Top = 0 Width = 109 BorderSpacing.Left = 8 ItemHeight = 13 Items.Strings = ( 'Ask' 'Overwrite' 'Skip' ) Style = csDropDownList TabOrder = 0 end end ��������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.lrt������������������0000644�0001750�0000144�00000000113�11747211345�030140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION=When file exists �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchiveutil.pas����������������������������������0000644�0001750�0000144�00000046624�12630571200�024617� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveUtil; {$mode objfpc}{$H+} {.$DEFINE DEBUG} interface uses Classes, SysUtils, uMultiArc, un_process, uFile, DCBasicTypes; const MAF_UNIX_PATH = 1; // Use Unix path delimiter (/) MAF_WIN_PATH = 2; // Use Windows path delimiter (\) MAF_UNIX_ATTR = 4; // Use Unix file attributes MAF_WIN_ATTR = 8; // Use Windows file attributes type TOnGetArchiveItem = procedure(ArchiveItem: TArchiveItem) of object; TGetFileAttr = function(sAttr: String): TFileAttrs; TGetFileName = function(const Str: String): String; TKeyPos = record Index, Start, Count: longint; end; { TOutputParser } TOutputParser = class FPassword: String; FMultiArcItem: TMultiArcItem; FExProcess: TExProcess; private FNamePos, FUnpSizePos, FPackSizePos, FYearPos, FMonthPos, FMonthNamePos, FDayPos, FHourPos, FHourModifierPos, FMinPos, FSecPos, FAttrPos: TKeyPos; private FOnGetArchiveItem: TOnGetArchiveItem; FStartParsing: boolean; FFormatIndex: longint; FArchiveItem: TArchiveItem; FArchiveName: String; FGetFileAttr: TGetFileAttr; FGetFileName: TGetFileName; protected procedure SplitFileName; function FixPosition(const Str: String; Key: TKeyPos): LongInt; function KeyPos(Key: char; out Position: TKeyPos): boolean; function GetKeyValue(const str: String; Key: TKeyPos): String; procedure OnReadLn(str: string); procedure OnQueryString(str: string); function CheckOut(const SubStr, Str: string): boolean; public constructor Create(aMultiArcItem: TMultiArcItem; const anArchiveName: String); destructor Destroy; override; procedure Prepare; procedure Execute; property Password: String read FPassword write FPassword; property OnGetArchiveItem: TOnGetArchiveItem read FOnGetArchiveItem write FOnGetArchiveItem; end; function ExtractErrorLevel(var Command: String): LongInt; function FormatArchiverCommand(const Archiver, sCmd, anArchiveName: String; aFiles: TFiles = nil; sFileName: String = ''; aDestPath: String = ''; sTempFile: String = ''; sPassword: String = ''; sVolumeSize: String = ''; sCustomParams: String = ''): string; implementation uses LCLProc, FileUtil, StrUtils, DCClassesUtf8, uDCUtils, DCOSUtils, uOSUtils, DCDateTimeUtils, uDebug, uShowMsg, uLng, DCFileAttributes; function GetUnixFileName(const Str: String): String; var I: Integer; begin Result:= ConsoleToUTF8(Str); for I:= 1 to Length(Str) do if Result[I] = '/' then Result[I]:= PathDelim; end; function GetWinFileName(const Str: String): String; var I: Integer; begin Result:= ConsoleToUTF8(Str); for I:= 1 to Length(Str) do if Result[I] = '\' then Result[I]:= PathDelim; end; { TOutputParser } procedure TOutputParser.SplitFileName; var Index: Integer; begin Index:= Pos(' -> ', FArchiveItem.FileName); if Index > 0 then begin FArchiveItem.FileLink:= Copy(FArchiveItem.FileName, Index + 4, MaxInt); FArchiveItem.FileName:= Copy(FArchiveItem.FileName, 1, Index - 1); end end; function TOutputParser.FixPosition(const Str: String; Key: TKeyPos): LongInt; var I, K, U, C: LongInt; Format: String; begin I:= 0; U:= 0; Result:= Key.Start; Format:= FMultiArcItem.FFormat[Key.Index]; repeat C:= 0; I:= PosEx('*', Format, I + 1); if (I = 0) or (I >= Result) then Exit; if (I > 0) then begin I:= I + U; K:= I; while (K <= Length(Str)) and (Str[K] <> #32) do begin Inc(C); Inc(K); end; if C > 0 then U:= C - 1 else U:= 0; Result:= Result + U; end; until I = 0; end; function TOutputParser.KeyPos(Key: char; out Position: TKeyPos): boolean; var I: integer; Format: string; begin Result := False; Position.Index := -1; for I := 0 to FMultiArcItem.FFormat.Count - 1 do with FMultiArcItem do begin Format := FFormat[I]; Position.Start := Pos(Key, Format); if Position.Start = 0 then Continue; Position.Count:= Position.Start; while ((Position.Count <= Length(Format)) and (Format[Position.Count] = Key)) do Inc(Position.Count); Position.Count := Position.Count - Position.Start; Position.Index := I; {$IFDEF DEBUG} DCDebug('Key: ', Key, ' Format: ', IntToStr(I), ' Start: ', IntToStr(Position.Start), ' Count: ', IntToStr(Position.Count)); {$ENDIF} Result := True; Break; end; end; function TOutputParser.GetKeyValue(const str: String; Key: TKeyPos): String; begin Result:= Copy(str, FixPosition(str, Key), Key.Count); end; { TOutputParser } procedure TOutputParser.OnReadLn(str: string); begin if FMultiArcItem.FDebug then DCDebug(str); if (str = EmptyStr) or (Trim(str) = EmptyStr) then Exit; // skip empty lines if not FStartParsing then FStartParsing:= (FMultiArcItem.FStart = EmptyStr); // if not defined start line if FStartParsing and (FMultiArcItem.FEnd <> EmptyStr) and CheckOut(FMultiArcItem.FEnd, Str) then begin FExProcess.Stop; Exit; end; if FStartParsing then begin // if next item if FFormatIndex = 0 then FArchiveItem := TArchiveItem.Create; // get all file properties if FNamePos.Index = FFormatIndex then FArchiveItem.FileName := FGetFileName(Trim(GetKeyValue(str, FNamePos))); if FUnpSizePos.Index = FFormatIndex then FArchiveItem.UnpSize := StrToInt64Def(Trim(GetKeyValue(str, FUnpSizePos)), 0); if FPackSizePos.Index = FFormatIndex then FArchiveItem.PackSize := StrToInt64Def(Trim(GetKeyValue(str, FPackSizePos)), 0); if FYearPos.Index = FFormatIndex then FArchiveItem.Year := YearShortToLong(StrToIntDef(Trim(GetKeyValue(str, FYearPos)), 0)); if FMonthPos.Index = FFormatIndex then FArchiveItem.Month := StrToIntDef(Trim(GetKeyValue(str, FMonthPos)), 0); if FMonthNamePos.Index = FFormatIndex then FArchiveItem.Month := MonthToNumberDef(GetKeyValue(str, FMonthNamePos), 0); if FDayPos.Index = FFormatIndex then FArchiveItem.Day := StrToIntDef(Trim(GetKeyValue(str, FDayPos)), 0); if FHourPos.Index = FFormatIndex then FArchiveItem.Hour := StrToIntDef(Trim(GetKeyValue(str, FHourPos)), 0); if FHourModifierPos.Index = FFormatIndex then FArchiveItem.Hour := TwelveToTwentyFour(FArchiveItem.Hour, GetKeyValue(str, FHourModifierPos)); if FMinPos.Index = FFormatIndex then FArchiveItem.Minute := StrToIntDef(Trim(GetKeyValue(str, FMinPos)), 0); if FSecPos.Index = FFormatIndex then FArchiveItem.Second := StrToIntDef(Trim(GetKeyValue(str, FSecPos)), 0); if FAttrPos.Index = FFormatIndex then FArchiveItem.Attributes := FGetFileAttr(GetKeyValue(str, FAttrPos)); FFormatIndex := FFormatIndex + 1; if FFormatIndex >= FMultiArcItem.FFormat.Count then begin FFormatIndex := 0; {$IFDEF DEBUG} DCDebug('FileName: ', FArchiveItem.FileName); DCDebug('Size: ', IntToStr(FArchiveItem.UnpSize)); DCDebug('Pack size: ', IntToStr(FArchiveItem.PackSize)); DCDebug('Attributes: ', IntToStr(FArchiveItem.Attributes)); DCDebug('-------------------------------------'); {$ENDIF} with FArchiveItem do begin if ((Attributes and S_IFLNK) <> 0) or ((Attributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0) then SplitFileName; end; if Assigned(FOnGetArchiveItem) then FOnGetArchiveItem(FArchiveItem); end; end else begin FStartParsing := (FMultiArcItem.FStart = EmptyStr) or CheckOut(FMultiArcItem.FStart, Str); if FStartParsing then FFormatIndex := 0; end; end; procedure TOutputParser.OnQueryString(str: string); var pcPassword: PAnsiChar; begin if not ShowInputQuery(FMultiArcItem.FDescription, rsMsgPasswordEnter, True, FPassword) then FExProcess.Stop else begin pcPassword:= PAnsiChar(UTF8ToConsole(FPassword + #13#10)); FExProcess.Process.Input.Write(pcPassword^, Length(pcPassword)); end; end; function TOutputParser.CheckOut(const SubStr, Str: string): boolean; begin if SubStr[1] = '^' then Result := (Pos(PChar(SubStr) + 1, Str) = 1) else Result := (Pos(SubStr, Str) > 0); end; constructor TOutputParser.Create(aMultiArcItem: TMultiArcItem; const anArchiveName: String); begin FMultiArcItem := aMultiArcItem; FArchiveName:= anArchiveName; FExProcess := nil; with FMultiArcItem do begin // Setup function to process file attributes if (FFormMode and MAF_UNIX_ATTR) <> 0 then FGetFileAttr:= @UnixStrToFileAttr else if (FFormMode and MAF_WIN_ATTR) <> 0 then FGetFileAttr:= @WinStrToFileAttr else FGetFileAttr:= @StrToFileAttr; // Setup function to process file name if ((FFormMode and MAF_UNIX_PATH) <> 0) and (PathDelim <> '/') then FGetFileName:= @GetUnixFileName else if ((FFormMode and MAF_WIN_PATH) <> 0) and (PathDelim <> '\') then FGetFileName:= @GetWinFileName else FGetFileName:= @ConsoleToUTF8; end; end; destructor TOutputParser.Destroy; begin FreeThenNil(FExProcess); inherited Destroy; end; procedure TOutputParser.Execute; begin // get positions of all properties KeyPos('n', FNamePos); // file name KeyPos('z', FUnpSizePos); // unpacked size KeyPos('p', FPackSizePos); // packed size KeyPos('y', FYearPos); KeyPos('t', FMonthPos); KeyPos('T', FMonthNamePos); KeyPos('d', FDayPos); KeyPos('h', FHourPos); KeyPos('H', FHourModifierPos); KeyPos('m', FMinPos); KeyPos('s', FSecPos); KeyPos('a', FAttrPos); // execute archiver FExProcess.Execute; end; procedure TOutputParser.Prepare; var sCommandLine: String; begin FStartParsing:= False; FFormatIndex:= 0; FreeThenNil(FExProcess); sCommandLine:= FormatArchiverCommand(FMultiArcItem.FArchiver, FMultiArcItem.FList, FArchiveName, nil, '', '','', FPassword); if FMultiArcItem.FDebug then DCDebug(sCommandLine); FExProcess := TExProcess.Create(sCommandLine); FExProcess.OnReadLn := @OnReadLn; if Length(FMultiArcItem.FPasswordQuery) <> 0 then begin FExProcess.QueryString:= UTF8ToConsole(FMultiArcItem.FPasswordQuery); FExProcess.OnQueryString:= @OnQueryString; end; end; function ExtractErrorLevel(var Command: String): LongInt; var I, J: Integer; sErrorLevel: String; begin Result:= 0; I:= Pos('%E', Command); if I > 0 then begin J:= I + 2; while (J <= Length(Command)) and (Command[J] in ['0'..'9']) do Inc(J); sErrorLevel:= Copy(Command, I + 2, J - I - 2); Delete(Command, I, J - I); Result:= StrToIntDef(sErrorLevel, 0); end; end; function FormatArchiverCommand(const Archiver, sCmd, anArchiveName: String; aFiles: TFiles; sFileName: String; aDestPath: String; sTempFile: String; sPassword: String; sVolumeSize: String; sCustomParams: String): string; type TFunctType = (ftNone, ftArchiverLongName, ftArchiverShortName, ftArchiveLongName, ftArchiveShortName, ftFileListLongName, ftFileListShortName, ftFileName, ftTargetArchiveDir, ftVolumeSize, ftPassword, ftCustomParams); TStatePos = (spNone, spPercent, spFunction, spComplete); TFuncModifiers = set of (fmOnlyFiles, fmQuoteWithSpaces, fmQuoteAny, fmNameOnly, fmPathOnly, fmUTF8, fmAnsi); TState = record pos: TStatePos; functStartIndex, bracketStartIndex: integer; funct: TFunctType; FuncModifiers: TFuncModifiers; closeBracket: Boolean; end; var index: integer; state: Tstate; sOutput: string = ''; parseStartIndex: integer; function BuildName(const sFileName: String): String; begin Result := sFileName; if fmNameOnly in state.FuncModifiers then Result := ExtractFileName(Result); if fmPathOnly in state.FuncModifiers then Result := ExtractFilePath(Result); if (fmQuoteWithSpaces in state.FuncModifiers) and (Pos(#32, Result) <> 0) then Result := '"' + Result + '"'; if (fmQuoteAny in state.FuncModifiers) then Result := '"' + Result + '"'; if (fmUTF8 in state.FuncModifiers) then Exit; if (fmAnsi in state.FuncModifiers) then Result := UTF8ToSys(Result) else Result := UTF8ToConsole(Result); end; function BuildFileList(bShort: boolean): String; var I: integer; FileList: TStringListEx; begin if not Assigned(aFiles) then Exit(EmptyStr); Result := sTempFile; FileList := TStringListEx.Create; for I := 0 to aFiles.Count - 1 do begin if aFiles[I].IsDirectory and (fmOnlyFiles in state.FuncModifiers) then Continue; if bShort then FileList.Add(BuildName(mbFileNameToSysEnc(aFiles[I].FullPath))) else FileList.Add(BuildName(aFiles[I].FullPath)); end; try FileList.SaveToFile(Result); except Result := EmptyStr; end; FileList.Free; end; function BuildOutput: String; begin case state.funct of ftArchiverLongName: // TProcess arguments must be enclosed with double quotes and not escaped. Result := '"' + mbExpandFileName(Archiver) + '"'; ftArchiverShortName: // TProcess arguments must be enclosed with double quotes and not escaped. Result := '"' + mbFileNameToSysEnc(mbExpandFileName(Archiver)) + '"'; ftArchiveLongName: Result := BuildName(anArchiveName); ftArchiveShortName: Result := BuildName(mbFileNameToSysEnc(anArchiveName)); ftFileListLongName: Result := BuildFileList(False); ftFileListShortName: Result := BuildFileList(True); ftFileName: Result:= BuildName(sFileName); ftTargetArchiveDir: Result := BuildName(aDestPath); ftVolumeSize: Result:= sVolumeSize; ftPassword: Result:= UTF8ToConsole(sPassword); ftCustomParams: Result:= sCustomParams; else Exit(''); end; end; procedure ResetState(var aState: TState); begin with aState do begin pos := spNone; funct := ftNone; functStartIndex := 0; FuncModifiers := []; if closeBracket then begin closeBracket:= False; bracketStartIndex:= 0; end; end; end; procedure AddParsedText(limit: integer); begin // Copy [parseStartIndex .. limit - 1]. if limit > parseStartIndex then sOutput := sOutput + Copy(sCmd, parseStartIndex, limit - parseStartIndex); parseStartIndex := index; end; procedure AddBrackedText(limit: integer); begin // Copy [state.bracketStartIndex + 1 .. limit - 1]. if limit > state.bracketStartIndex then sOutput := sOutput + Copy(sCmd, state.bracketStartIndex + 1, limit - state.bracketStartIndex - 1); end; procedure DoFunction; var aOutput: String; begin aOutput:= BuildOutput; if (aOutput = EmptyStr) and (state.bracketStartIndex <> 0) then begin AddParsedText(state.bracketStartIndex); end else begin if (state.bracketStartIndex <> 0) then begin // add text before bracket AddParsedText(state.bracketStartIndex); //add text after bracket AddBrackedText(state.functStartIndex); end else AddParsedText(state.functStartIndex); sOutput := sOutput + aOutput; end; ResetState(state); end; begin try index := 1; parseStartIndex := index; FillByte(state, SizeOf(state), 0); ResetState(state); while index <= Length(sCmd) do begin case state.pos of spNone: case sCmd[index] of '%': begin state.pos := spPercent; state.functStartIndex := index; end; '{': begin state.bracketStartIndex := index; end; end; spPercent: case sCmd[index] of 'P': begin state.funct := ftArchiverLongName; state.pos := spFunction; end; 'p': begin state.funct := ftArchiverShortName; state.pos := spFunction; end; 'A': begin state.funct := ftArchiveLongName; state.pos := spFunction; end; 'a': begin state.funct := ftArchiveShortName; state.pos := spFunction; end; 'L': begin state.funct := ftFileListLongName; state.pos := spFunction; end; 'l': begin state.funct := ftFileListShortName; state.pos := spFunction; end; 'F': begin state.funct := ftFileName; state.pos := spFunction; end; 'R': begin state.funct := ftTargetArchiveDir; state.pos := spFunction; end; 'V': begin state.funct := ftVolumeSize; state.pos := spFunction; end; 'W': begin state.funct := ftPassword; state.pos := spFunction; end; 'S': begin state.funct := ftCustomParams; state.pos := spFunction; end; else state.pos := spFunction; end; spFunction: case sCmd[index] of 'F': begin state.FuncModifiers := state.FuncModifiers + [fmOnlyFiles]; state.pos := spFunction; end; 'Q': begin state.FuncModifiers := state.FuncModifiers + [fmQuoteWithSpaces]; state.pos := spFunction; end; 'q': begin state.FuncModifiers := state.FuncModifiers + [fmQuoteAny]; state.pos := spFunction; end; 'W': begin state.FuncModifiers := state.FuncModifiers + [fmNameOnly]; state.pos := spFunction; end; 'P': begin state.FuncModifiers := state.FuncModifiers + [fmPathOnly]; state.pos := spFunction; end; 'U': begin state.FuncModifiers := state.FuncModifiers + [fmUTF8]; state.pos := spFunction; end; 'A': begin state.FuncModifiers := state.FuncModifiers + [fmAnsi]; state.pos := spFunction; end; '}': begin state.closeBracket:= True; end else state.pos := spComplete; end; end; if state.pos <> spComplete then Inc(index) // check next character else // Process function and then check current character again after resetting state. DoFunction; end; // while // Finish current parse. if state.pos in [spFunction] then DoFunction else AddParsedText(index); Result := sOutput; finally end; end; end. ������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivelistoperation.pas�������������������������0000644�0001750�0000144�00000003116�11753503774�026543� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uMultiArchiveFileSource, uFileSource; type TMultiArchiveListOperation = class(TFileSourceListOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, uOSUtils, DCStrUtils, uMultiArc, uFile; constructor TMultiArchiveListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FMultiArchiveFileSource := aFileSource as IMultiArchiveFileSource; inherited Create(aFileSource, aPath); end; procedure TMultiArchiveListOperation.MainExecute; var I : Integer; CurrFileName : String; // Current file name ArcFileList: TList; aFile: TFile; begin FFiles.Clear; if not FileSource.IsPathAtRoot(Path) then begin aFile := TMultiArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FMultiArchiveFileSource.ArchiveFileList; for I := 0 to ArcFileList.Count - 1 do begin CheckOperationState; CurrFileName := PathDelim + TArchiveItem(ArcFileList.Items[I]).FileName; if not IsInPath(Path, CurrFileName, False, False) then Continue; with FMultiArchiveFileSource.MultiArcItem do aFile := TMultiArchiveFileSource.CreateFile(Path, TArchiveItem(ArcFileList.Items[I]), FFormMode); FFiles.Add(AFile); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivecopyoutoperation.pas����������������������0000644�0001750�0000144�00000052140�12612505011�027250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveCopyOutOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StringHashList, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFileSource, uFile, uMultiArchiveFileSource; type { TMultiArchiveCopyOutOperation } TMultiArchiveCopyOutOperation = class(TFileSourceCopyOutOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FFullFilesTreeToExtract: TFiles; // source files including all files/dirs in subdirectories // Options FPassword: String; FExtractWithoutPath: Boolean; {en Creates neccessary paths before extracting files from archive. @param(Files List of files/directories to extract (relative to archive root).) @param(sDestPath Destination path where the files will be extracted.) @param(CurrentArchiveDir Path inside the archive from where the files will be extracted.) @param(CreatedPaths This list will be filled with absolute paths to directories that were created, together with their attributes.)} procedure CreateDirs(const theFiles: TFiles; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); {en Sets attributes for directories. @param(Paths The list of absolute paths, which attributes are to be set. Each list item's data field must be a pointer to TMultiArchiveFile, from where the attributes are retrieved.} function SetDirsAttributes(const Paths: TStringHashList): Boolean; function DoFileExists(aFile: TFile; const AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const SourceName, TargetName: String; ExitStatus: LongInt); protected FExProcess: TExProcess; FTempFile: String; FFileMask: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure OnQueryString(str: string); procedure UpdateProgress(SourceName, TargetName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property Password: String read FPassword write FPassword; property ExtractWithoutPath: Boolean read FExtractWithoutPath write FExtractWithoutPath; end; implementation uses LCLProc, FileUtil, uOSUtils, DCOSUtils, DCStrUtils, uMultiArc, uFileSourceOperationUI, fMultiArchiveCopyOperationOptions, uMultiArchiveUtil, uFileProcs, uLng, DCDateTimeUtils, DCBasicTypes, uShowMsg, uFileSystemUtil; constructor TMultiArchiveCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FMultiArchiveFileSource := aSourceFileSource as IMultiArchiveFileSource; FPassword:= FMultiArchiveFileSource.Password; FFullFilesTreeToExtract:= nil; FFileExistsOption := fsoofeNone; FExtractWithoutPath:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TMultiArchiveCopyOutOperation.Destroy; begin FreeThenNil(FFullFilesTreeToExtract); inherited Destroy; end; procedure TMultiArchiveCopyOutOperation.Initialize; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); with FMultiArchiveFileSource.MultiArcItem do if Length(FPasswordQuery) <> 0 then begin FExProcess.QueryString:= UTF8ToConsole(FPasswordQuery); FExProcess.OnQueryString:= @OnQueryString; end; AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FFileMask := ExtractFileName(TargetPath); if FFileMask = '' then FFileMask := '*'; // extract all selected files/folders with FMultiArchiveFileSource do FillAndCount(FFileMask, SourceFiles, True, FFullFilesTreeToExtract, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveCopyOutOperation.MainExecute; var TargetFileName, SourcePath, sTempDir: String; CreatedPaths: TStringHashList = nil; I: Integer; aFile: TFile; MultiArcItem: TMultiArcItem; sReadyCommand, sCommandLine: String; FilesToExtract: TFiles = nil; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; try // Archive current path SourcePath:= ExcludeFrontPathDelimiter(SourceFiles.Path); // Check ExtractWithoutPath option if FExtractWithoutPath then sCommandLine:= MultiArcItem.FExtractWithoutPath else begin // Create needed directories. CreatedPaths := TStringHashList.Create(True); CreateDirs(FFullFilesTreeToExtract, TargetPath, SourcePath, CreatedPaths); sCommandLine:= MultiArcItem.FExtract; end; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // extract file by file for I:= 0 to FFullFilesTreeToExtract.Count - 1 do begin CheckOperationState; aFile:= FFullFilesTreeToExtract[I]; // Now check if the file is to be extracted. if (not aFile.AttributesProperty.IsDirectory) then // Omit directories (we handle them ourselves). begin // Check ExtractWithoutPath option if FExtractWithoutPath then TargetFileName := TargetPath + aFile.Name else TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); // Check existence of target file if (DoFileExists(aFile, TargetFileName) <> fsoofeOverwrite) then Continue; // Get target directory sTempDir:= ExtractFileDir(TargetFileName); UpdateProgress(aFile.FullPath, TargetFileName, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath, TargetPath, FTempFile, FPassword ); OnReadLn(sReadyCommand); // Set target directory as archiver current directory FExProcess.Process.CurrentDirectory:= mbFileNameToSysEnc(sTempDir); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, TargetFileName, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath, TargetFileName, FExProcess.ExitStatus); end; end // for else // extract whole file list begin sTempDir:= TargetPath; // directory where files will be unpacked // if extract from not root directory and with path if (SourceFiles.Path <> PathDelim) and (FExtractWithoutPath = False) then begin sTempDir:= GetTempName(TargetPath); mbCreateDir(sTempDir); end; // Check existence of target files FilesToExtract:= TFiles.Create(FFullFilesTreeToExtract.Path); for I:= 0 to FFullFilesTreeToExtract.Count - 1 do begin aFile:= FFullFilesTreeToExtract[I]; if FExtractWithoutPath then TargetFileName := TargetPath + aFile.Name else TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); if (DoFileExists(aFile, TargetFileName) = fsoofeOverwrite) then FilesToExtract.Add(aFile.Clone); end; if FilesToExtract.Count = 0 then Exit; sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FilesToExtract, EmptyStr, TargetPath, FTempFile, FPassword ); OnReadLn(sReadyCommand); // Set target directory as archiver current directory FExProcess.Process.CurrentDirectory:= mbFileNameToSysEnc(sTempDir); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, EmptyStr, FExProcess.ExitStatus); // if extract from not root directory and with path if (SourceFiles.Path <> PathDelim) and (FExtractWithoutPath = False) then begin // move files to real target directory for I:= 0 to FilesToExtract.Count - 1 do begin aFile:= FilesToExtract[I]; if not aFile.AttributesProperty.IsDirectory then begin TargetFileName := TargetPath + ExtractDirLevel(SourcePath, aFile.FullPath); UpdateProgress(aFile.FullPath, TargetFileName, 0); mbRenameFile(sTempDir + PathDelim + aFile.FullPath, TargetFileName); UpdateProgress(aFile.FullPath, TargetFileName, aFile.Size); end end; DelTree(sTempDir); end; end; if (FExtractWithoutPath = False) then SetDirsAttributes(CreatedPaths); finally FreeThenNil(CreatedPaths); FreeThenNil(FilesToExtract); end; end; procedure TMultiArchiveCopyOutOperation.Finalize; begin FreeThenNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveCopyOutOperation.CreateDirs( const theFiles: TFiles; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); var // List of paths that we know must be created. PathsToCreate: TStringHashList; // List of possible directories to create with their attributes. // This hash list is created to speed up searches for attributes in archive file list. DirsAttributes: TStringHashList; i: Integer; CurrentFileName: String; aFile: TFile; Directories: TStringList; PathIndex: Integer; ListIndex: Integer; TargetDir: String; begin { First, collect all the paths that need to be created and their attributes. } PathsToCreate := TStringHashList.Create(True); DirsAttributes := TStringHashList.Create(True); for I := 0 to theFiles.Count - 1 do begin aFile := theFiles[I]; if aFile.AttributesProperty.IsDirectory then begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, aFile.FullPath); // Save this directory and a pointer to its entry. DirsAttributes.Add(CurrentFileName, aFile); // Paths in PathsToCreate list must end with path delimiter. CurrentFileName := IncludeTrailingPathDelimiter(CurrentFileName); if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end else begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, aFile.Path); // If CurrentFileName is empty now then it was a file in current archive // directory, therefore we don't have to create any paths for it. if Length(CurrentFileName) > 0 then if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end; { Second, create paths and save which paths were created and their attributes. } Directories := TStringList.Create; try sDestPath := IncludeTrailingPathDelimiter(sDestPath); // Create path to destination directory (we don't have attributes for that). mbForceDirectory(sDestPath); CreatedPaths.Clear; for PathIndex := 0 to PathsToCreate.Count - 1 do begin Directories.Clear; // Create also all parent directories of the path to create. // This adds directories to list in order from the outer to inner ones, // for example: dir, dir/dir2, dir/dir2/dir3. if GetDirs(PathsToCreate.List[PathIndex]^.Key, Directories) <> -1 then try for i := 0 to Directories.Count - 1 do begin TargetDir := sDestPath + Directories.Strings[i]; if (CreatedPaths.Find(TargetDir) = -1) and (not DirPathExists(TargetDir)) then begin if mbForceDirectory(TargetDir) = False then begin // Error, cannot create directory. Break; // Don't try to create subdirectories. end else begin // Retrieve attributes for this directory, if they are stored. ListIndex := DirsAttributes.Find(Directories.Strings[i]); if ListIndex <> -1 then aFile := TFile(DirsAttributes.List[ListIndex]^.Data) else aFile := nil; CreatedPaths.Add(TargetDir, aFile); end; end; end; except end; end; finally FreeAndNil(PathsToCreate); FreeAndNil(DirsAttributes); FreeAndNil(Directories); end; end; function TMultiArchiveCopyOutOperation.SetDirsAttributes(const Paths: TStringHashList): Boolean; var PathIndex: Integer; TargetDir: String; aFile: TFile; Time: TFileTime; begin Result := True; for PathIndex := 0 to Paths.Count - 1 do begin // Get attributes. aFile := TFile(Paths.List[PathIndex]^.Data); if Assigned(aFile) then begin TargetDir := Paths.List[PathIndex]^.Key; try {$IF DEFINED(MSWINDOWS)} // Restore attributes, e.g., hidden, read-only. // On Unix attributes value would have to be translated somehow. mbFileSetAttr(TargetDir, aFile.Attributes); {$ENDIF} Time:= DateTimeToFileTime(aFile.ModificationTime); // Set creation, modification time mbFileSetTime(TargetDir, Time, Time, Time); except Result := False; end; end; end; end; function TMultiArchiveCopyOutOperation.DoFileExists(aFile: TFile; const AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const PossibleResponses: array[0..7] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel); var Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aFile.ModificationTime > FileTimeToDateTime(mbFileAge(AbsoluteTargetFileName)) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aFile.Size > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aFile.Size < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin if not mbFileExists(AbsoluteTargetFileName) then Result:= fsoofeOverwrite else case FFileExistsOption of fsoofeNone: begin Message:= FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime); case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourNone, fsourCancel: RaiseAbortOperation; end; end; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else begin Result := FFileExistsOption; end; end; end; procedure TMultiArchiveCopyOutOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveCopyOutOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveCopyOutOperation.CheckForErrors(const SourceName, TargetName: String; ExitStatus: LongInt); begin if ExitStatus > FErrorLevel then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FMultiArchiveFileSource.ArchiveFileName + PathDelim + SourceName + ' -> ' + TargetName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogExtract, [FMultiArchiveFileSource.ArchiveFileName + PathDelim + SourceName +' -> ' + TargetName]), [log_arc_op], lmtSuccess); end; // Success end; procedure TMultiArchiveCopyOutOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveCopyOutOperation.OnQueryString(str: string); var pcPassword: PAnsiChar; begin ShowInputQuery(FMultiArchiveFileSource.MultiArcItem.FDescription, rsMsgPasswordEnter, True, FPassword); pcPassword:= PAnsiChar(UTF8ToConsole(FPassword + #13#10)); FExProcess.Process.Input.Write(pcPassword^, Length(pcPassword)); end; procedure TMultiArchiveCopyOutOperation.UpdateProgress(SourceName, TargetName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; CurrentFileDoneBytes:= IncSize; DoneBytes := DoneBytes + CurrentFileDoneBytes; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyOutOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; class function TMultiArchiveCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TMultiArchiveCopyOperationOptionsUI; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivecopyinoperation.pas�����������������������0000644�0001750�0000144�00000030215�12615123260�027053� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uLog, uGlobs, un_process, uFileSourceOperation, uFileSourceCopyOperation, uFileSource, uFile, uMultiArchiveFileSource; type { TMultiArchiveCopyInOperation } TMultiArchiveCopyInOperation = class(TFileSourceCopyInOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FFullFilesTree, FRemoveFilesTree: TFiles; FPackingFlags: Integer; FPassword: String; FVolumeSize: String; FCustomParams: String; FCallResult, FTarBefore: Boolean; // Create TAR archive first FTarFileName: String; // Temporary TAR archive name procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function CheckForErrors(const FileName: String; ExitStatus: LongInt): Boolean; procedure DeleteFile(const BasePath: String; aFile: TFile); procedure DeleteFiles(const BasePath: String; aFiles: TFiles); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; FCommandLine: String; function Tar: Boolean; procedure OnReadLn(str: string); procedure OperationProgressHandler; procedure UpdateProgress(SourceName, TargetName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; property PackingFlags: Integer read FPackingFlags write FPackingFlags; property Password: String read FPassword write FPassword; property VolumeSize: String read FVolumeSize write FVolumeSize; property CustomParams: String read FCustomParams write FCustomParams; property TarBefore: Boolean read FTarBefore write FTarBefore; end; implementation uses LCLProc, DCStrUtils, uDCUtils, uMultiArc, uLng, WcxPlugin, uFileSourceOperationUI, uFileSystemFileSource, uFileSystemUtil, uMultiArchiveUtil, DCOSUtils, uOSUtils, uTarWriter; constructor TMultiArchiveCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FFullFilesTree := nil; FRemoveFilesTree := nil; FPackingFlags := 0; FPassword := EmptyStr; FVolumeSize := EmptyStr; FTarBefore:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TMultiArchiveCopyInOperation.Destroy; begin inherited Destroy; FreeAndNil(FFullFilesTree); FreeAndNil(FRemoveFilesTree); end; procedure TMultiArchiveCopyInOperation.Initialize; begin with FMultiArchiveFileSource do begin if (ExtractFileExt(ArchiveFileName) = GetSfxExt) and (Length(MultiArcItem.FAddSelfExtract) <> 0) then FCommandLine:= MultiArcItem.FAddSelfExtract else FCommandLine:= MultiArcItem.FAdd; end; if (TargetPath <> PathDelim) and (Pos('%R', FCommandLine) = 0) then begin AskQuestion('', rsMsgErrNotSupported, [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @OperationProgressHandler; FTempFile:= GetTempName(GetTempFolder); AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; with FStatistics do begin if SourceFiles.Count = 1 then CurrentFileFrom:= SourceFiles[0].FullPath else CurrentFileFrom:= SourceFiles.Path + AllFilesMask; CurrentFileTo:= FMultiArchiveFileSource.ArchiveFileName; end; FillAndCount(SourceFiles, False, False, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveCopyInOperation.MainExecute; var I: Integer; sRootPath, sDestPath: String; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand: String; begin // Put to TAR archive if needed if FTarBefore then Tar; MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sDestPath := ExcludeFrontPathDelimiter(TargetPath); sDestPath := ExcludeTrailingPathDelimiter(sDestPath); sRootPath:= FFullFilesTree.Path; ChangeFileListRoot(EmptyStr, FFullFilesTree); // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(FCommandLine); if Pos('%F', FCommandLine) <> 0 then // pack file by file for I:= FFullFilesTree.Count - 1 downto 0 do begin aFile:= FFullFilesTree[I]; UpdateProgress(sRootPath + aFile.FullPath, sDestPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, FCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath, sDestPath, FTempFile, Password, VolumeSize, CustomParams ); OnReadLn(sReadyCommand); // Set archiver current path to file list root FExProcess.Process.CurrentDirectory:= mbFileNameToSysEnc(sRootPath); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(sRootPath + aFile.FullPath, sDestPath, aFile.Size); // Check for errors. if CheckForErrors(sRootPath + aFile.FullPath, FExProcess.ExitStatus) then begin if (PackingFlags and PK_PACK_MOVE_FILES) <> 0 then DeleteFile(sRootPath, aFile); end; end else // pack whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, FCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTree, EmptyStr, sDestPath, FTempFile, Password, VolumeSize, CustomParams ); OnReadLn(sReadyCommand); // Set archiver current path to file list root FExProcess.Process.CurrentDirectory:= mbFileNameToSysEnc(sRootPath); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. if CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus) then begin if (PackingFlags and PK_PACK_MOVE_FILES) <> 0 then DeleteFiles(sRootPath, FFullFilesTree); end; end; // Delete temporary TAR archive if needed if FTarBefore then begin mbDeleteFile(FTarFileName); if FCallResult and (PackingFlags and PK_PACK_MOVE_FILES <> 0) then DeleteFiles(EmptyStr, FRemoveFilesTree); end; end; procedure TMultiArchiveCopyInOperation.Finalize; begin FreeThenNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveCopyInOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveCopyInOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; function TMultiArchiveCopyInOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt): Boolean; begin if ExitStatus > FErrorLevel then begin Result:= False; ShowError(Format(rsMsgLogError + rsMsgLogPack, [FileName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin Result:= True; LogMessage(Format(rsMsgLogSuccess + rsMsgLogPack, [FileName]), [log_arc_op], lmtSuccess); end; FCallResult:= Result; end; procedure TMultiArchiveCopyInOperation.DeleteFile(const BasePath: String; aFile: TFile); begin if aFile.IsDirectory then mbRemoveDir(BasePath + aFile.FullPath) else mbDeleteFile(BasePath + aFile.FullPath); end; procedure TMultiArchiveCopyInOperation.DeleteFiles(const BasePath: String; aFiles: TFiles); var I: Integer; aFile: TFile; begin for I:= aFiles.Count - 1 downto 0 do begin aFile:= aFiles[I]; if aFile.IsDirectory then mbRemoveDir(BasePath + aFile.FullPath) else mbDeleteFile(BasePath + aFile.FullPath); end; end; function TMultiArchiveCopyInOperation.Tar: Boolean; var TarWriter: TTarWriter = nil; begin Result:= False; FTarFileName:= RemoveFileExt(FMultiArchiveFileSource.ArchiveFileName); TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics ); try if TarWriter.ProcessTree(FFullFilesTree, FStatistics) then begin // Fill file list with tar archive file FRemoveFilesTree:= FFullFilesTree; FFullFilesTree:= TFiles.Create(ExtractFilePath(FTarFileName)); FFullFilesTree.Add(TFileSystemFileSource.CreateFileFromFile(FTarFileName)); Result:= True; end; finally FreeAndNil(TarWriter); end; end; procedure TMultiArchiveCopyInOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveCopyInOperation.OperationProgressHandler; var ArchiveSize: Int64; begin Self.CheckOperationState; with FStatistics do begin ArchiveSize := mbFileSize(FMultiArchiveFileSource.ArchiveFileName); if ArchiveSize > DoneBytes then DoneBytes := ArchiveSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyInOperation.UpdateProgress(SourceName, TargetName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; CurrentFileDoneBytes:= IncSize; DoneBytes := DoneBytes + CurrentFileDoneBytes; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveCopyInOperation.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchiveexecuteoperation.pas����������������������0000644�0001750�0000144�00000003162�12612505011�027210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uMultiArchiveFileSource; type { TMultiArchiveExecuteOperation } TMultiArchiveExecuteOperation = class(TFileSourceExecuteOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses fPackInfoDlg; constructor TMultiArchiveExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TMultiArchiveExecuteOperation.Initialize; begin end; procedure TMultiArchiveExecuteOperation.MainExecute; begin FExecuteOperationResult:= ShowPackInfoDlg(FMultiArchiveFileSource, ExecutableFile); end; procedure TMultiArchiveExecuteOperation.Finalize; begin end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/umultiarchivetestarchiveoperation.pas������������������0000644�0001750�0000144�00000016030�12670343034�030076� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiArchiveTestArchiveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceTestArchiveOperation, uFileSource, uFileSourceOperationUI, uFile, uMultiArchiveFileSource, uGlobs, uLog, un_process; type { TMultiArchiveTestArchiveOperation } TMultiArchiveTestArchiveOperation = class(TFileSourceTestArchiveOperation) private FMultiArchiveFileSource: IMultiArchiveFileSource; FStatistics: TFileSourceTestArchiveOperationStatistics; // local copy of statistics FFullFilesTreeToTest: TFiles; // source files including all files/dirs in subdirectories procedure ShowError(sMessage: String; logOptions: TLogOptions); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure CheckForErrors(const FileName: String; ExitStatus: LongInt); protected FExProcess: TExProcess; FTempFile: String; FErrorLevel: LongInt; procedure OnReadLn(str: string); procedure UpdateProgress(SourceName: String; IncSize: Int64); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; AState: TFileSourceOperationState); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uOSUtils, DCOSUtils, uLng, uMultiArc, uMultiArchiveUtil, LCLProc; constructor TMultiArchiveTestArchiveOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FMultiArchiveFileSource := aTargetFileSource as IMultiArchiveFileSource; FFullFilesTreeToTest:= nil; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TMultiArchiveTestArchiveOperation.Destroy; begin FreeThenNil(FFullFilesTreeToTest); inherited Destroy; end; procedure TMultiArchiveTestArchiveOperation.Initialize; begin FExProcess:= TExProcess.Create(EmptyStr); FExProcess.OnReadLn:= @OnReadLn; FExProcess.OnOperationProgress:= @CheckOperationState; FTempFile:= GetTempName(GetTempFolder); AddStateChangedListener([fsosStarting, fsosPausing, fsosStopping], @FileSourceOperationStateChangedNotify); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.ArchiveFile:= FMultiArchiveFileSource.ArchiveFileName; with FMultiArchiveFileSource do FillAndCount('*.*', SourceFiles, True, FFullFilesTreeToTest, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TMultiArchiveTestArchiveOperation.MainExecute; var I: Integer; MultiArcItem: TMultiArcItem; aFile: TFile; sReadyCommand, sCommandLine: String; begin MultiArcItem := FMultiArchiveFileSource.MultiArcItem; sCommandLine:= MultiArcItem.FTest; // Get maximum acceptable command errorlevel FErrorLevel:= ExtractErrorLevel(sCommandLine); if Pos('%F', sCommandLine) <> 0 then // test file by file for I:=0 to FFullFilesTreeToTest.Count - 1 do begin aFile:= FFullFilesTreeToTest[I]; UpdateProgress(aFile.FullPath, 0); sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, nil, aFile.FullPath ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; UpdateProgress(aFile.FullPath, aFile.Size); // Check for errors. CheckForErrors(aFile.FullPath , FExProcess.ExitStatus); end else // test whole file list begin sReadyCommand:= FormatArchiverCommand( MultiArcItem.FArchiver, sCommandLine, FMultiArchiveFileSource.ArchiveFileName, FFullFilesTreeToTest, EmptyStr, EmptyStr, FTempFile ); OnReadLn(sReadyCommand); FExProcess.SetCmdLine(sReadyCommand); FExProcess.Execute; // Check for errors. CheckForErrors(FMultiArchiveFileSource.ArchiveFileName, FExProcess.ExitStatus); end; end; procedure TMultiArchiveTestArchiveOperation.Finalize; begin FreeThenNil(FExProcess); with FMultiArchiveFileSource.MultiArcItem do if not FDebug then mbDeleteFile(FTempFile); end; procedure TMultiArchiveTestArchiveOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TMultiArchiveTestArchiveOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TMultiArchiveTestArchiveOperation.OnReadLn(str: string); begin with FMultiArchiveFileSource.MultiArcItem do if FOutput or FDebug then logWrite(Thread, str, lmtInfo, True, False); end; procedure TMultiArchiveTestArchiveOperation.CheckForErrors(const FileName: String; ExitStatus: LongInt); begin if ExitStatus > FErrorLevel then begin ShowError(Format(rsMsgLogError + rsMsgLogDelete, [FileName + ' - Exit status: ' + IntToStr(ExitStatus)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_arc_op], lmtSuccess); end; end; procedure TMultiArchiveTestArchiveOperation.UpdateProgress(SourceName: String; IncSize: Int64); begin with FStatistics do begin FStatistics.CurrentFile:= SourceName; DoneBytes := DoneBytes + IncSize; UpdateStatistics(FStatistics); end; end; procedure TMultiArchiveTestArchiveOperation.FileSourceOperationStateChangedNotify (Operation: TFileSourceOperation; AState: TFileSourceOperationState); begin case AState of fsosStarting: FExProcess.Process.Resume; fsosPausing: FExProcess.Process.Suspend; fsosStopping: FExProcess.Stop; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multiarchive/fmultiarchivecopyoperationoptions.pas������������������0000644�0001750�0000144�00000004700�11747211345�030130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fMultiArchiveCopyOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, uMultiArchiveCopyInOperation, uMultiArchiveCopyOutOperation; type { TMultiArchiveCopyOperationOptionsUI } TMultiArchiveCopyOperationOptionsUI = class(TFileSourceOperationOptionsUI) cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; private procedure SetOperationOptions(CopyInOperation: TMultiArchiveCopyInOperation); overload; procedure SetOperationOptions(CopyOutOperation: TMultiArchiveCopyOutOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; implementation {$R *.lfm} uses uGlobs, uFileSourceOperationOptions; { TMultiArchiveCopyOperationOptionsUI } constructor TMultiArchiveCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; end; procedure TMultiArchiveCopyOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TMultiArchiveCopyInOperation then SetOperationOptions(Operation as TMultiArchiveCopyInOperation) else if Operation is TMultiArchiveCopyOutOperation then SetOperationOptions(Operation as TMultiArchiveCopyOutOperation); end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(CopyInOperation: TMultiArchiveCopyInOperation); begin { with CopyInOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; } end; procedure TMultiArchiveCopyOperationOptionsUI.SetOperationOptions(CopyOutOperation: TMultiArchiveCopyOutOperation); begin with CopyOutOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; end. ����������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationmessageboxesui.pas������������������������������0000644�0001750�0000144�00000005340�12266246673�025566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperationMessageBoxesUI; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperationUI; type {en We assume here the UI is used only from the GUI thread. } TFileSourceOperationMessageBoxesUI = class(TFileSourceOperationUI) public constructor Create; override; destructor Destroy; override; function AskQuestion(Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse ) : TFileSourceOperationUIResponse; override; end; implementation uses uShowMsg; const ResponseToButton: array[TFileSourceOperationUIResponse] of TMyMsgButton = (msmbOK, msmbOK, msmbNo, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbResume, msmbCopyInto, msmbCopyIntoAll, msmbOverwrite, msmbOverwriteAll, msmbOverwriteOlder, msmbOverwriteSmaller, msmbOverwriteLarger, msmbAutoRenameSource, msmbRenameSource, msmbSkip, msmbSkipAll, msmbIgnoreAll, msmbAll, msmbRetry, msmbAbort); ResultToResponse: array[TMyMsgResult] of TFileSourceOperationUIResponse = (fsourOk, fsourNo, fsourYes, fsourCancel, fsourNone, fsourAppend, fsourResume, fsourCopyInto, fsourCopyIntoAll, fsourOverwrite, fsourOverwriteAll, fsourOverwriteOlder, fsourOverwriteSmaller, fsourOverwriteLarger, fsourAutoRenameSource, fsourRenameSource, fsourSkip, fsourSkipAll, fsourIgnoreAll, fsourAll, fsourRetry, fsourAbort); constructor TFileSourceOperationMessageBoxesUI.Create; begin inherited; end; destructor TFileSourceOperationMessageBoxesUI.Destroy; begin inherited; end; function TFileSourceOperationMessageBoxesUI.AskQuestion( Msg: String; Question: String; PossibleResponses: array of TFileSourceOperationUIResponse; DefaultOKResponse: TFileSourceOperationUIResponse; DefaultCancelResponse: TFileSourceOperationUIResponse ) : TFileSourceOperationUIResponse; var Buttons: array of TMyMsgButton; i: Integer; MsgResult: TMyMsgResult; TextMessage: String; begin SetLength(Buttons, Length(PossibleResponses)); for i := 0 to Length(PossibleResponses) - 1 do Buttons[i] := ResponseToButton[PossibleResponses[i]]; TextMessage := Msg; if (Msg <> '') and (Question <> '') then TextMessage := TextMessage { + LineEnding} + ' '; TextMessage := TextMessage + Question; MsgResult := MsgBox(TextMessage, Buttons, ResponseToButton[DefaultOKResponse], ResponseToButton[DefaultCancelResponse]); Result := ResultToResponse[MsgResult]; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/uarchivefilesourceutil.pas������������������������������������������0000644�0001750�0000144�00000020504�12612505011�023113� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uArchiveFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileView, uFile, uArchiveFileSource, uFileSource; function GetArchiveFileSource(SourceFileSource: IFileSource; ArchiveFile: TFile; ArchiveType: String = ''; ArchiveSign: Boolean = False): IArchiveFileSource; procedure TestArchive(aFileView: TFileView; aFiles: TFiles); function FileIsArchive(const FileName: String): Boolean; implementation uses uShowMsg, uLng, DCStrUtils, uFileSourceProperty, uWcxArchiveFileSource, uMultiArchiveFileSource, uFileSystemFileSource, uTempFileSystemFileSource, uFileSourceOperation, uFileSourceOperationTypes, uOperationsManager; // Only for direct access file sources. function GetArchiveFileSourceDirect(SourceFileSource: IFileSource; ArchiveFileName: String; ArchiveType: String; ArchiveSign: Boolean = False): IArchiveFileSource; begin if not (fspDirectAccess in SourceFileSource.Properties) then Exit(nil); if (ArchiveType = EmptyStr) and (ArchiveSign = False) then begin ArchiveType := ExtractOnlyFileExt(ArchiveFileName); end; try // Check if there is a registered WCX plugin for possible archive. Result := FileSourceManager.Find(TWcxArchiveFileSource, ArchiveFileName) as IArchiveFileSource; if not Assigned(Result) then begin if ArchiveSign then Result := TWcxArchiveFileSource.CreateByArchiveSign(SourceFileSource, ArchiveFileName) else Result := TWcxArchiveFileSource.CreateByArchiveType(SourceFileSource, ArchiveFileName, ArchiveType); end; // Check if there is a registered MultiArc addon for possible archive. if not Assigned(Result) then begin Result := FileSourceManager.Find(TMultiArchiveFileSource, ArchiveFileName) as IArchiveFileSource; if not Assigned(Result) then begin if ArchiveSign then Result := TMultiArchiveFileSource.CreateByArchiveSign(SourceFileSource, ArchiveFileName) else Result := TMultiArchiveFileSource.CreateByArchiveType(SourceFileSource, ArchiveFileName, ArchiveType); end; end; except on E: Exception do begin Result:= nil; msgError(nil, E.Message + LineEnding + ArchiveFileName); end; end; end; function GetArchiveFileSource(SourceFileSource: IFileSource; ArchiveFile: TFile; ArchiveType: String = ''; ArchiveSign: Boolean = False): IArchiveFileSource; var TempFS: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; Files: TFiles = nil; LocalArchiveFile: TFile; begin if fspDirectAccess in SourceFileSource.Properties then begin Result := GetArchiveFileSourceDirect(SourceFileSource, ArchiveFile.FullPath, ArchiveType, ArchiveSign); Exit; end; Result := nil; if fspLinksToLocalFiles in SourceFileSource.Properties then begin LocalArchiveFile := ArchiveFile.Clone; try if SourceFileSource.GetLocalName(LocalArchiveFile) then begin TempFS := TTempFileSystemFileSource.Create(LocalArchiveFile.Path); // Source FileSource manages the files, not the TempFileSource. TempFS.DeleteOnDestroy := False; // The files on temp file source are valid as long as source FileSource is valid. TempFS.ParentFileSource := SourceFileSource; Result := GetArchiveFileSourceDirect(TempFS, LocalArchiveFile.FullPath, ArchiveType, ArchiveSign); // If not successful will try to get files through CopyOut below. end; finally FreeAndNil(LocalArchiveFile); end; end; if (not Assigned(Result)) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin if (ArchiveType = EmptyStr) and (ArchiveSign = False) then begin ArchiveType := ArchiveFile.Extension; end; // If checking by extension we don't have to unpack files yet. // First check if there is a registered plugin for the archive extension. if (not ArchiveSign) and (not (TWcxArchiveFileSource.CheckPluginByExt(ArchiveType) or TMultiArchiveFileSource.CheckAddonByExt(ArchiveType))) then begin // No registered handlers for the archive extension. Exit; end; // else either there is a handler for the archive extension // or we have to unpack files first to check // (if creating file source by archive signature). try TempFS := TTempFileSystemFileSource.Create; Files := TFiles.Create(ArchiveFile.Path); Files.Add(ArchiveFile.Clone); Operation := SourceFileSource.CreateCopyOutOperation(TempFS, Files, TempFS.FilesystemRoot); if Assigned(Operation) then begin Operation.Execute; if Operation.Result = fsorFinished then begin Result := GetArchiveFileSourceDirect( TempFS, IncludeTrailingPathDelimiter(TempFS.FilesystemRoot) + ArchiveFile.Name, ArchiveType, ArchiveSign); end; end; finally TempFS := nil; if Assigned(Files) then FreeAndNil(Files); if Assigned(Operation) then FreeAndNil(Operation); end; end; end; procedure TestArchive(aFileView: TFileView; aFiles: TFiles); var I: Integer; FilesToTest: TFiles = nil; Operation: TFileSourceOperation = nil; ArchiveFileSource: IArchiveFileSource; begin try // if in archive if aFileView.FileSource.IsClass(TArchiveFileSource) then begin FilesToTest := aFiles.Clone; if fsoTestArchive in aFileView.FileSource.GetOperationsTypes then begin Operation := aFileView.FileSource.CreateTestArchiveOperation(FilesToTest); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation); end else msgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgErrNotSupported); end else // if filesystem if aFileView.FileSource.IsClass(TFileSystemFileSource) then begin for I := 0 to aFiles.Count - 1 do // test all selected archives try // Check if there is a ArchiveFileSource for possible archive. ArchiveFileSource := GetArchiveFileSource(aFileView.FileSource, aFiles[i]); if Assigned(ArchiveFileSource) then begin // Check if List and fsoTestArchive are supported. if [fsoList, fsoTestArchive] * ArchiveFileSource.GetOperationsTypes = [fsoList, fsoTestArchive] then begin // Get files to test. FilesToTest := ArchiveFileSource.GetFiles(ArchiveFileSource.GetRootDir); if Assigned(FilesToTest) then try // test all files Operation := ArchiveFileSource.CreateTestArchiveOperation(FilesToTest); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation); end else msgWarning(rsMsgNotImplemented); finally if Assigned(FilesToTest) then FreeAndNil(FilesToTest); end; end else msgWarning(rsMsgErrNotSupported); end; // Short pause, so that all operations are not spawned at once. Sleep(100); except on E: Exception do msgError(E.Message + LineEnding + aFiles[i].FullPath); end; // for end else msgWarning(rsMsgErrNotSupported); finally end; end; function FileIsArchive(const FileName: String): Boolean; var ArchiveType: String; begin ArchiveType:= ExtractOnlyFileExt(FileName); Result:= TWcxArchiveFileSource.CheckPluginByExt(ArchiveType) or TMultiArchiveFileSource.CheckAddonByExt(ArchiveType); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/urealfilesource.pas�������������������������������������������������0000644�0001750�0000144�00000000566�11747211345�021541� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uRealFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type IRealFileSource = interface(IFileSource) end; {en Base class for any real file source (filesystem, archive, network, ... - all sources able to produce real files). } TRealFileSource = class(TFileSource, IRealFileSource) end; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/uoperationthread.pas������������������������������������������������0000644�0001750�0000144�00000002117�11747211345�021717� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uOperationThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation; type {en Thread executing a file source operation. } TOperationThread = class(TThread) private FOperation: TFileSourceOperation; protected procedure Execute; override; public {en Creates a new thread for executing an operation. @param(CreateSuspended if @true the thread is not immediately started on creation.) @param(Operation is the file source operation that will be executed.) } constructor Create(CreateSuspended: Boolean; Operation: TFileSourceOperation); reintroduce; end; implementation uses uDebug, uExceptions; constructor TOperationThread.Create(CreateSuspended: Boolean; Operation: TFileSourceOperation); begin FreeOnTerminate := True; FOperation := Operation; FOperation.AssignThread(Self); inherited Create(CreateSuspended, DefaultStackSize); end; procedure TOperationThread.Execute; begin try FOperation.Execute; except on e: Exception do HandleException(e, Self); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationtypes.pas���������������������������������������0000644�0001750�0000144�00000001421�11747211345�023672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperationTypes; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type // Capabilities. // (or make a separate type TFileSourceCapability with fsc... ?) TFileSourceOperationType = ( fsoList, fsoCopy, // Copy files within the same file source. fsoCopyIn, fsoCopyOut, fsoMove, // Move/rename files within the same file source. fsoDelete, fsoWipe, fsoSplit, fsoCombine, fsoCreateDirectory, //fsoCreateFile, //fsoCreateLink, fsoCalcChecksum, fsoCalcStatistics, // Should probably always be supported if fsoList is supported. fsoSetFileProperty, fsoExecute, fsoTestArchive ); TFileSourceOperationTypes = set of TFileSourceOperationType; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcewipeoperation.pas����������������������������������������0000644�0001750�0000144�00000010744�11747211345�023502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceWipeOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type TFileSourceWipeOperationStatistics = record CurrentFile: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that wipes files from an arbitrary file source. File source should match the class type. } { TFileSourceWipeOperation } TFileSourceWipeOperation = class(TFileSourceOperation) private FStatistics: TFileSourceWipeOperationStatistics; FStatisticsAtStartTime: TFileSourceWipeOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FFilesToWipe: TFiles; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceWipeOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property FilesToWipe: TFiles read FFilesToWipe; public constructor Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceWipeOperationStatistics; end; implementation uses uDCUtils, uLng; constructor TFileSourceWipeOperation.Create(aTargetFileSource: IFileSource; var theFilesToWipe: TFiles); begin with FStatistics do begin CurrentFile := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FFilesToWipe := theFilesToWipe; theFilesToWipe := nil; end; destructor TFileSourceWipeOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FFilesToWipe) then FreeAndNil(FFilesToWipe); end; function TFileSourceWipeOperation.GetID: TFileSourceOperationType; begin Result := fsoWipe; end; procedure TFileSourceWipeOperation.DoReloadFileSources; begin FFileSource.Reload(FFilesToWipe.Path); end; function TFileSourceWipeOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if FilesToWipe.Count = 1 then Result := Format(rsOperWipingSomething, [FilesToWipe[0].FullPath]) else Result := Format(rsOperWipingIn, [FilesToWipe.Path]); end; else Result := rsOperWiping; end; end; procedure TFileSourceWipeOperation.UpdateStatistics(var NewStatistics: TFileSourceWipeOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceWipeOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceWipeOperation.RetrieveStatistics: TFileSourceWipeOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. ����������������������������doublecmd-0.7.1/src/filesources/usampleforconfigfilesource.pas��������������������������������������0000644�0001750�0000144�00000005664�12534542254�024001� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSampleForConfigFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uLocalFileSource, uFileSourceOperation, uFileSourceProperty, uFileSourceOperationTypes, uFileProperty; const SAMPLE_PATH = PathDelim+PathDelim+'DoubleCommander'+PathDelim; type ISampleForConfigFileSource = interface(ILocalFileSource) ['{C7D75C6D-38B6-4038-B3C4-4BB200A6FF28}'] end; {en File source for configuration purpose, just fake files. } { TSampleForConfigFileSource } TSampleForConfigFileSource = class(TLocalFileSource, ISampleForConfigFileSource) protected function GetSupportedFileProperties: TFilePropertiesTypes; override; public function GetRootDir(sPath : String): String; override; function GetProperties: TFileSourceProperties; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; class function CreateFile(const APath: String): TFile; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; end; implementation uses uFileSystemFileSource, uSampleForConfigListOperation, uLng; function TSampleForConfigFileSource.GetRootDir(sPath: String): String; begin Result:=sPath; end; function TSampleForConfigFileSource.GetProperties: TFileSourceProperties; begin Result := [fspVirtual]; end; function TSampleForConfigFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin Result := true; end; function TSampleForConfigFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TSampleForConfigListOperation.Create(Self, TargetPath); end; function TSampleForConfigFileSource.GetLocalName(var aFile: TFile): Boolean; begin Result:= True; end; function TSampleForConfigFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList]; end; function TSampleForConfigFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := [fpName, fpSize]; end; class function TSampleForConfigFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; OwnerProperty := TFileOwnerProperty.Create; TypeProperty := TFileTypeProperty.Create; CommentProperty := TFileCommentProperty.Create; end; end; end. ����������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�017675� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxplugincreatedirectoryoperation.pas��������������������0000644�0001750�0000144�00000003576�11747211345�027641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCreateDirectoryOperation, uFileSource, uWfxPluginFileSource; type TWfxPluginCreateDirectoryOperation = class(TFileSourceCreateDirectoryOperation) private FWfxPluginFileSource: IWfxPluginFileSource; public constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uFileSourceOperationUI, uLog, uLng, uGlobs, uWfxModule; constructor TWfxPluginCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin FWfxPluginFileSource := aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, aCurrentPath, aDirectoryPath); end; procedure TWfxPluginCreateDirectoryOperation.Initialize; begin end; procedure TWfxPluginCreateDirectoryOperation.MainExecute; begin with FWfxPluginFileSource do begin case WfxModule.WfxMkDir(BasePath, AbsolutePath) of WFX_NOTSUPPORTED: AskQuestion(rsMsgErrNotSupported, '', [fsourOk], fsourOk, fsourOk); WFX_SUCCESS: begin // write log success if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Thread, Format(rsMsgLogSuccess+rsMsgLogMkDir, [AbsolutePath]), lmtSuccess) end; else begin // write log error if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Thread, Format(rsMsgLogError+rsMsgLogMkDir, [AbsolutePath]), lmtError); end; end; // case end; // with end; procedure TWfxPluginCreateDirectoryOperation.Finalize; begin end; end. ����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginsetfilepropertyoperation.pas��������������������0000644�0001750�0000144�00000015424�12646433403�027704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceSetFilePropertyOperation, uFileSource, uFileSourceOperationOptions, uFile, uFileProperty, uWfxPluginFileSource; type TWfxPluginSetFilePropertyOperation = class(TFileSourceSetFilePropertyOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FFullFilesTree: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceSetFilePropertyOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; protected function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; override; public constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCBasicTypes, DCStrUtils, WfxPlugin, uWfxPluginUtil, DCDateTimeUtils; constructor TWfxPluginSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin FSymLinkOption := fsooslNone; FFullFilesTree := nil; FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, theTargetFiles, theNewProperties); // Assign after calling inherited constructor. FSupportedProperties := [fpName, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime]; end; destructor TWfxPluginSetFilePropertyOperation.Destroy; begin inherited Destroy; if Recursive then begin if Assigned(FFullFilesTree) then FreeAndNil(FFullFilesTree); end; end; procedure TWfxPluginSetFilePropertyOperation.Initialize; var TotalBytes: Int64; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(TargetFiles.Path, FS_STATUS_START, FS_STATUS_OP_ATTRIB); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; if not Recursive then begin FFullFilesTree := TargetFiles; FStatistics.TotalFiles:= FFullFilesTree.Count; end else begin FWfxPluginFileSource.FillAndCount(TargetFiles, True, False, FFullFilesTree, FStatistics.TotalFiles, TotalBytes); // gets full list of files (recursive) end; end; procedure TWfxPluginSetFilePropertyOperation.MainExecute; var aFile: TFile; aTemplateFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to FFullFilesTree.Count - 1 do begin aFile := FFullFilesTree[CurrentFileIndex]; FStatistics.CurrentFile := aFile.FullPath; UpdateStatistics(FStatistics); if Assigned(TemplateFiles) and (CurrentFileIndex < TemplateFiles.Count) then aTemplateFile := TemplateFiles[CurrentFileIndex] else aTemplateFile := nil; SetProperties(aFile, aTemplateFile); with FStatistics do begin DoneFiles := DoneFiles + 1; UpdateStatistics(FStatistics); end; AppProcessMessages; CheckOperationState; end; end; procedure TWfxPluginSetFilePropertyOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(TargetFiles.Path, FS_STATUS_END, FS_STATUS_OP_ATTRIB); end; function TWfxPluginSetFilePropertyOperation.SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; var FileName: String; NewAttributes: TFileAttrs; ftTime: TFileTime; begin Result := sfprSuccess; case aTemplateProperty.GetID of fpName: if (aTemplateProperty as TFileNameProperty).Value <> aFile.Name then begin if not WfxRenameFile(FWfxPluginFileSource, aFile, (aTemplateProperty as TFileNameProperty).Value) then Result := sfprError; end else Result := sfprSkipped; fpAttributes: if (aTemplateProperty as TFileAttributesProperty).Value <> (aFile.Properties[fpAttributes] as TFileAttributesProperty).Value then begin NewAttributes := (aTemplateProperty as TFileAttributesProperty).Value; FileName := aFile.FullPath; with FWfxPluginFileSource.WfxModule do if aTemplateProperty is TNtfsFileAttributesProperty then begin if not WfxSetAttr(FileName, NewAttributes) then Result := sfprError; end else if aTemplateProperty is TUnixFileAttributesProperty then begin if WfxExecuteFile(0, FileName, 'chmod' + #32 + DecToOct(NewAttributes)) <> FS_EXEC_OK then Result := sfprError; end else raise Exception.Create('Unsupported file attributes type'); end else Result := sfprSkipped; fpModificationTime: if (aTemplateProperty as TFileModificationDateTimeProperty).Value <> (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileModificationDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, nil, nil, @ftTime) then Result := sfprError; end else Result := sfprSkipped; fpCreationTime: if (aTemplateProperty as TFileCreationDateTimeProperty).Value <> (aFile.Properties[fpCreationTime] as TFileCreationDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileCreationDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, @ftTime, nil, nil) then Result := sfprError; end else Result := sfprSkipped; fpLastAccessTime: if (aTemplateProperty as TFileLastAccessDateTimeProperty).Value <> (aFile.Properties[fpLastAccessTime] as TFileLastAccessDateTimeProperty).Value then begin ftTime := DateTimeToWfxFileTime((aTemplateProperty as TFileLastAccessDateTimeProperty).Value); with FWfxPluginFileSource.WfxModule do if not WfxSetTime(aFile.FullPath, nil, @ftTime, nil) then Result := sfprError; end else Result := sfprSkipped; else raise Exception.Create('Trying to set unsupported property'); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lrt��������������������0000644�0001750�0000144�00000000265�11747211345�027715� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION=When file exists TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.CBWORKINBACKGROUND.CAPTION=Work in background (separate connection) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginlistoperation.pas�������������������������������0000644�0001750�0000144�00000005610�12612505011�025377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uWfxPluginFileSource, uFileSource; type { TWfxPluginListOperation } TWfxPluginListOperation = class(TFileSourceListOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FCallbackDataClass: TCallbackDataClass; FCurrentPath: String; protected function UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; public constructor Create(aFileSource: IFileSource; aPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uOSUtils, DCStrUtils, uFile, WfxPlugin, uWfxModule, uLog, uLng; function TWfxPluginListOperation.UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; begin logWrite(rsMsgLoadingFileList + IntToStr(PercentDone) + '%', lmtInfo, False, False); Result := 0; end; constructor TWfxPluginListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWfxPluginFileSource := aFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); FCurrentPath:= ExcludeBackPathDelimiter(aPath); inherited Create(aFileSource, aPath); end; destructor TWfxPluginListOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginListOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(FCurrentPath, FS_STATUS_START, FS_STATUS_OP_LIST); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; end; end; procedure TWfxPluginListOperation.MainExecute; var FindData : TWfxFindData; Handle: THandle; aFile: TFile; begin with FWfxPluginFileSource.WFXModule do begin FFiles.Clear; if not FileSource.IsPathAtRoot(Path) then begin aFile := TWfxPluginFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(aFile); end; Handle := WfxFindFirst(FCurrentPath, FindData); if Handle <> wfxInvalidHandle then try repeat CheckOperationState; if (FindData.FileName = '.') or (FindData.FileName = '..') then Continue; aFile := TWfxPluginFileSource.CreateFile(Path, FindData); FFiles.Add(aFile); until (not WfxFindNext(Handle, FindData)); finally FsFindClose(Handle); end; end; // with end; procedure TWfxPluginListOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(FCurrentPath, FS_STATUS_END, FS_STATUS_OP_LIST); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; end; end. ������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginmoveoperation.pas�������������������������������0000644�0001750�0000144�00000011066�12646510036�025406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginMoveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceMoveOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginMoveOperation } TWfxPluginMoveOperation = class(TFileSourceMoveOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FFullFilesTreeToCopy: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceMoveOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; protected function UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; public constructor Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginMoveOperation --------------------------------------------- function TWfxPluginMoveOperation.UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginMoveOperation.Create(aFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); if theSourceFiles.Count > 1 then FInfoOperation:= FS_STATUS_OP_RENMOV_MULTI else FInfoOperation:= FS_STATUS_OP_RENMOV_SINGLE; inherited Create(aFileSource, theSourceFiles, aTargetPath); end; destructor TWfxPluginMoveOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginMoveOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, wpohmMove, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.Initialize; end; procedure TWfxPluginMoveOperation.MainExecute; begin FOperationHelper.ProcessFiles(FFullFilesTreeToCopy, FStatistics); end; procedure TWfxPluginMoveOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginMoveOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginMoveOperationOptionsUI; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxplugincopyoperation.pas�������������������������������0000644�0001750�0000144�00000011357�12646510036�025415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyOperation } TWfxPluginCopyOperation = class(TFileSourceCopyOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FFullFilesTreeToCopy: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; protected function UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginCopyOperation --------------------------------------------- function TWfxPluginCopyOperation.UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aSourceFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); if theSourceFiles.Count > 1 then FInfoOperation:= FS_STATUS_OP_RENMOV_MULTI else FInfoOperation:= FS_STATUS_OP_RENMOV_SINGLE; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); end; destructor TWfxPluginCopyOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, wpohmCopy, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.Initialize; end; procedure TWfxPluginCopyOperation.MainExecute; begin FOperationHelper.ProcessFiles(FFullFilesTreeToCopy, FStatistics); end; procedure TWfxPluginCopyOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyOperationOptionsUI; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginfilesource.pas����������������������������������0000644�0001750�0000144�00000112370�12673524511�024662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginFileSource; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, URIParser, uWFXModule, WfxPlugin, uFile, uFileSourceProperty, uFileSourceOperationTypes, uFileProperty, uFileSource, uFileSourceOperation; type TUpdateProgress = function(SourceName, TargetName: String; PercentDone: Integer): Integer of object; { IWfxPluginFileSource } IWfxPluginFileSource = interface(IFileSource) ['{F1F728C6-F718-4B17-8DE2-BE0134134ED8}'] procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; function GetPluginNumber: LongInt; function GetWfxModule: TWfxModule; property PluginNumber: LongInt read GetPluginNumber; property WfxModule: TWfxModule read GetWfxModule; end; { TWfxPluginFileSource } TWfxPluginFileSource = class; { TCallbackDataClass } TCallbackDataClass = class public // Must use class here instead of interface because of circular reference // between TWfxPluginFileSource and TCallbackDataClass, which would cause // the file source never to be destroyed. // TWfxPluginFileSource controls the lifetime of TCallbackDataClass though, // so it should be fine. FileSource: TWfxPluginFileSource; UpdateProgressFunction: TUpdateProgress; constructor Create(aFileSource: TWfxPluginFileSource); end; { TWfxPluginFileSource } TWfxPluginFileSource = class(TFileSource, IWfxPluginFileSource) private FModuleFileName, FPluginRootName: String; FWFXModule: TWFXModule; FPluginNumber: LongInt; FCallbackDataClass: TCallbackDataClass; function GetPluginNumber: LongInt; function GetWfxModule: TWfxModule; function CreateConnection: TFileSourceConnection; procedure CreateConnections; procedure AddToConnectionQueue(Operation: TFileSourceOperation); procedure RemoveFromConnectionQueue(Operation: TFileSourceOperation); procedure AddConnection(Connection: TFileSourceConnection); procedure RemoveConnection(Connection: TFileSourceConnection); {en Searches connections list for a connection assigned to operation. } function FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); protected function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetCurrentAddress: String; override; procedure OperationFinished(Operation: TFileSourceOperation); override; public procedure FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); function WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; public constructor Create(const URI: TURI); override; constructor Create(aModuleFileName, aPluginRootName: String); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; class function CreateFile(const APath: String; FindData: TWfxFindData): TFile; overload; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; function CreateDirectory(const Path: String): Boolean; override; class function IsSupportedPath(const Path: String): Boolean; override; class function CreateByRootName(aRootName: String): IWfxPluginFileSource; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; override; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); override; property PluginNumber: LongInt read FPluginNumber; property WfxModule: TWfxModule read FWfxModule; end; { TWfxPluginFileSourceConnection } TWfxPluginFileSourceConnection = class(TFileSourceConnection) private FWfxModule: TWfxModule; public constructor Create(aWfxModule: TWfxModule); reintroduce; property WfxModule: TWfxModule read FWfxModule; end; var // Used in callback functions WfxOperationList: TStringList = nil; threadvar // Main operation progress callback function // Declared as threadvar so each operation has it own callback function UpdateProgressFunction: TUpdateProgress; implementation uses LazUTF8, FileUtil, StrUtils, {} LCLType, uShowMsg, {} uGlobs, DCStrUtils, uDCUtils, uLog, uDebug, uLng, uCryptProc, DCFileAttributes, uConnectionManager, contnrs, syncobjs, fMain, uWfxPluginCopyInOperation, uWfxPluginCopyOutOperation, uWfxPluginMoveOperation, uVfsModule, uWfxPluginExecuteOperation, uWfxPluginListOperation, uWfxPluginCreateDirectoryOperation, uWfxPluginDeleteOperation, uWfxPluginSetFilePropertyOperation, uWfxPluginCopyOperation, DCConvertEncoding; const connCopyIn = 0; connCopyOut = 1; connDelete = 2; connCopyMove = 3; var // Always use appropriate lock to access these lists. WfxConnections: TObjectList; // store connections created by Wcx file sources WfxOperationsQueue: TObjectList; // store queued operations, use only under FOperationsQueueLock WfxConnectionsLock: TCriticalSection; // used to synchronize access to connections WfxOperationsQueueLock: TCriticalSection; // used to synchronize access to operations queue { CallBack functions } function MainProgressProc(PluginNr: Integer; SourceName, TargetName: String; PercentDone: Integer): Integer; var CallbackDataClass: TCallbackDataClass; begin Result:= 0; DCDebug('MainProgressProc ('+IntToStr(PluginNr)+','+SourceName+','+TargetName+','+IntToStr(PercentDone)+')=' ,IntTostr(Result)); if Assigned(UpdateProgressFunction) then // Call operation progress function Result:= UpdateProgressFunction(SourceName, TargetName, PercentDone) else begin // Operation callback function not found, may be plugin call progress function // from non operation thread, call global progress function in this case DCDebug('Warning UpdateProgressFunction does not found for thread ' + hexStr(Pointer(GetCurrentThreadId))); CallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNr]); if Assigned(CallbackDataClass) and Assigned(CallbackDataClass.UpdateProgressFunction) then Result:= CallbackDataClass.UpdateProgressFunction(SourceName, TargetName, PercentDone) else // Global callback function not found, incorrect // FileSourceOperation implementation, notify about it DCDebug('Warning UpdateProgressFunction does not found for plugin number %d', [PluginNr]); end; end; function MainProgressProcA(PluginNr: Integer; SourceName, TargetName: PAnsiChar; PercentDone: Integer): Integer; dcpcall; var sSourceName, sTargetName: String; begin sSourceName:= CeSysToUtf8(StrPas(SourceName)); sTargetName:= CeSysToUtf8(StrPas(TargetName)); Result:= MainProgressProc(PluginNr, sSourceName, sTargetName, PercentDone); end; function MainProgressProcW(PluginNr: Integer; SourceName, TargetName: PWideChar; PercentDone: Integer): Integer; dcpcall; var sSourceName, sTargetName: String; begin sSourceName:= UTF16ToUTF8(UnicodeString(SourceName)); sTargetName:= UTF16ToUTF8(UnicodeString(TargetName)); Result:= MainProgressProc(PluginNr, sSourceName, sTargetName, PercentDone); end; procedure MainLogProc(PluginNr, MsgType: Integer; LogString: String); var I: Integer; bLogFile: Boolean; bLogWindow: Boolean; sMsg, sName, sPath: String; LogMsgType: TLogMsgType = lmtInfo; CallbackDataClass: TCallbackDataClass; Begin sMsg:= rsMsgLogInfo; bLogWindow:= frmMain.seLogWindow.Visible; bLogFile:= ((log_vfs_op in gLogOptions) and (log_info in gLogOptions)); CallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNr]); case MsgType of msgtype_connect: begin bLogWindow:= True; if Assigned(CallbackDataClass) then begin if Length(LogString) > 0 then begin I:= Pos(#32, LogString); sName:= WfxOperationList[PluginNr]; sPath:= Copy(LogString, I + 1, MaxInt); AddNetworkConnection(sName, sPath, CallbackDataClass.FileSource); end; end; sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; end; msgtype_disconnect: begin if Assigned(CallbackDataClass) then begin I:= Pos(#32, LogString); sName:= WfxOperationList[PluginNr]; sPath:= Copy(LogString, I + 1, MaxInt); RemoveNetworkConnection(sName, sPath); bLogWindow:= frmMain.seLogWindow.Visible; end; sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; end; msgtype_details, msgtype_operationcomplete, msgtype_transfercomplete, msgtype_connectcomplete: sMsg:= sMsg + '[' + IntToStr(MsgType) + ']'; msgtype_importanterror: begin LogMsgType:= lmtError; sMsg:= rsMsgLogError + '[' + IntToStr(MsgType) + ']'; bLogFile:= (log_vfs_op in gLogOptions) and (log_errors in gLogOptions); end; end; // write log info logWrite(sMsg + ', ' + logString, LogMsgType, bLogWindow, bLogFile); //DCDebug('MainLogProc ('+ sMsg + ',' + logString + ')'); end; procedure MainLogProcA(PluginNr, MsgType: Integer; LogString: PAnsiChar); dcpcall; begin MainLogProc(PluginNr, MsgType, CeSysToUtf8(StrPas(LogString))); end; procedure MainLogProcW(PluginNr, MsgType: Integer; LogString: PWideChar); dcpcall; begin MainLogProc(PluginNr, MsgType, UTF16ToUTF8(UnicodeString(LogString))); end; function MainRequestProc(PluginNr, RequestType: Integer; CustomTitle, CustomText: String; var ReturnedText: String): Bool; var sReq: String; begin Result:= False; // Use operation UI for this? if CustomTitle = '' then CustomTitle:= 'Double Commander'; case RequestType of RT_Other: begin sReq:= 'RT_Other'; Result:= ShowInputQuery(CustomTitle, CustomText, ReturnedText); end; RT_UserName: begin sReq:= 'RT_UserName'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserName, CustomText), ReturnedText); end; RT_Password: begin sReq:= 'RT_Password'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPassword, CustomText), True, ReturnedText); end; RT_Account: begin sReq:= 'RT_Account'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgAccount, CustomText), ReturnedText); end; RT_UserNameFirewall: begin sReq:= 'RT_UserNameFirewall'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgUserNameFirewall, CustomText), ReturnedText); end; RT_PasswordFirewall: begin sReq:= 'RT_PasswordFirewall'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgPasswordFirewall, CustomText), True, ReturnedText); end; RT_TargetDir: begin sReq:= 'RT_TargetDir'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgTargetDir, CustomText), ReturnedText); end; RT_URL: begin sReq:= 'RT_URL'; Result:= ShowInputQuery(CustomTitle, IfThen(CustomText = EmptyStr, rsMsgURL, CustomText), ReturnedText); end; RT_MsgOK: begin sReq:= 'RT_MsgOK'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OK) = IDOK); end; RT_MsgYesNo: begin sReq:= 'RT_MsgYesNo'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_YESNO) = IDYES); end; RT_MsgOKCancel: begin sReq:= 'RT_MsgOKCancel'; Result:= (ShowMessageBox(CustomText, CustomTitle, MB_OKCANCEL) = IDOK); end; end; DCDebug('MainRequestProc ('+IntToStr(PluginNr)+','+sReq+','+CustomTitle+','+CustomText+','+ReturnedText+')', BoolToStr(Result, True)); end; function MainRequestProcA(PluginNr, RequestType: Integer; CustomTitle, CustomText, ReturnedText: PAnsiChar; MaxLen: Integer): Bool; dcpcall; var sCustomTitle, sCustomText, sReturnedText: String; begin sCustomTitle:= CeSysToUtf8(StrPas(CustomTitle)); sCustomText:= CeSysToUtf8(StrPas(CustomText)); sReturnedText:= CeSysToUtf8(StrPas(ReturnedText)); Result:= MainRequestProc(PluginNr, RequestType, sCustomTitle, sCustomText, sReturnedText); if Result then begin if ReturnedText <> nil then StrPLCopy(ReturnedText, CeUtf8ToSys(sReturnedText), MaxLen); end; end; function MainRequestProcW(PluginNr, RequestType: Integer; CustomTitle, CustomText, ReturnedText: PWideChar; MaxLen: Integer): Bool; dcpcall; var sCustomTitle, sCustomText, sReturnedText: String; begin sCustomTitle:= UTF16ToUTF8(UnicodeString(CustomTitle)); sCustomText:= UTF16ToUTF8(UnicodeString(CustomText)); sReturnedText:= UTF16ToUTF8(UnicodeString(ReturnedText)); Result:= MainRequestProc(PluginNr, RequestType, sCustomTitle, sCustomText, sReturnedText); if Result then begin if ReturnedText <> nil then StrPLCopyW(ReturnedText, UTF8Decode(sReturnedText), MaxLen); end; end; function CryptProc(PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName: String; var Password: String): Integer; const cPrefix = 'wfx'; var sGroup, sPassword: AnsiString; begin try sGroup:= WfxOperationList[CryptoNumber]; case Mode of FS_CRYPT_SAVE_PASSWORD: begin if PasswordStore.WritePassword(cPrefix, sGroup, ConnectionName, Password) then Result:= FS_FILE_OK else Result:= FS_FILE_WRITEERROR; end; FS_CRYPT_LOAD_PASSWORD, FS_CRYPT_LOAD_PASSWORD_NO_UI: begin Result:= FS_FILE_READERROR; if (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) and (PasswordStore.HasMasterKey = False) then Exit(FS_FILE_NOTFOUND); if PasswordStore.ReadPassword(cPrefix, sGroup, ConnectionName, Password) then Result:= FS_FILE_OK; end; FS_CRYPT_COPY_PASSWORD, FS_CRYPT_MOVE_PASSWORD: begin Result:= FS_FILE_READERROR; if PasswordStore.ReadPassword(cPrefix, sGroup, ConnectionName, sPassword) then begin if not PasswordStore.WritePassword(cPrefix, sGroup, Password, sPassword) then Exit(FS_FILE_WRITEERROR); if Mode = FS_CRYPT_MOVE_PASSWORD then PasswordStore.DeletePassword(cPrefix, sGroup, ConnectionName); Result:= FS_FILE_OK; end; end; FS_CRYPT_DELETE_PASSWORD: begin PasswordStore.DeletePassword(cPrefix, sGroup, ConnectionName); Result:= FS_FILE_OK; end; end; except Result:= FS_FILE_NOTSUPPORTED; end; end; function CryptProcA(PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName, Password: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var sConnectionName, sPassword: String; begin sConnectionName:= CeSysToUtf8(StrPas(ConnectionName)); sPassword:= CeSysToUtf8(StrPas(Password)); Result:= CryptProc(PluginNr, CryptoNumber, Mode, sConnectionName, sPassword); if Result = FS_FILE_OK then begin if Password <> nil then StrPLCopy(Password, CeUtf8ToSys(sPassword), MaxLen); end; end; function CryptProcW(PluginNr, CryptoNumber: Integer; Mode: Integer; ConnectionName, Password: PWideChar; MaxLen: Integer): Integer; dcpcall; var sConnectionName, sPassword: String; begin sConnectionName:= UTF16ToUTF8(UnicodeString(ConnectionName)); sPassword:= UTF16ToUTF8(UnicodeString(Password)); Result:= CryptProc(PluginNr, CryptoNumber, Mode, sConnectionName, sPassword); if Result = FS_FILE_OK then begin if Password <> nil then StrPLCopyW(Password, UTF8Decode(sPassword), MaxLen); end; end; { TWfxPluginFileSource } constructor TWfxPluginFileSource.Create(aModuleFileName, aPluginRootName: String); begin inherited Create; FPluginNumber:= -1; FCallbackDataClass:= nil; FModuleFileName:= aModuleFileName; FPluginRootName:= aPluginRootName; FWfxModule:= TWfxModule.Create; if not FWfxModule.LoadModule(FModuleFileName) then raise EFileSourceException.Create('Cannot load WFX module ' + FModuleFileName); with FWfxModule do begin FCallbackDataClass:= TCallbackDataClass.Create(Self); FPluginNumber:= WfxOperationList.AddObject(FPluginRootName, FCallbackDataClass); if Assigned(FsInit) then FsInit(FPluginNumber, @MainProgressProcA, @MainLogProcA, @MainRequestProcA); if Assigned(FsInitW) then FsInitW(FPluginNumber, @MainProgressProcW, @MainLogProcW, @MainRequestProcW); if Assigned(FsSetCryptCallback) then FsSetCryptCallback(@CryptProcA, FPluginNumber, 0); if Assigned(FsSetCryptCallbackW) then FsSetCryptCallbackW(@CryptProcW, FPluginNumber, 0); VFSInit(0); end; FOperationsClasses[fsoList] := TWfxPluginListOperation.GetOperationClass; FOperationsClasses[fsoCopy] := TWfxPluginCopyOperation.GetOperationClass; FOperationsClasses[fsoCopyIn] := TWfxPluginCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWfxPluginCopyOutOperation.GetOperationClass; FOperationsClasses[fsoMove] := TWfxPluginMoveOperation.GetOperationClass; FOperationsClasses[fsoDelete] := TWfxPluginDeleteOperation.GetOperationClass; FOperationsClasses[fsoCreateDirectory] := TWfxPluginCreateDirectoryOperation.GetOperationClass; FOperationsClasses[fsoSetFileProperty] := TWfxPluginSetFilePropertyOperation.GetOperationClass; FOperationsClasses[fsoExecute] := TWfxPluginExecuteOperation.GetOperationClass; CreateConnections; end; destructor TWfxPluginFileSource.Destroy; begin if (FPluginNumber >= 0) and (FPluginNumber < WfxOperationList.Count) then WfxOperationList.Objects[FPluginNumber]:= nil; FreeAndNil(FCallbackDataClass); inherited Destroy; end; class function TWfxPluginFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; SizeProperty := TFileSizeProperty.Create; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create; CreationTimeProperty := TFileCreationDateTimeProperty.Create; LinkProperty := TFileLinkProperty.Create; end; end; class function TWfxPluginFileSource.CreateFile(const APath: String; FindData: TWfxFindData): TFile; begin Result := TFile.Create(APath); with Result do begin // Check that attributes is used if (FindData.FileAttributes and FILE_ATTRIBUTE_UNIX_MODE) = 0 then // Windows attributes begin LinkProperty := TFileLinkProperty.Create; LinkProperty.IsLinkToDirectory := ((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and ((FindData.FileAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0); AttributesProperty := TNtfsFileAttributesProperty.Create(FindData.FileAttributes); end else // Unix attributes begin LinkProperty := TFileLinkProperty.Create; LinkProperty.IsLinkToDirectory := (((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) or ((FindData.FileAttributes and FILE_ATTRIBUTE_REPARSE_POINT) <> 0)) and ((FindData.Reserved0 and S_IFMT) = S_IFLNK); if ((FindData.FileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0) and ((FindData.Reserved0 and S_IFMT) <> S_IFDIR) then FindData.Reserved0:= FindData.Reserved0 or S_IFDIR; AttributesProperty := TUnixFileAttributesProperty.Create(FindData.Reserved0); end; SizeProperty := TFileSizeProperty.Create(FindData.FileSize); ModificationTimeProperty := TFileModificationDateTimeProperty.Create(FindData.LastWriteTime); LastAccessTimeProperty := TFileLastAccessDateTimeProperty.Create(FindData.LastAccessTime); CreationTimeProperty := TFileCreationDateTimeProperty.Create(FindData.CreationTime); // Set name after assigning Attributes property, because it is used to get extension. Name := FindData.FileName; end; end; function TWfxPluginFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin with WfxModule do begin Result := [fsoList]; // supports by any plugin if Assigned(FsPutFile) or Assigned(FsPutFileW) then Result:= Result + [fsoCopyIn]; if Assigned(FsGetFile) or Assigned(FsGetFileW) then Result:= Result + [fsoCopyOut]; if Assigned(FsRenMovFile) or Assigned(FsRenMovFileW) then Result:= Result + [fsoCopy, fsoMove]; if Assigned(FsDeleteFile) or Assigned(FsDeleteFileW) then Result:= Result + [fsoDelete]; if Assigned(FsMkDir) or Assigned(FsMkDirW) then Result:= Result + [fsoCreateDirectory]; if Assigned(FsExecuteFile) or Assigned(FsExecuteFileW) then Result:= Result + [fsoExecute]; if Assigned(FsSetAttr) or Assigned(FsSetAttrW) or Assigned(FsExecuteFile) or Assigned(FsExecuteFileW) or Assigned(FsRenMovFile) or Assigned(FsRenMovFileW) then Result:= Result + [fsoSetFileProperty]; end; end; function TWfxPluginFileSource.GetProperties: TFileSourceProperties; begin Result := [fspUsesConnections, fspListOnMainThread]; with FWfxModule do begin if Assigned(FsLinksToLocalFiles) and FsLinksToLocalFiles() then Result:= Result + [fspLinksToLocalFiles]; if (BackgroundFlags = 0) or (BackgroundFlags and BG_ASK_USER <> 0) then Result:= Result + [fspCopyInOnMainThread, fspCopyOutOnMainThread] else begin if (BackgroundFlags and BG_UPLOAD = 0) then Result:= Result + [fspCopyInOnMainThread]; if (BackgroundFlags and BG_DOWNLOAD = 0) then Result:= Result + [fspCopyOutOnMainThread]; end; end; end; function TWfxPluginFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpAttributes, fpModificationTime, fpCreationTime, fpLastAccessTime, fpLink]; end; function TWfxPluginFileSource.GetCurrentAddress: String; begin Result:= 'wfx://' + FPluginRootName; end; function TWfxPluginFileSource.GetPluginNumber: LongInt; begin Result := FPluginNumber; end; function TWfxPluginFileSource.GetWfxModule: TWfxModule; begin Result := FWFXModule; end; procedure TWfxPluginFileSource.FillAndCount(Files: TFiles; CountDirs: Boolean; ExcludeRootDir: Boolean; out NewFiles: TFiles; out FilesCount: Int64; out FilesSize: Int64); procedure FillAndCountRec(const srcPath: String); var FindData: TWfxFindData; Handle: THandle; aFile: TFile; begin with FWfxModule do begin Handle := WfxFindFirst(srcPath, FindData); if Handle = wfxInvalidHandle then Exit; repeat if (FindData.FileName = '.') or (FindData.FileName = '..') then Continue; aFile:= TWfxPluginFileSource.CreateFile(srcPath, FindData); NewFiles.Add(aFile); if aFile.IsDirectory then begin if CountDirs then Inc(FilesCount); FillAndCountRec(srcPath + FindData.FileName + PathDelim); end else begin Inc(FilesSize, aFile.Size); Inc(FilesCount); end; until not WfxFindNext(Handle, FindData); FsFindClose(Handle); end; end; var I: Integer; aFile: TFile; begin FilesCount:= 0; FilesSize:= 0; if ExcludeRootDir then begin if Files.Count <> 1 then raise Exception.Create('Only a single directory can be set with ExcludeRootDir=True'); NewFiles := TFiles.Create(Files[0].FullPath); FillAndCountRec(Files[0].FullPath + DirectorySeparator); end else begin NewFiles := TFiles.Create(Files.Path); for I := 0 to Files.Count - 1 do begin aFile := Files[I]; NewFiles.Add(aFile.Clone); if aFile.AttributesProperty.IsDirectory and (not aFile.LinkProperty.IsLinkToDirectory) then begin if CountDirs then Inc(FilesCount); FillAndCountRec(aFile.Path + aFile.Name + DirectorySeparator); // recursive browse child dir end else begin Inc(FilesCount); Inc(FilesSize, aFile.Size); // in first level we know file size -> use it end; end; end; end; function TWfxPluginFileSource.WfxCopyMove(sSourceFile, sTargetFile: String; Flags: LongInt; RemoteInfo: PRemoteInfo; Internal, CopyMoveIn: Boolean): LongInt; var bMove, bOverWrite: Boolean; begin with FWfxModule do begin if Internal then begin bMove:= ((Flags and FS_COPYFLAGS_MOVE) <> 0); bOverWrite:= ((Flags and FS_COPYFLAGS_OVERWRITE) <> 0); Result:= WfxRenMovFile(sSourceFile, sTargetFile, bMove, bOverWrite, RemoteInfo); end else begin if CopyMoveIn then Result:= WfxPutFile(sSourceFile, sTargetFile, Flags) else Result:= WfxGetFile(sSourceFile, sTargetFile, Flags, RemoteInfo); end; end; end; constructor TWfxPluginFileSource.Create(const URI: TURI); var sModuleFileName: String; begin if gWFXPlugins.Count = 0 then Exit; // Check if there is a registered plugin for the name of the file system plugin. sModuleFileName:= gWFXPlugins.Values[URI.Host]; if sModuleFileName <> EmptyStr then begin sModuleFileName:= GetCmdDirFromEnvVar(sModuleFileName); Create(sModuleFileName, URI.Host); DCDebug('Found registered plugin ' + sModuleFileName + ' for file system ' + URI.Host); end; end; function TWfxPluginFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginListOperation.Create(TargetFileSource, TargetPath); end; function TWfxPluginFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var FileSource: IFileSource; begin FileSource := Self; Result := TWfxPluginCopyOperation.Create(FileSource, FileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TWfxPluginCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginMoveOperation.Create(TargetFileSource, SourceFiles, TargetPath); end; function TWfxPluginFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TWfxPluginFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginCreateDirectoryOperation.Create(TargetFileSource, BasePath, DirectoryPath); end; function TWfxPluginFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWfxPluginExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TWfxPluginFileSource.CreateSetFilePropertyOperation( var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWfxPluginSetFilePropertyOperation.Create( TargetFileSource, theTargetFiles, theNewProperties); end; function TWfxPluginFileSource.GetLocalName(var aFile: TFile): Boolean; var sFileName: String; begin Result:= False; sFileName:= aFile.FullPath; if FWfxModule.WfxGetLocalName(sFileName) then begin aFile.FullPath:= sFileName; Result:= True; end; end; function TWfxPluginFileSource.CreateDirectory(const Path: String): Boolean; begin Result:= WfxModule.WfxMkDir(ExtractFilePath(Path), Path) = WFX_SUCCESS; if Result then begin if (log_vfs_op in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess + rsMsgLogMkDir, [Path]), lmtSuccess) end else begin if (log_vfs_op in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError + rsMsgLogMkDir, [Path]), lmtError); end; end; class function TWfxPluginFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= Pos('wfx://', Path) = 1; end; class function TWfxPluginFileSource.CreateByRootName(aRootName: String): IWfxPluginFileSource; var sModuleFileName: String; begin Result:= nil; if gWFXPlugins.Count = 0 then Exit; // Check if there is a registered plugin for the name of the file system plugin. sModuleFileName:= gWFXPlugins.Values[aRootName]; if sModuleFileName <> EmptyStr then begin sModuleFileName:= GetCmdDirFromEnvVar(sModuleFileName); Result:= TWfxPluginFileSource.Create(sModuleFileName, aRootName); DCDebug('Found registered plugin ' + sModuleFileName + ' for file system ' + aRootName); end; end; procedure TWfxPluginFileSource.AddToConnectionQueue(Operation: TFileSourceOperation); begin WfxOperationsQueueLock.Acquire; try if WfxOperationsQueue.IndexOf(Operation) < 0 then WfxOperationsQueue.Add(Operation); finally WfxOperationsQueueLock.Release; end; end; procedure TWfxPluginFileSource.RemoveFromConnectionQueue(Operation: TFileSourceOperation); begin WfxOperationsQueueLock.Acquire; try WfxOperationsQueue.Remove(Operation); finally WfxOperationsQueueLock.Release; end; end; procedure TWfxPluginFileSource.AddConnection(Connection: TFileSourceConnection); begin WfxConnectionsLock.Acquire; try if WfxConnections.IndexOf(Connection) < 0 then WfxConnections.Add(Connection); finally WfxConnectionsLock.Release; end; end; procedure TWfxPluginFileSource.RemoveConnection(Connection: TFileSourceConnection); begin WfxConnectionsLock.Acquire; try WfxConnections.Remove(Connection); finally WfxConnectionsLock.Release; end; end; function TWfxPluginFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin Result := nil; case Operation.ID of fsoCopy, fsoMove: Result := WfxConnections[connCopyMove] as TFileSourceConnection; fsoCopyIn: Result := WfxConnections[connCopyIn] as TFileSourceConnection; fsoCopyOut: Result := WfxConnections[connCopyOut] as TFileSourceConnection; fsoDelete: Result := WfxConnections[connDelete] as TFileSourceConnection; else begin Result := CreateConnection; if Assigned(Result) then AddConnection(Result); end; end; if Assigned(Result) then Result := TryAcquireConnection(Result, Operation); // No available connection - wait. if not Assigned(Result) then AddToConnectionQueue(Operation) else // Connection acquired. // The operation may have been waiting in the queue // for the connection, so remove it from the queue. RemoveFromConnectionQueue(Operation); end; procedure TWfxPluginFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin RemoveFromConnectionQueue(Operation); end; function TWfxPluginFileSource.CreateConnection: TFileSourceConnection; begin Result := TWfxPluginFileSourceConnection.Create(FWfxModule); end; procedure TWfxPluginFileSource.CreateConnections; begin WfxConnectionsLock.Acquire; try if WfxConnections.Count = 0 then begin // Reserve some connections (only once). WfxConnections.Add(CreateConnection); // connCopyIn WfxConnections.Add(CreateConnection); // connCopyOut WfxConnections.Add(CreateConnection); // connDelete WfxConnections.Add(CreateConnection); // connCopyMove end; finally WfxConnectionsLock.Release; end; end; function TWfxPluginFileSource.FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; var i: Integer; connection: TFileSourceConnection; begin Result := nil; WfxConnectionsLock.Acquire; try for i := 0 to WfxConnections.Count - 1 do begin connection := WfxConnections[i] as TFileSourceConnection; if connection.AssignedOperation = operation then Exit(connection); end; finally WfxConnectionsLock.Release; end; end; procedure TWfxPluginFileSource.OperationFinished(Operation: TFileSourceOperation); var allowedIDs: TFileSourceOperationTypes = []; connection: TFileSourceConnection; begin connection := FindConnectionByOperation(Operation); if Assigned(connection) then begin connection.Release; // unassign operation WfxConnectionsLock.Acquire; try // If there are operations waiting, take the first one and notify // that a connection is available. // Only check operation types for which there are reserved connections. if Operation.ID in [fsoCopyIn, fsoCopyOut, fsoDelete, fsoCopy, fsoMove] then begin Include(allowedIDs, Operation.ID); NotifyNextWaitingOperation(allowedIDs); end else begin WfxConnections.Remove(connection); end; finally WfxConnectionsLock.Release; end; end; end; procedure TWfxPluginFileSource.NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); var i: Integer; operation: TFileSourceOperation; begin WfxOperationsQueueLock.Acquire; try for i := 0 to WfxOperationsQueue.Count - 1 do begin operation := WfxOperationsQueue.Items[i] as TFileSourceOperation; if (operation.State = fsosWaitingForConnection) and (operation.ID in allowedOps) then begin operation.ConnectionAvailableNotify; Exit; end; end; finally WfxOperationsQueueLock.Release; end; end; { TWfxPluginFileSourceConnection } constructor TWfxPluginFileSourceConnection.Create(aWfxModule: TWfxModule); begin FWfxModule := aWfxModule; inherited Create; end; { TCallbackDataClass } constructor TCallbackDataClass.Create(aFileSource: TWfxPluginFileSource); begin inherited Create; FileSource:= aFileSource; UpdateProgressFunction:= nil; end; initialization WfxOperationList:= TStringList.Create; WfxConnections := TObjectList.Create(True); // True = destroy objects when destroying list WfxConnectionsLock := TCriticalSection.Create; WfxOperationsQueue := TObjectList.Create(False); // False = don't destroy operations (only store references) WfxOperationsQueueLock := TCriticalSection.Create; RegisterVirtualFileSource('WfxPlugin', TWfxPluginFileSource, False); finalization FreeAndNil(WfxOperationList); FreeAndNil(WfxConnections); FreeAndNil(WfxConnectionsLock); FreeAndNil(WfxOperationsQueue); FreeAndNil(WfxOperationsQueueLock); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.lfm��������������������0000644�0001750�0000144�00000003425�12646423065�027676� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object WfxPluginCopyMoveOperationOptionsUI: TWfxPluginCopyMoveOperationOptionsUI Left = 305 Height = 158 Top = 222 Width = 549 AutoSize = True ClientHeight = 158 ClientWidth = 549 LCLVersion = '1.6.0.3' object pnlComboBoxes: TPanel AnchorSideLeft.Control = Owner Left = 0 Height = 23 Top = 0 Width = 186 AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 23 ClientWidth = 186 TabOrder = 0 object lblFileExists: TLabel Left = 0 Height = 15 Top = 4 Width = 81 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox Left = 86 Height = 23 Top = 0 Width = 100 ItemHeight = 15 Items.Strings = ( 'Ask' 'Overwrite' 'Skip' ) Style = csDropDownList TabOrder = 0 end end object pnlCheckboxes: TPanel AnchorSideLeft.Control = pnlComboBoxes AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlComboBoxes Left = 194 Height = 19 Top = 0 Width = 246 AutoSize = True BorderSpacing.Left = 8 BevelOuter = bvNone BevelWidth = 8 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 19 ClientWidth = 246 TabOrder = 1 object cbWorkInBackground: TCheckBox Left = 0 Height = 19 Top = 0 Width = 246 Caption = 'Work in background (separate connection)' OnChange = cbWorkInBackgroundChange TabOrder = 0 Visible = False end end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxplugincopyoutoperation.pas����������������������������0000644�0001750�0000144�00000012225�12646510036�026140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginCopyOutOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyOutOperation } TWfxPluginCopyOutOperation = class(TFileSourceCopyOutOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FFullFilesTreeToCopy: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; procedure SetNeedsConnection(AValue: Boolean); protected function UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property NeedsConnection: Boolean read FNeedsConnection write SetNeedsConnection; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin; // -- TWfxPluginCopyOutOperation --------------------------------------------- procedure TWfxPluginCopyOutOperation.SetNeedsConnection(AValue: Boolean); begin FNeedsConnection:= AValue; if (FNeedsConnection = False) then FInfoOperation:= FS_STATUS_OP_GET_MULTI_THREAD else if (SourceFiles.Count > 1) then FInfoOperation:= FS_STATUS_OP_GET_MULTI else FInfoOperation:= FS_STATUS_OP_GET_SINGLE; end; function TWfxPluginCopyOutOperation.UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aSourceFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); SetNeedsConnection(FNeedsConnection); end; destructor TWfxPluginCopyOutOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyOutOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, wpohmCopyOut, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.Initialize; end; procedure TWfxPluginCopyOutOperation.MainExecute; begin FOperationHelper.ProcessFiles(FFullFilesTreeToCopy, FStatistics); end; procedure TWfxPluginCopyOutOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyOutOperationOptionsUI; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/fwfxplugincopymoveoperationoptions.pas��������������������0000644�0001750�0000144�00000014101�12673524511�027672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fWfxPluginCopyMoveOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI, uWfxPluginCopyOperation, uWfxPluginMoveOperation, uWfxPluginCopyInOperation, uWfxPluginCopyOutOperation; type { TWfxPluginCopyMoveOperationOptionsUI } TWfxPluginCopyMoveOperationOptionsUI = class(TFileSourceOperationOptionsUI) cbWorkInBackground: TCheckBox; cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; pnlCheckboxes: TPanel; pnlComboBoxes: TPanel; procedure cbWorkInBackgroundChange(Sender: TObject); private procedure SetOperationOptions(CopyOperation: TWfxPluginCopyOperation); overload; procedure SetOperationOptions(MoveOperation: TWfxPluginMoveOperation); overload; procedure SetOperationOptions(CopyInOperation: TWfxPluginCopyInOperation); overload; procedure SetOperationOptions(CopyOutOperation: TWfxPluginCopyOutOperation); overload; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; TWfxPluginCopyOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) end; TWfxPluginMoveOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) end; { TWfxPluginCopyInOperationOptionsUI } TWfxPluginCopyInOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; { TWfxPluginCopyOutOperationOptionsUI } TWfxPluginCopyOutOperationOptionsUI = class(TWfxPluginCopyMoveOperationOptionsUI) public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; end; implementation {$R *.lfm} uses WfxPlugin, fCopyMoveDlg, uGlobs, uWfxPluginFileSource, uFileSourceOperationOptions, uOperationsManager; { TWfxPluginCopyMoveOperationOptionsUI } constructor TWfxPluginCopyMoveOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited Create(AOwner, AFileSource); // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(Operation: TObject); begin if Operation is TWfxPluginCopyOperation then SetOperationOptions(Operation as TWfxPluginCopyOperation) else if Operation is TWfxPluginMoveOperation then SetOperationOptions(Operation as TWfxPluginMoveOperation) else if Operation is TWfxPluginCopyInOperation then SetOperationOptions(Operation as TWfxPluginCopyInOperation) else if Operation is TWfxPluginCopyOutOperation then SetOperationOptions(Operation as TWfxPluginCopyOutOperation); end; procedure TWfxPluginCopyMoveOperationOptionsUI.cbWorkInBackgroundChange( Sender: TObject); begin with (Owner as TfrmCopyDlg) do begin if not cbWorkInBackground.Checked then QueueIdentifier:= ModalQueueId else begin QueueIdentifier:= SingleQueueId; end; btnAddToQueue.Visible:= cbWorkInBackground.Checked; btnCreateSpecialQueue.Visible:= btnAddToQueue.Visible; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyOperation: TWfxPluginCopyOperation); begin with CopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(MoveOperation: TWfxPluginMoveOperation); begin with MoveOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyInOperation: TWfxPluginCopyInOperation); begin with CopyInOperation do begin NeedsConnection:= not cbWorkInBackground.Checked; case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; procedure TWfxPluginCopyMoveOperationOptionsUI.SetOperationOptions(CopyOutOperation: TWfxPluginCopyOutOperation); begin with CopyOutOperation do begin NeedsConnection:= not cbWorkInBackground.Checked; case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; { TWfxPluginCopyInOperationOptionsUI } constructor TWfxPluginCopyInOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); const CAN_UPLOAD = BG_UPLOAD or BG_ASK_USER; begin inherited Create(AOwner, AFileSource); with (AFileSource as IWfxPluginFileSource) do begin cbWorkInBackground.Visible:= (WfxModule.BackgroundFlags and CAN_UPLOAD) = CAN_UPLOAD; if cbWorkInBackground.Visible then cbWorkInBackground.Checked:= False else cbWorkInBackground.Checked:= (WfxModule.BackgroundFlags and BG_UPLOAD <> 0); end; cbWorkInBackgroundChange(cbWorkInBackground); end; { TWfxPluginCopyOutOperationOptionsUI } constructor TWfxPluginCopyOutOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); const CAN_DOWNLOAD = BG_DOWNLOAD or BG_ASK_USER; begin inherited Create(AOwner, AFileSource); with (AFileSource as IWfxPluginFileSource) do begin cbWorkInBackground.Visible:= (WfxModule.BackgroundFlags and CAN_DOWNLOAD) = CAN_DOWNLOAD; if cbWorkInBackground.Visible then cbWorkInBackground.Checked:= False else cbWorkInBackground.Checked:= (WfxModule.BackgroundFlags and BG_DOWNLOAD <> 0); end; cbWorkInBackgroundChange(cbWorkInBackground); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginexecuteoperation.pas����������������������������0000644�0001750�0000144�00000004305�12612505011�026066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uWfxPluginFileSource; type { TWfxPluginExecuteOperation } TWfxPluginExecuteOperation = class(TFileSourceExecuteOperation) private FWfxPluginFileSource: IWfxPluginFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses WfxPlugin; constructor TWfxPluginExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWfxPluginFileSource := aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWfxPluginExecuteOperation.Initialize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(CurrentPath, FS_STATUS_START, FS_STATUS_OP_EXEC); end; procedure TWfxPluginExecuteOperation.MainExecute; var RemoteName: String; iResult: LongInt; begin RemoteName:= AbsolutePath; iResult:= FWfxPluginFileSource.WfxModule.WfxExecuteFile(0, RemoteName, Verb); case iResult of FS_EXEC_OK: FExecuteOperationResult:= fseorSuccess; FS_EXEC_ERROR: FExecuteOperationResult:= fseorError; FS_EXEC_YOURSELF: FExecuteOperationResult:= fseorYourSelf; FS_EXEC_SYMLINK: begin FResultString:= RemoteName; FExecuteOperationResult:= fseorSymLink; end; end; end; procedure TWfxPluginExecuteOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(CurrentPath, FS_STATUS_END, FS_STATUS_OP_EXEC); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxpluginutil.pas����������������������������������������0000644�0001750�0000144�00000031177�12612505011�023467� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLProc, uLog, uGlobs, WfxPlugin, uFile, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uFileSourceCopyOperation, uWfxPluginFileSource; type TWfxPluginOperationHelperMode = (wpohmCopy, wpohmCopyIn, wpohmCopyOut, wpohmMove); TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; { TWfxPluginOperationHelper } TWfxPluginOperationHelper = class private FWfxPluginFileSource: IWfxPluginFileSource; FOperationThread: TThread; FMode: TWfxPluginOperationHelperMode; FRootTargetPath: String; FRenameMask: String; FRenameNameMask, FRenameExtMask: String; FLogCaption: String; FRenamingFiles, FRenamingRootDir, FInternal: Boolean; FFileExistsOption: TFileSourceOperationOptionFileExists; AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; procedure ShowError(sMessage: String); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); function ProcessDirectory(aFile: TFile; AbsoluteTargetFileName: String): LongInt; function ProcessFile(aFile: TFile; AbsoluteTargetFileName: String; var Statistics: TFileSourceCopyOperationStatistics): LongInt; function FileExists(aFile: TFile; AbsoluteTargetFileName: String; AllowResume: Boolean): TFileSourceOperationOptionFileExists; public constructor Create(FileSource: IFileSource; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; OperationThread: TThread; Mode: TWfxPluginOperationHelperMode; TargetPath: String ); destructor Destroy; override; procedure Initialize; procedure ProcessFiles(aFiles: TFiles; var Statistics: TFileSourceCopyOperationStatistics); property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property RenameMask: String read FRenameMask write FRenameMask; end; function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: String): Boolean; function WfxFileTimeToDateTime(FileTime : TWfxFileTime) : TDateTime; inline; function DateTimeToWfxFileTime(DateTime : TDateTime) : TWfxFileTime; inline; implementation uses uFileProcs, DCStrUtils, uLng, uWfxModule, uFileSystemUtil, uFileProperty, DCDateTimeUtils, DCBasicTypes; function WfxRenameFile(aFileSource: IWfxPluginFileSource; const aFile: TFile; const NewFileName: String): Boolean; var RemoteInfo: TRemoteInfo; iTemp: TInt64Rec; begin with aFileSource do begin with RemoteInfo do begin iTemp.Value := (aFile.Properties[fpSize] as TFileSizeProperty).Value; SizeLow := iTemp.Low; SizeHigh := iTemp.High; LastWriteTime := DateTimeToWfxFileTime((aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty).Value); Attr := LongInt((aFile.Properties[fpAttributes] as TFileAttributesProperty).Value); end; Result := (WfxCopyMove(aFile.Path + aFile.Name, aFile.Path + NewFileName, FS_COPYFLAGS_MOVE, @RemoteInfo, True, True) = FS_FILE_OK); end; end; function WfxFileTimeToDateTime(FileTime: TWfxFileTime): TDateTime; begin Result:= WinFileTimeToDateTime(TWinFileTime(FileTime)); end; function DateTimeToWfxFileTime(DateTime: TDateTime): TWfxFileTime; begin Result:= TWfxFileTime(DateTimeToWinFileTime(DateTime)); end; { TWfxPluginOperationHelper } procedure TWfxPluginOperationHelper.ShowError(sMessage: String); begin if gSkipFileOpError then begin if log_errors in gLogOptions then logWrite(FOperationThread, sMessage, lmtError, True); end else begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin AbortOperation; end; end; end; procedure TWfxPluginOperationHelper.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(FOperationThread, sMessage, logMsgType); end; end; function TWfxPluginOperationHelper.ProcessDirectory(aFile: TFile; AbsoluteTargetFileName: String): LongInt; begin Result:= WFX_ERROR; case FMode of wpohmCopy, wpohmCopyIn, wpohmMove: begin Result:= FWfxPluginFileSource.WfxModule.WfxMkDir('', AbsoluteTargetFileName); end; wpohmCopyOut: begin if mbForceDirectory(AbsoluteTargetFileName) then Result:= WFX_SUCCESS; end; end; end; function TWfxPluginOperationHelper.ProcessFile(aFile: TFile; AbsoluteTargetFileName: String; var Statistics: TFileSourceCopyOperationStatistics): LongInt; var iFlags: Integer = 0; RemoteInfo: TRemoteInfo; iTemp: TInt64Rec; bCopyMoveIn: Boolean; OldDoneBytes: Int64; // for if there was an error begin // If there will be an error the DoneBytes value // will be inconsistent, so remember it here. OldDoneBytes := Statistics.DoneBytes; with FWfxPluginFileSource do begin { FCurrentFileSize:= aFile.Size; } with RemoteInfo do begin iTemp.Value := aFile.Size; SizeLow := iTemp.Low; SizeHigh := iTemp.High; LastWriteTime := DateTimeToWfxFileTime(aFile.ModificationTime); Attr := LongInt(aFile.Attributes); end; if (FMode = wpohmMove) then iFlags:= iFlags + FS_COPYFLAGS_MOVE; bCopyMoveIn:= (FMode = wpohmCopyIn); Result := WfxCopyMove(aFile.Path + aFile.Name, AbsoluteTargetFileName, iFlags, @RemoteInfo, FInternal, bCopyMoveIn); case Result of FS_FILE_EXISTS, // The file already exists, and resume isn't supported FS_FILE_EXISTSRESUMEALLOWED: // The file already exists, and resume is supported begin case FileExists(aFile, AbsoluteTargetFileName, Result = FS_FILE_EXISTSRESUMEALLOWED) of fsoofeSkip: Exit(FS_FILE_OK); fsoofeOverwrite: iFlags:= iFlags + FS_COPYFLAGS_OVERWRITE; fsoofeResume: iFlags:= iFlags + FS_COPYFLAGS_RESUME; else raise Exception.Create('Invalid file exists option'); end; Result := WfxCopyMove(aFile.Path + aFile.Name, AbsoluteTargetFileName, iFlags, @RemoteInfo, FInternal, bCopyMoveIn); end; end; end; with Statistics do begin if Result = FS_FILE_OK then DoneFiles := DoneFiles + 1; DoneBytes := OldDoneBytes + aFile.Size; UpdateStatistics(Statistics); end; end; function TWfxPluginOperationHelper.FileExists(aFile: TFile; AbsoluteTargetFileName: String; AllowResume: Boolean ): TFileSourceOperationOptionFileExists; const Responses: array[0..4] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourResume, fsourOverwriteAll, fsourSkipAll); ResponsesNoResume: array[0..3] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteAll, fsourSkipAll); var Message: String; PossibleResponses: array of TFileSourceOperationUIResponse; begin case FFileExistsOption of fsoofeNone: begin case AllowResume of True : PossibleResponses := Responses; False: PossibleResponses := ResponsesNoResume; end; if FMode <> wpohmCopyOut then Message:= Format(rsMsgFileExistsRwrt, [AbsoluteTargetFileName]) else Message:= FileExistsMessage(AbsoluteTargetFileName, aFile.FullPath, aFile.Size, aFile.ModificationTime); case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourResume: begin // FFileExistsOption := fsoofeResume; - for ResumeAll Result := fsoofeResume; end; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; end; end; else Result := FFileExistsOption; end; end; constructor TWfxPluginOperationHelper.Create(FileSource: IFileSource; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; OperationThread: TThread; Mode: TWfxPluginOperationHelperMode; TargetPath: String ); begin FWfxPluginFileSource:= FileSource as IWfxPluginFileSource; AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; FOperationThread:= OperationThread; FMode := Mode; FInternal:= (FMode in [wpohmCopy, wpohmMove]); FFileExistsOption := fsoofeNone; FRootTargetPath := TargetPath; FRenameMask := ''; FRenamingFiles := False; FRenamingRootDir := False; inherited Create; end; destructor TWfxPluginOperationHelper.Destroy; begin inherited Destroy; end; procedure TWfxPluginOperationHelper.Initialize; begin case FMode of wpohmCopy, wpohmCopyIn, wpohmCopyOut: FLogCaption := rsMsgLogCopy; wpohmMove: FLogCaption := rsMsgLogMove; end; SplitFileMask(FRenameMask, FRenameNameMask, FRenameExtMask); end; procedure TWfxPluginOperationHelper.ProcessFiles(aFiles: TFiles; var Statistics: TFileSourceCopyOperationStatistics); var I: Integer; iResult: LongInt; sTargetFile : String; aFile: TFile; begin FRenamingFiles := (FRenameMask <> '*.*') and (FRenameMask <> ''); // If there is a single root dir and rename mask doesn't have wildcards // treat is as a rename of the root dir. if (aFiles.Count = 1) and FRenamingFiles then begin aFile := aFiles[0]; if (aFile.IsDirectory or aFile.IsLinkToDirectory) and not ContainsWildcards(FRenameMask) then begin FRenamingFiles := False; FRenamingRootDir := True; end; end; for I:= 0 to aFiles.Count - 1 do with FWfxPluginFileSource do begin aFile:= aFiles.Items[I]; // Filenames must be relative to the current directory. sTargetFile := FRootTargetPath + ExtractDirLevel(aFiles.Path, aFile.Path); if FRenamingRootDir then sTargetFile := sTargetFile + FRenameMask else sTargetFile := sTargetFile + ApplyRenameMask(aFile, FRenameNameMask, FRenameExtMask); //DCDebug('Source name == ' + aFile.FullPath); //DCDebug('Target name == ' + sTargetFile); with Statistics do begin CurrentFileFrom := aFile.Path + aFile.Name; CurrentFileTo := sTargetFile; CurrentFileTotalBytes := (aFile.Properties[fpSize] as TFileSizeProperty).Value; CurrentFileDoneBytes := 0; end; UpdateStatistics(Statistics); if not aFile.IsDirectory then iResult := ProcessFile(aFile, sTargetFile, Statistics) else iResult := ProcessDirectory(aFile, sTargetFile); if iResult = FS_FILE_OK then begin LogMessage(Format(rsMsgLogSuccess+FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile]), [log_vfs_op], lmtSuccess); end else begin ShowError(Format(rsMsgLogError + FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile + ' - ' + GetErrorMsg(iResult)])); LogMessage(Format(rsMsgLogError+FLogCaption, [aFile.FullPath + ' -> ' + sTargetFile]), [log_vfs_op], lmtError); end; CheckOperationState; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxplugincopyinoperation.pas�����������������������������0000644�0001750�0000144�00000012206�12646510036�025736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginCopyInOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWfxPluginFileSource, uWfxPluginUtil; type { TWfxPluginCopyInOperation } TWfxPluginCopyInOperation = class(TFileSourceCopyInOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FOperationHelper: TWfxPluginOperationHelper; FCallbackDataClass: TCallbackDataClass; FFullFilesTreeToCopy: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics // Options FInfoOperation: LongInt; procedure SetNeedsConnection(AValue: Boolean); protected function UpdateProgress(SourceName, TargetName: String; PercentDone: Integer): Integer; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property NeedsConnection: Boolean read FNeedsConnection write SetNeedsConnection; end; implementation uses fWfxPluginCopyMoveOperationOptions, WfxPlugin, uFileSystemUtil; // -- TWfxPluginCopyInOperation --------------------------------------------- procedure TWfxPluginCopyInOperation.SetNeedsConnection(AValue: Boolean); begin FNeedsConnection:= AValue; if (FNeedsConnection = False) then FInfoOperation:= FS_STATUS_OP_PUT_MULTI_THREAD else if (SourceFiles.Count > 1) then FInfoOperation:= FS_STATUS_OP_PUT_MULTI else FInfoOperation:= FS_STATUS_OP_PUT_SINGLE; end; function TWfxPluginCopyInOperation.UpdateProgress(SourceName,TargetName: String; PercentDone: Integer): Integer; var iTemp: Int64; begin Result := 0; //DCDebug('SourceName=', SourceName, #32, 'TargetName=', TargetName, #32, 'PercentDone=', IntToStr(PercentDone)); if State = fsosStopping then // Cancel operation Exit(1); with FStatistics do begin FStatistics.CurrentFileFrom:= SourceName; FStatistics.CurrentFileTo:= TargetName; iTemp:= CurrentFileTotalBytes * PercentDone div 100; DoneBytes := DoneBytes + (iTemp - CurrentFileDoneBytes); CurrentFileDoneBytes:= iTemp; UpdateStatistics(FStatistics); end; if not AppProcessMessages(True) then Exit(1); end; constructor TWfxPluginCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; with FWfxPluginFileSource do FCallbackDataClass:= TCallbackDataClass(WfxOperationList.Objects[PluginNumber]); inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); SetNeedsConnection(FNeedsConnection); end; destructor TWfxPluginCopyInOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginCopyInOperation.Initialize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_START, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= @UpdateProgress; UpdateProgressFunction:= @UpdateProgress; end; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FillAndCount(SourceFiles, False, False, FFullFilesTreeToCopy, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) if Assigned(FOperationHelper) then FreeAndNil(FOperationHelper); FOperationHelper := TWfxPluginOperationHelper.Create( FWfxPluginFileSource, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, Thread, wpohmCopyIn, TargetPath); FOperationHelper.RenameMask := RenameMask; FOperationHelper.FileExistsOption := FileExistsOption; FOperationHelper.Initialize; end; procedure TWfxPluginCopyInOperation.MainExecute; begin FOperationHelper.ProcessFiles(FFullFilesTreeToCopy, FStatistics); end; procedure TWfxPluginCopyInOperation.Finalize; begin with FWfxPluginFileSource do begin WfxModule.WfxStatusInfo(SourceFiles.Path, FS_STATUS_END, FInfoOperation); FCallbackDataClass.UpdateProgressFunction:= nil; UpdateProgressFunction:= nil; end; FileExistsOption := FOperationHelper.FileExistsOption; FOperationHelper.Free; end; class function TWfxPluginCopyInOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result := TWfxPluginCopyInOperationOptionsUI; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wfxplugin/uwfxplugindeleteoperation.pas�����������������������������0000644�0001750�0000144�00000014414�12646433403�025704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWfxPluginDeleteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uWfxPluginFileSource, uFileSource, uFileSourceOperationOptions, uFileSourceOperationUI, uFile, uGlobs, uLog; type TWfxPluginDeleteOperation = class(TFileSourceDeleteOperation) private FWfxPluginFileSource: IWfxPluginFileSource; FFullFilesTreeToDelete: TFiles; // source files including all files/dirs in subdirectories FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; FDeleteReadOnly: TFileSourceOperationOptionGeneral; protected function ProcessFile(aFile: TFile): Boolean; function ShowError(sMessage: String): TFileSourceOperationUIResponse; procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses DCOSUtils, uLng, WfxPlugin; constructor TWfxPluginDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FSymLinkOption := fsooslNone; FSkipErrors := False; FDeleteReadOnly := fsoogNone; FFullFilesTreeToDelete := nil; FWfxPluginFileSource:= aTargetFileSource as IWfxPluginFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TWfxPluginDeleteOperation.Destroy; begin inherited Destroy; end; procedure TWfxPluginDeleteOperation.Initialize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(FilesToDelete.Path, FS_STATUS_START, FS_STATUS_OP_DELETE); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FWfxPluginFileSource.FillAndCount(FilesToDelete, True, False, FFullFilesTreeToDelete, FStatistics.TotalFiles, FStatistics.TotalBytes); // gets full list of files (recursive) end; procedure TWfxPluginDeleteOperation.MainExecute; var aFile: TFile; CurrentFileIndex: Integer; begin for CurrentFileIndex := FFullFilesTreeToDelete.Count - 1 downto 0 do begin aFile := FFullFilesTreeToDelete[CurrentFileIndex]; FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); ProcessFile(aFile); with FStatistics do begin DoneFiles := DoneFiles + 1; DoneBytes := DoneBytes + aFile.Size; UpdateStatistics(FStatistics); end; AppProcessMessages; CheckOperationState; end; end; procedure TWfxPluginDeleteOperation.Finalize; begin with FWfxPluginFileSource do WfxModule.WfxStatusInfo(FilesToDelete.Path, FS_STATUS_END, FS_STATUS_OP_DELETE); end; function TWfxPluginDeleteOperation.ProcessFile(aFile: TFile): Boolean; var FileName: String; bRetry: Boolean; sMessage, sQuestion: String; logOptions: TLogOptions; begin Result := False; FileName := aFile.Path + aFile.Name; if FileIsReadOnly(aFile.Attributes) then begin case FDeleteReadOnly of fsoogNone: case AskQuestion(Format(rsMsgFileReadOnly, [FileName]), '', [fsourYes, fsourAll, fsourSkip, fsourSkipAll], fsourYes, fsourSkip) of fsourAll: FDeleteReadOnly := fsoogYes; fsourSkip: Exit; fsourSkipAll: begin FDeleteReadOnly := fsoogNo; Exit; end; end; fsoogNo: Exit; end; end; repeat bRetry := False; //if FileIsReadOnly(aFile.Attributes) then // mbFileSetReadOnly(FileName, False); with FWfxPluginFileSource.WfxModule do if aFile.IsDirectory then // directory begin Result := WfxRemoveDir(FileName); end else begin // files and other stuff Result := WfxDeleteFile(FileName); end; if Result then begin // success if aFile.IsDirectory then begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogRmDir, [FileName]), [log_vfs_op], lmtSuccess); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FileName]), [log_vfs_op], lmtSuccess); end; end else // error begin if aFile.IsDirectory then begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogRmDir, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end else begin logOptions := [log_vfs_op]; sMessage := Format(rsMsgLogError + rsMsgLogDelete, [FileName]); sQuestion := Format(rsMsgNotDelete, [FileName]); end; if gSkipFileOpError or (FSkipErrors = True) then LogMessage(sMessage, logOptions, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; function TWfxPluginDeleteOperation.ShowError(sMessage: String): TFileSourceOperationUIResponse; begin if gSkipFileOpError then begin logWrite(Thread, sMessage, lmtError, True); Result := fsourSkip; end else begin Result := AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourCancel); if Result = fsourCancel then RaiseAbortOperation; end; end; procedure TWfxPluginDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/tempfilesystem/�����������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�020724� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/tempfilesystem/utempfilesystemfilesource.pas������������������������0000644�0001750�0000144�00000007560�11747211345�026743� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uTempFileSystemFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSystemFileSource; type ITempFileSystemFileSource = interface(IFileSystemFileSource) ['{1B6CFF05-15D5-45AF-A382-9C12C1A52024}'] function GetDeleteOnDestroy: Boolean; procedure SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); property DeleteOnDestroy: Boolean read GetDeleteOnDestroy write SetDeleteOnDestroy; property FileSystemRoot: String read GetRootDir; end; { TTempFileSystemFileSource } {en Filesystem file source that stores temporary files. Operations can be done like on a regular file system but all the contents can be deleted when the file source is destroyed, depending on DeleteOnDestroy property. } TTempFileSystemFileSource = class(TFileSystemFileSource, ITempFileSystemFileSource) private FDeleteOnDestroy: Boolean; FTempRootDir: String; function GetDeleteOnDestroy: Boolean; procedure SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); protected public constructor Create; override; constructor Create(const aPath: String); virtual; overload; destructor Destroy; override; class function GetFileSource: ITempFileSystemFileSource; function IsPathAtRoot(Path: String): Boolean; override; function GetParentDir(sPath: String): String; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; property DeleteOnDestroy: Boolean read FDeleteOnDestroy write FDeleteOnDestroy default True; property FilesystemRoot: String read FTempRootDir; end; ETempFileSourceException = class(Exception); ECannotCreateTempFileSourceException = class(ETempFileSourceException); implementation uses DCOSUtils, uOSUtils, DCStrUtils, uFileProcs; constructor TTempFileSystemFileSource.Create; begin Create(''); end; constructor TTempFileSystemFileSource.Create(const aPath: String); begin inherited Create; if (aPath <> EmptyStr) and mbDirectoryExists(aPath) then FTempRootDir := aPath else begin FTempRootDir := GetTempName(GetTempDir + '_dc'); if (FTempRootDir = EmptyStr) or (mbForceDirectory(FTempRootDir) = False) then begin FDeleteOnDestroy := False; raise ECannotCreateTempFileSourceException.Create('Cannot create temp file source'); end; end; FCurrentAddress := FTempRootDir; FDeleteOnDestroy := True; FTempRootDir := IncludeTrailingPathDelimiter(FTempRootDir); end; destructor TTempFileSystemFileSource.Destroy; begin inherited Destroy; if FDeleteOnDestroy and mbDirectoryExists(FTempRootDir) then begin DelTree(FCurrentAddress); mbRemoveDir(FCurrentAddress); end; end; function TTempFileSystemFileSource.GetDeleteOnDestroy: Boolean; begin Result := FDeleteOnDestroy; end; procedure TTempFileSystemFileSource.SetDeleteOnDestroy(NewDeleteOnDestroy: Boolean); begin FDeleteOnDestroy := NewDeleteOnDestroy; end; class function TTempFileSystemFileSource.GetFileSource: ITempFileSystemFileSource; begin Result := TTempFileSystemFileSource.Create; end; function TTempFileSystemFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := GetDiskFreeSpace(FTempRootDir, FreeSize, TotalSize); end; function TTempFileSystemFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (IncludeTrailingPathDelimiter(Path) = FTempRootDir); end; function TTempFileSystemFileSource.GetParentDir(sPath: String): String; begin if IsPathAtRoot(sPath) then Result := '' else Result := DCStrUtils.GetParentDir(sPath); end; function TTempFileSystemFileSource.GetRootDir(sPath: String): String; begin Result := FTempRootDir; end; function TTempFileSystemFileSource.GetRootDir: String; begin Result := FTempRootDir; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/uarchivefilesource.pas����������������������������������������������0000644�0001750�0000144�00000003766�11747211345�022244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uArchiveFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uLocalFileSource, uFileSource, uFile, uFileProperty; type IArchiveFileSource = interface(ILocalFileSource) ['{13A8637C-FFDF-46B0-B5B4-E7C6851C157A}'] {en Full path to the archive on the ParentFileSource. } property ArchiveFileName: String read GetCurrentAddress; end; TArchiveFileSource = class(TLocalFileSource, IArchiveFileSource) protected function GetSupportedFileProperties: TFilePropertiesTypes; override; public {en Creates an archive file source. @param(anArchiveFileSource File source that stores the archive. Usually it will be direct-access file source, like filesystem.) @param(anArchiveFileName Full path to the archive on the ArchiveFileSource.) } constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String); virtual reintroduce overload; class function CreateFile(const APath: String): TFile; override; property ArchiveFileName: String read GetCurrentAddress; end; implementation constructor TArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String); begin FCurrentAddress := anArchiveFileName; inherited Create; ParentFileSource := anArchiveFileSource; end; class function TArchiveFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin SizeProperty := TFileSizeProperty.Create; CompressedSizeProperty := TFileCompressedSizeProperty.Create; AttributesProperty := TFileAttributesProperty.CreateOSAttributes; ModificationTimeProperty := TFileModificationDateTimeProperty.Create; end; end; function TArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpSize, fpCompressedSize, fpAttributes, fpModificationTime]; end; end. ����������doublecmd-0.7.1/src/filesources/ufilesourcecreatedirectoryoperation.pas�����������������������������0000644�0001750�0000144�00000005655�11747211345�025733� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceCreateDirectoryOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFileSource; type { TFileSourceCreateDirectoryOperation } TFileSourceCreateDirectoryOperation = class(TFileSourceOperation) private FFileSource: IFileSource; FBasePath: String; FDirectoryPath: String; FAbsolutePath: String; FRelativePath: String; protected function GetID: TFileSourceOperationType; override; procedure UpdateStatisticsAtStartTime; override; procedure DoReloadFileSources; override; property BasePath: String read FBasePath; property DirectoryPath: String read FDirectoryPath; property AbsolutePath: String read FAbsolutePath; property RelativePath: String read FRelativePath; public {en @param(aTargetFileSource File source where the directory should be created.) @param(aCurrentPath Absolute path to current directory where the new directory should be created (if its path is not absolute).) @param(aDirectoryPath Absolute or relative (to TargetFileSource.CurrentPath) path to a directory that should be created.) } constructor Create(aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; end; implementation uses DCStrUtils, uLng; constructor TFileSourceCreateDirectoryOperation.Create( aTargetFileSource: IFileSource; aCurrentPath: String; aDirectoryPath: String); begin inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FBasePath := aCurrentPath; FDirectoryPath := aDirectoryPath; if FFileSource.GetPathType(FDirectoryPath) = ptAbsolute then begin FAbsolutePath := FDirectoryPath; FRelativePath := ExtractDirLevel(aCurrentPath, FDirectoryPath); end else begin FAbsolutePath := aCurrentPath + FDirectoryPath; FRelativePath := FDirectoryPath; end; end; destructor TFileSourceCreateDirectoryOperation.Destroy; begin inherited Destroy; end; procedure TFileSourceCreateDirectoryOperation.UpdateStatisticsAtStartTime; begin // empty end; function TFileSourceCreateDirectoryOperation.GetID: TFileSourceOperationType; begin Result := fsoCreateDirectory; end; procedure TFileSourceCreateDirectoryOperation.DoReloadFileSources; begin FFileSource.Reload(FFileSource.GetParentDir(FAbsolutePath)); end; function TFileSourceCreateDirectoryOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperCreatingSomeDirectory, [AbsolutePath]); else Result := rsOperCreatingDirectory; end; end; end. �����������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceexecuteoperation.pas�������������������������������������0000644�0001750�0000144�00000007015�12612505011�024161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type TFileSourceExecuteOperationResult = (fseorSuccess, //<en the command was executed successfully fseorError, //<en execution failed fseorCancelled, //<en cancelled by user (nothing happened) fseorYourSelf, //<en DC should download/extract the file and execute it locally fseorWithAll, //<en DC should download/extract all files and execute chosen file locally fseorSymLink); //<en this was a (symbolic) link or .lnk file pointing to a different directory { TFileSourceExecuteOperation } TFileSourceExecuteOperation = class(TFileSourceOperation) private FFileSource: IFileSource; FCurrentPath: String; FExecutableFile: TFile; FAbsolutePath: String; FRelativePath: String; FVerb: String; protected FResultString: String; FExecuteOperationResult: TFileSourceExecuteOperationResult; function GetID: TFileSourceOperationType; override; procedure UpdateStatisticsAtStartTime; override; procedure DoReloadFileSources; override; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; property CurrentPath: String read FCurrentPath; property ExecutableFile: TFile read FExecutableFile; property ResultString: String read FResultString write FResultString; property AbsolutePath: String read FAbsolutePath; property RelativePath: String read FRelativePath; property Verb: String read FVerb; property ExecuteOperationResult: TFileSourceExecuteOperationResult read FExecuteOperationResult; end; implementation uses uLng; constructor TFileSourceExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FCurrentPath := aCurrentPath; FExecutableFile := aExecutableFile; aExecutableFile := nil; FVerb := aVerb; FExecuteOperationResult := fseorCancelled; FAbsolutePath := FExecutableFile.FullPath; FRelativePath := FExecutableFile.Name; end; destructor TFileSourceExecuteOperation.Destroy; begin inherited Destroy; FreeAndNil(FExecutableFile); end; procedure TFileSourceExecuteOperation.UpdateStatisticsAtStartTime; begin // empty end; function TFileSourceExecuteOperation.GetID: TFileSourceOperationType; begin Result := fsoExecute; end; procedure TFileSourceExecuteOperation.DoReloadFileSources; begin if FExecuteOperationResult <> fseorCancelled then FFileSource.Reload(FCurrentPath); end; function TFileSourceExecuteOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperExecutingSomething, [ExecutableFile.Name]); else Result := rsOperExecuting; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcetreebuilder.pas������������������������������������������0000644�0001750�0000144�00000017637�12631352220�023122� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceTreeBuilder; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationUI, uSearchTemplate, uFindFiles; type // Additional data for the filesystem tree node. TFileTreeNodeData = class public // True if any of the subnodes (recursively) are links. SubnodesHaveLinks: Boolean; // Whether directory or subdirectories have any elements that will not be copied/moved. SubnodesHaveExclusions: Boolean; end; { TFileSourceTreeBuilder } TFileSourceTreeBuilder = class protected FFilesTree: TFileTree; FFilesCount: Int64; FCurrentDepth: Integer; FDirectoriesCount: Int64; FFilesSize: Int64; FExcludeRootDir: Boolean; FFileTemplate: TSearchTemplate; FExcludeEmptyTemplateDirectories: Boolean; FSymlinkOption: TFileSourceOperationOptionSymLink; FRecursive: Boolean; FFileChecks: TFindFileChecks; FRootDir: String; AskQuestion: TAskQuestionFunction; CheckOperationState: TCheckOperationStateFunction; procedure AddItem(aFile: TFile; CurrentNode: TFileTreeNode); procedure AddFilesInDirectory(srcPath: String; CurrentNode: TFileTreeNode); virtual; abstract; procedure AddFile(aFile: TFile; CurrentNode: TFileTreeNode); procedure AddLink(aFile: TFile; CurrentNode: TFileTreeNode); virtual; procedure AddLinkTarget(aFile: TFile; CurrentNode: TFileTreeNode); virtual; abstract; procedure AddDirectory(aFile: TFile; CurrentNode: TFileTreeNode); procedure DecideOnLink(aFile: TFile; CurrentNode: TFileTreeNode); function GetItemsCount: Int64; public constructor Create(AskQuestionFunction: TAskQuestionFunction; CheckOperationStateFunction: TCheckOperationStateFunction); destructor Destroy; override; procedure BuildFromFiles(Files: TFiles); function ReleaseTree: TFileTree; property ExcludeRootDir: Boolean read FExcludeRootDir write FExcludeRootDir; property Recursive: Boolean read FRecursive write FRecursive; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymlinkOption write FSymlinkOption; property FilesTree: TFileTree read FFilesTree; property FilesSize: Int64 read FFilesSize; property FilesCount: Int64 read FFilesCount; property DirectoriesCount: Int64 read FDirectoriesCount; property ItemsCount: Int64 read GetItemsCount; property ExcludeEmptyTemplateDirectories: Boolean read FExcludeEmptyTemplateDirectories write FExcludeEmptyTemplateDirectories; {en Does not take ownership of SearchTemplate and does not free it. } property SearchTemplate: TSearchTemplate read FFileTemplate write FFileTemplate; end; implementation uses uGlobs, uLng; constructor TFileSourceTreeBuilder.Create(AskQuestionFunction: TAskQuestionFunction; CheckOperationStateFunction: TCheckOperationStateFunction); begin AskQuestion := AskQuestionFunction; CheckOperationState := CheckOperationStateFunction; FRecursive := True; FSymlinkOption := fsooslNone; end; destructor TFileSourceTreeBuilder.Destroy; begin inherited Destroy; FFilesTree.Free; end; procedure TFileSourceTreeBuilder.BuildFromFiles(Files: TFiles); var i: Integer; begin FreeAndNil(FFilesTree); FFilesTree := TFileTreeNode.Create; FFilesTree.Data := TFileTreeNodeData.Create; FFilesSize := 0; FFilesCount := 0; FDirectoriesCount := 0; FCurrentDepth := 0; FRootDir := Files.Path; if Assigned(FFileTemplate) then SearchTemplateToFindFileChecks(FFileTemplate.SearchRecord, FFileChecks); if ExcludeRootDir then begin for i := 0 to Files.Count - 1 do if Files[i].IsDirectory then AddFilesInDirectory(Files[i].FullPath + DirectorySeparator, FFilesTree); end else begin for i := 0 to Files.Count - 1 do AddItem(Files[i].Clone, FFilesTree); end; end; procedure TFileSourceTreeBuilder.AddFile(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create; Inc(FFilesCount); FFilesSize:= FFilesSize + aFile.Size; CheckOperationState; end; procedure TFileSourceTreeBuilder.AddLink(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; AddedNode.Data := TFileTreeNodeData.Create; (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; Inc(FFilesCount); end; procedure TFileSourceTreeBuilder.AddDirectory(aFile: TFile; CurrentNode: TFileTreeNode); var AddedNode: TFileTreeNode; AddedIndex: Integer; NodeData: TFileTreeNodeData; begin AddedIndex := CurrentNode.AddSubNode(aFile); AddedNode := CurrentNode.SubNodes[AddedIndex]; NodeData := TFileTreeNodeData.Create; AddedNode.Data := NodeData; Inc(FDirectoriesCount); if FRecursive then begin if not Assigned(FFileTemplate) or (FFileTemplate.SearchRecord.SearchDepth < 0) or (FCurrentDepth <= FFileTemplate.SearchRecord.SearchDepth) then begin Inc(FCurrentDepth); AddFilesInDirectory(aFile.FullPath + DirectorySeparator, AddedNode); Dec(FCurrentDepth); end; if Assigned(FFileTemplate) and FExcludeEmptyTemplateDirectories and (AddedNode.SubNodesCount = 0) then begin CurrentNode.RemoveSubNode(AddedIndex); (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; end else begin // Propagate flags to parent. if NodeData.SubnodesHaveLinks then (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveLinks := True; if NodeData.SubnodesHaveExclusions then (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; end; end; end; procedure TFileSourceTreeBuilder.DecideOnLink(aFile: TFile; CurrentNode: TFileTreeNode); begin case FSymLinkOption of fsooslFollow: AddLinkTarget(aFile, CurrentNode); fsooslDontFollow: AddLink(aFile, CurrentNode); fsooslNone: begin case AskQuestion('', Format(rsMsgFollowSymlink, [aFile.Name]), [fsourYes, fsourAll, fsourNo, fsourSkipAll], fsourYes, fsourNo) of fsourYes: AddLinkTarget(aFile, CurrentNode); fsourAll: begin FSymLinkOption := fsooslFollow; AddLinkTarget(aFile, CurrentNode); end; fsourNo: AddLink(aFile, CurrentNode); fsourSkipAll: begin FSymLinkOption := fsooslDontFollow; AddLink(aFile, CurrentNode); end; else raise Exception.Create('Invalid user response'); end; end; else raise Exception.Create('Invalid symlink option'); end; end; procedure TFileSourceTreeBuilder.AddItem(aFile: TFile; CurrentNode: TFileTreeNode); var Matches: Boolean; begin if Assigned(FFileTemplate) then begin if AFile.IsDirectory or AFile.IsLinkToDirectory then begin Matches := CheckDirectoryName(FFileChecks, aFile.Name) and CheckDirectoryNameRelative(FFileChecks, aFile.FullPath, FRootDir); end else begin Matches := CheckFile(FFileTemplate.SearchRecord, FFileChecks, aFile); end; if not Matches then begin (CurrentNode.Data as TFileTreeNodeData).SubnodesHaveExclusions := True; Exit; end; end; if aFile.IsDirectory then AddDirectory(aFile, CurrentNode) else if aFile.IsLink then DecideOnLink(aFile, CurrentNode) else AddFile(aFile, CurrentNode); end; function TFileSourceTreeBuilder.ReleaseTree: TFileTree; begin Result := FFilesTree; FFilesTree := nil; end; function TFileSourceTreeBuilder.GetItemsCount: Int64; begin Result := FilesCount + DirectoriesCount; end; end. �������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�020015� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivedeleteoperation.pas���������������������������0000644�0001750�0000144�00000020574�12630374024�026144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveDeleteOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, uFileSourceDeleteOperation, uFileSource, uFileSourceOperation, uFileSourceOperationUI, uFile, uWcxArchiveFileSource, uGlobs, uLog; type TWcxArchiveDeleteOperation = class(TFileSourceDeleteOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceDeleteOperationStatistics; // local copy of statistics procedure CountFiles(const theFiles: TFiles; FileMask: String); {en Convert TFiles into a string separated with #0 (format used by WCX). } function GetFileList(const theFiles: TFiles): String; protected procedure ShowError(sMessage: String; logOptions: TLogOptions); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); public constructor Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; end; implementation uses DCOSUtils, DCStrUtils, uDCUtils, uLng, uShowMsg, uWCXmodule, WcxPlugin, uMasks, FileUtil, LazUTF8, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // WCX interface cannot discern different operations (for reporting progress), // so this global variable is used to store currently running operation. // (There may be other running concurrently, but only one may report progress.) WcxDeleteOperation: TWcxArchiveDeleteOperation = nil; function ChangeVolProc(var ArcName : String; Mode: LongInt): LongInt; begin Result:= 1; case Mode of PK_VOL_ASK: begin // Use operation UI for this? if not ShowInputQuery('Double Commander', rsMsgSelLocNextVol, ArcName) then Result := 0; // Abort operation end; PK_VOL_NOTIFY: if log_arc_op in gLogOptions then LogWrite(rsMsgNextVolUnpack + #32 + ArcName); end; end; function ChangeVolProcA(ArcName : PAnsiChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= CeSysToUtf8(StrPas(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopy(ArcName, CeUtf8ToSys(sArcName), MAX_PATH); end; function ChangeVolProcW(ArcName : PWideChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= UTF16ToUTF8(UnicodeString(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopyW(ArcName, UTF8Decode(sArcName), MAX_PATH); end; function ProcessDataProc(FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxDeleteOperation) then begin if WcxDeleteOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxDeleteOperation.FStatistics do begin CurrentFile := FileName; // Get the number of bytes processed since the previous call if Size > 0 then begin TotalFiles := 100; DoneBytes := DoneBytes + Size; DoneFiles := DoneBytes * 100 div TotalBytes; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin TotalFiles := 100; DoneFiles := -Size; end; end; WcxDeleteOperation.UpdateStatistics(WcxDeleteOperation.FStatistics); WcxDeleteOperation.CheckOperationState; end; end; end; function ProcessDataProcA(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcW(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveDeleteOperation.Create(aTargetFileSource: IFileSource; var theFilesToDelete: TFiles); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; inherited Create(aTargetFileSource, theFilesToDelete); end; destructor TWcxArchiveDeleteOperation.Destroy; begin ClearCurrentOperation; inherited Destroy; end; procedure TWcxArchiveDeleteOperation.Initialize; begin if Assigned(WcxDeleteOperation) and (WcxDeleteOperation <> Self) then raise Exception.Create('Another WCX delete operation is already running'); WcxDeleteOperation := Self; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; CountFiles(FilesToDelete, '*.*'); end; procedure TWcxArchiveDeleteOperation.MainExecute; var iResult: Integer; WcxModule: TWcxModule; begin WcxModule := FWcxArchiveFileSource.WcxModule; WcxModule.WcxSetChangeVolProc(wcxInvalidHandle, @ChangeVolProcA, @ChangeVolProcW); WcxModule.WcxSetProcessDataProc(wcxInvalidHandle, @ProcessDataProcA, @ProcessDataProcW); iResult := WcxModule.WcxDeleteFiles(FWcxArchiveFileSource.ArchiveFileName, GetFileList(FilesToDelete)); // Check for errors. if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogDelete, [FWcxArchiveFileSource.ArchiveFileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogDelete, [FWcxArchiveFileSource.ArchiveFileName]), [log_arc_op], lmtSuccess); end; end; procedure TWcxArchiveDeleteOperation.Finalize; begin ClearCurrentOperation; end; procedure TWcxArchiveDeleteOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourCancel], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TWcxArchiveDeleteOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveDeleteOperation.CountFiles(const theFiles: TFiles; FileMask: String); var i: Integer; Header: TWCXHeader; ArcFileList: TList; begin ArcFileList := FWcxArchiveFileSource.ArchiveFileList; for i := 0 to ArcFileList.Count - 1 do begin Header := TWCXHeader(ArcFileList.Items[I]); // Check if the file from the archive fits the selection given via theFiles. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories and MatchesFileList(theFiles, Header.FileName) // Check if it's included in the filelist and ((FileMask = '*.*') or (FileMask = '*') // And name matches file mask or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin Inc(FStatistics.TotalBytes, Header.UnpSize); Inc(FStatistics.TotalFiles, 1); end; end; UpdateStatistics(FStatistics); end; function TWcxArchiveDeleteOperation.GetFileList(const theFiles: TFiles): String; var I : Integer; FileName : String; begin Result := ''; for I := 0 to theFiles.Count - 1 do begin // Filenames must be relative to archive root and shouldn't start with path delimiter. FileName := ExcludeFrontPathDelimiter(theFiles[I].FullPath); //ExtractDirLevel(FWcxArchiveFileSource.GetRootString, theFiles[I].FullPath) // Special treatment of directories. if theFiles[i].IsDirectory then // TC ends paths to directories to be deleted with '\*.*' // (which means delete this directory and all files in it). FileName := IncludeTrailingPathDelimiter(FileName) + '*.*'; Result := Result + FileName + #0; end; Result := Result + #0; end; class procedure TWcxArchiveDeleteOperation.ClearCurrentOperation; begin WcxDeleteOperation := nil; end; end. ������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivetestarchiveoperation.pas����������������������0000644�0001750�0000144�00000024546�12670343034�027227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveTestArchiveOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WcxPlugin, uLog, uGlobs, uFileSourceTestArchiveOperation, uFileSource, uFileSourceOperation, uFile, uWcxArchiveFileSource; type { TWcxArchiveTestArchiveOperation } TWcxArchiveTestArchiveOperation = class(TFileSourceTestArchiveOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceTestArchiveOperationStatistics; // local copy of statistics FCurrentFileSize: Int64; procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); protected procedure SetChangeVolProc(hArcData: TArcHandle); procedure SetProcessDataProc(hArcData: TArcHandle); public constructor Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; end; implementation uses FileUtil, LazUTF8, DCOSUtils, DCStrUtils, uDCUtils, uShowMsg, uFileSourceOperationUI, uWCXmodule, uLng, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxTestArchiveOperationG: TWcxArchiveTestArchiveOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxTestArchiveOperationT: TWcxArchiveTestArchiveOperation; function ChangeVolProc(var ArcName : String; Mode: LongInt): LongInt; begin Result:= 1; case Mode of PK_VOL_ASK: begin // Use operation UI for this? if not ShowInputQuery('Double Commander', rsMsgSelLocNextVol, ArcName) then Result := 0; // Abort operation end; PK_VOL_NOTIFY: if log_arc_op in gLogOptions then LogWrite(rsMsgNextVolUnpack + #32 + ArcName); end; end; function ChangeVolProcA(ArcName : PAnsiChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= CeSysToUtf8(StrPas(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopy(ArcName, CeUtf8ToSys(sArcName), MAX_PATH); end; function ChangeVolProcW(ArcName : PWideChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= UTF16ToUTF8(UnicodeString(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopyW(ArcName, UTF8Decode(sArcName), MAX_PATH); end; function ProcessDataProc(WcxTestArchiveOperation: TWcxArchiveTestArchiveOperation; FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxTestArchiveOperation) then begin if WcxTestArchiveOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxTestArchiveOperation.FStatistics do begin // Get the number of bytes processed since the previous call if Size > 0 then begin CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then CurrentFileDoneBytes := CurrentFileTotalBytes; DoneBytes := DoneBytes + Size; end // Get progress percent value to directly set progress bar else if Size < 0 then begin CurrentFile:= FileName; // Total operation percent if (Size >= -100) and (Size <= -1) then begin DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin CurrentFileTotalBytes := 100; CurrentFileDoneBytes := Int64(-Size) - 1000; end; end; WcxTestArchiveOperation.UpdateStatistics(WcxTestArchiveOperation.FStatistics); WcxTestArchiveOperation.CheckOperationState; end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationG, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationT, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxTestArchiveOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveTestArchiveOperation.Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); begin FWcxArchiveFileSource := aSourceFileSource as IWcxArchiveFileSource; inherited Create(aSourceFileSource, theSourceFiles); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_UNPACK = 0); end; destructor TWcxArchiveTestArchiveOperation.Destroy; begin ClearCurrentOperation; inherited Destroy; end; procedure TWcxArchiveTestArchiveOperation.Initialize; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxTestArchiveOperationG := Self else WcxTestArchiveOperationT := Self; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.ArchiveFile:= FWcxArchiveFileSource.ArchiveFileName; end; procedure TWcxArchiveTestArchiveOperation.MainExecute; var ArcHandle: TArcHandle; Header: TWCXHeader; OpenResult: Longint; iResult: Integer; Files: TFiles = nil; WcxModule: TWcxModule; begin WcxModule := FWcxArchiveFileSource.WcxModule; ArcHandle := WcxModule.OpenArchiveHandle(FWcxArchiveFileSource.ArchiveFileName, PK_OM_EXTRACT, OpenResult); if ArcHandle = 0 then begin AskQuestion(uWcxModule.GetErrorMsg(OpenResult), '', [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; // Convert file list so that filenames are relative to archive root. Files := SourceFiles.Clone; ChangeFileListRoot(PathDelim, Files); try SetChangeVolProc(ArcHandle); SetProcessDataProc(ArcHandle); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do try CheckOperationState; // Now check if the file is to be extracted. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories (we handle them ourselves). and MatchesFileList(Files, Header.FileName) // Check if it's included in the filelist then begin with FStatistics do begin CurrentFile := Header.FileName; CurrentFileTotalBytes := Header.UnpSize; CurrentFileDoneBytes := 0; UpdateStatistics(FStatistics); FCurrentFileSize := Header.UnpSize; end; iResult := WcxModule.WcxProcessFile(ArcHandle, PK_TEST, EmptyStr, EmptyStr); if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); // User aborted operation. if iResult = E_EABORTED then Break; end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName]), [log_arc_op], lmtSuccess); end; // Success end // Extract else // Skip begin iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); //Check for errors if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogTest, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); end; end; // Skip finally FreeAndNil(Header); end; WcxModule.CloseArchive(ArcHandle); finally if Assigned(Files) then FreeAndNil(Files); end; end; procedure TWcxArchiveTestArchiveOperation.Finalize; begin ClearCurrentOperation; end; procedure TWcxArchiveTestArchiveOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TWcxArchiveTestArchiveOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveTestArchiveOperation.SetChangeVolProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do WcxSetChangeVolProc(hArcData, @ChangeVolProcA, @ChangeVolProcW); end; procedure TWcxArchiveTestArchiveOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; class procedure TWcxArchiveTestArchiveOperation.ClearCurrentOperation; begin WcxTestArchiveOperationG := nil; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivecopyinoperation.pas���������������������������0000644�0001750�0000144�00000044436�12630374024�026206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveCopyInOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, StringHashList, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFile, uWcxModule, uWcxArchiveFileSource, uFileSourceOperationOptions, uFileSourceOperationOptionsUI; type { TWcxArchiveCopyInOperation } TWcxArchiveCopyInOperation = class(TFileSourceCopyInOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FFullFilesTree: TFiles; FPackingFlags: Integer; // Packing flags passed to plugin FTarBefore: Boolean; // Create TAR archive first FTarFileName: String; // Temporary TAR archive name FFileList: TStringHashList; {en Convert TFiles into a string separated with #0 (format used by WCX). } function GetFileList(const theFiles: TFiles): String; procedure SetTarBefore(const AValue: Boolean); procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); procedure DeleteFiles(const aFiles: TFiles); protected function Tar: Boolean; procedure SetChangeVolProc(hArcData: TArcHandle); procedure SetProcessDataProc(hArcData: TArcHandle); function FileExistsMessage(aSourceFile: TFile; aTargetHeader: TWcxHeader): String; function FileExists(aSourceFile: TFile; aTargetHeader: TWcxHeader): TFileSourceOperationOptionFileExists; public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; property PackingFlags: Integer read FPackingFlags write FPackingFlags; property TarBefore: Boolean read FTarBefore write SetTarBefore; end; implementation uses LazUTF8, FileUtil, StrUtils, DCStrUtils, uLng, uShowMsg, fWcxArchiveCopyOperationOptions, uFileSystemFileSource, uFileSourceOperationUI, uFileSystemUtil, DCOSUtils, uTarWriter, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxCopyInOperationG: TWcxArchiveCopyInOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxCopyInOperationT: TWcxArchiveCopyInOperation; function ChangeVolProc(var ArcName : String; Mode: LongInt): LongInt; begin Result:= 1; case Mode of PK_VOL_ASK: begin // Use operation UI for this? if not ShowInputQuery('Double Commander', rsMsgSelLocNextVol, ArcName) then Result := 0; // Abort operation end; PK_VOL_NOTIFY: if log_arc_op in gLogOptions then LogWrite(rsMsgNextVolUnpack + #32 + ArcName); end; end; function ChangeVolProcA(ArcName : PAnsiChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= CeSysToUtf8(StrPas(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopy(ArcName, CeUtf8ToSys(sArcName), MAX_PATH); end; function ChangeVolProcW(ArcName : PWideChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= UTF16ToUTF8(UnicodeString(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopyW(ArcName, UTF8Decode(sArcName), MAX_PATH); end; function ProcessDataProc(WcxCopyInOperation: TWcxArchiveCopyInOperation; FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxCopyInOperation) then begin if WcxCopyInOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxCopyInOperation.FStatistics do begin CurrentFileFrom:= FileName; // Get the number of bytes processed since the previous call if Size > 0 then begin DoneBytes := DoneBytes + Size; if TotalFiles = 1 then begin CurrentFileDoneBytes := DoneBytes; CurrentFileTotalBytes := TotalBytes; end; end // Get progress percent value to directly set progress bar else if Size < 0 then begin // Total operation percent if (Size >= -100) and (Size <= -1) then begin DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin CurrentFileTotalBytes := 100; CurrentFileDoneBytes := Int64(-Size) - 1000; end; end; WcxCopyInOperation.UpdateStatistics(WcxCopyInOperation.FStatistics); WcxCopyInOperation.CheckOperationState; end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationG, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationT, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyInOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveCopyInOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; FFullFilesTree := nil; FPackingFlags := 0; FTarBefore:= False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_PACK = 0); FFileList:= TStringHashList.Create(True); end; destructor TWcxArchiveCopyInOperation.Destroy; begin ClearCurrentOperation; inherited Destroy; FreeAndNil(FFileList); FreeAndNil(FFullFilesTree); end; procedure TWcxArchiveCopyInOperation.Initialize; var Item: TObject; Index: Integer; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxCopyInOperationG := Self else WcxCopyInOperationT := Self; // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; FStatistics.CurrentFileDoneBytes := -1; // Gets full list of files (recursive) FillAndCount(SourceFiles, False, False, FFullFilesTree, FStatistics.TotalFiles, FStatistics.TotalBytes); // Need to check file existence if FFileExistsOption <> fsoofeOverwrite then begin // Populate archive file list for Index:= 0 to FWcxArchiveFileSource.ArchiveFileList.Count - 1 do begin Item:= FWcxArchiveFileSource.ArchiveFileList[Index]; FFileList.Add(UTF8LowerCase(TWcxHeader(Item).FileName), Item); end; end; end; procedure TWcxArchiveCopyInOperation.MainExecute; var iResult: Integer; sFileList: String; sDestPath: String; WcxModule: TWcxModule; begin // Put to TAR archive if needed if FTarBefore and Tar then Exit; WcxModule := FWcxArchiveFileSource.WcxModule; sDestPath := ExcludeFrontPathDelimiter(TargetPath); sDestPath := ExcludeTrailingPathDelimiter(sDestPath); sDestPath := sDestPath; with FStatistics do begin if FTarBefore then CurrentFileDoneBytes := -1; CurrentFileTo:= FWcxArchiveFileSource.ArchiveFileName; UpdateStatistics(FStatistics); end; SetChangeVolProc(wcxInvalidHandle); SetProcessDataProc(wcxInvalidHandle); // Convert TFiles into String; sFileList:= GetFileList(FFullFilesTree); // Nothing to pack (user skip all files) if sFileList = #0 then Exit; iResult := WcxModule.WcxPackFiles( FWcxArchiveFileSource.ArchiveFileName, sDestPath, // no trailing path delimiter here IncludeTrailingPathDelimiter(FFullFilesTree.Path), // end with path delimiter here sFileList, PackingFlags); // Check for errors. if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogPack, [FWcxArchiveFileSource.ArchiveFileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); end else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogPack, [FWcxArchiveFileSource.ArchiveFileName]), [log_arc_op], lmtSuccess); FStatistics.DoneFiles:= FStatistics.TotalFiles; UpdateStatistics(FStatistics); end; // Delete temporary TAR archive if needed if FTarBefore then mbDeleteFile(FTarFileName); end; procedure TWcxArchiveCopyInOperation.Finalize; begin ClearCurrentOperation; end; function TWcxArchiveCopyInOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperPackingSomethingTo, [SourceFiles[0].Name, FWcxArchiveFileSource.ArchiveFileName]) else Result := Format(rsOperPackingFromTo, [SourceFiles.Path, FWcxArchiveFileSource.ArchiveFileName]); end; else Result := rsOperPacking; end; end; function TWcxArchiveCopyInOperation.GetFileList(const theFiles: TFiles): String; var I: Integer; SubPath: String; FileName: String; Header: TWCXHeader; ArchiveExists: Boolean; begin Result := ''; ArchiveExists := FFileList.Count > 0; SubPath := UTF8LowerCase(ExcludeFrontPathDelimiter(TargetPath)); for I := 0 to theFiles.Count - 1 do begin // Filenames must be relative to the current directory. FileName := ExtractDirLevel(theFiles.Path, theFiles[I].FullPath); // Special treatment of directories. if theFiles[i].IsDirectory then begin // TC ends paths to directories to be packed with '\'. FileName := IncludeTrailingPathDelimiter(FileName); end // Need to check file existence else if ArchiveExists then begin Header := TWcxHeader(FFileList[SubPath + UTF8LowerCase(FileName)]); if Assigned(Header) then begin if FileExists(theFiles[I], Header) = fsoofeSkip then Continue; end; end; Result := Result + FileName + #0; end; Result := Result + #0; end; procedure TWcxArchiveCopyInOperation.SetTarBefore(const AValue: Boolean); begin with FWcxArchiveFileSource, FWcxArchiveFileSource.WcxModule do begin FTarBefore:= AValue; if FTarBefore and Assigned(PackToMem) and (PluginCapabilities and PK_CAPS_MEMPACK <> 0) then FNeedsConnection:= (BackgroundFlags and BACKGROUND_MEMPACK = 0) else FNeedsConnection:= (BackgroundFlags and BACKGROUND_PACK = 0); end; end; procedure TWcxArchiveCopyInOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TWcxArchiveCopyInOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveCopyInOperation.DeleteFiles(const aFiles: TFiles); var I: Integer; aFile: TFile; begin for I:= aFiles.Count - 1 downto 0 do begin aFile:= aFiles[I]; if aFile.IsDirectory then mbRemoveDir(aFile.FullPath) else mbDeleteFile(aFile.FullPath); end; end; procedure TWcxArchiveCopyInOperation.SetChangeVolProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do WcxSetChangeVolProc(hArcData, @ChangeVolProcA, @ChangeVolProcW); end; procedure TWcxArchiveCopyInOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; function TWcxArchiveCopyInOperation.FileExistsMessage(aSourceFile: TFile; aTargetHeader: TWcxHeader): String; begin Result:= rsMsgFileExistsOverwrite + LineEnding + aTargetHeader.FileName + LineEnding; Result:= Result + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(aTargetHeader.UnpSize)), DateTimeToStr(WcxFileTimeToDateTime(aTargetHeader))]) + LineEnding; Result:= Result + LineEnding + rsMsgFileExistsWithFile + LineEnding + aSourceFile.FullPath + LineEnding + Format(rsMsgFileExistsFileInfo, [Numb2USA(IntToStr(aSourceFile.Size)), DateTimeToStr(aSourceFile.ModificationTime)]); end; function TWcxArchiveCopyInOperation.FileExists(aSourceFile: TFile; aTargetHeader: TWcxHeader): TFileSourceOperationOptionFileExists; const PossibleResponses: array[0..7] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel); function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if aSourceFile.ModificationTime > WcxFileTimeToDateTime(aTargetHeader) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if aSourceFile.Size > aTargetHeader.UnpSize then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if aSourceFile.Size < aTargetHeader.UnpSize then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin case FFileExistsOption of fsoofeNone: begin case AskQuestion(FileExistsMessage(aSourceFile, aTargetHeader), '', PossibleResponses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourNone, fsourCancel: RaiseAbortOperation; end; end; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; else Result := FFileExistsOption; end; end; class procedure TWcxArchiveCopyInOperation.ClearCurrentOperation; begin WcxCopyInOperationG := nil; end; class function TWcxArchiveCopyInOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TWcxArchiveCopyOperationOptionsUI; end; function TWcxArchiveCopyInOperation.Tar: Boolean; var TarWriter: TTarWriter = nil; begin with FWcxArchiveFileSource, FWcxArchiveFileSource.WcxModule do begin if Assigned(PackToMem) and (PluginCapabilities and PK_CAPS_MEMPACK <> 0) then begin FTarFileName:= ArchiveFileName; TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics, WcxModule ); Result:= True; end else begin FTarFileName:= RemoveFileExt(ArchiveFileName); TarWriter:= TTarWriter.Create(FTarFileName, @AskQuestion, @RaiseAbortOperation, @CheckOperationState, @UpdateStatistics ); Result:= False; end; end; try if TarWriter.ProcessTree(FFullFilesTree, FStatistics) then begin if Result and (PackingFlags and PK_PACK_MOVE_FILES <> 0) then DeleteFiles(FFullFilesTree) else begin // Fill file list with tar archive file FFullFilesTree.Clear; FFullFilesTree.Path:= ExtractFilePath(FTarFileName); FFullFilesTree.Add(TFileSystemFileSource.CreateFileFromFile(FTarFileName)); end; end; finally FreeAndNil(TarWriter); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivelistoperation.pas�����������������������������0000644�0001750�0000144�00000003331�12577502642�025656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uWcxArchiveFileSource, uFileSource; type TWcxArchiveListOperation = class(TFileSourceListOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses DCOSUtils, uOSUtils, DCStrUtils, uWCXmodule, uFile; constructor TWcxArchiveListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWcxArchiveFileSource := aFileSource as IWcxArchiveFileSource; inherited Create(aFileSource, aPath); end; procedure TWcxArchiveListOperation.MainExecute; var I : Integer; aFile: TFile; Header: TWcxHeader; ArcFileList: TList; CurrFileName : String; // Current file name begin FFiles.Clear; if not FileSource.IsPathAtRoot(Path) then begin aFile := TWcxArchiveFileSource.CreateFile(Path); aFile.Name := '..'; aFile.Attributes := faFolder; FFiles.Add(AFile); end; ArcFileList := FWcxArchiveFileSource.ArchiveFileList; for I := 0 to ArcFileList.Count - 1 do begin CheckOperationState; Header := TWcxHeader(ArcFileList.Items[I]); CurrFileName := PathDelim + Header.FileName; if not IsInPath(Path, CurrFileName, FFlatView, False) then Continue; if FFlatView = False then aFile := TWcxArchiveFileSource.CreateFile(Path, Header) else begin if FPS_ISDIR(Header.FileAttr) then Continue; aFile := TWcxArchiveFileSource.CreateFile(ExtractFilePath(CurrFileName), Header) end; FFiles.Add(aFile); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchiveexecuteoperation.pas��������������������������0000644�0001750�0000144�00000003130�12612505011�026321� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uWcxArchiveFileSource; type { TWcxArchiveExecuteOperation } TWcxArchiveExecuteOperation = class(TFileSourceExecuteOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses fPackInfoDlg; constructor TWcxArchiveExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWcxArchiveFileSource := aTargetFileSource as IWcxArchiveFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWcxArchiveExecuteOperation.Initialize; begin end; procedure TWcxArchiveExecuteOperation.MainExecute; begin FExecuteOperationResult:= ShowPackInfoDlg(FWcxArchiveFileSource, ExecutableFile); end; procedure TWcxArchiveExecuteOperation.Finalize; begin end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivecalcstatisticsoperation.pas�������������������0000644�0001750�0000144�00000006742�12612505011�027710� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceCalcStatisticsOperation, uFileSource, uWcxArchiveFileSource, uFile; type TWcxArchiveCalcStatisticsOperation = class(TFileSourceCalcStatisticsOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceCalcStatisticsOperationStatistics; // local copy of statistics procedure ProcessFile(aFile: TFile); procedure ProcessSubDirs(const srcPath: String); public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; end; implementation uses DCOSUtils, uWcxModule, DCStrUtils; constructor TWcxArchiveCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin inherited Create(aTargetFileSource, theFiles); FWcxArchiveFileSource:= aTargetFileSource as IWcxArchiveFileSource; end; destructor TWcxArchiveCalcStatisticsOperation.Destroy; begin inherited Destroy; end; procedure TWcxArchiveCalcStatisticsOperation.Initialize; begin // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TWcxArchiveCalcStatisticsOperation.MainExecute; var CurrentFileIndex: Integer; begin for CurrentFileIndex := 0 to Files.Count - 1 do begin ProcessFile(Files[CurrentFileIndex]); CheckOperationState; end; end; procedure TWcxArchiveCalcStatisticsOperation.ProcessFile(aFile: TFile); begin FStatistics.CurrentFile := aFile.Path + aFile.Name; UpdateStatistics(FStatistics); if aFile.IsDirectory then begin Inc(FStatistics.Directories); ProcessSubDirs(aFile.Path + aFile.Name + DirectorySeparator); end else if aFile.IsLink then begin Inc(FStatistics.Links); end else begin // Not always this will be regular file (on Unix can be socket, FIFO, block, char, etc.) // Maybe check with: FPS_ISREG() on Unix? Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + aFile.Size; if aFile.ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := aFile.ModificationTime; if aFile.ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := aFile.ModificationTime; end; UpdateStatistics(FStatistics); end; procedure TWcxArchiveCalcStatisticsOperation.ProcessSubDirs(const srcPath: String); var I: Integer; Header: TWCXHeader; CurrFileName: String; ModificationTime: TDateTime; begin for I:= 0 to FWcxArchiveFileSource.ArchiveFileList.Count - 1 do begin Header := TWCXHeader(FWcxArchiveFileSource.ArchiveFileList.Items[I]); CurrFileName := PathDelim + Header.FileName; if not IsInPath(srcPath, CurrFileName, True, False) then Continue; if FPS_ISDIR(Header.FileAttr) then Inc(FStatistics.Directories) else if FPS_ISLNK(Header.FileAttr) then Inc(FStatistics.Links) else begin Inc(FStatistics.Files); FStatistics.Size := FStatistics.Size + Header.UnpSize; ModificationTime:= WcxFileTimeToDateTime(Header); if ModificationTime < FStatistics.OldestFile then FStatistics.OldestFile := ModificationTime; if ModificationTime > FStatistics.NewestFile then FStatistics.NewestFile := ModificationTime; end; end; end; end. ������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.pas����������������������0000644�0001750�0000144�00000003012�12567370641�027247� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fWcxArchiveCopyOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, ExtCtrls, uFileSourceOperationOptionsUI; type { TWcxArchiveCopyOperationOptionsUI } TWcxArchiveCopyOperationOptionsUI = class(TFileSourceOperationOptionsUI) cmbFileExists: TComboBox; grpOptions: TGroupBox; lblFileExists: TLabel; public constructor Create(AOwner: TComponent; AFileSource: IInterface); override; procedure SaveOptions; override; procedure SetOperationOptions(Operation: TObject); override; end; implementation {$R *.lfm} uses uGlobs, uFileSourceOperationOptions, uFileSourceCopyOperation; { TWcxArchiveCopyOperationOptionsUI } constructor TWcxArchiveCopyOperationOptionsUI.Create(AOwner: TComponent; AFileSource: IInterface); begin inherited; // Load default options. case gOperationOptionFileExists of fsoofeNone : cmbFileExists.ItemIndex := 0; fsoofeOverwrite: cmbFileExists.ItemIndex := 1; fsoofeSkip : cmbFileExists.ItemIndex := 2; end; end; procedure TWcxArchiveCopyOperationOptionsUI.SaveOptions; begin // TODO: Saving options for each file source operation separately. end; procedure TWcxArchiveCopyOperationOptionsUI.SetOperationOptions(Operation: TObject); begin with Operation as TFileSourceCopyOperation do begin case cmbFileExists.ItemIndex of 0: FileExistsOption := fsoofeNone; 1: FileExistsOption := fsoofeOverwrite; 2: FileExistsOption := fsoofeSkip; end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivefilesource.pas��������������������������������0000644�0001750�0000144�00000073021�12643735233�025123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveFileSource; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, contnrs, syncobjs, StringHashList, WcxPlugin, uWCXmodule, uFile, uFileSourceProperty, uFileSourceOperationTypes, uArchiveFileSource, uFileProperty, uFileSource, uFileSourceOperation; type TWcxArchiveFileSourceConnection = class; { IWcxArchiveFileSource } IWcxArchiveFileSource = interface(IArchiveFileSource) ['{DB32E8A8-486B-4053-9448-4C145C1A33FA}'] function GetArcFileList: TObjectList; function GetPluginCapabilities: PtrInt; function GetWcxModule: TWcxModule; property ArchiveFileList: TObjectList read GetArcFileList; property PluginCapabilities: PtrInt read GetPluginCapabilities; property WcxModule: TWCXModule read GetWcxModule; end; { TWcxArchiveFileSource } TWcxArchiveFileSource = class(TArchiveFileSource, IWcxArchiveFileSource) private FModuleFileName: String; FPluginCapabilities: PtrInt; FArcFileList : TObjectList; FWcxModule: TWCXModule; FOpenResult: LongInt; procedure SetCryptCallback; function ReadArchive(anArchiveHandle: TArcHandle = 0): Boolean; function GetArcFileList: TObjectList; function GetPluginCapabilities: PtrInt; function GetWcxModule: TWcxModule; function CreateConnection: TFileSourceConnection; procedure CreateConnections; procedure AddToConnectionQueue(Operation: TFileSourceOperation); procedure RemoveFromConnectionQueue(Operation: TFileSourceOperation); procedure AddConnection(Connection: TFileSourceConnection); procedure RemoveConnection(Connection: TFileSourceConnection); {en Searches connections list for a connection assigned to operation. } function FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); procedure ClearCurrentOperation(Operation: TFileSourceOperation); protected procedure OperationFinished(Operation: TFileSourceOperation); override; function GetSupportedFileProperties: TFilePropertiesTypes; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; procedure DoReload(const PathsToReload: TPathsArray); override; public constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginFileName: String; aWcxPluginCapabilities: PtrInt); reintroduce; constructor Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginModule: TWcxModule; aWcxPluginCapabilities: PtrInt; anArchiveHandle: TArcHandle); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String; WcxHeader: TWCXHeader): TFile; overload; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; class function CreateByArchiveSign(anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; class function CreateByArchiveType(anArchiveFileSource: IFileSource; anArchiveFileName: String; anArchiveType: String): IWcxArchiveFileSource; class function CreateByArchiveName(anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; {en Returns @true if there is a plugin registered for the archive type (only extension is checked). } class function CheckPluginByExt(anArchiveType: String): Boolean; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; override; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); override; property ArchiveFileList: TObjectList read FArcFileList; property PluginCapabilities: PtrInt read FPluginCapabilities; property WcxModule: TWCXModule read FWcxModule; end; { TWcxArchiveFileSourceConnection } TWcxArchiveFileSourceConnection = class(TFileSourceConnection) private FWcxModule: TWCXModule; public constructor Create(aWcxModule: TWCXModule); reintroduce; property WcxModule: TWCXModule read FWcxModule; end; EModuleNotLoadedException = class(EFileSourceException); implementation uses LazUTF8, uDebug, DCStrUtils, uDCUtils, uGlobs, DCOSUtils, uOSUtils, DCDateTimeUtils, DCConvertEncoding, FileUtil, uCryptProc, uWcxArchiveListOperation, uWcxArchiveCopyInOperation, uWcxArchiveCopyOutOperation, uWcxArchiveDeleteOperation, uWcxArchiveExecuteOperation, uWcxArchiveTestArchiveOperation, uWcxArchiveCalcStatisticsOperation; const connCopyIn = 0; connCopyOut = 1; connDelete = 2; connTestArchive = 3; var // Always use appropriate lock to access these lists. WcxConnections: TObjectList; // store connections created by Wcx file sources WcxOperationsQueue: TObjectList; // store queued operations, use only under FOperationsQueueLock WcxConnectionsLock: TCriticalSection; // used to synchronize access to connections WcxOperationsQueueLock: TCriticalSection; // used to synchronize access to operations queue function CryptProc(CryptoNumber: Integer; Mode: Integer; ArchiveName: String; var Password: String): Integer; const cPrefix = 'wcx'; var sGroup, sPassword: AnsiString; begin try sGroup:= ExtractOnlyFileExt(ArchiveName); case Mode of PK_CRYPT_SAVE_PASSWORD: begin if PasswordStore.WritePassword(cPrefix, sGroup, ArchiveName, Password) then Result:= E_SUCCESS else Result:= E_EWRITE; end; PK_CRYPT_LOAD_PASSWORD, PK_CRYPT_LOAD_PASSWORD_NO_UI: begin Result:= E_EREAD; if (Mode = PK_CRYPT_LOAD_PASSWORD_NO_UI) and (PasswordStore.HasMasterKey = False) then Exit(E_NO_FILES); if PasswordStore.ReadPassword(cPrefix, sGroup, ArchiveName, Password) then Result:= E_SUCCESS; end; PK_CRYPT_COPY_PASSWORD, PK_CRYPT_MOVE_PASSWORD: begin Result:= E_EREAD; if PasswordStore.ReadPassword(cPrefix, sGroup, ArchiveName, sPassword) then begin if not PasswordStore.WritePassword(cPrefix, sGroup, Password, sPassword) then Exit(E_EWRITE); if Mode = PK_CRYPT_MOVE_PASSWORD then PasswordStore.DeletePassword(cPrefix, sGroup, ArchiveName); Result:= E_SUCCESS; end; end; PK_CRYPT_DELETE_PASSWORD: begin PasswordStore.DeletePassword(cPrefix, sGroup, ArchiveName); Result:= E_SUCCESS; end; end; except Result:= E_ECREATE; end; end; function CryptProcA(CryptoNumber: Integer; Mode: Integer; ArchiveName, Password: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var sArchiveName, sPassword: String; begin sArchiveName:= CeSysToUtf8(StrPas(ArchiveName)); sPassword:= CeSysToUtf8(StrPas(Password)); Result:= CryptProc(CryptoNumber, Mode, sArchiveName, sPassword); if Result = E_SUCCESS then begin if Password <> nil then StrPLCopy(Password, CeUtf8ToSys(sPassword), MaxLen); end; end; function CryptProcW(CryptoNumber: Integer; Mode: Integer; ArchiveName, Password: PWideChar; MaxLen: Integer): Integer; dcpcall; var sArchiveName, sPassword: String; begin sArchiveName:= UTF16ToUTF8(UnicodeString(ArchiveName)); sPassword:= UTF16ToUTF8(UnicodeString(Password)); Result:= CryptProc(CryptoNumber, Mode, sArchiveName, sPassword); if Result = E_SUCCESS then begin if Password <> nil then StrPLCopyW(Password, UTF8Decode(sPassword), MaxLen); end; end; //-------------------------------------------------------------------------------------------------- class function TWcxArchiveFileSource.CreateByArchiveSign( anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; var I: Integer; ModuleFileName: String; WcxPlugin: TWcxModule; bFound: Boolean = False; lOpenResult: LongInt; anArchiveHandle: TArcHandle = 0; begin Result := nil; // Check if there is a registered plugin for the archive file by content. for I := 0 to gWCXPlugins.Count - 1 do begin if (gWCXPlugins.Enabled[I]) then begin ModuleFileName := GetCmdDirFromEnvVar(gWCXPlugins.FileName[I]); WcxPlugin := gWCXPlugins.LoadModule(ModuleFileName); if Assigned(WcxPlugin) then begin if ((gWCXPlugins.Flags[I] and PK_CAPS_BY_CONTENT) = PK_CAPS_BY_CONTENT) then begin if WcxPlugin.WcxCanYouHandleThisFile(anArchiveFileName) then begin anArchiveHandle:= WcxPlugin.OpenArchiveHandle(anArchiveFileName, PK_OM_LIST, lOpenResult); if (anArchiveHandle <> 0) and (lOpenResult = E_SUCCESS) then begin bFound:= True; Break; end; end; end else if ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) = PK_CAPS_HIDE) then begin bFound:= SameText(ExtractOnlyFileExt(anArchiveFileName), gWCXPlugins.Ext[I]); if bFound then Break; end; end; end; end; if bFound then begin Result := TWcxArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, WcxPlugin, gWCXPlugins.Flags[I], anArchiveHandle); DCDebug('Found registered plugin ' + ModuleFileName + ' for archive ' + anArchiveFileName); end; end; class function TWcxArchiveFileSource.CreateByArchiveType( anArchiveFileSource: IFileSource; anArchiveFileName: String; anArchiveType: String): IWcxArchiveFileSource; var i: Integer; ModuleFileName: String; begin Result := nil; // Check if there is a registered plugin for the extension of the archive file name. for i := 0 to gWCXPlugins.Count - 1 do begin if SameText(anArchiveType, gWCXPlugins.Ext[i]) and (gWCXPlugins.Enabled[i]) and ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) <> PK_CAPS_HIDE) then begin ModuleFileName := GetCmdDirFromEnvVar(gWCXPlugins.FileName[I]); Result := TWcxArchiveFileSource.Create(anArchiveFileSource, anArchiveFileName, ModuleFileName, gWCXPlugins.Flags[I]); DCDebug('Found registered plugin ' + ModuleFileName + ' for archive ' + anArchiveFileName); break; end; end; end; class function TWcxArchiveFileSource.CreateByArchiveName( anArchiveFileSource: IFileSource; anArchiveFileName: String): IWcxArchiveFileSource; begin Result:= CreateByArchiveType(anArchiveFileSource, anArchiveFileName, ExtractOnlyFileExt(anArchiveFileName)); end; class function TWcxArchiveFileSource.CheckPluginByExt(anArchiveType: String): Boolean; var i: Integer; begin for i := 0 to gWCXPlugins.Count - 1 do begin if SameText(anArchiveType, gWCXPlugins.Ext[i]) and (gWCXPlugins.Enabled[i]) then Exit(True); end; Result := False; end; // ---------------------------------------------------------------------------- constructor TWcxArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginFileName: String; aWcxPluginCapabilities: PtrInt); begin inherited Create(anArchiveFileSource, anArchiveFileName); FModuleFileName := aWcxPluginFileName; FPluginCapabilities := aWcxPluginCapabilities; FArcFileList := TObjectList.Create(True); FWcxModule := gWCXPlugins.LoadModule(FModuleFileName); if not Assigned(FWcxModule) then raise EModuleNotLoadedException.Create('Cannot load WCX module ' + FModuleFileName); FOperationsClasses[fsoCopyIn] := TWcxArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWcxArchiveCopyOutOperation.GetOperationClass; SetCryptCallback; if mbFileExists(anArchiveFileName) then begin if not ReadArchive then raise Exception.Create(GetErrorMsg(FOpenResult)); end; CreateConnections; end; constructor TWcxArchiveFileSource.Create(anArchiveFileSource: IFileSource; anArchiveFileName: String; aWcxPluginModule: TWcxModule; aWcxPluginCapabilities: PtrInt; anArchiveHandle: TArcHandle); begin inherited Create(anArchiveFileSource, anArchiveFileName); FPluginCapabilities := aWcxPluginCapabilities; FArcFileList := TObjectList.Create(True); FWcxModule := aWcxPluginModule; FOperationsClasses[fsoCopyIn] := TWcxArchiveCopyInOperation.GetOperationClass; FOperationsClasses[fsoCopyOut] := TWcxArchiveCopyOutOperation.GetOperationClass; SetCryptCallback; if mbFileExists(anArchiveFileName) then begin if not ReadArchive(anArchiveHandle) then raise Exception.Create(GetErrorMsg(FOpenResult)); end; CreateConnections; end; destructor TWcxArchiveFileSource.Destroy; begin inherited Destroy; if Assigned(FArcFileList) then FreeAndNil(FArcFileList); end; class function TWcxArchiveFileSource.CreateFile(const APath: String; WcxHeader: TWCXHeader): TFile; begin Result := TFile.Create(APath); with Result do begin { FileCRC, CompressionMethod, Comment, } AttributesProperty := {TNtfsFileAttributesProperty or Unix?} TFileAttributesProperty.CreateOSAttributes(WcxHeader.FileAttr); if AttributesProperty.IsDirectory then begin SizeProperty := TFileSizeProperty.Create(0); CompressedSizeProperty := TFileCompressedSizeProperty.Create(0); end else begin SizeProperty := TFileSizeProperty.Create(WcxHeader.UnpSize); CompressedSizeProperty := TFileCompressedSizeProperty.Create(WcxHeader.PackSize); end; ModificationTimeProperty := TFileModificationDateTimeProperty.Create(0); try ModificationTime := WcxFileTimeToDateTime(WcxHeader); except on EConvertError do; end; // Set name after assigning Attributes property, because it is used to get extension. Name := ExtractFileName(WcxHeader.FileName); end; end; function TWcxArchiveFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoCopyOut, fsoTestArchive, fsoExecute, fsoCalcStatistics]; // by default with FWcxModule do begin if (((FPluginCapabilities and PK_CAPS_NEW) <> 0) or ((FPluginCapabilities and PK_CAPS_MODIFY) <> 0)) and (Assigned(PackFiles) or Assigned(PackFilesW)) then Result:= Result + [fsoCopyIn]; if ((FPluginCapabilities and PK_CAPS_DELETE) <> 0) and (Assigned(DeleteFiles) or Assigned(DeleteFilesW)) then Result:= Result + [fsoDelete]; end; end; function TWcxArchiveFileSource.GetProperties: TFileSourceProperties; begin Result := [fspUsesConnections, fspListFlatView]; end; function TWcxArchiveFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties; end; function TWcxArchiveFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; var I: Integer; Header: TWCXHeader; begin Result := False; if Length(NewDir) > 0 then begin if NewDir = GetRootDir() then Exit(True); NewDir := IncludeTrailingPathDelimiter(NewDir); // Search file list for a directory with name NewDir. for I := 0 to FArcFileList.Count - 1 do begin Header := TWCXHeader(FArcFileList.Items[I]); if FPS_ISDIR(Header.FileAttr) and (Length(Header.FileName) > 0) then begin if NewDir = IncludeTrailingPathDelimiter(GetRootDir() + Header.FileName) then Exit(True); end; end; end; end; procedure TWcxArchiveFileSource.SetCryptCallback; var iFlags: Integer; begin if not PasswordStore.HasMasterKey then iFlags:= 0 else iFlags:= PK_CRYPTOPT_MASTERPASS_SET; FWcxModule.WcxSetCryptCallback(0, iFlags, @CryptProcA, @CryptProcW); end; function TWcxArchiveFileSource.GetArcFileList: TObjectList; begin Result := FArcFileList; end; function TWcxArchiveFileSource.GetPluginCapabilities: PtrInt; begin Result := FPluginCapabilities; end; function TWcxArchiveFileSource.GetWcxModule: TWcxModule; begin Result := FWcxModule; end; function TWcxArchiveFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveListOperation.Create(TargetFileSource, TargetPath); end; function TWcxArchiveFileSource.CreateCopyInOperation( SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveCopyInOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWcxArchiveFileSource.CreateCopyOutOperation( TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result := TWcxArchiveCopyOutOperation.Create(SourceFileSource, TargetFileSource, SourceFiles, TargetPath); end; function TWcxArchiveFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveDeleteOperation.Create(TargetFileSource, FilesToDelete); end; function TWcxArchiveFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TWcxArchiveExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; function TWcxArchiveFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; var SourceFileSource: IFileSource; begin SourceFileSource := Self; Result:= TWcxArchiveTestArchiveOperation.Create(SourceFileSource, theSourceFiles); end; function TWcxArchiveFileSource.CreateCalcStatisticsOperation( var theFiles: TFiles): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TWcxArchiveCalcStatisticsOperation.Create(TargetFileSource, theFiles); end; function TWcxArchiveFileSource.ReadArchive(anArchiveHandle: TArcHandle): Boolean; procedure CollectDirs(Path: PAnsiChar; var DirsList: TStringHashList); var I : Integer; Dir : AnsiString; begin // Scan from the second char from the end, to the second char from the beginning. for I := strlen(Path) - 2 downto 1 do begin if Path[I] = PathDelim then begin SetString(Dir, Path, I); if DirsList.Find(Dir) = -1 then // Add directory and continue scanning for parent directories. DirsList.Add(Dir) else // This directory is already in the list and we assume // that all parent directories are too. Exit; end end; end; var ArcHandle : TArcHandle; Header: TWCXHeader; AllDirsList, ExistsDirList : TStringHashList; I : Integer; NameLength: Integer; begin Result:= False; if anArchiveHandle <> 0 then ArcHandle:= anArchiveHandle else begin if not mbFileAccess(ArchiveFileName, fmOpenRead) then begin FOpenResult := E_EREAD; Exit; end; DCDebug('Open Archive'); ArcHandle := WcxModule.OpenArchiveHandle(ArchiveFileName, PK_OM_LIST, FOpenResult); if ArcHandle = 0 then Exit; end; WcxModule.WcxSetChangeVolProc(ArcHandle, nil, nil {ChangeVolProc}); WcxModule.WcxSetProcessDataProc(ArcHandle, nil, nil {ProcessDataProc}); DCDebug('Get File List'); (*Get File List*) FArcFileList.Clear; ExistsDirList := TStringHashList.Create(True); AllDirsList := TStringHashList.Create(True); try while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do begin // Some plugins end directories with path delimiter. // And not set directory attribute. So delete path // delimiter if present and add directory attribute. NameLength := Length(Header.FileName); if (NameLength > 0) and (Header.FileName[NameLength] = PathDelim) then begin Delete(Header.FileName, NameLength, 1); Header.FileAttr := Header.FileAttr or faFolder; end; //********************************************************************** // Workaround for plugins that don't give a list of // folders or the list does not include all of the folders. if FPS_ISDIR(Header.FileAttr) then begin // Collect directories that the plugin supplies. if (ExistsDirList.Find(Header.FileName) < 0) then ExistsDirList.Add(Header.FileName); end; // Collect all directories. CollectDirs(PAnsiChar(Header.FileName), AllDirsList); //********************************************************************** FArcFileList.Add(Header); // get next file FOpenResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); // Check for errors if FOpenResult <> E_SUCCESS then Exit; end; // while (* if plugin does not give a list of folders *) for I := 0 to AllDirsList.Count - 1 do begin // Add only those directories that were not supplied by the plugin. if ExistsDirList.Find(AllDirsList.List[I]^.Key) < 0 then begin Header := TWCXHeader.Create; try Header.FileName := AllDirsList.List[I]^.Key; Header.ArcName := ArchiveFileName; Header.FileAttr := faFolder; {$IFDEF MSWINDOWS} WinToDosTime(mbFileAge(ArchiveFileName), Header.FileTime); {$ELSE} {$PUSH}{$R-} Header.FileTime := LongInt(mbFileAge(ArchiveFileName)); {$POP} {$ENDIF} FArcFileList.Add(Header); except FreeAndNil(Header); end; end; end; Result:= True; finally AllDirsList.Free; ExistsDirList.Free; WcxModule.CloseArchive(ArcHandle); end; end; procedure TWcxArchiveFileSource.AddToConnectionQueue(Operation: TFileSourceOperation); begin WcxOperationsQueueLock.Acquire; try if WcxOperationsQueue.IndexOf(Operation) < 0 then WcxOperationsQueue.Add(Operation); finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.RemoveFromConnectionQueue(Operation: TFileSourceOperation); begin WcxOperationsQueueLock.Acquire; try WcxOperationsQueue.Remove(Operation); finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.AddConnection(Connection: TFileSourceConnection); begin WcxConnectionsLock.Acquire; try if WcxConnections.IndexOf(Connection) < 0 then WcxConnections.Add(Connection); finally WcxConnectionsLock.Release; end; end; procedure TWcxArchiveFileSource.RemoveConnection(Connection: TFileSourceConnection); begin WcxConnectionsLock.Acquire; try WcxConnections.Remove(Connection); finally WcxConnectionsLock.Release; end; end; function TWcxArchiveFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin Result := nil; case Operation.ID of fsoCopyIn: Result := WcxConnections[connCopyIn] as TFileSourceConnection; fsoCopyOut: Result := WcxConnections[connCopyOut] as TFileSourceConnection; fsoDelete: Result := WcxConnections[connDelete] as TFileSourceConnection; fsoTestArchive: Result := WcxConnections[connTestArchive] as TFileSourceConnection; else begin Result := CreateConnection; if Assigned(Result) then AddConnection(Result); end; end; if Assigned(Result) then Result := TryAcquireConnection(Result, Operation); // No available connection - wait. if not Assigned(Result) then AddToConnectionQueue(Operation) else // Connection acquired. // The operation may have been waiting in the queue // for the connection, so remove it from the queue. RemoveFromConnectionQueue(Operation); end; procedure TWcxArchiveFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin RemoveFromConnectionQueue(Operation); end; function TWcxArchiveFileSource.CreateConnection: TFileSourceConnection; begin Result := TWcxArchiveFileSourceConnection.Create(FWcxModule); end; procedure TWcxArchiveFileSource.CreateConnections; begin WcxConnectionsLock.Acquire; try if WcxConnections.Count = 0 then begin // Reserve some connections (only once). WcxConnections.Add(CreateConnection); // connCopyIn WcxConnections.Add(CreateConnection); // connCopyOut WcxConnections.Add(CreateConnection); // connDelete WcxConnections.Add(CreateConnection); // connTestArchive end; finally WcxConnectionsLock.Release; end; end; function TWcxArchiveFileSource.FindConnectionByOperation(operation: TFileSourceOperation): TFileSourceConnection; var i: Integer; connection: TFileSourceConnection; begin Result := nil; WcxConnectionsLock.Acquire; try for i := 0 to WcxConnections.Count - 1 do begin connection := WcxConnections[i] as TFileSourceConnection; if connection.AssignedOperation = operation then Exit(connection); end; finally WcxConnectionsLock.Release; end; end; procedure TWcxArchiveFileSource.OperationFinished(Operation: TFileSourceOperation); var allowedIDs: TFileSourceOperationTypes = []; connection: TFileSourceConnection; begin ClearCurrentOperation(Operation); connection := FindConnectionByOperation(Operation); if Assigned(connection) then begin connection.Release; // unassign operation WcxConnectionsLock.Acquire; try // If there are operations waiting, take the first one and notify // that a connection is available. // Only check operation types for which there are reserved connections. if Operation.ID in [fsoCopyIn, fsoCopyOut, fsoDelete, fsoTestArchive] then begin Include(allowedIDs, Operation.ID); NotifyNextWaitingOperation(allowedIDs); end else begin WcxConnections.Remove(connection); end; finally WcxConnectionsLock.Release; end; end; end; procedure TWcxArchiveFileSource.NotifyNextWaitingOperation(allowedOps: TFileSourceOperationTypes); var i: Integer; operation: TFileSourceOperation; begin WcxOperationsQueueLock.Acquire; try for i := 0 to WcxOperationsQueue.Count - 1 do begin operation := WcxOperationsQueue.Items[i] as TFileSourceOperation; if (operation.State = fsosWaitingForConnection) and (operation.ID in allowedOps) then begin operation.ConnectionAvailableNotify; Exit; end; end; finally WcxOperationsQueueLock.Release; end; end; procedure TWcxArchiveFileSource.ClearCurrentOperation(Operation: TFileSourceOperation); begin case Operation.ID of fsoCopyIn: TWcxArchiveCopyInOperation.ClearCurrentOperation; fsoCopyOut: TWcxArchiveCopyOutOperation.ClearCurrentOperation; fsoDelete: TWcxArchiveDeleteOperation.ClearCurrentOperation; fsoTestArchive: TWcxArchiveTestArchiveOperation.ClearCurrentOperation; end; end; procedure TWcxArchiveFileSource.DoReload(const PathsToReload: TPathsArray); begin ReadArchive; end; { TWcxArchiveFileSourceConnection } constructor TWcxArchiveFileSourceConnection.Create(aWcxModule: TWCXModule); begin FWcxModule := aWcxModule; inherited Create; end; initialization WcxConnections := TObjectList.Create(True); // True = destroy objects when destroying list WcxConnectionsLock := TCriticalSection.Create; WcxOperationsQueue := TObjectList.Create(False); // False = don't destroy operations (only store references) WcxOperationsQueueLock := TCriticalSection.Create; finalization FreeAndNil(WcxConnections); FreeAndNil(WcxConnectionsLock); FreeAndNil(WcxOperationsQueue); FreeAndNil(WcxOperationsQueueLock); end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lrt����������������������0000644�0001750�0000144�00000000111�11747211345�027254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION=When file exists �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/uwcxarchivecopyoutoperation.pas��������������������������0000644�0001750�0000144�00000060050�12630374024�026375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWcxArchiveCopyOutOperation; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, StringHashList, WcxPlugin, uLog, uGlobs, uFileSourceCopyOperation, uFileSource, uFileSourceOperation, uFileSourceOperationOptions, uFileSourceOperationOptionsUI, uFile, uWcxModule, uWcxArchiveFileSource; type { TWcxArchiveCopyOutOperation } TWcxArchiveCopyOutOperation = class(TFileSourceCopyOutOperation) private FWcxArchiveFileSource: IWcxArchiveFileSource; FStatistics: TFileSourceCopyOperationStatistics; // local copy of statistics FCurrentFileSize: Int64; FRenamingFiles: Boolean; FRenameNameMask, FRenameExtMask: String; // Options. FExtractWithoutPath: Boolean; {en Creates neccessary paths before extracting files from archive. Also counts size of all files that will be extracted. @param(Files List of files/directories to extract (relative to archive root).) @param(FileMask Only directories containing files matching this mask will be created.) @param(sDestPath Destination path where the files will be extracted.) @param(CurrentArchiveDir Path inside the archive from where the files will be extracted.) @param(CreatedPaths This list will be filled with absolute paths to directories that were created, together with their attributes.)} procedure CreateDirsAndCountFiles(const theFiles: TFiles; FileMask: String; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); {en Sets attributes for directories. @param(Paths The list of absolute paths, which attributes are to be set. Each list item's data field must be a pointer to THeaderData, from where the attributes are retrieved.} function SetDirsAttributes(const Paths: TStringHashList): Boolean; function DoFileExists(Header: TWcxHeader; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; procedure ShowError(sMessage: String; logOptions: TLogOptions = []); procedure LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); protected procedure SetChangeVolProc(hArcData: TArcHandle); procedure SetProcessDataProc(hArcData: TArcHandle); public constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); override; destructor Destroy; override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; class procedure ClearCurrentOperation; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; class function GetOptionsUIClass: TFileSourceOperationOptionsUIClass; override; property ExtractWithoutPath: Boolean read FExtractWithoutPath write FExtractWithoutPath; end; implementation uses Forms, LazUTF8, uMasks, FileUtil, contnrs, DCOSUtils, DCStrUtils, uDCUtils, uFileSourceOperationUI, fWcxArchiveCopyOperationOptions, uFileSystemUtil, uFileProcs, uLng, DCDateTimeUtils, DCBasicTypes, uShowMsg, DCConvertEncoding; // ---------------------------------------------------------------------------- // WCX callbacks var // This global variable is used to store currently running operation // for plugins that not supports background operations (see GetBackgroundFlags) WcxCopyOutOperationG: TWcxArchiveCopyOutOperation = nil; threadvar // This thread variable is used to store currently running operation // for plugins that supports background operations (see GetBackgroundFlags) WcxCopyOutOperationT: TWcxArchiveCopyOutOperation; function ChangeVolProc(var ArcName : String; Mode: LongInt): LongInt; begin Result:= 1; case Mode of PK_VOL_ASK: begin // Use operation UI for this? if not ShowInputQuery('Double Commander', rsMsgSelLocNextVol, ArcName) then Result := 0; // Abort operation end; PK_VOL_NOTIFY: if log_arc_op in gLogOptions then LogWrite(rsMsgNextVolUnpack + #32 + ArcName); end; end; function ChangeVolProcA(ArcName : PAnsiChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= CeSysToUtf8(StrPas(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopy(ArcName, CeUtf8ToSys(sArcName), MAX_PATH); end; function ChangeVolProcW(ArcName : PWideChar; Mode: LongInt): LongInt; dcpcall; var sArcName: String; begin sArcName:= UTF16ToUTF8(UnicodeString(ArcName)); Result:= ChangeVolProc(sArcName, Mode); if Result <> 0 then StrPLCopyW(ArcName, UTF8Decode(sArcName), MAX_PATH); end; function ProcessDataProc(WcxCopyOutOperation: TWcxArchiveCopyOutOperation; FileName: String; Size: LongInt): LongInt; begin //DCDebug('Working (' + IntToStr(GetCurrentThreadId) + ') ' + FileName + ' Size = ' + IntToStr(Size)); Result := 1; if Assigned(WcxCopyOutOperation) then begin if WcxCopyOutOperation.State = fsosStopping then // Cancel operation Exit(0); with WcxCopyOutOperation.FStatistics do begin // Get the number of bytes processed since the previous call if Size > 0 then begin CurrentFileDoneBytes := CurrentFileDoneBytes + Size; if CurrentFileDoneBytes > CurrentFileTotalBytes then CurrentFileDoneBytes := CurrentFileTotalBytes; DoneBytes := DoneBytes + Size; end // Get progress percent value to directly set progress bar else if Size < 0 then begin CurrentFileFrom:= FileName; // Total operation percent if (Size >= -100) and (Size <= -1) then begin DoneBytes := TotalBytes * Int64(-Size) div 100; end // Current file percent else if (Size >= -1100) and (Size <= -1000) then begin CurrentFileTotalBytes := 100; CurrentFileDoneBytes := Int64(-Size) - 1000; end; end; //DCDebug('CurrentDone = ' + IntToStr(CurrentFileDoneBytes) + ' Done = ' + IntToStr(DoneBytes)); //DCDebug('CurrentTotal = ' + IntToStr(CurrentFileTotalBytes) + ' Total = ' + IntToStr(TotalBytes)); WcxCopyOutOperation.UpdateStatistics(WcxCopyOutOperation.FStatistics); WcxCopyOutOperation.CheckOperationState; end; end; end; function ProcessDataProcAG(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationG, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWG(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationG, UTF16ToUTF8(UnicodeString(FileName)), Size); end; function ProcessDataProcAT(FileName: PAnsiChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationT, CeSysToUtf8(StrPas(FileName)), Size); end; function ProcessDataProcWT(FileName: PWideChar; Size: LongInt): LongInt; dcpcall; begin Result:= ProcessDataProc(WcxCopyOutOperationT, UTF16ToUTF8(UnicodeString(FileName)), Size); end; // ---------------------------------------------------------------------------- constructor TWcxArchiveCopyOutOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin FWcxArchiveFileSource := aSourceFileSource as IWcxArchiveFileSource; FFileExistsOption := fsoofeNone; FExtractWithoutPath := False; inherited Create(aSourceFileSource, aTargetFileSource, theSourceFiles, aTargetPath); FNeedsConnection:= (FWcxArchiveFileSource.WcxModule.BackgroundFlags and BACKGROUND_UNPACK = 0); end; destructor TWcxArchiveCopyOutOperation.Destroy; begin ClearCurrentOperation; inherited Destroy; end; procedure TWcxArchiveCopyOutOperation.Initialize; begin // Is plugin allow multiple Operations? if FNeedsConnection then WcxCopyOutOperationG := Self else WcxCopyOutOperationT := Self; // Extract without path from flat view if not FExtractWithoutPath then begin FExtractWithoutPath := SourceFiles.Flat; end; // Check rename mask FRenamingFiles := (RenameMask <> '*.*') and (RenameMask <> ''); if FRenamingFiles then SplitFileMask(RenameMask, FRenameNameMask, FRenameExtMask); // Get initialized statistics; then we change only what is needed. FStatistics := RetrieveStatistics; end; procedure TWcxArchiveCopyOutOperation.MainExecute; var ArcHandle: TArcHandle; Header: TWCXHeader; TargetFileName: String; FileMask: String; CreatedPaths: TStringHashList; OpenResult: Longint; iResult: Integer; Files: TFiles = nil; WcxModule: TWcxModule; begin WcxModule := FWcxArchiveFileSource.WcxModule; ArcHandle := WcxModule.OpenArchiveHandle(FWcxArchiveFileSource.ArchiveFileName, PK_OM_EXTRACT, OpenResult); if ArcHandle = 0 then begin AskQuestion(uWcxModule.GetErrorMsg(OpenResult), '', [fsourOk], fsourOk, fsourOk); RaiseAbortOperation; end; FileMask := ExtractFileName(TargetPath); if FileMask = '' then FileMask := '*'; // extract all selected files/folders // Convert file list so that filenames are relative to archive root. Files := SourceFiles.Clone; ChangeFileListRoot(PathDelim, Files); CreatedPaths := TStringHashList.Create(True); try // Count total files size and create needed directories. CreateDirsAndCountFiles(Files, FileMask, TargetPath, Files.Path, CreatedPaths); SetChangeVolProc(ArcHandle); SetProcessDataProc(ArcHandle); while (WcxModule.ReadWCXHeader(ArcHandle, Header) = E_SUCCESS) do try CheckOperationState; // Now check if the file is to be extracted. if (not FPS_ISDIR(Header.FileAttr)) // Omit directories (we handle them ourselves). and MatchesFileList(Files, Header.FileName) // Check if it's included in the filelist and ((FileMask = '*.*') or (FileMask = '*') // And name matches file mask or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin if FExtractWithoutPath then TargetFileName := TargetPath + ExtractFileName(Header.FileName) else TargetFileName := TargetPath + ExtractDirLevel(Files.Path, Header.FileName); if FRenamingFiles then begin TargetFileName := ExtractFilePath(TargetFileName) + ApplyRenameMask(ExtractFileName(TargetFileName), FRenameNameMask, FRenameExtMask); end; with FStatistics do begin CurrentFileFrom := Header.FileName; CurrentFileTo := TargetFileName; CurrentFileTotalBytes := Header.UnpSize; CurrentFileDoneBytes := 0; UpdateStatistics(FStatistics); FCurrentFileSize := Header.UnpSize; end; if (DoFileExists(Header, TargetFileName) = fsoofeOverwrite) then iResult := WcxModule.WcxProcessFile(ArcHandle, PK_EXTRACT, EmptyStr, TargetFileName) else iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' -> ' + TargetFileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); // User aborted operation. if iResult = E_EABORTED then Break; end // Error else begin LogMessage(Format(rsMsgLogSuccess + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName +' -> ' + TargetFileName]), [log_arc_op], lmtSuccess); end; // Success end // Extract else // Skip begin iResult := WcxModule.WcxProcessFile(ArcHandle, PK_SKIP, EmptyStr, EmptyStr); //Check for errors if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + PathDelim + Header.FileName + ' -> ' + TargetFileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); end; end; // Skip finally FreeAndNil(Header); end; iResult := WcxModule.CloseArchive(ArcHandle); // Check for errors if iResult <> E_SUCCESS then begin ShowError(Format(rsMsgLogError + rsMsgLogExtract, [FWcxArchiveFileSource.ArchiveFileName + ' - ' + GetErrorMsg(iResult)]), [log_arc_op]); end; if (FExtractWithoutPath = False) then SetDirsAttributes(CreatedPaths); finally if Assigned(Files) then FreeAndNil(Files); FreeAndNil(CreatedPaths); end; end; procedure TWcxArchiveCopyOutOperation.Finalize; begin ClearCurrentOperation; end; function TWcxArchiveCopyOutOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperExtractingFromTo, [FWcxArchiveFileSource.ArchiveFileName, TargetPath]); else Result := rsOperExtracting; end; end; procedure TWcxArchiveCopyOutOperation.CreateDirsAndCountFiles( const theFiles: TFiles; FileMask: String; sDestPath: String; CurrentArchiveDir: String; var CreatedPaths: TStringHashList); var // List of paths that we know must be created. PathsToCreate: TStringHashList; // List of possible directories to create with their attributes. // This hash list is created to speed up searches for attributes in archive file list. DirsAttributes: TStringHashList; i: Integer; CurrentFileName: String; Header: TWCXHeader; Directories: TStringList = nil; PathIndex: Integer; ListIndex: Integer; TargetDir: String; FileList: TObjectList; begin FileList := FWcxArchiveFileSource.ArchiveFileList; { First, collect all the paths that need to be created and their attributes. } PathsToCreate := TStringHashList.Create(True); DirsAttributes := TStringHashList.Create(True); for i := 0 to FileList.Count - 1 do begin Header := TWCXHeader(FileList.Items[i]); // Check if the file from the archive fits the selection given via SourceFiles. if not MatchesFileList(theFiles, Header.FileName) then Continue; if FPS_ISDIR(Header.FileAttr) then begin CurrentFileName := ExtractDirLevel(CurrentArchiveDir, Header.FileName); // Save this directory and a pointer to its entry. DirsAttributes.Add(CurrentFileName, Header); // If extracting all files and directories, add this directory // to PathsToCreate so that empty directories are also created. if (FileMask = '*.*') or (FileMask = '*') then begin // Paths in PathsToCreate list must end with path delimiter. CurrentFileName := IncludeTrailingPathDelimiter(CurrentFileName); if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end else begin if ((FileMask = '*.*') or (FileMask = '*') or MatchesMaskList(ExtractFileName(Header.FileName), FileMask)) then begin Inc(FStatistics.TotalBytes, Header.UnpSize); Inc(FStatistics.TotalFiles, 1); CurrentFileName := ExtractDirLevel(CurrentArchiveDir, ExtractFilePath(Header.FileName)); // If CurrentFileName is empty now then it was a file in current archive // directory, therefore we don't have to create any paths for it. if Length(CurrentFileName) > 0 then if PathsToCreate.Find(CurrentFileName) < 0 then PathsToCreate.Add(CurrentFileName); end; end; end; if FExtractWithoutPath then Exit; { Second, create paths and save which paths were created and their attributes. } Directories := TStringList.Create; try sDestPath := IncludeTrailingPathDelimiter(sDestPath); // Create path to destination directory (we don't have attributes for that). mbForceDirectory(sDestPath); CreatedPaths.Clear; for PathIndex := 0 to PathsToCreate.Count - 1 do begin Directories.Clear; // Create also all parent directories of the path to create. // This adds directories to list in order from the outer to inner ones, // for example: dir, dir/dir2, dir/dir2/dir3. if GetDirs(PathsToCreate.List[PathIndex]^.Key, Directories) <> -1 then try for i := 0 to Directories.Count - 1 do begin TargetDir := sDestPath + Directories.Strings[i]; if (CreatedPaths.Find(TargetDir) = -1) and (not DirPathExists(TargetDir)) then begin if mbForceDirectory(TargetDir) = False then begin // Error, cannot create directory. Break; // Don't try to create subdirectories. end else begin // Retrieve attributes for this directory, if they are stored. ListIndex := DirsAttributes.Find(Directories.Strings[i]); if ListIndex <> -1 then Header := TWcxHeader(DirsAttributes.List[ListIndex]^.Data) else Header := nil; CreatedPaths.Add(TargetDir, Header); end; end; end; except end; end; finally FreeAndNil(PathsToCreate); FreeAndNil(DirsAttributes); FreeAndNil(Directories); end; end; function TWcxArchiveCopyOutOperation.SetDirsAttributes(const Paths: TStringHashList): Boolean; var PathIndex: Integer; TargetDir: String; Header: TWCXHeader; Time: TFileTime; begin Result := True; for PathIndex := 0 to Paths.Count - 1 do begin // Get attributes. Header := TWCXHeader(Paths.List[PathIndex]^.Data); if Assigned(Header) then begin TargetDir := Paths.List[PathIndex]^.Key; try {$IF DEFINED(MSWINDOWS)} // Restore attributes, e.g., hidden, read-only. // On Unix attributes value would have to be translated somehow. mbFileSetAttr(TargetDir, Header.FileAttr); DosToWinTime(TDosFileTime(Header.FileTime), Time); {$ELSE} {$PUSH}{$R-} Time := Header.FileTime; {$POP} {$ENDIF} // Set creation, modification time mbFileSetTime(TargetDir, Time, Time, Time); except Result := False; end; end; end; end; function TWcxArchiveCopyOutOperation.DoFileExists(Header: TWcxHeader; var AbsoluteTargetFileName: String): TFileSourceOperationOptionFileExists; const PossibleResponses: array[0..9] of TFileSourceOperationUIResponse = (fsourOverwrite, fsourSkip, fsourOverwriteLarger, fsourOverwriteAll, fsourSkipAll, fsourOverwriteSmaller, fsourOverwriteOlder, fsourCancel, fsourRenameSource, fsourAutoRenameSource); var Answer: Boolean; Message: String; function OverwriteOlder: TFileSourceOperationOptionFileExists; begin if WcxFileTimeToDateTime(Header) > FileTimeToDateTime(mbFileAge(AbsoluteTargetFileName)) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteSmaller: TFileSourceOperationOptionFileExists; begin if Header.UnpSize > mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; function OverwriteLarger: TFileSourceOperationOptionFileExists; begin if Header.UnpSize < mbFileSize(AbsoluteTargetFileName) then Result := fsoofeOverwrite else Result := fsoofeSkip; end; begin if not mbFileExists(AbsoluteTargetFileName) then Result:= fsoofeOverwrite else case FFileExistsOption of fsoofeNone: repeat Answer := True; Message:= FileExistsMessage(AbsoluteTargetFileName, Header.FileName, Header.UnpSize, WcxFileTimeToDateTime(Header)); case AskQuestion(Message, '', PossibleResponses, fsourOverwrite, fsourSkip) of fsourOverwrite: Result := fsoofeOverwrite; fsourSkip: Result := fsoofeSkip; fsourOverwriteAll: begin FFileExistsOption := fsoofeOverwrite; Result := fsoofeOverwrite; end; fsourSkipAll: begin FFileExistsOption := fsoofeSkip; Result := fsoofeSkip; end; fsourOverwriteOlder: begin FFileExistsOption := fsoofeOverwriteOlder; Result:= OverwriteOlder; end; fsourOverwriteSmaller: begin FFileExistsOption := fsoofeOverwriteSmaller; Result:= OverwriteSmaller; end; fsourOverwriteLarger: begin FFileExistsOption := fsoofeOverwriteLarger; Result:= OverwriteLarger; end; fsourAutoRenameSource: begin Result:= fsoofeOverwrite; FFileExistsOption:= fsoofeAutoRenameSource; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName); end; fsourRenameSource: begin Message:= ExtractFileName(AbsoluteTargetFileName); Answer:= ShowInputQuery(Thread, Application.Title, rsEditNewFileName, Message); if Answer then begin Result:= fsoofeOverwrite; AbsoluteTargetFileName:= ExtractFilePath(AbsoluteTargetFileName) + Message; end; end; fsourNone, fsourCancel: RaiseAbortOperation; end; until Answer; fsoofeOverwriteOlder: begin Result:= OverwriteOlder; end; fsoofeOverwriteSmaller: begin Result:= OverwriteSmaller; end; fsoofeOverwriteLarger: begin Result:= OverwriteLarger; end; fsoofeAutoRenameSource: begin Result:= fsoofeOverwrite; AbsoluteTargetFileName:= GetNextCopyName(AbsoluteTargetFileName); end; else begin Result := FFileExistsOption; end; end; end; procedure TWcxArchiveCopyOutOperation.ShowError(sMessage: String; logOptions: TLogOptions); begin if not gSkipFileOpError then begin if AskQuestion(sMessage, '', [fsourSkip, fsourAbort], fsourSkip, fsourAbort) = fsourAbort then begin RaiseAbortOperation; end; end else begin LogMessage(sMessage, logOptions, lmtError); end; end; procedure TWcxArchiveCopyOutOperation.LogMessage(sMessage: String; logOptions: TLogOptions; logMsgType: TLogMsgType); begin case logMsgType of lmtError: if not (log_errors in gLogOptions) then Exit; lmtInfo: if not (log_info in gLogOptions) then Exit; lmtSuccess: if not (log_success in gLogOptions) then Exit; end; if logOptions <= gLogOptions then begin logWrite(Thread, sMessage, logMsgType); end; end; procedure TWcxArchiveCopyOutOperation.SetChangeVolProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do WcxSetChangeVolProc(hArcData, @ChangeVolProcA, @ChangeVolProcW); end; procedure TWcxArchiveCopyOutOperation.SetProcessDataProc(hArcData: TArcHandle); begin with FWcxArchiveFileSource.WcxModule do begin if FNeedsConnection then WcxSetProcessDataProc(hArcData, @ProcessDataProcAG, @ProcessDataProcWG) else WcxSetProcessDataProc(hArcData, @ProcessDataProcAT, @ProcessDataProcWT); end; end; class procedure TWcxArchiveCopyOutOperation.ClearCurrentOperation; begin WcxCopyOutOperationG := nil; end; class function TWcxArchiveCopyOutOperation.GetOptionsUIClass: TFileSourceOperationOptionsUIClass; begin Result:= TWcxArchiveCopyOperationOptionsUI; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/wcxarchive/fwcxarchivecopyoperationoptions.lfm����������������������0000644�0001750�0000144�00000001670�11747211345�027244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited WcxArchiveCopyOperationOptionsUI: TWcxArchiveCopyOperationOptionsUI Height = 158 Width = 549 AutoSize = True BorderSpacing.Around = 6 ClientHeight = 158 ClientWidth = 549 TabOrder = 0 DesignLeft = 535 DesignTop = 391 object lblFileExists: TLabel[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbFileExists AnchorSideTop.Side = asrCenter Left = 6 Height = 14 Top = 3 Width = 77 BorderSpacing.Around = 6 Caption = 'When file exists' FocusControl = cmbFileExists ParentColor = False end object cmbFileExists: TComboBox[1] AnchorSideLeft.Control = lblFileExists AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner Left = 91 Height = 21 Top = 0 Width = 109 BorderSpacing.Left = 8 ItemHeight = 13 Items.Strings = ( 'Ask' 'Overwrite' 'Skip' ) Style = csDropDownList TabOrder = 0 end end ������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ulocalfilesource.pas������������������������������������������������0000644�0001750�0000144�00000000624�11747211345�021703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uLocalFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uRealFileSource; type ILocalFileSource = interface(IRealFileSource) end; {en Base for classes of local file sources. Empty placeholder for now, allows to check whether a certain file source is local. } TLocalFileSource = class(TRealFileSource, ILocalFileSource) end; implementation end. ������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcesetfilepropertyoperation.pas�����������������������������0000644�0001750�0000144�00000026624�12612505011�025766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceSetFilePropertyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, DCBasicTypes, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileProperty; type TSetFilePropertyResult = (sfprSuccess, sfprError, sfprSkipped); TFileSourceSetFilePropertyOperationStatistics = record CurrentFile: String; TotalFiles: Int64; DoneFiles: Int64; FilesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that can set any of the file properties supported by a file source. It doesn't have to support all the file properties supported by the file source, it can be a subset. There are two methods of setting properties available: - NewProperties Set via constructor, this is a list of properties that should be set for each file. If a property in this list is not assigned it is not set. If a property in this list is not supported by the file source or by this operation it is also not set. - TemplateFiles Set by calling SetTemplateFiles. Template files describe 1 to 1 correspondence between files and their new properties. Each i-th file in the TargetFiles list will be assigned properties based on propertes of i-th template file. Template files need not be of the same type as target files, it is enough for them to have properties supported by the target files. If template file is not used for i-th file, then the i-th member of the list should be set to @nil, but should be present to maintain the correct correspondence between target and template files. In other words number of target files must be the same as number of template files. The two above methods can be used together. Template files, if present, always take precedence over NewProperties. If a template file is not present (= @nil), then theNewProperties are used as a template. Template files usually will not be used when Recursive is @true, although this behaviour is dependent on the concrete descendant operations. If template files list is @nil, to indicate that the template files are not used, then only the NewProperties are used.) } { TFileSourceSetFilePropertyOperation } TFileSourceSetFilePropertyOperation = class(TFileSourceOperation) private FStatistics: TFileSourceSetFilePropertyOperationStatistics; FStatisticsAtStartTime: TFileSourceSetFilePropertyOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FTargetFiles: TFiles; FTemplateFiles: TFiles; FNewProperties: TFileProperties; FRecursive: Boolean; FSkipErrors: Boolean; protected FSupportedProperties: TFilePropertiesTypes; function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceSetFilePropertyOperationStatistics); procedure UpdateStatisticsAtStartTime; override; procedure SetProperties(aFile: TFile; aTemplateFile: TFile); function SetNewProperty(aFile: TFile; aTemplateProperty: TFileProperty): TSetFilePropertyResult; virtual abstract; function GetErrorString(aFile: TFile; aProperty: TFileProperty): String; property FileSource: IFileSource read FFileSource; public IncludeAttributes: TFileAttrs; ExcludeAttributes: TFileAttrs; public {en @param(aTargetFileSource File source on which the operation will be executed.) @param(theTargetFiles List of files which properties should be changed.) @param(theNewProperties Describes the set of properties that should be set for each file of theTargetFiles. All elements of this parameter will be freed automatically.) } constructor Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); virtual reintroduce; destructor Destroy; override; procedure SetTemplateFiles(var theTemplateFiles: TFiles); function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceSetFilePropertyOperationStatistics; property TargetFiles: TFiles read FTargetFiles; property NewProperties: TFileProperties read FNewProperties write FNewProperties; property TemplateFiles: TFiles read FTemplateFiles; // set by SetTemplateFiles because can't use "var" in properties property Recursive: Boolean read FRecursive write FRecursive; property SupportedProperties: TFilePropertiesTypes read FSupportedProperties; property SkipErrors: Boolean read FSkipErrors write FSkipErrors; end; implementation uses uDCUtils, uGlobs, uLog, uLng, uFileSourceOperationUI; constructor TFileSourceSetFilePropertyOperation.Create(aTargetFileSource: IFileSource; var theTargetFiles: TFiles; var theNewProperties: TFileProperties); begin with FStatistics do begin CurrentFile := ''; TotalFiles := 0; DoneFiles := 0; FilesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; aTargetFileSource := nil; FTargetFiles := theTargetFiles; theTargetFiles := nil; FNewProperties := theNewProperties; FillByte(theNewProperties, SizeOf(theNewProperties), 0); FTemplateFiles := nil; FRecursive := False; FSkipErrors := gSkipFileOpError; FSupportedProperties := []; end; destructor TFileSourceSetFilePropertyOperation.Destroy; var prop: TFilePropertyType; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FTargetFiles) then FreeAndNil(FTargetFiles); if Assigned(FTemplateFiles) then FreeAndNil(FTemplateFiles); for prop := Low(TFilePropertiesTypes) to High(TFilePropertiesTypes) do if Assigned(FNewProperties[prop]) then FreeAndNil(FNewProperties[prop]); end; function TFileSourceSetFilePropertyOperation.GetID: TFileSourceOperationType; begin Result := fsoSetFileProperty; end; procedure TFileSourceSetFilePropertyOperation.DoReloadFileSources; begin FFileSource.Reload(FTargetFiles.Path); end; function TFileSourceSetFilePropertyOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if TargetFiles.Count = 1 then Result := Format(rsOperSettingPropertyOf, [TargetFiles[0].FullPath]) else Result := Format(rsOperSettingPropertyIn, [TargetFiles.Path]); end; else Result := rsOperSettingProperty; end; end; procedure TFileSourceSetFilePropertyOperation.UpdateStatistics(var NewStatistics: TFileSourceSetFilePropertyOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneFiles <> NewStatistics.DoneFiles then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneFiles, DoneFiles, TotalFiles, StartTime, SysUtils.Now, FilesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneFiles/TotalFiles); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceSetFilePropertyOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSetFilePropertyOperation.RetrieveStatistics: TFileSourceSetFilePropertyOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceSetFilePropertyOperation.SetTemplateFiles(var theTemplateFiles: TFiles); begin if Assigned(FTemplateFiles) then FreeAndNil(FTemplateFiles); FTemplateFiles := theTemplateFiles; theTemplateFiles := nil; end; procedure TFileSourceSetFilePropertyOperation.SetProperties(aFile: TFile; aTemplateFile: TFile); var FileAttrs: TFileAttrs; prop: TFilePropertyType; templateProperty: TFileProperty; bRetry: Boolean; sMessage, sQuestion: String; SetResult: TSetFilePropertyResult; ErrorString: String; begin // Iterate over all properties supported by this operation. for prop := Low(SupportedProperties) to High(SupportedProperties) do begin repeat bRetry := False; SetResult := sfprSuccess; // Double-check that the property really is supported by the file. if prop in aFile.SupportedProperties then begin // Get template property from template file (if exists) or NewProperties. if Assigned(aTemplateFile) then templateProperty := aTemplateFile.Properties[prop] else templateProperty := NewProperties[prop]; // Check if there is a new property to be set. if Assigned(templateProperty) then begin // Special case for attributes property if templateProperty is TFileAttributesProperty then begin if (IncludeAttributes <> 0) or (ExcludeAttributes <> 0) then begin FileAttrs:= aFile.Attributes; FileAttrs:= FileAttrs or IncludeAttributes; FileAttrs:= FileAttrs and not ExcludeAttributes; TFileAttributesProperty(templateProperty).Value:= FileAttrs; end; end; SetResult := SetNewProperty(aFile, templateProperty); end; end; if SetResult = sfprError then begin ErrorString := GetErrorString(aFile, templateProperty); sMessage := rsMsgLogError + ErrorString; sQuestion := ErrorString; if FSkipErrors then logWrite(Thread, sMessage, lmtError) else begin case AskQuestion(sQuestion, '', [fsourRetry, fsourSkip, fsourSkipAll, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetry := True; fsourSkipAll: FSkipErrors := True; fsourAbort: RaiseAbortOperation; end; end; end; until bRetry = False; end; end; function TFileSourceSetFilePropertyOperation.GetErrorString(aFile: TFile; aProperty: TFileProperty): String; begin case aProperty.GetID of fpName: Result := Format(rsMsgErrRename, [aFile.FullPath, (aProperty as TFileNameProperty).Value]); fpAttributes: Result := Format(rsMsgErrSetAttribute, [aFile.FullPath]); fpModificationTime, fpCreationTime, fpLastAccessTime: Result := Format(rsMsgErrSetDateTime, [aFile.FullPath]); else Result := rsMsgLogError; end; end; end. ������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/vfs/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�016450� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/vfs/uvfsexecuteoperation.pas����������������������������������������0000644�0001750�0000144�00000004140�12612505011�023411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVfsExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceExecuteOperation, uVfsFileSource; type { TVfsExecuteOperation } TVfsExecuteOperation = class(TFileSourceExecuteOperation) private FVfsFileSource: IVfsFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure Initialize; override; procedure MainExecute; override; procedure Finalize; override; end; implementation uses uWfxModule, uDCUtils; constructor TVfsExecuteOperation.Create( aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FVfsFileSource := aTargetFileSource as IVfsFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TVfsExecuteOperation.Initialize; begin end; procedure TVfsExecuteOperation.MainExecute; var sFileName: String; WfxModule: TWfxModule = nil; begin FExecuteOperationResult:= fseorSuccess; if SameText(Verb, 'properties') then with FVfsFileSource do begin sFileName:= VfsFileList.Values[RelativePath]; if sFileName <> EmptyStr then try sFileName:= GetCmdDirFromEnvVar(sFileName); WfxModule:= TWfxModule.Create; if WfxModule.LoadModule(sFileName) then begin WfxModule.VFSInit(0); WfxModule.VFSConfigure(0); WfxModule.UnloadModule; end; finally if Assigned(WfxModule) then FreeAndNil(WfxModule); end; end; end; procedure TVfsExecuteOperation.Finalize; begin end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/vfs/uvfsfilesource.pas����������������������������������������������0000644�0001750�0000144�00000006016�11747211345�022206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVfsFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uWFXModule, uFileSourceProperty, uFileSourceOperationTypes, uVirtualFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile; type IVfsFileSource = interface(IVirtualFileSource) ['{87D0A3EF-C168-44C1-8B10-3AEC0753846A}'] function GetWfxModuleList: TWFXModuleList; property VfsFileList: TWFXModuleList read GetWfxModuleList; end; { TVfsFileSource } TVfsFileSource = class(TVirtualFileSource, IVfsFileSource) private FWFXModuleList: TWFXModuleList; function GetWfxModuleList: TWFXModuleList; protected function GetSupportedFileProperties: TFilePropertiesTypes; override; public constructor Create(aWFXModuleList: TWFXModuleList); reintroduce; destructor Destroy; override; class function CreateFile(const APath: String): TFile; override; // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; property VfsFileList: TWFXModuleList read FWFXModuleList; end; implementation uses LCLProc, uVfsListOperation, uVfsExecuteOperation; constructor TVfsFileSource.Create(aWFXModuleList: TWFXModuleList); begin inherited Create; FWFXModuleList:= TWFXModuleList.Create; FWFXModuleList.Assign(aWFXModuleList); end; destructor TVfsFileSource.Destroy; begin FreeThenNil(FWFXModuleList); inherited Destroy; end; class function TVfsFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); with Result do begin AttributesProperty := TFileAttributesProperty.CreateOSAttributes; end; end; function TVfsFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := [fsoList, fsoExecute]; end; function TVfsFileSource.GetProperties: TFileSourceProperties; begin Result := [fspVirtual]; end; function TVfsFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := inherited GetSupportedFileProperties + [fpAttributes]; end; function TVfsFileSource.GetWfxModuleList: TWFXModuleList; begin Result := FWFXModuleList; end; function TVfsFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result := TVfsListOperation.Create(TargetFileSource, TargetPath); end; function TVfsFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; Result:= TVfsExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/vfs/uvfslistoperation.pas�������������������������������������������0000644�0001750�0000144�00000002771�12244341322�022736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVfsListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uVfsFileSource, uFileSource; type TVfsListOperation = class(TFileSourceListOperation) private FVfsFileSource: IVfsFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LCLProc, uFile, uVfsModule; constructor TVfsListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FVfsFileSource := aFileSource as IVfsFileSource; inherited Create(aFileSource, aPath); end; procedure TVfsListOperation.MainExecute; var I : Integer; aFile: TFile; begin FFiles.Clear; with FVfsFileSource do for I := 0 to VfsFileList.Count - 1 do begin CheckOperationState; if VfsFileList.Enabled[I] then begin aFile := TVfsFileSource.CreateFile(Path); aFile.Name:= VfsFileList.Name[I]; //aFile.ModificationTime:= FileDateToDateTime(mbFileAge(VfsFileList.FileName[I])); FFiles.Add(aFile); end; end; for I:= 0 to gVfsModuleList.Count - 1 do begin CheckOperationState; if TVfsModule(gVfsModuleList.Objects[I]).Visible then begin aFile := TVfsFileSource.CreateFile(Path); aFile.Name:= gVfsModuleList.Strings[I]; //aFile.ModificationTime:= FileDateToDateTime(mbFileAge(VfsFileList.FileName[I])); FFiles.Add(aFile); end; end; end; end. �������doublecmd-0.7.1/src/filesources/searchresult/�������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�020356� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/searchresult/usearchresultfilesource.pas����������������������������0000644�0001750�0000144�00000003675�12361545707�026037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSearchResultFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uMultiListFileSource, uFileSourceOperation, uFileSourceProperty; type ISearchResultFileSource = interface(IMultiListFileSource) ['{5076D4C2-3AB8-4029-9318-0AF115F7FDDD}'] end; {en File source for search results. } { TSearchResultFileSource } TSearchResultFileSource = class(TMultiListFileSource, ISearchResultFileSource) public function GetRootDir(sPath : String): String; override; function GetProperties: TFileSourceProperties; override; function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; class function CreateFile(const APath: String): TFile; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function GetLocalName(var aFile: TFile): Boolean; override; end; implementation uses uFileSystemFileSource, uSearchResultListOperation, uLng; function TSearchResultFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim + PathDelim + PathDelim + rsSearchResult + PathDelim; end; function TSearchResultFileSource.GetProperties: TFileSourceProperties; begin Result := inherited GetProperties + [fspLinksToLocalFiles]; end; function TSearchResultFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin // Only Root dir allowed (for flat mode). Result := IsPathAtRoot(NewDir); end; class function TSearchResultFileSource.CreateFile(const APath: String): TFile; begin Result:= TFileSystemFileSource.CreateFile(APath); end; function TSearchResultFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TSearchResultListOperation.Create(Self, TargetPath); end; function TSearchResultFileSource.GetLocalName(var aFile: TFile): Boolean; begin if (fspLinksToLocalFiles in FileSource.Properties) then Result:= FileSource.GetLocalName(aFile) else Result:= True; end; end. �������������������������������������������������������������������doublecmd-0.7.1/src/filesources/searchresult/usearchresultlistoperation.pas�������������������������0000644�0001750�0000144�00000002306�11753503774�026563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSearchResultListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uSearchResultFileSource; type TSearchResultListOperation = class(TFileSourceListOperation) private FFileSource: ISearchResultFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses uFile; constructor TSearchResultListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as ISearchResultFileSource; inherited Create(aFileSource, aPath); end; procedure TSearchResultListOperation.MainExecute; procedure AddNode(aNode: TFileTreeNode); var i: Integer; begin if Assigned(aNode) then begin for i := 0 to aNode.SubNodesCount - 1 do begin CheckOperationState; FFiles.Add(aNode.SubNodes[i].TheFile.Clone); AddNode(aNode.SubNodes[i]); end; end; end; begin FFiles.Clear; // For now "flat mode" always enabled (add all files from the tree). if FileSource.IsPathAtRoot(Path) then AddNode(FFileSource.FileList); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcelistoperation.pas����������������������������������������0000644�0001750�0000144�00000004070�12317307414�023501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uFileSourceOperationTypes, uFile, uFileSource; type { TFileSourceListOperation } TFileSourceListOperation = class(TFileSourceOperation) private FFileSource: IFileSource; FPath: String; protected FFiles: TFiles; FFlatView: Boolean; function GetFiles: TFiles; function GetID: TFileSourceOperationType; override; procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; // Retrieves files and revokes ownership of TFiles list. // The result of this function should be freed by the caller. function ReleaseFiles: TFiles; property Files: TFiles read GetFiles; property Path: String read FPath; property FlatView: Boolean write FFlatView; end; implementation uses uLng; constructor TFileSourceListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFileSource := aFileSource; FPath := aPath; inherited Create(FFileSource); end; destructor TFileSourceListOperation.Destroy; begin inherited Destroy; if Assigned(FFiles) then FreeAndNil(FFiles); end; function TFileSourceListOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperListingIn, [Path]); else Result := rsOperListing; end; end; function TFileSourceListOperation.GetID: TFileSourceOperationType; begin Result := fsoList; end; function TFileSourceListOperation.GetFiles: TFiles; begin Result := FFiles; end; function TFileSourceListOperation.ReleaseFiles: TFiles; begin Result := FFiles; FFiles := nil; // revoke ownership end; procedure TFileSourceListOperation.UpdateStatisticsAtStartTime; begin // Empty. end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/winnet/�������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�017156� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/winnet/uwinnetlistoperation.pas�������������������������������������0000644�0001750�0000144�00000012114�12630374024�024146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWinNetListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uWinNetFileSource, uFileSource; type { TWinNetListOperation } TWinNetListOperation = class(TFileSourceListOperation) private FWinNetFileSource: IWinNetFileSource; private procedure ShareEnum; procedure WorkgroupEnum; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses LazUTF8, uFile, Windows, JwaWinNetWk, JwaLmCons, JwaLmShare, JwaLmApiBuf, DCStrUtils, uShowMsg, DCOSUtils, uOSUtils; type PNetResourceArray = ^TNetResource; procedure TWinNetListOperation.WorkgroupEnum; var I: DWORD; aFile: TFile; nFile: TNetResourceW; nFileList: PNetResourceArray; dwResult: DWORD; dwCount, dwBufferSize: DWORD; hEnum: THandle = INVALID_HANDLE_VALUE; lpBuffer: Pointer = nil; FilePath: String; FileName: UnicodeString; begin with FWinNetFileSource do try FillChar(nFile, SizeOf(TNetResource), #0); nFile.dwScope:= RESOURCE_GLOBALNET; nFile.dwType:= RESOURCETYPE_ANY; nFile.lpProvider:= PWideChar(ProviderName); if not IsPathAtRoot(Path) then begin FilePath:= ExcludeTrailingPathDelimiter(Path); FileName:= UTF8Decode(ExcludeFrontPathDelimiter(FilePath)); nFile.lpRemoteName:= PWideChar(FileName); end; dwResult := WNetOpenEnumW(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, @nFile, hEnum); if (dwResult <> NO_ERROR) then Exit; dwCount := DWORD(-1); // 512 Kb must be enough dwBufferSize:= $80000; // Allocate output buffer GetMem(lpBuffer, dwBufferSize); // Enumerate all resources dwResult:= WNetEnumResource(hEnum, dwCount, lpBuffer, dwBufferSize); if dwResult = ERROR_NO_MORE_ITEMS then Exit; if (dwResult <> NO_ERROR) then Exit; nFileList:= PNetResourceArray(lpBuffer); for I := 0 to dwCount - 1 do begin CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); aFile.FullPath:= UTF16ToUTF8(UnicodeString(nFileList^.lpRemoteName)); aFile.CommentProperty.Value:= UTF16ToUTF8(UnicodeString(nFileList^.lpComment)); if nFileList^.dwDisplayType = RESOURCEDISPLAYTYPE_SHARE then aFile.Attributes:= faFolder; FFiles.Add(aFile); Inc(nFileList); end; finally if (hEnum <> INVALID_HANDLE_VALUE) then dwResult := WNetCloseEnum(hEnum); if (dwResult <> NO_ERROR) and (dwResult <> ERROR_NO_MORE_ITEMS) then msgError(Thread, mbSysErrorMessage(dwResult)); if Assigned(lpBuffer) then FreeMem(lpBuffer); end; end; procedure TWinNetListOperation.ShareEnum; var I: DWORD; aFile: TFile; ServerPath: UnicodeString; dwResult: NET_API_STATUS; dwEntriesRead: DWORD = 0; dwTotalEntries: DWORD = 0; BufPtr, nFileList: PShareInfo1; begin ServerPath:= UTF8Decode(ExcludeTrailingPathDelimiter(Path)); repeat // Call the NetShareEnum function dwResult:= NetShareEnum (PWideChar(ServerPath), 1, PByte(BufPtr), MAX_PREFERRED_LENGTH, @dwEntriesRead, @dwTotalEntries, nil); // If the call succeeds if (dwResult = ERROR_SUCCESS) or (dwResult = ERROR_MORE_DATA) then begin nFileList:= BufPtr; // Loop through the entries for I:= 1 to dwEntriesRead do begin CheckOperationState; aFile:= TWinNetFileSource.CreateFile(Path); aFile.Name:= UTF16ToUTF8(UnicodeString(nFileList^.shi1_netname)); aFile.CommentProperty.Value:= UTF16ToUTF8(UnicodeString(nFileList^.shi1_remark)); case (nFileList^.shi1_type and $FF) of STYPE_DISKTREE: aFile.Attributes:= FILE_ATTRIBUTE_DIRECTORY; STYPE_IPC: aFile.Attributes:= FILE_ATTRIBUTE_SYSTEM; end; // Mark special items as hidden if (nFileList^.shi1_type and STYPE_SPECIAL = STYPE_SPECIAL) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; // Mark special items as hidden if (lstrcmpiW(nFileList^.shi1_netname, 'FAX$') = 0) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; // Mark special items as hidden if (lstrcmpiW(nFileList^.shi1_netname, 'PRINT$') = 0) then aFile.Attributes:= aFile.Attributes or FILE_ATTRIBUTE_HIDDEN; FFiles.Add(aFile); Inc(nFileList); end; // Free the allocated buffer NetApiBufferFree(BufPtr); end; // Continue to call NetShareEnum while there are more entries until (dwResult <> ERROR_MORE_DATA); // Show error if failed if (dwResult <> ERROR_SUCCESS) then msgError(Thread, mbSysErrorMessage(dwResult)); end; constructor TWinNetListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FWinNetFileSource := aFileSource as IWinNetFileSource; inherited Create(aFileSource, aPath); end; procedure TWinNetListOperation.MainExecute; begin FFiles.Clear; with FWinNetFileSource do // Workstation/Server if (IsPathAtRoot(Path) = False) and (Pos('\\', Path) = 1) then ShareEnum // Root/Domain/Workgroup else WorkgroupEnum; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/winnet/uwinnetfilesource.pas����������������������������������������0000644�0001750�0000144�00000024560�12630374024�023422� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWinNetFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Dialogs, uFileSourceProperty, uVirtualFileSource, uFileSystemFileSource, uFileProperty, uFileSource, uFileSourceOperation, uFile; type { IWinNetFileSource } IWinNetFileSource = interface(IVirtualFileSource) ['{55329161-3CFC-4F15-B66D-6649B42E9357}'] function GetProviderName: WideString; property ProviderName: WideString read GetProviderName; end; { TWinNetFileSource } TWinNetFileSource = class(TFileSystemFileSource, IWinNetFileSource) private FProviderName: array[0..MAX_PATH-1] of WideChar; function GetProviderName: WideString; function IsNetworkPath(const Path: String): Boolean; protected function SetCurrentWorkingDirectory(NewDir: String): Boolean; override; public constructor Create; override; class function IsSupportedPath(const Path: String): Boolean; override; function GetParentDir(sPath : String): String; override; function IsPathAtRoot(Path: String): Boolean; override; function GetRootDir(sPath: String): String; override; overload; function GetRootDir: String; override; overload; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; override; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; override; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; override; function CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; override; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; end; implementation uses LazUTF8, uWinNetListOperation, uWinNetExecuteOperation, Windows, JwaWinNetWk, uVfsModule, uShowMsg, DCOSUtils, DCStrUtils; function TWinNetFileSource.GetParentDir(sPath: String): String; var nFile: TNetResourceW; lpBuffer: array [0..4095] of Byte; ParentPath: TNetResourceW absolute lpBuffer; dwBufferSize: DWORD; dwResult: DWORD; FilePath: UnicodeString; begin Result:= GetRootDir; if Pos('\\', sPath) = 1 then begin FilePath:= UTF8Decode(ExcludeTrailingPathDelimiter(sPath)); FillByte(nFile, SizeOf(TNetResourceW), 0); with nFile do begin dwScope := RESOURCE_GLOBALNET; dwType := RESOURCETYPE_DISK; dwDisplayType := RESOURCEDISPLAYTYPE_SERVER; dwUsage := RESOURCEUSAGE_CONTAINER; lpRemoteName := PWideChar(FilePath); lpProvider := @FProviderName; end; dwBufferSize:= SizeOf(lpBuffer); dwResult := WNetGetResourceParentW(nFile, @lpBuffer, dwBufferSize); if dwResult <> NO_ERROR then msgError(mbSysErrorMessage(GetLastError)) else begin FilePath:= UnicodeString(ParentPath.lpRemoteName); Result := IncludeFrontPathDelimiter(UTF16ToUTF8(FilePath)); Result := IncludeTrailingPathDelimiter(Result); end; end; end; function TWinNetFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (DCStrUtils.GetParentDir(Path) = ''); end; function TWinNetFileSource.GetRootDir(sPath: String): String; begin Result:= PathDelim; end; function TWinNetFileSource.GetRootDir: String; begin Result:= PathDelim; end; function TWinNetFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize: Int64): Boolean; begin if IsNetworkPath(Path) then Result:= False else Result:= inherited GetFreeSpace(Path, FreeSize, TotalSize); end; function TWinNetFileSource.GetProperties: TFileSourceProperties; begin Result := inherited GetProperties + [fspVirtual]; end; function TWinNetFileSource.GetProviderName: WideString; begin Result:= WideString(FProviderName); end; function TWinNetFileSource.IsNetworkPath(const Path: String): Boolean; begin Result:= (NumCountChars(PathDelim, ExcludeTrailingPathDelimiter(Path)) < 3); end; function TWinNetFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin if IsNetworkPath(NewDir) then Result:= True else Result:= mbSetCurrentDir(NewDir); end; constructor TWinNetFileSource.Create; var dwBufferSize: DWORD; begin inherited Create; dwBufferSize:= MAX_PATH; if WNetGetProviderNameW(WNNC_NET_LANMAN, @FProviderName, dwBufferSize) <> NO_ERROR then RaiseLastOSError; end; class function TWinNetFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= (Pos('\\', Path) = 1); end; function TWinNetFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; if IsNetworkPath(TargetPath) then Result:= TWinNetListOperation.Create(TargetFileSource, TargetPath) else Result:= inherited CreateListOperation(TargetPath); end; function TWinNetFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(TargetPath) then Result:= nil else Result:= inherited CreateCopyOperation(SourceFiles, TargetPath); end; function TWinNetFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(TargetPath) then Result:= nil else Result:=inherited CreateCopyInOperation(SourceFileSource, SourceFiles, TargetPath); end; function TWinNetFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateCopyOutOperation(TargetFileSource, SourceFiles, TargetPath); end; function TWinNetFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateMoveOperation(SourceFiles, TargetPath); end; function TWinNetFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin if IsNetworkPath(FilesToDelete.Path) then Result:= nil else Result:= inherited CreateDeleteOperation(FilesToDelete); end; function TWinNetFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin if IsNetworkPath(FilesToWipe.Path) then Result:= nil else Result:= inherited CreateWipeOperation(FilesToWipe); end; function TWinNetFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; begin if IsNetworkPath(aSourceFile.Path) then Result:= nil else Result:= inherited CreateSplitOperation(aSourceFile, aTargetPath); end; function TWinNetFileSource.CreateCombineOperation(var SourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; begin if IsNetworkPath(SourceFiles.Path) then Result:= nil else Result:= inherited CreateCombineOperation(SourceFiles, aTargetFile); end; function TWinNetFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; begin if IsNetworkPath(BasePath) then Result:= nil else Result:= inherited CreateCreateDirectoryOperation(BasePath, DirectoryPath); end; function TWinNetFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; var TargetFileSource: IFileSource; begin TargetFileSource := Self; if IsNetworkPath(BasePath) then Result:= TWinNetExecuteOperation.Create(TargetFileSource, ExecutableFile, BasePath, Verb) else Result:= inherited CreateExecuteOperation(ExecutableFile, BasePath, Verb); end; function TWinNetFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin if IsNetworkPath(theFiles.Path) then Result:= nil else Result:= inherited CreateCalcChecksumOperation(theFiles, aTargetPath, aTargetMask); end; function TWinNetFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin if (NumCountChars(PathDelim, ExcludeTrailingPathDelimiter(theFiles.Path)) < 2) then Result:= nil else Result:= inherited CreateCalcStatisticsOperation(theFiles); end; function TWinNetFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties ): TFileSourceOperation; begin if IsNetworkPath(theTargetFiles.Path) then Result:= nil else Result:= inherited CreateSetFilePropertyOperation(theTargetFiles, theNewProperties); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/winnet/uwinnetexecuteoperation.pas����������������������������������0000644�0001750�0000144�00000005234�12612505011�024632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWinNetExecuteOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uWinNetFileSource, uFileSourceExecuteOperation; type { TWinNetExecuteOperation } TWinNetExecuteOperation = class(TFileSourceExecuteOperation) private FWinNetFileSource: IWinNetFileSource; public {en @param(aTargetFileSource File source where the file should be executed.) @param(aExecutableFile File that should be executed.) @param(aCurrentPath Path of the file source where the execution should take place.) } constructor Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); override; procedure MainExecute; override; end; implementation uses Windows, JwaWinNetWk, DCStrUtils, DCOSUtils; constructor TWinNetExecuteOperation.Create(aTargetFileSource: IFileSource; var aExecutableFile: TFile; aCurrentPath, aVerb: String); begin FWinNetFileSource := aTargetFileSource as IWinNetFileSource; inherited Create(aTargetFileSource, aExecutableFile, aCurrentPath, aVerb); end; procedure TWinNetExecuteOperation.MainExecute; var nFile: TNetResourceW; lpBuffer: array [0..4095] of Byte; ResInfo: TNetResourceW absolute lpBuffer; pszSystem: PWideChar; dwBufferSize: DWORD; dwResult: DWORD; FileName: WideString; begin FExecuteOperationResult:= fseorError; FResultString:= IncludeFrontPathDelimiter(ExecutableFile.FullPath); // Workstation/Server if Pos('\\', FResultString) = 1 then begin FileName:= UTF8Decode(FResultString); with FWinNetFileSource do try dwBufferSize:= SizeOf(lpBuffer); FillChar(nFile, SizeOf(TNetResource), #0); nFile.dwScope:= RESOURCE_GLOBALNET; nFile.dwType:= RESOURCETYPE_ANY; nFile.lpRemoteName:= PWideChar(FileName); nFile.lpProvider:= PWideChar(ProviderName); dwResult:= WNetAddConnection2W(nFile, nil, nil, CONNECT_INTERACTIVE); if (dwResult <> NO_ERROR) then Exit; dwResult:= WNetGetResourceInformationW(nFile, @lpBuffer, dwBufferSize, pszSystem); if (dwResult <> NO_ERROR) then Exit; if (ResInfo.dwType = RESOURCETYPE_PRINT) then begin if (ShellExecuteW(0, 'open', ResInfo.lpRemoteName, nil, nil, SW_SHOW) > 32) then FExecuteOperationResult:= fseorSuccess; Exit; end; finally if (dwResult <> NO_ERROR) then FResultString:= mbSysErrorMessage(dwResult); end; end; FExecuteOperationResult:= fseorSymLink; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/uvirtualfilesource.pas����������������������������������������������0000644�0001750�0000144�00000000666�11747211345�022305� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uVirtualFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type IVirtualFileSource = interface(IFileSource) end; {en Base class for any virtual file source (this can be any list of files, internal lists, temporary, links to favourite files, results from search queries, etc.). } TVirtualFileSource = class(TFileSource, IVirtualFileSource) end; implementation end. ��������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesource.pas�����������������������������������������������������0000644�0001750�0000144�00000073072�12516765050�020701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCStrUtils, syncobjs, LCLProc, URIParser, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceProperty, uFileProperty, uFile; type TFileSource = class; TFileSourceConnection = class; IFileSource = interface; TPathsArray = array of string; TFileSourceOperationsClasses = array[TFileSourceOperationType] of TFileSourceOperationClass; TFileSourceReloadEventNotify = procedure(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray) of object; { IFileSource } IFileSource = interface(IInterface) ['{B7F0C4C8-59F6-4A35-A54C-E8242F4AD809}'] function Equals(aFileSource: IFileSource): Boolean; function IsInterface(InterfaceGuid: TGuid): Boolean; function IsClass(ClassType: TClass): Boolean; function GetURI: TURI; function GetClassName: String; function GetRefCount: Integer; function GetCurrentAddress: String; function GetCurrentWorkingDirectory: String; function SetCurrentWorkingDirectory(NewDir: String): Boolean; function GetSupportedFileProperties: TFilePropertiesTypes; function GetRetrievableFileProperties: TFilePropertiesTypes; function GetOperationsTypes: TFileSourceOperationTypes; function GetProperties: TFileSourceProperties; function GetFiles(TargetPath: String): TFiles; function GetParentFileSource: IFileSource; procedure SetParentFileSource(NewValue: IFileSource); function CreateFileObject(const APath: String): TFile; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; function CreateListOperation(TargetPath: String): TFileSourceOperation; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; function CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; function GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; function IsPathAtRoot(Path: String): Boolean; function GetParentDir(sPath : String): String; function GetRootDir(sPath : String): String; overload; function GetRootDir: String; overload; function GetPathType(sPath : String): TPathType; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; function GetLocalName(var aFile: TFile): Boolean; function CreateDirectory(const Path: String): Boolean; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); procedure Reload(const PathsToReload: TPathsArray); procedure Reload(const PathToReload: String); procedure AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); procedure RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); property URI: TURI read GetURI; property ClassName: String read GetClassName; property CurrentAddress: String read GetCurrentAddress; property ParentFileSource: IFileSource read GetParentFileSource write SetParentFileSource; property Properties: TFileSourceProperties read GetProperties; property SupportedFileProperties: TFilePropertiesTypes read GetSupportedFileProperties; property RetrievableFileProperties: TFilePropertiesTypes read GetRetrievableFileProperties; end; { TFileSource } TFileSource = class(TInterfacedObject, IFileSource) private FReloadEventListeners: TMethodList; {en File source on which this file source is dependent on (files that it accesses are on the parent file source). } FParentFileSource: IFileSource; {en Callback called when an operation assigned to a connection finishes. It just redirects to a virtual function. } procedure OperationFinishedCallback(Operation: TFileSourceOperation; State: TFileSourceOperationState); protected FURI: TURI; FCurrentAddress: String; FOperationsClasses: TFileSourceOperationsClasses; function GetURI: TURI; {en Retrieves the full address of the file source (the CurrentPath is relative to this). This may be used for specifying address: - archive : path to archive - network : address of server etc. } function GetCurrentAddress: String; virtual; {en Retrieves the current directory of the file source. } function GetCurrentWorkingDirectory: String; virtual; {en Sets the current directory for the file source. @returns(@true if path change was successful, @false otherwise) } function SetCurrentWorkingDirectory(NewDir: String): Boolean; virtual; {en Returns all the properties supported by the file type of the given file source. } function GetSupportedFileProperties: TFilePropertiesTypes; virtual; {en Returns all the file properties that can be retrieved by the file source. } function GetRetrievableFileProperties: TFilePropertiesTypes; virtual; function GetParentFileSource: IFileSource; procedure SetParentFileSource(NewValue: IFileSource); {en Checks if the connection is available and, if it is, assigns it to the operation. @returns(Connection object if the connection is available, @nil otherwise.) } function TryAcquireConnection(connection: TFileSourceConnection; operation: TFileSourceOperation): TFileSourceConnection; virtual; procedure OperationFinished(Operation: TFileSourceOperation); virtual; {en Reloads any internal file lists/caches. @param(PathsToReload Describes paths in file source from which file lists should be reloaded. The function may also reload any subpaths, though that is dependent on the specific file source implementation.) } procedure DoReload(const PathsToReload: TPathsArray); virtual; function CreateFileObject(const APath: String): TFile; public constructor Create; virtual; constructor Create(const URI: TURI); virtual; destructor Destroy; override; function Equals(aFileSource: IFileSource): Boolean; overload; function IsInterface(InterfaceGuid: TGuid): Boolean; function IsClass(aClassType: TClass): Boolean; function GetClassName: String; // For debugging purposes. function GetRefCount: Integer; // For debugging purposes. // Retrieve operations permitted on the source. = capabilities? function GetOperationsTypes: TFileSourceOperationTypes; virtual; // Retrieve some properties of the file source. function GetProperties: TFileSourceProperties; virtual; // Retrieves a list of files. // This is the same as GetOperation(fsoList), executing it // and returning the result of Operation.ReleaseFiles. // Caller is responsible for freeing the result list. function GetFiles(TargetPath: String): TFiles; virtual; // Create an empty TFile object with appropriate properties for the file. class function CreateFile(const APath: String): TFile; virtual; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); virtual; function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; virtual; // These functions create an operation object specific to the file source. function CreateListOperation(TargetPath: String): TFileSourceOperation; virtual; function CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; virtual; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; virtual; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; virtual; function CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; virtual; function CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; virtual; function CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; virtual; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; virtual; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; virtual; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; virtual; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; virtual; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; virtual; function GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; {en Returns @true if the given path is supported by the file source, @false otherwise. } class function IsSupportedPath(const Path: String): Boolean; virtual; {en Returns @true if the given path is the root path of the file source, @false otherwise. } function IsPathAtRoot(Path: String): Boolean; virtual; function GetParentDir(sPath : String): String; virtual; function GetRootDir(sPath : String): String; virtual; overload; function GetRootDir: String; virtual; overload; function GetPathType(sPath : String): TPathType; virtual; function CreateDirectory(const Path: String): Boolean; virtual; function GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; virtual; function GetLocalName(var aFile: TFile): Boolean; virtual; function GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; virtual; {en This function is to ensure the operation does not stay in the queue when it's being destroyed. } procedure RemoveOperationFromQueue(Operation: TFileSourceOperation); virtual; {en Reloads the file list from the file source. This is used if a file source has any internal cache or file list. Overwrite DoReload in descendant classes. } procedure Reload(const PathsToReload: TPathsArray); virtual; procedure Reload(const PathToReload: String); procedure AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); procedure RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); property CurrentAddress: String read GetCurrentAddress; property ParentFileSource: IFileSource read GetParentFileSource write SetParentFileSource; property Properties: TFileSourceProperties read GetProperties; property SupportedFileProperties: TFilePropertiesTypes read GetSupportedFileProperties; property RetrievableFileProperties: TFilePropertiesTypes read GetRetrievableFileProperties; end; { TFileSourceConnection } TFileSourceConnection = class private FAssignedOperation: TFileSourceOperation; FOperationLock: TCriticalSection; function GetAssignedOperation: TFileSourceOperation; protected FCurrentPath: String; // Always includes trailing path delimiter. function GetCurrentPath: String; virtual; procedure SetCurrentPath(NewPath: String); virtual; public constructor Create; virtual; destructor Destroy; override; function IsAvailable: Boolean; function Acquire(Operation: TFileSourceOperation): Boolean; procedure Release; property CurrentPath: String read GetCurrentPath write SetCurrentPath; property AssignedOperation: TFileSourceOperation read GetAssignedOperation; end; { TFileSources } TFileSources = class(TInterfaceList) private function Get(I: Integer): IFileSource; public procedure Assign(otherFileSources: TFileSources); property Items[I: Integer]: IFileSource read Get; default; end; { TFileSourceManager } TFileSourceManager = class private FFileSources: TFileSources; // Only allow adding and removing to/from Manager by TFileSource constructor and destructor. procedure Add(aFileSource: IFileSource); procedure Remove(aFileSource: IFileSource); public constructor Create; destructor Destroy; override; function Find(FileSourceClass: TClass; Address: String): IFileSource; end; EFileSourceException = class(Exception); EFileNotFound = class(EFileSourceException) private FFilePath: String; public constructor Create(const AFilePath: string); reintroduce; property FilePath: String read FFilePath; end; var FileSourceManager: TFileSourceManager; implementation uses uDebug, uFileSourceListOperation, uLng; { TFileSource } constructor TFileSource.Create; begin if ClassType = TFileSource then raise Exception.Create('Cannot construct abstract class'); inherited Create; FReloadEventListeners := TMethodList.Create; FileSourceManager.Add(Self); // Increases RefCount // We don't want to count the reference in Manager, because we want to detect // when there are no more references other than this single one in the Manager. // So, we remove this reference here. // When RefCount reaches 0 Destroy gets called and the last remaining reference // (in the Manager) is removed there. InterLockedDecrement(frefcount); DCDebug('Creating ', ClassName); end; constructor TFileSource.Create(const URI: TURI); var AddressURI: TURI; begin Create; FURI:= URI; FillChar(AddressURI, SizeOf(TURI), 0); AddressURI.Protocol:= FURI.Protocol; AddressURI.Username:= FURI.Username; AddressURI.Host:= FURI.Host; AddressURI.Port:= FURI.Port; AddressURI.HasAuthority:= FURI.HasAuthority; FCurrentAddress:= EncodeURI(AddressURI); end; destructor TFileSource.Destroy; begin DCDebug('Destroying ', ClassName, ' when refcount=', DbgS(refcount)); if RefCount <> 0 then begin // There could have been an exception raised in the constructor // in which case RefCount will be 1, so only issue warning if there was no exception. // This will check for any exception, but it's enough for a warning. if not Assigned(ExceptObject) then DCDebug('Error: RefCount <> 0 for ', Self.ClassName); end; if Assigned(FileSourceManager) then begin // Restore reference removed in Create and // remove the instance remaining in Manager. // Increase refcount by 2, because we don't want removing the last instance // from Manager to trigger another Destroy. // RefCount = 0 InterLockedIncrement(frefcount); InterLockedIncrement(frefcount); // RefCount = 2 FileSourceManager.Remove(Self); // RefCount = 1 InterLockedDecrement(frefcount); // RefCount = 0 (back at the final value) end else DCDebug('Error: Cannot remove file source - manager already destroyed!'); FreeAndNil(FReloadEventListeners); inherited Destroy; end; function TFileSource.Equals(aFileSource: IFileSource): Boolean; begin // Both interface variables must be brought to the same interface. Result := (Self as IFileSource) = (aFileSource as IFileSource); end; function TFileSource.IsInterface(InterfaceGuid: TGuid): Boolean; var t: TObject; begin Result := (Self.QueryInterface(InterfaceGuid, t) = S_OK); if Result then _Release; // QueryInterface increases refcount. end; function TFileSource.IsClass(aClassType: TClass): Boolean; begin Result := Self is aClassType; end; function TFileSource.GetClassName: String; begin Result := ClassName; end; function TFileSource.GetRefCount: Integer; begin Result := RefCount; end; function TFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin Result := []; end; function TFileSource.GetProperties: TFileSourceProperties; begin Result := []; end; function TFileSource.GetURI: TURI; begin Result := FURI; end; function TFileSource.GetCurrentAddress: String; begin Result := FCurrentAddress; end; function TFileSource.GetCurrentWorkingDirectory: String; begin Result := ''; end; function TFileSource.SetCurrentWorkingDirectory(NewDir: String): Boolean; begin // By default every path setting succeeds. Result := True; end; function TFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := [fpName]; end; function TFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result := []; end; function TFileSource.GetParentFileSource: IFileSource; begin Result := FParentFileSource; end; procedure TFileSource.SetParentFileSource(NewValue: IFileSource); begin FParentFileSource := NewValue; end; function TFileSource.IsPathAtRoot(Path: String): Boolean; begin Result := (Path = GetRootDir(Path)); end; function TFileSource.GetParentDir(sPath : String): String; begin Result := DCStrUtils.GetParentDir(sPath); end; function TFileSource.GetRootDir(sPath : String): String; begin // Default root is '/'. Override in descendant classes for other. Result := PathDelim; end; function TFileSource.GetRootDir: String; begin Result := GetRootDir(''); end; function TFileSource.GetPathType(sPath : String): TPathType; begin Result := ptNone; if sPath <> '' then begin // Default root is '/'. Override in descendant classes for other. if (sPath[1] = PathDelim) then Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative; end; end; function TFileSource.CreateDirectory(const Path: String): Boolean; begin Result := False; end; function TFileSource.GetFreeSpace(Path: String; out FreeSize, TotalSize : Int64) : Boolean; begin Result := False; // not supported by default end; function TFileSource.GetLocalName(var aFile: TFile): Boolean; begin Result:= False; end; // Operations. function TFileSource.GetFiles(TargetPath: String): TFiles; var Operation: TFileSourceOperation; ListOperation: TFileSourceListOperation; begin Result := nil; if fsoList in GetOperationsTypes then begin Operation := CreateListOperation(TargetPath); if Assigned(Operation) then try ListOperation := Operation as TFileSourceListOperation; ListOperation.Execute; Result := ListOperation.ReleaseFiles; finally FreeAndNil(Operation); end; end; end; class function TFileSource.CreateFile(const APath: String): TFile; begin Result := TFile.Create(APath); end; function TFileSource.CreateFileObject(const APath: String): TFile; begin Result := CreateFile(APath); end; procedure TFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); begin // Does not set any properties by default. end; function TFileSource.CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; begin Result := ((PropertiesToSet - AFile.AssignedProperties) * RetrievableFileProperties) <> []; end; function TFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyInOperation(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateSplitOperation(var aSourceFile: TFile; aTargetPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCombineOperation(var theSourceFiles: TFiles; aTargetFile: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCreateDirectoryOperation(BasePath: String; DirectoryPath: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; begin Result:= nil; end; function TFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin Result := nil; end; function TFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; begin Result := nil; end; function TFileSource.GetOperationClass(OperationType: TFileSourceOperationType): TFileSourceOperationClass; begin Result := FOperationsClasses[OperationType]; end; class function TFileSource.IsSupportedPath(const Path: String): Boolean; begin Result:= True; end; function TFileSource.GetConnection(Operation: TFileSourceOperation): TFileSourceConnection; begin // By default connections are not supported. Result := nil; end; function TFileSource.TryAcquireConnection(connection: TFileSourceConnection; operation: TFileSourceOperation): TFileSourceConnection; begin if connection.Acquire(operation) then begin // We must know when the operation is finished, // that is when the connection is free again. operation.AddStateChangedListener([fsosStopped], @OperationFinishedCallback); Result := connection; end else begin Result := nil; end; end; procedure TFileSource.RemoveOperationFromQueue(Operation: TFileSourceOperation); begin // Nothing by default. end; procedure TFileSource.OperationFinishedCallback(Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if State = fsosStopped then begin Operation.RemoveStateChangedListener([fsosStopped], @OperationFinishedCallback); OperationFinished(Operation); end; end; procedure TFileSource.OperationFinished(Operation: TFileSourceOperation); begin // Nothing by default. end; procedure TFileSource.DoReload(const PathsToReload: TPathsArray); begin // Nothing by default. end; procedure TFileSource.Reload(const PathsToReload: TPathsArray); var i: Integer; FunctionToCall: TFileSourceReloadEventNotify; begin DoReload(PathsToReload); if Assigned(FReloadEventListeners) then for i := 0 to FReloadEventListeners.Count - 1 do begin FunctionToCall := TFileSourceReloadEventNotify(FReloadEventListeners.Items[i]); FunctionToCall(Self, PathsToReload); end; end; procedure TFileSource.Reload(const PathToReload: String); var PathsToReload: TPathsArray; begin SetLength(PathsToReload, 1); PathsToReload[0] := PathToReload; Reload(PathsToReload); end; procedure TFileSource.AddReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); begin FReloadEventListeners.Add(TMethod(FunctionToCall)); end; procedure TFileSource.RemoveReloadEventListener(FunctionToCall: TFileSourceReloadEventNotify); begin FReloadEventListeners.Remove(TMethod(FunctionToCall)); end; { TFileSourceConnection } constructor TFileSourceConnection.Create; begin FOperationLock := TCriticalSection.Create; inherited Create; DCDebug('Creating connection ', ClassName); end; destructor TFileSourceConnection.Destroy; begin if Assigned(FAssignedOperation) and (FAssignedOperation.State <> fsosStopped) then DCDebug('Error: Destroying connection ', ClassName, ' with active operation ', FAssignedOperation.ClassName); inherited Destroy; DCDebug('Destroying connection ', ClassName); FreeAndNil(FOperationLock); end; function TFileSourceConnection.GetAssignedOperation: TFileSourceOperation; begin // For just reading lock is probably not needed here. Result := FAssignedOperation; end; function TFileSourceConnection.GetCurrentPath: String; begin Result := FCurrentPath; end; procedure TFileSourceConnection.SetCurrentPath(NewPath: String); begin if NewPath <> '' then NewPath := IncludeTrailingPathDelimiter(NewPath); FCurrentPath := NewPath; end; function TFileSourceConnection.IsAvailable: Boolean; begin Result := (GetAssignedOperation() = nil); end; function TFileSourceConnection.Acquire(Operation: TFileSourceOperation): Boolean; begin FOperationLock.Acquire; try Result := (FAssignedOperation = nil); if Result then FAssignedOperation := Operation; finally FOperationLock.Release; end; end; procedure TFileSourceConnection.Release; begin FOperationLock.Acquire; try FAssignedOperation := nil; finally FOperationLock.Release; end; end; { TFileSources } function TFileSources.Get(I: Integer): IFileSource; begin if (I >= 0) and (I < Count) then Result := inherited Items[I] as IFileSource else Result := nil; end; procedure TFileSources.Assign(otherFileSources: TFileSources); var i: Integer; begin Clear; for i := 0 to otherFileSources.Count - 1 do Add(otherFileSources.Items[i]); end; { TFileSourceManager } constructor TFileSourceManager.Create; begin FFileSources := TFileSources.Create; end; destructor TFileSourceManager.Destroy; var i: Integer; begin if FFileSources.Count > 0 then begin DCDebug('Warning: Destroying manager with existing file sources!'); for i := 0 to FFileSources.Count - 1 do begin // Restore the reference taken in TFileSource.Create before removing // all file sources from the list. FFileSources[i]._AddRef; // Free instance. FFileSources.put(i, nil); end; end; FreeAndNil(FFileSources); inherited Destroy; end; procedure TFileSourceManager.Add(aFileSource: IFileSource); begin if FFileSources.IndexOf(aFileSource) < 0 then begin FFileSources.Add(aFileSource); end else DCDebug('Error: File source already exists in manager!'); end; procedure TFileSourceManager.Remove(aFileSource: IFileSource); begin FFileSources.Remove(aFileSource); end; function TFileSourceManager.Find(FileSourceClass: TClass; Address: String): IFileSource; var i: Integer; begin for i := 0 to FFileSources.Count - 1 do begin if (FFileSources[i].IsClass(FileSourceClass)) and (FFileSources[i].CurrentAddress = Address) then begin Result := FFileSources[i]; Exit; end; end; Result := nil; end; constructor EFileNotFound.Create(const AFilePath: string); begin FFilePath := AFilePath; inherited Create(Format(rsMsgFileNotFound, [aFilePath])); end; initialization FileSourceManager := TFileSourceManager.Create; finalization FreeAndNil(FileSourceManager); end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcesplitoperation.pas���������������������������������������0000644�0001750�0000144�00000012732�12365151656�023675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceSplitOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uFileSourceCopyOperation; type TFileSourceSplitOperationStatistics = TFileSourceCopyOperationStatistics; {en Operation that split file within the same file source. } { TFileSourceSplitOperation } TFileSourceSplitOperation = class(TFileSourceOperation) private FStatistics: TFileSourceSplitOperationStatistics; FStatisticsAtStartTime: TFileSourceSplitOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FSourceFile: TFile; FTargetPath: String; FVolumeSize: Int64; FVolumeNumber: LongInt; FRequireACRC32VerificationFile: boolean; FCurrentCRC32: dword; FAutomaticSplitMode: boolean; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceSplitOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property SourceFile: TFile read FSourceFile; property TargetPath: String read FTargetPath; public {en @param(aFileSource File source within which the operation should take place. Class takes ownership of the pointer.) @param(aSourceFile The file which are to be splitted. Class takes ownership of the pointer.) @param(aTargetPath Target path for splitted files.) } constructor Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceSplitOperationStatistics; property VolumeSize: Int64 read FVolumeSize write FVolumeSize; property VolumeNumber: LongInt read FVolumeNumber write FVolumeNumber; property RequireACRC32VerificationFile: boolean read FRequireACRC32VerificationFile write FRequireACRC32VerificationFile; property CurrentCRC32: dword read FCurrentCRC32 write FCurrentCRC32; property AutomaticSplitMode: boolean read FAutomaticSplitMode write FAutomaticSplitMode; end; implementation uses uDCUtils, uLng; // -- TFileSourceSplitOperation ------------------------------------------------ constructor TFileSourceSplitOperation.Create(aFileSource: IFileSource; var aSourceFile: TFile; aTargetPath: String); begin with FStatistics do begin CurrentFileFrom := ''; CurrentFileTo := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aFileSource); FFileSource := aFileSource; FSourceFile := aSourceFile; aSourceFile := nil; FTargetPath := IncludeTrailingPathDelimiter(aTargetPath); end; destructor TFileSourceSplitOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FSourceFile) then FreeAndNil(FSourceFile); end; procedure TFileSourceSplitOperation.UpdateStatistics(var NewStatistics: TFileSourceSplitOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceSplitOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSplitOperation.RetrieveStatistics: TFileSourceSplitOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceSplitOperation.GetID: TFileSourceOperationType; begin Result := fsoSplit; end; procedure TFileSourceSplitOperation.DoReloadFileSources; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := FTargetPath; // Split target path FFileSource.Reload(Paths); end; function TFileSourceSplitOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperSplittingFromTo, [SourceFile.Path, TargetPath]); else Result := rsOperSplitting; end; end; end. ��������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcecalcstatisticsoperation.pas������������������������������0000644�0001750�0000144�00000011361�11747211345�025547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceCalcStatisticsOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFileProperty, uFile; type TFileSourceCalcStatisticsOperationStatistics = record SupportedProperties: TFilePropertiesTypes; CurrentFile: String; Files: Int64; // only files, i.e., not directories Directories: Int64; Links: Int64; Size: Int64; // total size of all the files CompressedSize: Int64; // if fpCompressedSize supported OldestFile: TDateTime; // if fpModificationTime (or fpDateTime) supported NewestFile: TDateTime; FilesPerSecond: Int64; // Maybe some other: // SystemFiles // ReadOnlyFiles // ExecutableFiles end; {en Operation that calculates several statistics for a directory tree. } { TFileSourceCalcStatisticsOperation } TFileSourceCalcStatisticsOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCalcStatisticsOperationStatistics; FStatisticsAtStartTime: TFileSourceCalcStatisticsOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FFiles: TFiles; protected // Options. FSymLinkOption: TFileSourceOperationOptionSymLink; FSkipErrors: Boolean; function GetID: TFileSourceOperationType; override; procedure UpdateStatistics(var NewStatistics: TFileSourceCalcStatisticsOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property FileSource: IFileSource read FFileSource; property Files: TFiles read FFiles; public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceCalcStatisticsOperationStatistics; property SymLinkOption: TFileSourceOperationOptionSymLink read FSymLinkOption write FSymLinkOption; property SkipErrors: Boolean read FSkipErrors write FSkipErrors; end; implementation uses uGlobs, uDCUtils, uLng; constructor TFileSourceCalcStatisticsOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles); begin with FStatistics do begin SupportedProperties := aTargetFileSource.SupportedFileProperties; CurrentFile := ''; Files := 0; Directories := 0; Links := 0; Size := 0; CompressedSize := 0; // if fpCompressedSize supported OldestFile := 0; NewestFile := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FFiles := theFiles; theFiles := nil; FSymLinkOption := fsooslNone; FSkipErrors := gSkipFileOpError; end; destructor TFileSourceCalcStatisticsOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FFiles) then FreeAndNil(FFiles); end; function TFileSourceCalcStatisticsOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: Result := Format(rsOperCalculatingStatisticsIn, [Files.Path]); else Result := rsOperCalculatingStatictics; end; end; function TFileSourceCalcStatisticsOperation.GetID: TFileSourceOperationType; begin Result := fsoCalcStatistics; end; procedure TFileSourceCalcStatisticsOperation.UpdateStatistics( var NewStatistics: TFileSourceCalcStatisticsOperationStatistics); begin FStatisticsLock.Acquire; try // Cannot determine progress or remaining time for this operation. // Only calculate speed. EstimateRemainingTime(FStatisticsAtStartTime.Files, NewStatistics.Files, 0, // unknown StartTime, SysUtils.Now, NewStatistics.FilesPerSecond); FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCalcStatisticsOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCalcStatisticsOperation.RetrieveStatistics: TFileSourceCalcStatisticsOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceutil.pas�������������������������������������������������0000644�0001750�0000144�00000030337�12612505011�021556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceUtil; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource, uFileView, uFile, uFileSourceOperationTypes; {en Decides what should be done when user chooses a file in a file view. This function may add/remove a file source from the view, change path, execute a file or a command, etc. } procedure ChooseFile(aFileView: TFileView; aFile: TFile); {en Checks if choosing the given file will change to another file source, and adds this new file source to the view if it does. @returns @true if the file matched any rules and a new file source was created, @false otherwise, which means no action was taken. } function ChooseFileSource(aFileView: TFileView; aFile: TFile): Boolean; overload; function ChooseFileSource(aFileView: TFileView; const aPath: String): Boolean; overload; function ChooseArchive(aFileView: TFileView; aFile: TFile; bForce: Boolean = False): Boolean; procedure ChooseSymbolicLink(aFileView: TFileView; aFile: TFile); procedure SetFileSystemPath(aFileView: TFileView; aPath: String); function RenameFile(aFileSource: IFileSource; const aFile: TFile; const NewFileName: String; Interactive: Boolean): Boolean; function GetCopyOperationType(SourceFileSource, TargetFileSource: IFileSource; out OperationType: TFileSourceOperationType): Boolean; implementation uses LCLProc, fFileExecuteYourSelf, uGlobs, uShellExecute, uFindEx, uDebug, uOSUtils, uShowMsg, uLng, uVfsModule, DCOSUtils, DCStrUtils, uFileSourceOperation, uFileSourceSetFilePropertyOperation, uFileSourceExecuteOperation, uVfsFileSource, uFileSourceProperty, uFileSystemFileSource, uWfxPluginFileSource, uArchiveFileSourceUtil, uFileSourceOperationMessageBoxesUI, uFileProperty, URIParser; procedure ChooseFile(aFileView: TFileView; aFile: TFile); var sCmd, sParams, sStartPath: String; Operation: TFileSourceExecuteOperation = nil; aFileCopy: TFile = nil; begin // First test for file sources. if ChooseFileSource(aFileView, aFile) then Exit; // For now work only for local files. if aFileView.FileSource.Properties * [fspDirectAccess, fspLinksToLocalFiles] <> [] then begin if fspLinksToLocalFiles in aFileView.FileSource.Properties then aFileView.FileSource.GetLocalName(aFile); // Now test if exists Open command in "extassoc.xml" :) if gExts.GetExtActionCmd(aFile, 'open', sCmd, sParams, sStartPath) then begin if ProcessExtCommandFork(sCmd,sParams,sStartPath) then Exit; end; end; if (fsoExecute in aFileView.FileSource.GetOperationsTypes) then try aFileCopy := aFile.Clone; Operation := aFileView.FileSource.CreateExecuteOperation( aFileCopy, aFileView.CurrentPath, 'open') as TFileSourceExecuteOperation; if Assigned(Operation) then begin Operation.Execute; case Operation.ExecuteOperationResult of fseorError: begin // Show error message if Length(Operation.ResultString) = 0 then msgError(rsMsgErrEOpen) else msgError(Operation.ResultString); end; fseorYourSelf: begin // Copy out file to temp file system and execute if not ShowFileExecuteYourSelf(aFileView, aFile, False) then DCDebug('Execution error!'); end; fseorWithAll: begin // Copy out all files to temp file system and execute chosen if not ShowFileExecuteYourSelf(aFileView, aFile, True) then DCDebug('Execution error!'); end; fseorSymLink: begin // change directory to new path (returned in Operation.ResultString) DCDebug('Change directory to ', Operation.ResultString); with aFileView do begin // If path is URI if Pos('://', Operation.ResultString) > 0 then ChooseFileSource(aFileView, Operation.ResultString) else if (FileSource.IsClass(TFileSystemFileSource)) or (mbSetCurrentDir(ExcludeTrailingPathDelimiter(Operation.ResultString)) = False) then begin // Simply change path CurrentPath:= Operation.ResultString; end else begin // Get a new filesystem file source AddFileSource(TFileSystemFileSource.GetFileSource, Operation.ResultString); end; end; end; end; // case end; // assigned finally FreeAndNil(aFileCopy); FreeAndNil(Operation); end; end; function ChooseFileSource(aFileView: TFileView; aFile: TFile): Boolean; var FileSource: IFileSource; VfsModule: TVfsModule; begin Result := False; if ChooseArchive(aFileView, aFile) then Exit(True); // Work only for TVfsFileSource. if aFileView.FileSource.IsClass(TVfsFileSource) then begin // Check if there is a registered WFX plugin by file system root name. FileSource := FileSourceManager.Find(TWfxPluginFileSource, 'wfx://' + aFile.Name); if not Assigned(FileSource) then FileSource := TWfxPluginFileSource.CreateByRootName(aFile.Name); if not Assigned(FileSource) then begin // Check if there is a registered Vfs module by file system root name. VfsModule:= gVfsModuleList.VfsModule[aFile.Name]; if Assigned(VfsModule) then begin FileSource := FileSourceManager.Find(VfsModule.FileSourceClass, aFile.Name); if not Assigned(FileSource) then FileSource := VfsModule.FileSourceClass.Create; end; end; if Assigned(FileSource) then begin aFileView.AddFileSource(FileSource, FileSource.GetRootDir); Exit(True); end; end; end; function ChooseFileSource(aFileView: TFileView; const aPath: String): Boolean; var URI: TURI; RemotePath: String; FileSource: IFileSource; aFileSourceClass: TFileSourceClass; begin Result:= True; aFileSourceClass:= gVfsModuleList.GetFileSource(aPath); // If found special FileSource for path if Assigned(aFileSourceClass) then begin // If path is URI if Pos('://', aPath) > 0 then begin URI:= ParseURI(aPath); RemotePath:= NormalizePathDelimiters(URI.Path + URI.Document); RemotePath:= IncludeTrailingPathDelimiter(RemotePath); FileSource:= FileSourceManager.Find(aFileSourceClass, URI.Protocol + '://' + URI.Host); if Assigned(FileSource) then aFileView.AddFileSource(FileSource, RemotePath) else begin // Create new FileSource with given URI aFileView.AddFileSource(aFileSourceClass.Create(URI), RemotePath); end; end // If found FileSource is same as current then simply change path else if aFileSourceClass.ClassNameIs(aFileView.FileSource.ClassName) then aFileView.CurrentPath := aPath // Else create new FileSource with given path else aFileView.AddFileSource(aFileSourceClass.Create, aPath); end // If current FileSource has address else if Length(aFileView.CurrentAddress) > 0 then aFileView.CurrentPath := aPath // Else use FileSystemFileSource else begin SetFileSystemPath(aFileView, aPath); Result:= mbSetCurrentDir(aPath); end; end; function ChooseArchive(aFileView: TFileView; aFile: TFile; bForce: Boolean): Boolean; var FileSource: IFileSource; begin try // Check if there is a ArchiveFileSource for possible archive. FileSource := GetArchiveFileSource(aFileView.FileSource, aFile, EmptyStr, bForce); except on E: Exception do begin if not bForce then begin msgError(E.Message); Exit(True); end; end; end; if Assigned(FileSource) then begin if not mbCompareFileNames(aFileView.CurrentPath, aFile.Path) then begin if aFileView.FileSource.Properties * [fspDirectAccess, fspLinksToLocalFiles] <> [] then SetFileSystemPath(aFileView, aFile.Path); end; aFileView.AddFileSource(FileSource, FileSource.GetRootDir); Exit(True); end; Result := False; end; procedure ChooseSymbolicLink(aFileView: TFileView; aFile: TFile); var SearchRec: TSearchRecEx; sPath: String; begin if not aFileView.FileSource.IsClass(TFileSystemFileSource) then begin aFileView.ChangePathToChild(aFile); Exit; end; sPath:= aFileView.CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); try if FindFirstEx(sPath + AllFilesMask, faAnyFile, SearchRec) = 0 then begin with aFileView do CurrentPath := CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); end else begin sPath:= ReadSymLink(aFile.FullPath); if sPath <> EmptyStr then aFileView.CurrentPath := IncludeTrailingPathDelimiter(GetAbsoluteFileName(aFileView.CurrentPath, sPath)) else msgError(Format(rsMsgChDirFailed, [aFile.FullPath])); end; finally FindCloseEx(SearchRec); end; end; procedure SetFileSystemPath(aFileView: TFileView; aPath: String); var i: Integer; begin // Search for filesystem file source in this view, and remove others. with aFileView do begin for i := FileSourcesCount - 1 downto 0 do begin // Search FileSource with same class name, we can not use "is" // operator because it also works for descendant classes if TFileSystemFileSource.ClassNameIs(FileSources[i].ClassName) then begin CurrentPath := aPath; Break; end else RemoveCurrentFileSource; end; if FileSourcesCount = 0 then begin // If not found, get a new filesystem file source. AddFileSource(TFileSystemFileSource.GetFileSource, aPath); end; end; end; function RenameFile(aFileSource: IFileSource; const aFile: TFile; const NewFileName: String; Interactive: Boolean): Boolean; var aFiles: TFiles = nil; Operation: TFileSourceSetFilePropertyOperation = nil; NewProperties: TFileProperties; UserInterface: TFileSourceOperationMessageBoxesUI = nil; begin Result:= False; if fsoSetFileProperty in aFileSource.GetOperationsTypes then begin FillByte(NewProperties, SizeOf(NewProperties), 0); NewProperties[fpName] := TFileNameProperty.Create(NewFileName); try aFiles := TFiles.Create(aFile.Path); aFiles.Add(aFile.Clone); Operation := aFileSource.CreateSetFilePropertyOperation( aFiles, NewProperties) as TFileSourceSetFilePropertyOperation; if Assigned(Operation) then begin // Only if the operation can change file name. if fpName in Operation.SupportedProperties then begin Operation.SkipErrors := not Interactive; if Interactive then begin UserInterface := TFileSourceOperationMessageBoxesUI.Create; Operation.AddUserInterface(UserInterface); end; Operation.Execute; Result := (Operation.Result = fsorFinished); end; end; finally FreeThenNil(NewProperties[fpName]); FreeThenNil(Operation); FreeThenNil(UserInterface); FreeThenNil(aFiles); end; end; end; function GetCopyOperationType(SourceFileSource, TargetFileSource: IFileSource; out OperationType: TFileSourceOperationType): Boolean; begin // If same file source and address if (fsoCopy in SourceFileSource.GetOperationsTypes) and (fsoCopy in TargetFileSource.GetOperationsTypes) and SourceFileSource.Equals(TargetFileSource) and SameText(SourceFileSource.GetCurrentAddress, TargetFileSource.GetCurrentAddress) then begin Result:= True; OperationType := fsoCopy; end else if TargetFileSource.IsClass(TFileSystemFileSource) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin Result:= True; OperationType := fsoCopyOut; end else if SourceFileSource.IsClass(TFileSystemFileSource) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) then begin Result:= True; OperationType := fsoCopyIn; end else begin Result:= False; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcecalcchecksumoperation.pas��������������������������������0000644�0001750�0000144�00000014516�12405254001�025150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceCalcChecksumOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, DCBasicTypes, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile, uHash; type TCalcCheckSumOperationMode = (checksum_calc, checksum_verify); TVerifyChecksumResult = record Success: TDynamicStringArray; Broken: TDynamicStringArray; Missing: TDynamicStringArray; ReadError: TDynamicStringArray; end; TFileSourceCalcChecksumOperationStatistics = record CurrentFile: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that calculates checksum of the files. } { TFileSourceCalcChecksumOperation } TFileSourceCalcChecksumOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCalcChecksumOperationStatistics; FStatisticsAtStartTime: TFileSourceCalcChecksumOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FFileSource: IFileSource; FFiles: TFiles; FMode: TCalcCheckSumOperationMode; FTargetPath: String; FTargetMask: String; FAlgorithm: THashAlgorithm; FOneFile: Boolean; FOpenFileAfterOperationCompleted: Boolean; protected FResult: TVerifyChecksumResult; function GetID: TFileSourceOperationType; override; procedure UpdateStatistics(var NewStatistics: TFileSourceCalcChecksumOperationStatistics); procedure UpdateStatisticsAtStartTime; override; procedure DoReloadFileSources; override; property FileSource: IFileSource read FFileSource; property Files: TFiles read FFiles; property TargetPath: String read FTargetPath; property TargetMask: String read FTargetMask; public constructor Create(aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceCalcChecksumOperationStatistics; property Mode: TCalcCheckSumOperationMode read FMode write FMode; property Algorithm: THashAlgorithm read FAlgorithm write FAlgorithm; property OneFile: Boolean read FOneFile write FOneFile; property OpenFileAfterOperationCompleted: Boolean read FOpenFileAfterOperationCompleted write FOpenFileAfterOperationCompleted; property Result: TVerifyChecksumResult read FResult; end; implementation uses uDCUtils, uLng, uShowForm; constructor TFileSourceCalcChecksumOperation.Create( aTargetFileSource: IFileSource; var theFiles: TFiles; aTargetPath: String; aTargetMask: String); begin with FStatistics do begin CurrentFile := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aTargetFileSource); FFileSource := aTargetFileSource; FFiles := theFiles; theFiles := nil; FTargetPath := aTargetPath; FTargetMask := aTargetMask; FMode := checksum_calc; FAlgorithm := HASH_MD5; FOneFile := False; FOpenFileAfterOperationCompleted := FALSE; end; destructor TFileSourceCalcChecksumOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FFiles) then FreeAndNil(FFiles); end; function TFileSourceCalcChecksumOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Mode of checksum_calc: case Details of fsoddJobAndTarget: begin if Files.Count = 1 then Result := Format(rsOperCalculatingCheckSumOf, [Files[0].FullPath]) else Result := Format(rsOperCalculatingCheckSumIn, [Files.Path]); end; else Result := rsOperCalculatingCheckSum; end; checksum_verify: case Details of fsoddJobAndTarget: begin if Files.Count = 1 then Result := Format(rsOperVerifyingCheckSumOf, [Files[0].FullPath]) else Result := Format(rsOperVerifyingCheckSumIn, [Files.Path]); end; else Result := rsOperVerifyingCheckSum; end; else Result := inherited GetDescription(Details); end; end; function TFileSourceCalcChecksumOperation.GetID: TFileSourceOperationType; begin Result := fsoCalcChecksum; end; procedure TFileSourceCalcChecksumOperation.UpdateStatistics( var NewStatistics: TFileSourceCalcChecksumOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalFiles <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCalcChecksumOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCalcChecksumOperation.RetrieveStatistics: TFileSourceCalcChecksumOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCalcChecksumOperation.DoReloadFileSources; begin if OneFile AND OpenFileAfterOperationCompleted then ShowViewerByGlob(TargetMask); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/usampleforconfiglistoperation.pas�����������������������������������0000644�0001750�0000144�00000003320�12534542254�024520� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uSampleForConfigListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uSampleForConfigFileSource; type TSampleForConfigListOperation = class(TFileSourceListOperation) private FFileSource: ISampleForConfigFileSource; public constructor Create(aFileSource: IFileSource; aPath: string); override; procedure MainExecute; override; end; implementation uses uFile; constructor TSampleForConfigListOperation.Create(aFileSource: IFileSource; aPath: string); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as ISampleForConfigFileSource; inherited Create(aFileSource, aPath); end; procedure TSampleForConfigListOperation.MainExecute; var FakeFile: TFile; IndexFile: integer; const BaseName: array[0..11] of string = ('config', 'Step', 'Prog', 'setup', 'Report', 'Skip', 'Closer', 'Face', 'Win', 'Unix', 'App', 'Klopp'); SuffixName: array[0..11] of string = ('red', 'new', 'fst', 'South', 'slow', 'Cheap', 'dc', 'config', 'stop', 'Batch', 'Bash', 'rgctvcvt'); ExtName: array[0..11] of string = ('bin', 'exe', 'txt', 's19', 'Rar', 'zip', 'xlsx', 'pdf', 'cpp', 'pas', 'DPR', 'tmp'); begin FFiles.Clear; randseed:=Trunc(now); // Random from a day to another, but not during the day. So during the day, user will do refresh and always the same thing is re-shown. for Indexfile := 1 to 30 do begin FakeFile := TSampleForConfigFileSource.CreateFile(SAMPLE_PATH); FakeFile.Name := BaseName[random(12)] + SuffixName[random(12)] + '.' + ExtName[random(12)]; FakeFile.Size := 5000 + random(1000000); FFiles.Add(FakeFile); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationoptions.pas�������������������������������������0000644�0001750�0000144�00000001316�12250667370�024227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceOperationOptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceOperationOptionGeneral = (fsoogNone, fsoogYes, fsoogNo); TFileSourceOperationOptionSymLink = (fsooslNone, fsooslFollow, fsooslDontFollow); TFileSourceOperationOptionFileExists = (fsoofeNone, fsoofeSkip, fsoofeOverwrite, fsoofeOverwriteOlder, fsoofeOverwriteSmaller, fsoofeOverwriteLarger, fsoofeAutoRenameSource, fsoofeAppend, fsoofeResume); TFileSourceOperationOptionDirectoryExists = (fsoodeNone, fsoodeSkip, fsoodeDelete, fsoodeCopyInto); TFileSourceOperationOptionSetPropertyError = (fsoospeNone, fsoospeDontSet, fsoospeIgnoreErrors); implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multilist/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�017700� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/multilist/umultilistlistoperation.pas�������������������������������0000644�0001750�0000144�00000003753�11753503774�025436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiListListOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceListOperation, uFileSource, uMultiListFileSource; type TMultiListListOperation = class(TFileSourceListOperation) private FFileSource: IMultiListFileSource; public constructor Create(aFileSource: IFileSource; aPath: String); override; procedure MainExecute; override; end; implementation uses uOSUtils, DCStrUtils, uFile, uFileProperty; constructor TMultiListListOperation.Create(aFileSource: IFileSource; aPath: String); begin FFiles := TFiles.Create(aPath); FFileSource := aFileSource as IMultiListFileSource; inherited Create(aFileSource, aPath); end; procedure TMultiListListOperation.MainExecute; var AFile: TFile; IsRootPath: Boolean; CurrentNode: TFileTreeNode; CurrentPath: String; Found: Boolean; i: Integer; begin FFiles.Clear; IsRootPath := FileSource.IsPathAtRoot(Path); CurrentNode := FFileSource.FileList; CurrentPath := FileSource.GetRootDir; // Search for files in the given path. while (Path <> CurrentPath) and IsInPath(CurrentPath, Path, True, False) do begin CheckOperationState; Found := False; for i := 0 to CurrentNode.SubNodesCount - 1 do begin if IsInPath(IncludeTrailingPathDelimiter(CurrentPath) + CurrentNode.SubNodes[i].TheFile.Name, Path, True, False) then begin CurrentNode := CurrentNode.SubNodes[i]; Found := True; Break; end; end; if not Found then Break; end; if not IsRootPath then begin AFile := FileSource.CreateFileObject(Path); AFile.Name := '..'; if fpAttributes in AFile.SupportedProperties then AFile.Attributes := faFolder; FFiles.Add(AFile); end; if Path = CurrentPath then begin for i := 0 to CurrentNode.SubNodesCount - 1 do begin CheckOperationState; AFile := CurrentNode.SubNodes[i].TheFile; FFiles.Add(AFile); end; end; end; end. ���������������������doublecmd-0.7.1/src/filesources/multilist/umultilistfilesource.pas����������������������������������0000644�0001750�0000144�00000021173�12654220574�024671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMultiListFileSource; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFile, uFileSource, uFileSourceProperty, uFileSourceOperation, uFileSourceOperationTypes, uFileProperty; type IMultiListFileSource = interface(IFileSource) ['{A64C591C-EBC6-4E06-89D2-9965E1A3009A}'] procedure AddList(var aFileList: TFileTree; aFileSource: IFileSource); function GetFileList: TFileTree; function GetFileSource: IFileSource; property FileList: TFileTree read GetFileList; property FileSource: IFileSource read GetFileSource; end; {en File source that generates files from file lists generated by other file sources. This virtual file source contains "links" to files from other file sources, e.g., paths to files on FileSystem file source, or paths to files within certain archive. Therefore properties of virtual file source and operations will depend on the underlying file source. It should be possible to store links to different file sources within the same virtual file source, in which case there has to be a file source associated with each file or a group of files, although presentation of such file lists should probably be different than that of a single file source. Files can be virtual (from virtual file sources). Currently can only use a single file source with a single file list. } { TMultiListFileSource } TMultiListFileSource = class(TFileSource, IMultiListFileSource) private {en File list for the file source. } FFileList: TFileTree; {en File source from which files in FileList come from. Currently only single file source is supported. } FFileSource: IFileSource; function GetFileList: TFileTree; function GetFileSource: IFileSource; public constructor Create; override; destructor Destroy; override; {en Adds a list of files associated with a file source to the storage. Only single file source supported now (adding list will overwrite previous list). @param(aFileList List of files. Class takes ownership of the pointer.) @param(aFileSource The file source from which files in aFileList are from.) } procedure AddList(var aFileList: TFileTree; aFileSource: IFileSource); virtual; function GetSupportedFileProperties: TFilePropertiesTypes; override; function GetOperationsTypes: TFileSourceOperationTypes; override; function GetProperties: TFileSourceProperties; override; function GetRetrievableFileProperties: TFilePropertiesTypes; override; procedure RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); override; function CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; override; function CreateListOperation(TargetPath: String): TFileSourceOperation; override; function CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; override; function CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; override; function CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; override; function CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; override; function CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; override; function CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; override; function CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; override; function CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; override; property FileList: TFileTree read FFileList; property FileSource: IFileSource read FFileSource; end; implementation uses uMultiListListOperation; constructor TMultiListFileSource.Create; begin FFileList := nil; FFileSource := nil; inherited Create; end; destructor TMultiListFileSource.Destroy; begin inherited Destroy; if Assigned(FFileList) then FreeAndNil(FFileList); FFileSource := nil; end; procedure TMultiListFileSource.AddList(var aFileList: TFileTree; aFileSource: IFileSource); begin if Assigned(FFileList) then FreeAndNil(FFileList); FFileList := aFileList; aFileList := nil; FFileSource := aFileSource; end; function TMultiListFileSource.GetSupportedFileProperties: TFilePropertiesTypes; begin Result := FFileSource.GetSupportedFileProperties; end; function TMultiListFileSource.GetOperationsTypes: TFileSourceOperationTypes; begin // Only fsoList is supported by default. // All other operations only if file source supports them. // However, this will work only for single file source. Result := [fsoList] + FFileSource.GetOperationsTypes * [fsoCopyOut, //fsoMove, fsoDelete, fsoWipe, fsoCalcChecksum, fsoCalcStatistics, fsoSetFileProperty, fsoExecute, fsoTestArchive]; end; function TMultiListFileSource.GetProperties: TFileSourceProperties; begin // Flags depend on the underlying file source. Result := FFileSource.GetProperties; end; function TMultiListFileSource.GetRetrievableFileProperties: TFilePropertiesTypes; begin Result:= FFileSource.GetRetrievableFileProperties; end; procedure TMultiListFileSource.RetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes); begin FFileSource.RetrieveProperties(AFile, PropertiesToSet); end; function TMultiListFileSource.CanRetrieveProperties(AFile: TFile; PropertiesToSet: TFilePropertiesTypes): Boolean; begin Result:= FFileSource.CanRetrieveProperties(AFile, PropertiesToSet); end; function TMultiListFileSource.GetFileList: TFileTree; begin Result := FFileList; end; function TMultiListFileSource.GetFileSource: IFileSource; begin Result := FFileSource; end; function TMultiListFileSource.CreateListOperation(TargetPath: String): TFileSourceOperation; begin Result := TMultiListListOperation.Create(Self, TargetPath); end; function TMultiListFileSource.CreateCopyOutOperation(TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := FFileSource.CreateCopyOutOperation(TargetFileSource, SourceFiles, TargetPath); end; function TMultiListFileSource.CreateMoveOperation(var SourceFiles: TFiles; TargetPath: String): TFileSourceOperation; begin Result := FFileSource.CreateMoveOperation(SourceFiles, TargetPath); end; function TMultiListFileSource.CreateDeleteOperation(var FilesToDelete: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateDeleteOperation(FilesToDelete); end; function TMultiListFileSource.CreateWipeOperation(var FilesToWipe: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateWipeOperation(FilesToWipe); end; function TMultiListFileSource.CreateExecuteOperation(var ExecutableFile: TFile; BasePath, Verb: String): TFileSourceOperation; begin Result := FFileSource.CreateExecuteOperation(ExecutableFile, ExecutableFile.Path, Verb); end; function TMultiListFileSource.CreateTestArchiveOperation(var theSourceFiles: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateTestArchiveOperation(theSourceFiles); end; function TMultiListFileSource.CreateCalcChecksumOperation(var theFiles: TFiles; aTargetPath: String; aTargetMask: String): TFileSourceOperation; begin Result := FFileSource.CreateCalcChecksumOperation(theFiles, aTargetPath, aTargetMask); end; function TMultiListFileSource.CreateCalcStatisticsOperation(var theFiles: TFiles): TFileSourceOperation; begin Result := FFileSource.CreateCalcStatisticsOperation(theFiles); end; function TMultiListFileSource.CreateSetFilePropertyOperation(var theTargetFiles: TFiles; var theNewProperties: TFileProperties): TFileSourceOperation; begin Result := FFileSource.CreateSetFilePropertyOperation(theTargetFiles, theNewProperties); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcetestarchiveoperation.pas���������������������������������0000644�0001750�0000144�00000011400�11747211345�025045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceTestArchiveOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSource, uFile; type // Statistics for TestArchive operation. TFileSourceTestArchiveOperationStatistics = record ArchiveFile: String; CurrentFile: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Operation that test files in archive. } { TFileSourceTestArchiveOperation } TFileSourceTestArchiveOperation = class(TFileSourceOperation) private FStatistics: TFileSourceTestArchiveOperationStatistics; FStatisticsAtStartTime: TFileSourceTestArchiveOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FSourceFileSource: IFileSource; FSourceFiles: TFiles; protected function GetID: TFileSourceOperationType; override; procedure UpdateStatistics(var NewStatistics: TFileSourceTestArchiveOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property SourceFiles: TFiles read FSourceFiles; public {en @param(aSourceFileSource File source from which the files will be copied.) @param(theSourceFiles Files which are to be copied. Class takes ownership of the pointer.) } constructor Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceTestArchiveOperationStatistics; end; implementation uses uDCUtils, uLng; // -- TFileSourceTestArchiveOperation ------------------------------------------------ constructor TFileSourceTestArchiveOperation.Create(aSourceFileSource: IFileSource; var theSourceFiles: TFiles); begin with FStatistics do begin ArchiveFile := ''; CurrentFile := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; inherited Create(aSourceFileSource); FSourceFileSource := aSourceFileSource; FSourceFiles := theSourceFiles; theSourceFiles := nil; end; destructor TFileSourceTestArchiveOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FSourceFiles) then FreeAndNil(FSourceFiles); end; function TFileSourceTestArchiveOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperTestingSomething, [SourceFiles[0].Name]) else Result := Format(rsOperTestingIn, [SourceFiles.Path]); end; else Result := rsOperTesting; end; end; function TFileSourceTestArchiveOperation.GetID: TFileSourceOperationType; begin Result:= fsoTestArchive; end; procedure TFileSourceTestArchiveOperation.UpdateStatistics(var NewStatistics: TFileSourceTestArchiveOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes/TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceTestArchiveOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceTestArchiveOperation.RetrieveStatistics: TFileSourceTestArchiveOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceproperty.pas���������������������������������������������0000644�0001750�0000144�00000002661�12673524511�022501� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceProperty; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFileSourceProperty = ( {en Set, if the files are available directly (for example: real file system). Not sure what it would do yet, but I'll leave it for now. } fspDirectAccess, {en Set, if filenames are case sensitive. } fspCaseSensitive, {en Set, if the file source has virtual files (like a VFS list, or results from searching, etc.). Non-virtual files are all files that are physical (regardless if they are directly accessible). } fspVirtual, {en Set, if the files are links to local files that available directly (for example: results from searching, etc.). } fspLinksToLocalFiles, {en Set, if the file source uses TFileSourceConnection objects for access by operations. } fspUsesConnections, {en Set, if the file source supports file listing on main thread only. } fspListOnMainThread, {en Set, if the file source supports copy in on the main thread only. } fspCopyInOnMainThread, {en Set, if the file source supports copy out on the main thread only. } fspCopyOutOnMainThread, {en Set, if the file source supports flat listing mode. } fspListFlatView ); TFileSourceProperties = set of TFileSourceProperty; implementation end. �������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourceoperationmisc.pas����������������������������������������0000644�0001750�0000144�00000004627�12646423065�023477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Miscellaneous functions for file source operations and queues. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.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 uFileSourceOperationMisc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSourceOperation, uOperationsManager; function GetOperationStateString(OperationState: TFileSourceOperationState): String; function GetProgressString(const Progress: Double): String; procedure ShowOperation(OpManItem: TOperationsManagerItem); procedure ShowOperationModal(OpManItem: TOperationsManagerItem); implementation uses fFileOpDlg, uGlobs; function GetOperationStateString(OperationState: TFileSourceOperationState): String; begin if OperationState <> fsosRunning then Result := ' [' + FileSourceOperationStateText[OperationState] + ']' else Result := ''; end; function GetProgressString(const Progress: Double): String; begin Result := FloatToStrF(Progress * 100, ffFixed, 0, 0) + '%'; end; procedure ShowOperation(OpManItem: TOperationsManagerItem); var Options: TOperationProgressWindowOptions = []; begin if OpManItem.Queue.IsFree or (OpManItem.Queue.Count = 1) then begin if gFileOperationsProgressKind in [fopkSeparateWindow, fopkSeparateWindowMinimized] then begin if gFileOperationsProgressKind = fopkSeparateWindowMinimized then Options := Options + [opwoStartMinimized]; TfrmFileOp.ShowFor(OpManItem.Handle, Options); end; end; end; procedure ShowOperationModal(OpManItem: TOperationsManagerItem); begin with TfrmFileOp.Create(OpManItem.Queue.Identifier) do try ShowModal; finally Free; end; end; end. ���������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/filesources/ufilesourcecopyoperation.pas����������������������������������������0000644�0001750�0000144�00000020021�12566670272�023505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileSourceCopyOperation; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs, uFileSourceOperation, uFileSourceOperationTypes, uFileSourceOperationOptions, uFileSource, uFile; type // Statistics are the same for CopyIn and CopyOut operations. TFileSourceCopyOperationStatistics = record CurrentFileFrom: String; CurrentFileTo: String; CurrentFileTotalBytes: Int64; CurrentFileDoneBytes: Int64; TotalFiles: Int64; DoneFiles: Int64; TotalBytes: Int64; DoneBytes: Int64; BytesPerSecond: Int64; RemainingTime: TDateTime; end; {en Base class for CopyIn and CopyOut operations. } { TFileSourceCopyOperation } TFileSourceCopyOperation = class(TFileSourceOperation) private FStatistics: TFileSourceCopyOperationStatistics; FStatisticsAtStartTime: TFileSourceCopyOperationStatistics; FStatisticsLock: TCriticalSection; //<en For synchronizing statistics. FSourceFileSource: IFileSource; FTargetFileSource: IFileSource; FSourceFiles: TFiles; FTargetPath: String; FRenameMask: String; protected FFileExistsOption: TFileSourceOperationOptionFileExists; FDirExistsOption: TFileSourceOperationOptionDirectoryExists; protected function GetID: TFileSourceOperationType; override; procedure DoReloadFileSources; override; procedure UpdateStatistics(var NewStatistics: TFileSourceCopyOperationStatistics); procedure UpdateStatisticsAtStartTime; override; property TargetPath: String read FTargetPath; public {en @param(aSourceFileSource File source from which the files will be copied.) @param(aTargetFileSource File source to which the files will be copied.) @param(theSourceFiles Files which are to be copied. Class takes ownership of the pointer.) @param(aTargetPath Path in the target file source where the files should be copied to.) } constructor Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); virtual reintroduce; destructor Destroy; override; function GetDescription(Details: TFileSourceOperationDescriptionDetails): String; override; function RetrieveStatistics: TFileSourceCopyOperationStatistics; property SourceFiles: TFiles read FSourceFiles; property SourceFileSource: IFileSource read FSourceFileSource; property TargetFileSource: IFileSource read FTargetFileSource; property RenameMask: String read FRenameMask write FRenameMask; property FileExistsOption: TFileSourceOperationOptionFileExists read FFileExistsOption write FFileExistsOption; property DirExistsOption: TFileSourceOperationOptionDirectoryExists read FDirExistsOption write FDirExistsOption; end; {en Operation that copies files from another file source into a file source of specific type (to file system for TFileSystemCopyInOperation, to network for TNetworkCopyInOperation, etc.). Source file source must be a file system file source. (Or is it enough if it's a file source with directly accessible files ? (DirectAccess flag)) Target file source should match the class type. Example meaning of this operation: - archive: pack - network: upload } TFileSourceCopyInOperation = class(TFileSourceCopyOperation) protected function GetID: TFileSourceOperationType; override; end; {en Operation that copies files into another file source from a file source of specific type (from file system for TFileSystemCopyOutOperation, from network for TNetworkCopyOutOperation, etc.). Source file source should match the class type. Target file source must be a file system file source. (Or is it enough if it's a file source with directly accessible files ? (DirectAccess flag)) Example meaning of this operation: - archive: unpack - network: download } TFileSourceCopyOutOperation = class(TFileSourceCopyOperation) protected function GetID: TFileSourceOperationType; override; end; implementation uses uDCUtils, uLng; // -- TFileSourceCopyOperation ------------------------------------------------ constructor TFileSourceCopyOperation.Create(aSourceFileSource: IFileSource; aTargetFileSource: IFileSource; var theSourceFiles: TFiles; aTargetPath: String); begin with FStatistics do begin CurrentFileFrom := ''; CurrentFileTo := ''; TotalFiles := 0; DoneFiles := 0; TotalBytes := 0; DoneBytes := 0; CurrentFileTotalBytes := 0; CurrentFileDoneBytes := 0; BytesPerSecond := 0; RemainingTime := 0; end; FStatisticsLock := TCriticalSection.Create; case GetID of fsoCopy, fsoCopyIn: // Copy into target - run on target. inherited Create(aTargetFileSource); fsoCopyOut: // Copy out from source - run on source. inherited Create(aSourceFileSource); else raise Exception.Create('Invalid file source type'); end; FSourceFileSource := aSourceFileSource; FTargetFileSource := aTargetFileSource; FSourceFiles := theSourceFiles; theSourceFiles := nil; FTargetPath := IncludeTrailingPathDelimiter(aTargetPath); FRenameMask := ''; end; destructor TFileSourceCopyOperation.Destroy; begin inherited Destroy; if Assigned(FStatisticsLock) then FreeAndNil(FStatisticsLock); if Assigned(FSourceFiles) then FreeAndNil(FSourceFiles); end; function TFileSourceCopyOperation.GetID: TFileSourceOperationType; begin Result:= fsoCopy; end; procedure TFileSourceCopyOperation.DoReloadFileSources; begin FTargetFileSource.Reload(FTargetPath); end; function TFileSourceCopyOperation.GetDescription(Details: TFileSourceOperationDescriptionDetails): String; begin case Details of fsoddJobAndTarget: begin if SourceFiles.Count = 1 then Result := Format(rsOperCopyingSomethingTo, [SourceFiles[0].Name, TargetPath]) else Result := Format(rsOperCopyingFromTo, [SourceFiles.Path, TargetPath]); end; else Result := rsOperCopying; end; end; procedure TFileSourceCopyOperation.UpdateStatistics(var NewStatistics: TFileSourceCopyOperationStatistics); begin FStatisticsLock.Acquire; try // Check if the value by which we calculate progress and remaining time has changed. if FStatistics.DoneBytes <> NewStatistics.DoneBytes then begin with NewStatistics do begin RemainingTime := EstimateRemainingTime(FStatisticsAtStartTime.DoneBytes, DoneBytes, TotalBytes, StartTime, SysUtils.Now, BytesPerSecond); // Update overall progress. if TotalBytes <> 0 then UpdateProgress(DoneBytes / TotalBytes); end; end; FStatistics := NewStatistics; finally FStatisticsLock.Release; end; end; procedure TFileSourceCopyOperation.UpdateStatisticsAtStartTime; begin FStatisticsLock.Acquire; try Self.FStatisticsAtStartTime := Self.FStatistics; finally FStatisticsLock.Release; end; end; function TFileSourceCopyOperation.RetrieveStatistics: TFileSourceCopyOperationStatistics; begin // Statistics have to be synchronized because there are multiple values // and they all have to be consistent at every moment. FStatisticsLock.Acquire; try Result := Self.FStatistics; finally FStatisticsLock.Release; end; end; // -- TFileSourceCopyInOperation ---------------------------------------------- function TFileSourceCopyInOperation.GetID: TFileSourceOperationType; begin Result := fsoCopyIn; end; // -- TFileSourceCopyOutOperation --------------------------------------------- function TFileSourceCopyOutOperation.GetID: TFileSourceOperationType; begin Result := fsoCopyOut; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ushellexecute.pas���������������������������������������������������������������0000644�0001750�0000144�00000103020�12612505011�016655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains some functions for open files in associated applications. Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 uShellExecute; {$mode objfpc}{$H+} interface uses Classes, uFile, uFileView, fMain; type TPrepareParameterOption = (ppoNormalizePathDelims, ppoReplaceTilde); TPrepareParameterOptions = set of TPrepareParameterOption; function PrepareParameter(sParam: string; paramFile: TFile = nil; options: TPrepareParameterOptions = []; pbShowCommandLinePriorToExecute: PBoolean = nil; pbRunInTerminal: PBoolean = nil; pbKeepTerminalOpen: PBoolean = nil): string; overload; {en Replace variable parameters that depend on files in panels. } function ReplaceVarParams(sSourceStr: string; paramFile: TFile = nil; pbShowCommandLinePriorToExecute: PBoolean = nil; pbRunInTerminal: PBoolean = nil; pbKeepTerminalOpen: PBoolean = nil): string; overload; {en Replace variable parameters that depend on the file in active dir. } function ProcessExtCommandFork(sCmd: string; sParams: string = ''; sWorkPath: string = ''; paramFile: TFile = nil; bTerm: boolean = False; bKeepTerminalOpen: boolean = False): boolean; function ShellExecuteEx(sActionName, sFileName, sActiveDir: string): boolean; implementation uses //Notes: StrUtils is here first, so because of visibility rules, if a called // routine name is present both in "StrUtils" and one of the following // it will be one of the following that will be used and not the one // "StrUtils". Make sure to let "StrUtils" at the first position. // "StrUtils" is here to have the "PosEx". //Lazarus, Free-Pascal, etc. StrUtils, Dialogs, SysUtils, Process, UTF8Process, LazUTF8, LConvEncoding, UnicodeUtils, //DC uShowMsg, uDCUtils, uLng, uFormCommands, fViewer, fEditor, uShowForm, uGlobs, uOSUtils, uFileSystemFileSource, DCOSUtils, DCStrUtils, DCClassesUtf8; //Dialogs, //LConvEncoding; (* Functions (without parameters they give output for all selected files): Miscellaneous: %? - as first parameter only, it will show report to show command line prior to execute %% - to use one time the percent sign "File related": ------------------------------------------------------------------------------ %f - only filename %d - only path of the file %p - path + filename %o - only the filename with no extension %e - only the file extension %v - only relative path + filename %D - current path in active or chosen panel %a - address + path + filename %A - current address in active or chosen panel %F - file list with file name only %L - file list with full file name %R - file list with relative path + file name %F, %L and %R - create a list file in the TEMP directory with the names of the selected files and directories, and appends the name of the list file to the command line "Choosing encoding" for %F, $L and %R (if not given, system encoding used): --------------------------------------------------------------------------- %X[U|W|Q] - where X is function %F, %L or %R U - UTF-8, W - UTF-16 (with byte order marker), Q - quote file name by double quotes "Choosing panel" (if not given, active panel is used): ------------------------------------------------------------------------------ %X[l|r|s|t] - where X is function (l - left, r - right, s - source, t - target) s - source or active panel (no matter if it's left or right) t - target or inactive panel (no matter if it's left or right) l - left panel r - right panel b - both panels, left first, right second p - both panels, active first, inactive second "Choosing selected files" (only for %f, %d, %p, %o and %e): ------------------------------------------------------------------------------ %X[<nr>] - where X is function <nr> is 1..n, where n is number of selected files. If there are no selected files, currently active file is nr 1. If <nr> is invalid or there is no selected file by that number the result for the whole function will be empty string. "Adding prefix, postfix before or after the result string": ------------------------------------------------------------------------------ %X[{<prefix>}][{<postfix>}] If applied to multiple files, each name is prefixed/postfixed. Control if %f, %d, etc... will return name between quotes or not ---------------------------------------------------------------- %" - will set default. For DC legacy is quoted %"0 - will make the result unquoted %"1 - will make the result quoted Control if %D, %d etc... will return path name with the ending delimiter or not ------------------------------------------------------------------------------- %/ - will set default. For DC legacy it was without ending delimited %/0 - will exclude the ending delimiter %/1 - will include the ending delimiter Prompt the user with a sentence, propose a default, and use what the user typed ------------------------------------------------------------------------------- %[Enter with required;1024] - This is an example. The text following the ";" indicates that default value is 1024 %[This required the \\DB-2010\ server to be online!] - if no default value is given, DC will simply shows the message, assuming it's simply to echo a message. Control what will be the effective "%" char (for situation where we want the "%" to be the "#" sign instead ----------------------------------------------------------------------------------------------------------- %# - Will set the percent-variable indicator to be the "#" character from now on when evaluating the line. Note that it will be evaluated -only- when the current percent-variable indicator is "%". #% - Will set the percent-variable indicator to be the "%" character from now on when evaluating the line. Note that it will be evaluated -only- when the current percent-variable indicator is "#". Control if it run in terminal, if it close it at the end or not --------------------------------------------------------------- %t - Will have it run in terminal for sure, close or not depend of the action requested %t0 - Will run in terminal AND request to close it at the end %t1 - Will run in terminal AND let it run at the end Above parameters can be combined together. ------------------------------------------------------------------------------ Order of params: - %function - quoting and encoding (only for %F, %L and %R) - left or right or source or target panel (optional) - nr of file (optional) - prefix, postfix (optional) Examples: %f1 - first selected file in active panel %pr2 - full path of second selected file in right panel %fl - only filenames from left panel %pr - full filenames from right panel %Dl - current path in left panel %f{-f } - prepend each name with "-f " (ex.: -f <file_1> -f <file_2>) %f{"}{"} - enclose each name in quotes (ex.: "<file_1>" "<file_2>") %f1{-first }%f2{ -second } - if only 1 file selected : -first <file_1> - if 2 (or more) files selected: -first <file_1> -second <file_2> *) function ReplaceVarParams(sSourceStr: string; paramFile: TFile; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean): string; type TFunctType = (ftNone, ftName, ftDir, ftPath, ftSingleDir, ftSource, ftSourcePath, ftFileFullList, ftFileNameList, ftRelativeFileNameList, ftNameNoExt, ftExtension, ftRelativePath, ftProcessPercentSignIndicator, ftJustSetTheShowFlag, ftSetTrailingDelimiter, ftSetQuoteOrNot, ftSetTerminalOptions, ftEchoSimpleMessage, ftPromptUserForParam, ftExecuteConsoleCommand); TFuncModifiers = set of (fmQuote, fmUTF8, fmUTF16); TStatePos = (spNone, spPercent, spFunction, spPrefix, spPostfix, spGotPrefix, spSide, spIndex, spUserInputOrEcho, spGotInputHintWaitEndDefaultVal, spGetExecuteConsoleCommand, spComplete); Tstate = record pos: TStatePos; functStartIndex: integer; funct: TFunctType; functMod: TFuncModifiers; files: TFiles; otherfiles: TFiles; dir: string; address: string; sFileIndex: string; prefix, postfix: string; // a string to add before/after each output // (for functions giving output of multiple strings) sSubParam: string; sUserMessage: string; end; var index: integer; leftFiles: TFiles = nil; rightFiles: TFiles = nil; activeFiles: TFiles; inactiveFiles: TFiles; singleFileFiles: TFiles = nil; activeDir: string; inactiveDir: string; activeAddress: string; inactiveAddress: string; state: Tstate; sOutput: string = ''; parseStartIndex: integer; bTrailingDelimiter: boolean = False; bQuoteOrNot: boolean = True; CurrentPercentIndicator: char = '%'; function BuildName(aFile: TFile): string; begin //1. Processing according to function requested case state.funct of ftName, ftDir, ftPath, ftNameNoExt, ftExtension, ftRelativePath, ftSingleDir, ftSource, ftSourcePath: begin ; case state.funct of ftName: Result := aFile.Name; ftDir: Result := aFile.Path; ftPath: Result := aFile.FullPath; ftNameNoExt: Result := aFile.NameNoExt; ftExtension: Result := aFile.Extension; ftRelativePath: Result := ExtractRelativepath(state.dir, aFile.FullPath); ftSingleDir: Result := state.dir; ftSource: Result := state.address; ftSourcePath: Result := state.address + aFile.FullPath; end; end; else Exit(''); end; //2. Processing the prefix/postfix requested Result := state.prefix + Result + state.postfix; //3. Processing the trailing path delimiter requested case state.funct of ftDir, ftSingleDir: begin if bTrailingDelimiter then Result := IncludeTrailingPathDelimiter(Result) else Result := ExcludeBackPathDelimiter(Result); end; end; //4. Processing the quotes requested if bQuoteOrNot then Result := QuoteStr(Result); end; function BuildAllNames: string; var i: integer; begin Result := ''; if Assigned(state.files) then for i := 0 to pred(state.files.Count) do Result := ConcatenateStrWithSpace(Result, BuildName(state.files[i])); if Assigned(state.otherfiles) then for i := 0 to pred(state.otherfiles.Count) do Result := ConcatenateStrWithSpace(Result, BuildName(state.otherfiles[i])); end; function BuildFile(aFile: TFile): string; begin case state.funct of ftFileFullList: Result := aFile.FullPath; ftFileNameList: Result := aFile.Name; ftRelativeFileNameList: Result := ExtractRelativepath(state.dir, aFile.FullPath); else Result := aFile.Name; end; if aFile.isDirectory then begin if bTrailingDelimiter then Result := IncludeTrailingPathDelimiter(Result) else Result := ExcludeBackPathDelimiter(Result); end; if (fmQuote in state.functMod) then Result := '"' + Result + '"'; if (fmUTF16 in state.functMod) then Result := Utf8ToUtf16LE(Result) else if not (fmUTF8 in state.functMod) then Result := UTF8ToSys(Result); end; function BuildFileList: String; var I: integer; FileName: ansistring; FileList: TFileStreamEx; LineEndingA: ansistring = LineEnding; begin Result := GetTempName(GetTempFolderDeletableAtTheEnd + 'Filelist') + '.lst'; try FileList := TFileStreamEx.Create(Result, fmCreate); try if fmUTF16 in state.functMod then begin FileName := UTF16LEBOM; LineEndingA := Utf8ToUtf16LE(LineEnding); end; if Assigned(state.files) then begin if state.files.Count > 0 then begin for I := 0 to state.files.Count - 1 do FileName += BuildFile(state.files[I]) + LineEndingA; end; end; if Assigned(state.otherfiles) then begin if state.otherfiles.Count > 0 then begin FileName += LineEndingA; for I := 0 to state.otherfiles.Count - 1 do FileName += BuildFile(state.otherfiles[I]) + LineEndingA; end; end; FileList.Write(FileName[1], Length(FileName)); finally FileList.Free; end; except Result := EmptyStr; end; end; procedure ResetState(var aState: TState); begin with aState do begin pos := spNone; if paramFile <> nil then files := singleFileFiles else files := activeFiles; otherfiles := nil; dir := activeDir; address := activeAddress; sFileIndex := ''; funct := ftNone; functMod := []; functStartIndex := 0; prefix := ''; postfix := ''; sSubParam := ''; sUserMessage := ''; end; end; procedure AddParsedText(limit: integer); begin // Copy [parseStartIndex .. limit - 1]. if limit > parseStartIndex then sOutput := sOutput + Copy(sSourceStr, parseStartIndex, limit - parseStartIndex); parseStartIndex := index; end; procedure SetTrailingPathDelimiter; begin bTrailingDelimiter := state.sSubParam = '1'; // Currently in the code, anything else than "0" will include the trailing delimiter. // BUT, officially, in the documentation, juste state that 0 or 1 is required. // This could give room for future addition maybe. end; procedure SetQuoteOrNot; begin bQuoteOrNot := not (state.sSubParam = '0'); // Currently in the code, anything else than "0" will indicate we want to quote // BUT, officially, in the documentation, juste state that 0 or 1 is required. // This could give room for future addition maybe. end; procedure SetTerminalOptions; begin if pbRunInTerminal <> nil then begin pbRunInTerminal^ := True; if pbKeepTerminalOpen <> nil then pbKeepTerminalOpen^ := not (state.sSubParam = '0'); end; end; procedure JustEchoTheMessage; begin msgOK(state.sUserMessage); end; procedure AskUserParamAndReplace; begin ShowInputQuery(state.sUserMessage, state.sUserMessage, state.sSubParam); sOutput := sOutput + state.sSubParam; end; procedure ExecuteConsoleCommand; var sTmpFilename, sShellCmdLine: string; Process: TProcessUTF8; begin sTmpFilename := GetTempName(GetTempFolderDeletableAtTheEnd) + '.tmp'; //sShellCmdLine := Copy(state.sSubParam, 3, length(state.sSubParam)-2) + ' > ' + QuoteStr(sTmpFilename); sShellCmdLine := state.sSubParam + ' > ' + QuoteStr(sTmpFilename); Process := TProcessUTF8.Create(nil); try Process.CommandLine := FormatShell(sShellCmdLine); Process.Options := [poNoConsole, poWaitOnExit]; Process.Execute; finally Process.Free; end; sOutput := sOutput + sTmpFilename; end; procedure ProcessPercentSignIndicator; begin if CurrentPercentIndicator = state.sSubParam then sOutput := sOutput + state.sSubParam else if CurrentPercentIndicator = '%' then CurrentPercentIndicator := '#' else CurrentPercentIndicator := '%'; end; procedure DoFunction; var fileIndex: integer = -1; OffsetFromStart: integer = 0; begin AddParsedText(state.functStartIndex); if state.sFileIndex <> '' then try fileIndex := StrToInt(state.sFileIndex); fileIndex := fileIndex - 1; // Files are counted from 0, but user enters 1..n. except on EConvertError do fileIndex := -1; end; if fileIndex <> -1 then begin if (fileIndex >= 0) and Assigned(state.files) then begin if fileIndex < state.files.Count then sOutput := sOutput + BuildName(state.files[fileIndex]); OffsetFromStart := state.files.Count; end; if ((fileIndex - OffsetFromStart) >= 0) and Assigned(state.otherfiles) then if (fileIndex - OffsetFromStart) < state.otherfiles.Count then sOutput := sOutput + BuildName(state.otherfiles[fileIndex - OffsetFromStart]); end else begin if state.funct in [ftName, ftPath, ftDir, ftNameNoExt, ftSourcePath, ftExtension, ftRelativePath] then sOutput := sOutput + BuildAllNames else if state.funct in [ftSingleDir, ftSource] then // only single current dir sOutput := sOutput + BuildName(nil) else if state.funct in [ftFileFullList, ftFileNameList, ftRelativeFileNameList] then // for list of file sOutput := sOutput + BuildFileList else if state.funct in [ftProcessPercentSignIndicator] then // only add % sign ProcessPercentSignIndicator else if state.funct in [ftJustSetTheShowFlag] then //only set the flag to show the params prior to execute begin if pbShowCommandLinePriorToExecute <> nil then pbShowCommandLinePriorToExecute^ := True; end else if state.funct in [ftSetTrailingDelimiter] then //set the trailing path delimiter SetTrailingPathDelimiter else if state.funct in [ftSetQuoteOrNot] then SetQuoteOrNot else if state.funct in [ftEchoSimpleMessage] then JustEchoTheMessage else if state.funct in [ftPromptUserForParam] then AskUserParamAndReplace else if state.funct in [ftSetTerminalOptions] then SetTerminalOptions else if state.funct in [ftExecuteConsoleCommand] then ExecuteConsoleCommand; end; ResetState(state); end; procedure ProcessNumber; begin case state.funct of ftSingleDir: state.pos := spComplete; // Numbers not allowed for %D ftSetTrailingDelimiter, ftSetQuoteOrNot, ftSetTerminalOptions: begin state.sSubParam := state.sSubParam + sSourceStr[index]; state.pos := spComplete; Inc(Index); end; else begin state.sFileIndex := state.sFileIndex + sSourceStr[index]; state.pos := spIndex; end; end; end; procedure ProcessOpenBracket; // '{' begin if state.pos <> spGotPrefix then state.pos := spPrefix else state.pos := spPostfix; end; begin try leftFiles := frmMain.FrameLeft.CloneSelectedOrActiveFiles; rightFiles := frmMain.FrameRight.CloneSelectedOrActiveFiles; if paramFile <> nil then begin singleFileFiles := TFiles.Create(paramFile.Path); singleFileFiles.Add(paramFile.Clone); end; if frmMain.ActiveFrame = frmMain.FrameLeft then begin activeFiles := leftFiles; activeDir := frmMain.FrameLeft.CurrentPath; activeAddress := frmMain.FrameLeft.CurrentAddress; inactiveFiles := rightFiles; inactiveDir := frmMain.FrameRight.CurrentPath; inactiveAddress := frmMain.FrameRight.CurrentAddress; end else begin activeFiles := rightFiles; activeDir := frmMain.FrameRight.CurrentPath; activeAddress := frmMain.FrameRight.CurrentAddress; inactiveFiles := leftFiles; inactiveDir := frmMain.FrameLeft.CurrentPath; inactiveAddress := frmMain.FrameLeft.CurrentAddress; end; index := 1; parseStartIndex := index; ResetState(state); while index <= Length(sSourceStr) do begin case state.pos of spNone: if sSourceStr[index] = CurrentPercentIndicator then begin state.pos := spPercent; state.functStartIndex := index; end; spPercent: case sSourceStr[index] of '?': begin state.funct := ftJustSetTheShowFlag; state.pos := spComplete; Inc(Index); end; '%', '#': begin state.funct := ftProcessPercentSignIndicator; state.sSubParam := sSourceStr[index]; state.pos := spComplete; Inc(Index); end; 'f', 'd', 'p', 'o', 'e', 'v', 'D', 'A', 'a', 'n', 'h', '/', '"', 't': begin case sSourceStr[index] of 'f': state.funct := ftName; 'd': state.funct := ftDir; 'p': state.funct := ftPath; 'o': state.funct := ftNameNoExt; 'e': state.funct := ftExtension; 'v': state.funct := ftRelativePath; 'D': state.funct := ftSingleDir; 'A': state.funct := ftSource; 'a': state.funct := ftSourcePath; '/': state.funct := ftSetTrailingDelimiter; '"': state.funct := ftSetQuoteOrNot; 't': state.funct := ftSetTerminalOptions; end; state.pos := spFunction; end; 'L', 'F', 'R': begin case sSourceStr[index] of 'L': state.funct := ftFileFullList; 'F': state.funct := ftFileNameList; 'R': state.funct := ftRelativeFileNameList; end; state.pos := spFunction; end; '[': begin state.pos := spUserInputOrEcho; end; '<': begin state.pos := spGetExecuteConsoleCommand; end; else ResetState(state); end; spFunction: case sSourceStr[index] of 'l', 'b': begin state.files := leftFiles; state.dir := frmMain.FrameLeft.CurrentPath; state.address := frmMain.FrameLeft.CurrentAddress; state.pos := spSide; if sSourceStr[index] = 'b' then state.otherfiles := rightFiles; end; 'r': begin state.files := rightFiles; state.dir := frmMain.FrameRight.CurrentPath; state.address := frmMain.FrameRight.CurrentAddress; state.pos := spSide; end; 's', 'p': begin state.files := activeFiles; state.dir := activeDir; state.address := activeAddress; state.pos := spSide; if sSourceStr[index] = 'p' then state.otherfiles := inactiveFiles; end; 't': begin state.files := inactiveFiles; state.dir := inactiveDir; state.address := inactiveAddress; state.pos := spSide; end; 'U': begin state.functMod += [fmUTF8]; state.pos := spFunction; end; 'W': begin state.functMod += [fmUTF16]; state.pos := spFunction; end; 'Q': begin state.functMod += [fmQuote]; state.pos := spFunction; end; '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spSide: case sSourceStr[index] of '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spIndex: case sSourceStr[index] of '0'..'9': ProcessNumber; '{': ProcessOpenBracket; else state.pos := spComplete; end; spPrefix, spPostfix: case sSourceStr[index] of '}': begin if state.pos = spPostfix then begin Inc(index); // include closing bracket in the function state.pos := spComplete; end else state.pos := spGotPrefix; end; else begin case state.pos of spPrefix: state.prefix := state.prefix + sSourceStr[index]; spPostfix: state.postfix := state.postfix + sSourceStr[index]; end; end; end; spGotPrefix: case sSourceStr[index] of '{': ProcessOpenBracket; else state.pos := spComplete; end; spUserInputOrEcho: begin case sSourceStr[index] of ';': begin state.pos := spGotInputHintWaitEndDefaultVal; end; ']': begin state.funct := ftEchoSimpleMessage; state.pos := spComplete; Inc(Index); end; else State.sUserMessage := State.sUserMessage + sSourceStr[index]; end; end; spGotInputHintWaitEndDefaultVal: begin case sSourceStr[index] of ']': begin state.funct := ftPromptUserForParam; state.pos := spComplete; Inc(Index); end; else State.sSubParam := State.sSubParam + sSourceStr[index]; end; end; spGetExecuteConsoleCommand: begin case sSourceStr[index] of '>': begin state.funct := ftExecuteConsoleCommand; state.pos := spComplete; Inc(Index); end; else State.sSubParam := State.sSubParam + sSourceStr[index]; end; end; end; if state.pos <> spComplete then Inc(index) // check next character else // Process function and then check current character again after resetting state. DoFunction; end; // Finish current parse. if state.pos in [spFunction, spSide, spIndex, spGotPrefix] then DoFunction else AddParsedText(index); Result := sOutput; finally if Assigned(leftFiles) then FreeAndNil(leftFiles); if Assigned(rightFiles) then FreeAndNil(rightFiles); if Assigned(singleFileFiles) then FreeAndNil(singleFileFiles); end; end; { PrepareParameter } function PrepareParameter(sParam: string; paramFile: TFile; options: TPrepareParameterOptions; pbShowCommandLinePriorToExecute: PBoolean; pbRunInTerminal: PBoolean; pbKeepTerminalOpen: PBoolean): string; begin Result := sParam; if ppoNormalizePathDelims in Options then Result := NormalizePathDelimiters(Result); if ppoReplaceTilde in Options then Result := ReplaceTilde(Result); Result := ReplaceEnvVars(Result); Result := ReplaceVarParams(Result, paramFile, pbShowCommandLinePriorToExecute, pbRunInTerminal, pbKeepTerminalOpen); Result := Trim(Result); end; { ProcessExtCommandFork } function ProcessExtCommandFork(sCmd, sParams, sWorkPath: string; paramFile: TFile; bTerm: boolean; bKeepTerminalOpen: boolean): boolean; var sTmpFile, sShellCmdLine: string; iStart, iCount: integer; iLastConsoleCommandPos: integer = 0; Process: TProcessUTF8; sl: TStringList; bShowCommandLinePriorToExecute: boolean = False; begin Result := False; // 1. Parse the command, parameters and working directory for the percent-variable substitution. sCmd := PrepareParameter(sCmd, paramFile, [ppoReplaceTilde]); sParams := PrepareParameter(sParams, paramFile, [], @bShowCommandLinePriorToExecute, @bTerm, @bKeepTerminalOpen); sWorkPath := PrepareParameter(sWorkPath, paramFile, [ppoNormalizePathDelims, ppoReplaceTilde]); // 2. If working directory has been specified, let's switch to it. if sWorkPath <> '' then mbSetCurrentDir(sWorkPath); // 3. If user has command-line to execute and get the result to a file, let's execute it. // Check for <? ?> command. // This command is used to put output of some console program to a file so // that the file can then be viewed. The command is between '<?' and '?>'. // The whole <?...?> expression is replaced with a path to the temporary file // containing output of the command. // For example: // {!VIEWER} <?rpm -qivlp --scripts %p?> // Show in Viewer information about RPM package repeat iStart := Posex('<?', sParams, (iLastConsoleCommandPos + 1)) + 2; iCount := Posex('?>', sParams, iStart) - iStart; if (iStart <> 0) and (iCount >= 0) then begin sTmpFile := GetTempName(GetTempFolderDeletableAtTheEnd) + '.tmp'; sShellCmdLine := Copy(sParams, iStart, iCount) + ' > ' + QuoteStr(sTmpFile); Process := TProcessUTF8.Create(nil); try Process.CommandLine := FormatShell(sShellCmdLine); Process.Options := [poNoConsole, poWaitOnExit]; Process.Execute; finally Process.Free; end; sParams := Copy(sParams, 1, iStart - 3) + sTmpFile + Copy(sParams, iStart + iCount + 2, MaxInt); iLastConsoleCommandPos := iStart; end; until ((iStart = 0) or (iCount < 0)); //4. If user user wanted to execute an internal command, let's do it. if frmMain.Commands.Commands.ExecuteCommand(sCmd, [sParams]) = cfrSuccess then begin Result := True; exit; end; //5. From legacy, invoking shell seems to be similar to "run in terminal with stay open" with param as-is if Pos('{!SHELL}', sCmd) > 0 then begin sCmd := sParams; sParams := ''; bTerm := True; bKeepTerminalOpen := True; end; //6. If user wants to process via terminal (and close at the end), let's flag it. if Pos('{!TERMANDCLOSE}', sCmd) > 0 then begin sCmd := RemoveQuotation(sParams); sParams := ''; bTerm := True; end; //7. If user wants to process via terminal (and close at the end), let's flag it. if Pos('{!TERMSTAYOPEN}', sCmd) > 0 then begin sCmd := RemoveQuotation(sParams); sParams := ''; bTerm := True; bKeepTerminalOpen := True; end; //8. If our end-job is to EDIT a file via what's configured as editor, let's do it. if Pos('{!EDITOR}', sCmd) > 0 then begin uShowForm.ShowEditorByGlob(RemoveQuotation(sParams)); Result := True; Exit; end; //9. If our end-job is to EDIT a file via internal editor, let's do it. if Pos('{!DC-EDITOR}', sCmd) > 0 then begin fEditor.ShowEditor(RemoveQuotation(sParams)); Result := True; Exit; end; //10. If our end-job is to VIEW a file via what's configured as viewer, let's do it. if Pos('{!VIEWER}', sCmd) > 0 then begin uShowForm.ShowViewerByGlob(RemoveQuotation(sParams)); Result := True; Exit; end; //11. If our end-job is to VIEW a file or files via internal viewer, let's do it. if Pos('{!DC-VIEWER}', sCmd) > 0 then begin sl := TStringList.Create; try sl.Add(RemoveQuotation(sParams)); fViewer.ShowViewer(sl); Result := True; finally FreeAndNil(sl); end; Exit; end; //12. Ok. If we're here now it's to execute something external so let's launch it! try Result := ExecCmdFork(sCmd, sParams, sWorkPath, bShowCommandLinePriorToExecute, bTerm, bKeepTerminalOpen); except on e: EInvalidCommandLine do begin MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); Result := False; end; end; end; function ShellExecuteEx(sActionName, sFileName, sActiveDir: string): boolean; var aFile: TFile; sCmd, sParams, sStartPath: string; begin Result := False; // Executing files directly only works for FileSystem. aFile := TFileSystemFileSource.CreateFileFromFile(sFileName); try if gExts.GetExtActionCmd(aFile, sActionName, sCmd, sParams, sStartPath) then begin Result := ProcessExtCommandFork(sCmd, sParams, sStartPath, aFile); end; if not Result then begin mbSetCurrentDir(sActiveDir); Result := ShellExecute(sFileName); end; finally FreeAndNil(aFile); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fMsg.pas������������������������������������������������������������������������0000644�0001750�0000144�00000004127�12404343455�014715� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fMsg; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls, Menus, uOSForms; type { TfrmMsg } TfrmMsg = class(TModalForm) lblMsg: TLabel; pnlButtons: TPanel; mnuOther: TPopupMenu; procedure FormCreate(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } Escape: Integer; iSelected: Integer; procedure ButtonClick(Sender:TObject); procedure ButtonOtherClick(Sender:TObject); procedure MouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; implementation {$R *.lfm} {$IF DEFINED(LCLGTK2)} uses LCLType, LCLVersion; {$ENDIF} procedure TfrmMsg.FormCreate(Sender: TObject); begin iSelected:= -1; end; procedure TfrmMsg.ButtonClick(Sender: TObject); begin iSelected:= (Sender as TComponent).Tag; Close; end; procedure TfrmMsg.MouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} if (Button = mbLeft) and (Sender = FindLCLControl(Mouse.CursorPos)) then begin iSelected:= (Sender as TButton).Tag; Close; end; {$ENDIF} end; procedure TfrmMsg.FormKeyPress(Sender: TObject; var Key: Char); begin if (Key = #27) and (Escape >= 0) then begin iSelected:= Escape; Close; end; end; procedure TfrmMsg.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin {$IF DEFINED(LCLGTK2) and (lcl_fullversion < 093100)} if Key = VK_RETURN then // Lazarus issue 0021483. ControlKeyUp not called after Enter pressed. Application.ControlKeyUp(ActiveControl, Key, Shift); {$ENDIF} end; procedure TfrmMsg.ButtonOtherClick(Sender: TObject); var Point: TPoint; Button: TButton absolute Sender; begin Point.X:= Button.Left; Point.Y:= Button.Top + Button.Height; Point:= pnlButtons.ClientToScreen(Point); mnuOther.PopUp(Point.X, Point.Y); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uimcode.pas���������������������������������������������������������������������0000644�0001750�0000144�00000211526�12626406755�015462� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uIMCode; interface function MakeSpellCode(stText: UnicodeString): String; { iMode 二进制功能位说明 X X X X X X X X X X X X X X X X 3 2 1 1: 0 - 只取各个汉字声母的第一个字母; 1 - 全取 2: 0 - 遇到不能翻译的字符不翻译; 1 - 翻译成 '?' (本选项目针对全角字符) 3: 0 - 生成的串不包括非数字, 字母的其他字符; 1 - 包括 (控制全角的要输出非数字, 字母字符的; 半角的非数字, 字母字符) } implementation uses SysUtils, LazUTF8; const strChineseCharList: array [1..270] of String = ( 'A阿啊锕嗄厑哎哀唉埃挨溾锿鎄啀捱皑凒溰嘊敳皚癌毐昹嗳矮蔼躷噯藹譪霭靄艾伌爱砹硋隘嗌塧嫒愛碍暧瑷僾壒嬡懓薆曖璦鴱皧瞹馤鑀鱫安侒峖桉氨庵谙萻腤鹌蓭誝鞌鞍盦馣鮟盫韽啽雸垵', 'A俺唵埯铵隌揞罯銨犴岸按荌案胺豻堓婩暗貋儑錌黯肮岇昂昻枊盎醠凹坳垇柪軪爊敖厫隞嗷嗸嶅廒滶獒獓遨熬璈蔜翱聱螯翶謷翺鳌鏖鰲鷔鼇芺袄媪镺襖岙扷岰傲奡奥嫯慠骜奧嶴澳懊擙謸鏊', 'B八仈巴叭扒朳玐吧夿岜芭疤哵捌笆粑紦羓蚆釟豝鲃魞叐犮抜坺妭拔茇炦癹胈釛菝詙跋軷魃把靶坝弝爸垻罢鲅鮁覇矲霸壩灞欛挀掰白百佰柏栢捭竡粨摆擺襬呗拝败拜唄敗稗粺鞁薭贁兡瓸扳', 'B攽班般颁斑搬斒瘢螁癍辬阪坂岅昄板版瓪钣粄舨鈑蝂魬办半伴扮姅怑拌绊秚絆鉡靽辦瓣邦峀垹帮捠梆浜邫幇幚縍幫鞤绑綁榜膀玤蚌傍棒谤塝稖蒡蜯磅镑艕謗勹包佨孢苞胞笣煲龅蕔褒闁齙', 'B窇嫑雹宝怉饱保鸨珤堡堢媬葆寚飹飽褓駂鳵緥鴇賲藵寳寶靌勽报抱豹趵菢鲍靤骲暴髱虣儤曓爆忁鑤萡陂卑杯盃桮悲揹碑鹎藣鵯喺北鉳贝狈貝邶备昁牬苝背钡俻倍悖狽被偝偹梖珼鄁備僃惫', 'B焙軰辈愂碚禙蓓蛽犕褙誖骳輩鋇憊糒鞴鐾奔泍贲倴渀逩犇锛錛本苯奙畚楍坌捹桳笨撪輽伻崩绷閍嵭嘣綳繃甭埲菶琫鞛泵迸塴甏镚蹦鏰屄毴逼豍鲾鵖鰏柲荸鼻嬶匕比夶朼佊吡妣沘疕彼柀秕', 'B俾笔粊舭筆鄙聛貏匂币必毕闭佖坒庇诐邲妼怭畀畁哔毖珌疪荜陛毙狴畢袐铋婢庳敝梐萆萞閇閉堛弻弼愊愎湢皕禆筚詖貱赑嗶彃楅滗滭煏痹腷蓖蓽蜌裨跸閟飶幣弊熚獙碧箅綼蔽鄪馝幤潷獘', 'B罼襅駜髲壁嬖廦篦篳縪薜觱避鮅斃濞臂蹕髀奰璧鄨饆繴襞襣鏎鞸韠躃躄魓贔鐴驆鷝鷩鼊边砭笾编煸甂箯編蝙獱邉鍽鳊邊鞭鯾鯿籩炞贬扁窆匾惼碥稨褊糄鴘藊卞弁忭抃汳汴苄釆峅便变変昪', 'B覍揙缏遍辡艑辧辨辩辫辮變彪标飑髟猋脿墂幖滮骠標熛膘瘭镖飙飚儦颷瀌爂臕贆鏢镳飆飇飈飊鑣表婊裱諘褾錶檦俵鳔鰾憋鳖鱉鼈虌龞別别咇莂蛂徶襒蟞蹩瘪癟彆邠宾彬傧斌椕滨缤槟瑸賓', 'B賔镔儐濒濱濵虨豳瀕霦繽蠙鑌顮氞摈殡膑髩擯鬂殯臏髌鬓髕鬢仌氷冰兵栟掤梹鋲檳丙邴陃怲抦秉苪昺柄炳饼窉蛃棅禀鈵鞆餅餠燷并並併幷垪庰倂栤病竝偋傡寎摒誁鮩靐癶拨波玻剥盋袯钵', 'B饽啵紴缽脖菠鉢僠嶓播餑蹳驋鱍仢伯孛驳帛泊狛瓝侼勃胉郣亳挬浡秡钹铂舶博渤葧鹁愽搏鈸鉑馎鲌僰煿牔箔膊艊馛駁踣鋍镈薄駮鮊懪礡簙鎛餺鵓犦欂襮礴鑮跛箥簸孹擘檗糪譒蘗蔔峬庯逋', 'B钸晡鈽誧餔轐醭卜卟补哺捕補鳪鸔不布佈步咘怖歨歩钚勏埗悑部埠瓿廍蔀踄篰餢簿玢佛夯宀疒瀑', 'C嚓擦礤礸遪猜才材财財戝裁采倸埰婇寀彩採睬跴綵踩菜棌蔡縩乲参飡骖湌嬠餐驂残蚕惭殘慚蝅慙蠶蠺惨慘噆憯黪黲灿粲儏澯薒燦璨爘仓仺伧沧苍倉舱傖凔嵢滄獊蒼濸艙螥罉藏欌鑶賶撡操', 'C糙曺曹嘈嶆漕蓸槽褿艚螬鏪艹艸草愺騲肏襙册侧厕恻测荝敇萗惻測策萴筞蓛墄箣憡嵾膥岑梣涔噌层層竲驓蹭硛硳岾猠乽叉芆杈肞臿訍偛嗏插馇銟锸艖疀鍤餷垞查査茬茶嵖搽猹靫槎察碴檫', 'C衩镲鑔奼汊岔侘诧姹差紁拆钗釵犲侪柴祡豺喍儕虿袃瘥蠆囆辿觇梴掺搀鋓幨婵谗孱棎湹禅馋嬋煘缠獑蝉誗鋋廛潹潺緾磛毚鄽镡瀍儳劖蟾酁嚵壥巉瀺纏纒躔镵艬讒鑱饞产刬旵丳浐剗谄產産', 'C铲阐蒇剷嵼滻幝蕆諂閳簅冁繟醦鏟闡囅灛讇忏硟摲懴颤懺羼韂伥昌娼淐猖菖阊晿椙琩裮锠錩鲳鯧鼚兏肠苌尝偿常徜瓺萇甞腸嘗嫦瑺膓鋿償嚐蟐鲿鏛鱨厂场昶惝敞僘厰廠氅鋹怅玚畅倡鬯唱', 'C悵暢畼誯韔抄弨怊欩钞焯超鈔繛牊晁巢巣朝鄛漅嘲潮窲罺轈吵炒眧煼麨巐仦耖觘车車砗唓莗硨蛼扯偖撦屮彻坼迠烢聅掣硩頙徹撤澈勶瞮爡抻郴棽琛嗔諃賝尘臣忱沉辰陈茞宸烥莐敐晨訦谌', 'C揨煁蔯塵樄瘎霃螴諶薼麎曟鷐趻硶碜墋夦磣踸贂闯衬疢称龀趁榇稱齓齔嚫谶襯讖阷泟柽爯棦浾偁蛏铛牚琤赪憆摚靗撐撑緽橕瞠赬頳檉竀穪蟶鏳鏿饓丞成呈承枨诚郕城宬峸洆荿乘埕挰珹掁', 'C窚脭铖堘惩棖椉程筬絾裎塍塖溗碀誠畻酲鋮澂澄橙檙鯎瀓懲騬悜逞骋庱睈騁秤吃妛杘侙哧彨蚩鸱瓻眵笞訵嗤媸摛痴瞝螭鴟鵄癡魑齝攡麶彲黐弛池驰迟岻茌持竾荎淔筂貾遅馳墀踟篪謘尺叺', 'C呎肔侈卶齿垑胣恥耻蚇豉欼歯裭鉹褫齒彳叱斥灻赤饬抶勅恜炽翄翅敕烾痓啻湁傺痸腟鉓雴憏翤遫慗瘛翨熾懘趩饎鶒鷘充冲忡沖茺浺珫翀舂嘃摏憃憧衝罿艟蹖虫崇崈隀宠铳銃抽瘳篘犨犫仇', 'C俦帱栦惆绸菗畴絒愁皗稠筹酧酬踌雔嬦懤燽雠疇躊讎讐丑丒吜杽侴瞅醜矁魗臭遚殠出岀初摴樗貙齣刍除厨滁蒢豠锄榋耡蒭蜍趎雏犓廚篨橱懨幮櫉蟵躇櫥蹰鶵躕杵础椘储楮禇楚褚濋儲檚璴', 'C礎齭齼亍処处竌怵拀绌豖竐珿絀傗琡鄐搐触踀閦儊憷橻斶歜臅黜觸矗搋膗揣啜嘬踹巛川氚穿剶瑏传舡船圌遄椽歂暷輲舛荈喘僢汌串玔钏釧賗刅囱疮窓窗牎摐牕瘡窻床牀噇傸磢闖创怆刱剏', 'C剙愴吹炊龡垂桘陲捶菙棰槌锤錘顀旾杶春萅堾媋暙椿槆瑃箺蝽橁櫄鰆鶞纯陙唇浱莼淳脣犉滣蒓鹑漘醇醕鯙偆萶惷睶賰踳蠢踔戳辵娖惙涰绰逴辍酫綽輟龊擉磭歠嚽齪鑡呲玼疵趀偨词珁垐柌', 'C祠茈茨瓷詞辝慈甆辞磁雌鹚糍辤飺餈嬨濨鴜礠辭鶿鷀此佌皉朿次佽刺刾庛茦栨莿絘蛓赐螆賜嗭从匆囪苁忩枞茐怱悤焧葱漗聡蔥骢暰樬瑽璁聦聪瞛篵聰蟌繱鏦騘驄丛従婃孮徖悰淙琮慒誴賨', 'C賩樷藂叢灇欉爜謥凑湊楱腠辏輳粗觕麁麄麤徂殂促猝媨瘄蔟誎趗憱醋瘯簇縬蹙鼀蹴蹵顣汆撺镩蹿攛躥鑹攅櫕巑窜熶篡殩簒竄爨崔催凗墔慛摧榱獕磪鏙乼漼璀皠忰疩翆脃脆啐啛悴淬萃毳焠', 'C瘁粹翠膵膬竁襊臎邨村皴澊竴存刌忖寸籿搓瑳遳磋撮蹉醝髊虘嵯嵳痤矬蒫鹾鹺齹脞剉剒厝夎挫莝莡措逪棤锉蓌错銼刂刹畜曾膪澶骣粢', 'D詫襜燀譂奲虰坘蚳赿跮揰裯儔幬篅搥錞踧吋咑哒耷畣搭嗒褡噠墶达妲怛垯炟羍荙匒笪答詚跶瘩靼薘鞑燵繨蟽躂鐽龖龘打大亣眔橽呆獃懛歹傣代汏轪侢垈岱帒甙绐迨带待怠柋殆玳贷帯軑埭', 'D帶紿袋逮軩瑇叇曃緿鮘鴏戴艜黛簤瀻霴襶靆丹妉单担眈砃耼耽郸聃躭媅殚瘅匰箪褝鄲頕儋勯殫襌簞聸刐狚玬瓭胆衴疸紞掸馾澸黕膽旦但帎沊泹诞柦疍啖啗弹惮淡萏蛋啿氮腅蜑觛窞誕噉髧', 'D憚憺澹禫駳鴠甔癚嚪贉霮饏当珰裆筜當儅噹澢璫襠簹艡蟷挡党谠擋譡灙讜氹凼圵宕砀垱荡档菪瓽雼碭瞊趤壋檔璗盪礑刀叨屶忉氘舠釖鱽魛捯导岛陦倒島捣祷禂搗隝嶋嶌槝導隯壔嶹擣蹈禱', 'D到悼盗菿椡盜道稲噵稻衜檤衟翿軇瓙纛恴得淂悳惪锝嘚徳德鍀的揼扥扽灯登豋噔嬁燈璒竳簦艠覴蹬等戥邓凳鄧隥墱嶝瞪磴镫櫈鐙仾低彽袛啲埞羝隄堤趆嘀滴镝磾鞮鏑廸狄肑籴苖迪唙敌涤', 'D荻梑笛觌靮滌嫡蔋蔐頔魡敵嚁藡豴糴鸐氐厎诋邸阺呧坻底弤抵柢砥掋菧軧聜骶鯳地弟旳杕玓怟枤俤帝埊娣递逓偙梊焍眱祶第菂谛釱棣睇缔蒂僀禘腣鉪馰墑墬碲蔕慸甋締嶳螮嗲敁掂傎厧嵮', 'D滇槙瘨颠蹎巅癫巓巔攧癲齻典奌点婰敟椣碘蒧蕇踮电佃甸阽坫店垫扂玷钿婝惦淀奠琔殿蜔電墊壂橂澱靛磹癜簟驔刁叼汈刟虭凋奝弴彫蛁琱貂碉殦瞗雕鮉鲷簓鼦鯛鵰屌弔伄吊钓窎訋掉釣铞', 'D鈟竨銱雿瘹窵鋽鑃爹跌褺苵迭垤峌恎绖胅瓞眣耊戜谍堞幉揲畳絰耋詄叠殜牃牒镻嵽碟蜨褋艓蝶疂蹀鲽曡疉疊氎嚸丁仃叮帄玎甼疔盯钉耵酊靪顶頂鼎嵿薡鐤订饤矴定訂飣啶萣椗腚碇锭碠聢', 'D錠磸顁丟丢铥颩銩东冬咚岽東苳昸氡倲鸫埬娻崬涷笗菄氭蝀鮗鼕鯟鶇鶫董嬞懂箽蕫諌动冻侗垌姛峒恫挏栋洞胨迵凍戙胴動崠硐棟腖働駧霘剅唗都兜兠蔸橷篼艔斗乧阧抖陡蚪鈄豆郖浢荳逗', 'D饾鬥梪脰酘痘閗窦鬦餖斣闘竇鬪鬬鬭嘟督醏毒涜读渎椟牍犊裻読蝳獨錖凟匵嬻瀆櫝殰牘犢瓄皾騳黩讀豄贕韣髑鑟韇韥黷讟厾独笃堵帾琽赌睹覩賭篤芏妒杜肚妬度荰秺渡靯镀螙殬鍍蠧蠹偳', 'D媏端鍴短段断塅缎葮椴煅瑖腶碫锻緞毈簖鍛斷躖籪叾垖堆塠嵟痽頧鴭鐜队对兑対祋怼陮碓綐對憝濧薱镦懟瀩譈鐓譵吨惇敦墩墪壿撴獤噸撉犜礅蹲蹾驐盹趸躉伅沌炖盾砘逇钝顿遁鈍頓碷遯', 'D潡踲多咄哆剟崜毲裰嚉夺铎剫掇敓敚敪痥鈬奪凙踱鮵鐸朵朶哚垛挅挆埵缍椯趓躱躲綞亸鬌嚲刴剁沲陊饳垜尮桗堕舵惰跢跥跺飿嶞憜墯鵽卩亻赕铫町铤夂丶', 'E娾砵妸妿娿屙讹囮迗俄娥峨峩涐莪珴訛皒睋鈋锇鹅蛾磀誐頟额額鵝鵞譌枙砈婀騀鵈厄歺戹阨呃扼苊阸呝砐轭咢垩峉匎恶砨蚅饿偔卾悪硆谔軛鄂阏堮崿愕湂萼豟軶遌遏廅搹琧腭僫蝁锷鹗蕚', 'E遻頞颚餓噩擜覨諤餩鍔鳄歞顎櫮鰐鶚讍鑩齶鱷奀恩蒽峎摁鞥仒乻旕儿而侕陑峏洏荋栭胹袻鸸粫輀鲕隭髵鮞鴯轜尔耳迩洱饵栮毦珥铒餌駬薾邇趰二弍弐佴刵咡贰貮衈貳誀嗯唔诶', 'F颰墢鼥韛朌頒報賁獖祊埄偪胇貶昞眪袚撥柭襏舩发沷発發彂髪橃醗乏伐姂垡疺罚阀栰傠筏瞂罰閥罸藅佱法砝鍅灋珐琺髮帆忛番勫噃墦嬏幡憣旙旛翻藩轓颿飜鱕凡凢凣匥杋柉矾籵钒舤烦舧', 'F笲釩棥煩緐樊蕃橎燔璠薠繁襎繙羳蹯瀿礬蘩鐇蠜鷭反仮払辺返氾犯奿汎泛饭范贩畈訉軓梵盕笵販軬飯飰滼嬎範嬔瀪方邡坊芳枋牥钫淓蚄堏鈁錺鴋防妨房肪埅鲂魴仿访纺昉昘瓬眆倣旊紡舫', 'F訪髣鶭放飞妃非飛啡婓婔渄绯菲扉猆靟裶緋蜚霏鲱餥馡騑騛鯡飝肥淝暃腓蜰蟦匪诽奜悱斐棐榧翡蕜誹篚吠废杮沸狒肺昲费俷剕厞疿屝萉廃費痱镄廢蕟曊癈鼣濷櫠鐨靅分吩帉纷芬昐氛竕紛', 'F翂棻訜躮酚鈖雰朆餴饙坟妢岎汾枌炃肦梤羒蚠蚡棼焚蒶馚隫墳幩蕡魵鳻橨燌燓豮鼢羵鼖豶轒鐼馩黂粉瞓黺份坋弅奋忿秎偾愤粪僨憤奮膹糞鲼瀵鱝丰风仹凨凬妦沣沨凮枫封疯盽砜風峯峰偑', 'F桻烽琒崶渢溄猦葑锋楓犎蜂瘋碸僼篈鄷鋒檒豐鎽鏠酆寷灃靊飌麷冯捀逢堸綘缝艂縫讽覂唪諷凤奉甮俸湗焨煈赗鳯鳳鴌賵蘕瓰覅仏坲梻紑缶否缹缻雬鴀夫伕邞呋姇枎玞肤怤柎砆荂衭娐荴旉', 'F紨趺酜麸稃跗鈇筟綒孵敷麩糐麬麱懯乀弗伏凫甶冹刜孚扶芙芣芾咈岪帗彿怫拂服泭绂绋苻茀俘垘枹柫氟洑炥玸畉畐祓罘茯郛韨鳬哹栿浮畗砩莩蚨匐桴涪烰琈符笰紱紼翇艴菔虙袱幅絥罦葍', 'F福粰綍艀蜉辐鉘鉜颫鳧榑稪箙複韍幞澓蝠髴鴔諨踾輻鮄癁鮲黻鵩鶝抚甫府弣拊斧俌郙俯釜釡捬辅椨焤盙腑滏腐輔簠黼父讣付妇负附咐坿竎阜驸复祔訃負赴蚥袝偩冨副婏婦蚹傅媍富復萯蛗', 'F覄詂赋椱缚腹鲋禣褔赙緮蕧蝜蝮賦駙縛輹鮒賻鍑鍢鳆覆馥鰒猤攵犭', 'G玵閞鳺旮伽嘠钆尜嘎噶錷尕玍尬魀该陔垓姟峐荄晐赅畡祴該豥賅賌忋改絠鎅丐乢匃匄杚钙盖溉葢鈣戤概蓋槩槪漑瓂干甘芉迀杆玕肝坩泔苷柑竿疳酐粓亁凲尲尴筸漧尶尷魐皯秆衦赶敢笴稈', 'G感澉趕橄擀簳鳡鱤旰盰矸绀倝凎淦紺詌骭幹檊赣灨冈罓冮刚岗纲肛岡牨疘缸钢剛罡堈掆釭棡犅堽綱罁鋼鎠崗港杠焵筻槓戆皋羔高皐髙槔睾膏槹橰篙糕餻櫜韟鷎鼛鷱夰杲菒稁搞缟槁獔稿镐', 'G縞藁檺吿告勂诰郜峼祮祰锆筶禞誥鋯戈圪纥戓疙牱哥胳袼鸽割搁彁歌滒戨閤鴐鴚擱謌鴿鎶呄佮匌阁革敋格鬲愅臵葛隔嗝塥滆觡搿槅膈閣镉韐骼諽鮯櫊韚轕鞷騔鰪哿舸个各虼個硌铬箇獦给', 'G根跟哏亘艮茛揯搄更刯庚畊浭耕掶菮椩焿絚赓鹒緪縆賡羹鶊郠哽埂峺挭绠耿莄梗綆鲠骾鯁亙堩啹喼嗰工弓公功攻杛供糼肱宫宮恭蚣躬龚匑塨幊觥躳匔碽髸觵龔巩汞拱拲栱珙輁鞏共贡貢慐', 'G熕兝兣勾佝沟钩袧缑鈎緱褠篝簼鞲韝岣狗苟枸玽耇耉笱耈豿坸构诟购垢姤茩冓够夠訽媾彀搆遘雊煹觏撀覯購估咕姑孤沽泒柧轱唂唃罛鸪笟菇菰蛄蓇觚軱軲辜酤毂箍箛嫴篐橭鮕鴣轂鹘古汩', 'G诂谷股峠牯骨罟羖逧钴傦啒脵蛊蛌尳愲硲詁馉榾鼓鼔嘏榖皷穀糓薣濲臌餶瀔盬瞽固故凅顾堌崓崮梏牿棝祻雇痼稒锢頋僱錮鲴鯝顧瓜刮苽胍鸹歄焻煱颪劀緺銽鴰騧冎叧呱剐剮啩寡卦坬诖挂', 'G掛罣罫褂詿乖拐枴柺箉怪恠关观官冠覌倌棺蒄窤瘝癏観鳏觀鱞馆痯筦管輨舘錧館躀鳤毌贯泴悺惯掼涫悹祼慣摜遦樌盥罆鏆灌爟瓘礶鹳罐鑵鱹光灮侊炗炚炛咣垙姯茪桄烡珖胱僙輄銧黆欟广', 'G広犷俇逛撗归圭妫龟规邽皈茥闺帰珪亀硅袿媯椝瑰郌摫閨鲑嬀槻槼璝瞡鬶瓌櫷宄轨庋佹匦诡陒垝癸軌鬼庪祪匭晷湀蛫觤詭厬簋蟡刽刿攰柜炅攱贵桂椢筀貴蓕跪瞆劊劌撌槶禬簂櫃鳜鱥衮惃', 'G绲袞辊滚蓘滾蔉磙輥鲧鮌鯀棍棞睴璭謴呙埚郭啯崞聒鈛锅墎瘑嘓彉蝈鍋彍囯囶囻国圀國帼掴幗慖摑漍聝蔮虢馘果惈淉猓菓馃椁褁槨綶蜾裹餜鐹过桧咯莞呷', 'H餲淲豩豰俿腄墮吪魤犿浲侅郂絯忓攼仠桿汵榦臯鎬暠犵挌蛤厷愩唝羾詬鶻淈鹄鈷縎鵠怘趏潅雚洸襘鞼緄腘膕粿輠過铪丷哈嗨孩骸海胲烸塰酼醢亥骇害氦嗐餀駭駴嚡饚乤兯佄顸哻蚶酣頇谽', 'H憨馠魽鼾邗含邯函凾虷唅圅娢浛崡晗梒涵焓寒嵅韩甝筨爳蜬澏鋡韓厈罕浫喊蔊豃鬫汉屽扞汗闬旱垾悍捍晘涆猂莟晥焊琀菡釬閈皔睅傼蛿颔撖蜭暵銲鋎憾撼翰螒頷顄駻雗瀚鶾魧苀斻杭垳绗', 'H笐航蚢颃貥筕絎頏沆蒿嚆薅竓蚝毫椃嗥獆噑豪嘷獋儫曍嚎壕濠籇蠔譹好郝号昊昦哠恏浩耗晧淏傐皓聕號暤暭澔皜皞皡薃皥颢灏顥鰝灝兞诃呵喝訶嗬蠚禾合何劾咊和姀河峆曷柇盇籺阂哬敆', 'H核盉盍荷啝涸渮盒秴菏萂龁惒粭訸颌楁詥鉌阖鲄熆閡鹖麧澕篕翮魺闔齕覈鶡皬鑉龢佫垎贺寉焃湼賀煂碋褐赫鹤翯壑癋爀鶴齃靍靎鸖靏黒黑嘿潶嬒拫痕鞎佷很狠詪恨亨哼悙涥脝姮恆恒桁烆', 'H珩胻鸻横橫衡鴴鵆蘅鑅堼囍乊乥叿灴轰哄訇烘軣焢硡薨輷嚝鍧轟仜弘妅红吰宏汯玒纮闳宖泓玜苰垬娂洪竑荭虹浤紘翃耾硔紭谹鸿渱竤粠葒葓鈜閎綋翝谼潂鉷鞃魟篊鋐彋蕻霐黉霟鴻黌晎嗊', 'H讧訌撔澋澒銾侯矦喉帿猴葔瘊睺篌糇翭骺鍭餱鯸吼犼后郈厚垕後洉逅候鄇堠豞鲎鲘鮜鱟乎匢虍呼垀忽昒曶泘苸烀轷匫唿惚淴虖軤雽嘑寣滹雐歑囫抇弧狐瓳胡壶壷斛焀喖壺媩湖猢絗葫楜煳', 'H瑚嘝蔛鹕槲箶糊蝴衚魱縠螜醐頶觳鍸餬瀫鬍鰗鶘鶦鶮乕汻虎浒唬萀琥虝箎錿鯱互弖戶户戸冱冴帍护沍沪岵怙戽昈枑祜笏粐婟扈瓠綔鄠嫭嫮摢滬蔰槴熩鳸簄鍙鹱護鳠韄頀鱯鸌花芲埖婲椛硴', 'H糀誮錵蘤华哗姡骅铧滑猾嘩撶璍螖鏵驊鷨化划杹画话崋桦婳畫嬅畵話劃摦槬樺嫿澅諙諣黊繣蘳怀徊淮槐褢踝懐褱懷櫰耲蘹坏壊壞蘾欢歓鴅嚾懽獾歡貛讙驩还环峘洹荁桓萈萑堚寏絙雈羦貆', 'H锾阛寰缳環豲鍰鹮糫繯轘闤鬟睆缓緩攌幻奂肒奐宦唤换浣涣烉患梙焕逭喚嵈愌換渙痪煥瑍豢漶瘓槵鲩擐澣瞣藧鯇鯶鰀巟肓荒衁塃慌皇偟凰隍黃黄喤堭媓崲徨惶湟葟遑楻煌瑝墴潢獚锽熿璜', 'H篁艎蝗癀磺穔諻簧蟥鍠餭鳇趪鐄騜鰉鱑鷬怳恍炾宺晃晄奛谎幌愰詤縨謊櫎皩兤滉榥曂皝鎤灰灳诙咴恢拻挥洃虺晖烣珲豗婎媈揮翚辉隓暉楎琿禈詼幑睳噅噕翬輝麾徽隳瀈鰴囘回囬佪廻廽恛', 'H洄茴迴烠逥痐蛔蛕蜖鮰悔螝毇檓燬譭卉屷汇会讳泋哕浍绘芔荟诲恚恵烩贿彗晦秽喙惠絵缋翙阓匯彙彚毀毁滙詯賄僡嘒蔧誨圚寭慧憓暳槥潓蕙徻橞獩璤薈薉諱頮檅檜燴篲藱餯嚖懳瞺穢繢蟪', 'H櫘繪翽譓闠鐬靧譿顪昏昬荤婚涽阍惽棔睧睯閽忶浑馄渾魂繉鼲诨俒倱圂掍混焝溷慁觨諢吙耠锪劐鍃豁攉騞佸活秮火伙邩钬鈥夥沎或货咟俰捇眓获剨祸貨惑旤湱禍嗀奯濩獲霍檴謋穫镬嚯瀖', 'H耯藿蠖嚿曤臛癨矐鑊夻行砉圜', 'J皀髉畟筴簎笒覘樔伡俥鋤雛處諔堲蠀覿茤岋紇裓構颳夬叏獷臩臦昋鱖妎悎饸紅鵍丌讥击刉叽饥乩刏圾机玑肌芨矶鸡枅咭迹剞唧姬屐积笄飢基绩喞嵆嵇犄筓缉赍勣嗘畸跻鳮僟箕銈嘰撃槣樭', 'J畿稽賫躸齑墼憿機激璣積錤隮磯簊績羁賷櫅耭雞譏韲鶏譤癪躋鞿鷄齎羇虀鑇覉鑙齏羈鸄覊亼及伋吉岌彶忣汲级即极亟佶郆卽叝姞急狤皍笈級揤疾觙偮卙庴脨谻戢棘極殛湒集塉嫉愱楫蒺蝍', 'J趌辑槉耤膌銡嶯潗瘠箿蕀蕺鞊鹡橶檝螏輯襋蹐鍓艥籍轚鏶霵鶺鷑雦雧几己丮妀犱泲虮挤脊掎鱾幾戟嵴麂魢撠擠穖彑旡计记伎纪坖妓忌技芰芶际剂季哜垍峜既洎济紀茍計剤紒继觊記偈寂寄', 'J徛悸旣梞祭惎臮葪兾痵継蓟裚跡際墍暨漃漈禝稩穊誋跽霁鲚暩稷諅鲫冀劑曁穄薊襀髻檕繋罽覬鮆檵蹟鵋齌廭懻癠糭蘎骥鯚瀱繼蘮鱀蘻霽鰶鰿鱭驥加夹抸佳泇迦枷毠浃珈家痂梜笳耞袈猳葭', 'J跏犌腵鉫嘉镓糘豭貑鎵麚圿扴岬郏荚郟恝莢戛铗戞蛱颊蛺跲餄鋏頬頰鴶鵊甲玾胛斚贾钾婽斝椵賈鉀榎槚瘕檟价驾架假嫁幏榢稼駕嗧戋奸尖幵坚歼间冿戔肩艰姦姧兼监堅惤猏笺菅菺湔牋犍', 'J缄葌葏間搛椷煎瑊睷缣蒹箋樫熞緘蕑蕳鲣鹣熸篯縑鋻艱鞬馢麉瀐鞯殱礛覸鵳瀸殲籛韀鰹囏虃韉囝拣枧俭柬茧倹挸捡笕减剪检湕趼揀検減睑硷裥詃锏弿瑐简絸谫彅戩戬碱儉翦檢藆襇襉謇蹇', 'J瞼簡繭謭鬋鰎鹸瀽蠒鐗鐧鹻譾襺鹼见件侟建饯剑洊牮荐贱俴健剣涧珔舰剱徤渐谏釼寋旔楗毽溅腱臶践賎鉴键僭榗劍劎墹澗箭糋諓賤趝踐踺劒劔橺薦鍵餞瞷磵礀螹鍳擶繝覵艦轞鑑鑒鑬鑳江', 'J姜将茳浆畕豇葁翞僵漿螀壃缰薑橿殭螿鳉疅礓疆繮韁鱂讲奖桨傋蒋奨奬蔣槳獎耩膙講顜匞匠夅弜杢降洚绛弶袶絳畺酱摾滰嵹犟糡醤糨醬櫤謽艽芁交郊姣娇峧浇茭骄胶椒焦蛟跤僬嘄虠鲛嬌', 'J嶕嶣憍膠蕉膲礁穚鮫鹪簥蟭鐎鷦鷮櫵臫角佼挢狡绞饺晈笅皎矫脚铰搅筊剿勦敫煍腳賋摷暞踋鉸餃儌劋撹徼敽敿缴曒璬矯皦鵤孂纐攪灚鱎叫呌挍訆珓轿较敎教窖滘嘂嘦斠漖酵噍嬓獥藠趭轎', 'J醮譥皭釂阶疖皆接掲痎秸階喈嗟堦媘揭脻街煯稭鞂蝔擑癤鶛孑尐节讦刦刧劫岊昅刼劼杰衱诘拮洁结迼桀桝莭訐婕崨捷袺傑結颉嵥楶滐睫節蜐詰鉣魝截榤碣竭蓵鲒潔羯誱踕幯嶻擮礍鍻巀櫭', 'J蠞蠘蠽姐毑媎解飷檞丯介岕庎忦戒芥屆届斺玠界畍疥砎衸诫借蚧徣堺楐琾蛶骱犗誡褯魪藉巾今斤钅兓金釒津矜砛衿觔珒紟惍琎堻琻筋璡鹶黅襟仅卺巹紧堇菫僅谨锦嫤廑漌盡緊蓳馑槿瑾錦', 'J謹饉劤尽劲妗近进侭枃勁浕荩晉晋浸烬赆祲進煡缙寖搢溍禁靳瑨僸凚殣觐儘噤縉賮嚍壗嬧濜藎燼璶覲贐齽坕京泾经茎亰秔荆荊婛惊旌旍猄経菁晶稉腈睛粳經兢精聙橸鲸鵛鯨鶁麖鼱驚麠井', 'J丼阱刭宑汫汬肼剄穽颈景儆幜憬璄憼暻燝璟璥頸蟼警妌净弪径迳浄胫凈弳徑痉竞逕婙婧桱梷淨竟竫敬痙傹靖境獍誩静頚曔镜靜瀞鏡競竸冋坰扃埛絅駉駫蘏冏囧迥侰炯逈浻烱煚窘颎綗僒煛', 'J熲澃燛褧蘔丩勼纠朻究糺鸠糾赳阄萛啾揪揫鬏鬮九久乆乣奺汣杦灸玖舏韭紤酒镹韮匛旧臼咎疚柩柾倃桕厩救就廄匓舅僦廏廐慦殧舊鹫鯦麔匶齨鷲欍凥抅匊居拘泃狙苴驹倶挶疽痀罝陱娵婅', 'J婮崌掬梮涺椐琚腒锔裾雎艍蜛諊踘鋦駒鴡鞠鞫鶋局泦侷狊桔毩淗焗菊郹椈毱湨犑輂粷躹閰橘檋駶鵙蹫鵴巈蘜鶪驧咀沮举矩莒挙椇筥榉榘蒟龃聥舉踽擧櫸欅襷句巨讵姖岠怇拒洰苣邭具拠昛', 'J歫炬秬钜俱倨冣剧粔耟蚷袓埧埾惧据詎距焣犋鉅飓虡豦锯愳窭聚駏劇勮屦踞鮔壉懅據澽遽鋸屨颶簴躆醵懼爠姢娟捐涓裐鹃勬鋑镌鎸鵑鐫蠲卷呟帣埍菤锩臇錈奆劵倦勌桊狷绢隽淃瓹眷鄄睊', 'J絭罥睠慻蔨餋羂噘撅撧屩屫亅孒孓决刔氒诀抉芵玦玨挗珏砄绝虳觉倔欮崛掘斍桷殌覐觖訣赽趹厥絕絶覚趉鈌劂瑴谲嶡嶥憰熦爴獗瘚蕝蕨鴂鴃憠橛橜镼爵臄镢蟨蟩爑譎蹶蹷嚼矍覺鐝灍爝觼', 'J彏戄攫玃鷢欔矡龣貜钁军君均汮袀軍钧莙蚐桾皲菌鈞碅筠皸皹覠銁銞鲪麇鍕鮶呁俊郡陖埈峻捃晙浚馂骏珺畯竣箟蜠儁寯懏餕燇駿鵔鵕鵘纟挟廴', 'K錒嵦濭骯奟喫噄鉺朏胐阬槀稾藳溝絓鰥卝丱硄廣胿膭歸楇鉿妔薧蚵毼袔齁恗搰華磆蕐會澮璯餛秳漷監譼槛檻捁撟悈脛踁駃咔咖喀卡佧垰胩裃鉲开奒揩衉锎鐦凯剀垲恺闿铠凱剴慨蒈塏愷楷', 'K輆暟锴鍇鎧闓颽忾炌欬烗勓嘅鎎乫刊栞勘龛堪戡龕冚坎侃砍莰偘惂塪輡竷轗看衎崁墈阚瞰磡矙忼砊粇康嫝嵻慷漮槺穅糠躿鏮鱇扛摃亢伉匟邟囥抗犺闶炕钪鈧閌尻髛攷考拷洘栲烤铐犒銬鲓', 'K靠鮳鯌匼坷苛柯牁珂科胢轲疴趷钶嵙棵痾萪軻颏搕犐稞窠鈳榼薖颗樖瞌磕蝌頦醘顆髁礚壳咳翗嶱可岢炣渇嵑敤渴克刻剋勀勊客峇恪娔尅课堁氪骒缂嗑愙溘锞碦緙課錁礊騍肎肯肻垦恳啃豤', 'K墾錹懇掯裉褃劥吭坑硁牼铿硻誙銵鍞鏗巪乬唟厼怾空倥埪崆悾硿箜躻錓鵼孔恐控鞚廤抠芤眍剾彄瞘口劶叩扣怐敂冦宼寇釦窛筘滱蔲蔻瞉簆鷇刳郀枯哭桍堀崫圐跍窟骷鮬狜苦楛库俈绔庫秙', 'K焅袴喾絝裤瘔酷褲嚳夸姱舿侉咵垮銙挎胯跨骻蒯擓巜凷圦块快侩郐哙狯脍塊筷鲙儈鄶廥獪膾旝糩鱠宽寛寬髋鑧髖梡款窽窾匡劻诓邼匩哐恇洭筐筺誆軭狂狅诳軖軠誑鵟夼儣懭邝圹纩况旷岲', 'K況矿昿贶框眖砿眶絋絖貺軦鉱鋛鄺壙黋懬曠爌矌礦穬纊鑛亏刲岿悝盔窥聧窺虧闚顝蘬奎晆逵鄈頄馗喹揆葵骙戣暌楏楑魁睽蝰頯櫆藈鍨鍷騤夔蘷虁躨卼傀煃跬頍蹞尯匮欳喟媿愦愧溃蒉馈匱', 'K嘳嬇憒篑聩聭蕢樻殨餽簣聵籄鐀鑎坤昆晜堃堒婫崐崑猑菎裈焜琨髠裩锟髡鹍尡潉蜫褌髨熴瑻醌錕鲲臗騉鯤鵾鶤悃捆阃壸梱祵硱稇裍壼稛綑閫閸困涃睏扩拡括挄栝桰筈萿葀蛞阔廓頢濶闊鞟', 'K韕懖霩鞹鬠穒', 'L冫勑粚誺銐寵娕坔釘詻鄜膚鬴茖蛒鎘鉻羮篢睔腂蘫谾瘣暕撿諫倞靓靚牞摎樛畂寠窶垃拉柆啦翋菈邋旯砬揦磖喇藞嚹剌溂腊揧楋瘌蜡蝋辢辣蝲臈攋爉臘鬎櫴瓎镴鯻蠟鑞鞡来來俫倈崃徕涞莱', 'L郲婡崍庲徠梾淶猍萊逨棶琜筙铼箂錸騋鯠鶆麳唻赉睐睞赖賚濑賴頼顂癞鵣瀨瀬籁藾癩襰籟兰岚拦栏婪嵐葻阑蓝谰澜褴儖斓篮燣藍襕镧闌璼襤譋幱攔瀾灆籃繿蘭斕欄礷襴囒灡籣欗讕躝襽鑭', 'L钄韊览浨揽缆榄漤罱醂壈懒覧擥嬾懶孄覽孏攬欖爦纜烂滥燗嚂濫爁爛爤瓓灠糷啷勆郎郞欴狼莨嫏廊桹琅蓈榔瑯硠稂锒筤艆蜋郒螂躴鋃鎯駺悢朗阆朖烺塱蓢樃誏閬朤埌浪蒗唥捞粩撈劳労牢', 'L狫窂哰唠崂浶勞痨铹僗嶗憥朥癆磱簩蟧醪鐒顟髝老佬咾姥恅荖栳珯硓铑蛯銠潦橑鮱轑涝烙嗠耢酪嫪憦澇橯耮軂仂阞乐叻忇扐氻艻玏泐竻砳勒楽韷簕鳓鰳饹餎雷嫘缧蔂樏畾檑縲镭櫑瓃羸礧', 'L纍罍蘲鐳轠壨鑘靁虆鱩欙纝鼺厽耒诔垒塁絫傫誄磊蕌磥蕾儡壘癗藟櫐矋礨灅蠝蘽讄儽鑸鸓肋泪洡类涙淚累酹銇頛頪擂錑攂礌颣類纇蘱禷嘞脷塄棱楞碐稜踜薐冷倰堎愣睖唎刕厘剓梨狸离荲', 'L莉骊悡梸犁菞喱棃犂鹂剺漓睝筣缡艃蓠蜊嫠孷樆璃盠竰糎蔾褵鋫鲡黎篱縭罹錅蟍謧醨嚟藜邌離鯏鏫鯬鵹黧囄灕蘺蠡蠫孋廲劙鑗穲籬驪鱺鸝礼李里俚峛哩娌峲浬逦理裡锂粴裏豊鋰鲤澧禮鯉', 'L蟸醴鳢邐鱧欚力历厉屴立吏朸丽利励呖坜沥苈例岦戾枥疠苙隶俐俪栃栎疬砅茘荔赲轹郦娳悧栗栛栵涖猁珕砺砾秝莅唳婯悷琍笠粒粝蚸蛎傈凓厤棙痢蛠詈跞雳塛慄搮溧蒚蒞鉝鳨厯厲暦歴瑮', 'L綟蜧勵曆歷篥隷鴗巁檪濿癘磿隸鬁儮曞櫔爄犡禲蠇嚦壢攊瀝瓅礪藶櫪爏瓑皪盭礫糲蠣儷癧礰鷅麜囇轢欐讈轣攭瓥靂鱱靋瓈俩倆嫾奁连帘怜涟莲連梿联裢亷嗹廉慩漣蓮匲奩覝劆匳噒憐磏聨', 'L聫褳鲢濂濓縺翴聮薕螊櫣聯臁蹥謰鎌镰簾蠊鬑鐮鰱籢籨敛琏脸裣摙槤璉蔹嬚斂歛臉鄻襝羷练娈炼恋浰殓堜媡湅萰链僆楝煉瑓潋練澰錬殮鍊鏈瀲鰊戀纞簗良俍凉梁涼椋辌粮粱墚綡踉樑輬糧', 'L両两兩唡啢掚脼裲緉蜽魉魎亮哴谅辆喨晾湸量煷輌諒輛鍄蹽辽疗聊僚寥嵺廖憀膋嘹嫽寮嶚嶛憭撩敹獠缭遼暸燎璙窷膫竂镣鹩屪廫簝蟟豂賿蹘爎鐐髎飉鷯钌釕鄝蓼爒镽了尥炓料尞撂瞭咧毟', 'L挘埓列劣冽劽姴峢挒洌茢迾埒浖烈烮捩猎猟蛚裂煭睙聗趔巤颲儠鮤鴷擸獵犣躐鬛鬣鱲邻林临啉崊惏淋晽琳粦痳碄箖粼鄰隣嶙潾獜遴斴暽燐璘辚霖瞵磷臨繗翷麐轔壣瀶鏻鳞驎麟鱗菻亃稟僯', 'L凛凜撛廩廪懍懔澟檁檩癛癝顲吝恡悋赁焛賃蔺橉甐膦閵疄藺蹸躏躙躪轥拎伶刢灵囹坽夌姈岭岺彾泠狑苓昤朎柃玲瓴凌皊砱秢竛铃陵鸰婈崚掕棂淩琌笭紷绫羚翎聆舲菱蛉衑祾詅跉軨蓤裬鈴', 'L閝零龄綾蔆輘霊駖澪蕶錂霗魿鲮鴒鹷燯霛霝齢瀮酃鯪孁蘦齡櫺醽靈欞爧麢龗阾袊领領嶺令另呤炩溜熘刘沠畄浏流留旈琉畱硫裗媹嵧旒蒥蓅遛馏骝榴瑠飗劉瑬瘤磂镏駠鹠橊璢疁镠癅蟉駵嚠', 'L懰瀏藰鎏鎦餾麍鏐飀鐂騮飅鰡鶹驑柳栁桞珋桺绺锍綹熮罶鋶橮羀嬼六翏塯廇澑磟鹨蹓霤雡飂鬸鷚瓼甅囖龙屸咙泷茏昽栊珑胧眬砻笼聋隆湰嶐槞漋癃窿篭嚨巃巄蘢鏧霳曨朧櫳爖瓏矓礱礲襱', 'L籠聾蠪蠬龓豅躘鑨靇鸗陇垄垅拢儱隴壟壠攏竉哢梇硦徿贚娄偻婁喽溇蒌僂楼嘍廔慺蔞遱樓熡耧蝼瞜耬艛螻謱軁髅鞻髏嵝搂塿嶁摟漊甊篓簍陋屚漏瘘镂瘺瘻鏤露噜撸嚕擼卢庐芦垆枦泸炉栌', 'L胪轳舮鸬玈舻颅鈩鲈魲盧嚧壚廬攎瀘獹璷蘆櫨爐瓐臚矑籚纑罏艫蠦轤鑪顱髗鱸鸕黸卤虏挔捛掳鹵硵鲁虜塷滷蓾樐澛魯擄橹磠镥瀂櫓氌艣鏀艪鐪鑥圥甪陆侓坴彔录峍勎赂辂陸娽淕淥渌硉菉', 'L逯鹿椂琭祿禄僇剹勠滤盝睩碌稑賂路塶廘摝漉箓粶蔍戮樚熝膔膟觮趢踛辘醁潞穋蕗錄録錴璐簏螰鴼濾簶蹗轆騄鹭簬簵鏕鯥鵦鵱麓鏴騼籙觻虂鷺氇驴闾榈閭馿膢櫚藘曥鷜驢吕呂侣郘侶旅梠', 'L焒祣稆铝屡絽缕屢膂膐褛鋁履褸儢穞縷穭寽垏律哷虑率绿嵂氯葎綠緑慮箻勴繂櫖爈鑢孪峦挛栾鸾脔滦銮鵉圝奱孌孿巒攣曫欒灓羉臠圞灤虊鑾癴癵鸞卵乱釠亂掠略畧锊圙鋝鋢抡掄仑伦囵沦', 'L纶侖轮倫陯圇婨崘崙惀淪菕棆腀碖綸蜦踚輪磮錀鯩稐耣论埨溣論捋頱囉罗啰猡脶萝逻椤腡锣箩骡镙螺羅覶鏍儸覼騾玀蘿邏欏鸁籮鑼饠驘剆倮砢蓏裸躶瘰蠃臝攞曪癳泺峈洛络荦骆珞笿絡落', 'L摞漯犖雒駱鮥鵅纙鱳', 'M絔硥苾牑訬仯哋尒尓爾坆呒撫羙秏狢貈貉湏惛殙貇氂犛厸龍龒嘸呣妈媽嬤嬷麻痲嫲蔴犘蟆蟇马犸玛码蚂馬溤獁遤瑪碼螞鎷鷌鰢亇杩祃閁骂唛傌睰嘜榪禡罵駡礣鬕吗嗎嘛埋霾买荬買嘪蕒鷶', 'M劢迈佅売麦卖脉脈麥衇勱賣邁霡霢颟顢姏悗蛮慲摱馒樠瞒瞞鞔饅鳗鬗鬘鰻蠻屘満睌满滿螨襔蟎鏋矕曼僈谩墁幔慢漫獌缦蔄蔓熳澷镘縵蟃謾鏝蘰牤邙吂忙汒芒杗杧盲厖恾笀茫哤娏浝牻硭釯', 'M铓痝蛖鋩駹蘉莽莾茻壾漭蟒蠎匁猫貓毛矛枆牦茅旄渵軞酕蛑锚緢髦蝥錨蟊鶜冇卯戼峁泖茆昴铆笷蓩鉚冃皃芼冐茂冒眊贸耄袤覒媢帽貿鄚愗暓楙毷瑁瞀貌鄮蝐懋唜庅嚒濹嚰么癦沒没枚玫苺', 'M栂眉脄莓梅珻脢郿堳媒嵋湄湈猸睂葿楣楳煤瑂禖腜塺槑酶镅鹛鋂霉徾鎇矀攗蘪鶥攟黴毎每凂美挴浼媄嵄渼媺镁嬍燘躾鎂黣妹抺沬昧祙袂眛媚寐痗跊鬽煝睸魅篃蝞嚜椚门扪玣钔門閅捫菛璊', 'M穈鍆虋闷焖悶暪燜懑懣们們掹擝氓甿虻冡庬罞萌萠夢溕盟甍儚橗瞢蕄蝱鄳鄸幪懞濛獴曚朦檬氋矇礞鯍艨鹲矒靀饛顭鸏勐猛瓾蒙锰艋蜢錳懵蠓鯭鼆孟梦夣懜霥踎咪瞇冞弥祢迷猕谜蒾詸謎醚', 'M擟糜縻麊麋靡獼麛爢戂攠蘼醾醿鸍釄米羋芈侎弭洣敉粎脒眯渳葞蝆蔝銤孊灖糸汨宓泌觅峚祕宻秘密淧覓覔幂谧塓幎覛嘧榓滵漞熐蔤蜜鼏冪樒幦濗藌謐櫁簚羃芇眠婂绵媔棉綿緜臱蝒嬵檰櫋', 'M矈矊矏丏汅免沔黾俛勉眄娩偭冕勔喕愐湎缅葂腼緬鮸靣面糆麪麫麺麵喵苗媌描瞄鹋嫹鶓鱙杪眇秒淼渺缈篎緲藐邈妙庙竗庿廟吀咩哶孭灭搣滅蔑薎鴓幭懱瀎篾櫗蠛衊鑖鱴瓱民垊姄岷怋旻旼', 'M玟苠珉盿冧罠崏捪琘琝缗暋瑉痻碈鈱緍緡錉鍲皿冺刡闵抿泯勄敃闽悯敏笢笽湣閔愍敯黽閩僶慜憫潣簢鳘蠠鰵名明鸣洺眀茗冥朙眳铭鄍嫇溟猽蓂暝榠銘鳴瞑螟覭佲姳凕慏酩命掵詺谬缪繆謬', 'M摸嚤尛谟嫫馍摹模膜麼麽摩魹橅磨糢謨謩擵饃嚩蘑髍魔劘饝抹懡麿末劰圽妺怽歿殁沫茉陌帞昩枺皌眜眿砞秣莈莫眽粖絈袹蛨貃嗼塻寞漠蓦貊銆墨嫼暯瘼瞐瞙镆魩黙縸默貘藦蟔鏌爅驀礳纆', 'M耱乮哞牟侔劺恈洠眸谋鉾謀鍪鴾麰某母毪獏氁亩牡姆拇峔牳畆畒胟畝畞砪畮鉧踇木仫目凩沐狇坶炑牧苜毣莯蚞钼募萺雮墓幕幙慔楘睦鉬慕暮艒霂穆鞪旀丆椧渑', 'N懝抝拗秅莀袲唸毭咹児兒耏聏峊廾嫨跈聻茮澆涳巙崀尦竜袮彌镾濔瀰乜樢拏拿誽镎鎿乸哪雫内那吶妠纳肭娜衲钠納袦捺笝豽軜貀嗱蒳靹魶腉熋孻乃奶艿氖疓妳廼迺倷釢嬭奈柰耐萘渿鼐褦', 'N螚錼囡男抩枏枬侽南娚畘莮难喃遖暔楠煵諵難赧揇湳萳腩蝻戁婻囔乪嚢囊鬞馕欜饢擃曩攮灢儾齉孬檂呶怓挠峱硇铙猱蛲詉碙嶩夒鐃巎獿垴恼悩脑匘脳堖惱嫐瑙腦碯闹婥淖閙鬧讷呐眲訥呢', 'N馁腇餒鮾鯘氝焾嫩能莻鈪銰啱妮尼坭怩泥籾倪屔秜郳铌埿婗淣猊蚭棿跜鈮蜺觬貎霓鲵鯢麑齯臡伱伲你拟抳狔苨柅旎晲馜儞隬擬薿檷鑈氼迡昵胒逆匿痆眤堄惄嫟愵溺睨腻暱縌膩嬺拈年秊哖', 'N秥鲇鮎鲶鵇黏鯰捻辇撚撵碾輦簐攆躎卄廿念姩埝娘嬢酿醸釀鸟茑袅嫋裊蔦嬝褭嬲尿脲捏揑帇圼苶枿陧涅聂臬啮惗隉敜嗫嵲踂摰踗踙镊镍嶭篞臲錜颞蹑鎳闑孼孽櫱籋蘖齧巕糱糵蠥囓讘躡鑷', 'N顳脌囜您拰宁咛拧狞柠聍寍寕寜寧儜凝嚀嬣擰獰薴檸聹鑏鬡鸋橣矃佞侫泞甯寗澝濘妞牛牜忸扭沑狃纽杻炄钮紐鈕靵农侬哝浓脓秾農儂辳噥憹濃蕽禯膿穠襛醲欁繷弄挊挵癑齈羺譨啂槈耨鎒', 'N鐞譳奴孥驽笯駑伮努弩砮胬怒傉搙女钕籹釹衂恧朒衄疟虐瘧奻渜暖煗餪硸黁燶郍挪梛傩搻儺橠诺喏掿逽搦锘榒稬諾糑懦懧糥穤糯恁蔫', 'O吽摳噢哦筽夞乯鞰讴欧殴瓯鸥塸歐熰甌膒鴎櫙藲鏂鷗吘呕偶腢耦蕅藕怄沤慪漚', 'P钯鈀跁罷猈螌褩闆湴牓棓徬鎊剝襃铇袌鉋鮑琲絣痭琣逬跰螕鎞粃枈痺辟稫箆鞞猵萹拚徧緶辯骉蔈颮麃藨謤穮驃驫摽汃砏璸鉼碆磻犻苩瓟桲淿湐猼馞嚗髆蚾獛鵏吥荹鈈郶茷籓膰趽彷衯夆馮', 'P摓垺妚尃豧巿襆襥脯蜅秿鈲窌攈脟濼尨眫冖覕屰妑皅趴舥啪葩杷爬耙琶筢潖帊帕怕袙拍俳徘排猅棑牌箄輫簰犤哌派湃蒎鎃磗眅畨潘攀爿柈盘跘媻幋蒰搫槃磐縏蹒瀊蟠蹣鎜鞶坢冸判沜泮炍', 'P叛牉盼畔袢詊溿頖鋬鵥襻鑻乓汸沗肨胮雱滂膖霶厐庞逄旁舽嫎篣螃鳑龎龐鰟蠭嗙耪覫髈炐胖抛拋脬刨咆垉庖狍炮炰爮袍匏蚫軳鞄褜麅跑奅泡疱皰砲萢麭礟礮呸怌肧柸胚衃醅阫陪陫培毰赔', 'P锫裴裵賠錇俖伂沛佩帔姵斾旆浿珮配笩蓜辔馷嶏霈轡喷噴濆歕瓫盆湓葐呠翉翸喯匉怦抨泙恲胓砰梈烹硑軯閛漰嘭駍磞芃朋挷竼倗莑堋弸彭棚椖傰塜塳搒漨硼稝蓬鹏槰樥熢憉澎輣篷膨錋韸', 'P髼蟚蟛鬅纄韼鵬騯鬔鑝捧淎皏剻掽椪碰踫浌巼闏乶喸丕伓伾批纰邳坯怶披抷炋狉狓砒悂秛秠紕铍旇翍耚豾鈚鈹鉟銔劈磇駓髬噼錃錍魾憵礔礕闢霹皮阰芘岯枇毞肶毗毘疲笓蚍郫陴啤埤崥蚽', 'P豼椑焷琵脾腗榌鲏罴膍蜱隦魮壀鮍篺螷貔簲羆鵧朇鼙蠯匹庀仳圮苉脴痞銢諀鴄擗噽癖嚭屁淠渒揊媲嫓睤睥潎僻澼甓疈譬鷿鸊片囨偏媥犏篇翩鶣骈胼腁楄楩賆諚骿蹁駢騈覑谝貵諞骗魸騗騙', 'P剽彯漂缥飘磦旚縹翲螵犥飃飄魒瓢薸闝殍瞟篻醥皫顠票僄勡嘌嫖徱慓氕撇撆暼瞥丿苤鐅嫳姘拼礗穦馪驞玭贫貧琕嫔频頻嬪薲嚬矉颦顰品榀朩牝汖娉聘乒甹俜涄砯艵竮頩平评凭呯坪岼苹郱', 'P屏帡枰洴玶荓娦瓶屛帲淜萍蚲塀幈焩甁缾聠蓱蛢評軿鲆凴慿箳輧憑鮃檘簈蘋钋坡岥泼娝釙颇溌酦潑醱鏺婆嘙蔢鄱皤謈櫇叵尀钷笸鉕駊廹岶迫敀昢洦珀哱烞破砶粕蒪頗魄剖颒抔抙捊掊裒箁', 'P咅哣婄犃兺哛仆攴扑抪炇巬巭柨陠痡铺駇噗撲鋪擈鯆圤匍莆菩菐葡蒱蒲僕酺墣璞濮瞨穙镤贌纀鏷朴圃埔浦烳普圑溥暜谱潽樸氆諩檏镨譜蹼鐠舖舗曝', 'Q摮磝朁鸧鶬鼜詧軙儭櫬趍袳創敠匚釓隑矼肐鉤扢琯矔鸛龜氿肣馯抲頜礉隺渹舙酄攲敧稘毄緝觭禨鄿鐖饑焏踖躤蟣済萕濟袷唊脥價靬鳒鰜鶼鑯揃葥漸摪彊勥焳燋湫湬蟜譑峤嶠潐噭椄疌倢偼', 'Q媫蛣楬鮚荕埐嶜厪墐慬歏濅涇鶄捄趄跔鮈跼趜弆瞿鐻捲弮蚗傕鶌躩麏麕焌箘開欿歁殻揢挳硜矻誇厱熑燫艌鳥毆七迉沏妻柒倛凄栖桤缼郪娸悽戚捿桼淒萋朞期欺紪褄僛嘁慽榿槭漆緀慼磎諆', 'Q霋蹊魌鏚鶈亓祁齐圻岐岓芪其奇斉歧祈肵疧竒剘斊旂耆脐蚑蚚颀埼崎帺掑淇渏猉畦萁跂軝釮骐骑棊棋琦琪祺蛴愭碁碕褀頎鬾鬿旗粸綥綦綨緕蜝蜞璂禥蕲踑螧鲯懠濝藄檱櫀簱臍騎騏鳍蘄鯕', 'Q鵸鶀麒籏纃艩蠐鬐騹魕鰭玂麡乞邔企屺岂芑启呇杞玘盀唘豈起啓啔啟婍绮晵棨綮諬簯闙气讫気汔迄弃汽矵芞呮泣炁盵咠契砌荠栔訖唭欫夡愒棄湆湇葺碛摖暣甈碶噐憇器憩磜磧薺礘罊蟿掐', 'Q葜拤跒酠鞐圶冾帢恰洽殎硈愘髂千仟阡奷扦汘芊迁佥岍杄汧茾竏钎拪牵粁悭蚈谸铅婜牽釺谦雃僉愆签骞鹐搴摼撁箞諐遷褰顅檶攐攑櫏簽鏲鵮攓騫鐱鬜鬝籤韆仱岒忴扲拑乹前钤歬虔钱钳乾', 'Q偂掮揵軡媊鈐鉗墘榩箝銭潜橬錢黔鎆黚騝濳騚灊籖鰬浅肷淺嵰慊遣蜸潛谴缱繾譴鑓欠刋芡茜倩悓堑傔嵌棈椠皘蒨塹歉蔳儙槧篏輤篟壍嬱縴呛羌戕戗斨枪玱猐琷跄嗴椌獇腔嗆溬蜣锖嶈戧槍', 'Q牄瑲羫锵篬錆蹌镪蹡鎗鏘鏹強强墙嫱蔷樯漒蔃墻嬙檣牆謒艢蘠抢羟搶羥墏摤繈襁繦炝唴熗羻兛瓩悄硗郻鄗嵪跷鄡鄥劁敲踍锹墝碻頝墽幧橇缲磽鍫鍬繑趬蹺蹻乔侨荍荞桥硚喬僑槗谯嘺嫶憔', 'Q蕎鞒樵橋犞癄瞧礄藮譙趫鐈鞽顦巧釥愀髜俏诮陗峭帩窍殼翘誚髚僺撬鞘竅翹躈切苆癿茄聺且厒妾怯匧窃倿悏挈洯惬淁笡愜蛪朅箧緁锲魥篋踥穕藒鍥鯜鐑竊籡亲侵钦衾骎菳媇嵚誛嶔親顉駸', 'Q鮼寴庈芩芹埁珡矝秦耹菦蚙捦琴琹禽鈙雂勤嗪溱靲噙擒斳鳹懄檎澿瘽螓懃蠄坅昑笉梫赾寑锓寝寢鋟螼吢吣抋沁唚菣揿搇撳瀙藽靑青氢轻倾卿郬圊氫淸清傾廎蜻輕鲭鑋夝甠剠勍情殑硘晴棾', 'Q氰葝暒擏樈擎檠黥苘顷请庼頃漀請檾謦庆凊掅碃箐靘慶磬儬濪罄櫦宆跫銎卭邛穷穹茕桏笻筇赹惸焪焭琼舼蛩蛬煢熍睘瞏窮儝憌橩璚藑竆藭丘丠邱坵恘秋秌寈蚯媝萩楸鹙篍緧蝵穐趥鳅蟗鞦', 'Q鞧蘒鰌鰍鶖龝叴囚扏犰玌朹肍求虬泅虯俅觓訄訅酋唒浗紌莍逎逑釚梂殏毬球赇釻崷巯湭皳盚遒煪絿蛷裘巰觩賕璆蝤銶醔鮂鼽鯄鵭蠤鰽搝糗区曲佉匤岖诎阹驱坥屈岴抾浀祛胠袪區蛆躯筁粬', 'Q蛐詘趋嶇駆憈敺誳駈麹髷趨麯軀麴黢驅鰸鱋佢劬斪朐菃衐鸲淭渠絇葋軥蕖璖磲螶鴝璩翵蟝鼩蘧匷忂灈戵欋氍籧臞癯蠷衢躣蠼鑺鸜取竘娶紶詓竬龋齲厺去刞呿迲郥耝阒觑趣閴麮闃覰覷鼁覻', 'Q峑悛圈圏棬駩騡鐉全权佺诠姾泉洤荃拳牷辁啳埢婘惓痊硂铨湶犈筌絟腃葲搼楾瑔觠詮輇蜷銓権踡縓醛闎鳈鬈孉巏鰁權齤蠸颧顴犬汱畎烇绻綣虇劝券巻牶椦勧韏勸炔缺蒛瘸却埆崅悫雀硞确', 'Q阕塙搉皵阙鹊愨榷墧慤毃確趞燩闋礐闕鵲礭夋囷峮逡宭帬裙羣群裠郄', 'R吺兊兌熯卪坈繚髳挐鈉柟蟯臑抐內涊蹨孃菍莥獳檽蹃亽罖囕呥肰衻袇蚦袡蚺然髥嘫髯燃繎冄冉姌苒染珃媣蒅穣瀼獽禳瓤穰躟鬤壌嚷壤攘爙让懹譲讓荛饶桡橈襓饒犪扰娆隢擾绕遶繞惹热熱', 'R人仁壬忈朲忎秂芢鈓魜銋鵀忍荏栠栣荵秹稔綛躵刃刄认仞仭讱任屻扨纫妊杒牣纴肕轫韧饪姙紉衽紝訒軔梕袵絍腍靭靱韌飪認餁扔仍辸礽芿陾日驲囸釰鈤馹戎肜栄狨绒茙茸荣容峵毧烿媶嵘', 'R絨羢嫆搈搑摉榵溶蓉榕榮熔瑢穁蝾褣镕氄縙融螎駥髶嬫嶸爃鎔瀜曧蠑冗宂傇軵穃厹禸柔粈媃揉渘葇瑈腬糅蝚蹂輮鍒鞣瓇騥鰇鶔楺煣韖肉宍嶿邚如侞帤茹桇袽铷渪筎蒘銣蕠儒鴑嚅嬬孺濡薷', 'R鴽曘燸襦蠕颥醹顬鱬汝肗乳辱鄏入扖込杁洳嗕媷溽缛蓐鳰褥縟擩堧撋壖阮朊软耎偄軟媆愞瑌腝嫰碝緛蝡輭瓀礝桵甤緌蕤蕊蕋橤繠蘂蘃芮枘蚋锐瑞睿叡壡闰润閏閠潤橍叒若偌弱鄀婼渃焫楉', 'R嵶蒻箬篛爇鰙鰯鶸', 'S鉍灬杓攃偲纔參叄叅喰傪穇懆鄵拺笧粣鎈褨剎摻攙摌顫塲場綝乗娍匙飭埫醻敊猭漺輴縒棇楤漎憁缞縗鎝単單擔伔僤宲鍉遞遰挕阇闍陏蘴棴丨鞨咶鏸韢閄靃濈櫼帴菨嫅潏麗攦療蕯瀧氀稤蠰', 'S娞淰掱忯圱圲凵廧薔鐰韒鞩嫀殸棯葚挼仨桬撒洒訯靸潵卅飒脎萨摋隡馺颯薩櫒栍毢愢揌塞毸腮嘥噻鳃顋嗮赛僿賽簺虄三弎叁毵毶厁毿犙鬖壭伞傘散糁糂馓橵糝糣糤繖鏒饊俕閐桒桑槡嗓搡', 'S磉褬颡鎟顙丧喪掻慅搔溞骚缫臊鳋颾騒鰠鱢扫掃嫂埽瘙氉矂髞色栜涩啬渋铯歮琗嗇瑟歰銫澁懎擌濇濏瘷穑澀璱瀒穡繬穯轖鏼譅飋裇聓森槮襂僧鬙閪縇杀沙纱乷砂唦挱猀粆紗莎铩痧硰蔱裟', 'S樧魦鲨閷鎩鯊鯋繺傻儍繌倽唼啥帹萐喢歃煞翜翣閯霎筛篩簁簛晒曬山彡邖圸删刪杉杣芟姗衫钐埏狦珊舢痁脠軕笘閊跚剼搧嘇幓煽蔪潸澘曑檆膻鯅羴羶闪陕炶陝閃晱煔睒熌覢讪汕疝苫扇訕', 'S赸傓善椫銏骟僐鄯墠墡缮嬗擅敾樿膳磰謆赡繕蟮譱贍鐥饍騸鳝灗鱔伤殇商觞傷墒慯滳蔏殤熵螪觴謪鬺裳垧扄晌赏賞鑜丄上仩尙尚恦绱緔弰捎梢烧焼稍旓筲艄蛸輎蕱燒髾鮹勺芍柖玿韶少劭', 'S卲邵绍哨娋袑紹綤潲奢猞赊畲輋賒賖檨舌佘蛇蛥舍捨厍设社舎厙射涉涻渉設赦弽慑摄滠慴摵蔎蠂韘騇懾灄麝欇申屾扟伸身侁呻妽籶绅罙诜柛氠珅穼籸娠峷甡眒砷堔深紳兟椮葠裑訷罧蓡詵', 'S甧蔘燊薓駪鲹鯓鵢鯵鰺神榊鉮鰰邥弞抌沈审矤哂矧宷谂谉婶渖訠審諗頣魫曋瞫嬸瀋覾讅肾侺昚甚胂涁眘渗祳脤腎愼慎椹瘆蜃滲鋠瘮升生阩呏声斘昇枡泩苼殅牲珄竔胜陞曻陹笙湦焺甥鉎聲', 'S鍟鼪鵿绳憴澠譝省眚偗渻圣晟晠剰盛剩勝貹嵊聖墭榺蕂橳賸尸失师呞虱诗邿鸤屍施浉狮師絁湤湿葹溮溼獅蒒蓍詩瑡酾鳲蝨鳾褷鲺鍦鯴鰤鶳襹籭釃十饣什石辻佦时竍识实実旹飠峕拾炻祏蚀', 'S食埘時莳寔湜遈塒嵵溡蒔榯蝕鉽篒鲥鮖鼫鼭鰣史矢乨豕使始驶兘屎笶榁鉂駛士氏礻世丗仕市示卋式叓事侍势呩柹视试饰冟室恀恃拭是枾柿眂贳适栻烒眎眡舐轼逝铈視釈崼弑揓谥貰释勢嗜', 'S弒煶睗筮觢試軾鈰飾舓誓奭噬嬕澨諟諡遾餝螫簭籂襫鰘兙瓧収收手守垨首艏寿受狩兽售授绶痩膄壽瘦綬夀獣獸鏉书殳抒纾叔杸枢陎姝柕倏倐書殊紓掓梳淑焂菽軗鄃疎疏舒摅毹毺綀输跾踈', 'S樞蔬輸橾鮛攄瀭鵨尗秫婌孰赎塾熟璹贖暏暑黍署鼠鼡蜀潻薯曙癙襡糬襩籔蠴鱪鱰朮术戍束沭述侸怷树竖荗恕庶庻絉蒁術裋数竪腧墅漱潄數澍豎樹濖錰鏣鶐虪刷唰耍誜衰摔甩帅帥蟀卛闩拴', 'S閂栓涮腨双滝霜雙孀骦孇騻欆礵鷞鹴艭驦鸘爽塽慡樉縔鏯灀谁脽誰氵水氺閖帨涗涚祱税裞睡吮楯顺舜順蕣橓瞚瞤瞬鬊说妁烁朔铄欶硕矟嗍搠蒴嗽槊碩鎙厶丝司糹私咝泀俬思恖鸶媤斯絲缌', 'S蛳楒禗鉰飔凘厮榹禠罳銯锶嘶噝廝撕澌緦蕬螄鍶蟖蟴颸騦鐁鷥鼶死巳亖四罒寺汜伺似佀兕姒泤祀価孠泗饲驷俟娰柶牭梩洍涘肂飤笥耜釲竢覗嗣肆貄鈻飼禩駟蕼儩騃瀃螦乺忪松枀枩娀柗倯', 'S凇梥崧庺淞菘嵩硹蜙憽檧濍鬆怂悚捒耸竦傱愯嵷慫聳駷讼宋诵送颂訟頌誦餸鎹凁捜鄋嗖廀廋搜溲獀蒐蓃馊飕摗锼艘螋醙鎪餿颼騪叟傁嗾瞍擞薮擻藪櫢瘶苏甦酥稣窣穌鯂蘇蘓櫯囌俗玊夙诉', 'S泝肃洬涑珟素速殐粛骕傃粟訴谡嗉塐塑嫊愫溯溸肅遡鹔僳愬榡膆蔌觫趚遬憟樎樕潥鋉餗縤璛簌藗謖蹜驌鱐鷫狻痠酸匴祘笇筭蒜算夊芕虽倠哸浽荽荾眭葰滖睢熣濉鞖雖绥隋随遀綏隨瓍膸瀡', 'S髄髓亗岁砕祟粋谇埣嵗脺遂歲歳煫碎隧嬘澻穂誶賥檖燧璲禭穗穟繀襚邃旞繐繸鐆譢鐩孙狲荪飧搎猻蓀飱槂蕵薞畃损笋隼損榫箰鎨巺潠唆娑莏傞挲桫梭睃嗦羧蓑摍缩趖簑簔縮髿鮻所唢索琐', 'S琑惢锁嗩暛溑瑣鎍鎖鎻鏁逤溹蜶厦忄莘疋栅属', 'T諳啚裧儃禪蟬繵閶瞋鐺珵侱漦爞綢籌俶埱蓴鶉鈶撘迏迖沓荅逹溚達鎉韃呔蚮軚貸癉撣嘾彈餤黨攩欓逿蕩簜蘯闣朷焘燾僜奃髢詆弚苐媂諦顚顛鈿调蓧啑惵趃奵忊墥峝湩詷钭鋀褍蜳橔囤庉憞', 'T燉軃鋨鞈騩咍漢宊她冂燑轁墤謉饋噋擴斄伖鍩奤嵜鉆汭蟺鱓愓漡苕萔姼忕徥褆扌涭瑹儵稅磃鋖枱他它牠祂咜趿铊塌榙溻褟蹹侤塔墖獭鮙鳎獺鰨挞狧闼崉涾搨遝遢阘榻毾禢撻澾誻踏嚃錔嚺', 'T濌蹋鞜闒鞳闥譶躢襨囼孡骀胎台邰坮抬苔炱炲跆鲐箈臺颱儓鮐嬯擡薹檯籉太冭夳忲汰态肽钛泰粏舦酞鈦溙態燤坍贪怹啴痑舑貪摊滩嘽潬瘫擹攤灘癱坛昙倓谈郯婒惔弾覃榃痰锬谭墰墵憛潭', 'T談醈壇曇檀顃罈藫壜譚貚醰譠罎鷤忐坦袒钽菼毯鉭嗿憳憻暺醓璮叹炭埮探傝湠僋嘆碳舕歎賧汤铴嘡劏羰蝪薚镗蹚鏜鐋鞺鼞饧坣唐堂傏啺棠鄌塘嵣搪溏蓎隚榶漟煻瑭禟膅樘磄糃膛橖篖糖螗', 'T踼糛螳赯醣鎕餹闛饄鶶帑倘偒淌傥耥躺镋鎲儻戃曭爣矘钂烫摥趟燙仐夲弢涛绦掏絛詜嫍幍慆搯滔槄瑫韬飸縚縧濤謟鞱韜饕迯咷洮逃桃陶啕梼淘绹萄祹裪綯蜪鞀醄鞉鋾錭駣檮騊鼗讨套討畓', 'T忑忒特貣脦铽慝鋱蟘膯鼟疼痋幐腾誊漛滕邆縢螣駦謄儯藤騰籐鰧籘虅驣霯唞朰剔梯锑踢銻鷈鷉厗绨偍珶啼崹惿提渧稊缇罤遆鹈嗁瑅綈碮徲漽緹蕛蝭题趧蹄醍謕蹏鍗鳀題鮷鵜騠鯷鶗鶙体挮', 'T躰骵軆體戻屉剃洟倜悌涕逖悐惕掦逷惖揥替楴裼褅殢髰嚏鬀瓋鬄籊天兲婖添酟靔黇靝田屇沺恬畋畑胋畠甛甜菾湉填搷阗碵緂磌窴鴫璳闐鷆鷏忝殄倎唺悿捵淟晪琠腆觍痶睓舔餂覥賟錪靦掭', 'T瑱睼舚旫佻庣挑祧聎芀条岧岹迢祒條笤蓚龆樤蜩鋚鞗髫鲦螩鯈鎥齠鰷宨晀朓脁窕誂窱嬥眺粜絩覜趒跳頫糶贴萜貼铁蛈僣鴩鐡鐵驖呫帖飻餮厅庁汀艼听耓厛烃烴綎鞓聴聼廰聽廳邒廷亭庭莛', 'T停婷嵉渟筳葶蜓楟榳閮霆聤蝏諪鼮圢侹娗挺涏梃烶珽脡艇颋誔鋌頲濎乭囲炵通痌嗵蓪樋熥仝同佟彤峂庝哃狪茼晍桐浵烔砼蚒眮秱铜童粡絧衕酮鉖僮勭銅餇鲖潼曈朣橦氃犝膧瞳鮦统捅桶筒', 'T統綂恸痛慟憅偷偸鍮头投骰頭妵紏敨斢黈蘣透凸禿秃怢突唋涋捸堗湥痜葖嶀鋵鵚鼵図图凃峹庩徒捈涂荼途屠梌揬稌塗嵞瘏筡腯蒤鈯圖圗廜跿酴馟鍎駼鵌鶟鷋鷵土圡吐汢钍釷兎迌兔莵堍菟', 'T鵵湍猯煓貒团団抟團慱槫檲鏄糰鷒鷻圕疃彖湪褖推蓷藬颓隤頹頺頽魋穨蘈蹪俀脮腿僓蹆骽退娧煺蜕褪駾吞呑朜焞暾黗屯芚饨豘豚軘鲀魨霕臀臋氽畽坉乇讬托汑饦侂咃拕拖沰侻莌袥託涶脫', 'T脱飥魠驮佗陀坨岮沱驼柁砣砤袉鸵紽堶跎酡碢馱槖駄踻駝駞橐鮀鴕鼧騨鼍驒鼉妥毤庹媠椭楕嫷橢鵎拓柝唾跅毻箨籜', 'U辪癷袰蝊曢聣烪燞躼蒊蓞耂稥洜毜毝茒桛毮朑焽虲鶑鎼鐢艈霻闧焑屗歚徚鍂藔贘皼斏聁祍', 'W趡惡噁唲陚龏萖関闗關貫窐姽恑瞶咼堝濄幠膴鋘譁瀤綄朚撝蒦嚄擭雘艧扝噲抂巋磈薶槾鄤澫堥夘呅韎雺霿沕忞鴖譕帓歾靺瞴蟱墲娒孯掔瓗渞蜹捼琞亠撱鰖屲劸哇娃徍挖洼娲畖窊媧嗗蛙搲', 'W溛漥窪鼃攨瓦佤邷咓瓲砙袜嗢腽膃襪韈韤歪喎竵崴外弯剜婠帵塆湾睕蜿潫豌彎壪灣丸刓汍纨芄完岏忨抏玩笂紈捖顽烷琓貦頑邜宛倇唍挽晚盌埦婉惋晩梚绾脘菀晼椀琬皖畹碗綩綰輓踠鋔鍐', 'W万卍卐杤捥腕萬翫鋄薍錽贃鎫贎尩尪尫汪亡亾兦王仼彺莣蚟网忹往徃枉罔惘菵暀棢焹蛧辋網蝄誷輞瀇魍妄忘迋旺盳望朢危威烓偎逶隇隈喴媁媙愄揋揻渨煀葨葳微椳楲溦煨詴縅蝛覣嶶薇鳂', 'W癐巍鰃鰄囗为韦围帏沩违闱峗峞洈為韋桅涠唯帷惟维喡圍嵬幃湋溈爲違潍蓶鄬潙潿濰鍏闈鮠癓覹犩霺伟伪尾纬芛苇委炜玮洧娓捤浘荱诿偉偽崣梶硊萎隗骩嵔廆徫愇猥葦蒍骪骫暐椲煒瑋痿', 'W腲艉韪僞碨蜲蜼鲔寪緯蔿諉踓韑頠儰濻鍡鮪壝韙颹瀢亹斖卫未位味苿畏胃軎尉硙菋谓喂媦渭猬煟墛蔚慰熭犚磑緭蝟衛懀濊璏罻衞謂餧鮇螱褽餵魏藯轊鏏霨鳚蘶饖讆躗讏躛昷塭温殟溫瑥榲', 'W瘟豱鳁鎾饂鰛鰮文彣纹芠炆砇闻紋蚉蚊珳阌鈫雯瘒聞馼魰鳼鴍螡閺閿蟁闅鼤闦刎吻呚忟抆呡肳紊桽脗稳穏穩问妏汶莬問渂脕揾搵絻顐璺翁嗡鹟螉鎓鶲奣塕嵡滃蓊暡瞈聬瓮蕹甕罋齆挝倭涡', 'W莴唩涹渦猧萵喔窝窩蜗蝸踒我婐婑捰仴沃肟卧臥偓媉幄握渥焥硪楃腛斡瞃濣瓁龌齷乌圬弙污邬呜杇巫屋洿诬钨趶剭窏釫鄔嗚誈誣箼螐鴮鎢鰞无毋吴吾呉芜梧洖浯茣莁珸祦鹀無禑蜈蕪璑鵐', 'W鯃鼯鷡乄五午仵伍坞妩庑忤怃迕旿武玝侮俉倵捂啎娬牾珷塢摀熓碔鹉瑦舞嫵廡憮潕錻儛橆甒鵡躌兀勿务戊阢伆屼扤岉杌芴忢物矹敄误務悞悟悮粅逜晤焐婺嵍痦隖靰骛奦嵨溩雾寤熃誤鹜鋈', 'W窹霚鼿霧齀蘁騖鶩', 'X欸庍壆扱烲愖糦臰欪滀嘼錯廗諜摡給蚼規嶲鮭巂鬹咁譀迒茠滈欱郃螛嗃熇燺揈閧闀闂鬨銗謼滸芐觟懁郇狟澴還镮鐶儶譮孈葷轋掝擊彐蔇縘繫夾埉浹傢裌叚徦鰔梘筧礆見閒瞯鵁轇驕絞較湝', 'X頡觧吤繲坙巠坓顈眗鼰鼳鋗絹獧決泬勪噱姰濬愾埳堿闞晇欵歀潰搚懢壏嘮釐溓蘝蘞稴漻衖莔禰瓕賯撓譊鉨鉩煖謳嘔盤嚊恓棲諿氣欦臤慳荨羬蕁槏伣俔嗛骹燆睄綅瓊蓲鱃魼胊卻舃碏儴勷蘘', 'X纕繻灑钑鈒鰓騷雭殺榝姍釤縿莦颵姺濕宩昰笹齛咰鉥獡箾蜤燍叜宿碿潚橚孫鶽橝撢餳饀屜歒盷蓨赨緰圩韡捾夕兮忚汐西覀吸希卥昔析矽穸肸肹俙徆怸郗饻唏奚娭屖息悕晞氥浠牺狶莃唽悉', 'X惜桸欷淅渓烯焁焈琋硒菥赥釸傒惁晰晳焟犀睎稀粞翕翖舾鄎厀嵠徯溪煕皙蒠锡僖榽熄熙緆蜥豨餏嘻噏嬆嬉瘜膝餙凞樨橀歙熹熺熻窸羲螅螇錫燨犠瞦礂蟋谿豀豯貕繥雟鯑鵗觹譆醯鏭隵巇曦', 'X爔犧酅觽鼷蠵鸂觿鑴习郋席習袭觋媳椺蒵蓆嶍漝覡趘槢蝷薂隰檄謵鎴霫鳛飁騱騽襲鰼驨枲洗玺徙铣喜葈葸鈢屣漇蓰銑憘憙暿橲禧諰壐縰謑蟢蹝璽鱚矖纚躧匸卌戏屃系饩呬忥怬细係恄盻郤', 'X欯绤細釳阋塈椞舄趇隙慀滊禊綌赩隟熂犔稧戯潟澙蕮覤戱黖戲磶虩餼鬩嚱闟霼衋虾谺傄閕敮煆颬瞎蝦鰕匣侠狎俠峡柙炠狭陜峽烚狹珨祫硖笚翈舺陿溊硤遐搳暇瑕筪碬舝辖縀蕸縖赮魻轄鍜', 'X霞鎋黠騢鶷閜丅下吓圷疜夏梺廈睱諕嚇懗罅夓鏬仙仚屳先奾纤佡忺氙杴祆秈苮籼珗莶掀铦跹酰锨僊僲嘕銛鲜暹韯憸鍁繊褼韱鮮馦蹮孅廯攕譣纎鶱襳躚纖鱻伭咞闲妶弦贤咸挦涎胘娴娹婱絃', 'X舷蚿衔啣痫蛝閑鹇嫌甉銜嫺嫻憪撏澖誸賢諴輱醎癇癎藖鹹礥贒鑦鷳鷴鷼冼狝显险毨烍猃蚬険赻筅尟尠搟禒蜆跣箲獫獮藓鍌燹顕幰攇櫶蘚玁韅顯灦县岘苋现线臽限姭宪県陥哯垷娊娨峴晛涀', 'X莧陷現馅睍絤缐羡献粯腺僩僴綫誢撊線鋧憲橌縣錎餡豏瀗臔獻糮鏾霰鼸乡芗相香郷厢啌鄉鄊廂湘缃葙鄕楿薌箱緗膷襄忀骧麘欀瓖镶鱜鑲驤瓨佭详庠栙祥絴翔跭享亯响蚃饷晑飨想銄餉鲞嚮', 'X蠁鯗響饗饟鱶向姠巷项珦象缿萫項像勨嶑曏橡襐蟓鐌鱌灱灲呺枭侾削哓枵骁宯宵庨恷消绡虓逍鸮啋婋梟焇猇萧痚痟硝硣窙翛萷销揱綃嘐歊潇箫踃嘵憢撨獢銷霄彇膮蕭魈鴞穘簘藃蟂蟏謞鴵', 'X嚣瀟簫蟰髇嚻囂櫹髐鷍蠨驍毊虈洨郩崤淆訤誵小晓暁筱筿皛曉篠謏皢孝肖効咲恔俲哮效校涍笑啸傚敩滧詨嘋嘨誟嘯歗熽斅斆些楔歇蝎蠍劦协旪邪協胁垥奊恊拹挾脅脇脋衺偕斜谐猲絜翓嗋', 'X愶携瑎綊熁膎勰撷擕緳缬蝢鞋諧燲擷鞵襭攜纈讗龤写冩寫藛伳灺泄泻祄绁缷卸炧炨卨娎屑屓偰徢械焎禼亵媟屟揳渫絬谢僁塮榍榭褉噧屧暬韰嶰廨懈澥獬糏薢薤邂燮褻謝夑瀉瀣爕蟹蠏齘齥', 'X齂躠屭躞心邤妡忻芯辛昕杺欣盺俽惞鈊锌新歆廞噷噺嬜薪馨鑫馫枔鬵鐔伈潃阠伩囟孞炘信軐脪衅訫焮馸舋顖釁兴狌星垶骍惺猩煋瑆腥蛵觪箵篂興謃曐觲騂皨刑邢形陉侀郉哘型洐钘陘娙硎', 'X裄铏鈃鉶銒鋞睲醒擤杏姓幸性荇倖莕婞悻涬塂緈嬹臖凶兄兇匈芎讻忷汹哅恟洶胷胸訩詾雄熊诇詗夐敻休俢修咻庥烋烌羞脙鸺臹貅馐樇銝髤髹鎀鮴鵂饈鏅飍苬朽綇滫糔秀岫珛绣袖琇锈溴綉', 'X璓裦螑繍繡鏥鏽齅戌旴疞盱欨胥须訏顼虗虚谞媭幁揟欻虛須楈窢頊嘘稰需魆噓墟嬃歔縃蕦蝑歘諝譃魖驉鑐鬚俆徐蒣许呴姁诩冔栩珝偦許湑暊詡鄦糈醑盨旭伵序汿侐卹沀叙恤昫洫垿欰殈烅', 'X珬勖勗敍敘烼绪续酗喣壻婿朂溆絮訹嗅慉煦続蓄賉槒漵潊盢瞁緒聟銊稸緖瞲藚續蓿吅轩昍咺宣晅軒梋谖喧塇媗愃愋揎萱萲暄煊瑄蓒睻儇禤箮翧蝖嬛蕿諠諼鍹駽矎翾藼蘐蠉譞鰚讂玄玹痃悬', 'X旋琁蜁嫙漩暶璇檈璿懸选烜暅選癣癬怰泫昡炫绚眩袨铉琄眴衒渲絢楦鉉碹蔙镟鞙颴縼繏鏇贙疶蒆靴薛鞾穴斈乴坹学岤峃茓泶袕鸴踅學嶨澩燢觷雤鷽雪樰膤艝轌鳕鱈血吷怴泧狘疦桖烕谑趐', 'X謔瀥坃勋埙焄勛塤熏窨蔒勲勳薫駨嚑壎獯薰曛燻臐矄蘍壦爋纁醺寻巡旬驯杊询峋恂洵浔紃荀栒桪毥珣偱尋循揗詢馴鄩鲟噚攳樳燂燅燖璕襑蟳鱏鱘灥卂训讯伨汛迅侚徇狥迿逊殉訊訓訙奞巽', 'X殾遜愻賐噀蕈顨鑂吁', 'Y叆賹礙譺靉菴媕葊痷闇鵪鶕晻洝媼澚墺驁頨瑒耛拸呾訑婸潒扚昳屵姶堊搤閼煾妋鳱輵夃焸蠱溎裷緷蟈淊嚛欥瓛輐喛揘韹熀袆煇褘蚘噦矆拁玪豜豣將侥烄僥伒莖俓泂揂圧僪貗飬妜焆鐍炏顑', 'Y丂髺樂貍櫟躒輅擽嫚玅桙獶輗掜孴儗肀喦噛槷嚙钀汼齵堷踦锜錡裿綺鉛膁羗撽赺欽汓翑蝺輑橪蕘嬈嵤銳鋭挻烻剡虵縄繩鱦釶鉇箷戺謚釋哾說説爍鑠梀筍鉈珆旲錟湯匋鴺趯恌銕桯筩婾媮殕', 'Y悇蛻涒扡挩捝狏迱詑彵啘乛涴妧尣燰琟維厃痏薳叞榅辒輼轀勜臒汙汚烏歍吳郚娪焬熈誒歖潝疨磍嬐薟唌湺衘崄險嶮硍羨麲詳峫鐷洩紲絏緤訢脩褎褏銹獝藇鱮楥辥廵潯丫压呀庘押鸦桠鸭孲', 'Y铔椏鴉錏鴨壓鵶鐚牙伢岈芽厓枒琊笌蚜堐崕崖涯猚瑘睚衙漄齖厊庌哑唖啞痖雅瘂蕥劜圠亚穵襾讶亜犽迓亞玡垭娅挜砑俹氩埡婭掗訝揠氬猰聐圔稏窫齾咽恹剦烟珚胭偣崦淹焉菸阉湮腌傿煙', 'Y鄢嫣漹嶖樮醃閹嬮篶懕臙黫讠円延闫严妍芫言訁岩昖沿炎郔姸娫狿研莚娮盐琂硏訮閆阎嵒嵓筵綖蜒塩揅楌詽碞蔅颜虤閻厳檐顏顔嚴壛巌簷櫩麙壧孍巖巗巚欕礹鹽麣夵抁沇乵兖奄俨兗匽弇', 'Y衍偃厣掩眼萒郾酓嵃愝扊揜棪渰渷琰遃隒椼硽罨裺演褗戭蝘魇噞躽縯檿黡厴甗鰋鶠黤齞龑儼黬黭顩鼴巘曮魘鼹齴黶厌妟觃牪姲彥彦砚唁宴晏艳覎验偐掞焔谚隁喭堰敥焰焱猒硯葕雁椻滟鳫', 'Y厭墕暥熖酽嬊谳餍鴈燄燕諺赝鬳曕鴳酀騐験嚥嬿艶贋軅爓醶騴鷃灔贗觾讌醼饜驗鷰艷灎釅驠灧讞豓豔灩央咉姎抰泱殃胦眏秧鸯鉠雵鞅鍈鴦扬羊阦阳旸杨炀佯劷氜疡钖飏垟徉昜洋羏烊珜眻', 'Y陽崵崸揚蛘敭暘楊煬禓瘍諹輰鍚鴹颺鐊鰑霷鸉卬仰佒坱奍岟养炴氧痒紻傟楧軮慃氱羪養駚懩攁瀁癢礢怏柍恙样羕詇様漾樣幺夭吆妖枖祅訞喓葽楆腰鴁邀爻尧尭肴垚姚峣轺倄烑珧窑傜堯揺', 'Y殽谣軺嗂媱徭愮搖摇猺遙遥摿暚榣瑤瑶銚飖餆嶢嶤徺磘窯窰餚繇謠謡鳐颻蘨顤鰩仸宎岆抭杳殀狕苭咬柼眑窅窈舀偠婹崾溔榚鴢闄騕齩鷕穾药要袎窔筄葯詏熎覞靿獟鹞薬鼼曜燿艞藥矅曣耀', 'Y纅鷂讑鑰倻椰暍噎潱蠮爷耶捓揶铘爺釾鋣鎁擨也吔亪冶埜野嘢漜壄业叶曳页邺夜抴亱枼洂頁晔枽烨掖液谒堨殗腋葉鄓墷楪業馌僷曄曅歋燁擛皣瞱鄴靥嶪嶫澲謁餣嚈擫曗瞸鍱擪爗礏鎑饁鵺', 'Y靨驜鸈膶岃一弌辷衤伊衣医吚壱依祎咿洢猗畩郼铱壹揖欹蛜禕嫛漪稦銥嬄噫夁瑿鹥繄檹毉醫黟譩鷖黳乁仪匜圯夷冝宐沂诒侇宜怡沶狋衪迤饴咦姨峓弬恞柂瓵荑贻迻宧巸扅栘桋眙胰袘酏痍', 'Y移萓媐椬羠蛦詒貽遗暆椸誃跠頉颐飴疑儀熪遺嶬彛彜螔頤頥寲嶷簃顊鮧彝彞謻鏔籎觺讉鸃乙已以迆钇佁攺矣苡苢庡舣蚁釔倚扆笖逘偯崺旑椅鈘鉯鳦旖輢敼螘檥礒艤蟻顗轙齮乂义亿弋刈忆', 'Y艺仡匇肊议阣亦伇屹异忔芅伿佚劮呓坄役抑曵杙耴苅译邑佾呭呹峄怈怿易枍泆炈绎诣驿俋奕帟帠弈枻浂玴疫羿衵轶唈垼悒挹栧欭浥浳益袣谊貤陭勚埶埸悘悥殹異羛翊翌萟訲訳豙豛逸釴隿', 'Y幆敡晹棭殔湙焲蛡詍跇鈠骮亄兿意溢獈痬竩缢義肄裔裛詣勩嫕廙榏潩瘗膉蓺蜴靾駅億撎槸毅熠熤熼瘞誼镒鹝鹢黓劓圛墿嬑嬟嶧憶懌曀殪澺燚瘱瞖穓縊艗薏螠褹寱斁曎檍歝燡燱翳翼臆貖鮨', 'Y癔藙藝贀鎰镱繶繹豷霬鯣鶂鶃鶍瀷蘙譯議醳醷饐囈鐿鷁鷊懿襼驛鷧虉鷾讛齸乚囙因阥阴侌垔姻洇茵荫音骃栶殷氤陰凐秵裀铟陻隂喑堙婣愔筃絪歅溵禋蒑蔭慇瘖銦磤緸鞇諲霒駰噾濦闉霠韾', 'Y冘吟犾苂垠泿圁峾烎狺珢粌荶訔唫婬寅崟崯淫訡银鈝龂滛碒鄞夤蔩訚誾銀龈噖殥璌嚚檭蟫霪齗齦鷣尹引吲饮蚓隐淾釿鈏飲隠靷飮朄趛檃瘾隱嶾濥螾蘟櫽癮讔印茚洕胤垽湚猌廕酳慭癊憖憗', 'Y鮣懚檼应応英偀桜珱莺啨婴媖愥渶绬朠煐瑛嫈碤锳嘤撄滎甇緓缨罂蝧賏樱璎噟罃褮霙鴬鹦嬰應膺韺甖鎣鹰鶧嚶孆孾攖瀴罌蘡櫻瓔礯譻鶯鑍纓蠳鷪軈鷹鸎鸚盁迎茔盈荥荧莹萤营萦蛍営溁溋', 'Y萾僌塋楹滢蓥潆熒蝇瑩蝿嬴營縈螢濙濚濴藀覮謍赢巆攍攚瀛瀠瀯蠅櫿灐籝灜贏籯矨郢梬颍颕颖摬影潁瘿穎頴巊廮鐛癭映暎硬媵膡鞕瀅譍哟唷喲佣拥痈邕庸傭嗈鄘雍墉嫞慵滽槦牅噰壅擁澭', 'Y郺镛臃癕雝鏞鳙廱灉饔鱅鷛癰喁颙顒鰫永甬咏怺泳俑勇勈栐埇悀柡涌恿傛惥愑湧硧詠塎嵱彮愹蛹慂踊禜鲬踴鯒用苚砽醟优忧攸呦怮泑幽悠麀滺憂優鄾嚘懮瀀櫌纋耰尢尤由沋犹邮怞油肬怣', 'Y斿柚疣峳浟秞莜莤莸逌郵铀偤蚰訧逰游猶遊鱿楢猷鲉輏駀蕕蝣魷輶鮋櫾邎友有丣卣苃酉羑庮羐莠梄聈脜铕湵蒏禉蜏銪槱牖牗黝又右幼佑侑孧狖糿哊囿姷宥峟牰祐诱迶唀梎蚴亴貁釉酭誘鼬', 'Y扜纡迂迃穻陓紆虶唹淤盓渝瘀箊于亐予邘伃余妤扵杅欤玗玙於盂臾衧鱼俞兪禺竽舁茰荢娛娯娱狳谀酑馀渔萸釪隃隅雩魚堣堬崳嵎嵛愉揄楰湡畬畭硢腴逾骬愚楡榆歈牏瑜艅虞觎漁睮窬舆褕', 'Y歶羭蕍蝓諛雓餘魣嬩懙澞覦踰歟璵螸輿鍝礖謣髃鮽旟籅騟鯲鰅鷠鸆与伛宇屿羽雨俁俣挧禹语圄峿祤偊匬圉庾敔鄅萭萮铻傴寙斞楀瑀瘐與語窳鋙龉噳嶼貐斔麌蘌齬玉驭聿芋芌妪忬饫育郁彧', 'Y昱狱秗茟俼峪栯浴砡钰预喐域堉悆惐欲淢淯袬谕逳阈喅喩喻媀寓庽御棛棜棫焴琙矞裕遇飫馭鹆愈滪煜稢罭蒮蓣誉鈺預嫗嶎戫毓獄瘉緎蜟蜮輍銉隩噊慾稶蓹薁豫遹鋊鳿澦燏燠蕷諭錥閾鴥鴧', 'Y鴪儥礇禦魊鹬癒礜穥篽繘醧鵒櫲饇蘛譽轝鐭霱欎驈鬻籞鱊鷸鸒欝軉鬰鬱灪籲爩囦鸢剈冤弲悁眢鸳寃渁渆渊渕惌淵葾棩蒬蜎鹓箢鳶蜵駌鋺鴛嬽鵷灁鼘鼝元贠邧员园沅杬垣爰貟原員圆笎蚖袁', 'Y厡酛圎援湲猨缘鈨鼋園圓塬媴嫄源溒猿獂蒝榞榬辕緣縁蝝蝯魭橼羱薗螈謜轅黿鎱櫞邍騵鶢鶰厵远盶逺遠夗肙妴苑怨院垸衏傆媛掾瑗禐愿裫褑褤噮願曰曱约約箹矱彟彠月戉刖岄抈礿岳枂玥', 'Y恱钥悅悦蚎蚏軏钺阅捳跀跃粤越鈅粵鉞閱閲嬳樾篗嶽龠籆瀹蘥黦爚禴躍籥鸑籰龥鸙蒀煴蒕熅奫蝹赟頵馧贇云勻匀伝呍囩妘抣沄纭芸昀畇眃秐郧涢紜耘耺鄖雲愪氲溳筼蒷氳熉澐蕓鋆橒篔縜', 'Y繧允阭夽抎狁玧陨荺殒喗鈗隕殞褞馻磒霣齫齳孕运枟郓恽晕鄆酝傊惲愠缊運慍暈腪韫韵熨緼蕰蕴縕薀賱醖醞餫藴韗韞蘊韻這', 'Z敱捗囃謲匨蔵冊側厠廁嶒扠挿揷蹅茝僝欃倀长仧長镸鼌鼂謿謓迧陳鈂趂朾脀憕徎胵絺泜歭遟遲迣徸漴褈緟蝩蟲紬搊椆詶薵偢芻鉏蕏傳鶨倕埀箠鎚純湻辶腏趠齱骴薋泚跐從蓯樅熜緫潀潈潨', 'Z酢噈欑穳篹嶉槯伜倅紣綷顇墫拵踆睉蔖剳蹛黱酖亶翢篴拞牴觝啇摕蝃踶點鳭調藋喋臷鰈眰鼑枓剢耑磓隊腞夛仛喥柮樲胕阝贛戇滜睪牫贑嫢啈楖嚌璾鯽穧椾碊鳽餰栫袸濺瀳鏩繳擳竧鳩砠蓻', 'Z齟怚跙脧雋捔逫嵁沴酈譧驡狵沵摨聶囁釽亝祇蚔齊磩鈆謙綪繰菬埥軽鯖伹岨恮跧甽繅洓篸箑摂攝鉐實識亊鉃適銴檡薥藷鸀尌虒睟簨駘菭襢犆媞薙嚔鐟塡怗聑跕鉄鉵獞穜潳剬剸塼摶漙篿尵', 'Z旽啍忳飩杔馲驝陁萚蘀聉顡醀錗撾扸杫咥枮鮝鞢鋅鮏鯹鎐蓔捙偞擖杝妷秇栺軼乑斦浧銿鈾圫汋帀匝沞咂拶沯桚紥紮鉔魳臜臢杂砸韴雑磼襍雜囐雥災灾甾哉栽烖菑渽溨睵賳宰载崽載再在扗', 'Z洅傤酨儎縡兂糌簪簮鐕咱偺喒昝寁撍儧攒儹攢趱趲暂暫賛赞錾鄼濽蹔酂瓉贊鏨瓒酇囋灒讃瓚禶襸讚饡牂羘赃賍臧賘贓髒贜驵駔奘弉脏塟葬銺臓臟傮遭糟蹧醩凿鑿早枣栆蚤棗璅澡璪薻藻灶', 'Z皁皂唕唣造梍喿慥煰艁噪簉燥竃譟趮躁竈啫伬则択沢择泎泽责迮則唶啧帻笮舴責溭矠嘖嫧幘箦蔶樍歵諎赜擇澤皟瞔簀耫礋襗謮賾蠌齚齰鸅仄夨庂汄昃昗捑崱稄贼賊鲗蠈鰂鱡怎谮譖譛囎曽', 'Z増鄫增憎缯橧熷璔矰磳罾繒譄鱛锃鋥甑赠贈吒迊咋抯挓柤哳偧喳揸渣溠楂劄皶箚樝觰皻譇齄齇扎札甴轧軋闸蚻铡煠牐閘霅鍘譗厏苲眨砟搩鲊鲝踷鮓鮺乍灹诈咤奓柵炸宱痄蚱詐搾摣榨醡夈', 'Z粂捚斋斎摘榸齋宅翟窄鉙债砦債寨瘵沾毡旃栴粘蛅飦惉詀趈詹閚谵噡嶦薝邅霑氈氊瞻鹯旜譫饘鳣驙魙鱣鸇讝拃斩飐展盏崭斬琖搌盞嶃嶄榐辗颭嫸醆橏蹍輾皽黵占佔战栈桟站偡绽菚棧湛戦', 'Z綻嶘輚戰虥虦覱轏蘸驏张弡張章傽鄣嫜彰慞漳獐粻蔁遧暲樟璋餦蟑鏱騿鱆麞仉涨涱掌漲幥礃鞝鐣丈仗扙帐杖胀账粀帳脹痮障墇嶂幛賬瘬瘴瞕佋钊妱巶招昭炤盄釗啁鉊駋窼鍣爫找沼瑵召兆', 'Z诏枛垗狣赵笊肁旐棹罀詔照罩箌肇肈趙曌燳鮡櫂瞾羄蜇嫬遮厇折歽矺砓籷虴哲埑粍袩啠悊晢晣辄喆棏蛰詟谪摺輒樀磔輙銸辙蟄嚞謫謺鮿轍讁襵讋者锗赭褶鍺这柘浙淛嗻蔗樜鹧蟅鷓贞针侦', 'Z浈珍珎貞帪栕桢眞真砧祯針偵敒桭酙寊湞葴遉搸斟楨獉甄禎蒖蓁鉁靕榛槇殝瑧碪禛潧箴樼澵臻薽錱轃鍖鍼籈鱵屒诊抮枕姫弫昣胗轸畛疹眕袗紾聄萙裖覙診軫嫃缜稹駗縝縥辴鬒黰圳阵纼侲', 'Z挋陣鸩振朕栚紖眹赈塦揕絼蜄敶誫賑鋴镇震鴆鎭鎮黮凧争佂姃征怔爭峥挣炡狰烝眐钲埩崝崢掙猙睁聇铮媜揁筝徰睜蒸鉦徴箏徵踭篜錚鬇癥氶抍糽拯掟塣晸愸撜整正证诤郑帧政症幀証鄭諍', 'Z鴊證之支卮汁芝吱巵汥枝知织肢徔栀祗秓秖胑胝衹衼倁疷祬秪脂隻梔戠椥臸搘禔綕榰蜘馶鳷謢鴲織蘵鼅禵执侄坧直姪値值聀釞埴執职植殖禃絷跖瓡墌摭馽嬂慹漐踯樴膱縶職蟙蹠蹢軄躑止', 'Z只凪劧旨阯址坁帋扺汦沚纸芷抧祉茋咫恉指枳洔砋轵淽疻紙訨趾軹黹酯藢襧阤至芖志忮扻豸制厔垁帙帜治炙质郅俧峙庢庤挃柣栉洷祑陟娡徏挚晊桎狾秩致袟贽轾乿偫徝掷梽猘畤痔秲秷窒', 'Z紩翐袠觗貭铚鸷傂崻彘智滞痣蛭骘寘廌搱滍稙稚筫置跱輊锧雉墆槜滯潌疐瘈製覟誌銍幟憄摯潪熫稺膣觯質踬鋕旘瀄緻隲駤鴙儨劕懥擲擿櫛穉螲懫贄櫍瓆觶騭鯯礩豑騺驇躓鷙鑕豒中伀汷刣', 'Z妐彸迚忠泈炂终柊盅衳钟舯衷終鈡幒蔠锺螤鴤螽鍾鼨蹱鐘籦肿种冢喠尰塚歱煄腫瘇種踵仲众妕狆祌茽衶重蚛偅眾堹媑筗衆諥州舟诌侜周洀洲炿诪烐珘辀郮婤徟淍矪週鸼喌粥赒輈銂賙輖霌', 'Z駲嚋盩謅鵃騆譸妯轴軸碡肘帚疛菷晭睭箒鯞纣伷呪咒宙绉冑咮昼紂胄荮晝皱酎粙葤詋甃僽皺駎噣縐骤籀籕籒驟朱劯侏诛邾洙茱株珠诸猪硃袾铢絑蛛誅跦槠潴蝫銖橥諸豬駯鮢鴸瀦藸櫧櫫鼄', 'Z鯺蠩竹泏竺炢笁茿烛窋逐笜舳瘃蓫燭蠋躅鱁劚孎灟斸曯欘爥蠾钃主宔拄砫罜陼渚煑煮詝嘱濐麈瞩屬囑矚伫佇住助纻芧苎坾杼注苧贮迬驻壴柱柷殶炷祝疰眝祩竚莇秼紵紸羜著蛀嵀筑註貯跓', 'Z軴铸筯鉒飳馵墸箸翥樦鋳駐築篫霔麆鑄抓檛膼簻髽爪拽跩专叀専砖專鄟嫥瑼甎膞颛磚諯蟤顓鱄转孨転竱轉灷啭堟蒃瑑僎赚撰篆馔縳襈賺譔饌囀籑妆庄妝庒荘娤桩莊湷粧装裝樁糚丬壮壯状', 'Z狀壵梉焋幢撞戅隹追骓椎锥錐騅鵻沝坠笍娷缀惴甀缒畷硾膇墜綴赘縋諈醊錣餟礈贅轛鑆宒迍肫窀谆諄衠准埻凖準綧訰稕卓拙炪倬捉桌棁涿棳琸窧槕穛穱蠿圴彴犳灼叕妰茁斫浊丵浞烵诼酌', 'Z啄啅娺梲着斮晫椓琢斱硺窡罬撯擆斲禚劅諁諑鋜濁篧擢斀斵濯櫡謶镯鐯鵫灂蠗鐲籗鷟籱仔孖孜茊兹咨姕姿茲栥玆紎赀资崰淄秶缁谘赼嗞孳嵫椔湽滋葘辎鄑孶禌觜貲資趑锱稵緇鈭镃龇輜鼒', 'Z澬諮趦輺錙髭鲻鍿鎡頾頿鯔鶅齍鰦齜籽子吇姉姊杍矷秄胏呰秭耔虸笫梓釨啙紫滓訾訿榟橴字自芓茡倳剚恣牸渍眥眦胔胾漬唨宗倧综骔堫嵏嵕惾棕猣腙葼朡椶嵸稯綜緃熧緵翪艐蝬踨踪磫豵', 'Z蹤騌鬃騣鬉鬷鯮鯼鑁总偬捴惣愡揔搃傯蓗摠総縂燪總鍯鏓纵昮疭倊猔碂粽糉瘲縦錝縱邹驺诹郰陬掫菆棷棸鄒箃緅諏鄹鲰鯫黀騶齺赱走鯐奏揍媰租菹葅蒩卆足卒哫崒崪族傶稡箤踤踿镞鏃诅', 'Z阻组俎爼珇祖組詛靻鎺謯劗躜鑚躦鑽繤缵纂纉籫纘钻揝攥厜朘嗺樶蟕纗嶊嘴噿濢璻枠栬絊酔晬最祽罪辠酻蕞醉嶵檇鋷錊檌穝欈尊嶟遵樽繜罇鶎鐏鳟鱒鷷僔噂撙譐捘銌昨秨莋捽椊葃稓筰鈼', 'Z左佐繓作坐阼岝岞怍侳柞祚胙唑座袏做葄蓙飵糳咗' ); function MakeSpellCode(stText: UnicodeString): String; var c: UnicodeChar; len: Integer; substr: String; usubstr: UnicodeString; I: Integer; begin Result := ''; if stText = '' then begin Exit; end; len:= Length(stText); for I:= 1 to len do begin c := stText[I]; if (Ord(c) >= 19968) and (Ord(c) < 40869) then begin for substr in strChineseCharList do begin usubstr:= UTF8Decode(substr); if Pos(c, usubstr) <> 0 then begin Result:= Result + substr[1]; Break; end; end; end else Result := Result + UTF16ToUTF8(c); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uglobs.pas����������������������������������������������������������������������0000644�0001750�0000144�00000366060�12666540554�015334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz Globals variables and some consts contributors: Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru) Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) } unit uGlobs; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Forms, Grids, Types, uExts, uColorExt, Graphics, DCClassesUtf8, uMultiArc, uColumns, uHotkeyManager, uSearchTemplate, uFileSourceOperationOptions, uWFXModule, uWCXModule, uWDXModule, uwlxmodule, udsxmodule, DCXmlConfig, uInfoToolTip, fQuickSearch, uTypes, uClassesEx, uHotDir, uSpecialDir, uVariableMenuSupport, SynEdit, uFavoriteTabs; type { Configuration options } TSortConfigurationOptions = (scoClassicLegacy, scoAlphabeticalButLanguage); { Log options } TLogOptions = set of (log_cp_mv_ln, log_delete, log_dir_op, log_arc_op, log_vfs_op, log_success, log_errors, log_info, log_start_shutdown, log_commandlineexecution); { Watch dirs options } TWatchOptions = set of (watch_file_name_change, watch_attributes_change, watch_only_foreground, watch_exclude_dirs); { Tabs options } TTabsOptions = set of (tb_always_visible, tb_multiple_lines, tb_same_width, tb_text_length_limit, tb_confirm_close_all, tb_close_on_dbl_click, tb_open_new_in_foreground, tb_open_new_near_current, tb_show_asterisk_for_locked, tb_activate_panel_on_click, tb_show_close_button, tb_close_duplicate_when_closing, tb_close_on_doubleclick, tb_show_drive_letter, tb_reusing_tab_when_possible, tb_confirm_close_locked_tab, tb_keep_renamed_when_back_normal); TTabsOptionsDoubleClick = (tadc_Nothing, tadc_CloseTab, tadc_FavoriteTabs, tadc_TabsPopup); TTabsPosition = (tbpos_top, tbpos_bottom); { Show icons mode } TShowIconsMode = (sim_none, sim_standart, sim_all, sim_all_and_exe); TScrollMode = (smLineByLineCursor, smLineByLine, smPageByPage); { Sorting directories mode } TSortFolderMode = (sfmSortNameShowFirst, sfmSortLikeFileShowFirst, sfmSortLikeFile); { Where to insert new files in the filelist } TNewFilesPosition = (nfpTop, nfpTopAfterDirectories, nfpSortedPosition, nfpBottom); { Where to move updated files in the filelist } TUpdatedFilesPosition = (ufpSameAsNewFiles, ufpSortedPosition, ufpNoChange); { How initially progress is shown for file operations } TFileOperationsProgressKind = (fopkSeparateWindow, fopkSeparateWindowMinimized, fopkOperationsPanel); { Operations with confirmation } TFileOperationsConfirmation = (focCopy, focMove, focDelete, focDeleteToTrash); TFileOperationsConfirmations = set of TFileOperationsConfirmation; { Internal Associations} //What the use wish for the context menu // uwcmComplete : DEFAULT, or user specifically wish the "Windows' one + the actions". // uwcmJustDCAction : User specifically wish only the actions, even if default set is not it. TUserWishForContextMenu = (uwcmComplete, uwcmJustDCAction); TExternalTool = (etViewer, etEditor, etDiffer); TExternalToolOptions = record Enabled: Boolean; Path: String; Parameters: String; RunInTerminal: Boolean; KeepTerminalOpen: Boolean; end; TExternalToolsOptions = array[TExternalTool] of TExternalToolOptions; TResultingFramePositionAfterCompare = (rfpacActiveOnLeft, rfpacLeftOnLeft); TDCFont = (dcfMain, dcfViewer, dcfEditor, dcfLog, dcfViewerBook, dcfConsole, dcfFileSearchResults, dcFileViewHeader); TDCFontOptions = record Name: String; Size: Integer; Style: TFontStyles; Quality: TFontQuality; end; TDCFontsOptions = array[TDCFont] of TDCFontOptions; // fswmPreventDelete - prevents deleting watched directories // fswmAllowDelete - does not prevent deleting watched directories // fswmWholeDrive - watch whole drives instead of single directories to omit problems with deleting watched directories TWatcherMode = (fswmPreventDelete, fswmAllowDelete, fswmWholeDrive); TDrivesListButtonOption = (dlbShowLabel, dlbShowFileSystem, dlbShowFreeSpace); TDrivesListButtonOptions = set of TDrivesListButtonOption; TKeyTypingModifier = (ktmNone, ktmAlt, ktmCtrlAlt); TKeyTypingAction = (ktaNone, ktaCommandLine, ktaQuickSearch, ktaQuickFilter); tDesiredDropTextFormat=record Name:string; DesireLevel:longint; end; tDuplicatedRename = (drLegacyWithCopy, drLikeWindows7, drLikeTC); TBriefViewMode = (bvmFixedWidth, bvmFixedCount, bvmAutoSize); const { Default hotkey list version number } hkVersion = 23; // Previously existing names if reused must check for ConfigVersion >= X. // History: // 2 - removed Layout/SmallIcons // renamed Layout/SmallIconSize to Layout/IconSize // 3 - Layout/DriveMenuButton -> Layout/DrivesListButton and added subnodes: // ShowLabel, ShowFileSystem, ShowFreeSpace // 4 - changed QuickSearch/Enabled, QuickSearch/Mode and same for QuickFilter // to Keyboard/Typing. // 5 - changed Behaviours/SortCaseSensitive to FilesViews/Sorting/CaseSensitivity // changed Behaviours/SortNatural to FilesViews/Sorting/NaturalSorting // 6 - changed Behaviours/ShortFileSizeFormat to Behaviours/FileSizeFormat // 7 - changed Viewer/SaveThumbnails to Thumbnails/Save // 8 - changed Behaviours/BriefViewFileExtAligned to FilesViews/BriefView/FileExtAligned // 9 - few new options regarding tabs ConfigVersion = 9; TKeyTypingModifierToShift: array[TKeyTypingModifier] of TShiftState = ([], [ssAlt], [ssCtrl, ssAlt]); { Related with the drop of text over panels} NbOfDropTextFormat = 4; DropTextRichText_Index=0; DropTextHtml_Index=1; DropTextUnicode_Index=2; DropTextSimpleText_Index=3; { Global font sizes limitations } MAX_FONT_SIZE_MAIN=50; MIN_FONT_SIZE_MAIN=6; MAX_FONT_SIZE_EDITOR=70; MIN_FONT_SIZE_EDITOR=6; MAX_FONT_SIZE_VIEWER=70; MIN_FONT_SIZE_VIEWER=6; MAX_FONT_SIZE_FILE_SEARCH_RESULTS=70; MIN_FONT_SIZE_FILE_SEARCH_RESULTS=6; MAX_FONT_SIZE_FILEVIEWHEADER=20; MIN_FONT_SIZE_FILEVIEWHEADER=8; var { For localization } gPOFileName, gHelpLang: String; { DSX plugins } gDSXPlugins: TDSXModuleList; { WCX plugins } gWCXPlugins: TWCXModuleList; { WDX plugins } gWDXPlugins:TWDXModuleList; { WFX plugins } gWFXPlugins: TWFXModuleList; { WLX plugins } gWLXPlugins: TWLXModuleList; { MultiArc addons } gMultiArcList: TMultiArcList; { Columns Set } ColSet:TPanelColumnsList; { Layout page } gMainMenu, gButtonBar, gToolBarFlat, gDriveBar1, gDriveBar2, gDriveBarFlat, gDrivesListButton, gDirectoryTabs, gCurDir, gTabHeader, gStatusBar, gCmdLine, gLogWindow, gTermWindow, gKeyButtons, gInterfaceFlat, gDriveInd, gDriveFreeSpace, gProgInMenuBar, gPanelOfOp, gHorizontalFilePanels, gShortFormatDriveInfo: Boolean; gDrivesListButtonOptions: TDrivesListButtonOptions; gSeparateTree: Boolean; { Toolbar } gToolBarButtonSize, gToolBarIconSize: Integer; gToolbarReportErrorWithCommands: boolean; gRepeatPassword:Boolean; // repeat password when packing files gDirHistoryCount:Integer; // how many history we remember gShowSystemFiles:Boolean; gRunInTermStayOpenCmd: String; gRunInTermStayOpenParams: String; gRunInTermCloseCmd: String; gRunInTermCloseParams: String; gRunTermCmd: String; gRunTermParams: String; gSortCaseSensitivity: TCaseSensitivity; gSortNatural: Boolean; gSortFolderMode: TSortFolderMode; gNewFilesPosition: TNewFilesPosition; gUpdatedFilesPosition: TUpdatedFilesPosition; gLynxLike:Boolean; gFirstTextSearch: Boolean; gMouseSelectionEnabled: Boolean; gMouseSelectionButton: Integer; gAutoFillColumns: Boolean; gAutoSizeColumn: Integer; gColumnsAutoSaveWidth: Boolean; gColumnsTitleStyle: TTitleStyle; gCustomColumnsChangeAllColumns: Boolean; gSupportForVariableHelperMenu:TSupportForVariableHelperMenu=nil; gSpecialDirList:TSpecialDirList=nil; gDirectoryHotlist:TDirectoryHotlist; gHotDirAddTargetOrNot: Boolean; gHotDirFullExpandOrNot: Boolean; gShowPathInPopup: boolean; gShowOnlyValidEnv: boolean = TRUE; gWhereToAddNewHotDir: TPositionWhereToAddHotDir; glsDirHistory:TStringListEx; glsCmdLineHistory: TStringListEx; glsMaskHistory : TStringListEx; glsSearchHistory : TStringListEx; glsSearchPathHistory : TStringListEx; glsReplaceHistory : TStringListEx; glsReplacePathHistory : TStringListEx; glsSearchExcludeFiles: TStringList; glsSearchExcludeDirectories: TStringList; glsIgnoreList : TStringListEx; gOnlyOneAppInstance, gCutTextToColWidth : Boolean; gSpaceMovesDown: Boolean; gScrollMode: TScrollMode; gWheelScrollLines: Integer; gAlwaysShowTrayIcon: Boolean; gMinimizeToTray: Boolean; gFileSizeFormat: TFileSizeFormat; gDateTimeFormat : String; gDriveBlackList: String; gDriveBlackListUnmounted: Boolean; // Automatically black list unmounted devices gListFilesInThread: Boolean; gLoadIconsSeparately: Boolean; gDelayLoadingTabs: Boolean; gHighlightUpdatedFiles: Boolean; gLastUsedPacker: String; gLastDoAnyCommand: String; { Favorite Tabs } gFavoriteTabsUseRestoreExtraOptions: boolean; gFavoriteTabsList: TFavoriteTabsList; gWhereToAddNewFavoriteTabs: TPositionWhereToAddFavoriteTabs; gFavoriteTabsFullExpandOrNot: boolean; gFavoriteTabsGoToConfigAfterSave: boolean; gFavoriteTabsGoToConfigAfterReSave: boolean; gDefaultTargetPanelLeftSaved: TTabsConfigLocation; gDefaultTargetPanelRightSaved: TTabsConfigLocation; gDefaultExistingTabsToKeep: TTabsConfigLocation; gFavoriteTabsSaveDirHistory: boolean; { Brief view page } gBriefViewFixedWidth: Integer; gBriefViewFixedCount: Integer; gBriefViewMode: TBriefViewMode; gBriefViewFileExtAligned: Boolean; { Tools page } gExternalTools: TExternalToolsOptions; gResultingFramePositionAfterCompare:TResultingFramePositionAfterCompare; gLuaLib:String; gExts:TExts; gColorExt:TColorExt; gFileInfoToolTip: TFileInfoToolTip; { Fonts page } gFonts: TDCFontsOptions; { File panels color page } gUseCursorBorder: Boolean; gCursorBorderColor: TColor; gUseFrameCursor: Boolean; gForeColor, //text color gBackColor, //Background color gBackColor2, //Background color 2 gMarkColor, // Mark color gCursorColor, //Cursor color gCursorText, //text color under cursor gInactiveCursorColor, //Inactive cursor color gInactiveMarkColor: TColor; //Inactive Mark color gUseInvertedSelection: Boolean; gUseInactiveSelColor: Boolean; gAllowOverColor: Boolean; gInactivePanelBrightness: Integer; // 0 .. 100 (black .. full color) gIndUseGradient : Boolean; // use gradient on drive label gIndForeColor, // foreColor of use space on drive label gIndBackColor: TColor; // backColor of free space on drive label gShowIcons: TShowIconsMode; gShowIconsNew: TShowIconsMode; gIconOverlays : Boolean; gIconsSize, gIconsSizeNew : Integer; gFiOwnDCIcon : PtrInt; gIconsExclude: Boolean; gIconsExcludeDirs: String; gCustomDriveIcons : Boolean; // for use custom drive icons under windows gIconsInMenus: Boolean; gIconsInMenusSize, gIconsInMenusSizeNew: Integer; { Keys page } gKeyTyping: array[TKeyTypingModifier] of TKeyTypingAction; { File operations page } gCopyBlockSize : Integer; gHashBlockSize : Integer; gUseMmapInSearch : Boolean; gPartialNameSearch: Boolean; gSkipFileOpError: Boolean; gTypeOfDuplicatedRename: tDuplicatedRename; gDropReadOnlyFlag : Boolean; gWipePassNumber: Integer; gProcessComments: Boolean; gShowCopyTabSelectPanel:boolean; gUseTrash : Boolean; // if using delete to trash by default gRenameSelOnlyName:boolean; gShowDialogOnDragDrop: Boolean; gDragAndDropDesiredTextFormat:array[0..pred(NbOfDropTextFormat)] of tDesiredDropTextFormat; gDragAndDropAskFormatEachTime: Boolean; gDragAndDropTextAutoFilename: Boolean; gDragAndDropSaveUnicodeTextInUFT8: Boolean; gOverwriteFolder: Boolean; gNtfsHourTimeDelay: Boolean; gFileOperationsProgressKind: TFileOperationsProgressKind; gFileOperationsConfirmations: TFileOperationsConfirmations; { Folder tabs page } gDirTabOptions : TTabsOptions; gDirTabActionOnDoubleClick : TTabsOptionsDoubleClick; gDirTabLimit : Integer; gDirTabPosition : TTabsPosition; { Log page } gLogFile : Boolean; gLogFileWithDateInName : Boolean; gLogFileName : String; gLogOptions : TLogOptions; { Configuration page } gUseConfigInProgramDir, gUseConfigInProgramDirNew, gSaveConfiguration, gSaveSearchReplaceHistory, gSaveDirHistory, gSaveCmdLineHistory, gSaveFileMaskHistory : Boolean; gSortOrderOfConfigurationOptionsTree:TSortConfigurationOptions; { Quick Search page } gQuickSearchOptions: TQuickSearchOptions; gQuickFilterAutoHide: Boolean; gQuickFilterSaveSessionModifications: Boolean; { Misc page } gGridVertLine, gGridHorzLine, gShowWarningMessages, gDirBrackets, gInplaceRename, gGoToRoot: Boolean; gShowToolTipMode: Boolean; gThumbSize: TSize; gThumbSave: Boolean; gSearchDefaultTemplate: String; gSearchTemplateList: TSearchTemplateList; { Auto refresh page } gWatchDirs: TWatchOptions; gWatchDirsExclude: String; gWatcherMode: TWatcherMode; { Ignore list page } gIgnoreListFileEnabled: Boolean; gIgnoreListFile: String; {HotKey Manager} HotMan:THotKeyManager; gNameSCFile: string; {Copy/Move operation options} gOperationOptionSymLinks: TFileSourceOperationOptionSymLink; gOperationOptionCorrectLinks: Boolean; gOperationOptionFileExists: TFileSourceOperationOptionFileExists; gOperationOptionDirectoryExists: TFileSourceOperationOptionDirectoryExists; gOperationOptionSetPropertyError: TFileSourceOperationOptionSetPropertyError; gOperationOptionReserveSpace: Boolean; gOperationOptionCheckFreeSpace: Boolean; gOperationOptionCopyAttributes: Boolean; gOperationOptionCopyTime: Boolean; gOperationOptionCopyOwnership: Boolean; gOperationOptionCopyPermissions: Boolean; {Error file} gErrorFile: String; {Viewer} gPreviewVisible, gImageStretch: Boolean; gImageStretchOnlyLarge: Boolean; gImageCenter: Boolean; gCopyMovePath1, gCopyMovePath2, gCopyMovePath3, gCopyMovePath4, gCopyMovePath5, gImagePaintMode: String; gImagePaintWidth, gColCount, gViewerMode: Integer; gImagePaintColor, gBookBackgroundColor, gBookFontColor: TColor; gTextPosition:PtrInt; { Editor } gEditorSynEditOptions: TSynEditorOptions; {SyncDirs} gSyncDirsSubdirs, gSyncDirsByContent, gSyncDirsIgnoreDate, gSyncDirsShowFilterCopyRight, gSyncDirsShowFilterEqual, gSyncDirsShowFilterNotEqual, gSyncDirsShowFilterCopyLeft, gSyncDirsShowFilterDuplicates, gSyncDirsShowFilterSingles: Boolean; gSyncDirsFileMask: string; { Internal Associations} gUseShellForFileOperations: Boolean; gFileAssociationLastCustomAction: string; gOfferToAddToFileAssociations: boolean; gExtendedContextMenu: boolean; gOpenExecuteViaShell: boolean; gExecuteViaTerminalClose: boolean; gExecuteViaTerminalStayOpen: boolean; gIncludeFileAssociation: boolean; crArrowCopy: Integer = 1; crArrowMove: Integer = 2; crArrowLink: Integer = 3; { TotalCommander Import/Export } {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename:string; gTotalCommanderConfigFilename:string; gTotalCommanderToolbarPath:string; {$ENDIF} function LoadConfig: Boolean; function InitGlobs: Boolean; function LoadGlobs: Boolean; procedure SaveGlobs; procedure LoadIniConfig; procedure LoadXmlConfig; procedure SaveXmlConfig; procedure ConvertIniToXml; procedure LoadDefaultHotkeyBindings; function InitPropStorage(Owner: TComponent): TIniPropStorageEx; procedure FontToFontOptions(Font: TFont; out Options: TDCFontOptions); procedure FontOptionsToFont(Options: TDCFontOptions; Font: TFont); function GetKeyTypingAction(ShiftStateEx: TShiftState): TKeyTypingAction; function IsFileSystemWatcher: Boolean; function GetValidDateTimeFormat(const aFormat, ADefaultFormat: string): string; procedure RegisterInitialization(InitProc: TProcedure); const cMaxStringItems=50; var gIni: TIniFileEx = nil; gConfig: TXmlConfig = nil; implementation uses LCLProc, Dialogs, XMLRead, uGlobsPaths, uLng, uShowMsg, uFileProcs, uOSUtils, uDCUtils, fMultiRename, uFile, uDCVersion, uDebug, uFileFunctions, uDefaultPlugins, Lua, uKeyboard, DCOSUtils, DCStrUtils {$IF DEFINED(MSWINDOWS)} , ShlObj, win32proc {$ENDIF} ; const TKeyTypingModifierToNodeName: array[TKeyTypingModifier] of String = ('NoModifier', 'Alt', 'CtrlAlt'); type TLoadConfigProc = function(var ErrorMessage: String): Boolean; var DefaultDateTimeFormat: String; // Double Commander version // loaded from configuration file gPreviousVersion: String = ''; FInitList: array of TProcedure; function LoadConfigCheckErrors(LoadConfigProc: TLoadConfigProc; ConfigFileName: String; var ErrorMessage: String): Boolean; procedure AddMsg(Msg, eMsg: String); begin AddStrWithSep(ErrorMessage, Msg + ':', LineEnding + LineEnding); AddStrWithSep(ErrorMessage, ConfigFileName, LineEnding); if eMsg <> EmptyStr then AddStrWithSep(ErrorMessage, eMsg, LineEnding); end; begin Result := False; try Result := LoadConfigProc(ErrorMessage); except // If the file does not exist or is empty, // simply default configuration is applied. on EXmlConfigNotFound do Result := True; on EXmlConfigEmpty do Result := True; on e: EFOpenError do AddMsg(rsMsgErrEOpen, e.Message); on e: EStreamError do AddMsg(rsMsgErrERead, e.Message); on e: EXMLReadError do AddMsg(rsMsgInvalidFormatOfConfigurationFile, e.Message); end; end; type TSaveCfgProc = procedure; procedure SaveWithCheck(SaveProc: TSaveCfgProc; CfgDescription: String; var ErrMsg: String); begin try SaveProc; except on E: EStreamError do ErrMsg := ErrMsg + 'Cannot save ' + CfgDescription + ': ' + e.Message; end; end; procedure SaveCfgIgnoreList; var FileName: String; begin if gIgnoreListFileEnabled then begin FileName:= ReplaceEnvVars(gIgnoreListFile); mbForceDirectory(ExtractFileDir(FileName)); glsIgnoreList.SaveToFile(FileName); end; end; procedure SaveCfgMainConfig; begin SaveXmlConfig; // Force saving config to file. gConfig.Save; end; function AskUserOnError(var ErrorMessage: String): Boolean; begin // Show error messages. if ErrorMessage <> EmptyStr then begin Result := QuestionDlg(Application.Title + ' - ' + rsMsgErrorLoadingConfiguration, ErrorMessage, mtWarning, [1, rsDlgButtonContinue, 'isdefault', 2, rsDlgButtonExitProgram], 0) = 1; // Reset error message. ErrorMessage := ''; end else Result := True; end; function LoadGlobalConfig(var {%H-}ErrorMessage: String): Boolean; begin Result := gConfig.Load; end; function LoadExtsConfig(var {%H-}ErrorMessage: String): Boolean; begin gExts.Load; Result := True; end; function LoadHotManConfig(var {%H-}ErrorMessage: String): Boolean; begin HotMan.Load(gpCfgDir + gNameSCFile); Result := True; end; function LoadMultiArcConfig(var {%H-}ErrorMessage: String): Boolean; begin gMultiArcList.LoadFromFile(gpCfgDir + 'multiarc.ini'); Result := True; end; function LoadHistoryConfig(var {%H-}ErrorMessage: String): Boolean; var Root: TXmlNode; History: TXmlConfig; procedure LoadHistory(const NodeName: String; HistoryList: TStrings); var Node: TXmlNode; begin Node := History.FindNode(Root, NodeName); if Assigned(Node) then begin HistoryList.Clear; Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Item') = 0 then begin HistoryList.Add(History.GetContent(Node)); if HistoryList.Count >= cMaxStringItems then Break; end; Node := Node.NextSibling; end; end; end; begin Result:= False; History:= TXmlConfig.Create(gpCfgDir + 'history.xml', True); try Root:= History.FindNode(History.RootNode, 'History'); if Assigned(Root) then begin LoadHistory('Navigation', glsDirHistory); LoadHistory('CommandLine', glsCmdLineHistory); LoadHistory('FileMask', glsMaskHistory); LoadHistory('SearchText', glsSearchHistory); LoadHistory('SearchTextPath', glsSearchPathHistory); LoadHistory('ReplaceText', glsReplaceHistory); LoadHistory('ReplaceTextPath', glsReplacePathHistory); LoadHistory('SearchExcludeFiles', glsSearchExcludeFiles); LoadHistory('SearchExcludeDirectories', glsSearchExcludeDirectories); end; Result:= True; finally History.Free; end; end; procedure SaveHistoryConfig; var Root: TXmlNode; History: TXmlConfig; procedure SaveHistory(const NodeName: String; HistoryList: TStrings); var I: Integer; Node, SubNode: TXmlNode; begin Node := History.FindNode(Root, NodeName, True); History.ClearNode(Node); for I:= 0 to HistoryList.Count - 1 do begin SubNode := History.AddNode(Node, 'Item'); History.SetContent(SubNode, HistoryList[I]); if I >= cMaxStringItems then Break; end; end; begin History:= TXmlConfig.Create(gpCfgDir + 'history.xml'); try Root:= History.FindNode(History.RootNode, 'History', True); if gSaveDirHistory then SaveHistory('Navigation', glsDirHistory); if gSaveCmdLineHistory then SaveHistory('CommandLine', glsCmdLineHistory); if gSaveFileMaskHistory then SaveHistory('FileMask', glsMaskHistory); if gSaveSearchReplaceHistory then begin SaveHistory('SearchText', glsSearchHistory); SaveHistory('SearchTextPath', glsSearchPathHistory); SaveHistory('ReplaceText', glsReplaceHistory); SaveHistory('ReplaceTextPath', glsReplacePathHistory); SaveHistory('SearchExcludeFiles', glsSearchExcludeFiles); SaveHistory('SearchExcludeDirectories', glsSearchExcludeDirectories); end; History.Save; finally History.Free; end; end; function GetValidDateTimeFormat(const aFormat, ADefaultFormat: string): string; begin try SysUtils.FormatDateTime(aFormat, Now); Result := aFormat; except on EConvertError do Result := ADefaultFormat; end; end; procedure RegisterInitialization(InitProc: TProcedure); begin SetLength(FInitList, Length(FInitList) + 1); FInitList[High(FInitList)]:= InitProc; end; procedure LoadDefaultHotkeyBindings; var HMForm: THMForm; HMControl: THMControl; begin // Note: Increase hkVersion if you change default hotkeys list // Shortcuts that can conflict with default OS shortcuts for some controls // should be put only to Files Panel. // For a list of such possible shortcuts see THotKeyManager.IsShortcutConflictingWithOS. // If adding multiple shortcuts for the same command use: // AddIfNotExists([Shortcut1, Param1, Shortcut2, Param2, ...], Command); // // Shortcuts Ctrl+Alt+<letter> should not be added as the combinations may be // used to enter international characters on Windows (where Ctrl+Alt = AltGr). HMForm := HotMan.Forms.FindOrCreate('Main'); with HMForm.Hotkeys do begin AddIfNotExists(['F1'],[],'cm_About'); AddIfNotExists(['F2','','', 'Shift+F6','',''],'cm_RenameOnly'); AddIfNotExists(['F3'],[],'cm_View'); AddIfNotExists(['F4'],[],'cm_Edit'); AddIfNotExists(['F5'],[],'cm_Copy'); AddIfNotExists(['F6'],[],'cm_Rename'); AddIfNotExists(['F7'],[],'cm_MakeDir'); AddIfNotExists(['F8','','', 'Shift+F8','','trashcan=reversesetting',''], 'cm_Delete'); AddIfNotExists(['F9'],[],'cm_RunTerm'); AddIfNotExists(['Ctrl+7'],[],'cm_ShowCmdLineHistory'); AddIfNotExists(['Ctrl+Down'],'cm_ShowCmdLineHistory',['Ctrl+7'],[]); //Historic backward support reason... AddIfNotExists(['Ctrl+B'],[],'cm_FlatView'); AddIfNotExists(['Ctrl+D'],[],'cm_DirHotList'); AddIfNotExists(['Ctrl+F'],[],'cm_QuickFilter'); AddIfNotExists(['Ctrl+H'],[],'cm_DirHistory'); AddIfNotExists(['Alt+Down'],'cm_DirHistory',['Ctrl+H'],[]); //Historic backward support reason... AddIfNotExists(['Ctrl+L'],[],'cm_CalculateSpace'); AddIfNotExists(['Ctrl+M'],[],'cm_MultiRename'); AddIfNotExists(['Ctrl+O'],[],'cm_ToggleFullscreenConsole'); AddIfNotExists(['Ctrl+P'],[],'cm_AddPathToCmdLine'); AddIfNotExists(['Ctrl+Q'],[],'cm_QuickView'); AddIfNotExists(['Ctrl+S'],[],'cm_QuickSearch'); AddIfNotExists(['Ctrl+R'],[],'cm_Refresh'); AddIfNotExists(['Ctrl+T'],[],'cm_NewTab'); AddIfNotExists(['Ctrl+U'],[],'cm_Exchange'); AddIfNotExists(['Ctrl+W'],[],'cm_CloseTab'); AddIfNotExists(['Ctrl+Z'],[],'cm_EditComment'); AddIfNotExists(['Ctrl+F1'],[],'cm_BriefView'); AddIfNotExists(['Ctrl+F2'],[],'cm_ColumnsView'); AddIfNotExists(['Ctrl+F3'],[],'cm_SortByName'); AddIfNotExists(['Ctrl+F4'],[],'cm_SortByExt'); AddIfNotExists(['Ctrl+F5'],[],'cm_SortByDate'); AddIfNotExists(['Ctrl+F6'],[],'cm_SortBySize'); AddIfNotExists(['Ctrl+Enter'],[],'cm_AddFilenameToCmdLine'); AddIfNotExists(['Ctrl+PgDn'],[],'cm_OpenArchive'); AddIfNotExists(['Ctrl+PgUp'],[],'cm_ChangeDirToParent'); AddIfNotExists(['Ctrl+Alt+Enter'],[],'cm_ShellExecute'); AddIfNotExists(['Ctrl+Shift+C'],[],'cm_CopyFullNamesToClip'); AddIfNotExists(['Ctrl+Shift+D'],[],'cm_ConfigDirHotList'); AddIfNotExists(['Ctrl+Shift+H'],[],'cm_HorizontalFilePanels'); AddIfNotExists(['Ctrl+Shift+X'],[],'cm_CopyNamesToClip'); AddIfNotExists(['Ctrl+Shift+F1'],[],'cm_ThumbnailsView'); AddIfNotExists(['Ctrl+Shift+Enter'],[],'cm_AddPathAndFilenameToCmdLine'); AddIfNotExists(['Ctrl+Shift+Tab'],[],'cm_PrevTab'); AddIfNotExists(['Ctrl+Shift+F8'],[],'cm_TreeView'); AddIfNotExists(['Ctrl+Tab'],[],'cm_NextTab'); AddIfNotExists(['Ctrl+Up'],[],'cm_OpenDirInNewTab'); AddIfNotExists(['Ctrl+\'],[],'cm_ChangeDirToRoot'); AddIfNotExists(['Ctrl+.'],[],'cm_ShowSysFiles'); AddIfNotExists(['Shift+F2'],[],'cm_FocusCmdLine'); AddIfNotExists(['Shift+F4'],[],'cm_EditNew'); AddIfNotExists(['Shift+F5'],[],'cm_CopySamePanel'); AddIfNotExists(['Shift+F10'],[],'cm_ContextMenu'); AddIfNotExists(['Shift+F12'],[],'cm_DoAnyCmCommand'); AddIfNotExists(['Alt+V'],[],'cm_OperationsViewer'); AddIfNotExists(['Alt+X'],[],'cm_Exit'); AddIfNotExists(['Alt+Z'],[],'cm_TargetEqualSource'); AddIfNotExists(['Alt+F1'],[],'cm_LeftOpenDrives'); AddIfNotExists(['Alt+F2'],[],'cm_RightOpenDrives'); AddIfNotExists(['Alt+F5'],[],'cm_PackFiles'); AddIfNotExists(['Alt+F7'],[],'cm_Search'); AddIfNotExists(['Alt+F9'],[],'cm_ExtractFiles'); AddIfNotExists(['Alt+Del'],[],'cm_Wipe'); AddIfNotExists(['Alt+Enter'],[],'cm_FileProperties'); AddIfNotExists(['Alt+Left'],[],'cm_ViewHistoryPrev'); AddIfNotExists(['Alt+Right'],[],'cm_ViewHistoryNext'); AddIfNotExists(['Alt+Shift+Enter'],[],'cm_CountDirContent'); AddIfNotExists(['Alt+Shift+F9'],[],'cm_TestArchive'); end; HMControl := HMForm.Controls.FindOrCreate('Files Panel'); with HMControl.Hotkeys do begin AddIfNotExists(['Del','','', 'Shift+Del','','trashcan=reversesetting',''], 'cm_Delete'); AddIfNotExists(['Ctrl+A','','', 'Ctrl+Num+','',''],'cm_MarkMarkAll', ['Ctrl+A'], []); AddIfNotExists(['Num+'],[],'cm_MarkPlus'); AddIfNotExists(['Shift+Num+'],[],'cm_MarkCurrentExtension'); AddIfNotExists(['Ctrl+Num-'],[],'cm_MarkUnmarkAll'); AddIfNotExists(['Num-'],[],'cm_MarkMinus'); AddIfNotExists(['Shift+Num-'],[],'cm_UnmarkCurrentExtension'); AddIfNotExists(['Num*'],[],'cm_MarkInvert'); AddIfNotExists(['Ctrl+C'],[],'cm_CopyToClipboard'); AddIfNotExists(['Ctrl+V'],[],'cm_PasteFromClipboard'); AddIfNotExists(['Ctrl+X'],[],'cm_CutToClipboard'); AddIfNotExists(['Ctrl+Home'],[],'cm_ChangeDirToHome'); AddIfNotExists(['Ctrl+Left'],[],'cm_TransferLeft'); AddIfNotExists(['Ctrl+Right'],[],'cm_TransferRight'); AddIfNotExists(['Shift+Tab'],[],'cm_NextGroup'); end; HMForm := HotMan.Forms.FindOrCreate('Viewer'); with HMForm.Hotkeys do begin AddIfNotExists(['F1'],[],'cm_About'); AddIfNotExists(['F2'],[],'cm_Reload'); AddIfNotExists(['N'],[],'cm_LoadNextFile'); AddIfNotExists(['P'],[],'cm_LoadPrevFile'); end; HMForm := HotMan.Forms.FindOrCreate('Differ'); with HMForm.Hotkeys do begin AddIfNotExists(['Ctrl+R'],[],'cm_Reload'); AddIfNotExists(['Alt+Down'],[],'cm_NextDifference'); AddIfNotExists(['Alt+Up'],[],'cm_PrevDifference'); AddIfNotExists(['Alt+Home'],[],'cm_FirstDifference'); AddIfNotExists(['Alt+End'],[],'cm_LastDifference'); AddIfNotExists(['Alt+X'],[],'cm_Exit'); AddIfNotExists(['Alt+Left'],[],'cm_CopyRightToLeft'); AddIfNotExists(['Alt+Right'],[],'cm_CopyLeftToRight'); end; HMForm := HotMan.Forms.FindOrCreate('Copy/Move Dialog'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'],[],'cm_AddToQueue'); end; HMForm := HotMan.Forms.FindOrCreate('Edit Comment Dialog'); with HMForm.Hotkeys do begin AddIfNotExists(['F2'],[],'cm_SaveDescription'); end; if not mbFileExists(gpCfgDir + gNameSCFile) then gNameSCFile := 'shortcuts.scf'; HotMan.Save(gpCfgDir + gNameSCFile); end; function InitPropStorage(Owner: TComponent): TIniPropStorageEx; var sWidth, sHeight: String; begin Result:= TIniPropStorageEx.Create(Owner); Result.IniFileName:= gpCfgDir + 'session.ini'; if Owner is TCustomForm then with Owner as TCustomForm do begin if (Monitor = nil) then Result.IniSection:= ClassName else begin sWidth:= IntToStr(Monitor.Width); sHeight:= IntToStr(Monitor.Height); Result.IniSection:= ClassName + '(' + sWidth + 'x' + sHeight + ')'; end; end; end; procedure FontToFontOptions(Font: TFont; out Options: TDCFontOptions); begin with Options do begin Name := Font.Name; Size := Font.Size; Style := Font.Style; Quality := Font.Quality; end; end; procedure FontOptionsToFont(Options: TDCFontOptions; Font: TFont); begin with Options do begin Font.Name := Name; Font.Size := Size; Font.Style := Style; Font.Quality := Quality; end; end; procedure OldKeysToNew(ActionEnabled: Boolean; ShiftState: TShiftState; Action: TKeyTypingAction); var Modifier: TKeyTypingModifier; begin if ActionEnabled then begin for Modifier in TKeyTypingModifier do begin if TKeyTypingModifierToShift[Modifier] = ShiftState then gKeyTyping[Modifier] := Action else if gKeyTyping[Modifier] = Action then gKeyTyping[Modifier] := ktaNone; end; end else begin for Modifier in TKeyTypingModifier do begin if gKeyTyping[Modifier] = Action then begin gKeyTyping[Modifier] := ktaNone; Break; end; end; end; end; function LoadStringsFromFile(var list: TStringListEx; const sFileName:String; MaxStrings: Integer = 0): Boolean; var i:Integer; begin Assert(list <> nil,'LoadStringsFromFile: list=nil'); list.Clear; Result:=False; if mbFileExists(sFileName) then begin list.LoadFromFile(sFileName); if MaxStrings > 0 then begin for i:=list.Count-1 downto 0 do if i>MaxStrings then list.Delete(i) else Break; end; Result:=True; end; end; procedure ConvertIniToXml; var MultiRename: TfrmMultiRename = nil; tmpFiles: TFiles = nil; begin SaveXmlConfig; // Force loading Multi-rename config if it wasn't used yet. tmpFiles := TFiles.Create(mbGetCurrentDir); MultiRename := TfrmMultiRename.Create(nil, nil, tmpFiles); try MultiRename.LoadPresetsIni(gIni); MultiRename.PublicSavePresets; finally FreeThenNil(MultiRename); FreeThenNil(tmpFiles); end; FreeAndNil(gIni); if mbFileExists(gpGlobalCfgDir + 'doublecmd.ini') then mbRenameFile(gpGlobalCfgDir + 'doublecmd.ini', gpGlobalCfgDir + 'doublecmd.ini.obsolete'); if mbFileExists(gpCfgDir + 'doublecmd.ini') then mbRenameFile(gpCfgDir + 'doublecmd.ini', gpCfgDir + 'doublecmd.ini.obsolete'); end; procedure CopySettingsFiles; begin { Create default configuration files if need } if gpCfgDir <> gpGlobalCfgDir then begin // extension file if not mbFileExists(gpCfgDir + gcfExtensionAssociation) then CopyFile(gpGlobalCfgDir + 'extassoc.xml', gpCfgDir + 'ExtAssoc.xml'); // pixmaps file if not mbFileExists(gpCfgDir + 'pixmaps.txt') then CopyFile(gpGlobalCfgDir + 'pixmaps.txt', gpCfgDir + 'pixmaps.txt'); // multiarc configuration file if not mbFileExists(gpCfgDir + 'multiarc.ini') then CopyFile(gpGlobalCfgDir + 'multiarc.ini', gpCfgDir + 'multiarc.ini'); end; end; procedure CreateGlobs; begin gExts := TExts.Create; gColorExt := TColorExt.Create; gFileInfoToolTip := TFileInfoToolTip.Create; gDirectoryHotlist := TDirectoryHotlist.Create; gFavoriteTabsList := TFavoriteTabsList.Create; glsDirHistory := TStringListEx.Create; glsCmdLineHistory := TStringListEx.Create; glsMaskHistory := TStringListEx.Create; glsSearchHistory := TStringListEx.Create; glsSearchPathHistory := TStringListEx.Create; glsReplaceHistory := TStringListEx.Create; glsReplacePathHistory := TStringListEx.Create; glsIgnoreList := TStringListEx.Create; glsSearchExcludeFiles:= TStringList.Create; glsSearchExcludeDirectories:= TStringList.Create; gSearchTemplateList := TSearchTemplateList.Create; gDSXPlugins := TDSXModuleList.Create; gWCXPlugins := TWCXModuleList.Create; gWDXPlugins := TWDXModuleList.Create; gWFXPlugins := TWFXModuleList.Create; gWLXPlugins := TWLXModuleList.Create; gMultiArcList := TMultiArcList.Create; ColSet := TPanelColumnsList.Create; HotMan := THotKeyManager.Create; end; procedure DestroyGlobs; begin FreeThenNil(gColorExt); FreeThenNil(gFileInfoToolTip); FreeThenNil(glsDirHistory); FreeThenNil(glsCmdLineHistory); FreeThenNil(gSupportForVariableHelperMenu); FreeThenNil(gSpecialDirList); FreeThenNil(gDirectoryHotlist); FreeThenNil(gFavoriteTabsList); FreeThenNil(glsMaskHistory); FreeThenNil(glsSearchHistory); FreeThenNil(glsSearchPathHistory); FreeThenNil(glsReplaceHistory); FreeThenNil(glsReplacePathHistory); FreeThenNil(glsIgnoreList); FreeThenNil(glsSearchExcludeFiles); FreeThenNil(glsSearchExcludeDirectories); FreeThenNil(gExts); FreeThenNil(gIni); FreeThenNil(gConfig); FreeThenNil(gSearchTemplateList); FreeThenNil(gDSXPlugins); FreeThenNil(gWCXPlugins); FreeThenNil(gWDXPlugins); FreeThenNil(gWFXPlugins); FreeThenNil(gMultiArcList); FreeThenNil(gWLXPlugins); FreeThenNil(ColSet); FreeThenNil(HotMan); end; {$IFDEF MSWINDOWS} function GetPathNameIfItMatch(SpecialConstant:integer; FilenameSearched:string):string; var MaybePath:string; FilePath: array [0..Pred(MAX_PATH)] of WideChar = ''; begin result:=''; FillChar(FilePath, MAX_PATH, 0); SHGetSpecialFolderPathW(0, @FilePath[0], SpecialConstant, FALSE); if FilePath<>'' then begin MaybePath:=IncludeTrailingPathDelimiter(UTF16ToUTF8(WideString(FilePath))); if mbFileExists(MaybePath+FilenameSearched) then result:=MaybePath+FilenameSearched; end; end; {$ENDIF} procedure SetDefaultConfigGlobs; procedure SetDefaultExternalTool(var ExternalToolOptions: TExternalToolOptions); begin with ExternalToolOptions do begin Enabled := False; Path := ''; Parameters := ''; RunInTerminal := False; KeepTerminalOpen := False; end; end; begin { Language page } gPOFileName := ''; { Behaviours page } gRunInTermStayOpenCmd := RunInTermStayOpenCmd; gRunInTermStayOpenParams := RunInTermStayOpenParams; gRunInTermCloseCmd := RunInTermCloseCmd; gRunInTermCloseParams := RunInTermCloseParams; gRunTermCmd := RunTermCmd; gRunTermParams := RunTermParams; gOnlyOneAppInstance := False; gLynxLike := True; gSortCaseSensitivity := cstNotSensitive; gSortNatural := False; gSortFolderMode := sfmSortNameShowFirst; gNewFilesPosition := nfpSortedPosition; gUpdatedFilesPosition := ufpNoChange; gFileSizeFormat := fsfFloat; gMinimizeToTray := False; gAlwaysShowTrayIcon := False; gMouseSelectionEnabled := True; gMouseSelectionButton := 0; // Left gScrollMode := smLineByLine; gWheelScrollLines:= Mouse.WheelScrollLines; gAutoFillColumns := False; gAutoSizeColumn := 1; gColumnsAutoSaveWidth := True; gColumnsTitleStyle := {$IFDEF LCLWIN32}tsNative{$ELSE}tsStandard{$ENDIF}; gCustomColumnsChangeAllColumns := False; gDateTimeFormat := DefaultDateTimeFormat; gCutTextToColWidth := True; gShowSystemFiles := False; // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon gListFilesInThread := {$IFDEF LCLCARBON}False{$ELSE}True{$ENDIF}; gLoadIconsSeparately := True; gDelayLoadingTabs := True; gHighlightUpdatedFiles := True; gDriveBlackList := ''; gDriveBlackListUnmounted := False; { Brief view page } gBriefViewFixedCount := 2; gBriefViewFixedWidth := 100; gBriefViewMode := bvmAutoSize; gBriefViewFileExtAligned := False; { Tools page } SetDefaultExternalTool(gExternalTools[etViewer]); SetDefaultExternalTool(gExternalTools[etEditor]); SetDefaultExternalTool(gExternalTools[etDiffer]); { Differ related} gResultingFramePositionAfterCompare := rfpacActiveOnLeft; { Fonts page } gFonts[dcfMain].Name := 'default'; gFonts[dcfMain].Size := 10; gFonts[dcfMain].Style := [fsBold]; gFonts[dcfMain].Quality := fqDefault; gFonts[dcfEditor].Name := MonoSpaceFont; gFonts[dcfEditor].Size := 14; gFonts[dcfEditor].Style := []; gFonts[dcfEditor].Quality := fqDefault; gFonts[dcfViewer].Name := MonoSpaceFont; gFonts[dcfViewer].Size := 14; gFonts[dcfViewer].Style := []; gFonts[dcfViewer].Quality := fqDefault; gFonts[dcfLog].Name := MonoSpaceFont; gFonts[dcfLog].Size := 12; gFonts[dcfLog].Style := []; gFonts[dcfLog].Quality := fqDefault; gFonts[dcfViewerBook].Name := 'default'; gFonts[dcfViewerBook].Size := 16; gFonts[dcfViewerBook].Style := [fsBold]; gFonts[dcfViewerBook].Quality := fqDefault; gFonts[dcfConsole].Name := MonoSpaceFont; gFonts[dcfConsole].Size := 12; gFonts[dcfConsole].Style := []; gFonts[dcfConsole].Quality := fqDefault; { Colors page } gUseCursorBorder := False; gCursorBorderColor := clHighlight; gUseFrameCursor := False; gForeColor := clWindowText; gBackColor := clWindow; gBackColor2 := clWindow; gMarkColor := clRed; gCursorColor := clHighlight; gCursorText := clHighlightText; gInactiveCursorColor := clInactiveCaption; gInactiveMarkColor := clMaroon; gUseInvertedSelection := False; gUseInactiveSelColor := False; gAllowOverColor := True; gInactivePanelBrightness := 100; // Full brightness gIndUseGradient := True; gIndForeColor := clBlack; gIndBackColor := clWhite; { Layout page } gMainMenu := True; gButtonBar := True; gToolBarFlat := True; gToolBarButtonSize := 24; gToolBarIconSize := 16; gToolbarReportErrorWithCommands := FALSE; gDriveBar1 := True; gDriveBar2 := True; gDriveBarFlat := True; gDrivesListButton := True; gDirectoryTabs := True; gCurDir := True; gTabHeader := True; gStatusBar := True; gCmdLine := True; gLogWindow := False; gTermWindow := False; gKeyButtons := True; gInterfaceFlat := True; gDriveInd := False; gDriveFreeSpace := True; gProgInMenuBar := False; gPanelOfOp := True; gShortFormatDriveInfo := True; gHorizontalFilePanels := False; gDrivesListButtonOptions := [dlbShowLabel, dlbShowFileSystem, dlbShowFreeSpace]; gSeparateTree := False; { Keys page } gKeyTyping[ktmNone] := ktaQuickSearch; gKeyTyping[ktmAlt] := ktaNone; gKeyTyping[ktmCtrlAlt] := ktaQuickFilter; { File operations page } gCopyBlockSize := 524288; gHashBlockSize := 8388608; gUseMmapInSearch := False; gPartialNameSearch := True; gWipePassNumber := 1; gDropReadOnlyFlag := False; gProcessComments := False; gRenameSelOnlyName := False; gShowCopyTabSelectPanel := False; gUseTrash := True; gSkipFileOpError := False; gTypeOfDuplicatedRename := drLegacyWithCopy; gShowDialogOnDragDrop := False; gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name:='Richtext format'; gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel:=0; gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name:='HTML format'; gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel:=1; gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name:='Unicode format'; gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel:=2; gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name:='Simple text format'; gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel:=3; gDragAndDropAskFormatEachTime := False; gDragAndDropTextAutoFilename := False; gDragAndDropSaveUnicodeTextInUFT8 := True; gOverwriteFolder := False; gNtfsHourTimeDelay := False; gFileOperationsProgressKind := fopkSeparateWindow; gFileOperationsConfirmations := [focCopy, focMove, focDelete, focDeleteToTrash]; // Operations options gOperationOptionSymLinks := fsooslNone; gOperationOptionCorrectLinks := False; gOperationOptionFileExists := fsoofeNone; gOperationOptionDirectoryExists := fsoodeNone; gOperationOptionSetPropertyError := fsoospeNone; gOperationOptionReserveSpace := False; gOperationOptionCheckFreeSpace := True; gOperationOptionCopyAttributes := True; gOperationOptionCopyTime := True; gOperationOptionCopyOwnership := False; gOperationOptionCopyPermissions := False; { Tabs page } gDirTabOptions := [tb_always_visible, tb_confirm_close_all, tb_show_asterisk_for_locked, tb_activate_panel_on_click, tb_close_on_doubleclick, tb_reusing_tab_when_possible, tb_confirm_close_locked_tab]; gDirTabActionOnDoubleClick := tadc_FavoriteTabs; gDirTabLimit := 32; gDirTabPosition := tbpos_top; { Favorite Tabs} gFavoriteTabsUseRestoreExtraOptions := False; gWhereToAddNewFavoriteTabs := afte_Last; gFavoriteTabsFullExpandOrNot := True; gFavoriteTabsGoToConfigAfterSave := False; gFavoriteTabsGoToConfigAfterReSave := False; gDefaultTargetPanelLeftSaved := tclLeft; gDefaultTargetPanelRightSaved := tclRight; gDefaultExistingTabsToKeep := tclNone; gFavoriteTabsSaveDirHistory := False; { Log page } gLogFile := False; gLogFileWithDateInName := FALSE; gLogFileName := EnvVarConfigPath + PathDelim + 'doublecmd.log'; gLogOptions := [log_cp_mv_ln, log_delete, log_dir_op, log_arc_op, log_vfs_op, log_success, log_errors, log_info, log_start_shutdown, log_commandlineexecution]; { Configuration page } gSaveConfiguration := True; gSaveSearchReplaceHistory := True; gSaveDirHistory := True; gSaveCmdLineHistory := True; gSaveFileMaskHistory := True; { Quick Search/Filter page } gQuickSearchOptions.Match := [qsmBeginning, qsmEnding]; gQuickSearchOptions.Items := qsiFilesAndDirectories; gQuickSearchOptions.SearchCase := qscInsensitive; gQuickFilterAutoHide := True; gQuickFilterSaveSessionModifications := False; //Legacy... { Miscellaneous page } gGridVertLine := False; gGridHorzLine := False; gShowWarningMessages := True; gSpaceMovesDown := False; gDirBrackets := True; gInplaceRename := False; gHotDirAddTargetOrNot := False; gHotDirFullExpandOrNot:=False; gShowPathInPopup:=FALSE; gShowOnlyValidEnv:=TRUE; gWhereToAddNewHotDir := ahdSmart; gShowToolTipMode := True; gThumbSave := True; gThumbSize.cx := 128; gThumbSize.cy := 128; gSearchDefaultTemplate := EmptyStr; { Auto refresh page } gWatchDirs := [watch_file_name_change, watch_attributes_change]; gWatchDirsExclude := ''; gWatcherMode := fswmAllowDelete; { Icons page } gShowIcons := sim_all_and_exe; gShowIconsNew := gShowIcons; gIconOverlays := False; gIconsSize := 16; gIconsSizeNew := gIconsSize; gIconsExclude := False; gIconsExcludeDirs := EmptyStr; gCustomDriveIcons := False; gIconsInMenus := False; gIconsInMenusSize := 16; gIconsInMenusSizeNew := gIconsInMenusSize; { Ignore list page } gIgnoreListFileEnabled := False; gIgnoreListFile := EnvVarConfigPath + PathDelim + 'ignorelist.txt'; {Viewer} gImageStretch := False; gImageStretchOnlyLarge := False; gImageCenter := True; gPreviewVisible := False; gCopyMovePath1 := ''; gCopyMovePath2 := ''; gCopyMovePath3 := ''; gCopyMovePath4 := ''; gCopyMovePath5 := ''; gImagePaintMode := 'Pen'; gImagePaintWidth := 5; gColCount := 1; gImagePaintColor := clRed; gBookBackgroundColor := clBlack; gBookFontColor := clWhite; gTextPosition:= 0; gViewerMode:= 0; { Editor } gEditorSynEditOptions := SYNEDIT_DEFAULT_OPTIONS; {SyncDirs} gSyncDirsSubdirs := False; gSyncDirsByContent := False; gSyncDirsIgnoreDate := False; gSyncDirsShowFilterCopyRight := True; gSyncDirsShowFilterEqual := True; gSyncDirsShowFilterNotEqual := True; gSyncDirsShowFilterCopyLeft := True; gSyncDirsShowFilterDuplicates := True; gSyncDirsShowFilterSingles := True; gSyncDirsFileMask := '*'; { Internal Associations} gFileAssociationLastCustomAction := rsMsgDefaultCustomActionName; gOfferToAddToFileAssociations := False; gExtendedContextMenu := False; gOpenExecuteViaShell := False; gExecuteViaTerminalClose := False; gExecuteViaTerminalStayOpen := False; gIncludeFileAssociation := False; { - Other - } gGoToRoot := False; gLuaLib := LuaDLL; gNameSCFile := 'shortcuts.scf'; gLastUsedPacker := 'zip'; gUseShellForFileOperations := {$IF DEFINED(MSWINDOWS)}WindowsVersion >= wvVista{$ELSE}False{$ENDIF}; gLastDoAnyCommand := 'cm_Refresh'; { TotalCommander Import/Export } //Will search minimally where TC could be installed so the default value would have some chances to be correct. {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename:=''; gTotalCommanderConfigFilename:=''; gTotalCommanderToolbarPath:=''; if mbFileExists('c:\totalcmd\TOTALCMD.EXE') then gTotalCommanderExecutableFilename:='c:\totalcmd\TOTALCMD.EXE'; if (gTotalCommanderExecutableFilename='') AND (mbFileExists('c:\totalcmd\TOTALCMD64.EXE')) then gTotalCommanderExecutableFilename:='c:\totalcmd\TOTALCMD64.EXE'; if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_COMMON_PROGRAMS,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAMS,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILESX86,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMON,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMONX86,'totalcmd\TOTALCMD.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_COMMON_PROGRAMS,'totalcmd\TOTALCMD64.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAMS,'totalcmd\TOTALCMD64.EXE'); if gTotalCommanderExecutableFilename='' then gTotalCommanderExecutableFilename:=GetPathNameIfItMatch(CSIDL_PROGRAM_FILES_COMMON,'totalcmd\TOTALCMD64.EXE'); if mbFileExists('c:\totalcmd\wincmd.ini') then gTotalCommanderConfigFilename:='c:\totalcmd\wincmd.ini'; if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_APPDATA,'GHISLER\wincmd.ini'); if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_PROFILE,'wincmd.ini'); if gTotalCommanderConfigFilename='' then gTotalCommanderConfigFilename:=GetPathNameIfItMatch(CSIDL_WINDOWS,'wincmd.ini'); //Don't laugh. The .INI file were originally saved in windows folder for many programs! if gTotalCommanderConfigFilename<>'' then gTotalCommanderToolbarPath:=ExtractFilePath(gTotalCommanderConfigFilename); {$ENDIF} gExts.Clear; gColorExt.Clear; gFileInfoToolTip.Clear; gDirectoryHotlist.Clear; gFavoriteTabsList.Clear; glsDirHistory.Clear; glsMaskHistory.Clear; glsSearchHistory.Clear; glsSearchPathHistory.Clear; glsReplaceHistory.Clear; glsReplacePathHistory.Clear; glsIgnoreList.Clear; gSearchTemplateList.Clear; gDSXPlugins.Clear; gWCXPlugins.Clear; gWDXPlugins.Clear; gWFXPlugins.Clear; gWLXPlugins.Clear; gMultiArcList.Clear; ColSet.Clear; end; procedure SetDefaultNonConfigGlobs; begin { - Not in config - } gHelpLang := ''; gRepeatPassword := True; gDirHistoryCount := 30; gFirstTextSearch := True; gErrorFile := gpCfgDir + ExtractOnlyFileName(Application.ExeName) + '.err'; DefaultDateTimeFormat := FormatSettings.ShortDateFormat + ' hh:nn:ss'; end; function OpenConfig(var ErrorMessage: String): Boolean; begin if Assigned(gConfig) then Exit(True); // Check global directory for XML config. if (gpCmdLineCfgDir = EmptyStr) and mbFileExists(gpGlobalCfgDir + 'doublecmd.xml') then begin gConfig := TXmlConfig.Create(gpGlobalCfgDir + 'doublecmd.xml'); gUseConfigInProgramDir := True; if mbFileAccess(gpGlobalCfgDir + 'doublecmd.xml', fmOpenRead or fmShareDenyWrite) then begin LoadConfigCheckErrors(@LoadGlobalConfig, gpGlobalCfgDir + 'doublecmd.xml', ErrorMessage); gUseConfigInProgramDir := gConfig.GetValue(gConfig.RootNode, 'Configuration/UseConfigInProgramDir', False); if not gUseConfigInProgramDir then begin if mbFileExists(gpCfgDir + 'doublecmd.xml') then // Close global config so that the local config is opened below. FreeAndNil(gConfig) else // Local config is used but it doesn't exist. Use global config that has just // been read but set file name accordingly and later save to local config. gConfig.FileName := gpCfgDir + 'doublecmd.xml'; end; end else begin // Configuration file is not readable. AddStrWithSep(ErrorMessage, 'Config file "' + gpGlobalCfgDir + 'doublecmd.xml' + '" exists but is not readable.', LineEnding); Exit(False); end; end; // Check user directory for XML config. if not Assigned(gConfig) and mbFileExists(gpCfgDir + 'doublecmd.xml') then begin gConfig := TXmlConfig.Create(gpCfgDir + 'doublecmd.xml'); gUseConfigInProgramDir := False; if mbFileAccess(gpCfgDir + 'doublecmd.xml', fmOpenRead or fmShareDenyWrite) then begin LoadConfigCheckErrors(@LoadGlobalConfig, gpCfgDir + 'doublecmd.xml', ErrorMessage); end else begin // Configuration file is not readable. AddStrWithSep(ErrorMessage, 'Config file "' + gpCfgDir + 'doublecmd.xml' + '" exists but is not readable.', LineEnding); Exit(False); end; end; if not Assigned(gConfig) then begin // Open INI config if present. // Check global directory for INI config. if not Assigned(gIni) and mbFileAccess(gpGlobalCfgDir + 'doublecmd.ini', fmOpenRead or fmShareDenyWrite) then begin gIni := TIniFileEx.Create(gpGlobalCfgDir + 'doublecmd.ini', fmOpenRead or fmShareDenyWrite); gUseConfigInProgramDir := gIni.ReadBool('Configuration', 'UseIniInProgramDir', False); if not gUseConfigInProgramDir then FreeAndNil(gIni) else begin if mbFileAccess(gpGlobalCfgDir + 'doublecmd.ini', fmOpenWrite or fmShareDenyWrite) then begin FreeAndNil(gIni); gIni := TIniFileEx.Create(gpGlobalCfgDir + 'doublecmd.ini', fmOpenWrite or fmShareDenyWrite); end else begin DCDebug('Warning: Config file "' + gpGlobalCfgDir + 'doublecmd.ini' + '" is not accessible for writing. Configuration will not be saved.'); end; end; end; // Check user directory for INI config. if not Assigned(gIni) and mbFileAccess(gpCfgDir + 'doublecmd.ini', fmOpenRead or fmShareDenyWrite) then begin gIni := TIniFileEx.Create(gpCfgDir + 'doublecmd.ini', fmOpenRead or fmShareDenyWrite); gUseConfigInProgramDir := False; end; if Assigned(gIni) then begin DebugLn('Converted old configuration from ' + gIni.FileName); if gUseConfigInProgramDir then gConfig := TXmlConfig.Create(gpGlobalCfgDir + 'doublecmd.xml') else gConfig := TXmlConfig.Create(gpCfgDir + 'doublecmd.xml'); end; end; // By default use config in user directory. if not Assigned(gConfig) then begin gConfig := TXmlConfig.Create(gpCfgDir + 'doublecmd.xml'); gUseConfigInProgramDir := False; end; gUseConfigInProgramDirNew := gUseConfigInProgramDir; // If global config is used then set config directory as global config directory. if gUseConfigInProgramDir then begin gpCfgDir := gpGlobalCfgDir; UpdateEnvironmentVariable; end; if mbFileExists(gpCfgDir + 'doublecmd.xml') and (not mbFileAccess(gpCfgDir + 'doublecmd.xml', fmOpenWrite or fmShareDenyWrite)) then begin DCDebug('Warning: Config file "' + gpCfgDir + 'doublecmd.xml' + '" is not accessible for writing. Configuration will not be saved.'); end; if not mbDirectoryExists(gpCfgDir) then mbForceDirectory(gpCfgDir); Result := True; end; function LoadGlobs: Boolean; var ErrorMessage: String = ''; begin Result := False; if not OpenConfig(ErrorMessage) then Exit; DCDebug('Loading configuration from ', gpCfgDir); SetDefaultConfigGlobs; if Assigned(gIni) then LoadIniConfig else if Assigned(gConfig) then LoadXmlConfig else begin DCDebug('Error: No config created.'); Exit(False); end; { Favorite Tabs } gFavoriteTabsList.LoadAllListFromXml; // Update plugins if DC version is changed if (gPreviousVersion <> dcVersion) then UpdatePlugins; // Set secondary variables for options that need restart. gShowIconsNew := gShowIcons; gIconsSizeNew := gIconsSize; gIconsInMenusSizeNew := gIconsInMenusSize; CopySettingsFiles; { Internal associations } //"LoadExtsConfig" checks itself if file is present or not LoadConfigCheckErrors(@LoadExtsConfig, gpCfgDir + gcfExtensionAssociation, ErrorMessage); if mbFileExists(gpCfgDir + 'dirhistory.txt') then begin LoadStringsFromFile(glsDirHistory, gpCfgDir + 'dirhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'dirhistory.txt', gpCfgDir + 'dirhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'cmdhistory.txt') then begin LoadStringsFromFile(glsCmdLineHistory, gpCfgDir + 'cmdhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'cmdhistory.txt', gpCfgDir + 'cmdhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'maskhistory.txt') then begin LoadStringsFromFile(glsMaskHistory, gpCfgDir + 'maskhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'maskhistory.txt', gpCfgDir + 'maskhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'searchpathhistory.txt') then begin LoadStringsFromFile(glsSearchPathHistory, gpCfgDir + 'searchpathhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'searchpathhistory.txt', gpCfgDir + 'searchpathhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'searchhistory.txt') then begin LoadStringsFromFile(glsSearchHistory, gpCfgDir + 'searchhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'searchhistory.txt', gpCfgDir + 'searchhistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'replacehistory.txt') then begin LoadStringsFromFile(glsReplaceHistory, gpCfgDir + 'replacehistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'replacehistory.txt', gpCfgDir + 'replacehistory.txt.obsolete'); end; if mbFileExists(gpCfgDir + 'replacehpathhistory.txt') then begin LoadStringsFromFile(glsReplacePathHistory, gpCfgDir + 'replacepathhistory.txt', cMaxStringItems); mbRenameFile(gpCfgDir + 'replacepathhistory.txt', gpCfgDir + 'replacepathhistory.txt.obsolete'); end; LoadStringsFromFile(glsIgnoreList, ReplaceEnvVars(gIgnoreListFile)); { Hotkeys } if not mbFileExists(gpCfgDir + gNameSCFile) then gNameSCFile := 'shortcuts.scf'; // Rename old shortcuts file to new name. if mbFileExists(gpCfgDir + 'shortcuts.ini') and not mbFileExists(gpCfgDir + gNameSCFile) then mbRenameFile(gpCfgDir + 'shortcuts.ini', gpCfgDir + gNameSCFile); LoadConfigCheckErrors(@LoadHotManConfig, gpCfgDir + gNameSCFile, ErrorMessage); { MultiArc addons } if mbFileExists(gpCfgDir + 'multiarc.ini') then LoadConfigCheckErrors(@LoadMultiArcConfig, gpCfgDir + 'multiarc.ini', ErrorMessage); { Various history } if mbFileExists(gpCfgDir + 'history.xml') then LoadConfigCheckErrors(@LoadHistoryConfig, gpCfgDir + 'history.xml', ErrorMessage); { Localization } msgLoadLng; FillFileFuncList; { Specialdir } if gShowOnlyValidEnv=FALSE then gSpecialDirList.PopulateSpecialDir; //We must reload it if user has included the unsignificant environment variable. But anyway, this will not happen often. Result := AskUserOnError(ErrorMessage); end; procedure SaveGlobs; var TmpConfig: TXmlConfig; Ini: TIniFileEx = nil; ErrMsg: String = ''; begin if (gUseConfigInProgramDirNew <> gUseConfigInProgramDir) and (gpCmdLineCfgDir = EmptyStr) then begin LoadPaths; if gUseConfigInProgramDirNew then begin gpCfgDir := gpGlobalCfgDir; UpdateEnvironmentVariable; end; { Save location of configuration files } if Assigned(gIni) then begin // Still using INI config. FreeThenNil(gIni); try Ini:= TIniFileEx.Create(gpGlobalCfgDir + 'doublecmd.ini'); Ini.WriteBool('Configuration', 'UseIniInProgramDir', gUseConfigInProgramDirNew); Ini.UpdateFile; finally FreeThenNil(Ini); end; gIni := TIniFileEx.Create(gpCfgDir + 'doublecmd.ini'); end; if mbFileAccess(gpGlobalCfgDir + 'doublecmd.xml', fmOpenWrite or fmShareDenyWrite) then begin TmpConfig := TXmlConfig.Create(gpGlobalCfgDir + 'doublecmd.xml', True); try TmpConfig.SetValue(TmpConfig.RootNode, 'Configuration/UseConfigInProgramDir', gUseConfigInProgramDirNew); TmpConfig.Save; finally TmpConfig.Free; end; end; gConfig.FileName := gpCfgDir + 'doublecmd.xml'; end; if mbFileAccess(gpCfgDir, fmOpenWrite or fmShareDenyNone) then begin SaveWithCheck(@SaveCfgIgnoreList, 'ignore list', ErrMsg); SaveWithCheck(@SaveCfgMainConfig, 'main configuration', ErrMsg); SaveWithCheck(@SaveHistoryConfig, 'various history', ErrMsg); if ErrMsg <> EmptyStr then DebugLn(ErrMsg); end else DebugLn('Not saving configuration - no write access to ', gpCfgDir); end; procedure LoadIniConfig; var oldQuickSearch: Boolean = True; oldQuickFilter: Boolean = False; oldQuickSearchMode: TShiftState = [ssCtrl, ssAlt]; oldQuickFilterMode: TShiftState = []; glsHotDirTempoLegacyConversion:TStringListEx; LocalHotDir: THotDir; IndexHotDir: integer; begin { Layout page } gButtonBar := gIni.ReadBool('Layout', 'ButtonBar', True); gToolBarFlat := gIni.ReadBool('ButtonBar', 'FlatIcons', True); gToolBarButtonSize := gIni.ReadInteger('ButtonBar', 'ButtonHeight', 16); gToolBarIconSize := gIni.ReadInteger('ButtonBar', 'SmallIconSize', 16); gDriveBar1 := gIni.ReadBool('Layout', 'DriveBar1', True); gDriveBar2 := gIni.ReadBool('Layout', 'DriveBar2', True); gDriveBarFlat := gIni.ReadBool('Layout', 'DriveBarFlat', True); gDrivesListButton := gIni.ReadBool('Layout', 'DriveMenuButton', True); gDirectoryTabs := gIni.ReadBool('Layout', 'DirectoryTabs', True); gCurDir := gIni.ReadBool('Layout', 'CurDir', True); gTabHeader := gIni.ReadBool('Layout', 'TabHeader', True); gStatusBar := gIni.ReadBool('Layout', 'StatusBar', True); gCmdLine := gIni.ReadBool('Layout', 'CmdLine', True); gLogWindow := gIni.ReadBool('Layout', 'LogWindow', True); gTermWindow := gIni.ReadBool('Layout', 'TermWindow', False); gKeyButtons := gIni.ReadBool('Layout', 'KeyButtons', True); gInterfaceFlat := gIni.ReadBool('Layout', 'InterfaceFlat', True); gShowSystemFiles := gIni.ReadBool('Configuration', 'ShowSystemFiles', False); gPOFileName := gIni.ReadString('Configuration', 'Language', '?'); DoLoadLng; gRunInTermStayOpenCmd := gIni.ReadString('Configuration', 'RunInTerm', gRunInTermStayOpenCmd); gOnlyOneAppInstance:= gIni.ReadBool('Configuration', 'OnlyOnce', False); if gIni.ReadBool('Configuration', 'CaseSensitiveSort', False) = False then gSortCaseSensitivity := cstNotSensitive else gSortCaseSensitivity := cstLocale; gLynxLike := gIni.ReadBool('Configuration', 'LynxLike', True); if gIni.ValueExists('Configuration', 'ShortFileSizeFormat') then begin if gIni.ReadBool('Configuration', 'ShortFileSizeFormat', True) then gFileSizeFormat := fsfFloat else gFileSizeFormat := fsfB; end else gFileSizeFormat := TFileSizeFormat(gIni.ReadInteger('Configuration', 'FileSizeFormat', Ord(fsfFloat))); gScrollMode := TScrollMode(gIni.ReadInteger('Configuration', 'ScrollMode', Integer(gScrollMode))); gMinimizeToTray := gIni.ReadBool('Configuration', 'MinimizeToTray', False); gAlwaysShowTrayIcon := gIni.ReadBool('Configuration', 'AlwaysShowTrayIcon', False); gDateTimeFormat := GetValidDateTimeFormat(gIni.ReadString('Configuration', 'DateTimeFormat', DefaultDateTimeFormat), DefaultDateTimeFormat); gDriveBlackList:= gIni.ReadString('Configuration', 'DriveBlackList', ''); gSpaceMovesDown := gIni.ReadBool('Configuration', 'SpaceMovesDown', False); {$IFNDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon gListFilesInThread := gIni.ReadBool('Configuration', 'ListFilesInThread', gListFilesInThread); {$ENDIF} gLoadIconsSeparately := gIni.ReadBool('Configuration', 'LoadIconsSeparately', gLoadIconsSeparately); gMouseSelectionEnabled:= gIni.ReadBool('Configuration', 'MouseSelectionEnabled', True); gMouseSelectionButton := gIni.ReadInteger('Configuration', 'MouseSelectionButton', 0); gAutoFillColumns:= gIni.ReadBool('Configuration', 'AutoFillColumns', False); gAutoSizeColumn := gIni.ReadInteger('Configuration', 'AutoSizeColumn', 1); gCustomColumnsChangeAllColumns := gIni.ReadBool('Configuration', 'CustomColumnsChangeAllColumns', gCustomColumnsChangeAllColumns); // Loading tabs relating option respecting legacy order of options setting and wanted default values. // The legacy default choice will still be to close on double click if it was set to that before. But if it was not, let's set to Favorite Tabs, then, by default of first start of new version. gDirTabOptions := TTabsOptions(gIni.ReadInteger('Configuration', 'DirTabOptions', Integer(gDirTabOptions)))+[tb_close_on_doubleclick, tb_reusing_tab_when_possible, tb_confirm_close_locked_tab]; gDirTabLimit := gIni.ReadInteger('Configuration', 'DirTabLimit', 32); gDirTabPosition := TTabsPosition(gIni.ReadInteger('Configuration', 'DirTabPosition', Integer(gDirTabPosition))); gDirTabActionOnDoubleClick := tadc_CloseTab; gExternalTools[etEditor].Enabled := gIni.ReadBool('Configuration', 'UseExtEdit', False); gExternalTools[etViewer].Enabled := gIni.ReadBool('Configuration', 'UseExtView', False); gExternalTools[etDiffer].Enabled := gIni.ReadBool('Configuration', 'UseExtDiff', False); gExternalTools[etEditor].Path := gIni.ReadString('Configuration', 'ExtEdit', ''); gExternalTools[etViewer].Path := gIni.ReadString('Configuration', 'ExtView', ''); gExternalTools[etDiffer].Path := gIni.ReadString('Configuration', 'ExtDiff', ''); gRunTermCmd := gIni.ReadString('Configuration', 'RunTerm', RunTermCmd); gLuaLib:=gIni.ReadString('Configuration', 'LuaLib', gLuaLib); { Fonts } gFonts[dcfMain].Name:=gIni.ReadString('Configuration', 'Font.Name', 'default'); gFonts[dcfEditor].Name:=gIni.ReadString('Editor', 'Font.Name', MonoSpaceFont); gFonts[dcfViewer].Name:=gIni.ReadString('Viewer', 'Font.Name', MonoSpaceFont); gFonts[dcfMain].Size:=gIni.ReadInteger('Configuration', 'Font.Size', 10); gFonts[dcfEditor].Size:=gIni.ReadInteger('Editor', 'Font.Size', 14); gFonts[dcfViewer].Size:=gIni.ReadInteger('Viewer', 'Font.Size', 14); gFonts[dcfMain].Style := TFontStyles(gIni.ReadInteger('Configuration', 'Font.Style', 1)); gFonts[dcfEditor].Style := TFontStyles(gIni.ReadInteger('Editor', 'Font.Style', 0)); gFonts[dcfViewer].Style := TFontStyles(gIni.ReadInteger('Viewer', 'Font.Style', 0)); { Colors } gUseCursorBorder := gIni.ReadBool('(Colors', 'UseCursorBorder', gUseCursorBorder); gCursorBorderColor := gIni.ReadInteger('Colors', 'CursorBorderColor', gCursorBorderColor); gUseFrameCursor := gIni.ReadBool('Colors', 'UseFrameCursor', gUseFrameCursor); gForeColor := gIni.ReadInteger('Colors', 'ForeColor', gForeColor); gBackColor := gIni.ReadInteger('Colors', 'BackColor', gBackColor); gBackColor2 := gIni.ReadInteger('Colors', 'BackColor2', gBackColor2); gMarkColor := gIni.ReadInteger('Colors', 'MarkColor', gMarkColor); gCursorColor := gIni.ReadInteger('Colors', 'CursorColor', gCursorColor); gCursorText := gIni.ReadInteger('Colors', 'CursorText', gCursorText); gInactiveCursorColor := gIni.ReadInteger('Colors', 'InactiveCursorColor', gInactiveCursorColor); gInactiveMarkColor := gIni.ReadInteger('Colors', 'InactiveMarkColor', gInactiveMarkColor); gUseInvertedSelection := gIni.ReadBool('Colors', 'UseInvertedSelection', gUseInvertedSelection); gUseInactiveSelColor := gIni.ReadBool('Colors', 'UseInactiveSelColor', gUseInactiveSelColor); gAllowOverColor := gIni.ReadBool('Colors', 'AllowOverColor', gAllowOverColor); gInactivePanelBrightness := gIni.ReadInteger('Colors', 'InactivePanelBrightness', gInactivePanelBrightness); { File operations } gCopyBlockSize := gIni.ReadInteger('Configuration', 'CopyBlockSize', 65536); gSkipFileOpError:= gIni.ReadBool('Configuration', 'SkipFileOpError', False); gDropReadOnlyFlag := gIni.ReadBool('Configuration', 'DropReadOnlyFlag', True); gUseMmapInSearch := gIni.ReadBool('Configuration', 'UseMmapInSearch', False); gWipePassNumber:= gIni.ReadInteger('Configuration', 'WipePassNumber', 1); gProcessComments := gIni.ReadBool('Configuration', 'ProcessComments', True); gRenameSelOnlyName:= gIni.ReadBool('Configuration', 'RenameSelOnlyName', false); gShowCopyTabSelectPanel:= gIni.ReadBool('Configuration', 'ShowCopyTabSelectPanel', false); gUseTrash := gIni.ReadBool('Configuration', 'UseTrash', True); // 05.05.2009 - read global trash option from configuration file gShowDialogOnDragDrop := gIni.ReadBool('Configuration', 'ShowDialogOnDragDrop', gShowDialogOnDragDrop); { Log } gLogFile := gIni.ReadBool('Configuration', 'LogFile', True); gLogFileWithDateInName := gIni. ReadBool('Configuration', 'LogFileWithDateInName', FALSE); gLogFileName := gIni.ReadString('Configuration', 'LogFileName', gLogFileName); gLogOptions := TLogOptions(gIni.ReadInteger('Configuration', 'LogOptions', Integer(gLogOptions))); { Configuration page } gSaveDirHistory := gIni.ReadBool('Configuration', 'SaveDirHistory', True); gSaveCmdLineHistory := gIni.ReadBool('Configuration', 'SaveCmdLineHistory', True); gSaveFileMaskHistory := gIni.ReadBool('Configuration', 'SaveFileMaskHistory', True); { Quick Search page} oldQuickSearch := gIni.ReadBool('Configuration', 'QuickSearch', oldQuickSearch); oldQuickSearchMode := TShiftState(gIni.ReadInteger('Configuration', 'QuickSearchMode', Integer(oldQuickSearchMode))); OldKeysToNew(oldQuickSearch, oldQuickSearchMode, ktaQuickSearch); oldQuickFilter := gIni.ReadBool('Configuration', 'QuickFilter', oldQuickFilter); oldQuickFilterMode := TShiftState(gIni.ReadInteger('Configuration', 'QuickFilterMode', Integer(oldQuickFilterMode))); OldKeysToNew(oldQuickFilter, oldQuickFilterMode, ktaQuickFilter); if gIni.ReadBool('Configuration', 'QuickSearchMatchBeginning', qsmBeginning in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmBeginning) else Exclude(gQuickSearchOptions.Match, qsmBeginning); if gIni.ReadBool('Configuration', 'QuickSearchMatchEnding', qsmEnding in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmEnding) else Exclude(gQuickSearchOptions.Match, qsmEnding); { Misc page } gGridVertLine:= gIni.ReadBool('Configuration', 'GridVertLine', False); gGridHorzLine:= gIni.ReadBool('Configuration', 'GridHorzLine', False); gShowWarningMessages := gIni.ReadBool('Configuration', 'ShowWarningMessages', True); gDirBrackets:= gIni.ReadBool('Configuration', 'DirBrackets', True); gShowToolTipMode:= gIni.ReadBool('Configuration', 'ShowToolTipMode', gShowToolTipMode); { Auto refresh page } gWatchDirs := TWatchOptions(gIni.ReadInteger('Configuration', 'WatchDirs', Integer(gWatchDirs))); gWatchDirsExclude := gIni.ReadString('Configuration', 'WatchDirsExclude', ''); { Icons page } gShowIcons := TShowIconsMode(gIni.ReadInteger('Configuration', 'ShowIcons', Integer(gShowIcons))); gIconOverlays:= gIni.ReadBool('Configuration', 'IconOverlays', True); gIconsSize := gIni.ReadInteger('Configuration', 'IconsSize', 16); gCustomDriveIcons := gIni.ReadBool('Configuration', 'CustomDriveIcons', False); { Ignore list page } gIgnoreListFileEnabled:= gIni.ReadBool('Configuration', 'IgnoreListFileEnabled', False); gIgnoreListFile:= gIni.ReadString('Configuration', 'IgnoreListFile', gIgnoreListFile); gCutTextToColWidth := gIni.ReadBool('Configuration', 'CutTextToColWidth', True); gImageStretch:= gIni.ReadBool('Viewer', 'Image.Stretch', False); { Operations options } gOperationOptionSymLinks := TFileSourceOperationOptionSymLink( gIni.ReadInteger('Operations', 'Symlink', Integer(gOperationOptionSymLinks))); gOperationOptionCorrectLinks := gIni.ReadBool('Operations', 'CorrectLinks', gOperationOptionCorrectLinks); gOperationOptionFileExists := TFileSourceOperationOptionFileExists( gIni.ReadInteger('Operations', 'FileExists', Integer(gOperationOptionFileExists))); gOperationOptionDirectoryExists := TFileSourceOperationOptionDirectoryExists( gIni.ReadInteger('Operations', 'DirectoryExists', Integer(gOperationOptionDirectoryExists))); gOperationOptionCheckFreeSpace := gIni.ReadBool('Operations', 'CheckFreeSpace', gOperationOptionCheckFreeSpace); //Let's take the time to do the conversion for those loading from INI file { Hot dir } glsHotDirTempoLegacyConversion:=TStringListEx.Create; gIni.ReadSectionRaw('DirectoryHotList', glsHotDirTempoLegacyConversion); for IndexHotDir:=0 to pred(glsHotDirTempoLegacyConversion.Count) do begin LocalHotDir:=THotDir.Create; LocalHotDir.HotDirName:=glsHotDirTempoLegacyConversion.Names[IndexHotDir]; LocalHotDir.HotDirPath:=glsHotDirTempoLegacyConversion.ValueFromIndex[IndexHotDir]; LocalHotDir.HotDirTarget:=''; gDirectoryHotlist.Add(LocalHotDir); end; FreeAndNil(glsHotDirTempoLegacyConversion); //Thank you, good bye! gColorExt.LoadIni; { Search template list } gSearchTemplateList.LoadFromIni(gIni); { Columns sets } ColSet.Load(gIni); { Plugins } gDSXPlugins.Load(gIni); gWCXPlugins.Load(gIni); gWDXPlugins.Load(gIni); gWFXPlugins.Load(gIni); gWLXPlugins.Load(gIni); end; procedure LoadXmlConfig; procedure GetExtTool(Node: TXmlNode; var ExternalToolOptions: TExternalToolOptions); begin if Assigned(Node) then with ExternalToolOptions do begin Enabled := gConfig.GetAttr(Node, 'Enabled', Enabled); Path := gConfig.GetValue(Node, 'Path', Path); Parameters := gConfig.GetValue(Node, 'Parameters', Parameters); RunInTerminal := gConfig.GetValue(Node, 'RunInTerminal', RunInTerminal); KeepTerminalOpen := gConfig.GetValue(Node, 'KeepTerminalOpen', KeepTerminalOpen); end; end; procedure GetDCFont(Node: TXmlNode; var FontOptions: TDCFontOptions); begin if Assigned(Node) then gConfig.GetFont(Node, '', FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality), FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality)); end; procedure LoadOption(Node: TXmlNode; var Options: TDrivesListButtonOptions; Option: TDrivesListButtonOption; AName: String); var Value: Boolean; begin if gConfig.TryGetValue(Node, AName, Value) then begin if Value then Include(Options, Option) else Exclude(Options, Option); end; end; var Root, Node, SubNode: TXmlNode; LoadedConfigVersion: Integer; oldQuickSearch: Boolean = True; oldQuickFilter: Boolean = False; oldQuickSearchMode: TShiftState = [ssCtrl, ssAlt]; oldQuickFilterMode: TShiftState = []; KeyTypingModifier: TKeyTypingModifier; begin with gConfig do begin Root := gConfig.RootNode; { Double Commander Version } gPreviousVersion:= GetAttr(Root, 'DCVersion', EmptyStr); LoadedConfigVersion := GetAttr(Root, 'ConfigVersion', ConfigVersion); { Language page } gPOFileName := GetValue(Root, 'Language/POFileName', gPOFileName); DoLoadLng; { Behaviours page } Node := Root.FindNode('Behaviours'); if Assigned(Node) then begin gGoToRoot := GetValue(Node, 'GoToRoot', gGoToRoot); //Trick to split initial legacy command for terminal // Initial name in config was "RunInTerminal". // If it is still present in config, it means we're running from an older version. // So if it's different than our setting, let's split it to get actual "cmd" and "params". // New version uses "RunInTerminalCloseCmd" from now on. // ALSO, in the case of Windows, installation default was "cmd.exe /K ..." which means Run-and-stayopen // in the case of Unix, installation default was "xterm -e sh -c ..." which means Run-and-close // So because of these two different behavior, transition is done slightly differently. {$IF DEFINED(MSWINDOWS)} gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminal', gRunInTermStayOpenCmd); if gRunInTermStayOpenCmd<>RunInTermCloseCmd then begin SplitCmdLineToCmdParams(gRunInTermStayOpenCmd, gRunInTermStayOpenCmd, gRunInTermStayOpenParams); if gRunInTermStayOpenParams<>'' then gRunInTermStayOpenParams:=gRunInTermStayOpenParams+' {command}' else gRunInTermStayOpenParams:='{command}'; end else begin gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminalStayOpenCmd', RunInTermStayOpenCmd); gRunInTermStayOpenParams := GetValue(Node, 'RunInTerminalStayOpenParams', RunInTermStayOpenParams); end; gRunInTermCloseCmd := GetValue(Node, 'RunInTerminalCloseCmd', RunInTermCloseCmd); gRunInTermCloseParams := GetValue(Node, 'RunInTerminalCloseParams', RunInTermCloseParams); {$ELSE} gRunInTermCloseCmd := GetValue(Node, 'RunInTerminal', gRunInTermCloseCmd); if gRunInTermCloseCmd<>RunInTermCloseCmd then begin SplitCmdLineToCmdParams(gRunInTermCloseCmd, gRunInTermCloseCmd, gRunInTermCloseParams); if gRunInTermCloseParams<>'' then gRunInTermCloseParams:=gRunInTermCloseParams+' {command}' else gRunInTermStayOpenParams:='{command}'; end else begin gRunInTermCloseCmd := GetValue(Node, 'RunInTerminalCloseCmd', RunInTermCloseCmd); gRunInTermCloseParams := GetValue(Node, 'RunInTerminalCloseParams', RunInTermCloseParams); end; gRunInTermStayOpenCmd := GetValue(Node, 'RunInTerminalStayOpenCmd', RunInTermStayOpenCmd); gRunInTermStayOpenParams := GetValue(Node, 'RunInTerminalStayOpenParams', RunInTermStayOpenParams); {$ENDIF} // Let's try to be backward comptible and re-load possible old values for terminal launch command gRunTermCmd := GetValue(Node, 'JustRunTerminal', ''); if gRunTermCmd = '' then begin gRunTermCmd := GetValue(Node, 'RunTerminal', RunTermCmd); SplitCmdLineToCmdParams(gRunTermCmd, gRunTermCmd,gRunTermParams); end else begin gRunTermParams := GetValue(Node, 'JustRunTermParams', RunTermParams); end; gOnlyOneAppInstance := GetValue(Node, 'OnlyOneAppInstance', gOnlyOneAppInstance); gLynxLike := GetValue(Node, 'LynxLike', gLynxLike); if LoadedConfigVersion < 5 then begin if GetValue(Node, 'SortCaseSensitive', False) = False then gSortCaseSensitivity := cstNotSensitive else gSortCaseSensitivity := cstLocale; gSortNatural := GetValue(Node, 'SortNatural', gSortNatural); end; if LoadedConfigVersion < 6 then begin if GetValue(Node, 'ShortFileSizeFormat', True) then gFileSizeFormat := fsfFloat else gFileSizeFormat := fsfB; end else begin gFileSizeFormat := TFileSizeFormat(GetValue(Node, 'FileSizeFormat', Ord(gFileSizeFormat))); end; gMinimizeToTray := GetValue(Node, 'MinimizeToTray', gMinimizeToTray); gAlwaysShowTrayIcon := GetValue(Node, 'AlwaysShowTrayIcon', gAlwaysShowTrayIcon); gMouseSelectionEnabled := GetAttr(Node, 'Mouse/Selection/Enabled', gMouseSelectionEnabled); gMouseSelectionButton := GetValue(Node, 'Mouse/Selection/Button', gMouseSelectionButton); gScrollMode := TScrollMode(GetValue(Node, 'Mouse/ScrollMode', Integer(gScrollMode))); gWheelScrollLines:= GetValue(Node, 'Mouse/WheelScrollLines', gWheelScrollLines); gAutoFillColumns := GetValue(Node, 'AutoFillColumns', gAutoFillColumns); gAutoSizeColumn := GetValue(Node, 'AutoSizeColumn', gAutoSizeColumn); gDateTimeFormat := GetValidDateTimeFormat(GetValue(Node, 'DateTimeFormat', gDateTimeFormat), DefaultDateTimeFormat); gCutTextToColWidth := GetValue(Node, 'CutTextToColumnWidth', gCutTextToColWidth); gShowSystemFiles := GetValue(Node, 'ShowSystemFiles', gShowSystemFiles); {$IFNDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon gListFilesInThread := GetValue(Node, 'ListFilesInThread', gListFilesInThread); {$ENDIF} gLoadIconsSeparately := GetValue(Node, 'LoadIconsSeparately', gLoadIconsSeparately); gDelayLoadingTabs := GetValue(Node, 'DelayLoadingTabs', gDelayLoadingTabs); gHighlightUpdatedFiles := GetValue(Node, 'HighlightUpdatedFiles', gHighlightUpdatedFiles); gDriveBlackList := GetValue(Node, 'DriveBlackList', gDriveBlackList); gDriveBlackListUnmounted := GetValue(Node, 'DriveBlackListUnmounted', gDriveBlackListUnmounted); if LoadedConfigVersion < 8 then begin gBriefViewFileExtAligned := GetValue(Node, 'BriefViewFileExtAligned', gBriefViewFileExtAligned); end; end; { Tools page } GetExtTool(gConfig.FindNode(Root, 'Tools/Viewer'), gExternalTools[etViewer]); GetExtTool(gConfig.FindNode(Root, 'Tools/Editor'), gExternalTools[etEditor]); GetExtTool(gConfig.FindNode(Root, 'Tools/Differ'), gExternalTools[etDiffer]); { Differ related} Node := Root.FindNode('Tools'); SubNode := FindNode(Node, 'Differ', TRUE); gResultingFramePositionAfterCompare := TResultingFramePositionAfterCompare(GetValue(SubNode, 'FramePosAfterComp', Integer(gResultingFramePositionAfterCompare))); { Fonts page } GetDCFont(gConfig.FindNode(Root, 'Fonts/Main'), gFonts[dcfMain]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Editor'), gFonts[dcfEditor]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Viewer'), gFonts[dcfViewer]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Log'), gFonts[dcfLog]); GetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook'), gFonts[dcfViewerBook]); GetDCFont(gConfig.FindNode(Root, 'Fonts/Console'), gFonts[dcfConsole]); { Colors page } Node := Root.FindNode('Colors'); if Assigned(Node) then begin gUseCursorBorder := GetValue(Node, 'UseCursorBorder', gUseCursorBorder); gCursorBorderColor := GetValue(Node, 'CursorBorderColor', gCursorBorderColor); gUseFrameCursor := GetValue(Node, 'UseFrameCursor', gUseFrameCursor); gForeColor := GetValue(Node, 'Foreground', gForeColor); gBackColor := GetValue(Node, 'Background', gBackColor); gBackColor2 := GetValue(Node, 'Background2', gBackColor2); gMarkColor := GetValue(Node, 'Mark', gMarkColor); gCursorColor := GetValue(Node, 'Cursor', gCursorColor); gCursorText := GetValue(Node, 'CursorText', gCursorText); gInactiveCursorColor := GetValue(Node, 'InactiveCursor', gInactiveCursorColor); gInactiveMarkColor := GetValue(Node, 'InactiveMark', gInactiveMarkColor); gUseInvertedSelection := GetValue(Node, 'UseInvertedSelection', gUseInvertedSelection); gUseInactiveSelColor := GetValue(Node, 'UseInactiveSelColor', gUseInactiveSelColor); gAllowOverColor := GetValue(Node, 'AllowOverColor', gAllowOverColor); gInactivePanelBrightness := GetValue(Node, 'InactivePanelBrightness', gInactivePanelBrightness); gIndUseGradient := GetValue(Node, 'FreeSpaceIndicator/UseGradient', gIndUseGradient); gIndForeColor := GetValue(Node, 'FreeSpaceIndicator/ForeColor', gIndForeColor); gIndBackColor := GetValue(Node, 'FreeSpaceIndicator/BackColor', gIndBackColor); gColorExt.Load(gConfig, Node); end; { ToolTips page } Node := Root.FindNode('ToolTips'); if Assigned(Node) then begin gShowToolTipMode := GetValue(Node, 'ShowToolTipMode', gShowToolTipMode); gFileInfoToolTip.Load(gConfig, Node); end; { Layout page } Node := Root.FindNode('Layout'); if Assigned(Node) then begin gMainMenu := GetValue(Node, 'MainMenu', gMainMenu); SubNode := Node.FindNode('ButtonBar'); if Assigned(SubNode) then begin gButtonBar := GetAttr(SubNode, 'Enabled', gButtonBar); gToolBarFlat := GetValue(SubNode, 'FlatIcons', gToolBarFlat); gToolBarButtonSize := GetValue(SubNode, 'ButtonHeight', gToolBarButtonSize); if LoadedConfigVersion <= 1 then gToolBarIconSize := GetValue(SubNode, 'SmallIconSize', gToolBarIconSize) else gToolBarIconSize := GetValue(SubNode, 'IconSize', gToolBarIconSize); gToolbarReportErrorWithCommands := GetValue(SubNode,'ReportErrorWithCommands',gToolbarReportErrorWithCommands); end; gDriveBar1 := GetValue(Node, 'DriveBar1', gDriveBar1); gDriveBar2 := GetValue(Node, 'DriveBar2', gDriveBar2); gDriveBarFlat := GetValue(Node, 'DriveBarFlat', gDriveBarFlat); if LoadedConfigVersion < 3 then gDrivesListButton := GetValue(Node, 'DriveMenuButton', gDrivesListButton) else begin SubNode := Node.FindNode('DrivesListButton'); if Assigned(SubNode) then begin gDrivesListButton := GetAttr(SubNode, 'Enabled', gDrivesListButton); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowLabel, 'ShowLabel'); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowFileSystem, 'ShowFileSystem'); LoadOption(SubNode, gDrivesListButtonOptions, dlbShowFreeSpace, 'ShowFreeSpace'); end; end; gSeparateTree := GetValue(Node, 'SeparateTree', gSeparateTree); gDirectoryTabs := GetValue(Node, 'DirectoryTabs', gDirectoryTabs); gCurDir := GetValue(Node, 'CurrentDirectory', gCurDir); gTabHeader := GetValue(Node, 'TabHeader', gTabHeader); gStatusBar := GetValue(Node, 'StatusBar', gStatusBar); gCmdLine := GetValue(Node, 'CmdLine', gCmdLine); gLogWindow := GetValue(Node, 'LogWindow', gLogWindow); gTermWindow := GetValue(Node, 'TermWindow', gTermWindow); gKeyButtons := GetValue(Node, 'KeyButtons', gKeyButtons); gInterfaceFlat := GetValue(Node, 'InterfaceFlat', gInterfaceFlat); gDriveFreeSpace := GetValue(Node, 'DriveFreeSpace', gDriveFreeSpace); gDriveInd := GetValue(Node, 'DriveIndicator', gDriveInd); gProgInMenuBar := GetValue(Node, 'ProgressInMenuBar', gProgInMenuBar); gPanelOfOp := GetValue(Node, 'PanelOfOperationsInBackground', gPanelOfOp); gHorizontalFilePanels := GetValue(Node, 'HorizontalFilePanels', gHorizontalFilePanels); gShortFormatDriveInfo := GetValue(Node, 'ShortFormatDriveInfo', gShortFormatDriveInfo); end; { Files views } Node := Root.FindNode('FilesViews'); if Assigned(Node) then begin SubNode := Node.FindNode('Sorting'); if Assigned(SubNode) then begin gSortCaseSensitivity := TCaseSensitivity(GetValue(SubNode, 'CaseSensitivity', Integer(gSortCaseSensitivity))); gSortNatural := GetValue(SubNode, 'NaturalSorting', gSortNatural); gSortFolderMode:= TSortFolderMode(GetValue(SubNode, 'SortFolderMode', Integer(gSortFolderMode))); gNewFilesPosition := TNewFilesPosition(GetValue(SubNode, 'NewFilesPosition', Integer(gNewFilesPosition))); gUpdatedFilesPosition := TUpdatedFilesPosition(GetValue(SubNode, 'UpdatedFilesPosition', Integer(gUpdatedFilesPosition))); end; SubNode := FindNode(Node, 'ColumnsView'); if Assigned(SubNode) then begin gColumnsAutoSaveWidth := GetValue(SubNode, 'AutoSaveWidth', gColumnsAutoSaveWidth); gColumnsTitleStyle := TTitleStyle(GetValue(SubNode, 'TitleStyle', Integer(gColumnsTitleStyle))); end; SubNode := Node.FindNode('BriefView'); if Assigned(SubNode) then begin gBriefViewFileExtAligned := GetValue(SubNode, 'FileExtAligned', gBriefViewFileExtAligned); SubNode := SubNode.FindNode('Columns'); if Assigned(SubNode) then begin gBriefViewFixedWidth := GetValue(SubNode, 'FixedWidth', gBriefViewFixedWidth); gBriefViewFixedCount := GetValue(SubNode, 'FixedCount', gBriefViewFixedCount); gBriefViewMode := TBriefViewMode(GetValue(SubNode, 'AutoSize', Integer(gBriefViewMode))); end; end; end; { Keys page } Node := Root.FindNode('Keyboard'); if Assigned(Node) then begin SubNode := FindNode(Node, 'Typing/Actions'); if Assigned(SubNode) then begin for KeyTypingModifier in TKeyTypingModifier do gKeyTyping[KeyTypingModifier] := TKeyTypingAction(GetValue(SubNode, TKeyTypingModifierToNodeName[KeyTypingModifier], Integer(gKeyTyping[KeyTypingModifier]))); end; end; { File operations page } Node := Root.FindNode('FileOperations'); if Assigned(Node) then begin gCopyBlockSize := GetValue(Node, 'BufferSize', gCopyBlockSize); gHashBlockSize := GetValue(Node, 'HashBufferSize', gHashBlockSize); gUseMmapInSearch := GetValue(Node, 'UseMmapInSearch', gUseMmapInSearch); gPartialNameSearch := GetValue(Node, 'PartialNameSearch', gPartialNameSearch); gWipePassNumber := GetValue(Node, 'WipePassNumber', gWipePassNumber); gDropReadOnlyFlag := GetValue(Node, 'DropReadOnlyFlag', gDropReadOnlyFlag); gProcessComments := GetValue(Node, 'ProcessComments', gProcessComments); gRenameSelOnlyName := GetValue(Node, 'RenameSelOnlyName', gRenameSelOnlyName); gShowCopyTabSelectPanel := GetValue(Node, 'ShowCopyTabSelectPanel', gShowCopyTabSelectPanel); gUseTrash := GetValue(Node, 'UseTrash', gUseTrash); gSkipFileOpError := GetValue(Node, 'SkipFileOpError', gSkipFileOpError); gTypeOfDuplicatedRename := tDuplicatedRename(GetValue(Node, 'TypeOfDuplicatedRename', Integer(gTypeOfDuplicatedRename))); gShowDialogOnDragDrop := GetValue(Node, 'ShowDialogOnDragDrop', gShowDialogOnDragDrop); gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel := GetValue(Node, 'DragAndDropTextRichtextDesireLevel', gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel := GetValue(Node, 'DragAndDropTextHtmlDesireLevel',gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel := GetValue(Node, 'DragAndDropTextUnicodeDesireLevel',gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel); gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel := GetValue(Node, 'DragAndDropTextSimpletextDesireLevel',gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel); gDragAndDropAskFormatEachTime := GetValue(Node,'DragAndDropAskFormatEachTime', gDragAndDropAskFormatEachTime); gDragAndDropTextAutoFilename := GetValue(Node, 'DragAndDropTextAutoFilename', gDragAndDropTextAutoFilename); gDragAndDropSaveUnicodeTextInUFT8 := GetValue(Node, 'DragAndDropSaveUnicodeTextInUFT8', gDragAndDropSaveUnicodeTextInUFT8); gOverwriteFolder := GetValue(Node, 'OverwriteFolder', gOverwriteFolder); gNtfsHourTimeDelay := GetValue(Node, 'NtfsHourTimeDelay', gNtfsHourTimeDelay); gSearchDefaultTemplate := GetValue(Node, 'SearchDefaultTemplate', gSearchDefaultTemplate); gFileOperationsProgressKind := TFileOperationsProgressKind(GetValue(Node, 'ProgressKind', Integer(gFileOperationsProgressKind))); gFileOperationsConfirmations := TFileOperationsConfirmations(GetValue(Node, 'Confirmations', Integer(gFileOperationsConfirmations))); // Operations options SubNode := Node.FindNode('Options'); if Assigned(SubNode) then begin gOperationOptionSymLinks := TFileSourceOperationOptionSymLink(GetValue(SubNode, 'Symlink', Integer(gOperationOptionSymLinks))); gOperationOptionCorrectLinks := GetValue(SubNode, 'CorrectLinks', gOperationOptionCorrectLinks); gOperationOptionFileExists := TFileSourceOperationOptionFileExists(GetValue(SubNode, 'FileExists', Integer(gOperationOptionFileExists))); gOperationOptionDirectoryExists := TFileSourceOperationOptionDirectoryExists(GetValue(SubNode, 'DirectoryExists', Integer(gOperationOptionDirectoryExists))); gOperationOptionSetPropertyError := TFileSourceOperationOptionSetPropertyError(GetValue(SubNode, 'SetPropertyError', Integer(gOperationOptionSetPropertyError))); gOperationOptionReserveSpace := GetValue(SubNode, 'ReserveSpace', gOperationOptionReserveSpace); gOperationOptionCheckFreeSpace := GetValue(SubNode, 'CheckFreeSpace', gOperationOptionCheckFreeSpace); gOperationOptionCopyAttributes := GetValue(SubNode, 'CopyAttributes', gOperationOptionCopyAttributes); gOperationOptionCopyTime := GetValue(SubNode, 'CopyTime', gOperationOptionCopyTime); gOperationOptionCopyOwnership := GetValue(SubNode, 'CopyOwnership', gOperationOptionCopyOwnership); gOperationOptionCopyPermissions := GetValue(SubNode, 'CopyPermissions', gOperationOptionCopyPermissions); end; end; { Tabs page } Node := Root.FindNode('Tabs'); if Assigned(Node) then begin // Loading tabs relating option respecting legacy order of options setting and wanted default values. // The default action on double click is to close tab simply to respect legacy of what it was doing hardcoded before. gDirTabOptions := TTabsOptions(GetValue(Node, 'Options', Integer(gDirTabOptions))); if LoadedConfigVersion<9 then begin gDirTabOptions := gDirTabOptions + [tb_close_on_doubleclick , tb_reusing_tab_when_possible, tb_confirm_close_locked_tab]; //The "tb_close_on_doubleclick" is useless but anyway... :-) gDirTabActionOnDoubleClick:=tadc_CloseTab; end; gDirTabLimit := GetValue(Node, 'CharacterLimit', gDirTabLimit); gDirTabPosition := TTabsPosition(GetValue(Node, 'Position', Integer(gDirTabPosition))); gDirTabActionOnDoubleClick := TTabsOptionsDoubleClick(GetValue(Node, 'ActionOnDoubleClick', Integer(tadc_CloseTab))); end; { Log page } Node := Root.FindNode('Log'); if Assigned(Node) then begin gLogFile := GetAttr(Node, 'Enabled', gLogFile); gLogFileWithDateInName := GetAttr(Node, 'LogFileWithDateInName', gLogFileWithDateInName); gLogFileName := GetValue(Node, 'FileName', gLogFileName); gLogOptions := TLogOptions(GetValue(Node, 'Options', Integer(gLogOptions))); end; { Configuration page } gSaveConfiguration := GetAttr(Root, 'Configuration/Save', gSaveConfiguration); gSaveSearchReplaceHistory:= GetAttr(Root, 'History/SearchReplaceHistory/Save', gSaveSearchReplaceHistory); gSaveDirHistory := GetAttr(Root, 'History/DirHistory/Save', gSaveDirHistory); gSaveCmdLineHistory := GetAttr(Root, 'History/CmdLineHistory/Save', gSaveCmdLineHistory); gSaveFileMaskHistory := GetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(GetAttr(Root, 'Configuration/SortOrder', Integer(scoClassicLegacy))); { Quick Search/Filter page } Node := Root.FindNode('QuickSearch'); if Assigned(Node) then begin if LoadedConfigVersion < 4 then begin oldQuickSearch := GetAttr(Node, 'Enabled', oldQuickSearch); oldQuickSearchMode := TShiftState(GetValue(Node, 'Mode', Integer(oldQuickSearchMode))); OldKeysToNew(oldQuickSearch, oldQuickSearchMode, ktaQuickSearch); end; if GetValue(Node, 'MatchBeginning', qsmBeginning in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmBeginning) else Exclude(gQuickSearchOptions.Match, qsmBeginning); if GetValue(Node, 'MatchEnding', qsmEnding in gQuickSearchOptions.Match) then Include(gQuickSearchOptions.Match, qsmEnding) else Exclude(gQuickSearchOptions.Match, qsmEnding); gQuickSearchOptions.SearchCase := TQuickSearchCase(GetValue(Node, 'Case', Integer(gQuickSearchOptions.SearchCase))); gQuickSearchOptions.Items := TQuickSearchItems(GetValue(Node, 'Items', Integer(gQuickSearchOptions.Items))); end; Node := Root.FindNode('QuickFilter'); if Assigned(Node) then begin if LoadedConfigVersion < 4 then begin oldQuickFilter := GetAttr(Node, 'Enabled', oldQuickFilter); oldQuickFilterMode := TShiftState(GetValue(Node, 'Mode', Integer(oldQuickFilterMode))); OldKeysToNew(oldQuickFilter, oldQuickFilterMode, ktaQuickFilter); end; gQuickFilterAutoHide := GetValue(Node, 'AutoHide', gQuickFilterAutoHide); gQuickFilterSaveSessionModifications := GetValue(Node, 'SaveSessionModifications', gQuickFilterSaveSessionModifications); end; { Miscellaneous page } Node := Root.FindNode('Miscellaneous'); if Assigned(Node) then begin gGridVertLine := GetValue(Node, 'GridVertLine', gGridVertLine); gGridHorzLine := GetValue(Node, 'GridHorzLine', gGridHorzLine); gShowWarningMessages := GetValue(Node, 'ShowWarningMessages', gShowWarningMessages); gSpaceMovesDown := GetValue(Node, 'SpaceMovesDown', gSpaceMovesDown); gDirBrackets := GetValue(Node, 'DirBrackets', gDirBrackets); gInplaceRename := GetValue(Node, 'InplaceRename', gInplaceRename); gHotDirAddTargetOrNot:=GetValue(Node, 'HotDirAddTargetOrNot', gHotDirAddTargetOrNot); gHotDirFullExpandOrNot:=GetValue(Node, 'HotDirFullExpandOrNot', gHotDirFullExpandOrNot); gShowPathInPopup:=GetValue(Node, 'ShowPathInPopup', gShowPathInPopup); gShowOnlyValidEnv:=GetValue(Node, 'ShowOnlyValidEnv', gShowOnlyValidEnv); gWhereToAddNewHotDir:=TPositionWhereToAddHotDir(GetValue(Node, 'WhereToAddNewHotDir', Integer(gWhereToAddNewHotDir))); end; { Thumbnails } Node := Root.FindNode('Thumbnails'); if Assigned(Node) then begin gThumbSave := GetAttr(Node, 'Save', gThumbSave); gThumbSize.cx := GetValue(Node, 'Width', gThumbSize.cx); gThumbSize.cy := GetValue(Node, 'Height', gThumbSize.cy); end; { Auto refresh page } Node := Root.FindNode('AutoRefresh'); if Assigned(Node) then begin gWatchDirs := TWatchOptions(GetValue(Node, 'Options', Integer(gWatchDirs))); gWatchDirsExclude := GetValue(Node, 'ExcludeDirs', gWatchDirsExclude); gWatcherMode := TWatcherMode(GetValue(Node, 'Mode', Integer(gWatcherMode))); end; { Icons page } Node := Root.FindNode('Icons'); if Assigned(Node) then begin gShowIcons := TShowIconsMode(GetValue(Node, 'ShowMode', Integer(gShowIcons))); gIconOverlays := GetValue(Node, 'ShowOverlays', gIconOverlays); gIconsSize := GetValue(Node, 'Size', gIconsSize); gIconsExclude := GetValue(Node, 'Exclude', gIconsExclude); gIconsExcludeDirs := GetValue(Node, 'ExcludeDirs', gIconsExcludeDirs); gCustomDriveIcons := GetValue(Node, 'CustomDriveIcons', gCustomDriveIcons); gIconsInMenus := GetAttr(Node, 'ShowInMenus/Enabled', gIconsInMenus); gIconsInMenusSize := GetValue(Node, 'ShowInMenus/Size', gIconsInMenusSize); end; { Ignore list page } Node := Root.FindNode('IgnoreList'); if Assigned(Node) then begin gIgnoreListFileEnabled:= GetAttr(Node, 'Enabled', gIgnoreListFileEnabled); gIgnoreListFile:= GetValue(Node, 'IgnoreListFile', gIgnoreListFile); end; { Directories HotList } gDirectoryHotlist.LoadFromXML(gConfig, Root); { Viewer } Node := Root.FindNode('Viewer'); if Assigned(Node) then begin gImageStretch := GetValue(Node, 'ImageStretch', gImageStretch); gImageStretchOnlyLarge := GetValue(Node, 'ImageStretchLargeOnly', gImageStretchOnlyLarge); gImageCenter := GetValue(Node, 'ImageCenter', gImageCenter); gPreviewVisible := GetValue(Node, 'PreviewVisible', gPreviewVisible); gCopyMovePath1 := GetValue(Node, 'CopyMovePath1', gCopyMovePath1); gCopyMovePath2 := GetValue(Node, 'CopyMovePath2', gCopyMovePath2); gCopyMovePath3 := GetValue(Node, 'CopyMovePath3', gCopyMovePath3); gCopyMovePath4 := GetValue(Node, 'CopyMovePath4', gCopyMovePath4); gCopyMovePath5 := GetValue(Node, 'CopyMovePath5', gCopyMovePath5); gImagePaintMode := GetValue(Node, 'PaintMode', gImagePaintMode); gImagePaintWidth := GetValue(Node, 'PaintWidth', gImagePaintWidth); gColCount := GetValue(Node, 'NumberOfColumns', gColCount); gViewerMode := GetValue(Node, 'ViewerMode', gViewerMode); gImagePaintColor := GetValue(Node, 'PaintColor', gImagePaintColor); gBookBackgroundColor := GetValue(Node, 'BackgroundColor', gBookBackgroundColor); gBookFontColor := GetValue(Node, 'FontColor', gBookFontColor); gTextPosition := GetValue(Node, 'TextPosition', gTextPosition); if LoadedConfigVersion < 7 then begin gThumbSave := GetValue(Node, 'SaveThumbnails', gThumbSave); end; end; { Editor } Node := Root.FindNode('Editor'); if Assigned(Node) then begin gEditorSynEditOptions := TSynEditorOptions(GetValue(Node, 'SynEditOptions', Integer(gEditorSynEditOptions))); end; { SyncDirs } Node := Root.FindNode('SyncDirs'); if Assigned(Node) then begin gSyncDirsSubdirs := GetValue(Node, 'Subdirs', gSyncDirsSubdirs); gSyncDirsByContent := GetValue(Node, 'ByContent', gSyncDirsByContent); gSyncDirsIgnoreDate := GetValue(Node, 'IgnoreDate', gSyncDirsIgnoreDate); gSyncDirsShowFilterCopyRight := GetValue(Node, 'FilterCopyRight', gSyncDirsShowFilterCopyRight); gSyncDirsShowFilterEqual := GetValue(Node, 'FilterEqual', gSyncDirsShowFilterEqual); gSyncDirsShowFilterNotEqual := GetValue(Node, 'FilterNotEqual', gSyncDirsShowFilterNotEqual); gSyncDirsShowFilterCopyLeft := GetValue(Node, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); gSyncDirsShowFilterDuplicates := GetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); gSyncDirsShowFilterSingles := GetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); gSyncDirsFileMask := GetValue(Node, 'FileMask', gSyncDirsFileMask); end; { Internal Associations} Node := Root.FindNode('InternalAssociations'); if Assigned(Node) then begin gOfferToAddToFileAssociations := GetValue(Node, 'OfferToAddNewFileType', gOfferToAddToFileAssociations); gFileAssociationLastCustomAction := GetValue(Node, 'LastCustomAction', gFileAssociationLastCustomAction); gExtendedContextMenu := GetValue(Node, 'ExpandedContextMenu', gExtendedContextMenu); gOpenExecuteViaShell := GetValue(Node,'ExecuteViaShell', gOpenExecuteViaShell); gExecuteViaTerminalClose := GetValue(Node,'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); gExecuteViaTerminalStayOpen := GetValue(Node,'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); gIncludeFileAssociation := GetValue(Node,'IncludeFileAssociation',gIncludeFileAssociation); end; { Favorite Tabs } Node := Root.FindNode('FavoriteTabsOptions'); if Assigned(Node) then begin gFavoriteTabsUseRestoreExtraOptions := GetValue(Node, 'FavoriteTabsUseRestoreExtraOptions', gFavoriteTabsUseRestoreExtraOptions); gWhereToAddNewFavoriteTabs := TPositionWhereToAddFavoriteTabs(GetValue(Node, 'WhereToAdd', Integer(gWhereToAddNewFavoriteTabs))); gFavoriteTabsFullExpandOrNot := GetValue(Node, 'Expand', gFavoriteTabsFullExpandOrNot); gFavoriteTabsGoToConfigAfterSave := GetValue(Node, 'GotoConfigAftSav', gFavoriteTabsGoToConfigAfterSave); gFavoriteTabsGoToConfigAfterReSave := GetValue(Node, 'GotoConfigAftReSav', gFavoriteTabsGoToConfigAfterReSave); gDefaultTargetPanelLeftSaved := TTabsConfigLocation(GetValue(Node, 'DfltLeftGoTo', Integer(gDefaultTargetPanelLeftSaved))); gDefaultTargetPanelRightSaved := TTabsConfigLocation(GetValue(Node, 'DfltRightGoTo', Integer(gDefaultTargetPanelRightSaved))); gDefaultExistingTabsToKeep := TTabsConfigLocation(GetValue(Node, 'DfltKeep', Integer(gDefaultExistingTabsToKeep))); gFavoriteTabsSaveDirHistory := GetValue(Node, 'DfltSaveDirHistory', gFavoriteTabsSaveDirHistory); gFavoriteTabsList.LastFavoriteTabsLoadedUniqueId := StringToGUID(GetValue(Node,'FavTabsLastUniqueID',GUIDtoString(GetNewUniqueID))); end; { - Other - } gLuaLib := GetValue(Root, 'Lua/PathToLibrary', gLuaLib); gNameSCFile:= GetValue(Root, 'NameShortcutFile', gNameSCFile); gLastUsedPacker:= GetValue(Root, 'LastUsedPacker', gLastUsedPacker); gUseShellForFileOperations:= GetValue(Root, 'UseShellForFileOperations', gUseShellForFileOperations); gLastDoAnyCommand:=GetValue(Root, 'LastDoAnyCommand', gLastDoAnyCommand); { TotalCommander Import/Export } {$IFDEF MSWINDOWS} Node := Root.FindNode('TCSection'); if Assigned(Node) then begin gTotalCommanderExecutableFilename := GetValue(Node, 'TCExecutableFilename', gTotalCommanderExecutableFilename); gTotalCommanderConfigFilename := GetValue(Node, 'TCConfigFilename', gTotalCommanderConfigFilename); gTotalCommanderToolbarPath:=GetValue(Node,'TCToolbarPath',gTotalCommanderToolbarPath); end; {$ENDIF} end; { Search template list } gSearchTemplateList.LoadFromXml(gConfig, Root); { Columns sets } ColSet.Load(gConfig, Root); { Plugins } Node := gConfig.FindNode(Root, 'Plugins'); if Assigned(Node) then begin gDSXPlugins.Load(gConfig, Node); gWCXPlugins.Load(gConfig, Node); gWDXPlugins.Load(gConfig, Node); gWFXPlugins.Load(gConfig, Node); gWLXPlugins.Load(gConfig, Node); end; end; procedure SaveXmlConfig; procedure SetExtTool(Node: TXmlNode; const ExternalToolOptions: TExternalToolOptions); begin if Assigned(Node) then with ExternalToolOptions do begin gConfig.SetAttr(Node, 'Enabled', Enabled); gConfig.SetValue(Node, 'Path', Path); gConfig.SetValue(Node, 'Parameters', Parameters); gConfig.SetValue(Node, 'RunInTerminal', RunInTerminal); gConfig.SetValue(Node, 'KeepTerminalOpen', KeepTerminalOpen); end; end; procedure SetDCFont(Node: TXmlNode; const FontOptions: TDCFontOptions); begin if Assigned(Node) then gConfig.SetFont(Node, '', FontOptions.Name, FontOptions.Size, Integer(FontOptions.Style), Integer(FontOptions.Quality)); end; var Root, Node, SubNode: TXmlNode; KeyTypingModifier: TKeyTypingModifier; begin with gConfig do begin Root := gConfig.RootNode; SetAttr(Root, 'DCVersion', dcVersion); SetAttr(Root, 'ConfigVersion', ConfigVersion); SetValue(Root, 'Configuration/UseConfigInProgramDir', gUseConfigInProgramDirNew); { Language page } SetValue(Root, 'Language/POFileName', gPOFileName); { Behaviours page } Node := FindNode(Root, 'Behaviours', True); ClearNode(Node); SetValue(Node, 'GoToRoot', gGoToRoot); SetValue(Node, 'RunInTerminalStayOpenCmd', gRunInTermStayOpenCmd); SetValue(Node, 'RunInTerminalStayOpenParams', gRunInTermStayOpenParams); SetValue(Node, 'RunInTerminalCloseCmd', gRunInTermCloseCmd); SetValue(Node, 'RunInTerminalCloseParams', gRunInTermCloseParams); SetValue(Node, 'JustRunTerminal', gRunTermCmd); SetValue(Node, 'JustRunTermParams', gRunTermParams); SetValue(Node, 'OnlyOneAppInstance', gOnlyOneAppInstance); SetValue(Node, 'LynxLike', gLynxLike); SetValue(Node, 'FileSizeFormat', Ord(gFileSizeFormat)); SetValue(Node, 'MinimizeToTray', gMinimizeToTray); SetValue(Node, 'AlwaysShowTrayIcon', gAlwaysShowTrayIcon); SubNode := FindNode(Node, 'Mouse', True); SetAttr(SubNode, 'Selection/Enabled', gMouseSelectionEnabled); SetValue(SubNode, 'Selection/Button', gMouseSelectionButton); SetValue(SubNode, 'ScrollMode', Integer(gScrollMode)); SetValue(SubNode, 'WheelScrollLines', gWheelScrollLines); SetValue(Node, 'AutoFillColumns', gAutoFillColumns); SetValue(Node, 'AutoSizeColumn', gAutoSizeColumn); SetValue(Node, 'CustomColumnsChangeAllColumns', gCustomColumnsChangeAllColumns); SetValue(Node, 'BriefViewFileExtAligned', gBriefViewFileExtAligned); SetValue(Node, 'DateTimeFormat', gDateTimeFormat); SetValue(Node, 'CutTextToColumnWidth', gCutTextToColWidth); SetValue(Node, 'ShowSystemFiles', gShowSystemFiles); {$IFNDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon SetValue(Node, 'ListFilesInThread', gListFilesInThread); {$ENDIF} SetValue(Node, 'LoadIconsSeparately', gLoadIconsSeparately); SetValue(Node, 'DelayLoadingTabs', gDelayLoadingTabs); SetValue(Node, 'HighlightUpdatedFiles', gHighlightUpdatedFiles); SetValue(Node, 'DriveBlackList', gDriveBlackList); SetValue(Node, 'DriveBlackListUnmounted', gDriveBlackListUnmounted); { Tools page } SetExtTool(gConfig.FindNode(Root, 'Tools/Viewer', True), gExternalTools[etViewer]); SetExtTool(gConfig.FindNode(Root, 'Tools/Editor', True), gExternalTools[etEditor]); SetExtTool(gConfig.FindNode(Root, 'Tools/Differ', True), gExternalTools[etDiffer]); { Differ related} Node := Root.FindNode('Tools'); SubNode := FindNode(Node, 'Differ', TRUE); SetValue(SubNode, 'FramePosAfterComp', Integer(gResultingFramePositionAfterCompare)); { Fonts page } SetDCFont(gConfig.FindNode(Root, 'Fonts/Main', True), gFonts[dcfMain]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Editor', True), gFonts[dcfEditor]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Viewer', True), gFonts[dcfViewer]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Log', True), gFonts[dcfLog]); SetDCFont(gConfig.FindNode(Root, 'Fonts/ViewerBook', True), gFonts[dcfViewerBook]); SetDCFont(gConfig.FindNode(Root, 'Fonts/Console', True), gFonts[dcfConsole]); { Colors page } Node := FindNode(Root, 'Colors', True); SetValue(Node, 'UseCursorBorder', gUseCursorBorder); SetValue(Node, 'CursorBorderColor', gCursorBorderColor); SetValue(Node, 'UseFrameCursor', gUseFrameCursor); SetValue(Node, 'Foreground', gForeColor); SetValue(Node, 'Background', gBackColor); SetValue(Node, 'Background2', gBackColor2); SetValue(Node, 'Cursor', gCursorColor); SetValue(Node, 'CursorText', gCursorText); SetValue(Node, 'Mark', gMarkColor); SetValue(Node, 'InactiveCursor', gInactiveCursorColor); SetValue(Node, 'InactiveMark', gInactiveMarkColor); SetValue(Node, 'UseInvertedSelection', gUseInvertedSelection); SetValue(Node, 'UseInactiveSelColor', gUseInactiveSelColor); SetValue(Node, 'AllowOverColor', gAllowOverColor); SetValue(Node, 'InactivePanelBrightness', gInactivePanelBrightness); SetValue(Node, 'FreeSpaceIndicator/UseGradient', gIndUseGradient); SetValue(Node, 'FreeSpaceIndicator/ForeColor', gIndForeColor); SetValue(Node, 'FreeSpaceIndicator/BackColor', gIndBackColor); gColorExt.Save(gConfig, Node); { ToolTips page } Node := FindNode(Root, 'ToolTips', True); SetValue(Node, 'ShowToolTipMode', gShowToolTipMode); gFileInfoToolTip.Save(gConfig, Node); { Layout page } Node := FindNode(Root, 'Layout', True); ClearNode(Node); SetValue(Node, 'MainMenu', gMainMenu); SubNode := FindNode(Node, 'ButtonBar', True); SetAttr(SubNode, 'Enabled', gButtonBar); SetValue(SubNode, 'FlatIcons', gToolBarFlat); SetValue(SubNode, 'ButtonHeight', gToolBarButtonSize); SetValue(SubNode, 'IconSize', gToolBarIconSize); SetValue(SubNode, 'ReportErrorWithCommands', gToolbarReportErrorWithCommands); SetValue(Node, 'DriveBar1', gDriveBar1); SetValue(Node, 'DriveBar2', gDriveBar2); SetValue(Node, 'DriveBarFlat', gDriveBarFlat); SubNode := FindNode(Node, 'DrivesListButton', True); SetAttr(SubNode, 'Enabled', gDrivesListButton); SetValue(SubNode, 'ShowLabel', dlbShowLabel in gDrivesListButtonOptions); SetValue(SubNode, 'ShowFileSystem', dlbShowFileSystem in gDrivesListButtonOptions); SetValue(SubNode, 'ShowFreeSpace', dlbShowFreeSpace in gDrivesListButtonOptions); SetValue(Node, 'SeparateTree', gSeparateTree); SetValue(Node, 'DirectoryTabs', gDirectoryTabs); SetValue(Node, 'CurrentDirectory', gCurDir); SetValue(Node, 'TabHeader', gTabHeader); SetValue(Node, 'StatusBar', gStatusBar); SetValue(Node, 'CmdLine', gCmdLine); SetValue(Node, 'LogWindow', gLogWindow); SetValue(Node, 'TermWindow', gTermWindow); SetValue(Node, 'KeyButtons', gKeyButtons); SetValue(Node, 'InterfaceFlat', gInterfaceFlat); SetValue(Node, 'DriveFreeSpace', gDriveFreeSpace); SetValue(Node, 'DriveIndicator', gDriveInd); SetValue(Node, 'ProgressInMenuBar', gProgInMenuBar); SetValue(Node, 'PanelOfOperationsInBackground', gPanelOfOp); SetValue(Node, 'HorizontalFilePanels', gHorizontalFilePanels); SetValue(Node, 'ShortFormatDriveInfo', gShortFormatDriveInfo); { Files views } Node := FindNode(Root, 'FilesViews', True); SubNode := FindNode(Node, 'Sorting', True); SetValue(SubNode, 'CaseSensitivity', Integer(gSortCaseSensitivity)); SetValue(SubNode, 'NaturalSorting', gSortNatural); SetValue(SubNode, 'SortFolderMode', Integer(gSortFolderMode)); SetValue(SubNode, 'NewFilesPosition', Integer(gNewFilesPosition)); SetValue(SubNode, 'UpdatedFilesPosition', Integer(gUpdatedFilesPosition)); SubNode := FindNode(Node, 'ColumnsView', True); SetValue(SubNode, 'AutoSaveWidth', gColumnsAutoSaveWidth); SetValue(SubNode, 'TitleStyle', Integer(gColumnsTitleStyle)); SubNode := FindNode(Node, 'BriefView', True); SetValue(SubNode, 'FileExtAligned', gBriefViewFileExtAligned); SubNode := FindNode(SubNode, 'Columns', True); SetValue(SubNode, 'FixedWidth', gBriefViewFixedWidth); SetValue(SubNode, 'FixedCount', gBriefViewFixedCount); SetValue(SubNode, 'AutoSize', Integer(gBriefViewMode)); { Keys page } Node := FindNode(Root, 'Keyboard', True); SubNode := FindNode(Node, 'Typing/Actions', True); for KeyTypingModifier in TKeyTypingModifier do SetValue(SubNode, TKeyTypingModifierToNodeName[KeyTypingModifier], Integer(gKeyTyping[KeyTypingModifier])); { File operations page } Node := FindNode(Root, 'FileOperations', True); SetValue(Node, 'BufferSize', gCopyBlockSize); SetValue(Node, 'HashBufferSize', gHashBlockSize); SetValue(Node, 'UseMmapInSearch', gUseMmapInSearch); SetValue(Node, 'PartialNameSearch', gPartialNameSearch); SetValue(Node, 'WipePassNumber', gWipePassNumber); SetValue(Node, 'DropReadOnlyFlag', gDropReadOnlyFlag); SetValue(Node, 'ProcessComments', gProcessComments); SetValue(Node, 'RenameSelOnlyName', gRenameSelOnlyName); SetValue(Node, 'ShowCopyTabSelectPanel', gShowCopyTabSelectPanel); SetValue(Node, 'UseTrash', gUseTrash); SetValue(Node, 'SkipFileOpError', gSkipFileOpError); SetValue(Node, 'TypeOfDuplicatedRename', Integer(gTypeOfDuplicatedRename)); SetValue(Node, 'ShowDialogOnDragDrop', gShowDialogOnDragDrop); SetValue(Node, 'DragAndDropTextRichtextDesireLevel', gDragAndDropDesiredTextFormat[DropTextRichText_Index].DesireLevel); SetValue(Node, 'DragAndDropTextHtmlDesireLevel',gDragAndDropDesiredTextFormat[DropTextHtml_Index].DesireLevel); SetValue(Node, 'DragAndDropTextUnicodeDesireLevel',gDragAndDropDesiredTextFormat[DropTextUnicode_Index].DesireLevel); SetValue(Node, 'DragAndDropTextSimpletextDesireLevel',gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].DesireLevel); SetValue(Node, 'DragAndDropAskFormatEachTime', gDragAndDropAskFormatEachTime); SetValue(Node, 'DragAndDropTextAutoFilename', gDragAndDropTextAutoFilename); SetValue(Node, 'DragAndDropSaveUnicodeTextInUFT8', gDragAndDropSaveUnicodeTextInUFT8); SetValue(Node, 'OverwriteFolder', gOverwriteFolder); SetValue(Node, 'NtfsHourTimeDelay', gNtfsHourTimeDelay); SetValue(Node, 'SearchDefaultTemplate', gSearchDefaultTemplate); SetValue(Node, 'ProgressKind', Integer(gFileOperationsProgressKind)); SetValue(Node, 'Confirmations', Integer(gFileOperationsConfirmations)); // Operations options SubNode := FindNode(Node, 'Options', True); SetValue(SubNode, 'Symlink', Integer(gOperationOptionSymLinks)); SetValue(SubNode, 'CorrectLinks', gOperationOptionCorrectLinks); SetValue(SubNode, 'FileExists', Integer(gOperationOptionFileExists)); SetValue(SubNode, 'DirectoryExists', Integer(gOperationOptionDirectoryExists)); SetValue(SubNode, 'SetPropertyError', Integer(gOperationOptionSetPropertyError)); SetValue(SubNode, 'ReserveSpace', gOperationOptionReserveSpace); SetValue(SubNode, 'CheckFreeSpace', gOperationOptionCheckFreeSpace); SetValue(SubNode, 'CopyAttributes', gOperationOptionCopyAttributes); SetValue(SubNode, 'CopyTime', gOperationOptionCopyTime); SetValue(SubNode, 'CopyOwnership', gOperationOptionCopyOwnership); SetValue(SubNode, 'CopyPermissions', gOperationOptionCopyPermissions); { Tabs page } Node := FindNode(Root, 'Tabs', True); SetValue(Node, 'Options', Integer(gDirTabOptions)); SetValue(Node, 'CharacterLimit', gDirTabLimit); SetValue(Node, 'Position', Integer(gDirTabPosition)); SetValue(Node, 'ActionOnDoubleClick',Integer(gDirTabActionOnDoubleClick)); { Log page } Node := FindNode(Root, 'Log', True); SetAttr(Node, 'Enabled', gLogFile); SetAttr(Node, 'LogFileWithDateInName', gLogFileWithDateInName); SetValue(Node, 'FileName', gLogFileName); SetValue(Node, 'Options', Integer(gLogOptions)); { Configuration page } SetAttr(Root, 'Configuration/Save', gSaveConfiguration); SetAttr(Root, 'History/SearchReplaceHistory/Save', gSaveSearchReplaceHistory); SetAttr(Root, 'History/DirHistory/Save', gSaveDirHistory); SetAttr(Root, 'History/CmdLineHistory/Save', gSaveCmdLineHistory); SetAttr(Root, 'History/FileMaskHistory/Save', gSaveFileMaskHistory); SetAttr(Root, 'Configuration/SortOrder', Integer(gSortOrderOfConfigurationOptionsTree)); { Quick Search/Filter page } Node := FindNode(Root, 'QuickSearch', True); SetValue(Node, 'MatchBeginning', qsmBeginning in gQuickSearchOptions.Match); SetValue(Node, 'MatchEnding', qsmEnding in gQuickSearchOptions.Match); SetValue(Node, 'Case', Integer(gQuickSearchOptions.SearchCase)); SetValue(Node, 'Items', Integer(gQuickSearchOptions.Items)); Node := FindNode(Root, 'QuickFilter', True); SetValue(Node, 'AutoHide', gQuickFilterAutoHide); SetValue(Node, 'SaveSessionModifications', gQuickFilterSaveSessionModifications); { Misc page } Node := FindNode(Root, 'Miscellaneous', True); SetValue(Node, 'GridVertLine', gGridVertLine); SetValue(Node, 'GridHorzLine', gGridHorzLine); SetValue(Node, 'ShowWarningMessages', gShowWarningMessages); SetValue(Node, 'SpaceMovesDown', gSpaceMovesDown); SetValue(Node, 'DirBrackets', gDirBrackets); SetValue(Node, 'InplaceRename', gInplaceRename); SetValue(Node, 'HotDirAddTargetOrNot',gHotDirAddTargetOrNot); SetValue(Node, 'HotDirFullExpandOrNot', gHotDirFullExpandOrNot); SetValue(Node, 'ShowPathInPopup', gShowPathInPopup); SetValue(Node, 'ShowOnlyValidEnv', gShowOnlyValidEnv); SetValue(Node, 'WhereToAddNewHotDir', Integer(gWhereToAddNewHotDir)); { Thumbnails } Node := FindNode(Root, 'Thumbnails', True); SetAttr(Node, 'Save', gThumbSave); SetValue(Node, 'Width', gThumbSize.cx); SetValue(Node, 'Height', gThumbSize.cy); { Auto refresh page } Node := FindNode(Root, 'AutoRefresh', True); SetValue(Node, 'Options', Integer(gWatchDirs)); SetValue(Node, 'ExcludeDirs', gWatchDirsExclude); SetValue(Node, 'Mode', Integer(gWatcherMode)); { Icons page } Node := FindNode(Root, 'Icons', True); SetValue(Node, 'ShowMode', Integer(gShowIconsNew)); SetValue(Node, 'ShowOverlays', gIconOverlays); SetValue(Node, 'Size', gIconsSizeNew); SetValue(Node, 'Exclude', gIconsExclude); SetValue(Node, 'ExcludeDirs', gIconsExcludeDirs); SetValue(Node, 'CustomDriveIcons', gCustomDriveIcons); SetAttr(Node, 'ShowInMenus/Enabled', gIconsInMenus); SetValue(Node, 'ShowInMenus/Size', gIconsInMenusSizeNew); { Ignore list page } Node := FindNode(Root, 'IgnoreList', True); SetAttr(Node, 'Enabled', gIgnoreListFileEnabled); SetValue(Node, 'IgnoreListFile', gIgnoreListFile); { Directories HotList } gDirectoryHotlist.SaveToXml(gConfig, Root, TRUE); { Viewer } Node := FindNode(Root, 'Viewer',True); SetValue(Node, 'PreviewVisible',gPreviewVisible); SetValue(Node, 'ImageStretch',gImageStretch); SetValue(Node, 'ImageStretchLargeOnly',gImageStretchOnlyLarge); SetValue(Node, 'ImageCenter',gImageCenter); SetValue(Node, 'CopyMovePath1', gCopyMovePath1); SetValue(Node, 'CopyMovePath2', gCopyMovePath2); SetValue(Node, 'CopyMovePath3', gCopyMovePath3); SetValue(Node, 'CopyMovePath4', gCopyMovePath4); SetValue(Node, 'CopyMovePath5', gCopyMovePath5); SetValue(Node, 'PaintMode', gImagePaintMode); SetValue(Node, 'PaintWidth', gImagePaintWidth); SetValue(Node, 'NumberOfColumns', gColCount); SetValue(Node, 'ViewerMode', gViewerMode); SetValue(Node, 'PaintColor', gImagePaintColor); SetValue(Node, 'BackgroundColor', gBookBackgroundColor); SetValue(Node, 'FontColor', gBookFontColor); SetValue(Node, 'TextPosition', gTextPosition); { Editor } Node := FindNode(Root, 'Editor',True); SetValue(Node, 'SynEditOptions', Integer(gEditorSynEditOptions)); { SyncDirs } Node := FindNode(Root, 'SyncDirs', True); SetValue(Node, 'Subdirs', gSyncDirsSubdirs); SetValue(Node, 'ByContent', gSyncDirsByContent); SetValue(Node, 'IgnoreDate', gSyncDirsIgnoreDate); SetValue(Node, 'FilterCopyRight', gSyncDirsShowFilterCopyRight); SetValue(Node, 'FilterEqual', gSyncDirsShowFilterEqual); SetValue(Node, 'FilterNotEqual', gSyncDirsShowFilterNotEqual); SetValue(Node, 'FilterCopyLeft', gSyncDirsShowFilterCopyLeft); SetValue(Node, 'FilterDuplicates', gSyncDirsShowFilterDuplicates); SetValue(Node, 'FilterSingles', gSyncDirsShowFilterSingles); SetValue(Node, 'FileMask', gSyncDirsFileMask); { Internal Associations} Node := FindNode(Root, 'InternalAssociations', True); SetValue(Node, 'OfferToAddNewFileType', gOfferToAddToFileAssociations); SetValue(Node, 'LastCustomAction', gFileAssociationLastCustomAction); SetValue(Node, 'ExpandedContextMenu', gExtendedContextMenu); SetValue(Node, 'ExecuteViaShell', gOpenExecuteViaShell); SetValue(Node, 'OpenSystemWithTerminalClose', gExecuteViaTerminalClose); SetValue(Node, 'OpenSystemWithTerminalStayOpen', gExecuteViaTerminalStayOpen); SetValue(Node, 'IncludeFileAssociation', gIncludeFileAssociation); { Favorite Tabs } Node := FindNode(Root, 'FavoriteTabsOptions', True); SetValue(Node, 'FavoriteTabsUseRestoreExtraOptions', gFavoriteTabsUseRestoreExtraOptions); SetValue(Node, 'WhereToAdd', Integer(gWhereToAddNewFavoriteTabs)); SetValue(Node, 'Expand', gFavoriteTabsFullExpandOrNot); SetValue(Node, 'GotoConfigAftSav', gFavoriteTabsGoToConfigAfterSave); SetValue(Node, 'GotoConfigAftReSav', gFavoriteTabsGoToConfigAfterReSave); SetValue(Node, 'DfltLeftGoTo', Integer(gDefaultTargetPanelLeftSaved)); SetValue(Node, 'DfltRightGoTo', Integer(gDefaultTargetPanelRightSaved)); SetValue(Node, 'DfltKeep', Integer(gDefaultExistingTabsToKeep)); SetValue(Node, 'DfltSaveDirHistory', gFavoriteTabsSaveDirHistory); SetValue(Node, 'FavTabsLastUniqueID',GUIDtoString(gFavoriteTabsList.LastFavoriteTabsLoadedUniqueId)); { - Other - } SetValue(Root, 'Lua/PathToLibrary', gLuaLib); SetValue(Root, 'NameShortcutFile', gNameSCFile); SetValue(Root, 'LastUsedPacker', gLastUsedPacker); SetValue(Root, 'UseShellForFileOperations', gUseShellForFileOperations); SetValue(Root, 'LastDoAnyCommand', gLastDoAnyCommand); {$IFDEF MSWINDOWS} { TotalCommander Import/Export } //We'll save the last TC executable filename AND TC configuration filename ONLY if both has been set if (gTotalCommanderExecutableFilename<>'') AND (gTotalCommanderConfigFilename<>'') then begin Node := FindNode(Root, 'TCSection', True); if Assigned(Node) then begin SetValue(Node, 'TCExecutableFilename', gTotalCommanderExecutableFilename); SetValue(Node, 'TCConfigFilename', gTotalCommanderConfigFilename); SetValue(Node,'TCToolbarPath',gTotalCommanderToolbarPath); end; end; {$ENDIF} end; { Search template list } gSearchTemplateList.SaveToXml(gConfig, Root); { Columns sets } ColSet.Save(gConfig, Root); { Plugins } Node := gConfig.FindNode(Root, 'Plugins', True); gDSXPlugins.Save(gConfig, Node); gWCXPlugins.Save(gConfig, Node); gWDXPlugins.Save(gConfig, Node); gWFXPlugins.Save(gConfig, Node); gWLXPlugins.Save(gConfig, Node); end; function LoadConfig: Boolean; var ErrorMessage: String = ''; begin Result := LoadConfigCheckErrors(@LoadGlobalConfig, gConfig.FileName, ErrorMessage); if not Result then Result := AskUserOnError(ErrorMessage); end; function InitGlobs: Boolean; var InitProc: TProcedure; ErrorMessage: String = ''; begin CreateGlobs; if not OpenConfig(ErrorMessage) then begin if not AskUserOnError(ErrorMessage) then Exit(False); end; SetDefaultNonConfigGlobs; if not LoadGlobs then begin if not AskUserOnError(ErrorMessage) then Exit(False); end; for InitProc in FInitList do InitProc(); Result := AskUserOnError(ErrorMessage); end; function GetKeyTypingAction(ShiftStateEx: TShiftState): TKeyTypingAction; var Modifier: TKeyTypingModifier; begin for Modifier in TKeyTypingModifier do if ShiftStateEx * KeyModifiersShortcutNoText = TKeyTypingModifierToShift[Modifier] then Exit(gKeyTyping[Modifier]); Result := ktaNone; end; function IsFileSystemWatcher: Boolean; begin Result := ([watch_file_name_change, watch_attributes_change] * gWatchDirs <> []); end; initialization finalization DestroyGlobs; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufile.pas�����������������������������������������������������������������������0000644�0001750�0000144�00000062406�12577502642�015137� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileProperty, DCBasicTypes; type { TFile } TFile = class private // Cached values for extension and name. // Automatically set when name changes. FExtension: String; //<en Extension. FNameNoExt: String; //<en Name without extension. FPath: String; //<en Path to the file. Always includes trailing path delimiter. FProperties: TFileProperties; FSupportedProperties: TFilePropertiesTypes; procedure SplitIntoNameAndExtension(const FileName: string; var aFileNameOnly: string; var aExtension: string); procedure UpdateNameAndExtension(const FileName: string); protected function GetProperty(PropType: TFilePropertyType): TFileProperty; procedure SetProperty(PropType: TFilePropertyType; NewValue: TFileProperty); function GetFullPath: String; procedure SetFullPath(const NewFullPath: String); procedure SetPath(const NewPath: String); function GetName: String; procedure SetName(NewName: String); function GetExtension: String; {en Retrieves name without extension. } function GetNameNoExt: String; // Values. function GetAttributes: TFileAttrs; procedure SetAttributes(NewAttributes: TFileAttrs); function GetSize: Int64; procedure SetSize(NewSize: Int64); function GetCompressedSize: Int64; procedure SetCompressedSize(NewCompressedSize: Int64); function GetModificationTime: TDateTime; procedure SetModificationTime(NewTime: TDateTime); function GetCreationTime: TDateTime; procedure SetCreationTime(NewTime: TDateTime); function GetLastAccessTime: TDateTime; procedure SetLastAccessTime(NewTime: TDateTime); function GetIsLinkToDirectory: Boolean; procedure SetIsLinkToDirectory(NewValue: Boolean); function GetType: String; procedure SetType(NewValue: String); // Properties. function GetNameProperty: TFileNameProperty; procedure SetNameProperty(NewValue: TFileNameProperty); function GetSizeProperty: TFileSizeProperty; procedure SetSizeProperty(NewValue: TFileSizeProperty); function GetCompressedSizeProperty: TFileCompressedSizeProperty; procedure SetCompressedSizeProperty(NewValue: TFileCompressedSizeProperty); function GetAttributesProperty: TFileAttributesProperty; procedure SetAttributesProperty(NewValue: TFileAttributesProperty); function GetModificationTimeProperty: TFileModificationDateTimeProperty; procedure SetModificationTimeProperty(NewValue: TFileModificationDateTimeProperty); function GetCreationTimeProperty: TFileCreationDateTimeProperty; procedure SetCreationTimeProperty(NewValue: TFileCreationDateTimeProperty); function GetLastAccessTimeProperty: TFileLastAccessDateTimeProperty; procedure SetLastAccessTimeProperty(NewValue: TFileLastAccessDateTimeProperty); function GetLinkProperty: TFileLinkProperty; procedure SetLinkProperty(NewValue: TFileLinkProperty); function GetOwnerProperty: TFileOwnerProperty; procedure SetOwnerProperty(NewValue: TFileOwnerProperty); function GetTypeProperty: TFileTypeProperty; procedure SetTypeProperty(NewValue: TFileTypeProperty); function GetCommentProperty: TFileCommentProperty; procedure SetCommentProperty(NewValue: TFileCommentProperty); public constructor Create(const APath: String); constructor CreateForCloning; destructor Destroy; override; {en Creates an identical copy of the object (as far as object data is concerned). } function Clone: TFile; procedure CloneTo(AFile: TFile); {en Frees all properties except for Name (which is always required). } procedure ClearProperties; function ReleaseProperty(PropType: TFilePropertyType): TFileProperty; {en Returns True if name is not '..'. May be extended to include other conditions. } function IsNameValid: Boolean; {en This list only contains pointers to TFileProperty objects. Never free element from this list! Choices for implementing retrieval of file properties: 1. array [TFilePropertyType] of TFileProperty (current implementation) Upside: it should be the fastest method. Downside: uses more memory as the array size includes properties not supported by the given file type 2. hash table indexed by TFilePropertyType key. It _may_ be a bit slower than the table. It _may_ use less memory though. 3. a simple list Slowest, but the least memory usage. } //property Properties[Index: Integer]; //property Properties[Name: String]; //property Properties[Type: TFilePropertiesType] property Properties[PropType: TFilePropertyType]: TFileProperty read GetProperty write SetProperty; {en All supported properties should have an assigned Properties[propertyType]. } property SupportedProperties: TFilePropertiesTypes read FSupportedProperties; property AssignedProperties: TFilePropertiesTypes read FSupportedProperties; { Accessors to each property. } property NameProperty: TFileNameProperty read GetNameProperty write SetNameProperty; property SizeProperty: TFileSizeProperty read GetSizeProperty write SetSizeProperty; property CompressedSizeProperty: TFileCompressedSizeProperty read GetCompressedSizeProperty write SetCompressedSizeProperty; property AttributesProperty: TFileAttributesProperty read GetAttributesProperty write SetAttributesProperty; property ModificationTimeProperty: TFileModificationDateTimeProperty read GetModificationTimeProperty write SetModificationTimeProperty; property CreationTimeProperty: TFileCreationDateTimeProperty read GetCreationTimeProperty write SetCreationTimeProperty; property LastAccessTimeProperty: TFileLastAccessDateTimeProperty read GetLastAccessTimeProperty write SetLastAccessTimeProperty; property LinkProperty: TFileLinkProperty read GetLinkProperty write SetLinkProperty; property OwnerProperty: TFileOwnerProperty read GetOwnerProperty write SetOwnerProperty; property TypeProperty: TFileTypeProperty read GetTypeProperty write SetTypeProperty; property CommentProperty: TFileCommentProperty read GetCommentProperty write SetCommentProperty; { Accessors to each property's value. } {en Sets/gets absolute path to file. On get returns Path + Name. On set sets Path and Name accordingly. } property FullPath: String read GetFullPath write SetFullPath; property Path: String read FPath write SetPath; property Name: String read GetName write SetName; property NameNoExt: String read GetNameNoExt; property Extension: String read GetExtension; property Size: Int64 read GetSize write SetSize; property CompressedSize: Int64 read GetCompressedSize write SetCompressedSize; property Attributes: TFileAttrs read GetAttributes write SetAttributes; property ModificationTime: TDateTime read GetModificationTime write SetModificationTime; property CreationTime: TDateTime read GetCreationTime write SetCreationTime; property LastAccessTime: TDateTime read GetLastAccessTime write SetLastAccessTime; property FileType: String read GetType write SetType; // Convenience functions. // We assume here that when the file has no attributes // the result is false for all these functions. // These functions should probably be moved from here and should not be methods. function IsDirectory: Boolean; function IsSysFile: Boolean; function IsLink: Boolean; property IsLinkToDirectory: Boolean read GetIsLinkToDirectory write SetIsLinkToDirectory; function IsExecutable: Boolean; // for ShellExecute end; // -------------------------------------------------------------------------- { TFiles } TFiles = class { A list of TFile } private FList: TFPList; FFlat: Boolean; FOwnsObjects: Boolean; FPath: String; //<en path of all files protected function GetCount: Integer; procedure SetCount(Count: Integer); function Get(Index: Integer): TFile; procedure Put(Index: Integer; AFile: TFile); procedure SetPath(const NewPath: String); public constructor Create(const APath: String); destructor Destroy; override; {en Create a list with cloned files. } function Clone: TFiles; procedure CloneTo(Files: TFiles); function Add(AFile: TFile): Integer; procedure Insert(AFile: TFile; AtIndex: Integer); procedure Delete(AtIndex: Integer); procedure Clear; property Count: Integer read GetCount write SetCount; property Items[Index: Integer]: TFile read Get write Put; default; property List: TFPList read FList; property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects; property Path: String read FPath write SetPath; property Flat: Boolean read FFlat write FFlat; end; {en Tree structure representing directories/files hierarchy. } TFileTreeNode = class private {en File object associated with this node. } FFile: TFile; {en Subnodes - usually files within a directory. This is a list of TFileTreeNode. } FSubNodes: TFPList; {en Additional data stored in the node. If assigned, it is automatically freed when node is destroyed. } FData: TObject; protected function Get(Index: Integer): TFileTreeNode; function GetCount: Integer; procedure SetCount(Count: Integer); procedure SetData(NewData: TObject); public constructor Create; overload; constructor Create(aFile: TFile); overload; constructor Create(aFile: TFile; DataClass: TClass); overload; destructor Destroy; override; function AddSubNode(aFile: TFile): Integer; procedure RemoveSubNode(Index: Integer); property SubNodesCount: Integer read GetCount write SetCount; property SubNodes[Index: Integer]: TFileTreeNode read Get; property TheFile: TFile read FFile; property Data: TObject read FData write SetData; end; TFileTree = TFileTreeNode; // alias implementation {$IFDEF UNIX} uses DCFileAttributes; {$ENDIF} constructor TFile.Create(const APath: String); begin inherited Create; // Name property always present. NameProperty := TFileNameProperty.Create; Path := APath; end; constructor TFile.CreateForCloning; begin // Create empty object. inherited Create; end; destructor TFile.Destroy; var PropertyType: TFilePropertyType; begin inherited Destroy; for PropertyType := Low(TFilePropertyType) to High(TFilePropertyType) do Properties[PropertyType].Free; end; function TFile.Clone: TFile; begin Result := TFile.CreateForCloning; CloneTo(Result); end; procedure TFile.CloneTo(AFile: TFile); var PropertyType: TFilePropertyType; begin if Assigned(AFile) then begin AFile.FExtension := FExtension; AFile.FNameNoExt := FNameNoExt; AFile.FPath := FPath; AFile.FSupportedProperties := FSupportedProperties; for PropertyType := Low(TFilePropertyType) to High(TFilePropertyType) do begin if Assigned(Self.FProperties[PropertyType]) then begin AFile.FProperties[PropertyType] := Self.FProperties[PropertyType].Clone; end; end; end; end; procedure TFile.ClearProperties; var PropertyType: TFilePropertyType; begin for PropertyType := Succ(fpName) to High(TFilePropertyType) do FreeAndNil(FProperties[PropertyType]); FSupportedProperties := [fpName]; end; function TFile.ReleaseProperty(PropType: TFilePropertyType): TFileProperty; begin Result := FProperties[PropType]; FProperties[PropType] := nil; Exclude(FSupportedProperties, PropType); end; function TFile.GetExtension: String; begin Result := FExtension; end; function TFile.GetNameNoExt: String; begin Result := FNameNoExt; end; function TFile.GetName: String; begin Result := TFileNameProperty(FProperties[fpName]).Value; end; procedure TFile.SetName(NewName: String); begin TFileNameProperty(FProperties[fpName]).Value := NewName; UpdateNameAndExtension(NewName); end; function TFile.GetProperty(PropType: TFilePropertyType): TFileProperty; begin Result := FProperties[PropType]; end; procedure TFile.SetProperty(PropType: TFilePropertyType; NewValue: TFileProperty); begin FProperties[PropType] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, PropType) else Exclude(FSupportedProperties, PropType); end; function TFile.GetFullPath: String; begin Result := Path + TFileNameProperty(FProperties[fpName]).Value; end; procedure TFile.SetFullPath(const NewFullPath: String); var aExtractedName: String; begin if NewFullPath <> '' then begin if NewFullPath[Length(NewFullPath)] = PathDelim then begin // Only path passed. SetPath(NewFullPath); SetName(''); end else begin aExtractedName := ExtractFileName(NewFullPath); SetPath(Copy(NewFullPath, 1, Length(NewFullPath) - Length(aExtractedName))); SetName(aExtractedName); end; end; end; procedure TFile.SetPath(const NewPath: String); begin if NewPath = '' then FPath := '' else FPath := IncludeTrailingPathDelimiter(NewPath); end; function TFile.GetAttributes: TFileAttrs; begin Result := TFileAttributesProperty(FProperties[fpAttributes]).Value; end; procedure TFile.SetAttributes(NewAttributes: TFileAttrs); begin TFileAttributesProperty(FProperties[fpAttributes]).Value := NewAttributes; UpdateNameAndExtension(Name); end; function TFile.GetSize: Int64; begin Result := TFileSizeProperty(FProperties[fpSize]).Value; end; procedure TFile.SetSize(NewSize: Int64); begin TFileSizeProperty(FProperties[fpSize]).Value := NewSize; end; function TFile.GetCompressedSize: Int64; begin Result := TFileCompressedSizeProperty(FProperties[fpCompressedSize]).Value; end; procedure TFile.SetCompressedSize(NewCompressedSize: Int64); begin TFileCompressedSizeProperty(FProperties[fpCompressedSize]).Value := NewCompressedSize; end; function TFile.GetModificationTime: TDateTime; begin Result := TFileModificationDateTimeProperty(FProperties[fpModificationTime]).Value; end; procedure TFile.SetModificationTime(NewTime: TDateTime); begin TFileModificationDateTimeProperty(FProperties[fpModificationTime]).Value := NewTime; end; function TFile.GetCreationTime: TDateTime; begin Result := TFileCreationDateTimeProperty(FProperties[fpCreationTime]).Value; end; procedure TFile.SetCreationTime(NewTime: TDateTime); begin TFileCreationDateTimeProperty(FProperties[fpCreationTime]).Value := NewTime; end; function TFile.GetLastAccessTime: TDateTime; begin Result := TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]).Value; end; procedure TFile.SetLastAccessTime(NewTime: TDateTime); begin TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]).Value := NewTime; end; function TFile.GetIsLinkToDirectory: Boolean; begin if fpLink in SupportedProperties then Result := TFileLinkProperty(FProperties[fpLink]).IsLinkToDirectory else Result := False; end; procedure TFile.SetIsLinkToDirectory(NewValue: Boolean); begin TFileLinkProperty(FProperties[fpLink]).IsLinkToDirectory := NewValue; end; function TFile.GetType: String; begin Result := TFileTypeProperty(FProperties[fpType]).Value; end; procedure TFile.SetType(NewValue: String); begin TFileTypeProperty(FProperties[fpType]).Value := NewValue; end; function TFile.GetNameProperty: TFileNameProperty; begin Result := TFileNameProperty(FProperties[fpName]); end; procedure TFile.SetNameProperty(NewValue: TFileNameProperty); begin FProperties[fpName] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpName) else Exclude(FSupportedProperties, fpName); end; function TFile.GetAttributesProperty: TFileAttributesProperty; begin Result := TFileAttributesProperty(FProperties[fpAttributes]); end; procedure TFile.SetAttributesProperty(NewValue: TFileAttributesProperty); begin FProperties[fpAttributes] := NewValue; if Assigned(NewValue) then begin Include(FSupportedProperties, fpAttributes); UpdateNameAndExtension(Name); end else Exclude(FSupportedProperties, fpAttributes); end; function TFile.GetSizeProperty: TFileSizeProperty; begin Result := TFileSizeProperty(FProperties[fpSize]); end; procedure TFile.SetSizeProperty(NewValue: TFileSizeProperty); begin FProperties[fpSize] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpSize) else Exclude(FSupportedProperties, fpSize); end; function TFile.GetCompressedSizeProperty: TFileCompressedSizeProperty; begin Result := TFileCompressedSizeProperty(FProperties[fpCompressedSize]); end; procedure TFile.SetCompressedSizeProperty(NewValue: TFileCompressedSizeProperty); begin FProperties[fpCompressedSize] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpCompressedSize) else Exclude(FSupportedProperties, fpCompressedSize); end; function TFile.GetModificationTimeProperty: TFileModificationDateTimeProperty; begin Result := TFileModificationDateTimeProperty(FProperties[fpModificationTime]); end; procedure TFile.SetModificationTimeProperty(NewValue: TFileModificationDateTimeProperty); begin FProperties[fpModificationTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpModificationTime) else Exclude(FSupportedProperties, fpModificationTime); end; function TFile.GetCreationTimeProperty: TFileCreationDateTimeProperty; begin Result := TFileCreationDateTimeProperty(FProperties[fpCreationTime]); end; procedure TFile.SetCreationTimeProperty(NewValue: TFileCreationDateTimeProperty); begin FProperties[fpCreationTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpCreationTime) else Exclude(FSupportedProperties, fpCreationTime); end; function TFile.GetLastAccessTimeProperty: TFileLastAccessDateTimeProperty; begin Result := TFileLastAccessDateTimeProperty(FProperties[fpLastAccessTime]); end; procedure TFile.SetLastAccessTimeProperty(NewValue: TFileLastAccessDateTimeProperty); begin FProperties[fpLastAccessTime] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpLastAccessTime) else Exclude(FSupportedProperties, fpLastAccessTime); end; function TFile.GetLinkProperty: TFileLinkProperty; begin Result := TFileLinkProperty(FProperties[fpLink]); end; procedure TFile.SetLinkProperty(NewValue: TFileLinkProperty); begin FProperties[fpLink] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpLink) else Exclude(FSupportedProperties, fpLink); end; function TFile.GetOwnerProperty: TFileOwnerProperty; begin Result := TFileOwnerProperty(FProperties[fpOwner]); end; procedure TFile.SetOwnerProperty(NewValue: TFileOwnerProperty); begin FProperties[fpOwner] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpOwner) else Exclude(FSupportedProperties, fpOwner); end; function TFile.GetTypeProperty: TFileTypeProperty; begin Result := TFileTypeProperty(FProperties[fpType]); end; procedure TFile.SetTypeProperty(NewValue: TFileTypeProperty); begin FProperties[fpType] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpType) else Exclude(FSupportedProperties, fpType); end; function TFile.GetCommentProperty: TFileCommentProperty; begin Result := TFileCommentProperty(FProperties[fpComment]); end; procedure TFile.SetCommentProperty(NewValue: TFileCommentProperty); begin FProperties[fpComment] := NewValue; if Assigned(NewValue) then Include(FSupportedProperties, fpComment) else Exclude(FSupportedProperties, fpComment); end; function TFile.IsNameValid: Boolean; begin if Name <> '..' then Result := True else Result := False; end; function TFile.IsDirectory: Boolean; begin if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(FProperties[fpAttributes]).IsDirectory else Result := False; end; function TFile.IsLink: Boolean; begin if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(FProperties[fpAttributes]).IsLink else Result := False; end; function TFile.IsExecutable: Boolean; var FileAttributes: TFileAttributesProperty; begin if fpAttributes in SupportedProperties then begin FileAttributes := TFileAttributesProperty(FProperties[fpAttributes]); {$IF DEFINED(MSWINDOWS)} Result := not FileAttributes.IsDirectory; {$ELSEIF DEFINED(UNIX)} Result := (not FileAttributes.IsDirectory) and (FileAttributes.Value AND (S_IXUSR OR S_IXGRP OR S_IXOTH)>0); {$ELSE} Result := False; {$ENDIF} end else Result := False; end; function TFile.IsSysFile: Boolean; begin {$IFDEF MSWINDOWS} if fpAttributes in SupportedProperties then Result := TFileAttributesProperty(Properties[fpAttributes]).IsSysFile else Result := False; {$ELSE} // Files beginning with '.' are treated as system/hidden files on Unix. Result := (Length(Name) > 1) and (Name[1] = '.') and (Name <> '..'); {$ENDIF} end; procedure TFile.SplitIntoNameAndExtension(const FileName: string; var aFileNameOnly: string; var aExtension: string); var i : longint; begin I := Length(FileName); while (I > 0) and (FileName[I] <> ExtensionSeparator) do Dec(I); if I > 1 then begin aFileNameOnly := Copy(FileName, 1, I - 1); aExtension := Copy(FileName, I + 1, MaxInt); end else begin // For files that does not have '.' or that have only // one '.' and beginning with '.' there is no extension. aFileNameOnly := FileName; aExtension := ''; end; end; procedure TFile.UpdateNameAndExtension(const FileName: string); begin // Cache Extension and NameNoExt. if (FileName = '') or IsDirectory or IsLinkToDirectory then begin // For directories there is no extension. FExtension := ''; FNameNoExt := FileName; end else begin SplitIntoNameAndExtension(FileName, FNameNoExt, FExtension); end; end; // ---------------------------------------------------------------------------- constructor TFiles.Create(const APath: String); begin inherited Create; FList := TFPList.Create; FOwnsObjects := True; Path := APath; end; destructor TFiles.Destroy; begin Clear; FreeAndNil(FList); inherited; end; function TFiles.Clone: TFiles; begin Result := TFiles.Create(Path); CloneTo(Result); end; procedure TFiles.CloneTo(Files: TFiles); var i: Integer; begin for i := 0 to FList.Count - 1 do begin Files.Add(Get(i).Clone); end; end; function TFiles.GetCount: Integer; begin Result := FList.Count; end; procedure TFiles.SetCount(Count: Integer); begin FList.Count := Count; end; function TFiles.Add(AFile: TFile): Integer; begin Result := FList.Add(AFile); end; procedure TFiles.Insert(AFile: TFile; AtIndex: Integer); begin FList.Insert(AtIndex, AFile); end; procedure TFiles.Delete(AtIndex: Integer); var p: Pointer; begin p := FList.Items[AtIndex]; TFile(p).Free; FList.Delete(AtIndex); end; procedure TFiles.Clear; var i: Integer; p: Pointer; begin if OwnsObjects then begin for i := 0 to FList.Count - 1 do begin p := FList.Items[i]; TFile(p).Free; end; end; FList.Clear; end; function TFiles.Get(Index: Integer): TFile; begin Result := TFile(FList.Items[Index]); end; procedure TFiles.Put(Index: Integer; AFile: TFile); begin FList.Items[Index] := AFile; end; procedure TFiles.SetPath(const NewPath: String); begin if NewPath = '' then FPath := '' else FPath := IncludeTrailingPathDelimiter(NewPath); end; // ---------------------------------------------------------------------------- constructor TFileTreeNode.Create; begin Create(nil); end; constructor TFileTreeNode.Create(aFile: TFile); begin FSubNodes := nil; FFile := aFile; FData := nil; inherited Create; end; constructor TFileTreeNode.Create(aFile: TFile; DataClass: TClass); begin Create(aFile); FData := DataClass.Create; end; destructor TFileTreeNode.Destroy; var i: Integer; begin inherited Destroy; FreeAndNil(FFile); if Assigned(FSubNodes) then begin for i := 0 to FSubNodes.Count - 1 do TFileTreeNode(FSubNodes.Items[i]).Free; FreeAndNil(FSubNodes); end; FreeAndNil(FData); end; function TFileTreeNode.AddSubNode(aFile: TFile): Integer; var aNode: TFileTreeNode; begin if not Assigned(FSubNodes) then FSubNodes := TFPList.Create; aNode := TFileTreeNode.Create(aFile); Result := FSubNodes.Add(aNode); end; procedure TFileTreeNode.RemoveSubNode(Index: Integer); begin if (Index >= 0) and (Index < FSubNodes.Count) then begin TFileTreeNode(FSubNodes.Items[Index]).Free; FSubNodes.Delete(Index); end; end; function TFileTreeNode.Get(Index: Integer): TFileTreeNode; begin Result := TFileTreeNode(FSubNodes.Items[Index]); end; function TFileTreeNode.GetCount: Integer; begin if Assigned(FSubNodes) then Result := FSubNodes.Count else Result := 0; end; procedure TFileTreeNode.SetCount(Count: Integer); begin if not Assigned(FSubNodes) then FSubNodes := TFPList.Create; FSubNodes.Count := Count; end; procedure TFileTreeNode.SetData(NewData: TObject); var TmpData: TObject; begin if Assigned(FData) then begin TmpData := FData; FData := NewData; TmpData.Free; end else FData := NewData; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/utranslator.pas�����������������������������������������������������������������0000644�0001750�0000144�00000005011�12253360024�016361� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit is needed for using translated form strings made by Lazarus IDE. It loads localized form strings from .po file. Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) 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 uTranslator; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, GetText, Controls, typinfo, Translations; type { TTranslator } TTranslator = class(TAbstractTranslator) private FFormClassName : String; FPOFile:TPOFile; public constructor Create(POFileName:string); destructor Destroy;override; procedure TranslateStringProperty(Sender:TObject; const Instance: TPersistent; PropInfo: PPropInfo; var Content:string);override; end; implementation uses Forms, LCLProc; { TTranslator } constructor TTranslator.Create(POFileName: string); begin inherited Create; FPOFile := TPOFile.Create(POFileName); Translations.TranslateResourceStrings(FPOFile); end; destructor TTranslator.Destroy; begin FPOFile.Free; inherited Destroy; end; procedure TTranslator.TranslateStringProperty(Sender: TObject; const Instance: TPersistent; PropInfo: PPropInfo; var Content: string); begin if Instance.InheritsFrom(TForm) then begin FFormClassName := Instance.ClassName; //DCDebug(UpperCase(FFormClassName + '.'+PropInfo^.Name) + '=' + Content); Content := FPOFile.Translate(UpperCase(FFormClassName + '.' + PropInfo^.Name), Content); end else begin //DCDebug(UpperCase(FFormClassName + '.'+Instance.GetNamePath + '.' + PropInfo^.Name) + '=' + Content); Content := FPOFile.Translate(UpperCase(FFormClassName + '.'+Instance.GetNamePath + '.'+ PropInfo^.Name), Content); end; // convert UTF8 to current local Content := UTF8ToSystemCharSet(Content); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fFileOpDlg.pas������������������������������������������������������������������0000644�0001750�0000144�00000112150�12673526351�015776� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Window displaying progress for file source operations and queues. Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2012 Przemysław Nagay (cobines@gmail.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 fFileOpDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, ComCtrls, Buttons, ExtCtrls, KASProgressBar, uOperationsManager, uFileSourceOperation, uFileSourceOperationUI, uOSForms; type TFileOpDlgLook = set of (fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb); TOperationProgressWindowEvent = (opwevOpened, opwevClosed); TOperationProgressWindowEvents = set of TOperationProgressWindowEvent; TOperationProgressWindowEventProc = procedure(OperationHandle: TOperationHandle; Event: TOperationProgressWindowEvent) of object; TOperationProgressWindowOption = (opwoIfExistsBringToFront, opwoStartMinimized); TOperationProgressWindowOptions = set of TOperationProgressWindowOption; { TfrmFileOp } TfrmFileOp = class(TModalDialog) btnCancel: TBitBtn; btnPauseStart: TBitBtn; btnViewOperations: TBitBtn; btnMinimizeToPanel: TBitBtn; lblCurrentOperationText: TLabel; lblEstimated: TLabel; lblFileNameFrom: TLabel; lblFileNameTo: TLabel; lblFrom: TLabel; lblCurrentOperation: TLabel; lblTo: TLabel; pnlQueue: TPanel; pbCurrent: TKASProgressBar; pbTotal: TKASProgressBar; pnlButtons: TPanel; pnlClient: TPanel; pnlFrom: TPanel; pnlTo: TPanel; procedure btnCancelClick(Sender: TObject); procedure btnMinimizeToPanelClick(Sender: TObject); procedure btnPauseStartClick(Sender: TObject); procedure btnViewOperationsClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); private FOperationHandle: TOperationHandle; FQueueIdentifier: TOperationsManagerQueueIdentifier; FUpdateTimer: TTimer; //<en Timer for updating statistics. FUserInterface: TFileSourceOperationUI; FStopOperationOnClose: Boolean; procedure OnUpdateTimer(Sender: TObject); function AddToOpenedForms(OpManItem: TOperationsManagerItem): Boolean; procedure CloseDialog; procedure FinalizeOperation; function GetFirstOperationHandle(QueueIdentifier: TOperationsManagerQueueIdentifier): TOperationHandle; function GetProgressBarStyle: TProgressBarStyle; procedure InitializeControls(OpManItem: TOperationsManagerItem; FileOpDlgLook: TFileOpDlgLook); function InitializeOperation: Boolean; procedure NotifyEvents(Events: TOperationProgressWindowEvents); procedure RemoveFromOpenedForms; procedure SetPauseGlyph; procedure SetPlayGlyph; procedure UpdateOperation(OpManItem: TOperationsManagerItem); procedure UpdatePauseStartButton(OpManItem: TOperationsManagerItem); procedure SetProgressBarStyle(const AValue: TProgressBarStyle); procedure SetProgressBytes(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentBytes: Int64; TotalBytes: Int64); procedure SetProgressFiles(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentFiles: Int64; TotalFiles: Int64); procedure SetSpeedAndTime(Operation: TFileSourceOperation; RemainingTime: TDateTime; Speed: String); procedure StopOperationOrQueue; procedure InitializeCopyOperation(OpManItem: TOperationsManagerItem); procedure InitializeMoveOperation(OpManItem: TOperationsManagerItem); procedure InitializeDeleteOperation(OpManItem: TOperationsManagerItem); procedure InitializeWipeOperation(OpManItem: TOperationsManagerItem); procedure InitializeSplitOperation(OpManItem: TOperationsManagerItem); procedure InitializeCombineOperation(OpManItem: TOperationsManagerItem); procedure InitializeCalcChecksumOperation(OpManItem: TOperationsManagerItem); procedure InitializeTestArchiveOperation(OpManItem: TOperationsManagerItem); procedure InitializeCalcStatisticsOperation(OpManItem: TOperationsManagerItem); procedure UpdateCopyOperation(Operation: TFileSourceOperation); procedure UpdateMoveOperation(Operation: TFileSourceOperation); procedure UpdateDeleteOperation(Operation: TFileSourceOperation); procedure UpdateWipeOperation(Operation: TFileSourceOperation); procedure UpdateSplitOperation(Operation: TFileSourceOperation); procedure UpdateCombineOperation(Operation: TFileSourceOperation); procedure UpdateCalcStatisticsOperation(Operation: TFileSourceOperation); procedure UpdateCalcChecksumOperation(Operation: TFileSourceOperation); procedure UpdateTestArchiveOperation(Operation: TFileSourceOperation); class function GetOpenedForm(AOperationHandle: TOperationHandle): TfrmFileOp; class function GetOpenedForm(AQueueIdentifier: TOperationsManagerQueueIdentifier): TfrmFileOp; class procedure ShowExistingWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); class procedure ShowNewWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); property ProgressBarStyle: TProgressBarStyle read GetProgressBarStyle write SetProgressBarStyle; public constructor Create(OperationHandle: TOperationHandle); reintroduce; constructor Create(QueueIdentifier: TOperationsManagerQueueIdentifier); reintroduce; destructor Destroy; override; procedure ExecuteModal; override; function ShowModal: Integer; override; function CloseQuery: Boolean; override; class procedure AddEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); class procedure RemoveEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); class function IsOpenedFor(AOperationHandle: TOperationHandle): Boolean; class function IsOpenedFor(AQueueIdentifier: TOperationsManagerQueueIdentifier): Boolean; class procedure ShowFor(AOperationHandle: TOperationHandle; Options: TOperationProgressWindowOptions); class procedure ShowFor(AQueueIdentifier: TOperationsManagerQueueIdentifier; Options: TOperationProgressWindowOptions); end; implementation {$R *.lfm} uses dmCommonData, uLng, uDCUtils, LCLVersion, fViewOperations, uFileSourceOperationMisc, uFileSourceOperationTypes, uFileSourceCopyOperation, uFileSourceMoveOperation, uFileSourceDeleteOperation, uFileSourceWipeOperation, uFileSourceSplitOperation, uFileSourceCombineOperation, uFileSourceCalcChecksumOperation, uFileSourceCalcStatisticsOperation, uFileSourceTestArchiveOperation, uFileSourceOperationMessageBoxesUI ; type PEventsListItem = ^TEventsListItem; TEventsListItem = record EventFunction: TOperationProgressWindowEventProc; end; POpenedForm = ^TOpenedForm; TOpenedForm = record Form: TfrmFileOp; OperationHandle: TOperationHandle; QueueIdentifier: TOperationsManagerQueueIdentifier; end; var OpenedForms: TFPList; EventsListeners: array[TOperationProgressWindowEvent] of TFPList; procedure Initialize; var Event: TOperationProgressWindowEvent; begin OpenedForms := TFPList.Create; for Event := Low(EventsListeners) to High(EventsListeners) do EventsListeners[Event] := TFPList.Create; end; procedure Finalize; var Event: TOperationProgressWindowEvent; Item: PEventsListItem; OpenedForm: POpenedForm; begin for Event := Low(EventsListeners) to High(EventsListeners) do begin for Item in EventsListeners[Event] do Dispose(Item); FreeAndNil(EventsListeners[Event]); end; for OpenedForm in OpenedForms do Dispose(OpenedForm); OpenedForms.Free; end; procedure TfrmFileOp.btnCancelClick(Sender: TObject); begin StopOperationOrQueue; ModalResult:= mrCancel; end; procedure TfrmFileOp.btnMinimizeToPanelClick(Sender: TObject); begin CloseDialog; end; procedure TfrmFileOp.btnPauseStartClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.IsFree then OpManItem.Operation.TogglePause else OpManItem.Queue.TogglePause; UpdatePauseStartButton(OpManItem); end; end; procedure TfrmFileOp.btnViewOperationsClick(Sender: TObject); var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.IsFree then ShowOperationsViewer(OpManItem.Handle) else ShowOperationsViewer(OpManItem.Queue.Identifier); end; end; procedure TfrmFileOp.CloseDialog; begin FStopOperationOnClose := False; Close; end; procedure TfrmFileOp.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; FinalizeOperation; end; procedure TfrmFileOp.FormCreate(Sender: TObject); begin pbCurrent.DoubleBuffered:= True; pbTotal.DoubleBuffered:= True; Self.DoubleBuffered:= True; FUpdateTimer := TTimer.Create(Self); FUpdateTimer.Interval := 100; FUpdateTimer.OnTimer := @OnUpdateTimer; FUpdateTimer.Enabled := False; if not InitializeOperation then CloseDialog; // Workaround: TWinControl.WMSize loop detected Constraints.MaxWidth:= Screen.Width; Constraints.MaxHeight:= Screen.Height; end; function TfrmFileOp.GetFirstOperationHandle(QueueIdentifier: TOperationsManagerQueueIdentifier): TOperationHandle; var Queue: TOperationsManagerQueue; begin Queue := OperationsManager.QueueByIdentifier[QueueIdentifier]; if Assigned(Queue) and (Queue.Count > 0) then Result := Queue.Items[0].Handle else Result := InvalidOperationHandle; end; class function TfrmFileOp.GetOpenedForm(AOperationHandle: TOperationHandle): TfrmFileOp; var Index: Integer; Item: POpenedForm; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; if Item^.OperationHandle = AOperationHandle then Exit(Item^.Form); end; Result := nil; end; class function TfrmFileOp.GetOpenedForm(AQueueIdentifier: TOperationsManagerQueueIdentifier): TfrmFileOp; var Index: Integer; Item: POpenedForm; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; if Item^.QueueIdentifier = AQueueIdentifier then Exit(Item^.Form); end; Result := nil; end; constructor TfrmFileOp.Create(OperationHandle: TOperationHandle); var OpManItem: TOperationsManagerItem; begin FOperationHandle := InvalidOperationHandle; inherited Create(Application); AutoSize := True; OpManItem := OperationsManager.GetItemByHandle(OperationHandle); if Assigned(OpManItem) then begin FStopOperationOnClose := True; FOperationHandle := OperationHandle; end else begin CloseDialog; end; end; constructor TfrmFileOp.Create(QueueIdentifier: TOperationsManagerQueueIdentifier); begin Create(GetFirstOperationHandle(QueueIdentifier)); end; destructor TfrmFileOp.Destroy; begin inherited Destroy; FreeAndNil(FUserInterface); end; procedure TfrmFileOp.ExecuteModal; var OpManItem: TOperationsManagerItem; begin if FOperationHandle <> InvalidOperationHandle then begin if Assigned(FUserInterface) then begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.Execute; end; end; end; function TfrmFileOp.ShowModal: Integer; begin BorderStyle:= bsDialog; ShowInTaskBar:= stNever; btnViewOperations.Visible:= False; btnMinimizeToPanel.Visible:= False; Result:= inherited ShowModal; // Workaround http://doublecmd.sourceforge.net/mantisbt/view.php?id=1323 {$IF DEFINED(DARWIN) and DEFINED(LCLQT)} Visible:= True; Visible:= False; {$ENDIF} end; procedure TfrmFileOp.FinalizeOperation; var OpManItem: TOperationsManagerItem; begin FUpdateTimer.Enabled := False; if FOperationHandle <> InvalidOperationHandle then begin if Assigned(FUserInterface) then begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then OpManItem.Operation.RemoveUserInterface(FUserInterface); end; RemoveFromOpenedForms; FOperationHandle := InvalidOperationHandle; end; end; function TfrmFileOp.CloseQuery: Boolean; begin Result := True; if FStopOperationOnClose then StopOperationOrQueue; end; class procedure TfrmFileOp.AddEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; begin for Event in Events do begin New(Item); Item^.EventFunction := FunctionToCall; EventsListeners[Event].Add(Item); end; end; function TfrmFileOp.AddToOpenedForms(OpManItem: TOperationsManagerItem): Boolean; var Index: Integer; Item: POpenedForm; Found: Boolean = False; begin for Index := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[Index]; // Check if another form is not already opened for the operation or queue. if (Item^.OperationHandle = FOperationHandle) or (not OpManItem.Queue.IsFree and (Item^.QueueIdentifier = FQueueIdentifier)) then begin Exit(False); end else if Item^.Form = Self then begin Found := True; Break; end; end; if not Found then begin New(Item); OpenedForms.Add(Item); end; Item^.Form := Self; Item^.OperationHandle := FOperationHandle; Item^.QueueIdentifier := FQueueIdentifier; NotifyEvents([opwevOpened]); Result := True; end; class procedure TfrmFileOp.RemoveEventsListener(Events: TOperationProgressWindowEvents; FunctionToCall: TOperationProgressWindowEventProc); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; i: Integer; begin for Event in Events do begin for i := 0 to EventsListeners[Event].Count - 1 do begin Item := PEventsListItem(EventsListeners[Event].Items[i]); if Item^.EventFunction = FunctionToCall then begin EventsListeners[Event].Delete(i); Dispose(Item); Break; // break from one for only end; end; end; end; procedure TfrmFileOp.RemoveFromOpenedForms; var i: Integer; Item: POpenedForm; begin for i := 0 to OpenedForms.Count - 1 do begin Item := OpenedForms[i]; if Item^.Form = Self then begin Dispose(Item); OpenedForms.Delete(i); NotifyEvents([opwevClosed]); Break; end; end; end; class function TfrmFileOp.IsOpenedFor(AOperationHandle: TOperationHandle): Boolean; begin Result := Assigned(GetOpenedForm(AOperationHandle)); end; class function TfrmFileOp.IsOpenedFor(AQueueIdentifier: TOperationsManagerQueueIdentifier): Boolean; begin Result := Assigned(GetOpenedForm(AQueueIdentifier)); end; class procedure TfrmFileOp.ShowFor(AOperationHandle: TOperationHandle; Options: TOperationProgressWindowOptions); var OperationDialog: TfrmFileOp; OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(AOperationHandle); if Assigned(OpManItem) then begin if not OpManItem.Queue.IsFree then begin ShowFor(OpManItem.Queue.Identifier, Options); end else begin OperationDialog := GetOpenedForm(AOperationHandle); if Assigned(OperationDialog) then ShowExistingWindow(OperationDialog, Options) else begin OperationDialog := TfrmFileOp.Create(AOperationHandle); ShowNewWindow(OperationDialog, Options); end; end; end; end; class procedure TfrmFileOp.ShowFor(AQueueIdentifier: TOperationsManagerQueueIdentifier; Options: TOperationProgressWindowOptions); var OperationDialog: TfrmFileOp; begin OperationDialog := GetOpenedForm(AQueueIdentifier); if Assigned(OperationDialog) then begin ShowExistingWindow(OperationDialog, Options); end else begin OperationDialog := TfrmFileOp.Create(AQueueIdentifier); ShowNewWindow(OperationDialog, Options); end; end; class procedure TfrmFileOp.ShowExistingWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); begin if opwoIfExistsBringToFront in Options then AWindow.ShowOnTop; end; class procedure TfrmFileOp.ShowNewWindow(AWindow: TfrmFileOp; Options: TOperationProgressWindowOptions); begin if opwoStartMinimized in Options then begin {$IF lcl_fullversion >= 093100} // Workaround for bug in Lazarus 0.9.31 #0021603. AWindow.Visible := True; AWindow.WindowState := wsMinimized; {$ELSE} AWindow.WindowState := wsMinimized; AWindow.Visible := True; {$ENDIF} end else AWindow.Show; end; procedure TfrmFileOp.StopOperationOrQueue; var OpManItem: TOperationsManagerItem; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) then begin if OpManItem.Queue.IsFree then OpManItem.Operation.Stop else OpManItem.Queue.Stop; end; end; procedure TfrmFileOp.OnUpdateTimer(Sender: TObject); var OpManItem: TOperationsManagerItem; Queue: TOperationsManagerQueue; begin OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); // Check if operation did not change queues. if Assigned(OpManItem) and (OpManItem.Queue.Identifier <> FQueueIdentifier) then begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; FinalizeOperation; if Assigned(Queue) and not Queue.IsFree then begin // Queue was begin followed - switch to next operation from that queue. FQueueIdentifier := Queue.Identifier; FOperationHandle := GetFirstOperationHandle(Queue.Identifier); end else begin // Follow the operation to new queue either because previously followed // queue was free-operations queue or old queue was destroyed. FQueueIdentifier := OpManItem.Queue.Identifier; FOperationHandle := OpManItem.Handle; end; if not InitializeOperation then begin CloseDialog; Exit; end; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; // Check if first operation in the queue hasn't changed. if Assigned(OpManItem) and not OpManItem.Queue.IsFree and (GetFirstOperationHandle(FQueueIdentifier) <> FOperationHandle) then begin FinalizeOperation; FOperationHandle := GetFirstOperationHandle(FQueueIdentifier); if not InitializeOperation then begin CloseDialog; Exit; end; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; if Assigned(OpManItem) then begin UpdateOperation(OpManItem); end else // Operation was destroyed begin Queue := OperationsManager.QueueByIdentifier[FQueueIdentifier]; if not Assigned(Queue) or Queue.IsFree then begin // Single operation was being followed and it has finished // or all operations in queue have finished - close window. CloseDialog; end else begin // Queue was begin followed - switch to next operation from that queue. FOperationHandle := GetFirstOperationHandle(FQueueIdentifier); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); OpManItem.Operation.AddUserInterface(FUserInterface); end; end; end; procedure TfrmFileOp.InitializeControls(OpManItem: TOperationsManagerItem; FileOpDlgLook: TFileOpDlgLook); begin pnlQueue.Visible := not OpManItem.Queue.IsFree; lblFrom.Visible := fodl_from_lbl in FileOpDlgLook; lblFileNameFrom.Visible := lblFrom.Visible; lblTo.Visible := fodl_to_lbl in FileOpDlgLook; lblFileNameTo.Visible := lblTo.Visible; pbCurrent.Visible := fodl_current_pb in FileOpDlgLook; pbTotal.Visible := fodl_total_pb in FileOpDlgLook; pbCurrent.ShowInTaskbar := [fodl_current_pb, fodl_total_pb] * FileOpDlgLook = [fodl_current_pb]; pbTotal.ShowInTaskbar := fodl_total_pb in FileOpDlgLook; lblFileNameFrom.Caption := ''; lblFileNameTo.Caption := ''; lblEstimated.Caption := #32; end; procedure TfrmFileOp.NotifyEvents(Events: TOperationProgressWindowEvents); var Item: PEventsListItem; Event: TOperationProgressWindowEvent; i: Integer; begin for Event in Events do begin for i := 0 to EventsListeners[Event].Count - 1 do begin Item := EventsListeners[Event].Items[i]; Item^.EventFunction(FOperationHandle, Event); end; end; end; procedure TfrmFileOp.SetPauseGlyph; begin dmComData.ImageList.GetBitmap(1, btnPauseStart.Glyph); end; procedure TfrmFileOp.SetPlayGlyph; begin dmComData.ImageList.GetBitmap(0, btnPauseStart.Glyph); end; procedure TfrmFileOp.SetProgressBytes(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentBytes: Int64; TotalBytes: Int64); begin if (CurrentBytes = -1) then ProgressBar.Style := pbstMarquee else begin if Operation.State = fsosRunning then ProgressBar.Style := pbstNormal; ProgressBar.SetProgress(CurrentBytes, TotalBytes, cnvFormatFileSize(CurrentBytes, True) + 'B/' + cnvFormatFileSize(TotalBytes, True) + 'B' ); end; end; procedure TfrmFileOp.SetProgressFiles(Operation: TFileSourceOperation; ProgressBar: TKASProgressBar; CurrentFiles: Int64; TotalFiles: Int64); begin if (CurrentFiles = -1) then ProgressBar.Style := pbstMarquee else begin if Operation.State = fsosRunning then ProgressBar.Style := pbstNormal; ProgressBar.SetProgress(CurrentFiles, TotalFiles, cnvFormatFileSize(CurrentFiles, True) + '/' + cnvFormatFileSize(TotalFiles, True) ); end; end; procedure TfrmFileOp.SetSpeedAndTime(Operation: TFileSourceOperation; RemainingTime: TDateTime; Speed: String); var sEstimated: String; begin if Operation.State <> fsosRunning then sEstimated := #32 else begin if RemainingTime > 0 then begin sEstimated := FormatDateTime('HH:MM:SS', RemainingTime); sEstimated := Format(rsDlgSpeedTime, [Speed, sEstimated]); end else sEstimated := Format(rsDlgSpeed, [Speed]); end; lblEstimated.Caption := sEstimated; end; procedure TfrmFileOp.InitializeCopyOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeMoveOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; function TfrmFileOp.InitializeOperation: Boolean; var OpManItem: TOperationsManagerItem; begin Result := False; OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); if Assigned(OpManItem) and not OpManItem.Queue.IsFree then begin FOperationHandle := GetFirstOperationHandle(OpManItem.Queue.Identifier); OpManItem := OperationsManager.GetItemByHandle(FOperationHandle); end; if Assigned(OpManItem) then begin FQueueIdentifier := OpManItem.Queue.Identifier; if AddToOpenedForms(OpManItem) then begin if not Assigned(FUserInterface) then FUserInterface := TFileSourceOperationMessageBoxesUI.Create; OpManItem.Operation.AddUserInterface(FUserInterface); ProgressBarStyle:= pbstMarquee; case OpManItem.Operation.ID of fsoCopy, fsoCopyIn, fsoCopyOut: InitializeCopyOperation(OpManItem); fsoMove: InitializeMoveOperation(OpManItem); fsoDelete: InitializeDeleteOperation(OpManItem); fsoWipe: InitializeWipeOperation(OpManItem); fsoSplit: InitializeSplitOperation(OpManItem); fsoCombine: InitializeCombineOperation(OpManItem); fsoCalcChecksum: InitializeCalcChecksumOperation(OpManItem); fsoTestArchive: InitializeTestArchiveOperation(OpManItem); fsoCalcStatistics: InitializeCalcStatisticsOperation(OpManItem); else begin InitializeControls(OpManItem, [fodl_total_pb]); end; end; UpdatePauseStartButton(OpManItem); Caption := EmptyStr; FUpdateTimer.Enabled := True; Result := True; end; end; if not Result then FOperationHandle := InvalidOperationHandle; end; procedure TfrmFileOp.InitializeDeleteOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_total_pb]); end; procedure TfrmFileOp.InitializeCalcStatisticsOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl]); end; procedure TfrmFileOp.InitializeWipeOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeSplitOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeCombineOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeCalcChecksumOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.InitializeTestArchiveOperation(OpManItem: TOperationsManagerItem); begin InitializeControls(OpManItem, [fodl_from_lbl, fodl_to_lbl, fodl_current_pb, fodl_total_pb]); end; procedure TfrmFileOp.UpdateCopyOperation(Operation: TFileSourceOperation); var CopyOperation: TFileSourceCopyOperation; CopyStatistics: TFileSourceCopyOperationStatistics; begin CopyOperation := Operation as TFileSourceCopyOperation; CopyStatistics := CopyOperation.RetrieveStatistics; with CopyStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateMoveOperation(Operation: TFileSourceOperation); var MoveOperation: TFileSourceMoveOperation; MoveStatistics: TFileSourceMoveOperationStatistics; begin MoveOperation := Operation as TFileSourceMoveOperation; MoveStatistics := MoveOperation.RetrieveStatistics; with MoveStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateOperation(OpManItem: TOperationsManagerItem); var NewCaption: String; begin case OpManItem.Operation.ID of fsoCopy, fsoCopyIn, fsoCopyOut: UpdateCopyOperation(OpManItem.Operation); fsoMove: UpdateMoveOperation(OpManItem.Operation); fsoDelete: UpdateDeleteOperation(OpManItem.Operation); fsoWipe: UpdateWipeOperation(OpManItem.Operation); fsoSplit: UpdateSplitOperation(OpManItem.Operation); fsoCombine: UpdateCombineOperation(OpManItem.Operation); fsoCalcChecksum: UpdateCalcChecksumOperation(OpManItem.Operation); fsoCalcStatistics: UpdateCalcStatisticsOperation(OpManItem.Operation); fsoTestArchive: UpdateTestArchiveOperation(OpManItem.Operation); else begin // Operation not currently supported for display. // Only show general progress. pbTotal.Position := Round(OpManItem.Operation.Progress * pbTotal.Max); end; end; UpdatePauseStartButton(OpManItem); if OpManItem.Queue.IsFree then begin NewCaption := GetProgressString(OpManItem.Operation.Progress) + ' ' + OpManItem.Operation.GetDescription(fsoddJob) + GetOperationStateString(OpManItem.Operation.State); end else begin if OpManItem.Queue.Paused then NewCaption := '[' + IntToStr(OpManItem.Queue.Count) + '] ' + OpManItem.Queue.GetDescription(False) + GetOperationStateString(fsosPaused) else NewCaption := '[' + IntToStr(OpManItem.Queue.Count) + '] ' + GetProgressString(OpManItem.Operation.Progress) + ' ' + OpManItem.Operation.GetDescription(fsoddJob) + ' - ' + OpManItem.Queue.GetDescription(False); lblCurrentOperationText.Caption := OpManItem.Operation.GetDescription(fsoddJob) + ' ' + GetProgressString(OpManItem.Operation.Progress); end; Caption := NewCaption; end; procedure TfrmFileOp.UpdatePauseStartButton(OpManItem: TOperationsManagerItem); begin if OpManItem.Queue.IsFree then begin case OpManItem.Operation.State of fsosNotStarted, fsosStopped, fsosPaused: begin btnPauseStart.Enabled := True; SetPlayGlyph; end; fsosStarting, fsosStopping, fsosPausing, fsosWaitingForFeedback: begin btnPauseStart.Enabled := False; end; fsosRunning, fsosWaitingForConnection: begin btnPauseStart.Enabled := True; SetPauseGlyph; end; else btnPauseStart.Enabled := False; end; end else begin btnPauseStart.Enabled := True; if OpManItem.Queue.Paused then SetPlayGlyph else SetPauseGlyph; end; end; procedure TfrmFileOp.UpdateDeleteOperation(Operation: TFileSourceOperation); var DeleteOperation: TFileSourceDeleteOperation; DeleteStatistics: TFileSourceDeleteOperationStatistics; begin DeleteOperation := Operation as TFileSourceDeleteOperation; DeleteStatistics := DeleteOperation.RetrieveStatistics; with DeleteStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetProgressFiles(Operation, pbTotal, DoneFiles, TotalFiles); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(FilesPerSecond, True)); end; end; procedure TfrmFileOp.UpdateWipeOperation(Operation: TFileSourceOperation); var WipeOperation: TFileSourceWipeOperation; WipeStatistics: TFileSourceWipeOperationStatistics; begin WipeOperation := Operation as TFileSourceWipeOperation; WipeStatistics := WipeOperation.RetrieveStatistics; with WipeStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateSplitOperation(Operation: TFileSourceOperation); var SplitOperation: TFileSourceSplitOperation; SplitStatistics: TFileSourceSplitOperationStatistics; begin SplitOperation := Operation as TFileSourceSplitOperation; SplitStatistics := SplitOperation.RetrieveStatistics; with SplitStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateCombineOperation(Operation: TFileSourceOperation); var CombineOperation: TFileSourceCombineOperation; CombineStatistics: TFileSourceCombineOperationStatistics; begin CombineOperation := Operation as TFileSourceCombineOperation; CombineStatistics := CombineOperation.RetrieveStatistics; with CombineStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFileFrom, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFileTo, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateCalcStatisticsOperation(Operation: TFileSourceOperation); var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; begin CalcStatisticsOperation := Operation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; with CalcStatisticsOperationStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetSpeedAndTime(Operation, 0, cnvFormatFileSize(FilesPerSecond, True)); end; end; procedure TfrmFileOp.UpdateCalcChecksumOperation(Operation: TFileSourceOperation); var CalcChecksumOperation: TFileSourceCalcChecksumOperation; CalcChecksumStatistics: TFileSourceCalcChecksumOperationStatistics; begin CalcChecksumOperation := Operation as TFileSourceCalcChecksumOperation; CalcChecksumStatistics := CalcChecksumOperation.RetrieveStatistics; with CalcChecksumStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(CurrentFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; procedure TfrmFileOp.UpdateTestArchiveOperation(Operation: TFileSourceOperation); var TestArchiveOperation: TFileSourceTestArchiveOperation; TestArchiveStatistics: TFileSourceTestArchiveOperationStatistics; begin TestArchiveOperation := Operation as TFileSourceTestArchiveOperation; TestArchiveStatistics := TestArchiveOperation.RetrieveStatistics; with TestArchiveStatistics do begin lblFileNameFrom.Caption := MinimizeFilePath(ArchiveFile, lblFileNameFrom.Canvas, lblFileNameFrom.Width); lblFileNameTo.Caption := MinimizeFilePath(CurrentFile, lblFileNameTo.Canvas, lblFileNameTo.Width); SetProgressBytes(Operation, pbCurrent, CurrentFileDoneBytes, CurrentFileTotalBytes); SetProgressBytes(Operation, pbTotal, DoneBytes, TotalBytes); SetSpeedAndTime(Operation, RemainingTime, cnvFormatFileSize(BytesPerSecond, True) + 'B'); end; end; function TfrmFileOp.GetProgressBarStyle: TProgressBarStyle; begin if (pbCurrent.Style = pbstMarquee) and (pbTotal.Style = pbstMarquee) then Result:= pbstMarquee else Result:= pbstNormal; end; procedure TfrmFileOp.SetProgressBarStyle(const AValue: TProgressBarStyle); begin pbCurrent.Style:= AValue; pbTotal.Style:= AValue; end; initialization Initialize; // Workaround: Internal error 200130121 {$IF (FPC_FULLVERSION < 030000) or (not DEFINED(WIN64))} finalization Finalize; {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/����������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717734�015324� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/uthumbfileview.pas����������������������������������������������������0000644�0001750�0000144�00000045632�12653160466�021070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uThumbFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Types, DCXmlConfig, uFileSource, uOrderedFileView, uDisplayFile, uFileViewWorker, uThumbnails, uFileView, uTypes, uFileViewWithGrid, uFile; type { TFileThumbnailsRetriever } TFileThumbnailsRetriever = class(TFileViewWorker) private FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FThumbnailManager: TThumbnailManager; FUpdateFileMethod: TUpdateFileMethod; FFileSource: IFileSource; FBitmapList: TBitmapList; {en Updates file in the file view with new data from FWorkerData. It is called from GUI thread. } procedure DoUpdateFile; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; ABitmapList: TBitmapList; AUpdateFileMethod: TUpdateFileMethod; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; end; TThumbFileView = class; { TThumbDrawGrid } TThumbDrawGrid = class(TFileViewGrid) private FThumbSize: TSize; FThumbView: TThumbFileView; FUpdateColCount: Integer; protected procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; protected procedure UpdateView; override; procedure CalculateColRowCount; override; procedure CalculateColumnWidth; override; function CellToIndex(ACol, ARow: Integer): Integer; override; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); override; public constructor Create(AOwner: TComponent; AParent: TWinControl); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; end; { TThumbFileView } TThumbFileView = class(TFileViewWithGrid) private FBitmapList: TBitmapList; FThumbnailManager: TThumbnailManager; procedure ThumbnailsRetrieverOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); protected procedure CreateDefault(AOwner: TWinControl); override; procedure AfterChangePath; override; procedure EnsureDisplayProperties; override; function GetFileViewGridClass: TFileViewGridClass; override; function GetVisibleFilesIndexes: TRange; override; procedure ShowRenameFileEdit(aFile: TFile); override; public constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TThumbFileView; override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; end; implementation uses LCLIntf, LCLType, LMessages, Graphics, Math, StdCtrls, uFileSourceProperty, uGlobs, uPixMapManager; { TFileThumbnailsRetriever } procedure TFileThumbnailsRetriever.DoUpdateFile; begin if not Aborted and Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; procedure TFileThumbnailsRetriever.Execute; var I: Integer; Bitmap: TBitmap; begin for I := 0 to FFileList.Count - 1 do begin if Aborted then Exit; FWorkingFile := FFileList.Files[I]; FWorkingUserData := FFileList.Data[I]; try if FWorkingFile.Tag < 0 then begin Bitmap:= FThumbnailManager.CreatePreview(FWorkingFile.FSFile); if Assigned(Bitmap) then begin FWorkingFile.Tag := FBitmapList.Add(Bitmap); end; end; if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); except on EFileNotFound do; end; end; end; constructor TFileThumbnailsRetriever.Create(AFileSource: IFileSource; AThread: TThread; ABitmapList: TBitmapList; AUpdateFileMethod: TUpdateFileMethod; AThumbnailManager: TThumbnailManager; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FBitmapList := ABitmapList; FThumbnailManager := AThumbnailManager; FUpdateFileMethod := AUpdateFileMethod; end; destructor TFileThumbnailsRetriever.Destroy; begin FFileList.Free; inherited Destroy; end; { TThumbDrawGrid } procedure TThumbDrawGrid.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; FileIndex: Integer; ACol, ARow: Integer; begin if FThumbView.IsLoadingFileList then begin FThumbView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. FThumbView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_UP, VK_DOWN, VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_LEFT, VK_RIGHT]) and (ssShift in Shift) then FThumbView.InvertActiveFile; case Key of VK_LEFT: begin if (Col - 1 < 0) and (Row > 0) then begin MoveExtend(False, ColCount - 1, Row - 1); Key:= 0; end; end; VK_RIGHT: begin if (CellToIndex(Col + 1, Row) < 0) then begin if (Row + 1 < RowCount) then MoveExtend(False, 0, Row + 1) else begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); end; Key:= 0; end; end; VK_HOME: begin MoveExtend(False, 0, 0); Key:= 0; end; VK_END: begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_DOWN: begin if (CellToIndex(Col, Row + 1) < 0) then begin IndexToCell(FThumbView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end end; end; inherited KeyDown(Key, Shift); if FThumbView.FRangeSelecting then begin FileIndex := CellToIndex(Col, Row); if FileIndex <> InvalidFileIndex then FThumbView.Selection(SavedKey, FileIndex); end; end; procedure TThumbDrawGrid.MouseMove(Shift: TShiftState; X, Y: Integer); const LastPos: Integer = 0; procedure Scroll(ScrollCode: SmallInt); var Msg: TLMVScroll; begin Msg.Msg := LM_VSCROLL; Msg.ScrollCode := ScrollCode; Msg.SmallPos := 1; // How many lines scroll Msg.ScrollBar := Handle; Dispatch(Msg); end; begin inherited MouseMove(Shift, X, Y); if DragManager.IsDragging or FThumbView.IsMouseSelecting then begin // Scroll at each 8 pixel mouse move if (Abs(LastPos - Y) > 8) then begin LastPos:= Y; if Y < DefaultRowHeight div 3 then Scroll(SB_LINEUP) else if Y > ClientHeight - DefaultRowHeight div 3 then Scroll(SB_LINEDOWN); end; end; end; procedure TThumbDrawGrid.UpdateView; var I: Integer; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; begin // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; // Search columns settings for the biggest font (in height). Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Style := gFonts[dcfMain].Style; Canvas.Font.Size := gFonts[dcfMain].Size; Result := gThumbSize.cy + Canvas.GetTextHeight('Wg') + 6; // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); end; begin // Fix border blinking while scroll window Flat := True; // gInterfaceFlat; // Calculate row height. DefaultRowHeight := CalculateDefaultRowHeight; // Calculate column width CalculateColumnWidth; // Refresh thumbnails if (FThumbSize.cx <> gThumbSize.cx) or (FThumbSize.cy <> gThumbSize.cy) then begin FThumbSize:= gThumbSize; FThumbView.FBitmapList.Clear; if Assigned(FThumbView.FAllDisplayFiles) then begin // Clear thumbnail image index for I := 0 to FThumbView.FAllDisplayFiles.Count - 1 do FThumbView.FAllDisplayFiles[I].Tag:= -1; end; FThumbView.Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TThumbDrawGrid.CalculateColRowCount; var AIndex, ACol, ARow: Integer; AColCount, ABorderWidth: Integer; begin if (csDesigning in ComponentState) or (FUpdateColCount > 0) then Exit; if not Assigned(FFileView.DisplayFiles) then Exit; BeginUpdate; Inc(FUpdateColCount); try if (ClientWidth > 0) and (DefaultColWidth > 0) then begin // Save active file index AIndex:= CellToIndex(Col, Row); ABorderWidth:= BorderWidth * 2; AColCount := (ClientWidth - ABorderWidth) div DefaultColWidth; if AColCount > 0 then begin ColCount := AColCount; RowCount := (FFileView.DisplayFiles.Count + AColCount - 1) div AColCount; if ColCount > 0 then begin ARow := (ClientWidth - ABorderWidth) div ColCount; // Update columns widths for ACol := 0 to ColCount - 1 do ColWidths[ACol]:= ARow; end; // Restore active file index if AIndex >= 0 then begin IndexToCell(AIndex, ACol, ARow); MoveExtend(False, ACol, ARow); end; end; end; finally EndUpdate(True); Dec(FUpdateColCount); end; end; procedure TThumbDrawGrid.CalculateColumnWidth; begin DefaultColWidth:= gThumbSize.cx + 4; end; function TThumbDrawGrid.CellToIndex(ACol, ARow: Integer): Integer; begin if (ARow < 0) or (ARow >= RowCount) or (ACol < 0) or (ACol >= ColCount) then Exit(-1); Result:= ARow * ColCount + ACol; if (Result < 0) or (Result >= FFileView.DisplayFiles.Count) then Result:= -1; end; procedure TThumbDrawGrid.IndexToCell(Index: Integer; out ACol, ARow: Integer); begin if (Index < 0) or (Index >= FFileView.DisplayFiles.Count) or (ColCount = 0) then begin ACol:= -1; ARow:= -1; end else begin ARow:= Index div ColCount; ACol:= Index mod ColCount; end; end; constructor TThumbDrawGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FThumbSize:= gThumbSize; FThumbView:= AParent as TThumbFileView; inherited Create(AOwner, AParent); // Fix horizontal bar flash ScrollBars := ssAutoVertical; end; procedure TThumbDrawGrid.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Idx: Integer; //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; var X, Y: Integer; IconID: PtrInt; Bitmap: TBitmap; begin IconID := AFile.Tag; if (AFile.FSFile.IsDirectory = False) and (IconID >= 0) and (IconID < FThumbView.FBitmapList.Count) then begin Bitmap:= FThumbView.FBitmapList[IconID]; X:= aRect.Left + (aRect.Right - aRect.Left - Bitmap.Width) div 2; Y:= aRect.Top + (iTextTop - aRect.Top - Bitmap.Height) div 2; Canvas.Draw(X, Y, Bitmap); end else begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // Center icon X:= aRect.Left + (aRect.Right - aRect.Left - gIconsSize) div 2; Y:= aRect.Top + (iTextTop - aRect.Top - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, X, Y); end; // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + 2, iTextTop - gIconsSize - 2 ); end; s:= AFile.DisplayStrings[0]; Y:= (ColWidths[ACol] - Canvas.TextWidth('W')); s:= FitFileName(s, Canvas, AFile.FSFile, Y); Canvas.TextOut(aRect.Left + 2, iTextTop, s); Canvas.Pen.Color:= InvertColor(gBackColor); Canvas.Frame(aRect.Left + 1, aRect.Top + 1, aRect.Right - 1, aRect.Bottom - Canvas.TextHeight('Pp') - 1); end; //of DrawIconCell //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin Idx:= CellToIndex(aCol, aRow); if (Idx >= 0) and (FThumbView.FFiles.Count > 0) then begin AFile:= FThumbView.FFiles[Idx]; FileSourceDirectAccess:= fspDirectAccess in FFileView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then FThumbView.MakeColumnsStrings(AFile); PrepareColors(AFile, aCol, aRow, aRect, aState); iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')); DrawIconCell; end else begin // Draw background. Canvas.Brush.Color := FThumbView.DimColor(gBackColor); Canvas.FillRect(aRect); end; DrawCellGrid(aCol, aRow, aRect, aState); DrawLines(Idx, aCol, aRow, aRect, aState); end; { TThumbFileView } procedure TThumbFileView.ThumbnailsRetrieverOnUpdate( const UpdatedFile: TDisplayFile; const UserData: Pointer); var OrigDisplayFile: TDisplayFile absolute UserData; begin if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). if UpdatedFile.Tag <> -1 then OrigDisplayFile.Tag := UpdatedFile.Tag; DoFileUpdated(OrigDisplayFile); end; procedure TThumbFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); FBitmapList:= TBitmapList.Create(True); FThumbnailManager:= TThumbnailManager.Create(gBackColor); end; procedure TThumbFileView.AfterChangePath; begin FBitmapList.Clear; inherited AfterChangePath; end; procedure TThumbFileView.EnsureDisplayProperties; var VisibleFiles: TRange; i: Integer; Bitmap: TBitmap; AFileList: TFVWorkerFileList = nil; Worker: TFileViewWorker; AFile: TDisplayFile; begin if (csDestroying in ComponentState) or (GetCurrentWorkType = fvwtCreate) or IsEmpty then Exit; if fspDirectAccess in FileSource.Properties then begin VisibleFiles := GetVisibleFilesIndexes; if not gListFilesInThread then begin for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.Tag < 0) and (AFile.FSFile.IsDirectory = False) then begin Bitmap:= FThumbnailManager.CreatePreview(AFile.FSFile); if Assigned(Bitmap) then begin AFile.Tag := FBitmapList.Add(Bitmap); end; end; end; end else begin try for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.Tag < 0) and (AFile.FSFile.IsDirectory = False) then begin if not Assigned(AFileList) then AFileList := TFVWorkerFileList.Create; AFileList.AddClone(AFile, AFile); end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFileThumbnailsRetriever.Create( FileSource, WorkersThread, FBitmapList, @ThumbnailsRetrieverOnUpdate, FThumbnailManager, AFileList); AddWorker(Worker, True); WorkersThread.QueueFunction(@Worker.StartParam); end; finally AFileList.Free; end; end; end; inherited EnsureDisplayProperties; end; function TThumbFileView.GetFileViewGridClass: TFileViewGridClass; begin Result:= TThumbDrawGrid; end; function TThumbFileView.GetVisibleFilesIndexes: TRange; begin with dgPanel do begin if (TopRow < 0) or (csLoading in ComponentState) then begin Result.First:= 0; Result.Last:= -1; end else begin Result.First:= (TopRow * VisibleColCount - 1); Result.Last:= (TopRow + VisibleRowCount + 1) * VisibleColCount - 1; if Result.First < 0 then Result.First:= 0; if Result.Last >= FFiles.Count then Result.Last:= FFiles.Count - 1; end; end; end; procedure TThumbFileView.ShowRenameFileEdit(aFile: TFile); var ARect: TRect; ALeft, ATop, AWidth, AHeight: Integer; begin if not edtRename.Visible then begin edtRename.Font.Name := gFonts[dcfMain].Name; edtRename.Font.Size := gFonts[dcfMain].Size;; edtRename.Font.Style := gFonts[dcfMain].Style; with dgPanel do begin ARect := CellRect(Col, Row); ATop := ARect.Bottom - Canvas.TextHeight('Wg') - 4; ALeft := ARect.Left; AWidth := ARect.Right - ALeft; AHeight := ARect.Bottom - ATop; end; edtRename.SetBounds(ALeft, ATop, AWidth, AHeight); end; inherited ShowRenameFileEdit(AFile); end; constructor TThumbFileView.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; constructor TThumbFileView.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags); var I: Integer; begin inherited Create(AOwner, AFileView, AFlags); if Assigned(FAllDisplayFiles) then begin // Clear thumbnail image index for I := 0 to FAllDisplayFiles.Count - 1 do FAllDisplayFiles[I].Tag:= -1; // Load thumbnails Notify([fvnVisibleFilePropertiesChanged]); end; end; destructor TThumbFileView.Destroy; begin inherited Destroy; FreeAndNil(FBitmapList); FreeAndNil(FThumbnailManager); end; function TThumbFileView.Clone(NewParent: TWinControl): TThumbFileView; begin Result := TThumbFileView.Create(NewParent, Self); end; procedure TThumbFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'thumbnails'); end; end. ������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ubrieffileview.pas����������������������������������������������������0000644�0001750�0000144�00000035326�12653160466�021037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uBriefFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, LMessages, Grids, Graphics, uDisplayFile, DCXmlConfig, uTypes, uFileViewWithGrid, uFile, uFileSource; type TBriefFileView = class; { TBriefDrawGrid } TBriefDrawGrid = class(TFileViewGrid) protected FBriefView: TBriefFileView; protected procedure UpdateView; override; procedure CalculateColRowCount; override; procedure CalculateColumnWidth; override; function CellToIndex(ACol, ARow: Integer): Integer; override; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); override; protected procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override; public constructor Create(AOwner: TComponent; AParent: TWinControl); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; end; { TBriefFileView } TBriefFileView = class (TFileViewWithGrid) protected function GetFileViewGridClass: TFileViewGridClass; override; procedure ShowRenameFileEdit(aFile: TFile); override; function GetVisibleFilesIndexes: TRange; override; public function Clone(NewParent: TWinControl): TBriefFileView; override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; end; implementation uses LCLIntf, LCLType, LCLVersion, LCLProc, Math, StdCtrls, uGlobs, uPixmapManager, uKeyboard, fMain, uFileSourceProperty, uOrderedFileView; { TBriefDrawGrid } procedure TBriefDrawGrid.UpdateView; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; MaxFontHeight: Integer = 0; CurrentHeight: Integer; begin // Start with height of the icons. if gShowIcons <> sim_none then MaxFontHeight := gIconsSize; // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; // Search columns settings for the biggest font (in height). Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Style := gFonts[dcfMain].Style; Canvas.Font.Size := gFonts[dcfMain].Size; CurrentHeight := Canvas.GetTextHeight('Wg'); MaxFontHeight := Max(MaxFontHeight, CurrentHeight); // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); Result := MaxFontHeight; end; var TempRowHeight: Integer; begin // Fix border blinking while scroll window Flat := True; // gInterfaceFlat; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then DefaultRowHeight := TempRowHeight; // Calculate column width CalculateColumnWidth; end; procedure TBriefDrawGrid.CalculateColRowCount; var ARowCount: Integer; AIndex, ACol, ARow: Integer; begin if (csDesigning in ComponentState) then Exit; if not Assigned(FBriefView.FFiles) then Exit; if (ClientHeight > 0) and (DefaultRowHeight > 0) then begin // Save active file index AIndex:= CellToIndex(Col, Row); ARowCount := (ClientHeight - BorderWidth * 2) div DefaultRowHeight; if ARowCount > 0 then begin RowCount := ARowCount; ColCount := (FBriefView.FFiles.Count + ARowCount - 1) div ARowCount; // Restore active file index if AIndex >= 0 then begin IndexToCell(AIndex, ACol, ARow); MoveExtend(False, ACol, ARow); end; end; end; Invalidate; end; procedure TBriefDrawGrid.CalculateColumnWidth; var I, J, L, M: Integer; begin if not Assigned(FBriefView.FFiles) then Exit; if gBriefViewMode = bvmFixedWidth then DefaultColWidth:= Min(ClientWidth, gBriefViewFixedWidth) else if gBriefViewMode = bvmFixedCount then DefaultColWidth:= ClientWidth div Max(1, gBriefViewFixedCount) else if FBriefView.FFiles.Count < 2 then DefaultColWidth:= ClientWidth div 3 else begin J:= 0; M:= 0; for I:= 0 to FBriefView.FFiles.Count - 1 do begin L:= Length(FBriefView.FFiles[I].FSFile.Name); if L > M then begin M:= L; J:= I; end; end; Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Size := gFonts[dcfMain].Size; Canvas.Font.Style := gFonts[dcfMain].Style; M:= Canvas.TextWidth(FBriefView.FFiles[J].FSFile.Name + 'WWW'); if (gShowIcons = sim_none) then M:= M + 2 else M:= M + gIconsSize + 4; if M > ClientWidth then M:= ClientWidth - 4; DefaultColWidth:= M; end; end; function TBriefDrawGrid.CellToIndex(ACol, ARow: Integer): Integer; begin if (ARow < 0) or (ARow >= RowCount) or (ACol < 0) or (ACol >= ColCount) then Exit(-1); Result:= ACol * RowCount + ARow; if (Result < 0) or (Result >= FBriefView.FFiles.Count) then Result:= -1; end; procedure TBriefDrawGrid.IndexToCell(Index: Integer; out ACol, ARow: Integer); begin if (Index < 0) or (Index >= FBriefView.FFiles.Count) or (RowCount = 0) then begin ACol:= -1; ARow:= -1; end else begin ACol:= Index div RowCount; ARow:= Index mod RowCount; end; end; procedure TBriefDrawGrid.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; FileIndex: Integer; ACol, ARow: Integer; begin if FBriefView.IsLoadingFileList then begin FBriefView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. FBriefView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_LEFT, VK_RIGHT, VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_UP, VK_DOWN]) and (ssShift in Shift) then FBriefView.InvertActiveFile; case Key of VK_LEFT: begin if (Col - 1 < 0) then begin MoveExtend(False, 0, 0); Key:= 0; end; end; VK_RIGHT: begin if (CellToIndex(Col + 1, Row) < 0) then begin IndexToCell(FBriefView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; end; VK_PRIOR: begin FileIndex:= CellToIndex(Col, Row) - (VisibleRowCount - 1); if FileIndex < 0 then FileIndex:= 0; IndexToCell(FileIndex, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_NEXT: begin FileIndex:= CellToIndex(Col, Row) + (VisibleRowCount - 1); if FileIndex >= FBriefView.FFiles.Count then FileIndex:= FBriefView.FFiles.Count - 1; IndexToCell(FileIndex, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_HOME: begin MoveExtend(False, 0, 0); Key:= 0; end; VK_END: begin IndexToCell(FBriefView.FFiles.Count - 1, ACol, ARow); MoveExtend(False, ACol, ARow); Key:= 0; end; VK_UP, VK_DOWN: begin if (CellToIndex(Col, Row) >= FBriefView.FFiles.Count - 1) and (Key = VK_DOWN) then begin Key:= 0; end else if ((Row = RowCount-1) and (Key = VK_DOWN)) then begin if (Col < ColCount - 1) then begin Row:= 0; Col:= Col + 1; end; Key:= 0; end else if (Row = FixedRows) and (Key = VK_UP) then begin if (Col > 0) then begin Row:= RowCount - 1; Col:= Col - 1; end; Key:= 0; end; end; end; inherited KeyDown(Key, Shift); if FBriefView.FRangeSelecting then begin FileIndex := CellToIndex(Col, Row); if FileIndex <> InvalidFileIndex then FBriefView.Selection(SavedKey, FileIndex); end; end; procedure TBriefDrawGrid.MouseMove(Shift: TShiftState; X, Y: Integer); procedure Scroll(ScrollCode: SmallInt); var Msg: TLMHScroll; begin Msg.Msg := LM_HSCROLL; Msg.ScrollCode := ScrollCode; Msg.SmallPos := 1; // How many lines scroll Msg.ScrollBar := Handle; Dispatch(Msg); end; begin inherited MouseMove(Shift, X, Y); if DragManager.IsDragging or FBriefView.IsMouseSelecting then begin if X < 25 then Scroll(SB_LINEUP) else if X > ClientWidth - 25 then Scroll(SB_LINEDOWN); end; end; function TBriefDrawGrid.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; begin if not FBriefView.IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size>MIN_FONT_SIZE_MAIN) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size-1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Result:=True; Exit; end; Result:= inherited DoMouseWheelDown(Shift, MousePos); Result:= Perform(LM_HSCROLL, SB_LINERIGHT, 0) = 0; end else Result := True; // Handled end; function TBriefDrawGrid.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; begin if not FBriefView.IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size>MIN_FONT_SIZE_MAIN) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Result:=True; Exit; end; Result:= inherited DoMouseWheelUp(Shift, MousePos); Result:= Perform(LM_HSCROLL, SB_LINELEFT, 0) = 0; end else Result := True; // Handled end; constructor TBriefDrawGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FBriefView:= AParent as TBriefFileView; inherited Create(AOwner, AParent); // Fix vertical bar flash ScrollBars := ssAutoHorizontal; end; procedure TBriefDrawGrid.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Idx: Integer; //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; begin if (gShowIcons <> sim_none) then begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // center icon vertically Y:= aRect.Top + (RowHeights[ARow] - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, aRect.Left + 1, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + 1, Y ); end; end; // Print filename with align Y:= (DefaultColWidth - 2 - Canvas.TextWidth('I')); if (gShowIcons <> sim_none) then Y:= Y - gIconsSize - 2; if (not gBriefViewFileExtAligned) or (AFile.FSFile.Extension = '') then begin s:= AFile.DisplayStrings[0]; s:= FitFileName(s, Canvas, AFile.FSFile, Y); end else begin // Right align extention print s:= AFile.FSFile.Extension; Canvas.TextOut(aRect.Left + DefaultColWidth - Canvas.TextWidth(s + 'I'), iTextTop, s); s:= AFile.FSFile.NameNoExt; s:= FitFileName(s, Canvas, AFile.FSFile, Y - Canvas.TextWidth(AFile.FSFile.Extension + 'I')); end; if (gShowIcons <> sim_none) then Canvas.TextOut(aRect.Left + gIconsSize + 4, iTextTop, s) else Canvas.TextOut(aRect.Left + 2, iTextTop, s); end; //of DrawIconCell //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin Idx:= CellToIndex(aCol, aRow); if (Idx >= 0) and (FBriefView.FFiles.Count > 0) then begin AFile:= FBriefView.FFiles[Idx]; FileSourceDirectAccess:= fspDirectAccess in FBriefView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then FBriefView.MakeColumnsStrings(AFile); PrepareColors(aFile, aCol, aRow, aRect, aState); iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')) div 2; DrawIconCell; end else begin // Draw background. Canvas.Brush.Color := FBriefView.DimColor(gBackColor); Canvas.FillRect(aRect); end; DrawCellGrid(aCol, aRow, aRect, aState); DrawLines(Idx, aCol, aRow, aRect, aState); end; { TBriefFileView } function TBriefFileView.GetFileViewGridClass: TFileViewGridClass; begin Result:= TBriefDrawGrid; end; procedure TBriefFileView.ShowRenameFileEdit(aFile: TFile); var ALeft, ATop, AWidth, AHeight: Integer; begin if not edtRename.Visible then begin edtRename.Font.Name := gFonts[dcfMain].Name; edtRename.Font.Size := gFonts[dcfMain].Size;; edtRename.Font.Style := gFonts[dcfMain].Style; dgPanel.LeftCol:= dgPanel.Col; ATop := dgPanel.CellRect(dgPanel.Col, dgPanel.Row).Top - 2; ALeft := dgPanel.CellRect(dgPanel.Col, dgPanel.Row).Left; if gShowIcons <> sim_none then Inc(ALeft, gIconsSize + 2); AWidth := dgPanel.ColWidths[dgPanel.Col] - ALeft; AHeight := dgPanel.RowHeights[dgPanel.Row] + 4; edtRename.SetBounds(ALeft, ATop, AWidth, AHeight); end; inherited ShowRenameFileEdit(AFile); end; function TBriefFileView.GetVisibleFilesIndexes: TRange; begin with dgPanel do begin if (TopRow < 0) or (csLoading in ComponentState) then begin Result.First:= 0; Result.Last:= -1; end else begin Result.First:= (LeftCol * VisibleRowCount - 1); Result.Last:= (LeftCol + VisibleColCount + 1) * VisibleRowCount - 1; if Result.First < 0 then Result.First:= 0; if Result.Last >= FFiles.Count then Result.Last:= FFiles.Count - 1; end; end; end; function TBriefFileView.Clone(NewParent: TWinControl): TBriefFileView; begin Result := TBriefFileView.Create(NewParent, Self); end; procedure TBriefFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'brief'); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ucolumnsfileviewvtv.pas�����������������������������������������������0000644�0001750�0000144�00000172246�12646261026�022167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uColumnsFileViewVtv; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, Forms, ExtCtrls, Grids, LMessages, LCLIntf, LCLType, Menus, uTypes, uFile, uFileProperty, uFileView, uFileViewWithMainCtrl, uFileSource, uDisplayFile, uColumns, uFileSorting, DCXmlConfig, DCClassesUtf8, VirtualTrees; type TFunctionDime = function (AColor: TColor): TColor of object; TColumnsSortDirections = array of uFileSorting.TSortDirection; TColumnsFileViewVTV = class; TNodeRange = record First: PVirtualNode; Last: PVirtualNode; end; TColumnsDrawTreeRecord = record end; // We don't need anything in it, just Node^.Index. PColumnsDrawTreeRecord = ^TColumnsDrawTreeRecord; TColumnResized = procedure (Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer) of object; { TColumnsDrawTree } TColumnsDrawTree = class(TVirtualDrawTree) private ColumnsView: TColumnsFileViewVTV; function GetGridHorzLine: Boolean; function GetGridVertLine: Boolean; procedure SetGridHorzLine(const AValue: Boolean); procedure SetGridVertLine(const AValue: Boolean); function GetNodeFile(Node: PVirtualNode): TDisplayFile; function GetVisibleNodes: TNodeRange; procedure SetAllRowsHeights(ARowHeight: Cardinal); protected function CanAutoScroll: Boolean; override; function CanScroll(const ClientMousePos: TPoint): Boolean; override; function DetermineScrollDirections(X, Y: Integer): TScrollDirections; override; function DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; procedure InitializeWnd; override; procedure FinalizeWnd; override; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; public ColumnsOwnDim: TFunctionDime; constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure AfterConstruction; override; procedure UpdateView; function MouseOnGrid(X, Y: LongInt): Boolean; // Returns height of all the header rows. function GetHeaderHeight: Integer; function GetVisibleIndexes: TRange; property GridVertLine: Boolean read GetGridVertLine write SetGridVertLine; property GridHorzLine: Boolean read GetGridHorzLine write SetGridHorzLine; end; { TColumnsFileViewVTV } TColumnsFileViewVTV = class(TFileViewWithMainCtrl) private FColumnsSortDirections: TColumnsSortDirections; FFileNameColumn: Integer; FExtensionColumn: Integer; pmColumnsMenu: TPopupMenu; dgPanel: TColumnsDrawTree; FOnColumnResized: TColumnResized; function GetColumnsClass: TPanelColumnsClass; procedure SetRowCount(Count: Integer); procedure SetFilesDisplayItems; procedure SetColumns; procedure MakeVisible(Node: PVirtualNode); procedure DoSelectionChanged(Node: PVirtualNode); overload; {en Format and cache all columns strings for the file. } procedure MakeColumnsStrings(AFile: TDisplayFile); procedure MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); procedure ClearAllColumnsStrings; procedure EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); {en Translates file sorting by functions to sorting directions of columns. } procedure SetColumnsSortDirections; {en Checks which file properties are needed for displaying. } function GetFilePropertiesNeeded: TFilePropertiesTypes; // -- Events -------------------------------------------------------------- procedure dgPanelAdvancedHeaderDraw(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); procedure dgPanelAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); procedure dgPanelBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); procedure dgPanelHeaderDrawQueryElements(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); procedure dgPanelDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean); procedure dgPanelDragDrop(Sender: TBaseVirtualTree; Source: TObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); procedure dgPanelFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); procedure dgPanelFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); procedure dgPanelHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer); procedure dgPanelResize(Sender: TObject); procedure dgPanelColumnResize(Sender: TVTHeader; Column: TColumnIndex); procedure ColumnsMenuClick(Sender: TObject); protected procedure CreateDefault(AOwner: TWinControl); override; procedure BeforeMakeFileList; override; procedure ClearAfterDragDrop; override; procedure DisplayFileListChanged; override; procedure DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure DoUpdateView; override; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(FileIndex: PtrInt): TRect; override; function GetVisibleFilesIndexes: TRange; override; procedure RedrawFile(FileIndex: PtrInt); override; procedure RedrawFile(DisplayFile: TDisplayFile); override; procedure RedrawFiles; override; procedure SetActiveFile(FileIndex: PtrInt); override; procedure SetSorting(const NewSortings: TFileSortings); override; procedure ShowRenameFileEdit(AFile: TFile); override; public ActiveColm: String; ActiveColmSlave: TPanelColumnsClass; isSlave:boolean; //--------------------- constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TColumnsFileViewVTV; override; procedure CloneTo(FileView: TFileView); override; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure LoadConfiguration(Section: String; TabIndex: Integer); override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure UpdateColumnsView; procedure SetGridFunctionDim(ExternalDimFunction: TFunctionDime); property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized; published procedure cm_CopyFileDetailsToClip(const Params: array of string); end; TColumnsFileView = TColumnsFileViewVTV; implementation uses LazUTF8, Clipbrd, uLng, uGlobs, uPixmapManager, uDebug, DCStrUtils, uDCUtils, math, fMain, fOptions, uFileViewNotebook, uOrderedFileView, uFileSourceProperty, uKeyboard, uFileFunctions, uFormCommands, uFileViewWithGrid, fOptionsCustomColumns; type TEachViewCallbackReason = (evcrUpdateColumns); TEachViewCallbackMsg = record Reason: TEachViewCallbackReason; UpdatedColumnsSetName: String; NewColumnsSetName: String; // If columns name renamed end; PEachViewCallbackMsg = ^TEachViewCallbackMsg; procedure TColumnsFileViewVTV.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); SetColumnsSortDirections; end; procedure TColumnsFileViewVTV.LoadConfiguration(Section: String; TabIndex: Integer); var ColumnsClass: TPanelColumnsClass; SortCount: Integer; SortColumn: Integer; SortDirection: uFileSorting.TSortDirection; i: Integer; sIndex: String; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin sIndex := IntToStr(TabIndex); ActiveColm := gIni.ReadString(Section, sIndex + '_columnsset', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; SortCount := gIni.ReadInteger(Section, sIndex + '_sortcount', 0); for i := 0 to SortCount - 1 do begin SortColumn := gIni.ReadInteger(Section, sIndex + '_sortcolumn' + IntToStr(i), -1); if (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := Column.GetColumnFunctions; SortDirection := uFileSorting.TSortDirection(gIni.ReadInteger(Section, sIndex + '_sortdirection' + IntToStr(i), Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end; end; inherited SetSorting(NewSorting); end; procedure TColumnsFileViewVTV.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var ColumnsClass: TPanelColumnsClass; SortColumn: Integer; SortDirection: uFileSorting.TSortDirection; ColumnsViewNode: TXmlNode; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin inherited LoadConfiguration(AConfig, ANode); // Try to read new view-specific node. ColumnsViewNode := AConfig.FindNode(ANode, 'ColumnsView'); if Assigned(ColumnsViewNode) then ANode := ColumnsViewNode; ActiveColm := AConfig.GetValue(ANode, 'ColumnsSet', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; ANode := ANode.FindNode('Sorting'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Sort') = 0 then begin if AConfig.TryGetValue(ANode, 'Column', SortColumn) and (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := Column.GetColumnFunctions; SortDirection := uFileSorting.TSortDirection(AConfig.GetValue(ANode, 'Direction', Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; inherited SetSorting(NewSorting); end; end; procedure TColumnsFileViewVTV.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); begin inherited SaveConfiguration(AConfig, ANode); AConfig.SetAttr(ANode, 'Type', 'columns'); ANode := AConfig.FindNode(ANode, 'ColumnsView', True); AConfig.ClearNode(ANode); AConfig.SetValue(ANode, 'ColumnsSet', ActiveColm); end; procedure TColumnsFileViewVTV.dgPanelDragOver(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean); begin MainControlDragOver(Sender, Source, Pt.x, Pt.y, State, Accept); end; procedure TColumnsFileViewVTV.dgPanelDragDrop(Sender: TBaseVirtualTree; Source: TObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); begin MainControlDragDrop(Sender, Source, Pt.x, Pt.y); end; procedure TColumnsFileViewVTV.dgPanelFocusChanged(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex); begin dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions - [toDisableAutoscrollOnFocus]; if Assigned(Node) then DoFileIndexChanged(Node^.Index); end; procedure TColumnsFileViewVTV.dgPanelFocusChanging(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean); begin if (OldColumn <> NewColumn) and (OldNode = NewNode) then dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions + [toDisableAutoscrollOnFocus] else dgPanel.TreeOptions.AutoOptions := dgPanel.TreeOptions.AutoOptions - [toDisableAutoscrollOnFocus]; end; procedure TColumnsFileViewVTV.dgPanelHeaderClick(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ShiftState : TShiftState; SortingDirection : uFileSorting.TSortDirection; ColumnsClass: TPanelColumnsClass; PanelColumn: TPanelColumn; NewSorting: TFileSortings; SortFunctions: TFileFunctions; I : Integer; Point: TPoint; MI: TMenuItem; begin case Button of mbLeft: begin ColumnsClass := GetColumnsClass; PanelColumn := ColumnsClass.GetColumnItem(Column); if Assigned(PanelColumn) then begin NewSorting := Sorting; SortFunctions := PanelColumn.GetColumnFunctions; if Length(SortFunctions) = 0 then Exit; ShiftState := GetKeyShiftStateEx; if [ssShift, ssCtrl] * ShiftState = [] then begin SortingDirection := GetSortDirection(NewSorting, SortFunctions); if SortingDirection = sdNone then begin // If there is no direction currently, sort "sdDescending" for size and date. // Commonly, we search seek more often for most recent files then older any others. // When sorting by size, often it is to find larger file to make room. // Anyway, it makes DC like TC, and also, Windows Explorer do the same. case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:= uFileSorting.sdDescending; else SortingDirection:= uFileSorting.sdAscending; end; end else begin SortingDirection := ReverseSortDirection(SortingDirection); end; NewSorting := nil; end else begin // If there is no direction currently, sort "sdDescending" for size and date (see previous comment). case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:= uFileSorting.sdDescending; else SortingDirection:= uFileSorting.sdAscending; end; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); SetSorting(NewSorting); end; end; mbRight: begin //Load Columns into menu pmColumnsMenu.Items.Clear; if ColSet.Items.Count>0 then begin For I:=0 to ColSet.Items.Count-1 do begin MI:=TMenuItem.Create(pmColumnsMenu); MI.Tag:=I; MI.Caption:=ColSet.Items[I]; MI.Checked:=(ColSet.Items[I] = ActiveColm); MI.OnClick:=@ColumnsMenuClick; pmColumnsMenu.Items.Add(MI); end; end; //- MI:=TMenuItem.Create(pmColumnsMenu); MI.Caption:='-'; pmColumnsMenu.Items.Add(MI); //Configure custom columns MI:=TMenuItem.Create(pmColumnsMenu); MI.Tag:=1001; MI.Caption:=rsMenuConfigureCustomColumns; MI.OnClick:=@ColumnsMenuClick; pmColumnsMenu.Items.Add(MI); Point := dgPanel.ClientToScreen(Classes.Point(0,0)); Point.X := Point.X + X - 50; Point.Y := Point.Y + dgPanel.GetHeaderHeight; pmColumnsMenu.PopUp(Point.X, Point.Y); end; end; end; procedure TColumnsFileViewVTV.dgPanelAdvancedHeaderDraw(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); var SortingDirection: uFileSorting.TSortDirection; TitleX: Integer; ColumnsSet: TPanelColumnsClass; aCol: Integer; iTextTop: Integer; s: String; aRect: TRect; begin aCol := PaintInfo.Column.Index; aRect := PaintInfo.PaintRectangle; // PaintRectangle is reduced by 2 pixels on each side even with owner draw, // so revert this change. InflateRect(aRect, 2, 2); ColumnsSet := GetColumnsClass; iTextTop := aRect.Top + (PaintInfo.Column.Owner.Header.Height - PaintInfo.TargetCanvas.TextHeight('Wg')) div 2; TitleX := 0; s := ColumnsSet.GetColumnTitle(ACol); SortingDirection := FColumnsSortDirections[ACol]; if SortingDirection <> sdNone then begin TitleX := TitleX + gIconsSize; PixMapManager.DrawBitmap( PixMapManager.GetIconBySortingDirection(SortingDirection), PaintInfo.TargetCanvas, aRect.Left, aRect.Top + (PaintInfo.Column.Owner.Header.Height - gIconsSize) div 2); end; TitleX := max(TitleX, 4); if gCutTextToColWidth then begin if (aRect.Right - aRect.Left) < TitleX then // Column too small to display text. Exit else while PaintInfo.TargetCanvas.TextWidth(s) - ((aRect.Right - aRect.Left) - TitleX) > 0 do UTF8Delete(s, UTF8Length(s), 1); end; PaintInfo.TargetCanvas.Brush.Style := bsClear; PaintInfo.TargetCanvas.TextOut(aRect.Left + TitleX, iTextTop, s); end; procedure TColumnsFileViewVTV.dgPanelAfterItemPaint(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); var ColumnsSet: TPanelColumnsClass; IsFocused: Boolean; procedure DrawLines; begin // Draw focus rect. if not ColumnsSet.UseFrameCursor and IsFocused and Active and ColumnsSet.UseCursorBorder then begin TargetCanvas.Pen.Color := ColumnsSet.CursorBorderColor; TargetCanvas.Brush.Color := ColumnsSet.CursorBorderColor; TargetCanvas.DrawFocusRect(ItemRect); end; end; begin IsFocused := Node = dgPanel.FocusedNode; ColumnsSet := GetColumnsClass; DrawLines; end; procedure TColumnsFileViewVTV.dgPanelBeforeItemErase(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); begin EraseAction := eaNone; end; procedure TColumnsFileViewVTV.dgPanelHeaderDrawQueryElements(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); begin Elements := [hpeSortGlyph, hpeText]; end; procedure TColumnsFileViewVTV.dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEUP, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEUP, 0); else Handled:= False; end; end; end; procedure TColumnsFileViewVTV.dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEDOWN, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEDOWN, 0); else Handled:= False; end; end; end; procedure TColumnsFileViewVTV.dgPanelScroll(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer); begin if DeltaY <> 0 then Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileViewVTV.dgPanelResize(Sender: TObject); begin Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileViewVTV.dgPanelColumnResize(Sender: TVTHeader; Column: TColumnIndex); begin if Assigned(FOnColumnResized) then begin FOnColumnResized(Self, Column, Sender.Columns.Items[Column].Width); end; end; procedure TColumnsFileViewVTV.ShowRenameFileEdit(AFile: TFile); var ALeft, ATop, AWidth, AHeight: Integer; aRect: TRect; begin if FFileNameColumn <> -1 then begin if not edtRename.Visible then begin edtRename.Font.Name := GetColumnsClass.GetColumnFontName(FFileNameColumn); edtRename.Font.Size := GetColumnsClass.GetColumnFontSize(FFileNameColumn); edtRename.Font.Style := GetColumnsClass.GetColumnFontStyle(FFileNameColumn); aRect := dgPanel.GetDisplayRect(dgPanel.FocusedNode, FFileNameColumn, False); ATop := aRect.Top - 2; ALeft := aRect.Left; if gShowIcons <> sim_none then Inc(ALeft, gIconsSize + 2); AWidth := aRect.Right - aRect.Left; if Succ(FFileNameColumn) = FExtensionColumn then Inc(AWidth, dgPanel.Header.Columns[FExtensionColumn].Width); AHeight := dgPanel.FocusedNode^.NodeHeight + 4; edtRename.SetBounds(ALeft, ATop, AWidth, AHeight); end; inherited ShowRenameFileEdit(AFile); end; end; procedure TColumnsFileViewVTV.RedrawFile(FileIndex: PtrInt); begin dgPanel.InvalidateNode(PVirtualNode(FFiles[FileIndex].DisplayItem)); end; procedure TColumnsFileViewVTV.RedrawFile(DisplayFile: TDisplayFile); begin dgPanel.InvalidateNode(PVirtualNode(DisplayFile.DisplayItem)); end; procedure TColumnsFileViewVTV.SetColumnsSortDirections; var Columns: TPanelColumnsClass; function SetSortDirection(ASortFunction: TFileFunction; ASortDirection: uFileSorting.TSortDirection; Overwrite: Boolean): Boolean; var k, l: Integer; ColumnFunctions: TFileFunctions; begin for k := 0 to Columns.Count - 1 do begin ColumnFunctions := Columns.GetColumnItem(k).GetColumnFunctions; for l := 0 to Length(ColumnFunctions) - 1 do if ColumnFunctions[l] = ASortFunction then begin if Overwrite or (FColumnsSortDirections[k] = sdNone) then begin FColumnsSortDirections[k] := ASortDirection; Exit(True); end; end; end; Result := False; end; var i, j: Integer; ASortings: TFileSortings; begin Columns := GetColumnsClass; ASortings := Sorting; SetLength(FColumnsSortDirections, Columns.Count); for i := 0 to Length(FColumnsSortDirections) - 1 do FColumnsSortDirections[i] := sdNone; for i := 0 to Length(ASortings) - 1 do begin for j := 0 to Length(ASortings[i].SortFunctions) - 1 do begin // Search for the column containing the sort function and add sorting // by that column. If function is Name and it is not found try searching // for NameNoExtension + Extension and vice-versa. if not SetSortDirection(ASortings[i].SortFunctions[j], ASortings[i].SortDirection, True) then begin if ASortings[i].SortFunctions[j] = fsfName then begin SetSortDirection(fsfNameNoExtension, ASortings[i].SortDirection, False); SetSortDirection(fsfExtension, ASortings[i].SortDirection, False); end else if ASortings[i].SortFunctions[j] in [fsfNameNoExtension, fsfExtension] then begin SetSortDirection(fsfName, ASortings[i].SortDirection, False); end; end; end; end; end; procedure TColumnsFileViewVTV.SetFilesDisplayItems; var Node: PVirtualNode; Index: Integer = 0; begin Node := dgPanel.GetFirstNoInit; while Assigned(Node) do begin FFiles[Index].DisplayItem := Node; Inc(Index); Node := Node^.NextSibling; end; end; function TColumnsFileViewVTV.GetFilePropertiesNeeded: TFilePropertiesTypes; var i, j: Integer; ColumnsClass: TPanelColumnsClass; Column: TPanelColumn; FileFunctionsUsed: TFileFunctions; begin // By default always use some properties. Result := [fpName, fpSize, // For info panel (total size, selected size) fpAttributes, // For distinguishing directories fpLink, // For distinguishing directories (link to dir) and link icons fpModificationTime // For selecting/coloring files (by SearchTemplate) ]; ColumnsClass := GetColumnsClass; FFileNameColumn := -1; FExtensionColumn := -1; // Scan through all columns. for i := 0 to ColumnsClass.Count - 1 do begin Column := ColumnsClass.GetColumnItem(i); FileFunctionsUsed := Column.GetColumnFunctions; if Length(FileFunctionsUsed) > 0 then begin // Scan through all functions in the column. for j := Low(FileFunctionsUsed) to High(FileFunctionsUsed) do begin // Add file properties needed to display the function. Result := Result + TFileFunctionToProperty[FileFunctionsUsed[j]]; if (FFileNameColumn = -1) and (FileFunctionsUsed[j] in [fsfName, fsfNameNoExtension]) then FFileNameColumn := i; if (FExtensionColumn = -1) and (FileFunctionsUsed[j] in [fsfExtension]) then FExtensionColumn := i; end; end; end; end; function TColumnsFileViewVTV.GetFileRect(FileIndex: PtrInt): TRect; begin Result := dgPanel.GetDisplayRect(PVirtualNode(FFiles[FileIndex].DisplayItem), 0, False); end; function TColumnsFileViewVTV.GetVisibleFilesIndexes: TRange; begin Result := dgPanel.GetVisibleIndexes; end; procedure TColumnsFileViewVTV.SetRowCount(Count: Integer); begin if Count <> dgPanel.RootNodeCount then begin FUpdatingActiveFile := True; dgPanel.BeginUpdate; // If new node count is less then first delete all nodes and then create // new ones, because deleting only some nodes is much slower then deleting all. if Count < dgPanel.RootNodeCount then dgPanel.RootNodeCount := 0; dgPanel.RootNodeCount := Count; dgPanel.EndUpdate; FUpdatingActiveFile := False; end; end; procedure TColumnsFileViewVTV.SetColumns; var x: Integer; ColumnsClass: TPanelColumnsClass; col: TVirtualTreeColumn; begin // setup column widths ColumnsClass := GetColumnsClass; dgPanel.Header.Columns.Clear; dgPanel.Header.Columns.BeginUpdate; try for x:= 0 to ColumnsClass.ColumnsCount - 1 do begin col := dgPanel.Header.Columns.Add; col.Width := ColumnsClass.GetColumnWidth(x); //col.Text := ColumnsClass.GetColumnTitle(x); // I think not needed, as we draw text ourselves. col.Margin := 0; col.Spacing := 0; end; if gAutoFillColumns then begin if (gAutoSizeColumn = 0) then dgPanel.Header.AutoSizeIndex := gAutoSizeColumn else dgPanel.Header.AutoSizeIndex := col.Index; end; finally dgPanel.Header.Columns.EndUpdate; end; end; procedure TColumnsFileViewVTV.MakeVisible(Node: PVirtualNode); begin dgPanel.ScrollIntoView(Node, False, False); end; procedure TColumnsFileViewVTV.SetActiveFile(FileIndex: PtrInt); begin dgPanel.FocusedNode := PVirtualNode(FFiles[FileIndex].DisplayItem); end; procedure TColumnsFileViewVTV.RedrawFiles; begin dgPanel.Invalidate; end; procedure TColumnsFileViewVTV.UpdateColumnsView; var ColumnsClass: TPanelColumnsClass; OldFilePropertiesNeeded: TFilePropertiesTypes; begin ClearAllColumnsStrings; // If the ActiveColm set doesn't exist this will retrieve either // the first set or the default set. ColumnsClass := GetColumnsClass; // Set name in case a different set was loaded. ActiveColm := ColumnsClass.Name; SetColumns; SetColumnsSortDirections; dgPanel.UpdateView; OldFilePropertiesNeeded := FilePropertiesNeeded; FilePropertiesNeeded := GetFilePropertiesNeeded; if FilePropertiesNeeded >= OldFilePropertiesNeeded then begin Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TColumnsFileViewVTV.SetGridFunctionDim(ExternalDimFunction: TFunctionDime); begin dgPanel.ColumnsOwnDim:= ExternalDimFunction; end; procedure TColumnsFileViewVTV.cm_CopyFileDetailsToClip(const Params: array of string); var I: Integer; AFile: TDisplayFile; sl: TStringList = nil; procedure AddFile; var J: Integer; S: String; begin if AFile.FSFile.IsNameValid then begin S:= EmptyStr; for J:= 0 to AFile.DisplayStrings.Count - 1 do begin S:= S + AFile.DisplayStrings[J] + #09; end; J:= Length(S); if J > 0 then sl.Add(Copy(S, 1, J - 1)); end; end; begin if DisplayFiles.Count > 0 then begin sl:= TStringList.Create; try for I:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[I]; if AFile.Selected then AddFile; end; if sl.Count = 0 then begin AFile:= GetActiveDisplayFile; AddFile; end; Clipboard.Clear; // prevent multiple formats in Clipboard Clipboard.AsText:= TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle); finally FreeAndNil(sl); end; end; end; procedure TColumnsFileViewVTV.ColumnsMenuClick(Sender: TObject); begin Case (Sender as TMenuItem).Tag of 1001: //All columns, but current one will be selected. begin ShowOptions(TfrmOptionsCustomColumns); end; else begin ActiveColm:=ColSet.Items[(Sender as TMenuItem).Tag]; UpdateColumnsView; RedrawFiles; end; end; end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); begin ActiveColm := 'Default'; inherited Create(AOwner, AFileSource, APath, AFlags); end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AFileView, AFlags); end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ASectionName, ATabIndex, AFlags); end; constructor TColumnsFileViewVTV.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; procedure TColumnsFileViewVTV.CreateDefault(AOwner: TWinControl); begin DCDebug('TColumnsFileViewVTV.Create components'); inherited CreateDefault(AOwner); FFileNameColumn := -1; FExtensionColumn := -1; // -- other components dgPanel:=TColumnsDrawTree.Create(Self, Self); MainControl := dgPanel; // --- dgPanel.OnDragOver := @dgPanelDragOver; dgPanel.OnDragDrop:= @dgPanelDragDrop; dgPanel.OnAdvancedHeaderDraw:=@dgPanelAdvancedHeaderDraw; dgPanel.OnAfterItemPaint := @dgPanelAfterItemPaint; dgPanel.OnBeforeItemErase := @dgPanelBeforeItemErase; dgPanel.OnFocusChanged:=@dgPanelFocusChanged; dgPanel.OnFocusChanging:=@dgPanelFocusChanging; dgPanel.OnHeaderDrawQueryElements:=@dgPanelHeaderDrawQueryElements; dgPanel.OnHeaderClick:=@dgPanelHeaderClick; dgPanel.OnMouseWheelUp := @dgPanelMouseWheelUp; dgPanel.OnMouseWheelDown := @dgPanelMouseWheelDown; dgPanel.OnScroll:= @dgPanelScroll; dgpanel.OnResize:= @dgPanelResize; dgPanel.OnColumnResize:= @dgPanelColumnResize; pmColumnsMenu := TPopupMenu.Create(Self); pmColumnsMenu.Parent := Self; if Assigned(NotebookPage) then begin FOnColumnResized:= @DoColumnResized; end; end; destructor TColumnsFileViewVTV.Destroy; begin inherited Destroy; end; function TColumnsFileViewVTV.Clone(NewParent: TWinControl): TColumnsFileViewVTV; begin Result := TColumnsFileViewVTV.Create(NewParent, Self); end; procedure TColumnsFileViewVTV.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TColumnsFileViewVTV then with FileView as TColumnsFileViewVTV do begin FColumnsSortDirections := Self.FColumnsSortDirections; ActiveColm := Self.ActiveColm; ActiveColmSlave := nil; // set to nil because only used in preview? isSlave := Self.isSlave; end; end; end; procedure TColumnsFileViewVTV.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); end; procedure TColumnsFileViewVTV.BeforeMakeFileList; begin inherited; if gListFilesInThread then begin // Display info that file list is being loaded. UpdateInfoPanel; end; end; procedure TColumnsFileViewVTV.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // Reset state. TODO: Check if this is needed on any widgetset. dgPanel.TreeStates := dgPanel.TreeStates - [tsLeftButtonDown, tsMiddleButtonDown, tsRightButtonDown, tsVCLDragging]; end; procedure TColumnsFileViewVTV.DisplayFileListChanged; var AFocused: Boolean = False; Node: PVirtualNode; begin // Update grid row count. SetRowCount(FFiles.Count); SetFilesDisplayItems; RedrawFiles; if SetActiveFileNow(RequestedActiveFile) then RequestedActiveFile := '' else begin // Requested file was not found, restore position to last active file. if not SetActiveFileNow(LastActiveFile) then begin if FLastActiveFileIndex >= dgPanel.RootNodeCount then begin FUpdatingActiveFile := True; dgPanel.FocusedNode := dgPanel.GetLastNoInit; FUpdatingActiveFile := False; SetLastActiveFile(FLastActiveFileIndex); AFocused := True; end else if FLastActiveFileIndex >= 0 then begin Node := dgPanel.GetFirstNoInit; while Assigned(Node) do begin if Node^.Index = FLastActiveFileIndex then begin FUpdatingActiveFile := True; dgPanel.FocusedNode := Node; FUpdatingActiveFile := False; SetLastActiveFile(Node^.Index); AFocused := True; Break; end; Node := Node^.NextSibling; end; end; if not AFocused then dgPanel.FocusedNode := dgPanel.GetFirstNoInit; // At creation the control has default size (100, 200). // If the first column is wider than ClientWidth then VTV scrolls // to the right edge of the column. So, we scroll back here. // dgPanel.OffsetX := 0; end; end; Notify([fvnVisibleFilePropertiesChanged]); inherited; end; procedure TColumnsFileViewVTV.DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure UpdateWidth(ANotebook: TFileViewNotebook); var I: Integer; ColumnsView: TColumnsFileViewVTV; begin for I:= 0 to ANotebook.PageCount - 1 do begin if ANotebook.View[I] is TColumnsFileViewVTV then begin ColumnsView:= TColumnsFileViewVTV(ANotebook.View[I]); if ColumnsView.ActiveColm = ActiveColm then begin with ColumnsView.dgPanel do begin Header.Columns.BeginUpdate; Header.Columns.Items[ColumnIndex].Width:= ColumnNewSize; Header.Columns.EndUpdate; end; end; end; end; end; begin if gColumnsAutoSaveWidth then begin GetColumnsClass.SetColumnWidth(ColumnIndex, ColumnNewSize); UpdateWidth(frmMain.LeftTabs); UpdateWidth(frmMain.RightTabs); end; end; procedure TColumnsFileViewVTV.MakeColumnsStrings(AFile: TDisplayFile); begin MakeColumnsStrings(AFile, GetColumnsClass); end; procedure TColumnsFileViewVTV.MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); var ACol: Integer; begin AFile.DisplayStrings.Clear; for ACol := 0 to ColumnsClass.Count - 1 do begin AFile.DisplayStrings.Add(ColumnsClass.GetColumnItemResultString( ACol, AFile.FSFile, FileSource)); end; end; procedure TColumnsFileViewVTV.ClearAllColumnsStrings; var i: Integer; begin if Assigned(FAllDisplayFiles) then begin // Clear display strings in case columns have changed. for i := 0 to FAllDisplayFiles.Count - 1 do FAllDisplayFiles[i].DisplayStrings.Clear; end; end; procedure TColumnsFileViewVTV.EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); var ColumnsView: TColumnsFileViewVTV; PMsg: PEachViewCallbackMsg; begin if AFileView is TColumnsFileViewVTV then begin ColumnsView := TColumnsFileViewVTV(AFileView); PMsg := UserData; if ColumnsView.ActiveColm = PMsg^.UpdatedColumnsSetName then begin ColumnsView.ActiveColm := PMsg^.NewColumnsSetName; ColumnsView.UpdateColumnsView; ColumnsView.RedrawFiles; end; end; end; procedure TColumnsFileViewVTV.DoUpdateView; begin inherited DoUpdateView; UpdateColumnsView; end; function TColumnsFileViewVTV.GetActiveFileIndex: PtrInt; begin if Assigned(dgPanel.FocusedNode) then Result := dgPanel.FocusedNode^.Index else Result := InvalidFileIndex; end; function TColumnsFileViewVTV.GetColumnsClass: TPanelColumnsClass; begin if isSlave then Result := ActiveColmSlave else Result := ColSet.GetColumnSet(ActiveColm); end; function TColumnsFileViewVTV.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var Node: PVirtualNode; begin Node := dgPanel.GetNodeAt(X, Y); if Assigned(Node) then Result := Node^.Index else Result := InvalidFileIndex; AtFileList := Y >= dgPanel.GetHeaderHeight; end; procedure TColumnsFileViewVTV.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TColumnsFileViewVTV.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var Node, NextNode: PVirtualNode; aFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin Node := dgPanel.FocusedNode; if IsActiveItemValid then begin InvertFileSelection(GetActiveDisplayFile, False); DoSelectionChanged(nil); end; NextNode := dgPanel.GetNextSiblingNoInit(Node); if (Node <> NextNode) and Assigned(NextNode) then dgPanel.FocusedNode := NextNode else dgPanel.InvalidateNode(Node); end; Key := 0; end; VK_LEFT: if (Shift = []) then begin if gLynxLike then ChangePathToParent(True) else dgPanel.OffsetX := dgPanel.OffsetX + 20; Key := 0; end; VK_RIGHT: if (Shift = []) then begin if gLynxLike then ChooseFile(GetActiveDisplayFile, True) else dgPanel.OffsetX := dgPanel.OffsetX - 20; Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin Node := dgPanel.FocusedNode; if Assigned(Node) then begin aFile := dgPanel.GetNodeFile(Node); if IsItemValid(aFile) then begin if (aFile.FSFile.IsDirectory or aFile.FSFile.IsLinkToDirectory) and not aFile.Selected then begin CalculateSpace(aFile); end; InvertFileSelection(aFile, False); DoSelectionChanged(nil); end; if gSpaceMovesDown then begin NextNode := dgPanel.GetNextSiblingNoInit(Node); if (Node <> NextNode) and Assigned(NextNode) then dgPanel.FocusedNode := NextNode else dgPanel.InvalidateNode(Node); end else dgPanel.InvalidateNode(Node); Key := 0; end; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TColumnsFileViewVTV.DoSelectionChanged(Node: PVirtualNode); begin if Assigned(Node) then DoSelectionChanged(Node^.Index) else DoSelectionChanged(-1); end; { TColumnsDrawTree } constructor TColumnsDrawTree.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ColumnsView := AParent as TColumnsFileViewVTV; ColumnsOwnDim := @ColumnsView.DimColor; DragType := dtVCL; HintMode := hmHint; Self.Parent := AParent; end; function TColumnsDrawTree.DetermineScrollDirections(X, Y: Integer): TScrollDirections; begin Result := inherited DetermineScrollDirections(X, Y) - [sdLeft, sdRight]; // Only scroll up, down. end; function TColumnsDrawTree.DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; begin Result := CharCode in [VK_HOME, VK_END, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT]; end; procedure TColumnsDrawTree.AfterConstruction; begin inherited; RootNodeCount := 0; NodeDataSize := SizeOf(TColumnsDrawTreeRecord); Align := alClient; TreeOptions.AutoOptions := [toAutoScroll, toDisableAutoscrollHorizontal]; TreeOptions.MiscOptions := [toFullRowDrag]; // TODO: if no mouse action for middle button: include toWheelPanning TreeOptions.PaintOptions := [toShowBackground, toThemeAware, toUseBlendedImages, toGhostedIfUnfocused, toStaticBackground, toAlwaysHideSelection, toHideFocusRect]; TreeOptions.SelectionOptions := [toDisableDrawSelection, toExtendedFocus, toFullRowSelect]; TabStop := False; Margin := 0; TextMargin := 0; Indent := 0; AnimationDuration := 0; AutoScrollDelay := 500; // milliseconds AutoScrollInterval := 100; // milliseconds UpdateView; end; function TColumnsDrawTree.CanAutoScroll: Boolean; begin Result := inherited CanAutoScroll; if Header.States = [] then begin with ColumnsView do begin if IsMouseSelecting then Result := True; end; end; end; function TColumnsDrawTree.CanScroll(const ClientMousePos: TPoint): Boolean; begin Result := ColumnsView.IsMouseSelecting; end; procedure TColumnsDrawTree.CMHintShow(var Message: TCMHintShow); begin // Skip CMHintShow from VTV and do what TControl.CMHintShow does. DoOnShowHint(Message.HintInfo); end; procedure TColumnsDrawTree.UpdateView; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; i: Integer; MaxFontHeight: Integer = 0; CurrentHeight: Integer; ColumnsSet: TPanelColumnsClass; begin // Start with height of the icons. if gShowIcons <> sim_none then MaxFontHeight := gIconsSize; // Get columns settings. with (Parent as TColumnsFileViewVTV) do begin if not isSlave then ColumnsSet := ColSet.GetColumnSet(ActiveColm) else ColumnsSet := ActiveColmSlave; end; // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; // Search columns settings for the biggest font (in height). for i := 0 to ColumnsSet.Count - 1 do begin Canvas.Font.Name := ColumnsSet.GetColumnFontName(i); Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(i); Canvas.Font.Size := ColumnsSet.GetColumnFontSize(i); CurrentHeight := Canvas.GetTextHeight('Wg'); MaxFontHeight := Max(MaxFontHeight, CurrentHeight); end; // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); Result := MaxFontHeight; end; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin OldFont := Canvas.Font; Canvas.Font := Font; Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; var TabHeaderHeight: Integer; TempRowHeight: Integer; Node: PVirtualNode; begin BeginUpdate; try if gInterfaceFlat then begin Header.Style := hsPlates; BorderStyle := bsNone; BorderWidth := 0; end else Header.Style := hsFlatButtons; GridVertLine:= gGridVertLine; GridHorzLine:= gGridHorzLine; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then begin DefaultNodeHeight := TempRowHeight; // Set each node's height if changed. Node := GetFirstNoInit; if Assigned(Node) and (NodeHeight[Node] <> TempRowHeight) then SetAllRowsHeights(TempRowHeight); end; // Add additional space at the bottom so that the filelist doesn't jump at the end. // It happens when ClientHeight is not an exact multiplication of DefaultNodeHeight. BottomSpace := ClientHeight mod DefaultNodeHeight; Header.Options := [hoColumnResize, hoDblClickResize, hoDisableAnimatedResize, hoOwnerDraw, hoHotTrack]; // Set rows of header. if gTabHeader then begin Header.Options := Header.Options + [hoVisible]; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; Header.DefaultHeight := TabHeaderHeight; end; if gAutoFillColumns then Header.Options := Header.Options + [hoAutoResize, hoAutoSpring]; finally EndUpdate; end; end; procedure TColumnsDrawTree.WMKeyDown(var Message: TLMKeyDown); var Node, Temp: PVirtualNode; Offset: Integer; SavedKey: Word; Shift: TShiftState; begin Shift := KeyDataToShiftState(Message.KeyData); SavedKey := Message.CharCode; if ColumnsView.IsLoadingFileList then begin ColumnsView.HandleKeyDownWhenLoading(Message.CharCode, Shift); Exit; end; // Set RangeSelecting before cursor is moved. ColumnsView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_UP, VK_DOWN]) and (ssShift in Shift) then ColumnsView.InvertActiveFile; // Override scrolling with PageUp, PageDown because VirtualTreeView scrolls too much. case SavedKey of VK_PRIOR: begin Offset := 0; // If there's no focused node then just take the very first one. if FocusedNode = nil then Node := GetFirstNoInit else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FocusedNode; Temp := Node; while Assigned(Temp) do begin Inc(Offset, NodeHeight[Temp]); if Offset >= ClientHeight then Break; Node := Temp; Temp := GetPreviousSiblingNoInit(Temp); end; end; FocusedNode := Node; Message.CharCode := 0; end; VK_NEXT: begin Offset := 0; // If there's no focused node then just take the very last one. if FocusedNode = nil then Node := GetLastNoInit else begin // Go down as many nodes as comprise together a size of ClientHeight. Node := FocusedNode; Temp := Node; while Assigned(Temp) do begin Inc(Offset, NodeHeight[Temp]); if Offset >= ClientHeight then Break; Node := Temp; Temp := GetNextSiblingNoInit(Temp); end; end; FocusedNode := Node; //if OffsetY mod DefaultNodeHeight <> 0 then // OffsetY := OffsetY - ClientHeight mod DefaultNodeHeight; Message.CharCode := 0; end; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: begin Node := FocusedNode; if ((Node = GetLastNoInit) and (SavedKey = VK_DOWN)) or ((Node = GetFirstNoInit) and (SavedKey = VK_UP)) then Message.CharCode := 0; end; {$ENDIF} end; inherited WMKeyDown(Message); if (ColumnsView.FRangeSelecting) and Assigned(FocusedNode) then ColumnsView.Selection(SavedKey, FocusedNode^.Index); end; procedure TColumnsDrawTree.InitializeWnd; begin inherited InitializeWnd; ColumnsView.InitializeDragDropEx(Self); end; procedure TColumnsDrawTree.FinalizeWnd; begin ColumnsView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; procedure TColumnsDrawTree.DoPaintNode(var PaintInfo: TVTPaintInfo); var //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; ColumnsSet: TPanelColumnsClass; IsFocused: Boolean; aRect: TRect; aCol: TColumnIndex; //------------------------------------------------------ //begin subprocedures //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; oldClipping: Boolean; begin if (gShowIcons <> sim_none) then begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // center icon vertically Y:= aRect.Top + (PaintInfo.Node^.NodeHeight - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, PaintInfo.Canvas, aRect.Left + 1, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, PaintInfo.Canvas, aRect.Left + 1, Y ); end; end; s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin Y:= ((aRect.Right - aRect.Left) - PaintInfo.Canvas.TextWidth('V')); if (gShowIcons <> sim_none) then Y:= Y - gIconsSize; s:= FitFileName(s, PaintInfo.Canvas, AFile.FSFile, Y); end; oldClipping := PaintInfo.Canvas.Clipping; //PaintInfo.Canvas.Clipping := False; if (gShowIcons <> sim_none) then PaintInfo.Canvas.TextOut(aRect.Left + gIconsSize + 4, iTextTop, s) else PaintInfo.Canvas.TextOut(aRect.Left + 2, iTextTop, s); // PaintInfo.Canvas.Clipping := oldClipping; end; //of DrawIconCell //------------------------------------------------------ procedure DrawOtherCell; //------------------------------------------------------ var tw, cw: Integer; oldClipping: Boolean; begin s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin while PaintInfo.Canvas.TextWidth(s) - (aRect.Right - aRect.Left) - 4 > 0 do Delete(s, Length(s), 1); end; oldClipping := PaintInfo.Canvas.Clipping; //PaintInfo.Canvas.Clipping := False; case ColumnsSet.GetColumnAlign(ACol) of taRightJustify: begin cw := Header.Columns.Items[ACol].Width; tw := PaintInfo.Canvas.TextWidth(s); PaintInfo.Canvas.TextOut(aRect.Right - tw - 3, iTextTop, s); end; taLeftJustify: begin PaintInfo.Canvas.TextOut(aRect.Left + 3, iTextTop, s); end; taCenter: begin cw := Header.Columns.Items[ACol].Width; tw := PaintInfo.Canvas.TextWidth(s); PaintInfo.Canvas.TextOut(aRect.Left + ((cw - tw - 3) div 2), iTextTop, s); end; end; //of case // PaintInfo.Canvas.Clipping := oldClipping; end; //of DrawOtherCell //------------------------------------------------------ procedure PrepareColors; //------------------------------------------------------ var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; //--------------------- begin PaintInfo.Canvas.Font.Name := ColumnsSet.GetColumnFontName(ACol); PaintInfo.Canvas.Font.Size := ColumnsSet.GetColumnFontSize(ACol); PaintInfo.Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(ACol); PaintInfo.Canvas.Font.Quality := ColumnsSet.GetColumnFontQuality(ACol); IsCursor := IsFocused and ColumnsView.Active and (not ColumnsSet.UseFrameCursor); IsCursorInactive := IsFocused and (not ColumnsView.Active) and (not ColumnsSet.UseFrameCursor); // Set up default background color first. if IsCursor then begin BackgroundColor := ColumnsSet.GetColumnCursorColor(ACol); end else begin if IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol) then BackgroundColor := ColumnsSet.GetColumnInactiveCursorColor(ACol) else // Alternate rows background color. if odd(PaintInfo.Node^.Index) then BackgroundColor := ColumnsSet.GetColumnBackground(ACol) else BackgroundColor := ColumnsSet.GetColumnBackground2(ACol); end; // Set text color. if ColumnsSet.GetColumnOvercolor(ACol) then TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := ColumnsSet.GetColumnTextColor(ACol); if AFile.Selected then begin if ColumnsSet.GetColumnUseInvertedSelection(ACol) then begin //------------------------------------------------------ if IsCursor or (IsCursorInactive and ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then begin TextColor := InvertColor(ColumnsSet.GetColumnCursorText(ACol)); end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then BackgroundColor := ColumnsSet.GetColumnMarkColor(ACol) else BackgroundColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); TextColor := ColumnsSet.GetColumnBackground(ACol); end; //------------------------------------------------------ end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then TextColor := ColumnsSet.GetColumnMarkColor(ACol) else TextColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); end; end else if IsCursor then begin TextColor := ColumnsSet.GetColumnCursorText(ACol); end; BackgroundColor := ColumnsOwnDim(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; // Draw background. PaintInfo.Canvas.Brush.Color := BackgroundColor; PaintInfo.Canvas.FillRect(aRect); PaintInfo.Canvas.Font.Color := TextColor; end;// of PrepareColors; procedure DrawLines; begin // Draw frame cursor. if ColumnsSet.UseFrameCursor and IsFocused and (ColumnsView.Active or ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then begin if ColumnsView.Active then PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnCursorColor(ACol) else PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnInactiveCursorColor(ACol); PaintInfo.Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); PaintInfo.Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; // Draw drop selection. if PaintInfo.Node^.Index = ColumnsView.FDropFileIndex then begin PaintInfo.Canvas.Pen.Color := ColumnsSet.GetColumnTextColor(ACol); PaintInfo.Canvas.Line(aRect.Left, aRect.Top + 1, aRect.Right, aRect.Top + 1); PaintInfo.Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; end; //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin aRect := PaintInfo.ContentRect; aCol := PaintInfo.Column; AFile := GetNodeFile(PaintInfo.Node); if not Assigned(AFile) then begin PaintInfo.Canvas.Brush.Color := Self.Color; PaintInfo.Canvas.FillRect(aRect); Exit; end; ColumnsSet := ColumnsView.GetColumnsClass; FileSourceDirectAccess := fspDirectAccess in ColumnsView.FileSource.Properties; if AFile.DisplayStrings.Count = 0 then ColumnsView.MakeColumnsStrings(AFile, ColumnsSet); IsFocused := PaintInfo.Node = FocusedNode; PrepareColors; // Paint on next column if it is empty. {if (ColumnsSet.GetColumnAlign(ACol) = taLeftJustify) and (ACol + 1 < ColumnsSet.ColumnsCount) and (AFile.DisplayStrings[ACol + 1] = EmptyStr) then aRect.Right := aRect.Right + Header.Columns.Items[ACol + 1].Width; // Paint on previous column if it is empty. if (ColumnsSet.GetColumnAlign(ACol) = taRightJustify) and (ACol - 1 >= 0) and (AFile.DisplayStrings[ACol - 1] = EmptyStr) then aRect.Left := aRect.Left - Header.Columns.Items[ACol - 1].Width; } iTextTop := aRect.Top + (PaintInfo.Node^.NodeHeight - PaintInfo.Canvas.TextHeight('Wg')) div 2; if PaintInfo.Column = 0 then DrawIconCell // Draw icon in the first column else DrawOtherCell; DrawLines; end; function TColumnsDrawTree.GetNodeFile(Node: PVirtualNode): TDisplayFile; begin if InRange(Node^.Index, 0, ColumnsView.FFiles.Count-1) then Result := ColumnsView.FFiles[Node^.Index] else Result := nil; end; procedure TColumnsDrawTree.SetAllRowsHeights(ARowHeight: Cardinal); var Node: PVirtualNode; begin BeginUpdate; try Node := GetFirstNoInit; while Assigned(Node) do begin NodeHeight[Node] := ARowHeight; Node := Node^.NextSibling; end; finally EndUpdate; end; end; procedure TColumnsDrawTree.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var BackgroundClick: Boolean; Point: TPoint; begin if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseUp event is sent just after doubleclick, so if we drop // doubleclick events we have to also drop MouseUp events that follow them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} // Handle only if button-up was not lifted to finish drag&drop operation. if not ColumnsView.FMainControlMouseDown then Exit; inherited MouseUp(Button, Shift, X, Y); ColumnsView.FMainControlMouseDown := False; if Button = mbRight then begin { If right click on file/directory } if ((gMouseSelectionButton<>1) or not gMouseSelectionEnabled) then begin BackgroundClick:= not MouseOnGrid(X, Y); Point := ClientToScreen(Classes.Point(X, Y)); frmMain.Commands.DoContextMenu(ColumnsView, Point.x, Point.y, BackgroundClick); end else if (gMouseSelectionEnabled and (gMouseSelectionButton = 1)) then begin ColumnsView.tmContextMenu.Enabled:= False; // stop context menu timer end; end { Open folder in new tab on middle click } else if (Button = mbMiddle) and (Y > GetHeaderHeight) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TColumnsDrawTree.MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseDown event is sent just before doubleclick, so if we drop // doubleclick events we have to also drop MouseDown events that precede them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} ColumnsView.FMainControlMouseDown := True; inherited MouseDown(Button, Shift, X, Y); end; function TColumnsDrawTree.MouseOnGrid(X, Y: LongInt): Boolean; begin Result := Assigned(GetNodeAt(X, Y)); end; function TColumnsDrawTree.GetHeaderHeight: Integer; begin Result := Header.Height; end; function TColumnsDrawTree.GetGridHorzLine: Boolean; begin Result := toShowHorzGridLines in TreeOptions.PaintOptions; end; function TColumnsDrawTree.GetGridVertLine: Boolean; begin Result := toShowVertGridLines in TreeOptions.PaintOptions; end; procedure TColumnsDrawTree.SetGridHorzLine(const AValue: Boolean); begin if AValue then TreeOptions.PaintOptions := TreeOptions.PaintOptions + [toShowHorzGridLines] else TreeOptions.PaintOptions := TreeOptions.PaintOptions - [toShowHorzGridLines]; end; procedure TColumnsDrawTree.SetGridVertLine(const AValue: Boolean); begin if AValue then TreeOptions.PaintOptions := TreeOptions.PaintOptions + [toShowVertGridLines] else TreeOptions.PaintOptions := TreeOptions.PaintOptions - [toShowVertGridLines]; end; function TColumnsDrawTree.GetVisibleNodes: TNodeRange; var Offset: Integer = 0; Node: PVirtualNode; CH: Integer; begin Result.First := GetNodeAt(0, 0, True, Offset); Result.Last := Result.First; CH := ClientHeight; // Go down as many nodes as comprise together a size of ClientHeight. if Assigned(Result.Last) then begin while True do begin if Offset >= CH then Break; Node := GetNextSiblingNoInit(Result.Last); if not Assigned(Node) then Break; Result.Last := Node; Inc(Offset, NodeHeight[Node]); end; end; end; function TColumnsDrawTree.GetVisibleIndexes: TRange; begin if csLoading in ComponentState then begin Result.First := 0; Result.Last := -1; end else begin // This assumes each row has the same height = DefaultNodeHeight. Result.First := -OffsetY div DefaultNodeHeight; Result.Last := (-OffsetY + ClientHeight) div DefaultNodeHeight; // Account for the fact the BottomSpace might be > 0. if Result.Last >= RootNodeCount then Result.Last := RootNodeCount - 1; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/uorderedfileview.pas��������������������������������������������������0000644�0001750�0000144�00000056004�12612505011�021350� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Base class for file views which display an ordered (indexed) list of files Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 uOrderedFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, Menus, uTypes, fQuickSearch, uFileView, uFileViewWithPanels, uDisplayFile; const InvalidFileIndex = PtrInt(-1); type { TOrderedFileView } TOrderedFileView = class(TFileViewWithPanels) private pmOperationsCancel: TPopupMenu; procedure lblFilterClick(Sender: TObject); procedure pmOperationsCancelClick(Sender: TObject); procedure quickSearchChangeSearch(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions); procedure quickSearchChangeFilter(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions); procedure quickSearchExecute(Sender: TObject); procedure quickSearchHide(Sender: TObject); procedure UpdateRangeSelectionState; protected lblFilter: TLabel; quickSearch: TfrmQuickSearch; FLastActiveFileIndex: Integer; FRangeSelecting: Boolean; FRangeSelectionStartIndex: Integer; FRangeSelectionEndIndex: Integer; FRangeSelectionState: Boolean; FUpdatingActiveFile: Boolean; procedure InvertActiveFile; procedure AfterChangePath; override; procedure CreateDefault(AOwner: TWinControl); override; procedure DoFileIndexChanged(NewFileIndex: PtrInt); procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); override; procedure DoSelectionChanged; override; overload; procedure DoSelectionChanged(FileIndex: PtrInt); overload; procedure EnsureDisplayProperties; override; function GetActiveDisplayFile: TDisplayFile; override; function GetActiveFileIndex: PtrInt; virtual; abstract; function GetFileRect(FileIndex: PtrInt): TRect; virtual; abstract; function GetVisibleFilesIndexes: TRange; virtual; abstract; function IsFileIndexInRange(FileIndex: PtrInt): Boolean; inline; {en If marking a single file only redraws that file. Otherwise files are marked and full update is performed. } procedure MarkFilesWithCheck(FromIndex, ToIndex: PtrInt; bSelect: Boolean); procedure RedrawFile(FileIndex: PtrInt); overload; virtual; abstract; {en Search and position in a file that matches name taking into account passed options. } procedure SearchFile(SearchTerm: String; SearchOptions: TQuickSearchOptions); procedure Selection(Key: Word; CurIndex: PtrInt); procedure SelectRange(FileIndex: PtrInt); procedure SetActiveFile(FileIndex: PtrInt); overload; virtual; abstract; procedure SetLastActiveFile(FileIndex: PtrInt); {en Sets a file as active if the file currently exists. @returns(@true if the file was found and selected.) } function SetActiveFileNow(aFilePath: String): Boolean; public procedure CloneTo(AFileView: TFileView); override; procedure SetActiveFile(aFilePath: String); override; overload; procedure ChangePathAndSetActiveFile(aFilePath: String); override; overload; published // commands procedure cm_QuickSearch(const Params: array of string); procedure cm_QuickFilter(const Params: array of string); procedure cm_GoToFirstFile(const Params: array of string); procedure cm_GoToLastFile(const Params: array of string); end; implementation uses LCLProc, LCLType, math, Forms, Graphics, DCStrUtils, DCOSUtils, uLng, uGlobs, uMasks, uDCUtils, uIMCode, uFileSourceProperty, uPixMapManager, uFileViewWorker, uFileSource, uFile; const CANCEL_FILTER = 0; CANCEL_OPERATION = 1; { TOrderedFileView } procedure TOrderedFileView.AfterChangePath; begin if Filtered then begin FFileFilter:= EmptyStr; quickSearch.Finalize; end; FLastActiveFileIndex := -1; inherited AfterChangePath; end; procedure TOrderedFileView.CloneTo(AFileView: TFileView); begin if Assigned(AFileView) then begin inherited CloneTo(AFileView); with AFileView as TOrderedFileView do begin FLastActiveFileIndex := Self.FLastActiveFileIndex; FRangeSelectionStartIndex := Self.FRangeSelectionStartIndex; FRangeSelectionEndIndex := Self.FRangeSelectionEndIndex; FRangeSelectionState := Self.FRangeSelectionState; end; end; end; procedure TOrderedFileView.cm_GoToFirstFile(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(0); end; end; procedure TOrderedFileView.cm_GoToLastFile(const Params: array of string); begin if not (IsEmpty or IsLoadingFileList) then begin SetFocus; SetActiveFile(FFiles.Count - 1); end; end; procedure TOrderedFileView.cm_QuickFilter(const Params: array of string); begin if not IsLoadingFileList then quickSearch.Execute(qsFilter, Params); end; procedure TOrderedFileView.cm_QuickSearch(const Params: array of string); begin if not IsLoadingFileList then quickSearch.Execute(qsSearch, Params); end; procedure TOrderedFileView.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); FLastActiveFileIndex := -1; FRangeSelectionState := True; lblFilter := TLabel.Create(pnlFooter); lblFilter.Parent := pnlFooter; lblFilter.Align := alRight; lblFilter.Visible := False; lblFilter.OnClick := @lblFilterClick; quickSearch := TfrmQuickSearch.Create(Self); quickSearch.Parent := Self; quickSearch.Visible := False; quickSearch.Align := alBottom; quickSearch.OnChangeSearch := @quickSearchChangeSearch; quickSearch.OnChangeFilter := @quickSearchChangeFilter; quickSearch.OnExecute := @quickSearchExecute; quickSearch.OnHide := @quickSearchHide; pmOperationsCancel := TPopupMenu.Create(Self); pmOperationsCancel.Parent := Self; end; procedure TOrderedFileView.DoFileIndexChanged(NewFileIndex: PtrInt); begin if IsFileIndexInRange(NewFileIndex) and (FLastActiveFileIndex <> NewFileIndex) then begin if not FRangeSelecting then begin // Set range selection starting point. FRangeSelectionStartIndex := NewFileIndex; FRangeSelectionEndIndex := NewFileIndex; UpdateRangeSelectionState; end; if not FUpdatingActiveFile then begin SetLastActiveFile(NewFileIndex); if Assigned(OnChangeActiveFile) then OnChangeActiveFile(Self, FFiles[NewFileIndex].FSFile); end; if FlatView and (FSelectedCount = 0) then UpdateFlatFileName; end; end; procedure TOrderedFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var mi: TMenuItem; begin // check if ShiftState is equal to quick search / filter modes if quickSearch.CheckSearchOrFilter(Key) then Exit; case Key of VK_ESCAPE: begin if Filtered and (GetCurrentWorkType <> fvwtNone) then begin pmOperationsCancel.Items.Clear; mi := TMenuItem.Create(pmOperationsCancel); mi.Tag := CANCEL_FILTER; mi.Caption := rsCancelFilter; mi.OnClick := @pmOperationsCancelClick; pmOperationsCancel.Items.Add(mi); mi := TMenuItem.Create(pmOperationsCancel); mi.Tag := CANCEL_OPERATION; mi.Caption := rsCancelOperation; mi.OnClick := @pmOperationsCancelClick; pmOperationsCancel.Items.Add(mi); pmOperationsCancel.PopUp; Key := 0; end else if Filtered then begin quickSearch.Finalize; Key := 0; end else if GetCurrentWorkType <> fvwtNone then begin StopWorkers; Key := 0; end; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TOrderedFileView.DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); var bLoading: Boolean; begin case Key of VK_ESCAPE: if GetCurrentWorkType <> fvwtNone then begin bLoading := IsLoadingFileList; StopWorkers; if bLoading then CancelLastPathChange; Key := 0; end; end; inherited DoHandleKeyDownWhenLoading(Key, Shift); end; procedure TOrderedFileView.DoSelectionChanged; begin inherited DoSelectionChanged; RedrawFiles; UpdateRangeSelectionState; end; procedure TOrderedFileView.DoSelectionChanged(FileIndex: PtrInt); begin inherited DoSelectionChanged; if IsFileIndexInRange(FileIndex) then RedrawFile(FileIndex); UpdateRangeSelectionState; end; procedure TOrderedFileView.EnsureDisplayProperties; var VisibleFiles: TRange; i: Integer; AFileList: TFVWorkerFileList = nil; Worker: TFileViewWorker; AFile: TDisplayFile; HaveIcons: Boolean; DirectAccess: Boolean; begin if (csDestroying in ComponentState) or (GetCurrentWorkType = fvwtCreate) or IsEmpty then Exit; VisibleFiles := GetVisibleFilesIndexes; HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in FileSource.Properties; if not gListFilesInThread then begin if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, CurrentPath); end; for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if AFile.TextColor = clNone then AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if AFile.FSFile.Name <> '..' then begin if HaveIcons then begin if AFile.IconID < 0 then AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, True, gShowIcons, not gIconOverlays); {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} if gIconOverlays and (AFile.IconOverlayID < 0) then begin AFile.IconOverlayID := PixMapManager.GetIconOverlayByFile(AFile.FSFile, DirectAccess); end; {$ENDIF} end; if FileSource.CanRetrieveProperties(AFile.FSFile, FilePropertiesNeeded) then try FileSource.RetrieveProperties(AFile.FSFile, FilePropertiesNeeded); except on EFileNotFound do; end; end; end; end else begin try for i := VisibleFiles.First to VisibleFiles.Last do begin AFile := FFiles[i]; if (AFile.FSFile.Name <> '..') and (FileSource.CanRetrieveProperties(AFile.FSFile, FilePropertiesNeeded) or (AFile.TextColor = clNone) or (HaveIcons and ((AFile.IconID < 0) {$IF DEFINED(MSWINDOWS)} or (gIconOverlays and (AFile.IconOverlayID < 0)) {$ENDIF} ))) then begin if not Assigned(AFileList) then AFileList := TFVWorkerFileList.Create; AFileList.AddClone(AFile, AFile); end; end; if Assigned(AFileList) and (AFileList.Count > 0) then begin Worker := TFilePropertiesRetriever.Create( FileSource, WorkersThread, FilePropertiesNeeded, @PropertiesRetrieverOnUpdate, AFileList); AddWorker(Worker, False); WorkersThread.QueueFunction(@Worker.StartParam); end; finally AFileList.Free; end; end; end; function TOrderedFileView.GetActiveDisplayFile: TDisplayFile; var Index: PtrInt; begin Index := GetActiveFileIndex; if IsFileIndexInRange(Index) then Result := FFiles[Index] else Result := nil; end; function TOrderedFileView.IsFileIndexInRange(FileIndex: PtrInt): Boolean; begin Result := InRange(FileIndex, 0, FFiles.Count - 1); end; procedure TOrderedFileView.lblFilterClick(Sender: TObject); begin quickSearch.Execute(qsFilter, []); end; procedure TOrderedFileView.MarkFilesWithCheck(FromIndex, ToIndex: PtrInt; bSelect: Boolean); begin if FromIndex = ToIndex then begin MarkFile(FFiles[FromIndex], bSelect, False); DoSelectionChanged(FromIndex); end else MarkFiles(FromIndex, ToIndex, bSelect); end; procedure TOrderedFileView.pmOperationsCancelClick(Sender: TObject); begin if (Sender is TMenuItem) then begin case (Sender as TMenuItem).Tag of CANCEL_FILTER: quickSearch.Finalize; CANCEL_OPERATION: StopWorkers; end; end; end; procedure TOrderedFileView.quickSearchChangeFilter(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions); begin Active := True; // position in file before filtering, otherwise position could be lost if // current file is filtered out causing jumps SearchFile(AFilterText, AFilterOptions); SetFileFilter(AFilterText, AFilterOptions); lblFilter.Caption := Format('(%s: %s)', [rsFilterStatus, AFilterText]); lblFilter.Visible := Filtered; end; procedure TOrderedFileView.quickSearchChangeSearch(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions); var Index, MaybeFoundIndex: PtrInt; begin Index:=GetActiveFileIndex; Active := True; SearchFile(ASearchText, ASearchOptions); MaybeFoundIndex:=GetActiveFileIndex; if (MaybeFoundIndex <= Index) AND (ASearchOptions.CancelSearchMode=qscmCancelIfNoFound) then begin SetActiveFile(Index-1); quickSearch.Finalize; end else begin lblFilter.Caption := Format('(%s: %s)', [rsSearchStatus, ASearchText]); lblFilter.Visible := (ASearchText<>EmptyStr); end; end; procedure TOrderedFileView.quickSearchExecute(Sender: TObject); begin Active := True; ChooseFile(GetActiveDisplayFile); end; procedure TOrderedFileView.quickSearchHide(Sender: TObject); begin if CanFocus then SetFocus; end; procedure TOrderedFileView.SearchFile(SearchTerm: String; SearchOptions: TQuickSearchOptions); var StartIndex, Index: PtrInt; Result: Boolean; sFileName, sSearchName, sSearchNameNoExt, sSearchExt : String; AFile: TFile; uFileName: UnicodeString; sPy: String; Mask: TMask; function NextIndexWrap(Index: PtrInt): PtrInt; begin Result := Index + 1; if Result = FFiles.Count then Result := 0; end; function PrevIndexWrap(Index: PtrInt): PtrInt; begin Result := Index - 1; if Result < 0 then Result := FFiles.Count - 1; end; begin if IsEmpty then Exit; sSearchName := SearchTerm; if Pos('.', sSearchName) <> 0 then begin sSearchNameNoExt := ExtractOnlyFileName(sSearchName); sSearchExt := ExtractFileExt(sSearchName); if not (qsmBeginning in SearchOptions.Match) then sSearchNameNoExt := '*' + sSearchNameNoExt; if not (qsmEnding in SearchOptions.Match) then sSearchNameNoExt := sSearchNameNoExt + '*'; sSearchName := sSearchNameNoExt + sSearchExt + '*'; end else begin if not (qsmBeginning in SearchOptions.Match) then sSearchName := '*' + sSearchName; sSearchName := sSearchName + '*'; end; Index := GetActiveFileIndex; // start search from current position if not IsFileIndexInRange(Index) then Index := 0; case SearchOptions.Direction of qsdFirst: Index := 0; // begin search from first file qsdLast: Index := FFiles.Count - 1; // begin search from last file qsdNext: Index := NextIndexWrap(Index); // begin search from next file qsdPrevious: Index := PrevIndexWrap(Index); // begin search from previous file end; StartIndex := Index; try Mask := TMask.Create(sSearchName, SearchOptions.SearchCase = qscSensitive); try repeat Result := True; AFile := FFiles[Index].FSFile; if (SearchOptions.Items = qsiFiles) and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := False; if (SearchOptions.Items = qsiDirectories) and not AFile.IsDirectory and not AFile.IsLinkToDirectory then Result := False; sFileName := AFile.Name; // Get the Chinese first letter of Pinyin from the file name uFileName := UTF8Decode(sFileName); sPy := uIMCode.MakeSpellCode(uFileName); // Match the filename and pinyin letter if not (Mask.Matches(sFileName) or (MatchesMask(sPy, sSearchName))) then Result := False; if Result then begin SetActiveFile(Index); Break; end; // check next file depending on search direction if SearchOptions.Direction in [qsdNone, qsdFirst, qsdNext] then Index := NextIndexWrap(Index) else Index := PrevIndexWrap(Index); until Index = StartIndex; finally Mask.Free; end; except on EConvertError do; // bypass else raise; end; end; procedure TOrderedFileView.Selection(Key: Word; CurIndex: PtrInt); procedure OneLess; begin if CurIndex > FRangeSelectionStartIndex then Dec(CurIndex) else if CurIndex < FRangeSelectionStartIndex then Inc(CurIndex); end; begin // Key value doesn't neccessarily matter. // It just needs to correspond to scroll positions (similar to TScrollCode). case Key of VK_HOME, VK_END: ; VK_PRIOR, VK_UP, VK_LEFT: if CurIndex > 0 then OneLess; VK_NEXT, VK_DOWN, VK_RIGHT: if CurIndex < FFiles.Count - 1 then OneLess; else Exit; end; SelectRange(CurIndex); end; procedure TOrderedFileView.SelectRange(FileIndex: PtrInt); begin // Initially select file at starting point. if FRangeSelectionStartIndex = FRangeSelectionEndIndex then MarkFilesWithCheck(FRangeSelectionStartIndex, FRangeSelectionEndIndex, FRangeSelectionState); if FileIndex <> FRangeSelectionEndIndex then begin if FileIndex < FRangeSelectionStartIndex then begin // Focused file is before selection startpoint. // If previously selection was from startpoint forwards deselect all files after startpoint. if FRangeSelectionEndIndex > FRangeSelectionStartIndex then begin MarkFilesWithCheck(FRangeSelectionStartIndex + 1, FRangeSelectionEndIndex, not FRangeSelectionState); FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; if FileIndex > FRangeSelectionEndIndex then // Decrease selection range. MarkFilesWithCheck(FRangeSelectionEndIndex, FileIndex - 1, not FRangeSelectionState) else if FileIndex < FRangeSelectionEndIndex then // Increase selection range. MarkFilesWithCheck(FileIndex, FRangeSelectionEndIndex - 1, FRangeSelectionState); end else begin // Focused file is after selection startpoint. // If previously selection was from startpoint backwards deselect all files before startpoint. if FRangeSelectionEndIndex < FRangeSelectionStartIndex then begin MarkFilesWithCheck(FRangeSelectionEndIndex, FRangeSelectionStartIndex - 1, not FRangeSelectionState); FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; if FileIndex > FRangeSelectionEndIndex then // Increase selection range. MarkFilesWithCheck(FRangeSelectionEndIndex + 1, FileIndex, FRangeSelectionState) else if FileIndex < FRangeSelectionEndIndex then // Decrease selection range. MarkFilesWithCheck(FileIndex + 1, FRangeSelectionEndIndex, not FRangeSelectionState); end; FRangeSelectionEndIndex := FileIndex; end; end; procedure TOrderedFileView.SetActiveFile(aFilePath: String); begin if GetCurrentWorkType = fvwtCreate then begin // File list is currently loading - remember requested file for later. RequestedActiveFile := aFilePath; end else begin // First try to select the file in the current file list. // If not found save it for later selection (possibly after reload). if SetActiveFileNow(aFilePath) then RequestedActiveFile := '' else RequestedActiveFile := aFilePath; end; end; procedure TOrderedFileView.ChangePathAndSetActiveFile(aFilePath: String); begin if not mbFileExists(aFilePath) then CurrentPath := aFilePath else begin CurrentPath := ExtractFileDir(aFilePath); SetActiveFile(ExtractFileName(aFilePath)); end; end; function TOrderedFileView.SetActiveFileNow(aFilePath: String): Boolean; procedure SetUpdate(Index: PtrInt); begin FUpdatingActiveFile := True; SetActiveFile(Index); FUpdatingActiveFile := False; SetLastActiveFile(Index); end; var Index: PtrInt; begin if aFilePath <> '' then // find correct cursor position in Panel (drawgrid) begin if FileSource.GetPathType(aFilePath) = ptAbsolute then begin for Index := 0 to FFiles.Count - 1 do begin if FFiles[Index].FSFile.FullPath = aFilePath then begin SetUpdate(Index); Exit(True); end; end; end else begin for Index := 0 to FFiles.Count - 1 do begin if FFiles[Index].FSFile.Name = aFilePath then begin SetUpdate(Index); Exit(True); end; end; end; end; Result := False; end; procedure TOrderedFileView.SetLastActiveFile(FileIndex: PtrInt); begin if IsFileIndexInRange(FileIndex) then begin LastActiveFile := FFiles[FileIndex].FSFile.FullPath; FLastActiveFileIndex := FileIndex; end; end; procedure TOrderedFileView.UpdateRangeSelectionState; var NewSelectionState: Boolean; begin if not FRangeSelecting then begin if IsFileIndexInRange(FRangeSelectionStartIndex) then begin NewSelectionState := not FFiles[FRangeSelectionStartIndex].Selected; if (FRangeSelectionState <> NewSelectionState) and (FRangeSelectionStartIndex = FRangeSelectionEndIndex) then begin // Selection of starting point has changed. end else begin // Update was called but selection of starting point didn't change. // That means some other file's selection changed - reset starting point. FRangeSelectionStartIndex := GetActiveFileIndex; FRangeSelectionEndIndex := FRangeSelectionStartIndex; end; FRangeSelectionState := NewSelectionState; end; end; end; procedure TOrderedFileView.InvertActiveFile; var Index: PtrInt; begin if IsActiveItemValid then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin InvertFileSelection(FFiles[Index], False); DoSelectionChanged(Index); end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewwithmainctrl.pas���������������������������������������������0000644�0001750�0000144�00000123023�12646306126�022442� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Base class for file views which have a main control with a list of files. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 uFileViewWithMainCtrl; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, StdCtrls, LCLType, LMessages, uFile, uFileViewWorker, uOrderedFileView, uFileView, uDragDropEx; type { TFileViewWithMainCtrl } TFileViewWithMainCtrl = class(TOrderedFileView) private {$IFDEF LCLGTK2} FLastDoubleClickTime : TDateTime; {$ENDIF} FMainControl: TWinControl; { Events for drag&drop from external applications } function OnExDragBegin: Boolean; function OnExDragEnd: Boolean; function OnExDragEnter(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDragOver(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDrop(const FileNamesList: TStringList; DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; function OnExDragLeave: Boolean; procedure SetMainControl(AValue: TWinControl); procedure tmContextMenuTimer(Sender: TObject); // Needed for rename on mouse procedure tmRenameFileTimer(Sender: TObject); // If internal dragging is currently in effect, this function // stops internal dragging and starts external. procedure TransformDraggingToExternal(ScreenPoint: TPoint); procedure edtRenameEnter(Sender: TObject); procedure edtRenameExit(Sender: TObject); procedure edtRenameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); protected edtRename: TEdit; FWindowProc: TWndMethod; // Used to register as a drag and drop source and target. FDragDropSource: uDragDropEx.TDragDropSource; FDragDropTarget: uDragDropEx.TDragDropTarget; FHintFileIndex: PtrInt; FMainControlLastMouseButton: TMouseButton; // Mouse button that initiated dragging {en Used to check if button-up was received after button-down or after dropping something after dragging with right mouse button. } FMainControlMouseDown: Boolean; FMouseSelectionStartIndex: Integer; FMouseSelectionLastState: Boolean; FDragStartPoint: TPoint; FDragFileIndex: PtrInt; FDropFileIndex: PtrInt; FStartDrag: Boolean; tmContextMenu: TTimer; // Needed for rename on mouse FRenameFileIndex: PtrInt; tmRenameFile: TTimer; FMouseRename: Boolean; procedure AfterChangePath; override; // Simulates releasing mouse button that started a dragging operation, // but was released in another window or another application. procedure ClearAfterDragDrop; virtual; procedure CreateDefault(AOwner: TWinControl); override; {en Changes drawing colors depending on if this panel is active. } procedure DoActiveChanged; override; procedure DoLoadingFileListLongTime; override; procedure DoUpdateView; override; procedure FinalizeDragDropEx(AControl: TWinControl); {en Retrieves file index under mouse cursor. @param(X, Y Should be client coordinates of MainControl.) @param(AtFileList Whether X, Y point to the filelist, not at specific file but at empty space. If AtFileList is @false then X, Y point somewhere outside the file list.) } function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; virtual; abstract; procedure InitializeDragDropEx(AControl: TWinControl); {en Returns @true if currently selecting with right mouse button. } function IsMouseSelecting: Boolean; inline; procedure MainControlDblClick(Sender: TObject); procedure MainControlQuadClick(Sender: TObject); procedure MainControlDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainControlDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure MainControlEndDrag(Sender, Target: TObject; X, Y: Integer); procedure MainControlEnter(Sender: TObject); procedure MainControlExit(Sender: TObject); procedure MainControlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MainControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure MainControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainControlMouseLeave(Sender: TObject); procedure MainControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure MainControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainControlShowHint(Sender: TObject; HintInfo: PHintInfo); procedure MainControlUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); procedure MainControlWindowProc(var TheMessage: TLMessage); {en Updates the drop row index, which is used to draw a rectangle on directories during drag&drop operations. } procedure SetDropFileIndex(NewFileIndex: PtrInt); procedure WorkerStarting(const Worker: TFileViewWorker); override; procedure WorkerFinished(const Worker: TFileViewWorker); override; procedure ShowRenameFileEdit(AFile: TFile); virtual; property MainControl: TWinControl read FMainControl write SetMainControl; {$IFDEF LCLGTK2} function TooManyDoubleClicks: Boolean; {$ENDIF} public destructor Destroy; override; procedure DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); override; function Focused: Boolean; override; procedure SetFocus; override; procedure SetDragCursor(Shift: TShiftState); override; published procedure cm_RenameOnly(const Params: array of string); procedure cm_ContextMenu(const Params: array of string); end; implementation uses {$IF DEFINED(LCLGTK2)} Gtk2Proc, // for ReleaseMouseCapture GTK2Globals, // for DblClickTime {$ENDIF} LCLIntf, LCLProc, Forms, Dialogs, fMain, uShowMsg, uLng, uFileProperty, uFileSource, uFileSourceOperationTypes, uGlobs, uInfoToolTip, uDisplayFile, uFileSystemFileSource, uFileSourceUtil, uArchiveFileSourceUtil, uFormCommands; type TControlHandlersHack = class(TWinControl) end; { TFileViewWithMainCtrl } procedure TFileViewWithMainCtrl.ClearAfterDragDrop; begin // Clear some control specific flags. MainControl.ControlState := MainControl.ControlState - [csClicked, csLButtonDown]; end; procedure TFileViewWithMainCtrl.cm_ContextMenu(const Params: array of string); var Rect: TRect; Point: TPoint; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete; bUserWishJustActionMenu: boolean; begin if IsLoadingFileList then Exit; if Length(Params)>0 then begin GetParamBoolValue(Params[0], 'justactionmenu', bUserWishJustActionMenu); if bUserWishJustActionMenu then UserWishForContextMenu:=uwcmJustDCAction else UserWishForContextMenu:=uwcmComplete; end; Rect := GetFileRect(GetActiveFileIndex); Point.X := Rect.Left + ((Rect.Right - Rect.Left) div 2); Point.Y := Rect.Top + ((Rect.Bottom - Rect.Top) div 2); Point := MainControl.ClientToScreen(Point); SetCursorPos(Point.X+100, Point.Y+25); frmMain.Commands.DoContextMenu(Self, Point.X, Point.Y, False, UserWishForContextMenu); end; procedure TFileViewWithMainCtrl.CreateDefault(AOwner: TWinControl); begin FDropFileIndex := -1; FHintFileIndex := -1; {$IFDEF LCLGTK2} FLastDoubleClickTime := Now; {$ENDIF} FStartDrag := False; inherited CreateDefault(AOwner); edtRename := TEdit.Create(Self); edtRename.Visible := False; edtRename.TabStop := False; edtRename.AutoSize := False; edtRename.OnKeyDown := @edtRenameKeyDown; edtRename.OnEnter := @edtRenameEnter; edtRename.OnExit := @edtRenameExit; tmContextMenu := TTimer.Create(Self); tmContextMenu.Enabled := False; tmContextMenu.Interval := 500; tmContextMenu.OnTimer := @tmContextMenuTimer; tmRenameFile := TTimer.Create(Self); tmRenameFile.Enabled := False; tmRenameFile.Interval := 1000; tmRenameFile.OnTimer := @tmRenameFileTimer; FRenameFileIndex := -1; end; destructor TFileViewWithMainCtrl.Destroy; begin if Assigned(HotMan) then HotMan.UnRegister(MainControl); inherited Destroy; end; procedure TFileViewWithMainCtrl.DoActiveChanged; begin inherited DoActiveChanged; MainControl.Color := DimColor(gBackColor); // Needed for rename on mouse FMouseRename := False; end; procedure TFileViewWithMainCtrl.DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); var AFile: TDisplayFile; ClientDropPoint: TPoint; FileIndex: PtrInt; AtFileList: Boolean; FileSourceIndex, PathIndex: Integer; begin try with DropParams do begin if Files.Count > 0 then begin ClientDropPoint := MainControl.ScreenToClient(ScreenDropPoint); FileIndex := GetFileIndexFromCursor(ClientDropPoint.X, ClientDropPoint.Y, AtFileList); // default to current active directory in the destination panel TargetPath := Self.CurrentPath; if (DropIntoDirectories = True) and IsFileIndexInRange(FileIndex) then begin AFile := FFiles[FileIndex]; // If dropped into a directory modify destination path and file source accordingly. if Assigned(AFile) and (AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory) then begin if AFile.FSFile.Name = '..' then begin if TargetFileSource.IsPathAtRoot(CurrentPath) then begin // Change to previous file source and last path. FileSourceIndex := History.CurrentFileSourceIndex - 1; if FileSourceIndex < 0 then TargetFileSource := nil // No parent file sources. else begin PathIndex := History.PathsCount[FileSourceIndex] - 1; if PathIndex < 0 then TargetFileSource := nil // No paths. else begin TargetFileSource := FileSources[FileSourceIndex]; TargetPath := History.Path[FileSourceIndex, PathIndex]; end; end; end else begin // Remove the last subdirectory in the path. TargetPath := TargetFileSource.GetParentDir(TargetPath); end; end else TargetPath := TargetPath + AFile.FSFile.Name + DirectorySeparator; end else if FileIsArchive(AFile.FSFile.FullPath) then begin TargetFileSource:= GetArchiveFileSource(FileSource, AFile.FSFile); if Assigned(TargetFileSource) then TargetPath:= TargetFileSource.GetRootDir; end; end; end; end; // Execute the operation. frmMain.DoDragDropOperation(Operation, DropParams); finally FreeAndNil(DropParams); end; end; procedure TFileViewWithMainCtrl.DoLoadingFileListLongTime; begin MainControl.Color := DimColor(gBackColor); inherited DoLoadingFileListLongTime; end; procedure TFileViewWithMainCtrl.DoUpdateView; begin inherited DoUpdateView; MainControl.Color := DimColor(gBackColor); end; procedure TFileViewWithMainCtrl.FinalizeDragDropEx(AControl: TWinControl); begin FreeAndNil(FDragDropSource); FreeAndNil(FDragDropTarget); end; function TFileViewWithMainCtrl.Focused: Boolean; begin Result := Assigned(MainControl) and MainControl.Focused; end; procedure TFileViewWithMainCtrl.InitializeDragDropEx(AControl: TWinControl); begin // Register as drag&drop source and target. FDragDropSource := uDragDropEx.CreateDragDropSource(AControl); if Assigned(FDragDropSource) then FDragDropSource.RegisterEvents(nil, nil, @OnExDragEnd); FDragDropTarget := uDragDropEx.CreateDragDropTarget(AControl); if Assigned(FDragDropTarget) then FDragDropTarget.RegisterEvents(@OnExDragEnter, @OnExDragOver, @OnExDrop, @OnExDragLeave); end; function TFileViewWithMainCtrl.IsMouseSelecting: Boolean; begin Result := FMainControlMouseDown and (FMainControlLastMouseButton = mbRight) and gMouseSelectionEnabled and (gMouseSelectionButton = 1); end; procedure TFileViewWithMainCtrl.MainControlDblClick(Sender: TObject); var Point : TPoint; FileIndex : PtrInt; AtFileList: Boolean; begin // Needed for rename on mouse tmRenameFile.Enabled := False; FRenameFileIndex := -1; if IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. if TooManyDoubleClicks then Exit; {$ENDIF} FStartDrag := False; // don't start drag on double click Point := MainControl.ScreenToClient(Mouse.CursorPos); // If on a file/directory then choose it. FileIndex := GetFileIndexFromCursor(Point.x, Point.y, AtFileList); if IsFileIndexInRange(FileIndex) then begin {$IF DEFINED(LCLQT)} // Workaround: under Qt4 widgetset long operation (opening archive // for example) blocking mouse at whole system while operation executing Sleep(100); Application.ProcessMessages; {$ENDIF} ChooseFile(FFiles[FileIndex]); end; {$IFDEF LCLGTK2} FLastDoubleClickTime := Now; {$ENDIF} end; procedure TFileViewWithMainCtrl.MainControlDragDrop(Sender, Source: TObject; X, Y: Integer); var SourcePanel: TFileViewWithMainCtrl; SourceFiles: TFiles; DropParams: TDropParams; begin if not (Source is TWinControl) or not (TWinControl(Source).Parent is TFileViewWithMainCtrl) then Exit; SourcePanel := ((Source as TWinControl).Parent) as TFileViewWithMainCtrl; // Get file names from source panel. SourceFiles := SourcePanel.CloneSelectedOrActiveFiles; try // Drop onto target panel. DropParams := TDropParams.Create( SourceFiles, // Will be freed automatically. GetDropEffectByKeyAndMouse(GetKeyShiftState, SourcePanel.FMainControlLastMouseButton), MainControl.ClientToScreen(Classes.Point(X, Y)), True, SourcePanel, Self, Self.FileSource, Self.CurrentPath); frmMain.DropFiles(DropParams); SetDropFileIndex(-1); except FreeAndNil(SourceFiles); raise; end; end; procedure TFileViewWithMainCtrl.MainControlDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var AFile: TDisplayFile; SourcePanel: TFileView; TargetPanel: TFileView; SourceDir, TargetDir: String; FileIndex: PtrInt; AtFileList: Boolean; begin Accept := False; if not (Source is TWinControl) or not (TWinControl(Source).Parent is TFileView) then Exit; SourcePanel := ((Source as TWinControl).Parent) as TFileView; TargetPanel := Self; FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); // Always allow dropping into an empty panel. // And it is also allowed to drop onto header in case all visible items // are directories and the user wants to drop into panel's current directory. if FileIndex = InvalidFileIndex then begin SetDropFileIndex(-1); Accept := Sender <> Source; Exit; end; SourceDir := SourcePanel.CurrentPath; TargetDir := TargetPanel.CurrentPath; AFile := FFiles[FileIndex]; if AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory or FileIsArchive(AFile.FSFile.FullPath) then begin if State = dsDragLeave then // Mouse is leaving the control or drop will occur immediately. // Don't draw DropRow rectangle. SetDropFileIndex(-1) else SetDropFileIndex(FileIndex); if Sender = Source then begin if not ((FileIndex = FDragFileIndex) or (AFile.Selected = True)) then Accept := True; end else begin if Assigned(SourcePanel) and Assigned(TargetPanel) then begin if AFile.FSFile.Name = '..' then TargetDir := TargetPanel.FileSource.GetParentDir(TargetDir) else TargetDir := TargetDir + AFile.FSFile.Name + DirectorySeparator; if SourceDir <> TargetDir then Accept := True; end else Accept := True; end; end else if (Sender <> Source) then begin SetDropFileIndex(-1); if Assigned(SourcePanel) then begin if SourcePanel.CurrentPath <> TargetPanel.CurrentPath then Accept := True; end else Accept := True; end else begin SetDropFileIndex(-1); end; end; procedure TFileViewWithMainCtrl.MainControlEndDrag(Sender, Target: TObject; X, Y: Integer); procedure ClearDropNode(aFileView: TFileView); begin if aFileView is TFileViewWithMainCtrl then TFileViewWithMainCtrl(aFileView).SetDropFileIndex(-1); end; begin // If cancelled by the user, DragManager does not send drag-leave event // to the target, so we must clear the DropRow in both panels. ClearDropNode(frmMain.FrameLeft); ClearDropNode(frmMain.FrameRight); if uDragDropEx.TransformDragging = False then ClearAfterDragDrop; end; procedure TFileViewWithMainCtrl.MainControlEnter(Sender: TObject); begin Active := True; end; procedure TFileViewWithMainCtrl.MainControlExit(Sender: TObject); begin FRangeSelecting := False; end; procedure TFileViewWithMainCtrl.MainControlKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ScreenPoint: TPoint; begin if IsLoadingFileList then Exit; case Key of VK_APPS: begin cm_ContextMenu([]); Key := 0; end; VK_MENU: // Alt key if MainControl.Dragging then begin // Force transform to external dragging in anticipation of user // pressing Alt+Tab to change active application window. // Disable flag, so that dragging isn't immediately transformed // back to internal before the other application window is shown. uDragDropEx.AllowTransformToInternal := False; GetCursorPos(ScreenPoint); TransformDraggingToExternal(ScreenPoint); end; end; DoHandleKeyDown(Key, Shift); end; procedure TFileViewWithMainCtrl.MainControlKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FRangeSelecting := False; end; procedure TFileViewWithMainCtrl.MainControlMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var FileIndex: PtrInt; AtFileList: Boolean; AFile, APreviousFile: TDisplayFile; begin SetDragCursor(Shift); FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if not AtFileList then Exit; SetFocus; // history navigation for mice with extra buttons case Button of mbExtra1: begin GoToPrevHistory; Exit; end; mbExtra2: begin GoToNextHistory; Exit; end; end; if IsLoadingFileList then Exit; if IsFileIndexInRange(FileIndex) then begin AFile := FFiles[FileIndex]; FMainControlLastMouseButton := Button; // Needed for rename on mouse FRenameFileIndex := -1; case Button of mbRight: begin SetActiveFile(FileIndex); if gMouseSelectionEnabled and (gMouseSelectionButton = 1) then begin FMouseSelectionStartIndex := FileIndex; FMouseSelectionLastState := not AFile.Selected; tmContextMenu.Enabled:= True; // start context menu timer MarkFile(AFile, FMouseSelectionLastState, False); DoSelectionChanged(FileIndex); SetCaptureControl(MainControl); end; end; mbLeft: begin if gMouseSelectionEnabled then begin if ssCtrl in Shift then begin // if there is no selected files then select also previous file if not HasSelectedFiles then begin APreviousFile := GetActiveDisplayFile; if Assigned(APreviousFile) and (APreviousFile <> AFile) then MarkFile(APreviousFile, True, False); end; InvertFileSelection(AFile, False); DoSelectionChanged(FileIndex); end else if ssShift in Shift then begin FRangeSelecting := True; SelectRange(FileIndex); end else begin if FMouseRename then begin APreviousFile := GetActiveDisplayFile; // Start the rename file timer if the actual file is clicked again if Assigned(APreviousFile) and (APreviousFile = AFile) then begin if AFile.FSFile.IsNameValid then begin FRenameFileIndex := FileIndex; tmRenameFile.Enabled := True; end; end; end; // If mark with left button enable if (gMouseSelectionButton = 0) then begin if not AFile.Selected then MarkFiles(False); end; end; end;//of mouse selection handler end; else SetActiveFile(FileIndex); end; { Dragging } // Check if not already dragging (started by a different button) // and if the mouse button is not used for selection. if not MainControl.Dragging and not (gMouseSelectionEnabled and (Button = mbRight) and (gMouseSelectionButton = Integer(Button))) then begin // indicate that drag start at next mouse move event FStartDrag := True; FDragStartPoint.X := X; FDragStartPoint.Y := Y; FDragFileIndex := FileIndex; uDragDropEx.TransformDragging := False; uDragDropEx.AllowTransformToInternal := True; end; end else // if mouse on empty space begin if (Button = mbRight) and (gMouseSelectionEnabled) and (gMouseSelectionButton = 1) then tmContextMenu.Enabled:= True; // start context menu timer end; // Needed for rename on mouse FMouseRename := gInplaceRename; end; procedure TFileViewWithMainCtrl.MainControlMouseLeave(Sender: TObject); begin end; procedure TFileViewWithMainCtrl.MainControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var Point: TPoint; AFile: TDisplayFile; ExpectedButton: TShiftStateEnum; FileIndex: PtrInt; AtFileList: Boolean; SelStartIndex, SelEndIndex: Integer; begin SetDragCursor(Shift); if FMainControlMouseDown and MainControl.Dragging then begin // If dragging has started then clear MouseDown flag. if (Abs(FDragStartPoint.X - X) > DragManager.DragThreshold) or (Abs(FDragStartPoint.Y - Y) > DragManager.DragThreshold) then begin FMainControlMouseDown := False; end; end; // If dragging is currently in effect, the window has mouse capture and // we can retrieve the window over which the mouse cursor currently is. if MainControl.Dragging and uDragDropEx.IsExternalDraggingSupported then begin Point := MainControl.ClientToScreen(Classes.Point(X, Y)); // use specifically LCLIntf.WindowFromPoint to avoid confusion with Windows.WindowFromPoint if LCLIntf.WindowFromPoint(Point) = 0 then begin // If result is 0 then the window belongs to another process // and we transform intra-process dragging into inter-process dragging. TransformDraggingToExternal(Point); end; end else // if we are about to start dragging if FStartDrag then begin FStartDrag := False; case FMainControlLastMouseButton of mbLeft : ExpectedButton := ssLeft; mbMiddle : ExpectedButton := ssMiddle; mbRight : ExpectedButton := ssRight; else Exit; end; // Make sure the same mouse button is still pressed. if not (ExpectedButton in Shift) then begin ClearAfterDragDrop; end else if IsFileIndexInRange(FDragFileIndex) then begin AFile := FFiles[FDragFileIndex]; // Check if valid item is being dragged. if IsItemValid(AFile) then begin MainControl.BeginDrag(False); end; end; end; // Disable the rename file timer if we are dragging if FMouseRename and MainControl.Dragging then begin tmRenameFile.Enabled := False; FRenameFileIndex := -1; end; // Show file info tooltip. if ShowHint and not MainControl.Dragging and ([ssLeft, ssMiddle, ssRight] * Shift = []) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if FileIndex <> FHintFileIndex then begin FHintFileIndex := FileIndex; Application.CancelHint; end; end; // Selection with right mouse button, if enabled. if FMainControlMouseDown and (FMainControlLastMouseButton = mbRight) and gMouseSelectionEnabled and (gMouseSelectionButton = 1) then begin FileIndex := GetFileIndexFromCursor(X, Y, AtFileList); if IsFileIndexInRange(FileIndex) and (GetActiveFileIndex <> FileIndex) then begin tmContextMenu.Enabled:= False; // stop context menu timer if FMouseSelectionStartIndex < FileIndex then begin SelStartIndex := FMouseSelectionStartIndex; SelEndIndex := FileIndex; end else begin SelStartIndex := FileIndex; SelEndIndex := FMouseSelectionStartIndex; end; SetActiveFile(FileIndex); MarkFiles(SelStartIndex, SelEndIndex, FMouseSelectionLastState); end; end; end; procedure TFileViewWithMainCtrl.MainControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if IsLoadingFileList then Exit; FStartDrag := False; FRangeSelecting := False; // Handle only if button-up was not lifted to finish drag&drop operation. if not FMainControlMouseDown then Exit; if IsMouseSelecting and (GetCaptureControl = MainControl) then SetCaptureControl(nil); FMainControlMouseDown := False; end; procedure TFileViewWithMainCtrl.MainControlQuadClick(Sender: TObject); begin MainControlDblClick(Sender); end; procedure TFileViewWithMainCtrl.MainControlShowHint(Sender: TObject; HintInfo: PHintInfo); var sHint: String; AFile: TDisplayFile; begin HintInfo^.HintStr:= EmptyStr; if not gShowToolTipMode then Exit; if not IsFileIndexInRange(FHintFileIndex) then Exit; AFile := FFiles[FHintFileIndex]; if AFile.FSFile.Name = '..' then Exit; HintInfo^.HintStr:= AFile.FSFile.Name; sHint:= GetFileInfoToolTip(FileSource, AFile.FSFile); if (sHint <> EmptyStr) then begin HintInfo^.HintStr:= HintInfo^.HintStr + LineEnding + sHint; end; end; procedure TFileViewWithMainCtrl.MainControlUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); begin if IsLoadingFileList then Exit; // check if ShiftState is equal to quick search / filter modes if quickSearch.CheckSearchOrFilter(UTF8Key) then Exit; end; procedure TFileViewWithMainCtrl.MainControlWindowProc(var TheMessage: TLMessage); begin // Cancel rename if user scroll file list by mouse if (TheMessage.Msg = LM_VSCROLL) or (TheMessage.Msg = LM_HSCROLL) or (TheMessage.Msg = LM_MOUSEWHEEL) then begin edtRename.Hide; SetFocus; end; FWindowProc(TheMessage); end; function TFileViewWithMainCtrl.OnExDragBegin: Boolean; begin Result := True; end; function TFileViewWithMainCtrl.OnExDragEnd: Boolean; {$IF DEFINED(MSWINDOWS)} var startPoint: TPoint; currentPoint: TPoint; {$ENDIF} begin {$IF DEFINED(MSWINDOWS)} // On windows dragging can be transformed back into internal. // Check if drag was aborted due to mouse moving back into // the application window or the user just cancelled it. if TransformDragging and (FDragDropSource.GetLastStatus = DragDropAborted) then begin // Transform to internal dragging again. // Save current mouse position. GetCursorPos(currentPoint); // Temporarily set cursor position to the point where the drag was started // so that DragManager can properly read the control being dragged. startPoint := MainControl.ClientToScreen(FDragStartPoint); SetCursorPos(startPoint.X, startPoint.Y); // Begin internal dragging. MainControl.BeginDrag(True); // Move cursor back. SetCursorPos(currentPoint.X, currentPoint.Y); // Clear flag. TransformDragging := False; Exit(True); end; {$ENDIF} ClearAfterDragDrop; Result := True; end; function TFileViewWithMainCtrl.OnExDragEnter(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; begin Result := True; end; function TFileViewWithMainCtrl.OnExDragLeave: Boolean; begin SetDropFileIndex(-1); Result := True; end; function TFileViewWithMainCtrl.OnExDragOver(var DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; var ClientPoint: TPoint; AFile: TDisplayFile; FileIndex: PtrInt; AtFileList: Boolean; begin // Dropping into empty panel allowed. Result := True; ClientPoint := MainControl.ScreenToClient(ScreenPoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); if IsFileIndexInRange(FileIndex) then begin // Get the file over which there is something dragged. AFile := FFiles[FileIndex]; // If it is a directory or link mark possibility of drop. if AFile.FSFile.IsDirectory or AFile.FSFile.IsLinkToDirectory or FileIsArchive(AFile.FSFile.FullPath) then SetDropFileIndex(FileIndex) else SetDropFileIndex(-1); end else SetDropFileIndex(-1); end; function TFileViewWithMainCtrl.OnExDrop(const FileNamesList: TStringList; DropEffect: TDropEffect; ScreenPoint: TPoint): Boolean; var AFiles: TFiles = nil; DropParams: TDropParams; begin Result := False; if FileNamesList.Count > 0 then try AFiles := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(FileNamesList[0]), FileNamesList); try DropParams := TDropParams.Create( AFiles, DropEffect, ScreenPoint, True, nil, Self, Self.FileSource, Self.CurrentPath); frmMain.DropFiles(DropParams); Result := True; finally FreeAndNil(AFiles); end; except on e: EFileNotFound do MessageDlg(e.Message, mtError, [mbOK], 0); end; SetDropFileIndex(-1); end; procedure TFileViewWithMainCtrl.SetDropFileIndex(NewFileIndex: PtrInt); var OldDropIndex: PtrInt; begin if FDropFileIndex <> NewFileIndex then begin OldDropIndex := FDropFileIndex; // Set new index before redrawing. FDropFileIndex := NewFileIndex; if IsFileIndexInRange(OldDropIndex) then RedrawFile(OldDropIndex); if IsFileIndexInRange(NewFileIndex) then RedrawFile(NewFileIndex); end; end; procedure TFileViewWithMainCtrl.SetFocus; begin // CanFocus checks parent controls, but not parent form. if GetParentForm(Self).CanFocus and MainControl.CanFocus then begin inherited SetFocus; MainControl.SetFocus; end; end; procedure TFileViewWithMainCtrl.SetDragCursor(Shift: TShiftState); var DropEffect: TDropEffect; begin if (DragManager <> nil) and DragManager.IsDragging then begin DropEffect := GetDropEffectByKey(Shift); if DropEffect = DropMoveEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowMove else if DropEffect = DropLinkEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowLink else if DropEffect = DropCopyEffect then TControlHandlersHack(MainControl).DragCursor:= crArrowCopy else TControlHandlersHack(MainControl).DragCursor:= crDrag; end else TControlHandlersHack(MainControl).DragCursor:= crDrag; end; procedure TFileViewWithMainCtrl.cm_RenameOnly(const Params: array of string); var aFile: TFile; begin if not IsLoadingFileList and (fsoSetFileProperty in FileSource.GetOperationsTypes) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then ShowRenameFileEdit(aFile) else ShowPathEdit; finally FreeAndNil(aFile); end; end; end; procedure TFileViewWithMainCtrl.SetMainControl(AValue: TWinControl); begin if FMainControl = AValue then Exit; FMainControl := AValue; FMainControl.ControlStyle := FMainControl.ControlStyle + [csQuadClicks]; FMainControl.OnEnter := @MainControlEnter; FMainControl.OnExit := @MainControlExit; FMainControl.OnKeyDown := @MainControlKeyDown; FMainControl.OnKeyUp := @MainControlKeyUp; FMainControl.OnShowHint := @MainControlShowHint; FMainControl.OnUTF8KeyPress := @MainControlUTF8KeyPress; TControlHandlersHack(FMainControl).OnDblClick := @MainControlDblClick; TControlHandlersHack(FMainControl).OnQuadClick := @MainControlQuadClick; TControlHandlersHack(FMainControl).OnDragDrop := @MainControlDragDrop; TControlHandlersHack(FMainControl).OnDragOver := @MainControlDragOver; TControlHandlersHack(FMainControl).OnEndDrag := @MainControlEndDrag; TControlHandlersHack(FMainControl).OnMouseDown := @MainControlMouseDown; TControlHandlersHack(FMainControl).OnMouseLeave := @MainControlMouseLeave; TControlHandlersHack(FMainControl).OnMouseMove := @MainControlMouseMove; TControlHandlersHack(FMainControl).OnMouseUp := @MainControlMouseUp; edtRename.Parent := FMainControl; HotMan.Register(MainControl, 'Files Panel'); end; procedure TFileViewWithMainCtrl.tmContextMenuTimer(Sender: TObject); var AFile: TDisplayFile; ClientPoint, MousePoint: TPoint; Background: Boolean; FileIndex: PtrInt; AtFileList: Boolean; begin FMainControlMouseDown:= False; tmContextMenu.Enabled:= False; // stop context menu timer MousePoint := Mouse.CursorPos; ClientPoint := MainControl.ScreenToClient(MousePoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); Background := not IsFileIndexInRange(FileIndex); if not Background then begin // Skip if a rename is in progress on the same file if FRenameFileIndex = FileIndex then Exit; AFile := FFiles[FileIndex]; MarkFile(AFile, not FMouseSelectionLastState, False); DoSelectionChanged(FileIndex); end; frmMain.Commands.DoContextMenu(Self, MousePoint.x, MousePoint.y, Background); end; procedure TFileViewWithMainCtrl.tmRenameFileTimer(Sender: TObject); var ClientPoint, MousePoint: TPoint; Background: Boolean; FileIndex: PtrInt; AtFileList: Boolean; begin if FMainControlMouseDown = True then begin FMainControlMouseDown := False; tmRenameFile.Enabled := False; // stop timer Exit; end; tmRenameFile.Enabled := False; // stop timer MousePoint := Mouse.CursorPos; ClientPoint := MainControl.ScreenToClient(MousePoint); FileIndex := GetFileIndexFromCursor(ClientPoint.x, ClientPoint.y, AtFileList); Background := not IsFileIndexInRange(FileIndex); if not Background then begin if FRenameFileIndex = FileIndex then begin FMouseRename := False; cm_RenameOnly([]); end; end; FRenameFileIndex := -1; end; procedure TFileViewWithMainCtrl.TransformDraggingToExternal(ScreenPoint: TPoint); begin // Set flag temporarily before stopping internal dragging, // so that triggered events will know that dragging is transforming. TransformDragging := True; // Stop internal dragging DragManager.DragStop(False); {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // Under GTK, DragManager does not release it's mouse capture on // DragStop(). We must release it here manually or LCL will get confused // with who "owns" the capture after the GTK drag&drop finishes. ReleaseMouseCapture; {$ENDIF} // Clear flag before starting external dragging. TransformDragging := False; // Start external dragging. // On Windows it does not return until dragging is finished. if IsFileIndexInRange(FDragFileIndex) then begin BeginDragExternal(FFiles[FDragFileIndex], FDragDropSource, FMainControlLastMouseButton, ScreenPoint); end; end; procedure TFileViewWithMainCtrl.edtRenameEnter(Sender: TObject); begin FWindowProc:= MainControl.WindowProc; MainControl.WindowProc:= @MainControlWindowProc; end; procedure TFileViewWithMainCtrl.edtRenameExit(Sender: TObject); begin edtRename.Visible := False; MainControl.WindowProc:= FWindowProc; // OnEnter don't called automatically (bug?) // TODO: Check on which widgetset/OS this is needed. FMainControl.OnEnter(Self); end; procedure TFileViewWithMainCtrl.edtRenameKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var NewFileName: String; OldFileNameAbsolute: String; aFile: TFile = nil; begin case Key of VK_ESCAPE: begin Key := 0; edtRename.Visible:=False; SetFocus; end; VK_RETURN, VK_SELECT: begin Key := 0; // catch the enter NewFileName := edtRename.Text; OldFileNameAbsolute := edtRename.Hint; aFile := CloneActiveFile; try try if RenameFile(FileSource, aFile, NewFileName, True) = True then begin edtRename.Visible:=False; SetActiveFile(CurrentPath + NewFileName); SetFocus; end else msgError(Format(rsMsgErrRename, [ExtractFileName(OldFileNameAbsolute), NewFileName])); except on e: EInvalidFileProperty do msgError(Format(rsMsgErrRename + ':' + LineEnding + '%s (%s)', [ExtractFileName(OldFileNameAbsolute), NewFileName, rsMsgInvalidFileName, e.Message])); end; finally FreeAndNil(aFile); end; end; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: Key := 0; {$ENDIF} {$IFDEF LCLWIN32} // Workaround for Win32 - right arrow must clear selection at first move. VK_RIGHT: if (Shift = []) and (edtRename.SelLength > 0) then begin Key := edtRename.CaretPos.X; edtRename.SelLength := 0; edtRename.CaretPos := Classes.Point(Key, 0); Key := 0; end; {$ENDIF} end; end; procedure TFileViewWithMainCtrl.AfterChangePath; begin if edtRename.Visible then begin edtRename.Hide; SetFocus; end; inherited AfterChangePath; end; {$IFDEF LCLGTK2} function TFileViewWithMainCtrl.TooManyDoubleClicks: Boolean; begin Result := ((Now - FLastDoubleClickTime) <= ((1/86400)*(DblClickTime/1000))); end; {$ENDIF} procedure TFileViewWithMainCtrl.WorkerFinished(const Worker: TFileViewWorker); begin inherited WorkerFinished(Worker); MainControl.Cursor := crDefault; // Update status line only if not (csDestroying in ComponentState) then UpdateInfoPanel; end; procedure TFileViewWithMainCtrl.ShowRenameFileEdit(AFile: TFile); var lenEdtText, lenEdtTextExt, i: Integer; seperatorSet: set of AnsiChar; begin if edtRename.Visible then begin lenEdtText := UTF8Length(edtRename.Text); lenEdtTextExt := UTF8Length(ExtractFileExt(edtRename.Text)); if (edtRename.SelLength = lenEdtText) then begin // Now all selected, change it to name-only. edtRename.SelStart:= 0; edtRename.SelLength:= lenEdtText - lenEdtTextExt; end else if (edtRename.SelStart = 0) and (edtRename.SelLength = lenEdtText - lenEdtTextExt) then begin // Now name-only selected, change it to ext-only. edtRename.SelStart:= edtRename.SelLength + 1; edtRename.SelLength:= lenEdtText - edtRename.SelStart; end else begin // Partial selection cycle. seperatorSet:= [' ', '-', '_', '.']; i:= edtRename.SelStart + edtRename.SelLength; while true do begin if (edtRename.Text[UTF8CharToByteIndex(PChar(edtRename.Text), length(edtRename.Text), i)] in seperatorSet) and not(edtRename.Text[UTF8CharToByteIndex(PChar(edtRename.Text), length(edtRename.Text), i+1)] in seperatorSet) then begin edtRename.SelStart:= i; Break; end; inc(i); if i >= lenEdtText then begin edtRename.SelStart:= 0; Break; end; end; i:= edtRename.SelStart + 1; while true do begin if (i >= lenEdtText) or (edtRename.Text[UTF8CharToByteIndex(PChar(edtRename.Text), length(edtRename.Text), i+1)] in seperatorSet) then begin edtRename.SelLength:= i - edtRename.SelStart; Break; end; inc(i); end; end; end else begin edtRename.Hint := aFile.FullPath; edtRename.Text := aFile.Name; edtRename.Visible := True; edtRename.SetFocus; if gRenameSelOnlyName and (aFile.Extension <> EmptyStr) and (aFile.Name <> EmptyStr) then begin {$IFDEF LCLGTK2} edtRename.SelStart:=1; {$ENDIF} edtRename.SelStart:=0; edtRename.SelLength:= UTF8Length(aFile.Name) - UTF8Length(aFile.Extension) - 1; end else edtRename.SelectAll; end; end; procedure TFileViewWithMainCtrl.WorkerStarting(const Worker: TFileViewWorker); begin inherited WorkerStarting(Worker); MainControl.Cursor := crHourGlass; UpdateInfoPanel; // Update status line only end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewworker.pas���������������������������������������������������0000644�0001750�0000144�00000067621�12452222107�021250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileViewWorker; {$mode objfpc}{$H+} interface uses Classes, SysUtils, contnrs, syncobjs, StringHashList, uDisplayFile, uFile, uFileSource, uFileSorting, uFileProperty, uFileSourceOperation, uFileSourceListOperation, fQuickSearch; type TFileViewWorkType = (fvwtNone, fvwtCreate, // Creates file list fvwtUpdate); // Updates file list TFileViewWorker = class; TStartingWorkMethod = procedure (const Worker: TFileViewWorker) of object; TFinishedWorkMethod = procedure (const Worker: TFileViewWorker) of object; { TFileViewWorker } TFileViewWorker = class strict private FAborted: Boolean; {en After FCanBeDestroyed is set to True the worker may be destroyed.} FCanBeDestroyed: Boolean; FWorking: Boolean; FOnStarting: TStartingWorkMethod; FOnFinished: TFinishedWorkMethod; FThread: TThread; procedure DoFinished; procedure DoStarting; protected FWorkType: TFileViewWorkType; procedure DoneWorking; procedure Execute; virtual; abstract; function IsWorking: Boolean; virtual; property Thread: TThread read FThread; public constructor Create(AThread: TThread); virtual; procedure Abort; virtual; procedure Start; procedure StartParam(Params: Pointer); property Aborted: Boolean read FAborted; property CanBeDestroyed: Boolean read FCanBeDestroyed; property OnFinished: TFinishedWorkMethod read FOnFinished write FOnFinished; property OnStarting: TStartingWorkMethod read FOnStarting write FOnStarting; property Working: Boolean read IsWorking; property WorkType: TFileViewWorkType read FWorkType; end; TFVWorkerFileList = class private FFiles: TFPObjectList; FUserData: TFPList; function GetCount: Integer; function GetFile(Index: Integer): TDisplayFile; function GetData(Index: Integer): Pointer; public constructor Create; destructor Destroy; override; function AddClone(const AFile: TDisplayFile; UserData: Pointer): Integer; property Count: Integer read GetCount; property Files[Index: Integer]: TDisplayFile read GetFile; property Data[Index: Integer]: Pointer read GetData; end; TSetFileListMethod = procedure (var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles) of object; TUpdateFileMethod = procedure (const UpdatedFile: TDisplayFile; const UserData: Pointer) of object; { TFileListBuilder } TFileListBuilder = class(TFileViewWorker) private FFilteredDisplayFiles: TDisplayFiles; FAllDisplayFiles: TDisplayFiles; FExistingDisplayFilesHashed: TStringHashList; FSetFileListMethod: TSetFileListMethod; FListOperation: TFileSourceListOperation; FListOperationLock: TCriticalSection; // Data captured from the file view before start. FFileSource: IFileSource; FFileSourceIndex: Integer; FFileFilter: String; FFilterOptions: TQuickSearchOptions; FCurrentPath: String; FFlatView: Boolean; FSortings: TFileSortings; FFilePropertiesNeeded: TFilePropertiesTypes; {en Calls the update method with the new built lists. It is called from GUI thread. } procedure DoSetFileList; class function InternalMatchesFilter(aFile: TFile; const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; {en Prepare filter string based on options. } class function PrepareFilter(const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): String; protected {en Retrieves file list from file source, sorts and creates a display file list. It may be run from a worker thread so it cannot access GUI directly. } procedure Execute; override; public constructor Create(AFileSource: IFileSource; AFileSourceIndex: Integer; const AFileFilter: String; const AFilterOptions: TQuickSearchOptions; const ACurrentPath: String; const ASorting: TFileSortings; AFlatView: Boolean; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; ASetFileListMethod: TSetFileListMethod; var ExistingDisplayFiles: TDisplayFiles; var ExistingDisplayFilesHashed: TStringHashList); reintroduce; destructor Destroy; override; procedure Abort; override; {en Fills aFiles with files from aFileSourceFiles. Filters out any files that shouldn't be shown using aFileFilter. } class procedure MakeDisplayFileList(allDisplayFiles: TDisplayFiles; filteredDisplayFiles: TDisplayFiles; aFileFilter: String; const aFilterOptions: TQuickSearchOptions); class procedure MakeAllDisplayFileList(aFileSource: IFileSource; aFileSourceFiles: TFiles; aDisplayFiles: TDisplayFiles; const aSortings: TFileSortings); class procedure MakeAllDisplayFileList(aFileSource: IFileSource; aFileSourceFiles: TFiles; aExistingDisplayFiles: TDisplayFiles; const aSortings: TFileSortings; aExistingDisplayFilesHashed: TStringHashList); class function MatchesFilter(aFile: TFile; aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; end; { TFilePropertiesRetriever } TFilePropertiesRetriever = class(TFileViewWorker) private FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FUpdateFileMethod: TUpdateFileMethod; FFileSource: IFileSource; FFilePropertiesNeeded: TFilePropertiesTypes; {en Updates file in the file view with new data from FWorkerData. It is called from GUI thread. } procedure DoUpdateFile; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; end; { TCalculateSpaceWorker } TCalculateSpaceWorker = class(TFileViewWorker) private FWorkingFile: TDisplayFile; FWorkingUserData: Pointer; FFileList: TFVWorkerFileList; FCompletedCalculations: Integer; FUpdateFileMethod: TUpdateFileMethod; FFileSource: IFileSource; FOperation: TFileSourceOperation; FOperationLock: TCriticalSection; {en Updates file in the file view with new data. It is called from GUI thread. } procedure DoUpdateFile; protected procedure Execute; override; public constructor Create(AFileSource: IFileSource; AThread: TThread; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); reintroduce; destructor Destroy; override; procedure Abort; override; property CompletedCalculations: Integer read FCompletedCalculations; end; {$IFDEF timeFileView} var filelistLoaderTime: TDateTime; {$ENDIF} implementation uses {$IFDEF timeFileView} uDebug, {$ENDIF} LCLProc, Graphics, DCFileAttributes, uFileSourceOperationTypes, uOSUtils, DCStrUtils, uDCUtils, uExceptions, uGlobs, uMasks, uPixMapManager, uFileSourceProperty, uFileSourceCalcStatisticsOperation, uFileSourceOperationOptions; { TFVWorkerFileList } constructor TFVWorkerFileList.Create; begin FFiles := TFPObjectList.Create(True); FUserData := TFPList.Create; inherited; end; destructor TFVWorkerFileList.Destroy; begin inherited; FFiles.Free; FUserData.Free; end; function TFVWorkerFileList.AddClone(const AFile: TDisplayFile; UserData: Pointer): Integer; var ClonedFile: TDisplayFile; begin ClonedFile := AFile.Clone(True); Result := FFiles.Add(ClonedFile); FUserData.Add(UserData); end; function TFVWorkerFileList.GetCount: Integer; begin Result := FFiles.Count; end; function TFVWorkerFileList.GetFile(Index: Integer): TDisplayFile; begin Result := TDisplayFile(FFiles.Items[Index]); end; function TFVWorkerFileList.GetData(Index: Integer): Pointer; begin Result := FUserData.Items[Index]; end; { TFileViewWorker } constructor TFileViewWorker.Create(AThread: TThread); begin // Set Working=True on creation because these workers are usually scheduled // to run by a non-main thread, so it might take a while for Execute to be called. FWorking := True; FWorkType := fvwtNone; FThread := AThread; end; procedure TFileViewWorker.Abort; begin FAborted := True; end; procedure TFileViewWorker.DoFinished; begin FWorking := False; try FOnFinished(Self); except on e: Exception do HandleException(e); end; end; procedure TFileViewWorker.DoStarting; begin try FOnStarting(Self); except on e: Exception do HandleException(e); end; end; procedure TFileViewWorker.DoneWorking; begin FWorking := False; end; function TFileViewWorker.IsWorking: Boolean; begin Result := FWorking and not FAborted; end; procedure TFileViewWorker.Start; begin try if not Aborted then begin if Assigned(FOnStarting) then TThread.Synchronize(Thread, @DoStarting); if not Aborted then Execute; // virtual call if Assigned(FOnFinished) then TThread.Synchronize(Thread, @DoFinished); end; finally FWorking := False; FCanBeDestroyed := True; end; end; procedure TFileViewWorker.StartParam(Params: Pointer); begin Start; end; { TFileListBuilder } constructor TFileListBuilder.Create(AFileSource: IFileSource; AFileSourceIndex: Integer; const AFileFilter: String; const AFilterOptions: TQuickSearchOptions; const ACurrentPath: String; const ASorting: TFileSortings; AFlatView: Boolean; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; ASetFileListMethod: TSetFileListMethod; var ExistingDisplayFiles: TDisplayFiles; var ExistingDisplayFilesHashed: TStringHashList); begin inherited Create(AThread); FAllDisplayFiles := ExistingDisplayFiles; ExistingDisplayFiles := nil; FExistingDisplayFilesHashed := ExistingDisplayFilesHashed; ExistingDisplayFilesHashed := nil; FWorkType := fvwtCreate; FListOperation := nil; FListOperationLock := TCriticalSection.Create; FFileSource := AFileSource; FFileSourceIndex := AFileSourceIndex; FFlatView := AFlatView; FFileFilter := AFileFilter; FFilterOptions := AFilterOptions; FCurrentPath := ACurrentPath; FSortings := CloneSortings(ASorting); FFilePropertiesNeeded := AFilePropertiesNeeded; FSetFileListMethod := ASetFileListMethod; end; destructor TFileListBuilder.Destroy; begin inherited Destroy; FListOperationLock.Free; FExistingDisplayFilesHashed.Free; FFilteredDisplayFiles.Free; FAllDisplayFiles.Free; end; procedure TFileListBuilder.Abort; begin inherited; FListOperationLock.Acquire; try if Assigned(FListOperation) then FListOperation.Stop; finally FListOperationLock.Release; end; end; procedure TFileListBuilder.Execute; var AFile: TFile; I: Integer; HaveUpDir: Boolean = False; FileSourceFiles: TFiles = nil; begin try if Aborted then Exit; if fsoList in FFileSource.GetOperationsTypes then begin FListOperationLock.Acquire; try FListOperation := FFileSource.CreateListOperation(FCurrentPath) as TFileSourceListOperation; finally FListOperationLock.Release; end; if Assigned(FListOperation) then try FListOperation.FlatView := FFlatView; FListOperation.AssignThread(Thread); FListOperation.Execute; if FListOperation.Result = fsorFinished then FileSourceFiles := FListOperation.ReleaseFiles; finally FListOperationLock.Acquire; try FreeAndNil(FListOperation); finally FListOperationLock.Release; end; end; end; {$IFDEF timeFileView} DCDebug('Loaded files : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} if Aborted then Exit; if Assigned(FileSourceFiles) then begin // Check if up-dir '..' is present. // If it is present it will usually be the first file. for i := 0 to FileSourceFiles.Count - 1 do begin if FileSourceFiles[i].Name = '..' then begin HaveUpDir := True; Break; end; end; if (not HaveUpDir) and ((not FFileSource.IsPathAtRoot(FCurrentPath)) or // Add '..' to go to higher level file source, if there is more than one. (FFileSourceIndex > 0)) then begin AFile := FFileSource.CreateFileObject(FCurrentPath); AFile.Name := '..'; if fpAttributes in AFile.SupportedProperties then begin if AFile.AttributesProperty is TNtfsFileAttributesProperty then AFile.Attributes := FILE_ATTRIBUTE_DIRECTORY else if AFile.AttributesProperty is TUnixFileAttributesProperty then AFile.Attributes := S_IFDIR else AFile.Attributes := faFolder; end; FileSourceFiles.Insert(AFile, 0); end; end; if Aborted then Exit; // Retrieve RetrievableFileProperties which used in sorting if FFilePropertiesNeeded <> [] then begin for I:= 0 to FileSourceFiles.Count - 1 do FFileSource.RetrieveProperties(FileSourceFiles[I], FFilePropertiesNeeded); end; // Make display file list from file source file list. if Assigned(FAllDisplayFiles) and Assigned(FExistingDisplayFilesHashed) then begin // Updating existing list. MakeAllDisplayFileList( FFileSource, FileSourceFiles, FAllDisplayFiles, FSortings, FExistingDisplayFilesHashed); end else begin // Creating new list. if Assigned(FAllDisplayFiles) then FAllDisplayFiles.Clear else FAllDisplayFiles := TDisplayFiles.Create(True); MakeAllDisplayFileList(FFileSource, FileSourceFiles, FAllDisplayFiles, FSortings); end; // By now the TFile objects have been transfered to FAllDisplayFiles. if Assigned(FileSourceFiles) then FileSourceFiles.OwnsObjects := False; {$IFDEF timeFileView} DCDebug('Made sorted disp.lst: ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} FFilteredDisplayFiles := TDisplayFiles.Create(False); MakeDisplayFileList(FAllDisplayFiles, FFilteredDisplayFiles, FFileFilter, FFilterOptions); {$IFDEF timeFileView} DCDebug('Made filtered list : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} if Aborted then Exit; // Loading file list is complete. Update grid with the new file list. TThread.Synchronize(Thread, @DoSetFilelist); {$IFDEF timeFileView} DCDebug('Grid files updated : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} finally {$IFDEF timeFileView} DCDebug('Finished : ' + IntToStr(DateTimeToTimeStamp(Now - filelistLoaderTime).Time)); {$ENDIF} FreeAndNil(FFilteredDisplayFiles); FreeAndNil(FileSourceFiles); FreeAndNil(FAllDisplayFiles); end; end; class function TFileListBuilder.InternalMatchesFilter(aFile: TFile; const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; begin if (gShowSystemFiles = False) and AFile.IsSysFile and (AFile.Name <> '..') then Result := True // Ignore list else if gIgnoreListFileEnabled and MatchesMaskListEx(AFile, glsIgnoreList) then Result := True // Filter files. else if aFileFilter <> EmptyStr then begin Result := True; if (AFile.Name = '..') or (AFile.Name = '.') then Result := False else if (aFilterOptions.Items = qsiFiles) and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := False else if (aFilterOptions.Items = qsiDirectories) and not AFile.IsDirectory and not AFile.IsLinkToDirectory then Result := False else begin if MatchesMask(AFile.Name, aFileFilter, aFilterOptions.SearchCase = qscSensitive) then Result := False; end; end else Result := False; end; class function TFileListBuilder.PrepareFilter(const aFileFilter: String; const aFilterOptions: TQuickSearchOptions): String; var sFilterNameNoExt: String; begin Result := aFileFilter; if Result <> EmptyStr then begin if Pos('.', Result) <> 0 then begin sFilterNameNoExt := ExtractOnlyFileName(Result); if not (qsmBeginning in aFilterOptions.Match) then sFilterNameNoExt := '*' + sFilterNameNoExt; if not (qsmEnding in aFilterOptions.Match) then sFilterNameNoExt := sFilterNameNoExt + '*'; Result := sFilterNameNoExt + ExtractFileExt(Result) + '*'; end else begin if not (qsmBeginning in aFilterOptions.Match) then Result := '*' + Result; Result := Result + '*'; end; end; end; class procedure TFileListBuilder.MakeDisplayFileList( allDisplayFiles: TDisplayFiles; filteredDisplayFiles: TDisplayFiles; aFileFilter: String; const aFilterOptions: TQuickSearchOptions); var i: Integer; AFile: TFile; filter: Boolean; begin filteredDisplayFiles.Clear; if Assigned(allDisplayFiles) then begin aFileFilter := PrepareFilter(aFileFilter, aFilterOptions); for i := 0 to allDisplayFiles.Count - 1 do begin AFile := allDisplayFiles[i].FSFile; try filter := InternalMatchesFilter(AFile, aFileFilter, aFilterOptions); except on EConvertError do aFileFilter := EmptyStr; end; if not filter then filteredDisplayFiles.Add(allDisplayFiles[i]); end; end; end; class procedure TFileListBuilder.MakeAllDisplayFileList( aFileSource: IFileSource; aFileSourceFiles: TFiles; aDisplayFiles: TDisplayFiles; const aSortings: TFileSortings); var i: PtrInt; AFile: TDisplayFile; HaveIcons: Boolean; DirectAccess: Boolean; begin aDisplayFiles.Clear; if Assigned(aFileSourceFiles) then begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in aFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, aFileSourceFiles.Path); end; for i := 0 to aFileSourceFiles.Count - 1 do begin AFile := TDisplayFile.Create(aFileSourceFiles[i]); AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if HaveIcons then begin AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, not gLoadIconsSeparately, gShowIcons, not gIconOverlays); end; aDisplayFiles.Add(AFile); end; TDisplayFileSorter.Sort(aDisplayFiles, aSortings); end; end; class procedure TFileListBuilder.MakeAllDisplayFileList( aFileSource: IFileSource; aFileSourceFiles: TFiles; aExistingDisplayFiles: TDisplayFiles; const aSortings: TFileSortings; aExistingDisplayFilesHashed: TStringHashList); var i: PtrInt; j: Integer; AFile: TDisplayFile; aNewFiles: TDisplayFiles; HaveIcons: Boolean; DirectAccess: Boolean; begin if Assigned(aFileSourceFiles) then begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in aFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, aFileSourceFiles.Path); end; aNewFiles := TDisplayFiles.Create(False); try for i := 0 to aFileSourceFiles.Count - 1 do begin j := aExistingDisplayFilesHashed.Find(aFileSourceFiles[i].FullPath); if j >= 0 then begin // Existing file. AFile := TDisplayFile(aExistingDisplayFilesHashed.List[j]^.Data); AFile.FSFile := aFileSourceFiles[i]; end else begin AFile := TDisplayFile.Create(aFileSourceFiles[i]); AFile.TextColor:= gColorExt.GetColorBy(AFile.FSFile); if HaveIcons then begin AFile.IconID := PixMapManager.GetIconByFile(AFile.FSFile, DirectAccess, not gLoadIconsSeparately, gShowIcons, not gIconOverlays); end; // New file. aNewFiles.Add(AFile); end; end; // Remove files that don't exist anymore. for i := aExistingDisplayFiles.Count - 1 downto 0 do begin if not Assigned(aExistingDisplayFiles[i].FSFile) then aExistingDisplayFiles.Delete(i); end; // Merge new files into existing files list. TDisplayFileSorter.InsertSort(aNewFiles, aExistingDisplayFiles, aSortings); finally aNewFiles.Free; end; end else begin aExistingDisplayFiles.Clear; end; end; class function TFileListBuilder.MatchesFilter(aFile: TFile; aFileFilter: String; const aFilterOptions: TQuickSearchOptions): Boolean; begin aFileFilter := PrepareFilter(aFileFilter, aFilterOptions); try Result := InternalMatchesFilter(AFile, aFileFilter, aFilterOptions); except on EConvertError do Result := False; end; end; procedure TFileListBuilder.DoSetFileList; begin DoneWorking; if not Aborted and Assigned(FSetFileListMethod) then FSetFileListMethod(FAllDisplayFiles, FFilteredDisplayFiles); end; { TFilePropertiesRetriever } constructor TFilePropertiesRetriever.Create(AFileSource: IFileSource; AThread: TThread; AFilePropertiesNeeded: TFilePropertiesTypes; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FFilePropertiesNeeded := AFilePropertiesNeeded; FUpdateFileMethod := AUpdateFileMethod; end; destructor TFilePropertiesRetriever.Destroy; begin FFileList.Free; inherited Destroy; end; procedure TFilePropertiesRetriever.Execute; var i: Integer; HaveIcons: Boolean; DirectAccess: Boolean; begin HaveIcons := gShowIcons <> sim_none; DirectAccess := fspDirectAccess in FFileSource.Properties; if HaveIcons and gIconsExclude and DirectAccess then begin DirectAccess := not IsInPathList(gIconsExcludeDirs, FFileList.Files[0].FSFile.Path); end; for i := 0 to FFileList.Count - 1 do begin if Aborted then Exit; try FWorkingFile := FFileList.Files[i]; FWorkingUserData := FFileList.Data[i]; if FFileSource.CanRetrieveProperties(FWorkingFile.FSFile, FFilePropertiesNeeded) then FFileSource.RetrieveProperties(FWorkingFile.FSFile, FFilePropertiesNeeded); if FWorkingFile.TextColor = clNone then FWorkingFile.TextColor:= gColorExt.GetColorBy(FWorkingFile.FSFile); if HaveIcons then begin if FWorkingFile.IconID < 0 then FWorkingFile.IconID := PixMapManager.GetIconByFile( FWorkingFile.FSFile, DirectAccess, True, gShowIcons, not gIconOverlays); {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} if gIconOverlays and (FWorkingFile.IconOverlayID < 0) then FWorkingFile.IconOverlayID := PixMapManager.GetIconOverlayByFile( FWorkingFile.FSFile, DirectAccess); {$ENDIF} end; if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); except on EListError do; on EFileNotFound do; end; end; end; procedure TFilePropertiesRetriever.DoUpdateFile; begin if not Aborted and Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; { TCalculateSpaceWorker } constructor TCalculateSpaceWorker.Create(AFileSource: IFileSource; AThread: TThread; AUpdateFileMethod: TUpdateFileMethod; var AFileList: TFVWorkerFileList); begin inherited Create(AThread); FWorkType := fvwtUpdate; FFileList := AFileList; AFileList := nil; FFileSource := AFileSource; FUpdateFileMethod := AUpdateFileMethod; FOperation := nil; FOperationLock := TCriticalSection.Create; end; destructor TCalculateSpaceWorker.Destroy; begin FFileList.Free; inherited Destroy; FOperationLock.Free; end; procedure TCalculateSpaceWorker.Abort; begin inherited; FOperationLock.Acquire; try if Assigned(FOperation) then FOperation.Stop; finally FOperationLock.Release; end; end; procedure TCalculateSpaceWorker.Execute; var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; TargetFiles: TFiles = nil; AFile: TFile; i: Integer; begin if fsoCalcStatistics in FFileSource.GetOperationsTypes then begin for i := 0 to FFileList.Count - 1 do begin if Aborted then Exit; FWorkingFile := FFileList.Files[i]; FWorkingUserData := FFileList.Data[i]; AFile := FWorkingFile.FSFile; if (fpSize in AFile.SupportedProperties) and AFile.IsDirectory then begin TargetFiles := TFiles.Create(AFile.Path); try TargetFiles.Add(AFile.Clone); FOperationLock.Acquire; try FOperation := FFileSource.CreateCalcStatisticsOperation(TargetFiles); finally FOperationLock.Release; end; CalcStatisticsOperation := FOperation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperation.SkipErrors := True; CalcStatisticsOperation.SymLinkOption := fsooslDontFollow; FOperation.Execute; // blocks until finished if FOperation.Result = fsorFinished then begin CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; AFile.Size := CalcStatisticsOperationStatistics.Size; Inc(FCompletedCalculations); if Aborted then Exit; TThread.Synchronize(Thread, @DoUpdateFile); end; finally FreeAndNil(TargetFiles); FOperationLock.Acquire; try FreeAndNil(FOperation); finally FOperationLock.Release; end; end; end; end; end; end; procedure TCalculateSpaceWorker.DoUpdateFile; begin if not Aborted and Assigned(FUpdateFileMethod) then FUpdateFileMethod(FWorkingFile, FWorkingUserData); end; end. ���������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewheader.pas���������������������������������������������������0000644�0001750�0000144�00000035430�12651062475�021173� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileViewHeader; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, ComCtrls, uPathLabel, uFileView, KASPathEdit, uFileSorting; type { TFileViewHeader } TFileViewHeader = class(TPanel) private FFileView: TFileView; FAddressLabel: TPathLabel; FPathLabel: TPathLabel; FPathEdit: TKASPathEdit; procedure HeaderResize(Sender: TObject); procedure PathEditExit(Sender: TObject); procedure PathEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure PathLabelClick(Sender: TObject); procedure PathLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure AddressLabelClick(Sender: TObject); procedure AddressLabelMouseEnter(Sender: TObject); procedure PathLabelDblClick(Sender: TObject); procedure tmViewHistoryMenuTimer(Sender: TObject); procedure PathLabelMouseWheelUp(Sender: TObject;Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); procedure PathLabelMouseWheelDown(Sender: TObject;Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); protected tmViewHistoryMenu: TTimer; public constructor Create(AOwner: TFileView; AParent: TWinControl); reintroduce; procedure UpdateAddressLabel; procedure UpdatePathLabel; procedure ShowPathEdit; procedure SetActive(bActive: Boolean); end; { TFileViewFixedHeader } TFileViewFixedHeader = class(THeaderControl) private FFileView: TFileView; FDown: Boolean; FMouseInControl: Boolean; FSelectedSection: Integer; FSorting: TFileSortings; procedure UpdateState; protected procedure SectionClick(Section: THeaderSection); override; procedure MouseEnter; override; procedure MouseLeave; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; public constructor Create(AOwner: TFileView; AParent: TWinControl); reintroduce; destructor Destroy; override; procedure Click; override; procedure UpdateHeader; procedure UpdateSorting(Sorting: TFileSortings); end; implementation uses LCLType, ShellCtrls, uDCUtils, DCOSUtils, DCStrUtils, uKeyboard, fMain, uFileSourceUtil, uGlobs, uPixMapManager, uLng, uFileFunctions, uArchiveFileSource; const SortingImageIndex: array[TSortDirection] of Integer = (-1, 0, 1); { TFileViewHeader } procedure TFileViewHeader.PathEditExit(Sender: TObject); begin FPathEdit.Visible := False; end; procedure TFileViewHeader.PathEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var NewPath: String; begin case Key of VK_ESCAPE: begin Key := 0; FPathEdit.Visible:=False; FFileView.SetFocus; end; VK_RETURN, VK_SELECT: begin Key := 0; // catch the enter NewPath:= NormalizePathDelimiters(FPathEdit.Text); NewPath:= ReplaceEnvVars(ReplaceTilde(NewPath)); if not mbFileExists(NewPath) then ChooseFileSource(FFileView, NewPath) else begin ChooseFileSource(FFileView, ExtractFileDir(NewPath)); FFileView.SetActiveFile(ExtractFileName(NewPath)); end; FPathEdit.Visible := False; FFileView.SetFocus; end; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. VK_UP, VK_DOWN: Key := 0; {$ENDIF} end; end; procedure TFileViewHeader.PathLabelClick(Sender: TObject); var walkPath, dirNameToSelect: String; begin FFileView.SetFocus; if FPathLabel.SelectedDir <> '' then begin // User clicked on a subdirectory of the path. walkPath := FFileView.CurrentPath; FFileView.CurrentPath := FPathLabel.SelectedDir; while (Length(walkPath) > Length(FPathLabel.SelectedDir) + 1) do begin dirNameToSelect := ExtractFileName(ExcludeTrailingPathDelimiter(walkPath)); walkPath := FFileView.FileSource.GetParentDir(walkPath); end; FFileView.SetActiveFile(dirNameToSelect); end else tmViewHistoryMenu.Enabled:=TRUE; //Let's start timer. If it's a double-click, we'll abort timer otherwise we'll show history as before but 250ms later. end; procedure TFileViewHeader.tmViewHistoryMenuTimer(Sender: TObject); begin tmViewHistoryMenu.Enabled:=FALSE; frmMain.Commands.cm_ViewHistory([]); end; procedure TFileViewHeader.PathLabelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); begin if ssCtrl in Shift then begin { if (ssCtrl in Shift)and(gFonts[dcfFileViewHeader].Size<MAX_FONT_FILEVIEWHEADER) then gFonts[dcfFileViewHeader].Size:=gFonts[dcfFileViewHeader].Size+1; FAddressLabel.Font.Size:=gFonts[dcfFileViewHeader].Size; FPathLabel.Font.Size:=FAddressLabel.Font.Size; FPathEdit.Font.Size:=FAddressLabel.Font.Size;; } FAddressLabel.Font.Size:=FAddressLabel.Font.Size+1; if FAddressLabel.Font.Size<9 then FAddressLabel.Font.Size:=9; FPathLabel.Font.Size:=FAddressLabel.Font.Size; FPathEdit.Font.Size:=FAddressLabel.Font.Size;; frmMain.FrameLeft.Repaint; frmMain.FrameRight.Repaint; end; end; procedure TFileViewHeader.PathLabelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint;var Handled:Boolean); begin if ssCtrl in Shift then begin { if (ssCtrl in Shift)and(gFonts[dcfFileViewHeader].Size>MIN_FONT_FILEVIEWHEADER) then gFonts[dcfFileViewHeader].Size:=gFonts[dcfFileViewHeader].Size+1; FAddressLabel.Font.Size:=gFonts[dcfFileViewHeader].Size; FPathLabel.Font.Size:=FAddressLabel.Font.Size; FPathEdit.Font.Size:=FAddressLabel.Font.Size;; } FAddressLabel.Font.Size:=FAddressLabel.Font.Size-1; if FAddressLabel.Font.Size<9 then FAddressLabel.Font.Size:=9; FPathLabel.Font.Size:=FAddressLabel.Font.Size; FPathEdit.Font.Size:=FAddressLabel.Font.Size;; frmMain.FrameLeft.Repaint; frmMain.FrameRight.Repaint; end; end; { TFileViewHeader.PathLabelDblClick } { -If we double-click on the the path label, it shows the Hot Dir popup menu at the cursor position. -If we click just once, after the 250ms of the timer, it shows the history. This will make both kind of people happy AND will make DC like TC} procedure TFileViewHeader.PathLabelDblClick(Sender: TObject); begin tmViewHistoryMenu.Enabled:=FALSE; //Cancel the possibility of a left click FFileView.SetFocus; frmMain.Commands.cm_DirHotList(['MousePos']); end; procedure TFileViewHeader.PathLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin case Button of mbMiddle: begin FFileView.SetFocus; frmMain.Commands.cm_DirHotList(['MousePos']); end; mbRight: begin ShowPathEdit; end; end; end; procedure TFileViewHeader.AddressLabelClick(Sender: TObject); var walkPath, dirNameToSelect: String; begin FFileView.SetFocus; if (FAddressLabel.AllowHighlight) and (Length(FAddressLabel.SelectedDir) > 0) then begin // User clicked on a subdirectory of the address. walkPath := FFileView.CurrentAddress; SetFileSystemPath(FFileView, FAddressLabel.SelectedDir); while (Length(walkPath) > Length(FAddressLabel.SelectedDir) + 1) do begin dirNameToSelect := ExtractFileName(ExcludeTrailingPathDelimiter(walkPath)); walkPath := FFileView.FileSource.GetParentDir(walkPath); end; FFileView.SetActiveFile(dirNameToSelect); end; end; procedure TFileViewHeader.AddressLabelMouseEnter(Sender: TObject); begin FAddressLabel.AllowHighlight:= FFileView.FileSource is TArchiveFileSource; end; constructor TFileViewHeader.Create(AOwner: TFileView; AParent: TWinControl); begin inherited Create(AOwner); FFileView:= AOwner; Parent:= AParent; Align:= alTop; BevelInner:= bvNone; BevelOuter:= bvNone; AutoSize:= True; DoubleBuffered:= True; FAddressLabel := TPathLabel.Create(Self, False); FAddressLabel.Parent := Self; FAddressLabel.BorderSpacing.Bottom := 1; FPathLabel := TPathLabel.Create(Self, True); FPathLabel.Parent := Self; // Display path below address. // For correct alignment, first put path at the top, then address at the top. FPathLabel.Align := alTop; FAddressLabel.Align := alTop; FPathEdit:= TKASPathEdit.Create(FPathLabel); FPathEdit.Parent:= Self; FPathEdit.Visible:= False; FPathEdit.TabStop:= False; FPathEdit.ObjectTypes:= [otFolders, otHidden]; OnResize:= @HeaderResize; FPathEdit.OnExit:= @PathEditExit; FPathEdit.OnKeyDown:= @PathEditKeyDown; FPathLabel.OnClick := @PathLabelClick; FPathLabel.OnDblClick := @PathLabelDblClick; FPathLabel.OnMouseUp := @PathLabelMouseUp; FPathLabel.OnMouseWheelDown := @PathLabelMouseWheelDown; FPathLabel.OnMouseWheelUp := @PathLabelMouseWheelUp; FAddressLabel.OnClick := @AddressLabelClick; FAddressLabel.OnMouseEnter:= @AddressLabelMouseEnter; tmViewHistoryMenu := TTimer.Create(Self); //Timer used to show history after a while in case it was not a double click to show Hot dir tmViewHistoryMenu.Enabled := False; tmViewHistoryMenu.Interval := 250; tmViewHistoryMenu.OnTimer := @tmViewHistoryMenuTimer; end; procedure TFileViewHeader.HeaderResize(Sender: TObject); begin UpdateAddressLabel; UpdatePathLabel; end; procedure TFileViewHeader.UpdateAddressLabel; begin if FFileView.CurrentAddress = '' then begin FAddressLabel.Visible := False; end else begin FAddressLabel.Top:= 0; FAddressLabel.Visible := True; FAddressLabel.Caption := FFileView.CurrentAddress; end; end; procedure TFileViewHeader.UpdatePathLabel; begin FPathLabel.Caption := MinimizeFilePath(FFileView.CurrentPath, FPathLabel.Canvas, FPathLabel.Width); end; procedure TFileViewHeader.ShowPathEdit; begin with FPathLabel do begin FPathEdit.SetBounds(Left, Top, Width, Height); FPathEdit.Text := FFileView.CurrentPath; FPathEdit.Visible := True; FPathEdit.SetFocus; end; end; procedure TFileViewHeader.SetActive(bActive: Boolean); begin FAddressLabel.SetActive(bActive); FPathLabel.SetActive(bActive); end; { TFileViewFixedHeader } procedure TFileViewFixedHeader.UpdateState; var i, Index: Integer; MaxState: THeaderSectionState; P: TPoint; begin MaxState := hsNormal; if Enabled then if FDown then begin MaxState := hsPressed; Index := FSelectedSection; end else if FMouseInControl then begin MaxState := hsHot; P := ScreenToClient(Mouse.CursorPos); Index := GetSectionAt(P); end; for i := 0 to Sections.Count - 1 do if (i <> Index) then Sections[i].State := hsNormal else Sections[i].State := MaxState; end; procedure TFileViewFixedHeader.SectionClick(Section: THeaderSection); var SortingDirection : TSortDirection; NewSorting: TFileSortings; SortFunctions: TFileFunctions; begin with FFileView do begin NewSorting := Sorting; SortFunctions := FSorting[Section.Index].SortFunctions; if [ssShift, ssCtrl] * GetKeyShiftStateEx = [] then begin SortingDirection := GetSortDirection(NewSorting, SortFunctions); if SortingDirection = sdNone then SortingDirection := sdAscending else SortingDirection := ReverseSortDirection(SortingDirection); NewSorting := nil; end else begin SortingDirection := sdAscending; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); FFileView.Sorting:= NewSorting; end; inherited SectionClick(Section); end; procedure TFileViewFixedHeader.Click; var Index: Integer; begin if FDown then begin inherited Click; Index := GetSectionAt(ScreenToClient(Mouse.CursorPos)); if Index <> -1 then SectionClick(Sections[Index]); end; end; procedure TFileViewFixedHeader.UpdateHeader; var I: Integer; begin for I:= 0 to Sections.Count - 1 do begin Sections[I].ImageIndex:= SortingImageIndex[FSorting[I].SortDirection]; end; end; procedure TFileViewFixedHeader.UpdateSorting(Sorting: TFileSortings); var I, J: Integer; begin for I:= Low(FSorting) to High(FSorting) do begin FSorting[I].SortDirection:= sdNone; for J:= Low(Sorting) to High(Sorting) do begin if (FSorting[I].SortFunctions[0] = Sorting[J].SortFunctions[0]) or ((Sorting[J].SortFunctions[0] = fsfName) and (FSorting[I].SortFunctions[0] = fsfNameNoExtension))then begin FSorting[I].SortDirection:= Sorting[J].SortDirection; Break; end; end; end; UpdateHeader; end; procedure TFileViewFixedHeader.MouseEnter; begin inherited MouseEnter; if not (csDesigning in ComponentState) then begin FMouseInControl := True; UpdateState; end; end; procedure TFileViewFixedHeader.MouseLeave; begin inherited MouseLeave; if not (csDesigning in ComponentState) then begin FMouseInControl := False; FDown := False; UpdateState; end; end; procedure TFileViewFixedHeader.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin FDown:= True; FSelectedSection:=GetSectionAt(Point(X, Y)); UpdateState; end; end; procedure TFileViewFixedHeader.MouseMove(Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin UpdateState; end; end; procedure TFileViewFixedHeader.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if not (csDesigning in ComponentState) then begin FDown:= False; UpdateState; end; end; constructor TFileViewFixedHeader.Create(AOwner: TFileView; AParent: TWinControl); var I: Integer; begin inherited Create(AOwner); FFileView:= AOwner; Parent:= AParent; Align:= alTop; DoubleBuffered:= True; Sections.Add.Text:= rsColName; Sections.Add.Text:= rsColExt; Sections.Add.Text:= rsColSize; Sections.Add.Text:= rsColDate; Sections.Add.Text:= rsColAttr; Images:= TImageList.CreateSize(gIconsSize, gIconsSize); Images.Add(PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdAscending)), nil); Images.Add(PixMapManager.GetBitmap(PixMapManager.GetIconBySortingDirection(sdDescending)), nil); SetLength(FSorting, 5); for I:= Low(FSorting) to High(FSorting) do SetLength(FSorting[I].SortFunctions, 1); FSorting[0].SortDirection:= sdNone; FSorting[0].SortFunctions[0]:= fsfNameNoExtension; FSorting[1].SortDirection:= sdNone; FSorting[1].SortFunctions[0]:= fsfExtension; FSorting[2].SortDirection:= sdNone; FSorting[2].SortFunctions[0]:= fsfSize; FSorting[3].SortDirection:= sdNone; FSorting[3].SortFunctions[0]:= fsfModificationTime; FSorting[4].SortDirection:= sdNone; FSorting[4].SortFunctions[0]:= fsfAttr; end; destructor TFileViewFixedHeader.Destroy; begin Images.Free; inherited Destroy; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ucolumnsfileview.pas��������������������������������������������������0000644�0001750�0000144�00000150301�12662424243�021413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uColumnsFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, Forms, ExtCtrls, Grids, LMessages, LCLIntf, LCLType, Menus, LCLVersion, uFile, uFileProperty, uFileView, uFileViewWithMainCtrl, uFileSource, uDisplayFile, uColumns, uFileSorting, DCXmlConfig, DCClassesUtf8, uTypes, uFileViewWithGrid; type TFunctionDime = function (AColor: TColor): TColor of Object; TColumnsSortDirections = array of TSortDirection; TColumnsFileView = class; { TDrawGridEx } TDrawGridEx = class(TDrawGrid) private ColumnsView: TColumnsFileView; function GetGridHorzLine: Boolean; function GetGridVertLine: Boolean; procedure SetGridHorzLine(const AValue: Boolean); procedure SetGridVertLine(const AValue: Boolean); protected function SelectCell(aCol, aRow: Integer): Boolean; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift:TShiftState; X,Y:Integer); override; procedure InitializeWnd; override; procedure FinalizeWnd; override; procedure DrawColumnText(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; public ColumnsOwnDim: TFunctionDime; constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure UpdateView; function MouseOnGrid(X, Y: LongInt): Boolean; // Returns height of all the header rows. function GetHeaderHeight: Integer; // Adapted from TCustomGrid.GetVisibleGrid only for visible rows. function GetVisibleRows: TRange; {en Retrieves first and last fully visible row number. } function GetFullVisibleRows: TRange; function IsRowVisible(aRow: Integer): Boolean; procedure ScrollHorizontally(ForwardDirection: Boolean); property GridVertLine: Boolean read GetGridVertLine write SetGridVertLine; property GridHorzLine: Boolean read GetGridHorzLine write SetGridHorzLine; end; TColumnResized = procedure (Sender: TObject; ColumnIndex: Integer; ColumnNewsize: integer) of object; { TColumnsFileView } TColumnsFileView = class(TFileViewWithMainCtrl) private FColumnsSortDirections: TColumnsSortDirections; FFileNameColumn: Integer; FExtensionColumn: Integer; pmColumnsMenu: TPopupMenu; dgPanel: TDrawGridEx; FOnColumnResized: TColumnResized; function GetColumnsClass: TPanelColumnsClass; procedure SetRowCount(Count: Integer); procedure SetFilesDisplayItems; procedure SetColumns; procedure MakeVisible(iRow: Integer); procedure MakeActiveVisible; {en Format and cache all columns strings. } procedure MakeColumnsStrings(AFile: TDisplayFile); procedure MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); procedure ClearAllColumnsStrings; procedure EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); {en Translates file sorting by functions to sorting directions of columns. } procedure SetColumnsSortDirections; {en Checks which file properties are needed for displaying. } function GetFilePropertiesNeeded: TFilePropertiesTypes; // -- Events -------------------------------------------------------------- {$IF lcl_fullversion >= 093100} procedure dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); {$ENDIF} procedure dgPanelHeaderClick(Sender: TObject;IsColumn: Boolean; index: Integer); procedure dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure dgPanelSelection(Sender: TObject; aCol, aRow: Integer); procedure dgPanelTopLeftChanged(Sender: TObject); procedure dgPanelResize(Sender: TObject); procedure dgPanelHeaderSized(Sender: TObject; IsColumn: Boolean; index: Integer); procedure ColumnsMenuClick(Sender: TObject); protected procedure CreateDefault(AOwner: TWinControl); override; procedure BeforeMakeFileList; override; procedure ClearAfterDragDrop; override; procedure DisplayFileListChanged; override; procedure DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure DoUpdateView; override; procedure FileSourceFileListLoaded; override; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(FileIndex: PtrInt): TRect; override; function GetVisibleFilesIndexes: TRange; override; procedure RedrawFile(FileIndex: PtrInt); override; procedure RedrawFile(DisplayFile: TDisplayFile); override; procedure RedrawFiles; override; procedure SetActiveFile(FileIndex: PtrInt); override; procedure SetSorting(const NewSortings: TFileSortings); override; procedure ShowRenameFileEdit(aFile: TFile); override; procedure AfterChangePath; override; public ActiveColm: String; ActiveColmSlave: TPanelColumnsClass; isSlave:boolean; //--------------------- constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; destructor Destroy; override; function Clone(NewParent: TWinControl): TColumnsFileView; override; procedure CloneTo(FileView: TFileView); override; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure LoadConfiguration(Section: String; TabIndex: Integer); override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); override; procedure UpdateColumnsView; procedure SetGridFunctionDim(ExternalDimFunction:TFunctionDime); property OnColumnResized: TColumnResized read FOnColumnResized write FOnColumnResized; published procedure cm_CopyFileDetailsToClip(const Params: array of string); end; implementation uses LCLProc, Buttons, Clipbrd, DCStrUtils, uLng, uGlobs, uPixmapManager, uDebug, uDCUtils, math, fMain, fOptions, uOrderedFileView, uFileSourceProperty, uKeyboard, uFileFunctions, uFormCommands, uFileViewNotebook, fOptionsCustomColumns; type TEachViewCallbackReason = (evcrUpdateColumns); TEachViewCallbackMsg = record Reason: TEachViewCallbackReason; UpdatedColumnsSetName: String; NewColumnsSetName: String; // If columns name renamed end; PEachViewCallbackMsg = ^TEachViewCallbackMsg; procedure TColumnsFileView.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); SetColumnsSortDirections; end; procedure TColumnsFileView.LoadConfiguration(Section: String; TabIndex: Integer); var ColumnsClass: TPanelColumnsClass; SortCount: Integer; SortColumn: Integer; SortDirection: TSortDirection; i: Integer; sIndex: String; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin sIndex := IntToStr(TabIndex); ActiveColm := gIni.ReadString(Section, sIndex + '_columnsset', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; SortCount := gIni.ReadInteger(Section, sIndex + '_sortcount', 0); for i := 0 to SortCount - 1 do begin SortColumn := gIni.ReadInteger(Section, sIndex + '_sortcolumn' + IntToStr(i), -1); if (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := Column.GetColumnFunctions; SortDirection := TSortDirection(gIni.ReadInteger(Section, sIndex + '_sortdirection' + IntToStr(i), Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end; end; inherited SetSorting(NewSorting); end; procedure TColumnsFileView.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var ColumnsClass: TPanelColumnsClass; SortColumn: Integer; SortDirection: TSortDirection; ColumnsViewNode: TXmlNode; NewSorting: TFileSortings = nil; Column: TPanelColumn; SortFunctions: TFileFunctions; begin inherited LoadConfiguration(AConfig, ANode); // Try to read new view-specific node. ColumnsViewNode := AConfig.FindNode(ANode, 'ColumnsView'); if Assigned(ColumnsViewNode) then ANode := ColumnsViewNode; ActiveColm := AConfig.GetValue(ANode, 'ColumnsSet', 'Default'); // Load sorting options. ColumnsClass := GetColumnsClass; ANode := ANode.FindNode('Sorting'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Sort') = 0 then begin if AConfig.TryGetValue(ANode, 'Column', SortColumn) and (SortColumn >= 0) and (SortColumn < ColumnsClass.ColumnsCount) then begin Column := ColumnsClass.GetColumnItem(SortColumn); if Assigned(Column) then begin SortFunctions := Column.GetColumnFunctions; SortDirection := TSortDirection(AConfig.GetValue(ANode, 'Direction', Integer(sdNone))); AddSorting(NewSorting, SortFunctions, SortDirection); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; inherited SetSorting(NewSorting); end; end; procedure TColumnsFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); begin inherited SaveConfiguration(AConfig, ANode, ASaveHistory); AConfig.SetAttr(ANode, 'Type', 'columns'); ANode := AConfig.FindNode(ANode, 'ColumnsView', True); AConfig.ClearNode(ANode); AConfig.SetValue(ANode, 'ColumnsSet', ActiveColm); end; procedure TColumnsFileView.dgPanelHeaderClick(Sender: TObject; IsColumn: Boolean; index: Integer); var ShiftState : TShiftState; SortingDirection : TSortDirection; ColumnsClass: TPanelColumnsClass; Column: TPanelColumn; NewSorting: TFileSortings; SortFunctions: TFileFunctions; begin if (not IsColumn) or (not gTabHeader) then Exit; ColumnsClass := GetColumnsClass; Column := ColumnsClass.GetColumnItem(Index); if Assigned(Column) then begin NewSorting := Sorting; SortFunctions := Column.GetColumnFunctions; if Length(SortFunctions) = 0 then Exit; ShiftState := GetKeyShiftStateEx; if [ssShift, ssCtrl] * ShiftState = [] then begin SortingDirection := GetSortDirection(NewSorting, SortFunctions); if SortingDirection = sdNone then begin //If there is no direction currently, sort "sdDescending" for size and date. //Commonly, we search seek more often for most recent files then older any others. //When sorting by size, often it is to find larger file to make room. //Anyway, it makes DC like TC, and also, Windows Explorer do the same. case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:=sdDescending; else SortingDirection:=sdAscending; end; end else begin SortingDirection := ReverseSortDirection(SortingDirection); end; NewSorting := nil; end else begin //If there is no direction currently, sort "sdDescending" for size and date (see previous comment). case SortFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortingDirection:=sdDescending; else SortingDirection:=sdAscending; end; end; AddOrUpdateSorting(NewSorting, SortFunctions, SortingDirection); SetSorting(NewSorting); end; end; procedure TColumnsFileView.dgPanelMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size<MAX_FONT_SIZE_MAIN) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size+1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Handled:=True; Exit; end; case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEUP, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEUP, 0); else Handled:= False; end; end; end; procedure TColumnsFileView.dgPanelMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var I: Integer; begin Handled:= True; if not IsLoadingFileList then begin if (Shift=[ssCtrl])and(gFonts[dcfMain].Size>MIN_FONT_SIZE_MAIN) then begin gFonts[dcfMain].Size:=gFonts[dcfMain].Size-1; frmMain.FrameLeft.UpdateView; frmMain.FrameRight.UpdateView; Handled:=True; Exit; end; case gScrollMode of smLineByLine: for I:= 1 to gWheelScrollLines do dgPanel.Perform(LM_VSCROLL, SB_LINEDOWN, 0); smPageByPage: dgPanel.Perform(LM_VSCROLL, SB_PAGEDOWN, 0); else Handled:= False; end; end; end; procedure TColumnsFileView.dgPanelSelection(Sender: TObject; aCol, aRow: Integer); begin {$IF lcl_fullversion >= 093100} dgPanel.Options := dgPanel.Options - [goDontScrollPartCell]; {$ENDIF} DoFileIndexChanged(aRow - dgPanel.FixedRows); end; procedure TColumnsFileView.dgPanelTopLeftChanged(Sender: TObject); begin Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileView.dgPanelResize(Sender: TObject); begin Notify([fvnVisibleFilePropertiesChanged]); end; procedure TColumnsFileView.AfterChangePath; begin inherited AfterChangePath; if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; end; procedure TColumnsfileView.SetGridFunctionDim(ExternalDimFunction:TFunctionDime); begin dgPanel.ColumnsOwnDim:=ExternalDimFunction; end; procedure TColumnsFileView.ShowRenameFileEdit(aFile: TFile); var ALeft, ATop, AWidth, AHeight: Integer; begin if FFileNameColumn <> -1 then begin if not edtRename.Visible then begin edtRename.Font.Name := GetColumnsClass.GetColumnFontName(FFileNameColumn); edtRename.Font.Size := GetColumnsClass.GetColumnFontSize(FFileNameColumn); edtRename.Font.Style := GetColumnsClass.GetColumnFontStyle(FFileNameColumn); ATop := dgPanel.CellRect(FFileNameColumn, dgPanel.Row).Top - 2; ALeft := dgPanel.CellRect(FFileNameColumn, dgPanel.Row).Left; if gShowIcons <> sim_none then Inc(ALeft, gIconsSize + 2); AWidth := dgPanel.ColWidths[FFileNameColumn] - ALeft; if Succ(FFileNameColumn) = FExtensionColumn then Inc(AWidth, dgPanel.ColWidths[FExtensionColumn]); AHeight := dgPanel.RowHeights[dgPanel.Row] + 4; edtRename.SetBounds(ALeft, ATop, AWidth, AHeight); end; inherited ShowRenameFileEdit(AFile); end; end; procedure TColumnsFileView.RedrawFile(FileIndex: PtrInt); begin dgPanel.InvalidateRow(FileIndex + dgPanel.FixedRows); end; procedure TColumnsFileView.SetColumnsSortDirections; var Columns: TPanelColumnsClass; function SetSortDirection(ASortFunction: TFileFunction; ASortDirection: TSortDirection; Overwrite: Boolean): Boolean; var k, l: Integer; ColumnFunctions: TFileFunctions; begin for k := 0 to Columns.Count - 1 do begin ColumnFunctions := Columns.GetColumnItem(k).GetColumnFunctions; for l := 0 to Length(ColumnFunctions) - 1 do if ColumnFunctions[l] = ASortFunction then begin if Overwrite or (FColumnsSortDirections[k] = sdNone) then begin FColumnsSortDirections[k] := ASortDirection; Exit(True); end; end; end; Result := False; end; var i, j: Integer; ASortings: TFileSortings; begin Columns := GetColumnsClass; ASortings := Sorting; SetLength(FColumnsSortDirections, Columns.Count); for i := 0 to Length(FColumnsSortDirections) - 1 do FColumnsSortDirections[i] := sdNone; for i := 0 to Length(ASortings) - 1 do begin for j := 0 to Length(ASortings[i].SortFunctions) - 1 do begin // Search for the column containing the sort function and add sorting // by that column. If function is Name and it is not found try searching // for NameNoExtension + Extension and vice-versa. if not SetSortDirection(ASortings[i].SortFunctions[j], ASortings[i].SortDirection, True) then begin if ASortings[i].SortFunctions[j] = fsfName then begin SetSortDirection(fsfNameNoExtension, ASortings[i].SortDirection, False); SetSortDirection(fsfExtension, ASortings[i].SortDirection, False); end else if ASortings[i].SortFunctions[j] in [fsfNameNoExtension, fsfExtension] then begin SetSortDirection(fsfName, ASortings[i].SortDirection, False); end; end; end; end; end; procedure TColumnsFileView.SetFilesDisplayItems; var i: Integer; begin for i := 0 to FFiles.Count - 1 do FFiles[i].DisplayItem := Pointer(i + dgPanel.FixedRows); end; function TColumnsFileView.GetFilePropertiesNeeded: TFilePropertiesTypes; var i, j: Integer; ColumnsClass: TPanelColumnsClass; Column: TPanelColumn; FileFunctionsUsed: TFileFunctions; begin // By default always use some properties. Result := [fpName, fpSize, // For info panel (total size, selected size) fpAttributes, // For distinguishing directories fpLink, // For distinguishing directories (link to dir) and link icons fpModificationTime // For selecting/coloring files (by SearchTemplate) ]; ColumnsClass := GetColumnsClass; FFileNameColumn := -1; FExtensionColumn := -1; // Scan through all columns. for i := 0 to ColumnsClass.Count - 1 do begin Column := ColumnsClass.GetColumnItem(i); FileFunctionsUsed := Column.GetColumnFunctions; if Length(FileFunctionsUsed) > 0 then begin // Scan through all functions in the column. for j := Low(FileFunctionsUsed) to High(FileFunctionsUsed) do begin // Add file properties needed to display the function. Result := Result + TFileFunctionToProperty[FileFunctionsUsed[j]]; if (FFileNameColumn = -1) and (FileFunctionsUsed[j] in [fsfName, fsfNameNoExtension]) then FFileNameColumn := i; if (FExtensionColumn = -1) and (FileFunctionsUsed[j] in [fsfExtension]) then FExtensionColumn := i; end; end; end; end; function TColumnsFileView.GetFileRect(FileIndex: PtrInt): TRect; begin Result := dgPanel.CellRect(0, FileIndex + dgPanel.FixedRows); end; procedure TColumnsFileView.SetRowCount(Count: Integer); begin FUpdatingActiveFile := True; dgPanel.RowCount := dgPanel.FixedRows + Count; FUpdatingActiveFile := False; end; procedure TColumnsFileView.SetColumns; var x: Integer; ColumnsClass: TPanelColumnsClass; begin ColumnsClass := GetColumnsClass; dgPanel.Columns.BeginUpdate; try dgPanel.Columns.Clear; for x:= 0 to ColumnsClass.ColumnsCount - 1 do begin with dgPanel.Columns.Add do begin // SizePriority = 0 means don't modify Width with AutoFill. // Last column is always modified if all columns have SizePriority = 0. if (x = 0) and (gAutoSizeColumn = 0) then SizePriority := 1 else SizePriority := 0; Width:= ColumnsClass.GetColumnWidth(x); Title.Caption:= ColumnsClass.GetColumnTitle(x); end; end; finally dgPanel.Columns.EndUpdate; end; end; procedure TColumnsFileView.MakeVisible(iRow:Integer); var AVisibleRows: TRange; begin with dgPanel do begin AVisibleRows := GetFullVisibleRows; if iRow < AVisibleRows.First then TopRow := AVisibleRows.First; if iRow > AVisibleRows.Last then TopRow := iRow - (AVisibleRows.Last - AVisibleRows.First); end; end; procedure TColumnsFileView.MakeActiveVisible; begin if dgPanel.Row>=0 then MakeVisible(dgPanel.Row); end; procedure TColumnsFileView.SetActiveFile(FileIndex: PtrInt); begin dgPanel.Row := FileIndex + dgPanel.FixedRows; MakeVisible(dgPanel.Row); end; {$IF lcl_fullversion >= 093100} procedure TColumnsFileView.dgPanelBeforeSelection(Sender: TObject; aCol, aRow: Integer); begin if dgPanel.IsRowVisible(aRow) then dgPanel.Options := dgPanel.Options + [goDontScrollPartCell]; end; {$ENDIF} procedure TColumnsFileView.RedrawFile(DisplayFile: TDisplayFile); begin dgPanel.InvalidateRow(PtrInt(DisplayFile.DisplayItem)); end; procedure TColumnsFileView.RedrawFiles; begin dgPanel.Invalidate; end; procedure TColumnsFileView.UpdateColumnsView; var ColumnsClass: TPanelColumnsClass; OldFilePropertiesNeeded: TFilePropertiesTypes; begin ClearAllColumnsStrings; // If the ActiveColm set doesn't exist this will retrieve either // the first set or the default set. ColumnsClass := GetColumnsClass; // Set name in case a different set was loaded. ActiveColm := ColumnsClass.Name; SetColumns; SetColumnsSortDirections; dgPanel.FocusRectVisible := ColumnsClass.UseCursorBorder and not ColumnsClass.UseFrameCursor; dgPanel.FocusColor := ColumnsClass.CursorBorderColor; dgPanel.UpdateView; OldFilePropertiesNeeded := FilePropertiesNeeded; FilePropertiesNeeded := GetFilePropertiesNeeded; if FilePropertiesNeeded >= OldFilePropertiesNeeded then begin Notify([fvnVisibleFilePropertiesChanged]); end; end; procedure TColumnsFileView.ColumnsMenuClick(Sender: TObject); begin Case (Sender as TMenuItem).Tag of 1001: //All columns, but current one will be selected. begin ShowOptions(TfrmOptionsCustomColumns); end; else begin ActiveColm:=ColSet.Items[(Sender as TMenuItem).Tag]; UpdateColumnsView; RedrawFiles; end; end; end; constructor TColumnsFileView.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); begin ActiveColm := 'Default'; FOnColumnResized := nil; inherited Create(AOwner, AFileSource, APath, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AFileView, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ASectionName, ATabIndex, AFlags); end; constructor TColumnsFileView.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; procedure TColumnsFileView.CreateDefault(AOwner: TWinControl); begin DCDebug('TColumnsFileView.Create components'); inherited CreateDefault(AOwner); FFileNameColumn := -1; FExtensionColumn := -1; // -- other components dgPanel:=TDrawGridEx.Create(Self, Self); MainControl := dgPanel; // --- dgPanel.OnHeaderClick:=@dgPanelHeaderClick; dgPanel.OnMouseWheelUp := @dgPanelMouseWheelUp; dgPanel.OnMouseWheelDown := @dgPanelMouseWheelDown; dgPanel.OnSelection:= @dgPanelSelection; {$IF lcl_fullversion >= 093100} dgPanel.OnBeforeSelection:= @dgPanelBeforeSelection; {$ENDIF} dgPanel.OnTopLeftChanged:= @dgPanelTopLeftChanged; dgpanel.OnResize:= @dgPanelResize; dgPanel.OnHeaderSized:= @dgPanelHeaderSized; pmColumnsMenu := TPopupMenu.Create(Self); pmColumnsMenu.Parent := Self; if Assigned(NotebookPage) then begin FOnColumnResized:= @DoColumnResized; end; end; destructor TColumnsFileView.Destroy; begin inherited Destroy; end; function TColumnsFileView.Clone(NewParent: TWinControl): TColumnsFileView; begin Result := TColumnsFileView.Create(NewParent, Self); end; procedure TColumnsFileView.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TColumnsFileView then with FileView as TColumnsFileView do begin FColumnsSortDirections := Self.FColumnsSortDirections; ActiveColm := Self.ActiveColm; ActiveColmSlave := nil; // set to nil because only used in preview? isSlave := Self.isSlave; end; end; end; procedure TColumnsFileView.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; end; procedure TColumnsFileView.BeforeMakeFileList; begin inherited; if gListFilesInThread then begin // Display info that file list is being loaded. UpdateInfoPanel; end; end; procedure TColumnsFileView.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // reset TCustomGrid state dgPanel.FGridState := gsNormal; end; procedure TColumnsFileView.FileSourceFileListLoaded; begin inherited; FUpdatingActiveFile := True; dgPanel.Row := 0; FUpdatingActiveFile := False; end; procedure TColumnsFileView.DisplayFileListChanged; begin // Update grid row count. SetRowCount(FFiles.Count); SetFilesDisplayItems; RedrawFiles; if SetActiveFileNow(RequestedActiveFile) then RequestedActiveFile := '' // Requested file was not found, restore position to last active file. else if not SetActiveFileNow(LastActiveFile) then // Make sure at least that the previously active file is still visible after displaying file list. MakeActiveVisible; Notify([fvnVisibleFilePropertiesChanged]); inherited; end; procedure TColumnsFileView.DoColumnResized(Sender: TObject; ColumnIndex: Integer; ColumnNewSize: Integer); procedure UpdateWidth(Notebook: TFileViewNotebook); var I: Integer; ColumnsView: TColumnsFileView; begin for I:= 0 to Notebook.PageCount - 1 do begin if Notebook.View[I] is TColumnsFileView then begin ColumnsView:= TColumnsFileView(Notebook.View[I]); if ColumnsView.ActiveColm = ActiveColm then begin ColumnsView.dgPanel.ColWidths[ColumnIndex]:= ColumnNewSize; end; end; end; end; begin if gColumnsAutoSaveWidth then begin GetColumnsClass.SetColumnWidth(ColumnIndex, ColumnNewSize); UpdateWidth(frmMain.LeftTabs); UpdateWidth(frmMain.RightTabs); end; end; procedure TColumnsFileView.MakeColumnsStrings(AFile: TDisplayFile); begin MakeColumnsStrings(AFile, GetColumnsClass); end; procedure TColumnsFileView.MakeColumnsStrings(AFile: TDisplayFile; ColumnsClass: TPanelColumnsClass); var ACol: Integer; begin AFile.DisplayStrings.Clear; for ACol := 0 to ColumnsClass.Count - 1 do begin AFile.DisplayStrings.Add(ColumnsClass.GetColumnItemResultString( ACol, AFile.FSFile, FileSource)); end; end; procedure TColumnsFileView.ClearAllColumnsStrings; var i: Integer; begin if Assigned(FAllDisplayFiles) then begin // Clear display strings in case columns have changed. for i := 0 to FAllDisplayFiles.Count - 1 do FAllDisplayFiles[i].DisplayStrings.Clear; end; end; procedure TColumnsFileView.EachViewUpdateColumns(AFileView: TFileView; UserData: Pointer); var ColumnsView: TColumnsFileView; PMsg: PEachViewCallbackMsg; begin if AFileView is TColumnsFileView then begin ColumnsView := TColumnsFileView(AFileView); PMsg := UserData; if ColumnsView.ActiveColm = PMsg^.UpdatedColumnsSetName then begin ColumnsView.ActiveColm := PMsg^.NewColumnsSetName; ColumnsView.UpdateColumnsView; ColumnsView.RedrawFiles; end; end; end; procedure TColumnsFileView.DoUpdateView; begin inherited DoUpdateView; UpdateColumnsView; end; function TColumnsFileView.GetActiveFileIndex: PtrInt; begin Result := dgPanel.Row - dgPanel.FixedRows; end; function TColumnsFileView.GetVisibleFilesIndexes: TRange; begin Result := dgPanel.GetVisibleRows; Dec(Result.First, dgPanel.FixedRows); Dec(Result.Last, dgPanel.FixedRows); end; function TColumnsFileView.GetColumnsClass: TPanelColumnsClass; begin if isSlave then Result := ActiveColmSlave else Result := ColSet.GetColumnSet(ActiveColm); end; function TColumnsFileView.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var bTemp: Boolean; iRow, iCol: LongInt; begin with dgPanel do begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= IfThen(iRow < 0, InvalidFileIndex, iRow - FixedRows); AtFileList := Y >= GetHeaderHeight; end; end; procedure TColumnsFileView.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TColumnsFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var AFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin if IsActiveItemValid then begin InvertFileSelection(GetActiveDisplayFile, False); DoSelectionChanged(dgPanel.Row - dgPanel.FixedRows); end; if dgPanel.Row < dgPanel.RowCount-1 then dgPanel.Row := dgPanel.Row + 1; MakeActiveVisible; end; Key := 0; end; // cursors keys in Lynx like mode VK_LEFT: if (Shift = []) then begin if gLynxLike then ChangePathToParent(True) else dgPanel.ScrollHorizontally(False); Key := 0; end; VK_RIGHT: if (Shift = []) then begin if gLynxLike then ChooseFile(GetActiveDisplayFile, True) else dgPanel.ScrollHorizontally(True); Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then begin if (aFile.FSFile.IsDirectory or aFile.FSFile.IsLinkToDirectory) and not aFile.Selected then begin CalculateSpace(aFile); end; InvertFileSelection(aFile, False); end; if gSpaceMovesDown then dgPanel.Row := dgPanel.Row + 1; MakeActiveVisible; DoSelectionChanged(dgPanel.Row - dgPanel.FixedRows); Key := 0; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TColumnsFileView.dgPanelHeaderSized(Sender: TObject; IsColumn: Boolean; index: Integer); begin if IsColumn then if Assigned(FOnColumnResized) then begin FOnColumnResized(Self, index, dgPanel.ColWidths[index]); end; end; procedure TColumnsFileView.cm_CopyFileDetailsToClip(const Params: array of string); var I: Integer; AFile: TDisplayFile; sl: TStringList = nil; procedure AddFile; var J: Integer; S: String; begin if AFile.FSFile.IsNameValid then begin S:= EmptyStr; for J:= 0 to AFile.DisplayStrings.Count - 1 do begin S:= S + AFile.DisplayStrings[J] + #09; end; J:= Length(S); if J > 0 then sl.Add(Copy(S, 1, J - 1)); end; end; begin if DisplayFiles.Count > 0 then begin sl:= TStringList.Create; try for I:= 0 to FFiles.Count - 1 do begin AFile:= FFiles[I]; if AFile.Selected then AddFile; end; if sl.Count = 0 then begin AFile:= GetActiveDisplayFile; AddFile; end; Clipboard.Clear; // prevent multiple formats in Clipboard Clipboard.AsText:= TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle); finally FreeAndNil(sl); end; end; end; { TDrawGridEx } constructor TDrawGridEx.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ColumnsView := AParent as TColumnsFileView; ColumnsOwnDim := @ColumnsView.DimColor; // Workaround for Lazarus issue 18832. // Set Fixed... before setting ...Count. FixedRows := 0; FixedCols := 0; // Override default values to start with no columns and no rows. RowCount := 0; ColCount := 0; DoubleBuffered := True; Align := alClient; Options := [goFixedVertLine, goFixedHorzLine, goTabs, goRowSelect, goColSizing, goThumbTracking, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook]; TitleStyle := gColumnsTitleStyle; TabStop := False; Self.Parent := AParent; UpdateView; end; procedure TDrawGridEx.UpdateView; function CalculateDefaultRowHeight: Integer; var OldFont, NewFont: TFont; i: Integer; MaxFontHeight: Integer = 0; CurrentHeight: Integer; ColumnsSet: TPanelColumnsClass; begin // Start with height of the icons. if gShowIcons <> sim_none then MaxFontHeight := gIconsSize; // Get columns settings. with (Parent as TColumnsFileView) do begin if not isSlave then ColumnsSet := ColSet.GetColumnSet(ActiveColm) else ColumnsSet := ActiveColmSlave; end; // Assign temporary font. OldFont := Canvas.Font; NewFont := TFont.Create; Canvas.Font := NewFont; // Search columns settings for the biggest font (in height). for i := 0 to ColumnsSet.Count - 1 do begin Canvas.Font.Name := ColumnsSet.GetColumnFontName(i); Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(i); Canvas.Font.Size := ColumnsSet.GetColumnFontSize(i); CurrentHeight := Canvas.GetTextHeight('Wg'); MaxFontHeight := Max(MaxFontHeight, CurrentHeight); end; // Restore old font. Canvas.Font := OldFont; FreeAndNil(NewFont); Result := MaxFontHeight; end; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin OldFont := Canvas.Font; Canvas.Font := Font; SetCanvasFont(GetColumnFont(0, True)); Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; var TabHeaderHeight: Integer; TempRowHeight: Integer; begin Flat := gInterfaceFlat; AutoFillColumns:= gAutoFillColumns; GridVertLine:= gGridVertLine; GridHorzLine:= gGridHorzLine; // Calculate row height. TempRowHeight := CalculateDefaultRowHeight; if TempRowHeight > 0 then DefaultRowHeight := TempRowHeight; // Set rows of header. if gTabHeader then begin if RowCount < 1 then RowCount := 1; FixedRows := 1; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; RowHeights[0] := TabHeaderHeight; end else begin if FixedRows > 0 then begin // First reduce number of rows so that the 0'th row, which will be changed // to not-fixed, won't be counted as a row having a file. if RowCount > 0 then RowCount := RowCount - 1; FixedRows := 0; end; end; FixedCols := 0; // Set column number to zero, must be called after fixed columns change MoveExtend(False, 0, Row); end; procedure TDrawGridEx.InitializeWnd; begin inherited InitializeWnd; ColumnsView.InitializeDragDropEx(Self); end; procedure TDrawGridEx.FinalizeWnd; begin ColumnsView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; procedure TDrawGridEx.DrawColumnText(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var SortingDirection: TSortDirection; begin SortingDirection := ColumnsView.FColumnsSortDirections[ACol]; if SortingDirection <> sdNone then begin PixMapManager.DrawBitmap( PixMapManager.GetIconBySortingDirection(SortingDirection), Canvas, aRect.Left, aRect.Top + (RowHeights[aRow] - gIconsSize) div 2); aRect.Left += gIconsSize; end; DrawCellText(aCol, aRow, aRect, aState, GetColumnTitle(aCol)); end; function TDrawGridEx.GetFullVisibleRows: TRange; begin Result.First := GCache.FullVisibleGrid.Top; Result.Last := GCache.FullVisibleGrid.Bottom; end; procedure TDrawGridEx.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var //shared variables s: string; iTextTop: Integer; AFile: TDisplayFile; FileSourceDirectAccess: Boolean; ColumnsSet: TPanelColumnsClass; //------------------------------------------------------ // begin subprocedures //------------------------------------------------------ procedure DrawFixed; //------------------------------------------------------ var TextStyle: TTextStyle; begin SetCanvasFont(GetColumnFont(aCol, True)); Canvas.Brush.Color := GetColumnColor(ACol, True); TextStyle := Canvas.TextStyle; TextStyle.Layout := tlCenter; Canvas.TextStyle := TextStyle; DefaultDrawCell(aCol, aRow, aRect, aState); end; // of DrawHeader //------------------------------------------------------ procedure DrawIconCell; //------------------------------------------------------ var Y: Integer; IconID: PtrInt; begin if (gShowIcons <> sim_none) then begin IconID := AFile.IconID; // Draw default icon if there is no icon for the file. if IconID = -1 then IconID := PixMapManager.GetDefaultIcon(AFile.FSFile); // center icon vertically Y:= aRect.Top + (RowHeights[ARow] - gIconsSize) div 2; // Draw icon for a file PixMapManager.DrawBitmap(IconID, Canvas, aRect.Left + 1, Y ); // Draw overlay icon for a file if needed if gIconOverlays then begin PixMapManager.DrawBitmapOverlay(AFile, FileSourceDirectAccess, Canvas, aRect.Left + 1, Y ); end; end; if AFile.DisplayStrings.Count = 0 then ColumnsView.MakeColumnsStrings(AFile, ColumnsSet); s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then begin Y:= ((aRect.Right - aRect.Left) - Canvas.TextWidth('V')); if (gShowIcons <> sim_none) then Y:= Y - gIconsSize; s:= FitFileName(s, Canvas, AFile.FSFile, Y); end; if (gShowIcons <> sim_none) then Canvas.TextOut(aRect.Left + gIconsSize + 4, iTextTop, s) else Canvas.TextOut(aRect.Left + 2, iTextTop, s); end; //of DrawIconCell //------------------------------------------------------ procedure DrawOtherCell; //------------------------------------------------------ var tw, cw: Integer; begin if AFile.DisplayStrings.Count = 0 then ColumnsView.MakeColumnsStrings(AFile, ColumnsSet); s := AFile.DisplayStrings.Strings[ACol]; if gCutTextToColWidth then s := FitOtherCellText(s, Canvas, ((ARect.Right-ARect.Left)-4)); case ColumnsSet.GetColumnAlign(ACol) of taRightJustify: begin cw := ColWidths[ACol]; tw := Canvas.TextWidth(s); Canvas.TextOut(aRect.Left + cw - tw - 3, iTextTop, s); end; taLeftJustify: begin Canvas.TextOut(aRect.Left + 3, iTextTop, s); end; taCenter: begin cw := ColWidths[ACol]; tw := Canvas.TextWidth(s); Canvas.TextOut(aRect.Left + ((cw - tw - 3) div 2), iTextTop, s); end; end; //of case end; //of DrawOtherCell //------------------------------------------------------ procedure PrepareColors; //------------------------------------------------------ var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; //--------------------- begin Canvas.Font.Name := ColumnsSet.GetColumnFontName(ACol); Canvas.Font.Size := ColumnsSet.GetColumnFontSize(ACol); Canvas.Font.Style := ColumnsSet.GetColumnFontStyle(ACol); Canvas.Font.Quality := ColumnsSet.GetColumnFontQuality(ACol); IsCursor := (gdSelected in aState) and ColumnsView.Active and (not ColumnsSet.UseFrameCursor); IsCursorInactive := (gdSelected in aState) and (not ColumnsView.Active) and (not ColumnsSet.UseFrameCursor); // Set up default background color first. if IsCursor then BackgroundColor := ColumnsSet.GetColumnCursorColor(ACol) else begin if IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol) then BackgroundColor := ColumnsSet.GetColumnInactiveCursorColor(ACol) else // Alternate rows background color. if odd(ARow) then BackgroundColor := ColumnsSet.GetColumnBackground(ACol) else BackgroundColor := ColumnsSet.GetColumnBackground2(ACol); end; // Set text color. if ColumnsSet.GetColumnOvercolor(ACol) then TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := ColumnsSet.GetColumnTextColor(ACol); if AFile.Selected then begin if ColumnsSet.GetColumnUseInvertedSelection(ACol) then begin //------------------------------------------------------ if IsCursor OR (IsCursorInactive AND ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then begin TextColor := InvertColor(ColumnsSet.GetColumnCursorText(ACol)); end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then BackgroundColor := ColumnsSet.GetColumnMarkColor(ACol) else BackgroundColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); TextColor := ColumnsSet.GetColumnBackground(ACol); end; //------------------------------------------------------ end else begin if ColumnsView.Active OR (not ColumnsSet.GetColumnUseInactiveSelColor(ACol)) then TextColor := ColumnsSet.GetColumnMarkColor(ACol) else TextColor := ColumnsSet.GetColumnInactiveMarkColor(ACol); end; end else if IsCursor then begin TextColor := ColumnsSet.GetColumnCursorText(ACol); end; BackgroundColor := ColumnsOwnDim(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; // Draw background. Canvas.Brush.Color := BackgroundColor; Canvas.FillRect(aRect); Canvas.Font.Color := TextColor; end;// of PrepareColors; procedure DrawLines; begin // Draw frame cursor. if ColumnsSet.UseFrameCursor and (gdSelected in aState) and (ColumnsView.Active OR ColumnsSet.GetColumnUseInactiveSelColor(Acol)) then begin if ColumnsView.Active then Canvas.Pen.Color := ColumnsSet.GetColumnCursorColor(ACol) else Canvas.Pen.Color := ColumnsSet.GetColumnInactiveCursorColor(ACol); Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; // Draw drop selection. if ARow - FixedRows = ColumnsView.FDropFileIndex then begin Canvas.Pen.Color := ColumnsSet.GetColumnTextColor(ACol); Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; end; //------------------------------------------------------ //end of subprocedures //------------------------------------------------------ begin ColumnsSet := ColumnsView.GetColumnsClass; if gdFixed in aState then begin DrawFixed; // Draw column headers if TitleStyle <> tsNative then DrawCellGrid(aCol, aRow, aRect, aState); end else if ColumnsView.FFiles.Count > 0 then begin AFile := ColumnsView.FFiles[ARow - FixedRows]; // substract fixed rows (header) FileSourceDirectAccess := fspDirectAccess in ColumnsView.FileSource.Properties; PrepareColors; iTextTop := aRect.Top + (RowHeights[aRow] - Canvas.TextHeight('Wg')) div 2; if ACol = 0 then DrawIconCell // Draw icon in the first column else DrawOtherCell; DrawCellGrid(aCol,aRow,aRect,aState); DrawLines; end else begin Canvas.Brush.Color := Self.Color; Canvas.FillRect(aRect); end; end; procedure TDrawGridEx.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var I : Integer; Point: TPoint; MI: TMenuItem; Background: Boolean; begin if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseUp event is sent just after doubleclick, so if we drop // doubleclick events we have to also drop MouseUp events that follow them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} // Handle only if button-up was not lifted to finish drag&drop operation. if not ColumnsView.FMainControlMouseDown then Exit; inherited MouseUp(Button, Shift, X, Y); ColumnsView.FMainControlMouseDown := False; if Button = mbRight then begin { If right click on header } if (Y >= 0) and (Y < GetHeaderHeight) then begin //Load Columns into menu ColumnsView.pmColumnsMenu.Items.Clear; if ColSet.Items.Count>0 then begin For I:=0 to ColSet.Items.Count-1 do begin MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Tag:=I; MI.Caption:=ColSet.Items[I]; MI.Checked:=(ColSet.Items[I] = ColumnsView.ActiveColm); MI.OnClick:=@ColumnsView.ColumnsMenuClick; ColumnsView.pmColumnsMenu.Items.Add(MI); end; end; //- MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Caption:='-'; ColumnsView.pmColumnsMenu.Items.Add(MI); //Configure custom columns MI:=TMenuItem.Create(ColumnsView.pmColumnsMenu); MI.Tag:=1001; MI.Caption:=rsMenuConfigureCustomColumns; MI.OnClick:=@ColumnsView.ColumnsMenuClick; ColumnsView.pmColumnsMenu.Items.Add(MI); Point:=ClientToScreen(Classes.Point(0,0)); Point.Y:=Point.Y+GetHeaderHeight; Point.X:=Point.X+X-50; ColumnsView.pmColumnsMenu.PopUp(Point.X,Point.Y); end { If right click on file/directory } else if ((gMouseSelectionButton<>1) or not gMouseSelectionEnabled) then begin Background:= not MouseOnGrid(X, Y); Point := ClientToScreen(Classes.Point(X, Y)); frmMain.Commands.DoContextMenu(ColumnsView, Point.x, Point.y, Background); end else if (gMouseSelectionEnabled and (gMouseSelectionButton = 1)) then begin ColumnsView.tmContextMenu.Enabled:= False; // stop context menu timer end; end { Open folder in new tab on middle click } else if (Button = mbMiddle) and (Y > GetHeaderHeight) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TDrawGridEx.MouseDown(Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin if ColumnsView.IsLoadingFileList then Exit; {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseDown event is sent just before doubleclick, so if we drop // doubleclick events we have to also drop MouseDown events that precede them. if ColumnsView.TooManyDoubleClicks then Exit; {$ENDIF} ColumnsView.FMainControlMouseDown := True; inherited MouseDown(Button, Shift, X, Y); end; procedure TDrawGridEx.MouseMove(Shift: TShiftState; X, Y: Integer); procedure Scroll(ScrollCode: SmallInt); var Msg: TLMVScroll; begin Msg.Msg := LM_VSCROLL; Msg.ScrollCode := ScrollCode; Msg.SmallPos := 1; // How many lines scroll Msg.ScrollBar := Handle; Dispatch(Msg); end; begin inherited MouseMove(Shift, X, Y); if DragManager.IsDragging or ColumnsView.IsMouseSelecting then begin if Y < DefaultRowHeight then Scroll(SB_LINEUP) else if Y > ClientHeight - DefaultRowHeight then Scroll(SB_LINEDOWN); end; end; function TDrawGridEx.MouseOnGrid(X, Y: LongInt): Boolean; var bTemp: Boolean; iRow, iCol: LongInt; begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= not ((iCol < 0) and (iRow < 0)); end; function TDrawGridEx.GetHeaderHeight: Integer; var i : Integer; begin Result := 0; for i := 0 to FixedRows-1 do Result := Result + RowHeights[i]; if Flat and (BorderStyle = bsSingle) then // TCustomGrid.GetBorderWidth Result := Result + 1; end; function TDrawGridEx.GetGridHorzLine: Boolean; begin Result := goHorzLine in Options; end; function TDrawGridEx.GetGridVertLine: Boolean; begin Result := goVertLine in Options; end; procedure TDrawGridEx.SetGridHorzLine(const AValue: Boolean); begin if AValue then Options := Options + [goHorzLine] else Options := Options - [goHorzLine]; end; procedure TDrawGridEx.SetGridVertLine(const AValue: Boolean); begin if AValue then Options := Options + [goVertLine] else Options := Options - [goVertLine]; end; function TDrawGridEx.SelectCell(aCol, aRow: Integer): Boolean; begin Result:= inherited SelectCell(aCol, aRow); // ScrollToCell hangs when Width = 0 if Width = 0 then begin Result:= False; SetColRow(aCol, aRow); end; end; function TDrawGridEx.GetVisibleRows: TRange; var w: Integer; rc: Integer; begin if (TopRow<0)or(csLoading in ComponentState) then begin Result.First := 0; Result.Last := -1; Exit; end; // visible TopLeft Cell Result.First:=TopRow; Result.Last:=Result.First; rc := RowCount; // Top Margin of next visible Row and Bottom most visible cell if rc>FixedRows then begin w:=RowHeights[Result.First] + GCache.FixedHeight - GCache.TLRowOff; while (Result.Last<rc-1)and(W<GCache.ClientHeight) do begin Inc(Result.Last); W:=W+RowHeights[Result.Last]; end; end else begin Result.Last := Result.First - 1; // no visible cells here end; end; function TDrawGridEx.IsRowVisible(aRow: Integer): Boolean; begin with GCache.FullVisibleGrid do Result:= (Top<=aRow)and(aRow<=Bottom); end; procedure TDrawGridEx.KeyDown(var Key: Word; Shift: TShiftState); var SavedKey: Word; begin if ColumnsView.IsLoadingFileList then begin ColumnsView.HandleKeyDownWhenLoading(Key, Shift); Exit; end; SavedKey := Key; // Set RangeSelecting before cursor is moved. ColumnsView.FRangeSelecting := (ssShift in Shift) and (SavedKey in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT]); // Special case for selection with shift key (works like VK_INSERT) if (SavedKey in [VK_UP, VK_DOWN]) and (ssShift in Shift) then ColumnsView.InvertActiveFile; {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then begin if ((Row = RowCount-1) and (Key = VK_DOWN)) or ((Row = FixedRows) and (Key = VK_UP)) then Key := 0; end; {$ENDIF} inherited KeyDown(Key, Shift); if (ColumnsView.FRangeSelecting) and (Row >= FixedRows) then ColumnsView.Selection(SavedKey, Row - FixedRows); end; procedure TDrawGridEx.ScrollHorizontally(ForwardDirection: Boolean); function TryMove(ACol: Integer): Boolean; begin Result := not IscellVisible(ACol, Row); if Result then MoveExtend(False, ACol, Row); end; var i: Integer; begin if ForwardDirection then begin for i := Col + 1 to ColCount - 1 do if TryMove(i) then Break; end else begin for i := Col - 1 downto 0 do if TryMove(i) then Break; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewwithpanels.pas�����������������������������������������������0000644�0001750�0000144�00000014605�12317307414�022114� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Generic file view containing default panels (header, footer, etc.) Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 uFileViewWithPanels; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, StdCtrls, uFileView, uFileViewHeader, uFileSource; type { TFileViewWithPanels } TFileViewWithPanels = class(TFileView) protected FSelectedCount: Integer; lblInfo: TLabel; pnlHeader: TFileViewHeader; pnlFooter: TPanel; procedure AfterChangePath; override; procedure CreateDefault(AOwner: TWinControl); override; procedure DisplayFileListChanged; override; procedure DoActiveChanged; override; procedure DoSelectionChanged; override; procedure DoUpdateView; override; procedure ShowPathEdit; procedure UpdateFlatFileName; virtual; procedure UpdateInfoPanel; virtual; public procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure RemoveCurrentFileSource; override; published procedure cm_EditPath(const Params: array of string); end; implementation uses DCStrUtils, uFile, uGlobs, uLng, uFileProperty, uFileViewWorker, uDCUtils; { TFileViewWithPanels } procedure TFileViewWithPanels.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); pnlHeader.UpdateAddressLabel; end; procedure TFileViewWithPanels.AfterChangePath; begin inherited AfterChangePath; if FileSourcesCount > 0 then pnlHeader.UpdatePathLabel; end; procedure TFileViewWithPanels.cm_EditPath(const Params: array of string); begin ShowPathEdit; end; procedure TFileViewWithPanels.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); pnlHeader := TFileViewHeader.Create(Self, Self); pnlFooter := TPanel.Create(Self); pnlFooter.Parent := Self; pnlFooter.Align := alBottom; pnlFooter.BevelInner := bvNone; pnlFooter.BevelOuter := bvNone; pnlFooter.AutoSize := True; lblInfo := TLabel.Create(pnlFooter); lblInfo.Parent := pnlFooter; lblInfo.AutoSize := False; lblInfo.Align := alClient; {$IF DEFINED(LCLGTK2)} // Workaround: "Layout and line" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=573 pnlFooter.Visible := False; {$ELSE} lblInfo.Height := lblInfo.Canvas.TextHeight('Wg'); {$ENDIF} {$IFDEF LCLCARBON} // Under Carbon AutoSize don't work without it pnlHeader.ClientHeight:= 0; pnlFooter.ClientHeight:= 0; {$ENDIF} end; procedure TFileViewWithPanels.DisplayFileListChanged; begin inherited DisplayFileListChanged; UpdateInfoPanel; end; procedure TFileViewWithPanels.DoActiveChanged; begin inherited DoActiveChanged; pnlHeader.SetActive(Active); end; procedure TFileViewWithPanels.DoSelectionChanged; begin inherited DoSelectionChanged; UpdateInfoPanel; end; procedure TFileViewWithPanels.DoUpdateView; begin inherited DoUpdateView; pnlHeader.Visible := gCurDir; // Current directory pnlFooter.Visible := gStatusBar; // Status bar pnlHeader.UpdateAddressLabel; pnlHeader.UpdatePathLabel; end; procedure TFileViewWithPanels.RemoveCurrentFileSource; begin inherited RemoveCurrentFileSource; if FileSourcesCount > 0 then pnlHeader.UpdateAddressLabel; end; procedure TFileViewWithPanels.ShowPathEdit; begin pnlHeader.ShowPathEdit; end; procedure TFileViewWithPanels.UpdateFlatFileName; var AFile: TFile; begin AFile:= CloneActiveFile; if Assigned(AFile) then try lblInfo.Caption := MinimizeFilePath(ExtractDirLevel(CurrentPath, AFile.FullPath), lblInfo.Canvas, lblInfo.Width); finally AFile.Free; end; end; procedure TFileViewWithPanels.UpdateInfoPanel; var i: Integer; FilesInDir, FilesSelected, FolderInDir, FolderSelected: Integer; SizeInDir, SizeSelected: Int64; SizeProperty: TFileSizeProperty; begin FSelectedCount := 0; if GetCurrentWorkType = fvwtCreate then begin lblInfo.Caption := rsMsgLoadingFileList; end else if not Assigned(FAllDisplayFiles) or (FAllDisplayFiles.Count = 0) then begin lblInfo.Caption := rsMsgNoFiles; end else if Assigned(FileSource) then begin FilesInDir := 0; FilesSelected := 0; SizeInDir := 0; SizeSelected := 0; FolderInDir := 0; FolderSelected := 0; for i := 0 to FFiles.Count - 1 do begin with FFiles[i] do begin if FSFile.Name = '..' then Continue; if FSFile.IsDirectory then inc(FolderInDir) else inc(FilesInDir); if Selected then begin if FSFile.IsDirectory then inc(FolderSelected) else inc(FilesSelected); end; // Count size if Size property exists. if fpSize in FSFile.AssignedProperties then begin SizeProperty := FSFile.SizeProperty; if Selected then SizeSelected := SizeSelected + SizeProperty.Value; SizeInDir := SizeInDir + SizeProperty.Value; end; end; end; FSelectedCount := FilesSelected + FolderSelected; if FlatView and (FSelectedCount = 0) then UpdateFlatFileName else lblInfo.Caption := Format(rsMsgSelectedInfo, [cnvFormatFileSize(SizeSelected), cnvFormatFileSize(SizeInDir), FilesSelected, FilesInDir, FolderSelected, FolderInDir]); end else if not (csDestroying in ComponentState) then lblInfo.Caption := ''; end; end. ���������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewhistory.pas��������������������������������������������������0000644�0001750�0000144�00000023460�12612505011�021425� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- History of visited paths, file sources for a file view. Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.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 uFileViewHistory; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileSource; type { TFileViewHistory } TFileViewHistory = class private FCurrentFileSource: Integer; FCurrentPath: Integer; FHistory: TFPList; // of PFileViewHistoryEntry procedure Delete(Index: Integer); {en Delete history after current indexes. } procedure DeleteAfterCurrent; function GetCount: Integer; // = FileSourcesCount function GetCurrentFileSource: IFileSource; function GetCurrentPath: String; function GetCurrentFilename: String; function GetFileSource(Index: Integer): IFileSource; function GetPath(FileSourceIndex, PathIndex: Integer): String; function GetFilename(FileSourceIndex, FilenameIndex: Integer): String; function GetPathsCount(Index: Integer): Integer; public constructor Create; destructor Destroy; override; procedure Clear; {$IFDEF DEBUG_HISTORY} procedure DebugShow; {$ENDIF} procedure Add(aFileSource: IFileSource; aPath: String); procedure AddFileSource(aFileSource: IFileSource); procedure AddPath(aPath: String); procedure SetFilenameForCurrentPath(aFilename: String); procedure Assign(otherHistory: TFileViewHistory); procedure DeleteFromCurrentFileSource; procedure SetIndexes(aFileSourceIndex: Integer; aCurrentPathIndex: Integer); property Count: Integer read GetCount; property CurrentFileSource: IFileSource read GetCurrentFileSource; property CurrentFileSourceIndex: Integer read FCurrentFileSource write FCurrentFileSource; property CurrentPath: String read GetCurrentPath; property CurrentFilename: String read GetCurrentFilename; property CurrentPathIndex: Integer read FCurrentPath write FCurrentPath; property FileSource[Index: Integer]: IFileSource read GetFileSource; property Path[FileSourceIndex, PathIndex: Integer]: String read GetPath; property Filename[FileSourceIndex, FilenameIndex: Integer]: String read GetFilename; property PathsCount[Index: Integer]: Integer read GetPathsCount; end; implementation type PFileViewHistoryEntry = ^TFileViewHistoryEntry; TFileViewHistoryEntry = record FileSource: IFileSource; PathsList : TStringList; // paths always include trailing path delimiter FilenamesList : TStringList; //TODO: refactor this! // it's much better to store list of objects each of them contain // both path and filename, instead of keeping two separate lists. // (right now, quick-n-dirty solution was applied) end; { TFileViewHistory } constructor TFileViewHistory.Create; begin FHistory := TFPList.Create; FCurrentFileSource := -1; FCurrentPath := -1; end; destructor TFileViewHistory.Destroy; begin inherited Destroy; Clear; FreeAndNil(FHistory); end; procedure TFileViewHistory.Clear; var i: Integer; begin for i := FHistory.Count - 1 downto 0 do Delete(i); FCurrentFileSource := -1; FCurrentPath := -1; end; {$IFDEF DEBUG_HISTORY} procedure TFileViewHistory.DebugShow; var i, j: Integer; HistEntry: PFileViewHistoryEntry; begin for i := 0 to FHistory.Count - 1 do begin HistEntry := PFileViewHistoryEntry(FHistory.Items[i]); WriteLn('--------------------------------------'); WriteLn(' ', HistEntry^.FileSource.ClassName); for j := 0 to HistEntry^.PathsList.Count - 1 do begin if (i = FCurrentFileSource) and (j = FCurrentPath) then Write('=> ') else Write(' '); WriteLn(HistEntry^.PathsList.Strings[j]); end; end; end; {$ENDIF} function TFileViewHistory.GetCount: Integer; begin Result := FHistory.Count; end; function TFileViewHistory.GetCurrentFileSource: IFileSource; begin if FCurrentFileSource >= 0 then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.FileSource else Result := nil; end; function TFileViewHistory.GetCurrentPath: String; begin if (FCurrentFileSource >= 0) and (FCurrentPath >= 0) then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.PathsList[FCurrentPath] else Result := EmptyStr; end; function TFileViewHistory.GetCurrentFilename: String; begin if (FCurrentFileSource >= 0) and (FCurrentPath >= 0) then Result := PFileViewHistoryEntry(FHistory[FCurrentFileSource])^.FilenamesList[FCurrentPath] else Result := EmptyStr; end; function TFileViewHistory.GetFileSource(Index: Integer): IFileSource; begin Result := PFileViewHistoryEntry(FHistory.Items[Index])^.FileSource; end; function TFileViewHistory.GetPath(FileSourceIndex, PathIndex: Integer): String; begin Result := PFileViewHistoryEntry(FHistory.Items[FileSourceIndex])^.PathsList.Strings[PathIndex]; end; function TFileViewHistory.GetFilename(FileSourceIndex, FilenameIndex: Integer): String; begin Result := PFileViewHistoryEntry(FHistory.Items[FileSourceIndex])^.FilenamesList.Strings[FilenameIndex]; end; function TFileViewHistory.GetPathsCount(Index: Integer): Integer; begin Result := PFileViewHistoryEntry(FHistory.Items[Index])^.PathsList.Count; end; procedure TFileViewHistory.Add(aFileSource: IFileSource; aPath: String); begin AddFileSource(aFileSource); AddPath(aPath); end; procedure TFileViewHistory.AddFileSource(aFileSource: IFileSource); var HistEntry: PFileViewHistoryEntry; begin if FCurrentFileSource >= 0 then begin DeleteAfterCurrent; HistEntry := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource]); // Don't add if the current file source is the same. if HistEntry^.FileSource.Equals(aFileSource) then Exit; end; New(HistEntry); FHistory.Add(HistEntry); HistEntry^.FileSource := aFileSource; HistEntry^.PathsList := TStringList.Create; HistEntry^.FilenamesList := TStringList.Create; Inc(FCurrentFileSource); FCurrentPath := -1; end; procedure TFileViewHistory.SetFilenameForCurrentPath(aFilename: String); var aFilenames: TStringList; begin aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; if (FCurrentPath >= 0) then begin aFilenames[FCurrentPath] := aFilename; end end; procedure TFileViewHistory.AddPath(aPath: String); var aPaths: TStringList; aFilenames: TStringList; begin if FCurrentFileSource >= 0 then begin DeleteAfterCurrent; aPaths := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.PathsList; aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; if aPath <> '' then aPath := IncludeTrailingPathDelimiter(aPath); if (aPaths.Count = 0) or (aPaths.Strings[FCurrentPath] <> aPath) then begin aPaths.Add(aPath); aFilenames.Add(''); if aPaths.Count > 50 then begin aPaths.Delete(0); aFilenames.Delete(0); end else Inc(FCurrentPath); end; end; end; procedure TFileViewHistory.Assign(otherHistory: TFileViewHistory); var i: Integer; HistEntry, otherHistEntry: PFileViewHistoryEntry; begin Clear; for i := 0 to otherHistory.FHistory.Count - 1 do begin otherHistEntry := PFileViewHistoryEntry(otherHistory.FHistory.Items[i]); New(HistEntry); FHistory.Add(HistEntry); HistEntry^.FileSource := otherHistEntry^.FileSource; HistEntry^.PathsList := TStringList.Create; HistEntry^.PathsList.AddStrings(otherHistEntry^.PathsList); HistEntry^.FilenamesList := TStringList.Create; HistEntry^.FilenamesList.AddStrings(otherHistEntry^.FilenamesList); end; FCurrentFileSource := otherHistory.FCurrentFileSource; FCurrentPath := otherHistory.FCurrentPath; end; procedure TFileViewHistory.Delete(Index: Integer); var HistEntry: PFileViewHistoryEntry; begin HistEntry := PFileViewHistoryEntry(FHistory.Items[Index]); FHistory.Delete(Index); HistEntry^.FileSource := nil; HistEntry^.PathsList.Free; HistEntry^.FilenamesList.Free; Dispose(HistEntry); end; procedure TFileViewHistory.DeleteAfterCurrent; var i: Integer; aPaths: TStringList; aFilenames: TStringList; begin if FHistory.Count > 0 then begin for i := FHistory.Count - 1 downto FCurrentFileSource + 1 do Delete(i); aPaths := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.PathsList; aFilenames := PFileViewHistoryEntry(FHistory.Items[FCurrentFileSource])^.FilenamesList; for i := aPaths.Count - 1 downto FCurrentPath + 1 do begin aPaths.Delete(i); aFilenames.Delete(i); end; end; end; procedure TFileViewHistory.DeleteFromCurrentFileSource; var i: Integer; begin if FHistory.Count > 0 then begin for i := FHistory.Count - 1 downto FCurrentFileSource do Delete(i); Dec(FCurrentFileSource); if FCurrentFileSource >= 0 then // Set to last entry. FCurrentPath := PathsCount[FCurrentFileSource] - 1 else FCurrentFileSource := -1; end; end; procedure TFileViewHistory.SetIndexes(aFileSourceIndex: Integer; aCurrentPathIndex: Integer); begin FCurrentFileSource := aFileSourceIndex; FCurrentPath := aCurrentPathIndex; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileview.pas���������������������������������������������������������0000644�0001750�0000144�00000304363�12673524511�020024� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ExtCtrls, Graphics, ComCtrls, contnrs, fgl, LMessages, uFile, uDisplayFile, uFileSource, uFormCommands, uDragDropEx, DCXmlConfig, DCClassesUtf8, uFileSorting, uFileViewHistory, uFileProperty, uFileViewWorker, uFunctionThread, uFileSystemWatcher, fQuickSearch, StringHashList, uGlobs; type TFileView = class; TFileViewClass = class of TFileView; {en Called before path is changed. If it returns @true the paths is changed (and if successful, OnAfterChangePath is called). If it returns @false, the path is not changed. NewFileSource is @nil the last file source is to be removed. } TOnBeforeChangePath = function (FileView: TFileView; NewFileSource: IFileSource; const NewPath : String): Boolean of object; TOnAfterChangePath = procedure (FileView: TFileView) of object; TOnChangeActiveFile = procedure (FileView: TFileView; const aFile : TFile) of object; TOnActivate = procedure (aFileView: TFileView) of object; TOnFileListChanged = procedure (aFileView: TFileView) of object; TDropParams = class; TDragDropType = (ddtInternal, ddtExternal); // Lists all operations supported by dragging and dropping items // in the panel (external, internal and via menu). TDragDropOperation = (ddoCopy, ddoMove, ddoSymLink, ddoHardLink); TFileViewWorkers = specialize TFPGObjectList<TFileViewWorker>; TFileViewFlag = (fvfDelayLoadingFiles, fvfDontLoadFiles, fvfDontWatch); TFileViewFlags = set of TFileViewFlag; TFileViewRequest = (fvrqApplyPendingFilesChanges, // Pending files changes need to be applied to the file list fvrqHashFileList, // Files names need rehashing due to file list changes fvrqMakeDisplayFileList); // Filtered file list needs to be created TFileViewRequests = set of TFileViewRequest; TFileViewNotification = (fvnDisplayFileListChanged, // Filtered file list was created (filter changed, show/hide hidden files option changed, etc.) fvnFileSourceFileListLoaded, // File list was loaded from FileSource fvnFileSourceFileListUpdated, // File list was updated (files added, removed or updated) fvnSelectionChanged, // Files were selected/deselected fvnVisibleFilePropertiesChanged); // Different files or their properties are now visible TFileViewNotifications = set of TFileViewNotification; TFileViewApplyFilterResult = (fvaprRemoved, fvaprInserted, fvaprExisting, fvaprNotExisting); {en Base class for any view of a file or files. There should always be at least one file displayed on the view. } { TFileView } TFileView = class(TWinControl) private {en History of viewed paths and file sources. Contains: - File sources hierarchy associated with this view. Last element is the file source that is currently being viewed, parent file source is (index-1) and so on up to zero (first file source). - Visited paths history for each file source. Last path is the currently viewed path. } FHistory: TFileViewHistory; FSortings: TFileSortings; {en Which file properties are needed to be displayed for each file. } FFilePropertiesNeeded: TFilePropertiesTypes; FSortingProperties: TFilePropertiesTypes; FFileViewWorkers: TFileViewWorkers; FFlags: TFileViewFlags; FHashedFiles: TBucketList; //<en Contains pointers to file source files for quick checking if a file object is still valid FHashedNames: TStringHashList; FPendingFilesChanges: TFPList; FPendingFilesTimer: TTimer; FReloadNeeded: Boolean; //<en If file list should be reloaded FWorkersThread: TFunctionThread; FReloadTimer: TTimer; FLoadFilesStartTime: TDateTime; FLoadFilesFinishTime: TDateTime; FLoadFilesNoDelayCount: Integer; //<en How many reloads have been accepted without delay FNotifications: TFileViewNotifications; FRecentlyUpdatedFiles: TDisplayFiles; //<en Recently updated files. FRecentlyUpdatedFilesTimer: TTimer; FRequests: TFileViewRequests; FUpdateCount: Integer; //<en Nr of times BeginUpdate was called without corresponding EndUpdate FWatcherEventLastTime: TDateTime; FWatcherEventsApplied: Integer; //<en How many filesystem watcher events have been applied immediately before postponing them FActive: Boolean; //<en Is this view active FLastActiveFile: String; //<en Last active file (cursor) {en File name which should be selected. Sometimes the file might not yet exist in the filelist (for example after rename or create), but will be in the list on next reload. } FRequestedActiveFile: String; FFilterOptions: TQuickSearchOptions; FWatchPath: String; FLastMark: String; FLastLoadedFileSource: IFileSource; FLastLoadedPath: String; FLoadingFileListLongTime: Boolean; FMethods: TFormCommands; FForceReload: Boolean; FOnBeforeChangePath : TOnBeforeChangePath; FOnAfterChangePath : TOnAfterChangePath; FOnChangeActiveFile: TOnChangeActiveFile; FOnActivate : TOnActivate; FOnFileListChanged : TOnFileListChanged; FLoadingFileListLongTimer: TTimer; procedure AddFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); procedure AddEventToPendingFilesChanges(const EventData: TFSWatcherEventData); function ApplyFilter(ADisplayFile: TDisplayFile; NewFilesPosition: TNewFilesPosition): TFileViewApplyFilterResult; procedure ApplyPendingFilesChanges(NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); procedure ClearPendingFilesChanges; procedure ClearRecentlyUpdatedFiles; procedure DoOnFileListChanged; procedure EachViewDeactivate(AFileView: TFileView; UserData: Pointer); function FileListLoaded: Boolean; function GetCurrentAddress: String; function GetNotebookPage: TCustomPage; function GetCurrentFileSource: IFileSource; function GetCurrentFileSourceIndex: Integer; function GetCurrentPathIndex: Integer; function GetFileSource(Index: Integer): IFileSource; function GetFileSourcesCount: Integer; function GetFiltered: Boolean; function GetPath(FileSourceIndex, PathIndex: Integer): String; function GetPathsCount(FileSourceIndex: Integer): Integer; function GetSortingProperties: TFilePropertiesTypes; function GetSortingForSorter: TFileSortings; function GetWatcherActive: Boolean; procedure HandleNotifications; procedure HandleRequests; {en Store pointers to file source files in a fast to read structure. } procedure HashFileList; procedure InsertFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles; NewFilesPosition: TNewFilesPosition); procedure RemoveFile(ADisplayFile: TDisplayFile); procedure RemoveFile(const FileName: String); procedure RenameFile(const NewFileName, OldFileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); procedure ResortFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles); procedure SetActive(bActive: Boolean); inline; overload; procedure SetActive(bActive, bNotify: Boolean); overload; procedure SetFlags(AValue: TFileViewFlags); procedure SetLoadingFileListLongTime(AValue: Boolean); procedure StartRecentlyUpdatedTimerIfNeeded; procedure StartUpdatePendingTimer; procedure UpdateFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); procedure UpdatedFilesTimerEvent(Sender: TObject); procedure UpdatePath(UpdateAddressToo: Boolean); procedure UpdatePendingTimerEvent(Sender: TObject); procedure UpdateTitle; procedure VisualizeFileUpdate(AFile: TDisplayFile); {en Assigns the built lists to the file view and displays new the file list. } procedure SetFileList(var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles); procedure EnableWatcher(Enable: Boolean); procedure ActivateEvent(Sender: TObject); function CheckIfDelayReload: Boolean; procedure DoReload; procedure HandleFSWatcherEvent(const EventData: TFSWatcherEventData; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); procedure LoadingFileListTimer(Sender: TObject); procedure ReloadEvent(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray); procedure ReloadTimerEvent(Sender: TObject); procedure WatcherEvent(const EventData: TFSWatcherEventData); protected FFlatView: Boolean; FFileFilter: String; FAllDisplayFiles: TDisplayFiles; //<en List of all files that can be displayed FFiles: TDisplayFiles; //<en List of displayed files (filtered) FSavedSelection: TStringListEx; {en Initializes parts of the view common to all creation methods. } procedure CreateDefault(AOwner: TWinControl); virtual; procedure AddWorker(const Worker: TFileViewWorker; SetEvents: Boolean = True); procedure BeginUpdate; procedure CalculateSpace(AFile: TDisplayFile); procedure CalculateSpace(var AFileList: TFVWorkerFileList); procedure CalculateSpaceOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); procedure CancelLastPathChange; procedure ClearFiles; {en Called when display file list (filtered list) has changed. } procedure DisplayFileListChanged; virtual; procedure EndUpdate; procedure EnsureDisplayProperties; virtual; abstract; {en Called after file list has been retrieved from file source. Runs from GUI thread. } procedure FileSourceFileListLoaded; virtual; {en Called when files were added, removed or updated in the filesource file list. } procedure FileSourceFileListUpdated; virtual; function GetCurrentPath: String; virtual; procedure SetCurrentPath(NewPath: String); virtual; function GetActiveDisplayFile: TDisplayFile; virtual; abstract; function GetWorkersThread: TFunctionThread; procedure InvertFileSelection(AFile: TDisplayFile; bNotify: Boolean = True); function IsLoadingFileList: Boolean; inline; function IsVisibleToUser: Boolean; procedure Notify(NewNotifications: TFileViewNotifications); procedure PropertiesRetrieverOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); procedure Request(NewRequests: TFileViewRequests); {en This function should set active file by reference of TFile or at least by all the properties of the given TFile, in case the object is a clone. It could be useful in case there are multiple files with the same name in the panel and SetActiveFile(String) is not enough. } procedure SetActiveFile(const aFile: TFile); virtual; overload; {en Executed before file list has been retrieved. Runs from GUI thread. } procedure BeforeMakeFileList; virtual; function BeginDragExternal(DragFile: TDisplayFile; DragDropSource: uDragDropEx.TDragDropSource; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; procedure ChooseFile(const AFile: TDisplayFile; FolderMode: Boolean = False); virtual; function DimColor(AColor: TColor): TColor; procedure DoActiveChanged; virtual; procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); virtual; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); virtual; {en Handles keys when file list is being loaded. } procedure DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); virtual; procedure DoLoadingFileListLongTime; virtual; procedure DoSelectionChanged; virtual; procedure DoUpdateView; virtual; {en Returns current work type in progress. } function GetCurrentWorkType: TFileViewWorkType; procedure HandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); function IsActiveItemValid: Boolean; function IsReferenceValid(aFile: TDisplayFile): Boolean; {en Returns True if there are no files shown in the panel. } function IsEmpty: Boolean; inline; {en Returns True if item is not nil and not '..'. May be extended to include other conditions. } function IsItemValid(AFile: TDisplayFile): Boolean; procedure SetSorting(const NewSortings: TFileSortings); virtual; procedure SortAllDisplayFiles; {en Retrieves file list from file source into FAllDisplayFiles. Either runs directly or starts a new thread. } procedure MakeFileSourceFileList; {en Called before changing path. If returns @false the path is not changed. NewFileSource is @nil if the last file source is to be removed. } function BeforeChangePath(NewFileSource: IFileSource; NewPath: String): Boolean; virtual; {en Called after path is changed. } procedure AfterChangePath; virtual; {en Makes a new display file list and redisplays the changed list. } procedure ReDisplayFileList; {en Redraw DisplayFile if it is visible. } procedure RedrawFile(DisplayFile: TDisplayFile); virtual; abstract; procedure RedrawFiles; virtual; abstract; procedure WorkerStarting(const Worker: TFileViewWorker); virtual; procedure WorkerFinished(const Worker: TFileViewWorker); virtual; procedure WMEraseBkgnd(var Message: TLMEraseBkgnd); message LM_ERASEBKGND; property Active: Boolean read FActive write SetActive; property FilePropertiesNeeded: TFilePropertiesTypes read FFilePropertiesNeeded write FFilePropertiesNeeded; property History: TFileViewHistory read FHistory; property LastActiveFile: String read FLastActiveFile write FLastActiveFile; property RequestedActiveFile: String read FRequestedActiveFile write FRequestedActiveFile; property SortingForSorter: TFileSortings read GetSortingForSorter; property WorkersThread: TFunctionThread read GetWorkersThread; public property DisplayFiles: TDisplayFiles read FFiles; public constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); virtual reintroduce; // Constructor for cloning. constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); virtual reintroduce; constructor Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); virtual reintroduce; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); virtual reintroduce; destructor Destroy; override; procedure Clear; function Clone(NewParent: TWinControl): TFileView; virtual; procedure CloneTo(AFileView: TFileView); virtual; procedure AddFileSource(aFileSource: IFileSource; aPath: String); virtual; procedure RemoveCurrentFileSource; virtual; procedure RemoveAllFileSources; virtual; {en Assigns the list of file sources and paths into those file sources from another file view. } procedure AssignFileSources(const otherFileView: TFileView); virtual; {en Returns a copy of currently active file. Caller is responsible for freeing it. There should always be at least one file in the view at any time, but what 'active' means depends on the specific view, so ActiveFile may return 'nil' if there is no such file. Usually it is the file pointed to by the cursor or some other indicator. } function CloneActiveFile: TFile; {en A list of all files in the file view. Caller is responsible for freeing the list. } function CloneFiles: TFiles; {en A list of files selected by the user (this should be a subset of displayed files list returned by Files). Caller is responsible for freeing the list. } function CloneSelectedFiles: TFiles; function CloneSelectedDirectories: TFiles; {en A list of files selected by the user (this should be a subset of displayed files list returned by Files). If there are no selected files then the active file pointed to by the cursor is added to the list as the only file. Caller is responsible for freeing the list. } function CloneSelectedOrActiveFiles: TFiles; function CloneSelectedOrActiveDirectories: TFiles; function GetActiveFileName: String; {en Retrieves files from file source again and displays the new list of files. Returns @true if reloading is done, @false if reloading will not be done (for example paths don't match). } function Reload(const PathsToReload: TPathsArray = nil): Boolean; overload; function Reload(const PathToReload: String): Boolean; overload; procedure Reload(AForced: Boolean); procedure ReloadIfNeeded; procedure StopWorkers; virtual; // For now we use here the knowledge that there are tabs. // Config should be independent of that in the future. procedure LoadConfiguration(Section: String; TabIndex: Integer); virtual; procedure SaveConfiguration(Section: String; TabIndex: Integer); virtual; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); virtual; procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); virtual; procedure UpdateView; {en Moves the selection focus to the file specified by aFilePath. @param(aFilePath may be an absolute path to the file or just a file name.) } procedure SetActiveFile(aFilePath: String); virtual; overload; {en If given path is a path to the directory, then changes current path to the given one; if given path is a path to the file, then changes current path to the path to a given file, and moves the selection to the file. @param(aFilePath may be an absolute path to the directory or to the file) } procedure ChangePathAndSetActiveFile(aFilePath: String); virtual; overload; procedure CalculateSpaceOfAllDirectories; {en Changes the current path to a parent directory. @param(AllowChangingFileSource If this parameter is @true and current path is the root path of the current file source, then the current file source will be removed (closed) and a previous file source will be displayed.) } procedure ChangePathToParent(AllowChangingFileSource: Boolean); virtual; {en Change the current path to a subdirectory pointed to by aFile. } procedure ChangePathToChild(const aFile: TFile); virtual; procedure ExecuteCommand(CommandName: String; const Params: array of String); virtual; {en Returns @true if at least one file is somehow selected. What "selected" means depends on the concrete file view implementation. (Usually it will be a different method of selecting than ActiveFile.) } function HasSelectedFiles: Boolean; virtual; procedure InvertAll; procedure LoadSelectionFromClipboard; procedure LoadSelectionFromFile(const AFileName: String); procedure MarkCurrentExtension(bSelect: Boolean); procedure MarkFile(AFile: TDisplayFile; bSelect: Boolean; bNotify: Boolean = True); procedure MarkFiles(bSelect: Boolean); procedure MarkFiles(FromIndex, ToIndex: PtrInt; bSelect: Boolean); procedure MarkGroup(const sMask: String; bSelect: Boolean); procedure MarkGroup(bSelect: Boolean); procedure OpenActiveFile; procedure RestoreSelection; procedure SaveSelection; procedure SaveSelectionToFile(const AFileName: String); {en Handles drag&drop operations onto the file view. Does any graphic work and executes operations with dropped files if allowed. Handles freeing DropParams. } procedure DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); virtual abstract; procedure GoToHistoryIndex(aFileSourceIndex, aPathIndex: Integer); procedure GoToPrevHistory; procedure GoToNextHistory; procedure SetDragCursor(Shift: TShiftState); virtual; abstract; procedure SetFileFilter(NewFilter: String; NewFilterOptions: TQuickSearchOptions); procedure JustForColorPreviewSetActiveState(bActive: Boolean); property CurrentAddress: String read GetCurrentAddress; property CurrentFileSourceIndex: Integer read GetCurrentFileSourceIndex; property CurrentPath: String read GetCurrentPath write SetCurrentPath; property CurrentPathIndex: Integer read GetCurrentPathIndex; property FileFilter: String read FFileFilter; property FilterOptions: TQuickSearchOptions read FFilterOptions; property Filtered: Boolean read GetFiltered; property FileSource: IFileSource read GetCurrentFileSource; property FileSources[Index: Integer]: IFileSource read GetFileSource; property FileSourcesCount: Integer read GetFileSourcesCount; property Flags: TFileViewFlags read FFlags write SetFlags; property FlatView: Boolean read FFlatView write FFlatView; property Path[FileSourceIndex, PathIndex: Integer]: String read GetPath; property PathsCount[FileSourceIndex: Integer]: Integer read GetPathsCount; property Sorting: TFileSortings read FSortings write SetSorting; property WatcherActive: Boolean read GetWatcherActive; property NotebookPage: TCustomPage read GetNotebookPage; property OnBeforeChangePath : TOnBeforeChangePath read FOnBeforeChangePath write FOnBeforeChangePath; property OnAfterChangePath : TOnAfterChangePath read FOnAfterChangePath write FOnAfterChangePath; property OnChangeActiveFile : TOnChangeActiveFile read FOnChangeActiveFile write FOnChangeActiveFile; property OnActivate : TOnActivate read FOnActivate write FOnActivate; {en Called when files on the file source in the currently displayed path change (are added, removed or updated). It is not called when simply the list of files is filtered. } property OnFileListChanged : TOnFileListChanged read FOnFileListChanged write FOnFileListChanged; end; { TDropParams } { Parameters passed to functions handling drag&drop. FileList List of files dropped (the class handles freeing it). DropEffect Desired action to take with regard to the files. ScreenDropPoint Point where the drop occurred. DropIntoDirectories If true it is/was allowed to drop into specific directories (directories may have been tracked while dragging). Target path will be modified accordingly if ScreenDropPoint points to a directory in the target panel. SourcePanel If drag drop type is internal, this field points to the source panel. TargetPanel Panel, where the drop occurred. } TDropParams = class public Files: TFiles; DropEffect: TDropEffect; ScreenDropPoint: TPoint; DropIntoDirectories: Boolean; SourcePanel: TFileView; TargetPanel: TFileView; TargetFileSource: IFileSource; TargetPath: String; constructor Create(var aFiles: TFiles; aDropEffect: TDropEffect; aScreenDropPoint: TPoint; aDropIntoDirectories: Boolean; aSourcePanel: TFileView; aTargetPanel: TFileView; aTargetFileSource: IFileSource; aTargetPath: String); destructor Destroy; override; // States, whether the drag&drop operation was internal or external. // If SourcePanel is not nil, then it's assumed it was internal. function GetDragDropType: TDragDropType; end; PDropParams = ^TDropParams; implementation uses Clipbrd, Dialogs, LCLProc, LCLType, Forms, dmCommonData, uShellExecute, fMaskInputDlg, uMasks, DCOSUtils, uOSUtils, DCStrUtils, uDCUtils, uDebug, uLng, uShowMsg, uFileSystemFileSource, uFileSourceUtil, uFileViewNotebook, uSearchTemplate, uKeyboard, uFileFunctions, fMain, uSearchResultFileSource, uFileSourceProperty, uVfsModule; const MinimumReloadInterval = 1000; // 1 second UpdateFilelistInterval = 500; constructor TFileView.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); begin DisableAutoSizing; try FFlags := AFlags; CreateDefault(AOwner); FHistory.AddFileSource(AFileSource); ChangePathAndSetActiveFile(aPath); FileSource.AddReloadEventListener(@ReloadEvent); // Update view before making file source file list, // so that file list isn't unnecessarily displayed twice. UpdateView; MakeFileSourceFileList; finally EnableAutoSizing; end; end; constructor TFileView.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); begin DisableAutoSizing; try FFlags := AFlags; CreateDefault(AOwner); AFileView.CloneTo(Self); if Assigned(FileSource) then FileSource.AddReloadEventListener(@ReloadEvent); UpdateView; finally EnableAutoSizing; end; end; constructor TFileView.Create(AOwner: TWinControl; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer; AFlags: TFileViewFlags = []); begin DisableAutoSizing; try FFlags := AFlags; CreateDefault(AOwner); LoadConfiguration(ASectionName, ATabIndex); // Update view before making file source file list, // so that file list isn't unnecessarily displayed twice. UpdateView; if FileSourcesCount > 0 then begin MakeFileSourceFileList; end; finally EnableAutoSizing; end; end; constructor TFileView.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin DisableAutoSizing; try FFlags := AFlags; CreateDefault(AOwner); LoadConfiguration(AConfig, ANode); // Update view before making file source file list, // so that file list isn't unnecessarily displayed twice. UpdateView; if FileSourcesCount > 0 then begin MakeFileSourceFileList; end; finally EnableAutoSizing; end; end; procedure TFileView.CreateDefault(AOwner: TWinControl); begin FMethods := TFormCommands.Create(Self); FHistory := TFileViewHistory.Create; FSavedSelection:= TStringListEx.Create; FLastMark := '*'; FFiles := TDisplayFiles.Create(False); FFilterOptions := gQuickSearchOptions; FHashedNames := TStringHashList.Create(True); FFileViewWorkers := TFileViewWorkers.Create(False); FReloadTimer := TTimer.Create(Self); FReloadTimer.Enabled := False; FReloadTimer.OnTimer := @ReloadTimerEvent; FLoadingFileListLongTimer := TTimer.Create(Self); FLoadingFileListLongTimer.Enabled := False; FLoadingFileListLongTimer.Interval := 2000; FLoadingFileListLongTimer.OnTimer := @LoadingFileListTimer; BorderStyle := bsNone; // Before Create or the window handle may be recreated inherited Create(AOwner); Align := alClient; Parent := AOwner; if Parent is TFileViewPage then (Parent as TFileViewPage).OnActivate := @ActivateEvent; end; destructor TFileView.Destroy; var i: Integer; DbgWorkersThread: TFunctionThread; begin Clear; if Assigned(FWorkersThread) then begin // Wait until all the workers finish. FWorkersThread.Finish; DCDebug('Waiting for workers thread ', hexStr(FWorkersThread)); DbgWorkersThread := FWorkersThread; TFunctionThread.Finalize(FWorkersThread); DCDebug('Finalized workers thread ', hexStr(DbgWorkersThread)); end; // Now all the workers can be safely freed. if Assigned(FFileViewWorkers) then begin for i := 0 to FFileViewWorkers.Count - 1 do begin with FFileViewWorkers[i] do begin if Working then DCDebug('Error: Worker still working.') else if not CanBeDestroyed then DCDebug('Error: Worker cannot be destroyed.'); Free; end; end; FreeAndNil(FFileViewWorkers); end; inherited Destroy; FreeAndNil(FHashedFiles); FreeAndNil(FHashedNames); FreeAndNil(FHistory); FreeAndNil(FSavedSelection); FreeAndNil(FPendingFilesChanges); FreeAndNil(FRecentlyUpdatedFiles); end; function TFileView.Clone(NewParent: TWinControl): TFileView; begin raise Exception.Create('Cannot create object of abstract class'); Result := nil; // For compiler warning. end; procedure TFileView.CloneTo(AFileView: TFileView); var I: Integer; begin if Assigned(AFileView) then begin AFileView.FFlags := FFlags; AFileView.FFlatView := FFlatView; AFileView.FLastLoadedFileSource := FLastLoadedFileSource; AFileView.FLastLoadedPath := FLastLoadedPath; AFileView.FLastMark := FLastMark; // FFileSource should have been passed to FileView constructor already. // FMethods are created in FileView constructor. AFileView.OnBeforeChangePath := Self.OnBeforeChangePath; AFileView.OnAfterChangePath := Self.OnAfterChangePath; AFileView.OnActivate := Self.OnActivate; AFileView.OnFileListChanged := Self.OnFileListChanged; for I := 0 to FSavedSelection.Count - 1 do AFileView.FSavedSelection.Add(FSavedSelection.Strings[I]); AFileView.FHistory.Assign(Self.FHistory); AFileView.FSortings := CloneSortings(Self.FSortings); AFileView.FLastActiveFile := Self.FLastActiveFile; AFileView.FRequestedActiveFile := Self.FRequestedActiveFile; AFileView.FReloadNeeded := Self.FReloadNeeded; if Assigned(Self.FAllDisplayFiles) then begin AFileView.FAllDisplayFiles := Self.FAllDisplayFiles.Clone(True); AFileView.Notify([fvnFileSourceFileListLoaded]); AFileView.Request([fvrqHashFileList]); end; // FFiles need to be recreated because the filter is not cloned. // This is done in AFileView.UpdateView. end; end; procedure TFileView.AddEventToPendingFilesChanges(const EventData: TFSWatcherEventData); function CheckLast(const sFileName: String; const EventType: TFSWatcherEventTypes; bDelete: Boolean): Boolean; var i: Integer; pEvent: PFSWatcherEventData; begin Result := False; for i := FPendingFilesChanges.Count - 1 downto 0 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); if pEvent^.FileName = sFileName then begin if pEvent^.EventType in EventType then begin Result := True; if bDelete then begin Dispose(pEvent); FPendingFilesChanges.Delete(i); end else Break; end else Break; end; end; end; var pEvent: PFSWatcherEventData; begin if not Assigned(FPendingFilesChanges) then FPendingFilesChanges := TFPList.Create; if (Assigned(FAllDisplayFiles) and (FAllDisplayFiles.Count > 0) and (FPendingFilesChanges.Count > FAllDisplayFiles.Count div 4)) or (FPendingFilesChanges.Count > 100) then begin // Too many changes. Reload the whole file list again. Reload(EventData.Path); end else begin // Remove obsolete events if they exist. case EventData.EventType of fswFileCreated: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); fswFileDeleted: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); fswFileChanged: // If FileChanged or FileCreated already exists then new one is not scheduled. // FileCreated will cause update anyway if a file already exists in the filelist. if CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated], False) then Exit; fswFileRenamed: CheckLast(EventData.FileName, [fswFileChanged, fswFileCreated, fswFileDeleted], True); end; New(pEvent); FPendingFilesChanges.Add(pEvent); pEvent^ := EventData; end; end; procedure TFileView.ApplyPendingFilesChanges(NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var i: Integer; pEvent: PFSWatcherEventData; begin if Assigned(FPendingFilesChanges) then begin BeginUpdate; try // Check if another reload was not issued. if FileListLoaded and (GetCurrentWorkType <> fvwtCreate) then begin for i := 0 to FPendingFilesChanges.Count - 1 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); // Insert new files at sorted position since the filelist hasn't been // shown to the user yet, so no need to use user setting. HandleFSWatcherEvent(pEvent^, NewFilesPosition, UpdatedFilesPosition); // HandleFSWatcherEvent might call Reload which clears FPendingFilesChanges, so check for it. if not Assigned(FPendingFilesChanges) then Break; end; end; ClearPendingFilesChanges; finally EndUpdate; end; end; end; procedure TFileView.ClearPendingFilesChanges; var pEvent: PFSWatcherEventData; i: Integer; begin if Assigned(FPendingFilesTimer) then FPendingFilesTimer.Enabled := False; if Assigned(FPendingFilesChanges) then begin for i := 0 to FPendingFilesChanges.Count - 1 do begin pEvent := PFSWatcherEventData(FPendingFilesChanges[i]); Dispose(pEvent); end; FreeAndNil(FPendingFilesChanges); end; end; procedure TFileView.ClearRecentlyUpdatedFiles; begin if Assigned(FRecentlyUpdatedFilesTimer) then FRecentlyUpdatedFilesTimer.Enabled := False; if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Clear; end; function TFileView.DimColor(AColor: TColor): TColor; begin if (not Active) and (gInactivePanelBrightness < 100) then Result := ModColor(AColor, gInactivePanelBrightness) else if FLoadingFileListLongTime then Result := DarkColor(AColor, 25) else Result := AColor; end; procedure TFileView.DisplayFileListChanged; begin // Empty. end; procedure TFileView.DoActiveChanged; begin // Empty. end; procedure TFileView.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin RedrawFile(AFile); end; procedure TFileView.DoHandleKeyDown(var Key: Word; Shift: TShiftState); begin case Key of VK_BACK: begin ChangePathToParent(True); Key := 0; end; VK_RETURN, VK_SELECT: begin if (Shift * KeyModifiersShortcut = []) then begin // Only if there are items in the panel. if not IsEmpty then begin ChooseFile(GetActiveDisplayFile); Key := 0; end; end // execute active file in terminal (Shift+Enter) else if (Shift * KeyModifiersShortcut = [ssShift]) then begin if IsActiveItemValid then begin ProcessExtCommandFork(CurrentPath + GetActiveDisplayFile.FSFile.Name, '', CurrentPath, nil, True, True); Key := 0; end; end; end; end; end; procedure TFileView.DoHandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); begin case Key of VK_BACK: begin ChangePathToParent(True); Key := 0; end; end; end; procedure TFileView.DoLoadingFileListLongTime; begin RedrawFiles; end; function TFileView.FileListLoaded: Boolean; begin Result := Assigned(FAllDisplayFiles); end; procedure TFileView.FileSourceFileListLoaded; begin FLoadingFileListLongTimer.Enabled := False; end; procedure TFileView.FileSourceFileListUpdated; begin // Empty. end; procedure TFileView.Clear; var i: Integer; begin StopWorkers; for i := 0 to FHistory.Count - 1 do FHistory.FileSource[i].RemoveReloadEventListener(@ReloadEvent); ClearRecentlyUpdatedFiles; ClearPendingFilesChanges; RemoveAllFileSources; FreeAndNil(FFiles); FreeAndNil(FAllDisplayFiles); HashFileList; end; procedure TFileView.ClearFiles; begin if Assigned(FAllDisplayFiles) then begin ClearRecentlyUpdatedFiles; ClearPendingFilesChanges; FFiles.Clear; FAllDisplayFiles.Clear; // Clear references to files from the source. HashFileList; Notify([fvnDisplayFileListChanged]); end; end; function TFileView.GetNotebookPage: TCustomPage; begin if Parent is TCustomPage then Result := Parent as TCustomPage else Result := nil; end; procedure TFileView.AddFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var ADisplayFile: TDisplayFile; AFile: TFile; I: Integer; begin I := FHashedNames.Find(FileName); if I < 0 then begin AFile := TFile.Create(APath); AFile.Name := FileName; try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded); except on EFileSourceException do begin FreeAndNil(AFile); Exit; end; end; ADisplayFile := TDisplayFile.Create(AFile); FHashedFiles.Add(ADisplayFile, nil); FHashedNames.Add(FileName, ADisplayFile); InsertFile(ADisplayFile, FAllDisplayFiles, NewFilesPosition); if not TFileListBuilder.MatchesFilter(ADisplayFile.FSFile, FileFilter, FFilterOptions) then begin InsertFile(ADisplayFile, FFiles, NewFilesPosition); VisualizeFileUpdate(ADisplayFile); Notify([fvnFileSourceFileListUpdated, fvnDisplayFileListChanged]); end else Notify([fvnFileSourceFileListUpdated]); end else UpdateFile(FileName, APath, NewFilesPosition, UpdatedFilesPosition); end; procedure TFileView.RemoveFile(const FileName: String); var I: Integer; begin I := FHashedNames.Find(FileName); if I >= 0 then RemoveFile(TDisplayFile(FHashedNames.List[I]^.Data)); end; procedure TFileView.RemoveFile(ADisplayFile: TDisplayFile); begin FHashedNames.Remove(ADisplayFile.FSFile.Name); FHashedFiles.Remove(ADisplayFile); FFiles.Remove(ADisplayFile); FAllDisplayFiles.Remove(ADisplayFile); if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Remove(ADisplayFile); Notify([fvnFileSourceFileListUpdated, fvnDisplayFileListChanged]); end; procedure TFileView.RenameFile(const NewFileName, OldFileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var ADisplayFile: TDisplayFile; OldIndex, NewIndex: Integer; ANotifications: TFileViewNotifications; begin OldIndex := FHashedNames.Find(OldFileName); NewIndex := FHashedNames.Find(NewFileName); if OldIndex >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[OldIndex]^.Data); if NewIndex < 0 then begin ADisplayFile.FSFile.Name := NewFileName; FHashedNames.Remove(OldFileName); FHashedNames.Add(NewFileName, ADisplayFile); ADisplayFile.IconID := -1; ADisplayFile.IconOverlayID := -1; ADisplayFile.TextColor := clNone; ADisplayFile.DisplayStrings.Clear; ResortFile(ADisplayFile, FAllDisplayFiles); ANotifications := [fvnFileSourceFileListUpdated]; case ApplyFilter(ADisplayFile, NewFilesPosition) of fvaprInserted, fvaprRemoved: Include(ANotifications, fvnDisplayFileListChanged); fvaprExisting: begin if GetActiveDisplayFile = ADisplayFile then RequestedActiveFile := ADisplayFile.FSFile.FullPath; ResortFile(ADisplayFile, FFiles); VisualizeFileUpdate(ADisplayFile); Include(ANotifications, fvnDisplayFileListChanged); end; end; Notify(ANotifications); end else begin RemoveFile(ADisplayFile); UpdateFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition); end; end else begin if NewIndex < 0 then AddFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition) else UpdateFile(NewFileName, APath, NewFilesPosition, UpdatedFilesPosition); end; end; procedure TFileView.Request(NewRequests: TFileViewRequests); begin FRequests := FRequests + NewRequests; if FUpdateCount = 0 then HandleRequests; end; procedure TFileView.ResortFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles); var I: Integer; begin I := AFileList.Find(ADisplayFile); if I >= 0 then TDisplayFileSorter.ResortSingle(I, AFileList, SortingForSorter); end; procedure TFileView.StartRecentlyUpdatedTimerIfNeeded; begin if Assigned(FRecentlyUpdatedFiles) and (FRecentlyUpdatedFiles.Count > 0) then begin if not Assigned(FRecentlyUpdatedFilesTimer) then begin FRecentlyUpdatedFilesTimer := TTimer.Create(Self); FRecentlyUpdatedFilesTimer.Interval := 50; FRecentlyUpdatedFilesTimer.OnTimer := @UpdatedFilesTimerEvent; end; FRecentlyUpdatedFilesTimer.Enabled := True; end; end; procedure TFileView.StartUpdatePendingTimer; begin if not Assigned(FPendingFilesTimer) then begin FPendingFilesTimer := TTimer.Create(Self); FPendingFilesTimer.Interval := UpdateFilelistInterval; FPendingFilesTimer.OnTimer := @UpdatePendingTimerEvent; end; FPendingFilesTimer.Enabled := True; end; procedure TFileView.UpdateFile(const FileName, APath: String; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); var AFile: TFile; ADisplayFile: TDisplayFile; I: Integer; ANotifications: TFileViewNotifications; procedure Resort; begin ResortFile(ADisplayFile, FAllDisplayFiles); ResortFile(ADisplayFile, FFiles); end; procedure Update; begin case UpdatedFilesPosition of ufpNoChange: ; // Do nothing ufpSameAsNewFiles: if NewFilesPosition = nfpSortedPosition then Resort else begin FAllDisplayFiles.OwnsObjects := False; FAllDisplayFiles.Remove(ADisplayFile); // Remove only temporarily FAllDisplayFiles.OwnsObjects := True; InsertFile(ADisplayFile, FAllDisplayFiles, NewFilesPosition); FFiles.Remove(ADisplayFile); InsertFile(ADisplayFile, FFiles, NewFilesPosition); end; ufpSortedPosition: Resort; else raise Exception.Create('Unsupported UpdatedFilesPosition setting.'); end; VisualizeFileUpdate(ADisplayFile); end; begin I := FHashedNames.Find(FileName); if I >= 0 then begin ADisplayFile := TDisplayFile(FHashedNames.List[I]^.Data); AFile := ADisplayFile.FSFile; AFile.ClearProperties; try FileSource.RetrieveProperties(AFile, FilePropertiesNeeded); except on EFileNotFound do begin RemoveFile(ADisplayFile); Exit; end; on EFileSourceException do begin Exit; end; end; ADisplayFile.TextColor := clNone; ADisplayFile.IconOverlayID := -1; ADisplayFile.DisplayStrings.Clear; ANotifications := [fvnFileSourceFileListUpdated]; case ApplyFilter(ADisplayFile, NewFilesPosition) of fvaprInserted, fvaprRemoved: Include(ANotifications, fvnDisplayFileListChanged); fvaprExisting: begin Update; Include(ANotifications, fvnDisplayFileListChanged); end; end; Notify(ANotifications); end else AddFile(FileName, APath, NewFilesPosition, UpdatedFilesPosition); end; procedure TFileView.UpdatedFilesTimerEvent(Sender: TObject); var AFile: TDisplayFile; i: Integer = 0; begin while i < FRecentlyUpdatedFiles.Count do begin AFile := FRecentlyUpdatedFiles[i]; if AFile.RecentlyUpdatedPct = 0 then begin FRecentlyUpdatedFiles.Delete(i); end else begin AFile.RecentlyUpdatedPct := AFile.RecentlyUpdatedPct - 10; Inc(i); RedrawFile(AFile); end; end; if i = 0 then FRecentlyUpdatedFilesTimer.Enabled := False; end; procedure TFileView.UpdatePath(UpdateAddressToo: Boolean); begin // Maybe better to do via some notification like FileSourceHasChanged. UpdateView; end; procedure TFileView.UpdatePendingTimerEvent(Sender: TObject); begin FPendingFilesTimer.Enabled := False; ApplyPendingFilesChanges(gNewFilesPosition, gUpdatedFilesPosition); end; procedure TFileView.UpdateTitle; begin if Parent is TFileViewPage then TFileViewPage(Parent).UpdateTitle; end; procedure TFileView.VisualizeFileUpdate(AFile: TDisplayFile); begin if gHighlightUpdatedFiles then begin if not Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles := TDisplayFiles.Create(False); if FRecentlyUpdatedFiles.Find(AFile) < 0 then begin FRecentlyUpdatedFiles.Add(AFile); AFile.RecentlyUpdatedPct := 100; end; end; end; function TFileView.GetCurrentAddress: String; begin if FileSourcesCount > 0 then Result := FileSource.CurrentAddress else Result := ''; end; procedure TFileView.AddWorker(const Worker: TFileViewWorker; SetEvents: Boolean = True); begin FFileViewWorkers.Add(Worker); if SetEvents then begin Worker.OnStarting := @WorkerStarting; Worker.OnFinished := @WorkerFinished; end; end; procedure TFileView.BeginUpdate; begin Inc(FUpdateCount); end; procedure TFileView.CalculateSpace(AFile: TDisplayFile); var AFileList: TFVWorkerFileList; begin AFileList := TFVWorkerFileList.Create; try if IsItemValid(AFile) and AFile.FSFile.IsDirectory then AFileList.AddClone(AFile, AFile); CalculateSpace(AFileList); finally FreeAndNil(AFileList); end; end; procedure TFileView.CalculateSpace(var AFileList: TFVWorkerFileList); var Worker: TFileViewWorker; begin if GetCurrentWorkType = fvwtCreate then Exit; if AFileList.Count > 0 then begin Worker := TCalculateSpaceWorker.Create( FileSource, WorkersThread, @CalculateSpaceOnUpdate, AFileList); AddWorker(Worker); WorkersThread.QueueFunction(@Worker.StartParam); end else FreeAndNil(AFileList); end; procedure TFileView.CalculateSpaceOfAllDirectories; var i: Integer; AFileList: TFVWorkerFileList; AFile: TDisplayFile; begin if IsLoadingFileList then Exit; AFileList := TFVWorkerFileList.Create; try for i := 0 to FFiles.Count - 1 do begin AFile := FFiles[i]; if IsItemValid(AFile) and AFile.FSFile.IsDirectory then AFileList.AddClone(AFile, AFile); end; CalculateSpace(AFileList); finally FreeAndNil(AFileList); end; end; procedure TFileView.CalculateSpaceOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); var OrigDisplayFile: TDisplayFile; begin OrigDisplayFile := TDisplayFile(UserData); if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). OrigDisplayFile.FSFile.Size := UpdatedFile.FSFile.Size; DoFileUpdated(OrigDisplayFile, [fpSize]); end; procedure TFileView.CancelLastPathChange; var FSIndex, PathIndex: Integer; begin // Get previous entry in history. FSIndex := FHistory.CurrentFileSourceIndex; PathIndex := FHistory.CurrentPathIndex - 1; while PathIndex < 0 do begin Dec(FSIndex); if FSIndex < 0 then Break; PathIndex := FHistory.PathsCount[FSIndex] - 1; end; // Go to it if it is the same as last loaded file list. if (FSIndex >= 0) and FHistory.FileSource[FSIndex].Equals(FLastLoadedFileSource) and (FHistory.Path[FSIndex, PathIndex] = FLastLoadedPath) then begin // Don't reload file list because we already have it. Flags := Flags + [fvfDontLoadFiles]; GoToHistoryIndex(FSIndex, PathIndex); Flags := Flags - [fvfDontLoadFiles]; end else ClearFiles; end; procedure TFileView.DoOnFileListChanged; begin if Assigned(OnFileListChanged) then OnFileListChanged(Self); end; procedure TFileView.EndUpdate; begin Dec(FUpdateCount); if (FUpdateCount = 0) and // This condition prevents endless recursion. ((FRequests <> []) or (FNotifications <> [])) then begin BeginUpdate; try HandleRequests; HandleNotifications; finally EndUpdate; end; end; end; function TFileView.GetCurrentPath: String; begin Result := FHistory.CurrentPath; end; procedure TFileView.SetCurrentPath(NewPath: String); begin if (NewPath <> CurrentPath) and BeforeChangePath(FileSource, NewPath) then begin FFlatView:= False; EnableWatcher(False); //-- before changing path, remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed FHistory.SetFilenameForCurrentPath(GetActiveFileName()); FHistory.AddPath(NewPath); // Sets CurrentPath. AfterChangePath; EnableWatcher(True); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.SetFlags(AValue: TFileViewFlags); var AddedFlags, RemovedFlags: TFileViewFlags; begin if FFlags = AValue then Exit; AddedFlags := AValue - FFlags; RemovedFlags := FFlags - AValue; FFlags := AValue; if fvfDontWatch in AddedFlags then EnableWatcher(False); if ([fvfDelayLoadingFiles, fvfDontLoadFiles] * RemovedFlags <> []) then begin if not (FileListLoaded or (GetCurrentWorkType = fvwtCreate)) then Reload; EnableWatcher(True); end; if fvfDontWatch in RemovedFlags then EnableWatcher(True); end; procedure TFileView.SetLoadingFileListLongTime(AValue: Boolean); begin FLoadingFileListLongTimer.Enabled := False; if FLoadingFileListLongTime <> AValue then begin FLoadingFileListLongTime := AValue; DoLoadingFileListLongTime; end; end; function TFileView.CloneActiveFile: TFile; var aFile: TDisplayFile; begin aFile := GetActiveDisplayFile; if Assigned(aFile) then Result := aFile.FSFile.Clone else Result := nil; end; function TFileView.CloneFiles: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedFiles: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedDirectories: TFiles; var i: Integer; begin Result := TFiles.Create(CurrentPath); for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then if FFiles[i].FSFile.IsDirectory then Result.Add(FFiles[i].FSFile.Clone); end; end; function TFileView.CloneSelectedOrActiveFiles: TFiles; var aFile: TDisplayFile; begin Result := CloneSelectedFiles; Result.Flat := FFlatView; // If no files are selected, add currently active file if it is valid. if (Result.Count = 0) then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then Result.Add(aFile.FSFile.Clone); end; end; function TFileView.CloneSelectedOrActiveDirectories: TFiles; var aFile: TDisplayFile; begin Result := CloneSelectedDirectories; // If no directory(ies) is(are) selected, add currently active directory if it is valid. if (Result.Count = 0) then begin aFile := GetActiveDisplayFile; if IsItemValid(aFile) then if aFile.FSFile.IsDirectory then Result.Add(aFile.FSFile.Clone); end; end; function TFileView.GetWorkersThread: TFunctionThread; begin if not Assigned(FWorkersThread) then FWorkersThread := TFunctionThread.Create(False); Result := FWorkersThread; end; procedure TFileView.SaveSelection; var I: Integer; begin FSavedSelection.Clear; for I := 0 to FFiles.Count - 1 do with FFiles[I] do begin if Selected then FSavedSelection.Add(FSFile.Name); end; end; procedure TFileView.SaveSelectionToFile(const AFileName: String); begin with dmComData do begin SaveDialog.DefaultExt := '.txt'; SaveDialog.Filter := '*.txt|*.txt'; SaveDialog.FileName := AFileName; if (AFileName <> EmptyStr) or SaveDialog.Execute then try SaveSelection; FSavedSelection.SaveToFile(SaveDialog.FileName); except on E: Exception do msgError(rsMsgErrSaveFile + '-' + E.Message); end; end; end; procedure TFileView.RestoreSelection; var I: Integer; begin BeginUpdate; try for I := 0 to FFiles.Count - 1 do with FFiles[I] do Selected:= (FSavedSelection.IndexOf(FSFile.Name) >= 0); Notify([fvnSelectionChanged]); finally EndUpdate; end; end; procedure TFileView.InvertFileSelection(AFile: TDisplayFile; bNotify: Boolean = True); begin MarkFile(AFile, not AFile.Selected, bNotify); end; procedure TFileView.InvertAll; var i: Integer; begin BeginUpdate; try for i := 0 to FFiles.Count-1 do InvertFileSelection(FFiles[i]); finally EndUpdate; end; end; procedure TFileView.MarkFile(AFile: TDisplayFile; bSelect: Boolean; bNotify: Boolean = True); begin // Don't check if valid when just unselecting. if not bSelect then begin if not Assigned(AFile) then Exit; end else if not IsItemValid(AFile) then Exit; AFile.Selected := bSelect; if bNotify then Notify([fvnSelectionChanged]); end; procedure TFileView.MarkFiles(bSelect: Boolean); begin MarkFiles(0, FFiles.Count - 1, bSelect); end; procedure TFileView.MarkFiles(FromIndex, ToIndex: PtrInt; bSelect: Boolean); var Index: PtrInt; begin BeginUpdate; try for Index := FromIndex to ToIndex do MarkFile(FFiles[Index], bSelect); finally EndUpdate; end; end; procedure TFileView.MarkGroup(const sMask: String; bSelect: Boolean); var I: Integer; SearchTemplate: TSearchTemplate = nil; bSelected: Boolean = False; begin BeginUpdate; try if IsMaskSearchTemplate(sMask) then begin SearchTemplate:= gSearchTemplateList.TemplateByName[sMask]; if Assigned(SearchTemplate) then for I := 0 to FFiles.Count - 1 do begin if FFiles[I].FSFile.Name = '..' then Continue; if SearchTemplate.CheckFile(FFiles[I].FSFile) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; end else for I := 0 to FFiles.Count - 1 do begin if FFiles[I].FSFile.Name = '..' then Continue; if MatchesMaskList(FFiles[I].FSFile.Name, sMask) then begin FFiles[I].Selected := bSelect; bSelected := True; end; end; if bSelected then Notify([fvnSelectionChanged]); finally EndUpdate; end; end; procedure TFileView.MarkGroup(bSelect: Boolean); var s, ADlgTitle: String; begin if not IsEmpty then begin if bSelect then ADlgTitle := rsMarkPlus else ADlgTitle := rsMarkMinus; s := FLastMark; if ShowMaskInputDlg(ADlgTitle, rsMaskInput, glsMaskHistory, s) then begin FLastMark := s; MarkGroup(s, bSelect); end; end; end; procedure TFileView.MarkCurrentExtension(bSelect: Boolean); var sGroup: String; begin if IsActiveItemValid then begin sGroup := GetActiveDisplayFile.FSFile.Extension; if sGroup <> '' then sGroup := '.' + sGroup; MarkGroup('*' + sGroup, bSelect); end; end; function TFileView.IsVisibleToUser: Boolean; begin if NotebookPage is TFileViewPage then Result := TFileViewPage(NotebookPage).IsActive else Result := True; end; procedure TFileView.PropertiesRetrieverOnUpdate(const UpdatedFile: TDisplayFile; const UserData: Pointer); var propType: TFilePropertyType; aFile: TFile; OrigDisplayFile: TDisplayFile; begin OrigDisplayFile := TDisplayFile(UserData); if not IsReferenceValid(OrigDisplayFile) then Exit; // File does not exist anymore (reference is invalid). aFile := OrigDisplayFile.FSFile; {$IF (fpc_version>2) or ((fpc_version=2) and (fpc_release>4))} // This is a bit faster. for propType in UpdatedFile.FSFile.AssignedProperties - aFile.AssignedProperties do {$ELSE} for propType := Low(TFilePropertyType) to High(TFilePropertyType) do if (propType in UpdatedFile.FSFile.AssignedProperties) and (not (propType in aFile.AssignedProperties)) then {$ENDIF} begin aFile.Properties[propType] := UpdatedFile.FSFile.ReleaseProperty(propType); end; if UpdatedFile.IconID <> -1 then OrigDisplayFile.IconID := UpdatedFile.IconID; if UpdatedFile.IconOverlayID <> -1 then OrigDisplayFile.IconOverlayID := UpdatedFile.IconOverlayID; if UpdatedFile.TextColor <> clNone then OrigDisplayFile.TextColor := UpdatedFile.TextColor; DoFileUpdated(OrigDisplayFile); end; function TFileView.GetActiveFileName: String; var aFile: TDisplayFile; begin aFile := GetActiveDisplayFile; if Assigned(aFile) then Result := aFile.FSFile.Name else Result := ''; end; procedure TFileView.SetActiveFile(const aFile: TFile); begin end; procedure TFileView.SetActiveFile(aFilePath: String); begin end; procedure TFileView.ChangePathAndSetActiveFile(aFilePath: String); begin end; procedure TFileView.SetActive(bActive, bNotify: Boolean); begin if FActive <> bActive then begin FActive := bActive; DoActiveChanged; end; if bActive and bNotify then begin // Deactivate all other views. frmMain.ForEachView(@EachViewDeactivate, nil); if Assigned(OnActivate) then OnActivate(Self); end; end; procedure TFileView.SetActive(bActive: Boolean); begin SetActive(bActive, True); end; procedure TFileView.JustForColorPreviewSetActiveState(bActive: Boolean); begin SetActive(bActive, False); end; procedure TFileView.SetSorting(const NewSortings: TFileSortings); var SortingProperties: TFilePropertiesTypes; begin FSortings := CloneSortings(NewSortings); if not IsLoadingFileList then begin SortingProperties:= GetSortingProperties; // Force reload if new sorting properties needed FForceReload:= (SortingProperties <> []) and (SortingProperties <> FSortingProperties); FSortingProperties:= SortingProperties; if FForceReload then Reload() else begin SortAllDisplayFiles; ReDisplayFileList; end; end; end; procedure TFileView.SortAllDisplayFiles; begin TDisplayFileSorter.Sort(FAllDisplayFiles, SortingForSorter); end; procedure TFileView.MakeFileSourceFileList; var Worker: TFileViewWorker; AThread: TFunctionThread = nil; ClonedDisplayFiles: TDisplayFiles = nil; DisplayFilesHashed: TStringHashList = nil; i: Integer; begin if (csDestroying in ComponentState) or (FileSourcesCount = 0) or ([fvfDelayLoadingFiles, fvfDontLoadFiles] * Flags <> []) then Exit; {$IFDEF timeFileView} filelistLoaderTime := Now; DCDebug('--------- Start ---------'); {$ENDIF} StopWorkers; if gListFilesInThread and not (fspListOnMainThread in FileSource.GetProperties) then AThread := GetWorkersThread; if FileSource.Equals(FLastLoadedFileSource) and (FLastLoadedPath = CurrentPath) and (FAllDisplayFiles.Count > 0) and (FForceReload = False) then begin // Clone all properties of display files, but don't clone the FS files // themselves because new ones will be retrieved from FileSource. ClonedDisplayFiles := FAllDisplayFiles.Clone(False); DisplayFilesHashed := TStringHashList.Create(True); // Map filename to display file. for i := 0 to FAllDisplayFiles.Count - 1 do DisplayFilesHashed.Add(FAllDisplayFiles[i].FSFile.FullPath, ClonedDisplayFiles[i]); end; // Drop FForceReload flag FForceReload := False; Worker := TFileListBuilder.Create( FileSource, CurrentFileSourceIndex, FileFilter, FilterOptions, CurrentPath, SortingForSorter, FlatView, AThread, FSortingProperties, @SetFileList, ClonedDisplayFiles, DisplayFilesHashed); AddWorker(Worker); ClearPendingFilesChanges; if gListFilesInThread and not (fspListOnMainThread in FileSource.GetProperties) then begin ClearRecentlyUpdatedFiles; BeforeMakeFileList; AThread.QueueFunction(@Worker.StartParam); end else begin BeforeMakeFileList; Worker.Start; end; end; function TFileView.ApplyFilter(ADisplayFile: TDisplayFile; NewFilesPosition: TNewFilesPosition): TFileViewApplyFilterResult; var bFilterOut: Boolean; FilteredFilesIndex: Integer; begin bFilterOut := TFileListBuilder.MatchesFilter(ADisplayFile.FSFile, FileFilter, FFilterOptions); FilteredFilesIndex := FFiles.Find(ADisplayFile); if FilteredFilesIndex >= 0 then begin if bFilterOut then begin FFiles.Delete(FilteredFilesIndex); if Assigned(FRecentlyUpdatedFiles) then FRecentlyUpdatedFiles.Remove(ADisplayFile); Result := fvaprRemoved; end else Result := fvaprExisting; end else if not bFilterOut then begin InsertFile(ADisplayFile, FFiles, NewFilesPosition); VisualizeFileUpdate(ADisplayFile); Result := fvaprInserted; end else Result := fvaprNotExisting; end; procedure TFileView.BeforeMakeFileList; begin FLoadingFileListLongTimer.Enabled := True; end; function TFileView.BeginDragExternal(DragFile: TDisplayFile; DragDropSource: uDragDropEx.TDragDropSource; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var fileNamesList: TStringList; i: Integer; begin Result := False; if Assigned(DragDropSource) then begin fileNamesList := TStringList.Create; try if IsItemValid(DragFile) = True then begin for i := 0 to FFiles.Count-1 do begin if FFiles[i].Selected then fileNamesList.Add(FFiles[i].FSFile.FullPath); end; // If there were no files selected add the dragged file. if fileNamesList.Count = 0 then fileNamesList.Add(DragFile.FSFile.FullPath); // Initiate external drag&drop operation. Result := DragDropSource.DoDragDrop(fileNamesList, MouseButton, ScreenStartPoint); // Refresh source file panel after drop to (possibly) another application // (files could have been moved for example). // 'draggedFileItem' is invalid after this. Reload; end; finally FreeAndNil(fileNamesList); end; end; end; procedure TFileView.ChooseFile(const AFile: TDisplayFile; FolderMode: Boolean = False); var FSFile: TFile; begin if Assigned(AFile) and not IsLoadingFileList then begin FSFile := AFile.FSFile.Clone; try if FSFile.Name = '..' then ChangePathToParent(True) else if FSFile.IsLinkToDirectory then ChooseSymbolicLink(Self, FSFile) else if FSFile.IsDirectory then ChangePathToChild(FSFile) else if not FolderMode then try uFileSourceUtil.ChooseFile(Self, FSFile); except on e: EInvalidCommandLine do MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); on e: Exception do MessageDlg('Error', e.Message, mtError, [mbOK], 0); end; finally FSFile.Free; end; end; end; procedure TFileView.DoSelectionChanged; begin // Empty. end; procedure TFileView.DoUpdateView; begin // Empty. end; procedure TFileView.EachViewDeactivate(AFileView: TFileView; UserData: Pointer); var ThisFileViewPage, OtherFileViewPage: TFileViewPage; begin if AFileView <> Self then begin ThisFileViewPage := TFileViewPage(GetNotebookPage); OtherFileViewPage := TFileViewPage(AFileView.GetNotebookPage); // Pages on the same notebook set to active and others to not active. if Assigned(ThisFileViewPage) and Assigned(OtherFileViewPage) then AFileView.SetActive(ThisFileViewPage.Notebook = OtherFileViewPage.Notebook, False); end; end; function TFileView.GetCurrentWorkType: TFileViewWorkType; var i: Integer; begin if Assigned(FFileViewWorkers) then begin for i := 0 to FFileViewWorkers.Count - 1 do if FFileViewWorkers[i].Working then Exit(FFileViewWorkers[i].WorkType); end; Result := fvwtNone; end; procedure TFileView.HashFileList; var i: Integer; begin // Cannot use FHashedFiles.Clear because it also destroys the buckets. FHashedFiles.Free; // TBucketList seems to do fairly well without needing a proper hash table. FHashedFiles := TBucketList.Create(bl256); FHashedNames.Clear; if Assigned(FAllDisplayFiles) then begin for i := 0 to FAllDisplayFiles.Count - 1 do begin FHashedFiles.Add(FAllDisplayFiles[i], nil); FHashedNames.Add(FAllDisplayFiles[i].FSFile.Name, FAllDisplayFiles[i]); end; end; end; procedure TFileView.InsertFile(ADisplayFile: TDisplayFile; AFileList: TDisplayFiles; NewFilesPosition: TNewFilesPosition); procedure InsertAfterUpDir; var i, InsertPos: Integer; begin InsertPos := AFileList.Count; for i := 0 to AFileList.Count - 1 do begin if (AFileList[i].FSFile.Name <> '..') and (AFileList[i].FSFile.Name <> '.') then begin InsertPos := i; Break; end; end; AFileList.List.Insert(InsertPos, ADisplayFile); end; procedure InsertIntoSortedPosition; begin TDisplayFileSorter.InsertSort(ADisplayFile, AFileList, SortingForSorter); end; var EmptySortings: TFileSortings = nil; begin if ADisplayFile.FSFile.IsDirectory or ADisplayFile.FSFile.IsLinkToDirectory then InsertIntoSortedPosition else case NewFilesPosition of nfpTop: InsertAfterUpDir; nfpTopAfterDirectories: if gSortFolderMode <> sfmSortLikeFile then // Will only sort by directory attribute. TDisplayFileSorter.InsertSort(ADisplayFile, AFileList, EmptySortings, True) else InsertIntoSortedPosition; nfpSortedPosition: InsertIntoSortedPosition; nfpBottom: AFileList.Add(ADisplayFile); else raise Exception.Create('Unsupported NewFilesPosition setting.'); end; end; function TFileView.HasSelectedFiles: Boolean; var i: Integer; begin for i := 0 to FFiles.Count - 1 do begin if FFiles[i].Selected then Exit(True); end; Result := False; end; function TFileView.IsActiveItemValid:Boolean; begin Result := IsItemValid(GetActiveDisplayFile); end; function TFileView.IsReferenceValid(aFile: TDisplayFile): Boolean; begin Result := FHashedFiles.Exists(aFile); end; function TFileView.IsEmpty: Boolean; begin Result := (FFiles.Count = 0); end; function TFileView.IsItemValid(AFile: TDisplayFile): Boolean; begin if Assigned(AFile) and (AFile.FSFile.Name <> '..') then Result := True else Result := False; end; function TFileView.IsLoadingFileList: Boolean; begin Result := GetCurrentWorkType = fvwtCreate; end; function TFileView.Reload(const PathsToReload: TPathsArray = nil): Boolean; var i: Integer; begin if csDestroying in ComponentState then Exit(False); if Assigned(PathsToReload) then begin Result := False; for i := Low(PathsToReload) to High(PathsToReload) do if IsInPath(PathsToReload[i], CurrentPath, True, True) then begin Result := True; Break; end; if not Result then Exit; end; if FReloadTimer.Enabled then begin // Reload is already scheduled. Result := True; end else if CheckIfDelayReload then begin // Delay reloading. Result := False; FReloadNeeded := True; end else begin if GetCurrentWorkType = fvwtCreate then begin Result := False; // Allow interrupting loading a few times. if FLoadFilesNoDelayCount < 2 then begin Inc(FLoadFilesNoDelayCount); DoReload; end else begin // Let current loading finish and another will be scheduled after delay via timer. FReloadNeeded := True; end; end else begin Result := True; if DateTimeToTimeStamp(SysUtils.Now - FLoadFilesFinishTime).Time > MinimumReloadInterval then begin FLoadFilesNoDelayCount := 0; DoReload; end // Allow a few reloads in quick succession. else if FLoadFilesNoDelayCount < 4 then begin Inc(FLoadFilesNoDelayCount); DoReload; end else begin FReloadTimer.Interval := MinimumReloadInterval; FReloadTimer.Enabled := True; end; end; end; end; function TFileView.Reload(const PathToReload: String): Boolean; var Paths: TPathsArray; begin SetLength(Paths, 1); Paths[0] := PathToReload; Result := Reload(Paths); end; procedure TFileView.Reload(AForced: Boolean); begin FForceReload:= AForced; DoReload; end; procedure TFileView.ReloadIfNeeded; begin if FReloadNeeded then Reload; end; procedure TFileView.StopWorkers; var i: Integer = 0; begin // Abort any working workers and destroy those that have finished. while i < FFileViewWorkers.Count do begin if FFileViewWorkers[i].CanBeDestroyed then begin FFileViewWorkers[i].Free; FFileViewWorkers.Delete(i); end else begin if FFileViewWorkers[i].Working then FFileViewWorkers[i].Abort; Inc(i); end; end; SetLoadingFileListLongTime(False); end; procedure TFileView.LoadConfiguration(Section: String; TabIndex: Integer); begin // Empty. For backward compatibility with loading from INI. end; procedure TFileView.SaveConfiguration(Section: String; TabIndex: Integer); begin // Empty. For backward compatibility with saving to INI. end; procedure TFileView.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); var HistoryNode, EntryNode, FSNode, PathsNode: TXmlNode; SortingsNode, SortingSubNode, SortFunctionNode: TXmlNode; FileSourceClass: TFileSourceClass; sFSType, sPath, sFilename: String; aFileSource: IFileSource = nil; ActiveFSIndex: Integer = -1; ActivePathIndex: Integer = -1; NewSorting: TFileSortings = nil; SortDirection: TSortDirection; SortFunctions: TFileFunctions; SortFunctionInt: Integer; begin RemoveAllFileSources; // Sorting. SortingsNode := AConfig.FindNode(ANode, 'Sortings'); if Assigned(SortingsNode) then begin SortingSubNode := SortingsNode.FirstChild; while Assigned(SortingSubNode) do begin if SortingSubNode.CompareName('Sorting') = 0 then begin if AConfig.TryGetValue(SortingSubNode, 'Direction', Integer(SortDirection)) then begin SortFunctions := nil; SortFunctionNode := SortingSubNode.FirstChild; while Assigned(SortFunctionNode) do begin if SortFunctionNode.CompareName('Function') = 0 then begin if TryStrToInt(AConfig.GetContent(SortFunctionNode), SortFunctionInt) then AddSortFunction(SortFunctions, TFileFunction(SortFunctionInt)); end; SortFunctionNode := SortFunctionNode.NextSibling; end; AddSorting(NewSorting, SortFunctions, SortDirection); end; end; SortingSubNode := SortingSubNode.NextSibling; end; end; FSortings := NewSorting; // SetSorting not needed here, will be called in UpdateView // History. HistoryNode := AConfig.FindNode(ANode, 'History'); if Assigned(HistoryNode) then begin EntryNode := HistoryNode.FirstChild; while Assigned(EntryNode) do begin if EntryNode.CompareName('Entry') = 0 then begin FSNode := EntryNode.FindNode('FileSource'); if Assigned(FSNode) then begin if AConfig.TryGetAttr(FSNode, 'Type', sFSType) then begin // Create file source based on saved configuration or create empty and // allow it to read its configuration from FSNode. if sFSType = 'FileSystem' then aFileSource := TFileSystemFileSource.GetFileSource else begin FileSourceClass := gVfsModuleList.FindFileSource(sFSType); if Assigned(FileSourceClass) then aFileSource := FileSourceClass.Create; end; if Assigned(aFileSource) then begin FHistory.AddFileSource(aFileSource); // Load paths history. PathsNode := AConfig.FindNode(EntryNode, 'Paths'); if Assigned(PathsNode) then begin PathsNode := PathsNode.FirstChild; while Assigned(PathsNode) do begin if PathsNode.CompareName('Path') = 0 then begin sPath := AConfig.GetContent(PathsNode); // Go to upper directory if it doesn't exist (filesystem only for now). if TFileSystemFileSource.ClassNameIs(aFileSource.ClassName) then begin sPath := GetDeepestExistingPath(sPath); end; if sPath <> EmptyStr then begin FHistory.AddPath(sPath); if AConfig.GetAttr(PathsNode, 'Active', False) then ActivePathIndex := FHistory.PathsCount[FHistory.Count - 1] - 1; //-- if selected filename is specified in xml file, load it too if AConfig.TryGetAttr(PathsNode, 'Filename', sFilename) then begin FHistory.SetFilenameForCurrentPath(sFilename); end end; end; PathsNode := PathsNode.NextSibling; end; end; // Delete the file source if no paths loaded. if FHistory.PathsCount[FHistory.Count - 1] = 0 then FHistory.DeleteFromCurrentFileSource else begin // Check if the current history entry is active. if AConfig.GetAttr(EntryNode, 'Active', False) then ActiveFSIndex := FHistory.Count - 1; end; end; end; end; end; EntryNode := EntryNode.NextSibling; end; end; // Set current history position. if (ActiveFSIndex < 0) or (ActiveFSIndex > FHistory.Count - 1) then ActiveFSIndex := FHistory.Count - 1; if ActiveFSIndex <> -1 then begin if (ActivePathIndex < 0) or (ActivePathIndex > FHistory.PathsCount[ActiveFSIndex] - 1) then ActivePathIndex := FHistory.PathsCount[ActiveFSIndex] - 1; end else ActivePathIndex := -1; FHistory.SetIndexes(ActiveFSIndex, ActivePathIndex); if Assigned(FileSource) then begin FSortingProperties := GetSortingProperties; FileSource.AddReloadEventListener(@ReloadEvent); end; //TODO: probably it's not the best place for calling SetActiveFile() : // initially-active file should be set in the same place where // initial path is set SetActiveFile(FHistory.CurrentFilename); // No automatic reload here. end; procedure TFileView.LoadingFileListTimer(Sender: TObject); begin SetLoadingFileListLongTime(True); end; procedure TFileView.LoadSelectionFromClipboard; begin FSavedSelection.Text:= Clipboard.AsText; RestoreSelection; end; procedure TFileView.LoadSelectionFromFile(const AFileName: String); begin with dmComData do begin OpenDialog.DefaultExt := '.txt'; OpenDialog.Filter := '*.txt|*.txt'; OpenDialog.FileName := AFileName; if ((AFileName <> EmptyStr) and mbFileExists(AFileName)) or OpenDialog.Execute then try FSavedSelection.LoadFromFile(OpenDialog.FileName); RestoreSelection; except on E: Exception do msgError(rsMsgErrEOpen + '-' + E.Message); end; end; end; procedure TFileView.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode; ASaveHistory:boolean); var HistoryNode, EntryNode, FSNode, PathsNode, PathNode: TXmlNode; SortingsNode, SortingSubNode: TXmlNode; i, j: Integer; PathIndex: Integer; ASorting: TFileSortings; begin //-- remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed FHistory.SetFilenameForCurrentPath(GetActiveFileName()); AConfig.ClearNode(ANode); // Sorting. ASorting := Sorting; if Length(ASorting) > 0 then begin SortingsNode := AConfig.FindNode(ANode, 'Sortings', True); for i := Low(ASorting) to High(ASorting) do begin SortingSubNode := AConfig.AddNode(SortingsNode, 'Sorting'); AConfig.AddValue(SortingSubNode, 'Direction', Integer(ASorting[i].SortDirection)); for j := Low(ASorting[i].SortFunctions) to High(ASorting[i].SortFunctions) do AConfig.AddValue(SortingSubNode, 'Function', Integer(ASorting[i].SortFunctions[j])); end; end; // History. HistoryNode := AConfig.FindNode(ANode, 'History', True); AConfig.ClearNode(HistoryNode); for i := 0 to FileSourcesCount - 1 do begin // Currently saves only FileSystem. if FHistory.FileSource[i].IsClass(TFileSystemFileSource) then begin EntryNode := AConfig.AddNode(HistoryNode, 'Entry'); if FHistory.CurrentFileSourceIndex = i then AConfig.SetAttr(EntryNode, 'Active', True); FSNode := AConfig.AddNode(EntryNode, 'FileSource'); if TFileSystemFileSource.ClassNameIs(FHistory.FileSource[i].ClassName) then AConfig.SetAttr(FSNode, 'Type', 'FileSystem') else begin AConfig.SetAttr(FSNode, 'Type', FHistory.FileSource[i].ClassName); end; // Save paths history. PathsNode := AConfig.AddNode(EntryNode, 'Paths'); if ASaveHistory then begin for j := 0 to FHistory.PathsCount[i] - 1 do begin PathNode := AConfig.AddNode(PathsNode, 'Path'); // Mark path as active (don't need to if it is the last one). if (FHistory.CurrentFileSourceIndex = i) and (FHistory.CurrentPathIndex = j) and (j < FHistory.PathsCount[i] - 1) then begin AConfig.SetAttr(PathNode, 'Active', True); end; //-- set path AConfig.SetContent(PathNode, FHistory.Path[i, j]); //-- set selected filename AConfig.SetAttr(PathNode, 'Filename', FHistory.Filename[i, j]); end; end else begin if FHistory.CurrentFileSourceIndex = i then PathIndex := FHistory.CurrentPathIndex else PathIndex := FHistory.PathsCount[i] - 1; AConfig.AddValue(PathsNode, 'Path', FHistory.Path[i, PathIndex]); end; end; end; end; procedure TFileView.UpdateView; var bLoadingFilelist: Boolean; begin bLoadingFilelist := GetCurrentWorkType = fvwtCreate; StopWorkers; DoUpdateView; if bLoadingFilelist then MakeFileSourceFileList else begin // Always recreate file list because things like ignore list might have changed. if Assigned(FAllDisplayFiles) then Request([fvrqMakeDisplayFileList]); end; EnableWatcher(IsFileSystemWatcher); UpdateTitle; end; function TFileView.BeforeChangePath(NewFileSource: IFileSource; NewPath: String): Boolean; begin if NewPath <> '' then begin if Assigned(OnBeforeChangePath) then if not OnBeforeChangePath(Self, NewFileSource, NewPath) then Exit(False); if Assigned(NewFileSource) and not NewFileSource.SetCurrentWorkingDirectory(NewPath) then begin msgError(Format(rsMsgChDirFailed, [NewPath])); Exit(False); end; Result := True; end else Result := False; end; procedure TFileView.AfterChangePath; begin LastActiveFile := ''; RequestedActiveFile := ''; FReloadNeeded := False; FReloadTimer.Enabled := False; FLoadFilesStartTime := 0; FLoadFilesFinishTime := 0; FLoadFilesNoDelayCount := 0; if Assigned(OnAfterChangePath) then OnAfterChangePath(Self); UpdateTitle; MakeFileSourceFileList; end; procedure TFileView.ChangePathToParent(AllowChangingFileSource: Boolean); var PreviousSubDirectory, sUpLevel: String; begin // Check if this is root level of the current file source. if FileSource.IsPathAtRoot(CurrentPath) then begin // If there is a higher level file source then change to it. if (FileSourcesCount > 1) and AllowChangingFileSource then begin RemoveCurrentFileSource; end; end else begin PreviousSubDirectory := ExtractFileName(ExcludeTrailingPathDelimiter(CurrentPath)); sUpLevel:= FileSource.GetParentDir(CurrentPath); if sUpLevel <> EmptyStr then begin CurrentPath := sUpLevel; SetActiveFile(PreviousSubDirectory); end; end; end; procedure TFileView.ChangePathToChild(const aFile: TFile); begin if Assigned(aFile) and aFile.IsNameValid and (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // Workaround for Search Result File Source if FileSource is TSearchResultFileSource then SetFileSystemPath(Self, aFile.FullPath) else CurrentPath := CurrentPath + IncludeTrailingPathDelimiter(aFile.Name); end; end; procedure TFileView.ExecuteCommand(CommandName: String; const Params: array of String); begin FMethods.ExecuteCommand(CommandName, Params); end; procedure TFileView.AddFileSource(aFileSource: IFileSource; aPath: String); var IsNewFileSource: Boolean; begin IsNewFileSource := not aFileSource.Equals(FileSource); if BeforeChangePath(aFileSource, aPath) then begin FFlatView := False; if Assigned(FileSource) and IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Add(aFileSource, aPath); AfterChangePath; if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; EnableWatcher(True); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.RemoveCurrentFileSource; var NewFileSource: IFileSource = nil; NewPath: String = ''; IsNewFileSource: Boolean; PrevIndex: Integer; FocusedFile: String; begin if FileSourcesCount > 0 then begin FFlatView := False; // TODO: Do this by remembering focused file name in a list? FocusedFile := ExtractFileName(FileSource.CurrentAddress); PrevIndex := FHistory.CurrentFileSourceIndex - 1; if PrevIndex < 0 then begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Clear; AfterChangePath; end else begin NewFileSource := FHistory.FileSource[PrevIndex]; NewPath := FHistory.Path[PrevIndex, FHistory.PathsCount[PrevIndex] - 1]; if BeforeChangePath(NewFileSource, NewPath) then begin IsNewFileSource := not NewFileSource.Equals(FileSource); if IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.DeleteFromCurrentFileSource; AfterChangePath; if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; EnableWatcher(True); SetActiveFile(FocusedFile); {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; end; end; procedure TFileView.RemoveAllFileSources; begin if FileSourcesCount > 0 then begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Clear; if not (csDestroying in ComponentState) then AfterChangePath; {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.AssignFileSources(const otherFileView: TFileView); begin FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.Assign(otherFileView.FHistory); UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); AfterChangePath; EnableWatcher(True); end; function TFileView.GetCurrentFileSource: IFileSource; begin Result := FHistory.CurrentFileSource; end; function TFileView.GetCurrentFileSourceIndex: Integer; begin Result := FHistory.CurrentFileSourceIndex; end; function TFileView.GetCurrentPathIndex: Integer; begin Result := FHistory.CurrentPathIndex; end; function TFileView.GetFileSource(Index: Integer): IFileSource; begin Result := FHistory.FileSource[Index]; end; function TFileView.GetFileSourcesCount: Integer; begin Result := FHistory.Count; end; function TFileView.GetFiltered: Boolean; begin Result := Self.FileFilter <> EmptyStr; end; function TFileView.GetPath(FileSourceIndex, PathIndex: Integer): String; begin with FHistory do begin if (Count > 0) and (PathIndex >= 0) and (PathIndex < PathsCount[FileSourceIndex]) then Result := Path[FileSourceIndex, PathIndex] else Result := EmptyStr; end; end; function TFileView.GetPathsCount(FileSourceIndex: Integer): Integer; begin with FHistory do begin if Count > 0 then Result := PathsCount[FileSourceIndex] else Result := 0; end; end; function TFileView.GetSortingProperties: TFilePropertiesTypes; var I, J: Integer; begin Result:= []; // Retrieve RetrievableFileProperties which used in sorting for I:= Low(FSortings) to High(FSortings) do begin for J:= Low(FSortings[I].SortFunctions) to High(FSortings[I].SortFunctions) do begin Result:= Result + TFileFunctionToProperty[FSortings[I].SortFunctions[J]]; end; end; Result:= (Result - FileSource.SupportedFileProperties) * FileSource.RetrievableFileProperties; end; function TFileView.GetSortingForSorter: TFileSortings; begin Result := CloneAndAddSortByNameIfNeeded(Sorting); end; function TFileView.GetWatcherActive: Boolean; begin Result := FWatchPath <> EmptyStr; end; procedure TFileView.HandleNotifications; begin BeginUpdate; try while FNotifications <> [] do begin if fvnFileSourceFileListLoaded in FNotifications then begin FNotifications := FNotifications - [fvnFileSourceFileListLoaded]; FileSourceFileListLoaded; DoOnFileListChanged; end else if fvnFileSourceFileListUpdated in FNotifications then begin FNotifications := FNotifications - [fvnFileSourceFileListUpdated]; FileSourceFileListUpdated; DoOnFileListChanged; end else if fvnDisplayFileListChanged in FNotifications then begin FNotifications := FNotifications - [fvnDisplayFileListChanged]; DisplayFileListChanged; StartRecentlyUpdatedTimerIfNeeded; end else if fvnVisibleFilePropertiesChanged in FNotifications then begin FNotifications := FNotifications - [fvnVisibleFilePropertiesChanged]; EnsureDisplayProperties; end else if fvnSelectionChanged in FNotifications then begin FNotifications := FNotifications - [fvnSelectionChanged]; DoSelectionChanged; end; end; finally EndUpdate; end; end; procedure TFileView.HandleRequests; begin BeginUpdate; try while FRequests <> [] do begin // Order is important because of dependencies. // Remove request before acting on it, since a function called may request it again. if fvrqHashFileList in FRequests then begin FRequests := FRequests - [fvrqHashFileList]; HashFileList; end else if fvrqApplyPendingFilesChanges in FRequests then begin FRequests := FRequests - [fvrqApplyPendingFilesChanges]; ApplyPendingFilesChanges(nfpSortedPosition, ufpSortedPosition); end else if fvrqMakeDisplayFileList in FRequests then begin FRequests := FRequests - [fvrqMakeDisplayFileList]; ReDisplayFileList; end; end; finally EndUpdate; end; end; procedure TFileView.Notify(NewNotifications: TFileViewNotifications); begin FNotifications := FNotifications + NewNotifications; if FUpdateCount = 0 then HandleNotifications; end; procedure TFileView.OpenActiveFile; begin ChooseFile(GetActiveDisplayFile); end; procedure TFileView.SetFileFilter(NewFilter: String; NewFilterOptions: TQuickSearchOptions); begin // do not reload if filter has not changed if (FFileFilter = NewFilter) and (FFilterOptions = NewFilterOptions) then Exit; FFileFilter := NewFilter; FFilterOptions := NewFilterOptions; Request([fvrqMakeDisplayFileList]); end; procedure TFileView.SetFileList(var NewAllDisplayFiles: TDisplayFiles; var NewFilteredDisplayFiles: TDisplayFiles); var ARequests: TFileViewRequests; begin ClearRecentlyUpdatedFiles; FFiles.Free; FFiles := NewFilteredDisplayFiles; NewFilteredDisplayFiles := nil; FAllDisplayFiles.Free; FAllDisplayFiles := NewAllDisplayFiles; NewAllDisplayFiles := nil; FLastLoadedFileSource := FileSource; FLastLoadedPath := CurrentPath; BeginUpdate; try ARequests := [fvrqHashFileList]; if not FReloadNeeded then Include(ARequests, fvrqApplyPendingFilesChanges) else ClearPendingFilesChanges; Request(ARequests); Notify([fvnFileSourceFileListLoaded, fvnDisplayFileListChanged]); finally EndUpdate; end; // We have just reloaded file list, so the requested file should be there. // Regardless if it is there or not it should be cleared so that it doesn't // get selected on further reloads. RequestedActiveFile := ''; end; procedure TFileView.EnableWatcher(Enable: Boolean); var WatchFilter: TFSWatchFilter; begin if Enable then begin if ([fvfDelayLoadingFiles, fvfDontWatch] * Flags = []) and Assigned(FileSource) and FileSource.IsClass(TFileSystemFileSource) and (FWatchPath <> CurrentPath) then begin if WatcherActive then EnableWatcher(False); // If current path is in exclude list then exit. if (watch_exclude_dirs in gWatchDirs) and (gWatchDirsExclude <> '') then begin if IsInPathList(gWatchDirsExclude, CurrentPath) then Exit; end; WatchFilter := []; if watch_file_name_change in gWatchDirs then Include(WatchFilter, wfFileNameChange); if watch_attributes_change in gWatchDirs then Include(WatchFilter, wfAttributesChange); if WatchFilter <> [] then begin FWatchPath := CurrentPath; if TFileSystemWatcher.AddWatch(FWatchPath, WatchFilter, @WatcherEvent) = False then FWatchPath := EmptyStr; end; end; end else begin TFileSystemWatcher.RemoveWatch(FWatchPath, @WatcherEvent); FWatchPath := EmptyStr; end; end; procedure TFileView.ActivateEvent(Sender: TObject); begin SetFlags(Flags - [fvfDelayLoadingFiles]); ReloadIfNeeded; end; function TFileView.CheckIfDelayReload: Boolean; begin Result := ((watch_only_foreground in gWatchDirs) and (not Application.Active)) or (not IsVisibleToUser); end; procedure TFileView.DoReload; begin FReloadNeeded := False; MakeFileSourceFileList; end; procedure TFileView.HandleFSWatcherEvent(const EventData: TFSWatcherEventData; NewFilesPosition: TNewFilesPosition; UpdatedFilesPosition: TUpdatedFilesPosition); begin case EventData.EventType of fswFileCreated: Self.AddFile(EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); fswFileChanged: Self.UpdateFile(EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); fswFileDeleted: Self.RemoveFile(EventData.FileName); fswFileRenamed: Self.RenameFile(EventData.NewFileName, EventData.FileName, EventData.Path, NewFilesPosition, UpdatedFilesPosition); else Reload(EventData.Path); end; end; procedure TFileView.HandleKeyDownWhenLoading(var Key: Word; Shift: TShiftState); begin // Only allow some keys and always zero Key (handled). DoHandleKeyDownWhenLoading(Key, Shift); Key := 0; end; procedure TFileView.ReloadEvent(const aFileSource: IFileSource; const ReloadedPaths: TPathsArray); var NoWatcher: Boolean; begin if aFileSource.Equals(FileSource) then begin // Reload file view but only if the file source is // currently viewed and FileSystemWatcher is not being used. NoWatcher:= not (WatcherActive and TFileSystemWatcher.CanWatch(ReloadedPaths) and TFileSystemFileSource.ClassNameIs(FileSource.ClassName) ); if (NoWatcher or FlatView) then Reload(ReloadedPaths); end; end; procedure TFileView.ReloadTimerEvent(Sender: TObject); begin FReloadTimer.Enabled := False; DoReload; end; procedure TFileView.WatcherEvent(const EventData: TFSWatcherEventData); var CurrentTime: TDateTime; AddToPending: Boolean; begin if not (csDestroying in ComponentState) and not FReloadNeeded and (IncludeTrailingPathDelimiter(EventData.Path) = CurrentPath) then begin if GetCurrentWorkType = fvwtCreate then begin // If some unknown change then we can only reload the whole file list. if EventData.EventType <> fswUnknownChange then AddEventToPendingFilesChanges(EventData) else Reload(EventData.Path); end else begin if FileListLoaded then begin AddToPending := Assigned(FPendingFilesTimer) and FPendingFilesTimer.Enabled; if not AddToPending then begin CurrentTime := SysUtils.Now; if DateTimeToTimeStamp(CurrentTime - FWatcherEventLastTime).Time > UpdateFilelistInterval then FWatcherEventsApplied := 0; FWatcherEventLastTime := CurrentTime; if FWatcherEventsApplied < 5 then begin Inc(FWatcherEventsApplied); HandleFSWatcherEvent(EventData, gNewFilesPosition, gUpdatedFilesPosition); end else AddToPending := True; end; if AddToPending then begin AddEventToPendingFilesChanges(EventData); StartUpdatePendingTimer; end; end // else filelist not loaded and not even started loading - discard the event end; end; end; procedure TFileView.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin Message.Result := 1; end; procedure TFileView.GoToHistoryIndex(aFileSourceIndex, aPathIndex: Integer); var IsNewFileSource: Boolean; FilenameFromHistory: String; begin //-- before changing path, remember currently active filename // TODO: move this call to some generic place that is called // ALWAYS when currently selected file is changed FHistory.SetFilenameForCurrentPath(GetActiveFileName()); IsNewFileSource := not FHistory.FileSource[aFileSourceIndex].Equals(FHistory.CurrentFileSource); if BeforeChangePath(FHistory.FileSource[aFileSourceIndex], FHistory.Path[aFileSourceIndex, aPathIndex]) then begin FilenameFromHistory := FHistory.Filename[aFileSourceIndex, aPathIndex]; if Assigned(FileSource) and IsNewFileSource then FileSource.RemoveReloadEventListener(@ReloadEvent); EnableWatcher(False); FHistory.SetIndexes(aFileSourceIndex, aPathIndex); if Assigned(FileSource) and IsNewFileSource then begin UpdatePath(True); FileSource.AddReloadEventListener(@ReloadEvent); end; AfterChangePath; EnableWatcher(True); if FilenameFromHistory <> '' then SetActiveFile(FilenameFromHistory) {$IFDEF DEBUG_HISTORY} FHistory.DebugShow; {$ENDIF} end; end; procedure TFileView.GoToPrevHistory; var aFileSourceIndex, aPathIndex: Integer; begin if FHistory.CurrentPathIndex > 0 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex; aPathIndex := FHistory.CurrentPathIndex - 1; end else if FHistory.CurrentFileSourceIndex > 0 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex - 1; aPathIndex := FHistory.PathsCount[aFileSourceIndex] - 1; end else Exit; GoToHistoryIndex(aFileSourceIndex, aPathIndex); end; procedure TFileView.GoToNextHistory; var aFileSourceIndex, aPathIndex: Integer; begin if FHistory.CurrentFileSourceIndex >= 0 then begin if FHistory.CurrentPathIndex < FHistory.PathsCount[FHistory.CurrentFileSourceIndex] - 1 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex; aPathIndex := FHistory.CurrentPathIndex + 1; end else if FHistory.CurrentFileSourceIndex < FHistory.Count - 1 then begin aFileSourceIndex := FHistory.CurrentFileSourceIndex + 1; aPathIndex := 0; end else Exit; GoToHistoryIndex(aFileSourceIndex, aPathIndex); end; end; procedure TFileView.ReDisplayFileList; begin case GetCurrentWorkType of fvwtNone: ; // Ok to continue. fvwtCreate: // File list is being loaded from file source - cannot display yet. Exit; fvwtUpdate: StopWorkers; else Exit; end; // Redisplaying file list is done in the main thread because it takes // relatively short time, so the user usually won't notice it and it is // a bit faster this way. TFileListBuilder.MakeDisplayFileList( FAllDisplayFiles, FFiles, FileFilter, FFilterOptions); Notify([fvnDisplayFileListChanged]); end; procedure TFileView.WorkerStarting(const Worker: TFileViewWorker); begin if (Worker.WorkType = fvwtCreate) and not Worker.Aborted then begin FLoadFilesStartTime := SysUtils.Now; end; end; procedure TFileView.WorkerFinished(const Worker: TFileViewWorker); var Interval: Integer; begin if (Worker.WorkType = fvwtCreate) and not Worker.Aborted then begin FLoadFilesFinishTime := SysUtils.Now; // Schedule another reload if needed. if FReloadNeeded and not CheckIfDelayReload then begin // Delay by half the time taken by previous loading. Interval := DateTimeToTimeStamp(SysUtils.Now - FLoadFilesStartTime).Time div 2; if Interval < MinimumReloadInterval then Interval := MinimumReloadInterval; FReloadTimer.Interval := Interval; FReloadTimer.Enabled := True; end; SetLoadingFileListLongTime(False); end; if (Worker is TCalculateSpaceWorker) and (Worker.Aborted = False) then begin if TCalculateSpaceWorker(Worker).CompletedCalculations > 1 then begin SortAllDisplayFiles; ReDisplayFileList; end; end; end; { TDropParams } constructor TDropParams.Create( var aFiles: TFiles; aDropEffect: TDropEffect; aScreenDropPoint: TPoint; aDropIntoDirectories: Boolean; aSourcePanel: TFileView; aTargetPanel: TFileView; aTargetFileSource: IFileSource; aTargetPath: String); begin Files := aFiles; aFiles := nil; DropEffect := aDropEffect; ScreenDropPoint := aScreenDropPoint; DropIntoDirectories := aDropIntoDirectories; SourcePanel := aSourcePanel; TargetPanel := aTargetPanel; TargetFileSource := aTargetFileSource; TargetPath := aTargetPath; end; destructor TDropParams.Destroy; begin inherited Destroy; FreeAndNil(Files); end; function TDropParams.GetDragDropType: TDragDropType; begin if Assigned(SourcePanel) then Result := ddtInternal else Result := ddtExternal; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fileviews/ufileviewwithgrid.pas�������������������������������������������������0000644�0001750�0000144�00000061230�12662424243�021556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFileViewWithGrid; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, Grids, Graphics, StdCtrls, uDisplayFile, DCXmlConfig, uFileSorting, uFileProperty, uFileViewWithMainCtrl, uFile, uFileViewHeader, uFileView, uFileSource; type TFileViewWithGrid = class; { TFileViewGrid } TFileViewGrid = class(TDrawGrid) protected FFileView: TFileViewWithGrid; protected procedure RowHeightsChanged; override; procedure ColWidthsChanged; override; procedure FinalizeWnd; override; procedure InitializeWnd; override; function MouseOnGrid(X, Y: LongInt): Boolean; procedure DoOnResize; override; procedure KeyDown(var Key : Word; Shift : TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift:TShiftState; X,Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure TopLeftChanged; override; function GetBorderWidth: Integer; protected procedure SetColRowCount(Count: Integer); procedure DrawLines(aIdx, aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure PrepareColors(aFile: TDisplayFile; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure UpdateView; virtual; abstract; procedure CalculateColRowCount; virtual; abstract; procedure CalculateColumnWidth; virtual; abstract; function CellToIndex(ACol, ARow: Integer): Integer; virtual; abstract; procedure IndexToCell(Index: Integer; out ACol, ARow: Integer); virtual; abstract; public constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; virtual; property BorderWidth: Integer read GetBorderWidth; end; { TFileViewGridClass } TFileViewGridClass = class of TFileViewGrid; { TFileViewWithGrid } TFileViewWithGrid = class (TFileViewWithMainCtrl) protected TabHeader: TFileViewFixedHeader; dgPanel: TFileViewGrid; lblDetails: TLabel; private procedure SetFilesDisplayItems; procedure UpdateFooterDetails; procedure dgPanelSelection(Sender: TObject; aCol, aRow: Integer); protected procedure MakeColumnsStrings(AFile: TDisplayFile); function GetFileViewGridClass: TFileViewGridClass; virtual; abstract; protected procedure CreateDefault(AOwner: TWinControl); override; procedure BeforeMakeFileList; override; procedure ClearAfterDragDrop; override; procedure AfterChangePath; override; procedure DisplayFileListChanged; override; procedure DoOnResize; override; procedure FileSourceFileListLoaded; override; function GetActiveFileIndex: PtrInt; override; function GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; override; function GetFileRect(FileIndex: PtrInt): TRect; override; procedure RedrawFile(FileIndex: PtrInt); override; procedure RedrawFile(DisplayFile: TDisplayFile); override; procedure RedrawFiles; override; procedure SetActiveFile(FileIndex: PtrInt); override; procedure DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes = []); override; procedure DoHandleKeyDown(var Key: Word; Shift: TShiftState); override; procedure UpdateFlatFileName; override; procedure UpdateInfoPanel; override; procedure DoUpdateView; override; procedure SetSorting(const NewSortings: TFileSortings); override; public constructor Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); override; constructor Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags = []); override; destructor Destroy; override; procedure CloneTo(FileView: TFileView); override; procedure AddFileSource(aFileSource: IFileSource; aPath: String); override; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); override; end; function FitFileName(const AFileName: String; ACanvas: TCanvas; AFile: TFile; ATargetWidth: Integer): String; function FitOtherCellText(const sStringToFit:String; ACanvas:TCanvas; ATargetWidth: Integer): String; implementation uses LCLIntf, LCLType, LCLVersion, LCLProc, math, DCStrUtils, uGlobs, uPixmapManager, uKeyboard, uDCUtils, fMain, uFileFunctions; function FitFileName(const AFileName: String; ACanvas: TCanvas; AFile: TFile; ATargetWidth: Integer): String; var S: String; Index: Integer; AMaxWidth: Integer; begin Index:= UTF8Length(AFileName); AMaxWidth:= ACanvas.TextFitInfo(AFileName, ATargetWidth); if Index <= AMaxWidth then Result:= AFileName else begin if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then S:= '..]' else begin S:= '...'; end; Index:= ACanvas.TextFitInfo(AFileName, ATargetWidth - ACanvas.TextWidth(S)); Result:= UTF8Copy(AFileName, 1, Index) + S; end; end; { FitOtherCellText } function FitOtherCellText(const sStringToFit:String; ACanvas:TCanvas; ATargetWidth: Integer): String; const ELLIPSIS = '...'; var Index: Integer; AMaxWidth: Integer; begin Index:= UTF8Length(sStringToFit); AMaxWidth:= ACanvas.TextFitInfo(sStringToFit, ATargetWidth); if Index <= AMaxWidth then Result:= sStringToFit else begin Index:= ACanvas.TextFitInfo(sStringToFit, ATargetWidth - ACanvas.TextWidth(ELLIPSIS)); Result:= UTF8Copy(sStringToFit, 1, Index) + ELLIPSIS; end; end; { TFileViewGrid } procedure TFileViewGrid.InitializeWnd; begin inherited InitializeWnd; FFileView.InitializeDragDropEx(Self); end; procedure TFileViewGrid.DoOnResize; begin inherited DoOnResize; CalculateColRowCount; CalculateColumnWidth; end; procedure TFileViewGrid.KeyDown(var Key: Word; Shift: TShiftState); begin {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then begin if ((Row = RowCount-1) and (Key = VK_DOWN)) or ((Row = FixedRows) and (Key = VK_UP)) then Key := 0; end; {$ENDIF} inherited KeyDown(Key, Shift); end; procedure TFileViewGrid.RowHeightsChanged; begin inherited RowHeightsChanged; CalculateColRowCount; end; procedure TFileViewGrid.ColWidthsChanged; begin inherited ColWidthsChanged; CalculateColRowCount; end; function TFileViewGrid.MouseOnGrid(X, Y: LongInt): Boolean; var bTemp: Boolean; iRow, iCol: LongInt; begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= not (CellToIndex(iCol, iRow) < 0); end; procedure TFileViewGrid.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if FFileView.IsLoadingFileList then Exit; {$IF DECLARED(lcl_fullversion) and (lcl_fullversion >= 093100)} // Don't scroll partially visible cells on mouse click Options:= Options + [goDontScrollPartCell]; {$ENDIF} {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseDown event is sent just before doubleclick, so if we drop // doubleclick events we have to also drop MouseDown events that precede them. if FFileView.TooManyDoubleClicks then Exit; {$ENDIF} FFileView.FMainControlMouseDown := True; if MouseOnGrid(X, Y) then inherited MouseDown(Button, Shift, X, Y) else begin if Assigned(OnMouseDown) then OnMouseDown(Self, Button, Shift, X, Y); end; end; procedure TFileViewGrid.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var BackgroundClick: Boolean; Point: TPoint; begin if FFileView.IsLoadingFileList then Exit; {$IF DECLARED(lcl_fullversion) and (lcl_fullversion >= 093100)} // Don't scroll partially visible cells on mouse click Options:= Options - [goDontScrollPartCell]; {$ENDIF} {$IFDEF LCLGTK2} // Workaround for two doubleclicks being sent on GTK. // MouseUp event is sent just after doubleclick, so if we drop // doubleclick events we have to also drop MouseUp events that follow them. if FFileView.TooManyDoubleClicks then Exit; {$ENDIF} // Handle only if button-up was not lifted to finish drag&drop operation. if not FFileView.FMainControlMouseDown then Exit; inherited MouseUp(Button, Shift, X, Y); FFileView.FMainControlMouseDown := False; if Button = mbRight then begin { If right click on file/directory } if ((gMouseSelectionButton <> 1) or not gMouseSelectionEnabled) then begin BackgroundClick:= not MouseOnGrid(X, Y); Point := ClientToScreen(Classes.Point(X, Y)); frmMain.Commands.DoContextMenu(FFileView, Point.x, Point.y, BackgroundClick); end else if (gMouseSelectionEnabled and (gMouseSelectionButton = 1)) then begin FFileView.tmContextMenu.Enabled:= False; // stop context menu timer end; end { Open folder in new tab on middle click } else if (Button = mbMiddle) then begin frmMain.Commands.cm_OpenDirInNewTab([]); end; end; procedure TFileViewGrid.TopLeftChanged; begin inherited TopLeftChanged; FFileView.Notify([fvnVisibleFilePropertiesChanged]); end; function TFileViewGrid.GetBorderWidth: Integer; begin if Flat and (BorderStyle = bsSingle) then Result := 1 else Result := 0; end; procedure TFileViewGrid.SetColRowCount(Count: Integer); var aCol, aRow: Integer; begin if CellToIndex(Col, Row) < 0 then begin FFileView.FUpdatingActiveFile := True; IndexToCell(Count - 1, ACol, ARow); MoveExtend(False, aCol, aRow); FFileView.FUpdatingActiveFile := False; end; end; procedure TFileViewGrid.DrawLines(aIdx, aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); begin // Draw frame cursor. if gUseFrameCursor and (gdSelected in aState) and FFileView.Active then begin Canvas.Pen.Color := gCursorColor; Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; // Draw drop selection. if (FFileView.FDropFileIndex >= 0) and (aIdx = FFileView.FDropFileIndex) then begin Canvas.Pen.Color := gForeColor; Canvas.Line(aRect.Left, aRect.Top, aRect.Right, aRect.Top); Canvas.Line(aRect.Left, aRect.Bottom - 1, aRect.Right, aRect.Bottom - 1); end; end; procedure TFileViewGrid.PrepareColors(aFile: TDisplayFile; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var TextColor: TColor = clDefault; BackgroundColor: TColor; IsCursor: Boolean; IsCursorInactive: Boolean; begin Canvas.Font.Name := gFonts[dcfMain].Name; Canvas.Font.Size := gFonts[dcfMain].Size; Canvas.Font.Style := gFonts[dcfMain].Style; IsCursor := (gdSelected in aState) and FFileView.Active and (not gUseFrameCursor); IsCursorInactive := (gdSelected in aState) and (not FFileView.Active) and (not gUseFrameCursor); // Set up default background color first. if IsCursor then BackgroundColor := gCursorColor else begin if IsCursorInactive AND gUseInactiveSelColor then BackgroundColor := gInactiveCursorColor else // Alternate rows background color. if odd(ARow) then BackgroundColor := gBackColor else BackgroundColor := gBackColor2; end; // Set text color. TextColor := AFile.TextColor; if (TextColor = clDefault) or (TextColor = clNone) then TextColor := gForeColor; if AFile.Selected then begin if gUseInvertedSelection then begin //------------------------------------------------------ if IsCursor OR (IsCursorInactive AND gUseInactiveSelColor) then begin TextColor := InvertColor(gCursorText); end else begin if FFileView.Active OR (not gUseInactiveSelColor) then BackgroundColor := gMarkColor else BackgroundColor := gInactiveMarkColor; TextColor := TextColor; end; //------------------------------------------------------ end else begin if FFileView.Active OR (not gUseInactiveSelColor) then TextColor := gMarkColor else TextColor := gInactiveMarkColor; end; end else if IsCursor then begin TextColor := gCursorText; end; BackgroundColor := FFileView.DimColor(BackgroundColor); if AFile.RecentlyUpdatedPct <> 0 then begin TextColor := LightColor(TextColor, AFile.RecentlyUpdatedPct); BackgroundColor := LightColor(BackgroundColor, AFile.RecentlyUpdatedPct); end; // Draw background. Canvas.Brush.Color := BackgroundColor; Canvas.FillRect(aRect); Canvas.Font.Color := TextColor; end; constructor TFileViewGrid.Create(AOwner: TComponent; AParent: TWinControl); begin FFileView := AParent as TFileViewWithGrid; inherited Create(AOwner); // Workaround for Lazarus issue 18832. // Set Fixed... before setting ...Count. FixedRows := 0; FixedCols := 0; // Override default values to start with one column and one rows. RowCount := 1; ColCount := 1; DefaultColWidth := 200; BorderStyle := bsNone; // Border no need as grid inside pagectl Self.Parent := AParent; DoubleBuffered := True; Align := alClient; MouseWheelOption:= mwGrid; Options := [goTabs, goThumbTracking, goSmoothScroll]; TabStop := False; UpdateView; end; procedure TFileViewGrid.FinalizeWnd; begin FFileView.FinalizeDragDropEx(Self); inherited FinalizeWnd; end; { TFileViewWithGrid } procedure TFileViewWithGrid.RedrawFile(DisplayFile: TDisplayFile); var ACol, ARow: Integer; begin dgPanel.IndexToCell(PtrInt(DisplayFile.DisplayItem), ACol, ARow); dgPanel.InvalidateCell(ACol, ARow); end; procedure TFileViewWithGrid.RedrawFiles; begin dgPanel.Invalidate; end; procedure TFileViewWithGrid.MakeColumnsStrings(AFile: TDisplayFile); begin AFile.DisplayStrings.Text:= FormatFileFunction('DC().GETFILENAME{}', AFile.FSFile, FileSource); end; procedure TFileViewWithGrid.RedrawFile(FileIndex: PtrInt); var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); dgPanel.InvalidateCell(ACol, ARow); end; procedure TFileViewWithGrid.DisplayFileListChanged; begin // Update grid col and row count dgPanel.SetColRowCount(FFiles.Count); dgPanel.CalculateColRowCount; dgPanel.CalculateColumnWidth; SetFilesDisplayItems; if SetActiveFileNow(RequestedActiveFile) then RequestedActiveFile := '' else // Requested file was not found, restore position to last active file. SetActiveFileNow(LastActiveFile); Notify([fvnVisibleFilePropertiesChanged]); inherited DisplayFileListChanged; end; procedure TFileViewWithGrid.CreateDefault(AOwner: TWinControl); begin inherited CreateDefault(AOwner); dgPanel:= GetFileViewGridClass.Create(Self, Self); MainControl := dgPanel; TabHeader:= TFileViewFixedHeader.Create(Self, Self); TabHeader.Top:= pnlHeader.Height; lblDetails:= TLabel.Create(pnlFooter); lblDetails.Align:= alRight; lblDetails.Alignment:= taRightJustify; lblDetails.Parent:= pnlFooter; dgPanel.OnSelection:= @dgPanelSelection; // By default always use some properties. FilePropertiesNeeded := [fpName, fpSize, // For info panel (total size, selected size) fpAttributes, // For distinguishing directories fpLink, // For distinguishing directories (link to dir) and link icons fpModificationTime // For selecting/coloring files (by SearchTemplate) ]; end; procedure TFileViewWithGrid.BeforeMakeFileList; begin inherited BeforeMakeFileList; end; procedure TFileViewWithGrid.FileSourceFileListLoaded; begin inherited; FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; dgPanel.CalculateColRowCount; dgPanel.CalculateColumnWidth; end; procedure TFileViewWithGrid.ClearAfterDragDrop; begin inherited ClearAfterDragDrop; // reset TCustomGrid state dgPanel.FGridState := gsNormal; end; procedure TFileViewWithGrid.AfterChangePath; begin inherited AfterChangePath; if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; end; end; function TFileViewWithGrid.GetActiveFileIndex: PtrInt; begin Result := dgPanel.CellToIndex(dgPanel.Col, dgPanel.Row); end; function TFileViewWithGrid.GetFileIndexFromCursor(X, Y: Integer; out AtFileList: Boolean): PtrInt; var bTemp: Boolean; iRow, iCol: LongInt; begin with dgPanel do begin bTemp:= AllowOutboundEvents; AllowOutboundEvents:= False; MouseToCell(X, Y, iCol, iRow); AllowOutboundEvents:= bTemp; Result:= CellToIndex(iCol, iRow); AtFileList := True; // Always at file list because header in dgPanel not used end; end; function TFileViewWithGrid.GetFileRect(FileIndex: PtrInt): TRect; var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); Result := dgPanel.CellRect(ACol, ARow); end; procedure TFileViewWithGrid.DoOnResize; var I: Integer; AWidth: Integer; begin inherited DoOnResize; if Assigned(TabHeader) then begin AWidth:= Width div TabHeader.Sections.Count; for I:= 0 to TabHeader.Sections.Count - 1 do TabHeader.Sections[I].Width:= AWidth; end; UpdateFooterDetails; Notify([fvnVisibleFilePropertiesChanged]); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AConfig: TXmlConfig; ANode: TXmlNode; AFlags: TFileViewFlags = []); begin inherited Create(AOwner, AConfig, ANode, AFlags); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AFileView: TFileView; AFlags: TFileViewFlags); var I: Integer; begin inherited Create(AOwner, AFileView, AFlags); if (not (AFileView is TFileViewWithGrid)) and Assigned(FAllDisplayFiles) then begin // Update display strings in case FileView type have changed. for I := 0 to FAllDisplayFiles.Count - 1 do MakeColumnsStrings(FAllDisplayFiles[I]); end; end; destructor TFileViewWithGrid.Destroy; begin inherited Destroy; end; procedure TFileViewWithGrid.CloneTo(FileView: TFileView); begin if Assigned(FileView) then begin inherited CloneTo(FileView); if FileView is TFileViewWithGrid then with FileView as TFileViewWithGrid do begin TabHeader.UpdateSorting(Self.Sorting); end; end; end; procedure TFileViewWithGrid.AddFileSource(aFileSource: IFileSource; aPath: String); begin inherited AddFileSource(aFileSource, aPath); if not IsLoadingFileList then begin FUpdatingActiveFile := True; dgPanel.MoveExtend(False, 0, 0); FUpdatingActiveFile := False; end; end; procedure TFileViewWithGrid.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); begin inherited LoadConfiguration(AConfig, ANode); TabHeader.UpdateSorting(Sorting); end; procedure TFileViewWithGrid.SetActiveFile(FileIndex: PtrInt); var ACol, ARow: Integer; begin dgPanel.IndexToCell(FileIndex, ACol, ARow); dgPanel.Col := ACol; dgPanel.Row := ARow; end; procedure TFileViewWithGrid.SetFilesDisplayItems; var i: Integer; begin for i := 0 to FFiles.Count - 1 do FFiles[i].DisplayItem := Pointer(i); end; procedure TFileViewWithGrid.UpdateFooterDetails; var AFile: TFile; AFileName: String; begin if (FSelectedCount > 0) then lblDetails.Caption:= EmptyStr else begin AFile:= CloneActiveFile; if Assigned(AFile) then try // Get details info about file AFileName:= #32#32 +FormatFileFunction('DC().GETFILEEXT{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILESIZE{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILETIME{}', AFile, FileSource); AFileName:= AFileName + #32#32 + FormatFileFunction('DC().GETFILEATTR{}', AFile, FileSource); lblDetails.Caption:= AFileName; // Get file name if not FlatView then begin AFileName:= FormatFileFunction('DC().GETFILENAMENOEXT{}', AFile, FileSource); lblInfo.Caption:= FitFileName(AFileName, lblInfo.Canvas, AFile, lblInfo.ClientWidth); end; finally AFile.Free; end; end; end; procedure TFileViewWithGrid.dgPanelSelection(Sender: TObject; aCol, aRow: Integer); begin DoFileIndexChanged(dgPanel.CellToIndex(aCol, aRow)); UpdateFooterDetails; end; procedure TFileViewWithGrid.UpdateInfoPanel; begin inherited UpdateInfoPanel; UpdateFooterDetails; end; procedure TFileViewWithGrid.DoUpdateView; function CalculateTabHeaderHeight: Integer; var OldFont: TFont; begin with TabHeader do begin OldFont := Canvas.Font; Canvas.Font := Font; Result := Canvas.TextHeight('Wg'); Canvas.Font := OldFont; end; end; var TabHeaderHeight: Integer; begin inherited DoUpdateView; dgPanel.FocusRectVisible := gUseCursorBorder and not gUseFrameCursor; dgPanel.FocusColor := gCursorBorderColor; dgPanel.UpdateView; TabHeader.Visible := gTabHeader; // Set rows of header. if gTabHeader then begin TabHeader.UpdateHeader; TabHeaderHeight := Max(gIconsSize, CalculateTabHeaderHeight); TabHeaderHeight := TabHeaderHeight + 2; // for borders if not gInterfaceFlat then begin TabHeaderHeight := TabHeaderHeight + 2; // additional borders if not flat end; TabHeader.Height := TabHeaderHeight; end; Notify([fvnVisibleFilePropertiesChanged]); end; procedure TFileViewWithGrid.SetSorting(const NewSortings: TFileSortings); begin inherited SetSorting(NewSortings); TabHeader.UpdateSorting(NewSortings); end; constructor TFileViewWithGrid.Create(AOwner: TWinControl; AFileSource: IFileSource; APath: String; AFlags: TFileViewFlags); begin inherited Create(AOwner, AFileSource, APath, AFlags); end; procedure TFileViewWithGrid.DoFileUpdated(AFile: TDisplayFile; UpdatedProperties: TFilePropertiesTypes); begin MakeColumnsStrings(AFile); inherited DoFileUpdated(AFile, UpdatedProperties); end; procedure TFileViewWithGrid.DoHandleKeyDown(var Key: Word; Shift: TShiftState); var Index, aCol, aRow: Integer; AFile: TDisplayFile; begin case Key of VK_INSERT: begin if not IsEmpty then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin AFile := FFiles[Index]; if IsItemValid(AFile) then begin InvertFileSelection(AFile, False); DoSelectionChanged(Index); end; dgPanel.IndexToCell(Index + 1, aCol, aRow); if not ((aCol < 0) and (aRow < 0)) then begin dgPanel.Col:= aCol; dgPanel.Row:= aRow; end; end; end; Key := 0; end; VK_SPACE: if Shift * KeyModifiersShortcut = [] then begin Index:= GetActiveFileIndex; if IsFileIndexInRange(Index) then begin AFile := FFiles[Index]; if IsItemValid(aFile) then begin if (aFile.FSFile.IsDirectory or aFile.FSFile.IsLinkToDirectory) and not aFile.Selected then begin CalculateSpace(aFile); end; InvertFileSelection(aFile, False); DoSelectionChanged(Index); if gSpaceMovesDown then begin dgPanel.IndexToCell(Index + 1, aCol, aRow); if not ((aCol < 0) and (aRow < 0)) then begin dgPanel.Col:= aCol; dgPanel.Row:= aRow; end; end; end; end; Key := 0; end; end; inherited DoHandleKeyDown(Key, Shift); end; procedure TFileViewWithGrid.UpdateFlatFileName; var AFile: TFile; AFileName: String; begin AFile:= CloneActiveFile; if Assigned(AFile) then try AFileName:= ExtractDirLevel(CurrentPath, AFile.Path) + AFile.NameNoExt; lblInfo.Caption := MinimizeFilePath(AFileName, lblInfo.Canvas, lblInfo.Width); finally AFile.Free; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fAbout.pas����������������������������������������������������������������������0000644�0001750�0000144�00000013701�12660674103�015240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Implementing of About dialog Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Copyright (C) 2006-2008 Koblov Alexander (Alexx2000@mail.ru) } unit fAbout; {$mode objfpc}{$H+} interface uses Graphics, Forms, Controls, StdCtrls, ExtCtrls, Buttons, SysUtils, Classes, LCLType; type { TfrmAbout } TfrmAbout = class(TForm) btnClose: TBitBtn; btnCopyToClipboard: TButton; imgLogo: TImage; lblWidgetsetVer: TLabel; lblPlatform: TLabel; lblOperatingSystem: TLabel; lblRevision: TLabel; lblHomePageAddress: TLabel; lblHomePage: TLabel; lblFreePascalVer: TLabel; lblTitle: TLabel; lblLazarusVer: TLabel; lblBuild: TLabel; lblVersion: TLabel; pnlText: TPanel; memInfo: TMemo; pnlInfo: TPanel; pnlLogo: TPanel; procedure btnCopyToClipboardClick(Sender: TObject); procedure lblHomePageAddressClick(Sender: TObject); procedure lblHomePageAddressMouseEnter(Sender: TObject); procedure lblHomePageAddressMouseLeave(Sender: TObject); procedure OKButtonClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure frmAboutShow(Sender: TObject); private { Private declarations } public { Public declarations } end; procedure ShowAboutBox; implementation {$R *.lfm} uses Clipbrd, dmHelpManager, uDCVersion; const cIndention = LineEnding + #32#32; cAboutMsg = 'This program is free software under GNU GPL 2 license, see COPYING.txt file.' + LineEnding + LineEnding + 'Active developers: '+ cIndention + 'Alexander Koblov (alexx2000@mail.ru) - author, core developer' + cIndention + 'Denis Bisson (denis.bisson@denisbisson.org) - developer' + LineEnding + LineEnding + 'Recent developers: ' + cIndention + 'Przemysław Nagay (cobines@gmail.com) - core developer' + cIndention + 'Dmitry Kolomiets (B4rr4cuda@rambler.ru) - developer' + cIndention + 'Radek Cervinka (radek.cervinka@centrum.cz) - author of Seksi Commander' + LineEnding + LineEnding + 'Contributors:' + cIndention + 'Tolstov Igor (attid@yandex.ru)' + cIndention + 'Anton Panferov (ast.a_s@mail.ru)' + cIndention + 'Rustem Rakhimov (dok_rust@bk.ru)' + cIndention + 'Moroz Serhiy (frost.asm@gmail.com)' + cIndention + 'Vitaly Zotov (vitalyzotov@mail.ru)' + cIndention + 'Zolotov Alex (zolotov-alex@shamangrad.net)' + cIndention + 'Peter Cernoch (pcernoch@volny.cz) - author PFM' + cIndention + 'Pavel Letko (letcuv@centrum.cz) - multirename, split, linker' + cIndention + 'Jiri Karasek (jkarasek@centrum.cz)' + cIndention + 'Vladimir Pilny (vladimir@pilny.com)' + cIndention + 'Vaclav Juza (vaclavjuza@seznam.cz)' + cIndention + 'Martin Matusu (xmat@volny.cz) - chown, chgrp' + cIndention + 'Radek Polak - some viewer fixes' + cIndention + 'Dmytro Zheludko (doublecmd@zheludko.mail.ua)' + cIndention + 'Andryei Gudyak - main icon' + cIndention + 'translators (see details in language files) ' + LineEnding + LineEnding + 'Double Commander uses icons from:' + LineEnding + '- Tango Icon Library (http://tango.freedesktop.org/Tango_Icon_Library)' + LineEnding + '- Silk icon set 1.3 by Mark James (http://www.famfamfam.com/lab/icons/silk/)' + LineEnding + '- Farm-Fresh Web Icons (http://www.fatcow.com/free-icons)' + LineEnding + '- Oxygen icon theme (http://oxygen-icons.org)' + LineEnding + LineEnding + 'Big thanks to Lazarus and Free Pascal Team!'; procedure ShowAboutBox; begin with TfrmAbout.Create(Application) do try ShowModal; finally Free; end; end; procedure TfrmAbout.OKButtonClick(Sender: TObject); begin Close; end; procedure TfrmAbout.lblHomePageAddressMouseLeave(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= []; Font.Color:= clBlue; Cursor:= crDefault; end; end; procedure TfrmAbout.lblHomePageAddressMouseEnter(Sender: TObject); begin with Sender as TLabel do begin Font.Style:= [fsUnderLine]; Font.Color:= clRed; Cursor:= crHandPoint; end; end; procedure TfrmAbout.lblHomePageAddressClick(Sender: TObject); var ErrMsg: String; begin dmHelpMgr.HTMLHelpDatabase.ShowURL('http://doublecmd.sourceforge.net','Double Commander Web Site', ErrMsg); end; procedure TfrmAbout.btnCopyToClipboardClick(Sender: TObject); var StrInfo: String; begin StrInfo := Format('Double Commander' + LineEnding + 'Version: %s' + LineEnding + 'Revision: %s' + LineEnding + 'Build date: %s' + LineEnding + 'Lazarus: %s' + LineEnding + 'FPC: %s' + LineEnding + 'Platform: %s' + LineEnding + 'OS version: %s' + LineEnding, [dcVersion, dcRevision, dcBuildDate, GetLazarusVersion, fpcVersion, TargetCPU + '-' + TargetOS + '-' + TargetWS, OSVersion]); if WSVersion <> EmptyStr then StrInfo := StrInfo + LineEnding + 'Widgetset library: ' + WSVersion; Clipboard.AsText := StrInfo; end; procedure TfrmAbout.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Key = VK_Escape) then Close; end; procedure TfrmAbout.frmAboutShow(Sender: TObject); begin memInfo.Lines.Text := cAboutMsg; memInfo.CaretPos := Classes.Point(0, 0); lblVersion.Caption := lblVersion.Caption + #32 + dcVersion; lblRevision.Caption := lblRevision.Caption + #32 + dcRevision; lblBuild.Caption := lblBuild.Caption + #32 + dcBuildDate; lblLazarusVer.Caption := lblLazarusVer.Caption + #32 + GetLazarusVersion; lblFreePascalVer.Caption := lblFreePascalVer.Caption + #32 + fpcVersion; lblPlatform.Caption := TargetCPU + '-' + TargetOS + '-' + TargetWS; lblOperatingSystem.Caption := OSVersion; lblWidgetsetVer.Caption := WSVersion; end; end. ���������������������������������������������������������������doublecmd-0.7.1/src/dmcommondata.lfm����������������������������������������������������������������0000644�0001750�0000144�00000021533�12045446211�016452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object dmComData: TdmComData OldCreateOrder = False Height = 300 HorizontalOffset = 294 VerticalOffset = 172 Width = 400 object OpenDialog: TOpenDialog FilterIndex = 0 left = 65 top = 72 end object SaveDialog: TSaveDialog FilterIndex = 0 left = 65 top = 104 end object ImageList: TImageList Height = 22 Width = 22 left = 104 top = 72 Bitmap = { 4C69020000001600000016000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001A0000001F0000000CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0000000026454947783232324C0000001C00000007FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0000000026555957F85B5F5DF8535654AE202020370000001800000004FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000026555A 57F8F7F8F7FFB0B4B2FC585B59F4494C4A87060606270000001300000001FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000026555A57F8FFFFFFFFFAFB FAFFF2F3F2FF909491F7585B5AE73B403D63000000220000000EFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0000000026555A57F8FFFFFFFFE6EAE8FFF0F2F1FFFCFC FCFFE3E6E5FF727673F6575A59CA2B2F2F460000001F0000000AFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0000000026555A57F8FFFFFFFFE6EAE8FFE6EAE8FFE7EBE9FFF3F5F4FFFCFC FCFFCFD1CFFE5E6261F6515452A5191919330000001A00000006FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0008080825555A 57F8FFFFFFFFE6EAE8FFE6EAE8FFE7EAE9FFE7EBE9FFEAEDEBFFF6F8F7FFFAFA FAFFB2B6B3FA585C59F2484C4A7E131313260D0D0D150F0F0F03FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF002A2A2A23565A58F8FFFFFFFFEAED EBFFEAEDECFFEAEEECFFEAEEECFFEAEEECFFEAEEECFFEFF1F0FFFAFBFAFFF3F4 F4FF919492F6595E5BE14A4A4A59303030213232320F33333301FFFFFF00FFFF FF00FFFFFF00FFFFFF004D4D4D21565A58F8FFFFFFFFEDF0EEFFEEF0EFFFEEF1 EFFFEEF1EFFFEEF1EFFFEDF0EEFFEAEEECFFE7EBE9FFEEF0EFFFFBFCFBFFE3E5 E4FF737775F55B5E5DC05353533354545418FFFFFF00FFFFFF00FFFFFF00FFFF FF006F6F6F1F565B58F8FFFFFFFFE7ECE9FFE8ECEAFFE8ECEAFFE8ECEAFFE6EA E8FFE6EAE8FFE6EAE8FFE5E9E7FFE4E9E7FFF3F5F4FFFCFDFDFFBFC2C0FD555A 58FA5D61614B76767617FFFFFF00FFFFFF00FFFFFF00FFFFFF009292921D565B 59F8FFFFFFFFE9ECEBFFEBEEECFFECEFEEFFEDF0EFFFEEF1EFFFEEF1EFFFEDF0 EFFFF3F5F4FFFDFDFDFFE3E4E3FF6E706FF65D625FB9707575369999990D9999 9901FFFFFF00FFFFFF00FFFFFF00FFFFFF00B3B3B31B575B59F7FFFFFFFFEDF0 EEFFEFF2F1FFF2F4F3FFF4F6F5FFF5F7F6FFF7F8F7FFFCFDFCFFF5F5F5FF9093 92F65C615FDC6D707050BABABA12BCBCBC03FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00D8D8D819575B59F7FFFFFFFFEEF1F0FFF1F4F3FFF5F6 F5FFF8F9F8FFFDFDFDFFFDFDFDFFBABBBAF95B5E5CF067696771D1D1D115DBDB DB06FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00F8F8F817575B59F7FFFFFFFFECEFEEFFEFF2F1FFF8F9F8FFFEFEFEFFD8D9 D8FD626564F665686799B8B8B821FFFFFF0AFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF17575B 59F7FFFFFFFFEEF1F0FFFBFCFCFFECEDECFF7B7D7CF6606463C18F949437FFFF FF0EFFFFFF02FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF17575B59F7FFFFFFFFF7F7 F7FF9FA1A0F65D605EE174777755FFFFFF12FFFFFF05FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF17565B59F7BDC0BFFB5D605EF3686C6A7AE9E9 E918FFFFFF09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF175E6260CC626664A2B6B6B626FFFFFF0EFFFFFF02FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF15FFFF FF17FFFFFF12FFFFFF04FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF06FFFFFF07FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000001600000026000000260000002600000026000000260000 002600000017000000000000001B000000260000002600000026000000260000 0026000000260000001500000000000000000000000000000000000000000202 0223505452D6535755FF535755FF535755FF535755FF565A58F9080808250000 000002020225525654F2535755FF535755FF535755FF535755FF5C615EEC0101 012100000000000000000000000000000000000000000C0C0C22525654F1FCFC FCFFFFFFFFFFFFFFFFFFFFFFFFFF6B6F6DFE16161626000000000C0C0C24565A 58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF626665FD0B0B0B20000000000000 000000000000000000000000000017171720525654F1FCFCFCFFDFE3E1FFDFE4 E2FFF8F9F8FF6B6F6DFE1F2020250000000017171722565A58FFFEFEFEFFDFE4 E2FFDFE4E2FFFBFBFBFF626665FD1616161F0000000000000000000000000000 0000000000002222221F525654F1FCFCFCFFDFE3E1FFDFE4E2FFF8F9F8FF6B6F 6DFE292A29240000000022222221565A58FFFEFEFEFFDFE4E2FFDFE4E2FFFBFB FBFF636665FD2222221D00000000000000000000000000000000000000002F2F 2F1D525654F1FCFCFCFFE0E4E2FFE0E4E2FFF8F9F8FF6B6F6DFE343535230000 00003030301F565A58FFFEFEFEFFE0E4E2FFE0E4E2FFFBFBFBFF636665FD2E2E 2E1C00000000000000000000000000000000000000003E3E3E1C535755F1FCFD FDFFE3E7E5FFE3E6E5FFF8F9F9FF6B6F6DFE41424221000000003E3E3E1E565A 58FFFEFEFEFFE3E7E5FFE2E6E4FFFBFCFBFF636665FD3C3C3C1B000000000000 00000000000000000000000000004D4D4D1B535755F1FDFDFDFFE7EAE8FFE6E9 E7FFF9FAFAFF6B6F6DFE4E4F4E20000000004E4E4E1C565A58FFFEFEFEFFD9DE DBFFD4DBD8FFFCFCFCFF636665FD4C4C4C190000000000000000000000000000 0000000000005F5F5F19535755F1FDFDFDFFE2E5E4FFDCE1DFFFFAFBFAFF6B6F 6DFE5D5E5D1F000000005F5F5F1B565A58FFFEFEFEFFDCE1DFFFDBE0DEFFFCFC FCFF636665FD5D5D5D1800000000000000000000000000000000000000007171 7118535755F1FDFDFDFFE3E7E6FFE1E5E3FFFBFBFBFF6B6F6DFE6C6C6C1D0000 000071717119565A58FFFEFFFFFFE2E6E5FFE0E5E3FFFCFDFCFF636665FD7171 7117000000000000000000000000000000000000000087878717535755F1FDFE FDFFE9ECEBFFE6E9E8FFFBFCFCFF6B6F6DFE7D7E7E1C0000000088888818565A 58FFFFFFFFFFE8EBEAFFE6E9E7FFFDFDFDFF636665FD86868615000000000000 00000000000000000000000000009F9F9F15535755F0FEFEFEFFEEF0EFFFE9EC EBFFFCFCFCFF6B6F6DFE9091911B00000000A0A0A017565A58FFFFFFFFFFEDEE EEFFE9ECEBFFFDFDFDFF646765FD9F9F9F140000000000000000000000000000 000000000000BABABA14535755F0FEFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF6B6F 6DFEA4A5A51900000000BDBDBD15565A58FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFF646765FDBABABA130000000000000000000000000000000000000000DBDB DB12555957D4545856FF545856FF545856FF545856FF595D5BFCCACBCA150000 0000DCDCDC14545856F2545856FF545856FF545856FF545856FF656866F4D9D9 D9110000000000000000000000000000000000000000FFFFFF0BF8F8F813F0F0 F014F0F0F014F0F0F014F0F0F014F7F7F713FFFFFF0B00000000FFFFFF0BF7F7 F713F0F0F014F0F0F014F0F0F014F0F0F014F8F8F813FFFFFF0A000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fFileOpDlg.lfm������������������������������������������������������������������0000644�0001750�0000144�00000011251�12516703766�015774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmFileOp: TfrmFileOp Left = 576 Height = 212 Top = 272 Width = 522 ClientHeight = 212 ClientWidth = 522 Constraints.MinWidth = 500 OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter ShowInTaskBar = stAlways LCLVersion = '1.4.0.4' object pnlClient: TPanel Left = 3 Height = 141 Top = 3 Width = 516 Align = alTop AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 141 ClientWidth = 516 TabOrder = 0 object pnlQueue: TPanel Left = 0 Height = 21 Top = 0 Width = 516 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 21 ClientWidth = 516 TabOrder = 0 object lblCurrentOperation: TLabel Left = 0 Height = 15 Top = 0 Width = 516 Align = alTop BorderSpacing.Bottom = 5 Caption = 'Current operation:' ParentColor = False end object lblCurrentOperationText: TLabel Left = 0 Height = 1 Top = 20 Width = 516 Align = alTop ParentColor = False end end object pnlFrom: TPanel Left = 0 Height = 15 Top = 21 Width = 516 Align = alTop AutoSize = True BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 15 ClientWidth = 516 TabOrder = 1 object lblFrom: TLabel Left = 0 Height = 15 Top = 0 Width = 40 Align = alLeft Caption = 'From:' Constraints.MinWidth = 40 ParentColor = False end object lblFileNameFrom: TLabel Left = 40 Height = 15 Top = 0 Width = 476 Align = alClient ParentColor = False end end object pnlTo: TPanel Left = 0 Height = 15 Top = 39 Width = 516 Align = alTop AutoSize = True BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 BevelOuter = bvNone ClientHeight = 15 ClientWidth = 516 TabOrder = 2 object lblFileNameTo: TLabel Left = 40 Height = 15 Top = 0 Width = 476 Align = alClient ParentColor = False end object lblTo: TLabel Left = 0 Height = 15 Top = 0 Width = 40 Align = alLeft Caption = 'To:' Constraints.MinWidth = 40 ParentColor = False end end object lblEstimated: TLabel Left = 0 Height = 1 Top = 57 Width = 516 Align = alTop BorderSpacing.Top = 3 ParentColor = False end object pbCurrent: TKASProgressBar Left = 0 Height = 22 Top = 61 Width = 516 Align = alTop BorderSpacing.Top = 3 Max = 516 Smooth = True TabOrder = 3 BarShowText = True end object pbTotal: TKASProgressBar Left = 0 Height = 22 Top = 86 Width = 516 Align = alTop BorderSpacing.Top = 3 Max = 516 Smooth = True TabOrder = 4 BarShowText = True end object pnlButtons: TPanel Left = 0 Height = 30 Top = 111 Width = 516 Align = alTop AutoSize = True BorderSpacing.Top = 3 BevelOuter = bvNone ClientHeight = 30 ClientWidth = 516 TabOrder = 5 object btnMinimizeToPanel: TBitBtn Left = 0 Height = 30 Top = 0 Width = 72 Align = alLeft AutoSize = True BorderSpacing.Right = 3 Caption = '&To panel' OnClick = btnMinimizeToPanelClick TabOrder = 0 end object btnViewOperations: TBitBtn Left = 75 Height = 30 Top = 0 Width = 66 Align = alLeft AutoSize = True BorderSpacing.Right = 3 Caption = '&View all' OnClick = btnViewOperationsClick TabOrder = 1 end object btnCancel: TBitBtn Left = 377 Height = 30 Top = 0 Width = 86 Align = alRight AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 50 Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 2 end object btnPauseStart: TBitBtn Left = 466 Height = 30 Top = 0 Width = 50 Align = alRight AutoSize = True BorderSpacing.Left = 3 Constraints.MinWidth = 50 OnClick = btnPauseStartClick Spacing = 0 TabOrder = 3 end end end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ushowform.pas�������������������������������������������������������������������0000644�0001750�0000144�00000025362�12630371272�016055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz showing editor or viewer by configuration dialog contributors: Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) } unit uShowForm; {$mode objfpc}{$H+} interface uses Classes, DCBasicTypes, uFileSource, uFileSourceOperation; type { TEditorWaitData } TEditorWaitData = class public FileName: String; TargetPath: String; FileTime: TFileTime; SourceFileSource: IFileSource; TargetFileSource: IFileSource; public destructor Destroy; override; protected procedure OnCopyInStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); end; procedure EditDone(WaitData: TEditorWaitData); procedure RunExtDiffer(CompareList: TStringList); procedure ShowEditorByGlob(const sFileName: String); procedure ShowEditorByGlob(WaitData: TEditorWaitData); overload; procedure ShowDifferByGlob(const LeftName, RightName: String); procedure ShowViewerByGlob(const sFileName: String); procedure ShowViewerByGlobList(const FilesToView: TStringList; const aFileSource: IFileSource); implementation uses SysUtils, Process, DCProcessUtf8, Dialogs, uShellExecute, uGlobs, uOSUtils, fEditor, fViewer, uDCUtils, uTempFileSystemFileSource, uLng, fDiffer, uDebug, DCOSUtils, uShowMsg, uFile, uFileSourceCopyOperation, uFileSystemFileSource, uFileSourceOperationOptions, uOperationsManager, uFileSourceOperationTypes, uWcxArchiveFileSource, uWfxPluginFileSource; type { TViewerWaitThread } TViewerWaitThread = class(TThread) private FFileList : TStringList; FFileSource: IFileSource; protected procedure Execute; override; public constructor Create(const FilesToView: TStringList; const aFileSource: IFileSource); destructor Destroy; override; end; { TEditorWaitThread } TEditorWaitThread = class(TThread) private FWaitData: TEditorWaitData; protected procedure Execute; override; public constructor Create(WaitData: TEditorWaitData); end; procedure RunExtTool(const ExtTool: TExternalToolOptions; sFileName: String); var sCmd: String; sParams:string=''; begin sCmd := ExtTool.Path; sParams := ExtTool.Parameters; //If there is %p already configured in the parameter, we assume user configured it the way he wants. //This might be in non-common case where there are paramters AFTER the filename to open. //If there is not %p, let's do thing like legacy was and let's add the filename received as paramter. if pos('%p',sParams)=0 then sParams := ConcatenateStrWithSpace(sParams,QuoteFilenameIfNecessary(sFileName)); ProcessExtCommandFork(sCmd, sParams, '', nil, ExtTool.RunInTerminal, ExtTool.KeepTerminalOpen); end; procedure RunExtDiffer(CompareList: TStringList); var i : Integer; sCmd: String; sParams:string=''; begin with gExternalTools[etDiffer] do begin sCmd := QuoteStr(ReplaceEnvVars(Path)); if Parameters <> EmptyStr then sParams := sParams + ' ' + Parameters; for i := 0 to CompareList.Count - 1 do sParams := sParams + ' ' + QuoteStr(CompareList.Strings[i]); try ProcessExtCommandFork(sCmd, sParams, '', nil, RunInTerminal, KeepTerminalOpen); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningDiffer, rsMsgInvalidCommandLine + ' (' + rsToolDiffer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; end; procedure ShowEditorByGlob(const sFileName: String); begin if gExternalTools[etEditor].Enabled then begin try RunExtTool(gExternalTools[etEditor], sFileName); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end else ShowEditor(sFileName); end; procedure ShowEditorByGlob(WaitData: TEditorWaitData); begin if gExternalTools[etEditor].Enabled then with TEditorWaitThread.Create(WaitData) do Start else begin ShowEditor(WaitData); end; end; procedure ShowViewerByGlob(const sFileName: String); var sl:TStringList; begin if gExternalTools[etViewer].Enabled then begin try RunExtTool(gExternalTools[etViewer], sFileName); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end else begin sl:=TStringList.Create; try sl.Add(sFileName); ShowViewer(sl); finally FreeAndNil(sl); end; end; end; procedure ShowDifferByGlob(const LeftName, RightName: String); var sl: TStringList; begin if gExternalTools[etDiffer].Enabled then begin sl:= TStringList.Create; try sl.add(LeftName); sl.add(RightName); RunExtDiffer(sl); finally sl.free; end; end else ShowDiffer(LeftName, RightName); end; procedure ShowViewerByGlobList(const FilesToView : TStringList; const aFileSource: IFileSource); var I : Integer; WaitThread : TViewerWaitThread; begin if gExternalTools[etViewer].Enabled then begin DCDebug('ShowViewerByGlobList - Use ExtView'); if aFileSource.IsClass(TTempFileSystemFileSource) then begin WaitThread := TViewerWaitThread.Create(FilesToView, aFileSource); WaitThread.Start; end else begin // TODO: If possible should run one instance of external viewer // with multiple file names as parameters. for i:=0 to FilesToView.Count-1 do RunExtTool(gExternalTools[etViewer], FilesToView.Strings[i]); end; end // gUseExtView else ShowViewer(FilesToView, aFileSource); end; procedure EditDone(WaitData: TEditorWaitData); var Files: TFiles; Operation: TFileSourceCopyOperation; begin with WaitData do try // File was modified if mbFileAge(FileName) <> FileTime then begin if not msgYesNo(Format(rsMsgCopyBackward, [ExtractFileName(FileName)])) then Exit; if (fsoCopyIn in TargetFileSource.GetOperationsTypes) and ((TargetFileSource is TWcxArchiveFileSource) or (TargetFileSource is TWfxPluginFileSource)) then begin Files:= TFiles.Create(SourceFileSource.GetRootDir); Files.Add(TFileSystemFileSource.CreateFileFromFile(FileName)); Operation:= TargetFileSource.CreateCopyInOperation(SourceFileSource, Files, TargetPath) as TFileSourceCopyOperation; // Copy file back if Assigned(Operation) then begin Operation.AddStateChangedListener([fsosStopped], @OnCopyInStateChanged); Operation.FileExistsOption:= fsoofeOverwrite; OperationsManager.AddOperation(Operation); WaitData:= nil; // Will be free in operation end; end else if msgYesNo(rsMsgCouldNotCopyBackward + LineEnding + FileName) then begin (SourceFileSource as ITempFileSystemFileSource).DeleteOnDestroy:= False; end; end; finally WaitData.Free; end; end; { TEditorWaitData } destructor TEditorWaitData.Destroy; begin inherited Destroy; SourceFileSource:= nil; TargetFileSource:= nil; end; procedure TEditorWaitData.OnCopyInStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var aFileSource: ITempFileSystemFileSource; aCopyOperation: TFileSourceCopyOperation; begin if (State = fsosStopped) then begin aCopyOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOperation.SourceFileSource as ITempFileSystemFileSource; with aCopyOperation.RetrieveStatistics do begin if DoneFiles <> TotalFiles then begin if msgYesNo(Operation.Thread, rsMsgCouldNotCopyBackward + LineEnding + aCopyOperation.SourceFiles[0].FullPath) then begin aFileSource.DeleteOnDestroy:= False; end; end; end; Free; end; end; { TEditorWaitThread } procedure TEditorWaitThread.Execute; var Process : TProcessUTF8; sCmd, sSecureEmptyStr: String; begin Process := TProcessUTF8.Create(nil); with gExternalTools[etEditor] do begin sCmd := ReplaceEnvVars(Path); // TProcess arguments must be enclosed with double quotes and not escaped. if RunInTerminal then begin sCmd := QuoteStr(sCmd); if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' ' + QuoteStr(FWaitData.FileName); sSecureEmptyStr := EmptyStr; // Let's play safe and don't let EmptyStr being passed as "VAR" parameter of "FormatTerminal" FormatTerminal(sCmd, sSecureEmptyStr, False); end else begin sCmd := '"' + sCmd + '"'; if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' "' + FWaitData.FileName + '"'; end; end; Process.CommandLine := sCmd; Process.Options := [poWaitOnExit]; Process.Execute; Process.Free; EditDone(FWaitData); end; constructor TEditorWaitThread.Create(WaitData: TEditorWaitData); begin inherited Create(True); FreeOnTerminate := True; FWaitData := WaitData; end; { TViewerWaitThread } constructor TViewerWaitThread.Create(const FilesToView: TStringList; const aFileSource: IFileSource); begin inherited Create(True); FreeOnTerminate := True; FFileList := TStringList.Create; // Make a copy of list elements. FFileList.Assign(FilesToView); FFileSource := aFileSource; end; destructor TViewerWaitThread.Destroy; begin if Assigned(FFileList) then FreeAndNil(FFileList); // Delete the temporary file source and all files inside. FFileSource := nil; inherited Destroy; end; procedure TViewerWaitThread.Execute; var I : Integer; Process : TProcessUTF8; sCmd, sSecureEmptyStr: String; begin Process := TProcessUTF8.Create(nil); with gExternalTools[etViewer] do begin sCmd := ReplaceEnvVars(Path); // TProcess arguments must be enclosed with double quotes and not escaped. if RunInTerminal then begin sCmd := QuoteStr(sCmd); if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' ' + QuoteStr(FFileList.Strings[0]); sSecureEmptyStr := EmptyStr; //Let's play safe and don't let EmptyStr being passed as "VAR" parameter of "FormatTerminal" FormatTerminal(sCmd, sSecureEmptyStr, False); end else begin sCmd := '"' + sCmd + '"'; if Parameters <> EmptyStr then sCmd := sCmd + ' ' + Parameters; sCmd := sCmd + ' "' + FFileList.Strings[0] + '"'; end; end; Process.CommandLine := sCmd; Process.Options := [poWaitOnExit]; Process.Execute; Process.Free; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ulog.pas������������������������������������������������������������������������0000644�0001750�0000144�00000011237�12452613064�014766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains log write functions. Copyright (C) 2008-2011 Koblov Alexander (Alexx2000@mail.ru) contributors: Radek Cervinka <radek.cervinka@centrum.cz> 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 uLog; {$mode objfpc}{$H+} interface uses Classes; type TLogMsgType = (lmtInfo, lmtSuccess, lmtError); type { TLogWriteThread } TLogWriteThread = class private procedure LogWriteInTheThread; protected FThread: TThread; FMsg: String; FLogMsgType: TLogMsgType; FForce, FLogFile: Boolean; public constructor Create(Thread: TThread); destructor Destroy; override; procedure WriteLog(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); end; function GetActualLogFilename: string; procedure ShowLogWindow(bShow: Boolean); procedure logWrite(const sText: String; LogMsgType: TLogMsgType = lmtInfo; bForce: Boolean = False; bLogFile: Boolean = True); overload; procedure logWrite(Thread: TThread; const sText: String; LogMsgType: TLogMsgType = lmtInfo; bForce: Boolean = False; bLogFile: Boolean = True); overload; implementation uses SysUtils, Forms, fMain, uDebug, uGlobs, uFileProcs, DCOSUtils, uDCUtils; procedure ShowLogWindow(bShow: Boolean); begin if Assigned(fMain.frmMain) then with fMain.frmMain do begin LogSplitter.Visible:= bShow; seLogWindow.Visible:= bShow; LogSplitter.Top := seLogWindow.Top - LogSplitter.Height; end; end; procedure logWrite(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); begin logWrite(nil, sText, LogMsgType, bForce, bLogFile); end; procedure logWrite(Thread: TThread; const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); var LogWriteThread: TLogWriteThread; begin try LogWriteThread:= TLogWriteThread.Create(Thread); LogWriteThread.WriteLog(sText, LogMsgType, bForce, bLogFile); finally LogWriteThread.Free; end end; function GetActualLogFilename: string; begin result:=ReplaceEnvVars(gLogFileName); if gLogFileWithDateInName then begin result:=copy(result,1,length(result)-length(ExtractFileExt(result)))+ '_'+ReplaceEnvVars(EnvVarTodaysDate)+ ExtractFileExt(result); end; end; { TLogWriteThread } procedure TLogWriteThread.LogWriteInTheThread; var hLogFile: THandle; LogMsgTypeObject: TObject; ActualLogFilename: string; begin LogMsgTypeObject:= TObject(PtrInt(FLogMsgType)); if Assigned(fMain.frmMain) then with fMain.frmMain do begin if FForce and (not seLogWindow.Visible) then ShowLogWindow(True); if (gLogWindow or FForce) then // if write log to window seLogWindow.CaretY:= seLogWindow.Lines.AddObject(FMsg, LogMsgTypeObject) + 1; end; if gLogFile and FLogFile then // if write log to file try ActualLogFilename:= GetActualLogFilename; if mbFileExists(ActualLogFilename) then hLogFile:= mbFileOpen(ActualLogFilename, fmOpenReadWrite) else hLogFile:= mbFileCreate(ActualLogFilename); FileSeek(hLogFile, 0, soFromEnd); FileWriteLn(hLogFile, Format('%s %s', [DateTimeToStr(Now), FMsg])); DCDebug(Format('%s %s',[DateTimeToStr(Now), FMsg])); FileClose(hLogFile); except on E: Exception do DCDebug('Error writing to log: ' + E.Message); end; // gLogWriteFile end; constructor TLogWriteThread.Create(Thread: TThread); begin FThread:= Thread; end; destructor TLogWriteThread.Destroy; begin FMsg:= ''; inherited Destroy; end; procedure TLogWriteThread.WriteLog(const sText: String; LogMsgType: TLogMsgType; bForce, bLogFile: Boolean); begin FMsg:= sText; FLogMsgType:= LogMsgType; FForce:= bForce; FLogFile:= bLogFile; TThread.Synchronize(FThread, @LogWriteInTheThread); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsplitter.pas�������������������������������������������������������������������0000644�0001750�0000144�00000021473�12612505011�016025� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : Pavel Letko (letcuv@centrum.cz) File splitter contributors: Radek Cervinka } unit fSplitter; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, Buttons, Menus, //DC uFileSource, uFile; type { TfrmSplitter } TfrmSplitter = class(TForm) teNumberParts: TEdit; grbxFile: TGroupBox; edFileSource: TEdit; lblNumberParts: TLabel; lbFileSource: TLabel; edDirTarget: TEdit; lbDirTarget: TLabel; btnFTChoice: TButton; grbxSize: TGroupBox; cmbxSize: TComboBox; btnOK: TButton; btnCancel: TButton; rbtnKiloB: TRadioButton; rbtnMegaB: TRadioButton; rbtnGigaB: TRadioButton; rbtnByte: TRadioButton; btnRelativeFTChoice: TSpeedButton; cbRequireACRC32VerificationFile: TCheckBox; pmPathHelper: TPopupMenu; procedure btnFTChoiceClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SetNumberOfPart; procedure SetSizeOfPart; procedure cmbxSizeChange(Sender: TObject); procedure btnRelativeFTChoiceClick(Sender: TObject); procedure rbtnByteChange(Sender: TObject); procedure teNumberPartsChange(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); private { Private declarations } MyModalResult: integer; function StrConvert(str: String): Int64; public { Public declarations } iVolumeNumber: Integer; iVolumeSize: int64; end; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowSplitterFileForm(aFileSource: IFileSource; var aFile: TFile; const TargetPath: String): Boolean; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLType, LCLProc, //DC uLng, uFileProcs, uOperationsManager, uFileSourceSplitOperation, uShowMsg, DCOSUtils, uGlobs, uSpecialDir, uDCUtils; { ShowSplitterFileForm: "TMainCommands.cm_FileSpliter" function from "uMainCommands.pas" is calling this routine.} function ShowSplitterFileForm(aFileSource: IFileSource; var aFile: TFile; const TargetPath: String): Boolean; var Operation: TFileSourceSplitOperation = nil; frmSplitter:TfrmSplitter; begin frmSplitter:=TfrmSplitter.Create(Application); //Did not use the "with..." here to make absolutely sure of what is referenced in the following. try frmSplitter.edFileSource.Text:= aFile.FullPath; frmSplitter.edDirTarget.Text:= TargetPath; frmSplitter.SetNumberOfPart; // Show form Result:= (frmSplitter.ShowModal = mrOK); if Result then begin try Operation:= aFileSource.CreateSplitOperation(aFile, frmSplitter.edDirTarget.Text) as TFileSourceSplitOperation; if Assigned(Operation) then begin Operation.VolumeSize:= frmSplitter.iVolumeSize; Operation.VolumeNumber:= frmSplitter.iVolumeNumber; Operation.RequireACRC32VerificationFile:= frmSplitter.cbRequireACRC32VerificationFile.Checked; Operation.AutomaticSplitMode:=(frmSplitter.cmbxSize.ItemIndex=0); OperationsManager.AddOperation(Operation); end; finally FreeThenNil(aFile); end; end; finally frmSplitter.Free; end; end; { TfrmSplitter.SetNumberOfPart } procedure TfrmSplitter.SetNumberOfPart; begin if cmbxSize.ItemIndex<>0 then begin if StrConvert(cmbxSize.Text)>0 then begin if mbFileSize(edFileSource.Text) mod StrConvert(cmbxSize.Text)>0 then teNumberParts.Text:= IntToStr( (mbFileSize(edFileSource.Text) div StrConvert(cmbxSize.Text)) +1) else teNumberParts.Text:= IntToStr(mbFileSize(edFileSource.Text) div StrConvert(cmbxSize.Text)); end else begin teNumberParts.Text:='Error'; end; end else begin teNumberParts.Text:=rsMSgUndeterminedNumberOfFile; end; end; { TfrmSplitter.SetSizeOfPart } procedure TfrmSplitter.SetSizeOfPart; begin if StrToInt64Def(teNumberParts.Text,0)>0 then begin if mbFileSize(edFileSource.Text) mod StrToInt64Def(teNumberParts.Text,0)>0 then cmbxSize.Text := IntToStr(mbFileSize(edFileSource.Text) div StrToInt64Def(teNumberParts.Text,0)+1)+'B' else cmbxSize.Text := IntToStr(mbFileSize(edFileSource.Text) div StrToInt64Def(teNumberParts.Text,0))+'B'; end else begin cmbxSize.Text:='Error'; end; end; { TfrmSplitter.btnFTChoiceClick } procedure TfrmSplitter.btnFTChoiceClick(Sender: TObject); var sDir: string; begin if SelectDirectory(rsSplitSelDir, edDirTarget.Text, sDir) then // Select directory: // must change on linux!!! begin edDirTarget.Text:= sDir; end; end; { TfrmSplitter.StrConvert } function TfrmSplitter.StrConvert(str:string):int64; var iRet:int64; iPos,iMult:integer; sStr:string; begin str:=UpperCase(str); iPos:=Pos('B',str); if iPos>1 then begin rbtnByte.Enabled:=false; rbtnKiloB.Enabled:=false; rbtnMegaB.Enabled:=false; rbtnGigaB.Enabled:=false; rbtnByte.Checked:=false; rbtnKiloB.Checked:=false; rbtnMegaB.Checked:=false; rbtnGigaB.Checked:=false; dec(iPos); case str[iPos] of 'K':iMult:=1024; //Kilo 'M':iMult:=1024*1024; //Mega 'G':iMult:=1024*1024*1024; //Giga else iMult:=1; inc(iPos); end; dec(iPos); sStr:=Copy(str,1,iPos); iRet:=StrToInt64Def(sStr,0)*iMult; end else begin rbtnByte.Enabled:=true; rbtnKiloB.Enabled:=true; rbtnMegaB.Enabled:=true; rbtnGigaB.Enabled:=true; iMult:=1; if rbtnKiloB.Checked then iMult:=1024; //Kilo if rbtnMegaB.Checked then iMult:=1024*1024; //Mega if rbtnGigaB.Checked then iMult:=1024*1024*1024; //Giga iRet:=StrToInt64Def(Str,0)*iMult; end; Result:=iRet; end; { TfrmSplitter.FormCreate } procedure TfrmSplitter.FormCreate(Sender: TObject); begin InitPropStorage(Self); // Initialize property storage rbtnByte.Enabled:= False; rbtnKiloB.Enabled:= False; rbtnMegaB.Enabled:= False; rbtnGigaB.Enabled:= False; MyModalResult:=mrCancel; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; { TfrmSplitter.rbtnByteChange } procedure TfrmSplitter.rbtnByteChange(Sender: TObject); begin SetNumberOfPart; end; { TfrmSplitter.btnRelativeFTChoiceClick } procedure TfrmSplitter.btnRelativeFTChoiceClick(Sender: TObject); begin edDirTarget.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edDirTarget,pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmSplitter.cmbxSizeChange } procedure TfrmSplitter.cmbxSizeChange(Sender: TObject); begin if cmbxSize.Focused then SetNumberOfPart; //Do the function ONLY-IF it's the result of someone typing in the field end; { TfrmSplitter.teNumberPartsChange } procedure TfrmSplitter.teNumberPartsChange(Sender: TObject); begin if teNumberParts.Focused then SetSizeOfPart; //Do the function ONLY-IF it's the result of someone typing in the field end; { TfrmSplitter.btnOKClick } procedure TfrmSplitter.btnOKClick(Sender: TObject); var iFileSize : Int64; Operation: TFileSourceSplitOperation = nil; WindowResult: ShortInt; isTooManyFiles: boolean; begin if cmbxSize.ItemIndex<>0 then iVolumeSize:= StrConvert(cmbxSize.Text) else iVolumeSize:=0; if (iVolumeSize <= 0) AND (cmbxSize.ItemIndex<>0) then begin ShowMessageBox(rsSplitErrFileSize, 'Error!', MB_OK or MB_ICONERROR); //Incorrect file size format! (Used "ShowMessageBox" instead of "MsgError" 'cause with "MsgError", user can still click on the frmSplitter form and type in it). end else begin if not mbForceDirectory(IncludeTrailingPathDelimiter(mbExpandFileName(edDirTarget.Text))) then begin ShowMessageBox(rsSplitErrDirectory, 'Error!', MB_OK or MB_ICONERROR); //Unable to create target directory! end else begin if teNumberParts.Text <> rsMSgUndeterminedNumberOfFile then iVolumeNumber := StrToInt(teNumberParts.Text) else iVolumeNumber := 0; if (iVolumeNumber < 1) AND (teNumberParts.Text <> rsMSgUndeterminedNumberOfFile) then begin ShowMessageBox(rsSplitErrSplitFile, 'Error!', MB_OK or MB_ICONERROR); //Unable to split the file! end else begin isTooManyFiles:=(iVolumeNumber > 100); if isTooManyFiles then isTooManyFiles:=(MessageDlg(Caption, rsSplitMsgManyParts, mtWarning, mbYesNo, 0) <> mrYes); if not isTooManyFiles then begin MyModalResult:=mrOk; close; end; //if isTooManyFiles then end; //if (iVolumeNumber = 0) then end; //if not mbForceDirectory(edDirTarget.Text) then end; //if iVolumeSize <= 0 then end; { TfrmSplitter.FormClose } procedure TfrmSplitter.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin modalResult := MyModalResult; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdialogbox.pas������������������������������������������������������������������0000644�0001750�0000144�00000052046�12612505011�016127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains realization of Dialog API functions. Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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. } unit fDialogBox; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Types, Buttons, ExtCtrls, EditBtn, Extension; type { TDialogBox } TDialogBox = class(TForm) DialogButton: TButton; DialogBitBtn: TBitBtn; DialogFileNameEdit: TFileNameEdit; DialogComboBox: TComboBox; DialogListBox: TListBox; DialogCheckBox: TCheckBox; DialogGroupBox: TGroupBox; DialogLabel: TLabel; DialogEdit: TEdit; DialogImage: TImage; // Dialog events procedure DialogBoxShow(Sender: TObject); // Button events procedure ButtonClick(Sender: TObject); procedure ButtonEnter(Sender: TObject); procedure ButtonExit(Sender: TObject); procedure ButtonKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ButtonKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // ComboBox events procedure ComboBoxClick(Sender: TObject); procedure ComboBoxDblClick(Sender: TObject); procedure ComboBoxChange(Sender: TObject); procedure ComboBoxEnter(Sender: TObject); procedure ComboBoxExit(Sender: TObject); procedure ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // Edit events procedure EditClick(Sender: TObject); procedure EditDblClick(Sender: TObject); procedure EditChange(Sender: TObject); procedure EditEnter(Sender: TObject); procedure EditExit(Sender: TObject); procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // ListBox events procedure ListBoxClick(Sender: TObject); procedure ListBoxDblClick(Sender: TObject); procedure ListBoxSelectionChange(Sender: TObject; User: boolean); procedure ListBoxEnter(Sender: TObject); procedure ListBoxExit(Sender: TObject); procedure ListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ListBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); // CheckBox events procedure CheckBoxChange(Sender: TObject); private FDlgProc: TDlgProc; FResult: LongBool; protected procedure ShowDialogBox; public { public declarations } end; function InputBox(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; dcpcall; function MessageBox(Text, Caption: PAnsiChar; Flags: Longint): Integer; dcpcall; function DialogBoxLFM(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; function DialogBoxLRS(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; function DialogBoxLFMFile(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool; dcpcall; function SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; implementation uses uShowMsg, DCClassesUtf8; function InputBox(Caption, Prompt: PAnsiChar; MaskInput: LongBool; Value: PAnsiChar; ValueMaxLen: Integer): LongBool; dcpcall; var sValue: String; begin Result:= False; sValue:= StrPas(Value); if ShowInputQuery(Caption, Prompt, MaskInput, sValue) then begin StrLCopy(Value, PAnsiChar(sValue), ValueMaxLen); Result:= True; end; end; function MessageBox(Text, Caption: PAnsiChar; Flags: Longint): Integer; dcpcall; begin Result:= ShowMessageBox(Text, Caption, Flags); end; procedure SetDialogBoxResourceLRS(LRSData: String); var LResource: TLResource; begin LResource := LazarusResources.Find('TDialogBox','FORMDATA'); if Assigned(LResource) then LResource.Value:= LRSData else LazarusResources.Add('TDialogBox','FORMDATA', LRSData); end; procedure SetDialogBoxResourceLFM(LFMData: String); var LFMStream: TStringStream = nil; BinStream: TStringStream = nil; begin try LFMStream:= TStringStream.Create(LFMData); BinStream:= TStringStream.Create(''); LRSObjectTextToBinary(LFMStream, BinStream); SetDialogBoxResourceLRS(BinStream.DataString); finally if Assigned(LFMStream) then FreeAndNil(LFMStream); if Assigned(BinStream) then FreeAndNil(BinStream); end; end; function DialogBox(DlgProc: TDlgProc): LongBool; var Dialog: TDialogBox = nil; begin Dialog:= TDialogBox.Create(nil); try with Dialog do begin FDlgProc:= DlgProc; TThread.Synchronize(nil, @ShowDialogBox); Result:= FResult; end; finally if Assigned(Dialog) then FreeAndNil(Dialog); end; end; function DialogBoxLFM(LFMData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool;dcpcall; var DataString: String; begin if Assigned(LFMData) and (DataSize > 0) then begin SetString(DataString, LFMData, DataSize); SetDialogBoxResourceLFM(DataString); Result := DialogBox(DlgProc); end else Result := False; end; function DialogBoxLRS(LRSData: Pointer; DataSize: LongWord; DlgProc: TDlgProc): LongBool; dcpcall; var DataString: String; begin if Assigned(LRSData) and (DataSize > 0) then begin SetString(DataString, LRSData, DataSize); SetDialogBoxResourceLRS(DataString); Result := DialogBox(DlgProc); end else Result := False; end; function DialogBoxLFMFile(lfmFileName: PAnsiChar; DlgProc: TDlgProc): LongBool;dcpcall; var lfmStringList: TStringListEx; begin if Assigned(lfmFileName) then begin lfmStringList:= TStringListEx.Create; try lfmStringList.LoadFromFile(lfmFileName); SetDialogBoxResourceLFM(lfmStringList.Text); Result := DialogBox(DlgProc); finally FreeAndNil(lfmStringList); end; end else Result := False; end; function SendDlgMsg(pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt;dcpcall; var DialogBox: TDialogBox; Control: TControl; sText: String; I: Integer; Rect: TRect; Key: Word; begin DialogBox:= TDialogBox(Pointer(pDlg)); // find component by name for I:= 0 to DialogBox.ComponentCount - 1 do begin Control:= TControl(DialogBox.Components[I]); if CompareText(Control.Name, DlgItemName) = 0 then Break; end; // process message case Msg of DM_CLOSE: begin DialogBox.Close; if wParam <> -1 then DialogBox.ModalResult:= wParam; end; DM_ENABLE: begin Result:= PtrInt(Control.Enabled); if wParam <> -1 then Control.Enabled:= Boolean(wParam); end; DM_GETCHECK: begin if Control is TCheckBox then Result:= PtrInt((Control as TCheckBox).State); if Control is TRadioButton then Result := PtrInt((Control as TRadioButton).Checked); end; DM_GETDLGBOUNDS: begin Rect.Left:= DialogBox.Left; Rect.Top:= DialogBox.Top; Rect.Right:= DialogBox.Left + DialogBox.Width; Rect.Bottom:= DialogBox.Top + DialogBox.Height; Result:= PtrInt(@Rect); end; DM_GETDLGDATA: begin Result:= DialogBox.Tag; end; DM_GETDROPPEDDOWN: begin if Control is TComboBox then Result:= PtrInt((Control as TComboBox).DroppedDown); end; DM_GETITEMBOUNDS: begin Rect.Left:= Control.Left; Rect.Top:= Control.Top; Rect.Right:= Control.Left + Control.Width; Rect.Bottom:= Control.Top + Control.Height; Result:= PtrInt(@Rect); end; DM_GETITEMDATA: begin Result:= Control.Tag; end; DM_LISTADD: begin sText:= PAnsiChar(wParam); if Control is TComboBox then (Control as TComboBox).Items.AddObject(sText, TObject(Pointer(lParam))); if Control is TListBox then (Control as TListBox).Items.AddObject(sText, TObject(Pointer(lParam))); end; DM_LISTADDSTR: begin sText:= PAnsiChar(wParam); if Control is TComboBox then (Control as TComboBox).Items.Add(sText); if Control is TListBox then (Control as TListBox).Items.Add(sText); end; DM_LISTDELETE: begin if Control is TComboBox then (Control as TComboBox).Items.Delete(wParam); if Control is TListBox then (Control as TListBox).Items.Delete(wParam); end; DM_LISTINDEXOF: begin sText:= PAnsiChar(lParam); if Control is TComboBox then Result:= (Control as TComboBox).Items.IndexOf(sText); if Control is TListBox then Result:= (Control as TListBox).Items.IndexOf(sText); end; DM_LISTINSERT: begin sText:= PAnsiChar(lParam); if Control is TComboBox then (Control as TComboBox).Items.Insert(wParam, sText); if Control is TListBox then (Control as TListBox).Items.Insert(wParam, sText); end; DM_LISTGETCOUNT: begin if Control is TComboBox then Result:= (Control as TComboBox).Items.Count; if Control is TListBox then Result:= (Control as TListBox).Items.Count; end; DM_LISTGETDATA: begin if Control is TComboBox then Result:= PtrInt((Control as TComboBox).Items.Objects[wParam]); if Control is TListBox then Result:= PtrInt((Control as TListBox).Items.Objects[wParam]); end; DM_LISTGETITEM: begin if Control is TComboBox then sText:= (Control as TComboBox).Items[wParam]; if Control is TListBox then sText:= (Control as TListBox).Items[wParam]; Result:= PtrInt(PAnsiChar(sText)); end; DM_LISTGETITEMINDEX: begin Result:= -1; if Control is TComboBox then Result:= (Control as TComboBox).ItemIndex; if Control is TListBox then Result:= (Control as TListBox).ItemIndex; end; DM_LISTSETITEMINDEX: begin if Control is TComboBox then (Control as TComboBox).ItemIndex:= wParam; if Control is TListBox then (Control as TListBox).ItemIndex:= wParam; end; DM_LISTUPDATE : begin sText:= PAnsiChar(lParam); if Control is TComboBox then (Control as TComboBox).Items[wParam]:= sText; if Control is TListBox then (Control as TListBox).Items[wParam]:= sText; end; DM_GETTEXT: begin if Control is TButton then sText:= (Control as TButton).Caption; if Control is TComboBox then sText:= (Control as TComboBox).Text; if Control is TEdit then sText:= (Control as TEdit).Text; if Control is TGroupBox then sText:= (Control as TGroupBox).Caption; if Control is TLabel then sText:= (Control as TLabel).Caption; if Control is TFileNameEdit then sText:= TFileNameEdit(Control).Text; Result:= PtrInt(PAnsiChar(sText)); end; DM_KEYDOWN: begin Key:= wParam; DialogBox.KeyDown(Key, GetKeyShiftState); Result:= Key; end; DM_KEYUP: begin Key:= wParam; DialogBox.KeyUp(Key, GetKeyShiftState); Result:= Key; end; DM_REDRAW: begin DialogBox.Repaint; end; DM_SETCHECK: begin if Control is TCheckBox then begin Result:= PtrInt((Control as TCheckBox).State); (Control as TCheckBox).State:= TCheckBoxState(wParam) end; if Control is TRadioButton then begin Result := PtrInt((Control as TRadioButton).Checked); (Control as TRadioButton).Checked:= Boolean(wParam); end; end; DM_LISTSETDATA: begin if Control is TComboBox then (Control as TComboBox).Items.Objects[wParam]:= TObject(Pointer(lParam)); if Control is TListBox then (Control as TListBox).Items.Objects[wParam]:= TObject(Pointer(lParam)); end; DM_SETDLGBOUNDS: begin Rect:= PRect(wParam)^; DialogBox.Left:= Rect.Left; DialogBox.Top:= Rect.Top; DialogBox.Width:= Rect.Right - Rect.Left; DialogBox.Height:= Rect.Bottom - Rect.Top; end; DM_SETDLGDATA: begin Result:= DialogBox.Tag; DialogBox.Tag:= wParam; end; DM_SETDROPPEDDOWN: begin if Control is TComboBox then (Control as TComboBox).DroppedDown:= Boolean(wParam); end; DM_SETFOCUS: begin if Control.Visible then (Control as TWinControl).SetFocus; end; DM_SETITEMBOUNDS: begin Rect:= PRect(wParam)^; Control.Left:= Rect.Left; Control.Top:= Rect.Top; Control.Width:= Rect.Right - Rect.Left; Control.Height:= Rect.Bottom - Rect.Top; end; DM_SETITEMDATA: begin Control.Tag:= wParam; end; DM_SETMAXTEXTLENGTH: begin Result:= -1; if Control is TComboBox then begin Result:= (Control as TComboBox).MaxLength; (Control as TComboBox).MaxLength:= wParam; end; if Control is TEdit then begin Result:= (Control as TEdit).MaxLength; (Control as TEdit).MaxLength:= wParam; end; end; DM_SETTEXT: begin sText:= PAnsiChar(wParam); if Control is TButton then (Control as TButton).Caption:= sText; if Control is TComboBox then (Control as TComboBox).Text:= sText; if Control is TEdit then (Control as TEdit).Text:= sText; if Control is TGroupBox then (Control as TGroupBox).Caption:= sText; if Control is TLabel then (Control as TLabel).Caption:= sText; if Control is TFileNameEdit then TFileNameEdit(Control).Text:= sText; end; DM_SHOWDIALOG: begin if wParam = 0 then DialogBox.Hide; if wParam = 1 then DialogBox.Show; end; DM_SHOWITEM: begin Result:= PtrInt(Control.Visible); if wParam <> -1 then Control.Visible:= Boolean(wParam); end; end; end; { TDialogBox } procedure TDialogBox.ShowDialogBox; begin FResult:= (ShowModal = mrOK); end; procedure TDialogBox.DialogBoxShow(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_INITDIALOG,0,0); end; procedure TDialogBox.ButtonClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.ButtonEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ButtonExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ButtonKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYDOWN,Key,0); end; procedure TDialogBox.ButtonKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP,Key,0); end; procedure TDialogBox.ComboBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK,PtrInt((Sender as TComboBox).ItemIndex),0); end; procedure TDialogBox.ComboBoxDblClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_DBLCLICK,PtrInt((Sender as TComboBox).ItemIndex),0); end; procedure TDialogBox.ComboBoxChange(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TComboBox).ItemIndex),0); end; end; procedure TDialogBox.ComboBoxEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ComboBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ComboBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYDOWN,Key,0); end; procedure TDialogBox.ComboBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP,Key,0); end; procedure TDialogBox.EditClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK,0,0); end; procedure TDialogBox.EditDblClick(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_DBLCLICK,0,0); end; procedure TDialogBox.EditChange(Sender: TObject); var sText: String; begin if Assigned(fDlgProc) then begin sText:= (Sender as TEdit).Text; fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt(PAnsiChar(sText)), 0); end; end; procedure TDialogBox.EditEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.EditExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYDOWN,Key,0); end; procedure TDialogBox.EditKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP,Key,0); end; procedure TDialogBox.ListBoxClick(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CLICK, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxDblClick(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_DBLCLICK, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxSelectionChange(Sender: TObject; User: boolean); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TListBox).ItemIndex),0); end; end; procedure TDialogBox.ListBoxEnter(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_GOTFOCUS,0,0); end; procedure TDialogBox.ListBoxExit(Sender: TObject); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KILLFOCUS,0,0); end; procedure TDialogBox.ListBoxKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYDOWN,Key,0); end; procedure TDialogBox.ListBoxKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Assigned(fDlgProc) then fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_KEYUP,Key,0); end; procedure TDialogBox.CheckBoxChange(Sender: TObject); begin if Assigned(fDlgProc) then begin fDlgProc(PtrUInt(Pointer(Self)), PAnsiChar((Sender as TControl).Name), DN_CHANGE, PtrInt((Sender as TCheckBox).Checked),0); end; end; initialization {.$I fdialogbox.lrs} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fFileOpDlg.lrt������������������������������������������������������������������0000644�0001750�0000144�00000000374�11740433676�016021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMFILEOP.LBLCURRENTOPERATION.CAPTION=Current operation: TFRMFILEOP.LBLFROM.CAPTION=From: TFRMFILEOP.LBLTO.CAPTION=To: TFRMFILEOP.BTNMINIMIZETOPANEL.CAPTION=&To panel TFRMFILEOP.BTNVIEWOPERATIONS.CAPTION=&View all TFRMFILEOP.BTNCANCEL.CAPTION=&Cancel ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ubinarydiffviewer.pas�����������������������������������������������������������0000644�0001750�0000144�00000013747�12264004002�017537� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Binary difference viewer and comparator Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) 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 uBinaryDiffViewer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, ViewerControl; type { TBinaryDiffViewer } TBinaryDiffViewer = class(TViewerControl) private FScrollLock: Integer; FKeepScrolling: Boolean; FSecondViewer: TBinaryDiffViewer; protected procedure WriteHex; override; procedure SetPosition(Value: PtrInt); override; public constructor Create(AOwner: TComponent); override; property KeepScrolling: Boolean read FKeepScrolling write FKeepScrolling; property SecondViewer: TBinaryDiffViewer read FSecondViewer write FSecondViewer; end; { TBinaryCompare } TBinaryCompare = class(TThread) private FFirst, FSecond: PByte; FFinish: PtrInt; FResult: TFPList; FOnFinish: TThreadMethod; protected procedure Execute; override; public constructor Create(First, Second: PByte; FirstSize, SecondSize: PtrInt; Result: TFPList); property OnFinish: TThreadMethod read FOnFinish write FOnFinish; end; implementation uses Math; const cHexWidth = 16; cHexOffsetWidth = 8; cHexStartHex = cHexOffsetWidth + 2; // ': ' cHexStartAscii = cHexStartHex + (cHexWidth * 3) + 2; // ' ' { TBinaryDiffViewer } procedure TBinaryDiffViewer.WriteHex; const cWordSize = 3; var I: Integer; X, Y: Integer; yIndex: Integer; P1, P2: PAnsiChar; CurrentPos, LineStart: PtrInt; Mine, Foreign, WordHex: String; WordWidth, SymbolWidth: Integer; MineLength, ForeignLength: Integer; SymbolColor: array[0..15] of TColor; begin CurrentPos := Position; SymbolWidth := Canvas.TextWidth('W'); WordWidth := SymbolWidth * cWordSize; // Draw visible lines for yIndex := 0 to GetClientHeightInLines - 1 do begin if CurrentPos >= FHighLimit then Break; // Draw if second viewer exists if Assigned(SecondViewer) then begin X := 0; Y := yIndex * FTextHeight; LineStart := CurrentPos; AddLineOffset(CurrentPos); // Mine text Mine := TransformHex(CurrentPos, FHighLimit); MineLength:= Min(cHexWidth, (Length(Mine) - cHexStartHex) div cWordSize); // Foreign text Foreign := SecondViewer.TransformHex(LineStart, SecondViewer.FHighLimit); ForeignLength:= (Length(Foreign) - cHexStartHex) div cWordSize; // Pointers to text P1 := PAnsiChar(Mine) + cHexStartHex; P2 := PAnsiChar(Foreign) + cHexStartHex; // Write line number Canvas.TextOut(X, Y, Copy(Mine, 1, cHexStartHex)); X := X + SymbolWidth * cHexStartHex; // Write hex part for I := 0 to MineLength - 1 do begin if (I > ForeignLength) or (PWord(P1)^ <> PWord(P2)^) then Canvas.Font.Color := clRed else Canvas.Font.Color := clBlack; SymbolColor[I]:= Canvas.Font.Color; WordHex:= Copy(P1, 1, cWordSize); Canvas.TextOut(X, Y, WordHex); Inc(X, WordWidth); Inc(P1, cWordSize); Inc(P2, cWordSize) end; Inc(X, SymbolWidth); // Write ASCII part WordHex:= Copy(Mine, cHexStartAscii + 1, cHexWidth); for I:= 1 to Length(WordHex) do begin Canvas.Font.Color := SymbolColor[I - 1]; Canvas.TextOut(X, Y, WordHex[I]); Inc(X, SymbolWidth); end; Canvas.Font.Color := clBlack end; end; end; procedure TBinaryDiffViewer.SetPosition(Value: PtrInt); begin if not (csDestroying in ComponentState) then begin if FScrollLock = 0 then begin Inc(FScrollLock); try inherited SetPosition(Value); if FKeepScrolling and Assigned(SecondViewer) then SecondViewer.SetPosition(Value); finally Dec(FScrollLock); end; end; end; end; constructor TBinaryDiffViewer.Create(AOwner: TComponent); begin inherited Create(AOwner); ViewerMode:= vmHex; end; { TBinaryCompare } procedure TBinaryCompare.Execute; var Finish: PtrInt; Remain: PtrInt; Position: PtrInt = 0; Equal: Boolean = True; begin FResult.Clear; Remain:= (FFinish mod cHexWidth); Finish:= (FFinish - Remain); // Compare integer block size while (Terminated = False) and (Position < Finish) do begin if CompareMem(FFirst + Position, FSecond + Position, cHexWidth) then Equal:= True else if Equal then begin Equal:= False; FResult.Add(Pointer(Position)); end; Position:= Position + cHexWidth; end; // Compare remain bytes if (Remain > 0) then begin if not CompareMem(FFirst + Position, FSecond + Position, Remain) then begin if Equal then FResult.Add(Pointer(Position)); end; end; if Assigned(FOnFinish) then Synchronize(FOnFinish); end; constructor TBinaryCompare.Create(First, Second: PByte; FirstSize, SecondSize: PtrInt; Result: TFPList); begin FFirst:= First; FSecond:= Second; FResult:= Result; inherited Create(True); FreeOnTerminate:= True; FFinish:= Min(FirstSize, SecondSize); end; end. �������������������������doublecmd-0.7.1/src/fhardlink.lrt�������������������������������������������������������������������0000644�0001750�0000144�00000000352�12023046500�015761� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMHARDLINK.CAPTION=Create hard link TFRMHARDLINK.LBLEXISTINGFILE.CAPTION=&Destination that the link will point to TFRMHARDLINK.LBLLINKTOCREATE.CAPTION=&Link name TFRMHARDLINK.BTNOK.CAPTION=&OK TFRMHARDLINK.BTNCANCEL.CAPTION=&Cancel ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsymlink.lfm��������������������������������������������������������������������0000644�0001750�0000144�00000006012�12076733100�015636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSymLink: TfrmSymLink Left = 311 Height = 193 Top = 267 Width = 602 HorzScrollBar.Page = 399 HorzScrollBar.Range = 344 VertScrollBar.Page = 151 VertScrollBar.Range = 128 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create symbolic link' ClientHeight = 193 ClientWidth = 602 KeyPreview = True OnShow = FormShow Position = poScreenCenter LCLVersion = '1.0.4.0' object lblExistingFile: TLabel AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtLinkToCreate AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 59 Width = 240 BorderSpacing.Top = 6 Caption = '&Destination that the link will point to' FocusControl = edtExistingFile ParentColor = False end object lblLinkToCreate: TLabel AnchorSideLeft.Control = edtLinkToCreate AnchorSideTop.Control = Owner Left = 6 Height = 16 Top = 6 Width = 69 BorderSpacing.Top = 6 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 81 Width = 590 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 28 Width = 590 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Constraints.MinWidth = 400 TabOrder = 0 end object btnOK: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel Left = 390 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExistingFile AnchorSideRight.Side = asrBottom Left = 496 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 3 end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fbuttonform.lrt�����������������������������������������������������������������0000644�0001750�0000144�00000000600�12567134601�016375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMBUTTONFORM.BTNADDTOQUEUE.CAPTION=A&dd To Queue TFRMBUTTONFORM.BTNCANCEL.CAPTION=&Cancel TFRMBUTTONFORM.BTNOK.CAPTION=&OK TFRMBUTTONFORM.MNUNEWQUEUE.CAPTION=New queue TFRMBUTTONFORM.MNUQUEUE1.CAPTION=Queue 1 TFRMBUTTONFORM.MNUQUEUE2.CAPTION=Queue 2 TFRMBUTTONFORM.MNUQUEUE3.CAPTION=Queue 3 TFRMBUTTONFORM.MNUQUEUE4.CAPTION=Queue 4 TFRMBUTTONFORM.MNUQUEUE5.CAPTION=Queue 5 ��������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsplitter.lrt�������������������������������������������������������������������0000644�0001750�0000144�00000001364�12365151656�016061� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSPLITTER.CAPTION=Splitter TFRMSPLITTER.GRBXFILE.CAPTION=File name TFRMSPLITTER.LBFILESOURCE.CAPTION=File &source TFRMSPLITTER.LBDIRTARGET.CAPTION=Directory &target TFRMSPLITTER.BTNFTCHOICE.CAPTION=... TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT=Some functions to select appropriate path TFRMSPLITTER.GRBXSIZE.CAPTION=Size and number of parts TFRMSPLITTER.CMBXSIZE.TEXT=1457664B - 3.5" TFRMSPLITTER.RBTNBYTE.CAPTION=&Bytes TFRMSPLITTER.RBTNKILOB.CAPTION=&Kilobytes TFRMSPLITTER.RBTNMEGAB.CAPTION=&Megabytes TFRMSPLITTER.LBLNUMBERPARTS.CAPTION=&Number of parts TFRMSPLITTER.RBTNGIGAB.CAPTION=&Gigabytes TFRMSPLITTER.CBREQUIREACRC32VERIFICATIONFILE.CAPTION=Require a CRC32 verification file TFRMSPLITTER.BTNOK.CAPTION=&OK TFRMSPLITTER.BTNCANCEL.CAPTION=&Cancel ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fchecksumverify.pas�������������������������������������������������������������0000644�0001750�0000144�00000010444�12612505011�017202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Verify checksum dialog Copyright (C) 2009-2013 Alexander Koblov (alexx2000@mail.ru) 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 fCheckSumVerify; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Buttons, SynEdit, uOSForms, Graphics, uFileSourceCalcChecksumOperation, DCBasicTypes; type { TfrmCheckSumVerify } TfrmCheckSumVerify = class(TAloneForm) btnClose: TBitBtn; seCheckSumVerify: TSynEdit; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure seCheckSumVerifySpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); private procedure AddHeader(const aText: String; aCount: Integer; aColor: TColor); procedure ProcessResult(const aResult: TDynamicStringArray; const aText: String; aColor: TColor); public { public declarations } end; procedure ShowVerifyCheckSum(const VerifyResult: TVerifyChecksumResult); implementation {$R *.lfm} uses uLng; procedure ShowVerifyCheckSum(const VerifyResult: TVerifyChecksumResult); var aTotalCount: Integer; begin with TfrmCheckSumVerify.Create(Application) do begin seCheckSumVerify.Lines.BeginUpdate; try seCheckSumVerify.Lines.Add(rsCheckSumVerifyGeneral); aTotalCount:= Length(VerifyResult.Success) + Length(VerifyResult.ReadError) + Length(VerifyResult.Broken) + Length(VerifyResult.Missing); // Add header information AddHeader(rsCheckSumVerifyTotal, aTotalCount, clBlack); AddHeader(rsCheckSumVerifySuccess, Length(VerifyResult.Success), clGreen); AddHeader(rsCheckSumVerifyMissing, Length(VerifyResult.Missing), clRed); AddHeader(rsCheckSumVerifyBroken, Length(VerifyResult.Broken), clRed); AddHeader(rsCheckSumVerifyReadError, Length(VerifyResult.ReadError), clRed); // Add broken files ProcessResult(VerifyResult.Broken, rsCheckSumVerifyBroken, clRed); // Add read error files ProcessResult(VerifyResult.ReadError, rsCheckSumVerifyReadError, clRed); // Add missing files ProcessResult(VerifyResult.Missing, rsCheckSumVerifyMissing, clRed); // Add good files ProcessResult(VerifyResult.Success, rsCheckSumVerifySuccess, clGreen); finally seCheckSumVerify.Lines.EndUpdate; end; Show; end; end; { TfrmCheckSumVerify } procedure TfrmCheckSumVerify.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmCheckSumVerify.seCheckSumVerifySpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); begin Special:= True; FG:= TColor(PtrInt(seCheckSumVerify.Lines.Objects[Line - 1])); end; procedure TfrmCheckSumVerify.AddHeader(const aText: String; aCount: Integer; aColor: TColor); begin if aCount = 0 then seCheckSumVerify.Lines.Add(#32 + aText + #32 + IntToStr(aCount)) else seCheckSumVerify.Lines.AddObject(#32 + aText + #32 + IntToStr(aCount), TObject(PtrInt(aColor))); end; procedure TfrmCheckSumVerify.ProcessResult(const aResult: TDynamicStringArray; const aText: String; aColor: TColor); var I: Integer; begin if Length(aResult) > 0 then begin seCheckSumVerify.Lines.Add(EmptyStr); seCheckSumVerify.Lines.AddObject(aText, TObject(PtrInt(aColor))); for I:= Low(aResult) to High(aResult) do begin seCheckSumVerify.Lines.AddObject(#32 + aResult[I], TObject(PtrInt(aColor))); end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fextractdlg.pas�����������������������������������������������������������������0000644�0001750�0000144�00000023056�12627120441�016325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File unpacking window Copyright (C) 2007-2015 Alexander Koblov (alexx2000@mail.ru) 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 fExtractDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, EditBtn, ExtCtrls, Buttons, Menus, DividerBevel, uFile, uFileSource, uArchiveFileSource, fButtonForm, uOperationsManager; type { TfrmExtractDlg } TfrmExtractDlg = class(TfrmButtonForm) cbExtractPath: TCheckBox; cbInSeparateFolder: TCheckBox; cbOverwrite: TCheckBox; DividerBevel: TDividerBevel; edtPassword: TEdit; edtExtractTo: TDirectoryEdit; lblExtractTo: TLabel; lblPassword: TLabel; cbFileMask: TComboBox; lblFileMask: TLabel; pnlCheckBoxes: TPanel; pnlLabels: TPanel; procedure cbExtractPathChange(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } FArcType: String; procedure SwitchOptions; procedure ExtractArchive(ArchiveFileSource: IArchiveFileSource; TargetFileSource: IFileSource; const TargetPath: String; QueueId: TOperationsManagerQueueIdentifier); public { public declarations } end; // Frees 'SourceFiles'. procedure ShowExtractDlg(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetFileSource: IFileSource; sDestPath: String); implementation {$R *.lfm} uses Dialogs, uGlobs, uDCUtils, uShowMsg, uLng, DCStrUtils, uFileSourceOperation, uFileSystemFileSource, uArchiveFileSourceUtil, uFileSourceOperationTypes, uMultiArchiveFileSource, uMultiArchiveCopyOutOperation, uWcxArchiveFileSource, uWcxArchiveCopyOutOperation, uFileSourceOperationOptions, uMasks; function GetTargetPath(FileSource: IArchiveFileSource; const TargetPath: String): String; begin // if destination path is not absolute then extract to path there archive is located if GetPathType(TargetPath) <> ptAbsolute then Result := GetAbsoluteFileName(ExtractFilePath(FileSource.ArchiveFileName), TargetPath) else Result := IncludeTrailingPathDelimiter(TargetPath); end; procedure ShowExtractDlg(SourceFileSource: IFileSource; var SourceFiles: TFiles; TargetFileSource: IFileSource; sDestPath: String); var I: integer; Operation: TFileSourceOperation; ArchiveFileSource: IArchiveFileSource; extractDialog: TfrmExtractDlg; Result: boolean; begin if not TargetFileSource.IsClass(TFileSystemFileSource) then begin msgWarning(rsMsgErrNotSupported); Exit; end; extractDialog := TfrmExtractDlg.Create(nil); if Assigned(extractDialog) then try with extractDialog do begin edtExtractTo.Text := sDestPath; if SourceFileSource.IsClass(TArchiveFileSource) then cbInSeparateFolder.Visible := False; cbFileMask.Items.Assign(glsMaskHistory); EnableControl(edtPassword, False); // If one archive is selected if (SourceFiles.Count = 1) then begin FArcType:= SourceFiles[0].Extension; SwitchOptions; end; // Show form Result := (ShowModal = mrOk); if Result then begin if glsMaskHistory.IndexOf(cbFileMask.Text) < 0 then glsMaskHistory.Add(cbFileMask.Text); sDestPath := edtExtractTo.Text; // if in archive if SourceFileSource.IsClass(TArchiveFileSource) then begin if fsoCopyOut in SourceFileSource.GetOperationsTypes then begin sDestPath := GetTargetPath(SourceFileSource as IArchiveFileSource, sDestPath); Operation := SourceFileSource.CreateCopyOutOperation(TargetFileSource, SourceFiles, sDestPath); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False); end else msgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgErrNotSupported); end else // if filesystem if SourceFileSource.IsClass(TFileSystemFileSource) then begin for I := 0 to SourceFiles.Count - 1 do // extract all selected archives begin try // Check if there is a ArchiveFileSource for possible archive. ArchiveFileSource := GetArchiveFileSource(SourceFileSource, SourceFiles[i]); // Extract current item, if files count > 1 then put to queue if (I > 0) and (QueueIdentifier = FreeOperationsQueueId) then ExtractArchive(ArchiveFileSource, TargetFileSource, sDestPath, SingleQueueId) else ExtractArchive(ArchiveFileSource, TargetFileSource, sDestPath, QueueIdentifier); except on E: Exception do begin MessageDlg(E.Message, mtError, [mbOK], 0); end; end; end; // for end else msgWarning(rsMsgErrNotSupported); end; // if Result end; finally if Assigned(extractDialog) then FreeAndNil(extractDialog); if Assigned(SourceFiles) then FreeAndNil(SourceFiles); end; end; { TfrmExtractDlg } procedure TfrmExtractDlg.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; procedure TfrmExtractDlg.cbExtractPathChange(Sender: TObject); begin SwitchOptions; end; procedure TfrmExtractDlg.SwitchOptions; var I: LongInt; begin // Check for this archive will be processed by MultiArc for I := 0 to gMultiArcList.Count - 1 do with gMultiArcList.Items[I] do begin if FEnabled and MatchesMaskList(FArcType, FExtension, ',') then begin // If addon supports unpacking without path if (Length(FExtractWithoutPath) <> 0) then cbExtractPath.Enabled:= True else begin cbExtractPath.Enabled:= False; cbExtractPath.Checked:= True; end; // If addon supports unpacking with password if cbExtractPath.Checked then EnableControl(edtPassword, (Pos('%W', FExtract) <> 0)) else EnableControl(edtPassword, (Pos('%W', FExtractWithoutPath) <> 0)); Break; end; end; end; procedure TfrmExtractDlg.ExtractArchive(ArchiveFileSource: IArchiveFileSource; TargetFileSource: IFileSource; const TargetPath: String; QueueId: TOperationsManagerQueueIdentifier); var FilesToExtract: TFiles; Operation: TFileSourceOperation; sTmpPath: string; begin if Assigned(ArchiveFileSource) then begin // Check if List and CopyOut are supported. if [fsoList, fsoCopyOut] * ArchiveFileSource.GetOperationsTypes = [fsoList, fsoCopyOut] then begin // Get files to extract. FilesToExtract := ArchiveFileSource.GetFiles(ArchiveFileSource.GetRootDir); if Assigned(FilesToExtract) then try sTmpPath := GetTargetPath(ArchiveFileSource, TargetPath); // if each archive in separate folder if cbInSeparateFolder.Checked then begin sTmpPath := sTmpPath + ExtractOnlyFileName(ArchiveFileSource.ArchiveFileName) + PathDelim; end; // extract all files Operation := ArchiveFileSource.CreateCopyOutOperation(TargetFileSource, FilesToExtract, sTmpPath); // Set operation specific options if Assigned(Operation) then begin if ArchiveFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyOutOperation do begin Password := edtPassword.Text; ExtractWithoutPath:= not cbExtractPath.Checked; end; end else if ArchiveFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyOutOperation do begin if cbOverwrite.Checked then FileExistsOption := fsoofeOverwrite; ExtractWithoutPath:= not cbExtractPath.Checked; end; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else msgWarning(rsMsgNotImplemented); finally if Assigned(FilesToExtract) then FreeAndNil(FilesToExtract); end; end else msgWarning(rsMsgErrNotSupported); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackdlg.pas��������������������������������������������������������������������0000644�0001750�0000144�00000044361�12613175013�015573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File packing window Copyright (C) 2007-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fPackDlg; {$mode objfpc}{$H+} interface uses SysUtils, Forms, Controls, Dialogs, StdCtrls, EditBtn, ExtCtrls, Buttons, Menus, DividerBevel, uWcxArchiveFileSource, uArchiveFileSource, uFile, uFileSource, Classes, fButtonForm; type { TfrmPackDlg } TfrmPackDlg = class(TfrmButtonForm) btnConfig: TButton; btnHelp: TButton; cbCreateSeparateArchives: TCheckBox; cbCreateSFX: TCheckBox; cbEncrypt: TCheckBox; cbMoveToArchive: TCheckBox; cbMultivolume: TCheckBox; cbPackerList: TComboBox; cbOtherPlugins: TCheckBox; cbPutInTarFirst: TCheckBox; DividerBevel: TDividerBevel; edtPackCmd: TDirectoryEdit; lblPrompt: TLabel; cbStoreDir: TCheckBox; rgPacker: TRadioGroup; pnlOptions: TPanel; procedure btnConfigClick(Sender: TObject); procedure cbCreateSeparateArchivesChange(Sender: TObject); procedure cbCreateSFXClick(Sender: TObject); procedure cbOtherPluginsChange(Sender: TObject); procedure cbPutInTarFirstChange(Sender: TObject); procedure edtPackCmdAcceptDirectory(Sender: TObject; var Value: String); procedure FormShow(Sender: TObject); procedure arbChange(Sender: TObject); private FTarExt, FArchiveExt, FArchiveName, FArchiveType: String; FArchiveTypeCount: Integer; FHasFolder, FExistsArchive : Boolean; FSourceFileSource: IFileSource; FCustomParams: String; procedure SwitchOptions(ArcTypeChange: Boolean); procedure AddArchiveType(const FileExt, ArcType: String); public { public declarations } end; // Frees 'Files'. function ShowPackDlg(const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True): Boolean; implementation {$R *.lfm} uses StrUtils, WcxPlugin, uGlobs, uDCUtils, uFileSourceOperation, uLng, uOSUtils, uOperationsManager, uArchiveFileSourceUtil, uMultiArchiveFileSource, uWcxArchiveCopyInOperation, uMultiArchiveCopyInOperation, uMasks, DCStrUtils; function ShowPackDlg(const SourceFileSource: IFileSource; const TargetFileSource: IArchiveFileSource; var Files: TFiles; TargetArchivePath: String; TargetPathInArchive: String; bNewArchive : Boolean = True): Boolean; var I: Integer; NewTargetFileSource: IArchiveFileSource = nil; aFlags : PtrInt; Operation: TFileSourceOperation; PackDialog: TfrmPackDlg; aFile: TFile = nil; aFiles: TFiles = nil; procedure Pack(var FilesToPack: TFiles; QueueId: TOperationsManagerQueueIdentifier); var sPassword, sPasswordTmp: String; begin with PackDialog do begin if Assigned(NewTargetFileSource) then begin // Set flags according to user selection in the pack dialog. aFlags := 0; if cbMoveToArchive.Checked then aFlags := aFlags or PK_PACK_MOVE_FILES; if cbStoreDir.Checked then aFlags := aFlags or PK_PACK_SAVE_PATHS; if cbEncrypt.Checked then aFlags := aFlags or PK_PACK_ENCRYPT; Operation := NewTargetFileSource.CreateCopyInOperation( SourceFileSource, FilesToPack, TargetPathInArchive); if Assigned(Operation) then begin // TODO: Check if another operation is not running first (for WCX). if NewTargetFileSource.IsInterface(IWcxArchiveFileSource) then begin with Operation as TWcxArchiveCopyInOperation do begin PackingFlags := aFlags; TarBefore:= cbPutInTarFirst.Checked; end; end else if NewTargetFileSource.IsInterface(IMultiArchiveFileSource) then begin with Operation as TMultiArchiveCopyInOperation do begin if cbEncrypt.Checked then repeat if not InputQuery(Caption, rsMsgPasswordEnter, True, sPassword) then Exit; if gRepeatPassword then begin if not InputQuery(Caption, rsMsgPasswordVerify, True, sPasswordTmp) then Exit; end else sPasswordTmp:= sPassword; if sPassword <> sPasswordTmp then ShowMessage(rsMsgPasswordDiff) else Password:= sPassword; until sPassword = sPasswordTmp; if cbMultivolume.Checked then VolumeSize:= InputBox(Caption, rsMsgVolumeSizeEnter, EmptyStr); PackingFlags := aFlags; CustomParams:= FCustomParams; TarBefore:= cbPutInTarFirst.Checked; end; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False, True); end; end; end; end; begin PackDialog := TfrmPackDlg.Create(nil); {$IF DEFINED(LCLGTK2)} // TRadioGroup.ItemIndex:= -1 will not work under Gtk2 // if items have been added dynamically, this workaround fixes it PackDialog.rgPacker.Items.Add(EmptyStr); PackDialog.rgPacker.Items.Clear; {$ENDIF} try with PackDialog do begin FArchiveType:= 'none'; FSourceFileSource:= SourceFileSource; if bNewArchive then // create new archive begin if Files.Count = 1 then // if one file selected begin FHasFolder:= Files[0].IsDirectory; FArchiveName:= Files[0].NameNoExt; edtPackCmd.Text := TargetArchivePath + FArchiveName + ExtensionSeparator + FArchiveType; end else // if some files selected begin FHasFolder:= False; for I:= 0 to Files.Count - 1 do begin if Files[I].IsDirectory then begin FHasFolder:= True; Break; end; end; FArchiveName:= MakeFileName(Files.Path, 'archive'); edtPackCmd.Text := TargetArchivePath + FArchiveName + ExtensionSeparator + FArchiveType; end end else // pack in exsists archive begin if Assigned(TargetFileSource) then edtPackCmd.Text := TargetFileSource.ArchiveFileName; end; Result:= (ShowModal = mrOK); if Result then begin if Assigned(TargetFileSource) then begin // Already have a target file source. // It must be an archive file source. if not (TargetFileSource.IsClass(TArchiveFileSource)) then raise Exception.Create('Invalid target file source type'); NewTargetFileSource := TargetFileSource; end else // Create a new target file source. begin // If create separate archives, one per selected file/dir if cbCreateSeparateArchives.Checked then try for I:= 0 to Files.Count - 1 do begin // Fill files to pack aFiles:= TFiles.Create(Files.Path); aFiles.Add(Files[I].Clone); try try // Check if there is an ArchiveFileSource for possible archive. aFile := SourceFileSource.CreateFileObject(ExtractFilePath(edtPackCmd.Text)); aFile.Name := Files[I].Name + FTarExt + FArchiveExt; NewTargetFileSource := GetArchiveFileSource(SourceFileSource, aFile, FArchiveType); except on e: EFileSourceException do begin MessageDlg(e.Message, mtError, [mbOK], 0); Exit; end; end; // Pack current item, if files count > 1 then put to queue if (I > 0) and (QueueIdentifier = FreeOperationsQueueId) then Pack(aFiles, SingleQueueId) else Pack(aFiles, QueueIdentifier); finally FreeAndNil(aFile); end; end; finally FreeAndNil(aFiles); end else begin try // Check if there is an ArchiveFileSource for possible archive. aFile := SourceFileSource.CreateFileObject(ExtractFilePath(edtPackCmd.Text)); aFile.Name := ExtractFileName(edtPackCmd.Text); NewTargetFileSource := GetArchiveFileSource(SourceFileSource, aFile, FArchiveType); except on e: EFileSourceException do begin MessageDlg(e.Message, mtError, [mbOK], 0); Exit; end; end; // Pack files Pack(Files, QueueIdentifier); end; end; // Save last used packer gLastUsedPacker:= FArchiveType; end; end; finally FreeAndNil(PackDialog); if Assigned(Files) then FreeAndNil(Files); if Assigned(aFile) then FreeAndNil(aFile); end; end; const TAR_EXT = '.tar'; { TfrmPackDlg } procedure TfrmPackDlg.FormShow(Sender: TObject); var I, J : Integer; sExt : String; begin FArchiveTypeCount := 0; FExistsArchive := (FArchiveType <> 'none'); // WCX plugins for I:=0 to gWCXPlugins.Count - 1 do if gWCXPlugins.Enabled[I] then begin if (gWCXPlugins.Flags[I] and PK_CAPS_NEW) = PK_CAPS_NEW then begin AddArchiveType(FArchiveType, gWCXPlugins.Ext[I]); end; end; // MultiArc addons for I:= 0 to gMultiArcList.Count - 1 do if gMultiArcList[I].FEnabled and (gMultiArcList[I].FAdd <> EmptyStr) then begin J:= 1; repeat sExt:= ExtractDelimited(J, gMultiArcList[I].FExtension, [',']); if Length(sExt) = 0 then Break; AddArchiveType(FArchiveType, sExt); Inc(J); until False; end; if (rgPacker.Items.Count > 0) and (rgPacker.ItemIndex < 0) and (not cbOtherPlugins.Checked) then rgPacker.ItemIndex := 0; if cbPackerList.Items.Count > 0 then begin cbOtherPlugins.Visible := True; cbPackerList.Visible := True; if FExistsArchive then cbPackerList.Enabled:= False else cbOtherPlugins.Enabled := True; if cbPackerList.ItemIndex < 0 then cbPackerList.ItemIndex := 0; end else btnConfig.AnchorToCompanion(akTop, 6, rgPacker); end; procedure TfrmPackDlg.btnConfigClick(Sender: TObject); var WcxFileSource: IWcxArchiveFileSource; begin try WcxFileSource := TWcxArchiveFileSource.CreateByArchiveName(FSourceFileSource, edtPackCmd.Text); if Assigned(WcxFileSource) then // WCX plugin try WcxFileSource.WcxModule.VFSConfigure(Handle); finally WcxFileSource := nil; // free interface end else // MultiArc addon begin FCustomParams:= InputBox(Caption, rsMsgArchiverCustomParams, FCustomParams); end; except on e: Exception do MessageDlg(e.Message, mtError, [mbOK], 0); end; end; procedure TfrmPackDlg.cbCreateSeparateArchivesChange(Sender: TObject); begin if cbCreateSeparateArchives.Checked then edtPackCmd.Text:= ExtractFilePath(edtPackCmd.Text) + '*.*' + FTarExt + FArchiveExt else edtPackCmd.Text:= ExtractFilePath(edtPackCmd.Text) + FArchiveName + FTarExt + FArchiveExt; end; procedure TfrmPackDlg.cbCreateSFXClick(Sender: TObject); var State: Boolean; begin if cbCreateSFX.Tag = 0 then begin cbCreateSFX.Tag:= 1; // Save check box state State:= cbCreateSFX.Checked; if State then FArchiveExt:= GetSfxExt else FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); // Switch archiver options SwitchOptions(False); // Restore check box state cbCreateSFX.Checked:= State; cbCreateSFX.Tag:= 0; end; end; procedure TfrmPackDlg.cbOtherPluginsChange(Sender: TObject); begin if cbOtherPlugins.Checked then begin FArchiveType:= cbPackerList.Text; FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); rgPacker.ItemIndex := -1; end else begin if rgPacker.ItemIndex = -1 then rgPacker.ItemIndex := 0; end; FCustomParams:= EmptyStr; cbPackerList.Enabled := cbOtherPlugins.Checked; SwitchOptions(True); end; procedure TfrmPackDlg.cbPutInTarFirstChange(Sender: TObject); begin if cbPutInTarFirst.Checked then begin FTarExt:= TAR_EXT; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, TAR_EXT + FArchiveExt); end else begin FTarExt:= EmptyStr; edtPackCmd.Text := StringReplace(edtPackCmd.Text, TAR_EXT + FArchiveExt, FArchiveExt, [rfIgnoreCase]); end; end; procedure TfrmPackDlg.edtPackCmdAcceptDirectory(Sender: TObject; var Value: String); begin Value := IncludeTrailingPathDelimiter(Value) + ExtractFileName(edtPackCmd.Text); end; procedure TfrmPackDlg.arbChange(Sender: TObject); begin if rgPacker.ItemIndex >= 0 then begin FArchiveType:= rgPacker.Items[rgPacker.ItemIndex]; FArchiveExt:= ExtensionSeparator + FArchiveType; edtPackCmd.Text := ChangeFileExt(edtPackCmd.Text, FArchiveExt); cbOtherPlugins.Checked := False; end; FCustomParams:= EmptyStr; SwitchOptions(True); end; procedure TfrmPackDlg.SwitchOptions(ArcTypeChange: Boolean); // Ugly but working var I: LongInt; sCmd: String; begin if ArcTypeChange then begin // Reset some options cbCreateSFX.Checked:= False; end; // WCX plugins for I:= 0 to gWCXPlugins.Count - 1 do if gWCXPlugins.Enabled[I] and (gWCXPlugins.Ext[I] = FArchiveType) then begin // If plugin supports packing with password EnableControl(cbEncrypt, ((gWCXPlugins.Flags[I] and PK_CAPS_ENCRYPT) <> 0)); // If archive can not contain multiple files if ((gWCXPlugins.Flags[I] and PK_CAPS_MULTIPLE) = 0) then begin // If file list contain directory then // put to the tar archive first is needed if not FHasFolder then cbCreateSeparateArchives.Checked:= True else begin cbPutInTarFirst.Checked:= True; EnableControl(cbPutInTarFirst, False); end; end else begin cbPutInTarFirst.Checked:= False; EnableControl(cbPutInTarFirst, True); cbCreateSeparateArchives.Checked:= False; end; // Options that supported by plugins EnableControl(cbStoreDir, True); // Options that don't supported by plugins EnableControl(cbMultivolume, False); Exit; end; // MultiArc addons for I := 0 to gMultiArcList.Count - 1 do with gMultiArcList.Items[I] do begin if FEnabled and MatchesMaskList(FArchiveType, FExtension, ',') then begin // Archive can contain multiple files cbCreateSeparateArchives.Checked:= False; // If addon supports create self extracting archive EnableControl(cbCreateSFX, (Length(FAddSelfExtract) <> 0)); if cbCreateSFX.Enabled and cbCreateSFX.Checked then sCmd:= FAddSelfExtract else sCmd:= FAdd; // If addon supports create multi volume archive EnableControl(cbMultivolume, (Pos('%V', sCmd) <> 0)); // If addon supports packing with password EnableControl(cbEncrypt, (Pos('%W', sCmd) <> 0)); // Options that supported by addons EnableControl(cbPutInTarFirst, True); // Options that don't supported by addons cbStoreDir.Checked:= True; EnableControl(cbStoreDir, False); Exit; end; end; end; procedure TfrmPackDlg.AddArchiveType(const FileExt, ArcType: String); var iIndex: Integer; begin // First 9 plugins we display as RadioButtons if FArchiveTypeCount < 9 then begin iIndex := rgPacker.Items.Add(ArcType); if FExistsArchive then begin if (FileExt = ArcType) then rgPacker.ItemIndex := iIndex else rgPacker.Controls[iIndex + 1].Enabled := False; end else if (gLastUsedPacker = ArcType) then begin rgPacker.ItemIndex := iIndex; end; FArchiveTypeCount := FArchiveTypeCount + 1; end else // Other plugins we add in ComboBox begin iIndex := cbPackerList.Items.Add(ArcType); if (gLastUsedPacker = ArcType) or (FExistsArchive and (FileExt = ArcType)) then begin cbPackerList.ItemIndex := iIndex; cbOtherPlugins.Checked := True; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/feditsearch.pas�����������������������������������������������������������������0000644�0001750�0000144�00000033513�12532643273�016306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Search & Replace dialog for lazarus converted from SynEdit by Radek Cervinka, radek.cervinka@centrum.cz 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 Library General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. based on SynEdit demo, original license: ------------------------------------------------------------------------------- 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. The Original Code is: dlgSearchText.pas, released 2000-06-23. The Original Code is part of the SearchReplaceDemo project, written by Michael Hieke for the SynEdit component suite. All Rights Reserved. Contributors to the SynEdit project are listed in the Contributors.txt file. Alternatively, the contents of this file may be used under the terms of the GNU General Public License Version 2 or later (the "GPL"), in which case the provisions of the GPL are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the GPL and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the GPL. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the GPL. $Id: dlgSearchText.pas,v 1.3 2002/08/01 05:44:05 etrusco Exp $ You may retrieve the latest version of this file at the SynEdit home page, located at http://SynEdit.SourceForge.net Known Issues: -------------------------------------------------------------------------------} unit fEditSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, ExtCtrls, Buttons, uOSForms, DCClassesUtf8; type { TEditSearchDialogOption } //Not only it helps to show what we want to offer to user, it will help to determine the default //When used as parameters of function, place on required. //When used as a returned value, we'll include the status of all. TEditSearchDialogOption = set of (eswoCaseSensitiveChecked, eswoCaseSensitiveUnchecked, eswoWholeWordChecked, eswoWholeWordUnchecked, eswoSelectedTextChecked, eswoSelectedTextUnchecked, eswoSearchFromCursorChecked, eswoSearchFromCursorUnchecked, eswoRegularExpressChecked, eswoRegularExpressUnchecked, eswoDirectionDisabled, eswoDirectionEnabledForward, eswoDirectionEnabledBackward); { TfrmEditSearchReplace } TfrmEditSearchReplace = class(TModalForm) btnOK: TBitBtn; btnCancel: TBitBtn; cbSearchText: TComboBox; cbSearchCaseSensitive: TCheckBox; cbSearchWholeWords: TCheckBox; cbSearchSelectedOnly: TCheckBox; cbSearchFromCursor: TCheckBox; cbSearchRegExp: TCheckBox; cbReplaceText: TComboBox; gbSearchOptions: TGroupBox; lblReplaceWith: TLabel; lblSearchFor: TLabel; rgSearchDirection: TRadioGroup; procedure btnOKClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); private function GetSearchBackwards: boolean; function GetSearchCaseSensitive: boolean; function GetSearchFromCursor: boolean; function GetSearchInSelection: boolean; function GetSearchText: string; function GetSearchTextHistory: string; function GetSearchWholeWords: boolean; function GetSearchRegExp: boolean; function GetReplaceText: string; function GetReplaceTextHistory: string; procedure SetSearchBackwards(Value: boolean); procedure SetSearchCaseSensitive(Value: boolean); procedure SetSearchFromCursor(Value: boolean); procedure SetSearchInSelection(Value: boolean); procedure SetSearchText(Value: string); procedure SetSearchTextHistory(Value: string); procedure SetSearchWholeWords(Value: boolean); procedure SetSearchRegExp(Value: boolean); procedure SetReplaceText(Value: string); procedure SetReplaceTextHistory(Value: string); public constructor Create(AOwner: TComponent; AReplace: Boolean); reintroduce; property SearchBackwards: boolean read GetSearchBackwards write SetSearchBackwards; property SearchCaseSensitive: boolean read GetSearchCaseSensitive write SetSearchCaseSensitive; property SearchFromCursor: boolean read GetSearchFromCursor write SetSearchFromCursor; property SearchInSelectionOnly: boolean read GetSearchInSelection write SetSearchInSelection; property SearchText: string read GetSearchText write SetSearchText; property SearchTextHistory: string read GetSearchTextHistory write SetSearchTextHistory; property SearchWholeWords: boolean read GetSearchWholeWords write SetSearchWholeWords; property SearchRegExp: boolean read GetSearchRegExp write SetSearchRegExp; property ReplaceText: string read GetReplaceText write SetReplaceText; property ReplaceTextHistory: string read GetReplaceTextHistory write SetReplaceTextHistory; end; function GetSimpleSearchAndReplaceString(AOwner:TComponent; OptionAllowed:TEditSearchDialogOption; var sSearchText:string; var sReplaceText:string; var OptionsToReturn:TEditSearchDialogOption; PastSearchList:TStringListEx; PastReplaceList:TStringListEx):boolean; implementation {$R *.lfm} uses math, uGlobs, uLng, uDCUtils; function GetSimpleSearchAndReplaceString(AOwner:TComponent; OptionAllowed:TEditSearchDialogOption; var sSearchText:string; var sReplaceText:string; var OptionsToReturn:TEditSearchDialogOption; PastSearchList:TStringListEx; PastReplaceList:TStringListEx):boolean; var dlg: TfrmEditSearchReplace; begin result:=FALSE; OptionsToReturn:=[]; dlg := TfrmEditSearchReplace.Create(AOwner, TRUE); try with dlg do begin //1. Let's enable to options host wanted to offer to user cbSearchCaseSensitive.Enabled := ((eswoCaseSensitiveChecked in OptionAllowed) OR (eswoCaseSensitiveUnchecked in OptionAllowed)); cbSearchWholeWords.Enabled := ((eswoWholeWordChecked in OptionAllowed) OR (eswoWholeWordUnchecked in OptionAllowed)); cbSearchSelectedOnly.Enabled := ((eswoSelectedTextChecked in OptionAllowed) OR (eswoSelectedTextUnchecked in OptionAllowed)); cbSearchFromCursor.Enabled := ((eswoSearchFromCursorChecked in OptionAllowed) OR (eswoSearchFromCursorUnchecked in OptionAllowed)); cbSearchRegExp.Enabled := ((eswoRegularExpressChecked in OptionAllowed) OR (eswoRegularExpressUnchecked in OptionAllowed)); rgSearchDirection.Enabled := ((eswoDirectionEnabledForward in OptionAllowed) OR (eswoDirectionEnabledBackward in OptionAllowed)); //2. Let's set the option to their default according to what host wants to offer cbSearchCaseSensitive.Checked := (eswoCaseSensitiveChecked in OptionAllowed); cbSearchWholeWords.Checked := (eswoWholeWordChecked in OptionAllowed); cbSearchSelectedOnly.Checked := (eswoSelectedTextChecked in OptionAllowed); cbSearchFromCursor.Checked := (eswoSearchFromCursorChecked in OptionAllowed); cbSearchRegExp.Checked := (eswoRegularExpressChecked in OptionAllowed); rgSearchDirection.ItemIndex:=ifthen((eswoDirectionEnabledBackward in OptionAllowed),1,0); //3. Setup the SEARCH info if sSearchText='' then sSearchText:=rsEditSearchCaption; SearchTextHistory:=PastSearchList.Text; cbSearchText.Text:=sSearchText; //4. Setup the REPLACE info if sReplaceText='' then sReplaceText:=rsEditSearchReplace; ReplaceTextHistory:=PastReplaceList.Text; cbReplaceText.Text:=sReplaceText; //5. Get feedback from user if ShowModal=mrOk then begin //6. Let's set the options wanted by the user if cbSearchCaseSensitive.Enabled then if cbSearchCaseSensitive.Checked then OptionsToReturn:=OptionsToReturn+[eswoCaseSensitiveChecked] else OptionsToReturn:=OptionsToReturn+[eswoCaseSensitiveUnchecked]; if cbSearchWholeWords.Enabled then if cbSearchWholeWords.Checked then OptionsToReturn:=OptionsToReturn+[eswoWholeWordChecked] else OptionsToReturn:=OptionsToReturn+[eswoWholeWordUnchecked]; if cbSearchSelectedOnly.Enabled then if cbSearchSelectedOnly.Checked then OptionsToReturn:=OptionsToReturn+[eswoSelectedTextChecked] else OptionsToReturn:=OptionsToReturn+[eswoSelectedTextUnchecked]; if cbSearchFromCursor.Enabled then if cbSearchFromCursor.Checked then OptionsToReturn:=OptionsToReturn+[eswoSearchFromCursorChecked] else OptionsToReturn:=OptionsToReturn+[eswoSearchFromCursorUnchecked]; if cbSearchRegExp.Enabled then if cbSearchRegExp.Checked then OptionsToReturn:=OptionsToReturn+[eswoRegularExpressChecked] else OptionsToReturn:=OptionsToReturn+[eswoRegularExpressUnchecked]; if rgSearchDirection.Enabled then if rgSearchDirection.ItemIndex=1 then OptionsToReturn:=OptionsToReturn+[eswoDirectionEnabledBackward] else OptionsToReturn:=OptionsToReturn+[eswoDirectionEnabledForward]; //7. Let's set our history PastSearchList.Text:=SearchTextHistory; PastReplaceList.Text:=ReplaceTextHistory; //8. And FINALLY, our valuable text to search we wanted to replace! sSearchText:=cbSearchText.Text; sReplaceText:=cbReplaceText.Text; result:=((sSearchText<>sReplaceText) AND (sSearchText<>'')); end; end; finally FreeAndNil(Dlg); end; end; { TfrmEditSearchReplace } procedure TfrmEditSearchReplace.btnOKClick(Sender: TObject); begin InsertFirstItem(cbSearchText.Text, cbSearchText); ModalResult := mrOK end; procedure TfrmEditSearchReplace.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if ModalResult = mrOK then InsertFirstItem(cbReplaceText.Text, cbReplaceText); end; procedure TfrmEditSearchReplace.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; procedure TfrmEditSearchReplace.FormShow(Sender: TObject); begin if cbSearchText.Text = EmptyStr then begin if cbSearchText.Items.Count > 0 then cbSearchText.Text:= cbSearchText.Items[0]; end; cbSearchText.SelectAll; end; function TfrmEditSearchReplace.GetSearchBackwards: boolean; begin Result := rgSearchDirection.ItemIndex = 1; end; function TfrmEditSearchReplace.GetSearchCaseSensitive: boolean; begin Result := cbSearchCaseSensitive.Checked; end; function TfrmEditSearchReplace.GetSearchFromCursor: boolean; begin Result := cbSearchFromCursor.Checked; end; function TfrmEditSearchReplace.GetSearchInSelection: boolean; begin Result := cbSearchSelectedOnly.Checked; end; function TfrmEditSearchReplace.GetSearchText: string; begin Result := cbSearchText.Text; end; function TfrmEditSearchReplace.GetSearchTextHistory: string; var i: integer; begin for i:= cbSearchText.Items.Count - 1 downto 25 do cbSearchText.Items.Delete(i); Result:=cbSearchText.Items.Text; end; function TfrmEditSearchReplace.GetSearchWholeWords: boolean; begin Result := cbSearchWholeWords.Checked; end; function TfrmEditSearchReplace.GetSearchRegExp: boolean; begin Result:= cbSearchRegExp.Checked; end; function TfrmEditSearchReplace.GetReplaceText: string; begin Result := cbReplaceText.Text; end; function TfrmEditSearchReplace.GetReplaceTextHistory: string; var i: integer; begin for i:= cbSearchText.Items.Count - 1 downto 25 do cbReplaceText.Items.Delete(i); Result:=cbReplaceText.Items.Text; end; procedure TfrmEditSearchReplace.SetSearchBackwards(Value: boolean); begin rgSearchDirection.ItemIndex := Ord(Value); end; procedure TfrmEditSearchReplace.SetSearchCaseSensitive(Value: boolean); begin cbSearchCaseSensitive.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchFromCursor(Value: boolean); begin cbSearchFromCursor.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchInSelection(Value: boolean); begin cbSearchSelectedOnly.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchText(Value: string); begin cbSearchText.Text := Value; end; procedure TfrmEditSearchReplace.SetSearchTextHistory(Value: string); begin cbSearchText.Items.Text := Value; end; procedure TfrmEditSearchReplace.SetSearchWholeWords(Value: boolean); begin cbSearchWholeWords.Checked := Value; end; procedure TfrmEditSearchReplace.SetSearchRegExp(Value: boolean); begin cbSearchRegExp.Checked:= Value; end; procedure TfrmEditSearchReplace.SetReplaceText(Value: string); begin cbReplaceText.Items.Text := Value; end; procedure TfrmEditSearchReplace.SetReplaceTextHistory(Value: string); begin cbReplaceText.Items.Text := Value; end; constructor TfrmEditSearchReplace.Create(AOwner: TComponent; AReplace: Boolean); begin inherited Create(AOwner); if AReplace then begin Caption:= rsEditSearchReplace; lblReplaceWith.Visible:= True; cbReplaceText.Visible:= True; end else begin Caption:= rsEditSearchCaption; lblReplaceWith.Visible:= False; cbReplaceText.Visible:= False; Height:= Height - cbReplaceText.Height; end; rgSearchDirection.Items.Strings[0]:= rsEditSearchFrw; rgSearchDirection.Items.Strings[1]:= rsEditSearchBack; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fattributesedit.lfm�������������������������������������������������������������0000644�0001750�0000144�00000034022�12023046500�017177� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmAttributesEdit: TfrmAttributesEdit Left = 388 Height = 284 Top = 144 Width = 329 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsSizeToolWin Caption = 'Choose attributes' ClientHeight = 284 ClientWidth = 329 FormStyle = fsStayOnTop Position = poOwnerFormCenter ShowInTaskBar = stNever LCLVersion = '1.1' object pnlTopAttrs: TPanel Left = 0 Height = 23 Top = 5 Width = 329 Align = alTop AutoSize = True BorderSpacing.Top = 5 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 23 ClientWidth = 329 TabOrder = 0 object cbSymlink: TCheckBox Left = 58 Height = 23 Top = 0 Width = 72 AllowGrayed = True Caption = '&Symlink' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbDirectory: TCheckBox Left = 188 Height = 23 Top = 0 Width = 84 AllowGrayed = True Caption = '&Directory' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end end object pnlUnixAttrs: TPanel Left = 10 Height = 181 Top = 28 Width = 309 Align = alClient BorderSpacing.Left = 10 BorderSpacing.Right = 10 BevelOuter = bvNone ClientHeight = 181 ClientWidth = 309 TabOrder = 1 Visible = False object lblAttrOwnerStr: TLabel AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 33 Width = 46 Caption = 'Owner' ParentColor = False end object lblWrite: TLabel AnchorSideTop.Side = asrBottom Left = 176 Height = 18 Top = 8 Width = 38 BorderSpacing.Top = 8 Caption = 'Write' ParentColor = False end object lblRead: TLabel AnchorSideTop.Side = asrBottom Left = 104 Height = 18 Top = 8 Width = 32 BorderSpacing.Top = 8 Caption = 'Read' ParentColor = False end object lblExec: TLabel AnchorSideTop.Side = asrBottom Left = 240 Height = 18 Top = 8 Width = 53 BorderSpacing.Top = 8 Caption = 'Execute' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 59 Width = 41 Caption = 'Group' ParentColor = False end object lblAttrOtherStr: TLabel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 85 Width = 40 Caption = 'Other' ParentColor = False end object lblAttrBitsStr: TLabel AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 8 Height = 18 Top = 112 Width = 29 Caption = 'Bits:' ParentColor = False end object cbReadOwner: TCheckBox AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = lblWrite AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbExecOwner: TCheckBox AnchorSideTop.Control = lblExec AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 32 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbReadGroup: TCheckBox AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideTop.Control = cbWriteOwner AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideTop.Control = cbExecOwner AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 58 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 5 end object cbReadOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 112 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideTop.Control = cbWriteGroup AnchorSideTop.Side = asrBottom Left = 184 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 256 Height = 20 Top = 84 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 8 end object cbSuid: TCheckBox AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 110 Width = 57 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SUID' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 9 end object cbSgid: TCheckBox AnchorSideTop.Control = cbWriteOther AnchorSideTop.Side = asrBottom Left = 184 Height = 23 Top = 110 Width = 58 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SGID' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 10 end object cbSticky: TCheckBox AnchorSideTop.Control = cbExecOther AnchorSideTop.Side = asrBottom Left = 256 Height = 23 Top = 110 Width = 61 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'Sticky' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 11 end end object pnlWinAttrs: TPanel Left = 10 Height = 181 Top = 28 Width = 309 Align = alClient AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Right = 10 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 10 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 181 ClientWidth = 309 TabOrder = 2 Visible = False object gbWinGeneral: TGroupBox Left = 0 Height = 181 Top = 0 Width = 150 AutoSize = True Caption = 'General attributes' ChildSizing.LeftRightSpacing = 5 ChildSizing.TopBottomSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 158 ClientWidth = 146 Constraints.MinWidth = 150 TabOrder = 0 object cbArchive: TCheckBox Left = 30 Height = 23 Top = 12 Width = 86 AllowGrayed = True Caption = '&Archive' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbReadOnly: TCheckBox Left = 30 Height = 23 Top = 47 Width = 86 AllowGrayed = True Caption = 'Read o&nly' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbHidden: TCheckBox Left = 30 Height = 23 Top = 82 Width = 86 AllowGrayed = True Caption = '&Hidden' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbSystem: TCheckBox Left = 30 Height = 23 Top = 117 Width = 86 AllowGrayed = True Caption = 'S&ystem' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end end object gbNtfsAttributes: TGroupBox Left = 160 Height = 181 Top = 0 Width = 150 AutoSize = True Caption = 'NTFS attributes' ChildSizing.LeftRightSpacing = 5 ChildSizing.TopBottomSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 158 ClientWidth = 146 Constraints.MinWidth = 150 TabOrder = 1 object cbCompressed: TCheckBox Left = 22 Height = 23 Top = 12 Width = 103 AllowGrayed = True Caption = 'Co&mpressed' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 0 end object cbEncrypted: TCheckBox Left = 22 Height = 23 Top = 47 Width = 103 AllowGrayed = True Caption = '&Encrypted' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 1 end object cbTemporary: TCheckBox Left = 22 Height = 23 Top = 82 Width = 103 AllowGrayed = True Caption = '&Temporary' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 2 end object cbSparse: TCheckBox Left = 22 Height = 23 Top = 117 Width = 103 AllowGrayed = True Caption = 'S&parse' OnChange = cbAttrCheckBoxChanged OnClick = cbAttrCheckBoxClicked State = cbGrayed TabOrder = 3 end end end object pnlTextAttrs: TPanel Left = 10 Height = 28 Top = 214 Width = 309 Align = alBottom AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Top = 5 BorderSpacing.Right = 10 BevelOuter = bvNone ClientHeight = 28 ClientWidth = 309 TabOrder = 3 object lblTextAttrs: TLabel AnchorSideLeft.Control = pnlTextAttrs AnchorSideTop.Control = pnlTextAttrs AnchorSideTop.Side = asrCenter Left = 0 Height = 18 Top = 5 Width = 53 Caption = 'As te&xt:' FocusControl = edtTextAttrs ParentColor = False end object edtTextAttrs: TEdit AnchorSideLeft.Control = lblTextAttrs AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTextAttrs AnchorSideRight.Side = asrBottom Left = 63 Height = 28 Top = 0 Width = 246 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ReadOnly = True TabOrder = 0 end end object pnlButtons: TPanel Left = 5 Height = 32 Top = 247 Width = 319 Align = alBottom AutoSize = True BorderSpacing.Around = 5 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 10 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 32 ClientWidth = 319 TabOrder = 4 object btnReset: TButton Left = 0 Height = 32 Top = 0 Width = 87 Caption = '&Reset' OnClick = btnResetClick TabOrder = 0 end object btnOk: TBitBtn Left = 97 Height = 32 Top = 0 Width = 94 Caption = '&OK' Constraints.MinHeight = 30 Kind = bkOK ModalResult = 1 OnClick = btnOkClick TabOrder = 1 end object btnCancel: TBitBtn Left = 201 Height = 32 Top = 0 Width = 118 Caption = '&Cancel' Constraints.MinHeight = 30 Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 2 end end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmaskinputdlg.lrt���������������������������������������������������������������0000644�0001750�0000144�00000000325�12023046500�016667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMASKINPUTDLG.LBLSEARCHTEMPLATE.CAPTION=O&r select predefined selection type: TFRMMASKINPUTDLG.BTNOK.CAPTION=&OK TFRMMASKINPUTDLG.BTNCANCEL.CAPTION=&Cancel TFRMMASKINPUTDLG.BTNDEFINETEMPLATE.CAPTION=&Define... �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fFindDlg.lrt��������������������������������������������������������������������0000644�0001750�0000144�00000006054�12673215117�015516� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMFINDDLG.CAPTION=Find files TFRMFINDDLG.TSSTANDARD.CAPTION=Standard TFRMFINDDLG.GBDIRECTORIES.CAPTION=Directories TFRMFINDDLG.LBLFINDPATHSTART.CAPTION=Start in &directory TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION=Follow s&ymlinks TFRMFINDDLG.LBLEXCLUDEDIRECTORIES.CAPTION=E&xclude subdirectories TFRMFINDDLG.CMBEXCLUDEDIRECTORIES.HINT=Enter directories names that should be excluded from search separated with ";" TFRMFINDDLG.LBLSEARCHDEPTH.CAPTION=Search su&bdirectories: TFRMFINDDLG.CBSELECTEDFILES.CAPTION=Selected directories and &files TFRMFINDDLG.GBFILES.CAPTION=Files TFRMFINDDLG.LBLFINDFILEMASK.CAPTION=&File mask TFRMFINDDLG.CMBFINDFILEMASK.HINT=Enter files names separated with ";" TFRMFINDDLG.CMBFINDFILEMASK.TEXT=* TFRMFINDDLG.LBLEXCLUDEFILES.CAPTION=&Exclude files TFRMFINDDLG.CMBEXCLUDEFILES.HINT=Enter files names that should be excluded from search separated with ";" TFRMFINDDLG.CBPARTIALNAMESEARCH.CAPTION=Searc&h for part of file name TFRMFINDDLG.CBREGEXP.CAPTION=&Regular expression TFRMFINDDLG.CBFINDINARCHIVE.CAPTION=Search in &archives TFRMFINDDLG.GBFINDDATA.CAPTION=Find Data TFRMFINDDLG.LBLENCODING.CAPTION=Encodin&g: TFRMFINDDLG.CBCASESENS.CAPTION=Case sens&itive TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION=Find files N&OT containing the text TFRMFINDDLG.CBFINDTEXT.CAPTION=Find &text in file TFRMFINDDLG.CBREPLACETEXT.CAPTION=Re&place by TFRMFINDDLG.CBTEXTREGEXP.CAPTION=Regular &expression TFRMFINDDLG.TSADVANCED.CAPTION=Advanced TFRMFINDDLG.CBDATEFROM.CAPTION=&Date from: TFRMFINDDLG.CBNOTOLDERTHAN.CAPTION=N&ot older than: TFRMFINDDLG.CBFILESIZEFROM.CAPTION=S&ize from: TFRMFINDDLG.CBDATETO.CAPTION=Dat&e to: TFRMFINDDLG.CBFILESIZETO.CAPTION=Si&ze to: TFRMFINDDLG.CBTIMEFROM.CAPTION=&Time from: TFRMFINDDLG.CBTIMETO.CAPTION=Ti&me to: TFRMFINDDLG.LBLATTRIBUTES.CAPTION=Attri&butes TFRMFINDDLG.BTNADDATTRIBUTE.CAPTION=&Add TFRMFINDDLG.BTNATTRSHELP.CAPTION=&Help TFRMFINDDLG.TSPLUGINS.CAPTION=Plugins TFRMFINDDLG.CBUSEPLUGIN.CAPTION=&Use search plugin: TFRMFINDDLG.TSLOADSAVE.CAPTION=Load/Save TFRMFINDDLG.LBLTEMPLATEHEADER.CAPTION=&Previous searches: TFRMFINDDLG.BTNSEARCHLOAD.CAPTION=L&oad TFRMFINDDLG.BTNSEARCHSAVE.CAPTION=S&ave TFRMFINDDLG.BTNSEARCHSAVEWITHSTARTINGPATH.HINT=If saved then "Start in directory" will be restored when loading template. Use it if you want to fix searching to a certain directory TFRMFINDDLG.BTNSEARCHSAVEWITHSTARTINGPATH.CAPTION=Sa&ve with "Start in directory" TFRMFINDDLG.BTNSEARCHDELETE.CAPTION=&Delete TFRMFINDDLG.TSRESULTS.CAPTION=Results TFRMFINDDLG.BTNWORKWITHFOUND.CAPTION=Feed to &listbox TFRMFINDDLG.BTNGOTOPATH.CAPTION=&Go to file TFRMFINDDLG.BTNVIEW.CAPTION=&View TFRMFINDDLG.BTNEDIT.CAPTION=&Edit TFRMFINDDLG.BTNUSETEMPLATE.CAPTION=Use template TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION=&Save TFRMFINDDLG.BTNSTART.CAPTION=&Start TFRMFINDDLG.BTNSTOP.CAPTION=C&ancel TFRMFINDDLG.BTNCLOSE.CAPTION=&Close TFRMFINDDLG.BTNNEWSEARCH.CAPTION=&New search TFRMFINDDLG.BTNLASTSEARCH.CAPTION=&Last search TFRMFINDDLG.MISHOWINVIEWER.CAPTION=Show In Viewer TFRMFINDDLG.MIREMOVEFROMLLIST.CAPTION=Remove from list TFRMFINDDLG.MISHOWALLFOUND.CAPTION=Show all found items ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fviewoperations.lfm�������������������������������������������������������������0000644�0001750�0000144�00000015035�12023046500�017224� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmViewOperations: TfrmViewOperations Left = 18 Height = 353 Top = 117 Width = 507 ActiveControl = tvOperations Caption = 'File operations' ClientHeight = 353 ClientWidth = 507 Constraints.MinHeight = 100 Constraints.MinWidth = 300 OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState;cbAlwaysOnTop.Checked' LCLVersion = '1.1' object pnlHeader: TPanel Left = 0 Height = 64 Top = 0 Width = 507 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 64 ClientWidth = 507 TabOrder = 0 object pnlTopHeader: TPanel AnchorSideLeft.Control = pnlHeader AnchorSideTop.Control = pnlHeader AnchorSideRight.Control = pnlHeader AnchorSideRight.Side = asrBottom Left = 0 Height = 40 Top = 0 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BevelOuter = bvNone ClientHeight = 40 ClientWidth = 507 TabOrder = 0 object tbPauseAll: TToggleBox AnchorSideLeft.Control = pnlTopHeader AnchorSideTop.Control = pnlTopHeader AnchorSideBottom.Control = pnlTopHeader AnchorSideBottom.Side = asrBottom Left = 0 Height = 40 Top = 0 Width = 70 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Right = 40 Caption = '&Pause all' OnChange = tbPauseAllChange TabOrder = 0 end object btnStop: TBitBtn AnchorSideLeft.Control = tbPauseAll AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTopHeader AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 110 Height = 40 Top = 0 Width = 80 AutoSize = True Caption = 'S&top' Constraints.MinHeight = 40 Constraints.MinWidth = 80 Enabled = False OnClick = btnStopClick TabOrder = 1 end object btnStartPause: TBitBtn AnchorSideLeft.Control = btnStop AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlTopHeader AnchorSideBottom.Side = asrBottom Left = 200 Height = 40 Top = 0 Width = 80 AutoSize = True BorderSpacing.Left = 10 Caption = '&Start' Constraints.MinHeight = 40 Constraints.MinWidth = 80 Enabled = False OnClick = btnStartPauseClick TabOrder = 2 end end object lblUseDragDrop: TLabel AnchorSideLeft.Control = pnlHeader AnchorSideTop.Control = pnlTopHeader AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlHeader AnchorSideRight.Side = asrBottom Left = 10 Height = 18 Top = 43 Width = 487 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 3 BorderSpacing.Right = 10 BorderSpacing.Bottom = 3 Caption = '&Use "drag && drop" to move operations between queues' FocusControl = tvOperations ParentColor = False end object cbAlwaysOnTop: TCheckBox AnchorSideTop.Control = pnlTopHeader AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTopHeader AnchorSideRight.Side = asrBottom Left = 391 Height = 23 Top = 9 Width = 116 Anchors = [akTop, akRight] Caption = 'Always on top' OnChange = cbAlwaysOnTopChange TabOrder = 1 end end object tvOperations: TTreeView AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlHeader AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 289 Top = 64 Width = 507 Anchors = [akTop, akLeft, akRight, akBottom] AutoExpand = True DefaultItemHeight = 24 DragMode = dmAutomatic ExpandSignType = tvestArrow MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect] ReadOnly = True RowSelect = True ScrollBars = ssAutoVertical ShowLines = False TabOrder = 1 OnCustomDrawItem = tvOperationsCustomDrawItem OnDeletion = tvOperationsDeletion OnDragDrop = tvOperationsDragDrop OnDragOver = tvOperationsDragOver OnKeyDown = tvOperationsKeyDown OnMouseDown = tvOperationsMouseDown OnSelectionChanged = tvOperationsSelectionChanged Options = [tvoAllowMultiselect, tvoAutoExpand, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoRowSelect, tvoShowButtons, tvoShowRoot, tvoShowSeparators, tvoToolTips, tvoNoDoubleClickExpand, tvoThemedDraw] end object UpdateTimer: TTimer Interval = 100 OnTimer = OnUpdateTimer left = 112 top = 136 end object pmOperationPopup: TPopupMenu left = 224 top = 136 object mnuQueue: TMenuItem Caption = 'Queue' object mnuQueue0: TMenuItem Caption = 'Out of queue' OnClick = mnuQueueNumberClick end object mnuQueue1: TMenuItem Caption = 'Queue 1' OnClick = mnuQueueNumberClick end object mnuQueue2: TMenuItem Caption = 'Queue 2' OnClick = mnuQueueNumberClick end object mnuQueue3: TMenuItem Caption = 'Queue 3' OnClick = mnuQueueNumberClick end object mnuQueue4: TMenuItem Caption = 'Queue 4' OnClick = mnuQueueNumberClick end object mnuQueue5: TMenuItem Caption = 'Queue 5' OnClick = mnuQueueNumberClick end object mnuNewQueue: TMenuItem Caption = 'New queue' OnClick = mnuNewQueueClick end end object mnuOperationShowDetached: TMenuItem Caption = 'Show in detached window' OnClick = mnuOperationShowDetachedClick end object mnuPutFirstInQueue: TMenuItem Caption = 'Put first in queue' OnClick = mnuPutFirstInQueueClick end object mnuPutLastInQueue: TMenuItem Caption = 'Put last in queue' OnClick = mnuPutLastInQueueClick end object mnuCancelOperation: TMenuItem Caption = 'Cancel' OnClick = mnuCancelOperationClick end end object pmQueuePopup: TPopupMenu left = 224 top = 208 object mnuQueueShowDetached: TMenuItem Caption = 'Show in detached window' OnClick = mnuQueueShowDetachedClick end object mnuCancelQueue: TMenuItem Caption = 'Cancel' OnClick = mnuCancelQueueClick end end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwfxprototypes.pas��������������������������������������������������������������0000644�0001750�0000144�00000012377�11740433676�017200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uWFXprototypes; {$mode objfpc}{$H+} interface uses WfxPlugin; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} type { File system plugins API (version 2.0) for TC } {R} //Realized {U} //Unrealized { Mandatory } {R} TFsInit=function(PluginNr:Integer; pProgressProc:tProgressProc; pLogProc:tlogProc; pRequestProc:tRequestProc):integer; {R} TFsFindFirst=function(path :pchar;var FindData:tWIN32FINDDATA):thandle; {R} TFsFindNext=function(Hdl:thandle;var FindData:tWIN32FINDDATA):boolean; {R} TFsFindClose=function(Hdl:thandle):integer; { Optional } {R} TFsSetCryptCallback = procedure(pCryptProc:TCryptProc;CryptoNr,Flags:integer); {R} TFsMkDir = function(RemoteDir:pchar):boolean; {R} TFsGetFile = function(RemoteName,LocalName:pchar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; {R} TFsPutFile=function(LocalName,RemoteName:pchar;CopyFlags:integer):integer; {R} TFsDeleteFile=function(RemoteName:pchar):boolean; {R} TFsRemoveDir=function(RemoteName:pchar):boolean; {R} TFsStatusInfo = procedure(RemoteDir:pchar;InfoStartEnd,InfoOperation:integer); {R} TFsSetDefaultParams = procedure (dps:pFsDefaultParamStruct); {R} TFsExecuteFile=Function(MainWin:HWND;RemoteName,Verb:pchar):integer; {R} TFsGetDefRootName=procedure (DefRootName:pchar;maxlen:integer); //------------------------------------------------------ {R} TFsSetAttr=function (RemoteName:pchar;NewAttr:integer):boolean; {R} TFsSetTime=Function(RemoteName:pchar;CreationTime,LastAccessTime,LastWriteTime:PWfxFileTime):boolean; {U} TFsExtractCustomIcon=function(RemoteName:pchar;ExtractFlags:integer;var TheIcon:hicon):integer; {R} TFsRenMovFile= function(OldName,NewName:pchar; Move, OverWrite:boolean; ri:pRemoteInfo):Integer; {U} TFsDisconnect = function (DisconnectRoot:pchar):boolean; {U} TFsGetPreviewBitmap = function ( RemoteName:pchar; width,height:integer; ReturnedBitmap:HBITMAP):integer; {R} TFsLinksToLocalFiles = function:boolean; {R} TFsGetLocalName = function (RemoteName:pchar;maxlen:integer):boolean; //------------------------------------------------------ TFsGetBackgroundFlags = function: integer; //------------------------------------------------------ {R} TFsContentPluginUnloading = procedure; {U} TFsContentGetDetectString = procedure (DetectString:pchar;maxlen:integer); {U} TFsContentGetSupportedField = function (FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; {U} TFsContentGetValue = function (FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; {U} TFsContentSetDefaultParams = procedure (dps:pContentDefaultParamStruct); {U} TFsContentStopGetValue = procedure (FileName:pchar); {U} TFsContentGetDefaultSortOrder = function (FieldIndex:integer):integer; {U} TFsContentGetSupportedFieldFlags = function (FieldIndex:integer):integer; {U} TFsContentSetValue = function (FileName:pchar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; {U} TFsContentGetDefaultView = function (ViewContents,ViewHeaders,ViewWidths, ViewOptions:pchar;maxlen:integer):boolean; { Unicode } TFsInitW = function(PluginNr:integer;pProgressProcW:tProgressProcW;pLogProcW:tLogProcW; pRequestProcW:tRequestProcW):integer; TFsFindFirstW = function(path :pwidechar;var FindData:tWIN32FINDDATAW):thandle; TFsFindNextW = function(Hdl:thandle;var FindDataW:tWIN32FINDDATAW):bool; //------------------------------------------------------ TFsSetCryptCallbackW = procedure(CryptProcW:TCryptProcW;CryptoNr,Flags:integer); TFsMkDirW = function(RemoteDir:pwidechar):bool; TFsExecuteFileW = function(MainWin:HWND;RemoteName,Verb:pwidechar):integer; TFsRenMovFileW = function(OldName,NewName:pwidechar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; TFsGetFileW = function(RemoteName,LocalName:pwidechar;CopyFlags:integer; RemoteInfo:pRemoteInfo):integer; TFsPutFileW = function(LocalName,RemoteName:pwidechar;CopyFlags:integer):integer; TFsDeleteFileW = function(RemoteName:pwidechar):bool; TFsRemoveDirW = function(RemoteName:pwidechar):bool; TFsDisconnectW = function(DisconnectRoot:pwidechar):bool; TFsSetAttrW = function(RemoteName:pwidechar;NewAttr:integer):bool; TFsSetTimeW = function(RemoteName:pwidechar;CreationTime,LastAccessTime, LastWriteTime:PWfxFileTime):bool; TFsStatusInfoW = procedure(RemoteDir:pwidechar;InfoStartEnd,InfoOperation:integer); TFsExtractCustomIconW = function(RemoteName:pwidechar;ExtractFlags:integer; var TheIcon:hicon):integer; TFsGetPreviewBitmapW = function(RemoteName:pwidechar;width,height:integer; var ReturnedBitmap:hbitmap):integer; TFsGetLocalNameW = function(RemoteName:pwidechar;maxlen:integer):bool; //------------------------------------------------------ TFsContentGetValueW = function(FileName:pwidechar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; TFsContentStopGetValueW = procedure(FileName:pwidechar); TFsContentSetValueW = function(FileName:pwidechar;FieldIndex,UnitIndex,FieldType:integer; FieldValue:pbyte;flags:integer):integer; TFsContentGetDefaultViewW = function(ViewContents,ViewHeaders,ViewWidths, ViewOptions:pwidechar;maxlen:integer):bool; //------------------------------------------------------ {$CALLING DEFAULT} implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmaincommandsdlg.lfm������������������������������������������������������������0000644�0001750�0000144�00000024572�12467752466�017344� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmMainCommandsDlg: TfrmMainCommandsDlg Left = 77 Height = 350 Top = 189 Width = 600 HorzScrollBar.Page = 464 HorzScrollBar.Range = 369 VertScrollBar.Page = 301 VertScrollBar.Range = 227 ActiveControl = lbledtFilter BorderIcons = [biSystemMenu] Caption = 'Select your internal command' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 350 ClientWidth = 600 Constraints.MinHeight = 350 Constraints.MinWidth = 600 KeyPreview = True OnActivate = FormActivate OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'cbCategorySortOrNot.ItemIndex;cbCommandsSortOrNot.ItemIndex;Height;Width;cbSelectAllCategoryDefault.Checked' LCLVersion = '1.2.6.0' object lblCategory: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 34 Width = 59 Caption = '&Categories:' FocusControl = lbCategory ParentColor = False end object lblCommandName: TLabel AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 161 Height = 15 Top = 34 Width = 93 Caption = 'Command &name:' FocusControl = lbCommands ParentColor = False end object lblHint: TLabel AnchorSideLeft.Control = lblCommandName AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 411 Height = 15 Top = 34 Width = 26 BorderSpacing.Left = 250 Caption = 'Hint:' ParentColor = False end object lbCategory: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblCategory AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = cbCategorySortOrNot Left = 6 Height = 187 Top = 49 Width = 150 Anchors = [akTop, akLeft, akBottom] ItemHeight = 0 OnEnter = lbCategoryEnter OnExit = lbCategoryExit OnSelectionChange = lbCategorySelectionChange ScrollWidth = 134 TabOrder = 2 end object lbCommands: TListBox AnchorSideLeft.Control = lbCategory AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCommandName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCommandsSortOrNot Left = 161 Height = 187 Top = 49 Width = 433 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 5 ItemHeight = 0 OnDblClick = lbCommandsDblClick OnDrawItem = lbCommandsDrawItem OnEnter = lbCommandsEnter OnExit = lbCommandsExit OnKeyPress = lbCommandsKeyPress ScrollWidth = 445 Style = lbOwnerDrawFixed TabOrder = 1 end object lbledtFilter: TLabeledEdit AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = Owner Left = 161 Height = 23 Top = 6 Width = 136 BorderSpacing.Bottom = 5 EditLabel.AnchorSideTop.Control = lbledtFilter EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbledtFilter EditLabel.AnchorSideBottom.Control = lbledtFilter EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 129 EditLabel.Height = 15 EditLabel.Top = 10 EditLabel.Width = 29 EditLabel.Caption = '&Filter:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 0 OnChange = lbledtFilterChange OnEnter = lbledtFilterEnter OnExit = lbledtFilterExit end object btnOK: TBitBtn AnchorSideLeft.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCancel Left = 496 Height = 33 Top = 274 Width = 98 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 2 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 7 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 496 Height = 31 Top = 313 Width = 98 Anchors = [akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 8 end object cbCategorySortOrNot: TComboBox AnchorSideLeft.Control = lbCategory AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategory AnchorSideBottom.Control = gbSelection Left = 6 Height = 23 Top = 239 Width = 136 Anchors = [akLeft, akBottom] BorderSpacing.Top = 3 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Legacy sorted' 'A-Z sorted' ) OnChange = cbCategorySortOrNotChange Style = csDropDownList TabOrder = 3 Text = 'Legacy sorted' end object cbCommandsSortOrNot: TComboBox AnchorSideLeft.Control = lbCommands AnchorSideTop.Control = lbCommands AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = gbSelection Left = 161 Height = 23 Top = 239 Width = 136 Anchors = [akLeft, akBottom] BorderSpacing.Top = 3 BorderSpacing.Right = 5 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Legacy sorted' 'Sorted A-Z' ) OnChange = cbCommandsSortOrNotChange Style = csDropDownList TabOrder = 4 Text = 'Legacy sorted' end object gbSelection: TGroupBox AnchorSideLeft.Control = Owner AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 76 Top = 268 Width = 480 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 10 Caption = 'Selection:' ClientHeight = 58 ClientWidth = 476 TabOrder = 6 object lblSelectedCommand: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbSelection AnchorSideRight.Control = pnlImage Left = 373 Height = 15 Top = 0 Width = 53 Anchors = [akTop, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Caption = 'cm_name' Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandHint: TLabel AnchorSideTop.Control = lblSelectedCommand AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblSelectedCommand AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 402 Height = 15 Top = 15 Width = 24 Anchors = [akTop, akRight] BorderSpacing.Left = 10 Caption = 'Hint' Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandHelp: TLabel AnchorSideLeft.Control = pnlImage AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlImage AnchorSideTop.Side = asrBottom Cursor = crHandPoint Left = 444 Height = 15 Top = 40 Width = 25 BorderSpacing.Right = 10 BorderSpacing.Bottom = 3 Caption = 'Help' Font.Style = [fsUnderline] ParentColor = False ParentFont = False OnClick = lblSelectedCommandHelpClick OnMouseEnter = lblSelectedCommandHelpMouseEnter OnMouseLeave = lblSelectedCommandHelpMouseLeave end object lblSelectedCommandHotkey: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSelectedCommandHint AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblSelectedCommand AnchorSideRight.Side = asrBottom Left = 385 Height = 15 Top = 30 Width = 41 Anchors = [akTop, akRight] BorderSpacing.Left = 10 Caption = 'Hotkey' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object lblSelectedCommandCategory: TLabel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbSelection AnchorSideRight.Control = lblSelectedCommand Left = 315 Height = 15 Top = 0 Width = 48 Anchors = [akTop, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Caption = 'Category' ParentColor = False ParentFont = False OnClick = lblPlaceCaptionInClipClick end object pnlImage: TPanel AnchorSideTop.Control = gbSelection AnchorSideRight.Control = gbSelection AnchorSideRight.Side = asrBottom Left = 436 Height = 40 Top = 0 Width = 40 Anchors = [akTop, akRight] BevelOuter = bvNone ClientHeight = 40 ClientWidth = 40 TabOrder = 0 object imgCommandIcon: TImage AnchorSideLeft.Control = pnlImage AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlImage AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 4 Height = 32 Top = 4 Width = 32 BorderSpacing.Top = 3 BorderSpacing.Right = 10 OnDblClick = lbCommandsDblClick end end end object cbSelectAllCategoryDefault: TCheckBox AnchorSideLeft.Control = cbCommandsSortOrNot AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCommandsSortOrNot AnchorSideTop.Side = asrCenter Left = 302 Height = 19 Top = 241 Width = 179 Caption = 'Select all categories by default' Checked = True OnChange = cbSelectAllCategoryDefaultChange State = cbChecked TabOrder = 5 end object lblHotKey: TLabel AnchorSideLeft.Control = lblCommandName AnchorSideTop.Control = lbledtFilter AnchorSideTop.Side = asrBottom Left = 311 Height = 15 Top = 34 Width = 41 BorderSpacing.Left = 150 Caption = 'Hotkey:' Font.Color = clRed ParentColor = False ParentFont = False end end ��������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uGlobsPaths.pas�����������������������������������������������������������������0000644�0001750�0000144�00000003760�12612505011�016243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uGlobsPaths; interface var gpExePath : String = ''; // executable directory gpCfgDir : String = ''; // directory from which configuration files are used gpGlobalCfgDir : String = ''; // config dir global for all user gpCmdLineCfgDir : String = ''; // config dir passed on the command line gpLngDir : String = ''; // path to language *.po files gpPixmapPath : String = ''; // path to pixmaps gpCacheDir : String = ''; // cache directory //Global Configuration Filename const gcfExtensionAssociation : string = 'extassoc.xml'; procedure LoadPaths; procedure UpdateEnvironmentVariable; implementation uses SysUtils, FileUtil, uDebug, uOSUtils, DCOSUtils, DCStrUtils; function GetAppName : String; begin Result := 'doublecmd'; end; procedure UpdateEnvironmentVariable; begin mbSetEnvironmentVariable('COMMANDER_INI', gpCfgDir + 'doublecmd.xml'); end; procedure LoadPaths; begin OnGetApplicationName := @GetAppName; gpExePath := ExtractFilePath(TryReadAllLinks(ParamStrU(0))); DCDebug('Executable directory: ', gpExePath); gpGlobalCfgDir := gpExePath; if gpCmdLineCfgDir <> EmptyStr then begin if GetPathType(gpCmdLineCfgDir) <> ptAbsolute then gpCmdLineCfgDir := IncludeTrailingPathDelimiter(mbGetCurrentDir) + gpCmdLineCfgDir; gpCmdLineCfgDir := ExpandAbsolutePath(gpCmdLineCfgDir); gpCfgDir := gpCmdLineCfgDir; end else begin gpCfgDir := GetAppConfigDir; if gpCfgDir = EmptyStr then begin DCDebug('Warning: Cannot get user config directory.'); gpCfgDir := gpGlobalCfgDir; end; end; gpCfgDir := IncludeTrailingPathDelimiter(gpCfgDir); gpLngDir := gpExePath + 'language' + DirectorySeparator; gpPixmapPath := gpExePath + 'pixmaps' + DirectorySeparator; gpCacheDir := GetAppCacheDir; // set up environment variables UpdateEnvironmentVariable; mbSetEnvironmentVariable('COMMANDER_DRIVE', ExtractRootDir(gpExePath)); mbSetEnvironmentVariable('COMMANDER_PATH', ExcludeTrailingBackslash(gpExePath)); end; end. ����������������doublecmd-0.7.1/src/fhardlink.lfm�������������������������������������������������������������������0000644�0001750�0000144�00000005632�12076733100�015753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmHardLink: TfrmHardLink Left = 320 Height = 177 Top = 320 Width = 512 ActiveControl = edtLinkToCreate AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Create hard link' ClientHeight = 177 ClientWidth = 512 KeyPreview = True OnShow = FormShow Position = poScreenCenter LCLVersion = '1.0.4.0' object lblExistingFile: TLabel AnchorSideLeft.Control = edtExistingFile AnchorSideTop.Control = edtLinkToCreate AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 59 Width = 240 BorderSpacing.Top = 6 Caption = '&Destination that the link will point to' FocusControl = edtExistingFile ParentColor = False end object lblLinkToCreate: TLabel AnchorSideLeft.Control = edtLinkToCreate AnchorSideTop.Control = Owner Left = 6 Height = 16 Top = 6 Width = 69 BorderSpacing.Top = 6 Caption = '&Link name' FocusControl = edtLinkToCreate ParentColor = False end object edtExistingFile: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 81 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Constraints.MinWidth = 400 TabOrder = 1 end object edtLinkToCreate: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblLinkToCreate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 28 Width = 500 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Constraints.MinWidth = 400 TabOrder = 0 end object btnOK: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel Left = 300 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Control = edtExistingFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtExistingFile AnchorSideRight.Side = asrBottom Left = 406 Height = 36 Top = 118 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 3 end end ������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fchecksumcalc.lfm���������������������������������������������������������������0000644�0001750�0000144�00000005272�12567134601�016612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmCheckSumCalc: TfrmCheckSumCalc Left = 321 Height = 400 Top = 59 Width = 400 AutoSize = True BorderIcons = [biSystemMenu] Caption = 'Calculate checksum...' ClientHeight = 400 ClientWidth = 400 Constraints.MinHeight = 400 Constraints.MinWidth = 400 OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter SessionProperties = 'cbOpenAfterJobIsComplete.Checked;cbSeparateFile.Checked;lbHashAlgorithm.ItemIndex' inherited pnlContent: TPanel Height = 346 Width = 384 ClientHeight = 346 ClientWidth = 384 ParentColor = True object lblSaveTo: TLabel[0] Left = 0 Height = 15 Top = 0 Width = 130 Caption = '&Save checksum file(s) to:' FocusControl = edtSaveTo ParentColor = False end object edtSaveTo: TEdit[1] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = lblSaveTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 21 Width = 384 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 0 end object cbSeparateFile: TCheckBox[2] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = edtSaveTo AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 50 Width = 242 BorderSpacing.Top = 6 Caption = 'C&reate separate checksum file for each file' OnChange = cbSeparateFileChange TabOrder = 1 end object lbHashAlgorithm: TListBox[3] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = cbOpenAfterJobIsComplete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtSaveTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 0 Height = 244 Top = 100 Width = 384 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 ItemHeight = 0 OnSelectionChange = lbHashAlgorithmSelectionChange ScrollWidth = 150 TabOrder = 3 end object cbOpenAfterJobIsComplete: TCheckBox[4] AnchorSideLeft.Control = edtSaveTo AnchorSideTop.Control = cbSeparateFile AnchorSideTop.Side = asrBottom Left = 0 Height = 19 Top = 75 Width = 243 BorderSpacing.Top = 6 Caption = 'Open checksum file after job is completed' OnChange = cbSeparateFileChange TabOrder = 2 end end inherited pnlButtons: TPanel Top = 358 Width = 384 ClientWidth = 384 inherited btnCancel: TBitBtn Left = 202 end inherited btnOK: TBitBtn Left = 296 end end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udcutils.pas��������������������������������������������������������������������0000644�0001750�0000144�00000105365�12612505011�015650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Several useful functions Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) contributors: Radek Cervinka <radek.cervinka@centrum.cz> (cnvFormatFileSize and DivFileName functions) Tomas Bzatek <tbzatek@users.sourceforge.net> (QuoteStr, RemoveQuotation and SplitArgs functions) 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 uDCUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Controls, StdCtrls, ColorBox, {$IF DEFINED(UNIX)} DCBasicTypes, {$ENDIF} uFile, uTypes; const TextLineBreakValue: array[TTextLineBreakStyle] of String = (#10, #13#10, #13); {$IF DEFINED(UNIX)} NoQuotesSpecialChars = [' ', '"', '''', '(', ')', ':', '&', '!', '$', '*', '?', '=', '`', '\', #10]; DoubleQuotesSpecialChars = ['$', '\', '`', '"', #10]; {$ENDIF} {$IFDEF MSWINDOWS} VARDELIMITER='%'; VARDELIMITER_END='%'; {$ENDIF} {$IFDEF UNIX } VARDELIMITER='$'; VARDELIMITER_END=''; {$ENDIF} EnvVarCommanderPath = '%COMMANDER_PATH%'; // Using '%' for backward compatibility EnvVarConfigPath = '%DC_CONFIG_PATH%'; // Using '%' for backward compatibility EnvVarTodaysDate = VARDELIMITER + 'DC_TODAYSDATE' + VARDELIMITER_END; function GetCmdDirFromEnvVar(const sPath : String) : String; function SetCmdDirAsEnvVar(const sPath : String) : String; {en Replaces environment variables of form %<NAME>% with their values. Also replaces the internal "%COMMANDER_PATH%". } function ReplaceEnvVars(const sText: String): String; {en Replaces tilde ~ at the beginning of the string with home directory. } function ReplaceTilde(const Path: String): String; {en Expands the file name with environment variables by replacing them by absolute path. @param(sFileName File name to expand.) @returns(Absolute file name.) } function mbExpandFileName(const sFileName: String): String; {en Convert file size to string representation in floating format (Kb, Mb, Gb) @param(iSize File size) @param(ShortFormat If @true than short format is used, otherwise long format (bytes) is used.) @returns(File size in string representation) } function cnvFormatFileSize(iSize: Int64; FSF: TFileSizeFormat): String; function cnvFormatFileSize(iSize: Int64; FSF: Boolean): String; function cnvFormatFileSize(iSize: Int64): String; inline; {en Minimize file path @param(PathToMince File path) @param(Canvas Output canvas) @param(MaxLen Max length of path in pixels) @returns(Minimized file path) } function MinimizeFilePath(const PathToMince: String; Canvas: TCanvas; MaxLen: Integer): String; {en Checks if a filename matches any filename in the filelist or if it could be in any directory of the file list or any of their subdirectories. @param(Files List of files to which the filename must be matched.) @param(FileName Path to a file that will be matched. This may be absolute, relative or contain no path at all (only filename).) } function MatchesFileList(const Files: TFiles; FileName: String): Boolean; {en Checks if a file matches any mask in the masklist. @param(aFile File that will be matched.) @param(MaskList List of masks to which the file must be matched.) } function MatchesMaskListEx(const aFile: TFile; MaskList: TStringList): Boolean; {en Checks if a file or directory belongs in the specified path list. Only strings are compared, no file-system checks are done. @param(sBasePathList List of absolute paths where the path to check should be in.) @param(sPathToCheck Absolute path to file or directory to check.) @return(@true if sPathToCheck points to a directory or file in sBasePathList. @false otherwise.) } function IsInPathList(sBasePathList : String; sPathToCheck : String; ASeparator: AnsiChar = ';') : Boolean; {en Changes all the files' paths making them relative to 'sNewRootPath'. It is done by removing 'sNewRootPath' prefix from the paths and setting the general path (Files.Path) to sNewRootPath. @param(sNewRootPath Path that specifies new 'root' directory for all filenames.) @param(Files Contains list of files to change.) } procedure ChangeFileListRoot(sNewRootPath: String; Files: TFiles); {en Replace executable extension by system specific executable extension @param(sFileName File name) @returns(Executable name with system specific executable extension) } function FixExeExt(const sFileName: String): String; {en Delete quotes from string @param(Str String) } function TrimQuotes(const Str: String): String; function QuoteStr(const Str: String): String; function QuoteFilenameIfNecessary(const Str: String): String; function ConcatenateStrWithSpace(const Str: String; const Addition: String):string; {$IFDEF UNIX} function QuoteSingle(const Str: String): String; {$ENDIF} function QuoteDouble(const Str: String): String; {$IFDEF UNIX} {en Escapes characters to be inserted between single quotes (') and passed to shell command line. The resulting string is not enclosed with '', only escaped. For example <cmd1> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } function EscapeSingleQuotes(const Str: String): String; {en Escapes characters to be inserted between double quotes (") and passed to shell command line. The resulting string is not enclosed with "", only escaped. For example <cmd2> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } function EscapeDoubleQuotes(const Str: String): String; {en Escapes characters to be passed to shell command line when no quoting is used. For example <cmd3> needs to be escaped with this function: sh -c '<cmd1>' "<cmd2>" <cmd3> } function EscapeNoQuotes(const Str: String): String; {en Split command line parameters into argument array } procedure SplitCommandArgs(const Params: String; out Args: TDynamicStringArray); {$ENDIF} {en Delete quotation characters from string @param(Str String) @returns(String without quotation characters) } function RemoveQuotation(const Str: String): String; {$IF DEFINED(UNIX)} {en Split command line to command and a list of arguments. Each argument is unquoted. @param(sCmdLine Command line) @param(sCommand Command) @param(Args List of arguments) } procedure SplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray); {$ELSEIF DEFINED(MSWINDOWS)} {en Split command line to command and parameters @param(sCmdLine Command line) @param(sCmd Command) @param(sParams Parameters) } procedure SplitCmdLine(sCmdLine : String; var sCmd, sParams : String); {$ENDIF} function CompareStrings(const s1, s2: String; Natural: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox); {en Compares two strings taking into account the numbers. Strings must have tailing zeros (#0). } function StrFloatCmpW(str1, str2: PWideChar; CaseSensitivity: TCaseSensitivity): PtrInt; function EstimateRemainingTime(StartValue, CurrentValue, EndValue: Int64; StartTime: TDateTime; CurrentTime: TDateTime; out SpeedPerSecond: Int64): TDateTime; function ModColor(AColor: TColor; APercent: Byte) : TColor; {en Makes a color some darker @param(AColor Source color) @param(APercent The percentage of brightness decrease) @returns(New some darker color) } function DarkColor(AColor: TColor; APercent: Byte): TColor; {en Makes a color some lighter @param(AColor Source color) @param(APercent The percentage of brightness increase) @returns(New some lighter color) } function LightColor(AColor: TColor; APercent: Byte): TColor; procedure SetColorInColorBox(const lcbColorBox: TColorBox; const lColor: TColor); procedure UpdateColor(Control: TControl; Checked: Boolean); procedure EnableControl(Control: TControl; Enabled: Boolean); procedure SplitCmdLineToCmdParams(sCmdLine : String; var sCmd, sParams : String); function GuessLineBreakStyle(const S: String): TTextLineBreakStyle; function GetTextRange(Strings: TStrings; Start, Finish: Integer): String; implementation uses LCLProc, LCLType, uMasks, FileUtil, StrUtils, uOSUtils, uGlobs, uGlobsPaths, DCStrUtils, DCOSUtils; var dtLastDateSubstitutionCheck:TDateTime=0; function GetCmdDirFromEnvVar(const sPath: String): String; begin Result := NormalizePathDelimiters(sPath); Result := StringReplace(Result, EnvVarCommanderPath, ExcludeTrailingPathDelimiter(gpExePath), [rfIgnoreCase]); Result := StringReplace(Result, EnvVarConfigPath, ExcludeTrailingPathDelimiter(gpCfgDir), [rfIgnoreCase]); end; function SetCmdDirAsEnvVar(const sPath: String): String; begin Result := NormalizePathDelimiters(sPath); Result := StringReplace(Result, ExcludeTrailingPathDelimiter(gpExePath), EnvVarCommanderPath, []); Result := StringReplace(Result, ExcludeTrailingPathDelimiter(gpCfgDir), EnvVarConfigPath, []); end; function ReplaceEnvVars(const sText: String): String; var I: Integer; MyYear, MyMonth, MyDay:word; begin Result:= sText; //1st, if we have an empty string, get out of here, quick if sText = EmptyStr then Exit; //2th, let's check the "easy" substitution, there one related with Double Commander if pos('%', sText) > 0 then begin Result := StringReplace(Result, EnvVarCommanderPath, ExcludeTrailingPathDelimiter(gpExePath), [rfReplaceAll, rfIgnoreCase]); Result := StringReplace(Result, EnvVarConfigPath, ExcludeTrailingPathDelimiter(gpCfgDir), [rfReplaceAll, rfIgnoreCase]); end; //3nd, if we don't have the variable indication (% in windows for example), get out of here here, quick if pos(VARDELIMITER, sText) = 0 then Exit; //4rd, let's check if date changed since last time we updated our dc_todaysdate variable if dtLastDateSubstitutionCheck<>Trunc(now) then begin //Date changed! Let's find where variable is and update it. //Don't worry for time consumed: this is done only once per day! I:=0; while (I<gSpecialDirList.Count) do begin if gSpecialDirList.SpecialDir[I].VariableName=ENVVARTODAYSDATE then begin //Variable name found! Let's assign the new date to path value DecodeDate(now,MyYear,MyMonth,MyDay); gSpecialDirList.SpecialDir[I].PathValue:=Format('%d-%2.2d-%2.2d',[MyYear,MyMonth,MyDay]); I:=gSpecialDirList.Count; //To make sure we will end the search loop end; inc(I); end; dtLastDateSubstitutionCheck:=Trunc(now); //So we won't re-check this while we're under the same day end; //5th, let's roll through the possible variable. We did that with a "while" instead of a constant "for-loop" to get out quickly as soon as we solved the variables I:=0; while (I<gSpecialDirList.Count) AND (pos(VARDELIMITER,sText)<>0) do begin if pos(gSpecialDirList.SpecialDir[I].VariableName,Result)<>0 then Result := StringReplace(Result, gSpecialDirList.SpecialDir[I].VariableName, ExcludeTrailingPathDelimiter(gSpecialDirList.SpecialDir[I].PathValue), [rfReplaceAll, rfIgnoreCase]); inc(I); end; //6th, if we don't have variable indication anymore, (% in windows for example), get out of here here, quick if pos(VARDELIMITER, sText) = 0 then Exit; //7th, if still we have variable there, let's scan through the environment variable. // We got them in the "gSpecialDirList" but just in case some others were added on-the-fly // between the moment the application started and the moment we might needed them Result:= mbExpandEnvironmentStrings(Result); end; function ReplaceTilde(const Path: String): String; begin {$IFDEF UNIX} if StrBegins(Path, '~') and ((Length(Path) = 1) or (Path[2] = PathDelim)) then Result := GetHomeDir + Copy(Path, 2, MaxInt) else {$ENDIF} Result := Path; end; function mbExpandFileName(const sFileName: String): String; begin Result:= NormalizePathDelimiters(sFileName); Result:= ReplaceEnvVars(Result); if Pos(PathDelim, Result) <> 0 then Result:= ExpandFileName(Result); end; function cnvFormatFileSize(iSize: Int64; FSF: TFileSizeFormat): String; var d: Double; begin case FSF of fsfFloat: begin if iSize div (1024*1024*1024) > 0 then begin Result:=FloatToStrF((iSize*16 div (1024*1024*1024))/16, ffFixed, 15, 1)+' G' end else if iSize div (1024*1024) >0 then begin Result:=FloatToStrF((iSize*10 div (1024*1024))/10, ffFixed, 15, 1)+' M' end else if iSize div 1024 >0 then begin Result:=FloatToStrF((iSize*10 div 1024)/10, ffFixed, 15, 1)+' K' end else Result:=IntToStr(iSize); end; fsfB: begin d:=iSize; Result:=Format('%8.0n',[d]); end; fsfK: begin Result:=FloatToStrF((iSize*10 div 1024)/10, ffFixed, 15, 1)+' K' end; fsfM: begin Result:=FloatToStrF((iSize*10 div (1024*1024))/10, ffFixed, 15, 1)+' M' end; fsfG: begin Result:=FloatToStrF((iSize*16 div (1024*1024*1024))/16, ffFixed, 15, 1)+' G' end; end; end; function cnvFormatFileSize(iSize: Int64; FSF: Boolean): String; begin Result := cnvFormatFileSize(iSize, fsfFloat); end; function cnvFormatFileSize(iSize: Int64): String; begin Result := cnvFormatFileSize(iSize, gFileSizeFormat); end; { This function based on code from http://www.delphirus.com.ru } {=========================================================} function MinimizeFilePath(const PathToMince: String; Canvas: TCanvas; MaxLen: Integer): String; {=========================================================} // "C:\Program Files\Delphi\DDropTargetDemo\main.pas" // "C:\Program Files\..\main.pas" Var sl: TStringList; sHelp, sFile, sFirst: String; iPos: Integer; Begin if MaxLen <= 0 then Exit; sHelp := PathToMince; iPos := Pos(PathDelim, sHelp); If iPos = 0 Then Begin Result := PathToMince; End Else Begin sl := TStringList.Create; // Decode string While iPos <> 0 Do Begin sl.Add(Copy(sHelp, 1, (iPos - 1))); sHelp := Copy(sHelp, (iPos + 1), Length(sHelp)); iPos := Pos(PathDelim, sHelp); End; If sHelp <> '' Then Begin sl.Add(sHelp); End; // Encode string sFirst := sl[0]; sFile := sl[sl.Count - 1]; sl.Delete(sl.Count - 1); Result := ''; MaxLen := MaxLen - Canvas.TextWidth('XXX'); if (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxLen) then begin While (sl.Count <> 0) and (Canvas.TextWidth(Result + sl[0] + PathDelim + sFile) < MaxLen) Do Begin Result := Result + sl[0] + PathDelim; sl.Delete(0); End; If sl.Count = 0 Then Begin Result := Result + sFile; End Else Begin Result := Result + '..' + PathDelim + sFile; End; end else If sl.Count = 0 Then Begin Result := sFirst + PathDelim; End Else Begin Result := sFirst + PathDelim + '..' + PathDelim + sFile; End; sl.Free; End; //DCDebug('PathX ' , Result); if Canvas.TextWidth(Result) > MaxLen + Canvas.TextWidth('XXX') then begin while (Length(Result) > 0) and (Canvas.TextWidth(Result) > MaxLen) do begin Delete(Result, Length(Result), 1); end; Result := Copy(Result, 1, Length(Result) - 3) + '...'; end; End; function MatchesFileList(const Files: TFiles; FileName: String): Boolean; var i: Integer; aFile: TFile; begin for i := 0 to Files.Count - 1 do begin aFile := Files[i]; if aFile.IsDirectory then begin // Check if 'FileName' is in this directory or any of its subdirectories. if IsInPath(aFile.FullPath, FileName, True, True) then Exit(True); end else begin // Item in the list is a file, only compare names. if aFile.FullPath = FileName then Exit(True); end; end; Result := False; end; function MatchesMaskListEx(const aFile: TFile; MaskList: TStringList): Boolean; var I: Integer; sMask, sFileName: String; begin Result:= False; for I:= 0 to MaskList.Count - 1 do begin sMask:= MaskList[I]; case GetPathType(sMask) of ptAbsolute: sFileName:= aFile.FullPath; else sFileName:= aFile.Name; end; // When a mask is ended with a PathDelim, it will match only directories if (Length(sMask) > 1) and (sMask[Length(sMask)] = PathDelim) then begin if aFile.IsDirectory then sMask:= ExcludeTrailingPathDelimiter(sMask) else Continue; end; if MatchesMaskList(sFileName, sMask) then Exit(True); end; end; function IsInPathList(sBasePathList: String; sPathToCheck: String; ASeparator: AnsiChar = ';'): Boolean; var sBasePath: String; begin sBasePathList := UTF8UpperCase(sBasePathList); sPathToCheck := UTF8UpperCase(sPathToCheck); repeat sBasePath := Copy2SymbDel(sBasePathList, ASeparator); if IsInPath(sBasePath, sPathToCheck, True, True) then Exit(True); until Length(sBasePathList) = 0; Result := False end; procedure ChangeFileListRoot(sNewRootPath: String; Files: TFiles); var i: Integer; aFile: TFile; begin if IsInPath(sNewRootPath, Files.Path, True, True) then begin // Current path is a subpath of new root path. for i := 0 to Files.Count - 1 do begin aFile := Files[i]; aFile.Path := ExtractDirLevel(sNewRootPath, aFile.Path); end; Files.Path := ExtractDirLevel(sNewRootPath, Files.Path); end else begin // Current path has a different base than new root path. if sNewRootPath <> EmptyStr then sNewRootPath := IncludeTrailingPathDelimiter(sNewRootPath); for i := 0 to Files.Count - 1 do begin aFile := Files[i]; aFile.Path := sNewRootPath + ExtractDirLevel(Files.Path, aFile.Path); end; Files.Path := sNewRootPath; end; end; function FixExeExt(const sFileName: String): String; var ExeExt: String; begin Result:= sFileName; ExeExt:= GetExeExt; if not SameText(ExeExt, ExtractFileExt(sFileName)) then Result:= ChangeFileExt(sFileName, ExeExt); end; function TrimQuotes(const Str: String): String; begin Result:= TrimSet(Str, ['"', '''']); end; function QuoteStr(const Str: String): String; {$IF DEFINED(UNIX)} begin // Default method is to escape every special char with backslash. Result := EscapeNoQuotes(Str); end; {$ELSE} begin // On Windows only double quotes can be used for quoting. // The double quotes on Windows can be nested, e.g., // "cmd /C "type "Some long file name""" or // "cmd /C ""some long file.exe" "long param1" "long param2"" Result := QuoteDouble(Str); end; {$ENDIF} function QuoteFilenameIfNecessary(const Str: String): String; {$IF DEFINED(UNIX)} begin // Default method is to escape every special char with backslash. Result := EscapeNoQuotes(Str); end; {$ELSE} begin if Pos(#32, Str) <> 0 then Result := QuoteDouble(Str) else Result := Str; end; {$ENDIF} function ConcatenateStrWithSpace(const Str: String; const Addition: String):string; begin result:=Str; if Addition <> EmptyStr then if result = EmptyStr then result := Addition else result := result + #32 + Addition; end; {$IF DEFINED(UNIX)} function QuoteSingle(const Str: String): String; begin Result := '''' + EscapeSingleQuotes(Str) + ''''; end; {$ENDIF} function QuoteDouble(const Str: String): String; begin {$IF DEFINED(UNIX)} Result := '"' + EscapeDoubleQuotes(Str) + '"'; {$ELSEIF DEFINED(MSWINDOWS)} // Nothing needs to be escaped on Windows, because only double quote (") itself // would need to be escaped but there's no standard mechanism for escaping it. // It seems every application handles it on their own and CMD doesn't support it at all. // Also double quote is a forbidden character on FAT, NTFS. Result := '"' + Str + '"'; {$ENDIF} end; {$IF DEFINED(UNIX)} function EscapeString(const Str: String; const EscapeChars: TCharSet; const EscapeWith: String): String; var StartPos: Integer = 1; CurPos: Integer = 1; begin Result := ''; while CurPos <= Length(Str) do begin if Str[CurPos] in EscapeChars then begin Result := Result + Copy(Str, StartPos, CurPos - StartPos) + EscapeWith; // The character being quoted will be copied later. StartPos := CurPos; end; Inc(CurPos); end; Result := Result + Copy(Str, StartPos, CurPos - StartPos); end; function EscapeSingleQuotes(const Str: String): String; begin // Single quotes are strong quotes - no special characters are recognized // inside those quotes, so only ' needs to be escaped. Result := EscapeString(Str, [''''], '''\'''); end; function EscapeDoubleQuotes(const Str: String): String; begin // Double quotes are weak quotes and a few special characters are allowed // which need to be escaped. Result := EscapeString(Str, DoubleQuotesSpecialChars, '\'); end; function EscapeNoQuotes(const Str: String): String; begin // When neither single nor double quotes are used several special characters // need to be escaped with backslash (single character quote). Result := EscapeString(Str, NoQuotesSpecialChars, '\'); end; // Helper for RemoveQuotation and SplitCmdLine. procedure RemoveQuotationOrSplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray; bSplitArgs: Boolean; bNoCmd: Boolean = False); var I : Integer; QuoteChar : Char; CurrentArg: String = ''; DoubleQuotesEscape: Boolean = False; procedure AddArgument; begin if bSplitArgs then begin if (bNoCmd = False) and (sCommand = '') then sCommand := CurrentArg else begin SetLength(Args, Length(Args) + 1); Args[Length(Args) - 1] := CurrentArg; end; CurrentArg := ''; end; end; begin sCommand := ''; SetLength(Args, 0); QuoteChar := #0; for I := 1 to Length(sCmdLine) do case QuoteChar of '\': begin if sCmdLine[I] <> #10 then begin if not (sCmdLine[I] in NoQuotesSpecialChars) then CurrentArg := CurrentArg + '\'; CurrentArg := CurrentArg + sCmdLine[I]; end; QuoteChar := #0; end; '''': begin if sCmdLine[I] = '''' then QuoteChar := #0 else CurrentArg := CurrentArg + sCmdLine[I]; end; '"': begin if DoubleQuotesEscape then begin if not (sCmdLine[I] in DoubleQuotesSpecialChars) then CurrentArg := CurrentArg + '\'; CurrentArg := CurrentArg + sCmdLine[I]; DoubleQuotesEscape := False; end else begin case sCmdLine[I] of '\': DoubleQuotesEscape := True; '"': QuoteChar := #0; else CurrentArg := CurrentArg + sCmdLine[I]; end; end; end; else begin case sCmdLine[I] of '\', '''', '"': QuoteChar := sCmdLine[I]; ' ', #9: if CurrentArg <> '' then AddArgument; #10: AddArgument; else CurrentArg := CurrentArg + sCmdLine[I]; end; end; end; if QuoteChar <> #0 then raise EInvalidQuoting.Create; if CurrentArg <> '' then AddArgument; if (not bSplitArgs) then sCommand := CurrentArg; end; procedure SplitCommandArgs(const Params: String; out Args: TDynamicStringArray); var Unused: String; begin RemoveQuotationOrSplitCmdLine(Params, Unused, Args, True, True); end; {$ENDIF} function RemoveQuotation(const Str: String): String; {$IF DEFINED(MSWINDOWS)} var TrimmedStr: String; begin if Length(Str) = 0 then Result := EmptyStr else begin TrimmedStr := Trim(Str); if (TrimmedStr[1] = '"') and (TrimmedStr[Length(TrimmedStr)] = '"') then Result := Copy(TrimmedStr, 2, Length(TrimmedStr) - 2) else Result := Str; end; end; {$ELSEIF DEFINED(UNIX)} var Args: TDynamicStringArray; begin RemoveQuotationOrSplitCmdLine(Str, Result, Args, False); end; {$ENDIF} procedure SplitCmdLineToCmdParams(sCmdLine : String; var sCmd, sParams : String); var iPos : Integer; begin if Pos('"', sCmdLine) = 1 then begin iPos := CharPos('"', sCmdLine, 2); if iPos = 0 then raise EInvalidQuoting.Create; sCmd := Copy(sCmdLine, 2, iPos - 2); sParams := Copy(sCmdLine, iPos + 2, Length(sCmdLine) - iPos + 1) end else begin iPos := Pos(#32, sCmdLine); if iPos <> 0 then begin sCmd := Copy(sCmdLine, 1, iPos - 1); sParams := Copy(sCmdLine, iPos + 1, Length(sCmdLine) - iPos + 1) end else begin sCmd := sCmdLine; sParams := ''; end; end; end; {$IF DEFINED(UNIX)} procedure SplitCmdLine(sCmdLine: String; out sCommand: String; out Args: TDynamicStringArray); begin RemoveQuotationOrSplitCmdLine(sCmdLine, sCommand, Args, True); end; {$ELSEIF DEFINED(MSWINDOWS)} procedure SplitCmdLine(sCmdLine : String; var sCmd, sParams : String); begin SplitCmdLineToCmdParams(sCmdLine,sCmd,sParams); end; {$ENDIF} function CompareStrings(const s1, s2: String; Natural: Boolean; CaseSensitivity: TCaseSensitivity): PtrInt; inline; begin if Natural then Result:= StrFloatCmpW(PWideChar(UTF8Decode(s1)), PWideChar(UTF8Decode(s2)), CaseSensitivity) else begin case CaseSensitivity of cstNotSensitive: Result := WideCompareText(UTF8Decode(s1), UTF8Decode(s2)); cstLocale: Result := WideCompareStr(UTF8Decode(s1), UTF8Decode(s2)); cstCharValue: Result := SysUtils.CompareStr(S1, S2); else raise Exception.Create('Invalid CaseSensitivity parameter'); end; end; end; procedure InsertFirstItem(sLine: String; comboBox: TCustomComboBox); var I: Integer = 0; begin if sLine = EmptyStr then Exit; with comboBox.Items do begin // Use case sensitive search while (I < Count) and (CompareStr(Strings[I], sLine) <> 0) do Inc(I); if (I < 0) or (I >= Count) then begin comboBox.Items.Insert(0, sLine); comboBox.ItemIndex := 0; end else if (I > 0) then begin comboBox.Items.Move(I, 0); // Reset selected item (and combobox text), because Move has destroyed it. comboBox.ItemIndex := 0; end; end; end; function WideStrComp(const Str1, Str2 : WideString): PtrInt; var counter: SizeInt = 0; pstr1, pstr2: PWideChar; Begin pstr1 := PWideChar(Str1); pstr2 := PWideChar(Str2); While pstr1[counter] = pstr2[counter] do Begin if (pstr2[counter] = #0) or (pstr1[counter] = #0) then break; Inc(counter); end; Result := ord(pstr1[counter]) - ord(pstr2[counter]); end; function StrFloatCmpW(str1, str2: PWideChar; CaseSensitivity: TCaseSensitivity): PtrInt; var is_digit1, is_digit2: boolean; string_result: ptrint = 0; number_result: ptrint = 0; number1_size: ptrint = 0; number2_size: ptrint = 0; str_cmp: function(const s1, s2: WideString): PtrInt; function is_digit(c: widechar): boolean; inline; begin result:= (c in ['0'..'9']); end; function is_point(c: widechar): boolean; inline; begin result:= (c in [',', '.']); end; begin // Set up compare function case CaseSensitivity of cstNotSensitive: str_cmp:= WideStringManager.CompareTextWideStringProc; cstLocale: str_cmp:= WideStringManager.CompareWideStringProc; cstCharValue: str_cmp:= @WideStrComp; else raise Exception.Create('Invalid CaseSensitivity parameter'); end; while (true) do begin // compare string part while (true) do begin if str1^ = #0 then begin if str2^ <> #0 then exit(-1) else exit(0); end; if str2^ = #0 then begin if str1^ <> #0 then exit(+1) else exit(0); end; is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (is_digit1 and is_digit2) then break; if (is_digit1 and not is_digit2) then exit(-1); if (is_digit2 and not is_digit1) then exit(+1); string_result:= str_cmp(str1^, str2^); if (string_result <> 0) then exit(string_result); inc(str1); inc(str2); end; // skip leading zeroes for number while (str1^ = '0') do inc(str1); while (str2^ = '0') do inc(str2); // compare number before decimal point while (true) do begin is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (not is_digit1 and not is_digit2) then break; if ((number_result = 0) and is_digit1 and is_digit2) then begin if (str1^ > str2^) then number_result := +1 else if (str1^ < str2^) then number_result := -1 else number_result := 0; end; if (is_digit1) then begin inc(str1); inc(number1_size); end; if (is_digit2) then begin inc(str2); inc(number2_size); end; end; if (number1_size <> number2_size) then exit(number1_size - number2_size); if (number_result <> 0) then exit(number_result); // if there is a decimal point, compare number after one if (is_point(str1^) or is_point(str2^)) then begin if (is_point(str1^)) then inc(str1); if (is_point(str2^)) then inc(str2); while (true) do begin is_digit1 := is_digit(str1^); is_digit2 := is_digit(str2^); if (not is_digit1 and not is_digit2) then break; if (is_digit1 and not is_digit2) then begin while (str1^ = '0') do inc(str1); if (is_digit(str1^)) then exit(+1) else break; end; if (is_digit2 and not is_digit1) then begin while (str2^ = '0') do inc(str2); if (is_digit(str2^)) then exit(-1) else break; end; if (str1^ > str2^) then exit(+1) else if (str1^ < str2^) then exit(-1); inc(str1); inc(str2); end; end; end; end; function EstimateRemainingTime(StartValue, CurrentValue, EndValue: Int64; StartTime: TDateTime; CurrentTime: TDateTime; out SpeedPerSecond: Int64): TDateTime; var Speed: Double; begin SpeedPerSecond := 0; Result := 0; if (CurrentValue > StartValue) and (CurrentTime > StartTime) then begin Speed := Double(CurrentValue - StartValue) / (CurrentTime - StartTime); Result := Double(EndValue - CurrentValue) / Speed; SpeedPerSecond := Trunc(Speed) div SecsPerDay; end; end; function ModColor(AColor: TColor; APercent: Byte) : TColor; var R, G, B : Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R := R * APercent div 100; G := G * APercent div 100; B := B * APercent div 100; Result := RGBToColor(R, G, B); end; function DarkColor(AColor: TColor; APercent: Byte): TColor; var R, G, B: Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R:= R - MulDiv(R, APercent, 100); G:= G - MulDiv(G, APercent, 100); B:= B - MulDiv(B, APercent, 100); Result:= RGBToColor(R, G, B); end; function LightColor(AColor: TColor; APercent: Byte): TColor; var R, G, B: Byte; begin RedGreenBlue(ColorToRGB(AColor), R, G, B); R:= R + MulDiv(255 - R, APercent, 100); G:= G + MulDiv(255 - G, APercent, 100); B:= B + MulDiv(255 - B, APercent, 100); Result:= RGBToColor(R, G, B); end; procedure SetColorInColorBox(const lcbColorBox: TColorBox; const lColor: TColor); //< select in lcbColorBox lColor if lColor in lcbColorBox else // add to lcbColorBox lColor and select him var I: LongInt; begin if (lcbColorBox = nil) then Exit; // if lcbColorBox not exist with lcbColorBox do begin // search lColor in colorbox colorlist for I:= 0 to Items.Count - 1 do if Colors[I] = lColor then // find color begin // select color Selected:= lColor; Exit; end;// if for //add items to colorbox list Items.Objects[Items.Add('$'+HexStr(lColor, 8))]:= TObject(PtrInt(lColor)); Selected:= lColor; end; // with end; procedure UpdateColor(Control: TControl; Checked: Boolean); begin if Checked then Control.Color:= clDefault else Control.Color:= $FFFFFFFF8000000F; end; procedure EnableControl(Control: TControl; Enabled: Boolean); begin Control.Enabled:= Enabled; {$IF DEFINED(LCLWIN32)} if Enabled then begin Control.Color:= clDefault; Control.Font.Color:= clDefault; end else begin Control.Color:= clBtnFace; Control.Font.Color:= clGrayText; end; {$ENDIF} end; function GuessLineBreakStyle(const S: String): TTextLineBreakStyle; var Start, Finish, Current: PAnsiChar; begin Start:= PAnsiChar(S); Finish:= Start + Length(S); Current:= Start; while Current + 2 < Finish do begin case Current[0] of #10, #13: begin if (Current[0] = #13) then begin if (Current[1] = #10) then Result:= tlbsCRLF else Result:= tlbsCR; end else begin Result:= tlbsLF; end; Exit; end; end; Inc(Current); end; Result:= DefaultTextLineBreakStyle; end; function GetTextRange(Strings: TStrings; Start, Finish: Integer): String; var P: PAnsiChar; S, NL: String; I, L, NLS: LongInt; begin with Strings do begin L:= 0; NL:= TextLineBreakValue[TextLineBreakStyle]; NLS:= Length(NL); for I:= Start to Finish do L:= L + Length(Strings[I]) + NLS; SetLength(Result, L); P:= Pointer(Result); for I:= Start to Finish do begin S:= Strings[I]; L:= Length(S); if L <> 0 then System.Move(Pointer(S)^, P^, L); P:= P + L; for L:= 1 to NLS do begin P^:= NL[L]; Inc(P); end; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uColorExt.pas�������������������������������������������������������������������0000644�0001750�0000144�00000022520�12612505011�015727� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Load colors of files in file panels Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2009 Koblov Alexander (Alexx2000@mail.ru) Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uColorExt; {$mode objfpc}{$H+} interface uses Classes, Graphics, uFile, DCXmlConfig; type { TMaskItem } TMaskItem = class public sExt: String; sModeStr: String; cColor: TColor; sName: String; procedure Assign(ASource: TMaskItem); end; { TColorExt } TColorExt = class private fOldCount: Integer; lslist: TList; function GetCount: Integer; function GetItems(const Index: Integer): TMaskItem; public constructor Create; destructor Destroy; override; procedure Clear; procedure Add(AItem: TMaskItem); function GetColorByExt(const sExt: String): TColor; function GetColorByAttr(const sModeStr: String): TColor; function GetColorBy(const AFile: TFile): TColor; procedure LoadIni; procedure SaveIni; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); property Count: Integer read GetCount; property Items[const Index: Integer]: TMaskItem read GetItems; default; end; implementation uses SysUtils, uDebug, uGlobs, uMasks, uFileProperty; { TMaskItem } procedure TMaskItem.Assign(ASource: TMaskItem); begin Assert(Assigned(ASource)); sExt := ASource.sExt; sModeStr := ASource.sModeStr; cColor := ASource.cColor; sName := ASource.sName; end; function TColorExt.GetCount: Integer; begin Result := lslist.Count; end; function TColorExt.GetItems(const Index: Integer): TMaskItem; begin Result := TMaskItem(lslist[Index]); end; constructor TColorExt.Create; begin inherited; lslist:= TList.Create; end; destructor TColorExt.Destroy; begin Clear; FreeAndNil(lsList); inherited; end; procedure TColorExt.Clear; begin while lslist.Count > 0 do begin TMaskItem(lslist[0]).Free; lslist.Delete(0); end; end; procedure TColorExt.Add(AItem: TMaskItem); begin lslist.Add(AItem); end; function TColorExt.GetColorByExt(const sExt: String): TColor; var I: Integer; begin Result:= clDefault; for I:=0 to lslist.Count-1 do begin if MatchesMaskList(sExt, TMaskItem(lslist[I]).sExt,';') then begin Result:= TMaskItem(lslist[I]).cColor; Exit; end; end; end; function TColorExt.GetColorByAttr(const sModeStr: String): TColor; var I: Integer; begin Result:= clDefault; for I:=0 to lslist.Count-1 do begin if MatchesMaskList(sModeStr,TMAskItem(lslist[I]).sModeStr,';') then begin Result:=TMAskItem(lslist[I]).cColor; Exit; end; end; end; function TColorExt.GetColorBy(const AFile: TFile): TColor; var I, J: Integer; MaskItem: TMaskItem; begin Result:= clDefault; for I:= 0 to lslist.Count-1 do begin MaskItem:= TMaskItem(lslist[I]); // get color by search template if MaskItem.sExt[1] = '>' then for J:= 0 to gSearchTemplateList.Count - 1 do with gSearchTemplateList do begin if (Templates[J].TemplateName = PChar(MaskItem.sExt)+1) and Templates[J].CheckFile(AFile) then begin Result:= MaskItem.cColor; Exit; end; end; // Get color by extension and attribute. // If attributes field is empty then don't match directories. if ((MaskItem.sExt = '') or (((MaskItem.sModeStr <> '') or not (AFile.IsDirectory or AFile.IsLinkToDirectory)) and MatchesMaskList(AFile.Name, MaskItem.sExt, ';'))) and ((MaskItem.sModeStr = '') or not (fpAttributes in AFile.SupportedProperties) or MatchesMaskList(AFile.Properties[fpAttributes].AsString, MaskItem.sModeStr, ';')) then begin Result:= MaskItem.cColor; Exit; end; end; end; (* Load colors of files from doublecmd.ini *) { format of colors storage as in Total Commander: doublecmd.ini [Colors] ColorFilter1=*.o;*.ppu;*.rst;*.bak;*.dcu ColorFilter1Color=16711680 ColorFilter2=*.pas ColorFilter2Color=16711000 etc... Added Attributes: ColorFilter1Attributes=-r*xr*xr*x //all read/executable file ColorFilter2Attributes=-*x* //all executable ColorFilter3Attributes=d* //all directories ColorFilter4Attributes=l* //all links Be careful with * expression. Functions return just first found value. This is right demo of [Colors] section: ColorFilter3=* ColorFilter3Color=55758 ColorFilter3Attributes=-rwxrwxr*x ColorFilter3Name=SomeName3 ColorFilter4=* ColorFilter4Color=32768 ColorFilter4Attributes=-*x* ColorFilter4Name=SomeName4 This IS WRONG because ColorFilter3Attributes=-*x* will be found and ColorFilter3Color=32768 will be returned first: ColorFilter3=* ColorFilter3Color=32768 ColorFilter3Attributes=-*x* ColorFilter3Name=SomeName3 ColorFilter4=* ColorFilter4Color=55758 ColorFilter4Attributes=-rwxrwxr*x ColorFilter4Name=SomeName4 !!! The "?" and other regular expressions DOES NOT SUPPORTED } procedure TColorExt.LoadIni; var sExtMask, sAttr, sName: String; iColor, I : Integer; begin I := 1; Clear; while gIni.ReadString('Colors', 'ColorFilter' + IntToStr(I), '') <> '' do begin sExtMask := gIni.ReadString('Colors', 'ColorFilter' + IntToStr(I), ''); iColor := gIni.ReadInteger('Colors', 'ColorFilter' + IntToStr(I) + 'Color', clWindowText); sName:=gIni.ReadString('Colors', 'ColorFilter' + IntToStr(I)+'Name', ''); sAttr := gIni.ReadString('Colors', 'ColorFilter' + IntToStr(I) + 'Attributes', ''); lsList.Add(TMaskItem.Create); TMaskItem(lsList[lsList.Count-1]).sName:=sName; TMaskItem(lsList[lsList.Count-1]).cColor:=iColor; TMaskItem(lsList[lsList.Count-1]).sExt:=sExtMask; TMaskItem(lsList[lsList.Count-1]).sModeStr:=sAttr; fOldCount := I; Inc(I); end; // while gIni.ReadString(); end; procedure TColorExt.SaveIni; var I : Integer; begin if (not assigned(lslist)) then exit; for I:=0 to lslist.Count - 1 do begin gIni.WriteString('Colors', 'ColorFilter' + IntToStr(I+1), TMaskItem(lsList[I]).sExt); gIni.WriteInteger('Colors', 'ColorFilter' + IntToStr(I+1) + 'Color', TMaskItem(lsList[I]).cColor); gIni.WriteString('Colors', 'ColorFilter' + IntToStr(I+1)+'Name', TMaskItem(lsList[I]).sName); gIni.WriteString('Colors', 'ColorFilter' + IntToStr(I+1) + 'Attributes', TMaskItem(lsList[I]).sModeStr); end; // delete old not used filters for I := lslist.Count + 1 to fOldCount do begin gIni.DeleteKey('Colors', 'ColorFilter' + IntToStr(I)); gIni.DeleteKey('Colors', 'ColorFilter' + IntToStr(I) + 'Color'); gIni.DeleteKey('Colors', 'ColorFilter' + IntToStr(I)+'Name'); gIni.DeleteKey('Colors', 'ColorFilter' + IntToStr(I) + 'Attributes'); end; end; procedure TColorExt.Load(AConfig: TXmlConfig; ANode: TXmlNode); var sExtMask, sAttr, sName: String; iColor: Integer; begin Clear; ANode := ANode.FindNode('FileFilters'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Filter') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', sName) and AConfig.TryGetValue(ANode, 'FileMasks', sExtMask) and AConfig.TryGetValue(ANode, 'Color', iColor) and AConfig.TryGetValue(ANode, 'Attributes', sAttr) then begin lsList.Add(TMaskItem.Create); TMaskItem(lsList.Last).sName := sName; TMaskItem(lsList.Last).cColor := iColor; TMaskItem(lsList.Last).sExt := sExtMask; TMaskItem(lsList.Last).sModeStr := sAttr; end else begin DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; end; ANode := ANode.NextSibling; end; end; end; procedure TColorExt.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I : Integer; SubNode: TXmlNode; begin if not Assigned(lslist) then Exit; ANode := AConfig.FindNode(ANode, 'FileFilters', True); AConfig.ClearNode(ANode); for I:=0 to lslist.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'Filter'); AConfig.AddValue(SubNode, 'Name', TMaskItem(lsList[I]).sName); AConfig.AddValue(SubNode, 'FileMasks', TMaskItem(lsList[I]).sExt); AConfig.AddValue(SubNode, 'Color', TMaskItem(lsList[I]).cColor); AConfig.AddValue(SubNode, 'Attributes', TMaskItem(lsList[I]).sModeStr); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdiffer.pas���������������������������������������������������������������������0000644�0001750�0000144�00000107367�12630365376�015447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Internal diff and merge tool Copyright (C) 2010-2014 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit fDiffer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Dialogs, Menus, ComCtrls, ActnList, ExtCtrls, EditBtn, Buttons, SynEdit, uSynDiffControls, uPariterControls, uDiffOND, uFormCommands, uHotkeyManager, uOSForms, uBinaryDiffViewer; type { TfrmDiffer } TfrmDiffer = class(TAloneForm, IFormCommands) actBinaryCompare: TAction; actCopyLeftToRight: TAction; actCopyRightToLeft: TAction; actExit: TAction; actEditCut: TAction; actEditCopy: TAction; actEditDelete: TAction; actEditUndo: TAction; actEditRedo: TAction; actEditSelectAll: TAction; actEditPaste: TAction; actAbout: TAction; actAutoCompare: TAction; actLineDifferences: TAction; actSaveRightAs: TAction; actSaveLeftAs: TAction; actOpenRight: TAction; actOpenLeft: TAction; actReload: TAction; actSaveRight: TAction; actSaveLeft: TAction; actPaintBackground: TAction; actStartCompare: TAction; actFirstDifference: TAction; actIgnoreCase: TAction; actIgnoreWhiteSpace: TAction; actCancelCompare: TAction; actKeepScrolling: TAction; actPrevDifference: TAction; actLastDifference: TAction; actNextDifference: TAction; actSaveAs: TAction; actSave: TAction; ActionList: TActionList; edtFileNameLeft: TFileNameEdit; edtFileNameRight: TFileNameEdit; ImageList: TImageList; MainMenu: TMainMenu; miAutoCompare: TMenuItem; miDivider10: TMenuItem; miLineDifferences: TMenuItem; miEncodingRight: TMenuItem; miEncodingLeft: TMenuItem; miAbout: TMenuItem; mnuEncoding: TMenuItem; miSaveRightAs: TMenuItem; miSaveLeftAs: TMenuItem; miCopyContext: TMenuItem; miCutContext: TMenuItem; miDeleteContext: TMenuItem; miEditSelectAll: TMenuItem; miDivider9: TMenuItem; miEditDelete: TMenuItem; miEditPaste: TMenuItem; miEditCopy: TMenuItem; miEditCut: TMenuItem; miDivider8: TMenuItem; miEditRedo: TMenuItem; miEditUndo: TMenuItem; miDivider7: TMenuItem; miPasteContext: TMenuItem; miReload: TMenuItem; miDivider6: TMenuItem; miExit: TMenuItem; miSaveRight: TMenuItem; miOpenRight: TMenuItem; miOpenLeft: TMenuItem; miCopyRightToLeft: TMenuItem; miCopyLeftToRight: TMenuItem; miDivider5: TMenuItem; miPaintBackground: TMenuItem; miDivider4: TMenuItem; miBinaryCompare: TMenuItem; miKeepScrolling: TMenuItem; miDivider3: TMenuItem; miLastDiff: TMenuItem; miFirstDiff: TMenuItem; miDivider2: TMenuItem; miPrevDiff: TMenuItem; miNextDiff: TMenuItem; miDivider1: TMenuItem; miCancelCompare: TMenuItem; miSelectAllContext: TMenuItem; miSeparator1: TMenuItem; miSeparator2: TMenuItem; miStartCompare: TMenuItem; miUndoContext: TMenuItem; mnuActions: TMenuItem; miIgnoreCase: TMenuItem; miIgnoreWhiteSpace: TMenuItem; mnuOptions: TMenuItem; mnuEdit: TMenuItem; miSaveLeft: TMenuItem; mnuFile: TMenuItem; ContextMenu: TPopupMenu; pnlLeftBox: TPanel; pnlRight: TPanel; pnlLeft: TPanel; pnlRightBox: TPanel; btnLeftEncoding: TSpeedButton; btnRightEncoding: TSpeedButton; btnLeftSave: TSpeedButton; btnLeftSaveAs: TSpeedButton; btnRightSave: TSpeedButton; btnRightSaveAs: TSpeedButton; pmEncodingLeft: TPopupMenu; pmEncodingRight: TPopupMenu; Splitter: TSplitter; StatusBar: TStatusBar; ToolBar: TToolBar; btnSave: TToolButton; btnSaveAs: TToolButton; Divider1: TToolButton; btnCompare: TToolButton; btnLast: TToolButton; btnNext: TToolButton; btnPrev: TToolButton; btnFirst: TToolButton; Divider2: TToolButton; Divider3: TToolButton; btnCancelCompare: TToolButton; Divider4: TToolButton; btnReload: TToolButton; btnCopyRightToLeft: TToolButton; btnCopyLeftToRight: TToolButton; Divider5: TToolButton; procedure actAboutExecute(Sender: TObject); procedure actBinaryCompareExecute(Sender: TObject); procedure actCancelCompareExecute(Sender: TObject); procedure actExecute(Sender: TObject); procedure actEditCopyExecute(Sender: TObject); procedure actEditCutExecute(Sender: TObject); procedure actEditDeleteExecute(Sender: TObject); procedure actEditPasteExecute(Sender: TObject); procedure actEditRedoExecute(Sender: TObject); procedure actEditSelectAllExecute(Sender: TObject); procedure actEditUndoExecute(Sender: TObject); procedure actIgnoreCaseExecute(Sender: TObject); procedure actLineDifferencesExecute(Sender: TObject); procedure actOpenLeftExecute(Sender: TObject); procedure actOpenRightExecute(Sender: TObject); procedure actPaintBackgroundExecute(Sender: TObject); procedure actSaveAsExecute(Sender: TObject); procedure actSaveExecute(Sender: TObject); procedure actSaveLeftAsExecute(Sender: TObject); procedure actSaveRightAsExecute(Sender: TObject); procedure actStartCompareExecute(Sender: TObject); procedure actKeepScrollingExecute(Sender: TObject); procedure btnLeftEncodingClick(Sender: TObject); procedure btnRightEncodingClick(Sender: TObject); procedure edtFileNameLeftAcceptFileName(Sender: TObject; var Value: String); procedure edtFileNameRightAcceptFileName(Sender: TObject; var Value: String); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormResize(Sender: TObject); private BinaryDiffList: TFPList; BinaryDiffIndex: Integer; BinaryCompare: TBinaryCompare; BinaryViewerLeft, BinaryViewerRight: TBinaryDiffViewer; procedure BinaryCompareFinish; private Diff: TDiff; SynDiffEditActive: TSynDiffEdit; SynDiffEditLeft: TSynDiffEdit; SynDiffEditRight: TSynDiffEdit; SynDiffHighlighterLeft, SynDiffHighlighterRight: TSynDiffHighlighter; HashListLeft, HashListRight: array of Integer; EncodingList: TStringList; ScrollLock: LongInt; FShowIdentical: Boolean; FCommands: TFormCommands; procedure ShowIdentical; procedure Clear(bLeft, bRight: Boolean); procedure BuildHashList(bLeft, bRight: Boolean); procedure ChooseEncoding(SynDiffEdit: TSynDiffEdit); procedure ChooseEncoding(MenuItem: TMenuItem; Encoding: String); procedure FillEncodingMenu(TheOwner: TMenuItem; MenuHandler: TNotifyEvent; GroupIndex: LongInt); procedure LoadFromFile(SynDiffEdit: TSynDiffEdit; const FileName: String); procedure SaveToFile(SynDiffEdit: TSynDiffEdit; const FileName: String); procedure OpenFileLeft(const FileName: String); procedure OpenFileRight(const FileName: String); procedure SetEncodingLeft(Sender: TObject); procedure SetEncodingRight(Sender: TObject); procedure SynDiffEditEnter(Sender: TObject); procedure SynDiffEditLeftStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure SynDiffEditRightStatusChange(Sender: TObject; Changes: TSynStatusChanges); property Commands: TFormCommands read FCommands implements IFormCommands; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; published procedure cm_CopyLeftToRight(const Params: array of string); procedure cm_CopyRightToLeft(const Params: array of string); procedure cm_Exit(const Params: array of string); procedure cm_FirstDifference(const Params: array of string); procedure cm_LastDifference(const Params: array of string); procedure cm_NextDifference(const Params: array of string); procedure cm_PrevDifference(const Params: array of string); procedure cm_Reload(const Params: array of string); procedure cm_SaveLeft(const Params: array of string); procedure cm_SaveRight(const Params: array of string); end; procedure ShowDiffer(const FileNameLeft, FileNameRight: String); implementation {$R *.lfm} uses LCLType, LazFileUtils, LConvEncoding, SynEditTypes, uHash, uLng, uGlobs, uShowMsg, DCClassesUtf8, dmCommonData, DCOSUtils; const HotkeysCategory = 'Differ'; procedure ShowDiffer(const FileNameLeft, FileNameRight: String); begin with TfrmDiffer.Create(Application) do begin edtFileNameLeft.Text:= FileNameLeft; edtFileNameRight.Text:= FileNameRight; FShowIdentical:= actAutoCompare.Checked; actBinaryCompare.Checked:= not (FileIsText(FileNameLeft) or FileIsText(FileNameRight)); if actBinaryCompare.Checked then actBinaryCompareExecute(actBinaryCompare) else begin OpenFileLeft(FileNameLeft); OpenFileRight(FileNameRight); if actAutoCompare.Checked then actStartCompare.Execute; end; if actBinaryCompare.Checked or (FShowIdentical = False) then ShowOnTop; end; end; { TfrmDiffer } procedure TfrmDiffer.actStartCompareExecute(Sender: TObject); var I: Integer; LineNumberLeft, LineNumberRight: PtrInt; begin if actBinaryCompare.Checked then begin actStartCompare.Enabled := False; actCancelCompare.Enabled := True; actBinaryCompare.Enabled := False; BinaryCompare:= TBinaryCompare.Create(BinaryViewerLeft.GetDataAdr, BinaryViewerRight.GetDataAdr, BinaryViewerLeft.FileSize, BinaryViewerRight.FileSize, BinaryDiffList); BinaryCompare.OnFinish:= @BinaryCompareFinish; BinaryCompare.Start; end else try Inc(ScrollLock); Screen.Cursor := crHourGlass; if (Length(HashListLeft) = 0) or (Length(HashListRight) = 0) then Exit; actStartCompare.Enabled := False; actCancelCompare.Enabled := True; Diff.Execute( PInteger(@HashListLeft[0]), PInteger(@HashListRight[0]), Length(HashListLeft), Length(HashListRight) ); if Diff.Cancelled then Exit; SynDiffEditLeft.StartCompare; SynDiffEditRight.StartCompare; for I := 0 to Diff.Count - 1 do with Diff.Compares[I] do begin LineNumberLeft:= oldIndex1 + 1; LineNumberRight:= oldIndex2 + 1; case Kind of ckAdd: begin SynDiffEditLeft.Lines.InsertFake(I, Kind); SynDiffEditRight.Lines.SetKindAndNumber(I, Kind, LineNumberRight); end; ckDelete: begin SynDiffEditLeft.Lines.SetKindAndNumber(I, Kind, LineNumberLeft); SynDiffEditRight.Lines.InsertFake(I, Kind); end; else begin SynDiffEditLeft.Lines.SetKindAndNumber(I, Kind, LineNumberLeft); SynDiffEditRight.Lines.SetKindAndNumber(I, Kind, LineNumberRight); end; end; end; with Diff.DiffStats do begin StatusBar.Panels[0].Text := rsDiffMatches + IntToStr(matches); StatusBar.Panels[1].Text := rsDiffModifies + IntToStr(modifies); StatusBar.Panels[2].Text := rsDiffAdds + IntToStr(adds); StatusBar.Panels[3].Text := rsDiffDeletes + IntToStr(deletes); if FShowIdentical then begin FShowIdentical:= (modifies = 0) and (adds = 0) and (deletes = 0); if FShowIdentical then ShowIdentical; end; end; finally SynDiffEditLeft.FinishCompare; SynDiffEditRight.FinishCompare; Screen.Cursor := crDefault; actStartCompare.Enabled := True; actCancelCompare.Enabled := False; Dec(ScrollLock); end; if actLineDifferences.Checked then begin SynDiffEditLeft.Highlighter:= SynDiffHighlighterLeft; SynDiffEditRight.Highlighter:= SynDiffHighlighterRight; end; //mnuEdit.Enabled := true; end; procedure TfrmDiffer.actOpenLeftExecute(Sender: TObject); begin dmComData.OpenDialog.FileName:= edtFileNameLeft.Text; dmComData.OpenDialog.Filter:= AllFilesMask; if dmComData.OpenDialog.Execute then begin edtFileNameLeft.Text:= dmComData.OpenDialog.FileName; actReload.Execute; end; end; procedure TfrmDiffer.actOpenRightExecute(Sender: TObject); begin dmComData.OpenDialog.FileName:= edtFileNameRight.Text; dmComData.OpenDialog.Filter:= AllFilesMask; if dmComData.OpenDialog.Execute then begin edtFileNameRight.Text:= dmComData.OpenDialog.FileName; actReload.Execute; end; end; procedure TfrmDiffer.actPaintBackgroundExecute(Sender: TObject); begin if actPaintBackground.Checked then begin SynDiffEditLeft.PaintStyle:= psBackground; SynDiffEditRight.PaintStyle:= psBackground; end else begin SynDiffEditLeft.PaintStyle:= psForeground; SynDiffEditRight.PaintStyle:= psForeground; end; SynDiffHighlighterLeft.UpdateColors; SynDiffHighlighterRight.UpdateColors; end; procedure TfrmDiffer.actSaveAsExecute(Sender: TObject); begin if SynDiffEditActive = SynDiffEditLeft then actSaveLeftAs.Execute else if SynDiffEditActive = SynDiffEditRight then actSaveRightAs.Execute; end; procedure TfrmDiffer.actSaveExecute(Sender: TObject); begin if SynDiffEditActive = SynDiffEditLeft then actSaveLeft.Execute else if SynDiffEditActive = SynDiffEditRight then actSaveRight.Execute; end; procedure TfrmDiffer.actSaveLeftAsExecute(Sender: TObject); begin dmComData.SaveDialog.FileName:= edtFileNameLeft.FileName; if dmComData.SaveDialog.Execute then begin SaveToFile(SynDiffEditLeft, dmComData.SaveDialog.FileName); edtFileNameLeft.FileName:= dmComData.SaveDialog.FileName; end; end; procedure TfrmDiffer.actSaveRightAsExecute(Sender: TObject); begin dmComData.SaveDialog.FileName:= edtFileNameRight.FileName; if dmComData.SaveDialog.Execute then begin SaveToFile(SynDiffEditLeft, dmComData.SaveDialog.FileName); edtFileNameRight.FileName:= dmComData.SaveDialog.FileName; end; end; procedure TfrmDiffer.actBinaryCompareExecute(Sender: TObject); begin mnuEdit.Enabled:= not actBinaryCompare.Checked; mnuEncoding.Enabled:= not actBinaryCompare.Checked; btnLeftEncoding.Enabled:= not actBinaryCompare.Checked; btnRightEncoding.Enabled:= not actBinaryCompare.Checked; actCopyLeftToRight.Enabled:= not actBinaryCompare.Checked; actCopyRightToLeft.Enabled:= not actBinaryCompare.Checked; actSave.Enabled:= not actBinaryCompare.Checked; actSaveAs.Enabled:= not actBinaryCompare.Checked; actSaveLeft.Enabled:= not actBinaryCompare.Checked; actSaveLeftAs.Enabled:= not actBinaryCompare.Checked; actSaveRight.Enabled:= not actBinaryCompare.Checked; actSaveRightAs.Enabled:= not actBinaryCompare.Checked; actIgnoreCase.Enabled:= not actBinaryCompare.Checked; actIgnoreWhiteSpace.Enabled:= not actBinaryCompare.Checked; actPaintBackground.Enabled:= not actBinaryCompare.Checked; actLineDifferences.Enabled:= not actBinaryCompare.Checked; SynDiffEditLeft.Visible:= not actBinaryCompare.Checked; SynDiffEditRight.Visible:= not actBinaryCompare.Checked; BinaryViewerLeft.Visible:= actBinaryCompare.Checked; BinaryViewerRight.Visible:= actBinaryCompare.Checked; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerLeft.FileName:= edtFileNameLeft.Text; BinaryViewerRight.FileName:= edtFileNameRight.Text; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := EmptyStr; StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; end else begin BinaryViewerLeft.FileName:= EmptyStr; BinaryViewerRight.FileName:= EmptyStr; OpenFileLeft(edtFileNameLeft.Text); OpenFileRight(edtFileNameRight.Text); end; if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.actCancelCompareExecute(Sender: TObject); begin if not actBinaryCompare.Checked then Diff.Cancel else begin if Assigned(BinaryCompare) then begin BinaryCompare.Terminate; BinaryCompare:= nil; end; end; end; procedure TfrmDiffer.actAboutExecute(Sender: TObject); begin ShowMessage('Internal Differ tool of Double Commander.' + LineEnding + LineEnding + 'It is inspired by Flavio Etrusco''s Pariter tool.' + LineEnding + 'You can find it on: http://sourceforge.net/projects/pariter' + LineEnding + 'It is based on Angus Johnson''s excellent TDiff component.' + LineEnding + 'You can find it on: http://www.users.on.net/johnson/delphi'); end; procedure TfrmDiffer.actEditCopyExecute(Sender: TObject); begin SynDiffEditActive.CopyToClipboard; end; procedure TfrmDiffer.actEditCutExecute(Sender: TObject); begin SynDiffEditActive.CutToClipboard; end; procedure TfrmDiffer.actEditDeleteExecute(Sender: TObject); begin SynDiffEditActive.ClearSelection; end; procedure TfrmDiffer.actEditPasteExecute(Sender: TObject); begin SynDiffEditActive.PasteFromClipboard; end; procedure TfrmDiffer.actEditRedoExecute(Sender: TObject); begin SynDiffEditActive.Redo; end; procedure TfrmDiffer.actEditSelectAllExecute(Sender: TObject); begin SynDiffEditActive.SelectAll; end; procedure TfrmDiffer.actEditUndoExecute(Sender: TObject); begin SynDiffEditActive.Undo; end; procedure TfrmDiffer.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.ExecuteCommand(cmd, []); end; procedure TfrmDiffer.actIgnoreCaseExecute(Sender: TObject); begin if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.actLineDifferencesExecute(Sender: TObject); begin if actLineDifferences.Checked and (Diff.Count <> 0) then begin SynDiffEditLeft.Highlighter:= SynDiffHighlighterLeft; SynDiffEditRight.Highlighter:= SynDiffHighlighterRight; end else begin SynDiffEditLeft.Highlighter:= nil; SynDiffEditRight.Highlighter:= nil; end; SynDiffEditLeft.Repaint; SynDiffEditRight.Repaint; end; procedure TfrmDiffer.actKeepScrollingExecute(Sender: TObject); begin BinaryViewerLeft.KeepScrolling:= actKeepScrolling.Checked; BinaryViewerRight.KeepScrolling:= actKeepScrolling.Checked; end; procedure TfrmDiffer.btnLeftEncodingClick(Sender: TObject); begin pmEncodingLeft.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmDiffer.btnRightEncodingClick(Sender: TObject); begin pmEncodingRight.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmDiffer.edtFileNameLeftAcceptFileName(Sender: TObject; var Value: String); begin OpenFileLeft(Value); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.edtFileNameRightAcceptFileName(Sender: TObject; var Value: String); begin OpenFileRight(Value); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.FormCreate(Sender: TObject); begin ScrollLock:= 0; Diff:= TDiff.Create(Self); SynDiffEditLeft:= TSynDiffEdit.Create(Self); SynDiffEditRight:= TSynDiffEdit.Create(Self); SynDiffHighlighterLeft:= TSynDiffHighlighter.Create(SynDiffEditLeft); SynDiffHighlighterRight:= TSynDiffHighlighter.Create(SynDiffEditRight); SynDiffEditLeft.Parent:= pnlLeft; SynDiffEditRight.Parent:= pnlRight; SynDiffEditLeft.Align:= alClient; SynDiffEditRight.Align:= alClient; SynDiffEditLeft.PopupMenu:= ContextMenu; SynDiffEditRight.PopupMenu:= ContextMenu; SynDiffEditLeft.ModifiedFile:= SynDiffEditRight; SynDiffEditRight.OriginalFile:= SynDiffEditLeft; SynDiffEditLeft.OnEnter:= @SynDiffEditEnter; SynDiffEditRight.OnEnter:= @SynDiffEditEnter; SynDiffEditLeft.OnStatusChange:= @SynDiffEditLeftStatusChange; SynDiffEditRight.OnStatusChange:= @SynDiffEditRightStatusChange; // Set active editor SynDiffEditActive:= SynDiffEditLeft; BinaryDiffList:= TFPList.Create; BinaryViewerLeft:= TBinaryDiffViewer.Create(Self); BinaryViewerRight:= TBinaryDiffViewer.Create(Self); BinaryViewerLeft.Visible:= False; BinaryViewerRight.Visible:= False; BinaryViewerLeft.Parent:= pnlLeft; BinaryViewerRight.Parent:= pnlRight; BinaryViewerLeft.Align:= alClient; BinaryViewerRight.Align:= alClient; BinaryViewerLeft.Font.Name:= gFonts[dcfViewer].Name; BinaryViewerLeft.Font.Size:= gFonts[dcfViewer].Size; BinaryViewerLeft.Font.Style:= gFonts[dcfViewer].Style; BinaryViewerRight.Font.Name:= gFonts[dcfViewer].Name; BinaryViewerRight.Font.Size:= gFonts[dcfViewer].Size; BinaryViewerRight.Font.Style:= gFonts[dcfViewer].Style; BinaryViewerLeft.SecondViewer:= BinaryViewerRight; BinaryViewerRight.SecondViewer:= BinaryViewerLeft; // Initialize property storage InitPropStorage(Self); // Initialize mode actKeepScrollingExecute(actKeepScrolling); // Fill encoding menu EncodingList:= TStringList.Create; GetSupportedEncodings(EncodingList); FillEncodingMenu(miEncodingLeft, @SetEncodingLeft, 1); FillEncodingMenu(miEncodingRight, @SetEncodingRight, 2); FillEncodingMenu(pmEncodingLeft.Items, @SetEncodingLeft, 1); FillEncodingMenu(pmEncodingRight.Items, @SetEncodingRight, 2); EncodingList.Free; end; procedure TfrmDiffer.FormDestroy(Sender: TObject); begin FreeAndNil(Diff); FreeAndNil(BinaryDiffList); end; procedure TfrmDiffer.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_ESCAPE then begin Key:= 0; Close; end; end; procedure TfrmDiffer.FormResize(Sender: TObject); begin pnlLeft.Width:= (ClientWidth div 2) - (Splitter.Width div 2); end; procedure TfrmDiffer.BinaryCompareFinish; begin BinaryCompare:= nil; BinaryDiffIndex:= -1; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := rsDiffModifies + IntToStr(BinaryDiffList.Count); StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; actStartCompare.Enabled := True; actCancelCompare.Enabled := False; actBinaryCompare.Enabled := True; if FShowIdentical then begin FShowIdentical:= (BinaryDiffList.Count = 0); if FShowIdentical then ShowIdentical; end; end; procedure TfrmDiffer.ShowIdentical; var Message: String; begin Message:= rsDiffFilesIdentical + LineEnding + LineEnding; Message+= edtFileNameLeft.Text + LineEnding + edtFileNameRight.Text; if MessageDlg(rsToolDiffer, Message, mtWarning, [mbClose, mbCancel], 0, mbClose) = mrClose then Close else begin FShowIdentical:= False; end; end; procedure TfrmDiffer.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; procedure TfrmDiffer.Clear(bLeft, bRight: Boolean); begin if bLeft then begin SynDiffEditLeft.Lines.Clear; SetLength(HashListLeft, 0); end; if bRight then begin SynDiffEditRight.Lines.Clear; SetLength(HashListRight, 0); end; Diff.Clear; StatusBar.Panels[0].Text := EmptyStr; StatusBar.Panels[1].Text := EmptyStr; StatusBar.Panels[2].Text := EmptyStr; StatusBar.Panels[3].Text := EmptyStr; actStartCompare.Enabled := True; end; procedure TfrmDiffer.cm_CopyLeftToRight(const Params: array of string); var I, iStart, iFinish: Integer; begin I := SynDiffEditLeft.CaretY - 1; iStart:= SynDiffEditLeft.DiffBegin(I); iFinish:= SynDiffEditLeft.DiffEnd(I); for I:= iStart to iFinish do SynDiffEditRight.Lines[I]:= SynDiffEditLeft.Lines[I]; end; procedure TfrmDiffer.cm_CopyRightToLeft(const Params: array of string); var I, iStart, iFinish: Integer; begin I := SynDiffEditRight.CaretY - 1; iStart:= SynDiffEditRight.DiffBegin(I); iFinish:= SynDiffEditRight.DiffEnd(I); for I:= iStart to iFinish do SynDiffEditLeft.Lines[I]:= SynDiffEditRight.Lines[I]; end; procedure TfrmDiffer.cm_Exit(const Params: array of string); begin Close; end; procedure TfrmDiffer.cm_FirstDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffList.Count > 0 then begin BinaryDiffIndex:= 0; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= BinaryViewerLeft.Position; end; end else begin // Start at first line Line := 0; if Line = SynDiffEditLeft.Lines.Count then Exit; // Skip unmodified lines Kind := ckNone; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); Inc(Line); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_LastDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffList.Count > 0 then begin BinaryDiffIndex:= BinaryDiffList.Count - 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= BinaryViewerLeft.Position; end; end else begin Line := SynDiffEditLeft.Lines.Count - 1; if Line = 0 then Exit; // Skip unmodified lines Kind := ckNone; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); // Find top line of previous difference Kind:= SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if (Line <> 0) then Inc(Line, 2); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_NextDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffIndex < BinaryDiffList.Count - 1 then begin BinaryDiffIndex:= BinaryDiffIndex + 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= BinaryViewerLeft.Position; end; end else begin Line := SynDiffEditLeft.CaretY - 1; if Line = SynDiffEditLeft.Lines.Count - 1 then Exit; // Skip lines with current difference type Kind := SynDiffEditLeft.Lines.Kind[Line]; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); if SynDiffEditLeft.Lines.Kind[Line] = ckNone then begin // Skip unmodified lines Kind := ckNone; while (Line < SynDiffEditLeft.Lines.Count - 1) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Inc(Line); end; Inc(Line); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_PrevDifference(const Params: array of string); var Line: Integer; Kind: TChangeKind; begin if actBinaryCompare.Checked then begin if BinaryDiffIndex > 0 then begin BinaryDiffIndex:= BinaryDiffIndex - 1; BinaryViewerLeft.Position:= PtrInt(BinaryDiffList[BinaryDiffIndex]); if not actKeepScrolling.Checked then BinaryViewerRight.Position:= BinaryViewerLeft.Position; end; end else begin Line := SynDiffEditLeft.CaretY - 1; if Line = 0 then Exit; // Skip lines with current difference type Kind := SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if SynDiffEditLeft.Lines.Kind[Line] = ckNone then begin // Skip unmodified lines Kind := ckNone; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); end; // Find top line of previous difference Kind:= SynDiffEditLeft.Lines.Kind[Line]; while (Line > 0) and (SynDiffEditLeft.Lines.Kind[Line] = Kind) do Dec(Line); if (Line <> 0) then Inc(Line, 2); SynDiffEditLeft.CaretY := Line; SynDiffEditLeft.TopLine := Line; SynDiffEditRight.CaretY := Line; if not actKeepScrolling.Checked then begin SynDiffEditRight.TopLine := Line; end; end; end; procedure TfrmDiffer.cm_Reload(const Params: array of string); begin OpenFileLeft(edtFileNameLeft.FileName); OpenFileRight(edtFileNameRight.FileName); if actAutoCompare.Checked then actStartCompare.Execute; end; procedure TfrmDiffer.cm_SaveLeft(const Params: array of string); begin SaveToFile(SynDiffEditLeft, edtFileNameLeft.FileName); end; procedure TfrmDiffer.cm_SaveRight(const Params: array of string); begin SaveToFile(SynDiffEditRight, edtFileNameRight.FileName); end; constructor TfrmDiffer.Create(TheOwner: TComponent); var HMForm: THMForm; begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, actionList); HMForm := HotMan.Register(Self, HotkeysCategory); HMForm.RegisterActionList(actionList); end; destructor TfrmDiffer.Destroy; begin BinaryViewerLeft.SecondViewer:= nil; BinaryViewerRight.SecondViewer:= nil; HotMan.UnRegister(Self); inherited Destroy; end; procedure TfrmDiffer.BuildHashList(bLeft, bRight: Boolean); var I: Integer; begin if bLeft then begin SetLength(HashListLeft, SynDiffEditLeft.Lines.Count); for I := 0 to SynDiffEditLeft.Lines.Count - 1 do HashListLeft[I]:= Integer(HashString(SynDiffEditLeft.Lines[I], actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; if bRight then begin SetLength(HashListRight, SynDiffEditRight.Lines.Count); for I := 0 to SynDiffEditRight.Lines.Count - 1 do HashListRight[I]:= Integer(HashString(SynDiffEditRight.Lines[I], actIgnoreCase.Checked, actIgnoreWhiteSpace.Checked)); end; actStartCompare.Enabled := (Length(HashListLeft) > 0) and (Length(HashListRight) > 0); end; procedure TfrmDiffer.ChooseEncoding(SynDiffEdit: TSynDiffEdit); begin if SynDiffEdit = SynDiffEditLeft then begin ChooseEncoding(miEncodingLeft, SynDiffEdit.Encoding); ChooseEncoding(pmEncodingLeft.Items, SynDiffEdit.Encoding); end else begin ChooseEncoding(miEncodingRight, SynDiffEdit.Encoding); ChooseEncoding(pmEncodingRight.Items, SynDiffEdit.Encoding); end; end; procedure TfrmDiffer.ChooseEncoding(MenuItem: TMenuItem; Encoding: String); var I: Integer; begin Encoding:= NormalizeEncoding(Encoding); for I:= 0 to MenuItem.Count - 1 do if SameText(NormalizeEncoding(MenuItem.Items[I].Caption), Encoding) then MenuItem.Items[I].Checked:= True; end; procedure TfrmDiffer.FillEncodingMenu(TheOwner: TMenuItem; MenuHandler: TNotifyEvent; GroupIndex: LongInt); var I: Integer; mi: TMenuItem; begin for I:= 0 to EncodingList.Count - 1 do begin mi:= TMenuItem.Create(TheOwner); mi.Caption:= EncodingList[I]; mi.RadioItem:= True; mi.GroupIndex:= GroupIndex; mi.OnClick:= MenuHandler; TheOwner.Add(mi); end; end; procedure TfrmDiffer.LoadFromFile(SynDiffEdit: TSynDiffEdit; const FileName: String); var fsFileStream: TFileStreamEx = nil; begin try fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try SynDiffEdit.BeginUpdate; SynDiffEdit.Lines.LoadFromStream(fsFileStream); if Length(SynDiffEdit.Encoding) = 0 then begin SynDiffEdit.Encoding:= GuessEncoding(SynDiffEdit.Lines.Text); ChooseEncoding(SynDiffEdit); end; SynDiffEdit.Lines.Text:= ConvertEncoding(SynDiffEdit.Lines.Text, SynDiffEdit.Encoding, EncodingUTF8); finally SynDiffEdit.EndUpdate; FreeAndNil(fsFileStream); end; except on EFOpenError do begin msgError(rsMsgErrEOpen + ': ' + FileName); end; on EReadError do begin msgError(rsMsgErrERead + ': ' + FileName); end; end; end; procedure TfrmDiffer.SaveToFile(SynDiffEdit: TSynDiffEdit; const FileName: String); var slStringList: TStringListEx; begin slStringList:= TStringListEx.Create; try slStringList.Assign(SynDiffEdit.Lines); // remove fake lines slStringList.RemoveFake; // restore encoding slStringList.Text:= ConvertEncoding(slStringList.Text, EncodingUTF8, SynDiffEdit.Encoding); try // save to file slStringList.SaveToFile(FileName); SynDiffEdit.Modified:= False; // needed for the undo stack except on EFCreateError do begin msgError(rsMsgErrECreate + ': ' + FileName); end; on EFOpenError do begin msgError(rsMsgErrEOpen + ': ' + FileName); end; on EWriteError do begin msgError(rsMsgErrEWrite + ': ' + FileName); end; end; finally slStringList.Free; end; end; procedure TfrmDiffer.OpenFileLeft(const FileName: String); begin if not mbFileExists(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerLeft.FileName:= FileName end else try Clear(True, False); LoadFromFile(SynDiffEditLeft, FileName); BuildHashList(True, False); SynDiffEditLeft.Repaint; except on EFOpenError do msgWarning(rsMsgErrEOpen + ' ' + FileName); end; end; procedure TfrmDiffer.OpenFileRight(const FileName: String); begin if not mbFileExists(FileName) then Exit; if actBinaryCompare.Checked then begin BinaryDiffList.Clear; BinaryViewerRight.FileName:= FileName end else try Clear(False, True); LoadFromFile(SynDiffEditRight, FileName); BuildHashList(False, True); SynDiffEditRight.Repaint; except on EFOpenError do msgWarning(rsMsgErrEOpen + ' ' + FileName); end; end; procedure TfrmDiffer.SetEncodingLeft(Sender: TObject); begin SynDiffEditLeft.Encoding:= (Sender as TMenuItem).Caption; ChooseEncoding(miEncodingLeft, SynDiffEditLeft.Encoding); ChooseEncoding(pmEncodingLeft.Items, SynDiffEditLeft.Encoding); actReload.Execute; end; procedure TfrmDiffer.SetEncodingRight(Sender: TObject); begin SynDiffEditRight.Encoding:= (Sender as TMenuItem).Caption; ChooseEncoding(miEncodingRight, SynDiffEditRight.Encoding); ChooseEncoding(pmEncodingRight.Items, SynDiffEditRight.Encoding); actReload.Execute; end; procedure TfrmDiffer.SynDiffEditEnter(Sender: TObject); begin SynDiffEditActive:= (Sender as TSynDiffEdit); end; procedure TfrmDiffer.SynDiffEditLeftStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin if (actKeepScrolling.Checked) and (ScrollLock = 0) and ((scTopLine in Changes) or (scLeftChar in Changes)) then try Inc(ScrollLock); while (SynDiffEditRight.PaintLock <> 0) do Sleep(1); SynDiffEditRight.TopLine:= SynDiffEditLeft.TopLine; SynDiffEditRight.LeftChar:= SynDiffEditLeft.LeftChar; finally Dec(ScrollLock); end; end; procedure TfrmDiffer.SynDiffEditRightStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin if (actKeepScrolling.Checked) and (ScrollLock = 0) and ((scTopLine in Changes) or (scLeftChar in Changes)) then try Inc(ScrollLock); while (SynDiffEditLeft.PaintLock <> 0) do Sleep(1); SynDiffEditLeft.TopLine:= SynDiffEditRight.TopLine; SynDiffEditLeft.LeftChar:= SynDiffEditRight.LeftChar; finally Dec(ScrollLock); end; end; initialization TFormCommands.RegisterCommandsForm(TfrmDiffer, HotkeysCategory, @rsHotkeyCategoryDiffer); end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udebug.pas����������������������������������������������������������������������0000644�0001750�0000144�00000012015�11740433676�015276� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains functions used for debugging. Copyright (C) 2011 Przemysław Nagay (cobines@gmail.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 uDebug; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion; // For Lazarus < 0.9.31. // Thread-safe DebugLn via DCDebug functions. // Still not fully safe because may conflict with DebugLn called by LCL. procedure DCDebug(Args: array of const); procedure DCDebug(const S: String; Args: array of const);// similar to Format(s,Args) procedure DCDebug(const s: String); procedure DCDebug(const s1,s2: String); procedure DCDebug(const s1,s2,s3: String); procedure DCDebug(const s1,s2,s3,s4: String); procedure DCDebug(const s1,s2,s3,s4,s5: String); // For Lazarus >= 0.9.31. // DebugLn and DbgOut are thread-safe due to TDCLogger but since TLazLogger // itself is designed for single-thread then DebugLnEnter, DebugLnExit cannot // be used from multiple threads. implementation uses LCLProc, syncobjs {$IF lcl_fullversion >= 093100} , LazLogger, LazLoggerBase, LazClasses {$ENDIF} ; {$IF lcl_fullversion >= 093100} type {en Logger with thread-safe DebugLn and DbgOut. } TDCLogger = class(TLazLoggerFile) private DebugLnLock: TCriticalSection; protected procedure DoDbgOut(const s: string); override; procedure DoDebugLn(const s: string); override; public constructor Create; destructor Destroy; override; end; function CreateDCLogger: TRefCountedObject; begin Result := TDCLogger.Create; TDCLogger(Result).Assign(GetExistingDebugLogger); end; { TDCLogger } procedure TDCLogger.DoDbgOut(const s: string); begin DebugLnLock.Acquire; try inherited DoDbgOut(s); finally DebugLnLock.Release; end; end; procedure TDCLogger.DoDebugLn(const s: string); begin DebugLnLock.Acquire; try inherited DoDebugLn(s); finally DebugLnLock.Release; end; end; constructor TDCLogger.Create; begin DebugLnLock := TCriticalSection.Create; inherited Create; end; destructor TDCLogger.Destroy; begin inherited Destroy; DebugLnLock.Free; end; procedure DCDebug(Args: array of const); begin DebugLn(Args); end; procedure DCDebug(const S: String; Args: array of const);// similar to Format(s,Args) begin DebugLn(S, Args); end; procedure DCDebug(const s: String); begin DebugLn(s); end; procedure DCDebug(const s1,s2: String); begin DebugLn(s1, s2); end; procedure DCDebug(const s1,s2,s3: String); begin DebugLn(s1, s2, s3); end; procedure DCDebug(const s1,s2,s3,s4: String); begin DebugLn(s1, s2, s3, s4); end; procedure DCDebug(const s1,s2,s3,s4,s5: String); begin DebugLn(s1, s2, s3, s4, s5); end; procedure DCDebug(const s1,s2,s3,s4,s5,s6: String); begin DebugLn(s1, s2, s3, s4, s5, s6); end; {$ELSE} var DebugLnLock: TCriticalSection; procedure DCDebug(Args: array of const); begin DebugLnLock.Acquire; try DebugLn(Args); finally DebugLnLock.Release; end; end; procedure DCDebug(const S: String; Args: array of const);// similar to Format(s,Args) begin DebugLnLock.Acquire; try DebugLn(S, Args); finally DebugLnLock.Release; end; end; procedure DCDebug(const s: String); begin DebugLnLock.Acquire; try DebugLn(s); finally DebugLnLock.Release; end; end; procedure DCDebug(const s1,s2: String); begin DebugLnLock.Acquire; try DebugLn(s1, s2); finally DebugLnLock.Release; end; end; procedure DCDebug(const s1,s2,s3: String); begin DebugLnLock.Acquire; try DebugLn(s1, s2, s3); finally DebugLnLock.Release; end; end; procedure DCDebug(const s1,s2,s3,s4: String); begin DebugLnLock.Acquire; try DebugLn(s1, s2, s3, s4); finally DebugLnLock.Release; end; end; procedure DCDebug(const s1,s2,s3,s4,s5: String); begin DebugLnLock.Acquire; try DebugLn(s1, s2, s3, s4, s5); finally DebugLnLock.Release; end; end; procedure DCDebug(const s1,s2,s3,s4,s5,s6: String); begin DebugLnLock.Acquire; try DebugLn(s1, s2, s3, s4, s5, s6); finally DebugLnLock.Release; end; end; {$ENDIF} initialization {$IF lcl_fullversion >= 093100} LazDebugLoggerCreator := @CreateDCLogger; RecreateDebugLogger; {$ELSE} DebugLnLock := TCriticalSection.Create; {$ENDIF} {$IF lcl_fullversion < 093100} finalization DebugLnLock.Free; {$ENDIF} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmodview.lfm��������������������������������������������������������������������0000644�0001750�0000144�00000043227�12646706137�015650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmModView: TfrmModView Left = 395 Height = 319 Top = 104 Width = 488 AutoSize = True BorderIcons = [biSystemMenu] Caption = 'New Size' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 6 ClientHeight = 319 ClientWidth = 488 OnClose = FormClose OnCreate = FormCreate OnKeyPress = FormKeyPress OnShow = FormShow Position = poOwnerFormCenter LCLVersion = '1.6.0.3' object bplButtons: TButtonPanel Left = 10 Height = 34 Top = 279 Width = 468 OKButton.Name = 'OKButton' OKButton.DefaultCaption = True OKButton.OnClick = btnOkClick HelpButton.Name = 'HelpButton' HelpButton.DefaultCaption = True CloseButton.Name = 'CloseButton' CloseButton.DefaultCaption = True CancelButton.Name = 'CancelButton' CancelButton.DefaultCaption = True CancelButton.OnClick = btnCancelClick TabOrder = 0 ShowButtons = [pbOK, pbCancel] end object pnlMain: TPanel Left = 10 Height = 267 Top = 6 Width = 468 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 267 ClientWidth = 468 TabOrder = 1 object pnlQuality: TPanel AnchorSideRight.Control = pnlSize AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 273 ClientWidth = 468 TabOrder = 2 object tbQuality: TTrackBar Left = 0 Height = 22 Top = 71 Width = 140 Max = 100 Min = 1 Position = 80 OnMouseMove = tbQualityMouseMove TabOrder = 0 end object lblQuality: TLabel Left = 32 Height = 15 Top = 47 Width = 141 Caption = 'Quality of compress to Jpg' Enabled = False ParentColor = False end object teQuality: TEdit Left = 144 Height = 23 Top = 71 Width = 43 OnKeyPress = teQualityKeyPress OnKeyUp = teQualityKeyUp TabOrder = 1 Text = '80' end object rbJpg: TRadioButton Left = 8 Height = 19 Top = 0 Width = 39 Caption = 'JPG' Checked = True OnChange = rbJpgChange TabOrder = 2 TabStop = True end object rbBmp: TRadioButton Left = 59 Height = 19 Top = 0 Width = 45 Caption = 'BMP' OnChange = rbBmpChange TabOrder = 3 end object rbPng: TRadioButton Left = 112 Height = 19 Top = 0 Width = 44 Caption = 'PNG' OnChange = rbPngChange TabOrder = 4 end object rbIco: TRadioButton Left = 29 Height = 19 Top = 22 Width = 40 Caption = 'ICO' OnChange = rbIcoChange TabOrder = 5 end object rbPnm: TRadioButton Left = 88 Height = 19 Top = 21 Width = 47 Caption = 'PNM' OnChange = rbPnmChange TabOrder = 6 end end object pnlCopyMoveFile: TPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 273 ClientWidth = 468 Constraints.MinWidth = 300 TabOrder = 0 object tePath1: TEdit AnchorSideLeft.Control = rbPath1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlCopyMoveFile AnchorSideRight.Control = btnPath1 Left = 38 Height = 23 Top = 5 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 5 BorderSpacing.Right = 6 TabOrder = 0 end object tePath2: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 38 Height = 23 Top = 34 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object tePath3: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom Left = 38 Height = 23 Top = 63 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 2 end object btnPath1: TSpeedButton AnchorSideTop.Control = tePath1 AnchorSideRight.Control = pnlCopyMoveFile AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath1 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 5 Width = 21 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 5 Caption = '...' OnClick = btnPathClick end object tePath4: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath3 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom Left = 38 Height = 23 Top = 92 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 3 end object tePath5: TEdit AnchorSideLeft.Control = tePath1 AnchorSideTop.Control = tePath4 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tePath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 38 Height = 23 Top = 121 Width = 398 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 10 TabOrder = 4 end object rbPath1: TRadioButton AnchorSideTop.Control = tePath1 AnchorSideBottom.Control = tePath1 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 5 Width = 20 Anchors = [akTop, akLeft, akBottom] Checked = True OnKeyPress = FormKeyPress ParentBidiMode = False TabOrder = 5 TabStop = True end object rbPath2: TRadioButton AnchorSideTop.Control = tePath2 AnchorSideBottom.Control = tePath2 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 34 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 6 end object rbPath3: TRadioButton AnchorSideTop.Control = tePath3 AnchorSideBottom.Control = tePath3 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 63 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 7 end object rbPath4: TRadioButton AnchorSideTop.Control = tePath4 AnchorSideBottom.Control = tePath4 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 92 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 8 end object rbPath5: TRadioButton AnchorSideTop.Control = tePath5 AnchorSideBottom.Control = tePath5 AnchorSideBottom.Side = asrBottom Left = 18 Height = 23 Top = 121 Width = 20 Anchors = [akTop, akLeft, akBottom] OnKeyPress = FormKeyPress TabOrder = 9 end object btnPath2: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath2 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath2 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 34 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath3: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath3 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath3 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 63 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath4: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath4 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath4 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 92 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object btnPath5: TSpeedButton AnchorSideLeft.Control = btnPath1 AnchorSideTop.Control = tePath5 AnchorSideRight.Control = btnPath1 AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tePath5 AnchorSideBottom.Side = asrBottom Left = 442 Height = 23 Top = 121 Width = 21 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '...' OnClick = btnPathClick end object lblPath1: TLabel AnchorSideTop.Control = rbPath1 AnchorSideBottom.Control = rbPath1 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 6 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 5 BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '1' ParentColor = False end object lblPath2: TLabel AnchorSideTop.Control = rbPath2 AnchorSideBottom.Control = rbPath2 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 35 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '2' ParentColor = False end object lblPath3: TLabel AnchorSideTop.Control = rbPath3 AnchorSideBottom.Control = rbPath3 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 64 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '3' ParentColor = False end object lblPath4: TLabel AnchorSideTop.Control = rbPath4 AnchorSideBottom.Control = rbPath4 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 93 Width = 6 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '4' ParentColor = False end object lblPath5: TLabel AnchorSideTop.Control = rbPath5 AnchorSideBottom.Control = rbPath5 AnchorSideBottom.Side = asrBottom Left = 5 Height = 20 Top = 122 Width = 6 Alignment = taCenter Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 1 BorderSpacing.Bottom = 2 Caption = '5' ParentColor = False end end object pnlSize: TPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 273 Top = 0 Width = 468 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ClientHeight = 273 ClientWidth = 468 TabOrder = 1 object lblHeight: TLabel AnchorSideTop.Control = teHeight AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 31 Width = 42 Caption = 'Height :' ParentColor = False end object lblWidth: TLabel AnchorSideTop.Control = teWidth AnchorSideTop.Side = asrCenter Left = 6 Height = 15 Top = 4 Width = 38 Caption = 'Width :' ParentColor = False end object teWidth: TEdit AnchorSideLeft.Control = lblWidth AnchorSideLeft.Side = asrBottom Left = 54 Height = 23 Top = 0 Width = 82 BorderSpacing.Left = 10 OnKeyPress = teWidthKeyPress OnKeyUp = teWidthKeyUp TabOrder = 0 Text = 'Width' end object teHeight: TEdit AnchorSideLeft.Control = teWidth AnchorSideTop.Control = teWidth AnchorSideTop.Side = asrBottom Left = 54 Height = 23 Top = 27 Width = 82 BorderSpacing.Top = 4 OnKeyPress = teHeightKeyPress OnKeyUp = teHeightKeyUp TabOrder = 1 Text = 'Height' end object btnProportion: TSpeedButton AnchorSideLeft.Control = teWidth AnchorSideLeft.Side = asrBottom Left = 142 Height = 32 Top = 8 Width = 26 AllowAllUp = True BorderSpacing.Left = 6 Down = True GroupIndex = 1 OnClick = btnProportionClick end end end object sddCopyMoveFile: TSelectDirectoryDialog left = 288 top = 40 end object ImageList: TImageList Height = 24 Width = 9 left = 288 top = 112 Bitmap = { 4C69020000000900000018000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000535755565357 55FF535755FF535755FF535755FF535755FF5357555600000000000000005357 55FF8E8D8DFFE9E8E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF000000000000 0000535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF0000 000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357 55FF0000000000000000535755FFE9E8E8FF535755FF00000000535755FFE9E8 E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF000000005357 55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF858A 88FF535755FFE9E8E8FF535755FF0000000000000000535755FF918F8FFF3634 2EFFECEEEEFF858A88FF918F8FFF535755FF0000000000000000535755445357 55FF36342EFFECEEEEFF858A88FF535755FF5357555600000000000000000000 00000000000036342EFFECEEEEFF858A88FF0000000000000000000000000000 0000000000000000000036342EFFECEEEEFF858A88FF00000000000000000000 00000000000053575544535755FF36342EFFECEEEEFF858A88FF535755FF5357 55440000000000000000535755FF999898FF36342EFFECEEEEFF858A88FF9795 95FF535755FF0000000000000000535755FFE9E8E8FF535755FF36342EFF5357 55FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF535755FF0000 0000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8E8FF5357 55FF00000000535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8 E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF535755FF000000000000 0000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9B9FF535755FF0000 00005357550053575556535755FF535755FF535755FF535755FF535755FF5357 5556000000000000000000000000000000000000000000000000000000000000 0000535755000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000053575556535755FF535755FF5357 55FF535755FF535755FF535755560000000000000000535755FF8E8D8DFFE9E8 E8FFE9E8E8FFE9E8E8FF908E8EFF535755FF0000000000000000535755FFE9E8 E8FF535755FF535755FF535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF000000000000 0000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF0000 000000000000535755FFE9E8E8FF535755FF53575500535755FFE9E8E8FF5357 55FF0000000000000000535755FFE9E8E8FF535755FF858A88FF535755FFE9E8 E8FF535755FF0000000000000000535755FF918F8FFF36342EFFECEEEEFF858A 88FF918F8FFF535755FF000000000000000053575544535755FF36342EFFECEE EEFF858A88FF535755FF53575556000000000000000053575500918F8F003634 2EFFECEEEEFF858A88FF918F8F00535755000000000000000000535755005357 550036342E00ECEEEE00858A8800535755005357550000000000000000000000 00000000000036342E00ECEEEE00858A88000000000000000000000000000000 0000000000000000000036342E00ECEEEE00858A880000000000000000000000 000000000000535755005357550036342E00ECEEEE00858A8800535755005357 55000000000000000000535755009998980036342EFFECEEEEFF858A88FF9795 950053575500000000000000000053575544535755FF36342EFFECEEEEFF858A 88FF535755FF535755440000000000000000535755FF999898FF36342EFFECEE EEFF858A88FF979595FF535755FF0000000000000000535755FFE9E8E8FF5357 55FF36342EFF535755FFE9E8E8FF535755FF0000000000000000535755FFE9E8 E8FF535755FF00000000535755FFE9E8E8FF535755FF00000000000000005357 55FFE9E8E8FF535755FF53575500535755FFE9E8E8FF535755FF000000000000 0000535755FFE9E8E8FF535755FFE9E8E800535755FFE9E8E8FF535755FF0000 000053575500535755FFE9E8E8FF535755FF535755FF535755FFE9E8E8FF5357 55FF0000000000000000535755FF9E9D9DFFE9E8E8FFE9E8E8FFE9E8E8FFBAB9 B9FF535755FF000000000000000053575556535755FF535755FF535755FF5357 55FF535755FF5357555600000000 } end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uhotdir.pas���������������������������������������������������������������������0000644�0001750�0000144�00000141564�12656270711�015511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Load/Save/WorkingWith HotDir Copyright (C) 2009-2016 Alexander Koblov (alexx2000@mail.ru) 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 -This unit has been added in 2014. -Inspired a lot from "usearchtemplate" } unit uHotDir; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, SysUtils, Menus, ExtCtrls, Controls, ComCtrls, //DC DCClassesUtf8, DCXmlConfig; const cSectionOfHotDir = 'DirectoryHotList'; ACTION_INVALID = 0; ACTION_ADDTOHOTLIST = 1; ACTION_ADDJUSTSOURCETOHOTLIST = 2; ACTION_ADDBOTHTOHOTLIST = 3; ACTION_CONFIGTOHOTLIST = 4; ACTION_JUSTSHOWCONFIGHOTLIST = 5; ACTION_ADDSELECTEDDIR = 6; ACTION_DIRECTLYCONFIGENTRY = 7; HOTLISTMAGICWORDS:array[1..7] of string =('add','addsrconly','addboth','config','show','addsel','directconfig'); TAGOFFSET_FORCHANGETOSPECIALDIR = $10000; ICONINDEX_SUBMENU = 0; ICONINDEX_DIRECTORYNOTPRESENTHERE = 1; ICONINDEX_SUBMENUWITHMISSING = 2; ICONINDEX_NEWADDEDDIRECTORY = 3; ICONINDEXNAME:array[0..3] of string = ('submenu','dirmissing','submenuwithmissing','newaddition'); HOTLIST_SEPARATORSTRING:string='···························'; TERMINATORNOTPRESENT = ':-<#/?*+*?\#>-:'; STR_ACTIVEFRAME: string = 'panel=active'; STR_NOTACTIVEFRAME: string = 'panel=inactive'; STR_LEFTFRAME: string = 'panel=left'; STR_RIGHTFRAME: string = 'panel=right'; STR_NAME: string = 'column=name'; STR_EXTENSION: string = 'column=ext'; STR_SIZE: string = 'column=size'; STR_MODIFICATIONDATETIME: string = 'column=datetime'; STR_ASCENDING : string = 'order=ascending'; STR_DESCENDING : string = 'order=descending'; type { TKindOfHotDirEntry } TKindOfHotDirEntry = (hd_NULL, hd_CHANGEPATH, hd_SEPARATOR, hd_STARTMENU, hd_ENDMENU, hd_COMMAND); { TKindHotDirMenuPopulation } TKindHotDirMenuPopulation = (mpJUSTHOTDIRS, mpHOTDIRSWITHCONFIG, mpPATHHELPER); { TPositionWhereToAddHotDir } TPositionWhereToAddHotDir = (ahdFirst, ahdLast, ahdSmart); { TExistingState } TExistingState = (DirExistUnknown, DirExist, DirNotExist); { TProcedureWhenClickMenuItem} TProcedureWhenClickOnMenuItem = procedure(Sender: TObject) of object; { THotDir } THotDir = class private FDispatcher: TKindOfHotDirEntry; FHotDirName: string; FHotDirPath: string; FHotDirPathSort: longint; FHotDirTarget: string; FHotDirTargetSort: longint; FHotDirExistingState: TExistingState; FGroupNumber : integer; public constructor Create; procedure CopyToHotDir(var DestinationHotDir: THotDir); property Dispatcher: TKindOfHotDirEntry read FDispatcher write FDispatcher; property HotDirName: string read FHotDirName write FHotDirName; property HotDirPath: string read FHotDirPath write FHotDirPath; property HotDirPathSort: longint read FHotDirPathSort write FHotDirPathSort; property HotDirTarget: string read FHotDirTarget write FHotDirTarget; property HotDirTargetSort: longint read FHotDirTargetSort write FHotDirTargetSort; property HotDirExisting: TExistingState read FHotDirExistingState write FHotDirExistingState; property GroupNumber: integer read FGroupNumber write FGroupNumber; end; { TDirectoryHotlist } TDirectoryHotlist = class(TList) private function GetHotDir(Index: integer): THotDir; public constructor Create; procedure Clear; override; function Add(HotDir: THotDir): integer; procedure DeleteHotDir(Index: integer); procedure CopyDirectoryHotlistToDirectoryHotlist(var DestinationDirectoryHotlist: TDirectoryHotlist); procedure LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode; FlagEraseOriginalOnes: boolean); procedure ImportDoubleCommander(DoubleCommanderFilename: String); function ExportDoubleCommander(DoubleCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; procedure PopulateMenuWithHotDir(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenHotDirItemClicked, ProcedureWhenHotDirAddOrConfigClicked: TProcedureWhenClickOnMenuItem; KindHotDirMenuPopulation: TKindHotDirMenuPopulation; TagOffset: longint); function LoadTTreeView(ParamTreeView:TTreeView; DirectoryHotlistIndexToSelectIfAny:longint):TTreeNode; procedure RefreshFromTTreeView(ParamTreeView:TTreeView); function AddFromAnotherTTreeViewTheSelected(ParamWorkingTreeView, ParamTreeViewToImport:TTreeView; FlagAddThemAll: boolean): longint; function ComputeSignature:dword; property HotDir[Index: integer]: THotDir read GetHotDir; {$IFDEF MSWINDOWS} function ImportTotalCommander(TotalCommanderFilename: String): integer; function ExportTotalCommander(TotalCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; {$ENDIF} end; { TCheckDrivePresenceThread } TCheckDrivePresenceThread = class(TThread) private FDriveToSearchFor: string; FListOfNonExistingDrive: TStringList; FThreadCountPoint: ^longint; procedure ReportNotPresentInTheThread; procedure ReportPresentInTheThread; protected procedure Execute; override; public constructor Create(sDrive: string; ParamListOfNonExistingDrive: TStringList; var ThreadCount: longint); destructor Destroy; override; end; implementation uses //Lazarus, Free-Pascal, etc. crc, Graphics, Forms, lazutf8, //DC DCFileAttributes, uDebug, uDCUtils, fMain, uFile, uLng, DCOSUtils, uGlobs, uSpecialDir {$IFDEF MSWINDOWS} ,uTotalCommander {$ENDIF} ; { THotDir.Create } constructor THotDir.Create; begin inherited Create; FDispatcher := hd_NULL; FHotDirName := ''; FHotDirPath := ''; FHotDirPathSort := 0; FHotDirTarget := ''; FHotDirTargetSort := 0; FHotDirExistingState := DirExistUnknown; FGroupNumber := 0; end; { THotDir.CopyToHotDir } procedure THotDir.CopyToHotDir(var DestinationHotDir: THotDir); begin DestinationHotDir.Dispatcher := FDispatcher; DestinationHotDir.HotDirName := FHotDirName; DestinationHotDir.HotDirPath := FHotDirPath; DestinationHotDir.HotDirPathSort := FHotDirPathSort; DestinationHotDir.HotDirTarget := FHotDirTarget; DestinationHotDir.HotDirTargetSort := FHotDirTargetSort; DestinationHotDir.HotDirExisting := FHotDirExistingState; DestinationHotDir.GroupNumber := FGroupNumber; end; { TDirectoryHotlist.Create } constructor TDirectoryHotlist.Create; begin inherited Create; end; { TDirectoryHotlist.Clear } procedure TDirectoryHotlist.Clear; var i: integer; begin for i := 0 to Count - 1 do HotDir[i].Free; inherited Clear; end; { TDirectoryHotlist.Add } function TDirectoryHotlist.Add(HotDir: THotDir): integer; begin Result := inherited Add(HotDir); end; { TDirectoryHotlist.DeleteHotDir } procedure TDirectoryHotlist.DeleteHotDir(Index: integer); begin HotDir[Index].Free; Delete(Index); end; { TDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist } procedure TDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(var DestinationDirectoryHotlist: TDirectoryHotlist); var LocalHotDir: THotDir; Index: longint; begin //Let's delete possible previous list content for Index := pred(DestinationDirectoryHotlist.Count) downto 0 do DestinationDirectoryHotlist.DeleteHotDir(Index); DestinationDirectoryHotlist.Clear; //Now let's create entries and add them one by one to the destination list for Index := 0 to pred(Count) do begin LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := HotDir[Index].Dispatcher; LocalHotDir.HotDirName := HotDir[Index].HotDirName; LocalHotDir.HotDirPath := HotDir[Index].HotDirPath; LocalHotDir.HotDirPathSort := HotDir[Index].HotDirPathSort; LocalHotDir.HotDirTarget := HotDir[Index].HotDirTarget; LocalHotDir.HotDirTargetSort := HotDir[Index].HotDirTargetSort; LocalHotDir.FHotDirExistingState := HotDir[Index].HotDirExisting; LocalHotDir.FGroupNumber := HotDir[Index].GroupNumber; DestinationDirectoryHotlist.Add(LocalHotDir); end; end; { TDirectoryHotlist.LoadTTreeView } //For each node, the "ImageIndex" field is recuperated to be an index of which //item in the directory list it represent. Because of the fact that the //"hd_ENDMENU's" don't have their direct element in the tree, the field //"absoluteindex" cannot be used for that since as soon as there is a subment, //we lost the linearity of the matching of absoluteindex vs index of hotdir in //the list. function TDirectoryHotlist.LoadTTreeView(ParamTreeView:TTreeView; DirectoryHotlistIndexToSelectIfAny:longint):TTreeNode; var Index: longint; procedure RecursivAddElements(WorkingNode: TTreeNode); var FlagGetOut: boolean = False; LocalNode: TTreeNode; begin while (FlagGetOut = False) and (Index < Count) do begin case HotDir[Index].Dispatcher of hd_STARTMENU: begin LocalNode := ParamTreeView.Items.AddChildObject(WorkingNode, HotDir[Index].HotDirName,HotDir[Index]); if HotDir[Index].FHotDirExistingState=DirNotExist then begin LocalNode.ImageIndex:=ICONINDEX_SUBMENUWITHMISSING; LocalNode.SelectedIndex:=ICONINDEX_SUBMENUWITHMISSING; LocalNode.StateIndex:=ICONINDEX_SUBMENUWITHMISSING; end else begin LocalNode.ImageIndex:=ICONINDEX_SUBMENU; LocalNode.SelectedIndex:=ICONINDEX_SUBMENU; LocalNode.StateIndex:=ICONINDEX_SUBMENU; end; LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); RecursivAddElements(LocalNode); end; hd_ENDMENU: begin FlagGetOut := True; Inc(Index); end; hd_SEPARATOR: begin LocalNode:=ParamTreeView.Items.AddChildObject(WorkingNode, HOTLIST_SEPARATORSTRING ,HotDir[Index]); LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); end else begin LocalNode:=ParamTreeView.Items.AddChildObject(WorkingNode, HotDir[Index].HotDirName,HotDir[Index]); if HotDir[Index].FHotDirExistingState=DirNotExist then begin LocalNode.ImageIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; LocalNode.SelectedIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; LocalNode.StateIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; end; LocalNode.Data:=HotDir[Index]; if DirectoryHotlistIndexToSelectIfAny=Index then result:=LocalNode; Inc(Index); end; end; end; end; begin result:=nil; ParamTreeView.Items.Clear; Index := 0; RecursivAddElements(nil); end; { TDirectoryHotlist.PopulateMenuWithHotDir } procedure TDirectoryHotlist.PopulateMenuWithHotDir(mncmpMenuComponentToPopulate: TComponent; ProcedureWhenHotDirItemClicked, ProcedureWhenHotDirAddOrConfigClicked: TProcedureWhenClickOnMenuItem; KindHotDirMenuPopulation: TKindHotDirMenuPopulation; TagOffset: longint); var I: longint; //Same variable for main and local routine FlagCurrentPathAlreadyInMenu, FlagSelectedPathAlreadyInMenu: boolean; CurrentPathToSearch, SelectedPathToSearch: string; MaybeActiveOrSelectedDirectories: TFiles; //Warning: "CompleteMenu" is recursive and call itself. function CompleteMenu(ParamMenuItem: TMenuItem): longint; var localmi: TMenuItem; LocalLastAdditionIsASeparator: boolean; begin Result := 0; LocalLastAdditionIsASeparator := False; while I < Count do begin Inc(I); case HotDir[I - 1].Dispatcher of hd_CHANGEPATH: begin case HotDir[I - 1].HotDirExisting of DirExistUnknown, DirExist: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := GetMenuCaptionAccordingToOptions(HotDir[I - 1].HotDirName,HotDir[I - 1].HotDirPath); localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenHotDirItemClicked; ParamMenuItem.Add(localmi); if CurrentPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagCurrentPathAlreadyInMenu := True; if SelectedPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagSelectedPathAlreadyInMenu := True; LocalLastAdditionIsASeparator := False; Inc(Result); end; end; end; hd_NULL, hd_COMMAND: begin if KindHotDirMenuPopulation <> mpPATHHELPER then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := HotDir[I - 1].HotDirName; localmi.tag := (I - 1) + TagOffset; localmi.OnClick := ProcedureWhenHotDirItemClicked; ParamMenuItem.Add(localmi); LocalLastAdditionIsASeparator := False; Inc(Result); end; end; hd_SEPARATOR: begin if (ParamMenuItem.Count > 0) and (not LocalLastAdditionIsASeparator) then begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := '-'; ParamMenuItem.Add(localmi); LocalLastAdditionIsASeparator := True; Inc(Result); end; end; hd_STARTMENU: begin localmi := TMenuItem.Create(ParamMenuItem); localmi.Caption := HotDir[I - 1].HotDirName; if gIconsInMenus then localmi.ImageIndex:=ICONINDEX_SUBMENU; ParamMenuItem.Add(localmi); CompleteMenu(localmi); if localmi.Count <> 0 then begin LocalLastAdditionIsASeparator := False; Inc(Result); end else begin localmi.Free; end; end; hd_ENDMENU: begin if LocalLastAdditionIsASeparator then begin ParamMenuItem.Items[pred(ParamMenuItem.Count)].Free; Dec(Result); end; exit; end; end; //case HotDir[I-1].Dispatcher of end; //while I<Count do end; var miMainTree: TMenuItem; LastAdditionIsASeparator: boolean; NumberOfElementsSoFar, InitialNumberOfItems: longint; begin MaybeActiveOrSelectedDirectories:=frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try // Create All popup menu CurrentPathToSearch := UpperCase(mbExpandFileName(frmMain.ActiveFrame.CurrentPath)); if MaybeActiveOrSelectedDirectories.Count=1 then SelectedPathToSearch := UpperCase(IncludeTrailingPathDelimiter(mbExpandFileName(MaybeActiveOrSelectedDirectories.Items[0].FullPath))) else SelectedPathToSearch := TERMINATORNOTPRESENT; FlagCurrentPathAlreadyInMenu := False; FlagSelectedPathAlreadyInMenu := FALSE; LastAdditionIsASeparator := False; case KindHotDirMenuPopulation of mpJUSTHOTDIRS, mpHOTDIRSWITHCONFIG: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then begin TPopupMenu(mncmpMenuComponentToPopulate).Items.Clear; InitialNumberOfItems := mncmpMenuComponentToPopulate.ComponentCount; end; end; end; I := 0; while I < Count do begin Inc(I); case HotDir[I - 1].Dispatcher of hd_CHANGEPATH: begin case HotDir[I - 1].HotDirExisting of DirExistUnknown, DirExist: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := GetMenuCaptionAccordingToOptions(HotDir[I - 1].HotDirName,HotDir[I - 1].HotDirPath); miMainTree.tag := (I - 1) + TagOffset; miMainTree.OnClick := ProcedureWhenHotDirItemClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); if CurrentPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagCurrentPathAlreadyInMenu := True; if SelectedPathToSearch = UpperCase(mbExpandFileName(HotDir[I - 1].FHotDirPath)) then FlagSelectedPathAlreadyInMenu := True; LastAdditionIsASeparator := False; end; end; end; hd_NULL, hd_COMMAND: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := HotDir[I - 1].HotDirName; miMainTree.tag := (I - 1) + TagOffset; miMainTree.OnClick := ProcedureWhenHotDirItemClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); LastAdditionIsASeparator := False; end; hd_SEPARATOR: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then NumberOfElementsSoFar := TPopupMenu(mncmpMenuComponentToPopulate).Items.Count else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then NumberOfElementsSoFar := TMenuItem(mncmpMenuComponentToPopulate).Count; if (NumberOfElementsSoFar > 0) and (not LastAdditionIsASeparator) then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); LastAdditionIsASeparator := True; end; end; hd_STARTMENU: begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := HotDir[I - 1].HotDirName; if gIconsInMenus then miMainTree.ImageIndex := ICONINDEX_SUBMENU; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); CompleteMenu(miMainTree); if miMainTree.Count <> 0 then begin LastAdditionIsASeparator := False; end else begin miMainTree.Free; end; end; hd_ENDMENU: begin if LastAdditionIsASeparator then begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items[pred(TPopupMenu(mncmpMenuComponentToPopulate).Items.Count)].Free else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Items[pred(TMenuItem(mncmpMenuComponentToPopulate).Count)].Free; end; end; end; end; //2014-08-25:If last item added is a separator, we need to remove it so it will not look bad with another separator added at the end if LastAdditionIsASeparator then begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items[pred(TPopupMenu(mncmpMenuComponentToPopulate).Items.Count)].Free else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Items[pred(TMenuItem(mncmpMenuComponentToPopulate).Count)].Free; end; case KindHotDirMenuPopulation of mpHOTDIRSWITHCONFIG: begin if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then begin if mncmpMenuComponentToPopulate.ComponentCount>InitialNumberOfItems then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; // Let's add the "Special path" in a context of change directory gSpecialDirList.PopulateMenuWithSpecialDir(mncmpMenuComponentToPopulate, mp_CHANGEDIR, ProcedureWhenHotDirItemClicked); // now add delimiter miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := '-'; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); //now add the "selected path", if any, if it's the case if MaybeActiveOrSelectedDirectories.Count>0 then begin miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); case MaybeActiveOrSelectedDirectories.Count of 1: with Application.MainForm as TForm do if not FlagSelectedPathAlreadyInMenu then miMainTree.Caption := rsMsgHotDirAddSelectedDirectory + MinimizeFilePath(MaybeActiveOrSelectedDirectories.Items[0].FullPath, Canvas, 250) else miMainTree.Caption := rsMsgHotDirReAddSelectedDirectory + MinimizeFilePath(MaybeActiveOrSelectedDirectories.Items[0].FullPath, Canvas, 250); else miMainTree.Caption := Format(rsMsgHotDirAddSelectedDirectories,[MaybeActiveOrSelectedDirectories.Count]); end; miMainTree.Tag := ACTION_ADDSELECTEDDIR; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; // now allow to add or re-add the "current path" miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); with Application.MainForm as TForm do if not FlagCurrentPathAlreadyInMenu then miMainTree.Caption := rsMsgHotDirAddThisDirectory + MinimizeFilePath(frmMain.ActiveFrame.CurrentPath, Canvas, 250) else miMainTree.Caption := rsMsgHotDirReAddThisDirectory + MinimizeFilePath(frmMain.ActiveFrame.CurrentPath, Canvas, 250); miMainTree.Tag := ACTION_ADDTOHOTLIST; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); // now add configure item miMainTree := TMenuItem.Create(mncmpMenuComponentToPopulate); miMainTree.Caption := rsMsgHotDirConfigHotlist; miMainTree.Tag := ACTION_CONFIGTOHOTLIST; miMainTree.ShortCut := frmMain.mnuCmdConfigDirHotlist.ShortCut; miMainTree.OnClick := ProcedureWhenHotDirAddOrConfigClicked; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then TPopupMenu(mncmpMenuComponentToPopulate).Items.Add(miMainTree) else if mncmpMenuComponentToPopulate.ClassType = TMenuItem then TMenuItem(mncmpMenuComponentToPopulate).Add(miMainTree); end; end; //case KindHotDirMenuPopulation of finally FreeAndNil(MaybeActiveOrSelectedDirectories); end; if mncmpMenuComponentToPopulate.ClassType = TPopupMenu then if TPopupMenu(mncmpMenuComponentToPopulate).Images=nil then TPopupMenu(mncmpMenuComponentToPopulate).Images:= frmMain.imgLstDirectoryHotlist; if mncmpMenuComponentToPopulate.ClassType = TMenuItem then if TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images=nil then TMenuItem(mncmpMenuComponentToPopulate).GetParentMenu.Images:= frmMain.imgLstDirectoryHotlist; end; { TDirectoryHotlist.LoadFromXml } { Information are stored like originally DC was storing them WITH addition of menu related info in a simular way TC. } procedure TDirectoryHotlist.LoadFromXml(AConfig: TXmlConfig; ANode: TXmlNode); var sName, sPath: string; LocalHotDir: THotDir; CurrentMenuLevel: integer; FlagAvortInsertion: boolean; begin Clear; CurrentMenuLevel := 0; ANode := ANode.FindNode(cSectionOfHotDir); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('HotDir') = 0 then begin if AConfig.TryGetAttr(ANode, 'Name', sName) and AConfig.TryGetAttr(ANode, 'Path', sPath) then begin FlagAvortInsertion := False; LocalHotDir := THotDir.Create; if sName = '-' then begin LocalHotDir.Dispatcher := hd_SEPARATOR; end else begin if sName = '--' then begin LocalHotDir.Dispatcher := hd_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; //Sanity correction in case we got corrupted from any ways end else begin if (UTF8Length(sName) > 1) then begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalHotDir.Dispatcher := hd_STARTMENU; LocalHotDir.HotDirName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalHotDir.Dispatcher = hd_NULL then begin LocalHotDir.HotDirName := sName; LocalHotDir.HotDirPath := sPath; if UTF8Pos('cm_', UTF8LowerCase(sPath)) = 0 then begin LocalHotDir.HotDirPathSort := AConfig.GetAttr(Anode, 'PathSort', 0); LocalHotDir.HotDirTarget := AConfig.GetAttr(ANode, 'Target', ''); LocalHotDir.HotDirTargetSort := AConfig.GetAttr(Anode, 'TargetSort', 0); if LocalHotDir.HotDirPath<>'' then LocalHotDir.HotDirPath:=IncludeTrailingPathDelimiter(LocalHotDir.HotDirPath); if LocalHotDir.HotDirTarget<>'' then LocalHotDir.HotDirTarget:=IncludeTrailingPathDelimiter(LocalHotDir.HotDirTarget); LocalHotDir.Dispatcher := hd_CHANGEPATH; end else begin LocalHotDir.Dispatcher := hd_COMMAND; end; end; end; end; if not FlagAvortInsertion then begin Add(LocalHotDir); end else begin LocalHotDir.Free; end; end; end; ANode := ANode.NextSibling; end; //Try to fix possible problem if the LAST MENU is not ending correctly... while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := hd_ENDMENU; Add(LocalHotDir); end; end; end; { TDirectoryHotlist.SaveToXml } // Information are stored like originally DC was storing them WITH addition of menu related info in a simular way TC. // When the parameter has the same value as it would have when loaded with no value (so with the default value), the parameter is not saved... // ...this way, it makes the overall filelenth smaller. When running on a portable mode from a usb key, everything thing counts! :-) // ..."Name" and "Path" always must be present for backward compatibility reason in case someone would go backward. // ...Not saving the value that are correctly initialized anyway as default on startup, with a setup of 386 entries for example saved 6642 bytes (5.3% of original 126005 bytes file) // procedure TDirectoryHotlist.SaveToXml(AConfig: TXmlConfig; ANode: TXmlNode; FlagEraseOriginalOnes: boolean); var Index: integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, cSectionOfHotDir, True); if FlagEraseOriginalOnes then AConfig.ClearNode(ANode); for Index := 0 to pred(Count) do begin SubNode := AConfig.AddNode(ANode, 'HotDir'); case THotDir(HotDir[Index]).Dispatcher of hd_NULL: begin AConfig.SetAttr(SubNode, 'Name', ''); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_CHANGEPATH: begin AConfig.SetAttr(SubNode, 'Name', HotDir[Index].HotDirName); AConfig.SetAttr(SubNode, 'Path', HotDir[Index].HotDirPath); if HotDir[Index].HotDirTarget <> '' then AConfig.SetAttr(SubNode, 'Target', HotDir[Index].HotDirTarget); if HotDir[Index].HotDirPathSort <> 0 then AConfig.SetAttr(SubNode, 'PathSort', HotDir[Index].HotDirPathSort); if HotDir[Index].HotDirTargetSort <> 0 then AConfig.SetAttr(SubNode, 'TargetSort', HotDir[Index].HotDirTargetSort); end; hd_SEPARATOR: begin AConfig.SetAttr(SubNode, 'Name', '-'); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_STARTMENU: begin AConfig.SetAttr(SubNode, 'Name', '-' + THotDir(HotDir[Index]).HotDirName); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_ENDMENU: begin AConfig.SetAttr(SubNode, 'Name', '--'); AConfig.SetAttr(SubNode, 'Path', ''); end; hd_COMMAND: begin AConfig.SetAttr(SubNode, 'Name', HotDir[Index].HotDirName); AConfig.SetAttr(SubNode, 'Path', HotDir[Index].HotDirPath); if HotDir[Index].HotDirTarget <> '' then AConfig.SetAttr(SubNode, 'Target', HotDir[Index].HotDirTarget); end; end; end; end; { TDirectoryHotlist.ImportDoubleCommander } procedure TDirectoryHotlist.ImportDoubleCommander(DoubleCommanderFilename: String); var DoubleCommanderXMLToImport: TXmlConfig; Root: TXmlNode; begin DoubleCommanderXMLToImport := TXmlConfig.Create(DoubleCommanderFilename); try if DoubleCommanderXMLToImport.Load then begin Root := DoubleCommanderXMLToImport.RootNode; LoadFromXML(DoubleCommanderXMLToImport, Root); end; finally FreeAndNil(DoubleCommanderXMLToImport); end; end; { TDirectoryHotlist.ExportDoubleCommander } function TDirectoryHotlist.ExportDoubleCommander(DoubleCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; var DoubleCommanderXMLToImport: TXmlConfig; Root: TXmlNode; FlagKeepGoing: boolean; begin Result := False; //Unless we reach correctly the end, the result is negative FlagKeepGoing := True; DoubleCommanderXMLToImport := TXmlConfig.Create(DoubleCommanderFilename); try //Just in case we're requested to add or update content of a .XML file will already other data in it, first we load the structure if FileExists(DoubleCommanderFilename) then FlagKeepGoing := DoubleCommanderXMLToImport.Load; if FlagKeepGoing then begin Root := DoubleCommanderXMLToImport.RootNode; SaveToXml(DoubleCommanderXMLToImport, Root, FlagEraseOriginalOnes); Result := DoubleCommanderXMLToImport.Save; end; finally FreeAndNil(DoubleCommanderXMLToImport); end; end; { TDirectoryHotlist.AddFromAnotherTTreeViewTheSelected } //It looks the ".selected" field only gives us the kind of "itemindex" of current selection in the TTREE. //So, the apparent way to detect the current selected node is to check the ".Selection" fields. //So, we'll set the "GroupNumber" of pointed HotDir to 1 to indicate the one to import. // function TDirectoryHotlist.AddFromAnotherTTreeViewTheSelected(ParamWorkingTreeView, ParamTreeViewToImport:TTreeView; FlagAddThemAll: boolean): longint; procedure RecursiveAddTheOnesWithGroupNumberOne(WorkingTreeNode:TTreeNode; InsertionNodePlace:TTreeNode); var MaybeChildNode:TTreeNode; WorkingHotDirEntry:THotDir; NewTreeNode:TTreeNode; begin while WorkingTreeNode<>nil do begin MaybeChildNode:=WorkingTreeNode.GetFirstChild; if MaybeChildNode<>nil then begin if (THotDir(WorkingTreeNode.Data).GroupNumber = 1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); WorkingHotDirEntry.Dispatcher:=hd_STARTMENU; //Probably not necessary, but let's make sure it will start a menu Add(WorkingHotDirEntry); if ParamWorkingTreeView<>nil then begin NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, WorkingHotDirEntry.HotDirName,HotDir[count-1]); NewTreeNode.ImageIndex:=ICONINDEX_SUBMENU; NewTreeNode.SelectedIndex:=ICONINDEX_SUBMENU; NewTreeNode.StateIndex:=ICONINDEX_SUBMENU; end; inc(result); end; RecursiveAddTheOnesWithGroupNumberOne(MaybeChildNode,NewTreeNode); if (THotDir(WorkingTreeNode.Data).GroupNumber=1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; WorkingHotDirEntry.Dispatcher:=hd_ENDMENU; Add(WorkingHotDirEntry); end; end else begin if (THotDir(WorkingTreeNode.Data).GroupNumber=1) OR (FlagAddThemAll) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); Add(WorkingHotDirEntry); if ParamWorkingTreeView<>nil then begin case WorkingHotDirEntry.Dispatcher of hd_Separator: NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, HOTLIST_SEPARATORSTRING, HotDir[count-1]); else NewTreeNode := ParamWorkingTreeView.Items.AddChildObject(InsertionNodePlace, WorkingHotDirEntry.HotDirName, HotDir[count-1]); end; end; inc(result); end; end; WorkingTreeNode:=WorkingTreeNode.GetNextSibling; end; end; procedure RecursiveSetGroupNumberToOne(WorkingTreeNode:TTreeNode; FlagTakeAlsoSibling:boolean); begin repeat if WorkingTreeNode.GetFirstChild=nil then begin if (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_STARTMENU) AND (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_ENDMENU) then begin THotDir(WorkingTreeNode.Data).GroupNumber:=1; end; end else begin THotDir(WorkingTreeNode.Data).GroupNumber:=1; RecursiveSetGroupNumberToOne(WorkingTreeNode.GetFirstChild,TRUE); end; if FlagTakeAlsoSibling then WorkingTreeNode:=WorkingTreeNode.GetNextSibling; until (FlagTakeAlsoSibling=FALSE) OR (WorkingTreeNode=nil); end; var OutsideIndex:integer; begin result:=0; //First, make sure no one is marked for OutsideIndex:=0 to pred(ParamTreeViewToImport.Items.Count) do THotDir(ParamTreeViewToImport.Items.Item[OutsideIndex].Data).GroupNumber:=0; //Then, set the "GroupNumber" to 1 to the ones to import if ParamTreeViewToImport.SelectionCount>0 then for OutsideIndex:=0 to pred(ParamTreeViewToImport.SelectionCount) do RecursiveSetGroupNumberToOne(ParamTreeViewToImport.Selections[OutsideIndex],FALSE); //Finally now collect the one with the "GroupNumber" set to 1. RecursiveAddTheOnesWithGroupNumberOne(ParamTreeViewToImport.Items.Item[0],nil); end; { TDirectoryHotlist.ComputeSignature } // Routine tries to pickup all char chain from element of directory hotlist and compute a unique CRC32. // This CRC32 will bea kind of signature of the directory hotlist. // We compute the CRC32 at the start of edition (TfrmOptionsDirectoryHotlist.Load) and // at the end (TfrmOptionsDirectoryHotlist.CanWeClose). // If they are different, it's a sign that directory hotlist have been modified. // It's not "perfect" since it might happen that two different combinaisons will // give the same CRC32 but odds are very good that it will be a different one. function TDirectoryHotlist.ComputeSignature:dword; var Index:integer; begin result:=$000000002; for Index := 0 to pred(Count) do begin Result := crc32(Result,@HotDir[Index].Dispatcher,1); if length(HotDir[Index].HotDirName)>0 then Result := crc32(Result,@HotDir[Index].HotDirName[1],length(HotDir[Index].HotDirName)); if length(HotDir[Index].HotDirPath)>0 then Result := crc32(Result,@HotDir[Index].HotDirPath[1],length(HotDir[Index].HotDirPath)); Result := crc32(Result,@HotDir[Index].HotDirPathSort,4); if length(HotDir[Index].HotDirTarget)>0 then Result := crc32(Result,@HotDir[Index].HotDirTarget[1],length(HotDir[Index].HotDirTarget)); Result := crc32(Result,@HotDir[Index].HotDirTargetSort,4); Result := crc32(Result,@HotDir[Index].HotDirExisting,1); Result := crc32(Result,@HotDir[Index].GroupNumber,4); end; end; { TDirectoryHotlist.GetHotDir } function TDirectoryHotlist.GetHotDir(Index: integer): THotDir; begin Result := THotDir(Items[Index]); end; { TDirectoryHotlist.RefreshFromTTreeView } //The routine will recreate the complete TDirectoryHotlist from a TTreeView. //It cannot erase or replace immediately the current list because the TTreeView refer to it! //So it create it into the "TransitDirectoryHotlist" and then, it will copy it to self one. // procedure TDirectoryHotlist.RefreshFromTTreeView(ParamTreeView:TTreeView); var TransitDirectoryHotlist:TDirectoryHotlist; IndexToTryToRestore:longint=-1; MaybeTTreeNodeToSelect:TTreeNode; procedure RecursiveEncapsulateSubMenu(WorkingTreeNode:TTreeNode); var MaybeChildNode:TTreeNode; WorkingHotDirEntry:THotDir; begin while WorkingTreeNode<>nil do begin if WorkingTreeNode=ParamTreeView.Selected then IndexToTryToRestore:=TransitDirectoryHotlist.Count; MaybeChildNode:=WorkingTreeNode.GetFirstChild; if MaybeChildNode<>nil then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); WorkingHotDirEntry.Dispatcher:=hd_STARTMENU; //Probably not necessary, but let's make sure it will start a menu TransitDirectoryHotlist.Add(WorkingHotDirEntry); RecursiveEncapsulateSubMenu(MaybeChildNode); WorkingHotDirEntry:=THotDir.Create; WorkingHotDirEntry.Dispatcher:=hd_ENDMENU; TransitDirectoryHotlist.Add(WorkingHotDirEntry); end else begin //We won't copy EMPTY submenu so that's why we check for "hd_STARTMENU". And the check for "hd_ENDMENU" is simply probably unecessary protection if (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_STARTMENU) AND (THotDir(WorkingTreeNode.Data).Dispatcher<>hd_ENDMENU) then begin WorkingHotDirEntry:=THotDir.Create; THotDir(WorkingTreeNode.Data).CopyToHotDir(WorkingHotDirEntry); TransitDirectoryHotlist.Add(WorkingHotDirEntry); end; end; WorkingTreeNode:=WorkingTreeNode.GetNextSibling; end; end; begin if ParamTreeView.Items.count>0 then begin TransitDirectoryHotlist:=TDirectoryHotlist.Create; try RecursiveEncapsulateSubMenu(ParamTreeView.Items.Item[0]); TransitDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(self); MaybeTTreeNodeToSelect:=LoadTTreeView(ParamTreeView,IndexToTryToRestore); if MaybeTTreeNodeToSelect<>nil then MaybeTTreeNodeToSelect.Selected:=TRUE else if ParamTreeView.Items.count>0 then ParamTreeView.Items.Item[0].Selected:=TRUE; finally TransitDirectoryHotlist.Clear; TransitDirectoryHotlist.Free; end; end else begin Self.Clear; end; end; { TCheckDrivePresenceThread.Create } constructor TCheckDrivePresenceThread.Create(sDrive: string; ParamListOfNonExistingDrive: TStringList; var ThreadCount: longint); begin FListOfNonExistingDrive := ParamListOfNonExistingDrive; FDriveToSearchFor := sDrive; FThreadCountPoint := addr(ThreadCount); FreeOnTerminate := True; inherited Create(False); end; { TCheckDrivePresenceThread.Destroy } destructor TCheckDrivePresenceThread.Destroy; begin inherited Destroy; end; {TCheckDrivePresenceThread.Execute} procedure TCheckDrivePresenceThread.Execute; begin if FDriveToSearchFor = '' then begin Synchronize(@Self.ReportPresentInTheThread); end else begin if mbDirectoryExists(FDriveToSearchFor) then begin Synchronize(@Self.ReportPresentInTheThread); end else begin Synchronize(@Self.ReportNotPresentInTheThread); end; end; Terminate; end; { TCheckDrivePresenceThread.ReportPresentInTheThread } procedure TCheckDrivePresenceThread.ReportPresentInTheThread; begin Dec(FThreadCountPoint^); end; { TCheckDrivePresenceThread.ReportNotPresentInTheThread } procedure TCheckDrivePresenceThread.ReportNotPresentInTheThread; begin FListOfNonExistingDrive.Add(FDriveToSearchFor); Dec(FThreadCountPoint^); end; {$IFDEF MSWINDOWS} { TDirectoryHotlist.ImportTotalCommander } function TDirectoryHotlist.ImportTotalCommander(TotalCommanderFilename: String): integer; const CONFIGFILE_SECTIONNAME = 'DirMenu'; CONFIGFILE_NAMEPREFIX = 'menu'; CONFIGFILE_PATHPREFIX = 'cmd'; CONFIGFILE_TARGETPREFIX = 'path'; var LocalHotDir: THotDir; ConfigFile: TIniFileEx; sName, sPath, sTarget: string; Index, CurrentMenuLevel, InitialNumberOfElement: longint; FlagAvortInsertion: boolean; begin InitialNumberOfElement := Count; Index := 1; CurrentMenuLevel := 0; ConfigFile := TIniFileEx.Create(TotalCommanderFilename); try repeat sName := ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(Index), TERMINATORNOTPRESENT)); if sName <> TERMINATORNOTPRESENT then begin sName := StringReplace(sName, '&', '', [rfReplaceAll, rfIgnoreCase]); //Let's remove the amperstand FlagAvortInsertion := False; LocalHotDir := THotDir.Create; if sName = '-' then //Was it a separator? begin LocalHotDir.Dispatcher := hd_SEPARATOR; end else begin if sName = '--' then //Was is a end of menu? begin LocalHotDir.Dispatcher := hd_ENDMENU; if CurrentMenuLevel > 0 then Dec(CurrentMenuLevel) else FlagAvortInsertion := True; //Sanity correction since Total Commande may contains extra end of menu... end else begin if (UTF8Length(sName) > 1) then //Was it a menu start? begin if (sName[1] = '-') and (sName[2] <> '-') then begin Inc(CurrentMenuLevel); LocalHotDir.Dispatcher := hd_STARTMENU; LocalHotDir.HotDirName := UTF8RightStr(sName, UTF8Length(sName) - 1); end; end; if LocalHotDir.Dispatcher = hd_NULL then begin LocalHotDir.HotDirName := sName; sPath := ReplaceTCEnvVars(ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(Index), ''))); if UTF8Length(sPath) > 3 then if UTF8Pos('cd ', UTF8LowerCase(sPath)) = 1 then sPath := UTF8Copy(sPath, 4, UTF8Length(sPath) - 3); if UTF8Pos('cm_', UTF8LowerCase(sPath)) = 0 then //Make sure it's not a command begin if sPath <> '' then sPath := IncludeTrailingPathDelimiter(sPath); //Not an obligation but DC convention seems to like a backslash at the end sTarget := ReplaceTCEnvVars(ConvertTCStringToString(ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(Index), ''))); if UTF8Length(sTarget) > 3 then if UTF8Pos('cd ', UTF8LowerCase(sTarget)) = 1 then sTarget := UTF8Copy(sTarget, 4, UTF8Length(sTarget) - 3); if sTarget <> '' then sTarget := IncludeTrailingPathDelimiter(sTarget); //Not an obligation but DC convention seems to like a backslash at the end LocalHotDir.Dispatcher := hd_CHANGEPATH; LocalHotDir.HotDirPath := sPath; LocalHotDir.HotDirTarget := sTarget; end else begin //If it's command, store it as a command LocalHotDir.Dispatcher := hd_COMMAND; LocalHotDir.HotDirPath := sPath; end; end; end; end; if not FlagAvortInsertion then Add(LocalHotDir) else LocalHotDir.Free; Inc(Index); end; until sName = TERMINATORNOTPRESENT; //Try to fix possible problem if the LAST MENU is not ending correctly... while CurrentMenuLevel > 0 do begin Dec(CurrentMenuLevel); LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := hd_ENDMENU; Add(LocalHotDir); end; finally ConfigFile.Free; end; Result := Count - InitialNumberOfElement; end; { TDirectoryHotlist.ExportTotalCommander } function TDirectoryHotlist.ExportTotalCommander(TotalCommanderFilename: String; FlagEraseOriginalOnes: boolean): boolean; const CONFIGFILE_SECTIONNAME = 'DirMenu'; CONFIGFILE_NAMEPREFIX = 'menu'; CONFIGFILE_PATHPREFIX = 'cmd'; CONFIGFILE_TARGETPREFIX = 'path'; TERMINATORNOTPRESENT = ':-<#/?*+*?\#>-:'; var ConfigFile: TIniFileEx; Index, OffsetForOnesAlreadyThere: integer; sName: string; RememberCursor: TCursor; begin Result := True; OffsetForOnesAlreadyThere := 0; try RememberCursor := Screen.Cursor; Screen.Cursor := crHourGlass; try ConfigFile := TIniFileEx.Create(TotalCommanderFilename); try with ConfigFile do begin if FlagEraseOriginalOnes then begin EraseSection(CONFIGFILE_SECTIONNAME); end else begin Index := 1; repeat sName := ConfigFile.ReadString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(Index), TERMINATORNOTPRESENT); if sName <> TERMINATORNOTPRESENT then Inc(OffsetForOnesAlreadyThere); Inc(Index); until sName = TERMINATORNOTPRESENT; end; for Index := 0 to pred(Count) do begin case THotDir(HotDir[Index]).Dispatcher of hd_NULL: begin end; hd_CHANGEPATH: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirName)); if THotDir(HotDir[Index]).HotDirPath <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString('cd ' + ReplaceDCEnvVars(THotDir(HotDir[Index]).HotDirPath))); if THotDir(HotDir[Index]).HotDirTarget <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(ReplaceDCEnvVars(THotDir(HotDir[Index]).HotDirTarget))); end; hd_SEPARATOR: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), '-'); end; hd_STARTMENU: begin //See the position of the '-'. It *must* be inside the parameter for calling "ConvertStringToTCString" because the expected utf8 signature of TC must be before the '-'. WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString('-' + THotDir(HotDir[Index]).HotDirName)); end; hd_ENDMENU: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), '--'); end; hd_COMMAND: begin WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_NAMEPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirName)); if THotDir(HotDir[Index]).HotDirPath <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_PATHPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirPath)); if THotDir(HotDir[Index]).HotDirTarget <> '' then WriteString(CONFIGFILE_SECTIONNAME, CONFIGFILE_TARGETPREFIX + IntToStr(OffsetForOnesAlreadyThere + Index + 1), ConvertStringToTCString(THotDir(HotDir[Index]).HotDirTarget)); end; end; end; end; ConfigFile.UpdateFile; finally ConfigFile.Free; end; except Result := False; end; finally Screen.Cursor := RememberCursor; end; end; {$ENDIF} end. ��������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmkdir.lrt����������������������������������������������������������������������0000644�0001750�0000144�00000000237�12023046500�015275� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMKDIR.CAPTION=Create new directory TFRMMKDIR.LBLMAKEDIR.CAPTION=&Input new directory name: TFRMMKDIR.BTNOK.CAPTION=&OK TFRMMKDIR.BTNCANCEL.CAPTION=&Cancel �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmkdir.pas����������������������������������������������������������������������0000644�0001750�0000144�00000002646�11740433676�015310� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fMkDir; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls; type { TfrmMkDir } TfrmMkDir = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; cbMkDir: TComboBox; lblMakeDir: TLabel; pnlButtons: TPanel; pnlBottom: TPanel; procedure FormKeyPress(Sender: TObject; var Key: Char); public function ShowMkDir(var sPath:string):Boolean; // 21.05.2009 - перенес в public end; var frmMkDir: TfrmMkDir; // 21.05.2009 - создаем из файла проекта implementation {$R *.lfm} procedure TfrmMkDir.FormKeyPress(Sender: TObject; var Key: Char); begin inherited; if Key=#27 then begin ModalResult:=mrCancel; Key := #0; end else if Key=#13 then begin ModalResult:=mrOK; Key:=#0; end; end; Function TfrmMkDir.ShowMkDir(var sPath:string):Boolean; var Index: Integer; const MAX_LINES = 20; begin ActiveControl := cbMkDir; if (sPath <> '..') then cbMkDir.Text := sPath else cbMkDir.Text := ''; cbMkDir.SelectAll; Result := (ShowModal = mrOK); sPath := cbMkDir.Text; If Result then begin Index := cbMkDir.Items.IndexOf(cbMkDir.Text); if (Index = -1) then cbMkDir.Items.Insert(0, cbMkDir.Text) else cbMkDir.Items.Move(Index, 0); if (cbMkDir.Items.Count > MAX_LINES) then cbMkDir.Items.Delete(cbMkDir.Items.Count - 1); end; end; end. ������������������������������������������������������������������������������������������doublecmd-0.7.1/src/utypes.pas����������������������������������������������������������������������0000644�0001750�0000144�00000003134�12024554637�015353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Definitions of some common types. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 uTypes; // This unit should depend on as little other units as possible. interface type // plugin types TPluginType = (ptDSX, ptWCX, ptWDX, ptWFX, ptWLX); TCaseSensitivity = ( cstNotSensitive, // According to locale collation specs. Usually it means linguistic sorting // of character case "aAbBcC" taking numbers into consideration (aa1, aa2, aa10, aA1, aA2, aA10, ...). cstLocale, // Depending on character value, direct comparison of bytes, so usually ABCabc. // Might not work correctly for Unicode, just for Ansi. cstCharValue); TRange = record First: Integer; Last: Integer; end; TFileSizeFormat = (fsfFloat, fsfB, fsfK, fsfM, fsfG); implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/umaincommands.pas���������������������������������������������������������������0000644�0001750�0000144�00000446103�12671241237�016661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains DC actions of the main form Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2016 Alexander Koblov (alexx2000@mail.ru) 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 uMainCommands; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ActnList, uFileView, uFileViewNotebook, uFileSourceOperation, uGlobs, uFileFunctions, uFormCommands, uFileSorting, uShellContextMenu, Menus, ufavoritetabs; type TCopyFileNamesToClipboard = (cfntcPathAndFileNames, cfntcJustFileNames, cfntcJustPathWithSeparator, cfntcPathWithoutSeparator); { TProcedureDoingActionOnMultipleTabs } TProcedureDoingActionOnMultipleTabs = procedure(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer) of object; { TMainCommands } TMainCommands = class(TComponent{$IF FPC_FULLVERSION >= 020501}, IFormCommands{$ENDIF}) private FCommands: TFormCommands; FOriginalNumberOfTabs: integer; // Filters out commands. function CommandsFilter(Command: String): Boolean; procedure OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnEditCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnCalcStatisticsStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); procedure OnCalcChecksumStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); public constructor Create(TheOwner: TComponent; ActionList: TActionList = nil); reintroduce; property Commands: TFormCommands read FCommands{$IF FPC_FULLVERSION >= 020501} implements IFormCommands{$ENDIF}; //--------------------- // The Do... functions are cm_... functions' counterparts which are to be // executed directly from the code with specific - especially non-string // - arguments (instead of calling cm_... functions, in which case // parameters would have to be converted to and from strings). // procedure DoOpenVirtualFileSystemList(Panel: TFileView); procedure DoPanelsSplitterPerPos(SplitPos: Integer); procedure DoCloseTab(Notebook: TFileViewNotebook; PageIndex: Integer); procedure DoCopySelectedFileNamesToClipboard(FileView: TFileView; TypeOfCopy: TCopyFileNamesToClipboard); procedure DoNewTab(Notebook: TFileViewNotebook); procedure DoRenameTab(Page: TFileViewPage); procedure DoContextMenu(Panel: TFileView; X, Y: Integer; Background: Boolean; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); procedure DoTransferPath(SourceFrame: TFileView; TargetNotebook: TFileViewNotebook); overload; procedure DoTransferPath(SourcePage: TFileViewPage; TargetPage: TFileViewPage; FromActivePanel: Boolean); procedure DoSortByFunctions(View: TFileView; FileFunctions: TFileFunctions); procedure DoShowMainMenu(bShow: Boolean); procedure DoShowCmdLineHistory(bNextCmdLine: Boolean); procedure DoChangeDirToRoot(FileView: TFileView); procedure GetAndSetMultitabsActionFromParams(const Params: array of string; var APanelSide:TTabsConfigLocation; var ActionOnLocked:boolean; var AskForLocked:integer); procedure DoActionOnMultipleTabs(const Params: array of string; ProcedureDoingActionOnMultipleTabs: TProcedureDoingActionOnMultipleTabs); procedure DoCloseAllTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); procedure DoCloseDuplicateTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); procedure DoSetAllTabsOptionNormal(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoSetAllTabsOptionPathLocked(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoAllTabsOptionPathResets(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoSetAllTabsOptionDirsInNewTab(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoOnClickMenuJobFavoriteTabs(Sender: TObject); procedure DoCopyAllTabsToOppositeSide(ANotebook: TFileViewNotebook; var {%H-}bAbort: boolean; {%H-}bDoLocked: boolean; var {%H-}iAskForLocked: integer); procedure DoShowFavoriteTabsOptions; //--------------------- published //-------------------------------------------------------------------------- // All commands can be split into three groups: // 1. Commands intended for the application (cm_VisitHomePage, // cm_About, cm_Exit, ...). // // 2. Commands intended for file views (cm_QuickSearch, cm_EditPath, etc.). // Those commands are simply redirected to the currently active file view by calling: // frmMain.ActiveFrame.ExecuteCommand(CommandName, Param); // If they are supported by the given file view they are executed there. // // If in future there will be a need to pass specific parameters to the // commands, i.e. not string, they should be implemented by creating // an interface for each command, and each file view implementing those // interfaces which commands it supports. // // 3. Commands intended for file sources (cm_Copy, cm_Rename, cm_MakeDir). // The file operations will mostly work only for non-virtual file sources. // //-------------------------------------------------------------------------- // RECIPE TO ADD A "cm_" COMMAND: //-------------------------------------------------------------------------- // In this recipe, we use as an exemple the command "cm_SrcOpenDrives" // 1. In "fMain" we add the action in the "actionLst". // 2. Make sure we add it in the appropriate category. // 3. The action name must start with "act" and have the exact same name as the "cm_" we want to add. // 4. So if we want "cm_SrcOpenDrives", we name the action "actSrcOpenDrives". // 5. By the way, "KEEP THE SAME SPELLING EVERYWHERE!". // 6. The order in which the "cm_SrcOpenDrives" will appear, is the same as its position in the "actionLst". // 7. So command is "cm_SrcOpenDrives", so keep writing "cm_SrcOpenDrives" and not "cm_srcopendrives" for example. // 8. The only single place to have lowercases is for the icon name which will be "cm_srcopendrives" but it's the only one case. // 9. Give an appropriate "caption" name for the command, so for our example "Open drive list" // 10. Set the "Tag" to the same number as the other command of the same category. // 11. In the "uMainCommands", for the type "TMainCommands", add the code for the command. // 12. The command name must start with "cm_" and ends with the same name as what we added for the "act". // 13. So with our example we add "cm_SrcOpenDrives". // 14. Create an icon for the command. // 15. Make a 24-bits with alpha .PNG file. // 16. Name the file with he same name of the "cm_" command. // 17. But write the name all in lower case so here "cm_srcopendrives". // 18. Store the file here: to path "pixmaps\dctheme\32x32\actions\". // 19. If command is a compatible on with TC, add it in unit "uTotalCommander". // 20. So with this example we add: "(TCCommand: 'cm_SrcOpenDrives'; TCIcon: -1; DCCommand: 'cm_SrcOpenDrives')". // 21. If command needs to have a shortcut, go in unit "uGlobs", go to routine "LoadDefaultHotkeyBindings"(more detailed - read instructions in head of "LoadDefaultHotkeyBindings") and add the appropriate "AddIfNotExists". // 22. Don't abuse on adding keyboard shortcut! We must let some user's keys for user! // 23. For this example, we won't add a keyboard shortcut. TC does'nt have neither. // 24. Edit the file "doc\en\cmds.html" to add help for the command. // 25. For the languages we know, translate the caption of the action added. // 26. For example in our example, it will be "tfrmmain.actsrcopendrives.caption" that will need to be change. // 27. It's important to * T E S T * the "cm_" command you add. // 28. Add a single button in the toolbar to test it works. // 29. Make sure we see the expected icon and the expected tooltip. // 30. Make sure the actual button you added do the expected task. // 31. If command is using parameters, make sure you test the most cases of parameters. // 32. If you added keyboard shortcut, make sure keyboard shortcut works. // 33. With the "cm_DoAnyCmCommand", go find in the "Internal Command Selector" the command you added. // 34. Make sure it's present there, under the appropriate category, sorted at the classic logical place. // 35. Make sure we see the shortcut if any and that the description is correct. // 36. Test the help for the command from there to make sure it links to the correct place in the help file. procedure cm_AddPathToCmdLine(const Params: array of string); procedure cm_AddFilenameToCmdLine(const Params: array of string); procedure cm_AddPathAndFilenameToCmdLine(const Params: array of string); procedure cm_CmdLineNext(const Params: array of string); procedure cm_CmdLinePrev(const Params: array of string); procedure cm_ContextMenu(const Params: array of string); procedure cm_CopyFullNamesToClip(const Params: array of string); procedure cm_CopyFileDetailsToClip(const Params: array of string); procedure cm_Exchange(const Params: array of string); procedure cm_FlatView(const Params: array of string); procedure cm_LeftFlatView(const Params: array of string); procedure cm_RightFlatView(const Params: array of string); procedure cm_OpenArchive(const Params: array of string); procedure cm_TestArchive(const Params: array of string); procedure cm_OpenDirInNewTab(const Params: array of string); procedure cm_Open(const Params: array of string); procedure cm_ShellExecute(const Params: array of string); procedure cm_OpenVirtualFileSystemList(const Params: array of string); procedure cm_TargetEqualSource(const Params: array of string); procedure cm_LeftEqualRight(const Params: array of string); procedure cm_RightEqualLeft(const Params: array of string); procedure cm_PackFiles(const Params: array of string); procedure cm_ExtractFiles(const Params: array of string); procedure cm_QuickSearch(const Params: array of string); procedure cm_QuickFilter(const Params: array of string); procedure cm_SrcOpenDrives(const Params: array of string); procedure cm_LeftOpenDrives(const Params: array of string); procedure cm_RightOpenDrives(const Params: array of string); procedure cm_OpenBar(const Params: array of string); procedure cm_ShowButtonMenu(const Params: array of string); procedure cm_TransferLeft(const Params: array of string); procedure cm_TransferRight(const Params: array of string); procedure cm_GoToFirstFile(const Params: array of string); procedure cm_GoToLastFile(const Params: array of string); procedure cm_Minimize(const Params: array of string); procedure cm_Wipe(const Params: array of string); procedure cm_Exit(const Params: array of string); procedure cm_NewTab(const Params: array of string); procedure cm_RenameTab(const Params: array of string); procedure cm_CloseTab(const Params: array of string); procedure cm_CloseAllTabs(const Params: array of string); procedure cm_CloseDuplicateTabs(const Params: array of string); procedure cm_NextTab(const Params: array of string); procedure cm_PrevTab(const Params: array of string); procedure cm_SaveTabs(const Params: array of string); procedure cm_LoadTabs(const Params: array of string); procedure cm_SetTabOptionNormal(const Params: array of string); procedure cm_SetTabOptionPathLocked(const Params: array of string); procedure cm_SetTabOptionPathResets(const Params: array of string); procedure cm_SetTabOptionDirsInNewTab(const Params: array of string); procedure cm_Copy(const Params: array of string); procedure cm_CopyNoAsk(const Params: array of string); procedure cm_Delete(const Params: array of string); procedure cm_CheckSumCalc(const Params: array of string); procedure cm_CheckSumVerify(const Params: array of string); procedure cm_Edit(const Params: array of string); procedure cm_EditPath(const Params: array of string); procedure cm_MakeDir(const Params: array of string); procedure cm_Rename(const Params: array of string); procedure cm_RenameNoAsk(const Params: array of string); procedure cm_View(const Params: array of string); procedure cm_QuickView(const Params: array of string); procedure cm_BriefView(const Params: array of string); procedure cm_LeftBriefView(const Params: array of string); procedure cm_RightBriefView(const Params: array of string); procedure cm_ColumnsView(const Params: array of string); procedure cm_LeftColumnsView(const Params: array of string); procedure cm_RightColumnsView(const Params: array of string); procedure cm_ThumbnailsView(const Params: array of string); procedure cm_LeftThumbView(const Params: array of string); procedure cm_RightThumbView(const Params: array of string); procedure cm_TreeView(const Params: array of string); procedure cm_CopyNamesToClip(const Params: array of string); procedure cm_FocusCmdLine(const Params: array of string); procedure cm_FileAssoc(const Params: array of string); procedure cm_HelpIndex(const Params: array of string); procedure cm_Keyboard(const Params: array of string); procedure cm_VisitHomePage(const Params: array of string); procedure cm_About(const Params: array of string); procedure cm_ShowSysFiles(const Params: array of string); procedure cm_SwitchIgnoreList(const Params: array of string); procedure cm_Options(const Params: array of string); procedure cm_CompareContents(const Params: array of string); procedure cm_Refresh(const Params: array of string); procedure cm_ShowMainMenu(const Params: array of string); procedure cm_DirHotList(const Params: array of string); procedure cm_ConfigDirHotList(const Params: array of string); procedure cm_WorkWithDirectoryHotlist(const Params: array of string); procedure cm_MarkInvert(const Params: array of string); procedure cm_MarkMarkAll(const Params: array of string); procedure cm_MarkUnmarkAll(const Params: array of string); procedure cm_MarkPlus(const Params: array of string); procedure cm_MarkMinus(const Params: array of string); procedure cm_MarkCurrentExtension(const Params: array of string); procedure cm_UnmarkCurrentExtension(const Params: array of string); procedure cm_SaveSelection(const Params: array of string); procedure cm_RestoreSelection(const Params: array of string); procedure cm_SaveSelectionToFile(const Params: array of string); procedure cm_LoadSelectionFromFile(const Params: array of string); procedure cm_LoadSelectionFromClip(const Params: array of string); procedure cm_SyncDirs(const Params: array of string); procedure cm_Search(const Params: array of string); procedure cm_HardLink(const Params: array of string); procedure cm_MultiRename(const Params: array of string); procedure cm_ReverseOrder(const Params: array of string); procedure cm_LeftReverseOrder(const Params: array of string); procedure cm_RightReverseOrder(const Params: array of string); procedure cm_UniversalSingleDirectSort(const Params: array of string); procedure cm_SortByName(const Params: array of string); procedure cm_SortByExt(const Params: array of string); procedure cm_SortByDate(const Params: array of string); procedure cm_SortBySize(const Params: array of string); procedure cm_SortByAttr(const Params: array of string); procedure cm_LeftSortByName(const Params: array of string); procedure cm_LeftSortByExt(const Params: array of string); procedure cm_LeftSortByDate(const Params: array of string); procedure cm_LeftSortBySize(const Params: array of string); procedure cm_LeftSortByAttr(const Params: array of string); procedure cm_RightSortByName(const Params: array of string); procedure cm_RightSortByExt(const Params: array of string); procedure cm_RightSortByDate(const Params: array of string); procedure cm_RightSortBySize(const Params: array of string); procedure cm_RightSortByAttr(const Params: array of string); procedure cm_SymLink(const Params: array of string); procedure cm_CopySamePanel(const Params: array of string); procedure cm_DirHistory(const Params: array of string); procedure cm_ViewHistory(const Params: array of string); procedure cm_ViewHistoryPrev(const Params: array of string); procedure cm_ViewHistoryNext(const Params: array of string); procedure cm_EditNew(const Params: array of string); procedure cm_RenameOnly(const Params: array of string); procedure cm_RunTerm(const Params: array of string); procedure cm_ShowCmdLineHistory(const Params: array of string); procedure cm_ToggleFullscreenConsole(const Params: array of string); procedure cm_CalculateSpace(const Params: array of string); procedure cm_CountDirContent(const Params: array of string); procedure cm_SetFileProperties(const Params: array of string); procedure cm_FileProperties(const Params: array of string); procedure cm_FileLinker(const Params: array of string); procedure cm_FileSpliter(const Params: array of string); procedure cm_PanelsSplitterPerPos(const Params: array of string); procedure cm_EditComment(const Params: array of string); procedure cm_CopyToClipboard(const Params: array of string); procedure cm_CutToClipboard(const Params: array of string); procedure cm_PasteFromClipboard(const Params: array of string); procedure cm_ChangeDirToRoot(const Params: array of string); procedure cm_ChangeDirToHome(const Params: array of string); procedure cm_ChangeDirToParent(const Params: array of string); procedure cm_ChangeDir(const Params: array of string); procedure cm_ClearLogWindow(const Params: array of string); procedure cm_ClearLogFile(const Params: array of string); procedure cm_NetworkConnect(const Params: array of string); procedure cm_NetworkDisconnect(const Params: array of string); procedure cm_HorizontalFilePanels(const Params: array of string); procedure cm_OperationsViewer(const Params: array of string); procedure cm_CompareDirectories(const Params: array of string); procedure cm_ViewLogFile(const Params: array of string); procedure cm_ConfigToolbars(const Params: array of string); procedure cm_DebugShowCommandParameters(const Params: array of string); procedure cm_CopyPathOfFilesToClip(const Params: array of string); procedure cm_CopyPathNoSepOfFilesToClip(const Params: array of string); procedure cm_DoAnyCmCommand(const Params: array of string); procedure cm_SetAllTabsOptionNormal(const Params: array of string); procedure cm_SetAllTabsOptionPathLocked(const Params: array of string); procedure cm_SetAllTabsOptionPathResets(const Params: array of string); procedure cm_SetAllTabsOptionDirsInNewTab(const Params: array of string); procedure cm_ConfigFolderTabs(const {%H-}Params: array of string); procedure cm_ConfigFavoriteTabs(const {%H-}Params: array of string); procedure cm_LoadFavoriteTabs(const {%H-}Params: array of string); procedure cm_SaveFavoriteTabs(const {%H-}Params: array of string); procedure cm_ReloadFavoriteTabs(const {%H-}Params: array of string); procedure cm_PreviousFavoriteTabs(const {%H-}Params: array of string); procedure cm_NextFavoriteTabs(const {%H-}Params: array of string); procedure cm_ResaveFavoriteTabs(const {%H-}Params: array of string); procedure cm_CopyAllTabsToOpposite(const {%H-}Params: array of string); // Internal commands procedure cm_ExecuteToolbarItem(const Params: array of string); end; implementation uses Forms, Controls, Dialogs, Clipbrd, strutils, LCLProc, HelpIntfs, StringHashList, dmHelpManager, typinfo, fMain, fPackDlg, fMkDir, DCDateTimeUtils, fExtractDlg, fAbout, fOptions, fDiffer, fFindDlg, fSymLink, fHardLink, fMultiRename, fLinker, fSplitter, fDescrEdit, fCheckSumVerify, fCheckSumCalc, fSetFileProperties, uLng, uLog, uShowMsg, uOSForms, uOSUtils, uDCUtils, uBriefFileView, uShowForm, uShellExecute, uClipboard, uHash, uDisplayFile, uFilePanelSelect, uFile, uFileSystemFileSource, uQuickViewPanel, uOperationsManager, uFileSourceOperationTypes, uWfxPluginFileSource, uFileSystemDeleteOperation, uFileSourceExecuteOperation, uSearchResultFileSource, uFileSourceOperationMessageBoxesUI, uFileSourceCalcChecksumOperation, uFileSourceCalcStatisticsOperation, uFileSource, uFileSourceProperty, uVfsFileSource, uFileSourceUtil, uArchiveFileSourceUtil, uThumbFileView, uTempFileSystemFileSource, uFileProperty, uFileSourceSetFilePropertyOperation, uTrash, uFileSystemCopyOperation, fOptionsFileAssoc, fDeleteDlg, fViewOperations, uVfsModule, uMultiListFileSource, uExceptions, uFileProcs, DCOSUtils, DCStrUtils, DCBasicTypes, uFileSourceCopyOperation, fSyncDirsDlg, uHotDir, DCXmlConfig, dmCommonData, fOptionsFrame, foptionsDirectoryHotlist, fOptionsToolbar, fMainCommandsDlg, uConnectionManager, fOptionsTabs, fOptionsFavoriteTabs {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; procedure ReadCopyRenameParams( const Params: array of string; var Confirmation: Boolean; out HasQueueId: Boolean; out QueueIdentifier: TOperationsManagerQueueIdentifier); var Param, sQueueId: String; BoolValue: Boolean; iQueueId: Integer; begin HasQueueId := False; for Param in Params do begin if GetParamBoolValue(Param, 'confirmation', BoolValue) then Confirmation := BoolValue else if GetParamValue(Param, 'queueid', sQueueId) then begin HasQueueId := TryStrToInt(sQueueId, iQueueId); if HasQueueId then QueueIdentifier := iQueueId; end; end; end; { TMainCommands } constructor TMainCommands.Create(TheOwner: TComponent; ActionList: TActionList = nil); begin inherited Create(TheOwner); FCommands := TFormCommands.Create(Self, ActionList); FCommands.FilterFunc := @CommandsFilter; end; function TMainCommands.CommandsFilter(Command: String): Boolean; begin Result := Command = 'cm_ExecuteToolbarItem'; end; //------------------------------------------------------ procedure TMainCommands.OnCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var I: Integer; aFile: TFile; aFileList: TStringList; aFileSource: ITempFileSystemFileSource; aCopyOutOperation: TFileSourceCopyOperation; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin aFileList := TStringList.Create; try aCopyOutOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; ChangeFileListRoot(aFileSource.FileSystemRoot, aCopyOutOperation.SourceFiles); try for I := 0 to aCopyOutOperation.SourceFiles.Count - 1 do begin aFile := aCopyOutOperation.SourceFiles[I]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // Try to find 'view' command in internal associations if not gExts.GetExtActionCmd(aFile, 'view', sCmd, sParams, sStartPath) then aFileList.Add(aFile.FullPath) else begin if sStartPath='' then sStartPath:=aCopyOutOperation.SourceFiles.Path; ProcessExtCommandFork(sCmd, sParams, aCopyOutOperation.SourceFiles.Path, aFile); // TODO: // If TempFileSource is used, create a wait thread that will // keep the TempFileSource alive until the command is finished. end; end; // if selected end; // for // if aFileList has files then view it if aFileList.Count > 0 then ShowViewerByGlobList(aFileList, aFileSource); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(aFileList); end; end; end; procedure TMainCommands.OnEditCopyOutStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var aFile: TFile; WaitData: TEditorWaitData; aFileSource: ITempFileSystemFileSource; aCopyOutOperation: TFileSourceCopyOperation; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin aCopyOutOperation := Operation as TFileSourceCopyOperation; aFileSource := aCopyOutOperation.TargetFileSource as ITempFileSystemFileSource; try aFile := aCopyOutOperation.SourceFiles[0]; WaitData:= TEditorWaitData.Create; try WaitData.TargetPath:= aCopyOutOperation.SourceFiles.Path; ChangeFileListRoot(aFileSource.FileSystemRoot, aCopyOutOperation.SourceFiles); WaitData.FileName:= aFile.FullPath; WaitData.SourceFileSource:= aFileSource; WaitData.FileTime:= mbFileAge(WaitData.FileName); WaitData.TargetFileSource:= aCopyOutOperation.FileSource as IFileSource; ShowEditorByGlob(WaitData); except WaitData.Free; end; except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; end; procedure TMainCommands.OnCalcStatisticsStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var CalcStatisticsOperation: TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics: TFileSourceCalcStatisticsOperationStatistics; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin CalcStatisticsOperation := Operation as TFileSourceCalcStatisticsOperation; CalcStatisticsOperationStatistics := CalcStatisticsOperation.RetrieveStatistics; with CalcStatisticsOperationStatistics do begin msgOK(Format(rsSpaceMsg, [Files, Directories, cnvFormatFileSize(Size), Numb2USA(IntToStr(Size))])); end; end; end; procedure TMainCommands.OnCalcChecksumStateChanged(Operation: TFileSourceOperation; State: TFileSourceOperationState); var CalcChecksumOperation: TFileSourceCalcChecksumOperation; begin if (State = fsosStopped) and (Operation.Result = fsorFinished) then begin CalcChecksumOperation := Operation as TFileSourceCalcChecksumOperation; if CalcChecksumOperation.Mode = checksum_verify then ShowVerifyCheckSum(CalcChecksumOperation.Result); end; end; //------------------------------------------------------ procedure TMainCommands.DoCloseTab(Notebook: TFileViewNotebook; PageIndex: Integer); begin with frmMain do begin RemovePage(Notebook, PageIndex); ActiveFrame.SetFocus; end; end; procedure TMainCommands.DoShowCmdLineHistory(bNextCmdLine: Boolean); begin with frmMain do begin if edtCommand.Visible then begin if not (gCmdLine and frmMain.IsCommandLineVisible) then pnlCommand.Show; edtCommand.SetFocus; if bNextCmdLine then begin if edtCommand.ItemIndex > 0 then edtCommand.ItemIndex := edtCommand.ItemIndex - 1; end else begin if edtCommand.ItemIndex < edtCommand.Items.Count - 1 then edtCommand.ItemIndex := edtCommand.ItemIndex + 1; end; end; end; end; procedure TMainCommands.DoChangeDirToRoot(FileView: TFileView); var Page: TFileViewPage; begin with FileView do begin Page := TFileViewPage(NotebookPage); if Assigned(Page) then begin if Page.LockState = tlsPathResets then ChooseFileSource(FileView, Page.LockPath) else begin CurrentPath := FileSource.GetRootDir(CurrentPath); end; end; end; end; procedure TMainCommands.DoCopySelectedFileNamesToClipboard(FileView: TFileView; TypeOfCopy: TCopyFileNamesToClipboard); var I: Integer; sl: TStringList = nil; SelectedFiles: TFiles = nil; PathToAdd, FileNameToAdd: String; begin SelectedFiles := FileView.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 0 then begin sl := TStringList.Create; for I := 0 to SelectedFiles.Count - 1 do begin PathToAdd:=''; FileNameToAdd:=''; //Let's set the "PathToAdd" according to type of copy. case TypeOfCopy of cfntcPathAndFileNames, cfntcJustPathWithSeparator, cfntcPathWithoutSeparator: begin // Workaround for not fully implemented TMultiListFileSource. if not FileView.FileSource.IsClass(TMultiListFileSource) then PathToAdd := FileView.CurrentAddress else PathToAdd := ''; PathToAdd := PathToAdd + SelectedFiles[I].Path; if TypeOfCopy=cfntcPathWithoutSeparator then PathToAdd:=ExcludeTrailingPathDelimiter(PathToAdd); end; end; //Let's set the "FilenameToAdd" according to type of copy. case TypeOfCopy of cfntcPathAndFileNames, cfntcJustFileNames: FileNameToAdd:=SelectedFiles[I].Name; end; sl.Add(PathToAdd + FileNameToAdd); end; Clipboard.Clear; // prevent multiple formats in Clipboard (specially synedit) Clipboard.AsText:= TrimRightLineEnding(sl.Text, sl.TextLineBreakStyle); end; finally if Assigned(sl) then FreeAndNil(sl); if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; procedure TMainCommands.DoNewTab(Notebook: TFileViewNotebook); var NewPage: TFileViewPage; begin NewPage := Notebook.NewPage(Notebook.ActiveView); NewPage.MakeActive; end; procedure TMainCommands.DoRenameTab(Page: TFileViewPage); var sCaption: String; begin sCaption := Page.CurrentTitle; if InputQuery(rsMsgTabRenameCaption, rsMsgTabRenamePrompt, sCaption) then Page.PermanentTitle := sCaption; end; procedure TMainCommands.DoOpenVirtualFileSystemList(Panel: TFileView); var FileSource: IFileSource; begin FileSource:= TVfsFileSource.Create(gWFXPlugins); if Assigned(FileSource) then Panel.AddFileSource(FileSource, FileSource.GetRootDir); end; procedure TMainCommands.DoPanelsSplitterPerPos(SplitPos: Integer); begin with frmMain do begin if (SplitPos >= 0) and (SplitPos <= 100) then begin // Calculate panel width if not gHorizontalFilePanels then pnlLeft.Width:= (pnlNoteBooks.Width - MainSplitter.Width) * SplitPos div 100 else pnlLeft.Height:= (pnlNoteBooks.Height - MainSplitter.Height) * SplitPos div 100; // Update splitter position MainSplitterPos:= SplitPos; end; end; end; procedure TMainCommands.DoContextMenu(Panel: TFileView; X, Y: Integer; Background: Boolean; UserWishForContextMenu:TUserWishForContextMenu); var aFile: TFile = nil; aFiles: TFiles = nil; sPath, sName: String; begin with frmMain do begin if not (fspDirectAccess in Panel.FileSource.Properties) then begin if not Background then pmContextMenu.PopUp(X, Y); Exit; end; if not Panel.HasSelectedFiles then begin aFile:= Panel.CloneActiveFile; if Assigned(aFile) then begin sName:= aFile.Name; FreeAndNil(aFile); end; end; if (Background = True) or (sName = '..') then begin sName:= ExcludeTrailingPathDelimiter(Panel.CurrentPath); sPath:= ExtractFilePath(sName); aFiles:= TFiles.Create(sPath); aFile:= Panel.FileSource.CreateFileObject(sPath); aFile.Attributes:= faFolder; aFile.Name:= ExtractFileName(sName); aFiles.Add(aFile); end else begin aFiles:= Panel.CloneSelectedOrActiveFiles; end; if Assigned(aFiles) then try if aFiles.Count > 0 then try ShowContextMenu(frmMain, aFiles, X, Y, Background, nil, UserWishForContextMenu); except on e: EContextMenuException do ShowException(e); end; finally if Assigned(aFiles) then FreeAndNil(aFiles); end; end; end; procedure TMainCommands.DoTransferPath(SourceFrame: TFileView; TargetNotebook: TFileViewNotebook); begin if TargetNotebook.ActivePage.LockState = tlsPathLocked then Exit; if TargetNotebook.ActivePage.LockState = tlsDirsInNewTab then begin TargetNotebook.NewPage(SourceFrame).MakeActive; TargetNotebook.ActivePage.LockState := tlsNormal; end else begin TargetNotebook.ActivePage.FileView := nil; SourceFrame.Clone(TargetNotebook.ActivePage); end; end; procedure TMainCommands.DoTransferPath(SourcePage: TFileViewPage; TargetPage: TFileViewPage; FromActivePanel: Boolean); var aFile: TFile; NewPath: String; begin if FromActivePanel then begin aFile := SourcePage.FileView.CloneActiveFile; if Assigned(aFile) then try if (fspLinksToLocalFiles in SourcePage.FileView.FileSource.GetProperties) and (SourcePage.FileView.FileSource.GetLocalName(aFile)) then begin if aFile.IsDirectory then ChooseFileSource(TargetPage.FileView, aFile.FullPath) else if not ChooseFileSource(TargetPage.FileView, aFile) then begin ChooseFileSource(TargetPage.FileView, aFile.Path); TargetPage.FileView.SetActiveFile(aFile.Name); end; end else if aFile.IsDirectory then begin if aFile.Name = '..' then begin NewPath := GetParentDir(SourcePage.FileView.CurrentPath) end else begin // Change to a subdirectory. NewPath := aFile.FullPath; end; if NewPath <> EmptyStr then TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, NewPath); end else begin // Change file source, if the file under cursor can be opened as another file source. try if not ChooseFileSource(TargetPage.FileView, aFile) then TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, SourcePage.FileView.CurrentPath); except on e: EFileSourceException do MessageDlg('Error', e.Message, mtError, [mbOK], 0); end; end; finally FreeAndNil(aFile); end; end else begin TargetPage.FileView.AddFileSource(SourcePage.FileView.FileSource, SourcePage.FileView.CurrentPath); end; end; procedure TMainCommands.DoSortByFunctions(View: TFileView; FileFunctions: TFileFunctions); var NewSorting: TFileSortings = nil; CurrentSorting: TFileSortings; SortDirection: TSortDirection = sdNone; i: Integer; begin if Length(FileFunctions) = 0 then Exit; CurrentSorting := View.Sorting; // Check if there is already sorting by one of the functions. // If it is then reverse direction of sorting. for i := 0 to Length(FileFunctions) - 1 do begin SortDirection := GetSortDirection(CurrentSorting, FileFunctions[i]); if SortDirection <> sdNone then begin SortDirection := ReverseSortDirection(SortDirection); Break; end; end; //If there is no direction currently, sort "sdDescending" for size and date if SortDirection = sdNone then begin case FileFunctions[0] of fsfSize, fsfModificationTime, fsfCreationTime, fsfLastAccessTime: SortDirection:=sdDescending; else SortDirection:=sdAscending; end; end; SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 1); NewSorting[0].SortFunctions[0] := FileFunctions[0]; // Sort by single function. NewSorting[0].SortDirection := SortDirection; View.Sorting := NewSorting; end; procedure TMainCommands.DoShowMainMenu(bShow: Boolean); begin gMainMenu := bShow; with frmMain do begin if bShow then begin Menu := mnuMain; end else if Assigned(Menu) then begin Menu := nil; {$IFDEF MSWINDOWS} // Workaround: on Windows need to recreate window to properly recalculate children sizes. RecreateWnd(frmMain); {$ENDIF} end; end; end; //------------------------------------------------------ //Published methods //------------------------------------------------------ procedure TMainCommands.cm_AddPathToCmdLine(const Params: array of string); var OldPosition: Integer; AddedString: String; begin with frmMain do begin OldPosition := edtCommand.SelStart; AddedString := QuoteStr(ActiveFrame.CurrentPath); edtCommand.Text := edtCommand.Text + AddedString; edtCommand.SelStart := OldPosition + Length(AddedString); end; end; procedure TMainCommands.cm_AddFilenameToCmdLine(const Params: array of string); var AddedString: String; OldPosition: Integer; aFile: TFile; begin with frmMain do begin aFile := ActiveFrame.CloneActiveFile; if Assigned(aFile) then try OldPosition := edtCommand.SelStart; AddedString := QuoteStr(aFile.Name) + ' '; edtCommand.Text := edtCommand.Text + AddedString; edtCommand.SelStart := OldPosition + Length(AddedString); finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_AddPathAndFilenameToCmdLine(const Params: array of string); var AddedString: String; OldPosition: Integer; aFile: TFile; begin with frmMain do begin aFile := ActiveFrame.CloneActiveFile; if Assigned(aFile) then try if aFile.Name = '..' then AddedString := QuoteStr(ActiveFrame.CurrentPath) + ' ' else AddedString := QuoteStr(aFile.FullPath) + ' '; OldPosition := edtCommand.SelStart; edtCommand.Text := edtCommand.Text + AddedString; edtCommand.SelStart := OldPosition + Length(AddedString); finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_ContextMenu(const Params: array of string); begin // Let file view handle displaying context menu at appropriate position. frmMain.ActiveFrame.ExecuteCommand('cm_ContextMenu', Params); end; procedure TMainCommands.cm_CopyFullNamesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathAndFileNames); end; procedure TMainCommands.cm_CopyFileDetailsToClip(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_CopyFileDetailsToClip', []); end; procedure TMainCommands.cm_CopyNamesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcJustFileNames); end; //------------------------------------------------------ procedure TMainCommands.cm_Exchange(const Params: array of string); var ActiveView, NotActiveView: TFileView; begin ActiveView:= frmMain.ActiveFrame; NotActiveView:= frmMain.NotActiveFrame; with frmMain do begin ActiveNotebook.ActivePage.RemoveComponent(ActiveView); NotActiveNotebook.ActivePage.RemoveComponent(NotActiveView); ActiveNotebook.ActivePage.FileView:= NotActiveView; NotActiveNotebook.ActivePage.FileView:= ActiveView; ActiveNotebook.ActivePage.InsertComponent(NotActiveView); NotActiveNotebook.ActivePage.InsertComponent(ActiveView); end; NotActiveView.SetFocus; end; procedure TMainCommands.cm_ExecuteToolbarItem(const Params: array of string); var ToolItemID: String; begin if GetParamValue(Params, 'ToolItemID', ToolItemID) then frmMain.MainToolBar.ClickItem(ToolItemID); end; procedure TMainCommands.cm_FlatView(const Params: array of string); begin if not (fspListFlatView in frmMain.ActiveFrame.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported) end else begin frmMain.ActiveFrame.FlatView:= not frmMain.ActiveFrame.FlatView; frmMain.ActiveFrame.Reload; end; end; procedure TMainCommands.cm_LeftFlatView(const Params: array of string); begin if not (fspListFlatView in frmMain.FrameLeft.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported) end else begin frmMain.FrameLeft.FlatView:= not frmMain.FrameLeft.FlatView; frmMain.FrameLeft.Reload; end; end; procedure TMainCommands.cm_RightFlatView(const Params: array of string); begin if not (fspListFlatView in frmMain.FrameRight.FileSource.GetProperties) then begin msgWarning(rsMsgErrNotSupported) end else begin frmMain.FrameRight.FlatView:= not frmMain.FrameRight.FlatView; frmMain.FrameRight.Reload; end; end; procedure TMainCommands.cm_OpenDirInNewTab(const Params: array of string); function OpenTab(const aFullPath: string): TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); // Workaround for Search Result File Source if Result.FileView.FileSource is TSearchResultFileSource then SetFileSystemPath(Result.FileView, aFullPath) else Result.FileView.CurrentPath := aFullPath; end; function OpenArchive(const aFile: TFile): TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); ChooseArchive(Result.FileView, aFile); end; function OpenParent: TFileViewPage; begin Result := FrmMain.ActiveNotebook.NewPage(FrmMain.ActiveFrame); Result.FileView.ChangePathToParent(True); end; var aFile: TFile; NewPage: TFileViewPage; begin aFile := FrmMain.ActiveFrame.CloneActiveFile; if not Assigned(aFile) then NewPage := OpenTab(FrmMain.ActiveFrame.CurrentPath) else try if not aFile.IsNameValid then NewPage := OpenParent else if (aFile.IsDirectory or aFile.IsLinkToDirectory) then NewPage := OpenTab(aFile.FullPath) else if FileIsArchive(aFile.FullPath) then NewPage := OpenArchive(aFile) else NewPage := OpenTab(aFile.Path); finally FreeAndNil(aFile); end; if tb_open_new_in_foreground in gDirTabOptions then NewPage.MakeActive; end; procedure TMainCommands.cm_TargetEqualSource(const Params: array of string); begin with frmMain do begin DoTransferPath(ActiveFrame, NotActiveNotebook); end; end; procedure TMainCommands.cm_LeftEqualRight(const Params: array of string); begin with frmMain do begin DoTransferPath(FrameRight, LeftTabs); // Destroying active view may have caused losing focus. Restore it if needed. if SelectedPanel = fpLeft then FrameLeft.SetFocus; end; end; procedure TMainCommands.cm_RightEqualLeft(const Params: array of string); begin with frmMain do begin DoTransferPath(FrameLeft, RightTabs); // Destroying active view may have caused losing focus. Restore it if needed. if SelectedPanel = fpRight then FrameRight.SetFocus; end; end; procedure TMainCommands.cm_OpenArchive(const Params: array of string); var aFile: TFile; begin with frmMain.ActiveFrame do begin aFile := CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then begin if aFile.IsDirectory or aFile.IsLinkToDirectory then ChangePathToChild(aFile) else ChooseArchive(frmMain.ActiveFrame, aFile, True); end; finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_TestArchive(const Params: array of string); var SelectedFiles: TFiles; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try TestArchive(ActiveFrame, SelectedFiles); finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_Open(const Params: array of string); begin frmMain.ActiveFrame.OpenActiveFile; end; procedure TMainCommands.cm_ShellExecute(const Params: array of string); var aFile: TFile; begin if Length(Params) > 0 then with frmMain do ShellExecute(PrepareParameter(Params[0])) else with frmMain.ActiveFrame do begin aFile := CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then begin ShellExecute(aFile.FullPath); end; finally FreeAndNil(aFile); end; end; end; procedure TMainCommands.cm_OpenVirtualFileSystemList(const Params: array of string); begin DoOpenVirtualFileSystemList(frmMain.ActiveFrame); end; //------------------------------------------------------ (* Pack files in archive by creating a new archive *) procedure TMainCommands.cm_PackFiles(const Params: array of string); var Param: String; TargetPath: String; SelectedFiles: TFiles; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin Param := GetDefaultParam(Params); if Param = 'PackHere' then TargetPath:= ActiveFrame.CurrentPath else begin TargetPath:= NotActiveFrame.CurrentPath; end; ShowPackDlg(ActiveFrame.FileSource, nil, // No specific target (create new) SelectedFiles, TargetPath, PathDelim { Copy to root of archive } {NotActiveFrame.FileSource.GetRootString} ); end; finally FreeAndNil(SelectedFiles); end; end; end; // This command is needed for extracting whole archive by Alt+F9 (without opening it). procedure TMainCommands.cm_ExtractFiles(const Params: array of string); var Param: String; TargetPath: String; SelectedFiles: TFiles; TargetFileSource: IFileSource; begin with frmMain do begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SelectedFiles) then try if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin Param := GetDefaultParam(Params); if Param = 'ExtractHere' then begin TargetPath:= ActiveFrame.CurrentPath; TargetFileSource:= ActiveFrame.FileSource; end else begin TargetPath:= NotActiveFrame.CurrentPath; TargetFileSource:= NotActiveFrame.FileSource; end; ShowExtractDlg(ActiveFrame.FileSource, SelectedFiles, TargetFileSource, TargetPath); end; finally FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_QuickSearch(const Params: array of string); begin FrmMain.ActiveFrame.ExecuteCommand('cm_QuickSearch', Params); end; procedure TMainCommands.cm_QuickFilter(const Params: array of string); begin FrmMain.ActiveFrame.ExecuteCommand('cm_QuickFilter', Params); end; procedure TMainCommands.cm_SrcOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(frmMain.SelectedPanel); end; procedure TMainCommands.cm_LeftOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(fpLeft); end; procedure TMainCommands.cm_RightOpenDrives(const Params: array of string); begin frmMain.ShowDrivesList(fpRight); end; procedure TMainCommands.cm_OpenBar(const Params: array of string); begin // Deprecated. end; procedure TMainCommands.cm_ShowButtonMenu(const Params: array of string); begin // Deprecated. end; procedure TMainCommands.cm_TransferLeft(const Params: array of string); begin DoTransferPath(frmMain.RightTabs.ActivePage, frmMain.LeftTabs.ActivePage, frmMain.SelectedPanel = fpRight); end; procedure TMainCommands.cm_TransferRight(const Params: array of string); begin DoTransferPath(frmMain.LeftTabs.ActivePage, frmMain.RightTabs.ActivePage, frmMain.SelectedPanel = fpLeft); end; procedure TMainCommands.cm_GoToFirstFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToFirstFile', []); end; procedure TMainCommands.cm_GoToLastFile(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_GoToLastFile', []); end; procedure TMainCommands.cm_Minimize(const Params: array of string); begin FrmMain.MinimizeWindow; end; procedure TMainCommands.cm_Wipe(const Params: array of string); var Message: String; theFilesToWipe: TFiles; Operation: TFileSourceOperation; QueueId: TOperationsManagerQueueIdentifier; begin with frmMain.ActiveFrame do begin if not (fsoWipe in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; // ------------------------------------------------------ theFilesToWipe := CloneSelectedOrActiveFiles; // free at Thread end by thread if Assigned(theFilesToWipe) then try if theFilesToWipe.Count = 0 then Exit; Message:= frmMain.GetFileDlgStr(rsMsgWipeSel, rsMsgWipeFlDr, theFilesToWipe); if not ShowDeleteDialog(Message, FileSource, QueueId) then Exit; Operation := FileSource.CreateWipeOperation(theFilesToWipe); if Assigned(Operation) then begin // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; finally if Assigned(theFilesToWipe) then FreeAndNil(theFilesToWipe); end; end; end; procedure TMainCommands.cm_Exit(const Params: array of string); begin frmMain.Close; // application.Terminate not save settings. end; procedure TMainCommands.cm_NewTab(const Params: array of string); begin DoNewTab(frmMain.ActiveNotebook); end; procedure TMainCommands.cm_RenameTab(const Params: array of string); begin DoRenameTab(frmMain.ActiveNotebook.ActivePage); end; procedure TMainCommands.cm_CloseTab(const Params: array of string); begin with frmMain do DoCloseTab(ActiveNotebook, ActiveNotebook.PageIndex); end; { TMainCommands.cm_CloseAllTabs } procedure TMainCommands.cm_CloseAllTabs(const Params: array of string); begin with frmMain do begin if (tb_confirm_close_all in gDirTabOptions) then if not msgYesNo(rsMsgCloseAllInActiveTabs) then Exit; DoActionOnMultipleTabs(Params,@DoCloseAllTabs); end; end; { TMainCommands.cm_CloseDuplicateTabs } procedure TMainCommands.cm_CloseDuplicateTabs(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoCloseDuplicateTabs); end; procedure TMainCommands.cm_NextTab(const Params: array of string); begin frmMain.ActiveNotebook.ActivateNextTab; end; procedure TMainCommands.cm_PrevTab(const Params: array of string); begin frmMain.ActiveNotebook.ActivatePrevTab; end; { TMainCommands.cm_SaveTabs } // To respect legacy, we can invoke "cm_SaveTabs" with a single parameter and it will be a "DefaultParam", which means without any equal sign, directly the filename. // With the following code, we may have more descriptive parameters like the following: // filename= : The giving parameter will be the output filename to save the tabs. If no "filename=" is specified, we will prompt user. // savedirhistory= : We indicate if we want to save dir history or not. procedure TMainCommands.cm_SaveTabs(const Params: array of string); var Config: TXmlConfig; Param, sValue: string; boolValue: boolean; bSaveDirHistory: boolean; sOutputTabsFilename: string = ''; begin // 1. We setup our default options. bSaveDirHistory := gSaveDirHistory; // 2. Let's parse the parameter to get the wanted ones. The default wanted parameter have been set in the "VAR" section // We need to respect legacy of this command where *before* it was possible to simply and directly have the wanted output filename. // Let's assume that if we have an "=" sign, it's can be a legacy usage but one with actual parameters. if (length(Params)>0) then begin sOutputTabsFilename := GetDefaultParam(Params); if pos('=',sOutputTabsFilename)<>0 then begin sOutputTabsFilename := ''; for Param in Params do begin if GetParamValue(Param, 'filename', sValue) then sOutputTabsFilename := sValue else if GetParamBoolValue(Param, 'savedirhistory', boolValue) then bSaveDirHistory := boolValue; end; end; end; // 3. If no output filename has been specified so far, let's request an output filename. if sOutputTabsFilename='' then begin dmComData.SaveDialog.DefaultExt := 'tab'; dmComData.SaveDialog.Filter := '*.tab|*.tab'; if dmComData.SaveDialog.Execute then sOutputTabsFilename := dmComData.SaveDialog.FileName; end; // 4. If we get here with "sOutputTabsFilename<>''", we know what to save and where to save it. if sOutputTabsFilename<>'' then begin try Config := TXmlConfig.Create(sOutputTabsFilename); try frmMain.SaveTabsXml(Config, 'Tabs/OpenedTabs/', frmMain.LeftTabs, bSaveDirHistory); frmMain.SaveTabsXml(Config, 'Tabs/OpenedTabs/', frmMain.RightTabs, bSaveDirHistory); Config.Save; finally Config.Free; end; except on E: Exception do msgError(E.Message); end; end; end; { TMainCommands.cm_LoadTabs } // To respect legacy, invoking "cm_LoadTabs" with no parameter will attempt to load tabs for both panels and prompt the user for a filename. // Still to respect lefacy, we can invoke "cm_LoadTabs" with a single parameter and it will be a "DefaultParam", which means without any equal sign, directly the filename. // With the following code, we may have more descriptive parameters like the following: // filename = The giving parameter will be the input filename to load the tabs from. If no "filename=" is specified, we will prompt user. // loadleftto = Indicate where to load what was saved for left panel. It could be left to be like before but also now right, active, inactive, both and none. // loadrightto= Indicate where to load what was saved for right panel. It could be right to be like before but also now left, active, inactive, both and none. // keep = This indicates if in the target notebook where tabs will be loaded if we remove first the target present or not. When keep is "false", which is the default, we flush them first. If "keep" is "true", we add the loaded tab to the existing ones. procedure TMainCommands.cm_LoadTabs(const Params: array of string); var originalFilePanel:TFilePanelSelect; sInputTabsFilename: string = ''; param, sValue: string; Config: TXmlConfig; TargetDestinationForLeft : TTabsConfigLocation = tclLeft; TargetDestinationForRight : TTabsConfigLocation = tclRight; DestinationToKeep : TTabsConfigLocation = tclNone; TabsAlreadyDestroyedFlags: TTabsFlagsAlreadyDestroyed = []; function EvaluateSideResult(sParamValue:string; DefaultValue:TTabsConfigLocation):TTabsConfigLocation; begin result:=DefaultValue; if sParamValue='left' then result := tclLeft else if sParamValue='right' then result := tclRight else if sParamValue='active' then result := tclActive else if sParamValue='inactive' then result := tclInactive else if sParamValue='both' then result := tclBoth else if sParamValue='none' then result := tclNone; end; begin // 1. Note that most variable have been set with their default value in declaration. originalFilePanel := frmMain.SelectedPanel; // 2. Let's parse the parameter to get the wanted ones // We need to respect legacy of this command where *before* it was possible to simply and directly have the wanted input filename. // Let's assume that if we have an "=" sign, it's can't be a legacy usage but one with actual parameters. if (length(Params)>0) then begin sInputTabsFilename:=GetDefaultParam(Params); if pos('=',sInputTabsFilename)<>0 then begin sInputTabsFilename:=''; for Param in Params do begin if GetParamValue(Param, 'filename', sValue) then sInputTabsFilename := sValue else if GetParamValue(Param, 'loadleftto', sValue) then TargetDestinationForLeft:=EvaluateSideResult(sValue,TargetDestinationForLeft) else if GetParamValue(Param, 'loadrightto', sValue) then TargetDestinationForRight:=EvaluateSideResult(sValue,TargetDestinationForRight) else if GetParamValue(Param, 'keep', sValue) then DestinationToKeep:=EvaluateSideResult(sValue,DestinationToKeep); end; end; end; // 3. If variable "sInputTabsFilename", we''ll request the user to provide an input filename. if sInputTabsFilename='' then begin dmComData.OpenDialog.Filter:= '*.tab|*.tab'; dmComData.OpenDialog.FileName:= GetDefaultParam(Params); if dmComData.OpenDialog.Execute then sInputTabsFilename:=dmComData.OpenDialog.FileName; end; // 4. If we get here with "sInputTabsFilename<>''", we know what to load and from what to load it! if sInputTabsFilename<>'' then begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; try Config := TXmlConfig.Create(sInputTabsFilename, True); try frmMain.LoadTheseTabsWithThisConfig(Config, 'Tabs/OpenedTabs/', tclLeft, TargetDestinationForLeft, DestinationToKeep, TabsAlreadyDestroyedFlags); frmMain.LoadTheseTabsWithThisConfig(Config, 'Tabs/OpenedTabs/', tclRight, TargetDestinationForRight, DestinationToKeep, TabsAlreadyDestroyedFlags); finally Config.Free; end; except on E: Exception do msgError(E.Message); end; end; frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_SetTabOptionNormal(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsNormal; end; procedure TMainCommands.cm_SetTabOptionPathLocked(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsPathLocked; end; procedure TMainCommands.cm_SetTabOptionPathResets(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsPathResets; end; procedure TMainCommands.cm_SetTabOptionDirsInNewTab(const Params: array of string); begin with frmMain.ActiveNotebook.ActivePage do LockState := tlsDirsInNewTab; end; //------------------------------------------------------ procedure TMainCommands.cm_View(const Params: array of string); var sl: TStringList = nil; i, n: Integer; ActiveFile: TFile = nil; AllFiles: TFiles = nil; SelectedFiles: TFiles = nil; TempFiles: TFiles = nil; aFile: TFile; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation; aFileSource: IFileSource; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin with frmMain do try SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; ActiveFile := ActiveFrame.CloneActiveFile; // Enter directories using View command. if Assigned(ActiveFile) and (ActiveFile.IsDirectory or ActiveFile.IsLinkToDirectory) then begin ActiveFrame.ExecuteCommand('cm_Open', []); Exit; end; if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; // Default to using the file source directly. aFileSource := ActiveFrame.FileSource; // If files are links to local files if (fspLinksToLocalFiles in ActiveFrame.FileSource.Properties) then begin for I := 0 to SelectedFiles.Count - 1 do begin aFile := SelectedFiles[I]; ActiveFrame.FileSource.GetLocalName(aFile); end; end // If files not directly accessible copy them to temp file source. else if not (fspDirectAccess in ActiveFrame.FileSource.Properties) then begin if not (fsoCopyOut in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; TempFiles := SelectedFiles.Clone; TempFileSource := TTempFileSystemFileSource.GetFileSource; Operation := ActiveFrame.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if Assigned(Operation) then begin Operation.AddStateChangedListener([fsosStopped], @OnCopyOutStateChanged); OperationsManager.AddOperation(Operation); end else begin msgWarning(rsMsgErrNotSupported); end; Exit; end; try sl := TStringList.Create; for i := 0 to SelectedFiles.Count - 1 do begin aFile := SelectedFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin // Try to find 'view' command in internal associations if not gExts.GetExtActionCmd(aFile, 'view', sCmd, sParams, sStartPath) then sl.Add(aFile.FullPath) else begin ProcessExtCommandFork(sCmd, sParams, ActiveFrame.CurrentPath); end; end; // if selected end; // for // If only one file was selected then add all files in panel to the list. // Works only for directly accessible files and only when using internal viewer. if (sl.Count=1) and (not gExternalTools[etViewer].Enabled) and ([fspDirectAccess, fspLinksToLocalFiles] * ActiveFrame.FileSource.Properties <> []) then begin AllFiles := ActiveFrame.CloneFiles; if (fspLinksToLocalFiles in ActiveFrame.FileSource.Properties) then begin for I := 0 to AllFiles.Count - 1 do begin aFile := AllFiles[I]; ActiveFrame.FileSource.GetLocalName(aFile); end; end; n:=0; for i := 0 to AllFiles.Count - 1 do begin aFile := AllFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin if n>0 then sl.Add(aFile.FullPath); if aFile.Name = ActiveFile.Name then n:=i; end; end; for i:=0 to n-1 do begin aFile := AllFiles[i]; if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then sl.Add(aFile.FullPath); end; end; // if sl has files then view it if sl.Count > 0 then ShowViewerByGlobList(sl, aFileSource); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningViewer, rsMsgInvalidCommandLine + ' (' + rsToolViewer + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally if Assigned(sl) then FreeAndNil(sl); if Assigned(AllFiles) then FreeAndNil(AllFiles); if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); if Assigned(TempFiles) then FreeAndNil(TempFiles); if Assigned(ActiveFile) then FreeAndNil(ActiveFile); end; end; procedure TMainCommands.cm_QuickView(const Params: array of string); var Param: String; begin with frmMain do begin Param := GetDefaultParam(Params); if Assigned(QuickViewPanel) then begin QuickViewClose; end else if (param <> 'Close') then begin QuickViewShow(NotActiveNotebook.ActivePage, ActiveFrame); end; end; end; procedure TMainCommands.cm_BriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(ActiveNotebook.ActivePage, ActiveFrame); ActiveNotebook.ActivePage.FileView:= aFileView; ActiveFrame.SetFocus; end; end; procedure TMainCommands.cm_LeftBriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(LeftTabs.ActivePage, FrameLeft); LeftTabs.ActivePage.FileView:= aFileView; end; end; procedure TMainCommands.cm_RightBriefView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TBriefFileView.Create(RightTabs.ActivePage, FrameRight); RightTabs.ActivePage.FileView:= aFileView; end; end; procedure TMainCommands.cm_ColumnsView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TColumnsFileView.Create(ActiveNotebook.ActivePage, ActiveFrame); ActiveNotebook.ActivePage.FileView:= aFileView; ActiveFrame.SetFocus; end; end; procedure TMainCommands.cm_LeftColumnsView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TColumnsFileView.Create(LeftTabs.ActivePage, FrameLeft); LeftTabs.ActivePage.FileView:= aFileView; end; end; procedure TMainCommands.cm_RightColumnsView(const Params: array of string); var aFileView: TFileView; begin with frmMain do begin aFileView:= TColumnsFileView.Create(RightTabs.ActivePage, FrameRight); RightTabs.ActivePage.FileView:= aFileView; end; end; var // Static variables BackupLeftFileViewClass: TFileViewClass = TColumnsFileView; BackupRightFileViewClass: TFileViewClass = TColumnsFileView; procedure ToggleOrNotToOrFromThumbnailsView(WorkingFileView:TFileView; WorkingFileViewClass:TFileViewClass; WorkingNotebook:TFileViewNotebook); var aFileView: TFileView; begin if WorkingFileView.ClassType <> TThumbFileView then begin // Save current file view type WorkingFileViewClass:=TFileViewClass(WorkingFileView.ClassType); // Create thumbnails view aFileView:= TThumbFileView.Create(WorkingNotebook.ActivePage, WorkingFileView); end else begin // Restore previous file view type aFileView:= WorkingFileViewClass.Create(WorkingNotebook.ActivePage, WorkingFileView); end; WorkingNotebook.ActivePage.FileView:= aFileView; end; procedure TMainCommands.cm_ThumbnailsView(const Params: array of string); begin case frmMain.SelectedPanel of fpLeft: ToggleOrNotToOrFromThumbnailsView(frmMain.FrameLeft, BackupLeftFileViewClass,frmMain.LeftTabs); fpRight: ToggleOrNotToOrFromThumbnailsView(frmMain.FrameRight, BackupRightFileViewClass,frmMain.RightTabs); end; frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_LeftThumbView(const Params: array of string); begin ToggleOrNotToOrFromThumbnailsView(frmMain.FrameLeft, BackupLeftFileViewClass,frmMain.LeftTabs); frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_RightThumbView(const Params: array of string); begin ToggleOrNotToOrFromThumbnailsView(frmMain.FrameRight, BackupRightFileViewClass,frmMain.RightTabs); frmMain.ActiveFrame.SetFocus; end; procedure TMainCommands.cm_TreeView(const Params: array of string); begin gSeparateTree := not gSeparateTree; with frmMain do begin UpdateWindowView; UpdateTreeViewPath; MainSplitterPos:= MainSplitterPos; end; end; procedure TMainCommands.cm_Edit(const Params: array of string); var i: Integer; aFile: TFile; TempFiles: TFiles; SelectedFiles: TFiles = nil; Operation: TFileSourceOperation; TempFileSource: ITempFileSystemFileSource = nil; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin with frmMain do try SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; // If files are links to local files if (fspLinksToLocalFiles in ActiveFrame.FileSource.Properties) then begin for I := 0 to SelectedFiles.Count - 1 do begin aFile := SelectedFiles[I]; ActiveFrame.FileSource.GetLocalName(aFile); end; end // If files not directly accessible copy them to temp file source. else if not (fspDirectAccess in ActiveFrame.FileSource.Properties) then begin if not (fsoCopyOut in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; TempFiles := SelectedFiles.Clone; TempFileSource := TTempFileSystemFileSource.GetFileSource; Operation := ActiveFrame.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if Assigned(Operation) then begin Operation.AddStateChangedListener([fsosStopped], @OnEditCopyOutStateChanged); OperationsManager.AddOperation(Operation); end else begin msgWarning(rsMsgErrNotSupported); end; Exit; end; try for i := 0 to SelectedFiles.Count - 1 do begin aFile := SelectedFiles[i]; // For now we only process one file. if not (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin //now test if exists "EDIT" command in "extassoc.xml" :) if gExts.GetExtActionCmd(aFile, 'edit', sCmd, sParams, sStartPath) then begin ProcessExtCommandFork(sCmd, sParams, aFile.Path); end else begin ShowEditorByGlob(aFile.FullPath); end; Break; end; end; except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningEditor, rsMsgInvalidCommandLine + ' (' + rsToolEditor + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; procedure TMainCommands.cm_EditPath(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_EditPath', Params); end; // Parameters: // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // queueid= - by default put to this queue // <queue_identifier> procedure TMainCommands.cm_Copy(const Params: array of string); var bConfirmation, HasQueueId: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier; begin bConfirmation := focCopy in gFileOperationsConfirmations; ReadCopyRenameParams(Params, bConfirmation, HasQueueId, QueueIdentifier); if HasQueueId then frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation, QueueIdentifier) else frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation); end; procedure TMainCommands.cm_CopyNoAsk(const Params: array of string); begin frmMain.CopyFiles(frmMain.NotActiveFrame.CurrentPath, False); end; // Parameters: // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // queueid= - by default put to this queue // <queue_identifier> procedure TMainCommands.cm_Rename(const Params: array of string); var bConfirmation, HasQueueId: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier; begin bConfirmation := focMove in gFileOperationsConfirmations; ReadCopyRenameParams(Params, bConfirmation, HasQueueId, QueueIdentifier); if HasQueueId then frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation, QueueIdentifier) else frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, bConfirmation); end; procedure TMainCommands.cm_RenameNoAsk(const Params: array of string); begin frmMain.MoveFiles(frmMain.NotActiveFrame.CurrentPath, False); end; procedure TMainCommands.cm_MakeDir(const Params: array of string); var sPath: String; Files: TFiles; Directory: String; ActiveFile: TFile = nil; bMakeViaCopy: Boolean = False; Operation: TFileSourceOperation = nil; UI: TFileSourceOperationMessageBoxesUI = nil; begin with frmMain do try if not (fsoCreateDirectory in ActiveFrame.FileSource.GetOperationsTypes) then begin if (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes) then bMakeViaCopy := True else begin msgWarning(rsMsgErrNotSupported); Exit; end; end; ActiveFile := ActiveFrame.CloneActiveFile; if Assigned(ActiveFile) and ActiveFile.IsNameValid then sPath := ActiveFile.Name // 21.05.2009 - pass name from cursor to makedir form else sPath := EmptyStr; if not frmMkDir.ShowMkDir(sPath) then Exit; // show makedir dialog if (sPath = EmptyStr) then Exit; if bMakeViaCopy then begin Directory := GetTempName(GetTempFolderDeletableAtTheEnd); if not mbForceDirectory(IncludeTrailingBackslash(Directory) + sPath) then begin MessageDlg(mbSysErrorMessage(GetLastOSError), mtError, [mbOK], 0); Exit; end; Files := TFiles.Create(Directory); sPath := IncludeTrailingBackslash(Directory) + ExtractWord(1, sPath, [PathDelim]); Files.Add(TFileSystemFileSource.CreateFileFromFile(sPath)); Operation := ActiveFrame.FileSource.CreateCopyInOperation(TFileSystemFileSource.GetFileSource, Files, ActiveFrame.CurrentPath); if Assigned(Operation) then begin OperationsManager.AddOperation(Operation); Operation := nil; end; Exit; end; Operation := ActiveFrame.FileSource.CreateCreateDirectoryOperation(ActiveFrame.CurrentPath, sPath); if Assigned(Operation) then begin // Call directly - not through operations manager. UI := TFileSourceOperationMessageBoxesUI.Create; Operation.AddUserInterface(UI); Operation.Execute; sPath := ExtractFileName(ExcludeTrailingPathDelimiter(sPath)); ActiveFrame.SetActiveFile(sPath); end; finally FreeAndNil(Operation); FreeAndNil(UI); FreeAndNil(ActiveFile); end; end; // Parameters: // trashcan= // 1/true - delete to trash can // 0/false - delete directly // setting - if gUseTrash then delete to trash, otherwise delete directly // reversesetting - if gUseTrash then delete directly, otherwise delete to trash // confirmation= // 1/true - show confirmation // 0/false - don't show confirmation // // Deprecated: // "recycle" - delete to trash can // "norecycle" - delete directly // "recyclesetting" - if gUseTrash then delete to trash, otherwise delete directly // "recyclesettingrev" - if gUseTrash then delete directly, otherwise delete to trash procedure TMainCommands.cm_Delete(const Params: array of string); var I: Integer; Message: String; theFilesToDelete: TFiles; // 12.05.2009 - if delete to trash, then show another messages MsgDelSel, MsgDelFlDr : string; Operation: TFileSourceOperation; bRecycle: Boolean; QueueId: TOperationsManagerQueueIdentifier; bConfirmation, HasConfirmationParam: Boolean; Param, ParamTrashCan: String; BoolValue: Boolean; begin with frmMain.ActiveFrame do begin if not (fsoDelete in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; bRecycle := gUseTrash; HasConfirmationParam := False; for Param in Params do begin if Param = 'recycle' then bRecycle := True else if Param = 'norecycle' then bRecycle := False else if Param = 'recyclesetting' then bRecycle := gUseTrash else if Param = 'recyclesettingrev' then bRecycle := not gUseTrash else if GetParamValue(Param, 'trashcan', ParamTrashCan) then begin if ParamTrashCan = 'setting' then bRecycle := gUseTrash else if ParamTrashCan = 'reversesetting' then bRecycle := not gUseTrash else if GetBoolValue(ParamTrashCan, BoolValue) then bRecycle := BoolValue; end else if GetParamBoolValue(Param, 'confirmation', BoolValue) then begin HasConfirmationParam := True; bConfirmation := BoolValue; end; end; // Save parameter for later use BoolValue := bRecycle; if bRecycle then bRecycle := FileSource.IsClass(TFileSystemFileSource) and mbCheckTrash(CurrentPath); if not HasConfirmationParam then begin if not bRecycle then bConfirmation := focDelete in gFileOperationsConfirmations else bConfirmation := focDeleteToTrash in gFileOperationsConfirmations; end; // Showing delete dialog: to trash or to /dev/null :) If bRecycle then begin MsgDelSel := rsMsgDelSelT; MsgDelFlDr := rsMsgDelFlDrT; end else begin MsgDelSel := rsMsgDelSel; MsgDelFlDr := rsMsgDelFlDr; end; // Special case for fspLinksToLocalFiles if (fspLinksToLocalFiles in FileSource.Properties) then bRecycle := BoolValue; // ------------------------------------------------------ theFilesToDelete := CloneSelectedOrActiveFiles; // free at Thread end by thread if Assigned(theFilesToDelete) then try Message:= frmMain.GetFileDlgStr(MsgDelSel,MsgDelFlDr,theFilesToDelete); if (theFilesToDelete.Count > 0) and ((not bConfirmation) or (ShowDeleteDialog(Message, FileSource, QueueId))) then begin if FileSource.IsClass(TFileSystemFileSource) and frmMain.NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin for I:= 0 to theFilesToDelete.Count - 1 do begin if (theFilesToDelete[I].IsDirectory or theFilesToDelete[I].IsLinkToDirectory) and IsInPath(theFilesToDelete[I].FullPath, frmMain.NotActiveFrame.CurrentPath, True, True) then begin frmMain.NotActiveFrame.CurrentPath:= theFilesToDelete.Path; Break; end; end; end; Operation := FileSource.CreateDeleteOperation(theFilesToDelete); if Assigned(Operation) then begin // Special case for filesystem - 'recycle' parameter. if Operation is TFileSystemDeleteOperation then with Operation as TFileSystemDeleteOperation do begin // 30.04.2009 - передаем параметр корзины в поток. Recycle := bRecycle; end; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; end; finally if Assigned(theFilesToDelete) then FreeAndNil(theFilesToDelete); end; end; end; procedure TMainCommands.cm_CheckSumCalc(const Params: array of string); var I: Integer; sFileName: String; SelectedFiles: TFiles; HashAlgorithm: THashAlgorithm; QueueId: TOperationsManagerQueueIdentifier; Operation: TFileSourceCalcChecksumOperation; bSeparateFile, bOpenFileAfterJobCompleted: Boolean; begin // This will work only for filesystem. // For other file sources use temp file system when it's done. with frmMain do begin if not (fsoCalcChecksum in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgNotImplemented); Exit; // Create temp file source. // CopyOut ActiveFrame.FileSource to TempFileSource. // Do command on TempFileSource and later delete it (or leave cached on disk?) end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; bSeparateFile:= False; bOpenFileAfterJobCompleted:= False; for I := 0 to SelectedFiles.Count - 1 do // find files in selection if not SelectedFiles[I].IsDirectory then begin bSeparateFile:= True; Break; end; if SelectedFiles.Count > 1 then sFileName:= ActiveFrame.CurrentPath + MakeFileName(ActiveFrame.CurrentPath, 'checksum') else sFileName:= ActiveFrame.CurrentPath + SelectedFiles[0].Name; if ShowCalcCheckSum(sFileName, bSeparateFile, HashAlgorithm, bOpenFileAfterJobCompleted, QueueId) then begin Operation := ActiveFrame.FileSource.CreateCalcChecksumOperation( SelectedFiles, ActiveFrame.CurrentPath, sFileName) as TFileSourceCalcChecksumOperation; if Assigned(Operation) then begin Operation.Mode := checksum_calc; Operation.OneFile := not bSeparateFile; Operation.OpenFileAfterOperationCompleted := bOpenFileAfterJobCompleted; Operation.Algorithm := HashAlgorithm; // Start operation. OperationsManager.AddOperation(Operation, QueueId, False); end else begin msgWarning(rsMsgNotImplemented); end; end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_CheckSumVerify(const Params: array of string); var I: Integer; Hash: String; SelectedFiles: TFiles; Algorithm: THashAlgorithm; Operation: TFileSourceCalcChecksumOperation; begin // This will work only for filesystem. // For other file sources use temp file system when it's done. with frmMain do begin if not (fsoCalcChecksum in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgNotImplemented); Exit; // Create temp file source. // CopyOut ActiveFrame.FileSource to TempFileSource. // Do command on TempFileSource and later delete it (or leave cached on disk?) end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count = 0 then begin msgWarning(rsMsgNoFilesSelected); Exit; end; for I := 0 to SelectedFiles.Count - 1 do // find files in selection if not FileExtIsHash(SelectedFiles[I].Extension) then begin if (SelectedFiles.Count > 1) or (SelectedFiles[I].IsDirectory) or (SelectedFiles[I].IsLinkToDirectory) then begin msgError(rsMsgSelectOnlyCheckSumFiles); Exit; end else begin if not ShowCalcVerifyCheckSum(Hash, Algorithm) then Exit; end end; Operation := ActiveFrame.FileSource.CreateCalcChecksumOperation( SelectedFiles, Hash, '') as TFileSourceCalcChecksumOperation; if Assigned(Operation) then begin Operation.Algorithm := Algorithm; Operation.AddStateChangedListener([fsosStopped], @OnCalcChecksumStateChanged); Operation.Mode := checksum_verify; // Start operation. OperationsManager.AddOperation(Operation); end else begin msgWarning(rsMsgNotImplemented); end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_FocusCmdLine(const Params: array of string); begin if frmMain.edtCommand.Visible then begin // Show temporarily command line on user request. if (not gCmdLine) and (frmMain.IsCommandLineVisible = False) then begin frmMain.pnlCommand.Show; end; frmMain.edtCommand.SetFocus; end; end; procedure TMainCommands.cm_FileAssoc(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsFileAssoc); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsFileAssoc); if Editor.CanFocus then Editor.SetFocus; TfrmOptionsFileAssoc(Editor).MakeUsInPositionToWorkWithActiveFile; end; procedure TMainCommands.cm_HelpIndex(const Params: array of string); begin ShowHelpOrErrorForKeyword('', '/index.html'); end; procedure TMainCommands.cm_Keyboard(const Params: array of string); begin ShowHelpOrErrorForKeyword('', '/shortcuts.html'); end; procedure TMainCommands.cm_VisitHomePage(const Params: array of string); var ErrMsg: String = ''; begin dmHelpMgr.HTMLHelpDatabase.ShowURL('http://doublecmd.sourceforge.net','Double Commander Web Site', ErrMsg); end; procedure TMainCommands.cm_About(const Params: array of string); begin ShowAboutBox; end; procedure TMainCommands.cm_ShowSysFiles(const Params: array of string); begin with frmMain do begin uGlobs.gShowSystemFiles:= not uGlobs.gShowSystemFiles; actShowSysFiles.Checked:= uGlobs.gShowSystemFiles; UpdateTreeView; //repaint both panels FrameLeft.Reload; FrameRight.Reload; end; end; procedure TMainCommands.cm_SwitchIgnoreList(const Params: array of string); {$OPTIMIZATION OFF} var WantedIgnoreList, BoolValue:boolean; begin WantedIgnoreList:=gIgnoreListFileEnabled; with frmMain do begin if Length(Params)>0 then begin if GetParamBoolValue(Params[0], 'ignorelist', BoolValue) then WantedIgnoreList:=BoolValue else WantedIgnoreList := not WantedIgnoreList; end else begin WantedIgnoreList := not WantedIgnoreList; end; if WantedIgnoreList<>gIgnoreListFileEnabled then begin gIgnoreListFileEnabled:=WantedIgnoreList; actSwitchIgnoreList.Checked:= gIgnoreListFileEnabled; //repaint both panels FrameLeft.Reload; FrameRight.Reload; end; end; end; {$OPTIMIZATION DEFAULT} // Parameter is name of TOptionsEditorClass. procedure TMainCommands.cm_Options(const Params: array of string); begin ShowOptions(GetDefaultParam(Params)); end; procedure TMainCommands.cm_CompareContents(const Params: array of string); var FilesToCompare: TStringList = nil; DirsToCompare: TStringList = nil; procedure AddItem(const aFile: TFile); begin if not aFile.IsDirectory then FilesToCompare.Add(aFile.FullPath) else DirsToCompare.Add(aFile.FullPath); end; var i : Integer; ActiveSelectedFiles: TFiles = nil; NotActiveSelectedFiles: TFiles = nil; Param: String; FrameThatWillBeOnLeftAfterCompare, FrameThatWillBeOnRightAfterCompare: TFileView; begin with frmMain do begin case gResultingFramePositionAfterCompare of rfpacActiveOnLeft: begin; FrameThatWillBeOnLeftAfterCompare:=ActiveFrame; FrameThatWillBeOnRightAfterCompare:=NotActiveFrame; end; rfpacLeftOnLeft: begin FrameThatWillBeOnLeftAfterCompare:=FrameLeft; FrameThatWillBeOnRightAfterCompare:=FrameRight; end; end; // For now work only for filesystem. // Later use temporary file system for other file sources. try FilesToCompare := TStringList.Create; DirsToCompare := TStringList.Create; Param := GetDefaultParam(Params); if Param = 'dir' then begin DirsToCompare.Add(FrameLeft.CurrentPath); DirsToCompare.Add(FrameRight.CurrentPath); end else begin // For now work only for filesystem. if not (FrameThatWillBeOnLeftAfterCompare.FileSource.IsClass(TFileSystemFileSource)) then begin msgWarning(rsMsgNotImplemented); Exit; end; try ActiveSelectedFiles := FrameThatWillBeOnLeftAfterCompare.CloneSelectedOrActiveFiles; if ActiveSelectedFiles.Count = 1 then begin // If no files selected in the opposite panel and panels have // different path then try to get file with the same name. if (not FrameThatWillBeOnRightAfterCompare.HasSelectedFiles) and (not mbCompareFileNames(FrameThatWillBeOnRightAfterCompare.CurrentPath, FrameThatWillBeOnLeftAfterCompare.CurrentPath)) then begin for i := 0 to FrameThatWillBeOnRightAfterCompare.DisplayFiles.Count - 1 do if FrameThatWillBeOnRightAfterCompare.DisplayFiles[i].FSFile.Name = ActiveSelectedFiles[0].Name then begin NotActiveSelectedFiles := TFiles.Create(FrameThatWillBeOnRightAfterCompare.CurrentPath); NotActiveSelectedFiles.Add(FrameThatWillBeOnRightAfterCompare.DisplayFiles[i].FSFile.Clone); Break; end; end; if not Assigned(NotActiveSelectedFiles) then NotActiveSelectedFiles := FrameThatWillBeOnRightAfterCompare.CloneSelectedOrActiveFiles; if NotActiveSelectedFiles.Count = 1 then begin // For now work only for filesystem. if not (FrameThatWillBeOnRightAfterCompare.FileSource.IsClass(TFileSystemFileSource)) then begin msgWarning(rsMsgNotImplemented); Exit; end; { compare single selected files in both panels } AddItem(ActiveSelectedFiles[0]); AddItem(NotActiveSelectedFiles[0]); end else begin // Only one file selected in active panel. MsgWarning(rsMsgInvalidSelection); Exit; end; end else if ActiveSelectedFiles.Count > 1 then begin { compare all selected files in active frame } for i := 0 to ActiveSelectedFiles.Count - 1 do AddItem(ActiveSelectedFiles[i]); end; finally if Assigned(ActiveSelectedFiles) then FreeAndNil(ActiveSelectedFiles); if Assigned(NotActiveSelectedFiles) then FreeAndNil(NotActiveSelectedFiles); end; end; if ((FilesToCompare.Count > 0) and (DirsToCompare.Count > 0)) or ((FilesToCompare.Count = 1) or (DirsToCompare.Count = 1)) then begin // Either files or directories must be selected and more than one. MsgWarning(rsMsgInvalidSelection) end else if FilesToCompare.Count > 0 then begin if gExternalTools[etDiffer].Enabled then RunExtDiffer(FilesToCompare) else if FilesToCompare.Count = 2 then ShowDiffer(FilesToCompare.Strings[0], FilesToCompare.Strings[1]) else MsgWarning(rsMsgTooManyFilesSelected); end else if DirsToCompare.Count > 0 then begin if gExternalTools[etDiffer].Enabled then RunExtDiffer(DirsToCompare) else MsgWarning(rsMsgNotImplemented); end else msgWarning(rsMsgNoFilesSelected); finally if Assigned(FilesToCompare) then FreeAndNil(FilesToCompare); if Assigned(DirsToCompare) then FreeAndNil(DirsToCompare); end; end; end; procedure TMainCommands.cm_ShowMainMenu(const Params: array of string); {$OPTIMIZATION OFF} var WantedMainMenu, BoolValue:boolean; begin WantedMainMenu:=gMainMenu; if Length(Params)>0 then begin if GetParamBoolValue(Params[0], 'menu', BoolValue) then WantedMainMenu:=BoolValue else WantedMainMenu := not WantedMainMenu; end else begin WantedMainMenu := not WantedMainMenu; end; if WantedMainMenu<>gMainMenu then begin gMainMenu:=WantedMainMenu; DoShowMainMenu(gMainMenu); end; end; {$OPTIMIZATION DEFAULT} procedure TMainCommands.cm_Refresh(const Params: array of string); begin with frmMain do begin ActiveFrame.FileSource.Reload(ActiveFrame.CurrentPath); ActiveFrame.Reload(True); if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin UpdateDiskCount; UpdateSelectedDrives; end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_MarkInvert(const Params: array of string); begin frmMain.ActiveFrame.InvertAll; end; procedure TMainCommands.cm_MarkMarkAll(const Params: array of string); begin frmMain.ActiveFrame.MarkFiles(True); end; procedure TMainCommands.cm_MarkUnmarkAll(const Params: array of string); begin frmMain.ActiveFrame.MarkFiles(False); end; procedure TMainCommands.cm_MarkPlus(const Params: array of string); begin frmMain.ActiveFrame.MarkGroup(True); end; procedure TMainCommands.cm_MarkMinus(const Params: array of string); begin frmMain.ActiveFrame.MarkGroup(False); end; procedure TMainCommands.cm_MarkCurrentExtension(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentExtension(True); end; procedure TMainCommands.cm_UnmarkCurrentExtension(const Params: array of string); begin frmMain.ActiveFrame.MarkCurrentExtension(False); end; procedure TMainCommands.cm_SaveSelection(const Params: array of string); begin frmMain.ActiveFrame.SaveSelection; end; procedure TMainCommands.cm_RestoreSelection(const Params: array of string); begin frmMain.ActiveFrame.RestoreSelection; end; procedure TMainCommands.cm_SaveSelectionToFile(const Params: array of string); begin frmMain.ActiveFrame.SaveSelectionToFile(GetDefaultParam(Params)); end; procedure TMainCommands.cm_LoadSelectionFromFile(const Params: array of string); begin frmMain.ActiveFrame.LoadSelectionFromFile(GetDefaultParam(Params)); end; procedure TMainCommands.cm_LoadSelectionFromClip(const Params: array of string); begin frmMain.ActiveFrame.LoadSelectionFromClipboard; end; //------------------------------------------------------ { TMainCommands.cm_DirHotList } // Command to SHOW the Directory Hotlist popup menu // The directory popup hotlist is run-time continously regenerated each time command is invoken. // If any param is provided, it is assume the popup menu as to be shown where the mouse cursor is which is friendly with user since it minimize mouse travel. // procedure TMainCommands.cm_DirHotList(const Params: array of string); var p:TPoint; begin gDirectoryHotlist.PopulateMenuWithHotDir(frmMain.pmHotList,@frmMain.HotDirSelected,@frmMain.miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); // TODO: i thing in future this must call on create or change if length(Params)=0 then begin p:=frmMain.ActiveFrame.ClientToScreen(Classes.Point(0,0)); Application.ProcessMessages; //TODO: Same thing as with "cm_DirHotList", in Windows, Not sure why, but on all system I tried, this eliminate a "beep" when the popup is shown. end else begin p:=Mouse.CursorPos; end; frmMain.pmHotList.Popup(p.X,p.Y); Application.ProcessMessages; end; { TMainCommands.cm_ConfigDirHotList } // Mainly present for backward compatibility since "cm_ConfigDirHotList" existed before. // procedure TMainCommands.cm_ConfigDirHotList(const Params: array of string); begin cm_WorkWithDirectoryHotlist(['action=config', 'source='+QuoteStr(frmMain.ActiveFrame.CurrentPath), 'target='+QuoteStr(frmMain.NotActiveFrame.CurrentPath), 'index=0']); end; { TMainCommands.cm_WorkWithDirectoryHotlist } // The parameter 0, in text, indicate the job to do to generic "SubmitToAddOrConfigToHotDirDlg" routine. // This way, "SubmitToAddOrConfigToHotDirDlg" is to entry point to attempt to do anything in the Directory Hotlist conifguration screen. // procedure TMainCommands.cm_WorkWithDirectoryHotlist(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; SearchingIndex, WantedAction, WantedIndexToEdit: integer; WantedSourcePath, WantedTargetPath : string; Param, sValue: String; begin //1o) Let's set our default values WantedAction := ACTION_INVALID; WantedSourcePath := frmMain.ActiveFrame.CurrentPath; WantedTargetPath := frmMain.NotActiveFrame.CurrentPath; WantedIndexToEdit := 0; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'action', sValue) then begin SearchingIndex:=1; while ( (SearchingIndex<=length(HOTLISTMAGICWORDS)) AND (WantedAction = ACTION_INVALID) ) do if sValue=HOTLISTMAGICWORDS[SearchingIndex] then WantedAction:=SearchingIndex else inc(SearchingIndex); end else if GetParamValue(Param, 'source', sValue) then begin sValue:=RemoveQuotation(PrepareParameter(sValue)); if (sValue<>'') and (not HasPathInvalidCharacters(sValue)) then WantedSourcePath:=sValue; end else if GetParamValue(Param, 'target', sValue) then begin sValue:=RemoveQuotation(PrepareParameter(sValue)); if (sValue<>'') and (not HasPathInvalidCharacters(sValue)) then WantedTargetPath:=sValue; end else if GetParamValue(Param, 'index', sValue) then begin WantedIndexToEdit:=(strtointdef(sValue,0)); end; end; if WantedAction=ACTION_INVALID then WantedAction:=ACTION_JUSTSHOWCONFIGHOTLIST; //3o) Let's do the sorting job now! Options := ShowOptions(TfrmOptionsDirectoryHotlist); Editor := Options.GetEditor(TfrmOptionsDirectoryHotlist); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsDirectoryHotlist(Editor).SubmitToAddOrConfigToHotDirDlg(WantedAction, WantedSourcePath, WantedTargetPath, WantedIndexToEdit); end; procedure TMainCommands.cm_Search(const Params: array of string); var TemplateName: String; begin if Length(Params) > 0 then TemplateName:= Params[0] else begin TemplateName:= gSearchDefaultTemplate; end; ShowFindDlg(frmMain.ActiveFrame, TemplateName); end; procedure TMainCommands.cm_SyncDirs(const Params: array of string); var OperationType: TFileSourceOperationType; begin with frmMain do begin if GetCopyOperationType(FrameLeft.FileSource, FrameRight.FileSource, OperationType) or GetCopyOperationType(FrameRight.FileSource, FrameLeft.FileSource, OperationType) then begin ShowSyncDirsDlg(FrameLeft, FrameRight); end else begin msgWarning(rsMsgErrNotSupported); end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_SymLink(const Params: array of string); var sExistingFile, sLinkToCreate: String; SelectedFiles: TFiles; begin with frmMain do begin // Symlinks work only for file system. if not (ActiveFrame.FileSource.IsClass(TFileSystemFileSource)) then begin msgWarning(rsMsgErrNotSupported); Exit; // Or create a symlink in temp filesystem and CopyIn to target file source. end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 1 then msgWarning(rsMsgTooManyFilesSelected) else if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin sExistingFile := SelectedFiles[0].Path + SelectedFiles[0].Name; if Length(Params) > 0 then sLinkToCreate := Params[0] else begin if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then sLinkToCreate := NotActiveFrame.CurrentPath else sLinkToCreate := ActiveFrame.CurrentPath end; sLinkToCreate := sLinkToCreate + SelectedFiles[0].Name; if ShowSymLinkForm(sExistingFile, sLinkToCreate, ActiveFrame.CurrentPath) then begin ActiveFrame.Reload; if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then NotActiveFrame.Reload; end; end; finally FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_HardLink(const Params: array of string); var sExistingFile, sLinkToCreate: String; SelectedFiles: TFiles; begin with frmMain do begin // Hard links work only for file system. if not (ActiveFrame.FileSource.IsClass(TFileSystemFileSource)) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 1 then msgWarning(rsMsgTooManyFilesSelected) else if SelectedFiles.Count = 0 then msgWarning(rsMsgNoFilesSelected) else begin sExistingFile := SelectedFiles[0].Path + SelectedFiles[0].Name; if Length(Params) > 0 then sLinkToCreate := Params[0] else begin if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then sLinkToCreate := NotActiveFrame.CurrentPath else sLinkToCreate := ActiveFrame.CurrentPath end; sLinkToCreate := sLinkToCreate + SelectedFiles[0].Name; if ShowHardLinkForm(sExistingFile, sLinkToCreate, ActiveFrame.CurrentPath) then begin ActiveFrame.Reload; if NotActiveFrame.FileSource.IsClass(TFileSystemFileSource) then NotActiveFrame.Reload; end; end; finally FreeAndNil(SelectedFiles); end; end; end; // Uses to change sort direction when columns header is disabled procedure TMainCommands.cm_ReverseOrder(const Params: array of string); begin with frmMain.ActiveFrame do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_LeftReverseOrder(const Params: array of string); begin with frmMain.FrameLeft do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_RightReverseOrder(const Params: array of string); begin with frmMain.FrameRight do Sorting := ReverseSortDirection(Sorting); end; procedure TMainCommands.cm_SortByName(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_SortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.ActiveFrame, FileFunctions); end; procedure TMainCommands.cm_LeftSortByName(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_LeftSortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.FrameLeft, FileFunctions); end; procedure TMainCommands.cm_RightSortByName(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfNameNoExtension); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByExt(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfExtension); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortBySize(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfSize); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByDate(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfModificationTime); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; procedure TMainCommands.cm_RightSortByAttr(const Params: array of string); var FileFunctions: TFileFunctions = nil; begin AddSortFunction(FileFunctions, fsfAttr); DoSortByFunctions(frmMain.FrameRight, FileFunctions); end; { Command to request to sort a frame with a column with a defined order. This command may be user by the user via the toolbar, but it is definitively a nice-to-have for the "uHotDir" unit who may specify the order to be in when switching to a hotdir.} procedure TMainCommands.cm_UniversalSingleDirectSort(const Params: array of string); var Param: String; sValue: String; WantedFileView: TFileView; WantedSortFunction: TFileFunction; WantedSortDirection: TSortDirection; FileFunctions: TFileFunctions = nil; NewSorting: TFileSortings = nil; begin //1o) Let's set our default values WantedFileView:=frmMain.ActiveFrame; WantedSortFunction:=fsfName; WantedSortDirection:=sdAscending; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'panel', sValue) then begin if sValue='inactive' then WantedFileView:=frmMain.NotActiveFrame else if sValue='left' then WantedFileView:=frmMain.FrameLeft else if sValue='right' then WantedFileView:=frmMain.FrameRight; end else if GetParamValue(Param, 'column', sValue) then begin if sValue='ext' then WantedSortFunction:=fsfExtension else if sValue='size' then WantedSortFunction:=fsfSize else if sValue='datetime' then WantedSortFunction:=fsfModificationTime; end else if GetParamValue(Param, 'order', sValue) then begin if sValue='descending' then WantedSortDirection:=sdDescending; end; end; //3o) Let's do the sorting job now! AddSortFunction(FileFunctions, WantedSortFunction); SetLength(NewSorting, 1); SetLength(NewSorting[0].SortFunctions, 1); NewSorting[0].SortFunctions[0] := FileFunctions[0]; NewSorting[0].SortDirection := WantedSortDirection; WantedFileView.Sorting := NewSorting; end; procedure TMainCommands.cm_MultiRename(const Params: array of string); var aFiles: TFiles; begin with frmMain do begin if not (fsoSetFileProperty in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; aFiles:= ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(aFiles) then try if aFiles.Count > 0 then ShowMultiRenameForm(ActiveFrame.FileSource, aFiles) else msgWarning(rsMsgNoFilesSelected); finally FreeAndNil(aFiles); end; end; end; //------------------------------------------------------ procedure TMainCommands.cm_CopySamePanel(const Params: array of string); begin frmMain.CopyFiles('', True); end; procedure TMainCommands.cm_RenameOnly(const Params: array of string); begin frmMain.ActiveFrame.ExecuteCommand('cm_RenameOnly', Params); end; procedure TMainCommands.cm_EditNew(const Params: array of string); var sNewFile: String; hFile: System.THandle = 0; aFile: TFile; Attrs: TFileAttrs; sCmd: string = ''; sParams: string = ''; sStartPath: string = ''; begin frmMain.ActiveFrame.ExecuteCommand('cm_EditNew', Params); // For now only works for FileSystem. with frmMain do if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin aFile := ActiveFrame.CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then sNewFile:= aFile.Name else sNewFile:= rsEditNewFile; finally FreeAndNil(aFile); end; if not InputQuery(rsEditNewOpen, rsEditNewFileName, sNewFile) then Exit; // If user entered only a filename prepend it with current directory. if ExtractFilePath(sNewFile) = '' then sNewFile:= ActiveFrame.CurrentPath + sNewFile; Attrs := mbFileGetAttr(sNewFile); if Attrs = faInvalidAttributes then begin hFile := mbFileCreate(sNewFile); if hFile = feInvalidHandle then begin MessageDlg(rsMsgErrECreate, mbSysErrorMessage(GetLastOSError), mtWarning, [mbOK], 0); Exit; end; FileClose(hFile); ActiveFrame.FileSource.Reload(ExtractFilePath(sNewFile)); end else if FPS_ISDIR(Attrs) then begin MessageDlg(rsMsgErrECreate, Format(rsMsgErrCreateFileDirectoryExists, [ExtractFileName(sNewFile)]), mtWarning, [mbOK], 0); Exit; end; aFile := TFileSystemFileSource.CreateFileFromFile(sNewFile); try // Try to find Edit command in "extassoc.xml" if not gExts.GetExtActionCmd(aFile, 'edit', sCmd, sParams, sStartPath) then ShowEditorByGlob(aFile.FullPath) // If command not found then use default editor else begin ProcessExtCommandFork(sCmd, sParams, aFile.Path, aFile); end; finally FreeAndNil(aFile); end; end else msgWarning(rsMsgNotImplemented); end; // Shows recently visited directories (global). procedure TMainCommands.cm_DirHistory(const Params: array of string); var p:TPoint; begin frmMain.CreatePopUpDirHistory; p:=frmMain.ActiveFrame.ClientToScreen(Classes.Point(0,0)); Application.ProcessMessages; //TODO: In Windows, Not sure why, but on all systems tried, this eliminate a "beep" when the popup is shown. frmMain.pmDirHistory.Popup(p.X,p.Y); end; // Shows browser-like history for active file view. procedure TMainCommands.cm_ViewHistory(const Params: array of string); begin frmMain.ShowFileViewHistory; end; procedure TMainCommands.cm_ViewHistoryPrev(const Params: array of string); begin with frmMain do begin ActiveFrame.GoToPrevHistory; end; end; procedure TMainCommands.cm_ViewHistoryNext(const Params: array of string); begin with frmMain do begin ActiveFrame.GoToNextHistory; end; end; procedure TMainCommands.cm_ShowCmdLineHistory(const Params: array of string); begin with frmMain do begin if IsCommandLineVisible then begin edtCommand.SetFocus; if edtCommand.Items.Count>0 then edtCommand.DroppedDown:=True; end; end; end; procedure TMainCommands.cm_ToggleFullscreenConsole(const Params: array of string); begin with frmMain do begin ToggleFullscreenConsole; if IsCommandLineVisible then begin edtCommand.SetFocus; end; end; end; procedure TMainCommands.cm_RunTerm(const Params: array of string); begin with frmMain do if not edtCommand.Focused then try ProcessExtCommandFork(gRunTermCmd, gRunTermParams, ActiveFrame.CurrentPath); except on e: EInvalidCommandLine do MessageDlg(rsToolErrorOpeningTerminal, rsMsgInvalidCommandLine + ' (' + rsToolTerminal + '):' + LineEnding + e.Message, mtError, [mbOK], 0); end; end; procedure TMainCommands.cm_CalculateSpace(const Params: array of string); var SelectedFiles: TFiles; Operation: TFileSourceOperation; begin with frmMain do begin if not (fsoCalcStatistics in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try Operation := ActiveFrame.FileSource.CreateCalcStatisticsOperation(SelectedFiles); if not Assigned(Operation) then msgWarning(rsMsgErrNotSupported) else begin Operation.AddStateChangedListener([fsosStopped], @OnCalcStatisticsStateChanged); OperationsManager.AddOperation(Operation); end; finally if Assigned(SelectedFiles) then FreeAndNil(SelectedFiles); end; end; end; procedure TMainCommands.cm_CountDirContent(const Params: array of string); begin frmMain.ActiveFrame.CalculateSpaceOfAllDirectories; end; procedure TMainCommands.cm_SetFileProperties(const Params: array of string); var ActiveFile: TFile = nil; SelectedFiles: TFiles = nil; aFileProperties: TFileProperties; CreationTime: DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0; ModificationTime: DCBasicTypes.TFileTime = 0; Operation: TFileSourceSetFilePropertyOperation = nil; begin with frmMain do try if not (fsoSetFileProperty in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; ActiveFile := ActiveFrame.CloneActiveFile; if Assigned(ActiveFile) and (SelectedFiles.Count > 0) then begin if fspDirectAccess in ActiveFrame.FileSource.Properties then begin if mbFileGetTime(ActiveFile.FullPath, ModificationTime, CreationTime, LastAccessTime) then begin if fpModificationTime in ActiveFile.SupportedProperties then ActiveFile.ModificationTime:= FileTimeToDateTime(ModificationTime); if fpCreationTime in ActiveFile.SupportedProperties then ActiveFile.CreationTime:= FileTimeToDateTime(CreationTime); if fpLastAccessTime in ActiveFile.SupportedProperties then ActiveFile.LastAccessTime:= FileTimeToDateTime(LastAccessTime); end; end; FillByte(aFileProperties, SizeOf(aFileProperties), 0); if fpAttributes in ActiveFile.SupportedProperties then aFileProperties[fpAttributes]:= ActiveFile.Properties[fpAttributes].Clone; if fpModificationTime in ActiveFile.SupportedProperties then aFileProperties[fpModificationTime]:= ActiveFile.Properties[fpModificationTime].Clone; if fpCreationTime in ActiveFile.SupportedProperties then aFileProperties[fpCreationTime]:= ActiveFile.Properties[fpCreationTime].Clone; if fpLastAccessTime in ActiveFile.SupportedProperties then aFileProperties[fpLastAccessTime]:= ActiveFile.Properties[fpLastAccessTime].Clone; Operation:= ActiveFrame.FileSource.CreateSetFilePropertyOperation( SelectedFiles, aFileProperties) as TFileSourceSetFilePropertyOperation; if Assigned(Operation) then begin if ShowChangeFilePropertiesDialog(Operation) then begin OperationsManager.AddOperation(Operation); Operation := nil; // So it doesn't get destroyed below. end; end; end; finally FreeAndNil(SelectedFiles); FreeAndNil(ActiveFile); FreeAndNil(Operation); end; end; procedure TMainCommands.cm_FileProperties(const Params: array of string); var SelectedFiles: TFiles; Operation: TFileSourceExecuteOperation; aFile: TFile; begin with frmMain do begin if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SelectedFiles) then try if SelectedFiles.Count > 0 then try ShowFilePropertiesDialog(ActiveFrame.FileSource, SelectedFiles); except on e: EContextMenuException do ShowException(e); end; finally FreeAndNil(SelectedFiles); end; end else if (fsoExecute in ActiveFrame.FileSource.GetOperationsTypes) then begin aFile:= ActiveFrame.CloneActiveFile; if Assigned(aFile) then try Operation:= ActiveFrame.FileSource.CreateExecuteOperation( aFile, ActiveFrame.CurrentPath, 'properties') as TFileSourceExecuteOperation; if Assigned(Operation) then Operation.Execute; finally FreeThenNil(Operation); FreeThenNil(aFile); end; end; end; end; procedure TMainCommands.cm_FileLinker(const Params: array of string); var I: Integer; aSelectedFiles: TFiles = nil; aFile: TFile; aFirstFilenameOfSeries: String; begin with frmMain, frmMain.ActiveFrame do begin if not (fsoCombine in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; try aSelectedFiles := CloneSelectedOrActiveFiles; for I := 0 to aSelectedFiles.Count - 1 do begin aFile := aSelectedFiles[I]; if (aFile.IsDirectory or aFile.IsLinkToDirectory) then begin msgWarning(rsMsgInvalidSelection); Exit; end; end; if aSelectedFiles.Count > 1 then begin ShowLinkerFilesForm(FileSource, aSelectedFiles, NotActiveFrame.CurrentPath) end else begin if aSelectedFiles.Count = 1 then begin try if StrToInt(aSelectedFiles[0].Extension)>0 then begin aFirstFilenameOfSeries:='1'; while length(aFirstFilenameOfSeries)<length(aSelectedFiles[0].Extension) do aFirstFilenameOfSeries:='0'+aFirstFilenameOfSeries; aFirstFilenameOfSeries:=aSelectedFiles[0].Path + aSelectedFiles[0].NameNoExt + ExtensionSeparator + aFirstFilenameOfSeries; DoDynamicFilesLinking(FileSource, aSelectedFiles, NotActiveFrame.CurrentPath, aFirstFilenameOfSeries) end else begin msgWarning(rsMsgInvalidSelection); end; except msgWarning(rsMsgInvalidSelection); end; end else begin msgWarning(rsMsgInvalidSelection); end; end; finally FreeThenNil(aSelectedFiles); end; // try end; // with end; procedure TMainCommands.cm_FileSpliter(const Params: array of string); var aFile: TFile = nil; begin with frmMain, frmMain.ActiveFrame do begin if not (fsoSplit in FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; try aFile := CloneActiveFile; if (not Assigned(aFile)) or (aFile.IsDirectory or aFile.IsLinkToDirectory) then msgWarning(rsMsgInvalidSelection) else ShowSplitterFileForm(FileSource, aFile, NotActiveFrame.CurrentPath); finally FreeThenNil(aFile); end; // try end; // with end; procedure TMainCommands.cm_PanelsSplitterPerPos(const Params: array of string); var Split: Integer = 50; Param, SplitPct: String; begin for Param in Params do begin if GetParamValue(Param, 'splitpct', SplitPct) then Split := StrToIntDef(SplitPct, Split); end; DoPanelsSplitterPerPos(Split); end; procedure TMainCommands.cm_EditComment(const Params: array of string); var aFile: TFile; begin with frmMain.ActiveFrame do begin if (fspDirectAccess in FileSource.GetProperties) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then ShowDescrEditDlg(aFile.FullPath, frmMain.ActiveFrame) else msgWarning(rsMsgNoFilesSelected); finally FreeAndNil(aFile); end; end else if (fspLinksToLocalFiles in FileSource.GetProperties) then begin aFile:= CloneActiveFile; if Assigned(aFile) then try if aFile.IsNameValid then begin if FileSource.GetLocalName(aFile) then ShowDescrEditDlg(aFile.FullPath, frmMain.ActiveFrame) else msgWarning(rsMsgErrNotSupported); end else begin msgWarning(rsMsgNoFilesSelected); end; finally FreeAndNil(aFile); end; end else msgWarning(rsMsgErrNotSupported); end; end; function SendToClipboard(ClipboardMode: uClipboard.TClipboardOperation):Boolean; var sl: TStringList = nil; i : Integer; theSelectedFiles: TFiles = nil; begin // Only works for file system. Result := False; with frmMain.ActiveFrame do if (fspDirectAccess in FileSource.Properties) then begin sl := TStringList.Create; try theSelectedFiles := CloneSelectedOrActiveFiles; for i := 0 to theSelectedFiles.Count - 1 do sl.Add(theSelectedFiles[i].FullPath); case ClipboardMode of uClipboard.ClipboardCut: Result := uClipboard.CutToClipboard(sl); uClipboard.ClipboardCopy: Result := uClipboard.CopyToClipboard(sl); end; finally if Assigned(sl) then FreeAndNil(sl); if Assigned(theSelectedFiles) then FreeAndNil(theSelectedFiles); end; end else msgWarning(rsMsgErrNotSupported); end; procedure TMainCommands.cm_CopyToClipboard(const Params: array of string); begin SendToClipboard(ClipboardCopy); end; procedure TMainCommands.cm_CutToClipboard(const Params: array of string); begin SendToClipboard(ClipboardCut); end; procedure TMainCommands.cm_PasteFromClipboard(const Params: array of string); var ClipboardOp: TClipboardOperation; filenamesList: TStringList; Files: TFiles = nil; Operation: TFileSourceOperation = nil; SourceFileSource: IFileSource = nil; begin with frmMain do begin if PasteFromClipboard(ClipboardOp, filenamesList) = True then try // fill file list with files Files := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(filenamesList[0]), fileNamesList, True); if Files.Count > 0 then begin case ClipboardOp of uClipboard.ClipboardCut: begin SourceFileSource := TFileSystemFileSource.GetFileSource; if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin if not (fsoMove in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; Operation := SourceFileSource.CreateMoveOperation( Files, ActiveFrame.CurrentPath); end else begin if (not (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes)) or (not (fsoDelete in SourceFileSource.GetOperationsTypes)) then begin msgWarning(rsMsgErrNotSupported); Exit; end; { // Meta-operation: CopyIn + Delete Operation := ActiveFrame.FileSource.CreateCopyInOperation( SourceFileSource, Files, ActiveFrame.CurrentPath); } end; end; uClipboard.ClipboardCopy: begin if not (fsoCopyIn in ActiveFrame.FileSource.GetOperationsTypes) then begin msgWarning(rsMsgErrNotSupported); Exit; end; SourceFileSource := TFileSystemFileSource.GetFileSource; if ActiveFrame.FileSource.IsClass(TFileSystemFileSource) then begin Operation := SourceFileSource.CreateCopyOutOperation( ActiveFrame.FileSource, Files, ActiveFrame.CurrentPath); end else begin Operation := ActiveFrame.FileSource.CreateCopyInOperation( SourceFileSource, Files, ActiveFrame.CurrentPath); end; end; else // Invalid clipboard operation. Exit; end; if Assigned(Operation) then begin if Operation is TFileSystemCopyOperation then (Operation as TFileSystemCopyOperation).AutoRenameItSelf:= True; OperationsManager.AddOperation(Operation); // Files have been moved so clear the clipboard because // the files location in the clipboard is invalid now. if ClipboardOp = uClipboard.ClipboardCut then uClipboard.ClearClipboard; end else msgWarning(rsMsgNotImplemented); end; finally FreeAndNil(fileNamesList); if Assigned(Files) then FreeAndNil(Files); end; end; end; procedure TMainCommands.cm_ChangeDirToRoot(const Params: array of string); begin DoChangeDirToRoot(frmMain.ActiveFrame); end; procedure TMainCommands.cm_ChangeDirToHome(const Params: array of string); begin SetFileSystemPath(frmMain.ActiveFrame, GetHomeDir); end; procedure TMainCommands.cm_ChangeDirToParent(const Params: array of string); begin frmMain.ActiveFrame.ChangePathToParent(True); end; // Parameters: // Full path to a directory. procedure TMainCommands.cm_ChangeDir(const Params: array of string); var Param, WantedPath: string; begin //1o) Let's set our default values WantedPath := frmMain.ActiveFrame.CurrentPath; //2o) Let's parse the parameter to get the wanted ones for Param in Params do begin if GetParamValue(Param, 'activepath', WantedPath) then begin WantedPath:=RemoveQuotation(PrepareParameter(WantedPath)); ChooseFileSource(frmMain.ActiveFrame, RemoveQuotation(ReplaceEnvVars(WantedPath))); end else if GetParamValue(Param, 'inactivepath', WantedPath) then begin WantedPath:=RemoveQuotation(PrepareParameter(WantedPath)); ChooseFileSource(frmMain.NotActiveFrame, RemoveQuotation(ReplaceEnvVars(WantedPath))); end else if GetParamValue(Param, 'leftpath', WantedPath) then begin WantedPath:=RemoveQuotation(PrepareParameter(WantedPath)); ChooseFileSource(frmMain.FrameLeft, RemoveQuotation(ReplaceEnvVars(WantedPath))); end else if GetParamValue(Param, 'rightpath', WantedPath) then begin WantedPath:=RemoveQuotation(PrepareParameter(WantedPath)); ChooseFileSource(frmMain.FrameRight, RemoveQuotation(ReplaceEnvVars(WantedPath))); end; end; //3o) Let's support the DC legacy way of working of the command if Length(Params)=1 then begin if (not GetParamValue(Params[0], 'activepath', WantedPath)) AND (not GetParamValue(Params[0], 'inactivepath', WantedPath)) AND (not GetParamValue(Params[0], 'leftpath', WantedPath)) AND (not GetParamValue(Params[0], 'rightpath', WantedPath)) then ChooseFileSource(frmMain.ActiveFrame, RemoveQuotation(ReplaceEnvVars(Params[0]))); end; end; procedure TMainCommands.cm_ClearLogWindow(const Params: array of string); begin frmMain.seLogWindow.Lines.Clear; end; procedure TMainCommands.cm_CmdLineNext(const Params: array of string); begin DoShowCmdLineHistory(True); end; procedure TMainCommands.cm_CmdLinePrev(const Params: array of string); begin DoShowCmdLineHistory(False); end; procedure TMainCommands.cm_ViewLogFile(const Params: array of string); begin ShowViewerByGlob(GetActualLogFilename); end; procedure TMainCommands.cm_ClearLogFile(const Params: array of string); begin if MsgBox(Format(rsMsgPopUpHotDelete,['log file ('+GetActualLogFilename+')']),[msmbYes, msmbNo], msmbNo, msmbNo ) = mmrYes then begin mbDeleteFile(GetActualLogFilename); end; end; procedure TMainCommands.cm_NetworkConnect(const Params: array of string); begin DoOpenVirtualFileSystemList(frmMain.ActiveFrame); end; procedure TMainCommands.cm_NetworkDisconnect(const Params: array of string); begin CloseNetworkConnection(); end; procedure TMainCommands.cm_HorizontalFilePanels(const Params: array of string); var sParamValue:string; WantedHorizontalFilePanels:boolean; begin WantedHorizontalFilePanels:=gHorizontalFilePanels; if Length(Params)>0 then begin if GetParamValue(Params[0], 'mode', sParamValue) then begin if sParamValue='legacy' then WantedHorizontalFilePanels := not WantedHorizontalFilePanels else if sParamValue='vertical' then WantedHorizontalFilePanels:=FALSE else if sParamValue='horizontal' then WantedHorizontalFilePanels:=TRUE; end; end else begin WantedHorizontalFilePanels := not WantedHorizontalFilePanels; end; if WantedHorizontalFilePanels<>gHorizontalFilePanels then begin gHorizontalFilePanels:=WantedHorizontalFilePanels; frmMain.actHorizontalFilePanels.Checked := gHorizontalFilePanels; frmMain.UpdateWindowView; end; end; procedure TMainCommands.cm_OperationsViewer(const Params: array of string); begin ShowOperationsViewer; end; procedure TMainCommands.cm_CompareDirectories(const Params: array of string); var I: LongWord; NtfsShift: Boolean; SourceFile: TDisplayFile; TargetFile: TDisplayFile; SourceList: TStringHashList; SourceFiles: TDisplayFiles = nil; TargetFiles: TDisplayFiles = nil; begin SourceList:= TStringHashList.Create(FileNameCaseSensitive); with frmMain do try NtfsShift:= gNtfsHourTimeDelay and NtfsHourTimeDelay(ActiveFrame.CurrentPath, NotActiveFrame.CurrentPath); SourceFiles:= ActiveFrame.DisplayFiles; TargetFiles:= NotActiveFrame.DisplayFiles; for I:= 0 to SourceFiles.Count - 1 do begin SourceFile:= SourceFiles[I]; if SourceFile.FSFile.IsDirectory or SourceFile.FSFile.IsLinkToDirectory then Continue; ActiveFrame.MarkFile(SourceFile, True); SourceList.Add(SourceFile.FSFile.Name, SourceFile); end; for I:= 0 to TargetFiles.Count - 1 do begin TargetFile:= TargetFiles[I]; if TargetFile.FSFile.IsDirectory or TargetFile.FSFile.IsLinkToDirectory then Continue; SourceFile:= TDisplayFile(SourceList.Data[TargetFile.FSFile.Name]); if (SourceFile = nil) then NotActiveFrame.MarkFile(TargetFile, True) else case FileTimeCompare(SourceFile.FSFile.ModificationTime, TargetFile.FSFile.ModificationTime, NtfsShift) of 0: ActiveFrame.MarkFile(SourceFile, False); +1: NotActiveFrame.MarkFile(TargetFile, False); -1: begin ActiveFrame.MarkFile(SourceFile, False); NotActiveFrame.MarkFile(TargetFile, True); end; end; end; finally SourceList.Free; ActiveFrame.Repaint; NotActiveFrame.Repaint; end; end; { TMainCommands.cm_ConfigToolbars } procedure TMainCommands.cm_ConfigToolbars(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsToolbar); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsToolbar); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; { TMainCommands.cm_DebugShowCommandParameters } procedure TMainCommands.cm_DebugShowCommandParameters(const Params: array of string); var sMessageToshow:string; indexParameter:integer; begin sMessageToshow:='Number of parameters: '+IntToStr(Length(Params)); if Length(Params)>0 then begin sMessageToshow:=sMessageToshow+#$0A; for indexParameter:=0 to pred(Length(Params)) do begin sMessageToshow:=sMessageToshow+#$0A+'Parameter #'+IntToStr(indexParameter)+': '+Params[indexParameter]+' ==> '+PrepareParameter(Params[indexParameter]); end; end; msgOK(sMessageToshow); end; { TMainCommands.cm_CopyPathOfFilesToClip } procedure TMainCommands.cm_CopyPathOfFilesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcJustPathWithSeparator); end; { TMainCommands.cm_CopyPathNoSepOfFilesToClip } procedure TMainCommands.cm_CopyPathNoSepOfFilesToClip(const Params: array of string); begin DoCopySelectedFileNamesToClipboard(frmMain.ActiveFrame, cfntcPathWithoutSeparator); end; { TMainCommands.cm_DoAnyCmCommand } procedure TMainCommands.cm_DoAnyCmCommand(const Params: array of string); var CommandReturnedToExecute:string=''; begin if ShowMainCommandDlgForm(gLastDoAnyCommand,CommandReturnedToExecute) then begin gLastDoAnyCommand := CommandReturnedToExecute; frmMain.Commands.Commands.ExecuteCommand(CommandReturnedToExecute, []); end; end; { TMainCommands.DoCloseAllTabs } procedure TMainCommands.DoCloseAllTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage := ANotebook.PageCount - 1 downto 0 do if (not bAbort) AND (iPage <> ANotebook.PageIndex) then case frmMain.RemovePage(ANotebook, iPage, bDoLocked, iAskForLocked, True) of 1: Continue; // skip tab 2: bAbort := True; // cancel operation 3: iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command end; end; { TMainCommands.DoCloseDuplicateTabs } // Close tabs pointing to same dirs so at the end of action, only one tab for each dir is kept. // Tabs that are kept follow these rules of priority: // -All the locked tabs are kept without asking question *except* if "bDoLocked" is set, which means we want also to elimit double lock tab. // -The one that has been user renamed by the user are eliminate IF a equivalent locked tab exist. // -If a user rename tab point the same directoy as another tab but not renamed, no matter the order, we keep the renamed tab and eliminate the other. // -A locked renamed tabs is stronger than a non-renamed tab locked so we eliminate the second one, the one not renamed. // -If two equals importance identical exist, we keep the one on left and elimitate the one on right. // At the end of the process, we stay in a tab that has the same path as where we were initally. procedure TMainCommands.DoCloseDuplicateTabs(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var sOriginalPath: String; iTabIndex, jTabIndex, jScore, tScore: Integer; bFlagDeleted: boolean; begin // 1. We save to restore later the original directory of the active tab. sOriginalPath := ANoteBook.Page[ANotebook.PageIndex].FileView.CurrentPath; // 2. We do the actual job. jTabIndex := pred(ANotebook.PageCount); while (not bAbort) AND (jTabIndex>0) do begin jScore:=$0; if (ANoteBook.Page[jTabIndex].PermanentTitle <> '') then jScore := (jScore OR $01); if (ANoteBook.Page[jTabIndex].LockState <> tlsNormal) then jScore := (jScore OR $02); iTabIndex := (jTabIndex-1); bFlagDeleted := FALSE; while (not bAbort) AND (iTabIndex>=0) AND (bFlagDeleted=FALSE) do begin if mbCompareFileNames(ANoteBook.Page[iTabIndex].FileView.CurrentPath, ANoteBook.Page[jTabIndex].FileView.CurrentPath) then begin tScore:=jScore; if (ANoteBook.Page[iTabIndex].PermanentTitle <> '') then tScore := (tScore OR $04); if (ANoteBook.Page[iTabIndex].LockState <> tlsNormal) then tScore := (tScore OR $08); case tScore of $00, $04, $05, $08, $09, $0C, $0D: // We eliminate the one on right. begin frmMain.RemovePage(ANotebook, jTabIndex, False); bFlagDeleted:=TRUE; end; $01, $02, $03, $06, $07: // We eliminate the one on left. begin frmMain.RemovePage(ANotebook, iTabIndex, False); dec(jTabIndex); // If we eliminate one on left, the right tab now moved one position lower, we must take this in account. end; $0A, $0E, $0F: // We eliminate the one on right, EVEN if it is locked if specified. begin if bDoLocked then begin case frmMain.RemovePage(ANotebook, jTabIndex, bDoLocked, iAskForLocked, True) of 0: bFlagDeleted:=True; // Standard Removed. 1: begin end; // Skip tab, we keep going. 2: bAbort := True; // Cancel operation! 3: begin iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command bFlagDeleted:=True; end; end; end; end; $0B: // We eliminate the one on left, EVEN if it is locked, if specified. begin if bDoLocked then begin case frmMain.RemovePage(ANotebook, iTabIndex, bDoLocked, iAskForLocked, True) of 0: dec(jTabIndex); // If we eliminate one on left, the right tab now moved one position lower, we must take this in account. 1: begin end; // Skip tab, we keep going. 2: bAbort := True; // Cancel operation! 3: begin iAskForLocked := 2; // user answered to delete them all, we won't ask anymore during the rest of this command dec(jTabIndex); end; end; end; end; end; // case tScore end; dec(iTabIndex); end; dec(jTabIndex); end; // 3. We attempt to select a tab with the actual original path from where we were. if not mbCompareFileNames(ANoteBook.Page[ANotebook.PageIndex].FileView.CurrentPath , sOriginalPath) then begin iTabIndex:=0; while (iTabIndex<ANotebook.PageCount) do if mbCompareFileNames(ANoteBook.Page[iTabIndex].FileView.CurrentPath , sOriginalPath) then begin ANotebook.PageIndex:=iTabIndex; iTabIndex:=ANotebook.PageCount; end else inc(iTabIndex); end; end; { TMainCommands.DoSetAllTabsOptionNormal } procedure TMainCommands.DoSetAllTabsOptionNormal(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsNormal; end; { TMainCommands.DoSetAllTabsOptionPathLocked } procedure TMainCommands.DoSetAllTabsOptionPathLocked(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsPathLocked; end; { TMainCommands.DoAllTabsOptionPathResets } procedure TMainCommands.DoAllTabsOptionPathResets(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsPathResets; end; { TMainCommands.DoSetAllTabsOptionDirsInNewTab } procedure TMainCommands.DoSetAllTabsOptionDirsInNewTab(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; begin for iPage:=0 to pred(ANoteBook.PageCount) do ANoteBook.Page[iPage].LockState:=tlsDirsInNewTab; end; { TMainCommands.cm_SetAllTabsOptionNormal } procedure TMainCommands.cm_SetAllTabsOptionNormal(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionNormal); end; { TMainCommands.cm_SetAllTabsOptionPathLocked } procedure TMainCommands.cm_SetAllTabsOptionPathLocked(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionPathLocked); end; { TMainCommands.cm_SetAllTabsOptionPathResets } procedure TMainCommands.cm_SetAllTabsOptionPathResets(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoAllTabsOptionPathResets); end; { TMainCommands.cm_SetAllTabsOptionDirsInNewTab } procedure TMainCommands.cm_SetAllTabsOptionDirsInNewTab(const Params: array of string); begin DoActionOnMultipleTabs(Params,@DoSetAllTabsOptionDirsInNewTab); end; { TMainCommands.DoActionOnMultipleTabs } procedure TMainCommands.DoActionOnMultipleTabs(const Params: array of string; ProcedureDoingActionOnMultipleTabs: TProcedureDoingActionOnMultipleTabs); var originalFilePanel:TFilePanelSelect; SideOfAction : TTabsConfigLocation = tclActive; bAbort: boolean = False; bDoLocked: boolean = False; iAskForLocked: integer = 0; iCurrentPageCount: integer; begin FOriginalNumberOfTabs := -1; originalFilePanel := frmMain.SelectedPanel; GetAndSetMultitabsActionFromParams(Params, SideOfAction, bDoLocked, iAskForLocked); case SideOfAction of tclLeft: ProcedureDoingActionOnMultipleTabs(frmMain.LeftTabs, bAbort, bDoLocked, iAskForLocked); tclRight: ProcedureDoingActionOnMultipleTabs(frmMain.RightTabs, bAbort, bDoLocked, iAskForLocked); tclActive: ProcedureDoingActionOnMultipleTabs(frmMain.ActiveNotebook, bAbort, bDoLocked, iAskForLocked); tclInactive: ProcedureDoingActionOnMultipleTabs(frmMain.NotActiveNotebook, bAbort, bDoLocked, iAskForLocked); tclBoth: begin iCurrentPageCount := frmMain.RightTabs.PageCount; ProcedureDoingActionOnMultipleTabs(frmMain.LeftTabs, bAbort, bDoLocked, iAskForLocked); FOriginalNumberOfTabs := iCurrentPageCount; ProcedureDoingActionOnMultipleTabs(frmMain.RightTabs, bAbort, bDoLocked, iAskForLocked); end; end; frmMain.SelectedPanel := originalFilePanel; frmMain.ActiveFrame.SetFocus; end; { TMainCommands.GetAndSetMultitabsActionFromParams } procedure TMainCommands.GetAndSetMultitabsActionFromParams(const Params: array of string; var APanelSide:TTabsConfigLocation; var ActionOnLocked:boolean; var AskForLocked:integer); var Param, sValue: String; boolValue: boolean; begin Param := GetDefaultParam(Params); ActionOnLocked := False; AskForLocked := 0; // 1. Evaluate if we're running from legacy parameter style. if pos('=',Param)=0 then begin // 1.a. If yes, just watch for the magic word if Param = 'LeftTabs' then APanelSide := tclLeft else if Param = 'RightTabs' then APanelSide := tclRight else if Param = 'ActiveTabs' then APanelSide := tclActive else if Param = 'InactiveTabs' then APanelSide := tclInactive else if Param = 'BothTabs' then APanelSide := tclBoth else APanelSide := tclActive; // Legacy default is to close from Active Notebook. end else begin // 1.b. If no, let's parse it. // 2. Let's set our default values. APanelSide := tclActive; // 3. Parsing may now begin! for Param in Params do begin if GetParamValue(Param, 'side', sValue) then begin if sValue = 'left' then APanelSide := tclLeft else if sValue = 'right' then APanelSide := tclRight else if sValue = 'active' then APanelSide := tclActive else if sValue = 'inactive' then APanelSide := tclInactive else if sValue = 'both' then APanelSide := tclBoth; end else if GetParamBoolValue(Param, 'dolocked', boolValue) then ActionOnLocked := boolValue else if GetParamBoolValue(Param, 'confirmlocked', boolValue) then begin if boolValue then AskForLocked:=1 else AskForLocked:=2; end; end; end; end; { TMainCommands.cm_ConfigFolderTabs } procedure TMainCommands.cm_ConfigFolderTabs(const Params: array of string); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsTabs); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsTabs); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; { TMainCommands.DoShowFavoriteTabsOptions } procedure TMainCommands.DoShowFavoriteTabsOptions; var Options: IOptionsDialog; Editor: TOptionsEditor; begin Options := ShowOptions(TfrmOptionsFavoriteTabs); Editor := Options.GetEditor(TfrmOptionsFavoriteTabs); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsFavoriteTabs(Editor).MakeUsInPositionToWorkWithActiveFavoriteTabs; end; { TMainCommands.cm_ConfigFavoriteTabs } procedure TMainCommands.cm_ConfigFavoriteTabs(const Params: array of string); begin DoShowFavoriteTabsOptions; end; { TMainCommands.cm_ResaveFavoriteTabs } procedure TMainCommands.cm_ResaveFavoriteTabs(const Params: array of string); begin if gFavoriteTabsList.ReSaveTabsToXMLEntry(gFavoriteTabsList.GetIndexLastFavoriteTabsLoaded) then if gFavoriteTabsGoToConfigAfterReSave then DoShowFavoriteTabsOptions; end; { TMainCommands.cm_SaveFavoriteTabs } procedure TMainCommands.cm_SaveFavoriteTabs(const Params: array of string); var sFavoriteTabsEntryName: string = ''; begin if gFavoriteTabsList.GetSuggestedParamsForFavoriteTabs(frmMain.ActiveNotebook.ActivePage.CurrentTitle, sFavoriteTabsEntryName) then if gFavoriteTabsList.SaveNewEntryFavoriteTabs(sFavoriteTabsEntryName) then if gFavoriteTabsGoToConfigAfterSave then DoShowFavoriteTabsOptions; end; { TMainCommands.DoOnClickMenuJobFavoriteTabs } // We're supposed to jump here when we get called by an item from a favorite tabs menu item. // The value of "tag" will indicate us what to do. // -A value below TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING ($10000) indicates we want to load tabs with what was saved in our favorite tabs list at the index of "tag". // -A value equal or higher than TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING ($10000) indicates we want to save our current tabs OVER the existing entry in our favorite tabs list at the index of "tag MOD TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING". procedure TMainCommands.DoOnClickMenuJobFavoriteTabs(Sender: TObject); begin with Sender as TComponent do begin case tag of 0 .. pred(TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING): // We want to adjust our current tab from one in the favorite tabs. begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(tag); end; TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING .. pred(TAGOFFSET_FAVTABS_SOMETHINGELSE): // We want to save our current tabs an existing favorite tabs entry. if gFavoriteTabsList.ReSaveTabsToXMLEntry(tag mod TAGOFFSET_FAVTABS_FORSAVEOVEREXISTING) then if gFavoriteTabsGoToConfigAfterReSave then DoShowFavoriteTabsOptions; end; //case iDispatcher of ... end; end; { TMainCommands.cm_ReloadFavoriteTabs } procedure TMainCommands.cm_ReloadFavoriteTabs(const Params: array of string); begin // Here we won't call "gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange;" because if user wants to reload it, it's because he does not want to save what he has right now... // Otherwise, it would be a useless action. :-/ gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexLastFavoriteTabsLoaded); end; { TMainCommands.cm_PreviousFavoriteTabs } procedure TMainCommands.cm_PreviousFavoriteTabs(const Params: array of string); begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexPreviousLastFavoriteTabsLoaded); end; { TMainCommands.cm_NextFavoriteTabs } procedure TMainCommands.cm_NextFavoriteTabs(const Params: array of string); begin gFavoriteTabsList.SaveCurrentFavoriteTabsIfAnyPriorToChange; gFavoriteTabsList.LoadTabsFromXmlEntry(gFavoriteTabsList.GetIndexNextLastFavoriteTabsLoaded); end; { TMainCommands.cm_LoadFavoriteTabs } procedure TMainCommands.cm_LoadFavoriteTabs(const Params: array of string); var p: TPoint; begin gFavoriteTabsList.PopulateMenuWithFavoriteTabs(frmMain.pmFavoriteTabs, @DoOnClickMenuJobFavoriteTabs, ftmp_FAVTABSWITHCONFIG); p := Mouse.CursorPos; frmMain.pmFavoriteTabs.Popup(p.X, p.Y); Application.ProcessMessages; end; { TMainCommands.DoCopyAllTabsToOppositeSide } procedure TMainCommands.DoCopyAllTabsToOppositeSide(ANotebook: TFileViewNotebook; var bAbort: boolean; bDoLocked: boolean; var iAskForLocked: integer); var iPage: integer; localFileViewPage: TFileViewPage; localPath: string; TargetNotebook: TFileViewNotebook; iPageCountLimit: integer; begin if FOriginalNumberOfTabs <> -1 then iPageCountLimit := FOriginalNumberOfTabs else iPageCountLimit := ANotebook.PageCount; if ANotebook = FrmMain.LeftTabs then TargetNotebook := FrmMain.RightTabs else TargetNotebook := FrmMain.LeftTabs; for iPage := 0 to pred(iPageCountLimit) do begin localPath := ANotebook.Page[iPage].FileView.CurrentPath; localFileViewPage := TargetNotebook.NewPage(ANotebook.Page[iPage].FileView); // Workaround for Search Result File Source if localFileViewPage.FileView.FileSource is TSearchResultFileSource then SetFileSystemPath(localFileViewPage.FileView, localPath) else localFileViewPage.FileView.CurrentPath := localPath; end; end; { TMainCommands.cm_CopyAllTabsToOpposite } procedure TMainCommands.cm_CopyAllTabsToOpposite(const Params: array of string); begin DoActionOnMultipleTabs(Params, @DoCopyAllTabsToOppositeSide); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fconnectionmanager.pas����������������������������������������������������������0000644�0001750�0000144�00000014151�12612505011�017644� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fConnectionManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ComCtrls, uFileView; type { TfrmConnectionManager } TfrmConnectionManager = class(TForm) btnCancel: TBitBtn; btnDelete: TBitBtn; btnEdit: TBitBtn; btnAdd: TBitBtn; btnConnect: TBitBtn; gbConnectTo: TGroupBox; ImageList: TImageList; tvConnections: TTreeView; procedure btnAddClick(Sender: TObject); procedure btnConnectClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tvConnectionsSelectionChanged(Sender: TObject); private FFileView: TFileView; public constructor Create(TheOwner: TComponent; FileView: TFileView); reintroduce; end; function ShowConnectionManager(FileView: TFileView): Boolean; implementation {$R *.lfm} uses uGlobs, uDCUtils, uShowMsg, uWfxModule, WfxPlugin, uWfxPluginFileSource, uLng, uConnectionManager; function ShowConnectionManager(FileView: TFileView): Boolean; begin with TfrmConnectionManager.Create(Application, FileView) do begin try Result:= (ShowModal = mrOK); finally Free; end; end; end; { TfrmConnectionManager } procedure TfrmConnectionManager.tvConnectionsSelectionChanged(Sender: TObject); var bEnabled: Boolean; begin if not Assigned(tvConnections.Selected) then begin btnConnect.Enabled:= False; btnAdd.Enabled:= False; btnEdit.Enabled:= False; btnDelete.Enabled:= False; end else begin bEnabled:= Assigned(tvConnections.Selected.Data); btnConnect.Enabled:= not bEnabled; btnAdd.Enabled:= bEnabled; btnEdit.Enabled:= not bEnabled; btnDelete.Enabled:= not bEnabled; end; end; procedure TfrmConnectionManager.btnAddClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_ADD) then begin with tvConnections.Items.AddChild(tvConnections.Selected, Connection) do StateIndex:= 1; end; end; } end; procedure TfrmConnectionManager.btnConnectClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection, RemotePath, RootPath: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkOpenConnection(Connection, RootPath, RemotePath) then begin DoDirSeparators(RootPath); DoDirSeparators(RemotePath); WfxPluginFileSource.SetCurrentAddress(Connection); WfxPluginFileSource.SetRootDir(IncludeTrailingPathDelimiter(RootPath)); FFileView.AddFileSource(WfxPluginFileSource, ExcludeTrailingPathDelimiter(RootPath) + RemotePath); tvConnections.Selected.Parent.Data:= nil; Close; end else begin msgError(Format(rsMsgErrCanNotConnect, [Connection])); end; end; } end; procedure TfrmConnectionManager.btnDeleteClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_DELETE) then begin tvConnections.Items.BeginUpdate; tvConnections.Items.Delete(tvConnections.Selected); tvConnections.Items.EndUpdate; end; end; } end; procedure TfrmConnectionManager.btnEditClick(Sender: TObject); var WfxPluginFileSource: IWfxPluginFileSource; Connection: String; begin { WfxPluginFileSource:= PFileSourceRecord(tvConnections.Selected.Parent.Data)^.FileSource as IWfxPluginFileSource; if Assigned(WfxPluginFileSource) then begin Connection:= tvConnections.Selected.Text; if WfxPluginFileSource.WfxModule.WfxNetworkManageConnection(Handle, Connection, FS_NM_ACTION_EDIT) then tvConnections.Selected.Text:= Connection; end; } end; procedure TfrmConnectionManager.FormDestroy(Sender: TObject); var I: Integer; begin { for I:= 0 to tvConnections.Items.Count - 1 do begin if Assigned(tvConnections.Items.Item[I].Data) then DisposeFileSourceRecord(tvConnections.Items.Item[I].Data); end; } end; constructor TfrmConnectionManager.Create(TheOwner: TComponent; FileView: TFileView); var I, J: Integer; WfxPluginFileSource: IWfxPluginFileSource = nil; sModuleFileName, Connection: String; Node, SubNode: TTreeNode; begin { FFileView:= FileView; inherited Create(TheOwner); for I:= 0 to gWfxPlugins.Count - 1 do begin if gWfxPlugins.Enabled[I] then begin sModuleFileName:= GetCmdDirFromEnvVar(gWfxPlugins.FileName[I]); WfxPluginFileSource:= TWfxPluginFileSource.Create(sModuleFileName, gWfxPlugins.Name[I]); try if Assigned(WfxPluginFileSource) then with WfxPluginFileSource do begin if WFXmodule.VFSNetworkSupport then begin Node:= tvConnections.Items.Add(nil, gWfxPlugins.Name[I]); Node.Data:= NewFileSourceRecord(WfxPluginFileSource); Node.StateIndex:= 0; J:= 0; while WfxModule.WfxNetworkGetConnection(J, Connection) do begin SubNode:= tvConnections.Items.AddChild(Node, Connection); SubNode.StateIndex:= 1; Inc(J); end; end else begin WfxPluginFileSource:= nil; end; end; except WfxPluginFileSource:= nil; end; end; end; } end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/un_process.pas������������������������������������������������������������������0000644�0001750�0000144�00000011022�12630571200�016161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit un_process; {$mode delphi}{$H+} interface uses Process, SysUtils; type TOnReadLn = procedure (str: String) of object; TOnOperationProgress = procedure of object; { TExProcess } TExProcess = class protected FProcess: TProcess; FOutputLine: String; FStop: Boolean; FQueryString: String; FOnReadLn, FOnQueryString: TOnReadLn; FOnOperationProgress: TOnOperationProgress; function _GetExitStatus(): Integer; public constructor Create(CommandLine: String = ''); procedure Execute; procedure Stop; procedure SetCmdLine(CommandLine: String); destructor Destroy; override; property Process: TProcess read FProcess; property ExitStatus: Integer read _GetExitStatus; property QueryString: String read FQueryString write FQueryString; property OnReadLn: TOnReadLn read FOnReadLn write FOnReadLn; property OnQueryString: TOnReadLn read FOnQueryString write FOnQueryString; property OnOperationProgress: TOnOperationProgress read FOnOperationProgress write FOnOperationProgress; end; implementation const BufferSize = 3000; function GetNextLine(const Value: String; var S: String; var N: Integer): Boolean; var PS: PChar; IP, L, P, K: Integer; begin P:= N; S:= ''; Result:= False; L:= Length(Value); if ((L - P) < 0) then Exit; if ((L - P) = 0) and (not (Value[P] in [#10, #13])) then Exit; PS:= PChar(Value) + P - 1; IP:= P; while ((L - P) >= 0) and (not (PS^ in [#10, #13])) do begin P:= P + 1; Inc(PS); end; K:= P; // Point to character after #13 if (P <= L) and (Value[P] = #13) then begin Inc(P); Result:= True; end; // Point to character after #10 if (P <= L) and (Value[P] = #10) then begin Inc(P); Result:= True; end; if Result then begin N:= P; SetLength(S, K - IP); System.Move(Value[IP], Pointer(S)^, K - IP); end; end; { TExProcess } function TExProcess._GetExitStatus(): Integer; begin Result:= FProcess.ExitStatus; end; constructor TExProcess.Create(CommandLine: String = ''); begin FOutputLine:= EmptyStr; FProcess:= TProcess.Create(nil); FProcess.CommandLine:= CommandLine; FProcess.Options:= [poUsePipes, poNoConsole]; end; procedure TExProcess.Execute; var P: Integer; S, OutputBuffer: String; begin S:= EmptyStr; FProcess.Execute; repeat if Assigned(FOnOperationProgress) then FOnOperationProgress(); if FStop then Exit; // If no output yet if FProcess.Output.NumBytesAvailable = 0 then begin if not FProcess.Running then Break else begin Sleep(1); if Assigned(FOnQueryString) and (FProcess.Stderr.NumBytesAvailable > 0) then begin SetLength(OutputBuffer, BufferSize); // Waits for the process output SetLength(OutputBuffer, FProcess.Stderr.Read(OutputBuffer[1], Length(OutputBuffer))); if (Pos(FQueryString, OutputBuffer) > 0) then FOnQueryString(OutputBuffer); OutputBuffer:= EmptyStr; end; Continue; end end; SetLength(OutputBuffer, BufferSize); // Waits for the process output SetLength(OutputBuffer, FProcess.Output.Read(OutputBuffer[1], Length(OutputBuffer))); // Cut the incoming stream to lines: FOutputLine:= FOutputLine + OutputBuffer; // Add to the accumulator P:= 1; while GetNextLine(FOutputLine, S, P) do begin if FStop then Exit; // Return the line without the CR/LF characters if Assigned(FOnReadLn) then FOnReadLn(S); // Update progress if Assigned(FOnOperationProgress) then FOnOperationProgress(); end; // Remove the processed lines from accumulator Delete(FOutputLine, 1, P - 1); // Check query string if Length(FOutputLine) > 0 then begin if Assigned(FOnQueryString) and (Pos(FQueryString, FOutputLine) <> 0) then begin FOnQueryString(FOutputLine); FOutputLine:= EmptyStr; end; end; // No more data, break if Length(OutputBuffer) = 0 then Break; until False; if FStop then Exit; if (Length(FOutputLine) <> 0) and Assigned(FOnReadLn) then FOnReadLn(FOutputLine); OutputBuffer:= EmptyStr; if Assigned(FOnReadLn) then FOnReadLn(OutputBuffer); // Empty line to notify DC about process finish end; procedure TExProcess.Stop; begin FStop:= True; FProcess.Terminate(-1); end; procedure TExProcess.SetCmdLine(CommandLine: String); begin FProcess.CommandLine:= CommandLine; end; destructor TExProcess.Destroy; begin FreeAndNil(FProcess); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufileviewnotebook.pas�����������������������������������������������������������0000644�0001750�0000144�00000052706�12653160466�017574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains TFileViewPage and TFileViewNotebook objects. Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) 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 uFileViewNotebook; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, ComCtrls, LMessages, LCLType, LCLVersion, Forms, uFileView, uFilePanelSelect, uDCVersion, DCXmlConfig; type TTabLockState = ( tlsNormal, //<en Default state. tlsPathLocked, //<en Path changes are not allowed. tlsPathResets, //<en Path is reset when activating the tab. tlsDirsInNewTab); //<en Path change opens a new tab. TFileViewNotebook = class; { TFileViewPage } TFileViewPage = class(TTabSheet) private FLockState: TTabLockState; FLockPath: String; //<en Path on which tab is locked {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} FSettingCaption: Boolean; {$ENDIF} FOnActivate: TNotifyEvent; FCurrentTitle: String; FPermanentTitle: String; procedure AssignPage(OtherPage: TFileViewPage); procedure AssignProperties(OtherPage: TFileViewPage); {en Retrieves the file view on this page. } function GetFileView: TFileView; {en Retrieves notebook on which this page is. } function GetNotebook: TFileViewNotebook; {en Frees current file view and assigns a new one. } procedure SetFileView(aFileView: TFileView); procedure SetLockState(NewLockState: TTabLockState); procedure SetPermanentTitle(AValue: String); procedure DoActivate; protected procedure PaintWindow(DC: HDC); override; {$IF (DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)) or DEFINED(MSWINDOWS)} procedure RealSetText(const AValue: TCaption); override; {$ENDIF} procedure WMEraseBkgnd(var Message: TLMEraseBkgnd); message LM_ERASEBKGND; public constructor Create(TheOwner: TComponent); override; {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} function HandleObjectShouldBeVisible: boolean; override; {$ENDIF} function IsActive: Boolean; procedure MakeActive; procedure UpdateTitle; procedure LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); procedure SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); property LockState: TTabLockState read FLockState write SetLockState; property LockPath: String read FLockPath write FLockPath; property FileView: TFileView read GetFileView write SetFileView; property Notebook: TFileViewNotebook read GetNotebook; property PermanentTitle: String read FPermanentTitle write SetPermanentTitle; property CurrentTitle: String read FCurrentTitle; property OnActivate: TNotifyEvent read FOnActivate write FOnActivate; end; { TFileViewNotebook } {$IF (LCL_FULLVERSION >= 1020000)} TFileViewNotebook = class(TPageControl) {$ELSE} TFileViewNotebook = class(TCustomTabControl) {$ENDIF} private FNotebookSide: TFilePanelSelect; FStartDrag: Boolean; FDraggedPageIndex: Integer; FHintPageIndex: Integer; FLastMouseDownTime: TDateTime; FLastMouseDownPageIndex: Integer; function GetActivePage: TFileViewPage; function GetActiveView: TFileView; function GetFileViewOnPage(Index: Integer): TFileView; function GetPage(Index: Integer): TFileViewPage; reintroduce; procedure DragOverEvent(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure DragDropEvent(Sender, Source: TObject; X, Y: Integer); protected procedure DoChange; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure WMEraseBkgnd(var Message: TLMEraseBkgnd); message LM_ERASEBKGND; public constructor Create(ParentControl: TWinControl; NotebookSide: TFilePanelSelect); reintroduce; {$IFDEF MSWINDOWS} {en Removes the rectangle of the pages contents from erasing background to reduce flickering. This is not needed on non-Windows because EraseBackground is not used there. } procedure EraseBackground(DC: HDC); override; procedure WndProc(var Message: TLMessage); override; {$ENDIF} function AddPage: TFileViewPage; function InsertPage(Index: Integer): TFileViewPage; reintroduce; function NewEmptyPage: TFileViewPage; function NewPage(CloneFromPage: TFileViewPage): TFileViewPage; function NewPage(CloneFromView: TFileView): TFileViewPage; procedure RemovePage(Index: Integer); reintroduce; procedure RemovePage(var aPage: TFileViewPage); procedure DestroyAllPages; procedure ActivatePrevTab; procedure ActivateNextTab; property ActivePage: TFileViewPage read GetActivePage; property ActiveView: TFileView read GetActiveView; property DoubleClickPageIndex: Integer read FLastMouseDownPageIndex; property Page[Index: Integer]: TFileViewPage read GetPage; property View[Index: Integer]: TFileView read GetFileViewOnPage; default; property Side: TFilePanelSelect read FNotebookSide; published property OnDblClick; property OnChange; property OnMouseDown; property OnMouseUp; end; implementation uses LCLIntf, LazUTF8, DCStrUtils, uGlobs, uArchiveFileSource {$IF DEFINED(LCLGTK2)} , Glib2, Gtk2 {$ENDIF} {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} , qt4, qtwidgets {$ENDIF} {$IF DEFINED(MSWINDOWS)} , win32proc, Windows, Messages {$ENDIF} ; // -- TFileViewPage ----------------------------------------------------------- procedure TFileViewPage.AssignPage(OtherPage: TFileViewPage); begin AssignProperties(OtherPage); SetFileView(nil); // Remove previous view. OtherPage.FileView.Clone(Self); end; procedure TFileViewPage.AssignProperties(OtherPage: TFileViewPage); begin FLockState := OtherPage.FLockState; FLockPath := OtherPage.FLockPath; FCurrentTitle := OtherPage.FCurrentTitle; FPermanentTitle := OtherPage.FPermanentTitle; end; constructor TFileViewPage.Create(TheOwner: TComponent); begin FLockState := tlsNormal; {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} FSettingCaption := False; {$ENDIF} inherited Create(TheOwner); end; {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} // On QT after handle is created but before the widget is visible // setting caption fails unless the notebook and all its parents are // set as Visible and the current page is the one of which we set caption. // Overriding HandleObjectShouldBeVisible is a indirect workaround for that // (see TQtPage.getIndex.CanReturnIndex). // QT 4.6 or higher needed for this workaround. function TFileViewPage.HandleObjectShouldBeVisible: boolean; var AParent: QTabWidgetH; begin if not HandleAllocated then Result := inherited else begin AParent := TQtPage(Handle).getTabWidget; Result := (FSettingCaption and ((AParent = nil) or not QWidget_isVisible(AParent))) or inherited; end; end; {$ENDIF} {$IF (DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)) or DEFINED(MSWINDOWS)} procedure TFileViewPage.RealSetText(const AValue: TCaption); begin {$IF DEFINED(LCLQT)} FSettingCaption := True; {$ENDIF} inherited; {$IF DEFINED(MSWINDOWS)} if HandleAllocated then LCLControlSizeNeedsUpdate(Parent, True); {$ENDIF} {$IF DEFINED(LCLQT)} FSettingCaption := False; {$ENDIF} end; {$ENDIF} function TFileViewPage.IsActive: Boolean; begin Result := Assigned(Notebook) and (Notebook.PageIndex = PageIndex); end; procedure TFileViewPage.LoadConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); begin FLockState := TTabLockState(AConfig.GetValue(ANode, 'Options', Integer(tlsNormal))); FLockPath := AConfig.GetValue(ANode, 'LockPath', ''); FPermanentTitle := AConfig.GetValue(ANode, 'Title', ''); end; procedure TFileViewPage.SaveConfiguration(AConfig: TXmlConfig; ANode: TXmlNode); begin AConfig.AddValueDef(ANode, 'Options', Integer(FLockState), Integer(tlsNormal)); AConfig.AddValueDef(ANode, 'LockPath', FLockPath, ''); AConfig.AddValueDef(ANode, 'Title', FPermanentTitle, ''); end; procedure TFileViewPage.MakeActive; var aFileView: TFileView; begin if Assigned(Notebook) then begin Notebook.PageIndex := PageIndex; aFileView := FileView; if Assigned(aFileView) then aFileView.SetFocus; end; end; procedure TFileViewPage.PaintWindow(DC: HDC); begin // Don't paint anything. end; procedure TFileViewPage.UpdateTitle; {$IFDEF MSWINDOWS} function LocalGetDriveName(A:string):string; begin result:=LowerCase(ExtractFileDrive(A)); if length(result)>2 then // Server path name are shown simply like \: in TC so let's do the same for those who get used to that. result:='\:' else if Lowercase(A) = (result+DirectorySeparator) then result:=''; //To avoid to get "c:C:" :-) end; {$ENDIF} var NewCaption: String; begin if Assigned(FileView) then begin if FPermanentTitle <> '' then begin NewCaption := FPermanentTitle; FCurrentTitle := FPermanentTitle; end else begin if (FileView.FileSource is TArchiveFileSource) and (FileView.FileSource.IsPathAtRoot(FileView.CurrentPath)) then begin with (FileView.FileSource as TArchiveFileSource) do NewCaption := ExtractFileName(ArchiveFileName); end else begin NewCaption := FileView.CurrentPath; if NewCaption <> '' then NewCaption := GetLastDir(NewCaption); end; FCurrentTitle := NewCaption; end; {$IFDEF MSWINDOWS} if tb_show_drive_letter in gDirTabOptions then begin if (FileView.FileSource is TArchiveFileSource) then with (FileView.FileSource as TArchiveFileSource) do NewCaption := LocalGetDriveName(ArchiveFileName) + NewCaption else NewCaption := LocalGetDriveName(FileView.CurrentPath) + NewCaption; end; {$ENDIF} if (FLockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab]) and (tb_show_asterisk_for_locked in gDirTabOptions) then NewCaption := '*' + NewCaption; if (tb_text_length_limit in gDirTabOptions) and (UTF8Length(NewCaption) > gDirTabLimit) then NewCaption := UTF8Copy(NewCaption, 1, gDirTabLimit) + '...'; {$IF DEFINED(LCLGTK2)} Caption := NewCaption; {$ELSE} Caption := StringReplace(NewCaption, '&', '&&', [rfReplaceAll]); {$ENDIF} end; end; procedure TFileViewPage.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin Message.Result := 1; end; function TFileViewPage.GetFileView: TFileView; begin if ComponentCount > 0 then Result := TFileView(Components[0]) else Result := nil; end; procedure TFileViewPage.SetFileView(aFileView: TFileView); var aComponent: TComponent; begin if ComponentCount > 0 then begin aComponent := Components[0]; aComponent.Free; end; if Assigned(aFileView) then begin aFileView.Parent := Self; end; end; function TFileViewPage.GetNotebook: TFileViewNotebook; begin Result := Parent as TFileViewNotebook; end; procedure TFileViewPage.SetLockState(NewLockState: TTabLockState); begin if FLockState = NewLockState then Exit; if NewLockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab] then begin LockPath := FileView.CurrentPath; if (FLockState <> tlsNormal) or (Length(FPermanentTitle) = 0) then FPermanentTitle := GetLastDir(LockPath); end else begin LockPath := ''; if not (tb_keep_renamed_when_back_normal in gDirTabOptions) then FPermanentTitle := ''; end; FLockState := NewLockState; UpdateTitle; end; procedure TFileViewPage.SetPermanentTitle(AValue: String); begin if FPermanentTitle = AValue then Exit; FPermanentTitle := AValue; UpdateTitle; end; procedure TFileViewPage.DoActivate; begin if Assigned(FOnActivate) then FOnActivate(Self); end; // -- TFileViewNotebook ------------------------------------------------------- constructor TFileViewNotebook.Create(ParentControl: TWinControl; NotebookSide: TFilePanelSelect); begin PageClass := TFileViewPage; inherited Create(ParentControl); ControlStyle := ControlStyle + [csNoFocus]; Parent := ParentControl; TabStop := False; ShowHint := True; FHintPageIndex := -1; FNotebookSide := NotebookSide; FStartDrag := False; {$IFDEF MSWINDOWS} // The pages contents are removed from drawing background in EraseBackground. // But double buffering could be enabled to eliminate flickering of drawing // the tabs buttons themselves. But currently there's a bug where the buffer // bitmap is temporarily drawn in different position, probably at (0,0) and // not where pages contents start (after applying TCM_ADJUSTRECT). //DoubleBuffered := True; {$ENDIF} OnDragOver := @DragOverEvent; OnDragDrop := @DragDropEvent; end; function TFileViewNotebook.GetActivePage: TFileViewPage; begin if PageIndex <> -1 then Result := GetPage(PageIndex) else Result := nil; end; function TFileViewNotebook.GetActiveView: TFileView; var APage: TFileViewPage; begin APage := GetActivePage; if Assigned(APage) then Result := APage.FileView else Result := nil; end; function TFileViewNotebook.GetFileViewOnPage(Index: Integer): TFileView; var APage: TFileViewPage; begin APage := GetPage(Index); Result := APage.FileView; end; function TFileViewNotebook.GetPage(Index: Integer): TFileViewPage; begin Result := TFileViewPage(CustomPage(Index)); end; function TFileViewNotebook.AddPage: TFileViewPage; begin Result := InsertPage(PageCount); end; function TFileViewNotebook.InsertPage(Index: Integer): TFileViewPage; begin Tabs.Insert(Index, ''); Result := GetPage(Index); ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; end; function TFileViewNotebook.NewEmptyPage: TFileViewPage; begin if tb_open_new_near_current in gDirTabOptions then Result := InsertPage(PageIndex + 1) else Result := InsertPage(PageCount); end; function TFileViewNotebook.NewPage(CloneFromPage: TFileViewPage): TFileViewPage; begin if Assigned(CloneFromPage) then begin Result := NewEmptyPage; Result.AssignPage(CloneFromPage); end else Result := nil; end; function TFileViewNotebook.NewPage(CloneFromView: TFileView): TFileViewPage; begin if Assigned(CloneFromView) then begin Result := NewEmptyPage; CloneFromView.Clone(Result); end else Result := nil; end; procedure TFileViewNotebook.RemovePage(Index: Integer); begin {$IFDEF LCLGTK2} // If removing currently active page, switch to another page first. // Otherwise there can be no page selected. if (PageIndex = Index) and (PageCount > 1) then begin if Index = PageCount - 1 then Page[Index - 1].MakeActive else Page[Index + 1].MakeActive; end; {$ENDIF} Page[Index].Free; ShowTabs:= ((PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; {$IFNDEF LCLGTK2} // Force-activate current page. if PageIndex <> -1 then Page[PageIndex].MakeActive; {$ENDIF} end; procedure TFileViewNotebook.RemovePage(var aPage: TFileViewPage); begin RemovePage(aPage.PageIndex); aPage := nil; end; procedure TFileViewNotebook.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin inherited WMEraseBkgnd(Message); // Always set as handled otherwise if not handled Windows will draw background // with hbrBackground brush of the window class. This might cause flickering // because later background will be again be erased but with TControl.Brush. // This is not actually needed on non-Windows because WMEraseBkgnd is not used there. Message.Result := 1; end; procedure TFileViewNotebook.DestroyAllPages; var tPage:TFileViewPage; begin while PageCount > 0 do begin tPage:=Page[0]; if tPage<>nil then FreeAndNil(tPage); end; end; procedure TFileViewNotebook.ActivatePrevTab; begin if PageIndex = 0 then Page[PageCount - 1].MakeActive else Page[PageIndex - 1].MakeActive; end; procedure TFileViewNotebook.ActivateNextTab; begin if PageIndex = PageCount - 1 then Page[0].MakeActive else Page[PageIndex + 1].MakeActive; end; procedure TFileViewNotebook.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); {$IF DEFINED(LCLGTK2)} var ArrowWidth: Integer; arrow_spacing: gint = 0; scroll_arrow_hlength: gint = 16; {$ENDIF} begin inherited; if Button = mbLeft then begin FDraggedPageIndex := TabIndexAtClientPos(Classes.Point(X, Y)); FStartDrag := (FDraggedPageIndex <> -1); end; // Emulate double click if (Button = mbLeft) and Assigned(OnDblClick) then begin if ((Now - FLastMouseDownTime) > ((1/86400)*(GetDoubleClickTime/1000))) then begin FLastMouseDownTime:= Now; FLastMouseDownPageIndex:= FDraggedPageIndex; end else if (FDraggedPageIndex = FLastMouseDownPageIndex) then begin {$IF DEFINED(LCLGTK2)} gtk_widget_style_get(PGtkWidget(Self.Handle), 'arrow-spacing', @arrow_spacing, 'scroll-arrow-hlength', @scroll_arrow_hlength, nil); ArrowWidth:= arrow_spacing + scroll_arrow_hlength; if (X > ArrowWidth) and (X < ClientWidth - ArrowWidth) then {$ENDIF} OnDblClick(Self); FStartDrag:= False; FLastMouseDownTime:= 0; FLastMouseDownPageIndex:= -1; end; end; end; procedure TFileViewNotebook.MouseMove(Shift: TShiftState; X, Y: Integer); var ATabIndex: Integer; begin inherited; if ShowHint then begin ATabIndex := TabIndexAtClientPos(Classes.Point(X, Y)); if (ATabIndex >= 0) and (ATabIndex <> FHintPageIndex) then begin FHintPageIndex := ATabIndex; Application.CancelHint; if (ATabIndex <> PageIndex) and (Length(Page[ATabIndex].LockPath) <> 0) then Hint := Page[ATabIndex].LockPath else Hint := View[ATabIndex].CurrentPath; end; end; if FStartDrag then begin FStartDrag := False; BeginDrag(False); end; end; procedure TFileViewNotebook.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; FStartDrag := False; end; procedure TFileViewNotebook.DragOverEvent(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var ATabIndex: Integer; begin if (Source is TFileViewNotebook) and (Sender is TFileViewNotebook) then begin ATabIndex := TabIndexAtClientPos(Classes.Point(X, Y)); Accept := (Source <> Sender) or ((ATabIndex <> -1) and (ATabIndex <> FDraggedPageIndex)); end else Accept := False; end; {$IFDEF MSWINDOWS} procedure TFileViewNotebook.EraseBackground(DC: HDC); var ARect: TRect; SaveIndex: Integer; Clip: Integer; begin if HandleAllocated and (DC <> 0) then begin ARect := Classes.Rect(0, 0, Width, Height); Windows.TabCtrl_AdjustRect(Handle, False, ARect); SaveIndex := SaveDC(DC); Clip := ExcludeClipRect(DC, ARect.Left, ARect.Top, ARect.Right, ARect.Bottom); if Clip <> NullRegion then begin ARect := Classes.Rect(0, 0, Width, Height); FillRect(DC, ARect, HBRUSH(Brush.Reference.Handle)); end; RestoreDC(DC, SaveIndex); end; end; procedure TFileViewNotebook.WndProc(var Message: TLMessage); begin inherited WndProc(Message); if Message.Msg = TCM_ADJUSTRECT then begin if Message.WParam = 0 then PRect(Message.LParam)^.Left := PRect(Message.LParam)^.Left - 2 else begin PRect(Message.LParam)^.Left := PRect(Message.LParam)^.Left + 2; end; end; end; {$ENDIF} procedure TFileViewNotebook.DragDropEvent(Sender, Source: TObject; X, Y: Integer); var SourceNotebook: TFileViewNotebook; ATabIndex: Integer; ANewPage, DraggedPage: TFileViewPage; begin if (Source is TFileViewNotebook) and (Sender is TFileViewNotebook) then begin ATabIndex := TabIndexAtClientPos(Classes.Point(X, Y)); if Source = Sender then begin // Move within the same panel. if ATabIndex <> -1 then Tabs.Move(FDraggedPageIndex, ATabIndex); end else begin // Move page between panels. SourceNotebook := (Source as TFileViewNotebook); DraggedPage := SourceNotebook.Page[SourceNotebook.FDraggedPageIndex]; if ATabIndex = -1 then ATabIndex := PageCount; // Create a clone of the page in the panel. ANewPage := InsertPage(ATabIndex); ANewPage.AssignPage(DraggedPage); ANewPage.MakeActive; if (ssShift in GetKeyShiftState) and (SourceNotebook.PageCount > 1) then begin // Remove page from source panel. SourceNotebook.RemovePage(DraggedPage); end; end; end; end; procedure TFileViewNotebook.DoChange; begin inherited DoChange; ActivePage.DoActivate; end; end. ����������������������������������������������������������doublecmd-0.7.1/src/fsetfileproperties.lfm����������������������������������������������������������0000644�0001750�0000144�00000065165�12666540554�017754� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSetFileProperties: TfrmSetFileProperties Left = 477 Height = 593 Top = 127 Width = 309 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Change attributes' ClientHeight = 593 ClientWidth = 309 OnCreate = FormCreate Position = poScreenCenter LCLVersion = '1.4.3.0' object btnOK: TBitBtn AnchorSideTop.Control = chkRecursive AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 95 Height = 26 Top = 518 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 10 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 4 end object btnCancel: TBitBtn AnchorSideTop.Control = btnOK AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 201 Height = 26 Top = 518 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 BorderSpacing.Bottom = 10 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 5 end object chkRecursive: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbUnixAttributes AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 493 Width = 128 BorderSpacing.Left = 12 BorderSpacing.Top = 8 Caption = 'Including subfolders' TabOrder = 3 end object gbTimeSamp: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 113 Top = 6 Width = 293 AutoSize = True BorderSpacing.Around = 6 Caption = 'Timestamp properties' ClientHeight = 93 ClientWidth = 289 TabOrder = 0 object DatesPanel: TPanel AnchorSideLeft.Control = ChecksPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbTimeSamp AnchorSideRight.Control = gbTimeSamp AnchorSideRight.Side = asrBottom Left = 96 Height = 81 Top = 6 Width = 193 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 81 ClientWidth = 193 TabOrder = 1 object ZVCreationDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = DatesPanel AnchorSideRight.Control = DatesPanel AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 0 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 0 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVCreationDateTimeChange end object ZVLastWriteDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = ZVCreationDateTime AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 29 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 1 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVLastWriteDateTimeChange end object ZVLastAccessDateTime: TDateTimePicker AnchorSideLeft.Control = DatesPanel AnchorSideTop.Control = ZVLastWriteDateTime AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 58 Width = 154 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 2 BorderSpacing.Top = 6 Enabled = False TrailingSeparator = False TextForNullDate = ' ' LeadingZeros = True Kind = dtkDateTime TimeFormat = tf24 TimeDisplay = tdHMSMs DateMode = dmComboBox Date = 40608 Time = 0.0684693287039408 UseDefaultSeparators = True OnChange = ZVLastAccessDateTimeChange end object btnLastWriteTime: TSpeedButton AnchorSideLeft.Control = ZVLastWriteDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVLastWriteDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 21 Top = 30 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnLastWriteTimeClick end object btnCreationTime: TSpeedButton AnchorSideLeft.Control = ZVCreationDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVCreationDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 20 Top = 1 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnCreationTimeClick end object btnLastAccessTime: TSpeedButton AnchorSideLeft.Control = ZVLastAccessDateTime AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVLastAccessDateTime AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 160 Height = 21 Top = 59 Width = 23 BorderSpacing.Left = 6 BorderSpacing.Right = 10 Enabled = False Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000D5D5D40000000000FFFFFF00D1D5D4D7B2B2B3FFB3B4B4FFB3B4B4FFCACE CDFFC7C4C51900000000D4D4D400000000000000000000000000000000000000 000000000000E2E2E19D898B89D7A6A9A7FFCCCCCCFFD5DCDEFFCFD0CFFFB5B8 B7FE8E9291F9CCCCCDD900000000C0C1C1000000000000000000000000000000 0000CACAC964909392FFC2C5C3FFF4F6F6FFFAFEFEFFC27443FFFBFFFFFFF5F8 F9FFDDDFDEFF8B8E8CFDBBBCBCE6FFFFFF050000000000000000C3C3C3000000 0000A1A2A1FFCACCCCFEFCFEFFFFC98C64FFFDFFFFFFF3E5DCFFF8FCFEFFCB8E 67FFF0F8FAFFEAEAEAFF989A9AFF91939325C3C3C30100000000FFFFFF05BFBF BFE6A3A7A6FDFDFFFFFFD7CABEFFEDF6F7FFEDEFEEFFF1F3F2FFEDEFEEFFF4FC FEFFE7E6E1FFF7F4F1FFD0D1D0FEB1B2B1FFFFFFFF1900000000D0D1D1359395 94FFDDE0DFFFF0F4F3FFD3C7BBFFCDD1D0FFC9CECCFFE7EBE9FFECF0EEFFEBF0 EDFFEBEBE6FFE2E2DEFFF0F2F0FF949795FECECFCFD000000000CAC9C9338C90 8FFFEDEAE6FFD2C0B2FFC5CACAFFBFC4C2FFC4C8C8FFC3C6C5FF767778FF7677 78FFB6B9BAFFD4C9BDFFEADCD1FF969B99FFC8C7C8CB00000000CAC9C9338C90 8EFFECE9E6FFCABAACFFC1C7C6FFC5CBC9FFD2D8D6FF1C1D1DFF929495FF9C9F 9EFFCFD4D3FFD2C6BCFFECDED4FF959A98FFC8C8C8CB00000000D0D1D1359395 94FFE0E1E0FFE0E4E4FFC4B7ACFFBEC3C2FFCBCFCEFF1F1F1FFFB8BBBCFFCFD4 D3FFE5E3DFFFDFDEDAFFE6E9E9FF959796FECECFCFD000000000FFFFFF05BFBF BFE6A1A6A4FDF6F9FAFFCBBFB2FFC9D4D5FFC3C8C6FF1B1B1BFFBABCBDFFD6E0 E1FFDFDEDAFFF7F4F0FFD2D3D2FEB1B2B2FFFFFFFF1900000000C3C3C3000000 00009FA2A1FFD0D2D2FEF5F8F8FFCA8D66FFD8E3E4FF1A1D1EFFC4C8CAFFC68A 62FFEDF5F7FFE9EAEAFF979999FF92949325C3C3C30100000000000000000000 0000C9C9C964909392FFC0C2C1FFEFF3F3FFFCFEFFFFA0633BFFFAFFFFFFF2F5 F5FFDEDFDEFF919492FDBABBBAE6FFFFFF050000000000000000000000000000 000000000000E2E1E19D8E9090D7AAACABFFC6C9C8FFD2DADCFFCED0CEFFB6B9 B8FE909492F9CCCCCCD900000000C0C1C0000000000000000000000000000000 0000D5D4D40000000000FFFFFF00CFD2D1D7C0C5C3FFBFC4C2FF8D9390FFD2D5 D4FFC7C3C41900000000D4D4D400000000000000000000000000000000000000 0000000000000000000000000000E8ECEBCF777D7AFFC2C7C5FF7C827FFFCDD1 D0FF000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000E8EBEB297E8481337B827E3383898633CED3 D137000000000000000000000000000000000000000000000000 } OnClick = btnLastAccessTimeClick end end object ChecksPanel: TPanel AnchorSideTop.Control = DatesPanel AnchorSideBottom.Control = DatesPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 81 Top = 6 Width = 78 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 81 ClientWidth = 78 TabOrder = 0 object chkCreationTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Control = ChecksPanel Left = 6 Height = 19 Top = 6 Width = 64 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Created:' Enabled = False OnChange = chkCreationTimeChange TabOrder = 0 end object chkLastWriteTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Control = ChecksPanel AnchorSideTop.Side = asrCenter Left = 6 Height = 19 Top = 31 Width = 71 BorderSpacing.Left = 6 Caption = 'Modified:' Enabled = False OnChange = chkLastWriteTimeChange TabOrder = 1 end object chkLastAccessTime: TCheckBox AnchorSideLeft.Control = ChecksPanel AnchorSideTop.Side = asrCenter AnchorSideBottom.Control = ChecksPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 19 Top = 56 Width = 72 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Bottom = 6 Caption = 'Accessed:' Enabled = False OnChange = chkLastAccessTimeChange TabOrder = 2 end end end object gbWinAttributes: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbTimeSamp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 97 Top = 125 Width = 297 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Attributes' ClientHeight = 77 ClientWidth = 293 TabOrder = 1 Visible = False object chkSystem: TCheckBox AnchorSideLeft.Control = chkHidden AnchorSideTop.Control = chkReadOnly Left = 171 Height = 19 Top = 31 Width = 58 AllowGrayed = True BorderSpacing.Bottom = 6 Caption = 'System' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 3 end object chkHidden: TCheckBox AnchorSideTop.Control = chkArchive Left = 171 Height = 19 Top = 6 Width = 59 AllowGrayed = True Anchors = [akTop] Caption = 'Hidden' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 2 end object chkArchive: TCheckBox AnchorSideLeft.Control = gbWinAttributes AnchorSideTop.Control = gbWinAttributes Left = 6 Height = 19 Top = 6 Width = 60 AllowGrayed = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Archive' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 0 end object chkReadOnly: TCheckBox AnchorSideLeft.Control = chkArchive AnchorSideTop.Control = chkArchive AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 31 Width = 72 AllowGrayed = True BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = 'Read only' OnClick = chkChangeAttrClick State = cbGrayed TabOrder = 1 end object lblAttrInfo: TLabel AnchorSideLeft.Control = chkReadOnly AnchorSideTop.Control = chkReadOnly AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 17 Top = 56 Width = 189 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = '(gray field means unchanged value)' ParentColor = False end end object gbUnixAttributes: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbWinAttributes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 257 Top = 228 Width = 297 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Attributes' ClientHeight = 237 ClientWidth = 293 TabOrder = 2 Visible = False object lblRead: TLabel AnchorSideLeft.Control = cbReadOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = gbUnixAttributes Left = 94 Height = 15 Top = 0 Width = 26 Caption = 'Read' ParentColor = False end object lblWrite: TLabel AnchorSideLeft.Control = cbWriteOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead Left = 168 Height = 15 Top = 0 Width = 28 Caption = 'Write' ParentColor = False end object lblExec: TLabel AnchorSideLeft.Control = cbExecOwner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead Left = 235 Height = 15 Top = 0 Width = 40 Caption = 'Execute' ParentColor = False end object cbExecOwner: TCheckBox AnchorSideTop.Control = cbReadOwner Left = 245 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] OnClick = cbChangeModeClick State = cbGrayed TabOrder = 2 end object cbWriteOwner: TCheckBox AnchorSideTop.Control = cbReadOwner Left = 172 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] OnClick = cbChangeModeClick State = cbGrayed TabOrder = 1 end object cbReadOwner: TCheckBox AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblRead AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 21 Width = 20 AllowGrayed = True Anchors = [akTop] BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 0 end object lblAttrOwnerStr: TLabel AnchorSideLeft.Control = gbUnixAttributes AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 23 Width = 35 BorderSpacing.Left = 7 Caption = 'Owner' ParentColor = False end object lblAttrGroupStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 48 Width = 33 Caption = 'Group' ParentColor = False end object cbReadGroup: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = cbReadOwner AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 46 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 3 end object cbWriteGroup: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbReadGroup Left = 172 Height = 19 Top = 46 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 4 end object cbExecGroup: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbReadGroup Left = 245 Height = 19 Top = 46 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 5 end object lblAttrOtherStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 73 Width = 30 Caption = 'Other' ParentColor = False end object cbReadOther: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = cbReadGroup AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 71 Width = 20 AllowGrayed = True BorderSpacing.Top = 6 OnClick = cbChangeModeClick State = cbGrayed TabOrder = 6 end object cbWriteOther: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = cbReadOther Left = 172 Height = 19 Top = 71 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 7 end object cbExecOther: TCheckBox AnchorSideLeft.Control = cbExecOwner AnchorSideTop.Control = cbReadOther Left = 245 Height = 19 Top = 71 Width = 20 AllowGrayed = True OnClick = cbChangeModeClick State = cbGrayed TabOrder = 8 end object Bevel1: TBevel AnchorSideTop.Control = cbReadOther AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 4 Height = 4 Top = 96 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object cbSticky: TCheckBox AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 131 Width = 51 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'Sticky' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 11 end object cbSgid: TCheckBox AnchorSideLeft.Control = cbWriteOwner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 172 Height = 19 Top = 106 Width = 45 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SGID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 10 end object cbSuid: TCheckBox AnchorSideLeft.Control = cbReadOwner AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom Left = 97 Height = 19 Top = 106 Width = 45 AllowGrayed = True BorderSpacing.Top = 6 Caption = 'SUID' OnClick = cbChangeModeClick State = cbGrayed TabOrder = 9 end object lblAttrBitsStr: TLabel AnchorSideLeft.Control = lblAttrOwnerStr AnchorSideTop.Control = cbSuid AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 108 Width = 22 Caption = 'Bits:' ParentColor = False end object Bevel2: TBevel AnchorSideTop.Control = lblModeInfo AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 4 Height = 4 Top = 177 Width = 289 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object lblOctal: TLabel AnchorSideLeft.Control = lblAttrOtherStr AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrCenter Left = 7 Height = 15 Top = 191 Width = 31 Caption = 'Octal:' FocusControl = edtOctal ParentColor = False end object edtOctal: TEdit AnchorSideLeft.Control = cbSuid AnchorSideTop.Control = Bevel2 AnchorSideTop.Side = asrBottom Left = 97 Height = 23 Top = 187 Width = 80 BorderSpacing.Top = 6 MaxLength = 4 OnKeyPress = edtOctalKeyPress OnKeyUp = edtOctalKeyUp TabOrder = 12 end object lblAttrTextStr: TLabel AnchorSideLeft.Control = lblAttrOtherStr AnchorSideTop.Control = edtOctal AnchorSideTop.Side = asrBottom Left = 7 Height = 15 Top = 216 Width = 24 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = 'Text:' ParentColor = False end object lblAttrText: TLabel AnchorSideLeft.Control = edtOctal AnchorSideTop.Control = lblAttrTextStr AnchorSideTop.Side = asrCenter Left = 97 Height = 15 Top = 216 Width = 55 BorderSpacing.Bottom = 6 Caption = '-----------' Font.Color = clBlack ParentColor = False ParentFont = False end object lblModeInfo: TLabel AnchorSideLeft.Control = lblAttrBitsStr AnchorSideTop.Control = cbSticky AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 7 Height = 15 Top = 156 Width = 189 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 Caption = '(gray field means unchanged value)' ParentColor = False end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717736�014606� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfiletypescolors.lrt����������������������������������������������0000644�0001750�0000144�00000001224�12020403374�022306� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION=File types colors (sort by drag&&drop) TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION=Category &name: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION=Category &mask: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION=Category co&lor: TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION=Category a&ttributes: TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION=A&dd TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION=D&elete TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION=>> TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION=A&pply TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT=Template... ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolsdiffer.lrt��������������������������������������������������0000644�0001750�0000144�00000000155�12645167345�021424� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSDIFFER.RGRESULTINGFRAMEPOSITIONAFTERCOMPARE.CAPTION=Position of frame panel after the comparison: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolbase.lrt�����������������������������������������������������0000644�0001750�0000144�00000000733�12365151656�020713� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION=&Path to program to execute TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION=A&dditional parameters TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION=&Keep terminal window open after executing program TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION=&Execute in terminal TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION=&Use external program TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT=Some functions to select appropriate path �������������������������������������doublecmd-0.7.1/src/frames/foptionsquicksearchfilter.pas��������������������������������������������0000644�0001750�0000144�00000006607�12470100066�022565� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Quick search/filter options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsQuickSearchFilter; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsQuickSearchFilter } TfrmOptionsQuickSearchFilter = class(TOptionsEditor) cbExactBeginning: TCheckBox; cbExactEnding: TCheckBox; cgpOptions: TCheckGroup; gbExactNameMatch: TGroupBox; rgpSearchCase: TRadioGroup; rgpSearchItems: TRadioGroup; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng, fQuickSearch; const OPTION_AUTOHIDE_POSITION = 0; OPTION_SAVE_SESSION_MODIFICATIONS = 1; { TfrmOptionsQuickSearchFilter } class function TfrmOptionsQuickSearchFilter.GetIconIndex: Integer; begin Result := 12; end; class function TfrmOptionsQuickSearchFilter.GetTitle: String; begin Result := rsOptionsEditorQuickSearch; end; procedure TfrmOptionsQuickSearchFilter.Init; begin // Copy localized strings to each combo box. ParseLineToList(rsOptSearchItems, rgpSearchItems.Items); ParseLineToList(rsOptSearchCase, rgpSearchCase.Items); ParseLineToList(rsOptSearchOpt, cgpOptions.Items); end; procedure TfrmOptionsQuickSearchFilter.Load; begin cbExactBeginning.Checked := qsmBeginning in gQuickSearchOptions.Match; cbExactEnding.Checked := qsmEnding in gQuickSearchOptions.Match; rgpSearchItems.ItemIndex := Integer(gQuickSearchOptions.Items); rgpSearchCase.ItemIndex := Integer(gQuickSearchOptions.SearchCase); cgpOptions.Checked[OPTION_AUTOHIDE_POSITION] := gQuickFilterAutoHide; cgpOptions.Checked[OPTION_SAVE_SESSION_MODIFICATIONS] := gQuickFilterSaveSessionModifications; end; function TfrmOptionsQuickSearchFilter.Save: TOptionsEditorSaveFlags; begin Result := []; if cbExactBeginning.Checked then Include(gQuickSearchOptions.Match, qsmBeginning) else Exclude(gQuickSearchOptions.Match, qsmBeginning); if cbExactEnding.Checked then Include(gQuickSearchOptions.Match, qsmEnding) else Exclude(gQuickSearchOptions.Match, qsmEnding); gQuickSearchOptions.Items := TQuickSearchItems(rgpSearchItems.ItemIndex); gQuickSearchOptions.SearchCase := TQuickSearchCase(rgpSearchCase.ItemIndex); gQuickFilterAutoHide := cgpOptions.Checked[OPTION_AUTOHIDE_POSITION]; gQuickFilterSaveSessionModifications := cgpOptions.Checked[OPTION_SAVE_SESSION_MODIFICATIONS]; end; end. �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsquicksearchfilter.lfm��������������������������������������������0000644�0001750�0000144�00000010567�12470100066�022560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsQuickSearchFilter: TfrmOptionsQuickSearchFilter Height = 354 Width = 702 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 354 ClientWidth = 702 DesignLeft = 418 DesignTop = 232 object gbExactNameMatch: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 68 Top = 6 Width = 690 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Exact name match' ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 4 ClientHeight = 50 ClientWidth = 686 TabOrder = 0 object cbExactBeginning: TCheckBox AnchorSideLeft.Control = gbExactNameMatch AnchorSideTop.Control = gbExactNameMatch Left = 10 Height = 19 Top = 6 Width = 305 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&Beginning (name must start with first typed character)' TabOrder = 0 end object cbExactEnding: TCheckBox AnchorSideLeft.Control = cbExactBeginning AnchorSideTop.Control = cbExactBeginning AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = gbExactNameMatch AnchorSideBottom.Side = asrBottom Left = 10 Height = 15 Top = 29 Width = 311 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Bottom = 6 Caption = 'En&ding (last character before a typed dot . must match)' TabOrder = 1 end end object rgpSearchItems: TRadioGroup[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbExactNameMatch AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 87 Top = 74 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Search for these items' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 69 ClientWidth = 686 Items.Strings = ( 'Files' 'Directories' 'Files and Directories' ) TabOrder = 1 end object rgpSearchCase: TRadioGroup[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = rgpSearchItems AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 68 Top = 161 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Search case' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 686 Items.Strings = ( 'Sensitive' 'Insensitive' ) TabOrder = 2 end object cgpOptions: TCheckGroup[3] AnchorSideLeft.Control = Owner AnchorSideTop.Control = rgpSearchCase AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 68 Top = 229 Width = 690 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True Caption = 'Options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 50 ClientWidth = 686 Items.Strings = ( 'Hide filter panel when not focused' 'Keep saving setting modifications for next session' ) TabOrder = 3 Data = { 020000000202 } end end �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsframe.lfm��������������������������������������������������������0000644�0001750�0000144�00000000250�12656270711�020141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object OptionsEditor: TOptionsEditor Left = 0 Height = 240 Top = 0 Width = 320 LCLVersion = '1.4.4.0' TabOrder = 0 DesignLeft = 181 DesignTop = 138 end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsbriefview.lrt����������������������������������������������������0000644�0001750�0000144�00000000651�12513776740�021066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSBRIEFVIEW.GBSHOWFILEEXT.CAPTION=Show file extensions TFRMOPTIONSBRIEFVIEW.RBDIRECTLY.CAPTION=di&rectly after filename TFRMOPTIONSBRIEFVIEW.RBALIGNED.CAPTION=ali&gned (with Tab) TFRMOPTIONSBRIEFVIEW.GBCOLUMNS.CAPTION=Columns size TFRMOPTIONSBRIEFVIEW.RBUSEAUTOSIZE.CAPTION=Auto TFRMOPTIONSBRIEFVIEW.RBUSEFIXEDWIDTH.CAPTION=Fixed columns width TFRMOPTIONSBRIEFVIEW.RBUSEFIXEDCOUNT.CAPTION=Fixed columns count ���������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslayout.lrt�������������������������������������������������������0000644�0001750�0000144�00000002664�12020403374�020406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION= Screen layout TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION=Show &main menu TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION=Show &button bar TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION=Show &drive buttons TFRMOPTIONSLAYOUT.CBSHOWDRIVESLISTBUTTON.CAPTION=Show drives list bu&tton TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION=Show current director&y TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION=S&how tabstop header TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION=Show &status bar TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION=Show command l&ine TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION=Show function &key buttons TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION=&Flat buttons TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION=Show two drive button bars (fi&xed width, above file windows) TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION=Sho&w folder tabs TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION=Flat i&nterface TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION=Flat b&uttons TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION=Show lo&g window TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION=Show te&rminal window TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION=Show fr&ee space indicator on drive label TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION=Show common progress in menu bar TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION=Show panel of operation in background TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION=Show free s&pace label TFRMOPTIONSLAYOUT.CBSHOWSHORTDRIVEFREESPACE.CAPTION=Show short free space &label ����������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsautorefresh.lfm��������������������������������������������������0000644�0001750�0000144�00000005662�12020403374�021376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsAutoRefresh: TfrmOptionsAutoRefresh Height = 228 Width = 501 ClientHeight = 228 ClientWidth = 501 DesignTop = 27 object gbAutoRefreshEnable: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 6 Width = 489 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Refresh file list' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 3 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 59 ClientWidth = 485 TabOrder = 0 object cbWatchFileNameChange: TCheckBox Left = 10 Height = 23 Top = 5 Width = 309 Caption = 'When &files are created, deleted or renamed' OnChange = OnAutoRefreshOptionChanged TabOrder = 0 end object cbWatchAttributesChange: TCheckBox Left = 10 Height = 23 Top = 31 Width = 309 Caption = 'When &size, date or attributes change' OnChange = OnAutoRefreshOptionChanged TabOrder = 1 end end object gbAutoRefreshDisable: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbAutoRefreshEnable AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 117 Top = 94 Width = 489 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Disable auto-refresh' ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 3 ClientHeight = 94 ClientWidth = 485 TabOrder = 1 object cbWatchOnlyForeground: TCheckBox AnchorSideLeft.Control = gbAutoRefreshDisable AnchorSideTop.Control = gbAutoRefreshDisable Left = 10 Height = 23 Top = 5 Width = 269 BorderSpacing.Left = 10 Caption = 'When application is in the &background' TabOrder = 0 end object cbWatchExcludeDirs: TCheckBox AnchorSideLeft.Control = cbWatchOnlyForeground AnchorSideTop.Control = cbWatchOnlyForeground AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 31 Width = 339 Caption = 'For the following &paths and their subdirectories:' OnChange = cbWatchExcludeDirsChange TabOrder = 1 end object edtWatchExcludeDirs: TEdit AnchorSideLeft.Control = cbWatchExcludeDirs AnchorSideTop.Control = cbWatchExcludeDirs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbAutoRefreshDisable AnchorSideRight.Side = asrBottom Left = 30 Height = 28 Top = 57 Width = 447 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 BorderSpacing.Right = 8 BorderSpacing.Bottom = 15 TabOrder = 2 end end end ������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscolumnsview.lrt��������������������������������������������������0000644�0001750�0000144�00000000714�12020403374�021436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSCOLUMNSVIEW.GRPAUTOSIZECOLUMNS.CAPTION=Auto-size columns TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION=A&uto fill columns TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION=Auto si&ze column: TFRMOPTIONSCOLUMNSVIEW.GBSHOWGRID.CAPTION=Show grid TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION=&Vertical lines TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION=&Horizontal lines TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION=Cut &text to column width ����������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfonts.lfm��������������������������������������������������������0000644�0001750�0000144�00000022575�12510227505�020206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFonts: TfrmOptionsFonts Height = 480 Width = 703 ClientHeight = 480 ClientWidth = 703 DesignLeft = 397 DesignTop = 90 object lblMainFont: TLabel[0] Left = 6 Height = 15 Top = 8 Width = 52 Caption = 'Main &font' FocusControl = edtMainFont ParentColor = False end object lblEditorFont: TLabel[1] AnchorSideTop.Control = edtMainFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 62 Width = 56 BorderSpacing.Top = 10 Caption = '&Editor font' FocusControl = edtEditorFont ParentColor = False end object lblViewerFont: TLabel[2] AnchorSideTop.Control = edtEditorFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 116 Width = 60 BorderSpacing.Top = 10 Caption = '&Viewer font' FocusControl = edtViewerFont ParentColor = False end object btnSelMainFnt: TButton[3] AnchorSideTop.Control = edtMainFontSize AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtMainFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 29 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 8 Caption = '...' OnClick = btnSelMainFntClick TabOrder = 2 end object edtMainFontSize: TSpinEdit[4] AnchorSideTop.Control = edtMainFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelMainFnt Left = 596 Height = 23 Top = 29 Width = 55 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtMainFontSizeChange TabOrder = 1 Value = 14 end object edtMainFont: TEdit[5] AnchorSideLeft.Control = lblMainFont AnchorSideTop.Control = lblMainFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtMainFontSize Left = 6 Height = 23 Top = 29 Width = 586 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtMainFontExit TabOrder = 0 end object btnSelEditFnt: TButton[6] AnchorSideTop.Control = edtEditorFontSize AnchorSideRight.Control = btnSelMainFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtEditorFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 83 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelEditFntClick TabOrder = 5 end object edtEditorFont: TEdit[7] AnchorSideLeft.Control = lblEditorFont AnchorSideTop.Control = lblEditorFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtEditorFontSize Left = 6 Height = 23 Top = 83 Width = 586 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtEditorFontExit TabOrder = 3 end object edtEditorFontSize: TSpinEdit[8] AnchorSideTop.Control = edtEditorFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelEditFnt Left = 596 Height = 23 Top = 83 Width = 55 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtEditorFontSizeChange TabOrder = 4 Value = 14 end object btnSelViewFnt: TButton[9] AnchorSideTop.Control = edtViewerFontSize AnchorSideRight.Control = btnSelEditFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtViewerFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 137 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelViewFntClick TabOrder = 8 end object edtViewerFont: TEdit[10] AnchorSideLeft.Control = lblViewerFont AnchorSideTop.Control = lblViewerFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtViewerFontSize Left = 6 Height = 23 Top = 137 Width = 585 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtViewerFontExit TabOrder = 6 end object edtViewerFontSize: TSpinEdit[11] AnchorSideTop.Control = edtViewerFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelViewFnt Left = 595 Height = 23 Top = 137 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtViewerFontSizeChange TabOrder = 7 Value = 14 end object lblLogFont: TLabel[12] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtViewerBookFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 224 Width = 45 BorderSpacing.Top = 10 Caption = '&Log font' FocusControl = edtLogFont ParentColor = False end object edtLogFont: TEdit[13] AnchorSideLeft.Control = lblLogFont AnchorSideTop.Control = lblLogFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtLogFontSize Left = 6 Height = 23 Top = 245 Width = 585 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtLogFontExit TabOrder = 12 end object btnSelLogFnt: TButton[14] AnchorSideTop.Control = edtLogFontSize AnchorSideRight.Control = btnSelViewerBookFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtLogFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 245 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelLogFntClick TabOrder = 14 end object edtLogFontSize: TSpinEdit[15] AnchorSideTop.Control = edtLogFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelLogFnt Left = 595 Height = 23 Top = 245 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtLogFontSizeChange TabOrder = 13 Value = 14 end object lblViewerBookFont: TLabel[16] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtViewerFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 170 Width = 89 BorderSpacing.Top = 10 Caption = 'Viewer&Book Font' FocusControl = edtViewerBookFont ParentColor = False end object edtViewerBookFont: TEdit[17] AnchorSideLeft.Control = lblViewerBookFont AnchorSideTop.Control = lblViewerBookFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtViewerBookFontSize Left = 6 Height = 23 Top = 191 Width = 585 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtViewerBookFontExit TabOrder = 9 end object edtViewerBookFontSize: TSpinEdit[18] AnchorSideTop.Control = edtViewerBookFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelViewerBookFnt Left = 595 Height = 23 Top = 191 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtViewerBookFontSizeChange TabOrder = 10 Value = 18 end object btnSelViewerBookFnt: TButton[19] AnchorSideTop.Control = edtViewerBookFontSize AnchorSideRight.Control = btnSelViewFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtViewerBookFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 191 Width = 40 Anchors = [akTop, akRight, akBottom] Caption = '...' OnClick = btnSelViewerBookFntClick TabOrder = 11 end object btnSelConsoleFnt: TButton[20] AnchorSideTop.Control = edtConsoleFontSize AnchorSideRight.Control = btnSelViewerBookFnt AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtConsoleFontSize AnchorSideBottom.Side = asrBottom Left = 655 Height = 23 Top = 299 Width = 40 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnSelConsoleFntClick TabOrder = 15 end object edtConsoleFontSize: TSpinEdit[21] AnchorSideTop.Control = edtConsoleFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSelConsoleFnt Left = 595 Height = 23 Top = 299 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 4 MaxValue = 99 MinValue = 6 OnChange = edtConsoleFontSizeChange TabOrder = 16 Value = 14 end object edtConsoleFont: TEdit[22] AnchorSideLeft.Control = lblConsoleFont AnchorSideTop.Control = lblConsoleFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtConsoleFontSize Left = 6 Height = 23 Top = 299 Width = 585 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 OnExit = edtLogFontExit TabOrder = 17 end object lblConsoleFont: TLabel[23] AnchorSideLeft.Control = edtViewerFont AnchorSideTop.Control = edtLogFont AnchorSideTop.Side = asrBottom Left = 6 Height = 15 Top = 278 Width = 68 BorderSpacing.Top = 10 Caption = '&Console font' FocusControl = edtConsoleFont ParentColor = False end object dlgFnt: TFontDialog[24] MinFontSize = 0 MaxFontSize = 0 Options = [fdNoStyleSel] left = 88 top = 8 end end �����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassocextra.lrt�����������������������������������������������0000644�0001750�0000144�00000001757�12532643273�022123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILEASSOCEXTRA.CBOFFERTOADDTOFILEASSOCIATIONS.HINT=When accessing file association, offer to add current selected file if not already included in a configured file type TFRMOPTIONSFILEASSOCEXTRA.CBOFFERTOADDTOFILEASSOCIATIONS.CAPTION=Offer to add selection to file association when not included already TFRMOPTIONSFILEASSOCEXTRA.GBEXTENDEDCONTEXTMENUOPTIONS.CAPTION=Extended options items: TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION=Execute via shell TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION=Execute via terminal and close TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION=Execute via terminal and stay open TFRMOPTIONSFILEASSOCEXTRA.CBINCLUDECONFIGFILEASSOC.CAPTION=File association configuration TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT=When accessing file association, offer to add current selected file if not already included in a configured file type TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.CAPTION=Extended context menu �����������������doublecmd-0.7.1/src/frames/foptionsmouse.lfm��������������������������������������������������������0000644�0001750�0000144�00000007752�12020403374�020201� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsMouse: TfrmOptionsMouse Height = 253 Width = 426 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 253 ClientWidth = 426 DesignTop = 20 object gbSelection: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 68 Top = 6 Width = 414 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Selection' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 50 ClientWidth = 410 TabOrder = 0 object cbSelectionByMouse: TCheckBox AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 6 Width = 110 Caption = '&Selection by mouse' TabOrder = 0 end object lblMouseMode: TLabel AnchorSideLeft.Control = cbSelectionByMouse AnchorSideTop.Control = cbMouseMode AnchorSideTop.Side = asrCenter Left = 6 Height = 13 Top = 27 Width = 30 Caption = '&Mode:' FocusControl = cbMouseMode ParentColor = False end object cbMouseMode: TComboBox AnchorSideLeft.Control = lblMouseMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSelectionByMouse AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbSelection AnchorSideRight.Side = asrBottom Left = 44 Height = 21 Top = 23 Width = 358 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Right = 8 ItemHeight = 13 Style = csDropDownList TabOrder = 1 end end object gbScrolling: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSelection AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 93 Top = 78 Width = 414 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Scrolling' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 75 ClientWidth = 410 TabOrder = 1 object rbScrollLineByLineCursor: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = gbScrolling AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 6 Width = 398 Anchors = [akTop, akLeft, akRight] Caption = 'Line by line &with cursor movement' Checked = True TabOrder = 0 TabStop = True end object rbScrollLineByLine: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = seWheelScrollLines AnchorSideTop.Side = asrCenter Left = 6 Height = 17 Top = 29 Width = 71 BorderSpacing.Right = 6 Caption = '&Line by line' TabOrder = 1 end object rbScrollPageByPage: TRadioButton AnchorSideLeft.Control = gbScrolling AnchorSideTop.Control = seWheelScrollLines AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 52 Width = 398 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Caption = '&Page by page' TabOrder = 3 end object seWheelScrollLines: TSpinEdit AnchorSideLeft.Control = rbScrollLineByLine AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbScrollLineByLineCursor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbScrolling AnchorSideRight.Side = asrBottom Left = 95 Height = 21 Top = 27 Width = 307 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 18 BorderSpacing.Top = 4 BorderSpacing.Right = 8 MinValue = 1 TabOrder = 2 Value = 1 end end end ����������������������doublecmd-0.7.1/src/frames/foptionshotkeys.lrt������������������������������������������������������0000644�0001750�0000144�00000001363�12503244332�020555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION=C&ategories: TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION=Co&mmands: TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION=&Filter TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[0].TITLE.CAPTION=Command TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[1].TITLE.CAPTION=Hotkeys TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[2].TITLE.CAPTION=Description TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION=Hotkey TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION=Parameters TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION=Controls TFRMOPTIONSHOTKEYS.BTNADDHOTKEY.CAPTION=Add &hotkey TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION=&Edit hotkey TFRMOPTIONSHOTKEYS.BTNDELETEHOTKEY.CAPTION=&Delete hotkey TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION=&Shortcut files: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassoc.pas����������������������������������������������������0000644�0001750�0000144�00000126254�12532643273�021041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File associations configuration Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFileAssoc; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ExtCtrls, EditBtn, uExts, ExtDlgs, Menus, fOptionsFrame; type { TfrmOptionsFileAssoc } TfrmOptionsFileAssoc = class(TOptionsEditor) btnAddAct: TButton; btnCloneAct: TButton; btnCommands: TSpeedButton; btnInsertExt: TButton; btnInsertAct: TButton; btnAddExt: TButton; btnAddNewType: TButton; btnDownAct: TButton; btnEditExt: TButton; btnParametersHelper: TSpeedButton; btnRelativePathIcon: TSpeedButton; btnStartPathVarHelper: TSpeedButton; btnRelativeCommand: TSpeedButton; btnStartPathPathHelper: TSpeedButton; btnUpAct: TButton; btnRemoveAct: TButton; btnRemoveExt: TButton; btnRemoveType: TButton; btnRenameType: TButton; deStartPath: TDirectoryEdit; edbActionName: TEditButton; edtParams: TEdit; fneIconFileName: TFileNameEdit; fneCommand: TFileNameEdit; gbActionDescription: TGroupBox; gbFileTypes: TGroupBox; gbIcon: TGroupBox; gbExts: TGroupBox; gbActions: TGroupBox; lbActions: TListBox; lbExts: TListBox; lbFileTypes: TListBox; lblAction: TLabel; lblCommand: TLabel; lblExternalParameters: TLabel; lblExternalParameters1: TLabel; lblStartPath: TLabel; MenuItem1: TMenuItem; miInternalViewer: TMenuItem; miInternalEditor: TMenuItem; miSeparator: TMenuItem; miCustom: TMenuItem; MenuItem3: TMenuItem; miOpenWith: TMenuItem; miViewWith: TMenuItem; miEditWith: TMenuItem; miGetOutputFromCommand: TMenuItem; miShell: TMenuItem; miViewer: TMenuItem; miEditor: TMenuItem; miEdit: TMenuItem; miView: TMenuItem; miOpen: TMenuItem; OpenDialog: TOpenDialog; OpenPictureDialog: TOpenPictureDialog; pmVariableStartPathHelper: TPopupMenu; pnlBottomSettings: TPanel; pmVariableParamsHelper: TPopupMenu; pmPathHelper: TPopupMenu; pnlLeftSettings: TPanel; pnlActsEdits: TPanel; pnlActsButtons: TPanel; pnlExtsButtons: TPanel; pnlRightSettings: TPanel; pnlSettings: TPanel; pmActions: TPopupMenu; pmCommands: TPopupMenu; sbtnIcon: TSpeedButton; procedure btnActionsClick(Sender: TObject); procedure btnCloneActClick(Sender: TObject); procedure btnInsertAddActClick(Sender: TObject); procedure btnInsertAddExtClick(Sender: TObject); procedure btnParametersHelperClick(Sender: TObject); procedure btnRelativeCommandClick(Sender: TObject); procedure btnRelativePathIconClick(Sender: TObject); procedure btnStartPathPathHelperClick(Sender: TObject); procedure btnStartPathVarHelperClick(Sender: TObject); procedure deStartPathChange(Sender: TObject); procedure edtParamsChange(Sender: TObject); procedure fneIconFileNameChange(Sender: TObject); procedure FrameResize(Sender: TObject); function InsertAddSingleExtensionToLists(sExt: string; iInsertPosition: integer): boolean; procedure InsertAddExtensionToLists(sParamExt: string; iPositionToInsert: integer); procedure btnAddNewTypeClick(Sender: TObject); procedure btnCommandsClick(Sender: TObject); procedure btnDownActClick(Sender: TObject); procedure btnEditExtClick(Sender: TObject); procedure btnRemoveActClick(Sender: TObject); procedure btnRemoveExtClick(Sender: TObject); procedure btnRemoveTypeClick(Sender: TObject); procedure btnRemoveTypeResize(Sender: TObject); procedure btnRenameTypeClick(Sender: TObject); procedure btnRenameTypeResize(Sender: TObject); procedure btnUpActClick(Sender: TObject); procedure lbActionsDragDrop(Sender, Source: TObject; X, Y: integer); procedure lbActionsSelectionChange(Sender: TObject; User: boolean); procedure lbExtsDragDrop(Sender, Source: TObject; X, Y: integer); procedure lbExtsSelectionChange(Sender: TObject; User: boolean); procedure lbFileTypesDragDrop(Sender, Source: TObject; X, Y: integer); procedure lbGenericDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); procedure lbFileTypesDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); procedure lbFileTypesSelectionChange(Sender: TObject; User: boolean); procedure edbActionNameChange(Sender: TObject); procedure fneCommandChange(Sender: TObject); procedure miActionsClick(Sender: TObject); procedure miCommandsClick(Sender: TObject); procedure pnlRightSettingsResize(Sender: TObject); procedure pnlSettingsResize(Sender: TObject); procedure sbtnIconClick(Sender: TObject); procedure MakeUsInPositionToWorkWithActiveFile; private Exts: TExts; FUpdatingControls: boolean; FLastLoadedExtSignature: dword; procedure UpdateEnabledButtons; {en Frees icon cached in lbFileTypes.Items.Objects[Index]. } procedure FreeIcon(iIndex: integer); procedure SetIconFileName(const sFileName: string); procedure SetMinimumSize; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. LCLProc, Math, LCLType, //DC DCClassesUtf8, uOSForms, fMain, fOptions, uFile, uGlobsPaths, uGlobs, uPixMapManager, uLng, uDCUtils, DCOSUtils, DCStrUtils, uShowMsg, uSpecialDir; const ACTUAL_ADD_ACTION = 1; SET_ACTION_WORD = 2; { TfrmOptionsFileAssoc } { TfrmOptionsFileAssoc.Init } procedure TfrmOptionsFileAssoc.Init; begin inherited Init; Exts := TExts.Create; FUpdatingControls := False; end; { TfrmOptionsFileAssoc.Done } procedure TfrmOptionsFileAssoc.Done; var I: integer; begin for I := 0 to lbFileTypes.Items.Count - 1 do FreeIcon(I); FreeAndNil(Exts); inherited Done; end; { TfrmOptionsFileAssoc.Load } procedure TfrmOptionsFileAssoc.Load; var I: integer; sName: string; Bitmap: TBitmap; begin //Let's preserve the precious legacy .po translated groupbox name that we will re-use with dialog window concerning them gbFileTypes.hint := gbFileTypes.Caption; gbIcon.hint := gbIcon.Caption; gbExts.hint := gbExts.Caption; gbActions.hint := gbActions.Caption; gbActionDescription.hint := gbActionDescription.Caption; // Give some numerical step number to help user without losing legacy .po translated groubox name gbFileTypes.Caption := '1 - ' + gbFileTypes.Caption; gbIcon.Caption := '2 - ' + gbIcon.Caption; gbExts.Caption := '3 - ' + gbExts.Caption; gbActions.Caption := '4 - ' + gbActions.Caption; gbActionDescription.Caption := '5 - ' + gbActionDescription.Caption; // load extension file Exts.Load; //'Pp'! A letter with the upper part and a letter with the lower part! This should give us approximation of highest room required! :-) lbFileTypes.ItemHeight := Max(gIconsSize, lbFileTypes.Canvas.TextHeight('Pp')) + 4; // fill file types list box for I := 0 to Exts.Count - 1 do begin sName := Exts.Items[I].Name; // load icon for use in OnDrawItem procedure Bitmap := PixMapManager.LoadBitmapEnhanced(Exts.Items[I].Icon, gIconsSize, True, lbFileTypes.Color); lbFileTypes.Items.AddObject(sName, Bitmap); end; if Exts.Count > 0 then lbFileTypes.ItemIndex := 0; UpdateEnabledButtons; // Populate helper menu gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmVariableParamsHelper, edtParams); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmVariableStartPathHelper, deStartPath); FLastLoadedExtSignature := Exts.ComputeSignature; inherited Load; end; { TfrmOptionsFileAssoc.Save } function TfrmOptionsFileAssoc.Save: TOptionsEditorSaveFlags; var iExt: integer; begin Exts.SaveXMLFile; gExts.Clear; gExts.Load; // The "gExts.Clear" has flush the "IconIndex" that have been set via "Load" of PixMapManager. // Since it has been lost AND PixMapManager.Load won't set again our iconindex, let's do manually here. // It is required so the icon next to our actions in SheelContextMenu will be the correct ones. for iExt := 0 to pred(gExts.Count) do TExtAction(gExts.Items[iExt]).IconIndex := PixMapManager.GetIconByName(TExtAction(gExts.Items[iExt]).Icon); FLastLoadedExtSignature := Exts.ComputeSignature; Result := inherited Save; end; { TfrmOptionsFileAssoc.GetIconIndex } class function TfrmOptionsFileAssoc.GetIconIndex: integer; begin Result := 34; end; { TfrmOptionsFileAssoc.GetTitle } class function TfrmOptionsFileAssoc.GetTitle: string; begin Result := rsOptionsEditorFileAssoc; end; { TfrmOptionsFileAssoc.UpdateEnabledButtons } procedure TfrmOptionsFileAssoc.UpdateEnabledButtons; begin if (lbFileTypes.Items.Count = 0) or (lbFileTypes.ItemIndex = -1) then begin sbtnIcon.Enabled := False; btnInsertExt.Enabled := False; btnAddExt.Enabled := False; btnInsertAct.Enabled := False; btnAddAct.Enabled := False; end else begin btnInsertExt.Enabled := (lbExts.Items.Count > 0); btnAddExt.Enabled := True; btnInsertAct.Enabled := (lbExts.Items.Count > 0) and (lbActions.ItemIndex <> -1); btnAddAct.Enabled := btnInsertExt.Enabled; sbtnIcon.Enabled := btnInsertExt.Enabled; end; btnRemoveExt.Enabled := ((lbExts.Items.Count <> 0) and (lbExts.ItemIndex <> -1)); btnEditExt.Enabled := btnRemoveExt.Enabled; if (lbActions.Items.Count = 0) or (lbActions.ItemIndex = -1) then begin btnUpAct.Enabled := False; btnDownAct.Enabled := False; btnRemoveAct.Enabled := False; edbActionName.Enabled := False; fneCommand.Enabled := False; edtParams.Enabled := False; deStartPath.Enabled := False; btnCommands.Enabled := False; edbActionName.Text := ''; fneCommand.FileName := ''; edtParams.Text := ''; deStartPath.Text := ''; end else begin btnUpAct.Enabled := (lbActions.ItemIndex > 0); btnDownAct.Enabled := (lbActions.ItemIndex < lbActions.Items.Count - 1); btnRemoveAct.Enabled := True; edbActionName.Enabled := True; fneCommand.Enabled := True; edtParams.Enabled := True; deStartPath.Enabled := True; btnCommands.Enabled := True; end; btnCloneAct.Enabled := btnRemoveAct.Enabled; end; { TfrmOptionsFileAssoc.btnAddNewTypeClick } procedure TfrmOptionsFileAssoc.btnAddNewTypeClick(Sender: TObject); var ExtAction: TExtAction; s: string; begin s := InputBox(GetTitle + ' - ' + gbFileTypes.Hint, rsMsgEnterName, ''); if s = '' then exit; ExtAction := TExtAction.Create; ExtAction.IconIndex := -1; with lbFileTypes do begin ExtAction.Name := s; Items.AddObject(ExtAction.Name, nil); // add file type to TExts object Exts.AddItem(ExtAction); ItemIndex := Items.Count - 1; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRemoveTypeClick } procedure TfrmOptionsFileAssoc.btnRemoveTypeClick(Sender: TObject); var iIndex: integer; begin with lbFileTypes do begin iIndex := ItemIndex; if iIndex < 0 then Exit; FreeIcon(iIndex); Items.Delete(iIndex); Exts.DeleteItem(iIndex); if Items.Count = 0 then begin lbExts.Clear; lbActions.Clear; end else begin if iIndex = 0 then ItemIndex := 0 else ItemIndex := iIndex - 1; end; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRemoveTypeResize } procedure TfrmOptionsFileAssoc.btnRemoveTypeResize(Sender: TObject); begin SetMinimumSize; end; { TfrmOptionsFileAssoc.btnRenameTypeClick } procedure TfrmOptionsFileAssoc.btnRenameTypeClick(Sender: TObject); var iIndex: integer; sName: string; begin iIndex := lbFileTypes.ItemIndex; if iIndex < 0 then Exit; sName := lbFileTypes.Items[iIndex]; sName := InputBox(GetTitle + ' - ' + gbFileTypes.Hint, rsMsgEnterName, sName); lbFileTypes.Items[iIndex] := sName; // rename file type in TExts object Exts.Items[iIndex].Name := sName; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnRenameTypeResize } procedure TfrmOptionsFileAssoc.btnRenameTypeResize(Sender: TObject); begin SetMinimumSize; end; { TfrmOptionsFileAssoc.lbActionsSelectionChange } procedure TfrmOptionsFileAssoc.lbActionsSelectionChange(Sender: TObject; User: boolean); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (iIndex < 0) or (lbActions.Tag = 1) then Exit; edbActionName.Tag:=1; edbActionName.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).ActionName; fneCommand.FileName := TExtActionCommand(lbActions.Items.Objects[iIndex]).CommandName; edtParams.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).Params; deStartPath.Text := TExtActionCommand(lbActions.Items.Objects[iIndex]).StartPath; edbActionName.Tag:=0; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbExtsDragDrop } procedure TfrmOptionsFileAssoc.lbExtsDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // exchange positions in extensions listbox SrcIndex := lbExts.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbExts.GetIndexAtXY(X, Y); if (DestIndex < 0) or (DestIndex >= lbExts.Count) then DestIndex := lbExts.Count - 1; lbExts.Items.Move(SrcIndex, DestIndex); lbExts.ItemIndex := DestIndex; // change extension in TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Move(SrcIndex, DestIndex); end; { TfrmOptionsFileAssoc.lbExtsSelectionChange } procedure TfrmOptionsFileAssoc.lbExtsSelectionChange(Sender: TObject; User: boolean); begin if (lbExts.ItemIndex < 0) then Exit; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbFileTypesDragDrop } procedure TfrmOptionsFileAssoc.lbFileTypesDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // Validate if the move is okay SrcIndex := lbFileTypes.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbFileTypes.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbFileTypes.Count) then DestIndex := lbFileTypes.Count - 1; // exchange positions in actions listbox lbActions.Tag := 1; // start moving try lbFileTypes.Items.Move(SrcIndex, DestIndex); lbFileTypes.ItemIndex := DestIndex; // exchange actions in TExts object Exts.MoveItem(SrcIndex, DestIndex); finally lbActions.Tag := 0; // end moving end; // trig the "SelectionChange" event to refresh extension and action lists lbFileTypesSelectionChange(lbFileTypes, False); UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbGenericDragOver } procedure TfrmOptionsFileAssoc.lbGenericDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin //Accept if it's coming from the same ListBox Accept := (Source is TListBox) and (TListBox(Source).Name = TListBox(Sender).Name); //Let's scroll up/down if user is dragging near the top/bottom if Y > (TListBox(Sender).Height - 15) then TListBox(Sender).TopIndex := TListBox(Sender).TopIndex + 1 else if Y < 15 then TListBox(Sender).TopIndex := TListBox(Sender).TopIndex - 1; end; { TfrmOptionsFileAssoc.lbFileTypesDrawItem } procedure TfrmOptionsFileAssoc.lbFileTypesDrawItem(Control: TWinControl; Index: integer; ARect: TRect; State: TOwnerDrawState); var iDrawTop: integer; begin with (Control as TListBox) do begin if odSelected in State then begin Canvas.Font.Color := clHighlightText; Canvas.Brush.Color := clHighlight; Canvas.FillRect(ARect); end else begin Canvas.Font.Color := Font.Color; Canvas.Brush.Color := Color; Canvas.FillRect(ARect); end; if (Canvas.Locked = False) and (Assigned(Items.Objects[Index])) then begin iDrawTop := ARect.Top + ((lbFileTypes.ItemHeight - gIconsSize) div 2); Canvas.Draw(ARect.Left + 2, iDrawTop, TBitmap(Items.Objects[Index])); end; iDrawTop := ARect.Top + ((lbFileTypes.ItemHeight - Canvas.TextHeight(Items[Index])) div 2); Canvas.TextOut(ARect.Left + gIconsSize + 6, iDrawTop, Items[Index]); end; end; { TfrmOptionsFileAssoc.lbFileTypesSelectionChange } procedure TfrmOptionsFileAssoc.lbFileTypesSelectionChange(Sender: TObject; User: boolean); var ExtCommand: TExtAction; I: integer; bmpTemp: TBitmap = nil; begin if (lbFileTypes.ItemIndex >= 0) and (lbFileTypes.ItemIndex < Exts.Count) then begin lbActions.Items.Clear; Application.ProcessMessages; lbExts.Items.Clear; Application.ProcessMessages; ExtCommand := Exts.Items[lbFileTypes.ItemIndex]; lbExts.Items.Assign(ExtCommand.Extensions); if lbExts.Count > 0 then lbExts.ItemIndex := 0; for I := 0 to pred(ExtCommand.ActionList.Count) do begin lbActions.Items.AddObject(ExtCommand.ActionList.ExtActionCommand[I].ActionName, ExtCommand.ActionList.ExtActionCommand[I]); end; if lbActions.Count > 0 then lbActions.ItemIndex := 0; bmpTemp := PixMapManager.LoadBitmapEnhanced(ExtCommand.Icon, 32, True, sbtnIcon.Color); try sbtnIcon.Glyph := bmpTemp; finally if Assigned(bmpTemp) then FreeAndNil(bmpTemp); end; FUpdatingControls := True; // Don't trigger OnChange fneIconFileName.Text := ExtCommand.Icon; fneIconFileName.InitialDir := ExtractFilePath(ExtCommand.Icon); FUpdatingControls := False; end else begin lbExts.Items.Clear; lbActions.Items.Clear; sbtnIcon.Glyph.Clear; fneIconFileName.Text := ''; end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.edbActionChange } procedure TfrmOptionsFileAssoc.edbActionNameChange(Sender: TObject); var iIndex: integer; begin if edbActionName.Tag=1 then exit; iIndex := lbActions.ItemIndex; if (iIndex < 0) or (edbActionName.Text = '') then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).ActionName := edbActionName.Text; lbActions.Items[iIndex] := edbActionName.Text; end; { TfrmOptionsFileAssoc.fneCommandChange } procedure TfrmOptionsFileAssoc.fneCommandChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag=1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).CommandName := fneCommand.Text; if fneCommand.InitialDir <> ExtractFilePath(fneCommand.Text) then fneCommand.InitialDir := ExtractFilePath(fneCommand.Text); end; { TfrmOptionsFileAssoc.edtExternalParametersChange } procedure TfrmOptionsFileAssoc.edtParamsChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag=1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).Params := edtParams.Text; end; { TfrmOptionsFileAssoc.deStartPathChange } procedure TfrmOptionsFileAssoc.deStartPathChange(Sender: TObject); var iIndex: integer; begin iIndex := lbActions.ItemIndex; if (edbActionName.Tag=1) or (iIndex < 0) then Exit; TExtActionCommand(lbActions.Items.Objects[iIndex]).StartPath := deStartPath.Text; if deStartPath.Directory <> deStartPath.Text then deStartPath.Directory := deStartPath.Text; end; { TfrmOptionsFileAssoc.miActionsClick } // The "tag" of the menu item calling this will give us information about the task to do. // xxxx xx10 : Bit 1 & 0 indicate if user wants "Open", "View", "Edit" or "Custom action". // xxx4 xxxx : Bit 4 indicates if user wants to specify immediately a .exe file for the command. (0=no, 1=yes). // xx5x xxxx : Bit 5 indicates if user wants to "Add" or "Insert" action in the current list. (0=add, 1=insert). procedure TfrmOptionsFileAssoc.miActionsClick(Sender: TObject); var miMenuItem: TMenuItem absolute Sender; I, iDispatcher: integer; ExtAction: TExtAction; sActionWords: string = ''; sCommandFilename: string = ''; begin with Sender as TComponent do iDispatcher := tag; // Transform the task in "add" if currently there is no action, nothing selected, any incoherence. if (Exts.Items[lbFileTypes.ItemIndex].ActionList.Count = 0) or (lbActions.Items.Count = 0) or (lbActions.ItemIndex = -1) then iDispatcher := (iDispatcher and $DF); if iDispatcher and $03 = $03 then gFileAssociationLastCustomAction := InputBox(GetTitle + ' - ' + gbActions.Hint, rsMsgEnterCustomAction, gFileAssociationLastCustomAction); case (iDispatcher and $DF) of $00: sActionWords := 'Open'; $01: sActionWords := 'View'; $02: sActionWords := 'Edit'; $03: sActionWords := gFileAssociationLastCustomAction; $10: OpenDialog.Title := rsMsgSelectExecutableFile + ' "Open"...'; $11: OpenDialog.Title := rsMsgSelectExecutableFile + ' "View"...'; $12: OpenDialog.Title := rsMsgSelectExecutableFile + ' "Edit"...'; $13: OpenDialog.Title := rsMsgSelectExecutableFile + ' "' + gFileAssociationLastCustomAction + '"...'; end; case iDispatcher and $10 of $10: begin if OpenDialog.Execute then begin sCommandFilename := OpenDialog.Filename; case (iDispatcher and $03) of $00: sActionWords := 'Open ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $01: sActionWords := 'View ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $02: sActionWords := 'Edit ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); $03: sActionWords := gFileAssociationLastCustomAction + ' ' + rsMsgWithActionWith + ' ' + ExtractFilename(OpenDialog.Filename); end; end; end; end; case pmActions.Tag of ACTUAL_ADD_ACTION: begin ExtAction := Exts.Items[lbFileTypes.ItemIndex]; // insert/add action to TExts object case iDispatcher and $20 of $20: // it is an "insert" begin I := lbActions.ItemIndex; case (iDispatcher and $DF) of $00, $01, $02, $03: ExtAction.ActionList.Insert(I, TExtActionCommand.Create(sActionWords, '', '', '')); $10, $11, $12, $13: ExtAction.ActionList.Insert(I, TExtActionCommand.Create(sActionWords, sCommandFilename, '%p', '')); end; // add action to actions listbox lbActions.Items.InsertObject(I, '', ExtAction.ActionList.ExtActionCommand[I]); end else begin // it is a "add" case (iDispatcher and $DF) of $00, $01, $02, $03: I := ExtAction.ActionList.Add(TExtActionCommand.Create(sActionWords, '', '', '')); $10, $11, $12, $13: I := ExtAction.ActionList.Add(TExtActionCommand.Create(sActionWords, sCommandFilename, '%p', '')); end; // add action to actions listbox lbActions.Items.AddObject(ExtAction.ActionList.ExtActionCommand[I].ActionName, ExtAction.ActionList.ExtActionCommand[I]); end; end; lbActions.ItemIndex := I; edbActionNameChange(edbActionName); //<--Trig this event to force redraw of lbActions current selected element because in case of switch from "open" to identical "open" for exemple, "edbActionChange" is not trig and so our element in the list is not drawn! // Update icon if possible, if necessary case (iDispatcher and $10) of $10: if Exts.Items[lbFileTypes.ItemIndex].Icon = '' then fneIconFileName.Text := OpenDialog.FileName; //No quote required here! So "sCommandFilename" is not used. end; UpdateEnabledButtons; if edbActionName.CanFocus then begin edbActionName.SetFocus; edbActionName.SelStart := UTF8Length(edbActionName.Text); end; end; SET_ACTION_WORD: begin case (iDispatcher and $DF) of $00, $01, $02, $03: edbActionName.Text := sActionWords; $10, $11, $12, $13: begin edbActionName.Text := sActionWords; fneCommand.Text := sCommandFilename; edtParams.Text := '%p'; end; end; end; else begin if miMenuItem.Name = 'miOpen' then edbActionName.Text := 'Open' else if miMenuItem.Name = 'miView' then edbActionName.Text := 'View' else if miMenuItem.Name = 'miEdit' then edbActionName.Text := 'Edit'; end; end; end; { TfrmOptionsFileAssoc.miCommandsClick } procedure TfrmOptionsFileAssoc.miCommandsClick(Sender: TObject); var miMenuItem: TMenuItem absolute Sender; begin with Sender as TComponent do begin case tag of 2: fneCommand.SelText := '{!VIEWER}'; 3: fneCommand.SelText := '{!DC-VIEWER}'; 4: fneCommand.SelText := '{!EDITOR}'; 5: fneCommand.SelText := '{!DC-EDITOR}'; 6: fneCommand.SelText := '{!SHELL}'; 7: begin fneCommand.SelText := fneCommand.Text + '<??>'; fneCommand.SetFocus; fneCommand.SelStart := Pos('?>', fneCommand.Text) - 1; end; end; end; end; { TfrmOptionsFileAssoc.pnlRightSettingsResize } procedure TfrmOptionsFileAssoc.pnlRightSettingsResize(Sender: TObject); begin gbExts.Height := pnlRightSettings.ClientHeight div 4; end; { TfrmOptionsFileAssoc.pnlSettingsResize } procedure TfrmOptionsFileAssoc.pnlSettingsResize(Sender: TObject); begin pnlLeftSettings.Width := pnlSettings.ClientWidth div 3; end; { TfrmOptionsFileAssoc.sbtnIconClick } procedure TfrmOptionsFileAssoc.sbtnIconClick(Sender: TObject); var sFileName: string; begin sFileName := GetCmdDirFromEnvVar(fneIconFileName.Text); if ShowOpenIconDialog(Self, sFileName) then fneIconFileName.Text := sFileName; end; { TfrmOptionsFileAssoc.InsertAddSingleExtensionToLists } function TfrmOptionsFileAssoc.InsertAddSingleExtensionToLists(sExt: string; iInsertPosition: integer): boolean; begin Result := False; if (sExt <> '') then begin if Exts.Items[lbFileTypes.ItemIndex].Extensions.IndexOf(sExt) = -1 then begin if iInsertPosition = -1 then iInsertPosition := lbExts.Items.Add(sExt) else lbExts.Items.Insert(iInsertPosition, sExt); lbExts.ItemIndex := iInsertPosition; //add extension in TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Insert(iInsertPosition, sExt); Result := True; end else begin lbExts.ItemIndex := Exts.Items[lbFileTypes.ItemIndex].Extensions.IndexOf(sExt); end; UpdateEnabledButtons; end; end; { TfrmOptionsFileAssoc.InsertAddExtensionToLists } procedure TfrmOptionsFileAssoc.InsertAddExtensionToLists(sParamExt: string; iPositionToInsert: integer); var iIndex: integer; sExt: string; begin sParamExt := sParamExt + '|'; while Pos('|', sParamExt) <> 0 do begin iIndex := Pos('|', sParamExt); sExt := Copy(sParamExt, 1, iIndex - 1); Delete(sParamExt, 1, iIndex); if InsertAddSingleExtensionToLists(sExt, iPositionToInsert) then if iPositionToInsert <> -1 then Inc(iPositionToInsert); end; end; { TfrmOptionsFileAssoc.btnInsertAddExtClick } procedure TfrmOptionsFileAssoc.btnInsertAddExtClick(Sender: TObject); var sExt: string; Dispatcher: integer; begin with Sender as TComponent do Dispatcher := tag; if (lbExts.Items.Count = 0) or (lbExts.ItemIndex = -1) then Dispatcher := 0; sExt := InputBox(GetTitle + ' - ' + gbExts.Hint, rsMsgEnterFileExt, ''); InsertAddExtensionToLists(sExt, ifthen((Dispatcher = 0), -1, lbExts.ItemIndex)); end; { TfrmOptionsFileAssoc.btnParametersHelperClick } procedure TfrmOptionsFileAssoc.btnParametersHelperClick(Sender: TObject); begin pmVariableParamsHelper.PopUp; end; { TfrmOptionsFileAssoc.btnRelativeCommandClick } procedure TfrmOptionsFileAssoc.btnRelativeCommandClick(Sender: TObject); begin fneCommand.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneCommand, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnRelativePathIconClick } procedure TfrmOptionsFileAssoc.btnRelativePathIconClick(Sender: TObject); begin fneIconFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneIconFileName, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnStartPathPathHelperClick } procedure TfrmOptionsFileAssoc.btnStartPathPathHelperClick(Sender: TObject); begin deStartPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(deStartPath, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsFileAssoc.btnStartPathVarHelperClick } procedure TfrmOptionsFileAssoc.btnStartPathVarHelperClick(Sender: TObject); begin pmVariableStartPathHelper.PopUp; end; { TfrmOptionsFileAssoc.fneIconFileNameChange } procedure TfrmOptionsFileAssoc.fneIconFileNameChange(Sender: TObject); begin if not FUpdatingControls then SetIconFileName(fneIconFileName.Text); if fneIconFileName.InitialDir <> ExtractFilePath(fneIconFileName.Text) then fneIconFileName.InitialDir := ExtractFilePath(fneIconFileName.Text); end; { TfrmOptionsFileAssoc.FrameResize } procedure TfrmOptionsFileAssoc.FrameResize(Sender: TObject); begin lbExts.Columns := (lbExts.Width div 120); end; { TfrmOptionsFileAssoc.btnRemoveExtClick } procedure TfrmOptionsFileAssoc.btnRemoveExtClick(Sender: TObject); var I: integer; begin // remove extension from extensions listbox with lbExts do begin I := ItemIndex; if I < 0 then Exit; Items.Delete(I); if I < Items.Count then ItemIndex := I else if (I - 1) < Items.Count then ItemIndex := (I - 1); end; // remove extension from TExts object Exts.Items[lbFileTypes.ItemIndex].Extensions.Delete(I); UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnUpActClick } procedure TfrmOptionsFileAssoc.btnUpActClick(Sender: TObject); var I: integer; begin // move action in actions listbox with lbActions do begin Tag := 1; // start moving I := ItemIndex; if I = -1 then exit; if I > 0 then begin Items.Move(I, I - 1); ItemIndex := I - 1; end; end; // move action in TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Move(I, I - 1); end; lbActions.Tag := 0; // end moving UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.lbActionsDragDrop } procedure TfrmOptionsFileAssoc.lbActionsDragDrop(Sender, Source: TObject; X, Y: integer); var SrcIndex, DestIndex: integer; begin // Validate if the move is okay SrcIndex := lbActions.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbActions.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbActions.Count) then DestIndex := lbActions.Count - 1; // exchange positions in actions listbox lbActions.Tag := 1; // start moving try lbActions.Items.Move(SrcIndex, DestIndex); lbActions.ItemIndex := DestIndex; // exchange actions in TExts object Exts.Items[lbFileTypes.ItemIndex].ActionList.Move(SrcIndex, DestIndex); finally lbActions.Tag := 0; // end moving end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnDownActClick } procedure TfrmOptionsFileAssoc.btnDownActClick(Sender: TObject); var I: integer; begin // move action in actions listbox with lbActions do begin Tag := 1; // start moving I := ItemIndex; if I = -1 then exit; if (I < Items.Count - 1) and (I > -1) then begin Items.Move(I, I + 1); ItemIndex := I + 1; end; end; // move action in TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Move(I, I + 1); end; lbActions.Tag := 0; // end moving UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnEditExtClick } procedure TfrmOptionsFileAssoc.btnEditExtClick(Sender: TObject); var iRememberIndex: integer; sExt: string; begin iRememberIndex := lbExts.ItemIndex; if iRememberIndex < 0 then Exit; // change extension from extensions listbox sExt := InputBox(GetTitle + ' - ' + gbExts.Hint, rsMsgEnterFileExt, lbExts.Items[iRememberIndex]); if sExt <> lbExts.Items[iRememberIndex] then begin btnRemoveExtClick(btnRemoveExt); //We remove the old value if iRememberIndex >= lbExts.Items.Count then iRememberIndex := -1; InsertAddExtensionToLists(sExt, iRememberIndex); //We may add new one, maybe not, maybe bunch of them, etc. end; end; { TfrmOptionsFileAssoc.btnInsertAddActClick } procedure TfrmOptionsFileAssoc.btnInsertAddActClick(Sender: TObject); var iSubMenu: integer; begin pmActions.Tag := ACTUAL_ADD_ACTION; for iSubMenu := 0 to pred(pmActions.Items.Count) do with pmActions.Items[iSubMenu] do Tag := ifthen((TComponent(Sender).Tag = $20), (Tag or $20), (Tag and $DF)); pmActions.PopUp(); end; { TfrmOptionsFileAssoc.btnActionsClick } procedure TfrmOptionsFileAssoc.btnActionsClick(Sender: TObject); begin pmActions.tag := SET_ACTION_WORD; pmActions.PopUp(); end; { TfrmOptionsFileAssoc.btnCloneActClick } procedure TfrmOptionsFileAssoc.btnCloneActClick(Sender: TObject); var ExtAction: TExtAction; I: integer; begin ExtAction := Exts.Items[lbFileTypes.ItemIndex]; I := lbActions.ItemIndex; if (I + 1) <= pred(ExtAction.ActionList.Count) then begin ExtAction.ActionList.Insert(I + 1, ExtAction.ActionList.ExtActionCommand[I].CloneExtAction); // add action to TExtAction lbActions.Items.InsertObject(I + 1, '', ExtAction.ActionList.ExtActionCommand[I + 1]); // add action to actions listbox end else begin ExtAction.ActionList.Add(ExtAction.ActionList.ExtActionCommand[I].CloneExtAction); // add action to TExtAction lbActions.Items.AddObject(ExtAction.ActionList.ExtActionCommand[I + 1].ActionName, ExtAction.ActionList.ExtActionCommand[I + 1]); // add action to actions listbox end; lbActions.ItemIndex := I + 1; edbActionNameChange(edbActionName); //<--Trig this event to force redraw of lbActions current selected element because in case of switch from "open" to identical "open" for exemple, "edbActionChange" is not trig and so our element in the list is not drawn! UpdateEnabledButtons; if edbActionName.CanFocus then begin edbActionName.SetFocus; edbActionName.SelStart := UTF8Length(edbActionName.Text); end; end; { TfrmOptionsFileAssoc.btnRemoveActClick } procedure TfrmOptionsFileAssoc.btnRemoveActClick(Sender: TObject); var I: integer; begin // remove action from actions listbox with lbActions do begin I := ItemIndex; if I < 0 then Exit; Items.Delete(I); if I < Items.Count then ItemIndex := I else if (I - 1) < Items.Count then ItemIndex := (I - 1); end; // remove action from TExts object with lbFileTypes do begin Exts.Items[ItemIndex].ActionList.Delete(I); end; UpdateEnabledButtons; end; { TfrmOptionsFileAssoc.btnCommandsClick } procedure TfrmOptionsFileAssoc.btnCommandsClick(Sender: TObject); begin pmCommands.PopUp(); end; { TfrmOptionsFileAssoc.FreeIcon } procedure TfrmOptionsFileAssoc.FreeIcon(iIndex: integer); begin with lbFileTypes do begin Canvas.Lock; try if Assigned(Items.Objects[iIndex]) then begin Items.Objects[iIndex].Free; Items.Objects[iIndex] := nil; end; finally Canvas.Unlock; end; end; end; { TfrmOptionsFileAssoc.SetIconFileName } procedure TfrmOptionsFileAssoc.SetIconFileName(const sFileName: string); var bmpTemp: TBitmap; Index: integer; begin if sFileName <> EmptyStr then begin bmpTemp := PixMapManager.LoadBitmapEnhanced(sFileName, 32, True, sbtnIcon.Color); if Assigned(bmpTemp) then begin sbtnIcon.Glyph.Assign(bmpTemp); FreeAndNil(bmpTemp); end else sbtnIcon.Glyph.Clear; end else sbtnIcon.Glyph.Clear; Index := lbFileTypes.ItemIndex; if (Index >= 0) and (Index < Exts.Count) then begin FreeIcon(Index); if sFileName <> EmptyStr then // save icon for use in OnDrawItem procedure lbFileTypes.Items.Objects[Index] := PixMapManager.LoadBitmapEnhanced(sFileName, gIconsSize, True, Color); lbFileTypes.Repaint; Exts.Items[Index].Icon := sFileName; Exts.Items[Index].IconIndex := -1; end; end; { TfrmOptionsFileAssoc.SetMinimumSize } procedure TfrmOptionsFileAssoc.SetMinimumSize; begin gbFileTypes.Constraints.MinWidth := gbFileTypes.BorderSpacing.Left + btnRemoveType.Left + btnRemoveType.Width + 5 + // space between btnRenameType.Width + gbFileTypes.Width - (btnRenameType.Left + btnRenameType.Width) + gbFileTypes.BorderSpacing.Right; pnlLeftSettings.Constraints.MinWidth := gbFileTypes.Constraints.MinWidth + gbFileTypes.BorderSpacing.Around; Constraints.MinWidth := pnlLeftSettings.Constraints.MinWidth + pnlLeftSettings.BorderSpacing.Left + pnlLeftSettings.BorderSpacing.Right + pnlLeftSettings.BorderSpacing.Around + pnlRightSettings.Constraints.MinWidth + pnlRightSettings.BorderSpacing.Left + pnlRightSettings.BorderSpacing.Right + pnlRightSettings.BorderSpacing.Around; end; { TfrmOptionsFileAssoc.MakeUsInPositionToWorkWithActiveFile } procedure TfrmOptionsFileAssoc.MakeUsInPositionToWorkWithActiveFile; var aFile: TFile; InnerActionList: TExtActionList; IndexOfFirstPossibleFileType: integer; sFileType, sDummy: string; ExtAction: TExtAction; iInsertPosition, iSelectedFileType: integer; InnerFileTypeNameList: TStringList; begin aFile := frmMain.ActiveFrame.CloneActiveFile; if Assigned(aFile) then begin if (not aFile.IsDirectory) and (not aFile.IsLink) and (not (aFile.Extension = '')) then begin InnerActionList := TExtActionList.Create; try if gExts.GetExtActions(aFile, InnerActionList, @IndexOfFirstPossibleFileType) then begin if (IndexOfFirstPossibleFileType <> -1) and (lbFileTypes.Items.Count > IndexOfFirstPossibleFileType) then //Double verification, but unnecessary. begin lbFileTypes.ItemIndex := IndexOfFirstPossibleFileType; lbFileTypesSelectionChange(lbFileTypes, False); lbExts.ItemIndex := lbExts.Items.IndexOf(aFile.Extension); if (lbExts.ItemIndex = -1) and (lbExts.Items.Count > 0) then lbExts.ItemIndex := 0; end; end else begin // Extension of current selected file is not in our file associations list. if gOfferToAddToFileAssociations then begin InnerFileTypeNameList := TStringList.Create; try InnerFileTypeNameList.Assign(lbFileTypes.Items); InnerFileTypeNameList.Insert(0, Format(rsMsgCreateANewFileType, [UpperCase(aFile.Extension)])); if ShowInputListBox(rsMsgTitleExtNotInFileType, Format(rsMsgSekectFileType, [aFile.Extension]), InnerFileTypeNameList, sDummy, iSelectedFileType) then begin if iSelectedFileType <> -1 then begin if iSelectedFileType <> 0 then begin Dec(iSelectedFileType); //1. Select the specified file type lbFileTypes.ItemIndex := iSelectedFileType; lbFileTypesSelectionChange(lbFileTypes, False); //2. Add the extension to listbox AND structure iInsertPosition := lbExts.Items.Add(aFile.Extension); lbExts.ItemIndex := iInsertPosition; Exts.Items[lbFileTypes.ItemIndex].Extensions.Add(aFile.Extension); end else begin sFileType := UpperCase(aFile.Extension) + ' ' + rsSimpleWordFiles; if InputQuery(rsMsgTitleExtNotInFileType, Format(rsMsgEnterNewFileTypeName, [aFile.Extension]), sFileType) then begin //1. Create the file type ExtAction := TExtAction.Create; ExtAction.IconIndex := -1; ExtAction.Name := sFileType; lbFileTypes.Items.AddObject(ExtAction.Name, nil); //2. Add it to our structure AND listbox Exts.AddItem(ExtAction); lbFileTypes.ItemIndex := pred(lbFileTypes.Items.Count); //3. Add the extension to listbox AND structure iInsertPosition := lbExts.Items.Add(aFile.Extension); lbExts.ItemIndex := iInsertPosition; Exts.Items[lbFileTypes.ItemIndex].Extensions.Add(aFile.Extension); //4. Select an action for "open" pmActions.tag := ACTUAL_ADD_ACTION; miActionsClick(miOpenWith); //5. Refresh display to have appropriate button shown. UpdateEnabledButtons; end; end; end; end; finally FreeAndNil(InnerFileTypeNameList); end; end; end; finally FreeAndNil(InnerActionList); end; FreeAndNil(aFile); end; end; end; { TfrmOptionsFileAssoc.CanWeClose } function TfrmOptionsFileAssoc.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedExtSignature = Exts.ComputeSignature);// AND (not FModificationTookPlace); if not Result then begin ShowOptions(TfrmOptionsFileAssoc); Answer := MsgBox(rsMsgFileAssociationsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstooltips.lrt�����������������������������������������������������0000644�0001750�0000144�00000001107�12670351437�020752� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTOOLTIPS.CHKSHOWTOOLTIP.CAPTION=&Show tooltip for files in the file panel TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION=Custom fields by file type TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION=A&dd TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION=D&elete TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION=A&pply TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION=Category &name: TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION=Category &mask: TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION=Category &hint: TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT=Template... TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION=>> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfiletypescolors.pas����������������������������������������������0000644�0001750�0000144�00000022524�12612505011�022274� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File types colors options page Copyright (C) 2006-2012 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsFileTypesColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, ColorBox, Dialogs, Buttons, fOptionsFrame; type { TfrmOptionsFileTypesColors } TfrmOptionsFileTypesColors = class(TOptionsEditor) optColorDialog: TColorDialog; btnAddCategory: TBitBtn; btnApplyCategory: TBitBtn; btnDeleteCategory: TBitBtn; btnCategoryColor: TButton; btnSearchTemplate: TBitBtn; cbCategoryColor: TColorBox; edtCategoryAttr: TEdit; edtCategoryMask: TEdit; edtCategoryName: TEdit; gbFileTypesColors: TGroupBox; lbCategories: TListBox; lblCategoryAttr: TLabel; lblCategoryColor: TLabel; lblCategoryMask: TLabel; lblCategoryName: TLabel; procedure lbCategoriesClick(Sender: TObject); procedure btnSearchTemplateClick(Sender: TObject); procedure btnAddCategoryClick(Sender: TObject); procedure btnApplyCategoryClick(Sender: TObject); procedure btnDeleteCategoryClick(Sender: TObject); procedure btnCategoryColorClick(Sender: TObject); procedure lbCategoriesDragDrop(Sender, Source: TObject; X, Y: Integer); procedure lbCategoriesDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); procedure Clear; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public destructor Destroy; override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses Graphics, uLng, uGlobs, uColorExt, fMaskInputDlg, uSearchTemplate, uDCUtils; { TfrmOptionsFileTypesColors } procedure TfrmOptionsFileTypesColors.lbCategoriesClick(Sender: TObject); var MaskItem : TMaskItem; bEnabled: Boolean; begin if (lbCategories.ItemIndex <> -1) then begin MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); edtCategoryName.Text := MaskItem.sName; edtCategoryMask.Text := MaskItem.sExt; SetColorInColorBox(cbCategoryColor, MaskItem.cColor); bEnabled:= (MaskItem.sExt = '') or (MaskItem.sExt[1] <> '>'); edtCategoryMask.Enabled:= bEnabled; edtCategoryAttr.Enabled:= bEnabled; edtCategoryAttr.Text := MaskItem.sModeStr; end else begin edtCategoryName.Text := ''; edtCategoryMask.Text := ''; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; end; end; procedure TfrmOptionsFileTypesColors.btnSearchTemplateClick(Sender: TObject); var sMask: String; bTemplate: Boolean; begin sMask:= edtCategoryMask.Text; if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate:= IsMaskSearchTemplate(sMask); edtCategoryMask.Text:= sMask; if bTemplate then edtCategoryAttr.Text:= EmptyStr; edtCategoryMask.Enabled:= not bTemplate; edtCategoryAttr.Enabled:= not bTemplate; end; end; procedure TfrmOptionsFileTypesColors.btnAddCategoryClick(Sender: TObject); var iIndex : Integer; MaskItem: TMaskItem; begin if lbCategories.Count = 0 then begin edtCategoryName.Enabled := True; edtCategoryMask.Enabled := True; edtCategoryAttr.Enabled := True; cbCategoryColor.Enabled := True; btnCategoryColor.Enabled := True; btnDeleteCategory.Enabled := True; btnApplyCategory.Enabled := True; end; MaskItem := TMaskItem.Create; try edtCategoryName.Text := 'New'; edtCategoryMask.Text := '*'; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; MaskItem.sName:= edtCategoryName.Text; MaskItem.sExt:= edtCategoryMask.Text; MaskItem.sModeStr:= edtCategoryAttr.Text; MaskItem.cColor:= clBlack; iIndex := lbCategories.Items.AddObject(MaskItem.sName, MaskItem); except FreeAndNil(MaskItem); raise; end; lbCategories.ItemIndex:= iIndex; edtCategoryName.SetFocus; end; procedure TfrmOptionsFileTypesColors.btnApplyCategoryClick(Sender: TObject); var MaskItem : TMaskItem; begin if (lbCategories.ItemIndex <> -1) then begin lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; if edtCategoryMask.Text = '' then edtCategoryMask.Text := '*'; // because we load colors from ini by mask MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); MaskItem.sName := edtCategoryName.Text; MaskItem.cColor := cbCategoryColor.Selected; MaskItem.sExt := edtCategoryMask.Text; MaskItem.sModeStr := edtCategoryAttr.Text; end; end; procedure TfrmOptionsFileTypesColors.btnDeleteCategoryClick(Sender: TObject); begin if (lbCategories.ItemIndex <> -1) then begin lbCategories.Items.Objects[lbCategories.ItemIndex].Free; lbCategories.Items.Delete(lbCategories.ItemIndex); if lbCategories.Count > 0 then lbCategories.ItemIndex := 0; lbCategoriesClick(lbCategories); end; end; procedure TfrmOptionsFileTypesColors.btnCategoryColorClick(Sender: TObject); begin optColorDialog.Color:= cbCategoryColor.Selected; if optColorDialog.Execute then SetColorInColorBox(cbCategoryColor, optColorDialog.Color); end; procedure TfrmOptionsFileTypesColors.lbCategoriesDragDrop(Sender, Source: TObject; X, Y: Integer); var SrcIndex, DestIndex: Integer; begin SrcIndex := lbCategories.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbCategories.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbCategories.Count) then DestIndex := lbCategories.Count - 1; lbCategories.Items.Move(SrcIndex, DestIndex); lbCategories.ItemIndex := DestIndex; end; procedure TfrmOptionsFileTypesColors.lbCategoriesDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Source = lbCategories) and (lbCategories.ItemIndex <> -1); end; procedure TfrmOptionsFileTypesColors.lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); begin with (Control as TListBox) do begin if (not Selected[Index]) and Assigned(Items.Objects[Index]) then begin Canvas.Brush.Color:= gBackColor; Canvas.Font.Color:= TMaskItem(Items.Objects[Index]).cColor; end else begin Canvas.Brush.Color:= gCursorColor; Canvas.Font.Color:= gCursorText; end; Canvas.FillRect(ARect); Canvas.TextOut(ARect.Left+2,ARect.Top,Items[Index]); end; end; procedure TfrmOptionsFileTypesColors.Clear; var i: Integer; begin for i := lbCategories.Count - 1 downto 0 do lbCategories.Items.Objects[i].Free; lbCategories.Clear; end; procedure TfrmOptionsFileTypesColors.Init; begin lbCategories.Canvas.Font := lbCategories.Font; lbCategories.ItemHeight := lbCategories.Canvas.TextHeight('Wg'); end; class function TfrmOptionsFileTypesColors.GetIconIndex: Integer; begin Result := 21; end; class function TfrmOptionsFileTypesColors.GetTitle: String; begin Result := rsOptionsEditorFileTypes; end; procedure TfrmOptionsFileTypesColors.Load; var I : Integer; MaskItem: TMaskItem; begin Clear; lbCategories.Color:= gBackColor; { File lbtypes category color } for I := 0 to gColorExt.Count - 1 do begin MaskItem := TMaskItem.Create; try MaskItem.Assign(gColorExt[I]); lbCategories.Items.AddObject(MaskItem.sName, MaskItem); except FreeAndNil(MaskItem); raise; end; end; // for if lbCategories.Count > 0 then lbCategories.ItemIndex := 0 else begin edtCategoryName.Enabled := False; edtCategoryMask.Enabled := False; edtCategoryAttr.Enabled := False; cbCategoryColor.Enabled := False; btnCategoryColor.Enabled := False; btnDeleteCategory.Enabled := False; btnApplyCategory.Enabled := False; end; lbCategoriesClick(lbCategories); end; function TfrmOptionsFileTypesColors.Save: TOptionsEditorSaveFlags; var i: Integer; MaskItem: TMaskItem; begin Result := []; gColorExt.Clear; for I := 0 to lbCategories.Count - 1 do //write new categories if Assigned(lbCategories.Items.Objects[I]) then begin MaskItem := TMaskItem.Create; try MaskItem.Assign(TMaskItem(lbCategories.Items.Objects[I])); gColorExt.Add(MaskItem); except FreeAndNil(MaskItem); raise; end; end; end; destructor TfrmOptionsFileTypesColors.Destroy; begin Clear; inherited; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfilepanelscolors.lrt���������������������������������������������0000644�0001750�0000144�00000004210�12534542254�022435� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION=T&ext Color: TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION=Bac&kground: TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION=Backg&round 2: TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION=&Mark Color: TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION=C&ursor Color: TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION=Cursor Te&xt: TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION=Inactive Cursor Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION=Inactive Mark Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION=U&se Inverted Selection TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINACTIVESELCOLOR.CAPTION=Use Inactive Sel Color TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION=Use &Frame Cursor TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION=&Brightness level of inactive panel TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION=Drive Free Space Indicator TFRMOPTIONSFILEPANELSCOLORS.CBBUSEGRADIENTIND.CAPTION=Use &Gradient Indicator TFRMOPTIONSFILEPANELSCOLORS.LBLINDCOLOR.CAPTION=&Indicator Fore Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLINDBACKCOLOR.CAPTION=In&dicator Back Color: TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.LBLPREVIEW.CAPTION=Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings. TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION=Cursor border TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION=>> TFRMOPTIONSFILEPANELSCOLORS.BTNRESETTODCDEFAULT.CAPTION=Reset to DC default TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION=Allow Overcolor ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsconfiguration.lrt������������������������������������������������0000644�0001750�0000144�00000001663�12405254001�021734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION=Location of configuration files TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION=P&rogram directory (portable version) TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION=&User home directory TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION=Set on command line TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION=Save on exit TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION=&Directory history TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION=Co&mmand line history TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION=&File mask history TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION=Sa&ve configuration TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION=Searc&h/Replace history TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION=&Edit TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION=A&pply TFRMOPTIONSCONFIGURATION.GBSORTORDERCONFIGURATIONOPTION.CAPTION=Sort order of configuration order in left tree �����������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscustomcolumns.pas������������������������������������������������0000644�0001750�0000144�00000151526�12634337743�022011� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Custom columns options page Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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. } unit fOptionsCustomColumns; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. ComCtrls, Controls, Classes, SysUtils, StdCtrls, ExtCtrls, Forms, ColorBox, Buttons, Spin, Grids, Menus, Dialogs, //DC uColumns, fOptionsFrame {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; type { TfrmOptionsCustomColumns } TfrmOptionsCustomColumns = class(TOptionsEditor) btnAllAllowOverColor: TButton; btnAllBackColor: TButton; btnAllBackColor2: TButton; btnAllCursorColor: TButton; btnAllCursorText: TButton; btnAllFont: TButton; btnAllForeColor: TButton; btnAllInactiveCursorColor: TButton; btnAllInactiveMarkColor: TButton; btnAllMarkColor: TButton; btnAllUseInactiveSelColor: TButton; btnAllUseInvertedSelection: TButton; btnBackColor: TButton; btnBackColor2: TButton; btnGotoSetDefault: TButton; btnSaveAsConfigColumns: TButton; btnCursorBorderColor: TButton; btnCursorColor: TButton; btnCursorText: TButton; btnDeleteConfigColumns: TButton; btnFont: TBitBtn; btnForeColor: TButton; btnInactiveCursorColor: TButton; btnInactiveMarkColor: TButton; btnMarkColor: TButton; btnNext: TButton; btnNewConfig: TButton; btnPrev: TButton; btnRenameConfigColumns: TButton; btnResetAllowOverColor: TButton; btnResetBackColor: TButton; btnResetBackColor2: TButton; btnResetFrameCursor: TButton; btnResetCursorColor: TButton; btnResetCursorText: TButton; btnResetFont: TButton; btnResetCursorBorder: TButton; btnResetForeColor: TButton; btnResetInactiveCursorColor: TButton; btnResetInactiveMarkColor: TButton; btnResetMarkColor: TButton; btnResetUseInactiveSelColor: TButton; btnResetUseInvertedSelection: TButton; btnSaveConfigColumns: TButton; cbAllowOverColor: TCheckBox; cbApplyChangeForAllColumns: TCheckBox; cbBackColor: TColorBox; cbBackColor2: TColorBox; cbConfigColumns: TComboBox; cbCursorBorder: TCheckBox; cbCursorBorderColor: TColorBox; cbCursorColor: TColorBox; cbCursorText: TColorBox; cbForeColor: TColorBox; cbInactiveCursorColor: TColorBox; cbInactiveMarkColor: TColorBox; cbMarkColor: TColorBox; cbUseInactiveSelColor: TCheckBox; cbUseInvertedSelection: TCheckBox; cbUseFrameCursor: TCheckBox; chkUseCustomView: TCheckBox; dlgcolor: TColorDialog; dlgfont: TFontDialog; edtFont: TEdit; lblBackColor: TLabel; lblBackColor2: TLabel; lblConfigColumns: TLabel; lblCurrentColumn: TLabel; lblCursorColor: TLabel; lblCursorText: TLabel; lblFontName: TLabel; lblFontSize: TLabel; lblForeColor: TLabel; lblInactiveCursorColor: TLabel; lblInactiveMarkColor: TLabel; lblMarkColor: TLabel; lblPreviewTop: TLabel; lblWorkingColumn: TLabel; miAddColumn: TMenuItem; pnlCustomColumnsViewSettings: TPanel; pmFields: TPopupMenu; pmStringGrid: TPopupMenu; pnlActualCont: TPanel; pnlConfigColumns: TPanel; pnlGeneralColumnsViewSettings: TPanel; pnlLeft: TPanel; pnlPreviewCont: TPanel; pnlRight: TPanel; sneFontSize: TSpinEdit; spGridArea: TSplitter; spltBetweenPanels: TSplitter; stgColumns: TStringGrid; procedure btnGotoSetDefaultClick(Sender: TObject); procedure FillColumnsList; procedure cbConfigColumnsChange(Sender: TObject); procedure btnSaveConfigColumnsClick(Sender: TObject); procedure btnDeleteConfigColumnsClick(Sender: TObject); procedure UpdatePageInfoFromColumnClass; procedure UpdateColumnClass; procedure stgColumnsSelectEditor(Sender: TObject; aCol, aRow: integer; var Editor: TWinControl); procedure stgColumnsKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure stgColumnsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); procedure stgColumnsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); procedure CreateEditingControls; procedure EditorKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure AddNewField; procedure miAddColumnClick(Sender: TObject); procedure stgSetSelectionAsHintToUser; procedure stgColumnsEditingDone(Sender: TObject); procedure MenuFieldsClick(Sender: TObject); procedure EditorSaveResult(Sender: TObject); procedure CustomSomethingChanged(Sender: TObject); procedure LoadCustColumn(const Index: integer); procedure chkUseCustomViewChange(Sender: TObject); procedure cbCursorBorderChange(Sender: TObject); procedure cbCursorBorderColorChange(Sender: TObject); procedure btnCursorBorderColorClick(Sender: TObject); procedure btnResetCursorBorderClick(Sender: TObject); procedure cbUseFrameCursorChange(Sender: TObject); procedure btnResetFrameCursorClick(Sender: TObject); procedure btnPrevClick(Sender: TObject); procedure btnNextClick(Sender: TObject); procedure cbApplyChangeForAllColumnsChange(Sender: TObject); procedure btnFontClick(Sender: TObject); procedure sneFontSizeChange(Sender: TObject); procedure btnResetFontClick(Sender: TObject); procedure btnAllForeColorClick(Sender: TObject); procedure cbForeColorChange(Sender: TObject); procedure btnForeColorClick(Sender: TObject); procedure btnResetForeColorClick(Sender: TObject); procedure cbBackColorChange(Sender: TObject); procedure btnBackColorClick(Sender: TObject); procedure btnResetBackColorClick(Sender: TObject); procedure cbBackColor2Change(Sender: TObject); procedure btnBackColor2Click(Sender: TObject); procedure btnResetBackColor2Click(Sender: TObject); procedure cbMarkColorChange(Sender: TObject); procedure btnMarkColorClick(Sender: TObject); procedure btnResetMarkColorClick(Sender: TObject); procedure cbCursorColorChange(Sender: TObject); procedure btnCursorColorClick(Sender: TObject); procedure btnResetCursorColorClick(Sender: TObject); procedure cbCursorTextChange(Sender: TObject); procedure btnCursorTextClick(Sender: TObject); procedure btnResetCursorTextClick(Sender: TObject); procedure cbInactiveCursorColorChange(Sender: TObject); procedure btnInactiveCursorColorClick(Sender: TObject); procedure btnResetInactiveCursorColorClick(Sender: TObject); procedure cbInactiveMarkColorChange(Sender: TObject); procedure btnInactiveMarkColorClick(Sender: TObject); procedure btnResetInactiveMarkColorClick(Sender: TObject); procedure cbUseInvertedSelectionChange(Sender: TObject); procedure btnResetUseInvertedSelectionClick(Sender: TObject); procedure cbUseInactiveSelColorChange(Sender: TObject); procedure btnResetUseInactiveSelColorClick(Sender: TObject); procedure cbAllowOvercolorChange(Sender: TObject); procedure btnResetAllowOverColorClick(Sender: TObject); procedure pnlLeftEnter(Sender: TObject); procedure pnlRightEnter(Sender: TObject); procedure OnColumnResized(Sender: TObject; ColumnIndex: integer; ColumnNewsize: integer); {Editors} procedure SpinEditExit(Sender: TObject); procedure SpinEditChange(Sender: TObject); procedure EditExit(Sender: TObject); procedure BitBtnDeleteFieldClick(Sender: TObject); procedure btnAddClick(Sender: TObject); procedure ComboBoxXSelect(Sender: TObject); procedure UpDownXClick(Sender: TObject; Button: TUDBtnType); procedure UpDownXChanging(Sender: TObject; var AllowChange: boolean); private ColPrm: TColPrm; ColumnClass: TPanelColumnsClass; FLastLoadedOptionSignature: dword; PreviewLeftPanel: TColumnsFileView; PreviewRightPanel: TColumnsFileView; updWidth: TSpinEdit; cbbAlign: TComboBox; edtField: TEdit; btnAdd: TButton; btnDel: TBitBtn; updMove: TUpDown; bColumnConfigLoaded: boolean; FUpdating: boolean; ColumnClassOwnership: boolean; IndexRaw: integer; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure Done; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. strutils, Graphics, LCLType, //DC DCStrUtils, fOptions, uShowMsg, uDebug, uFileFunctions, DCOSUtils, uFileSystemFileSource, uDCUtils, uGlobs, uLng, fMain, fOptionsFilePanelsColors; { TfrmOptionsCustomColumns } type THackStringGrid = class(TCustomStringGrid) end; { TfrmOptionsCustomColumns.Load } procedure TfrmOptionsCustomColumns.Load; begin //1. Init some flags bColumnConfigLoaded := False; FUpdating := False; ColumnClassOwnership := True; //2. Create some objects we need for this page. ColPrm := nil; ColumnClass := TPanelColumnsClass.Create; lblPreviewTop.Caption := rsMsgPanelPreview; CreateEditingControls; //3. Load stuff for our preview lblWorkingColumn.Caption := rsConfCustHeader + ':'; PreviewLeftPanel := TColumnsFileView.Create(pnlLeft, TFileSystemFileSource.Create, mbGetCurrentDir); PreviewLeftPanel.OnColumnResized := @Self.OnColumnResized; PreviewLeftPanel.JustForColorPreviewSetActiveState(True); PreviewRightPanel := TColumnsFileView.Create(pnlRight, TFileSystemFileSource.Create, mbGetCurrentDir); PreviewRightPanel.OnColumnResized := @Self.OnColumnResized; PreviewRightPanel.JustForColorPreviewSetActiveState(False); //4. Load our list of columns set. FillColumnsList; //5. Select the one we currently have in the active panel if possible. User won't be lost and it's the most pertinent thing to do. if frmMain.ActiveNotebook.ActiveView.ClassNameIs('TColumnsFileView') then begin cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(TColumnsFileView(frmMain.ActiveNotebook.ActiveView).ActiveColm); pnlLeft.Width := frmMain.ActiveNotebook.Width; end; if (cbConfigColumns.ItemIndex = -1) and (cbConfigColumns.Items.Count > 0) then cbConfigColumns.ItemIndex := 0; //6. We have mostly loaded what needed to be load. bColumnConfigLoaded := True; //7. Now let's show what we've got for that view. cbConfigColumnsChange(cbConfigColumns); //8. Local action cbApplyChangeForAllColumns.Checked := gCustomColumnsChangeAllColumns; end; { TfrmOptionsCustomColumns.Save } function TfrmOptionsCustomColumns.Save: TOptionsEditorSaveFlags; begin gCustomColumnsChangeAllColumns := cbApplyChangeForAllColumns.Checked; btnSaveConfigColumnsClick(btnSaveConfigColumns); Result := []; end; { TfrmOptionsCustomColumns.Done } procedure TfrmOptionsCustomColumns.Done; var i: integer; begin if (ColumnClassOwnership = True) and Assigned(ColumnClass) then FreeAndNil(ColumnClass); if Assigned(PreviewLeftPanel) then FreeAndNil(PreviewLeftPanel); if Assigned(PreviewRightPanel) then FreeAndNil(PreviewRightPanel); // Free TColPrm objects assigned to each row. for i := 0 to stgColumns.RowCount - 1 do begin if Assigned(stgColumns.Objects[6, i]) then begin (stgColumns.Objects[6, i] as TColPrm).Free; stgColumns.Objects[6, i] := nil; end; end; end; { TfrmOptionsCustomColumns.GetIconIndex } class function TfrmOptionsCustomColumns.GetIconIndex: integer; begin Result := 30; end; { TfrmOptionsCustomColumns.GetTitle } class function TfrmOptionsCustomColumns.GetTitle: string; begin Result := rsOptionsEditorCustomColumns; end; { TfrmOptionsCustomColumns.CanWeClose } function TfrmOptionsCustomColumns.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ColumnClass.GetSignature); if not Result then begin ShowOptions(TfrmOptionsCustomColumns); Answer := MsgBox(rsMsgColumnsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; { TfrmOptionsCustomColumns.FillColumnsList } procedure TfrmOptionsCustomColumns.FillColumnsList; begin cbConfigColumns.Clear; if ColSet.Items.Count > 0 then cbConfigColumns.Items.AddStrings(ColSet.Items); end; { TfrmOptionsCustomColumns.btnGotoSetDefaultClick } procedure TfrmOptionsCustomColumns.btnGotoSetDefaultClick(Sender: TObject); begin ShowOptions(TfrmOptionsFilePanelsColors); end; { TfrmOptionsCustomColumns.cbConfigColumnsChange } procedure TfrmOptionsCustomColumns.cbConfigColumnsChange(Sender: TObject); begin if bColumnConfigLoaded then begin ColumnClass.Assign(ColSet.GetColumnSet(cbConfigColumns.ItemIndex)); FLastLoadedOptionSignature := ColumnClass.GetSignature; cbConfigColumns.Enabled := True; btnSaveConfigColumns.Enabled := False; btnRenameConfigColumns.Enabled := True; btnNewConfig.Enabled := True; UpdatePageInfoFromColumnClass; end; end; { TfrmOptionsCustomColumns.btnSaveConfigColumnsClick } procedure TfrmOptionsCustomColumns.btnSaveConfigColumnsClick(Sender: TObject); var ColumnClassForConfig: TPanelColumnsClass; SuggestedCustomColumnsName: string; begin UpdateColumnClass; ColumnClassForConfig := TPanelColumnsClass.Create; //We won't free that one obviously because it's the one that will now be in global application system memory ColumnClassForConfig.Assign(ColumnClass); case TComponent(Sender).tag of 1: // Save. begin ColSet.DeleteColumnSet(cbConfigColumns.ItemIndex); Colset.Insert(cbConfigColumns.ItemIndex, ColumnClassForConfig); cbConfigColumnsChange(cbConfigColumns); end; 2: // Save as. begin SuggestedCustomColumnsName := ColumnClassForConfig.Name + '(' + GetDateTimeInStrEZSortable(now) + ')'; ShowInputQuery(rsOptionsEditorCustomColumns, rsMenuConfigureEnterCustomColumnName, SuggestedCustomColumnsName); if (SuggestedCustomColumnsName = '') or (cbConfigColumns.Items.indexof(SuggestedCustomColumnsName) <> -1) then SuggestedCustomColumnsName := ColumnClassForConfig.Name + '(' + GetDateTimeInStrEZSortable(now) + ')'; ColumnClassForConfig.Name := SuggestedCustomColumnsName; ColSet.Add(ColumnClassForConfig); FillColumnsList; cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end; 3: // New. begin FreeAndNil(ColumnClassForConfig); ColumnClassForConfig := TPanelColumnsClass.Create; ColumnClassForConfig.AddDefaultEverything; ColumnClassForConfig.Name := ColumnClassForConfig.Name + ' (' + GetDateTimeInStrEZSortable(now) + ')'; ColSet.Add(ColumnClassForConfig); FillColumnsList; cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end; 4: // Rename. begin SuggestedCustomColumnsName := cbConfigColumns.Items.Strings[cbConfigColumns.ItemIndex]; if ShowInputQuery(rsOptionsEditorCustomColumns, rsMenuConfigureEnterCustomColumnName, SuggestedCustomColumnsName) then begin if (SuggestedCustomColumnsName <> '') then begin if cbConfigColumns.Items.indexof(SuggestedCustomColumnsName) = -1 then begin ColumnClassForConfig.Name := SuggestedCustomColumnsName; ColSet.DeleteColumnSet(cbConfigColumns.ItemIndex); Colset.Insert(cbConfigColumns.ItemIndex, ColumnClassForConfig); FillColumnsList; cbConfigColumns.ItemIndex := cbConfigColumns.Items.IndexOf(ColumnClassForConfig.Name); cbConfigColumnsChange(cbConfigColumns); end else begin msgError(rsMenuConfigureColumnsAlreadyExists); end; end; end; end; end; end; { TfrmOptionsCustomColumns.btnDeleteConfigColumnsClick } procedure TfrmOptionsCustomColumns.btnDeleteConfigColumnsClick(Sender: TObject); begin if cbConfigColumns.ItemIndex = -1 then exit; if cbConfigColumns.Items.Count = 1 then exit; ColSet.DeleteColumnSet(cbConfigColumns.Items[cbConfigColumns.ItemIndex]); FillColumnsList; cbConfigColumns.ItemIndex := 0; cbConfigColumnsChange(cbConfigColumns); end; { TfrmOptionsCustomColumns.UpdatePageInfoFromColumnClass } // ***Important routine. // Take the initial info from the ColumnClass and organize the form's components to reflect that. procedure TfrmOptionsCustomColumns.UpdatePageInfoFromColumnClass; var I: integer; begin PreviewLeftPanel.ActiveColmSlave := ColumnClass; PreviewLeftPanel.isSlave := True; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := True; if ColumnClass.ColumnsCount > 0 then begin stgColumns.RowCount := ColumnClass.ColumnsCount + 1; for i := 0 to ColumnClass.ColumnsCount - 1 do begin stgColumns.Cells[1, i + 1] := ColumnClass.GetColumnTitle(i); stgColumns.Cells[2, i + 1] := IntToStr(ColumnClass.GetColumnWidth(i)); stgColumns.Cells[3, i + 1] := ColumnClass.GetColumnAlignString(i); stgColumns.Cells[4, i + 1] := ColumnClass.GetColumnFuncString(i); stgColumns.Objects[6, i + 1] := ColumnClass.GetColumnPrm(i); end; end else begin stgColumns.RowCount := 1; AddNewField; end; PreviewLeftPanel.UpdateColumnsView; PreviewRightPanel.UpdateColumnsView; FUpdating := True; chkUseCustomView.Checked := ColumnClass.CustomView; chkUseCustomViewChange(chkUseCustomView); cbCursorBorder.Checked := ColumnClass.UseCursorBorder; SetColorInColorBox(cbCursorBorderColor, ColumnClass.CursorBorderColor); cbUseFrameCursor.Checked := ColumnClass.UseFrameCursor; FUpdating := False; // Localize StringGrid header stgColumns.Cells[0, 0] := rsSimpleWordColumnSingular; stgColumns.Cells[1, 0] := rsConfColCaption; stgColumns.Cells[2, 0] := rsConfColWidth; stgColumns.Cells[3, 0] := rsConfColAlign; stgColumns.Cells[4, 0] := rsConfColFieldCont; stgColumns.Cells[5, 0] := rsConfColMove; stgColumns.Cells[6, 0] := rsConfColDelete; LoadCustColumn(0); end; { TfrmOptionsCustomColumns.UpdateColumnClass } // ***Important routine. Convert the current form components into the current working "ColumnClass". // ***It is not saved to file yet, but if we do, it will be that one! procedure TfrmOptionsCustomColumns.UpdateColumnClass; var i, indx: integer; Tit, FuncString: string; Wid: integer; Ali: TAlignment; CurrentSignature: dword; begin // Save fields ColumnClass.Clear; for i := 1 to stgColumns.RowCount - 1 do begin with stgColumns do begin Tit := Cells[1, i]; Wid := StrToInt(Cells[2, i]); Ali := StrToAlign(Cells[3, i]); FuncString := Cells[4, i]; end; indx := ColumnClass.Add(Tit, FuncString, Wid, Ali); if stgColumns.Objects[6, i] <> nil then ColumnClass.SetColumnPrm(Indx, TColPrm(stgColumns.Objects[6, i])); end; ColumnClass.CustomView := chkUseCustomView.Checked; ColumnClass.UseCursorBorder := cbCursorBorder.Checked; ColumnClass.CursorBorderColor := cbCursorBorderColor.Selected; ColumnClass.UseFrameCursor := cbUseFrameCursor.Checked; ColumnClass.Name := cbConfigColumns.Items.Strings[cbConfigColumns.ItemIndex]; CurrentSignature := ColumnClass.GetSignature; if FLastLoadedOptionSignature = CurrentSignature then begin cbConfigColumns.Enabled := True; cbConfigColumns.Hint := ''; btnSaveConfigColumns.Enabled := False; btnRenameConfigColumns.Enabled := True; btnNewConfig.Enabled := True; end else begin cbConfigColumns.Enabled := False; cbConfigColumns.Hint := rsMenuConfigureColumnsSaveToChange; btnSaveConfigColumns.Enabled := True; btnRenameConfigColumns.Enabled := False; btnNewConfig.Enabled := False; end; PreviewLeftPanel.UpdateColumnsView; PreviewLeftPanel.Reload; PreviewRightPanel.UpdateColumnsView; PreviewRightPanel.Reload; end; { TfrmOptionsCustomColumns.stgColumnsSelectEditor } procedure TfrmOptionsCustomColumns.stgColumnsSelectEditor(Sender: TObject; aCol, aRow: integer; var Editor: TWinControl); begin // Hide '+' button in other columns than 4th (Field contents). if (aCol <> 4) and btnAdd.Visible then btnAdd.Hide; try FUpdating := True; case aCol of 0: // Just the arrow pointing the "active" columns begin Editor := nil; end; 2: // Width begin with updWidth do begin Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Width := (Sender as TStringGrid).ColWidths[aCol]; Value := StrToInt((Sender as TStringGrid).Cells[aCol, aRow]); end; Editor := updWidth; end; 3: // Columns alignment begin with cbbAlign do begin Width := (Sender as TStringGrid).ColWidths[aCol]; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; ItemIndex := Items.IndexOf((Sender as TStringGrid).Cells[aCol, aRow]); end; Editor := cbbAlign; end; 4: // Field contents begin with btnAdd do begin Width := 20; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Tag := aRow; Show; end; with edtField do begin Width := (Sender as TStringGrid).ColWidths[aCol]; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Left; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; Height := (Sender as TStringGrid).RowHeights[aRow]; Text := (Sender as TStringGrid).Cells[aCol, aRow]; end; Editor := edtField; end; 5: // Move columns begin with updMove do begin Height := stgColumns.RowHeights[aRow]; Width := stgColumns.ColWidths[aCol] - 2; Min := -((Sender as TStringGrid).RowCount - 1); Max := -1; Position := -aRow; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; end; Editor := updMove; end; 6: // Delete columns begin // Only show delete button if there is more than one column. if (stgColumns.RowCount - stgColumns.FixedRows) > 1 then begin with btnDel do begin Height := stgColumns.RowHeights[aRow]; Width := stgColumns.ColWidths[aCol] - 2; Left := (Sender as TStringGrid).CellRect(aCol, aRow).Right - Width; Top := (Sender as TStringGrid).CellRect(aCol, aRow).Top; end; Editor := btnDel; end else Editor := nil; end; end; finally if Assigned(Editor) then begin Editor.Tag := aRow; Editor.Hint := IntToStr(aCol); end; FUpdating := False; end; end; { TfrmOptionsCustomColumns.stgColumnsKeyDown } procedure TfrmOptionsCustomColumns.stgColumnsKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if (Key = vk_Down) and (stgColumns.Row = stgColumns.RowCount - 1) then begin AddNewField; end; end; { TfrmOptionsCustomColumns.stgColumnsMouseDown } procedure TfrmOptionsCustomColumns.stgColumnsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); var Col, Row: integer; begin if Y < stgColumns.GridHeight then begin // Clicked on a cell, allow editing. stgColumns.Options := stgColumns.Options + [goEditing]; // Select clicked column in customize colors panel. stgColumns.MouseToCell(X, Y, Col, Row); LoadCustColumn(Row - stgColumns.FixedRows); end else begin // Clicked not on a cell, disable editing. stgColumns.Options := stgColumns.Options - [goEditing]; if btnAdd.Visible then btnAdd.Hide; end; end; { TfrmOptionsCustomColumns.stgColumnsMouseMove } procedure TfrmOptionsCustomColumns.stgColumnsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer); var iCol: integer; StringGrid: THackStringGrid absolute Sender; begin if (StringGrid.fGridState = gsColSizing) then begin if StringGrid.EditorMode then with StringGrid.Editor do begin iCol := StrToInt(Hint); Width := StringGrid.ColWidths[iCol]; Left := StringGrid.CellRect(iCol, StringGrid.Row).Left; end; if btnAdd.Visible then btnAdd.Left := StringGrid.CellRect(4, StringGrid.Row).Right - btnAdd.Width; end; end; { TfrmOptionsCustomColumns.CreateEditingControls } procedure TfrmOptionsCustomColumns.CreateEditingControls; begin // Editing controls are created with no parent-control. // TCustomGrid handles their visibility when they are assigned to Editor property. btnDel := TBitBtn.Create(Self); with btnDel do begin // Glyph.Assign(btnCancel.Glyph); Caption := 'Delete'; OnClick := @BitBtnDeleteFieldClick; end; cbbAlign := TComboBox.Create(Self); with cbbAlign do begin Style := csDropDownList; AddItem('<-', nil); AddItem('->', nil); AddItem('=', nil); OnSelect := @ComboBoxXSelect; OnKeyDown := @EditorKeyDown; end; edtField := TEdit.Create(Self); with edtField do begin OnExit := @EditExit; OnKeyDown := @EditorKeyDown; end; updMove := TUpDown.Create(Self); with updMove do begin OnChanging := @UpDownXChanging; OnClick := @UpDownXClick; end; updWidth := TSpinEdit.Create(Self); with updWidth do begin MinValue := 0; MaxValue := 1000; OnKeyDown := @EditorKeyDown; OnChange := @SpinEditChange; OnExit := @SpinEditExit; end; // Add button displayed in 'Field contents'. btnAdd := TButton.Create(Self); with btnAdd do begin Visible := False; Parent := stgColumns; // set Parent, because this control is shown manually in stgColumns Caption := '+'; OnClick := @btnAddClick; end; end; { TfrmOptionsCustomColumns.EditorKeyDown } procedure TfrmOptionsCustomColumns.EditorKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if Key = VK_RETURN then begin EditorSaveResult(Sender); stgColumns.EditorMode := False; Key := 0; end; end; { TfrmOptionsCustomColumns.AddNewField } procedure TfrmOptionsCustomColumns.AddNewField; begin stgColumns.RowCount := stgColumns.RowCount + 1; stgColumns.Cells[1, stgColumns.RowCount - 1] := EmptyStr; stgColumns.Cells[2, stgColumns.RowCount - 1] := '50'; stgColumns.Cells[3, stgColumns.RowCount - 1] := '<-'; stgColumns.Cells[4, stgColumns.RowCount - 1] := ''; stgColumns.Objects[6, stgColumns.RowCount - 1] := TColPrm.Create; UpdateColumnClass; end; { TfrmOptionsCustomColumns.miAddColumnClick } procedure TfrmOptionsCustomColumns.miAddColumnClick(Sender: TObject); begin AddNewField; end; { TfrmOptionsCustomColumns.SpinEditExit } procedure TfrmOptionsCustomColumns.SpinEditExit(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.SpinEditChange } procedure TfrmOptionsCustomColumns.SpinEditChange(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.EditExit } procedure TfrmOptionsCustomColumns.EditExit(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.BitBtnDeleteFieldClick } procedure TfrmOptionsCustomColumns.BitBtnDeleteFieldClick(Sender: TObject); var RowNr: integer; begin RowNr := (Sender as TBitBtn).Tag; // Free TColPrm object assigned to the row. if Assigned(stgColumns.Objects[6, RowNr]) then begin (stgColumns.Objects[6, RowNr] as TColPrm).Free; stgColumns.Objects[6, RowNr] := nil; end; stgColumns.DeleteColRow(False, RowNr); EditorSaveResult(Sender); if RowNr = stgColumns.RowCount then // The last row was deleted, load previous column. LoadCustColumn(RowNr - stgColumns.FixedRows - 1) else // Load next column (RowNr will point to it after deleting). LoadCustColumn(RowNr - stgColumns.FixedRows); end; { TfrmOptionsCustomColumns.btnAddAddClick } procedure TfrmOptionsCustomColumns.btnAddClick(Sender: TObject); var Point: TPoint; begin // Fill column fields menu FillContentFieldMenu(pmFields.Items, @MenuFieldsClick); // Show popup menu Point.x := (Sender as TButton).Left - 25; Point.y := (Sender as TButton).Top + (Sender as TButton).Height + 40; Point := ClientToScreen(Point); pmFields.PopUp(Point.X, Point.Y); end; { TfrmOptionsCustomColumns.ComboBoxXSelect } procedure TfrmOptionsCustomColumns.ComboBoxXSelect(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.UpDownXClick } procedure TfrmOptionsCustomColumns.UpDownXClick(Sender: TObject; Button: TUDBtnType); begin stgColumns.ExchangeColRow(False, updMove.Tag, abs(updMove.Position)); with updMove do begin Left := stgColumns.CellRect(5, abs(updMove.Position)).Right - Width; Top := stgColumns.CellRect(5, abs(updMove.Position)).Top; end; EditorSaveResult(Sender); LoadCustColumn(abs(updMove.Position) - 1); end; { TfrmOptionsCustomColumns.UpDownXChanging } procedure TfrmOptionsCustomColumns.UpDownXChanging(Sender: TObject; var AllowChange: boolean); begin updMove.tag := abs(updMove.Position); EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.stgSetSelectionAsHintToUser } procedure TfrmOptionsCustomColumns.stgSetSelectionAsHintToUser; var CellToSelect: TGridRect; begin CellToSelect.Left := 1; // Column for the name. CellToSelect.Right := 1; CellToSelect.Top := IndexRaw + 1; // Actual column of the view. This will give a visual hint to current column edited. CellToSelect.Bottom := IndexRaw + 1; stgColumns.Options := stgColumns.Options + [goRangeSelect, goSelectionActive]; // So we can change current grid selection. stgColumns.Selection := CellToSelect; stgColumns.Options := stgColumns.Options - [goRangeSelect, goSelectionActive]; // To place it back like original author wanted. stgColumns.SetFocus; end; { TfrmOptionsCustomColumns.stgColumnsEditingDone } procedure TfrmOptionsCustomColumns.stgColumnsEditingDone(Sender: TObject); begin EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.MenuFieldsClick } procedure TfrmOptionsCustomColumns.MenuFieldsClick(Sender: TObject); var MenuItem: TMenuItem absolute Sender; begin if Length(stgColumns.Cells[1, btnAdd.Tag]) = 0 then begin if MenuItem.Tag = 0 then stgColumns.Cells[1, btnAdd.Tag] := Copy(MenuItem.Caption, 1, Pos('(', MenuItem.Caption) - 3) else stgColumns.Cells[1, btnAdd.Tag] := MenuItem.Caption; end; case MenuItem.Tag of 0: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[DC().' + MenuItem.Hint + '{}] '; end; 1: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Caption + '{}] '; end; 2: begin stgColumns.Cells[4, btnAdd.Tag] := stgColumns.Cells[4, btnAdd.Tag] + '[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}] '; end; end; EditorSaveResult(Sender); end; { TfrmOptionsCustomColumns.EditorSaveResult } procedure TfrmOptionsCustomColumns.EditorSaveResult(Sender: TObject); begin if not FUpdating then begin if Sender is TSpinEdit then stgColumns.Cells[2, (Sender as TSpinEdit).Tag] := IntToStr(updWidth.Value); if Sender is TComboBox then stgColumns.Cells[3, (Sender as TComboBox).Tag] := (Sender as TComboBox).Text; if Sender is TEdit then stgColumns.Cells[4, (Sender as TEdit).Tag] := (Sender as TEdit).Text; UpdateColumnClass; end; end; { TfrmOptionsCustomColumns.CustomSomethingChanged } procedure TfrmOptionsCustomColumns.CustomSomethingChanged(Sender: TObject); begin if cbApplyChangeForAllColumns.Checked then btnAllForeColorClick(Sender) else EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.LoadCustColumn } procedure TfrmOptionsCustomColumns.LoadCustColumn(const Index: integer); var InnerUpdateStateToBeRestored: boolean; iRow: integer; begin if (Index >= stgColumns.RowCount - 1) or (Index < 0) then exit; IndexRaw := Index; ColPrm := TColPrm(stgColumns.Objects[6, IndexRaw + 1]); InnerUpdateStateToBeRestored := FUpdating; FUpdating := True; for iRow := 1 to pred(stgColumns.RowCount) do stgColumns.Cells[0, iRow] := strutils.ifthen(iRow = (IndexRaw + 1), '--->', EmptyStr); lblCurrentColumn.Caption := ColumnClass.GetColumnTitle(IndexRaw); edtFont.Text := ColumnClass.GetColumnFontName(IndexRaw); sneFontSize.Value := ColumnClass.GetColumnFontSize(IndexRaw); SetColorInColorBox(cbForeColor, ColumnClass.GetColumnTextColor(IndexRaw)); SetColorInColorBox(cbBackColor, ColumnClass.GetColumnBackground(IndexRaw)); SetColorInColorBox(cbBackColor2, ColumnClass.GetColumnBackground2(IndexRaw)); SetColorInColorBox(cbMarkColor, ColumnClass.GetColumnMarkColor(IndexRaw)); SetColorInColorBox(cbCursorColor, ColumnClass.GetColumnCursorColor(IndexRaw)); SetColorInColorBox(cbCursorText, ColumnClass.GetColumnCursorText(IndexRaw)); SetColorInColorBox(cbInactiveCursorColor, ColumnClass.GetColumnInactiveCursorColor(IndexRaw)); SetColorInColorBox(cbInactiveMarkColor, ColumnClass.GetColumnInactiveMarkColor(IndexRaw)); cbAllowOverColor.Checked := ColumnClass.GetColumnOvercolor(IndexRaw); cbUseInvertedSelection.Checked := ColumnClass.GetColumnUseInvertedSelection(IndexRaw); cbUseInactiveSelColor.Checked := ColumnClass.GetColumnUseInactiveSelColor(IndexRaw); FUpdating := InnerUpdateStateToBeRestored; end; { TfrmOptionsCustomColumns.chkUseCustomViewChange } procedure TfrmOptionsCustomColumns.chkUseCustomViewChange(Sender: TObject); begin pnlCustomColumnsViewSettings.Visible := chkUseCustomView.Checked; btnGotoSetDefault.Visible := not chkUseCustomView.Checked; EditorSaveResult(nil); if chkUsecustomView.Checked then LoadCustColumn(0); end; { TfrmOptionsCustomColumns.cbCursorBorderChange } procedure TfrmOptionsCustomColumns.cbCursorBorderChange(Sender: TObject); begin cbCursorBorderColor.Enabled := cbCursorBorder.Checked and cbCursorBorder.Enabled; btnCursorBorderColor.Enabled := cbCursorBorder.Checked and cbCursorBorder.Enabled; if cbCursorBorder.Checked and cbCursorBorder.Enabled then cbCursorBorderColor.Font.Color := clDefault else cbCursorBorderColor.Font.Color := clInactiveCaption; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorBorderColorChange } procedure TfrmOptionsCustomColumns.cbCursorBorderColorChange(Sender: TObject); begin if Assigned(ColPrm) then begin EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnCursorBorderColorClick } procedure TfrmOptionsCustomColumns.btnCursorBorderColorClick(Sender: TObject); begin dlgcolor.Color := cbCursorBorderColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorBorderColor, dlgcolor.Color); EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorBorderClick } procedure TfrmOptionsCustomColumns.btnResetCursorBorderClick(Sender: TObject); begin cbCursorBorder.Checked := gUseCursorBorder; SetColorInColorBox(cbCursorBorderColor, gCursorBorderColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbUseFrameCursorChange } procedure TfrmOptionsCustomColumns.cbUseFrameCursorChange(Sender: TObject); begin cbCursorBorder.Enabled := not cbUseFrameCursor.Checked; lblCursorText.Enabled := not cbUseFrameCursor.Checked; cbCursorText.Enabled := not cbUseFrameCursor.Checked; btnCursorText.Enabled := not cbUseFrameCursor.Checked; btnResetCursorText.Enabled := not cbUseFrameCursor.Checked; btnAllCursorText.Enabled := not cbUseFrameCursor.Checked and not cbApplyChangeForAllColumns.Checked; btnResetCursorBorder.Enabled := not cbUseFrameCursor.Checked; if not cbUseFrameCursor.Checked then cbCursorText.Font.Color := clDefault else cbCursorText.Font.Color := clInactiveCaption; cbCursorBorderChange(cbCursorBorder); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.btnResetFrameCursorClick } procedure TfrmOptionsCustomColumns.btnResetFrameCursorClick(Sender: TObject); begin cbUseFrameCursor.Checked := gUseFrameCursor; EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.btnPrevClick } procedure TfrmOptionsCustomColumns.btnPrevClick(Sender: TObject); begin if IndexRaw > 0 then LoadCustColumn(IndexRaw - 1) else LoadCustColumn(stgColumns.RowCount - 2); stgSetSelectionAsHintToUser; end; { TfrmOptionsCustomColumns.btnNextClick } procedure TfrmOptionsCustomColumns.btnNextClick(Sender: TObject); begin if IndexRaw < (stgColumns.RowCount - 2) then LoadCustColumn(IndexRaw + 1) else LoadCustColumn(0); stgSetSelectionAsHintToUser; end; { TfrmOptionsCustomColumns.cbApplyChangeForAllColumnsChange } procedure TfrmOptionsCustomColumns.cbApplyChangeForAllColumnsChange(Sender: TObject); begin if cbApplyChangeForAllColumns.Checked then begin btnAllBackColor.Enabled := False; btnAllBackColor2.Enabled := False; btnAllCursorColor.Enabled := False; btnAllCursorText.Enabled := False; btnAllFont.Enabled := False; btnAllInactiveCursorColor.Enabled := False; btnAllInactiveMarkColor.Enabled := False; btnAllMarkColor.Enabled := False; btnAllForeColor.Enabled := False; btnAllAllowOverColor.Enabled := False; btnAllUseInvertedSelection.Enabled := False; btnAllUseInactiveSelColor.Enabled := False; end else begin btnAllBackColor.Enabled := True; btnAllBackColor2.Enabled := True; btnAllCursorColor.Enabled := True; btnAllCursorText.Enabled := True; btnAllFont.Enabled := True; btnAllMarkColor.Enabled := True; btnAllForeColor.Enabled := True; btnAllAllowOverColor.Enabled := True; btnAllUseInvertedSelection.Enabled := True; btnAllUseInactiveSelColor.Enabled := True; btnAllInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; end; end; { TfrmOptionsCustomColumns.btnFontClick } procedure TfrmOptionsCustomColumns.btnFontClick(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin with TColPrm(stgColumns.Objects[6, IndexRaw + 1]) do begin dlgfont.Font.Name := FontName; dlgfont.Font.Size := FontSize; dlgfont.Font.Style := FontStyle; if dlgfont.Execute then begin edtFont.Text := dlgfont.Font.Name; sneFontSize.Value := dlgfont.Font.Size; FontName := dlgfont.Font.Name; FontSize := dlgfont.Font.Size; FontStyle := dlgfont.Font.Style; CustomSomethingChanged(Sender); end; end; end; end; { TfrmOptionsCustomColumns.sneFontSizeChange } procedure TfrmOptionsCustomColumns.sneFontSizeChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize := sneFontSize.Value; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetFontClick } procedure TfrmOptionsCustomColumns.btnResetFontClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontName := gFonts[dcfMain].Name; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize := gFonts[dcfMain].Size; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontStyle := gFonts[dcfMain].Style; edtFont.Text := gFonts[dcfMain].Name; sneFontSize.Value := gFonts[dcfMain].Size; CustomSomethingChanged(Sender); end; { TfrmOptionsCustomColumns.btnAllForeColorClick } procedure TfrmOptionsCustomColumns.btnAllForeColorClick(Sender: TObject); var i: integer; begin for i := 1 to pred(stgColumns.RowCount) do case TComponent(Sender).tag of 0: begin TColPrm(stgColumns.Objects[6, i]).FontName := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontName; TColPrm(stgColumns.Objects[6, i]).FontSize := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontSize; TColPrm(stgColumns.Objects[6, i]).FontStyle := TColPrm(stgColumns.Objects[6, IndexRaw + 1]).FontStyle; end; 1: TColPrm(stgColumns.Objects[6, i]).TextColor := cbForeColor.Selected; 2: TColPrm(stgColumns.Objects[6, i]).Background := cbBackColor.Selected; 3: TColPrm(stgColumns.Objects[6, i]).Background2 := cbBackColor2.Selected; 4: TColPrm(stgColumns.Objects[6, i]).MarkColor := cbMarkColor.Selected; 5: TColPrm(stgColumns.Objects[6, i]).CursorColor := cbCursorColor.Selected; 6: TColPrm(stgColumns.Objects[6, i]).CursorText := cbCursorText.Selected; 7: TColPrm(stgColumns.Objects[6, i]).InactiveCursorColor := cbInactiveCursorColor.Selected; 8: TColPrm(stgColumns.Objects[6, i]).InactiveMarkColor := cbInactiveMarkColor.Selected; 9: TColPrm(stgColumns.Objects[6, i]).UseInvertedSelection := cbUseInvertedSelection.Checked; 10: TColPrm(stgColumns.Objects[6, i]).UseInactiveSelColor := cbUseInactiveSelColor.Checked; 11: TColPrm(stgColumns.Objects[6, i]).Overcolor := cbAllowOverColor.Checked; end; UpdateColumnClass; end; { TfrmOptionsCustomColumns.cbForeColorChange } procedure TfrmOptionsCustomColumns.cbForeColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.TextColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnForeColorClick } procedure TfrmOptionsCustomColumns.btnForeColorClick(Sender: TObject); begin dlgcolor.Color := cbForeColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbForeColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).TextColor := cbForeColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetForeColorClick } procedure TfrmOptionsCustomColumns.btnResetForeColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).TextColor := gForeColor; SetColorInColorBox(cbForeColor, gForeColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbBackColorChange } procedure TfrmOptionsCustomColumns.cbBackColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.Background := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnBackColorClick } procedure TfrmOptionsCustomColumns.btnBackColorClick(Sender: TObject); begin dlgcolor.Color := cbBackColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbBackColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background := cbBackColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetBackColorClick } procedure TfrmOptionsCustomColumns.btnResetBackColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background := gBackColor; SetColorInColorBox(cbBackColor, gBackColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbBackColor2Change } procedure TfrmOptionsCustomColumns.cbBackColor2Change(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.Background2 := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnBackColor2Click } procedure TfrmOptionsCustomColumns.btnBackColor2Click(Sender: TObject); begin dlgcolor.Color := cbBackColor2.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbBackColor2, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background2 := cbBackColor2.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetBackColor2Click } procedure TfrmOptionsCustomColumns.btnResetBackColor2Click(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Background2 := gBackColor2; SetColorInColorBox(cbBackColor2, gBackColor2); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbMarkColorChange } procedure TfrmOptionsCustomColumns.cbMarkColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.MarkColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnMarkColorClick } procedure TfrmOptionsCustomColumns.btnMarkColorClick(Sender: TObject); begin dlgcolor.Color := cbMarkColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbMarkColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).MarkColor := cbMarkColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetMarkColorClick } procedure TfrmOptionsCustomColumns.btnResetMarkColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).MarkColor := gMarkColor; SetColorInColorBox(cbMarkColor, gMarkColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorColorChange } procedure TfrmOptionsCustomColumns.cbCursorColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.CursorColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnCursorColorClick } procedure TfrmOptionsCustomColumns.btnCursorColorClick(Sender: TObject); begin dlgcolor.Color := cbCursorColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorColor := cbCursorColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorColorClick } procedure TfrmOptionsCustomColumns.btnResetCursorColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorColor := gCursorColor; SetColorInColorBox(cbCursorColor, gCursorColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbCursorTextChange } procedure TfrmOptionsCustomColumns.cbCursorTextChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.CursorText := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnCursorTextClick } procedure TfrmOptionsCustomColumns.btnCursorTextClick(Sender: TObject); begin dlgcolor.Color := cbCursorText.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbCursorText, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorText := cbCursorText.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetCursorTextClick } procedure TfrmOptionsCustomColumns.btnResetCursorTextClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).CursorText := gCursorText; SetColorInColorBox(cbCursorText, gCursorText); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbInactiveCursorColorChange } procedure TfrmOptionsCustomColumns.cbInactiveCursorColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.InactiveCursorColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnInactiveCursorColorClick } procedure TfrmOptionsCustomColumns.btnInactiveCursorColorClick(Sender: TObject); begin dlgcolor.Color := cbInactiveCursorColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbInactiveCursorColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveCursorColor := cbInactiveCursorColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetInactiveCursorColorClick } procedure TfrmOptionsCustomColumns.btnResetInactiveCursorColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveCursorColor := gInactiveCursorColor; SetColorInColorBox(cbInactiveCursorColor, gInactiveCursorColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbInactiveMarkColorChange } procedure TfrmOptionsCustomColumns.cbInactiveMarkColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin ColPrm.InactiveMarkColor := (Sender as TColorBox).Selected; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnInactiveMarkColorClick } procedure TfrmOptionsCustomColumns.btnInactiveMarkColorClick(Sender: TObject); begin dlgcolor.Color := cbInactiveMarkColor.Selected; if dlgcolor.Execute then begin SetColorInColorBox(cbInactiveMarkColor, dlgcolor.Color); TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveMarkColor := cbInactiveMarkColor.Selected; EditorSaveResult(nil); end; end; { TfrmOptionsCustomColumns.btnResetInactiveMarkColorClick } procedure TfrmOptionsCustomColumns.btnResetInactiveMarkColorClick(Sender: TObject); begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).InactiveMarkColor := gInactiveMarkColor; SetColorInColorBox(cbInactiveMarkColor, gInactiveMarkColor); EditorSaveResult(nil); end; { TfrmOptionsCustomColumns.cbUseInvertedSelectionChange } procedure TfrmOptionsCustomColumns.cbUseInvertedSelectionChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).UseInvertedSelection := cbUseInvertedSelection.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetUseInvertedSelectionClick } procedure TfrmOptionsCustomColumns.btnResetUseInvertedSelectionClick(Sender: TObject); begin cbUseInvertedSelection.Checked := gUseInvertedSelection; cbUseInvertedSelectionChange(cbUseInvertedSelection); end; { TfrmOptionsCustomColumns.cbUseInactiveSelColorChange } procedure TfrmOptionsCustomColumns.cbUseInactiveSelColorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin lblInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; cbInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnResetInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveCursorColor.Enabled := cbUseInactiveSelColor.Checked; lblInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; cbInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnResetInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; btnAllInactiveMarkColor.Enabled := cbUseInactiveSelColor.Checked; TColPrm(stgColumns.Objects[6, IndexRaw + 1]).UseInactiveSelColor := cbUseInactiveSelColor.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetUseInactiveSelColorClick } procedure TfrmOptionsCustomColumns.btnResetUseInactiveSelColorClick(Sender: TObject); begin cbUseInactiveSelColor.Checked := gUSeInactiveSelColor; cbUseInactiveSelColorChange(cbUseInactiveSelColor); end; { TfrmOptionsCustomColumns.cbAllowOvercolorChange } procedure TfrmOptionsCustomColumns.cbAllowOvercolorChange(Sender: TObject); begin if Assigned(ColPrm) and (not FUpdating) then begin TColPrm(stgColumns.Objects[6, IndexRaw + 1]).Overcolor := cbAllowOverColor.Checked; CustomSomethingChanged(Sender); end; end; { TfrmOptionsCustomColumns.btnResetAllowOverColorClick } procedure TfrmOptionsCustomColumns.btnResetAllowOverColorClick(Sender: TObject); begin cbAllowOverColor.Checked := gAllowOverColor; cbAllowOvercolorChange(cbAllowOverColor); end; { TfrmOptionsCustomColumns.pnlLeftEnter } procedure TfrmOptionsCustomColumns.pnlLeftEnter(Sender: TObject); begin PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsCustomColumns.pnlRightEnter } procedure TfrmOptionsCustomColumns.pnlRightEnter(Sender: TObject); begin PreviewLeftPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsCustomColumns.OnColumnResized } procedure TfrmOptionsCustomColumns.OnColumnResized(Sender: TObject; ColumnIndex: integer; ColumnNewsize: integer); begin if ColumnIndex < pred(stgColumns.RowCount) then begin stgColumns.Cells[2, 1 + ColumnIndex] := IntToStr(ColumnNewSize); EditorSaveResult(Sender); //To like everywhere here, but it's not absolutely necessary... end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdriveslistbutton.lrt���������������������������������������������0000644�0001750�0000144�00000000405�12020403374�022504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSDRIVESLISTBUTTON.GBDRIVESLIST.CAPTION=Drives list TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWLABEL.CAPTION=Show &label TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWFILESYSTEM.CAPTION=Show &file system TFRMOPTIONSDRIVESLISTBUTTON.CBSHOWFREESPACE.CAPTION=Show fr&ee space �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsconfiguration.lfm������������������������������������������������0000644�0001750�0000144�00000012702�12405254001�021705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsConfiguration: TfrmOptionsConfiguration Height = 374 Width = 594 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 374 ClientWidth = 594 DesignLeft = 627 DesignTop = 278 object gbLocConfigFiles: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 91 Top = 6 Width = 582 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Location of configuration files' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 5 ChildSizing.VerticalSpacing = 5 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 73 ClientWidth = 578 TabOrder = 0 object rbProgramDir: TRadioButton Left = 10 Height = 19 Top = 5 Width = 212 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'P&rogram directory (portable version)' Checked = True TabOrder = 0 TabStop = True end object rbUserHomeDir: TRadioButton Left = 10 Height = 19 Top = 29 Width = 127 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = '&User home directory' TabOrder = 1 end object lblCmdLineConfigDir: TLabel Left = 10 Height = 15 Top = 53 Width = 113 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Set on command line' ParentColor = False Visible = False end end object gbSaveOnExit: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnConfigEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 131 Top = 139 Width = 582 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Save on exit' ChildSizing.TopBottomSpacing = 5 ClientHeight = 113 ClientWidth = 578 TabOrder = 3 object cbDirHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkSearchReplaceHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 47 Width = 107 BorderSpacing.Top = 2 Caption = '&Directory history' TabOrder = 2 end object cbCmdLineHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = cbDirHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 68 Width = 138 BorderSpacing.Top = 2 Caption = 'Co&mmand line history' TabOrder = 3 end object cbFileMaskHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = cbCmdLineHistory AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 89 Width = 108 BorderSpacing.Top = 2 Caption = '&File mask history' TabOrder = 4 end object chkSaveConfiguration: TCheckBox AnchorSideLeft.Control = gbSaveOnExit AnchorSideTop.Control = gbSaveOnExit Left = 10 Height = 19 Top = 5 Width = 119 BorderSpacing.Left = 10 Caption = 'Sa&ve configuration' OnChange = chkSaveConfigurationChange TabOrder = 0 end object chkSearchReplaceHistory: TCheckBox AnchorSideLeft.Control = chkSaveConfiguration AnchorSideTop.Control = chkSaveConfiguration AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 26 Width = 140 BorderSpacing.Top = 2 Caption = 'Searc&h/Replace history' TabOrder = 1 end end object btnConfigEdit: TBitBtn[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLocConfigFiles AnchorSideTop.Side = asrBottom Left = 10 Height = 30 Top = 103 Width = 116 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&Edit' OnClick = btnConfigEditClick TabOrder = 1 end object btnConfigApply: TBitBtn[3] AnchorSideLeft.Control = btnConfigEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbLocConfigFiles AnchorSideTop.Side = asrBottom Left = 136 Height = 30 Top = 103 Width = 116 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'A&pply' Enabled = False OnClick = btnConfigApplyClick TabOrder = 2 end object gbSortOrderConfigurationOption: TRadioGroup[4] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSaveOnExit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 67 Top = 270 Width = 582 Anchors = [akTop, akLeft, akRight] AutoFill = True Caption = 'Sort order of configuration order in left tree' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 49 ClientWidth = 578 ItemIndex = 0 Items.Strings = ( 'Classic, legacy order' 'Alphabetic order (but language still first)' ) OnClick = gbSortOrderConfigurationOptionClick TabOrder = 4 end end ��������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsautorefresh.pas��������������������������������������������������0000644�0001750�0000144�00000006472�11740433676�021423� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Auto-refresh options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsAutoRefresh; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, fOptionsFrame; type { TfrmOptionsAutoRefresh } TfrmOptionsAutoRefresh = class(TOptionsEditor) cbWatchAttributesChange: TCheckBox; cbWatchExcludeDirs: TCheckBox; cbWatchFileNameChange: TCheckBox; cbWatchOnlyForeground: TCheckBox; edtWatchExcludeDirs: TEdit; gbAutoRefreshDisable: TGroupBox; gbAutoRefreshEnable: TGroupBox; procedure cbWatchExcludeDirsChange(Sender: TObject); procedure OnAutoRefreshOptionChanged(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsAutoRefresh } procedure TfrmOptionsAutoRefresh.cbWatchExcludeDirsChange(Sender: TObject); begin edtWatchExcludeDirs.Enabled := cbWatchExcludeDirs.Checked; end; procedure TfrmOptionsAutoRefresh.OnAutoRefreshOptionChanged(Sender: TObject); begin gbAutoRefreshDisable.Enabled := cbWatchFileNameChange.Checked or cbWatchAttributesChange.Checked; end; class function TfrmOptionsAutoRefresh.GetIconIndex: Integer; begin Result := 15; end; class function TfrmOptionsAutoRefresh.GetTitle: String; begin Result := rsOptionsEditorAutoRefresh; end; procedure TfrmOptionsAutoRefresh.Load; begin cbWatchFileNameChange.Checked := (watch_file_name_change in gWatchDirs); cbWatchAttributesChange.Checked := (watch_attributes_change in gWatchDirs); cbWatchOnlyForeground.Checked := (watch_only_foreground in gWatchDirs); cbWatchExcludeDirs.Checked := (watch_exclude_dirs in gWatchDirs); edtWatchExcludeDirs.Text := gWatchDirsExclude; OnAutoRefreshOptionChanged(nil); cbWatchExcludeDirsChange(nil); end; function TfrmOptionsAutoRefresh.Save: TOptionsEditorSaveFlags; begin Result := []; gWatchDirs := []; // Reset watch options if cbWatchFileNameChange.Checked then Include(gWatchDirs, watch_file_name_change); if cbWatchAttributesChange.Checked then Include(gWatchDirs, watch_attributes_change); if cbWatchOnlyForeground.Checked then Include(gWatchDirs, watch_only_foreground); if cbWatchExcludeDirs.Checked then Include(gWatchDirs, watch_exclude_dirs); gWatchDirsExclude:= edtWatchExcludeDirs.Text; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolseditor.pas��������������������������������������������������0000644�0001750�0000144�00000005310�12650521504�021416� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tools options page for the editor tool Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsToolsEditor; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, Dialogs, Buttons, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsEditor } TfrmOptionsEditor = class(TfrmOptionsToolBase) chkShowSpecialChars: TCheckBox; gbInternalEditor: TGroupBox; chkScrollPastEndLine: TCheckBox; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses SynEdit, uGlobs, uLng; { TfrmOptionsEditor } procedure TfrmOptionsEditor.Init; begin ExternalTool := etEditor; inherited Init; end; procedure TfrmOptionsEditor.Load; begin inherited Load; chkScrollPastEndLine.Checked:= eoScrollPastEoL in gEditorSynEditOptions; chkShowSpecialChars.Checked:= eoShowSpecialChars in gEditorSynEditOptions; end; function TfrmOptionsEditor.Save: TOptionsEditorSaveFlags; procedure UpdateOptionFromBool(AValue: Boolean; AnOption: TSynEditorOption); begin if AValue then gEditorSynEditOptions := gEditorSynEditOptions + [AnOption] else gEditorSynEditOptions := gEditorSynEditOptions - [AnOption]; end; begin Result:= inherited Save; UpdateOptionFromBool(chkScrollPastEndLine.Checked, eoScrollPastEoL); UpdateOptionFromBool(chkShowSpecialChars.Checked, eoShowSpecialChars); end; constructor TfrmOptionsEditor.Create(TheOwner: TComponent); begin inherited Create(TheOwner); Name := 'frmOptionsEditor'; end; class function TfrmOptionsEditor.GetIconIndex: Integer; begin Result := 10; end; class function TfrmOptionsEditor.GetTitle: String; begin Result := rsToolEditor; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscolumnsview.pas��������������������������������������������������0000644�0001750�0000144�00000005351�11740427612�021433� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Columns files view options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsColumnsView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls; type { TfrmOptionsColumnsView } TfrmOptionsColumnsView = class(TOptionsEditor) cbCutTextToColWidth: TCheckBox; cbGridHorzLine: TCheckBox; cbGridVertLine: TCheckBox; chkAutoFillColumns: TCheckBox; cmbAutoSizeColumn: TComboBox; gbShowGrid: TGroupBox; grpMisc: TGroupBox; grpAutosizeColumns: TGroupBox; lblAutoSizeColumn: TLabel; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsColumnsView } procedure TfrmOptionsColumnsView.Init; begin ParseLineToList(rsOptAutoSizeColumn, cmbAutoSizeColumn.Items); end; procedure TfrmOptionsColumnsView.Load; begin cbGridVertLine.Checked := gGridVertLine; cbGridHorzLine.Checked := gGridHorzLine; chkAutoFillColumns.Checked := gAutoFillColumns; cmbAutoSizeColumn.ItemIndex := gAutoSizeColumn; cbCutTextToColWidth.Checked := gCutTextToColWidth; end; function TfrmOptionsColumnsView.Save: TOptionsEditorSaveFlags; begin gGridVertLine := cbGridVertLine.Checked; gGridHorzLine := cbGridHorzLine.Checked; gAutoFillColumns := chkAutoFillColumns.Checked; gAutoSizeColumn := cmbAutoSizeColumn.ItemIndex; gCutTextToColWidth := cbCutTextToColWidth.Checked; Result := []; end; class function TfrmOptionsColumnsView.GetIconIndex: Integer; begin Result := 13; end; class function TfrmOptionsColumnsView.GetTitle: String; begin Result := rsOptionsEditorColumnsView; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstools.lfm��������������������������������������������������������0000644�0001750�0000144�00000014514�12650237762�020222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsViewer: TfrmOptionsViewer Height = 513 Width = 586 ClientHeight = 513 ClientWidth = 586 DesignLeft = 384 DesignTop = 288 inherited edtToolsParameters: TEdit Top = 113 end inherited fneToolsPath: TFileNameEdit Top = 61 end inherited lblToolsPath: TLabel Height = 15 Width = 144 end inherited lblToolsParameters: TLabel Height = 15 Top = 94 Width = 117 end inherited cbToolsKeepTerminalOpen: TCheckBox Top = 169 end inherited cbToolsRunInTerminal: TCheckBox Top = 148 end inherited btnRelativeToolPath: TSpeedButton Top = 61 end object gbViewerBookMode: TGroupBox[8] AnchorSideLeft.Control = fneToolsPath AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = fneToolsPath AnchorSideRight.Side = asrBottom Left = 8 Height = 250 Top = 200 Width = 525 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 10 Caption = 'Viewer Book Mode' ChildSizing.TopBottomSpacing = 6 ClientHeight = 230 ClientWidth = 521 TabOrder = 5 object lblBackgroundColorViewerBook: TLabel AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbBackgroundColorViewerBook Left = 8 Height = 15 Top = 12 Width = 174 Caption = '&Background color in book viewer' FocusControl = cbBackgroundColorViewerBook ParentColor = False end object seNumberColumnsViewer: TSpinEdit AnchorSideLeft.Control = cbFontColorViewerBook AnchorSideTop.Control = cbFontColorViewerBook AnchorSideTop.Side = asrBottom Left = 202 Height = 23 Top = 62 Width = 36 BorderSpacing.Top = 5 MaxValue = 3 MinValue = 1 OnChange = seNumberColumnsViewerChange TabOrder = 5 Value = 1 end object lblNumberColumnsViewer: TLabel AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideTop.Control = seNumberColumnsViewer AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 66 Width = 187 Caption = '&Number of columns in book viewer' FocusControl = seNumberColumnsViewer ParentColor = False end object gbViewerExample: TGroupBox AnchorSideLeft.Control = gbViewerBookMode AnchorSideTop.Control = lblNumberColumnsViewer AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbViewerBookMode AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = seNumberColumnsViewer AnchorSideBottom.Side = asrBottom Left = 8 Height = 135 Top = 89 Width = 505 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 8 Caption = 'Example' ClientHeight = 115 ClientWidth = 501 TabOrder = 4 object pbViewerBook: TPaintBox Left = 5 Height = 105 Top = 5 Width = 491 Align = alClient BorderSpacing.Around = 5 OnPaint = pbViewerBookPaint end end object btnFontViewerColor: TButton AnchorSideLeft.Control = cbFontColorViewerBook AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFontColorViewerBook AnchorSideRight.Control = btnBackViewerColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbFontColorViewerBook AnchorSideBottom.Side = asrBottom Left = 481 Height = 22 Top = 35 Width = 24 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 Caption = '>>' OnClick = btnFontViewerColorClick TabOrder = 3 end object btnBackViewerColor: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideBottom.Control = cbBackgroundColorViewerBook AnchorSideBottom.Side = asrBottom Left = 481 Height = 22 Top = 8 Width = 24 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 5 Caption = '>>' OnClick = btnBackViewerColorClick TabOrder = 1 end object cbFontColorViewerBook: TColorBox AnchorSideLeft.Control = cbBackgroundColorViewerBook AnchorSideTop.Control = cbBackgroundColorViewerBook AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbBackgroundColorViewerBook AnchorSideRight.Side = asrBottom Left = 202 Height = 22 Top = 35 Width = 275 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 5 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 2 end object lblFontColorViewerBook: TLabel AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideTop.Control = cbFontColorViewerBook AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 39 Width = 134 BorderSpacing.Top = 10 Caption = '&Font color in book viewer' FocusControl = cbFontColorViewerBook ParentColor = False end object cbBackgroundColorViewerBook: TColorBox AnchorSideLeft.Control = lblBackgroundColorViewerBook AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = btnBackViewerColor Left = 202 Height = 22 Top = 8 Width = 275 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 0 end end inherited pmPathHelper: TPopupMenu[9] left = 528 top = 168 end object optColorDialog: TColorDialog[10] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) left = 16 top = 128 end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/fquicksearch.lfm���������������������������������������������������������0000644�0001750�0000144�00000011502�12470100066�017724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmQuickSearch: TfrmQuickSearch Left = 0 Height = 43 Top = 0 Width = 436 AutoSize = True ClientHeight = 43 ClientWidth = 436 OnExit = FrameExit TabOrder = 0 DesignLeft = 134 DesignTop = 120 object edtSearch: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = tglFilter Left = 2 Height = 23 Hint = 'Enter text to search for or filter by' Top = 2 Width = 211 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 2 OnChange = edtSearchChange OnKeyDown = edtSearchKeyDown ParentShowHint = False ShowHint = True TabOrder = 0 end object tglFilter: TToggleBox AnchorSideTop.Control = edtSearch AnchorSideRight.Control = pnlOptions AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 215 Height = 23 Hint = 'Toggle between search or filter' Top = 2 Width = 46 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 2 Caption = 'Filter' OnChange = tglFilterChange ParentShowHint = False ShowHint = True TabOrder = 1 TabStop = False end object btnCancel: TButton AnchorSideTop.Control = edtSearch AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 399 Height = 23 Hint = 'Close filter panel' Top = 2 Width = 33 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 4 Cancel = True Caption = 'X' OnClick = btnCancelClick ParentShowHint = False ShowHint = True TabOrder = 3 TabStop = False end object pnlOptions: TPanel AnchorSideTop.Control = edtSearch AnchorSideRight.Control = btnCancel AnchorSideBottom.Control = edtSearch AnchorSideBottom.Side = asrBottom Left = 263 Height = 23 Top = 2 Width = 132 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Right = 4 BevelOuter = bvNone ClientHeight = 23 ClientWidth = 132 TabOrder = 2 object sbMatchBeginning: TSpeedButton AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideTop.Side = asrCenter Left = 0 Height = 24 Hint = 'Match Beginning' Top = -1 Width = 24 AllowAllUp = True Caption = '{' GroupIndex = 1 OnClick = sbMatchBeginningClick ShowHint = True ParentShowHint = False end object sbMatchEnding: TSpeedButton AnchorSideLeft.Control = sbMatchBeginning AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 26 Height = 24 Hint = 'Match Ending' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 Caption = '}' GroupIndex = 2 OnClick = sbMatchEndingClick ShowHint = True ParentShowHint = False end object sbCaseSensitive: TSpeedButton AnchorSideLeft.Control = sbMatchEnding AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 54 Height = 24 Hint = 'Case Sensitive' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Caption = 'Aa' GroupIndex = 3 OnClick = sbCaseSensitiveClick ShowHint = True ParentShowHint = False end object sbFiles: TSpeedButton AnchorSideLeft.Control = sbCaseSensitive AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 82 Height = 24 Hint = 'Files' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 Caption = 'F' GroupIndex = 4 OnClick = sbFilesAndDirectoriesClick ShowHint = True ParentShowHint = False end object sbDirectories: TSpeedButton AnchorSideLeft.Control = sbFiles AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbMatchBeginning AnchorSideBottom.Control = sbMatchBeginning AnchorSideBottom.Side = asrBottom Left = 108 Height = 24 Hint = 'Directories' Top = -1 Width = 24 AllowAllUp = True Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 Caption = 'D' GroupIndex = 5 OnClick = sbFilesAndDirectoriesClick ShowHint = True ParentShowHint = False end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsbriefview.lfm����������������������������������������������������0000644�0001750�0000144�00000005645�12513776740�021053� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsBriefView: TfrmOptionsBriefView Height = 289 Width = 519 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 289 ClientWidth = 519 DesignLeft = 497 DesignTop = 187 object gbShowFileExt: TGroupBox[0] Left = 6 Height = 62 Top = 6 Width = 507 Align = alTop AutoSize = True Caption = 'Show file extensions' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 2 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 42 ClientWidth = 503 TabOrder = 0 object rbDirectly: TRadioButton Left = 6 Height = 19 Top = 2 Width = 491 Caption = 'di&rectly after filename' Checked = True TabOrder = 1 TabStop = True end object rbAligned: TRadioButton Left = 6 Height = 19 Top = 21 Width = 491 Caption = 'ali&gned (with Tab)' TabOrder = 0 end end object gbColumns: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowFileExt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbShowFileExt AnchorSideRight.Side = asrBottom Left = 6 Height = 89 Top = 68 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Columns size' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 69 ClientWidth = 503 TabOrder = 1 object rbUseAutoSize: TRadioButton Left = 6 Height = 19 Top = 2 Width = 130 Caption = 'Auto' Checked = True TabOrder = 0 TabStop = True end object lblStub: TLabel Left = 136 Height = 19 Top = 2 Width = 50 ParentColor = False end object rbUseFixedWidth: TRadioButton Left = 6 Height = 23 Top = 21 Width = 130 Caption = 'Fixed columns width' TabOrder = 1 end object speUseFixedWidth: TSpinEdit Left = 136 Height = 23 Top = 21 Width = 50 MaxValue = 1000 MinValue = 1 TabOrder = 2 Value = 1 end object rbUseFixedCount: TRadioButton Left = 6 Height = 23 Top = 44 Width = 130 Caption = 'Fixed columns count' TabOrder = 3 end object speUseFixedCount: TSpinEdit Left = 136 Height = 23 Top = 44 Width = 50 MinValue = 1 TabOrder = 4 Value = 1 end end end �������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstools.pas��������������������������������������������������������0000644�0001750�0000144�00000011774�12650521504�020222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tools options page Copyright (C) 2006-2014 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsTools; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, ColorBox, Dialogs, Types, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsViewer } TfrmOptionsViewer = class(TfrmOptionsToolBase) btnBackViewerColor: TButton; btnFontViewerColor: TButton; cbBackgroundColorViewerBook: TColorBox; cbFontColorViewerBook: TColorBox; gbViewerBookMode: TGroupBox; gbViewerExample: TGroupBox; lblBackgroundColorViewerBook: TLabel; lblFontColorViewerBook: TLabel; lblNumberColumnsViewer: TLabel; optColorDialog: TColorDialog; pbViewerBook: TPaintBox; seNumberColumnsViewer: TSpinEdit; procedure btnBackViewerColorClick(Sender: TObject); procedure btnFontViewerColorClick(Sender: TObject); procedure cbColorBoxChange(Sender: TObject); procedure seNumberColumnsViewerChange(Sender: TObject); procedure pbViewerBookPaint(Sender: TObject); private FPreviewTextSize: TSize; procedure UseExternalProgramChanged(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uDCUtils, uGlobs, uLng; const ViewerBookPreviewText = 'Text'; { TfrmOptionsViewer } procedure TfrmOptionsViewer.btnBackViewerColorClick(Sender: TObject); begin optColorDialog.Color:= cbBackgroundColorViewerBook.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackgroundColorViewerBook, optColorDialog.Color); end; end; procedure TfrmOptionsViewer.btnFontViewerColorClick(Sender: TObject); begin optColorDialog.Color:= cbFontColorViewerBook.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbFontColorViewerBook, optColorDialog.Color); end; end; procedure TfrmOptionsViewer.cbColorBoxChange(Sender: TObject); begin pbViewerBook.Repaint; end; procedure TfrmOptionsViewer.seNumberColumnsViewerChange(Sender: TObject); begin pbViewerBook.Repaint; end; procedure TfrmOptionsViewer.pbViewerBookPaint(Sender: TObject); var i, numb: integer; begin with pbViewerBook.Canvas do begin Brush.Color := cbBackgroundColorViewerBook.Selected; Font.Color := cbFontColorViewerBook.Selected; FillRect(0, 0, pbViewerBook.Width, pbViewerBook.Height); for i:= 0 to seNumberColumnsViewer.Value - 1 do begin for numb:= 0 to 1 do TextOut(i * (FPreviewTextSize.cx + 5) + 5, FPreviewTextSize.cy * numb + 4, ViewerBookPreviewText); end; end; end; procedure TfrmOptionsViewer.UseExternalProgramChanged(Sender: TObject); begin gbViewerBookMode.Enabled := not (cbToolsUseExternalProgram.Checked); lblBackgroundColorViewerBook.Enabled := not (cbToolsUseExternalProgram.Checked); lblNumberColumnsViewer.Enabled := not (cbToolsUseExternalProgram.Checked); lblFontColorViewerBook.Enabled := not (cbToolsUseExternalProgram.Checked); end; class function TfrmOptionsViewer.GetIconIndex: Integer; begin Result := 22; end; class function TfrmOptionsViewer.GetTitle: String; begin Result := rsToolViewer; end; procedure TfrmOptionsViewer.Init; begin ExternalTool := etViewer; OnUseExternalProgramChange := @UseExternalProgramChanged; gbViewerBookMode.Enabled := not (cbToolsUseExternalProgram.Checked); pbViewerBook.Font.Name := gFonts[dcfViewerBook].Name; pbViewerBook.Font.Size := gFonts[dcfViewerBook].Size; pbViewerBook.Font.Style := gFonts[dcfViewerBook].Style; inherited Init; FPreviewTextSize := pbViewerBook.Canvas.TextExtent(ViewerBookPreviewText); end; procedure TfrmOptionsViewer.Load; begin inherited; seNumberColumnsViewer.Value := gColCount; SetColorInColorBox(cbBackgroundColorViewerBook,gBookBackgroundColor); SetColorInColorBox(cbFontColorViewerBook,gBookFontColor); end; function TfrmOptionsViewer.Save: TOptionsEditorSaveFlags; begin Result := inherited; gColCount := seNumberColumnsViewer.Value; gBookBackgroundColor := cbBackgroundColorViewerBook.Selected; gBookFontColor := cbFontColorViewerBook.Selected; end; end. ����doublecmd-0.7.1/src/frames/foptionstabs.lfm���������������������������������������������������������0000644�0001750�0000144�00000020276�12660674103�020010� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsTabs: TfrmOptionsTabs Height = 492 Width = 731 ClientHeight = 492 ClientWidth = 731 DesignLeft = 147 DesignTop = 342 object gbTabs: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 434 Top = 6 Width = 719 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 Caption = 'Folder tabs headers' ChildSizing.TopBottomSpacing = 6 ClientHeight = 414 ClientWidth = 715 TabOrder = 0 object lblChar: TLabel AnchorSideLeft.Control = edtTabsLimitLength AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtTabsLimitLength AnchorSideTop.Side = asrCenter Left = 239 Height = 15 Top = 58 Width = 54 BorderSpacing.Left = 6 Caption = 'characters' ParentColor = False end object lblTabsPosition: TLabel AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cmbTabsPosition AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 360 Width = 71 BorderSpacing.Top = 14 Caption = 'Ta&bs position' FocusControl = cmbTabsPosition ParentColor = False end object cbTabsAlwaysVisible: TCheckBox AnchorSideLeft.Control = gbTabs AnchorSideTop.Control = gbTabs Left = 12 Height = 19 Top = 6 Width = 274 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = '&Show tab header also when there is only one tab' TabOrder = 0 end object cbTabsMultiLines: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsAlwaysVisible AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 31 Width = 136 BorderSpacing.Top = 6 Caption = '&Tabs on multiple lines' TabOrder = 1 end object cbTabsLimitOption: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsMultiLines AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 56 Width = 141 BorderSpacing.Top = 6 Caption = '&Limit tab title length to' TabOrder = 2 end object edtTabsLimitLength: TEdit AnchorSideLeft.Control = cbTabsLimitOption AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTabsLimitOption AnchorSideTop.Side = asrCenter Left = 153 Height = 23 Top = 54 Width = 80 TabOrder = 3 end object cbTabsOpenForeground: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsCloseDuplicateWhenClosing AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 156 Width = 218 BorderSpacing.Top = 6 Caption = 'Ctrl+&Up opens new tab in foreground' TabOrder = 7 end object cbTabsConfirmCloseAll: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsConfirmCloseLocked AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 106 Width = 134 BorderSpacing.Top = 6 Caption = 'Con&firm close all tabs' TabOrder = 5 end object cbTabsLockedAsterisk: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsShowCloseButton AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 256 Width = 204 BorderSpacing.Top = 6 Caption = 'Show locked tabs &with an asterisk *' TabOrder = 11 end object cbTabsActivateOnClick: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbKeepRenamedNameBackToNormal AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 306 Width = 302 BorderSpacing.Top = 6 Caption = 'Activate target &panel when clicking on one of its Tabs' TabOrder = 13 end object cbTabsShowCloseButton: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsReuseTabWhenPossible AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 231 Width = 138 BorderSpacing.Top = 6 Caption = 'Show ta&b close button' TabOrder = 10 end object cmbTabsPosition: TComboBox AnchorSideLeft.Control = lblTabsPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTabsShowDriveLetter AnchorSideTop.Side = asrBottom Left = 89 Height = 23 Top = 356 Width = 100 BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 6 ItemHeight = 15 Items.Strings = ( 'Top' 'Bottom' ) Style = csDropDownList TabOrder = 15 end object cbTabsOpenNearCurrent: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsOpenForeground AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 181 Width = 186 BorderSpacing.Top = 6 Caption = 'Open &new tabs near current tab' TabOrder = 8 end object cbTabsCloseDuplicateWhenClosing: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsConfirmCloseAll AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 131 Width = 261 BorderSpacing.Top = 6 Caption = 'Close duplicate tabs when closing application' TabOrder = 6 end object cbTabsShowDriveLetter: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsActivateOnClick AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 331 Width = 203 BorderSpacing.Top = 6 Caption = 'Always show drive letter in tab title' TabOrder = 14 Visible = False end object cbTabsReuseTabWhenPossible: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsOpenNearCurrent AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 206 Width = 192 BorderSpacing.Top = 6 Caption = 'Reuse existing tab when possible' TabOrder = 9 end object cbTabsConfirmCloseLocked: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsLimitOption AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 81 Width = 157 BorderSpacing.Top = 6 Caption = 'Confirm close locked tabs' TabOrder = 4 end object cbKeepRenamedNameBackToNormal: TCheckBox AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsLockedAsterisk AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 281 Width = 246 BorderSpacing.Top = 6 Caption = 'Keep renamed name when unlocking a tab' TabOrder = 12 end object lblTabsActionOnDoubleClick: TLabel AnchorSideLeft.Control = cbTabsAlwaysVisible AnchorSideTop.Control = cbTabsActionOnDoubleClick AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 389 Width = 214 Caption = 'Action to do when double click on a tab:' ParentColor = False end object cbTabsActionOnDoubleClick: TComboBox AnchorSideLeft.Control = lblTabsActionOnDoubleClick AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cmbTabsPosition AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbTabs AnchorSideRight.Side = asrBottom Left = 232 Height = 23 Top = 385 Width = 477 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ItemHeight = 15 Items.Strings = ( 'Do nothing' 'Close tab' 'Access Favorite Tabs' 'Tabs popup menu' ) Style = csDropDownList TabOrder = 16 end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfonts.pas��������������������������������������������������������0000644�0001750�0000144�00000020323�12510227505�020200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Fonts options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsFonts; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, Dialogs, Graphics, fOptionsFrame, uGlobs; type { TfrmOptionsFonts } TfrmOptionsFonts = class(TOptionsEditor) btnSelEditFnt: TButton; btnSelLogFnt: TButton; btnSelConsoleFnt: TButton; btnSelMainFnt: TButton; btnSelViewerBookFnt: TButton; btnSelViewFnt: TButton; dlgFnt: TFontDialog; edtEditorFont: TEdit; edtEditorFontSize: TSpinEdit; edtLogFont: TEdit; edtConsoleFont: TEdit; edtLogFontSize: TSpinEdit; edtConsoleFontSize: TSpinEdit; edtMainFont: TEdit; edtMainFontSize: TSpinEdit; edtViewerBookFont: TEdit; edtViewerBookFontSize: TSpinEdit; edtViewerFont: TEdit; edtViewerFontSize: TSpinEdit; lblEditorFont: TLabel; lblLogFont: TLabel; lblConsoleFont: TLabel; lblMainFont: TLabel; lblViewerBookFont: TLabel; lblViewerFont: TLabel; procedure btnSelConsoleFntClick(Sender: TObject); procedure btnSelEditFntClick(Sender: TObject); procedure btnSelMainFntClick(Sender: TObject); procedure btnSelViewFntClick(Sender: TObject); procedure btnSelLogFntClick(Sender: TObject); procedure btnSelViewerBookFntClick(Sender: TObject); procedure edtConsoleFontSizeChange(Sender: TObject); procedure edtEditorFontExit(Sender: TObject); procedure edtEditorFontSizeChange(Sender: TObject); procedure edtLogFontExit(Sender: TObject); procedure edtMainFontExit(Sender: TObject); procedure edtMainFontSizeChange(Sender: TObject); procedure edtViewerBookFontExit(Sender: TObject); procedure edtViewerFontExit(Sender: TObject); procedure edtViewerFontSizeChange(Sender: TObject); procedure edtLogFontSizeChange(Sender: TObject); procedure edtViewerBookFontSizeChange(Sender: TObject); private procedure LoadFont(aDCFont:TDCFont); procedure SaveFont(aDCFont:TDCFont); // function GetFont(aDCFont:TDCFont):TFont; procedure SetFont(aDCFont:TDCFont;aFont:TFont); procedure SetFontSize(aDCFont:TDCFont;aFontSize:Integer); procedure SetFontName(aDCFont:TDCFont;aFontName:String); // procedure RunDialogFont(aDCFont:TDCFont); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uLng; { TfrmOptionsFonts } procedure TfrmOptionsFonts.btnSelMainFntClick(Sender: TObject); begin RunDialogFont(dcfMain); end; procedure TfrmOptionsFonts.btnSelEditFntClick(Sender: TObject); begin RunDialogFont(dcfEditor); end; procedure TfrmOptionsFonts.btnSelConsoleFntClick(Sender: TObject); begin RunDialogFont(dcfConsole); end; procedure TfrmOptionsFonts.btnSelViewFntClick(Sender: TObject); begin RunDialogFont(dcfViewer); end; procedure TfrmOptionsFonts.btnSelViewerBookFntClick(Sender: TObject); begin RunDialogFont(dcfViewerBook); end; procedure TfrmOptionsFonts.edtConsoleFontSizeChange(Sender: TObject); begin SetFontSize(dcfConsole, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.btnSelLogFntClick(Sender: TObject); begin RunDialogFont(dcfLog); end; procedure TfrmOptionsFonts.edtMainFontExit(Sender: TObject); begin SetFontName(dcfMain, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtEditorFontExit(Sender: TObject); begin SetFontName(dcfEditor, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtViewerFontExit(Sender: TObject); begin SetFontName(dcfViewer, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtViewerBookFontExit(Sender: TObject); begin SetFontName(dcfViewerBook, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtLogFontExit(Sender: TObject); begin SetFontName(dcfLog, TEdit(Sender).Text); end; procedure TfrmOptionsFonts.edtMainFontSizeChange(Sender: TObject); begin SetFontSize(dcfMain, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtEditorFontSizeChange(Sender: TObject); begin SetFontSize(dcfEditor, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtViewerFontSizeChange(Sender: TObject); begin SetFontSize(dcfViewer, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtViewerBookFontSizeChange(Sender: TObject); begin SetFontSize(dcfViewerBook, TSpinEdit(Sender).Value); end; procedure TfrmOptionsFonts.edtLogFontSizeChange(Sender: TObject); begin SetFontSize(dcfLog, TSpinEdit(Sender).Value); end; class function TfrmOptionsFonts.GetIconIndex: Integer; begin Result := 3; end; class function TfrmOptionsFonts.GetTitle: String; begin Result := rsOptionsEditorFonts; end; procedure TfrmOptionsFonts.Load; begin LoadFont(dcfMain); LoadFont(dcfEditor); LoadFont(dcfViewer); LoadFont(dcfLog); LoadFont(dcfViewerBook); LoadFont(dcfConsole); end; function TfrmOptionsFonts.Save: TOptionsEditorSaveFlags; begin Result := []; SaveFont(dcfMain); SaveFont(dcfEditor); SaveFont(dcfViewer); SaveFont(dcfLog); SaveFont(dcfViewerBook); SaveFont(dcfConsole); end; procedure TfrmOptionsFonts.LoadFont(aDCFont: TDCFont); var xFont:TFont; begin xFont:=TFont.Create; try FontOptionsToFont(gFonts[aDCFont], xFont); SetFont(aDCFont, xFont); finally FreeAndNil(xFont); end; end; procedure TfrmOptionsFonts.SaveFont(aDCFont: TDCFont); begin FontToFontOptions(GetFont(aDCFont), gFonts[aDCFont]); end; procedure TfrmOptionsFonts.SetFont(aDCFont: TDCFont; aFont: TFont); begin case aDCFont of dcfMain: begin edtMainFont.Font := aFont; edtMainFont.Text := aFont.Name; edtMainFontSize.Value := aFont.Size; end; dcfEditor: begin edtEditorFont.Font := aFont; edtEditorFont.Text := aFont.Name; edtEditorFontSize.Value := aFont.Size; end; dcfViewer: begin edtViewerFont.Font := aFont; edtViewerFont.Text := aFont.Name; edtViewerFontSize.Value := aFont.Size; end; dcfLog: begin edtLogFont.Font := aFont; edtLogFont.Text := aFont.Name; edtLogFontSize.Value := aFont.Size; end; dcfViewerBook: begin edtViewerBookFont.Font := aFont; edtViewerBookFont.Text := aFont.Name; edtViewerBookFontSize.Value := aFont.Size; end; dcfConsole: begin edtConsoleFont.Font := aFont; edtConsoleFont.Text := aFont.Name; edtConsoleFontSize.Value := aFont.Size; end; end; end; procedure TfrmOptionsFonts.SetFontSize(aDCFont: TDCFont; aFontSize: Integer); begin GetFont(aDCFont).Size:=aFontSize; end; procedure TfrmOptionsFonts.SetFontName(aDCFont: TDCFont; aFontName: String); begin GetFont(aDCFont).Name:=aFontName; end; function TfrmOptionsFonts.GetFont(aDCFont: TDCFont): TFont; begin case aDCFont of dcfMain : Result := edtMainFont.Font; dcfEditor : Result := edtEditorFont.Font; dcfViewer : Result := edtViewerFont.Font; dcfLog : Result := edtLogFont.Font; dcfViewerBook: Result := edtViewerBookFont.Font; dcfConsole : Result := edtConsoleFont.Font; else Result := nil; // TODO: show error for programmer end; end; procedure TfrmOptionsFonts.RunDialogFont(aDCFont: TDCFont); begin dlgFnt.Font := GetFont(aDCFont); if not (aDCFont in [dcfMain, dcfViewerBook]) then begin dlgFnt.Options:= dlgFnt.Options + [fdFixedPitchOnly]; end; if dlgFnt.Execute then SetFont(aDCFont, dlgFnt.Font); dlgFnt.Options:= dlgFnt.Options - [fdFixedPitchOnly]; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsgroups.pas�������������������������������������������������������0000644�0001750�0000144�00000004011�11740433676�020376� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Options groups Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsGroups; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, fOptionsFrame; type { TOptionsGroup } TOptionsGroup = class(TOptionsEditor) public class function IsEmpty: Boolean; override; end; { TOptionsColorsGroup } TOptionsColorsGroup = class(TOptionsGroup) public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; { TOptionsToolsGroup } TOptionsToolsGroup = class(TOptionsGroup) public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation uses uLng; { TOptionsGroup } class function TOptionsGroup.IsEmpty: Boolean; begin Result := True; end; { TOptionsToolsGroup } class function TOptionsToolsGroup.GetIconIndex: Integer; begin Result := 2; end; class function TOptionsToolsGroup.GetTitle: String; begin Result := rsOptionsEditorTools; end; { TOptionsColorsGroup } class function TOptionsColorsGroup.GetIconIndex: Integer; begin Result := 4; end; class function TOptionsColorsGroup.GetTitle: String; begin Result := rsOptionsEditorColors; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileoperations.lrt�����������������������������������������������0000644�0001750�0000144�00000003764�12573073054�022131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILEOPERATIONS.GBUSERINTERFACE.CAPTION=User interface TFRMOPTIONSFILEOPERATIONS.LBLPROGRESSKIND.CAPTION=Show operations progress &initially in TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION=D&rop readonly flag TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION=Select &file name without extension when renaming TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION=Sho&w tab select panel in copy/move dialog TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION=Dele&te to recycle bin (Shift key reverses this setting) TFRMOPTIONSFILEOPERATIONS.CBCOPYCONFIRMATION.CAPTION=Cop&y operation TFRMOPTIONSFILEOPERATIONS.CBMOVECONFIRMATION.CAPTION=&Move operation TFRMOPTIONSFILEOPERATIONS.CBDELETECONFIRMATION.CAPTION=&Delete operation TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASHCONFIRMATION.CAPTION=D&elete to trash operation TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION=Show confirmation window for: TFRMOPTIONSFILEOPERATIONS.GBEXECUTINGOPERATIONS.CAPTION=Executing operations TFRMOPTIONSFILEOPERATIONS.LBLBUFFERSIZE.CAPTION=&Buffer size for file operations (in KB): TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION=&Number of wipe passes: TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION=&Process comments with files/folders TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION=S&kip file operations errors and write them to log window TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION=Duplicated name auto-rename style: TFRMOPTIONSFILEOPERATIONS.LBLHASHBUFFERSIZE.CAPTION=Buffer size for &hash calculation (in KB): TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION=File search TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION=Use memory mapping for search te&xt in files TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION=&Use stream for search text in files TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION=&Search for part of file name TFRMOPTIONSFILEOPERATIONS.DBTEXTSEARCH.CAPTION=Text search in files TFRMOPTIONSFILEOPERATIONS.LBLSEARCHDEFAULTTEMPLATE.CAPTION=Default search template: ������������doublecmd-0.7.1/src/frames/foptionsdragdrop.lfm�����������������������������������������������������0000644�0001750�0000144�00000007443�12454457622�020670� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsDragDrop: TfrmOptionsDragDrop Height = 467 Width = 845 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 467 ClientWidth = 845 DesignLeft = 65 DesignTop = 245 object cbShowConfirmationDialog: TCheckBox[0] Left = 8 Height = 24 Top = 8 Width = 270 Caption = '&Show confirmation dialog after drop' OnChange = GenericSomethingChanged TabOrder = 0 end object gbTextDragAndDropRelatedOptions: TGroupBox[1] AnchorSideLeft.Control = cbShowConfirmationDialog AnchorSideTop.Control = cbShowConfirmationDialog AnchorSideTop.Side = asrBottom Left = 8 Height = 238 Top = 44 Width = 617 AutoSize = True BorderSpacing.Top = 12 Caption = 'When drag && dropping text into panels:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 219 ClientWidth = 613 TabOrder = 1 Visible = False object lblMostDesiredTextFormat1: TLabel Left = 6 Height = 17 Top = 6 Width = 410 Caption = 'Place the most desired format on top of list (use dag && drop):' ParentColor = False end object lblMostDesiredTextFormat2: TLabel AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblMostDesiredTextFormat1 AnchorSideTop.Side = asrBottom Left = 6 Height = 17 Top = 23 Width = 449 Caption = '(if the most desired is not present, we''ll take second one and so on)' ParentColor = False end object lbMostDesiredTextFormat: TListBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblMostDesiredTextFormat2 AnchorSideTop.Side = asrBottom Left = 6 Height = 72 Top = 40 Width = 208 DragMode = dmAutomatic Items.Strings = ( 'Rich test' 'HTML text' 'Unicode text' 'ANSI text' ) ItemHeight = 23 OnDragDrop = lbMostDesiredTextFormatDragDrop OnDragOver = lbMostDesiredTextFormatDragOver ScrollWidth = 190 TabOrder = 0 end object cbDragAndDropAskFormatEachTime: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lbMostDesiredTextFormat AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Top = 112 Width = 454 Caption = 'From all the supported formats, ask which one to use every time' OnChange = GenericSomethingChanged TabOrder = 1 end object cbDragAndDropTextAutoFilename: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = lblWarningForAskFormat AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Top = 165 Width = 601 BorderSpacing.Top = 12 Caption = 'When dropping text, generate filename automatically (otherwise will prompt the user)' OnChange = GenericSomethingChanged TabOrder = 2 end object cbDragAndDropSaveUnicodeTextInUFT8: TCheckBox AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = cbDragAndDropTextAutoFilename AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Top = 189 Width = 522 Caption = 'When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)' OnChange = GenericSomethingChanged TabOrder = 3 end object lblWarningForAskFormat: TLabel AnchorSideLeft.Control = lblMostDesiredTextFormat1 AnchorSideTop.Control = cbDragAndDropAskFormatEachTime AnchorSideTop.Side = asrBottom Left = 6 Height = 17 Top = 136 Width = 489 Caption = '(will not work with some source application, so try to uncheck if problem)' ParentColor = False end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionskeyboard.lfm�����������������������������������������������������0000644�0001750�0000144�00000006337�12020403374�020647� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsKeyboard: TfrmOptionsKeyboard Height = 223 Width = 429 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 223 ClientWidth = 429 DesignTop = 20 object gbTyping: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 103 Top = 6 Width = 417 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Typing' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 85 ClientWidth = 413 TabOrder = 0 object lblNoModifier: TLabel Left = 8 Height = 13 Top = 8 Width = 84 Caption = '&Letters' FocusControl = cbNoModifier ParentColor = False end object cbNoModifier: TComboBox AnchorSideLeft.Control = lblNoModifier AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblNoModifier AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 102 Height = 24 Top = 2 Width = 303 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 0 Items.Strings = ( 'None' 'Command Line' 'Quick Search' 'Quick Filter' ) Style = csDropDownList TabOrder = 0 end object lblAlt: TLabel Left = 8 Height = 13 Top = 33 Width = 84 Caption = 'Alt+L&etters' FocusControl = cbAlt ParentColor = False end object lblCtrlAlt: TLabel Left = 8 Height = 13 Top = 58 Width = 84 Caption = 'Ctrl+Alt+Le&tters' FocusControl = cbCtrlAlt ParentColor = False end object cbAlt: TComboBox AnchorSideLeft.Control = lblAlt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblAlt AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 102 Height = 25 Top = 27 Width = 303 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 0 Style = csDropDownList TabOrder = 1 end object cbCtrlAlt: TComboBox AnchorSideLeft.Control = lblCtrlAlt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCtrlAlt AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbTyping AnchorSideRight.Side = asrBottom Left = 102 Height = 25 Top = 52 Width = 303 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 0 Style = csDropDownList TabOrder = 2 end end object cbLynxLike: TCheckBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbTyping AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 6 Height = 20 Top = 117 Width = 302 BorderSpacing.Top = 8 Caption = 'Le&ft, Right arrows change directory (Lynx-like movement)' TabOrder = 1 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfilepanelscolors.pas���������������������������������������������0000644�0001750�0000144�00000050047�12660674103�022427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File panels colors options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFilePanelsColors; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Graphics, Classes, SysUtils, ComCtrls, StdCtrls, ColorBox, ExtCtrls, Dialogs, DividerBevel, //DC uColumns, fOptionsFrame {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} ; type { TfrmOptionsFilePanelsColors } TfrmOptionsFilePanelsColors = class(TOptionsEditor) btnCursorBorderColor: TButton; btnResetToDCDefault: TButton; cbAllowOverColor: TCheckBox; cbUseCursorBorder: TCheckBox; cbCursorBorderColor: TColorBox; lblTextColor: TLabel; cbTextColor: TColorBox; btnForeColor: TButton; lblBackgroundColor: TLabel; cbBackColor: TColorBox; btnBackColor: TButton; lblBackgroundColor2: TLabel; cbBackColor2: TColorBox; btnBackColor2: TButton; lblMarkColor: TLabel; cbMarkColor: TColorBox; btnMarkColor: TButton; lblCursorColor: TLabel; cbCursorColor: TColorBox; btnCursorColor: TButton; lblCursorText: TLabel; cbCursorText: TColorBox; btnCursorText: TButton; lblInactiveCursorColor: TLabel; cbInactiveCursorColor: TColorBox; btnInactiveCursorColor: TButton; lblInactiveMarkColor: TLabel; cbInactiveMarkColor: TColorBox; btnInactiveMarkColor: TButton; dbOptionsVertical: TDividerBevel; cbbUseInvertedSelection: TCheckBox; cbbUseInactiveSelColor: TCheckBox; cbbUseFrameCursor: TCheckBox; lblInactivePanelBrightness: TLabel; spPanelSplitter: TSplitter; tbInactivePanelBrightness: TTrackBar; dbFreeSpaceIndicator: TDividerBevel; cbbUseGradientInd: TCheckBox; pbxFakeDrive: TPaintBox; lblIndColor: TLabel; cbIndColor: TColorBox; btnIndColor: TButton; lblIndBackColor: TLabel; cbIndBackColor: TColorBox; btnIndBackColor: TButton; pnlPreviewCont: TPanel; lblPreview: TLabel; pnlLeftPreview: TPanel; pnlRightPreview: TPanel; optColorDialog: TColorDialog; procedure btnCursorBorderColorClick(Sender: TObject); procedure btnResetToDCDefaultClick(Sender: TObject); procedure cbbUseFrameCursorChange(Sender: TObject); procedure cbColorBoxChange(Sender: TObject); procedure btnForeColorClick(Sender: TObject); procedure btnBackColorClick(Sender: TObject); procedure btnBackColor2Click(Sender: TObject); procedure btnMarkColorClick(Sender: TObject); procedure btnCursorColorClick(Sender: TObject); procedure btnCursorTextClick(Sender: TObject); procedure btnInactiveCursorColorClick(Sender: TObject); procedure btnInactiveMarkColorClick(Sender: TObject); procedure cbbUseInactiveSelColorChange(Sender: TObject); procedure cbUseCursorBorderChange(Sender: TObject); procedure tbInactivePanelBrightnessChange(Sender: TObject); procedure cbbUseGradientIndChange(Sender: TObject); procedure cbIndColorChange(Sender: TObject); procedure btnIndColorClick(Sender: TObject); procedure btnIndBackColorClick(Sender: TObject); procedure RefreshPreviewPanel; procedure pbxFakeDrivePaint(Sender: TObject); procedure pnlLeftPreviewEnter(Sender: TObject); procedure pnlRightPreviewEnter(Sender: TObject); function JustForConfigDim(AColor: TColor): TColor; function JustForConfigNoDim(AColor: TColor): TColor; private FLastLoadedOptionSignature: dword; bLoadCompleted: boolean; PreviewLeftPanel: TColumnsFileView; PreviewRightPanel: TColumnsFileView; ColumnClass: TPanelColumnsClass; ColPrm: TColPrm; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Forms, //DC uSampleForConfigFileSource, fOptions, uShowMsg, uComponentsSignature, uFileFunctions, DCOSUtils, fMain, uLng, uGlobs, uDCUtils; { TfrmOptionsFilePanelsColors } { TfrmOptionsFilePanelsColors.GetIconIndex } class function TfrmOptionsFilePanelsColors.GetIconIndex: integer; begin Result := 20; end; { TfrmOptionsFilePanelsColors.GetTitle } class function TfrmOptionsFilePanelsColors.GetTitle: string; begin Result := rsOptionsEditorFilePanels; end; { TfrmOptionsFilePanelsColors.CanWeClose } function TfrmOptionsFilePanelsColors.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsFilePanelsColors); Answer := MsgBox(rsMsgFilePanelColorModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; { TfrmOptionsFilePanelsColors.Load } procedure TfrmOptionsFilePanelsColors.Load; begin bLoadCompleted := False; //1. Let's create the element we'll need. ColPrm := TColPrm.Create; ColumnClass := TPanelColumnsClass.Create; //2. Let's load the current settings to be shown on screen SetColorInColorBox(cbTextColor, gForeColor); SetColorInColorBox(cbBackColor, gBackColor); SetColorInColorBox(cbBackColor2, gBackColor2); SetColorInColorBox(cbMarkColor, gMarkColor); SetColorInColorBox(cbCursorColor, gCursorColor); SetColorInColorBox(cbCursorText, gCursorText); SetColorInColorBox(cbInactiveCursorColor, gInactiveCursorColor); SetColorInColorBox(cbInactiveMarkColor, gInactiveMarkColor); cbAllowOverColor.Checked := gAllowOverColor; cbbUseInvertedSelection.Checked := gUseInvertedSelection; cbbUseInactiveSelColor.Checked := gUseInactiveSelColor; cbbUseFrameCursor.Checked := gUseFrameCursor; cbUseCursorBorder.Checked := gUseCursorBorder; SetColorInColorBox(cbCursorBorderColor, gCursorBorderColor); tbInactivePanelBrightness.Position := gInactivePanelBrightness; SetColorInColorBox(cbIndColor, gIndForeColor); SetColorInColorBox(cbIndBackColor, gIndBackColor); cbbUseGradientInd.Checked := gIndUseGradient; cbbUseFrameCursorChange(cbbUseFrameCursor); cbbUseInactiveSelColorChange(cbbUseInactiveSelColor); //3. Let's create our preview panels PreviewLeftPanel := TColumnsFileView.Create(pnlLeftPreview, TSampleForConfigFileSource.Create, SAMPLE_PATH); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); PreviewLeftPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewRightPanel := TColumnsFileView.Create(pnlRightPreview, TSampleForConfigFileSource.Create, SAMPLE_PATH); PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.SetGridFunctionDim(@JustForConfigDim); //4. Let's define which ColumnClass it's gonna follow PreviewLeftPanel.ActiveColmSlave := ColumnClass; PreviewLeftPanel.isSlave := True; PreviewRightPanel.ActiveColmSlave := ColumnClass; PreviewRightPanel.isSlave := True; //5. Let's refresh the panel so we will show something RefreshPreviewPanel; //6. Good. Loading is completed. bLoadCompleted := True; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; { TfrmOptionsFilePanelsColors.Save } function TfrmOptionsFilePanelsColors.Save: TOptionsEditorSaveFlags; begin gForeColor := cbTextColor.Selected; gBackColor := cbBackColor.Selected; gBackColor2 := cbBackColor2.Selected; gMarkColor := cbMarkColor.Selected; gCursorColor := cbCursorColor.Selected; gCursorText := cbCursorText.Selected; gInactiveCursorColor := cbInactiveCursorColor.Selected; gInactiveMarkColor := cbInactiveMarkColor.Selected; gUseInvertedSelection := cbbUseInvertedSelection.Checked; gAllowOverColor := cbAllowOverColor.Checked; gUseInactiveSelColor := cbbUseInactiveSelColor.Checked; gUseFrameCursor := cbbUseFrameCursor.Checked; gUseCursorBorder := cbUseCursorBorder.Checked; gCursorBorderColor := cbCursorBorderColor.Selected; gInactivePanelBrightness := tbInactivePanelBrightness.Position; gIndUseGradient := cbbUseGradientInd.Checked; gIndForeColor := cbIndColor.Selected; gIndBackColor := cbIndBackColor.Selected; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); Result := []; end; { TfrmOptionsFilePanelsColors.cbColorBoxChange } procedure TfrmOptionsFilePanelsColors.cbColorBoxChange(Sender: TObject); begin if bLoadCompleted then RefreshPreviewPanel; end; procedure TfrmOptionsFilePanelsColors.btnCursorBorderColorClick(Sender: TObject); begin optColorDialog.Color := cbCursorBorderColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorBorderColor, optColorDialog.Color); RefreshPreviewPanel; end; end; procedure TfrmOptionsFilePanelsColors.btnResetToDCDefaultClick(Sender: TObject); begin SetColorInColorBox(cbTextColor, clWindowText); SetColorInColorBox(cbBackColor, clWindow); SetColorInColorBox(cbBackColor2, clWindow); SetColorInColorBox(cbMarkColor, clRed); SetColorInColorBox(cbCursorColor, clHighlight); SetColorInColorBox(cbCursorText, clHighlightText); SetColorInColorBox(cbInactiveCursorColor, clInactiveCaption); SetColorInColorBox(cbInactiveMarkColor, clMaroon); cbAllowOverColor.Checked := True; cbbUseInvertedSelection.Checked := False; cbbUseInactiveSelColor.Checked := False; cbbUseFrameCursor.Checked := False; cbUseCursorBorder.Checked := False; SetColorInColorBox(cbCursorBorderColor, clHighlight); tbInactivePanelBrightness.Position := 100; SetColorInColorBox(cbIndColor, clBlack); SetColorInColorBox(cbIndBackColor, clWhite); cbbUseGradientInd.Checked := True; cbbUseFrameCursorChange(cbbUseFrameCursor); end; procedure TfrmOptionsFilePanelsColors.cbbUseFrameCursorChange(Sender: TObject); begin cbUseCursorBorder.Enabled := not cbbUseFrameCursor.Checked; lblCursorText.Enabled := not cbbUseFrameCursor.Checked; cbCursorText.Enabled := not cbbUseFrameCursor.Checked; btnCursorText.Enabled := not cbbUseFrameCursor.Checked; if not cbbUseFrameCursor.Checked then cbCursorText.Font.Color := clDefault else cbCursorText.Font.Color := clInactiveCaption; cbUseCursorBorderChange(cbUseCursorBorder); end; { TfrmOptionsFilePanelsColors.btnForeColorClick } procedure TfrmOptionsFilePanelsColors.btnForeColorClick(Sender: TObject); begin optColorDialog.Color := cbTextColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbTextColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnBackColorClick } procedure TfrmOptionsFilePanelsColors.btnBackColorClick(Sender: TObject); begin optColorDialog.Color := cbBackColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnBackColor2Click } procedure TfrmOptionsFilePanelsColors.btnBackColor2Click(Sender: TObject); begin optColorDialog.Color := cbBackColor2.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbBackColor2, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnMarkColorClick } procedure TfrmOptionsFilePanelsColors.btnMarkColorClick(Sender: TObject); begin optColorDialog.Color := cbMarkColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbMarkColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnCursorColorClick } procedure TfrmOptionsFilePanelsColors.btnCursorColorClick(Sender: TObject); begin optColorDialog.Color := cbCursorColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnCursorTextClick } procedure TfrmOptionsFilePanelsColors.btnCursorTextClick(Sender: TObject); begin optColorDialog.Color := cbCursorText.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbCursorText, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnInactiveCursorColorClick } procedure TfrmOptionsFilePanelsColors.btnInactiveCursorColorClick(Sender: TObject); begin optColorDialog.Color := cbInactiveCursorColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbInactiveCursorColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.btnInactiveMarkColorClick } procedure TfrmOptionsFilePanelsColors.btnInactiveMarkColorClick(Sender: TObject); begin optColorDialog.Color := cbInactiveMarkColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbInactiveMarkColor, optColorDialog.Color); RefreshPreviewPanel; end; end; { TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange } procedure TfrmOptionsFilePanelsColors.cbbUseInactiveSelColorChange(Sender: TObject); begin lblInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; btnInactiveCursorColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; lblInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; cbInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; btnInactiveMarkColor.Enabled := cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled; if bLoadCompleted then begin if cbbUseInactiveSelColor.Checked and cbbUseInactiveSelColor.Enabled then begin cbInactiveCursorColor.Font.Color := clDefault; cbInactiveMarkColor.Font.Color := clDefault; end else begin cbInactiveCursorColor.Font.Color := clInactiveCaption; cbInactiveMarkColor.Font.Color := clInactiveCaption; end; RefreshPreviewPanel; end; end; procedure TfrmOptionsFilePanelsColors.cbUseCursorBorderChange(Sender: TObject); begin cbCursorBorderColor.Enabled := cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled; btnCursorBorderColor.Enabled := cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled; if cbUseCursorBorder.Checked and cbUseCursorBorder.Enabled then cbCursorBorderColor.Font.Color := clDefault else cbCursorBorderColor.Font.Color := clInactiveCaption; if bLoadCompleted then RefreshPreviewPanel; end; { TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange } procedure TfrmOptionsFilePanelsColors.tbInactivePanelBrightnessChange(Sender: TObject); begin if bLoadCompleted then begin PreviewLeftPanel.UpdateColumnsView; PreviewLeftPanel.Reload; PreviewRightPanel.UpdateColumnsView; PreviewRightPanel.Reload; end; end; { TfrmOptionsFilePanelsColors.cbbUseGradientIndChange } procedure TfrmOptionsFilePanelsColors.cbbUseGradientIndChange(Sender: TObject); begin lblIndColor.Enabled := not (cbbUseGradientInd.Checked); lblIndBackColor.Enabled := not (cbbUseGradientInd.Checked); cbIndColor.Enabled := not (cbbUseGradientInd.Checked); cbIndBackColor.Enabled := not (cbbUseGradientInd.Checked); btnIndColor.Enabled := not (cbbUseGradientInd.Checked); btnIndBackColor.Enabled := not (cbbUseGradientInd.Checked); pbxFakeDrive.Repaint; end; { TfrmOptionsFilePanelsColors.cbIndColorChange } procedure TfrmOptionsFilePanelsColors.cbIndColorChange(Sender: TObject); begin pbxFakeDrive.Repaint; end; { TfrmOptionsFilePanelsColors.btnIndColorClick } procedure TfrmOptionsFilePanelsColors.btnIndColorClick(Sender: TObject); begin optColorDialog.Color := cbIndColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbIndColor, optColorDialog.Color); pbxFakeDrive.Repaint; end; end; { TfrmOptionsFilePanelsColors.btnIndBackColorClick } procedure TfrmOptionsFilePanelsColors.btnIndBackColorClick(Sender: TObject); begin optColorDialog.Color := cbIndBackColor.Selected; if optColorDialog.Execute then begin SetColorInColorBox(cbIndBackColor, optColorDialog.Color); pbxFakeDrive.Repaint; end; end; { TfrmOptionsFilePanelsColors.RefreshPreviewPanel } procedure TfrmOptionsFilePanelsColors.RefreshPreviewPanel; const DCFunc = '[DC().%s{}]'; var indx: integer; begin //Set color ColPrm.FontName := gFonts[dcfMain].Name; ColPrm.FontSize := gFonts[dcfMain].Size; ColPrm.FontStyle := gFonts[dcfMain].Style; ColPrm.Overcolor := cbAllowOverColor.Checked; ColPrm.UseInvertedSelection := cbbUseInvertedSelection.Checked; ColPrm.UseInactiveSelColor := cbbUseInactiveSelColor.Checked; ColPrm.TextColor := cbTextColor.Selected; ColPrm.Background := cbBackColor.Selected; ColPrm.Background2 := cbBackColor2.Selected; ColPrm.MarkColor := cbMarkColor.Selected; ColPrm.CursorColor := cbCursorColor.Selected; ColPrm.CursorText := cbCursorText.Selected; ColPrm.InactiveCursorColor := cbInactiveCursorColor.Selected; ColPrm.InactiveMarkColor := cbInactiveMarkColor.Selected; ColumnClass.Clear; ColumnClass.Add(rsColName, Format(DCFunc, [TFileFunctionStrings[fsfNameNoExtension]]), 200, taLeftJustify); ColumnClass.Add(rsColExt, Format(DCFunc, [TFileFunctionStrings[fsfExtension]]), 70, taLeftJustify); ColumnClass.Add(rsColSize, Format(DCFunc, [TFileFunctionStrings[fsfSize]]), 90, taRightJustify); for indx := 0 to pred(ColumnClass.Count) do ColumnClass.SetColumnPrm(Indx, ColPrm); ColumnClass.CustomView := True; ColumnClass.UseFrameCursor := cbbUseFrameCursor.Checked; ColumnClass.CursorBorderColor := clRed; ColumnClass.UseFrameCursor := cbbUseFrameCursor.Checked; ColumnClass.UseCursorBorder := cbUseCursorBorder.Checked; ColumnClass.CursorBorderColor := cbCursorBorderColor.Selected; ColumnClass.Name := 'JustForSetup'; PreviewLeftPanel.UpdateColumnsView; PreviewRightPanel.UpdateColumnsView; end; { TfrmOptionsFilePanelsColors.pbxFakeDrivePaint } procedure TfrmOptionsFilePanelsColors.pbxFakeDrivePaint(Sender: TObject); begin frmMain.PaintDriveFreeBar(pbxFakeDrive, cbbUseGradientInd.Checked, cbIndColor.Selected, cbIndBackColor.Selected); end; { TfrmOptionsFilePanelsColors.pnlLeftPreviewEnter } procedure TfrmOptionsFilePanelsColors.pnlLeftPreviewEnter(Sender: TObject); begin PreviewRightPanel.SetGridFunctionDim(@JustForConfigDim); PreviewRightPanel.JustForColorPreviewSetActiveState(False); PreviewLeftPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewLeftPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsFilePanelsColors.pnlRightPreviewEnter } procedure TfrmOptionsFilePanelsColors.pnlRightPreviewEnter(Sender: TObject); begin PreviewLeftPanel.SetGridFunctionDim(@JustForConfigDim); PreviewLeftPanel.JustForColorPreviewSetActiveState(False); PreviewRightPanel.SetGridFunctionDim(@JustForConfigNoDim); PreviewRightPanel.JustForColorPreviewSetActiveState(True); end; { TfrmOptionsFilePanelsColors.JustForConfigDim } function TfrmOptionsFilePanelsColors.JustForConfigDim(AColor: TColor): TColor; begin if (tbInactivePanelBrightness.Position < 100) then Result := ModColor(AColor, tbInactivePanelBrightness.Position); end; { TfrmOptionsFilePanelsColors.JustForConfigNoDim } function TfrmOptionsFilePanelsColors.JustForConfigNoDim(AColor: TColor): TColor; begin Result := AColor; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfavoritetabs.pas�������������������������������������������������0000644�0001750�0000144�00000126606�12666540554�021571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Configuration of Favorite Tabs Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) 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 -This unit has been added in 2016, inspired a lot from "foptionsDirectoryHotlist". } unit fOptionsFavoriteTabs; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, uFavoriteTabs, types, fOptionsFrame; type { TfrmOptionsFavoriteTabs } TfrmOptionsFavoriteTabs = class(TOptionsEditor) btnRename: TBitBtn; cbExistingTabsToKeep: TComboBox; cbFullExpandTree: TCheckBox; cbSaveDirHistory: TComboBox; cbTargetPanelLeftSavedTabs: TComboBox; cbTargetPanelRightSavedTabs: TComboBox; gbFavoriteTabs: TGroupBox; gbFavoriteTabsOtherOptions: TGroupBox; gpSavedTabsRestorationAction: TGroupBox; lblExistingTabsToKeep: TLabel; lblSaveDirHistory: TLabel; lblTargetPanelLeftSavedTabs: TLabel; lblTargetPanelRightSavedTabs: TLabel; MenuItem1: TMenuItem; miImportLegacyTabFilesAtPos1: TMenuItem; miImportLegacyTabFilesInSubAtPos: TMenuItem; miImportLegacyTabFilesAccSetting: TMenuItem; miSeparator1: TMenuItem; miSeparator11: TMenuItem; miExportToLegacyTabsFile: TMenuItem; miImportLegacyTabFilesAtPos: TMenuItem; miRename: TMenuItem; miInsertSeparator: TMenuItem; MenuItem2: TMenuItem; miInsertSubMenu: TMenuItem; OpenDialog: TOpenDialog; pnlClient: TPanel; tvFavoriteTabs: TTreeView; pnlButtons: TPanel; btnInsert: TBitBtn; btnDelete: TBitBtn; btnImportExport: TBitBtn; btnAdd: TBitBtn; btnSort: TBitBtn; pmFavoriteTabsTestMenu: TPopupMenu; miFavoriteTabsTestMenu: TMenuItem; pmTreeView: TPopupMenu; miAddSeparator2: TMenuItem; miAddSubmenu2: TMenuItem; miSeparator7: TMenuItem; miDeleteSelectedEntry2: TMenuItem; miSeparator8: TMenuItem; miSortSingleGroup2: TMenuItem; miSeparator9: TMenuItem; miCutSelection: TMenuItem; miPasteSelection: TMenuItem; pmInsertAddToFavoriteTabs: TPopupMenu; miAddSeparator: TMenuItem; miAddSubmenu: TMenuItem; pmDeleteFavoriteTabs: TPopupMenu; miDeleteSelectedEntry: TMenuItem; miSeparator2: TMenuItem; miDeleteJustSubMenu: TMenuItem; miDeleteCompleteSubMenu: TMenuItem; miSeparator3: TMenuItem; miDeleteAllFavoriteTabs: TMenuItem; pmImportExport: TPopupMenu; miTestResultingFavoriteTabsMenu: TMenuItem; miSeparator10: TMenuItem; miOpenAllBranches: TMenuItem; miCollapseAll: TMenuItem; pmSortFavoriteTabsList: TPopupMenu; miSortSingleGroup: TMenuItem; miCurrentLevelOfItemOnly: TMenuItem; miSortSingleSubMenu: TMenuItem; miSortSubMenuAndSubLevel: TMenuItem; miSortEverything: TMenuItem; procedure btnRenameClick(Sender: TObject); procedure FrameEnter(Sender: TObject); function GetSettingsSignatureOfThisFrame: dword; function ActualAddFavoriteTabs(ParamDispatcher: TKindOfFavoriteTabsEntry; sFavoriteTabsName: string; InsertOrAdd: TNodeAttachMode): TTreeNode; function MySortViaGroup(Node1, Node2: TTreeNode): integer; procedure RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); function GetNextGroupNumber: integer; procedure ClearCutAndPasteList; function TryToGetExactFavoriteTabs(const index: integer): TTreeNode; procedure RefreshTreeView(NodeToSelect: TTreeNode); procedure tvFavoriteTabsDragDrop(Sender, {%H-}Source: TObject; X, Y: integer); procedure tvFavoriteTabsDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: integer; {%H-}State: TDragState; var Accept: boolean); procedure tvFavoriteTabsEnter(Sender: TObject); procedure tvFavoriteTabsExit(Sender: TObject); procedure tvFavoriteTabsSelectionChanged(Sender: TObject); procedure btnActionClick(Sender: TObject); procedure cbFullExpandTreeChange(Sender: TObject); procedure cbTabsConfigChange(Sender: TObject); procedure lbleditFavoriteTabsEnter(Sender: TObject); procedure lbleditFavoriteTabsExit(Sender: TObject); procedure lbleditFavoriteTabsKeyPress(Sender: TObject; var Key: char); procedure miInsertAddFavoriteTabsClick(Sender: TObject); procedure miDeleteSelectedEntryClick(Sender: TObject); procedure miDeleteAllFavoriteTabsClick(Sender: TObject); procedure miSortFavoriteTabsClick(Sender: TObject); function MakeUsUpToDatePriorImportExport: boolean; procedure miExportToLegacyTabsFileClick(Sender: TObject); procedure miImportLegacyTabFilesClick(Sender: TObject); procedure miTestResultingFavoriteTabsMenuClick(Sender: TObject); procedure miShowWhereItWouldGo(Sender: TObject); procedure miOpenAllBranchesClick(Sender: TObject); procedure miCollapseAllClick(Sender: TObject); procedure miCutSelectionClick(Sender: TObject); procedure miPasteSelectionClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private { Private declarations } FavoriteTabsListTemp: TFavoriteTabsList; CutAndPasteIndexList: TStringList; GlobalGroupNumber: integer; FLastLoadedFavoriteTabsListSignature: dword; public { Public declarations } class function GetIconIndex: integer; override; class function GetTitle: string; override; destructor Destroy; override; function CanWeClose(var {%H-}WillNeedUpdateWindowView: boolean): boolean; override; procedure MakeUsInPositionToWorkWithActiveFavoriteTabs; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LCLProc, LCLIntf, //DC DCStrUtils, uGlobs, uLng, uDCUtils, uDebug, fmain, uShowMsg, DCOSUtils, fOptions, uComponentsSignature; { TfrmOptionsFavoriteTabs.Init } procedure TfrmOptionsFavoriteTabs.Init; begin ParseLineToList(rsFavTabsPanelSideSelection, cbTargetPanelLeftSavedTabs.Items); ParseLineToList(rsFavTabsPanelSideSelection, cbTargetPanelRightSavedTabs.Items); ParseLineToList(rsFavTabsPanelSideSelection, cbExistingTabsToKeep.Items); ParseLineToList(rsFavTabsSaveDirHistory, cbSaveDirHistory.Items); end; { TfrmOptionsFavoriteTabs.Load } procedure TfrmOptionsFavoriteTabs.Load; begin gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; cbFullExpandTree.Checked := gFavoriteTabsFullExpandOrNot; CutAndPasteIndexList := TStringList.Create; CutAndPasteIndexList.Sorted := True; CutAndPasteIndexList.Duplicates := dupAccept; if FavoriteTabsListTemp = nil then begin FavoriteTabsListTemp := TFavoriteTabsList.Create; gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); end; tvFavoriteTabs.Images := frmMain.imgLstDirectoryHotlist; FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); cbFullExpandTreeChange(cbFullExpandTree); if tvFavoriteTabs.Items.Count > 0 then tvFavoriteTabs.Items[0].Selected := True; //Select at least first one by default FLastLoadedFavoriteTabsListSignature := GetSettingsSignatureOfThisFrame; end; { TfrmOptionsFavoriteTabs.Save } function TfrmOptionsFavoriteTabs.Save: TOptionsEditorSaveFlags; begin Result := []; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); FavoriteTabsListTemp.CopyFavoriteTabsListToFavoriteTabsList(gFavoriteTabsList); gFavoriteTabsList.RefreshXmlFavoriteTabsListSection; gFavoriteTabsList.RefreshAssociatedMainMenu; gFavoriteTabsFullExpandOrNot := cbFullExpandTree.Checked; cbFullExpandTreeChange(cbFullExpandTree); FLastLoadedFavoriteTabsListSignature := GetSettingsSignatureOfThisFrame; end; { TfrmOptionsFavoriteTabs.GetIconIndex } class function TfrmOptionsFavoriteTabs.GetIconIndex: integer; begin Result := 37; end; { TfrmOptionsFavoriteTabs.GetTitle } class function TfrmOptionsFavoriteTabs.GetTitle: string; begin Result := rsOptionsEditorFavoriteTabs; end; { TfrmOptionsFavoriteTabs.Destroy } destructor TfrmOptionsFavoriteTabs.Destroy; begin CutAndPasteIndexList.Free; inherited Destroy; end; { TfrmOptionsFavoriteTabs.CanWeClose } function TfrmOptionsFavoriteTabs.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := True; if Assigned(FavoriteTabsListTemp) then begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Result := (FLastLoadedFavoriteTabsListSignature = GetSettingsSignatureOfThisFrame); if not Result then begin ShowOptions(TfrmOptionsFavoriteTabs); Answer := MsgBox(rsMsgFavoriteTabsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end; { TfrmOptionsFavoriteTabs.MakeUsInPositionToWorkWithActiveFavoriteTabs } procedure TfrmOptionsFavoriteTabs.MakeUsInPositionToWorkWithActiveFavoriteTabs; var NodeToSelect: TTreeNode = nil; begin NodeToSelect := TryToGetExactFavoriteTabs(FavoriteTabsListTemp.GetIndexLastFavoriteTabsLoaded); if (NodeToSelect = nil) and (tvFavoriteTabs.Items.Count > 0) then NodeToSelect := tvFavoriteTabs.Items.Item[0]; RefreshTreeView(NodeToSelect); if not tvFavoriteTabs.Focused then if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; function CompareStringsFromTStringList(List: TStringList; Index1, Index2: integer): integer; begin Result := CompareStrings(List.Strings[Index1], List.Strings[Index2], gSortNatural, gSortCaseSensitivity); end; { TfrmOptionsFavoriteTabs.btnRenameClick } procedure TfrmOptionsFavoriteTabs.btnRenameClick(Sender: TObject); var sInputText: string; FlagDoModif: boolean; begin if tvFavoriteTabs.Selected <> nil then begin if TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher in [fte_ACTUALFAVTABS, fte_STARTMENU] then begin sInputText := TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName; case TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher of fte_ACTUALFAVTABS: FlagDoModif := InputQuery(rsTitleRenameFavTabs, rsMsgRenameFavTabs, sInputText); fte_STARTMENU: FlagDoModif := InputQuery(rsTitleRenameFavTabsMenu, rsMsgRenameFavTabsMenu, sInputText); end; sInputText := Trim(sInputText); if FlagDoModif and (length(sInputText) > 0) then begin TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName := sInputText; tvFavoriteTabs.Selected.Text := sInputText; end; end; end; end; { TfrmOptionsFavoriteTabs.FrameEnter } procedure TfrmOptionsFavoriteTabs.FrameEnter(Sender: TObject); begin if gpSavedTabsRestorationAction.Visible <> gFavoriteTabsUseRestoreExtraOptions then gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; end; { TfrmOptionsFavoriteTabs.GetSettingsSignatureOfThisFrame } function TfrmOptionsFavoriteTabs.GetSettingsSignatureOfThisFrame: dword; begin Result := FavoriteTabsListTemp.ComputeSignature; Result := ComputeSignatureSingleComponent(cbFullExpandTree, Result); end; { TfrmOptionsFavoriteTabs.ActualAddFavoriteTabs } function TfrmOptionsFavoriteTabs.ActualAddFavoriteTabs(ParamDispatcher: TKindOfFavoriteTabsEntry; sFavoriteTabsName: string; InsertOrAdd: TNodeAttachMode): TTreeNode; var LocalFavoriteTabs: TFavoriteTabs; WorkingTreeNode: TTreeNode; begin ClearCutAndPasteList; LocalFavoriteTabs := TFavoriteTabs.Create; LocalFavoriteTabs.Dispatcher := ParamDispatcher; LocalFavoriteTabs.FavoriteTabsName := sFavoriteTabsName; LocalFavoriteTabs.DestinationForSavedLeftTabs := gDefaultTargetPanelLeftSaved; LocalFavoriteTabs.DestinationForSavedRightTabs := gDefaultTargetPanelRightSaved; LocalFavoriteTabs.ExistingTabsToKeep := gDefaultExistingTabsToKeep; FavoriteTabsListTemp.Add(LocalFavoriteTabs); WorkingTreeNode := tvFavoriteTabs.Selected; if WorkingTreeNode <> nil then Result := tvFavoriteTabs.Items.AddNode(nil, WorkingTreeNode, sFavoriteTabsName, LocalFavoriteTabs, InsertOrAdd) else Result := tvFavoriteTabs.Items.AddNode(nil, nil, sFavoriteTabsName, LocalFavoriteTabs, naAddFirst); end; { TfrmOptionsFavoriteTabs.MySortViaGroup } function TfrmOptionsFavoriteTabs.MySortViaGroup(Node1, Node2: TTreeNode): integer; begin if (TFavoriteTabs(Node1.Data).GroupNumber = TFavoriteTabs(Node2.Data).GroupNumber) and (TFavoriteTabs(Node1.Data).GroupNumber <> 0) then begin Result := CompareStrings(TFavoriteTabs(Node1.Data).FavoriteTabsName, TFavoriteTabs(Node2.Data).FavoriteTabsName, gSortNatural, gSortCaseSensitivity); end else begin if Node1.AbsoluteIndex < Node2.AbsoluteIndex then Result := -1 else Result := 1; end; end; { TfrmOptionsFavoriteTabs.RecursiveSetGroupNumbers } // WARNING! This procedure calls itself. procedure TfrmOptionsFavoriteTabs.RecursiveSetGroupNumbers(ParamNode: TTreeNode; ParamGroupNumber: integer; DoRecursion, StopAtFirstGroup: boolean); var MaybeChild: TTreeNode; begin repeat if DoRecursion then begin MaybeChild := ParamNode.GetFirstChild; if MaybeChild <> nil then RecursiveSetGroupNumbers(MaybeChild, GetNextGroupNumber, DoRecursion, StopAtFirstGroup); end; if TFavoriteTabs(ParamNode.Data).Dispatcher <> fte_SEPARATOR then begin TFavoriteTabs(ParamNode.Data).GroupNumber := ParamGroupNumber; end else begin ParamGroupNumber := GetNextGroupNumber; if StopAtFirstGroup then while ParamNode <> nil do ParamNode := ParamNode.GetNextSibling; //To exit the loop! end; if ParamNode <> nil then ParamNode := ParamNode.GetNextSibling; until ParamNode = nil; end; { TfrmOptionsFavoriteTabs.GetNextGroupNumber } function TfrmOptionsFavoriteTabs.GetNextGroupNumber: integer; begin GlobalGroupNumber := GlobalGroupNumber + 1; Result := GlobalGroupNumber; end; { TfrmOptionsFavoriteTabs.ClearCutAndPasteList } procedure TfrmOptionsFavoriteTabs.ClearCutAndPasteList; begin CutAndPasteIndexList.Clear; miPasteSelection.Enabled := True; end; { TfrmOptionsFavoriteTabs.TryToGetExactFavoriteTabs } function TfrmOptionsFavoriteTabs.TryToGetExactFavoriteTabs(const index: integer): TTreeNode; var SearchingtvIndex: integer; begin Result := nil; if (index >= 0) and (index < FavoriteTabsListTemp.Count) then begin SearchingtvIndex := 0; while (SearchingtvIndex < tvFavoriteTabs.Items.Count) and (Result = nil) do begin if tvFavoriteTabs.Items[SearchingtvIndex].Data = FavoriteTabsListTemp.Items[Index] then Result := tvFavoriteTabs.Items[SearchingtvIndex] else Inc(SearchingtvIndex); end; end; end; { TfrmOptionsFavoriteTabs.RefreshTreeView } procedure TfrmOptionsFavoriteTabs.RefreshTreeView(NodeToSelect: TTreeNode); begin if NodeToSelect <> nil then begin tvFavoriteTabs.ClearSelection(False); NodeToSelect.Selected := True; end else begin tvFavoriteTabsSelectionChanged(tvFavoriteTabs); //At least to hide path, target, etc. end; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsDragDrop } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsDragDrop(Sender, Source: TObject; X, Y: integer); var Index: longint; DestinationNode: TTreeNode; begin DestinationNode := tvFavoriteTabs.GetNodeAt(X, Y); if Assigned(DestinationNode) and (tvFavoriteTabs.SelectionCount > 0) then begin //If we move toward the end, we place the moved item *after* the destination. //If we move toward the beginning, we place the moved item *before* the destination. if tvFavoriteTabs.Selections[pred(tvFavoriteTabs.SelectionCount)].AbsoluteIndex > DestinationNode.AbsoluteIndex then begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsert); end; end else begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsertBehind); end; end; ClearCutAndPasteList; end; miPasteSelection.Enabled := False; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsDragOver } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsDragOver(Sender, Source: TObject; X, Y: integer; State: TDragState; var Accept: boolean); begin Accept := True; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsEnter } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsEnter(Sender: TObject); begin tvFavoriteTabs.SelectionColor := clHighlight; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsExit } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsExit(Sender: TObject); begin tvFavoriteTabs.SelectionColor := clBtnShadow; end; { TfrmOptionsFavoriteTabs.tvFavoriteTabsSelectionChanged } procedure TfrmOptionsFavoriteTabs.tvFavoriteTabsSelectionChanged(Sender: TObject); var WorkingPointer: Pointer; begin if tvFavoriteTabs.Selected <> nil then begin WorkingPointer := tvFavoriteTabs.Selected.Data; if TFavoriteTabs(WorkingPointer).Dispatcher = fte_ACTUALFAVTABS then begin cbTargetPanelLeftSavedTabs.ItemIndex := integer(TFavoriteTabs(WorkingPointer).DestinationForSavedLeftTabs); cbTargetPanelRightSavedTabs.ItemIndex := integer(TFavoriteTabs(WorkingPointer).DestinationForSavedRightTabs); cbExistingTabsToKeep.ItemIndex := integer(TFavoriteTabs(WorkingPointer).ExistingTabsToKeep); if TFavoriteTabs(WorkingPointer).SaveDirHistory then cbSaveDirHistory.ItemIndex := 1 else cbSaveDirHistory.ItemIndex := 0; gpSavedTabsRestorationAction.Enabled := True; end else begin gpSavedTabsRestorationAction.Enabled := False; end; miDeleteSelectedEntry.Enabled := not (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteJustSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteCompleteSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miSortSingleSubMenu.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miSortSubMenuAndSubLevel.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher = fte_STARTMENU); miDeleteSelectedEntry.Enabled := (TFavoriteTabs(WorkingPointer).Dispatcher <> fte_ENDMENU); miDeleteSelectedEntry2.Enabled := miDeleteSelectedEntry.Enabled; end //if tvFavoriteTabs.Selected<>nil then else begin gpSavedTabsRestorationAction.Enabled := False; end; end; { TfrmOptionsFavoriteTabs.btnActionClick } procedure TfrmOptionsFavoriteTabs.btnActionClick(Sender: TObject); var Dispatcher: integer; begin with Sender as TComponent do Dispatcher := tag; case Dispatcher of 1, 2: pmInsertAddToFavoriteTabs.Tag := Dispatcher; //To help in routine to determine if it's a "Insert" or a "Add" end; case Dispatcher of 1, 2: pmInsertAddToFavoriteTabs.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 3: pmDeleteFavoriteTabs.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 7: pmImportExport.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 8: pmSortFavoriteTabsList.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; { TfrmOptionsFavoriteTabs.cbFullExpandTreeChange } procedure TfrmOptionsFavoriteTabs.cbFullExpandTreeChange(Sender: TObject); begin if cbFullExpandTree.Checked then tvFavoriteTabs.FullExpand else tvFavoriteTabs.FullCollapse; end; { TfrmOptionsFavoriteTabs.cbTabsConfigChange } procedure TfrmOptionsFavoriteTabs.cbTabsConfigChange(Sender: TObject); begin if tvFavoriteTabs.Selected <> nil then begin if TFavoriteTabs(tvFavoriteTabs.Selected.Data).Dispatcher = fte_ACTUALFAVTABS then begin case TComponent(Sender).tag of 1: TFavoriteTabs(tvFavoriteTabs.Selected.Data).DestinationForSavedLeftTabs := TTabsConfigLocation(cbTargetPanelLeftSavedTabs.ItemIndex); 2: TFavoriteTabs(tvFavoriteTabs.Selected.Data).DestinationForSavedRightTabs := TTabsConfigLocation(cbTargetPanelRightSavedTabs.ItemIndex); 3: TFavoriteTabs(tvFavoriteTabs.Selected.Data).ExistingTabsToKeep := TTabsConfigLocation(cbExistingTabsToKeep.ItemIndex); 4: TFavoriteTabs(tvFavoriteTabs.Selected.Data).SaveDirHistory := (cbSaveDirHistory.ItemIndex = 1); end; end; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsEnter } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsEnter(Sender: TObject); begin with Sender as TLabeledEdit do begin Font.Style := [fsBold]; EditLabel.Font.Style := [fsBold]; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsExit } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsExit(Sender: TObject); begin //If nothing currently selected, no need to update anything here. if tvFavoriteTabs.Selected <> nil then begin with Sender as TLabeledEdit do begin Font.Style := []; EditLabel.Font.Style := []; //Text not in bold anymore case tag of 1: // Favorite Tabs name begin try //Make sure we actually have something, not an attempt of submenu or end of menu if (Text <> '') and (Text[1] <> '-') then begin //Make sure it's different than what it was if TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName <> Text then begin TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName := Text; tvFavoriteTabs.Selected.Text := Text; end; end; except //Just in case the "Text" is empty to don't show error with Text[1] check. end; end; end; end; end; end; { TfrmOptionsFavoriteTabs.lblediTFavoriteTabsKeyPress } procedure TfrmOptionsFavoriteTabs.lbleditFavoriteTabsKeyPress(Sender: TObject; var Key: char); begin case Ord(Key) of $0D: //Enter? Let's save the field and we'll exit begin lblediTFavoriteTabsExit(Sender); //Doing this will SAVE the new typed text if it's different than what we have in memory for the entry. Then we could attempt to quit. end; $1B: //Escape? Place back the fields like they were begin with Sender as TLabeledEdit do begin //If typed text has been changed, yes we will restore it but if it was not change, we will quit so user won't have to press two times escape case tag of 1: if Text <> TFavoriteTabs(tvFavoriteTabs.Selected.Data).FavoriteTabsName then Key := #$00; end; case tag of 1: tvFavoriteTabsSelectionChanged(tvFavoriteTabs); end; end; if key <> #$1B then tvFavoriteTabs.SetFocus; end; end; Application.ProcessMessages; end; { TfrmOptionsFavoriteTabs.miInsertAddFavoriteTabsClick } // Regarding the tag... // bit 0 = Separator. // bit 1 = Sub menu. // bit 2 = Reserved. // bit 3 = Reserved. // bit 4 = Insert something. (Before index). // bit 5 = Add something. (At index). // bit 6 = Reserved... // bit 7 = Reserved... // bit 8 = Special function. procedure TfrmOptionsFavoriteTabs.miInsertAddFavoriteTabsClick(Sender: TObject); var Dispatcher: integer; NodeAfterAddition: TTreeNode = nil; SubNodeAfterAddition: TTreeNode = nil; //For fake submenu item, at the end of the add, focus will be in the menu name. localFavoriteTabs: TFavoriteTabs; begin Dispatcher := (TMenuItem(Sender).GetParentComponent.Tag shl 4) or TComponent(Sender).Tag; case Dispatcher of $011: NodeAfterAddition := ActualAddFavoriteTabs(fte_SEPARATOR, FAVORITETABS_SEPARATORSTRING, naInsert); $021: NodeAfterAddition := ActualAddFavoriteTabs(fte_SEPARATOR, FAVORITETABS_SEPARATORSTRING, naInsertBehind); $012, $022: begin case Dispatcher of $12: NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsSubMenuName, naInsert); $22: NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsSubMenuName, naInsertBehind); end; tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; SubNodeAfterAddition := ActualAddFavoriteTabs(fte_ACTUALFAVTABS, rsMsgFavoriteTabsDragHereEntry, naAddChildFirst); SubNodeAfterAddition.Selected := True; SubNodeAfterAddition.Expand(True); end; $100: // Note. It is true that the new added TFavoriteTemp will be at the end of the list and not just after where we might "think" we add it. But we don't care! What we do is setting up our tree the way we need and then at the end the tree will be translated back to our valid list and that's it! begin localFavoriteTabs := TFavoriteTabs.Create; TFavoriteTabs(tvFavoriteTabs.Selected.Data).CopyToFavoriteTabs(localFavoriteTabs, False); FavoriteTabsListTemp.Add(localFavoriteTabs); NodeAfterAddition := tvFavoriteTabs.Items.InsertObjectBehind(tvFavoriteTabs.Selected, TFavoriteTabs(FavoriteTabsListTemp[pred(FavoriteTabsListTemp.Count)]).FavoriteTabsName, FavoriteTabsListTemp[pred(FavoriteTabsListTemp.Count)]); end; end; if NodeAfterAddition <> nil then begin tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; case Dispatcher of $012, $022: btnRenameClick(btnRename); end; end; end; { TfrmOptionsFavoriteTabs.miDeleteSelectedEntryClick } procedure TfrmOptionsFavoriteTabs.miDeleteSelectedEntryClick(Sender: TObject); var DeleteDispatcher: integer; FlagQuitDeleting: boolean; Answer: TMyMsgResult; NodeAfterDeletion: TTreeNode = nil; isTreeHadFocus: boolean = False; procedure DeleteSelectionAndSetNodeAfterDeletion; begin if tvFavoriteTabs.Selections[0].GetNextSibling <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetNextSibling else if tvFavoriteTabs.Selections[0].GetPrevSibling <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetPrevSibling else if tvFavoriteTabs.Selections[0].Parent <> nil then NodeAfterDeletion := tvFavoriteTabs.Selections[0].Parent else NodeAfterDeletion := nil; tvFavoriteTabs.Selections[0].Delete; ClearCutAndPasteList; end; begin if tvFavoriteTabs.SelectionCount > 0 then begin isTreeHadFocus := tvFavoriteTabs.Focused; tvFavoriteTabs.Enabled := False; try with Sender as TComponent do DeleteDispatcher := tag; FlagQuitDeleting := False; //It's funny but as long we have something selected, we delete it and it will be index 0 since when //deleting something, the "Selections" array is updated! while (tvFavoriteTabs.SelectionCount > 0) and (not FlagQuitDeleting) do begin if tvFavoriteTabs.Selections[0].GetFirstChild = nil then begin DeleteSelectionAndSetNodeAfterDeletion; end else begin case DeleteDispatcher of 1: Answer := MsgBox(Format(rsMsgHotDirWhatToDelete, [tvFavoriteTabs.Selections[0].Text]), [msmbAll, msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); 2: Answer := mmrNo; 3: Answer := mmrYes; else Answer := mmrCancel; //Should not happen, but just in case end; case Answer of mmrAll: begin DeleteDispatcher := 3; DeleteSelectionAndSetNodeAfterDeletion; end; mmrYes: DeleteSelectionAndSetNodeAfterDeletion; mmrNo: begin NodeAfterDeletion := tvFavoriteTabs.Selections[0].GetFirstChild; repeat tvFavoriteTabs.Selections[0].GetFirstChild.MoveTo(tvFavoriteTabs.Selections[0].GetFirstChild.Parent, naInsert); until tvFavoriteTabs.Selections[0].GetFirstChild = nil; tvFavoriteTabs.Selections[0].Delete; ClearCutAndPasteList; end; else FlagQuitDeleting := True; end; end; end; if (NodeAfterDeletion = nil) and (FlagQuitDeleting = False) and (tvFavoriteTabs.Items.Count > 0) then NodeAfterDeletion := tvFavoriteTabs.Items.Item[0]; if (NodeAfterDeletion <> nil) and (FlagQuitDeleting = False) then NodeAfterDeletion.Selected := True; finally tvFavoriteTabs.Enabled := True; if isTreeHadFocus and tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; end; { TfrmOptionsFavoriteTabs.miDeleteAllFavoriteTabsClick } procedure TfrmOptionsFavoriteTabs.miDeleteAllFavoriteTabsClick(Sender: TObject); begin if MsgBox(rsMsgFavoriteTabsDeleteAllEntries, [msmbYes, msmbNo], msmbNo, msmbNo) = mmrYes then begin tvFavoriteTabs.Items.Clear; gpSavedTabsRestorationAction.Enabled := False; ClearCutAndPasteList; end; end; { TfrmOptionsFavoriteTabs.miSortFavoriteTabsClick } //The trick here is that a "group number" identical has been assigned to the sibling between separator and then we sort //Teh sort has been arrange in such way that item from different group won't be mixed. procedure TfrmOptionsFavoriteTabs.miSortFavoriteTabsClick(Sender: TObject); var Dispatcher, Index: integer; StartingNode: TTreeNode; FlagKeepGoingBack: boolean; begin with Sender as TComponent do Dispatcher := tag; for Index := 0 to pred(tvFavoriteTabs.Items.Count) do TFavoriteTabs(tvFavoriteTabs.Items.Item[Index].Data).GroupNumber := 0; GlobalGroupNumber := 0; if tvFavoriteTabs.SelectionCount > 0 then begin case Dispatcher of 1, 2: //current group only or current level begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin if TFavoriteTabs(tvFavoriteTabs.Selections[Index].Data).GroupNumber = 0 then begin StartingNode := tvFavoriteTabs.Selections[Index]; case Dispatcher of 1: //We just need to make sure we start from first item of current level so we search the first one OR a separator begin FlagKeepGoingBack := True; while FlagKeepGoingBack do begin if StartingNode.GetPrevSibling <> nil then begin if TFavoriteTabs(StartingNode.GetPrevSibling.Data).Dispatcher <> fte_SEPARATOR then StartingNode := StartingNode.GetPrevSibling else FlagKeepGoingBack := False; end else begin FlagKeepGoingBack := False; end; end; end; 2: //We need to make sure we start from the first itm of current level begin while StartingNode.GetPrevSibling <> nil do StartingNode := StartingNode.GetPrevSibling; end; end; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, False, (Dispatcher = 1)); end; end; end; 3, 4: //submenu only, recusive or not begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin StartingNode := tvFavoriteTabs.Selections[Index].GetFirstChild; if StartingNode <> nil then begin if TFavoriteTabs(StartingNode.Data).GroupNumber = 0 then begin RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, (Dispatcher = 4), False); end; end; end; end; end; end; if Dispatcher = 5 then //We start from the very first one, the top one. begin StartingNode := tvFavoriteTabs.Items.Item[0]; RecursiveSetGroupNumbers(StartingNode, GetNextGroupNumber, True, False); end; //... and the finale! tvFavoriteTabs.CustomSort(@MySortViaGroup); ClearCutAndPasteList; end; { TfrmOptionsFavoriteTabs.MakeUsUpToDatePriorImportExport } function TfrmOptionsFavoriteTabs.MakeUsUpToDatePriorImportExport: boolean; var iIndex: integer; Answer: TMyMsgResult; slRememberCurrentSelections: TStringList; begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Result := (FLastLoadedFavoriteTabsListSignature = GetSettingsSignatureOfThisFrame); if not Result then begin Answer := MsgBox(rsMsgFavoriteTabsModifiedNoImport, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: begin slRememberCurrentSelections := TStringList.Create; try // Saving a trace of what is selected right now. for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do if tvFavoriteTabs.Items[iIndex].Selected then if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then slRememberCurrentSelections.Add(GUIDtoString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)); gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); Result := True; // Restoring what was selected. tvFavoriteTabs.ClearSelection(False); for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then tvFavoriteTabs.Items[iIndex].Selected := (slRememberCurrentSelections.IndexOf(GUIDtoString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)) <> -1); finally FreeAndNil(slRememberCurrentSelections); end; end; end; end; end; { TfrmOptionsFavoriteTabs.miExportToLegacyTabsFileClick } // We will not annoy user nad even if nothing has been saved yet, even if he might have move entries from a place to another, // we will accept to export selection anyway. But because of this, we will do it from the "Temp" list AND // it will be based from "UniqueID" of each. procedure TfrmOptionsFavoriteTabs.miExportToLegacyTabsFileClick(Sender: TObject); var iIndex, iFileExportedSuccessfully, iMaybeExportedIndex, iSelectionMade: integer; sTargetDirectory, sUserMessage: string; begin if MakeUsUpToDatePriorImportExport then begin if SelectDirectory(rsSelectDir, '', sTargetDirectory, False) then begin iFileExportedSuccessfully := 0; iSelectionMade := 0; gFavoriteTabsList.LastImportationStringUniqueId.Clear; for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do begin if tvFavoriteTabs.Items[iIndex].Selected then begin Inc(iSelectionMade); if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then begin iMaybeExportedIndex := gFavoriteTabsList.GetIndexForSuchUniqueID(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID); if iMaybeExportedIndex <> -1 then if gFavoriteTabsList.ExportToLegacyTabsFile(iMaybeExportedIndex, sTargetDirectory) then Inc(iFileExportedSuccessfully); end; end; end; sUserMessage := ''; for iIndex := 0 to pred(gFavoriteTabsList.LastImportationStringUniqueId.Count) do sUserMessage := sUserMessage + #$0A + gFavoriteTabsList.LastImportationStringUniqueId.Strings[iIndex]; msgOk(Format(rsMsgFavoriteTabsExportedSuccessfully, [iFileExportedSuccessfully, iSelectionMade]) + #$0A + sUserMessage); end; end; end; { TfrmOptionsFavoriteTabs.miImportLegacyTabFilesClick } procedure TfrmOptionsFavoriteTabs.miImportLegacyTabFilesClick(Sender: TObject); var iIndex, iFileImportedSuccessfully: integer; iPositionToInsert: integer = -1; NodeAfterAddition: TTreeNode; RememberUniqueIdToRemove: TGUID; begin if MakeUsUpToDatePriorImportExport then begin // 1. If we need to create a sub menu, let's create it first if TComponent(Sender).Tag = 2 then begin NodeAfterAddition := ActualAddFavoriteTabs(fte_STARTMENU, rsMsgFavoriteTabsImportSubMenuName, naInsert); tvFavoriteTabs.ClearSelection(True); NodeAfterAddition.Selected := True; NodeAfterAddition := ActualAddFavoriteTabs(fte_ACTUALFAVTABS, rsMsgFavoriteTabsDragHereEntry, naAddChildFirst); NodeAfterAddition.Selected := True; NodeAfterAddition.Expand(True); RememberUniqueIdToRemove := TFavoriteTabs(tvFavoriteTabs.Selected.Data).UniqueID; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Save; end; // 3. Prompt user for which file to import. OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgFavoriteTabsImportTitle; if OpenDialog.Execute then begin // 4. Now let's import them one by one. if tvFavoriteTabs.Selected <> nil then if (TComponent(Sender).Tag = 1) or (TComponent(Sender).Tag = 2) then iPositionToInsert := gFavoriteTabsList.GetIndexForSuchUniqueID(TFavoriteTabs(tvFavoriteTabs.Selected.Data).UniqueID); gFavoriteTabsList.LastImportationStringUniqueId.Clear; iIndex := 0; iFileImportedSuccessfully := 0; while iIndex < OpenDialog.Files.Count do begin if gFavoriteTabsList.ImportFromLegacyTabsFile(OpenDialog.Files.Strings[iIndex], iPositionToInsert) then begin Inc(iFileImportedSuccessfully); if iPositionToInsert <> -1 then Inc(iPositionToInsert); end; Inc(iIndex); end; // 5. Before we forget, let's update our mainmenu regarding Favorite Tabs we offer. gFavoriteTabsList.RefreshAssociatedMainMenu; // 6. Refresh what we see here in our Favorite Tabs configurations screen. gFavoriteTabsList.CopyFavoriteTabsListToFavoriteTabsList(FavoriteTabsListTemp); FavoriteTabsListTemp.LoadTTreeView(tvFavoriteTabs); cbFullExpandTreeChange(cbFullExpandTree); if TComponent(Sender).Tag = 2 then begin for iIndex := pred(tvFavoriteTabs.Items.Count) downto 0 do // We go back since we're deleting something in a list. if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then if IsEqualGUID(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID, RememberUniqueIdToRemove) then tvFavoriteTabs.Items[iIndex].Delete; FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); Save; end; // 7. Let's higlight in our trees the one(s) that have been imported so it will give feeback to user. tvFavoriteTabs.ClearSelection(False); for iIndex := 0 to pred(tvFavoriteTabs.Items.Count) do begin if TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).Dispatcher = fte_ACTUALFAVTABS then begin if gFavoriteTabsList.LastImportationStringUniqueId.IndexOf(GUIDToString(TFavoriteTabs(tvFavoriteTabs.Items[iIndex].Data).UniqueID)) <> -1 then tvFavoriteTabs.Items[iIndex].Selected := True; end; end; // 7. Refresh our last signature since what we have is up to date. FLastLoadedFavoriteTabsListSignature := GetSettingsSignatureOfThisFrame; // 8. Finally, let's inform our user we've complete importation. msgOk(Format(rsMsgFavoriteTabsImportedSuccessfully, [iFileImportedSuccessfully, OpenDialog.Files.Count])); if not tvFavoriteTabs.Focused then if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; end; { TfrmOptionsFavoriteTabs.miTestResultingFavoriteTabsMenuClick } procedure TfrmOptionsFavoriteTabs.miTestResultingFavoriteTabsMenuClick(Sender: TObject); var p: TPoint; begin FavoriteTabsListTemp.RefreshFromTTreeView(tvFavoriteTabs); //We need to refresh our temporary Directory Hotlist in case user played with the tree and added/removed/moved item(s). FavoriteTabsListTemp.PopulateMenuWithFavoriteTabs(pmFavoriteTabsTestMenu, @miShowWhereItWouldGo, ftmp_JUSTFAVTABS); p := tvFavoriteTabs.ClientToScreen(Classes.Point(0, 0)); p.x := p.x + tvFavoriteTabs.Width; pmFavoriteTabsTestMenu.PopUp(p.X, p.Y); end; { TfrmOptionsFavoriteTabs.miShowWhereItWouldGo } procedure TfrmOptionsFavoriteTabs.miShowWhereItWouldGo(Sender: TObject); begin if FavoriteTabsListTemp.FavoriteTabs[tag].Dispatcher = fte_ACTUALFAVTABS then msgOK(Format(rsMsgFavoriteTabsThisWillLoadFavTabs, [FavoriteTabsListTemp.FavoriteTabs[TComponent(Sender).tag].FavoriteTabsName])); end; { TfrmOptionsFavoriteTabs.miOpenAllBranchesClick } procedure TfrmOptionsFavoriteTabs.miOpenAllBranchesClick(Sender: TObject); begin tvFavoriteTabs.FullExpand; if tvFavoriteTabs.Selected <> nil then begin tvFavoriteTabs.Selected.MakeVisible; if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; { TfrmOptionsFavoriteTabs.miCollapseAllClick } procedure TfrmOptionsFavoriteTabs.miCollapseAllClick(Sender: TObject); begin tvFavoriteTabs.FullCollapse; if tvFavoriteTabs.Selected <> nil then begin tvFavoriteTabs.Selected.MakeVisible; if tvFavoriteTabs.CanFocus then tvFavoriteTabs.SetFocus; end; end; { TfrmOptionsFavoriteTabs.miCutSelectionClick } procedure TfrmOptionsFavoriteTabs.miCutSelectionClick(Sender: TObject); var Index: integer; begin if tvFavoriteTabs.SelectionCount > 0 then begin for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin CutAndPasteIndexList.Add(IntToStr(tvFavoriteTabs.Selections[Index].AbsoluteIndex)); end; miPasteSelection.Enabled := True; end; end; { TfrmOptionsFavoriteTabs.miPasteSelectionClick } procedure TfrmOptionsFavoriteTabs.miPasteSelectionClick(Sender: TObject); var DestinationNode: TTreeNode; Index: longint; begin if CutAndPasteIndexList.Count > 0 then begin DestinationNode := tvFavoriteTabs.Selected; if DestinationNode <> nil then begin tvFavoriteTabs.ClearSelection(False); for Index := 0 to pred(CutAndPasteIndexList.Count) do begin tvFavoriteTabs.Items.Item[StrToInt(CutAndPasteIndexList.Strings[Index])].Selected := True; end; for Index := 0 to pred(tvFavoriteTabs.SelectionCount) do begin tvFavoriteTabs.Selections[Index].MoveTo(DestinationNode, naInsert); end; ClearCutAndPasteList; end; end; end; end. ��������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslog.pas����������������������������������������������������������0000644�0001750�0000144�00000013057�12653160466�017650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Log options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsLog; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, EditBtn, Buttons, Menus, fOptionsFrame; type { TfrmOptionsLog } TfrmOptionsLog = class(TOptionsEditor) cbLogArcOp: TCheckBox; cbLogCpMvLn: TCheckBox; cbLogDelete: TCheckBox; cbLogDirOp: TCheckBox; cbLogErrors: TCheckBox; cbLogFile: TCheckBox; cbIncludeDateInLogFilename: TCheckBox; cbLogInfo: TCheckBox; cbLogCommandLineExecution: TCheckBox; cbLogSuccess: TCheckBox; cbLogVFS: TCheckBox; cbLogStartShutdown: TCheckBox; fneLogFileName: TFileNameEdit; gbLogFile: TGroupBox; gbLogFileOp: TGroupBox; gbLogFileStatus: TGroupBox; btnRelativeLogFile: TSpeedButton; pmPathHelper: TPopupMenu; btnViewLogFile: TSpeedButton; procedure btnRelativeLogFileClick(Sender: TObject); procedure cbLogFileChange(Sender: TObject); procedure btnViewLogFileClick(Sender: TObject); private FLastLoadedOptionSignature: dword; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses fOptions, uShowMsg, uComponentsSignature, fMain, uGlobs, uLng, uSpecialDir, uShowForm, uDCUtils; { TfrmOptionsLog } class function TfrmOptionsLog.GetIconIndex: integer; begin Result := 23; end; class function TfrmOptionsLog.GetTitle: string; begin Result := rsOptionsEditorLog; end; procedure TfrmOptionsLog.cbLogFileChange(Sender: TObject); begin cbIncludeDateInLogFilename.Enabled := cbLogFile.Checked; end; procedure TfrmOptionsLog.btnViewLogFileClick(Sender: TObject); begin frmMain.Commands.cm_ViewLogFile([]); end; procedure TfrmOptionsLog.btnRelativeLogFileClick(Sender: TObject); begin fneLogFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneLogFileName, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsLog.Load; begin cbIncludeDateInLogFilename.Checked := gLogFileWithDateInName; cbLogFile.Checked := gLogFile; cbLogFileChange(cbLogFile); fneLogFileName.FileName := gLogFileName; cbLogCpMvLn.Checked := (log_cp_mv_ln in gLogOptions); cbLogDelete.Checked := (log_delete in gLogOptions); cbLogDirOp.Checked := (log_dir_op in gLogOptions); cbLogArcOp.Checked := (log_arc_op in gLogOptions); cbLogVFS.Checked := (log_vfs_op in gLogOptions); cbLogStartShutdown.Checked := (log_start_shutdown in gLogOptions); cbLogCommandLineExecution.Checked := (log_commandlineexecution in gLogOptions); cbLogSuccess.Checked := (log_success in gLogOptions); cbLogErrors.Checked := (log_errors in gLogOptions); cbLogInfo.Checked := (log_info in gLogOptions); FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; function TfrmOptionsLog.Save: TOptionsEditorSaveFlags; begin Result := []; gLogFile := cbLogFile.Checked; gLogFileWithDateInName := cbIncludeDateInLogFilename.Checked; gLogFileName := fneLogFileName.FileName; gLogOptions := []; // Reset log options if cbLogCpMvLn.Checked then Include(gLogOptions, log_cp_mv_ln); if cbLogDelete.Checked then Include(gLogOptions, log_delete); if cbLogDirOp.Checked then Include(gLogOptions, log_dir_op); if cbLogArcOp.Checked then Include(gLogOptions, log_arc_op); if cbLogVFS.Checked then Include(gLogOptions, log_vfs_op); if cbLogStartShutdown.Checked then Include(gLogOptions, log_start_shutdown); if cbLogCommandLineExecution.Checked then Include(gLogOptions, log_commandlineexecution); if cbLogSuccess.Checked then Include(gLogOptions, log_success); if cbLogErrors.Checked then Include(gLogOptions, log_errors); if cbLogInfo.Checked then Include(gLogOptions, log_info); FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; { TfrmOptionsLog.CanWeClose } function TfrmOptionsLog.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsLog); Answer := MsgBox(rsMsgLogOptionsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsarchivers.lfm����������������������������������������������������0000644�0001750�0000144�00000043557�12405254001�021040� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsArchivers: TfrmOptionsArchivers Height = 642 Width = 901 ClientHeight = 642 ClientWidth = 901 DesignLeft = 276 DesignTop = 84 object lbxMultiArc: TListBox[0] Left = 0 Height = 642 Top = 0 Width = 55 Align = alLeft ItemHeight = 0 OnSelectionChange = lbxMultiArcSelectionChange ScrollWidth = 53 TabOrder = 0 end object splMultiArc: TSplitter[1] Left = 55 Height = 642 Top = 0 Width = 5 end object pnlArchiverCommands: TPanel[2] Left = 60 Height = 642 Top = 0 Width = 841 Align = alClient BevelOuter = bvNone ClientHeight = 642 ClientWidth = 841 TabOrder = 2 object pcArchiverCommands: TPageControl AnchorSideRight.Side = asrBottom Left = 0 Height = 592 Top = 0 Width = 841 HelpType = htKeyword HelpKeyword = '/multiarc.html' ActivePage = tbArchiverGeneral Align = alClient Anchors = [akTop, akLeft, akRight] TabIndex = 0 TabOrder = 0 object tbArchiverGeneral: TTabSheet Caption = 'General' ClientHeight = 564 ClientWidth = 833 object lblDescription: TLabel AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 10 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 Caption = 'De&scription:' FocusControl = edtDescription ParentColor = False end object edtDescription: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 25 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object lblArchiver: TLabel AnchorSideTop.Control = edtDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 50 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Arc&hiver:' FocusControl = fneArchiver ParentColor = False end object lblArchiveExtension: TLabel AnchorSideTop.Control = fneArchiver AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 90 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'E&xtension:' FocusControl = edtArchiveExtension ParentColor = False end object edtArchiveExtension: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveExtension AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 105 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 2 end object lblArchiveList: TLabel AnchorSideTop.Control = edtArchiveExtension AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 130 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = '&List:' FocusControl = edtArchiveList ParentColor = False end object edtArchiveList: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 145 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 3 end object lblArchiveExtract: TLabel AnchorSideTop.Control = memArchiveListFormat AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 325 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Ex&tract:' FocusControl = edtArchiveExtract ParentColor = False end object edtArchiveExtract: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 340 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 7 end object lblArchiveAdd: TLabel AnchorSideTop.Control = edtArchiveExtract AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 365 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Add&ing:' FocusControl = edtArchiveAdd ParentColor = False end object edtArchiveAdd: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 380 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 8 end object lblArchiveListFormat: TLabel AnchorSideTop.Control = edtArchiveListEnd AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 248 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 2 BorderSpacing.Right = 10 Caption = 'Listing for&mat:' FocusControl = memArchiveListFormat ParentColor = False end object memArchiveListFormat: TMemo AnchorSideTop.Control = lblArchiveListFormat AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 60 Top = 263 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 Lines.Strings = ( '' ) ScrollBars = ssAutoBoth TabOrder = 6 WordWrap = False end object fneArchiver: TFileNameEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiver AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeArchiver Left = 10 Height = 23 Top = 65 Width = 758 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 1 end object lblArchiveListStart: TLabel AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = edtArchiveList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 170 Width = 809 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 Caption = 'Listin&g start (optional):' FocusControl = edtArchiveListStart ParentColor = False end object edtArchiveListStart: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveListStart AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 185 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 4 end object lblArchiveListEnd: TLabel AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = edtArchiveListStart AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 208 Width = 809 Anchors = [akTop, akLeft, akRight] Caption = 'Listing &finish (optional):' FocusControl = edtArchiveListEnd ParentColor = False end object edtArchiveListEnd: TEdit AnchorSideLeft.Control = lblDescription AnchorSideTop.Control = lblArchiveListEnd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lblDescription AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 223 Width = 809 Anchors = [akTop, akLeft, akRight] TabOrder = 5 end object btnRelativeArchiver: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneArchiver AnchorSideRight.Control = edtDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneArchiver AnchorSideBottom.Side = asrBottom Left = 792 Height = 23 Hint = 'Some functions to select appropriate path' Top = 65 Width = 27 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeArchiverClick end end object tbArchiverAdditional: TTabSheet HelpType = htKeyword HelpKeyword = '/multiarc.html' Caption = 'Additional' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 553 ClientWidth = 835 OnShow = tbArchiverAdditionalShow object stgArchiverCommands: TStringGrid Left = 10 Height = 469 Top = 10 Width = 815 Align = alClient AutoFillColumns = True ColCount = 2 DefaultColWidth = 128 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goEditing, goSmoothScroll] RowCount = 10 TabOrder = 0 OnPrepareCanvas = stgArchiverCommandsPrepareCanvas ColWidths = ( 64 730 ) end object gbArchiverOptions: TGroupBox Left = 10 Height = 62 Top = 481 Width = 815 Align = alBottom Anchors = [akLeft, akRight] AutoSize = True BorderSpacing.Top = 2 Caption = 'Options' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 8 ClientHeight = 44 ClientWidth = 811 TabOrder = 1 object chkMultiArcOutput: TCheckBox AnchorSideTop.Control = gbArchiverOptions Left = 10 Height = 23 Top = 8 Width = 162 Caption = 'S&how console output' TabOrder = 0 end object chkMultiArcDebug: TCheckBox AnchorSideTop.Control = gbArchiverOptions AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbArchiverOptions AnchorSideRight.Side = asrBottom Left = 697 Height = 23 Top = 8 Width = 104 Anchors = [akTop, akRight] Caption = 'De&bug mode' TabOrder = 1 end end end end object pnlMultiArcButtons: TPanel Left = 0 Height = 50 Top = 592 Width = 841 Align = alBottom BevelOuter = bvNone ClientHeight = 50 ClientWidth = 841 TabOrder = 1 object btnMultiArcApply: TBitBtn AnchorSideTop.Control = pnlMultiArcButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlMultiArcButtons AnchorSideRight.Side = asrBottom Left = 731 Height = 30 Top = 10 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 10 Caption = 'A&pply' OnClick = btnMultiArcApplyClick TabOrder = 5 end object btnMultiArcRename: TBitBtn AnchorSideTop.Control = btnMultiArcApply AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnMultiArcApply Left = 625 Height = 30 Top = 10 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&Rename' OnClick = btnMultiArcRenameClick TabOrder = 4 end object btnMultiArcDelete: TBitBtn AnchorSideTop.Control = btnMultiArcApply AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnMultiArcRename Left = 519 Height = 30 Top = 10 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'D&elete' OnClick = btnMultiArcDeleteClick TabOrder = 3 end object btnMultiArcAdd: TBitBtn AnchorSideTop.Control = btnMultiArcApply AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnMultiArcDelete Left = 413 Height = 30 Top = 10 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'A&dd' OnClick = btnMultiArcAddClick TabOrder = 2 end object chkMultiArcEnabled: TCheckBox AnchorSideLeft.Control = pnlMultiArcButtons AnchorSideTop.Control = pnlMultiArcButtons AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAutoConfig Left = 10 Height = 19 Top = 16 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 6 Caption = 'E&nabled' OnChange = chkMultiArcEnabledChange TabOrder = 0 end object btnAutoConfig: TBitBtn AnchorSideTop.Control = btnMultiArcApply AnchorSideRight.Control = btnMultiArcAdd Left = 276 Height = 30 Top = 10 Width = 131 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'A&uto Configure' OnClick = btnAutoConfigClick TabOrder = 1 end end end object pmPathHelper: TPopupMenu[3] left = 848 top = 120 end end �������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdriveslistbutton.lfm���������������������������������������������0000644�0001750�0000144�00000002301�12020403374�022456� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsDrivesListButton: TfrmOptionsDrivesListButton object gbDrivesList: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 85 Top = 6 Width = 308 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Drives list' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 67 ClientWidth = 304 TabOrder = 0 object cbShowLabel: TCheckBox Left = 10 Height = 17 Top = 4 Width = 98 Caption = 'Show &label' TabOrder = 0 end object cbShowFileSystem: TCheckBox AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 25 Width = 98 Caption = 'Show &file system' TabOrder = 1 end object cbShowFreeSpace: TCheckBox Left = 10 Height = 17 Top = 46 Width = 98 Caption = 'Show fr&ee space' TabOrder = 2 end end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolsdiffer.lfm��������������������������������������������������0000644�0001750�0000144�00000003600�12645167345�021377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsDiffer: TfrmOptionsDiffer Height = 478 Width = 586 ClientHeight = 478 ClientWidth = 586 DesignLeft = 377 DesignTop = 160 inherited edtToolsParameters: TEdit Height = 20 Top = 108 end inherited fneToolsPath: TFileNameEdit Height = 20 Top = 60 end inherited lblToolsPath: TLabel Height = 14 Width = 173 end inherited lblToolsParameters: TLabel Height = 14 Top = 90 Width = 140 end inherited cbToolsKeepTerminalOpen: TCheckBox Top = 161 Width = 350 end inherited cbToolsRunInTerminal: TCheckBox Top = 140 Width = 144 end inherited cbToolsUseExternalProgram: TCheckBox Width = 160 end inherited btnRelativeToolPath: TSpeedButton Top = 60 end object rgResultingFramePositionAfterCompare: TRadioGroup[8] AnchorSideLeft.Control = edtToolsParameters AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtToolsParameters AnchorSideRight.Side = asrBottom Left = 8 Height = 58 Top = 192 Width = 571 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 12 Caption = 'Position of frame panel after the comparison:' ChildSizing.LeftRightSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 40 ClientWidth = 567 ItemIndex = 0 Items.Strings = ( 'Active frame panel on left, inactive on right (legacy)' 'Left frame panel on left, right on right' ) TabOrder = 5 end inherited pmPathHelper: TPopupMenu[9] left = 464 top = 8 end end ��������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassocextra.lfm�����������������������������������������������0000644�0001750�0000144�00000006252�12532643273�022073� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFileAssocExtra: TfrmOptionsFileAssocExtra Height = 280 Width = 500 AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 280 ClientWidth = 500 ParentShowHint = False ShowHint = True DesignLeft = 141 DesignTop = 288 object cbOfferToAddToFileAssociations: TCheckBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 24 Hint = 'When accessing file association, offer to add current selected file if not already included in a configured file type' Top = 6 Width = 472 Caption = 'Offer to add selection to file association when not included already' TabOrder = 0 end object gbExtendedContextMenuOptions: TGroupBox[1] AnchorSideLeft.Control = cbOfferToAddToFileAssociations AnchorSideTop.Control = cbExtendedContextMenu AnchorSideTop.Side = asrBottom Left = 6 Height = 143 Top = 68 Width = 277 AutoSize = True BorderSpacing.Top = 4 Caption = 'Extended options items:' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 124 ClientWidth = 273 TabOrder = 1 object cbExecuteViaShell: TCheckBox AnchorSideLeft.Control = gbExtendedContextMenuOptions AnchorSideTop.Control = gbExtendedContextMenuOptions Left = 8 Height = 24 Top = 8 Width = 135 BorderSpacing.Top = 4 Caption = 'Execute via shell' TabOrder = 0 end object cbOpenSystemWithTerminalClose: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbExecuteViaShell AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 36 Width = 227 BorderSpacing.Top = 4 Caption = 'Execute via terminal and close' TabOrder = 1 end object cbOpenSystemWithTerminalStayOpen: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalClose AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 64 Width = 257 BorderSpacing.Top = 4 Caption = 'Execute via terminal and stay open' TabOrder = 2 end object cbIncludeConfigFileAssoc: TCheckBox AnchorSideLeft.Control = cbExecuteViaShell AnchorSideTop.Control = cbOpenSystemWithTerminalStayOpen AnchorSideTop.Side = asrBottom Left = 8 Height = 24 Top = 92 Width = 223 BorderSpacing.Top = 4 Caption = 'File association configuration' TabOrder = 3 end end object cbExtendedContextMenu: TCheckBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbOfferToAddToFileAssociations AnchorSideTop.Side = asrBottom Left = 6 Height = 24 Hint = 'When accessing file association, offer to add current selected file if not already included in a configured file type' Top = 40 Width = 185 BorderSpacing.Top = 10 Caption = 'Extended context menu' OnChange = cbExtendedContextMenuChange TabOrder = 2 end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsmisc.pas���������������������������������������������������������0000644�0001750�0000144�00000016164�12454457622�020026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Miscellaneous options page Copyright (C) 2006-2014 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsMisc; {$mode objfpc}{$H+} interface uses EditBtn, Buttons, Menus, Classes, SysUtils, StdCtrls, Spin, DividerBevel, fOptionsFrame; type { TfrmOptionsMisc } TfrmOptionsMisc = class(TOptionsEditor) btnThumbCompactCache: TButton; chkGoToRoot: TCheckBox; chkThumbSave: TCheckBox; chkShowWarningMessages: TCheckBox; dblThumbnails: TDividerBevel; gbExtended: TGroupBox; lblThumbPixels: TLabel; lblThumbSize: TLabel; lblThumbSeparator: TLabel; speThumbWidth: TSpinEdit; speThumbHeight: TSpinEdit; gbTCExportImport: TGroupBox; lblTCExecutable: TLabel; fneTCExecutableFilename: TFileNameEdit; btnRelativeTCExecutableFile: TSpeedButton; lblTCConfig: TLabel; fneTCConfigFilename: TFileNameEdit; btnRelativeTCConfigFile: TSpeedButton; btnViewConfigFile: TSpeedButton; lblTCPathForTool: TLabel; edOutputPathForToolbar: TEdit; btnOutputPathForToolbar: TButton; btnRelativeOutputPathForToolbar: TSpeedButton; pmPathHelper: TPopupMenu; procedure btnThumbCompactCacheClick(Sender: TObject); procedure btnRelativeTCExecutableFileClick(Sender: TObject); procedure btnRelativeTCConfigFileClick(Sender: TObject); procedure btnViewConfigFileClick(Sender: TObject); procedure btnOutputPathForToolbarClick(Sender: TObject); procedure btnRelativeOutputPathForToolbarClick(Sender: TObject); procedure GenericSomethingChanged(Sender: TObject); private FModificationTookPlace: Boolean; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; procedure BringUsToTCConfigurationPage; implementation {$R *.lfm} uses uShowMsg, fOptions, Forms, Dialogs, fMain, Controls, uSpecialDir, uShowForm, uGlobs, uLng, uThumbnails; { TfrmOptionsMisc } class function TfrmOptionsMisc.GetIconIndex: Integer; begin Result := 14; end; class function TfrmOptionsMisc.GetTitle: String; begin Result := rsOptionsEditorMiscellaneous; end; procedure TfrmOptionsMisc.btnThumbCompactCacheClick(Sender: TObject); begin TThumbnailManager.CompactCache; end; procedure TfrmOptionsMisc.Load; begin chkShowWarningMessages.Checked := gShowWarningMessages; chkThumbSave.Checked := gThumbSave; speThumbWidth.Value := gThumbSize.cx; speThumbHeight.Value := gThumbSize.cy; chkGoToRoot.Checked := gGoToRoot; {$IFDEF MSWINDOWS} gbTCExportImport.Visible:=True; fneTCExecutableFilename.FileName := gTotalCommanderExecutableFilename; fneTCConfigFilename.FileName := gTotalCommanderConfigFilename; edOutputPathForToolbar.Text := gTotalCommanderToolbarPath; fneTCExecutableFilename.DialogTitle := rsMsgLocateTCExecutable; fneTCConfigFilename.DialogTitle := rsMsgLocateTCConfiguation; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); {$ENDIF} FModificationTookPlace := False; end; function TfrmOptionsMisc.Save: TOptionsEditorSaveFlags; begin Result := []; gShowWarningMessages := chkShowWarningMessages.Checked; gThumbSave := chkThumbSave.Checked; gThumbSize.cx := speThumbWidth.Value; gThumbSize.cy := speThumbHeight.Value; gGoToRoot := chkGoToRoot.Checked; {$IFDEF MSWINDOWS} gTotalCommanderExecutableFilename := fneTCExecutableFilename.FileName; gTotalCommanderConfigFilename := fneTCConfigFilename.FileName; gTotalCommanderToolbarPath := edOutputPathForToolbar.Text; {$ENDIF} FModificationTookPlace := False; end; { TfrmOptionsMisc.btnRelativeTCExecutableFileClick } procedure TfrmOptionsMisc.btnRelativeTCExecutableFileClick(Sender: TObject); begin fneTCExecutableFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneTCExecutableFilename, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMisc.btnRelativeTCConfigFileClick } procedure TfrmOptionsMisc.btnRelativeTCConfigFileClick(Sender: TObject); begin fneTCConfigFilename.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneTCConfigFilename, pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMisc.btnViewConfigFileClick } procedure TfrmOptionsMisc.btnViewConfigFileClick(Sender: TObject); begin ShowViewerByGlob(fneTCConfigFilename.FileName); end; { TfrmOptionsMisc.btnOutputPathForToolbarClick } procedure TfrmOptionsMisc.btnOutputPathForToolbarClick(Sender: TObject); var MaybeResultingOutputPath: string; begin MaybeResultingOutputPath := edOutputPathForToolbar.Text; if MaybeResultingOutputPath = '' then MaybeResultingOutputPath := frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, MaybeResultingOutputPath, MaybeResultingOutputPath, False) then edOutputPathForToolbar.Text := MaybeResultingOutputPath; end; { TfrmOptionsMisc.btnRelativeOutputPathForToolbarClick } procedure TfrmOptionsMisc.btnRelativeOutputPathForToolbarClick(Sender: TObject); begin edOutputPathForToolbar.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edOutputPathForToolbar, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsMisc.GenericSomethingChanged } procedure TfrmOptionsMisc.GenericSomethingChanged(Sender: TObject); begin FModificationTookPlace := True; end; { TfrmOptionsMisc.CanWeClose } function TfrmOptionsMisc.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := not FModificationTookPlace; if not Result then begin ShowOptions(TfrmOptionsMisc); Answer := MsgBox(rsMsgMiscellaneousModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; procedure BringUsToTCConfigurationPage; var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsMisc); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsMisc); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsmisc.lfm���������������������������������������������������������0000644�0001750�0000144�00000046562�12454457622�020026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsMisc: TfrmOptionsMisc Height = 336 Width = 719 HorzScrollBar.Page = 1 VertScrollBar.Page = 1 AutoScroll = True ClientHeight = 336 ClientWidth = 719 DesignLeft = 113 DesignTop = 219 object gbExtended: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 182 Top = 6 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 164 ClientWidth = 703 TabOrder = 0 object chkShowWarningMessages: TCheckBox Left = 12 Height = 19 Top = 6 Width = 251 Caption = 'Show &warning messages ("OK" button only)' OnClick = GenericSomethingChanged TabOrder = 0 end object chkThumbSave: TCheckBox AnchorSideTop.Control = dblThumbnails AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 79 Width = 154 BorderSpacing.Top = 4 Caption = '&Save thumbnails in cache' OnClick = GenericSomethingChanged TabOrder = 2 end object lblThumbSize: TLabel AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 108 Width = 83 Caption = '&Thumbnail size:' FocusControl = speThumbWidth ParentColor = False end object dblThumbnails: TDividerBevel AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = chkGoToRoot AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 12 Height = 15 Top = 60 Width = 679 Caption = 'Thumbnails' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 ParentFont = False end object speThumbWidth: TSpinEdit AnchorSideLeft.Control = lblThumbSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkThumbSave AnchorSideTop.Side = asrBottom Left = 101 Height = 23 Top = 104 Width = 50 BorderSpacing.Left = 6 BorderSpacing.Top = 6 MaxValue = 512 MinValue = 16 OnChange = GenericSomethingChanged TabOrder = 3 Value = 16 end object speThumbHeight: TSpinEdit AnchorSideLeft.Control = lblThumbSeparator AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth Left = 170 Height = 23 Top = 104 Width = 50 BorderSpacing.Left = 6 MaxValue = 512 MinValue = 16 OnChange = GenericSomethingChanged TabOrder = 4 Value = 16 end object lblThumbSeparator: TLabel AnchorSideLeft.Control = speThumbWidth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 157 Height = 15 Top = 108 Width = 7 BorderSpacing.Left = 6 Caption = 'X' ParentColor = False end object lblThumbPixels: TLabel AnchorSideLeft.Control = speThumbHeight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrCenter Left = 226 Height = 15 Top = 108 Width = 29 BorderSpacing.Left = 6 Caption = 'pixels' ParentColor = False end object btnThumbCompactCache: TButton AnchorSideTop.Control = speThumbWidth AnchorSideTop.Side = asrBottom Left = 12 Height = 25 Top = 133 Width = 271 AutoSize = True BorderSpacing.Top = 6 Caption = '&Remove thumbnails for no longer existing files' OnClick = btnThumbCompactCacheClick TabOrder = 5 end object chkGoToRoot: TCheckBox AnchorSideTop.Control = chkShowWarningMessages AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 29 Width = 304 BorderSpacing.Top = 4 Caption = 'Always &go to the root of a drive when changing drives' OnClick = GenericSomethingChanged TabOrder = 1 end end object gbTCExportImport: TGroupBox[1] AnchorSideLeft.Control = gbExtended AnchorSideTop.Control = gbExtended AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbExtended AnchorSideRight.Side = asrBottom Left = 6 Height = 103 Top = 200 Width = 707 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 Caption = 'Regarding TC export/import:' ClientHeight = 85 ClientWidth = 703 TabOrder = 1 TabStop = True Visible = False object fneTCExecutableFilename: TFileNameEdit AnchorSideLeft.Control = lblTCExecutable AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbTCExportImport AnchorSideRight.Control = btnRelativeTCExecutableFile Left = 162 Height = 23 Top = 4 Width = 484 DialogOptions = [ofPathMustExist, ofFileMustExist] Filter = 'executables|*.exe|any files|*.*' FilterIndex = 1 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 MaxLength = 0 TabOrder = 0 OnChange = GenericSomethingChanged end object btnRelativeTCExecutableFile: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCExecutableFilename AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnViewConfigFile AnchorSideRight.Side = asrBottom Left = 670 Height = 24 Hint = 'Some functions to select appropriate path' Top = 3 Width = 24 Anchors = [akTop, akRight] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeTCExecutableFileClick end object lblTCExecutable: TLabel AnchorSideTop.Control = fneTCExecutableFilename AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTCPathForTool AnchorSideRight.Side = asrBottom Left = -586 Height = 15 Top = 8 Width = 742 Alignment = taRightJustify Anchors = [akTop, akLeft, akRight] Caption = 'TC executable:' ParentColor = False end object fneTCConfigFilename: TFileNameEdit AnchorSideLeft.Control = lblTCConfig AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCExecutableFilename AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 162 Height = 23 Top = 31 Width = 459 DialogOptions = [ofPathMustExist, ofFileMustExist] Filter = 'ini configuration file|*.ini|any file|*.*' FilterIndex = 1 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 MaxLength = 0 TabOrder = 1 OnChange = GenericSomethingChanged end object lblTCConfig: TLabel AnchorSideTop.Control = fneTCConfigFilename AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTCPathForTool AnchorSideRight.Side = asrBottom Left = 60 Height = 15 Top = 35 Width = 96 Anchors = [akTop, akRight] Caption = 'Configuration file:' ParentColor = False end object btnRelativeTCConfigFile: TSpeedButton AnchorSideLeft.Control = fneTCConfigFilename AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCConfigFilename AnchorSideTop.Side = asrCenter Left = 645 Height = 24 Hint = 'Some functions to select appropriate path' Top = 30 Width = 24 BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeTCConfigFileClick end object btnViewConfigFile: TSpeedButton AnchorSideLeft.Control = btnRelativeTCConfigFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCConfigFilename AnchorSideTop.Side = asrCenter Left = 670 Height = 24 Hint = 'View log file content' Top = 30 Width = 24 BorderSpacing.Left = 1 Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000130B0000130B00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C17213B6E9E3A6EA000000000000000000000000000 00000000000000000000000000000000000000000000000000003A83CC44C8FF 29B2FF316DA70000000000000000000000000000000000000000000000000000 000000000000000000003881CC55DBFF3AC6FF82756C6F6C6B69696C68696F73 6F66CFAA61B87E0BB67D0AB67D0AB67C0AB67D0AB77F0F7F580A0000002980DB 9F928C7D7773E9D7A3FFF5B0FFEEA8E7CA94737379F6FBFFF2F7FFF2F7FFF2F6 FFF2F7FFF7FFFFB77F0F000000C98506828088E9D8A5FFF8BBFFEFB2FFE7A6FF E6A6E6C28984858AECECEDECECEDEAEBEEEAEBEEF5FBFFB67D0A000000C08511 7F8290FFF2AFFFEFB2FFE9ABFFE7B3FFEFCAFFE09C7B7B7EEAE9E8EAE9E8E6E6 E6E6E6E6F5FBFFB67C09000000BD8412868C9AFFEAA5FFE6A4FFE7B2FFEDC8FF F7E3FFDC96858689E5E4E3E5E4E3E0E0E1E0E0E1F5FBFFB67C09000000BB8210 9DA3B0ECCE97FFE4A3FFEEC9FFF7E3FFF3DAECBE8096979AE1E1E0DEDDDCDBDB DCDBDBDCF5FBFFB67C09000000B9800DDDE3EE9E9B9BEECA8FFFDD9AFFDA95EE C2829B9895D9D7D7D9D7D7D9D7D7D8D6D8D8D6D8F6FCFFB67C0A000000B77E0B F9FFFFC4C4C6A5A4A6A4A4A7A4A3A6B1AFB3D6D4D3D4D2D3D4D2D3D4D2D3D4D2 D3D4D2D3F6FCFFB67D0A000000B67D0AF7FDFFCFCED0CFCECECCCBCDCFCECECC CBCDCCCBCDCCCBCDCFCECECCCBCDCCCBCDCCCBCDF6FCFFB67D0A000000B67D0C F5FDFFF3F8FFF5F9FFF6FBFFF6FBFFF6FBFFF6FAFFF5FAFFF5F9FFF4F8FFF3F7 FFF3F7FFF4FDFFB67D0C000000B67F10F7E4C0DCAA4ADDAB4BDDAC4CDDAC4CDD AC4CDDAC4CDDAC4CDDAC4CDDAB4BDCAB4ADCAA4AF7E4C0B67F10000000B88216 EFD2A0EDCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF 9BEDCF9BEFD2A0B88216000000825D14B88217B78114B68114B68114B68114B6 8114B68114B68114B68114B68114B68114B78114B88217825D14 } OnClick = btnViewConfigFileClick end object edOutputPathForToolbar: TEdit AnchorSideLeft.Control = lblTCPathForTool AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneTCConfigFilename AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnOutputPathForToolbar Left = 162 Height = 23 Top = 58 Width = 476 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 OnChange = GenericSomethingChanged TabOrder = 2 end object lblTCPathForTool: TLabel AnchorSideTop.Control = edOutputPathForToolbar AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 46 Height = 15 Top = 62 Width = 110 Anchors = [akTop] Caption = 'Toolbar output path:' ParentColor = False end object btnOutputPathForToolbar: TButton AnchorSideTop.Control = edOutputPathForToolbar AnchorSideRight.Control = btnRelativeOutputPathForToolbar AnchorSideBottom.Control = edOutputPathForToolbar AnchorSideBottom.Side = asrBottom Left = 638 Height = 23 Top = 58 Width = 32 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnOutputPathForToolbarClick TabOrder = 3 end object btnRelativeOutputPathForToolbar: TSpeedButton AnchorSideLeft.Control = btnViewConfigFile AnchorSideTop.Control = edOutputPathForToolbar AnchorSideRight.Control = btnViewConfigFile AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edOutputPathForToolbar AnchorSideBottom.Side = asrBottom Left = 670 Height = 23 Hint = 'Some functions to select appropriate path' Top = 58 Width = 24 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeOutputPathForToolbarClick end end object pmPathHelper: TPopupMenu[2] left = 656 top = 32 end end ����������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslanguage.pas�����������������������������������������������������0000644�0001750�0000144�00000006065�12470120616�020641� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Language options page Copyright (C) 2006-2014 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsLanguage; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsLanguage } TfrmOptionsLanguage = class(TOptionsEditor) lngList: TListBox; private procedure FillLngListBox; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses LazUTF8Classes, uDebug, uFindEx, uGlobs, uGlobsPaths, uLng; { TfrmOptionsLanguage } procedure TfrmOptionsLanguage.FillLngListBox; var iIndex: Integer; fr: TSearchRecEx; sLangName: String; LanguageFileList: TStringListUtf8; begin LanguageFileList:= TStringListUtf8.Create; LanguageFileList.Sorted:= True; LanguageFileList.Duplicates:= dupAccept; try lngList.Clear; DCDebug('Language directory: ' + gpLngDir); if FindFirstEx(gpLngDir + '*.po', faAnyFile, fr) = 0 then repeat sLangName := GetLanguageName(gpLngDir + fr.Name); LanguageFileList.Add(Format('%s = %s', [sLangName, fr.Name])); until FindNextEx(fr) <> 0; FindCloseEx(fr); for iIndex:= 0 to pred(LanguageFileList.Count) do begin lngList.Items.add(LanguageFileList.Strings[iIndex]); if (gPOFileName = Trim(lngList.Items.ValueFromIndex[iIndex])) then lngList.ItemIndex:= iIndex; end; finally LanguageFileList.Free; end; end; class function TfrmOptionsLanguage.GetIconIndex: Integer; begin Result := 0; end; class function TfrmOptionsLanguage.GetTitle: String; begin Result := rsOptionsEditorLanguage; end; procedure TfrmOptionsLanguage.Load; begin FillLngListBox; end; function TfrmOptionsLanguage.Save: TOptionsEditorSaveFlags; var SelectedPOFileName: String; begin Result := []; if lngList.ItemIndex > -1 then begin SelectedPOFileName := Trim(lngList.Items.ValueFromIndex[lngList.ItemIndex]); if SelectedPOFileName <> gPOFileName then Include(Result, oesfNeedsRestart); gPOFileName := SelectedPOFileName; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/ucomponentssignature.pas�������������������������������������������������0000644�0001750�0000144�00000010153�12660674103�021567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Compute signature of a form, frame, etc. based on current options set Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) 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 uComponentsSignature; {$mode objfpc}{$H+} interface uses Classes, EditBtn; function ComputeSignatureBasedOnComponent(aComponent: TComponent; seed: dword): dword; function ComputeSignatureSingleComponent(aComponent: TComponent; seed: dword): dword; implementation uses //uDebug, Graphics, ComCtrls, ColorBox, ExtCtrls, Spin, StdCtrls, Math, Dialogs, SysUtils, crc; const SAMPLEBYTES: array[0..1] of byte = ($23, $35); { ComputeSignatureSingleComponent } function ComputeSignatureSingleComponent(aComponent: TComponent; seed: dword): dword; var SampleValue: dword; iSampleValue: integer; ColorSampleValue: TColor; begin Result := seed; case aComponent.ClassName of 'TCheckBox': Result := crc32(Result, @SAMPLEBYTES[ifthen(TCheckBox(aComponent).Checked, 1, 0)], 1); 'TRadioGroup': begin SampleValue := TRadioGroup(aComponent).ItemIndex; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; //'TRadioButton': 2016-01-20:DB-With LAZ 1.4.4 and FPC 2.6.4 and in Windows 7 64-bits, it looks like after the .LOAD, the RadioButton are all "false"... That's why we'll check the "itemIndex" of the TRadioGroup instead. 'TEdit': if length(TEdit(aComponent).Text) > 0 then Result := crc32(Result, @TEdit(aComponent).Text[1], length(TEdit(aComponent).Text)); 'TLabeledEdit': begin if length(TLabeledEdit(aComponent).Text) > 0 then Result := crc32(Result, @TLabeledEdit(aComponent).Text[1], length(TLabeledEdit(aComponent).Text)); end; 'TFileNameEdit': if length(TFileNameEdit(aComponent).FileName) > 0 then Result := crc32(Result, @TFileNameEdit(aComponent).FileName[1], length(TFileNameEdit(aComponent).FileName)); 'TComboBox': begin if TComboBox(aComponent).ItemIndex <> -1 then begin SampleValue := TComboBox(aComponent).ItemIndex; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; if length(TComboBox(aComponent).Text) > 0 then Result := crc32(Result, @TComboBox(aComponent).Text[1], length(TComboBox(aComponent).Text)); end; 'TSpinEdit': begin SampleValue := TSpinEdit(aComponent).Value; Result := crc32(Result, @SampleValue, sizeof(SampleValue)); end; 'TColorBox': begin ColorSampleValue := TColorBox(aComponent).Selected; Result := crc32(Result, @ColorSampleValue, 4); end; 'TTrackBar': begin iSampleValue := TTrackBar(aComponent).Position; Result := crc32(Result, @iSampleValue, 4); end; end; end; { ComputeSignatureBasedOnComponent } function ComputeSignatureBasedOnComponent(aComponent: TComponent; seed: dword): dword; var iComponent: integer; begin Result := seed; for iComponent := 0 to pred(aComponent.ComponentCount) do begin if aComponent.Components[iComponent].ComponentCount > 0 then Result := ComputeSignatureBasedOnComponent(aComponent.Components[iComponent], Result) else Result := ComputeSignatureSingleComponent(aComponent.Components[iComponent], Result); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionshotkeys.lfm������������������������������������������������������0000644�0001750�0000144�00000015212�12503247405�020534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsHotkeys: TfrmOptionsHotkeys Height = 513 Width = 808 ClientHeight = 513 ClientWidth = 808 DesignLeft = 423 DesignTop = 48 object lblCategories: TLabel[0] AnchorSideLeft.Control = lbxCategories AnchorSideTop.Control = Owner Left = 317 Height = 15 Top = 6 Width = 74 BorderSpacing.Top = 6 Caption = 'C&ategories:' FocusControl = lbxCategories ParentColor = False end object lblCommands: TLabel[1] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = edtFilter Left = 6 Height = 15 Top = 58 Width = 78 BorderSpacing.Top = 6 Caption = 'Co&mmands:' FocusControl = stgCommands ParentColor = False end object lbFilter: TLabel[2] AnchorSideTop.Control = edtFilter AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edtFilter Left = 663 Height = 15 Top = 57 Width = 32 Anchors = [akTop, akRight] BorderSpacing.Top = 4 BorderSpacing.Right = 4 Caption = '&Filter' FocusControl = edtFilter ParentColor = False end object lbxCategories: TComboBox[3] AnchorSideLeft.Control = lbSCFilesList AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCategories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 317 Height = 27 Top = 21 Width = 485 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Right = 6 ItemHeight = 0 OnChange = lbxCategoriesChange Style = csDropDownList TabOrder = 1 end object edtFilter: TEdit[4] AnchorSideTop.Control = lbxCategories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = stgCommands AnchorSideRight.Side = asrBottom Left = 699 Height = 25 Top = 52 Width = 103 Anchors = [akTop, akRight] BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 OnChange = edtFilterChange TabOrder = 2 end object stgCommands: TStringGrid[5] AnchorSideLeft.Control = lblCommands AnchorSideTop.Control = edtFilter AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 287 Top = 81 Width = 796 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True BorderSpacing.Right = 6 ColCount = 3 Columns = < item SizePriority = 0 Title.Caption = 'Command' Width = 265 end item SizePriority = 0 Title.Caption = 'Hotkeys' Width = 264 end item Title.Caption = 'Description' Width = 265 end> Constraints.MinHeight = 200 Constraints.MinWidth = 200 ExtendedSelect = False FixedCols = 0 MouseWheelOption = mwGrid Options = [goVertLine, goColSizing, goColMoving, goRowSelect, goThumbTracking, goDblClickAutoSize, goSmoothScroll] RowCount = 1 TabOrder = 3 TitleStyle = tsNative OnDrawCell = stgCommandsDrawCell OnResize = stgCommandsResize OnSelectCell = stgCommandsSelectCell ColWidths = ( 265 264 265 ) end object stgHotkeys: TStringGrid[6] AnchorSideLeft.Control = stgCommands AnchorSideTop.Control = stgCommands AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlHotkeyButtons AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 137 Top = 372 Width = 676 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 4 BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 ColCount = 3 Columns = < item Title.Caption = 'Hotkey' Width = 119 end item Title.Caption = 'Parameters' Width = 119 end item Title.Caption = 'Controls' Width = 120 end> Constraints.MinHeight = 100 Constraints.MinWidth = 100 FixedCols = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goColSizing, goColMoving, goRowSelect, goThumbTracking, goDblClickAutoSize, goSmoothScroll] RowCount = 3 ScrollBars = ssAutoVertical TabOrder = 4 TitleStyle = tsNative OnDblClick = stgHotkeysDblClick OnResize = stgHotkeysResize OnSelectCell = stgHotkeysSelectCell ColWidths = ( 119 119 120 ) end object pnlHotkeyButtons: TPanel[7] AnchorSideTop.Control = stgHotkeys AnchorSideRight.Control = stgCommands AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = stgHotkeys AnchorSideBottom.Side = asrBottom Left = 690 Height = 137 Top = 372 Width = 112 Anchors = [akTop, akRight, akBottom] AutoSize = True BevelOuter = bvNone ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 137 ClientWidth = 112 TabOrder = 5 object btnAddHotKey: TButton AnchorSideRight.Side = asrBottom Left = 0 Height = 42 Top = 0 Width = 112 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'Add &hotkey' Enabled = False OnClick = btnAddHotKeyClick TabOrder = 0 end object btnEditHotkey: TButton Left = 0 Height = 42 Top = 48 Width = 112 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Edit hotkey' Enabled = False OnClick = btnEditHotkeyClick TabOrder = 1 end object btnDeleteHotKey: TButton AnchorSideRight.Side = asrBottom Left = 0 Height = 41 Top = 96 Width = 112 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Delete hotkey' Enabled = False OnClick = btnDeleteHotKeyClick TabOrder = 2 end end object lbSCFilesList: TComboBox[8] AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSCFiles AnchorSideTop.Side = asrBottom Left = 6 Height = 27 Top = 21 Width = 305 BorderSpacing.Left = 6 ItemHeight = 0 OnChange = lbSCFilesListChange Style = csDropDownList TabOrder = 0 end object lblSCFiles: TLabel[9] AnchorSideLeft.Control = lbSCFilesList AnchorSideTop.Control = Owner Left = 6 Height = 15 Top = 6 Width = 89 BorderSpacing.Top = 6 Caption = '&Shortcut files:' FocusControl = lbSCFilesList ParentColor = False end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdriveslistbutton.pas���������������������������������������������0000644�0001750�0000144�00000004610�11740433676�022510� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Drives list button options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsDrivesListButton; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsDrivesListButton } TfrmOptionsDrivesListButton = class(TOptionsEditor) cbShowLabel: TCheckBox; cbShowFileSystem: TCheckBox; cbShowFreeSpace: TCheckBox; gbDrivesList: TGroupBox; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsDrivesListButton } procedure TfrmOptionsDrivesListButton.Load; begin cbShowLabel.Checked := dlbShowLabel in gDrivesListButtonOptions; cbShowFileSystem.Checked := dlbShowFileSystem in gDrivesListButtonOptions; cbShowFreeSpace.Checked := dlbShowFreeSpace in gDrivesListButtonOptions; end; function TfrmOptionsDrivesListButton.Save: TOptionsEditorSaveFlags; begin gDrivesListButtonOptions := []; if cbShowLabel.Checked then Include(gDrivesListButtonOptions, dlbShowLabel); if cbShowFileSystem.Checked then Include(gDrivesListButtonOptions, dlbShowFileSystem); if cbShowFreeSpace.Checked then Include(gDrivesListButtonOptions, dlbShowFreeSpace); Result := []; end; class function TfrmOptionsDrivesListButton.GetIconIndex: Integer; begin Result := 31; end; class function TfrmOptionsDrivesListButton.GetTitle: String; begin Result := rsOptionsEditorDrivesListButton; end; end. ������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsicons.pas��������������������������������������������������������0000644�0001750�0000144�00000012103�12561345763�020174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Icons options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsIcons; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsIcons } TfrmOptionsIcons = class(TOptionsEditor) cbIconsShowOverlay: TCheckBox; cbIconsSize: TComboBox; cbIconsExclude: TCheckBox; cbIconsInMenusSize: TComboBox; cbIconsInMenus: TCheckBox; edtIconsExcludeDirs: TEdit; gbIconsSize: TGroupBox; gbShowIconsMode: TGroupBox; gbDisableSpecialIcons: TGroupBox; gbIconsInMenus: TGroupBox; imgIconExample: TImage; pnlIconExample: TPanel; rbIconsShowAll: TRadioButton; rbIconsShowAllAndExe: TRadioButton; rbIconsShowNone: TRadioButton; rbIconsShowStandard: TRadioButton; procedure cbIconsExcludeChange(Sender: TObject); procedure cbIconsSizeChange(Sender: TObject); procedure rbIconsShowNoneChange(Sender: TObject); public class function GetIconIndex: Integer; override; class function GetTitle: String; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; end; implementation {$R *.lfm} uses Graphics, uPixMapManager, uGlobs, uLng; { TfrmOptionsIcons } procedure TfrmOptionsIcons.cbIconsSizeChange(Sender: TObject); var bmpTemp: TBitmap; iSize: Integer; begin case cbIconsSize.ItemIndex of 0: iSize:= 16; 1: iSize:= 22; 2: iSize:= 32; 3: iSize:= 48; end; bmpTemp:= PixmapManager.GetDefaultDriveIcon(iSize, pnlIconExample.Color); imgIconExample.Picture.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; procedure TfrmOptionsIcons.cbIconsExcludeChange(Sender: TObject); begin edtIconsExcludeDirs.Enabled:= cbIconsExclude.Checked; end; procedure TfrmOptionsIcons.rbIconsShowNoneChange(Sender: TObject); begin cbIconsSize.Enabled := not rbIconsShowNone.Checked; cbIconsShowOverlay.Enabled := not rbIconsShowNone.Checked; gbDisableSpecialIcons.Enabled := not rbIconsShowNone.Checked; end; class function TfrmOptionsIcons.GetIconIndex: Integer; begin Result := 16; end; class function TfrmOptionsIcons.GetTitle: String; begin Result := rsOptionsEditorIcons; end; procedure TfrmOptionsIcons.Load; begin case gShowIconsNew of sim_none: rbIconsShowNone.Checked:= True; sim_standart: rbIconsShowStandard.Checked:= True; sim_all: rbIconsShowAll.Checked:= True; sim_all_and_exe: rbIconsShowAllAndExe.Checked := True; end; cbIconsShowOverlay.Checked:= gIconOverlays; cbIconsExclude.Checked:= gIconsExclude; cbIconsInMenus.Checked := gIconsInMenus; edtIconsExcludeDirs.Text:= gIconsExcludeDirs; edtIconsExcludeDirs.Enabled:= gIconsExclude; cbIconsSize.Text := IntToStr(gIconsSizeNew) + 'x' + IntToStr(gIconsSizeNew); cbIconsInMenusSize.Text := IntToStr(gIconsInMenusSizeNew) + 'x' + IntToStr(gIconsInMenusSizeNew); cbIconsSizeChange(nil); end; function TfrmOptionsIcons.Save: TOptionsEditorSaveFlags; var SelectedShowIcons: TShowIconsMode = sim_none; SelectedIconsSize: Integer; begin Result := []; if rbIconsShowNone.Checked then SelectedShowIcons := sim_none else if rbIconsShowStandard.Checked then SelectedShowIcons := sim_standart else if rbIconsShowAll.Checked then SelectedShowIcons := sim_all else if rbIconsShowAllAndExe.Checked then SelectedShowIcons := sim_all_and_exe; case cbIconsSize.ItemIndex of 0: SelectedIconsSize := 16; 1: SelectedIconsSize := 22; 2: SelectedIconsSize := 32; 3: SelectedIconsSize := 48; else SelectedIconsSize := gIconsSizeNew; end; case cbIconsInMenusSize.ItemIndex of 0: gIconsInMenusSizeNew := 16; 1: gIconsInMenusSizeNew := 22; 2: gIconsInMenusSizeNew := 32; end; if (gIconsSizeNew <> SelectedIconsSize) or (gShowIconsNew <> SelectedShowIcons) or (gIconsInMenusSizeNew <> gIconsInMenusSize) then begin Include(Result, oesfNeedsRestart); end; if cbIconsInMenus.Checked <> gIconsInMenus then Include(Result, oesfNeedsRestart); //Main page menu's are created only at startup so we need to restart. gIconsSizeNew := SelectedIconsSize; gShowIconsNew := SelectedShowIcons; gIconOverlays := cbIconsShowOverlay.Checked; gIconsExclude := cbIconsExclude.Checked; gIconsExcludeDirs := edtIconsExcludeDirs.Text; gIconsInMenus := cbIconsInMenus.Checked; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscolumnsview.lfm��������������������������������������������������0000644�0001750�0000144�00000007052�12020403374�021415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsColumnsView: TfrmOptionsColumnsView Height = 344 Width = 659 ClientHeight = 344 ClientWidth = 659 DesignTop = 20 object grpAutosizeColumns: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowGrid AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 105 Top = 82 Width = 647 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 6 Caption = 'Auto-size columns' ClientHeight = 87 ClientWidth = 643 TabOrder = 1 object chkAutoFillColumns: TCheckBox AnchorSideTop.Side = asrBottom Left = 8 Height = 17 Top = 8 Width = 95 Caption = 'A&uto fill columns' TabOrder = 0 end object lblAutoSizeColumn: TLabel AnchorSideLeft.Control = chkAutoFillColumns AnchorSideTop.Control = cmbAutoSizeColumn AnchorSideTop.Side = asrCenter Left = 8 Height = 13 Top = 39 Width = 84 Caption = 'Auto si&ze column:' FocusControl = cmbAutoSizeColumn ParentColor = False end object cmbAutoSizeColumn: TComboBox AnchorSideLeft.Control = lblAutoSizeColumn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = chkAutoFillColumns AnchorSideTop.Side = asrBottom AnchorSideRight.Control = grpAutosizeColumns AnchorSideRight.Side = asrBottom Left = 104 Height = 21 Top = 35 Width = 529 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Top = 10 BorderSpacing.Right = 10 ItemHeight = 13 Items.Strings = ( 'First' 'Last' ) Style = csDropDownList TabOrder = 1 end end object gbShowGrid: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 70 Top = 6 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Show grid' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 52 ClientWidth = 643 TabOrder = 0 object cbGridVertLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = gbShowGrid Left = 12 Height = 17 Top = 6 Width = 77 Caption = '&Vertical lines' TabOrder = 0 end object cbGridHorzLine: TCheckBox AnchorSideLeft.Control = gbShowGrid AnchorSideTop.Control = cbGridVertLine AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 29 Width = 90 BorderSpacing.Top = 6 Caption = '&Horizontal lines' TabOrder = 1 end end object grpMisc: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = grpAutosizeColumns AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 47 Top = 193 Width = 647 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 29 ClientWidth = 643 TabOrder = 2 object cbCutTextToColWidth: TCheckBox Left = 6 Height = 17 Top = 6 Width = 136 Caption = 'Cut &text to column width' TabOrder = 0 end end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsarchivers.pas����������������������������������������������������0000644�0001750�0000144�00000026473�12612505011�021043� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Archivers options page Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsArchivers; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, ComCtrls, EditBtn, Grids, Buttons, Menus, fOptionsFrame; type { TfrmOptionsArchivers } TfrmOptionsArchivers = class(TOptionsEditor) btnAutoConfig: TBitBtn; btnMultiArcAdd: TBitBtn; btnMultiArcApply: TBitBtn; btnMultiArcDelete: TBitBtn; btnMultiArcRename: TBitBtn; btnRelativeArchiver: TSpeedButton; chkMultiArcDebug: TCheckBox; chkMultiArcEnabled: TCheckBox; chkMultiArcOutput: TCheckBox; edtArchiveAdd: TEdit; edtArchiveExtension: TEdit; edtArchiveExtract: TEdit; edtArchiveList: TEdit; edtArchiveListEnd: TEdit; edtArchiveListStart: TEdit; edtDescription: TEdit; fneArchiver: TFileNameEdit; gbArchiverOptions: TGroupBox; lblArchiveAdd: TLabel; lblArchiveExtension: TLabel; lblArchiveExtract: TLabel; lblArchiveList: TLabel; lblArchiveListEnd: TLabel; lblArchiveListFormat: TLabel; lblArchiveListStart: TLabel; lblArchiver: TLabel; lblDescription: TLabel; lbxMultiArc: TListBox; memArchiveListFormat: TMemo; pcArchiverCommands: TPageControl; pmPathHelper: TPopupMenu; pnlArchiverCommands: TPanel; pnlMultiArcButtons: TPanel; splMultiArc: TSplitter; stgArchiverCommands: TStringGrid; tbArchiverAdditional: TTabSheet; tbArchiverGeneral: TTabSheet; procedure btnAutoConfigClick(Sender: TObject); procedure btnMultiArcAddClick(Sender: TObject); procedure btnMultiArcApplyClick(Sender: TObject); procedure btnMultiArcDeleteClick(Sender: TObject); procedure btnMultiArcRenameClick(Sender: TObject); procedure btnRelativeArchiverClick(Sender: TObject); procedure chkMultiArcEnabledChange(Sender: TObject); procedure lbxMultiArcSelectionChange(Sender: TObject; User: boolean); procedure stgArchiverCommandsPrepareCanvas(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); procedure tbArchiverAdditionalShow(Sender: TObject); private procedure FillArchiverList; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses Dialogs, Controls, uGlobs, uLng, uMultiArc, uSpecialDir, uGlobsPaths; const stgArchiveTitle = 0; stgArchiveDelete = 1; stgArchiveTest = 2; stgArchiveExtractWithoutPath = 3; stgArchiveSelfExtract = 4; stgArchiveID = 5; stgArchiveIDPos = 6; stgArchiveIDSeekRange = 7; stgArchivePasswordQuery = 8; stgArchiveFormMode = 9; { TfrmOptionsArchivers } procedure TfrmOptionsArchivers.btnAutoConfigClick(Sender: TObject); begin gMultiArcList.AutoConfigure; lbxMultiArcSelectionChange(lbxMultiArc, True); end; procedure TfrmOptionsArchivers.btnMultiArcAddClick(Sender: TObject); var sName: String; MultiArcItem: TMultiArcItem; begin if InputQuery(Caption, rsOptArchiveTypeName, sName) then begin MultiArcItem:= TMultiArcItem.Create; lbxMultiArc.Items.AddObject(sName, MultiArcItem); gMultiArcList.Add(sName, MultiArcItem); lbxMultiArc.ItemIndex:= lbxMultiArc.Count - 1; pcArchiverCommands.Enabled:= (lbxMultiArc.Count <> 0); chkMultiArcEnabled.Enabled:= (lbxMultiArc.Count <> 0); end; end; procedure TfrmOptionsArchivers.btnMultiArcApplyClick(Sender: TObject); begin if lbxMultiArc.ItemIndex < 0 then Exit; with TMultiArcItem(lbxMultiArc.Items.Objects[lbxMultiArc.ItemIndex]), stgArchiverCommands do begin FDescription:= edtDescription.Text; FArchiver:= fneArchiver.FileName; FExtension:= edtArchiveExtension.Text; FList:= edtArchiveList.Text; FStart:= edtArchiveListStart.Text; FEnd:= edtArchiveListEnd.Text; FFormat.Assign(memArchiveListFormat.Lines); FExtract:= edtArchiveExtract.Text; FAdd:= edtArchiveAdd.Text; FDelete:= Cells[1, stgArchiveDelete]; FTest:= Cells[1, stgArchiveTest]; FExtractWithoutPath:= Cells[1, stgArchiveExtractWithoutPath]; FAddSelfExtract:= Cells[1, stgArchiveSelfExtract]; FID:= Cells[1, stgArchiveID]; FIDPos:= Cells[1, stgArchiveIDPos]; FIDSeekRange:= Cells[1, stgArchiveIDSeekRange]; FPasswordQuery:= Cells[1, stgArchivePasswordQuery]; FFormMode:= StrToIntDef(Cells[1, stgArchiveFormMode], 0); FOutput:= chkMultiArcOutput.Checked; FDebug:= chkMultiArcDebug.Checked; end; end; procedure TfrmOptionsArchivers.btnMultiArcDeleteClick(Sender: TObject); var I: Integer; begin if lbxMultiArc.ItemIndex < 0 then Exit; I:= lbxMultiArc.ItemIndex; lbxMultiArc.Items.Delete(I); gMultiArcList.Delete(I); lbxMultiArc.ItemIndex:= lbxMultiArc.Count - 1; pcArchiverCommands.Enabled:= (lbxMultiArc.Count <> 0); chkMultiArcEnabled.Enabled:= (lbxMultiArc.Count <> 0); end; procedure TfrmOptionsArchivers.btnMultiArcRenameClick(Sender: TObject); var sNewName: String; begin if lbxMultiArc.ItemIndex < 0 then Exit; sNewName:= lbxMultiArc.Items[lbxMultiArc.ItemIndex]; if InputQuery(Caption, rsOptArchiveTypeName, sNewName) then begin lbxMultiArc.Items[lbxMultiArc.ItemIndex]:= sNewName; gMultiArcList.Names[lbxMultiArc.ItemIndex]:= sNewName; end; end; procedure TfrmOptionsArchivers.btnRelativeArchiverClick(Sender: TObject); begin fneArchiver.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneArchiver,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsArchivers.chkMultiArcEnabledChange(Sender: TObject); begin if lbxMultiArc.ItemIndex < 0 then Exit; with TMultiArcItem(lbxMultiArc.Items.Objects[lbxMultiArc.ItemIndex]) do FEnabled:= chkMultiArcEnabled.Checked; end; procedure TfrmOptionsArchivers.lbxMultiArcSelectionChange(Sender: TObject; User: boolean); begin if lbxMultiArc.ItemIndex < 0 then with stgArchiverCommands do begin edtDescription.Text:= EmptyStr; fneArchiver.FileName:= EmptyStr; edtArchiveExtension.Text:= EmptyStr; edtArchiveList.Text:= EmptyStr; edtArchiveListStart.Text:= EmptyStr; edtArchiveListEnd.Text:= EmptyStr; memArchiveListFormat.Lines.Clear; edtArchiveExtract.Text:= EmptyStr; edtArchiveAdd.Text:= EmptyStr; Cells[1, stgArchiveDelete]:= EmptyStr; Cells[1, stgArchiveTest]:= EmptyStr; Cells[1, stgArchiveExtractWithoutPath]:= EmptyStr; Cells[1, stgArchiveSelfExtract]:= EmptyStr; Cells[1, stgArchiveID]:= EmptyStr; Cells[1, stgArchiveIDPos]:= EmptyStr; Cells[1, stgArchiveIDSeekRange]:= EmptyStr; Cells[1, stgArchivePasswordQuery]:= EmptyStr; Cells[1, stgArchiveFormMode]:= EmptyStr; chkMultiArcOutput.Checked:= False; chkMultiArcDebug.Checked:= False; chkMultiArcEnabled.Checked:= False; pcArchiverCommands.Enabled:= (lbxMultiArc.Count <> 0); chkMultiArcEnabled.Enabled:= (lbxMultiArc.Count <> 0); end else with TMultiArcItem(lbxMultiArc.Items.Objects[lbxMultiArc.ItemIndex]), stgArchiverCommands do begin edtDescription.Text:= FDescription; fneArchiver.FileName:= FArchiver; edtArchiveExtension.Text:= FExtension; edtArchiveList.Text:= FList; edtArchiveListStart.Text:= FStart; edtArchiveListEnd.Text:= FEnd; memArchiveListFormat.Lines.Assign(FFormat); edtArchiveExtract.Text:= FExtract; edtArchiveAdd.Text:= FAdd; Cells[1, stgArchiveDelete]:= FDelete; Cells[1, stgArchiveTest]:= FTest; Cells[1, stgArchiveExtractWithoutPath]:= FExtractWithoutPath; Cells[1, stgArchiveSelfExtract]:= FAddSelfExtract; Cells[1, stgArchiveID]:= FID; Cells[1, stgArchiveIDPos]:= FIDPos; Cells[1, stgArchiveIDSeekRange]:= FIDSeekRange; Cells[1, stgArchivePasswordQuery]:= FPasswordQuery; Cells[1, stgArchiveFormMode]:= IntToStr(FFormMode); chkMultiArcOutput.Checked:= FOutput; chkMultiArcDebug.Checked:= FDebug; chkMultiArcEnabled.Checked:= FEnabled; end; end; procedure TfrmOptionsArchivers.stgArchiverCommandsPrepareCanvas(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); begin if aRow = 0 then stgArchiverCommands.Canvas.Brush.Color:= stgArchiverCommands.FixedColor else stgArchiverCommands.Canvas.Brush.Color:= stgArchiverCommands.Color; end; procedure TfrmOptionsArchivers.tbArchiverAdditionalShow(Sender: TObject); var I, J: LongInt; iWidth: LongInt = 0; begin for I:= 0 to stgArchiverCommands.RowCount - 1 do begin J:= stgArchiverCommands.Canvas.TextWidth(stgArchiverCommands.Cells[0, I]); if J > iWidth then iWidth:= J; end; stgArchiverCommands.ColWidths[0]:= iWidth + 12; end; procedure TfrmOptionsArchivers.FillArchiverList; var I: Integer; begin for I:= 0 to gMultiArcList.Count - 1 do lbxMultiArc.Items.AddObject(gMultiArcList.Names[I], gMultiArcList[I]); pcArchiverCommands.Enabled:= (lbxMultiArc.Count <> 0); chkMultiArcEnabled.Enabled:= (lbxMultiArc.Count <> 0); if lbxMultiArc.Count > 0 then lbxMultiArc.ItemIndex:= 0; end; class function TfrmOptionsArchivers.GetIconIndex: Integer; begin Result := 18; end; class function TfrmOptionsArchivers.GetTitle: String; begin Result := rsOptionsEditorArchivers; end; procedure TfrmOptionsArchivers.Init; begin // Localize additional archiver commands. stgArchiverCommands.Cells[0, stgArchiveTitle] := rsOptArchiveParam; stgArchiverCommands.Cells[1, stgArchiveTitle] := rsOptArchiveValue; stgArchiverCommands.Cells[0, stgArchiveDelete] := rsOptArchiveDelete; stgArchiverCommands.Cells[0, stgArchiveTest] := rsOptArchiveTest; stgArchiverCommands.Cells[0, stgArchiveExtractWithoutPath] := rsOptArchiveExtractWithoutPath; stgArchiverCommands.Cells[0, stgArchiveSelfExtract] := rsOptArchiveSelfExtract; stgArchiverCommands.Cells[0, stgArchiveID] := rsOptArchiveID; stgArchiverCommands.Cells[0, stgArchiveIDPos] := rsOptArchiveIDPos; stgArchiverCommands.Cells[0, stgArchiveIDSeekRange] := rsOptArchiveIDSeekRange; stgArchiverCommands.Cells[0, stgArchivePasswordQuery] := rsOptArchivePasswordQuery; stgArchiverCommands.Cells[0, stgArchiveFormMode] := rsOptArchiveFormMode; end; procedure TfrmOptionsArchivers.Load; begin FillArchiverList; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; function TfrmOptionsArchivers.Save: TOptionsEditorSaveFlags; begin Result := []; gMultiArcList.SaveToFile(gpCfgDir + 'multiarc.ini'); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfilesviews.pas���������������������������������������������������0000644�0001750�0000144�00000015610�12423151100�021220� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Files views options page Copyright (C) 2006-2014 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFilesViews; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Graphics, ExtCtrls, fOptionsFrame; type { TfrmOptionsFilesViews } TfrmOptionsFilesViews = class(TOptionsEditor) cbDateTimeFormat: TComboBox; cbHighlightUpdatedFiles: TCheckBox; cbDirBrackets: TCheckBox; cbListFilesInThread: TCheckBox; cbLoadIconsSeparately: TCheckBox; cbDelayLoadingTabs: TCheckBox; cbUpdatedFilesPosition: TComboBox; cbShowSystemFiles: TCheckBox; cbNewFilesPosition: TComboBox; cbSortMethod: TComboBox; cbSpaceMovesDown: TCheckBox; cbCaseSensitivity: TComboBox; cbSortFolderMode: TComboBox; cbFileSizeFormat: TComboBox; cbInplaceRename: TCheckBox; gbFormatting: TGroupBox; gbSorting: TGroupBox; gbMisc: TGroupBox; lblDateTimeExample: TLabel; lblUpdatedFilesPosition: TLabel; lblSortFolderMode: TLabel; lblCaseSensitivity: TLabel; lblDateTimeFormat: TLabel; lblNewFilesPosition: TLabel; lblSortMethod: TLabel; lblFileSizeFormat: TLabel; pnlDateTime: TPanel; procedure cbDateTimeFormatChange(Sender: TObject); private FIncorrectFormatMessage: string; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public procedure AfterConstruction; override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng, uTypes; { TfrmOptionsFilesViews } procedure TfrmOptionsFilesViews.cbDateTimeFormatChange(Sender: TObject); begin try lblDateTimeExample.Caption:= FormatDateTime(cbDateTimeFormat.Text, Now); lblDateTimeExample.Font.Color := clDefault; except on E: EConvertError do begin lblDateTimeExample.Caption:= FIncorrectFormatMessage; lblDateTimeExample.Font.Color := clRed; end; end; end; procedure TfrmOptionsFilesViews.Init; begin ParseLineToList(rsOptSortMethod, cbSortMethod.Items); ParseLineToList(rsOptSortCaseSens, cbCaseSensitivity.Items); ParseLineToList(rsOptSortFolderMode, cbSortFolderMode.Items); ParseLineToList(rsOptNewFilesPosition, cbNewFilesPosition.Items); ParseLineToList(rsOptUpdatedFilesPosition, cbUpdatedFilesPosition.Items); ParseLineToList(rsOptFileSizeFormat, cbFileSizeFormat.Items); end; procedure TfrmOptionsFilesViews.Load; begin case gSortCaseSensitivity of cstNotSensitive: cbCaseSensitivity.ItemIndex := 0; cstLocale: cbCaseSensitivity.ItemIndex := 1; cstCharValue: cbCaseSensitivity.ItemIndex := 2; end; if not gSortNatural then cbSortMethod.ItemIndex:= 0 else cbSortMethod.ItemIndex:= 1; case gSortFolderMode of sfmSortNameShowFirst: cbSortFolderMode.ItemIndex := 0; sfmSortLikeFileShowFirst: cbSortFolderMode.ItemIndex := 1; sfmSortLikeFile: cbSortFolderMode.ItemIndex := 2; end; case gNewFilesPosition of nfpTop: cbNewFilesPosition.ItemIndex := 0; nfpTopAfterDirectories: cbNewFilesPosition.ItemIndex := 1; nfpSortedPosition: cbNewFilesPosition.ItemIndex := 2; nfpBottom: cbNewFilesPosition.ItemIndex := 3; end; case gUpdatedFilesPosition of ufpNoChange: cbUpdatedFilesPosition.ItemIndex := 0; ufpSameAsNewFiles: cbUpdatedFilesPosition.ItemIndex := 1; ufpSortedPosition: cbUpdatedFilesPosition.ItemIndex := 2; end; cbFileSizeFormat.ItemIndex := Ord(gFileSizeFormat); cbDateTimeFormat.Text := gDateTimeFormat; lblDateTimeExample.Caption:= FormatDateTime(cbDateTimeFormat.Text, Now); cbSpaceMovesDown.Checked := gSpaceMovesDown; cbDirBrackets.Checked := gDirBrackets; cbShowSystemFiles.Checked:= gShowSystemFiles; {$IFDEF LCLCARBON} // Under Mac OS X loading file list in separate thread are very very slow // so disable and hide this option under Mac OS X Carbon cbListFilesInThread.Visible:= False; {$ELSE} cbListFilesInThread.Checked:= gListFilesInThread; {$ENDIF} cbLoadIconsSeparately.Checked:= gLoadIconsSeparately; cbDelayLoadingTabs.Checked:= gDelayLoadingTabs; cbHighlightUpdatedFiles.Checked:= gHighlightUpdatedFiles; cbInplaceRename.Checked := gInplaceRename; end; function TfrmOptionsFilesViews.Save: TOptionsEditorSaveFlags; begin case cbCaseSensitivity.ItemIndex of 0: gSortCaseSensitivity := cstNotSensitive; 1: gSortCaseSensitivity := cstLocale; 2: gSortCaseSensitivity := cstCharValue; end; gSortNatural := (cbSortMethod.ItemIndex = 1); case cbSortFolderMode.ItemIndex of 0: gSortFolderMode := sfmSortNameShowFirst; 1: gSortFolderMode := sfmSortLikeFileShowFirst; 2: gSortFolderMode := sfmSortLikeFile; end; case cbNewFilesPosition.ItemIndex of 0: gNewFilesPosition := nfpTop; 1: gNewFilesPosition := nfpTopAfterDirectories; 2: gNewFilesPosition := nfpSortedPosition; 3: gNewFilesPosition := nfpBottom; end; case cbUpdatedFilesPosition.ItemIndex of 0: gUpdatedFilesPosition := ufpNoChange; 1: gUpdatedFilesPosition := ufpSameAsNewFiles; 2: gUpdatedFilesPosition := ufpSortedPosition; end; gFileSizeFormat := TFileSizeFormat(cbFileSizeFormat.ItemIndex); gDateTimeFormat := GetValidDateTimeFormat(cbDateTimeFormat.Text, gDateTimeFormat); gSpaceMovesDown := cbSpaceMovesDown.Checked; gDirBrackets := cbDirBrackets.Checked; gShowSystemFiles:= cbShowSystemFiles.Checked; gListFilesInThread:= cbListFilesInThread.Checked; gLoadIconsSeparately:= cbLoadIconsSeparately.Checked; gDelayLoadingTabs := cbDelayLoadingTabs.Checked; gHighlightUpdatedFiles := cbHighlightUpdatedFiles.Checked; gInplaceRename := cbInplaceRename.Checked; Result := []; end; procedure TfrmOptionsFilesViews.AfterConstruction; begin inherited AfterConstruction; //save localized "Incorrect format" string FIncorrectFormatMessage := lblDateTimeExample.Caption; end; class function TfrmOptionsFilesViews.GetIconIndex: Integer; begin Result := 29; end; class function TfrmOptionsFilesViews.GetTitle: String; begin Result := rsOptionsEditorFilesViews; end; end. ������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionskeyboard.lrt�����������������������������������������������������0000644�0001750�0000144�00000000451�12020403374�020661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSKEYBOARD.GBTYPING.CAPTION=Typing TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION=&Letters TFRMOPTIONSKEYBOARD.LBLALT.CAPTION=Alt+L&etters TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION=Ctrl+Alt+Le&tters TFRMOPTIONSKEYBOARD.CBLYNXLIKE.CAPTION=Le&ft, Right arrows change directory (Lynx-like movement) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileoperations.pas�����������������������������������������������0000644�0001750�0000144�00000017720�12573073054�022110� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- File operations options page Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFileOperations; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, KASComboBox, DividerBevel, fOptionsFrame; type { TfrmOptionsFileOperations } TfrmOptionsFileOperations = class(TOptionsEditor) bvlConfirmations: TDividerBevel; cbDeleteToTrash: TCheckBox; cbDropReadOnlyFlag: TCheckBox; cbPartialNameSearch: TCheckBox; cbProcessComments: TCheckBox; cbRenameSelOnlyName: TCheckBox; cbShowCopyTabSelectPanel: TCheckBox; cbSkipFileOpError: TCheckBox; cbProgressKind: TComboBoxAutoWidth; cbCopyConfirmation: TCheckBox; cbMoveConfirmation: TCheckBox; cbDeleteConfirmation: TCheckBox; cbDeleteToTrashConfirmation: TCheckBox; cbSearchDefaultTemplate: TComboBoxAutoWidth; cmbTypeOfDuplicatedRename: TComboBoxAutoWidth; dbTextSearch: TDividerBevel; edtBufferSize: TEdit; edtHashBufferSize: TEdit; gbUserInterface: TGroupBox; gbFileSearch: TGroupBox; gbExecutingOperations: TGroupBox; lblHashBufferSize: TLabel; lblTypeOfDuplicatedRename: TLabel; lblSearchDefaultTemplate: TLabel; lblBufferSize: TLabel; lblProgressKind: TLabel; lblWipePassNumber: TLabel; rbUseMmapInSearch: TRadioButton; rbUseStreamInSearch: TRadioButton; seWipePassNumber: TSpinEdit; procedure cbDeleteToTrashChange(Sender: TObject); private FLoading: Boolean; FLastLoadedOptionSignature: dword; procedure FillTemplatesList(ListItems: TStrings); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; class function GetIconIndex: Integer; override; class function GetTitle: String; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses uComponentsSignature, fOptions, uShowMsg, DCStrUtils, uGlobs, uLng, fOptionsHotkeys; { TfrmOptionsFileOperations } class function TfrmOptionsFileOperations.GetIconIndex: Integer; begin Result := 8; end; class function TfrmOptionsFileOperations.GetTitle: String; begin Result := rsOptionsEditorFileOperations; end; procedure TfrmOptionsFileOperations.Init; begin FillTemplatesList(cbSearchDefaultTemplate.Items); ParseLineToList(rsOptFileOperationsProgressKind, cbProgressKind.Items); ParseLineToList(rsOptTypeOfDuplicatedRename, cmbTypeOfDuplicatedRename.Items); end; procedure TfrmOptionsFileOperations.cbDeleteToTrashChange(Sender: TObject); var HotkeysEditor: TOptionsEditor; begin if not FLoading then begin HotkeysEditor := OptionsDialog.GetEditor(TfrmOptionsHotkeys); if Assigned(HotkeysEditor) then (HotkeysEditor as TfrmOptionsHotkeys).AddDeleteWithShiftHotkey(cbDeleteToTrash.Checked); end; end; procedure TfrmOptionsFileOperations.FillTemplatesList(ListItems: TStrings); begin gSearchTemplateList.LoadToStringList(ListItems); ListItems.Insert(0, rsOptHotkeysNoHotkey); end; procedure TfrmOptionsFileOperations.Load; begin FLoading := True; edtBufferSize.Text := IntToStr(gCopyBlockSize div 1024); edtHashBufferSize.Text := IntToStr(gHashBlockSize div 1024); cbSkipFileOpError.Checked := gSkipFileOpError; cbDropReadOnlyFlag.Checked := gDropReadOnlyFlag; rbUseMmapInSearch.Checked := gUseMmapInSearch; cbPartialNameSearch.Checked := gPartialNameSearch; seWipePassNumber.Value := gWipePassNumber; cbProcessComments.Checked := gProcessComments; cbShowCopyTabSelectPanel.Checked := gShowCopyTabSelectPanel; cbDeleteToTrash.Checked := gUseTrash; cbRenameSelOnlyName.Checked := gRenameSelOnlyName; case gFileOperationsProgressKind of fopkSeparateWindow: cbProgressKind.ItemIndex := 0; fopkSeparateWindowMinimized: cbProgressKind.ItemIndex := 1; fopkOperationsPanel: cbProgressKind.ItemIndex := 2; end; cbCopyConfirmation.Checked := focCopy in gFileOperationsConfirmations; cbMoveConfirmation.Checked := focMove in gFileOperationsConfirmations; cbDeleteConfirmation.Checked := focDelete in gFileOperationsConfirmations; cbDeleteToTrashConfirmation.Checked := focDeleteToTrash in gFileOperationsConfirmations; cmbTypeOfDuplicatedRename.ItemIndex := Integer(gTypeOfDuplicatedRename); cbSearchDefaultTemplate.ItemIndex := cbSearchDefaultTemplate.Items.IndexOf(gSearchDefaultTemplate); if cbSearchDefaultTemplate.ItemIndex < 0 then cbSearchDefaultTemplate.ItemIndex := 0; FLoading := False; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; function TfrmOptionsFileOperations.Save: TOptionsEditorSaveFlags; begin Result := []; gCopyBlockSize := StrToIntDef(edtBufferSize.Text, gCopyBlockSize div 1024) * 1024; gHashBlockSize := StrToIntDef(edtHashBufferSize.Text, gHashBlockSize div 1024) * 1024; gSkipFileOpError := cbSkipFileOpError.Checked; gDropReadOnlyFlag := cbDropReadOnlyFlag.Checked; gUseMmapInSearch := rbUseMmapInSearch.Checked; gPartialNameSearch := cbPartialNameSearch.Checked; gWipePassNumber := seWipePassNumber.Value; gProcessComments := cbProcessComments.Checked; gShowCopyTabSelectPanel := cbShowCopyTabSelectPanel.Checked; gUseTrash := cbDeleteToTrash.Checked; gRenameSelOnlyName := cbRenameSelOnlyName.Checked; case cbProgressKind.ItemIndex of 0: gFileOperationsProgressKind := fopkSeparateWindow; 1: gFileOperationsProgressKind := fopkSeparateWindowMinimized; 2: gFileOperationsProgressKind := fopkOperationsPanel; end; gFileOperationsConfirmations := []; if cbCopyConfirmation.Checked then Include(gFileOperationsConfirmations, focCopy); if cbMoveConfirmation.Checked then Include(gFileOperationsConfirmations, focMove); if cbDeleteConfirmation.Checked then Include(gFileOperationsConfirmations, focDelete); if cbDeleteToTrashConfirmation.Checked then Include(gFileOperationsConfirmations, focDeleteToTrash); gTypeOfDuplicatedRename := tDuplicatedRename(cmbTypeOfDuplicatedRename.ItemIndex); if cbSearchDefaultTemplate.ItemIndex > 0 then gSearchDefaultTemplate:= cbSearchDefaultTemplate.Text else begin gSearchDefaultTemplate:= EmptyStr; end; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; constructor TfrmOptionsFileOperations.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FLoading := False; end; function TfrmOptionsFileOperations.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsFileOperations); Answer := MsgBox(rsMsgFileOperationsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. ������������������������������������������������doublecmd-0.7.1/src/frames/foptionsframe.pas��������������������������������������������������������0000644�0001750�0000144�00000017654�12656270711�020166� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Options frame page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFrame; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, fgl; type TOptionsEditorInitFlag = (oeifLoad); TOptionsEditorInitFlags = set of TOptionsEditorInitFlag; TOptionsEditorSaveFlag = (oesfNeedsRestart); TOptionsEditorSaveFlags = set of TOptionsEditorSaveFlag; TOptionsEditor = class; TOptionsEditorClass = class of TOptionsEditor; TOptionsEditorClassList = class; { IOptionsDialog } {$interfaces corba} IOptionsDialog = interface ['{E62AAF5E-74ED-49AB-93F2-DBE210BF6723}'] procedure LoadSettings; function GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; end; {$interfaces default} { TOptionsEditor } TOptionsEditor = class(TFrame) private FOptionsDialog: IOptionsDialog; protected procedure Init; virtual; procedure Done; virtual; procedure Load; virtual; function Save: TOptionsEditorSaveFlags; virtual; property OptionsDialog: IOptionsDialog read FOptionsDialog; public destructor Destroy; override; class function GetIconIndex: Integer; virtual; abstract; class function GetTitle: String; virtual; abstract; class function IsEmpty: Boolean; virtual; procedure LoadSettings; function SaveSettings: TOptionsEditorSaveFlags; procedure Init(AParent: TWinControl; AOptionsDialog: IOptionsDialog; Flags: TOptionsEditorInitFlags); function CanWeClose(var {%H-}WillNeedUpdateWindowView:boolean):boolean; virtual; end; { TOptionsEditorRec } TOptionsEditorRec = class private FChildren: TOptionsEditorClassList; FEditorClass: TOptionsEditorClass; function GetChildren: TOptionsEditorClassList; public constructor Create; destructor Destroy; override; function Add(Editor: TOptionsEditorClass): TOptionsEditorRec; function HasChildren: Boolean; property Children: TOptionsEditorClassList read GetChildren; property EditorClass: TOptionsEditorClass read FEditorClass write FEditorClass; end; { TBaseOptionsEditorClassList } TBaseOptionsEditorClassList = specialize TFPGObjectList<TOptionsEditorRec>; { TOptionsEditorClassList } TOptionsEditorClassList = class(TBaseOptionsEditorClassList) public function Add(Editor: TOptionsEditorClass): TOptionsEditorRec; overload; end; var OptionsEditorClassList: TOptionsEditorClassList = nil; implementation uses fOptionsArchivers, fOptionsAutoRefresh, fOptionsBehavior, fOptionsBriefView, fOptionsColumnsView, fOptionsConfiguration, fOptionsCustomColumns, fOptionsDragDrop, fOptionsDrivesListButton, fOptionsFileOperations, fOptionsFilePanelsColors, fOptionsFileTypesColors, fOptionsFilesViews, fOptionsFonts, fOptionsGroups, fOptionsHotkeys, fOptionsIcons, fOptionsIgnoreList, fOptionsKeyboard, fOptionsLanguage, fOptionsLayout, fOptionsLog, fOptionsMisc, fOptionsMouse, fOptionsPlugins, fOptionsQuickSearchFilter, fOptionsTabs, fOptionsFavoriteTabs, fOptionsTabsExtra, fOptionsTerminal, fOptionsToolbar, fOptionsTools, fOptionsToolsEditor, fOptionsToolsDiffer, fOptionsEditorColors, fOptionsToolTips, fOptionsFileAssoc, fOptionsFileAssocExtra, fOptionsDirectoryHotlist; { TOptionsEditorRec } function TOptionsEditorRec.GetChildren: TOptionsEditorClassList; begin if not Assigned(FChildren) then FChildren := TOptionsEditorClassList.Create; Result := FChildren; end; constructor TOptionsEditorRec.Create; begin FChildren := nil; end; destructor TOptionsEditorRec.Destroy; begin inherited Destroy; FreeAndNil(FChildren); end; function TOptionsEditorRec.Add(Editor: TOptionsEditorClass): TOptionsEditorRec; begin Result := Children.Add(Editor); end; function TOptionsEditorRec.HasChildren: Boolean; begin Result := Assigned(FChildren) and (FChildren.Count > 0); end; { TOptionsEditorClassList } function TOptionsEditorClassList.Add(Editor: TOptionsEditorClass): TOptionsEditorRec; begin Result := TOptionsEditorRec.Create; Add(Result); Result.EditorClass:= Editor; end; { TOptionsEditor } procedure TOptionsEditor.Init; begin // Empty. end; function TOptionsEditor.CanWeClose(var WillNeedUpdateWindowView:boolean): boolean; begin result:=TRUE; end; procedure TOptionsEditor.Done; begin // Empty. end; destructor TOptionsEditor.Destroy; begin Done; inherited Destroy; end; class function TOptionsEditor.IsEmpty: Boolean; begin Result := False; end; procedure TOptionsEditor.LoadSettings; begin DisableAutoSizing; try Load; finally EnableAutoSizing; end; end; function TOptionsEditor.SaveSettings: TOptionsEditorSaveFlags; begin Result := Save; end; procedure TOptionsEditor.Load; begin // Empty. end; function TOptionsEditor.Save: TOptionsEditorSaveFlags; begin Result := []; end; procedure TOptionsEditor.Init(AParent: TWinControl; AOptionsDialog: IOptionsDialog; Flags: TOptionsEditorInitFlags); begin DisableAutoSizing; try Parent := AParent; FOptionsDialog := AOptionsDialog; Init; if oeifLoad in Flags then LoadSettings; finally EnableAutoSizing; end; end; procedure MakeEditorsClassList; var Main: TOptionsEditorClassList absolute OptionsEditorClassList; Colors, ColumnsView, FilesViews, Keyboard, Layout, Mouse, Tools, Editor, FileAssoc, FolderTabs: TOptionsEditorRec; begin Main.Add(TfrmOptionsLanguage); Main.Add(TfrmOptionsBehavior); Tools := Main.Add(TOptionsToolsGroup); Tools.Add(TfrmOptionsViewer); Editor:= Tools.Add(TfrmOptionsEditor); Editor.Add(TfrmOptionsEditorColors); Tools.Add(TfrmOptionsDiffer); Tools.Add(TfrmOptionsTerminal); Main.Add(TfrmOptionsFonts); Colors := Main.Add(TOptionsColorsGroup); Colors.Add(TfrmOptionsFilePanelsColors); Colors.Add(TfrmOptionsFileTypesColors); Keyboard := Main.Add(TfrmOptionsKeyboard); Keyboard.Add(TfrmOptionsHotkeys); Mouse := Main.Add(TfrmOptionsMouse); Mouse.Add(TfrmOptionsDragDrop); FilesViews := Main.Add(TfrmOptionsFilesViews); FilesViews.Add(TfrmOptionsBriefView); ColumnsView := FilesViews.Add(TfrmOptionsColumnsView); ColumnsView.Add(TfrmOptionsCustomColumns); Main.Add(TfrmOptionsPlugins); Layout := Main.Add(TfrmOptionsLayout); Layout.Add(TfrmOptionsDrivesListButton); Main.Add(TfrmOptionsToolbar); Main.Add(TfrmOptionsFileOperations); FolderTabs := Main.Add(TfrmOptionsTabs); FolderTabs.Add(TfrmOptionsFavoriteTabs); FolderTabs.Add(TfrmOptionsTabsExtra); Main.Add(TfrmOptionsLog); Main.Add(TfrmOptionsConfiguration); Main.Add(TfrmOptionsQuickSearchFilter); Main.Add(TfrmOptionsMisc); Main.Add(TfrmOptionsAutoRefresh); Main.Add(TfrmOptionsIcons); Main.Add(TfrmOptionsIgnoreList); Main.Add(TfrmOptionsArchivers); Main.Add(TfrmOptionsToolTips); FileAssoc := Main.Add(TfrmOptionsFileAssoc); FileAssoc.Add(TfrmOptionsFileAssocExtra); Main.Add(TfrmOptionsDirectoryHotlist); end; initialization OptionsEditorClassList:= TOptionsEditorClassList.Create; MakeEditorsClassList; finalization if Assigned(OptionsEditorClassList) then FreeAndNil(OptionsEditorClassList); end. ������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassocextra.pas�����������������������������������������������0000644�0001750�0000144�00000010527�12653160466�022102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Extra File Associations Configuration Copyright (C) 2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsFileAssocExtra; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls; type { TfrmOptionsFileAssocExtra } TfrmOptionsFileAssocExtra = class(TOptionsEditor) cbOfferToAddToFileAssociations: TCheckBox; cbExecuteViaShell: TCheckBox; cbExtendedContextMenu: TCheckBox; cbOpenSystemWithTerminalClose: TCheckBox; cbOpenSystemWithTerminalStayOpen: TCheckBox; cbIncludeConfigFileAssoc: TCheckBox; gbExtendedContextMenuOptions: TGroupBox; procedure cbExtendedContextMenuChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private FLastLoadedOptionSignature: dword; public class function GetTitle: string; override; class function GetIconIndex: integer; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses fOptions, uShowMsg, uComponentsSignature, DCStrUtils, uGlobs, uLng; {TfrmOptionsFileAssocExtra} { TfrmOptionsFileAssocExtra.GetTitle } class function TfrmOptionsFileAssocExtra.GetTitle: string; begin Result := rsOptionsEditorFileAssicExtra; end; { TfrmOptionsFileAssocExtra.GetIconIndex } class function TfrmOptionsFileAssocExtra.GetIconIndex: integer; begin Result := 36; end; procedure TfrmOptionsFileAssocExtra.cbExtendedContextMenuChange(Sender: TObject); begin gbExtendedContextMenuOptions.Enabled := TCheckbox(Sender).Checked; end; { TfrmOptionsFileAssocExtra.Load } procedure TfrmOptionsFileAssocExtra.Load; begin cbOfferToAddToFileAssociations.Checked := gOfferToAddToFileAssociations; cbExtendedContextMenu.Checked := gExtendedContextMenu; cbOpenSystemWithTerminalStayOpen.Checked := gExecuteViaTerminalStayOpen; cbOpenSystemWithTerminalClose.Checked := gExecuteViaTerminalClose; cbExecuteViaShell.Checked := gOpenExecuteViaShell; cbIncludeConfigFileAssoc.Checked := gIncludeFileAssociation; cbExtendedContextMenuChange(cbExtendedContextMenu); FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; { TfrmOptionsFileAssocExtra.Save } function TfrmOptionsFileAssocExtra.Save: TOptionsEditorSaveFlags; begin gOfferToAddToFileAssociations := cbOfferToAddToFileAssociations.Checked; gExtendedContextMenu := cbExtendedContextMenu.Checked; gExecuteViaTerminalStayOpen := cbOpenSystemWithTerminalStayOpen.Checked; gExecuteViaTerminalClose := cbOpenSystemWithTerminalClose.Checked; gOpenExecuteViaShell := cbExecuteViaShell.Checked; gIncludeFileAssociation := cbIncludeConfigFileAssoc.Checked; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); Result := []; end; { TfrmOptionsFileAssocExtra.CanWeClose } function TfrmOptionsFileAssocExtra.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsFileAssocExtra); Answer := MsgBox(rsMsgFileAssociationsExtraModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslanguage.lfm�����������������������������������������������������0000644�0001750�0000144�00000000315�11740433676�020640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsLanguage: TfrmOptionsLanguage object lngList: TListBox[0] Left = 0 Height = 240 Top = 0 Width = 320 Align = alClient ItemHeight = 0 TabOrder = 0 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsbehavior.pas�����������������������������������������������������0000644�0001750�0000144�00000005532�11737171117�020662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Behavior options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsBehavior; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsBehavior } TfrmOptionsBehavior = class(TOptionsEditor) cbAlwaysShowTrayIcon: TCheckBox; cbMinimizeToTray: TCheckBox; cbOnlyOnce: TCheckBox; cbBlacklistUnmountedDevices: TCheckBox; edtDrivesBlackList: TEdit; gbMisc1: TGroupBox; gbMisc2: TGroupBox; lblDrivesBlackList: TLabel; procedure cbAlwaysShowTrayIconChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsBehavior } procedure TfrmOptionsBehavior.cbAlwaysShowTrayIconChange(Sender: TObject); begin // Force minimizing to tray when tray icon is always shown. cbMinimizeToTray.Enabled:= not cbAlwaysShowTrayIcon.Checked; end; class function TfrmOptionsBehavior.GetIconIndex: Integer; begin Result := 1; end; class function TfrmOptionsBehavior.GetTitle: String; begin Result := rsOptionsEditorBehavior; end; procedure TfrmOptionsBehavior.Load; begin cbOnlyOnce.Checked:= gOnlyOneAppInstance; cbMinimizeToTray.Checked:= gMinimizeToTray; cbMinimizeToTray.Enabled:= not gAlwaysShowTrayIcon; cbAlwaysShowTrayIcon.Checked:= gAlwaysShowTrayIcon; edtDrivesBlackList.Text:= gDriveBlackList; cbBlacklistUnmountedDevices.Checked:= gDriveBlackListUnmounted; end; function TfrmOptionsBehavior.Save: TOptionsEditorSaveFlags; begin Result := []; gOnlyOneAppInstance:=cbOnlyOnce.Checked; gMinimizeToTray:= cbMinimizeToTray.Checked; gAlwaysShowTrayIcon:= cbAlwaysShowTrayIcon.Checked; gDriveBlackList:= edtDrivesBlackList.Text; gDriveBlackListUnmounted:= cbBlacklistUnmountedDevices.Checked; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdirectoryhotlist.lrt���������������������������������������������0000644�0001750�0000144�00000014351�12632644230�022507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSDIRECTORYHOTLIST.GBDIRECTORYHOTLIST.CAPTION=Directory Hotlist (reorder by drag && drop) TFRMOPTIONSDIRECTORYHOTLIST.GBHOTLISTOTHEROPTIONS.CAPTION=Other options TFRMOPTIONSDIRECTORYHOTLIST.CBADDTARGET.CAPTION=When adding directory, add also target TFRMOPTIONSDIRECTORYHOTLIST.CBFULLEXPANDTREE.CAPTION=Always expand tree TFRMOPTIONSDIRECTORYHOTLIST.CBSHOWPATHINPOPUP.CAPTION=In popup, show [path also] TFRMOPTIONSDIRECTORYHOTLIST.CBSHOWONLYVALIDENV.CAPTION=Show only valid environment variables TFRMOPTIONSDIRECTORYHOTLIST.RGWHERETOADD.CAPTION=Addition from main panel: TFRMOPTIONSDIRECTORYHOTLIST.BTNINSERT.CAPTION=Insert... TFRMOPTIONSDIRECTORYHOTLIST.BTNDELETE.CAPTION=Delete... TFRMOPTIONSDIRECTORYHOTLIST.BTNEXPORT.CAPTION=Export... TFRMOPTIONSDIRECTORYHOTLIST.BTNIMPORT.CAPTION=Import... TFRMOPTIONSDIRECTORYHOTLIST.BTNBACKUP.CAPTION=Backup... TFRMOPTIONSDIRECTORYHOTLIST.BTNMISCELLANEOUS.CAPTION=Miscellaneous... TFRMOPTIONSDIRECTORYHOTLIST.BTNADD.CAPTION=Add... TFRMOPTIONSDIRECTORYHOTLIST.BTNSORT.CAPTION=Sort... TFRMOPTIONSDIRECTORYHOTLIST.BTNHELP.CAPTION=Help TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION=Name: TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION=Path: TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT=Some functions to select appropriate path TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT=Name, a-z TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION=Target: TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT=Some functions to select appropriate target TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT=Name, a-z TFRMOPTIONSDIRECTORYHOTLIST.MIHOTDIRTESTMENU.CAPTION=HotDirTestMenu TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY3.CAPTION=Insert directory I will type TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION=Add directory I will type TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION=Add a copy of the selected entry TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION=Add a command TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION=Add a separator TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION=Add sub-menu TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION=Delete selected item TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISORTSINGLEGROUP2.CAPTION=Sort single group of item(s) only TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION=Cut TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION=Paste TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION=directory I will browse to TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION=directory I will type TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION=directory of the active frame TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION=directories of the active && inactive frames TFRMOPTIONSDIRECTORYHOTLIST.MICURRENTSELECTEDORACTIVEDIRECTORIES.CAPTION=current selected or active directories of active frame TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION=a copy of the selected entry TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION=a command TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION=a separator TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION=sub-menu TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION=selected item TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION=just sub-menu but keep elements TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION=sub-menu and all its elements TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION=delete all! TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOHOTLISTFILE.CAPTION=to a Directory Hotlist file (.hotlist) TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOTOTALCOMMANDERK.CAPTION=to a "wincmd.ini" of TC (keep existing) TFRMOPTIONSDIRECTORYHOTLIST.MIEXPORTTOTOTALCOMMANDERNK.CAPTION=to a "wincmd.ini" of TC (erase existing) TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO1.CAPTION=Go to configure TC related info TFRMOPTIONSDIRECTORYHOTLIST.MIIMPORTFROMHOTLISTFILE.CAPTION=from a Directory Hotlist file (.hotlist) TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIIMPORTTOTALCOMMANDER.CAPTION=from "wincmd.ini" of TC TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION=Go to configure TC related info TFRMOPTIONSDIRECTORYHOTLIST.MISAVEBACKUPHOTLIST.CAPTION=Save a backup of current Directory Hotlist TFRMOPTIONSDIRECTORYHOTLIST.MIRESTOREBACKUPHOTLIST.CAPTION=Restore a backup of Directory Hotlist TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION=Test resulting menu TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIOPENALLBRANCHES.CAPTION=Open all branches TFRMOPTIONSDIRECTORYHOTLIST.MICOLLAPSEALL.CAPTION=Collapse all TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEARCHANDREPLACE.CAPTION=Search and replace... TFRMOPTIONSDIRECTORYHOTLIST.MISEARCHANDREPLACEINPATH.CAPTION=in path... TFRMOPTIONSDIRECTORYHOTLIST.MISEARCHANDREPLACEINTARGETPATH.CAPTION=in target path... TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MISEARCHINREPLACEINBOTHPATHS.CAPTION=in path and target path... TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION=- TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION=Scan all hotdir's path to validate the ones that actually exist TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION=Scan all hotdir's path && target to validate the ones that actually exist TFRMOPTIONSDIRECTORYHOTLIST.MISORTSINGLEGROUP.CAPTION=...single group of item(s) only TFRMOPTIONSDIRECTORYHOTLIST.MICURRENTLEVELOFITEMONLY.CAPTION=...current level of item(s) selected only TFRMOPTIONSDIRECTORYHOTLIST.MISORTSINGLESUBMENU.CAPTION=...content of submenu(s) selected, no sublevel TFRMOPTIONSDIRECTORYHOTLIST.MISORTSUBMENUANDSUBLEVEL.CAPTION=...content of submenu(s) selected and all sublevels TFRMOPTIONSDIRECTORYHOTLIST.MISORTEVERYTHING.CAPTION=...everything, from A to Z! ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstabsextra.lrt����������������������������������������������������0000644�0001750�0000144�00000002376�12656270711�021102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTABSEXTRA.GBTABS.CAPTION=Folder tabs headers extra TFRMOPTIONSTABSEXTRA.CBUSEFAVORITETABSEXTRAOPTIONS.CAPTION=Enable Favorite Tabs extra options (select target side when restore, etc.) TFRMOPTIONSTABSEXTRA.GBDEFAULTTABSAVEDRESTORATION.CAPTION=Default extra settings when saving new Favorite Tabs: TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT=Left TFRMOPTIONSTABSEXTRA.LBLDEFAULTTARGETPANELLEFTSAVED.CAPTION=Tabs saved on left will be restored to: TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT=Right TFRMOPTIONSTABSEXTRA.LBLDEFAULTTARGETPANELRIGHTSAVED.CAPTION=Tabs saved on right will be restored to: TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT=None TFRMOPTIONSTABSEXTRA.LBLDEFAULTEXISTINGTABSTOKEEP.CAPTION=When restoring tab, existing tabs to keep: TFRMOPTIONSTABSEXTRA.CBGOTOCONFIGAFTERSAVE.CAPTION=Goto to Favorite Tabs Configuration after saving a new one TFRMOPTIONSTABSEXTRA.CBGOTOCONFIGAFTERRESAVE.CAPTION=Goto to Favorite Tabs Configuration after resaving TFRMOPTIONSTABSEXTRA.RGWHERETOADD.CAPTION=Default position in menu when saving a new Favorite Tabs: TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT=No TFRMOPTIONSTABSEXTRA.LBLFAVORITETABSSAVEDIRHISTORY.CAPTION=Keep saving dir history with Favorite Tabs: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsterminal.lrt�����������������������������������������������������0000644�0001750�0000144�00000002151�12660674103�020705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTERMINAL.GBRUNINTERMINALCLOSE.CAPTION=Command for running a command in terminal and close after: TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSECMD.EDITLABEL.CAPTION=Command: TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSEPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSEPARAMS.EDITLABEL.CAPTION=Parameters: TFRMOPTIONSTERMINAL.GBRUNINTERMINALSTAYOPEN.CAPTION=Command for running a command in terminal and stay open: TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENCMD.EDITLABEL.CAPTION=Command: TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.EDITLABEL.CAPTION=Parameters: TFRMOPTIONSTERMINAL.GBJUSTRUNTERMINAL.CAPTION=Command for just running terminal: TFRMOPTIONSTERMINAL.LEDTRUNTERMCMD.EDITLABEL.CAPTION=Command: TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.HINT={command} should normally be present here to reflect the command to be run in terminal TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.EDITLABEL.CAPTION=Parameters: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassoc.lfm����������������������������������������������������0000644�0001750�0000144�00000122036�12532643273�021026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFileAssoc: TfrmOptionsFileAssoc Height = 585 Width = 568 ClientHeight = 585 ClientWidth = 568 Constraints.MinHeight = 300 OnResize = FrameResize ParentShowHint = False ShowHint = True DesignLeft = 151 DesignTop = 187 object pnlSettings: TPanel[0] Left = 0 Height = 585 Top = 0 Width = 568 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 585 ClientWidth = 568 TabOrder = 0 OnResize = pnlSettingsResize object pnlRightSettings: TPanel AnchorSideLeft.Control = pnlLeftSettings AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlSettings AnchorSideRight.Control = pnlSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottomSettings Left = 266 Height = 430 Top = 6 Width = 292 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 430 ClientWidth = 292 Constraints.MinWidth = 200 TabOrder = 1 OnResize = pnlRightSettingsResize object gbActions: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = gbExts AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlRightSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 206 Top = 224 Width = 292 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Actions' ClientHeight = 186 ClientWidth = 288 TabOrder = 1 object lbActions: TListBox Left = 6 Height = 174 Hint = 'Actions may be sorted by drag & drop' Top = 6 Width = 197 Align = alClient BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lbActionsDragDrop OnDragOver = lbGenericDragOver OnSelectionChange = lbActionsSelectionChange ScrollWidth = 198 TabOrder = 0 end object pnlActsButtons: TPanel Left = 209 Height = 174 Top = 6 Width = 73 Align = alRight AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 174 ClientWidth = 73 TabOrder = 1 object btnUpAct: TButton Left = 0 Height = 29 Top = 0 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Up' OnClick = btnUpActClick TabOrder = 0 end object btnDownAct: TButton Left = 0 Height = 29 Top = 29 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Down' OnClick = btnDownActClick TabOrder = 1 end object btnInsertAct: TButton Tag = 32 Left = 0 Height = 29 Top = 58 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Insert' OnClick = btnInsertAddActClick TabOrder = 2 end object btnAddAct: TButton Left = 0 Height = 29 Top = 87 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Add' OnClick = btnInsertAddActClick TabOrder = 3 end object btnCloneAct: TButton Left = 0 Height = 29 Top = 116 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Clone' OnClick = btnCloneActClick TabOrder = 4 end object btnRemoveAct: TButton Left = 0 Height = 29 Top = 145 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Remo&ve' OnClick = btnRemoveActClick TabOrder = 5 end end object pnlActsEdits: TPanel Left = 0 Height = 0 Top = 186 Width = 288 Align = alBottom AutoSize = True BevelOuter = bvNone TabOrder = 2 end end object gbIcon: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = pnlRightSettings AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlRightSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 64 Top = 0 Width = 292 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Icon' ClientHeight = 44 ClientWidth = 288 TabOrder = 2 object sbtnIcon: TSpeedButton AnchorSideLeft.Control = gbIcon AnchorSideTop.Control = gbIcon Left = 6 Height = 38 Hint = 'Click me to change icon!' Top = 2 Width = 38 BorderSpacing.Left = 6 BorderSpacing.Top = 2 BorderSpacing.Bottom = 4 OnClick = sbtnIconClick end object fneIconFileName: TFileNameEdit AnchorSideLeft.Control = sbtnIcon AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbtnIcon AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativePathIcon Left = 44 Height = 23 Top = 10 Width = 197 DialogKind = dkPictureOpen FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 OnChange = fneIconFileNameChange end object btnRelativePathIcon: TSpeedButton AnchorSideTop.Control = sbtnIcon AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbIcon AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 265 Height = 23 Top = 10 Width = 23 Anchors = [akTop, akRight] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativePathIconClick end end object gbExts: TGroupBox AnchorSideLeft.Control = pnlRightSettings AnchorSideTop.Control = gbIcon AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlRightSettings AnchorSideRight.Side = asrBottom Left = 0 Height = 160 Hint = 'Can be sorted by drag & drop' Top = 64 Width = 292 Anchors = [akTop, akLeft, akRight] BorderSpacing.InnerBorder = 20 Caption = 'Extensions' ClientHeight = 140 ClientWidth = 288 Constraints.MinHeight = 160 TabOrder = 0 object lbExts: TListBox Left = 6 Height = 128 Hint = 'Extensions may be sorted by drag & drop' Top = 6 Width = 197 Align = alClient BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 0 OnDragDrop = lbExtsDragDrop OnDragOver = lbGenericDragOver OnSelectionChange = lbExtsSelectionChange ScrollWidth = 198 TabOrder = 0 end object pnlExtsButtons: TPanel Left = 209 Height = 128 Top = 6 Width = 73 Align = alRight AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 128 ClientWidth = 73 TabOrder = 1 object btnEditExt: TButton Left = 0 Height = 29 Top = 0 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Edit' OnClick = btnEditExtClick TabOrder = 0 end object btnInsertExt: TButton Tag = 1 Left = 0 Height = 29 Top = 29 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Insert' OnClick = btnInsertAddExtClick TabOrder = 1 end object btnAddExt: TButton Left = 0 Height = 29 Top = 58 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Add' OnClick = btnInsertAddExtClick TabOrder = 2 end object btnRemoveExt: TButton Left = 0 Height = 29 Top = 87 Width = 73 AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'Re&move' OnClick = btnRemoveExtClick TabOrder = 3 end end end end object pnlLeftSettings: TPanel AnchorSideLeft.Control = pnlSettings AnchorSideTop.Control = pnlSettings AnchorSideBottom.Control = pnlBottomSettings Left = 6 Height = 430 Top = 6 Width = 250 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 430 ClientWidth = 250 TabOrder = 0 object gbFileTypes: TGroupBox AnchorSideBottom.Side = asrBottom Left = 0 Height = 430 Top = 0 Width = 250 Align = alClient Caption = 'File types' ClientHeight = 410 ClientWidth = 246 TabOrder = 0 object lbFileTypes: TListBox AnchorSideLeft.Control = gbFileTypes AnchorSideTop.Control = gbFileTypes AnchorSideRight.Control = gbFileTypes AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnAddNewType Left = 6 Height = 332 Hint = 'File types may be sorted by drag & drop' Top = 6 Width = 234 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 6 DragMode = dmAutomatic ItemHeight = 20 OnDragDrop = lbFileTypesDragDrop OnDragOver = lbGenericDragOver OnDrawItem = lbFileTypesDrawItem OnSelectionChange = lbFileTypesSelectionChange ScrollWidth = 232 Style = lbOwnerDrawFixed TabOrder = 0 end object btnAddNewType: TButton AnchorSideLeft.Control = gbFileTypes AnchorSideTop.Control = lbFileTypes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFileTypes AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnRemoveType Left = 6 Height = 29 Top = 344 Width = 234 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 2 BorderSpacing.InnerBorder = 2 Caption = 'A&dd' OnClick = btnAddNewTypeClick TabOrder = 1 end object btnRemoveType: TButton AnchorSideLeft.Control = btnAddNewType Left = 6 Height = 29 Top = 375 Width = 73 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.InnerBorder = 2 Caption = '&Remove' OnClick = btnRemoveTypeClick OnResize = btnRemoveTypeResize TabOrder = 2 end object btnRenameType: TButton AnchorSideRight.Control = btnAddNewType AnchorSideRight.Side = asrBottom Left = 167 Height = 29 Top = 375 Width = 73 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.InnerBorder = 2 Caption = 'R&ename' OnClick = btnRenameTypeClick OnResize = btnRenameTypeResize TabOrder = 3 end end end object pnlBottomSettings: TPanel AnchorSideLeft.Control = pnlSettings AnchorSideRight.Control = pnlSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlSettings AnchorSideBottom.Side = asrBottom Left = 10 Height = 137 Top = 442 Width = 548 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 4 BorderSpacing.Right = 4 BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 137 ClientWidth = 548 TabOrder = 2 object gbActionDescription: TGroupBox AnchorSideLeft.Control = pnlBottomSettings AnchorSideTop.Control = pnlBottomSettings AnchorSideRight.Control = pnlBottomSettings AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottomSettings AnchorSideBottom.Side = asrBottom Left = 0 Height = 133 Top = 2 Width = 548 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 2 BorderSpacing.Bottom = 2 Caption = 'Action description:' ClientHeight = 113 ClientWidth = 544 TabOrder = 0 object edbActionName: TEditButton AnchorSideTop.Control = gbActionDescription AnchorSideRight.Control = btnCommands AnchorSideRight.Side = asrBottom Left = 103 Height = 23 Hint = 'Name of the action. It is never passed to the system, it''s just a mnemonic name chosen by you, for you' Top = 4 Width = 418 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ButtonWidth = 23 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } MaxLength = 0 NumGlyphs = 1 OnButtonClick = btnActionsClick OnChange = edbActionNameChange PasswordChar = #0 TabOrder = 0 end object lblAction: TLabel AnchorSideTop.Control = edbActionName AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edbActionName Left = 32 Height = 15 Top = 8 Width = 71 Anchors = [akTop, akRight] Caption = 'Action name:' FocusControl = edbActionName ParentColor = False end object fneCommand: TFileNameEdit AnchorSideLeft.Control = edbActionName AnchorSideTop.Control = edbActionName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCommands AnchorSideBottom.Side = asrBottom Left = 103 Height = 23 Hint = 'Command to execute. Long filename with space should be quoted.' Top = 31 Width = 371 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 1 OnChange = fneCommandChange end object btnCommands: TSpeedButton AnchorSideTop.Control = fneCommand AnchorSideRight.Control = btnRelativeCommand AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 498 Height = 23 Top = 31 Width = 23 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFD9AD86FFA465 34FF000000000000000000000000000000000000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFD9AD86FFD9AD86FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 0000A46534FFE5CCB4FFDBB795FFDBB694FFDAB492FFDAB390FFD9AD86FFD8AA 83FFD7A87FFFD7A67DFFE0BE9FFFA46534FF0000000000000000000000000000 0000A46534FFE8D3C0FFE7D1BBFFE7D1BCFFE6CEB7FFE6CEB7FFE6CEB7FFE6CE B7FFE6CDB6FFE6CCB5FFE6CCB6FFA46534FF0000000000000000000000000000 0000A46534CCA46534FFA46534FFA46534FFA46534FFE6CEB7FFE6CEB7FFA465 34FFA46534FFA46534FFA46534FFA46534CC0000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534FFE6CEB7FFE6CEB7FFA465 34FF000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000A46534CCA46534FFA46534FFA465 34CC000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = btnCommandsClick end object btnRelativeCommand: TSpeedButton AnchorSideTop.Control = fneCommand AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneCommand AnchorSideBottom.Side = asrBottom Left = 521 Height = 23 Top = 31 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeCommandClick end object btnParametersHelper: TSpeedButton AnchorSideTop.Control = edtParams AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtParams AnchorSideBottom.Side = asrBottom Left = 521 Height = 23 Top = 58 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnParametersHelperClick end object lblCommand: TLabel AnchorSideTop.Control = fneCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = fneCommand Left = 43 Height = 15 Top = 35 Width = 60 Anchors = [akTop, akRight] Caption = '&Command:' ParentColor = False end object edtParams: TEdit AnchorSideLeft.Control = edbActionName AnchorSideTop.Control = fneCommand AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnParametersHelper AnchorSideBottom.Control = deStartPath Left = 103 Height = 23 Hint = 'Parameter to pass to the command. Long filename with spaces should be quoted.' Top = 58 Width = 418 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 4 MaxLength = 259 OnChange = edtParamsChange TabOrder = 2 end object lblExternalParameters: TLabel AnchorSideTop.Control = edtParams AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edtParams Left = 41 Height = 15 Top = 62 Width = 62 Alignment = taRightJustify Anchors = [akTop, akRight] Caption = 'Parameter&s:' FocusControl = edtParams ParentColor = False end object lblStartPath: TLabel AnchorSideTop.Side = asrCenter Left = 25 Height = 15 Top = -1368 Width = 54 Alignment = taRightJustify Anchors = [akTop, akRight] Caption = 'Start pat&h:' ParentColor = False Visible = False end object deStartPath: TDirectoryEdit AnchorSideLeft.Control = edbActionName AnchorSideRight.Control = btnStartPathPathHelper AnchorSideBottom.Control = gbActionDescription AnchorSideBottom.Side = asrBottom Left = 103 Height = 23 Hint = 'Starting path of the command. Never quote this string.' Top = 85 Width = 371 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Top = 4 BorderSpacing.Bottom = 5 MaxLength = 0 TabOrder = 3 OnChange = deStartPathChange end object btnStartPathVarHelper: TSpeedButton AnchorSideTop.Control = deStartPath AnchorSideRight.Control = gbActionDescription AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = deStartPath AnchorSideBottom.Side = asrBottom Left = 521 Height = 23 Top = 85 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } OnClick = btnStartPathVarHelperClick end object btnStartPathPathHelper: TSpeedButton AnchorSideTop.Control = deStartPath AnchorSideRight.Control = btnStartPathVarHelper AnchorSideBottom.Control = deStartPath AnchorSideBottom.Side = asrBottom Left = 498 Height = 23 Top = 85 Width = 23 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnStartPathPathHelperClick end object lblExternalParameters1: TLabel AnchorSideTop.Control = deStartPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = deStartPath Left = 49 Height = 15 Top = 89 Width = 54 Alignment = taRightJustify Anchors = [akTop, akRight] Caption = 'Start path:' FocusControl = edtParams ParentColor = False end end end end object OpenPictureDialog: TOpenPictureDialog[1] left = 65 top = 124 end object pmActions: TPopupMenu[2] left = 175 top = 60 object miOpen: TMenuItem Caption = 'Open' OnClick = miActionsClick end object miView: TMenuItem Tag = 1 Caption = 'View' OnClick = miActionsClick end object miEdit: TMenuItem Tag = 2 Caption = 'Edit' OnClick = miActionsClick end object miCustom: TMenuItem Tag = 3 Caption = 'Custom' OnClick = miActionsClick end object MenuItem1: TMenuItem Caption = '-' end object miOpenWith: TMenuItem Tag = 16 Caption = 'Open with...' OnClick = miActionsClick end object miViewWith: TMenuItem Tag = 17 Caption = 'View with...' OnClick = miActionsClick end object miEditWith: TMenuItem Tag = 18 Caption = 'Edit with...' OnClick = miActionsClick end object MenuItem3: TMenuItem Tag = 19 Caption = 'Custom with...' OnClick = miActionsClick end end object pmCommands: TPopupMenu[3] left = 175 top = 124 object miViewer: TMenuItem Tag = 2 Caption = 'Open in Viewer' OnClick = miCommandsClick end object miInternalViewer: TMenuItem Tag = 3 Caption = 'Open in Internal Viewer' OnClick = miCommandsClick end object miEditor: TMenuItem Tag = 4 Caption = 'Open in Editor' OnClick = miCommandsClick end object miInternalEditor: TMenuItem Tag = 5 Caption = 'Open in Internal Editor' OnClick = miCommandsClick end object miSeparator: TMenuItem Caption = '-' end object miShell: TMenuItem Tag = 6 Caption = 'Run in terminal' OnClick = miCommandsClick end object miGetOutputFromCommand: TMenuItem Tag = 7 Caption = 'Get output from command' OnClick = miCommandsClick end end object OpenDialog: TOpenDialog[4] Filter = 'Exceutables|*.exe;*.com;*.bat|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 65 top = 60 end object pmVariableParamsHelper: TPopupMenu[5] left = 175 top = 193 end object pmPathHelper: TPopupMenu[6] left = 65 top = 187 end object pmVariableStartPathHelper: TPopupMenu[7] left = 165 top = 263 end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/fsearchplugin.pas��������������������������������������������������������0000644�0001750�0000144�00000010241�12405254761�020124� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Content plugins search frame Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) 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 fSearchPlugin; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Grids, ExtCtrls, StdCtrls, ComCtrls, Buttons, uFindFiles; type { TfrmSearchPlugin } TfrmSearchPlugin = class(TFrame) btnDelete: TBitBtn; btnAdd: TButton; chkUsePlugins: TCheckBox; HeaderControl: THeaderControl; pnlHeader: TPanel; pnlButtons: TPanel; pnlTable: TScrollBox; rbAnd: TRadioButton; rbOr: TRadioButton; procedure btnAddClick(Sender: TObject); procedure btnDeleteClick(Sender: TObject); procedure chkUsePluginsChange(Sender: TObject); procedure pnlTableResize(Sender: TObject); private { private declarations } public procedure Save(var SearchTemplate: TSearchTemplateRec); procedure Load(const SearchTemplate: TSearchTemplateRec); end; implementation {$R *.lfm} uses StrUtils, WdxPlugin, uGlobs, uWDXModule, uSearchContent; { TfrmSearchPlugin } procedure TfrmSearchPlugin.Save(var SearchTemplate: TSearchTemplateRec); var I, J: Integer; Value: Variant; Module: TWDXModule; Plugin: TPluginPanel; begin SearchTemplate.ContentPlugin:= chkUsePlugins.Checked; if not SearchTemplate.ContentPlugin then Exit; SearchTemplate.ContentPluginCombine:= rbAnd.Checked; SetLength(SearchTemplate.ContentPlugins, pnlTable.ControlCount); for I:= 0 to pnlTable.ControlCount - 1 do begin Plugin:= TPluginPanel(pnlTable.Controls[I]); SearchTemplate.ContentPlugins[I].Plugin:= Plugin.Plugin; SearchTemplate.ContentPlugins[I].Field:= Plugin.Field; SearchTemplate.ContentPlugins[I].Compare:= Plugin.Compare; SearchTemplate.ContentPlugins[I].FieldType:= Plugin.FieldType; SearchTemplate.ContentPlugins[I].Value:= Plugin.Value; end; end; procedure TfrmSearchPlugin.Load(const SearchTemplate: TSearchTemplateRec); var I: Integer; Panel: TPluginPanel; begin chkUsePlugins.Checked:= SearchTemplate.ContentPlugin; rbAnd.Checked:= SearchTemplate.ContentPluginCombine; for I:= Low(SearchTemplate.ContentPlugins) to High(SearchTemplate.ContentPlugins) do begin Panel:= TPluginPanel.Create(pnlTable); Panel.Parent:= pnlTable; Panel.Plugin:= SearchTemplate.ContentPlugins[I].Plugin; Panel.Field:= SearchTemplate.ContentPlugins[I].Field; Panel.Compare:= SearchTemplate.ContentPlugins[I].Compare; Panel.Value:= SearchTemplate.ContentPlugins[I].Value; end; end; procedure TfrmSearchPlugin.btnAddClick(Sender: TObject); var Panel: TPluginPanel; begin Panel:= TPluginPanel.Create(pnlTable); Panel.Parent:= pnlTable; end; procedure TfrmSearchPlugin.btnDeleteClick(Sender: TObject); var Index: Integer; begin Index:= pnlTable.ControlCount - 1; if Index >= 0 then pnlTable.Controls[Index].Free; end; procedure TfrmSearchPlugin.chkUsePluginsChange(Sender: TObject); begin rbAnd.Enabled:= chkUsePlugins.Checked; rbOr.Enabled:= chkUsePlugins.Checked; HeaderControl.Enabled:= chkUsePlugins.Checked; pnlTable.Enabled:= chkUsePlugins.Checked; pnlButtons.Enabled:= chkUsePlugins.Checked; end; procedure TfrmSearchPlugin.pnlTableResize(Sender: TObject); var I, ColumnWidth: Integer; begin ColumnWidth:= pnlTable.ClientWidth div HeaderControl.Sections.Count; for I:= 0 to HeaderControl.Sections.Count - 1 do begin HeaderControl.Sections[I].Width:= ColumnWidth; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionseditorcolors.lfm�������������������������������������������������0000644�0001750�0000144�00000105233�12313074207�021556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsEditorColors: TfrmOptionsEditorColors Height = 357 Width = 680 ClientHeight = 357 ClientWidth = 680 DesignLeft = 322 DesignTop = 122 object pnlTop: TPanel[0] Left = 0 Height = 24 Top = 0 Width = 680 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 3 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 24 ClientWidth = 680 Constraints.MaxWidth = 1000 ParentShowHint = False ShowHint = True TabOrder = 0 object cmbLanguage: TComboBox AnchorSideTop.Side = asrBottom Left = 0 Height = 21 Top = 3 Width = 326 BorderSpacing.Top = 3 ItemHeight = 13 OnChange = cmbLanguageChange Style = csDropDownList TabOrder = 0 end object pnlFileExtensions: TPanel AnchorSideBottom.Side = asrBottom Left = 329 Height = 21 Top = 3 Width = 351 AutoSize = True BevelOuter = bvNone ClientHeight = 21 ClientWidth = 351 TabOrder = 1 object edtFileExtensions: TEdit Left = 0 Height = 21 Top = 0 Width = 305 Align = alClient TabOrder = 0 end object btnResetMask: TSpeedButton Left = 328 Height = 21 Hint = 'Reset' Top = 0 Width = 23 Align = alRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000200000008000000120000001D000000271212126315151575151515751515 157515151575151515751515157515151575151515751212125E000000000000 000100000004000000090000000F0000001438383871ECECECFFE8E8E8FFE8E8 E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFECECECFF38383871000000000000 0000000000000000000000000000373737004949496EEAEAEAFFCBCBCBFFCBCB CBFFCBCBCBFFCBCBCBFFEAEAEAFF666666FFEAEAEAFF4949496E0B0B0B000404 040000000000000000003E3E3E00525252005252526DEEEEEEFFC8C8C8FFFFFF FFFFFFFFFFFFC8C8C8FFF1F1F1FFEDEDEDFFEEEEEEFF5252526D151515000D0D 0D00191919581515157515151575151515752D2D2DAF8C8C8CFF747474FF9494 94FF949494FF7C7C7CFFC4C4C4FFC4C4C4FFF1F1F1FF5C5C5C6C151515000D0D 0D0038383871ECECECFFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8E8FFE8E8 E8FFECECECFFD8D8D8FFFFFFFFFFC0C0C0FFF6F6F6FF6464646A191919581515 1575353535B1EAEAEAFF262626FF262626FF262626FF262626FFEAEAEAFF6666 66FFEAEAEAFFD8D8D8FFFFFFFFFFBBBBBBFFF9F9F9FF6C6C6C6938383871ECEC ECFFA8A8A8FFEEEEEEFF2A2A2AFF3C3C3CFF3C3C3CFF2A2A2AFFF1F1F1FFEDED EDFFEEEEEEFF9F9F9FFFADADADFFADADADFFFDFDFDFF747474684949496EEAEA EAFFADA639FFF1F1F1FF2E2E2EFF424242FF424242FF343434FF2E2E2EFF2E2E 2EFFF1F1F1FFD8D8D8FFFFFFFFFFFFFFFFFFFFFFFFFF7A7A7A675252526DEEEE EEFFB2AB3CFFF6F6F6FF333333FF4A4A4AFF4A4A4AFF4A4A4AFF4A4A4AFF3333 33FFF6F6F6FF7F7F7F947F7F7F667F7F7F667F7F7F667F7F7F4D5C5C5C6CF1F1 F1FFB6AE3FFFF9F9F9FF383838FF505050FF505050FF505050FF505050FF3838 38FFF9F9F9FF7F7F7F4D8080800080808000808080007F7F7F006464646AF6F6 F6FFB9B242FFFDFDFDFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B3BFF3B3B 3BFFFDFDFDFF747474688080800080808000808080007F7F7F006C6C6C69F9F9 F9FFBCB544FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF7A7A7A677C7C7C0080808000808080007F7F7F0074747468FDFD FDFFC9C13CFFBFB745FFBFB745FFBFB745FFBFB745FFBFB745FFCBCBCBFF7B7B 7BA47F7F7F667F7F7F4D747474007E7E7E00808080007F7F7F007A7A7A67FFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7A7A 7A677A7A7A007A7A7A007A7A7A007A7A7A007F7F7F007F7F7F007F7F7F4D7F7F 7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F7F667F7F 7F4D7E7E7E007E7E7E007E7E7E005F5F5F000000000000000000 } OnClick = btnResetMaskClick end object btnSaveMask: TSpeedButton Left = 305 Height = 21 Hint = 'Save' Top = 0 Width = 23 Align = alRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000BA6A368FB969 35B5B86935EEB76835FFB56835FFB46734FFB26634FFB06533FFAE6433FFAC63 32FFAA6232FFA96132FFA86031FFA76031FEA66031F1A86131C4BA6A35DEEBC6 ADFFEAC5ADFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB F8FFFEFBF8FFFEFBF8FFFEFBF8FFC89A7CFFC79879FFA76031EDBA6B37FEEDCA B3FFE0A27AFFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0 88FF62C088FF62C088FFFDF9F6FFCA8D65FFC99B7CFFA76031FEBB6C38FFEECC B6FFE1A27AFFFEFAF7FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDCC2FFBFDC C2FFBFDCC2FFBFDCC2FFFDF9F6FFCD9068FFCC9E81FFA86132FFBB6B38FFEFCE B8FFE1A279FFFEFAF7FF62C088FF62C088FF62C088FF62C088FF62C088FF62C0 88FF62C088FF62C088FFFDF9F6FFCF936AFFCEA384FFAA6132FFBA6A36FFEFD0 BBFFE2A27AFFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFBF8FFFEFB F8FFFEFBF8FFFEFBF8FFFEFBF8FFD3966DFFD2A78AFFAB6232FFBB6A36FFF0D2 BEFFE2A37AFFE2A37AFFE1A37AFFE2A37BFFE1A37BFFE0A178FFDE9F77FFDD9F 76FFDC9D74FFD99B72FFD89971FFD69970FFD5AB8EFFAD6333FFBB6A36FFF2D5 C2FFE3A37AFFE3A37AFFE2A37BFFE2A37BFFE2A47BFFE1A279FFE0A178FFDEA0 77FFDE9E75FFDC9D74FFDA9B73FFD99B73FFDAB095FFAF6433FFBB6A36FFF2D8 C5FFE3A47BFFE3A37AFFE3A47AFFE2A47BFFE2A37BFFE1A37BFFE1A279FFDFA0 77FFDE9F76FFDD9E74FFDB9C72FFDC9D74FFDDB59AFFB16534FFBB6B36FFF4D9 C7FFE6A67DFFC88C64FFC98D65FFC98E67FFCB926CFFCB926DFFCA9069FFC88C 65FFC88C64FFC88C64FFC88C64FFDA9C74FFE1BA9FFFB36634FFBB6B36FEF4DC C9FFE7A77DFFF9ECE1FFF9ECE1FFF9EDE3FFFCF4EEFFFDFAF7FFFDF7F3FFFAED E5FFF7E7DBFFF7E5D9FFF6E5D8FFDEA077FFE4BEA4FFB46734FFBC6B36FAF5DD CCFFE7A87EFFFAF0E8FFFAF0E8FFC98D66FFFAF0E9FFFDF8F3FFFEFAF8FFFCF4 EFFFF9E9DFFFF7E7DBFFF7E5D9FFE0A278FFE7C2A9FFB66835FFBC6B36F0F6DF D0FFE8A87EFFFCF6F1FFFCF6F1FFC88C64FFFAF1E9FFFBF4EEFFFDFAF7FFFDF9 F6FFFAF0E8FFF8E8DDFFF7E6DBFFE1A37AFFEFD5C3FFB76935FEBC6B36D8F6DF D1FFE9AA80FFFEFAF6FFFDFAF6FFC88C64FFFBF3EEFFFBF1EAFFFCF6F2FFFEFB F8FFFCF6F1FFF9ECE2FFF8E7DBFFEED0BAFFECD0BDFFBB703EF8BC6B369BF6E0 D1FFF7E0D1FFFEFBF8FFFEFBF7FFFDF9F6FFFCF5F0FFFAF0EAFFFBF2EDFFFDF9 F6FFFDFAF7FFFBF1EBFFF8E9DFFEECD0BDFBC9895EECB5693563BC6B3671BC6B 3690BC6B36CCBC6B36EEBC6B36FABB6B36FEBB6B36FFBB6A36FFBB6A36FFBC6C 39FFBD6E3BFFBB6D3AFFBB6B38EFBB703ECBB6693554FFFFFF00 } OnClick = btnSaveMaskClick end end end object PnlTop2: TPanel[1] Left = 0 Height = 133 Top = 24 Width = 680 Align = alTop Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 133 ClientWidth = 680 TabOrder = 1 inline ColorPreview: TSynEdit Left = 211 Height = 132 Top = 1 Width = 469 Align = alClient BorderSpacing.Left = 1 BorderSpacing.Top = 1 Font.Height = -16 Font.Name = 'courier' Font.Pitch = fpFixed Font.Quality = fqNonAntialiased ParentColor = False ParentFont = False TabOrder = 0 TabStop = False BookMarkOptions.Xoffset = 30 Gutter.Width = 59 Gutter.MouseActions = <> RightGutter.Width = 0 RightGutter.MouseActions = <> Keystrokes = < item Command = ecUp ShortCut = 38 end item Command = ecSelUp ShortCut = 8230 end item Command = ecScrollUp ShortCut = 16422 end item Command = ecDown ShortCut = 40 end item Command = ecSelDown ShortCut = 8232 end item Command = ecScrollDown ShortCut = 16424 end item Command = ecLeft ShortCut = 37 end item Command = ecSelLeft ShortCut = 8229 end item Command = ecWordLeft ShortCut = 16421 end item Command = ecSelWordLeft ShortCut = 24613 end item Command = ecRight ShortCut = 39 end item Command = ecSelRight ShortCut = 8231 end item Command = ecWordRight ShortCut = 16423 end item Command = ecSelWordRight ShortCut = 24615 end item Command = ecPageDown ShortCut = 34 end item Command = ecSelPageDown ShortCut = 8226 end item Command = ecPageBottom ShortCut = 16418 end item Command = ecSelPageBottom ShortCut = 24610 end item Command = ecPageUp ShortCut = 33 end item Command = ecSelPageUp ShortCut = 8225 end item Command = ecPageTop ShortCut = 16417 end item Command = ecSelPageTop ShortCut = 24609 end item Command = ecLineStart ShortCut = 36 end item Command = ecSelLineStart ShortCut = 8228 end item Command = ecEditorTop ShortCut = 16420 end item Command = ecSelEditorTop ShortCut = 24612 end item Command = ecLineEnd ShortCut = 35 end item Command = ecSelLineEnd ShortCut = 8227 end item Command = ecEditorBottom ShortCut = 16419 end item Command = ecSelEditorBottom ShortCut = 24611 end item Command = ecToggleMode ShortCut = 45 end item Command = ecCopy ShortCut = 16429 end item Command = ecPaste ShortCut = 8237 end item Command = ecDeleteChar ShortCut = 46 end item Command = ecCut ShortCut = 8238 end item Command = ecDeleteLastChar ShortCut = 8 end item Command = ecDeleteLastChar ShortCut = 8200 end item Command = ecDeleteLastWord ShortCut = 16392 end item Command = ecUndo ShortCut = 32776 end item Command = ecRedo ShortCut = 40968 end item Command = ecLineBreak ShortCut = 13 end item Command = ecSelectAll ShortCut = 16449 end item Command = ecCopy ShortCut = 16451 end item Command = ecBlockIndent ShortCut = 24649 end item Command = ecLineBreak ShortCut = 16461 end item Command = ecInsertLine ShortCut = 16462 end item Command = ecDeleteWord ShortCut = 16468 end item Command = ecBlockUnindent ShortCut = 24661 end item Command = ecPaste ShortCut = 16470 end item Command = ecCut ShortCut = 16472 end item Command = ecDeleteLine ShortCut = 16473 end item Command = ecDeleteEOL ShortCut = 24665 end item Command = ecUndo ShortCut = 16474 end item Command = ecRedo ShortCut = 24666 end item Command = ecGotoMarker0 ShortCut = 16432 end item Command = ecGotoMarker1 ShortCut = 16433 end item Command = ecGotoMarker2 ShortCut = 16434 end item Command = ecGotoMarker3 ShortCut = 16435 end item Command = ecGotoMarker4 ShortCut = 16436 end item Command = ecGotoMarker5 ShortCut = 16437 end item Command = ecGotoMarker6 ShortCut = 16438 end item Command = ecGotoMarker7 ShortCut = 16439 end item Command = ecGotoMarker8 ShortCut = 16440 end item Command = ecGotoMarker9 ShortCut = 16441 end item Command = ecSetMarker0 ShortCut = 24624 end item Command = ecSetMarker1 ShortCut = 24625 end item Command = ecSetMarker2 ShortCut = 24626 end item Command = ecSetMarker3 ShortCut = 24627 end item Command = ecSetMarker4 ShortCut = 24628 end item Command = ecSetMarker5 ShortCut = 24629 end item Command = ecSetMarker6 ShortCut = 24630 end item Command = ecSetMarker7 ShortCut = 24631 end item Command = ecSetMarker8 ShortCut = 24632 end item Command = ecSetMarker9 ShortCut = 24633 end item Command = ecNormalSelect ShortCut = 24654 end item Command = ecColumnSelect ShortCut = 24643 end item Command = ecLineSelect ShortCut = 24652 end item Command = ecTab ShortCut = 9 end item Command = ecShiftTab ShortCut = 8201 end item Command = ecMatchBracket ShortCut = 24642 end> MouseActions = <> MouseSelActions = <> Lines.Strings = ( 'ColorPreview' ) VisibleSpecialChars = [vscSpace, vscTabAtLast] BracketHighlightStyle = sbhsBoth BracketMatchColor.Background = clNone BracketMatchColor.Foreground = clNone BracketMatchColor.Style = [fsBold] FoldedCodeColor.Background = clNone FoldedCodeColor.Foreground = clGray FoldedCodeColor.FrameColor = clGray MouseLinkColor.Background = clNone MouseLinkColor.Foreground = clBlue LineHighlightColor.Background = clNone LineHighlightColor.Foreground = clNone inline TSynGutterPartList object TSynGutterMarks Width = 24 MouseActions = <> end object TSynGutterLineNumber Width = 19 MouseActions = <> MarkupInfo.Background = clBtnFace MarkupInfo.Foreground = clNone DigitCount = 2 ShowOnlyLineNumbersMultiplesOf = 1 ZeroStart = False LeadingZeros = False end object TSynGutterChanges Width = 4 MouseActions = <> ModifiedColor = 59900 SavedColor = clGreen end object TSynGutterSeparator Width = 2 MouseActions = <> end object TSynGutterCodeFolding MouseActions = <> MarkupInfo.Background = clNone MarkupInfo.Foreground = clGray MouseActionsExpanded = <> MouseActionsCollapsed = <> end end end object Splitter1: TSplitter Left = 205 Height = 133 Top = 0 Width = 5 end object ColorElementTree: TListBox Left = 0 Height = 133 Top = 0 Width = 205 Align = alLeft ItemHeight = 0 OnDrawItem = ColorElementTreeDrawItem OnSelectionChange = ColorElementTreeSelectionChange ScrollWidth = 203 Style = lbOwnerDrawFixed TabOrder = 2 end end object pnlElementAttributes: TPanel[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = PnlTop2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 200 Top = 157 Width = 680 Anchors = [akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 200 ClientWidth = 680 Constraints.MinHeight = 200 TabOrder = 2 OnResize = pnlElementAttributesResize object ForeGroundLabel: TLabel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 13 Top = 49 Width = 56 BorderSpacing.Left = 6 Caption = 'Fo®round' FocusControl = ForegroundColorBox ParentColor = False Visible = False end object BackGroundLabel: TLabel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 13 Top = 74 Width = 56 BorderSpacing.Left = 6 Caption = 'Bac&kground' FocusControl = BackGroundColorBox ParentColor = False Visible = False end object ForeGroundUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrCenter Left = 6 Height = 17 Top = 47 Width = 74 BorderSpacing.Left = 6 Caption = 'Fo®round' OnChange = GeneralCheckBoxOnChange TabOrder = 0 end object ForegroundColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = ToolBar1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 86 Height = 22 Top = 44 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 1 end object BackGroundColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = ForegroundColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 86 Height = 22 Top = 69 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 3 end object BackGroundUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 72 Width = 74 BorderSpacing.Left = 6 Caption = 'Bac&kground' OnChange = GeneralCheckBoxOnChange TabOrder = 2 end object FrameColorBox: TColorBox AnchorSideLeft.Control = ColumnPosBevel AnchorSideTop.Control = BackGroundColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlElementAttributes AnchorSideRight.Side = asrBottom Left = 86 Height = 22 Top = 94 Width = 200 DefaultColorColor = clWhite Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbIncludeDefault, cbCustomColor, cbPrettyNames, cbCustomColors] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 Constraints.MaxWidth = 200 ItemHeight = 16 OnChange = ForegroundColorBoxChange TabOrder = 5 end object FrameColorUseDefaultCheckBox: TCheckBox AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = FrameColorBox AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 97 Width = 67 BorderSpacing.Left = 6 Caption = '&Text-mark' OnChange = GeneralCheckBoxOnChange TabOrder = 4 end object bvlAttributeSection: TDividerBevel Left = 0 Height = 17 Top = 0 Width = 680 Caption = 'Element Attributes' Align = alTop Font.Style = [fsBold] ParentFont = False end object pnlUnderline: TPanel AnchorSideLeft.Control = pnlElementAttributes AnchorSideTop.Control = FrameEdgesBox AnchorSideTop.Side = asrBottom Left = 6 Height = 36 Top = 143 Width = 125 AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 3 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 125 TabOrder = 6 object TextUnderlineRadioPanel: TPanel AnchorSideLeft.Control = TextUnderlineCheckBox AnchorSideTop.Control = TextUnderlineCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 19 Top = 17 Width = 125 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 19 ClientWidth = 125 TabOrder = 0 object TextUnderlineRadioOn: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioPanel AnchorSideTop.Control = TextUnderlineRadioPanel AnchorSideRight.Control = TextUnderlineRadioOff Left = 4 Height = 17 Top = 1 Width = 32 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextUnderlineRadioOff: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextUnderlineRadioOn AnchorSideRight.Control = TextUnderlineRadioInvert Left = 39 Height = 17 Top = 1 Width = 34 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end object TextUnderlineRadioInvert: TRadioButton Tag = 3 AnchorSideLeft.Control = TextUnderlineRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextUnderlineRadioPanel AnchorSideRight.Control = TextUnderlineRadioPanel AnchorSideRight.Side = asrBottom Left = 76 Height = 17 Top = 1 Width = 48 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end end object TextUnderlineCheckBox: TCheckBox AnchorSideLeft.Control = pnlUnderline AnchorSideTop.Control = pnlUnderline Left = 0 Height = 17 Top = 0 Width = 63 Caption = '&Underline' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object pnlBold: TPanel AnchorSideLeft.Control = pnlUnderline AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 137 Height = 36 Top = 143 Width = 125 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 125 TabOrder = 7 object TextBoldRadioPanel: TPanel AnchorSideLeft.Control = TextBoldCheckBox AnchorSideTop.Control = TextBoldCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 19 Top = 17 Width = 125 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 19 ClientWidth = 125 TabOrder = 0 object TextBoldRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioPanel AnchorSideRight.Side = asrBottom Left = 76 Height = 17 Top = 1 Width = 48 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextBoldRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioPanel AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioOff Left = 4 Height = 17 Top = 1 Width = 32 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextBoldRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextBoldRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextBoldRadioPanel AnchorSideRight.Control = TextBoldRadioInvert Left = 39 Height = 17 Top = 1 Width = 34 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextBoldCheckBox: TCheckBox AnchorSideLeft.Control = pnlBold AnchorSideTop.Control = pnlBold Left = 0 Height = 17 Top = 0 Width = 38 Caption = '&Bold' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object pnlItalic: TPanel AnchorSideLeft.Control = pnlBold AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 268 Height = 36 Top = 143 Width = 125 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 125 TabOrder = 8 object TextItalicRadioPanel: TPanel AnchorSideLeft.Control = TextItalicCheckBox AnchorSideTop.Control = TextItalicCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 19 Top = 17 Width = 125 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 19 ClientWidth = 125 TabOrder = 0 object TextItalicRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioPanel AnchorSideRight.Side = asrBottom Left = 76 Height = 17 Top = 1 Width = 48 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextItalicRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioPanel AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioOff Left = 4 Height = 17 Top = 1 Width = 32 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextItalicRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextItalicRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextItalicRadioPanel AnchorSideRight.Control = TextItalicRadioInvert Left = 39 Height = 17 Top = 1 Width = 34 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextItalicCheckBox: TCheckBox AnchorSideLeft.Control = pnlItalic AnchorSideTop.Control = pnlItalic Left = 0 Height = 17 Top = 0 Width = 41 Caption = '&Italic' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object FrameStyleBox: TComboBox AnchorSideLeft.Control = FrameEdgesBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = FrameEdgesBox Left = 189 Height = 21 Top = 119 Width = 97 BorderSpacing.Left = 6 ItemHeight = 15 Items.Strings = ( 'slsSolid' 'slsDashed' 'slsDotted' 'slsWaved' ) OnChange = ForegroundColorBoxChange OnDrawItem = FrameStyleBoxDrawItem ReadOnly = True Style = csOwnerDrawFixed TabOrder = 9 end object FrameEdgesBox: TComboBox AnchorSideLeft.Control = FrameColorBox AnchorSideTop.Control = FrameColorBox AnchorSideTop.Side = asrBottom Left = 86 Height = 21 Top = 119 Width = 97 BorderSpacing.Top = 3 ItemHeight = 15 Items.Strings = ( 'Around' 'Bottom' 'Left' ) OnChange = ForegroundColorBoxChange OnDrawItem = FrameEdgesBoxDrawItem ReadOnly = True Style = csOwnerDrawFixed TabOrder = 10 end object ColumnPosBevel: TPanel AnchorSideLeft.Control = ForeGroundUseDefaultCheckBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlElementAttributes AnchorSideBottom.Side = asrBottom Left = 86 Height = 1 Top = 179 Width = 50 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone Constraints.MinHeight = 1 Constraints.MinWidth = 50 TabOrder = 11 end object pnlStrikeOut: TPanel AnchorSideLeft.Control = pnlItalic AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlUnderline Left = 417 Height = 36 Top = 143 Width = 131 AutoSize = True BorderSpacing.Left = 6 BevelOuter = bvNone ClientHeight = 36 ClientWidth = 131 TabOrder = 12 object TextStrikeOutRadioPanel: TPanel AnchorSideLeft.Control = TextStrikeOutCheckBox AnchorSideTop.Control = TextStrikeOutCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 0 Height = 19 Top = 17 Width = 131 AutoSize = True BevelInner = bvLowered BevelOuter = bvNone ClientHeight = 19 ClientWidth = 131 TabOrder = 0 object TextStrikeOutRadioInvert: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioOff AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioPanel AnchorSideRight.Side = asrBottom Left = 80 Height = 17 Top = 1 Width = 50 BorderSpacing.Left = 3 Caption = 'In&vert' OnChange = TextStyleRadioOnChange TabOrder = 2 end object TextStrikeOutRadioOn: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioPanel AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioOff Left = 4 Height = 17 Top = 1 Width = 34 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&n' Checked = True OnChange = TextStyleRadioOnChange TabOrder = 0 TabStop = True end object TextStrikeOutRadioOff: TRadioButton Tag = 2 AnchorSideLeft.Control = TextStrikeOutRadioOn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TextStrikeOutRadioPanel AnchorSideRight.Control = TextStrikeOutRadioInvert Left = 41 Height = 17 Top = 1 Width = 36 BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'O&ff' OnChange = TextStyleRadioOnChange TabOrder = 1 end end object TextStrikeOutCheckBox: TCheckBox AnchorSideLeft.Control = pnlStrikeOut AnchorSideTop.Control = pnlStrikeOut Left = 0 Height = 17 Top = 0 Width = 68 Caption = '&Strike Out' OnChange = GeneralCheckBoxOnChange TabOrder = 1 end end object ToolBar1: TToolBar Left = 3 Height = 24 Top = 17 Width = 674 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 EdgeBorders = [ebBottom] ParentShowHint = False ShowCaptions = True ShowHint = True TabOrder = 13 object tbtnGlobal: TToolButton Tag = 1 Left = 1 Top = 0 AutoSize = True Caption = 'Use (and edit) &global scheme settings' Down = True Grouped = True OnClick = tbtnGlobalClick Style = tbsCheck end object tbtnLocal: TToolButton Tag = 1 Left = 198 Top = 0 AutoSize = True Caption = 'Use &local scheme settings' Grouped = True OnClick = tbtnGlobalClick Style = tbsCheck end object ToolButton3: TToolButton Left = 188 Top = 0 Width = 10 Style = tbsSeparator end end end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolseditor.lrt��������������������������������������������������0000644�0001750�0000144�00000000317�12650521504�021436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSEDITOR.GBINTERNALEDITOR.CAPTION=Internal editor options TFRMOPTIONSEDITOR.CHKSCROLLPASTENDLINE.CAPTION=Caret past end of line TFRMOPTIONSEDITOR.CHKSHOWSPECIALCHARS.CAPTION=Show special characters �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionshotkeys.pas������������������������������������������������������0000644�0001750�0000144�00000073537�12630374024�020556� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Hotkeys options page Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsHotkeys; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, StdCtrls, Grids, fOptionsFrame, fOptionsHotkeysEditHotkey, uHotkeyManager, DCBasicTypes; type { TfrmOptionsHotkeys } TfrmOptionsHotkeys = class(TOptionsEditor) btnDeleteHotKey: TButton; btnAddHotKey: TButton; btnEditHotkey: TButton; edtFilter: TEdit; lblCommands: TLabel; lbFilter: TLabel; lblSCFiles: TLabel; lblCategories: TLabel; lbSCFilesList: TComboBox; lbxCategories: TComboBox; pnlHotkeyButtons: TPanel; stgCommands: TStringGrid; stgHotkeys: TStringGrid; procedure btnAddHotKeyClick(Sender: TObject); procedure btnDeleteHotKeyClick(Sender: TObject); procedure btnEditHotkeyClick(Sender: TObject); procedure edtFilterChange(Sender: TObject); procedure lbSCFilesListChange(Sender: TObject); procedure lbxCategoriesChange(Sender: TObject); procedure stgCommandsDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); procedure stgCommandsResize(Sender: TObject); procedure stgCommandsSelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); procedure stgHotkeysDblClick(Sender: TObject); procedure stgHotkeysResize(Sender: TObject); procedure stgHotkeysSelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); private FEditForm: TfrmEditHotkey; FHotkeysAutoColWidths: array of Integer; FHotkeysAutoGridWidth: Integer; FHotkeysCategories: TStringList; // Untranslated FUpdatingShortcutsFiles: Boolean; procedure AutoSizeCommandsGrid; procedure AutoSizeHotkeysGrid; procedure ClearHotkeysGrid; procedure DeleteHotkeyFromGrid(aHotkey: String); function GetSelectedCommand: String; {en Refreshes all hotkeys from the Commands grid } procedure UpdateHotkeys(HMForm: THMForm); procedure UpdateHotkeysForCommand(HMForm: THMForm; RowNr: Integer); procedure FillSCFilesList; {en Return hotkeys assigned for command for the form and its controls. } procedure GetHotKeyList(HMForm: THMForm; Command: String; HotkeysList: THotkeys); {en Fill hotkey grid with all hotkeys assigned to a command } procedure FillHotkeyList(sCommand: String); {en Fill Commands grid with all commands available for the selected category. @param(Filter If not empty string then shows only commands containing Filter string.) } procedure FillCommandList(Filter: String); procedure FillCategoriesList; {en Retrieves untranslated form name. } function GetSelectedForm: String; procedure SelectHotkey(Hotkey: THotkey); procedure ShowEditHotkeyForm(EditMode: Boolean; aHotkeyRow: Integer); procedure ShowEditHotkeyForm(EditMode: Boolean; const AForm: String; const ACommand: String; const AHotkey: THotkey; const AControls: TDynamicStringArray); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure AddDeleteWithShiftHotkey(UseTrash: Boolean); class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses graphics, Forms, Controls, Dialogs, LazUTF8, LCLVersion, uFindEx, uGlobs, uGlobsPaths, uLng, uKeyboard, uFormCommands, DCStrUtils; const stgCmdCommandIndex = 0; stgCmdHotkeysIndex = 1; stgCmdDescriptionIndex = 2; type PHotkeyItem = ^THotkeyItem; THotkeyItem = record Hotkey: THotkey; Controls: TDynamicStringArray; end; procedure DestroyHotkeyItem(HotkeyItem: PHotkeyItem); begin if Assigned(HotkeyItem) then begin HotkeyItem^.Hotkey.Free; Dispose(HotkeyItem); end; end; // Converts hotkeys list to string. function HotkeysToString(const Hotkeys: THotkeys): String; var sCurrent: String; i: Integer; sList: TStringList; begin Result := ''; sList := TStringList.Create; try sList.CaseSensitive := True; for i := 0 to Hotkeys.Count - 1 do begin sCurrent := ShortcutsToText(Hotkeys[i].Shortcuts); if sList.IndexOf(sCurrent) < 0 then begin sList.Add(sCurrent); AddStrWithSep(Result, sCurrent, ';'); end; end; finally sList.Free; end; end; function CompareCategories(List: TStringList; Index1, Index2: Integer): Integer; begin {$IF LCL_FULLVERSION >= 093100} Result := UTF8CompareText(List.Strings[Index1], List.Strings[Index2]); {$ELSE} Result := WideCompareText(UTF8Decode(List.Strings[Index1]), UTF8Decode(List.Strings[Index2])); {$ENDIF} end; { TfrmOptionsHotkeys } procedure TfrmOptionsHotkeys.btnDeleteHotKeyClick(Sender: TObject); var i: Integer; sCommand: String; HMForm: THMForm; HMControl: THMControl; hotkey: THotkey; HotkeyItem: PHotkeyItem; begin if stgHotkeys.Row >= stgHotkeys.FixedRows then begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, stgHotkeys.Row]); sCommand := GetSelectedCommand; HMForm := HotMan.Forms.Find(GetSelectedForm); if Assigned(HMForm) then begin for i := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[i]; if Assigned(HMControl) then begin hotkey := HMControl.Hotkeys.FindByContents(HotkeyItem^.Hotkey); if Assigned(hotkey) then HMControl.Hotkeys.Remove(hotkey); end; end; hotkey := HMForm.Hotkeys.FindByContents(HotkeyItem^.Hotkey); if Assigned(hotkey) then HMForm.Hotkeys.Remove(hotkey); // refresh lists Self.UpdateHotkeys(HMForm); Self.FillHotkeyList(sCommand); end; end; end; procedure TfrmOptionsHotkeys.btnEditHotkeyClick(Sender: TObject); begin ShowEditHotkeyForm(True, stgHotkeys.Row); end; procedure TfrmOptionsHotkeys.edtFilterChange(Sender: TObject); {< filtering active commands list} begin if lbxCategories.ItemIndex=-1 then Exit; FillCommandList(edtFilter.Text); end; procedure TfrmOptionsHotkeys.lbSCFilesListChange(Sender: TObject); begin if not FUpdatingShortcutsFiles and (lbSCFilesList.ItemIndex >= 0) then begin HotMan.Load(gpCfgDir + lbSCFilesList.Items[lbSCFilesList.ItemIndex]); FillCategoriesList; end; end; procedure TfrmOptionsHotkeys.lbxCategoriesChange(Sender: TObject); begin if lbxCategories.ItemIndex=-1 then Exit; edtFilter.Clear; FillCommandList(''); end; procedure TfrmOptionsHotkeys.stgCommandsDrawCell(Sender: TObject; aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var OffsetY: integer; begin if aCol=1 then begin if aRow>0 then begin with Sender as TStringGrid do begin if Cells[aCol,aRow]<>'' then begin OffsetY:=(DefaultRowHeight-Canvas.TextHeight(Cells[aCol,aRow])) div 2; Canvas.Font.Color:=clRed; Canvas.TextOut(aRect.Left+3,aRect.Top+OffsetY,Cells[aCol,aRow]); end; end; end; end; end; procedure TfrmOptionsHotkeys.stgCommandsResize(Sender: TObject); begin AutoSizeCommandsGrid; end; procedure TfrmOptionsHotkeys.stgCommandsSelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); // < find hotkeys for command var sCommand: String; begin // clears all controls btnAddHotKey.Enabled := False; btnDeleteHotKey.Enabled := False; btnEditHotkey.Enabled := False; ClearHotkeysGrid; if aRow >= stgCommands.FixedRows then begin sCommand := stgCommands.Cells[stgCmdCommandIndex, aRow]; FillHotkeyList(sCommand); btnAddHotKey.Enabled := True; end; end; procedure TfrmOptionsHotkeys.stgHotkeysDblClick(Sender: TObject); begin ShowEditHotkeyForm(True, stgHotkeys.Row); end; procedure TfrmOptionsHotkeys.stgHotkeysResize(Sender: TObject); begin AutoSizeHotkeysGrid; end; procedure TfrmOptionsHotkeys.stgHotkeysSelectCell(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); var aEnabled: Boolean; begin aEnabled := aRow >= stgHotkeys.FixedRows; btnDeleteHotKey.Enabled := aEnabled; btnEditHotkey.Enabled := aEnabled; end; procedure TfrmOptionsHotkeys.AutoSizeCommandsGrid; begin stgCommands.AutoSizeColumns; end; procedure TfrmOptionsHotkeys.AutoSizeHotkeysGrid; var Diff: Integer = 0; i: Integer; begin with stgHotkeys do begin if Length(FHotkeysAutoColWidths) = ColCount then begin if ClientWidth > FHotkeysAutoGridWidth then Diff := (ClientWidth - FHotkeysAutoGridWidth) div 3; for i := 0 to ColCount - 1 do ColWidths[i] := FHotkeysAutoColWidths[i] + Diff; end; end; end; procedure TfrmOptionsHotkeys.btnAddHotKeyClick(Sender: TObject); begin ShowEditHotkeyForm(False, GetSelectedForm, GetSelectedCommand, nil, nil); end; procedure TfrmOptionsHotkeys.DeleteHotkeyFromGrid(aHotkey: String); var i: Integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do if stgHotkeys.Cells[0, i] = aHotkey then begin DestroyHotkeyItem(PHotkeyItem(stgHotkeys.Objects[0, i])); stgHotkeys.DeleteColRow(False, i); Break; end; end; procedure TfrmOptionsHotkeys.UpdateHotkeys(HMForm: THMForm); var i: Integer; begin for i := Self.stgCommands.FixedRows to Self.stgCommands.RowCount - 1 do Self.UpdateHotkeysForCommand(HMForm, i); end; procedure TfrmOptionsHotkeys.UpdateHotkeysForCommand(HMForm: THMForm; RowNr: Integer); var Hotkeys: THotkeys; begin Hotkeys := THotkeys.Create(False); try GetHotKeyList(HMForm, stgCommands.Cells[stgCmdCommandIndex,RowNr], Hotkeys); stgCommands.Cells[stgCmdHotkeysIndex, RowNr] := HotkeysToString(Hotkeys); finally Hotkeys.Free; end; end; procedure TfrmOptionsHotkeys.FillSCFilesList; var SR : TSearchRecEx; Res : Integer; begin FUpdatingShortcutsFiles := True; lbSCFilesList.Items.Clear; Res := FindFirstEx(gpCfgDir + '*.scf', faAnyFile, SR); while Res = 0 do begin Res:= lbSCFilesList.Items.Add(Sr.Name); if Sr.Name = gNameSCFile then lbSCFilesList.ItemIndex:= Res; Res := FindNextEx(SR); end; FindCloseEx(SR); FUpdatingShortcutsFiles := False; end; procedure TfrmOptionsHotkeys.GetHotKeyList(HMForm: THMForm; Command: String; HotkeysList: THotkeys); procedure AddHotkeys(hotkeys: THotkeys); var i: Integer; begin for i := 0 to hotkeys.Count - 1 do begin if hotkeys[i].Command = Command then HotkeysList.Add(hotkeys[i]); end; end; var i: Integer; begin AddHotkeys(HMForm.Hotkeys); for i := 0 to HMForm.Controls.Count - 1 do AddHotkeys(HMForm.Controls[i].Hotkeys); end; procedure TfrmOptionsHotkeys.ClearHotkeysGrid; var i: Integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do DestroyHotkeyItem(PHotkeyItem(stgHotkeys.Objects[0, i])); stgHotkeys.RowCount := stgHotkeys.FixedRows; end; procedure TfrmOptionsHotkeys.FillHotkeyList(sCommand: String); function SetObject(RowNr: Integer; AHotkey: THotkey): PHotkeyItem; var HotkeyItem: PHotkeyItem; begin New(HotkeyItem); stgHotkeys.Objects[0, RowNr] := TObject(HotkeyItem); HotkeyItem^.Hotkey := AHotkey.Clone; Result := HotkeyItem; end; var HMForm: THMForm; HMControl: THMControl; iHotKey, iControl, iGrid: Integer; hotkey: THotkey; found: Boolean; HotkeyItem: PHotkeyItem; begin ClearHotkeysGrid; if (sCommand = EmptyStr) or (lbxCategories.ItemIndex = -1) then Exit; HMForm := HotMan.Forms.Find(GetSelectedForm); if not Assigned(HMForm) then Exit; stgHotkeys.BeginUpdate; try // add hotkeys from form for iHotKey := 0 to HMForm.Hotkeys.Count - 1 do begin hotkey := HMForm.Hotkeys[iHotKey]; if hotkey.Command <> sCommand then continue; stgHotkeys.RowCount := stgHotkeys.RowCount + 1; stgHotkeys.Cells[0, stgHotkeys.RowCount - 1] := ShortcutsToText(hotkey.Shortcuts); stgHotkeys.Cells[1, stgHotkeys.RowCount - 1] := ArrayToString(hotkey.Params); SetObject(stgHotkeys.RowCount - 1, hotkey); end; // add hotkeys from controls for iControl := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[iControl]; for iHotKey := 0 to HMControl.Hotkeys.Count - 1 do begin hotkey := HMControl.Hotkeys[iHotKey]; if hotkey.Command <> sCommand then continue; // search for hotkey in grid and add control name to list found := false; for iGrid := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, iGrid]); if HotkeyItem^.Hotkey.SameShortcuts(hotkey.Shortcuts) and HotkeyItem^.Hotkey.SameParams(hotkey.Params) then begin stgHotkeys.Cells[2, iGrid] := stgHotkeys.Cells[2, iGrid] + HMControl.Name + ';'; HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, iGrid]); AddString(HotkeyItem^.Controls, HMControl.Name); found := true; break; end; { if } end; { for } // add new row for hotkey if not found then begin stgHotkeys.RowCount := stgHotkeys.RowCount + 1; stgHotkeys.Cells[0, stgHotkeys.RowCount - 1] := ShortcutsToText(hotkey.Shortcuts); stgHotkeys.Cells[1, stgHotkeys.RowCount - 1] := ArrayToString(hotkey.Params); stgHotkeys.Cells[2, stgHotkeys.RowCount - 1] := HMControl.Name + ';'; HotkeyItem := SetObject(stgHotkeys.RowCount - 1, hotkey); AddString(HotkeyItem^.Controls, HMControl.Name); end; { if } end; { for } end; { for } finally stgHotkeys.EndUpdate; end; stgHotkeys.AutoSizeColumns; SetLength(FHotkeysAutoColWidths, stgHotkeys.ColCount); for iHotKey := 0 to stgHotkeys.ColCount - 1 do FHotkeysAutoColWidths[iHotKey] := stgHotkeys.ColWidths[iHotKey]; FHotkeysAutoGridWidth := stgHotkeys.GridWidth; AutoSizeHotkeysGrid; end; procedure TfrmOptionsHotkeys.FillCommandList(Filter: String); //< fill stgCommands with commands and descriptions var slTmp: THotkeys; slAllCommands, slDescriptions, slHotKey: TStringList; slFiltered: TStringList = nil; lstr: String; i: Integer; HMForm: THMForm; sForm: String; CommandsFormClass: TComponentClass; CommandsForm: TComponent = nil; CommandsFormCreated: Boolean = False; CommandsIntf: IFormCommands; begin sForm := GetSelectedForm; CommandsFormClass := TFormCommands.GetCommandsForm(sForm); if not Assigned(CommandsFormClass) or not Supports(CommandsFormClass, IFormCommands) then begin stgCommands.Clean; Exit; end; // Find an instance of the form to retrieve action list (for descriptions). for i := 0 to Screen.CustomFormCount - 1 do if Screen.CustomForms[i].ClassType = CommandsFormClass then begin CommandsForm := Screen.CustomForms[i]; Break; end; // If not found create an instance temporarily. if not Assigned(CommandsForm) then begin CommandsForm := CommandsFormClass.Create(Application); CommandsFormCreated := True; end; CommandsIntf := CommandsForm as IFormCommands; slAllCommands := TStringList.Create; slDescriptions := TStringList.Create; slHotKey := TStringList.Create; slTmp := THotkeys.Create(False); HMForm := HotMan.Forms.Find(sForm); CommandsIntf.GetCommandsList(slAllCommands); if Filter <> '' then // if filter not empty begin slFiltered := TStringList.Create; lstr := UTF8LowerCase(Filter); for i := 0 to slAllCommands.Count - 1 do // for all command // if filtered text find in command or description then add to filteredlist if (UTF8Pos(lstr, UTF8LowerCase(slAllCommands.Strings[i])) <> 0) or (UTF8Pos(lstr, UTF8LowerCase(CommandsIntf.GetCommandCaption(slAllCommands.Strings[i], cctLong))) <> 0) then begin slFiltered.Add(slAllCommands[i]); end; end else // filter empty -> assign all commands to filtered list begin slFiltered := slAllCommands; slAllCommands := nil; end; // sort filtered items slFiltered.Sort; for i := 0 to slFiltered.Count - 1 do begin // for all filtered items do // get description for command and add to slDescriptions list slDescriptions.Add(CommandsIntf.GetCommandCaption(slFiltered.Strings[i], cctLong)); // getting list of assigned hot key if Assigned(HMForm) then begin slTmp.Clear; GetHotKeyList(HMForm, slFiltered.Strings[i], slTmp); slHotKey.Add(HotkeysToString(slTmp)); //add to hotkey list created string end else slHotKey.Add(''); end; // add to list NAMES of columns slFiltered.Insert(0, rsOptHotkeysCommand); slDescriptions.Insert(0, rsOptHotkeysDescription); slHotKey.Insert(0, rsOptHotkeysHotkeys); //set stringgrid rows count stgCommands.RowCount := slFiltered.Count; // copy to string grid created lists stgCommands.BeginUpdate; stgCommands.Clean; stgCommands.Cols[stgCmdCommandIndex].Assign(slFiltered); stgCommands.Cols[stgCmdHotkeysIndex].Assign(slHotKey); stgCommands.Cols[stgCmdDescriptionIndex].Assign(slDescriptions); stgCommands.EndUpdate; AutoSizeCommandsGrid; stgCommands.Row := 0; // needs for call select function for refresh hotkeylist slHotKey.Free; slAllCommands.Free; slDescriptions.Free; slFiltered.Free; slTmp.Free; if CommandsFormCreated then CommandsForm.Free; end; procedure TfrmOptionsHotkeys.FillCategoriesList; var i, MainIndex, Diff: Integer; Translated: TStringList; begin Translated := TStringList.Create; try TFormCommands.GetCategoriesList(FHotkeysCategories, Translated); if FHotkeysCategories.Count > 0 then begin // Remove Main category so that it can be put to the top after sorting the rest. MainIndex := FHotkeysCategories.IndexOf('Main'); if (MainIndex >= 0) and (Translated[MainIndex] = rsHotkeyCategoryMain) then begin FHotkeysCategories.Delete(MainIndex); Translated.Delete(MainIndex); Diff := 1; // Account for Main category being at the top. end else begin MainIndex := -1; Diff := 0; end; // Assign indexes to FHotkeysCategories (untranslated). for i := 0 to Translated.Count - 1 do Translated.Objects[i] := TObject(i + Diff); Translated.CustomSort(@CompareCategories); if MainIndex >= 0 then begin FHotkeysCategories.InsertObject(0, 'Main', TObject(0)); Translated.InsertObject(0, rsHotkeyCategoryMain, TObject(0)); end; lbxCategories.Items.Assign(Translated); lbxCategories.ItemIndex := 0; end else lbxCategories.Items.Clear; finally Translated.Free; end; end; function TfrmOptionsHotkeys.GetSelectedForm: String; var Index: Integer; begin Index := lbxCategories.ItemIndex; if (Index >= 0) and (Index < FHotkeysCategories.Count) then Result := FHotkeysCategories[PtrUInt(lbxCategories.Items.Objects[Index])] else Result := EmptyStr; end; class function TfrmOptionsHotkeys.GetIconIndex: Integer; begin Result := 5; end; function TfrmOptionsHotkeys.GetSelectedCommand: String; begin if stgCommands.Row >= stgCommands.FixedRows then Result := stgCommands.Cells[stgCmdCommandIndex, stgCommands.Row] else Result := EmptyStr; end; class function TfrmOptionsHotkeys.GetTitle: String; begin Result := rsOptionsEditorHotKeys; end; procedure TfrmOptionsHotkeys.Init; begin stgCommands.FocusRectVisible := False; stgHotkeys.FocusRectVisible := False; // Localize Hotkeys. // stgCommands is localized in FillCommandList. stgHotkeys.Columns.Items[0].Title.Caption := rsOptHotkeysHotkey; stgHotkeys.Columns.Items[1].Title.Caption := rsOptHotkeysParameters; end; procedure TfrmOptionsHotkeys.Load; begin FillSCFilesList; FillCategoriesList; lbxCategoriesChange(lbxCategories); end; function TfrmOptionsHotkeys.Save: TOptionsEditorSaveFlags; begin Result := []; // Save hotkeys file name. if lbSCFilesList.ItemIndex >= 0 then gNameSCFile := lbSCFilesList.Items[lbSCFilesList.ItemIndex]; HotMan.Save(gpCfgDir + gNameSCFile); end; procedure TfrmOptionsHotkeys.SelectHotkey(Hotkey: THotkey); var HotkeyItem: PHotkeyItem; i: Integer; begin for i := stgHotkeys.FixedRows to stgHotkeys.RowCount - 1 do begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, i]); if Assigned(HotkeyItem) and HotkeyItem^.Hotkey.SameAs(Hotkey) then begin stgHotkeys.Row := i; Break; end; end; end; procedure TfrmOptionsHotkeys.ShowEditHotkeyForm(EditMode: Boolean; aHotkeyRow: Integer); var HotkeyItem: PHotkeyItem; begin HotkeyItem := PHotkeyItem(stgHotkeys.Objects[0, aHotkeyRow]); if Assigned(HotkeyItem) then ShowEditHotkeyForm(EditMode, GetSelectedForm, HotkeyItem^.Hotkey.Command, HotkeyItem^.Hotkey, HotkeyItem^.Controls); end; procedure TfrmOptionsHotkeys.ShowEditHotkeyForm( EditMode: Boolean; const AForm: String; const ACommand: String; const AHotkey: THotkey; const AControls: TDynamicStringArray); var HMForm: THMForm; Hotkey: THotkey = nil; begin if AForm <> EmptyStr then begin if not Assigned(FEditForm) then FEditForm := TfrmEditHotkey.Create(Self); if FEditForm.Execute(EditMode, AForm, ACommand, AHotkey, AControls) then begin HMForm := HotMan.Forms.FindOrCreate(AForm); // refresh hotkey lists Self.UpdateHotkeys(HMForm); Self.FillHotkeyList(ACommand); Hotkey := FEditForm.CloneNewHotkey; try // Select the new shortcut in the hotkeys table. SelectHotkey(Hotkey); finally Hotkey.Free; end; end; end; end; constructor TfrmOptionsHotkeys.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FHotkeysCategories := TStringList.Create; end; destructor TfrmOptionsHotkeys.Destroy; begin inherited Destroy; FHotkeysCategories.Free; end; procedure TfrmOptionsHotkeys.AddDeleteWithShiftHotkey(UseTrash: Boolean); procedure ReverseShift(Hotkey: THotkey; out Shortcut: TShortCut; out TextShortcut: String); var ShiftState: TShiftState; begin Shortcut := TextToShortCutEx(Hotkey.Shortcuts[0]); ShiftState := ShortcutToShiftEx(Shortcut); if ssShift in ShiftState then ShiftState := ShiftState - [ssShift] else ShiftState := ShiftState + [ssShift]; ShortCut := KeyToShortCutEx(Shortcut, ShiftState); TextShortcut := ShortCutToTextEx(Shortcut); end; function ConfirmFix(Hotkey: THotkey; const Msg: String): Boolean; begin Result := QuestionDlg(rsOptHotkeysCannotSetShortcut, Msg, mtConfirmation, [mrYes, rsOptHotkeysFixParameter, 'isdefault', mrCancel], 0) = mrYes; end; function FixOverrides(Hotkey: THotkey; const OldTrashParam: String; NewTrashParam: Boolean; ShouldUseTrash: Boolean): Boolean; begin if Contains(Hotkey.Params, OldTrashParam) or NewTrashParam then begin Result := ConfirmFix(Hotkey, Format(rsOptHotkeysDeleteTrashCanOverrides, [Hotkey.Shortcuts[0]])); if Result then begin DeleteString(Hotkey.Params, OldTrashParam); if ShouldUseTrash then SetValue(Hotkey.Params, 'trashcan', 'setting') else SetValue(Hotkey.Params, 'trashcan', 'reversesetting'); end; end else Result := True; end; procedure FixReversedShortcut( Hotkey: THotkey; NonReversedHotkey: THotkey; const ParamsToDelete: array of String; const AllowedOldParam: String; const NewTrashParam: String; HasTrashCan: Boolean; TrashStr: String); var sDelete: String; begin if ContainsOneOf(Hotkey.Params, ParamsToDelete) or (HasTrashCan and (TrashStr <> NewTrashParam)) then if not ConfirmFix(Hotkey, Format(rsOptHotkeysDeleteTrashCanParameterExists, [Hotkey.Shortcuts[0], NonReversedHotkey.Shortcuts[0]])) then Exit; for sDelete in ParamsToDelete do DeleteString(Hotkey.Params, sDelete); if not Contains(Hotkey.Params, AllowedOldParam) then SetValue(Hotkey.Params, 'trashcan', NewTrashParam); end; procedure AddShiftShortcut(Hotkeys: THotkeys); var i, j: Integer; Shortcut: TShortCut; TextShortcut: String; NewParams: array of String; HasTrashCan, HasTrashBool, NormalTrashSetting: Boolean; TrashStr: String; TrashBoolValue: Boolean; CheckedShortcuts: TDynamicStringArray; ReversedHotkey: THotkey; CountBeforeAdded: Integer; SetShortcut: Boolean; begin SetLength(CheckedShortcuts, 0); CountBeforeAdded := Hotkeys.Count; for i := 0 to CountBeforeAdded - 1 do begin if (Hotkeys[i].Command = 'cm_Delete') and (Length(Hotkeys[i].Shortcuts) > 0) then begin if Length(Hotkeys[i].Shortcuts) > 1 then begin MessageDlg(rsOptHotkeysCannotSetShortcut, Format(rsOptHotkeysShortcutForDeleteIsSequence, [ShortcutsToText(Hotkeys[i].Shortcuts)]), mtWarning, [mbOK], 0); Continue; end; if not Contains(CheckedShortcuts, Hotkeys[i].Shortcuts[0]) then begin ReversedHotkey := nil; SetShortcut := True; ReverseShift(Hotkeys[i], Shortcut, TextShortcut); AddString(CheckedShortcuts, TextShortcut); // Check if shortcut with reversed shift already exists. for j := 0 to CountBeforeAdded - 1 do begin if ArrBegins(Hotkeys[j].Shortcuts, [TextShortcut], False) then begin if Hotkeys[j].Command <> Hotkeys[i].Command then begin if QuestionDlg(rsOptHotkeysCannotSetShortcut, Format(rsOptHotkeysShortcutForDeleteAlreadyAssigned, [Hotkeys[i].Shortcuts[0], TextShortcut, Hotkeys[j].Command]), mtConfirmation, [mrYes, rsOptHotkeysChangeShortcut, 'isdefault', mrCancel], 0) = mrYes then begin Hotkeys[j].Command := Hotkeys[i].Command; end else SetShortcut := False; end; ReversedHotkey := Hotkeys[j]; Break; end; end; if not SetShortcut then Continue; // Fix parameters of original hotkey if needed. HasTrashCan := GetParamValue(Hotkeys[i].Params, 'trashcan', TrashStr); HasTrashBool := HasTrashCan and GetBoolValue(TrashStr, TrashBoolValue); if not FixOverrides(Hotkeys[i], 'recycle', HasTrashBool and TrashBoolValue, UseTrash) then Continue; if not FixOverrides(Hotkeys[i], 'norecycle', HasTrashBool and not TrashBoolValue, not UseTrash) then Continue; // Reverse trash setting for reversed hotkey. NewParams := Copy(Hotkeys[i].Params); HasTrashCan := GetParamValue(NewParams, 'trashcan', TrashStr); // Could have been added above so check again if Contains(NewParams, 'recyclesettingrev') then begin DeleteString(NewParams, 'recyclesettingrev'); NormalTrashSetting := True; end else if Contains(NewParams, 'recyclesetting') then begin DeleteString(NewParams, 'recyclesetting'); NormalTrashSetting := False; end else if HasTrashCan and (TrashStr = 'reversesetting') then NormalTrashSetting := True else NormalTrashSetting := False; if Assigned(ReversedHotkey) then begin HasTrashCan := GetParamValue(ReversedHotkey.Params, 'trashcan', TrashStr); if NormalTrashSetting then begin FixReversedShortcut(ReversedHotkey, Hotkeys[i], ['recyclesettingrev', 'recycle', 'norecycle'], 'recyclesetting', 'setting', HasTrashCan, TrashStr); end else begin FixReversedShortcut(ReversedHotkey, Hotkeys[i], ['recyclesetting', 'recycle', 'norecycle'], 'recyclesettingrev', 'reversesetting', HasTrashCan, TrashStr); end; end else if QuestionDlg(rsOptHotkeysSetDeleteShortcut, Format(rsOptHotkeysAddDeleteShortcutLong, [TextShortcut]), mtConfirmation, [mrYes, rsOptHotkeysAddShortcutButton, 'isdefault', mrCancel], 0) = mrYes then begin if NormalTrashSetting then TrashStr := 'setting' else TrashStr := 'reversesetting'; SetValue(NewParams, 'trashcan', TrashStr); Hotkeys.Add([TextShortcut], NewParams, Hotkeys[i].Command); end; end; end; end; end; var HMForm: THMForm; I: Integer; begin HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin AddShiftShortcut(HMForm.Hotkeys); for I := 0 to HMForm.Controls.Count - 1 do AddShiftShortcut(HMForm.Controls[i].Hotkeys); // Refresh hotkeys list. if GetSelectedCommand = 'cm_Delete' then Self.FillHotkeyList('cm_Delete'); end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsbehavior.lrt�����������������������������������������������������0000644�0001750�0000144�00000000776�12020403374�020672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION=A&llow only one copy of DC at a time TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION=Mo&ve icon to system tray when minimized TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION=Al&ways show tray icon TFRMOPTIONSBEHAVIOR.LBLDRIVESBLACKLIST.CAPTION=Drives &blacklist TFRMOPTIONSBEHAVIOR.EDTDRIVESBLACKLIST.HINT=Here you can enter one or more drives or mount points, separated by ";". TFRMOPTIONSBEHAVIOR.CBBLACKLISTUNMOUNTEDDEVICES.CAPTION=Automatically &hide unmounted devices ��doublecmd-0.7.1/src/frames/foptionstoolsdiffer.pas��������������������������������������������������0000644�0001750�0000144�00000004426�12460221267�021400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tools options page for the differ tool Copyright (C) 2006-2014 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsToolsDiffer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, Spin, ExtCtrls, ColorBox, Dialogs, EditBtn, Buttons, Menus, Types, fOptionsFrame, fOptionsToolBase; type { TfrmOptionsDiffer } TfrmOptionsDiffer = class(TfrmOptionsToolBase) rgResultingFramePositionAfterCompare: TRadioGroup; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uDCUtils, uGlobs, uLng; { TfrmOptionsDiffer } procedure TfrmOptionsDiffer.Init; begin ExternalTool := etDiffer; inherited Init; ParseLineToList(rsOptDifferFramePosition, rgResultingFramePositionAfterCompare.Items); end; procedure TfrmOptionsDiffer.Load; begin inherited; rgResultingFramePositionAfterCompare.ItemIndex := Integer(gResultingFramePositionAfterCompare); end; function TfrmOptionsDiffer.Save: TOptionsEditorSaveFlags; begin Result := inherited; gResultingFramePositionAfterCompare := TResultingFramePositionAfterCompare(rgResultingFramePositionAfterCompare.ItemIndex); end; class function TfrmOptionsDiffer.GetIconIndex: Integer; begin Result := 25; end; class function TfrmOptionsDiffer.GetTitle: String; begin Result := rsToolDiffer; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscustomcolumns.lrt������������������������������������������������0000644�0001750�0000144�00000014013�12534542254�022006� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION=Con&figure columns view: TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT=General TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION=Save TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION=Rename TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION=Save as TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION=&Delete TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION=New TFRMOPTIONSCUSTOMCOLUMNS.CHKUSECUSTOMVIEW.CAPTION=Use custom font and color for this view TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION=Cursor border TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.CBUSEFRAMECURSOR.CAPTION=Use Frame Cursor TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.CAPTION=Go to set default TFRMOPTIONSCUSTOMCOLUMNS.BTNPREV.CAPTION=Previous TFRMOPTIONSCUSTOMCOLUMNS.BTNNEXT.CAPTION=Next TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION=Font: TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION=... TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION=Size: TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION=Allow Overcolor TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION=Text Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION=BackGround: TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION=Background 2: TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION=Mark Color: TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.LBLINACTIVEMARKCOLOR.CAPTION=Inactive Mark Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLINACTIVECURSORCOLOR.CAPTION=Inactive Cursor Color: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION=Cursor Text: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION=Cursor Color: TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION=>> TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.CBUSEINVERTEDSELECTION.CAPTION=Use Inverted Selection TFRMOPTIONSCUSTOMCOLUMNS.CBUSEINACTIVESELCOLOR.CAPTION=Use Inactive Selection Color TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT=Apply modification to all columns TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION=All TFRMOPTIONSCUSTOMCOLUMNS.LBLWORKINGCOLUMN.CAPTION=Settings for column: TFRMOPTIONSCUSTOMCOLUMNS.LBLCURRENTCOLUMN.CAPTION=[Current Column Name] TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT=Reset to default TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION=R TFRMOPTIONSCUSTOMCOLUMNS.CBAPPLYCHANGEFORALLCOLUMNS.CAPTION=When clicking to change something, change for all columns TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION=Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings. TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION=Add column ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsmisc.lrt���������������������������������������������������������0000644�0001750�0000144�00000002204�12454026023�020015� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION=Show &warning messages ("OK" button only) TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION=&Save thumbnails in cache TFRMOPTIONSMISC.LBLTHUMBSIZE.CAPTION=&Thumbnail size: TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION=Thumbnails TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION=X TFRMOPTIONSMISC.LBLTHUMBPIXELS.CAPTION=pixels TFRMOPTIONSMISC.BTNTHUMBCOMPACTCACHE.CAPTION=&Remove thumbnails for no longer existing files TFRMOPTIONSMISC.CHKGOTOROOT.CAPTION=Always &go to the root of a drive when changing drives TFRMOPTIONSMISC.GBTCEXPORTIMPORT.CAPTION=Regarding TC export/import: TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT=Some functions to select appropriate path TFRMOPTIONSMISC.LBLTCEXECUTABLE.CAPTION=TC executable: TFRMOPTIONSMISC.LBLTCCONFIG.CAPTION=Configuration file: TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT=Some functions to select appropriate path TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT=View log file content TFRMOPTIONSMISC.LBLTCPATHFORTOOL.CAPTION=Toolbar output path: TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION=>> TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT=Some functions to select appropriate path ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstools.lrt��������������������������������������������������������0000644�0001750�0000144�00000000705�12020403374�020223� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION=Viewer Book Mode TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION=&Background color in book viewer TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION=&Number of columns in book viewer TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION=Example TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION=>> TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION=>> TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION=&Font color in book viewer �����������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsquicksearchfilter.lrt��������������������������������������������0000644�0001750�0000144�00000000743�11740433676�022615� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION=Exact name match TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION=&Beginning (name must start with first typed character) TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION=En&ding (last character before a typed dot . must match) TFRMOPTIONSQUICKSEARCHFILTER.RGPSEARCHITEMS.CAPTION=Search for these items TFRMOPTIONSQUICKSEARCHFILTER.RGPSEARCHCASE.CAPTION=Search case TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION=Options �����������������������������doublecmd-0.7.1/src/frames/foptionsignorelist.lfm���������������������������������������������������0000644�0001750�0000144�00000013663�12365151656�021245� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsIgnoreList: TfrmOptionsIgnoreList Height = 325 Width = 644 ClientHeight = 325 ClientWidth = 644 DesignTop = 27 object lblSaveIn: TLabel[0] Tag = 304 AnchorSideLeft.Control = memIgnoreList AnchorSideTop.Control = fneSaveIn AnchorSideTop.Side = asrCenter Left = 10 Height = 13 Top = 258 Width = 39 Caption = '&Save in:' FocusControl = fneSaveIn ParentColor = False end object chkIgnoreEnable: TCheckBox[1] Tag = 301 AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 17 Top = 8 Width = 624 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 8 BorderSpacing.Right = 10 Caption = '&Ignore (don''t show) the following files and folders:' OnChange = chkIgnoreEnableChange TabOrder = 0 end object memIgnoreList: TMemo[2] AnchorSideLeft.Control = chkIgnoreEnable AnchorSideTop.Control = chkIgnoreEnable AnchorSideTop.Side = asrBottom AnchorSideRight.Control = chkIgnoreEnable AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneSaveIn Left = 10 Height = 213 Top = 31 Width = 624 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Bottom = 10 Lines.Strings = ( '' ) ParentFont = False ScrollBars = ssBoth TabOrder = 1 end object btnAddSel: TButton[3] Tag = 303 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = memIgnoreList AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 512 Height = 30 Top = 285 Width = 122 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 10 Caption = 'A&dd selected names' Constraints.MinHeight = 30 OnClick = btnAddSelClick TabOrder = 4 end object btnAddSelWithPath: TButton[4] Tag = 302 AnchorSideLeft.Control = memIgnoreList AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 10 Height = 30 Top = 285 Width = 187 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Bottom = 10 Caption = 'Add selected names with &full path' Constraints.MinHeight = 30 OnClick = btnAddSelWithPathClick TabOrder = 3 end object fneSaveIn: TFileNameEdit[5] AnchorSideLeft.Control = lblSaveIn AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeSaveIn AnchorSideBottom.Control = btnAddSel Left = 57 Height = 21 Top = 254 Width = 524 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Bottom = 10 MaxLength = 0 TabOrder = 2 end object btnRelativeSaveIn: TSpeedButton[6] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneSaveIn AnchorSideRight.Control = memIgnoreList AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = fneSaveIn AnchorSideBottom.Side = asrBottom Left = 607 Height = 23 Hint = 'Some functions to select appropriate path' Top = 252 Width = 27 Anchors = [akTop, akRight, akBottom] BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnRelativeSaveInClick end object pmPathHelper: TPopupMenu[7] left = 456 top = 280 end end �����������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstabsextra.lfm����������������������������������������������������0000644�0001750�0000144�00000020047�12656270711�021052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsTabsExtra: TfrmOptionsTabsExtra Height = 418 Width = 720 AutoSize = True ClientHeight = 418 ClientWidth = 720 DesignLeft = 140 DesignTop = 288 object gbTabs: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 344 Top = 6 Width = 708 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 Caption = 'Folder tabs headers extra' ChildSizing.TopBottomSpacing = 6 ClientHeight = 324 ClientWidth = 704 TabOrder = 0 object cbUseFavoriteTabsExtraOptions: TCheckBox AnchorSideLeft.Control = gbTabs AnchorSideTop.Control = gbTabs Left = 12 Height = 19 Top = 6 Width = 394 BorderSpacing.Left = 12 BorderSpacing.Top = 6 Caption = 'Enable Favorite Tabs extra options (select target side when restore, etc.)' OnChange = cbUseFavoriteTabsExtraOptionsChange TabOrder = 0 end object gbDefaultTabSavedRestoration: TGroupBox AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Side = asrBottom Left = 12 Height = 113 Top = 35 Width = 337 AutoSize = True BorderSpacing.Top = 10 Caption = 'Default extra settings when saving new Favorite Tabs:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 93 ClientWidth = 333 TabOrder = 1 object cbDefaultTargetPanelLeftSaved: TComboBox AnchorSideTop.Control = gbDefaultTabSavedRestoration AnchorSideRight.Control = gbDefaultTabSavedRestoration AnchorSideRight.Side = asrBottom Left = 227 Height = 23 Top = 6 Width = 100 Anchors = [akTop, akRight] ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 0 Text = 'Left' end object lblDefaultTargetPanelLeftSaved: TLabel AnchorSideTop.Control = cbDefaultTargetPanelLeftSaved AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultTargetPanelLeftSaved Left = 29 Height = 15 Top = 10 Width = 194 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on left will be restored to:' ParentColor = False end object cbDefaultTargetPanelRightSaved: TComboBox AnchorSideTop.Control = cbDefaultTargetPanelLeftSaved AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDefaultTargetPanelLeftSaved AnchorSideRight.Side = asrBottom Left = 227 Height = 23 Top = 35 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 1 Text = 'Right' end object lblDefaultTargetPanelRightSaved: TLabel AnchorSideTop.Control = cbDefaultTargetPanelRightSaved AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultTargetPanelRightSaved Left = 21 Height = 15 Top = 39 Width = 202 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on right will be restored to:' ParentColor = False end object cbDefaultExistingTabsToKeep: TComboBox AnchorSideTop.Control = cbDefaultTargetPanelRightSaved AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDefaultTargetPanelRightSaved AnchorSideRight.Side = asrBottom Left = 227 Height = 23 Top = 64 Width = 100 Anchors = [akTop, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 5 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) Style = csDropDownList TabOrder = 2 Text = 'None' end object lblDefaultExistingTabsToKeep: TLabel AnchorSideTop.Control = cbDefaultExistingTabsToKeep AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbDefaultExistingTabsToKeep Left = 6 Height = 15 Top = 68 Width = 217 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 4 Caption = 'When restoring tab, existing tabs to keep:' ParentColor = False end end object cbGoToConfigAfterSave: TCheckBox AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = rgWhereToAdd AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 12 Height = 19 Top = 280 Width = 331 BorderSpacing.Top = 10 Caption = 'Goto to Favorite Tabs Configuration after saving a new one' TabOrder = 2 end object cbGoToConfigAfterReSave: TCheckBox AnchorSideLeft.Control = gbDefaultTabSavedRestoration AnchorSideTop.Control = cbGoToConfigAfterSave AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 12 Height = 19 Top = 299 Width = 284 Caption = 'Goto to Favorite Tabs Configuration after resaving' TabOrder = 3 end object rgWhereToAdd: TRadioGroup AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbDefaultSaveDirHistory AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDefaultTabSavedRestoration AnchorSideRight.Side = asrBottom Left = 12 Height = 89 Top = 181 Width = 337 Anchors = [akTop, akLeft, akRight] AutoFill = True BorderSpacing.Top = 4 Caption = 'Default position in menu when saving a new Favorite Tabs:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 69 ClientWidth = 333 Constraints.MinWidth = 200 Items.Strings = ( 'Add at beginning' 'Add at the end' 'Alphabetical order' ) TabOrder = 4 end object cbDefaultSaveDirHistory: TComboBox AnchorSideLeft.Control = lblFavoriteTabsSaveDirHistory AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbDefaultTabSavedRestoration AnchorSideTop.Side = asrBottom Left = 236 Height = 23 Top = 154 Width = 100 BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'No' 'Yes' ) Style = csDropDownList TabOrder = 5 Text = 'No' end object lblFavoriteTabsSaveDirHistory: TLabel AnchorSideLeft.Control = cbUseFavoriteTabsExtraOptions AnchorSideTop.Control = cbDefaultSaveDirHistory AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 158 Width = 220 BorderSpacing.Top = 6 BorderSpacing.Right = 4 Caption = 'Keep saving dir history with Favorite Tabs:' ParentColor = False end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfavoritetabs.lfm�������������������������������������������������0000644�0001750�0000144�00000045607�12660674103�021555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFavoriteTabs: TfrmOptionsFavoriteTabs Height = 604 Width = 584 AutoSize = True ClientHeight = 604 ClientWidth = 584 Constraints.MinHeight = 400 Constraints.MinWidth = 500 OnEnter = FrameEnter ParentShowHint = False PopupMenu = pmTreeView ShowHint = True DesignLeft = 190 DesignTop = 277 object gbFavoriteTabs: TGroupBox[0] Left = 6 Height = 592 Top = 6 Width = 572 Align = alClient AutoSize = True BorderSpacing.Around = 6 Caption = 'Favorite Tabs list (reorder by drag && drop)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 572 ClientWidth = 568 Color = clForm ParentColor = False TabOrder = 0 object pnlClient: TPanel AnchorSideLeft.Control = gbFavoriteTabs AnchorSideTop.Control = gbFavoriteTabs AnchorSideRight.Control = gbFavoriteTabs AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gpSavedTabsRestorationAction Left = 6 Height = 418 Top = 6 Width = 556 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 418 ClientWidth = 556 TabOrder = 0 object tvFavoriteTabs: TTreeView AnchorSideLeft.Control = pnlClient AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlButtons AnchorSideBottom.Control = pnlClient AnchorSideBottom.Side = asrBottom Left = 0 Height = 418 Top = 0 Width = 401 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 DefaultItemHeight = 18 DragMode = dmAutomatic HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentColor = True PopupMenu = pmTreeView ReadOnly = True ScrollBars = ssAutoBoth SelectionColor = clBtnShadow TabOrder = 0 ToolTips = False OnDblClick = btnRenameClick OnDragDrop = tvFavoriteTabsDragDrop OnDragOver = tvFavoriteTabsDragOver OnEnter = tvFavoriteTabsEnter OnExit = tvFavoriteTabsExit OnSelectionChanged = tvFavoriteTabsSelectionChanged Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot] end object pnlButtons: TPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 407 Height = 249 Top = 0 Width = 149 Anchors = [akTop, akRight] AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 249 ClientWidth = 149 Color = clForm ParentColor = False TabOrder = 1 object btnInsert: TBitBtn Tag = 1 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnRename AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 37 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Insert...' OnClick = btnActionClick TabOrder = 1 end object btnDelete: TBitBtn Tag = 3 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 99 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Delete...' OnClick = btnActionClick TabOrder = 3 end object btnImportExport: TBitBtn Tag = 7 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnSort AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 161 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Import/Export' OnClick = btnActionClick TabOrder = 5 end object btnAdd: TBitBtn Tag = 2 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnInsert AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 68 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Add...' OnClick = btnActionClick TabOrder = 2 end object btnSort: TBitBtn Tag = 8 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 130 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Sort...' OnClick = btnActionClick TabOrder = 4 end object btnRename: TBitBtn Tag = 1 AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 6 Height = 25 Top = 6 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Rename' OnClick = btnRenameClick TabOrder = 0 end object gbFavoriteTabsOtherOptions: TGroupBox AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = btnImportExport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 51 Top = 192 Width = 137 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Other options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 31 ClientWidth = 133 TabOrder = 6 object cbFullExpandTree: TCheckBox AnchorSideLeft.Control = gbFavoriteTabsOtherOptions AnchorSideTop.Control = gbFavoriteTabsOtherOptions Left = 6 Height = 19 Top = 6 Width = 121 Caption = 'Always expand tree' OnChange = cbFullExpandTreeChange TabOrder = 0 end end end end object gpSavedTabsRestorationAction: TGroupBox AnchorSideLeft.Control = gbFavoriteTabs AnchorSideRight.Control = gbFavoriteTabs AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFavoriteTabs AnchorSideBottom.Side = asrBottom Left = 6 Height = 142 Top = 424 Width = 556 Anchors = [akLeft, akRight, akBottom] AutoSize = True Caption = 'What to restore where for the selected entry:' ChildSizing.TopBottomSpacing = 6 ClientHeight = 122 ClientWidth = 552 TabOrder = 1 object lblTargetPanelLeftSavedTabs: TLabel AnchorSideTop.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTargetPanelRightSavedTabs AnchorSideRight.Side = asrBottom Left = 159 Height = 15 Top = 10 Width = 187 Anchors = [akTop, akRight] Caption = 'Tabs saved on left to be restored to:' ParentColor = False end object lblTargetPanelRightSavedTabs: TLabel AnchorSideTop.Control = cbTargetPanelRightSavedTabs AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbTargetPanelRightSavedTabs Left = 151 Height = 15 Top = 39 Width = 195 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Tabs saved on right to be restored to:' ParentColor = False end object lblExistingTabsToKeep: TLabel AnchorSideTop.Control = cbExistingTabsToKeep AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExistingTabsToKeep Left = 236 Height = 15 Top = 68 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Existing tabs to keep:' ParentColor = False end object cbExistingTabsToKeep: TComboBox Tag = 3 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbTargetPanelRightSavedTabs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 64 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 5 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 2 Text = 'None' end object cbTargetPanelRightSavedTabs: TComboBox Tag = 2 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 35 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 1 Text = 'Right' end object cbTargetPanelLeftSavedTabs: TComboBox Tag = 1 AnchorSideLeft.Control = gpSavedTabsRestorationAction AnchorSideTop.Control = gpSavedTabsRestorationAction AnchorSideRight.Control = gpSavedTabsRestorationAction AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 6 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 350 BorderSpacing.Top = 6 BorderSpacing.Right = 10 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Left' 'Right' 'Active' 'Inactive' 'Both' 'None' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 0 Text = 'Left' end object cbSaveDirHistory: TComboBox Tag = 4 AnchorSideLeft.Control = cbTargetPanelLeftSavedTabs AnchorSideTop.Control = cbExistingTabsToKeep AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTargetPanelLeftSavedTabs AnchorSideRight.Side = asrBottom Left = 350 Height = 23 Top = 93 Width = 192 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'No' 'Yes' ) OnChange = cbTabsConfigChange Style = csDropDownList TabOrder = 3 Text = 'No' end object lblSaveDirHistory: TLabel AnchorSideTop.Control = cbSaveDirHistory AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExistingTabsToKeep Left = 263 Height = 15 Top = 97 Width = 83 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'Save dir history:' ParentColor = False end end end object pmFavoriteTabsTestMenu: TPopupMenu[1] left = 96 top = 336 object miFavoriteTabsTestMenu: TMenuItem Caption = 'FavoriteTabsTestMenu' end end object pmTreeView: TPopupMenu[2] left = 96 top = 272 object miRename: TMenuItem Caption = 'Rename' ShortCut = 117 OnClick = btnRenameClick end object MenuItem1: TMenuItem Caption = '-' end object miInsertSeparator: TMenuItem Tag = 17 Caption = 'Insert separator' ShortCut = 8313 OnClick = miInsertAddFavoriteTabsClick end object miAddSeparator2: TMenuItem Tag = 33 Caption = 'Add separator' ShortCut = 121 OnClick = miInsertAddFavoriteTabsClick end object MenuItem2: TMenuItem Caption = '-' end object miInsertSubMenu: TMenuItem Tag = 18 Caption = 'Insert sub-menu' ShortCut = 8310 OnClick = miInsertAddFavoriteTabsClick end object miAddSubmenu2: TMenuItem Tag = 34 Caption = 'Add sub-menu' ShortCut = 118 OnClick = miInsertAddFavoriteTabsClick end object miSeparator7: TMenuItem Caption = '-' end object miDeleteSelectedEntry2: TMenuItem Tag = 1 Caption = 'Delete selected item' ShortCut = 46 OnClick = miDeleteSelectedEntryClick end object miSeparator8: TMenuItem Caption = '-' end object miSortSingleGroup2: TMenuItem Tag = 1 Caption = 'Sort single group of item(s) only' ShortCut = 113 OnClick = miSortFavoriteTabsClick end object miSeparator9: TMenuItem Caption = '-' end object miCutSelection: TMenuItem Caption = 'Cut' ShortCut = 16472 OnClick = miCutSelectionClick end object miPasteSelection: TMenuItem Caption = 'Paste' Enabled = False ShortCut = 16470 OnClick = miPasteSelectionClick end object miSeparator1: TMenuItem Caption = '-' end object miImportLegacyTabFilesAtPos1: TMenuItem Tag = 1 Caption = 'Import legacy .tab file(s) at selected position' OnClick = miImportLegacyTabFilesClick end end object pmInsertAddToFavoriteTabs: TPopupMenu[3] left = 96 top = 40 object miAddSeparator: TMenuItem Tag = 1 Caption = 'a separator' ShortCut = 121 OnClick = miInsertAddFavoriteTabsClick end object miAddSubmenu: TMenuItem Tag = 2 Caption = 'sub-menu' ShortCut = 118 OnClick = miInsertAddFavoriteTabsClick end end object pmDeleteFavoriteTabs: TPopupMenu[4] left = 96 top = 96 object miDeleteSelectedEntry: TMenuItem Tag = 1 Caption = 'selected item' ShortCut = 119 OnClick = miDeleteSelectedEntryClick end object miSeparator2: TMenuItem Caption = '-' end object miDeleteJustSubMenu: TMenuItem Tag = 2 Caption = 'just sub-menu but keep elements' OnClick = miDeleteSelectedEntryClick end object miDeleteCompleteSubMenu: TMenuItem Tag = 3 Caption = 'sub-menu and all its elements' OnClick = miDeleteSelectedEntryClick end object miSeparator3: TMenuItem Caption = '-' end object miDeleteAllFavoriteTabs: TMenuItem Caption = 'delete all!' OnClick = miDeleteAllFavoriteTabsClick end end object pmImportExport: TPopupMenu[5] left = 96 top = 216 object miImportLegacyTabFilesAtPos: TMenuItem Tag = 1 Caption = 'Import legacy .tab file(s) at selected position' OnClick = miImportLegacyTabFilesClick end object miImportLegacyTabFilesAccSetting: TMenuItem Caption = 'Import legacy .tab file(s) according to default setting' OnClick = miImportLegacyTabFilesClick end object miImportLegacyTabFilesInSubAtPos: TMenuItem Tag = 2 Caption = 'Import legacy .tab file(s) at selected position in a sub menu' OnClick = miImportLegacyTabFilesClick end object miExportToLegacyTabsFile: TMenuItem Caption = 'Export selection to legacy .tab file(s)' OnClick = miExportToLegacyTabsFileClick end object miSeparator10: TMenuItem Caption = '-' end object miTestResultingFavoriteTabsMenu: TMenuItem Caption = 'Test resulting menu' OnClick = miTestResultingFavoriteTabsMenuClick end object miSeparator11: TMenuItem Caption = '-' end object miOpenAllBranches: TMenuItem Caption = 'Open all branches' OnClick = miOpenAllBranchesClick end object miCollapseAll: TMenuItem Caption = 'Collapse all' OnClick = miCollapseAllClick end end object pmSortFavoriteTabsList: TPopupMenu[6] left = 96 top = 152 object miSortSingleGroup: TMenuItem Tag = 1 Caption = '...single group of item(s) only' OnClick = miSortFavoriteTabsClick end object miCurrentLevelOfItemOnly: TMenuItem Tag = 2 Caption = '...current level of item(s) selected only' OnClick = miSortFavoriteTabsClick end object miSortSingleSubMenu: TMenuItem Tag = 3 Caption = '...content of submenu(s) selected, no sublevel' OnClick = miSortFavoriteTabsClick end object miSortSubMenuAndSubLevel: TMenuItem Tag = 4 Caption = '...content of submenu(s) selected and all sublevels' OnClick = miSortFavoriteTabsClick end object miSortEverything: TMenuItem Tag = 5 Caption = '...everything, from A to Z!' OnClick = miSortFavoriteTabsClick end end object OpenDialog: TOpenDialog[7] Filter = 'Legacy DC .tab files|*.tab|Any files|*.*' FilterIndex = 0 Options = [ofAllowMultiSelect, ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 96 top = 392 end end �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsmouse.pas��������������������������������������������������������0000644�0001750�0000144�00000005757�11740427612�020222� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Mouse options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsMouse; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, Spin; type { TfrmOptionsMouse } TfrmOptionsMouse = class(TOptionsEditor) cbMouseMode: TComboBox; cbSelectionByMouse: TCheckBox; gbScrolling: TGroupBox; gbSelection: TGroupBox; lblMouseMode: TLabel; rbScrollLineByLine: TRadioButton; rbScrollLineByLineCursor: TRadioButton; rbScrollPageByPage: TRadioButton; seWheelScrollLines: TSpinEdit; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; { TfrmOptionsMouse } procedure TfrmOptionsMouse.Init; begin ParseLineToList(rsOptMouseSelectionButton, cbMouseMode.Items); end; procedure TfrmOptionsMouse.Load; begin cbSelectionByMouse.Checked:=gMouseSelectionEnabled; cbMouseMode.ItemIndex := gMouseSelectionButton; seWheelScrollLines.Value:= gWheelScrollLines; case gScrollMode of smLineByLineCursor: rbScrollLineByLineCursor.Checked:= True; smLineByLine: rbScrollLineByLine.Checked:= True; smPageByPage: rbScrollPageByPage.Checked:= True; else rbScrollLineByLine.Checked:= True; end; end; function TfrmOptionsMouse.Save: TOptionsEditorSaveFlags; begin gMouseSelectionEnabled := cbSelectionByMouse.Checked; gMouseSelectionButton := cbMouseMode.ItemIndex; gWheelScrollLines:= seWheelScrollLines.Value; if rbScrollLineByLineCursor.Checked then gScrollMode:= smLineByLineCursor else if rbScrollLineByLine.Checked then gScrollMode:= smLineByLine else if rbScrollPageByPage.Checked then gScrollMode:= smPageByPage; Result := []; end; class function TfrmOptionsMouse.GetIconIndex: Integer; begin Result := 27; end; class function TfrmOptionsMouse.GetTitle: String; begin Result := rsOptionsEditorMouse; end; end. �����������������doublecmd-0.7.1/src/frames/foptionstooltips.pas�����������������������������������������������������0000644�0001750�0000144�00000015114�12646261026�020734� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tooltips options page Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsToolTips; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, Buttons, Menus, ExtCtrls, fOptionsFrame, uInfoToolTip; type { TfrmOptionsToolTips } TfrmOptionsToolTips = class(TOptionsEditor) btnAddFields: TBitBtn; btnDeleteFields: TBitBtn; btnApplyFields: TBitBtn; btnFieldsList: TButton; btnFieldsSearchTemplate: TBitBtn; chkShowToolTip: TCheckBox; edtFieldsList: TEdit; edtFieldsMask: TEdit; edtFieldsName: TEdit; gbCustomFields: TGroupBox; lblFieldsList: TLabel; lblFieldsMask: TLabel; lblFieldsName: TLabel; lsbCustomFields: TListBox; pnlEdit: TPanel; pmFields: TPopupMenu; procedure btnAddFieldsClick(Sender: TObject); procedure btnApplyFieldsClick(Sender: TObject); procedure btnDeleteFieldsClick(Sender: TObject); procedure btnFieldsListClick(Sender: TObject); procedure btnFieldsSearchTemplateClick(Sender: TObject); procedure chkShowToolTipChange(Sender: TObject); procedure miPluginClick(Sender: TObject); procedure lsbCustomFieldsSelectionChange(Sender: TObject; User: boolean); private FFileInfoToolTip: TFileInfoToolTip; procedure ClearData; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses LCLProc, fMaskInputDlg, uLng, uGlobs, uSearchTemplate, uFileFunctions; { TfrmOptionsToolTips } procedure TfrmOptionsToolTips.btnFieldsSearchTemplateClick(Sender: TObject); var sMask: String; bTemplate: Boolean; begin if ShowMaskInputDlg(rsMarkPlus, rsMaskInput, glsMaskHistory, sMask) then begin bTemplate:= IsMaskSearchTemplate(sMask); edtFieldsMask.Text:= sMask; edtFieldsMask.Enabled:= not bTemplate; end; end; procedure TfrmOptionsToolTips.chkShowToolTipChange(Sender: TObject); begin gbCustomFields.Enabled:= chkShowToolTip.Checked; end; procedure TfrmOptionsToolTips.miPluginClick(Sender: TObject); var sMask: String; MenuItem: TMenuItem absolute Sender; begin case MenuItem.Tag of 0: begin sMask := '[DC().' + MenuItem.Hint + '{}]'; end; 1: begin sMask := '[Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Caption + '{}]'; end; 2: begin sMask := '[Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}]'; end; else begin sMask:= '\n' end; end; edtFieldsList.Text:= edtFieldsList.Text + sMask; end; procedure TfrmOptionsToolTips.lsbCustomFieldsSelectionChange(Sender: TObject; User: boolean); var I: LongInt; begin I:= lsbCustomFields.ItemIndex; pnlEdit.Enabled:= (I <> -1); btnDeleteFields.Enabled:= pnlEdit.Enabled; if pnlEdit.Enabled then begin edtFieldsName.Text:= lsbCustomFields.Items[I]; with FFileInfoToolTip.HintItemList[I] do begin edtFieldsName.Text:= Name; edtFieldsMask.Text:= Mask; edtFieldsList.Text:= Hint; end; end; end; procedure TfrmOptionsToolTips.ClearData; begin edtFieldsName.Text:= EmptyStr; edtFieldsMask.Text:= EmptyStr; edtFieldsList.Text:= EmptyStr; end; class function TfrmOptionsToolTips.GetIconIndex: Integer; begin Result := 19; end; class function TfrmOptionsToolTips.GetTitle: String; begin Result := rsOptionsEditorTooltips; end; procedure TfrmOptionsToolTips.Init; begin FFileInfoToolTip:= TFileInfoToolTip.Create; end; procedure TfrmOptionsToolTips.Done; begin FreeThenNil(FFileInfoToolTip); end; procedure TfrmOptionsToolTips.btnDeleteFieldsClick(Sender: TObject); var I: LongInt; begin I:= lsbCustomFields.ItemIndex; if I <> -1 then begin lsbCustomFields.Items.Delete(I); FFileInfoToolTip.HintItemList.Delete(I); end; lsbCustomFields.ItemIndex:= lsbCustomFields.Items.Count - 1; pnlEdit.Enabled:= (lsbCustomFields.ItemIndex <> -1); btnDeleteFields.Enabled:= (lsbCustomFields.ItemIndex <> -1); if (lsbCustomFields.Items.Count = 0) then ClearData; end; procedure TfrmOptionsToolTips.btnFieldsListClick(Sender: TObject); var MenuItem: TMenuItem; begin FillContentFieldMenu(pmFields.Items, @miPluginClick); MenuItem:= TMenuItem.Create(pmFields); MenuItem.Caption:= '\n (New line)'; MenuItem.Tag:= -1; MenuItem.OnClick:= @miPluginClick; pmFields.Items.Add(MenuItem); pmFields.PopUp(Mouse.CursorPos.x, Mouse.CursorPos.y); end; procedure TfrmOptionsToolTips.btnAddFieldsClick(Sender: TObject); begin pnlEdit.Enabled:= (lsbCustomFields.Items.Count <> 0); btnDeleteFields.Enabled:= (lsbCustomFields.Items.Count <> 0); FFileInfoToolTip.HintItemList.Add(THintItem.Create); lsbCustomFields.ItemIndex:= lsbCustomFields.Items.Add(EmptyStr); ClearData; end; procedure TfrmOptionsToolTips.btnApplyFieldsClick(Sender: TObject); var I: LongInt; begin I:= lsbCustomFields.ItemIndex; if I <> -1 then begin lsbCustomFields.Items[I] := edtFieldsName.Text; with FFileInfoToolTip.HintItemList[I] do begin Name:= edtFieldsName.Text; Mask:= edtFieldsMask.Text; Hint:= edtFieldsList.Text; end; end; end; procedure TfrmOptionsToolTips.Load; var I: LongInt; begin gbCustomFields.Enabled:= gShowToolTipMode; chkShowToolTip.Checked:= gShowToolTipMode; FFileInfoToolTip.Assign(gFileInfoToolTip); for I:= 0 to FFileInfoToolTip.HintItemList.Count - 1 do lsbCustomFields.Items.Add(FFileInfoToolTip.HintItemList[I].Name); end; function TfrmOptionsToolTips.Save: TOptionsEditorSaveFlags; begin gShowToolTipMode:= chkShowToolTip.Checked; gFileInfoToolTip.Assign(FFileInfoToolTip); Result := []; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsterminal.lfm�����������������������������������������������������0000644�0001750�0000144�00000015464�12660674103�020675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsTerminal: TfrmOptionsTerminal Height = 324 Width = 519 ClientHeight = 324 ClientWidth = 519 ParentShowHint = False ShowHint = True object gbRunInTerminalClose: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbRunInTerminalStayOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 80 Top = 92 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for running a command in terminal and close after:' ClientHeight = 60 ClientWidth = 503 TabOrder = 1 object ledtRunInTermCloseCmd: TLabeledEdit AnchorSideTop.Control = gbRunInTerminalClose AnchorSideRight.Control = gbRunInTerminalClose AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 4 EditLabel.AnchorSideTop.Control = ledtRunInTermCloseCmd EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunInTermCloseCmd EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 22 EditLabel.Height = 15 EditLabel.Top = 8 EditLabel.Width = 60 EditLabel.Caption = 'Command:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 0 end object ledtRunInTermCloseParams: TLabeledEdit AnchorSideLeft.Control = ledtRunInTermCloseCmd AnchorSideTop.Control = ledtRunInTermCloseCmd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ledtRunInTermCloseCmd AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Hint = '{command} should normally be present here to reflect the command to be run in terminal' Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 6 EditLabel.AnchorSideTop.Control = ledtRunInTermCloseParams EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunInTermCloseParams EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 21 EditLabel.Height = 15 EditLabel.Top = 35 EditLabel.Width = 62 EditLabel.Caption = 'Parameters:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 1 end end object gbRunInTerminalStayOpen: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 80 Top = 6 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for running a command in terminal and stay open:' ClientHeight = 60 ClientWidth = 503 TabOrder = 0 object ledtRunInTermStayOpenCmd: TLabeledEdit AnchorSideTop.Control = gbRunInTerminalStayOpen AnchorSideRight.Control = gbRunInTerminalStayOpen AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 4 EditLabel.AnchorSideTop.Control = ledtRunInTermStayOpenCmd EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunInTermStayOpenCmd EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 22 EditLabel.Height = 15 EditLabel.Top = 8 EditLabel.Width = 60 EditLabel.Caption = 'Command:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 0 end object ledtRunInTermStayOpenParams: TLabeledEdit AnchorSideLeft.Control = ledtRunInTermStayOpenCmd AnchorSideTop.Control = ledtRunInTermStayOpenCmd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ledtRunInTermStayOpenCmd AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Hint = '{command} should normally be present here to reflect the command to be run in terminal' Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 6 EditLabel.AnchorSideTop.Control = ledtRunInTermStayOpenParams EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunInTermStayOpenParams EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 21 EditLabel.Height = 15 EditLabel.Top = 35 EditLabel.Width = 62 EditLabel.Caption = 'Parameters:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 1 end end object gbJustRunTerminal: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbRunInTerminalClose AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 80 Top = 178 Width = 507 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Command for just running terminal:' ClientHeight = 60 ClientWidth = 503 TabOrder = 2 object ledtRunTermCmd: TLabeledEdit AnchorSideTop.Control = gbJustRunTerminal AnchorSideRight.Control = gbJustRunTerminal AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Top = 4 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 4 EditLabel.AnchorSideTop.Control = ledtRunTermCmd EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunTermCmd EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 22 EditLabel.Height = 15 EditLabel.Top = 8 EditLabel.Width = 60 EditLabel.Caption = 'Command:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 0 end object ledtRunTermParams: TLabeledEdit AnchorSideLeft.Control = ledtRunTermCmd AnchorSideTop.Control = ledtRunTermCmd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ledtRunTermCmd AnchorSideRight.Side = asrBottom Left = 86 Height = 23 Hint = '{command} should normally be present here to reflect the command to be run in terminal' Top = 31 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 6 EditLabel.AnchorSideTop.Control = ledtRunTermParams EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = ledtRunTermParams EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 21 EditLabel.Height = 15 EditLabel.Top = 35 EditLabel.Width = 62 EditLabel.Caption = 'Parameters:' EditLabel.ParentColor = False LabelPosition = lpLeft TabOrder = 1 end end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdirectoryhotlist.pas���������������������������������������������0000644�0001750�0000144�00000230755�12660674103�022504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Configuration of HotDir Copyright (C) 2009-2016 Alexander Koblov (alexx2000@mail.ru) 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 foptionsDirectoryHotlist; {$mode objfpc}{$H+} interface uses {$IFDEF MSWINDOWS} uTotalCommander, {$ENDIF} SysUtils, Classes, Controls, Forms, StdCtrls, Buttons, ExtCtrls, Menus, Dialogs, ComCtrls, uHotDir, types, fOptionsFrame, uFile; type TProcedureWhenClickingAMenuItem = procedure(Sender: TObject) of object; { TfrmOptionsDirectoryHotlist } TfrmOptionsDirectoryHotlist = class(TOptionsEditor) btnHelp: TBitBtn; btnRelativePath: TSpeedButton; btnRelativeTarget: TSpeedButton; cbAddTarget: TCheckBox; cbFullExpandTree: TCheckBox; cbShowPathInPopup: TCheckBox; cbShowOnlyValidEnv: TCheckBox; cbSortHotDirPath: TComboBox; cbSortHotDirTarget: TComboBox; gbDirectoryHotlist: TGroupBox; gbHotlistOtherOptions: TGroupBox; lbleditHotDirName: TLabeledEdit; lbleditHotDirPath: TLabeledEdit; lbleditHotDirTarget: TLabeledEdit; miSearchAndReplaceInPath: TMenuItem; miSearchInReplaceInBothPaths: TMenuItem; miSeparator13: TMenuItem; miSearchAndReplaceInTargetPath: TMenuItem; miSearchAndReplace: TMenuItem; miSeparator12: TMenuItem; miTypeTheDirectory3: TMenuItem; miCollapseAll: TMenuItem; miSeparator10: TMenuItem; miOpenAllBranches: TMenuItem; miSeparator11: TMenuItem; miSeparator9: TMenuItem; miSortSingleGroup2: TMenuItem; miCurrentSelectedOrActiveDirectories: TMenuItem; pnlBottom: TPanel; pnlClient: TPanel; pmPathHelper: TPopupMenu; rgWhereToAdd: TRadioGroup; pnlButtons: TPanel; tvDirectoryHotlist: TTreeView; btnInsert: TBitBtn; btnAdd: TBitBtn; btnDelete: TBitBtn; btnBackup: TBitBtn; btnExport: TBitBtn; btnImport: TBitBtn; btnMiscellaneous: TBitBtn; btnSort: TBitBtn; pmTreeView: TPopupMenu; pmInsertAddDirectoryHotlist: TPopupMenu; miBrowseToDirectory: TMenuItem; miTypeTheDirectory: TMenuItem; miActiveFrameDirectory: TMenuItem; miActiveInactiveFrameDirectory: TMenuItem; miAddCopyOfSelected: TMenuItem; miSeparator1: TMenuItem; miAddCommand: TMenuItem; miAddSeparator: TMenuItem; miAddSubmenu: TMenuItem; pmDeleteDirectoryHotlist: TPopupMenu; miDeleteSelectedEntry: TMenuItem; miSeparator2: TMenuItem; miDeleteJustSubMenu: TMenuItem; miDeleteCompleteSubMenu: TMenuItem; miSeparator3: TMenuItem; miDeleteAllHotDirs: TMenuItem; pmExportDirectoryHotlist: TPopupMenu; miExportToTotalCommanderk: TMenuItem; miExportToTotalCommandernk: TMenuItem; miSeparator5: TMenuItem; miExportToHotlistFile: TMenuItem; pmImportDirectoryHotlist: TPopupMenu; miImportTotalCommander: TMenuItem; miSeparator4: TMenuItem; miImportFromHotlistFile: TMenuItem; pmBackupDirectoryHotlist: TPopupMenu; miSaveBackupHotlist: TMenuItem; miRestoreBackupHotlist: TMenuItem; pmMiscellaneousDirectoryHotlist: TPopupMenu; miTestResultingHotlistMenu: TMenuItem; miDetectIfPathExist: TMenuItem; miDetectIfPathTargetExist: TMenuItem; pmSortDirectoryHotlist: TPopupMenu; miSortSingleGroup: TMenuItem; miCurrentLevelOfItemOnly: TMenuItem; miSortSingleSubMenu: TMenuItem; miSortSubMenuAndSubLevel: TMenuItem; miSortEverything: TMenuItem; pmHotDirTestMenu: TPopupMenu; miHotDirTestMenu: TMenuItem; miTypeTheDirectory2: TMenuItem; miAddCopyOfSelected2: TMenuItem; miSeparator6: TMenuItem; miAddCommand2: TMenuItem; miAddSeparator2: TMenuItem; miAddSubmenu2: TMenuItem; miSeparator7: TMenuItem; miDeleteSelectedEntry2: TMenuItem; miSeparator8: TMenuItem; miCutSelection: TMenuItem; miPasteSelection: TMenuItem; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; miGotoConfigureTCInfo1: TMenuItem; miGotoConfigureTCInfo2: TMenuItem; procedure btnHelpClick(Sender: TObject); procedure cbFullExpandTreeChange(Sender: TObject); procedure miCollapseAllClick(Sender: TObject); procedure miOpenAllBranchesClick(Sender: TObject); procedure pnlButtonsResize(Sender: TObject); procedure miSearchAndReplaceClick(Sender: TObject); procedure tvDirectoryHotlistDragDrop(Sender, {%H-}Source: TObject; X, Y: Integer); procedure tvDirectoryHotlistDragOver(Sender, {%H-}Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean); procedure tvDirectoryHotlistEnter(Sender: TObject); procedure tvDirectoryHotlistExit(Sender: TObject); procedure tvDirectoryHotlistSelectionChanged(Sender: TObject); procedure btnActionClick(Sender: TObject); procedure miInsertAddHotDirClick(Sender: TObject); procedure miDeleteSelectedEntryClick(Sender: TObject); procedure miDeleteAllHotDirsClick(Sender: TObject); procedure miExportToAnythingClick(Sender: TObject); procedure miImportFromAnythingClick(Sender: TObject); procedure miSortDirectoryHotlistClick(Sender: TObject); procedure miTestResultingHotlistMenuClick(Sender: TObject); procedure miDetectIfPathExistClick(Sender: TObject); procedure ClearCutAndPasteList; procedure miCutSelectionClick(Sender: TObject); procedure miPasteSelectionClick(Sender: TObject); procedure lbleditHotDirEnter(Sender: TObject); procedure lbleditHotDirExit(Sender: TObject); procedure lbleditHotDirKeyPress(Sender: TObject; var Key: char); procedure lbleditHotDirMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: integer); procedure anyRelativeAbsolutePathClick(Sender: TObject); procedure cbSortHotDirPathChange(Sender: TObject); procedure cbSortHotDirTargetChange(Sender: TObject); procedure miShowWhereItWouldGo(Sender: TObject); procedure miSimplyCopyCaption(Sender: TObject); procedure PopulatePopupMenuWithCommands(pmMenuToPopulate: TPopupMenu); function ActualAddDirectories(ParamDispatcher: TKindOfHotDirEntry; sName, sPath, sTarget: string; InsertOrAdd:integer): TTreeNode; procedure RefreshTreeView(NodeToSelect:TTreeNode); function TryToGetCloserHotDir(sDirToFindAPlaceFor: string; var TypeOfAddition:Integer): TTreeNode; function TryToGetExactHotDir(const index:integer):TTreeNode; procedure RecursiveSetGroupNumbers(ParamNode:TTreeNode; ParamGroupNumber:integer; DoRecursion, StopAtFirstGroup:boolean); procedure RefreshExistingProperty(ScanMode: integer); procedure SetNormalIconsInTreeView; function MySortViaGroup(Node1, Node2: TTreeNode): integer; procedure CopyTTreeViewToAnother(tvSource,tvDestination:TTreeView); function GetNextGroupNumber:integer; procedure miGotoConfigureTCInfo2Click(Sender: TObject); procedure GenericSomethingChanged(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; private { Private declarations } pmCommandHelper: TPopupMenu; DirectoryHotlistTemp: TDirectoryHotlist; CutAndPasteIndexList: TStringList; GlobalGroupNumber: integer; FModificationTookPlace: boolean; FLastLoadedDirectoryHotlistSignature: dword; public { Public declarations } class function GetIconIndex: Integer; override; class function GetTitle: String; override; destructor Destroy; override; function CanWeClose(var {%H-}WillNeedUpdateWindowView:boolean): boolean; override; procedure SubmitToAddOrConfigToHotDirDlg(paramActionDispatcher: integer; paramPath,paramTarget:string; paramOptionalIndex: integer); end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Graphics, LCLType, LCLProc, LCLIntf, LCLMessageGlue, helpintfs, //DC fEditSearch, fOptionsMisc, DCStrUtils, uGlobs, uLng, uDCUtils, uDebug, fmain, uFormCommands, uFileProcs, uShowMsg, DCOSUtils, uSpecialDir, fhotdirexportimport, fOptions; { Constants used with export/import } const MASK_ACTION_WITH_WHAT = $03; MASK_FLUSHORNOT_EXISTING = $80; ACTION_WITH_WINCMDINI = $00; ACTION_WITH_HOTLISTFILE = $01; ACTION_WITH_BACKUP = $02; ACTION_ERASEEXISTING = $80; { Constant used with various action } ACTION_INSERTHOTDIR = 1; ACTION_ADDHOTDIR = 2; { TfrmOptionsDirectoryHotlist.Load } procedure TfrmOptionsDirectoryHotlist.Load; begin gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); pmCommandHelper := TPopupMenu.Create(Self); PopulatePopupMenuWithCommands(pmCommandHelper); btnRelativePath.Hint := rsMsgHotDirTipSpecialDirBut; btnRelativeTarget.Hint := rsMsgHotDirTipSpecialDirBut; cbSortHotDirPath.Hint := rsMsgHotDirTipOrderPath; cbSortHotDirTarget.Hint := rsMsgHotDirTipOrderTarget; cbAddTarget.Checked := gHotDirAddTargetOrNot; cbFullExpandTree.Checked := gHotDirFullExpandOrNot; cbShowPathInPopup.Checked := gShowPathInPopup; cbShowOnlyValidEnv.Checked := gShowOnlyValidEnv; rgWhereToAdd.ItemIndex := integer(gWhereToAddNewHotDir); CutAndPasteIndexList:=TStringList.Create; CutAndPasteIndexList.Sorted:=TRUE; CutAndPasteIndexList.Duplicates:=dupAccept; {$IFNDEF MSWINDOWS} miExportToTotalCommanderk.Free; miExportToTotalCommandernk.Free; miGotoConfigureTCInfo1.Free; miSeparator4.Free; miSeparator5.Free; miImportTotalCommander.Free; miGotoConfigureTCInfo2.Free; {$ENDIF} if DirectoryHotlistTemp=nil then begin DirectoryHotlistTemp := TDirectoryHotlist.Create; gDirectoryHotlist.CopyDirectoryHotlistToDirectoryHotlist(DirectoryHotlistTemp); end; tvDirectoryHotlist.Images:=frmMain.imgLstDirectoryHotlist; DirectoryHotlistTemp.LoadTTreeView(tvDirectoryHotlist,-1); cbFullExpandTreeChange(cbFullExpandTree); if tvDirectoryHotlist.Items.Count>0 then tvDirectoryHotlist.Items[0].Selected:=TRUE; //Select at least first one by default FLastLoadedDirectoryHotlistSignature := DirectoryHotlistTemp.ComputeSignature; FModificationTookPlace := False; end; { TfrmOptionsDirectoryHotlist.Save } function TfrmOptionsDirectoryHotlist.Save: TOptionsEditorSaveFlags; begin Result := []; DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); DirectoryHotlistTemp.CopyDirectoryHotlistToDirectoryHotlist(gDirectoryHotlist); gHotDirAddTargetOrNot:=cbAddTarget.Checked; gHotDirFullExpandOrNot:=cbFullExpandTree.Checked; if gShowPathInPopup<>cbShowPathInPopup.Checked then begin gShowPathInPopup:=cbShowPathInPopup.Checked; pmPathHelper.Items.Clear; //Let' re-populate it since option for environment variabel path has changed... gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; if gShowOnlyValidEnv<>cbShowOnlyValidEnv.Checked then begin gShowOnlyValidEnv:=cbShowOnlyValidEnv.Checked; LoadWindowsSpecialDir; pmPathHelper.Items.Clear; //Let' re-populate it since option for environment variabel path has changed... gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper, mp_PATHHELPER, nil); end; gWhereToAddNewHotDir:=TPositionWhereToAddHotDir(rgWhereToAdd.ItemIndex); cbFullExpandTreeChange(cbFullExpandTree); FLastLoadedDirectoryHotlistSignature := DirectoryHotlistTemp.ComputeSignature; FModificationTookPlace := False; end; { TfrmOptionsDirectoryHotlist.CanWeClose } function TfrmOptionsDirectoryHotlist.CanWeClose(var WillNeedUpdateWindowView:boolean): boolean; var Answer:TMyMsgResult; begin result:=TRUE; if Assigned(DirectoryHotlistTemp) then begin DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); result := (FLastLoadedDirectoryHotlistSignature = DirectoryHotlistTemp.ComputeSignature) AND (not FModificationTookPlace); if not result then begin ShowOptions(TfrmOptionsDirectoryHotlist); Answer:=MsgBox(rsMsgHotDirModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; result:=TRUE; end; mmrNo: result:=TRUE; else result:=FALSE; end; end; end; end; { TfrmOptionsDirectoryHotlist.GetIconIndex } class function TfrmOptionsDirectoryHotlist.GetIconIndex: Integer; begin Result := 33; end; { TfrmOptionsDirectoryHotlist.GetTitle } class function TfrmOptionsDirectoryHotlist.GetTitle: String; begin Result := rsOptionsEditorDirectoryHotlist; end; { TfrmOptionsDirectoryHotlist.Destroy } destructor TfrmOptionsDirectoryHotlist.Destroy; begin pmCommandHelper.Free; CutAndPasteIndexList.Free; inherited Destroy; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragDrop } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragDrop(Sender, Source: TObject; X, Y: Integer); var Index:longint; DestinationNode:TTreeNode; begin DestinationNode:= tvDirectoryHotlist.GetNodeAt(X, Y); if Assigned(DestinationNode) and (tvDirectoryHotlist.SelectionCount > 0) then begin //If we move toward the end, we place the moved item *after* the destination. //If we move toward the beginning, we place the moved item *before* the destination. if tvDirectoryHotlist.Selections[pred(tvDirectoryHotlist.SelectionCount)].AbsoluteIndex>DestinationNode.AbsoluteIndex then begin for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode,naInsert); end; end else begin for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode,naInsertBehind); end; end; ClearCutAndPasteList; end; miPasteSelection.Enabled:=FALSE; end; { TfrmOptionsDirectoryHotlist.miOpenAllBranchesClick } procedure TfrmOptionsDirectoryHotlist.miOpenAllBranchesClick(Sender: TObject); begin tvDirectoryHotlist.FullExpand; if tvDirectoryHotlist.Selected<>nil then begin tvDirectoryHotlist.Selected.MakeVisible; if tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; end; end; { TfrmOptionsDirectoryHotlist.pnlButtonsResize } procedure TfrmOptionsDirectoryHotlist.pnlButtonsResize(Sender: TObject); var I: Integer; begin for I:= 0 to pnlButtons.ControlCount - 1 do begin pnlButtons.Controls[I].Width:= pnlButtons.ClientWidth div 2 - 3; end; end; { TfrmOptionsDirectoryHotlist.miSearchAndReplaceClick } procedure TfrmOptionsDirectoryHotlist.miSearchAndReplaceClick(Sender: TObject); var NbOfReplacement:longint; sSearchText,sReplaceText: string; ReplaceFlags: TReplaceFlags; function ReplaceIfNecessary(sWorkingText:string):string; begin result := StringReplace(sWorkingText, sSearchText, sReplaceText, ReplaceFlags); if result<>sWorkingText then inc(NbOfReplacement); end; var Index, ActionDispatcher: integer; EditSearchOptionToOffer: TEditSearchDialogOption; EditSearchOptionReturned: TEditSearchDialogOption = []; begin with Sender as TComponent do ActionDispatcher:=tag; if ((ActionDispatcher and $01) <> 0) AND (lbleditHotDirPath.Text<>'') then sSearchText:=lbleditHotDirPath.Text else if ((ActionDispatcher and $02) <> 0) AND (lbleditHotDirTarget.Text<>'') then sSearchText:=lbleditHotDirTarget.Text else sSearchText:=''; sReplaceText:=sSearchText; EditSearchOptionToOffer:=[]; {$IFDEF MSWINDOWS} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveUnchecked]; {$ELSE} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveChecked]; {$ENDIF} if GetSimpleSearchAndReplaceString(self, EditSearchOptionToOffer, sSearchText, sReplaceText, EditSearchOptionReturned, glsSearchPathHistory, glsReplacePathHistory) then begin NbOfReplacement:=0; ReplaceFlags:=[rfReplaceAll]; if eswoCaseSensitiveUnchecked in EditSearchOptionReturned then ReplaceFlags := ReplaceFlags + [rfIgnoreCase]; for Index:=0 to pred(gDirectoryHotlist.Count) do begin case DirectoryHotlistTemp.HotDir[Index].Dispatcher of hd_CHANGEPATH: begin if (ActionDispatcher and $01) <> 0 then DirectoryHotlistTemp.HotDir[Index].HotDirPath:=ReplaceIfNecessary(DirectoryHotlistTemp.HotDir[Index].HotDirPath); if (ActionDispatcher and $02) <> 0 then DirectoryHotlistTemp.HotDir[Index].HotDirTarget:=ReplaceIfNecessary(DirectoryHotlistTemp.HotDir[Index].HotDirTarget); end; end; end; if NbOfReplacement=0 then begin msgOk(rsZeroReplacement); end else begin tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); msgOk(format(rsXReplacements,[NbOfReplacement])); end; end; end; { TfrmOptionsDirectoryHotlist.miCollapseAllClick } procedure TfrmOptionsDirectoryHotlist.miCollapseAllClick(Sender: TObject); begin tvDirectoryHotlist.FullCollapse; if tvDirectoryHotlist.Selected<>nil then begin tvDirectoryHotlist.Selected.MakeVisible; tvDirectoryHotlist.Selected.MakeVisible; tvDirectoryHotlist.Selected.MakeVisible; tvDirectoryHotlist.Selected.MakeVisible; if tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; end; end; { TfrmOptionsDirectoryHotlist.cbFullExpandTreeChange } procedure TfrmOptionsDirectoryHotlist.cbFullExpandTreeChange(Sender: TObject); begin GenericSomethingChanged(cbFullExpandTree); if cbFullExpandTree.Checked then tvDirectoryHotlist.FullExpand else tvDirectoryHotlist.FullCollapse; end; { TfrmOptionsDirectoryHotlist.btnHelpClick } procedure TfrmOptionsDirectoryHotlist.btnHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', '/directoryhotlist.html'); end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragOver } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept:=TRUE; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistEnter } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistEnter(Sender: TObject); begin tvDirectoryHotlist.SelectionColor:=clHighlight; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistExit } // To help to catch eye's attention, let's change color of selection when tree get/lose the focus procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistExit(Sender: TObject); begin tvDirectoryHotlist.SelectionColor:=clBtnShadow; end; { TfrmOptionsDirectoryHotlist.tvDirectoryHotlistSelectionChanged } procedure TfrmOptionsDirectoryHotlist.tvDirectoryHotlistSelectionChanged(Sender: TObject); var WorkingPointer:Pointer; begin if tvDirectoryHotlist.Selected<>nil then begin WorkingPointer:=tvDirectoryHotlist.Selected.Data; case THotDir(WorkingPointer).Dispatcher of hd_NULL: begin end; hd_CHANGEPATH: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleName; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.Enabled := True; lbleditHotDirPath.EditLabel.Caption := rsMsgHotDirJustPath; lbleditHotDirPath.Text := THotDir(WorkingPointer).HotDirPath; //DirectoryHotlistTemp.HotDir[IndexInHotlist].HotDirPath; lbleditHotDirPath.Hint := mbExpandFileName(lbleditHotDirPath.Text); cbSortHotDirPath.ItemIndex := THotDir(WorkingPointer).HotDirPathSort; lbleditHotDirPath.Visible := True; btnRelativePath.Tag := 2; lbleditHotDirTarget.Text := THotDir(WorkingPointer).HotDirTarget; lbleditHotDirTarget.Hint := mbExpandFileName(lbleditHotDirTarget.Text); cbSortHotDirTarget.ItemIndex := THotDir(WorkingPointer).HotDirTargetSort; lbleditHotDirTarget.Visible := True; end; hd_COMMAND: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleName; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.Enabled := True; lbleditHotDirPath.EditLabel.Caption := rsMsgHotDirSimpleCommand; lbleditHotDirPath.Text := THotDir(WorkingPointer).HotDirPath; lbleditHotDirPath.Hint := ''; lbleditHotDirPath.Visible := True; btnRelativePath.Tag := 4; lbleditHotDirTarget.Visible := False; end; hd_SEPARATOR: begin lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := rsMsgHotDirSimpleSeparator; lbleditHotDirName.Enabled := False; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; hd_STARTMENU: begin lbleditHotDirName.EditLabel.Caption := rsMsgHotDirSimpleMenu; lbleditHotDirName.Text := THotDir(WorkingPointer).HotDirName; lbleditHotDirName.Enabled := True; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; hd_ENDMENU: begin lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := rsMsgHotDirSimpleEndOfMenu; lbleditHotDirName.Enabled := False; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; end; //case THotDir(WorkingPointer).Dispatcher of miDeleteSelectedEntry.Enabled := not (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miDeleteJustSubMenu.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miDeleteCompleteSubMenu.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miAddCopyOfSelected.Enabled := ((THotDir(WorkingPointer).Dispatcher <> hd_STARTMENU) and (THotDir(WorkingPointer).Dispatcher <> hd_ENDMENU)); miAddCopyOfSelected2.Enabled := miAddCopyOfSelected.Enabled; miSortSingleSubMenu.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miSortSubMenuAndSubLevel.Enabled := (THotDir(WorkingPointer).Dispatcher = hd_STARTMENU); miDeleteSelectedEntry.Enabled := (THotDir(WorkingPointer).Dispatcher <> hd_ENDMENU); miDeleteSelectedEntry2.Enabled := miDeleteSelectedEntry.Enabled; end //if tvDirectoryHotlist.Selected<>nil then else begin lbleditHotDirName.EditLabel.Caption := ''; lbleditHotDirName.Text := ''; lbleditHotDirName.Enabled := False; lbleditHotDirName.Text:='Nothing...'; lbleditHotDirPath.Visible := False; lbleditHotDirTarget.Visible := False; end; btnRelativePath.Visible := lbleditHotDirPath.Visible; cbSortHotDirPath.Visible := lbleditHotDirPath.Visible and (THotDir(WorkingPointer).Dispatcher <> hd_COMMAND); btnRelativeTarget.Visible := lbleditHotDirTarget.Visible; cbSortHotDirTarget.Visible := lbleditHotDirTarget.Visible; end; { TfrmOptionsDirectoryHotlist.btnActionClick } procedure TfrmOptionsDirectoryHotlist.btnActionClick(Sender: TObject); var Dispatcher:integer; begin with Sender as TComponent do Dispatcher := tag; case Dispatcher of 1,2: pmInsertAddDirectoryHotlist.Tag:=Dispatcher; //To help in routine to determine if it's a "Insert" or a "Add" end; case Dispatcher of 1: miTypeTheDirectory.ShortCut:=$4000 OR VK_F9; 2: miTypeTheDirectory.ShortCut:=VK_F9; end; case Dispatcher of 1,2: pmInsertAddDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 3: pmDeleteDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 4: pmExportDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 5: pmImportDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 6: pmBackupDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 7: pmMiscellaneousDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); 8: pmSortDirectoryHotlist.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; { TfrmOptionsDirectoryHotlist.miAddHotDirClick } procedure TfrmOptionsDirectoryHotlist.miInsertAddHotDirClick(Sender: TObject); var sPath, initialPath, stempo: string; AddOrInsertDispatcher, Dispatcher, Index: integer; MaybeNodeAfterAddition:TTreeNode=nil; NodeAfterAddition:TTreeNode=nil; SelectedOrActiveDirectories:TFiles; begin with Sender as TComponent do Dispatcher := tag; with Sender as TMenuItem do AddOrInsertDispatcher:=GetParentMenu.Tag; sPath := ''; case Dispatcher of 1: //Directory I will browse to begin initialPath := ''; if (tvDirectoryHotlist.Items.Count>0) then begin if THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher = hd_CHANGEPATH then initialPath := mbExpandFileName(THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath); end; if initialPath = '' then initialPath := frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, initialPath, sPath, False) then begin NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, GetLastDir(sPath), sPath, '',AddOrInsertDispatcher); end; end; 2: //Directory I will type begin if cbAddTarget.Checked then sTempo := rsMsgHotDirTarget else sTempo := ''; NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, rsMsgHotDirName, rsMsgHotDirPath, sTempo,AddOrInsertDispatcher); end; 3: //Directory of the active frame begin NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, GetLastDir(frmMain.ActiveFrame.CurrentPath), frmMain.ActiveFrame.CurrentPath, '',AddOrInsertDispatcher); end; 4: //Directory of the active AND inactive frames begin NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, GetLastDir(frmMain.ActiveFrame.CurrentPath), frmMain.ActiveFrame.CurrentPath, frmMain.NotActiveFrame.CurrentPath,AddOrInsertDispatcher); end; 5: begin NodeAfterAddition:=ActualAddDirectories(hd_SEPARATOR, HOTLIST_SEPARATORSTRING, '', '',AddOrInsertDispatcher); end; 6: begin NodeAfterAddition:=ActualAddDirectories(hd_STARTMENU, rsMsgHotDirSubMenuName, '', '',AddOrInsertDispatcher); tvDirectoryHotlist.ClearSelection(TRUE); NodeAfterAddition.Selected:=TRUE; NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, rsMsgHotDirName, rsMsgHotDirPath, sTempo,3); end; 7: begin NodeAfterAddition:=ActualAddDirectories(THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher, THotDir(tvDirectoryHotlist.Selected.Data).HotDirName, THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath, THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget,AddOrInsertDispatcher); end; 8: //A command begin NodeAfterAddition:=ActualAddDirectories(hd_COMMAND, rsMsgHotDirCommandName, rsMsgHotDirCommandSample, '',AddOrInsertDispatcher); end; 9: //Current selected directories of active frame begin SelectedOrActiveDirectories:=frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try if SelectedOrActiveDirectories.count>0 then begin if AddOrInsertDispatcher = 1 then begin //When we INSERT, which mean BEFORE the selection, let's do it this way so last insert will be just ab the previous selection AND ready to edit for Index:=0 to pred(SelectedOrActiveDirectories.Count) do begin MaybeNodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, GetLastDir(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath)), ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath), '', AddOrInsertDispatcher); if NodeAfterAddition=nil then NodeAfterAddition:=MaybeNodeAfterAddition; end; end else begin //When we ADD, which mean AFTER the selection, let's do it this way so last addition will be just below the previous selection AND will be the first one that selected in active frame for Index:=pred(SelectedOrActiveDirectories.Count) downto 0 do begin NodeAfterAddition:=ActualAddDirectories(hd_CHANGEPATH, GetLastDir(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath)), ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[Index].FullPath), '', AddOrInsertDispatcher); end; end; end; finally FreeAndNil(SelectedOrActiveDirectories); end; end; end; if NodeAfterAddition<>nil then begin tvDirectoryHotlist.ClearSelection(TRUE); NodeAfterAddition.Selected:=TRUE; if lbleditHotDirName.CanFocus then lbleditHotDirName.SetFocus; end; end; { TfrmOptionsDirectoryHotlist.miDeleteSelectedEntryClick } procedure TfrmOptionsDirectoryHotlist.miDeleteSelectedEntryClick(Sender: TObject); var DeleteDispatcher:integer; FlagQuitDeleting:boolean; Answer:TMyMsgResult; NodeAfterDeletion:TTreeNode=nil; isTreeHadFocus:boolean=FALSE; procedure DeleteSelectionAndSetNodeAfterDeletion; begin if tvDirectoryHotList.Selections[0].GetNextSibling<>nil then NodeAfterDeletion:=tvDirectoryHotList.Selections[0].GetNextSibling else if tvDirectoryHotList.Selections[0].GetPrevSibling<>nil then NodeAfterDeletion:=tvDirectoryHotList.Selections[0].GetPrevSibling else if tvDirectoryHotList.Selections[0].Parent<>nil then NodeAfterDeletion:=tvDirectoryHotList.Selections[0].Parent else NodeAfterDeletion:=nil; tvDirectoryHotList.Selections[0].Delete; ClearCutAndPasteList; end; begin if tvDirectoryHotlist.SelectionCount>0 then begin isTreeHadFocus:=tvDirectoryHotlist.Focused; tvDirectoryHotlist.Enabled:=FALSE; try with Sender as TComponent do DeleteDispatcher:=tag; FlagQuitDeleting:=FALSE; //It's funny but as long we have something selected, we delete it and it will be index 0 since when //deleting something, the "Selections" array is updated! while (tvDirectoryHotList.SelectionCount>0) AND (not FlagQuitDeleting) do begin if tvDirectoryHotList.Selections[0].GetFirstChild=nil then begin DeleteSelectionAndSetNodeAfterDeletion; end else begin case DeleteDispatcher of 1: Answer := MsgBox(Format(rsMsgHotDirWhatToDelete,[tvDirectoryHotList.Selections[0].Text]), [msmbAll, msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); 2: Answer := mmrNo; 3: Answer := mmrYes; else Answer := mmrCancel; //Should not happen, but just in case end; case Answer of mmrAll: begin DeleteDispatcher:=3; DeleteSelectionAndSetNodeAfterDeletion; end; mmrYes: DeleteSelectionAndSetNodeAfterDeletion; mmrNo: begin NodeAfterDeletion:=tvDirectoryHotList.Selections[0].GetFirstChild; repeat tvDirectoryHotList.Selections[0].GetFirstChild.MoveTo(tvDirectoryHotList.Selections[0].GetFirstChild.Parent,naInsert); until tvDirectoryHotList.Selections[0].GetFirstChild=nil; tvDirectoryHotList.Selections[0].Delete; ClearCutAndPasteList; end; else FlagQuitDeleting:=TRUE; end; end; end; if (NodeAfterDeletion=nil) AND (FlagQuitDeleting=FALSE) AND (tvDirectoryHotList.Items.Count>0) then NodeAfterDeletion:=tvDirectoryHotList.Items.Item[0]; if (NodeAfterDeletion<>nil) AND (FlagQuitDeleting=FALSE) then NodeAfterDeletion.Selected:=TRUE; finally tvDirectoryHotlist.Enabled:=TRUE; if isTreeHadFocus AND tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; end; end; end; { TfrmOptionsDirectoryHotlist.miDeleteAllHotDirsClick } procedure TfrmOptionsDirectoryHotlist.miDeleteAllHotDirsClick(Sender: TObject); begin if MsgBox(rsMsgHotDirDeleteAllEntries, [msmbYes, msmbNo], msmbNo, msmbNo) = mmrYes then begin tvDirectoryHotlist.Items.Clear; lbleditHotDirName.Text := ''; lbleditHotDirPath.Text := ''; lbleditHotDirTarget.Text := ''; ClearCutAndPasteList; end; end; { TfrmOptionsDirectoryHotlist.miExportToAnythingClick } //We could export to a few ways: // 0x00:To TC and keeping existing hotlist // 0x80:To TC after erasing existing Directory Hotlist // 0x01:To a Directory Hotlist file (.hotlist) // 0x02:To a backup file (all of them, to a "BACKUP_YYYY-MM-DD-HH-MM-SS.hotlist" file) // With the backup, we don't ask what to output, we output everything! procedure TfrmOptionsDirectoryHotlist.miExportToAnythingClick(Sender: TObject); var FlagKeepGoing: boolean = False; ActionDispatcher: integer; BackupPath: string; WorkingDirectoryHotlist: TDirectoryHotlist; Answer: integer; begin WorkingDirectoryHotlist := TDirectoryHotlist.Create; try with Sender as TComponent do ActionDispatcher := tag; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.Filename := gTotalCommanderConfigFilename; FlagKeepGoing := TRUE; end; end; {$ENDIF} ACTION_WITH_HOTLISTFILE: begin SaveDialog.DefaultExt := '*.hotlist'; SaveDialog.FilterIndex := 1; SaveDialog.Title := rsMsgHotDirWhereToSave; SaveDialog.FileName := 'New Directory Hotlist'; FlagKeepGoing := SaveDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin SaveDialog.Filename := BackupPath + DirectorySeparator + 'Backup_' +GetDateTimeInStrEZSortable(now) + '.hotlist'; if gDirectoryHotlist.ExportDoubleCommander(SaveDialog.FileName, True) then msgOK(Format(rsMsgHotDirTotalBackuped, [gDirectoryHotlist.Count, SaveDialog.Filename])) else msgError(rsMsgHotDirErrorBackuping); end; Exit; end; end; //User select what to export if FlagKeepGoing then begin with Tfrmhotdirexportimport.Create(Application) do begin try CopyTTreeViewToAnother(tvDirectoryHotlist,tvDirectoryHotlistToExportImport); btnSelectAll.Caption := rsMsgHotDirExportall; btnSelectionDone.Caption := rsMsgHotDirExportSel; Caption := rsMsgHotDirExportHotlist; Answer := ShowModal; if ((Answer = mrOk) and (tvDirectoryHotlistToExportImport.SelectionCount > 0)) or ((Answer = mrAll) and (tvDirectoryHotlistToExportImport.Items.Count > 0)) then begin WorkingDirectoryHotlist.AddFromAnotherTTreeViewTheSelected(nil,tvDirectoryHotlistToExportImport,(Answer=mrAll)); if WorkingDirectoryHotlist.Count > 0 then begin case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: if WorkingDirectoryHotlist.ExportTotalCommander(OpenDialog.FileName, ((ActionDispatcher and MASK_FLUSHORNOT_EXISTING) =ACTION_ERASEEXISTING)) then msgOK(rsMsgHotDirTotalExported + IntToStr(WorkingDirectoryHotlist.Count)) else msgError(rsMsgHotDirErrorExporting); {$ENDIF} ACTION_WITH_HOTLISTFILE: if WorkingDirectoryHotlist.ExportDoubleCommander(SaveDialog.FileName, True) then msgOK(rsMsgHotDirTotalExported + IntToStr(WorkingDirectoryHotlist.Count)) else msgError(rsMsgHotDirErrorExporting); end; end else begin msgOK(rsMsgHotDirNothingToExport); end; end; //If user confirmed OK and have selected something... finally Free; end; end; end; finally WorkingDirectoryHotlist.Free; end; end; { TfrmOptionsDirectoryHotlist.miImportFromAnythingClick } //We could import from a few ways: // 0x00:From TC // 0x01:From a Directory Hotlist file (.hotlist) // 0x02:From a backup file (all of them, to a "BACKUP_YYYY-MM-DD-HH-MM-SS.hotlist" file) // With the backup, we erase existing ones procedure TfrmOptionsDirectoryHotlist.miImportFromAnythingClick(Sender: TObject); var WorkingDirectoryList: TDirectoryHotlist; Answer, NbOfAdditional, ActionDispatcher: longint; FlagKeepGoing: boolean = FALSE; BackupPath: string; begin with Sender as TComponent do ActionDispatcher := tag; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_HOTLISTFILE: begin OpenDialog.DefaultExt := '*.hotlist'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgHotDirLocateHotlistFile; FlagKeepGoing := OpenDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin OpenDialog.DefaultExt := '*.hotlist'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgHotDirRestoreWhat; OpenDialog.InitialDir := ExcludeTrailingPathDelimiter(BackupPath); FlagKeepGoing := OpenDialog.Execute; end; end; {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.FileName := gTotalCommanderConfigFilename; FlagKeepGoing:=TRUE; end; end; {$ENDIF} end; if FlagKeepGoing then begin WorkingDirectoryList := TDirectoryHotlist.Create; try case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: WorkingDirectoryList.ImportTotalCommander(String(OpenDialog.Filename)); {$ENDIF} ACTION_WITH_HOTLISTFILE: WorkingDirectoryList.ImportDoubleCommander(String(OpenDialog.Filename)); ACTION_WITH_BACKUP: WorkingDirectoryList.ImportDoubleCommander(String(OpenDialog.Filename)); end; with Tfrmhotdirexportimport.Create(Application) do begin try WorkingDirectoryList.LoadTTreeView(tvDirectoryHotlistToExportImport,-1); btnSelectAll.Caption := rsMsgHotDirImportall; btnSelectionDone.Caption := rsMsgHotDirImportSel; Caption := rsMsgHotDirImportHotlist; case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_HOTLISTFILE: Answer := ShowModal; ACTION_WITH_BACKUP: begin if MsgBox(rsHotDirWarningAbortRestoreBackup, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel) = mmrYes then Answer := mrAll else Exit; end; ACTION_WITH_WINCMDINI: Answer := ShowModal; end; if ((Answer = mrOk) and (tvDirectoryHotlistToExportImport.SelectionCount > 0)) or ((Answer = mrAll) and (tvDirectoryHotlistToExportImport.Items.Count > 0)) then begin ClearCutAndPasteList; if ((ActionDispatcher and MASK_ACTION_WITH_WHAT) = ACTION_WITH_BACKUP) AND (Answer = mrAll) then begin DirectoryHotlistTemp.Clear; tvDirectoryHotlist.Items.Clear; end; NbOfAdditional := DirectoryHotlistTemp.AddFromAnotherTTreeViewTheSelected(tvDirectoryHotlist, tvDirectoryHotlistToExportImport, (Answer = mrAll)); if NbOfAdditional > 0 then begin //DirectoryHotlistTemp.LoadTTreeView(tvDirectoryHotlist,-1); msgOK(format(rsMsgHotDirNbNewEntries, [NbOfAdditional])); end; end; //If user confirmed OK and have selected something... finally Free; end; end; finally WorkingDirectoryList.Free; end; end; end; { TfrmOptionsDirectoryHotlist.miSortDirectoryHotlistClick } //The trick here is that a "group number" identical has been assigned to the sibling between separator and then we sort //Teh sort has been arrange in such way that item from different group won't be mixed. procedure TfrmOptionsDirectoryHotlist.miSortDirectoryHotlistClick(Sender: TObject); var Dispatcher,Index:integer; StartingNode:TTreeNode; FlagKeepGoingBack:boolean; begin with Sender as TComponent do Dispatcher:=tag; for Index:=0 to pred(tvDirectoryHotlist.Items.Count) do THotDir(tvDirectoryHotlist.Items.Item[Index].Data).GroupNumber:=0; GlobalGroupNumber:=0; if tvDirectoryHotlist.SelectionCount>0 then begin case Dispatcher of 1,2: //current group only or current level begin for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin if THotDir(tvDirectoryHotlist.Selections[Index].Data).GroupNumber=0 then begin StartingNode:=tvDirectoryHotlist.Selections[Index]; case Dispatcher of 1: //We just need to make sure we start from first item of current level so we search the first one OR a separator begin FlagKeepGoingBack:=TRUE; while FlagKeepGoingBack do begin if StartingNode.GetPrevSibling<>nil then begin if THotDir(StartingNode.GetPrevSibling.Data).Dispatcher<>hd_SEPARATOR then StartingNode:=StartingNode.GetPrevSibling else FlagKeepGoingBack:=FALSE; end else begin FlagKeepGoingBack:=FALSE; end; end; end; 2: //We need to make sure we start from the first itm of current level begin while StartingNode.GetPrevSibling<>nil do StartingNode:=StartingNode.GetPrevSibling; end; end; RecursiveSetGroupNumbers(StartingNode,GetNextGroupNumber,FALSE,(Dispatcher=1)); end; end; end; 3,4: //submenu only, recusive or not begin for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin StartingNode:=tvDirectoryHotlist.Selections[Index].GetFirstChild; if StartingNode<>nil then begin if THotDir(StartingNode.Data).GroupNumber=0 then begin RecursiveSetGroupNumbers(StartingNode,GetNextGroupNumber,(Dispatcher=4),FALSE); end; end; end; end; end; end; if Dispatcher=5 then //We start from the very first one, the top one. begin StartingNode:=tvDirectoryHotlist.Items.Item[0]; RecursiveSetGroupNumbers(StartingNode,GetNextGroupNumber,TRUE,FALSE); end; //... and the finale! tvDirectoryHotlist.CustomSort(@MySortViaGroup); ClearCutAndPasteList; end; { TfrmOptionsDirectoryHotlist.miTestResultingHotlistMenuClick } procedure TfrmOptionsDirectoryHotlist.miTestResultingHotlistMenuClick(Sender: TObject); var p: TPoint; begin DirectoryHotlistTemp.RefreshFromTTreeView(tvDirectoryHotlist); //We need to refresh our temporary Directory Hotlist in case user played with the tree and added/removed/moved item(s). DirectoryHotlistTemp.PopulateMenuWithHotDir(pmHotDirTestMenu, @miShowWhereItWouldGo, nil, mpJUSTHOTDIRS, 0); p := tvDirectoryHotlist.ClientToScreen(Classes.Point(0, 0)); p.x:=p.x+tvDirectoryHotlist.Width; pmHotDirTestMenu.PopUp(p.X, p.Y); end; { TfrmOptionsDirectoryHotlist.miDetectIfPathExistClick } procedure TfrmOptionsDirectoryHotlist.miDetectIfPathExistClick(Sender: TObject); begin lbleditHotDirName.Text := ''; lbleditHotDirName.Enabled := False; lbleditHotDirPath.Visible := False; cbSortHotDirPath.Visible := False; cbSortHotDirTarget.Visible := False; lbleditHotDirTarget.Visible := False; btnRelativePath.Visible := False; btnRelativeTarget.Visible := False; Application.ProcessMessages; with Sender as TComponent do RefreshExistingProperty(tag); end; { TfrmOptionsDirectoryHotlist.ClearCutAndPasteList } procedure TfrmOptionsDirectoryHotlist.ClearCutAndPasteList; begin CutAndPasteIndexList.Clear; miPasteSelection.Enabled:=TRUE; end; { TfrmOptionsDirectoryHotlist.miCutSelectionClick } procedure TfrmOptionsDirectoryHotlist.miCutSelectionClick(Sender: TObject); var Index:integer; begin if tvDirectoryHotlist.SelectionCount>0 then begin for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin CutAndPasteIndexList.Add(IntToStr(tvDirectoryHotlist.Selections[Index].AbsoluteIndex)); end; miPasteSelection.Enabled:=TRUE; end; end; { TfrmOptionsDirectoryHotlist.miPasteSelectionClick } procedure TfrmOptionsDirectoryHotlist.miPasteSelectionClick(Sender: TObject); var DestinationNode:TTreeNode; Index:longint; begin if CutAndPasteIndexList.Count>0 then begin DestinationNode:=tvDirectoryHotlist.Selected; if DestinationNode<>nil then begin tvDirectoryHotlist.ClearSelection(FALSE); for Index:=0 to pred(CutAndPasteIndexList.Count) do begin tvDirectoryHotlist.Items.Item[StrToInt(CutAndPasteIndexList.Strings[Index])].Selected:=TRUE; end; for Index:=0 to pred(tvDirectoryHotlist.SelectionCount) do begin tvDirectoryHotlist.Selections[Index].MoveTo(DestinationNode,naInsert); end; ClearCutAndPasteList; end; end; end; { TfrmOptionsDirectoryHotlist.lbleditHotDirEnter } procedure TfrmOptionsDirectoryHotlist.lbleditHotDirEnter(Sender: TObject); begin with Sender as TLabeledEdit do begin pmPathHelper.Tag := tag; Font.Style := [fsBold]; EditLabel.Font.Style := [fsBold]; end; end; { TfrmOptionsDirectoryHotlist.lbleditHotDirExit } procedure TfrmOptionsDirectoryHotlist.lbleditHotDirExit(Sender: TObject); begin //If nothing currently selected, no need to update anything here. if tvDirectoryHotlist.Selected<>nil then begin with Sender as TLabeledEdit do begin pmPathHelper.Tag := 0; Font.Style := []; EditLabel.Font.Style := []; //Text not in bold anymore case tag of 1: //Hot dir name begin try //Make sure we actually have something, not an attempf of submenu or end of menu if (Text <> '') and (Text[1] <> '-') then begin //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirName <> Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirName := Text; tvDirectoryHotlist.Selected.Text:=Text; end; end; except //Just in case the "Text" is empty to don't show error with Text[1] check. end; end; 2: //Hot dir path begin try if (Text <> '') and (THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher = hd_CHANGEPATH) then Text := IncludeTrailingPathDelimiter(Text); //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath <> Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath := Text; THotDir(tvDirectoryHotlist.Selected.Data).HotDirExisting := DirExistUnknown; end; except //Just in case we have an empty list so "DirectoryHotlistTemp.HotDir[tvDirectoryHotlist.Selected.ImageIndex]" will not caused an error (since ItemIndex=-1 at this moment); end; end; 3: //Hot dir target begin try if (Text <> '') and (THotDir(tvDirectoryHotlist.Selected.Data).Dispatcher =hd_CHANGEPATH) then Text := IncludeTrailingPathDelimiter(Text); //Make sure it's different than what it was if THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget <> Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget := Text; end; except //Just in case we have an empty list so "DirectoryHotlistTemp.HotDir[tvDirectoryHotlist.Selected.ImageIndex]" will not caused an error (since ItemIndex=-1 at this moment); end; end; end; end; end; end; { TfrmOptionsDirectoryHotlist.lbleditHotDirKeyPress } procedure TfrmOptionsDirectoryHotlist.lbleditHotDirKeyPress(Sender: TObject; var Key: char); begin case Ord(Key) of $0D: //Enter? Let's save the field and we'll exit begin lbleditHotDirExit(Sender); //Doing this will SAVE the new typed text if it's different than what we have in memory for the entry. Then we could attempt to quit. end; $1B: //Escape? Place back the fields like they were begin with Sender as TLabeledEdit do begin //If typed text has been changed, yes we will restore it but if it was not change, we will quit so user won't have to press two times escape case tag of 1: if Text <> THotDir(tvDirectoryHotlist.Selected.Data).HotDirName then Key := #$00; 2: if Text <> THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath then Key := #00; 3: if Text <> THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget then Key := #00; end; case tag of 1: tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); 2: Text := THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath; 3: Text := THotDir(tvDirectoryHotlist.Selected.Data).HotDirTarget; end; end; if key <> #$1B then tvDirectoryHotlist.SetFocus; end; end; Application.ProcessMessages; end; { TfrmOptionsDirectoryHotlist.lbleditHotDirMouseDown } procedure TfrmOptionsDirectoryHotlist.lbleditHotDirMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: integer); begin with Sender as TComponent do pmPathHelper.Tag := tag; end; { TfrmOptionsDirectoryHotlist.anyRelativeAbsolutePathClick } procedure TfrmOptionsDirectoryHotlist.anyRelativeAbsolutePathClick(Sender: TObject); begin with Sender as TComponent do begin case tag of 2: begin lbleditHotDirPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirPath, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); if THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath <>lbleditHotDirPath.Text then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirPath := lbleditHotDirPath.Text; end; end; 4: begin lbleditHotDirPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirPath, pfPATH); pmCommandHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; 3: begin lbleditHotDirTarget.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(lbleditHotDirTarget, pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; end; end; { TfrmOptionsDirectoryHotlist.cbSortHotDirPathChange } procedure TfrmOptionsDirectoryHotlist.cbSortHotDirPathChange(Sender: TObject); begin if Assigned(tvDirectoryHotlist.Selected) then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirPathSort := cbSortHotDirPath.ItemIndex; end; end; { TfrmOptionsDirectoryHotlist.cbSortHotDirTargetChange } procedure TfrmOptionsDirectoryHotlist.cbSortHotDirTargetChange(Sender: TObject); begin if Assigned(tvDirectoryHotlist.Selected) then begin THotDir(tvDirectoryHotlist.Selected.Data).HotDirTargetSort := cbSortHotDirTarget.ItemIndex; end; end; { TfrmOptionsDirectoryHotlist.miShowWhereItWouldGo } procedure TfrmOptionsDirectoryHotlist.miShowWhereItWouldGo(Sender: TObject); var StringToShow: string; begin with Sender as TComponent do begin StringToShow := rsMsgHotDirDemoName + '"' + DirectoryHotlistTemp.HotDir[tag].HotDirName + '"'; case DirectoryHotlistTemp.HotDir[tag].Dispatcher of hd_CHANGEPATH: begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoPath; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirPath); if DirectoryHotlistTemp.HotDir[tag].HotDirTarget <> '' then begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoTarget; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirTarget); end; end; hd_COMMAND: begin StringToShow := StringToShow + #$0D + #$0A + #$0D + #$0A + rsMsgHotDirDemoCommand; StringToShow := StringToShow + #$0D + #$0A + mbExpandFileName(DirectoryHotlistTemp.HotDir[tag].HotDirPath); end; end; msgOK(StringToShow); end; end; { TfrmOptionsDirectoryHotlist.miSimplyCopyCaption } procedure TfrmOptionsDirectoryHotlist.miSimplyCopyCaption(Sender: TObject); begin with Sender as TMenuItem do begin if lbleditHotDirPath.Text = '' then lbleditHotDirPath.Text := Caption else lbleditHotDirPath.Text := Caption + ' ' + lbleditHotDirPath.Text; end; end; { TfrmOptionsDirectoryHotlist.PopulatePopupMenuWithCommands } procedure TfrmOptionsDirectoryHotlist.PopulatePopupMenuWithCommands(pmMenuToPopulate: TPopupMenu); var FFormCommands: IFormCommands; LocalDummyComboBox: TComboBox; miMainTree: TMenuItem; IndexCommand: longint; procedure LocalPopulateUntil(ParamMenuItem: TMenuItem; LetterUpTo: char); var LocalMenuItem: TMenuItem; MaybeItemName: string; begin MaybeItemName := '0000'; while (IndexCommand < LocalDummyComboBox.Items.Count) and (MaybeItemName[4] <> LetterUpTo) do begin MaybeItemName := LocalDummyComboBox.Items.Strings[IndexCommand]; if MaybeItemName[4] <> LetterUpTo then begin LocalMenuItem := TMenuItem.Create(ParamMenuItem); LocalMenuItem.Caption := MaybeItemName; LocalMenuItem.OnClick := @miSimplyCopyCaption; ParamMenuItem.Add(LocalMenuItem); Inc(IndexCommand); end; end; end; begin LocalDummyComboBox := TComboBox.Create(Self); try LocalDummyComboBox.Clear; FFormCommands := frmMain as IFormCommands; FFormCommands.GetCommandsList(LocalDummyComboBox.Items); LocalDummyComboBox.Sorted := True; IndexCommand := 0; miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_A..cm_C'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'D'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_D..cm_L'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'M'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_M..cm_R'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'S'); miMainTree := TMenuItem.Create(pmMenuToPopulate); miMainTree.Caption := 'cm_S..cm_Z'; pmMenuToPopulate.Items.Add(miMainTree); LocalPopulateUntil(miMainTree, 'A'); finally LocalDummyComboBox.Free; end; end; { TfrmOptionsDirectoryHotlist.ActualAddDirectories } function TfrmOptionsDirectoryHotlist.ActualAddDirectories(ParamDispatcher: TKindOfHotDirEntry; sName, sPath, sTarget: string; InsertOrAdd:integer): TTreeNode; var LocalHotDir: THotDir; WorkingTreeNode:TTreeNode; const SelectedNoAttachedMode:array[1..3] of TNodeAttachMode = (naInsert,naInsertBehind,naAddChildFirst); begin ClearCutAndPasteList; LocalHotDir := THotDir.Create; LocalHotDir.Dispatcher := ParamDispatcher; LocalHotDir.HotDirName := sName; LocalHotDir.HotDirPath := IncludeTrailingPathDelimiter(sPath); if sTarget <> '' then LocalHotDir.HotDirTarget := IncludeTrailingPathDelimiter(sTarget); DirectoryHotlistTemp.Add(LocalHotDir); WorkingTreeNode:=tvDirectoryHotlist.Selected; if WorkingTreeNode<>nil then result:=tvDirectoryHotlist.Items.AddNode(nil,WorkingTreeNode, sName,LocalHotDir,SelectedNoAttachedMode[InsertOrAdd]) else result:=tvDirectoryHotlist.Items.AddNode(nil,nil,sName,LocalHotDir,naAddFirst); case ParamDispatcher of hd_STARTMENU: begin result.ImageIndex:=ICONINDEX_SUBMENU; result.SelectedIndex:=ICONINDEX_SUBMENU; result.StateIndex:=ICONINDEX_SUBMENU; end; hd_CHANGEPATH: begin result.ImageIndex:=ICONINDEX_NEWADDEDDIRECTORY; result.SelectedIndex:=ICONINDEX_NEWADDEDDIRECTORY; result.StateIndex:=ICONINDEX_NEWADDEDDIRECTORY; end; end; end; { TfrmOptionsDirectoryHotlist.RefreshTreeView } procedure TfrmOptionsDirectoryHotlist.RefreshTreeView(NodeToSelect:TTreeNode); begin if NodeToSelect<>nil THEN begin tvDirectoryHotlist.ClearSelection(FALSE); NodeToSelect.Selected:=TRUE; end else begin tvDirectoryHotlistSelectionChanged(tvDirectoryHotlist); //At least to hide path, target, etc. end; btnExport.Enabled := (tvDirectoryHotlist.Items.Count > 0); miSaveBackupHotlist.Enabled := (tvDirectoryHotlist.Items.Count > 0); end; function CompareStringsFromTStringList(List: TStringList; Index1, Index2: Integer): Integer; begin Result := CompareStrings(List.Strings[Index1], List.Strings[Index2], gSortNatural, gSortCaseSensitivity); end; { TfrmOptionsDirectoryHotlist.TryToGetCloserHotDir } //This routine "tries" to find the best place to eventually add a new directory in the tree accoring to directory names and ones alreayd in the tree. //ALSO, it will set the flag "bShouldBeAfter" to indicate if it should be "BEFORE" or "AFTER" what is returned. //"PerfectMatchIndex" is when the directory is found *exactly* in the tree as is. In other words, already there. //"SecondAlternative" is when the directory is not there, but one close to it is // function TfrmOptionsDirectoryHotlist.TryToGetCloserHotDir(sDirToFindAPlaceFor: string; var TypeOfAddition:Integer): TTreeNode; var BestOne, I: integer; localDirToFindAPlaceFor: string; sRepresentantString,sUnderPart,sOverPart:string; MagickSortedList:TStringList; function GetNumberOfIdenticalStartChars(A:string):longint; var I:integer; begin result:=0; I:=1; while (I<UTF8Length(A)) AND (I<UTF8Length(localDirToFindAPlaceFor)) do begin if A[I]=localDirToFindAPlaceFor[I] then inc(result) else I:=UTF8Length(A); inc(I); end; end; function GetBestDir(DirA,DirB:string):integer; var lengthA,lengthB:integer; begin lengthA:=GetNumberOfIdenticalStartChars(DirA); lengthB:=GetNumberOfIdenticalStartChars(DirB); if (lengthA=0) AND (lengthB=0) then begin result:=0; end else begin if lengthA>lengthB then result:=-1 else result:=1; end; end; begin result:=nil; TypeOfAddition:=ACTION_ADDHOTDIR; localDirToFindAPlaceFor := UTF8LowerCase(IncludeTrailingPathDelimiter(sDirToFindAPlaceFor)); //1st, let's try to see if we have an entry with the same *exact* directory I := 0; while (result=nil) AND (I < tvDirectoryHotlist.Items.Count) do begin if THotDir(tvDirectoryHotlist.Items.Item[I].Data).Dispatcher = hd_CHANGEPATH then begin if localDirToFindAPlaceFor = UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[I].Data).HotDirPath))) then result:=tvDirectoryHotlist.Items.Item[I]; end; inc(I); end; //2nd, if nothing found, here is the "lazy-but-probably-easiest-to-write-method" if result=nil then begin MagickSortedList:=TStringList.Create; try MagickSortedList.Clear; for I:=0 to pred(tvDirectoryHotlist.Items.Count) do begin if THotDir(tvDirectoryHotlist.Items.Item[I].Data).Dispatcher = hd_CHANGEPATH then begin sRepresentantString:=UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[I].Data).HotDirPath)))+IntToStr(I); MagickSortedList.Add(sRepresentantString); end; end; MagickSortedList.Add(localDirToFindAPlaceFor); //We call a custom sort to make sure sort order will make the sequence "école - Eric - Érika" MagickSortedList.CustomSort(@CompareStringsFromTStringList); I:=MagickSortedList.IndexOf(localDirToFindAPlaceFor); if I=0 then sUnderPart:='' else sUnderPart:=UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I-1]))].Data).HotDirPath))); if I=pred(MagickSortedList.Count) then sOverPart:='' else sOverPart:=UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(THotDir(tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I+1]))].Data).HotDirPath))); BestOne:=GetBestDir(sUnderPart,sOverPart); case BestOne of -1: result:=tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I-1]))]; 1: result:=tvDirectoryHotlist.Items.Item[StrToInt(GetLastDir(MagickSortedList.Strings[I+1]))]; end; if result<>nil then begin if CompareStrings(localDirToFindAPlaceFor, UTF8LowerCase(IncludeTrailingPathDelimiter(mbExpandFileName(tHotDir(result.Data).HotDirPath))), gSortNatural, gSortCaseSensitivity) = -1 then TypeOfAddition:=ACTION_INSERTHOTDIR; end; finally MagickSortedList.Free; end; end; end; { TfrmOptionsDirectoryHotlist.TryToGetExactHotDir } function TfrmOptionsDirectoryHotlist.TryToGetExactHotDir(const index:integer):TTreeNode; var SearchingtvIndex:integer; begin result:=nil; SearchingtvIndex:=0; while (SearchingtvIndex<pred(tvDirectoryHotlist.Items.count)) AND (result=nil) do begin if tvDirectoryHotlist.Items[SearchingtvIndex].Data = DirectoryHotlistTemp.Items[Index] then result:=tvDirectoryHotlist.Items[SearchingtvIndex] else inc(SearchingtvIndex); end; end; { TfrmOptionsDirectoryHotlist.RecursiveSetGroupNumbers } procedure TfrmOptionsDirectoryHotlist.RecursiveSetGroupNumbers(ParamNode:TTreeNode; ParamGroupNumber:integer; DoRecursion,StopAtFirstGroup:boolean); var MaybeChild:TTreeNode; begin repeat if DoRecursion then begin MaybeChild:=ParamNode.GetFirstChild; if MaybeChild<>nil then RecursiveSetGroupNumbers(MaybeChild,GetNextGroupNumber,DoRecursion,StopAtFirstGroup); end; if THotDir(ParamNode.Data).Dispatcher<>hd_SEPARATOR then begin THotDir(ParamNode.Data).GroupNumber:=ParamGroupNumber; end else begin ParamGroupNumber:=GetNextGroupNumber; if StopAtFirstGroup then while ParamNode<>nil do ParamNode:=ParamNode.GetNextSibling; //To exit the loop! end; if ParamNode<>nil then ParamNode:=ParamNode.GetNextSibling; until ParamNode=nil; end; { TfrmOptionsDirectoryHotlist.RefreshExistingProperty } procedure TfrmOptionsDirectoryHotlist.RefreshExistingProperty(ScanMode: integer); var Index, LocalThreadCount: longint; ListOfAlreadyCheckDrive, ListOfNonExistingDrive: TStringList; RememberCursor: TCursor; FreezeTime : dword; procedure StartThreadToSeeIfThisDriveExists(const sDrive: string); begin TCheckDrivePresenceThread.Create(sDrive, ListOfNonExistingDrive, LocalThreadCount); end; //Since we do that for both "Path" and "Target", it was useful to place in a routine so we can call two times the same routine procedure ScanForThisDir(DirToScan: string); var localPath, localDrive: string; begin localPath := ExcludeTrailingPathDelimiter(mbExpandFileName(DirToScan)); localDrive := UpperCase(ExtractFileDrive(localPath)); if ListOfAlreadyCheckDrive.IndexOf(localDrive) = -1 then begin Inc(LocalThreadCount); StartThreadToSeeIfThisDriveExists(localDrive); ListOfAlreadyCheckDrive.Add(localDrive); end; end; procedure RecursivelySetIconFolderNotPresent(WorkingTreeNode:TTreeNode); begin if WorkingTreeNode.Parent<>nil then begin if WorkingTreeNode.Parent.ImageIndex<>ICONINDEX_SUBMENUWITHMISSING then begin THotDir(WorkingTreeNode.Parent.Data).HotDirExisting:=DirNotExist; WorkingTreeNode.Parent.ImageIndex:=ICONINDEX_SUBMENUWITHMISSING; WorkingTreeNode.Parent.SelectedIndex:=ICONINDEX_SUBMENUWITHMISSING; WorkingTreeNode.Parent.StateIndex:=ICONINDEX_SUBMENUWITHMISSING; RecursivelySetIconFolderNotPresent(WorkingTreeNode.Parent); end; end; end; //Since we do that for both "Path" and "Target", it was useful to place in a routine so we can call two times the same routine function CheckIfThisDirectoryExists(RequestedDirectoryToCheck: string): boolean; var localPath, localDrive: string; begin if RequestedDirectoryToCheck <> '' then begin Result := False; localPath := ExcludeTrailingPathDelimiter(mbExpandFileName(RequestedDirectoryToCheck)); localDrive := UpperCase(ExtractFileDrive(localPath)); lbleditHotDirName.Text := localPath; Application.ProcessMessages; if ListOfNonExistingDrive.IndexOf(localDrive) = -1 then begin Result := mbDirectoryExists(localPath); end; if not Result then begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirNotExist; tvDirectoryHotlist.Items.Item[Index].ImageIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; tvDirectoryHotlist.Items.Item[Index].SelectedIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; tvDirectoryHotlist.Items.Item[Index].StateIndex:=ICONINDEX_DIRECTORYNOTPRESENTHERE; RecursivelySetIconFolderNotPresent(tvDirectoryHotlist.Items.Item[Index]); end; end else begin Result := True; end; end; begin RememberCursor := Screen.Cursor; SetNormalIconsInTreeView; try Screen.Cursor := crHourGlass; ListOfAlreadyCheckDrive := TStringList.Create; ListOfAlreadyCheckDrive.Sorted := False; ListOfAlreadyCheckDrive.Clear; ListOfNonExistingDrive := TStringList.Create; ListOfNonExistingDrive.Sorted := False; ListOfNonExistingDrive.Clear; try LocalThreadCount := 0; //First, let's build a list of the "\\ServerName" that exists and let's check them in MultiThread //We scan only once each drive and "\\ServerName" //"\\ServerName" have a long timeout so that's why we check them this way for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do begin case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of hd_CHANGEPATH: begin ScanForThisDir(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirPath); if ScanMode = 2 then ScanForThisDir(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirTarget); end; end; end; //Let's wait all the threads to complete //10 seconds timeout in case it never ends for whatever reason FreezeTime := GetTickCount; while (LocalThreadCount <> 0) AND ((FreezeTime+10000)>FreezeTime) do begin lbleditHotDirName.Text := IntToStr(LocalThreadCount); Application.ProcessMessages; if LocalThreadCount = 0 then Sleep(100); end; //Second, now let's scan if the director exists! for Index := 0 to pred(tvDirectoryHotlist.Items.Count) do begin case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of hd_CHANGEPATH: begin if CheckIfThisDirectoryExists(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirPath) then begin case ScanMode of 1: begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirExist; end; 2: begin if CheckIfThisDirectoryExists(THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirTarget) then begin THotDir(tvDirectoryHotlist.Items.Item[Index].Data).HotDirExisting := DirExist; end; end; end; //case ScanMode end; end; //hd_CHANGEPATH: end; //case THotDir(tvDirectoryHotlist.Items.Item[Index].Data).Dispatcher of end; finally ListOfAlreadyCheckDrive.Free; ListOfNonExistingDrive.Free; end; finally Screen.Cursor := RememberCursor; end; tvDirectoryHotlist.Refresh; end; { TfrmOptionsDirectoryHotlist.SetNormalIconsInTreeView } procedure TfrmOptionsDirectoryHotlist.SetNormalIconsInTreeView; var Index:integer; begin for Index:=0 to pred(tvDirectoryHotlist.Items.count) do begin if tvDirectoryHotlist.Items.Item[Index].GetFirstChild=nil then begin tvDirectoryHotlist.Items.Item[Index].ImageIndex:=-1; tvDirectoryHotlist.Items.Item[Index].SelectedIndex:=-1; tvDirectoryHotlist.Items.Item[Index].StateIndex:=-1; end else begin tvDirectoryHotlist.Items.Item[Index].ImageIndex:=ICONINDEX_SUBMENU; tvDirectoryHotlist.Items.Item[Index].SelectedIndex:=ICONINDEX_SUBMENU; tvDirectoryHotlist.Items.Item[Index].StateIndex:=ICONINDEX_SUBMENU; end; end; end; { TfrmOptionsDirectoryHotlist.MySortViaGroup } function TfrmOptionsDirectoryHotlist.MySortViaGroup(Node1, Node2: TTreeNode): integer; begin if (THotdir(Node1.Data).GroupNumber=THotDir(Node2.Data).GroupNumber) AND (THotdir(Node1.Data).GroupNumber<>0) then begin result:=CompareStrings(THotdir(Node1.Data).HotDirName,THotDir(Node2.Data).HotDirName, gSortNatural, gSortCaseSensitivity) end else begin if Node1.AbsoluteIndex<Node2.AbsoluteIndex then result:=-1 else result:=1; end; end; { TfrmOptionsDirectoryHotlist.CopyTTreeViewToAnother } procedure TfrmOptionsDirectoryHotlist.CopyTTreeViewToAnother(tvSource,tvDestination:TTreeView); procedure RecursiveNodeCopy(SourceNode,DestNode:TTreeNode); var NewNode:TTreeNode; begin repeat NewNode:=tvDestination.Items.AddChild(DestNode,SourceNode.Text); NewNode.Assign(SourceNode); if SourceNode.GetFirstChild<>nil then begin RecursiveNodeCopy(SourceNode.GetFirstChild,NewNode); end; SourceNode:=SourceNode.GetNextSibling; until SourceNode=nil; end; begin if tvSource.Items.GetFirstNode<>nil then RecursiveNodeCopy(tvSource.Items.GetFirstNode,nil); end; { TfrmOptionsDirectoryHotlist.GetNextGroupNumber } function TfrmOptionsDirectoryHotlist.GetNextGroupNumber:integer; begin GlobalGroupNumber:=GlobalGroupNumber+1; result:=GlobalGroupNumber; end; { TfrmOptionsDirectoryHotlist.SubmitToAddOrConfigToHotDirDlg } procedure TfrmOptionsDirectoryHotlist.SubmitToAddOrConfigToHotDirDlg(paramActionDispatcher: integer; paramPath,paramTarget:string; paramOptionalIndex: integer); var TypeOfAddition, IndexFile: longint; sTempo: string; NodeToSelect:TTreeNode=nil; SelectedOrActiveDirectories:TFiles; procedure AddThisSubmittedDirectory(DirectoryPath:string); begin if ((paramActionDispatcher=ACTION_ADDTOHOTLIST) AND (cbAddTarget.Checked)) OR (paramActionDispatcher=ACTION_ADDBOTHTOHOTLIST) then sTempo := IncludeTrailingPathDelimiter(paramTarget) else sTempo := ''; if gWhereToAddNewHotDir = ahdLast then TypeOfAddition:=ACTION_ADDHOTDIR else TypeOfAddition:=ACTION_INSERTHOTDIR; NodeToSelect:=nil; if (tvDirectoryHotlist.Items.Count>0) then begin case gWhereToAddNewHotDir of ahdFirst: NodeToSelect:=tvDirectoryHotlist.Items.Item[0]; ahdLast : NodeToSelect:=tvDirectoryHotlist.Items.Item[pred(tvDirectoryHotlist.Items.Count)]; ahdSmart: NodeToSelect:=TryToGetCloserHotDir(DirectoryPath,TypeOfAddition); else NodeToSelect:=tvDirectoryHotlist.Items.Item[0]; end; if NodeToSelect<>nil then NodeToSelect.Selected:=TRUE; end; NodeToSelect := ActualAddDirectories(hd_CHANGEPATH, GetLastDir(DirectoryPath), DirectoryPath, sTempo,TypeOfAddition); end; begin case paramActionDispatcher of ACTION_ADDTOHOTLIST, ACTION_ADDJUSTSOURCETOHOTLIST, ACTION_ADDBOTHTOHOTLIST: begin AddThisSubmittedDirectory(paramPath); end; ACTION_CONFIGTOHOTLIST: begin NodeToSelect := TryToGetCloserHotDir(paramPath,TypeOfAddition); end; ACTION_JUSTSHOWCONFIGHOTLIST: begin if tvDirectoryHotlist.Items.Count>0 then NodeToSelect:=tvDirectoryHotlist.Items.Item[0]; end; ACTION_ADDSELECTEDDIR: begin SelectedOrActiveDirectories:=frmMain.ActiveFrame.CloneSelectedOrActiveDirectories; try if SelectedOrActiveDirectories.count>0 then begin for IndexFile:=0 to pred(SelectedOrActiveDirectories.Count) do AddThisSubmittedDirectory(ExcludeTrailingPathDelimiter(SelectedOrActiveDirectories[IndexFile].FullPath)); end; finally FreeAndNil(SelectedOrActiveDirectories); end; end; ACTION_DIRECTLYCONFIGENTRY: begin NodeToSelect := TryToGetExactHotDir(paramOptionalIndex); end end; if (NodeToSelect=nil) AND (tvDirectoryHotlist.Items.Count>0) then NodeToSelect:=tvDirectoryHotlist.Items.Item[0]; RefreshTreeView(NodeToSelect); //2014-08-27: These lines are a workaround a problem present at this moment in Lazarus regarding TSpeedButton present inside a TGroupBox. //See on the web if the following case is solved prior to remove these lines: http://bugs.freepascal.org/view.php?id=26638 {$IFDEF MSWINDOWS} if tvDirectoryHotlist.CanFocus then begin LCLSendMouseDownMsg(Self,1,1,mbLeft,[]); LCLSendMouseUpMsg(Self,1,1,mbLeft,[]); end; {$ENDIF MSWINDOWS} if not tvDirectoryHotlist.Focused then if tvDirectoryHotlist.CanFocus then tvDirectoryHotlist.SetFocus; if not lbleditHotDirName.Focused then if lbleditHotDirName.CanFocus then lbleditHotDirName.SetFocus; end; { TfrmOptionsDirectoryHotlist.miGotoConfigureTCInfoClick } procedure TfrmOptionsDirectoryHotlist.miGotoConfigureTCInfo2Click(Sender: TObject); begin BringUsToTCConfigurationPage; end; { TfrmOptionsDirectoryHotlist.GenericSomethingChanged } procedure TfrmOptionsDirectoryHotlist.GenericSomethingChanged(Sender: TObject); begin FModificationTookPlace := True; end; { TfrmOptionsDirectoryHotlist.Init } procedure TfrmOptionsDirectoryHotlist.Init; begin pnlBottom.Constraints.MinHeight := pnlBottom.Height; ParseLineToList(rsOptAddFromMainPanel, rgWhereToAdd.Items); ParseLineToList(rsHotDirForceSortingOrderChoices, cbSortHotDirPath.Items); ParseLineToList(rsHotDirForceSortingOrderChoices, cbSortHotDirTarget.Items); end; { TODO -oDB : Would be nice if directory does not exist to offer immediately to re-configure it. } { TODO -oDB : Be able to add a quick 16x16 icon to some friendly shortcut like a little star or something to help to see a special entry. } { TODO -oDB : Would be nice to have also a COPY-and-PASTE in addition to CUT-and-PASTE. Also, make sure to create new THotDir entry, not just copy entries in tree otherwise it's not good. } end. �������������������doublecmd-0.7.1/src/frames/foptionsfilesviews.lrt���������������������������������������������������0000644�0001750�0000144�00000002550�12423151100�021235� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION=Sorting TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION=&Sort method: TFRMOPTIONSFILESVIEWS.LBLCASESENSITIVITY.CAPTION=Case s&ensitivity: TFRMOPTIONSFILESVIEWS.LBLSORTFOLDERMODE.CAPTION=So&rting directories: TFRMOPTIONSFILESVIEWS.LBLNEWFILESPOSITION.CAPTION=&Insert new files TFRMOPTIONSFILESVIEWS.LBLUPDATEDFILESPOSITION.CAPTION=&Move updated files TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION=&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>) TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION=S&how square brackets around directories TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION=Show s&ystem and hidden files TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION=Load &file list in separate thread TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION=Load icons af&ter file list TFRMOPTIONSFILESVIEWS.CBDELAYLOADINGTABS.CAPTION=Do&n't load file list until a tab is activated TFRMOPTIONSFILESVIEWS.CBHIGHLIGHTUPDATEDFILES.CAPTION=Hi&ghlight new and updated files TFRMOPTIONSFILESVIEWS.CBINPLACERENAME.CAPTION=Enable inplace &renaming when clicking twice on a name TFRMOPTIONSFILESVIEWS.GBFORMATTING.CAPTION=Formatting TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION=&Date and time format: TFRMOPTIONSFILESVIEWS.LBLFILESIZEFORMAT.CAPTION=File si&ze format: TFRMOPTIONSFILESVIEWS.LBLDATETIMEEXAMPLE.CAPTION=Incorrect format ��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/fsearchplugin.lrt��������������������������������������������������������0000644�0001750�0000144�00000000751�12405254761�020147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSEARCHPLUGIN.BTNADD.CAPTION=&More rules TFRMSEARCHPLUGIN.BTNDELETE.CAPTION=L&ess rules TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT=Plugin TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[1].TEXT=Field TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[2].TEXT=Operator TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT=Value TFRMSEARCHPLUGIN.CHKUSEPLUGINS.CAPTION=Use &content plugins, combine with: TFRMSEARCHPLUGIN.RBAND.CAPTION=&AND (all match) TFRMSEARCHPLUGIN.RBOR.CAPTION=&OR (any match) �����������������������doublecmd-0.7.1/src/frames/foptionsautorefresh.lrt��������������������������������������������������0000644�0001750�0000144�00000001015�12020403374�021405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION=Refresh file list TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION=When &files are created, deleted or renamed TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION=When &size, date or attributes change TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION=Disable auto-refresh TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION=When application is in the &background TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION=For the following &paths and their subdirectories: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolbar.pas������������������������������������������������������0000644�0001750�0000144�00000200110�12660674103�020511� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Toolbar configuration options page Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsToolbar; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Buttons, Menus, fOptionsFrame, KASToolBar, KASToolItems, uFormCommands, uHotkeyManager, DCBasicTypes, fOptionsHotkeysEditHotkey, DCXmlConfig; type { TfrmOptionsToolbar } TfrmOptionsToolbar = class(TOptionsEditor) btnInsertButton: TButton; btnCloneButton: TButton; btnDeleteButton: TButton; btnParametersHelper: TSpeedButton; btnSuggestionTooltip: TButton; btnOpenFile: TButton; btnEditHotkey: TButton; btnOpenCmdDlg: TButton; btnRelativeStartPath: TSpeedButton; btnStartPath: TButton; btnRelativeIconFileName: TSpeedButton; btnRemoveHotkey: TButton; cbInternalCommand: TComboBox; cbFlatButtons: TCheckBox; edtExternalParameters: TEdit; edtExternalCommand: TEdit; lblHelpOnInternalCommand: TLabel; lblHotkeyValue: TLabel; edtStartPath: TEdit; edtToolTip: TEdit; gbGroupBox: TGroupBox; edtIconFileName: TEdit; lblInternalParameters: TLabel; lblBarSize: TLabel; lblBarSizeValue: TLabel; lblInternalCommand: TLabel; lblExternalCommand: TLabel; lblHotkey: TLabel; lblIconFile: TLabel; lblIconSize: TLabel; lblIconSizeValue: TLabel; lblExternalParameters: TLabel; lblStartPath: TLabel; lblToolTip: TLabel; edtInternalParameters: TMemo; miSrcRplIconNames: TMenuItem; miSrcRplCommands: TMenuItem; miSrcRplParameters: TMenuItem; miSrcRplStartPath: TMenuItem; miSrcRplClickSeparator: TMenuItem; miSrcRplAllOfAll: TMenuItem; miSearchAndReplace: TMenuItem; miExportCurrent: TMenuItem; miImportAllDCCommands: TMenuItem; miAddSeparatorSubMenu: TMenuItem; miExternalCommandFirstElement: TMenuItem; miSubToolBarFirstElement: TMenuItem; miInternalCommandPriorCurrent: TMenuItem; miExternalCommandPriorCurrent: TMenuItem; miSubToolBarPriorCurrent: TMenuItem; miInternalCommandAfterCurrent: TMenuItem; miExternalCommandAfterCurrent: TMenuItem; miSubToolBarAfterCurrent: TMenuItem; miInternalCommandLastElement: TMenuItem; miExternalCommandLastElement: TMenuItem; miAddInternalCommandSubMenu: TMenuItem; miSubToolBarLastElement: TMenuItem; miAddExternalCommandSubMenu: TMenuItem; miAddSubToolBarSubMenu: TMenuItem; miSeparatorFirstItem: TMenuItem; miSeparatorPriorCurrent: TMenuItem; miSeparatorAfterCurrent: TMenuItem; miSeparatorLastElement: TMenuItem; miInternalCommandFirstElement: TMenuItem; OpenDialog: TOpenDialog; pmPathHelper: TPopupMenu; pnlEditControls: TPanel; pnlFullToolbarButtons: TPanel; pnlEditToolbar: TPanel; pnlToolbarButtons: TPanel; pmInsertButtonMenu: TPopupMenu; pmparameteresHelper: TPopupMenu; ReplaceDialog: TReplaceDialog; rgToolItemType: TRadioGroup; btnOpenIcon: TButton; pnToolbars: TPanel; btnRelativeExternalCommand: TSpeedButton; trbBarSize: TTrackBar; trbIconSize: TTrackBar; miImportSeparator: TMenuItem; SaveDialog: TSaveDialog; cbReportErrorWithCommands: TCheckBox; btnOther: TButton; pmOtherClickToolbar: TPopupMenu; miAddAllCmds: TMenuItem; miSeparator1: TMenuItem; miExport: TMenuItem; miExportTop: TMenuItem; miExportTopToDCBar: TMenuItem; miExportSeparator1: TMenuItem; miExportTopToTCIniKeep: TMenuItem; miExportTopToTCIniNoKeep: TMenuItem; miExportSeparator2: TMenuItem; miExportTopToTCBarKeep: TMenuItem; miExportTopToTCBarNoKeep: TMenuItem; miExportCurrentToDCBar: TMenuItem; miExportSeparator3: TMenuItem; miExportCurrentToTCIniKeep: TMenuItem; miExportCurrentToTCIniNoKeep: TMenuItem; miExportSeparator4: TMenuItem; miExportCurrentToTCBarKeep: TMenuItem; miExportCurrentToTCBarNoKeep: TMenuItem; miImport: TMenuItem; miImportDCBAR: TMenuItem; miImportDCBARReplaceTop: TMenuItem; miSeparator8: TMenuItem; miImportDCBARAddTop: TMenuItem; miImportDCBARAddMenuTop: TMenuItem; miSeparator9: TMenuItem; miImportDCBARAddCurrent: TMenuItem; miImportDCBARAddMenuCurrent: TMenuItem; miImportSeparator2: TMenuItem; miImportTCINI: TMenuItem; miImportTCINIReplaceTop: TMenuItem; miSeparator6: TMenuItem; miImportTCINIAddTop: TMenuItem; miImportTCINIAddMenuTop: TMenuItem; miSeparator7: TMenuItem; miImportTCINIAddCurrent: TMenuItem; miImportTCINIAddMenuCurrent: TMenuItem; miImportTCBAR: TMenuItem; miImportTCBARReplaceTop: TMenuItem; miSeparator10: TMenuItem; miImportTCBARAddTop: TMenuItem; miImportTCBARAddMenuTop: TMenuItem; miSeparator11: TMenuItem; miImportTCBARAddCurrent: TMenuItem; miImportTCBARAddMenuCurrent: TMenuItem; miSeparator2: TMenuItem; miBackup: TMenuItem; miExportTopToBackup: TMenuItem; miImportBackup: TMenuItem; miImportBackupReplaceTop: TMenuItem; miSeparator13: TMenuItem; miImportBackupAddTop: TMenuItem; miImportBackupAddMenuTop: TMenuItem; miSeparator14: TMenuItem; miImportBackupAddCurrent: TMenuItem; miImportBackupAddMenuCurrent: TMenuItem; procedure btnEditHotkeyClick(Sender: TObject); procedure btnInsertButtonClick(Sender: TObject); procedure btnOpenCmdDlgClick(Sender: TObject); procedure btnParametersHelperClick(Sender: TObject); procedure btnRelativeExternalCommandClick(Sender: TObject); procedure btnRelativeIconFileNameClick(Sender: TObject); procedure btnRelativeStartPathClick(Sender: TObject); procedure btnRemoveHotKeyClick(Sender: TObject); procedure btnCloneButtonClick(Sender: TObject); procedure btnDeleteButtonClick(Sender: TObject); procedure btnOpenFileClick(Sender: TObject); procedure btnStartPathClick(Sender: TObject); procedure btnSuggestionTooltipClick(Sender: TObject); procedure cbInternalCommandSelect(Sender: TObject); procedure cbFlatButtonsChange(Sender: TObject); procedure edtIconFileNameChange(Sender: TObject); procedure lblHelpOnInternalCommandClick(Sender: TObject); procedure miAddAllCmdsClick(Sender: TObject); procedure miInsertButtonClick(Sender: TObject); procedure miSrcRplClick(Sender: TObject); procedure ToolbarDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean); procedure ToolbarDragDrop(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer); function ToolbarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; procedure ToolbarToolButtonClick(Sender: TObject); procedure ToolbarToolButtonDragDrop(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer); procedure ToolbarToolButtonDragOver(Sender, Source: TObject; {%H-}X, {%H-}Y: Integer; {%H-}State: TDragState; var Accept: Boolean; {%H-}NumberOfButton: Integer); procedure ToolbarToolButtonMouseDown(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; X, Y: Integer); procedure ToolbarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer); procedure ToolbarToolButtonMouseUp(Sender: TObject; {%H-}Button: TMouseButton; {%H-}Shift: TShiftState; {%H-}X, {%H-}Y: Integer); procedure btnOpenIconClick(Sender: TObject); function ToolbarToolItemShortcutsHint(ToolItem: TKASNormalItem): String; procedure rgToolItemTypeSelectionChanged(Sender: TObject); procedure trbBarSizeChange(Sender: TObject); procedure trbIconSizeChange(Sender: TObject); procedure FrameEnter(Sender: TObject); function ComputeToolbarsSignature: dword; procedure btnOtherClick(Sender: TObject); procedure miExportToAnythingClick(Sender: TObject); procedure miImportFromAnythingClick(Sender: TObject); procedure GenericSomethingChanged(Sender: TObject); private FUpdateHotKey: Boolean; FCurrentButton: TKASToolButton; FEditForm: TfrmEditHotkey; FFormCommands: IFormCommands; FToolButtonMouseX, FToolButtonMouseY, FToolDragButtonNumber: Integer; // For dragging FUpdatingButtonType: Boolean; FUpdatingIconText: Boolean; bFirstTimeDrawn: boolean; FModificationTookPlace: boolean; FLastLoadedToolbarsSignature: dword; function AddNewSubToolbar(ToolItem: TKASMenuItem): TKASToolBar; procedure ApplyEditControls; procedure CloseToolbarsBelowCurrentButton; procedure CloseToolbar(Index: Integer); function CreateToolbar(Items: TKASToolBarItems): TKASToolBar; class function FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey; class function FindHotkey(NormalItem: TKASNormalItem): THotkey; function GetTopToolbar: TKASToolBar; procedure LoadCurrentButton; procedure LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode; ConfigurationLoadType: TTypeOfConfigurationLoad); procedure PressButtonDown(Button: TKASToolButton); procedure UpdateIcon(Icon: String); procedure DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram: boolean); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; class function GetTitle: String; override; procedure SelectButton(ButtonNumber: Integer); function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. crc, LCLProc, LCLVersion, Toolwin, //DC {$IFDEF MSWINDOWS} uOSUtils, uTotalCommander, {$ENDIF} uShellExecute, fEditSearch, fMainCommandsDlg, uFileProcs, uDebug, DCOSUtils, uShowMsg, DCClassesUtf8, fOptions, DCStrUtils, uGlobs, uLng, uOSForms, uDCUtils, uPixMapManager, uKASToolItemsExtended, fMain, uSpecialDir, dmHelpManager, uGlobsPaths; const cHotKeyCommand = 'cm_ExecuteToolbarItem'; { Constants used with export/import } MASK_ACTION_WITH_WHAT = $03; ACTION_WITH_WINCMDINI = $00; ACTION_WITH_TC_TOOLBARFILE = $01; ACTION_WITH_DC_TOOLBARFILE = $02; ACTION_WITH_BACKUP = $03; MASK_ACTION_TOOLBAR = $30; ACTION_WITH_MAIN_TOOLBAR = $0; IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR = $1; ACTION_WITH_CURRENT_BAR = $2; IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR = $3; MASK_FLUSHORNOT_EXISTING = $80; ACTION_FLUSH_EXISTING = $80; MASK_IMPORT_DESTIONATION = $30; { TfrmOptionsToolbar } class function TfrmOptionsToolbar.GetIconIndex: Integer; begin Result := 32; end; class function TfrmOptionsToolbar.GetShortcuts(NormalItem: TKASNormalItem): TDynamicStringArray; var Hotkey: THotkey; begin Hotkey := FindHotkey(NormalItem); if Assigned(Hotkey) then Result := Hotkey.Shortcuts else Result := nil; end; class function TfrmOptionsToolbar.GetTitle: String; begin Result := rsOptionsEditorToolbar; end; function TfrmOptionsToolbar.GetTopToolbar: TKASToolBar; begin if pnToolbars.ControlCount > 0 then Result := pnToolbars.Controls[0] as TKASToolBar else Result := nil; end; procedure TfrmOptionsToolbar.Init; var ToolBar: TKASToolBar; begin bFirstTimeDrawn := True; FFormCommands := frmMain as IFormCommands; FFormCommands.GetCommandsList(cbInternalCommand.Items); cbInternalCommand.Sorted := True; FUpdatingButtonType := True; ParseLineToList(rsOptToolbarButtonType, rgToolItemType.Items); FUpdatingButtonType := False; FToolDragButtonNumber := -1; {$IF LCL_FULLVERSION >= 093100} rgToolItemType.OnSelectionChanged := @rgToolItemTypeSelectionChanged; {$ELSE} rgToolItemType.OnClick := @rgToolItemTypeSelectionChanged; {$ENDIF} ToolBar := CreateToolbar(nil); if Assigned(ToolBar) then // Put first one on top so that any other toolbars // created before Show are put below it. ToolBar.Top := 0; end; procedure TfrmOptionsToolbar.Load; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin {$IFNDEF MSWINDOWS} miExportSeparator1.free; miExportTopToTCIniKeep.free; miExportTopToTCIniNoKeep.free; miExportSeparator2.free; miExportTopToTCBarKeep.free; miExportTopToTCBarNoKeep.free; miExportSeparator3.free; miExportCurrentToTCIniKeep.free; miExportCurrentToTCIniNoKeep.free; miExportSeparator4.free; miExportCurrentToTCBarKeep.free; miExportCurrentToTCBarNoKeep.free; miImportSeparator.free; miImportTCINI.free; miImportTCBAR.free; {$ENDIF} trbBarSize.Position := gToolBarButtonSize div 2; trbIconSize.Position := gToolBarIconSize div 2; cbFlatButtons.Checked := gToolBarFlat; cbReportErrorWithCommands.Checked := gToolbarReportErrorWithCommands; lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2); lblIconSizeValue.Caption := IntToStr(trbIconSize.Position*2); FCurrentButton := nil; CloseToolbarsBelowCurrentButton; ToolBar := GetTopToolbar; ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); LoadToolbar(ToolBar, gConfig, ToolBarNode, tocl_FlushCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); gSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmparameteresHelper,edtExternalParameters); FLastLoadedToolbarsSignature := ComputeToolbarsSignature; FModificationTookPlace := False; FUpdateHotKey := False; end; procedure TfrmOptionsToolbar.LoadCurrentButton; var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; EnableNormal, EnableCommand, EnableProgram: Boolean; ButtonTypeIndex: Integer = -1; ShortcutsHint: String; begin EnableNormal := False; EnableCommand := False; EnableProgram := False; DisableAutoSizing; try CloseToolbarsBelowCurrentButton; if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASSeparatorItem then ButtonTypeIndex := 0; if ToolItem is TKASNormalItem then begin EnableNormal := True; NormalItem := TKASNormalItem(ToolItem); FUpdatingIconText := True; edtIconFileName.Text := NormalItem.Icon; FUpdatingIconText := False; edtToolTip.Text:=StringReplace(NormalItem.Hint, #$0A, '\n', [rfReplaceAll]); ShortcutsHint := NormalItem.GetShortcutsHint; if ShortcutsHint = '' then lblHotkeyValue.Caption := rsOptHotkeysNoHotkey else lblHotkeyValue.Caption := ShortcutsHint; btnRemoveHotkey.Enabled := ShortcutsHint <> ''; end; if ToolItem is TKASCommandItem then begin ButtonTypeIndex := 1; EnableCommand := True; CommandItem := TKASCommandItem(ToolItem); cbInternalCommand.Text := CommandItem.Command; SetStringsFromArray(edtInternalParameters.Lines, CommandItem.Params); end; if ToolItem is TKASProgramItem then begin ButtonTypeIndex := 2; EnableProgram := True; ProgramItem := TKASProgramItem(ToolItem); edtExternalCommand.Text := ProgramItem.Command; edtExternalParameters.Text := ProgramItem.Params; edtStartPath.Text := ProgramItem.StartPath; end; if ToolItem is TKASMenuItem then begin ButtonTypeIndex := 3; AddNewSubToolbar(TKASMenuItem(ToolItem)); end; end; FUpdatingButtonType := True; rgToolItemType.ItemIndex := ButtonTypeIndex; FUpdatingButtonType := False; DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram); finally EnableAutoSizing; end; //Let's display the menuitem related with a subtoolbar only if current selected toolbar is a subtoolbar. miExportCurrent.Enabled := (FCurrentButton.ToolBar.Tag > 1); {$IFDEF MSWINDOWS} miImportTCINIAddCurrent.Enabled := miExportCurrent.Enabled; miImportTCINIAddMenuCurrent.Enabled := miExportCurrent.Enabled; miImportTCBARAddCurrent.Enabled := miExportCurrent.Enabled; miImportTCBARAddMenuCurrent.Enabled := miExportCurrent.Enabled; {$ENDIF} miImportDCBARAddCurrent.Enabled := miExportCurrent.Enabled; miImportDCBARAddMenuCurrent.Enabled := miExportCurrent.Enabled; miImportBackupAddCurrent.Enabled := miExportCurrent.Enabled; miImportBackupAddMenuCurrent.Enabled := miExportCurrent.Enabled; end; procedure TfrmOptionsToolbar.DisplayAppropriateControls(EnableNormal, EnableCommand, EnableProgram: boolean); begin lblIconFile.Visible := EnableNormal; edtIconFileName.Visible := EnableNormal; btnOpenIcon.Visible := EnableNormal; btnRelativeIconFileName.Visible := EnableNormal; lblToolTip.Visible := EnableNormal; edtToolTip.Visible := EnableNormal; btnSuggestionTooltip.Visible := EnableNormal; lblInternalCommand.Visible := EnableCommand; cbInternalCommand.Visible := EnableCommand; btnOpenCmdDlg.Visible := EnableCommand; lblHelpOnInternalCommand.Visible := EnableCommand; lblInternalParameters.Visible := EnableCommand; edtInternalParameters.Visible := EnableCommand; lblExternalCommand.Visible := EnableProgram; edtExternalCommand.Visible := EnableProgram; lblExternalParameters.Visible := EnableProgram; edtExternalParameters.Visible := EnableProgram; btnParametersHelper.Visible := EnableProgram; lblStartPath.Visible := EnableProgram; edtStartPath.Visible := EnableProgram; btnOpenFile.Visible := EnableProgram; btnRelativeExternalCommand.Visible := EnableProgram; btnStartPath.Visible := EnableProgram; btnRelativeStartPath.Visible := EnableProgram; lblHotkey.Visible := EnableNormal; lblHotkeyValue.Visible := EnableNormal; btnEditHotkey.Visible := EnableNormal; btnRemoveHotkey.Visible := EnableNormal; btnCloneButton.Visible := Assigned(FCurrentButton); btnDeleteButton.Visible := Assigned(FCurrentButton); rgToolItemType.Visible := Assigned(FCurrentButton); end; procedure TfrmOptionsToolbar.LoadToolbar(ToolBar: TKASToolBar; Config: TXmlConfig; RootNode: TXmlNode; ConfigurationLoadType: TTypeOfConfigurationLoad); var ToolBarLoader: TKASToolBarExtendedLoader; begin ToolBarLoader := TKASToolBarExtendedLoader.Create(FFormCommands); try if Assigned(RootNode) then ToolBar.LoadConfiguration(Config, RootNode, ToolBarLoader, ConfigurationLoadType); finally ToolBarLoader.Free; end; end; procedure TfrmOptionsToolbar.PressButtonDown(Button: TKASToolButton); begin FUpdatingButtonType := True; Button.Click; FUpdatingButtonType := False; end; procedure TfrmOptionsToolbar.rgToolItemTypeSelectionChanged(Sender: TObject); var ToolBar: TKASToolBar; ToolItem: TKASToolItem = nil; NewButton: TKASToolButton; begin if not FUpdatingButtonType and Assigned(FCurrentButton) then begin case rgToolItemType.ItemIndex of 0: ToolItem := TKASSeparatorItem.Create; 1: ToolItem := TKASCommandItem.Create(FFormCommands); 2: ToolItem := TKASProgramItem.Create; 3: ToolItem := TKASMenuItem.Create; end; if Assigned(ToolItem) then begin ToolBar := FCurrentButton.ToolBar; // Copy what you can from previous button type. ToolItem.Assign(FCurrentButton.ToolItem); NewButton := ToolBar.InsertButton(FCurrentButton, ToolItem); ToolBar.RemoveButton(FCurrentButton); FCurrentButton := NewButton; PressButtonDown(NewButton); end; end; end; function TfrmOptionsToolbar.Save: TOptionsEditorSaveFlags; var ToolBarNode: TXmlNode; ToolBar: TKASToolBar; begin ApplyEditControls; gToolBarFlat := cbFlatButtons.Checked; gToolbarReportErrorWithCommands := cbReportErrorWithCommands.Checked; gToolBarButtonSize := trbBarSize.Position * 2; gToolBarIconSize := trbIconSize.Position * 2; ToolBar := GetTopToolbar; if Assigned(ToolBar) then begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True); gConfig.ClearNode(ToolBarNode); Toolbar.SaveConfiguration(gConfig, ToolBarNode); FLastLoadedToolbarsSignature := ComputeToolbarsSignature; FModificationTookPlace := False; end; if FUpdateHotKey then begin FUpdateHotKey := False; HotMan.Save(gpCfgDir + gNameSCFile); end; Result := []; end; procedure TfrmOptionsToolbar.btnOpenIconClick(Sender: TObject); var sFileName: String; begin sFileName := GetCmdDirFromEnvVar(edtIconFileName.Text); if ShowOpenIconDialog(Self, sFileName) then edtIconFileName.Text := sFileName; end; function TfrmOptionsToolbar.CreateToolbar(Items: TKASToolBarItems): TKASToolBar; begin Result := TKASToolBar.Create(pnToolbars); Result.AutoSize := True; Result.Anchors := [akTop, akLeft, akRight]; Result.Constraints.MinHeight := 24; Result.Flat := cbFlatButtons.Checked; Result.GlyphSize := trbIconSize.Position * 2; Result.RadioToolBar := True; Result.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2); Result.ShowDividerAsButton := True; Result.OnDragOver := @ToolbarDragOver; Result.OnDragDrop := @ToolbarDragDrop; Result.OnLoadButtonGlyph := @ToolbarLoadButtonGlyph; Result.OnToolButtonClick := @ToolbarToolButtonClick; Result.OnToolButtonMouseDown := @ToolbarToolButtonMouseDown; Result.OnToolButtonMouseUp := @ToolbarToolButtonMouseUp; Result.OnToolButtonMouseMove := @ToolbarToolButtonMouseMove; Result.OnToolButtonDragDrop := @ToolbarToolButtonDragDrop; Result.OnToolButtonDragOver := @ToolbarToolButtonDragOver; Result.OnToolItemShortcutsHint := @ToolbarToolItemShortcutsHint; Result.BorderSpacing.Bottom := 2; Result.EdgeInner := esRaised; Result.EdgeOuter := esLowered; Result.EdgeBorders := [ebBottom]; Result.Top := MaxSmallInt; // So that it is put under all existing toolbars (because of Align=alTop). Result.UseItems(Items); Result.Parent := pnToolbars; Result.Tag := pnToolbars.ComponentCount; end; function TfrmOptionsToolbar.AddNewSubToolbar(ToolItem: TKASMenuItem): TKASToolBar; begin Result := CreateToolbar(ToolItem.SubItems); if Result.ButtonCount = 0 then Result.AddButton(TKASCommandItem.Create(FFormCommands)); end; procedure TfrmOptionsToolbar.ApplyEditControls; var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; begin if Assigned(FCurrentButton) then begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); NormalItem.Icon := edtIconFileName.Text; NormalItem.Hint := StringReplace(edtToolTip.Text, '\n', #$0A, [rfReplaceAll]); NormalItem.Text := EmptyStr; end; if ToolItem is TKASCommandItem then begin CommandItem := TKASCommandItem(ToolItem); CommandItem.Command := cbInternalCommand.Text; CommandItem.Params := GetArrayFromStrings(edtInternalParameters.Lines); end; if ToolItem is TKASProgramItem then begin ProgramItem := TKASProgramItem(ToolItem); ProgramItem.Command := edtExternalCommand.Text; ProgramItem.Params := edtExternalParameters.Text; ProgramItem.StartPath := edtStartPath.Text; end; end; end; (*Add new button on tool bar*) procedure TfrmOptionsToolbar.btnInsertButtonClick(Sender: TObject); begin pmInsertButtonMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbar.btnOpenCmdDlgClick } procedure TfrmOptionsToolbar.btnOpenCmdDlgClick(Sender: TObject); var WantedCommand: String = ''; IndexMaybe:longint; begin if cbInternalCommand.ItemIndex=-1 then begin cbInternalCommand.ItemIndex:=0; cbInternalCommandSelect(cbInternalCommand); end; if ShowMainCommandDlgForm(cbInternalCommand.Items.Strings[cbInternalCommand.ItemIndex],WantedCommand) then begin IndexMaybe:=cbInternalCommand.Items.IndexOf(WantedCommand); if IndexMaybe<>-1 then begin cbInternalCommand.ItemIndex:=IndexMaybe; cbInternalCommandSelect(cbInternalCommand); end; end; end; procedure TfrmOptionsToolbar.btnParametersHelperClick(Sender: TObject); begin pmparameteresHelper.PopUp; end; procedure TfrmOptionsToolbar.miInsertButtonClick(Sender: TObject); var ToolBar: TKASToolBar; ToolItem: TKASToolItem = nil; WhereToAdd:longint; IndexWhereToAdd:longint; begin if Assigned(FCurrentButton) then begin ApplyEditControls; ToolBar := FCurrentButton.ToolBar; end else begin ToolBar := GetTopToolbar; end; if Assigned(ToolBar) then begin with Sender as TComponent do begin case ((tag shr 4) and $0F) of 1: ToolItem := TKASSeparatorItem.Create; 2: ToolItem := TKASCommandItem.Create(FFormCommands); 3: ToolItem := TKASProgramItem.Create; 4: ToolItem := TKASMenuItem.Create; end; WhereToAdd:=tag and $0F; end; IndexWhereToAdd:=0; if (ToolBar.ButtonCount=0) then IndexWhereToAdd:=-1; if (IndexWhereToAdd=0) AND (WhereToAdd=4) then IndexWhereToAdd:=-1; if (IndexWhereToAdd=0) AND (WhereToAdd=3) AND (FCurrentButton.Tag=pred(ToolBar.ButtonCount)) then IndexWhereToAdd:=-1; if (IndexWhereToAdd=0) AND (WhereToAdd=3) then IndexWhereToAdd:=(FCurrentButton.Tag+1); if (IndexWhereToAdd=0) AND (WhereToAdd=2) then IndexWhereToAdd:=FCurrentButton.Tag; if IndexWhereToAdd=-1 then begin //We simply add the button at the end FCurrentButton := ToolBar.AddButton(ToolItem); end else begin //We add the button *after* the current selected button FCurrentButton := ToolBar.InsertButton(IndexWhereToAdd, ToolItem); end; PressButtonDown(FCurrentButton); //Let's speed up process if we can pre-open requester according to what was just inserted as new button with Sender as TComponent do begin case ((tag shr 4) and $0F) of 2: btnOpenCmdDlgClick(btnOpenCmdDlg); 3: btnOpenFileClick(btnOpenFile); end; end; end; end; { TfrmOptionsToolbar.miSrcRplClick } procedure TfrmOptionsToolbar.miSrcRplClick(Sender: TObject); const SaRMASK_ICON = $01; SaRMASK_COMMAND = $02; SaRMASK_PARAMS = $04; SaRMASK_STARTPATH = $08; var ActionDispatcher, NbOfReplacement:integer; sSearchText, sReplaceText:string; ReplaceFlags: TReplaceFlags; function ReplaceIfNecessary(sWorkingText:string):string; begin result := StringReplace(sWorkingText, sSearchText, sReplaceText, ReplaceFlags); if result<>sWorkingText then inc(NbOfReplacement); end; procedure PossiblyRecursiveSearchAndReplaceInThisButton(ToolItem: TKASToolItem); var IndexItem, IndexParam: integer; begin if ToolItem is TKASSeparatorItem then begin end; if ToolItem is TKASCommandItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASCommandItem(ToolItem).Icon:=ReplaceIfNecessary(TKASCommandItem(ToolItem).Icon); if (ActionDispatcher AND SaRMASK_PARAMS) <> 0 then for IndexParam:=0 to pred(length(TKASCommandItem(ToolItem).Params)) do TKASCommandItem(ToolItem).Params[IndexParam]:=ReplaceIfNecessary(TKASCommandItem(ToolItem).Params[IndexParam]); end; if ToolItem is TKASProgramItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASProgramItem(ToolItem).Icon:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Icon); if (ActionDispatcher AND SaRMASK_COMMAND) <> 0 then TKASProgramItem(ToolItem).Command:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Command); if (ActionDispatcher AND SaRMASK_STARTPATH) <> 0 then TKASProgramItem(ToolItem).StartPath:=ReplaceIfNecessary(TKASProgramItem(ToolItem).StartPath); if (ActionDispatcher AND SaRMASK_PARAMS) <> 0 then TKASProgramItem(ToolItem).Params:=ReplaceIfNecessary(TKASProgramItem(ToolItem).Params); end; if ToolItem is TKASMenuItem then begin if (ActionDispatcher AND SaRMASK_ICON) <> 0 then TKASMenuItem(ToolItem).Icon:=ReplaceIfNecessary(TKASMenuItem(ToolItem).Icon); for IndexItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do PossiblyRecursiveSearchAndReplaceInThisButton(TKASMenuItem(ToolItem).SubItems[IndexItem]); end; end; var //Placed intentionnally *AFTER* above routine to make sure these variable names are not used in above possibly recursive routines. IndexButton: integer; Toolbar: TKASToolbar; EditSearchOptionToOffer,EditSearchOptionReturned:TEditSearchDialogOption; begin with Sender as TComponent do ActionDispatcher:=tag; ApplyEditControls; Application.ProcessMessages; if ((ActionDispatcher AND SaRMASK_ICON) <>0) AND (edtIconFileName.Visible) AND (edtIconFileName.Text<>'') then sSearchText:=edtIconFileName.Text else if ((ActionDispatcher AND SaRMASK_COMMAND) <>0) AND (edtExternalCommand.Visible) AND (edtExternalCommand.Text<>'') then sSearchText:=edtExternalCommand.Text else if ((ActionDispatcher AND SaRMASK_PARAMS) <>0) AND (edtExternalParameters.Visible) AND (edtExternalParameters.Text<>'') then sSearchText:=edtExternalParameters.Text else if ((ActionDispatcher AND SaRMASK_STARTPATH) <>0) AND (edtStartPath.Visible) AND (edtStartPath.Text<>'') then sSearchText:=edtStartPath.Text else if ((ActionDispatcher AND SaRMASK_PARAMS) <>0) AND (edtInternalParameters.Visible) AND (edtInternalParameters.Lines.Count>0) then sSearchText:=edtInternalParameters.Lines.Strings[0] else sSearchText:=''; sReplaceText:=sSearchText; EditSearchOptionToOffer:=[]; {$IFDEF MSWINDOWS} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveUnchecked]; {$ELSE} EditSearchOptionToOffer:=EditSearchOptionToOffer+[eswoCaseSensitiveChecked]; {$ENDIF} if GetSimpleSearchAndReplaceString(self, EditSearchOptionToOffer, sSearchText, sReplaceText, EditSearchOptionReturned, glsSearchPathHistory, glsReplacePathHistory) then begin NbOfReplacement:=0; ReplaceFlags:=[rfReplaceAll]; if eswoCaseSensitiveUnchecked in EditSearchOptionReturned then ReplaceFlags := ReplaceFlags + [rfIgnoreCase]; Toolbar := GetTopToolbar; //Let's scan the current bar! for IndexButton := 0 to pred(Toolbar.ButtonCount) do begin PossiblyRecursiveSearchAndReplaceInThisButton(Toolbar.Buttons[IndexButton].ToolItem); ToolBar.UpdateIcon(Toolbar.Buttons[IndexButton]); end; if NbOfReplacement=0 then begin msgOk(rsZeroReplacement); end else begin if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[0]); msgOk(format(rsXReplacements,[NbOfReplacement])); end; end; end; procedure TfrmOptionsToolbar.btnRelativeExternalCommandClick(Sender: TObject); begin edtExternalCommand.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtExternalCommand,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.btnRelativeIconFileNameClick(Sender: TObject); begin edtIconFileName.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtIconFileName,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.btnRelativeStartPathClick(Sender: TObject); begin edtStartPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(edtStartPath,pfPATH); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolbar.btnRemoveHotKeyClick(Sender: TObject); procedure RemoveHotkey(Hotkeys: THotkeys; NormalItem: TKASNormalItem); var Hotkey: THotkey; begin Hotkey := FindHotkey(NormalItem, Hotkeys); Hotkeys.Remove(Hotkey); end; var HMForm: THMForm; ToolItem: TKASToolItem; NormalItem: TKASNormalItem; I: Integer; begin ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin RemoveHotkey(HMForm.Hotkeys, NormalItem); for I := 0 to HMForm.Controls.Count - 1 do RemoveHotkey(HMForm.Controls[I].Hotkeys, NormalItem); end; LoadCurrentButton; FUpdateHotKey:= True; end; end; (*Clone selected button on tool bar*) procedure TfrmOptionsToolbar.btnCloneButtonClick(Sender: TObject); var SourceItem: TKASToolItem; Button: TKASToolButton; begin if Assigned(FCurrentButton) then begin ApplyEditControls; SourceItem := FCurrentButton.ToolItem; if FCurrentButton.Tag < pred(FCurrentButton.ToolBar.ButtonCount) then Button := FCurrentButton.ToolBar.InsertButton((FCurrentButton.Tag + 1), SourceItem.Clone) else Button := FCurrentButton.ToolBar.AddButton(SourceItem.Clone); PressButtonDown(Button); end; end; (*Remove current button*) procedure TfrmOptionsToolbar.btnDeleteButtonClick(Sender: TObject); var NextButton: Integer; ToolBar: TKASToolBar; begin if Assigned(FCurrentButton) then begin ToolBar := FCurrentButton.ToolBar; NextButton := FCurrentButton.Tag; Toolbar.RemoveButton(FCurrentButton); FCurrentButton := nil; if Toolbar.ButtonCount > 0 then begin // Select next button or the last one. if NextButton >= Toolbar.ButtonCount then NextButton := Toolbar.ButtonCount - 1; PressButtonDown(Toolbar.Buttons[NextButton]); end else begin LoadCurrentButton; end; end; end; procedure TfrmOptionsToolbar.btnEditHotkeyClick(Sender: TObject); var HMForm: THMForm; TemplateHotkey, Hotkey: THotkey; ToolItem: TKASToolItem; NormalItem: TKASNormalItem; AControls: TDynamicStringArray = nil; I: Integer; begin if not Assigned(FEditForm) then FEditForm := TfrmEditHotkey.Create(Self); ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); TemplateHotkey := THotkey.Create; try TemplateHotkey.Command := cHotKeyCommand; SetValue(TemplateHotkey.Params, 'ToolItemID', NormalItem.ID); HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin Hotkey := FindHotkey(NormalItem, HMForm.Hotkeys); if Assigned(Hotkey) then TemplateHotkey.Shortcuts := Hotkey.Shortcuts; for I := 0 to HMForm.Controls.Count - 1 do begin Hotkey := FindHotkey(NormalItem, HMForm.Controls[I].Hotkeys); if Assigned(Hotkey) then begin TemplateHotkey.Shortcuts := Hotkey.Shortcuts; AddString(AControls, HMForm.Controls[I].Name); end; end; end; if FEditForm.Execute(True, 'Main', cHotKeyCommand, TemplateHotkey, AControls, [ehoHideParams]) then begin LoadCurrentButton; FUpdateHotKey:= True; end; finally TemplateHotkey.Free; end; end; end; procedure TfrmOptionsToolbar.btnOpenFileClick(Sender: TObject); begin OpenDialog.DefaultExt:= EmptyStr; OpenDialog.Filter:= EmptyStr; if edtExternalCommand.Text<>'' then OpenDialog.InitialDir:=ExtractFilePath(edtExternalCommand.Text); if OpenDialog.Execute then begin edtExternalCommand.Text := OpenDialog.FileName; edtStartPath.Text := ExtractFilePath(OpenDialog.FileName); edtIconFileName.Text := OpenDialog.FileName; edtToolTip.Text := ExtractOnlyFileName(OpenDialog.FileName); end; end; procedure TfrmOptionsToolbar.btnStartPathClick(Sender: TObject); var MaybeResultingOutputPath:string; begin MaybeResultingOutputPath:=edtStartPath.Text; if MaybeResultingOutputPath='' then MaybeResultingOutputPath:=frmMain.ActiveFrame.CurrentPath; if SelectDirectory(rsSelectDir, MaybeResultingOutputPath, MaybeResultingOutputPath, False) then edtStartPath.Text:=MaybeResultingOutputPath; end; { TfrmOptionsToolbar.btnSuggestionTooltipClick } procedure TfrmOptionsToolbar.btnSuggestionTooltipClick(Sender: TObject); var sSuggestion, sWorkingString : string; iLineIndex, pOriginalSuggestion : integer; begin sSuggestion:=EmptyStr; case rgToolItemType.ItemIndex of 1: //Internal command: Idea is to keep the existing one for the single first line, then add systematically the parameters. begin sWorkingString:=edtToolTip.Text; pOriginalSuggestion:=pos('\n',edtToolTip.Text); if pOriginalSuggestion<>0 then sSuggestion:=leftstr(edtToolTip.Text,pred(pOriginalSuggestion))+'\n----' else sSuggestion:=edtToolTip.Text+'\n----'; if edtInternalParameters.Lines.Count>0 then begin for iLineIndex:=0 to pred(edtInternalParameters.Lines.Count) do sSuggestion:=sSuggestion+'\n'+edtInternalParameters.Lines.Strings[iLineIndex]; end; end; 2://External command: Idea is to keep the existing one for the first line, then add systematically command, parameters and start path, one per line. begin sWorkingString:=edtToolTip.Text; pOriginalSuggestion:=pos(('\n----\n'+StringReplace(lblExternalCommand.Caption, '&', '', [rfReplaceAll])),edtToolTip.Text); if pOriginalSuggestion<>0 then sSuggestion:=leftstr(edtToolTip.Text,pred(pOriginalSuggestion))+'\n----\n' else sSuggestion:=edtToolTip.Text+'\n----\n'; sSuggestion:=sSuggestion+StringReplace(lblExternalCommand.Caption, '&', '', [rfReplaceAll])+' '+edtExternalCommand.Text; if edtExternalParameters.Text<>EmptyStr then sSuggestion:=sSuggestion+'\n'+StringReplace(lblExternalParameters.Caption, '&', '', [rfReplaceAll])+' '+edtExternalParameters.Text; if edtStartPath.Text<>EmptyStr then sSuggestion:=sSuggestion+'\n'+StringReplace(lblStartPath.Caption, '&', '', [rfReplaceAll])+' '+edtStartPath.Text; end; end; if sSuggestion<>EmptyStr then edtToolTip.Text:=sSuggestion; end; procedure TfrmOptionsToolbar.cbInternalCommandSelect(Sender: TObject); var Command: String; begin Command := cbInternalCommand.Items[cbInternalCommand.ItemIndex]; edtToolTip.Text := FFormCommands.GetCommandCaption(Command, cctLong); edtIconFileName.Text := UTF8LowerCase(Command); end; procedure TfrmOptionsToolbar.CloseToolbarsBelowCurrentButton; var CloseFrom: Integer = 1; i: Integer; begin if Assigned(FCurrentButton) then begin for i := 0 to pnToolbars.ControlCount - 1 do if pnToolbars.Controls[i] = FCurrentButton.ToolBar then begin CloseFrom := i + 1; Break; end; end; for i := pnToolbars.ControlCount - 1 downto CloseFrom do CloseToolbar(i); end; procedure TfrmOptionsToolbar.CloseToolbar(Index: Integer); begin if Index > 0 then pnToolbars.Controls[Index].Free; end; procedure TfrmOptionsToolbar.cbFlatButtonsChange(Sender: TObject); var i: Integer; ToolBar: TKASToolBar; begin for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.Flat := cbFlatButtons.Checked; end; GenericSomethingChanged(Sender); end; procedure TfrmOptionsToolbar.edtIconFileNameChange(Sender: TObject); begin if not FUpdatingIconText then UpdateIcon(edtIconFileName.Text); end; procedure TfrmOptionsToolbar.lblHelpOnInternalCommandClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/cmds.html#' + cbInternalCommand.Text); end; class function TfrmOptionsToolbar.FindHotkey(NormalItem: TKASNormalItem; Hotkeys: THotkeys): THotkey; var i: Integer; ToolItemID: String; begin for i := 0 to Hotkeys.Count - 1 do begin Result := Hotkeys.Items[i]; if (Result.Command = cHotKeyCommand) and (GetParamValue(Result.Params, 'ToolItemID', ToolItemID)) and (ToolItemID = NormalItem.ID) then Exit; end; Result := nil; end; class function TfrmOptionsToolbar.FindHotkey(NormalItem: TKASNormalItem): THotkey; var HMForm: THMForm; i: Integer; begin HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then begin Result := FindHotkey(NormalItem, HMForm.Hotkeys); if not Assigned(Result) then begin for i := 0 to HMForm.Controls.Count - 1 do begin Result := FindHotkey(NormalItem, HMForm.Controls[i].Hotkeys); if Assigned(Result) then Break; end; end; end else Result := nil; end; procedure TfrmOptionsToolbar.trbBarSizeChange(Sender: TObject); var ToolBar: TKASToolBar; i: Integer; begin DisableAutoSizing; try lblBarSizeValue.Caption := IntToStr(trbBarSize.Position*2); trbIconSize.Position := trbBarSize.Position - (trbBarSize.Position div 5); for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.SetButtonSize(trbBarSize.Position * 2, trbBarSize.Position * 2); end; GenericSomethingChanged(Sender); finally EnableAutoSizing; end; end; procedure TfrmOptionsToolbar.trbIconSizeChange(Sender: TObject); var ToolBar: TKASToolBar; i: Integer; begin DisableAutoSizing; try lblIconSizeValue.Caption := IntToStr(trbIconSize.Position * 2); for i := 0 to pnToolbars.ControlCount - 1 do begin ToolBar := pnToolbars.Controls[i] as TKASToolBar; ToolBar.GlyphSize := trbIconSize.Position * 2; end; GenericSomethingChanged(Sender); finally EnableAutoSizing; end; end; procedure TfrmOptionsToolbar.UpdateIcon(Icon: String); var ToolItem: TKASToolItem; NormalItem: TKASNormalItem; begin // Refresh icon on the toolbar. ToolItem := FCurrentButton.ToolItem; if ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(ToolItem); NormalItem.Icon := Icon; FCurrentButton.ToolBar.UpdateIcon(FCurrentButton); end; end; procedure TfrmOptionsToolbar.ToolbarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // Drag to a different toolbar. Accept := (Source is TKASToolButton) and (TKASToolButton(Source).ToolBar <> Sender); end; procedure TfrmOptionsToolbar.ToolbarDragDrop(Sender, Source: TObject; X, Y: Integer); var SourceButton: TKASToolButton; TargetToolbar: TKASToolBar; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetToolbar := Sender as TKASToolBar; if SourceButton.ToolBar <> TargetToolBar then SourceButton.ToolBar.MoveButton(SourceButton, TargetToolbar, nil); end; end; function TfrmOptionsToolbar.ToolbarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASSeparatorItem then // Paint 'separator' icon begin Result := TBitmap.Create; Result.Transparent := True; Result.TransparentColor := clFuchsia; Result.SetSize(iIconSize, iIconSize); Result.Canvas.Brush.Color:= clFuchsia; Result.Canvas.FillRect(Rect(0,0,iIconSize,iIconSize)); Result.Canvas.Brush.Color:= clBtnText; Result.Canvas.RoundRect(Rect(Round(iIconSize * 0.4), 2, Round(iIconSize * 0.6), iIconSize - 2),iIconSize div 8,iIconSize div 4); end else if ToolItem is TKASNormalItem then Result := PixMapManager.LoadBitmapEnhanced(TKASNormalItem(ToolItem).Icon, iIconSize, True, clBackColor, nil) else Result := nil; end; (*Select button on panel*) procedure TfrmOptionsToolbar.ToolbarToolButtonClick(Sender: TObject); var ClickedButton: TKASToolButton; begin ClickedButton := Sender as TKASToolButton; if not FUpdatingButtonType then ApplyEditControls; if Assigned(FCurrentButton) then begin // If current toolbar has changed depress the previous button. if FCurrentButton.ToolBar <> ClickedButton.ToolBar then FCurrentButton.Down := False; end; FCurrentButton := ClickedButton; LoadCurrentButton; end; procedure TfrmOptionsToolbar.ToolbarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var SourceButton, TargetButton: TKASToolButton; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetButton := Sender as TKASToolButton; // Drop to a different toolbar. if SourceButton.ToolBar <> TargetButton.ToolBar then begin SourceButton.ToolBar.MoveButton(SourceButton, TargetButton.ToolBar, TargetButton); end; end; end; (* Move button if it is dragged*) procedure TfrmOptionsToolbar.ToolbarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); var SourceButton, TargetButton: TKASToolButton; begin if Source is TKASToolButton then begin SourceButton := Source as TKASToolButton; TargetButton := Sender as TKASToolButton; // Move on the same toolbar. if SourceButton.ToolBar = TargetButton.ToolBar then begin if FToolDragButtonNumber <> TargetButton.Tag then begin SourceButton.ToolBar.MoveButton(SourceButton.Tag, TargetButton.Tag); FToolDragButtonNumber := TargetButton.Tag; Accept := True; end; end; end; end; (* Do not start drag in here, because oterwise button wouldn't be pushed down*) procedure TfrmOptionsToolbar.ToolbarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FToolButtonMouseX := X; FToolButtonMouseY := Y; end; (* Start dragging only if mbLeft if pressed and mouse moved.*) procedure TfrmOptionsToolbar.ToolbarToolButtonMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer; NumberOfButton: Integer); var Button: TKASToolButton; begin if Sender is TKASToolButton then begin if (ssLeft in Shift) and (FToolDragButtonNumber = -1) then if (abs(FToolButtonMouseX-X)>10) or (abs(FToolButtonMouseY-Y)>10) then begin Button := TKASToolButton(Sender); FToolDragButtonNumber := NumberOfButton; Button.Toolbar.Buttons[NumberOfButton].BeginDrag(False, 5); end; end; end; (* End button drag*) procedure TfrmOptionsToolbar.ToolbarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FToolDragButtonNumber := -1; end; function TfrmOptionsToolbar.ToolbarToolItemShortcutsHint(ToolItem: TKASNormalItem): String; begin Result := ShortcutsToText(GetShortcuts(ToolItem)); end; procedure TfrmOptionsToolbar.SelectButton(ButtonNumber: Integer); var ToolBar: TKASToolBar; begin if pnToolbars.ControlCount > 0 then begin ToolBar := pnToolbars.Controls[0] as TKASToolBar; if (ButtonNumber >= 0) and (ButtonNumber < Toolbar.ButtonCount) then begin FCurrentButton := Toolbar.Buttons[ButtonNumber]; PressButtonDown(FCurrentButton); end; end; end; { TfrmOptionsToolbar.FrameEnter } procedure TfrmOptionsToolbar.FrameEnter(Sender: TObject); begin //Tricky pass to don't have the "pnlEditToolbar" being continously resized depending on the button task we're going through. //The idea is to have system arrange for the "CommandItem", which is the taller size one, then freeze size there and keep this way. if bFirstTimeDrawn then begin bFirstTimeDrawn := False; DisplayAppropriateControls(True, True, False); Application.ProcessMessages; pnlEditToolbar.AutoSize := False; LoadCurrentButton; end; end; { TfrmOptionsToolbar.CanWeClose } function TfrmOptionsToolbar.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedToolbarsSignature = ComputeToolbarsSignature) AND (not FModificationTookPlace); if not Result then begin ShowOptions(TfrmOptionsToolbar); Answer := MsgBox(rsMsgToolbarModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; { TfrmOptionsToolbar.ComputeToolbarsSignature } // Routine tries to pickup all char chain from element of toolbar toolbar and compute a unique CRC32. // This CRC32 will bea kind of signature of the toolbar. // We compute the CRC32 at the start of edition (TfrmOptionsToolbar.Load) and // at the end (TfrmOptionsToolbar.CanWeClose). // If they are different, it's a sign that toolbars have been modified. // It's not "perfect" since it might happen that two different combinaisons will // give the same CRC32 but odds are very good that it will be a different one. function TfrmOptionsToolbar.ComputeToolbarsSignature: dword; const CONSTFORTOOLITEM: array[1..4] of byte = ($23, $35, $28, $DE); procedure RecursiveGetSignature(ToolItem: TKASToolItem; var Result: dword); var IndexToolItem: longint; sInnerParam: string; begin if ToolItem is TKASSeparatorItem then Result := crc32(Result, @CONSTFORTOOLITEM[1], 1); if ToolItem is TKASCommandItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[2], 1); if length(TKASCommandItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Icon[1], length(TKASCommandItem(ToolItem).Icon)); if length(TKASCommandItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Hint[1], length(TKASCommandItem(ToolItem).Hint)); if length(TKASCommandItem(ToolItem).Command) > 0 then Result := crc32(Result, @TKASCommandItem(ToolItem).Command[1], length(TKASCommandItem(ToolItem).Command)); for sInnerParam in TKASCommandItem(ToolItem).Params do Result := crc32(Result, @sInnerParam[1], length(sInnerParam)); end; if ToolItem is TKASProgramItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[3], 1); if length(TKASProgramItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Icon[1], length(TKASProgramItem(ToolItem).Icon)); if length(TKASProgramItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Hint[1], length(TKASProgramItem(ToolItem).Hint)); if length(TKASProgramItem(ToolItem).Command) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Command[1], length(TKASProgramItem(ToolItem).Command)); if length(TKASProgramItem(ToolItem).Params) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).Params[1], length(TKASProgramItem(ToolItem).Params)); if length(TKASProgramItem(ToolItem).StartPath) > 0 then Result := crc32(Result, @TKASProgramItem(ToolItem).StartPath[1], length(TKASProgramItem(ToolItem).StartPath)); end; if ToolItem is TKASMenuItem then begin Result := crc32(Result, @CONSTFORTOOLITEM[4], 1); if length(TKASMenuItem(ToolItem).Icon) > 0 then Result := crc32(Result, @TKASMenuItem(ToolItem).Icon[1], length(TKASMenuItem(ToolItem).Icon)); if length(TKASMenuItem(ToolItem).Hint) > 0 then Result := crc32(Result, @TKASMenuItem(ToolItem).Hint[1], length(TKASMenuItem(ToolItem).Hint)); for IndexToolItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do RecursiveGetSignature(TKASMenuItem(ToolItem).SubItems[IndexToolItem], Result); end; end; var IndexButton: longint; Toolbar: TKASToolBar; begin ApplyEditControls; Toolbar := GetTopToolbar; Result := 0; for IndexButton := 0 to pred(Toolbar.ButtonCount) do RecursiveGetSignature(Toolbar.Buttons[IndexButton].ToolItem, Result); end; { TfrmOptionsToolbar.btnExportClick } procedure TfrmOptionsToolbar.btnOtherClick(Sender: TObject); begin pmOtherClickToolbar.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; { TfrmOptionsToolbar.miImportAllDCCommandsClick } procedure TfrmOptionsToolbar.miAddAllCmdsClick(Sender: TObject); var IndexCommand: integer; FlagCategoryTitle: boolean = False; sCmdName: string = ''; sHintName: string = ''; sHotKey: string = ''; sCategory: string = ''; ToolBar: TKASToolBar; CategorySubToolBar: TKASToolBar = nil; LocalKASMenuItem: TKASMenuItem; ListCommands: TStringList; SubToolItem: TKASToolItem = nil; begin ListCommands := TStringList.Create; try FFormCommands.GetCommandsListForACommandCategory(ListCommands, '('+rsSimpleWordAll+')', csLegacy); FCurrentButton := nil; ToolBar := GetTopToolbar; CloseToolbarsBelowCurrentButton; if FCurrentButton <> nil then FCurrentButton.Down := False; LocalKASMenuItem := TKASMenuItem.Create; LocalKASMenuItem.Icon := 'cm_doanycmcommand'; LocalKASMenuItem.Hint := 'All DC internal commands'; FCurrentButton := ToolBar.AddButton(LocalKASMenuItem); Toolbar := AddNewSubToolbar(LocalKASMenuItem); PressButtonDown(FCurrentButton); Toolbar.RemoveButton(0); //Remove the default added button by the "AddNewSubToolbar" routine. for IndexCommand:=0 to pred(ListCommands.Count) do begin FFormCommands.ExtractCommandFields(ListCommands.Strings[IndexCommand],sCategory,sCmdName,sHintName,sHotKey,FlagCategoryTitle); if FlagCategoryTitle=FALSE then begin SubToolItem := TKASCommandItem.Create(FFormCommands); TKASCommandItem(SubToolItem).Command := sCmdName; TKASCommandItem(SubToolItem).Hint := sHintName; TKASCommandItem(SubToolItem).Icon := UTF8LowerCase(TKASCommandItem(SubToolItem).Command); FCurrentButton := CategorySubToolBar.AddButton(SubToolItem); end else begin if CategorySubToolBar<>nil then begin FCurrentButton:=Toolbar.Buttons[pred(Toolbar.ButtonCount)]; CloseToolbarsBelowCurrentButton; end; LocalKASMenuItem := TKASMenuItem.Create; LocalKASMenuItem.Hint := sCmdName; //Let's take icon of first command of the category for the subtoolbar icon for this "new" category FFormCommands.ExtractCommandFields(ListCommands.Strings[IndexCommand+1],sCategory,sCmdName,sHintName,sHotKey,FlagCategoryTitle); LocalKASMenuItem.Icon := UTF8LowerCase(sCmdName); FCurrentButton := ToolBar.AddButton(LocalKASMenuItem); CategorySubToolBar := AddNewSubToolbar(LocalKASMenuItem); PressButtonDown(FCurrentButton); CategorySubToolBar.RemoveButton(0); //Remove the default added button by the "AddNewSubToolbar" routine. end; end; //To give the impression of complete addition, let's finish by selecting last command added. FCurrentButton:=CategorySubToolBar.Buttons[pred(CategorySubToolBar.ButtonCount)]; PressButtonDown(FCurrentButton); finally ListCommands.Free; end; end; { TfrmOptionsToolbar.miExportToAnythingClick } procedure TfrmOptionsToolbar.miExportToAnythingClick(Sender: TObject); var ToolbarConfig: TXmlConfig; FlagKeepGoing: boolean = False; BackupPath: string; ToolBarNode: TXmlNode; ToolBar: TKASToolBar; InnerResult: boolean = False; ActionDispatcher: integer; begin with Sender as TComponent do ActionDispatcher := tag; //1. Make we got an invalid name from the start SaveDialog.Filename := ''; //2. Let's determine from which which level of toolbar we need to export ToolBar := GetTopToolbar; if (ActionDispatcher and MASK_ACTION_TOOLBAR) = ACTION_WITH_CURRENT_BAR then begin if Assigned(FCurrentButton) then begin ApplyEditControls; ToolBar := FCurrentButton.ToolBar; end; end; if Assigned(ToolBar) then begin //3. Let's get a filename for the export case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of ACTION_WITH_DC_TOOLBARFILE: begin SaveDialog.DefaultExt := '*.toolbar'; SaveDialog.FilterIndex := 1; SaveDialog.Title := rsMsgDCToolbarWhereToSave; SaveDialog.FileName := 'New DC Toolbar filename'; FlagKeepGoing := SaveDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin SaveDialog.Filename := BackupPath + DirectorySeparator + 'Backup_' + GetDateTimeInStrEZSortable(now) + '.toolbar'; FlagKeepGoing := True; end; end; {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin SaveDialog.Filename := sTotalCommanderMainbarFilename; FlagKeepGoing := True; end; end; ACTION_WITH_TC_TOOLBARFILE: begin SaveDialog.DefaultExt := '*.BAR'; SaveDialog.FilterIndex := 2; SaveDialog.Title := rsMsgTCToolbarWhereToSave; SaveDialog.FileName := 'New TC Toolbar filename'; SaveDialog.InitialDir := ExcludeTrailingPathDelimiter(gTotalCommanderToolbarPath); FlagKeepGoing := SaveDialog.Execute; if FlagKeepGoing then FlagKeepGoing := areWeInSituationToPlayWithTCFiles; end; {$ENDIF} end; //4. Let's do the actual exportation if FlagKeepGoing and (SaveDialog.Filename <> '') then begin case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of //If it's DC format, let's save the XML in regular fashion. ACTION_WITH_DC_TOOLBARFILE, ACTION_WITH_BACKUP: begin ToolbarConfig := TXmlConfig.Create(SaveDialog.Filename); try ToolBarNode := ToolbarConfig.FindNode(ToolbarConfig.RootNode, 'Toolbars/MainToolbar', True); ToolbarConfig.ClearNode(ToolBarNode); ToolBar.SaveConfiguration(ToolbarConfig, ToolBarNode); InnerResult := ToolbarConfig.Save; finally FreeAndNil(ToolbarConfig); end; end; {$IFDEF MSWINDOWS} //If it's TC format, we first create the necessary .BAR files. //If requested, we also update the Wincmd.ini file. ACTION_WITH_WINCMDINI, ACTION_WITH_TC_TOOLBARFILE: begin ExportDCToolbarsToTC(Toolbar,SaveDialog.Filename,((ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING), ((actionDispatcher and MASK_ACTION_WITH_WHAT) = ACTION_WITH_WINCMDINI) ); InnerResult := True; end; {$ENDIF} end; end; if InnerResult then msgOK(Format(rsMsgToolbarSaved, [SaveDialog.Filename])); end; end; { TfrmOptionsToolbar.miImportFromAnythingClick } // We can import elements to DC toolbar... // FROM... // -a previously exported DC .toolbar file // -a previously backuped DC .toolbar file // -the TC toolbar and subtoolbar right from the main toolbar in TC // -a specified TC toolbar file // TO... // -replace the top toolbar in DC // -extend the top toolbar in DC // -a subtoolbar of the top toolbar in DC // -replace the current selected toolbar in DC // -extend the current selected toolbar in DC // -a subtoolbar of the current selected in DC procedure TfrmOptionsToolbar.miImportFromAnythingClick(Sender: TObject); var ActionDispatcher: longint; FlagKeepGoing: boolean = False; BackupPath, ImportedToolbarHint: string; ImportDestination: byte; ToolBar: TKASToolBar; LocalKASMenuItem: TKASMenuItem; ToolbarConfig: TXmlConfig; ToolBarNode: TXmlNode; begin with Sender as TComponent do ActionDispatcher := tag; //1o) Make sure we got the the filename to import into "OpenDialog.Filename" variable. case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.Filename := sTotalCommanderMainbarFilename; ImportedToolbarHint := rsDefaultImportedTCToolbarHint; FlagKeepGoing := True; end; end; ACTION_WITH_TC_TOOLBARFILE: begin if areWeInSituationToPlayWithTCFiles then begin OpenDialog.DefaultExt := '*.BAR'; OpenDialog.FilterIndex := 3; OpenDialog.Title := rsMsgToolbarLocateTCToolbarFile; ImportedToolbarHint := rsDefaultImportedTCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; end; {$ENDIF} ACTION_WITH_DC_TOOLBARFILE: begin OpenDialog.DefaultExt := '*.toolbar'; OpenDialog.FilterIndex := 1; OpenDialog.Title := rsMsgToolbarLocateDCToolbarFile; ImportedToolbarHint := rsDefaultImportedDCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; ACTION_WITH_BACKUP: begin BackupPath := IncludeTrailingPathDelimiter(mbExpandFileName(EnvVarConfigPath)) + 'Backup'; if mbForceDirectory(BackupPath) then begin OpenDialog.DefaultExt := '*.toolbar'; OpenDialog.FilterIndex := 1; OpenDialog.InitialDir := ExcludeTrailingPathDelimiter(BackupPath); OpenDialog.Title := rsMsgToolbarRestoreWhat; ImportedToolbarHint := rsDefaultImportedDCToolbarHint; FlagKeepGoing := OpenDialog.Execute; end; end; end; //2o) If we got something valid, let's attempt to import it! if FlagKeepGoing then begin //3o) Let's make "Toolbar" hold the toolbar where to import in. ImportDestination := (ActionDispatcher and MASK_IMPORT_DESTIONATION); ImportDestination := ImportDestination shr 4; case ImportDestination of ACTION_WITH_MAIN_TOOLBAR: begin ToolBar := GetTopToolbar; end; ACTION_WITH_CURRENT_BAR: begin Toolbar := FCurrentButton.ToolBar; if Toolbar = nil then ToolBar := GetTopToolbar; end; IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR, IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR: begin case ImportDestination of IMPORT_IN_MAIN_TOOLBAR_TO_NEW_SUB_BAR: begin FCurrentButton := nil; ToolBar := GetTopToolbar; CloseToolbarsBelowCurrentButton; end; IMPORT_IN_CURRENT_BAR_TO_NEW_SUB_BAR: begin Toolbar := FCurrentButton.ToolBar; if Toolbar = nil then ToolBar := GetTopToolbar; end; end; if FCurrentButton <> nil then FCurrentButton.Down := False; LocalKASMenuItem := TKASMenuItem.Create; LocalKASMenuItem.Icon := 'cm_configtoolbars'; LocalKASMenuItem.Hint := ImportedToolbarHint; FCurrentButton := ToolBar.AddButton(LocalKASMenuItem); Toolbar := AddNewSubToolbar(LocalKASMenuItem); PressButtonDown(FCurrentButton); PressButtonDown(Toolbar.Buttons[0]); Toolbar.RemoveButton(0); // ...to remove the default empty button added by "AddNewSubToolbar" routine end; end; //4o) Let's attempt the actual import case (ActionDispatcher and MASK_ACTION_WITH_WHAT) of {$IFDEF MSWINDOWS} ACTION_WITH_WINCMDINI, ACTION_WITH_TC_TOOLBARFILE: begin if (ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING then begin FCurrentButton := nil; Application.ProcessMessages; ToolBar.Clear; Application.ProcessMessages; end; ImportTCToolbarsToDC(OpenDialog.FileName, LocalKASMenuItem, Toolbar, (ImportDestination and $01), FCurrentButton, FFormCommands); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[pred(ToolBar.ButtonCount)]); //Let's press the last added button since user might wants to complement what he just added end; {$ENDIF} ACTION_WITH_DC_TOOLBARFILE, ACTION_WITH_BACKUP: begin ToolbarConfig := TXmlConfig.Create(OpenDialog.FileName, True); try ToolBarNode := ToolbarConfig.FindNode(ToolbarConfig.RootNode, 'Toolbars/MainToolbar', False); if ToolBarNode <> nil then begin FCurrentButton := nil; if (ActionDispatcher and MASK_FLUSHORNOT_EXISTING) = ACTION_FLUSH_EXISTING then LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_FlushCurrentToolbarContent) else LoadToolbar(ToolBar, ToolbarConfig, ToolBarNode, tocl_AddToCurrentToolbarContent); if ToolBar.ButtonCount > 0 then PressButtonDown(ToolBar.Buttons[pred(ToolBar.ButtonCount)]); //Let's press the last added button since user might wants to complement what he just added end; finally FreeAndNil(ToolbarConfig); end; end; end; end; end; { TfrmOptionsToolbar.GenericSomethingChanged } procedure TfrmOptionsToolbar.GenericSomethingChanged(Sender: TObject); begin FModificationTookPlace := True; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/fquicksearch.lrt���������������������������������������������������������0000644�0001750�0000144�00000001267�11740433676�017775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMQUICKSEARCH.EDTSEARCH.HINT=Enter text to search for or filter by TFRMQUICKSEARCH.TGLFILTER.HINT=Toggle between search or filter TFRMQUICKSEARCH.TGLFILTER.CAPTION=Filter TFRMQUICKSEARCH.BTNCANCEL.HINT=Close filter panel TFRMQUICKSEARCH.BTNCANCEL.CAPTION=X TFRMQUICKSEARCH.SBMATCHBEGINNING.HINT=Match Beginning TFRMQUICKSEARCH.SBMATCHBEGINNING.CAPTION={ TFRMQUICKSEARCH.SBMATCHENDING.HINT=Match Ending TFRMQUICKSEARCH.SBMATCHENDING.CAPTION=} TFRMQUICKSEARCH.SBCASESENSITIVE.HINT=Case Sensitive TFRMQUICKSEARCH.SBCASESENSITIVE.CAPTION=Aa TFRMQUICKSEARCH.SBFILES.HINT=Files TFRMQUICKSEARCH.SBFILES.CAPTION=F TFRMQUICKSEARCH.SBDIRECTORIES.HINT=Directories TFRMQUICKSEARCH.SBDIRECTORIES.CAPTION=D �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfilesviews.lfm���������������������������������������������������0000644�0001750�0000144�00000024142�12423151100�021213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFilesViews: TfrmOptionsFilesViews Height = 550 Width = 640 ClientHeight = 550 ClientWidth = 640 DesignLeft = 304 DesignTop = 5 object gbSorting: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 151 Top = 6 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Sorting' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 6 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 133 ClientWidth = 624 TabOrder = 0 object lblSortMethod: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 13 Top = 8 Width = 91 Caption = '&Sort method:' FocusControl = cbSortMethod ParentColor = False end object cbSortMethod: TComboBox AnchorSideLeft.Control = lblSortMethod AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSortMethod AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 113 Height = 21 Top = 4 Width = 499 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Items.Strings = ( 'Alphabetical, considering accents' 'Natural sorting: alphabetical and numbers' ) Style = csDropDownList TabOrder = 0 end object lblCaseSensitivity: TLabel Left = 12 Height = 13 Top = 33 Width = 91 Caption = 'Case s&ensitivity:' FocusControl = cbCaseSensitivity ParentColor = False end object cbCaseSensitivity: TComboBox AnchorSideLeft.Control = lblCaseSensitivity AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCaseSensitivity AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 113 Height = 21 Top = 29 Width = 499 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Items.Strings = ( 'not case sensitive' 'according to locale settings (aAbBcC)' 'first upper then lower case (ABCabc)' ) Style = csDropDownList TabOrder = 1 end object lblSortFolderMode: TLabel Left = 12 Height = 13 Top = 58 Width = 91 Caption = 'So&rting directories:' FocusControl = cbSortFolderMode ParentColor = False end object cbSortFolderMode: TComboBox AnchorSideLeft.Control = lblSortFolderMode AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblSortFolderMode AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 113 Height = 21 Top = 54 Width = 499 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Items.Strings = ( 'sort by name and show first' 'sort like files and show first' 'sort like files' ) Style = csDropDownList TabOrder = 2 end object lblNewFilesPosition: TLabel Left = 12 Height = 13 Top = 83 Width = 91 Caption = '&Insert new files' FocusControl = cbNewFilesPosition ParentColor = False end object cbNewFilesPosition: TComboBox AnchorSideLeft.Control = lblNewFilesPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblNewFilesPosition AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 113 Height = 21 Top = 79 Width = 499 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Style = csDropDownList TabOrder = 3 end object lblUpdatedFilesPosition: TLabel Left = 12 Height = 13 Top = 108 Width = 91 Caption = '&Move updated files' FocusControl = cbUpdatedFilesPosition ParentColor = False end object cbUpdatedFilesPosition: TComboBox AnchorSideLeft.Control = lblUpdatedFilesPosition AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblUpdatedFilesPosition AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbSorting AnchorSideRight.Side = asrBottom Left = 113 Height = 21 Top = 104 Width = 499 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Style = csDropDownList TabOrder = 4 end end object gbMisc: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbFormatting AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 194 Top = 245 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 176 ClientWidth = 624 TabOrder = 2 object cbSpaceMovesDown: TCheckBox Left = 6 Height = 17 Top = 6 Width = 424 Caption = '&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)' TabOrder = 0 end object cbDirBrackets: TCheckBox Left = 6 Height = 17 Top = 27 Width = 424 Caption = 'S&how square brackets around directories' TabOrder = 1 end object cbShowSystemFiles: TCheckBox Left = 6 Height = 17 Top = 48 Width = 424 Caption = 'Show s&ystem and hidden files' TabOrder = 2 end object cbListFilesInThread: TCheckBox Left = 6 Height = 17 Top = 69 Width = 424 Caption = 'Load &file list in separate thread' TabOrder = 3 end object cbLoadIconsSeparately: TCheckBox Left = 6 Height = 17 Top = 90 Width = 424 Caption = 'Load icons af&ter file list' TabOrder = 4 end object cbDelayLoadingTabs: TCheckBox Left = 6 Height = 17 Top = 111 Width = 424 Caption = 'Do&n''t load file list until a tab is activated' TabOrder = 5 end object cbHighlightUpdatedFiles: TCheckBox Left = 6 Height = 17 Top = 132 Width = 424 Caption = 'Hi&ghlight new and updated files' TabOrder = 6 end object cbInplaceRename: TCheckBox Left = 6 Height = 17 Top = 153 Width = 424 Caption = 'Enable inplace &renaming when clicking twice on a name' TabOrder = 7 end end object gbFormatting: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbSorting AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 76 Top = 163 Width = 628 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Formatting' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 8 ChildSizing.HorizontalSpacing = 6 ChildSizing.VerticalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 58 ClientWidth = 624 TabOrder = 1 object lblDateTimeFormat: TLabel AnchorSideTop.Side = asrCenter Left = 12 Height = 13 Top = 8 Width = 106 Caption = '&Date and time format:' FocusControl = cbDateTimeFormat ParentColor = False end object cbFileSizeFormat: TComboBox AnchorSideLeft.Control = lblFileSizeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblFileSizeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 128 Height = 21 Top = 29 Width = 484 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 ItemHeight = 13 Style = csDropDownList TabOrder = 1 end object lblFileSizeFormat: TLabel Left = 12 Height = 13 Top = 33 Width = 106 Caption = 'File si&ze format:' FocusControl = cbFileSizeFormat ParentColor = False end object pnlDateTime: TPanel AnchorSideLeft.Control = lblDateTimeFormat AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblDateTimeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbFormatting AnchorSideRight.Side = asrBottom Left = 128 Height = 21 Top = 4 Width = 484 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 10 BevelOuter = bvNone ClientHeight = 21 ClientWidth = 484 TabOrder = 0 object lblDateTimeExample: TLabel AnchorSideTop.Control = cbDateTimeFormat AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlDateTime AnchorSideRight.Side = asrBottom Left = 389 Height = 13 Top = 4 Width = 95 Anchors = [akTop, akRight] Caption = 'Incorrect format' Font.Style = [fsBold] ParentColor = False ParentFont = False end object cbDateTimeFormat: TComboBox AnchorSideRight.Control = lblDateTimeExample Left = 0 Height = 21 Top = 0 Width = 381 Align = alLeft Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 8 ItemHeight = 13 Items.Strings = ( 'yyyy/mm/dd hh:mm:ss' 'yyyy/mm/dd hh:mm' 'yy/mm/dd hh:mm' 'dd/mm/yyyy hh:mm:ss' 'dd/mm/yyyy hh:mm' 'dd/mm/yy hh:mm' 'dd/mm/yyyy' 'dd/mm/yy' ) OnChange = cbDateTimeFormatChange TabOrder = 0 end end end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileoperations.lfm�����������������������������������������������0000644�0001750�0000144�00000027320�12573073054�022100� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFileOperations: TfrmOptionsFileOperations Height = 649 Width = 734 ChildSizing.LeftRightSpacing = 6 ClientHeight = 649 ClientWidth = 734 DesignLeft = 392 DesignTop = 17 object gbUserInterface: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = gbExecutingOperations AnchorSideRight.Side = asrBottom Left = 6 Height = 274 Top = 0 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'User interface' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 254 ClientWidth = 718 TabOrder = 0 object lblProgressKind: TLabel AnchorSideLeft.Control = gbUserInterface AnchorSideTop.Control = cbProgressKind AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 14 Width = 190 BorderSpacing.Bottom = 10 Caption = 'Show operations progress &initially in' FocusControl = cbProgressKind ParentColor = False end object cbProgressKind: TComboBoxAutoWidth AnchorSideLeft.Control = lblProgressKind AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbUserInterface AnchorSideRight.Side = asrBottom Left = 204 Height = 23 Top = 10 Width = 100 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end object cbDropReadOnlyFlag: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbProgressKind AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 37 Width = 118 Caption = 'D&rop readonly flag' TabOrder = 1 end object cbRenameSelOnlyName: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDropReadOnlyFlag AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 60 Width = 286 Caption = 'Select &file name without extension when renaming' TabOrder = 2 end object cbShowCopyTabSelectPanel: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbRenameSelOnlyName AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 83 Width = 247 Caption = 'Sho&w tab select panel in copy/move dialog' TabOrder = 3 end object cbDeleteToTrash: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbShowCopyTabSelectPanel AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 106 Width = 289 Caption = 'Dele&te to recycle bin (Shift key reverses this setting)' OnChange = cbDeleteToTrashChange TabOrder = 4 end object cbCopyConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = bvlConfirmations AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 156 Width = 102 Caption = 'Cop&y operation' TabOrder = 5 end object cbMoveConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbCopyConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 179 Width = 104 Caption = '&Move operation' TabOrder = 6 end object cbDeleteConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbMoveConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 202 Width = 107 Caption = '&Delete operation' TabOrder = 7 end object cbDeleteToTrashConfirmation: TCheckBox AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDeleteConfirmation AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 225 Width = 150 Caption = 'D&elete to trash operation' TabOrder = 8 end object bvlConfirmations: TDividerBevel AnchorSideLeft.Control = lblProgressKind AnchorSideTop.Control = cbDeleteToTrash AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbUserInterface AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 137 Width = 698 Caption = 'Show confirmation window for:' Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 ParentFont = False end end object gbExecutingOperations: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbUserInterface AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 190 Top = 280 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Executing operations' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 170 ClientWidth = 718 TabOrder = 1 object lblBufferSize: TLabel AnchorSideLeft.Control = gbExecutingOperations AnchorSideTop.Control = edtBufferSize AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 14 Width = 191 BorderSpacing.Bottom = 10 Caption = '&Buffer size for file operations (in KB):' FocusControl = edtBufferSize ParentColor = False end object edtBufferSize: TEdit AnchorSideLeft.Control = lblBufferSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbExecutingOperations AnchorSideBottom.Side = asrCenter Left = 205 Height = 23 Top = 10 Width = 80 TabOrder = 0 end object lblWipePassNumber: TLabel AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = seWipePassNumber AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 10 Height = 15 Top = 68 Width = 126 BorderSpacing.Bottom = 10 Caption = '&Number of wipe passes:' FocusControl = seWipePassNumber ParentColor = False end object seWipePassNumber: TSpinEdit AnchorSideLeft.Control = lblWipePassNumber AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtHashBufferSize AnchorSideTop.Side = asrBottom Left = 140 Height = 23 Top = 64 Width = 50 TabOrder = 2 end object cbProcessComments: TCheckBox AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = seWipePassNumber AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 91 Width = 211 Caption = '&Process comments with files/folders' TabOrder = 3 end object cbSkipFileOpError: TCheckBox AnchorSideLeft.Control = lblBufferSize AnchorSideTop.Control = cbProcessComments AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 114 Width = 315 Caption = 'S&kip file operations errors and write them to log window' TabOrder = 4 end object lblTypeOfDuplicatedRename: TLabel AnchorSideLeft.Control = cbSkipFileOpError AnchorSideTop.Control = cmbTypeOfDuplicatedRename AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 141 Width = 192 Caption = 'Duplicated name auto-rename style:' ParentColor = False end object cmbTypeOfDuplicatedRename: TComboBoxAutoWidth AnchorSideLeft.Control = lblTypeOfDuplicatedRename AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSkipFileOpError AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 206 Height = 23 Top = 137 Width = 100 BorderSpacing.Top = 4 ItemHeight = 15 Items.Strings = ( 'DC legacy - Copy (x) filename.ext' 'Windows - filename (x).ext' 'Other - filename(x).ext' ) Style = csDropDownList TabOrder = 5 end object edtHashBufferSize: TEdit AnchorSideLeft.Control = lblHashBufferSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtBufferSize AnchorSideTop.Side = asrBottom AnchorSideBottom.Side = asrCenter Left = 216 Height = 23 Top = 37 Width = 80 TabOrder = 1 end object lblHashBufferSize: TLabel AnchorSideLeft.Control = gbExecutingOperations AnchorSideTop.Control = edtHashBufferSize AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 41 Width = 202 BorderSpacing.Bottom = 10 Caption = 'Buffer size for &hash calculation (in KB):' FocusControl = edtHashBufferSize ParentColor = False end end object gbFileSearch: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbExecutingOperations AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 143 Top = 476 Width = 722 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'File search' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.HorizontalSpacing = 4 ChildSizing.VerticalSpacing = 4 ClientHeight = 123 ClientWidth = 718 TabOrder = 2 object rbUseMmapInSearch: TRadioButton AnchorSideLeft.Control = gbFileSearch AnchorSideTop.Control = dbTextSearch AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 75 Width = 252 Caption = 'Use memory mapping for search te&xt in files' TabOrder = 2 end object rbUseStreamInSearch: TRadioButton AnchorSideLeft.Control = rbUseMmapInSearch AnchorSideTop.Control = rbUseMmapInSearch AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 100 Width = 192 BorderSpacing.Top = 6 Caption = '&Use stream for search text in files' Checked = True TabOrder = 3 TabStop = True end object cbPartialNameSearch: TCheckBox AnchorSideLeft.Control = rbUseStreamInSearch AnchorSideTop.Control = gbFileSearch Left = 10 Height = 19 Top = 6 Width = 163 BorderSpacing.Top = 6 Caption = '&Search for part of file name' TabOrder = 0 end object dbTextSearch: TDividerBevel AnchorSideLeft.Control = gbFileSearch AnchorSideTop.Control = cbSearchDefaultTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFileSearch AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 56 Width = 698 Caption = 'Text search in files' Anchors = [akTop, akLeft, akRight] end object lblSearchDefaultTemplate: TLabel AnchorSideLeft.Control = cbPartialNameSearch AnchorSideTop.Control = cbSearchDefaultTemplate AnchorSideTop.Side = asrCenter Left = 10 Height = 15 Top = 33 Width = 128 Caption = 'Default search template:' ParentColor = False end object cbSearchDefaultTemplate: TComboBoxAutoWidth AnchorSideLeft.Control = lblSearchDefaultTemplate AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbPartialNameSearch AnchorSideTop.Side = asrBottom Left = 144 Height = 23 Top = 29 Width = 100 BorderSpacing.Left = 6 ItemHeight = 15 Style = csDropDownList TabOrder = 1 end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionskeyboard.pas�����������������������������������������������������0000644�0001750�0000144�00000006771�12020403374�020656� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Keyboard options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsKeyboard; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsKeyboard } TfrmOptionsKeyboard = class(TOptionsEditor) cbLynxLike: TCheckBox; cbNoModifier: TComboBox; cbAlt: TComboBox; cbCtrlAlt: TComboBox; gbTyping: TGroupBox; lblNoModifier: TLabel; lblAlt: TLabel; lblCtrlAlt: TLabel; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses DCStrUtils, uGlobs, uLng; const KeyAction_None = 0; KeyAction_CommandLine = 1; KeyAction_QuickSearch = 2; KeyAction_QuickFilter = 3; { TfrmOptionsKeyboard } procedure TfrmOptionsKeyboard.Init; begin // Copy localized strings to each combo box. ParseLineToList(rsOptLetters, cbNoModifier.Items); cbAlt.Items.Assign(cbNoModifier.Items); cbCtrlAlt.Items.Assign(cbNoModifier.Items); end; procedure TfrmOptionsKeyboard.Load; procedure SetAction(ComboBox: TComboBox; KeyTypingAction: TKeyTypingAction); begin case KeyTypingAction of ktaNone: ComboBox.ItemIndex := KeyAction_None; ktaCommandLine: ComboBox.ItemIndex := KeyAction_CommandLine; ktaQuickSearch: ComboBox.ItemIndex := KeyAction_QuickSearch; ktaQuickFilter: ComboBox.ItemIndex := KeyAction_QuickFilter; else raise Exception.Create('Unknown TKeyTypingMode'); end; end; begin SetAction(cbNoModifier, gKeyTyping[ktmNone]); SetAction(cbAlt, gKeyTyping[ktmAlt]); SetAction(cbCtrlAlt, gKeyTyping[ktmCtrlAlt]); cbLynxLike.Checked := gLynxLike; end; function TfrmOptionsKeyboard.Save: TOptionsEditorSaveFlags; function GetAction(ComboBox: TComboBox): TKeyTypingAction; begin case ComboBox.ItemIndex of KeyAction_None: Result := ktaNone; KeyAction_CommandLine: Result := ktaCommandLine; KeyAction_QuickSearch: Result := ktaQuickSearch; KeyAction_QuickFilter: Result := ktaQuickFilter; else raise Exception.Create('Unknown action selected'); end; end; begin gKeyTyping[ktmNone] := GetAction(cbNoModifier); gKeyTyping[ktmAlt] := GetAction(cbAlt); gKeyTyping[ktmCtrlAlt] := GetAction(cbCtrlAlt); gLynxLike := cbLynxLike.Checked; Result := []; end; class function TfrmOptionsKeyboard.GetIconIndex: Integer; begin Result := 26; end; class function TfrmOptionsKeyboard.GetTitle: String; begin Result := rsOptionsEditorKeyboard; end; end. �������doublecmd-0.7.1/src/frames/foptionsbriefview.pas����������������������������������������������������0000644�0001750�0000144�00000005422�12513013701�021026� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Brief view options page Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit fOptionsBriefView; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls, Spin; type { TfrmOptionsBriefView } TfrmOptionsBriefView = class(TOptionsEditor) gbShowFileExt: TGroupBox; gbColumns: TGroupBox; rbUseFixedWidth: TRadioButton; rbUseFixedCount: TRadioButton; rbUseAutoSize: TRadioButton; rbDirectly: TRadioButton; rbAligned: TRadioButton; speUseFixedWidth: TSpinEdit; speUseFixedCount: TSpinEdit; lblStub: TLabel; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsBriefView } procedure TfrmOptionsBriefView.Load; begin rbAligned.Checked := gBriefViewFileExtAligned; speUseFixedWidth.Value := gBriefViewFixedWidth; speUseFixedCount.Value := gBriefViewFixedCount; rbUseAutoSize.Checked := gBriefViewMode = bvmAutoSize; rbUseFixedWidth.Checked := gBriefViewMode = bvmFixedWidth; rbUseFixedCount.Checked := gBriefViewMode = bvmFixedCount; end; function TfrmOptionsBriefView.Save: TOptionsEditorSaveFlags; begin gBriefViewFileExtAligned := rbAligned.Checked; gBriefViewFixedWidth := speUseFixedWidth.Value; gBriefViewFixedCount := speUseFixedCount.Value; if rbUseAutoSize.Checked then gBriefViewMode := bvmAutoSize; if rbUseFixedWidth.Checked then gBriefViewMode := bvmFixedWidth; if rbUseFixedCount.Checked then gBriefViewMode := bvmFixedCount; Result := []; end; class function TfrmOptionsBriefView.GetIconIndex: Integer; begin Result := 35; end; class function TfrmOptionsBriefView.GetTitle: String; begin Result := rsOptionsEditorBriefView; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionscustomcolumns.lfm������������������������������������������������0000644�0001750�0000144�00000121625�12667335311�021774� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsCustomColumns: TfrmOptionsCustomColumns Height = 596 Width = 911 ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 596 ClientWidth = 911 ParentShowHint = False ShowHint = True DesignLeft = 241 DesignTop = 65 object pnlConfigColumns: TPanel[0] Left = 4 Height = 31 Top = 4 Width = 903 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 4 ChildSizing.TopBottomSpacing = 4 ClientHeight = 31 ClientWidth = 903 TabOrder = 0 object lblConfigColumns: TLabel AnchorSideLeft.Control = pnlConfigColumns AnchorSideTop.Control = cbConfigColumns AnchorSideTop.Side = asrCenter Left = 4 Height = 15 Top = 8 Width = 132 BorderSpacing.Right = 2 Caption = 'Con&figure columns view:' FocusControl = cbConfigColumns ParentColor = False end object cbConfigColumns: TComboBox AnchorSideLeft.Control = lblConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlConfigColumns AnchorSideRight.Side = asrBottom Left = 138 Height = 23 Top = 4 Width = 367 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 4 Constraints.MaxWidth = 440 Font.Style = [fsBold] ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'General' ) OnChange = cbConfigColumnsChange ParentFont = False Style = csDropDownList TabOrder = 0 Text = 'General' end object btnSaveConfigColumns: TButton Tag = 1 AnchorSideLeft.Control = cbConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Control = btnRenameConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 509 Height = 23 Top = 4 Width = 50 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Save' OnClick = btnSaveConfigColumnsClick TabOrder = 1 end object btnRenameConfigColumns: TButton Tag = 4 AnchorSideLeft.Control = btnNewConfig AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 685 Height = 23 Top = 4 Width = 69 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Rename' OnClick = btnSaveConfigColumnsClick TabOrder = 4 end object btnSaveAsConfigColumns: TButton Tag = 2 AnchorSideLeft.Control = btnSaveConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 563 Height = 23 Top = 4 Width = 64 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'Save as' OnClick = btnSaveConfigColumnsClick TabOrder = 2 end object btnDeleteConfigColumns: TButton AnchorSideLeft.Control = btnRenameConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 758 Height = 23 Top = 4 Width = 59 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = '&Delete' OnClick = btnDeleteConfigColumnsClick TabOrder = 5 end object btnNewConfig: TButton Tag = 3 AnchorSideLeft.Control = btnSaveAsConfigColumns AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbConfigColumns AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbConfigColumns AnchorSideBottom.Side = asrBottom Left = 631 Height = 23 Top = 4 Width = 50 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 4 Caption = 'New' OnClick = btnSaveConfigColumnsClick TabOrder = 3 end end object pnlActualCont: TPanel[1] Left = 4 Height = 557 Top = 35 Width = 903 Align = alClient Anchors = [akTop, akLeft, akBottom] ClientHeight = 557 ClientWidth = 903 TabOrder = 1 object pnlGeneralColumnsViewSettings: TPanel Left = 1 Height = 30 Top = 156 Width = 901 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 4 ClientHeight = 30 ClientWidth = 901 TabOrder = 2 object chkUseCustomView: TCheckBox AnchorSideLeft.Control = pnlGeneralColumnsViewSettings AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter Left = 8 Height = 19 Top = 6 Width = 239 Caption = 'Use custom font and color for this view' Font.Style = [fsBold] OnChange = chkUseCustomViewChange ParentFont = False TabOrder = 0 end object cbCursorBorder: TCheckBox AnchorSideLeft.Control = chkUseCustomView AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter Left = 282 Height = 19 Top = 6 Width = 93 BorderSpacing.Left = 35 Caption = 'Cursor border' OnChange = cbCursorBorderChange TabOrder = 1 end object cbCursorBorderColor: TColorBox AnchorSideLeft.Control = cbCursorBorder AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlGeneralColumnsViewSettings Left = 375 Height = 22 Top = 4 Width = 144 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] ItemHeight = 16 OnChange = cbCursorBorderColorChange TabOrder = 2 end object btnCursorBorderColor: TButton AnchorSideLeft.Control = cbCursorBorderColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 520 Height = 22 Top = 4 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorBorderColorClick TabOrder = 3 end object cbUseFrameCursor: TCheckBox AnchorSideLeft.Control = btnResetCursorBorder AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter Left = 617 Height = 19 Top = 6 Width = 113 BorderSpacing.Left = 35 Caption = 'Use Frame Cursor' OnChange = cbUseFrameCursorChange TabOrder = 5 end object btnResetCursorBorder: TButton AnchorSideLeft.Control = btnCursorBorderColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCursorBorderColor AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 549 Height = 22 Hint = 'Reset to default' Top = 4 Width = 33 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetCursorBorderClick TabOrder = 4 end object btnResetFrameCursor: TButton AnchorSideLeft.Control = cbUseFrameCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCursorBorderColor AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 731 Height = 22 Hint = 'Reset to default' Top = 4 Width = 33 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetFrameCursorClick TabOrder = 6 end object btnGotoSetDefault: TButton AnchorSideLeft.Control = btnResetFrameCursor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnCursorBorderColor AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 771 Height = 22 Hint = 'Reset to default' Top = 4 Width = 113 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 7 Caption = 'Go to set default' OnClick = btnGotoSetDefaultClick TabOrder = 7 Visible = False end end object stgColumns: TStringGrid Left = 1 Height = 140 Top = 1 Width = 901 Align = alTop ColCount = 7 Constraints.MinHeight = 80 FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goEditing, goSmoothScroll] PopupMenu = pmStringGrid RowCount = 3 TabOrder = 0 OnEditingDone = stgColumnsEditingDone OnKeyDown = stgColumnsKeyDown OnMouseDown = stgColumnsMouseDown OnMouseMove = stgColumnsMouseMove OnSelectEditor = stgColumnsSelectEditor ColWidths = ( 67 129 64 61 457 38 72 ) Cells = ( 7 0 0 'Delete' 1 0 'Caption' 2 0 'Width' 3 0 'Align' 4 0 'Field contents' 5 0 'Move' 6 0 'Config' ) end object spGridArea: TSplitter Cursor = crVSplit Left = 1 Height = 15 Top = 141 Width = 901 Align = alTop Beveled = True MinSize = 15 ResizeAnchor = akTop end object pnlCustomColumnsViewSettings: TPanel Left = 1 Height = 179 Top = 186 Width = 901 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 179 ClientWidth = 901 TabOrder = 3 object btnPrev: TButton AnchorSideLeft.Control = pnlCustomColumnsViewSettings AnchorSideTop.Control = pnlCustomColumnsViewSettings AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 8 Height = 25 Top = 0 Width = 71 Caption = 'Previous' OnClick = btnPrevClick TabOrder = 0 end object btnNext: TButton AnchorSideLeft.Control = btnPrev AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 79 Height = 25 Top = 0 Width = 50 AutoSize = True Caption = 'Next' OnClick = btnNextClick TabOrder = 1 end object lblFontName: TLabel AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideRight.Control = edtFont Left = 51 Height = 15 Top = 34 Width = 27 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Font:' ParentColor = False end object edtFont: TEdit AnchorSideLeft.Control = btnNext AnchorSideTop.Control = btnNext AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFont Left = 79 Height = 23 Top = 30 Width = 301 BorderSpacing.Top = 5 BorderSpacing.Right = 1 ReadOnly = True TabOrder = 3 end object btnFont: TBitBtn AnchorSideLeft.Control = edtFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 381 Height = 22 Top = 30 Width = 40 BorderSpacing.Bottom = 2 Caption = '...' OnClick = btnFontClick TabOrder = 4 end object lblFontSize: TLabel AnchorSideLeft.Control = btnFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnFont AnchorSideTop.Side = asrCenter Left = 425 Height = 15 Top = 34 Width = 23 BorderSpacing.Left = 4 Caption = 'Size:' ParentColor = False end object sneFontSize: TSpinEdit AnchorSideLeft.Control = lblFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 452 Height = 23 Top = 30 Width = 48 BorderSpacing.Left = 4 MaxValue = 25 MinValue = 8 OnChange = sneFontSizeChange TabOrder = 5 Value = 8 end object btnResetFont: TButton AnchorSideLeft.Control = sneFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter AnchorSideBottom.Side = asrBottom Left = 501 Height = 22 Hint = 'Reset to default' Top = 30 Width = 33 BorderSpacing.Left = 1 Caption = 'R' OnClick = btnResetFontClick TabOrder = 6 end object btnAllFont: TButton AnchorSideLeft.Control = btnResetFont AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrCenter Left = 535 Height = 22 Hint = 'Apply modification to all columns' Top = 30 Width = 40 BorderSpacing.Left = 1 Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 7 end object cbAllowOverColor: TCheckBox Tag = 11 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetAllowOverColor Left = 704 Height = 19 Top = 153 Width = 105 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Allow Overcolor' OnChange = cbAllowOvercolorChange TabOrder = 46 end object lblForeColor: TLabel Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbForeColor Left = 105 Height = 15 Top = 59 Width = 56 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'Text Color:' ParentColor = False end object lblBackColor: TLabel Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 93 Height = 15 Top = 83 Width = 68 Anchors = [akTop, akRight] Caption = 'BackGround:' ParentColor = False end object lblBackColor2: TLabel Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 85 Height = 15 Top = 107 Width = 76 Anchors = [akTop, akRight] Caption = 'Background 2:' ParentColor = False end object lblMarkColor: TLabel Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblForeColor AnchorSideRight.Side = asrBottom Left = 99 Height = 15 Top = 131 Width = 62 Anchors = [akTop, akRight] Caption = 'Mark Color:' ParentColor = False end object cbMarkColor: TColorBox Tag = 4 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 127 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbMarkColorChange TabOrder = 20 end object cbBackColor2: TColorBox Tag = 3 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 103 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbBackColor2Change TabOrder = 16 end object cbBackColor: TColorBox Tag = 2 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbForeColor AnchorSideRight.Side = asrBottom Left = 167 Height = 22 Top = 79 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 ItemHeight = 16 OnChange = cbBackColorChange TabOrder = 12 end object cbForeColor: TColorBox Tag = 1 AnchorSideTop.Control = edtFont AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnForeColor Left = 167 Height = 22 Top = 55 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 1 ItemHeight = 16 OnChange = cbForeColorChange ParentFont = False TabOrder = 8 end object btnForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor Left = 318 Height = 22 Top = 55 Width = 28 Anchors = [akTop, akRight] BorderSpacing.Right = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnForeColorClick TabOrder = 9 end object btnBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 79 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColorClick TabOrder = 13 end object btnBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 103 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColor2Click TabOrder = 17 end object btnMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnForeColor AnchorSideRight.Side = asrBottom Left = 318 Height = 22 Top = 127 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnMarkColorClick TabOrder = 21 end object btnResetMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 127 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetMarkColorClick TabOrder = 22 end object btnResetBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 103 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetBackColor2Click TabOrder = 18 end object btnResetBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetForeColor AnchorSideRight.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 79 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetBackColorClick TabOrder = 14 end object btnResetForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllForeColor AnchorSideBottom.Side = asrBottom Left = 347 Height = 22 Hint = 'Reset to default' Top = 55 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetForeColorClick TabOrder = 10 end object btnAllForeColor: TButton Tag = 1 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 55 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 11 end object btnAllBackColor: TButton Tag = 2 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 79 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 15 end object btnAllBackColor2: TButton Tag = 3 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 103 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 19 end object btnAllMarkColor: TButton Tag = 4 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnFont AnchorSideRight.Side = asrBottom Left = 381 Height = 22 Hint = 'Apply modification to all columns' Top = 127 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 23 end object lblInactiveMarkColor: TLabel Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 517 Height = 15 Top = 131 Width = 106 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Inactive Mark Color:' ParentColor = False end object lblInactiveCursorColor: TLabel Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 510 Height = 15 Top = 107 Width = 114 Anchors = [akTop, akRight] Caption = 'Inactive Cursor Color:' ParentColor = False end object lblCursorText: TLabel Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblCursorColor AnchorSideRight.Side = asrBottom Left = 562 Height = 15 Top = 83 Width = 62 Anchors = [akTop, akRight] Caption = 'Cursor Text:' ParentColor = False end object lblCursorColor: TLabel Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor Left = 554 Height = 15 Top = 59 Width = 70 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'Cursor Color:' ParentColor = False end object cbCursorColor: TColorBox Tag = 5 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor Left = 630 Height = 22 Top = 55 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] BorderSpacing.Right = 1 ItemHeight = 16 OnChange = cbCursorColorChange TabOrder = 24 end object cbCursorText: TColorBox Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 630 Height = 22 Top = 79 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbCursorTextChange TabOrder = 28 end object cbInactiveCursorColor: TColorBox Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 630 Height = 22 Top = 103 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbInactiveCursorColorChange TabOrder = 32 end object cbInactiveMarkColor: TColorBox Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorColor AnchorSideRight.Side = asrBottom Left = 630 Height = 22 Top = 127 Width = 150 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akRight] ItemHeight = 16 OnChange = cbInactiveMarkColorChange TabOrder = 36 end object btnInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 781 Height = 22 Top = 127 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveMarkColorClick TabOrder = 37 end object btnInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 781 Height = 22 Top = 103 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveCursorColorClick TabOrder = 33 end object btnCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCursorColor AnchorSideRight.Side = asrBottom Left = 781 Height = 22 Top = 79 Width = 28 Anchors = [akTop, akRight] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorTextClick TabOrder = 29 end object btnCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor Left = 781 Height = 22 Top = 55 Width = 28 Anchors = [akTop, akRight] BorderSpacing.Right = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorColorClick TabOrder = 25 end object btnResetInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 810 Height = 22 Hint = 'Reset to default' Top = 103 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetInactiveCursorColorClick TabOrder = 34 end object btnResetCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 810 Height = 22 Hint = 'Reset to default' Top = 79 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetCursorTextClick TabOrder = 30 end object btnResetCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor Left = 810 Height = 22 Hint = 'Reset to default' Top = 55 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetCursorColorClick TabOrder = 26 end object btnAllCursorColor: TButton Tag = 5 AnchorSideTop.Control = cbForeColor AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 844 Height = 22 Hint = 'Apply modification to all columns' Top = 55 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 27 end object btnAllCursorText: TButton Tag = 6 AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 844 Height = 22 Hint = 'Apply modification to all columns' Top = 79 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 31 end object btnAllInactiveCursorColor: TButton Tag = 7 AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 844 Height = 22 Hint = 'Apply modification to all columns' Top = 103 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 35 end object btnAllInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 844 Height = 22 Hint = 'Apply modification to all columns' Top = 127 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 39 end object btnResetInactiveMarkColor: TButton Tag = 8 AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 810 Height = 22 Hint = 'Reset to default' Top = 127 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetInactiveMarkColorClick TabOrder = 38 end object cbUseInvertedSelection: TCheckBox Tag = 9 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetUseInvertedSelection Left = 111 Height = 19 Top = 153 Width = 136 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Use Inverted Selection' OnChange = cbUseInvertedSelectionChange TabOrder = 40 end object cbUseInactiveSelColor: TCheckBox Tag = 10 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetUseInactiveSelColor Left = 382 Height = 19 Top = 153 Width = 166 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'Use Inactive Selection Color' OnChange = cbUseInactiveSelColorChange TabOrder = 43 end object btnAllUseInvertedSelection: TButton Tag = 9 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbMarkColor AnchorSideRight.Side = asrBottom Left = 282 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 35 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 42 end object btnAllUseInactiveSelColor: TButton Tag = 10 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 583 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 40 Anchors = [akTop, akRight] Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 45 end object btnAllAllowOverColor: TButton Tag = 11 AnchorSideTop.Control = btnAllInactiveMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAllCursorColor AnchorSideRight.Side = asrBottom Left = 844 Height = 22 Hint = 'Apply modification to all columns' Top = 151 Width = 40 Anchors = [akTop, akRight] BorderSpacing.Top = 2 BorderSpacing.Bottom = 6 Caption = 'All' OnClick = btnAllForeColorClick TabOrder = 48 end object lblWorkingColumn: TLabel AnchorSideLeft.Control = btnNext AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter Left = 134 Height = 15 Top = 5 Width = 113 BorderSpacing.Left = 5 Caption = 'Settings for column:' Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblCurrentColumn: TLabel AnchorSideLeft.Control = lblWorkingColumn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter Left = 250 Height = 15 Top = 5 Width = 132 BorderSpacing.Left = 3 Caption = '[Current Column Name]' Font.Style = [fsBold] ParentColor = False ParentFont = False end object btnResetAllowOverColor: TButton Tag = 11 AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnResetCursorColor AnchorSideRight.Side = asrBottom Left = 810 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] Caption = 'R' OnClick = btnResetAllowOverColorClick TabOrder = 47 end object btnResetUseInvertedSelection: TButton Tag = 9 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllUseInvertedSelection Left = 248 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetUseInvertedSelectionClick TabOrder = 41 end object btnResetUseInactiveSelColor: TButton Tag = 10 AnchorSideLeft.Control = btnCursorColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnAllAllowOverColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAllUseInactiveSelColor Left = 549 Height = 22 Hint = 'Reset to default' Top = 151 Width = 33 Anchors = [akTop, akRight] BorderSpacing.Right = 1 Caption = 'R' OnClick = btnResetUseInactiveSelColorClick TabOrder = 44 end object cbApplyChangeForAllColumns: TCheckBox AnchorSideLeft.Control = sneFontSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnPrev AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 500 Height = 19 Top = 3 Width = 338 Caption = 'When clicking to change something, change for all columns' OnChange = cbApplyChangeForAllColumnsChange TabOrder = 2 end end object pnlPreviewCont: TPanel Left = 1 Height = 191 Top = 365 Width = 901 Align = alClient BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 191 ClientWidth = 901 Color = clInactiveCaption Constraints.MinHeight = 125 ParentColor = False TabOrder = 4 object lblPreviewTop: TLabel Left = 8 Height = 15 Top = 0 Width = 885 Align = alTop Alignment = taCenter Caption = 'Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings.' Font.Color = clHighlight ParentColor = False ParentFont = False end object pnlLeft: TPanel Left = 8 Height = 168 Top = 15 Width = 437 Align = alLeft BorderSpacing.Bottom = 8 BevelOuter = bvNone Constraints.MinWidth = 50 ParentColor = False TabOrder = 0 OnEnter = pnlLeftEnter end object pnlRight: TPanel Left = 456 Height = 168 Top = 15 Width = 437 Align = alClient BorderSpacing.Bottom = 8 BevelOuter = bvNone Constraints.MinWidth = 50 ParentColor = False TabOrder = 2 OnEnter = pnlRightEnter end object spltBetweenPanels: TSplitter Left = 445 Height = 176 Top = 15 Width = 11 end end end object pmStringGrid: TPopupMenu[2] left = 48 top = 72 object miAddColumn: TMenuItem Caption = 'Add column' OnClick = miAddColumnClick end end object pmFields: TPopupMenu[3] left = 136 top = 72 end object dlgfont: TFontDialog[4] MinFontSize = 0 MaxFontSize = 0 left = 216 top = 72 end object dlgcolor: TColorDialog[5] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) left = 304 top = 72 end end �����������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstabs.lrt���������������������������������������������������������0000644�0001750�0000144�00000002555�12660674103�020033� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTABS.GBTABS.CAPTION=Folder tabs headers TFRMOPTIONSTABS.LBLCHAR.CAPTION=characters TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION=Ta&bs position TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION=&Show tab header also when there is only one tab TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION=&Tabs on multiple lines TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION=&Limit tab title length to TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION=Ctrl+&Up opens new tab in foreground TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION=Con&firm close all tabs TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION=Show locked tabs &with an asterisk * TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION=Activate target &panel when clicking on one of its Tabs TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION=Show ta&b close button TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION=Open &new tabs near current tab TFRMOPTIONSTABS.CBTABSCLOSEDUPLICATEWHENCLOSING.CAPTION=Close duplicate tabs when closing application TFRMOPTIONSTABS.CBTABSSHOWDRIVELETTER.CAPTION=Always show drive letter in tab title TFRMOPTIONSTABS.CBTABSREUSETABWHENPOSSIBLE.CAPTION=Reuse existing tab when possible TFRMOPTIONSTABS.CBTABSCONFIRMCLOSELOCKED.CAPTION=Confirm close locked tabs TFRMOPTIONSTABS.CBKEEPRENAMEDNAMEBACKTONORMAL.CAPTION=Keep renamed name when unlocking a tab TFRMOPTIONSTABS.LBLTABSACTIONONDOUBLECLICK.CAPTION=Action to do when double click on a tab: ���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstabs.pas���������������������������������������������������������0000644�0001750�0000144�00000017263�12660674103�020017� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tabs options page Copyright (C) 2006-2016 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsTabs; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ComCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsTabs } TfrmOptionsTabs = class(TOptionsEditor) cbTabsActivateOnClick: TCheckBox; cbTabsAlwaysVisible: TCheckBox; cbTabsConfirmCloseAll: TCheckBox; cbTabsLimitOption: TCheckBox; cbTabsLockedAsterisk: TCheckBox; cbTabsMultiLines: TCheckBox; cbTabsOpenForeground: TCheckBox; cbTabsOpenNearCurrent: TCheckBox; cbTabsShowCloseButton: TCheckBox; cmbTabsPosition: TComboBox; cbTabsActionOnDoubleClick: TComboBox; edtTabsLimitLength: TEdit; gbTabs: TGroupBox; lblTabsActionOnDoubleClick: TLabel; lblChar: TLabel; lblTabsPosition: TLabel; cbKeepRenamedNameBackToNormal: TCheckBox; cbTabsConfirmCloseLocked: TCheckBox; cbTabsReuseTabWhenPossible: TCheckBox; cbTabsShowDriveLetter: TCheckBox; cbTabsCloseDuplicateWhenClosing: TCheckBox; private FPageControl: TPageControl; // For checking Tabs capabilities FLastLoadedOptionSignature: dword; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses Forms, fOptions, uShowMsg, uComponentsSignature, DCStrUtils, uLng, uGlobs; { TfrmOptionsTabs } procedure TfrmOptionsTabs.Init; begin ParseLineToList(rsOptTabsPosition, cmbTabsPosition.Items); ParseLineToList(rsTabsActionOnDoubleClickChoices, cbTabsActionOnDoubleClick.Items); FPageControl := TPageControl.Create(Self); end; class function TfrmOptionsTabs.GetIconIndex: integer; begin Result := 9; end; class function TfrmOptionsTabs.GetTitle: string; begin Result := rsOptionsEditorFolderTabs; end; procedure TfrmOptionsTabs.Load; begin {$IFDEF MSWINDOWS} cbTabsShowDriveLetter.Visible := True; {$ENDIF} cbTabsAlwaysVisible.Checked := (tb_always_visible in gDirTabOptions) and gDirectoryTabs; cbTabsLimitOption.Checked := tb_text_length_limit in gDirTabOptions; cbTabsConfirmCloseAll.Checked := tb_confirm_close_all in gDirTabOptions; cbTabsConfirmCloseLocked.Checked := tb_confirm_close_locked_tab in gDirTabOptions; cbTabsCloseDuplicateWhenClosing.Checked := tb_close_duplicate_when_closing in gDirTabOptions; cbTabsOpenForeground.Checked := tb_open_new_in_foreground in gDirTabOptions; cbTabsOpenNearCurrent.Checked := tb_open_new_near_current in gDirTabOptions; cbTabsReuseTabWhenPossible.Checked := tb_reusing_tab_when_possible in gDirTabOptions; cbTabsLockedAsterisk.Checked := tb_show_asterisk_for_locked in gDirTabOptions; cbKeepRenamedNameBackToNormal.Checked := tb_keep_renamed_when_back_normal in gDirTabOptions; cbTabsActivateOnClick.Checked := tb_activate_panel_on_click in gDirTabOptions; cbTabsShowDriveLetter.Checked := tb_show_drive_letter in gDirTabOptions; cbTabsActionOnDoubleClick.ItemIndex := integer(gDirTabActionOnDoubleClick); if cbTabsActionOnDoubleClick.ItemIndex = -1 then cbTabsActionOnDoubleClick.ItemIndex := 1; // Because with r6597 to r6599 we saved incorrect value for "gDirTabActionOnDoubleClick"... cbTabsActionOnDoubleClick.Refresh; cbTabsMultiLines.Visible := (nbcMultiline in FPageControl.GetCapabilities); if cbTabsMultiLines.Visible then cbTabsMultiLines.Checked := tb_multiple_lines in gDirTabOptions; cbTabsShowCloseButton.Visible := (nbcShowCloseButtons in FPageControl.GetCapabilities); if cbTabsShowCloseButton.Visible then cbTabsShowCloseButton.Checked := tb_show_close_button in gDirTabOptions; edtTabsLimitLength.Text := IntToStr(gDirTabLimit); case gDirTabPosition of tbpos_top: cmbTabsPosition.ItemIndex := 0; tbpos_bottom: cmbTabsPosition.ItemIndex := 1; else cmbTabsPosition.ItemIndex := 0; end; Application.ProcessMessages; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; function TfrmOptionsTabs.Save: TOptionsEditorSaveFlags; begin Result := []; gDirTabOptions := []; // Reset tab options if cbTabsAlwaysVisible.Checked then gDirTabOptions := gDirTabOptions + [tb_always_visible]; if cbTabsMultiLines.Checked then gDirTabOptions := gDirTabOptions + [tb_multiple_lines]; if cbTabsLimitOption.Checked then gDirTabOptions := gDirTabOptions + [tb_text_length_limit]; if cbTabsConfirmCloseAll.Checked then gDirTabOptions := gDirTabOptions + [tb_confirm_close_all]; if cbTabsConfirmCloseLocked.Checked then gDirTabOptions := gDirTabOptions + [tb_confirm_close_locked_tab]; if cbTabsCloseDuplicateWhenClosing.Checked then gDirTabOptions := gDirTabOptions + [tb_close_duplicate_when_closing]; if cbTabsOpenForeground.Checked then gDirTabOptions := gDirTabOptions + [tb_open_new_in_foreground]; if cbTabsOpenNearCurrent.Checked then gDirTabOptions := gDirTabOptions + [tb_open_new_near_current]; if cbTabsReuseTabWhenPossible.Checked then gDirTabOptions := gDirTabOptions + [tb_reusing_tab_when_possible]; if cbTabsLockedAsterisk.Checked then gDirTabOptions := gDirTabOptions + [tb_show_asterisk_for_locked]; if cbKeepRenamedNameBackToNormal.Checked then gDirTabOptions := gDirTabOptions + [tb_keep_renamed_when_back_normal]; if cbTabsActivateOnClick.Checked then gDirTabOptions := gDirTabOptions + [tb_activate_panel_on_click]; if cbTabsShowDriveLetter.Checked then gDirTabOptions := gDirTabOptions + [tb_show_drive_letter]; if cbTabsShowCloseButton.Checked then gDirTabOptions := gDirTabOptions + [tb_show_close_button]; gDirTabActionOnDoubleClick := TTabsOptionsDoubleClick(cbTabsActionOnDoubleClick.ItemIndex); gDirTabLimit := StrToIntDef(edtTabsLimitLength.Text, 32); case cmbTabsPosition.ItemIndex of 0: gDirTabPosition := tbpos_top; 1: gDirTabPosition := tbpos_bottom; end; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; { TfrmOptionsTabs.CanWeClose } function TfrmOptionsTabs.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsTabs); Answer := MsgBox(rsMsgTabsOptionsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsicons.lfm��������������������������������������������������������0000644�0001750�0000144�00000015320�12561345763�020173� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsIcons: TfrmOptionsIcons Height = 389 Width = 478 ClientHeight = 389 ClientWidth = 478 DesignLeft = 244 DesignTop = 121 object gbIconsSize: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbDisableSpecialIcons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 82 Top = 242 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Icon size ' ChildSizing.TopBottomSpacing = 8 ClientHeight = 64 ClientWidth = 462 TabOrder = 2 object cbIconsSize: TComboBox AnchorSideLeft.Control = gbIconsSize AnchorSideTop.Control = pnlIconExample AnchorSideTop.Side = asrCenter AnchorSideRight.Side = asrBottom Left = 10 Height = 21 Top = 22 Width = 131 BorderSpacing.Left = 10 BorderSpacing.Right = 10 ItemHeight = 13 ItemIndex = 0 Items.Strings = ( '16x16' '22x22' '32x32' '48x48' ) OnChange = cbIconsSizeChange Style = csDropDownList TabOrder = 0 Text = '16x16' end object pnlIconExample: TPanel AnchorSideTop.Control = gbIconsSize AnchorSideRight.Control = gbIconsSize AnchorSideRight.Side = asrBottom Left = 404 Height = 48 Top = 8 Width = 48 Anchors = [akTop, akRight] BorderSpacing.Right = 10 BevelOuter = bvLowered ClientHeight = 48 ClientWidth = 48 TabOrder = 1 object imgIconExample: TImage Left = 1 Height = 46 Top = 1 Width = 46 Align = alClient Center = True end end end object gbShowIconsMode: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 145 Top = 6 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Show icons to the left of the filename ' ChildSizing.TopBottomSpacing = 8 ClientHeight = 127 ClientWidth = 462 TabOrder = 0 object rbIconsShowAll: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowAllAndExe AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 31 Width = 31 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'A&ll' Checked = True TabOrder = 1 TabStop = True end object rbIconsShowStandard: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowAll AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 54 Width = 115 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Only &standard icons' TabOrder = 2 end object rbIconsShowNone: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowStandard AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 77 Width = 60 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = '&No icons' OnChange = rbIconsShowNoneChange TabOrder = 3 end object rbIconsShowAllAndExe: TRadioButton AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = gbShowIconsMode Left = 10 Height = 17 Top = 8 Width = 171 BorderSpacing.Left = 10 Caption = 'All associated + &EXE/LNK (slow)' TabOrder = 0 end object cbIconsShowOverlay: TCheckBox AnchorSideLeft.Control = gbShowIconsMode AnchorSideTop.Control = rbIconsShowNone AnchorSideTop.Side = asrBottom Left = 10 Height = 17 Top = 102 Width = 179 BorderSpacing.Left = 10 BorderSpacing.Top = 8 Caption = 'Show o&verlay icons, e.g. for links' TabOrder = 4 end end object gbDisableSpecialIcons: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbShowIconsMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 79 Top = 157 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Disable special icons' ChildSizing.TopBottomSpacing = 8 ClientHeight = 61 ClientWidth = 462 TabOrder = 1 object edtIconsExcludeDirs: TEdit AnchorSideLeft.Control = cbIconsExclude AnchorSideTop.Control = cbIconsExclude AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbDisableSpecialIcons AnchorSideRight.Side = asrBottom Left = 30 Height = 21 Top = 25 Width = 424 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 20 BorderSpacing.Right = 8 BorderSpacing.Bottom = 15 TabOrder = 1 end object cbIconsExclude: TCheckBox AnchorSideLeft.Control = gbDisableSpecialIcons AnchorSideTop.Control = gbDisableSpecialIcons Left = 10 Height = 17 Top = 8 Width = 250 BorderSpacing.Left = 10 Caption = 'For the following &paths and their subdirectories:' OnChange = cbIconsExcludeChange TabOrder = 0 end end object gbIconsInMenus: TGroupBox[3] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbIconsSize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 55 Top = 330 Width = 466 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Icons in menus' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 8 ClientHeight = 37 ClientWidth = 462 TabOrder = 3 object cbIconsInMenus: TCheckBox AnchorSideLeft.Control = gbIconsInMenus AnchorSideTop.Control = cbIconsInMenusSize AnchorSideTop.Side = asrCenter Left = 10 Height = 17 Top = 10 Width = 172 Caption = 'Show icons for actions in &menus' TabOrder = 0 end object cbIconsInMenusSize: TComboBox AnchorSideTop.Control = gbIconsInMenus AnchorSideRight.Control = gbIconsInMenus AnchorSideRight.Side = asrBottom Left = 321 Height = 21 Top = 8 Width = 131 Anchors = [akTop, akRight] ItemHeight = 13 ItemIndex = 0 Items.Strings = ( '16x16' '22x22' '32x32' ) OnChange = cbIconsSizeChange Style = csDropDownList TabOrder = 1 Text = '16x16' end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsterminal.pas�����������������������������������������������������0000644�0001750�0000144�00000007147�12660674103�020701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Terminal options page Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsTerminal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, ExtCtrls, Buttons, Menus; type { TfrmOptionsTerminal } TfrmOptionsTerminal = class(TOptionsEditor) gbRunInTerminalClose: TGroupBox; gbJustRunTerminal: TGroupBox; gbRunInTerminalStayOpen: TGroupBox; ledtRunInTermCloseCmd: TLabeledEdit; ledtRunTermCmd: TLabeledEdit; ledtRunTermParams: TLabeledEdit; ledtRunInTermStayOpenCmd: TLabeledEdit; ledtRunInTermCloseParams: TLabeledEdit; ledtRunInTermStayOpenParams: TLabeledEdit; private FLastLoadedOptionSignature: dword; protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; function CanWeClose(var {%H-}WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses fOptions, uShowMsg, uComponentsSignature, uGlobs, uLng; { TfrmOptionsTerminal } procedure TfrmOptionsTerminal.Load; begin ledtRunInTermStayOpenCmd.Text := gRunInTermStayOpenCmd; ledtRunInTermStayOpenParams.Text := gRunInTermStayOpenParams; ledtRunInTermCloseCmd.Text := gRunInTermCloseCmd; ledtRunInTermCloseParams.Text := gRunInTermCloseParams; ledtRunTermCmd.Text := gRunTermCmd; ledtRunTermParams.Text := gRunTermParams; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; function TfrmOptionsTerminal.Save: TOptionsEditorSaveFlags; begin gRunInTermStayOpenCmd := ledtRunInTermStayOpenCmd.Text; gRunInTermStayOpenParams := ledtRunInTermStayOpenParams.Text; gRunInTermCloseCmd := ledtRunInTermCloseCmd.Text; gRunInTermCloseParams := ledtRunInTermCloseParams.Text; gRunTermCmd := ledtRunTermCmd.Text; gRunTermParams := ledtRunTermParams.Text; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); Result := []; end; class function TfrmOptionsTerminal.GetIconIndex: Integer; begin Result := 24; end; class function TfrmOptionsTerminal.GetTitle: String; begin Result := rsOptionsEditorTerminal; end; { TfrmOptionsTerminal.CanWeClose } function TfrmOptionsTerminal.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsTerminal); Answer := MsgBox(rsMsgTerminalOptionsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsignorelist.pas���������������������������������������������������0000644�0001750�0000144�00000007426�12365151656�021252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Ignore list options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsIgnoreList; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, EditBtn, Buttons, Menus, fOptionsFrame; type { TfrmOptionsIgnoreList } TfrmOptionsIgnoreList = class(TOptionsEditor) btnAddSel: TButton; btnAddSelWithPath: TButton; btnRelativeSaveIn: TSpeedButton; chkIgnoreEnable: TCheckBox; fneSaveIn: TFileNameEdit; lblSaveIn: TLabel; memIgnoreList: TMemo; pmPathHelper: TPopupMenu; procedure btnAddSelClick(Sender: TObject); procedure btnAddSelWithPathClick(Sender: TObject); procedure btnRelativeSaveInClick(Sender: TObject); procedure chkIgnoreEnableChange(Sender: TObject); private procedure FillIgnoreList(bWithFullPath: Boolean); public class function GetIconIndex: Integer; override; class function GetTitle: String; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; end; implementation {$R *.lfm} uses Controls, uGlobs, uFile, uLng, fMain, uSpecialDir; { TfrmOptionsIgnoreList } procedure TfrmOptionsIgnoreList.btnAddSelClick(Sender: TObject); begin FillIgnoreList(False); end; procedure TfrmOptionsIgnoreList.btnAddSelWithPathClick(Sender: TObject); begin FillIgnoreList(True); end; procedure TfrmOptionsIgnoreList.btnRelativeSaveInClick(Sender: TObject); begin fneSaveIn.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneSaveIn,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsIgnoreList.chkIgnoreEnableChange(Sender: TObject); begin memIgnoreList.Enabled:= chkIgnoreEnable.Checked; fneSaveIn.Enabled:= chkIgnoreEnable.Checked; btnAddSelWithPath.Enabled:= chkIgnoreEnable.Checked; btnAddSel.Enabled:= chkIgnoreEnable.Checked; end; procedure TfrmOptionsIgnoreList.FillIgnoreList(bWithFullPath: Boolean); var I: Integer; SelectedFiles: TFiles; begin SelectedFiles := frmMain.ActiveFrame.CloneSelectedOrActiveFiles; try for I:= 0 to SelectedFiles.Count - 1 do if bWithFullPath then memIgnoreList.Lines.Add(SelectedFiles[I].FullPath) else memIgnoreList.Lines.Add(SelectedFiles[I].Name); finally FreeAndNil(SelectedFiles); end; end; class function TfrmOptionsIgnoreList.GetIconIndex: Integer; begin Result := 17; end; class function TfrmOptionsIgnoreList.GetTitle: String; begin Result := rsOptionsEditorIgnoreList; end; procedure TfrmOptionsIgnoreList.Load; begin chkIgnoreEnable.Checked:= gIgnoreListFileEnabled; fneSaveIn.FileName:= gIgnoreListFile; memIgnoreList.Lines.Assign(glsIgnoreList); chkIgnoreEnableChange(chkIgnoreEnable); gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; function TfrmOptionsIgnoreList.Save: TOptionsEditorSaveFlags; begin Result := []; gIgnoreListFileEnabled:= chkIgnoreEnable.Checked; gIgnoreListFile:= fneSaveIn.FileName; glsIgnoreList.Assign(memIgnoreList.Lines); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolbase.pas�����������������������������������������������������0000644�0001750�0000144�00000013025�12453544105�020664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Base options page for external tools (Viewer, Editor, Differ) Copyright (C) 2006-2015 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsToolBase; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, StdCtrls, EditBtn, Buttons, Menus, fOptionsFrame, uGlobs; type { TfrmOptionsToolBase } TfrmOptionsToolBase = class(TOptionsEditor) btnRelativeToolPath: TSpeedButton; cbToolsKeepTerminalOpen: TCheckBox; cbToolsRunInTerminal: TCheckBox; cbToolsUseExternalProgram: TCheckBox; edtToolsParameters: TEdit; fneToolsPath: TFileNameEdit; lblToolsParameters: TLabel; lblToolsPath: TLabel; pmPathHelper: TPopupMenu; procedure btnRelativeToolPathClick(Sender: TObject); procedure cbToolsKeepTerminalOpenChange(Sender: TObject); procedure cbToolsRunInTerminalChange(Sender: TObject); procedure cbToolsUseExternalProgramChange(Sender: TObject); procedure edtToolsParametersChange(Sender: TObject); procedure fneToolsPathAcceptFileName(Sender: TObject; var Value: String); procedure fneToolsPathChange(Sender: TObject); private FExternalTool: TExternalTool; FExternalToolOptions: TExternalToolOptions; FOnUseExternalProgramChange: TNotifyEvent; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; property ExternalTool: TExternalTool read FExternalTool write FExternalTool; property OnUseExternalProgramChange: TNotifyEvent read FOnUseExternalProgramChange write FOnUseExternalProgramChange; public constructor Create(TheOwner: TComponent); override; end; implementation {$R *.lfm} uses uDCUtils, uSpecialDir; { TfrmOptionsToolBase } procedure TfrmOptionsToolBase.cbToolsKeepTerminalOpenChange(Sender: TObject); begin FExternalToolOptions.KeepTerminalOpen := cbToolsKeepTerminalOpen.Checked; end; procedure TfrmOptionsToolBase.btnRelativeToolPathClick(Sender: TObject); begin fneToolsPath.SetFocus; gSpecialDirList.SetSpecialDirRecipientAndItsType(fneToolsPath,pfFILE); pmPathHelper.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TfrmOptionsToolBase.cbToolsRunInTerminalChange(Sender: TObject); begin cbToolsKeepTerminalOpen.Enabled := cbToolsRunInTerminal.Checked; FExternalToolOptions.RunInTerminal := cbToolsRunInTerminal.Checked; end; procedure TfrmOptionsToolBase.cbToolsUseExternalProgramChange(Sender: TObject); begin lblToolsPath.Enabled := cbToolsUseExternalProgram.Checked; fneToolsPath.Enabled := cbToolsUseExternalProgram.Checked; btnRelativeToolPath.Enabled := cbToolsUseExternalProgram.Checked; lblToolsParameters.Enabled := cbToolsUseExternalProgram.Checked; edtToolsParameters.Enabled := cbToolsUseExternalProgram.Checked; cbToolsRunInTerminal.Enabled := cbToolsUseExternalProgram.Checked; cbToolsKeepTerminalOpen.Enabled := cbToolsUseExternalProgram.Checked; FExternalToolOptions.Enabled := cbToolsUseExternalProgram.Checked; if Assigned(FOnUseExternalProgramChange) then FOnUseExternalProgramChange(Self); end; procedure TfrmOptionsToolBase.edtToolsParametersChange(Sender: TObject); begin FExternalToolOptions.Parameters := edtToolsParameters.Text; end; procedure TfrmOptionsToolBase.fneToolsPathAcceptFileName(Sender: TObject; var Value: String); begin Value := SetCmdDirAsEnvVar(Value); {$IF DEFINED(LCLCARBON)} // OnChange don't called under Carbon when choose file name // from open dialog so assign path in this event. FExternalToolOptions.Path := Value; {$ENDIF} end; procedure TfrmOptionsToolBase.fneToolsPathChange(Sender: TObject); begin FExternalToolOptions.Path := fneToolsPath.FileName; end; procedure TfrmOptionsToolBase.Init; begin // Enable/disable tools controls. cbToolsUseExternalProgramChange(nil); end; procedure TfrmOptionsToolBase.Load; begin FExternalToolOptions := gExternalTools[FExternalTool]; cbToolsUseExternalProgram.Checked := FExternalToolOptions.Enabled; fneToolsPath.FileName := FExternalToolOptions.Path; edtToolsParameters.Text := FExternalToolOptions.Parameters; cbToolsRunInTerminal.Checked := FExternalToolOptions.RunInTerminal; cbToolsKeepTerminalOpen.Checked := FExternalToolOptions.KeepTerminalOpen; gSpecialDirList.PopulateMenuWithSpecialDir(pmPathHelper,mp_PATHHELPER,nil); end; function TfrmOptionsToolBase.Save: TOptionsEditorSaveFlags; begin gExternalTools[FExternalTool] := FExternalToolOptions; Result := []; end; constructor TfrmOptionsToolBase.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FOnUseExternalProgramChange := nil; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstabsextra.pas����������������������������������������������������0000644�0001750�0000144�00000014711�12660674103�021056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Tabs "Extra" options page Copyright (C) 2016 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsTabsExtra; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, ComCtrls, ExtCtrls, fOptionsFrame; type { TfrmOptionsTabsExtra } TfrmOptionsTabsExtra = class(TOptionsEditor) cbDefaultExistingTabsToKeep: TComboBox; cbDefaultSaveDirHistory: TComboBox; cbDefaultTargetPanelLeftSaved: TComboBox; cbDefaultTargetPanelRightSaved: TComboBox; cbGoToConfigAfterReSave: TCheckBox; cbGoToConfigAfterSave: TCheckBox; cbUseFavoriteTabsExtraOptions: TCheckBox; gbTabs: TGroupBox; gbDefaultTabSavedRestoration: TGroupBox; lblDefaultExistingTabsToKeep: TLabel; lblFavoriteTabsSaveDirHistory: TLabel; lblDefaultTargetPanelLeftSaved: TLabel; lblDefaultTargetPanelRightSaved: TLabel; rgWhereToAdd: TRadioGroup; procedure cbUseFavoriteTabsExtraOptionsChange(Sender: TObject); private FPageControl: TPageControl; // For checking Tabs capabilities FLastLoadedOptionSignature: dword; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: integer; override; class function GetTitle: string; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; implementation {$R *.lfm} uses //Lazarus, Free-Pascal, etc. Forms, //DC fOptions, uShowMsg, uComponentsSignature, DCStrUtils, uLng, uGlobs, ufavoritetabs, fOptionsFavoriteTabs; { TfrmOptionsTabsExtra } procedure TfrmOptionsTabsExtra.cbUseFavoriteTabsExtraOptionsChange(Sender: TObject); var Options: IOptionsDialog = nil; Editor: TOptionsEditor = nil; begin gFavoriteTabsUseRestoreExtraOptions := TCheckBox(Sender).Checked; gbDefaultTabSavedRestoration.Enabled := TCheckBox(Sender).Checked; if not TCheckBox(Sender).Checked then lblFavoriteTabsSaveDirHistory.Caption := rsMsgFavoriteTabsSimpleMode else lblFavoriteTabsSaveDirHistory.Caption := rsMsgFavoriteTabsExtraMode; // Le't be dynamic and update possible already displayed Favorite Tabs Configuration frame. Options := GetOptionsForm; if Options <> nil then // and it will be since we're here! :-) Editor := Options.GetEditor(TfrmOptionsFavoriteTabs); if Editor <> nil then TfrmOptionsFavoriteTabs(Editor).gpSavedTabsRestorationAction.Visible := gFavoriteTabsUseRestoreExtraOptions; end; { TfrmOptionsTabsExtra.Init } procedure TfrmOptionsTabsExtra.Init; begin FPageControl := TPageControl.Create(Self); ParseLineToList(rsOptFavoriteTabsWhereToAddInList, rgWhereToAdd.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultTargetPanelLeftSaved.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultTargetPanelRightSaved.Items); ParseLineToList(rsFavTabsPanelSideSelection,cbDefaultExistingTabsToKeep.Items); ParseLineToList(rsFavTabsSaveDirHistory,cbDefaultSaveDirHistory.Items); end; class function TfrmOptionsTabsExtra.GetIconIndex: integer; begin Result := 38; end; class function TfrmOptionsTabsExtra.GetTitle: string; begin Result := rsOptionsEditorFolderTabsExtra; end; procedure TfrmOptionsTabsExtra.Load; begin cbUseFavoriteTabsExtraOptions.Checked := gFavoriteTabsUseRestoreExtraOptions; cbUseFavoriteTabsExtraOptionsChange(cbUseFavoriteTabsExtraOptions); cbDefaultTargetPanelLeftSaved.ItemIndex := integer(gDefaultTargetPanelLeftSaved); cbDefaultTargetPanelRightSaved.ItemIndex := integer(gDefaultTargetPanelRightSaved); cbDefaultExistingTabsToKeep.ItemIndex := integer(gDefaultExistingTabsToKeep); if gFavoriteTabsSaveDirHistory then cbDefaultSaveDirHistory.ItemIndex := 1 else cbDefaultSaveDirHistory.ItemIndex := 0; rgWhereToAdd.ItemIndex := integer(gWhereToAddNewFavoriteTabs); cbGoToConfigAfterSave.Checked := gFavoriteTabsGoToConfigAfterSave; cbGoToConfigAfterReSave.Checked := gFavoriteTabsGoToConfigAfterReSave; Application.ProcessMessages; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; function TfrmOptionsTabsExtra.Save: TOptionsEditorSaveFlags; begin Result := []; gFavoriteTabsUseRestoreExtraOptions := cbUseFavoriteTabsExtraOptions.Checked; gDefaultTargetPanelLeftSaved := TTabsConfigLocation(cbDefaultTargetPanelLeftSaved.ItemIndex); gDefaultTargetPanelRightSaved := TTabsConfigLocation(cbDefaultTargetPanelRightSaved.ItemIndex); gDefaultExistingTabsToKeep := TTabsConfigLocation(cbDefaultExistingTabsToKeep.ItemIndex); gFavoriteTabsSaveDirHistory := (cbDefaultSaveDirHistory.ItemIndex = 1); gWhereToAddNewFavoriteTabs := TPositionWhereToAddFavoriteTabs(rgWhereToAdd.ItemIndex); gFavoriteTabsGoToConfigAfterSave := cbGoToConfigAfterSave.Checked; gFavoriteTabsGoToConfigAfterReSave := cbGoToConfigAfterReSave.Checked; FLastLoadedOptionSignature := ComputeSignatureBasedOnComponent(Self, $00000000); end; { TfrmOptionsTabsExtra.CanWeClose } function TfrmOptionsTabsExtra.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := (FLastLoadedOptionSignature = ComputeSignatureBasedOnComponent(Self, $00000000)); if not Result then begin ShowOptions(TfrmOptionsTabsExtra); Answer := MsgBox(rsMsgTabsExtraOptionsModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; WillNeedUpdateWindowView := True; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; end. �������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsarchivers.lrt����������������������������������������������������0000644�0001750�0000144�00000002356�12365151656�021074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION=General TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION=De&scription: TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION=Arc&hiver: TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION=E&xtension: TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION=&List: TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION=Ex&tract: TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION=Add&ing: TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION=Listing for&mat: TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION=Listin&g start (optional): TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION=Listing &finish (optional): TFRMOPTIONSARCHIVERS.BTNRELATIVEARCHIVER.HINT=Some functions to select appropriate path TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION=Additional TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION=Options TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION=S&how console output TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION=De&bug mode TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION=A&pply TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION=&Rename TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION=D&elete TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION=A&dd TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION=E&nabled TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION=A&uto Configure ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionseditorcolors.pas�������������������������������������������������0000644�0001750�0000144�00000065172�12313074207�021572� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Internal editor highlighters configuration frame Copyright (C) 2012 Alexander Koblov (alexx2000@mail.ru) Based on Lazarus IDE editor configuration frame (Editor/Display/Colors) This source 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 code 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. A copy of the GNU General Public License is available on the World Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. } unit fOptionsEditorColors; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, SynEdit, Forms, Controls, StdCtrls, ExtCtrls, ColorBox, ComCtrls, Dialogs, Menus, Buttons, fOptionsFrame, DividerBevel, types, Graphics, SynEditHighlighter, dmHigh; type { TfrmOptionsEditorColors } TfrmOptionsEditorColors = class(TOptionsEditor) BackGroundColorBox: TColorBox; BackGroundLabel: TLabel; BackGroundUseDefaultCheckBox: TCheckBox; bvlAttributeSection: TDividerBevel; cmbLanguage: TComboBox; ColorPreview: TSynEdit; ColumnPosBevel: TPanel; edtFileExtensions: TEdit; ForegroundColorBox: TColorBox; ForeGroundLabel: TLabel; ForeGroundUseDefaultCheckBox: TCheckBox; FrameColorBox: TColorBox; FrameColorUseDefaultCheckBox: TCheckBox; FrameEdgesBox: TComboBox; FrameStyleBox: TComboBox; ColorElementTree: TListBox; pnlBold: TPanel; pnlElementAttributes: TPanel; pnlItalic: TPanel; pnlStrikeOut: TPanel; pnlTop: TPanel; PnlTop2: TPanel; pnlUnderline: TPanel; btnSaveMask: TSpeedButton; btnResetMask: TSpeedButton; Splitter1: TSplitter; pnlFileExtensions: TPanel; tbtnGlobal: TToolButton; tbtnLocal: TToolButton; TextBoldCheckBox: TCheckBox; TextBoldRadioInvert: TRadioButton; TextBoldRadioOff: TRadioButton; TextBoldRadioOn: TRadioButton; TextBoldRadioPanel: TPanel; TextItalicCheckBox: TCheckBox; TextStrikeOutCheckBox: TCheckBox; TextItalicRadioInvert: TRadioButton; TextStrikeOutRadioInvert: TRadioButton; TextItalicRadioOff: TRadioButton; TextStrikeOutRadioOff: TRadioButton; TextItalicRadioOn: TRadioButton; TextStrikeOutRadioOn: TRadioButton; TextItalicRadioPanel: TPanel; TextStrikeOutRadioPanel: TPanel; TextUnderlineCheckBox: TCheckBox; TextUnderlineRadioInvert: TRadioButton; TextUnderlineRadioOff: TRadioButton; TextUnderlineRadioOn: TRadioButton; TextUnderlineRadioPanel: TPanel; ToolBar1: TToolBar; ToolButton3: TToolButton; procedure btnResetMaskClick(Sender: TObject); procedure btnSaveMaskClick(Sender: TObject); procedure FrameStyleBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); procedure cmbLanguageChange(Sender: TObject); procedure ForegroundColorBoxChange(Sender: TObject); procedure FrameEdgesBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); procedure ColorElementTreeDrawItem(Control: TWinControl; Index: Integer; NodeRect: TRect; State: TOwnerDrawState); procedure ColorElementTreeSelectionChange(Sender: TObject; User: boolean); procedure GeneralCheckBoxOnChange(Sender: TObject); procedure pnlElementAttributesResize(Sender: TObject); procedure tbtnGlobalClick(Sender: TObject); procedure TextStyleRadioOnChange(Sender: TObject); procedure SynPlainTextHighlighterChange(Sender: TObject); private FHighl: TdmHighl; FDefHighlightElement, FCurHighlightElement: TSynHighlighterAttributes; FCurrentHighlighter: TSynCustomHighlighter; FIsEditingDefaults: Boolean; UpdatingColor: Boolean; procedure UpdateCurrentScheme; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses LCLType, LCLIntf, SynEditTypes, GraphUtil, uLng, uGlobs; const COLOR_NODE_PREFIX = ' abc '; function DefaultToNone(AColor: TColor): TColor; begin if AColor = clDefault then Result := clNone else Result := AColor; end; function NoneToDefault(AColor: TColor): TColor; begin if AColor = clNone then Result := clDefault else Result := AColor; end; function SynAttributeSortCompare(List: TStringList; Index1, Index2: Integer): Integer; begin if CompareStr(List[Index1], rsSynDefaultText) = 0 then Result:= -1 else if CompareStr(List[Index2], rsSynDefaultText) = 0 then Result:= 1 else Result:= CompareStr(List[Index1], List[Index2]); end; { TfrmOptionsEditorColors } procedure TfrmOptionsEditorColors.FrameEdgesBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); //+++ var r: TRect; PCol: Integer; begin if Index < 0 then exit;; r.top := ARect.top + 3; r.bottom := ARect.bottom - 3; r.left := ARect.left + 5; r.right := ARect.Right - 5; with TCustomComboBox(Control).Canvas do begin FillRect(ARect); Pen.Width := 1; PCol := pen.Color; Pen.Color := clGray; Pen.Style := psDot; Pen.EndCap := pecFlat; Rectangle(r); Pen.Width := 2; pen.Color := PCol; Pen.Style := psSolid; case Index of ord(sfeAround): Rectangle(r); ord(sfeBottom): begin MoveTo(r.Left, r.Bottom); LineTo(r.Right-1, r.Bottom); end; ord(sfeLeft): begin MoveTo(r.Left, r.Top); LineTo(r.Left, r.Bottom-1); end; end; end; end; procedure TfrmOptionsEditorColors.FrameStyleBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); //++ var p: TPoint; begin if Index < 0 then exit;; with TCustomComboBox(Control).Canvas do begin FillRect(ARect); Pen.Width := 2; pen.EndCap := pecFlat; case Index of 0: Pen.Style := psSolid; 1: Pen.Style := psDash; 2: Pen.Style := psDot; 3: Pen.Style := psSolid; end; if Index = 3 then begin MoveToEx(Handle, ARect.Left + 5, (ARect.Top + ARect.Bottom) div 2 - 2, @p); WaveTo(Handle, ARect.Right - 5, (ARect.Top + ARect.Bottom) div 2 - 2, 4); end else begin MoveTo(ARect.Left + 5, (ARect.Top + ARect.Bottom) div 2); LineTo(ARect.Right - 5, (ARect.Top + ARect.Bottom) div 2); end; end; end; procedure TfrmOptionsEditorColors.btnSaveMaskClick(Sender: TObject); begin FCurrentHighlighter.DefaultFilter:= FCurrentHighlighter.LanguageName + ' (' + edtFileExtensions.Text + ')|' + edtFileExtensions.Text; end; procedure TfrmOptionsEditorColors.btnResetMaskClick(Sender: TObject); begin with TSynCustomHighlighterClass(FCurrentHighlighter.ClassType).Create(nil) do begin FCurrentHighlighter.DefaultFilter:= DefaultFilter; edtFileExtensions.Text:= Copy(FCurrentHighlighter.DefaultFilter, Pos('|', FCurrentHighlighter.DefaultFilter) + 1, MaxInt); Free; end; end; procedure TfrmOptionsEditorColors.cmbLanguageChange(Sender: TObject); var I: LongInt; AttributeList: TStringList; begin if (cmbLanguage.ItemIndex < 0) then Exit; AttributeList:= TStringList.Create; try FCurrentHighlighter:= TSynCustomHighlighter(cmbLanguage.Items.Objects[cmbLanguage.ItemIndex]); pnlFileExtensions.Enabled:= not (FCurrentHighlighter is TSynPlainTextHighlighter); edtFileExtensions.Text:= Copy(FCurrentHighlighter.DefaultFilter, Pos('|', FCurrentHighlighter.DefaultFilter) + 1, MaxInt); ColorPreview.Lines.Text:= FHighl.GetSampleSource(FCurrentHighlighter); if ColorPreview.Lines.Text = EmptyStr then try ColorPreview.Lines.Text:= FCurrentHighlighter.SampleSource; except ColorPreview.Lines.Text:= EmptyStr; end; FHighl.SetHighlighter(ColorPreview, FCurrentHighlighter); ColorElementTree.Items.Clear; for I:=0 to FCurrentHighlighter.AttrCount - 1 do AttributeList.AddObject(FCurrentHighlighter.Attribute[I].Name, FCurrentHighlighter.Attribute[I]); if (AttributeList.Count > 0) then begin AttributeList.CustomSort(@SynAttributeSortCompare); ColorElementTree.Items.Assign(AttributeList); ColorElementTree.ItemIndex:= 0; end; finally AttributeList.Free; end; end; procedure TfrmOptionsEditorColors.ForegroundColorBoxChange(Sender: TObject); //+++ var AttrToEdit: TSynHighlighterAttributes; begin if (FCurHighlightElement = nil) or UpdatingColor then Exit; UpdatingColor := True; if FIsEditingDefaults then AttrToEdit := FHighl.SynPlainTextHighlighter.Attribute[FHighl.SynPlainTextHighlighter.AttrCount-1] else AttrToEdit := FCurHighlightElement; if Sender = ForegroundColorBox then begin AttrToEdit.Foreground := DefaultToNone(ForeGroundColorBox.Selected); ForeGroundUseDefaultCheckBox.Checked := ForeGroundColorBox.Selected <> clDefault; end; if Sender = BackGroundColorBox then begin AttrToEdit.Background := DefaultToNone(BackGroundColorBox.Selected); BackGroundUseDefaultCheckBox.Checked := BackGroundColorBox.Selected <> clDefault; end; if Sender = FrameColorBox then begin AttrToEdit.FrameColor := DefaultToNone(FrameColorBox.Selected); FrameColorUseDefaultCheckBox.Checked := FrameColorBox.Selected <> clDefault; FrameEdgesBox.Enabled := FrameColorBox.Selected <> clDefault; FrameStyleBox.Enabled := FrameColorBox.Selected <> clDefault; end; if Sender = FrameEdgesBox then begin AttrToEdit.FrameEdges := TSynFrameEdges(FrameEdgesBox.ItemIndex); end; if Sender = FrameStyleBox then begin AttrToEdit.FrameStyle := TSynLineStyle(FrameStyleBox.ItemIndex); end; UpdatingColor := False; UpdateCurrentScheme; end; procedure TfrmOptionsEditorColors.ColorElementTreeDrawItem(Control: TWinControl; Index: Integer; NodeRect: TRect; State: TOwnerDrawState); //+++ var FullAbcWidth, AbcWidth: Integer; Attri: TSynHighlighterAttributes; TextY: Integer; c: TColor; s: String; begin if (Index = 0) and FIsEditingDefaults then Attri := FDefHighlightElement else Attri := TSynHighlighterAttributes(ColorElementTree.Items.Objects[Index]); if (Attri = nil) then Exit; // Draw node background and name if odSelected in State then begin ColorElementTree.Canvas.Brush.Color := clHighlight; ColorElementTree.Canvas.Font.Color := clHighlightText; end else begin ColorElementTree.Canvas.Brush.Color := ColorElementTree.Color; ColorElementTree.Canvas.Font.Color := Font.Color; end; FullAbcWidth := ColorElementTree.Canvas.TextExtent(COLOR_NODE_PREFIX).cx; TextY := (NodeRect.Top + NodeRect.Bottom - ColorElementTree.Canvas.TextHeight(ColorElementTree.Items[Index])) div 2; ColorElementTree.Canvas.FillRect(NodeRect); ColorElementTree.Canvas.TextOut(NodeRect.Left+FullAbcWidth, TextY, Attri.Name); // Draw preview box - Background c := clNone; if (hafBackColor in Attri.Features) then c := Attri.Background; // Fallback Background-color for text if (c = clNone) or (c = clDefault) then c := ColorPreview.Color; ColorElementTree.Canvas.Brush.Color := c; ColorElementTree.Canvas.FillRect(NodeRect.Left+2, NodeRect.Top+2, NodeRect.Left+FullAbcWidth-2, NodeRect.Bottom-2); // Draw preview Frame ColorElementTree.Canvas.Pen.Color := Attri.FrameColor; if (hafFrameColor in Attri.Features) and (Attri.FrameColor <> clDefault) and (Attri.FrameColor <> clNone) then ColorElementTree.Canvas.Rectangle(NodeRect.Left+2, NodeRect.Top+2, NodeRect.Left+FullAbcWidth-2, NodeRect.Bottom-2); // Draw preview ForeGround if (hafForeColor in Attri.Features) //and //(ahaSupportedFeatures[TAdditionalHilightAttribute(AttriIdx)].BG) ) // if no BG, then FG was used then begin c := Attri.Foreground; if (c = clNone) or (c = clDefault) then c := ColorPreview.Font.Color; begin s := 'abc'; ColorElementTree.Canvas.Font.Color := c; ColorElementTree.Canvas.Font.Style := Attri.Style; ColorElementTree.Canvas.Font.Height := -(NodeRect.Bottom - NodeRect.Top - 7); TextY := (NodeRect.Top + NodeRect.Bottom - canvas.TextHeight(s)) div 2; AbcWidth := ColorElementTree.Canvas.TextExtent(s).cx; SetBkMode(ColorElementTree.Canvas.Handle, TRANSPARENT); ColorElementTree.Canvas.TextOut(NodeRect.Left+(FullAbcWidth - AbcWidth) div 2, TextY, s); SetBkMode(ColorElementTree.Canvas.Handle, OPAQUE); ColorElementTree.Canvas.Font.Height := Font.Height; ColorElementTree.Canvas.Font.Style := []; end; end; end; procedure TfrmOptionsEditorColors.SynPlainTextHighlighterChange(Sender: TObject); var SynPlainTextHighlighter: TSynHighlighterAttributes absolute Sender; begin ColorPreview.Color:= SynPlainTextHighlighter.Background; ColorPreview.Font.Color:= SynPlainTextHighlighter.Foreground; end; procedure TfrmOptionsEditorColors.ColorElementTreeSelectionChange( Sender: TObject; User: boolean); //+++ var AttrToShow: TSynHighlighterAttributes; IsDefault, CanGlobal: Boolean; begin if (ColorElementTree.ItemIndex < 0) or UpdatingColor then Exit; FCurHighlightElement:= TSynHighlighterAttributes(ColorElementTree.Items.Objects[ColorElementTree.ItemIndex]); UpdatingColor := True; DisableAlign; try FDefHighlightElement:= FHighl.SynPlainTextHighlighter.Attribute[FHighl.SynPlainTextHighlighter.AttrCount - 1]; IsDefault := SameText(rsSynDefaultText, FCurHighlightElement.Name); CanGlobal := (cmbLanguage.ItemIndex > 0) and IsDefault; FIsEditingDefaults:= CanGlobal and (FCurrentHighlighter.Tag = 1); tbtnGlobal.Enabled := CanGlobal; tbtnLocal.Enabled := CanGlobal; tbtnGlobal.AllowAllUp := not CanGlobal; tbtnLocal.AllowAllUp := not CanGlobal; tbtnGlobal.Down := (FCurrentHighlighter.Tag = 1) and CanGlobal; tbtnLocal.Down := (FCurrentHighlighter.Tag = 0) and CanGlobal; if FIsEditingDefaults then AttrToShow := FDefHighlightElement else AttrToShow := FCurHighlightElement; ForegroundColorBox.Style := ForegroundColorBox.Style + [cbIncludeDefault]; BackGroundColorBox.Style := BackGroundColorBox.Style + [cbIncludeDefault]; // Forground ForeGroundLabel.Visible := (hafForeColor in AttrToShow.Features) and (IsDefault = True); ForeGroundUseDefaultCheckBox.Visible := (hafForeColor in AttrToShow.Features) and (IsDefault = False); ForegroundColorBox.Visible := (hafForeColor in AttrToShow.Features); ForegroundColorBox.Selected := NoneToDefault(AttrToShow.Foreground); if ForegroundColorBox.Selected = clDefault then ForegroundColorBox.Tag := ForegroundColorBox.DefaultColorColor else ForegroundColorBox.Tag := ForegroundColorBox.Selected; ForeGroundUseDefaultCheckBox.Checked := ForegroundColorBox.Selected <> clDefault; // BackGround BackGroundLabel.Visible := (hafBackColor in AttrToShow.Features) and (IsDefault = True); BackGroundUseDefaultCheckBox.Visible := (hafBackColor in AttrToShow.Features) and (IsDefault = False); BackGroundColorBox.Visible := (hafBackColor in AttrToShow.Features); BackGroundColorBox.Selected := NoneToDefault(AttrToShow.Background); if BackGroundColorBox.Selected = clDefault then BackGroundColorBox.Tag := BackGroundColorBox.DefaultColorColor else BackGroundColorBox.Tag := BackGroundColorBox.Selected; BackGroundUseDefaultCheckBox.Checked := BackGroundColorBox.Selected <> clDefault; // Frame FrameColorUseDefaultCheckBox.Visible := hafFrameColor in AttrToShow.Features; FrameColorBox.Visible := hafFrameColor in AttrToShow.Features; FrameEdgesBox.Visible := hafFrameEdges in AttrToShow.Features; FrameStyleBox.Visible := hafFrameStyle in AttrToShow.Features; FrameColorBox.Selected := NoneToDefault(AttrToShow.FrameColor); if FrameColorBox.Selected = clDefault then FrameColorBox.Tag := FrameColorBox.DefaultColorColor else FrameColorBox.Tag := FrameColorBox.Selected; FrameColorUseDefaultCheckBox.Checked := FrameColorBox.Selected <> clDefault; FrameEdgesBox.ItemIndex := integer(AttrToShow.FrameEdges); FrameStyleBox.ItemIndex := integer(AttrToShow.FrameStyle); FrameEdgesBox.Enabled := FrameColorUseDefaultCheckBox.Checked; FrameStyleBox.Enabled := FrameColorUseDefaultCheckBox.Checked; // Styles TextBoldCheckBox.Visible := hafStyle in AttrToShow.Features; TextItalicCheckBox.Visible := hafStyle in AttrToShow.Features; TextUnderlineCheckBox.Visible := hafStyle in AttrToShow.Features; TextStrikeOutCheckBox.Visible := hafStyle in AttrToShow.Features; TextBoldRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextItalicRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextUnderlineRadioPanel.Visible := hafStyleMask in AttrToShow.Features; TextStrikeOutRadioPanel.Visible := hafStyleMask in AttrToShow.Features; if hafStyleMask in AttrToShow.Features then begin TextBoldCheckBox.Checked := (fsBold in AttrToShow.Style) or (fsBold in AttrToShow.StyleMask); TextBoldRadioPanel.Enabled := TextBoldCheckBox.Checked; if not(fsBold in AttrToShow.StyleMask) then TextBoldRadioInvert.Checked := True else if fsBold in AttrToShow.Style then TextBoldRadioOn.Checked := True else TextBoldRadioOff.Checked := True; TextItalicCheckBox.Checked := (fsItalic in AttrToShow.Style) or (fsItalic in AttrToShow.StyleMask); TextItalicRadioPanel.Enabled := TextItalicCheckBox.Checked; if not(fsItalic in AttrToShow.StyleMask) then TextItalicRadioInvert.Checked := True else if fsItalic in AttrToShow.Style then TextItalicRadioOn.Checked := True else TextItalicRadioOff.Checked := True; TextUnderlineCheckBox.Checked := (fsUnderline in AttrToShow.Style) or (fsUnderline in AttrToShow.StyleMask); TextUnderlineRadioPanel.Enabled := TextUnderlineCheckBox.Checked; if not(fsUnderline in AttrToShow.StyleMask) then TextUnderlineRadioInvert.Checked := True else if fsUnderline in AttrToShow.Style then TextUnderlineRadioOn.Checked := True else TextUnderlineRadioOff.Checked := True; TextStrikeOutCheckBox.Checked := (fsStrikeOut in AttrToShow.Style) or (fsStrikeOut in AttrToShow.StyleMask); TextStrikeOutRadioPanel.Enabled := TextStrikeOutCheckBox.Checked; if not(fsStrikeOut in AttrToShow.StyleMask) then TextStrikeOutRadioInvert.Checked := True else if fsStrikeOut in AttrToShow.Style then TextStrikeOutRadioOn.Checked := True else TextStrikeOutRadioOff.Checked := True; end else begin TextBoldCheckBox.Checked := fsBold in AttrToShow.Style; TextItalicCheckBox.Checked := fsItalic in AttrToShow.Style; TextUnderlineCheckBox.Checked := fsUnderline in AttrToShow.Style; TextStrikeOutCheckBox.Checked := fsStrikeOut in AttrToShow.Style; end; if SameText(AttrToShow.Name, rsSynDefaultText) then begin AttrToShow.OnChange:= @SynPlainTextHighlighterChange; end; UpdatingColor := False; finally EnableAlign; end; pnlElementAttributesResize(nil); end; procedure TfrmOptionsEditorColors.GeneralCheckBoxOnChange(Sender: TObject); var TheColorBox: TColorBox; AttrToEdit: TSynHighlighterAttributes; procedure SetCheckBoxStyle(CheckBox: TCheckBox; style: TFontStyle); begin if hafStyleMask in AttrToEdit.Features then TextStyleRadioOnChange(Sender) else if CheckBox.Checked xor (style in AttrToEdit.Style) then begin if CheckBox.Checked then AttrToEdit.Style := AttrToEdit.Style + [style] else AttrToEdit.Style := AttrToEdit.Style - [style]; UpdateCurrentScheme; end; end; begin if FCurHighlightElement = nil then Exit; if FIsEditingDefaults then AttrToEdit := FDefHighlightElement else AttrToEdit := FCurHighlightElement; if UpdatingColor = False then begin UpdatingColor := True; TheColorBox := nil; if Sender = ForeGroundUseDefaultCheckBox then TheColorBox := ForegroundColorBox; if Sender = BackGroundUseDefaultCheckBox then TheColorBox := BackGroundColorBox; if Sender = FrameColorUseDefaultCheckBox then TheColorBox := FrameColorBox; if Assigned(TheColorBox) then begin if TCheckBox(Sender).Checked then begin TheColorBox.Selected := TheColorBox.Tag; end else begin TheColorBox.Tag := TheColorBox.Selected; TheColorBox.Selected := clDefault; end; if (Sender = ForeGroundUseDefaultCheckBox) and (DefaultToNone(ForegroundColorBox.Selected) <> AttrToEdit.Foreground) then begin AttrToEdit.Foreground := DefaultToNone(ForegroundColorBox.Selected); UpdateCurrentScheme; end; if (Sender = BackGroundUseDefaultCheckBox) and (DefaultToNone(BackGroundColorBox.Selected) <> AttrToEdit.Background) then begin AttrToEdit.Background := DefaultToNone(BackGroundColorBox.Selected); UpdateCurrentScheme; end; if (Sender = FrameColorUseDefaultCheckBox) and (DefaultToNone(FrameColorBox.Selected) <> AttrToEdit.FrameColor) then begin AttrToEdit.FrameColor := DefaultToNone(FrameColorBox.Selected); FrameEdgesBox.Enabled := TCheckBox(Sender).Checked; FrameStyleBox.Enabled := TCheckBox(Sender).Checked; UpdateCurrentScheme; end; end; UpdatingColor := False; end; if Sender = TextBoldCheckBox then SetCheckBoxStyle(TextBoldCheckBox, fsBold); if Sender = TextItalicCheckBox then SetCheckBoxStyle(TextItalicCheckBox, fsItalic); if Sender = TextUnderlineCheckBox then SetCheckBoxStyle(TextUnderlineCheckBox, fsUnderline); if Sender = TextStrikeOutCheckBox then SetCheckBoxStyle(TextStrikeOutCheckBox, fsStrikeOut); end; procedure TfrmOptionsEditorColors.pnlElementAttributesResize(Sender: TObject); //+++ var MinAnchor: TControl; MinWidth: Integer; procedure CheckControl(Other: TControl); var w,h: Integer; begin if not Other.Visible then exit; Other.GetPreferredSize(w,h); if w <= MinWidth then exit; MinAnchor := Other; MinWidth := w; end; begin MinWidth := -1; MinAnchor := ForeGroundLabel; CheckControl(ForeGroundLabel); CheckControl(BackGroundLabel); CheckControl(ForeGroundUseDefaultCheckBox); CheckControl(BackGroundUseDefaultCheckBox); CheckControl(FrameColorUseDefaultCheckBox); ColumnPosBevel.AnchorSide[akLeft].Control := MinAnchor; end; procedure TfrmOptionsEditorColors.tbtnGlobalClick(Sender: TObject); begin if (FCurHighlightElement = nil) or UpdatingColor then Exit; FCurrentHighlighter.Tag := PtrInt(tbtnGlobal.Down); ColorElementTreeSelectionChange(ColorElementTree, True); UpdateCurrentScheme; end; procedure TfrmOptionsEditorColors.TextStyleRadioOnChange(Sender: TObject); //+++ var AttrToEdit: TSynHighlighterAttributes; procedure CalcNewStyle(CheckBox: TCheckBox; RadioOn, RadioOff, RadioInvert: TRadioButton; fs : TFontStyle; Panel: TPanel); begin if CheckBox.Checked then begin Panel.Enabled := True; if RadioInvert.Checked then begin AttrToEdit.Style := AttrToEdit.Style + [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask - [fs]; end else if RadioOn.Checked then begin AttrToEdit.Style := AttrToEdit.Style + [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask + [fs]; end else if RadioOff.Checked then begin AttrToEdit.Style := AttrToEdit.Style - [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask + [fs]; end end else begin Panel.Enabled := False; AttrToEdit.Style := AttrToEdit.Style - [fs]; AttrToEdit.StyleMask := AttrToEdit.StyleMask - [fs]; end; end; begin if UpdatingColor or not (hafStyleMask in FCurHighlightElement.Features) then Exit; if FIsEditingDefaults then AttrToEdit := FDefHighlightElement else AttrToEdit := FCurHighlightElement; if (Sender = TextBoldCheckBox) or (Sender = TextBoldRadioOn) or (Sender = TextBoldRadioOff) or (Sender = TextBoldRadioInvert) then CalcNewStyle(TextBoldCheckBox, TextBoldRadioOn, TextBoldRadioOff, TextBoldRadioInvert, fsBold, TextBoldRadioPanel); if (Sender = TextItalicCheckBox) or (Sender = TextItalicRadioOn) or (Sender = TextItalicRadioOff) or (Sender = TextItalicRadioInvert) then CalcNewStyle(TextItalicCheckBox, TextItalicRadioOn, TextItalicRadioOff, TextItalicRadioInvert, fsItalic, TextItalicRadioPanel); if (Sender = TextUnderlineCheckBox) or (Sender = TextUnderlineRadioOn) or (Sender = TextUnderlineRadioOff) or (Sender = TextUnderlineRadioInvert) then CalcNewStyle(TextUnderlineCheckBox, TextUnderlineRadioOn, TextUnderlineRadioOff, TextUnderlineRadioInvert, fsUnderline, TextUnderlineRadioPanel); if (Sender = TextStrikeOutCheckBox) or (Sender = TextStrikeOutRadioOn) or (Sender = TextStrikeOutRadioOff) or (Sender = TextStrikeOutRadioInvert) then CalcNewStyle(TextStrikeOutCheckBox, TextStrikeOutRadioOn, TextStrikeOutRadioOff, TextStrikeOutRadioInvert, fsStrikeOut, TextStrikeOutRadioPanel); end; procedure TfrmOptionsEditorColors.UpdateCurrentScheme; begin ColorElementTree.Invalidate; end; procedure TfrmOptionsEditorColors.Init; begin inherited Init; FHighl:= TdmHighl.Create(nil, True); FontOptionsToFont(gFonts[dcfEditor], ColorPreview.Font); end; procedure TfrmOptionsEditorColors.Done; begin FHighl.Free; inherited Done; end; procedure TfrmOptionsEditorColors.Load; begin FHighl.Assign(dmHighl); cmbLanguage.Items.Assign(FHighl.SynHighlighterList); cmbLanguage.ItemIndex:= 0; cmbLanguageChange(nil); end; function TfrmOptionsEditorColors.Save: TOptionsEditorSaveFlags; begin Result:= []; dmHighl.Assign(FHighl); end; class function TfrmOptionsEditorColors.GetIconIndex: Integer; begin Result:= 21; end; class function TfrmOptionsEditorColors.GetTitle: String; begin Result:= rsOptionsEditorHighlighters; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdragdrop.pas�����������������������������������������������������0000644�0001750�0000144�00000017556�12454457622�020703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Drag&drop options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsDragDrop; {$mode objfpc}{$H+} interface uses Controls, Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsDragDrop } TfrmOptionsDragDrop = class(TOptionsEditor) cbShowConfirmationDialog: TCheckBox; cbDragAndDropAskFormatEachTime: TCheckBox; cbDragAndDropSaveUnicodeTextInUFT8: TCheckBox; cbDragAndDropTextAutoFilename: TCheckBox; gbTextDragAndDropRelatedOptions: TGroupBox; lblMostDesiredTextFormat1: TLabel; lblMostDesiredTextFormat2: TLabel; lblWarningForAskFormat: TLabel; lbMostDesiredTextFormat: TListBox; procedure lbMostDesiredTextFormatDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); procedure lbMostDesiredTextFormatDragDrop(Sender, Source: TObject; X, Y: Integer); procedure GenericSomethingChanged(Sender: TObject); protected FModificationTookPlace: boolean; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; procedure LoadDesiredOrderTextFormatList; procedure SaveDesiredOrderTextFormatList; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; function CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; override; end; procedure SortThisListAccordingToDragAndDropDesiredFormat(ListToSort:TStringList); implementation {$R *.lfm} uses fOptions, uShowMsg, uGlobs, uLng; { TfrmOptionsDragDrop } procedure TfrmOptionsDragDrop.Load; begin cbShowConfirmationDialog.Checked := gShowDialogOnDragDrop; {$IFDEF MSWINDOWS} gbTextDragAndDropRelatedOptions.Visible:=TRUE; LoadDesiredOrderTextFormatList; cbDragAndDropAskFormatEachTime.Checked := gDragAndDropAskFormatEachTime; cbDragAndDropTextAutoFilename.Checked := gDragAndDropTextAutoFilename; cbDragAndDropSaveUnicodeTextInUFT8.Checked := gDragAndDropSaveUnicodeTextInUFT8; {$ENDIF} FModificationTookPlace := False; end; function TfrmOptionsDragDrop.Save: TOptionsEditorSaveFlags; begin gShowDialogOnDragDrop := cbShowConfirmationDialog.Checked; {$IFDEF MSWINDOWS} SaveDesiredOrderTextFormatList; gDragAndDropAskFormatEachTime := cbDragAndDropAskFormatEachTime.Checked; gDragAndDropTextAutoFilename := cbDragAndDropTextAutoFilename.Checked; gDragAndDropSaveUnicodeTextInUFT8 := cbDragAndDropSaveUnicodeTextInUFT8.Checked; {$ENDIF} FModificationTookPlace := False; Result := []; end; class function TfrmOptionsDragDrop.GetIconIndex: Integer; begin Result := 28; end; class function TfrmOptionsDragDrop.GetTitle: String; begin Result := rsOptionsEditorDragAndDrop; end; procedure TfrmOptionsDragDrop.lbMostDesiredTextFormatDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := (Source = lbMostDesiredTextFormat) and (lbMostDesiredTextFormat.ItemIndex <> -1); end; procedure TfrmOptionsDragDrop.lbMostDesiredTextFormatDragDrop(Sender, Source: TObject; X, Y: Integer); var SrcIndex, DestIndex: Integer; begin SrcIndex := lbMostDesiredTextFormat.ItemIndex; if SrcIndex = -1 then Exit; DestIndex := lbMostDesiredTextFormat.GetIndexAtY(Y); if (DestIndex < 0) or (DestIndex >= lbMostDesiredTextFormat.Count) then DestIndex := lbMostDesiredTextFormat.Count - 1; lbMostDesiredTextFormat.Items.Move(SrcIndex, DestIndex); lbMostDesiredTextFormat.ItemIndex := DestIndex; FModificationTookPlace := True; end; procedure TfrmOptionsDragDrop.GenericSomethingChanged(Sender: TObject); begin FModificationTookPlace := True; end; procedure TfrmOptionsDragDrop.LoadDesiredOrderTextFormatList; var IndexDropTextFormat, ExpectedPosition, ActualPosition:integer; TempoString: string; begin lbMostDesiredTextFormat.Clear; for IndexDropTextFormat:=0 to pred(NbOfDropTextFormat) do lbMostDesiredTextFormat.Items.Add(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name); for IndexDropTextFormat:=0 to pred(NbOfDropTextFormat) do begin ExpectedPosition:=gDragAndDropDesiredTextFormat[IndexDropTextFormat].DesireLevel; if (ExpectedPosition<0) OR (ExpectedPosition>pred(NbOfDropTextFormat)) then ExpectedPosition:=pred(NbOfDropTextFormat); ActualPosition:=lbMostDesiredTextFormat.Items.IndexOf(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name); if (ActualPosition<>-1) AND (ExpectedPosition<>ActualPosition) then begin TempoString:=lbMostDesiredTextFormat.Items.Strings[ActualPosition]; lbMostDesiredTextFormat.Items.Strings[ActualPosition]:=lbMostDesiredTextFormat.Items.Strings[ExpectedPosition]; lbMostDesiredTextFormat.Items.Strings[ExpectedPosition]:=TempoString; end; end; end; procedure TfrmOptionsDragDrop.SaveDesiredOrderTextFormatList; var IndexDropTextFormat, ActualPosition:integer; TempoString: string; begin for IndexDropTextFormat:=0 to pred(NbOfDropTextFormat) do begin ActualPosition:=lbMostDesiredTextFormat.Items.IndexOf(gDragAndDropDesiredTextFormat[IndexDropTextFormat].Name); if (ActualPosition<>-1) then gDragAndDropDesiredTextFormat[IndexDropTextFormat].DesireLevel:=ActualPosition; end; end; function TfrmOptionsDragDrop.CanWeClose(var WillNeedUpdateWindowView: boolean): boolean; var Answer: TMyMsgResult; begin Result := not FModificationTookPlace; if not Result then begin ShowOptions(TfrmOptionsDragDrop); Answer := MsgBox(rsMsgDragAndDropModifiedWantToSave, [msmbYes, msmbNo, msmbCancel], msmbCancel, msmbCancel); case Answer of mmrYes: begin Save; Result := True; end; mmrNo: Result := True; else Result := False; end; end; end; // Arrange the list in such way that the most desired format is on top. // This routine is also used in "uOleDragDrop" for offering user's suggestion so the list is arranged according to user's desire procedure SortThisListAccordingToDragAndDropDesiredFormat(ListToSort:TStringList); function GetDesireLevel(SearchingText:string):integer; var SearchingIndex:integer; begin result:=-1; SearchingIndex:=0; while (SearchingIndex<NbOfDropTextFormat) AND (result=-1) do begin if gDragAndDropDesiredTextFormat[SearchingIndex].Name=SearchingText then result:=gDragAndDropDesiredTextFormat[SearchingIndex].DesireLevel; inc(SearchingIndex); end; end; var Index, InnerIndex, DesireLevelIndex, DesireLevelInnerIndex : integer; TempoString : string; begin //It's a poor sort... But we don't have too many so we keep it simple. for Index:=0 to (ListToSort.Count-2) do begin for InnerIndex:=Index+1 to pred(ListToSort.Count) do begin DesireLevelIndex:=GetDesireLevel(ListToSort.Strings[Index]); DesireLevelInnerIndex:=GetDesireLevel(ListToSort.Strings[InnerIndex]); if (DesireLevelIndex>DesireLevelInnerIndex) AND (DesireLevelIndex<>-1) AND (DesireLevelInnerIndex<>-1) then begin TempoString:=ListToSort.Strings[Index]; ListToSort.Strings[Index]:=ListToSort.Strings[InnerIndex]; ListToSort.Strings[InnerIndex]:=TempoString; end; end; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfavoritetabs.lrt�������������������������������������������������0000644�0001750�0000144�00000007714�12656270711�021577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFAVORITETABS.GBFAVORITETABS.CAPTION=Favorite Tabs list (reorder by drag && drop) TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION=Insert... TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION=Delete... TFRMOPTIONSFAVORITETABS.BTNIMPORTEXPORT.CAPTION=Import/Export TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION=Add... TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION=Sort... TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION=Rename TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION=Other options TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION=Always expand tree TFRMOPTIONSFAVORITETABS.GPSAVEDTABSRESTORATIONACTION.CAPTION=What to restore where for the selected entry: TFRMOPTIONSFAVORITETABS.LBLTARGETPANELLEFTSAVEDTABS.CAPTION=Tabs saved on left to be restored to: TFRMOPTIONSFAVORITETABS.LBLTARGETPANELRIGHTSAVEDTABS.CAPTION=Tabs saved on right to be restored to: TFRMOPTIONSFAVORITETABS.LBLEXISTINGTABSTOKEEP.CAPTION=Existing tabs to keep: TFRMOPTIONSFAVORITETABS.CBEXISTINGTABSTOKEEP.TEXT=None TFRMOPTIONSFAVORITETABS.CBTARGETPANELRIGHTSAVEDTABS.TEXT=Right TFRMOPTIONSFAVORITETABS.CBTARGETPANELLEFTSAVEDTABS.TEXT=Left TFRMOPTIONSFAVORITETABS.CBSAVEDIRHISTORY.TEXT=No TFRMOPTIONSFAVORITETABS.LBLSAVEDIRHISTORY.CAPTION=Save dir history: TFRMOPTIONSFAVORITETABS.MIFAVORITETABSTESTMENU.CAPTION=FavoriteTabsTestMenu TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION=Rename TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION=- TFRMOPTIONSFAVORITETABS.MIINSERTSEPARATOR.CAPTION=Insert separator TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR2.CAPTION=Add separator TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION=- TFRMOPTIONSFAVORITETABS.MIINSERTSUBMENU.CAPTION=Insert sub-menu TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION=Add sub-menu TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION=Delete selected item TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION=- TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION=Sort single group of item(s) only TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION=- TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION=Cut TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION=Paste TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION=- TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS1.CAPTION=Import legacy .tab file(s) at selected position TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION=a separator TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION=sub-menu TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION=selected item TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION=just sub-menu but keep elements TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION=sub-menu and all its elements TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION=- TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION=delete all! TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION=Import legacy .tab file(s) at selected position TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESACCSETTING.CAPTION=Import legacy .tab file(s) according to default setting TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESINSUBATPOS.CAPTION=Import legacy .tab file(s) at selected position in a sub menu TFRMOPTIONSFAVORITETABS.MIEXPORTTOLEGACYTABSFILE.CAPTION=Export selection to legacy .tab file(s) TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION=- TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION=Test resulting menu TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION=- TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION=Open all branches TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION=Collapse all TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION=...single group of item(s) only TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION=...current level of item(s) selected only TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION=...content of submenu(s) selected, no sublevel TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION=...content of submenu(s) selected and all sublevels TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION=...everything, from A to Z! ����������������������������������������������������doublecmd-0.7.1/src/frames/foptionsmouse.lrt��������������������������������������������������������0000644�0001750�0000144�00000000624�12020403374�020213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSMOUSE.GBSELECTION.CAPTION=Selection TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION=&Selection by mouse TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION=&Mode: TFRMOPTIONSMOUSE.GBSCROLLING.CAPTION=Scrolling TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION=Line by line &with cursor movement TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION=&Line by line TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION=&Page by page ������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslayout.pas�������������������������������������������������������0000644�0001750�0000144�00000012457�12515236234�020401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Layout options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsLayout; {$mode objfpc}{$H+} interface uses Classes, SysUtils, StdCtrls, fOptionsFrame; type { TfrmOptionsLayout } TfrmOptionsLayout = class(TOptionsEditor) cbFlatDiskPanel: TCheckBox; cbFlatInterface: TCheckBox; cbFlatToolBar: TCheckBox; cbFreespaceInd: TCheckBox; cbLogWindow: TCheckBox; cbPanelOfOperations: TCheckBox; cbProgInMenuBar: TCheckBox; cbShowCmdLine: TCheckBox; cbShowCurDir: TCheckBox; cbShowDiskPanel: TCheckBox; cbShowDriveFreeSpace: TCheckBox; cbShowDrivesListButton: TCheckBox; cbShowKeysPanel: TCheckBox; cbShowMainMenu: TCheckBox; cbShowMainToolBar: TCheckBox; cbShowStatusBar: TCheckBox; cbShowTabHeader: TCheckBox; cbShowTabs: TCheckBox; cbTermWindow: TCheckBox; cbTwoDiskPanels: TCheckBox; cbShowShortDriveFreeSpace: TCheckBox; gbScreenLayout: TGroupBox; procedure cbShowDiskPanelChange(Sender: TObject); procedure cbShowDriveFreeSpaceChange(Sender: TObject); procedure cbShowMainToolBarChange(Sender: TObject); procedure cbTermWindowChange(Sender: TObject); protected procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses uGlobs, uLng; { TfrmOptionsLayout } procedure TfrmOptionsLayout.cbShowDiskPanelChange(Sender: TObject); begin cbTwoDiskPanels.Enabled := cbShowDiskPanel.Checked; cbFlatDiskPanel.Enabled := cbShowDiskPanel.Checked; end; procedure TfrmOptionsLayout.cbShowDriveFreeSpaceChange(Sender: TObject); begin cbShowShortDriveFreeSpace.Enabled:= cbShowDriveFreeSpace.Checked; if not(cbShowDriveFreeSpace.Checked) then cbShowShortDriveFreeSpace.Checked:= false; end; procedure TfrmOptionsLayout.cbShowMainToolBarChange(Sender: TObject); begin cbFlatToolBar.Enabled := cbShowMainToolBar.Checked; end; procedure TfrmOptionsLayout.cbTermWindowChange(Sender: TObject); begin if cbTermWindow.Checked then begin cbShowCmdLine.Tag:= Integer(cbShowCmdLine.Checked); cbShowCmdLine.Checked:= True; cbShowCmdLine.Enabled:= False; end else begin cbShowCmdLine.Checked:= Boolean(cbShowCmdLine.Tag); cbShowCmdLine.Enabled:= True; end; end; class function TfrmOptionsLayout.GetIconIndex: Integer; begin Result := 7; end; class function TfrmOptionsLayout.GetTitle: String; begin Result := rsOptionsEditorLayout; end; procedure TfrmOptionsLayout.Load; begin cbShowMainMenu.Checked := gMainMenu; cbShowMainToolBar.Checked := gButtonBar; cbFlatToolBar.Checked := gToolBarFlat; cbShowDiskPanel.Checked := gDriveBar1; cbTwoDiskPanels.Checked := gDriveBar2; cbFlatDiskPanel.Checked := gDriveBarFlat; cbShowDrivesListButton.Checked := gDrivesListButton; cbShowTabs.Checked := gDirectoryTabs; cbShowCurDir.Checked := gCurDir; cbShowTabHeader.Checked := gTabHeader; cbShowStatusBar.Checked := gStatusBar; cbShowCmdLine.Checked := gCmdLine or gTermWindow; cbShowCmdLine.Enabled:= not gTermWindow; cbShowKeysPanel.Checked := gKeyButtons; cbFlatInterface.Checked := gInterfaceFlat; cbLogWindow.Checked := gLogWindow; cbTermWindow.Checked := gTermWindow; cbShowDriveFreeSpace.Checked := gDriveFreeSpace; cbFreespaceInd.Checked := gDriveInd; cbProgInMenuBar.Checked := gProgInMenuBar; cbPanelOfOperations.Checked := gPanelOfOp; cbShowShortDriveFreeSpace.Checked:= gShortFormatDriveInfo; end; function TfrmOptionsLayout.Save: TOptionsEditorSaveFlags; begin Result := []; gMainMenu := cbShowMainMenu.Checked; gButtonBar := cbShowMainToolBar.Checked; gToolBarFlat := cbFlatToolBar.Checked; gDriveBar1 := cbShowDiskPanel.Checked; gDriveBar2 := cbTwoDiskPanels.Checked; gDriveBarFlat := cbFlatDiskPanel.Checked; gDrivesListButton := cbShowDrivesListButton.Checked; gDirectoryTabs := cbShowTabs.Checked; gCurDir := cbShowCurDir.Checked; gTabHeader := cbShowTabHeader.Checked; gStatusBar := cbShowStatusBar.Checked; gCmdLine := cbShowCmdLine.Checked; gKeyButtons := cbShowKeysPanel.Checked; gInterfaceFlat := cbFlatInterface.Checked; gLogWindow := cbLogWindow.Checked; gTermWindow := cbTermWindow.Checked; gDriveFreeSpace := cbShowDriveFreeSpace.Checked; gDriveInd := cbFreespaceInd.Checked; gProgInMenuBar := cbProgInMenuBar.Checked; gPanelOfOp := cbPanelOfOperations.Checked; gShortFormatDriveInfo := cbShowShortDriveFreeSpace.Checked; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslog.lfm����������������������������������������������������������0000644�0001750�0000144�00000025120�12532643273�017633� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsLog: TfrmOptionsLog Height = 369 Width = 394 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 369 ClientWidth = 394 DesignLeft = 666 DesignTop = 236 object gbLogFile: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 72 Top = 6 Width = 382 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'File operation log file' ClientHeight = 54 ClientWidth = 378 TabOrder = 0 object cbLogFile: TCheckBox AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrCenter Left = 10 Height = 19 Top = 6 Width = 105 Caption = 'C&reate a log file:' OnChange = cbLogFileChange TabOrder = 0 end object fneLogFileName: TFileNameEdit AnchorSideLeft.Control = cbLogFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbLogFile Left = 121 Height = 23 Top = 4 Width = 178 DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 MaxLength = 0 TabOrder = 1 end object cbIncludeDateInLogFilename: TCheckBox AnchorSideLeft.Control = cbLogFile AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 31 Width = 167 BorderSpacing.Bottom = 4 Caption = 'Include date in log filename' TabOrder = 2 end object btnRelativeLogFile: TSpeedButton AnchorSideLeft.Control = fneLogFileName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrCenter Left = 323 Height = 24 Hint = 'Some functions to select appropriate path' Top = 3 Width = 24 BorderSpacing.Left = 24 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = btnRelativeLogFileClick end object btnViewLogFile: TSpeedButton AnchorSideLeft.Control = btnRelativeLogFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneLogFileName AnchorSideTop.Side = asrCenter Left = 348 Height = 24 Hint = 'View log file content' Top = 3 Width = 24 BorderSpacing.Left = 1 Glyph.Data = { 36030000424D3603000000000000360000002800000010000000100000000100 18000000000000030000130B0000130B00000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000C17213B6E9E3A6EA000000000000000000000000000 00000000000000000000000000000000000000000000000000003A83CC44C8FF 29B2FF316DA70000000000000000000000000000000000000000000000000000 000000000000000000003881CC55DBFF3AC6FF82756C6F6C6B69696C68696F73 6F66CFAA61B87E0BB67D0AB67D0AB67C0AB67D0AB77F0F7F580A0000002980DB 9F928C7D7773E9D7A3FFF5B0FFEEA8E7CA94737379F6FBFFF2F7FFF2F7FFF2F6 FFF2F7FFF7FFFFB77F0F000000C98506828088E9D8A5FFF8BBFFEFB2FFE7A6FF E6A6E6C28984858AECECEDECECEDEAEBEEEAEBEEF5FBFFB67D0A000000C08511 7F8290FFF2AFFFEFB2FFE9ABFFE7B3FFEFCAFFE09C7B7B7EEAE9E8EAE9E8E6E6 E6E6E6E6F5FBFFB67C09000000BD8412868C9AFFEAA5FFE6A4FFE7B2FFEDC8FF F7E3FFDC96858689E5E4E3E5E4E3E0E0E1E0E0E1F5FBFFB67C09000000BB8210 9DA3B0ECCE97FFE4A3FFEEC9FFF7E3FFF3DAECBE8096979AE1E1E0DEDDDCDBDB DCDBDBDCF5FBFFB67C09000000B9800DDDE3EE9E9B9BEECA8FFFDD9AFFDA95EE C2829B9895D9D7D7D9D7D7D9D7D7D8D6D8D8D6D8F6FCFFB67C0A000000B77E0B F9FFFFC4C4C6A5A4A6A4A4A7A4A3A6B1AFB3D6D4D3D4D2D3D4D2D3D4D2D3D4D2 D3D4D2D3F6FCFFB67D0A000000B67D0AF7FDFFCFCED0CFCECECCCBCDCFCECECC CBCDCCCBCDCCCBCDCFCECECCCBCDCCCBCDCCCBCDF6FCFFB67D0A000000B67D0C F5FDFFF3F8FFF5F9FFF6FBFFF6FBFFF6FBFFF6FAFFF5FAFFF5F9FFF4F8FFF3F7 FFF3F7FFF4FDFFB67D0C000000B67F10F7E4C0DCAA4ADDAB4BDDAC4CDDAC4CDD AC4CDDAC4CDDAC4CDDAC4CDDAB4BDCAB4ADCAA4AF7E4C0B67F10000000B88216 EFD2A0EDCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF9BECCF 9BEDCF9BEFD2A0B88216000000825D14B88217B78114B68114B68114B68114B6 8114B68114B68114B68114B68114B68114B78114B88217825D14 } OnClick = btnViewLogFileClick end end object gbLogFileOp: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLogFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 170 Top = 82 Width = 382 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Log operations' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 152 ClientWidth = 378 TabOrder = 1 object cbLogStartShutdown: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogVFS AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 109 Width = 102 Caption = 'Start/shutdown' TabOrder = 5 end object cbLogCpMvLn: TCheckBox AnchorSideTop.Control = gbLogFileOp Left = 10 Height = 19 Top = 4 Width = 190 Caption = 'Cop&y/Move/Create link/symlink' TabOrder = 0 end object cbLogDelete: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogCpMvLn AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 25 Width = 53 Caption = '&Delete' TabOrder = 1 end object cbLogDirOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDelete AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 46 Width = 150 Caption = 'Crea&te/Delete directories' TabOrder = 2 end object cbLogArcOp: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogDirOp AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 67 Width = 90 Caption = '&Pack/Unpack' TabOrder = 3 end object cbLogVFS: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogArcOp AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 88 Width = 120 Caption = '&File system plugins' TabOrder = 4 end object cbLogCommandLineExecution: TCheckBox AnchorSideLeft.Control = cbLogCpMvLn AnchorSideTop.Control = cbLogStartShutdown AnchorSideTop.Side = asrBottom Left = 10 Height = 19 Top = 130 Width = 195 BorderSpacing.Bottom = 15 Caption = 'External command line execution' TabOrder = 6 end end object gbLogFileStatus: TGroupBox[2] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbLogFileOp AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 87 Top = 256 Width = 382 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 4 Caption = 'Operation status' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ChildSizing.VerticalSpacing = 2 ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 69 ClientWidth = 378 TabOrder = 2 object cbLogSuccess: TCheckBox Left = 10 Height = 19 Top = 4 Width = 160 Caption = 'Log &successful operations' TabOrder = 0 end object cbLogErrors: TCheckBox Left = 10 Height = 19 Top = 25 Width = 160 Caption = 'Log &errors' TabOrder = 1 end object cbLogInfo: TCheckBox Left = 10 Height = 19 Top = 46 Width = 160 Caption = 'Log &information messages' TabOrder = 2 end end object pmPathHelper: TPopupMenu[3] left = 344 top = 56 end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsbehavior.lfm�����������������������������������������������������0000644�0001750�0000144�00000007362�12020403374�020645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsBehavior: TfrmOptionsBehavior Height = 276 Width = 666 ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 276 ClientWidth = 666 object gbMisc1: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 93 Top = 6 Width = 654 Anchors = [akTop, akLeft, akRight] AutoSize = True ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 6 ClientHeight = 75 ClientWidth = 650 TabOrder = 0 object cbOnlyOnce: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = gbMisc1 AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 6 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'A&llow only one copy of DC at a time' TabOrder = 0 end object cbMinimizeToTray: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = cbOnlyOnce AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 29 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Mo&ve icon to system tray when minimized' TabOrder = 1 end object cbAlwaysShowTrayIcon: TCheckBox AnchorSideLeft.Control = gbMisc1 AnchorSideTop.Control = cbMinimizeToTray AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc1 AnchorSideRight.Side = asrBottom Left = 8 Height = 17 Top = 52 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Al&ways show tray icon' OnChange = cbAlwaysShowTrayIconChange TabOrder = 2 end end object gbMisc2: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = gbMisc1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 85 Top = 99 Width = 654 Anchors = [akTop, akLeft, akRight] AutoSize = True ClientHeight = 67 ClientWidth = 650 TabOrder = 1 object lblDrivesBlackList: TLabel AnchorSideLeft.Control = gbMisc2 AnchorSideTop.Control = gbMisc2 Left = 8 Height = 13 Top = 2 Width = 70 BorderSpacing.Left = 8 BorderSpacing.Top = 2 Caption = 'Drives &blacklist' FocusControl = edtDrivesBlackList ParentColor = False end object edtDrivesBlackList: TEdit AnchorSideLeft.Control = lblDrivesBlackList AnchorSideTop.Control = lblDrivesBlackList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMisc2 AnchorSideRight.Side = asrBottom Left = 8 Height = 21 Hint = 'Here you can enter one or more drives or mount points, separated by ";".' Top = 21 Width = 634 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 4 ParentShowHint = False ShowHint = True TabOrder = 0 end object cbBlacklistUnmountedDevices: TCheckBox AnchorSideLeft.Control = edtDrivesBlackList AnchorSideTop.Control = edtDrivesBlackList AnchorSideTop.Side = asrBottom Left = 8 Height = 27 Top = 65 Width = 314 BorderSpacing.Bottom = 4 Caption = 'Automatically &hide unmounted devices' TabOrder = 1 end end end ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsignorelist.lrt���������������������������������������������������0000644�0001750�0000144�00000000574�12365151656�021265� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION=&Save in: TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION=&Ignore (don't show) the following files and folders: TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION=A&dd selected names TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION=Add selected names with &full path TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT=Some functions to select appropriate path ������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolseditor.lfm��������������������������������������������������0000644�0001750�0000144�00000004003�12650521504�021407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsEditor: TfrmOptionsEditor Height = 513 Width = 586 ClientHeight = 513 ClientWidth = 586 DesignLeft = 384 DesignTop = 288 inherited edtToolsParameters: TEdit Height = 20 Top = 108 end inherited fneToolsPath: TFileNameEdit Height = 20 Top = 60 end inherited lblToolsPath: TLabel Height = 14 Width = 173 end inherited lblToolsParameters: TLabel Height = 14 Top = 90 Width = 140 end inherited cbToolsKeepTerminalOpen: TCheckBox Top = 161 Width = 350 end inherited cbToolsRunInTerminal: TCheckBox Top = 140 Width = 144 end inherited cbToolsUseExternalProgram: TCheckBox Width = 160 end inherited btnRelativeToolPath: TSpeedButton Top = 60 end object gbInternalEditor: TGroupBox[8] AnchorSideLeft.Control = fneToolsPath AnchorSideTop.Control = cbToolsKeepTerminalOpen AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtToolsParameters AnchorSideRight.Side = asrBottom Left = 8 Height = 54 Top = 192 Width = 571 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 12 BorderSpacing.Bottom = 10 Caption = 'Internal editor options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 12 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 36 ClientWidth = 567 TabOrder = 5 object chkScrollPastEndLine: TCheckBox AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 6 Width = 257 BorderSpacing.Left = 6 Caption = 'Caret past end of line' TabOrder = 0 end object chkShowSpecialChars: TCheckBox Left = 275 Height = 19 Top = 6 Width = 286 Caption = 'Show special characters' TabOrder = 1 end end inherited pmPathHelper: TPopupMenu[9] left = 424 top = 8 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslog.lrt����������������������������������������������������������0000644�0001750�0000144�00000001762�12532643273�017664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSLOG.GBLOGFILE.CAPTION=File operation log file TFRMOPTIONSLOG.CBLOGFILE.CAPTION=C&reate a log file: TFRMOPTIONSLOG.CBINCLUDEDATEINLOGFILENAME.CAPTION=Include date in log filename TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT=Some functions to select appropriate path TFRMOPTIONSLOG.BTNVIEWLOGFILE.HINT=View log file content TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION=Log operations TFRMOPTIONSLOG.CBLOGSTARTSHUTDOWN.CAPTION=Start/shutdown TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION=Cop&y/Move/Create link/symlink TFRMOPTIONSLOG.CBLOGDELETE.CAPTION=&Delete TFRMOPTIONSLOG.CBLOGDIROP.CAPTION=Crea&te/Delete directories TFRMOPTIONSLOG.CBLOGARCOP.CAPTION=&Pack/Unpack TFRMOPTIONSLOG.CBLOGVFS.CAPTION=&File system plugins TFRMOPTIONSLOG.CBLOGCOMMANDLINEEXECUTION.CAPTION=External command line execution TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION=Operation status TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION=Log &successful operations TFRMOPTIONSLOG.CBLOGERRORS.CAPTION=Log &errors TFRMOPTIONSLOG.CBLOGINFO.CAPTION=Log &information messages ��������������doublecmd-0.7.1/src/frames/foptionstoolbase.lfm�����������������������������������������������������0000644�0001750�0000144�00000013403�12365151656�020666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsToolBase: TfrmOptionsToolBase Height = 265 Width = 589 Anchors = [akTop] ClientHeight = 265 ClientWidth = 589 DesignLeft = 382 DesignTop = 371 object edtToolsParameters: TEdit[0] AnchorSideLeft.Control = lblToolsParameters AnchorSideTop.Control = lblToolsParameters AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeToolPath AnchorSideRight.Side = asrBottom Left = 8 Height = 23 Top = 115 Width = 571 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 OnChange = edtToolsParametersChange TabOrder = 2 end object fneToolsPath: TFileNameEdit[1] AnchorSideLeft.Control = lblToolsPath AnchorSideTop.Control = lblToolsPath AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnRelativeToolPath Left = 8 Height = 23 Top = 62 Width = 525 OnAcceptFileName = fneToolsPathAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 MaxLength = 0 TabOrder = 1 OnChange = fneToolsPathChange end object lblToolsPath: TLabel[2] AnchorSideLeft.Control = cbToolsUseExternalProgram AnchorSideTop.Control = cbToolsUseExternalProgram AnchorSideTop.Side = asrBottom Left = 8 Height = 16 Top = 42 Width = 145 BorderSpacing.Top = 15 Caption = '&Path to program to execute' FocusControl = fneToolsPath ParentColor = False end object lblToolsParameters: TLabel[3] AnchorSideLeft.Control = cbToolsUseExternalProgram AnchorSideTop.Control = fneToolsPath AnchorSideTop.Side = asrBottom Left = 8 Height = 16 Top = 95 Width = 118 BorderSpacing.Top = 10 Caption = 'A&dditional parameters' FocusControl = edtToolsParameters ParentColor = False end object cbToolsKeepTerminalOpen: TCheckBox[4] AnchorSideLeft.Control = cbToolsRunInTerminal AnchorSideTop.Control = cbToolsRunInTerminal AnchorSideTop.Side = asrBottom Left = 23 Height = 19 Top = 171 Width = 298 BorderSpacing.Left = 15 BorderSpacing.Top = 2 Caption = '&Keep terminal window open after executing program' OnChange = cbToolsKeepTerminalOpenChange TabOrder = 4 end object cbToolsRunInTerminal: TCheckBox[5] AnchorSideLeft.Control = edtToolsParameters AnchorSideTop.Control = edtToolsParameters AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 150 Width = 120 BorderSpacing.Top = 12 Caption = '&Execute in terminal' OnChange = cbToolsRunInTerminalChange TabOrder = 3 end object cbToolsUseExternalProgram: TCheckBox[6] Left = 8 Height = 19 Top = 8 Width = 132 BorderSpacing.Top = 12 Caption = '&Use external program' OnChange = cbToolsUseExternalProgramChange TabOrder = 0 end object btnRelativeToolPath: TSpeedButton[7] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = fneToolsPath AnchorSideBottom.Control = fneToolsPath AnchorSideBottom.Side = asrBottom Left = 555 Height = 24 Hint = 'Some functions to select appropriate path' Top = 62 Width = 24 Anchors = [akTop, akRight] BorderSpacing.Left = 22 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnRelativeToolPathClick end object pmPathHelper: TPopupMenu[8] left = 544 top = 88 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionseditorcolors.lrt�������������������������������������������������0000644�0001750�0000144�00000003077�12313074207�021604� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSEDITORCOLORS.BTNRESETMASK.HINT=Reset TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT=Save TFRMOPTIONSEDITORCOLORS.FOREGROUNDLABEL.CAPTION=Fo®round TFRMOPTIONSEDITORCOLORS.BACKGROUNDLABEL.CAPTION=Bac&kground TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION=Fo®round TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION=Bac&kground TFRMOPTIONSEDITORCOLORS.FRAMECOLORUSEDEFAULTCHECKBOX.CAPTION=&Text-mark TFRMOPTIONSEDITORCOLORS.BVLATTRIBUTESECTION.CAPTION=Element Attributes TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINERADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTUNDERLINECHECKBOX.CAPTION=&Underline TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTBOLDCHECKBOX.CAPTION=&Bold TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTITALICCHECKBOX.CAPTION=&Italic TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION=In&vert TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION=O&n TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION=O&ff TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTCHECKBOX.CAPTION=&Strike Out TFRMOPTIONSEDITORCOLORS.TBTNGLOBAL.CAPTION=Use (and edit) &global scheme settings TFRMOPTIONSEDITORCOLORS.TBTNLOCAL.CAPTION=Use &local scheme settings �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsplugins.pas������������������������������������������������������0000644�0001750�0000144�00000060525�12612505011�020532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Plugins options page Copyright (C) 2006-2013 Alexander Koblov (alexx2000@mail.ru) 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 fOptionsPlugins; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ComCtrls, StdCtrls, Grids, Buttons, fOptionsFrame, uDSXModule, uWCXModule, uWDXModule, uWFXmodule, uWLXModule, Controls; type { TfrmOptionsPlugins } TfrmOptionsPlugins = class(TOptionsEditor) btnAddPlugin: TBitBtn; btnConfigPlugin: TBitBtn; btnEnablePlugin: TBitBtn; btnRemovePlugin: TBitBtn; btnTweakPlugin: TBitBtn; lblDSXDescription: TLabel; lblWCXDescription: TLabel; lblWDXDescription: TLabel; lblWFXDescription: TLabel; lblWLXDescription: TLabel; pcPluginsTypes: TPageControl; stgPlugins: TStringGrid; tsDSX: TTabSheet; tsWCX: TTabSheet; tsWDX: TTabSheet; tsWFX: TTabSheet; tsWLX: TTabSheet; procedure btnConfigPluginClick(Sender: TObject); procedure btnEnablePluginClick(Sender: TObject); procedure btnRemovePluginClick(Sender: TObject); procedure btnTweakPluginClick(Sender: TObject); procedure pcPluginsTypesChange(Sender: TObject); procedure stgPluginsBeforeSelection(Sender: TObject; aCol, aRow: Integer); procedure btnDSXAddClick(Sender: TObject); procedure btnWDXAddClick(Sender: TObject); procedure btnWFXAddClick(Sender: TObject); procedure btnWLXAddClick(Sender: TObject); procedure btnWCXAddClick(Sender: TObject); procedure stgPluginsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure stgPluginsMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure stgPluginsSelection(Sender: TObject; aCol, aRow: Integer); procedure tsDSXShow(Sender: TObject); procedure tsWCXShow(Sender: TObject); procedure tsWDXShow(Sender: TObject); procedure tsWFXShow(Sender: TObject); procedure tsWLXShow(Sender: TObject); private FMoveRow: Boolean; FSourceRow: Integer; protected procedure Init; override; procedure Done; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; var tmpDSXPlugins: TDSXModuleList; tmpWCXPlugins: TWCXModuleList; tmpWDXPlugins: TWDXModuleList; tmpWFXPlugins: TWFXModuleList; tmpWLXPlugins: TWLXModuleList; implementation {$R *.lfm} uses LCLProc, Forms, Dialogs, StrUtils, uLng, uGlobs, uDCUtils, uDebug, uShowMsg, uTypes, fTweakPlugin, dmCommonData, DCStrUtils, uDefaultPlugins; { TfrmOptionsPlugins } procedure TfrmOptionsPlugins.pcPluginsTypesChange(Sender: TObject); begin if stgPlugins.RowCount > stgPlugins.FixedRows then stgPluginsBeforeSelection(stgPlugins, 0, stgPlugins.FixedRows); end; procedure TfrmOptionsPlugins.btnEnablePluginClick(Sender: TObject); var sExt, sExts: String; iPluginIndex: Integer; bEnabled: Boolean; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; if pcPluginsTypes.ActivePage.Name = 'tsWCX' then begin sExts:= stgPlugins.Cells[2, stgPlugins.Row]; sExt:= Copy2SpaceDel(sExts); repeat iPluginIndex:= tmpWCXPlugins.Find(stgPlugins.Cells[3, stgPlugins.Row], sExt); if iPluginIndex <> -1 then begin bEnabled:= not tmpWCXPlugins.Enabled[iPluginIndex]; tmpWCXPlugins.Enabled[iPluginIndex]:= bEnabled; end; sExt:= Copy2SpaceDel(sExts); until sExt = ''; stgPlugins.Cells[0, stgPlugins.Row]:= IfThen(bEnabled, string('+'), string('-')); btnEnablePlugin.Caption:= IfThen(bEnabled, rsOptDisable, rsOptEnable); end else if pcPluginsTypes.ActivePage.Name = 'tsWFX' then begin bEnabled:= not tmpWFXPlugins.Enabled[stgPlugins.Row - stgPlugins.FixedRows]; stgPlugins.Cells[0, stgPlugins.Row]:= IfThen(bEnabled, string('+'), string('-')); tmpWFXPlugins.Enabled[stgPlugins.Row - stgPlugins.FixedRows]:= bEnabled; btnEnablePlugin.Caption:= IfThen(bEnabled, rsOptDisable, rsOptEnable); end else if pcPluginsTypes.ActivePage.Name = 'tsWLX' then begin with tmpWLXPlugins.GetWlxModule(stgPlugins.Row - stgPlugins.FixedRows) do begin Enabled:= not Enabled; stgPlugins.Cells[0, stgPlugins.Row]:= IfThen(Enabled, string('+'), string('-')); btnEnablePlugin.Caption:= IfThen(Enabled, rsOptDisable, rsOptEnable); end; end; end; procedure TfrmOptionsPlugins.btnConfigPluginClick(Sender: TObject); var WCXmodule: TWCXmodule; WFXmodule: TWFXmodule; PluginFileName: String; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; // no plugins PluginFileName := GetCmdDirFromEnvVar(stgPlugins.Cells[3, stgPlugins.Row]); if pcPluginsTypes.ActivePage.Name = 'tsWCX' then begin WCXmodule := gWCXPlugins.LoadModule(PluginFileName); if Assigned(WCXmodule) then begin DCDebug('WCXModule Loaded'); WCXmodule.VFSConfigure(stgPlugins.Handle); DCDebug('Dialog executed'); end else msgError(rsMsgErrEOpen + ': ' + PluginFileName); end else if pcPluginsTypes.ActivePage.Name = 'tsWFX' then begin WFXmodule := TWFXmodule.Create; DCDebug('TWFXmodule created'); try if WFXmodule.LoadModule(PluginFileName) then begin DCDebug('WFXModule Loaded'); WfxModule.VFSInit(0); WFXmodule.VFSConfigure(stgPlugins.Handle); DCDebug('Dialog executed'); WFXModule.UnloadModule; DCDebug('WFX Module Unloaded'); end else msgError(rsMsgErrEOpen + ': ' + PluginFileName); finally WFXmodule.Free; DCDebug('WFX Freed'); end; end; end; procedure TfrmOptionsPlugins.btnRemovePluginClick(Sender: TObject); var sExt, sExts: String; iPluginIndex: Integer; begin if stgPlugins.Row < stgPlugins.FixedRows then Exit; // no plugins if pcPluginsTypes.ActivePage.Name = 'tsDSX' then begin tmpDSXPlugins.DeleteItem(stgPlugins.Row - stgPlugins.FixedRows); stgPlugins.DeleteColRow(False, stgPlugins.Row); end else if pcPluginsTypes.ActivePage.Name = 'tsWCX' then begin sExts:= stgPlugins.Cells[2, stgPlugins.Row]; sExt:= Copy2SpaceDel(sExts); repeat iPluginIndex:= tmpWCXPlugins.Find(stgPlugins.Cells[3, stgPlugins.Row], sExt); if iPluginIndex <> -1 then tmpWCXPlugins.Delete(iPluginIndex); sExt:= Copy2SpaceDel(sExts); until sExt = ''; stgPlugins.DeleteColRow(False, stgPlugins.Row); end else if pcPluginsTypes.ActivePage.Name = 'tsWDX' then begin tmpWDXPlugins.DeleteItem(stgPlugins.Row - stgPlugins.FixedRows); stgPlugins.DeleteColRow(False, stgPlugins.Row); end else if pcPluginsTypes.ActivePage.Name = 'tsWFX' then begin tmpWFXPlugins.Delete(stgPlugins.Row - stgPlugins.FixedRows); stgPlugins.DeleteColRow(False, stgPlugins.Row); end else if pcPluginsTypes.ActivePage.Name = 'tsWLX' then begin tmpWLXPlugins.DeleteItem(stgPlugins.Row - stgPlugins.FixedRows); stgPlugins.DeleteColRow(False, stgPlugins.Row); end end; procedure TfrmOptionsPlugins.btnTweakPluginClick(Sender: TObject); var ptPluginType: TPluginType; iPluginIndex: Integer; begin iPluginIndex:= stgPlugins.Row - stgPlugins.FixedRows; if pcPluginsTypes.ActivePage.Name = 'tsDSX' then ptPluginType:= ptDSX else if pcPluginsTypes.ActivePage.Name = 'tsWCX' then begin ptPluginType:= ptWCX; // get plugin index iPluginIndex:= tmpWCXPlugins.Find(stgPlugins.Cells[3, stgPlugins.Row], Copy2Space(stgPlugins.Cells[2, stgPlugins.Row])); end else if pcPluginsTypes.ActivePage.Name = 'tsWDX' then ptPluginType:= ptWDX else if pcPluginsTypes.ActivePage.Name = 'tsWFX' then ptPluginType:= ptWFX else if pcPluginsTypes.ActivePage.Name = 'tsWLX' then ptPluginType:= ptWLX; if iPluginIndex < 0 then Exit; if ShowTweakPluginDlg(ptPluginType, iPluginIndex) then pcPluginsTypes.ActivePage.OnShow(pcPluginsTypes.ActivePage); // update info in plugin list end; procedure TfrmOptionsPlugins.stgPluginsBeforeSelection(Sender: TObject; aCol, aRow: Integer); begin if stgPlugins.Cells[0, aRow] = '+' then btnEnablePlugin.Caption:= rsOptDisable else if stgPlugins.Cells[0, aRow] = '-' then btnEnablePlugin.Caption:= rsOptEnable; btnEnablePlugin.Enabled:= (stgPlugins.Cells[0, aRow] <> ''); end; { DSX plugins } procedure TfrmOptionsPlugins.btnDSXAddClick(Sender: TObject); var I, J: Integer; sFileName, sPluginName : String; begin dmComData.OpenDialog.Filter := 'Search plugins (*.dsx)|*.dsx'; if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I:= tmpDSXPlugins.Add(sPluginName, sFileName, EmptyStr); if not tmpDSXPlugins.LoadModule(sPluginName) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); tmpDSXPlugins.DeleteItem(I); Exit; end; stgPlugins.RowCount:= stgPlugins.RowCount + 1; J:= stgPlugins.RowCount - stgPlugins.FixedRows; stgPlugins.Cells[0, J]:= EmptyStr; stgPlugins.Cells[1, J]:= tmpDSXPlugins.GetDsxModule(I).Name; stgPlugins.Cells[2, J]:= tmpDSXPlugins.GetDsxModule(I).Descr; stgPlugins.Cells[3, J]:= SetCmdDirAsEnvVar(tmpDSXPlugins.GetDsxModule(I).FileName); end; end; procedure TfrmOptionsPlugins.tsDSXShow(Sender: TObject); var i:integer; begin btnAddPlugin.OnClick:= @btnDSXAddClick; stgPlugins.RowCount:= tmpDSXPlugins.Count + stgPlugins.FixedRows; for i:=0 to tmpDSXPlugins.Count-1 do begin stgPlugins.Cells[0, I + stgPlugins.FixedRows]:= EmptyStr; stgPlugins.Cells[1, I + stgPlugins.FixedRows]:= tmpDSXPlugins.GetDsxModule(i).Name; stgPlugins.Cells[2, I + stgPlugins.FixedRows]:= tmpDSXPlugins.GetDsxModule(i).Descr; stgPlugins.Cells[3, I + stgPlugins.FixedRows]:= SetCmdDirAsEnvVar(tmpDSXPlugins.GetDsxModule(i).FileName); end; end; { WCX plugins } procedure TfrmOptionsPlugins.btnWCXAddClick(Sender: TObject); var J, iPluginIndex, iFlags: Integer; sExt : String; sExts : String; sExtsTemp : String; sFileName : String; sPluginName : String; sAlreadyAssignedExts : String; WCXmodule : TWCXmodule; begin dmComData.OpenDialog.Filter := Format('Archive plugins (%s)|%s', [WcxMask, WcxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; WCXmodule := gWCXPlugins.LoadModule(sFileName); if not Assigned(WCXmodule) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); Exit; end; iFlags := WCXmodule.GetPluginCapabilities; sPluginName := SetCmdDirAsEnvVar(sFileName); if InputQuery(rsOptEnterExt, Format(rsOptAssocPluginWith, [sFileName]), sExts) then begin sExtsTemp := sExts; sExts := ''; sAlreadyAssignedExts := ''; sExt:= Copy2SpaceDel(sExtsTemp); repeat iPluginIndex:= tmpWCXPlugins.Find(sPluginName, sExt); if iPluginIndex <> -1 then begin AddStrWithSep(sAlreadyAssignedExts, sExt); end else begin tmpWCXPlugins.AddObject(sExt + '=' + IntToStr(iFlags) + ',' + sPluginName, TObject(True)); AddStrWithSep(sExts, sExt); end; sExt:= Copy2SpaceDel(sExtsTemp); until sExt = ''; if sAlreadyAssignedExts <> '' then MessageDlg(Format(rsOptPluginAlreadyAssigned, [sFileName]) + LineEnding + sAlreadyAssignedExts, mtWarning, [mbOK], 0); if sExts <> '' then begin stgPlugins.RowCount:= stgPlugins.RowCount + 1; // Add new row J:= stgPlugins.RowCount - 1; stgPlugins.Cells[0, J]:= '+'; // Enabled stgPlugins.Cells[1, J]:= ExtractOnlyFileName(sFileName); stgPlugins.Cells[2, J]:= sExts; stgPlugins.Cells[3, J]:= sPluginName; end; end; end; end; procedure TfrmOptionsPlugins.stgPluginsMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var SourceCol: Integer; begin if (Button = mbLeft) then begin stgPlugins.MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then begin FMoveRow := True; end; end; end; procedure TfrmOptionsPlugins.stgPluginsMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button = mbLeft) then begin FMoveRow := False; end; end; procedure TfrmOptionsPlugins.stgPluginsSelection(Sender: TObject; aCol, aRow: Integer); begin if FMoveRow and (aRow <> FSourceRow) then with stgPlugins do begin if pcPluginsTypes.ActivePage.Name = 'tsDSX' then begin tmpDSXPlugins.Exchange(FSourceRow - FixedRows, aRow - FixedRows); FSourceRow := aRow; tsDSXShow(stgPlugins); end else if pcPluginsTypes.ActivePage.Name = 'tsWCX' then begin tmpWCXPlugins.Exchange(FSourceRow - FixedRows, aRow - FixedRows); FSourceRow := aRow; tsWCXShow(stgPlugins); end else if pcPluginsTypes.ActivePage.Name = 'tsWDX' then begin tmpWDXPlugins.Exchange(FSourceRow - FixedRows, aRow - FixedRows); FSourceRow := aRow; tsWDXShow(stgPlugins); end else if pcPluginsTypes.ActivePage.Name = 'tsWFX' then begin tmpWFXPlugins.Exchange(FSourceRow - FixedRows, aRow - FixedRows); FSourceRow := aRow; tsWFXShow(stgPlugins); end else if pcPluginsTypes.ActivePage.Name = 'tsWLX' then begin tmpWLXPlugins.Exchange(FSourceRow - FixedRows, aRow - FixedRows); FSourceRow := aRow; tsWLXShow(stgPlugins); end; end; end; procedure TfrmOptionsPlugins.tsWCXShow(Sender: TObject); var I, iIndex: Integer; sFileName, sExt: String; iRow: Integer; begin btnAddPlugin.OnClick:= @btnWCXAddClick; stgPlugins.RowCount:= stgPlugins.FixedRows; // Clear column with extensions stgPlugins.Clean(2, stgPlugins.FixedRows, 2, stgPlugins.RowCount, [gzNormal]); for I := 0 to tmpWCXPlugins.Count - 1 do begin // get associated extension sExt := tmpWCXPlugins.Ext[I]; //get file name sFileName:= tmpWCXPlugins.FileName[I]; iIndex:= stgPlugins.Cols[3].IndexOf(sFileName); if iIndex < 0 then begin stgPlugins.RowCount:= stgPlugins.RowCount + 1; iRow := stgPlugins.RowCount - 1; stgPlugins.Cells[1, iRow]:= ExtractOnlyFileName(sFileName); stgPlugins.Cells[2, iRow]:= sExt + #32; if tmpWCXPlugins.Enabled[I] then // enabled begin stgPlugins.Cells[3, iRow]:= sFileName; stgPlugins.Cells[0, iRow]:= '+'; end else // disabled begin stgPlugins.Cells[3, iRow]:= sFileName; stgPlugins.Cells[0, iRow]:= '-'; end; end else begin stgPlugins.Cells[2, iIndex]:= stgPlugins.Cells[2, iIndex] + sExt + #32; end; end; if stgPlugins.RowCount > stgPlugins.FixedRows then stgPluginsBeforeSelection(stgPlugins, 0, stgPlugins.FixedRows); end; { WDX plugins } procedure TfrmOptionsPlugins.btnWDXAddClick(Sender: TObject); var I, J: Integer; sFileName, sPluginName : String; begin dmComData.OpenDialog.Filter := Format('Content plugins (%s;*.lua)|%s;*.lua', [WdxMask, WdxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not (StrEnds(sFileName, '.lua') or CheckPlugin(sFileName)) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I:= tmpWDXPlugins.Add(sPluginName, sFileName, EmptyStr); if not tmpWDXPlugins.LoadModule(sPluginName) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); tmpWDXPlugins.DeleteItem(I); Exit; end; tmpWDXPlugins.GetWdxModule(sPluginName).DetectStr:= tmpWDXPlugins.GetWdxModule(sPluginName).CallContentGetDetectString; stgPlugins.RowCount:= stgPlugins.RowCount + 1; J:= stgPlugins.RowCount - 1; stgPlugins.Cells[0, J]:= EmptyStr; stgPlugins.Cells[1, J]:= tmpWDXPlugins.GetWdxModule(I).Name; stgPlugins.Cells[2, J]:= tmpWDXPlugins.GetWdxModule(I).DetectStr; stgPlugins.Cells[3, J]:= SetCmdDirAsEnvVar(tmpWDXPlugins.GetWdxModule(I).FileName); end; end; procedure TfrmOptionsPlugins.tsWDXShow(Sender: TObject); var i:integer; begin btnAddPlugin.OnClick:= @btnWDXAddClick; stgPlugins.RowCount:= tmpWDXPlugins.Count + stgPlugins.FixedRows; for i:=0 to tmpWDXPlugins.Count-1 do begin stgPlugins.Cells[0, I + stgPlugins.FixedRows]:= EmptyStr; stgPlugins.Cells[1, I + stgPlugins.FixedRows]:= tmpWDXPlugins.GetWdxModule(i).Name; stgPlugins.Cells[2, I + stgPlugins.FixedRows]:= tmpWDXPlugins.GetWdxModule(i).DetectStr; stgPlugins.Cells[3, I + stgPlugins.FixedRows]:= SetCmdDirAsEnvVar(tmpWDXPlugins.GetWdxModule(i).FileName); end; end; { WFX plugins } procedure TfrmOptionsPlugins.btnWFXAddClick(Sender: TObject); var I, J: Integer; WfxModule : TWFXmodule; sFileName, sPluginName, sRootName: String; begin dmComData.OpenDialog.Filter := Format('File system plugins (%s)|%s', [WfxMask, WfxMask]); if dmComData.OpenDialog.Execute then begin sFileName:= dmComData.OpenDialog.FileName; DCDebug('Dialog executed'); if not CheckPlugin(sFileName) then Exit; WfxModule:= TWfxModule.Create; DCDebug('TWFXmodule created'); try if not WfxModule.LoadModule(sFileName) then begin DCDebug('Module not loaded'); MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); Exit; end; DCDebug('WFXModule Loaded'); sRootName:= WfxModule.VFSRootName; if Length(sRootName) = 0 then begin DCDebug('WFX alternate name'); sRootName:= ExtractOnlyFileName(sFileName); end; sPluginName:= sRootName + '=' + SetCmdDirAsEnvVar(sFileName); WFXModule.UnloadModule; DCDebug('WFX Module Unloaded'); DCDebug('WFX sPluginName=' + sPluginName); I:= tmpWFXPlugins.AddObject(sPluginName, TObject(True)); stgPlugins.RowCount:= tmpWFXPlugins.Count + 1; J:= stgPlugins.RowCount - 1; stgPlugins.Cells[0, J]:= '+'; stgPlugins.Cells[1, J]:= tmpWFXPlugins.Name[I]; stgPlugins.Cells[2, J]:= EmptyStr; stgPlugins.Cells[3, J]:= tmpWFXPlugins.FileName[I]; DCDebug('WFX Item Added'); finally WFXmodule.Free; DCDebug('WFX Freed'); end; end; end; procedure TfrmOptionsPlugins.tsWFXShow(Sender: TObject); var I, iRow: Integer; begin btnAddPlugin.OnClick:= @btnWFXAddClick; stgPlugins.RowCount:= tmpWFXPlugins.Count + stgPlugins.FixedRows; for I:= 0 to tmpWFXPlugins.Count - 1 do begin iRow := I + stgPlugins.FixedRows; if tmpWFXPlugins.Enabled[I] then begin stgPlugins.Cells[1, iRow]:= tmpWFXPlugins.Name[I]; stgPlugins.Cells[3, iRow]:= tmpWFXPlugins.FileName[I]; stgPlugins.Cells[0, iRow]:= '+'; end else begin stgPlugins.Cells[1, iRow]:= tmpWFXPlugins.Name[I]; stgPlugins.Cells[3, iRow]:= tmpWFXPlugins.FileName[I]; stgPlugins.Cells[0, iRow]:= '-'; end; stgPlugins.Cells[2, iRow]:= ''; end; end; { WLX Plugins } procedure TfrmOptionsPlugins.btnWLXAddClick(Sender: TObject); var I, J: Integer; sFileName, sPluginName : String; begin dmComData.OpenDialog.Filter:= Format('Viewer plugins (%s)|%s', [WlxMask, WlxMask]); if dmComData.OpenDialog.Execute then begin sFileName := dmComData.OpenDialog.FileName; if not CheckPlugin(sFileName) then Exit; sPluginName := ExtractOnlyFileName(sFileName); I:= tmpWLXPlugins.Add(sPluginName, sFileName, EmptyStr); if not tmpWLXPlugins.LoadModule(sPluginName) then begin MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); tmpWLXPlugins.DeleteItem(I); Exit; end; tmpWLXPlugins.GetWlxModule(sPluginName).DetectStr:= tmpWLXPlugins.GetWlxModule(sPluginName).CallListGetDetectString; stgPlugins.RowCount:= stgPlugins.RowCount + 1; J:= stgPlugins.RowCount - 1; stgPlugins.Cells[0, J]:= '+'; stgPlugins.Cells[1, J]:= tmpWLXPlugins.GetWlxModule(I).Name; stgPlugins.Cells[2, J]:= tmpWLXPlugins.GetWlxModule(I).DetectStr; stgPlugins.Cells[3, J]:= SetCmdDirAsEnvVar(tmpWLXPlugins.GetWlxModule(I).FileName); end; end; procedure TfrmOptionsPlugins.tsWLXShow(Sender: TObject); var i: Integer; begin btnAddPlugin.OnClick:= @btnWLXAddClick; stgPlugins.RowCount:= tmpWLXPlugins.Count + stgPlugins.FixedRows; for i:=0 to tmpWLXPlugins.Count-1 do begin stgPlugins.Cells[0, I + stgPlugins.FixedRows]:= IfThen(tmpWLXPlugins.GetWlxModule(i).Enabled, '+', '-'); stgPlugins.Cells[1, I + stgPlugins.FixedRows]:= tmpWLXPlugins.GetWlxModule(i).Name; stgPlugins.Cells[2, I + stgPlugins.FixedRows]:= tmpWLXPlugins.GetWlxModule(i).DetectStr; stgPlugins.Cells[3, I + stgPlugins.FixedRows]:= SetCmdDirAsEnvVar(tmpWLXPlugins.GetWlxModule(i).FileName); end; end; class function TfrmOptionsPlugins.GetIconIndex: Integer; begin Result := 6; end; class function TfrmOptionsPlugins.GetTitle: String; begin Result := rsOptionsEditorPlugins; end; procedure TfrmOptionsPlugins.Init; begin // Localize plugins. stgPlugins.Columns.Items[0].Title.Caption := rsOptPluginsActive; stgPlugins.Columns.Items[1].Title.Caption := rsOptPluginsName; stgPlugins.Columns.Items[2].Title.Caption := rsOptPluginsRegisteredFor; stgPlugins.Columns.Items[3].Title.Caption := rsOptPluginsFileName; // create plugins lists tmpDSXPlugins:= TDSXModuleList.Create; tmpWCXPlugins:= TWCXModuleList.Create; tmpWDXPlugins:= TWDXModuleList.Create; tmpWFXPlugins:= TWFXModuleList.Create; tmpWLXPlugins:= TWLXModuleList.Create; end; procedure TfrmOptionsPlugins.Done; begin FreeThenNil(tmpDSXPlugins); FreeThenNil(tmpWCXPlugins); FreeThenNil(tmpWDXPlugins); FreeThenNil(tmpWFXPlugins); FreeThenNil(tmpWLXPlugins); end; procedure TfrmOptionsPlugins.Load; begin { Fill plugins lists } tmpDSXPlugins.Assign(gDSXPlugins); tmpWCXPlugins.Assign(gWCXPlugins); tmpWDXPlugins.Assign(gWDXPlugins); tmpWFXPlugins.Assign(gWFXPlugins); tmpWLXPlugins.Assign(gWLXPlugins); // Update selected page. if pcPluginsTypes.ActivePage = tsDSX then tsDSXShow(Self) else if pcPluginsTypes.ActivePage = tsWCX then tsWCXShow(Self) else if pcPluginsTypes.ActivePage = tsWDX then tsWDXShow(Self) else if pcPluginsTypes.ActivePage = tsWFX then tsWFXShow(Self) else if pcPluginsTypes.ActivePage = tsWLX then tsWLXShow(Self); end; function TfrmOptionsPlugins.Save: TOptionsEditorSaveFlags; begin { Set plugins lists } gDSXPlugins.Assign(tmpDSXPlugins); gWCXPlugins.Assign(tmpWCXPlugins); gWDXPlugins.Assign(tmpWDXPlugins); gWFXPlugins.Assign(tmpWFXPlugins); gWLXPlugins.Assign(tmpWLXPlugins); Result := []; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfiletypescolors.lfm����������������������������������������������0000644�0001750�0000144�00000022715�12670757314�022314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFileTypesColors: TfrmOptionsFileTypesColors Height = 356 Width = 759 AutoSize = True ClientHeight = 356 ClientWidth = 759 DesignLeft = 378 DesignTop = 92 object gbFileTypesColors: TGroupBox[0] AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 8 Height = 346 Top = 6 Width = 743 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'File types colors (sort by drag&&drop)' ChildSizing.LeftRightSpacing = 8 ClientHeight = 328 ClientWidth = 739 TabOrder = 0 object lblCategoryName: TLabel AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrCenter Left = 8 Height = 14 Top = 175 Width = 99 Caption = 'Category &name:' FocusControl = edtCategoryName ParentColor = False end object lblCategoryMask: TLabel AnchorSideTop.Control = edtCategoryMask AnchorSideTop.Side = asrCenter Left = 8 Height = 14 Top = 203 Width = 97 Caption = 'Category &mask:' FocusControl = edtCategoryMask ParentColor = False end object lblCategoryColor: TLabel AnchorSideTop.Control = cbCategoryColor AnchorSideTop.Side = asrCenter Left = 8 Height = 14 Top = 259 Width = 95 Caption = 'Category co&lor:' FocusControl = cbCategoryColor ParentColor = False end object lblCategoryAttr: TLabel AnchorSideTop.Control = edtCategoryAttr AnchorSideTop.Side = asrCenter Left = 8 Height = 14 Top = 231 Width = 126 Caption = 'Category a&ttributes:' FocusControl = edtCategoryAttr ParentColor = False end object edtCategoryName: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryMask Left = 170 Height = 20 Top = 172 Width = 561 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 8 TabOrder = 1 end object edtCategoryMask: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSearchTemplate AnchorSideBottom.Control = edtCategoryAttr Left = 170 Height = 20 Top = 200 Width = 532 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Top = 8 BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 TabOrder = 2 end object cbCategoryColor: TColorBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCategoryColor AnchorSideBottom.Control = btnApplyCategory Left = 170 Height = 20 Top = 256 Width = 527 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akLeft, akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 12 ItemHeight = 16 TabOrder = 5 end object btnAddCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnDeleteCategory AnchorSideBottom.Control = btnApplyCategory AnchorSideBottom.Side = asrBottom Left = 389 Height = 32 Top = 288 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'A&dd' OnClick = btnAddCategoryClick TabOrder = 7 end object btnDeleteCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnApplyCategory AnchorSideBottom.Control = btnApplyCategory AnchorSideBottom.Side = asrBottom Left = 505 Height = 32 Top = 288 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'D&elete' OnClick = btnDeleteCategoryClick TabOrder = 8 end object btnCategoryColor: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCategoryColor AnchorSideRight.Control = edtCategoryAttr AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCategoryColor AnchorSideBottom.Side = asrBottom Left = 703 Height = 20 Top = 256 Width = 28 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCategoryColorClick TabOrder = 6 end object lbCategories: TListBox AnchorSideTop.Control = gbFileTypesColors AnchorSideRight.Control = gbFileTypesColors AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryName Left = 8 Height = 154 Top = 6 Width = 723 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 12 DragMode = dmAutomatic ItemHeight = 0 OnClick = lbCategoriesClick OnDragDrop = lbCategoriesDragDrop OnDragOver = lbCategoriesDragOver OnDrawItem = lbCategoriesDrawItem Style = lbOwnerDrawFixed TabOrder = 0 end object btnApplyCategory: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFileTypesColors AnchorSideBottom.Side = asrBottom Left = 621 Height = 32 Top = 288 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 8 Caption = 'A&pply' OnClick = btnApplyCategoryClick TabOrder = 9 end object edtCategoryAttr: TEdit AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCategoryColor Left = 170 Height = 20 Top = 228 Width = 561 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 8 TabOrder = 4 end object btnSearchTemplate: TBitBtn AnchorSideTop.Control = edtCategoryMask AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtCategoryMask AnchorSideBottom.Side = asrBottom Left = 708 Height = 20 Hint = 'Template...' Top = 200 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } Layout = blGlyphRight OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 3 end end object optColorDialog: TColorDialog[1] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) left = 184 top = 288 end end ���������������������������������������������������doublecmd-0.7.1/src/frames/fquicksearch.pas���������������������������������������������������������0000644�0001750�0000144�00000047254�12630372731�017756� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fQuickSearch; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, StdCtrls, LCLType, ExtCtrls, Buttons; type TQuickSearchMode = (qsSearch, qsFilter, qsNone); TQuickSearchDirection = (qsdNone, qsdFirst, qsdLast, qsdNext, qsdPrevious); TQuickSearchMatch = (qsmBeginning, qsmEnding); TQuickSearchCase = (qscSensitive, qscInsensitive); TQuickSearchItems = (qsiFiles, qsiDirectories, qsiFilesAndDirectories); TQuickSearchCancelMode = (qscmNode, qscmAtLeastOneThenCancelIfNoFound, qscmCancelIfNoFound); TQuickSearchOptions = record Match: set of TQuickSearchMatch; SearchCase: TQuickSearchCase; Items: TQuickSearchItems; Direction: TQuickSearchDirection; LastSearchMode: TQuickSearchMode; CancelSearchMode: TQuickSearchCancelMode; end; TOnChangeSearch = procedure(Sender: TObject; ASearchText: String; const ASearchOptions: TQuickSearchOptions) of Object; TOnChangeFilter = procedure(Sender: TObject; AFilterText: String; const AFilterOptions: TQuickSearchOptions) of Object; TOnExecute = procedure(Sender: TObject) of Object; TOnHide = procedure(Sender: TObject) of Object; { TfrmQuickSearch } TfrmQuickSearch = class(TFrame) btnCancel: TButton; edtSearch: TEdit; pnlOptions: TPanel; sbMatchBeginning: TSpeedButton; sbMatchEnding: TSpeedButton; sbCaseSensitive: TSpeedButton; sbFiles: TSpeedButton; sbDirectories: TSpeedButton; tglFilter: TToggleBox; procedure btnCancelClick(Sender: TObject); procedure edtSearchChange(Sender: TObject); procedure edtSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FrameExit(Sender: TObject); procedure sbCaseSensitiveClick(Sender: TObject); procedure sbFilesAndDirectoriesClick(Sender: TObject); procedure sbMatchBeginningClick(Sender: TObject); procedure sbMatchEndingClick(Sender: TObject); procedure tglFilterChange(Sender: TObject); private Options: TQuickSearchOptions; Mode: TQuickSearchMode; Active: Boolean; FilterOptions: TQuickSearchOptions; FilterText: String; Finalizing: Boolean; FUpdateCount: Integer; FNeedsChangeSearch: Boolean; procedure BeginUpdate; procedure CheckFilesOrDirectoriesDown; procedure EndUpdate; procedure DoHide; procedure DoOnChangeSearch; {en Loads control states from options values } procedure LoadControlStates; procedure PushFilter; procedure PopFilter; procedure ClearFilter; procedure CancelFilter; procedure ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String); public OnChangeSearch: TOnChangeSearch; OnChangeFilter: TOnChangeFilter; OnExecute: TOnExecute; OnHide: TOnHide; constructor Create(TheOwner: TWinControl); reintroduce; destructor Destroy; override; procedure Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0); procedure Finalize; function CheckSearchOrFilter(var Key: Word): Boolean; overload; function CheckSearchOrFilter(var UTF8Key: TUTF8Char): Boolean; overload; end; {en Allows to compare TQuickSearchOptions structures } operator = (qsOptions1, qsOptions2: TQuickSearchOptions) CompareResult: Boolean; implementation uses LazUTF8, uKeyboard, uGlobs, uFormCommands; const { Parameters: "filter" - set filtering (on/off/toggle) "search" - set searching (on/off/cycle) "matchbeginning" - set match beginning option (on/off/toggle) "matchending" - set match ending option (on/off/toggle) "casesensitive" - set case sensitive searching (on/off/toggle) "files" - set filtering files (on/off/toggle) "directories" - set filtering directories (on/off/toggle) "filesdirectories" - toggle between files, directories and both (no value) "text"="<...>" - set <...> as new text to search/filter (string) 'toggle' switches between on and off 'cycle' goto to next, next, next and so one } // parameters for quick search / filter actions PARAMETER_FILTER = 'filter'; PARAMETER_SEARCH = 'search'; PARAMETER_DIRECTION = 'direction'; PARAMETER_MATCH_BEGINNING = 'matchbeginning'; PARAMETER_MATCH_ENDING = 'matchending'; PARAMETER_CASE_SENSITIVE = 'casesensitive'; PARAMETER_FILES = 'files'; PARAMETER_DIRECTORIES = 'directories'; PARAMETER_FILES_DIRECTORIES = 'filesdirectories'; PARAMETER_TEXT = 'text'; TOGGLE_VALUE = 'toggle'; CYCLE_VALUE = 'cycle'; FIRST_VALUE = 'first'; LAST_VALUE = 'last'; NEXT_VALUE = 'next'; {$R *.lfm} operator = (qsOptions1, qsOptions2: TQuickSearchOptions) CompareResult: Boolean; begin Result := True; if qsOptions1.Match <> qsOptions2.Match then Result := False; if qsOptions1.Items <> qsOptions2.Items then Result := False; if qsOptions1.SearchCase <> qsOptions2.SearchCase then Result := False; end; function GetBoolState(const Value: String; OldState: Boolean): Boolean; begin if Value = TOGGLE_VALUE then Result := not OldState else if not GetBoolValue(Value, Result) then Result := OldState; end; { TfrmQuickSearch } constructor TfrmQuickSearch.Create(TheOwner: TWinControl); begin inherited Create(TheOwner); Self.Parent := TheOwner; // load default options Options := gQuickSearchOptions; Options.LastSearchMode := qsNone; LoadControlStates; FilterOptions := gQuickSearchOptions; FilterText := EmptyStr; Finalizing := False; HotMan.Register(Self.edtSearch, 'Quick Search'); end; destructor TfrmQuickSearch.Destroy; begin if Assigned(HotMan) then HotMan.UnRegister(Self.edtSearch); inherited Destroy; end; procedure TfrmQuickSearch.DoOnChangeSearch; begin if FUpdateCount > 0 then FNeedsChangeSearch := True else begin Options.LastSearchMode:=Self.Mode; case Self.Mode of qsSearch: if Assigned(Self.OnChangeSearch) then Self.OnChangeSearch(Self, edtSearch.Text, Options); qsFilter: if Assigned(Self.OnChangeFilter) then Self.OnChangeFilter(Self, edtSearch.Text, Options); end; FNeedsChangeSearch := False; end; end; procedure TfrmQuickSearch.Execute(SearchMode: TQuickSearchMode; const Params: array of String; Char: TUTF8Char = #0); begin Self.Visible := True; if not edtSearch.Focused then begin edtSearch.SetFocus; if Char = #0 then edtSearch.SelectAll; end; if Char <> #0 then edtSearch.SelText := Char; Self.Active := True; ProcessParams(SearchMode, Params); end; procedure TfrmQuickSearch.Finalize; begin PopFilter; Self.Visible := False; Options.LastSearchMode := qsNone; Options.Direction := qsdNone; Options.CancelSearchMode:=qscmNode; end; { TfrmQuickSearch.ProcessParams } procedure TfrmQuickSearch.ProcessParams(const SearchMode: TQuickSearchMode; const Params: array of String); var Param: String; Value: String; bWeGotMainParam: boolean = False; bLegacyBehavior: boolean = False; begin BeginUpdate; try Options.Direction:=qsdNone; for Param in Params do begin if (SearchMode=qsFilter) AND (GetParamValue(Param, PARAMETER_FILTER, Value)) then begin if (Value <> TOGGLE_VALUE) then tglFilter.Checked := GetBoolState(Value, tglFilter.Checked) else tglFilter.Checked := (not tglFilter.Checked) OR (Options.LastSearchMode<>qsFilter); //With "toggle", if mode was not previously, we activate filter mode. bWeGotMainParam := True; end else if (SearchMode=qsSearch) AND (GetParamValue(Param, PARAMETER_FILTER, Value)) then //Legacy begin tglFilter.Checked := GetBoolState(Value, tglFilter.Checked); bWeGotMainParam := True; bLegacyBehavior:= True; end else if (SearchMode=qsSearch) AND (GetParamValue(Param, PARAMETER_SEARCH, Value)) then begin if (Value <> CYCLE_VALUE) then begin Options.CancelSearchMode:=qscmNode; if (Value <> TOGGLE_VALUE) then tglFilter.Checked := not (GetBoolState(Value, tglFilter.Checked)) else tglFilter.Checked := not((tglFilter.Checked) OR (Options.LastSearchMode<>qsSearch)); //With "toggle", if mode was not previously, we activate search mode. end else begin tglFilter.Checked:=FALSE; if Options.LastSearchMode<>qsSearch then begin Options.Direction:=qsdFirst; //With "cycle", if mode was not previously, we activate search mode AND do to first item Options.CancelSearchMode:=qscmAtLeastOneThenCancelIfNoFound; end else begin Options.Direction:=qsdNext; Options.CancelSearchMode:=qscmCancelIfNoFound; end; end; bWeGotMainParam := True; end else if (SearchMode=qsSearch) AND GetParamValue(Param, PARAMETER_DIRECTION, Value) then begin if Value = FIRST_VALUE then Options.Direction:=qsdFirst; if Value = LAST_VALUE then Options.Direction:=qsdLast; if Value = NEXT_VALUE then Options.Direction:=qsdNext; end else if GetParamValue(Param, PARAMETER_MATCH_BEGINNING, Value) then begin sbMatchBeginning.Down := GetBoolState(Value, sbMatchBeginning.Down); sbMatchBeginningClick(nil); end else if GetParamValue(Param, PARAMETER_MATCH_ENDING, Value) then begin sbMatchEnding.Down := GetBoolState(Value, sbMatchEnding.Down); sbMatchEndingClick(nil); end else if GetParamValue(Param, PARAMETER_CASE_SENSITIVE, Value) then begin sbCaseSensitive.Down := GetBoolState(Value, sbCaseSensitive.Down); sbCaseSensitiveClick(nil); end else if GetParamValue(Param, PARAMETER_FILES, Value) then begin sbFiles.Down := GetBoolState(Value, sbFiles.Down); sbFilesAndDirectoriesClick(nil); end else if GetParamValue(Param, PARAMETER_DIRECTORIES, Value) then begin sbDirectories.Down := GetBoolState(Value, sbDirectories.Down); sbFilesAndDirectoriesClick(nil); end else if Param = PARAMETER_FILES_DIRECTORIES then begin if sbFiles.Down and sbDirectories.Down then sbDirectories.Down := False else if sbFiles.Down then begin sbDirectories.Down := True; sbFiles.Down := False; end else if sbDirectories.Down then sbFiles.Down := True; sbFilesAndDirectoriesClick(nil); end else if GetParamValue(Param, PARAMETER_TEXT, Value) then begin edtSearch.Text := Value; edtSearch.SelectAll; end; end; CheckFilesOrDirectoriesDown; //If search or filter was called with no parameter... case SearchMode of qsSearch: if not bWeGotMainParam then tglFilter.Checked:=False; qsFilter: if not bWeGotMainParam then tglFilter.Checked:=True; end; if not bLegacyBehavior then begin case SearchMode of qsSearch: if tglFilter.Checked then CancelFilter; qsFilter: if not tglFilter.Checked then CancelFilter; end; end; finally EndUpdate; end; end; function TfrmQuickSearch.CheckSearchOrFilter(var Key: Word): Boolean; var ModifierKeys: TShiftState; SearchOrFilterModifiers: TShiftState; SearchMode: TQuickSearchMode; UTF8Char: TUTF8Char; KeyTypingModifier: TKeyTypingModifier; begin Result := False; ModifierKeys := GetKeyShiftStateEx; for KeyTypingModifier in TKeyTypingModifier do begin if gKeyTyping[KeyTypingModifier] in [ktaQuickSearch, ktaQuickFilter] then begin SearchOrFilterModifiers := TKeyTypingModifierToShift[KeyTypingModifier]; if ((SearchOrFilterModifiers <> []) and (ModifierKeys * KeyModifiersShortcutNoText = SearchOrFilterModifiers)) {$IFDEF MSWINDOWS} // Entering international characters with Ctrl+Alt on Windows. or (HasKeyboardAltGrKey and (SearchOrFilterModifiers = []) and (ModifierKeys * KeyModifiersShortcutNoText = [ssCtrl, ssAlt])) {$ENDIF} then begin if (Key <> VK_SPACE) or (edtSearch.Text <> '') then begin UTF8Char := VirtualKeyToUTF8Char(Key, ModifierKeys - SearchOrFilterModifiers); Result := (UTF8Char <> '') and (not ((Length(UTF8Char) = 1) and (UTF8Char[1] in [#0..#31]))); if Result then begin Key := 0; case gKeyTyping[KeyTypingModifier] of ktaQuickSearch: SearchMode := qsSearch; ktaQuickFilter: SearchMode := qsFilter; end; Self.Execute(SearchMode, [], UTF8Char); end; end; Exit; end; end; end; end; function TfrmQuickSearch.CheckSearchOrFilter(var UTF8Key: TUTF8Char): Boolean; var ModifierKeys: TShiftState; SearchMode: TQuickSearchMode; begin Result := False; // Check for certain Ascii keys. if (Length(UTF8Key) = 1) and (UTF8Key[1] in [#0..#32,'+','-','*']) then Exit; ModifierKeys := GetKeyShiftStateEx; if gKeyTyping[ktmNone] in [ktaQuickSearch, ktaQuickFilter] then begin if ModifierKeys * KeyModifiersShortcutNoText = TKeyTypingModifierToShift[ktmNone] then begin // Make upper case if either caps-lock is toggled or shift pressed. if (ssCaps in ModifierKeys) xor (ssShift in ModifierKeys) then UTF8Key := UTF8UpperCase(UTF8Key) else UTF8Key := UTF8LowerCase(UTF8Key); case gKeyTyping[ktmNone] of ktaQuickSearch: SearchMode := qsSearch; ktaQuickFilter: SearchMode := qsFilter; end; Self.Execute(SearchMode, [], UTF8Key); UTF8Key := ''; Result := True; Exit; end; end; end; procedure TfrmQuickSearch.LoadControlStates; begin sbDirectories.Down := (Options.Items = qsiDirectories) or (Options.Items = qsiFilesAndDirectories); sbFiles.Down := (Options.Items = qsiFiles) or (Options.Items = qsiFilesAndDirectories); sbCaseSensitive.Down := Options.SearchCase = qscSensitive; sbMatchBeginning.Down := qsmBeginning in Options.Match; sbMatchEnding.Down := qsmEnding in Options.Match; end; procedure TfrmQuickSearch.PushFilter; begin FilterText := edtSearch.Text; FilterOptions := Options; end; procedure TfrmQuickSearch.PopFilter; begin edtSearch.Text := FilterText; // there was no filter saved, do not continue loading if FilterText = EmptyStr then Exit; Options := FilterOptions; LoadControlStates; FilterText := EmptyStr; tglFilter.Checked := True; end; procedure TfrmQuickSearch.ClearFilter; begin FilterText := EmptyStr; FilterOptions := Options; if Assigned(Self.OnChangeFilter) then Self.OnChangeFilter(Self, EmptyStr, FilterOptions); end; procedure TfrmQuickSearch.CancelFilter; begin Finalize; {$IFDEF LCLGTK2} // On GTK2 OnExit for frame is not called when it is hidden, // but only when a control from outside of frame gains focus. FrameExit(nil); {$ENDIF} DoHide; end; procedure TfrmQuickSearch.CheckFilesOrDirectoriesDown; begin if not (sbFiles.Down or sbDirectories.Down) then begin // unchecking both should not be possible, so recheck last unchecked case Options.Items of qsiFiles: sbFiles.Down := True; qsiDirectories: sbDirectories.Down := True; end; end; end; procedure TfrmQuickSearch.edtSearchChange(Sender: TObject); begin DoOnChangeSearch; end; procedure TfrmQuickSearch.BeginUpdate; begin Inc(FUpdateCount); end; procedure TfrmQuickSearch.btnCancelClick(Sender: TObject); begin CancelFilter; end; procedure TfrmQuickSearch.edtSearchKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if CheckSearchOrFilter(Key) then Exit; case Key of VK_DOWN: begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction:=qsdNext; Self.OnChangeSearch(Self, edtSearch.Text, Options); end; end; VK_UP: begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction:=qsdPrevious; Self.OnChangeSearch(Self, edtSearch.Text, Options); end; end; // Request to have CTRL pressed at the same time. // VK_HOME alone reserved to get to start position of edtSearch. VK_HOME: begin if ssCtrl in Shift then begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction := qsdFirst; Self.OnChangeSearch(Self, edtSearch.Text, Options); end; end; end; // Request to have CTRL pressed at the same time. // VK_END alone reserved to get to end position of edtSearch. VK_END: begin if ssCtrl in Shift then begin Key := 0; if Assigned(Self.OnChangeSearch) then begin Options.Direction := qsdLast; Self.OnChangeSearch(Self, edtSearch.Text, Options); end; end; end; VK_RETURN, VK_SELECT: begin Key := 0; if Assigned(Self.OnExecute) then Self.OnExecute(Self); CancelFilter; end; VK_TAB: begin Key := 0; DoHide; end; VK_ESCAPE: begin Key := 0; CancelFilter; end; end; end; procedure TfrmQuickSearch.EndUpdate; begin Dec(FUpdateCount); if FUpdateCount = 0 then begin if FNeedsChangeSearch then DoOnChangeSearch; end; end; procedure TfrmQuickSearch.DoHide; begin if Assigned(Self.OnHide) then Self.OnHide(Self); end; procedure TfrmQuickSearch.FrameExit(Sender: TObject); begin if not Finalizing then begin Finalizing := True; Self.Active := False; if (Mode = qsFilter) and (edtSearch.Text <> EmptyStr) then Self.Visible := not gQuickFilterAutoHide else Finalize; Finalizing := False; end; end; procedure TfrmQuickSearch.sbCaseSensitiveClick(Sender: TObject); begin if sbCaseSensitive.Down then Options.SearchCase := qscSensitive else Options.SearchCase := qscInsensitive; if gQuickFilterSaveSessionModifications then gQuickSearchOptions.SearchCase := Options.SearchCase; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbFilesAndDirectoriesClick(Sender: TObject); begin if sbFiles.Down and sbDirectories.Down then Options.Items := qsiFilesAndDirectories else if sbFiles.Down then Options.Items := qsiFiles else if sbDirectories.Down then Options.Items := qsiDirectories else if FUpdateCount = 0 then begin CheckFilesOrDirectoriesDown; Exit; end; if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Items := Options.Items; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbMatchBeginningClick(Sender: TObject); begin if sbMatchBeginning.Down then Include(Options.Match, qsmBeginning) else Exclude(Options.Match, qsmBeginning); if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Match := Options.Match; DoOnChangeSearch; end; procedure TfrmQuickSearch.sbMatchEndingClick(Sender: TObject); begin if sbMatchEnding.Down then Include(Options.Match, qsmEnding) else Exclude(Options.Match, qsmEnding); if gQuickFilterSaveSessionModifications then gQuickSearchOptions.Match := Options.Match; DoOnChangeSearch; end; procedure TfrmQuickSearch.tglFilterChange(Sender: TObject); begin Options.LastSearchMode := qsNone; if tglFilter.Checked then Mode := qsFilter else Mode := qsSearch; // if a filter was set in background and a search is opened, the filter // will get pushed staying active. Otherwise the filter will be converted // in a search if not Active and (Mode = qsSearch) then PushFilter else if Active then ClearFilter; DoOnChangeSearch; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfonts.lrt��������������������������������������������������������0000644�0001750�0000144�00000001102�12510227505�020210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION=Main &font TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION=&Editor font TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION=&Viewer font TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION=... TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION=&Log font TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION=... TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION=Viewer&Book Font TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION=... TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION=... TFRMOPTIONSFONTS.LBLCONSOLEFONT.CAPTION=&Console font ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsicons.lrt��������������������������������������������������������0000644�0001750�0000144�00000001473�12111165165�020205� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSICONS.GBICONSSIZE.CAPTION= Icon size TFRMOPTIONSICONS.CBICONSSIZE.TEXT=16x16 TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION= Show icons to the left of the filename TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION=A&ll TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION=Only &standard icons TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION=&No icons TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION=All associated + &EXE/LNK (slow) TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION=Show o&verlay icons, e.g. for links TFRMOPTIONSICONS.GBDISABLESPECIALICONS.CAPTION=Disable special icons TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION=For the following &paths and their subdirectories: TFRMOPTIONSICONS.GBICONSINMENUS.CAPTION=Icons in menus TFRMOPTIONSICONS.CBICONSINMENUS.CAPTION=Show icons for actions in &menus TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT=16x16 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/fsearchplugin.lfm��������������������������������������������������������0000644�0001750�0000144�00000006137�12405254761�020130� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSearchPlugin: TfrmSearchPlugin Left = 0 Height = 240 Top = 0 Width = 581 ClientHeight = 240 ClientWidth = 581 TabOrder = 0 DesignLeft = 573 DesignTop = 336 object pnlTable: TScrollBox Left = 0 Height = 125 Top = 65 Width = 581 HorzScrollBar.Page = 1 HorzScrollBar.Visible = False VertScrollBar.Page = 1 Align = alClient ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 Enabled = False TabOrder = 0 OnResize = pnlTableResize end object pnlButtons: TPanel Left = 0 Height = 50 Top = 190 Width = 581 Align = alBottom BevelOuter = bvNone ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 12 ChildSizing.HorizontalSpacing = 12 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 50 ClientWidth = 581 Enabled = False TabOrder = 1 object btnAdd: TButton Left = 12 Height = 25 Top = 12 Width = 82 AutoSize = True Caption = '&More rules' OnClick = btnAddClick TabOrder = 0 end object btnDelete: TBitBtn Left = 106 Height = 25 Top = 12 Width = 76 Caption = 'L&ess rules' OnClick = btnDeleteClick TabOrder = 1 end end object HeaderControl: THeaderControl Left = 0 Height = 34 Top = 31 Width = 581 DragReorder = False Sections = < item Alignment = taLeftJustify Text = 'Plugin' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Field' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Operator' Width = 30 Visible = True end item Alignment = taLeftJustify Text = 'Value' Width = 30 Visible = True end> Align = alTop Enabled = False end object pnlHeader: TPanel Left = 0 Height = 31 Top = 0 Width = 581 Align = alTop AutoSize = True BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.HorizontalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 4 ClientHeight = 31 ClientWidth = 581 TabOrder = 3 object chkUsePlugins: TCheckBox Left = 0 Height = 19 Top = 6 Width = 259 Caption = 'Use &content plugins, combine with:' OnChange = chkUsePluginsChange TabOrder = 0 end object rbAnd: TRadioButton Left = 265 Height = 19 Top = 6 Width = 157 Caption = '&AND (all match)' Checked = True Enabled = False TabOrder = 1 TabStop = True end object rbOr: TRadioButton Left = 428 Height = 19 Top = 6 Width = 153 Caption = '&OR (any match)' Enabled = False TabOrder = 2 end end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsplugins.lfm������������������������������������������������������0000644�0001750�0000144�00000035233�12405254001�020523� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsPlugins: TfrmOptionsPlugins Height = 376 Width = 604 ClientHeight = 376 ClientWidth = 604 DesignLeft = 248 DesignTop = 275 object pcPluginsTypes: TPageControl[0] AnchorSideRight.Side = asrBottom Left = 0 Height = 84 Top = 0 Width = 604 ActivePage = tsWCX Align = alTop TabIndex = 0 TabOrder = 6 OnChange = pcPluginsTypesChange object tsWCX: TTabSheet Caption = 'Pac&ker plugins (.WCX)' ClientHeight = 56 ClientWidth = 596 OnShow = tsWCXShow object lblWCXDescription: TLabel AnchorSideLeft.Control = tsWCX AnchorSideTop.Control = tsWCX AnchorSideRight.Control = tsWCX AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 12 Width = 576 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = 'Pack&er plugins are used to work with archives' FocusControl = stgPlugins ParentColor = False WordWrap = True end end object tsWFX: TTabSheet Caption = 'F&ile system plugins (.WFX)' ClientHeight = 58 ClientWidth = 596 OnShow = tsWFXShow object lblWFXDescription: TLabel AnchorSideTop.Control = tsWFX AnchorSideRight.Control = tsWFX AnchorSideRight.Side = asrBottom Left = 10 Height = 13 Top = 12 Width = 576 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = 'Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC.' FocusControl = stgPlugins ParentColor = False WordWrap = True end end object tsWDX: TTabSheet Caption = 'Content pl&ugins (.WDX)' ClientHeight = 45 ClientWidth = 598 OnShow = tsWDXShow object lblWDXDescription: TLabel AnchorSideLeft.Control = tsWDX AnchorSideTop.Control = tsWDX AnchorSideRight.Control = tsWDX AnchorSideRight.Side = asrBottom Left = 10 Height = 40 Top = 12 Width = 578 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = 'Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool' FocusControl = stgPlugins ParentColor = False WordWrap = True end end object tsDSX: TTabSheet Caption = '&Search plugins (.DSX)' ClientHeight = 45 ClientWidth = 598 OnShow = tsDSXShow object lblDSXDescription: TLabel AnchorSideLeft.Control = tsDSX AnchorSideTop.Control = tsDSX AnchorSideRight.Control = tsDSX AnchorSideRight.Side = asrBottom Left = 10 Height = 40 Top = 12 Width = 578 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = 'Searc&h plugins allow to use alternative search algorithms or external tools (like "locate", etc.)' FocusControl = stgPlugins ParentColor = False WordWrap = True end end object tsWLX: TTabSheet Caption = '&Viewer plugins (.WLX)' ClientHeight = 45 ClientWidth = 598 OnShow = tsWLXShow object lblWLXDescription: TLabel AnchorSideLeft.Control = tsWLX AnchorSideTop.Control = tsWLX AnchorSideRight.Control = tsWLX AnchorSideRight.Side = asrBottom Left = 10 Height = 40 Top = 12 Width = 578 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 12 BorderSpacing.Right = 10 Caption = 'Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)' FocusControl = stgPlugins ParentColor = False WordWrap = True end end end object stgPlugins: TStringGrid[1] AnchorSideLeft.Control = pcPluginsTypes AnchorSideTop.Control = pcPluginsTypes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pcPluginsTypes AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnTweakPlugin Left = 0 Height = 242 Top = 84 Width = 604 Anchors = [akTop, akLeft, akRight, akBottom] AutoAdvance = aaRightDown AutoFillColumns = True BorderSpacing.Bottom = 12 ColCount = 4 Columns = < item Alignment = taCenter MaxSize = 80 SizePriority = 0 Title.Caption = 'Active' Width = 70 end item SizePriority = 0 Title.Caption = 'Plugin' Width = 183 end item SizePriority = 0 Title.Caption = 'Registered for' Width = 183 end item SizePriority = 0 Title.Caption = 'File name' Width = 164 end> FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goThumbTracking, goSmoothScroll, goHeaderHotTracking, goHeaderPushedLook] RowCount = 1 TabOrder = 0 TitleStyle = tsNative OnBeforeSelection = stgPluginsBeforeSelection OnMouseDown = stgPluginsMouseDown OnMouseUp = stgPluginsMouseUp OnSelection = stgPluginsSelection ColWidths = ( 70 183 183 164 ) end object btnAddPlugin: TBitBtn[2] AnchorSideRight.Control = btnEnablePlugin AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 22 Height = 30 Top = 338 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 Cancel = True Caption = 'A&dd' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000009E9E9EA38181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF9E9E9E950000000000000000818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF2F2F2FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFF0F0F0FFF0F0F0FFF1F1 F1FFF1F1F1FFF2F2F2FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF1F1 F1FFF1F1F1FFF1F1F1FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFF0F0F0FFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFEFEF EFFFEFEFEFFFF0F0F0FFFFFFFFFF818181FF0000000000000000818181FFFFFF FFFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFEEEEEEFFEEEEEEFFE2EE EEFFB1F0F3FF92F0F5FF9AF0F5FF779696FF0000000000000000818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFEDEDEDFFEDEDEDFFE0EEEFFF96EF F4FF63F1F8FF46F3FBFF45F3FBFF5DEFF7FD36DDE67603F3FF01818181FFFFFF FFFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFFEDEDEDFFB1EEF1FF67F1 F8FF40F4FDFF71F7FDFF72F7FDFF43F3FCFE24ECF6B60AF3FF25818181FFFFFF FFFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFFECECECFF9BEFF3FF4EF2 FAFF6AF6FDFFBBFAFEFFBFFBFEFF6EF6FDFF22F0FAD20DF3FF50818181FFFFFF FFFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFECECECFFECECECFF9CEEF2FF4EF2 FAFF67F6FDFFB5FAFEFFB8FAFEFF6BF5FDFF22EFFAD10DF3FF5C818181FFFFFF FFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFB4EDF0FF6AF0 F7FF3AF4FCFF68F6FDFF6AF6FDFF3CF2FBFD1EEFF9A909F3FF37818181FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9BEE F2FF69F0F7FF4DF2FAFF46EFF7FA28EBF4B60DF3FF6102F3FF099E9E9EA38181 81FF818181FF818181FF818181FF818181FF818181FF818181FF818181FF7C8C 8CFF729F9FFF6AAEAFFF36E4ED8A09F3FF4502F3FF0F00000000 } TabOrder = 1 end object btnEnablePlugin: TBitBtn[3] AnchorSideRight.Control = btnRemovePlugin AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 138 Height = 30 Top = 338 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 Caption = 'E&nable' OnClick = btnEnablePluginClick TabOrder = 2 end object btnRemovePlugin: TBitBtn[4] AnchorSideRight.Control = btnTweakPlugin AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 254 Height = 30 Top = 338 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 Caption = '&Remove' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00008B9C1F008C9DED008D9EEC008D 9E9E008B9C21FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00008B9C13008D9EE24FC3D2FD5BD3E1FF30B5 C6FA0890A1F6008D9FA9008B9C14FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00008E9FC536B5C5FA5FD8E7FF26CADFFF4ED4 E5FF6DD9E7FF32B4C5FB008D9EE6008B9C26FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00008B9C431A9BABF66CDAE8FF10C5DCFF03C2DAFF03C2 DAFF15C6DCFF5BD7E7FF56C8D6FE058FA0F1008B9C3FFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00018EA0D45ECFDDFF46DAEDFF18D0E7FF11CBE3FF07C4 DCFF03C2DAFF03C2DAFF4CD3E4FF58CDDCFF048E9FF4008B9C1CFFFFFF00FFFF FF00FFFFFF00008B9C1A1194A5F78BEDFBFF3CE5FCFF37E4FBFF2FDEF6FF23D7 EEFF14CDE5FF04C3DBFF03C2DAFF56D6E6FF33B6C6FB008E9FA8FFFFFF00FFFF FF00FFFFFF00007F9C5F2FB0C0F58AEFFDFF5FEAFDFF61EBFDFF52E9FDFF3CE6 FDFF2ADBF3FF18D0E7FF10C6DCFF49D2E4FF67D4E2FF018D9FE9FFFFFF00FFFF FF00008B9C070024A1D71342ADFC84EAFBFF6BECFDFF84EFFDFF6DECFDFF52E9 FDFF44E5FBFF65E3F3FF77DDEBFF49C1CFFE1B9EAEF3008C9DEAFFFFFF00008B 9C5F008D9EEB29A5BBF6284ABBFF1D38B8FF61D8F6FF63EAFDFF6CEBFDFF7DEE FDFF88EAF8FF45BECDFA058F9FF7008E9FA3008B9C40008B9C02FFFFFF00008B 9C5A018D9EF64FC8D8FF68DCECFF336DC8FF0D1BABFF62B1D7FF72DCEAFF43BD CCF70990A2F6018E9F9F008B9C1BFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF000064878100889CFE41BDCDFF77DEEBFF1769B0F70036A0E4018FA0D2008C 9D77008B9C15FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0000487802004A 7B95014E80F40B76B2FF0188A1FF32AEBEFE1DA0B1F2008B9C3DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000049796F0352 86F40F7ABCFF107DC1FF015284F200859ACE008B9CFF008B9C29FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00004A7BED0C72 B2FF107DC1FF0A6BA9FF004A7BDA00698A02008B9C82008B9C13FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00004A7BE50A69 A6FF0B6DABFF004A7BF500487844FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000048783B004B 7CDA004A7BE300487847FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } OnClick = btnRemovePluginClick TabOrder = 3 end object btnTweakPlugin: TBitBtn[5] AnchorSideRight.Control = btnConfigPlugin AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 370 Height = 30 Top = 338 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 BorderSpacing.Bottom = 8 Caption = '&Tweak' Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000009595 95B4818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF959595A800000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFEDEDEDFFEEEEEEFFEFEFEFFFEFEFEFFFF0F0F0FFF0F0 F0FFE0E0E0FFADADADFFBABABAFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEDEDEDFFC6C6C6FFC7C7C7FFC7C7C7FFC8C8C8FFC8C8C8FFB5B5 B5FF929292FF9E9E9EFFABABABFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEDEDEDFFEEEEEEFFEEEEEEFFEFEFEFFFD4D4D4FF7777 77FF858585FF909090FF9D9D9DFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFB0B0B0FF585858FF585858FF585858FF585858FF5959 59FF626262FF6C6C6CFFDCDCDCFFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFF696969FF696969FF696969FF6A6A6AFF6A6A6AFF6A6A 6AFF6A6A6AFFD6D6D6FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF585858FF585858FFB0B0B0FF585858FF6A6A6AFF6A6A 6AFFCCD2D2FFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFF696969FFD2D2D2FFECECECFFD2D2D2FF696969FF6669 69FFECECECFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEBEBEBFFC5C5C5FFC6C6C6FFB0B0B0FF585858FF585858FF5858 58FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFEBEBEBFFEBEBEBFF696969FF696969FF696969FFD2D2 D2FFEDEDEDFFEEEEEEFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFEAEAEAFFC4C4C4FFC5C5C5FFC5C5C5FFC6C6C6FFC6C6C6FFC6C6 C6FFC6C6C6FFC7C7C7FFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFECECECFFEAEAEAFFEAEAEAFFEBEBEBFFEBEBEBFFEBEBEBFFECEC ECFFECECECFFEDEDEDFFF0F0F0FFFFFFFFFF818181FF00000000000000008181 81FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF818181FF00000000000000009999 99AC818181FF818181FF818181FF818181FF818181FF818181FF818181FF8181 81FF818181FF818181FF818181FF818181FF8181815600000000 } OnClick = btnTweakPluginClick TabOrder = 4 end object btnConfigPlugin: TBitBtn[6] AnchorSideRight.Control = stgPlugins AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 486 Height = 30 Top = 338 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'Con&figure' OnClick = btnConfigPluginClick TabOrder = 5 end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstooltips.lfm�����������������������������������������������������0000644�0001750�0000144�00000022041�12670757314�020733� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsToolTips: TfrmOptionsToolTips Height = 366 Width = 599 AutoSize = True ClientHeight = 366 ClientWidth = 599 DesignLeft = 345 DesignTop = 69 object chkShowToolTip: TCheckBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 6 Height = 19 Top = 6 Width = 252 BorderSpacing.Around = 6 Caption = '&Show tooltip for files in the file panel' OnChange = chkShowToolTipChange TabOrder = 0 end object gbCustomFields: TGroupBox[1] AnchorSideLeft.Control = Owner AnchorSideTop.Control = chkShowToolTip AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 6 Height = 327 Top = 31 Width = 587 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Around = 6 Caption = 'Custom fields by file type' ChildSizing.TopBottomSpacing = 6 ClientHeight = 309 ClientWidth = 583 Color = clForm ParentColor = False TabOrder = 1 object btnAddFields: TBitBtn AnchorSideTop.Control = btnApplyFields AnchorSideRight.Control = btnDeleteFields Left = 233 Height = 32 Top = 269 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'A&dd' OnClick = btnAddFieldsClick TabOrder = 2 end object btnDeleteFields: TBitBtn AnchorSideTop.Control = btnApplyFields AnchorSideRight.Control = btnApplyFields Left = 349 Height = 32 Top = 269 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'D&elete' Enabled = False OnClick = btnDeleteFieldsClick TabOrder = 3 end object lsbCustomFields: TListBox AnchorSideTop.Control = gbCustomFields AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEdit Left = 12 Height = 151 Top = 6 Width = 563 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Right = 8 BorderSpacing.Bottom = 6 ItemHeight = 0 OnSelectionChange = lsbCustomFieldsSelectionChange TabOrder = 0 end object btnApplyFields: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlEdit AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbCustomFields AnchorSideBottom.Side = asrBottom Left = 465 Height = 32 Top = 269 Width = 110 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 8 Caption = 'A&pply' OnClick = btnApplyFieldsClick TabOrder = 4 end object pnlEdit: TPanel AnchorSideLeft.Control = lsbCustomFields AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lsbCustomFields AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnApplyFields Left = 12 Height = 100 Top = 163 Width = 563 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ClientHeight = 100 ClientWidth = 563 Color = clForm Enabled = False ParentColor = False TabOrder = 1 object lblFieldsName: TLabel AnchorSideTop.Control = edtFieldsName AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 15 Width = 99 Caption = 'Category &name:' FocusControl = edtFieldsName ParentColor = False end object lblFieldsMask: TLabel AnchorSideTop.Control = edtFieldsMask AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 43 Width = 97 Caption = 'Category &mask:' FocusControl = edtFieldsMask ParentColor = False end object lblFieldsList: TLabel AnchorSideTop.Control = edtFieldsList AnchorSideTop.Side = asrCenter Left = 0 Height = 14 Top = 71 Width = 88 Caption = 'Category &hint:' FocusControl = edtFieldsList ParentColor = False end object edtFieldsName: TEdit AnchorSideTop.Control = pnlEdit AnchorSideRight.Side = asrBottom Left = 150 Height = 20 Top = 12 Width = 413 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 TabOrder = 0 end object edtFieldsMask: TEdit AnchorSideLeft.Control = edtFieldsName AnchorSideTop.Control = edtFieldsName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFieldsSearchTemplate Left = 150 Height = 20 Top = 40 Width = 384 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 TabOrder = 1 end object edtFieldsList: TEdit AnchorSideLeft.Control = edtFieldsName AnchorSideTop.Control = edtFieldsMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFieldsList Left = 150 Height = 20 Top = 68 Width = 379 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 BorderSpacing.Bottom = 12 TabOrder = 3 end object btnFieldsSearchTemplate: TBitBtn AnchorSideTop.Control = edtFieldsMask AnchorSideRight.Control = edtFieldsName AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtFieldsMask AnchorSideBottom.Side = asrBottom Left = 540 Height = 20 Hint = 'Template...' Top = 40 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000009700 00FF000000000000000000000000000000FF00000000000000FFC2B5B3E30000 00FF000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000C5B8B570E3DBD9FF8975 7375000000000000000000000000000000000000000000000000000000000000 000000000000970000FF000000000000000000000000C2B4B26FE1D9D7FF8571 6E75000000000000000000000000000000000000000000000000000000000000 0000970000FF00000000000000000000000000000000B3A4A26FD6C9C7FF705E 5B75000000000000000000000000000000000000000000000000000000009700 00FF0000000000000000000000000000000000000000A798967DD9CBCAFF7362 6184000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000005B494812D4C6C5FFD1C2C1FE8F7E 7DFF5B4B4E160000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000C2B3B3C0EEE2E2FED5C8C7FFD6C9 C8FE746363C60000000000000000000000000000000000000000000000000000 00000000000000000000000000009D8B8B5CF9EEEFFFEDE1E0FFDED1D1FFEADE DCFFB1A1A0FF645455630000000000000000000000000000000000000000D2C6 C36CEEE5E2C3BEADABB100000002D2C4C3FBFDF5F4FEE0D4D3FFDACCCBFFE8DD DBFFD2C4C2FE796868FD61525509000000000000000000000000000000008B78 754B00000000000000007C6B6BFCF7ECECFFFEF6F4FFCFC2C0FFD4C7C7FFEDE3 E1FFCDBDBBFF998887FE605151BC00000000000000000000000000000000806F 6D350000000062514F4CCEBEBEFFFBF2F0FFFBF6F5FFC7B9B7FFD0C3C3FFF8F0 EFFFC7B7B4FFA69593FF665555FF5545464D000000000000000000000000D8CF CE59D1C5C299978484FFF4EBEBFEFEFDFDFFF4EEEDFFC3B5B3FFD8CBC9FFFFFC FCFFD8CBC9FFB2A1A0FF867474FE524343FA0000000200000000000000000000 00007767669CE0D3D1FFFFFEFEFFFFFFFFFFEFE7E6FFAF9E9BFFD6C6C4FFFCF7 F7FFD8CACAFFAE9D9EFF827173FF5B4A4EFF67595C9F00000000000000000000 00008E7F7ED8E2D7D6FFCCC2C2FFCDC6C6FFD0C9C9FFD7D1D2FFD6D1D2FFCEC6 C6FFCBC5C5FFC7C0C0FFC2B8B8FFA39698FF726468DC00000000000000000000 0000ACA2A3DEAC9C99FFC9BCBBFFDBCDCAFFF3E6E2FEFFFFFEFFF5EEECFFB9A7 A3FFF3EDEBFEF7F3F3FFA99998FFA49695FFB1A6A7E700000000000000000000 0000000000005F5054459C919391B7ADAFB4BBB2B2C3C0B5B6CFC0B6B7D2BBB2 B3D0BCB2B3C3BBB3B4B59D929592615156460000000000000000 } Layout = blGlyphRight OnClick = btnFieldsSearchTemplateClick ParentShowHint = False ShowHint = True TabOrder = 2 end object btnFieldsList: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtFieldsList AnchorSideRight.Control = edtFieldsName AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtFieldsList AnchorSideBottom.Side = asrBottom Left = 535 Height = 20 Top = 68 Width = 28 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnFieldsListClick TabOrder = 4 end end end object pmFields: TPopupMenu[2] left = 128 top = 304 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolbar.lfm������������������������������������������������������0000644�0001750�0000144�00000126371�12660674103�020524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsToolbar: TfrmOptionsToolbar Height = 573 Width = 850 ClientHeight = 573 ClientWidth = 850 OnEnter = FrameEnter DesignLeft = 79 DesignTop = 199 object gbGroupBox: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 101 Top = 0 Width = 838 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = 'Appearance' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 4 ClientHeight = 81 ClientWidth = 834 TabOrder = 0 object lblBarSize: TLabel AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 8 Height = 15 Top = 20 Width = 42 Caption = '&Bar size:' FocusControl = trbBarSize ParentColor = False end object lblBarSizeValue: TLabel AnchorSideLeft.Control = lblBarSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbBarSize AnchorSideTop.Side = asrCenter Left = 52 Height = 1 Top = 27 Width = 1 BorderSpacing.Left = 2 ParentColor = False end object trbBarSize: TTrackBar AnchorSideLeft.Control = lblBarSizeValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbGroupBox Left = 56 Height = 46 Top = 4 Width = 150 Frequency = 4 Max = 40 Min = 10 OnChange = trbBarSizeChange Position = 18 ScalePos = trRight BorderSpacing.Around = 3 Constraints.MinWidth = 40 TabOrder = 0 end object lblIconSize: TLabel AnchorSideLeft.Control = trbBarSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrCenter Left = 221 Height = 15 Top = 20 Width = 48 BorderSpacing.Left = 15 Caption = 'Icon si&ze:' FocusControl = trbIconSize ParentColor = False end object lblIconSizeValue: TLabel AnchorSideLeft.Control = lblIconSize AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrCenter Left = 271 Height = 1 Top = 27 Width = 1 BorderSpacing.Left = 2 ParentColor = False end object trbIconSize: TTrackBar AnchorSideLeft.Control = lblIconSizeValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbGroupBox AnchorSideBottom.Side = asrBottom Left = 275 Height = 46 Top = 4 Width = 150 Frequency = 4 Max = 32 Min = 8 OnChange = trbIconSizeChange Position = 16 ScalePos = trRight BorderSpacing.Around = 3 Constraints.MinWidth = 40 ParentShowHint = False ShowHint = True TabOrder = 1 end object cbFlatButtons: TCheckBox AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = trbIconSize AnchorSideTop.Side = asrBottom Left = 8 Height = 19 Top = 58 Width = 83 BorderSpacing.Top = 8 Caption = '&Flat buttons' Checked = True OnChange = cbFlatButtonsChange State = cbChecked TabOrder = 2 end object cbReportErrorWithCommands: TCheckBox AnchorSideLeft.Control = cbFlatButtons AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbFlatButtons Left = 103 Height = 19 Top = 58 Width = 177 BorderSpacing.Left = 12 Caption = 'Report errors with commands' OnChange = GenericSomethingChanged TabOrder = 3 end end object pnlFullToolbarButtons: TPanel[1] AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEditToolbar Left = 6 Height = 25 Top = 248 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 2 BorderSpacing.Bottom = 2 BevelOuter = bvNone ClientHeight = 25 ClientWidth = 838 TabOrder = 1 object pnlToolbarButtons: TPanel AnchorSideLeft.Control = pnlFullToolbarButtons AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = pnlFullToolbarButtons AnchorSideBottom.Side = asrBottom Left = 209 Height = 25 Top = 0 Width = 420 AutoSize = True BevelOuter = bvNone ChildSizing.HorizontalSpacing = 8 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclTopToBottomThenLeftToRight ChildSizing.ControlsPerLine = 1 ClientHeight = 25 ClientWidth = 420 TabOrder = 0 object btnInsertButton: TButton Left = 0 Height = 25 Top = 0 Width = 119 AutoSize = True Caption = '&Insert new button' OnClick = btnInsertButtonClick TabOrder = 0 end object btnCloneButton: TButton Left = 127 Height = 25 Top = 0 Width = 96 AutoSize = True Caption = 'C&lone button' OnClick = btnCloneButtonClick TabOrder = 1 end object btnDeleteButton: TButton Left = 231 Height = 25 Top = 0 Width = 59 AutoSize = True Caption = '&Delete' OnClick = btnDeleteButtonClick TabOrder = 2 end object btnOther: TButton Left = 355 Height = 25 Top = 0 Width = 65 AutoSize = True BorderSpacing.Left = 65 Caption = 'Other...' OnClick = btnOtherClick TabOrder = 3 end end end object pnlEditToolbar: TPanel[2] AnchorSideLeft.Control = gbGroupBox AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 6 Height = 292 Top = 275 Width = 838 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 BevelOuter = bvNone ClientHeight = 292 ClientWidth = 838 TabOrder = 2 object rgToolItemType: TRadioGroup AnchorSideLeft.Control = pnlEditToolbar AnchorSideTop.Control = pnlEditToolbar AnchorSideBottom.Control = pnlEditToolbar AnchorSideBottom.Side = asrBottom Left = 0 Height = 292 Top = 0 Width = 81 Anchors = [akTop, akLeft, akBottom] AutoFill = True AutoSize = True Caption = 'Button type' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 TabOrder = 0 end object pnlEditControls: TPanel AnchorSideLeft.Control = rgToolItemType AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlEditToolbar AnchorSideRight.Control = pnlEditToolbar AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlEditToolbar AnchorSideBottom.Side = asrBottom Left = 87 Height = 292 Top = 0 Width = 745 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Right = 6 BevelOuter = bvNone ChildSizing.TopBottomSpacing = 6 ChildSizing.VerticalSpacing = 10 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 292 ClientWidth = 745 TabOrder = 1 object lblIconFile: TLabel Left = 0 Height = 15 Top = 6 Width = 62 Alignment = taRightJustify Caption = 'Ico&n:' FocusControl = edtIconFileName ParentColor = False Visible = False end object edtIconFileName: TEdit AnchorSideLeft.Control = lblIconFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblIconFile AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenIcon Left = 64 Height = 23 Top = 2 Width = 617 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 OnChange = edtIconFileNameChange TabOrder = 0 Visible = False end object btnOpenIcon: TButton AnchorSideTop.Control = edtIconFileName AnchorSideRight.Control = btnRelativeIconFileName AnchorSideBottom.Control = edtIconFileName AnchorSideBottom.Side = asrBottom Left = 681 Height = 23 Top = 2 Width = 32 Anchors = [akTop, akRight, akBottom] Caption = '>>' OnClick = btnOpenIconClick TabOrder = 1 Visible = False end object lblToolTip: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 31 Width = 62 Alignment = taRightJustify Caption = '&Tooltip:' FocusControl = edtToolTip ParentColor = False Visible = False end object edtToolTip: TEdit AnchorSideLeft.Control = lblToolTip AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblToolTip AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnSuggestionTooltip Left = 64 Height = 23 Top = 27 Width = 602 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 2 Visible = False end object lblInternalCommand: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 56 Width = 62 Alignment = taRightJustify Caption = 'Co&mmand:' FocusControl = cbInternalCommand ParentColor = False Visible = False end object cbInternalCommand: TComboBox AnchorSideLeft.Control = lblInternalCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblInternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenCmdDlg Left = 64 Height = 23 Top = 52 Width = 585 HelpType = htKeyword Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 DropDownCount = 20 ItemHeight = 15 OnSelect = cbInternalCommandSelect Style = csDropDownList TabOrder = 3 Visible = False end object lblInternalParameters: TLabel Left = 0 Height = 100 Top = 81 Width = 62 Alignment = taRightJustify Caption = '&Parameters:' Constraints.MinHeight = 100 FocusControl = edtInternalParameters ParentColor = False Visible = False end object edtInternalParameters: TMemo AnchorSideLeft.Control = lblInternalParameters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblInternalParameters AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblInternalParameters AnchorSideBottom.Side = asrBottom Left = 64 Height = 100 Hint = 'Enter command parameters, each in a separate line. Press F1 to see help on parameters.' Top = 81 Width = 681 HelpType = htKeyword Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 2 ParentShowHint = False ScrollBars = ssAutoBoth ShowHint = True TabOrder = 4 Visible = False WordWrap = False end object lblExternalCommand: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 191 Width = 62 Alignment = taRightJustify Caption = 'Comman&d:' FocusControl = edtExternalCommand ParentColor = False Visible = False end object edtExternalCommand: TEdit AnchorSideLeft.Control = lblExternalCommand AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnOpenFile Left = 64 Height = 23 Top = 187 Width = 617 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 5 Visible = False end object btnOpenFile: TButton AnchorSideTop.Control = edtExternalCommand AnchorSideRight.Control = btnRelativeExternalCommand AnchorSideBottom.Control = edtExternalCommand AnchorSideBottom.Side = asrBottom Left = 681 Height = 23 Top = 187 Width = 32 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnOpenFileClick TabOrder = 6 Visible = False end object lblExternalParameters: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 216 Width = 62 Alignment = taRightJustify Caption = 'Parameter&s:' FocusControl = edtExternalParameters ParentColor = False Visible = False end object edtExternalParameters: TEdit AnchorSideLeft.Control = lblExternalParameters AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExternalParameters AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnParametersHelper Left = 64 Height = 23 Top = 212 Width = 649 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 7 Visible = False end object lblStartPath: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 241 Width = 62 Alignment = taRightJustify Caption = 'Start pat&h:' FocusControl = edtStartPath ParentColor = False Visible = False end object edtStartPath: TEdit AnchorSideLeft.Control = lblStartPath AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblStartPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnStartPath Left = 64 Height = 23 Top = 237 Width = 617 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 2 MaxLength = 259 TabOrder = 8 Visible = False end object lblHotkey: TLabel AnchorSideTop.Side = asrCenter Left = 0 Height = 15 Top = 266 Width = 62 Alignment = taRightJustify Caption = 'Hot key:' ParentColor = False Visible = False end object lblHotkeyValue: TLabel AnchorSideLeft.Control = lblHotkey AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey Left = 64 Height = 1 Top = 266 Width = 1 BorderSpacing.Left = 2 BorderSpacing.Right = 10 ParentColor = False Visible = False end object btnEditHotkey: TButton AnchorSideLeft.Control = lblHotkeyValue AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey AnchorSideTop.Side = asrCenter Left = 75 Height = 25 Top = 261 Width = 85 AutoSize = True BorderSpacing.Left = 2 Caption = 'Edit hot&key' OnClick = btnEditHotkeyClick TabOrder = 9 Visible = False end object btnRemoveHotkey: TButton AnchorSideLeft.Control = btnEditHotkey AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblHotkey AnchorSideTop.Side = asrCenter Left = 162 Height = 25 Top = 261 Width = 108 AutoSize = True BorderSpacing.Left = 2 Caption = 'Remove hotke&y' OnClick = btnRemoveHotKeyClick TabOrder = 10 Visible = False end object btnRelativeExternalCommand: TSpeedButton AnchorSideTop.Control = edtExternalCommand AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtExternalCommand AnchorSideBottom.Side = asrBottom Left = 713 Height = 23 Top = 187 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeExternalCommandClick end object btnRelativeIconFileName: TSpeedButton AnchorSideTop.Control = edtIconFileName AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtIconFileName AnchorSideBottom.Side = asrBottom Left = 713 Height = 23 Top = 2 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeIconFileNameClick end object btnStartPath: TButton AnchorSideTop.Control = edtStartPath AnchorSideRight.Control = btnRelativeStartPath AnchorSideBottom.Control = edtStartPath AnchorSideBottom.Side = asrBottom Left = 681 Height = 23 Top = 237 Width = 32 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnStartPathClick TabOrder = 11 Visible = False end object btnRelativeStartPath: TSpeedButton AnchorSideTop.Control = edtStartPath AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtStartPath AnchorSideBottom.Side = asrBottom Left = 713 Height = 23 Top = 237 Width = 32 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } Visible = False OnClick = btnRelativeStartPathClick end object btnOpenCmdDlg: TButton AnchorSideLeft.Control = cbInternalCommand AnchorSideTop.Control = cbInternalCommand AnchorSideRight.Control = lblHelpOnInternalCommand AnchorSideBottom.Control = cbInternalCommand AnchorSideBottom.Side = asrBottom Left = 652 Height = 23 Top = 52 Width = 65 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 4 Caption = 'Select' OnClick = btnOpenCmdDlgClick TabOrder = 12 Visible = False end object lblHelpOnInternalCommand: TLabel AnchorSideTop.Control = lblInternalCommand AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom Cursor = crHandPoint Left = 720 Height = 15 Top = 56 Width = 25 Anchors = [akTop, akRight] BorderSpacing.Left = 3 Caption = 'Help' Font.Style = [fsUnderline] ParentColor = False ParentFont = False Visible = False OnClick = lblHelpOnInternalCommandClick end object btnSuggestionTooltip: TButton AnchorSideTop.Control = edtToolTip AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edtToolTip AnchorSideBottom.Side = asrBottom Left = 669 Height = 23 Hint = 'Have DC suggest the tooltip based on button type, command and parameters' Top = 27 Width = 76 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Left = 3 BorderSpacing.InnerBorder = 4 Caption = 'Suggest' OnClick = btnSuggestionTooltipClick TabOrder = 13 Visible = False end object btnParametersHelper: TSpeedButton AnchorSideTop.Control = lblExternalParameters AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlEditControls AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 713 Height = 23 Top = 212 Width = 32 Anchors = [akTop, akRight] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF000000 0033000000000000000000000000000000000000000000000000000000000000 00070000003300000033000000330000000700000000FFFFFF00FFFFFF00BB87 47FF000000330000000000000000000000000000000000000000000000005C43 2349BB8747FFBB8747FFBB8747FF5C43234900000000FFFFFF00FFFFFF00BB87 47FFBB8747FF000000330000000000000000000000000000000000000000B482 44DDBB8747FF00000000BB8747FFB48244DD00000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF0000003300000000000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 000000000000BB8747FFBB8747FF00000033000000000000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 00000000000000000000BB8747FFBB8747FF000000330000000000000000BB87 47FFBB8747FF00000000BB8747FFBB8747FF00000000FFFFFF00FFFFFF000000 0000000000000000000000000000BB8747FFBB8747FF0000003300000000BA86 47D4BB8747FF00000033BB8747FFBA8647D600000000FFFFFF00FFFFFF000000 000000000000000000000000000000000000BB8747FFBB8747FF00000033BB87 4719BB8747FFBB8747FFBB8747FFBB87472400000000FFFFFF00FFFFFF000000 00000000000700000033000000330000003300000005BB8747FFBB8747FF0000 00330000000000000000000000000000000000000000FFFFFF00FFFFFF000000 00005C432349BB8747FFBB8747FFBB8747FF4A351C3F00000000BB8747FFBB87 47FF0000003300000000000000000000000000000000FFFFFF00FFFFFF000000 0000B48244DDBB8747FF00000000BB8747FFB48244DC0000000000000000BB87 47FFBB8747FF00000033000000000000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 0000BB8747FFBB8747FF000000330000000000000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 000000000000BB8747FFBB8747FF0000003300000000FFFFFF00FFFFFF000000 0000BB8747FFBB8747FF00000000BB8747FFBB8747FF00000000000000000000 00000000000000000000BB8747FFBB8747FF00000033FFFFFF00FFFFFF000000 0000BA8647D6BB8747FF00000033BB8747FFBA8647D600000000000000000000 0000000000000000000000000000BB8747FFBB8747FFFFFFFF00FFFFFF000000 0000BB874724BB8747FFBB8747FFBB8747FFBB87472400000000000000000000 000000000000000000000000000000000000BB8747FFFFFFFF00 } Visible = False OnClick = btnParametersHelperClick end end end object pnToolbars: TPanel[3] AnchorSideLeft.Control = gbGroupBox AnchorSideTop.Control = gbGroupBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbGroupBox AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlFullToolbarButtons Left = 6 Height = 143 Top = 103 Width = 838 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 2 ParentColor = False TabOrder = 3 end object OpenDialog: TOpenDialog[4] Filter = 'DC Toolbar files|*.toolbar|.xml Config files|*.xml|TC Toolbar files|*.BAR|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 48 top = 104 end object pmPathHelper: TPopupMenu[5] left = 784 top = 232 end object pmInsertButtonMenu: TPopupMenu[6] left = 256 top = 176 object miAddSeparatorSubMenu: TMenuItem Caption = 'for a separator' object miSeparatorFirstItem: TMenuItem Tag = 17 Caption = 'as first element' OnClick = miInsertButtonClick end object miSeparatorPriorCurrent: TMenuItem Tag = 18 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miSeparatorAfterCurrent: TMenuItem Tag = 19 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miSeparatorLastElement: TMenuItem Tag = 20 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddInternalCommandSubMenu: TMenuItem Caption = 'for an internal command' object miInternalCommandFirstElement: TMenuItem Tag = 33 Caption = 'as first element' OnClick = miInsertButtonClick end object miInternalCommandPriorCurrent: TMenuItem Tag = 34 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miInternalCommandAfterCurrent: TMenuItem Tag = 35 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miInternalCommandLastElement: TMenuItem Tag = 36 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddExternalCommandSubMenu: TMenuItem Caption = 'for an external command' object miExternalCommandFirstElement: TMenuItem Tag = 49 Caption = 'as first element' OnClick = miInsertButtonClick end object miExternalCommandPriorCurrent: TMenuItem Tag = 50 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miExternalCommandAfterCurrent: TMenuItem Tag = 51 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miExternalCommandLastElement: TMenuItem Tag = 52 Caption = 'as last element' OnClick = miInsertButtonClick end end object miAddSubToolBarSubMenu: TMenuItem Caption = 'for a sub-tool bar' object miSubToolBarFirstElement: TMenuItem Tag = 65 Caption = 'as first element' OnClick = miInsertButtonClick end object miSubToolBarPriorCurrent: TMenuItem Tag = 66 Caption = 'just prior current selection' OnClick = miInsertButtonClick end object miSubToolBarAfterCurrent: TMenuItem Tag = 67 Caption = 'just after current selection' OnClick = miInsertButtonClick end object miSubToolBarLastElement: TMenuItem Tag = 68 Caption = 'as last element' OnClick = miInsertButtonClick end end end object pmOtherClickToolbar: TPopupMenu[7] left = 592 top = 176 object miAddAllCmds: TMenuItem Caption = 'Add toolbar with ALL DC commands' OnClick = miAddAllCmdsClick end object miSearchAndReplace: TMenuItem Caption = 'Search and replace...' object miSrcRplIconNames: TMenuItem Tag = 1 Caption = 'in all icon names...' OnClick = miSrcRplClick end object miSrcRplCommands: TMenuItem Tag = 2 Caption = 'in all commands...' OnClick = miSrcRplClick end object miSrcRplParameters: TMenuItem Tag = 4 Caption = 'in all parameters...' OnClick = miSrcRplClick end object miSrcRplStartPath: TMenuItem Tag = 8 Caption = 'in all start path...' OnClick = miSrcRplClick end object miSrcRplClickSeparator: TMenuItem Caption = '-' end object miSrcRplAllOfAll: TMenuItem Tag = 15 Caption = 'in all of all the above...' OnClick = miSrcRplClick end end object miSeparator1: TMenuItem Caption = '-' end object miExport: TMenuItem Caption = 'Export...' object miExportTop: TMenuItem Caption = 'Top toolbar...' object miExportTopToDCBar: TMenuItem Tag = 2 Caption = 'to a Toolbar File (.toolbar)' OnClick = miExportToAnythingClick end object miExportSeparator1: TMenuItem Caption = '-' end object miExportTopToTCIniKeep: TMenuItem Caption = 'to a "wincmd.ini" of TC (keep existing)' OnClick = miExportToAnythingClick end object miExportTopToTCIniNoKeep: TMenuItem Tag = 128 Caption = 'to a "wincmd.ini" of TC (erase existing)' OnClick = miExportToAnythingClick end object miExportSeparator2: TMenuItem Caption = '-' end object miExportTopToTCBarKeep: TMenuItem Tag = 1 Caption = 'to a TC .BAR file (keep existing)' OnClick = miExportToAnythingClick end object miExportTopToTCBarNoKeep: TMenuItem Tag = 129 Caption = 'to a TC .BAR file (erase existing)' OnClick = miExportToAnythingClick end end object miExportCurrent: TMenuItem Caption = 'Current toolbar...' object miExportCurrentToDCBar: TMenuItem Tag = 34 Caption = 'to a Toolbar File (.toolbar)' OnClick = miExportToAnythingClick end object miExportSeparator3: TMenuItem Caption = '-' end object miExportCurrentToTCIniKeep: TMenuItem Tag = 32 Caption = 'to a "wincmd.ini" of TC (keep existing)' OnClick = miExportToAnythingClick end object miExportCurrentToTCIniNoKeep: TMenuItem Tag = 160 Caption = 'to a "wincmd.ini" of TC (erase existing)' OnClick = miExportToAnythingClick end object miExportSeparator4: TMenuItem Caption = '-' end object miExportCurrentToTCBarKeep: TMenuItem Tag = 33 Caption = 'to a TC .BAR file (keep existing)' OnClick = miExportToAnythingClick end object miExportCurrentToTCBarNoKeep: TMenuItem Tag = 161 Caption = 'to a TC .BAR file (erase existing)' OnClick = miExportToAnythingClick end end end object miImport: TMenuItem Caption = 'Import...' object miImportDCBAR: TMenuItem Caption = 'from a Toolbar File (.toolbar)' object miImportDCBARReplaceTop: TMenuItem Tag = 130 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator8: TMenuItem Caption = '-' end object miImportDCBARAddTop: TMenuItem Tag = 2 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportDCBARAddMenuTop: TMenuItem Tag = 18 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator9: TMenuItem Caption = '-' end object miImportDCBARAddCurrent: TMenuItem Tag = 34 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportDCBARAddMenuCurrent: TMenuItem Tag = 50 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end object miImportSeparator: TMenuItem Caption = '-' end object miImportTCINI: TMenuItem Caption = 'from "wincmd.ini" of TC...' object miImportTCINIReplaceTop: TMenuItem Tag = 128 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator6: TMenuItem Caption = '-' end object miImportTCINIAddTop: TMenuItem Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportTCINIAddMenuTop: TMenuItem Tag = 16 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator7: TMenuItem Caption = '-' end object miImportTCINIAddCurrent: TMenuItem Tag = 32 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportTCINIAddMenuCurrent: TMenuItem Tag = 48 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end object miImportTCBAR: TMenuItem Caption = 'from a single TC .BAR file' object miImportTCBARReplaceTop: TMenuItem Tag = 129 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator10: TMenuItem Caption = '-' end object miImportTCBARAddTop: TMenuItem Tag = 1 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportTCBARAddMenuTop: TMenuItem Tag = 17 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator11: TMenuItem Caption = '-' end object miImportTCBARAddCurrent: TMenuItem Tag = 33 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportTCBARAddMenuCurrent: TMenuItem Tag = 49 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end end object miSeparator2: TMenuItem Caption = '-' end object miBackup: TMenuItem Caption = 'Backup...' object miExportTopToBackup: TMenuItem Tag = 3 Caption = 'Save a backup of Toolbar' OnClick = miExportToAnythingClick end object miImportBackup: TMenuItem Caption = 'Restore a backup of Toolbar' object miImportBackupReplaceTop: TMenuItem Tag = 131 Caption = 'to replace top toolbar' OnClick = miImportFromAnythingClick end object miSeparator13: TMenuItem Caption = '-' end object miImportBackupAddTop: TMenuItem Tag = 3 Caption = 'to add to top toolbar' OnClick = miImportFromAnythingClick end object miImportBackupAddMenuTop: TMenuItem Tag = 19 Caption = 'to add to a new toolbar to top toolbar' OnClick = miImportFromAnythingClick end object miSeparator14: TMenuItem Caption = '-' end object miImportBackupAddCurrent: TMenuItem Tag = 35 Caption = 'to add to current toolbar' OnClick = miImportFromAnythingClick end object miImportBackupAddMenuCurrent: TMenuItem Tag = 51 Caption = 'to add to a new toolbar to current toolbar' OnClick = miImportFromAnythingClick end end end end object SaveDialog: TSaveDialog[8] DefaultExt = '.hotlist' Filter = 'DC Toolbar files|*.toolbar|TC Toolbar files|*.BAR|Any files|*.*' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 152 top = 104 end object ReplaceDialog: TReplaceDialog[9] Options = [frHideWholeWord, frHideUpDown, frDisableUpDown, frDisableWholeWord, frHideEntireScope, frHidePromptOnReplace] left = 288 top = 112 end object pmparameteresHelper: TPopupMenu[10] left = 687 top = 483 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfileassoc.lrt����������������������������������������������������0000644�0001750�0000144�00000005350�12532643273�021050� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION=Actions TFRMOPTIONSFILEASSOC.LBACTIONS.HINT=Actions may be sorted by drag & drop TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION=&Up TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION=&Down TFRMOPTIONSFILEASSOC.BTNINSERTACT.CAPTION=Insert TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION=Add TFRMOPTIONSFILEASSOC.BTNCLONEACT.CAPTION=Clone TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION=Remo&ve TFRMOPTIONSFILEASSOC.GBICON.CAPTION=Icon TFRMOPTIONSFILEASSOC.SBTNICON.HINT=Click me to change icon! TFRMOPTIONSFILEASSOC.GBEXTS.HINT=Can be sorted by drag & drop TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION=Extensions TFRMOPTIONSFILEASSOC.LBEXTS.HINT=Extensions may be sorted by drag & drop TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION=Edit TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION=Insert TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION=&Add TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION=Re&move TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION=File types TFRMOPTIONSFILEASSOC.LBFILETYPES.HINT=File types may be sorted by drag & drop TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION=A&dd TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION=&Remove TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION=R&ename TFRMOPTIONSFILEASSOC.GBACTIONDESCRIPTION.CAPTION=Action description: TFRMOPTIONSFILEASSOC.EDBACTIONNAME.HINT=Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION=Action name: TFRMOPTIONSFILEASSOC.FNECOMMAND.HINT=Command to execute. Long filename with space should be quoted. TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION=&Command: TFRMOPTIONSFILEASSOC.EDTPARAMS.HINT=Parameter to pass to the command. Long filename with spaces should be quoted. TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION=Parameter&s: TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION=Start pat&h: TFRMOPTIONSFILEASSOC.DESTARTPATH.HINT=Starting path of the command. Never quote this string. TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS1.CAPTION=Start path: TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION=Open TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION=View TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION=Edit TFRMOPTIONSFILEASSOC.MICUSTOM.CAPTION=Custom TFRMOPTIONSFILEASSOC.MENUITEM1.CAPTION=- TFRMOPTIONSFILEASSOC.MIOPENWITH.CAPTION=Open with... TFRMOPTIONSFILEASSOC.MIVIEWWITH.CAPTION=View with... TFRMOPTIONSFILEASSOC.MIEDITWITH.CAPTION=Edit with... TFRMOPTIONSFILEASSOC.MENUITEM3.CAPTION=Custom with... TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION=Open in Viewer TFRMOPTIONSFILEASSOC.MIINTERNALVIEWER.CAPTION=Open in Internal Viewer TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION=Open in Editor TFRMOPTIONSFILEASSOC.MIINTERNALEDITOR.CAPTION=Open in Internal Editor TFRMOPTIONSFILEASSOC.MISEPARATOR.CAPTION=- TFRMOPTIONSFILEASSOC.MISHELL.CAPTION=Run in terminal TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION=Get output from command ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsplugins.lrt������������������������������������������������������0000644�0001750�0000144�00000003011�12020403374�020535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSPLUGINS.TSWCX.CAPTION=Pac&ker plugins (.WCX) TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION=Pack&er plugins are used to work with archives TFRMOPTIONSPLUGINS.TSWFX.CAPTION=F&ile system plugins (.WFX) TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION=Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC. TFRMOPTIONSPLUGINS.TSWDX.CAPTION=Content pl&ugins (.WDX) TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION=Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool TFRMOPTIONSPLUGINS.TSDSX.CAPTION=&Search plugins (.DSX) TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION=Searc&h plugins allow to use alternative search algorithms or external tools (like "locate", etc.) TFRMOPTIONSPLUGINS.TSWLX.CAPTION=&Viewer plugins (.WLX) TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION=Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q) TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION=Active TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION=Plugin TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION=Registered for TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION=File name TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION=A&dd TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION=E&nable TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION=&Remove TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION=&Tweak TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION=Con&figure �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdragdrop.lrt�����������������������������������������������������0000644�0001750�0000144�00000001702�12454457622�020703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSDRAGDROP.CBSHOWCONFIRMATIONDIALOG.CAPTION=&Show confirmation dialog after drop TFRMOPTIONSDRAGDROP.GBTEXTDRAGANDDROPRELATEDOPTIONS.CAPTION=When drag && dropping text into panels: TFRMOPTIONSDRAGDROP.LBLMOSTDESIREDTEXTFORMAT1.CAPTION=Place the most desired format on top of list (use dag && drop): TFRMOPTIONSDRAGDROP.LBLMOSTDESIREDTEXTFORMAT2.CAPTION=(if the most desired is not present, we'll take second one and so on) TFRMOPTIONSDRAGDROP.CBDRAGANDDROPASKFORMATEACHTIME.CAPTION=From all the supported formats, ask which one to use every time TFRMOPTIONSDRAGDROP.CBDRAGANDDROPTEXTAUTOFILENAME.CAPTION=When dropping text, generate filename automatically (otherwise will prompt the user) TFRMOPTIONSDRAGDROP.CBDRAGANDDROPSAVEUNICODETEXTINUFT8.CAPTION=When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise) TFRMOPTIONSDRAGDROP.LBLWARNINGFORASKFORMAT.CAPTION=(will not work with some source application, so try to uncheck if problem) ��������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionslayout.lfm�������������������������������������������������������0000644�0001750�0000144�00000015606�12515236234�020373� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsLayout: TfrmOptionsLayout Height = 550 Width = 784 ClientHeight = 550 ClientWidth = 784 DesignLeft = 276 DesignTop = 44 object gbScreenLayout: TGroupBox[0] AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 6 Height = 427 Top = 6 Width = 772 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = ' Screen layout ' ChildSizing.LeftRightSpacing = 12 ChildSizing.TopBottomSpacing = 6 ClientHeight = 409 ClientWidth = 768 TabOrder = 0 object cbShowMainMenu: TCheckBox Left = 12 Height = 17 Top = 6 Width = 98 Caption = 'Show &main menu' TabOrder = 0 end object cbShowMainToolBar: TCheckBox AnchorSideTop.Control = cbShowMainMenu AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 25 Width = 98 BorderSpacing.Top = 2 Caption = 'Show &button bar' OnChange = cbShowMainToolBarChange TabOrder = 1 end object cbShowDiskPanel: TCheckBox AnchorSideTop.Control = cbFlatToolBar AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 63 Width = 111 BorderSpacing.Top = 2 Caption = 'Show &drive buttons' OnChange = cbShowDiskPanelChange TabOrder = 3 end object cbShowDrivesListButton: TCheckBox AnchorSideTop.Control = cbFlatDiskPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 120 Width = 127 BorderSpacing.Top = 2 Caption = 'Show drives list bu&tton' TabOrder = 6 end object cbShowCurDir: TCheckBox AnchorSideTop.Control = cbShowTabs AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 215 Width = 128 BorderSpacing.Top = 2 Caption = 'Show current director&y' TabOrder = 11 end object cbShowTabHeader: TCheckBox AnchorSideTop.Control = cbShowCurDir AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 234 Width = 121 BorderSpacing.Top = 2 Caption = 'S&how tabstop header' TabOrder = 12 end object cbShowStatusBar: TCheckBox AnchorSideTop.Control = cbShowTabHeader AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 253 Width = 96 BorderSpacing.Top = 2 Caption = 'Show &status bar' TabOrder = 13 end object cbShowCmdLine: TCheckBox AnchorSideTop.Control = cbShowStatusBar AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 272 Width = 111 BorderSpacing.Top = 2 Caption = 'Show command l&ine' TabOrder = 14 end object cbShowKeysPanel: TCheckBox AnchorSideTop.Control = cbShowCmdLine AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 291 Width = 146 BorderSpacing.Top = 2 Caption = 'Show function &key buttons' TabOrder = 15 end object cbFlatDiskPanel: TCheckBox AnchorSideLeft.Control = cbTwoDiskPanels AnchorSideTop.Control = cbTwoDiskPanels AnchorSideTop.Side = asrBottom Left = 28 Height = 17 Top = 101 Width = 76 BorderSpacing.Top = 2 Caption = '&Flat buttons' Enabled = False TabOrder = 5 end object cbTwoDiskPanels: TCheckBox AnchorSideLeft.Control = cbShowDiskPanel AnchorSideTop.Control = cbShowDiskPanel AnchorSideTop.Side = asrBottom Left = 28 Height = 17 Top = 82 Width = 313 BorderSpacing.Left = 16 BorderSpacing.Top = 2 Caption = 'Show two drive button bars (fi&xed width, above file windows)' Enabled = False TabOrder = 4 end object cbShowTabs: TCheckBox AnchorSideTop.Control = cbFreespaceInd AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 196 Width = 99 BorderSpacing.Top = 2 Caption = 'Sho&w folder tabs' TabOrder = 10 end object cbFlatInterface: TCheckBox AnchorSideTop.Control = cbShowKeysPanel AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 310 Width = 82 BorderSpacing.Top = 2 Caption = 'Flat i&nterface' TabOrder = 16 end object cbFlatToolBar: TCheckBox AnchorSideLeft.Control = cbShowMainToolBar AnchorSideTop.Control = cbShowMainToolBar AnchorSideTop.Side = asrBottom Left = 28 Height = 17 Top = 44 Width = 76 BorderSpacing.Left = 16 BorderSpacing.Top = 2 Caption = 'Flat b&uttons' Enabled = False TabOrder = 2 end object cbLogWindow: TCheckBox AnchorSideTop.Control = cbFlatInterface AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 329 Width = 100 BorderSpacing.Top = 2 Caption = 'Show lo&g window' TabOrder = 17 end object cbTermWindow: TCheckBox AnchorSideTop.Control = cbLogWindow AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 348 Width = 124 BorderSpacing.Top = 2 Caption = 'Show te&rminal window' OnChange = cbTermWindowChange TabOrder = 18 end object cbFreespaceInd: TCheckBox AnchorSideTop.Control = cbShowShortDriveFreeSpace AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 177 Width = 209 BorderSpacing.Top = 2 Caption = 'Show fr&ee space indicator on drive label' TabOrder = 9 end object cbProgInMenuBar: TCheckBox AnchorSideTop.Control = cbTermWindow AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 367 Width = 190 BorderSpacing.Top = 2 Caption = 'Show common progress in menu bar' TabOrder = 19 end object cbPanelOfOperations: TCheckBox AnchorSideTop.Control = cbProgInMenuBar AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 386 Width = 205 BorderSpacing.Top = 2 Caption = 'Show panel of operation in background' TabOrder = 20 end object cbShowDriveFreeSpace: TCheckBox AnchorSideTop.Control = cbShowDrivesListButton AnchorSideTop.Side = asrBottom Left = 12 Height = 17 Top = 139 Width = 123 BorderSpacing.Top = 2 Caption = 'Show free s&pace label' OnChange = cbShowDriveFreeSpaceChange TabOrder = 7 end object cbShowShortDriveFreeSpace: TCheckBox AnchorSideLeft.Control = cbFlatDiskPanel AnchorSideTop.Control = cbShowDriveFreeSpace AnchorSideTop.Side = asrBottom Left = 28 Height = 17 Top = 158 Width = 151 BorderSpacing.Top = 2 Caption = 'Show short free space &label' TabOrder = 8 end end end ��������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsconfiguration.pas������������������������������������������������0000644�0001750�0000144�00000012560�12460221267�021725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Configuration options page Copyright (C) 2006-2011 Koblov Alexander (Alexx2000@mail.ru) 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 fOptionsConfiguration; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fOptionsFrame, StdCtrls, Buttons, ExtCtrls; type { TfrmOptionsConfiguration } TfrmOptionsConfiguration = class(TOptionsEditor) btnConfigApply: TBitBtn; btnConfigEdit: TBitBtn; cbCmdLineHistory: TCheckBox; cbDirHistory: TCheckBox; cbFileMaskHistory: TCheckBox; chkSaveConfiguration: TCheckBox; chkSearchReplaceHistory: TCheckBox; gbLocConfigFiles: TGroupBox; gbSaveOnExit: TGroupBox; lblCmdLineConfigDir: TLabel; gbSortOrderConfigurationOption: TRadioGroup; rbProgramDir: TRadioButton; rbUserHomeDir: TRadioButton; procedure btnConfigApplyClick(Sender: TObject); procedure btnConfigEditClick(Sender: TObject); procedure chkSaveConfigurationChange(Sender: TObject); procedure gbSortOrderConfigurationOptionClick(Sender: TObject); protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; implementation {$R *.lfm} uses Forms, DCStrUtils, uGlobs, uGlobsPaths, uShowForm, uOSUtils, uLng, fOptions; { TfrmOptionsConfiguration } procedure TfrmOptionsConfiguration.btnConfigApplyClick(Sender: TObject); begin if LoadConfig then // force reloading config from file begin LoadGlobs; OptionsDialog.LoadSettings; btnConfigApply.Enabled:= False; end else begin gSaveConfiguration := False; Application.Terminate; end; end; procedure TfrmOptionsConfiguration.btnConfigEditClick(Sender: TObject); begin if Assigned(gIni) then ShowEditorByGlob(gpCfgDir + 'doublecmd.ini') else ShowEditorByGlob(gpCfgDir + 'doublecmd.xml'); btnConfigApply.Enabled:= True; end; procedure TfrmOptionsConfiguration.chkSaveConfigurationChange(Sender: TObject); begin cbDirHistory.Enabled:= chkSaveConfiguration.Checked; cbCmdLineHistory.Enabled:= chkSaveConfiguration.Checked; cbFileMaskHistory.Enabled:= chkSaveConfiguration.Checked; chkSearchReplaceHistory.Enabled := chkSaveConfiguration.Checked; end; procedure TfrmOptionsConfiguration.gbSortOrderConfigurationOptionClick(Sender: TObject); begin //Exceptionnally for THIS setting, let's apply it immediately, even before quiting since the effect is... in the configuration area, just where we are at this moment! gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(gbSortOrderConfigurationOption.ItemIndex); SortConfigurationOptionsOnLeftTree; end; class function TfrmOptionsConfiguration.GetIconIndex: Integer; begin Result := 11; end; class function TfrmOptionsConfiguration.GetTitle: String; begin Result := rsOptionsEditorConfiguration; end; procedure TfrmOptionsConfiguration.Init; begin if gpCmdLineCfgDir = '' then begin rbProgramDir.Caption:= rbProgramDir.Caption + ' - [' + IncludeTrailingPathDelimiter(gpGlobalCfgDir) + ']'; rbUserHomeDir.Caption:= rbUserHomeDir.Caption + ' - [' + IncludeTrailingPathDelimiter(GetAppConfigDir) + ']'; end else begin rbProgramDir.Visible := False; rbProgramDir.Enabled := False; rbUserHomeDir.Visible := False; rbUserHomeDir.Enabled := False; lblCmdLineConfigDir.Visible := True; lblCmdLineConfigDir.Caption := lblCmdLineConfigDir.Caption + ' - [' + IncludeTrailingPathDelimiter(gpCmdLineCfgDir) + ']'; end; ParseLineToList(rsOptConfigSortOrder, gbSortOrderConfigurationOption.Items); end; procedure TfrmOptionsConfiguration.Load; begin if gUseConfigInProgramDirNew then rbProgramDir.Checked := True else rbUserHomeDir.Checked := True; chkSaveConfiguration.Checked:= gSaveConfiguration; chkSearchReplaceHistory.Checked:= gSaveSearchReplaceHistory; cbDirHistory.Checked := gSaveDirHistory; cbCmdLineHistory.Checked := gSaveCmdLineHistory; cbFileMaskHistory.Checked := gSaveFileMaskHistory; gbSortOrderConfigurationOption.ItemIndex:=Integer(gSortOrderOfConfigurationOptionsTree); end; function TfrmOptionsConfiguration.Save: TOptionsEditorSaveFlags; begin Result := []; gUseConfigInProgramDirNew := rbProgramDir.Checked; gSaveConfiguration := chkSaveConfiguration.Checked; gSaveSearchReplaceHistory := chkSearchReplaceHistory.Checked; gSaveDirHistory := cbDirHistory.Checked; gSaveCmdLineHistory := cbCmdLineHistory.Checked; gSaveFileMaskHistory := cbFileMaskHistory.Checked; gSortOrderOfConfigurationOptionsTree := TSortConfigurationOptions(gbSortOrderConfigurationOption.ItemIndex); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionstoolbar.lrt������������������������������������������������������0000644�0001750�0000144�00000016442�12602312514�020533� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPTIONSTOOLBAR.GBGROUPBOX.CAPTION=Appearance TFRMOPTIONSTOOLBAR.LBLBARSIZE.CAPTION=&Bar size: TFRMOPTIONSTOOLBAR.LBLICONSIZE.CAPTION=Icon si&ze: TFRMOPTIONSTOOLBAR.CBFLATBUTTONS.CAPTION=&Flat buttons TFRMOPTIONSTOOLBAR.CBREPORTERRORWITHCOMMANDS.CAPTION=Report errors with commands TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION=&Insert new button TFRMOPTIONSTOOLBAR.BTNCLONEBUTTON.CAPTION=C&lone button TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION=&Delete TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION=Other... TFRMOPTIONSTOOLBAR.RGTOOLITEMTYPE.CAPTION=Button type TFRMOPTIONSTOOLBAR.LBLICONFILE.CAPTION=Ico&n: TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION=>> TFRMOPTIONSTOOLBAR.LBLTOOLTIP.CAPTION=&Tooltip: TFRMOPTIONSTOOLBAR.LBLINTERNALCOMMAND.CAPTION=Co&mmand: TFRMOPTIONSTOOLBAR.LBLINTERNALPARAMETERS.CAPTION=&Parameters: TFRMOPTIONSTOOLBAR.EDTINTERNALPARAMETERS.HINT=Enter command parameters, each in a separate line. Press F1 to see help on parameters. TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION=Comman&d: TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION=>> TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION=Parameter&s: TFRMOPTIONSTOOLBAR.LBLSTARTPATH.CAPTION=Start pat&h: TFRMOPTIONSTOOLBAR.LBLHOTKEY.CAPTION=Hot key: TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION=Edit hot&key TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION=Remove hotke&y TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION=>> TFRMOPTIONSTOOLBAR.BTNOPENCMDDLG.CAPTION=Select TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION=Help TFRMOPTIONSTOOLBAR.BTNSUGGESTIONTOOLTIP.HINT=Have DC suggest the tooltip based on button type, command and parameters TFRMOPTIONSTOOLBAR.BTNSUGGESTIONTOOLTIP.CAPTION=Suggest TFRMOPTIONSTOOLBAR.MIADDSEPARATORSUBMENU.CAPTION=for a separator TFRMOPTIONSTOOLBAR.MISEPARATORFIRSTITEM.CAPTION=as first element TFRMOPTIONSTOOLBAR.MISEPARATORPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MISEPARATORAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MISEPARATORLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDINTERNALCOMMANDSUBMENU.CAPTION=for an internal command TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDEXTERNALCOMMANDSUBMENU.CAPTION=for an external command TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDSUBTOOLBARSUBMENU.CAPTION=for a sub-tool bar TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION=as first element TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION=just prior current selection TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION=just after current selection TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION=as last element TFRMOPTIONSTOOLBAR.MIADDALLCMDS.CAPTION=Add toolbar with ALL DC commands TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION=Search and replace... TFRMOPTIONSTOOLBAR.MISRCRPLICONNAMES.CAPTION=in all icon names... TFRMOPTIONSTOOLBAR.MISRCRPLCOMMANDS.CAPTION=in all commands... TFRMOPTIONSTOOLBAR.MISRCRPLPARAMETERS.CAPTION=in all parameters... TFRMOPTIONSTOOLBAR.MISRCRPLSTARTPATH.CAPTION=in all start path... TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION=- TFRMOPTIONSTOOLBAR.MISRCRPLALLOFALL.CAPTION=in all of all the above... TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION=Export... TFRMOPTIONSTOOLBAR.MIEXPORTTOP.CAPTION=Top toolbar... TFRMOPTIONSTOOLBAR.MIEXPORTTOPTODCBAR.CAPTION=to a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION=to a "wincmd.ini" of TC (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION=to a "wincmd.ini" of TC (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCBARKEEP.CAPTION=to a TC .BAR file (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCBARNOKEEP.CAPTION=to a TC .BAR file (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENT.CAPTION=Current toolbar... TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION=to a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION=to a "wincmd.ini" of TC (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION=to a "wincmd.ini" of TC (erase existing) TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION=- TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION=to a TC .BAR file (keep existing) TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION=to a TC .BAR file (erase existing) TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION=Import... TFRMOPTIONSTOOLBAR.MIIMPORTDCBAR.CAPTION=from a Toolbar File (.toolbar) TFRMOPTIONSTOOLBAR.MIIMPORTDCBARREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTDCBARADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINI.CAPTION=from "wincmd.ini" of TC... TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBAR.CAPTION=from a single TC .BAR file TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION=- TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION=Backup... TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOBACKUP.CAPTION=Save a backup of Toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUP.CAPTION=Restore a backup of Toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION=to replace top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION=to add to top toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION=to add to a new toolbar to top toolbar TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION=- TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION=to add to current toolbar TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION=to add to a new toolbar to current toolbar ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsdirectoryhotlist.lfm���������������������������������������������0000644�0001750�0000144�00000077261�12632644230�022475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsDirectoryHotlist: TfrmOptionsDirectoryHotlist Height = 658 Width = 730 ClientHeight = 658 ClientWidth = 730 Constraints.MinHeight = 520 Constraints.MinWidth = 600 ParentShowHint = False PopupMenu = pmTreeView ShowHint = True DesignLeft = 395 DesignTop = 7 object gbDirectoryHotlist: TGroupBox[0] Left = 6 Height = 646 Top = 6 Width = 718 Align = alClient BorderSpacing.Around = 6 Caption = 'Directory Hotlist (reorder by drag && drop)' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 626 ClientWidth = 714 Color = clForm Constraints.MinHeight = 460 Constraints.MinWidth = 548 ParentColor = False TabOrder = 0 object pnlClient: TPanel AnchorSideLeft.Control = gbDirectoryHotlist AnchorSideTop.Control = gbDirectoryHotlist AnchorSideRight.Control = gbDirectoryHotlist AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlBottom Left = 6 Height = 524 Top = 6 Width = 702 Anchors = [akTop, akLeft, akRight, akBottom] BevelOuter = bvNone ClientHeight = 524 ClientWidth = 702 TabOrder = 0 object tvDirectoryHotlist: TTreeView AnchorSideLeft.Control = pnlClient AnchorSideTop.Control = pnlClient AnchorSideRight.Control = gbHotlistOtherOptions AnchorSideBottom.Control = pnlClient AnchorSideBottom.Side = asrBottom Left = 0 Height = 524 Top = 0 Width = 382 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Right = 6 DefaultItemHeight = 18 DragMode = dmAutomatic HotTrack = True MultiSelect = True MultiSelectStyle = [msControlSelect, msShiftSelect, msVisibleOnly, msSiblingOnly] ParentColor = True PopupMenu = pmTreeView ReadOnly = True ScrollBars = ssAutoBoth SelectionColor = clBtnShadow TabOrder = 0 ToolTips = False OnDragDrop = tvDirectoryHotlistDragDrop OnDragOver = tvDirectoryHotlistDragOver OnEnter = tvDirectoryHotlistEnter OnExit = tvDirectoryHotlistExit OnSelectionChanged = tvDirectoryHotlistSelectionChanged Options = [tvoAllowMultiselect, tvoAutoItemHeight, tvoHideSelection, tvoHotTrack, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot] end object gbHotlistOtherOptions: TGroupBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rgWhereToAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 388 Height = 114 Top = 253 Width = 314 Anchors = [akTop, akRight] AutoSize = True Caption = 'Other options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 94 ClientWidth = 310 Constraints.MinWidth = 314 TabOrder = 3 object cbAddTarget: TCheckBox Left = 6 Height = 19 Top = 6 Width = 225 Caption = 'When adding directory, add also target' OnChange = GenericSomethingChanged TabOrder = 0 end object cbFullExpandTree: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbAddTarget AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 27 Width = 121 BorderSpacing.Top = 2 Caption = 'Always expand tree' OnChange = cbFullExpandTreeChange TabOrder = 1 end object cbShowPathInPopup: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbFullExpandTree AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 48 Width = 161 BorderSpacing.Top = 2 Caption = 'In popup, show [path also]' OnChange = GenericSomethingChanged TabOrder = 2 end object cbShowOnlyValidEnv: TCheckBox AnchorSideLeft.Control = cbAddTarget AnchorSideTop.Control = cbShowPathInPopup AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 69 Width = 223 BorderSpacing.Top = 2 Caption = 'Show only valid environment variables' OnChange = GenericSomethingChanged TabOrder = 3 end end object rgWhereToAdd: TRadioGroup AnchorSideLeft.Control = gbHotlistOtherOptions AnchorSideTop.Control = pnlButtons AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 388 Height = 89 Top = 164 Width = 314 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Top = 3 Caption = 'Addition from main panel:' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 69 ClientWidth = 310 Items.Strings = ( 'Add at beginning' 'Add at the end' 'Smart add' ) TabOrder = 2 end object pnlButtons: TPanel AnchorSideLeft.Control = gbHotlistOtherOptions AnchorSideTop.Control = pnlClient AnchorSideRight.Control = pnlClient AnchorSideRight.Side = asrBottom Left = 388 Height = 161 Top = 0 Width = 314 Anchors = [akTop, akLeft, akRight] BevelOuter = bvNone ClientHeight = 161 ClientWidth = 314 Color = clForm ParentColor = False TabOrder = 1 OnResize = pnlButtonsResize object btnInsert: TBitBtn Tag = 1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = btnExport Left = 8 Height = 25 Top = 0 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'Insert...' OnClick = btnActionClick TabOrder = 0 end object btnDelete: TBitBtn Tag = 3 AnchorSideTop.Control = btnAdd AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnBackup Left = 8 Height = 25 Top = 62 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Delete...' OnClick = btnActionClick TabOrder = 2 end object btnExport: TBitBtn Tag = 4 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 0 Width = 150 Anchors = [akTop, akRight] Caption = 'Export...' OnClick = btnActionClick TabOrder = 5 end object btnImport: TBitBtn Tag = 5 AnchorSideTop.Control = btnExport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 31 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 Caption = 'Import...' OnClick = btnActionClick TabOrder = 6 end object btnBackup: TBitBtn Tag = 6 AnchorSideTop.Control = btnImport AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 62 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 Caption = 'Backup...' OnClick = btnActionClick TabOrder = 7 end object btnMiscellaneous: TBitBtn Tag = 7 AnchorSideTop.Control = btnSort AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnHelp Left = 8 Height = 25 Top = 124 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Miscellaneous...' OnClick = btnActionClick TabOrder = 4 end object btnAdd: TBitBtn Tag = 2 AnchorSideTop.Control = btnInsert AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnImport Left = 8 Height = 25 Top = 31 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Add...' OnClick = btnActionClick TabOrder = 1 end object btnSort: TBitBtn Tag = 8 AnchorSideTop.Control = btnDelete AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnBackup Left = 8 Height = 25 Top = 93 Width = 150 Anchors = [akTop, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Sort...' OnClick = btnActionClick TabOrder = 3 end object btnHelp: TBitBtn AnchorSideTop.Control = btnMiscellaneous AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 164 Height = 25 Top = 124 Width = 150 Anchors = [akTop, akRight] Caption = 'Help' OnClick = btnHelpClick TabOrder = 8 end end end object pnlBottom: TPanel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbDirectoryHotlist AnchorSideBottom.Side = asrBottom Left = 6 Height = 90 Top = 530 Width = 702 Anchors = [akLeft, akRight, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 90 ClientWidth = 702 TabOrder = 1 object lbleditHotDirName: TLabeledEdit Tag = 1 AnchorSideTop.Control = pnlBottom Left = 104 Height = 23 Top = 9 Width = 598 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 9 BorderSpacing.Bottom = 6 EditLabel.AnchorSideTop.Control = lbleditHotDirName EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirName EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 66 EditLabel.Height = 15 EditLabel.Top = 13 EditLabel.Width = 35 EditLabel.Caption = 'Name:' EditLabel.ParentColor = False EditLabel.ParentFont = False LabelPosition = lpLeft ParentFont = False TabOrder = 0 OnEnter = lbleditHotDirEnter OnExit = lbleditHotDirExit OnKeyPress = lbleditHotDirKeyPress end object lbleditHotDirPath: TLabeledEdit Tag = 2 AnchorSideTop.Control = cbSortHotDirPath AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativePath Left = 104 Height = 23 Top = 38 Width = 449 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 2 EditLabel.Tag = 2 EditLabel.AnchorSideTop.Control = lbleditHotDirPath EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirPath EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 74 EditLabel.Height = 15 EditLabel.Top = 42 EditLabel.Width = 27 EditLabel.Caption = 'Path:' EditLabel.ParentColor = False EditLabel.ParentFont = False EditLabel.OnClick = anyRelativeAbsolutePathClick LabelPosition = lpLeft ParentFont = False TabOrder = 1 OnEnter = lbleditHotDirEnter OnExit = lbleditHotDirExit OnKeyPress = lbleditHotDirKeyPress OnMouseDown = lbleditHotDirMouseDown end object btnRelativePath: TSpeedButton Tag = 2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirPath AnchorSideRight.Control = cbSortHotDirPath AnchorSideBottom.Control = lbleditHotDirPath AnchorSideBottom.Side = asrBottom Left = 555 Height = 23 Hint = 'Some functions to select appropriate path' Top = 38 Width = 23 Anchors = [akTop, akRight, akBottom] BorderSpacing.Right = 2 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = anyRelativeAbsolutePathClick ParentFont = False end object cbSortHotDirPath: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirName AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 580 Height = 23 Top = 38 Width = 122 Anchors = [akTop, akRight] BorderSpacing.Bottom = 6 DropDownCount = 10 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'none' 'Name, a-z' 'Name, z-a' 'Ext, a-z' 'Ext, z-a' 'Size 9-0' 'Size 0-9' 'Date 9-0' 'Date 0-9' ) OnChange = cbSortHotDirPathChange ParentFont = False Style = csDropDownList TabOrder = 2 Text = 'Name, a-z' end object lbleditHotDirTarget: TLabeledEdit Tag = 3 AnchorSideTop.Control = cbSortHotDirTarget AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnRelativeTarget Left = 104 Height = 23 Top = 67 Width = 449 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 2 BorderSpacing.Right = 2 EditLabel.Tag = 3 EditLabel.AnchorSideTop.Control = lbleditHotDirTarget EditLabel.AnchorSideTop.Side = asrCenter EditLabel.AnchorSideRight.Control = lbleditHotDirTarget EditLabel.AnchorSideBottom.Side = asrBottom EditLabel.Left = 65 EditLabel.Height = 15 EditLabel.Top = 71 EditLabel.Width = 36 EditLabel.Caption = 'Target:' EditLabel.ParentColor = False EditLabel.ParentFont = False EditLabel.OnClick = anyRelativeAbsolutePathClick LabelPosition = lpLeft ParentFont = False TabOrder = 3 OnEnter = lbleditHotDirEnter OnExit = lbleditHotDirExit OnKeyPress = lbleditHotDirKeyPress OnMouseDown = lbleditHotDirMouseDown end object btnRelativeTarget: TSpeedButton Tag = 3 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbleditHotDirTarget AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbSortHotDirTarget AnchorSideBottom.Side = asrBottom Left = 555 Height = 23 Hint = 'Some functions to select appropriate target' Top = 67 Width = 23 Anchors = [akTop, akRight] BorderSpacing.Right = 2 Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } OnClick = anyRelativeAbsolutePathClick ParentFont = False end object cbSortHotDirTarget: TComboBox AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbSortHotDirPath AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 580 Height = 23 Top = 67 Width = 122 Anchors = [akTop, akRight] DropDownCount = 10 ItemHeight = 15 ItemIndex = 1 Items.Strings = ( 'none' 'Name, a-z' 'Name, z-a' 'Ext, a-z' 'Ext, z-a' 'Size 9-0' 'Size 0-9' 'Date 9-0' 'Date 0-9' ) OnChange = cbSortHotDirTargetChange ParentFont = False Style = csDropDownList TabOrder = 4 Text = 'Name, a-z' end end end object OpenDialog: TOpenDialog[1] DefaultExt = '.hotlist' Filter = 'Directory Hotlist files|*.hotlist|.xml Config files|*.xml|Any files|*.*' Options = [ofPathMustExist, ofFileMustExist, ofEnableSizing, ofViewDetail] left = 64 top = 240 end object pmHotDirTestMenu: TPopupMenu[2] left = 128 top = 296 object miHotDirTestMenu: TMenuItem Caption = 'HotDirTestMenu' end end object pmTreeView: TPopupMenu[3] Tag = 2 left = 56 top = 296 object miTypeTheDirectory3: TMenuItem Tag = 1 Caption = 'Insert directory I will type' ShortCut = 16504 OnClick = miInsertAddHotDirClick end object miTypeTheDirectory2: TMenuItem Tag = 2 Caption = 'Add directory I will type' ShortCut = 120 OnClick = miInsertAddHotDirClick end object miAddCopyOfSelected2: TMenuItem Tag = 7 Caption = 'Add a copy of the selected entry' ShortCut = 116 OnClick = miInsertAddHotDirClick end object miSeparator6: TMenuItem Caption = '-' end object miAddCommand2: TMenuItem Tag = 8 Caption = 'Add a command' OnClick = miInsertAddHotDirClick end object miAddSeparator2: TMenuItem Tag = 5 Caption = 'Add a separator' ShortCut = 121 OnClick = miInsertAddHotDirClick end object miAddSubmenu2: TMenuItem Tag = 6 Caption = 'Add sub-menu' ShortCut = 118 OnClick = miInsertAddHotDirClick end object miSeparator7: TMenuItem Caption = '-' end object miDeleteSelectedEntry2: TMenuItem Tag = 1 Caption = 'Delete selected item' ShortCut = 119 OnClick = miDeleteSelectedEntryClick end object miSeparator8: TMenuItem Caption = '-' end object miSortSingleGroup2: TMenuItem Tag = 1 Caption = 'Sort single group of item(s) only' ShortCut = 113 OnClick = miSortDirectoryHotlistClick end object miSeparator9: TMenuItem Caption = '-' end object miCutSelection: TMenuItem Caption = 'Cut' ShortCut = 16472 OnClick = miCutSelectionClick end object miPasteSelection: TMenuItem Caption = 'Paste' Enabled = False ShortCut = 16470 OnClick = miPasteSelectionClick end end object SaveDialog: TSaveDialog[4] DefaultExt = '.hotlist' Filter = 'Directory Hotlist|*.hotlist' Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing, ofViewDetail] left = 128 top = 240 end object pmInsertAddDirectoryHotlist: TPopupMenu[5] left = 64 top = 40 object miBrowseToDirectory: TMenuItem Tag = 1 Caption = 'directory I will browse to' OnClick = miInsertAddHotDirClick end object miTypeTheDirectory: TMenuItem Tag = 2 Caption = 'directory I will type' ShortCut = 16504 OnClick = miInsertAddHotDirClick end object miActiveFrameDirectory: TMenuItem Tag = 3 Caption = 'directory of the active frame' OnClick = miInsertAddHotDirClick end object miActiveInactiveFrameDirectory: TMenuItem Tag = 4 Caption = 'directories of the active && inactive frames' OnClick = miInsertAddHotDirClick end object miCurrentSelectedOrActiveDirectories: TMenuItem Tag = 9 Caption = 'current selected or active directories of active frame' OnClick = miInsertAddHotDirClick end object miAddCopyOfSelected: TMenuItem Tag = 7 Caption = 'a copy of the selected entry' OnClick = miInsertAddHotDirClick end object miSeparator1: TMenuItem Caption = '-' end object miAddCommand: TMenuItem Tag = 8 Caption = 'a command' OnClick = miInsertAddHotDirClick end object miAddSeparator: TMenuItem Tag = 5 Caption = 'a separator' ShortCut = 121 OnClick = miInsertAddHotDirClick end object miAddSubmenu: TMenuItem Tag = 6 Caption = 'sub-menu' ShortCut = 118 OnClick = miInsertAddHotDirClick end end object pmDeleteDirectoryHotlist: TPopupMenu[6] left = 64 top = 88 object miDeleteSelectedEntry: TMenuItem Tag = 1 Caption = 'selected item' ShortCut = 119 OnClick = miDeleteSelectedEntryClick end object miSeparator2: TMenuItem Caption = '-' end object miDeleteJustSubMenu: TMenuItem Tag = 2 Caption = 'just sub-menu but keep elements' OnClick = miDeleteSelectedEntryClick end object miDeleteCompleteSubMenu: TMenuItem Tag = 3 Caption = 'sub-menu and all its elements' OnClick = miDeleteSelectedEntryClick end object miSeparator3: TMenuItem Caption = '-' end object miDeleteAllHotDirs: TMenuItem Caption = 'delete all!' OnClick = miDeleteAllHotDirsClick end end object pmExportDirectoryHotlist: TPopupMenu[7] left = 200 top = 40 object miExportToHotlistFile: TMenuItem Tag = 1 Caption = 'to a Directory Hotlist file (.hotlist)' OnClick = miExportToAnythingClick end object miSeparator5: TMenuItem Caption = '-' end object miExportToTotalCommanderk: TMenuItem Caption = 'to a "wincmd.ini" of TC (keep existing)' OnClick = miExportToAnythingClick end object miExportToTotalCommandernk: TMenuItem Tag = 128 Caption = 'to a "wincmd.ini" of TC (erase existing)' OnClick = miExportToAnythingClick end object miGotoConfigureTCInfo1: TMenuItem Caption = 'Go to configure TC related info' OnClick = miGotoConfigureTCInfo2Click end end object pmImportDirectoryHotlist: TPopupMenu[8] left = 200 top = 88 object miImportFromHotlistFile: TMenuItem Tag = 1 Caption = 'from a Directory Hotlist file (.hotlist)' OnClick = miImportFromAnythingClick end object miSeparator4: TMenuItem Caption = '-' end object miImportTotalCommander: TMenuItem Caption = 'from "wincmd.ini" of TC' OnClick = miImportFromAnythingClick end object miGotoConfigureTCInfo2: TMenuItem Caption = 'Go to configure TC related info' OnClick = miGotoConfigureTCInfo2Click end end object pmBackupDirectoryHotlist: TPopupMenu[9] left = 200 top = 136 object miSaveBackupHotlist: TMenuItem Tag = 2 Caption = 'Save a backup of current Directory Hotlist' OnClick = miExportToAnythingClick end object miRestoreBackupHotlist: TMenuItem Tag = 2 Caption = 'Restore a backup of Directory Hotlist' OnClick = miImportFromAnythingClick end end object pmMiscellaneousDirectoryHotlist: TPopupMenu[10] left = 64 top = 184 object miTestResultingHotlistMenu: TMenuItem Caption = 'Test resulting menu' OnClick = miTestResultingHotlistMenuClick end object miSeparator10: TMenuItem Caption = '-' end object miOpenAllBranches: TMenuItem Caption = 'Open all branches' OnClick = miOpenAllBranchesClick end object miCollapseAll: TMenuItem Caption = 'Collapse all' OnClick = miCollapseAllClick end object miSeparator11: TMenuItem Caption = '-' end object miSearchAndReplace: TMenuItem Caption = 'Search and replace...' object miSearchAndReplaceInPath: TMenuItem Tag = 1 Caption = 'in path...' OnClick = miSearchAndReplaceClick end object miSearchAndReplaceInTargetPath: TMenuItem Tag = 2 Caption = 'in target path...' OnClick = miSearchAndReplaceClick end object miSeparator13: TMenuItem Caption = '-' end object miSearchInReplaceInBothPaths: TMenuItem Tag = 3 Caption = 'in path and target path...' OnClick = miSearchAndReplaceClick end end object miSeparator12: TMenuItem Caption = '-' end object miDetectIfPathExist: TMenuItem Tag = 1 Caption = 'Scan all hotdir''s path to validate the ones that actually exist' OnClick = miDetectIfPathExistClick end object miDetectIfPathTargetExist: TMenuItem Tag = 2 Caption = 'Scan all hotdir''s path && target to validate the ones that actually exist' OnClick = miDetectIfPathExistClick end end object pmSortDirectoryHotlist: TPopupMenu[11] left = 64 top = 136 object miSortSingleGroup: TMenuItem Tag = 1 Caption = '...single group of item(s) only' OnClick = miSortDirectoryHotlistClick end object miCurrentLevelOfItemOnly: TMenuItem Tag = 2 Caption = '...current level of item(s) selected only' OnClick = miSortDirectoryHotlistClick end object miSortSingleSubMenu: TMenuItem Tag = 3 Caption = '...content of submenu(s) selected, no sublevel' OnClick = miSortDirectoryHotlistClick end object miSortSubMenuAndSubLevel: TMenuItem Tag = 4 Caption = '...content of submenu(s) selected and all sublevels' OnClick = miSortDirectoryHotlistClick end object miSortEverything: TMenuItem Tag = 5 Caption = '...everything, from A to Z!' OnClick = miSortDirectoryHotlistClick end end object pmPathHelper: TPopupMenu[12] left = 480 top = 216 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/frames/foptionsfilepanelscolors.lfm���������������������������������������������0000644�0001750�0000144�00000052554�12660674103�022427� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmOptionsFilePanelsColors: TfrmOptionsFilePanelsColors Height = 521 Width = 854 ClientHeight = 521 ClientWidth = 854 DesignLeft = 143 DesignTop = 160 object lblTextColor: TLabel[0] AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbTextColor Left = 99 Height = 15 Top = 12 Width = 57 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = 'T&ext Color:' FocusControl = cbTextColor ParentColor = False end object cbTextColor: TColorBox[1] Left = 160 Height = 22 Top = 8 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Constraints.MinWidth = 100 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 0 end object btnForeColor: TButton[2] AnchorSideLeft.Control = cbTextColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor AnchorSideBottom.Control = cbTextColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 8 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnForeColorClick TabOrder = 1 end object lblBackgroundColor: TLabel[3] AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 89 Height = 15 Top = 38 Width = 67 Anchors = [akTop, akRight] Caption = 'Bac&kground:' FocusControl = cbBackColor ParentColor = False end object cbBackColor: TColorBox[4] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbTextColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 34 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 2 end object btnBackColor: TButton[5] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbBackColor AnchorSideBottom.Control = cbBackColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 34 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColorClick TabOrder = 3 end object lblBackgroundColor2: TLabel[6] AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 80 Height = 15 Top = 64 Width = 76 Anchors = [akTop, akRight] Caption = 'Backg&round 2:' FocusControl = cbBackColor2 ParentColor = False end object cbBackColor2: TColorBox[7] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 60 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 4 end object btnBackColor2: TButton[8] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbBackColor2 AnchorSideBottom.Control = cbBackColor2 AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 60 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnBackColor2Click TabOrder = 5 end object lblMarkColor: TLabel[9] AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 94 Height = 15 Top = 90 Width = 62 Anchors = [akTop, akRight] Caption = '&Mark Color:' FocusControl = cbMarkColor ParentColor = False end object cbMarkColor: TColorBox[10] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbBackColor2 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 86 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 6 end object btnMarkColor: TButton[11] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbMarkColor AnchorSideBottom.Control = cbMarkColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 86 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnMarkColorClick TabOrder = 7 end object lblCursorColor: TLabel[12] AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 86 Height = 15 Top = 116 Width = 70 Anchors = [akTop, akRight] Caption = 'C&ursor Color:' FocusControl = cbCursorColor ParentColor = False end object cbCursorColor: TColorBox[13] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 112 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 8 end object btnCursorColor: TButton[14] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorColor AnchorSideBottom.Control = cbCursorColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 112 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorColorClick TabOrder = 9 end object lblCursorText: TLabel[15] AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 93 Height = 15 Top = 142 Width = 63 Anchors = [akTop, akRight] Caption = 'Cursor Te&xt:' FocusControl = cbCursorText ParentColor = False end object cbCursorText: TColorBox[16] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 138 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 10 end object btnCursorText: TButton[17] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorText AnchorSideBottom.Control = cbCursorText AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 138 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorTextClick TabOrder = 11 end object lblInactiveCursorColor: TLabel[18] AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 42 Height = 15 Top = 168 Width = 114 Anchors = [akTop, akRight] Caption = 'Inactive Cursor Color:' FocusControl = cbInactiveCursorColor ParentColor = False end object cbInactiveCursorColor: TColorBox[19] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbCursorText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 164 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 12 end object btnInactiveCursorColor: TButton[20] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideBottom.Control = cbInactiveCursorColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 164 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveCursorColorClick TabOrder = 13 end object lblInactiveMarkColor: TLabel[21] AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblTextColor AnchorSideRight.Side = asrBottom Left = 50 Height = 15 Top = 194 Width = 106 Anchors = [akTop, akRight] Caption = 'Inactive Mark Color:' FocusControl = cbInactiveMarkColor ParentColor = False end object cbInactiveMarkColor: TColorBox[22] AnchorSideLeft.Control = cbTextColor AnchorSideTop.Control = cbInactiveCursorColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbTextColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 190 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 14 end object btnInactiveMarkColor: TButton[23] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideBottom.Control = cbInactiveMarkColor AnchorSideBottom.Side = asrBottom Left = 366 Height = 22 Top = 190 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Right = 10 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnInactiveMarkColorClick TabOrder = 15 end object dbOptionsVertical: TDividerBevel[24] AnchorSideLeft.Control = btnForeColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnForeColor AnchorSideRight.Control = btnCursorText AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 406 Height = 222 Top = 16 Width = 15 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 12 BorderSpacing.Top = 8 BorderSpacing.Right = 12 Font.Style = [fsBold] Orientation = trVertical ParentFont = False end object cbbUseInvertedSelection: TCheckBox[25] AnchorSideLeft.Control = dbOptionsVertical AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 433 Height = 19 Top = 14 Width = 136 BorderSpacing.Top = 6 Caption = 'U&se Inverted Selection' OnChange = cbColorBoxChange TabOrder = 16 end object cbbUseInactiveSelColor: TCheckBox[26] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbTextColor Left = 579 Height = 19 Top = 14 Width = 133 BorderSpacing.Left = 10 BorderSpacing.Top = 6 Caption = 'Use Inactive Sel Color' OnChange = cbbUseInactiveSelColorChange TabOrder = 17 end object cbbUseFrameCursor: TCheckBox[27] AnchorSideLeft.Control = cbbUseInvertedSelection AnchorSideTop.Control = cbbUseInvertedSelection AnchorSideTop.Side = asrBottom Left = 433 Height = 19 Top = 38 Width = 113 BorderSpacing.Top = 5 Caption = 'Use &Frame Cursor' OnChange = cbbUseFrameCursorChange TabOrder = 18 end object lblInactivePanelBrightness: TLabel[28] AnchorSideLeft.Control = cbbUseFrameCursor AnchorSideTop.Control = btnResetToDCDefault AnchorSideTop.Side = asrBottom Left = 433 Height = 15 Top = 94 Width = 172 BorderSpacing.Top = 6 Caption = '&Brightness level of inactive panel' FocusControl = tbInactivePanelBrightness ParentColor = False end object tbInactivePanelBrightness: TTrackBar[29] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 433 Height = 26 Top = 115 Width = 377 Max = 100 OnChange = tbInactivePanelBrightnessChange PageSize = 10 Position = 0 ScalePos = trRight TickStyle = tsNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 19 end object dbFreeSpaceIndicator: TDividerBevel[30] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbbUseGradientInd Left = 433 Height = 15 Top = 150 Width = 377 Caption = 'Drive Free Space Indicator' Anchors = [akLeft, akRight, akBottom] end object cbbUseGradientInd: TCheckBox[31] AnchorSideLeft.Control = lblInactivePanelBrightness AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = cbIndColor Left = 433 Height = 19 Top = 171 Width = 137 Anchors = [akLeft, akBottom] BorderSpacing.Top = 6 Caption = 'Use &Gradient Indicator' OnChange = cbbUseGradientIndChange TabOrder = 20 end object pbxFakeDrive: TPaintBox[32] Tag = 83 AnchorSideLeft.Control = cbbUseGradientInd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbbUseGradientInd AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 573 Height = 10 Top = 175 Width = 235 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Right = 2 OnPaint = pbxFakeDrivePaint end object lblIndColor: TLabel[33] AnchorSideTop.Control = cbIndColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbIndColor Left = 464 Height = 15 Top = 194 Width = 108 Anchors = [akTop, akRight] BorderSpacing.Right = 4 Caption = '&Indicator Fore Color:' FocusControl = cbIndColor ParentColor = False end object cbIndColor: TColorBox[34] AnchorSideTop.Control = cbInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 576 Height = 22 Top = 190 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] ItemHeight = 16 OnChange = cbIndColorChange TabOrder = 21 end object btnIndColor: TButton[35] AnchorSideLeft.Control = cbIndColor AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbIndColor AnchorSideBottom.Side = asrBottom Left = 782 Height = 22 Top = 190 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 6 Caption = '>>' OnClick = btnIndColorClick TabOrder = 22 end object lblIndBackColor: TLabel[36] AnchorSideLeft.Control = lblIndColor AnchorSideTop.Control = cbIndBackColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = lblIndColor AnchorSideRight.Side = asrBottom Left = 462 Height = 15 Top = 220 Width = 110 Anchors = [akTop, akRight] Caption = 'In&dicator Back Color:' FocusControl = cbIndBackColor ParentColor = False end object cbIndBackColor: TColorBox[37] AnchorSideLeft.Control = cbIndColor AnchorSideTop.Control = cbIndColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbIndColor AnchorSideRight.Side = asrBottom Left = 576 Height = 22 Top = 216 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbIndColorChange TabOrder = 23 end object btnIndBackColor: TButton[38] AnchorSideLeft.Control = btnIndColor AnchorSideTop.Control = cbIndBackColor AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbIndBackColor AnchorSideBottom.Side = asrBottom Left = 782 Height = 22 Top = 216 Width = 28 Anchors = [akTop, akLeft, akRight, akBottom] Caption = '>>' OnClick = btnIndBackColorClick TabOrder = 24 end object pnlPreviewCont: TPanel[39] AnchorSideLeft.Control = Owner AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 Height = 272 Top = 249 Width = 854 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 11 BevelOuter = bvNone ChildSizing.LeftRightSpacing = 8 ClientHeight = 272 ClientWidth = 854 Color = clInactiveCaption Constraints.MinHeight = 250 ParentColor = False TabOrder = 25 TabStop = True object lblPreview: TLabel Left = 8 Height = 15 Top = 0 Width = 838 Align = alTop Alignment = taCenter Caption = 'Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings.' Color = clInactiveCaption ParentColor = False Transparent = False end object pnlLeftPreview: TPanel Left = 8 Height = 249 Top = 15 Width = 413 Align = alClient Anchors = [] BorderSpacing.Bottom = 8 ParentColor = False TabOrder = 0 TabStop = True OnEnter = pnlLeftPreviewEnter end object pnlRightPreview: TPanel Left = 431 Height = 249 Top = 15 Width = 415 Align = alRight Anchors = [] BorderSpacing.Bottom = 8 ParentColor = False TabOrder = 1 TabStop = True OnEnter = pnlRightPreviewEnter end object spPanelSplitter: TSplitter Left = 421 Height = 257 Top = 15 Width = 10 Align = alRight Anchors = [akRight] ResizeAnchor = akRight end end object cbUseCursorBorder: TCheckBox[40] AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCursorBorderColor AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCursorBorderColor Left = 67 Height = 19 Top = 218 Width = 93 Anchors = [akTop, akRight] Caption = 'Cursor border' OnChange = cbUseCursorBorderChange TabOrder = 26 end object cbCursorBorderColor: TColorBox[41] AnchorSideLeft.Control = cbInactiveMarkColor AnchorSideTop.Control = cbInactiveMarkColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbInactiveMarkColor AnchorSideRight.Side = asrBottom Left = 160 Height = 22 Top = 216 Width = 200 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 16 OnChange = cbColorBoxChange TabOrder = 27 end object btnCursorBorderColor: TButton[42] AnchorSideLeft.Control = btnForeColor AnchorSideTop.Control = cbCursorBorderColor AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbCursorBorderColor AnchorSideBottom.Side = asrBottom Left = 367 Height = 22 Top = 216 Width = 28 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 1 BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCursorBorderColorClick TabOrder = 28 end object btnResetToDCDefault: TButton[43] AnchorSideTop.Control = cbAllowOverColor AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnIndColor AnchorSideRight.Side = asrBottom Left = 683 Height = 25 Top = 63 Width = 127 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Reset to DC default' OnClick = btnResetToDCDefaultClick TabOrder = 29 end object cbAllowOverColor: TCheckBox[44] AnchorSideLeft.Control = cbbUseInactiveSelColor AnchorSideTop.Control = cbbUseFrameCursor AnchorSideTop.Side = asrCenter Left = 579 Height = 19 Top = 38 Width = 105 Caption = 'Allow Overcolor' OnChange = cbbUseInactiveSelColorChange TabOrder = 30 end object optColorDialog: TColorDialog[45] Color = clBlack CustomColors.Strings = ( 'ColorA=000000' 'ColorB=000080' 'ColorC=008000' 'ColorD=008080' 'ColorE=800000' 'ColorF=800080' 'ColorG=808000' 'ColorH=808080' 'ColorI=C0C0C0' 'ColorJ=0000FF' 'ColorK=00FF00' 'ColorL=00FFFF' 'ColorM=FF0000' 'ColorN=FF00FF' 'ColorO=FFFF00' 'ColorP=FFFFFF' 'ColorQ=C0DCC0' 'ColorR=F0CAA6' 'ColorS=F0FBFF' 'ColorT=A4A0A0' ) left = 728 top = 376 end end ����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fselecttextrange.lfm������������������������������������������������������������0000644�0001750�0000144�00000003165�12310641605�017356� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSelectTextRange: TfrmSelectTextRange Left = 323 Height = 112 Top = 214 Width = 320 BorderStyle = bsDialog ChildSizing.LeftRightSpacing = 10 ClientHeight = 112 ClientWidth = 320 Position = poOwnerFormCenter LCLVersion = '1.0.12.0' object edtSelectText: TEdit AnchorSideLeft.Control = lblSelectText AnchorSideTop.Control = lblSelectText AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 24 Top = 31 Width = 300 AutoSelect = False BorderSpacing.Top = 6 Constraints.MinWidth = 300 OnKeyUp = edtSelectTextKeyUp OnMouseUp = edtSelectTextMouseUp TabOrder = 0 end object lblSelectText: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 15 Top = 10 Width = 188 BorderSpacing.Left = 10 BorderSpacing.Top = 10 BorderSpacing.Right = 10 Caption = '&Select the characters to insert:' FocusControl = edtSelectText ParentColor = False end object btpPanel: TButtonPanel Left = 10 Height = 36 Top = 70 Width = 300 OKButton.Name = 'OKButton' OKButton.Caption = '&OK' OKButton.DefaultCaption = False HelpButton.Name = 'HelpButton' HelpButton.Caption = '&Help' HelpButton.DefaultCaption = False CloseButton.Name = 'CloseButton' CloseButton.Caption = '&Close' CloseButton.DefaultCaption = False CancelButton.Name = 'CancelButton' CancelButton.Caption = 'Cancel' CancelButton.DefaultCaption = False TabOrder = 1 ShowButtons = [pbOK, pbCancel] end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmaincommandsdlg.lrt������������������������������������������������������������0000644�0001750�0000144�00000001705�12467752466�017360� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMAINCOMMANDSDLG.CAPTION=Select your internal command TFRMMAINCOMMANDSDLG.LBLCATEGORY.CAPTION=&Categories: TFRMMAINCOMMANDSDLG.LBLCOMMANDNAME.CAPTION=Command &name: TFRMMAINCOMMANDSDLG.LBLHINT.CAPTION=Hint: TFRMMAINCOMMANDSDLG.LBLEDTFILTER.EDITLABEL.CAPTION=&Filter: TFRMMAINCOMMANDSDLG.BTNOK.CAPTION=&OK TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION=&Cancel TFRMMAINCOMMANDSDLG.CBCATEGORYSORTORNOT.TEXT=Legacy sorted TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT=Legacy sorted TFRMMAINCOMMANDSDLG.GBSELECTION.CAPTION=Selection: TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMAND.CAPTION=cm_name TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHINT.CAPTION=Hint TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION=Help TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION=Hotkey TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION=Category TFRMMAINCOMMANDSDLG.CBSELECTALLCATEGORYDEFAULT.CAPTION=Select all categories by default TFRMMAINCOMMANDSDLG.LBLHOTKEY.CAPTION=Hotkey: �����������������������������������������������������������doublecmd-0.7.1/src/fFindDlg.pas��������������������������������������������������������������������0000644�0001750�0000144�00000135505�12673215117�015504� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Find dialog, with searching in thread Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 fFindDlg; {$mode objfpc}{$H+} {$include calling.inc} interface uses Graphics, SysUtils, Classes, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, Menus, EditBtn, Spin, Buttons, DateTimePicker, KASComboBox, fAttributesEdit, uDsxModule, DsxPlugin, uFindThread, uFindFiles, uSearchTemplate, fSearchPlugin, uFileView; type { TfrmFindDlg } TfrmFindDlg = class(TForm) Bevel2: TBevel; btnAddAttribute: TButton; btnAttrsHelp: TButton; btnClose: TButton; btnGoToPath: TButton; btnNewSearch: TButton; btnLastSearch: TButton; btnSaveTemplate: TButton; btnSearchDelete: TButton; btnSearchLoad: TButton; btnSearchSave: TButton; btnSearchSaveWithStartingPath: TButton; btnStart: TButton; btnUseTemplate: TButton; btnStop: TButton; btnView: TButton; btnEdit: TButton; btnWorkWithFound: TButton; cbFindText: TCheckBox; cbNotContainingText: TCheckBox; cbDateFrom: TCheckBox; cbNotOlderThan: TCheckBox; cbFileSizeFrom: TCheckBox; cbDateTo: TCheckBox; cbFileSizeTo: TCheckBox; cbReplaceText: TCheckBox; cbTimeFrom: TCheckBox; cbTimeTo: TCheckBox; cbPartialNameSearch: TCheckBox; cbFollowSymLinks: TCheckBox; cbUsePlugin: TCheckBox; cbSelectedFiles: TCheckBox; cbTextRegExp: TCheckBox; cbFindInArchive: TCheckBox; cmbExcludeDirectories: TComboBoxWithDelItems; cmbNotOlderThanUnit: TComboBox; cmbFileSizeUnit: TComboBox; cmbEncoding: TComboBox; cmbSearchDepth: TComboBox; cbRegExp: TCheckBox; cmbPlugin: TComboBox; cmbReplaceText: TComboBoxWithDelItems; cmbFindText: TComboBoxWithDelItems; cmbExcludeFiles: TComboBoxWithDelItems; edtAttrib: TEdit; edtFindPathStart: TDirectoryEdit; frmContentPlugins: TfrmSearchPlugin; gbDirectories: TGroupBox; gbFiles: TGroupBox; lblAttributes: TLabel; lblExcludeDirectories: TLabel; lblCurrent: TLabel; lblExcludeFiles: TLabel; lblFound: TLabel; lblStatus: TLabel; lblTemplateHeader: TLabel; lbSearchTemplates: TListBox; lblSearchContents: TPanel; lblSearchDepth: TLabel; lblEncoding: TLabel; lsFoundedFiles: TListBox; CheksPanel: TPanel; miShowAllFound: TMenuItem; miRemoveFromLlist: TMenuItem; pnlDirectoriesDepth: TPanel; pnlLoadSaveBottomButtons: TPanel; pnlLoadSaveBottom: TPanel; pnlButtons: TPanel; pnlResultsBottomButtons: TPanel; pnlResults: TPanel; pnlStatus: TPanel; pnlResultsBottom: TPanel; seNotOlderThan: TSpinEdit; seFileSizeFrom: TSpinEdit; seFileSizeTo: TSpinEdit; pnlFindFile: TPanel; pgcSearch: TPageControl; tsPlugins: TTabSheet; tsResults: TTabSheet; tsLoadSave: TTabSheet; tsStandard: TTabSheet; lblFindPathStart: TLabel; lblFindFileMask: TLabel; cmbFindFileMask: TComboBoxWithDelItems; gbFindData: TGroupBox; cbCaseSens: TCheckBox; tsAdvanced: TTabSheet; PopupMenuFind: TPopupMenu; miShowInViewer: TMenuItem; ZVDateFrom: TDateTimePicker; ZVDateTo: TDateTimePicker; ZVTimeFrom: TDateTimePicker; ZVTimeTo: TDateTimePicker; procedure btnAddAttributeClick(Sender: TObject); procedure btnAttrsHelpClick(Sender: TObject); procedure btnEditClick(Sender: TObject); procedure btnLastSearchClick(Sender: TObject); procedure btnSearchDeleteClick(Sender: TObject); procedure btnSearchLoadClick(Sender: TObject); procedure btnSearchSaveWithStartingPathClick(Sender: TObject); procedure btnSearchSaveClick(Sender: TObject); procedure cbCaseSensChange(Sender: TObject); procedure cbDateFromChange(Sender: TObject); procedure cbDateToChange(Sender: TObject); procedure cbFindInArchiveChange(Sender: TObject); procedure cbPartialNameSearchChange(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure cbTextRegExpChange(Sender: TObject); procedure cbSelectedFilesChange(Sender: TObject); procedure cmbEncodingSelect(Sender: TObject); procedure cbFindTextChange(Sender: TObject); procedure cbUsePluginChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure btnGoToPathClick(Sender: TObject); procedure btnNewSearchClick(Sender: TObject); procedure btnSelDirClick(Sender: TObject); procedure btnStartClick(Sender: TObject); procedure btnViewClick(Sender: TObject); procedure btnWorkWithFoundClick(Sender: TObject); procedure cbFileSizeFromChange(Sender: TObject); procedure cbFileSizeToChange(Sender: TObject); procedure cbNotOlderThanChange(Sender: TObject); procedure cbReplaceTextChange(Sender: TObject); procedure cbTimeFromChange(Sender: TObject); procedure cbTimeToChange(Sender: TObject); procedure btnStopClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure btnCloseClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure frmFindDlgClose(Sender: TObject; var {%H-}CloseAction: TCloseAction); procedure frmFindDlgShow(Sender: TObject); procedure gbDirectoriesResize(Sender: TObject); procedure lbSearchTemplatesDblClick(Sender: TObject); procedure lbSearchTemplatesSelectionChange(Sender: TObject; {%H-}User: boolean); procedure lsFoundedFilesDblClick(Sender: TObject); procedure lsFoundedFilesKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure miRemoveFromLlistClick(Sender: TObject); procedure miShowAllFoundClick(Sender: TObject); procedure miShowInViewerClick(Sender: TObject); procedure pgcSearchChange(Sender: TObject); procedure seFileSizeFromChange(Sender: TObject); procedure seFileSizeToChange(Sender: TObject); procedure seNotOlderThanChange(Sender: TObject); procedure tsLoadSaveShow(Sender: TObject); procedure ZVDateFromChange(Sender: TObject); procedure ZVDateToChange(Sender: TObject); procedure ZVTimeFromChange(Sender: TObject); procedure ZVTimeToChange(Sender: TObject); private FSelectedFiles: TStringList; FFindThread:TFindThread; DsxPlugins: TDSXModuleList; FSearchingActive: Boolean; FFrmAttributesEdit: TfrmAttributesEdit; FLastTemplateName: String; FLastSearchTemplate: TSearchTemplate; FUpdateTimer: TTimer; FUpdating: Boolean; procedure DisableControlsForTemplate; procedure StopSearch; procedure AfterSearchStopped; procedure FillFindOptions(out FindOptions: TSearchTemplateRec; SetStartPath: Boolean); procedure FindOptionsToDSXSearchRec(const AFindOptions: TSearchTemplateRec; out SRec: TDsxSearchRecord); procedure FoundedStringCopyChanged(Sender: TObject); procedure LoadTemplate(const Template: TSearchTemplateRec); procedure LoadSelectedTemplate; procedure SaveTemplate(SaveStartingPath: Boolean); procedure SelectTemplate(const ATemplateName: String); procedure UpdateTemplatesList; procedure OnUpdateTimer(Sender: TObject); procedure OnAddAttribute(Sender: TObject); function InvalidRegExpr(AChecked: Boolean; const ARegExpr: String): Boolean; public class function Instance: TfrmFindDlg; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; procedure ClearFilter; procedure ClearResults; procedure ThreadTerminate(Sender:TObject); end; var FoundedStringCopy: TStringlist = nil; {en Shows the find files dialog. Cannot store FileView reference as it might get destroyed while Find Dialog is running. We can store FileSource though, if needed in future (as it is reference counted). @param(FileView For which file view the find dialog is executed, to get file source, current path and a list of selected files.) } procedure ShowFindDlg(FileView: TFileView; const TemplateName: String); function ShowDefineTemplateDlg(var TemplateName: String): Boolean; function ShowUseTemplateDlg(var Template: TSearchTemplate): Boolean; implementation {$R *.lfm} uses LCLProc, LCLType, LConvEncoding, StrUtils, HelpIntfs, fViewer, fMain, uLng, uGlobs, uShowForm, uDCUtils, uFileSource, uFileSourceUtil, uSearchResultFileSource, uFile, uFileSystemFileSource, uFileViewNotebook, uKeyboard, uOSUtils, uArchiveFileSourceUtil, DCOSUtils, SynRegExpr; const TimeUnitToComboIndex: array[TTimeUnit] of Integer = (0, 1, 2, 3, 4, 5, 6); ComboIndexToTimeUnit: array[0..6] of TTimeUnit = (tuSecond, tuMinute, tuHour, tuDay, tuWeek, tuMonth, tuYear); FileSizeUnitToComboIndex: array[TFileSizeUnit] of Integer = (0, 1, 2, 3, 4); ComboIndexToFileSizeUnit: array[0..4] of TFileSizeUnit = (suBytes, suKilo, suMega, suGiga, suTera); type { TStringListTemp } TStringListTemp = class(TStringList) public function AddObject(const S: String; AObject: TObject): Integer; override; end; var GfrmFindDlgInstance: TfrmFindDlg = nil; procedure SAddFileProc({%H-}PlugNr: Integer; FoundFile: PChar); dcpcall; var s: string; begin s := string(FoundFile); if s='' then begin TfrmFindDlg.Instance.AfterSearchStopped; end else begin FoundedStringCopy.Add(s); Application.ProcessMessages; end; end; procedure SUpdateStatusProc({%H-}PlugNr: Integer; CurrentFile: PChar; FilesScanned: Integer); dcpcall; var sCurrentFile: String; begin sCurrentFile := String(CurrentFile); TfrmFindDlg.Instance.lblStatus.Caption:=Format(rsFindScanned,[FilesScanned]); if sCurrentFile = '' then TfrmFindDlg.Instance.lblCurrent.Caption := '' else TfrmFindDlg.Instance.lblCurrent.Caption:=rsFindScanning + ': ' + sCurrentFile; Application.ProcessMessages; end; procedure ShowFindDlg(FileView: TFileView; const TemplateName: String); var ASelectedFiles: TFiles = nil; I: Integer; begin if not Assigned(FileView) then raise Exception.Create('ShowFindDlg: FileView=nil'); with TfrmFindDlg.Instance do begin // Prepare window for search files ClearFilter; Caption := rsFindSearchFiles; edtFindPathStart.Text := FileView.CurrentPath; // Get paths of selected files, if any. FSelectedFiles.Clear; ASelectedFiles := FileView.CloneSelectedFiles; if Assigned(ASelectedFiles) then try if ASelectedFiles.Count > 0 then begin for I := 0 to ASelectedFiles.Count - 1 do FSelectedFiles.Add(ASelectedFiles[I].FullPath); end; finally FreeAndNil(ASelectedFiles); end; if Length(TemplateName) > 0 then begin FUpdating:= True; UpdateTemplatesList; SelectTemplate(TemplateName); LoadSelectedTemplate; FUpdating:= False; end; ShowOnTop; end; end; function ShowDefineTemplateDlg(var TemplateName: String): Boolean; var AIndex: Integer; AForm: TfrmFindDlg; begin AForm := TfrmFindDlg.Create(nil); try with AForm do begin // Prepare window for define search template Caption := rsFindDefineTemplate; AForm.DisableControlsForTemplate; btnSaveTemplate.Visible := True; btnSaveTemplate.Default := True; BorderIcons := [biSystemMenu, biMaximize]; if Length(TemplateName) > 0 then begin UpdateTemplatesList; AIndex:= lbSearchTemplates.Items.IndexOf(TemplateName); if AIndex >= 0 then begin lbSearchTemplates.ItemIndex:= AIndex; AForm.LoadSelectedTemplate; end; end; Result:= (ShowModal = mrOK); if Result and (lbSearchTemplates.Count > 0) then begin TemplateName:= lbSearchTemplates.Items[lbSearchTemplates.Count - 1]; end; end; finally AForm.Free; end; end; function ShowUseTemplateDlg(var Template: TSearchTemplate): Boolean; var AForm: TfrmFindDlg; SearchRec: TSearchTemplateRec; begin AForm := TfrmFindDlg.Create(nil); try with AForm do begin // Prepare window for define search template Caption := rsFindDefineTemplate; DisableControlsForTemplate; btnUseTemplate.Visible := True; btnUseTemplate.Default := True; BorderIcons := [biSystemMenu, biMaximize]; if Assigned(Template) then AForm.LoadTemplate(Template.SearchRecord); Result:= (ShowModal = mrOK); if Result then begin if not Assigned(Template) then Template:= TSearchTemplate.Create; try Template.TemplateName := AForm.FLastTemplateName; AForm.FillFindOptions(SearchRec, False); Template.SearchRecord := SearchRec; except FreeAndNil(Template); raise; end; end; end; finally AForm.Free; end; end; { TStringListTemp } function TStringListTemp.AddObject(const S: String; AObject: TObject): Integer; begin Result:= Count; InsertItem(Result, S, AObject); end; { TfrmFindDlg } procedure TfrmFindDlg.FormCreate(Sender: TObject); var I: Integer; begin Height:= pnlFindFile.Height + 22; DsxPlugins := TDSXModuleList.Create; DsxPlugins.Assign(gDSXPlugins); FoundedStringCopy := TStringListTemp.Create; FoundedStringCopy.OnChange:=@FoundedStringCopyChanged; // load language edtFindPathStart.DialogTitle:= rsFindWhereBeg; cmbNotOlderThanUnit.Items.Add(rsTimeUnitSecond); cmbNotOlderThanUnit.Items.Add(rsTimeUnitMinute); cmbNotOlderThanUnit.Items.Add(rsTimeUnitHour); cmbNotOlderThanUnit.Items.Add(rsTimeUnitDay); cmbNotOlderThanUnit.Items.Add(rsTimeUnitWeek); cmbNotOlderThanUnit.Items.Add(rsTimeUnitMonth); cmbNotOlderThanUnit.Items.Add(rsTimeUnitYear); cmbFileSizeUnit.Items.Add(rsSizeUnitBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitKBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitMBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitGBytes); cmbFileSizeUnit.Items.Add(rsSizeUnitTBytes); // fill search depth combobox cmbSearchDepth.Items.Add(rsFindDepthAll); cmbSearchDepth.Items.Add(rsFindDepthCurDir); for I:= 1 to 100 do cmbSearchDepth.Items.Add(Format(rsFindDepth, [IntToStr(I)])); cmbSearchDepth.ItemIndex:= 0; // fill encoding combobox cmbEncoding.Clear; GetSupportedEncodings(cmbEncoding.Items); cmbEncoding.ItemIndex:= cmbEncoding.Items.IndexOf(EncodingAnsi); // gray disabled fields cbUsePluginChange(Sender); cbFindTextChange(Sender); cbReplaceTextChange(Sender); cbNotOlderThanChange(Sender); cbFileSizeFromChange(Sender); cbFileSizeToChange(Sender); ZVDateFrom.DateTime:=Now(); ZVDateTo.DateTime:=Now(); ZVTimeFrom.DateTime:=Now(); ZVTimeTo.DateTime:=Now(); cbDateFrom.Checked:=False; cbDateTo.Checked:=False; cbTimeFrom.Checked:=False; cbTimeTo.Checked:=False; {$IF NOT (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} btnStart.Default := True; {$ENDIF} cmbNotOlderThanUnit.ItemIndex := 3; // Days cmbFileSizeUnit.ItemIndex := 1; // Kilobytes edtFindPathStart.ShowHidden := gShowSystemFiles; cbPartialNameSearch.Checked:= gPartialNameSearch; InitPropStorage(Self); end; procedure TfrmFindDlg.cbUsePluginChange(Sender: TObject); begin EnableControl(cmbPlugin, cbUsePlugin.Checked); if not FUpdating and cmbPlugin.Enabled and cmbPlugin.CanFocus and (Sender = cbUsePlugin) then begin cmbPlugin.SetFocus; cmbPlugin.SelectAll; end; end; procedure TfrmFindDlg.cmbEncodingSelect(Sender: TObject); begin if not gUseMmapInSearch then begin if cmbEncoding.ItemIndex <> cmbEncoding.Items.IndexOf(EncodingAnsi) then begin cbCaseSens.Tag:= Integer(cbCaseSens.Checked); cbCaseSens.Checked:= True; cbCaseSens.Enabled:= False; end else begin cbCaseSens.Checked:= Boolean(cbCaseSens.Tag); cbCaseSens.Enabled:= True; end; end; end; constructor TfrmFindDlg.Create(TheOwner: TComponent); begin FSelectedFiles := TStringList.Create; inherited Create(TheOwner); FUpdateTimer := TTimer.Create(Self); FUpdateTimer.Interval := 100; FUpdateTimer.Enabled := False; FUpdateTimer.OnTimer := @OnUpdateTimer; end; destructor TfrmFindDlg.Destroy; begin inherited Destroy; FSelectedFiles.Free; FLastSearchTemplate.Free; end; procedure TfrmFindDlg.DisableControlsForTemplate; begin lblFindPathStart.Visible := False; edtFindPathStart.Visible := False; cbFollowSymLinks.Visible := False; cbSelectedFiles.Visible := False; btnStart.Visible := False; btnStop.Visible := False; btnNewSearch.Visible := False; btnLastSearch.Visible := False; btnSearchSaveWithStartingPath.Visible := False; gbFindData.Visible := False; tsPlugins.TabVisible := False; tsResults.TabVisible := False; end; procedure TfrmFindDlg.cbFindTextChange(Sender: TObject); begin EnableControl(cmbFindText, cbFindText.Checked); EnableControl(cmbEncoding, cbFindText.Checked); EnableControl(cbCaseSens, cbFindText.Checked); EnableControl(cbReplaceText, cbFindText.Checked and not cbFindInArchive.Checked); EnableControl(cbNotContainingText, cbFindText.Checked); EnableControl(cbTextRegExp, cbFindText.Checked); lblEncoding.Enabled:=cbFindText.Checked; cbReplaceText.Checked:= False; if not FUpdating and cmbFindText.Enabled and cmbFindText.CanFocus and (Sender = cbFindText) then begin cmbFindText.SetFocus; cmbFindText.SelectAll; end; end; procedure TfrmFindDlg.ClearFilter; begin FUpdating := True; FLastTemplateName := ''; edtFindPathStart.Text:= ''; edtFindPathStart.ShowHidden := gShowSystemFiles; cmbExcludeDirectories.Text := ''; cmbSearchDepth.ItemIndex := 0; cmbFindFileMask.Text:= '*'; cmbExcludeFiles.Text := ''; cbPartialNameSearch.Checked:= gPartialNameSearch; cbRegExp.Checked := False; // attributes edtAttrib.Text:= ''; // file date/time ZVDateFrom.DateTime:=Now(); ZVDateTo.DateTime:=Now(); ZVTimeFrom.DateTime:=Now(); ZVTimeTo.DateTime:=Now(); cbDateFrom.Checked:=False; cbDateTo.Checked:=False; cbTimeFrom.Checked:=False; cbTimeTo.Checked:=False; // not older then cbNotOlderThan.Checked:= False; seNotOlderThan.Value:= 1; cmbNotOlderThanUnit.ItemIndex := 3; // Days // file size cbFileSizeFrom.Checked:= False; cbFileSizeTo.Checked:= False; seFileSizeFrom.Value:= 0; seFileSizeTo.Value:= 10; cmbFileSizeUnit.ItemIndex := 1; // Kilobytes // find/replace text // do not clear search/replace text just clear checkbox cbFindText.Checked:= False; cbReplaceText.Checked:= False; cbCaseSens.Checked:= False; cbNotContainingText.Checked:= False; cmbEncoding.ItemIndex := 0; // plugins cmbPlugin.Text:= ''; FUpdating := False; end; procedure TfrmFindDlg.ClearResults; begin lsFoundedFiles.Clear; lsFoundedFiles.Tag:= 0; lsFoundedFiles.ScrollWidth:= 0; FoundedStringCopy.Clear; end; procedure TfrmFindDlg.btnSearchLoadClick(Sender: TObject); begin LoadSelectedTemplate; end; procedure TfrmFindDlg.btnSearchSaveWithStartingPathClick(Sender: TObject); begin SaveTemplate(True); end; procedure TfrmFindDlg.btnSearchDeleteClick(Sender: TObject); var OldIndex: Integer; begin OldIndex := lbSearchTemplates.ItemIndex; if OldIndex < 0 then Exit; gSearchTemplateList.DeleteTemplate(OldIndex); lbSearchTemplates.Items.Delete(OldIndex); if OldIndex < lbSearchTemplates.Count then lbSearchTemplates.ItemIndex := OldIndex else if lbSearchTemplates.Count > 0 then lbSearchTemplates.ItemIndex := lbSearchTemplates.Count - 1; end; procedure TfrmFindDlg.btnAttrsHelpClick(Sender: TObject); begin ShowHelpOrErrorForKeyword('', edtAttrib.HelpKeyword); end; procedure TfrmFindDlg.btnEditClick(Sender: TObject); begin if lsFoundedFiles.ItemIndex <> -1 then ShowEditorByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); end; procedure TfrmFindDlg.btnAddAttributeClick(Sender: TObject); begin if not Assigned(FFrmAttributesEdit) then begin FFrmAttributesEdit := TfrmAttributesEdit.Create(Self); FFrmAttributesEdit.OnOk := @OnAddAttribute; end; FFrmAttributesEdit.Reset; if not (fsModal in FormState) then FFrmAttributesEdit.Show else begin FFrmAttributesEdit.ShowModal; end; end; procedure TfrmFindDlg.btnSearchSaveClick(Sender: TObject); begin SaveTemplate(False); end; procedure TfrmFindDlg.cbCaseSensChange(Sender: TObject); begin if cbCaseSens.Checked then cbTextRegExp.Checked:= False; end; procedure TfrmFindDlg.cbDateFromChange(Sender: TObject); begin UpdateColor(ZVDateFrom, cbDateFrom.Checked); end; procedure TfrmFindDlg.cbDateToChange(Sender: TObject); begin UpdateColor(ZVDateTo, cbDateTo.Checked); end; procedure TfrmFindDlg.cbFindInArchiveChange(Sender: TObject); begin EnableControl(cbReplaceText, cbFindText.Checked and not cbFindInArchive.Checked); if cbReplaceText.Checked then cbReplaceText.Checked := cbReplaceText.Enabled; btnView.Enabled:= not cbFindInArchive.Checked; btnEdit.Enabled:= not cbFindInArchive.Checked; btnWorkWithFound.Enabled:= not cbFindInArchive.Checked; cbReplaceTextChange(cbReplaceText); end; procedure TfrmFindDlg.cbPartialNameSearchChange(Sender: TObject); begin if cbPartialNameSearch.Checked then cbRegExp.Checked:=False; end; procedure TfrmFindDlg.cbRegExpChange(Sender: TObject); begin if cbRegExp.Checked then cbPartialNameSearch.Checked:=False; end; procedure TfrmFindDlg.cbTextRegExpChange(Sender: TObject); begin if cbTextRegExp.Checked then cbCaseSens.Checked:= False; end; procedure TfrmFindDlg.cbSelectedFilesChange(Sender: TObject); begin edtFindPathStart.Enabled := not cbSelectedFiles.Checked; end; procedure TfrmFindDlg.btnSelDirClick(Sender: TObject); var s:String; begin s:=edtFindPathStart.Text; if not mbDirectoryExists(s) then s:=''; SelectDirectory(rsFindWhereBeg,'',s, False); edtFindPathStart.Text:=s; end; procedure TfrmFindDlg.btnNewSearchClick(Sender: TObject); begin StopSearch; pgcSearch.PageIndex:= 0; ClearResults; miShowAllFound.Enabled:=False; lblStatus.Caption:= EmptyStr; lblCurrent.Caption:= EmptyStr; lblFound.Caption:= EmptyStr; if pgcSearch.ActivePage = tsStandard then cmbFindFileMask.SetFocus; end; procedure TfrmFindDlg.btnGoToPathClick(Sender: TObject); var AFile: TFile = nil; TargetFile: String; ArchiveFile: String; FileSource: IFileSource; begin if lsFoundedFiles.ItemIndex <> -1 then try StopSearch; if (lsFoundedFiles.Items.Objects[lsFoundedFiles.ItemIndex] <> nil) then begin TargetFile:= lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]; ArchiveFile:= ExtractWord(1, TargetFile, [ReversePathDelim]); TargetFile:= PathDelim + ExtractWord(2, TargetFile, [ReversePathDelim]); AFile:= TFileSystemFileSource.CreateFileFromFile(ArchiveFile); try FileSource:= GetArchiveFileSource(TFileSystemFileSource.GetFileSource, AFile); finally AFile.Free; end; if Assigned(FileSource) then begin frmMain.ActiveFrame.AddFileSource(FileSource, ExtractFilePath(TargetFile)); frmMain.ActiveFrame.SetActiveFile(ExtractFileName(TargetFile)); end; end else begin SetFileSystemPath(frmMain.ActiveFrame, ExtractFilePath(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex])); frmMain.ActiveFrame.SetActiveFile(ExtractFileName(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex])); end; Close; except on E: Exception do MessageDlg(E.Message, mtError, [mbOK], 0); end; end; procedure TfrmFindDlg.btnLastSearchClick(Sender: TObject); begin if Assigned(FLastSearchTemplate) then begin LoadTemplate(FLastSearchTemplate.SearchRecord); pgcSearch.ActivePage := tsStandard; cmbFindFileMask.SetFocus; end; end; procedure TfrmFindDlg.FillFindOptions(out FindOptions: TSearchTemplateRec; SetStartPath: Boolean); begin with FindOptions do begin if SetStartPath then StartPath := edtFindPathStart.Text else StartPath := ''; ExcludeDirectories := cmbExcludeDirectories.Text; FilesMasks := cmbFindFileMask.Text; ExcludeFiles := cmbExcludeFiles.Text; SearchDepth := cmbSearchDepth.ItemIndex - 1; RegExp := cbRegExp.Checked; IsPartialNameSearch := cbPartialNameSearch.Checked; FollowSymLinks := cbFollowSymLinks.Checked; FindInArchives := cbFindInArchive.Checked; { File attributes } AttributesPattern := edtAttrib.Text; { Date/time } DateTimeFrom := 0; DateTimeTo := 0; IsDateFrom := False; IsDateTo := False; IsTimeFrom := False; IsTimeTo := False; if cbDateFrom.Checked then begin IsDateFrom := True; DateTimeFrom := ZVDateFrom.Date; end; if cbDateTo.Checked then begin IsDateTo := True; DateTimeTo := ZVDateTo.Date; end; if cbTimeFrom.Checked then begin IsTimeFrom := True; DateTimeFrom := DateTimeFrom + ZVTimeFrom.Time; end; if cbTimeTo.Checked then begin IsTimeTo := True; DateTimeTo := DateTimeTo + ZVTimeTo.Time; end; { Not Older Than } IsNotOlderThan := cbNotOlderThan.Checked; NotOlderThan := seNotOlderThan.Value; NotOlderThanUnit := ComboIndexToTimeUnit[cmbNotOlderThanUnit.ItemIndex]; { File size } IsFileSizeFrom := cbFileSizeFrom.Checked; IsFileSizeTo := cbFileSizeTo.Checked; FileSizeFrom := seFileSizeFrom.Value; FileSizeTo := seFileSizeTo.Value; FileSizeUnit := ComboIndexToFileSizeUnit[cmbFileSizeUnit.ItemIndex]; { Find/replace text } IsFindText := cbFindText.Checked; FindText := cmbFindText.Text; IsReplaceText := cbReplaceText.Checked; ReplaceText := cmbReplaceText.Text; CaseSensitive := cbCaseSens.Checked; NotContainingText := cbNotContainingText.Checked; TextRegExp := cbTextRegExp.Checked; TextEncoding := cmbEncoding.Text; { Plugins } SearchPlugin := cmbPlugin.Text; frmContentPlugins.Save(FindOptions) end; end; procedure TfrmFindDlg.FindOptionsToDSXSearchRec( const AFindOptions: TSearchTemplateRec; out SRec: TDsxSearchRecord); begin with AFindOptions do begin FillByte(SRec{%H-}, SizeOf(SRec), 0); SRec.StartPath:= Copy(StartPath, 1, SizeOf(SRec.StartPath)); if IsPartialNameSearch then SRec.FileMask:= '*' + Copy(FilesMasks, 1, SizeOf(SRec.FileMask) - 2) + '*' else SRec.FileMask:= Copy(FilesMasks, 1, SizeOf(SRec.FileMask)); SRec.Attributes:= faAnyFile; // AttrStrToFileAttr? SRec.AttribStr:= Copy(AttributesPattern, 1, SizeOf(SRec.AttribStr)); SRec.CaseSensitive:=CaseSensitive; {Date search} SRec.IsDateFrom:=IsDateFrom; SRec.IsDateTo:=IsDateTo; SRec.DateTimeFrom:=DateTimeFrom; SRec.DateTimeTo:=DateTimeTo; {Time search} SRec.IsTimeFrom:=IsTimeFrom; SRec.IsTimeTo:=IsTimeTo; (* File size search *) SRec.IsFileSizeFrom:=IsFileSizeFrom; SRec.IsFileSizeTo:=IsFileSizeTo; SRec.FileSizeFrom:=FileSizeFrom; SRec.FileSizeTo:=FileSizeTo; (* Find text *) SRec.NotContainingText:=NotContainingText; SRec.IsFindText:=IsFindText; SRec.FindText:= Copy(FindText, 1, SizeOf(SRec.FindText)); (* Replace text *) SRec.IsReplaceText:=IsReplaceText; SRec.ReplaceText:= Copy(ReplaceText, 1, SizeOf(SRec.ReplaceText)); end; end; procedure TfrmFindDlg.StopSearch; begin if FSearchingActive then begin if (cbUsePlugin.Checked) and (cmbPlugin.ItemIndex<>-1) then begin DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallStopSearch; DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallFinalize; AfterSearchStopped; end; if Assigned(FFindThread) then begin FFindThread.Terminate; FFindThread := nil; end; end; end; class function TfrmFindDlg.Instance: TfrmFindDlg; begin if not Assigned(GfrmFindDlgInstance) then GfrmFindDlgInstance := TfrmFindDlg.Create(nil); Result := GfrmFindDlgInstance; end; procedure TfrmFindDlg.lbSearchTemplatesDblClick(Sender: TObject); begin LoadSelectedTemplate; end; procedure TfrmFindDlg.AfterSearchStopped; begin btnStop.Enabled:= False; btnStart.Enabled:= True; {$IF NOT (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} btnStart.Default:= True; {$ENDIF} btnClose.Enabled:= True; btnNewSearch.Enabled:= True; FSearchingActive := False; end; procedure TfrmFindDlg.btnStartClick(Sender: TObject); var sTemp, sPath : String; sr: TDsxSearchRecord; SearchTemplate, TmpTemplate: TSearchTemplateRec; PassedSelectedFiles: TStringList = nil; begin sTemp:= edtFindPathStart.Text; repeat sPath:= Copy2SymbDel(sTemp, ';'); if not mbDirectoryExists(sPath) then begin ShowMessage(Format(rsFindDirNoEx,[sPath])); Exit; end; until sTemp = EmptyStr; // add to find mask history InsertFirstItem(cmbFindFileMask.Text, cmbFindFileMask); // add to exclude directories history InsertFirstItem(cmbExcludeDirectories.Text, cmbExcludeDirectories); // add to exclude files history InsertFirstItem(cmbExcludeFiles.Text, cmbExcludeFiles); // add to search text history if cbFindText.Checked then begin InsertFirstItem(cmbFindText.Text, cmbFindText); // update search history, so it can be used in // Viewer/Editor opened from find files dialog gFirstTextSearch:= False; glsSearchHistory.Assign(cmbFindText.Items); end; // add to replace text history if cbReplaceText.Checked then begin InsertFirstItem(cmbReplaceText.Text, cmbReplaceText); // update replace history, so it can be used in // Editor opened from find files dialog (issue 0000539) glsReplaceHistory.Assign(cmbReplaceText.Items); end; if cbSelectedFiles.Checked and (FSelectedFiles.Count = 0) then begin ShowMessage(rsMsgNoFilesSelected); cbSelectedFiles.Checked:= False; Exit; end; // Show search results page pgcSearch.ActivePageIndex:= pgcSearch.PageCount - 1; if lsFoundedFiles.CanFocus then lsFoundedFiles.SetFocus; ClearResults; miShowAllFound.Enabled:=False; FSearchingActive := True; btnStop.Enabled:=True; {$IF NOT (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} btnStop.Default:=True; {$ENDIF} btnStart.Enabled:= False; btnClose.Enabled:= False; btnNewSearch.Enabled:= False; FillFindOptions(SearchTemplate, True); if not Assigned(FLastSearchTemplate) then FLastSearchTemplate := TSearchTemplate.Create; TmpTemplate := SearchTemplate; TmpTemplate.StartPath := ''; // Don't remember starting path. FLastSearchTemplate.SearchRecord := TmpTemplate; try if (cbUsePlugin.Checked) and (cmbPlugin.ItemIndex<>-1) then begin if DSXPlugins.LoadModule(cmbPlugin.ItemIndex) then begin FindOptionsToDSXSearchRec(SearchTemplate, sr); DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallInit(@SAddFileProc,@SUpdateStatusProc); DSXPlugins.GetDSXModule(cmbPlugin.ItemIndex).CallStartSearch(sr); end else StopSearch; end else begin if cbSelectedFiles.Checked then PassedSelectedFiles := FSelectedFiles; FFindThread := TFindThread.Create(SearchTemplate, PassedSelectedFiles); with FFindThread do begin Items := FoundedStringCopy; OnTerminate := @ThreadTerminate; // will update the buttons after search is finished end; FFindThread.Start; FUpdateTimer.Enabled := True; FUpdateTimer.OnTimer(FUpdateTimer); end; except StopSearch; raise; end; end; procedure TfrmFindDlg.FoundedStringCopyChanged(Sender: TObject); var sText: String; iTemp: Integer; begin if FoundedStringCopy.Count > 0 then begin iTemp:= FoundedStringCopy.Count - 1; Sender:= FoundedStringCopy.Objects[iTemp]; sText:= FoundedStringCopy[iTemp]; iTemp:= Length(sText); if iTemp > lsFoundedFiles.Tag then begin lsFoundedFiles.Tag:= iTemp; iTemp:= lsFoundedFiles.Canvas.TextWidth(sText); if iTemp > lsFoundedFiles.ScrollWidth then lsFoundedFiles.ScrollWidth:= iTemp + 32; end; lsFoundedFiles.Items.AddObject(sText, Sender); end; end; procedure TfrmFindDlg.btnViewClick(Sender: TObject); begin if lsFoundedFiles.ItemIndex <> -1 then ShowViewerByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); end; procedure TfrmFindDlg.btnWorkWithFoundClick(Sender: TObject); var I: Integer; sFileName: String; SearchResultFS: ISearchResultFileSource; FileList: TFileTree; aFile: TFile; Notebook: TFileViewNotebook; NewPage: TFileViewPage; begin StopSearch; FileList := TFileTree.Create; for i := 0 to lsFoundedFiles.Items.Count - 1 do begin sFileName:= lsFoundedFiles.Items[I]; try aFile := TFileSystemFileSource.CreateFileFromFile(sFileName); FileList.AddSubNode(aFile); except on EFileNotFound do; end; end; // Create search result file source. // Currently only searching FileSystem is supported. SearchResultFS := TSearchResultFileSource.Create; SearchResultFS.AddList(FileList, TFileSystemFileSource.GetFileSource); // Add new tab for search results. Notebook := frmMain.ActiveNotebook; NewPage := Notebook.NewPage(Notebook.ActiveView); NewPage.FileView.AddFileSource(SearchResultFS, SearchResultFS.GetRootDir); NewPage.FileView.FlatView := True; NewPage.MakeActive; Close; end; procedure TfrmFindDlg.cbFileSizeFromChange(Sender: TObject); begin UpdateColor(seFileSizeFrom, cbFileSizeFrom.Checked); EnableControl(cmbFileSizeUnit,cbFileSizeFrom.Checked or cbFileSizeTo.Checked); end; procedure TfrmFindDlg.cbFileSizeToChange(Sender: TObject); begin UpdateColor(seFileSizeTo, cbFileSizeTo.Checked); EnableControl(cmbFileSizeUnit,cbFileSizeFrom.Checked or cbFileSizeTo.Checked); end; procedure TfrmFindDlg.cbNotOlderThanChange(Sender: TObject); begin UpdateColor(seNotOlderThan, cbNotOlderThan.Checked); EnableControl(cmbNotOlderThanUnit,cbNotOlderThan.Checked); end; procedure TfrmFindDlg.cbReplaceTextChange(Sender: TObject); begin EnableControl(cmbReplaceText, cbReplaceText.Checked and cbFindText.Checked); cbNotContainingText.Checked := False; cbNotContainingText.Enabled := (not cbReplaceText.Checked and cbFindText.Checked); if not FUpdating and cmbReplaceText.Enabled and cmbReplaceText.CanFocus then begin cmbReplaceText.SetFocus; cmbReplaceText.SelectAll; end; end; procedure TfrmFindDlg.cbTimeFromChange(Sender: TObject); begin UpdateColor(ZVTimeFrom, cbTimeFrom.Checked); end; procedure TfrmFindDlg.cbTimeToChange(Sender: TObject); begin UpdateColor(ZVTimeTo, cbTimeTo.Checked); end; procedure TfrmFindDlg.ThreadTerminate(Sender:TObject); begin FFindThread := TFindThread(Sender); FUpdateTimer.OnTimer(FUpdateTimer); FUpdateTimer.Enabled := False; FFindThread := nil; AfterSearchStopped; end; procedure TfrmFindDlg.btnStopClick(Sender: TObject); begin StopSearch; end; procedure TfrmFindDlg.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose:= not Assigned(FFindThread); end; procedure TfrmFindDlg.btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmFindDlg.FormDestroy(Sender: TObject); begin FreeThenNil(FoundedStringCopy); FreeThenNil(DsxPlugins); end; procedure TfrmFindDlg.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // On LCLGTK2 default button on Enter does not work. VK_RETURN, VK_SELECT: begin Key := 0; if btnStart.Enabled then btnStart.Click else btnStop.Click; end; {$ENDIF} VK_ESCAPE: begin Key := 0; if FSearchingActive then StopSearch else Close; end; VK_1..VK_5: begin if Shift * KeyModifiersShortcut = [ssAlt] then begin pgcSearch.PageIndex := Key - VK_1; Key := 0; end; end; VK_TAB: begin if Shift * KeyModifiersShortcut = [ssCtrl] then begin pgcSearch.SelectNextPage(True); Key := 0; end else if Shift * KeyModifiersShortcut = [ssCtrl, ssShift] then begin pgcSearch.SelectNextPage(False); Key := 0; end; end; end; end; procedure TfrmFindDlg.frmFindDlgClose(Sender: TObject; var CloseAction: TCloseAction); begin glsMaskHistory.Assign(cmbFindFileMask.Items); glsSearchExcludeFiles.Assign(cmbExcludeFiles.Items); glsSearchExcludeDirectories.Assign(cmbExcludeDirectories.Items); if Assigned(FFrmAttributesEdit) then begin FFrmAttributesEdit.Close; FreeAndNil(FFrmAttributesEdit); end; end; procedure TfrmFindDlg.frmFindDlgShow(Sender: TObject); var I: Integer; begin pgcSearch.PageIndex:= 0; if cmbFindFileMask.Visible then cmbFindFileMask.SelectAll; cmbFindFileMask.Items.Assign(glsMaskHistory); cmbFindText.Items.Assign(glsSearchHistory); // if we already search text then use last searched text if not gFirstTextSearch then begin if glsSearchHistory.Count > 0 then cmbFindText.Text:= glsSearchHistory[0]; end; cmbReplaceText.Items.Assign(glsReplaceHistory); cmbExcludeFiles.Items.Assign(glsSearchExcludeFiles); cmbExcludeDirectories.Items.Assign(glsSearchExcludeDirectories); cbFindText.Checked := False; lsFoundedFiles.Canvas.Font := lsFoundedFiles.Font; cmbPlugin.Clear; for I:= 0 to DSXPlugins.Count-1 do begin cmbPlugin.AddItem(DSXPlugins.GetDSXModule(i).Name+' (' + DSXPlugins.GetDSXModule(I).Descr+' )',nil); end; if (cmbPlugin.Items.Count>0) then cmbPlugin.ItemIndex:=0; if pgcSearch.ActivePage = tsStandard then if cmbFindFileMask.CanFocus then cmbFindFileMask.SetFocus; cbSelectedFiles.Checked := FSelectedFiles.Count > 0; cbSelectedFiles.Enabled := cbSelectedFiles.Checked; end; procedure TfrmFindDlg.gbDirectoriesResize(Sender: TObject); begin pnlDirectoriesDepth.Width := gbDirectories.Width div 3; end; procedure TfrmFindDlg.lbSearchTemplatesSelectionChange(Sender: TObject; User: boolean); begin if lbSearchTemplates.ItemIndex < 0 then lblSearchContents.Caption := '' else begin with gSearchTemplateList.Templates[lbSearchTemplates.ItemIndex].SearchRecord do begin if StartPath <> '' then lblSearchContents.Caption := '"' + FilesMasks + '" -> "' + StartPath + '"' else lblSearchContents.Caption := '"' + FilesMasks + '"'; end; end; end; procedure TfrmFindDlg.LoadSelectedTemplate; var SearchTemplate: TSearchTemplate; begin if lbSearchTemplates.ItemIndex < 0 then Exit; SearchTemplate:= gSearchTemplateList.Templates[lbSearchTemplates.ItemIndex]; if Assigned(SearchTemplate) then begin FLastTemplateName := SearchTemplate.TemplateName; LoadTemplate(SearchTemplate.SearchRecord); end; end; procedure TfrmFindDlg.LoadTemplate(const Template: TSearchTemplateRec); begin with Template do begin if StartPath <> '' then edtFindPathStart.Text:= StartPath; cmbExcludeDirectories.Text:= ExcludeDirectories; cmbFindFileMask.Text:= FilesMasks; cmbExcludeFiles.Text:= ExcludeFiles; if (SearchDepth + 1 >= 0) and (SearchDepth + 1 < cmbSearchDepth.Items.Count) then cmbSearchDepth.ItemIndex:= SearchDepth + 1 else cmbSearchDepth.ItemIndex:= 0; cbRegExp.Checked := RegExp; cbPartialNameSearch.Checked := IsPartialNameSearch; cbFollowSymLinks.Checked := FollowSymLinks; cbFindInArchive.Checked := FindInArchives; // attributes edtAttrib.Text:= AttributesPattern; // file date/time cbDateFrom.Checked:= IsDateFrom; if IsDateFrom then ZVDateFrom.Date:= DateTimeFrom; cbDateTo.Checked:= IsDateTo; if IsDateTo then ZVDateTo.Date:= DateTimeTo; cbTimeFrom.Checked:= IsTimeFrom; if IsTimeFrom then ZVTimeFrom.Time:= DateTimeFrom; cbTimeTo.Checked:= IsTimeTo; if IsTimeTo then ZVTimeTo.Time:= DateTimeTo; // not older then cbNotOlderThan.Checked:= IsNotOlderThan; seNotOlderThan.Value:= NotOlderThan; cmbNotOlderThanUnit.ItemIndex := TimeUnitToComboIndex[NotOlderThanUnit]; // file size cbFileSizeFrom.Checked:= IsFileSizeFrom; cbFileSizeTo.Checked:= IsFileSizeTo; seFileSizeFrom.Value:= FileSizeFrom; seFileSizeTo.Value:= FileSizeTo; cmbFileSizeUnit.ItemIndex := FileSizeUnitToComboIndex[FileSizeUnit]; // find/replace text cbFindText.Checked:= IsFindText; cmbFindText.Text:= FindText; cbReplaceText.Checked:= IsReplaceText; cmbReplaceText.Text:= ReplaceText; cbCaseSens.Checked:= CaseSensitive; cbNotContainingText.Checked:= NotContainingText; cbTextRegExp.Checked:= TextRegExp; cmbEncoding.Text:= TextEncoding; // plugins cmbPlugin.Text:= SearchPlugin; frmContentPlugins.Load(Template); end; end; procedure TfrmFindDlg.lsFoundedFilesDblClick(Sender: TObject); begin if not FSearchingActive then btnGoToPathClick(Sender); end; procedure TfrmFindDlg.lsFoundedFilesKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (Shift = []) and (lsFoundedFiles.ItemIndex <> -1) then begin case Key of VK_F3: begin ShowViewerByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); Key := 0; end; VK_F4: begin ShowEditorByGlob(lsFoundedFiles.Items[lsFoundedFiles.ItemIndex]); Key := 0; end; VK_DELETE: begin miRemoveFromLlistClick(Sender); Key := 0; end; VK_RETURN: begin if not FSearchingActive then begin btnGoToPathClick(Sender); Key := 0; end; end; end; end; end; procedure TfrmFindDlg.miRemoveFromLlistClick(Sender: TObject); var i:Integer; begin if lsFoundedFiles.ItemIndex=-1 then Exit; if lsFoundedFiles.SelCount = 0 then Exit; for i:=lsFoundedFiles.Items.Count-1 downto 0 do if lsFoundedFiles.Selected[i] then lsFoundedFiles.Items.Delete(i); miShowAllFound.Enabled:=True; end; procedure TfrmFindDlg.miShowAllFoundClick(Sender: TObject); begin lsFoundedFiles.Clear; lsFoundedFiles.Items.AddStrings(FoundedStringCopy); miShowAllFound.Enabled:=False; end; procedure TfrmFindDlg.miShowInViewerClick(Sender: TObject); var sl:TStringList; i:Integer; begin if lsFoundedFiles.ItemIndex=-1 then Exit; sl:=TStringList.Create; try for i:=0 to lsFoundedFiles.Items.Count-1 do if lsFoundedFiles.Selected[i] then sl.Add(lsFoundedFiles.Items[i]); ShowViewer(sl); finally sl.Free; end; end; procedure TfrmFindDlg.seFileSizeFromChange(Sender: TObject); begin if not FUpdating then cbFileSizeFrom.Checked:= (seFileSizeFrom.Value > 0); end; procedure TfrmFindDlg.seFileSizeToChange(Sender: TObject); begin if not FUpdating then cbFileSizeTo.Checked:= (seFileSizeTo.Value > 0); end; procedure TfrmFindDlg.SelectTemplate(const ATemplateName: String); var i: Integer; begin for i := 0 to lbSearchTemplates.Count - 1 do if lbSearchTemplates.Items[i] = ATemplateName then begin lbSearchTemplates.ItemIndex := i; Break; end; end; procedure TfrmFindDlg.seNotOlderThanChange(Sender: TObject); begin if not FUpdating then cbNotOlderThan.Checked:= (seNotOlderThan.Value > 0); end; procedure TfrmFindDlg.tsLoadSaveShow(Sender: TObject); begin UpdateTemplatesList; if (lbSearchTemplates.Count > 0) and (lbSearchTemplates.ItemIndex = -1) then lbSearchTemplates.ItemIndex := 0; end; procedure TfrmFindDlg.UpdateTemplatesList; var OldIndex: Integer; begin OldIndex := lbSearchTemplates.ItemIndex; gSearchTemplateList.LoadToStringList(lbSearchTemplates.Items); if OldIndex <> -1 then lbSearchTemplates.ItemIndex := OldIndex; end; procedure TfrmFindDlg.OnUpdateTimer(Sender: TObject); begin if Assigned(FFindThread) then begin lblStatus.Caption := Format(rsFindScanned, [FFindThread.FilesScanned]); lblFound.Caption := Format(rsFindFound, [FFindThread.FilesFound]); lblCurrent.Caption := rsFindScanning + ': ' + FFindThread.CurrentDir; end; end; procedure TfrmFindDlg.ZVDateFromChange(Sender: TObject); begin if not FUpdating then cbDateFrom.Checked:= True; end; procedure TfrmFindDlg.ZVDateToChange(Sender: TObject); begin if not FUpdating then cbDateTo.Checked:= True; end; procedure TfrmFindDlg.ZVTimeFromChange(Sender: TObject); begin if not FUpdating then cbTimeFrom.Checked:= True; end; procedure TfrmFindDlg.ZVTimeToChange(Sender: TObject); begin if not FUpdating then cbTimeTo.Checked:= True; end; procedure TfrmFindDlg.OnAddAttribute(Sender: TObject); var sAttr: String; begin sAttr := edtAttrib.Text; if edtAttrib.SelStart > 0 then // Insert at caret position. Insert((Sender as TfrmAttributesEdit).AttrsAsText, sAttr, edtAttrib.SelStart + 1) else sAttr := sAttr + (Sender as TfrmAttributesEdit).AttrsAsText; edtAttrib.Text := sAttr; end; function TfrmFindDlg.InvalidRegExpr(AChecked: Boolean; const ARegExpr: String): Boolean; var sMsg: String; begin Result:= False; if AChecked then try ExecRegExpr(ARegExpr, ''); except on E: Exception do begin Result:= True; sMsg:= StringReplace(cbRegExp.Caption, '&', '', [rfReplaceAll]); MessageDlg(sMsg + ': ' + E.Message, mtError, [mbOK], 0); end; end; end; procedure TfrmFindDlg.pgcSearchChange(Sender: TObject); begin if (pgcSearch.ActivePage = tsStandard) and not cmbFindFileMask.Focused then begin if cmbFindFileMask.CanFocus then cmbFindFileMask.SetFocus; end; end; procedure TfrmFindDlg.SaveTemplate(SaveStartingPath: Boolean); var sName: String; SearchTemplate: TSearchTemplate; SearchRec: TSearchTemplateRec; begin if InvalidRegExpr(cbRegExp.Checked, cmbFindFileMask.Text) or InvalidRegExpr(cbTextRegExp.Checked, cmbFindText.Text) then Exit; sName := FLastTemplateName; if not InputQuery(rsFindSaveTemplateCaption, rsFindSaveTemplateTitle, sName) then begin ModalResult:= mrCancel; Exit; end; FLastTemplateName := sName; SearchTemplate := gSearchTemplateList.TemplateByName[sName]; if Assigned(SearchTemplate) then begin // TODO: Ask for overwriting existing template. FillFindOptions(SearchRec, SaveStartingPath); SearchTemplate.SearchRecord := SearchRec; Exit; end; SearchTemplate:= TSearchTemplate.Create; try SearchTemplate.TemplateName:= sName; FillFindOptions(SearchRec, SaveStartingPath); SearchTemplate.SearchRecord := SearchRec; gSearchTemplateList.Add(SearchTemplate); except FreeAndNil(SearchTemplate); raise; end; UpdateTemplatesList; SelectTemplate(FLastTemplateName); end; finalization FreeAndNil(GfrmFindDlgInstance); end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ushellctrls.pas�����������������������������������������������������������������0000755�0001750�0000144�00000121132�12651122255�016361� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ /*************************************************************************** ShellCtrls.pas ------------ ***************************************************************************/ ***************************************************************************** This file is part of the Lazarus Component Library (LCL) See the file COPYING.modifiedLGPL.txt, included in this distribution, for details about the license. ***************************************************************************** } unit uShellCtrls; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Graphics, LCLType, AvgLvlTree, ComCtrls, FileUtil, LazFileUtils, LazUtf8, LCLStrConsts; {$if defined(Windows) or defined(darwin)} {$define CaseInsensitiveFilenames} {$endif} {$IF defined(CaseInsensitiveFilenames) or defined(darwin)} {$DEFINE NotLiteralFilenames} {$ENDIF} type { TObjectTypes } TObjectType = (otFolders, otNonFolders, otHidden); TObjectTypes = set of TObjectType; TFileSortType = (fstNone, fstAlphabet, fstFoldersFirst); { Forward declaration of the classes } TCustomShellTreeView = class; TCustomShellListView = class; { TCustomShellTreeView } TCustomShellTreeView = class(TCustomTreeView) private FObjectTypes: TObjectTypes; FRoot: string; FShellListView: TCustomShellListView; FFileSortType: TFileSortType; FInitialRoot: String; { Setters and getters } function GetPath: string; procedure SetFileSortType(const AValue: TFileSortType); procedure SetObjectTypes(AValue: TObjectTypes); procedure SetPath(AValue: string); procedure SetRoot(const AValue: string); procedure SetShellListView(const Value: TCustomShellListView); protected procedure Loaded; override; { Other methods specific to Lazarus } function PopulateTreeNodeWithFiles( ANode: TTreeNode; ANodePath: string): Boolean; procedure PopulateWithBaseFiles; procedure DoSelectionChanged; override; function CanExpand(Node: TTreeNode): Boolean; override; public { Basic methods } constructor Create(AOwner: TComponent); override; destructor Destroy; override; { Methods specific to Lazarus - useful for other classes } class function GetBasePath: string; function GetRootPath: string; class procedure GetFilesInDir(const ABaseDir: string; AMask: string; AObjectTypes: TObjectTypes; AResult: TStrings; AFileSortType: TFileSortType = fstNone); { Other methods specific to Lazarus } function GetPathFromNode(ANode: TTreeNode): string; function GetSelectedNodePath: string; deprecated 'Use property Path instead'; procedure Refresh(ANode: TTreeNode); overload; { Properties } property ObjectTypes: TObjectTypes read FObjectTypes write SetObjectTypes; property ShellListView: TCustomShellListView read FShellListView write SetShellListView; property FileSortType: TFileSortType read FFileSortType write SetFileSortType; property Root: string read FRoot write SetRoot; property Path: string read GetPath write SetPath; { Protected properties which users may want to access, see bug 15374 } property Items; end; { TShellTreeView } TShellTreeView = class(TCustomShellTreeView) published { TCustomTreeView properties } property Align; property Anchors; property AutoExpand; property BorderSpacing; //property BiDiMode; property BackgroundColor; property BorderStyle; property BorderWidth; property Color; property Constraints; property Enabled; property ExpandSignType; property Font; property FileSortType; property HideSelection; property HotTrack; property Images; property Indent; //property ParentBiDiMode; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property ReadOnly; property RightClickSelect; property Root; property RowSelect; property ScrollBars; property SelectionColor; property ShowButtons; property ShowHint; property ShowLines; property ShowRoot; property StateImages; property TabOrder; property TabStop default True; property Tag; property ToolTips; property Visible; property OnAdvancedCustomDraw; property OnAdvancedCustomDrawItem; property OnChange; property OnChanging; property OnClick; property OnCollapsed; property OnCollapsing; property OnCustomDraw; property OnCustomDrawItem; property OnDblClick; property OnEdited; property OnEditing; property OnEnter; property OnExit; property OnExpanded; property OnExpanding; property OnGetImageIndex; property OnGetSelectedIndex; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnMouseWheelDown; property OnMouseWheelUp; property OnSelectionChanged; property OnShowHint; property OnUTF8KeyPress; property Options; property TreeLineColor; property TreeLinePenStyle; property ExpandSignColor; { TCustomShellTreeView properties } property ObjectTypes; property ShellListView; end; { TCustomShellListView } TCustomShellListView = class(TCustomListView) private FMask: string; FObjectTypes: TObjectTypes; FRoot: string; FShellTreeView: TCustomShellTreeView; { Setters and getters } procedure SetMask(const AValue: string); procedure SetShellTreeView(const Value: TCustomShellTreeView); procedure SetRoot(const Value: string); protected { Methods specific to Lazarus } procedure PopulateWithRoot(); procedure Resize; override; public { Basic methods } constructor Create(AOwner: TComponent); override; destructor Destroy; override; { Methods specific to Lazarus } function GetPathFromItem(ANode: TListItem): string; { Properties } property Mask: string read FMask write SetMask; // Can be used to conect to other controls property ObjectTypes: TObjectTypes read FObjectTypes write FObjectTypes; property Root: string read FRoot write SetRoot; property ShellTreeView: TCustomShellTreeView read FShellTreeView write SetShellTreeView; { Protected properties which users may want to access, see bug 15374 } property Items; end; { TShellListView } TShellListView = class(TCustomShellListView) public property Columns; published { TCustomListView properties The same as TListView excluding data properties } property Align; property Anchors; property BorderSpacing; property BorderStyle; property BorderWidth; // property Checkboxes; property Color default clWindow; // property ColumnClick; property Constraints; property DragCursor; property DragMode; // property DefaultItemHeight; // property DropTarget; property Enabled; // property FlatScrollBars; property Font; // property FullDrag; // property GridLines; property HideSelection; // property HotTrack; // property HotTrackStyles; // property HoverTime; property LargeImages; property MultiSelect; // property OwnerData; // property OwnerDraw; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property ReadOnly; property RowSelect; property ScrollBars; property ShowColumnHeaders; property ShowHint; // property ShowWorkAreas; property SmallImages; property SortColumn; property SortType; property StateImages; property TabStop; property TabOrder; property ToolTips; property Visible; property ViewStyle default vsReport; // property OnAdvancedCustomDraw; // property OnAdvancedCustomDrawItem; // property OnAdvancedCustomDrawSubItem; property OnChange; property OnClick; property OnColumnClick; property OnCompare; property OnContextPopup; // property OnCustomDraw; // property OnCustomDrawItem; // property OnCustomDrawSubItem; property OnDblClick; property OnDeletion; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnMouseWheelDown; property OnMouseWheelUp; property OnResize; property OnSelectItem; property OnStartDrag; property OnUTF8KeyPress; { TCustomShellListView properties } property ObjectTypes; property Root; property ShellTreeView; end; EShellCtrl = class(Exception); EInvalidPath = class(EShellCtrl); function DbgS(OT: TObjectTypes): String; overload; procedure Register; implementation {$ifdef windows} uses Windows; {$endif} function DbgS(OT: TObjectTypes): String; overload; begin Result := '['; if (otFolders in OT) then Result := Result + 'otFolders,'; if (otNonFolders in OT) then Result := Result + 'otNonFolders,'; if (otHidden in OT) then Result := Result + 'otHidden'; if Result[Length(Result)] = ',' then System.Delete(Result, Length(Result), 1); Result := Result + ']'; end; { uses ShlObj; // $I shellctrlswin32.inc procedure PopulateTreeViewWithShell(ATreeView: TCustomShellTreeView); var ShellFolder: IShellFolder = nil; Win32ObjectTypes: Integer; // pidl: LPITEMIDLIST; pidlParent: LPITEMIDLIST; begin SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, @pidl); SHGetDesktopFolder(ShellFolder); if ShellFolder = nil then Exit; // Converts the control data into Windows constants Win32ObjectTypes := 0; if otFolders in ATreeView.ObjectTypes then Win32ObjectTypes := Win32ObjectTypes or SHCONTF_FOLDERS; if otNonFolders in ATreeView.ObjectTypes then Win32ObjectTypes := Win32ObjectTypes or SHCONTF_NONFOLDERS; if otHidden in ATreeView.ObjectTypes then Win32ObjectTypes := Win32ObjectTypes or SHCONTF_INCLUDEHIDDEN; // Now gets the name of the desktop folder } { TCustomShellTreeView } procedure TCustomShellTreeView.SetShellListView( const Value: TCustomShellListView); var Tmp: TCustomShellListView; begin if FShellListView = Value then Exit; if Assigned(FShellListView) then begin Tmp := FShellListView; FShellListView := nil; Tmp.ShellTreeView := nil; end; FShellListView := Value; // Update the pair, it will then update itself // in the setter of this property // Updates only if necessary to avoid circular calls of the setters if Assigned(Value) and (Value.ShellTreeView <> Self) then Value.ShellTreeView := Self; end; procedure TCustomShellTreeView.Loaded; begin inherited Loaded; if (FInitialRoot = '') then PopulateWithBaseFiles() else SetRoot(FInitialRoot); end; procedure TCustomShellTreeView.SetRoot(const AValue: string); var RootNode: TTreeNode; begin if FRoot=AValue then exit; if (csLoading in ComponentState) then begin FInitialRoot := AValue; Exit; end; //Delphi raises an unspecified exception in this case, but don't crash the IDE at designtime if not (csDesigning in ComponentState) and (AValue <> '') and not DirectoryExistsUtf8(ExpandFilenameUtf8(AValue)) then Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidRoot,[ExpandFileNameUtf8(AValue)]); if (AValue = '') then FRoot := GetBasePath else FRoot:=AValue; Items.Clear; if FRoot = '' then begin PopulateWithBaseFiles() end else begin //Add a node for Root and expand it (issue #0024230) //Make FRoot contain fully qualified pathname, we need it later in GetPathFromNode() FRoot := ExpandFileNameUtf8(FRoot); //Set RootNode.Text to AValue so user can choose if text is fully qualified path or not RootNode := Items.AddChild(nil, AValue); RootNode.HasChildren := True; RootNode.Expand(False); end; if Assigned(ShellListView) then ShellListView.Root := FRoot; end; // ToDo: Optimize, now the tree is populated in constructor, SetRoot and SetFileSortType. // For some reason it does not show in performance really. procedure TCustomShellTreeView.SetFileSortType(const AValue: TFileSortType); var RootNode: TTreeNode; CurrPath: String; begin if FFileSortType=AValue then exit; FFileSortType:=AValue; if (csLoading in ComponentState) then Exit; CurrPath := GetPath; try BeginUpdate; Items.Clear; if FRoot = '' then PopulateWithBaseFiles() else begin RootNode := Items.AddChild(nil, FRoot); RootNode.HasChildren := True; RootNode.Expand(False); try SetPath(CurrPath); except // CurrPath may have been removed in the mean time by another process, just ignore on E: EInvalidPath do ;// end; end; finally EndUpdate; end; end; procedure TCustomShellTreeView.SetObjectTypes(AValue: TObjectTypes); var CurrPath: String; begin if FObjectTypes = AValue then Exit; FObjectTypes := AValue; if (csLoading in ComponentState) then Exit; CurrPath := GetPath; try BeginUpdate; Refresh(nil); try SetPath(CurrPath); except // CurrPath may have been removed in the mean time by another process, just ignore on E: EInvalidPath do ;// end; finally EndUpdate; end; end; function TCustomShellTreeView.CanExpand(Node: TTreeNode): Boolean; var OldAutoExpand: Boolean; begin Result:=inherited CanExpand(Node); if not Result then exit; OldAutoExpand:=AutoExpand; AutoExpand:=False; Node.DeleteChildren; Result := PopulateTreeNodeWithFiles(Node, GetPathFromNode(Node)); AutoExpand:=OldAutoExpand; end; constructor TCustomShellTreeView.Create(AOwner: TComponent); begin inherited Create(AOwner); FInitialRoot := ''; // Initial property values FObjectTypes:= [otFolders]; // Populating the base dirs is done in Loaded end; destructor TCustomShellTreeView.Destroy; begin ShellListView := nil; inherited Destroy; end; type { TFileItem } TFileItem = class(TObject) Name: string; isFolder: Boolean; //more data to sort by size, date... etc constructor Create(const DirInfo: TSearchRec); end; { TFileItem } constructor TFileItem.Create(const DirInfo:TSearchRec); begin Name:=DirInfo.Name; isFolder:=DirInfo.Attr and FaDirectory > 0; end; function FilesSortAlphabet(p1, p2: Pointer): Integer; var f1, f2: TFileItem; begin f1:=TFileItem(p1); f2:=TFileItem(p2); Result:=CompareText(f1.Name, f2.Name); end; function FilesSortFoldersFirst(p1,p2: Pointer): Integer; var f1, f2: TFileItem; begin f1:=TFileItem(p1); f2:=TFileItem(p2); if f1.isFolder=f2.isFolder then Result:=FilesSortAlphabet(p1,p2) else begin if f1.isFolder then Result:=-1 else Result:=1; end; end; function STVCompareFiles(f1, f2: Pointer): integer; begin Result:=CompareFilenames(AnsiString(f1),AnsiString(f2)); end; { Helper routine. Finds all files/directories directly inside a directory. Does not recurse inside subdirectories. AMask may contain multiple file masks separated by ; Don't add a final ; after the last mask. } class procedure TCustomShellTreeView.GetFilesInDir(const ABaseDir: string; AMask: string; AObjectTypes: TObjectTypes; AResult: TStrings; AFileSortType: TFileSortType); var DirInfo: TSearchRec; FindResult: Integer; IsDirectory, IsValidDirectory, IsHidden, AddFile: Boolean; ObjectData: TObject; SearchStr: string; MaskStr: string; Files: TList; FileItem: TFileItem; i: Integer; MaskStrings: TStringList; FileTree: TAvgLvlTree; ShortFilename: AnsiString; j: Integer; {$if defined(windows) and not defined(wince)} ErrMode : LongWord; {$endif} begin {$if defined(windows) and not defined(wince)} // disables the error dialog, while enumerating not-available drives // for example listing A: path, without diskette present. // WARNING: Since Application.ProcessMessages is called, it might effect some operations! ErrMode:=SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOALIGNMENTFAULTEXCEPT or SEM_NOGPFAULTERRORBOX or SEM_NOOPENFILEERRORBOX); try {$endif} if Trim(AMask) = '' then MaskStr := AllFilesMask else MaskStr := AMask; // The string list implements support for multiple masks separated // by semi-comma ";" MaskStrings := TStringList.Create; FileTree:=TAvgLvlTree.Create(@STVCompareFiles); try MaskStrings.Delimiter := ';'; MaskStrings.DelimitedText := MaskStr; if AFileSortType=fstNone then Files:=nil else Files:=TList.Create; j:=0; for i := 0 to MaskStrings.Count - 1 do begin if MaskStrings.IndexOf(MaskStrings[i]) < i then Continue; // From patch from bug 17761: TShellListView Mask: duplicated items if mask is " *.ext;*.ext " SearchStr := IncludeTrailingPathDelimiter(ABaseDir) + MaskStrings.Strings[i]; FindResult := FindFirstUTF8(SearchStr, faAnyFile, DirInfo); while FindResult = 0 do begin inc(j); if j=100 then begin Application.ProcessMessages; j:=0; end; ShortFilename := DirInfo.Name; IsDirectory := (DirInfo.Attr and FaDirectory = FaDirectory); IsValidDirectory := (ShortFilename <> '.') and (ShortFilename <> '..'); IsHidden := (DirInfo.Attr and faHidden = faHidden); //LinuxToWinAttr already does this in FF/FN //{$IFDEF Unix} //if (DirInfo.Name<>'') and (DirInfo.Name[1]='.') then // IsHidden:=true; //{$ENDIF} // First check if we show hidden files if IsHidden then AddFile := (otHidden in AObjectTypes) else AddFile := True; // If it is a directory, check if it is a valid one if IsDirectory then AddFile := AddFile and ((otFolders in AObjectTypes) and IsValidDirectory) else AddFile := AddFile and (otNonFolders in AObjectTypes); // AddFile identifies if the file is valid or not if AddFile then begin if not Assigned(Files) then begin // Mark if it is a directory (ObjectData <> nil) if IsDirectory then ObjectData := AResult else ObjectData := nil; if FileTree.Find(Pointer(ShortFilename))=nil then begin // From patch from bug 17761: TShellListView Mask: duplicated items if mask is " *.ext;*.ext " FileTree.Add(Pointer(ShortFilename)); AResult.AddObject(ShortFilename, ObjectData); end; end else Files.Add ( TFileItem.Create(DirInfo)); end; FindResult := FindNextUTF8(DirInfo); end; FindCloseUTF8(DirInfo); end; finally FileTree.Free; MaskStrings.Free; end; if Assigned(Files) then begin Objectdata:=AResult; case AFileSortType of fstAlphabet: Files.Sort(@FilesSortAlphabet); fstFoldersFirst: Files.Sort(@FilesSortFoldersFirst); end; for i:=0 to Files.Count-1 do begin FileItem:=TFileItem(Files[i]); if (i < Files.Count - 1) and (TFileItem(Files[i]).Name = TFileItem(Files[i + 1]).Name) then Continue; // cause Files is sorted // From patch from bug 17761: TShellListView Mask: duplicated items if mask is " *.ext;*.ext " if FileItem.isFolder then AResult.AddObject(FileItem.Name, ObjectData) else AResult.AddObject(FileItem.Name, nil); end; for i:=0 to Files.Count-1 do TFileItem(Files[i]).Free; Files.Free; end; {$if defined(windows) and not defined(wince)} finally SetErrorMode(ErrMode); end; {$endif} end; class function TCustomShellTreeView.GetBasePath: string; begin {$if defined(windows) and not defined(wince)} Result := ''; {$endif} {$ifdef wince} Result := '\'; {$endif} {$ifdef unix} Result := '/'; {$endif} end; function TCustomShellTreeView.GetRootPath: string; begin if FRoot <> '' then Result := FRoot else Result := GetBasePath(); if Result <> '' then Result := IncludeTrailingPathDelimiter(Result); end; { Returns true if at least one item was added, false otherwise } function TCustomShellTreeView.PopulateTreeNodeWithFiles( ANode: TTreeNode; ANodePath: string): Boolean; var i: Integer; Files: TStringList; NewNode: TTreeNode; function HasSubDir(Const ADir: String): Boolean; var SR: TSearchRec; FindRes: LongInt; Attr: Longint; IsHidden: Boolean; begin Result:=False; try Attr := faDirectory; if (otHidden in fObjectTypes) then Attr := Attr or faHidden; FindRes := FindFirstUTF8(AppendPathDelim(ADir) + AllFilesMask, Attr , SR); while (FindRes = 0) do begin if ((SR.Attr and faDirectory <> 0) and (SR.Name <> '.') and (SR.Name <> '..')) then begin IsHidden := ((Attr and faHidden) > 0); //LinuxToWinAttr already does this in FF/FN //{$IFDEF Unix} //if (SR.Name<>'') and (SR.Name[1]='.') then // IsHidden := True; //{$ENDIF} if not (IsHidden and (not ((otHidden in fObjectTypes)))) then begin Result := True; Break; end; end; FindRes := FindNextUtf8(SR); end; finally FindCloseUTF8(SR); end; //try end; begin Result := False; // avoids crashes in the IDE by not populating during design if (csDesigning in ComponentState) then Exit; Files := TStringList.Create; try GetFilesInDir(ANodePath, AllFilesMask, FObjectTypes, Files, FFileSortType); Result := Files.Count > 0; for i := 0 to Files.Count - 1 do begin NewNode := Items.AddChildObject(ANode, Files.Strings[i], nil); //@Files.Strings[i]); // This marks if the node is a directory (not wether or not there are files in the folder!) // We need this info (is it a folder?) elsewhere. if (fObjectTypes * [otNonFolders] = []) then NewNode.HasChildren := ((Files.Objects[i] <> nil) and HasSubDir(AppendpathDelim(ANodePath)+Files[i])) else NewNode.HasChildren := (Files.Objects[i] <> nil); end; finally Files.Free; end; end; procedure TCustomShellTreeView.PopulateWithBaseFiles; {$if defined(windows) and not defined(wince)} const DRIVE_UNKNOWN = 0; DRIVE_NO_ROOT_DIR = 1; DRIVE_REMOVABLE = 2; DRIVE_FIXED = 3; DRIVE_REMOTE = 4; DRIVE_CDROM = 5; DRIVE_RAMDISK = 6; var r: LongWord; Drives: array[0..128] of char; pDrive: PChar; NewNode: TTreeNode; begin // avoids crashes in the IDE by not populating during design if (csDesigning in ComponentState) then Exit; r := GetLogicalDriveStrings(SizeOf(Drives), Drives); if r = 0 then Exit; if r > SizeOf(Drives) then Exit; // raise Exception.Create(SysErrorMessage(ERROR_OUTOFMEMORY)); pDrive := Drives; while pDrive^ <> #0 do begin // r := GetDriveType(pDrive); NewNode := Items.AddChildObject(nil, ExcludeTrailingBackslash(pDrive), pDrive); NewNode.HasChildren := True; Inc(pDrive, 4); end; end; {$else} var NewNode: TTreeNode; begin // avoids crashes in the IDE by not populating during design // also do not populate before loading is done if ([csDesigning, csLoading] * ComponentState <> []) then Exit; // This allows showing "/" in Linux, but in Windows it makes no sense to show the base if GetBasePath() <> '' then begin NewNode := Items.AddChild(nil, GetBasePath()); NewNode.HasChildren := True; PopulateTreeNodeWithFiles(NewNode, GetBasePath()); NewNode.Expand(False); end else PopulateTreeNodeWithFiles(nil, GetBasePath()); end; {$endif} procedure TCustomShellTreeView.DoSelectionChanged; var ANode: TTreeNode; IsDirectory, MustBeDirectory: Boolean; CurrentNodePath: String; begin inherited DoSelectionChanged; ANode := Selected; if Assigned(FShellListView) and Assigned(ANode) then begin //You cannot rely on HasChildren here, because it can become FALSE when user //clicks the expand sign and folder is empty //Issue 0027571 MustBeDirectory := not (otNonFolders in FObjectTypes); CurrentNodePath := ChompPathDelim(GetPathFromNode(ANode)); IsDirectory := MustBeDirectory or DirectoryExistsUtf8(CurrentNodePath); if IsDirectory then begin //Note: the folder may have been deleted in the mean time //an exception will be raised by the next line in that case FShellListView.Root := GetPathFromNode(ANode) end else begin //At this point we cannot tell if item used to be a folder or a file if not FileExistsUtf8(CurrentNodePath) then Raise EShellCtrl.CreateFmt(sShellCtrlsSelectedItemDoesNotExists,[CurrentNodePath]); if Assigned(Anode.Parent) then FShellListView.Root := GetPathFromNode(ANode.Parent) else FShellListView.Root := ''; end; end; end; function TCustomShellTreeView.GetPathFromNode(ANode: TTreeNode): string; begin Result := ''; if Assigned(ANode) then begin // Build the path. In the future use ANode.Data instead of ANode.Text if (ANode.Parent = nil) and (GetRootPath <> '') then //This node is RootNode and GetRooPath contains fully qualified root path Result := '' else Result := ANode.Text; while (ANode.Parent <> nil) do begin ANode := ANode.Parent; if (ANode.Parent = nil) and (GetRootPath <> '') then //Node.Text of rootnode may not be fully qualified Result := GetRootPath + Result else Result := IncludeTrailingPathDelimiter(ANode.Text) + Result; end; if not FilenameIsAbsolute(Result) then Result := GetRootPath() + Result; // Include root directory end; end; function TCustomShellTreeView.GetSelectedNodePath: string; begin Result := GetPathFromNode(Selected); end; procedure TCustomShellTreeView.Refresh(ANode: TTreeNode); //nil will refresh root var RootNodeText: String; IsRoot: Boolean; begin if (Items.Count = 0) then Exit; //writeln('GetFirstVisibleNode.Text = "',Items.GetFirstVisibleNode.Text,'"'); IsRoot := (ANode = nil) or ((ANode = Items.GetFirstVisibleNode) and (GetRootPath <> '')); //writeln('IsRoot = ',IsRoot); if (ANode = nil) and (GetRootPath <> '') then ANode := Items.GetFirstVisibleNode; if IsRoot then begin if Assigned(ANode) then RootNodeText := ANode.Text //this may differ from FRoot, so don't use FRoot here else RootNodeText := GetRootPath; //writeln('IsRoot = TRUE, RootNodeText = "',RootNodeText,'"'); FRoot := #0; //invalidate FRoot SetRoot(RootNodeText); //re-initialize the entire tree end else begin ANode.Expand(False); end; end; function TCustomShellTreeView.GetPath: string; begin Result := GetPathFromNode(Selected); end; { SetPath: Path can be - Absolute like '/usr/lib' - Relative like 'foo/bar' This can be relative to: - Self.Root (which takes precedence over) - Current directory } procedure TCustomShellTreeView.SetPath(AValue: string); var sl: TStringList; Node: TTreeNode; i: integer; FQRootPath, RelPath: String; RootIsAbsolute: Boolean; IsRelPath: Boolean; function GetAdjustedNodeText(ANode: TTreeNode): String; begin if (ANode = Items.GetFirstVisibleNode) and (FQRootPath <> '') then begin if not RootIsAbsolute then Result := '' else Result := FQRootPath; end else Result := ANode.Text; end; function Exists(Fn: String): Boolean; //Fn should be fully qualified var Attr: LongInt; Dirs: TStringList; i: Integer; begin Result := False; Attr := FileGetAttrUtf8(Fn); //writeln('TCustomShellTreeView.SetPath.Exists: Attr = ', Attr); if (Attr = -1) then Exit; if not (otNonFolders in FObjectTypes) then Result := ((Attr and faDirectory) > 0) else Result := True; //writeln('TCustomShellTreeView.SetPath.Exists: Result = ',Result); end; function PathIsDriveRoot({%H-}Path: String): Boolean; {$if not (defined(windows) and not defined(wince))}inline;{$endif} //At least Win7 reports faHidden on all physical drive-roots (e.g. C:\) begin {$if defined(windows) and not defined(wince)} Result := (Length(Path) = 3) and (Upcase(Path[1]) in ['A'..'Z']) and (Path[2] = DriveSeparator) and (Path[3] in AllowDirectorySeparators); {$else} Result := False; {$endif windows} end; function ContainsHiddenDir(Fn: String): Boolean; var i: Integer; Attr: LongInt; Dirs: TStringList; RelPath: String; begin //if fn=root then always return false if (CompareFileNames(Fn, FQRootPath) = 0) then Result := False else begin Attr := FileGetAttrUtf8(Fn); Result := ((Attr and faHidden) = faHidden) and not PathIsDriveRoot(Fn); if not Result then begin //it also is not allowed that any folder above is hidden Fn := ChompPathDelim(Fn); Fn := ExtractFileDir(Fn); Dirs := TStringList.Create; try Dirs.StrictDelimiter := True; Dirs.Delimiter := PathDelim; Dirs.DelimitedText := Fn; Fn := ''; for i := 0 to Dirs.Count - 1 do begin if (i = 0) then Fn := Dirs.Strings[i] else Fn := Fn + PathDelim + Dirs.Strings[i]; if (Fn = '') then Continue; RelPath := CreateRelativePath(Fn, FQRootPath, False, True); //don't check if Fn now is "higher up the tree" than the current root if (RelPath = '') or ((Length(RelPath) > 1) and (RelPath[1] = '.') and (RelPath[2] = '.')) then begin //writeln('Fn is higher: ',Fn); Continue; end; {$if defined(windows) and not defined(wince)} if (Length(Fn) = 2) and (Fn[2] = ':') then Continue; {$endif} Attr := FileGetAttrUtf8(Fn); if (Attr <> -1) and ((Attr and faHidden) > 0) and not PathIsDriveRoot(Fn) then begin Result := True; //writeln('TCustomShellTreeView.SetPath.Exists: a subdir is hidden: Result := False'); Break; end; end; finally Dirs.Free; end; end; end; end; begin RelPath := ''; //writeln('SetPath: GetRootPath = "',getrootpath,'"',' AValue=',AValue); if (GetRootPath <> '') then //FRoot is already Expanded in SetRoot, just add PathDelim if needed FQRootPath := AppendPathDelim(GetRootPath) else FQRootPath := ''; RootIsAbsolute := (FQRootPath = '') or (FQRootPath = PathDelim) or ((Length(FQRootPath) = 3) and (FQRootPath[2] = ':') and (FQRootPath[3] = PathDelim)); //writeln('SetPath: FQRootPath = ',fqrootpath); //writeln('SetPath: RootIsAbsolute = ',RootIsAbsolute); //IsRelPath := not FileNameIsAbsolute(AValue); //writeln('SetPath: IsRelPath = ',not FileNameIsAbsolute(AValue)); if not FileNameIsAbsolute(AValue) then begin if Exists(FQRootPath + AValue) then begin //Expand it, since it may be in the form of ../../foo AValue := ExpandFileNameUtf8(FQRootPath + AValue); end else begin //don't expand Avalue yet, we may need it in error message if not Exists(ExpandFileNameUtf8(AValue)) then Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidPath,[ExpandFileNameUtf8(FQRootPath + AValue)]); //Directory (or file) exists //Make it fully qualified AValue := ExpandFileNameUtf8(AValue); end; end else begin //AValue is an absoulte path to begin with //if not DirectoryExistsUtf8(AValue) then if not Exists(AValue) then Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidPath,[AValue]); end; //AValue now is a fully qualified path and it exists //Now check if it is a subdirectory of FQRootPath //RelPath := CreateRelativePath(AValue, FQRootPath, False); IsRelPath := (FQRootPath = '') or TryCreateRelativePath(AValue, FQRootPath, False, True, RelPath); //writeln('TCustomShellTreeView.SetPath: '); //writeln(' IsRelPath = ',IsRelPath); //writeln(' RelPath = "',RelPath,'"'); //writeln(' FQRootPath = "',FQRootPath,'"'); if (not IsRelpath) or ((RelPath <> '') and ((Length(RelPath) > 1) and (RelPath[1] = '.') and (RelPath[2] = '.'))) then begin // CreateRelativePath retruns a string beginning with .. // so AValue is not a subdirectory of FRoot Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidPathRelative,[AValue, FQRootPath]); end; if (RelPath = '') and (FQRootPath = '') then RelPath := AValue; //writeln('RelPath = ',RelPath); if (RelPath = '') then begin //writeln('Root selected'); Node := Items.GetFirstVisibleNode; if Assigned(Node) then begin Node.Expanded := True; Node.Selected := True; end; Exit; end; if not (otHidden in FObjectTypes) and ContainsHiddenDir(AValue) then Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidPath,[AValue, FQRootPath]); sl := TStringList.Create; sl.Delimiter := PathDelim; sl.StrictDelimiter := True; sl.DelimitedText := RelPath; if (sl.Count > 0) and (sl[0] = '') then // This happens when root dir is empty sl[0] := PathDelim; // and PathDelim was the first char if (sl.Count > 0) and (sl[sl.Count-1] = '') then sl.Delete(sl.Count-1); //remove last empty string if (sl.Count = 0) then begin sl.Free; Exit; end; //for i := 0 to sl.Count - 1 do writeln('sl[',i:2,']="',sl[i],'"'); BeginUpdate; try Node := Items.GetFirstVisibleNode; //if assigned(node) then writeln('GetFirstVisibleNode = ',GetAdjustedNodeText(Node)); //Root node doesn't have Siblings in this case, we need one level deeper if (GetRootPath <> '') and Assigned(Node) then begin //writeln('Root node doesn''t have Siblings'); Node := Node.GetFirstVisibleChild; //writeln('Node = ',GetAdjustedNodeText(Node)); //if RootIsAbsolute then sl.Delete(0); end; for i := 0 to sl.Count-1 do begin { write('i=',i,' sl[',i,']=',sl[i],' '); if Node <> nil then write('GetAdjustedNodeText = ',GetAdjustedNodeText(Node)) else write('Node = NIL'); writeln; } while (Node <> Nil) and {$IF defined(CaseInsensitiveFilenames) or defined(NotLiteralFilenames)} (Utf8LowerCase(GetAdjustedNodeText(Node)) <> Utf8LowerCase(sl[i])) {$ELSE} (GetAdjustedNodeText(Node) <> sl[i]) {$ENDIF} do begin //write(' i=',i,' "',GetAdjustedNodeText(Node),' <> ',sl[i],' -> GetNextVisibleSibling -> '); Node := Node.GetNextVisibleSibling; { if Node <> nil then write('GetAdjustedNodeText = ',GetAdjustedNodeText(Node)) else write('Node = NIL'); writeln; } end; if Node <> Nil then begin Node.Expanded := True; Node.Selected := True; Node := Node.GetFirstVisibleChild; end else Break; end; finally sl.free; EndUpdate; end; end; { TCustomShellListView } procedure TCustomShellListView.SetShellTreeView( const Value: TCustomShellTreeView); var Tmp: TCustomShellTreeView; begin if FShellTreeView = Value then Exit; if FShellTreeView <> nil then begin Tmp := FShellTreeView; FShellTreeView := nil; Tmp.ShellListView := nil; end; FShellTreeView := Value; if not (csDestroying in ComponentState) then Clear; if Value <> nil then begin FRoot := Value.GetPathFromNode(Value.Selected); PopulateWithRoot(); // Also update the pair, but only if necessary to avoid circular calls of the setters if Value.ShellListView <> Self then Value.ShellListView := Self; end; end; procedure TCustomShellListView.SetMask(const AValue: string); begin if AValue <> FMask then begin FMask := AValue; Clear; Items.Clear; PopulateWithRoot(); end; end; procedure TCustomShellListView.SetRoot(const Value: string); begin if FRoot <> Value then begin //Delphi raises an unspecified exception in this case, but don't crash the IDE at designtime if not (csDesigning in ComponentState) and (Value <> '') and not DirectoryExistsUtf8(ExpandFilenameUtf8(Value)) then Raise EInvalidPath.CreateFmt(sShellCtrlsInvalidRoot,[Value]); FRoot := Value; Clear; Items.Clear; PopulateWithRoot(); end; end; constructor TCustomShellListView.Create(AOwner: TComponent); begin inherited Create(AOwner); // Initial property values ViewStyle := vsReport; ObjectTypes := [otNonFolders]; Self.Columns.Add; Self.Columns.Add; Self.Columns.Add; Self.Column[0].Caption := sShellCtrlsName; Self.Column[1].Caption := sShellCtrlsSize; Self.Column[2].Caption := sShellCtrlsType; // Initial sizes, necessary under Windows CE Resize; end; destructor TCustomShellListView.Destroy; begin ShellTreeView := nil; inherited Destroy; end; procedure TCustomShellListView.PopulateWithRoot(); var i: Integer; Files: TStringList; NewItem: TListItem; CurFileName, CurFilePath: string; CurFileSize: Int64; begin // avoids crashes in the IDE by not populating during design if (csDesigning in ComponentState) then Exit; // Check inputs if Trim(FRoot) = '' then Exit; Files := TStringList.Create; try TCustomShellTreeView.GetFilesInDir(FRoot, FMask, FObjectTypes, Files); for i := 0 to Files.Count - 1 do begin NewItem := Items.Add; CurFileName := Files.Strings[i]; CurFilePath := IncludeTrailingPathDelimiter(FRoot) + CurFileName; // First column - Name NewItem.Caption := CurFileName; // Second column - Size // The raw size in bytes is stored in the data part of the item CurFileSize := FileSize(CurFilePath); // in Bytes NewItem.Data := Pointer(PtrInt(CurFileSize)); if CurFileSize < 1024 then NewItem.SubItems.Add(Format(sShellCtrlsBytes, [IntToStr(CurFileSize)])) else if CurFileSize < 1024 * 1024 then NewItem.SubItems.Add(Format(sShellCtrlsKB, [IntToStr(CurFileSize div 1024)])) else NewItem.SubItems.Add(Format(sShellCtrlsMB, [IntToStr(CurFileSize div (1024 * 1024))])); // Third column - Type NewItem.SubItems.Add(ExtractFileExt(CurFileName)); end; Sort; finally Files.Free; end; end; procedure TCustomShellListView.Resize; begin inherited Resize; {$ifdef DEBUG_SHELLCTRLS} WriteLn(':>TCustomShellListView.HandleResize'); {$endif} // The correct check is with count, // if Column[0] <> nil then // will raise an exception if Self.Columns.Count < 3 then Exit; // If the space available is small, // alloc a larger percentage to the secondary // fields if Width < 400 then begin Column[0].Width := (50 * Width) div 100; Column[1].Width := (25 * Width) div 100; Column[2].Width := (25 * Width) div 100; end else begin Column[0].Width := (70 * Width) div 100; Column[1].Width := (15 * Width) div 100; Column[2].Width := (15 * Width) div 100; end; {$ifdef DEBUG_SHELLCTRLS} WriteLn(':<TCustomShellListView.HandleResize C0.Width=', Column[0].Width, ' C1.Width=', Column[1].Width, ' C2.Width=', Column[2].Width); {$endif} end; function TCustomShellListView.GetPathFromItem(ANode: TListItem): string; begin Result := IncludeTrailingPathDelimiter(FRoot) + ANode.Caption; end; procedure Register; begin RegisterComponents('Misc',[TShellTreeView, TShellListView]); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/foptionshotkeysedithotkey.lfm���������������������������������������������������0000644�0001750�0000144�00000012640�12470100066�021345� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmEditHotkey: TfrmEditHotkey Left = 337 Height = 465 Top = 120 Width = 458 BorderIcons = [biSystemMenu] ClientHeight = 465 ClientWidth = 458 Constraints.MinHeight = 200 Constraints.MinWidth = 200 OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter LCLVersion = '1.2.6.0' object lblShortcuts: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = Owner Left = 8 Height = 15 Top = 6 Width = 53 BorderSpacing.Top = 6 Caption = 'Shortcuts:' ParentColor = False end object pnlShortcuts: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnAddShortcut AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 8 Height = 0 Top = 28 Width = 442 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 8 BorderSpacing.Right = 8 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 TabOrder = 0 end object lblHotKeyConflict: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = pnlShortcuts AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom Left = 8 Height = 1 Top = 32 Width = 442 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 BorderSpacing.Bottom = 4 ParentColor = False ParentShowHint = False ShowHint = True Visible = False WordWrap = True end object lblParameters: TLabel AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = lblHotKeyConflict AnchorSideTop.Side = asrBottom Left = 8 Height = 15 Top = 39 Width = 189 BorderSpacing.Top = 6 Caption = '&Parameters (each in a separate line):' FocusControl = edtParameters ParentColor = False end object edtParameters: TMemo AnchorSideLeft.Control = pnlShortcuts AnchorSideTop.Control = lblParameters AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnShowCommandHelp Left = 8 Height = 328 Top = 54 Width = 442 HelpType = htKeyword Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Bottom = 2 ScrollBars = ssAutoBoth TabOrder = 1 WordWrap = False end object btnShowCommandHelp: TButton AnchorSideLeft.Control = pnlShortcuts AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cgHKControls Left = 8 Height = 10 Top = 386 Width = 442 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Top = 4 OnClick = btnShowCommandHelpClick TabOrder = 2 end object cgHKControls: TCheckGroup AnchorSideLeft.Control = pnlShortcuts AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnOK Left = 8 Height = 19 Top = 396 Width = 442 Anchors = [akLeft, akRight, akBottom] AutoFill = True AutoSize = True Caption = 'Only for these controls' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 OnItemClick = cgHKControlsItemClick TabOrder = 3 Visible = False end object btnOK: TBitBtn AnchorSideLeft.Control = pnlShortcuts AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 8 Height = 40 Top = 419 Width = 120 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Top = 4 BorderSpacing.Bottom = 6 Caption = '&OK' Constraints.MinHeight = 40 Constraints.MinWidth = 120 Default = True Kind = bkOK ModalResult = 1 TabOrder = 4 end object btnCancel: TBitBtn AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 330 Height = 40 Top = 419 Width = 120 Anchors = [akRight, akBottom] AutoSize = True BorderSpacing.Bottom = 6 Cancel = True Caption = '&Cancel' Constraints.MinHeight = 40 Constraints.MinWidth = 120 Kind = bkCancel ModalResult = 2 TabOrder = 5 end object btnAddShortcut: TSpeedButton AnchorSideTop.Control = btnRemoveShortcut AnchorSideRight.Control = btnRemoveShortcut Left = 406 Height = 22 Hint = 'Add new shortcut to sequence' Top = 6 Width = 22 Anchors = [akTop, akRight] OnClick = btnAddShortcutClick ShowHint = True ParentShowHint = False end object btnRemoveShortcut: TSpeedButton AnchorSideTop.Control = lblShortcuts AnchorSideRight.Control = pnlShortcuts AnchorSideRight.Side = asrBottom Left = 428 Height = 22 Hint = 'Remove last shortcut from sequence' Top = 6 Width = 22 Anchors = [akTop, akRight] OnClick = btnRemoveShortcutClick ShowHint = True ParentShowHint = False end end ������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmultirename.pas����������������������������������������������������������������0000644�0001750�0000144�00000107626�12612505011�016506� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : Pavel Letko (letcuv@centrum.cz) Advanced multi rename tool contributors: Copyright (C) 2007-2014 Koblov Alexander (Alexx2000@mail.ru) } unit fMultiRename; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Graphics, Forms, StdCtrls, Menus, SynRegExpr, Controls, LCLType, DCClassesUtf8, uClassesEx, uFile, uFileSource, StringHashList, Grids, ExtCtrls, DCXmlConfig, uOSForms; type PMultiRenamePreset = ^TMultiRenamePreset; TMultiRenamePreset = record FileName: String; Extension: String; FileNameStyle: Integer; ExtensionStyle: Integer; Find: String; Replace: String; RegExp: Boolean; UseSubs: Boolean; Counter: String; Interval: String; Width: Integer; Log: Boolean; LogFile: String; end; { TfrmMultiRename } TfrmMultiRename = class(TAloneForm) btnLoadPreset: TButton; btnSavePreset: TButton; btnDeletePreset: TButton; cbRegExp: TCheckBox; cbUseSubs: TCheckBox; cmbExtensionStyle: TComboBox; cbPresets: TComboBox; miDay2: TMenuItem; miHour1: TMenuItem; miMinute1: TMenuItem; miSecond1: TMenuItem; pnlOptions: TPanel; StringGrid: TStringGrid; gbPresets: TGroupBox; gbMaska: TGroupBox; lbName: TLabel; lbExt: TLabel; edName: TEdit; edExt: TEdit; btnNameMenu: TButton; btnExtMenu: TButton; gbFindReplace: TGroupBox; lbFind: TLabel; lbReplace: TLabel; edFind: TEdit; edReplace: TEdit; cmbNameStyle: TComboBox; gbCounter: TGroupBox; lbStNb: TLabel; lbInterval: TLabel; lbWidth: TLabel; edPoc: TEdit; edInterval: TEdit; cmbxWidth: TComboBox; btnRename: TButton; btnClose: TButton; gbLog: TGroupBox; edFile: TEdit; cbLog: TCheckBox; btnRestore: TButton; miPlugin: TMenuItem; N5: TMenuItem; miDay3: TMenuItem; miDay1: TMenuItem; miMonth3: TMenuItem; miMonth2: TMenuItem; miMonth1: TMenuItem; miYear1: TMenuItem; ppNameMenu: TPopupMenu; miNextName: TMenuItem; miName: TMenuItem; miNameX: TMenuItem; miNameXX: TMenuItem; N1: TMenuItem; miNextExtension: TMenuItem; Extension: TMenuItem; miExtensionX: TMenuItem; miExtensionXX: TMenuItem; N2: TMenuItem; miCounter: TMenuItem; N3: TMenuItem; miNext: TMenuItem; miYear: TMenuItem; miMonth: TMenuItem; miDay: TMenuItem; N4: TMenuItem; miHour: TMenuItem; miMinute: TMenuItem; miSecond: TMenuItem; procedure btnLoadPresetClick(Sender: TObject); procedure btnSavePresetClick(Sender: TObject); procedure btnDeletePresetClick(Sender: TObject); procedure cbRegExpChange(Sender: TObject); procedure cmbNameStyleChange(Sender: TObject); procedure StringGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure StringGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGridSelection(Sender: TObject; aCol, aRow: Integer); procedure StringGridTopLeftChanged(Sender: TObject); procedure edPocChange(Sender: TObject); procedure edIntervalChange(Sender: TObject); procedure btnRenameClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure btnRestoreClick(Sender: TObject); procedure btnNameMenuClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure miDay1Click(Sender: TObject); procedure miDay2Click(Sender: TObject); procedure miDay3Click(Sender: TObject); procedure miDayClick(Sender: TObject); procedure miHour1Click(Sender: TObject); procedure miHourClick(Sender: TObject); procedure miMinute1Click(Sender: TObject); procedure miMinuteClick(Sender: TObject); procedure miMonth1Click(Sender: TObject); procedure miMonth2Click(Sender: TObject); procedure miMonth3Click(Sender: TObject); procedure miMonthClick(Sender: TObject); procedure miSecond1Click(Sender: TObject); procedure miSecondClick(Sender: TObject); procedure miYear1Click(Sender: TObject); procedure miYearClick(Sender: TObject); procedure miPluginClick(Sender: TObject); procedure NameClick(Sender: TObject); procedure NameXClick(Sender: TObject); procedure NameXXClick(Sender: TObject); procedure ExtensionClick(Sender: TObject); procedure CounterClick(Sender: TObject); procedure btnExtMenuClick(Sender: TObject); procedure cbLogClick(Sender: TObject); procedure ExtensionXClick(Sender: TObject); procedure ExtensionXXClick(Sender: TObject); private IniPropStorage: TIniPropStorageEx; FLastPreset: String; FFileSource: IFileSource; FFiles: TFiles; FPresets: TStringHashList; // of PMultiRenamePreset FSourceRow: Integer; FMoveRow : Boolean; {Handles a single formatting string} function sHandleFormatString(const sFormatStr: string; ItemNr: Integer): string; {Function sReplace call sReplaceXX with parametres} function sReplace(sMask: string; ItemNr: Integer): string; {sReplaceXX doing N, Nx, Nx:y and E, Ex, Ex:y} function sReplaceXX(const sFormatStr, sOrig: string): string; {InsertMask is for write key symbols from buttons} procedure InsertMask(const Mask:string;edChoose:Tedit); procedure InsertMask(const Mask:string;editNr:PtrInt); {Get new file name for file with ItemIndex} function FreshText(ItemIndex: Integer): String; {Executes the main operation of renaming files} procedure RenameFiles; {Changes first char to uppercase and the rest to lowercase} function FirstCharToUppercaseUTF8(InputString: String): String; {Changes first char of first word to uppercase and the rest to lowercase} function FirstCharOfFirstWordToUppercaseUTF8(InputString: String): String; {Changes first char of every word to uppercase and the rest to lowercase} function FirstCharOfEveryWordToUppercaseUTF8(InputString: String): String; {Returns true if a byte represents a letter.} function IsLetter(AChar: AnsiChar): Boolean; {Applies style (uppercase, lowercase, etc.) to a string} function ApplyStyle(InputString: String; Style: Integer): String; {Load preset configuration} procedure LoadPresets; procedure LoadPresetsXml(AConfig: TXmlConfig); {Save preset configuration} procedure SavePresets; procedure SavePresetsXml(AConfig: TXmlConfig); {Loads specified preset from the configuration} procedure LoadPreset(PresetName: String); {Saves specified preset to the configuration} procedure SavePreset(PresetName: String); {Delete specified preset from configuration} procedure DeletePreset(PresetName: String); {Fills presets list with preset from configuration} procedure FillPresetsList; {Removes all presets from the presets list} procedure ClearPresetsList; public { Public declarations } constructor Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles); reintroduce; destructor Destroy; override; // Temporary for switching configuration from INI to XML procedure PublicSavePresets; procedure LoadPresetsIni(IniFile: TIniFileEx); procedure SavePresetsIni(IniFile: TIniFileEx); end; {initialization function} function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles):Boolean; implementation {$R *.lfm} uses LCLProc, FileUtil, uDebug, uLng, uGlobs, uFileProcs, DCOSUtils, DCStrUtils, fSelectTextRange, uShowMsg, uFileSourceUtil, uFileProperty, uFileFunctions; const sPresetsSection = 'MultiRenamePresets'; function ShowMultiRenameForm(aFileSource: IFileSource; var aFiles: TFiles):Boolean; begin Result:= True; try with TfrmMultiRename.Create(Application, aFileSource, aFiles) do begin Show; end; except Result:= False; end; end; constructor TfrmMultiRename.Create(TheOwner: TComponent; aFileSource: IFileSource; var aFiles: TFiles); begin FPresets := TStringHashList.Create(False); FFileSource := aFileSource; FFiles := aFiles; aFiles := nil; FSourceRow := -1; FMoveRow := False; inherited Create(TheOwner); end; destructor TfrmMultiRename.Destroy; begin inherited Destroy; ClearPresetsList; FreeAndNil(FPresets); if Assigned(FFiles) then FreeAndNil(FFiles); end; procedure TfrmMultiRename.FormCreate(Sender: TObject); begin // Localize File name style ComboBox ParseLineToList(rsMulRenFileNameStyleList, cmbNameStyle.Items); ParseLineToList(rsMulRenFileNameStyleList, cmbExtensionStyle.Items); // Set row count StringGrid.RowCount:= FFiles.Count + 1; StringGrid.FocusRectVisible := False; // Initialize property storage IniPropStorage:= InitPropStorage(Self); IniPropStorage.StoredValues.Add.DisplayName:= 'lsvwFile_Columns.Item0_Width'; IniPropStorage.StoredValues.Add.DisplayName:= 'lsvwFile_Columns.Item1_Width'; IniPropStorage.StoredValues.Add.DisplayName:= 'lsvwFile_Columns.Item2_Width'; // Set default values for controls. btnRestoreClick(nil); // Initialize presets. LoadPresets; FillPresetsList; cbPresets.Text := FLastPreset; LoadPreset(FLastPreset); end; procedure TfrmMultiRename.FormShow(Sender: TObject); begin with StringGrid.Columns do begin Items[0].Width:= StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item0_Width'], Items[0].Width); Items[1].Width:= StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item1_Width'], Items[1].Width); Items[2].Width:= StrToIntDef(IniPropStorage.StoredValue['lsvwFile_Columns.Item2_Width'], Items[2].Width); end; end; procedure TfrmMultiRename.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin SavePresets; CloseAction:= caFree; with StringGrid.Columns do begin IniPropStorage.StoredValue['lsvwFile_Columns.Item0_Width']:= IntToStr(Items[0].Width); IniPropStorage.StoredValue['lsvwFile_Columns.Item1_Width']:= IntToStr(Items[1].Width); IniPropStorage.StoredValue['lsvwFile_Columns.Item2_Width']:= IntToStr(Items[2].Width); end; end; procedure TfrmMultiRename.miDay1Click(Sender: TObject); begin InsertMask('[DD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDay2Click(Sender: TObject); begin InsertMask('[DDD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDay3Click(Sender: TObject); begin InsertMask('[DDDD]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miDayClick(Sender: TObject); begin InsertMask('[D]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miHour1Click(Sender: TObject); begin InsertMask('[hh]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miHourClick(Sender: TObject); begin InsertMask('[h]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMinute1Click(Sender: TObject); begin InsertMask('[nn]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMinuteClick(Sender: TObject); begin InsertMask('[n]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth1Click(Sender: TObject); begin InsertMask('[MM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth2Click(Sender: TObject); begin InsertMask('[MMM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonth3Click(Sender: TObject); begin InsertMask('[MMMM]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miMonthClick(Sender: TObject); begin InsertMask('[M]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miSecond1Click(Sender: TObject); begin InsertMask('[ss]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miSecondClick(Sender: TObject); begin InsertMask('[s]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miYear1Click(Sender: TObject); begin InsertMask('[YYYY]',ppNameMenu.Tag); end; procedure TfrmMultiRename.miYearClick(Sender: TObject); begin InsertMask('[Y]',ppNameMenu.Tag); end; function TfrmMultiRename.FreshText(ItemIndex: Integer): String; var bError: Boolean; sTmpName, sTmpExt: String; begin bError:= False; // Use mask sTmpName:=sReplace(edName.Text, ItemIndex); sTmpExt:=sReplace(edExt.Text, ItemIndex); // Join Result := sTmpName; if sTmpExt <> '' then Result := Result + '.' + sTmpExt; // Find and replace if cbRegExp.Checked and (edFind.Text <> '') then try Result:= ReplaceRegExpr(edFind.Text, Result, edReplace.Text, cbUseSubs.Checked); except Result:= rsMsgErrRegExpSyntax; bError:= True; end else Result:=StringReplace(Result,edFind.Text,edReplace.Text,[rfReplaceAll,rfIgnoreCase]); // File name style sTmpName := ExtractOnlyFileName(Result); sTmpExt := ExtractFileExt(Result); sTmpName := ApplyStyle(sTmpName, cmbNameStyle.ItemIndex); sTmpExt := ApplyStyle(sTmpExt, cmbExtensionStyle.ItemIndex); Result := sTmpName + sTmpExt; btnRename.Enabled:= not bError; if bError then begin edFind.Color := clRed; edFind.Font.Color := clWhite; end else begin edFind.Color := clWindow; edFind.Font.Color := clWindowText; end; end; procedure TfrmMultiRename.cmbNameStyleChange(Sender: TObject); begin StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.StringGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var tmpFile: TFile; DestRow: Integer; begin DestRow := StringGrid.Row; if (Shift = [ssShift]) then begin case Key of VK_UP: begin DestRow := StringGrid.Row - 1; end; VK_DOWN: begin DestRow := StringGrid.Row + 1 end; end; if (DestRow <> StringGrid.Row) and (0 < DestRow) and (DestRow < StringGrid.RowCount) then begin tmpFile := FFiles.Items[DestRow - 1]; FFiles.Items[DestRow - 1] := FFiles.Items[StringGrid.Row - 1]; FFiles.Items[StringGrid.Row - 1] := tmpFile; StringGridTopLeftChanged(StringGrid); end; end; end; procedure TfrmMultiRename.StringGridMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var SourceCol: Integer; begin if(Button = mbLeft) then begin StringGrid.MouseToCell(X, Y, SourceCol, FSourceRow); if (FSourceRow > 0) then begin FMoveRow := True; end; end; end; procedure TfrmMultiRename.StringGridMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin FMoveRow := False; end; end; procedure TfrmMultiRename.StringGridSelection(Sender: TObject; aCol, aRow: Integer); var tmpFile: TFile; begin if FMoveRow and (aRow <> FSourceRow)then begin tmpFile := FFiles.Items[aRow-1]; FFiles.Items[aRow-1] := FFiles.Items[FSourceRow-1]; FFiles.Items[FSourceRow-1] := tmpFile; FSourceRow := aRow; StringGridTopLeftChanged(StringGrid); end; end; procedure TfrmMultiRename.StringGridTopLeftChanged(Sender: TObject); var I, iRowCount: Integer; begin iRowCount:= StringGrid.TopRow + StringGrid.VisibleRowCount; if iRowCount > FFiles.Count then iRowCount:= FFiles.Count; for I:= StringGrid.TopRow to iRowCount do begin StringGrid.Cells[0, I]:= FFiles[I - 1].Name; StringGrid.Cells[1, I]:= FreshText(I - 1); StringGrid.Cells[2, I]:= FFiles[I - 1].Path; end; end; procedure TfrmMultiRename.cbRegExpChange(Sender: TObject); begin if cbRegExp.Checked then cbUseSubs.Checked:= Boolean(cbUseSubs.Tag) else begin cbUseSubs.Tag:= Integer(cbUseSubs.Checked); cbUseSubs.Checked:= False; end; cbUseSubs.Enabled:= cbRegExp.Checked; StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.btnLoadPresetClick(Sender: TObject); begin LoadPreset(cbPresets.Text); end; procedure TfrmMultiRename.btnSavePresetClick(Sender: TObject); begin if cbPresets.Text <> '' then begin if FPresets.Find(cbPresets.Text) <> -1 then begin if msgYesNo(Format(rsMsgPresetAlreadyExists, [cbPresets.Text])) = False then Exit; end; SavePreset(cbPresets.Text); if cbPresets.Items.IndexOf(cbPresets.Text) = -1 then cbPresets.Items.Add(cbPresets.Text); end; end; procedure TfrmMultiRename.btnDeletePresetClick(Sender: TObject); var Index: Integer; begin if cbPresets.Text <> '' then begin DeletePreset(cbPresets.Text); Index := cbPresets.Items.IndexOf(cbPresets.Text); if Index <> -1 then cbPresets.Items.Delete(Index); cbPresets.Text := ''; end; end; procedure TfrmMultiRename.edPocChange(Sender: TObject); var c:integer; begin c:=StrToIntDef(edPoc.Text,maxint); if c=MaxInt then with edPoc do //editbox only for numbers begin Text:='1'; SelectAll; end; StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.edIntervalChange(Sender: TObject); var c:integer; begin c:=StrToIntDef(edInterval.Text,maxint); if c=MaxInt then with edInterval do //editbox only for numbers begin Text:='1'; SelectAll; end; StringGridTopLeftChanged(StringGrid); end; procedure TfrmMultiRename.InsertMask(const Mask:string;edChoose:Tedit); var sTmp: String; I: Integer; begin if edChoose.SelLength > 0 then edChoose.SelText:= Mask // Replace selected text else begin sTmp:= edChoose.Text; I:= edChoose.SelStart + 1; // Insert on current position UTF8Insert(Mask, sTmp, I); Inc(I, UTF8Length(Mask)); edChoose.Text:= sTmp; edChoose.SelStart:= I - 1; end; end; procedure TfrmMultiRename.InsertMask(const Mask:string;editNr:PtrInt); begin if editNr = 0 then InsertMask(Mask, edName) else InsertMask(Mask, edExt); end; procedure TfrmMultiRename.btnRestoreClick(Sender: TObject); begin edName.Text:='[N]'; edName.SelStart:= UTF8Length(edName.Text); edExt.Text:='[E]'; edExt.SelStart:= UTF8Length(edExt.Text); edFind.Text:=''; edReplace.Text:=''; cbRegExp.Checked:=False; cbUseSubs.Checked:=False; cmbNameStyle.ItemIndex:=0; cmbExtensionStyle.ItemIndex:=0; edPoc.Text:='1'; edInterval.Text:='1'; cmbxWidth.ItemIndex:=0; cbLog.Checked:=False; edFile.Enabled:=cbLog.Checked; if (FFiles.Count > 0) then edFile.Text:= FFiles[0].Path + 'default.log' else edFile.Text:= 'default.log'; edFile.SelStart:= UTF8Length(edFile.Text); cbPresets.Text:=''; FLastPreset:=''; end; function TfrmMultiRename.sHandleFormatString(const sFormatStr: string; ItemNr: Integer): string; var aFile: TFile; Index: Integer; Counter: Int64; begin Result := ''; if Length(sFormatStr) > 0 then begin aFile := FFiles[ItemNr]; case sFormatStr[1] of '[',']': begin Result := sFormatStr; end; 'N': begin Result := sReplaceXX(sFormatStr, aFile.NameNoExt); end; 'E': begin Result := sReplaceXX(sFormatStr, aFile.Extension); end; 'C': begin Counter := StrToInt64Def(edPoc.Text, 1) + StrToInt64Def(edInterval.Text, 1) * ItemNr; Result := Format('%.' + cmbxWidth.Items[cmbxWidth.ItemIndex] + 'd', [Counter]); end; '=': begin Result := FormatFileFunction(UTF8Copy(sFormatStr, 2, UTF8Length(sFormatStr) - 1), FFiles.Items[ItemNr], FFileSource, True); for Index := 1 to Length(Result) - 1 do begin if Result[Index] in ['\', '/', ':', '*', '?', '"', '<', '>', '|'] then Result[Index] := '.'; end; end; else begin // Assume it is date/time formatting string ([h][n][s][Y][M][D]). with FFiles.Items[ItemNr] do if fpModificationTime in SupportedProperties then try Result := SysToUTF8(FormatDateTime(sFormatStr, ModificationTime)); except Result := sFormatStr; end; end; end; end; end; function TfrmMultiRename.sReplace(sMask: string; ItemNr: Integer): string; var iStart, iEnd: Integer; begin Result := ''; while Length(sMask) > 0 do begin iStart := Pos('[', sMask); if iStart > 0 then begin iEnd := Pos(']', sMask); if iEnd > 0 then begin Result := Result + Copy(sMask, 1, iStart - 1) + sHandleFormatString(Copy(sMask, iStart + 1, iEnd - iStart - 1), ItemNr); Delete(sMask, 1, iEnd); end else Break; end else Break; end; Result := Result + sMask; end; function TfrmMultiRename.sReplaceXX(const sFormatStr, sOrig: string): string; var iFrom, iTo, iSemiColon: Integer; begin if Length(sFormatStr) = 1 then Result := sOrig else begin iSemiColon := Pos(':', sFormatStr); if iSemiColon = 0 then begin iFrom := StrToIntDef(Copy(sFormatStr, 2, MaxInt), 1); iTo := iFrom; end else begin iFrom := StrToIntDef(Copy(sFormatStr, 2, iSemiColon - 2), 1); iTo := StrToIntDef(Copy(sFormatStr, iSemiColon + 1, MaxInt), MaxInt); end; Result := UTF8Copy(sOrig, iFrom, iTo - iFrom + 1); end; end; procedure TfrmMultiRename.btnNameMenuClick(Sender: TObject); begin ppNameMenu.AutoPopup:= False; FillContentFieldMenu(miPlugin, @miPluginClick); btnNameMenu.PopupMenu.PopUp; ppNameMenu.Tag:= 0; end; procedure TfrmMultiRename.btnExtMenuClick(Sender: TObject); begin ppNameMenu.AutoPopup:= False; FillContentFieldMenu(miPlugin, @miPluginClick); btnExtMenu.PopupMenu.PopUp; ppNameMenu.Tag:= 1; end; procedure TfrmMultiRename.NameClick(Sender: TObject); begin InsertMask('[N]',ppNameMenu.Tag); end; procedure TfrmMultiRename.NameXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].NameNoExt, ASelection) then begin InsertMask('[N' + IntToStr(ASelection.X) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.NameXXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].NameNoExt, ASelection) then begin InsertMask('[N' + IntToStr(ASelection.X) + ':' + IntToStr(ASelection.Y) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.ExtensionClick(Sender: TObject); begin InsertMask('[E]',ppNameMenu.Tag); end; procedure TfrmMultiRename.ExtensionXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].Extension, ASelection) then begin InsertMask('[E' + IntToStr(ASelection.X) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.ExtensionXXClick(Sender: TObject); var ASelection: TPoint; begin if ShowSelectTextRangeDlg(Self, Caption, FFiles[0].Extension, ASelection) then begin InsertMask('[E' + IntToStr(ASelection.X) + ':' + IntToStr(ASelection.Y) + ']', ppNameMenu.Tag); end; end; procedure TfrmMultiRename.miPluginClick(Sender: TObject); var sMask: String; MenuItem: TMenuItem absolute Sender; begin case MenuItem.Tag of 0: begin sMask := '[=DC().' + MenuItem.Hint + '{}]'; end; 1: begin sMask := '[=Plugin(' + MenuItem.Parent.Caption + ').' + MenuItem.Caption + '{}]'; end; 2: begin sMask := '[=Plugin(' + MenuItem.Parent.Parent.Caption + ').' + MenuItem.Parent.Caption + '{' + MenuItem.Caption + '}]'; end; end; InsertMask(sMask, ppNameMenu.Tag); end; procedure TfrmMultiRename.CounterClick(Sender: TObject); begin InsertMask('[C]',ppNameMenu.Tag); end; procedure TfrmMultiRename.cbLogClick(Sender: TObject); begin edFile.Enabled:=not edFile.Enabled; end; procedure TfrmMultiRename.btnRenameClick(Sender: TObject); begin RenameFiles; end; procedure TfrmMultiRename.btnCloseClick(Sender: TObject); begin Close; end; procedure TfrmMultiRename.RenameFiles; var hFile: THandle; c: Integer; sNewName, sResult: String; begin try if cbLog.Checked then begin if edFile.Text = EmptyStr then edFile.Text:= FFiles[0].Path + 'default.log'; mbForceDirectory(ExtractFileDir(edFile.Text)); if mbFileExists(edFile.Text) then begin hFile:= mbFileOpen(edFile.Text, fmOpenReadWrite); FileTruncate(hFile, 0); end else begin hFile:= mbFileCreate(edFile.Text); end; end; for c:= 0 to FFiles.Count - 1 do begin sResult:= FFiles[c].Name; sNewName:= FreshText(c); if RenameFile(FFileSource, FFiles[c], sNewName, True) = True then begin FFiles[c].Name := sNewName; // Write new name to the file object sResult := 'OK ' + sResult + ' -> ' + sNewName; end else begin sResult := 'FAILED' + sResult + ' -> ' + sNewName; end; if cbLog.Checked then FileWriteLn(hFile, sResult); end; finally if cbLog.Checked then FileClose(hFile); end; StringGridTopLeftChanged(StringGrid); end; function TfrmMultiRename.FirstCharToUppercaseUTF8(InputString: String): String; var FirstChar: String; begin if UTF8Length(InputString) > 0 then begin Result := UTF8LowerCase(InputString); FirstChar := UTF8Copy(Result, 1, 1); UTF8Delete(Result, 1, 1); Result := UTF8UpperCase(FirstChar) + Result; end else Result := ''; end; function TfrmMultiRename.FirstCharOfFirstWordToUppercaseUTF8(InputString: String): String; var SeparatorPos: Integer; begin InputString := UTF8LowerCase(InputString); Result := ''; // Search for first letter. for SeparatorPos := 1 to Length(InputString) do if IsLetter(InputString[SeparatorPos]) then break; Result := Copy(InputString, 1, SeparatorPos - 1) + FirstCharToUppercaseUTF8(Copy(InputString, SeparatorPos, Length(InputString) - SeparatorPos + 1)); end; function TfrmMultiRename.FirstCharOfEveryWordToUppercaseUTF8(InputString: String): String; var SeparatorPos: Integer; begin InputString := UTF8LowerCase(InputString); Result := ''; while InputString <> '' do begin // Search for first non-letter (word separator). for SeparatorPos := 1 to Length(InputString) do if not IsLetter(InputString[SeparatorPos]) then break; Result := Result + FirstCharToUppercaseUTF8(Copy(InputString, 1, SeparatorPos)); Delete(InputString, 1, SeparatorPos); end; end; function TfrmMultiRename.IsLetter(AChar: AnsiChar): Boolean; begin Result := // Ascii letters ( (AChar < #128) and (((AChar >= 'a') and (AChar <= 'z')) or ((AChar >= 'A') and (AChar <= 'Z'))) ) or // maybe Ansi or UTF8 (AChar >= #128); end; function TfrmMultiRename.ApplyStyle(InputString: String; Style: Integer): String; begin case Style of 1: Result := UTF8UpperCase(InputString); 2: Result := UTF8LowerCase(InputString); 3: Result := FirstCharOfFirstWordToUppercaseUTF8(InputString); 4: Result := FirstCharOfEveryWordToUppercaseUTF8(InputString); else Result := InputString; end; end; procedure TfrmMultiRename.LoadPresets; begin if Assigned(gIni) then LoadPresetsIni(gIni) else LoadPresetsXml(gConfig); end; procedure TfrmMultiRename.LoadPresetsIni(IniFile: TIniFileEx); var i: Integer; PresetIndex: Integer; PresetName: String; sPresetNr: String; PresetsCount: Integer; begin ClearPresetsList; FLastPreset := IniFile.ReadString(sPresetsSection, 'LastPreset', ''); PresetsCount := IniFile.ReadInteger(sPresetsSection, 'Presets', -1); for i := 0 to PresetsCount - 1 do begin sPresetNr := 'Preset' + IntToStr(I + 1); PresetName := IniFile.ReadString(sPresetsSection, sPresetNr + 'PresetName', ''); if PresetName <> '' then begin PresetIndex := FPresets.Add(PresetName, New(PMultiRenamePreset)); with PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)^ do begin FileName := IniFile.ReadString(sPresetsSection, sPresetNr + 'Filename', '[N]'); Extension := IniFile.ReadString(sPresetsSection, sPresetNr + 'Extension', '[E]'); FileNameStyle := IniFile.ReadInteger(sPresetsSection, sPresetNr + 'FilenameStyle', 0); ExtensionStyle := IniFile.ReadInteger(sPresetsSection, sPresetNr + 'ExtensionStyle', 0); Find := IniFile.ReadString(sPresetsSection, sPresetNr + 'Find', ''); Replace := IniFile.ReadString(sPresetsSection, sPresetNr + 'Replace', ''); RegExp := IniFile.ReadBool(sPresetsSection, sPresetNr + 'RegExp', False); UseSubs := IniFile.ReadBool(sPresetsSection, sPresetNr + 'UseSubs', False); Counter := IniFile.ReadString(sPresetsSection, sPresetNr + 'Counter', '1'); Interval := IniFile.ReadString(sPresetsSection, sPresetNr + 'Interval', '1'); Width := IniFile.ReadInteger(sPresetsSection, sPresetNr + 'Width', 0); Log := IniFile.ReadBool(sPresetsSection, sPresetNr + 'Log', False); LogFile := IniFile.ReadString(sPresetsSection, sPresetNr + 'LogFile', ''); end; end; end; end; procedure TfrmMultiRename.LoadPresetsXml(AConfig: TXmlConfig); var PresetName: String; APreset: PMultiRenamePreset; ANode: TXmlNode; begin ClearPresetsList; ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection); FLastPreset := AConfig.GetValue(ANode, 'LastPreset', ''); ANode := AConfig.FindNode(ANode, 'Presets'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('Preset') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', PresetName) then begin APreset := New(PMultiRenamePreset); FPresets.Add(PresetName, APreset); with APreset^ do begin FileName := AConfig.GetValue(ANode, 'Filename', '[N]'); Extension := AConfig.GetValue(ANode, 'Extension', '[E]'); FileNameStyle := AConfig.GetValue(ANode, 'FilenameStyle', 0); ExtensionStyle := AConfig.GetValue(ANode, 'ExtensionStyle', 0); Find := AConfig.GetValue(ANode, 'Find', ''); Replace := AConfig.GetValue(ANode, 'Replace', ''); RegExp := AConfig.GetValue(ANode, 'RegExp', False); UseSubs := AConfig.GetValue(ANode, 'UseSubs', False); Counter := AConfig.GetValue(ANode, 'Counter', '1'); Interval := AConfig.GetValue(ANode, 'Interval', '1'); Width := AConfig.GetValue(ANode, 'Width', 0); Log := AConfig.GetValue(ANode, 'Log/Enabled', False); LogFile := AConfig.GetValue(ANode, 'Log/File', ''); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TfrmMultiRename.SavePresets; begin if Assigned(gIni) then SavePresetsIni(gIni); SavePresetsXml(gConfig); gConfig.Save; end; procedure TfrmMultiRename.SavePresetsIni(IniFile: TIniFileEx); var i: Integer; sPresetNr: String; begin IniFile.EraseSection(sPresetsSection); IniFile.WriteString(sPresetsSection, 'LastPreset', FLastPreset); IniFile.WriteInteger(sPresetsSection, 'Presets', FPresets.Count); for i := 0 to FPresets.Count - 1 do with PMultiRenamePreset(FPresets.List[i]^.Data)^ do begin sPresetNr := 'Preset' + IntToStr(I + 1); IniFile.WriteString(sPresetsSection, sPresetNr + 'PresetName', FPresets.List[i]^.Key); IniFile.WriteString(sPresetsSection, sPresetNr + 'Filename', FileName); IniFile.WriteString(sPresetsSection, sPresetNr + 'Extension', Extension); IniFile.WriteInteger(sPresetsSection, sPresetNr + 'FilenameStyle', FileNameStyle); IniFile.WriteInteger(sPresetsSection, sPresetNr + 'ExtensionStyle', ExtensionStyle); IniFile.WriteString(sPresetsSection, sPresetNr + 'Find', Find); IniFile.WriteString(sPresetsSection, sPresetNr + 'Replace', Replace); IniFile.WriteBool(sPresetsSection, sPresetNr + 'RegExp', RegExp); IniFile.WriteBool(sPresetsSection, sPresetNr + 'UseSubs', UseSubs); IniFile.WriteString(sPresetsSection, sPresetNr + 'Counter', Counter); IniFile.WriteString(sPresetsSection, sPresetNr + 'Interval', Interval); IniFile.WriteInteger(sPresetsSection, sPresetNr + 'Width', Width); IniFile.WriteBool(sPresetsSection, sPresetNr + 'Log', Log); IniFile.WriteString(sPresetsSection, sPresetNr + 'LogFile', LogFile); end; end; procedure TfrmMultiRename.SavePresetsXml(AConfig: TXmlConfig); var i: Integer; ANode, SubNode: TXmlNode; begin ANode := AConfig.FindNode(AConfig.RootNode, sPresetsSection, True); AConfig.ClearNode(ANode); AConfig.SetValue(ANode, 'LastPreset', FLastPreset); ANode := AConfig.FindNode(ANode, 'Presets', True); for i := 0 to FPresets.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'Preset'); with PMultiRenamePreset(FPresets.List[i]^.Data)^ do begin AConfig.AddValue(SubNode, 'Name', FPresets.List[i]^.Key); AConfig.AddValue(SubNode, 'Filename', FileName); AConfig.AddValue(SubNode, 'Extension', Extension); AConfig.AddValue(SubNode, 'FilenameStyle', FileNameStyle); AConfig.AddValue(SubNode, 'ExtensionStyle', ExtensionStyle); AConfig.AddValue(SubNode, 'Find', Find); AConfig.AddValue(SubNode, 'Replace', Replace); AConfig.AddValue(SubNode, 'RegExp', RegExp); AConfig.AddValue(SubNode, 'UseSubs', UseSubs); AConfig.AddValue(SubNode, 'Counter', Counter); AConfig.AddValue(SubNode, 'Interval', Interval); AConfig.AddValue(SubNode, 'Width', Width); AConfig.SetValue(SubNode, 'Log/Enabled', Log); AConfig.SetValue(SubNode, 'Log/File', LogFile); end; end; end; procedure TfrmMultiRename.LoadPreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex = -1 then PresetIndex := FPresets.Add(PresetName, New(PMultiRenamePreset)); with PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)^ do begin edName.Text := FileName; edExt.Text := Extension; cmbNameStyle.ItemIndex := FileNameStyle; cmbExtensionStyle.ItemIndex := ExtensionStyle; edFind.Text := Find; edReplace.Text := Replace; cbRegExp.Checked := RegExp; cbUseSubs.Checked := UseSubs; edPoc.Text := Counter; edInterval.Text := Interval; cmbxWidth.ItemIndex := Width; cbLog.Checked := Log; edFile.Text := LogFile; end; FLastPreset := PresetName; StringGridTopLeftChanged(StringGrid); end; end; procedure TfrmMultiRename.SavePreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex = -1 then PresetIndex := FPresets.Add(PresetName, New(PMultiRenamePreset)); with PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)^ do begin FileName := edName.Text; Extension := edExt.Text; FileNameStyle := cmbNameStyle.ItemIndex; ExtensionStyle := cmbExtensionStyle.ItemIndex; Find := edFind.Text; Replace := edReplace.Text; RegExp := cbRegExp.Checked; UseSubs := cbUseSubs.Checked; Counter := edPoc.Text; Interval := edInterval.Text; Width := cmbxWidth.ItemIndex; Log := cbLog.Checked; LogFile := edFile.Text; end; FLastPreset := PresetName; SavePresets; end; end; procedure TfrmMultiRename.DeletePreset(PresetName: String); var PresetIndex: Integer; begin if PresetName <> '' then begin PresetIndex := FPresets.Find(PresetName); if PresetIndex <> -1 then begin Dispose(PMultiRenamePreset(FPresets.List[PresetIndex]^.Data)); FPresets.Remove(PresetName); FLastPreset := ''; SavePresets; end; end; end; procedure TfrmMultiRename.FillPresetsList; var i: Integer; PresetName: String; begin cbPresets.Clear; for i := 0 to FPresets.Count - 1 do begin PresetName := FPresets.List[i]^.Key; if cbPresets.Items.IndexOf(PresetName) = -1 then cbPresets.Items.Add(PresetName); end; end; procedure TfrmMultiRename.ClearPresetsList; var i: Integer; begin for i := 0 to FPresets.Count - 1 do Dispose(PMultiRenamePreset(FPresets.List[i]^.Data)); FPresets.Clear; end; // Temporary for switching configuration from INI to XML procedure TfrmMultiRename.PublicSavePresets; begin SavePresetsXml(gConfig); end; end. ����������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uwfxmodule.pas������������������������������������������������������������������0000644�0001750�0000144�00000067670�12647513071�016236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Virtual File System - class for manage WFX plugins (Version 1.3) Copyright (C) 2007-2013 Koblov Alexander (Alexx2000@mail.ru) Callback functions based on: Total Commander filesystem plugins debugger Author: Pavel Dubrovsky 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 uWFXmodule; {$mode objfpc}{$H+} interface uses SysUtils, Classes, WfxPlugin, uWFXprototypes, dynlibs, DCClassesUtf8, Extension, DCBasicTypes, DCXmlConfig; const WFX_SUCCESS = 0; WFX_NOTSUPPORTED = -10; WFX_ERROR = -20; type { TWfxFindData } TWfxFindData = record FileAttributes : TFileAttrs; CreationTime, LastAccessTime, LastWriteTime : TDateTime; FileSize : Int64; Reserved0, Reserved1 : LongWord; FileName : String; AlternateFileName : String; case Boolean of True: ( FindDataA: TWin32FindData; ); False: ( FindDataW: TWin32FindDataW; ); end; { TWFXModule } TWFXModule = class private FModuleHandle: TLibHandle; // Handle to .DLL or .so FModuleFileName: String; FBackgroundFlags: Integer; public { Mandatory } FsInit : TFsInit; FsFindFirst : TFsFindFirst; FsFindNext : TFsFindNext; FsFindClose : TFsFindClose; { Optional } FsSetCryptCallback: TFsSetCryptCallback; FsGetDefRootName : TFsGetDefRootName; FsGetFile : TFsGetFile; FsPutFile : TFsPutFile; FsDeleteFile : TFsDeleteFile; FsRemoveDir : TFsRemoveDir; FsExecuteFile : TFsExecuteFile; FsMkDir : TFsMkDir; FsStatusInfo : TFsStatusInfo; FsSetDefaultParams : TFsSetDefaultParams; FsContentPluginUnloading : TFsContentPluginUnloading; //--------------------- FsSetAttr:TFsSetAttr; FsSetTime:TFsSetTime; FsExtractCustomIcon:TFsExtractCustomIcon; FsRenMovFile:TFsRenMovFile; FsDisconnect:TFsDisconnect; FsGetPreviewBitmap:TFsGetPreviewBitmap; FsLinksToLocalFiles:TFsLinksToLocalFiles; FsGetLocalName:TFsGetLocalName; //--------------------- FsGetBackgroundFlags: TFsGetBackgroundFlags; //--------------------- FsContentGetDetectString:TFsContentGetDetectString; FsContentGetSupportedField:TFsContentGetSupportedField; FsContentGetValue:TFsContentGetValue; FsContentSetDefaultParams:TFsContentSetDefaultParams; FsContentStopGetValue:TFsContentStopGetValue; FsContentGetDefaultSortOrder:TFsContentGetDefaultSortOrder; FsContentGetSupportedFieldFlags:TFsContentGetSupportedFieldFlags; FsContentSetValue:TFsContentSetValue; FsContentGetDefaultView:TFsContentGetDefaultView; { Unicode } FsInitW: TFsInitW; FsFindFirstW: TFsFindFirstW; FsFindNextW: TFsFindNextW; //--------------------- FsSetCryptCallbackW: TFsSetCryptCallbackW; FsMkDirW: TFsMkDirW; FsExecuteFileW: TFsExecuteFileW; FsRenMovFileW: TFsRenMovFileW; FsGetFileW: TFsGetFileW; FsPutFileW: TFsPutFileW; FsDeleteFileW: TFsDeleteFileW; FsRemoveDirW: TFsRemoveDirW; FsDisconnectW: TFsDisconnectW; FsSetAttrW: TFsSetAttrW; FsSetTimeW: TFsSetTimeW; FsStatusInfoW: TFsStatusInfoW; FsExtractCustomIconW: TFsExtractCustomIconW; FsGetPreviewBitmapW: TFsGetPreviewBitmapW; FsGetLocalNameW: TFsGetLocalNameW; //----------------------- FsContentGetValueW: TFsContentGetValueW; FsContentStopGetValueW: TFsContentStopGetValueW; FsContentSetValueW: TFsContentSetValueW; FsContentGetDefaultViewW: TFsContentGetDefaultViewW; { Extension API } ExtensionInitialize: TExtensionInitializeProc; ExtensionFinalize: TExtensionFinalizeProc; public function WfxFindFirst(Path: String; var FindData: TWfxFindData): THandle; function WfxFindNext(Hdl: THandle; var FindData: TWfxFindData): Boolean; procedure WfxStatusInfo(RemoteDir: String; InfoStartEnd, InfoOperation: Integer); function WfxExecuteFile(MainWin: HWND; var RemoteName: String; Verb: String): Integer; function WfxRenMovFile(OldName, NewName: String; Move, OverWrite: Boolean; RemoteInfo: PRemoteInfo): Integer; function WfxGetFile(RemoteName, LocalName: String; CopyFlags: Integer; RemoteInfo: PRemoteInfo): Integer; function WfxPutFile(LocalName, RemoteName: String; CopyFlags: Integer): Integer; function WfxSetAttr(RemoteName: String; NewAttr: LongInt): Boolean; {en Each of CreationTime, LastAccessTime, LastWriteTime may be @nil to leave the value unchanged. } function WfxSetTime(RemoteName: String; pCreationTime, pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean; function WfxMkDir(const sBasePath, sDirName: String): LongInt; function WfxRemoveDir(const sDirName: String): Boolean; function WfxDeleteFile(const sFileName: String): Boolean; function WfxGetLocalName(var sFileName: String): Boolean; function WfxDisconnect(const DisconnectRoot: String): Boolean; public constructor Create; destructor Destroy; override; function LoadModule(const sName: String):Boolean; {Load plugin} procedure UnloadModule; procedure VFSInit(Data: PtrInt); function VFSConfigure(Parent: THandle):Boolean; function VFSRootName: String; function IsLoaded: Boolean; property BackgroundFlags: Integer read FBackgroundFlags write FBackgroundFlags; end; { TWFXModuleList } TWFXModuleList = class(TStringList) private function GetAEnabled(Index: Integer): Boolean; function GetAFileName(Index: Integer): String; function GetAName(Index: Integer): String; procedure SetAEnabled(Index: Integer; const AValue: Boolean); procedure SetAFileName(Index: Integer; const AValue: String); procedure SetAName(Index: Integer; const AValue: String); public procedure Load(Ini: TIniFileEx); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(Ini: TIniFileEx); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function Add(Ext: String; FileName: String): Integer; reintroduce; function FindFirstEnabledByName(Name: String): Integer; property Name[Index: Integer]: String read GetAName write SetAName; property FileName[Index: Integer]: String read GetAFileName write SetAFileName; property Enabled[Index: Integer]: Boolean read GetAEnabled write SetAEnabled; end; function GetErrorMsg(iErrorMsg: LongInt): String; implementation uses LazUTF8, uLng, FileUtil, uGlobsPaths, uOSUtils, uWfxPluginUtil, fDialogBox, uDebug, DCOSUtils, DCStrUtils, DCConvertEncoding; const WfxIniFileName = 'wfx.ini'; function GetErrorMsg(iErrorMsg: LongInt): String; begin case iErrorMsg of WFX_ERROR: Result:= 'Unknown error!'; WFX_NOTSUPPORTED, FS_FILE_NOTSUPPORTED: Result:= rsMsgErrNotSupported; FS_FILE_NOTFOUND: Result:= 'File not found!'; FS_FILE_READERROR: Result:= rsMsgErrERead; FS_FILE_WRITEERROR: Result:= rsMsgErrEWrite; FS_FILE_USERABORT: Result:= rsMsgErrEAborted; end; end; { TWfxFindData } procedure ConvertFindData(var FindData: TWfxFindData; AnsiData: Boolean); begin with FindData do begin // Convert file attributes FileAttributes:= FindDataW.dwFileAttributes; CreationTime:= WfxFileTimeToDateTime(FindDataW.ftCreationTime); LastAccessTime:= WfxFileTimeToDateTime(FindDataW.ftLastAccessTime); LastWriteTime:= WfxFileTimeToDateTime(FindDataW.ftLastWriteTime); Int64Rec(FileSize).Lo:= FindDataW.nFileSizeLow; Int64Rec(FileSize).Hi:= FindDataW.nFileSizeHigh; Reserved0:= FindDataW.dwReserved0; Reserved1:= FindDataW.dwReserved1; // Convert file name if AnsiData then begin FileName:= CeSysToUtf8(FindDataA.cFileName); AlternateFileName:= CeSysToUtf8(FindDataA.cAlternateFileName); end else begin FileName:= UTF16ToUTF8(UnicodeString(FindDataW.cFileName)); AlternateFileName:= UTF16ToUTF8(UnicodeString(FindDataW.cAlternateFileName)); end; end; end; { TWFXModule } function TWFXModule.WfxFindFirst(Path: String; var FindData: TWfxFindData): THandle; begin try if Assigned(FsFindFirstW) then begin Result:= FsFindFirstW(PWideChar(UTF8Decode(Path)), FindData.FindDataW); if Result <> wfxInvalidHandle then ConvertFindData(FindData, False); end else if Assigned(FsFindFirst) then begin Result:= FsFindFirst(PAnsiChar(CeUtf8ToSys(Path)), FindData.FindDataA); if Result <> wfxInvalidHandle then ConvertFindData(FindData, True); end; except on E: Exception do begin Result:= wfxInvalidHandle; DCDebug(ClassName + '.WfxFindFirst(). Error: ' + E.Message); end; end; end; function TWFXModule.WfxFindNext(Hdl: THandle; var FindData: TWfxFindData): Boolean; begin if Assigned(FsFindFirstW) then begin Result:= FsFindNextW(Hdl, FindData.FindDataW); if Result then ConvertFindData(FindData, False); end else if Assigned(FsFindFirst) then begin Result:= FsFindNext(Hdl, FindData.FindDataA); if Result then ConvertFindData(FindData, True); end else Result:= False; end; procedure TWFXModule.WfxStatusInfo(RemoteDir: String; InfoStartEnd, InfoOperation: Integer); begin if Assigned(FsStatusInfoW) then FsStatusInfoW(PWideChar(UTF8Decode(RemoteDir)), InfoStartEnd, InfoOperation) else if Assigned(FsStatusInfo) then FsStatusInfo(PAnsiChar(CeUtf8ToSys(RemoteDir)), InfoStartEnd, InfoOperation); end; function TWFXModule.WfxExecuteFile(MainWin: HWND; var RemoteName: String; Verb: String): Integer; var pacRemoteName: PAnsiChar; pwcRemoteName: PWideChar; begin Result:= WFX_NOTSUPPORTED; if Assigned(FsExecuteFileW) then begin pwcRemoteName:= GetMem(MAX_PATH * SizeOf(WideChar)); StrPCopyW(pwcRemoteName, UTF8Decode(RemoteName)); Result:= FsExecuteFileW(MainWin, pwcRemoteName, PWideChar(UTF8Decode(Verb))); if Result = FS_EXEC_SYMLINK then RemoteName:= UTF16ToUTF8(UnicodeString(pwcRemoteName)); FreeMem(pwcRemoteName); end else if Assigned(FsExecuteFile) then begin pacRemoteName:= GetMem(MAX_PATH); StrPCopy(pacRemoteName, CeUtf8ToSys(RemoteName)); Result:= FsExecuteFile(MainWin, pacRemoteName, PAnsiChar(CeUtf8ToSys(Verb))); if Result = FS_EXEC_SYMLINK then RemoteName:= CeSysToUtf8(StrPas(pacRemoteName)); FreeMem(pacRemoteName); end; end; function TWFXModule.WfxRenMovFile(OldName, NewName: String; Move, OverWrite: Boolean; RemoteInfo: PRemoteInfo): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsRenMovFileW) then Result:= FsRenMovFileW(PWideChar(UTF8Decode(OldName)), PWideChar(UTF8Decode(NewName)), Move, OverWrite, RemoteInfo) else if Assigned(FsRenMovFile) then Result:= FsRenMovFile(PAnsiChar(CeUtf8ToSys(OldName)), PAnsiChar(CeUtf8ToSys(NewName)), Move, OverWrite, RemoteInfo); end; function TWFXModule.WfxGetFile(RemoteName, LocalName: String; CopyFlags: Integer; RemoteInfo: PRemoteInfo): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsGetFileW) then Result:= FsGetFileW(PWideChar(UTF8Decode(RemoteName)), PWideChar(UTF8Decode(LocalName)), CopyFlags, RemoteInfo) else if Assigned(FsGetFile) then Result:= FsGetFile(PAnsiChar(CeUtf8ToSys(RemoteName)), PAnsiChar(CeUtf8ToSys(LocalName)), CopyFlags, RemoteInfo); end; function TWFXModule.WfxPutFile(LocalName, RemoteName: String; CopyFlags: Integer): Integer; begin Result:= FS_FILE_NOTSUPPORTED; if Assigned(FsPutFileW) then Result:= FsPutFileW(PWideChar(UTF8Decode(LocalName)), PWideChar(UTF8Decode(RemoteName)), CopyFlags) else if Assigned(FsPutFile) then Result:= FsPutFile(PAnsiChar(CeUtf8ToSys(LocalName)), PAnsiChar(CeUtf8ToSys(RemoteName)), CopyFlags); end; function TWFXModule.WfxSetAttr(RemoteName: String; NewAttr: LongInt): Boolean; begin Result:= False; if Assigned(FsSetAttrW) then Result:= FsSetAttrW(PWideChar(UTF8Decode(RemoteName)), NewAttr) else if Assigned(FsSetAttr) then Result:= FsSetAttr(PAnsiChar(CeUtf8ToSys(RemoteName)), NewAttr); end; function TWFXModule.WfxSetTime(RemoteName: String; pCreationTime, pLastAccessTime, pLastWriteTime: PWfxFileTime): Boolean; begin Result:= False; if Assigned(FsSetTimeW) then Result:= FsSetTimeW(PWideChar(UTF8Decode(RemoteName)), pCreationTime, pLastAccessTime, pLastWriteTime) else if Assigned(FsSetTime) then Result:= FsSetTime(PAnsiChar(CeUtf8ToSys(RemoteName)), pCreationTime, pLastAccessTime, pLastWriteTime); end; function TWFXModule.WfxMkDir(const sBasePath, sDirName: String): LongInt; begin Result:= WFX_NOTSUPPORTED; if Assigned(FsMkDirW) then begin WfxStatusInfo(sBasePath, FS_STATUS_START, FS_STATUS_OP_MKDIR); if FsMkDirW(PWideChar(UTF8Decode(sDirName))) then Result:= WFX_SUCCESS else Result:= WFX_ERROR; WfxStatusInfo(sBasePath, FS_STATUS_END, FS_STATUS_OP_MKDIR); end else if Assigned(FsMkDir) then begin WfxStatusInfo(sBasePath, FS_STATUS_START, FS_STATUS_OP_MKDIR); if FsMkDir(PAnsiChar(CeUtf8ToSys(sDirName))) then Result:= WFX_SUCCESS else Result:= WFX_ERROR; WfxStatusInfo(sBasePath, FS_STATUS_END, FS_STATUS_OP_MKDIR); end; end; function TWFXModule.WfxRemoveDir(const sDirName: String): Boolean; begin Result:= False; if Assigned(FsRemoveDirW) then Result:= FsRemoveDirW(PWideChar(UTF8Decode(sDirName))) else if Assigned(FsRemoveDir) then Result:= FsRemoveDir(PAnsiChar(CeUtf8ToSys(sDirName))); end; function TWFXModule.WfxDeleteFile(const sFileName: String): Boolean; begin Result:= False; if Assigned(FsDeleteFileW) then Result:= FsDeleteFileW(PWideChar(UTF8Decode(sFileName))) else if Assigned(FsDeleteFile) then Result:= FsDeleteFile(PAnsiChar(CeUtf8ToSys(sFileName))); end; function TWFXModule.WfxGetLocalName(var sFileName: String): Boolean; var pacRemoteName: PAnsiChar; pwcRemoteName: PWideChar; begin Result:= False; if Assigned(FsGetLocalNameW) then begin pwcRemoteName:= GetMem(MAX_PATH * SizeOf(WideChar)); StrPCopyW(pwcRemoteName, UTF8Decode(sFileName)); Result:= FsGetLocalNameW(pwcRemoteName, MAX_PATH); if Result = True then sFileName:= UTF16ToUTF8(UnicodeString(pwcRemoteName)); FreeMem(pwcRemoteName); end else if Assigned(FsGetLocalName) then begin pacRemoteName:= GetMem(MAX_PATH); StrPCopy(pacRemoteName, CeUtf8ToSys(sFileName)); Result:= FsGetLocalName(pacRemoteName, MAX_PATH); if Result = True then sFileName:= CeSysToUtf8(StrPas(pacRemoteName)); FreeMem(pacRemoteName); end; end; function TWFXModule.WfxDisconnect(const DisconnectRoot: String): Boolean; begin if Assigned(FsDisconnectW) then Result:= FsDisconnectW(PWideChar(UTF8Decode(DisconnectRoot))) else if Assigned(FsDisconnect) then Result:= FsDisconnect(PAnsiChar(CeUtf8ToSys(DisconnectRoot))) else Result:= False; end; constructor TWFXModule.Create; begin inherited; end; destructor TWFXModule.Destroy; begin if IsLoaded then begin if Assigned(FsContentPluginUnloading) then FsContentPluginUnloading; if Assigned(ExtensionFinalize) then ExtensionFinalize(nil); //------------------------------------------------------ UnloadModule; end; inherited; end; function TWFXModule.LoadModule(const sName: String): Boolean; begin FModuleHandle := mbLoadLibrary(sName); if FModuleHandle = 0 then Exit(False); DCDebug('WFX module loaded ' + sName + ' at ' + hexStr(Pointer(FModuleHandle))); FModuleFileName:= sName; { Mandatory } FsInit := TFsInit(GetProcAddress(FModuleHandle,'FsInit')); FsFindFirst := TFsFindFirst(GetProcAddress(FModuleHandle,'FsFindFirst')); FsFindNext := TFsFindNext(GetProcAddress(FModuleHandle,'FsFindNext')); FsFindClose := TFsFindClose(GetProcAddress(FModuleHandle,'FsFindClose')); { Unicode } FsInitW := TFsInitW(GetProcAddress(FModuleHandle,'FsInitW')); FsFindFirstW := TFsFindFirstW(GetProcAddress(FModuleHandle,'FsFindFirstW')); FsFindNextW := TFsFindNextW(GetProcAddress(FModuleHandle,'FsFindNextW')); Result:= (FsInit <> nil) and (FsFindFirst <> nil) and (FsFindNext <> nil); if (Result = False) then begin FsInit:= nil; FsFindFirst:= nil; FsFindNext:= nil; Result:= (FsInitW <> nil) and (FsFindFirstW <> nil) and (FsFindNextW <> nil); end; if (Result = False) or (FsFindClose = nil) then begin FsInitW:= nil; FsFindFirstW:= nil; FsFindNextW:= nil; FsFindClose:= nil; Exit(False); end; { Optional } FsSetCryptCallback:= TFsSetCryptCallback(GetProcAddress(FModuleHandle,'FsSetCryptCallback')); FsGetDefRootName := TFsGetDefRootName(GetProcAddress(FModuleHandle,'FsGetDefRootName')); FsExecuteFile := TFsExecuteFile(GetProcAddress(FModuleHandle,'FsExecuteFile')); FsGetFile := TFsGetFile(GetProcAddress(FModuleHandle,'FsGetFile')); FsPutFile := TFsPutFile(GetProcAddress(FModuleHandle,'FsPutFile')); FsDeleteFile := TFsDeleteFile(GetProcAddress(FModuleHandle,'FsDeleteFile')); FsMkDir := TFsMkDir(GetProcAddress(FModuleHandle,'FsMkDir')); FsRemoveDir := TFsRemoveDir(GetProcAddress(FModuleHandle,'FsRemoveDir')); FsStatusInfo := TFsStatusInfo(GetProcAddress(FModuleHandle,'FsStatusInfo')); FsSetDefaultParams := TFsSetDefaultParams(GetProcAddress(FModuleHandle,'FsSetDefaultParams')); FsContentPluginUnloading := TFsContentPluginUnloading(GetProcAddress(FModuleHandle,'FsContentPluginUnloading')); //--------------------- FsSetAttr := TFsSetAttr (GetProcAddress(FModuleHandle,'FsSetAttr')); FsSetTime := TFsSetTime (GetProcAddress(FModuleHandle,'FsSetTime')); FsExtractCustomIcon := TFsExtractCustomIcon (GetProcAddress(FModuleHandle,'FsExtractCustomIcon')); FsRenMovFile := TFsRenMovFile (GetProcAddress(FModuleHandle,'FsRenMovFile')); FsDisconnect := TFsDisconnect (GetProcAddress(FModuleHandle,'FsDisconnect')); FsGetPreviewBitmap := TFsGetPreviewBitmap (GetProcAddress(FModuleHandle,'FsGetPreviewBitmap')); FsLinksToLocalFiles := TFsLinksToLocalFiles (GetProcAddress(FModuleHandle,'FsLinksToLocalFiles')); FsGetLocalName := TFsGetLocalName (GetProcAddress(FModuleHandle,'FsGetLocalName')); //--------------------- FsGetBackgroundFlags := TFsGetBackgroundFlags (GetProcAddress(FModuleHandle,'FsGetBackgroundFlags')); //--------------------- FsContentGetDetectString := TFsContentGetDetectString (GetProcAddress(FModuleHandle,'FsContentGetDetectString')); FsContentGetSupportedField := TFsContentGetSupportedField (GetProcAddress(FModuleHandle,'FsContentGetSupportedField')); FsContentGetValue := TFsContentGetValue (GetProcAddress(FModuleHandle,'FsContentGetValue')); FsContentSetDefaultParams := TFsContentSetDefaultParams (GetProcAddress(FModuleHandle,'FsContentSetDefaultParams')); FsContentStopGetValue := TFsContentStopGetValue (GetProcAddress(FModuleHandle,'FsContentStopGetValue')); FsContentGetDefaultSortOrder := TFsContentGetDefaultSortOrder (GetProcAddress(FModuleHandle,'FsContentGetDefaultSortOrder')); FsContentGetSupportedFieldFlags := TFsContentGetSupportedFieldFlags (GetProcAddress(FModuleHandle,'FsContentGetSupportedFieldFlags')); FsContentSetValue := TFsContentSetValue (GetProcAddress(FModuleHandle,'FsContentSetValue')); FsContentGetDefaultView := TFsContentGetDefaultView (GetProcAddress(FModuleHandle,'FsContentGetDefaultView')); { Unicode } FsSetCryptCallbackW:= TFsSetCryptCallbackW(GetProcAddress(FModuleHandle,'FsSetCryptCallbackW')); FsMkDirW := TFsMkDirW(GetProcAddress(FModuleHandle,'FsMkDirW')); FsExecuteFileW := TFsExecuteFileW(GetProcAddress(FModuleHandle,'FsExecuteFileW')); FsRenMovFileW := TFsRenMovFileW(GetProcAddress(FModuleHandle,'FsRenMovFileW')); FsGetFileW := TFsGetFileW(GetProcAddress(FModuleHandle,'FsGetFileW')); FsPutFileW := TFsPutFileW(GetProcAddress(FModuleHandle,'FsPutFileW')); FsDeleteFileW := TFsDeleteFileW(GetProcAddress(FModuleHandle,'FsDeleteFileW')); FsRemoveDirW := TFsRemoveDirW(GetProcAddress(FModuleHandle,'FsRemoveDirW')); FsDisconnectW := TFsDisconnectW(GetProcAddress(FModuleHandle,'FsDisconnectW')); FsSetAttrW := TFsSetAttrW (GetProcAddress(FModuleHandle,'FsSetAttrW')); FsSetTimeW := TFsSetTimeW (GetProcAddress(FModuleHandle,'FsSetTimeW')); FsStatusInfoW := TFsStatusInfoW(GetProcAddress(FModuleHandle,'FsStatusInfoW')); FsExtractCustomIconW := TFsExtractCustomIconW(GetProcAddress(FModuleHandle,'FsExtractCustomIconW')); FsGetLocalNameW := TFsGetLocalNameW(GetProcAddress(FModuleHandle,'FsGetLocalNameW')); { Extension API } ExtensionInitialize:= TExtensionInitializeProc(GetProcAddress(FModuleHandle,'ExtensionInitialize')); ExtensionFinalize:= TExtensionFinalizeProc(GetProcAddress(FModuleHandle,'ExtensionFinalize')); end; procedure TWFXModule.UnloadModule; begin {$IF (not DEFINED(LINUX)) or ((FPC_VERSION > 2) or ((FPC_VERSION=2) and (FPC_RELEASE >= 5)))} if FModuleHandle <> 0 then FreeLibrary(FModuleHandle); {$ENDIF} FModuleHandle := 0; { Mandatory } FsInit := nil; FsFindFirst := nil; FsFindNext := nil; FsFindClose := nil; { Optional } FsSetCryptCallback := nil; FsGetDefRootName := nil; FsGetFile := nil; FsPutFile := nil; FsDeleteFile := nil; FsRemoveDir := nil; FsExecuteFile := nil; FsMkDir := nil; FsStatusInfo := nil; FsSetDefaultParams:=nil; //--------------------- FsSetAttr := nil; FsSetTime := nil; FsExtractCustomIcon := nil; FsRenMovFile := nil; FsDisconnect := nil; FsGetPreviewBitmap := nil; FsLinksToLocalFiles := nil; FsGetLocalName := nil; //--------------------- FsGetBackgroundFlags := nil; //--------------------- FsContentGetDetectString := nil; FsContentGetSupportedField := nil; FsContentGetValue := nil; FsContentSetDefaultParams := nil; FsContentStopGetValue := nil; FsContentGetDefaultSortOrder := nil; FsContentGetSupportedFieldFlags := nil; FsContentSetValue := nil; FsContentGetDefaultView := nil; FsContentPluginUnloading := nil; { Unicode } FsInitW := nil; FsFindFirstW := nil; FsFindNextW := nil; //--------------------- FsSetCryptCallbackW:= nil; FsMkDirW := nil; FsExecuteFileW := nil; FsRenMovFileW := nil; FsGetFileW := nil; FsPutFileW := nil; FsDeleteFileW := nil; FsRemoveDirW := nil; FsDisconnectW := nil; FsSetAttrW := nil; FsSetTimeW := nil; FsStatusInfoW := nil; FsExtractCustomIconW := nil; FsGetLocalNameW := nil; // Extension API ExtensionInitialize:= nil; ExtensionFinalize:= nil; end; procedure TWFXModule.VFSInit(Data: PtrInt); var dps: tFsDefaultParamStruct; StartupInfo: TExtensionStartupInfo; begin if Assigned(FsSetDefaultParams) then begin dps.DefaultIniName := mbFileNameToSysEnc(gpCfgDir + WfxIniFileName); dps.PluginInterfaceVersionHi:= 2; dps.PluginInterfaceVersionLow:= 0; dps.Size:= SizeOf(dps); FsSetDefaultParams(@dps); end; if not Assigned(FsGetBackgroundFlags) then FBackgroundFlags:= 0 else FBackgroundFlags:= FsGetBackgroundFlags(); // Extension API if Assigned(ExtensionInitialize) then begin FillByte(StartupInfo, SizeOf(TExtensionStartupInfo), 0); with StartupInfo do begin StructSize:= SizeOf(TExtensionStartupInfo); PluginDir:= ExtractFilePath(FModuleFileName); PluginConfDir:= gpCfgDir; InputBox:= @fDialogBox.InputBox; MessageBox:= @fDialogBox.MessageBox; DialogBoxLFM:= @fDialogBox.DialogBoxLFM; DialogBoxLRS:= @fDialogBox.DialogBoxLRS; DialogBoxLFMFile:= @fDialogBox.DialogBoxLFMFile; SendDlgMsg:= @fDialogBox.SendDlgMsg; end; ExtensionInitialize(@StartupInfo); end; end; function TWFXModule.VFSConfigure(Parent: THandle): Boolean; var RemoteName: String; begin try RemoteName:= PathDelim; WFXStatusInfo(PathDelim, FS_STATUS_START, FS_STATUS_OP_EXEC); Result:= (WfxExecuteFile(Parent, RemoteName, 'properties') = FS_EXEC_OK); WFXStatusInfo(PathDelim, FS_STATUS_END, FS_STATUS_OP_EXEC); except on E: Exception do begin Result:= False; DCDebug(ClassName + '.VFSConfigure(). Error: ' + E.Message); end; end; end; function TWFXModule.VFSRootName: String; var pcRootName : PAnsiChar; begin Result:= EmptyStr; if Assigned(FsGetDefRootName) then begin pcRootName:= GetMem(MAX_PATH); Assert(Assigned(pcRootName)); try FsGetDefRootName(pcRootName, MAX_PATH); Result := StrPas(pcRootName); finally FreeMem(pcRootName); end; end; end; function TWFXModule.IsLoaded: Boolean; begin Result := (FModuleHandle <> 0); end; { TWFXModuleList } function TWFXModuleList.GetAEnabled(Index: Integer): Boolean; begin Result:= Boolean(PtrInt(Objects[Index])); end; function TWFXModuleList.GetAFileName(Index: Integer): String; begin Result:= ValueFromIndex[Index]; end; function TWFXModuleList.GetAName(Index: Integer): String; begin Result:= Names[Index]; end; procedure TWFXModuleList.SetAEnabled(Index: Integer; const AValue: Boolean); begin Objects[Index]:= TObject(PtrInt(AValue)); end; procedure TWFXModuleList.SetAFileName(Index: Integer; const AValue: String); begin ValueFromIndex[Index]:= AValue; end; procedure TWFXModuleList.SetAName(Index: Integer; const AValue: String); var sValue : String; begin sValue:= ValueFromIndex[Index]; Self[Index]:= AValue + '=' + sValue; end; procedure TWFXModuleList.Load(Ini: TIniFileEx); var I: Integer; sCurrPlugin: String; LEnabled: Boolean; begin Ini.ReadSectionRaw('FileSystemPlugins', Self); for I:= 0 to Count - 1 do begin sCurrPlugin := Name[I]; if (sCurrPlugin = '') then Continue; LEnabled := (sCurrPlugin[1] <> '#'); Enabled[I]:= LEnabled; if not LEnabled then Name[I]:= Copy(sCurrPlugin, 2, MaxInt); end; end; procedure TWFXModuleList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; AName, APath: String; begin Clear; ANode := ANode.FindNode('WfxPlugins'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('WfxPlugin') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) and AConfig.TryGetValue(ANode, 'Path', APath) then begin I := Add(AName, APath); Enabled[I] := AConfig.GetAttr(ANode, 'Enabled', True); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TWFXModuleList.Save(Ini: TIniFileEx); var I: Integer; LName: String; begin Ini.EraseSection('FileSystemPlugins'); for I := 0 to Count - 1 do begin if Enabled[I] then LName := Name[I] else LName := '#' + Name[I]; Ini.WriteString('FileSystemPlugins', LName, FileName[I]); end; end; procedure TWFXModuleList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'WfxPlugins', True); AConfig.ClearNode(ANode); for I := 0 to Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'WfxPlugin'); AConfig.SetAttr(SubNode, 'Enabled', Enabled[I]); AConfig.AddValue(SubNode, 'Name', Name[I]); AConfig.AddValue(SubNode, 'Path', FileName[I]); end; end; function TWFXModuleList.Add(Ext: String; FileName: String): Integer; begin Result:= AddObject(Ext + '=' + FileName, TObject(True)); end; function TWFXModuleList.FindFirstEnabledByName(Name: String): Integer; begin for Result := 0 to Count - 1 do if Enabled[Result] and (DoCompareText(Names[Result], Name) = 0) then Exit; Result := -1; end; end. ������������������������������������������������������������������������doublecmd-0.7.1/src/platform/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717737�015156� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/upixmapgtk.pas���������������������������������������������������������0000644�0001750�0000144�00000006476�11740433676�020056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uPixMapGtk; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, IntfGraphics, gtk2def, gdk2pixbuf, gdk2, glib2; procedure DrawPixbufAtCanvas(Canvas: TCanvas; Pixbuf : PGdkPixbuf; SrcX, SrcY, DstX, DstY, Width, Height: Integer); function PixBufToBitmap(Pixbuf: PGdkPixbuf): TBitmap; implementation uses GraphType; procedure DrawPixbufAtCanvas(Canvas: TCanvas; Pixbuf : PGdkPixbuf; SrcX, SrcY, DstX, DstY, Width, Height: Integer); var gdkDrawable : PGdkDrawable; gdkGC : PGdkGC; gtkDC : TGtkDeviceContext; iPixbufWidth, iPixbufHeight: Integer; StretchedPixbuf: PGdkPixbuf; begin gtkDC := TGtkDeviceContext(Canvas.Handle); gdkDrawable := gtkDC.Drawable; gdkGC := gdk_gc_new(gdkDrawable); iPixbufWidth := gdk_pixbuf_get_width(Pixbuf); iPixbufHeight := gdk_pixbuf_get_height(Pixbuf); if (Width <> iPixbufWidth) or (Height <> iPixbufHeight) then begin StretchedPixbuf := gdk_pixbuf_scale_simple(Pixbuf, Width, Height, GDK_INTERP_BILINEAR); gdk_draw_pixbuf(gdkDrawable, gdkGC, StretchedPixbuf, SrcX, SrcY, DstX, DstY, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); gdk_pixbuf_unref(StretchedPixbuf); end else gdk_draw_pixbuf(gdkDrawable, gdkGC, Pixbuf, SrcX, SrcY, DstX, DstY, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); g_object_unref(gdkGC); end; function PixBufToBitmap(Pixbuf: PGdkPixbuf): TBitmap; var width, height, rowstride, n_channels, i, j: Integer; pixels: Pguchar; pSrc: PByte; pDst: PLongWord; BmpData: TLazIntfImage; hasAlphaChannel: Boolean; QueryFlags: TRawImageQueryFlags = [riqfRGB]; Description: TRawImageDescription; begin Result := nil; n_channels:= gdk_pixbuf_get_n_channels(Pixbuf); if ((n_channels <> 3) and (n_channels <> 4)) or // RGB or RGBA (gdk_pixbuf_get_colorspace(pixbuf) <> GDK_COLORSPACE_RGB) or (gdk_pixbuf_get_bits_per_sample(pixbuf) <> 8) then Exit; width:= gdk_pixbuf_get_width(Pixbuf); height:= gdk_pixbuf_get_height(Pixbuf); rowstride:= gdk_pixbuf_get_rowstride(Pixbuf); pixels:= gdk_pixbuf_get_pixels(Pixbuf); hasAlphaChannel:= gdk_pixbuf_get_has_alpha(Pixbuf); if hasAlphaChannel then Include(QueryFlags, riqfAlpha); BmpData := TLazIntfImage.Create(width, height, QueryFlags); try BmpData.CreateData; Description := BmpData.DataDescription; pDst := PLongWord(BmpData.PixelData); for j:= 0 to Height - 1 do begin pSrc := PByte(pixels) + j * rowstride; for i:= 0 to Width - 1 do begin pDst^ := pSrc[0] shl Description.RedShift + pSrc[1] shl Description.GreenShift + pSrc[2] shl Description.BlueShift; if hasAlphaChannel then pDst^ := pDst^ + pSrc[3] shl Description.AlphaShift; Inc(pSrc, n_channels); Inc(pDst); end; end; Result := TBitmap.Create; Result.LoadFromIntfImage(BmpData); if not hasAlphaChannel then Result.Transparent := True; finally BmpData.Free; end; end; // or use this { begin iPixbufWidth := gdk_pixbuf_get_width(pbPicture); iPixbufHeight := gdk_pixbuf_get_height(pbPicture); Result := TBitMap.Create; Result.SetSize(iPixbufWidth, iPixbufHeight); Result.Canvas.Brush.Color := clBackColor; Result.Canvas.FillRect(0, 0, iPixbufWidth, iPixbufHeight); DrawPixbufAtCanvas(Result.Canvas, pbPicture, 0, 0, 0, 0, iPixbufWidth, iPixbufHeight); end; } end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/udragdropex.pas��������������������������������������������������������0000644�0001750�0000144�00000027650�12512434150�020170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Interface unit for Drag&Drop to external applications. Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) 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 } {en Be aware that raw HWND handles are used to register controls for drag&drop in the system. Some LCL's functions may destroy a control's handle and create a new one during the lifetime of that control, making drag&drop invalid. Override TWinControl.InitializeWnd and TWinControl.FinalizeWnd to handle registration/unregistration in each control. } unit uDragDropEx; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls; type TDropEffect = (DropNoEffect, DropCopyEffect, DropMoveEffect, DropLinkEffect, DropAskEffect); TDragDropStatus = (DragDropAborted, DragDropSuccessful, DragDropError); { Source events } { Dragging has started } TDragBeginEvent = function:Boolean of object; { Drag destination has requested data } TRequestDataEvent = function( // This is the same as given to DoDragDrop. const FileNamesList: TStringList; // MIME-type format in which target requested data, e.g. text/plain. MimeType: string; // Effect chosen by target (may not be final). DropEffect: TDropEffect):string of object; { Dragging has ended } TDragEndEvent = function:Boolean of object; { Target events } { Mouse entered into the control when dragging something } TDragEnterEvent = function( // Proposed drop effect by the source (can be changed by the target to inform the source). var DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse moved inside the control when dragging something } TDragOverEvent = function( // Proposed drop effect by the source (can be changed by the target to inform the source). var DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse button has been lifted causing a drop event } TDropEvent = function( // List of filenames given by the source. const FileNamesList: TStringList; // Drop effect chosen by the source. DropEffect: TDropEffect; // Screen coordinates of mouse cursor. ScreenPoint: TPoint):Boolean of object; { Mouse has left the control when dragging something } TDragLeaveEvent = function:Boolean of object; { Base class for external source } TDragDropSource = class(TObject) public constructor Create(SourceControl: TWinControl); virtual; destructor Destroy; override; function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; virtual; procedure UnregisterEvents; virtual; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; // button that initiated dragging ScreenStartPoint: TPoint // mouse position in screen coords ): Boolean; virtual; function GetLastStatus: TDragDropStatus; function GetFileNamesList: TStringList; function GetDragBeginEvent : TDragBeginEvent; function GetRequestDataEvent: TRequestDataEvent; function GetDragEndEvent : TDragEndEvent; private FDragDropControl: TWinControl; FDragBeginEvent : TDragBeginEvent; FRequestDataEvent : TRequestDataEvent; FDragEndEvent : TDragEndEvent; protected FLastStatus: TDragDropStatus; FFileNamesList: TStringList; function GetControl: TWinControl; end; { Base class for external target } TDragDropTarget = class(TObject) public constructor Create(TargetControl: TWinControl); virtual; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; virtual; procedure UnregisterEvents; virtual; function GetDragEnterEvent: TDragEnterEvent; function GetDragOverEvent : TDragOverEvent; function GetDropEvent : TDropEvent; function GetDragLeaveEvent: TDragLeaveEvent; private FDragDropControl: TWinControl; FDragEnterEvent: TDragEnterEvent; FDragOverEvent : TDragOverEvent; FDropEvent : TDropEvent; FDragLeaveEvent: TDragLeaveEvent; protected function GetControl: TWinControl; end; { These functions return system-appropriate DragDrop... object. } function CreateDragDropSource(Control: TWinControl): TDragDropSource; function CreateDragDropTarget(Control: TWinControl): TDragDropTarget; { Returns True if external dragging is supported based on operating system and LCLWidgetType (compile-time) } function IsExternalDraggingSupported: Boolean; { Analyzes keyboard modifier keys (Shift, Ctrl, etc.) and mouse button nr and returns the appropriate drop effect. } function GetDropEffectByKeyAndMouse(ShiftState: TShiftState; MouseButton: TMouseButton): TDropEffect; function GetDropEffectByKey(ShiftState: TShiftState): TDropEffect; var { If set to True, then dragging is being transformed: internal to external or vice-versa. } TransformDragging : Boolean = False; { If set to True, then transforming from external back to internal dragging is enabled. } AllowTransformToInternal : Boolean = True; implementation {$IF DEFINED(MSWINDOWS)} uses uOleDragDrop; {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} uses uDragDropGtk; {$ELSEIF DEFINED(LCLQT) and DEFINED(DARWIN)} uses uDragDropQt, uDragDropCocoa; {$ELSEIF DEFINED(LCLQT)} uses uDragDropQt; {$ENDIF} { ---------- TDragDropSource ---------- } constructor TDragDropSource.Create(SourceControl: TWinControl); begin FDragDropControl := SourceControl; FDragBeginEvent := nil; FRequestDataEvent := nil; FDragEndEvent := nil; FFileNamesList := TStringList.Create; FLastStatus := DragDropSuccessful; end; destructor TDragDropSource.Destroy; begin UnregisterEvents; FDragDropControl := nil; if Assigned(FFileNamesList) then FreeAndNil(FFileNamesList); end; function TDragDropSource.GetControl:TWinControl; begin Result := FDragDropControl; end; function TDragDropSource.GetFileNamesList: TStringList; begin Result := FFileNamesList; end; function TDragDropSource.GetLastStatus: TDragDropStatus; begin Result := FLastStatus; end; function TDragDropSource.GetDragBeginEvent: TDragBeginEvent; begin Result := FDragBeginEvent; end; function TDragDropSource.GetRequestDataEvent: TRequestDataEvent; begin Result := FRequestDataEvent; end; function TDragDropSource.GetDragEndEvent: TDragEndEvent; begin Result := FDragEndEvent; end; function TDragDropSource.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin FDragBeginEvent := DragBeginEvent; FRequestDataEvent := RequestDataEvent; FDragEndEvent := DragEndEvent; Result := False; end; procedure TDragDropSource.UnregisterEvents; begin FDragBeginEvent := nil; FRequestDataEvent := nil; FDragEndEvent := nil; end; function TDragDropSource.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; begin FLastStatus := DragDropError; Result := False; end; { ---------- TDragDropTarget ---------- } constructor TDragDropTarget.Create(TargetControl: TWinControl); begin FDragDropControl := TargetControl; FDragEnterEvent := nil; FDragOverEvent := nil; FDropEvent := nil; FDragLeaveEvent := nil; end; destructor TDragDropTarget.Destroy; begin UnregisterEvents; FDragDropControl := nil; end; function TDragDropTarget.GetControl:TWinControl; begin Result := FDragDropControl; end; function TDragDropTarget.GetDragEnterEvent: TDragEnterEvent; begin Result := FDragEnterEvent; end; function TDragDropTarget.GetDragOverEvent: TDragOverEvent; begin Result := FDragOverEvent; end; function TDragDropTarget.GetDropEvent: TDropEvent; begin Result := FDropEvent; end; function TDragDropTarget.GetDragLeaveEvent: TDragLeaveEvent; begin Result := FDragLeaveEvent; end; function TDragDropTarget.RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin FDragEnterEvent := DragEnterEvent; FDragOverEvent := DragOverEvent; FDropEvent := DropEvent; FDragLeaveEvent := DragLeaveEvent; Result := False; end; procedure TDragDropTarget.UnregisterEvents; begin FDragEnterEvent := nil; FDragOverEvent := nil; FDropEvent := nil; FDragLeaveEvent := nil; end; { --------------------------------------------------------------------------- } function IsExternalDraggingSupported: Boolean; begin {$IF DEFINED(MSWINDOWS)} Result := True; {$ELSEIF DEFINED(LCLGTK) OR DEFINED(LCLGTK2)} Result := True; {$ELSEIF DEFINED(LCLQT)} Result := True; {$ELSE} Result := False; {$ENDIF} end; function CreateDragDropSource(Control: TWinControl): TDragDropSource; begin {$IF DEFINED(MSWINDOWS)} Result := TDragDropSourceWindows.Create(Control); {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} Result := TDragDropSourceGTK.Create(Control); {$ELSEIF DEFINED(LCLQT) and DEFINED(DARWIN)} Result := TDragDropSourceCocoa.Create(Control); {$ELSEIF DEFINED(LCLQT)} Result := TDragDropSourceQT.Create(Control); {$ELSE} Result := TDragDropSource.Create(Control); // Dummy {$ENDIF} end; function CreateDragDropTarget(Control: TWinControl): TDragDropTarget; begin {$IF DEFINED(MSWINDOWS)} Result := TDragDropTargetWindows.Create(Control); {$ELSEIF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} Result := TDragDropTargetGTK.Create(Control); {$ELSEIF DEFINED(LCLQT)} Result := TDragDropTargetQT.Create(Control); {$ELSE} Result := TDragDropTarget.Create(Control); // Dummy {$ENDIF} end; function GetDropEffectByKey(ShiftState: TShiftState): TDropEffect; begin ShiftState := [ssCtrl, ssShift, ssAlt] * ShiftState; if ShiftState = [] then Result := DropCopyEffect // default to Copy when no keys pressed else if ShiftState = [ssShift] then Result := DropMoveEffect else if ShiftState = [ssCtrl] then Result := DropMoveEffect else if ShiftState = [ssCtrl, ssShift] then Result := DropLinkEffect else Result := DropNoEffect; // some other key combination pressed end; function GetDropEffectByKeyAndMouse(ShiftState: TShiftState; MouseButton: TMouseButton): TDropEffect; begin case MouseButton of mbLeft: Result := GetDropEffectByKey(ShiftState); mbMiddle: Result := DropAskEffect; mbRight: Result := DropAskEffect; end; end; end. ����������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uterminal.pas����������������������������������������������������������0000644�0001750�0000144�00000006221�12612505011�017627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Terminal emulator abstract class Copyright (C) 2009-2010 Koblov Alexander (Alexx2000@mail.ru) Based on terminal emulator implementation Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uTerminal; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uCmdBox; type Cint = Integer; { TTerminal } TTerminal = class protected FChildPid: THandle; Fpty: LongInt; public {en Read info from pty } function Read_pty(var Output: String; const TimeOut: LongInt = 10): LongInt; virtual; abstract; {en Create new pty and start cmd } function Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String = ''): THandle; virtual; abstract; {en Write string to pty } function Write_pty(const Input: String): Boolean; virtual; abstract; //--------------------- function SendBreak_pty(): Boolean; virtual; abstract; // ^C function SendSignal_pty(Sig: Cint): Boolean; virtual; abstract; function SetScreenSize(ColCount, RowCount: Integer): Boolean; virtual; abstract; function SetCurrentDir(const NewDir: String): Boolean; virtual; abstract; //--------------------- function KillShell: LongInt; virtual; abstract; function CSI_GetTaskId(const buf:String):integer; virtual; abstract; //get index of sequence in CSILast list //---------------------} property ShellPid: THandle read FChildPid; property PtyPid: LongInt read Fpty; end; { TConsoleThread } TConsoleThread = class(TThread) protected FLock: System.TRTLCriticalSection; FTerm: TTerminal; FBuf: String; FRowsCount, FColsCount: Integer; FOut: TCmdBox; FShell: String; public property Terminal: TTerminal read FTerm; property RowsCount: Integer read FRowsCount write FRowsCount; property ColsCount: Integer read FColsCount write FColsCount; property CmdBox: TCmdBox read FOut write FOut; property Shell: String read FShell write FShell; end; function CreateConsoleThread: TConsoleThread; implementation uses {$IF DEFINED(WINDOWS)} uWinTerm; {$ELSEIF DEFINED(UNIX)} uUnixTerm; {$ENDIF} function CreateConsoleThread: TConsoleThread; {$IF DEFINED(WINDOWS)} begin Result:= TWinConThread.Create; end; {$ELSEIF DEFINED(UNIX)} begin Result:= TUnixConThread.Create; end; {$ENDIF} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/utarwriter.pas���������������������������������������������������������0000644�0001750�0000144�00000055560�12625655062�020071� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Simple TAR archive writer Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) This unit is based on libtar.pp from the Free Component Library (FCL) 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 uTarWriter; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uGlobs, uWcxModule, WcxPlugin, DCClassesUtf8, uFile, uFileSource, uFileSourceOperationUI, uFileSourceOperation, uFileSourceCopyOperation; const RECORDSIZE = 512; NAMSIZ = 100; TUNMLEN = 32; TGNMLEN = 32; CHKBLANKS = #32#32#32#32#32#32#32#32; USTAR = 'ustar'#32#32; LONGLINK = '././@LongLink'; LONGLEN = RECORDSIZE * 64; LONGMAX = RECORDSIZE * 128; type TDataWriteProcedure = procedure(Buffer: Pointer; BytesToWrite: Int64) of object; TUpdateStatisticsFunction = procedure(var NewStatistics: TFileSourceCopyOperationStatistics) of object; { TTarHeader } TTarHeader = packed record Name: array [0..NAMSIZ - 1] of AnsiChar; Mode: array [0..7] of AnsiChar; UID: array [0..7] of AnsiChar; GID: array [0..7] of AnsiChar; Size: array [0..11] of AnsiChar; MTime: array [0..11] of AnsiChar; ChkSum: array [0..7] of AnsiChar; TypeFlag: AnsiChar; LinkName: array [0..NAMSIZ - 1] of AnsiChar; Magic: array [0..7] of AnsiChar; UName: array [0..TUNMLEN - 1] of AnsiChar; GName: array [0..TGNMLEN - 1] of AnsiChar; DevMajor: array [0..7] of AnsiChar; DevMinor: array [0..7] of AnsiChar; Prefix: array [0..154] of AnsiChar; end; { TTarHeaderEx } TTarHeaderEx = packed record case Boolean of True: (HR: TTarHeader); False: (HA: array [0..RECORDSIZE - 1] of AnsiChar); end; { TTarWriter } TTarWriter = class private FSourceStream, FTargetStream: TFileStreamEx; FWcxModule: TWcxModule; FTarHeader: TTarHeaderEx; FBasePath, FTargetPath, FArchiveFileName: String; FBufferIn, FBufferOut: Pointer; FBufferSize: LongWord; FMemPack: TArcHandle; FLongName: array[0..Pred(LONGMAX)] of AnsiChar; procedure WriteFakeHeader(const ItemName: String; IsFileName: Boolean; Offset: LongInt); function MakeLongName(const FileName, LinkName: String; NameLen, LinkLen: LongInt): LongInt; function ReadData(BytesToRead: Int64): Int64; procedure WriteData(Buffer: Pointer; BytesToWrite: Int64); procedure CompressData(BufferIn: Pointer; BytesToCompress: Int64); protected AskQuestion: TAskQuestionFunction; AbortOperation: TAbortOperationFunction; CheckOperationState: TCheckOperationStateFunction; UpdateStatistics: TUpdateStatisticsFunction; DataWrite: TDataWriteProcedure; procedure ShowError(sMessage: String); procedure AddFile(const FileName: String); function WriteFile(const FileName: String; var Statistics: TFileSourceCopyOperationStatistics): Boolean; public constructor Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction ); constructor Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; WcxModule: TWcxModule ); destructor Destroy; override; function ProcessTree(var Files: TFiles; var Statistics: TFileSourceCopyOperationStatistics): Boolean; end; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, DCFileAttributes, uMyWindows, {$ELSEIF DEFINED(UNIX)} BaseUnix, FileUtil, uUsersGroups, {$ENDIF} uLng, DCStrUtils, DCOSUtils, uOSUtils; {$IF DEFINED(MSWINDOWS)} const FILE_UNIX_MODE = S_IRUSR or S_IWUSR or S_IRGRP or S_IROTH; FOLDER_UNIX_MODE = S_IRUSR or S_IWUSR or S_IXUSR or S_IRGRP or S_IXGRP or S_IROTH or S_IXOTH; {$ENDIF} // Makes a string of octal digits // The string will always be "Len" characters long procedure Octal64(N : Int64; P : PAnsiChar; Len : Integer); var I : Integer; begin for I := Len - 1 downto 0 do begin (P + I)^ := AnsiChar (ORD ('0') + ORD (N and $07)); N := N shr 3; end; for I := 0 to Len - 1 do begin if (P + I)^ in ['0'..'7'] then Break; (P + I)^ := '0'; end; end; procedure OctalN(N : Int64; P : PAnsiChar; Len : Integer); begin Octal64(N, P, Len-1); (P + Len - 1)^ := #0; end; procedure CheckSum(var TarHeader: TTarHeaderEx); var I: Integer; ChkSum : Cardinal = 0; begin with TarHeader do begin StrMove(HR.ChkSum, CHKBLANKS, 8); for I := 0 to SizeOf(TTarHeader) - 1 do Inc(ChkSum, Ord(HA[I])); Octal64(ChkSum, HR.ChkSum, 6); HR.ChkSum[6] := #0; HR.ChkSum[7] := #32; end; end; {$IF DEFINED(MSWINDOWS)} function GetFileInfo(const FileName: String; out FileInfo: TWin32FindDataW): Boolean; var Handle: System.THandle; begin Result:= False; Handle := FindFirstFileW(PWideChar(UTF8Decode(FileName)), FileInfo); if Handle <> INVALID_HANDLE_VALUE then begin FileInfo.dwFileAttributes:= ExtractFileAttributes(FileInfo); Windows.FindClose(Handle); Result:= True; end; end; {$ELSEIF DEFINED(UNIX)} function GetFileInfo(const FileName: String; out FileInfo: BaseUnix.Stat): Boolean; begin Result:= fpLStat(UTF8ToSys(FileName), FileInfo) >= 0; end; {$ENDIF} { TTarWriter } procedure TTarWriter.ShowError(sMessage: String); begin AskQuestion(sMessage, '', [fsourAbort], fsourAbort, fsourAbort); AbortOperation; end; constructor TTarWriter.Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; DataWrite:= @WriteData; FArchiveFileName:= ArchiveFileName; FTargetPath:= ExtractFilePath(ArchiveFileName); // Allocate buffers FBufferSize := gCopyBlockSize; GetMem(FBufferIn, FBufferSize); FBufferOut:= nil; FWcxModule:= nil; FMemPack:= 0; end; constructor TTarWriter.Create(ArchiveFileName: String; AskQuestionFunction: TAskQuestionFunction; AbortOperationFunction: TAbortOperationFunction; CheckOperationStateFunction: TCheckOperationStateFunction; UpdateStatisticsFunction: TUpdateStatisticsFunction; WcxModule: TWcxModule); begin AskQuestion := AskQuestionFunction; AbortOperation := AbortOperationFunction; CheckOperationState := CheckOperationStateFunction; UpdateStatistics := UpdateStatisticsFunction; DataWrite:= @CompressData; FArchiveFileName:= ArchiveFileName; FTargetPath:= ExtractFilePath(ArchiveFileName); // Allocate buffers FBufferSize := gCopyBlockSize; GetMem(FBufferIn, FBufferSize); GetMem(FBufferOut, FBufferSize); FWcxModule:= WcxModule; // Starts packing into memory FMemPack:= FWcxModule.WcxStartMemPack(MEM_OPTIONS_WANTHEADERS, ExtractFileName(ArchiveFileName)); end; destructor TTarWriter.Destroy; begin inherited Destroy; if Assigned(FWcxModule) then begin // Ends packing into memory if (FMemPack <> 0) then FWcxModule.DoneMemPack(FMemPack); end; if Assigned(FBufferIn) then begin FreeMem(FBufferIn); FBufferIn := nil; end; if Assigned(FBufferOut) then begin FreeMem(FBufferOut); FBufferOut := nil; end; end; procedure TTarWriter.AddFile(const FileName: String); {$IF DEFINED(MSWINDOWS)} var FileInfo: TWin32FindDataW; LinkName, FileNameIn: String; FileMode: Cardinal; FileTime, FileSize: Int64; NameLen, LinkLen: LongInt; begin if GetFileInfo(FileName, FileInfo) then with FTarHeader do begin FillByte(HR, SizeOf(FTarHeader), 0); // File name FileNameIn:= ExtractDirLevel(FBasePath, FileName); FileNameIn:= StringReplace (FileNameIn, '\', '/', [rfReplaceAll]); if FPS_ISDIR(FileInfo.dwFileAttributes) then FileNameIn:= FileNameIn + '/'; StrLCopy (HR.Name, PAnsiChar(FileNameIn), NAMSIZ); // File mode if FPS_ISDIR(FileInfo.dwFileAttributes) then FileMode:= FOLDER_UNIX_MODE else FileMode:= FILE_UNIX_MODE; OctalN(FileMode, HR.Mode, 8); // File size FileSize:= (FileInfo.nFileSizeHigh shl 32) or FileInfo.nFileSizeLow; if FPS_ISLNK(FileInfo.dwFileAttributes) then OctalN(0, HR.Size, 12) else OctalN(FileSize, HR.Size, 12); // Modification time FileTime:= Round((Int64(FileInfo.ftLastWriteTime) - 116444736000000000) / 10000000); OctalN(FileTime, HR.MTime, 12); // File type if FPS_ISLNK(FileInfo.dwFileAttributes) then HR.TypeFlag := '2' else if FPS_ISDIR(FileInfo.dwFileAttributes) then HR.TypeFlag := '5' else HR.TypeFlag := '0'; // Link name if FPS_ISLNK(FileInfo.dwFileAttributes) then begin LinkName:= ReadSymLink(FileName); StrLCopy(HR.LinkName, PAnsiChar(LinkName), NAMSIZ); end; // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // Header checksum CheckSum(FTarHeader); // Get file name and link name length NameLen:= Length(FileNameIn); LinkLen:= Length(LinkName); // Write data if not ((NameLen > NAMSIZ) or (LinkLen > NAMSIZ)) then DataWrite(@HA, RECORDSIZE) else begin NameLen:= MakeLongName(FileNameIn, LinkName, NameLen, LinkLen); DataWrite(@FLongName, NameLen); end; end; end; {$ELSEIF DEFINED(UNIX)} var FileInfo: BaseUnix.Stat; LinkName, FileNameIn: String; NameLen, LinkLen: LongInt; begin if GetFileInfo(FileName, FileInfo) then with FTarHeader do begin FillByte(HR, SizeOf(FTarHeader), 0); // File name FileNameIn:= ExtractDirLevel(FBasePath, FileName); if fpS_ISDIR(FileInfo.st_mode) then FileNameIn:= FileNameIn + PathDelim; StrLCopy (HR.Name, PAnsiChar(FileNameIn), NAMSIZ); // File mode OctalN(FileInfo.st_mode and $FFF, HR.Mode, 8); // UID OctalN(FileInfo.st_uid, HR.UID, 8); // GID OctalN(FileInfo.st_gid, HR.GID, 8); // File size if fpS_ISLNK(FileInfo.st_mode) then OctalN(0, HR.Size, 12) else OctalN(FileInfo.st_size, HR.Size, 12); // Modification time OctalN(FileInfo.st_mtime, HR.MTime, 12); // File type if fpS_ISLNK(FileInfo.st_mode) then HR.TypeFlag:= '2' else if fpS_ISCHR(FileInfo.st_mode) then HR.TypeFlag:= '3' else if fpS_ISBLK(FileInfo.st_mode) then HR.TypeFlag:= '4' else if fpS_ISDIR(FileInfo.st_mode) then HR.TypeFlag:= '5' else if fpS_ISFIFO(FileInfo.st_mode) then HR.TypeFlag:= '6' else HR.TypeFlag:= '0'; // Link name if fpS_ISLNK(FileInfo.st_mode) then begin LinkName:= ReadSymLink(FileName); StrLCopy(HR.LinkName, PAnsiChar(LinkName), NAMSIZ); end; // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // User StrPLCopy(HR.UName, UIDToStr(FileInfo.st_uid), TUNMLEN); // Group StrPLCopy(HR.GName, GIDToStr(FileInfo.st_gid), TGNMLEN); // Header checksum CheckSum(FTarHeader); // Get file name and link name length NameLen:= Length(FileNameIn); LinkLen:= Length(LinkName); // Write data if not ((NameLen > NAMSIZ) or (LinkLen > NAMSIZ)) then DataWrite(@HA, RECORDSIZE) else begin NameLen:= MakeLongName(FileNameIn, LinkName, NameLen, LinkLen); DataWrite(@FLongName, NameLen); end; end; end; {$ENDIF} procedure TTarWriter.WriteFakeHeader(const ItemName: String; IsFileName: Boolean; Offset: LongInt); var TarHeader: TTarHeaderEx; begin with TarHeader do begin FillByte(TarHeader, SizeOf(TTarHeaderEx), 0); StrPLCopy (HR.Name, LONGLINK, NAMSIZ); if IsFileName then HR.TypeFlag:= 'L' else HR.TypeFlag:= 'K'; // File mode OctalN(0, HR.Mode, 8); // UID OctalN(0, HR.UID, 8); // GID OctalN(0, HR.GID, 8); // Name size OctalN(Length(ItemName) + 1, HR.Size, 12); // Modification time OctalN(0, HR.MTime, 12); // Magic StrLCopy (HR.Magic, PAnsiChar(USTAR), 8); // User StrPLCopy(HR.UName, 'root', TUNMLEN); // Group StrPLCopy(HR.GName, 'root', TGNMLEN); // Header checksum CheckSum(TarHeader); // Copy file record Move(HA, PByte(PAnsiChar(@FLongName) + Offset)^, RECORDSIZE); // Copy file name StrMove(PAnsiChar(@FLongName) + Offset + RECORDSIZE, PAnsiChar(ItemName), Length(ItemName)); end; end; function TTarWriter.MakeLongName(const FileName, LinkName: String; NameLen, LinkLen: LongInt): LongInt; begin with FTarHeader do begin Result:= 0; // Strip string length to maximum length if (NameLen + RECORDSIZE) > LONGLEN then NameLen:= LONGLEN - RECORDSIZE * 2; if (LinkLen + RECORDSIZE) > LONGLEN then LinkLen:= LONGLEN - RECORDSIZE * 2; // Clear output buffer FillChar(FLongName, NameLen + LinkLen + RECORDSIZE * 4, #0); // Write Header for long link name if LinkLen > NAMSIZ then begin WriteFakeHeader(LinkName, False, Result); // Align link name by RECORDSIZE (512) if (LinkLen mod RECORDSIZE) = 0 then Result:= Result + RECORDSIZE + Linklen else Result:= Result + RECORDSIZE * 2 + (LinkLen div RECORDSIZE) * RECORDSIZE; end; // Write Header for long file name if NameLen > NAMSIZ then begin WriteFakeHeader(FileName, True, Result); // Align file name by RECORDSIZE (512) if (NameLen mod RECORDSIZE) = 0 then Result:= Result + RECORDSIZE + NameLen else Result:= Result + RECORDSIZE * 2 + (NameLen div RECORDSIZE) * RECORDSIZE; end; // Copy file record Move(HA, PByte(PAnsiChar(@FLongName) + Result)^, RECORDSIZE); Result:= Result + RECORDSIZE; end; end; function TTarWriter.ReadData(BytesToRead: Int64): Int64; var bRetryRead: Boolean; BytesRead: Int64; begin repeat try bRetryRead := False; FillByte(FBufferIn^, FBufferSize, 0); BytesRead:= FSourceStream.Read(FBufferIn^, BytesToRead); if (BytesRead = 0) then Raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); except on E: EReadError do begin case AskQuestion(rsMsgErrERead + ' ' + FSourceStream.FileName + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryRead := True; fsourAbort: AbortOperation; fsourSkip: Exit; end; // case end; end; until not bRetryRead; Result:= BytesRead; end; procedure TTarWriter.WriteData(Buffer: Pointer; BytesToWrite: Int64); var iTotalDiskSize, iFreeDiskSize: Int64; bRetryWrite: Boolean; BytesWrittenTry, BytesWritten: Int64; begin BytesWritten := 0; repeat try bRetryWrite := False; BytesWrittenTry := FTargetStream.Write((Buffer + BytesWritten)^, BytesToWrite - BytesWritten); BytesWritten := BytesWritten + BytesWrittenTry; if BytesWrittenTry = 0 then begin Raise EWriteError.Create(mbSysErrorMessage(GetLastOSError)); end else if BytesWritten < BytesToWrite then begin bRetryWrite := True; // repeat and try to write the rest end; except on E: EWriteError do begin { Check disk free space } GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if BytesToWrite > iFreeDiskSize then begin case AskQuestion(rsMsgNoFreeSpaceRetry, '', [fsourYes, fsourNo], fsourYes, fsourNo) of fsourYes: bRetryWrite := True; fsourNo: AbortOperation; end; // case end else begin case AskQuestion(rsMsgErrEWrite + ' ' + FArchiveFileName + ':', E.Message, [fsourRetry, fsourSkip, fsourAbort], fsourRetry, fsourSkip) of fsourRetry: bRetryWrite := True; fsourAbort: AbortOperation; fsourSkip: Exit; end; // case end; end; // on do end; // except until not bRetryWrite; end; procedure TTarWriter.CompressData(BufferIn: Pointer; BytesToCompress: Int64); var InLen: LongInt; Written: LongInt = 0; Taken: LongInt = 0; SeekBy: LongInt = 0; OffSet: LongInt = 0; Result: LongInt; begin InLen:= BytesToCompress; // Do while not all data accepted repeat // Recalculate offset if (Taken <> 0) then begin OffSet:= OffSet + Taken; InLen:= InLen - Taken; end; // Compress input buffer {$PUSH}{$WARNINGS OFF} Result:= FWcxModule.PackToMem(FMemPack, PByte(PtrUInt(BufferIn) + OffSet), InLen, @Taken, FBufferOut, FBufferSize, @Written, @SeekBy); {$POP} if not (Result in [MEMPACK_OK, MEMPACK_DONE]) then begin ShowError(Format(rsMsgLogError + rsMsgLogPack, [FArchiveFileName + ' - ' + GetErrorMsg(Result)])); end; // Seek if needed if (SeekBy <> 0) then FTargetStream.Seek(SeekBy, soCurrent); // Write compressed data if Written > 0 then WriteData(FBufferOut, Written); until ((Taken = InLen) and (BytesToCompress <> 0)) or (Result = MEMPACK_DONE); end; function TTarWriter.WriteFile(const FileName: String; var Statistics: TFileSourceCopyOperationStatistics): Boolean; var BytesRead, BytesToRead, BytesToWrite: Int64; TotalBytesToRead: Int64 = 0; begin Result := False; BytesToRead := FBufferSize; try FSourceStream:= nil; try FSourceStream := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyWrite); TotalBytesToRead := FSourceStream.Size; while TotalBytesToRead > 0 do begin // Without the following line the reading is very slow // if it tries to read past end of file. if TotalBytesToRead < BytesToRead then BytesToRead := TotalBytesToRead; BytesRead:= ReadData(BytesToRead); TotalBytesToRead := TotalBytesToRead - BytesRead; BytesToWrite:= BytesRead; if (BytesRead mod RECORDSIZE) <> 0 then begin // Align by TAR RECORDSIZE BytesToWrite:= (BytesRead div RECORDSIZE) * RECORDSIZE + RECORDSIZE; end; // Write data DataWrite(FBufferIn, BytesToWrite); with Statistics do begin CurrentFileDoneBytes := CurrentFileDoneBytes + BytesRead; DoneBytes := DoneBytes + BytesRead; UpdateStatistics(Statistics); end; CheckOperationState; // check pause and stop end; // while finally FreeAndNil(FSourceStream); end; Result:= True; except on EFOpenError do begin ShowError(rsMsgLogError + rsMsgErrEOpen + ': ' + FileName); end; on EWriteError do begin ShowError(rsMsgLogError + rsMsgErrEWrite + ': ' + FArchiveFileName); end; end; end; function TTarWriter.ProcessTree(var Files: TFiles; var Statistics: TFileSourceCopyOperationStatistics): Boolean; var aFile: TFile; Divider: Int64 = 1; CurrentFileIndex: Integer; iTotalDiskSize, iFreeDiskSize: Int64; begin try Result:= False; // Set base path FBasePath:= Files.Path; if FMemPack = 0 then begin Divider:= 2; end; // Update progress with Statistics do begin TotalBytes:= TotalBytes * Divider; UpdateStatistics(Statistics); end; // Check disk free space //if FCheckFreeSpace = True then begin GetDiskFreeSpace(FTargetPath, iFreeDiskSize, iTotalDiskSize); if Statistics.TotalBytes > iFreeDiskSize then begin AskQuestion('', rsMsgNoFreeSpaceCont, [fsourAbort], fsourAbort, fsourAbort); AbortOperation; end; end; // Create destination file FTargetStream := TFileStreamEx.Create(FArchiveFileName, fmCreate); try for CurrentFileIndex := 0 to Files.Count - 1 do begin aFile := Files[CurrentFileIndex]; if aFile.IsDirectory or aFile.IsLink then AddFile(aFile.FullPath) else begin // Update progress with Statistics do begin CurrentFileFrom := aFile.FullPath; CurrentFileTotalBytes := aFile.Size; CurrentFileDoneBytes := 0; end; UpdateStatistics(Statistics); // Add file record AddFile(aFile.FullPath); // TAR current file if not WriteFile(aFile.FullPath, Statistics) then Break; end; CheckOperationState; end; // Finish TAR archive with two null records FillByte(FBufferIn^, RECORDSIZE * 2, 0); DataWrite(FBufferIn, RECORDSIZE * 2); // Finish compression if needed if (FMemPack <> 0) then CompressData(FBufferIn, 0); finally if Assigned(FTargetStream) then begin FreeAndNil(FTargetStream); if (Statistics.DoneBytes <> Statistics.TotalBytes div Divider) then // There was some error, because not all files has been archived. // Delete the not completed target file. mbDeleteFile(FArchiveFileName) else Result:= True; end; end; except on EFCreateError do begin ShowError(rsMsgLogError + rsMsgErrECreate + ': ' + FArchiveFileName); end; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717737�016141� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/upython.pas�������������������������������������������������������0000644�0001750�0000144�00000017317�12612505011�020330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Simple interface to the Python language Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uPython; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes, DCOSUtils; type PPyObject = ^TPyObject; PPyTypeObject = ^TPyTypeObject; TPyTypeObject = record ob_refcnt: csize_t; ob_type: PPyTypeObject; ob_size: csize_t; tp_name: PAnsiChar; tp_basicsize, tp_itemsize: csize_t; //* Methods to implement standard operations */ tp_dealloc: procedure(obj: PPyObject); cdecl; end; TPyObject = record ob_refcnt: csize_t; ob_type: PPyTypeObject; end; var // pythonrun.h Py_Initialize: procedure; cdecl; Py_Finalize: procedure; cdecl; PyErr_Print: procedure; cdecl; PyRun_SimpleString: function(s: PAnsiChar): cint; cdecl; // import.h PyImport_Import: function(name: PPyObject): PPyObject; cdecl; // object.h PyCallable_Check: function(ob: PPyObject): cint; cdecl; PyObject_GetAttrString: function (ob: PPyObject; c: PAnsiChar): PPyObject; cdecl; // abstract.h PyObject_CallObject: function(callable_object, args: PPyObject): PPyObject; cdecl; PyObject_CallFunctionObjArgs: function(callable: PPyObject): PPyObject; cdecl; varargs; PyObject_CallMethodObjArgs: function(o, name: PPyObject): PPyObject; cdecl; varargs; // stringobject.h PyString_AsString: function(ob: PPyObject): PAnsiChar; cdecl; PyString_FromString: function(s: PAnsiChar): PPyObject; cdecl; // listobject.h PyList_New: function(size: csize_t): PPyObject; cdecl; PyList_Size: function (ob: PPyObject): csize_t; cdecl; PyList_GetItem: function(ob: PPyObject; index: csize_t): PPyObject; cdecl; PyList_SetItem: function(ob: PPyObject; index: csize_t; item: PPyObject): cint; cdecl; // tupleobject.h PyTuple_New: function(size: csize_t): PPyObject; cdecl; PyTuple_SetItem: function(ob: PPyObject; index: csize_t; item: PPyObject): cint; cdecl; procedure Py_DECREF(op: PPyObject); procedure Py_XDECREF(op: PPyObject); function PyStringToString(S: PPyObject): String; procedure PythonAddModulePath(const Path: String); function PythonLoadModule(const ModuleName: String): PPyObject; function PythonRunFunction(Module: PPyObject; const FunctionName, FunctionArg: String): PPyObject; overload; function PythonRunFunction(Module: PPyObject; const FunctionName: String; FileList: TStrings): PPyObject; overload; var PythonExe: String; HasPython: Boolean = False; implementation uses dynlibs, dl, uMyUnix; procedure Py_DECREF(op: PPyObject); begin with op^ do begin Dec(ob_refcnt); if ob_refcnt = 0 then begin ob_type^.tp_dealloc(op); end; end; end; procedure Py_XDECREF(op: PPyObject); inline; begin if Assigned(op) then Py_DECREF(op); end; function PyStringToString(S: PPyObject): String; begin if not Assigned(S) then Result:= EmptyStr else begin Result:= StrPas(PyString_AsString(S)); Py_DECREF(S); end; end; function StringsToPyList(Strings: TStrings): PPyObject; var I: LongInt; begin Result:= PyList_New(Strings.Count); if not Assigned(Result) then Exit; for I:= 0 to Strings.Count - 1 do begin PyList_SetItem(Result, I, PyString_FromString(PAnsiChar(Strings[I]))); end; end; function PyObjectsToPyTuple(Values: array of PPyObject): PPyObject; var Index: csize_t; begin Result:= PyTuple_New(Length(Values)); if not Assigned(Result) then Exit; for Index:= Low(Values) to High(Values) do begin PyTuple_SetItem(Result, Index, Values[Index]); end; end; procedure PythonAddModulePath(const Path: String); begin PyRun_SimpleString('import sys'); PyRun_SimpleString(PAnsiChar('sys.path.append("' + Path + '")')); end; function PythonLoadModule(const ModuleName: String): PPyObject; var pyName: PPyObject; begin pyName:= PyString_FromString(PAnsiChar(ModuleName)); Result:= PyImport_Import(pyName); Py_DECREF(pyName); end; function PythonCallFunction(Module: PPyObject; const FunctionName: String; FunctionArg: PPyObject): PPyObject; overload; var pyFunc, pyArgs: PPyObject; begin if Assigned(Module) then begin pyFunc:= PyObject_GetAttrString(Module, PAnsiChar(FunctionName)); if (Assigned(pyFunc) and (PyCallable_Check(pyFunc) <> 0)) then begin pyArgs:= PyObjectsToPyTuple([FunctionArg]); Result:= PyObject_CallObject(pyFunc, pyArgs); Py_XDECREF(pyArgs); if (Result = nil) then begin PyErr_Print() end; Py_DECREF(pyFunc); end; end; end; function PythonRunFunction(Module: PPyObject; const FunctionName, FunctionArg: String): PPyObject; var pyArgs: PPyObject; begin pyArgs:= PyString_FromString(PAnsiChar(FunctionArg)); Result:= PythonCallFunction(Module, FunctionName, pyArgs); end; function PythonRunFunction(Module: PPyObject; const FunctionName: String; FileList: TStrings): PPyObject; var pyArgs: PPyObject; begin pyArgs:= StringsToPyList(FileList); Result:= PythonCallFunction(Module, FunctionName, pyArgs); end; function FindPythonExecutable: String; begin if ExecutableInSystemPath('python2') then Result:= 'python2' else begin Result:= 'python'; end; end; var libpython: TLibHandle; procedure Initialize; begin PythonExe:= FindPythonExecutable; libpython:= TLibHandle(dlopen('libpython2.7.so.1.0', RTLD_NOW or RTLD_GLOBAL)); HasPython:= libpython <> NilHandle; if HasPython then try @Py_Initialize:= SafeGetProcAddress(libpython, 'Py_Initialize'); @Py_Finalize:= SafeGetProcAddress(libpython, 'Py_Finalize'); @PyErr_Print:= SafeGetProcAddress(libpython, 'PyErr_Print'); @PyRun_SimpleString:= SafeGetProcAddress(libpython, 'PyRun_SimpleString'); @PyImport_Import:= SafeGetProcAddress(libpython, 'PyImport_Import'); @PyCallable_Check:= SafeGetProcAddress(libpython, 'PyCallable_Check'); @PyObject_GetAttrString:= SafeGetProcAddress(libpython, 'PyObject_GetAttrString'); @PyObject_CallObject:= SafeGetProcAddress(libpython, 'PyObject_CallObject'); @PyObject_CallMethodObjArgs:= SafeGetProcAddress(libpython, 'PyObject_CallMethodObjArgs'); @PyObject_CallFunctionObjArgs:= SafeGetProcAddress(libpython, 'PyObject_CallFunctionObjArgs'); @PyString_AsString:= SafeGetProcAddress(libpython, 'PyString_AsString'); @PyString_FromString:= SafeGetProcAddress(libpython, 'PyString_FromString'); @PyList_New:= SafeGetProcAddress(libpython, 'PyList_New'); @PyList_Size:= SafeGetProcAddress(libpython, 'PyList_Size'); @PyList_GetItem:= SafeGetProcAddress(libpython, 'PyList_GetItem'); @PyList_SetItem:= SafeGetProcAddress(libpython, 'PyList_SetItem'); @PyTuple_New:= SafeGetProcAddress(libpython, 'PyTuple_New'); @PyTuple_SetItem:= SafeGetProcAddress(libpython, 'PyTuple_SetItem'); // Initialize the Python interpreter Py_Initialize(); except HasPython:= False; end; end; procedure Finalize; begin if HasPython then Py_Finalize(); if libpython <> NilHandle then FreeLibrary(libpython); end; initialization Initialize; finalization Finalize; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/inotify.pp��������������������������������������������������������0000644�0001750�0000144�00000006720�12673232504�020146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit inotify; {$mode delphi} {$packrecords c} interface uses InitC, CTypes; type {en Structure describing an inotify event. } inotify_event = record wd: cint32; //en< Watch descriptor. mask: cuint32; //en< Watch mask. cookie: cuint32; //en< Cookie to synchronize two events. len: cuint32; //en< Length (including NULs) of name. name: record end; //en< Stub for possible name (doesn't add to event size). end; {en Pointer to structure describing an inotify event. } pinotify_event = ^inotify_event; const { Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. } IN_ACCESS = $00000001; {en< File was accessed. } IN_MODIFY = $00000002; {en< File was modified. } IN_ATTRIB = $00000004; {en< Metadata changed. } IN_CLOSE_WRITE = $00000008; {en< Writtable file was closed. } IN_CLOSE_NOWRITE = $00000010; {en< Unwrittable file closed. } IN_CLOSE = IN_CLOSE_WRITE or IN_CLOSE_NOWRITE; {en< Close. } IN_OPEN = $00000020; {en< File was opened. } IN_MOVED_FROM = $00000040; {en< File was moved from X. } IN_MOVED_TO = $00000080; {en< File was moved to Y. } IN_MOVE = IN_MOVED_FROM or IN_MOVED_TO; {en< Moves. } IN_CREATE = $00000100; {en< Subfile was created. } IN_DELETE = $00000200; {en< Subfile was deleted. } IN_DELETE_SELF = $00000400; {en< Self was deleted. } IN_MOVE_SELF = $00000800; {en< Self was moved. } { Events sent by the kernel. } IN_UNMOUNT = $00002000; {en< Backing fs was unmounted. } IN_Q_OVERFLOW = $00004000; {en< Event queued overflowed. } IN_IGNORED = $00008000; {en< File was ignored. } { Special flags. } IN_ONLYDIR = $01000000; {en< Only watch the path if it is a directory. } IN_DONT_FOLLOW = $02000000; {en< Do not follow a sym link. } IN_MASK_ADD = $20000000; {en< Add to the mask of an already existing watch. } IN_ISDIR = $40000000; {en< Event occurred against dir. } IN_ONESHOT = $80000000; {en< Only send event once. } {en All events which a program can wait on. } IN_ALL_EVENTS = ((((((((((IN_ACCESS or IN_MODIFY) or IN_ATTRIB) or IN_CLOSE_WRITE) or IN_CLOSE_NOWRITE) or IN_OPEN) or IN_MOVED_FROM) or IN_MOVED_TO) or IN_CREATE) or IN_DELETE) or IN_DELETE_SELF) or IN_MOVE_SELF; {en Create and initialize inotify instance. } function fpinotify_init: cint; {en Add watch of object NAME to inotify instance FD. Notify about events specified by MASK. } function fpinotify_add_watch(fd: cint; pathname: string; mask: cuint32): cint; {en Remove the watch specified by WD from the inotify instance FD. } function fpinotify_rm_watch(fd: cint; wd: cuint32): cint; implementation uses BaseUnix, DCConvertEncoding; function inotify_init: cint; cdecl; external clib; function inotify_rm_watch(__fd: cint; __wd: cuint32): cint; cdecl; external clib; function inotify_add_watch(__fd: cint; __name: pansichar; __mask: cuint32): cint; cdecl; external clib; function fpinotify_init: cint; begin Result:= inotify_init; if Result = -1 then fpseterrno(fpgetCerrno); end; function fpinotify_add_watch(fd: cint; pathname: string; mask: cuint32): cint; begin Result:= inotify_add_watch(fd, PAnsiChar(CeUtf8ToSys(pathname)), mask); if Result = -1 then fpseterrno(fpgetCerrno); end; function fpinotify_rm_watch(fd: cint; wd: cuint32): cint; begin Result:= inotify_rm_watch(fd, wd); if Result = -1 then fpseterrno(fpgetCerrno); end; end. ������������������������������������������������doublecmd-0.7.1/src/platform/unix/uunixterm.pas�����������������������������������������������������0000644�0001750�0000144�00000050011�12612505011�020646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Terminal emulator implementation. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uUnixTerm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, ExtCtrls, LCLProc, cwstring, LCLType, Graphics, termio, uTerminal, uOSUtils; {$IF NOT DEFINED(DARWIN)} {$LINKLIB util} // under Linux and BSD forkpty is situated in libutil.so library {$ENDIF} const clib = 'c'; C_stdin = 0; C_stdout = 1; C_stderr = 2; const {c_cc characters} CDISABLE = 255; //key // xterm default bindings CINTR = 003; // ^C CQUIT = 034; // ^\ CERASE = 177; // ^? CKILL = 025; // ^U CEOF = 004; // ^D CSTART = 021; // ^Q CSTOP = 023; // ^S CSUSP = 032; // ^Z CREPRINT = 022; // ^R CWERASE = 027; // ^W CLNEXT = 026; // ^V CDISCARD = 017; // ^O //disabled CTIME = 0; CMIN = 1; CSWTC = CDISABLE; CEOL = CDISABLE; CEOL2 = CDISABLE; const CSIList= '@'+ // Вставить N пустых символов. 'A'+ //Переместить курсор вверх на N рядов. 'B'+ //Переместить курсор вниз на N рядов. 'C'+ //Переместить курсор вправо на N столбцов. 'D'+ //Переместить курсор влево на N столбцов. 'E'+ //Переместить курсор вниз на N рядов, в столбец #1. 'F'+ //Переместить курсор вверх на N рядов, в столбец #1. 'G'+ //Переместить курсор в указанный столбец текущего ряда. 'H'+ //Переместить курсор в указанный ряд и столбец (начало в 1,1). 'J'+ //"Очистить" экран (по умолчанию от курсора до конца экрана). ESC [ 1 J: "очистить" от начала столбца до курсора. ESC [ 2 J: "очистить" весь экран. 'K'+ //"Очистить" строку (по умолчанию от курсора до ее конца). ESC [ 1 K: "очистить" от начала строки до курсора. ESC [ 2 K: "очистить" всю строку. 'L'+ //Вставить N пустых строк. 'M'+ //Удалить N строк. 'P'+ //Удалить (со смещением в строке) N символов в текущей строке. 'X'+ //"Очистить" (без смещения в строке) N символов в текущей строке. 'a'+ //Переместить курсор вправо на N столбцов. 'c'+ //Ответить ESC [ ? 6 c: `Я являюсь VT102'. 'd'+ //Переместить курсор в указанный ряд текущего столбца. 'e'+ //Переместить курсор вниз на N рядов. 'f'+ //Переместить курсор в указанный ряд и столбец. 'g'+ //Без параметров: "очистить" текущую позицию табуляции. ESC [ 3 g: удалить все позиции табуляции. 'h'+ //Режим установки 'l'+ //Режим сброса 'm'+ //Установка атрибутов 'n'+ //Отчет о статусе 'q'+ //Установить режимы работы индикаторов на клавиатуре. ESC [ 0 q: выключить все индикаторы ESC [ 1 q: включить индикатор "Scroll Lock" ESC [ 2 q: включить индикатор "Num Lock" ESC [ 3 q: включить индикатор "Caps Lock" 'r'+ //Установить область прокрутки; параметрами будут верхний и нижний ряды. 's'+ //Сохранить местоположение курсора. 'u'; //Восстановить местоположение курсора. //'`'+ //Переместить курсор в указанный столбец текущего ряда. const NCCS = 32; type Pwinsize = ^winsize; winsize = record ws_row : word; ws_col : word; ws_xpixel : word; ws_ypixel : word; end; __pid_t = longint; Pcc_t = ^cc_t; cc_t = char; Pspeed_t = ^speed_t; speed_t = dword; Ptcflag_t = ^tcflag_t; tcflag_t = dword; Ptermios = ^termios; termios = record c_iflag : tcflag_t; c_oflag : tcflag_t; c_cflag : tcflag_t; c_lflag : tcflag_t; c_line : cc_t; c_cc : array[0..(NCCS)-1] of cc_t; c_ispeed : speed_t; c_ospeed : speed_t; end; type { TUnixTerm } TUnixTerm = class(TTerminal) private FCols,Frows:integer; //--------------------- //--------------------- public //--------------------- constructor Create; destructor Destroy; override; { \\---------------------} function Read_Pty(var str:String; const timeout: longint=10): longint; override; // Read info from pty function Fork_pty(const rows,cols:integer; const cmd:String; const params:String=''):System.THandle; override; //Create new pty and start cmd function Write_pty(const str:String):boolean; override; //write str to pty //--------------------- function SendBreak_pty():boolean; override; // ^C function SendSignal_pty(Sig:Cint):boolean; override; function SetScreenSize(aCols,aRows:integer):boolean; override; function SetCurrentDir(const NewDir: String): Boolean; override; //--------------------- function KillShell:LongInt; override; function CSI_GetTaskId(const buf:String):integer; override; //get index of sequence in CSILast list end; { TConThread } TUnixConThread = class(TConsoleThread) private procedure AddSymbol; procedure CSIProc(NCode, Param: integer; ExParam: integer=0); procedure CSI_CaretTo(Y, X: integer); procedure CSI_Colors(const Param: integer); procedure WriteS(const s: String); protected procedure Execute; override; public constructor Create; destructor Destroy; override; end; function forkpty(__amaster:Plongint; __name:Pchar; __termp:Ptermios; __winp:Pwinsize):longint;cdecl;external clib name 'forkpty'; function setenv(__name:Pchar; __value:Pchar; __replace:longint):longint;cdecl;external clib name 'setenv'; function execl(__path:Pchar; __arg:Pchar):longint;cdecl;varargs;external clib name 'execl'; implementation uses uDebug; { TUnixConThread } procedure TUnixConThread.WriteS(const s:String); begin if not assigned(FOut) then exit; //Form1.CmdBox1.StopRead; FOut.Write(s); //Form1.CmdBox1.StartRead(clWhite,clBlack,'',clWhite,clBlack); end; procedure TUnixConThread.CSI_Colors(const Param:integer); begin if not assigned(FOut) then exit; with FOut do begin case Param of 0: TextColors(clWhite,clBlack);// сбросить все атрибуты в их значения по умолчанию 1: ;// установить жирный шрифт 2: ;// установить более яркий (имитированное цветом на цветном дисплее) 4: ;// установить подчеркивание (имитированное цветом на цветном дисплее); //цвета, используемые для имитации затемнения или подчеркивания, устанавливаются //при помощи ESC ] ... 5: ;// включить мерцание 7: ;// включить режим инвертированного видео 10: ;// сбросить выбранное распределение, флаги управления экраном //и переключить метафлаг 11: ;// выбрать null-распределение, установить флаг управления экраном, //сбросить переключатель метафлага. 12: ;// выбрать null-распределение, установить флаг управления экраном, //включить переключатель метафлага. Переключение метафлага //задает переключение старшего бита в байте //до его трансформации согласно таблице распределения. 21: ;// включить режим нормальной интенсивности (несовместимо с ECMA-48) 22: ;// выключить режим нормальной интенсивности 24: ;// выключить подчеркивание 25: ;// выключить мерцание 27: ;// выключить инвертированное видео 30:TextColor(clGray) ;// установить черный цвет символов 31:TextColor(clRed) ;// установить красный цвет символов 32:TextColor($0024F947) ;// установить зеленый цвет символов 33:TextColor($003A85CF) ;// установить коричневый цвет символов 34:TextColor(clBlue) ;// установить синий цвет символов 35:TextColor(clPurple) ;// установить сиреневый цвет символов 36:TextColor(clSkyBlue) ;// установить голубой цвет символов 37:TextColor(clWhite);// установить белый цвет символов 38:TextColor(clWhite);// включить подчеркивание, установить цвет символов по умолчанию 39:TextColor(clWhite) ;// выключить подчеркивание, установить цвет символов по умолчанию 40:TextBackground(clBlack) ;// установить черный цвет фона 41:TextBackground(clRed) ;// установить красный цвет фона 42:TextBackground(clGreen) ;// установить зеленый цвет фона 43:TextBackground(clRed) ;// установить коричневый цвет фона 44:TextBackground(clBlue) ;// установить синий цвет фона 45:TextBackground(clPurple) ;// установить сиреневый цвет фона 46:TextBackground(clSkyBlue) ;// установить голубой цвет фона 47:TextBackground(clWhite) ;// установить белый цвет фона 49:TextBackground(clBlack) ;// установить цвет фона по умолчанию end; end; end; procedure TUnixConThread.CSI_CaretTo(Y,X:integer); //хз x y или y x. Надо проверить. begin DCDebug(' Y: '+inttostr(Y)+' X: '+inttostr(X)); //Fout.OutY:=Y; //Fout.OutX:=X; end; procedure TUnixConThread.CSIProc(NCode, Param:integer; ExParam:integer=0); begin //DCDebug('Code:'+Inttostr(NCode)+' Param: '+inttostr(Param)); case NCode of 9:CSI_CaretTo(Param,ExParam); 24:CSI_Colors(Param); end; end; constructor TUnixConThread.Create; begin inherited Create(true); System.InitCriticalSection(FLock); Fterm:=TUnixTerm.Create; FRowsCount:=50; FColsCount:=100; end; destructor TUnixConThread.Destroy; begin FreeAndNil(fTerm); System.DoneCriticalSection(FLock); inherited Destroy; end; procedure TUnixConThread.Execute; begin FShell:=GetShell; if length(FShell)=0 then FShell:='/bin/bash'; if Assigned(fterm) then Fterm.Fork_pty(FRowsCount,FColsCount,FShell); while true do begin if Assigned(fterm) then begin if Fterm.Read_Pty(fbuf,0)>0 then Synchronize(@AddSymbol) else Sleep(1); end else break; end; end; //------------------------------------------------------ procedure TUnixConThread.AddSymbol; var SeqCode,SeqPrm,i,x:integer; es,s:String; esnow,CSINow:boolean; begin s:=''; es:=''; esnow:=false; CSInow:=false; for i:=1 to length(fbuf) do begin //разбор //------------------------------------------------------ if esnow then begin //------------------------------------------------------ if CSINow then begin //Пытаемся определить управляющий символ CSI последовательности SeqCode:=(fTerm.CSI_GetTaskId(es)); if SeqCode>0 then begin //разбор управляющей последовательности. //------------------------------------------------------ WriteS(s); s:=''; delete(es,1,1); delete(es,length(es),1); x:=pos(';',es); while x>0 do begin if tryStrToInt(copy(es,1,x-1),SeqPrm) then begin CSIProc(SeqCode,SeqPrm); delete(es,1,x); x:=pos(';',es); end else begin WriteS(copy(es,1,x-1)); delete(es,1,x); x:=pos(';',es); end; end; if es<>'' then begin if tryStrToInt(es,SeqPrm) then CSIProc(SeqCode,SeqPrm) else WriteS(es); end; //------------------------------------------------------ es:=''; esnow:=false; CSINow:=False; end else es:=es+fbuf[i]; end else es:=es+fbuf[i]; //------------------------------------------------------ end; //Начало управляющей последовательности if (fbuf[i]=#155) or ((fbuf[i]=#27)) then begin esnow:=true; //Начало CSI последовательности if (i<length(fbuf)) and (fbuf[i+1]='[') then CSINow:=true; end; //выбор чарсета. Неактуально.... if fbuf[i]='%' then continue; //удалить последний символ if fbuf[i]=#8 then s:=copy(s,1,length(s)-1); //simple text or control symbols (Nither CSI nor escape sequenses) if (esnow=false) and ((fbuf[i]>#31) or (fbuf[i]=#13) or (fbuf[i]=#10)) then begin if fbuf[i]=#10 then begin if s<>'' then if Assigned(FOut) then FOut.Write(s+#10); s:=''; continue; end; if (fbuf[i]=#13) then if Assigned(FOut) then FOut.Write(#13); s:=s+fbuf[i]; end; //------------------------------------------------------ end; if s<>'' then begin if Assigned(FOut) then FOut.Write(s); end; end; //------------------------------------------------------ { TUnixTerm } function TUnixTerm.CSI_GetTaskId(const buf:String):integer; var Rez,L,R,M:integer; begin result:=0; if buf='' then exit; if buf[length(buf)]='`' then begin result:=length(CSIList)+1; exit; end; //бинарный поиск L:=0; R:=Length(CSIList); while (L<=R) do begin M:=(L+R) div 2; Rez:=CompareChar(CSIList[M],buf[length(buf)],1); if Rez=0 then begin Result:=M; exit; end else if Rez<0 then L:=M+1 else R:=M-1; end; result:=0; end; function TUnixTerm.Fork_pty(const rows, cols: integer; const cmd:String; const params:String=''): System.THandle; var ws:TWinSize; ChildPid:System.THandle; begin FCols:=cols; Frows:=rows; ws.ws_row:=rows; ws.ws_col:=cols; ws.ws_xpixel:=0; ws.ws_ypixel:=0; ChildPid:=forkpty(@Fpty,nil,nil,@ws); if ChildPid<0 then begin Result:=-1; Exit; end; if ChildPid=0 then begin //Child setenv('TERM', 'linux', 1); execl(pchar(cmd), pchar(params), nil); //если execl не сработал и новый процесс не подменил форкнутый, то ошибка fpWrite(C_stderr, pchar('execl() failed. Command: '+ cmd),length('execl() failed. Command: '+ cmd)); exit(127); // error exec'ing end; FChildPid:=ChildPid; Result:=ChildPid; end; function TUnixTerm.Read_Pty(var str:String; const timeout:longint=10):longint; var ifs:TFdSet; BytesRead:longint; buf:array [0..512] of char; begin Result:=0; if Fpty<0 then exit; //check if pty has new info for us fpFD_ZERO(ifs); fpFD_SET(Fpty,ifs); if FPSelect(fpty+1,@ifs,nil,nil,timeout)<=0 then exit; bytesread := fpread(fpty, buf, 512); result:=bytesread; str:=''; if bytesread <= 0 then exit; str:=copy(buf,0,BytesRead); end; function TUnixTerm.Write_pty(const str: String): boolean; var BytesWritten:TSize; i:integer; begin i:=1; result:=true; while i<=length(str) do begin BytesWritten:=fpwrite(Fpty,str[i],length(str[i])); result:=result and (BytesWritten>0); i:=i+1; end; end; function TUnixTerm.SendBreak_pty(): boolean; begin result:=SendSignal_pty(CINTR); end; function TUnixTerm.SendSignal_pty(Sig: Cint): boolean; var BytesWritten:TSize; begin BytesWritten:=fpwrite(Fpty,Sig,sizeof(sig)); Result := (BytesWritten>0); end; function TUnixTerm.SetScreenSize(aCols, aRows: integer): boolean; var ws:TWinSize; begin ws.ws_row:=aRows; ws.ws_col:=aCols; ws.ws_xpixel:=0; ws.ws_ypixel:=0; if FpIOCtl(Fpty,TIOCSWINSZ,@ws)=0 then begin Result:=true; FCols:=aCols; Frows:=aRows; end else Result:=false; end; function TUnixTerm.SetCurrentDir(const NewDir: String): Boolean; begin Result:= Write_pty(' cd "' + NewDir + '"' + #13); end; function TUnixTerm.KillShell: LongInt; begin //FchildPid must be >0 in other case all processes in this group will be killed if FChildPid>0 then result:=fpkill(FChildPid,SIGKILL) else result:=-1; end; constructor TUnixTerm.Create; var tio:termio.termios; begin TCGetAttr(Fpty,tio); tio.c_iflag:=BRKINT or IGNPAR or ICRNL or IXON; tio.c_oflag:=OPOST or ONLCR; tio.c_cflag:=CS8 or CREAD; tio.c_lflag:=ISIG or ICANON or IEXTEN or ECHO or ECHOE or ECHOK or ECHOKE or ECHOCTL; tio.c_cc[VINTR]:=CINTR; tio.c_cc[VQUIT]:=CQUIT; tio.c_cc[VERASE]:=CERASE; tio.c_cc[VKILL]:=CKILL; tio.c_cc[VSTART]:=CSTART; tio.c_cc[VSTOP]:=CSTOP; tio.c_cc[VSUSP]:=CSUSP; tio.c_cc[VREPRINT]:=CREPRINT; tio.c_cc[VDISCARD]:=CDISCARD; tio.c_cc[VWERASE]:=CWERASE; tio.c_cc[VLNEXT]:=CLNEXT; tio.c_cc[VEOF]:=CEOF; tio.c_cc[VEOL]:=CEOL; tio.c_cc[VEOL2]:=CEOL2; {$IF DEFINED(LINUX)} tio.c_cc[VSWTC]:=CSWTC; {$ENDIF} tio.c_cc[VMIN]:=CMIN; tio.c_cc[VTIME]:=CTIME; TCSetAttr(Fpty,TCSANOW,tio); end; destructor TUnixTerm.Destroy; begin KillShell; inherited Destroy; end; end. {// thr.Terminal.Write_pty(#27+'[21~'); //F10 // thr.Terminal.Write_pty(#27+'[D'); //Left // thr.Terminal.Write_pty(#27+'[3~'); //delete } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/ugio.pas����������������������������������������������������������0000644�0001750�0000144�00000015227�12612505011�017563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Interface to GIO - GLib Input, Output and Streaming Library This unit loads all libraries dynamically so it can work without it Copyright (C) 2011-2014 Alexander Koblov (alexx2000@mail.ru) 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 uGio; {$mode delphi} {$assertions on} interface uses Classes, SysUtils, DCBasicTypes; function GioOpen(const Uri: String): Boolean; function GioGetIconTheme(const Scheme: String): String; function GioFileGetIcon(const FileName: String): String; function GioMimeTypeGetActions(const MimeType: String): TDynamicStringArray; function GioGetMimeType(const FileName: String; MaxExtent: LongWord): String; var HasGio: Boolean = True; implementation uses DCStrUtils, DCClassesUtf8, uGlib2, uGObject2, uGio2; function GioOpen(const Uri: String): Boolean; var AFile: PGFile; AFileList: TGList; AppInfo: PGAppInfo; begin Result:= False; AFileList.next:= nil; AFileList.prev:= nil; if not HasGio then Exit; AFile:= g_file_new_for_commandline_arg(Pgchar(Uri)); try AppInfo:= g_file_query_default_handler(AFile, nil, nil); if (AppInfo = nil) then Exit; if g_file_is_native(AFile) then begin AFileList.data:= AFile; Result:= g_app_info_launch (AppInfo, @AFileList, nil, nil); end else begin AFileList.data:= Pgchar(Uri); Result:= g_app_info_launch_uris (AppInfo, @AFileList, nil, nil); end; g_object_unref(PGObject(AppInfo)); finally g_object_unref(PGObject(AFile)); end; end; function GioGetIconTheme(const Scheme: String): String; var Theme: Pgchar; Settings: PGSettings; SettingsSchema: PGSettingsSchema; SchemaSource: PGSettingsSchemaSource; begin if not HasGio then Exit(EmptyStr); SchemaSource:= g_settings_schema_source_get_default(); if Assigned(SchemaSource) then begin SettingsSchema:= g_settings_schema_source_lookup(SchemaSource, Pgchar(Scheme), False); if Assigned(SettingsSchema) then begin Settings:= g_settings_new(Pgchar(Scheme)); if Assigned(Settings) then begin Theme:= g_settings_get_string(Settings, 'icon-theme'); if Assigned(Theme) then begin Result:= StrPas(Theme); g_free(Theme); end; g_object_unref(Settings); end; g_object_unref(PGObject(SettingsSchema)); end; g_object_unref(PGObject(SchemaSource)); end; end; function GioFileGetIcon(const FileName: String): String; var GFile: PGFile; GIcon: PGIcon; AIconList: PPgchar; GFileInfo: PGFileInfo; begin Result:= EmptyStr; GFile:= g_file_new_for_commandline_arg(Pgchar(FileName)); GFileInfo:= g_file_query_info(GFile, FILE_ATTRIBUTE_STANDARD_ICON, 0, nil, nil); if Assigned(GFileInfo) then begin GIcon:= g_file_info_get_icon(GFileInfo); if g_type_check_instance_is_a(PGTypeInstance(GIcon), g_themed_icon_get_type()) then begin AIconList:= g_themed_icon_get_names(PGThemedIcon(GIcon)); if Assigned(AIconList) then Result:= AIconList[0]; end; g_object_unref(GFileInfo); end; g_object_unref(PGObject(GFile)); end; function GioMimeTypeGetActions(const MimeType: String): TDynamicStringArray; var AppList, TempList: PGList; DesktopFile: PAnsiChar; begin AppList:= g_app_info_get_all_for_type(PAnsiChar(MimeType)); if Assigned(AppList) then begin TempList:= AppList; repeat DesktopFile:= g_app_info_get_id(TempList^.data); if Assigned(DesktopFile) then AddString(Result, DesktopFile); g_object_unref(TempList^.data); TempList:= TempList^.next; until TempList = nil; g_list_free(AppList); end; end; function GioGetMimeType(const FileName: String; MaxExtent: LongWord): String; var Size: gsize; MimeType: Pgchar; Uncertain: gboolean; Buffer: array of Byte; FileStream: TFileStreamEx; begin // First check by file name (fast) MimeType:= g_content_type_guess(Pgchar(FileName), nil, 0, @Uncertain); if Assigned(MimeType) then begin Result:= StrPas(MimeType); g_free(MimeType); end; // Second check by file content (slow) if Uncertain then begin if MaxExtent = 0 then Result:= 'text/plain' else begin SetLength(Buffer, MaxExtent); try FileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try Size:= FileStream.Read(Buffer[0], MaxExtent); finally FileStream.Free; end; MimeType:= g_content_type_guess(nil, @Buffer[0], Size, @Uncertain); if Assigned(MimeType) then begin Result:= StrPas(MimeType); g_free(MimeType); end; except // Skip end; end; end; end; procedure Initialize; begin try Assert(@g_file_is_native <> nil, 'g_file_is_native'); Assert(@g_file_new_for_commandline_arg <> nil, 'g_file_new_for_commandline_arg'); Assert(@g_file_query_default_handler <> nil, 'g_file_query_default_handler'); Assert(@g_file_query_info <> nil, 'g_file_query_info'); Assert(@g_file_info_get_icon <> nil, 'g_file_info_get_icon'); Assert(@g_themed_icon_get_type <> nil, 'g_themed_icon_get_type'); Assert(@g_themed_icon_get_names <> nil, 'g_themed_icon_get_names'); Assert(@g_app_info_launch <> nil, 'g_app_info_launch'); Assert(@g_app_info_launch_uris <> nil, 'g_app_info_launch_uris'); Assert(@g_app_info_get_all_for_type <> nil, 'g_app_info_get_all_for_type'); Assert(@g_app_info_get_id <> nil, 'g_app_info_get_id'); Assert(@g_settings_new <> nil, 'g_settings_new'); Assert(@g_settings_get_string <> nil, 'g_settings_get_string'); Assert(@g_settings_schema_source_get_default <> nil, 'g_settings_schema_source_get_default'); Assert(@g_settings_schema_source_lookup <> nil, 'g_settings_schema_source_lookup'); Assert(@g_content_type_guess <> nil, 'g_content_type_guess'); except on E: Exception do begin HasGio:= False; WriteLn(E.Message); end; end; end; initialization Initialize; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/umyunix.pas�������������������������������������������������������0000644�0001750�0000144�00000047464�12662424243�020362� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains specific UNIX functions. Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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 uMyUnix; {$mode objfpc}{$H+} {$packrecords c} {$IF NOT DEFINED(LINUX)} {$DEFINE FPC_USE_LIBC} {$ENDIF} interface uses Classes, SysUtils, BaseUnix, CTypes, DCBasicTypes, uDrive; const libc = 'c'; _PATH_FSTAB = '/etc/fstab'; _PATH_MOUNTED = '/etc/mtab'; type TDesktopEnvironment = ( DE_UNKNOWN = 0, DE_KDE = 1, DE_GNOME = 2, DE_XFCE = 3, DE_LXDE = 4, DE_MATE = 5, DE_CINNAMON = 6 ); const DesktopName: array[TDesktopEnvironment] of String = ( 'Unknown', 'KDE', 'GNOME', 'Xfce', 'LXDE', 'MATE', 'Cinnamon' ); type PIOFILE = Pointer; PFILE = PIOFILE; //en Mount entry record mntent = record mnt_fsname: PChar; //en< name of mounted file system mnt_dir: PChar; //en< file system path prefix mnt_type: PChar; //en< mount type mnt_opts: PChar; //en< mount options mnt_freq: LongInt; //en< dump frequency in days mnt_passno: LongInt; //en< pass number on parallel fsck end; TMountEntry = mntent; PMountEntry = ^TMountEntry; type //en Password file entry record passwd = record pw_name: PChar; //en< user name pw_passwd: PChar; //en< user password pw_uid: uid_t; //en< user ID pw_gid: gid_t; //en< group ID {$IF DEFINED(BSD)} pw_change: time_t; //en< password change time pw_class: PChar; //en< user access class {$ENDIF} pw_gecos: PChar; //en< real name pw_dir: PChar; //en< home directory pw_shell: PChar; //en< shell program {$IF DEFINED(BSD)} pw_expire: time_t; //en< account expiration pw_fields: cint; //en< internal: fields filled in {$ENDIF} end; TPasswordRecord = passwd; PPasswordRecord = ^TPasswordRecord; //en Group file entry record group = record gr_name: PChar; //en< group name gr_passwd: PChar; //en< group password gr_gid: gid_t; //en< group ID gr_mem: ^PChar; //en< group members end; TGroupRecord = group; PGroupRecord = ^TGroupRecord; {$IFDEF LINUX} {en Opens the file system description file @param(filename File system description file) @param(mode Type of access) @returns(The function returns a file pointer to file system description file) } function setmntent(const filename: PChar; const mode: PChar): PFILE; cdecl; external libc name 'setmntent'; {en Reads the next line from the file system description file @param(stream File pointer to file system description file) @returns(The function returns a pointer to a structure containing the broken out fields from a line in the file) } function getmntent(stream: PFILE): PMountEntry; cdecl; external libc name 'getmntent'; {en Closes the file system description file @param(stream File pointer to file system description file) @returns(The function always returns 1) } function endmntent(stream: PFILE): LongInt; cdecl; external libc name 'endmntent'; {$ENDIF} {en Get password file entry @param(uid User ID) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user ID) } function getpwuid(uid: uid_t): PPasswordRecord; cdecl; external libc name 'getpwuid'; {en Get password file entry @param(name User name) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the password database that matches the user name) } function getpwnam(const name: PChar): PPasswordRecord; cdecl; external libc name 'getpwnam'; {en Get group file entry @param(gid Group ID) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the group database that matches the group ID) } function getgrgid(gid: gid_t): PGroupRecord; cdecl; external libc name 'getgrgid'; {en Get group file entry @param(name Group name) @returns(The function returns a pointer to a structure containing the broken-out fields of the record in the group database that matches the group name) } function getgrnam(name: PChar): PGroupRecord; cdecl; external libc name 'getgrnam'; {en Change or add an environment variable @param(name Environment variable name) @param(value Environment variable value) @param(overwrite Overwrite environment variable if exist) @returns(The function returns zero on success, or -1 if there was insufficient space in the environment) } function setenv(const name, value: PChar; overwrite: LongInt): LongInt; cdecl; external libc name 'setenv'; {$IFDEF LINUX} function fpOpenDir(__name: PChar): pDir; cdecl; external libc name 'opendir'; function fpReadDir(__dirp: pDir): pDirent; cdecl; external libc name 'readdir64'; function fpCloseDir(__dirp: pDir): cInt; cdecl; external libc name 'closedir'; {$ELSE} function fpReadDir(__dirp: pDir): pDirent; inline; function fpCloseDir(__dirp: pDir): cInt; inline; {$ENDIF} function fpSystemStatus(Command: string): cint; function GetDesktopEnvironment: TDesktopEnvironment; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; {en Checks if file is executable or script @param(FileName File name) @returns(The function returns @true if successful, @false otherwise) } function FileIsUnixExecutable(const Filename: String): Boolean; {en Find mount point of file system where file is located @param(FileName File name) @returns(Mount point of file system) } function FindMountPointPath(const FileName: String): String; function ExecutableInSystemPath(const FileName: String): Boolean; function GetDefaultAppCmd(const FileName: String): String; function GetFileMimeType(const FileName: String): String; {en Fix separators in case they are broken UTF-8 characters (FPC takes only first byte as it doesn't support Unicode). } procedure FixDateTimeSeparators; function MountDrive(Drive: PDrive): Boolean; function UnmountDrive(Drive: PDrive): Boolean; function EjectDrive(Drive: PDrive): Boolean; function ExecuteCommand(Command: String; Args: TDynamicStringArray; StartPath: String): Boolean; {$IF DEFINED(BSD)} const MNT_WAIT = 1; // synchronously wait for I/O to complete MNT_NOWAIT = 2; // start all I/O, but do not wait for it MNT_LAZY = 3; // push data not written by filesystem syncer MNT_SUSPEND = 4; // suspend file system after sync type TFSTab = record fs_spec: PChar; // block special device name fs_file: PChar; // file system path prefix fs_vfstype: PChar; // file system type, ufs, nfs fs_mntops: PChar; // mount options ala -o fs_type: PChar; // FSTAB_* from fs_mntops fs_freq: longint; // dump frequency, in days fs_passno: longint; // pass number on parallel fsc end; PFSTab = ^TFSTab; PStatFS = ^TStatFS; {$IF DEFINED(DARWIN)} function getfsstat(buf: pstatfs; bufsize: cint; flags: cint): cint; cdecl; external libc name 'getfsstat'; {$ELSE} function getfsstat(struct_statfs: PStatFS; const buffsize: int64; const int_flags: integer): integer; {$ENDIF} function getfsent(): PFSTab; cdecl; external libc name 'getfsent'; procedure endfsent(); cdecl; external libc name 'endfsent'; {$ENDIF} var DesktopEnv: TDesktopEnvironment = DE_UNKNOWN; implementation uses URIParser, Unix, FileUtil, DCOSUtils, DCClassesUtf8, DCStrUtils, uDCUtils, uOSUtils {$IF (NOT DEFINED(FPC_USE_LIBC)) or (DEFINED(BSD) AND NOT DEFINED(DARWIN))} , SysCall {$ENDIF} {$IF NOT DEFINED(DARWIN)} , uMimeActions, uMimeType {$ENDIF} {$IFDEF LINUX} , Process, uUDisks {$ENDIF} ; {$IF DEFINED(BSD) AND NOT DEFINED(DARWIN)} function getfsstat(struct_statfs: PStatFS; const buffsize: int64; const int_flags: integer): integer; {$IF DEFINED(FREEBSD) AND ((fpc_version<2) OR ((fpc_version=2) AND (fpc_release<5)))} const syscall_nr_getfsstat = 18; // was not defined before fpc 2.5.1 {$ENDIF} begin Result := do_syscall(syscall_nr_getfsstat, TSysParam(struct_statfs), TSysParam(buffsize), TSysParam(int_flags)); end; {$ENDIF} {$IF NOT DEFINED(LINUX)} function fpReadDir(__dirp: pDir): pDirent; begin Result:= BaseUnix.FpReaddir(__dirp^); end; function fpCloseDir(__dirp: pDir): cInt; begin Result:= BaseUnix.FpClosedir(__dirp^); end; {$ENDIF} function fpSystemStatus(Command: string): cint; begin Result := fpSystem(UTF8ToSys(Command)); if wifexited(Result) then Result := wexitStatus(Result); end; {$IFDEF LINUX} var HavePMount: Boolean = False; HaveUDisksCtl: Boolean = False; procedure CheckPMount; begin // Check pumount first because Puppy Linux has another tool named pmount HavePMount := (fpSystemStatus('pumount --version > /dev/null 2>&1') = 0) and (fpSystemStatus('pmount --version > /dev/null 2>&1') = 0); end; procedure CheckUDisksCtl; begin HaveUDisksCtl := (fpSystemStatus('udisksctl help > /dev/null 2>&1') = 0); end; {$ENDIF LINUX} function GetDesktopEnvironment: TDesktopEnvironment; var I: Integer; DesktopSession: String; const EnvVariable: array[0..1] of String = ('XDG_CURRENT_DESKTOP', 'DESKTOP_SESSION'); begin Result:= DE_UNKNOWN; for I:= Low(EnvVariable) to High(EnvVariable) do begin DesktopSession:= GetEnvironmentVariable(EnvVariable[I]); if Length(DesktopSession) = 0 then Continue; DesktopSession:= LowerCase(DesktopSession); if Pos('kde', DesktopSession) <> 0 then Exit(DE_KDE); if Pos('gnome', DesktopSession) <> 0 then Exit(DE_GNOME); if Pos('xfce', DesktopSession) <> 0 then Exit(DE_XFCE); if Pos('lxde', DesktopSession) <> 0 then Exit(DE_LXDE); if Pos('mate', DesktopSession) <> 0 then Exit(DE_MATE); if Pos('cinnamon', DesktopSession) <> 0 then Exit(DE_CINNAMON); end; if GetEnvironmentVariable('KDE_FULL_SESSION') <> '' then Exit(DE_KDE); if GetEnvironmentVariable('GNOME_DESKTOP_SESSION_ID') <> '' then Exit(DE_GNOME); if GetEnvironmentVariable('_LXSESSION_PID') <> '' then Exit(DE_LXDE); if fpSystemStatus('pgrep xfce4-session > /dev/null') = 0 then Exit(DE_XFCE); end; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; var StatInfo: BaseUnix.Stat; iniDesktop: TIniFileEx = nil; begin Result:= False; try iniDesktop:= TIniFileEx.Create(FileName, fmOpenRead); try if iniDesktop.ReadString('Desktop Entry', 'Type', EmptyStr) = 'Link' then begin LinkTarget:= iniDesktop.ReadString('Desktop Entry', 'URL', EmptyStr); if not URIToFilename(LinkTarget, LinkTarget) then Exit; if fpLStat(UTF8ToSys(LinkTarget), StatInfo) <> 0 then Exit; Result:= FPS_ISDIR(StatInfo.st_mode); end; finally FreeAndNil(iniDesktop); end; except // Ignore end; end; function FileIsUnixExecutable(const FileName: String): Boolean; var Info : Stat; dwSign : LongWord; fsExeScr : TFileStreamEx = nil; begin // First check FileName is not a directory and then check if executable Result:= (fpStat(UTF8ToSys(FileName), Info) <> -1) and FPS_ISREG(Info.st_mode) and (BaseUnix.fpAccess(UTF8ToSys(FileName), BaseUnix.X_OK) = 0); if Result and (Info.st_size >= SizeOf(dwSign)) then try fsExeScr := TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try dwSign := fsExeScr.ReadDWord; // ELF or #! Result := ((dwSign = NtoBE($7F454C46)) or (Lo(dwSign) = NtoBE($2321))); finally fsExeScr.Free; end; except Result:= False; end; end; function FindMountPointPath(const FileName: String): String; var I, J: LongInt; sTemp: String; recStat: Stat; st_dev: QWord; begin // Set root directory as mount point by default Result:= PathDelim; // Get stat info for original file if (fpLStat(UTF8ToSys(FileName), recStat) < 0) then Exit; // Save device ID of original file st_dev:= recStat.st_dev; J:= Length(FileName); for I:= J downto 1 do begin if FileName[I] = PathDelim then begin if (I = 1) then sTemp:= PathDelim else sTemp:= Copy(FileName, 1, I - 1); // Stat for current directory if (fpLStat(UTF8ToSys(sTemp), recStat) < 0) then Continue; // If it is a link then checking link destination if fpS_ISLNK(recStat.st_mode) then begin sTemp:= ReadSymLink(sTemp); Result:= FindMountPointPath(sTemp); Exit; end; // Check device ID if (recStat.st_dev <> st_dev) then begin Result:= Copy(FileName, 1, J); Exit; end; J:= I; end; end; end; function ExecutableInSystemPath(const FileName: String): Boolean; var I: Integer; Path: String; Value: TDynamicStringArray; begin Path:= GetEnvironmentVariable('PATH'); Value:= SplitString(Path, PathSeparator); for I:= Low(Value) to High(Value) do begin if fpAccess(IncludeTrailingPathDelimiter(Value[I]) + FileName, X_OK) = 0 then Exit(True); end; Result:= False; end; function GetDefaultAppCmd(const FileName: String): String; {$IF NOT DEFINED(DARWIN)} var Filenames: TStringList; begin Filenames:= TStringList.Create; Filenames.Add(FileName); Result:= uMimeActions.GetDefaultAppCmd(Filenames); if Length(Result) = 0 then Result:= 'xdg-open ' + QuoteStr(FileName); FreeAndNil(Filenames); end; {$ELSE} begin Result:= 'xdg-open ' + QuoteStr(FileName); end; {$ENDIF} function GetFileMimeType(const FileName: String): String; {$IF NOT DEFINED(DARWIN)} begin Result:= uMimeType.GetFileMimeType(FileName); end; {$ELSE} begin Result:= EmptyStr; end; {$ENDIF} procedure FixDateTimeSeparators; var TimeEnv: String; begin TimeEnv := GetEnvironmentVariable('LC_TIME'); if TimeEnv = EmptyStr then TimeEnv := GetEnvironmentVariable('LC_ALL'); if TimeEnv = EmptyStr then TimeEnv := GetEnvironmentVariable('LANG'); if TimeEnv <> EmptyStr then begin TimeEnv := upcase(TimeEnv); if StrEnds(TimeEnv, 'UTF-8') or StrEnds(TimeEnv, 'UTF8') then with FormatSettings do begin if Ord(DateSeparator) > $7F then DateSeparator := '/'; if Ord(TimeSeparator) > $7F then TimeSeparator := ':'; end; end; end; function MountDrive(Drive: PDrive): Boolean; {$IFDEF LINUX} var Index: Integer; MountPath: String; {$ENDIF} begin if not Drive^.IsMounted then begin {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} Result := False; // If Path is not empty "mount" can mount it because it has a destination path from fstab. if Drive^.Path <> EmptyStr then {$ENDIF} Result := fpSystemStatus('mount ' + Drive^.DeviceId) = 0; {$IF DEFINED(LINUX)} if not Result and HaveUDisksCtl then begin {$IF (FPC_FULLVERSION >= 20602)} Result:= RunCommand('udisksctl', ['mount', '-b', Drive^.DeviceId], MountPath); if Result then begin Write(MountPath); Index:= Pos(' at ', MountPath); if Index > 0 then begin Inc(Index, 4); Drive^.Path:= Copy(MountPath, Index, Length(MountPath) - Index - 1); end; end {$ENDIF} end; if not Result and uUDisks.Initialize then begin Result := uUDisks.Mount(DeviceFileToUDisksObjectPath(Drive^.DeviceId), EmptyStr, nil, MountPath); if Result then Drive^.Path := MountPath; uUDisks.Finalize; end; if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pmount ' + Drive^.DeviceId) = 0; {$ELSE IF DEFINED(DARWIN)} if not Result then Result := fpSystemStatus('diskutil mount ' + Drive^.DeviceId) = 0; {$ENDIF} end else Result := True; end; function UnmountDrive(Drive: PDrive): Boolean; begin if Drive^.IsMounted then begin {$IF DEFINED(LINUX)} Result := False; if HaveUDisksCtl then Result := fpSystemStatus('udisksctl unmount -b ' + Drive^.DeviceId) = 0; if not Result and uUDisks.Initialize then begin Result := uUDisks.Unmount(DeviceFileToUDisksObjectPath(Drive^.DeviceId), nil); uUDisks.Finalize; end; if not Result and HavePMount and Drive^.IsMediaRemovable then Result := fpSystemStatus('pumount ' + Drive^.DeviceId) = 0; if not Result then {$ELSE IF DEFINED(DARWIN)} Result := fpSystemStatus('diskutil unmount ' + Drive^.DeviceId) = 0; if not Result then {$ENDIF} Result := fpSystemStatus('umount ' + Drive^.Path) = 0; end else Result := True; end; function EjectDrive(Drive: PDrive): Boolean; begin {$IF DEFINED(DARWIN)} Result := fpSystemStatus('diskutil eject ' + Drive^.DeviceId) = 0; if not Result then {$ENDIF} Result := fpSystemStatus('eject ' + Drive^.DeviceId) = 0; end; type {en Waits for a child process to finish and collects its exit status, causing it to be released by the system (prevents defunct processes). Instead of the wait-thread we could just ignore or handle SIGCHLD signal for the process, but this way we don't interfere with the signal handling. The downside is that there's a thread for every child process running. Another method is to periodically do a cleanup, for example from OnIdle or OnTimer event. Remember PIDs of spawned child processes and when cleaning call FpWaitpid(PID, nil, WNOHANG) on each PID. Downside is they are not released immediately after the child process finish (may be relevant if we want to display exit status to the user). } TWaitForPidThread = class(TThread) private FPID: TPid; protected procedure Execute; override; public constructor Create(WaitForPid: TPid); overload; end; constructor TWaitForPidThread.Create(WaitForPid: TPid); begin inherited Create(True); FPID := WaitForPid; FreeOnTerminate := True; end; procedure TWaitForPidThread.Execute; begin while (FpWaitPid(FPID, nil, 0) = -1) and (fpgeterrno() = ESysEINTR) do; end; function ExecuteCommand(Command: String; Args: TDynamicStringArray; StartPath: String): Boolean; var pid : TPid; WaitForPidThread: TWaitForPidThread; begin {$IFDEF DARWIN} // If we run application bundle (*.app) then // execute it by 'open -a' command (see 'man open' for details) if StrEnds(Command, '.app') then begin SetLength(Args, Length(Args) + 2); for pid := High(Args) downto Low(Args) + 2 do Args[pid]:= Args[pid - 2]; Args[0] := '-a'; Args[1] := Command; Command := 'open'; end; {$ENDIF} pid := fpFork; if pid = 0 then begin { Set child current directory } if Length(StartPath) > 0 then fpChdir(StartPath); { The child does the actual exec, and then exits } if FpExecLP(Command, Args) = -1 then Writeln(Format('Execute error %d: %s', [fpgeterrno, SysErrorMessage(fpgeterrno)])); { If the FpExecLP fails, we return an exitvalue of 127, to let it be known } fpExit(127); end else if pid = -1 then { Fork failed } begin raise Exception.Create('Fork failed: ' + Command); end else if pid > 0 then { Parent } begin WaitForPidThread := TWaitForPidThread.Create(pid); WaitForPidThread.Start; end; Result := (pid > 0); end; {$IF NOT DEFINED(DARWIN)} initialization DesktopEnv := GetDesktopEnvironment; {$IFDEF LINUX} CheckPMount; CheckUDisksCtl; {$ENDIF} {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/glib/�������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717737�017056� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/glib/uglib2.pas���������������������������������������������������0000644�0001750�0000144�00000605615�12311071132�020725� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGLib2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} {$LINKLIB libglib-2.0.so.0} {$LINKLIB libgobject-2.0.so.0} interface uses CTypes; const GLib2_library = 'libglib-2.0.so.0'; ASCII_DTOSTR_BUF_SIZE = 39; BIG_ENDIAN = 4321; CAN_INLINE = 1; CSET_A_2_Z_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; CSET_DIGITS = '0123456789'; CSET_a_2_z_lower = 'abcdefghijklmnopqrstuvwxyz'; DATALIST_FLAGS_MASK = 3; DATE_BAD_DAY = 0; DATE_BAD_JULIAN = 0; DATE_BAD_YEAR = 0; DIR_SEPARATOR = 92; DIR_SEPARATOR_S = '\'; E = 2.718282; GINT16_FORMAT = 'hi'; GINT16_MODIFIER = 'h'; GINT32_FORMAT = 'i'; GINT32_MODIFIER = ''; GINT64_FORMAT = 'li'; GINT64_MODIFIER = 'l'; GINTPTR_FORMAT = 'li'; GINTPTR_MODIFIER = 'l'; GNUC_FUNCTION = ''; GNUC_PRETTY_FUNCTION = ''; GSIZE_FORMAT = 'lu'; GSIZE_MODIFIER = 'l'; GSSIZE_FORMAT = 'li'; GUINT16_FORMAT = 'hu'; GUINT32_FORMAT = 'u'; GUINT64_FORMAT = 'lu'; GUINTPTR_FORMAT = 'lu'; HAVE_GINT64 = 1; HAVE_GNUC_VARARGS = 1; HAVE_GNUC_VISIBILITY = 1; HAVE_GROWING_STACK = 1; HAVE_INLINE = 1; HAVE_ISO_VARARGS = 1; HAVE___INLINE = 1; HAVE___INLINE__ = 1; HOOK_FLAG_USER_SHIFT = 4; IEEE754_DOUBLE_BIAS = 1023; IEEE754_FLOAT_BIAS = 127; KEY_FILE_DESKTOP_GROUP = 'Desktop Entry'; KEY_FILE_DESKTOP_KEY_CATEGORIES = 'Categories'; KEY_FILE_DESKTOP_KEY_COMMENT = 'Comment'; KEY_FILE_DESKTOP_KEY_EXEC = 'Exec'; KEY_FILE_DESKTOP_KEY_FULLNAME = 'X-GNOME-FullName'; KEY_FILE_DESKTOP_KEY_GENERIC_NAME = 'GenericName'; KEY_FILE_DESKTOP_KEY_GETTEXT_DOMAIN = 'X-GNOME-Gettext-Domain'; KEY_FILE_DESKTOP_KEY_HIDDEN = 'Hidden'; KEY_FILE_DESKTOP_KEY_ICON = 'Icon'; KEY_FILE_DESKTOP_KEY_KEYWORDS = 'Keywords'; KEY_FILE_DESKTOP_KEY_MIME_TYPE = 'MimeType'; KEY_FILE_DESKTOP_KEY_NAME = 'Name'; KEY_FILE_DESKTOP_KEY_NOT_SHOW_IN = 'NotShowIn'; KEY_FILE_DESKTOP_KEY_NO_DISPLAY = 'NoDisplay'; KEY_FILE_DESKTOP_KEY_ONLY_SHOW_IN = 'OnlyShowIn'; KEY_FILE_DESKTOP_KEY_PATH = 'Path'; KEY_FILE_DESKTOP_KEY_STARTUP_NOTIFY = 'StartupNotify'; KEY_FILE_DESKTOP_KEY_STARTUP_WM_CLASS = 'StartupWMClass'; KEY_FILE_DESKTOP_KEY_TERMINAL = 'Terminal'; KEY_FILE_DESKTOP_KEY_TRY_EXEC = 'TryExec'; KEY_FILE_DESKTOP_KEY_TYPE = 'Type'; KEY_FILE_DESKTOP_KEY_URL = 'URL'; KEY_FILE_DESKTOP_KEY_VERSION = 'Version'; KEY_FILE_DESKTOP_TYPE_APPLICATION = 'Application'; KEY_FILE_DESKTOP_TYPE_DIRECTORY = 'Directory'; KEY_FILE_DESKTOP_TYPE_LINK = 'Link'; LITTLE_ENDIAN = 1234; LN10 = 2.302585; LN2 = 0.693147; LOG_2_BASE_10 = 0.301030; LOG_DOMAIN = 0; LOG_FATAL_MASK = 0; LOG_LEVEL_USER_SHIFT = 8; MAJOR_VERSION = 2; MAXINT16 = 32767; MAXINT32 = 2147483647; MAXINT64 = 9223372036854775807; MAXINT8 = 127; MAXUINT16 = 65535; MAXUINT32 = 4294967295; MAXUINT64 = 18446744073709551615; MAXUINT8 = 255; MICRO_VERSION = 1; MININT16 = 32768; MININT32 = 2147483648; MININT64 = -9223372036854775808; MININT8 = 128; MINOR_VERSION = 36; MODULE_SUFFIX = 'so'; OPTION_REMAINING = ''; PDP_ENDIAN = 3412; PI = 3.141593; PI_2 = 1.570796; PI_4 = 0.785398; POLLFD_FORMAT = '%#I64x'; PRIORITY_DEFAULT = 0; PRIORITY_DEFAULT_IDLE = 200; PRIORITY_HIGH = -100; PRIORITY_HIGH_IDLE = 100; PRIORITY_LOW = 300; SEARCHPATH_SEPARATOR = 59; SEARCHPATH_SEPARATOR_S = ';'; SIZEOF_LONG = 8; SIZEOF_SIZE_T = 8; SIZEOF_VOID_P = 8; SQRT2 = 1.414214; STR_DELIMITERS = '_-|> <.'; SYSDEF_AF_INET = 2; SYSDEF_AF_INET6 = 10; SYSDEF_AF_UNIX = 1; SYSDEF_MSG_DONTROUTE = 4; SYSDEF_MSG_OOB = 1; SYSDEF_MSG_PEEK = 2; TIME_SPAN_DAY = 86400000000; TIME_SPAN_HOUR = 3600000000; TIME_SPAN_MILLISECOND = 1000; TIME_SPAN_MINUTE = 60000000; TIME_SPAN_SECOND = 1000000; UNICHAR_MAX_DECOMPOSITION_LENGTH = 18; URI_RESERVED_CHARS_GENERIC_DELIMITERS = ':/?#[]@'; URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS = '!$&''()*+,;='; USEC_PER_SEC = 1000000; VA_COPY_AS_ARRAY = 1; VERSION_MIN_REQUIRED = 2; WIN32_MSG_HANDLE = 19981206; type TGAsciiType = Integer; const { GAsciiType } G_ASCII_ALNUM: TGAsciiType = 1; G_ASCII_ALPHA: TGAsciiType = 2; G_ASCII_CNTRL: TGAsciiType = 4; G_ASCII_DIGIT: TGAsciiType = 8; G_ASCII_GRAPH: TGAsciiType = 16; G_ASCII_LOWER: TGAsciiType = 32; G_ASCII_PRINT: TGAsciiType = 64; G_ASCII_PUNCT: TGAsciiType = 128; G_ASCII_SPACE: TGAsciiType = 256; G_ASCII_UPPER: TGAsciiType = 512; G_ASCII_XDIGIT: TGAsciiType = 1024; type TGBookmarkFileError = Integer; const { GBookmarkFileError } G_BOOKMARK_FILE_ERROR_INVALID_URI: TGBookmarkFileError = 0; G_BOOKMARK_FILE_ERROR_INVALID_VALUE: TGBookmarkFileError = 1; G_BOOKMARK_FILE_ERROR_APP_NOT_REGISTERED: TGBookmarkFileError = 2; G_BOOKMARK_FILE_ERROR_URI_NOT_FOUND: TGBookmarkFileError = 3; G_BOOKMARK_FILE_ERROR_READ: TGBookmarkFileError = 4; G_BOOKMARK_FILE_ERROR_UNKNOWN_ENCODING: TGBookmarkFileError = 5; G_BOOKMARK_FILE_ERROR_WRITE: TGBookmarkFileError = 6; G_BOOKMARK_FILE_ERROR_FILE_NOT_FOUND: TGBookmarkFileError = 7; type TGChecksumType = Integer; const { GChecksumType } G_CHECKSUM_MD5: TGChecksumType = 0; G_CHECKSUM_SHA1: TGChecksumType = 1; G_CHECKSUM_SHA256: TGChecksumType = 2; G_CHECKSUM_SHA512: TGChecksumType = 3; type TGConvertError = Integer; const { GConvertError } G_CONVERT_ERROR_NO_CONVERSION: TGConvertError = 0; G_CONVERT_ERROR_ILLEGAL_SEQUENCE: TGConvertError = 1; G_CONVERT_ERROR_FAILED: TGConvertError = 2; G_CONVERT_ERROR_PARTIAL_INPUT: TGConvertError = 3; G_CONVERT_ERROR_BAD_URI: TGConvertError = 4; G_CONVERT_ERROR_NOT_ABSOLUTE_PATH: TGConvertError = 5; type TGDateMonth = Integer; const { GDateMonth } G_DATE_BAD_MONTH: TGDateMonth = 0; G_DATE_JANUARY: TGDateMonth = 1; G_DATE_FEBRUARY: TGDateMonth = 2; G_DATE_MARCH: TGDateMonth = 3; G_DATE_APRIL: TGDateMonth = 4; G_DATE_MAY: TGDateMonth = 5; G_DATE_JUNE: TGDateMonth = 6; G_DATE_JULY: TGDateMonth = 7; G_DATE_AUGUST: TGDateMonth = 8; G_DATE_SEPTEMBER: TGDateMonth = 9; G_DATE_OCTOBER: TGDateMonth = 10; G_DATE_NOVEMBER: TGDateMonth = 11; G_DATE_DECEMBER: TGDateMonth = 12; type TGDateWeekday = Integer; const { GDateWeekday } G_DATE_BAD_WEEKDAY: TGDateWeekday = 0; G_DATE_MONDAY: TGDateWeekday = 1; G_DATE_TUESDAY: TGDateWeekday = 2; G_DATE_WEDNESDAY: TGDateWeekday = 3; G_DATE_THURSDAY: TGDateWeekday = 4; G_DATE_FRIDAY: TGDateWeekday = 5; G_DATE_SATURDAY: TGDateWeekday = 6; G_DATE_SUNDAY: TGDateWeekday = 7; type TGDateDMY = Integer; const { GDateDMY } G_DATE_DAY: TGDateDMY = 0; G_DATE_MONTH: TGDateDMY = 1; G_DATE_YEAR: TGDateDMY = 2; type TGTimeType = Integer; const { GTimeType } G_TIME_TYPE_STANDARD: TGTimeType = 0; G_TIME_TYPE_DAYLIGHT: TGTimeType = 1; G_TIME_TYPE_UNIVERSAL: TGTimeType = 2; type TGErrorType = Integer; const { GErrorType } G_ERR_UNKNOWN: TGErrorType = 0; G_ERR_UNEXP_EOF: TGErrorType = 1; G_ERR_UNEXP_EOF_IN_STRING: TGErrorType = 2; G_ERR_UNEXP_EOF_IN_COMMENT: TGErrorType = 3; G_ERR_NON_DIGIT_IN_CONST: TGErrorType = 4; G_ERR_DIGIT_RADIX: TGErrorType = 5; G_ERR_FLOAT_RADIX: TGErrorType = 6; G_ERR_FLOAT_MALFORMED: TGErrorType = 7; type TGFileError = Integer; const { GFileError } G_FILE_ERROR_EXIST: TGFileError = 0; G_FILE_ERROR_ISDIR: TGFileError = 1; G_FILE_ERROR_ACCES: TGFileError = 2; G_FILE_ERROR_NAMETOOLONG: TGFileError = 3; G_FILE_ERROR_NOENT: TGFileError = 4; G_FILE_ERROR_NOTDIR: TGFileError = 5; G_FILE_ERROR_NXIO: TGFileError = 6; G_FILE_ERROR_NODEV: TGFileError = 7; G_FILE_ERROR_ROFS: TGFileError = 8; G_FILE_ERROR_TXTBSY: TGFileError = 9; G_FILE_ERROR_FAULT: TGFileError = 10; G_FILE_ERROR_LOOP: TGFileError = 11; G_FILE_ERROR_NOSPC: TGFileError = 12; G_FILE_ERROR_NOMEM: TGFileError = 13; G_FILE_ERROR_MFILE: TGFileError = 14; G_FILE_ERROR_NFILE: TGFileError = 15; G_FILE_ERROR_BADF: TGFileError = 16; G_FILE_ERROR_INVAL: TGFileError = 17; G_FILE_ERROR_PIPE: TGFileError = 18; G_FILE_ERROR_AGAIN: TGFileError = 19; G_FILE_ERROR_INTR: TGFileError = 20; G_FILE_ERROR_IO: TGFileError = 21; G_FILE_ERROR_PERM: TGFileError = 22; G_FILE_ERROR_NOSYS: TGFileError = 23; G_FILE_ERROR_FAILED: TGFileError = 24; type TGFileTest = Integer; const { GFileTest } G_FILE_TEST_IS_REGULAR: TGFileTest = 1; G_FILE_TEST_IS_SYMLINK: TGFileTest = 2; G_FILE_TEST_IS_DIR: TGFileTest = 4; G_FILE_TEST_IS_EXECUTABLE: TGFileTest = 8; G_FILE_TEST_EXISTS: TGFileTest = 16; type TGFormatSizeFlags = Integer; const { GFormatSizeFlags } G_FORMAT_SIZE_DEFAULT: TGFormatSizeFlags = 0; G_FORMAT_SIZE_LONG_FORMAT: TGFormatSizeFlags = 1; G_FORMAT_SIZE_IEC_UNITS: TGFormatSizeFlags = 2; type TGHookFlagMask = Integer; const { GHookFlagMask } G_HOOK_FLAG_ACTIVE: TGHookFlagMask = 1; G_HOOK_FLAG_IN_CALL: TGHookFlagMask = 2; G_HOOK_FLAG_MASK: TGHookFlagMask = 15; type TGSeekType = Integer; const { GSeekType } G_SEEK_CUR: TGSeekType = 0; G_SEEK_SET: TGSeekType = 1; G_SEEK_END: TGSeekType = 2; type TGIOCondition = Integer; const { GIOCondition } G_IO_IN: TGIOCondition = 1; G_IO_OUT: TGIOCondition = 4; G_IO_PRI: TGIOCondition = 2; G_IO_ERR: TGIOCondition = 8; G_IO_HUP: TGIOCondition = 16; G_IO_NVAL: TGIOCondition = 32; type TGIOFlags = Integer; const { GIOFlags } G_IO_FLAG_APPEND: TGIOFlags = 1; G_IO_FLAG_NONBLOCK: TGIOFlags = 2; G_IO_FLAG_IS_READABLE: TGIOFlags = 4; G_IO_FLAG_IS_WRITABLE: TGIOFlags = 8; G_IO_FLAG_IS_WRITEABLE: TGIOFlags = 8; G_IO_FLAG_IS_SEEKABLE: TGIOFlags = 16; G_IO_FLAG_MASK: TGIOFlags = 31; G_IO_FLAG_GET_MASK: TGIOFlags = 31; G_IO_FLAG_SET_MASK: TGIOFlags = 3; type TGIOStatus = Integer; const { GIOStatus } G_IO_STATUS_ERROR: TGIOStatus = 0; G_IO_STATUS_NORMAL: TGIOStatus = 1; G_IO_STATUS_EOF: TGIOStatus = 2; G_IO_STATUS_AGAIN: TGIOStatus = 3; type TGIOError = Integer; const { GIOError } G_IO_ERROR_NONE: TGIOError = 0; G_IO_ERROR_AGAIN: TGIOError = 1; G_IO_ERROR_INVAL: TGIOError = 2; G_IO_ERROR_UNKNOWN: TGIOError = 3; type TGIOChannelError = Integer; const { GIOChannelError } G_IO_CHANNEL_ERROR_FBIG: TGIOChannelError = 0; G_IO_CHANNEL_ERROR_INVAL: TGIOChannelError = 1; G_IO_CHANNEL_ERROR_IO: TGIOChannelError = 2; G_IO_CHANNEL_ERROR_ISDIR: TGIOChannelError = 3; G_IO_CHANNEL_ERROR_NOSPC: TGIOChannelError = 4; G_IO_CHANNEL_ERROR_NXIO: TGIOChannelError = 5; G_IO_CHANNEL_ERROR_OVERFLOW: TGIOChannelError = 6; G_IO_CHANNEL_ERROR_PIPE: TGIOChannelError = 7; G_IO_CHANNEL_ERROR_FAILED: TGIOChannelError = 8; type TGKeyFileFlags = Integer; const { GKeyFileFlags } G_KEY_FILE_NONE: TGKeyFileFlags = 0; G_KEY_FILE_KEEP_COMMENTS: TGKeyFileFlags = 1; G_KEY_FILE_KEEP_TRANSLATIONS: TGKeyFileFlags = 2; type TGKeyFileError = Integer; const { GKeyFileError } G_KEY_FILE_ERROR_UNKNOWN_ENCODING: TGKeyFileError = 0; G_KEY_FILE_ERROR_PARSE: TGKeyFileError = 1; G_KEY_FILE_ERROR_NOT_FOUND: TGKeyFileError = 2; G_KEY_FILE_ERROR_KEY_NOT_FOUND: TGKeyFileError = 3; G_KEY_FILE_ERROR_GROUP_NOT_FOUND: TGKeyFileError = 4; G_KEY_FILE_ERROR_INVALID_VALUE: TGKeyFileError = 5; type TGLogLevelFlags = Integer; const { GLogLevelFlags } G_LOG_FLAG_RECURSION: TGLogLevelFlags = 1; G_LOG_FLAG_FATAL: TGLogLevelFlags = 2; G_LOG_LEVEL_ERROR: TGLogLevelFlags = 4; G_LOG_LEVEL_CRITICAL: TGLogLevelFlags = 8; G_LOG_LEVEL_WARNING: TGLogLevelFlags = 16; G_LOG_LEVEL_MESSAGE: TGLogLevelFlags = 32; G_LOG_LEVEL_INFO: TGLogLevelFlags = 64; G_LOG_LEVEL_DEBUG: TGLogLevelFlags = 128; G_LOG_LEVEL_MASK: TGLogLevelFlags = -4; type TGMarkupCollectType = Integer; const { GMarkupCollectType } G_MARKUP_COLLECT_INVALID: TGMarkupCollectType = 0; G_MARKUP_COLLECT_STRING: TGMarkupCollectType = 1; G_MARKUP_COLLECT_STRDUP: TGMarkupCollectType = 2; G_MARKUP_COLLECT_BOOLEAN: TGMarkupCollectType = 3; G_MARKUP_COLLECT_TRISTATE: TGMarkupCollectType = 4; G_MARKUP_COLLECT_OPTIONAL: TGMarkupCollectType = 65536; type TGMarkupError = Integer; const { GMarkupError } G_MARKUP_ERROR_BAD_UTF8: TGMarkupError = 0; G_MARKUP_ERROR_EMPTY: TGMarkupError = 1; G_MARKUP_ERROR_PARSE: TGMarkupError = 2; G_MARKUP_ERROR_UNKNOWN_ELEMENT: TGMarkupError = 3; G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: TGMarkupError = 4; G_MARKUP_ERROR_INVALID_CONTENT: TGMarkupError = 5; G_MARKUP_ERROR_MISSING_ATTRIBUTE: TGMarkupError = 6; type TGMarkupParseFlags = Integer; const { GMarkupParseFlags } G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: TGMarkupParseFlags = 1; G_MARKUP_TREAT_CDATA_AS_TEXT: TGMarkupParseFlags = 2; G_MARKUP_PREFIX_ERROR_POSITION: TGMarkupParseFlags = 4; type TGRegexCompileFlags = Integer; const { GRegexCompileFlags } G_REGEX_CASELESS: TGRegexCompileFlags = 1; G_REGEX_MULTILINE: TGRegexCompileFlags = 2; G_REGEX_DOTALL: TGRegexCompileFlags = 4; G_REGEX_EXTENDED: TGRegexCompileFlags = 8; G_REGEX_ANCHORED: TGRegexCompileFlags = 16; G_REGEX_DOLLAR_ENDONLY: TGRegexCompileFlags = 32; G_REGEX_UNGREEDY: TGRegexCompileFlags = 512; G_REGEX_RAW: TGRegexCompileFlags = 2048; G_REGEX_NO_AUTO_CAPTURE: TGRegexCompileFlags = 4096; G_REGEX_OPTIMIZE: TGRegexCompileFlags = 8192; G_REGEX_FIRSTLINE: TGRegexCompileFlags = 262144; G_REGEX_DUPNAMES: TGRegexCompileFlags = 524288; G_REGEX_NEWLINE_CR: TGRegexCompileFlags = 1048576; G_REGEX_NEWLINE_LF: TGRegexCompileFlags = 2097152; G_REGEX_NEWLINE_CRLF: TGRegexCompileFlags = 3145728; G_REGEX_NEWLINE_ANYCRLF: TGRegexCompileFlags = 5242880; G_REGEX_BSR_ANYCRLF: TGRegexCompileFlags = 8388608; G_REGEX_JAVASCRIPT_COMPAT: TGRegexCompileFlags = 33554432; type TGRegexMatchFlags = Integer; const { GRegexMatchFlags } G_REGEX_MATCH_ANCHORED: TGRegexMatchFlags = 16; G_REGEX_MATCH_NOTBOL: TGRegexMatchFlags = 128; G_REGEX_MATCH_NOTEOL: TGRegexMatchFlags = 256; G_REGEX_MATCH_NOTEMPTY: TGRegexMatchFlags = 1024; G_REGEX_MATCH_PARTIAL: TGRegexMatchFlags = 32768; G_REGEX_MATCH_NEWLINE_CR: TGRegexMatchFlags = 1048576; G_REGEX_MATCH_NEWLINE_LF: TGRegexMatchFlags = 2097152; G_REGEX_MATCH_NEWLINE_CRLF: TGRegexMatchFlags = 3145728; G_REGEX_MATCH_NEWLINE_ANY: TGRegexMatchFlags = 4194304; G_REGEX_MATCH_NEWLINE_ANYCRLF: TGRegexMatchFlags = 5242880; G_REGEX_MATCH_BSR_ANYCRLF: TGRegexMatchFlags = 8388608; G_REGEX_MATCH_BSR_ANY: TGRegexMatchFlags = 16777216; G_REGEX_MATCH_PARTIAL_SOFT: TGRegexMatchFlags = 32768; G_REGEX_MATCH_PARTIAL_HARD: TGRegexMatchFlags = 134217728; G_REGEX_MATCH_NOTEMPTY_ATSTART: TGRegexMatchFlags = 268435456; type TGTraverseFlags = Integer; const { GTraverseFlags } G_TRAVERSE_LEAVES: TGTraverseFlags = 1; G_TRAVERSE_NON_LEAVES: TGTraverseFlags = 2; G_TRAVERSE_ALL: TGTraverseFlags = 3; G_TRAVERSE_MASK: TGTraverseFlags = 3; G_TRAVERSE_LEAFS: TGTraverseFlags = 1; G_TRAVERSE_NON_LEAFS: TGTraverseFlags = 2; type TGTraverseType = Integer; const { GTraverseType } G_IN_ORDER: TGTraverseType = 0; G_PRE_ORDER: TGTraverseType = 1; G_POST_ORDER: TGTraverseType = 2; G_LEVEL_ORDER: TGTraverseType = 3; type TGNormalizeMode = Integer; const { GNormalizeMode } G_NORMALIZE_DEFAULT: TGNormalizeMode = 0; G_NORMALIZE_NFD: TGNormalizeMode = 0; G_NORMALIZE_DEFAULT_COMPOSE: TGNormalizeMode = 1; G_NORMALIZE_NFC: TGNormalizeMode = 1; G_NORMALIZE_ALL: TGNormalizeMode = 2; G_NORMALIZE_NFKD: TGNormalizeMode = 2; G_NORMALIZE_ALL_COMPOSE: TGNormalizeMode = 3; G_NORMALIZE_NFKC: TGNormalizeMode = 3; type TGOnceStatus = Integer; const { GOnceStatus } G_ONCE_STATUS_NOTCALLED: TGOnceStatus = 0; G_ONCE_STATUS_PROGRESS: TGOnceStatus = 1; G_ONCE_STATUS_READY: TGOnceStatus = 2; type TGOptionArg = Integer; const { GOptionArg } G_OPTION_ARG_NONE: TGOptionArg = 0; G_OPTION_ARG_STRING: TGOptionArg = 1; G_OPTION_ARG_INT: TGOptionArg = 2; G_OPTION_ARG_CALLBACK: TGOptionArg = 3; G_OPTION_ARG_FILENAME: TGOptionArg = 4; G_OPTION_ARG_STRING_ARRAY: TGOptionArg = 5; G_OPTION_ARG_FILENAME_ARRAY: TGOptionArg = 6; G_OPTION_ARG_DOUBLE: TGOptionArg = 7; G_OPTION_ARG_INT64: TGOptionArg = 8; type TGOptionError = Integer; const { GOptionError } G_OPTION_ERROR_UNKNOWN_OPTION: TGOptionError = 0; G_OPTION_ERROR_BAD_VALUE: TGOptionError = 1; G_OPTION_ERROR_FAILED: TGOptionError = 2; type TGOptionFlags = Integer; const { GOptionFlags } G_OPTION_FLAG_HIDDEN: TGOptionFlags = 1; G_OPTION_FLAG_IN_MAIN: TGOptionFlags = 2; G_OPTION_FLAG_REVERSE: TGOptionFlags = 4; G_OPTION_FLAG_NO_ARG: TGOptionFlags = 8; G_OPTION_FLAG_FILENAME: TGOptionFlags = 16; G_OPTION_FLAG_OPTIONAL_ARG: TGOptionFlags = 32; G_OPTION_FLAG_NOALIAS: TGOptionFlags = 64; type TGRegexError = Integer; const { GRegexError } G_REGEX_ERROR_COMPILE: TGRegexError = 0; G_REGEX_ERROR_OPTIMIZE: TGRegexError = 1; G_REGEX_ERROR_REPLACE: TGRegexError = 2; G_REGEX_ERROR_MATCH: TGRegexError = 3; G_REGEX_ERROR_INTERNAL: TGRegexError = 4; G_REGEX_ERROR_STRAY_BACKSLASH: TGRegexError = 101; G_REGEX_ERROR_MISSING_CONTROL_CHAR: TGRegexError = 102; G_REGEX_ERROR_UNRECOGNIZED_ESCAPE: TGRegexError = 103; G_REGEX_ERROR_QUANTIFIERS_OUT_OF_ORDER: TGRegexError = 104; G_REGEX_ERROR_QUANTIFIER_TOO_BIG: TGRegexError = 105; G_REGEX_ERROR_UNTERMINATED_CHARACTER_CLASS: TGRegexError = 106; G_REGEX_ERROR_INVALID_ESCAPE_IN_CHARACTER_CLASS: TGRegexError = 107; G_REGEX_ERROR_RANGE_OUT_OF_ORDER: TGRegexError = 108; G_REGEX_ERROR_NOTHING_TO_REPEAT: TGRegexError = 109; G_REGEX_ERROR_UNRECOGNIZED_CHARACTER: TGRegexError = 112; G_REGEX_ERROR_POSIX_NAMED_CLASS_OUTSIDE_CLASS: TGRegexError = 113; G_REGEX_ERROR_UNMATCHED_PARENTHESIS: TGRegexError = 114; G_REGEX_ERROR_INEXISTENT_SUBPATTERN_REFERENCE: TGRegexError = 115; G_REGEX_ERROR_UNTERMINATED_COMMENT: TGRegexError = 118; G_REGEX_ERROR_EXPRESSION_TOO_LARGE: TGRegexError = 120; G_REGEX_ERROR_MEMORY_ERROR: TGRegexError = 121; G_REGEX_ERROR_VARIABLE_LENGTH_LOOKBEHIND: TGRegexError = 125; G_REGEX_ERROR_MALFORMED_CONDITION: TGRegexError = 126; G_REGEX_ERROR_TOO_MANY_CONDITIONAL_BRANCHES: TGRegexError = 127; G_REGEX_ERROR_ASSERTION_EXPECTED: TGRegexError = 128; G_REGEX_ERROR_UNKNOWN_POSIX_CLASS_NAME: TGRegexError = 130; G_REGEX_ERROR_POSIX_COLLATING_ELEMENTS_NOT_SUPPORTED: TGRegexError = 131; G_REGEX_ERROR_HEX_CODE_TOO_LARGE: TGRegexError = 134; G_REGEX_ERROR_INVALID_CONDITION: TGRegexError = 135; G_REGEX_ERROR_SINGLE_BYTE_MATCH_IN_LOOKBEHIND: TGRegexError = 136; G_REGEX_ERROR_INFINITE_LOOP: TGRegexError = 140; G_REGEX_ERROR_MISSING_SUBPATTERN_NAME_TERMINATOR: TGRegexError = 142; G_REGEX_ERROR_DUPLICATE_SUBPATTERN_NAME: TGRegexError = 143; G_REGEX_ERROR_MALFORMED_PROPERTY: TGRegexError = 146; G_REGEX_ERROR_UNKNOWN_PROPERTY: TGRegexError = 147; G_REGEX_ERROR_SUBPATTERN_NAME_TOO_LONG: TGRegexError = 148; G_REGEX_ERROR_TOO_MANY_SUBPATTERNS: TGRegexError = 149; G_REGEX_ERROR_INVALID_OCTAL_VALUE: TGRegexError = 151; G_REGEX_ERROR_TOO_MANY_BRANCHES_IN_DEFINE: TGRegexError = 154; G_REGEX_ERROR_DEFINE_REPETION: TGRegexError = 155; G_REGEX_ERROR_INCONSISTENT_NEWLINE_OPTIONS: TGRegexError = 156; G_REGEX_ERROR_MISSING_BACK_REFERENCE: TGRegexError = 157; G_REGEX_ERROR_INVALID_RELATIVE_REFERENCE: TGRegexError = 158; G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_FORBIDDEN: TGRegexError = 159; G_REGEX_ERROR_UNKNOWN_BACKTRACKING_CONTROL_VERB: TGRegexError = 160; G_REGEX_ERROR_NUMBER_TOO_BIG: TGRegexError = 161; G_REGEX_ERROR_MISSING_SUBPATTERN_NAME: TGRegexError = 162; G_REGEX_ERROR_MISSING_DIGIT: TGRegexError = 163; G_REGEX_ERROR_INVALID_DATA_CHARACTER: TGRegexError = 164; G_REGEX_ERROR_EXTRA_SUBPATTERN_NAME: TGRegexError = 165; G_REGEX_ERROR_BACKTRACKING_CONTROL_VERB_ARGUMENT_REQUIRED: TGRegexError = 166; G_REGEX_ERROR_INVALID_CONTROL_CHAR: TGRegexError = 168; G_REGEX_ERROR_MISSING_NAME: TGRegexError = 169; G_REGEX_ERROR_NOT_SUPPORTED_IN_CLASS: TGRegexError = 171; G_REGEX_ERROR_TOO_MANY_FORWARD_REFERENCES: TGRegexError = 172; G_REGEX_ERROR_NAME_TOO_LONG: TGRegexError = 175; G_REGEX_ERROR_CHARACTER_VALUE_TOO_LARGE: TGRegexError = 176; type TGTokenType = Integer; const { GTokenType } G_TOKEN_EOF: TGTokenType = 0; G_TOKEN_LEFT_PAREN: TGTokenType = 40; G_TOKEN_RIGHT_PAREN: TGTokenType = 41; G_TOKEN_LEFT_CURLY: TGTokenType = 123; G_TOKEN_RIGHT_CURLY: TGTokenType = 125; G_TOKEN_LEFT_BRACE: TGTokenType = 91; G_TOKEN_RIGHT_BRACE: TGTokenType = 93; G_TOKEN_EQUAL_SIGN: TGTokenType = 61; G_TOKEN_COMMA: TGTokenType = 44; G_TOKEN_NONE: TGTokenType = 256; G_TOKEN_ERROR: TGTokenType = 257; G_TOKEN_CHAR: TGTokenType = 258; G_TOKEN_BINARY: TGTokenType = 259; G_TOKEN_OCTAL: TGTokenType = 260; G_TOKEN_INT: TGTokenType = 261; G_TOKEN_HEX: TGTokenType = 262; G_TOKEN_FLOAT: TGTokenType = 263; G_TOKEN_STRING: TGTokenType = 264; G_TOKEN_SYMBOL: TGTokenType = 265; G_TOKEN_IDENTIFIER: TGTokenType = 266; G_TOKEN_IDENTIFIER_NULL: TGTokenType = 267; G_TOKEN_COMMENT_SINGLE: TGTokenType = 268; G_TOKEN_COMMENT_MULTI: TGTokenType = 269; type TGShellError = Integer; const { GShellError } G_SHELL_ERROR_BAD_QUOTING: TGShellError = 0; G_SHELL_ERROR_EMPTY_STRING: TGShellError = 1; G_SHELL_ERROR_FAILED: TGShellError = 2; type TGSliceConfig = Integer; const { GSliceConfig } G_SLICE_CONFIG_ALWAYS_MALLOC: TGSliceConfig = 1; G_SLICE_CONFIG_BYPASS_MAGAZINES: TGSliceConfig = 2; G_SLICE_CONFIG_WORKING_SET_MSECS: TGSliceConfig = 3; G_SLICE_CONFIG_COLOR_INCREMENT: TGSliceConfig = 4; G_SLICE_CONFIG_CHUNK_SIZES: TGSliceConfig = 5; G_SLICE_CONFIG_CONTENTION_COUNTER: TGSliceConfig = 6; type TGSpawnError = Integer; const { GSpawnError } G_SPAWN_ERROR_FORK: TGSpawnError = 0; G_SPAWN_ERROR_READ: TGSpawnError = 1; G_SPAWN_ERROR_CHDIR: TGSpawnError = 2; G_SPAWN_ERROR_ACCES: TGSpawnError = 3; G_SPAWN_ERROR_PERM: TGSpawnError = 4; G_SPAWN_ERROR_TOO_BIG: TGSpawnError = 5; G_SPAWN_ERROR_2BIG: TGSpawnError = 5; G_SPAWN_ERROR_NOEXEC: TGSpawnError = 6; G_SPAWN_ERROR_NAMETOOLONG: TGSpawnError = 7; G_SPAWN_ERROR_NOENT: TGSpawnError = 8; G_SPAWN_ERROR_NOMEM: TGSpawnError = 9; G_SPAWN_ERROR_NOTDIR: TGSpawnError = 10; G_SPAWN_ERROR_LOOP: TGSpawnError = 11; G_SPAWN_ERROR_TXTBUSY: TGSpawnError = 12; G_SPAWN_ERROR_IO: TGSpawnError = 13; G_SPAWN_ERROR_NFILE: TGSpawnError = 14; G_SPAWN_ERROR_MFILE: TGSpawnError = 15; G_SPAWN_ERROR_INVAL: TGSpawnError = 16; G_SPAWN_ERROR_ISDIR: TGSpawnError = 17; G_SPAWN_ERROR_LIBBAD: TGSpawnError = 18; G_SPAWN_ERROR_FAILED: TGSpawnError = 19; type TGSpawnFlags = Integer; const { GSpawnFlags } G_SPAWN_LEAVE_DESCRIPTORS_OPEN: TGSpawnFlags = 1; G_SPAWN_DO_NOT_REAP_CHILD: TGSpawnFlags = 2; G_SPAWN_SEARCH_PATH: TGSpawnFlags = 4; G_SPAWN_STDOUT_TO_DEV_NULL: TGSpawnFlags = 8; G_SPAWN_STDERR_TO_DEV_NULL: TGSpawnFlags = 16; G_SPAWN_CHILD_INHERITS_STDIN: TGSpawnFlags = 32; G_SPAWN_FILE_AND_ARGV_ZERO: TGSpawnFlags = 64; G_SPAWN_SEARCH_PATH_FROM_ENVP: TGSpawnFlags = 128; type TGTestLogType = Integer; const { GTestLogType } G_TEST_LOG_NONE: TGTestLogType = 0; G_TEST_LOG_ERROR: TGTestLogType = 1; G_TEST_LOG_START_BINARY: TGTestLogType = 2; G_TEST_LOG_LIST_CASE: TGTestLogType = 3; G_TEST_LOG_SKIP_CASE: TGTestLogType = 4; G_TEST_LOG_START_CASE: TGTestLogType = 5; G_TEST_LOG_STOP_CASE: TGTestLogType = 6; G_TEST_LOG_MIN_RESULT: TGTestLogType = 7; G_TEST_LOG_MAX_RESULT: TGTestLogType = 8; G_TEST_LOG_MESSAGE: TGTestLogType = 9; type TGTestTrapFlags = Integer; const { GTestTrapFlags } G_TEST_TRAP_SILENCE_STDOUT: TGTestTrapFlags = 128; G_TEST_TRAP_SILENCE_STDERR: TGTestTrapFlags = 256; G_TEST_TRAP_INHERIT_STDIN: TGTestTrapFlags = 512; type TGThreadError = Integer; const { GThreadError } G_THREAD_ERROR_AGAIN: TGThreadError = 0; type TGUnicodeBreakType = Integer; const { GUnicodeBreakType } G_UNICODE_BREAK_MANDATORY: TGUnicodeBreakType = 0; G_UNICODE_BREAK_CARRIAGE_RETURN: TGUnicodeBreakType = 1; G_UNICODE_BREAK_LINE_FEED: TGUnicodeBreakType = 2; G_UNICODE_BREAK_COMBINING_MARK: TGUnicodeBreakType = 3; G_UNICODE_BREAK_SURROGATE: TGUnicodeBreakType = 4; G_UNICODE_BREAK_ZERO_WIDTH_SPACE: TGUnicodeBreakType = 5; G_UNICODE_BREAK_INSEPARABLE: TGUnicodeBreakType = 6; G_UNICODE_BREAK_NON_BREAKING_GLUE: TGUnicodeBreakType = 7; G_UNICODE_BREAK_CONTINGENT: TGUnicodeBreakType = 8; G_UNICODE_BREAK_SPACE: TGUnicodeBreakType = 9; G_UNICODE_BREAK_AFTER: TGUnicodeBreakType = 10; G_UNICODE_BREAK_BEFORE: TGUnicodeBreakType = 11; G_UNICODE_BREAK_BEFORE_AND_AFTER: TGUnicodeBreakType = 12; G_UNICODE_BREAK_HYPHEN: TGUnicodeBreakType = 13; G_UNICODE_BREAK_NON_STARTER: TGUnicodeBreakType = 14; G_UNICODE_BREAK_OPEN_PUNCTUATION: TGUnicodeBreakType = 15; G_UNICODE_BREAK_CLOSE_PUNCTUATION: TGUnicodeBreakType = 16; G_UNICODE_BREAK_QUOTATION: TGUnicodeBreakType = 17; G_UNICODE_BREAK_EXCLAMATION: TGUnicodeBreakType = 18; G_UNICODE_BREAK_IDEOGRAPHIC: TGUnicodeBreakType = 19; G_UNICODE_BREAK_NUMERIC: TGUnicodeBreakType = 20; G_UNICODE_BREAK_INFIX_SEPARATOR: TGUnicodeBreakType = 21; G_UNICODE_BREAK_SYMBOL: TGUnicodeBreakType = 22; G_UNICODE_BREAK_ALPHABETIC: TGUnicodeBreakType = 23; G_UNICODE_BREAK_PREFIX: TGUnicodeBreakType = 24; G_UNICODE_BREAK_POSTFIX: TGUnicodeBreakType = 25; G_UNICODE_BREAK_COMPLEX_CONTEXT: TGUnicodeBreakType = 26; G_UNICODE_BREAK_AMBIGUOUS: TGUnicodeBreakType = 27; G_UNICODE_BREAK_UNKNOWN: TGUnicodeBreakType = 28; G_UNICODE_BREAK_NEXT_LINE: TGUnicodeBreakType = 29; G_UNICODE_BREAK_WORD_JOINER: TGUnicodeBreakType = 30; G_UNICODE_BREAK_HANGUL_L_JAMO: TGUnicodeBreakType = 31; G_UNICODE_BREAK_HANGUL_V_JAMO: TGUnicodeBreakType = 32; G_UNICODE_BREAK_HANGUL_T_JAMO: TGUnicodeBreakType = 33; G_UNICODE_BREAK_HANGUL_LV_SYLLABLE: TGUnicodeBreakType = 34; G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE: TGUnicodeBreakType = 35; G_UNICODE_BREAK_CLOSE_PARANTHESIS: TGUnicodeBreakType = 36; G_UNICODE_BREAK_CONDITIONAL_JAPANESE_STARTER: TGUnicodeBreakType = 37; G_UNICODE_BREAK_HEBREW_LETTER: TGUnicodeBreakType = 38; G_UNICODE_BREAK_REGIONAL_INDICATOR: TGUnicodeBreakType = 39; type TGUnicodeScript = Integer; const { GUnicodeScript } G_UNICODE_SCRIPT_INVALID_CODE: TGUnicodeScript = -1; G_UNICODE_SCRIPT_COMMON: TGUnicodeScript = 0; G_UNICODE_SCRIPT_INHERITED: TGUnicodeScript = 1; G_UNICODE_SCRIPT_ARABIC: TGUnicodeScript = 2; G_UNICODE_SCRIPT_ARMENIAN: TGUnicodeScript = 3; G_UNICODE_SCRIPT_BENGALI: TGUnicodeScript = 4; G_UNICODE_SCRIPT_BOPOMOFO: TGUnicodeScript = 5; G_UNICODE_SCRIPT_CHEROKEE: TGUnicodeScript = 6; G_UNICODE_SCRIPT_COPTIC: TGUnicodeScript = 7; G_UNICODE_SCRIPT_CYRILLIC: TGUnicodeScript = 8; G_UNICODE_SCRIPT_DESERET: TGUnicodeScript = 9; G_UNICODE_SCRIPT_DEVANAGARI: TGUnicodeScript = 10; G_UNICODE_SCRIPT_ETHIOPIC: TGUnicodeScript = 11; G_UNICODE_SCRIPT_GEORGIAN: TGUnicodeScript = 12; G_UNICODE_SCRIPT_GOTHIC: TGUnicodeScript = 13; G_UNICODE_SCRIPT_GREEK: TGUnicodeScript = 14; G_UNICODE_SCRIPT_GUJARATI: TGUnicodeScript = 15; G_UNICODE_SCRIPT_GURMUKHI: TGUnicodeScript = 16; G_UNICODE_SCRIPT_HAN: TGUnicodeScript = 17; G_UNICODE_SCRIPT_HANGUL: TGUnicodeScript = 18; G_UNICODE_SCRIPT_HEBREW: TGUnicodeScript = 19; G_UNICODE_SCRIPT_HIRAGANA: TGUnicodeScript = 20; G_UNICODE_SCRIPT_KANNADA: TGUnicodeScript = 21; G_UNICODE_SCRIPT_KATAKANA: TGUnicodeScript = 22; G_UNICODE_SCRIPT_KHMER: TGUnicodeScript = 23; G_UNICODE_SCRIPT_LAO: TGUnicodeScript = 24; G_UNICODE_SCRIPT_LATIN: TGUnicodeScript = 25; G_UNICODE_SCRIPT_MALAYALAM: TGUnicodeScript = 26; G_UNICODE_SCRIPT_MONGOLIAN: TGUnicodeScript = 27; G_UNICODE_SCRIPT_MYANMAR: TGUnicodeScript = 28; G_UNICODE_SCRIPT_OGHAM: TGUnicodeScript = 29; G_UNICODE_SCRIPT_OLD_ITALIC: TGUnicodeScript = 30; G_UNICODE_SCRIPT_ORIYA: TGUnicodeScript = 31; G_UNICODE_SCRIPT_RUNIC: TGUnicodeScript = 32; G_UNICODE_SCRIPT_SINHALA: TGUnicodeScript = 33; G_UNICODE_SCRIPT_SYRIAC: TGUnicodeScript = 34; G_UNICODE_SCRIPT_TAMIL: TGUnicodeScript = 35; G_UNICODE_SCRIPT_TELUGU: TGUnicodeScript = 36; G_UNICODE_SCRIPT_THAANA: TGUnicodeScript = 37; G_UNICODE_SCRIPT_THAI: TGUnicodeScript = 38; G_UNICODE_SCRIPT_TIBETAN: TGUnicodeScript = 39; G_UNICODE_SCRIPT_CANADIAN_ABORIGINAL: TGUnicodeScript = 40; G_UNICODE_SCRIPT_YI: TGUnicodeScript = 41; G_UNICODE_SCRIPT_TAGALOG: TGUnicodeScript = 42; G_UNICODE_SCRIPT_HANUNOO: TGUnicodeScript = 43; G_UNICODE_SCRIPT_BUHID: TGUnicodeScript = 44; G_UNICODE_SCRIPT_TAGBANWA: TGUnicodeScript = 45; G_UNICODE_SCRIPT_BRAILLE: TGUnicodeScript = 46; G_UNICODE_SCRIPT_CYPRIOT: TGUnicodeScript = 47; G_UNICODE_SCRIPT_LIMBU: TGUnicodeScript = 48; G_UNICODE_SCRIPT_OSMANYA: TGUnicodeScript = 49; G_UNICODE_SCRIPT_SHAVIAN: TGUnicodeScript = 50; G_UNICODE_SCRIPT_LINEAR_B: TGUnicodeScript = 51; G_UNICODE_SCRIPT_TAI_LE: TGUnicodeScript = 52; G_UNICODE_SCRIPT_UGARITIC: TGUnicodeScript = 53; G_UNICODE_SCRIPT_NEW_TAI_LUE: TGUnicodeScript = 54; G_UNICODE_SCRIPT_BUGINESE: TGUnicodeScript = 55; G_UNICODE_SCRIPT_GLAGOLITIC: TGUnicodeScript = 56; G_UNICODE_SCRIPT_TIFINAGH: TGUnicodeScript = 57; G_UNICODE_SCRIPT_SYLOTI_NAGRI: TGUnicodeScript = 58; G_UNICODE_SCRIPT_OLD_PERSIAN: TGUnicodeScript = 59; G_UNICODE_SCRIPT_KHAROSHTHI: TGUnicodeScript = 60; G_UNICODE_SCRIPT_UNKNOWN: TGUnicodeScript = 61; G_UNICODE_SCRIPT_BALINESE: TGUnicodeScript = 62; G_UNICODE_SCRIPT_CUNEIFORM: TGUnicodeScript = 63; G_UNICODE_SCRIPT_PHOENICIAN: TGUnicodeScript = 64; G_UNICODE_SCRIPT_PHAGS_PA: TGUnicodeScript = 65; G_UNICODE_SCRIPT_NKO: TGUnicodeScript = 66; G_UNICODE_SCRIPT_KAYAH_LI: TGUnicodeScript = 67; G_UNICODE_SCRIPT_LEPCHA: TGUnicodeScript = 68; G_UNICODE_SCRIPT_REJANG: TGUnicodeScript = 69; G_UNICODE_SCRIPT_SUNDANESE: TGUnicodeScript = 70; G_UNICODE_SCRIPT_SAURASHTRA: TGUnicodeScript = 71; G_UNICODE_SCRIPT_CHAM: TGUnicodeScript = 72; G_UNICODE_SCRIPT_OL_CHIKI: TGUnicodeScript = 73; G_UNICODE_SCRIPT_VAI: TGUnicodeScript = 74; G_UNICODE_SCRIPT_CARIAN: TGUnicodeScript = 75; G_UNICODE_SCRIPT_LYCIAN: TGUnicodeScript = 76; G_UNICODE_SCRIPT_LYDIAN: TGUnicodeScript = 77; G_UNICODE_SCRIPT_AVESTAN: TGUnicodeScript = 78; G_UNICODE_SCRIPT_BAMUM: TGUnicodeScript = 79; G_UNICODE_SCRIPT_EGYPTIAN_HIEROGLYPHS: TGUnicodeScript = 80; G_UNICODE_SCRIPT_IMPERIAL_ARAMAIC: TGUnicodeScript = 81; G_UNICODE_SCRIPT_INSCRIPTIONAL_PAHLAVI: TGUnicodeScript = 82; G_UNICODE_SCRIPT_INSCRIPTIONAL_PARTHIAN: TGUnicodeScript = 83; G_UNICODE_SCRIPT_JAVANESE: TGUnicodeScript = 84; G_UNICODE_SCRIPT_KAITHI: TGUnicodeScript = 85; G_UNICODE_SCRIPT_LISU: TGUnicodeScript = 86; G_UNICODE_SCRIPT_MEETEI_MAYEK: TGUnicodeScript = 87; G_UNICODE_SCRIPT_OLD_SOUTH_ARABIAN: TGUnicodeScript = 88; G_UNICODE_SCRIPT_OLD_TURKIC: TGUnicodeScript = 89; G_UNICODE_SCRIPT_SAMARITAN: TGUnicodeScript = 90; G_UNICODE_SCRIPT_TAI_THAM: TGUnicodeScript = 91; G_UNICODE_SCRIPT_TAI_VIET: TGUnicodeScript = 92; G_UNICODE_SCRIPT_BATAK: TGUnicodeScript = 93; G_UNICODE_SCRIPT_BRAHMI: TGUnicodeScript = 94; G_UNICODE_SCRIPT_MANDAIC: TGUnicodeScript = 95; G_UNICODE_SCRIPT_CHAKMA: TGUnicodeScript = 96; G_UNICODE_SCRIPT_MEROITIC_CURSIVE: TGUnicodeScript = 97; G_UNICODE_SCRIPT_MEROITIC_HIEROGLYPHS: TGUnicodeScript = 98; G_UNICODE_SCRIPT_MIAO: TGUnicodeScript = 99; G_UNICODE_SCRIPT_SHARADA: TGUnicodeScript = 100; G_UNICODE_SCRIPT_SORA_SOMPENG: TGUnicodeScript = 101; G_UNICODE_SCRIPT_TAKRI: TGUnicodeScript = 102; type TGUnicodeType = Integer; const { GUnicodeType } G_UNICODE_CONTROL: TGUnicodeType = 0; G_UNICODE_FORMAT: TGUnicodeType = 1; G_UNICODE_UNASSIGNED: TGUnicodeType = 2; G_UNICODE_PRIVATE_USE: TGUnicodeType = 3; G_UNICODE_SURROGATE: TGUnicodeType = 4; G_UNICODE_LOWERCASE_LETTER: TGUnicodeType = 5; G_UNICODE_MODIFIER_LETTER: TGUnicodeType = 6; G_UNICODE_OTHER_LETTER: TGUnicodeType = 7; G_UNICODE_TITLECASE_LETTER: TGUnicodeType = 8; G_UNICODE_UPPERCASE_LETTER: TGUnicodeType = 9; G_UNICODE_SPACING_MARK: TGUnicodeType = 10; G_UNICODE_ENCLOSING_MARK: TGUnicodeType = 11; G_UNICODE_NON_SPACING_MARK: TGUnicodeType = 12; G_UNICODE_DECIMAL_NUMBER: TGUnicodeType = 13; G_UNICODE_LETTER_NUMBER: TGUnicodeType = 14; G_UNICODE_OTHER_NUMBER: TGUnicodeType = 15; G_UNICODE_CONNECT_PUNCTUATION: TGUnicodeType = 16; G_UNICODE_DASH_PUNCTUATION: TGUnicodeType = 17; G_UNICODE_CLOSE_PUNCTUATION: TGUnicodeType = 18; G_UNICODE_FINAL_PUNCTUATION: TGUnicodeType = 19; G_UNICODE_INITIAL_PUNCTUATION: TGUnicodeType = 20; G_UNICODE_OTHER_PUNCTUATION: TGUnicodeType = 21; G_UNICODE_OPEN_PUNCTUATION: TGUnicodeType = 22; G_UNICODE_CURRENCY_SYMBOL: TGUnicodeType = 23; G_UNICODE_MODIFIER_SYMBOL: TGUnicodeType = 24; G_UNICODE_MATH_SYMBOL: TGUnicodeType = 25; G_UNICODE_OTHER_SYMBOL: TGUnicodeType = 26; G_UNICODE_LINE_SEPARATOR: TGUnicodeType = 27; G_UNICODE_PARAGRAPH_SEPARATOR: TGUnicodeType = 28; G_UNICODE_SPACE_SEPARATOR: TGUnicodeType = 29; type TGUserDirectory = Integer; const { GUserDirectory } G_USER_DIRECTORY_DESKTOP: TGUserDirectory = 0; G_USER_DIRECTORY_DOCUMENTS: TGUserDirectory = 1; G_USER_DIRECTORY_DOWNLOAD: TGUserDirectory = 2; G_USER_DIRECTORY_MUSIC: TGUserDirectory = 3; G_USER_DIRECTORY_PICTURES: TGUserDirectory = 4; G_USER_DIRECTORY_PUBLIC_SHARE: TGUserDirectory = 5; G_USER_DIRECTORY_TEMPLATES: TGUserDirectory = 6; G_USER_DIRECTORY_VIDEOS: TGUserDirectory = 7; G_USER_N_DIRECTORIES: TGUserDirectory = 8; type TGVariantClass = Integer; const { GVariantClass } G_VARIANT_CLASS_BOOLEAN: TGVariantClass = 98; G_VARIANT_CLASS_BYTE: TGVariantClass = 121; G_VARIANT_CLASS_INT16: TGVariantClass = 110; G_VARIANT_CLASS_UINT16: TGVariantClass = 113; G_VARIANT_CLASS_INT32: TGVariantClass = 105; G_VARIANT_CLASS_UINT32: TGVariantClass = 117; G_VARIANT_CLASS_INT64: TGVariantClass = 120; G_VARIANT_CLASS_UINT64: TGVariantClass = 116; G_VARIANT_CLASS_HANDLE: TGVariantClass = 104; G_VARIANT_CLASS_DOUBLE: TGVariantClass = 100; G_VARIANT_CLASS_STRING: TGVariantClass = 115; G_VARIANT_CLASS_OBJECT_PATH: TGVariantClass = 111; G_VARIANT_CLASS_SIGNATURE: TGVariantClass = 103; G_VARIANT_CLASS_VARIANT: TGVariantClass = 118; G_VARIANT_CLASS_MAYBE: TGVariantClass = 109; G_VARIANT_CLASS_ARRAY: TGVariantClass = 97; G_VARIANT_CLASS_TUPLE: TGVariantClass = 40; G_VARIANT_CLASS_DICT_ENTRY: TGVariantClass = 123; type TGVariantParseError = Integer; const { GVariantParseError } G_VARIANT_PARSE_ERROR_FAILED: TGVariantParseError = 0; G_VARIANT_PARSE_ERROR_BASIC_TYPE_EXPECTED: TGVariantParseError = 1; G_VARIANT_PARSE_ERROR_CANNOT_INFER_TYPE: TGVariantParseError = 2; G_VARIANT_PARSE_ERROR_DEFINITE_TYPE_EXPECTED: TGVariantParseError = 3; G_VARIANT_PARSE_ERROR_INPUT_NOT_AT_END: TGVariantParseError = 4; G_VARIANT_PARSE_ERROR_INVALID_CHARACTER: TGVariantParseError = 5; G_VARIANT_PARSE_ERROR_INVALID_FORMAT_STRING: TGVariantParseError = 6; G_VARIANT_PARSE_ERROR_INVALID_OBJECT_PATH: TGVariantParseError = 7; G_VARIANT_PARSE_ERROR_INVALID_SIGNATURE: TGVariantParseError = 8; G_VARIANT_PARSE_ERROR_INVALID_TYPE_STRING: TGVariantParseError = 9; G_VARIANT_PARSE_ERROR_NO_COMMON_TYPE: TGVariantParseError = 10; G_VARIANT_PARSE_ERROR_NUMBER_OUT_OF_RANGE: TGVariantParseError = 11; G_VARIANT_PARSE_ERROR_NUMBER_TOO_BIG: TGVariantParseError = 12; G_VARIANT_PARSE_ERROR_TYPE_ERROR: TGVariantParseError = 13; G_VARIANT_PARSE_ERROR_UNEXPECTED_TOKEN: TGVariantParseError = 14; G_VARIANT_PARSE_ERROR_UNKNOWN_KEYWORD: TGVariantParseError = 15; G_VARIANT_PARSE_ERROR_UNTERMINATED_STRING_CONSTANT: TGVariantParseError = 16; G_VARIANT_PARSE_ERROR_VALUE_EXPECTED: TGVariantParseError = 17; type guint1 = 0..(1 shl 1-1); guint2 = 0..(1 shl 2-1); guint3 = 0..(1 shl 3-1); guint4 = 0..(1 shl 4-1); guint5 = 0..(1 shl 5-1); guint6 = 0..(1 shl 6-1); guint7 = 0..(1 shl 7-1); guint9 = 0..(1 shl 9-1); guint10 = 0..(1 shl 10-1); guint11 = 0..(1 shl 11-1); guint12 = 0..(1 shl 12-1); guint13 = 0..(1 shl 13-1); guint14 = 0..(1 shl 14-1); guint15 = 0..(1 shl 15-1); guint17 = 0..(1 shl 17-1); guint18 = 0..(1 shl 18-1); guint19 = 0..(1 shl 19-1); guint20 = 0..(1 shl 20-1); guint21 = 0..(1 shl 21-1); guint22 = 0..(1 shl 22-1); guint23 = 0..(1 shl 23-1); guint24 = 0..(1 shl 24-1); guint25 = 0..(1 shl 25-1); guint26 = 0..(1 shl 26-1); guint27 = 0..(1 shl 27-1); guint28 = 0..(1 shl 28-1); guint29 = 0..(1 shl 29-1); guint30 = 0..(1 shl 30-1); guint31 = 0..(1 shl 31-1); gpointer = pointer; int = cint; gint = cint; guint = cuint; guint8 = cuint8; guint16 = cuint16; guint32 = cuint32; guint64 = cuint64; gint8 = cint8; gint16 = cint16; gint32 = cint32; gint64 = cint64; gsize = csize_t; glong = clong; gulong = culong; gushort = cushort; gshort = cshort; gchar = char; guchar = byte; gboolean = Boolean32; gssize = PtrInt; size_t = csize_t; gconstpointer = gpointer; gfloat = cfloat; gdouble = cdouble; double = cdouble; goffset = Int64; long_double = Extended; gunichar = guint32; gunichar2 = guint32; unsigned_long_long = qword; PPGDateDay = ^PGDateDay; PGDateDay = ^TGDateDay; TGDateDay = guint8; PPGDateYear = ^PGDateYear; PGDateYear = ^TGDateYear; TGDateYear = guint16; PPGPid = ^PGPid; PGPid = ^TGPid; TGPid = gint; PPGQuark = ^PGQuark; PGQuark = ^TGQuark; TGQuark = guint32; PPGStrv = ^PGStrv; PGStrv = ^TGStrv; TGStrv = gpointer; PPGTime = ^PGTime; PGTime = ^TGTime; TGTime = gint32; PPGTimeSpan = ^PGTimeSpan; PGTimeSpan = ^TGTimeSpan; TGTimeSpan = gint64; PPPGType = ^PPGType; PPGType = ^PGType; PGType = ^TGType; TGType = gsize; PPPgpointer = ^PPgpointer; PPgpointer = ^Pgpointer; Pgpointer = ^gpointer; TGDestroyNotify = procedure(data: gpointer); cdecl; PPPgint = ^PPgint; PPgint = ^Pgint; Pgint = ^gint; TGCompareFunc = function(a: Pgpointer; b: Pgpointer): gint; cdecl; TGCompareDataFunc = function(a: Pgpointer; b: Pgpointer; user_data: gpointer): gint; cdecl; PPGArray = ^PGArray; PGArray = ^TGArray; PPPguint = ^PPguint; PPguint = ^Pguint; Pguint = ^guint; PPPgchar = ^PPgchar; PPgchar = ^Pgchar; Pgchar = ^gchar; PPPgboolean = ^PPgboolean; PPgboolean = ^Pgboolean; Pgboolean = ^gboolean; PPGDestroyNotify = ^PGDestroyNotify; PGDestroyNotify = ^TGDestroyNotify; PPGCompareFunc = ^PGCompareFunc; PGCompareFunc = ^TGCompareFunc; PPGCompareDataFunc = ^PGCompareDataFunc; PGCompareDataFunc = ^TGCompareDataFunc; TGArray = object data: Pgchar; len: guint; end; PPGAsciiType = ^PGAsciiType; PGAsciiType = ^TGAsciiType; PPGAsyncQueue = ^PGAsyncQueue; PGAsyncQueue = ^TGAsyncQueue; PPPguint64 = ^PPguint64; PPguint64 = ^Pguint64; Pguint64 = ^guint64; TGAsyncQueue = object end; PPGTimeVal = ^PGTimeVal; PGTimeVal = ^TGTimeVal; PPPglong = ^PPglong; PPglong = ^Pglong; Pglong = ^glong; TGTimeVal = object tv_sec: glong; tv_usec: glong; end; PPGBookmarkFile = ^PGBookmarkFile; PGBookmarkFile = ^TGBookmarkFile; PPGError = ^PGError; PGError = ^TGError; PPPgsize = ^PPgsize; PPgsize = ^Pgsize; Pgsize = ^gsize; TGBookmarkFile = object end; Pva_list = ^Tva_list; { va_list } Tva_list = record { opaque type } Unknown: Pointer; end; TGError = object domain: TGQuark; code: gint; message: Pgchar; end; PPGBookmarkFileError = ^PGBookmarkFileError; PGBookmarkFileError = ^TGBookmarkFileError; PPGBytes = ^PGBytes; PGBytes = ^TGBytes; PPPguint8 = ^PPguint8; PPguint8 = ^Pguint8; Pguint8 = ^guint8; TGBytes = object end; PPGByteArray = ^PGByteArray; PGByteArray = ^TGByteArray; TGByteArray = object data: Pguint8; len: guint; end; PPGChecksum = ^PGChecksum; PGChecksum = ^TGChecksum; PPGChecksumType = ^PGChecksumType; PGChecksumType = ^TGChecksumType; PPPgssize = ^PPgssize; PPgssize = ^Pgssize; Pgssize = ^gssize; TGChecksum = object end; TGChildWatchFunc = procedure(pid: TGPid; status: gint; user_data: gpointer); cdecl; PPGCond = ^PGCond; PGCond = ^TGCond; PPGMutex = ^PGMutex; PGMutex = ^TGMutex; PPPgint64 = ^PPgint64; PPgint64 = ^Pgint64; Pgint64 = ^gint64; TGCond = object p: gpointer; i: array [0..1] of guint; end; TGMutex = record case longint of 0 : (p: gpointer); 1 : (i: array [0..1] of guint); // // // // // end; PPGConvertError = ^PGConvertError; PGConvertError = ^TGConvertError; TGCopyFunc = function(src: Pgpointer; data: gpointer): gpointer; cdecl; PPGData = ^PGData; PGData = ^TGData; TGData = record end; TGDataForeachFunc = procedure(key_id: TGQuark; data: gpointer; user_data: gpointer); cdecl; PPGDate = ^PGDate; PGDate = ^TGDate; PPGDateMonth = ^PGDateMonth; PGDateMonth = ^TGDateMonth; PPPguint32 = ^PPguint32; PPguint32 = ^Pguint32; Pguint32 = ^guint32; PPGDateWeekday = ^PGDateWeekday; PGDateWeekday = ^TGDateWeekday; TGDateBitfield0 = bitpacked record julian_days: guint32 { changed from guint to accomodate 32 bitsize requirement }; julian: guint1 { changed from guint to accomodate 1 bitsize requirement }; dmy: guint1 { changed from guint to accomodate 1 bitsize requirement }; day: guint6 { changed from guint to accomodate 6 bitsize requirement }; month: guint4 { changed from guint to accomodate 4 bitsize requirement }; year: guint16 { changed from guint to accomodate 16 bitsize requirement }; end; TGDate = object Bitfield0 : TGDateBitfield0; { auto generated type } end; PPGDateDMY = ^PGDateDMY; PGDateDMY = ^TGDateDMY; PPGDateTime = ^PGDateTime; PGDateTime = ^TGDateTime; PPGTimeZone = ^PGTimeZone; PGTimeZone = ^TGTimeZone; PPPgdouble = ^PPgdouble; PPgdouble = ^Pgdouble; Pgdouble = ^gdouble; TGDateTime = object end; PPGTimeType = ^PGTimeType; PGTimeType = ^TGTimeType; PPPgint32 = ^PPgint32; PPgint32 = ^Pgint32; Pgint32 = ^gint32; TGTimeZone = object end; PPGDebugKey = ^PGDebugKey; PGDebugKey = ^TGDebugKey; TGDebugKey = record key: Pgchar; value: guint; end; PPGDir = ^PGDir; PGDir = ^TGDir; TGDir = object end; TGDoubleIEEE754 = record case longint of 0 : (v_double: gdouble); 1 : ( mpn : record mantissa_low: guint32 { changed from guint to accomodate 32 bitsize requirement }; mantissa_high: guint20 { changed from guint to accomodate 20 bitsize requirement }; biased_exponent: guint11 { changed from guint to accomodate 11 bitsize requirement }; sign: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; ); end; TGDuplicateFunc = function(data: gpointer; user_data: gpointer): gpointer; cdecl; TGEqualFunc = function(a: Pgpointer; b: Pgpointer): gboolean; cdecl; PPGErrorType = ^PGErrorType; PGErrorType = ^TGErrorType; PPGFileError = ^PGFileError; PGFileError = ^TGFileError; PPGFileTest = ^PGFileTest; PGFileTest = ^TGFileTest; PPPgfloat = ^PPgfloat; PPgfloat = ^Pgfloat; Pgfloat = ^gfloat; TGFloatIEEE754 = record case longint of 0 : (v_float: gfloat); 1 : ( mpn : record mantissa: guint23 { changed from guint to accomodate 23 bitsize requirement }; biased_exponent: guint8 { changed from guint to accomodate 8 bitsize requirement }; sign: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; ); end; PPGFormatSizeFlags = ^PGFormatSizeFlags; PGFormatSizeFlags = ^TGFormatSizeFlags; TGFreeFunc = procedure(data: gpointer); cdecl; TGFunc = procedure(data: gpointer; user_data: gpointer); cdecl; TGHFunc = procedure(key: gpointer; value: gpointer; user_data: gpointer); cdecl; TGHRFunc = function(key: gpointer; value: gpointer; user_data: gpointer): gboolean; cdecl; TGHashFunc = function(key: Pgpointer): guint; cdecl; PPGHashTable = ^PGHashTable; PGHashTable = ^TGHashTable; PPGHRFunc = ^PGHRFunc; PGHRFunc = ^TGHRFunc; PPGHFunc = ^PGHFunc; PGHFunc = ^TGHFunc; PPGList = ^PGList; PGList = ^TGList; PPGHashFunc = ^PGHashFunc; PGHashFunc = ^TGHashFunc; PPGEqualFunc = ^PGEqualFunc; PGEqualFunc = ^TGEqualFunc; TGHashTable = object end; PPGCopyFunc = ^PGCopyFunc; PGCopyFunc = ^TGCopyFunc; PPGFunc = ^PGFunc; PGFunc = ^TGFunc; TGList = object data: gpointer; next: PGList; prev: PGList; end; PPGHashTableIter = ^PGHashTableIter; PGHashTableIter = ^TGHashTableIter; TGHashTableIter = object dummy1: gpointer; dummy2: gpointer; dummy3: gpointer; dummy4: gint; dummy5: gboolean; dummy6: gpointer; end; PPGHmac = ^PGHmac; PGHmac = ^TGHmac; TGHmac = object end; PPGHook = ^PGHook; PGHook = ^TGHook; PPGHookList = ^PGHookList; PGHookList = ^TGHookList; PPPgulong = ^PPgulong; PPgulong = ^Pgulong; Pgulong = ^gulong; PPGHookFindFunc = ^PGHookFindFunc; PGHookFindFunc = ^TGHookFindFunc; TGHookFindFunc = function(hook: PGHook; data: gpointer): gboolean; cdecl; PPGHookCompareFunc = ^PGHookCompareFunc; PGHookCompareFunc = ^TGHookCompareFunc; TGHookCompareFunc = function(new_hook: PGHook; sibling: PGHook): gint; cdecl; TGHook = object data: gpointer; next: PGHook; prev: PGHook; ref_count: guint; hook_id: gulong; flags: guint; func: gpointer; destroy_1: TGDestroyNotify; end; PPGHookMarshaller = ^PGHookMarshaller; PGHookMarshaller = ^TGHookMarshaller; TGHookMarshaller = procedure(hook: PGHook; marshal_data: gpointer); cdecl; PPGHookCheckMarshaller = ^PGHookCheckMarshaller; PGHookCheckMarshaller = ^TGHookCheckMarshaller; TGHookCheckMarshaller = function(hook: PGHook; marshal_data: gpointer): gboolean; cdecl; TGHookListBitfield0 = bitpacked record hook_size: guint16 { changed from guint to accomodate 16 bitsize requirement }; is_setup: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; PPGHookFinalizeFunc = ^PGHookFinalizeFunc; PGHookFinalizeFunc = ^TGHookFinalizeFunc; TGHookFinalizeFunc = procedure(hook_list: PGHookList; hook: PGHook); cdecl; TGHookList = object seq_id: gulong; Bitfield0 : TGHookListBitfield0; { auto generated type } hooks: PGHook; dummy3: gpointer; finalize_hook: TGHookFinalizeFunc; dummy: array [0..1] of gpointer; end; TGHookCheckFunc = function(data: gpointer): gboolean; cdecl; PPGHookFlagMask = ^PGHookFlagMask; PGHookFlagMask = ^TGHookFlagMask; TGHookFunc = procedure(data: gpointer); cdecl; PPGIConv = ^PGIConv; PGIConv = ^TGIConv; TGIConv = object end; PPGIOFuncs = ^PGIOFuncs; PGIOFuncs = ^TGIOFuncs; PPGIOStatus = ^PGIOStatus; PGIOStatus = ^TGIOStatus; PPGIOChannel = ^PGIOChannel; PGIOChannel = ^TGIOChannel; PPGSeekType = ^PGSeekType; PGSeekType = ^TGSeekType; PPGSource = ^PGSource; PGSource = ^TGSource; PPGIOCondition = ^PGIOCondition; PGIOCondition = ^TGIOCondition; PPGIOFlags = ^PGIOFlags; PGIOFlags = ^TGIOFlags; TGIOFuncs = record io_read: function(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_read: Pgsize; error: PPGError): TGIOStatus; cdecl; io_write: function(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_written: Pgsize; error: PPGError): TGIOStatus; cdecl; io_seek: function(channel: PGIOChannel; offset: gint64; type_: TGSeekType; error: PPGError): TGIOStatus; cdecl; io_close: function(channel: PGIOChannel; error: PPGError): TGIOStatus; cdecl; io_create_watch: function(channel: PGIOChannel; condition: TGIOCondition): PGSource; cdecl; io_free: procedure(channel: PGIOChannel); cdecl; io_set_flags: function(channel: PGIOChannel; flags: TGIOFlags; error: PPGError): TGIOStatus; cdecl; io_get_flags: function(channel: PGIOChannel): TGIOFlags; cdecl; end; PPGString = ^PGString; PGString = ^TGString; PPPgunichar = ^PPgunichar; PPgunichar = ^Pgunichar; Pgunichar = ^gunichar; TGString = object str: Pgchar; len: gsize; allocated_len: gsize; end; PPGIOChannelError = ^PGIOChannelError; PGIOChannelError = ^TGIOChannelError; TGIOChannelBitfield0 = bitpacked record use_buffer: guint1 { changed from guint to accomodate 1 bitsize requirement }; do_encode: guint1 { changed from guint to accomodate 1 bitsize requirement }; close_on_unref: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_readable: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_writeable: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_seekable: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGIOChannel = object ref_count: gint; funcs: PGIOFuncs; encoding: Pgchar; read_cd: TGIConv; write_cd: TGIConv; line_term: Pgchar; line_term_len: guint; buf_size: gsize; read_buf: PGString; encoded_read_buf: PGString; write_buf: PGString; partial_write_buf: array [0..5] of gchar; Bitfield0 : TGIOChannelBitfield0; { auto generated type } reserved1: gpointer; reserved2: gpointer; end; PPGIOError = ^PGIOError; PGIOError = ^TGIOError; TGIOFunc = function(source: PGIOChannel; condition: TGIOCondition; data: gpointer): gboolean; cdecl; PPGSourceFuncs = ^PGSourceFuncs; PGSourceFuncs = ^TGSourceFuncs; PPPGPollFD = ^PPGPollFD; PPGPollFD = ^PGPollFD; PGPollFD = ^TGPollFD; PPGMainContext = ^PGMainContext; PGMainContext = ^TGMainContext; PPGSourceFunc = ^PGSourceFunc; PGSourceFunc = ^TGSourceFunc; TGSourceFunc = function(user_data: gpointer): gboolean; cdecl; PPGSourceCallbackFuncs = ^PGSourceCallbackFuncs; PGSourceCallbackFuncs = ^TGSourceCallbackFuncs; PPGSList = ^PGSList; PGSList = ^TGSList; PPGSourcePrivate = ^PGSourcePrivate; PGSourcePrivate = ^TGSourcePrivate; TGSource = object callback_data: gpointer; callback_funcs: PGSourceCallbackFuncs; source_funcs: PGSourceFuncs; ref_count: guint; context: PGMainContext; priority: gint; flags: guint; source_id: guint; poll_fds: PGSList; prev: PGSource; next: PGSource; name: Pgchar; priv: PGSourcePrivate; end; PPGKeyFile = ^PGKeyFile; PGKeyFile = ^TGKeyFile; PPGKeyFileFlags = ^PGKeyFileFlags; PGKeyFileFlags = ^TGKeyFileFlags; TGKeyFile = object end; PPGKeyFileError = ^PGKeyFileError; PGKeyFileError = ^TGKeyFileError; PPGLogLevelFlags = ^PGLogLevelFlags; PGLogLevelFlags = ^TGLogLevelFlags; TGLogFunc = procedure(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; user_data: gpointer); cdecl; PPGPollFunc = ^PGPollFunc; PGPollFunc = ^TGPollFunc; TGPollFunc = function(ufds: PGPollFD; nfsd: guint; timeout_: gint): gint; cdecl; TGMainContext = object end; PPPgushort = ^PPgushort; PPgushort = ^Pgushort; Pgushort = ^gushort; TGPollFD = object fd: gint; events: gushort; revents: gushort; end; PPGSourceDummyMarshal = ^PGSourceDummyMarshal; PGSourceDummyMarshal = ^TGSourceDummyMarshal; TGSourceDummyMarshal = procedure; cdecl; TGSourceFuncs = record prepare: function(source: PGSource; timeout_: Pgint): gboolean; cdecl; check: function(source: PGSource): gboolean; cdecl; dispatch: function(source: PGSource; callback: TGSourceFunc; user_data: gpointer): gboolean; cdecl; finalize: procedure(source: PGSource); cdecl; closure_callback: TGSourceFunc; closure_marshal: TGSourceDummyMarshal; end; PPGMainLoop = ^PGMainLoop; PGMainLoop = ^TGMainLoop; TGMainLoop = object end; PPGMappedFile = ^PGMappedFile; PGMappedFile = ^TGMappedFile; TGMappedFile = object end; PPGMarkupCollectType = ^PGMarkupCollectType; PGMarkupCollectType = ^TGMarkupCollectType; PPGMarkupError = ^PGMarkupError; PGMarkupError = ^TGMarkupError; PPGMarkupParseContext = ^PGMarkupParseContext; PGMarkupParseContext = ^TGMarkupParseContext; PPGMarkupParser = ^PGMarkupParser; PGMarkupParser = ^TGMarkupParser; PPGMarkupParseFlags = ^PGMarkupParseFlags; PGMarkupParseFlags = ^TGMarkupParseFlags; TGMarkupParseContext = object end; TGMarkupParser = record start_element: procedure(context: PGMarkupParseContext; element_name: Pgchar; attribute_names: PPgchar; attribute_values: PPgchar; user_data: gpointer; error: PPGError); cdecl; end_element: procedure(context: PGMarkupParseContext; element_name: Pgchar; user_data: gpointer; error: PPGError); cdecl; text: procedure(context: PGMarkupParseContext; text: Pgchar; text_len: gsize; user_data: gpointer; error: PPGError); cdecl; passthrough: procedure(context: PGMarkupParseContext; passthrough_text: Pgchar; text_len: gsize; user_data: gpointer; error: PPGError); cdecl; error: procedure(context: PGMarkupParseContext; error: PGError; user_data: gpointer); cdecl; end; TGSList = object data: gpointer; next: PGSList; end; PPGMatchInfo = ^PGMatchInfo; PGMatchInfo = ^TGMatchInfo; PPGRegex = ^PGRegex; PGRegex = ^TGRegex; TGMatchInfo = object end; PPGRegexCompileFlags = ^PGRegexCompileFlags; PGRegexCompileFlags = ^TGRegexCompileFlags; PPGRegexMatchFlags = ^PGRegexMatchFlags; PGRegexMatchFlags = ^TGRegexMatchFlags; PPGRegexEvalCallback = ^PGRegexEvalCallback; PGRegexEvalCallback = ^TGRegexEvalCallback; TGRegexEvalCallback = function(match_info: PGMatchInfo; result_: PGString; user_data: gpointer): gboolean; cdecl; TGRegex = object end; PPGMemVTable = ^PGMemVTable; PGMemVTable = ^TGMemVTable; TGMemVTable = record malloc: function(n_bytes: gsize): gpointer; cdecl; realloc: function(mem: gpointer; n_bytes: gsize): gpointer; cdecl; free: procedure(mem: gpointer); cdecl; calloc: function(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; try_malloc: function(n_bytes: gsize): gpointer; cdecl; try_realloc: function(mem: gpointer; n_bytes: gsize): gpointer; cdecl; end; PPGNode = ^PGNode; PGNode = ^TGNode; PPGTraverseFlags = ^PGTraverseFlags; PGTraverseFlags = ^TGTraverseFlags; PPGNodeForeachFunc = ^PGNodeForeachFunc; PGNodeForeachFunc = ^TGNodeForeachFunc; TGNodeForeachFunc = procedure(node: PGNode; data: gpointer); cdecl; PPGTraverseType = ^PGTraverseType; PGTraverseType = ^TGTraverseType; PPGNodeTraverseFunc = ^PGNodeTraverseFunc; PGNodeTraverseFunc = ^TGNodeTraverseFunc; TGNodeTraverseFunc = function(node: PGNode; data: gpointer): gboolean; cdecl; TGNode = object data: gpointer; next: PGNode; prev: PGNode; parent: PGNode; children: PGNode; end; PPGNormalizeMode = ^PGNormalizeMode; PGNormalizeMode = ^TGNormalizeMode; PPGOnceStatus = ^PGOnceStatus; PGOnceStatus = ^TGOnceStatus; PPGOnce = ^PGOnce; PGOnce = ^TGOnce; PPGThreadFunc = ^PGThreadFunc; PGThreadFunc = ^TGThreadFunc; TGThreadFunc = function(data: gpointer): gpointer; cdecl; TGOnce = object status: TGOnceStatus; retval: gpointer; end; PPGOptionArg = ^PGOptionArg; PGOptionArg = ^TGOptionArg; TGOptionArgFunc = function(option_name: Pgchar; value: Pgchar; data: gpointer; error: PPGError): gboolean; cdecl; PPGOptionContext = ^PGOptionContext; PGOptionContext = ^TGOptionContext; PPGOptionGroup = ^PGOptionGroup; PGOptionGroup = ^TGOptionGroup; PPGOptionEntry = ^PGOptionEntry; PGOptionEntry = ^TGOptionEntry; PPGTranslateFunc = ^PGTranslateFunc; PGTranslateFunc = ^TGTranslateFunc; TGTranslateFunc = function(str: Pgchar; data: gpointer): Pgchar; cdecl; TGOptionContext = object end; PPGOptionErrorFunc = ^PGOptionErrorFunc; PGOptionErrorFunc = ^TGOptionErrorFunc; TGOptionErrorFunc = procedure(context: PGOptionContext; group: PGOptionGroup; data: gpointer; error: PPGError); cdecl; PPGOptionParseFunc = ^PGOptionParseFunc; PGOptionParseFunc = ^TGOptionParseFunc; TGOptionParseFunc = function(context: PGOptionContext; group: PGOptionGroup; data: gpointer; error: PPGError): gboolean; cdecl; TGOptionGroup = object end; TGOptionEntry = record long_name: Pgchar; short_name: gchar; flags: gint; arg: TGOptionArg; arg_data: gpointer; description: Pgchar; arg_description: Pgchar; end; PPGOptionError = ^PGOptionError; PGOptionError = ^TGOptionError; PPGOptionFlags = ^PGOptionFlags; PGOptionFlags = ^TGOptionFlags; PPGPatternSpec = ^PGPatternSpec; PGPatternSpec = ^TGPatternSpec; TGPatternSpec = object end; TGPrintFunc = procedure(string_: Pgchar); cdecl; PPGPrivate = ^PGPrivate; PGPrivate = ^TGPrivate; TGPrivate = object p: gpointer; notify: TGDestroyNotify; future: array [0..1] of gpointer; end; PPGPtrArray = ^PGPtrArray; PGPtrArray = ^TGPtrArray; TGPtrArray = object pdata: Pgpointer; len: guint; end; PPGQueue = ^PGQueue; PGQueue = ^TGQueue; TGQueue = object head: PGList; tail: PGList; length: guint; end; PPGRWLock = ^PGRWLock; PGRWLock = ^TGRWLock; TGRWLock = object p: gpointer; i: array [0..1] of guint; end; PPGRand = ^PGRand; PGRand = ^TGRand; TGRand = object end; PPGRecMutex = ^PGRecMutex; PGRecMutex = ^TGRecMutex; TGRecMutex = object p: gpointer; i: array [0..1] of guint; end; PPGRegexError = ^PGRegexError; PGRegexError = ^TGRegexError; PPGScannerConfig = ^PGScannerConfig; PGScannerConfig = ^TGScannerConfig; TGScannerConfigBitfield0 = bitpacked record case_sensitive: guint1 { changed from guint to accomodate 1 bitsize requirement }; skip_comment_multi: guint1 { changed from guint to accomodate 1 bitsize requirement }; skip_comment_single: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_comment_multi: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier_1char: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_identifier_NULL: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_symbols: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_binary: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_octal: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_float: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_hex: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_hex_dollar: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_string_sq: guint1 { changed from guint to accomodate 1 bitsize requirement }; scan_string_dq: guint1 { changed from guint to accomodate 1 bitsize requirement }; numbers_2_int: guint1 { changed from guint to accomodate 1 bitsize requirement }; int_2_float: guint1 { changed from guint to accomodate 1 bitsize requirement }; identifier_2_string: guint1 { changed from guint to accomodate 1 bitsize requirement }; char_2_token: guint1 { changed from guint to accomodate 1 bitsize requirement }; symbol_2_token: guint1 { changed from guint to accomodate 1 bitsize requirement }; scope_0_fallback: guint1 { changed from guint to accomodate 1 bitsize requirement }; store_int64: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGScannerConfig = record cset_skip_characters: Pgchar; cset_identifier_first: Pgchar; cset_identifier_nth: Pgchar; cpair_comment_single: Pgchar; Bitfield0 : TGScannerConfigBitfield0; { auto generated type } padding_dummy: guint; end; PPGTokenType = ^PGTokenType; PGTokenType = ^TGTokenType; TGTokenValue = record case longint of 0 : (v_symbol: gpointer); 1 : (v_identifier: Pgchar); 2 : (v_binary: gulong); 3 : (v_octal: gulong); 4 : (v_int: gulong); 5 : (v_int64: guint64); 6 : (v_float: gdouble); 7 : (v_hex: gulong); 8 : (v_string: Pgchar); 9 : (v_comment: Pgchar); 10 : (v_char: guint8); 11 : (v_error: guint); end; PPGScanner = ^PGScanner; PGScanner = ^TGScanner; TGScannerMsgFunc = procedure(scanner: PGScanner; message: Pgchar; error: gboolean); cdecl; PPGTokenValue = ^PGTokenValue; PGTokenValue = ^TGTokenValue; PPGScannerMsgFunc = ^PGScannerMsgFunc; PGScannerMsgFunc = ^TGScannerMsgFunc; TGScanner = object user_data: gpointer; max_parse_errors: guint; parse_errors: guint; input_name: Pgchar; qdata: PGData; config: PGScannerConfig; token: TGTokenType; value: TGTokenValue; line: guint; position: guint; next_token: TGTokenType; next_value: TGTokenValue; next_line: guint; next_position: guint; symbol_table: PGHashTable; input_fd: gint; text: Pgchar; text_end: Pgchar; buffer: Pgchar; scope_id: guint; msg_handler: TGScannerMsgFunc; end; PPGSequenceIter = ^PGSequenceIter; PGSequenceIter = ^TGSequenceIter; PPGSequence = ^PGSequence; PGSequence = ^TGSequence; TGSequenceIter = object end; PPGSequenceIterCompareFunc = ^PGSequenceIterCompareFunc; PGSequenceIterCompareFunc = ^TGSequenceIterCompareFunc; TGSequenceIterCompareFunc = function(a: PGSequenceIter; b: PGSequenceIter; data: gpointer): gint; cdecl; TGSequence = object end; PPGShellError = ^PGShellError; PGShellError = ^TGShellError; PPGSliceConfig = ^PGSliceConfig; PGSliceConfig = ^TGSliceConfig; TGSourceCallbackFuncs = record ref: procedure(cb_data: gpointer); cdecl; unref: procedure(cb_data: gpointer); cdecl; get: procedure(cb_data: gpointer; source: PGSource; func: PGSourceFunc; data: Pgpointer); cdecl; end; TGSourcePrivate = record end; TGSpawnChildSetupFunc = procedure(user_data: gpointer); cdecl; PPGSpawnError = ^PGSpawnError; PGSpawnError = ^TGSpawnError; PPGSpawnFlags = ^PGSpawnFlags; PGSpawnFlags = ^TGSpawnFlags; PPGStatBuf = ^PGStatBuf; PGStatBuf = ^TGStatBuf; TGStatBuf = record end; PPGStringChunk = ^PGStringChunk; PGStringChunk = ^TGStringChunk; TGStringChunk = object end; PPGTestCase = ^PGTestCase; PGTestCase = ^TGTestCase; TGTestCase = record end; PPGTestConfig = ^PGTestConfig; PGTestConfig = ^TGTestConfig; TGTestConfig = record test_initialized: gboolean; test_quick: gboolean; test_perf: gboolean; test_verbose: gboolean; test_quiet: gboolean; test_undefined: gboolean; end; TGTestDataFunc = procedure(user_data: Pgpointer); cdecl; TGTestFixtureFunc = procedure(fixture: gpointer; user_data: Pgpointer); cdecl; TGTestFunc = procedure; cdecl; PPGTestLogBuffer = ^PGTestLogBuffer; PGTestLogBuffer = ^TGTestLogBuffer; PPGTestLogMsg = ^PGTestLogMsg; PGTestLogMsg = ^TGTestLogMsg; TGTestLogBuffer = object data: PGString; msgs: PGSList; end; PPGTestLogType = ^PGTestLogType; PGTestLogType = ^TGTestLogType; TGTestLogMsg = object log_type: TGTestLogType; n_strings: guint; strings: PPgchar; n_nums: guint; nums: Pglong; end; TGTestLogFatalFunc = function(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; user_data: gpointer): gboolean; cdecl; PPGTestSuite = ^PGTestSuite; PGTestSuite = ^TGTestSuite; TGTestSuite = object end; PPGTestTrapFlags = ^PGTestTrapFlags; PGTestTrapFlags = ^TGTestTrapFlags; PPGThread = ^PGThread; PGThread = ^TGThread; TGThread = object end; PPGThreadError = ^PGThreadError; PGThreadError = ^TGThreadError; PPGThreadPool = ^PGThreadPool; PGThreadPool = ^TGThreadPool; TGThreadPool = object func: TGFunc; user_data: gpointer; exclusive: gboolean; end; PPGTimer = ^PGTimer; PGTimer = ^TGTimer; TGTimer = object end; PPGTrashStack = ^PGTrashStack; PGTrashStack = ^TGTrashStack; TGTrashStack = object next: PGTrashStack; end; TGTraverseFunc = function(key: gpointer; value: gpointer; data: gpointer): gboolean; cdecl; PPGTree = ^PGTree; PGTree = ^TGTree; PPGTraverseFunc = ^PGTraverseFunc; PGTraverseFunc = ^TGTraverseFunc; TGTree = object end; PPGUnicodeBreakType = ^PGUnicodeBreakType; PGUnicodeBreakType = ^TGUnicodeBreakType; PPGUnicodeScript = ^PGUnicodeScript; PGUnicodeScript = ^TGUnicodeScript; PPGUnicodeType = ^PGUnicodeType; PGUnicodeType = ^TGUnicodeType; TGUnixFDSourceFunc = function(fd: gint; condition: TGIOCondition; user_data: gpointer): gboolean; cdecl; PPGUserDirectory = ^PGUserDirectory; PGUserDirectory = ^TGUserDirectory; PPGVariant = ^PGVariant; PGVariant = ^TGVariant; PPGVariantType = ^PGVariantType; PGVariantType = ^TGVariantType; PPPgint16 = ^PPgint16; PPgint16 = ^Pgint16; Pgint16 = ^gint16; PPPguint16 = ^PPguint16; PPguint16 = ^Pguint16; Pguint16 = ^guint16; PPGVariantClass = ^PGVariantClass; PGVariantClass = ^TGVariantClass; PPGVariantIter = ^PGVariantIter; PGVariantIter = ^TGVariantIter; TGVariant = object end; TGVariantType = object end; TGVariantIter = object x: array [0..15] of gsize; end; PPGVariantBuilder = ^PGVariantBuilder; PGVariantBuilder = ^TGVariantBuilder; TGVariantBuilder = object x: array [0..15] of gsize; end; PPGVariantParseError = ^PGVariantParseError; PGVariantParseError = ^TGVariantParseError; TGVoidFunc = procedure; cdecl; function g_access(filename: Pgchar; mode: gint): gint; cdecl; external; function g_array_append_vals(array_: Pgpointer; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_free(array_: Pgpointer; free_segment: gboolean): Pgchar; cdecl; external; function g_array_get_element_size(array_: Pgpointer): guint; cdecl; external; function g_array_get_type: TGType; cdecl; external; function g_array_insert_vals(array_: Pgpointer; index_: guint; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_new(zero_terminated: gboolean; clear_: gboolean; element_size: guint): Pgpointer; cdecl; external; function g_array_prepend_vals(array_: Pgpointer; data: Pgpointer; len: guint): Pgpointer; cdecl; external; function g_array_ref(array_: Pgpointer): Pgpointer; cdecl; external; function g_array_remove_index(array_: Pgpointer; index_: guint): Pgpointer; cdecl; external; function g_array_remove_index_fast(array_: Pgpointer; index_: guint): Pgpointer; cdecl; external; function g_array_remove_range(array_: Pgpointer; index_: guint; length: guint): Pgpointer; cdecl; external; function g_array_set_size(array_: Pgpointer; length: guint): Pgpointer; cdecl; external; function g_array_sized_new(zero_terminated: gboolean; clear_: gboolean; element_size: guint; reserved_size: guint): Pgpointer; cdecl; external; function g_ascii_digit_value(c: gchar): gint; cdecl; external; function g_ascii_dtostr(buffer: Pgchar; buf_len: gint; d: gdouble): Pgchar; cdecl; external; function g_ascii_formatd(buffer: Pgchar; buf_len: gint; format: Pgchar; d: gdouble): Pgchar; cdecl; external; function g_ascii_strcasecmp(s1: Pgchar; s2: Pgchar): gint; cdecl; external; function g_ascii_strdown(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_ascii_strncasecmp(s1: Pgchar; s2: Pgchar; n: gsize): gint; cdecl; external; function g_ascii_strtod(nptr: Pgchar; endptr: PPgchar): gdouble; cdecl; external; function g_ascii_strtoll(nptr: Pgchar; endptr: PPgchar; base: guint): gint64; cdecl; external; function g_ascii_strtoull(nptr: Pgchar; endptr: PPgchar; base: guint): guint64; cdecl; external; function g_ascii_strup(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_ascii_tolower(c: gchar): gchar; cdecl; external; function g_ascii_toupper(c: gchar): gchar; cdecl; external; function g_ascii_xdigit_value(c: gchar): gint; cdecl; external; function g_async_queue_length(queue: PGAsyncQueue): gint; cdecl; external; function g_async_queue_length_unlocked(queue: PGAsyncQueue): gint; cdecl; external; function g_async_queue_new: PGAsyncQueue; cdecl; external; function g_async_queue_new_full(item_free_func: TGDestroyNotify): PGAsyncQueue; cdecl; external; function g_async_queue_pop(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_pop_unlocked(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_ref(queue: PGAsyncQueue): PGAsyncQueue; cdecl; external; function g_async_queue_timeout_pop(queue: PGAsyncQueue; timeout: guint64): gpointer; cdecl; external; function g_async_queue_timeout_pop_unlocked(queue: PGAsyncQueue; timeout: guint64): gpointer; cdecl; external; function g_async_queue_try_pop(queue: PGAsyncQueue): gpointer; cdecl; external; function g_async_queue_try_pop_unlocked(queue: PGAsyncQueue): gpointer; cdecl; external; function g_atomic_int_add(atomic: Pgint; val: gint): gint; cdecl; external; function g_atomic_int_and(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_int_compare_and_exchange(atomic: Pgint; oldval: gint; newval: gint): gboolean; cdecl; external; function g_atomic_int_dec_and_test(atomic: Pgint): gboolean; cdecl; external; function g_atomic_int_exchange_and_add(atomic: Pgint; val: gint): gint; cdecl; external; function g_atomic_int_get(atomic: Pgint): gint; cdecl; external; function g_atomic_int_or(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_int_xor(atomic: Pguint; val: guint): guint; cdecl; external; function g_atomic_pointer_add(atomic: Pgpointer; val: gssize): gssize; cdecl; external; function g_atomic_pointer_and(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_atomic_pointer_compare_and_exchange(atomic: Pgpointer; oldval: gpointer; newval: gpointer): gboolean; cdecl; external; function g_atomic_pointer_get(atomic: Pgpointer): gpointer; cdecl; external; function g_atomic_pointer_or(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_atomic_pointer_xor(atomic: Pgpointer; val: gsize): gsize; cdecl; external; function g_base64_decode(text: Pgchar; out_len: Pgsize): Pguint8; cdecl; external; function g_base64_decode_inplace(text: Pgchar; out_len: Pgsize): Pguint8; cdecl; external; function g_base64_decode_step(in_: Pgchar; len: gsize; out_: Pguint8; state: Pgint; save: Pguint): gsize; cdecl; external; function g_base64_encode(data: Pguint8; len: gsize): Pgchar; cdecl; external; function g_base64_encode_close(break_lines: gboolean; out_: Pgchar; state: Pgint; save: Pgint): gsize; cdecl; external; function g_base64_encode_step(in_: Pguint8; len: gsize; break_lines: gboolean; out_: Pgchar; state: Pgint; save: Pgint): gsize; cdecl; external; function g_basename(file_name: Pgchar): Pgchar; cdecl; external; function g_bit_nth_lsf(mask: gulong; nth_bit: gint): gint; cdecl; external; function g_bit_nth_msf(mask: gulong; nth_bit: gint): gint; cdecl; external; function g_bit_storage(number: gulong): guint; cdecl; external; function g_bit_trylock(address: Pgint; lock_bit: gint): gboolean; cdecl; external; function g_bookmark_file_error_quark: TGQuark; cdecl; external; function g_bookmark_file_get_added(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_get_app_info(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: PPgchar; count: Pguint; stamp: Pglong; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_applications(bookmark: PGBookmarkFile; uri: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_bookmark_file_get_description(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_groups(bookmark: PGBookmarkFile; uri: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_bookmark_file_get_icon(bookmark: PGBookmarkFile; uri: Pgchar; href: PPgchar; mime_type: PPgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_is_private(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_get_mime_type(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_modified(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_get_size(bookmark: PGBookmarkFile): gint; cdecl; external; function g_bookmark_file_get_title(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_get_uris(bookmark: PGBookmarkFile; length: Pgsize): PPgchar; cdecl; external; function g_bookmark_file_get_visited(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): glong; cdecl; external; function g_bookmark_file_has_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_has_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_has_item(bookmark: PGBookmarkFile; uri: Pgchar): gboolean; cdecl; external; function g_bookmark_file_load_from_data(bookmark: PGBookmarkFile; data: Pgchar; length: gsize; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_load_from_data_dirs(bookmark: PGBookmarkFile; file_: Pgchar; full_path: PPgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_load_from_file(bookmark: PGBookmarkFile; filename: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_move_item(bookmark: PGBookmarkFile; old_uri: Pgchar; new_uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_new: PGBookmarkFile; cdecl; external; function g_bookmark_file_remove_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_remove_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_remove_item(bookmark: PGBookmarkFile; uri: Pgchar; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_set_app_info(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: Pgchar; count: gint; stamp: glong; error: PPGError): gboolean; cdecl; external; function g_bookmark_file_to_data(bookmark: PGBookmarkFile; length: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_bookmark_file_to_file(bookmark: PGBookmarkFile; filename: Pgchar; error: PPGError): gboolean; cdecl; external; function g_build_filename(first_element: Pgchar; args: array of const): Pgchar; cdecl; external; function g_build_filenamev(args: PPgchar): Pgchar; cdecl; external; function g_build_path(separator: Pgchar; first_element: Pgchar; args: array of const): Pgchar; cdecl; external; function g_build_pathv(separator: Pgchar; args: PPgchar): Pgchar; cdecl; external; function g_byte_array_append(array_: Pguint8; data: Pguint8; len: guint): Pguint8; cdecl; external; function g_byte_array_free(array_: Pguint8; free_segment: gboolean): Pguint8; cdecl; external; function g_byte_array_free_to_bytes(array_: Pguint8): PGBytes; cdecl; external; function g_byte_array_get_type: TGType; cdecl; external; function g_byte_array_new: Pguint8; cdecl; external; function g_byte_array_new_take(data: Pguint8; len: gsize): Pguint8; cdecl; external; function g_byte_array_prepend(array_: Pguint8; data: Pguint8; len: guint): Pguint8; cdecl; external; function g_byte_array_ref(array_: Pguint8): Pguint8; cdecl; external; function g_byte_array_remove_index(array_: Pguint8; index_: guint): Pguint8; cdecl; external; function g_byte_array_remove_index_fast(array_: Pguint8; index_: guint): Pguint8; cdecl; external; function g_byte_array_remove_range(array_: Pguint8; index_: guint; length: guint): Pguint8; cdecl; external; function g_byte_array_set_size(array_: Pguint8; length: guint): Pguint8; cdecl; external; function g_byte_array_sized_new(reserved_size: guint): Pguint8; cdecl; external; function g_bytes_compare(bytes1: PGBytes; bytes2: PGBytes): gint; cdecl; external; function g_bytes_equal(bytes1: PGBytes; bytes2: PGBytes): gboolean; cdecl; external; function g_bytes_get_data(bytes: PGBytes; size: Pgsize): guint8; cdecl; external; function g_bytes_get_size(bytes: PGBytes): gsize; cdecl; external; function g_bytes_get_type: TGType; cdecl; external; function g_bytes_hash(bytes: PGBytes): guint; cdecl; external; function g_bytes_new(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_from_bytes(bytes: PGBytes; offset: gsize; length: gsize): PGBytes; cdecl; external; function g_bytes_new_static(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_take(data: guint8; size: gsize): PGBytes; cdecl; external; function g_bytes_new_with_free_func(data: gpointer; size: gsize; free_func: TGDestroyNotify; user_data: gpointer): PGBytes; cdecl; external; function g_bytes_ref(bytes: PGBytes): PGBytes; cdecl; external; function g_bytes_unref_to_array(bytes: PGBytes): Pguint8; cdecl; external; function g_bytes_unref_to_data(bytes: PGBytes; size: Pgsize): gpointer; cdecl; external; function g_chdir(path: Pgchar): gint; cdecl; external; function g_checksum_copy(checksum: PGChecksum): PGChecksum; cdecl; external; function g_checksum_get_string(checksum: PGChecksum): Pgchar; cdecl; external; function g_checksum_get_type: TGType; cdecl; external; function g_checksum_new(checksum_type: TGChecksumType): PGChecksum; cdecl; external; function g_checksum_type_get_length(checksum_type: TGChecksumType): gssize; cdecl; external; function g_child_watch_add(pid: TGPid; function_: TGChildWatchFunc; data: gpointer): guint; cdecl; external; function g_child_watch_add_full(priority: gint; pid: TGPid; function_: TGChildWatchFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_child_watch_source_new(pid: TGPid): PGSource; cdecl; external; function g_close(fd: gint; error: PPGError): gboolean; cdecl; external; function g_compute_checksum_for_bytes(checksum_type: TGChecksumType; data: PGBytes): Pgchar; cdecl; external; function g_compute_checksum_for_data(checksum_type: TGChecksumType; data: Pguint8; length: gsize): Pgchar; cdecl; external; function g_compute_checksum_for_string(checksum_type: TGChecksumType; str: Pgchar; length: gssize): Pgchar; cdecl; external; function g_compute_hmac_for_data(digest_type: TGChecksumType; key: Pguint8; key_len: gsize; data: Pguint8; length: gsize): Pgchar; cdecl; external; function g_compute_hmac_for_string(digest_type: TGChecksumType; key: Pguint8; key_len: gsize; str: Pgchar; length: gssize): Pgchar; cdecl; external; function g_cond_wait_until(cond: PGCond; mutex: PGMutex; end_time: gint64): gboolean; cdecl; external; function g_convert(str: Pgchar; len: gssize; to_codeset: Pgchar; from_codeset: Pgchar; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_convert_error_quark: TGQuark; cdecl; external; function g_convert_with_fallback(str: Pgchar; len: gssize; to_codeset: Pgchar; from_codeset: Pgchar; fallback: Pgchar; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_convert_with_iconv(str: Pgchar; len: gssize; converter: TGIConv; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_datalist_get_data(datalist: PPGData; key: Pgchar): gpointer; cdecl; external; function g_datalist_get_flags(datalist: PPGData): guint; cdecl; external; function g_datalist_id_dup_data(datalist: PPGData; key_id: TGQuark; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_datalist_id_get_data(datalist: PPGData; key_id: TGQuark): gpointer; cdecl; external; function g_datalist_id_remove_no_notify(datalist: PPGData; key_id: TGQuark): gpointer; cdecl; external; function g_datalist_id_replace_data(datalist: PPGData; key_id: TGQuark; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_dataset_id_get_data(dataset_location: Pgpointer; key_id: TGQuark): gpointer; cdecl; external; function g_dataset_id_remove_no_notify(dataset_location: Pgpointer; key_id: TGQuark): gpointer; cdecl; external; function g_date_compare(lhs: PGDate; rhs: PGDate): gint; cdecl; external; function g_date_days_between(date1: PGDate; date2: PGDate): gint; cdecl; external; function g_date_get_day(date: PGDate): TGDateDay; cdecl; external; function g_date_get_day_of_year(date: PGDate): guint; cdecl; external; function g_date_get_days_in_month(month: TGDateMonth; year: TGDateYear): guint8; cdecl; external; function g_date_get_iso8601_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_julian(date: PGDate): guint32; cdecl; external; function g_date_get_monday_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_monday_weeks_in_year(year: TGDateYear): guint8; cdecl; external; function g_date_get_month(date: PGDate): TGDateMonth; cdecl; external; function g_date_get_sunday_week_of_year(date: PGDate): guint; cdecl; external; function g_date_get_sunday_weeks_in_year(year: TGDateYear): guint8; cdecl; external; function g_date_get_type: TGType; cdecl; external; function g_date_get_weekday(date: PGDate): TGDateWeekday; cdecl; external; function g_date_get_year(date: PGDate): TGDateYear; cdecl; external; function g_date_is_first_of_month(date: PGDate): gboolean; cdecl; external; function g_date_is_last_of_month(date: PGDate): gboolean; cdecl; external; function g_date_is_leap_year(year: TGDateYear): gboolean; cdecl; external; function g_date_new: PGDate; cdecl; external; function g_date_new_dmy(day: TGDateDay; month: TGDateMonth; year: TGDateYear): PGDate; cdecl; external; function g_date_new_julian(julian_day: guint32): PGDate; cdecl; external; function g_date_strftime(s: Pgchar; slen: gsize; format: Pgchar; date: PGDate): gsize; cdecl; external; function g_date_time_add(datetime: PGDateTime; timespan: TGTimeSpan): PGDateTime; cdecl; external; function g_date_time_add_days(datetime: PGDateTime; days: gint): PGDateTime; cdecl; external; function g_date_time_add_full(datetime: PGDateTime; years: gint; months: gint; days: gint; hours: gint; minutes: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_add_hours(datetime: PGDateTime; hours: gint): PGDateTime; cdecl; external; function g_date_time_add_minutes(datetime: PGDateTime; minutes: gint): PGDateTime; cdecl; external; function g_date_time_add_months(datetime: PGDateTime; months: gint): PGDateTime; cdecl; external; function g_date_time_add_seconds(datetime: PGDateTime; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_add_weeks(datetime: PGDateTime; weeks: gint): PGDateTime; cdecl; external; function g_date_time_add_years(datetime: PGDateTime; years: gint): PGDateTime; cdecl; external; function g_date_time_compare(dt1: Pgpointer; dt2: Pgpointer): gint; cdecl; external; function g_date_time_difference(end_: PGDateTime; begin_: PGDateTime): TGTimeSpan; cdecl; external; function g_date_time_equal(dt1: Pgpointer; dt2: Pgpointer): gboolean; cdecl; external; function g_date_time_format(datetime: PGDateTime; format: Pgchar): Pgchar; cdecl; external; function g_date_time_get_day_of_month(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_day_of_week(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_day_of_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_hour(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_microsecond(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_minute(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_month(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_second(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_seconds(datetime: PGDateTime): gdouble; cdecl; external; function g_date_time_get_timezone_abbreviation(datetime: PGDateTime): Pgchar; cdecl; external; function g_date_time_get_type: TGType; cdecl; external; function g_date_time_get_utc_offset(datetime: PGDateTime): TGTimeSpan; cdecl; external; function g_date_time_get_week_numbering_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_week_of_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_get_year(datetime: PGDateTime): gint; cdecl; external; function g_date_time_hash(datetime: Pgpointer): guint; cdecl; external; function g_date_time_is_daylight_savings(datetime: PGDateTime): gboolean; cdecl; external; function g_date_time_new(tz: PGTimeZone; year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_new_from_timeval_local(tv: PGTimeVal): PGDateTime; cdecl; external; function g_date_time_new_from_timeval_utc(tv: PGTimeVal): PGDateTime; cdecl; external; function g_date_time_new_from_unix_local(t: gint64): PGDateTime; cdecl; external; function g_date_time_new_from_unix_utc(t: gint64): PGDateTime; cdecl; external; function g_date_time_new_local(year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_new_now(tz: PGTimeZone): PGDateTime; cdecl; external; function g_date_time_new_now_local: PGDateTime; cdecl; external; function g_date_time_new_now_utc: PGDateTime; cdecl; external; function g_date_time_new_utc(year: gint; month: gint; day: gint; hour: gint; minute: gint; seconds: gdouble): PGDateTime; cdecl; external; function g_date_time_ref(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_time_to_local(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_time_to_timeval(datetime: PGDateTime; tv: PGTimeVal): gboolean; cdecl; external; function g_date_time_to_timezone(datetime: PGDateTime; tz: PGTimeZone): PGDateTime; cdecl; external; function g_date_time_to_unix(datetime: PGDateTime): gint64; cdecl; external; function g_date_time_to_utc(datetime: PGDateTime): PGDateTime; cdecl; external; function g_date_valid(date: PGDate): gboolean; cdecl; external; function g_date_valid_day(day: TGDateDay): gboolean; cdecl; external; function g_date_valid_dmy(day: TGDateDay; month: TGDateMonth; year: TGDateYear): gboolean; cdecl; external; function g_date_valid_julian(julian_date: guint32): gboolean; cdecl; external; function g_date_valid_month(month: TGDateMonth): gboolean; cdecl; external; function g_date_valid_weekday(weekday: TGDateWeekday): gboolean; cdecl; external; function g_date_valid_year(year: TGDateYear): gboolean; cdecl; external; function g_dcgettext(domain: Pgchar; msgid: Pgchar; category: gint): Pgchar; cdecl; external; function g_dgettext(domain: Pgchar; msgid: Pgchar): Pgchar; cdecl; external; function g_dir_make_tmp(tmpl: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_dir_open(path: Pgchar; flags: guint; error: PPGError): PGDir; cdecl; external; function g_dir_read_name(dir: PGDir): Pgchar; cdecl; external; function g_direct_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_direct_hash(v: Pgpointer): guint; cdecl; external; function g_dngettext(domain: Pgchar; msgid: Pgchar; msgid_plural: Pgchar; n: gulong): Pgchar; cdecl; external; function g_double_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_double_hash(v: Pgpointer): guint; cdecl; external; function g_dpgettext(domain: Pgchar; msgctxtid: Pgchar; msgidoffset: gsize): Pgchar; cdecl; external; function g_dpgettext2(domain: Pgchar; context: Pgchar; msgid: Pgchar): Pgchar; cdecl; external; function g_environ_getenv(envp: PPgchar; variable: Pgchar): Pgchar; cdecl; external; function g_environ_setenv(envp: PPgchar; variable: Pgchar; value: Pgchar; overwrite: gboolean): PPgchar; cdecl; external; function g_environ_unsetenv(envp: PPgchar; variable: Pgchar): PPgchar; cdecl; external; function g_error_copy(error: PGError): PGError; cdecl; external; function g_error_get_type: TGType; cdecl; external; function g_error_matches(error: PGError; domain: TGQuark; code: gint): gboolean; cdecl; external; function g_error_new(domain: TGQuark; code: gint; format: Pgchar; args: array of const): PGError; cdecl; external; function g_error_new_literal(domain: TGQuark; code: gint; message: Pgchar): PGError; cdecl; external; function g_error_new_valist(domain: TGQuark; code: gint; format: Pgchar; args: Tva_list): PGError; cdecl; external; function g_file_error_from_errno(err_no: gint): TGFileError; cdecl; external; function g_file_error_quark: TGQuark; cdecl; external; function g_file_get_contents(filename: Pgchar; contents: PPgchar; length: Pgsize; error: PPGError): gboolean; cdecl; external; function g_file_open_tmp(tmpl: Pgchar; name_used: PPgchar; error: PPGError): gint; cdecl; external; function g_file_read_link(filename: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_file_set_contents(filename: Pgchar; contents: Pgchar; length: gssize; error: PPGError): gboolean; cdecl; external; function g_file_test(filename: Pgchar; test: TGFileTest): gboolean; cdecl; external; function g_filename_display_basename(filename: Pgchar): Pgchar; cdecl; external; function g_filename_display_name(filename: Pgchar): Pgchar; cdecl; external; function g_filename_from_uri(uri: Pgchar; hostname: PPgchar; error: PPGError): Pgchar; cdecl; external; function g_filename_from_utf8(utf8string: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_filename_to_uri(filename: Pgchar; hostname: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_filename_to_utf8(opsysstring: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_find_program_in_path(program_: Pgchar): Pgchar; cdecl; external; function g_format_size(size: guint64): Pgchar; cdecl; external; function g_format_size_for_display(size: gint64): Pgchar; cdecl; external; function g_format_size_full(size: guint64; flags: TGFormatSizeFlags): Pgchar; cdecl; external; function g_fprintf(file_: Pgpointer; format: Pgchar; args: array of const): gint; cdecl; external; function g_get_application_name: Pgchar; cdecl; external; function g_get_charset(charset: PPgchar): gboolean; cdecl; external; function g_get_codeset: Pgchar; cdecl; external; function g_get_current_dir: Pgchar; cdecl; external; function g_get_environ: PPgchar; cdecl; external; function g_get_filename_charsets(charsets: PPPgchar): gboolean; cdecl; external; function g_get_home_dir: Pgchar; cdecl; external; function g_get_host_name: Pgchar; cdecl; external; function g_get_language_names: PPgchar; cdecl; external; function g_get_locale_variants(locale: Pgchar): PPgchar; cdecl; external; function g_get_monotonic_time: gint64; cdecl; external; function g_get_num_processors: guint; cdecl; external; function g_get_prgname: Pgchar; cdecl; external; function g_get_real_name: Pgchar; cdecl; external; function g_get_real_time: gint64; cdecl; external; function g_get_system_config_dirs: PPgchar; cdecl; external; function g_get_system_data_dirs: PPgchar; cdecl; external; function g_get_tmp_dir: Pgchar; cdecl; external; function g_get_user_cache_dir: Pgchar; cdecl; external; function g_get_user_config_dir: Pgchar; cdecl; external; function g_get_user_data_dir: Pgchar; cdecl; external; function g_get_user_name: Pgchar; cdecl; external; function g_get_user_runtime_dir: Pgchar; cdecl; external; function g_get_user_special_dir(directory: TGUserDirectory): Pgchar; cdecl; external; function g_getenv(variable: Pgchar): Pgchar; cdecl; external; function g_gstring_get_type: TGType; cdecl; external; function g_hash_table_contains(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hash_table_find(hash_table: PGHashTable; predicate: TGHRFunc; user_data: gpointer): gpointer; cdecl; external; function g_hash_table_foreach_remove(hash_table: PGHashTable; func: TGHRFunc; user_data: gpointer): guint; cdecl; external; function g_hash_table_foreach_steal(hash_table: PGHashTable; func: TGHRFunc; user_data: gpointer): guint; cdecl; external; function g_hash_table_get_keys(hash_table: PGHashTable): PGList; cdecl; external; function g_hash_table_get_type: TGType; cdecl; external; function g_hash_table_get_values(hash_table: PGHashTable): PGList; cdecl; external; function g_hash_table_iter_get_hash_table(iter: PGHashTableIter): PGHashTable; cdecl; external; function g_hash_table_iter_next(iter: PGHashTableIter; key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_hash_table_lookup(hash_table: PGHashTable; key: Pgpointer): gpointer; cdecl; external; function g_hash_table_lookup_extended(hash_table: PGHashTable; lookup_key: Pgpointer; orig_key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_hash_table_new(hash_func: TGHashFunc; key_equal_func: TGEqualFunc): PGHashTable; cdecl; external; function g_hash_table_new_full(hash_func: TGHashFunc; key_equal_func: TGEqualFunc; key_destroy_func: TGDestroyNotify; value_destroy_func: TGDestroyNotify): PGHashTable; cdecl; external; function g_hash_table_ref(hash_table: PGHashTable): PGHashTable; cdecl; external; function g_hash_table_remove(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hash_table_size(hash_table: PGHashTable): guint; cdecl; external; function g_hash_table_steal(hash_table: PGHashTable; key: Pgpointer): gboolean; cdecl; external; function g_hmac_copy(hmac: PGHmac): PGHmac; cdecl; external; function g_hmac_get_string(hmac: PGHmac): Pgchar; cdecl; external; function g_hmac_new(digest_type: TGChecksumType; key: Pguint8; key_len: gsize): PGHmac; cdecl; external; function g_hmac_ref(hmac: PGHmac): PGHmac; cdecl; external; function g_hook_alloc(hook_list: PGHookList): PGHook; cdecl; external; function g_hook_compare_ids(new_hook: PGHook; sibling: PGHook): gint; cdecl; external; function g_hook_destroy(hook_list: PGHookList; hook_id: gulong): gboolean; cdecl; external; function g_hook_find(hook_list: PGHookList; need_valids: gboolean; func: TGHookFindFunc; data: gpointer): PGHook; cdecl; external; function g_hook_find_data(hook_list: PGHookList; need_valids: gboolean; data: gpointer): PGHook; cdecl; external; function g_hook_find_func(hook_list: PGHookList; need_valids: gboolean; func: gpointer): PGHook; cdecl; external; function g_hook_find_func_data(hook_list: PGHookList; need_valids: gboolean; func: gpointer; data: gpointer): PGHook; cdecl; external; function g_hook_first_valid(hook_list: PGHookList; may_be_in_call: gboolean): PGHook; cdecl; external; function g_hook_get(hook_list: PGHookList; hook_id: gulong): PGHook; cdecl; external; function g_hook_next_valid(hook_list: PGHookList; hook: PGHook; may_be_in_call: gboolean): PGHook; cdecl; external; function g_hook_ref(hook_list: PGHookList; hook: PGHook): PGHook; cdecl; external; function g_hostname_is_ascii_encoded(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_is_ip_address(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_is_non_ascii(hostname: Pgchar): gboolean; cdecl; external; function g_hostname_to_ascii(hostname: Pgchar): Pgchar; cdecl; external; function g_hostname_to_unicode(hostname: Pgchar): Pgchar; cdecl; external; function g_iconv(converter: TGIConv; inbuf: PPgchar; inbytes_left: Pgsize; outbuf: PPgchar; outbytes_left: Pgsize): gsize; cdecl; external; function g_iconv_close(converter: TGIConv): gint; cdecl; external; function g_iconv_open(to_codeset: Pgchar; from_codeset: Pgchar): TGIConv; cdecl; external; function g_idle_add(function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_idle_add_full(priority: gint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_idle_remove_by_data(data: gpointer): gboolean; cdecl; external; function g_idle_source_new: PGSource; cdecl; external; function g_int64_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_int64_hash(v: Pgpointer): guint; cdecl; external; function g_int_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_int_hash(v: Pgpointer): guint; cdecl; external; function g_intern_static_string(string_: Pgchar): Pgchar; cdecl; external; function g_intern_string(string_: Pgchar): Pgchar; cdecl; external; function g_io_add_watch(channel: PGIOChannel; condition: TGIOCondition; func: TGIOFunc; user_data: gpointer): guint; cdecl; external; function g_io_add_watch_full(channel: PGIOChannel; priority: gint; condition: TGIOCondition; func: TGIOFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_io_channel_error_from_errno(en: gint): TGIOChannelError; cdecl; external; function g_io_channel_error_quark: TGQuark; cdecl; external; function g_io_channel_flush(channel: PGIOChannel; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_get_buffer_condition(channel: PGIOChannel): TGIOCondition; cdecl; external; function g_io_channel_get_buffer_size(channel: PGIOChannel): gsize; cdecl; external; function g_io_channel_get_buffered(channel: PGIOChannel): gboolean; cdecl; external; function g_io_channel_get_close_on_unref(channel: PGIOChannel): gboolean; cdecl; external; function g_io_channel_get_encoding(channel: PGIOChannel): Pgchar; cdecl; external; function g_io_channel_get_flags(channel: PGIOChannel): TGIOFlags; cdecl; external; function g_io_channel_get_line_term(channel: PGIOChannel; length: Pgint): Pgchar; cdecl; external; function g_io_channel_get_type: TGType; cdecl; external; function g_io_channel_new_file(filename: Pgchar; mode: Pgchar; error: PPGError): PGIOChannel; cdecl; external; function g_io_channel_read_chars(channel: PGIOChannel; buf: Pgchar; count: gsize; bytes_read: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_line(channel: PGIOChannel; str_return: PPgchar; length: Pgsize; terminator_pos: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_line_string(channel: PGIOChannel; buffer: PGString; terminator_pos: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_to_end(channel: PGIOChannel; str_return: PPgchar; length: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_read_unichar(channel: PGIOChannel; thechar: Pgunichar; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_ref(channel: PGIOChannel): PGIOChannel; cdecl; external; function g_io_channel_seek_position(channel: PGIOChannel; offset: gint64; type_: TGSeekType; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_set_encoding(channel: PGIOChannel; encoding: Pgchar; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_set_flags(channel: PGIOChannel; flags: TGIOFlags; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_shutdown(channel: PGIOChannel; flush: gboolean; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_unix_get_fd(channel: PGIOChannel): gint; cdecl; external; function g_io_channel_unix_new(fd: gint): PGIOChannel; cdecl; external; function g_io_channel_write_chars(channel: PGIOChannel; buf: Pgchar; count: gssize; bytes_written: Pgsize; error: PPGError): TGIOStatus; cdecl; external; function g_io_channel_write_unichar(channel: PGIOChannel; thechar: gunichar; error: PPGError): TGIOStatus; cdecl; external; function g_io_create_watch(channel: PGIOChannel; condition: TGIOCondition): PGSource; cdecl; external; function g_key_file_error_quark: TGQuark; cdecl; external; function g_key_file_get_boolean(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_get_boolean_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgboolean; cdecl; external; function g_key_file_get_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_double(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gdouble; cdecl; external; function g_key_file_get_double_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgdouble; cdecl; external; function g_key_file_get_groups(key_file: PGKeyFile; length: Pgsize): PPgchar; cdecl; external; function g_key_file_get_int64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gint64; cdecl; external; function g_key_file_get_integer(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gint; cdecl; external; function g_key_file_get_integer_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): Pgint; cdecl; external; function g_key_file_get_keys(key_file: PGKeyFile; group_name: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_locale_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_locale_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_start_group(key_file: PGKeyFile): Pgchar; cdecl; external; function g_key_file_get_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_get_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; length: Pgsize; error: PPGError): PPgchar; cdecl; external; function g_key_file_get_type: TGType; cdecl; external; function g_key_file_get_uint64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): guint64; cdecl; external; function g_key_file_get_value(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_key_file_has_group(key_file: PGKeyFile; group_name: Pgchar): gboolean; cdecl; external; function g_key_file_has_key(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_data(key_file: PGKeyFile; data: Pgchar; length: gsize; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_data_dirs(key_file: PGKeyFile; file_: Pgchar; full_path: PPgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_dirs(key_file: PGKeyFile; file_: Pgchar; search_dirs: PPgchar; full_path: PPgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_load_from_file(key_file: PGKeyFile; file_: Pgchar; flags: TGKeyFileFlags; error: PPGError): gboolean; cdecl; external; function g_key_file_new: PGKeyFile; cdecl; external; function g_key_file_ref(key_file: PGKeyFile): PGKeyFile; cdecl; external; function g_key_file_remove_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_remove_group(key_file: PGKeyFile; group_name: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_remove_key(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_set_comment(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; comment: Pgchar; error: PPGError): gboolean; cdecl; external; function g_key_file_to_data(key_file: PGKeyFile; length: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_list_alloc: PGList; cdecl; external; function g_list_append(list: PGList; data: gpointer): PGList; cdecl; external; function g_list_concat(list1: PGList; list2: PGList): PGList; cdecl; external; function g_list_copy(list: PGList): PGList; cdecl; external; function g_list_copy_deep(list: PGList; func: TGCopyFunc; user_data: gpointer): PGList; cdecl; external; function g_list_delete_link(list: PGList; link_: PGList): PGList; cdecl; external; function g_list_find(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_find_custom(list: PGList; data: Pgpointer; func: TGCompareFunc): PGList; cdecl; external; function g_list_first(list: PGList): PGList; cdecl; external; function g_list_index(list: PGList; data: Pgpointer): gint; cdecl; external; function g_list_insert(list: PGList; data: gpointer; position: gint): PGList; cdecl; external; function g_list_insert_before(list: PGList; sibling: PGList; data: gpointer): PGList; cdecl; external; function g_list_insert_sorted(list: PGList; data: gpointer; func: TGCompareFunc): PGList; cdecl; external; function g_list_insert_sorted_with_data(list: PGList; data: gpointer; func: TGCompareDataFunc; user_data: gpointer): PGList; cdecl; external; function g_list_last(list: PGList): PGList; cdecl; external; function g_list_length(list: PGList): guint; cdecl; external; function g_list_nth(list: PGList; n: guint): PGList; cdecl; external; function g_list_nth_data(list: PGList; n: guint): gpointer; cdecl; external; function g_list_nth_prev(list: PGList; n: guint): PGList; cdecl; external; function g_list_position(list: PGList; llink: PGList): gint; cdecl; external; function g_list_prepend(list: PGList; data: gpointer): PGList; cdecl; external; function g_list_remove(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_remove_all(list: PGList; data: Pgpointer): PGList; cdecl; external; function g_list_remove_link(list: PGList; llink: PGList): PGList; cdecl; external; function g_list_reverse(list: PGList): PGList; cdecl; external; function g_list_sort(list: PGList; compare_func: TGCompareFunc): PGList; cdecl; external; function g_list_sort_with_data(list: PGList; compare_func: TGCompareDataFunc; user_data: gpointer): PGList; cdecl; external; function g_listenv: PPgchar; cdecl; external; function g_locale_from_utf8(utf8string: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_locale_to_utf8(opsysstring: Pgchar; len: gssize; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): Pgchar; cdecl; external; function g_log_set_always_fatal(fatal_mask: TGLogLevelFlags): TGLogLevelFlags; cdecl; external; function g_log_set_default_handler(log_func: TGLogFunc; user_data: gpointer): TGLogFunc; cdecl; external; function g_log_set_fatal_mask(log_domain: Pgchar; fatal_mask: TGLogLevelFlags): TGLogLevelFlags; cdecl; external; function g_log_set_handler(log_domain: Pgchar; log_levels: TGLogLevelFlags; log_func: TGLogFunc; user_data: gpointer): guint; cdecl; external; function g_main_context_acquire(context: PGMainContext): gboolean; cdecl; external; function g_main_context_check(context: PGMainContext; max_priority: gint; fds: PGPollFD; n_fds: gint): gint; cdecl; external; function g_main_context_default: PGMainContext; cdecl; external; function g_main_context_find_source_by_funcs_user_data(context: PGMainContext; funcs: PGSourceFuncs; user_data: gpointer): PGSource; cdecl; external; function g_main_context_find_source_by_id(context: PGMainContext; source_id: guint): PGSource; cdecl; external; function g_main_context_find_source_by_user_data(context: PGMainContext; user_data: gpointer): PGSource; cdecl; external; function g_main_context_get_poll_func(context: PGMainContext): TGPollFunc; cdecl; external; function g_main_context_get_thread_default: PGMainContext; cdecl; external; function g_main_context_get_type: TGType; cdecl; external; function g_main_context_is_owner(context: PGMainContext): gboolean; cdecl; external; function g_main_context_iteration(context: PGMainContext; may_block: gboolean): gboolean; cdecl; external; function g_main_context_new: PGMainContext; cdecl; external; function g_main_context_pending(context: PGMainContext): gboolean; cdecl; external; function g_main_context_prepare(context: PGMainContext; priority: Pgint): gboolean; cdecl; external; function g_main_context_query(context: PGMainContext; max_priority: gint; timeout_: Pgint; fds: PGPollFD; n_fds: gint): gint; cdecl; external; function g_main_context_ref(context: PGMainContext): PGMainContext; cdecl; external; function g_main_context_ref_thread_default: PGMainContext; cdecl; external; function g_main_context_wait(context: PGMainContext; cond: PGCond; mutex: PGMutex): gboolean; cdecl; external; function g_main_current_source: PGSource; cdecl; external; function g_main_depth: gint; cdecl; external; function g_main_loop_get_context(loop: PGMainLoop): PGMainContext; cdecl; external; function g_main_loop_get_type: TGType; cdecl; external; function g_main_loop_is_running(loop: PGMainLoop): gboolean; cdecl; external; function g_main_loop_new(context: PGMainContext; is_running: gboolean): PGMainLoop; cdecl; external; function g_main_loop_ref(loop: PGMainLoop): PGMainLoop; cdecl; external; function g_malloc(n_bytes: gsize): gpointer; cdecl; external; function g_malloc0(n_bytes: gsize): gpointer; cdecl; external; function g_malloc0_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_malloc_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_mapped_file_get_bytes(file_: PGMappedFile): PGBytes; cdecl; external; function g_mapped_file_get_contents(file_: PGMappedFile): Pgchar; cdecl; external; function g_mapped_file_get_length(file_: PGMappedFile): gsize; cdecl; external; function g_mapped_file_new(filename: Pgchar; writable: gboolean; error: PPGError): PGMappedFile; cdecl; external; function g_mapped_file_new_from_fd(fd: gint; writable: gboolean; error: PPGError): PGMappedFile; cdecl; external; function g_mapped_file_ref(file_: PGMappedFile): PGMappedFile; cdecl; external; function g_markup_collect_attributes(element_name: Pgchar; attribute_names: PPgchar; attribute_values: PPgchar; error: PPGError; first_type: TGMarkupCollectType; first_attr: Pgchar; args: array of const): gboolean; cdecl; external; function g_markup_error_quark: TGQuark; cdecl; external; function g_markup_escape_text(text: Pgchar; length: gssize): Pgchar; cdecl; external; function g_markup_parse_context_end_parse(context: PGMarkupParseContext; error: PPGError): gboolean; cdecl; external; function g_markup_parse_context_get_element(context: PGMarkupParseContext): Pgchar; cdecl; external; function g_markup_parse_context_get_element_stack(context: PGMarkupParseContext): PGSList; cdecl; external; function g_markup_parse_context_get_type: TGType; cdecl; external; function g_markup_parse_context_get_user_data(context: PGMarkupParseContext): gpointer; cdecl; external; function g_markup_parse_context_new(parser: PGMarkupParser; flags: TGMarkupParseFlags; user_data: gpointer; user_data_dnotify: TGDestroyNotify): PGMarkupParseContext; cdecl; external; function g_markup_parse_context_parse(context: PGMarkupParseContext; text: Pgchar; text_len: gssize; error: PPGError): gboolean; cdecl; external; function g_markup_parse_context_pop(context: PGMarkupParseContext): gpointer; cdecl; external; function g_markup_parse_context_ref(context: PGMarkupParseContext): PGMarkupParseContext; cdecl; external; function g_markup_printf_escaped(format: Pgchar; args: array of const): Pgchar; cdecl; external; function g_markup_vprintf_escaped(format: Pgchar; args: Tva_list): Pgchar; cdecl; external; function g_match_info_expand_references(match_info: PGMatchInfo; string_to_expand: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_match_info_fetch(match_info: PGMatchInfo; match_num: gint): Pgchar; cdecl; external; function g_match_info_fetch_all(match_info: PGMatchInfo): PPgchar; cdecl; external; function g_match_info_fetch_named(match_info: PGMatchInfo; name: Pgchar): Pgchar; cdecl; external; function g_match_info_fetch_named_pos(match_info: PGMatchInfo; name: Pgchar; start_pos: Pgint; end_pos: Pgint): gboolean; cdecl; external; function g_match_info_fetch_pos(match_info: PGMatchInfo; match_num: gint; start_pos: Pgint; end_pos: Pgint): gboolean; cdecl; external; function g_match_info_get_match_count(match_info: PGMatchInfo): gint; cdecl; external; function g_match_info_get_regex(match_info: PGMatchInfo): PGRegex; cdecl; external; function g_match_info_get_string(match_info: PGMatchInfo): Pgchar; cdecl; external; function g_match_info_get_type: TGType; cdecl; external; function g_match_info_is_partial_match(match_info: PGMatchInfo): gboolean; cdecl; external; function g_match_info_matches(match_info: PGMatchInfo): gboolean; cdecl; external; function g_match_info_next(match_info: PGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_match_info_ref(match_info: PGMatchInfo): PGMatchInfo; cdecl; external; function g_mem_is_system_malloc: gboolean; cdecl; external; function g_memdup(mem: Pgpointer; byte_size: guint): gpointer; cdecl; external; function g_mkdir_with_parents(pathname: Pgchar; mode: gint): gint; cdecl; external; function g_mkdtemp(tmpl: Pgchar): Pgchar; cdecl; external; function g_mkdtemp_full(tmpl: Pgchar; mode: gint): Pgchar; cdecl; external; function g_mkstemp(tmpl: Pgchar): gint; cdecl; external; function g_mkstemp_full(tmpl: Pgchar; flags: gint; mode: gint): gint; cdecl; external; function g_mutex_trylock(mutex: PGMutex): gboolean; cdecl; external; function g_node_child_index(node: PGNode; data: gpointer): gint; cdecl; external; function g_node_child_position(node: PGNode; child: PGNode): gint; cdecl; external; function g_node_copy(node: PGNode): PGNode; cdecl; external; function g_node_copy_deep(node: PGNode; copy_func: TGCopyFunc; data: gpointer): PGNode; cdecl; external; function g_node_depth(node: PGNode): guint; cdecl; external; function g_node_find(root: PGNode; order: TGTraverseType; flags: TGTraverseFlags; data: gpointer): PGNode; cdecl; external; function g_node_find_child(node: PGNode; flags: TGTraverseFlags; data: gpointer): PGNode; cdecl; external; function g_node_first_sibling(node: PGNode): PGNode; cdecl; external; function g_node_get_root(node: PGNode): PGNode; cdecl; external; function g_node_insert(parent: PGNode; position: gint; node: PGNode): PGNode; cdecl; external; function g_node_insert_after(parent: PGNode; sibling: PGNode; node: PGNode): PGNode; cdecl; external; function g_node_insert_before(parent: PGNode; sibling: PGNode; node: PGNode): PGNode; cdecl; external; function g_node_is_ancestor(node: PGNode; descendant: PGNode): gboolean; cdecl; external; function g_node_last_child(node: PGNode): PGNode; cdecl; external; function g_node_last_sibling(node: PGNode): PGNode; cdecl; external; function g_node_max_height(root: PGNode): guint; cdecl; external; function g_node_n_children(node: PGNode): guint; cdecl; external; function g_node_n_nodes(root: PGNode; flags: TGTraverseFlags): guint; cdecl; external; function g_node_new(data: gpointer): PGNode; cdecl; external; function g_node_nth_child(node: PGNode; n: guint): PGNode; cdecl; external; function g_node_prepend(parent: PGNode; node: PGNode): PGNode; cdecl; external; function g_once_impl(once: PGOnce; func: TGThreadFunc; arg: gpointer): gpointer; cdecl; external; function g_once_init_enter(location: Pgpointer): gboolean; cdecl; external; function g_option_context_get_description(context: PGOptionContext): Pgchar; cdecl; external; function g_option_context_get_help(context: PGOptionContext; main_help: gboolean; group: PGOptionGroup): Pgchar; cdecl; external; function g_option_context_get_help_enabled(context: PGOptionContext): gboolean; cdecl; external; function g_option_context_get_ignore_unknown_options(context: PGOptionContext): gboolean; cdecl; external; function g_option_context_get_main_group(context: PGOptionContext): PGOptionGroup; cdecl; external; function g_option_context_get_summary(context: PGOptionContext): Pgchar; cdecl; external; function g_option_context_new(parameter_string: Pgchar): PGOptionContext; cdecl; external; function g_option_context_parse(context: PGOptionContext; argc: Pgint; argv: PPPgchar; error: PPGError): gboolean; cdecl; external; function g_option_error_quark: TGQuark; cdecl; external; function g_option_group_new(name: Pgchar; description: Pgchar; help_description: Pgchar; user_data: gpointer; destroy_: TGDestroyNotify): PGOptionGroup; cdecl; external; function g_parse_debug_string(string_: Pgchar; keys: PGDebugKey; nkeys: guint): guint; cdecl; external; function g_path_get_basename(file_name: Pgchar): Pgchar; cdecl; external; function g_path_get_dirname(file_name: Pgchar): Pgchar; cdecl; external; function g_path_is_absolute(file_name: Pgchar): gboolean; cdecl; external; function g_path_skip_root(file_name: Pgchar): Pgchar; cdecl; external; function g_pattern_match(pspec: PGPatternSpec; string_length: guint; string_: Pgchar; string_reversed: Pgchar): gboolean; cdecl; external; function g_pattern_match_simple(pattern: Pgchar; string_: Pgchar): gboolean; cdecl; external; function g_pattern_match_string(pspec: PGPatternSpec; string_: Pgchar): gboolean; cdecl; external; function g_pattern_spec_equal(pspec1: PGPatternSpec; pspec2: PGPatternSpec): gboolean; cdecl; external; function g_pattern_spec_new(pattern: Pgchar): PGPatternSpec; cdecl; external; function g_pointer_bit_trylock(address: Pgpointer; lock_bit: gint): gboolean; cdecl; external; function g_poll(fds: PGPollFD; nfds: guint; timeout: gint): gint; cdecl; external; function g_pollfd_get_type: TGType; cdecl; external; function g_printf(format: Pgchar; args: array of const): gint; cdecl; external; function g_printf_string_upper_bound(format: Pgchar; args: Tva_list): gsize; cdecl; external; function g_private_get(key: PGPrivate): gpointer; cdecl; external; function g_ptr_array_free(array_: Pgpointer; free_seg: gboolean): Pgpointer; cdecl; external; function g_ptr_array_get_type: TGType; cdecl; external; function g_ptr_array_new: Pgpointer; cdecl; external; function g_ptr_array_new_full(reserved_size: guint; element_free_func: TGDestroyNotify): Pgpointer; cdecl; external; function g_ptr_array_new_with_free_func(element_free_func: TGDestroyNotify): Pgpointer; cdecl; external; function g_ptr_array_ref(array_: Pgpointer): Pgpointer; cdecl; external; function g_ptr_array_remove(array_: Pgpointer; data: gpointer): gboolean; cdecl; external; function g_ptr_array_remove_fast(array_: Pgpointer; data: gpointer): gboolean; cdecl; external; function g_ptr_array_remove_index(array_: Pgpointer; index_: guint): gpointer; cdecl; external; function g_ptr_array_remove_index_fast(array_: Pgpointer; index_: guint): gpointer; cdecl; external; function g_ptr_array_sized_new(reserved_size: guint): Pgpointer; cdecl; external; function g_quark_from_static_string(string_: Pgchar): TGQuark; cdecl; external; function g_quark_from_string(string_: Pgchar): TGQuark; cdecl; external; function g_quark_to_string(quark: TGQuark): Pgchar; cdecl; external; function g_quark_try_string(string_: Pgchar): TGQuark; cdecl; external; function g_queue_copy(queue: PGQueue): PGQueue; cdecl; external; function g_queue_find(queue: PGQueue; data: Pgpointer): PGList; cdecl; external; function g_queue_find_custom(queue: PGQueue; data: Pgpointer; func: TGCompareFunc): PGList; cdecl; external; function g_queue_get_length(queue: PGQueue): guint; cdecl; external; function g_queue_index(queue: PGQueue; data: Pgpointer): gint; cdecl; external; function g_queue_is_empty(queue: PGQueue): gboolean; cdecl; external; function g_queue_link_index(queue: PGQueue; link_: PGList): gint; cdecl; external; function g_queue_new: PGQueue; cdecl; external; function g_queue_peek_head(queue: PGQueue): gpointer; cdecl; external; function g_queue_peek_head_link(queue: PGQueue): PGList; cdecl; external; function g_queue_peek_nth(queue: PGQueue; n: guint): gpointer; cdecl; external; function g_queue_peek_nth_link(queue: PGQueue; n: guint): PGList; cdecl; external; function g_queue_peek_tail(queue: PGQueue): gpointer; cdecl; external; function g_queue_peek_tail_link(queue: PGQueue): PGList; cdecl; external; function g_queue_pop_head(queue: PGQueue): gpointer; cdecl; external; function g_queue_pop_head_link(queue: PGQueue): PGList; cdecl; external; function g_queue_pop_nth(queue: PGQueue; n: guint): gpointer; cdecl; external; function g_queue_pop_nth_link(queue: PGQueue; n: guint): PGList; cdecl; external; function g_queue_pop_tail(queue: PGQueue): gpointer; cdecl; external; function g_queue_pop_tail_link(queue: PGQueue): PGList; cdecl; external; function g_queue_remove(queue: PGQueue; data: Pgpointer): gboolean; cdecl; external; function g_queue_remove_all(queue: PGQueue; data: Pgpointer): guint; cdecl; external; function g_rand_copy(rand_: PGRand): PGRand; cdecl; external; function g_rand_double(rand_: PGRand): gdouble; cdecl; external; function g_rand_double_range(rand_: PGRand; begin_: gdouble; end_: gdouble): gdouble; cdecl; external; function g_rand_int(rand_: PGRand): guint32; cdecl; external; function g_rand_int_range(rand_: PGRand; begin_: gint32; end_: gint32): gint32; cdecl; external; function g_rand_new: PGRand; cdecl; external; function g_rand_new_with_seed(seed: guint32): PGRand; cdecl; external; function g_rand_new_with_seed_array(seed: Pguint32; seed_length: guint): PGRand; cdecl; external; function g_random_double: gdouble; cdecl; external; function g_random_double_range(begin_: gdouble; end_: gdouble): gdouble; cdecl; external; function g_random_int: guint32; cdecl; external; function g_random_int_range(begin_: gint32; end_: gint32): gint32; cdecl; external; function g_realloc(mem: gpointer; n_bytes: gsize): gpointer; cdecl; external; function g_realloc_n(mem: gpointer; n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_rec_mutex_trylock(rec_mutex: PGRecMutex): gboolean; cdecl; external; function g_regex_check_replacement(replacement: Pgchar; has_references: Pgboolean; error: PPGError): gboolean; cdecl; external; function g_regex_error_quark: TGQuark; cdecl; external; function g_regex_escape_nul(string_: Pgchar; length: gint): Pgchar; cdecl; external; function g_regex_escape_string(string_: Pgchar; length: gint): Pgchar; cdecl; external; function g_regex_get_capture_count(regex: PGRegex): gint; cdecl; external; function g_regex_get_compile_flags(regex: PGRegex): TGRegexCompileFlags; cdecl; external; function g_regex_get_has_cr_or_lf(regex: PGRegex): gboolean; cdecl; external; function g_regex_get_match_flags(regex: PGRegex): TGRegexMatchFlags; cdecl; external; function g_regex_get_max_backref(regex: PGRegex): gint; cdecl; external; function g_regex_get_pattern(regex: PGRegex): Pgchar; cdecl; external; function g_regex_get_string_number(regex: PGRegex; name: Pgchar): gint; cdecl; external; function g_regex_get_type: TGType; cdecl; external; function g_regex_match(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo): gboolean; cdecl; external; function g_regex_match_all(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo): gboolean; cdecl; external; function g_regex_match_all_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_regex_match_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; match_info: PPGMatchInfo; error: PPGError): gboolean; cdecl; external; function g_regex_match_simple(pattern: Pgchar; string_: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags): gboolean; cdecl; external; function g_regex_new(pattern: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags; error: PPGError): PGRegex; cdecl; external; function g_regex_ref(regex: PGRegex): PGRegex; cdecl; external; function g_regex_replace(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; replacement: Pgchar; match_options: TGRegexMatchFlags; error: PPGError): Pgchar; cdecl; external; function g_regex_replace_eval(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; eval: TGRegexEvalCallback; user_data: gpointer; error: PPGError): Pgchar; cdecl; external; function g_regex_replace_literal(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; replacement: Pgchar; match_options: TGRegexMatchFlags; error: PPGError): Pgchar; cdecl; external; function g_regex_split(regex: PGRegex; string_: Pgchar; match_options: TGRegexMatchFlags): PPgchar; cdecl; external; function g_regex_split_full(regex: PGRegex; string_: Pgchar; string_len: gssize; start_position: gint; match_options: TGRegexMatchFlags; max_tokens: gint; error: PPGError): PPgchar; cdecl; external; function g_regex_split_simple(pattern: Pgchar; string_: Pgchar; compile_options: TGRegexCompileFlags; match_options: TGRegexMatchFlags): PPgchar; cdecl; external; function g_rmdir(filename: Pgchar): gint; cdecl; external; function g_rw_lock_reader_trylock(rw_lock: PGRWLock): gboolean; cdecl; external; function g_rw_lock_writer_trylock(rw_lock: PGRWLock): gboolean; cdecl; external; function g_scanner_cur_line(scanner: PGScanner): guint; cdecl; external; function g_scanner_cur_position(scanner: PGScanner): guint; cdecl; external; function g_scanner_cur_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_cur_value(scanner: PGScanner): TGTokenValue; cdecl; external; function g_scanner_eof(scanner: PGScanner): gboolean; cdecl; external; function g_scanner_get_next_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_lookup_symbol(scanner: PGScanner; symbol: Pgchar): gpointer; cdecl; external; function g_scanner_new(config_templ: PGScannerConfig): PGScanner; cdecl; external; function g_scanner_peek_next_token(scanner: PGScanner): TGTokenType; cdecl; external; function g_scanner_scope_lookup_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar): gpointer; cdecl; external; function g_scanner_set_scope(scanner: PGScanner; scope_id: guint): guint; cdecl; external; function g_sequence_append(seq: PGSequence; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_get(iter: PGSequenceIter): gpointer; cdecl; external; function g_sequence_get_begin_iter(seq: PGSequence): PGSequenceIter; cdecl; external; function g_sequence_get_end_iter(seq: PGSequence): PGSequenceIter; cdecl; external; function g_sequence_get_iter_at_pos(seq: PGSequence; pos: gint): PGSequenceIter; cdecl; external; function g_sequence_get_length(seq: PGSequence): gint; cdecl; external; function g_sequence_insert_before(iter: PGSequenceIter; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_insert_sorted(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_insert_sorted_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_iter_compare(a: PGSequenceIter; b: PGSequenceIter): gint; cdecl; external; function g_sequence_iter_get_position(iter: PGSequenceIter): gint; cdecl; external; function g_sequence_iter_get_sequence(iter: PGSequenceIter): PGSequence; cdecl; external; function g_sequence_iter_is_begin(iter: PGSequenceIter): gboolean; cdecl; external; function g_sequence_iter_is_end(iter: PGSequenceIter): gboolean; cdecl; external; function g_sequence_iter_move(iter: PGSequenceIter; delta: gint): PGSequenceIter; cdecl; external; function g_sequence_iter_next(iter: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_iter_prev(iter: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_lookup(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_lookup_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_new(data_destroy: TGDestroyNotify): PGSequence; cdecl; external; function g_sequence_prepend(seq: PGSequence; data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_range_get_midpoint(begin_: PGSequenceIter; end_: PGSequenceIter): PGSequenceIter; cdecl; external; function g_sequence_search(seq: PGSequence; data: gpointer; cmp_func: TGCompareDataFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_sequence_search_iter(seq: PGSequence; data: gpointer; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer): PGSequenceIter; cdecl; external; function g_set_print_handler(func: TGPrintFunc): TGPrintFunc; cdecl; external; function g_set_printerr_handler(func: TGPrintFunc): TGPrintFunc; cdecl; external; function g_setenv(variable: Pgchar; value: Pgchar; overwrite: gboolean): gboolean; cdecl; external; function g_shell_error_quark: TGQuark; cdecl; external; function g_shell_parse_argv(command_line: Pgchar; argcp: Pgint; argvp: PPPgchar; error: PPGError): gboolean; cdecl; external; function g_shell_quote(unquoted_string: Pgchar): Pgchar; cdecl; external; function g_shell_unquote(quoted_string: Pgchar; error: PPGError): Pgchar; cdecl; external; function g_slice_alloc(block_size: gsize): gpointer; cdecl; external; function g_slice_alloc0(block_size: gsize): gpointer; cdecl; external; function g_slice_copy(block_size: gsize; mem_block: Pgpointer): gpointer; cdecl; external; function g_slice_get_config(ckey: TGSliceConfig): gint64; cdecl; external; function g_slice_get_config_state(ckey: TGSliceConfig; address: gint64; n_values: Pguint): Pgint64; cdecl; external; function g_slist_alloc: PGSList; cdecl; external; function g_slist_append(list: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_concat(list1: PGSList; list2: PGSList): PGSList; cdecl; external; function g_slist_copy(list: PGSList): PGSList; cdecl; external; function g_slist_copy_deep(list: PGSList; func: TGCopyFunc; user_data: gpointer): PGSList; cdecl; external; function g_slist_delete_link(list: PGSList; link_: PGSList): PGSList; cdecl; external; function g_slist_find(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_find_custom(list: PGSList; data: Pgpointer; func: TGCompareFunc): PGSList; cdecl; external; function g_slist_index(list: PGSList; data: Pgpointer): gint; cdecl; external; function g_slist_insert(list: PGSList; data: gpointer; position: gint): PGSList; cdecl; external; function g_slist_insert_before(slist: PGSList; sibling: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_insert_sorted(list: PGSList; data: gpointer; func: TGCompareFunc): PGSList; cdecl; external; function g_slist_insert_sorted_with_data(list: PGSList; data: gpointer; func: TGCompareDataFunc; user_data: gpointer): PGSList; cdecl; external; function g_slist_last(list: PGSList): PGSList; cdecl; external; function g_slist_length(list: PGSList): guint; cdecl; external; function g_slist_nth(list: PGSList; n: guint): PGSList; cdecl; external; function g_slist_nth_data(list: PGSList; n: guint): gpointer; cdecl; external; function g_slist_position(list: PGSList; llink: PGSList): gint; cdecl; external; function g_slist_prepend(list: PGSList; data: gpointer): PGSList; cdecl; external; function g_slist_remove(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_remove_all(list: PGSList; data: Pgpointer): PGSList; cdecl; external; function g_slist_remove_link(list: PGSList; link_: PGSList): PGSList; cdecl; external; function g_slist_reverse(list: PGSList): PGSList; cdecl; external; function g_slist_sort(list: PGSList; compare_func: TGCompareFunc): PGSList; cdecl; external; function g_slist_sort_with_data(list: PGSList; compare_func: TGCompareDataFunc; user_data: gpointer): PGSList; cdecl; external; function g_snprintf(string_: Pgchar; n: gulong; format: Pgchar; args: array of const): gint; cdecl; external; function g_source_add_unix_fd(source: PGSource; fd: gint; events: TGIOCondition): gpointer; cdecl; external; function g_source_attach(source: PGSource; context: PGMainContext): guint; cdecl; external; function g_source_get_can_recurse(source: PGSource): gboolean; cdecl; external; function g_source_get_context(source: PGSource): PGMainContext; cdecl; external; function g_source_get_id(source: PGSource): guint; cdecl; external; function g_source_get_name(source: PGSource): Pgchar; cdecl; external; function g_source_get_priority(source: PGSource): gint; cdecl; external; function g_source_get_ready_time(source: PGSource): gint64; cdecl; external; function g_source_get_time(source: PGSource): gint64; cdecl; external; function g_source_get_type: TGType; cdecl; external; function g_source_is_destroyed(source: PGSource): gboolean; cdecl; external; function g_source_new(source_funcs: PGSourceFuncs; struct_size: guint): PGSource; cdecl; external; function g_source_query_unix_fd(source: PGSource; tag: gpointer): TGIOCondition; cdecl; external; function g_source_ref(source: PGSource): PGSource; cdecl; external; function g_source_remove(tag: guint): gboolean; cdecl; external; function g_source_remove_by_funcs_user_data(funcs: PGSourceFuncs; user_data: gpointer): gboolean; cdecl; external; function g_source_remove_by_user_data(user_data: gpointer): gboolean; cdecl; external; function g_spaced_primes_closest(num: guint): guint; cdecl; external; function g_spawn_async(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; child_pid: PGPid; error: PPGError): gboolean; cdecl; external; function g_spawn_async_with_pipes(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; child_pid: PGPid; standard_input: Pgint; standard_output: Pgint; standard_error: Pgint; error: PPGError): gboolean; cdecl; external; function g_spawn_check_exit_status(exit_status: gint; error: PPGError): gboolean; cdecl; external; function g_spawn_command_line_async(command_line: Pgchar; error: PPGError): gboolean; cdecl; external; function g_spawn_command_line_sync(command_line: Pgchar; standard_output: PPgchar; standard_error: PPgchar; exit_status: Pgint; error: PPGError): gboolean; cdecl; external; function g_spawn_error_quark: TGQuark; cdecl; external; function g_spawn_exit_error_quark: TGQuark; cdecl; external; function g_spawn_sync(working_directory: Pgchar; argv: PPgchar; envp: PPgchar; flags: TGSpawnFlags; child_setup: TGSpawnChildSetupFunc; user_data: gpointer; standard_output: PPgchar; standard_error: PPgchar; exit_status: Pgint; error: PPGError): gboolean; cdecl; external; function g_sprintf(string_: Pgchar; format: Pgchar; args: array of const): gint; cdecl; external; function g_stpcpy(dest: Pgchar; src: Pgchar): Pgchar; cdecl; external; function g_str_equal(v1: Pgpointer; v2: Pgpointer): gboolean; cdecl; external; function g_str_has_prefix(str: Pgchar; prefix: Pgchar): gboolean; cdecl; external; function g_str_has_suffix(str: Pgchar; suffix: Pgchar): gboolean; cdecl; external; function g_str_hash(v: Pgpointer): guint; cdecl; external; function g_strcanon(string_: Pgchar; valid_chars: Pgchar; substitutor: gchar): Pgchar; cdecl; external; function g_strcasecmp(s1: Pgchar; s2: Pgchar): gint; cdecl; external; function g_strchomp(string_: Pgchar): Pgchar; cdecl; external; function g_strchug(string_: Pgchar): Pgchar; cdecl; external; function g_strcmp0(str1: Pgchar; str2: Pgchar): gint; cdecl; external; function g_strcompress(source: Pgchar): Pgchar; cdecl; external; function g_strconcat(string1: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strdelimit(string_: Pgchar; delimiters: Pgchar; new_delimiter: gchar): Pgchar; cdecl; external; function g_strdown(string_: Pgchar): Pgchar; cdecl; external; function g_strdup(str: Pgchar): Pgchar; cdecl; external; function g_strdup_printf(format: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strdup_vprintf(format: Pgchar; args: Tva_list): Pgchar; cdecl; external; function g_strdupv(str_array: PPgchar): PPgchar; cdecl; external; function g_strerror(errnum: gint): Pgchar; cdecl; external; function g_strescape(source: Pgchar; exceptions: Pgchar): Pgchar; cdecl; external; function g_string_append(string_: PGString; val: Pgchar): PGString; cdecl; external; function g_string_append_c(string_: PGString; c: gchar): PGString; cdecl; external; function g_string_append_len(string_: PGString; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_append_unichar(string_: PGString; wc: gunichar): PGString; cdecl; external; function g_string_append_uri_escaped(string_: PGString; unescaped: Pgchar; reserved_chars_allowed: Pgchar; allow_utf8: gboolean): PGString; cdecl; external; function g_string_ascii_down(string_: PGString): PGString; cdecl; external; function g_string_ascii_up(string_: PGString): PGString; cdecl; external; function g_string_assign(string_: PGString; rval: Pgchar): PGString; cdecl; external; function g_string_chunk_insert(chunk: PGStringChunk; string_: Pgchar): Pgchar; cdecl; external; function g_string_chunk_insert_const(chunk: PGStringChunk; string_: Pgchar): Pgchar; cdecl; external; function g_string_chunk_insert_len(chunk: PGStringChunk; string_: Pgchar; len: gssize): Pgchar; cdecl; external; function g_string_chunk_new(size: gsize): PGStringChunk; cdecl; external; function g_string_equal(v: PGString; v2: PGString): gboolean; cdecl; external; function g_string_erase(string_: PGString; pos: gssize; len: gssize): PGString; cdecl; external; function g_string_free(string_: PGString; free_segment: gboolean): Pgchar; cdecl; external; function g_string_free_to_bytes(string_: PGString): PGBytes; cdecl; external; function g_string_hash(str: PGString): guint; cdecl; external; function g_string_insert(string_: PGString; pos: gssize; val: Pgchar): PGString; cdecl; external; function g_string_insert_c(string_: PGString; pos: gssize; c: gchar): PGString; cdecl; external; function g_string_insert_len(string_: PGString; pos: gssize; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_insert_unichar(string_: PGString; pos: gssize; wc: gunichar): PGString; cdecl; external; function g_string_new(init: Pgchar): PGString; cdecl; external; function g_string_new_len(init: Pgchar; len: gssize): PGString; cdecl; external; function g_string_overwrite(string_: PGString; pos: gsize; val: Pgchar): PGString; cdecl; external; function g_string_overwrite_len(string_: PGString; pos: gsize; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_prepend(string_: PGString; val: Pgchar): PGString; cdecl; external; function g_string_prepend_c(string_: PGString; c: gchar): PGString; cdecl; external; function g_string_prepend_len(string_: PGString; val: Pgchar; len: gssize): PGString; cdecl; external; function g_string_prepend_unichar(string_: PGString; wc: gunichar): PGString; cdecl; external; function g_string_set_size(string_: PGString; len: gsize): PGString; cdecl; external; function g_string_sized_new(dfl_size: gsize): PGString; cdecl; external; function g_string_truncate(string_: PGString; len: gsize): PGString; cdecl; external; function g_strip_context(msgid: Pgchar; msgval: Pgchar): Pgchar; cdecl; external; function g_strjoin(separator: Pgchar; args: array of const): Pgchar; cdecl; external; function g_strjoinv(separator: Pgchar; str_array: PPgchar): Pgchar; cdecl; external; function g_strlcat(dest: Pgchar; src: Pgchar; dest_size: gsize): gsize; cdecl; external; function g_strlcpy(dest: Pgchar; src: Pgchar; dest_size: gsize): gsize; cdecl; external; function g_strncasecmp(s1: Pgchar; s2: Pgchar; n: guint): gint; cdecl; external; function g_strndup(str: Pgchar; n: gsize): Pgchar; cdecl; external; function g_strnfill(length: gsize; fill_char: gchar): Pgchar; cdecl; external; function g_strreverse(string_: Pgchar): Pgchar; cdecl; external; function g_strrstr(haystack: Pgchar; needle: Pgchar): Pgchar; cdecl; external; function g_strrstr_len(haystack: Pgchar; haystack_len: gssize; needle: Pgchar): Pgchar; cdecl; external; function g_strsignal(signum: gint): Pgchar; cdecl; external; function g_strsplit(string_: Pgchar; delimiter: Pgchar; max_tokens: gint): PPgchar; cdecl; external; function g_strsplit_set(string_: Pgchar; delimiters: Pgchar; max_tokens: gint): PPgchar; cdecl; external; function g_strstr_len(haystack: Pgchar; haystack_len: gssize; needle: Pgchar): Pgchar; cdecl; external; function g_strtod(nptr: Pgchar; endptr: PPgchar): gdouble; cdecl; external; function g_strup(string_: Pgchar): Pgchar; cdecl; external; function g_strv_get_type: TGType; cdecl; external; function g_strv_length(str_array: PPgchar): guint; cdecl; external; function g_test_create_case(test_name: Pgchar; data_size: gsize; test_data: Pgpointer; data_setup: TGTestFixtureFunc; data_test: TGTestFixtureFunc; data_teardown: TGTestFixtureFunc): PGTestCase; cdecl; external; function g_test_create_suite(suite_name: Pgchar): PGTestSuite; cdecl; external; function g_test_get_root: PGTestSuite; cdecl; external; function g_test_log_buffer_new: PGTestLogBuffer; cdecl; external; function g_test_log_buffer_pop(tbuffer: PGTestLogBuffer): PGTestLogMsg; cdecl; external; function g_test_log_type_name(log_type: TGTestLogType): Pgchar; cdecl; external; function g_test_rand_double: gdouble; cdecl; external; function g_test_rand_double_range(range_start: gdouble; range_end: gdouble): gdouble; cdecl; external; function g_test_rand_int: gint32; cdecl; external; function g_test_rand_int_range(begin_: gint32; end_: gint32): gint32; cdecl; external; function g_test_run: gint; cdecl; external; function g_test_run_suite(suite: PGTestSuite): gint; cdecl; external; function g_test_timer_elapsed: gdouble; cdecl; external; function g_test_timer_last: gdouble; cdecl; external; function g_test_trap_fork(usec_timeout: guint64; test_trap_flags: TGTestTrapFlags): gboolean; cdecl; external; function g_test_trap_has_passed: gboolean; cdecl; external; function g_test_trap_reached_timeout: gboolean; cdecl; external; function g_thread_error_quark: TGQuark; cdecl; external; function g_thread_get_type: TGType; cdecl; external; function g_thread_join(thread: PGThread): gpointer; cdecl; external; function g_thread_new(name: Pgchar; func: TGThreadFunc; data: gpointer): PGThread; cdecl; external; function g_thread_pool_get_max_idle_time: guint; cdecl; external; function g_thread_pool_get_max_threads(pool: PGThreadPool): gint; cdecl; external; function g_thread_pool_get_max_unused_threads: gint; cdecl; external; function g_thread_pool_get_num_threads(pool: PGThreadPool): guint; cdecl; external; function g_thread_pool_get_num_unused_threads: guint; cdecl; external; function g_thread_pool_new(func: TGFunc; user_data: gpointer; max_threads: gint; exclusive: gboolean; error: PPGError): PGThreadPool; cdecl; external; function g_thread_pool_push(pool: PGThreadPool; data: gpointer; error: PPGError): gboolean; cdecl; external; function g_thread_pool_set_max_threads(pool: PGThreadPool; max_threads: gint; error: PPGError): gboolean; cdecl; external; function g_thread_pool_unprocessed(pool: PGThreadPool): guint; cdecl; external; function g_thread_ref(thread: PGThread): PGThread; cdecl; external; function g_thread_self: PGThread; cdecl; external; function g_thread_try_new(name: Pgchar; func: TGThreadFunc; data: gpointer; error: PPGError): PGThread; cdecl; external; function g_time_val_from_iso8601(iso_date: Pgchar; time_: PGTimeVal): gboolean; cdecl; external; function g_time_val_to_iso8601(time_: PGTimeVal): Pgchar; cdecl; external; function g_time_zone_adjust_time(tz: PGTimeZone; type_: TGTimeType; time_: Pgint64): gint; cdecl; external; function g_time_zone_find_interval(tz: PGTimeZone; type_: TGTimeType; time_: gint64): gint; cdecl; external; function g_time_zone_get_abbreviation(tz: PGTimeZone; interval: gint): Pgchar; cdecl; external; function g_time_zone_get_offset(tz: PGTimeZone; interval: gint): gint32; cdecl; external; function g_time_zone_get_type: TGType; cdecl; external; function g_time_zone_is_dst(tz: PGTimeZone; interval: gint): gboolean; cdecl; external; function g_time_zone_new(identifier: Pgchar): PGTimeZone; cdecl; external; function g_time_zone_new_local: PGTimeZone; cdecl; external; function g_time_zone_new_utc: PGTimeZone; cdecl; external; function g_time_zone_ref(tz: PGTimeZone): PGTimeZone; cdecl; external; function g_timeout_add(interval: guint; function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_timeout_add_full(priority: gint; interval: guint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_timeout_add_seconds(interval: guint; function_: TGSourceFunc; data: gpointer): guint; cdecl; external; function g_timeout_add_seconds_full(priority: gint; interval: guint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_timeout_source_new(interval: guint): PGSource; cdecl; external; function g_timeout_source_new_seconds(interval: guint): PGSource; cdecl; external; function g_timer_elapsed(timer: PGTimer; microseconds: Pgulong): gdouble; cdecl; external; function g_timer_new: PGTimer; cdecl; external; function g_trash_stack_height(stack_p: PPGTrashStack): guint; cdecl; external; function g_trash_stack_peek(stack_p: PPGTrashStack): gpointer; cdecl; external; function g_trash_stack_pop(stack_p: PPGTrashStack): gpointer; cdecl; external; function g_tree_height(tree: PGTree): gint; cdecl; external; function g_tree_lookup(tree: PGTree; key: Pgpointer): gpointer; cdecl; external; function g_tree_lookup_extended(tree: PGTree; lookup_key: Pgpointer; orig_key: Pgpointer; value: Pgpointer): gboolean; cdecl; external; function g_tree_new(key_compare_func: TGCompareFunc): PGTree; cdecl; external; function g_tree_new_full(key_compare_func: TGCompareDataFunc; key_compare_data: gpointer; key_destroy_func: TGDestroyNotify; value_destroy_func: TGDestroyNotify): PGTree; cdecl; external; function g_tree_new_with_data(key_compare_func: TGCompareDataFunc; key_compare_data: gpointer): PGTree; cdecl; external; function g_tree_nnodes(tree: PGTree): gint; cdecl; external; function g_tree_ref(tree: PGTree): PGTree; cdecl; external; function g_tree_remove(tree: PGTree; key: Pgpointer): gboolean; cdecl; external; function g_tree_search(tree: PGTree; search_func: TGCompareFunc; user_data: Pgpointer): gpointer; cdecl; external; function g_tree_steal(tree: PGTree; key: Pgpointer): gboolean; cdecl; external; function g_try_malloc(n_bytes: gsize): gpointer; cdecl; external; function g_try_malloc0(n_bytes: gsize): gpointer; cdecl; external; function g_try_malloc0_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_try_malloc_n(n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_try_realloc(mem: gpointer; n_bytes: gsize): gpointer; cdecl; external; function g_try_realloc_n(mem: gpointer; n_blocks: gsize; n_block_bytes: gsize): gpointer; cdecl; external; function g_ucs4_to_utf16(str: Pgunichar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pguint16; cdecl; external; function g_ucs4_to_utf8(str: Pgunichar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgchar; cdecl; external; function g_unichar_break_type(c: gunichar): TGUnicodeBreakType; cdecl; external; function g_unichar_combining_class(uc: gunichar): gint; cdecl; external; function g_unichar_compose(a: gunichar; b: gunichar; ch: Pgunichar): gboolean; cdecl; external; function g_unichar_decompose(ch: gunichar; a: Pgunichar; b: Pgunichar): gboolean; cdecl; external; function g_unichar_digit_value(c: gunichar): gint; cdecl; external; function g_unichar_fully_decompose(ch: gunichar; compat: gboolean; result_: Pgunichar; result_len: gsize): gsize; cdecl; external; function g_unichar_get_mirror_char(ch: gunichar; mirrored_ch: Pgunichar): gboolean; cdecl; external; function g_unichar_get_script(ch: gunichar): TGUnicodeScript; cdecl; external; function g_unichar_isalnum(c: gunichar): gboolean; cdecl; external; function g_unichar_isalpha(c: gunichar): gboolean; cdecl; external; function g_unichar_iscntrl(c: gunichar): gboolean; cdecl; external; function g_unichar_isdefined(c: gunichar): gboolean; cdecl; external; function g_unichar_isdigit(c: gunichar): gboolean; cdecl; external; function g_unichar_isgraph(c: gunichar): gboolean; cdecl; external; function g_unichar_islower(c: gunichar): gboolean; cdecl; external; function g_unichar_ismark(c: gunichar): gboolean; cdecl; external; function g_unichar_isprint(c: gunichar): gboolean; cdecl; external; function g_unichar_ispunct(c: gunichar): gboolean; cdecl; external; function g_unichar_isspace(c: gunichar): gboolean; cdecl; external; function g_unichar_istitle(c: gunichar): gboolean; cdecl; external; function g_unichar_isupper(c: gunichar): gboolean; cdecl; external; function g_unichar_iswide(c: gunichar): gboolean; cdecl; external; function g_unichar_iswide_cjk(c: gunichar): gboolean; cdecl; external; function g_unichar_isxdigit(c: gunichar): gboolean; cdecl; external; function g_unichar_iszerowidth(c: gunichar): gboolean; cdecl; external; function g_unichar_to_utf8(c: gunichar; outbuf: Pgchar): gint; cdecl; external; function g_unichar_tolower(c: gunichar): gunichar; cdecl; external; function g_unichar_totitle(c: gunichar): gunichar; cdecl; external; function g_unichar_toupper(c: gunichar): gunichar; cdecl; external; function g_unichar_type(c: gunichar): TGUnicodeType; cdecl; external; function g_unichar_validate(ch: gunichar): gboolean; cdecl; external; function g_unichar_xdigit_value(c: gunichar): gint; cdecl; external; function g_unicode_canonical_decomposition(ch: gunichar; result_len: Pgsize): Pgunichar; cdecl; external; function g_unicode_script_from_iso15924(iso15924: guint32): TGUnicodeScript; cdecl; external; function g_unicode_script_to_iso15924(script: TGUnicodeScript): guint32; cdecl; external; function g_unix_error_quark: TGQuark; cdecl; external; function g_unix_fd_add(fd: gint; condition: TGIOCondition; function_: TGUnixFDSourceFunc; user_data: gpointer): guint; cdecl; external; function g_unix_fd_add_full(priority: gint; fd: gint; condition: TGIOCondition; function_: TGUnixFDSourceFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_unix_fd_source_new(fd: gint; condition: TGIOCondition): PGSource; cdecl; external; function g_unix_open_pipe(fds: Pgint; flags: gint; error: PPGError): gboolean; cdecl; external; function g_unix_set_fd_nonblocking(fd: gint; nonblock: gboolean; error: PPGError): gboolean; cdecl; external; function g_unix_signal_add(signum: gint; handler: TGSourceFunc; user_data: gpointer): guint; cdecl; external; function g_unix_signal_add_full(priority: gint; signum: gint; handler: TGSourceFunc; user_data: gpointer; notify: TGDestroyNotify): guint; cdecl; external; function g_unix_signal_source_new(signum: gint): PGSource; cdecl; external; function g_unlink(filename: Pgchar): gint; cdecl; external; function g_uri_escape_string(unescaped: Pgchar; reserved_chars_allowed: Pgchar; allow_utf8: gboolean): Pgchar; cdecl; external; function g_uri_list_extract_uris(uri_list: Pgchar): PPgchar; cdecl; external; function g_uri_parse_scheme(uri: Pgchar): Pgchar; cdecl; external; function g_uri_unescape_segment(escaped_string: Pgchar; escaped_string_end: Pgchar; illegal_characters: Pgchar): Pgchar; cdecl; external; function g_uri_unescape_string(escaped_string: Pgchar; illegal_characters: Pgchar): Pgchar; cdecl; external; function g_utf16_to_ucs4(str: Pguint16; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgunichar; cdecl; external; function g_utf16_to_utf8(str: Pguint16; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgchar; cdecl; external; function g_utf8_casefold(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_collate(str1: Pgchar; str2: Pgchar): gint; cdecl; external; function g_utf8_collate_key(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_collate_key_for_filename(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_find_next_char(p: Pgchar; end_: Pgchar): Pgchar; cdecl; external; function g_utf8_find_prev_char(str: Pgchar; p: Pgchar): Pgchar; cdecl; external; function g_utf8_get_char(p: Pgchar): gunichar; cdecl; external; function g_utf8_get_char_validated(p: Pgchar; max_len: gssize): gunichar; cdecl; external; function g_utf8_normalize(str: Pgchar; len: gssize; mode: TGNormalizeMode): Pgchar; cdecl; external; function g_utf8_offset_to_pointer(str: Pgchar; offset: glong): Pgchar; cdecl; external; function g_utf8_pointer_to_offset(str: Pgchar; pos: Pgchar): glong; cdecl; external; function g_utf8_prev_char(p: Pgchar): Pgchar; cdecl; external; function g_utf8_strchr(p: Pgchar; len: gssize; c: gunichar): Pgchar; cdecl; external; function g_utf8_strdown(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_strlen(p: Pgchar; max: gssize): glong; cdecl; external; function g_utf8_strncpy(dest: Pgchar; src: Pgchar; n: gsize): Pgchar; cdecl; external; function g_utf8_strrchr(p: Pgchar; len: gssize; c: gunichar): Pgchar; cdecl; external; function g_utf8_strreverse(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_strup(str: Pgchar; len: gssize): Pgchar; cdecl; external; function g_utf8_substring(str: Pgchar; start_pos: glong; end_pos: glong): Pgchar; cdecl; external; function g_utf8_to_ucs4(str: Pgchar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pgunichar; cdecl; external; function g_utf8_to_ucs4_fast(str: Pgchar; len: glong; items_written: Pglong): Pgunichar; cdecl; external; function g_utf8_to_utf16(str: Pgchar; len: glong; items_read: Pglong; items_written: Pglong; error: PPGError): Pguint16; cdecl; external; function g_utf8_validate(str: Pgchar; max_len: gssize; end_: PPgchar): gboolean; cdecl; external; function g_variant_builder_end(builder: PGVariantBuilder): PGVariant; cdecl; external; function g_variant_builder_get_type: TGType; cdecl; external; function g_variant_builder_new(type_: PGVariantType): PGVariantBuilder; cdecl; external; function g_variant_builder_ref(builder: PGVariantBuilder): PGVariantBuilder; cdecl; external; function g_variant_byteswap(value: PGVariant): PGVariant; cdecl; external; function g_variant_check_format_string(value: PGVariant; format_string: Pgchar; copy_only: gboolean): gboolean; cdecl; external; function g_variant_classify(value: PGVariant): TGVariantClass; cdecl; external; function g_variant_compare(one: PGVariant; two: PGVariant): gint; cdecl; external; function g_variant_dup_bytestring(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_dup_bytestring_array(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_dup_objv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_dup_string(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_dup_strv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_equal(one: PGVariant; two: PGVariant): gboolean; cdecl; external; function g_variant_get_boolean(value: PGVariant): gboolean; cdecl; external; function g_variant_get_byte(value: PGVariant): guint8; cdecl; external; function g_variant_get_bytestring(value: PGVariant): Pgchar; cdecl; external; function g_variant_get_bytestring_array(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_child_value(value: PGVariant; index_: gsize): PGVariant; cdecl; external; function g_variant_get_data(value: PGVariant): Pgpointer; cdecl; external; function g_variant_get_data_as_bytes(value: PGVariant): PGBytes; cdecl; external; function g_variant_get_double(value: PGVariant): gdouble; cdecl; external; function g_variant_get_fixed_array(value: PGVariant; n_elements: Pgsize; element_size: gsize): gpointer; cdecl; external; function g_variant_get_gtype: TGType; cdecl; external; function g_variant_get_handle(value: PGVariant): gint32; cdecl; external; function g_variant_get_int16(value: PGVariant): gint16; cdecl; external; function g_variant_get_int32(value: PGVariant): gint32; cdecl; external; function g_variant_get_int64(value: PGVariant): gint64; cdecl; external; function g_variant_get_maybe(value: PGVariant): PGVariant; cdecl; external; function g_variant_get_normal_form(value: PGVariant): PGVariant; cdecl; external; function g_variant_get_objv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_size(value: PGVariant): gsize; cdecl; external; function g_variant_get_string(value: PGVariant; length: Pgsize): Pgchar; cdecl; external; function g_variant_get_strv(value: PGVariant; length: Pgsize): PPgchar; cdecl; external; function g_variant_get_type(value: PGVariant): PGVariantType; cdecl; external; function g_variant_get_type_string(value: PGVariant): Pgchar; cdecl; external; function g_variant_get_uint16(value: PGVariant): guint16; cdecl; external; function g_variant_get_uint32(value: PGVariant): guint32; cdecl; external; function g_variant_get_uint64(value: PGVariant): guint64; cdecl; external; function g_variant_get_variant(value: PGVariant): PGVariant; cdecl; external; function g_variant_hash(value: PGVariant): guint; cdecl; external; function g_variant_is_container(value: PGVariant): gboolean; cdecl; external; function g_variant_is_floating(value: PGVariant): gboolean; cdecl; external; function g_variant_is_normal_form(value: PGVariant): gboolean; cdecl; external; function g_variant_is_object_path(string_: Pgchar): gboolean; cdecl; external; function g_variant_is_of_type(value: PGVariant; type_: PGVariantType): gboolean; cdecl; external; function g_variant_is_signature(string_: Pgchar): gboolean; cdecl; external; function g_variant_iter_copy(iter: PGVariantIter): PGVariantIter; cdecl; external; function g_variant_iter_init(iter: PGVariantIter; value: PGVariant): gsize; cdecl; external; function g_variant_iter_loop(iter: PGVariantIter; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_iter_n_children(iter: PGVariantIter): gsize; cdecl; external; function g_variant_iter_new(value: PGVariant): PGVariantIter; cdecl; external; function g_variant_iter_next(iter: PGVariantIter; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_iter_next_value(iter: PGVariantIter): PGVariant; cdecl; external; function g_variant_lookup(dictionary: PGVariant; key: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; external; function g_variant_lookup_value(dictionary: PGVariant; key: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; external; function g_variant_n_children(value: PGVariant): gsize; cdecl; external; function g_variant_new(format_string: Pgchar; args: array of const): PGVariant; cdecl; external; function g_variant_new_array(child_type: PGVariantType; children: PPGVariant; n_children: gsize): PGVariant; cdecl; external; function g_variant_new_boolean(value: gboolean): PGVariant; cdecl; external; function g_variant_new_byte(value: guint8): PGVariant; cdecl; external; function g_variant_new_bytestring(string_: Pgchar): PGVariant; cdecl; external; function g_variant_new_bytestring_array(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_dict_entry(key: PGVariant; value: PGVariant): PGVariant; cdecl; external; function g_variant_new_double(value: gdouble): PGVariant; cdecl; external; function g_variant_new_fixed_array(element_type: PGVariantType; elements: Pgpointer; n_elements: gsize; element_size: gsize): PGVariant; cdecl; external; function g_variant_new_from_bytes(type_: PGVariantType; bytes: PGBytes; trusted: gboolean): PGVariant; cdecl; external; function g_variant_new_from_data(type_: PGVariantType; data: guint8; size: gsize; trusted: gboolean; notify: TGDestroyNotify; user_data: gpointer): PGVariant; cdecl; external; function g_variant_new_handle(value: gint32): PGVariant; cdecl; external; function g_variant_new_int16(value: gint16): PGVariant; cdecl; external; function g_variant_new_int32(value: gint32): PGVariant; cdecl; external; function g_variant_new_int64(value: gint64): PGVariant; cdecl; external; function g_variant_new_maybe(child_type: PGVariantType; child: PGVariant): PGVariant; cdecl; external; function g_variant_new_object_path(object_path: Pgchar): PGVariant; cdecl; external; function g_variant_new_objv(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_parsed(format: Pgchar; args: array of const): PGVariant; cdecl; external; function g_variant_new_parsed_va(format: Pgchar; app: Pva_list): PGVariant; cdecl; external; function g_variant_new_signature(signature: Pgchar): PGVariant; cdecl; external; function g_variant_new_string(string_: Pgchar): PGVariant; cdecl; external; function g_variant_new_strv(strv: PPgchar; length: gssize): PGVariant; cdecl; external; function g_variant_new_tuple(children: PPGVariant; n_children: gsize): PGVariant; cdecl; external; function g_variant_new_uint16(value: guint16): PGVariant; cdecl; external; function g_variant_new_uint32(value: guint32): PGVariant; cdecl; external; function g_variant_new_uint64(value: guint64): PGVariant; cdecl; external; function g_variant_new_va(format_string: Pgchar; endptr: PPgchar; app: Pva_list): PGVariant; cdecl; external; function g_variant_new_variant(value: PGVariant): PGVariant; cdecl; external; function g_variant_parse(type_: PGVariantType; text: Pgchar; limit: Pgchar; endptr: PPgchar; error: PPGError): PGVariant; cdecl; external; function g_variant_parser_get_error_quark: TGQuark; cdecl; external; function g_variant_print(value: PGVariant; type_annotate: gboolean): Pgchar; cdecl; external; function g_variant_print_string(value: PGVariant; string_: PGString; type_annotate: gboolean): PGString; cdecl; external; function g_variant_ref(value: PGVariant): PGVariant; cdecl; external; function g_variant_ref_sink(value: PGVariant): PGVariant; cdecl; external; function g_variant_take_ref(value: PGVariant): PGVariant; cdecl; external; function g_variant_type_checked_(arg0: Pgchar): PGVariantType; cdecl; external; function g_variant_type_copy(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_dup_string(type_: PGVariantType): Pgchar; cdecl; external; function g_variant_type_element(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_equal(type1: PGVariantType; type2: PGVariantType): gboolean; cdecl; external; function g_variant_type_first(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_get_gtype: TGType; cdecl; external; function g_variant_type_get_string_length(type_: PGVariantType): gsize; cdecl; external; function g_variant_type_hash(type_: PGVariantType): guint; cdecl; external; function g_variant_type_is_array(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_basic(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_container(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_definite(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_dict_entry(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_maybe(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_subtype_of(type_: PGVariantType; supertype: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_tuple(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_is_variant(type_: PGVariantType): gboolean; cdecl; external; function g_variant_type_key(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_n_items(type_: PGVariantType): gsize; cdecl; external; function g_variant_type_new(type_string: Pgchar): PGVariantType; cdecl; external; function g_variant_type_new_array(element: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_dict_entry(key: PGVariantType; value: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_maybe(element: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_new_tuple(items: PPGVariantType; length: gint): PGVariantType; cdecl; external; function g_variant_type_next(type_: PGVariantType): PGVariantType; cdecl; external; function g_variant_type_peek_string(type_: PGVariantType): Pgchar; cdecl; external; function g_variant_type_string_is_valid(type_string: Pgchar): gboolean; cdecl; external; function g_variant_type_string_scan(string_: Pgchar; limit: Pgchar; endptr: PPgchar): gboolean; cdecl; external; function g_variant_type_value(type_: PGVariantType): PGVariantType; cdecl; external; function g_vasprintf(string_: PPgchar; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vfprintf(file_: Pgpointer; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vprintf(format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vsnprintf(string_: Pgchar; n: gulong; format: Pgchar; args: Tva_list): gint; cdecl; external; function g_vsprintf(string_: Pgchar; format: Pgchar; args: Tva_list): gint; cdecl; external; function glib_check_version(required_major: guint; required_minor: guint; required_micro: guint): Pgchar; cdecl; external; procedure g_array_set_clear_func(array_: Pgpointer; clear_func: TGDestroyNotify); cdecl; external; procedure g_array_sort(array_: Pgpointer; compare_func: TGCompareFunc); cdecl; external; procedure g_array_sort_with_data(array_: Pgpointer; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_array_unref(array_: Pgpointer); cdecl; external; procedure g_assert_warning(log_domain: Pgchar; file_: Pgchar; line: gint; pretty_function: Pgchar; expression: Pgchar); cdecl; external; procedure g_assertion_message(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; message: Pgchar); cdecl; external; procedure g_assertion_message_cmpnum(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; arg1: long_double; cmp: Pgchar; arg2: long_double; numtype: gchar); cdecl; external; procedure g_assertion_message_cmpstr(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; arg1: Pgchar; cmp: Pgchar; arg2: Pgchar); cdecl; external; procedure g_assertion_message_error(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar; error: PGError; error_domain: TGQuark; error_code: gint); cdecl; external; procedure g_assertion_message_expr(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; expr: Pgchar); cdecl; external; procedure g_async_queue_lock(queue: PGAsyncQueue); cdecl; external; procedure g_async_queue_push(queue: PGAsyncQueue; data: gpointer); cdecl; external; procedure g_async_queue_push_sorted(queue: PGAsyncQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_push_sorted_unlocked(queue: PGAsyncQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_push_unlocked(queue: PGAsyncQueue; data: gpointer); cdecl; external; procedure g_async_queue_sort(queue: PGAsyncQueue; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_sort_unlocked(queue: PGAsyncQueue; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_async_queue_unlock(queue: PGAsyncQueue); cdecl; external; procedure g_async_queue_unref(queue: PGAsyncQueue); cdecl; external; procedure g_atexit(func: TGVoidFunc); cdecl; external; procedure g_atomic_int_inc(atomic: Pgint); cdecl; external; procedure g_atomic_int_set(atomic: Pgint; newval: gint); cdecl; external; procedure g_atomic_pointer_set(atomic: Pgpointer; newval: gpointer); cdecl; external; procedure g_bit_lock(address: Pgint; lock_bit: gint); cdecl; external; procedure g_bit_unlock(address: Pgint; lock_bit: gint); cdecl; external; procedure g_bookmark_file_add_application(bookmark: PGBookmarkFile; uri: Pgchar; name: Pgchar; exec: Pgchar); cdecl; external; procedure g_bookmark_file_add_group(bookmark: PGBookmarkFile; uri: Pgchar; group: Pgchar); cdecl; external; procedure g_bookmark_file_free(bookmark: PGBookmarkFile); cdecl; external; procedure g_bookmark_file_set_added(bookmark: PGBookmarkFile; uri: Pgchar; added: glong); cdecl; external; procedure g_bookmark_file_set_description(bookmark: PGBookmarkFile; uri: Pgchar; description: Pgchar); cdecl; external; procedure g_bookmark_file_set_groups(bookmark: PGBookmarkFile; uri: Pgchar; groups: PPgchar; length: gsize); cdecl; external; procedure g_bookmark_file_set_icon(bookmark: PGBookmarkFile; uri: Pgchar; href: Pgchar; mime_type: Pgchar); cdecl; external; procedure g_bookmark_file_set_is_private(bookmark: PGBookmarkFile; uri: Pgchar; is_private: gboolean); cdecl; external; procedure g_bookmark_file_set_mime_type(bookmark: PGBookmarkFile; uri: Pgchar; mime_type: Pgchar); cdecl; external; procedure g_bookmark_file_set_modified(bookmark: PGBookmarkFile; uri: Pgchar; modified: glong); cdecl; external; procedure g_bookmark_file_set_title(bookmark: PGBookmarkFile; uri: Pgchar; title: Pgchar); cdecl; external; procedure g_bookmark_file_set_visited(bookmark: PGBookmarkFile; uri: Pgchar; visited: glong); cdecl; external; procedure g_byte_array_sort(array_: Pguint8; compare_func: TGCompareFunc); cdecl; external; procedure g_byte_array_sort_with_data(array_: Pguint8; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_byte_array_unref(array_: Pguint8); cdecl; external; procedure g_bytes_unref(bytes: PGBytes); cdecl; external; procedure g_checksum_free(checksum: PGChecksum); cdecl; external; procedure g_checksum_get_digest(checksum: PGChecksum; buffer: Pguint8; digest_len: Pgsize); cdecl; external; procedure g_checksum_reset(checksum: PGChecksum); cdecl; external; procedure g_checksum_update(checksum: PGChecksum; data: Pguint8; length: gssize); cdecl; external; procedure g_clear_error; cdecl; external; procedure g_clear_pointer(pp: Pgpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_cond_broadcast(cond: PGCond); cdecl; external; procedure g_cond_clear(cond: PGCond); cdecl; external; procedure g_cond_init(cond: PGCond); cdecl; external; procedure g_cond_signal(cond: PGCond); cdecl; external; procedure g_cond_wait(cond: PGCond; mutex: PGMutex); cdecl; external; procedure g_datalist_clear(datalist: PPGData); cdecl; external; procedure g_datalist_foreach(datalist: PPGData; func: TGDataForeachFunc; user_data: gpointer); cdecl; external; procedure g_datalist_id_set_data_full(datalist: PPGData; key_id: TGQuark; data: gpointer; destroy_func: TGDestroyNotify); cdecl; external; procedure g_datalist_init(datalist: PPGData); cdecl; external; procedure g_datalist_set_flags(datalist: PPGData; flags: guint); cdecl; external; procedure g_datalist_unset_flags(datalist: PPGData; flags: guint); cdecl; external; procedure g_dataset_destroy(dataset_location: Pgpointer); cdecl; external; procedure g_dataset_foreach(dataset_location: Pgpointer; func: TGDataForeachFunc; user_data: gpointer); cdecl; external; procedure g_dataset_id_set_data_full(dataset_location: Pgpointer; key_id: TGQuark; data: gpointer; destroy_func: TGDestroyNotify); cdecl; external; procedure g_date_add_days(date: PGDate; n_days: guint); cdecl; external; procedure g_date_add_months(date: PGDate; n_months: guint); cdecl; external; procedure g_date_add_years(date: PGDate; n_years: guint); cdecl; external; procedure g_date_clamp(date: PGDate; min_date: PGDate; max_date: PGDate); cdecl; external; procedure g_date_clear(date: PGDate; n_dates: guint); cdecl; external; procedure g_date_free(date: PGDate); cdecl; external; procedure g_date_order(date1: PGDate; date2: PGDate); cdecl; external; procedure g_date_set_day(date: PGDate; day: TGDateDay); cdecl; external; procedure g_date_set_dmy(date: PGDate; day: TGDateDay; month: TGDateMonth; y: TGDateYear); cdecl; external; procedure g_date_set_julian(date: PGDate; julian_date: guint32); cdecl; external; procedure g_date_set_month(date: PGDate; month: TGDateMonth); cdecl; external; procedure g_date_set_parse(date: PGDate; str: Pgchar); cdecl; external; procedure g_date_set_time_t(date: PGDate; timet: glong); cdecl; external; procedure g_date_set_time_val(date: PGDate; timeval: PGTimeVal); cdecl; external; procedure g_date_set_year(date: PGDate; year: TGDateYear); cdecl; external; procedure g_date_subtract_days(date: PGDate; n_days: guint); cdecl; external; procedure g_date_subtract_months(date: PGDate; n_months: guint); cdecl; external; procedure g_date_subtract_years(date: PGDate; n_years: guint); cdecl; external; procedure g_date_time_get_ymd(datetime: PGDateTime; year: Pgint; month: Pgint; day: Pgint); cdecl; external; procedure g_date_time_unref(datetime: PGDateTime); cdecl; external; procedure g_date_to_struct_tm(date: PGDate; tm: Pgpointer); cdecl; external; procedure g_dir_close(dir: PGDir); cdecl; external; procedure g_dir_rewind(dir: PGDir); cdecl; external; procedure g_error_free(error: PGError); cdecl; external; procedure g_free(mem: gpointer); cdecl; external; procedure g_get_current_time(result_: PGTimeVal); cdecl; external; procedure g_hash_table_add(hash_table: PGHashTable; key: gpointer); cdecl; external; procedure g_hash_table_destroy(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_foreach(hash_table: PGHashTable; func: TGHFunc; user_data: gpointer); cdecl; external; procedure g_hash_table_insert(hash_table: PGHashTable; key: gpointer; value: gpointer); cdecl; external; procedure g_hash_table_iter_init(iter: PGHashTableIter; hash_table: PGHashTable); cdecl; external; procedure g_hash_table_iter_remove(iter: PGHashTableIter); cdecl; external; procedure g_hash_table_iter_replace(iter: PGHashTableIter; value: gpointer); cdecl; external; procedure g_hash_table_iter_steal(iter: PGHashTableIter); cdecl; external; procedure g_hash_table_remove_all(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_replace(hash_table: PGHashTable; key: gpointer; value: gpointer); cdecl; external; procedure g_hash_table_steal_all(hash_table: PGHashTable); cdecl; external; procedure g_hash_table_unref(hash_table: PGHashTable); cdecl; external; procedure g_hmac_get_digest(hmac: PGHmac; buffer: Pguint8; digest_len: Pgsize); cdecl; external; procedure g_hmac_unref(hmac: PGHmac); cdecl; external; procedure g_hmac_update(hmac: PGHmac; data: Pguint8; length: gssize); cdecl; external; procedure g_hook_destroy_link(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_free(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_insert_before(hook_list: PGHookList; sibling: PGHook; hook: PGHook); cdecl; external; procedure g_hook_insert_sorted(hook_list: PGHookList; hook: PGHook; func: TGHookCompareFunc); cdecl; external; procedure g_hook_list_clear(hook_list: PGHookList); cdecl; external; procedure g_hook_list_init(hook_list: PGHookList; hook_size: guint); cdecl; external; procedure g_hook_list_invoke(hook_list: PGHookList; may_recurse: gboolean); cdecl; external; procedure g_hook_list_invoke_check(hook_list: PGHookList; may_recurse: gboolean); cdecl; external; procedure g_hook_list_marshal(hook_list: PGHookList; may_recurse: gboolean; marshaller: TGHookMarshaller; marshal_data: gpointer); cdecl; external; procedure g_hook_list_marshal_check(hook_list: PGHookList; may_recurse: gboolean; marshaller: TGHookCheckMarshaller; marshal_data: gpointer); cdecl; external; procedure g_hook_prepend(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_hook_unref(hook_list: PGHookList; hook: PGHook); cdecl; external; procedure g_io_channel_init(channel: PGIOChannel); cdecl; external; procedure g_io_channel_set_buffer_size(channel: PGIOChannel; size: gsize); cdecl; external; procedure g_io_channel_set_buffered(channel: PGIOChannel; buffered: gboolean); cdecl; external; procedure g_io_channel_set_close_on_unref(channel: PGIOChannel; do_close: gboolean); cdecl; external; procedure g_io_channel_set_line_term(channel: PGIOChannel; line_term: Pgchar; length: gint); cdecl; external; procedure g_io_channel_unref(channel: PGIOChannel); cdecl; external; procedure g_key_file_free(key_file: PGKeyFile); cdecl; external; procedure g_key_file_set_boolean(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gboolean); cdecl; external; procedure g_key_file_set_boolean_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gboolean; length: gsize); cdecl; external; procedure g_key_file_set_double(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gdouble); cdecl; external; procedure g_key_file_set_double_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gdouble; length: gsize); cdecl; external; procedure g_key_file_set_int64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gint64); cdecl; external; procedure g_key_file_set_integer(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: gint); cdecl; external; procedure g_key_file_set_integer_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: gint; length: gsize); cdecl; external; procedure g_key_file_set_list_separator(key_file: PGKeyFile; separator: gchar); cdecl; external; procedure g_key_file_set_locale_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; string_: Pgchar); cdecl; external; procedure g_key_file_set_locale_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; locale: Pgchar; list: Pgchar; length: gsize); cdecl; external; procedure g_key_file_set_string(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; string_: Pgchar); cdecl; external; procedure g_key_file_set_string_list(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; list: Pgchar; length: gsize); cdecl; external; procedure g_key_file_set_uint64(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: guint64); cdecl; external; procedure g_key_file_set_value(key_file: PGKeyFile; group_name: Pgchar; key: Pgchar; value: Pgchar); cdecl; external; procedure g_key_file_unref(key_file: PGKeyFile); cdecl; external; procedure g_list_foreach(list: PGList; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_list_free(list: PGList); cdecl; external; procedure g_list_free_1(list: PGList); cdecl; external; procedure g_list_free_full(list: PGList; free_func: TGDestroyNotify); cdecl; external; procedure g_log(log_domain: Pgchar; log_level: TGLogLevelFlags; format: Pgchar; args: array of const); cdecl; external; procedure g_log_default_handler(log_domain: Pgchar; log_level: TGLogLevelFlags; message: Pgchar; unused_data: gpointer); cdecl; external; procedure g_log_remove_handler(log_domain: Pgchar; handler_id: guint); cdecl; external; procedure g_logv(log_domain: Pgchar; log_level: TGLogLevelFlags; format: Pgchar; args: Tva_list); cdecl; external; procedure g_main_context_add_poll(context: PGMainContext; fd: PGPollFD; priority: gint); cdecl; external; procedure g_main_context_dispatch(context: PGMainContext); cdecl; external; procedure g_main_context_invoke(context: PGMainContext; function_: TGSourceFunc; data: gpointer); cdecl; external; procedure g_main_context_invoke_full(context: PGMainContext; priority: gint; function_: TGSourceFunc; data: gpointer; notify: TGDestroyNotify); cdecl; external; procedure g_main_context_pop_thread_default(context: PGMainContext); cdecl; external; procedure g_main_context_push_thread_default(context: PGMainContext); cdecl; external; procedure g_main_context_release(context: PGMainContext); cdecl; external; procedure g_main_context_remove_poll(context: PGMainContext; fd: PGPollFD); cdecl; external; procedure g_main_context_set_poll_func(context: PGMainContext; func: TGPollFunc); cdecl; external; procedure g_main_context_unref(context: PGMainContext); cdecl; external; procedure g_main_context_wakeup(context: PGMainContext); cdecl; external; procedure g_main_loop_quit(loop: PGMainLoop); cdecl; external; procedure g_main_loop_run(loop: PGMainLoop); cdecl; external; procedure g_main_loop_unref(loop: PGMainLoop); cdecl; external; procedure g_mapped_file_unref(file_: PGMappedFile); cdecl; external; procedure g_markup_parse_context_free(context: PGMarkupParseContext); cdecl; external; procedure g_markup_parse_context_get_position(context: PGMarkupParseContext; line_number: Pgint; char_number: Pgint); cdecl; external; procedure g_markup_parse_context_push(context: PGMarkupParseContext; parser: PGMarkupParser; user_data: gpointer); cdecl; external; procedure g_markup_parse_context_unref(context: PGMarkupParseContext); cdecl; external; procedure g_match_info_free(match_info: PGMatchInfo); cdecl; external; procedure g_match_info_unref(match_info: PGMatchInfo); cdecl; external; procedure g_mem_profile; cdecl; external; procedure g_mem_set_vtable(vtable: PGMemVTable); cdecl; external; procedure g_mutex_clear(mutex: PGMutex); cdecl; external; procedure g_mutex_init(mutex: PGMutex); cdecl; external; procedure g_mutex_lock(mutex: PGMutex); cdecl; external; procedure g_mutex_unlock(mutex: PGMutex); cdecl; external; procedure g_node_children_foreach(node: PGNode; flags: TGTraverseFlags; func: TGNodeForeachFunc; data: gpointer); cdecl; external; procedure g_node_destroy(root: PGNode); cdecl; external; procedure g_node_reverse_children(node: PGNode); cdecl; external; procedure g_node_traverse(root: PGNode; order: TGTraverseType; flags: TGTraverseFlags; max_depth: gint; func: TGNodeTraverseFunc; data: gpointer); cdecl; external; procedure g_node_unlink(node: PGNode); cdecl; external; procedure g_nullify_pointer(nullify_location: Pgpointer); cdecl; external; procedure g_on_error_query(prg_name: Pgchar); cdecl; external; procedure g_on_error_stack_trace(prg_name: Pgchar); cdecl; external; procedure g_once_init_leave(location: Pgpointer; result_: gsize); cdecl; external; procedure g_option_context_add_group(context: PGOptionContext; group: PGOptionGroup); cdecl; external; procedure g_option_context_add_main_entries(context: PGOptionContext; entries: PGOptionEntry; translation_domain: Pgchar); cdecl; external; procedure g_option_context_free(context: PGOptionContext); cdecl; external; procedure g_option_context_set_description(context: PGOptionContext; description: Pgchar); cdecl; external; procedure g_option_context_set_help_enabled(context: PGOptionContext; help_enabled: gboolean); cdecl; external; procedure g_option_context_set_ignore_unknown_options(context: PGOptionContext; ignore_unknown: gboolean); cdecl; external; procedure g_option_context_set_main_group(context: PGOptionContext; group: PGOptionGroup); cdecl; external; procedure g_option_context_set_summary(context: PGOptionContext; summary: Pgchar); cdecl; external; procedure g_option_context_set_translate_func(context: PGOptionContext; func: TGTranslateFunc; data: gpointer; destroy_notify: TGDestroyNotify); cdecl; external; procedure g_option_context_set_translation_domain(context: PGOptionContext; domain: Pgchar); cdecl; external; procedure g_option_group_add_entries(group: PGOptionGroup; entries: PGOptionEntry); cdecl; external; procedure g_option_group_free(group: PGOptionGroup); cdecl; external; procedure g_option_group_set_error_hook(group: PGOptionGroup; error_func: TGOptionErrorFunc); cdecl; external; procedure g_option_group_set_parse_hooks(group: PGOptionGroup; pre_parse_func: TGOptionParseFunc; post_parse_func: TGOptionParseFunc); cdecl; external; procedure g_option_group_set_translate_func(group: PGOptionGroup; func: TGTranslateFunc; data: gpointer; destroy_notify: TGDestroyNotify); cdecl; external; procedure g_option_group_set_translation_domain(group: PGOptionGroup; domain: Pgchar); cdecl; external; procedure g_pattern_spec_free(pspec: PGPatternSpec); cdecl; external; procedure g_pointer_bit_lock(address: Pgpointer; lock_bit: gint); cdecl; external; procedure g_pointer_bit_unlock(address: Pgpointer; lock_bit: gint); cdecl; external; procedure g_prefix_error(err: PPGError; format: Pgchar; args: array of const); cdecl; external; procedure g_print(format: Pgchar; args: array of const); cdecl; external; procedure g_printerr(format: Pgchar; args: array of const); cdecl; external; procedure g_private_replace(key: PGPrivate; value: gpointer); cdecl; external; procedure g_private_set(key: PGPrivate; value: gpointer); cdecl; external; procedure g_propagate_error(dest: PPGError; src: PGError); cdecl; external; procedure g_propagate_prefixed_error(dest: PPGError; src: PGError; format: Pgchar; args: array of const); cdecl; external; procedure g_ptr_array_add(array_: Pgpointer; data: gpointer); cdecl; external; procedure g_ptr_array_foreach(array_: Pgpointer; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_ptr_array_remove_range(array_: Pgpointer; index_: guint; length: guint); cdecl; external; procedure g_ptr_array_set_free_func(array_: Pgpointer; element_free_func: TGDestroyNotify); cdecl; external; procedure g_ptr_array_set_size(array_: Pgpointer; length: gint); cdecl; external; procedure g_ptr_array_sort(array_: Pgpointer; compare_func: TGCompareFunc); cdecl; external; procedure g_ptr_array_sort_with_data(array_: Pgpointer; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_ptr_array_unref(array_: Pgpointer); cdecl; external; procedure g_qsort_with_data(pbase: Pgpointer; total_elems: gint; size: gsize; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_clear(queue: PGQueue); cdecl; external; procedure g_queue_delete_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_foreach(queue: PGQueue; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_queue_free(queue: PGQueue); cdecl; external; procedure g_queue_free_full(queue: PGQueue; free_func: TGDestroyNotify); cdecl; external; procedure g_queue_init(queue: PGQueue); cdecl; external; procedure g_queue_insert_after(queue: PGQueue; sibling: PGList; data: gpointer); cdecl; external; procedure g_queue_insert_before(queue: PGQueue; sibling: PGList; data: gpointer); cdecl; external; procedure g_queue_insert_sorted(queue: PGQueue; data: gpointer; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_push_head(queue: PGQueue; data: gpointer); cdecl; external; procedure g_queue_push_head_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_push_nth(queue: PGQueue; data: gpointer; n: gint); cdecl; external; procedure g_queue_push_nth_link(queue: PGQueue; n: gint; link_: PGList); cdecl; external; procedure g_queue_push_tail(queue: PGQueue; data: gpointer); cdecl; external; procedure g_queue_push_tail_link(queue: PGQueue; link_: PGList); cdecl; external; procedure g_queue_reverse(queue: PGQueue); cdecl; external; procedure g_queue_sort(queue: PGQueue; compare_func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_queue_unlink(queue: PGQueue; link_: PGList); cdecl; external; procedure g_rand_free(rand_: PGRand); cdecl; external; procedure g_rand_set_seed(rand_: PGRand; seed: guint32); cdecl; external; procedure g_rand_set_seed_array(rand_: PGRand; seed: Pguint32; seed_length: guint); cdecl; external; procedure g_random_set_seed(seed: guint32); cdecl; external; procedure g_rec_mutex_clear(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_init(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_lock(rec_mutex: PGRecMutex); cdecl; external; procedure g_rec_mutex_unlock(rec_mutex: PGRecMutex); cdecl; external; procedure g_regex_unref(regex: PGRegex); cdecl; external; procedure g_reload_user_special_dirs_cache; cdecl; external; procedure g_return_if_fail_warning(log_domain: Pgchar; pretty_function: Pgchar; expression: Pgchar); cdecl; external; procedure g_rw_lock_clear(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_init(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_reader_lock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_reader_unlock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_writer_lock(rw_lock: PGRWLock); cdecl; external; procedure g_rw_lock_writer_unlock(rw_lock: PGRWLock); cdecl; external; procedure g_scanner_destroy(scanner: PGScanner); cdecl; external; procedure g_scanner_error(scanner: PGScanner; format: Pgchar; args: array of const); cdecl; external; procedure g_scanner_input_file(scanner: PGScanner; input_fd: gint); cdecl; external; procedure g_scanner_input_text(scanner: PGScanner; text: Pgchar; text_len: guint); cdecl; external; procedure g_scanner_scope_add_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar; value: gpointer); cdecl; external; procedure g_scanner_scope_foreach_symbol(scanner: PGScanner; scope_id: guint; func: TGHFunc; user_data: gpointer); cdecl; external; procedure g_scanner_scope_remove_symbol(scanner: PGScanner; scope_id: guint; symbol: Pgchar); cdecl; external; procedure g_scanner_sync_file_offset(scanner: PGScanner); cdecl; external; procedure g_scanner_unexp_token(scanner: PGScanner; expected_token: TGTokenType; identifier_spec: Pgchar; symbol_spec: Pgchar; symbol_name: Pgchar; message: Pgchar; is_error: gint); cdecl; external; procedure g_scanner_warn(scanner: PGScanner; format: Pgchar; args: array of const); cdecl; external; procedure g_sequence_foreach(seq: PGSequence; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_sequence_foreach_range(begin_: PGSequenceIter; end_: PGSequenceIter; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_sequence_free(seq: PGSequence); cdecl; external; procedure g_sequence_move(src: PGSequenceIter; dest: PGSequenceIter); cdecl; external; procedure g_sequence_move_range(dest: PGSequenceIter; begin_: PGSequenceIter; end_: PGSequenceIter); cdecl; external; procedure g_sequence_remove(iter: PGSequenceIter); cdecl; external; procedure g_sequence_remove_range(begin_: PGSequenceIter; end_: PGSequenceIter); cdecl; external; procedure g_sequence_set(iter: PGSequenceIter; data: gpointer); cdecl; external; procedure g_sequence_sort(seq: PGSequence; cmp_func: TGCompareDataFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_changed(iter: PGSequenceIter; cmp_func: TGCompareDataFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_changed_iter(iter: PGSequenceIter; iter_cmp: TGSequenceIterCompareFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_sort_iter(seq: PGSequence; cmp_func: TGSequenceIterCompareFunc; cmp_data: gpointer); cdecl; external; procedure g_sequence_swap(a: PGSequenceIter; b: PGSequenceIter); cdecl; external; procedure g_set_application_name(application_name: Pgchar); cdecl; external; procedure g_set_error(err: PPGError; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; external; procedure g_set_error_literal(err: PPGError; domain: TGQuark; code: gint; message: Pgchar); cdecl; external; procedure g_set_prgname(prgname: Pgchar); cdecl; external; procedure g_slice_free1(block_size: gsize; mem_block: gpointer); cdecl; external; procedure g_slice_free_chain_with_offset(block_size: gsize; mem_chain: gpointer; next_offset: gsize); cdecl; external; procedure g_slice_set_config(ckey: TGSliceConfig; value: gint64); cdecl; external; procedure g_slist_foreach(list: PGSList; func: TGFunc; user_data: gpointer); cdecl; external; procedure g_slist_free(list: PGSList); cdecl; external; procedure g_slist_free_1(list: PGSList); cdecl; external; procedure g_slist_free_full(list: PGSList; free_func: TGDestroyNotify); cdecl; external; procedure g_source_add_child_source(source: PGSource; child_source: PGSource); cdecl; external; procedure g_source_add_poll(source: PGSource; fd: PGPollFD); cdecl; external; procedure g_source_destroy(source: PGSource); cdecl; external; procedure g_source_modify_unix_fd(source: PGSource; tag: gpointer; new_events: TGIOCondition); cdecl; external; procedure g_source_remove_child_source(source: PGSource; child_source: PGSource); cdecl; external; procedure g_source_remove_poll(source: PGSource; fd: PGPollFD); cdecl; external; procedure g_source_remove_unix_fd(source: PGSource; tag: gpointer); cdecl; external; procedure g_source_set_callback(source: PGSource; func: TGSourceFunc; data: gpointer; notify: TGDestroyNotify); cdecl; external; procedure g_source_set_callback_indirect(source: PGSource; callback_data: gpointer; callback_funcs: PGSourceCallbackFuncs); cdecl; external; procedure g_source_set_can_recurse(source: PGSource; can_recurse: gboolean); cdecl; external; procedure g_source_set_funcs(source: PGSource; funcs: PGSourceFuncs); cdecl; external; procedure g_source_set_name(source: PGSource; name: Pgchar); cdecl; external; procedure g_source_set_name_by_id(tag: guint; name: Pgchar); cdecl; external; procedure g_source_set_priority(source: PGSource; priority: gint); cdecl; external; procedure g_source_set_ready_time(source: PGSource; ready_time: gint64); cdecl; external; procedure g_source_unref(source: PGSource); cdecl; external; procedure g_spawn_close_pid(pid: TGPid); cdecl; external; procedure g_strfreev(str_array: PPgchar); cdecl; external; procedure g_string_append_printf(string_: PGString; format: Pgchar; args: array of const); cdecl; external; procedure g_string_append_vprintf(string_: PGString; format: Pgchar; args: Tva_list); cdecl; external; procedure g_string_chunk_clear(chunk: PGStringChunk); cdecl; external; procedure g_string_chunk_free(chunk: PGStringChunk); cdecl; external; procedure g_string_printf(string_: PGString; format: Pgchar; args: array of const); cdecl; external; procedure g_string_vprintf(string_: PGString; format: Pgchar; args: Tva_list); cdecl; external; procedure g_test_add_data_func(testpath: Pgchar; test_data: Pgpointer; test_func: TGTestDataFunc); cdecl; external; procedure g_test_add_data_func_full(testpath: Pgchar; test_data: gpointer; test_func: TGTestDataFunc; data_free_func: TGDestroyNotify); cdecl; external; procedure g_test_add_func(testpath: Pgchar; test_func: TGTestFunc); cdecl; external; procedure g_test_add_vtable(testpath: Pgchar; data_size: gsize; test_data: Pgpointer; data_setup: TGTestFixtureFunc; data_test: TGTestFixtureFunc; data_teardown: TGTestFixtureFunc); cdecl; external; procedure g_test_assert_expected_messages_internal(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar); cdecl; external; procedure g_test_bug(bug_uri_snippet: Pgchar); cdecl; external; procedure g_test_bug_base(uri_pattern: Pgchar); cdecl; external; procedure g_test_expect_message(log_domain: Pgchar; log_level: TGLogLevelFlags; pattern: Pgchar); cdecl; external; procedure g_test_fail; cdecl; external; procedure g_test_init(argc: Pgint; argv: PPPgchar; args: array of const); cdecl; external; procedure g_test_log_buffer_free(tbuffer: PGTestLogBuffer); cdecl; external; procedure g_test_log_buffer_push(tbuffer: PGTestLogBuffer; n_bytes: guint; bytes: Pguint8); cdecl; external; procedure g_test_log_msg_free(tmsg: PGTestLogMsg); cdecl; external; procedure g_test_log_set_fatal_handler(log_func: TGTestLogFatalFunc; user_data: gpointer); cdecl; external; procedure g_test_maximized_result(maximized_quantity: gdouble; format: Pgchar; args: array of const); cdecl; external; procedure g_test_message(format: Pgchar; args: array of const); cdecl; external; procedure g_test_minimized_result(minimized_quantity: gdouble; format: Pgchar; args: array of const); cdecl; external; procedure g_test_queue_destroy(destroy_func: TGDestroyNotify; destroy_data: gpointer); cdecl; external; procedure g_test_queue_free(gfree_pointer: gpointer); cdecl; external; procedure g_test_suite_add(suite: PGTestSuite; test_case: PGTestCase); cdecl; external; procedure g_test_suite_add_suite(suite: PGTestSuite; nestedsuite: PGTestSuite); cdecl; external; procedure g_test_timer_start; cdecl; external; procedure g_test_trap_assertions(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; assertion_flags: guint64; pattern: Pgchar); cdecl; external; procedure g_thread_exit(retval: gpointer); cdecl; external; procedure g_thread_pool_free(pool: PGThreadPool; immediate: gboolean; wait_: gboolean); cdecl; external; procedure g_thread_pool_set_max_idle_time(interval: guint); cdecl; external; procedure g_thread_pool_set_max_unused_threads(max_threads: gint); cdecl; external; procedure g_thread_pool_set_sort_function(pool: PGThreadPool; func: TGCompareDataFunc; user_data: gpointer); cdecl; external; procedure g_thread_pool_stop_unused_threads; cdecl; external; procedure g_thread_unref(thread: PGThread); cdecl; external; procedure g_thread_yield; cdecl; external; procedure g_time_val_add(time_: PGTimeVal; microseconds: glong); cdecl; external; procedure g_time_zone_unref(tz: PGTimeZone); cdecl; external; procedure g_timer_continue(timer: PGTimer); cdecl; external; procedure g_timer_destroy(timer: PGTimer); cdecl; external; procedure g_timer_reset(timer: PGTimer); cdecl; external; procedure g_timer_start(timer: PGTimer); cdecl; external; procedure g_timer_stop(timer: PGTimer); cdecl; external; procedure g_trash_stack_push(stack_p: PPGTrashStack; data_p: gpointer); cdecl; external; procedure g_tree_destroy(tree: PGTree); cdecl; external; procedure g_tree_foreach(tree: PGTree; func: TGTraverseFunc; user_data: gpointer); cdecl; external; procedure g_tree_insert(tree: PGTree; key: gpointer; value: gpointer); cdecl; external; procedure g_tree_replace(tree: PGTree; key: gpointer; value: gpointer); cdecl; external; procedure g_tree_unref(tree: PGTree); cdecl; external; procedure g_unicode_canonical_ordering(string_: Pgunichar; len: gsize); cdecl; external; procedure g_unsetenv(variable: Pgchar); cdecl; external; procedure g_usleep(microseconds: gulong); cdecl; external; procedure g_variant_builder_add(builder: PGVariantBuilder; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_builder_add_parsed(builder: PGVariantBuilder; format: Pgchar; args: array of const); cdecl; external; procedure g_variant_builder_add_value(builder: PGVariantBuilder; value: PGVariant); cdecl; external; procedure g_variant_builder_clear(builder: PGVariantBuilder); cdecl; external; procedure g_variant_builder_close(builder: PGVariantBuilder); cdecl; external; procedure g_variant_builder_init(builder: PGVariantBuilder; type_: PGVariantType); cdecl; external; procedure g_variant_builder_open(builder: PGVariantBuilder; type_: PGVariantType); cdecl; external; procedure g_variant_builder_unref(builder: PGVariantBuilder); cdecl; external; procedure g_variant_get(value: PGVariant; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_get_child(value: PGVariant; index_: gsize; format_string: Pgchar; args: array of const); cdecl; external; procedure g_variant_get_va(value: PGVariant; format_string: Pgchar; endptr: PPgchar; app: Pva_list); cdecl; external; procedure g_variant_iter_free(iter: PGVariantIter); cdecl; external; procedure g_variant_store(value: PGVariant; data: gpointer); cdecl; external; procedure g_variant_type_free(type_: PGVariantType); cdecl; external; procedure g_variant_unref(value: PGVariant); cdecl; external; procedure g_warn_message(domain: Pgchar; file_: Pgchar; line: gint; func: Pgchar; warnexpr: Pgchar); cdecl; external; implementation end.�������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/glib/ugio2.pas����������������������������������������������������0000644�0001750�0000144�00002022142�12302344514�020563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGio2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} interface uses CTypes, uGObject2, uGLib2; const DESKTOP_APP_INFO_LOOKUP_EXTENSION_POINT_NAME = 'gio-desktop-app-info-lookup'; FILE_ATTRIBUTE_ACCESS_CAN_DELETE = 'access::can-delete'; FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE = 'access::can-execute'; FILE_ATTRIBUTE_ACCESS_CAN_READ = 'access::can-read'; FILE_ATTRIBUTE_ACCESS_CAN_RENAME = 'access::can-rename'; FILE_ATTRIBUTE_ACCESS_CAN_TRASH = 'access::can-trash'; FILE_ATTRIBUTE_ACCESS_CAN_WRITE = 'access::can-write'; FILE_ATTRIBUTE_DOS_IS_ARCHIVE = 'dos::is-archive'; FILE_ATTRIBUTE_DOS_IS_SYSTEM = 'dos::is-system'; FILE_ATTRIBUTE_ETAG_VALUE = 'etag::value'; FILE_ATTRIBUTE_FILESYSTEM_FREE = 'filesystem::free'; FILE_ATTRIBUTE_FILESYSTEM_READONLY = 'filesystem::readonly'; FILE_ATTRIBUTE_FILESYSTEM_SIZE = 'filesystem::size'; FILE_ATTRIBUTE_FILESYSTEM_TYPE = 'filesystem::type'; FILE_ATTRIBUTE_FILESYSTEM_USED = 'filesystem::used'; FILE_ATTRIBUTE_FILESYSTEM_USE_PREVIEW = 'filesystem::use-preview'; FILE_ATTRIBUTE_GVFS_BACKEND = 'gvfs::backend'; FILE_ATTRIBUTE_ID_FILE = 'id::file'; FILE_ATTRIBUTE_ID_FILESYSTEM = 'id::filesystem'; FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT = 'mountable::can-eject'; FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT = 'mountable::can-mount'; FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL = 'mountable::can-poll'; FILE_ATTRIBUTE_MOUNTABLE_CAN_START = 'mountable::can-start'; FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED = 'mountable::can-start-degraded'; FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP = 'mountable::can-stop'; FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT = 'mountable::can-unmount'; FILE_ATTRIBUTE_MOUNTABLE_HAL_UDI = 'mountable::hal-udi'; FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC = 'mountable::is-media-check-automatic'; FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE = 'mountable::start-stop-type'; FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE = 'mountable::unix-device'; FILE_ATTRIBUTE_MOUNTABLE_UNIX_DEVICE_FILE = 'mountable::unix-device-file'; FILE_ATTRIBUTE_OWNER_GROUP = 'owner::group'; FILE_ATTRIBUTE_OWNER_USER = 'owner::user'; FILE_ATTRIBUTE_OWNER_USER_REAL = 'owner::user-real'; FILE_ATTRIBUTE_PREVIEW_ICON = 'preview::icon'; FILE_ATTRIBUTE_SELINUX_CONTEXT = 'selinux::context'; FILE_ATTRIBUTE_STANDARD_ALLOCATED_SIZE = 'standard::allocated-size'; FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE = 'standard::content-type'; FILE_ATTRIBUTE_STANDARD_COPY_NAME = 'standard::copy-name'; FILE_ATTRIBUTE_STANDARD_DESCRIPTION = 'standard::description'; FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME = 'standard::display-name'; FILE_ATTRIBUTE_STANDARD_EDIT_NAME = 'standard::edit-name'; FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE = 'standard::fast-content-type'; FILE_ATTRIBUTE_STANDARD_ICON = 'standard::icon'; FILE_ATTRIBUTE_STANDARD_IS_BACKUP = 'standard::is-backup'; FILE_ATTRIBUTE_STANDARD_IS_HIDDEN = 'standard::is-hidden'; FILE_ATTRIBUTE_STANDARD_IS_SYMLINK = 'standard::is-symlink'; FILE_ATTRIBUTE_STANDARD_IS_VIRTUAL = 'standard::is-virtual'; FILE_ATTRIBUTE_STANDARD_NAME = 'standard::name'; FILE_ATTRIBUTE_STANDARD_SIZE = 'standard::size'; FILE_ATTRIBUTE_STANDARD_SORT_ORDER = 'standard::sort-order'; FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON = 'standard::symbolic-icon'; FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET = 'standard::symlink-target'; FILE_ATTRIBUTE_STANDARD_TARGET_URI = 'standard::target-uri'; FILE_ATTRIBUTE_STANDARD_TYPE = 'standard::type'; FILE_ATTRIBUTE_THUMBNAILING_FAILED = 'thumbnail::failed'; FILE_ATTRIBUTE_THUMBNAIL_PATH = 'thumbnail::path'; FILE_ATTRIBUTE_TIME_ACCESS = 'time::access'; FILE_ATTRIBUTE_TIME_ACCESS_USEC = 'time::access-usec'; FILE_ATTRIBUTE_TIME_CHANGED = 'time::changed'; FILE_ATTRIBUTE_TIME_CHANGED_USEC = 'time::changed-usec'; FILE_ATTRIBUTE_TIME_CREATED = 'time::created'; FILE_ATTRIBUTE_TIME_CREATED_USEC = 'time::created-usec'; FILE_ATTRIBUTE_TIME_MODIFIED = 'time::modified'; FILE_ATTRIBUTE_TIME_MODIFIED_USEC = 'time::modified-usec'; FILE_ATTRIBUTE_TRASH_DELETION_DATE = 'trash::deletion-date'; FILE_ATTRIBUTE_TRASH_ITEM_COUNT = 'trash::item-count'; FILE_ATTRIBUTE_TRASH_ORIG_PATH = 'trash::orig-path'; FILE_ATTRIBUTE_UNIX_BLOCKS = 'unix::blocks'; FILE_ATTRIBUTE_UNIX_BLOCK_SIZE = 'unix::block-size'; FILE_ATTRIBUTE_UNIX_DEVICE = 'unix::device'; FILE_ATTRIBUTE_UNIX_GID = 'unix::gid'; FILE_ATTRIBUTE_UNIX_INODE = 'unix::inode'; FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT = 'unix::is-mountpoint'; FILE_ATTRIBUTE_UNIX_MODE = 'unix::mode'; FILE_ATTRIBUTE_UNIX_NLINK = 'unix::nlink'; FILE_ATTRIBUTE_UNIX_RDEV = 'unix::rdev'; FILE_ATTRIBUTE_UNIX_UID = 'unix::uid'; MENU_ATTRIBUTE_ACTION = 'action'; MENU_ATTRIBUTE_ACTION_NAMESPACE = 'action-namespace'; MENU_ATTRIBUTE_LABEL = 'label'; MENU_ATTRIBUTE_TARGET = 'target'; MENU_LINK_SECTION = 'section'; MENU_LINK_SUBMENU = 'submenu'; NATIVE_VOLUME_MONITOR_EXTENSION_POINT_NAME = 'gio-native-volume-monitor'; NETWORK_MONITOR_EXTENSION_POINT_NAME = 'gio-network-monitor'; PROXY_EXTENSION_POINT_NAME = 'gio-proxy'; PROXY_RESOLVER_EXTENSION_POINT_NAME = 'gio-proxy-resolver'; TLS_BACKEND_EXTENSION_POINT_NAME = 'gio-tls-backend'; TLS_DATABASE_PURPOSE_AUTHENTICATE_CLIENT = '1.3.6.1.5.5.7.3.2'; TLS_DATABASE_PURPOSE_AUTHENTICATE_SERVER = '1.3.6.1.5.5.7.3.1'; VFS_EXTENSION_POINT_NAME = 'gio-vfs'; VOLUME_IDENTIFIER_KIND_CLASS = 'class'; VOLUME_IDENTIFIER_KIND_HAL_UDI = 'hal-udi'; VOLUME_IDENTIFIER_KIND_LABEL = 'label'; VOLUME_IDENTIFIER_KIND_NFS_MOUNT = 'nfs-mount'; VOLUME_IDENTIFIER_KIND_UNIX_DEVICE = 'unix-device'; VOLUME_IDENTIFIER_KIND_UUID = 'uuid'; VOLUME_MONITOR_EXTENSION_POINT_NAME = 'gio-volume-monitor'; type TGAppInfoCreateFlags = Integer; const { GAppInfoCreateFlags } G_APP_INFO_CREATE_NONE: TGAppInfoCreateFlags = 0; G_APP_INFO_CREATE_NEEDS_TERMINAL: TGAppInfoCreateFlags = 1; G_APP_INFO_CREATE_SUPPORTS_URIS: TGAppInfoCreateFlags = 2; G_APP_INFO_CREATE_SUPPORTS_STARTUP_NOTIFICATION: TGAppInfoCreateFlags = 4; type TGApplicationFlags = Integer; const { GApplicationFlags } G_APPLICATION_FLAGS_NONE: TGApplicationFlags = 0; G_APPLICATION_IS_SERVICE: TGApplicationFlags = 1; G_APPLICATION_IS_LAUNCHER: TGApplicationFlags = 2; G_APPLICATION_HANDLES_OPEN: TGApplicationFlags = 4; G_APPLICATION_HANDLES_COMMAND_LINE: TGApplicationFlags = 8; G_APPLICATION_SEND_ENVIRONMENT: TGApplicationFlags = 16; G_APPLICATION_NON_UNIQUE: TGApplicationFlags = 32; type TGDBusConnectionFlags = Integer; const { GDBusConnectionFlags } G_DBUS_CONNECTION_FLAGS_NONE: TGDBusConnectionFlags = 0; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT: TGDBusConnectionFlags = 1; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_SERVER: TGDBusConnectionFlags = 2; G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: TGDBusConnectionFlags = 4; G_DBUS_CONNECTION_FLAGS_MESSAGE_BUS_CONNECTION: TGDBusConnectionFlags = 8; G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING: TGDBusConnectionFlags = 16; type TGDBusCallFlags = Integer; const { GDBusCallFlags } G_DBUS_CALL_FLAGS_NONE: TGDBusCallFlags = 0; G_DBUS_CALL_FLAGS_NO_AUTO_START: TGDBusCallFlags = 1; type TGDBusCapabilityFlags = Integer; const { GDBusCapabilityFlags } G_DBUS_CAPABILITY_FLAGS_NONE: TGDBusCapabilityFlags = 0; G_DBUS_CAPABILITY_FLAGS_UNIX_FD_PASSING: TGDBusCapabilityFlags = 1; type TGDBusSubtreeFlags = Integer; const { GDBusSubtreeFlags } G_DBUS_SUBTREE_FLAGS_NONE: TGDBusSubtreeFlags = 0; G_DBUS_SUBTREE_FLAGS_DISPATCH_TO_UNENUMERATED_NODES: TGDBusSubtreeFlags = 1; type TGDBusSendMessageFlags = Integer; const { GDBusSendMessageFlags } G_DBUS_SEND_MESSAGE_FLAGS_NONE: TGDBusSendMessageFlags = 0; G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL: TGDBusSendMessageFlags = 1; type TGDBusSignalFlags = Integer; const { GDBusSignalFlags } G_DBUS_SIGNAL_FLAGS_NONE: TGDBusSignalFlags = 0; G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE: TGDBusSignalFlags = 1; type TGFileCreateFlags = Integer; const { GFileCreateFlags } G_FILE_CREATE_NONE: TGFileCreateFlags = 0; G_FILE_CREATE_PRIVATE: TGFileCreateFlags = 1; G_FILE_CREATE_REPLACE_DESTINATION: TGFileCreateFlags = 2; type TGFileCopyFlags = Integer; const { GFileCopyFlags } G_FILE_COPY_NONE: TGFileCopyFlags = 0; G_FILE_COPY_OVERWRITE: TGFileCopyFlags = 1; G_FILE_COPY_BACKUP: TGFileCopyFlags = 2; G_FILE_COPY_NOFOLLOW_SYMLINKS: TGFileCopyFlags = 4; G_FILE_COPY_ALL_METADATA: TGFileCopyFlags = 8; G_FILE_COPY_NO_FALLBACK_FOR_MOVE: TGFileCopyFlags = 16; G_FILE_COPY_TARGET_DEFAULT_PERMS: TGFileCopyFlags = 32; type TGMountUnmountFlags = Integer; const { GMountUnmountFlags } G_MOUNT_UNMOUNT_NONE: TGMountUnmountFlags = 0; G_MOUNT_UNMOUNT_FORCE: TGMountUnmountFlags = 1; type TGFileQueryInfoFlags = Integer; const { GFileQueryInfoFlags } G_FILE_QUERY_INFO_NONE: TGFileQueryInfoFlags = 0; G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS: TGFileQueryInfoFlags = 1; type TGFileMonitorFlags = Integer; const { GFileMonitorFlags } G_FILE_MONITOR_NONE: TGFileMonitorFlags = 0; G_FILE_MONITOR_WATCH_MOUNTS: TGFileMonitorFlags = 1; G_FILE_MONITOR_SEND_MOVED: TGFileMonitorFlags = 2; G_FILE_MONITOR_WATCH_HARD_LINKS: TGFileMonitorFlags = 4; type TGMountMountFlags = Integer; const { GMountMountFlags } G_MOUNT_MOUNT_NONE: TGMountMountFlags = 0; type TGFileAttributeType = Integer; const { GFileAttributeType } G_FILE_ATTRIBUTE_TYPE_INVALID: TGFileAttributeType = 0; G_FILE_ATTRIBUTE_TYPE_STRING: TGFileAttributeType = 1; G_FILE_ATTRIBUTE_TYPE_BYTE_STRING: TGFileAttributeType = 2; G_FILE_ATTRIBUTE_TYPE_BOOLEAN: TGFileAttributeType = 3; G_FILE_ATTRIBUTE_TYPE_UINT32: TGFileAttributeType = 4; G_FILE_ATTRIBUTE_TYPE_INT32: TGFileAttributeType = 5; G_FILE_ATTRIBUTE_TYPE_UINT64: TGFileAttributeType = 6; G_FILE_ATTRIBUTE_TYPE_INT64: TGFileAttributeType = 7; G_FILE_ATTRIBUTE_TYPE_OBJECT: TGFileAttributeType = 8; G_FILE_ATTRIBUTE_TYPE_STRINGV: TGFileAttributeType = 9; type TGDriveStartFlags = Integer; const { GDriveStartFlags } G_DRIVE_START_NONE: TGDriveStartFlags = 0; type TGAskPasswordFlags = Integer; const { GAskPasswordFlags } G_ASK_PASSWORD_NEED_PASSWORD: TGAskPasswordFlags = 1; G_ASK_PASSWORD_NEED_USERNAME: TGAskPasswordFlags = 2; G_ASK_PASSWORD_NEED_DOMAIN: TGAskPasswordFlags = 4; G_ASK_PASSWORD_SAVING_SUPPORTED: TGAskPasswordFlags = 8; G_ASK_PASSWORD_ANONYMOUS_SUPPORTED: TGAskPasswordFlags = 16; type TGOutputStreamSpliceFlags = Integer; const { GOutputStreamSpliceFlags } G_OUTPUT_STREAM_SPLICE_NONE: TGOutputStreamSpliceFlags = 0; G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE: TGOutputStreamSpliceFlags = 1; G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET: TGOutputStreamSpliceFlags = 2; type TGBusNameOwnerFlags = Integer; const { GBusNameOwnerFlags } G_BUS_NAME_OWNER_FLAGS_NONE: TGBusNameOwnerFlags = 0; G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT: TGBusNameOwnerFlags = 1; G_BUS_NAME_OWNER_FLAGS_REPLACE: TGBusNameOwnerFlags = 2; type TGBusNameWatcherFlags = Integer; const { GBusNameWatcherFlags } G_BUS_NAME_WATCHER_FLAGS_NONE: TGBusNameWatcherFlags = 0; G_BUS_NAME_WATCHER_FLAGS_AUTO_START: TGBusNameWatcherFlags = 1; type TGBusType = Integer; const { GBusType } G_BUS_TYPE_STARTER: TGBusType = -1; G_BUS_TYPE_NONE: TGBusType = 0; G_BUS_TYPE_SYSTEM: TGBusType = 1; G_BUS_TYPE_SESSION: TGBusType = 2; type TGConverterFlags = Integer; const { GConverterFlags } G_CONVERTER_NO_FLAGS: TGConverterFlags = 0; G_CONVERTER_INPUT_AT_END: TGConverterFlags = 1; G_CONVERTER_FLUSH: TGConverterFlags = 2; type TGConverterResult = Integer; const { GConverterResult } G_CONVERTER_ERROR: TGConverterResult = 0; G_CONVERTER_CONVERTED: TGConverterResult = 1; G_CONVERTER_FINISHED: TGConverterResult = 2; G_CONVERTER_FLUSHED: TGConverterResult = 3; type TGCredentialsType = Integer; const { GCredentialsType } G_CREDENTIALS_TYPE_INVALID: TGCredentialsType = 0; G_CREDENTIALS_TYPE_LINUX_UCRED: TGCredentialsType = 1; G_CREDENTIALS_TYPE_FREEBSD_CMSGCRED: TGCredentialsType = 2; G_CREDENTIALS_TYPE_OPENBSD_SOCKPEERCRED: TGCredentialsType = 3; type TGIOStreamSpliceFlags = Integer; const { GIOStreamSpliceFlags } G_IO_STREAM_SPLICE_NONE: TGIOStreamSpliceFlags = 0; G_IO_STREAM_SPLICE_CLOSE_STREAM1: TGIOStreamSpliceFlags = 1; G_IO_STREAM_SPLICE_CLOSE_STREAM2: TGIOStreamSpliceFlags = 2; G_IO_STREAM_SPLICE_WAIT_FOR_BOTH: TGIOStreamSpliceFlags = 4; type TGDBusMessageFlags = Integer; const { GDBusMessageFlags } G_DBUS_MESSAGE_FLAGS_NONE: TGDBusMessageFlags = 0; G_DBUS_MESSAGE_FLAGS_NO_REPLY_EXPECTED: TGDBusMessageFlags = 1; G_DBUS_MESSAGE_FLAGS_NO_AUTO_START: TGDBusMessageFlags = 2; type TGDBusMessageHeaderField = Integer; const { GDBusMessageHeaderField } G_DBUS_MESSAGE_HEADER_FIELD_INVALID: TGDBusMessageHeaderField = 0; G_DBUS_MESSAGE_HEADER_FIELD_PATH: TGDBusMessageHeaderField = 1; G_DBUS_MESSAGE_HEADER_FIELD_INTERFACE: TGDBusMessageHeaderField = 2; G_DBUS_MESSAGE_HEADER_FIELD_MEMBER: TGDBusMessageHeaderField = 3; G_DBUS_MESSAGE_HEADER_FIELD_ERROR_NAME: TGDBusMessageHeaderField = 4; G_DBUS_MESSAGE_HEADER_FIELD_REPLY_SERIAL: TGDBusMessageHeaderField = 5; G_DBUS_MESSAGE_HEADER_FIELD_DESTINATION: TGDBusMessageHeaderField = 6; G_DBUS_MESSAGE_HEADER_FIELD_SENDER: TGDBusMessageHeaderField = 7; G_DBUS_MESSAGE_HEADER_FIELD_SIGNATURE: TGDBusMessageHeaderField = 8; G_DBUS_MESSAGE_HEADER_FIELD_NUM_UNIX_FDS: TGDBusMessageHeaderField = 9; type TGDBusMessageByteOrder = Integer; const { GDBusMessageByteOrder } G_DBUS_MESSAGE_BYTE_ORDER_BIG_ENDIAN: TGDBusMessageByteOrder = 66; G_DBUS_MESSAGE_BYTE_ORDER_LITTLE_ENDIAN: TGDBusMessageByteOrder = 108; type TGDBusMessageType = Integer; const { GDBusMessageType } G_DBUS_MESSAGE_TYPE_INVALID: TGDBusMessageType = 0; G_DBUS_MESSAGE_TYPE_METHOD_CALL: TGDBusMessageType = 1; G_DBUS_MESSAGE_TYPE_METHOD_RETURN: TGDBusMessageType = 2; G_DBUS_MESSAGE_TYPE_ERROR: TGDBusMessageType = 3; G_DBUS_MESSAGE_TYPE_SIGNAL: TGDBusMessageType = 4; type TGDBusError = Integer; const { GDBusError } G_DBUS_ERROR_FAILED: TGDBusError = 0; G_DBUS_ERROR_NO_MEMORY: TGDBusError = 1; G_DBUS_ERROR_SERVICE_UNKNOWN: TGDBusError = 2; G_DBUS_ERROR_NAME_HAS_NO_OWNER: TGDBusError = 3; G_DBUS_ERROR_NO_REPLY: TGDBusError = 4; G_DBUS_ERROR_IO_ERROR: TGDBusError = 5; G_DBUS_ERROR_BAD_ADDRESS: TGDBusError = 6; G_DBUS_ERROR_NOT_SUPPORTED: TGDBusError = 7; G_DBUS_ERROR_LIMITS_EXCEEDED: TGDBusError = 8; G_DBUS_ERROR_ACCESS_DENIED: TGDBusError = 9; G_DBUS_ERROR_AUTH_FAILED: TGDBusError = 10; G_DBUS_ERROR_NO_SERVER: TGDBusError = 11; G_DBUS_ERROR_TIMEOUT: TGDBusError = 12; G_DBUS_ERROR_NO_NETWORK: TGDBusError = 13; G_DBUS_ERROR_ADDRESS_IN_USE: TGDBusError = 14; G_DBUS_ERROR_DISCONNECTED: TGDBusError = 15; G_DBUS_ERROR_INVALID_ARGS: TGDBusError = 16; G_DBUS_ERROR_FILE_NOT_FOUND: TGDBusError = 17; G_DBUS_ERROR_FILE_EXISTS: TGDBusError = 18; G_DBUS_ERROR_UNKNOWN_METHOD: TGDBusError = 19; G_DBUS_ERROR_TIMED_OUT: TGDBusError = 20; G_DBUS_ERROR_MATCH_RULE_NOT_FOUND: TGDBusError = 21; G_DBUS_ERROR_MATCH_RULE_INVALID: TGDBusError = 22; G_DBUS_ERROR_SPAWN_EXEC_FAILED: TGDBusError = 23; G_DBUS_ERROR_SPAWN_FORK_FAILED: TGDBusError = 24; G_DBUS_ERROR_SPAWN_CHILD_EXITED: TGDBusError = 25; G_DBUS_ERROR_SPAWN_CHILD_SIGNALED: TGDBusError = 26; G_DBUS_ERROR_SPAWN_FAILED: TGDBusError = 27; G_DBUS_ERROR_SPAWN_SETUP_FAILED: TGDBusError = 28; G_DBUS_ERROR_SPAWN_CONFIG_INVALID: TGDBusError = 29; G_DBUS_ERROR_SPAWN_SERVICE_INVALID: TGDBusError = 30; G_DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND: TGDBusError = 31; G_DBUS_ERROR_SPAWN_PERMISSIONS_INVALID: TGDBusError = 32; G_DBUS_ERROR_SPAWN_FILE_INVALID: TGDBusError = 33; G_DBUS_ERROR_SPAWN_NO_MEMORY: TGDBusError = 34; G_DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN: TGDBusError = 35; G_DBUS_ERROR_INVALID_SIGNATURE: TGDBusError = 36; G_DBUS_ERROR_INVALID_FILE_CONTENT: TGDBusError = 37; G_DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN: TGDBusError = 38; G_DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN: TGDBusError = 39; G_DBUS_ERROR_OBJECT_PATH_IN_USE: TGDBusError = 40; type TGDBusPropertyInfoFlags = Integer; const { GDBusPropertyInfoFlags } G_DBUS_PROPERTY_INFO_FLAGS_NONE: TGDBusPropertyInfoFlags = 0; G_DBUS_PROPERTY_INFO_FLAGS_READABLE: TGDBusPropertyInfoFlags = 1; G_DBUS_PROPERTY_INFO_FLAGS_WRITABLE: TGDBusPropertyInfoFlags = 2; type TGDBusInterfaceSkeletonFlags = Integer; const { GDBusInterfaceSkeletonFlags } G_DBUS_INTERFACE_SKELETON_FLAGS_NONE: TGDBusInterfaceSkeletonFlags = 0; G_DBUS_INTERFACE_SKELETON_FLAGS_HANDLE_METHOD_INVOCATIONS_IN_THREAD: TGDBusInterfaceSkeletonFlags = 1; type TGDBusObjectManagerClientFlags = Integer; const { GDBusObjectManagerClientFlags } G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_NONE: TGDBusObjectManagerClientFlags = 0; G_DBUS_OBJECT_MANAGER_CLIENT_FLAGS_DO_NOT_AUTO_START: TGDBusObjectManagerClientFlags = 1; type TGDBusProxyFlags = Integer; const { GDBusProxyFlags } G_DBUS_PROXY_FLAGS_NONE: TGDBusProxyFlags = 0; G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES: TGDBusProxyFlags = 1; G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS: TGDBusProxyFlags = 2; G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START: TGDBusProxyFlags = 4; G_DBUS_PROXY_FLAGS_GET_INVALIDATED_PROPERTIES: TGDBusProxyFlags = 8; type TGDBusServerFlags = Integer; const { GDBusServerFlags } G_DBUS_SERVER_FLAGS_NONE: TGDBusServerFlags = 0; G_DBUS_SERVER_FLAGS_RUN_IN_THREAD: TGDBusServerFlags = 1; G_DBUS_SERVER_FLAGS_AUTHENTICATION_ALLOW_ANONYMOUS: TGDBusServerFlags = 2; type TGDataStreamByteOrder = Integer; const { GDataStreamByteOrder } G_DATA_STREAM_BYTE_ORDER_BIG_ENDIAN: TGDataStreamByteOrder = 0; G_DATA_STREAM_BYTE_ORDER_LITTLE_ENDIAN: TGDataStreamByteOrder = 1; G_DATA_STREAM_BYTE_ORDER_HOST_ENDIAN: TGDataStreamByteOrder = 2; type TGDataStreamNewlineType = Integer; const { GDataStreamNewlineType } G_DATA_STREAM_NEWLINE_TYPE_LF: TGDataStreamNewlineType = 0; G_DATA_STREAM_NEWLINE_TYPE_CR: TGDataStreamNewlineType = 1; G_DATA_STREAM_NEWLINE_TYPE_CR_LF: TGDataStreamNewlineType = 2; G_DATA_STREAM_NEWLINE_TYPE_ANY: TGDataStreamNewlineType = 3; type TGMountOperationResult = Integer; const { GMountOperationResult } G_MOUNT_OPERATION_HANDLED: TGMountOperationResult = 0; G_MOUNT_OPERATION_ABORTED: TGMountOperationResult = 1; G_MOUNT_OPERATION_UNHANDLED: TGMountOperationResult = 2; type TGPasswordSave = Integer; const { GPasswordSave } G_PASSWORD_SAVE_NEVER: TGPasswordSave = 0; G_PASSWORD_SAVE_FOR_SESSION: TGPasswordSave = 1; G_PASSWORD_SAVE_PERMANENTLY: TGPasswordSave = 2; type TGDriveStartStopType = Integer; const { GDriveStartStopType } G_DRIVE_START_STOP_TYPE_UNKNOWN: TGDriveStartStopType = 0; G_DRIVE_START_STOP_TYPE_SHUTDOWN: TGDriveStartStopType = 1; G_DRIVE_START_STOP_TYPE_NETWORK: TGDriveStartStopType = 2; G_DRIVE_START_STOP_TYPE_MULTIDISK: TGDriveStartStopType = 3; G_DRIVE_START_STOP_TYPE_PASSWORD: TGDriveStartStopType = 4; type TGEmblemOrigin = Integer; const { GEmblemOrigin } G_EMBLEM_ORIGIN_UNKNOWN: TGEmblemOrigin = 0; G_EMBLEM_ORIGIN_DEVICE: TGEmblemOrigin = 1; G_EMBLEM_ORIGIN_LIVEMETADATA: TGEmblemOrigin = 2; G_EMBLEM_ORIGIN_TAG: TGEmblemOrigin = 3; type TGFileMonitorEvent = Integer; const { GFileMonitorEvent } G_FILE_MONITOR_EVENT_CHANGED: TGFileMonitorEvent = 0; G_FILE_MONITOR_EVENT_CHANGES_DONE_HINT: TGFileMonitorEvent = 1; G_FILE_MONITOR_EVENT_DELETED: TGFileMonitorEvent = 2; G_FILE_MONITOR_EVENT_CREATED: TGFileMonitorEvent = 3; G_FILE_MONITOR_EVENT_ATTRIBUTE_CHANGED: TGFileMonitorEvent = 4; G_FILE_MONITOR_EVENT_PRE_UNMOUNT: TGFileMonitorEvent = 5; G_FILE_MONITOR_EVENT_UNMOUNTED: TGFileMonitorEvent = 6; G_FILE_MONITOR_EVENT_MOVED: TGFileMonitorEvent = 7; type TGFileAttributeStatus = Integer; const { GFileAttributeStatus } G_FILE_ATTRIBUTE_STATUS_UNSET: TGFileAttributeStatus = 0; G_FILE_ATTRIBUTE_STATUS_SET: TGFileAttributeStatus = 1; G_FILE_ATTRIBUTE_STATUS_ERROR_SETTING: TGFileAttributeStatus = 2; type TGFileType = Integer; const { GFileType } G_FILE_TYPE_UNKNOWN: TGFileType = 0; G_FILE_TYPE_REGULAR: TGFileType = 1; G_FILE_TYPE_DIRECTORY: TGFileType = 2; G_FILE_TYPE_SYMBOLIC_LINK: TGFileType = 3; G_FILE_TYPE_SPECIAL: TGFileType = 4; G_FILE_TYPE_SHORTCUT: TGFileType = 5; G_FILE_TYPE_MOUNTABLE: TGFileType = 6; type TGFileAttributeInfoFlags = Integer; const { GFileAttributeInfoFlags } G_FILE_ATTRIBUTE_INFO_NONE: TGFileAttributeInfoFlags = 0; G_FILE_ATTRIBUTE_INFO_COPY_WITH_FILE: TGFileAttributeInfoFlags = 1; G_FILE_ATTRIBUTE_INFO_COPY_WHEN_MOVED: TGFileAttributeInfoFlags = 2; type TGFilesystemPreviewType = Integer; const { GFilesystemPreviewType } G_FILESYSTEM_PREVIEW_TYPE_IF_ALWAYS: TGFilesystemPreviewType = 0; G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL: TGFilesystemPreviewType = 1; G_FILESYSTEM_PREVIEW_TYPE_NEVER: TGFilesystemPreviewType = 2; type TGIOErrorEnum = Integer; const { GIOErrorEnum } G_IO_ERROR_FAILED: TGIOErrorEnum = 0; G_IO_ERROR_NOT_FOUND: TGIOErrorEnum = 1; G_IO_ERROR_EXISTS: TGIOErrorEnum = 2; G_IO_ERROR_IS_DIRECTORY: TGIOErrorEnum = 3; G_IO_ERROR_NOT_DIRECTORY: TGIOErrorEnum = 4; G_IO_ERROR_NOT_EMPTY: TGIOErrorEnum = 5; G_IO_ERROR_NOT_REGULAR_FILE: TGIOErrorEnum = 6; G_IO_ERROR_NOT_SYMBOLIC_LINK: TGIOErrorEnum = 7; G_IO_ERROR_NOT_MOUNTABLE_FILE: TGIOErrorEnum = 8; G_IO_ERROR_FILENAME_TOO_LONG: TGIOErrorEnum = 9; G_IO_ERROR_INVALID_FILENAME: TGIOErrorEnum = 10; G_IO_ERROR_TOO_MANY_LINKS: TGIOErrorEnum = 11; G_IO_ERROR_NO_SPACE: TGIOErrorEnum = 12; G_IO_ERROR_INVALID_ARGUMENT: TGIOErrorEnum = 13; G_IO_ERROR_PERMISSION_DENIED: TGIOErrorEnum = 14; G_IO_ERROR_NOT_SUPPORTED: TGIOErrorEnum = 15; G_IO_ERROR_NOT_MOUNTED: TGIOErrorEnum = 16; G_IO_ERROR_ALREADY_MOUNTED: TGIOErrorEnum = 17; G_IO_ERROR_CLOSED: TGIOErrorEnum = 18; G_IO_ERROR_CANCELLED: TGIOErrorEnum = 19; G_IO_ERROR_PENDING: TGIOErrorEnum = 20; G_IO_ERROR_READ_ONLY: TGIOErrorEnum = 21; G_IO_ERROR_CANT_CREATE_BACKUP: TGIOErrorEnum = 22; G_IO_ERROR_WRONG_ETAG: TGIOErrorEnum = 23; G_IO_ERROR_TIMED_OUT: TGIOErrorEnum = 24; G_IO_ERROR_WOULD_RECURSE: TGIOErrorEnum = 25; G_IO_ERROR_BUSY: TGIOErrorEnum = 26; G_IO_ERROR_WOULD_BLOCK: TGIOErrorEnum = 27; G_IO_ERROR_HOST_NOT_FOUND: TGIOErrorEnum = 28; G_IO_ERROR_WOULD_MERGE: TGIOErrorEnum = 29; G_IO_ERROR_FAILED_HANDLED: TGIOErrorEnum = 30; G_IO_ERROR_TOO_MANY_OPEN_FILES: TGIOErrorEnum = 31; G_IO_ERROR_NOT_INITIALIZED: TGIOErrorEnum = 32; G_IO_ERROR_ADDRESS_IN_USE: TGIOErrorEnum = 33; G_IO_ERROR_PARTIAL_INPUT: TGIOErrorEnum = 34; G_IO_ERROR_INVALID_DATA: TGIOErrorEnum = 35; G_IO_ERROR_DBUS_ERROR: TGIOErrorEnum = 36; G_IO_ERROR_HOST_UNREACHABLE: TGIOErrorEnum = 37; G_IO_ERROR_NETWORK_UNREACHABLE: TGIOErrorEnum = 38; G_IO_ERROR_CONNECTION_REFUSED: TGIOErrorEnum = 39; G_IO_ERROR_PROXY_FAILED: TGIOErrorEnum = 40; G_IO_ERROR_PROXY_AUTH_FAILED: TGIOErrorEnum = 41; G_IO_ERROR_PROXY_NEED_AUTH: TGIOErrorEnum = 42; G_IO_ERROR_PROXY_NOT_ALLOWED: TGIOErrorEnum = 43; G_IO_ERROR_BROKEN_PIPE: TGIOErrorEnum = 44; type TGIOModuleScopeFlags = Integer; const { GIOModuleScopeFlags } G_IO_MODULE_SCOPE_NONE: TGIOModuleScopeFlags = 0; G_IO_MODULE_SCOPE_BLOCK_DUPLICATES: TGIOModuleScopeFlags = 1; type TGSocketFamily = Integer; const { GSocketFamily } G_SOCKET_FAMILY_INVALID: TGSocketFamily = 0; G_SOCKET_FAMILY_UNIX: TGSocketFamily = 1; G_SOCKET_FAMILY_IPV4: TGSocketFamily = 2; G_SOCKET_FAMILY_IPV6: TGSocketFamily = 10; type TGResolverRecordType = Integer; const { GResolverRecordType } G_RESOLVER_RECORD_SRV: TGResolverRecordType = 1; G_RESOLVER_RECORD_MX: TGResolverRecordType = 2; G_RESOLVER_RECORD_TXT: TGResolverRecordType = 3; G_RESOLVER_RECORD_SOA: TGResolverRecordType = 4; G_RESOLVER_RECORD_NS: TGResolverRecordType = 5; type TGResolverError = Integer; const { GResolverError } G_RESOLVER_ERROR_NOT_FOUND: TGResolverError = 0; G_RESOLVER_ERROR_TEMPORARY_FAILURE: TGResolverError = 1; G_RESOLVER_ERROR_INTERNAL: TGResolverError = 2; type TGResourceLookupFlags = Integer; const { GResourceLookupFlags } G_RESOURCE_LOOKUP_FLAGS_NONE: TGResourceLookupFlags = 0; type TGResourceError = Integer; const { GResourceError } G_RESOURCE_ERROR_NOT_FOUND: TGResourceError = 0; G_RESOURCE_ERROR_INTERNAL: TGResourceError = 1; type TGResourceFlags = Integer; const { GResourceFlags } G_RESOURCE_FLAGS_NONE: TGResourceFlags = 0; G_RESOURCE_FLAGS_COMPRESSED: TGResourceFlags = 1; type TGSettingsBindFlags = Integer; const { GSettingsBindFlags } G_SETTINGS_BIND_DEFAULT: TGSettingsBindFlags = 0; G_SETTINGS_BIND_GET: TGSettingsBindFlags = 1; G_SETTINGS_BIND_SET: TGSettingsBindFlags = 2; G_SETTINGS_BIND_NO_SENSITIVITY: TGSettingsBindFlags = 4; G_SETTINGS_BIND_GET_NO_CHANGES: TGSettingsBindFlags = 8; G_SETTINGS_BIND_INVERT_BOOLEAN: TGSettingsBindFlags = 16; type TGSocketType = Integer; const { GSocketType } G_SOCKET_TYPE_INVALID: TGSocketType = 0; G_SOCKET_TYPE_STREAM: TGSocketType = 1; G_SOCKET_TYPE_DATAGRAM: TGSocketType = 2; G_SOCKET_TYPE_SEQPACKET: TGSocketType = 3; type TGSocketProtocol = Integer; const { GSocketProtocol } G_SOCKET_PROTOCOL_UNKNOWN: TGSocketProtocol = -1; G_SOCKET_PROTOCOL_DEFAULT: TGSocketProtocol = 0; G_SOCKET_PROTOCOL_TCP: TGSocketProtocol = 6; G_SOCKET_PROTOCOL_UDP: TGSocketProtocol = 17; G_SOCKET_PROTOCOL_SCTP: TGSocketProtocol = 132; type TGTlsCertificateFlags = Integer; const { GTlsCertificateFlags } G_TLS_CERTIFICATE_UNKNOWN_CA: TGTlsCertificateFlags = 1; G_TLS_CERTIFICATE_BAD_IDENTITY: TGTlsCertificateFlags = 2; G_TLS_CERTIFICATE_NOT_ACTIVATED: TGTlsCertificateFlags = 4; G_TLS_CERTIFICATE_EXPIRED: TGTlsCertificateFlags = 8; G_TLS_CERTIFICATE_REVOKED: TGTlsCertificateFlags = 16; G_TLS_CERTIFICATE_INSECURE: TGTlsCertificateFlags = 32; G_TLS_CERTIFICATE_GENERIC_ERROR: TGTlsCertificateFlags = 64; G_TLS_CERTIFICATE_VALIDATE_ALL: TGTlsCertificateFlags = 127; type TGSocketClientEvent = Integer; const { GSocketClientEvent } G_SOCKET_CLIENT_RESOLVING: TGSocketClientEvent = 0; G_SOCKET_CLIENT_RESOLVED: TGSocketClientEvent = 1; G_SOCKET_CLIENT_CONNECTING: TGSocketClientEvent = 2; G_SOCKET_CLIENT_CONNECTED: TGSocketClientEvent = 3; G_SOCKET_CLIENT_PROXY_NEGOTIATING: TGSocketClientEvent = 4; G_SOCKET_CLIENT_PROXY_NEGOTIATED: TGSocketClientEvent = 5; G_SOCKET_CLIENT_TLS_HANDSHAKING: TGSocketClientEvent = 6; G_SOCKET_CLIENT_TLS_HANDSHAKED: TGSocketClientEvent = 7; G_SOCKET_CLIENT_COMPLETE: TGSocketClientEvent = 8; type TGSocketMsgFlags = Integer; const { GSocketMsgFlags } G_SOCKET_MSG_NONE: TGSocketMsgFlags = 0; G_SOCKET_MSG_OOB: TGSocketMsgFlags = 1; G_SOCKET_MSG_PEEK: TGSocketMsgFlags = 2; G_SOCKET_MSG_DONTROUTE: TGSocketMsgFlags = 4; type TGTestDBusFlags = Integer; const { GTestDBusFlags } G_TEST_DBUS_NONE: TGTestDBusFlags = 0; type TGTlsAuthenticationMode = Integer; const { GTlsAuthenticationMode } G_TLS_AUTHENTICATION_NONE: TGTlsAuthenticationMode = 0; G_TLS_AUTHENTICATION_REQUESTED: TGTlsAuthenticationMode = 1; G_TLS_AUTHENTICATION_REQUIRED: TGTlsAuthenticationMode = 2; type TGTlsDatabaseLookupFlags = Integer; const { GTlsDatabaseLookupFlags } G_TLS_DATABASE_LOOKUP_NONE: TGTlsDatabaseLookupFlags = 0; G_TLS_DATABASE_LOOKUP_KEYPAIR: TGTlsDatabaseLookupFlags = 1; type TGTlsDatabaseVerifyFlags = Integer; const { GTlsDatabaseVerifyFlags } G_TLS_DATABASE_VERIFY_NONE: TGTlsDatabaseVerifyFlags = 0; type TGTlsRehandshakeMode = Integer; const { GTlsRehandshakeMode } G_TLS_REHANDSHAKE_NEVER: TGTlsRehandshakeMode = 0; G_TLS_REHANDSHAKE_SAFELY: TGTlsRehandshakeMode = 1; G_TLS_REHANDSHAKE_UNSAFELY: TGTlsRehandshakeMode = 2; type TGTlsError = Integer; const { GTlsError } G_TLS_ERROR_UNAVAILABLE: TGTlsError = 0; G_TLS_ERROR_MISC: TGTlsError = 1; G_TLS_ERROR_BAD_CERTIFICATE: TGTlsError = 2; G_TLS_ERROR_NOT_TLS: TGTlsError = 3; G_TLS_ERROR_HANDSHAKE: TGTlsError = 4; G_TLS_ERROR_CERTIFICATE_REQUIRED: TGTlsError = 5; G_TLS_ERROR_EOF: TGTlsError = 6; type TGTlsInteractionResult = Integer; const { GTlsInteractionResult } G_TLS_INTERACTION_UNHANDLED: TGTlsInteractionResult = 0; G_TLS_INTERACTION_HANDLED: TGTlsInteractionResult = 1; G_TLS_INTERACTION_FAILED: TGTlsInteractionResult = 2; type TGTlsPasswordFlags = Integer; const { GTlsPasswordFlags } G_TLS_PASSWORD_NONE: TGTlsPasswordFlags = 0; G_TLS_PASSWORD_RETRY: TGTlsPasswordFlags = 2; G_TLS_PASSWORD_MANY_TRIES: TGTlsPasswordFlags = 4; G_TLS_PASSWORD_FINAL_TRY: TGTlsPasswordFlags = 8; type TGUnixSocketAddressType = Integer; const { GUnixSocketAddressType } G_UNIX_SOCKET_ADDRESS_INVALID: TGUnixSocketAddressType = 0; G_UNIX_SOCKET_ADDRESS_ANONYMOUS: TGUnixSocketAddressType = 1; G_UNIX_SOCKET_ADDRESS_PATH: TGUnixSocketAddressType = 2; G_UNIX_SOCKET_ADDRESS_ABSTRACT: TGUnixSocketAddressType = 3; G_UNIX_SOCKET_ADDRESS_ABSTRACT_PADDED: TGUnixSocketAddressType = 4; type TGZlibCompressorFormat = Integer; const { GZlibCompressorFormat } G_ZLIB_COMPRESSOR_FORMAT_ZLIB: TGZlibCompressorFormat = 0; G_ZLIB_COMPRESSOR_FORMAT_GZIP: TGZlibCompressorFormat = 1; G_ZLIB_COMPRESSOR_FORMAT_RAW: TGZlibCompressorFormat = 2; type PPGAction = ^PGAction; PGAction = ^TGAction; TGAction = object end; PPGSimpleAction = ^PGSimpleAction; PGSimpleAction = ^TGSimpleAction; TGSimpleAction = object(TGObject) end; PPGActionEntry = ^PGActionEntry; PGActionEntry = ^TGActionEntry; TGActionEntry = record name: Pgchar; activate: procedure(action: PGSimpleAction; parameter: PGVariant; user_data: gpointer); cdecl; parameter_type: Pgchar; state: Pgchar; change_state: procedure(action: PGSimpleAction; value: PGVariant; user_data: gpointer); cdecl; padding: array [0..2] of gsize; end; PPGActionGroup = ^PGActionGroup; PGActionGroup = ^TGActionGroup; TGActionGroup = object action_added1: procedure(action_name: Pgchar); cdecl; action_enabled_changed1: procedure(action_name: Pgchar; enabled: gboolean); cdecl; action_removed1: procedure(action_name: Pgchar); cdecl; action_state_changed1: procedure(action_name: Pgchar; value: TGVariant); cdecl; end; PPGActionGroupInterface = ^PGActionGroupInterface; PGActionGroupInterface = ^TGActionGroupInterface; TGActionGroupInterface = object g_iface: TGTypeInterface; has_action: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; list_actions: function(action_group: PGActionGroup): PPgchar; cdecl; get_action_enabled: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; get_action_parameter_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; get_action_state_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; get_action_state_hint: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; get_action_state: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; change_action_state: procedure(action_group: PGActionGroup; action_name: Pgchar; value: PGVariant); cdecl; activate_action: procedure(action_group: PGActionGroup; action_name: Pgchar; parameter: PGVariant); cdecl; action_added: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; action_removed: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; action_enabled_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; enabled: gboolean); cdecl; action_state_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; state: PGVariant); cdecl; query_action: function(action_group: PGActionGroup; action_name: Pgchar; enabled: Pgboolean; parameter_type: PPGVariantType; state_type: PPGVariantType; state_hint: PPGVariant; state: PPGVariant): gboolean; cdecl; end; PPGActionInterface = ^PGActionInterface; PGActionInterface = ^TGActionInterface; TGActionInterface = object g_iface: TGTypeInterface; get_name: function(action: PGAction): Pgchar; cdecl; get_parameter_type: function(action: PGAction): PGVariantType; cdecl; get_state_type: function(action: PGAction): PGVariantType; cdecl; get_state_hint: function(action: PGAction): PGVariant; cdecl; get_enabled: function(action: PGAction): gboolean; cdecl; get_state: function(action: PGAction): PGVariant; cdecl; change_state: procedure(action: PGAction; value: PGVariant); cdecl; activate: procedure(action: PGAction; parameter: PGVariant); cdecl; end; PPGActionMap = ^PGActionMap; PGActionMap = ^TGActionMap; TGActionMap = object end; PPGActionMapInterface = ^PGActionMapInterface; PGActionMapInterface = ^TGActionMapInterface; TGActionMapInterface = object g_iface: TGTypeInterface; lookup_action: function(action_map: PGActionMap; action_name: Pgchar): PGAction; cdecl; add_action: procedure(action_map: PGActionMap; action: PGAction); cdecl; remove_action: procedure(action_map: PGActionMap; action_name: Pgchar); cdecl; end; PPGAppInfo = ^PGAppInfo; PGAppInfo = ^TGAppInfo; PPGAppInfoCreateFlags = ^PGAppInfoCreateFlags; PGAppInfoCreateFlags = ^TGAppInfoCreateFlags; PPGAppLaunchContext = ^PGAppLaunchContext; PGAppLaunchContext = ^TGAppLaunchContext; PPGIcon = ^PGIcon; PGIcon = ^TGIcon; TGAppInfo = object end; PPGAppLaunchContextPrivate = ^PGAppLaunchContextPrivate; PGAppLaunchContextPrivate = ^TGAppLaunchContextPrivate; TGAppLaunchContext = object(TGObject) priv: PGAppLaunchContextPrivate; end; TGIcon = object end; PPGAppInfoIface = ^PGAppInfoIface; PGAppInfoIface = ^TGAppInfoIface; TGAppInfoIface = object g_iface: TGTypeInterface; dup: function(appinfo: PGAppInfo): PGAppInfo; cdecl; equal: function(appinfo1: PGAppInfo; appinfo2: PGAppInfo): gboolean; cdecl; get_id: function(appinfo: PGAppInfo): Pgchar; cdecl; get_name: function(appinfo: PGAppInfo): Pgchar; cdecl; get_description: function(appinfo: PGAppInfo): Pgchar; cdecl; get_executable: function(appinfo: PGAppInfo): Pgchar; cdecl; get_icon: function(appinfo: PGAppInfo): PGIcon; cdecl; launch: function(appinfo: PGAppInfo; files: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; supports_uris: function(appinfo: PGAppInfo): gboolean; cdecl; supports_files: function(appinfo: PGAppInfo): gboolean; cdecl; launch_uris: function(appinfo: PGAppInfo; uris: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; should_show: function(appinfo: PGAppInfo): gboolean; cdecl; set_as_default_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; set_as_default_for_extension: function(appinfo: PGAppInfo; extension: Pgchar; error: PPGError): gboolean; cdecl; add_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; can_remove_supports_type: function(appinfo: PGAppInfo): gboolean; cdecl; remove_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; can_delete: function(appinfo: PGAppInfo): gboolean; cdecl; do_delete: function(appinfo: PGAppInfo): gboolean; cdecl; get_commandline: function(appinfo: PGAppInfo): Pgchar; cdecl; get_display_name: function(appinfo: PGAppInfo): Pgchar; cdecl; set_as_last_used_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; get_supported_types: function(appinfo: PGAppInfo): PPgchar; cdecl; end; TGAppLaunchContextPrivate = record end; PPGAppLaunchContextClass = ^PGAppLaunchContextClass; PGAppLaunchContextClass = ^TGAppLaunchContextClass; TGAppLaunchContextClass = object parent_class: TGObjectClass; get_display: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; get_startup_notify_id: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; launch_failed: procedure(context: PGAppLaunchContext; startup_notify_id: Pgchar); cdecl; launched: procedure(context: PGAppLaunchContext; info: PGAppInfo; platform_data: PGVariant); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; end; PPGApplication = ^PGApplication; PGApplication = ^TGApplication; PPGApplicationFlags = ^PGApplicationFlags; PGApplicationFlags = ^TGApplicationFlags; PPGDBusConnection = ^PGDBusConnection; PGDBusConnection = ^TGDBusConnection; PPGFile = ^PGFile; PGFile = ^TGFile; PPGCancellable = ^PGCancellable; PGCancellable = ^TGCancellable; PPGApplicationPrivate = ^PGApplicationPrivate; PGApplicationPrivate = ^TGApplicationPrivate; TGApplication = object(TGObject) priv: PGApplicationPrivate; end; PPGApplicationCommandLine = ^PGApplicationCommandLine; PGApplicationCommandLine = ^TGApplicationCommandLine; PPGInputStream = ^PGInputStream; PGInputStream = ^TGInputStream; PPGApplicationCommandLinePrivate = ^PGApplicationCommandLinePrivate; PGApplicationCommandLinePrivate = ^TGApplicationCommandLinePrivate; TGApplicationCommandLine = object(TGObject) priv: PGApplicationCommandLinePrivate; end; PPGAsyncResult = ^PGAsyncResult; PGAsyncResult = ^TGAsyncResult; PPGDBusConnectionFlags = ^PGDBusConnectionFlags; PGDBusConnectionFlags = ^TGDBusConnectionFlags; PPGDBusAuthObserver = ^PGDBusAuthObserver; PGDBusAuthObserver = ^TGDBusAuthObserver; PPGIOStream = ^PGIOStream; PGIOStream = ^TGIOStream; PPGAsyncReadyCallback = ^PGAsyncReadyCallback; PGAsyncReadyCallback = ^TGAsyncReadyCallback; TGAsyncReadyCallback = procedure(source_object: PGObject; res: PGAsyncResult; user_data: gpointer); cdecl; PPGDBusMessageFilterFunction = ^PGDBusMessageFilterFunction; PGDBusMessageFilterFunction = ^TGDBusMessageFilterFunction; PPGDBusMessage = ^PGDBusMessage; PGDBusMessage = ^TGDBusMessage; TGDBusMessageFilterFunction = function(connection: PGDBusConnection; message: PGDBusMessage; incoming: gboolean; user_data: gpointer): PGDBusMessage; cdecl; PPGDBusCallFlags = ^PGDBusCallFlags; PGDBusCallFlags = ^TGDBusCallFlags; PPGUnixFDList = ^PGUnixFDList; PGUnixFDList = ^TGUnixFDList; PPGMenuModel = ^PGMenuModel; PGMenuModel = ^TGMenuModel; PPGDBusCapabilityFlags = ^PGDBusCapabilityFlags; PGDBusCapabilityFlags = ^TGDBusCapabilityFlags; PPGCredentials = ^PGCredentials; PGCredentials = ^TGCredentials; PPGDBusInterfaceInfo = ^PGDBusInterfaceInfo; PGDBusInterfaceInfo = ^TGDBusInterfaceInfo; PPGDBusInterfaceVTable = ^PGDBusInterfaceVTable; PGDBusInterfaceVTable = ^TGDBusInterfaceVTable; PPGDBusSubtreeVTable = ^PGDBusSubtreeVTable; PGDBusSubtreeVTable = ^TGDBusSubtreeVTable; PPGDBusSubtreeFlags = ^PGDBusSubtreeFlags; PGDBusSubtreeFlags = ^TGDBusSubtreeFlags; PPGDBusSendMessageFlags = ^PGDBusSendMessageFlags; PGDBusSendMessageFlags = ^TGDBusSendMessageFlags; PPGDBusSignalFlags = ^PGDBusSignalFlags; PGDBusSignalFlags = ^TGDBusSignalFlags; PPGDBusSignalCallback = ^PGDBusSignalCallback; PGDBusSignalCallback = ^TGDBusSignalCallback; TGDBusSignalCallback = procedure(connection: PGDBusConnection; sender_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; signal_name: Pgchar; parameters: PGVariant; user_data: gpointer); cdecl; TGDBusConnection = object(TGObject) end; PPGFileIOStream = ^PGFileIOStream; PGFileIOStream = ^TGFileIOStream; PPGFileOutputStream = ^PGFileOutputStream; PGFileOutputStream = ^TGFileOutputStream; PPGFileCreateFlags = ^PGFileCreateFlags; PGFileCreateFlags = ^TGFileCreateFlags; PPGFileCopyFlags = ^PGFileCopyFlags; PGFileCopyFlags = ^TGFileCopyFlags; PPGFileProgressCallback = ^PGFileProgressCallback; PGFileProgressCallback = ^TGFileProgressCallback; TGFileProgressCallback = procedure(current_num_bytes: gint64; total_num_bytes: gint64; user_data: gpointer); cdecl; PPGMountUnmountFlags = ^PGMountUnmountFlags; PGMountUnmountFlags = ^TGMountUnmountFlags; PPGMountOperation = ^PGMountOperation; PGMountOperation = ^TGMountOperation; PPGFileEnumerator = ^PGFileEnumerator; PGFileEnumerator = ^TGFileEnumerator; PPGFileQueryInfoFlags = ^PGFileQueryInfoFlags; PGFileQueryInfoFlags = ^TGFileQueryInfoFlags; PPGMount = ^PGMount; PGMount = ^TGMount; PPGFileReadMoreCallback = ^PGFileReadMoreCallback; PGFileReadMoreCallback = ^TGFileReadMoreCallback; TGFileReadMoreCallback = function(file_contents: Pgchar; file_size: gint64; callback_data: gpointer): gboolean; cdecl; PPGFileMonitor = ^PGFileMonitor; PGFileMonitor = ^TGFileMonitor; PPGFileMonitorFlags = ^PGFileMonitorFlags; PGFileMonitorFlags = ^TGFileMonitorFlags; PPGMountMountFlags = ^PGMountMountFlags; PGMountMountFlags = ^TGMountMountFlags; PPGFileType = ^PGFileType; PGFileType = ^TGFileType; PPGFileInfo = ^PGFileInfo; PGFileInfo = ^TGFileInfo; PPGFileAttributeInfoList = ^PGFileAttributeInfoList; PGFileAttributeInfoList = ^TGFileAttributeInfoList; PPGFileInputStream = ^PGFileInputStream; PGFileInputStream = ^TGFileInputStream; PPGFileAttributeType = ^PGFileAttributeType; PGFileAttributeType = ^TGFileAttributeType; PPGDriveStartFlags = ^PGDriveStartFlags; PGDriveStartFlags = ^TGDriveStartFlags; TGFile = object end; PPGCancellablePrivate = ^PGCancellablePrivate; PGCancellablePrivate = ^TGCancellablePrivate; TGCancellable = object(TGObject) priv: PGCancellablePrivate; end; TGApplicationPrivate = record end; PPGApplicationClass = ^PGApplicationClass; PGApplicationClass = ^TGApplicationClass; TGApplicationClass = object parent_class: TGObjectClass; startup: procedure(application: PGApplication); cdecl; activate: procedure(application: PGApplication); cdecl; open: procedure(application: PGApplication; files: PPGFile; n_files: gint; hint: Pgchar); cdecl; command_line: function(application: PGApplication; command_line: PGApplicationCommandLine): gint; cdecl; local_command_line: function(application: PGApplication; arguments: PPPgchar; exit_status: Pgint): gboolean; cdecl; before_emit: procedure(application: PGApplication; platform_data: PGVariant); cdecl; after_emit: procedure(application: PGApplication; platform_data: PGVariant); cdecl; add_platform_data: procedure(application: PGApplication; builder: PGVariantBuilder); cdecl; quit_mainloop: procedure(application: PGApplication); cdecl; run_mainloop: procedure(application: PGApplication); cdecl; shutdown: procedure(application: PGApplication); cdecl; dbus_register: function(application: PGApplication; connection: PGDBusConnection; object_path: Pgchar; error: PPGError): gboolean; cdecl; dbus_unregister: procedure(application: PGApplication; connection: PGDBusConnection; object_path: Pgchar); cdecl; padding: array [0..8] of gpointer; end; PPGInputStreamPrivate = ^PGInputStreamPrivate; PGInputStreamPrivate = ^TGInputStreamPrivate; TGInputStream = object(TGObject) priv: PGInputStreamPrivate; end; TGApplicationCommandLinePrivate = record end; PPGApplicationCommandLineClass = ^PGApplicationCommandLineClass; PGApplicationCommandLineClass = ^TGApplicationCommandLineClass; TGApplicationCommandLineClass = object parent_class: TGObjectClass; print_literal: procedure(cmdline: PGApplicationCommandLine; message: Pgchar); cdecl; printerr_literal: procedure(cmdline: PGApplicationCommandLine; message: Pgchar); cdecl; get_stdin: function(cmdline: PGApplicationCommandLine): PGInputStream; cdecl; padding: array [0..10] of gpointer; end; PPGAskPasswordFlags = ^PGAskPasswordFlags; PGAskPasswordFlags = ^TGAskPasswordFlags; PPGAsyncInitable = ^PGAsyncInitable; PGAsyncInitable = ^TGAsyncInitable; TGAsyncInitable = object end; TGAsyncResult = object end; PPGAsyncInitableIface = ^PGAsyncInitableIface; PGAsyncInitableIface = ^TGAsyncInitableIface; TGAsyncInitableIface = object g_iface: TGTypeInterface; init_async: procedure(initable: PGAsyncInitable; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; init_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGAsyncResultIface = ^PGAsyncResultIface; PGAsyncResultIface = ^TGAsyncResultIface; TGAsyncResultIface = object g_iface: TGTypeInterface; get_user_data: function(res: PGAsyncResult): gpointer; cdecl; get_source_object: function(res: PGAsyncResult): PGObject; cdecl; is_tagged: function(res: PGAsyncResult; source_tag: gpointer): gboolean; cdecl; end; PPGSeekable = ^PGSeekable; PGSeekable = ^TGSeekable; TGSeekable = object end; PPGBufferedInputStream = ^PGBufferedInputStream; PGBufferedInputStream = ^TGBufferedInputStream; PPGFilterInputStream = ^PGFilterInputStream; PGFilterInputStream = ^TGFilterInputStream; TGFilterInputStream = object(TGInputStream) base_stream: PGInputStream; end; PPGBufferedInputStreamPrivate = ^PGBufferedInputStreamPrivate; PGBufferedInputStreamPrivate = ^TGBufferedInputStreamPrivate; TGBufferedInputStream = object(TGFilterInputStream) priv1: PGBufferedInputStreamPrivate; end; TGBufferedInputStreamPrivate = record end; PPGFilterInputStreamClass = ^PGFilterInputStreamClass; PGFilterInputStreamClass = ^TGFilterInputStreamClass; PPGInputStreamClass = ^PGInputStreamClass; PGInputStreamClass = ^TGInputStreamClass; TGInputStreamClass = object parent_class: TGObjectClass; read_fn: function(stream: PGInputStream; buffer: Pgpointer; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; skip: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; close_fn: function(stream: PGInputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; read_async: procedure(stream: PGInputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; read_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; skip_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; skip_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; close_async: procedure(stream: PGInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFilterInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGBufferedInputStreamClass = ^PGBufferedInputStreamClass; PGBufferedInputStreamClass = ^TGBufferedInputStreamClass; TGBufferedInputStreamClass = object parent_class: TGFilterInputStreamClass; fill: function(stream: PGBufferedInputStream; count: gssize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; fill_async: procedure(stream: PGBufferedInputStream; count: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; fill_finish: function(stream: PGBufferedInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGOutputStream = ^PGOutputStream; PGOutputStream = ^TGOutputStream; PPGOutputStreamSpliceFlags = ^PGOutputStreamSpliceFlags; PGOutputStreamSpliceFlags = ^TGOutputStreamSpliceFlags; PPGOutputStreamPrivate = ^PGOutputStreamPrivate; PGOutputStreamPrivate = ^TGOutputStreamPrivate; TGOutputStream = object(TGObject) priv: PGOutputStreamPrivate; end; PPGBufferedOutputStream = ^PGBufferedOutputStream; PGBufferedOutputStream = ^TGBufferedOutputStream; PPGFilterOutputStream = ^PGFilterOutputStream; PGFilterOutputStream = ^TGFilterOutputStream; TGFilterOutputStream = object(TGOutputStream) base_stream: PGOutputStream; end; PPGBufferedOutputStreamPrivate = ^PGBufferedOutputStreamPrivate; PGBufferedOutputStreamPrivate = ^TGBufferedOutputStreamPrivate; TGBufferedOutputStream = object(TGFilterOutputStream) priv1: PGBufferedOutputStreamPrivate; end; TGBufferedOutputStreamPrivate = record end; PPGFilterOutputStreamClass = ^PGFilterOutputStreamClass; PGFilterOutputStreamClass = ^TGFilterOutputStreamClass; PPGOutputStreamClass = ^PGOutputStreamClass; PGOutputStreamClass = ^TGOutputStreamClass; TGOutputStreamClass = object parent_class: TGObjectClass; write_fn: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; splice: function(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; cancellable: PGCancellable; error: PPGError): gssize; cdecl; flush: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; close_fn: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; write_async: procedure(stream: PGOutputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; write_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; splice_async: procedure(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; splice_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; flush_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; flush_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; close_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; end; TGFilterOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGBufferedOutputStreamClass = ^PGBufferedOutputStreamClass; PGBufferedOutputStreamClass = ^TGBufferedOutputStreamClass; TGBufferedOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; TGBusAcquiredCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; TGBusNameAcquiredCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; TGBusNameAppearedCallback = procedure(connection: PGDBusConnection; name: Pgchar; name_owner: Pgchar; user_data: gpointer); cdecl; TGBusNameLostCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; PPGBusNameOwnerFlags = ^PGBusNameOwnerFlags; PGBusNameOwnerFlags = ^TGBusNameOwnerFlags; TGBusNameVanishedCallback = procedure(connection: PGDBusConnection; name: Pgchar; user_data: gpointer); cdecl; PPGBusNameWatcherFlags = ^PGBusNameWatcherFlags; PGBusNameWatcherFlags = ^TGBusNameWatcherFlags; PPGBusType = ^PGBusType; PGBusType = ^TGBusType; TGCancellablePrivate = record end; PPGCancellableClass = ^PGCancellableClass; PGCancellableClass = ^TGCancellableClass; TGCancellableClass = object parent_class: TGObjectClass; cancelled: procedure(cancellable: PGCancellable); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGCancellableSourceFunc = function(cancellable: PGCancellable; user_data: gpointer): gboolean; cdecl; PPGConverter = ^PGConverter; PGConverter = ^TGConverter; PPGConverterResult = ^PGConverterResult; PGConverterResult = ^TGConverterResult; PPGConverterFlags = ^PGConverterFlags; PGConverterFlags = ^TGConverterFlags; TGConverter = object end; PPGInitable = ^PGInitable; PGInitable = ^TGInitable; TGInitable = object end; PPGCharsetConverter = ^PGCharsetConverter; PGCharsetConverter = ^TGCharsetConverter; TGCharsetConverter = object(TGObject) end; PPGCharsetConverterClass = ^PGCharsetConverterClass; PGCharsetConverterClass = ^TGCharsetConverterClass; TGCharsetConverterClass = object parent_class: TGObjectClass; end; PPGConverterIface = ^PGConverterIface; PGConverterIface = ^TGConverterIface; TGConverterIface = object g_iface: TGTypeInterface; convert: function(converter: PGConverter; inbuf: Pguint8; inbuf_size: gsize; outbuf: Pgpointer; outbuf_size: gsize; flags: TGConverterFlags; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): TGConverterResult; cdecl; reset: procedure(converter: PGConverter); cdecl; end; PPGPollableInputStream = ^PGPollableInputStream; PGPollableInputStream = ^TGPollableInputStream; TGPollableInputStream = object end; PPGConverterInputStream = ^PGConverterInputStream; PGConverterInputStream = ^TGConverterInputStream; PPGConverterInputStreamPrivate = ^PGConverterInputStreamPrivate; PGConverterInputStreamPrivate = ^TGConverterInputStreamPrivate; TGConverterInputStream = object(TGFilterInputStream) priv1: PGConverterInputStreamPrivate; end; TGConverterInputStreamPrivate = record end; PPGConverterInputStreamClass = ^PGConverterInputStreamClass; PGConverterInputStreamClass = ^TGConverterInputStreamClass; TGConverterInputStreamClass = object parent_class: TGFilterInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGPollableOutputStream = ^PGPollableOutputStream; PGPollableOutputStream = ^TGPollableOutputStream; TGPollableOutputStream = object end; PPGConverterOutputStream = ^PGConverterOutputStream; PGConverterOutputStream = ^TGConverterOutputStream; PPGConverterOutputStreamPrivate = ^PGConverterOutputStreamPrivate; PGConverterOutputStreamPrivate = ^TGConverterOutputStreamPrivate; TGConverterOutputStream = object(TGFilterOutputStream) priv1: PGConverterOutputStreamPrivate; end; TGConverterOutputStreamPrivate = record end; PPGConverterOutputStreamClass = ^PGConverterOutputStreamClass; PGConverterOutputStreamClass = ^TGConverterOutputStreamClass; TGConverterOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGCredentialsType = ^PGCredentialsType; PGCredentialsType = ^TGCredentialsType; TGCredentials = object(TGObject) end; PPGCredentialsClass = ^PGCredentialsClass; PGCredentialsClass = ^TGCredentialsClass; TGCredentialsClass = object end; PPGRemoteActionGroup = ^PGRemoteActionGroup; PGRemoteActionGroup = ^TGRemoteActionGroup; TGRemoteActionGroup = object end; PPGDBusActionGroup = ^PGDBusActionGroup; PGDBusActionGroup = ^TGDBusActionGroup; TGDBusActionGroup = object(TGObject) end; PPGDBusAnnotationInfo = ^PGDBusAnnotationInfo; PGDBusAnnotationInfo = ^TGDBusAnnotationInfo; TGDBusAnnotationInfo = object ref_count: gint; key: Pgchar; value: Pgchar; annotations: PGDBusAnnotationInfo; end; PPGDBusArgInfo = ^PGDBusArgInfo; PGDBusArgInfo = ^TGDBusArgInfo; TGDBusArgInfo = object ref_count: gint; name: Pgchar; signature: Pgchar; annotations: PGDBusAnnotationInfo; end; TGDBusAuthObserver = object(TGObject) end; PPGIOStreamSpliceFlags = ^PGIOStreamSpliceFlags; PGIOStreamSpliceFlags = ^TGIOStreamSpliceFlags; PPGIOStreamPrivate = ^PGIOStreamPrivate; PGIOStreamPrivate = ^TGIOStreamPrivate; TGIOStream = object(TGObject) priv: PGIOStreamPrivate; end; PPGUnixFDListPrivate = ^PGUnixFDListPrivate; PGUnixFDListPrivate = ^TGUnixFDListPrivate; TGUnixFDList = object(TGObject) priv: PGUnixFDListPrivate; end; PPGMenuAttributeIter = ^PGMenuAttributeIter; PGMenuAttributeIter = ^TGMenuAttributeIter; PPGMenuLinkIter = ^PGMenuLinkIter; PGMenuLinkIter = ^TGMenuLinkIter; PPGMenuModelPrivate = ^PGMenuModelPrivate; PGMenuModelPrivate = ^TGMenuModelPrivate; TGMenuModel = object(TGObject) priv: PGMenuModelPrivate; end; PPGDBusMethodInfo = ^PGDBusMethodInfo; PGDBusMethodInfo = ^TGDBusMethodInfo; PPGDBusPropertyInfo = ^PGDBusPropertyInfo; PGDBusPropertyInfo = ^TGDBusPropertyInfo; PPGDBusSignalInfo = ^PGDBusSignalInfo; PGDBusSignalInfo = ^TGDBusSignalInfo; TGDBusInterfaceInfo = object ref_count: gint; name: Pgchar; methods: PGDBusMethodInfo; signals: PGDBusSignalInfo; properties: PGDBusPropertyInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusInterfaceMethodCallFunc = ^PGDBusInterfaceMethodCallFunc; PGDBusInterfaceMethodCallFunc = ^TGDBusInterfaceMethodCallFunc; PPGDBusMethodInvocation = ^PGDBusMethodInvocation; PGDBusMethodInvocation = ^TGDBusMethodInvocation; TGDBusInterfaceMethodCallFunc = procedure(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; invocation: PGDBusMethodInvocation; user_data: gpointer); cdecl; PPGDBusInterfaceGetPropertyFunc = ^PGDBusInterfaceGetPropertyFunc; PGDBusInterfaceGetPropertyFunc = ^TGDBusInterfaceGetPropertyFunc; TGDBusInterfaceGetPropertyFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; property_name: Pgchar; error: PPGError; user_data: gpointer): PGVariant; cdecl; PPGDBusInterfaceSetPropertyFunc = ^PGDBusInterfaceSetPropertyFunc; PGDBusInterfaceSetPropertyFunc = ^TGDBusInterfaceSetPropertyFunc; TGDBusInterfaceSetPropertyFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; property_name: Pgchar; value: PGVariant; error: PPGError; user_data: gpointer): gboolean; cdecl; TGDBusInterfaceVTable = record method_call: TGDBusInterfaceMethodCallFunc; get_property: TGDBusInterfaceGetPropertyFunc; set_property: TGDBusInterfaceSetPropertyFunc; padding: array [0..7] of gpointer; end; PPGDBusSubtreeEnumerateFunc = ^PGDBusSubtreeEnumerateFunc; PGDBusSubtreeEnumerateFunc = ^TGDBusSubtreeEnumerateFunc; TGDBusSubtreeEnumerateFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; user_data: gpointer): PPgchar; cdecl; PPGDBusSubtreeIntrospectFunc = ^PGDBusSubtreeIntrospectFunc; PGDBusSubtreeIntrospectFunc = ^TGDBusSubtreeIntrospectFunc; TGDBusSubtreeIntrospectFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; node: Pgchar; user_data: gpointer): PPGDBusInterfaceInfo; cdecl; PPGDBusSubtreeDispatchFunc = ^PGDBusSubtreeDispatchFunc; PGDBusSubtreeDispatchFunc = ^TGDBusSubtreeDispatchFunc; TGDBusSubtreeDispatchFunc = function(connection: PGDBusConnection; sender: Pgchar; object_path: Pgchar; interface_name: Pgchar; node: Pgchar; out_user_data: Pgpointer; user_data: gpointer): PGDBusInterfaceVTable; cdecl; TGDBusSubtreeVTable = record enumerate: TGDBusSubtreeEnumerateFunc; introspect: TGDBusSubtreeIntrospectFunc; dispatch: TGDBusSubtreeDispatchFunc; padding: array [0..7] of gpointer; end; PPGDBusMessageByteOrder = ^PGDBusMessageByteOrder; PGDBusMessageByteOrder = ^TGDBusMessageByteOrder; PPGDBusMessageFlags = ^PGDBusMessageFlags; PGDBusMessageFlags = ^TGDBusMessageFlags; PPGDBusMessageHeaderField = ^PGDBusMessageHeaderField; PGDBusMessageHeaderField = ^TGDBusMessageHeaderField; PPGDBusMessageType = ^PGDBusMessageType; PGDBusMessageType = ^TGDBusMessageType; TGDBusMessage = object(TGObject) end; PPGDBusErrorEntry = ^PGDBusErrorEntry; PGDBusErrorEntry = ^TGDBusErrorEntry; TGDBusErrorEntry = record error_code: gint; dbus_error_name: Pgchar; end; PPGDBusError = ^PGDBusError; PGDBusError = ^TGDBusError; PPGDBusObject = ^PGDBusObject; PGDBusObject = ^TGDBusObject; PPGDBusInterface = ^PGDBusInterface; PGDBusInterface = ^TGDBusInterface; TGDBusInterface = object end; TGDBusObject = object interface_added: procedure(interface_: TGDBusInterface); cdecl; interface_removed: procedure(interface_: TGDBusInterface); cdecl; end; PPGDBusInterfaceIface = ^PGDBusInterfaceIface; PGDBusInterfaceIface = ^TGDBusInterfaceIface; TGDBusInterfaceIface = object parent_iface: TGTypeInterface; get_info: function(interface_: PGDBusInterface): PGDBusInterfaceInfo; cdecl; get_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; set_object: procedure(interface_: PGDBusInterface; object_: PGDBusObject); cdecl; dup_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; end; TGDBusMethodInfo = object ref_count: gint; name: Pgchar; in_args: PGDBusArgInfo; out_args: PGDBusArgInfo; annotations: PGDBusAnnotationInfo; end; TGDBusSignalInfo = object ref_count: gint; name: Pgchar; args: PGDBusArgInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusPropertyInfoFlags = ^PGDBusPropertyInfoFlags; PGDBusPropertyInfoFlags = ^TGDBusPropertyInfoFlags; TGDBusPropertyInfo = object ref_count: gint; name: Pgchar; signature: Pgchar; flags: TGDBusPropertyInfoFlags; annotations: PGDBusAnnotationInfo; end; TGDBusMethodInvocation = object(TGObject) end; PPGDBusInterfaceSkeleton = ^PGDBusInterfaceSkeleton; PGDBusInterfaceSkeleton = ^TGDBusInterfaceSkeleton; PPGDBusInterfaceSkeletonFlags = ^PGDBusInterfaceSkeletonFlags; PGDBusInterfaceSkeletonFlags = ^TGDBusInterfaceSkeletonFlags; PPGDBusInterfaceSkeletonPrivate = ^PGDBusInterfaceSkeletonPrivate; PGDBusInterfaceSkeletonPrivate = ^TGDBusInterfaceSkeletonPrivate; TGDBusInterfaceSkeleton = object(TGObject) priv: PGDBusInterfaceSkeletonPrivate; end; TGDBusInterfaceSkeletonPrivate = record end; PPGDBusInterfaceSkeletonClass = ^PGDBusInterfaceSkeletonClass; PGDBusInterfaceSkeletonClass = ^TGDBusInterfaceSkeletonClass; TGDBusInterfaceSkeletonClass = object parent_class: TGObjectClass; get_info: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceInfo; cdecl; get_vtable: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceVTable; cdecl; get_properties: function(interface_: PGDBusInterfaceSkeleton): PGVariant; cdecl; flush: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; vfunc_padding: array [0..7] of gpointer; g_authorize_method: function(interface_: PGDBusInterfaceSkeleton; invocation: PGDBusMethodInvocation): gboolean; cdecl; signal_padding: array [0..7] of gpointer; end; PPGDBusMenuModel = ^PGDBusMenuModel; PGDBusMenuModel = ^TGDBusMenuModel; TGDBusMenuModel = object(TGMenuModel) end; PPGDBusNodeInfo = ^PGDBusNodeInfo; PGDBusNodeInfo = ^TGDBusNodeInfo; TGDBusNodeInfo = object ref_count: gint; path: Pgchar; interfaces: PGDBusInterfaceInfo; nodes: PGDBusNodeInfo; annotations: PGDBusAnnotationInfo; end; PPGDBusObjectIface = ^PGDBusObjectIface; PGDBusObjectIface = ^TGDBusObjectIface; TGDBusObjectIface = object parent_iface: TGTypeInterface; get_object_path: function(object_: PGDBusObject): Pgchar; cdecl; get_interfaces: function(object_: PGDBusObject): PGList; cdecl; get_interface: function(object_: PGDBusObject; interface_name: Pgchar): PGDBusInterface; cdecl; interface_added: procedure(object_: PGDBusObject; interface_: PGDBusInterface); cdecl; interface_removed: procedure(object_: PGDBusObject; interface_: PGDBusInterface); cdecl; end; PPGDBusObjectManager = ^PGDBusObjectManager; PGDBusObjectManager = ^TGDBusObjectManager; TGDBusObjectManager = object interface_added: procedure(object_: TGDBusObject; interface_: TGDBusInterface); cdecl; interface_removed: procedure(object_: TGDBusObject; interface_: TGDBusInterface); cdecl; object_added: procedure(object_: TGDBusObject); cdecl; object_removed: procedure(object_: TGDBusObject); cdecl; end; PPGDBusObjectManagerClient = ^PGDBusObjectManagerClient; PGDBusObjectManagerClient = ^TGDBusObjectManagerClient; PPGDBusObjectManagerClientFlags = ^PGDBusObjectManagerClientFlags; PGDBusObjectManagerClientFlags = ^TGDBusObjectManagerClientFlags; PPGDBusProxyTypeFunc = ^PGDBusProxyTypeFunc; PGDBusProxyTypeFunc = ^TGDBusProxyTypeFunc; TGDBusProxyTypeFunc = function(manager: PGDBusObjectManagerClient; object_path: Pgchar; interface_name: Pgchar; user_data: gpointer): TGType; cdecl; PPGDBusObjectManagerClientPrivate = ^PGDBusObjectManagerClientPrivate; PGDBusObjectManagerClientPrivate = ^TGDBusObjectManagerClientPrivate; TGDBusObjectManagerClient = object(TGObject) priv: PGDBusObjectManagerClientPrivate; end; PPGDBusObjectProxy = ^PGDBusObjectProxy; PGDBusObjectProxy = ^TGDBusObjectProxy; PPGDBusObjectProxyPrivate = ^PGDBusObjectProxyPrivate; PGDBusObjectProxyPrivate = ^TGDBusObjectProxyPrivate; TGDBusObjectProxy = object(TGObject) priv: PGDBusObjectProxyPrivate; end; PPGDBusProxy = ^PGDBusProxy; PGDBusProxy = ^TGDBusProxy; PPGDBusProxyFlags = ^PGDBusProxyFlags; PGDBusProxyFlags = ^TGDBusProxyFlags; PPGDBusProxyPrivate = ^PGDBusProxyPrivate; PGDBusProxyPrivate = ^TGDBusProxyPrivate; TGDBusProxy = object(TGObject) priv: PGDBusProxyPrivate; end; TGDBusObjectManagerClientPrivate = record end; PPGDBusObjectManagerClientClass = ^PGDBusObjectManagerClientClass; PGDBusObjectManagerClientClass = ^TGDBusObjectManagerClientClass; TGDBusObjectManagerClientClass = object parent_class: TGObjectClass; interface_proxy_signal: procedure(manager: PGDBusObjectManagerClient; object_proxy: PGDBusObjectProxy; interface_proxy: PGDBusProxy; sender_name: Pgchar; signal_name: Pgchar; parameters: PGVariant); cdecl; interface_proxy_properties_changed: procedure(manager: PGDBusObjectManagerClient; object_proxy: PGDBusObjectProxy; interface_proxy: PGDBusProxy; changed_properties: PGVariant; invalidated_properties: PPgchar); cdecl; padding: array [0..7] of gpointer; end; PPGDBusObjectManagerIface = ^PGDBusObjectManagerIface; PGDBusObjectManagerIface = ^TGDBusObjectManagerIface; TGDBusObjectManagerIface = object parent_iface: TGTypeInterface; get_object_path: function(manager: PGDBusObjectManager): Pgchar; cdecl; get_objects: function(manager: PGDBusObjectManager): PGList; cdecl; get_object: function(manager: PGDBusObjectManager; object_path: Pgchar): PGDBusObject; cdecl; get_interface: function(manager: PGDBusObjectManager; object_path: Pgchar; interface_name: Pgchar): PGDBusInterface; cdecl; object_added: procedure(manager: PGDBusObjectManager; object_: PGDBusObject); cdecl; object_removed: procedure(manager: PGDBusObjectManager; object_: PGDBusObject); cdecl; interface_added: procedure(manager: PGDBusObjectManager; object_: PGDBusObject; interface_: PGDBusInterface); cdecl; interface_removed: procedure(manager: PGDBusObjectManager; object_: PGDBusObject; interface_: PGDBusInterface); cdecl; end; PPGDBusObjectManagerServer = ^PGDBusObjectManagerServer; PGDBusObjectManagerServer = ^TGDBusObjectManagerServer; PPGDBusObjectSkeleton = ^PGDBusObjectSkeleton; PGDBusObjectSkeleton = ^TGDBusObjectSkeleton; PPGDBusObjectManagerServerPrivate = ^PGDBusObjectManagerServerPrivate; PGDBusObjectManagerServerPrivate = ^TGDBusObjectManagerServerPrivate; TGDBusObjectManagerServer = object(TGObject) priv: PGDBusObjectManagerServerPrivate; end; PPGDBusObjectSkeletonPrivate = ^PGDBusObjectSkeletonPrivate; PGDBusObjectSkeletonPrivate = ^TGDBusObjectSkeletonPrivate; TGDBusObjectSkeleton = object(TGObject) priv: PGDBusObjectSkeletonPrivate; end; TGDBusObjectManagerServerPrivate = record end; PPGDBusObjectManagerServerClass = ^PGDBusObjectManagerServerClass; PGDBusObjectManagerServerClass = ^TGDBusObjectManagerServerClass; TGDBusObjectManagerServerClass = object parent_class: TGObjectClass; padding: array [0..7] of gpointer; end; TGDBusObjectProxyPrivate = record end; PPGDBusObjectProxyClass = ^PGDBusObjectProxyClass; PGDBusObjectProxyClass = ^TGDBusObjectProxyClass; TGDBusObjectProxyClass = object parent_class: TGObjectClass; padding: array [0..7] of gpointer; end; TGDBusObjectSkeletonPrivate = record end; PPGDBusObjectSkeletonClass = ^PGDBusObjectSkeletonClass; PGDBusObjectSkeletonClass = ^TGDBusObjectSkeletonClass; TGDBusObjectSkeletonClass = object parent_class: TGObjectClass; authorize_method: function(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton; invocation: PGDBusMethodInvocation): gboolean; cdecl; padding: array [0..7] of gpointer; end; TGDBusProxyPrivate = record end; PPGDBusProxyClass = ^PGDBusProxyClass; PGDBusProxyClass = ^TGDBusProxyClass; TGDBusProxyClass = object parent_class: TGObjectClass; g_properties_changed: procedure(proxy: PGDBusProxy; changed_properties: PGVariant; invalidated_properties: PPgchar); cdecl; g_signal: procedure(proxy: PGDBusProxy; sender_name: Pgchar; signal_name: Pgchar; parameters: PGVariant); cdecl; padding: array [0..31] of gpointer; end; PPGDBusServer = ^PGDBusServer; PGDBusServer = ^TGDBusServer; PPGDBusServerFlags = ^PGDBusServerFlags; PGDBusServerFlags = ^TGDBusServerFlags; TGDBusServer = object(TGObject) end; PPGDataInputStream = ^PGDataInputStream; PGDataInputStream = ^TGDataInputStream; PPGDataStreamByteOrder = ^PGDataStreamByteOrder; PGDataStreamByteOrder = ^TGDataStreamByteOrder; PPGDataStreamNewlineType = ^PGDataStreamNewlineType; PGDataStreamNewlineType = ^TGDataStreamNewlineType; PPGDataInputStreamPrivate = ^PGDataInputStreamPrivate; PGDataInputStreamPrivate = ^TGDataInputStreamPrivate; TGDataInputStream = object(TGBufferedInputStream) priv2: PGDataInputStreamPrivate; end; TGDataInputStreamPrivate = record end; PPGDataInputStreamClass = ^PGDataInputStreamClass; PGDataInputStreamClass = ^TGDataInputStreamClass; TGDataInputStreamClass = object parent_class: TGBufferedInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGDataOutputStream = ^PGDataOutputStream; PGDataOutputStream = ^TGDataOutputStream; PPGDataOutputStreamPrivate = ^PGDataOutputStreamPrivate; PGDataOutputStreamPrivate = ^TGDataOutputStreamPrivate; TGDataOutputStream = object(TGFilterOutputStream) priv1: PGDataOutputStreamPrivate; end; TGDataOutputStreamPrivate = record end; PPGDataOutputStreamClass = ^PGDataOutputStreamClass; PGDataOutputStreamClass = ^TGDataOutputStreamClass; TGDataOutputStreamClass = object parent_class: TGFilterOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGDesktopAppInfo = ^PGDesktopAppInfo; PGDesktopAppInfo = ^TGDesktopAppInfo; PPGDesktopAppLaunchCallback = ^PGDesktopAppLaunchCallback; PGDesktopAppLaunchCallback = ^TGDesktopAppLaunchCallback; TGDesktopAppLaunchCallback = procedure(appinfo: PGDesktopAppInfo; pid: TGPid; user_data: gpointer); cdecl; TGDesktopAppInfo = object(TGObject) end; PPGDesktopAppInfoClass = ^PGDesktopAppInfoClass; PGDesktopAppInfoClass = ^TGDesktopAppInfoClass; TGDesktopAppInfoClass = object parent_class: TGObjectClass; end; PPGDesktopAppInfoLookup = ^PGDesktopAppInfoLookup; PGDesktopAppInfoLookup = ^TGDesktopAppInfoLookup; TGDesktopAppInfoLookup = object end; PPGDesktopAppInfoLookupIface = ^PGDesktopAppInfoLookupIface; PGDesktopAppInfoLookupIface = ^TGDesktopAppInfoLookupIface; TGDesktopAppInfoLookupIface = object g_iface: TGTypeInterface; get_default_for_uri_scheme: function(lookup: PGDesktopAppInfoLookup; uri_scheme: Pgchar): PGAppInfo; cdecl; end; PPGDrive = ^PGDrive; PGDrive = ^TGDrive; PPGDriveStartStopType = ^PGDriveStartStopType; PGDriveStartStopType = ^TGDriveStartStopType; TGDrive = object changed: procedure; cdecl; disconnected: procedure; cdecl; eject_button: procedure; cdecl; stop_button: procedure; cdecl; end; PPGPasswordSave = ^PGPasswordSave; PGPasswordSave = ^TGPasswordSave; PPGMountOperationResult = ^PGMountOperationResult; PGMountOperationResult = ^TGMountOperationResult; PPGMountOperationPrivate = ^PGMountOperationPrivate; PGMountOperationPrivate = ^TGMountOperationPrivate; TGMountOperation = object(TGObject) priv: PGMountOperationPrivate; end; PPGDriveIface = ^PGDriveIface; PGDriveIface = ^TGDriveIface; TGDriveIface = object g_iface: TGTypeInterface; changed: procedure(drive: PGDrive); cdecl; disconnected: procedure(drive: PGDrive); cdecl; eject_button: procedure(drive: PGDrive); cdecl; get_name: function(drive: PGDrive): Pgchar; cdecl; get_icon: function(drive: PGDrive): PGIcon; cdecl; has_volumes: function(drive: PGDrive): gboolean; cdecl; get_volumes: function(drive: PGDrive): PGList; cdecl; is_media_removable: function(drive: PGDrive): gboolean; cdecl; has_media: function(drive: PGDrive): gboolean; cdecl; is_media_check_automatic: function(drive: PGDrive): gboolean; cdecl; can_eject: function(drive: PGDrive): gboolean; cdecl; can_poll_for_media: function(drive: PGDrive): gboolean; cdecl; eject: procedure(drive: PGDrive; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; poll_for_media: procedure(drive: PGDrive; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; poll_for_media_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_identifier: function(drive: PGDrive; kind: Pgchar): Pgchar; cdecl; enumerate_identifiers: function(drive: PGDrive): PPgchar; cdecl; get_start_stop_type: function(drive: PGDrive): TGDriveStartStopType; cdecl; can_start: function(drive: PGDrive): gboolean; cdecl; can_start_degraded: function(drive: PGDrive): gboolean; cdecl; start: procedure(drive: PGDrive; flags: TGDriveStartFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; start_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; can_stop: function(drive: PGDrive): gboolean; cdecl; stop: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; stop_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; stop_button: procedure(drive: PGDrive); cdecl; eject_with_operation: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_sort_key: function(drive: PGDrive): Pgchar; cdecl; get_symbolic_icon: function(drive: PGDrive): PGIcon; cdecl; end; PPGEmblem = ^PGEmblem; PGEmblem = ^TGEmblem; PPGEmblemOrigin = ^PGEmblemOrigin; PGEmblemOrigin = ^TGEmblemOrigin; TGEmblem = object(TGObject) end; PPGEmblemClass = ^PGEmblemClass; PGEmblemClass = ^TGEmblemClass; TGEmblemClass = object end; PPGEmblemedIcon = ^PGEmblemedIcon; PGEmblemedIcon = ^TGEmblemedIcon; PPGEmblemedIconPrivate = ^PGEmblemedIconPrivate; PGEmblemedIconPrivate = ^TGEmblemedIconPrivate; TGEmblemedIcon = object(TGObject) priv: PGEmblemedIconPrivate; end; TGEmblemedIconPrivate = record end; PPGEmblemedIconClass = ^PGEmblemedIconClass; PGEmblemedIconClass = ^TGEmblemedIconClass; TGEmblemedIconClass = object parent_class: TGObjectClass; end; PPGFileIOStreamPrivate = ^PGFileIOStreamPrivate; PGFileIOStreamPrivate = ^TGFileIOStreamPrivate; TGFileIOStream = object(TGIOStream) priv1: PGFileIOStreamPrivate; end; PPGFileOutputStreamPrivate = ^PGFileOutputStreamPrivate; PGFileOutputStreamPrivate = ^TGFileOutputStreamPrivate; TGFileOutputStream = object(TGOutputStream) priv1: PGFileOutputStreamPrivate; end; PPGFileEnumeratorPrivate = ^PGFileEnumeratorPrivate; PGFileEnumeratorPrivate = ^TGFileEnumeratorPrivate; TGFileEnumerator = object(TGObject) priv: PGFileEnumeratorPrivate; end; PPGVolume = ^PGVolume; PGVolume = ^TGVolume; TGMount = object changed: procedure; cdecl; pre_unmount: procedure; cdecl; unmounted: procedure; cdecl; end; PPGFileMonitorEvent = ^PGFileMonitorEvent; PGFileMonitorEvent = ^TGFileMonitorEvent; PPGFileMonitorPrivate = ^PGFileMonitorPrivate; PGFileMonitorPrivate = ^TGFileMonitorPrivate; TGFileMonitor = object(TGObject) priv: PGFileMonitorPrivate; end; PPGFileAttributeStatus = ^PGFileAttributeStatus; PGFileAttributeStatus = ^TGFileAttributeStatus; PPGFileAttributeMatcher = ^PGFileAttributeMatcher; PGFileAttributeMatcher = ^TGFileAttributeMatcher; TGFileInfo = object(TGObject) end; PPGFileAttributeInfoFlags = ^PGFileAttributeInfoFlags; PGFileAttributeInfoFlags = ^TGFileAttributeInfoFlags; PPGFileAttributeInfo = ^PGFileAttributeInfo; PGFileAttributeInfo = ^TGFileAttributeInfo; TGFileAttributeInfoList = object infos: PGFileAttributeInfo; n_infos: gint; end; PPGFileInputStreamPrivate = ^PGFileInputStreamPrivate; PGFileInputStreamPrivate = ^TGFileInputStreamPrivate; TGFileInputStream = object(TGInputStream) priv1: PGFileInputStreamPrivate; end; TGFileAttributeInfo = record name: Pgchar; type_: TGFileAttributeType; flags: TGFileAttributeInfoFlags; end; TGFileAttributeMatcher = object end; PPGFileDescriptorBased = ^PGFileDescriptorBased; PGFileDescriptorBased = ^TGFileDescriptorBased; TGFileDescriptorBased = object end; PPGFileDescriptorBasedIface = ^PGFileDescriptorBasedIface; PGFileDescriptorBasedIface = ^TGFileDescriptorBasedIface; TGFileDescriptorBasedIface = object g_iface: TGTypeInterface; get_fd: function(fd_based: PGFileDescriptorBased): gint; cdecl; end; TGFileEnumeratorPrivate = record end; PPGFileEnumeratorClass = ^PGFileEnumeratorClass; PGFileEnumeratorClass = ^TGFileEnumeratorClass; TGFileEnumeratorClass = object parent_class: TGObjectClass; next_file: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; close_fn: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; next_files_async: procedure(enumerator: PGFileEnumerator; num_files: gint; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; next_files_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): PGList; cdecl; close_async: procedure(enumerator: PGFileEnumerator; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; TGFileIOStreamPrivate = record end; PPGIOStreamClass = ^PGIOStreamClass; PGIOStreamClass = ^TGIOStreamClass; TGIOStreamClass = object parent_class: TGObjectClass; get_input_stream: function(stream: PGIOStream): PGInputStream; cdecl; get_output_stream: function(stream: PGIOStream): PGOutputStream; cdecl; close_fn: function(stream: PGIOStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; close_async: procedure(stream: PGIOStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; close_finish: function(stream: PGIOStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; _g_reserved10: procedure; cdecl; end; PPGFileIOStreamClass = ^PGFileIOStreamClass; PGFileIOStreamClass = ^TGFileIOStreamClass; TGFileIOStreamClass = object parent_class: TGIOStreamClass; tell: function(stream: PGFileIOStream): gint64; cdecl; can_seek: function(stream: PGFileIOStream): gboolean; cdecl; seek: function(stream: PGFileIOStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(stream: PGFileIOStream): gboolean; cdecl; truncate_fn: function(stream: PGFileIOStream; size: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileIOStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileIOStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileIOStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; get_etag: function(stream: PGFileIOStream): Pgchar; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGLoadableIcon = ^PGLoadableIcon; PGLoadableIcon = ^TGLoadableIcon; TGLoadableIcon = object end; PPGFileIcon = ^PGFileIcon; PGFileIcon = ^TGFileIcon; TGFileIcon = object(TGObject) end; PPGFileIconClass = ^PGFileIconClass; PGFileIconClass = ^TGFileIconClass; TGFileIconClass = object end; PPGFileIface = ^PGFileIface; PGFileIface = ^TGFileIface; TGFileIface = object g_iface: TGTypeInterface; dup: function(file_: PGFile): PGFile; cdecl; hash: function(file_: PGFile): guint; cdecl; equal: function(file1: PGFile; file2: PGFile): gboolean; cdecl; is_native: function(file_: PGFile): gboolean; cdecl; has_uri_scheme: function(file_: PGFile; uri_scheme: Pgchar): gboolean; cdecl; get_uri_scheme: function(file_: PGFile): Pgchar; cdecl; get_basename: function(file_: PGFile): Pgchar; cdecl; get_path: function(file_: PGFile): Pgchar; cdecl; get_uri: function(file_: PGFile): Pgchar; cdecl; get_parse_name: function(file_: PGFile): Pgchar; cdecl; get_parent: function(file_: PGFile): PGFile; cdecl; prefix_matches: function(prefix: PGFile; file_: PGFile): gboolean; cdecl; get_relative_path: function(parent: PGFile; descendant: PGFile): Pgchar; cdecl; resolve_relative_path: function(file_: PGFile; relative_path: Pgchar): PGFile; cdecl; get_child_for_display_name: function(file_: PGFile; display_name: Pgchar; error: PPGError): PGFile; cdecl; enumerate_children: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileEnumerator; cdecl; enumerate_children_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; enumerate_children_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileEnumerator; cdecl; query_info: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; query_filesystem_info: function(file_: PGFile; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_filesystem_info_async: procedure(file_: PGFile; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_filesystem_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; find_enclosing_mount: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGMount; cdecl; find_enclosing_mount_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; find_enclosing_mount_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGMount; cdecl; set_display_name: function(file_: PGFile; display_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGFile; cdecl; set_display_name_async: procedure(file_: PGFile; display_name: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; set_display_name_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFile; cdecl; query_settable_attributes: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; _query_settable_attributes_async: procedure; cdecl; _query_settable_attributes_finish: procedure; cdecl; query_writable_namespaces: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; _query_writable_namespaces_async: procedure; cdecl; _query_writable_namespaces_finish: procedure; cdecl; set_attribute: function(file_: PGFile; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; set_attributes_from_info: function(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; set_attributes_async: procedure(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; set_attributes_finish: function(file_: PGFile; result_: PGAsyncResult; info: PPGFileInfo; error: PPGError): gboolean; cdecl; read_fn: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileInputStream; cdecl; read_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; read_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInputStream; cdecl; append_to: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; append_to_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; append_to_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; create: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; create_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; create_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; replace: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; replace_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; replace_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; delete_file: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; delete_file_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; delete_file_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; trash: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _trash_async: procedure; cdecl; _trash_finish: procedure; cdecl; make_directory: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _make_directory_async: procedure; cdecl; _make_directory_finish: procedure; cdecl; make_symbolic_link: function(file_: PGFile; symlink_value: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; _make_symbolic_link_async: procedure; cdecl; _make_symbolic_link_finish: procedure; cdecl; copy: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; copy_async: procedure(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; io_priority: gint; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; copy_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): gboolean; cdecl; move: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; _move_async: procedure; cdecl; _move_finish: procedure; cdecl; mount_mountable: procedure(file_: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): PGFile; cdecl; unmount_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; mount_enclosing_volume: procedure(location: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_enclosing_volume_finish: function(location: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; monitor_dir: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; monitor_file: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; open_readwrite: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; open_readwrite_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; open_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; create_readwrite: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; create_readwrite_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; create_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; replace_readwrite: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; replace_readwrite_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; replace_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; start_mountable: procedure(file_: PGFile; flags: TGDriveStartFlags; start_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; start_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; stop_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; stop_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; supports_thread_contexts: gboolean; unmount_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; poll_mountable: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; poll_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGFileInfoClass = ^PGFileInfoClass; PGFileInfoClass = ^TGFileInfoClass; TGFileInfoClass = object end; TGFileInputStreamPrivate = record end; PPGFileInputStreamClass = ^PGFileInputStreamClass; PGFileInputStreamClass = ^TGFileInputStreamClass; TGFileInputStreamClass = object parent_class: TGInputStreamClass; tell: function(stream: PGFileInputStream): gint64; cdecl; can_seek: function(stream: PGFileInputStream): gboolean; cdecl; seek: function(stream: PGFileInputStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileInputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileInputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileInputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFileMonitorPrivate = record end; PPGFileMonitorClass = ^PGFileMonitorClass; PGFileMonitorClass = ^TGFileMonitorClass; TGFileMonitorClass = object parent_class: TGObjectClass; changed: procedure(monitor: PGFileMonitor; file_: PGFile; other_file: PGFile; event_type: TGFileMonitorEvent); cdecl; cancel: function(monitor: PGFileMonitor): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGFileOutputStreamPrivate = record end; PPGFileOutputStreamClass = ^PGFileOutputStreamClass; PGFileOutputStreamClass = ^TGFileOutputStreamClass; TGFileOutputStreamClass = object parent_class: TGOutputStreamClass; tell: function(stream: PGFileOutputStream): gint64; cdecl; can_seek: function(stream: PGFileOutputStream): gboolean; cdecl; seek: function(stream: PGFileOutputStream; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(stream: PGFileOutputStream): gboolean; cdecl; truncate_fn: function(stream: PGFileOutputStream; size: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; query_info: function(stream: PGFileOutputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; query_info_async: procedure(stream: PGFileOutputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; query_info_finish: function(stream: PGFileOutputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; get_etag: function(stream: PGFileOutputStream): Pgchar; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGFilenameCompleter = ^PGFilenameCompleter; PGFilenameCompleter = ^TGFilenameCompleter; TGFilenameCompleter = object(TGObject) end; PPGFilenameCompleterClass = ^PGFilenameCompleterClass; PGFilenameCompleterClass = ^TGFilenameCompleterClass; TGFilenameCompleterClass = object parent_class: TGObjectClass; got_completion_data: procedure(filename_completer: PGFilenameCompleter); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; end; PPGFilesystemPreviewType = ^PGFilesystemPreviewType; PGFilesystemPreviewType = ^TGFilesystemPreviewType; PPGIOErrorEnum = ^PGIOErrorEnum; PGIOErrorEnum = ^TGIOErrorEnum; PPGIOExtension = ^PGIOExtension; PGIOExtension = ^TGIOExtension; TGIOExtension = object end; PPGIOExtensionPoint = ^PGIOExtensionPoint; PGIOExtensionPoint = ^TGIOExtensionPoint; TGIOExtensionPoint = object end; PPGIOModule = ^PGIOModule; PGIOModule = ^TGIOModule; TGIOModule = object(TGTypeModule) end; PPGIOModuleClass = ^PGIOModuleClass; PGIOModuleClass = ^TGIOModuleClass; TGIOModuleClass = object end; PPGIOModuleScope = ^PGIOModuleScope; PGIOModuleScope = ^TGIOModuleScope; PPGIOModuleScopeFlags = ^PGIOModuleScopeFlags; PGIOModuleScopeFlags = ^TGIOModuleScopeFlags; TGIOModuleScope = object end; PPGIOSchedulerJob = ^PGIOSchedulerJob; PGIOSchedulerJob = ^TGIOSchedulerJob; TGIOSchedulerJob = object end; TGIOSchedulerJobFunc = function(job: PGIOSchedulerJob; cancellable: PGCancellable; user_data: gpointer): gboolean; cdecl; TGIOStreamPrivate = record end; PPGIOStreamAdapter = ^PGIOStreamAdapter; PGIOStreamAdapter = ^TGIOStreamAdapter; TGIOStreamAdapter = record end; PPGIconIface = ^PGIconIface; PGIconIface = ^TGIconIface; TGIconIface = object g_iface: TGTypeInterface; hash: function(icon: PGIcon): guint; cdecl; equal: function(icon1: PGIcon; icon2: PGIcon): gboolean; cdecl; to_tokens: function(icon: PGIcon; tokens: Pgpointer; out_version: Pgint): gboolean; cdecl; from_tokens: function(tokens: PPgchar; num_tokens: gint; version: gint; error: PPGError): PGIcon; cdecl; end; PPGInetAddress = ^PGInetAddress; PGInetAddress = ^TGInetAddress; PPGSocketFamily = ^PGSocketFamily; PGSocketFamily = ^TGSocketFamily; PPGInetAddressPrivate = ^PGInetAddressPrivate; PGInetAddressPrivate = ^TGInetAddressPrivate; TGInetAddress = object(TGObject) priv: PGInetAddressPrivate; end; TGInetAddressPrivate = record end; PPGInetAddressClass = ^PGInetAddressClass; PGInetAddressClass = ^TGInetAddressClass; TGInetAddressClass = object parent_class: TGObjectClass; to_string: function(address: PGInetAddress): Pgchar; cdecl; to_bytes: function(address: PGInetAddress): Pguint8; cdecl; end; PPGInetAddressMask = ^PGInetAddressMask; PGInetAddressMask = ^TGInetAddressMask; PPGInetAddressMaskPrivate = ^PGInetAddressMaskPrivate; PGInetAddressMaskPrivate = ^TGInetAddressMaskPrivate; TGInetAddressMask = object(TGObject) priv: PGInetAddressMaskPrivate; end; TGInetAddressMaskPrivate = record end; PPGInetAddressMaskClass = ^PGInetAddressMaskClass; PGInetAddressMaskClass = ^TGInetAddressMaskClass; TGInetAddressMaskClass = object parent_class: TGObjectClass; end; PPGSocketConnectable = ^PGSocketConnectable; PGSocketConnectable = ^TGSocketConnectable; PPGSocketAddressEnumerator = ^PGSocketAddressEnumerator; PGSocketAddressEnumerator = ^TGSocketAddressEnumerator; TGSocketConnectable = object end; PPGSocketAddress = ^PGSocketAddress; PGSocketAddress = ^TGSocketAddress; TGSocketAddress = object(TGObject) end; PPGInetSocketAddress = ^PGInetSocketAddress; PGInetSocketAddress = ^TGInetSocketAddress; PPGInetSocketAddressPrivate = ^PGInetSocketAddressPrivate; PGInetSocketAddressPrivate = ^TGInetSocketAddressPrivate; TGInetSocketAddress = object(TGSocketAddress) priv: PGInetSocketAddressPrivate; end; TGInetSocketAddressPrivate = record end; PPGSocketAddressClass = ^PGSocketAddressClass; PGSocketAddressClass = ^TGSocketAddressClass; TGSocketAddressClass = object parent_class: TGObjectClass; get_family: function(address: PGSocketAddress): TGSocketFamily; cdecl; get_native_size: function(address: PGSocketAddress): gssize; cdecl; to_native: function(address: PGSocketAddress; dest: gpointer; destlen: gsize; error: PPGError): gboolean; cdecl; end; PPGInetSocketAddressClass = ^PGInetSocketAddressClass; PGInetSocketAddressClass = ^TGInetSocketAddressClass; TGInetSocketAddressClass = object parent_class: TGSocketAddressClass; end; PPGInitableIface = ^PGInitableIface; PGInitableIface = ^TGInitableIface; TGInitableIface = object g_iface: TGTypeInterface; init: function(initable: PGInitable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; end; TGInputStreamPrivate = record end; PPGInputVector = ^PGInputVector; PGInputVector = ^TGInputVector; TGInputVector = record buffer: gpointer; size: gsize; end; PPGLoadableIconIface = ^PGLoadableIconIface; PGLoadableIconIface = ^TGLoadableIconIface; TGLoadableIconIface = object g_iface: TGTypeInterface; load: function(icon: PGLoadableIcon; size: gint; type_: PPgchar; cancellable: PGCancellable; error: PPGError): PGInputStream; cdecl; load_async: procedure(icon: PGLoadableIcon; size: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; load_finish: function(icon: PGLoadableIcon; res: PGAsyncResult; type_: PPgchar; error: PPGError): PGInputStream; cdecl; end; PPGMemoryInputStream = ^PGMemoryInputStream; PGMemoryInputStream = ^TGMemoryInputStream; PPGMemoryInputStreamPrivate = ^PGMemoryInputStreamPrivate; PGMemoryInputStreamPrivate = ^TGMemoryInputStreamPrivate; TGMemoryInputStream = object(TGInputStream) priv1: PGMemoryInputStreamPrivate; end; TGMemoryInputStreamPrivate = record end; PPGMemoryInputStreamClass = ^PGMemoryInputStreamClass; PGMemoryInputStreamClass = ^TGMemoryInputStreamClass; TGMemoryInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; TGReallocFunc = function(data: gpointer; size: gsize): gpointer; cdecl; PPGMemoryOutputStream = ^PGMemoryOutputStream; PGMemoryOutputStream = ^TGMemoryOutputStream; PPGReallocFunc = ^PGReallocFunc; PGReallocFunc = ^TGReallocFunc; PPGMemoryOutputStreamPrivate = ^PGMemoryOutputStreamPrivate; PGMemoryOutputStreamPrivate = ^TGMemoryOutputStreamPrivate; TGMemoryOutputStream = object(TGOutputStream) priv1: PGMemoryOutputStreamPrivate; end; TGMemoryOutputStreamPrivate = record end; PPGMemoryOutputStreamClass = ^PGMemoryOutputStreamClass; PGMemoryOutputStreamClass = ^TGMemoryOutputStreamClass; TGMemoryOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGMenu = ^PGMenu; PGMenu = ^TGMenu; PPGMenuItem = ^PGMenuItem; PGMenuItem = ^TGMenuItem; TGMenu = object(TGMenuModel) end; TGMenuItem = object(TGObject) end; PPGMenuAttributeIterPrivate = ^PGMenuAttributeIterPrivate; PGMenuAttributeIterPrivate = ^TGMenuAttributeIterPrivate; TGMenuAttributeIter = object(TGObject) priv: PGMenuAttributeIterPrivate; end; TGMenuAttributeIterPrivate = record end; PPGMenuAttributeIterClass = ^PGMenuAttributeIterClass; PGMenuAttributeIterClass = ^TGMenuAttributeIterClass; TGMenuAttributeIterClass = object parent_class: TGObjectClass; get_next: function(iter: PGMenuAttributeIter; out_name: PPgchar; value: PPGVariant): gboolean; cdecl; end; PPGMenuLinkIterPrivate = ^PGMenuLinkIterPrivate; PGMenuLinkIterPrivate = ^TGMenuLinkIterPrivate; TGMenuLinkIter = object(TGObject) priv: PGMenuLinkIterPrivate; end; TGMenuLinkIterPrivate = record end; PPGMenuLinkIterClass = ^PGMenuLinkIterClass; PGMenuLinkIterClass = ^TGMenuLinkIterClass; TGMenuLinkIterClass = object parent_class: TGObjectClass; get_next: function(iter: PGMenuLinkIter; out_link: PPgchar; value: PPGMenuModel): gboolean; cdecl; end; TGMenuModelPrivate = record end; PPGMenuModelClass = ^PGMenuModelClass; PGMenuModelClass = ^TGMenuModelClass; TGMenuModelClass = object parent_class: TGObjectClass; is_mutable: function(model: PGMenuModel): gboolean; cdecl; get_n_items: function(model: PGMenuModel): gint; cdecl; get_item_attributes: procedure(model: PGMenuModel; item_index: gint; attributes: PPGHashTable); cdecl; iterate_item_attributes: function(model: PGMenuModel; item_index: gint): PGMenuAttributeIter; cdecl; get_item_attribute_value: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; get_item_links: procedure(model: PGMenuModel; item_index: gint; links: PPGHashTable); cdecl; iterate_item_links: function(model: PGMenuModel; item_index: gint): PGMenuLinkIter; cdecl; get_item_link: function(model: PGMenuModel; item_index: gint; link: Pgchar): PGMenuModel; cdecl; end; TGVolume = object changed: procedure; cdecl; removed: procedure; cdecl; end; PPGMountIface = ^PGMountIface; PGMountIface = ^TGMountIface; TGMountIface = object g_iface: TGTypeInterface; changed: procedure(mount: PGMount); cdecl; unmounted: procedure(mount: PGMount); cdecl; get_root: function(mount: PGMount): PGFile; cdecl; get_name: function(mount: PGMount): Pgchar; cdecl; get_icon: function(mount: PGMount): PGIcon; cdecl; get_uuid: function(mount: PGMount): Pgchar; cdecl; get_volume: function(mount: PGMount): PGVolume; cdecl; get_drive: function(mount: PGMount): PGDrive; cdecl; can_unmount: function(mount: PGMount): gboolean; cdecl; can_eject: function(mount: PGMount): gboolean; cdecl; unmount: procedure(mount: PGMount; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject: procedure(mount: PGMount; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; remount: procedure(mount: PGMount; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; remount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; guess_content_type: procedure(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; guess_content_type_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; guess_content_type_sync: function(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; pre_unmount: procedure(mount: PGMount); cdecl; unmount_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; unmount_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_default_location: function(mount: PGMount): PGFile; cdecl; get_sort_key: function(mount: PGMount): Pgchar; cdecl; get_symbolic_icon: function(mount: PGMount): PGIcon; cdecl; end; TGMountOperationPrivate = record end; PPGMountOperationClass = ^PGMountOperationClass; PGMountOperationClass = ^TGMountOperationClass; TGMountOperationClass = object parent_class: TGObjectClass; ask_password: procedure(op: PGMountOperation; message: Pgchar; default_user: Pgchar; default_domain: Pgchar; flags: TGAskPasswordFlags); cdecl; ask_question: procedure(op: PGMountOperation; message: Pgchar; choices: Pgchar); cdecl; reply: procedure(op: PGMountOperation; result_: TGMountOperationResult); cdecl; aborted: procedure(op: PGMountOperation); cdecl; show_processes: procedure(op: PGMountOperation; message: Pgchar; processes: Pgpointer; choices: Pgchar); cdecl; show_unmount_progress: procedure(op: PGMountOperation; message: Pgchar; time_left: gint64; bytes_left: gint64); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; end; PPGVolumeMonitor = ^PGVolumeMonitor; PGVolumeMonitor = ^TGVolumeMonitor; TGVolumeMonitor = object(TGObject) priv: gpointer; end; PPGNativeVolumeMonitor = ^PGNativeVolumeMonitor; PGNativeVolumeMonitor = ^TGNativeVolumeMonitor; TGNativeVolumeMonitor = object(TGVolumeMonitor) end; PPGVolumeMonitorClass = ^PGVolumeMonitorClass; PGVolumeMonitorClass = ^TGVolumeMonitorClass; TGVolumeMonitorClass = object parent_class: TGObjectClass; volume_added: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; volume_removed: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; volume_changed: procedure(volume_monitor: PGVolumeMonitor; volume: PGVolume); cdecl; mount_added: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_removed: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_pre_unmount: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; mount_changed: procedure(volume_monitor: PGVolumeMonitor; mount: PGMount); cdecl; drive_connected: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_disconnected: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_changed: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; is_supported: function: gboolean; cdecl; get_connected_drives: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_volumes: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_mounts: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; get_volume_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGVolume; cdecl; get_mount_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGMount; cdecl; adopt_orphan_mount: function(mount: PGMount; volume_monitor: PGVolumeMonitor): PGVolume; cdecl; drive_eject_button: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; drive_stop_button: procedure(volume_monitor: PGVolumeMonitor; drive: PGDrive); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGNativeVolumeMonitorClass = ^PGNativeVolumeMonitorClass; PGNativeVolumeMonitorClass = ^TGNativeVolumeMonitorClass; TGNativeVolumeMonitorClass = object parent_class: TGVolumeMonitorClass; get_mount_for_mount_path: function(mount_path: Pgchar; cancellable: PGCancellable): PGMount; cdecl; end; PPGNetworkAddress = ^PGNetworkAddress; PGNetworkAddress = ^TGNetworkAddress; PPGNetworkAddressPrivate = ^PGNetworkAddressPrivate; PGNetworkAddressPrivate = ^TGNetworkAddressPrivate; TGNetworkAddress = object(TGObject) priv: PGNetworkAddressPrivate; end; TGNetworkAddressPrivate = record end; PPGNetworkAddressClass = ^PGNetworkAddressClass; PGNetworkAddressClass = ^TGNetworkAddressClass; TGNetworkAddressClass = object parent_class: TGObjectClass; end; PPGNetworkMonitor = ^PGNetworkMonitor; PGNetworkMonitor = ^TGNetworkMonitor; TGNetworkMonitor = object network_changed: procedure(available: gboolean); cdecl; end; PPGNetworkMonitorInterface = ^PGNetworkMonitorInterface; PGNetworkMonitorInterface = ^TGNetworkMonitorInterface; TGNetworkMonitorInterface = object g_iface: TGTypeInterface; network_changed: procedure(monitor: PGNetworkMonitor; available: gboolean); cdecl; can_reach: function(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_reach_async: procedure(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; can_reach_finish: function(monitor: PGNetworkMonitor; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; end; PPGNetworkService = ^PGNetworkService; PGNetworkService = ^TGNetworkService; PPGNetworkServicePrivate = ^PGNetworkServicePrivate; PGNetworkServicePrivate = ^TGNetworkServicePrivate; TGNetworkService = object(TGObject) priv: PGNetworkServicePrivate; end; TGNetworkServicePrivate = record end; PPGNetworkServiceClass = ^PGNetworkServiceClass; PGNetworkServiceClass = ^TGNetworkServiceClass; TGNetworkServiceClass = object parent_class: TGObjectClass; end; TGOutputStreamPrivate = record end; PPGOutputVector = ^PGOutputVector; PGOutputVector = ^TGOutputVector; TGOutputVector = record buffer: Pgpointer; size: gsize; end; PPGPermission = ^PGPermission; PGPermission = ^TGPermission; PPGPermissionPrivate = ^PGPermissionPrivate; PGPermissionPrivate = ^TGPermissionPrivate; TGPermission = object(TGObject) priv: PGPermissionPrivate; end; TGPermissionPrivate = record end; PPGPermissionClass = ^PGPermissionClass; PGPermissionClass = ^TGPermissionClass; TGPermissionClass = object parent_class: TGObjectClass; acquire: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; acquire_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; acquire_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; release: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; release_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; release_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; reserved: array [0..15] of gpointer; end; PPGPollableInputStreamInterface = ^PGPollableInputStreamInterface; PGPollableInputStreamInterface = ^TGPollableInputStreamInterface; TGPollableInputStreamInterface = object g_iface: TGTypeInterface; can_poll: function(stream: PGPollableInputStream): gboolean; cdecl; is_readable: function(stream: PGPollableInputStream): gboolean; cdecl; create_source: function(stream: PGPollableInputStream; cancellable: PGCancellable): PGSource; cdecl; read_nonblocking: function(stream: PGPollableInputStream; buffer: Pgpointer; count: gsize; error: PPGError): gssize; cdecl; end; PPGPollableOutputStreamInterface = ^PGPollableOutputStreamInterface; PGPollableOutputStreamInterface = ^TGPollableOutputStreamInterface; TGPollableOutputStreamInterface = object g_iface: TGTypeInterface; can_poll: function(stream: PGPollableOutputStream): gboolean; cdecl; is_writable: function(stream: PGPollableOutputStream): gboolean; cdecl; create_source: function(stream: PGPollableOutputStream; cancellable: PGCancellable): PGSource; cdecl; write_nonblocking: function(stream: PGPollableOutputStream; buffer: Pguint8; count: gsize; error: PPGError): gssize; cdecl; end; TGPollableSourceFunc = function(pollable_stream: PGObject; user_data: gpointer): gboolean; cdecl; PPGProxy = ^PGProxy; PGProxy = ^TGProxy; PPGProxyAddress = ^PGProxyAddress; PGProxyAddress = ^TGProxyAddress; TGProxy = object end; PPGProxyAddressPrivate = ^PGProxyAddressPrivate; PGProxyAddressPrivate = ^TGProxyAddressPrivate; TGProxyAddress = object(TGInetSocketAddress) priv1: PGProxyAddressPrivate; end; TGProxyAddressPrivate = record end; PPGProxyAddressClass = ^PGProxyAddressClass; PGProxyAddressClass = ^TGProxyAddressClass; TGProxyAddressClass = object parent_class: TGInetSocketAddressClass; end; PPGProxyResolver = ^PGProxyResolver; PGProxyResolver = ^TGProxyResolver; TGProxyResolver = object end; TGSocketAddressEnumerator = object(TGObject) end; PPGProxyAddressEnumeratorPrivate = ^PGProxyAddressEnumeratorPrivate; PGProxyAddressEnumeratorPrivate = ^TGProxyAddressEnumeratorPrivate; TGProxyAddressEnumeratorPrivate = record end; PPGProxyAddressEnumerator = ^PGProxyAddressEnumerator; PGProxyAddressEnumerator = ^TGProxyAddressEnumerator; TGProxyAddressEnumerator = object(TGSocketAddressEnumerator) priv: PGProxyAddressEnumeratorPrivate; end; PPGSocketAddressEnumeratorClass = ^PGSocketAddressEnumeratorClass; PGSocketAddressEnumeratorClass = ^TGSocketAddressEnumeratorClass; TGSocketAddressEnumeratorClass = object parent_class: TGObjectClass; next: function(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; error: PPGError): PGSocketAddress; cdecl; next_async: procedure(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; next_finish: function(enumerator: PGSocketAddressEnumerator; result_: PGAsyncResult; error: PPGError): PGSocketAddress; cdecl; end; PPGProxyAddressEnumeratorClass = ^PGProxyAddressEnumeratorClass; PGProxyAddressEnumeratorClass = ^TGProxyAddressEnumeratorClass; TGProxyAddressEnumeratorClass = object parent_class: TGSocketAddressEnumeratorClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; PPGProxyInterface = ^PGProxyInterface; PGProxyInterface = ^TGProxyInterface; TGProxyInterface = object g_iface: TGTypeInterface; connect: function(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; connect_async: procedure(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; connect_finish: function(proxy: PGProxy; result_: PGAsyncResult; error: PPGError): PGIOStream; cdecl; supports_hostname: function(proxy: PGProxy): gboolean; cdecl; end; PPGProxyResolverInterface = ^PGProxyResolverInterface; PGProxyResolverInterface = ^TGProxyResolverInterface; TGProxyResolverInterface = object g_iface: TGTypeInterface; is_supported: function(resolver: PGProxyResolver): gboolean; cdecl; lookup: function(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; lookup_async: procedure(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_finish: function(resolver: PGProxyResolver; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; end; PPGRemoteActionGroupInterface = ^PGRemoteActionGroupInterface; PGRemoteActionGroupInterface = ^TGRemoteActionGroupInterface; TGRemoteActionGroupInterface = object g_iface: TGTypeInterface; activate_action_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; parameter: PGVariant; platform_data: PGVariant); cdecl; change_action_state_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; value: PGVariant; platform_data: PGVariant); cdecl; end; PPGResolver = ^PGResolver; PGResolver = ^TGResolver; PPGResolverRecordType = ^PGResolverRecordType; PGResolverRecordType = ^TGResolverRecordType; PPGResolverPrivate = ^PGResolverPrivate; PGResolverPrivate = ^TGResolverPrivate; TGResolver = object(TGObject) priv: PGResolverPrivate; end; TGResolverPrivate = record end; PPGResolverClass = ^PGResolverClass; PGResolverClass = ^TGResolverClass; TGResolverClass = object parent_class: TGObjectClass; reload: procedure(resolver: PGResolver); cdecl; lookup_by_name: function(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_by_name_async: procedure(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_by_name_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; lookup_by_address: function(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; lookup_by_address_async: procedure(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_by_address_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): Pgchar; cdecl; lookup_service: function(resolver: PGResolver; rrname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_service_async: procedure(resolver: PGResolver; rrname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_service_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; lookup_records: function(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_records_async: procedure(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_records_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGResolverError = ^PGResolverError; PGResolverError = ^TGResolverError; PPGResource = ^PGResource; PGResource = ^TGResource; PPGResourceLookupFlags = ^PGResourceLookupFlags; PGResourceLookupFlags = ^TGResourceLookupFlags; TGResource = object end; PPGResourceError = ^PGResourceError; PGResourceError = ^TGResourceError; PPGResourceFlags = ^PGResourceFlags; PGResourceFlags = ^TGResourceFlags; PPGSeekableIface = ^PGSeekableIface; PGSeekableIface = ^TGSeekableIface; TGSeekableIface = object g_iface: TGTypeInterface; tell: function(seekable: PGSeekable): gint64; cdecl; can_seek: function(seekable: PGSeekable): gboolean; cdecl; seek: function(seekable: PGSeekable; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; can_truncate: function(seekable: PGSeekable): gboolean; cdecl; truncate_fn: function(seekable: PGSeekable; offset: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; end; PPGSettings = ^PGSettings; PGSettings = ^TGSettings; PPGSettingsSchema = ^PGSettingsSchema; PGSettingsSchema = ^TGSettingsSchema; PPGSettingsBackend = ^PGSettingsBackend; PGSettingsBackend = ^TGSettingsBackend; PPGSettingsBindFlags = ^PGSettingsBindFlags; PGSettingsBindFlags = ^TGSettingsBindFlags; PPGSettingsBindGetMapping = ^PGSettingsBindGetMapping; PGSettingsBindGetMapping = ^TGSettingsBindGetMapping; TGSettingsBindGetMapping = function(value: PGValue; variant: PGVariant; user_data: gpointer): gboolean; cdecl; PPGSettingsBindSetMapping = ^PGSettingsBindSetMapping; PGSettingsBindSetMapping = ^TGSettingsBindSetMapping; TGSettingsBindSetMapping = function(value: PGValue; expected_type: PGVariantType; user_data: gpointer): PGVariant; cdecl; PPGSettingsGetMapping = ^PGSettingsGetMapping; PGSettingsGetMapping = ^TGSettingsGetMapping; TGSettingsGetMapping = function(value: PGVariant; result_: Pgpointer; user_data: gpointer): gboolean; cdecl; PPGSettingsPrivate = ^PGSettingsPrivate; PGSettingsPrivate = ^TGSettingsPrivate; TGSettings = object(TGObject) priv: PGSettingsPrivate; end; TGSettingsSchema = object end; TGSettingsBackend = record end; TGSettingsPrivate = record end; PPGSettingsClass = ^PGSettingsClass; PGSettingsClass = ^TGSettingsClass; TGSettingsClass = object parent_class: TGObjectClass; writable_changed: procedure(settings: PGSettings; key: Pgchar); cdecl; changed: procedure(settings: PGSettings; key: Pgchar); cdecl; writable_change_event: function(settings: PGSettings; key: TGQuark): gboolean; cdecl; change_event: function(settings: PGSettings; keys: PGQuark; n_keys: gint): gboolean; cdecl; padding: array [0..19] of gpointer; end; PPGSettingsSchemaSource = ^PGSettingsSchemaSource; PGSettingsSchemaSource = ^TGSettingsSchemaSource; TGSettingsSchemaSource = object end; PPGSimpleActionGroup = ^PGSimpleActionGroup; PGSimpleActionGroup = ^TGSimpleActionGroup; PPGSimpleActionGroupPrivate = ^PGSimpleActionGroupPrivate; PGSimpleActionGroupPrivate = ^TGSimpleActionGroupPrivate; TGSimpleActionGroup = object(TGObject) priv: PGSimpleActionGroupPrivate; end; TGSimpleActionGroupPrivate = record end; PPGSimpleActionGroupClass = ^PGSimpleActionGroupClass; PGSimpleActionGroupClass = ^TGSimpleActionGroupClass; TGSimpleActionGroupClass = object parent_class: TGObjectClass; padding: array [0..11] of gpointer; end; PPGSimpleAsyncResult = ^PGSimpleAsyncResult; PGSimpleAsyncResult = ^TGSimpleAsyncResult; PPGSimpleAsyncThreadFunc = ^PGSimpleAsyncThreadFunc; PGSimpleAsyncThreadFunc = ^TGSimpleAsyncThreadFunc; TGSimpleAsyncThreadFunc = procedure(res: PGSimpleAsyncResult; object_: PGObject; cancellable: PGCancellable); cdecl; TGSimpleAsyncResult = object(TGObject) end; PPGSimpleAsyncResultClass = ^PGSimpleAsyncResultClass; PGSimpleAsyncResultClass = ^TGSimpleAsyncResultClass; TGSimpleAsyncResultClass = object end; PPGSimplePermission = ^PGSimplePermission; PGSimplePermission = ^TGSimplePermission; TGSimplePermission = object(TGPermission) end; PPGSimpleProxyResolver = ^PGSimpleProxyResolver; PGSimpleProxyResolver = ^TGSimpleProxyResolver; PPGSimpleProxyResolverPrivate = ^PGSimpleProxyResolverPrivate; PGSimpleProxyResolverPrivate = ^TGSimpleProxyResolverPrivate; TGSimpleProxyResolver = object(TGObject) priv: PGSimpleProxyResolverPrivate; end; TGSimpleProxyResolverPrivate = record end; PPGSimpleProxyResolverClass = ^PGSimpleProxyResolverClass; PGSimpleProxyResolverClass = ^TGSimpleProxyResolverClass; TGSimpleProxyResolverClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGSocket = ^PGSocket; PGSocket = ^TGSocket; PPGSocketType = ^PGSocketType; PGSocketType = ^TGSocketType; PPGSocketProtocol = ^PGSocketProtocol; PGSocketProtocol = ^TGSocketProtocol; PPGSocketConnection = ^PGSocketConnection; PGSocketConnection = ^TGSocketConnection; PPPGSocketControlMessage = ^PPGSocketControlMessage; PPGSocketControlMessage = ^PGSocketControlMessage; PGSocketControlMessage = ^TGSocketControlMessage; PPGSocketPrivate = ^PGSocketPrivate; PGSocketPrivate = ^TGSocketPrivate; TGSocket = object(TGObject) priv: PGSocketPrivate; end; PPGSocketConnectionPrivate = ^PGSocketConnectionPrivate; PGSocketConnectionPrivate = ^TGSocketConnectionPrivate; TGSocketConnection = object(TGIOStream) priv1: PGSocketConnectionPrivate; end; PPGSocketControlMessagePrivate = ^PGSocketControlMessagePrivate; PGSocketControlMessagePrivate = ^TGSocketControlMessagePrivate; TGSocketControlMessage = object(TGObject) priv: PGSocketControlMessagePrivate; end; TGSocketPrivate = record end; PPGSocketClass = ^PGSocketClass; PGSocketClass = ^TGSocketClass; TGSocketClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; _g_reserved8: procedure; cdecl; _g_reserved9: procedure; cdecl; _g_reserved10: procedure; cdecl; end; PPGSocketClient = ^PGSocketClient; PGSocketClient = ^TGSocketClient; PPGTlsCertificateFlags = ^PGTlsCertificateFlags; PGTlsCertificateFlags = ^TGTlsCertificateFlags; PPGSocketClientPrivate = ^PGSocketClientPrivate; PGSocketClientPrivate = ^TGSocketClientPrivate; TGSocketClient = object(TGObject) priv: PGSocketClientPrivate; end; PPGSocketClientEvent = ^PGSocketClientEvent; PGSocketClientEvent = ^TGSocketClientEvent; TGSocketClientPrivate = record end; PPGSocketClientClass = ^PGSocketClientClass; PGSocketClientClass = ^TGSocketClientClass; TGSocketClientClass = object parent_class: TGObjectClass; event: procedure(client: PGSocketClient; event: TGSocketClientEvent; connectable: PGSocketConnectable; connection: PGIOStream); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; end; PPGSocketConnectableIface = ^PGSocketConnectableIface; PGSocketConnectableIface = ^TGSocketConnectableIface; TGSocketConnectableIface = object g_iface: TGTypeInterface; enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; proxy_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; end; TGSocketConnectionPrivate = record end; PPGSocketConnectionClass = ^PGSocketConnectionClass; PGSocketConnectionClass = ^TGSocketConnectionClass; TGSocketConnectionClass = object parent_class: TGIOStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; TGSocketControlMessagePrivate = record end; PPGSocketControlMessageClass = ^PGSocketControlMessageClass; PGSocketControlMessageClass = ^TGSocketControlMessageClass; TGSocketControlMessageClass = object parent_class: TGObjectClass; get_size: function(message: PGSocketControlMessage): gsize; cdecl; get_level: function(message: PGSocketControlMessage): gint; cdecl; get_type: function(message: PGSocketControlMessage): gint; cdecl; serialize: procedure(message: PGSocketControlMessage; data: gpointer); cdecl; deserialize: function(level: gint; type_: gint; size: gsize; data: gpointer): PGSocketControlMessage; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGSocketListener = ^PGSocketListener; PGSocketListener = ^TGSocketListener; PPGSocketListenerPrivate = ^PGSocketListenerPrivate; PGSocketListenerPrivate = ^TGSocketListenerPrivate; TGSocketListener = object(TGObject) priv: PGSocketListenerPrivate; end; TGSocketListenerPrivate = record end; PPGSocketListenerClass = ^PGSocketListenerClass; PGSocketListenerClass = ^TGSocketListenerClass; TGSocketListenerClass = object parent_class: TGObjectClass; changed: procedure(listener: PGSocketListener); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; PPGSocketMsgFlags = ^PGSocketMsgFlags; PGSocketMsgFlags = ^TGSocketMsgFlags; PPGSocketService = ^PGSocketService; PGSocketService = ^TGSocketService; PPGSocketServicePrivate = ^PGSocketServicePrivate; PGSocketServicePrivate = ^TGSocketServicePrivate; TGSocketService = object(TGSocketListener) priv1: PGSocketServicePrivate; end; TGSocketServicePrivate = record end; PPGSocketServiceClass = ^PGSocketServiceClass; PGSocketServiceClass = ^TGSocketServiceClass; TGSocketServiceClass = object parent_class: TGSocketListenerClass; incoming: function(service: PGSocketService; connection: PGSocketConnection; source_object: PGObject): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; end; TGSocketSourceFunc = function(socket: PGSocket; condition: TGIOCondition; user_data: gpointer): gboolean; cdecl; PPGSrvTarget = ^PGSrvTarget; PGSrvTarget = ^TGSrvTarget; TGSrvTarget = object end; PPGStaticResource = ^PGStaticResource; PGStaticResource = ^TGStaticResource; TGStaticResource = object data: Pguint8; data_len: gsize; resource: PGResource; next: PGStaticResource; padding: gpointer; end; PPGTask = ^PGTask; PGTask = ^TGTask; PPGTaskThreadFunc = ^PGTaskThreadFunc; PGTaskThreadFunc = ^TGTaskThreadFunc; TGTaskThreadFunc = procedure(task: PGTask; source_object: PGObject; task_data: gpointer; cancellable: PGCancellable); cdecl; TGTask = object(TGObject) end; PPGTaskClass = ^PGTaskClass; PGTaskClass = ^TGTaskClass; TGTaskClass = object end; PPGTcpConnection = ^PGTcpConnection; PGTcpConnection = ^TGTcpConnection; PPGTcpConnectionPrivate = ^PGTcpConnectionPrivate; PGTcpConnectionPrivate = ^TGTcpConnectionPrivate; TGTcpConnection = object(TGSocketConnection) priv2: PGTcpConnectionPrivate; end; TGTcpConnectionPrivate = record end; PPGTcpConnectionClass = ^PGTcpConnectionClass; PGTcpConnectionClass = ^TGTcpConnectionClass; TGTcpConnectionClass = object parent_class: TGSocketConnectionClass; end; PPGTcpWrapperConnection = ^PGTcpWrapperConnection; PGTcpWrapperConnection = ^TGTcpWrapperConnection; PPGTcpWrapperConnectionPrivate = ^PGTcpWrapperConnectionPrivate; PGTcpWrapperConnectionPrivate = ^TGTcpWrapperConnectionPrivate; TGTcpWrapperConnection = object(TGTcpConnection) priv3: PGTcpWrapperConnectionPrivate; end; TGTcpWrapperConnectionPrivate = record end; PPGTcpWrapperConnectionClass = ^PGTcpWrapperConnectionClass; PGTcpWrapperConnectionClass = ^TGTcpWrapperConnectionClass; TGTcpWrapperConnectionClass = object parent_class: TGTcpConnectionClass; end; PPGTestDBus = ^PGTestDBus; PGTestDBus = ^TGTestDBus; PPGTestDBusFlags = ^PGTestDBusFlags; PGTestDBusFlags = ^TGTestDBusFlags; TGTestDBus = object(TGObject) end; PPGThemedIcon = ^PGThemedIcon; PGThemedIcon = ^TGThemedIcon; TGThemedIcon = object(TGObject) end; PPGThemedIconClass = ^PGThemedIconClass; PGThemedIconClass = ^TGThemedIconClass; TGThemedIconClass = object end; PPGThreadedSocketService = ^PGThreadedSocketService; PGThreadedSocketService = ^TGThreadedSocketService; PPGThreadedSocketServicePrivate = ^PGThreadedSocketServicePrivate; PGThreadedSocketServicePrivate = ^TGThreadedSocketServicePrivate; TGThreadedSocketService = object(TGSocketService) priv2: PGThreadedSocketServicePrivate; end; TGThreadedSocketServicePrivate = record end; PPGThreadedSocketServiceClass = ^PGThreadedSocketServiceClass; PGThreadedSocketServiceClass = ^TGThreadedSocketServiceClass; TGThreadedSocketServiceClass = object parent_class: TGSocketServiceClass; run: function(service: PGThreadedSocketService; connection: PGSocketConnection; source_object: PGObject): gboolean; cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGTlsAuthenticationMode = ^PGTlsAuthenticationMode; PGTlsAuthenticationMode = ^TGTlsAuthenticationMode; PPGTlsBackend = ^PGTlsBackend; PGTlsBackend = ^TGTlsBackend; PPGTlsDatabase = ^PGTlsDatabase; PGTlsDatabase = ^TGTlsDatabase; TGTlsBackend = object end; PPGTlsCertificate = ^PGTlsCertificate; PGTlsCertificate = ^TGTlsCertificate; PPGTlsInteraction = ^PGTlsInteraction; PGTlsInteraction = ^TGTlsInteraction; PPGTlsDatabaseLookupFlags = ^PGTlsDatabaseLookupFlags; PGTlsDatabaseLookupFlags = ^TGTlsDatabaseLookupFlags; PPGTlsDatabaseVerifyFlags = ^PGTlsDatabaseVerifyFlags; PGTlsDatabaseVerifyFlags = ^TGTlsDatabaseVerifyFlags; PPGTlsDatabasePrivate = ^PGTlsDatabasePrivate; PGTlsDatabasePrivate = ^TGTlsDatabasePrivate; TGTlsDatabase = object(TGObject) priv: PGTlsDatabasePrivate; end; PPGTlsBackendInterface = ^PGTlsBackendInterface; PGTlsBackendInterface = ^TGTlsBackendInterface; TGTlsBackendInterface = object g_iface: TGTypeInterface; supports_tls: function(backend: PGTlsBackend): gboolean; cdecl; get_certificate_type: function: TGType; cdecl; get_client_connection_type: function: TGType; cdecl; get_server_connection_type: function: TGType; cdecl; get_file_database_type: function: TGType; cdecl; get_default_database: function(backend: PGTlsBackend): PGTlsDatabase; cdecl; end; PPGTlsCertificatePrivate = ^PGTlsCertificatePrivate; PGTlsCertificatePrivate = ^TGTlsCertificatePrivate; TGTlsCertificate = object(TGObject) priv: PGTlsCertificatePrivate; end; TGTlsCertificatePrivate = record end; PPGTlsCertificateClass = ^PGTlsCertificateClass; PGTlsCertificateClass = ^TGTlsCertificateClass; TGTlsCertificateClass = object parent_class: TGObjectClass; verify: function(cert: PGTlsCertificate; identity: PGSocketConnectable; trusted_ca: PGTlsCertificate): TGTlsCertificateFlags; cdecl; padding: array [0..7] of gpointer; end; PPGTlsClientConnection = ^PGTlsClientConnection; PGTlsClientConnection = ^TGTlsClientConnection; TGTlsClientConnection = object end; PPGTlsClientConnectionInterface = ^PGTlsClientConnectionInterface; PGTlsClientConnectionInterface = ^TGTlsClientConnectionInterface; TGTlsClientConnectionInterface = object g_iface: TGTypeInterface; end; PPGTlsConnection = ^PGTlsConnection; PGTlsConnection = ^TGTlsConnection; PPGTlsRehandshakeMode = ^PGTlsRehandshakeMode; PGTlsRehandshakeMode = ^TGTlsRehandshakeMode; PPGTlsConnectionPrivate = ^PGTlsConnectionPrivate; PGTlsConnectionPrivate = ^TGTlsConnectionPrivate; TGTlsConnection = object(TGIOStream) priv1: PGTlsConnectionPrivate; end; PPGTlsInteractionResult = ^PGTlsInteractionResult; PGTlsInteractionResult = ^TGTlsInteractionResult; PPGTlsPassword = ^PGTlsPassword; PGTlsPassword = ^TGTlsPassword; PPGTlsInteractionPrivate = ^PGTlsInteractionPrivate; PGTlsInteractionPrivate = ^TGTlsInteractionPrivate; TGTlsInteraction = object(TGObject) priv: PGTlsInteractionPrivate; end; TGTlsConnectionPrivate = record end; PPGTlsConnectionClass = ^PGTlsConnectionClass; PGTlsConnectionClass = ^TGTlsConnectionClass; TGTlsConnectionClass = object parent_class: TGIOStreamClass; accept_certificate: function(connection: PGTlsConnection; peer_cert: PGTlsCertificate; errors: TGTlsCertificateFlags): gboolean; cdecl; handshake: function(conn: PGTlsConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; handshake_async: procedure(conn: PGTlsConnection; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; handshake_finish: function(conn: PGTlsConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; padding: array [0..7] of gpointer; end; TGTlsDatabasePrivate = record end; PPGTlsDatabaseClass = ^PGTlsDatabaseClass; PGTlsDatabaseClass = ^TGTlsDatabaseClass; TGTlsDatabaseClass = object parent_class: TGObjectClass; verify_chain: function(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; error: PPGError): TGTlsCertificateFlags; cdecl; verify_chain_async: procedure(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; verify_chain_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): TGTlsCertificateFlags; cdecl; create_certificate_handle: function(self: PGTlsDatabase; certificate: PGTlsCertificate): Pgchar; cdecl; lookup_certificate_for_handle: function(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_for_handle_async: procedure(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificate_for_handle_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_issuer: function(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; lookup_certificate_issuer_async: procedure(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificate_issuer_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; lookup_certificates_issued_by: function(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGList; cdecl; lookup_certificates_issued_by_async: procedure(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; lookup_certificates_issued_by_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGList; cdecl; padding: array [0..15] of gpointer; end; PPGTlsError = ^PGTlsError; PGTlsError = ^TGTlsError; PPGTlsFileDatabase = ^PGTlsFileDatabase; PGTlsFileDatabase = ^TGTlsFileDatabase; TGTlsFileDatabase = object end; PPGTlsFileDatabaseInterface = ^PGTlsFileDatabaseInterface; PGTlsFileDatabaseInterface = ^TGTlsFileDatabaseInterface; TGTlsFileDatabaseInterface = object g_iface: TGTypeInterface; padding: array [0..7] of gpointer; end; PPGTlsPasswordFlags = ^PGTlsPasswordFlags; PGTlsPasswordFlags = ^TGTlsPasswordFlags; PPGTlsPasswordPrivate = ^PGTlsPasswordPrivate; PGTlsPasswordPrivate = ^TGTlsPasswordPrivate; TGTlsPassword = object(TGObject) priv: PGTlsPasswordPrivate; end; TGTlsInteractionPrivate = record end; PPGTlsInteractionClass = ^PGTlsInteractionClass; PGTlsInteractionClass = ^TGTlsInteractionClass; TGTlsInteractionClass = object parent_class: TGObjectClass; ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; ask_password_async: procedure(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; ask_password_finish: function(interaction: PGTlsInteraction; result_: PGAsyncResult; error: PPGError): TGTlsInteractionResult; cdecl; padding: array [0..23] of gpointer; end; TGTlsPasswordPrivate = record end; PPGTlsPasswordClass = ^PGTlsPasswordClass; PGTlsPasswordClass = ^TGTlsPasswordClass; TGTlsPasswordClass = object parent_class: TGObjectClass; get_value: function(password: PGTlsPassword; length: Pgsize): Pguint8; cdecl; set_value: procedure(password: PGTlsPassword; value: Pguint8; length: gssize; destroy_: TGDestroyNotify); cdecl; get_default_warning: function(password: PGTlsPassword): Pgchar; cdecl; padding: array [0..3] of gpointer; end; PPGTlsServerConnection = ^PGTlsServerConnection; PGTlsServerConnection = ^TGTlsServerConnection; TGTlsServerConnection = object end; PPGTlsServerConnectionInterface = ^PGTlsServerConnectionInterface; PGTlsServerConnectionInterface = ^TGTlsServerConnectionInterface; TGTlsServerConnectionInterface = object g_iface: TGTypeInterface; end; PPGUnixConnection = ^PGUnixConnection; PGUnixConnection = ^TGUnixConnection; PPGUnixConnectionPrivate = ^PGUnixConnectionPrivate; PGUnixConnectionPrivate = ^TGUnixConnectionPrivate; TGUnixConnection = object(TGSocketConnection) priv2: PGUnixConnectionPrivate; end; TGUnixConnectionPrivate = record end; PPGUnixConnectionClass = ^PGUnixConnectionClass; PGUnixConnectionClass = ^TGUnixConnectionClass; TGUnixConnectionClass = object parent_class: TGSocketConnectionClass; end; PPGUnixCredentialsMessage = ^PGUnixCredentialsMessage; PGUnixCredentialsMessage = ^TGUnixCredentialsMessage; PPGUnixCredentialsMessagePrivate = ^PGUnixCredentialsMessagePrivate; PGUnixCredentialsMessagePrivate = ^TGUnixCredentialsMessagePrivate; TGUnixCredentialsMessage = object(TGSocketControlMessage) priv1: PGUnixCredentialsMessagePrivate; end; TGUnixCredentialsMessagePrivate = record end; PPGUnixCredentialsMessageClass = ^PGUnixCredentialsMessageClass; PGUnixCredentialsMessageClass = ^TGUnixCredentialsMessageClass; TGUnixCredentialsMessageClass = object parent_class: TGSocketControlMessageClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; TGUnixFDListPrivate = record end; PPGUnixFDListClass = ^PGUnixFDListClass; PGUnixFDListClass = ^TGUnixFDListClass; TGUnixFDListClass = object parent_class: TGObjectClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixFDMessage = ^PGUnixFDMessage; PGUnixFDMessage = ^TGUnixFDMessage; PPGUnixFDMessagePrivate = ^PGUnixFDMessagePrivate; PGUnixFDMessagePrivate = ^TGUnixFDMessagePrivate; TGUnixFDMessage = object(TGSocketControlMessage) priv1: PGUnixFDMessagePrivate; end; TGUnixFDMessagePrivate = record end; PPGUnixFDMessageClass = ^PGUnixFDMessageClass; PGUnixFDMessageClass = ^TGUnixFDMessageClass; TGUnixFDMessageClass = object parent_class: TGSocketControlMessageClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; end; PPGUnixInputStream = ^PGUnixInputStream; PGUnixInputStream = ^TGUnixInputStream; PPGUnixInputStreamPrivate = ^PGUnixInputStreamPrivate; PGUnixInputStreamPrivate = ^TGUnixInputStreamPrivate; TGUnixInputStream = object(TGInputStream) priv1: PGUnixInputStreamPrivate; end; TGUnixInputStreamPrivate = record end; PPGUnixInputStreamClass = ^PGUnixInputStreamClass; PGUnixInputStreamClass = ^TGUnixInputStreamClass; TGUnixInputStreamClass = object parent_class: TGInputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixMountEntry = ^PGUnixMountEntry; PGUnixMountEntry = ^TGUnixMountEntry; TGUnixMountEntry = record end; PPGUnixMountMonitor = ^PGUnixMountMonitor; PGUnixMountMonitor = ^TGUnixMountMonitor; TGUnixMountMonitor = object(TGObject) end; PPGUnixMountMonitorClass = ^PGUnixMountMonitorClass; PGUnixMountMonitorClass = ^TGUnixMountMonitorClass; TGUnixMountMonitorClass = object end; PPGUnixMountPoint = ^PGUnixMountPoint; PGUnixMountPoint = ^TGUnixMountPoint; TGUnixMountPoint = object end; PPGUnixOutputStream = ^PGUnixOutputStream; PGUnixOutputStream = ^TGUnixOutputStream; PPGUnixOutputStreamPrivate = ^PGUnixOutputStreamPrivate; PGUnixOutputStreamPrivate = ^TGUnixOutputStreamPrivate; TGUnixOutputStream = object(TGOutputStream) priv1: PGUnixOutputStreamPrivate; end; TGUnixOutputStreamPrivate = record end; PPGUnixOutputStreamClass = ^PGUnixOutputStreamClass; PGUnixOutputStreamClass = ^TGUnixOutputStreamClass; TGUnixOutputStreamClass = object parent_class: TGOutputStreamClass; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; end; PPGUnixSocketAddressType = ^PGUnixSocketAddressType; PGUnixSocketAddressType = ^TGUnixSocketAddressType; PPGUnixSocketAddress = ^PGUnixSocketAddress; PGUnixSocketAddress = ^TGUnixSocketAddress; PPGUnixSocketAddressPrivate = ^PGUnixSocketAddressPrivate; PGUnixSocketAddressPrivate = ^TGUnixSocketAddressPrivate; TGUnixSocketAddress = object(TGSocketAddress) priv: PGUnixSocketAddressPrivate; end; TGUnixSocketAddressPrivate = record end; PPGUnixSocketAddressClass = ^PGUnixSocketAddressClass; PGUnixSocketAddressClass = ^TGUnixSocketAddressClass; TGUnixSocketAddressClass = object parent_class: TGSocketAddressClass; end; PPGVfs = ^PGVfs; PGVfs = ^TGVfs; TGVfs = object(TGObject) end; PPGVfsClass = ^PGVfsClass; PGVfsClass = ^TGVfsClass; TGVfsClass = object parent_class: TGObjectClass; is_active: function(vfs: PGVfs): gboolean; cdecl; get_file_for_path: function(vfs: PGVfs; path: Pgchar): PGFile; cdecl; get_file_for_uri: function(vfs: PGVfs; uri: Pgchar): PGFile; cdecl; get_supported_uri_schemes: function(vfs: PGVfs): PPgchar; cdecl; parse_name: function(vfs: PGVfs; parse_name: Pgchar): PGFile; cdecl; local_file_add_info: procedure(vfs: PGVfs; filename: Pgchar; device: guint64; attribute_matcher: PGFileAttributeMatcher; info: PGFileInfo; cancellable: PGCancellable; extra_data: Pgpointer; free_extra_data: PGDestroyNotify); cdecl; add_writable_namespaces: procedure(vfs: PGVfs; list: PGFileAttributeInfoList); cdecl; local_file_set_attributes: function(vfs: PGVfs; filename: Pgchar; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; local_file_removed: procedure(vfs: PGVfs; filename: Pgchar); cdecl; local_file_moved: procedure(vfs: PGVfs; source: Pgchar; dest: Pgchar); cdecl; _g_reserved1: procedure; cdecl; _g_reserved2: procedure; cdecl; _g_reserved3: procedure; cdecl; _g_reserved4: procedure; cdecl; _g_reserved5: procedure; cdecl; _g_reserved6: procedure; cdecl; _g_reserved7: procedure; cdecl; end; PPGVolumeIface = ^PGVolumeIface; PGVolumeIface = ^TGVolumeIface; TGVolumeIface = object g_iface: TGTypeInterface; changed: procedure(volume: PGVolume); cdecl; removed: procedure(volume: PGVolume); cdecl; get_name: function(volume: PGVolume): Pgchar; cdecl; get_icon: function(volume: PGVolume): PGIcon; cdecl; get_uuid: function(volume: PGVolume): Pgchar; cdecl; get_drive: function(volume: PGVolume): PGDrive; cdecl; get_mount: function(volume: PGVolume): PGMount; cdecl; can_mount: function(volume: PGVolume): gboolean; cdecl; can_eject: function(volume: PGVolume): gboolean; cdecl; mount_fn: procedure(volume: PGVolume; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; mount_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; eject: procedure(volume: PGVolume; flags: TGMountUnmountFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_identifier: function(volume: PGVolume; kind: Pgchar): Pgchar; cdecl; enumerate_identifiers: function(volume: PGVolume): PPgchar; cdecl; should_automount: function(volume: PGVolume): gboolean; cdecl; get_activation_root: function(volume: PGVolume): PGFile; cdecl; eject_with_operation: procedure(volume: PGVolume; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; eject_with_operation_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; get_sort_key: function(volume: PGVolume): Pgchar; cdecl; get_symbolic_icon: function(volume: PGVolume): PGIcon; cdecl; end; PPGZlibCompressor = ^PGZlibCompressor; PGZlibCompressor = ^TGZlibCompressor; PPGZlibCompressorFormat = ^PGZlibCompressorFormat; PGZlibCompressorFormat = ^TGZlibCompressorFormat; TGZlibCompressor = object(TGObject) end; PPGZlibCompressorClass = ^PGZlibCompressorClass; PGZlibCompressorClass = ^TGZlibCompressorClass; TGZlibCompressorClass = object parent_class: TGObjectClass; end; PPGZlibDecompressor = ^PGZlibDecompressor; PGZlibDecompressor = ^TGZlibDecompressor; TGZlibDecompressor = object(TGObject) end; PPGZlibDecompressorClass = ^PGZlibDecompressorClass; PGZlibDecompressorClass = ^TGZlibDecompressorClass; TGZlibDecompressorClass = object parent_class: TGObjectClass; end; var g_action_activate: procedure(action: PGAction; parameter: PGVariant); cdecl; g_action_change_state: procedure(action: PGAction; value: PGVariant); cdecl; g_action_get_enabled: function(action: PGAction): gboolean; cdecl; g_action_get_name: function(action: PGAction): Pgchar; cdecl; g_action_get_parameter_type: function(action: PGAction): PGVariantType; cdecl; g_action_get_state: function(action: PGAction): PGVariant; cdecl; g_action_get_state_hint: function(action: PGAction): PGVariant; cdecl; g_action_get_state_type: function(action: PGAction): PGVariantType; cdecl; g_action_get_type: function:TGType; cdecl; g_action_group_action_added: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; g_action_group_action_enabled_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; enabled: gboolean); cdecl; g_action_group_action_removed: procedure(action_group: PGActionGroup; action_name: Pgchar); cdecl; g_action_group_action_state_changed: procedure(action_group: PGActionGroup; action_name: Pgchar; state: PGVariant); cdecl; g_action_group_activate_action: procedure(action_group: PGActionGroup; action_name: Pgchar; parameter: PGVariant); cdecl; g_action_group_change_action_state: procedure(action_group: PGActionGroup; action_name: Pgchar; value: PGVariant); cdecl; g_action_group_get_action_enabled: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; g_action_group_get_action_parameter_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; g_action_group_get_action_state: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; g_action_group_get_action_state_hint: function(action_group: PGActionGroup; action_name: Pgchar): PGVariant; cdecl; g_action_group_get_action_state_type: function(action_group: PGActionGroup; action_name: Pgchar): PGVariantType; cdecl; g_action_group_get_type: function:TGType; cdecl; g_action_group_has_action: function(action_group: PGActionGroup; action_name: Pgchar): gboolean; cdecl; g_action_group_list_actions: function(action_group: PGActionGroup): PPgchar; cdecl; g_action_group_query_action: function(action_group: PGActionGroup; action_name: Pgchar; enabled: Pgboolean; parameter_type: PPGVariantType; state_type: PPGVariantType; state_hint: PPGVariant; state: PPGVariant): gboolean; cdecl; g_action_map_add_action: procedure(action_map: PGActionMap; action: PGAction); cdecl; g_action_map_add_action_entries: procedure(action_map: PGActionMap; entries: PGActionEntry; n_entries: gint; user_data: gpointer); cdecl; g_action_map_get_type: function:TGType; cdecl; g_action_map_lookup_action: function(action_map: PGActionMap; action_name: Pgchar): PGAction; cdecl; g_action_map_remove_action: procedure(action_map: PGActionMap; action_name: Pgchar); cdecl; g_app_info_add_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_can_delete: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_can_remove_supports_type: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_create_from_commandline: function(commandline: Pgchar; application_name: Pgchar; flags: TGAppInfoCreateFlags; error: PPGError): PGAppInfo; cdecl; g_app_info_delete: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_dup: function(appinfo: PGAppInfo): PGAppInfo; cdecl; g_app_info_equal: function(appinfo1: PGAppInfo; appinfo2: PGAppInfo): gboolean; cdecl; g_app_info_get_all: function: PGList; cdecl; g_app_info_get_all_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_commandline: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_default_for_type: function(content_type: Pgchar; must_support_uris: gboolean): PGAppInfo; cdecl; g_app_info_get_default_for_uri_scheme: function(uri_scheme: Pgchar): PGAppInfo; cdecl; g_app_info_get_description: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_display_name: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_executable: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_fallback_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_icon: function(appinfo: PGAppInfo): PGIcon; cdecl; g_app_info_get_id: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_name: function(appinfo: PGAppInfo): Pgchar; cdecl; g_app_info_get_recommended_for_type: function(content_type: Pgchar): PGList; cdecl; g_app_info_get_supported_types: function(appinfo: PGAppInfo): PPgchar; cdecl; g_app_info_get_type: function:TGType; cdecl; g_app_info_launch: function(appinfo: PGAppInfo; files: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_launch_default_for_uri: function(uri: Pgchar; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_launch_uris: function(appinfo: PGAppInfo; uris: PGList; launch_context: PGAppLaunchContext; error: PPGError): gboolean; cdecl; g_app_info_remove_supports_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_reset_type_associations: procedure(content_type: Pgchar); cdecl; g_app_info_set_as_default_for_extension: function(appinfo: PGAppInfo; extension: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_set_as_default_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_set_as_last_used_for_type: function(appinfo: PGAppInfo; content_type: Pgchar; error: PPGError): gboolean; cdecl; g_app_info_should_show: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_supports_files: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_info_supports_uris: function(appinfo: PGAppInfo): gboolean; cdecl; g_app_launch_context_get_display: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; g_app_launch_context_get_environment: function(context: PGAppLaunchContext): PPgchar; cdecl; g_app_launch_context_get_startup_notify_id: function(context: PGAppLaunchContext; info: PGAppInfo; files: PGList): Pgchar; cdecl; g_app_launch_context_get_type: function:TGType; cdecl; g_app_launch_context_launch_failed: procedure(context: PGAppLaunchContext; startup_notify_id: Pgchar); cdecl; g_app_launch_context_new: function: PGAppLaunchContext; cdecl; g_app_launch_context_setenv: procedure(context: PGAppLaunchContext; variable: Pgchar; value: Pgchar); cdecl; g_app_launch_context_unsetenv: procedure(context: PGAppLaunchContext; variable: Pgchar); cdecl; g_application_activate: procedure(application: PGApplication); cdecl; g_application_command_line_create_file_for_arg: function(cmdline: PGApplicationCommandLine; arg: Pgchar): PGFile; cdecl; g_application_command_line_get_arguments: function(cmdline: PGApplicationCommandLine; argc: Pgint): PPgchar; cdecl; g_application_command_line_get_cwd: function(cmdline: PGApplicationCommandLine): Pgchar; cdecl; g_application_command_line_get_environ: function(cmdline: PGApplicationCommandLine): PPgchar; cdecl; g_application_command_line_get_exit_status: function(cmdline: PGApplicationCommandLine): gint; cdecl; g_application_command_line_get_is_remote: function(cmdline: PGApplicationCommandLine): gboolean; cdecl; g_application_command_line_get_platform_data: function(cmdline: PGApplicationCommandLine): PGVariant; cdecl; g_application_command_line_get_stdin: function(cmdline: PGApplicationCommandLine): PGInputStream; cdecl; g_application_command_line_get_type: function:TGType; cdecl; g_application_command_line_getenv: function(cmdline: PGApplicationCommandLine; name: Pgchar): Pgchar; cdecl; g_application_command_line_print: procedure(cmdline: PGApplicationCommandLine; format: Pgchar; args: array of const); cdecl; g_application_command_line_printerr: procedure(cmdline: PGApplicationCommandLine; format: Pgchar; args: array of const); cdecl; g_application_command_line_set_exit_status: procedure(cmdline: PGApplicationCommandLine; exit_status: gint); cdecl; g_application_get_application_id: function(application: PGApplication): Pgchar; cdecl; g_application_get_dbus_connection: function(application: PGApplication): PGDBusConnection; cdecl; g_application_get_dbus_object_path: function(application: PGApplication): Pgchar; cdecl; g_application_get_default: function: PGApplication; cdecl; g_application_get_flags: function(application: PGApplication): TGApplicationFlags; cdecl; g_application_get_inactivity_timeout: function(application: PGApplication): guint; cdecl; g_application_get_is_registered: function(application: PGApplication): gboolean; cdecl; g_application_get_is_remote: function(application: PGApplication): gboolean; cdecl; g_application_get_type: function:TGType; cdecl; g_application_hold: procedure(application: PGApplication); cdecl; g_application_id_is_valid: function(application_id: Pgchar): gboolean; cdecl; g_application_new: function(application_id: Pgchar; flags: TGApplicationFlags): PGApplication; cdecl; g_application_open: procedure(application: PGApplication; files: PPGFile; n_files: gint; hint: Pgchar); cdecl; g_application_quit: procedure(application: PGApplication); cdecl; g_application_register: function(application: PGApplication; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_application_release: procedure(application: PGApplication); cdecl; g_application_run: function(application: PGApplication; argc: gint; argv: PPgchar): gint; cdecl; g_application_set_application_id: procedure(application: PGApplication; application_id: Pgchar); cdecl; g_application_set_default: procedure(application: PGApplication); cdecl; g_application_set_flags: procedure(application: PGApplication; flags: TGApplicationFlags); cdecl; g_application_set_inactivity_timeout: procedure(application: PGApplication; inactivity_timeout: guint); cdecl; g_async_initable_get_type: function:TGType; cdecl; g_async_initable_init_async: procedure(initable: PGAsyncInitable; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_initable_init_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_async_initable_new_async: procedure(object_type: TGType; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer; first_property_name: Pgchar; args: array of const); cdecl; g_async_initable_new_finish: function(initable: PGAsyncInitable; res: PGAsyncResult; error: PPGError): PGObject; cdecl; g_async_initable_new_valist_async: procedure(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_initable_newv_async: procedure(object_type: TGType; n_parameters: guint; parameters: PGParameter; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_async_result_get_source_object: function(res: PGAsyncResult): PGObject; cdecl; g_async_result_get_type: function:TGType; cdecl; g_async_result_get_user_data: function(res: PGAsyncResult): gpointer; cdecl; g_async_result_is_tagged: function(res: PGAsyncResult; source_tag: gpointer): gboolean; cdecl; g_async_result_legacy_propagate_error: function(res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_buffered_input_stream_fill: function(stream: PGBufferedInputStream; count: gssize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_buffered_input_stream_fill_async: procedure(stream: PGBufferedInputStream; count: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_buffered_input_stream_fill_finish: function(stream: PGBufferedInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_buffered_input_stream_get_available: function(stream: PGBufferedInputStream): gsize; cdecl; g_buffered_input_stream_get_buffer_size: function(stream: PGBufferedInputStream): gsize; cdecl; g_buffered_input_stream_get_type: function:TGType; cdecl; g_buffered_input_stream_new: function(base_stream: PGInputStream): PGBufferedInputStream; cdecl; g_buffered_input_stream_new_sized: function(base_stream: PGInputStream; size: gsize): PGBufferedInputStream; cdecl; g_buffered_input_stream_peek: function(stream: PGBufferedInputStream; buffer: Pguint8; offset: gsize; count: gsize): gsize; cdecl; g_buffered_input_stream_peek_buffer: function(stream: PGBufferedInputStream; count: Pgsize): Pguint8; cdecl; g_buffered_input_stream_read_byte: function(stream: PGBufferedInputStream; cancellable: PGCancellable; error: PPGError): gint; cdecl; g_buffered_input_stream_set_buffer_size: procedure(stream: PGBufferedInputStream; size: gsize); cdecl; g_buffered_output_stream_get_auto_grow: function(stream: PGBufferedOutputStream): gboolean; cdecl; g_buffered_output_stream_get_buffer_size: function(stream: PGBufferedOutputStream): gsize; cdecl; g_buffered_output_stream_get_type: function:TGType; cdecl; g_buffered_output_stream_new: function(base_stream: PGOutputStream): PGBufferedOutputStream; cdecl; g_buffered_output_stream_new_sized: function(base_stream: PGOutputStream; size: gsize): PGBufferedOutputStream; cdecl; g_buffered_output_stream_set_auto_grow: procedure(stream: PGBufferedOutputStream; auto_grow: gboolean); cdecl; g_buffered_output_stream_set_buffer_size: procedure(stream: PGBufferedOutputStream; size: gsize); cdecl; g_bus_get: procedure(bus_type: TGBusType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_bus_get_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_bus_get_sync: function(bus_type: TGBusType; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_bus_own_name: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameOwnerFlags; bus_acquired_handler: TGBusAcquiredCallback; name_acquired_handler: TGBusNameAcquiredCallback; name_lost_handler: TGBusNameLostCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_own_name_on_connection: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameOwnerFlags; name_acquired_handler: TGBusNameAcquiredCallback; name_lost_handler: TGBusNameLostCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_own_name_on_connection_with_closures: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameOwnerFlags; name_acquired_closure: PGClosure; name_lost_closure: PGClosure): guint; cdecl; g_bus_own_name_with_closures: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameOwnerFlags; bus_acquired_closure: PGClosure; name_acquired_closure: PGClosure; name_lost_closure: PGClosure): guint; cdecl; g_bus_unown_name: procedure(owner_id: guint); cdecl; g_bus_unwatch_name: procedure(watcher_id: guint); cdecl; g_bus_watch_name: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_handler: TGBusNameAppearedCallback; name_vanished_handler: TGBusNameVanishedCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_watch_name_on_connection: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_handler: TGBusNameAppearedCallback; name_vanished_handler: TGBusNameVanishedCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_bus_watch_name_on_connection_with_closures: function(connection: PGDBusConnection; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_closure: PGClosure; name_vanished_closure: PGClosure): guint; cdecl; g_bus_watch_name_with_closures: function(bus_type: TGBusType; name: Pgchar; flags: TGBusNameWatcherFlags; name_appeared_closure: PGClosure; name_vanished_closure: PGClosure): guint; cdecl; g_cancellable_cancel: procedure(cancellable: PGCancellable); cdecl; g_cancellable_connect: function(cancellable: PGCancellable; callback: TGCallback; data: gpointer; data_destroy_func: TGDestroyNotify): gulong; cdecl; g_cancellable_disconnect: procedure(cancellable: PGCancellable; handler_id: gulong); cdecl; g_cancellable_get_current: function: PGCancellable; cdecl; g_cancellable_get_fd: function(cancellable: PGCancellable): gint; cdecl; g_cancellable_get_type: function:TGType; cdecl; g_cancellable_is_cancelled: function(cancellable: PGCancellable): gboolean; cdecl; g_cancellable_make_pollfd: function(cancellable: PGCancellable; pollfd: PGPollFD): gboolean; cdecl; g_cancellable_new: function: PGCancellable; cdecl; g_cancellable_pop_current: procedure(cancellable: PGCancellable); cdecl; g_cancellable_push_current: procedure(cancellable: PGCancellable); cdecl; g_cancellable_release_fd: procedure(cancellable: PGCancellable); cdecl; g_cancellable_reset: procedure(cancellable: PGCancellable); cdecl; g_cancellable_set_error_if_cancelled: function(cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_cancellable_source_new: function(cancellable: PGCancellable): PGSource; cdecl; g_charset_converter_get_num_fallbacks: function(converter: PGCharsetConverter): guint; cdecl; g_charset_converter_get_type: function:TGType; cdecl; g_charset_converter_get_use_fallback: function(converter: PGCharsetConverter): gboolean; cdecl; g_charset_converter_new: function(to_charset: Pgchar; from_charset: Pgchar; error: PPGError): PGCharsetConverter; cdecl; g_charset_converter_set_use_fallback: procedure(converter: PGCharsetConverter; use_fallback: gboolean); cdecl; g_content_type_can_be_executable: function(type_: Pgchar): gboolean; cdecl; g_content_type_equals: function(type1: Pgchar; type2: Pgchar): gboolean; cdecl; g_content_type_from_mime_type: function(mime_type: Pgchar): Pgchar; cdecl; g_content_type_get_description: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_generic_icon_name: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_icon: function(type_: Pgchar): PGIcon; cdecl; g_content_type_get_mime_type: function(type_: Pgchar): Pgchar; cdecl; g_content_type_get_symbolic_icon: function(type_: Pgchar): PGIcon; cdecl; g_content_type_guess: function(filename: Pgchar; data: Pguint8; data_size: gsize; result_uncertain: Pgboolean): Pgchar; cdecl; g_content_type_guess_for_tree: function(root: PGFile): PPgchar; cdecl; g_content_type_is_a: function(type_: Pgchar; supertype: Pgchar): gboolean; cdecl; g_content_type_is_unknown: function(type_: Pgchar): gboolean; cdecl; g_content_types_get_registered: function: PGList; cdecl; g_converter_convert: function(converter: PGConverter; inbuf: Pguint8; inbuf_size: gsize; outbuf: Pgpointer; outbuf_size: gsize; flags: TGConverterFlags; bytes_read: Pgsize; bytes_written: Pgsize; error: PPGError): TGConverterResult; cdecl; g_converter_get_type: function:TGType; cdecl; g_converter_input_stream_get_converter: function(converter_stream: PGConverterInputStream): PGConverter; cdecl; g_converter_input_stream_get_type: function:TGType; cdecl; g_converter_input_stream_new: function(base_stream: PGInputStream; converter: PGConverter): PGConverterInputStream; cdecl; g_converter_output_stream_get_converter: function(converter_stream: PGConverterOutputStream): PGConverter; cdecl; g_converter_output_stream_get_type: function:TGType; cdecl; g_converter_output_stream_new: function(base_stream: PGOutputStream; converter: PGConverter): PGConverterOutputStream; cdecl; g_converter_reset: procedure(converter: PGConverter); cdecl; g_credentials_get_native: function(credentials: PGCredentials; native_type: TGCredentialsType): gpointer; cdecl; g_credentials_get_type: function:TGType; cdecl; g_credentials_get_unix_pid: function(credentials: PGCredentials; error: PPGError): gint; cdecl; g_credentials_get_unix_user: function(credentials: PGCredentials; error: PPGError): guint; cdecl; g_credentials_is_same_user: function(credentials: PGCredentials; other_credentials: PGCredentials; error: PPGError): gboolean; cdecl; g_credentials_new: function: PGCredentials; cdecl; g_credentials_set_native: procedure(credentials: PGCredentials; native_type: TGCredentialsType; native: gpointer); cdecl; g_credentials_set_unix_user: function(credentials: PGCredentials; uid: guint; error: PPGError): gboolean; cdecl; g_credentials_to_string: function(credentials: PGCredentials): Pgchar; cdecl; g_data_input_stream_get_byte_order: function(stream: PGDataInputStream): TGDataStreamByteOrder; cdecl; g_data_input_stream_get_newline_type: function(stream: PGDataInputStream): TGDataStreamNewlineType; cdecl; g_data_input_stream_get_type: function:TGType; cdecl; g_data_input_stream_new: function(base_stream: PGInputStream): PGDataInputStream; cdecl; g_data_input_stream_read_byte: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint8; cdecl; g_data_input_stream_read_int16: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint16; cdecl; g_data_input_stream_read_int32: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint32; cdecl; g_data_input_stream_read_int64: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): gint64; cdecl; g_data_input_stream_read_line: function(stream: PGDataInputStream; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_async: procedure(stream: PGDataInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_line_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_finish_utf8: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_line_utf8: function(stream: PGDataInputStream; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_uint16: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint16; cdecl; g_data_input_stream_read_uint32: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint32; cdecl; g_data_input_stream_read_uint64: function(stream: PGDataInputStream; cancellable: PGCancellable; error: PPGError): guint64; cdecl; g_data_input_stream_read_until: function(stream: PGDataInputStream; stop_chars: Pgchar; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_until_async: procedure(stream: PGDataInputStream; stop_chars: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_until_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_upto: function(stream: PGDataInputStream; stop_chars: Pgchar; stop_chars_len: gssize; length: Pgsize; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_data_input_stream_read_upto_async: procedure(stream: PGDataInputStream; stop_chars: Pgchar; stop_chars_len: gssize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_data_input_stream_read_upto_finish: function(stream: PGDataInputStream; result_: PGAsyncResult; length: Pgsize; error: PPGError): Pgchar; cdecl; g_data_input_stream_set_byte_order: procedure(stream: PGDataInputStream; order: TGDataStreamByteOrder); cdecl; g_data_input_stream_set_newline_type: procedure(stream: PGDataInputStream; type_: TGDataStreamNewlineType); cdecl; g_data_output_stream_get_byte_order: function(stream: PGDataOutputStream): TGDataStreamByteOrder; cdecl; g_data_output_stream_get_type: function:TGType; cdecl; g_data_output_stream_new: function(base_stream: PGOutputStream): PGDataOutputStream; cdecl; g_data_output_stream_put_byte: function(stream: PGDataOutputStream; data: guint8; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int16: function(stream: PGDataOutputStream; data: gint16; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int32: function(stream: PGDataOutputStream; data: gint32; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_int64: function(stream: PGDataOutputStream; data: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_string: function(stream: PGDataOutputStream; str: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint16: function(stream: PGDataOutputStream; data: guint16; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint32: function(stream: PGDataOutputStream; data: guint32; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_put_uint64: function(stream: PGDataOutputStream; data: guint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_data_output_stream_set_byte_order: procedure(stream: PGDataOutputStream; order: TGDataStreamByteOrder); cdecl; g_dbus_action_group_get: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar): PGDBusActionGroup; cdecl; g_dbus_action_group_get_type: function:TGType; cdecl; g_dbus_address_escape_value: function(string_: Pgchar): Pgchar; cdecl; g_dbus_address_get_for_bus_sync: function(bus_type: TGBusType; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_dbus_address_get_stream: procedure(address: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_address_get_stream_finish: function(res: PGAsyncResult; out_guid: PPgchar; error: PPGError): PGIOStream; cdecl; g_dbus_address_get_stream_sync: function(address: Pgchar; out_guid: PPgchar; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; g_dbus_annotation_info_get_type: function:TGType; cdecl; g_dbus_annotation_info_lookup: function(annotations: PPGDBusAnnotationInfo; name: Pgchar): Pgchar; cdecl; g_dbus_annotation_info_ref: function(info: PGDBusAnnotationInfo): PGDBusAnnotationInfo; cdecl; g_dbus_annotation_info_unref: procedure(info: PGDBusAnnotationInfo); cdecl; g_dbus_arg_info_get_type: function:TGType; cdecl; g_dbus_arg_info_ref: function(info: PGDBusArgInfo): PGDBusArgInfo; cdecl; g_dbus_arg_info_unref: procedure(info: PGDBusArgInfo); cdecl; g_dbus_auth_observer_allow_mechanism: function(observer: PGDBusAuthObserver; mechanism: Pgchar): gboolean; cdecl; g_dbus_auth_observer_authorize_authenticated_peer: function(observer: PGDBusAuthObserver; stream: PGIOStream; credentials: PGCredentials): gboolean; cdecl; g_dbus_auth_observer_get_type: function:TGType; cdecl; g_dbus_auth_observer_new: function: PGDBusAuthObserver; cdecl; g_dbus_connection_add_filter: function(connection: PGDBusConnection; filter_function: TGDBusMessageFilterFunction; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_dbus_connection_call: procedure(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_call_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_sync: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_with_unix_fd_list: procedure(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_call_with_unix_fd_list_finish: function(connection: PGDBusConnection; out_fd_list: PPGUnixFDList; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_connection_call_with_unix_fd_list_sync: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; method_name: Pgchar; parameters: PGVariant; reply_type: PGVariantType; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; out_fd_list: PPGUnixFDList; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_connection_close: procedure(connection: PGDBusConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_close_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_dbus_connection_close_sync: function(connection: PGDBusConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_dbus_connection_emit_signal: function(connection: PGDBusConnection; destination_bus_name: Pgchar; object_path: Pgchar; interface_name: Pgchar; signal_name: Pgchar; parameters: PGVariant; error: PPGError): gboolean; cdecl; g_dbus_connection_export_action_group: function(connection: PGDBusConnection; object_path: Pgchar; action_group: PGActionGroup; error: PPGError): guint; cdecl; g_dbus_connection_export_menu_model: function(connection: PGDBusConnection; object_path: Pgchar; menu: PGMenuModel; error: PPGError): guint; cdecl; g_dbus_connection_flush: procedure(connection: PGDBusConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_flush_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_dbus_connection_flush_sync: function(connection: PGDBusConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_dbus_connection_get_capabilities: function(connection: PGDBusConnection): TGDBusCapabilityFlags; cdecl; g_dbus_connection_get_exit_on_close: function(connection: PGDBusConnection): gboolean; cdecl; g_dbus_connection_get_guid: function(connection: PGDBusConnection): Pgchar; cdecl; g_dbus_connection_get_last_serial: function(connection: PGDBusConnection): guint32; cdecl; g_dbus_connection_get_peer_credentials: function(connection: PGDBusConnection): PGCredentials; cdecl; g_dbus_connection_get_stream: function(connection: PGDBusConnection): PGIOStream; cdecl; g_dbus_connection_get_type: function:TGType; cdecl; g_dbus_connection_get_unique_name: function(connection: PGDBusConnection): Pgchar; cdecl; g_dbus_connection_is_closed: function(connection: PGDBusConnection): gboolean; cdecl; g_dbus_connection_new: procedure(stream: PGIOStream; guid: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_for_address: procedure(address: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_new_for_address_finish: function(res: PGAsyncResult; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_for_address_sync: function(address: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_new_sync: function(stream: PGIOStream; guid: Pgchar; flags: TGDBusConnectionFlags; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusConnection; cdecl; g_dbus_connection_register_object: function(connection: PGDBusConnection; object_path: Pgchar; interface_info: PGDBusInterfaceInfo; vtable: PGDBusInterfaceVTable; user_data: gpointer; user_data_free_func: TGDestroyNotify; error: PPGError): guint; cdecl; g_dbus_connection_register_subtree: function(connection: PGDBusConnection; object_path: Pgchar; vtable: PGDBusSubtreeVTable; flags: TGDBusSubtreeFlags; user_data: gpointer; user_data_free_func: TGDestroyNotify; error: PPGError): guint; cdecl; g_dbus_connection_remove_filter: procedure(connection: PGDBusConnection; filter_id: guint); cdecl; g_dbus_connection_send_message: function(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; out_serial: Pguint32; error: PPGError): gboolean; cdecl; g_dbus_connection_send_message_with_reply: procedure(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; timeout_msec: gint; out_serial: Pguint32; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_connection_send_message_with_reply_finish: function(connection: PGDBusConnection; res: PGAsyncResult; error: PPGError): PGDBusMessage; cdecl; g_dbus_connection_send_message_with_reply_sync: function(connection: PGDBusConnection; message: PGDBusMessage; flags: TGDBusSendMessageFlags; timeout_msec: gint; out_serial: Pguint32; cancellable: PGCancellable; error: PPGError): PGDBusMessage; cdecl; g_dbus_connection_set_exit_on_close: procedure(connection: PGDBusConnection; exit_on_close: gboolean); cdecl; g_dbus_connection_signal_subscribe: function(connection: PGDBusConnection; sender: Pgchar; interface_name: Pgchar; member: Pgchar; object_path: Pgchar; arg0: Pgchar; flags: TGDBusSignalFlags; callback: TGDBusSignalCallback; user_data: gpointer; user_data_free_func: TGDestroyNotify): guint; cdecl; g_dbus_connection_signal_unsubscribe: procedure(connection: PGDBusConnection; subscription_id: guint); cdecl; g_dbus_connection_start_message_processing: procedure(connection: PGDBusConnection); cdecl; g_dbus_connection_unexport_action_group: procedure(connection: PGDBusConnection; export_id: guint); cdecl; g_dbus_connection_unexport_menu_model: procedure(connection: PGDBusConnection; export_id: guint); cdecl; g_dbus_connection_unregister_object: function(connection: PGDBusConnection; registration_id: guint): gboolean; cdecl; g_dbus_connection_unregister_subtree: function(connection: PGDBusConnection; registration_id: guint): gboolean; cdecl; g_dbus_error_encode_gerror: function(error: PGError): Pgchar; cdecl; g_dbus_error_get_remote_error: function(error: PGError): Pgchar; cdecl; g_dbus_error_is_remote_error: function(error: PGError): gboolean; cdecl; g_dbus_error_new_for_dbus_error: function(dbus_error_name: Pgchar; dbus_error_message: Pgchar): PGError; cdecl; g_dbus_error_quark: function: TGQuark; cdecl; g_dbus_error_register_error: function(error_domain: TGQuark; error_code: gint; dbus_error_name: Pgchar): gboolean; cdecl; g_dbus_error_register_error_domain: procedure(error_domain_quark_name: Pgchar; quark_volatile: Pgsize; entries: PGDBusErrorEntry; num_entries: guint); cdecl; g_dbus_error_set_dbus_error: procedure(error: PPGError; dbus_error_name: Pgchar; dbus_error_message: Pgchar; format: Pgchar; args: array of const); cdecl; g_dbus_error_set_dbus_error_valist: procedure(error: PPGError; dbus_error_name: Pgchar; dbus_error_message: Pgchar; format: Pgchar; var_args: Tva_list); cdecl; g_dbus_error_strip_remote_error: function(error: PGError): gboolean; cdecl; g_dbus_error_unregister_error: function(error_domain: TGQuark; error_code: gint; dbus_error_name: Pgchar): gboolean; cdecl; g_dbus_generate_guid: function: Pgchar; cdecl; g_dbus_gvalue_to_gvariant: function(gvalue: PGValue; type_: PGVariantType): PGVariant; cdecl; g_dbus_gvariant_to_gvalue: procedure(value: PGVariant; out_gvalue: PGValue); cdecl; g_dbus_interface_dup_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; g_dbus_interface_get_info: function(interface_: PGDBusInterface): PGDBusInterfaceInfo; cdecl; g_dbus_interface_get_object: function(interface_: PGDBusInterface): PGDBusObject; cdecl; g_dbus_interface_get_type: function:TGType; cdecl; g_dbus_interface_info_cache_build: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_info_cache_release: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_info_generate_xml: procedure(info: PGDBusInterfaceInfo; indent: guint; string_builder: PGString); cdecl; g_dbus_interface_info_get_type: function:TGType; cdecl; g_dbus_interface_info_lookup_method: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusMethodInfo; cdecl; g_dbus_interface_info_lookup_property: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusPropertyInfo; cdecl; g_dbus_interface_info_lookup_signal: function(info: PGDBusInterfaceInfo; name: Pgchar): PGDBusSignalInfo; cdecl; g_dbus_interface_info_ref: function(info: PGDBusInterfaceInfo): PGDBusInterfaceInfo; cdecl; g_dbus_interface_info_unref: procedure(info: PGDBusInterfaceInfo); cdecl; g_dbus_interface_set_object: procedure(interface_: PGDBusInterface; object_: PGDBusObject); cdecl; g_dbus_interface_skeleton_export: function(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection; object_path: Pgchar; error: PPGError): gboolean; cdecl; g_dbus_interface_skeleton_flush: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_interface_skeleton_get_connection: function(interface_: PGDBusInterfaceSkeleton): PGDBusConnection; cdecl; g_dbus_interface_skeleton_get_connections: function(interface_: PGDBusInterfaceSkeleton): PGList; cdecl; g_dbus_interface_skeleton_get_flags: function(interface_: PGDBusInterfaceSkeleton): TGDBusInterfaceSkeletonFlags; cdecl; g_dbus_interface_skeleton_get_info: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceInfo; cdecl; g_dbus_interface_skeleton_get_object_path: function(interface_: PGDBusInterfaceSkeleton): Pgchar; cdecl; g_dbus_interface_skeleton_get_properties: function(interface_: PGDBusInterfaceSkeleton): PGVariant; cdecl; g_dbus_interface_skeleton_get_type: function:TGType; cdecl; g_dbus_interface_skeleton_get_vtable: function(interface_: PGDBusInterfaceSkeleton): PGDBusInterfaceVTable; cdecl; g_dbus_interface_skeleton_has_connection: function(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection): gboolean; cdecl; g_dbus_interface_skeleton_set_flags: procedure(interface_: PGDBusInterfaceSkeleton; flags: TGDBusInterfaceSkeletonFlags); cdecl; g_dbus_interface_skeleton_unexport: procedure(interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_interface_skeleton_unexport_from_connection: procedure(interface_: PGDBusInterfaceSkeleton; connection: PGDBusConnection); cdecl; g_dbus_is_address: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_guid: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_interface_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_member_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_is_supported_address: function(string_: Pgchar; error: PPGError): gboolean; cdecl; g_dbus_is_unique_name: function(string_: Pgchar): gboolean; cdecl; g_dbus_menu_model_get: function(connection: PGDBusConnection; bus_name: Pgchar; object_path: Pgchar): PGDBusMenuModel; cdecl; g_dbus_menu_model_get_type: function:TGType; cdecl; g_dbus_message_bytes_needed: function(blob: Pguint8; blob_len: gsize; error: PPGError): gssize; cdecl; g_dbus_message_copy: function(message: PGDBusMessage; error: PPGError): PGDBusMessage; cdecl; g_dbus_message_get_arg0: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_body: function(message: PGDBusMessage): PGVariant; cdecl; g_dbus_message_get_byte_order: function(message: PGDBusMessage): TGDBusMessageByteOrder; cdecl; g_dbus_message_get_destination: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_error_name: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_flags: function(message: PGDBusMessage): TGDBusMessageFlags; cdecl; g_dbus_message_get_header: function(message: PGDBusMessage; header_field: TGDBusMessageHeaderField): PGVariant; cdecl; g_dbus_message_get_header_fields: function(message: PGDBusMessage): Pguint8; cdecl; g_dbus_message_get_interface: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_locked: function(message: PGDBusMessage): gboolean; cdecl; g_dbus_message_get_member: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_message_type: function(message: PGDBusMessage): TGDBusMessageType; cdecl; g_dbus_message_get_num_unix_fds: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_path: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_reply_serial: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_sender: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_serial: function(message: PGDBusMessage): guint32; cdecl; g_dbus_message_get_signature: function(message: PGDBusMessage): Pgchar; cdecl; g_dbus_message_get_type: function:TGType; cdecl; g_dbus_message_get_unix_fd_list: function(message: PGDBusMessage): PGUnixFDList; cdecl; g_dbus_message_lock: procedure(message: PGDBusMessage); cdecl; g_dbus_message_new: function: PGDBusMessage; cdecl; g_dbus_message_new_from_blob: function(blob: Pguint8; blob_len: gsize; capabilities: TGDBusCapabilityFlags; error: PPGError): PGDBusMessage; cdecl; g_dbus_message_new_method_call: function(name: Pgchar; path: Pgchar; interface_: Pgchar; method: Pgchar): PGDBusMessage; cdecl; g_dbus_message_new_method_error: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message_format: Pgchar; args: array of const): PGDBusMessage; cdecl; g_dbus_message_new_method_error_literal: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message: Pgchar): PGDBusMessage; cdecl; g_dbus_message_new_method_error_valist: function(method_call_message: PGDBusMessage; error_name: Pgchar; error_message_format: Pgchar; var_args: Tva_list): PGDBusMessage; cdecl; g_dbus_message_new_method_reply: function(method_call_message: PGDBusMessage): PGDBusMessage; cdecl; g_dbus_message_new_signal: function(path: Pgchar; interface_: Pgchar; signal: Pgchar): PGDBusMessage; cdecl; g_dbus_message_print: function(message: PGDBusMessage; indent: guint): Pgchar; cdecl; g_dbus_message_set_body: procedure(message: PGDBusMessage; body: PGVariant); cdecl; g_dbus_message_set_byte_order: procedure(message: PGDBusMessage; byte_order: TGDBusMessageByteOrder); cdecl; g_dbus_message_set_destination: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_error_name: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_flags: procedure(message: PGDBusMessage; flags: TGDBusMessageFlags); cdecl; g_dbus_message_set_header: procedure(message: PGDBusMessage; header_field: TGDBusMessageHeaderField; value: PGVariant); cdecl; g_dbus_message_set_interface: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_member: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_message_type: procedure(message: PGDBusMessage; type_: TGDBusMessageType); cdecl; g_dbus_message_set_num_unix_fds: procedure(message: PGDBusMessage; value: guint32); cdecl; g_dbus_message_set_path: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_reply_serial: procedure(message: PGDBusMessage; value: guint32); cdecl; g_dbus_message_set_sender: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_serial: procedure(message: PGDBusMessage; serial: guint32); cdecl; g_dbus_message_set_signature: procedure(message: PGDBusMessage; value: Pgchar); cdecl; g_dbus_message_set_unix_fd_list: procedure(message: PGDBusMessage; fd_list: PGUnixFDList); cdecl; g_dbus_message_to_blob: function(message: PGDBusMessage; out_size: Pgsize; capabilities: TGDBusCapabilityFlags; error: PPGError): Pguint8; cdecl; g_dbus_message_to_gerror: function(message: PGDBusMessage; error: PPGError): gboolean; cdecl; g_dbus_method_info_get_type: function:TGType; cdecl; g_dbus_method_info_ref: function(info: PGDBusMethodInfo): PGDBusMethodInfo; cdecl; g_dbus_method_info_unref: procedure(info: PGDBusMethodInfo); cdecl; g_dbus_method_invocation_get_connection: function(invocation: PGDBusMethodInvocation): PGDBusConnection; cdecl; g_dbus_method_invocation_get_interface_name: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_message: function(invocation: PGDBusMethodInvocation): PGDBusMessage; cdecl; g_dbus_method_invocation_get_method_info: function(invocation: PGDBusMethodInvocation): PGDBusMethodInfo; cdecl; g_dbus_method_invocation_get_method_name: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_object_path: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_parameters: function(invocation: PGDBusMethodInvocation): PGVariant; cdecl; g_dbus_method_invocation_get_sender: function(invocation: PGDBusMethodInvocation): Pgchar; cdecl; g_dbus_method_invocation_get_type: function:TGType; cdecl; g_dbus_method_invocation_get_user_data: function(invocation: PGDBusMethodInvocation): gpointer; cdecl; g_dbus_method_invocation_return_dbus_error: procedure(invocation: PGDBusMethodInvocation; error_name: Pgchar; error_message: Pgchar); cdecl; g_dbus_method_invocation_return_error: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_dbus_method_invocation_return_error_literal: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; message: Pgchar); cdecl; g_dbus_method_invocation_return_error_valist: procedure(invocation: PGDBusMethodInvocation; domain: TGQuark; code: gint; format: Pgchar; var_args: Tva_list); cdecl; g_dbus_method_invocation_return_gerror: procedure(invocation: PGDBusMethodInvocation; error: PGError); cdecl; g_dbus_method_invocation_return_value: procedure(invocation: PGDBusMethodInvocation; parameters: PGVariant); cdecl; g_dbus_method_invocation_return_value_with_unix_fd_list: procedure(invocation: PGDBusMethodInvocation; parameters: PGVariant; fd_list: PGUnixFDList); cdecl; g_dbus_method_invocation_take_error: procedure(invocation: PGDBusMethodInvocation; error: PGError); cdecl; g_dbus_node_info_generate_xml: procedure(info: PGDBusNodeInfo; indent: guint; string_builder: PGString); cdecl; g_dbus_node_info_get_type: function:TGType; cdecl; g_dbus_node_info_lookup_interface: function(info: PGDBusNodeInfo; name: Pgchar): PGDBusInterfaceInfo; cdecl; g_dbus_node_info_new_for_xml: function(xml_data: Pgchar; error: PPGError): PGDBusNodeInfo; cdecl; g_dbus_node_info_ref: function(info: PGDBusNodeInfo): PGDBusNodeInfo; cdecl; g_dbus_node_info_unref: procedure(info: PGDBusNodeInfo); cdecl; g_dbus_object_get_interface: function(object_: PGDBusObject; interface_name: Pgchar): PGDBusInterface; cdecl; g_dbus_object_get_interfaces: function(object_: PGDBusObject): PGList; cdecl; g_dbus_object_get_object_path: function(object_: PGDBusObject): Pgchar; cdecl; g_dbus_object_get_type: function:TGType; cdecl; g_dbus_object_manager_client_get_connection: function(manager: PGDBusObjectManagerClient): PGDBusConnection; cdecl; g_dbus_object_manager_client_get_flags: function(manager: PGDBusObjectManagerClient): TGDBusObjectManagerClientFlags; cdecl; g_dbus_object_manager_client_get_name: function(manager: PGDBusObjectManagerClient): Pgchar; cdecl; g_dbus_object_manager_client_get_name_owner: function(manager: PGDBusObjectManagerClient): Pgchar; cdecl; g_dbus_object_manager_client_get_type: function:TGType; cdecl; g_dbus_object_manager_client_new: procedure(connection: PGDBusConnection; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_object_manager_client_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_for_bus: procedure(bus_type: TGBusType; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_object_manager_client_new_for_bus_finish: function(res: PGAsyncResult; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_for_bus_sync: function(bus_type: TGBusType; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_client_new_sync: function(connection: PGDBusConnection; flags: TGDBusObjectManagerClientFlags; name: Pgchar; object_path: Pgchar; get_proxy_type_func: TGDBusProxyTypeFunc; get_proxy_type_user_data: gpointer; get_proxy_type_destroy_notify: TGDestroyNotify; cancellable: PGCancellable; error: PPGError): PGDBusObjectManagerClient; cdecl; g_dbus_object_manager_get_interface: function(manager: PGDBusObjectManager; object_path: Pgchar; interface_name: Pgchar): PGDBusInterface; cdecl; g_dbus_object_manager_get_object: function(manager: PGDBusObjectManager; object_path: Pgchar): PGDBusObject; cdecl; g_dbus_object_manager_get_object_path: function(manager: PGDBusObjectManager): Pgchar; cdecl; g_dbus_object_manager_get_objects: function(manager: PGDBusObjectManager): PGList; cdecl; g_dbus_object_manager_get_type: function:TGType; cdecl; g_dbus_object_manager_server_export: procedure(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_manager_server_export_uniquely: procedure(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_manager_server_get_connection: function(manager: PGDBusObjectManagerServer): PGDBusConnection; cdecl; g_dbus_object_manager_server_get_type: function:TGType; cdecl; g_dbus_object_manager_server_is_exported: function(manager: PGDBusObjectManagerServer; object_: PGDBusObjectSkeleton): gboolean; cdecl; g_dbus_object_manager_server_new: function(object_path: Pgchar): PGDBusObjectManagerServer; cdecl; g_dbus_object_manager_server_set_connection: procedure(manager: PGDBusObjectManagerServer; connection: PGDBusConnection); cdecl; g_dbus_object_manager_server_unexport: function(manager: PGDBusObjectManagerServer; object_path: Pgchar): gboolean; cdecl; g_dbus_object_proxy_get_connection: function(proxy: PGDBusObjectProxy): PGDBusConnection; cdecl; g_dbus_object_proxy_get_type: function:TGType; cdecl; g_dbus_object_proxy_new: function(connection: PGDBusConnection; object_path: Pgchar): PGDBusObjectProxy; cdecl; g_dbus_object_skeleton_add_interface: procedure(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_object_skeleton_flush: procedure(object_: PGDBusObjectSkeleton); cdecl; g_dbus_object_skeleton_get_type: function:TGType; cdecl; g_dbus_object_skeleton_new: function(object_path: Pgchar): PGDBusObjectSkeleton; cdecl; g_dbus_object_skeleton_remove_interface: procedure(object_: PGDBusObjectSkeleton; interface_: PGDBusInterfaceSkeleton); cdecl; g_dbus_object_skeleton_remove_interface_by_name: procedure(object_: PGDBusObjectSkeleton; interface_name: Pgchar); cdecl; g_dbus_object_skeleton_set_object_path: procedure(object_: PGDBusObjectSkeleton; object_path: Pgchar); cdecl; g_dbus_property_info_get_type: function:TGType; cdecl; g_dbus_property_info_ref: function(info: PGDBusPropertyInfo): PGDBusPropertyInfo; cdecl; g_dbus_property_info_unref: procedure(info: PGDBusPropertyInfo); cdecl; g_dbus_proxy_call: procedure(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_call_finish: function(proxy: PGDBusProxy; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_sync: function(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_with_unix_fd_list: procedure(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_call_with_unix_fd_list_finish: function(proxy: PGDBusProxy; out_fd_list: PPGUnixFDList; res: PGAsyncResult; error: PPGError): PGVariant; cdecl; g_dbus_proxy_call_with_unix_fd_list_sync: function(proxy: PGDBusProxy; method_name: Pgchar; parameters: PGVariant; flags: TGDBusCallFlags; timeout_msec: gint; fd_list: PGUnixFDList; out_fd_list: PPGUnixFDList; cancellable: PGCancellable; error: PPGError): PGVariant; cdecl; g_dbus_proxy_get_cached_property: function(proxy: PGDBusProxy; property_name: Pgchar): PGVariant; cdecl; g_dbus_proxy_get_cached_property_names: function(proxy: PGDBusProxy): PPgchar; cdecl; g_dbus_proxy_get_connection: function(proxy: PGDBusProxy): PGDBusConnection; cdecl; g_dbus_proxy_get_default_timeout: function(proxy: PGDBusProxy): gint; cdecl; g_dbus_proxy_get_flags: function(proxy: PGDBusProxy): TGDBusProxyFlags; cdecl; g_dbus_proxy_get_interface_info: function(proxy: PGDBusProxy): PGDBusInterfaceInfo; cdecl; g_dbus_proxy_get_interface_name: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_name: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_name_owner: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_object_path: function(proxy: PGDBusProxy): Pgchar; cdecl; g_dbus_proxy_get_type: function:TGType; cdecl; g_dbus_proxy_new: procedure(connection: PGDBusConnection; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_new_finish: function(res: PGAsyncResult; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_for_bus: procedure(bus_type: TGBusType; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_dbus_proxy_new_for_bus_finish: function(res: PGAsyncResult; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_for_bus_sync: function(bus_type: TGBusType; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_new_sync: function(connection: PGDBusConnection; flags: TGDBusProxyFlags; info: PGDBusInterfaceInfo; name: Pgchar; object_path: Pgchar; interface_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGDBusProxy; cdecl; g_dbus_proxy_set_cached_property: procedure(proxy: PGDBusProxy; property_name: Pgchar; value: PGVariant); cdecl; g_dbus_proxy_set_default_timeout: procedure(proxy: PGDBusProxy; timeout_msec: gint); cdecl; g_dbus_proxy_set_interface_info: procedure(proxy: PGDBusProxy; info: PGDBusInterfaceInfo); cdecl; g_dbus_server_get_client_address: function(server: PGDBusServer): Pgchar; cdecl; g_dbus_server_get_flags: function(server: PGDBusServer): TGDBusServerFlags; cdecl; g_dbus_server_get_guid: function(server: PGDBusServer): Pgchar; cdecl; g_dbus_server_get_type: function:TGType; cdecl; g_dbus_server_is_active: function(server: PGDBusServer): gboolean; cdecl; g_dbus_server_new_sync: function(address: Pgchar; flags: TGDBusServerFlags; guid: Pgchar; observer: PGDBusAuthObserver; cancellable: PGCancellable; error: PPGError): PGDBusServer; cdecl; g_dbus_server_start: procedure(server: PGDBusServer); cdecl; g_dbus_server_stop: procedure(server: PGDBusServer); cdecl; g_dbus_signal_info_get_type: function:TGType; cdecl; g_dbus_signal_info_ref: function(info: PGDBusSignalInfo): PGDBusSignalInfo; cdecl; g_dbus_signal_info_unref: procedure(info: PGDBusSignalInfo); cdecl; g_desktop_app_info_get_boolean: function(info: PGDesktopAppInfo; key: Pgchar): gboolean; cdecl; g_desktop_app_info_get_categories: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_filename: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_generic_name: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_is_hidden: function(info: PGDesktopAppInfo): gboolean; cdecl; g_desktop_app_info_get_keywords: function(info: PGDesktopAppInfo): PPgchar; cdecl; g_desktop_app_info_get_nodisplay: function(info: PGDesktopAppInfo): gboolean; cdecl; g_desktop_app_info_get_show_in: function(info: PGDesktopAppInfo; desktop_env: Pgchar): gboolean; cdecl; g_desktop_app_info_get_startup_wm_class: function(info: PGDesktopAppInfo): Pgchar; cdecl; g_desktop_app_info_get_string: function(info: PGDesktopAppInfo; key: Pgchar): Pgchar; cdecl; g_desktop_app_info_get_type: function:TGType; cdecl; g_desktop_app_info_has_key: function(info: PGDesktopAppInfo; key: Pgchar): gboolean; cdecl; g_desktop_app_info_launch_uris_as_manager: function(appinfo: PGDesktopAppInfo; uris: PGList; launch_context: PGAppLaunchContext; spawn_flags: TGSpawnFlags; user_setup: TGSpawnChildSetupFunc; user_setup_data: gpointer; pid_callback: TGDesktopAppLaunchCallback; pid_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_desktop_app_info_lookup_get_type: function:TGType; cdecl; g_desktop_app_info_new: function(desktop_id: Pgchar): PGDesktopAppInfo; cdecl; g_desktop_app_info_new_from_filename: function(filename: Pgchar): PGDesktopAppInfo; cdecl; g_desktop_app_info_new_from_keyfile: function(key_file: PGKeyFile): PGDesktopAppInfo; cdecl; g_desktop_app_info_set_desktop_env: procedure(desktop_env: Pgchar); cdecl; g_drive_can_eject: function(drive: PGDrive): gboolean; cdecl; g_drive_can_poll_for_media: function(drive: PGDrive): gboolean; cdecl; g_drive_can_start: function(drive: PGDrive): gboolean; cdecl; g_drive_can_start_degraded: function(drive: PGDrive): gboolean; cdecl; g_drive_can_stop: function(drive: PGDrive): gboolean; cdecl; g_drive_eject_with_operation: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_eject_with_operation_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_enumerate_identifiers: function(drive: PGDrive): PPgchar; cdecl; g_drive_get_icon: function(drive: PGDrive): PGIcon; cdecl; g_drive_get_identifier: function(drive: PGDrive; kind: Pgchar): Pgchar; cdecl; g_drive_get_name: function(drive: PGDrive): Pgchar; cdecl; g_drive_get_sort_key: function(drive: PGDrive): Pgchar; cdecl; g_drive_get_start_stop_type: function(drive: PGDrive): TGDriveStartStopType; cdecl; g_drive_get_symbolic_icon: function(drive: PGDrive): PGIcon; cdecl; g_drive_get_type: function:TGType; cdecl; g_drive_get_volumes: function(drive: PGDrive): PGList; cdecl; g_drive_has_media: function(drive: PGDrive): gboolean; cdecl; g_drive_has_volumes: function(drive: PGDrive): gboolean; cdecl; g_drive_is_media_check_automatic: function(drive: PGDrive): gboolean; cdecl; g_drive_is_media_removable: function(drive: PGDrive): gboolean; cdecl; g_drive_poll_for_media: procedure(drive: PGDrive; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_poll_for_media_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_start: procedure(drive: PGDrive; flags: TGDriveStartFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_start_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_drive_stop: procedure(drive: PGDrive; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_drive_stop_finish: function(drive: PGDrive; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_emblem_get_icon: function(emblem: PGEmblem): PGIcon; cdecl; g_emblem_get_origin: function(emblem: PGEmblem): TGEmblemOrigin; cdecl; g_emblem_get_type: function:TGType; cdecl; g_emblem_new: function(icon: PGIcon): PGEmblem; cdecl; g_emblem_new_with_origin: function(icon: PGIcon; origin: TGEmblemOrigin): PGEmblem; cdecl; g_emblemed_icon_add_emblem: procedure(emblemed: PGEmblemedIcon; emblem: PGEmblem); cdecl; g_emblemed_icon_clear_emblems: procedure(emblemed: PGEmblemedIcon); cdecl; g_emblemed_icon_get_emblems: function(emblemed: PGEmblemedIcon): PGList; cdecl; g_emblemed_icon_get_icon: function(emblemed: PGEmblemedIcon): PGIcon; cdecl; g_emblemed_icon_get_type: function:TGType; cdecl; g_emblemed_icon_new: function(icon: PGIcon; emblem: PGEmblem): PGEmblemedIcon; cdecl; g_file_append_to: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_append_to_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_append_to_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_attribute_info_list_add: procedure(list: PGFileAttributeInfoList; name: Pgchar; type_: TGFileAttributeType; flags: TGFileAttributeInfoFlags); cdecl; g_file_attribute_info_list_dup: function(list: PGFileAttributeInfoList): PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_get_type: function:TGType; cdecl; g_file_attribute_info_list_lookup: function(list: PGFileAttributeInfoList; name: Pgchar): PGFileAttributeInfo; cdecl; g_file_attribute_info_list_new: function: PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_ref: function(list: PGFileAttributeInfoList): PGFileAttributeInfoList; cdecl; g_file_attribute_info_list_unref: procedure(list: PGFileAttributeInfoList); cdecl; g_file_attribute_matcher_enumerate_namespace: function(matcher: PGFileAttributeMatcher; ns: Pgchar): gboolean; cdecl; g_file_attribute_matcher_enumerate_next: function(matcher: PGFileAttributeMatcher): Pgchar; cdecl; g_file_attribute_matcher_get_type: function:TGType; cdecl; g_file_attribute_matcher_matches: function(matcher: PGFileAttributeMatcher; attribute: Pgchar): gboolean; cdecl; g_file_attribute_matcher_matches_only: function(matcher: PGFileAttributeMatcher; attribute: Pgchar): gboolean; cdecl; g_file_attribute_matcher_new: function(attributes: Pgchar): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_ref: function(matcher: PGFileAttributeMatcher): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_subtract: function(matcher: PGFileAttributeMatcher; subtract: PGFileAttributeMatcher): PGFileAttributeMatcher; cdecl; g_file_attribute_matcher_to_string: function(matcher: PGFileAttributeMatcher): Pgchar; cdecl; g_file_attribute_matcher_unref: procedure(matcher: PGFileAttributeMatcher); cdecl; g_file_copy: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_file_copy_async: procedure(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; io_priority: gint; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_copy_attributes: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_copy_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_create: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_create_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_create_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_create_readwrite: function(file_: PGFile; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_create_readwrite_async: procedure(file_: PGFile; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_create_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_delete: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_delete_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_delete_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_descriptor_based_get_fd: function(fd_based: PGFileDescriptorBased): gint; cdecl; g_file_descriptor_based_get_type: function:TGType; cdecl; g_file_dup: function(file_: PGFile): PGFile; cdecl; g_file_eject_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_eject_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_enumerate_children: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileEnumerator; cdecl; g_file_enumerate_children_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerate_children_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileEnumerator; cdecl; g_file_enumerator_close: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_enumerator_close_async: procedure(enumerator: PGFileEnumerator; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerator_close_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_enumerator_get_child: function(enumerator: PGFileEnumerator; info: PGFileInfo): PGFile; cdecl; g_file_enumerator_get_container: function(enumerator: PGFileEnumerator): PGFile; cdecl; g_file_enumerator_get_type: function:TGType; cdecl; g_file_enumerator_has_pending: function(enumerator: PGFileEnumerator): gboolean; cdecl; g_file_enumerator_is_closed: function(enumerator: PGFileEnumerator): gboolean; cdecl; g_file_enumerator_next_file: function(enumerator: PGFileEnumerator; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_enumerator_next_files_async: procedure(enumerator: PGFileEnumerator; num_files: gint; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_enumerator_next_files_finish: function(enumerator: PGFileEnumerator; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_file_enumerator_set_pending: procedure(enumerator: PGFileEnumerator; pending: gboolean); cdecl; g_file_equal: function(file1: PGFile; file2: PGFile): gboolean; cdecl; g_file_find_enclosing_mount: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGMount; cdecl; g_file_find_enclosing_mount_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_find_enclosing_mount_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGMount; cdecl; g_file_get_basename: function(file_: PGFile): Pgchar; cdecl; g_file_get_child: function(file_: PGFile; name: Pgchar): PGFile; cdecl; g_file_get_child_for_display_name: function(file_: PGFile; display_name: Pgchar; error: PPGError): PGFile; cdecl; g_file_get_parent: function(file_: PGFile): PGFile; cdecl; g_file_get_parse_name: function(file_: PGFile): Pgchar; cdecl; g_file_get_path: function(file_: PGFile): Pgchar; cdecl; g_file_get_relative_path: function(parent: PGFile; descendant: PGFile): Pgchar; cdecl; g_file_get_type: function:TGType; cdecl; g_file_get_uri: function(file_: PGFile): Pgchar; cdecl; g_file_get_uri_scheme: function(file_: PGFile): Pgchar; cdecl; g_file_has_parent: function(file_: PGFile; parent: PGFile): gboolean; cdecl; g_file_has_prefix: function(file_: PGFile; prefix: PGFile): gboolean; cdecl; g_file_has_uri_scheme: function(file_: PGFile; uri_scheme: Pgchar): gboolean; cdecl; g_file_hash: function(file_: PGFile): guint; cdecl; g_file_icon_get_file: function(icon: PGFileIcon): PGFile; cdecl; g_file_icon_get_type: function:TGType; cdecl; g_file_icon_new: function(file_: PGFile): PGFileIcon; cdecl; g_file_info_clear_status: procedure(info: PGFileInfo); cdecl; g_file_info_copy_into: procedure(src_info: PGFileInfo; dest_info: PGFileInfo); cdecl; g_file_info_dup: function(other: PGFileInfo): PGFileInfo; cdecl; g_file_info_get_attribute_as_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_boolean: function(info: PGFileInfo; attribute: Pgchar): gboolean; cdecl; g_file_info_get_attribute_byte_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_data: function(info: PGFileInfo; attribute: Pgchar; type_: PGFileAttributeType; value_pp: Pgpointer; status: PGFileAttributeStatus): gboolean; cdecl; g_file_info_get_attribute_int32: function(info: PGFileInfo; attribute: Pgchar): gint32; cdecl; g_file_info_get_attribute_int64: function(info: PGFileInfo; attribute: Pgchar): gint64; cdecl; g_file_info_get_attribute_object: function(info: PGFileInfo; attribute: Pgchar): PGObject; cdecl; g_file_info_get_attribute_status: function(info: PGFileInfo; attribute: Pgchar): TGFileAttributeStatus; cdecl; g_file_info_get_attribute_string: function(info: PGFileInfo; attribute: Pgchar): Pgchar; cdecl; g_file_info_get_attribute_stringv: function(info: PGFileInfo; attribute: Pgchar): PPgchar; cdecl; g_file_info_get_attribute_type: function(info: PGFileInfo; attribute: Pgchar): TGFileAttributeType; cdecl; g_file_info_get_attribute_uint32: function(info: PGFileInfo; attribute: Pgchar): guint32; cdecl; g_file_info_get_attribute_uint64: function(info: PGFileInfo; attribute: Pgchar): guint64; cdecl; g_file_info_get_content_type: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_deletion_date: function(info: PGFileInfo): PGDateTime; cdecl; g_file_info_get_display_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_edit_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_etag: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_file_type: function(info: PGFileInfo): TGFileType; cdecl; g_file_info_get_icon: function(info: PGFileInfo): PGIcon; cdecl; g_file_info_get_is_backup: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_is_hidden: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_is_symlink: function(info: PGFileInfo): gboolean; cdecl; g_file_info_get_modification_time: procedure(info: PGFileInfo; result_: PGTimeVal); cdecl; g_file_info_get_name: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_size: function(info: PGFileInfo): gint64; cdecl; g_file_info_get_sort_order: function(info: PGFileInfo): gint32; cdecl; g_file_info_get_symbolic_icon: function(info: PGFileInfo): PGIcon; cdecl; g_file_info_get_symlink_target: function(info: PGFileInfo): Pgchar; cdecl; g_file_info_get_type: function:TGType; cdecl; g_file_info_has_attribute: function(info: PGFileInfo; attribute: Pgchar): gboolean; cdecl; g_file_info_has_namespace: function(info: PGFileInfo; name_space: Pgchar): gboolean; cdecl; g_file_info_list_attributes: function(info: PGFileInfo; name_space: Pgchar): PPgchar; cdecl; g_file_info_new: function: PGFileInfo; cdecl; g_file_info_remove_attribute: procedure(info: PGFileInfo; attribute: Pgchar); cdecl; g_file_info_set_attribute: procedure(info: PGFileInfo; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer); cdecl; g_file_info_set_attribute_boolean: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gboolean); cdecl; g_file_info_set_attribute_byte_string: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: Pgchar); cdecl; g_file_info_set_attribute_int32: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gint32); cdecl; g_file_info_set_attribute_int64: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: gint64); cdecl; g_file_info_set_attribute_mask: procedure(info: PGFileInfo; mask: PGFileAttributeMatcher); cdecl; g_file_info_set_attribute_object: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: PGObject); cdecl; g_file_info_set_attribute_status: function(info: PGFileInfo; attribute: Pgchar; status: TGFileAttributeStatus): gboolean; cdecl; g_file_info_set_attribute_string: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: Pgchar); cdecl; g_file_info_set_attribute_stringv: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: PPgchar); cdecl; g_file_info_set_attribute_uint32: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: guint32); cdecl; g_file_info_set_attribute_uint64: procedure(info: PGFileInfo; attribute: Pgchar; attr_value: guint64); cdecl; g_file_info_set_content_type: procedure(info: PGFileInfo; content_type: Pgchar); cdecl; g_file_info_set_display_name: procedure(info: PGFileInfo; display_name: Pgchar); cdecl; g_file_info_set_edit_name: procedure(info: PGFileInfo; edit_name: Pgchar); cdecl; g_file_info_set_file_type: procedure(info: PGFileInfo; type_: TGFileType); cdecl; g_file_info_set_icon: procedure(info: PGFileInfo; icon: PGIcon); cdecl; g_file_info_set_is_hidden: procedure(info: PGFileInfo; is_hidden: gboolean); cdecl; g_file_info_set_is_symlink: procedure(info: PGFileInfo; is_symlink: gboolean); cdecl; g_file_info_set_modification_time: procedure(info: PGFileInfo; mtime: PGTimeVal); cdecl; g_file_info_set_name: procedure(info: PGFileInfo; name: Pgchar); cdecl; g_file_info_set_size: procedure(info: PGFileInfo; size: gint64); cdecl; g_file_info_set_sort_order: procedure(info: PGFileInfo; sort_order: gint32); cdecl; g_file_info_set_symbolic_icon: procedure(info: PGFileInfo; icon: PGIcon); cdecl; g_file_info_set_symlink_target: procedure(info: PGFileInfo; symlink_target: Pgchar); cdecl; g_file_info_unset_attribute_mask: procedure(info: PGFileInfo); cdecl; g_file_input_stream_get_type: function:TGType; cdecl; g_file_input_stream_query_info: function(stream: PGFileInputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_input_stream_query_info_async: procedure(stream: PGFileInputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_input_stream_query_info_finish: function(stream: PGFileInputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_io_stream_get_etag: function(stream: PGFileIOStream): Pgchar; cdecl; g_file_io_stream_get_type: function:TGType; cdecl; g_file_io_stream_query_info: function(stream: PGFileIOStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_io_stream_query_info_async: procedure(stream: PGFileIOStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_io_stream_query_info_finish: function(stream: PGFileIOStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_is_native: function(file_: PGFile): gboolean; cdecl; g_file_load_contents: function(file_: PGFile; cancellable: PGCancellable; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_load_contents_async: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_load_contents_finish: function(file_: PGFile; res: PGAsyncResult; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_load_partial_contents_async: procedure(file_: PGFile; cancellable: PGCancellable; read_more_callback: TGFileReadMoreCallback; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_load_partial_contents_finish: function(file_: PGFile; res: PGAsyncResult; contents: PPgchar; length: Pgsize; etag_out: PPgchar; error: PPGError): gboolean; cdecl; g_file_make_directory: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_make_directory_with_parents: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_make_symbolic_link: function(file_: PGFile; symlink_value: Pgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_monitor: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_cancel: function(monitor: PGFileMonitor): gboolean; cdecl; g_file_monitor_directory: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_emit_event: procedure(monitor: PGFileMonitor; child: PGFile; other_file: PGFile; event_type: TGFileMonitorEvent); cdecl; g_file_monitor_file: function(file_: PGFile; flags: TGFileMonitorFlags; cancellable: PGCancellable; error: PPGError): PGFileMonitor; cdecl; g_file_monitor_get_type: function:TGType; cdecl; g_file_monitor_is_cancelled: function(monitor: PGFileMonitor): gboolean; cdecl; g_file_monitor_set_rate_limit: procedure(monitor: PGFileMonitor; limit_msecs: gint); cdecl; g_file_mount_enclosing_volume: procedure(location: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_mount_enclosing_volume_finish: function(location: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_mount_mountable: procedure(file_: PGFile; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_mount_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): PGFile; cdecl; g_file_move: function(source: PGFile; destination: PGFile; flags: TGFileCopyFlags; cancellable: PGCancellable; progress_callback: TGFileProgressCallback; progress_callback_data: gpointer; error: PPGError): gboolean; cdecl; g_file_new_for_commandline_arg: function(arg: Pgchar): PGFile; cdecl; g_file_new_for_commandline_arg_and_cwd: function(arg: Pgchar; cwd: Pgchar): PGFile; cdecl; g_file_new_for_path: function(path: Pgchar): PGFile; cdecl; g_file_new_for_uri: function(uri: Pgchar): PGFile; cdecl; g_file_new_tmp: function(tmpl: Pgchar; iostream: PPGFileIOStream; error: PPGError): PGFile; cdecl; g_file_open_readwrite: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_open_readwrite_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_open_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_output_stream_get_etag: function(stream: PGFileOutputStream): Pgchar; cdecl; g_file_output_stream_get_type: function:TGType; cdecl; g_file_output_stream_query_info: function(stream: PGFileOutputStream; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_output_stream_query_info_async: procedure(stream: PGFileOutputStream; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_output_stream_query_info_finish: function(stream: PGFileOutputStream; result_: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_parse_name: function(parse_name: Pgchar): PGFile; cdecl; g_file_poll_mountable: procedure(file_: PGFile; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_poll_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_query_default_handler: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGAppInfo; cdecl; g_file_query_exists: function(file_: PGFile; cancellable: PGCancellable): gboolean; cdecl; g_file_query_file_type: function(file_: PGFile; flags: TGFileQueryInfoFlags; cancellable: PGCancellable): TGFileType; cdecl; g_file_query_filesystem_info: function(file_: PGFile; attributes: Pgchar; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_query_filesystem_info_async: procedure(file_: PGFile; attributes: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_query_filesystem_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_query_info: function(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): PGFileInfo; cdecl; g_file_query_info_async: procedure(file_: PGFile; attributes: Pgchar; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_query_info_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInfo; cdecl; g_file_query_settable_attributes: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; g_file_query_writable_namespaces: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileAttributeInfoList; cdecl; g_file_read: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): PGFileInputStream; cdecl; g_file_read_async: procedure(file_: PGFile; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_read_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileInputStream; cdecl; g_file_replace: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileOutputStream; cdecl; g_file_replace_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_contents: function(file_: PGFile; contents: Pgchar; length: gsize; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; new_etag: PPgchar; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_replace_contents_async: procedure(file_: PGFile; contents: Pgchar; length: gsize; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_contents_finish: function(file_: PGFile; res: PGAsyncResult; new_etag: PPgchar; error: PPGError): gboolean; cdecl; g_file_replace_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileOutputStream; cdecl; g_file_replace_readwrite: function(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; cancellable: PGCancellable; error: PPGError): PGFileIOStream; cdecl; g_file_replace_readwrite_async: procedure(file_: PGFile; etag: Pgchar; make_backup: gboolean; flags: TGFileCreateFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_replace_readwrite_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFileIOStream; cdecl; g_file_resolve_relative_path: function(file_: PGFile; relative_path: Pgchar): PGFile; cdecl; g_file_set_attribute: function(file_: PGFile; attribute: Pgchar; type_: TGFileAttributeType; value_p: gpointer; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_byte_string: function(file_: PGFile; attribute: Pgchar; value: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_int32: function(file_: PGFile; attribute: Pgchar; value: gint32; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_int64: function(file_: PGFile; attribute: Pgchar; value: gint64; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_string: function(file_: PGFile; attribute: Pgchar; value: Pgchar; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_uint32: function(file_: PGFile; attribute: Pgchar; value: guint32; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attribute_uint64: function(file_: PGFile; attribute: Pgchar; value: guint64; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_attributes_async: procedure(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_set_attributes_finish: function(file_: PGFile; result_: PGAsyncResult; info: PPGFileInfo; error: PPGError): gboolean; cdecl; g_file_set_attributes_from_info: function(file_: PGFile; info: PGFileInfo; flags: TGFileQueryInfoFlags; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_set_display_name: function(file_: PGFile; display_name: Pgchar; cancellable: PGCancellable; error: PPGError): PGFile; cdecl; g_file_set_display_name_async: procedure(file_: PGFile; display_name: Pgchar; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_set_display_name_finish: function(file_: PGFile; res: PGAsyncResult; error: PPGError): PGFile; cdecl; g_file_start_mountable: procedure(file_: PGFile; flags: TGDriveStartFlags; start_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_start_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_stop_mountable: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_stop_mountable_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_file_supports_thread_contexts: function(file_: PGFile): gboolean; cdecl; g_file_trash: function(file_: PGFile; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_file_unmount_mountable_with_operation: procedure(file_: PGFile; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_file_unmount_mountable_with_operation_finish: function(file_: PGFile; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_filename_completer_get_completion_suffix: function(completer: PGFilenameCompleter; initial_text: Pgchar): Pgchar; cdecl; g_filename_completer_get_completions: function(completer: PGFilenameCompleter; initial_text: Pgchar): PPgchar; cdecl; g_filename_completer_get_type: function:TGType; cdecl; g_filename_completer_new: function: PGFilenameCompleter; cdecl; g_filename_completer_set_dirs_only: procedure(completer: PGFilenameCompleter; dirs_only: gboolean); cdecl; g_filter_input_stream_get_base_stream: function(stream: PGFilterInputStream): PGInputStream; cdecl; g_filter_input_stream_get_close_base_stream: function(stream: PGFilterInputStream): gboolean; cdecl; g_filter_input_stream_get_type: function:TGType; cdecl; g_filter_input_stream_set_close_base_stream: procedure(stream: PGFilterInputStream; close_base: gboolean); cdecl; g_filter_output_stream_get_base_stream: function(stream: PGFilterOutputStream): PGOutputStream; cdecl; g_filter_output_stream_get_close_base_stream: function(stream: PGFilterOutputStream): gboolean; cdecl; g_filter_output_stream_get_type: function:TGType; cdecl; g_filter_output_stream_set_close_base_stream: procedure(stream: PGFilterOutputStream; close_base: gboolean); cdecl; g_icon_equal: function(icon1: PGIcon; icon2: PGIcon): gboolean; cdecl; g_icon_get_type: function:TGType; cdecl; g_icon_hash: function(icon: Pgpointer): guint; cdecl; g_icon_new_for_string: function(str: Pgchar; error: PPGError): PGIcon; cdecl; g_icon_to_string: function(icon: PGIcon): Pgchar; cdecl; g_inet_address_equal: function(address: PGInetAddress; other_address: PGInetAddress): gboolean; cdecl; g_inet_address_get_family: function(address: PGInetAddress): TGSocketFamily; cdecl; g_inet_address_get_is_any: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_link_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_loopback: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_global: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_link_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_node_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_org_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_mc_site_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_multicast: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_is_site_local: function(address: PGInetAddress): gboolean; cdecl; g_inet_address_get_native_size: function(address: PGInetAddress): gsize; cdecl; g_inet_address_get_type: function:TGType; cdecl; g_inet_address_mask_equal: function(mask: PGInetAddressMask; mask2: PGInetAddressMask): gboolean; cdecl; g_inet_address_mask_get_address: function(mask: PGInetAddressMask): PGInetAddress; cdecl; g_inet_address_mask_get_family: function(mask: PGInetAddressMask): TGSocketFamily; cdecl; g_inet_address_mask_get_length: function(mask: PGInetAddressMask): guint; cdecl; g_inet_address_mask_get_type: function:TGType; cdecl; g_inet_address_mask_matches: function(mask: PGInetAddressMask; address: PGInetAddress): gboolean; cdecl; g_inet_address_mask_new: function(addr: PGInetAddress; length: guint; error: PPGError): PGInetAddressMask; cdecl; g_inet_address_mask_new_from_string: function(mask_string: Pgchar; error: PPGError): PGInetAddressMask; cdecl; g_inet_address_mask_to_string: function(mask: PGInetAddressMask): Pgchar; cdecl; g_inet_address_new_any: function(family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_new_from_bytes: function(bytes: Pguint8; family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_new_from_string: function(string_: Pgchar): PGInetAddress; cdecl; g_inet_address_new_loopback: function(family: TGSocketFamily): PGInetAddress; cdecl; g_inet_address_to_bytes: function(address: PGInetAddress): Pguint8; cdecl; g_inet_address_to_string: function(address: PGInetAddress): Pgchar; cdecl; g_inet_socket_address_get_address: function(address: PGInetSocketAddress): PGInetAddress; cdecl; g_inet_socket_address_get_flowinfo: function(address: PGInetSocketAddress): guint32; cdecl; g_inet_socket_address_get_port: function(address: PGInetSocketAddress): guint16; cdecl; g_inet_socket_address_get_scope_id: function(address: PGInetSocketAddress): guint32; cdecl; g_inet_socket_address_get_type: function:TGType; cdecl; g_inet_socket_address_new: function(address: PGInetAddress; port: guint16): PGInetSocketAddress; cdecl; g_initable_get_type: function:TGType; cdecl; g_initable_init: function(initable: PGInitable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_initable_new: function(object_type: TGType; cancellable: PGCancellable; error: PPGError; first_property_name: Pgchar; args: array of const): PGObject; cdecl; g_initable_new_valist: function(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list; cancellable: PGCancellable; error: PPGError): PGObject; cdecl; g_initable_newv: function(object_type: TGType; n_parameters: guint; parameters: PGParameter; cancellable: PGCancellable; error: PPGError): PGObject; cdecl; g_input_stream_clear_pending: procedure(stream: PGInputStream); cdecl; g_input_stream_close: function(stream: PGInputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_input_stream_close_async: procedure(stream: PGInputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_close_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_input_stream_get_type: function:TGType; cdecl; g_input_stream_has_pending: function(stream: PGInputStream): gboolean; cdecl; g_input_stream_is_closed: function(stream: PGInputStream): gboolean; cdecl; g_input_stream_read: function(stream: PGInputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_input_stream_read_all: function(stream: PGInputStream; buffer: Pguint8; count: gsize; bytes_read: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_input_stream_read_async: procedure(stream: PGInputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_read_bytes: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): PGBytes; cdecl; g_input_stream_read_bytes_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_read_bytes_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): PGBytes; cdecl; g_input_stream_read_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_input_stream_set_pending: function(stream: PGInputStream; error: PPGError): gboolean; cdecl; g_input_stream_skip: function(stream: PGInputStream; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_input_stream_skip_async: procedure(stream: PGInputStream; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_input_stream_skip_finish: function(stream: PGInputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_io_error_from_errno: function(err_no: gint): TGIOErrorEnum; cdecl; g_io_error_quark: function: TGQuark; cdecl; g_io_extension_get_name: function(extension: PGIOExtension): Pgchar; cdecl; g_io_extension_get_priority: function(extension: PGIOExtension): gint; cdecl; g_io_extension_get_type: function(extension: PGIOExtension): TGType; cdecl; g_io_extension_point_get_extension_by_name: function(extension_point: PGIOExtensionPoint; name: Pgchar): PGIOExtension; cdecl; g_io_extension_point_get_extensions: function(extension_point: PGIOExtensionPoint): PGList; cdecl; g_io_extension_point_get_required_type: function(extension_point: PGIOExtensionPoint): TGType; cdecl; g_io_extension_point_implement: function(extension_point_name: Pgchar; type_: TGType; extension_name: Pgchar; priority: gint): PGIOExtension; cdecl; g_io_extension_point_lookup: function(name: Pgchar): PGIOExtensionPoint; cdecl; g_io_extension_point_register: function(name: Pgchar): PGIOExtensionPoint; cdecl; g_io_extension_point_set_required_type: procedure(extension_point: PGIOExtensionPoint; type_: TGType); cdecl; g_io_extension_ref_class: function(extension: PGIOExtension): PGTypeClass; cdecl; g_io_module_get_type: function:TGType; cdecl; g_io_module_new: function(filename: Pgchar): PGIOModule; cdecl; g_io_module_scope_block: procedure(scope: PGIOModuleScope; basename: Pgchar); cdecl; g_io_module_scope_free: procedure(scope: PGIOModuleScope); cdecl; g_io_module_scope_new: function(flags: TGIOModuleScopeFlags): PGIOModuleScope; cdecl; g_io_modules_load_all_in_directory: function(dirname: Pgchar): PGList; cdecl; g_io_modules_load_all_in_directory_with_scope: function(dirname: Pgchar; scope: PGIOModuleScope): PGList; cdecl; g_io_modules_scan_all_in_directory: procedure(dirname: Pgchar); cdecl; g_io_modules_scan_all_in_directory_with_scope: procedure(dirname: Pgchar; scope: PGIOModuleScope); cdecl; g_io_scheduler_cancel_all_jobs: procedure; cdecl; g_io_scheduler_push_job: procedure(job_func: TGIOSchedulerJobFunc; user_data: gpointer; notify: TGDestroyNotify; io_priority: gint; cancellable: PGCancellable); cdecl; g_io_stream_clear_pending: procedure(stream: PGIOStream); cdecl; g_io_stream_close: function(stream: PGIOStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_io_stream_close_async: procedure(stream: PGIOStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_io_stream_close_finish: function(stream: PGIOStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_io_stream_get_input_stream: function(stream: PGIOStream): PGInputStream; cdecl; g_io_stream_get_output_stream: function(stream: PGIOStream): PGOutputStream; cdecl; g_io_stream_get_type: function:TGType; cdecl; g_io_stream_has_pending: function(stream: PGIOStream): gboolean; cdecl; g_io_stream_is_closed: function(stream: PGIOStream): gboolean; cdecl; g_io_stream_set_pending: function(stream: PGIOStream; error: PPGError): gboolean; cdecl; g_io_stream_splice_async: procedure(stream1: PGIOStream; stream2: PGIOStream; flags: TGIOStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_io_stream_splice_finish: function(result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_loadable_icon_get_type: function:TGType; cdecl; g_loadable_icon_load: function(icon: PGLoadableIcon; size: gint; type_: PPgchar; cancellable: PGCancellable; error: PPGError): PGInputStream; cdecl; g_loadable_icon_load_async: procedure(icon: PGLoadableIcon; size: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_loadable_icon_load_finish: function(icon: PGLoadableIcon; res: PGAsyncResult; type_: PPgchar; error: PPGError): PGInputStream; cdecl; g_memory_input_stream_add_bytes: procedure(stream: PGMemoryInputStream; bytes: PGBytes); cdecl; g_memory_input_stream_add_data: procedure(stream: PGMemoryInputStream; data: Pguint8; len: gssize; destroy_: TGDestroyNotify); cdecl; g_memory_input_stream_get_type: function:TGType; cdecl; g_memory_input_stream_new: function: PGMemoryInputStream; cdecl; g_memory_input_stream_new_from_bytes: function(bytes: PGBytes): PGMemoryInputStream; cdecl; g_memory_input_stream_new_from_data: function(data: Pguint8; len: gssize; destroy_: TGDestroyNotify): PGMemoryInputStream; cdecl; g_memory_output_stream_get_data: function(ostream: PGMemoryOutputStream): gpointer; cdecl; g_memory_output_stream_get_data_size: function(ostream: PGMemoryOutputStream): gsize; cdecl; g_memory_output_stream_get_size: function(ostream: PGMemoryOutputStream): gsize; cdecl; g_memory_output_stream_get_type: function:TGType; cdecl; g_memory_output_stream_new: function(data: gpointer; size: gsize; realloc_function: TGReallocFunc; destroy_function: TGDestroyNotify): PGMemoryOutputStream; cdecl; g_memory_output_stream_new_resizable: function: PGMemoryOutputStream; cdecl; g_memory_output_stream_steal_as_bytes: function(ostream: PGMemoryOutputStream): PGBytes; cdecl; g_memory_output_stream_steal_data: function(ostream: PGMemoryOutputStream): gpointer; cdecl; g_menu_append: procedure(menu: PGMenu; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_append_item: procedure(menu: PGMenu; item: PGMenuItem); cdecl; g_menu_append_section: procedure(menu: PGMenu; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_append_submenu: procedure(menu: PGMenu; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_attribute_iter_get_name: function(iter: PGMenuAttributeIter): Pgchar; cdecl; g_menu_attribute_iter_get_next: function(iter: PGMenuAttributeIter; out_name: PPgchar; value: PPGVariant): gboolean; cdecl; g_menu_attribute_iter_get_type: function:TGType; cdecl; g_menu_attribute_iter_get_value: function(iter: PGMenuAttributeIter): PGVariant; cdecl; g_menu_attribute_iter_next: function(iter: PGMenuAttributeIter): gboolean; cdecl; g_menu_freeze: procedure(menu: PGMenu); cdecl; g_menu_get_type: function:TGType; cdecl; g_menu_insert: procedure(menu: PGMenu; position: gint; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_insert_item: procedure(menu: PGMenu; position: gint; item: PGMenuItem); cdecl; g_menu_insert_section: procedure(menu: PGMenu; position: gint; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_insert_submenu: procedure(menu: PGMenu; position: gint; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_item_get_attribute: function(menu_item: PGMenuItem; attribute: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; g_menu_item_get_attribute_value: function(menu_item: PGMenuItem; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; g_menu_item_get_link: function(menu_item: PGMenuItem; link: Pgchar): PGMenuModel; cdecl; g_menu_item_get_type: function:TGType; cdecl; g_menu_item_new: function(label_: Pgchar; detailed_action: Pgchar): PGMenuItem; cdecl; g_menu_item_new_from_model: function(model: PGMenuModel; item_index: gint): PGMenuItem; cdecl; g_menu_item_new_section: function(label_: Pgchar; section: PGMenuModel): PGMenuItem; cdecl; g_menu_item_new_submenu: function(label_: Pgchar; submenu: PGMenuModel): PGMenuItem; cdecl; g_menu_item_set_action_and_target: procedure(menu_item: PGMenuItem; action: Pgchar; format_string: Pgchar; args: array of const); cdecl; g_menu_item_set_action_and_target_value: procedure(menu_item: PGMenuItem; action: Pgchar; target_value: PGVariant); cdecl; g_menu_item_set_attribute: procedure(menu_item: PGMenuItem; attribute: Pgchar; format_string: Pgchar; args: array of const); cdecl; g_menu_item_set_attribute_value: procedure(menu_item: PGMenuItem; attribute: Pgchar; value: PGVariant); cdecl; g_menu_item_set_detailed_action: procedure(menu_item: PGMenuItem; detailed_action: Pgchar); cdecl; g_menu_item_set_label: procedure(menu_item: PGMenuItem; label_: Pgchar); cdecl; g_menu_item_set_link: procedure(menu_item: PGMenuItem; link: Pgchar; model: PGMenuModel); cdecl; g_menu_item_set_section: procedure(menu_item: PGMenuItem; section: PGMenuModel); cdecl; g_menu_item_set_submenu: procedure(menu_item: PGMenuItem; submenu: PGMenuModel); cdecl; g_menu_link_iter_get_name: function(iter: PGMenuLinkIter): Pgchar; cdecl; g_menu_link_iter_get_next: function(iter: PGMenuLinkIter; out_link: PPgchar; value: PPGMenuModel): gboolean; cdecl; g_menu_link_iter_get_type: function:TGType; cdecl; g_menu_link_iter_get_value: function(iter: PGMenuLinkIter): PGMenuModel; cdecl; g_menu_link_iter_next: function(iter: PGMenuLinkIter): gboolean; cdecl; g_menu_model_get_item_attribute: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; format_string: Pgchar; args: array of const): gboolean; cdecl; g_menu_model_get_item_attribute_value: function(model: PGMenuModel; item_index: gint; attribute: Pgchar; expected_type: PGVariantType): PGVariant; cdecl; g_menu_model_get_item_link: function(model: PGMenuModel; item_index: gint; link: Pgchar): PGMenuModel; cdecl; g_menu_model_get_n_items: function(model: PGMenuModel): gint; cdecl; g_menu_model_get_type: function:TGType; cdecl; g_menu_model_is_mutable: function(model: PGMenuModel): gboolean; cdecl; g_menu_model_items_changed: procedure(model: PGMenuModel; position: gint; removed: gint; added: gint); cdecl; g_menu_model_iterate_item_attributes: function(model: PGMenuModel; item_index: gint): PGMenuAttributeIter; cdecl; g_menu_model_iterate_item_links: function(model: PGMenuModel; item_index: gint): PGMenuLinkIter; cdecl; g_menu_new: function: PGMenu; cdecl; g_menu_prepend: procedure(menu: PGMenu; label_: Pgchar; detailed_action: Pgchar); cdecl; g_menu_prepend_item: procedure(menu: PGMenu; item: PGMenuItem); cdecl; g_menu_prepend_section: procedure(menu: PGMenu; label_: Pgchar; section: PGMenuModel); cdecl; g_menu_prepend_submenu: procedure(menu: PGMenu; label_: Pgchar; submenu: PGMenuModel); cdecl; g_menu_remove: procedure(menu: PGMenu; position: gint); cdecl; g_mount_can_eject: function(mount: PGMount): gboolean; cdecl; g_mount_can_unmount: function(mount: PGMount): gboolean; cdecl; g_mount_eject_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_eject_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_get_default_location: function(mount: PGMount): PGFile; cdecl; g_mount_get_drive: function(mount: PGMount): PGDrive; cdecl; g_mount_get_icon: function(mount: PGMount): PGIcon; cdecl; g_mount_get_name: function(mount: PGMount): Pgchar; cdecl; g_mount_get_root: function(mount: PGMount): PGFile; cdecl; g_mount_get_sort_key: function(mount: PGMount): Pgchar; cdecl; g_mount_get_symbolic_icon: function(mount: PGMount): PGIcon; cdecl; g_mount_get_type: function:TGType; cdecl; g_mount_get_uuid: function(mount: PGMount): Pgchar; cdecl; g_mount_get_volume: function(mount: PGMount): PGVolume; cdecl; g_mount_guess_content_type: procedure(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_guess_content_type_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; g_mount_guess_content_type_sync: function(mount: PGMount; force_rescan: gboolean; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; g_mount_is_shadowed: function(mount: PGMount): gboolean; cdecl; g_mount_operation_get_anonymous: function(op: PGMountOperation): gboolean; cdecl; g_mount_operation_get_choice: function(op: PGMountOperation): gint; cdecl; g_mount_operation_get_domain: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_get_password: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_get_password_save: function(op: PGMountOperation): TGPasswordSave; cdecl; g_mount_operation_get_type: function:TGType; cdecl; g_mount_operation_get_username: function(op: PGMountOperation): Pgchar; cdecl; g_mount_operation_new: function: PGMountOperation; cdecl; g_mount_operation_reply: procedure(op: PGMountOperation; result_: TGMountOperationResult); cdecl; g_mount_operation_set_anonymous: procedure(op: PGMountOperation; anonymous: gboolean); cdecl; g_mount_operation_set_choice: procedure(op: PGMountOperation; choice: gint); cdecl; g_mount_operation_set_domain: procedure(op: PGMountOperation; domain: Pgchar); cdecl; g_mount_operation_set_password: procedure(op: PGMountOperation; password: Pgchar); cdecl; g_mount_operation_set_password_save: procedure(op: PGMountOperation; save: TGPasswordSave); cdecl; g_mount_operation_set_username: procedure(op: PGMountOperation; username: Pgchar); cdecl; g_mount_remount: procedure(mount: PGMount; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_remount_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_shadow: procedure(mount: PGMount); cdecl; g_mount_unmount_with_operation: procedure(mount: PGMount; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_mount_unmount_with_operation_finish: function(mount: PGMount; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_mount_unshadow: procedure(mount: PGMount); cdecl; g_native_volume_monitor_get_type: function:TGType; cdecl; g_network_address_get_hostname: function(addr: PGNetworkAddress): Pgchar; cdecl; g_network_address_get_port: function(addr: PGNetworkAddress): guint16; cdecl; g_network_address_get_scheme: function(addr: PGNetworkAddress): Pgchar; cdecl; g_network_address_get_type: function:TGType; cdecl; g_network_address_new: function(hostname: Pgchar; port: guint16): PGNetworkAddress; cdecl; g_network_address_parse: function(host_and_port: Pgchar; default_port: guint16; error: PPGError): PGSocketConnectable; cdecl; g_network_address_parse_uri: function(uri: Pgchar; default_port: guint16; error: PPGError): PGSocketConnectable; cdecl; g_network_monitor_can_reach: function(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_network_monitor_can_reach_async: procedure(monitor: PGNetworkMonitor; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_network_monitor_can_reach_finish: function(monitor: PGNetworkMonitor; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_network_monitor_get_default: function: PGNetworkMonitor; cdecl; g_network_monitor_get_network_available: function(monitor: PGNetworkMonitor): gboolean; cdecl; g_network_monitor_get_type: function:TGType; cdecl; g_network_service_get_domain: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_protocol: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_scheme: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_service: function(srv: PGNetworkService): Pgchar; cdecl; g_network_service_get_type: function:TGType; cdecl; g_network_service_new: function(service: Pgchar; protocol: Pgchar; domain: Pgchar): PGNetworkService; cdecl; g_network_service_set_scheme: procedure(srv: PGNetworkService; scheme: Pgchar); cdecl; g_networking_init: procedure; cdecl; g_output_stream_clear_pending: procedure(stream: PGOutputStream); cdecl; g_output_stream_close: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_close_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_close_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_output_stream_flush: function(stream: PGOutputStream; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_flush_async: procedure(stream: PGOutputStream; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_flush_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_output_stream_get_type: function:TGType; cdecl; g_output_stream_has_pending: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_is_closed: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_is_closing: function(stream: PGOutputStream): gboolean; cdecl; g_output_stream_set_pending: function(stream: PGOutputStream; error: PPGError): gboolean; cdecl; g_output_stream_splice: function(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_splice_async: procedure(stream: PGOutputStream; source: PGInputStream; flags: TGOutputStreamSpliceFlags; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_splice_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_output_stream_write: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_write_all: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; bytes_written: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_output_stream_write_async: procedure(stream: PGOutputStream; buffer: Pguint8; count: gsize; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_write_bytes: function(stream: PGOutputStream; bytes: PGBytes; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_output_stream_write_bytes_async: procedure(stream: PGOutputStream; bytes: PGBytes; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_output_stream_write_bytes_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_output_stream_write_finish: function(stream: PGOutputStream; result_: PGAsyncResult; error: PPGError): gssize; cdecl; g_permission_acquire: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_permission_acquire_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_permission_acquire_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_permission_get_allowed: function(permission: PGPermission): gboolean; cdecl; g_permission_get_can_acquire: function(permission: PGPermission): gboolean; cdecl; g_permission_get_can_release: function(permission: PGPermission): gboolean; cdecl; g_permission_get_type: function:TGType; cdecl; g_permission_impl_update: procedure(permission: PGPermission; allowed: gboolean; can_acquire: gboolean; can_release: gboolean); cdecl; g_permission_release: function(permission: PGPermission; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_permission_release_async: procedure(permission: PGPermission; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_permission_release_finish: function(permission: PGPermission; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_pollable_input_stream_can_poll: function(stream: PGPollableInputStream): gboolean; cdecl; g_pollable_input_stream_create_source: function(stream: PGPollableInputStream; cancellable: PGCancellable): PGSource; cdecl; g_pollable_input_stream_get_type: function:TGType; cdecl; g_pollable_input_stream_is_readable: function(stream: PGPollableInputStream): gboolean; cdecl; g_pollable_input_stream_read_nonblocking: function(stream: PGPollableInputStream; buffer: Pgpointer; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_output_stream_can_poll: function(stream: PGPollableOutputStream): gboolean; cdecl; g_pollable_output_stream_create_source: function(stream: PGPollableOutputStream; cancellable: PGCancellable): PGSource; cdecl; g_pollable_output_stream_get_type: function:TGType; cdecl; g_pollable_output_stream_is_writable: function(stream: PGPollableOutputStream): gboolean; cdecl; g_pollable_output_stream_write_nonblocking: function(stream: PGPollableOutputStream; buffer: Pguint8; count: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_source_new: function(pollable_stream: PGObject): PGSource; cdecl; g_pollable_source_new_full: function(pollable_stream: PGObject; child_source: PGSource; cancellable: PGCancellable): PGSource; cdecl; g_pollable_stream_read: function(stream: PGInputStream; buffer: Pgpointer; count: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_stream_write: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_pollable_stream_write_all: function(stream: PGOutputStream; buffer: Pguint8; count: gsize; blocking: gboolean; bytes_written: Pgsize; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_proxy_address_enumerator_get_type: function:TGType; cdecl; g_proxy_address_get_destination_hostname: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_destination_port: function(proxy: PGProxyAddress): guint16; cdecl; g_proxy_address_get_destination_protocol: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_password: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_protocol: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_type: function:TGType; cdecl; g_proxy_address_get_uri: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_get_username: function(proxy: PGProxyAddress): Pgchar; cdecl; g_proxy_address_new: function(inetaddr: PGInetAddress; port: guint16; protocol: Pgchar; dest_hostname: Pgchar; dest_port: guint16; username: Pgchar; password: Pgchar): PGProxyAddress; cdecl; g_proxy_connect: function(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; error: PPGError): PGIOStream; cdecl; g_proxy_connect_async: procedure(proxy: PGProxy; connection: PGIOStream; proxy_address: PGProxyAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_proxy_connect_finish: function(proxy: PGProxy; result_: PGAsyncResult; error: PPGError): PGIOStream; cdecl; g_proxy_get_default_for_protocol: function(protocol: Pgchar): PGProxy; cdecl; g_proxy_get_type: function:TGType; cdecl; g_proxy_resolver_get_default: function: PGProxyResolver; cdecl; g_proxy_resolver_get_type: function:TGType; cdecl; g_proxy_resolver_is_supported: function(resolver: PGProxyResolver): gboolean; cdecl; g_proxy_resolver_lookup: function(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; error: PPGError): PPgchar; cdecl; g_proxy_resolver_lookup_async: procedure(resolver: PGProxyResolver; uri: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_proxy_resolver_lookup_finish: function(resolver: PGProxyResolver; result_: PGAsyncResult; error: PPGError): PPgchar; cdecl; g_proxy_supports_hostname: function(proxy: PGProxy): gboolean; cdecl; g_remote_action_group_activate_action_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; parameter: PGVariant; platform_data: PGVariant); cdecl; g_remote_action_group_change_action_state_full: procedure(remote: PGRemoteActionGroup; action_name: Pgchar; value: PGVariant; platform_data: PGVariant); cdecl; g_remote_action_group_get_type: function:TGType; cdecl; g_resolver_error_quark: function: TGQuark; cdecl; g_resolver_free_addresses: procedure(addresses: PGList); cdecl; g_resolver_free_targets: procedure(targets: PGList); cdecl; g_resolver_get_default: function: PGResolver; cdecl; g_resolver_get_type: function:TGType; cdecl; g_resolver_lookup_by_address: function(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; error: PPGError): Pgchar; cdecl; g_resolver_lookup_by_address_async: procedure(resolver: PGResolver; address: PGInetAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_by_address_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): Pgchar; cdecl; g_resolver_lookup_by_name: function(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_by_name_async: procedure(resolver: PGResolver; hostname: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_by_name_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_lookup_records: function(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_records_async: procedure(resolver: PGResolver; rrname: Pgchar; record_type: TGResolverRecordType; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_records_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_lookup_service: function(resolver: PGResolver; service: Pgchar; protocol: Pgchar; domain: Pgchar; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_resolver_lookup_service_async: procedure(resolver: PGResolver; service: Pgchar; protocol: Pgchar; domain: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_resolver_lookup_service_finish: function(resolver: PGResolver; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_resolver_set_default: procedure(resolver: PGResolver); cdecl; g_resource_enumerate_children: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PPgchar; cdecl; g_resource_error_quark: function: TGQuark; cdecl; g_resource_get_info: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; size: Pgsize; flags: Pguint32; error: PPGError): gboolean; cdecl; g_resource_get_type: function:TGType; cdecl; g_resource_load: function(filename: Pgchar; error: PPGError): PGResource; cdecl; g_resource_lookup_data: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGBytes; cdecl; g_resource_new_from_data: function(data: PGBytes; error: PPGError): PGResource; cdecl; g_resource_open_stream: function(resource: PGResource; path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGInputStream; cdecl; g_resource_ref: function(resource: PGResource): PGResource; cdecl; g_resource_unref: procedure(resource: PGResource); cdecl; g_resources_enumerate_children: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PPgchar; cdecl; g_resources_get_info: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; size: Pgsize; flags: Pguint32; error: PPGError): gboolean; cdecl; g_resources_lookup_data: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGBytes; cdecl; g_resources_open_stream: function(path: Pgchar; lookup_flags: TGResourceLookupFlags; error: PPGError): PGInputStream; cdecl; g_resources_register: procedure(resource: PGResource); cdecl; g_resources_unregister: procedure(resource: PGResource); cdecl; g_seekable_can_seek: function(seekable: PGSeekable): gboolean; cdecl; g_seekable_can_truncate: function(seekable: PGSeekable): gboolean; cdecl; g_seekable_get_type: function:TGType; cdecl; g_seekable_seek: function(seekable: PGSeekable; offset: gint64; type_: TGSeekType; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_seekable_tell: function(seekable: PGSeekable): gint64; cdecl; g_seekable_truncate: function(seekable: PGSeekable; offset: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_settings_apply: procedure(settings: PGSettings); cdecl; g_settings_bind: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; flags: TGSettingsBindFlags); cdecl; g_settings_bind_with_mapping: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; flags: TGSettingsBindFlags; get_mapping: TGSettingsBindGetMapping; set_mapping: TGSettingsBindSetMapping; user_data: gpointer; destroy_: TGDestroyNotify); cdecl; g_settings_bind_writable: procedure(settings: PGSettings; key: Pgchar; object_: PGObject; property_: Pgchar; inverted: gboolean); cdecl; g_settings_create_action: function(settings: PGSettings; key: Pgchar): PGAction; cdecl; g_settings_delay: procedure(settings: PGSettings); cdecl; g_settings_get: procedure(settings: PGSettings; key: Pgchar; format: Pgchar; args: array of const); cdecl; g_settings_get_boolean: function(settings: PGSettings; key: Pgchar): gboolean; cdecl; g_settings_get_child: function(settings: PGSettings; name: Pgchar): PGSettings; cdecl; g_settings_get_double: function(settings: PGSettings; key: Pgchar): gdouble; cdecl; g_settings_get_enum: function(settings: PGSettings; key: Pgchar): gint; cdecl; g_settings_get_flags: function(settings: PGSettings; key: Pgchar): guint; cdecl; g_settings_get_has_unapplied: function(settings: PGSettings): gboolean; cdecl; g_settings_get_int: function(settings: PGSettings; key: Pgchar): gint; cdecl; g_settings_get_mapped: function(settings: PGSettings; key: Pgchar; mapping: TGSettingsGetMapping; user_data: gpointer): gpointer; cdecl; g_settings_get_range: function(settings: PGSettings; key: Pgchar): PGVariant; cdecl; g_settings_get_string: function(settings: PGSettings; key: Pgchar): Pgchar; cdecl; g_settings_get_strv: function(settings: PGSettings; key: Pgchar): PPgchar; cdecl; g_settings_get_type: function:TGType; cdecl; g_settings_get_uint: function(settings: PGSettings; key: Pgchar): guint; cdecl; g_settings_get_value: function(settings: PGSettings; key: Pgchar): PGVariant; cdecl; g_settings_is_writable: function(settings: PGSettings; name: Pgchar): gboolean; cdecl; g_settings_list_children: function(settings: PGSettings): PPgchar; cdecl; g_settings_list_keys: function(settings: PGSettings): PPgchar; cdecl; g_settings_list_relocatable_schemas: function: PPgchar; cdecl; g_settings_list_schemas: function: PPgchar; cdecl; g_settings_new: function(schema_id: Pgchar): PGSettings; cdecl; g_settings_new_full: function(schema: PGSettingsSchema; backend: PGSettingsBackend; path: Pgchar): PGSettings; cdecl; g_settings_new_with_backend: function(schema_id: Pgchar; backend: PGSettingsBackend): PGSettings; cdecl; g_settings_new_with_backend_and_path: function(schema_id: Pgchar; backend: PGSettingsBackend; path: Pgchar): PGSettings; cdecl; g_settings_new_with_path: function(schema_id: Pgchar; path: Pgchar): PGSettings; cdecl; g_settings_range_check: function(settings: PGSettings; key: Pgchar; value: PGVariant): gboolean; cdecl; g_settings_reset: procedure(settings: PGSettings; key: Pgchar); cdecl; g_settings_revert: procedure(settings: PGSettings); cdecl; g_settings_schema_get_id: function(schema: PGSettingsSchema): Pgchar; cdecl; g_settings_schema_get_path: function(schema: PGSettingsSchema): Pgchar; cdecl; g_settings_schema_get_type: function:TGType; cdecl; g_settings_schema_ref: function(schema: PGSettingsSchema): PGSettingsSchema; cdecl; g_settings_schema_source_get_default: function: PGSettingsSchemaSource; cdecl; g_settings_schema_source_get_type: function:TGType; cdecl; g_settings_schema_source_lookup: function(source: PGSettingsSchemaSource; schema_id: Pgchar; recursive: gboolean): PGSettingsSchema; cdecl; g_settings_schema_source_new_from_directory: function(directory: Pgchar; parent: PGSettingsSchemaSource; trusted: gboolean; error: PPGError): PGSettingsSchemaSource; cdecl; g_settings_schema_source_ref: function(source: PGSettingsSchemaSource): PGSettingsSchemaSource; cdecl; g_settings_schema_source_unref: procedure(source: PGSettingsSchemaSource); cdecl; g_settings_schema_unref: procedure(schema: PGSettingsSchema); cdecl; g_settings_set: function(settings: PGSettings; key: Pgchar; format: Pgchar; args: array of const): gboolean; cdecl; g_settings_set_boolean: function(settings: PGSettings; key: Pgchar; value: gboolean): gboolean; cdecl; g_settings_set_double: function(settings: PGSettings; key: Pgchar; value: gdouble): gboolean; cdecl; g_settings_set_enum: function(settings: PGSettings; key: Pgchar; value: gint): gboolean; cdecl; g_settings_set_flags: function(settings: PGSettings; key: Pgchar; value: guint): gboolean; cdecl; g_settings_set_int: function(settings: PGSettings; key: Pgchar; value: gint): gboolean; cdecl; g_settings_set_string: function(settings: PGSettings; key: Pgchar; value: Pgchar): gboolean; cdecl; g_settings_set_strv: function(settings: PGSettings; key: Pgchar; value: PPgchar): gboolean; cdecl; g_settings_set_uint: function(settings: PGSettings; key: Pgchar; value: guint): gboolean; cdecl; g_settings_set_value: function(settings: PGSettings; key: Pgchar; value: PGVariant): gboolean; cdecl; g_settings_sync: procedure; cdecl; g_settings_unbind: procedure(object_: gpointer; property_: Pgchar); cdecl; g_simple_action_get_type: function:TGType; cdecl; g_simple_action_group_add_entries: procedure(simple: PGSimpleActionGroup; entries: PGActionEntry; n_entries: gint; user_data: gpointer); cdecl; g_simple_action_group_get_type: function:TGType; cdecl; g_simple_action_group_insert: procedure(simple: PGSimpleActionGroup; action: PGAction); cdecl; g_simple_action_group_lookup: function(simple: PGSimpleActionGroup; action_name: Pgchar): PGAction; cdecl; g_simple_action_group_new: function: PGSimpleActionGroup; cdecl; g_simple_action_group_remove: procedure(simple: PGSimpleActionGroup; action_name: Pgchar); cdecl; g_simple_action_new: function(name: Pgchar; parameter_type: PGVariantType): PGSimpleAction; cdecl; g_simple_action_new_stateful: function(name: Pgchar; parameter_type: PGVariantType; state: PGVariant): PGSimpleAction; cdecl; g_simple_action_set_enabled: procedure(simple: PGSimpleAction; enabled: gboolean); cdecl; g_simple_action_set_state: procedure(simple: PGSimpleAction; value: PGVariant); cdecl; g_simple_async_report_error_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_simple_async_report_gerror_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError); cdecl; g_simple_async_report_take_gerror_in_idle: procedure(object_: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError); cdecl; g_simple_async_result_complete: procedure(simple: PGSimpleAsyncResult); cdecl; g_simple_async_result_complete_in_idle: procedure(simple: PGSimpleAsyncResult); cdecl; g_simple_async_result_get_op_res_gboolean: function(simple: PGSimpleAsyncResult): gboolean; cdecl; g_simple_async_result_get_op_res_gpointer: function(simple: PGSimpleAsyncResult): gpointer; cdecl; g_simple_async_result_get_op_res_gssize: function(simple: PGSimpleAsyncResult): gssize; cdecl; g_simple_async_result_get_source_tag: function(simple: PGSimpleAsyncResult): gpointer; cdecl; g_simple_async_result_get_type: function:TGType; cdecl; g_simple_async_result_is_valid: function(result_: PGAsyncResult; source: PGObject; source_tag: gpointer): gboolean; cdecl; g_simple_async_result_new: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; source_tag: gpointer): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_from_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError): PGSimpleAsyncResult; cdecl; g_simple_async_result_new_take_error: function(source_object: PGObject; callback: TGAsyncReadyCallback; user_data: gpointer; error: PGError): PGSimpleAsyncResult; cdecl; g_simple_async_result_propagate_error: function(simple: PGSimpleAsyncResult; error: PPGError): gboolean; cdecl; g_simple_async_result_run_in_thread: procedure(simple: PGSimpleAsyncResult; func: TGSimpleAsyncThreadFunc; io_priority: gint; cancellable: PGCancellable); cdecl; g_simple_async_result_set_check_cancellable: procedure(simple: PGSimpleAsyncResult; check_cancellable: PGCancellable); cdecl; g_simple_async_result_set_error: procedure(simple: PGSimpleAsyncResult; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_simple_async_result_set_error_va: procedure(simple: PGSimpleAsyncResult; domain: TGQuark; code: gint; format: Pgchar; args: Tva_list); cdecl; g_simple_async_result_set_from_error: procedure(simple: PGSimpleAsyncResult; error: PGError); cdecl; g_simple_async_result_set_handle_cancellation: procedure(simple: PGSimpleAsyncResult; handle_cancellation: gboolean); cdecl; g_simple_async_result_set_op_res_gboolean: procedure(simple: PGSimpleAsyncResult; op_res: gboolean); cdecl; g_simple_async_result_set_op_res_gpointer: procedure(simple: PGSimpleAsyncResult; op_res: gpointer; destroy_op_res: TGDestroyNotify); cdecl; g_simple_async_result_set_op_res_gssize: procedure(simple: PGSimpleAsyncResult; op_res: gssize); cdecl; g_simple_async_result_take_error: procedure(simple: PGSimpleAsyncResult; error: PGError); cdecl; g_simple_permission_get_type: function:TGType; cdecl; g_simple_permission_new: function(allowed: gboolean): PGSimplePermission; cdecl; g_simple_proxy_resolver_get_type: function:TGType; cdecl; g_simple_proxy_resolver_new: function(default_proxy: Pgchar; ignore_hosts: PPgchar): PGProxyResolver; cdecl; g_simple_proxy_resolver_set_default_proxy: procedure(resolver: PGSimpleProxyResolver; default_proxy: Pgchar); cdecl; g_simple_proxy_resolver_set_ignore_hosts: procedure(resolver: PGSimpleProxyResolver; ignore_hosts: PPgchar); cdecl; g_simple_proxy_resolver_set_uri_proxy: procedure(resolver: PGSimpleProxyResolver; uri_scheme: Pgchar; proxy: Pgchar); cdecl; g_socket_accept: function(socket: PGSocket; cancellable: PGCancellable; error: PPGError): PGSocket; cdecl; g_socket_address_enumerator_get_type: function:TGType; cdecl; g_socket_address_enumerator_next: function(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; error: PPGError): PGSocketAddress; cdecl; g_socket_address_enumerator_next_async: procedure(enumerator: PGSocketAddressEnumerator; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_address_enumerator_next_finish: function(enumerator: PGSocketAddressEnumerator; result_: PGAsyncResult; error: PPGError): PGSocketAddress; cdecl; g_socket_address_get_family: function(address: PGSocketAddress): TGSocketFamily; cdecl; g_socket_address_get_native_size: function(address: PGSocketAddress): gssize; cdecl; g_socket_address_get_type: function:TGType; cdecl; g_socket_address_new_from_native: function(native: gpointer; len: gsize): PGSocketAddress; cdecl; g_socket_address_to_native: function(address: PGSocketAddress; dest: gpointer; destlen: gsize; error: PPGError): gboolean; cdecl; g_socket_bind: function(socket: PGSocket; address: PGSocketAddress; allow_reuse: gboolean; error: PPGError): gboolean; cdecl; g_socket_check_connect_result: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_client_add_application_proxy: procedure(client: PGSocketClient; protocol: Pgchar); cdecl; g_socket_client_connect: function(client: PGSocketClient; connectable: PGSocketConnectable; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_async: procedure(client: PGSocketClient; connectable: PGSocketConnectable; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_host: function(client: PGSocketClient; host_and_port: Pgchar; default_port: guint16; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_host_async: procedure(client: PGSocketClient; host_and_port: Pgchar; default_port: guint16; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_host_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_service: function(client: PGSocketClient; domain: Pgchar; service: Pgchar; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_service_async: procedure(client: PGSocketClient; domain: Pgchar; service: Pgchar; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_service_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_uri: function(client: PGSocketClient; uri: Pgchar; default_port: guint16; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_client_connect_to_uri_async: procedure(client: PGSocketClient; uri: Pgchar; default_port: guint16; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_client_connect_to_uri_finish: function(client: PGSocketClient; result_: PGAsyncResult; error: PPGError): PGSocketConnection; cdecl; g_socket_client_get_enable_proxy: function(client: PGSocketClient): gboolean; cdecl; g_socket_client_get_family: function(client: PGSocketClient): TGSocketFamily; cdecl; g_socket_client_get_local_address: function(client: PGSocketClient): PGSocketAddress; cdecl; g_socket_client_get_protocol: function(client: PGSocketClient): TGSocketProtocol; cdecl; g_socket_client_get_proxy_resolver: function(client: PGSocketClient): PGProxyResolver; cdecl; g_socket_client_get_socket_type: function(client: PGSocketClient): TGSocketType; cdecl; g_socket_client_get_timeout: function(client: PGSocketClient): guint; cdecl; g_socket_client_get_tls: function(client: PGSocketClient): gboolean; cdecl; g_socket_client_get_tls_validation_flags: function(client: PGSocketClient): TGTlsCertificateFlags; cdecl; g_socket_client_get_type: function:TGType; cdecl; g_socket_client_new: function: PGSocketClient; cdecl; g_socket_client_set_enable_proxy: procedure(client: PGSocketClient; enable: gboolean); cdecl; g_socket_client_set_family: procedure(client: PGSocketClient; family: TGSocketFamily); cdecl; g_socket_client_set_local_address: procedure(client: PGSocketClient; address: PGSocketAddress); cdecl; g_socket_client_set_protocol: procedure(client: PGSocketClient; protocol: TGSocketProtocol); cdecl; g_socket_client_set_proxy_resolver: procedure(client: PGSocketClient; proxy_resolver: PGProxyResolver); cdecl; g_socket_client_set_socket_type: procedure(client: PGSocketClient; type_: TGSocketType); cdecl; g_socket_client_set_timeout: procedure(client: PGSocketClient; timeout: guint); cdecl; g_socket_client_set_tls: procedure(client: PGSocketClient; tls: gboolean); cdecl; g_socket_client_set_tls_validation_flags: procedure(client: PGSocketClient; flags: TGTlsCertificateFlags); cdecl; g_socket_close: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_condition_check: function(socket: PGSocket; condition: TGIOCondition): TGIOCondition; cdecl; g_socket_condition_timed_wait: function(socket: PGSocket; condition: TGIOCondition; timeout: gint64; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_condition_wait: function(socket: PGSocket; condition: TGIOCondition; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connect: function(socket: PGSocket; address: PGSocketAddress; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connectable_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; g_socket_connectable_get_type: function:TGType; cdecl; g_socket_connectable_proxy_enumerate: function(connectable: PGSocketConnectable): PGSocketAddressEnumerator; cdecl; g_socket_connection_connect: function(connection: PGSocketConnection; address: PGSocketAddress; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_socket_connection_connect_async: procedure(connection: PGSocketConnection; address: PGSocketAddress; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_connection_connect_finish: function(connection: PGSocketConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_socket_connection_factory_create_connection: function(socket: PGSocket): PGSocketConnection; cdecl; g_socket_connection_factory_lookup_type: function(family: TGSocketFamily; type_: TGSocketType; protocol_id: gint): TGType; cdecl; g_socket_connection_factory_register_type: procedure(g_type: TGType; family: TGSocketFamily; type_: TGSocketType; protocol: gint); cdecl; g_socket_connection_get_local_address: function(connection: PGSocketConnection; error: PPGError): PGSocketAddress; cdecl; g_socket_connection_get_remote_address: function(connection: PGSocketConnection; error: PPGError): PGSocketAddress; cdecl; g_socket_connection_get_socket: function(connection: PGSocketConnection): PGSocket; cdecl; g_socket_connection_get_type: function:TGType; cdecl; g_socket_connection_is_connected: function(connection: PGSocketConnection): gboolean; cdecl; g_socket_control_message_deserialize: function(level: gint; type_: gint; size: gsize; data: guint8): PGSocketControlMessage; cdecl; g_socket_control_message_get_level: function(message: PGSocketControlMessage): gint; cdecl; g_socket_control_message_get_msg_type: function(message: PGSocketControlMessage): gint; cdecl; g_socket_control_message_get_size: function(message: PGSocketControlMessage): gsize; cdecl; g_socket_control_message_get_type: function:TGType; cdecl; g_socket_control_message_serialize: procedure(message: PGSocketControlMessage; data: gpointer); cdecl; g_socket_create_source: function(socket: PGSocket; condition: TGIOCondition; cancellable: PGCancellable): PGSource; cdecl; g_socket_get_available_bytes: function(socket: PGSocket): gssize; cdecl; g_socket_get_blocking: function(socket: PGSocket): gboolean; cdecl; g_socket_get_broadcast: function(socket: PGSocket): gboolean; cdecl; g_socket_get_credentials: function(socket: PGSocket; error: PPGError): PGCredentials; cdecl; g_socket_get_family: function(socket: PGSocket): TGSocketFamily; cdecl; g_socket_get_fd: function(socket: PGSocket): gint; cdecl; g_socket_get_keepalive: function(socket: PGSocket): gboolean; cdecl; g_socket_get_listen_backlog: function(socket: PGSocket): gint; cdecl; g_socket_get_local_address: function(socket: PGSocket; error: PPGError): PGSocketAddress; cdecl; g_socket_get_multicast_loopback: function(socket: PGSocket): gboolean; cdecl; g_socket_get_multicast_ttl: function(socket: PGSocket): guint; cdecl; g_socket_get_option: function(socket: PGSocket; level: gint; optname: gint; value: Pgint; error: PPGError): gboolean; cdecl; g_socket_get_protocol: function(socket: PGSocket): TGSocketProtocol; cdecl; g_socket_get_remote_address: function(socket: PGSocket; error: PPGError): PGSocketAddress; cdecl; g_socket_get_socket_type: function(socket: PGSocket): TGSocketType; cdecl; g_socket_get_timeout: function(socket: PGSocket): guint; cdecl; g_socket_get_ttl: function(socket: PGSocket): guint; cdecl; g_socket_get_type: function:TGType; cdecl; g_socket_is_closed: function(socket: PGSocket): gboolean; cdecl; g_socket_is_connected: function(socket: PGSocket): gboolean; cdecl; g_socket_join_multicast_group: function(socket: PGSocket; group: PGInetAddress; source_specific: gboolean; iface: Pgchar; error: PPGError): gboolean; cdecl; g_socket_leave_multicast_group: function(socket: PGSocket; group: PGInetAddress; source_specific: gboolean; iface: Pgchar; error: PPGError): gboolean; cdecl; g_socket_listen: function(socket: PGSocket; error: PPGError): gboolean; cdecl; g_socket_listener_accept: function(listener: PGSocketListener; source_object: PPGObject; cancellable: PGCancellable; error: PPGError): PGSocketConnection; cdecl; g_socket_listener_accept_async: procedure(listener: PGSocketListener; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_listener_accept_finish: function(listener: PGSocketListener; result_: PGAsyncResult; source_object: PPGObject; error: PPGError): PGSocketConnection; cdecl; g_socket_listener_accept_socket: function(listener: PGSocketListener; source_object: PPGObject; cancellable: PGCancellable; error: PPGError): PGSocket; cdecl; g_socket_listener_accept_socket_async: procedure(listener: PGSocketListener; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_socket_listener_accept_socket_finish: function(listener: PGSocketListener; result_: PGAsyncResult; source_object: PPGObject; error: PPGError): PGSocket; cdecl; g_socket_listener_add_address: function(listener: PGSocketListener; address: PGSocketAddress; type_: TGSocketType; protocol: TGSocketProtocol; source_object: PGObject; effective_address: PPGSocketAddress; error: PPGError): gboolean; cdecl; g_socket_listener_add_any_inet_port: function(listener: PGSocketListener; source_object: PGObject; error: PPGError): guint16; cdecl; g_socket_listener_add_inet_port: function(listener: PGSocketListener; port: guint16; source_object: PGObject; error: PPGError): gboolean; cdecl; g_socket_listener_add_socket: function(listener: PGSocketListener; socket: PGSocket; source_object: PGObject; error: PPGError): gboolean; cdecl; g_socket_listener_close: procedure(listener: PGSocketListener); cdecl; g_socket_listener_get_type: function:TGType; cdecl; g_socket_listener_new: function: PGSocketListener; cdecl; g_socket_listener_set_backlog: procedure(listener: PGSocketListener; listen_backlog: gint); cdecl; g_socket_new: function(family: TGSocketFamily; type_: TGSocketType; protocol: TGSocketProtocol; error: PPGError): PGSocket; cdecl; g_socket_new_from_fd: function(fd: gint; error: PPGError): PGSocket; cdecl; g_socket_receive: function(socket: PGSocket; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_from: function(socket: PGSocket; address: PPGSocketAddress; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_message: function(socket: PGSocket; address: PPGSocketAddress; vectors: PGInputVector; num_vectors: gint; messages: PPPGSocketControlMessage; num_messages: Pgint; flags: Pgint; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_receive_with_blocking: function(socket: PGSocket; buffer: Pgchar; size: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send: function(socket: PGSocket; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_message: function(socket: PGSocket; address: PGSocketAddress; vectors: PGOutputVector; num_vectors: gint; messages: PPGSocketControlMessage; num_messages: gint; flags: gint; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_to: function(socket: PGSocket; address: PGSocketAddress; buffer: Pgchar; size: gsize; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_send_with_blocking: function(socket: PGSocket; buffer: Pgchar; size: gsize; blocking: gboolean; cancellable: PGCancellable; error: PPGError): gssize; cdecl; g_socket_service_get_type: function:TGType; cdecl; g_socket_service_is_active: function(service: PGSocketService): gboolean; cdecl; g_socket_service_new: function: PGSocketService; cdecl; g_socket_service_start: procedure(service: PGSocketService); cdecl; g_socket_service_stop: procedure(service: PGSocketService); cdecl; g_socket_set_blocking: procedure(socket: PGSocket; blocking: gboolean); cdecl; g_socket_set_broadcast: procedure(socket: PGSocket; broadcast: gboolean); cdecl; g_socket_set_keepalive: procedure(socket: PGSocket; keepalive: gboolean); cdecl; g_socket_set_listen_backlog: procedure(socket: PGSocket; backlog: gint); cdecl; g_socket_set_multicast_loopback: procedure(socket: PGSocket; loopback: gboolean); cdecl; g_socket_set_multicast_ttl: procedure(socket: PGSocket; ttl: guint); cdecl; g_socket_set_option: function(socket: PGSocket; level: gint; optname: gint; value: gint; error: PPGError): gboolean; cdecl; g_socket_set_timeout: procedure(socket: PGSocket; timeout: guint); cdecl; g_socket_set_ttl: procedure(socket: PGSocket; ttl: guint); cdecl; g_socket_shutdown: function(socket: PGSocket; shutdown_read: gboolean; shutdown_write: gboolean; error: PPGError): gboolean; cdecl; g_socket_speaks_ipv4: function(socket: PGSocket): gboolean; cdecl; g_srv_target_copy: function(target: PGSrvTarget): PGSrvTarget; cdecl; g_srv_target_free: procedure(target: PGSrvTarget); cdecl; g_srv_target_get_hostname: function(target: PGSrvTarget): Pgchar; cdecl; g_srv_target_get_port: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_get_priority: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_get_type: function:TGType; cdecl; g_srv_target_get_weight: function(target: PGSrvTarget): guint16; cdecl; g_srv_target_list_sort: function(targets: PGList): PGList; cdecl; g_srv_target_new: function(hostname: Pgchar; port: guint16; priority: guint16; weight: guint16): PGSrvTarget; cdecl; g_static_resource_fini: procedure(static_resource: PGStaticResource); cdecl; g_static_resource_get_resource: function(static_resource: PGStaticResource): PGResource; cdecl; g_static_resource_init: procedure(static_resource: PGStaticResource); cdecl; g_task_attach_source: procedure(task: PGTask; source: PGSource; callback: TGSourceFunc); cdecl; g_task_get_cancellable: function(task: PGTask): PGCancellable; cdecl; g_task_get_check_cancellable: function(task: PGTask): gboolean; cdecl; g_task_get_context: function(task: PGTask): PGMainContext; cdecl; g_task_get_priority: function(task: PGTask): gint; cdecl; g_task_get_return_on_cancel: function(task: PGTask): gboolean; cdecl; g_task_get_source_object: function(task: PGTask): PGObject; cdecl; g_task_get_source_tag: function(task: PGTask): gpointer; cdecl; g_task_get_task_data: function(task: PGTask): gpointer; cdecl; g_task_get_type: function:TGType; cdecl; g_task_had_error: function(task: PGTask): gboolean; cdecl; g_task_is_valid: function(result_: PGAsyncResult; source_object: PGObject): gboolean; cdecl; g_task_new: function(source_object: PGObject; cancellable: PGCancellable; callback: TGAsyncReadyCallback; callback_data: gpointer): PGTask; cdecl; g_task_propagate_boolean: function(task: PGTask; error: PPGError): gboolean; cdecl; g_task_propagate_int: function(task: PGTask; error: PPGError): gssize; cdecl; g_task_propagate_pointer: function(task: PGTask; error: PPGError): gpointer; cdecl; g_task_report_error: procedure(source_object: PGObject; callback: TGAsyncReadyCallback; callback_data: gpointer; source_tag: gpointer; error: PGError); cdecl; g_task_report_new_error: procedure(source_object: PGObject; callback: TGAsyncReadyCallback; callback_data: gpointer; source_tag: gpointer; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_task_return_boolean: procedure(task: PGTask; result_: gboolean); cdecl; g_task_return_error: procedure(task: PGTask; error: PGError); cdecl; g_task_return_error_if_cancelled: function(task: PGTask): gboolean; cdecl; g_task_return_int: procedure(task: PGTask; result_: gssize); cdecl; g_task_return_new_error: procedure(task: PGTask; domain: TGQuark; code: gint; format: Pgchar; args: array of const); cdecl; g_task_return_pointer: procedure(task: PGTask; result_: gpointer; result_destroy: TGDestroyNotify); cdecl; g_task_run_in_thread: procedure(task: PGTask; task_func: TGTaskThreadFunc); cdecl; g_task_run_in_thread_sync: procedure(task: PGTask; task_func: TGTaskThreadFunc); cdecl; g_task_set_check_cancellable: procedure(task: PGTask; check_cancellable: gboolean); cdecl; g_task_set_priority: procedure(task: PGTask; priority: gint); cdecl; g_task_set_return_on_cancel: function(task: PGTask; return_on_cancel: gboolean): gboolean; cdecl; g_task_set_source_tag: procedure(task: PGTask; source_tag: gpointer); cdecl; g_task_set_task_data: procedure(task: PGTask; task_data: gpointer; task_data_destroy: TGDestroyNotify); cdecl; g_tcp_connection_get_graceful_disconnect: function(connection: PGTcpConnection): gboolean; cdecl; g_tcp_connection_get_type: function:TGType; cdecl; g_tcp_connection_set_graceful_disconnect: procedure(connection: PGTcpConnection; graceful_disconnect: gboolean); cdecl; g_tcp_wrapper_connection_get_base_io_stream: function(conn: PGTcpWrapperConnection): PGIOStream; cdecl; g_tcp_wrapper_connection_get_type: function:TGType; cdecl; g_tcp_wrapper_connection_new: function(base_io_stream: PGIOStream; socket: PGSocket): PGTcpWrapperConnection; cdecl; g_test_dbus_add_service_dir: procedure(self: PGTestDBus; path: Pgchar); cdecl; g_test_dbus_down: procedure(self: PGTestDBus); cdecl; g_test_dbus_get_bus_address: function(self: PGTestDBus): Pgchar; cdecl; g_test_dbus_get_flags: function(self: PGTestDBus): TGTestDBusFlags; cdecl; g_test_dbus_get_type: function:TGType; cdecl; g_test_dbus_new: function(flags: TGTestDBusFlags): PGTestDBus; cdecl; g_test_dbus_stop: procedure(self: PGTestDBus); cdecl; g_test_dbus_unset: procedure; cdecl; g_test_dbus_up: procedure(self: PGTestDBus); cdecl; g_themed_icon_append_name: procedure(icon: PGThemedIcon; iconname: Pgchar); cdecl; g_themed_icon_get_names: function(icon: PGThemedIcon): PPgchar; cdecl; g_themed_icon_get_type: function:TGType; cdecl; g_themed_icon_new: function(iconname: Pgchar): PGThemedIcon; cdecl; g_themed_icon_new_from_names: function(iconnames: PPgchar; len: gint): PGThemedIcon; cdecl; g_themed_icon_new_with_default_fallbacks: function(iconname: Pgchar): PGThemedIcon; cdecl; g_themed_icon_prepend_name: procedure(icon: PGThemedIcon; iconname: Pgchar); cdecl; g_threaded_socket_service_get_type: function:TGType; cdecl; g_threaded_socket_service_new: function(max_threads: gint): PGThreadedSocketService; cdecl; g_tls_backend_get_certificate_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_client_connection_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_default: function: PGTlsBackend; cdecl; g_tls_backend_get_default_database: function(backend: PGTlsBackend): PGTlsDatabase; cdecl; g_tls_backend_get_file_database_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_server_connection_type: function(backend: PGTlsBackend): TGType; cdecl; g_tls_backend_get_type: function:TGType; cdecl; g_tls_backend_supports_tls: function(backend: PGTlsBackend): gboolean; cdecl; g_tls_certificate_get_issuer: function(cert: PGTlsCertificate): PGTlsCertificate; cdecl; g_tls_certificate_get_type: function:TGType; cdecl; g_tls_certificate_is_same: function(cert_one: PGTlsCertificate; cert_two: PGTlsCertificate): gboolean; cdecl; g_tls_certificate_list_new_from_file: function(file_: Pgchar; error: PPGError): PGList; cdecl; g_tls_certificate_new_from_file: function(file_: Pgchar; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_new_from_files: function(cert_file: Pgchar; key_file: Pgchar; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_new_from_pem: function(data: Pgchar; length: gssize; error: PPGError): PGTlsCertificate; cdecl; g_tls_certificate_verify: function(cert: PGTlsCertificate; identity: PGSocketConnectable; trusted_ca: PGTlsCertificate): TGTlsCertificateFlags; cdecl; g_tls_client_connection_get_accepted_cas: function(conn: PGTlsClientConnection): PGList; cdecl; g_tls_client_connection_get_server_identity: function(conn: PGTlsClientConnection): PGSocketConnectable; cdecl; g_tls_client_connection_get_type: function:TGType; cdecl; g_tls_client_connection_get_use_ssl3: function(conn: PGTlsClientConnection): gboolean; cdecl; g_tls_client_connection_get_validation_flags: function(conn: PGTlsClientConnection): TGTlsCertificateFlags; cdecl; g_tls_client_connection_new: function(base_io_stream: PGIOStream; server_identity: PGSocketConnectable; error: PPGError): PGTlsClientConnection; cdecl; g_tls_client_connection_set_server_identity: procedure(conn: PGTlsClientConnection; identity: PGSocketConnectable); cdecl; g_tls_client_connection_set_use_ssl3: procedure(conn: PGTlsClientConnection; use_ssl3: gboolean); cdecl; g_tls_client_connection_set_validation_flags: procedure(conn: PGTlsClientConnection; flags: TGTlsCertificateFlags); cdecl; g_tls_connection_emit_accept_certificate: function(conn: PGTlsConnection; peer_cert: PGTlsCertificate; errors: TGTlsCertificateFlags): gboolean; cdecl; g_tls_connection_get_certificate: function(conn: PGTlsConnection): PGTlsCertificate; cdecl; g_tls_connection_get_database: function(conn: PGTlsConnection): PGTlsDatabase; cdecl; g_tls_connection_get_interaction: function(conn: PGTlsConnection): PGTlsInteraction; cdecl; g_tls_connection_get_peer_certificate: function(conn: PGTlsConnection): PGTlsCertificate; cdecl; g_tls_connection_get_peer_certificate_errors: function(conn: PGTlsConnection): TGTlsCertificateFlags; cdecl; g_tls_connection_get_rehandshake_mode: function(conn: PGTlsConnection): TGTlsRehandshakeMode; cdecl; g_tls_connection_get_require_close_notify: function(conn: PGTlsConnection): gboolean; cdecl; g_tls_connection_get_type: function:TGType; cdecl; g_tls_connection_handshake: function(conn: PGTlsConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_tls_connection_handshake_async: procedure(conn: PGTlsConnection; io_priority: gint; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_connection_handshake_finish: function(conn: PGTlsConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_tls_connection_set_certificate: procedure(conn: PGTlsConnection; certificate: PGTlsCertificate); cdecl; g_tls_connection_set_database: procedure(conn: PGTlsConnection; database: PGTlsDatabase); cdecl; g_tls_connection_set_interaction: procedure(conn: PGTlsConnection; interaction: PGTlsInteraction); cdecl; g_tls_connection_set_rehandshake_mode: procedure(conn: PGTlsConnection; mode: TGTlsRehandshakeMode); cdecl; g_tls_connection_set_require_close_notify: procedure(conn: PGTlsConnection; require_close_notify: gboolean); cdecl; g_tls_database_create_certificate_handle: function(self: PGTlsDatabase; certificate: PGTlsCertificate): Pgchar; cdecl; g_tls_database_get_type: function:TGType; cdecl; g_tls_database_lookup_certificate_for_handle: function(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_for_handle_async: procedure(self: PGTlsDatabase; handle: Pgchar; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificate_for_handle_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_issuer: function(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificate_issuer_async: procedure(self: PGTlsDatabase; certificate: PGTlsCertificate; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificate_issuer_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGTlsCertificate; cdecl; g_tls_database_lookup_certificates_issued_by: function(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; error: PPGError): PGList; cdecl; g_tls_database_lookup_certificates_issued_by_async: procedure(self: PGTlsDatabase; issuer_raw_dn: Pguint8; interaction: PGTlsInteraction; flags: TGTlsDatabaseLookupFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_lookup_certificates_issued_by_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): PGList; cdecl; g_tls_database_verify_chain: function(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; error: PPGError): TGTlsCertificateFlags; cdecl; g_tls_database_verify_chain_async: procedure(self: PGTlsDatabase; chain: PGTlsCertificate; purpose: Pgchar; identity: PGSocketConnectable; interaction: PGTlsInteraction; flags: TGTlsDatabaseVerifyFlags; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_database_verify_chain_finish: function(self: PGTlsDatabase; result_: PGAsyncResult; error: PPGError): TGTlsCertificateFlags; cdecl; g_tls_error_quark: function: TGQuark; cdecl; g_tls_file_database_get_type: function:TGType; cdecl; g_tls_file_database_new: function(anchors: Pgchar; error: PPGError): PGTlsFileDatabase; cdecl; g_tls_interaction_ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_interaction_ask_password_async: procedure(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_tls_interaction_ask_password_finish: function(interaction: PGTlsInteraction; result_: PGAsyncResult; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_interaction_get_type: function:TGType; cdecl; g_tls_interaction_invoke_ask_password: function(interaction: PGTlsInteraction; password: PGTlsPassword; cancellable: PGCancellable; error: PPGError): TGTlsInteractionResult; cdecl; g_tls_password_get_description: function(password: PGTlsPassword): Pgchar; cdecl; g_tls_password_get_flags: function(password: PGTlsPassword): TGTlsPasswordFlags; cdecl; g_tls_password_get_type: function:TGType; cdecl; g_tls_password_get_value: function(password: PGTlsPassword; length: Pgsize): Pguint8; cdecl; g_tls_password_get_warning: function(password: PGTlsPassword): Pgchar; cdecl; g_tls_password_new: function(flags: TGTlsPasswordFlags; description: Pgchar): PGTlsPassword; cdecl; g_tls_password_set_description: procedure(password: PGTlsPassword; description: Pgchar); cdecl; g_tls_password_set_flags: procedure(password: PGTlsPassword; flags: TGTlsPasswordFlags); cdecl; g_tls_password_set_value: procedure(password: PGTlsPassword; value: Pguint8; length: gssize); cdecl; g_tls_password_set_value_full: procedure(password: PGTlsPassword; value: Pguint8; length: gssize; destroy_: TGDestroyNotify); cdecl; g_tls_password_set_warning: procedure(password: PGTlsPassword; warning: Pgchar); cdecl; g_tls_server_connection_get_type: function:TGType; cdecl; g_tls_server_connection_new: function(base_io_stream: PGIOStream; certificate: PGTlsCertificate; error: PPGError): PGTlsServerConnection; cdecl; g_unix_connection_get_type: function:TGType; cdecl; g_unix_connection_receive_credentials: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): PGCredentials; cdecl; g_unix_connection_receive_credentials_async: procedure(connection: PGUnixConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_unix_connection_receive_credentials_finish: function(connection: PGUnixConnection; result_: PGAsyncResult; error: PPGError): PGCredentials; cdecl; g_unix_connection_receive_fd: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): gint; cdecl; g_unix_connection_send_credentials: function(connection: PGUnixConnection; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_unix_connection_send_credentials_async: procedure(connection: PGUnixConnection; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_unix_connection_send_credentials_finish: function(connection: PGUnixConnection; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_unix_connection_send_fd: function(connection: PGUnixConnection; fd: gint; cancellable: PGCancellable; error: PPGError): gboolean; cdecl; g_unix_credentials_message_get_credentials: function(message: PGUnixCredentialsMessage): PGCredentials; cdecl; g_unix_credentials_message_get_type: function:TGType; cdecl; g_unix_credentials_message_is_supported: function: gboolean; cdecl; g_unix_credentials_message_new: function: PGUnixCredentialsMessage; cdecl; g_unix_credentials_message_new_with_credentials: function(credentials: PGCredentials): PGUnixCredentialsMessage; cdecl; g_unix_fd_list_append: function(list: PGUnixFDList; fd: gint; error: PPGError): gint; cdecl; g_unix_fd_list_get: function(list: PGUnixFDList; index_: gint; error: PPGError): gint; cdecl; g_unix_fd_list_get_length: function(list: PGUnixFDList): gint; cdecl; g_unix_fd_list_get_type: function:TGType; cdecl; g_unix_fd_list_new: function: PGUnixFDList; cdecl; g_unix_fd_list_new_from_array: function(fds: Pgint; n_fds: gint): PGUnixFDList; cdecl; g_unix_fd_list_peek_fds: function(list: PGUnixFDList; length: Pgint): Pgint; cdecl; g_unix_fd_list_steal_fds: function(list: PGUnixFDList; length: Pgint): Pgint; cdecl; g_unix_fd_message_append_fd: function(message: PGUnixFDMessage; fd: gint; error: PPGError): gboolean; cdecl; g_unix_fd_message_get_fd_list: function(message: PGUnixFDMessage): PGUnixFDList; cdecl; g_unix_fd_message_get_type: function:TGType; cdecl; g_unix_fd_message_new: function: PGUnixFDMessage; cdecl; g_unix_fd_message_new_with_fd_list: function(fd_list: PGUnixFDList): PGUnixFDMessage; cdecl; g_unix_fd_message_steal_fds: function(message: PGUnixFDMessage; length: Pgint): Pgint; cdecl; g_unix_input_stream_get_close_fd: function(stream: PGUnixInputStream): gboolean; cdecl; g_unix_input_stream_get_fd: function(stream: PGUnixInputStream): gint; cdecl; g_unix_input_stream_get_type: function:TGType; cdecl; g_unix_input_stream_new: function(fd: gint; close_fd: gboolean): PGUnixInputStream; cdecl; g_unix_input_stream_set_close_fd: procedure(stream: PGUnixInputStream; close_fd: gboolean); cdecl; g_unix_is_mount_path_system_internal: function(mount_path: Pgchar): gboolean; cdecl; g_unix_mount_at: function(mount_path: Pgchar; time_read: Pguint64): PGUnixMountEntry; cdecl; g_unix_mount_compare: function(mount1: PGUnixMountEntry; mount2: PGUnixMountEntry): gint; cdecl; g_unix_mount_free: procedure(mount_entry: PGUnixMountEntry); cdecl; g_unix_mount_get_device_path: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_get_fs_type: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_get_mount_path: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_guess_can_eject: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_guess_icon: function(mount_entry: PGUnixMountEntry): PGIcon; cdecl; g_unix_mount_guess_name: function(mount_entry: PGUnixMountEntry): Pgchar; cdecl; g_unix_mount_guess_should_display: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_guess_symbolic_icon: function(mount_entry: PGUnixMountEntry): PGIcon; cdecl; g_unix_mount_is_readonly: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_is_system_internal: function(mount_entry: PGUnixMountEntry): gboolean; cdecl; g_unix_mount_monitor_get_type: function:TGType; cdecl; g_unix_mount_monitor_new: function: PGUnixMountMonitor; cdecl; g_unix_mount_monitor_set_rate_limit: procedure(mount_monitor: PGUnixMountMonitor; limit_msec: gint); cdecl; g_unix_mount_point_compare: function(mount1: PGUnixMountPoint; mount2: PGUnixMountPoint): gint; cdecl; g_unix_mount_point_free: procedure(mount_point: PGUnixMountPoint); cdecl; g_unix_mount_point_get_device_path: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_fs_type: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_mount_path: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_get_options: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_guess_can_eject: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_guess_icon: function(mount_point: PGUnixMountPoint): PGIcon; cdecl; g_unix_mount_point_guess_name: function(mount_point: PGUnixMountPoint): Pgchar; cdecl; g_unix_mount_point_guess_symbolic_icon: function(mount_point: PGUnixMountPoint): PGIcon; cdecl; g_unix_mount_point_is_loopback: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_is_readonly: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_point_is_user_mountable: function(mount_point: PGUnixMountPoint): gboolean; cdecl; g_unix_mount_points_changed_since: function(time: guint64): gboolean; cdecl; g_unix_mount_points_get: function(time_read: Pguint64): PGList; cdecl; g_unix_mounts_changed_since: function(time: guint64): gboolean; cdecl; g_unix_mounts_get: function(time_read: Pguint64): PGList; cdecl; g_unix_output_stream_get_close_fd: function(stream: PGUnixOutputStream): gboolean; cdecl; g_unix_output_stream_get_fd: function(stream: PGUnixOutputStream): gint; cdecl; g_unix_output_stream_get_type: function:TGType; cdecl; g_unix_output_stream_new: function(fd: gint; close_fd: gboolean): PGUnixOutputStream; cdecl; g_unix_output_stream_set_close_fd: procedure(stream: PGUnixOutputStream; close_fd: gboolean); cdecl; g_unix_socket_address_abstract_names_supported: function: gboolean; cdecl; g_unix_socket_address_get_address_type: function(address: PGUnixSocketAddress): TGUnixSocketAddressType; cdecl; g_unix_socket_address_get_path: function(address: PGUnixSocketAddress): Pgchar; cdecl; g_unix_socket_address_get_path_len: function(address: PGUnixSocketAddress): gsize; cdecl; g_unix_socket_address_get_type: function:TGType; cdecl; g_unix_socket_address_new: function(path: Pgchar): PGUnixSocketAddress; cdecl; g_unix_socket_address_new_with_type: function(path: Pgchar; path_len: gint; type_: TGUnixSocketAddressType): PGUnixSocketAddress; cdecl; g_vfs_get_default: function: PGVfs; cdecl; g_vfs_get_file_for_path: function(vfs: PGVfs; path: Pgchar): PGFile; cdecl; g_vfs_get_file_for_uri: function(vfs: PGVfs; uri: Pgchar): PGFile; cdecl; g_vfs_get_local: function: PGVfs; cdecl; g_vfs_get_supported_uri_schemes: function(vfs: PGVfs): PPgchar; cdecl; g_vfs_get_type: function:TGType; cdecl; g_vfs_is_active: function(vfs: PGVfs): gboolean; cdecl; g_vfs_parse_name: function(vfs: PGVfs; parse_name: Pgchar): PGFile; cdecl; g_volume_can_eject: function(volume: PGVolume): gboolean; cdecl; g_volume_can_mount: function(volume: PGVolume): gboolean; cdecl; g_volume_eject_with_operation: procedure(volume: PGVolume; flags: TGMountUnmountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_volume_eject_with_operation_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_volume_enumerate_identifiers: function(volume: PGVolume): PPgchar; cdecl; g_volume_get_activation_root: function(volume: PGVolume): PGFile; cdecl; g_volume_get_drive: function(volume: PGVolume): PGDrive; cdecl; g_volume_get_icon: function(volume: PGVolume): PGIcon; cdecl; g_volume_get_identifier: function(volume: PGVolume; kind: Pgchar): Pgchar; cdecl; g_volume_get_mount: function(volume: PGVolume): PGMount; cdecl; g_volume_get_name: function(volume: PGVolume): Pgchar; cdecl; g_volume_get_sort_key: function(volume: PGVolume): Pgchar; cdecl; g_volume_get_symbolic_icon: function(volume: PGVolume): PGIcon; cdecl; g_volume_get_type: function:TGType; cdecl; g_volume_get_uuid: function(volume: PGVolume): Pgchar; cdecl; g_volume_monitor_get: function: PGVolumeMonitor; cdecl; g_volume_monitor_get_connected_drives: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_monitor_get_mount_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGMount; cdecl; g_volume_monitor_get_mounts: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_monitor_get_type: function:TGType; cdecl; g_volume_monitor_get_volume_for_uuid: function(volume_monitor: PGVolumeMonitor; uuid: Pgchar): PGVolume; cdecl; g_volume_monitor_get_volumes: function(volume_monitor: PGVolumeMonitor): PGList; cdecl; g_volume_mount: procedure(volume: PGVolume; flags: TGMountMountFlags; mount_operation: PGMountOperation; cancellable: PGCancellable; callback: TGAsyncReadyCallback; user_data: gpointer); cdecl; g_volume_mount_finish: function(volume: PGVolume; result_: PGAsyncResult; error: PPGError): gboolean; cdecl; g_volume_should_automount: function(volume: PGVolume): gboolean; cdecl; g_zlib_compressor_get_file_info: function(compressor: PGZlibCompressor): PGFileInfo; cdecl; g_zlib_compressor_get_type: function:TGType; cdecl; g_zlib_compressor_new: function(format: TGZlibCompressorFormat; level: gint): PGZlibCompressor; cdecl; g_zlib_compressor_set_file_info: procedure(compressor: PGZlibCompressor; file_info: PGFileInfo); cdecl; g_zlib_decompressor_get_file_info: function(decompressor: PGZlibDecompressor): PGFileInfo; cdecl; g_zlib_decompressor_get_type: function:TGType; cdecl; g_zlib_decompressor_new: function(format: TGZlibCompressorFormat): PGZlibDecompressor; cdecl; implementation uses DynLibs; var libgio_2_0_so_0: TLibHandle; procedure LoadLibraries; begin libgio_2_0_so_0 := SafeLoadLibrary('libgio-2.0.so.0'); end; procedure LoadProcs; procedure LoadProc(var AProc: Pointer; AName: String); var ProcPtr: Pointer; begin ProcPtr := GetProcedureAddress(libgio_2_0_so_0, AName); AProc := ProcPtr; end; begin LoadProc(Pointer(g_action_activate), 'g_action_activate'); LoadProc(Pointer(g_action_change_state), 'g_action_change_state'); LoadProc(Pointer(g_action_get_enabled), 'g_action_get_enabled'); LoadProc(Pointer(g_action_get_name), 'g_action_get_name'); LoadProc(Pointer(g_action_get_parameter_type), 'g_action_get_parameter_type'); LoadProc(Pointer(g_action_get_state), 'g_action_get_state'); LoadProc(Pointer(g_action_get_state_hint), 'g_action_get_state_hint'); LoadProc(Pointer(g_action_get_state_type), 'g_action_get_state_type'); LoadProc(Pointer(g_action_get_type), 'g_action_get_type'); LoadProc(Pointer(g_action_group_action_added), 'g_action_group_action_added'); LoadProc(Pointer(g_action_group_action_enabled_changed), 'g_action_group_action_enabled_changed'); LoadProc(Pointer(g_action_group_action_removed), 'g_action_group_action_removed'); LoadProc(Pointer(g_action_group_action_state_changed), 'g_action_group_action_state_changed'); LoadProc(Pointer(g_action_group_activate_action), 'g_action_group_activate_action'); LoadProc(Pointer(g_action_group_change_action_state), 'g_action_group_change_action_state'); LoadProc(Pointer(g_action_group_get_action_enabled), 'g_action_group_get_action_enabled'); LoadProc(Pointer(g_action_group_get_action_parameter_type), 'g_action_group_get_action_parameter_type'); LoadProc(Pointer(g_action_group_get_action_state), 'g_action_group_get_action_state'); LoadProc(Pointer(g_action_group_get_action_state_hint), 'g_action_group_get_action_state_hint'); LoadProc(Pointer(g_action_group_get_action_state_type), 'g_action_group_get_action_state_type'); LoadProc(Pointer(g_action_group_get_type), 'g_action_group_get_type'); LoadProc(Pointer(g_action_group_has_action), 'g_action_group_has_action'); LoadProc(Pointer(g_action_group_list_actions), 'g_action_group_list_actions'); LoadProc(Pointer(g_action_group_query_action), 'g_action_group_query_action'); LoadProc(Pointer(g_action_map_add_action), 'g_action_map_add_action'); LoadProc(Pointer(g_action_map_add_action_entries), 'g_action_map_add_action_entries'); LoadProc(Pointer(g_action_map_get_type), 'g_action_map_get_type'); LoadProc(Pointer(g_action_map_lookup_action), 'g_action_map_lookup_action'); LoadProc(Pointer(g_action_map_remove_action), 'g_action_map_remove_action'); LoadProc(Pointer(g_app_info_add_supports_type), 'g_app_info_add_supports_type'); LoadProc(Pointer(g_app_info_can_delete), 'g_app_info_can_delete'); LoadProc(Pointer(g_app_info_can_remove_supports_type), 'g_app_info_can_remove_supports_type'); LoadProc(Pointer(g_app_info_create_from_commandline), 'g_app_info_create_from_commandline'); LoadProc(Pointer(g_app_info_delete), 'g_app_info_delete'); LoadProc(Pointer(g_app_info_dup), 'g_app_info_dup'); LoadProc(Pointer(g_app_info_equal), 'g_app_info_equal'); LoadProc(Pointer(g_app_info_get_all), 'g_app_info_get_all'); LoadProc(Pointer(g_app_info_get_all_for_type), 'g_app_info_get_all_for_type'); LoadProc(Pointer(g_app_info_get_commandline), 'g_app_info_get_commandline'); LoadProc(Pointer(g_app_info_get_default_for_type), 'g_app_info_get_default_for_type'); LoadProc(Pointer(g_app_info_get_default_for_uri_scheme), 'g_app_info_get_default_for_uri_scheme'); LoadProc(Pointer(g_app_info_get_description), 'g_app_info_get_description'); LoadProc(Pointer(g_app_info_get_display_name), 'g_app_info_get_display_name'); LoadProc(Pointer(g_app_info_get_executable), 'g_app_info_get_executable'); LoadProc(Pointer(g_app_info_get_fallback_for_type), 'g_app_info_get_fallback_for_type'); LoadProc(Pointer(g_app_info_get_icon), 'g_app_info_get_icon'); LoadProc(Pointer(g_app_info_get_id), 'g_app_info_get_id'); LoadProc(Pointer(g_app_info_get_name), 'g_app_info_get_name'); LoadProc(Pointer(g_app_info_get_recommended_for_type), 'g_app_info_get_recommended_for_type'); LoadProc(Pointer(g_app_info_get_supported_types), 'g_app_info_get_supported_types'); LoadProc(Pointer(g_app_info_get_type), 'g_app_info_get_type'); LoadProc(Pointer(g_app_info_launch), 'g_app_info_launch'); LoadProc(Pointer(g_app_info_launch_default_for_uri), 'g_app_info_launch_default_for_uri'); LoadProc(Pointer(g_app_info_launch_uris), 'g_app_info_launch_uris'); LoadProc(Pointer(g_app_info_remove_supports_type), 'g_app_info_remove_supports_type'); LoadProc(Pointer(g_app_info_reset_type_associations), 'g_app_info_reset_type_associations'); LoadProc(Pointer(g_app_info_set_as_default_for_extension), 'g_app_info_set_as_default_for_extension'); LoadProc(Pointer(g_app_info_set_as_default_for_type), 'g_app_info_set_as_default_for_type'); LoadProc(Pointer(g_app_info_set_as_last_used_for_type), 'g_app_info_set_as_last_used_for_type'); LoadProc(Pointer(g_app_info_should_show), 'g_app_info_should_show'); LoadProc(Pointer(g_app_info_supports_files), 'g_app_info_supports_files'); LoadProc(Pointer(g_app_info_supports_uris), 'g_app_info_supports_uris'); LoadProc(Pointer(g_app_launch_context_get_display), 'g_app_launch_context_get_display'); LoadProc(Pointer(g_app_launch_context_get_environment), 'g_app_launch_context_get_environment'); LoadProc(Pointer(g_app_launch_context_get_startup_notify_id), 'g_app_launch_context_get_startup_notify_id'); LoadProc(Pointer(g_app_launch_context_get_type), 'g_app_launch_context_get_type'); LoadProc(Pointer(g_app_launch_context_launch_failed), 'g_app_launch_context_launch_failed'); LoadProc(Pointer(g_app_launch_context_new), 'g_app_launch_context_new'); LoadProc(Pointer(g_app_launch_context_setenv), 'g_app_launch_context_setenv'); LoadProc(Pointer(g_app_launch_context_unsetenv), 'g_app_launch_context_unsetenv'); LoadProc(Pointer(g_application_activate), 'g_application_activate'); LoadProc(Pointer(g_application_command_line_create_file_for_arg), 'g_application_command_line_create_file_for_arg'); LoadProc(Pointer(g_application_command_line_get_arguments), 'g_application_command_line_get_arguments'); LoadProc(Pointer(g_application_command_line_get_cwd), 'g_application_command_line_get_cwd'); LoadProc(Pointer(g_application_command_line_get_environ), 'g_application_command_line_get_environ'); LoadProc(Pointer(g_application_command_line_get_exit_status), 'g_application_command_line_get_exit_status'); LoadProc(Pointer(g_application_command_line_get_is_remote), 'g_application_command_line_get_is_remote'); LoadProc(Pointer(g_application_command_line_get_platform_data), 'g_application_command_line_get_platform_data'); LoadProc(Pointer(g_application_command_line_get_stdin), 'g_application_command_line_get_stdin'); LoadProc(Pointer(g_application_command_line_get_type), 'g_application_command_line_get_type'); LoadProc(Pointer(g_application_command_line_getenv), 'g_application_command_line_getenv'); LoadProc(Pointer(g_application_command_line_print), 'g_application_command_line_print'); LoadProc(Pointer(g_application_command_line_printerr), 'g_application_command_line_printerr'); LoadProc(Pointer(g_application_command_line_set_exit_status), 'g_application_command_line_set_exit_status'); LoadProc(Pointer(g_application_get_application_id), 'g_application_get_application_id'); LoadProc(Pointer(g_application_get_dbus_connection), 'g_application_get_dbus_connection'); LoadProc(Pointer(g_application_get_dbus_object_path), 'g_application_get_dbus_object_path'); LoadProc(Pointer(g_application_get_default), 'g_application_get_default'); LoadProc(Pointer(g_application_get_flags), 'g_application_get_flags'); LoadProc(Pointer(g_application_get_inactivity_timeout), 'g_application_get_inactivity_timeout'); LoadProc(Pointer(g_application_get_is_registered), 'g_application_get_is_registered'); LoadProc(Pointer(g_application_get_is_remote), 'g_application_get_is_remote'); LoadProc(Pointer(g_application_get_type), 'g_application_get_type'); LoadProc(Pointer(g_application_hold), 'g_application_hold'); LoadProc(Pointer(g_application_id_is_valid), 'g_application_id_is_valid'); LoadProc(Pointer(g_application_new), 'g_application_new'); LoadProc(Pointer(g_application_open), 'g_application_open'); LoadProc(Pointer(g_application_quit), 'g_application_quit'); LoadProc(Pointer(g_application_register), 'g_application_register'); LoadProc(Pointer(g_application_release), 'g_application_release'); LoadProc(Pointer(g_application_run), 'g_application_run'); LoadProc(Pointer(g_application_set_application_id), 'g_application_set_application_id'); LoadProc(Pointer(g_application_set_default), 'g_application_set_default'); LoadProc(Pointer(g_application_set_flags), 'g_application_set_flags'); LoadProc(Pointer(g_application_set_inactivity_timeout), 'g_application_set_inactivity_timeout'); LoadProc(Pointer(g_async_initable_get_type), 'g_async_initable_get_type'); LoadProc(Pointer(g_async_initable_init_async), 'g_async_initable_init_async'); LoadProc(Pointer(g_async_initable_init_finish), 'g_async_initable_init_finish'); LoadProc(Pointer(g_async_initable_new_async), 'g_async_initable_new_async'); LoadProc(Pointer(g_async_initable_new_finish), 'g_async_initable_new_finish'); LoadProc(Pointer(g_async_initable_new_valist_async), 'g_async_initable_new_valist_async'); LoadProc(Pointer(g_async_initable_newv_async), 'g_async_initable_newv_async'); LoadProc(Pointer(g_async_result_get_source_object), 'g_async_result_get_source_object'); LoadProc(Pointer(g_async_result_get_type), 'g_async_result_get_type'); LoadProc(Pointer(g_async_result_get_user_data), 'g_async_result_get_user_data'); LoadProc(Pointer(g_async_result_is_tagged), 'g_async_result_is_tagged'); LoadProc(Pointer(g_async_result_legacy_propagate_error), 'g_async_result_legacy_propagate_error'); LoadProc(Pointer(g_buffered_input_stream_fill), 'g_buffered_input_stream_fill'); LoadProc(Pointer(g_buffered_input_stream_fill_async), 'g_buffered_input_stream_fill_async'); LoadProc(Pointer(g_buffered_input_stream_fill_finish), 'g_buffered_input_stream_fill_finish'); LoadProc(Pointer(g_buffered_input_stream_get_available), 'g_buffered_input_stream_get_available'); LoadProc(Pointer(g_buffered_input_stream_get_buffer_size), 'g_buffered_input_stream_get_buffer_size'); LoadProc(Pointer(g_buffered_input_stream_get_type), 'g_buffered_input_stream_get_type'); LoadProc(Pointer(g_buffered_input_stream_new), 'g_buffered_input_stream_new'); LoadProc(Pointer(g_buffered_input_stream_new_sized), 'g_buffered_input_stream_new_sized'); LoadProc(Pointer(g_buffered_input_stream_peek), 'g_buffered_input_stream_peek'); LoadProc(Pointer(g_buffered_input_stream_peek_buffer), 'g_buffered_input_stream_peek_buffer'); LoadProc(Pointer(g_buffered_input_stream_read_byte), 'g_buffered_input_stream_read_byte'); LoadProc(Pointer(g_buffered_input_stream_set_buffer_size), 'g_buffered_input_stream_set_buffer_size'); LoadProc(Pointer(g_buffered_output_stream_get_auto_grow), 'g_buffered_output_stream_get_auto_grow'); LoadProc(Pointer(g_buffered_output_stream_get_buffer_size), 'g_buffered_output_stream_get_buffer_size'); LoadProc(Pointer(g_buffered_output_stream_get_type), 'g_buffered_output_stream_get_type'); LoadProc(Pointer(g_buffered_output_stream_new), 'g_buffered_output_stream_new'); LoadProc(Pointer(g_buffered_output_stream_new_sized), 'g_buffered_output_stream_new_sized'); LoadProc(Pointer(g_buffered_output_stream_set_auto_grow), 'g_buffered_output_stream_set_auto_grow'); LoadProc(Pointer(g_buffered_output_stream_set_buffer_size), 'g_buffered_output_stream_set_buffer_size'); LoadProc(Pointer(g_bus_get), 'g_bus_get'); LoadProc(Pointer(g_bus_get_finish), 'g_bus_get_finish'); LoadProc(Pointer(g_bus_get_sync), 'g_bus_get_sync'); LoadProc(Pointer(g_bus_own_name), 'g_bus_own_name'); LoadProc(Pointer(g_bus_own_name_on_connection), 'g_bus_own_name_on_connection'); LoadProc(Pointer(g_bus_own_name_on_connection_with_closures), 'g_bus_own_name_on_connection_with_closures'); LoadProc(Pointer(g_bus_own_name_with_closures), 'g_bus_own_name_with_closures'); LoadProc(Pointer(g_bus_unown_name), 'g_bus_unown_name'); LoadProc(Pointer(g_bus_unwatch_name), 'g_bus_unwatch_name'); LoadProc(Pointer(g_bus_watch_name), 'g_bus_watch_name'); LoadProc(Pointer(g_bus_watch_name_on_connection), 'g_bus_watch_name_on_connection'); LoadProc(Pointer(g_bus_watch_name_on_connection_with_closures), 'g_bus_watch_name_on_connection_with_closures'); LoadProc(Pointer(g_bus_watch_name_with_closures), 'g_bus_watch_name_with_closures'); LoadProc(Pointer(g_cancellable_cancel), 'g_cancellable_cancel'); LoadProc(Pointer(g_cancellable_connect), 'g_cancellable_connect'); LoadProc(Pointer(g_cancellable_disconnect), 'g_cancellable_disconnect'); LoadProc(Pointer(g_cancellable_get_current), 'g_cancellable_get_current'); LoadProc(Pointer(g_cancellable_get_fd), 'g_cancellable_get_fd'); LoadProc(Pointer(g_cancellable_get_type), 'g_cancellable_get_type'); LoadProc(Pointer(g_cancellable_is_cancelled), 'g_cancellable_is_cancelled'); LoadProc(Pointer(g_cancellable_make_pollfd), 'g_cancellable_make_pollfd'); LoadProc(Pointer(g_cancellable_new), 'g_cancellable_new'); LoadProc(Pointer(g_cancellable_pop_current), 'g_cancellable_pop_current'); LoadProc(Pointer(g_cancellable_push_current), 'g_cancellable_push_current'); LoadProc(Pointer(g_cancellable_release_fd), 'g_cancellable_release_fd'); LoadProc(Pointer(g_cancellable_reset), 'g_cancellable_reset'); LoadProc(Pointer(g_cancellable_set_error_if_cancelled), 'g_cancellable_set_error_if_cancelled'); LoadProc(Pointer(g_cancellable_source_new), 'g_cancellable_source_new'); LoadProc(Pointer(g_charset_converter_get_num_fallbacks), 'g_charset_converter_get_num_fallbacks'); LoadProc(Pointer(g_charset_converter_get_type), 'g_charset_converter_get_type'); LoadProc(Pointer(g_charset_converter_get_use_fallback), 'g_charset_converter_get_use_fallback'); LoadProc(Pointer(g_charset_converter_new), 'g_charset_converter_new'); LoadProc(Pointer(g_charset_converter_set_use_fallback), 'g_charset_converter_set_use_fallback'); LoadProc(Pointer(g_content_type_can_be_executable), 'g_content_type_can_be_executable'); LoadProc(Pointer(g_content_type_equals), 'g_content_type_equals'); LoadProc(Pointer(g_content_type_from_mime_type), 'g_content_type_from_mime_type'); LoadProc(Pointer(g_content_type_get_description), 'g_content_type_get_description'); LoadProc(Pointer(g_content_type_get_generic_icon_name), 'g_content_type_get_generic_icon_name'); LoadProc(Pointer(g_content_type_get_icon), 'g_content_type_get_icon'); LoadProc(Pointer(g_content_type_get_mime_type), 'g_content_type_get_mime_type'); LoadProc(Pointer(g_content_type_get_symbolic_icon), 'g_content_type_get_symbolic_icon'); LoadProc(Pointer(g_content_type_guess), 'g_content_type_guess'); LoadProc(Pointer(g_content_type_guess_for_tree), 'g_content_type_guess_for_tree'); LoadProc(Pointer(g_content_type_is_a), 'g_content_type_is_a'); LoadProc(Pointer(g_content_type_is_unknown), 'g_content_type_is_unknown'); LoadProc(Pointer(g_content_types_get_registered), 'g_content_types_get_registered'); LoadProc(Pointer(g_converter_convert), 'g_converter_convert'); LoadProc(Pointer(g_converter_get_type), 'g_converter_get_type'); LoadProc(Pointer(g_converter_input_stream_get_converter), 'g_converter_input_stream_get_converter'); LoadProc(Pointer(g_converter_input_stream_get_type), 'g_converter_input_stream_get_type'); LoadProc(Pointer(g_converter_input_stream_new), 'g_converter_input_stream_new'); LoadProc(Pointer(g_converter_output_stream_get_converter), 'g_converter_output_stream_get_converter'); LoadProc(Pointer(g_converter_output_stream_get_type), 'g_converter_output_stream_get_type'); LoadProc(Pointer(g_converter_output_stream_new), 'g_converter_output_stream_new'); LoadProc(Pointer(g_converter_reset), 'g_converter_reset'); LoadProc(Pointer(g_credentials_get_native), 'g_credentials_get_native'); LoadProc(Pointer(g_credentials_get_type), 'g_credentials_get_type'); LoadProc(Pointer(g_credentials_get_unix_pid), 'g_credentials_get_unix_pid'); LoadProc(Pointer(g_credentials_get_unix_user), 'g_credentials_get_unix_user'); LoadProc(Pointer(g_credentials_is_same_user), 'g_credentials_is_same_user'); LoadProc(Pointer(g_credentials_new), 'g_credentials_new'); LoadProc(Pointer(g_credentials_set_native), 'g_credentials_set_native'); LoadProc(Pointer(g_credentials_set_unix_user), 'g_credentials_set_unix_user'); LoadProc(Pointer(g_credentials_to_string), 'g_credentials_to_string'); LoadProc(Pointer(g_data_input_stream_get_byte_order), 'g_data_input_stream_get_byte_order'); LoadProc(Pointer(g_data_input_stream_get_newline_type), 'g_data_input_stream_get_newline_type'); LoadProc(Pointer(g_data_input_stream_get_type), 'g_data_input_stream_get_type'); LoadProc(Pointer(g_data_input_stream_new), 'g_data_input_stream_new'); LoadProc(Pointer(g_data_input_stream_read_byte), 'g_data_input_stream_read_byte'); LoadProc(Pointer(g_data_input_stream_read_int16), 'g_data_input_stream_read_int16'); LoadProc(Pointer(g_data_input_stream_read_int32), 'g_data_input_stream_read_int32'); LoadProc(Pointer(g_data_input_stream_read_int64), 'g_data_input_stream_read_int64'); LoadProc(Pointer(g_data_input_stream_read_line), 'g_data_input_stream_read_line'); LoadProc(Pointer(g_data_input_stream_read_line_async), 'g_data_input_stream_read_line_async'); LoadProc(Pointer(g_data_input_stream_read_line_finish), 'g_data_input_stream_read_line_finish'); LoadProc(Pointer(g_data_input_stream_read_line_finish_utf8), 'g_data_input_stream_read_line_finish_utf8'); LoadProc(Pointer(g_data_input_stream_read_line_utf8), 'g_data_input_stream_read_line_utf8'); LoadProc(Pointer(g_data_input_stream_read_uint16), 'g_data_input_stream_read_uint16'); LoadProc(Pointer(g_data_input_stream_read_uint32), 'g_data_input_stream_read_uint32'); LoadProc(Pointer(g_data_input_stream_read_uint64), 'g_data_input_stream_read_uint64'); LoadProc(Pointer(g_data_input_stream_read_until), 'g_data_input_stream_read_until'); LoadProc(Pointer(g_data_input_stream_read_until_async), 'g_data_input_stream_read_until_async'); LoadProc(Pointer(g_data_input_stream_read_until_finish), 'g_data_input_stream_read_until_finish'); LoadProc(Pointer(g_data_input_stream_read_upto), 'g_data_input_stream_read_upto'); LoadProc(Pointer(g_data_input_stream_read_upto_async), 'g_data_input_stream_read_upto_async'); LoadProc(Pointer(g_data_input_stream_read_upto_finish), 'g_data_input_stream_read_upto_finish'); LoadProc(Pointer(g_data_input_stream_set_byte_order), 'g_data_input_stream_set_byte_order'); LoadProc(Pointer(g_data_input_stream_set_newline_type), 'g_data_input_stream_set_newline_type'); LoadProc(Pointer(g_data_output_stream_get_byte_order), 'g_data_output_stream_get_byte_order'); LoadProc(Pointer(g_data_output_stream_get_type), 'g_data_output_stream_get_type'); LoadProc(Pointer(g_data_output_stream_new), 'g_data_output_stream_new'); LoadProc(Pointer(g_data_output_stream_put_byte), 'g_data_output_stream_put_byte'); LoadProc(Pointer(g_data_output_stream_put_int16), 'g_data_output_stream_put_int16'); LoadProc(Pointer(g_data_output_stream_put_int32), 'g_data_output_stream_put_int32'); LoadProc(Pointer(g_data_output_stream_put_int64), 'g_data_output_stream_put_int64'); LoadProc(Pointer(g_data_output_stream_put_string), 'g_data_output_stream_put_string'); LoadProc(Pointer(g_data_output_stream_put_uint16), 'g_data_output_stream_put_uint16'); LoadProc(Pointer(g_data_output_stream_put_uint32), 'g_data_output_stream_put_uint32'); LoadProc(Pointer(g_data_output_stream_put_uint64), 'g_data_output_stream_put_uint64'); LoadProc(Pointer(g_data_output_stream_set_byte_order), 'g_data_output_stream_set_byte_order'); LoadProc(Pointer(g_dbus_action_group_get), 'g_dbus_action_group_get'); LoadProc(Pointer(g_dbus_action_group_get_type), 'g_dbus_action_group_get_type'); LoadProc(Pointer(g_dbus_address_escape_value), 'g_dbus_address_escape_value'); LoadProc(Pointer(g_dbus_address_get_for_bus_sync), 'g_dbus_address_get_for_bus_sync'); LoadProc(Pointer(g_dbus_address_get_stream), 'g_dbus_address_get_stream'); LoadProc(Pointer(g_dbus_address_get_stream_finish), 'g_dbus_address_get_stream_finish'); LoadProc(Pointer(g_dbus_address_get_stream_sync), 'g_dbus_address_get_stream_sync'); LoadProc(Pointer(g_dbus_annotation_info_get_type), 'g_dbus_annotation_info_get_type'); LoadProc(Pointer(g_dbus_annotation_info_lookup), 'g_dbus_annotation_info_lookup'); LoadProc(Pointer(g_dbus_annotation_info_ref), 'g_dbus_annotation_info_ref'); LoadProc(Pointer(g_dbus_annotation_info_unref), 'g_dbus_annotation_info_unref'); LoadProc(Pointer(g_dbus_arg_info_get_type), 'g_dbus_arg_info_get_type'); LoadProc(Pointer(g_dbus_arg_info_ref), 'g_dbus_arg_info_ref'); LoadProc(Pointer(g_dbus_arg_info_unref), 'g_dbus_arg_info_unref'); LoadProc(Pointer(g_dbus_auth_observer_allow_mechanism), 'g_dbus_auth_observer_allow_mechanism'); LoadProc(Pointer(g_dbus_auth_observer_authorize_authenticated_peer), 'g_dbus_auth_observer_authorize_authenticated_peer'); LoadProc(Pointer(g_dbus_auth_observer_get_type), 'g_dbus_auth_observer_get_type'); LoadProc(Pointer(g_dbus_auth_observer_new), 'g_dbus_auth_observer_new'); LoadProc(Pointer(g_dbus_connection_add_filter), 'g_dbus_connection_add_filter'); LoadProc(Pointer(g_dbus_connection_call), 'g_dbus_connection_call'); LoadProc(Pointer(g_dbus_connection_call_finish), 'g_dbus_connection_call_finish'); LoadProc(Pointer(g_dbus_connection_call_sync), 'g_dbus_connection_call_sync'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list), 'g_dbus_connection_call_with_unix_fd_list'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list_finish), 'g_dbus_connection_call_with_unix_fd_list_finish'); LoadProc(Pointer(g_dbus_connection_call_with_unix_fd_list_sync), 'g_dbus_connection_call_with_unix_fd_list_sync'); LoadProc(Pointer(g_dbus_connection_close), 'g_dbus_connection_close'); LoadProc(Pointer(g_dbus_connection_close_finish), 'g_dbus_connection_close_finish'); LoadProc(Pointer(g_dbus_connection_close_sync), 'g_dbus_connection_close_sync'); LoadProc(Pointer(g_dbus_connection_emit_signal), 'g_dbus_connection_emit_signal'); LoadProc(Pointer(g_dbus_connection_export_action_group), 'g_dbus_connection_export_action_group'); LoadProc(Pointer(g_dbus_connection_export_menu_model), 'g_dbus_connection_export_menu_model'); LoadProc(Pointer(g_dbus_connection_flush), 'g_dbus_connection_flush'); LoadProc(Pointer(g_dbus_connection_flush_finish), 'g_dbus_connection_flush_finish'); LoadProc(Pointer(g_dbus_connection_flush_sync), 'g_dbus_connection_flush_sync'); LoadProc(Pointer(g_dbus_connection_get_capabilities), 'g_dbus_connection_get_capabilities'); LoadProc(Pointer(g_dbus_connection_get_exit_on_close), 'g_dbus_connection_get_exit_on_close'); LoadProc(Pointer(g_dbus_connection_get_guid), 'g_dbus_connection_get_guid'); LoadProc(Pointer(g_dbus_connection_get_last_serial), 'g_dbus_connection_get_last_serial'); LoadProc(Pointer(g_dbus_connection_get_peer_credentials), 'g_dbus_connection_get_peer_credentials'); LoadProc(Pointer(g_dbus_connection_get_stream), 'g_dbus_connection_get_stream'); LoadProc(Pointer(g_dbus_connection_get_type), 'g_dbus_connection_get_type'); LoadProc(Pointer(g_dbus_connection_get_unique_name), 'g_dbus_connection_get_unique_name'); LoadProc(Pointer(g_dbus_connection_is_closed), 'g_dbus_connection_is_closed'); LoadProc(Pointer(g_dbus_connection_new), 'g_dbus_connection_new'); LoadProc(Pointer(g_dbus_connection_new_finish), 'g_dbus_connection_new_finish'); LoadProc(Pointer(g_dbus_connection_new_for_address), 'g_dbus_connection_new_for_address'); LoadProc(Pointer(g_dbus_connection_new_for_address_finish), 'g_dbus_connection_new_for_address_finish'); LoadProc(Pointer(g_dbus_connection_new_for_address_sync), 'g_dbus_connection_new_for_address_sync'); LoadProc(Pointer(g_dbus_connection_new_sync), 'g_dbus_connection_new_sync'); LoadProc(Pointer(g_dbus_connection_register_object), 'g_dbus_connection_register_object'); LoadProc(Pointer(g_dbus_connection_register_subtree), 'g_dbus_connection_register_subtree'); LoadProc(Pointer(g_dbus_connection_remove_filter), 'g_dbus_connection_remove_filter'); LoadProc(Pointer(g_dbus_connection_send_message), 'g_dbus_connection_send_message'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply), 'g_dbus_connection_send_message_with_reply'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply_finish), 'g_dbus_connection_send_message_with_reply_finish'); LoadProc(Pointer(g_dbus_connection_send_message_with_reply_sync), 'g_dbus_connection_send_message_with_reply_sync'); LoadProc(Pointer(g_dbus_connection_set_exit_on_close), 'g_dbus_connection_set_exit_on_close'); LoadProc(Pointer(g_dbus_connection_signal_subscribe), 'g_dbus_connection_signal_subscribe'); LoadProc(Pointer(g_dbus_connection_signal_unsubscribe), 'g_dbus_connection_signal_unsubscribe'); LoadProc(Pointer(g_dbus_connection_start_message_processing), 'g_dbus_connection_start_message_processing'); LoadProc(Pointer(g_dbus_connection_unexport_action_group), 'g_dbus_connection_unexport_action_group'); LoadProc(Pointer(g_dbus_connection_unexport_menu_model), 'g_dbus_connection_unexport_menu_model'); LoadProc(Pointer(g_dbus_connection_unregister_object), 'g_dbus_connection_unregister_object'); LoadProc(Pointer(g_dbus_connection_unregister_subtree), 'g_dbus_connection_unregister_subtree'); LoadProc(Pointer(g_dbus_error_encode_gerror), 'g_dbus_error_encode_gerror'); LoadProc(Pointer(g_dbus_error_get_remote_error), 'g_dbus_error_get_remote_error'); LoadProc(Pointer(g_dbus_error_is_remote_error), 'g_dbus_error_is_remote_error'); LoadProc(Pointer(g_dbus_error_new_for_dbus_error), 'g_dbus_error_new_for_dbus_error'); LoadProc(Pointer(g_dbus_error_quark), 'g_dbus_error_quark'); LoadProc(Pointer(g_dbus_error_register_error), 'g_dbus_error_register_error'); LoadProc(Pointer(g_dbus_error_register_error_domain), 'g_dbus_error_register_error_domain'); LoadProc(Pointer(g_dbus_error_set_dbus_error), 'g_dbus_error_set_dbus_error'); LoadProc(Pointer(g_dbus_error_set_dbus_error_valist), 'g_dbus_error_set_dbus_error_valist'); LoadProc(Pointer(g_dbus_error_strip_remote_error), 'g_dbus_error_strip_remote_error'); LoadProc(Pointer(g_dbus_error_unregister_error), 'g_dbus_error_unregister_error'); LoadProc(Pointer(g_dbus_generate_guid), 'g_dbus_generate_guid'); LoadProc(Pointer(g_dbus_gvalue_to_gvariant), 'g_dbus_gvalue_to_gvariant'); LoadProc(Pointer(g_dbus_gvariant_to_gvalue), 'g_dbus_gvariant_to_gvalue'); LoadProc(Pointer(g_dbus_interface_dup_object), 'g_dbus_interface_dup_object'); LoadProc(Pointer(g_dbus_interface_get_info), 'g_dbus_interface_get_info'); LoadProc(Pointer(g_dbus_interface_get_object), 'g_dbus_interface_get_object'); LoadProc(Pointer(g_dbus_interface_get_type), 'g_dbus_interface_get_type'); LoadProc(Pointer(g_dbus_interface_info_cache_build), 'g_dbus_interface_info_cache_build'); LoadProc(Pointer(g_dbus_interface_info_cache_release), 'g_dbus_interface_info_cache_release'); LoadProc(Pointer(g_dbus_interface_info_generate_xml), 'g_dbus_interface_info_generate_xml'); LoadProc(Pointer(g_dbus_interface_info_get_type), 'g_dbus_interface_info_get_type'); LoadProc(Pointer(g_dbus_interface_info_lookup_method), 'g_dbus_interface_info_lookup_method'); LoadProc(Pointer(g_dbus_interface_info_lookup_property), 'g_dbus_interface_info_lookup_property'); LoadProc(Pointer(g_dbus_interface_info_lookup_signal), 'g_dbus_interface_info_lookup_signal'); LoadProc(Pointer(g_dbus_interface_info_ref), 'g_dbus_interface_info_ref'); LoadProc(Pointer(g_dbus_interface_info_unref), 'g_dbus_interface_info_unref'); LoadProc(Pointer(g_dbus_interface_set_object), 'g_dbus_interface_set_object'); LoadProc(Pointer(g_dbus_interface_skeleton_export), 'g_dbus_interface_skeleton_export'); LoadProc(Pointer(g_dbus_interface_skeleton_flush), 'g_dbus_interface_skeleton_flush'); LoadProc(Pointer(g_dbus_interface_skeleton_get_connection), 'g_dbus_interface_skeleton_get_connection'); LoadProc(Pointer(g_dbus_interface_skeleton_get_connections), 'g_dbus_interface_skeleton_get_connections'); LoadProc(Pointer(g_dbus_interface_skeleton_get_flags), 'g_dbus_interface_skeleton_get_flags'); LoadProc(Pointer(g_dbus_interface_skeleton_get_info), 'g_dbus_interface_skeleton_get_info'); LoadProc(Pointer(g_dbus_interface_skeleton_get_object_path), 'g_dbus_interface_skeleton_get_object_path'); LoadProc(Pointer(g_dbus_interface_skeleton_get_properties), 'g_dbus_interface_skeleton_get_properties'); LoadProc(Pointer(g_dbus_interface_skeleton_get_type), 'g_dbus_interface_skeleton_get_type'); LoadProc(Pointer(g_dbus_interface_skeleton_get_vtable), 'g_dbus_interface_skeleton_get_vtable'); LoadProc(Pointer(g_dbus_interface_skeleton_has_connection), 'g_dbus_interface_skeleton_has_connection'); LoadProc(Pointer(g_dbus_interface_skeleton_set_flags), 'g_dbus_interface_skeleton_set_flags'); LoadProc(Pointer(g_dbus_interface_skeleton_unexport), 'g_dbus_interface_skeleton_unexport'); LoadProc(Pointer(g_dbus_interface_skeleton_unexport_from_connection), 'g_dbus_interface_skeleton_unexport_from_connection'); LoadProc(Pointer(g_dbus_is_address), 'g_dbus_is_address'); LoadProc(Pointer(g_dbus_is_guid), 'g_dbus_is_guid'); LoadProc(Pointer(g_dbus_is_interface_name), 'g_dbus_is_interface_name'); LoadProc(Pointer(g_dbus_is_member_name), 'g_dbus_is_member_name'); LoadProc(Pointer(g_dbus_is_name), 'g_dbus_is_name'); LoadProc(Pointer(g_dbus_is_supported_address), 'g_dbus_is_supported_address'); LoadProc(Pointer(g_dbus_is_unique_name), 'g_dbus_is_unique_name'); LoadProc(Pointer(g_dbus_menu_model_get), 'g_dbus_menu_model_get'); LoadProc(Pointer(g_dbus_menu_model_get_type), 'g_dbus_menu_model_get_type'); LoadProc(Pointer(g_dbus_message_bytes_needed), 'g_dbus_message_bytes_needed'); LoadProc(Pointer(g_dbus_message_copy), 'g_dbus_message_copy'); LoadProc(Pointer(g_dbus_message_get_arg0), 'g_dbus_message_get_arg0'); LoadProc(Pointer(g_dbus_message_get_body), 'g_dbus_message_get_body'); LoadProc(Pointer(g_dbus_message_get_byte_order), 'g_dbus_message_get_byte_order'); LoadProc(Pointer(g_dbus_message_get_destination), 'g_dbus_message_get_destination'); LoadProc(Pointer(g_dbus_message_get_error_name), 'g_dbus_message_get_error_name'); LoadProc(Pointer(g_dbus_message_get_flags), 'g_dbus_message_get_flags'); LoadProc(Pointer(g_dbus_message_get_header), 'g_dbus_message_get_header'); LoadProc(Pointer(g_dbus_message_get_header_fields), 'g_dbus_message_get_header_fields'); LoadProc(Pointer(g_dbus_message_get_interface), 'g_dbus_message_get_interface'); LoadProc(Pointer(g_dbus_message_get_locked), 'g_dbus_message_get_locked'); LoadProc(Pointer(g_dbus_message_get_member), 'g_dbus_message_get_member'); LoadProc(Pointer(g_dbus_message_get_message_type), 'g_dbus_message_get_message_type'); LoadProc(Pointer(g_dbus_message_get_num_unix_fds), 'g_dbus_message_get_num_unix_fds'); LoadProc(Pointer(g_dbus_message_get_path), 'g_dbus_message_get_path'); LoadProc(Pointer(g_dbus_message_get_reply_serial), 'g_dbus_message_get_reply_serial'); LoadProc(Pointer(g_dbus_message_get_sender), 'g_dbus_message_get_sender'); LoadProc(Pointer(g_dbus_message_get_serial), 'g_dbus_message_get_serial'); LoadProc(Pointer(g_dbus_message_get_signature), 'g_dbus_message_get_signature'); LoadProc(Pointer(g_dbus_message_get_type), 'g_dbus_message_get_type'); LoadProc(Pointer(g_dbus_message_get_unix_fd_list), 'g_dbus_message_get_unix_fd_list'); LoadProc(Pointer(g_dbus_message_lock), 'g_dbus_message_lock'); LoadProc(Pointer(g_dbus_message_new), 'g_dbus_message_new'); LoadProc(Pointer(g_dbus_message_new_from_blob), 'g_dbus_message_new_from_blob'); LoadProc(Pointer(g_dbus_message_new_method_call), 'g_dbus_message_new_method_call'); LoadProc(Pointer(g_dbus_message_new_method_error), 'g_dbus_message_new_method_error'); LoadProc(Pointer(g_dbus_message_new_method_error_literal), 'g_dbus_message_new_method_error_literal'); LoadProc(Pointer(g_dbus_message_new_method_error_valist), 'g_dbus_message_new_method_error_valist'); LoadProc(Pointer(g_dbus_message_new_method_reply), 'g_dbus_message_new_method_reply'); LoadProc(Pointer(g_dbus_message_new_signal), 'g_dbus_message_new_signal'); LoadProc(Pointer(g_dbus_message_print), 'g_dbus_message_print'); LoadProc(Pointer(g_dbus_message_set_body), 'g_dbus_message_set_body'); LoadProc(Pointer(g_dbus_message_set_byte_order), 'g_dbus_message_set_byte_order'); LoadProc(Pointer(g_dbus_message_set_destination), 'g_dbus_message_set_destination'); LoadProc(Pointer(g_dbus_message_set_error_name), 'g_dbus_message_set_error_name'); LoadProc(Pointer(g_dbus_message_set_flags), 'g_dbus_message_set_flags'); LoadProc(Pointer(g_dbus_message_set_header), 'g_dbus_message_set_header'); LoadProc(Pointer(g_dbus_message_set_interface), 'g_dbus_message_set_interface'); LoadProc(Pointer(g_dbus_message_set_member), 'g_dbus_message_set_member'); LoadProc(Pointer(g_dbus_message_set_message_type), 'g_dbus_message_set_message_type'); LoadProc(Pointer(g_dbus_message_set_num_unix_fds), 'g_dbus_message_set_num_unix_fds'); LoadProc(Pointer(g_dbus_message_set_path), 'g_dbus_message_set_path'); LoadProc(Pointer(g_dbus_message_set_reply_serial), 'g_dbus_message_set_reply_serial'); LoadProc(Pointer(g_dbus_message_set_sender), 'g_dbus_message_set_sender'); LoadProc(Pointer(g_dbus_message_set_serial), 'g_dbus_message_set_serial'); LoadProc(Pointer(g_dbus_message_set_signature), 'g_dbus_message_set_signature'); LoadProc(Pointer(g_dbus_message_set_unix_fd_list), 'g_dbus_message_set_unix_fd_list'); LoadProc(Pointer(g_dbus_message_to_blob), 'g_dbus_message_to_blob'); LoadProc(Pointer(g_dbus_message_to_gerror), 'g_dbus_message_to_gerror'); LoadProc(Pointer(g_dbus_method_info_get_type), 'g_dbus_method_info_get_type'); LoadProc(Pointer(g_dbus_method_info_ref), 'g_dbus_method_info_ref'); LoadProc(Pointer(g_dbus_method_info_unref), 'g_dbus_method_info_unref'); LoadProc(Pointer(g_dbus_method_invocation_get_connection), 'g_dbus_method_invocation_get_connection'); LoadProc(Pointer(g_dbus_method_invocation_get_interface_name), 'g_dbus_method_invocation_get_interface_name'); LoadProc(Pointer(g_dbus_method_invocation_get_message), 'g_dbus_method_invocation_get_message'); LoadProc(Pointer(g_dbus_method_invocation_get_method_info), 'g_dbus_method_invocation_get_method_info'); LoadProc(Pointer(g_dbus_method_invocation_get_method_name), 'g_dbus_method_invocation_get_method_name'); LoadProc(Pointer(g_dbus_method_invocation_get_object_path), 'g_dbus_method_invocation_get_object_path'); LoadProc(Pointer(g_dbus_method_invocation_get_parameters), 'g_dbus_method_invocation_get_parameters'); LoadProc(Pointer(g_dbus_method_invocation_get_sender), 'g_dbus_method_invocation_get_sender'); LoadProc(Pointer(g_dbus_method_invocation_get_type), 'g_dbus_method_invocation_get_type'); LoadProc(Pointer(g_dbus_method_invocation_get_user_data), 'g_dbus_method_invocation_get_user_data'); LoadProc(Pointer(g_dbus_method_invocation_return_dbus_error), 'g_dbus_method_invocation_return_dbus_error'); LoadProc(Pointer(g_dbus_method_invocation_return_error), 'g_dbus_method_invocation_return_error'); LoadProc(Pointer(g_dbus_method_invocation_return_error_literal), 'g_dbus_method_invocation_return_error_literal'); LoadProc(Pointer(g_dbus_method_invocation_return_error_valist), 'g_dbus_method_invocation_return_error_valist'); LoadProc(Pointer(g_dbus_method_invocation_return_gerror), 'g_dbus_method_invocation_return_gerror'); LoadProc(Pointer(g_dbus_method_invocation_return_value), 'g_dbus_method_invocation_return_value'); LoadProc(Pointer(g_dbus_method_invocation_return_value_with_unix_fd_list), 'g_dbus_method_invocation_return_value_with_unix_fd_list'); LoadProc(Pointer(g_dbus_method_invocation_take_error), 'g_dbus_method_invocation_take_error'); LoadProc(Pointer(g_dbus_node_info_generate_xml), 'g_dbus_node_info_generate_xml'); LoadProc(Pointer(g_dbus_node_info_get_type), 'g_dbus_node_info_get_type'); LoadProc(Pointer(g_dbus_node_info_lookup_interface), 'g_dbus_node_info_lookup_interface'); LoadProc(Pointer(g_dbus_node_info_new_for_xml), 'g_dbus_node_info_new_for_xml'); LoadProc(Pointer(g_dbus_node_info_ref), 'g_dbus_node_info_ref'); LoadProc(Pointer(g_dbus_node_info_unref), 'g_dbus_node_info_unref'); LoadProc(Pointer(g_dbus_object_get_interface), 'g_dbus_object_get_interface'); LoadProc(Pointer(g_dbus_object_get_interfaces), 'g_dbus_object_get_interfaces'); LoadProc(Pointer(g_dbus_object_get_object_path), 'g_dbus_object_get_object_path'); LoadProc(Pointer(g_dbus_object_get_type), 'g_dbus_object_get_type'); LoadProc(Pointer(g_dbus_object_manager_client_get_connection), 'g_dbus_object_manager_client_get_connection'); LoadProc(Pointer(g_dbus_object_manager_client_get_flags), 'g_dbus_object_manager_client_get_flags'); LoadProc(Pointer(g_dbus_object_manager_client_get_name), 'g_dbus_object_manager_client_get_name'); LoadProc(Pointer(g_dbus_object_manager_client_get_name_owner), 'g_dbus_object_manager_client_get_name_owner'); LoadProc(Pointer(g_dbus_object_manager_client_get_type), 'g_dbus_object_manager_client_get_type'); LoadProc(Pointer(g_dbus_object_manager_client_new), 'g_dbus_object_manager_client_new'); LoadProc(Pointer(g_dbus_object_manager_client_new_finish), 'g_dbus_object_manager_client_new_finish'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus), 'g_dbus_object_manager_client_new_for_bus'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus_finish), 'g_dbus_object_manager_client_new_for_bus_finish'); LoadProc(Pointer(g_dbus_object_manager_client_new_for_bus_sync), 'g_dbus_object_manager_client_new_for_bus_sync'); LoadProc(Pointer(g_dbus_object_manager_client_new_sync), 'g_dbus_object_manager_client_new_sync'); LoadProc(Pointer(g_dbus_object_manager_get_interface), 'g_dbus_object_manager_get_interface'); LoadProc(Pointer(g_dbus_object_manager_get_object), 'g_dbus_object_manager_get_object'); LoadProc(Pointer(g_dbus_object_manager_get_object_path), 'g_dbus_object_manager_get_object_path'); LoadProc(Pointer(g_dbus_object_manager_get_objects), 'g_dbus_object_manager_get_objects'); LoadProc(Pointer(g_dbus_object_manager_get_type), 'g_dbus_object_manager_get_type'); LoadProc(Pointer(g_dbus_object_manager_server_export), 'g_dbus_object_manager_server_export'); LoadProc(Pointer(g_dbus_object_manager_server_export_uniquely), 'g_dbus_object_manager_server_export_uniquely'); LoadProc(Pointer(g_dbus_object_manager_server_get_connection), 'g_dbus_object_manager_server_get_connection'); LoadProc(Pointer(g_dbus_object_manager_server_get_type), 'g_dbus_object_manager_server_get_type'); LoadProc(Pointer(g_dbus_object_manager_server_is_exported), 'g_dbus_object_manager_server_is_exported'); LoadProc(Pointer(g_dbus_object_manager_server_new), 'g_dbus_object_manager_server_new'); LoadProc(Pointer(g_dbus_object_manager_server_set_connection), 'g_dbus_object_manager_server_set_connection'); LoadProc(Pointer(g_dbus_object_manager_server_unexport), 'g_dbus_object_manager_server_unexport'); LoadProc(Pointer(g_dbus_object_proxy_get_connection), 'g_dbus_object_proxy_get_connection'); LoadProc(Pointer(g_dbus_object_proxy_get_type), 'g_dbus_object_proxy_get_type'); LoadProc(Pointer(g_dbus_object_proxy_new), 'g_dbus_object_proxy_new'); LoadProc(Pointer(g_dbus_object_skeleton_add_interface), 'g_dbus_object_skeleton_add_interface'); LoadProc(Pointer(g_dbus_object_skeleton_flush), 'g_dbus_object_skeleton_flush'); LoadProc(Pointer(g_dbus_object_skeleton_get_type), 'g_dbus_object_skeleton_get_type'); LoadProc(Pointer(g_dbus_object_skeleton_new), 'g_dbus_object_skeleton_new'); LoadProc(Pointer(g_dbus_object_skeleton_remove_interface), 'g_dbus_object_skeleton_remove_interface'); LoadProc(Pointer(g_dbus_object_skeleton_remove_interface_by_name), 'g_dbus_object_skeleton_remove_interface_by_name'); LoadProc(Pointer(g_dbus_object_skeleton_set_object_path), 'g_dbus_object_skeleton_set_object_path'); LoadProc(Pointer(g_dbus_property_info_get_type), 'g_dbus_property_info_get_type'); LoadProc(Pointer(g_dbus_property_info_ref), 'g_dbus_property_info_ref'); LoadProc(Pointer(g_dbus_property_info_unref), 'g_dbus_property_info_unref'); LoadProc(Pointer(g_dbus_proxy_call), 'g_dbus_proxy_call'); LoadProc(Pointer(g_dbus_proxy_call_finish), 'g_dbus_proxy_call_finish'); LoadProc(Pointer(g_dbus_proxy_call_sync), 'g_dbus_proxy_call_sync'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list), 'g_dbus_proxy_call_with_unix_fd_list'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list_finish), 'g_dbus_proxy_call_with_unix_fd_list_finish'); LoadProc(Pointer(g_dbus_proxy_call_with_unix_fd_list_sync), 'g_dbus_proxy_call_with_unix_fd_list_sync'); LoadProc(Pointer(g_dbus_proxy_get_cached_property), 'g_dbus_proxy_get_cached_property'); LoadProc(Pointer(g_dbus_proxy_get_cached_property_names), 'g_dbus_proxy_get_cached_property_names'); LoadProc(Pointer(g_dbus_proxy_get_connection), 'g_dbus_proxy_get_connection'); LoadProc(Pointer(g_dbus_proxy_get_default_timeout), 'g_dbus_proxy_get_default_timeout'); LoadProc(Pointer(g_dbus_proxy_get_flags), 'g_dbus_proxy_get_flags'); LoadProc(Pointer(g_dbus_proxy_get_interface_info), 'g_dbus_proxy_get_interface_info'); LoadProc(Pointer(g_dbus_proxy_get_interface_name), 'g_dbus_proxy_get_interface_name'); LoadProc(Pointer(g_dbus_proxy_get_name), 'g_dbus_proxy_get_name'); LoadProc(Pointer(g_dbus_proxy_get_name_owner), 'g_dbus_proxy_get_name_owner'); LoadProc(Pointer(g_dbus_proxy_get_object_path), 'g_dbus_proxy_get_object_path'); LoadProc(Pointer(g_dbus_proxy_get_type), 'g_dbus_proxy_get_type'); LoadProc(Pointer(g_dbus_proxy_new), 'g_dbus_proxy_new'); LoadProc(Pointer(g_dbus_proxy_new_finish), 'g_dbus_proxy_new_finish'); LoadProc(Pointer(g_dbus_proxy_new_for_bus), 'g_dbus_proxy_new_for_bus'); LoadProc(Pointer(g_dbus_proxy_new_for_bus_finish), 'g_dbus_proxy_new_for_bus_finish'); LoadProc(Pointer(g_dbus_proxy_new_for_bus_sync), 'g_dbus_proxy_new_for_bus_sync'); LoadProc(Pointer(g_dbus_proxy_new_sync), 'g_dbus_proxy_new_sync'); LoadProc(Pointer(g_dbus_proxy_set_cached_property), 'g_dbus_proxy_set_cached_property'); LoadProc(Pointer(g_dbus_proxy_set_default_timeout), 'g_dbus_proxy_set_default_timeout'); LoadProc(Pointer(g_dbus_proxy_set_interface_info), 'g_dbus_proxy_set_interface_info'); LoadProc(Pointer(g_dbus_server_get_client_address), 'g_dbus_server_get_client_address'); LoadProc(Pointer(g_dbus_server_get_flags), 'g_dbus_server_get_flags'); LoadProc(Pointer(g_dbus_server_get_guid), 'g_dbus_server_get_guid'); LoadProc(Pointer(g_dbus_server_get_type), 'g_dbus_server_get_type'); LoadProc(Pointer(g_dbus_server_is_active), 'g_dbus_server_is_active'); LoadProc(Pointer(g_dbus_server_new_sync), 'g_dbus_server_new_sync'); LoadProc(Pointer(g_dbus_server_start), 'g_dbus_server_start'); LoadProc(Pointer(g_dbus_server_stop), 'g_dbus_server_stop'); LoadProc(Pointer(g_dbus_signal_info_get_type), 'g_dbus_signal_info_get_type'); LoadProc(Pointer(g_dbus_signal_info_ref), 'g_dbus_signal_info_ref'); LoadProc(Pointer(g_dbus_signal_info_unref), 'g_dbus_signal_info_unref'); LoadProc(Pointer(g_desktop_app_info_get_boolean), 'g_desktop_app_info_get_boolean'); LoadProc(Pointer(g_desktop_app_info_get_categories), 'g_desktop_app_info_get_categories'); LoadProc(Pointer(g_desktop_app_info_get_filename), 'g_desktop_app_info_get_filename'); LoadProc(Pointer(g_desktop_app_info_get_generic_name), 'g_desktop_app_info_get_generic_name'); LoadProc(Pointer(g_desktop_app_info_get_is_hidden), 'g_desktop_app_info_get_is_hidden'); LoadProc(Pointer(g_desktop_app_info_get_keywords), 'g_desktop_app_info_get_keywords'); LoadProc(Pointer(g_desktop_app_info_get_nodisplay), 'g_desktop_app_info_get_nodisplay'); LoadProc(Pointer(g_desktop_app_info_get_show_in), 'g_desktop_app_info_get_show_in'); LoadProc(Pointer(g_desktop_app_info_get_startup_wm_class), 'g_desktop_app_info_get_startup_wm_class'); LoadProc(Pointer(g_desktop_app_info_get_string), 'g_desktop_app_info_get_string'); LoadProc(Pointer(g_desktop_app_info_get_type), 'g_desktop_app_info_get_type'); LoadProc(Pointer(g_desktop_app_info_has_key), 'g_desktop_app_info_has_key'); LoadProc(Pointer(g_desktop_app_info_launch_uris_as_manager), 'g_desktop_app_info_launch_uris_as_manager'); LoadProc(Pointer(g_desktop_app_info_lookup_get_type), 'g_desktop_app_info_lookup_get_type'); LoadProc(Pointer(g_desktop_app_info_new), 'g_desktop_app_info_new'); LoadProc(Pointer(g_desktop_app_info_new_from_filename), 'g_desktop_app_info_new_from_filename'); LoadProc(Pointer(g_desktop_app_info_new_from_keyfile), 'g_desktop_app_info_new_from_keyfile'); LoadProc(Pointer(g_desktop_app_info_set_desktop_env), 'g_desktop_app_info_set_desktop_env'); LoadProc(Pointer(g_drive_can_eject), 'g_drive_can_eject'); LoadProc(Pointer(g_drive_can_poll_for_media), 'g_drive_can_poll_for_media'); LoadProc(Pointer(g_drive_can_start), 'g_drive_can_start'); LoadProc(Pointer(g_drive_can_start_degraded), 'g_drive_can_start_degraded'); LoadProc(Pointer(g_drive_can_stop), 'g_drive_can_stop'); LoadProc(Pointer(g_drive_eject_with_operation), 'g_drive_eject_with_operation'); LoadProc(Pointer(g_drive_eject_with_operation_finish), 'g_drive_eject_with_operation_finish'); LoadProc(Pointer(g_drive_enumerate_identifiers), 'g_drive_enumerate_identifiers'); LoadProc(Pointer(g_drive_get_icon), 'g_drive_get_icon'); LoadProc(Pointer(g_drive_get_identifier), 'g_drive_get_identifier'); LoadProc(Pointer(g_drive_get_name), 'g_drive_get_name'); LoadProc(Pointer(g_drive_get_sort_key), 'g_drive_get_sort_key'); LoadProc(Pointer(g_drive_get_start_stop_type), 'g_drive_get_start_stop_type'); LoadProc(Pointer(g_drive_get_symbolic_icon), 'g_drive_get_symbolic_icon'); LoadProc(Pointer(g_drive_get_type), 'g_drive_get_type'); LoadProc(Pointer(g_drive_get_volumes), 'g_drive_get_volumes'); LoadProc(Pointer(g_drive_has_media), 'g_drive_has_media'); LoadProc(Pointer(g_drive_has_volumes), 'g_drive_has_volumes'); LoadProc(Pointer(g_drive_is_media_check_automatic), 'g_drive_is_media_check_automatic'); LoadProc(Pointer(g_drive_is_media_removable), 'g_drive_is_media_removable'); LoadProc(Pointer(g_drive_poll_for_media), 'g_drive_poll_for_media'); LoadProc(Pointer(g_drive_poll_for_media_finish), 'g_drive_poll_for_media_finish'); LoadProc(Pointer(g_drive_start), 'g_drive_start'); LoadProc(Pointer(g_drive_start_finish), 'g_drive_start_finish'); LoadProc(Pointer(g_drive_stop), 'g_drive_stop'); LoadProc(Pointer(g_drive_stop_finish), 'g_drive_stop_finish'); LoadProc(Pointer(g_emblem_get_icon), 'g_emblem_get_icon'); LoadProc(Pointer(g_emblem_get_origin), 'g_emblem_get_origin'); LoadProc(Pointer(g_emblem_get_type), 'g_emblem_get_type'); LoadProc(Pointer(g_emblem_new), 'g_emblem_new'); LoadProc(Pointer(g_emblem_new_with_origin), 'g_emblem_new_with_origin'); LoadProc(Pointer(g_emblemed_icon_add_emblem), 'g_emblemed_icon_add_emblem'); LoadProc(Pointer(g_emblemed_icon_clear_emblems), 'g_emblemed_icon_clear_emblems'); LoadProc(Pointer(g_emblemed_icon_get_emblems), 'g_emblemed_icon_get_emblems'); LoadProc(Pointer(g_emblemed_icon_get_icon), 'g_emblemed_icon_get_icon'); LoadProc(Pointer(g_emblemed_icon_get_type), 'g_emblemed_icon_get_type'); LoadProc(Pointer(g_emblemed_icon_new), 'g_emblemed_icon_new'); LoadProc(Pointer(g_file_append_to), 'g_file_append_to'); LoadProc(Pointer(g_file_append_to_async), 'g_file_append_to_async'); LoadProc(Pointer(g_file_append_to_finish), 'g_file_append_to_finish'); LoadProc(Pointer(g_file_attribute_info_list_add), 'g_file_attribute_info_list_add'); LoadProc(Pointer(g_file_attribute_info_list_dup), 'g_file_attribute_info_list_dup'); LoadProc(Pointer(g_file_attribute_info_list_get_type), 'g_file_attribute_info_list_get_type'); LoadProc(Pointer(g_file_attribute_info_list_lookup), 'g_file_attribute_info_list_lookup'); LoadProc(Pointer(g_file_attribute_info_list_new), 'g_file_attribute_info_list_new'); LoadProc(Pointer(g_file_attribute_info_list_ref), 'g_file_attribute_info_list_ref'); LoadProc(Pointer(g_file_attribute_info_list_unref), 'g_file_attribute_info_list_unref'); LoadProc(Pointer(g_file_attribute_matcher_enumerate_namespace), 'g_file_attribute_matcher_enumerate_namespace'); LoadProc(Pointer(g_file_attribute_matcher_enumerate_next), 'g_file_attribute_matcher_enumerate_next'); LoadProc(Pointer(g_file_attribute_matcher_get_type), 'g_file_attribute_matcher_get_type'); LoadProc(Pointer(g_file_attribute_matcher_matches), 'g_file_attribute_matcher_matches'); LoadProc(Pointer(g_file_attribute_matcher_matches_only), 'g_file_attribute_matcher_matches_only'); LoadProc(Pointer(g_file_attribute_matcher_new), 'g_file_attribute_matcher_new'); LoadProc(Pointer(g_file_attribute_matcher_ref), 'g_file_attribute_matcher_ref'); LoadProc(Pointer(g_file_attribute_matcher_subtract), 'g_file_attribute_matcher_subtract'); LoadProc(Pointer(g_file_attribute_matcher_to_string), 'g_file_attribute_matcher_to_string'); LoadProc(Pointer(g_file_attribute_matcher_unref), 'g_file_attribute_matcher_unref'); LoadProc(Pointer(g_file_copy), 'g_file_copy'); LoadProc(Pointer(g_file_copy_async), 'g_file_copy_async'); LoadProc(Pointer(g_file_copy_attributes), 'g_file_copy_attributes'); LoadProc(Pointer(g_file_copy_finish), 'g_file_copy_finish'); LoadProc(Pointer(g_file_create), 'g_file_create'); LoadProc(Pointer(g_file_create_async), 'g_file_create_async'); LoadProc(Pointer(g_file_create_finish), 'g_file_create_finish'); LoadProc(Pointer(g_file_create_readwrite), 'g_file_create_readwrite'); LoadProc(Pointer(g_file_create_readwrite_async), 'g_file_create_readwrite_async'); LoadProc(Pointer(g_file_create_readwrite_finish), 'g_file_create_readwrite_finish'); LoadProc(Pointer(g_file_delete), 'g_file_delete'); LoadProc(Pointer(g_file_delete_async), 'g_file_delete_async'); LoadProc(Pointer(g_file_delete_finish), 'g_file_delete_finish'); LoadProc(Pointer(g_file_descriptor_based_get_fd), 'g_file_descriptor_based_get_fd'); LoadProc(Pointer(g_file_descriptor_based_get_type), 'g_file_descriptor_based_get_type'); LoadProc(Pointer(g_file_dup), 'g_file_dup'); LoadProc(Pointer(g_file_eject_mountable_with_operation), 'g_file_eject_mountable_with_operation'); LoadProc(Pointer(g_file_eject_mountable_with_operation_finish), 'g_file_eject_mountable_with_operation_finish'); LoadProc(Pointer(g_file_enumerate_children), 'g_file_enumerate_children'); LoadProc(Pointer(g_file_enumerate_children_async), 'g_file_enumerate_children_async'); LoadProc(Pointer(g_file_enumerate_children_finish), 'g_file_enumerate_children_finish'); LoadProc(Pointer(g_file_enumerator_close), 'g_file_enumerator_close'); LoadProc(Pointer(g_file_enumerator_close_async), 'g_file_enumerator_close_async'); LoadProc(Pointer(g_file_enumerator_close_finish), 'g_file_enumerator_close_finish'); LoadProc(Pointer(g_file_enumerator_get_child), 'g_file_enumerator_get_child'); LoadProc(Pointer(g_file_enumerator_get_container), 'g_file_enumerator_get_container'); LoadProc(Pointer(g_file_enumerator_get_type), 'g_file_enumerator_get_type'); LoadProc(Pointer(g_file_enumerator_has_pending), 'g_file_enumerator_has_pending'); LoadProc(Pointer(g_file_enumerator_is_closed), 'g_file_enumerator_is_closed'); LoadProc(Pointer(g_file_enumerator_next_file), 'g_file_enumerator_next_file'); LoadProc(Pointer(g_file_enumerator_next_files_async), 'g_file_enumerator_next_files_async'); LoadProc(Pointer(g_file_enumerator_next_files_finish), 'g_file_enumerator_next_files_finish'); LoadProc(Pointer(g_file_enumerator_set_pending), 'g_file_enumerator_set_pending'); LoadProc(Pointer(g_file_equal), 'g_file_equal'); LoadProc(Pointer(g_file_find_enclosing_mount), 'g_file_find_enclosing_mount'); LoadProc(Pointer(g_file_find_enclosing_mount_async), 'g_file_find_enclosing_mount_async'); LoadProc(Pointer(g_file_find_enclosing_mount_finish), 'g_file_find_enclosing_mount_finish'); LoadProc(Pointer(g_file_get_basename), 'g_file_get_basename'); LoadProc(Pointer(g_file_get_child), 'g_file_get_child'); LoadProc(Pointer(g_file_get_child_for_display_name), 'g_file_get_child_for_display_name'); LoadProc(Pointer(g_file_get_parent), 'g_file_get_parent'); LoadProc(Pointer(g_file_get_parse_name), 'g_file_get_parse_name'); LoadProc(Pointer(g_file_get_path), 'g_file_get_path'); LoadProc(Pointer(g_file_get_relative_path), 'g_file_get_relative_path'); LoadProc(Pointer(g_file_get_type), 'g_file_get_type'); LoadProc(Pointer(g_file_get_uri), 'g_file_get_uri'); LoadProc(Pointer(g_file_get_uri_scheme), 'g_file_get_uri_scheme'); LoadProc(Pointer(g_file_has_parent), 'g_file_has_parent'); LoadProc(Pointer(g_file_has_prefix), 'g_file_has_prefix'); LoadProc(Pointer(g_file_has_uri_scheme), 'g_file_has_uri_scheme'); LoadProc(Pointer(g_file_hash), 'g_file_hash'); LoadProc(Pointer(g_file_icon_get_file), 'g_file_icon_get_file'); LoadProc(Pointer(g_file_icon_get_type), 'g_file_icon_get_type'); LoadProc(Pointer(g_file_icon_new), 'g_file_icon_new'); LoadProc(Pointer(g_file_info_clear_status), 'g_file_info_clear_status'); LoadProc(Pointer(g_file_info_copy_into), 'g_file_info_copy_into'); LoadProc(Pointer(g_file_info_dup), 'g_file_info_dup'); LoadProc(Pointer(g_file_info_get_attribute_as_string), 'g_file_info_get_attribute_as_string'); LoadProc(Pointer(g_file_info_get_attribute_boolean), 'g_file_info_get_attribute_boolean'); LoadProc(Pointer(g_file_info_get_attribute_byte_string), 'g_file_info_get_attribute_byte_string'); LoadProc(Pointer(g_file_info_get_attribute_data), 'g_file_info_get_attribute_data'); LoadProc(Pointer(g_file_info_get_attribute_int32), 'g_file_info_get_attribute_int32'); LoadProc(Pointer(g_file_info_get_attribute_int64), 'g_file_info_get_attribute_int64'); LoadProc(Pointer(g_file_info_get_attribute_object), 'g_file_info_get_attribute_object'); LoadProc(Pointer(g_file_info_get_attribute_status), 'g_file_info_get_attribute_status'); LoadProc(Pointer(g_file_info_get_attribute_string), 'g_file_info_get_attribute_string'); LoadProc(Pointer(g_file_info_get_attribute_stringv), 'g_file_info_get_attribute_stringv'); LoadProc(Pointer(g_file_info_get_attribute_type), 'g_file_info_get_attribute_type'); LoadProc(Pointer(g_file_info_get_attribute_uint32), 'g_file_info_get_attribute_uint32'); LoadProc(Pointer(g_file_info_get_attribute_uint64), 'g_file_info_get_attribute_uint64'); LoadProc(Pointer(g_file_info_get_content_type), 'g_file_info_get_content_type'); LoadProc(Pointer(g_file_info_get_deletion_date), 'g_file_info_get_deletion_date'); LoadProc(Pointer(g_file_info_get_display_name), 'g_file_info_get_display_name'); LoadProc(Pointer(g_file_info_get_edit_name), 'g_file_info_get_edit_name'); LoadProc(Pointer(g_file_info_get_etag), 'g_file_info_get_etag'); LoadProc(Pointer(g_file_info_get_file_type), 'g_file_info_get_file_type'); LoadProc(Pointer(g_file_info_get_icon), 'g_file_info_get_icon'); LoadProc(Pointer(g_file_info_get_is_backup), 'g_file_info_get_is_backup'); LoadProc(Pointer(g_file_info_get_is_hidden), 'g_file_info_get_is_hidden'); LoadProc(Pointer(g_file_info_get_is_symlink), 'g_file_info_get_is_symlink'); LoadProc(Pointer(g_file_info_get_modification_time), 'g_file_info_get_modification_time'); LoadProc(Pointer(g_file_info_get_name), 'g_file_info_get_name'); LoadProc(Pointer(g_file_info_get_size), 'g_file_info_get_size'); LoadProc(Pointer(g_file_info_get_sort_order), 'g_file_info_get_sort_order'); LoadProc(Pointer(g_file_info_get_symbolic_icon), 'g_file_info_get_symbolic_icon'); LoadProc(Pointer(g_file_info_get_symlink_target), 'g_file_info_get_symlink_target'); LoadProc(Pointer(g_file_info_get_type), 'g_file_info_get_type'); LoadProc(Pointer(g_file_info_has_attribute), 'g_file_info_has_attribute'); LoadProc(Pointer(g_file_info_has_namespace), 'g_file_info_has_namespace'); LoadProc(Pointer(g_file_info_list_attributes), 'g_file_info_list_attributes'); LoadProc(Pointer(g_file_info_new), 'g_file_info_new'); LoadProc(Pointer(g_file_info_remove_attribute), 'g_file_info_remove_attribute'); LoadProc(Pointer(g_file_info_set_attribute), 'g_file_info_set_attribute'); LoadProc(Pointer(g_file_info_set_attribute_boolean), 'g_file_info_set_attribute_boolean'); LoadProc(Pointer(g_file_info_set_attribute_byte_string), 'g_file_info_set_attribute_byte_string'); LoadProc(Pointer(g_file_info_set_attribute_int32), 'g_file_info_set_attribute_int32'); LoadProc(Pointer(g_file_info_set_attribute_int64), 'g_file_info_set_attribute_int64'); LoadProc(Pointer(g_file_info_set_attribute_mask), 'g_file_info_set_attribute_mask'); LoadProc(Pointer(g_file_info_set_attribute_object), 'g_file_info_set_attribute_object'); LoadProc(Pointer(g_file_info_set_attribute_status), 'g_file_info_set_attribute_status'); LoadProc(Pointer(g_file_info_set_attribute_string), 'g_file_info_set_attribute_string'); LoadProc(Pointer(g_file_info_set_attribute_stringv), 'g_file_info_set_attribute_stringv'); LoadProc(Pointer(g_file_info_set_attribute_uint32), 'g_file_info_set_attribute_uint32'); LoadProc(Pointer(g_file_info_set_attribute_uint64), 'g_file_info_set_attribute_uint64'); LoadProc(Pointer(g_file_info_set_content_type), 'g_file_info_set_content_type'); LoadProc(Pointer(g_file_info_set_display_name), 'g_file_info_set_display_name'); LoadProc(Pointer(g_file_info_set_edit_name), 'g_file_info_set_edit_name'); LoadProc(Pointer(g_file_info_set_file_type), 'g_file_info_set_file_type'); LoadProc(Pointer(g_file_info_set_icon), 'g_file_info_set_icon'); LoadProc(Pointer(g_file_info_set_is_hidden), 'g_file_info_set_is_hidden'); LoadProc(Pointer(g_file_info_set_is_symlink), 'g_file_info_set_is_symlink'); LoadProc(Pointer(g_file_info_set_modification_time), 'g_file_info_set_modification_time'); LoadProc(Pointer(g_file_info_set_name), 'g_file_info_set_name'); LoadProc(Pointer(g_file_info_set_size), 'g_file_info_set_size'); LoadProc(Pointer(g_file_info_set_sort_order), 'g_file_info_set_sort_order'); LoadProc(Pointer(g_file_info_set_symbolic_icon), 'g_file_info_set_symbolic_icon'); LoadProc(Pointer(g_file_info_set_symlink_target), 'g_file_info_set_symlink_target'); LoadProc(Pointer(g_file_info_unset_attribute_mask), 'g_file_info_unset_attribute_mask'); LoadProc(Pointer(g_file_input_stream_get_type), 'g_file_input_stream_get_type'); LoadProc(Pointer(g_file_input_stream_query_info), 'g_file_input_stream_query_info'); LoadProc(Pointer(g_file_input_stream_query_info_async), 'g_file_input_stream_query_info_async'); LoadProc(Pointer(g_file_input_stream_query_info_finish), 'g_file_input_stream_query_info_finish'); LoadProc(Pointer(g_file_io_stream_get_etag), 'g_file_io_stream_get_etag'); LoadProc(Pointer(g_file_io_stream_get_type), 'g_file_io_stream_get_type'); LoadProc(Pointer(g_file_io_stream_query_info), 'g_file_io_stream_query_info'); LoadProc(Pointer(g_file_io_stream_query_info_async), 'g_file_io_stream_query_info_async'); LoadProc(Pointer(g_file_io_stream_query_info_finish), 'g_file_io_stream_query_info_finish'); LoadProc(Pointer(g_file_is_native), 'g_file_is_native'); LoadProc(Pointer(g_file_load_contents), 'g_file_load_contents'); LoadProc(Pointer(g_file_load_contents_async), 'g_file_load_contents_async'); LoadProc(Pointer(g_file_load_contents_finish), 'g_file_load_contents_finish'); LoadProc(Pointer(g_file_load_partial_contents_async), 'g_file_load_partial_contents_async'); LoadProc(Pointer(g_file_load_partial_contents_finish), 'g_file_load_partial_contents_finish'); LoadProc(Pointer(g_file_make_directory), 'g_file_make_directory'); LoadProc(Pointer(g_file_make_directory_with_parents), 'g_file_make_directory_with_parents'); LoadProc(Pointer(g_file_make_symbolic_link), 'g_file_make_symbolic_link'); LoadProc(Pointer(g_file_monitor), 'g_file_monitor'); LoadProc(Pointer(g_file_monitor_cancel), 'g_file_monitor_cancel'); LoadProc(Pointer(g_file_monitor_directory), 'g_file_monitor_directory'); LoadProc(Pointer(g_file_monitor_emit_event), 'g_file_monitor_emit_event'); LoadProc(Pointer(g_file_monitor_file), 'g_file_monitor_file'); LoadProc(Pointer(g_file_monitor_get_type), 'g_file_monitor_get_type'); LoadProc(Pointer(g_file_monitor_is_cancelled), 'g_file_monitor_is_cancelled'); LoadProc(Pointer(g_file_monitor_set_rate_limit), 'g_file_monitor_set_rate_limit'); LoadProc(Pointer(g_file_mount_enclosing_volume), 'g_file_mount_enclosing_volume'); LoadProc(Pointer(g_file_mount_enclosing_volume_finish), 'g_file_mount_enclosing_volume_finish'); LoadProc(Pointer(g_file_mount_mountable), 'g_file_mount_mountable'); LoadProc(Pointer(g_file_mount_mountable_finish), 'g_file_mount_mountable_finish'); LoadProc(Pointer(g_file_move), 'g_file_move'); LoadProc(Pointer(g_file_new_for_commandline_arg), 'g_file_new_for_commandline_arg'); LoadProc(Pointer(g_file_new_for_commandline_arg_and_cwd), 'g_file_new_for_commandline_arg_and_cwd'); LoadProc(Pointer(g_file_new_for_path), 'g_file_new_for_path'); LoadProc(Pointer(g_file_new_for_uri), 'g_file_new_for_uri'); LoadProc(Pointer(g_file_new_tmp), 'g_file_new_tmp'); LoadProc(Pointer(g_file_open_readwrite), 'g_file_open_readwrite'); LoadProc(Pointer(g_file_open_readwrite_async), 'g_file_open_readwrite_async'); LoadProc(Pointer(g_file_open_readwrite_finish), 'g_file_open_readwrite_finish'); LoadProc(Pointer(g_file_output_stream_get_etag), 'g_file_output_stream_get_etag'); LoadProc(Pointer(g_file_output_stream_get_type), 'g_file_output_stream_get_type'); LoadProc(Pointer(g_file_output_stream_query_info), 'g_file_output_stream_query_info'); LoadProc(Pointer(g_file_output_stream_query_info_async), 'g_file_output_stream_query_info_async'); LoadProc(Pointer(g_file_output_stream_query_info_finish), 'g_file_output_stream_query_info_finish'); LoadProc(Pointer(g_file_parse_name), 'g_file_parse_name'); LoadProc(Pointer(g_file_poll_mountable), 'g_file_poll_mountable'); LoadProc(Pointer(g_file_poll_mountable_finish), 'g_file_poll_mountable_finish'); LoadProc(Pointer(g_file_query_default_handler), 'g_file_query_default_handler'); LoadProc(Pointer(g_file_query_exists), 'g_file_query_exists'); LoadProc(Pointer(g_file_query_file_type), 'g_file_query_file_type'); LoadProc(Pointer(g_file_query_filesystem_info), 'g_file_query_filesystem_info'); LoadProc(Pointer(g_file_query_filesystem_info_async), 'g_file_query_filesystem_info_async'); LoadProc(Pointer(g_file_query_filesystem_info_finish), 'g_file_query_filesystem_info_finish'); LoadProc(Pointer(g_file_query_info), 'g_file_query_info'); LoadProc(Pointer(g_file_query_info_async), 'g_file_query_info_async'); LoadProc(Pointer(g_file_query_info_finish), 'g_file_query_info_finish'); LoadProc(Pointer(g_file_query_settable_attributes), 'g_file_query_settable_attributes'); LoadProc(Pointer(g_file_query_writable_namespaces), 'g_file_query_writable_namespaces'); LoadProc(Pointer(g_file_read), 'g_file_read'); LoadProc(Pointer(g_file_read_async), 'g_file_read_async'); LoadProc(Pointer(g_file_read_finish), 'g_file_read_finish'); LoadProc(Pointer(g_file_replace), 'g_file_replace'); LoadProc(Pointer(g_file_replace_async), 'g_file_replace_async'); LoadProc(Pointer(g_file_replace_contents), 'g_file_replace_contents'); LoadProc(Pointer(g_file_replace_contents_async), 'g_file_replace_contents_async'); LoadProc(Pointer(g_file_replace_contents_finish), 'g_file_replace_contents_finish'); LoadProc(Pointer(g_file_replace_finish), 'g_file_replace_finish'); LoadProc(Pointer(g_file_replace_readwrite), 'g_file_replace_readwrite'); LoadProc(Pointer(g_file_replace_readwrite_async), 'g_file_replace_readwrite_async'); LoadProc(Pointer(g_file_replace_readwrite_finish), 'g_file_replace_readwrite_finish'); LoadProc(Pointer(g_file_resolve_relative_path), 'g_file_resolve_relative_path'); LoadProc(Pointer(g_file_set_attribute), 'g_file_set_attribute'); LoadProc(Pointer(g_file_set_attribute_byte_string), 'g_file_set_attribute_byte_string'); LoadProc(Pointer(g_file_set_attribute_int32), 'g_file_set_attribute_int32'); LoadProc(Pointer(g_file_set_attribute_int64), 'g_file_set_attribute_int64'); LoadProc(Pointer(g_file_set_attribute_string), 'g_file_set_attribute_string'); LoadProc(Pointer(g_file_set_attribute_uint32), 'g_file_set_attribute_uint32'); LoadProc(Pointer(g_file_set_attribute_uint64), 'g_file_set_attribute_uint64'); LoadProc(Pointer(g_file_set_attributes_async), 'g_file_set_attributes_async'); LoadProc(Pointer(g_file_set_attributes_finish), 'g_file_set_attributes_finish'); LoadProc(Pointer(g_file_set_attributes_from_info), 'g_file_set_attributes_from_info'); LoadProc(Pointer(g_file_set_display_name), 'g_file_set_display_name'); LoadProc(Pointer(g_file_set_display_name_async), 'g_file_set_display_name_async'); LoadProc(Pointer(g_file_set_display_name_finish), 'g_file_set_display_name_finish'); LoadProc(Pointer(g_file_start_mountable), 'g_file_start_mountable'); LoadProc(Pointer(g_file_start_mountable_finish), 'g_file_start_mountable_finish'); LoadProc(Pointer(g_file_stop_mountable), 'g_file_stop_mountable'); LoadProc(Pointer(g_file_stop_mountable_finish), 'g_file_stop_mountable_finish'); LoadProc(Pointer(g_file_supports_thread_contexts), 'g_file_supports_thread_contexts'); LoadProc(Pointer(g_file_trash), 'g_file_trash'); LoadProc(Pointer(g_file_unmount_mountable_with_operation), 'g_file_unmount_mountable_with_operation'); LoadProc(Pointer(g_file_unmount_mountable_with_operation_finish), 'g_file_unmount_mountable_with_operation_finish'); LoadProc(Pointer(g_filename_completer_get_completion_suffix), 'g_filename_completer_get_completion_suffix'); LoadProc(Pointer(g_filename_completer_get_completions), 'g_filename_completer_get_completions'); LoadProc(Pointer(g_filename_completer_get_type), 'g_filename_completer_get_type'); LoadProc(Pointer(g_filename_completer_new), 'g_filename_completer_new'); LoadProc(Pointer(g_filename_completer_set_dirs_only), 'g_filename_completer_set_dirs_only'); LoadProc(Pointer(g_filter_input_stream_get_base_stream), 'g_filter_input_stream_get_base_stream'); LoadProc(Pointer(g_filter_input_stream_get_close_base_stream), 'g_filter_input_stream_get_close_base_stream'); LoadProc(Pointer(g_filter_input_stream_get_type), 'g_filter_input_stream_get_type'); LoadProc(Pointer(g_filter_input_stream_set_close_base_stream), 'g_filter_input_stream_set_close_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_base_stream), 'g_filter_output_stream_get_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_close_base_stream), 'g_filter_output_stream_get_close_base_stream'); LoadProc(Pointer(g_filter_output_stream_get_type), 'g_filter_output_stream_get_type'); LoadProc(Pointer(g_filter_output_stream_set_close_base_stream), 'g_filter_output_stream_set_close_base_stream'); LoadProc(Pointer(g_icon_equal), 'g_icon_equal'); LoadProc(Pointer(g_icon_get_type), 'g_icon_get_type'); LoadProc(Pointer(g_icon_hash), 'g_icon_hash'); LoadProc(Pointer(g_icon_new_for_string), 'g_icon_new_for_string'); LoadProc(Pointer(g_icon_to_string), 'g_icon_to_string'); LoadProc(Pointer(g_inet_address_equal), 'g_inet_address_equal'); LoadProc(Pointer(g_inet_address_get_family), 'g_inet_address_get_family'); LoadProc(Pointer(g_inet_address_get_is_any), 'g_inet_address_get_is_any'); LoadProc(Pointer(g_inet_address_get_is_link_local), 'g_inet_address_get_is_link_local'); LoadProc(Pointer(g_inet_address_get_is_loopback), 'g_inet_address_get_is_loopback'); LoadProc(Pointer(g_inet_address_get_is_mc_global), 'g_inet_address_get_is_mc_global'); LoadProc(Pointer(g_inet_address_get_is_mc_link_local), 'g_inet_address_get_is_mc_link_local'); LoadProc(Pointer(g_inet_address_get_is_mc_node_local), 'g_inet_address_get_is_mc_node_local'); LoadProc(Pointer(g_inet_address_get_is_mc_org_local), 'g_inet_address_get_is_mc_org_local'); LoadProc(Pointer(g_inet_address_get_is_mc_site_local), 'g_inet_address_get_is_mc_site_local'); LoadProc(Pointer(g_inet_address_get_is_multicast), 'g_inet_address_get_is_multicast'); LoadProc(Pointer(g_inet_address_get_is_site_local), 'g_inet_address_get_is_site_local'); LoadProc(Pointer(g_inet_address_get_native_size), 'g_inet_address_get_native_size'); LoadProc(Pointer(g_inet_address_get_type), 'g_inet_address_get_type'); LoadProc(Pointer(g_inet_address_mask_equal), 'g_inet_address_mask_equal'); LoadProc(Pointer(g_inet_address_mask_get_address), 'g_inet_address_mask_get_address'); LoadProc(Pointer(g_inet_address_mask_get_family), 'g_inet_address_mask_get_family'); LoadProc(Pointer(g_inet_address_mask_get_length), 'g_inet_address_mask_get_length'); LoadProc(Pointer(g_inet_address_mask_get_type), 'g_inet_address_mask_get_type'); LoadProc(Pointer(g_inet_address_mask_matches), 'g_inet_address_mask_matches'); LoadProc(Pointer(g_inet_address_mask_new), 'g_inet_address_mask_new'); LoadProc(Pointer(g_inet_address_mask_new_from_string), 'g_inet_address_mask_new_from_string'); LoadProc(Pointer(g_inet_address_mask_to_string), 'g_inet_address_mask_to_string'); LoadProc(Pointer(g_inet_address_new_any), 'g_inet_address_new_any'); LoadProc(Pointer(g_inet_address_new_from_bytes), 'g_inet_address_new_from_bytes'); LoadProc(Pointer(g_inet_address_new_from_string), 'g_inet_address_new_from_string'); LoadProc(Pointer(g_inet_address_new_loopback), 'g_inet_address_new_loopback'); LoadProc(Pointer(g_inet_address_to_bytes), 'g_inet_address_to_bytes'); LoadProc(Pointer(g_inet_address_to_string), 'g_inet_address_to_string'); LoadProc(Pointer(g_inet_socket_address_get_address), 'g_inet_socket_address_get_address'); LoadProc(Pointer(g_inet_socket_address_get_flowinfo), 'g_inet_socket_address_get_flowinfo'); LoadProc(Pointer(g_inet_socket_address_get_port), 'g_inet_socket_address_get_port'); LoadProc(Pointer(g_inet_socket_address_get_scope_id), 'g_inet_socket_address_get_scope_id'); LoadProc(Pointer(g_inet_socket_address_get_type), 'g_inet_socket_address_get_type'); LoadProc(Pointer(g_inet_socket_address_new), 'g_inet_socket_address_new'); LoadProc(Pointer(g_initable_get_type), 'g_initable_get_type'); LoadProc(Pointer(g_initable_init), 'g_initable_init'); LoadProc(Pointer(g_initable_new), 'g_initable_new'); LoadProc(Pointer(g_initable_new_valist), 'g_initable_new_valist'); LoadProc(Pointer(g_initable_newv), 'g_initable_newv'); LoadProc(Pointer(g_input_stream_clear_pending), 'g_input_stream_clear_pending'); LoadProc(Pointer(g_input_stream_close), 'g_input_stream_close'); LoadProc(Pointer(g_input_stream_close_async), 'g_input_stream_close_async'); LoadProc(Pointer(g_input_stream_close_finish), 'g_input_stream_close_finish'); LoadProc(Pointer(g_input_stream_get_type), 'g_input_stream_get_type'); LoadProc(Pointer(g_input_stream_has_pending), 'g_input_stream_has_pending'); LoadProc(Pointer(g_input_stream_is_closed), 'g_input_stream_is_closed'); LoadProc(Pointer(g_input_stream_read), 'g_input_stream_read'); LoadProc(Pointer(g_input_stream_read_all), 'g_input_stream_read_all'); LoadProc(Pointer(g_input_stream_read_async), 'g_input_stream_read_async'); LoadProc(Pointer(g_input_stream_read_bytes), 'g_input_stream_read_bytes'); LoadProc(Pointer(g_input_stream_read_bytes_async), 'g_input_stream_read_bytes_async'); LoadProc(Pointer(g_input_stream_read_bytes_finish), 'g_input_stream_read_bytes_finish'); LoadProc(Pointer(g_input_stream_read_finish), 'g_input_stream_read_finish'); LoadProc(Pointer(g_input_stream_set_pending), 'g_input_stream_set_pending'); LoadProc(Pointer(g_input_stream_skip), 'g_input_stream_skip'); LoadProc(Pointer(g_input_stream_skip_async), 'g_input_stream_skip_async'); LoadProc(Pointer(g_input_stream_skip_finish), 'g_input_stream_skip_finish'); LoadProc(Pointer(g_io_error_from_errno), 'g_io_error_from_errno'); LoadProc(Pointer(g_io_error_quark), 'g_io_error_quark'); LoadProc(Pointer(g_io_extension_get_name), 'g_io_extension_get_name'); LoadProc(Pointer(g_io_extension_get_priority), 'g_io_extension_get_priority'); LoadProc(Pointer(g_io_extension_get_type), 'g_io_extension_get_type'); LoadProc(Pointer(g_io_extension_point_get_extension_by_name), 'g_io_extension_point_get_extension_by_name'); LoadProc(Pointer(g_io_extension_point_get_extensions), 'g_io_extension_point_get_extensions'); LoadProc(Pointer(g_io_extension_point_get_required_type), 'g_io_extension_point_get_required_type'); LoadProc(Pointer(g_io_extension_point_implement), 'g_io_extension_point_implement'); LoadProc(Pointer(g_io_extension_point_lookup), 'g_io_extension_point_lookup'); LoadProc(Pointer(g_io_extension_point_register), 'g_io_extension_point_register'); LoadProc(Pointer(g_io_extension_point_set_required_type), 'g_io_extension_point_set_required_type'); LoadProc(Pointer(g_io_extension_ref_class), 'g_io_extension_ref_class'); LoadProc(Pointer(g_io_module_get_type), 'g_io_module_get_type'); LoadProc(Pointer(g_io_module_new), 'g_io_module_new'); LoadProc(Pointer(g_io_module_scope_block), 'g_io_module_scope_block'); LoadProc(Pointer(g_io_module_scope_free), 'g_io_module_scope_free'); LoadProc(Pointer(g_io_module_scope_new), 'g_io_module_scope_new'); LoadProc(Pointer(g_io_modules_load_all_in_directory), 'g_io_modules_load_all_in_directory'); LoadProc(Pointer(g_io_modules_load_all_in_directory_with_scope), 'g_io_modules_load_all_in_directory_with_scope'); LoadProc(Pointer(g_io_modules_scan_all_in_directory), 'g_io_modules_scan_all_in_directory'); LoadProc(Pointer(g_io_modules_scan_all_in_directory_with_scope), 'g_io_modules_scan_all_in_directory_with_scope'); LoadProc(Pointer(g_io_scheduler_cancel_all_jobs), 'g_io_scheduler_cancel_all_jobs'); LoadProc(Pointer(g_io_scheduler_push_job), 'g_io_scheduler_push_job'); LoadProc(Pointer(g_io_stream_clear_pending), 'g_io_stream_clear_pending'); LoadProc(Pointer(g_io_stream_close), 'g_io_stream_close'); LoadProc(Pointer(g_io_stream_close_async), 'g_io_stream_close_async'); LoadProc(Pointer(g_io_stream_close_finish), 'g_io_stream_close_finish'); LoadProc(Pointer(g_io_stream_get_input_stream), 'g_io_stream_get_input_stream'); LoadProc(Pointer(g_io_stream_get_output_stream), 'g_io_stream_get_output_stream'); LoadProc(Pointer(g_io_stream_get_type), 'g_io_stream_get_type'); LoadProc(Pointer(g_io_stream_has_pending), 'g_io_stream_has_pending'); LoadProc(Pointer(g_io_stream_is_closed), 'g_io_stream_is_closed'); LoadProc(Pointer(g_io_stream_set_pending), 'g_io_stream_set_pending'); LoadProc(Pointer(g_io_stream_splice_async), 'g_io_stream_splice_async'); LoadProc(Pointer(g_io_stream_splice_finish), 'g_io_stream_splice_finish'); LoadProc(Pointer(g_loadable_icon_get_type), 'g_loadable_icon_get_type'); LoadProc(Pointer(g_loadable_icon_load), 'g_loadable_icon_load'); LoadProc(Pointer(g_loadable_icon_load_async), 'g_loadable_icon_load_async'); LoadProc(Pointer(g_loadable_icon_load_finish), 'g_loadable_icon_load_finish'); LoadProc(Pointer(g_memory_input_stream_add_bytes), 'g_memory_input_stream_add_bytes'); LoadProc(Pointer(g_memory_input_stream_add_data), 'g_memory_input_stream_add_data'); LoadProc(Pointer(g_memory_input_stream_get_type), 'g_memory_input_stream_get_type'); LoadProc(Pointer(g_memory_input_stream_new), 'g_memory_input_stream_new'); LoadProc(Pointer(g_memory_input_stream_new_from_bytes), 'g_memory_input_stream_new_from_bytes'); LoadProc(Pointer(g_memory_input_stream_new_from_data), 'g_memory_input_stream_new_from_data'); LoadProc(Pointer(g_memory_output_stream_get_data), 'g_memory_output_stream_get_data'); LoadProc(Pointer(g_memory_output_stream_get_data_size), 'g_memory_output_stream_get_data_size'); LoadProc(Pointer(g_memory_output_stream_get_size), 'g_memory_output_stream_get_size'); LoadProc(Pointer(g_memory_output_stream_get_type), 'g_memory_output_stream_get_type'); LoadProc(Pointer(g_memory_output_stream_new), 'g_memory_output_stream_new'); LoadProc(Pointer(g_memory_output_stream_new_resizable), 'g_memory_output_stream_new_resizable'); LoadProc(Pointer(g_memory_output_stream_steal_as_bytes), 'g_memory_output_stream_steal_as_bytes'); LoadProc(Pointer(g_memory_output_stream_steal_data), 'g_memory_output_stream_steal_data'); LoadProc(Pointer(g_menu_append), 'g_menu_append'); LoadProc(Pointer(g_menu_append_item), 'g_menu_append_item'); LoadProc(Pointer(g_menu_append_section), 'g_menu_append_section'); LoadProc(Pointer(g_menu_append_submenu), 'g_menu_append_submenu'); LoadProc(Pointer(g_menu_attribute_iter_get_name), 'g_menu_attribute_iter_get_name'); LoadProc(Pointer(g_menu_attribute_iter_get_next), 'g_menu_attribute_iter_get_next'); LoadProc(Pointer(g_menu_attribute_iter_get_type), 'g_menu_attribute_iter_get_type'); LoadProc(Pointer(g_menu_attribute_iter_get_value), 'g_menu_attribute_iter_get_value'); LoadProc(Pointer(g_menu_attribute_iter_next), 'g_menu_attribute_iter_next'); LoadProc(Pointer(g_menu_freeze), 'g_menu_freeze'); LoadProc(Pointer(g_menu_get_type), 'g_menu_get_type'); LoadProc(Pointer(g_menu_insert), 'g_menu_insert'); LoadProc(Pointer(g_menu_insert_item), 'g_menu_insert_item'); LoadProc(Pointer(g_menu_insert_section), 'g_menu_insert_section'); LoadProc(Pointer(g_menu_insert_submenu), 'g_menu_insert_submenu'); LoadProc(Pointer(g_menu_item_get_attribute), 'g_menu_item_get_attribute'); LoadProc(Pointer(g_menu_item_get_attribute_value), 'g_menu_item_get_attribute_value'); LoadProc(Pointer(g_menu_item_get_link), 'g_menu_item_get_link'); LoadProc(Pointer(g_menu_item_get_type), 'g_menu_item_get_type'); LoadProc(Pointer(g_menu_item_new), 'g_menu_item_new'); LoadProc(Pointer(g_menu_item_new_from_model), 'g_menu_item_new_from_model'); LoadProc(Pointer(g_menu_item_new_section), 'g_menu_item_new_section'); LoadProc(Pointer(g_menu_item_new_submenu), 'g_menu_item_new_submenu'); LoadProc(Pointer(g_menu_item_set_action_and_target), 'g_menu_item_set_action_and_target'); LoadProc(Pointer(g_menu_item_set_action_and_target_value), 'g_menu_item_set_action_and_target_value'); LoadProc(Pointer(g_menu_item_set_attribute), 'g_menu_item_set_attribute'); LoadProc(Pointer(g_menu_item_set_attribute_value), 'g_menu_item_set_attribute_value'); LoadProc(Pointer(g_menu_item_set_detailed_action), 'g_menu_item_set_detailed_action'); LoadProc(Pointer(g_menu_item_set_label), 'g_menu_item_set_label'); LoadProc(Pointer(g_menu_item_set_link), 'g_menu_item_set_link'); LoadProc(Pointer(g_menu_item_set_section), 'g_menu_item_set_section'); LoadProc(Pointer(g_menu_item_set_submenu), 'g_menu_item_set_submenu'); LoadProc(Pointer(g_menu_link_iter_get_name), 'g_menu_link_iter_get_name'); LoadProc(Pointer(g_menu_link_iter_get_next), 'g_menu_link_iter_get_next'); LoadProc(Pointer(g_menu_link_iter_get_type), 'g_menu_link_iter_get_type'); LoadProc(Pointer(g_menu_link_iter_get_value), 'g_menu_link_iter_get_value'); LoadProc(Pointer(g_menu_link_iter_next), 'g_menu_link_iter_next'); LoadProc(Pointer(g_menu_model_get_item_attribute), 'g_menu_model_get_item_attribute'); LoadProc(Pointer(g_menu_model_get_item_attribute_value), 'g_menu_model_get_item_attribute_value'); LoadProc(Pointer(g_menu_model_get_item_link), 'g_menu_model_get_item_link'); LoadProc(Pointer(g_menu_model_get_n_items), 'g_menu_model_get_n_items'); LoadProc(Pointer(g_menu_model_get_type), 'g_menu_model_get_type'); LoadProc(Pointer(g_menu_model_is_mutable), 'g_menu_model_is_mutable'); LoadProc(Pointer(g_menu_model_items_changed), 'g_menu_model_items_changed'); LoadProc(Pointer(g_menu_model_iterate_item_attributes), 'g_menu_model_iterate_item_attributes'); LoadProc(Pointer(g_menu_model_iterate_item_links), 'g_menu_model_iterate_item_links'); LoadProc(Pointer(g_menu_new), 'g_menu_new'); LoadProc(Pointer(g_menu_prepend), 'g_menu_prepend'); LoadProc(Pointer(g_menu_prepend_item), 'g_menu_prepend_item'); LoadProc(Pointer(g_menu_prepend_section), 'g_menu_prepend_section'); LoadProc(Pointer(g_menu_prepend_submenu), 'g_menu_prepend_submenu'); LoadProc(Pointer(g_menu_remove), 'g_menu_remove'); LoadProc(Pointer(g_mount_can_eject), 'g_mount_can_eject'); LoadProc(Pointer(g_mount_can_unmount), 'g_mount_can_unmount'); LoadProc(Pointer(g_mount_eject_with_operation), 'g_mount_eject_with_operation'); LoadProc(Pointer(g_mount_eject_with_operation_finish), 'g_mount_eject_with_operation_finish'); LoadProc(Pointer(g_mount_get_default_location), 'g_mount_get_default_location'); LoadProc(Pointer(g_mount_get_drive), 'g_mount_get_drive'); LoadProc(Pointer(g_mount_get_icon), 'g_mount_get_icon'); LoadProc(Pointer(g_mount_get_name), 'g_mount_get_name'); LoadProc(Pointer(g_mount_get_root), 'g_mount_get_root'); LoadProc(Pointer(g_mount_get_sort_key), 'g_mount_get_sort_key'); LoadProc(Pointer(g_mount_get_symbolic_icon), 'g_mount_get_symbolic_icon'); LoadProc(Pointer(g_mount_get_type), 'g_mount_get_type'); LoadProc(Pointer(g_mount_get_uuid), 'g_mount_get_uuid'); LoadProc(Pointer(g_mount_get_volume), 'g_mount_get_volume'); LoadProc(Pointer(g_mount_guess_content_type), 'g_mount_guess_content_type'); LoadProc(Pointer(g_mount_guess_content_type_finish), 'g_mount_guess_content_type_finish'); LoadProc(Pointer(g_mount_guess_content_type_sync), 'g_mount_guess_content_type_sync'); LoadProc(Pointer(g_mount_is_shadowed), 'g_mount_is_shadowed'); LoadProc(Pointer(g_mount_operation_get_anonymous), 'g_mount_operation_get_anonymous'); LoadProc(Pointer(g_mount_operation_get_choice), 'g_mount_operation_get_choice'); LoadProc(Pointer(g_mount_operation_get_domain), 'g_mount_operation_get_domain'); LoadProc(Pointer(g_mount_operation_get_password), 'g_mount_operation_get_password'); LoadProc(Pointer(g_mount_operation_get_password_save), 'g_mount_operation_get_password_save'); LoadProc(Pointer(g_mount_operation_get_type), 'g_mount_operation_get_type'); LoadProc(Pointer(g_mount_operation_get_username), 'g_mount_operation_get_username'); LoadProc(Pointer(g_mount_operation_new), 'g_mount_operation_new'); LoadProc(Pointer(g_mount_operation_reply), 'g_mount_operation_reply'); LoadProc(Pointer(g_mount_operation_set_anonymous), 'g_mount_operation_set_anonymous'); LoadProc(Pointer(g_mount_operation_set_choice), 'g_mount_operation_set_choice'); LoadProc(Pointer(g_mount_operation_set_domain), 'g_mount_operation_set_domain'); LoadProc(Pointer(g_mount_operation_set_password), 'g_mount_operation_set_password'); LoadProc(Pointer(g_mount_operation_set_password_save), 'g_mount_operation_set_password_save'); LoadProc(Pointer(g_mount_operation_set_username), 'g_mount_operation_set_username'); LoadProc(Pointer(g_mount_remount), 'g_mount_remount'); LoadProc(Pointer(g_mount_remount_finish), 'g_mount_remount_finish'); LoadProc(Pointer(g_mount_shadow), 'g_mount_shadow'); LoadProc(Pointer(g_mount_unmount_with_operation), 'g_mount_unmount_with_operation'); LoadProc(Pointer(g_mount_unmount_with_operation_finish), 'g_mount_unmount_with_operation_finish'); LoadProc(Pointer(g_mount_unshadow), 'g_mount_unshadow'); LoadProc(Pointer(g_native_volume_monitor_get_type), 'g_native_volume_monitor_get_type'); LoadProc(Pointer(g_network_address_get_hostname), 'g_network_address_get_hostname'); LoadProc(Pointer(g_network_address_get_port), 'g_network_address_get_port'); LoadProc(Pointer(g_network_address_get_scheme), 'g_network_address_get_scheme'); LoadProc(Pointer(g_network_address_get_type), 'g_network_address_get_type'); LoadProc(Pointer(g_network_address_new), 'g_network_address_new'); LoadProc(Pointer(g_network_address_parse), 'g_network_address_parse'); LoadProc(Pointer(g_network_address_parse_uri), 'g_network_address_parse_uri'); LoadProc(Pointer(g_network_monitor_can_reach), 'g_network_monitor_can_reach'); LoadProc(Pointer(g_network_monitor_can_reach_async), 'g_network_monitor_can_reach_async'); LoadProc(Pointer(g_network_monitor_can_reach_finish), 'g_network_monitor_can_reach_finish'); LoadProc(Pointer(g_network_monitor_get_default), 'g_network_monitor_get_default'); LoadProc(Pointer(g_network_monitor_get_network_available), 'g_network_monitor_get_network_available'); LoadProc(Pointer(g_network_monitor_get_type), 'g_network_monitor_get_type'); LoadProc(Pointer(g_network_service_get_domain), 'g_network_service_get_domain'); LoadProc(Pointer(g_network_service_get_protocol), 'g_network_service_get_protocol'); LoadProc(Pointer(g_network_service_get_scheme), 'g_network_service_get_scheme'); LoadProc(Pointer(g_network_service_get_service), 'g_network_service_get_service'); LoadProc(Pointer(g_network_service_get_type), 'g_network_service_get_type'); LoadProc(Pointer(g_network_service_new), 'g_network_service_new'); LoadProc(Pointer(g_network_service_set_scheme), 'g_network_service_set_scheme'); LoadProc(Pointer(g_networking_init), 'g_networking_init'); LoadProc(Pointer(g_output_stream_clear_pending), 'g_output_stream_clear_pending'); LoadProc(Pointer(g_output_stream_close), 'g_output_stream_close'); LoadProc(Pointer(g_output_stream_close_async), 'g_output_stream_close_async'); LoadProc(Pointer(g_output_stream_close_finish), 'g_output_stream_close_finish'); LoadProc(Pointer(g_output_stream_flush), 'g_output_stream_flush'); LoadProc(Pointer(g_output_stream_flush_async), 'g_output_stream_flush_async'); LoadProc(Pointer(g_output_stream_flush_finish), 'g_output_stream_flush_finish'); LoadProc(Pointer(g_output_stream_get_type), 'g_output_stream_get_type'); LoadProc(Pointer(g_output_stream_has_pending), 'g_output_stream_has_pending'); LoadProc(Pointer(g_output_stream_is_closed), 'g_output_stream_is_closed'); LoadProc(Pointer(g_output_stream_is_closing), 'g_output_stream_is_closing'); LoadProc(Pointer(g_output_stream_set_pending), 'g_output_stream_set_pending'); LoadProc(Pointer(g_output_stream_splice), 'g_output_stream_splice'); LoadProc(Pointer(g_output_stream_splice_async), 'g_output_stream_splice_async'); LoadProc(Pointer(g_output_stream_splice_finish), 'g_output_stream_splice_finish'); LoadProc(Pointer(g_output_stream_write), 'g_output_stream_write'); LoadProc(Pointer(g_output_stream_write_all), 'g_output_stream_write_all'); LoadProc(Pointer(g_output_stream_write_async), 'g_output_stream_write_async'); LoadProc(Pointer(g_output_stream_write_bytes), 'g_output_stream_write_bytes'); LoadProc(Pointer(g_output_stream_write_bytes_async), 'g_output_stream_write_bytes_async'); LoadProc(Pointer(g_output_stream_write_bytes_finish), 'g_output_stream_write_bytes_finish'); LoadProc(Pointer(g_output_stream_write_finish), 'g_output_stream_write_finish'); LoadProc(Pointer(g_permission_acquire), 'g_permission_acquire'); LoadProc(Pointer(g_permission_acquire_async), 'g_permission_acquire_async'); LoadProc(Pointer(g_permission_acquire_finish), 'g_permission_acquire_finish'); LoadProc(Pointer(g_permission_get_allowed), 'g_permission_get_allowed'); LoadProc(Pointer(g_permission_get_can_acquire), 'g_permission_get_can_acquire'); LoadProc(Pointer(g_permission_get_can_release), 'g_permission_get_can_release'); LoadProc(Pointer(g_permission_get_type), 'g_permission_get_type'); LoadProc(Pointer(g_permission_impl_update), 'g_permission_impl_update'); LoadProc(Pointer(g_permission_release), 'g_permission_release'); LoadProc(Pointer(g_permission_release_async), 'g_permission_release_async'); LoadProc(Pointer(g_permission_release_finish), 'g_permission_release_finish'); LoadProc(Pointer(g_pollable_input_stream_can_poll), 'g_pollable_input_stream_can_poll'); LoadProc(Pointer(g_pollable_input_stream_create_source), 'g_pollable_input_stream_create_source'); LoadProc(Pointer(g_pollable_input_stream_get_type), 'g_pollable_input_stream_get_type'); LoadProc(Pointer(g_pollable_input_stream_is_readable), 'g_pollable_input_stream_is_readable'); LoadProc(Pointer(g_pollable_input_stream_read_nonblocking), 'g_pollable_input_stream_read_nonblocking'); LoadProc(Pointer(g_pollable_output_stream_can_poll), 'g_pollable_output_stream_can_poll'); LoadProc(Pointer(g_pollable_output_stream_create_source), 'g_pollable_output_stream_create_source'); LoadProc(Pointer(g_pollable_output_stream_get_type), 'g_pollable_output_stream_get_type'); LoadProc(Pointer(g_pollable_output_stream_is_writable), 'g_pollable_output_stream_is_writable'); LoadProc(Pointer(g_pollable_output_stream_write_nonblocking), 'g_pollable_output_stream_write_nonblocking'); LoadProc(Pointer(g_pollable_source_new), 'g_pollable_source_new'); LoadProc(Pointer(g_pollable_source_new_full), 'g_pollable_source_new_full'); LoadProc(Pointer(g_pollable_stream_read), 'g_pollable_stream_read'); LoadProc(Pointer(g_pollable_stream_write), 'g_pollable_stream_write'); LoadProc(Pointer(g_pollable_stream_write_all), 'g_pollable_stream_write_all'); LoadProc(Pointer(g_proxy_address_enumerator_get_type), 'g_proxy_address_enumerator_get_type'); LoadProc(Pointer(g_proxy_address_get_destination_hostname), 'g_proxy_address_get_destination_hostname'); LoadProc(Pointer(g_proxy_address_get_destination_port), 'g_proxy_address_get_destination_port'); LoadProc(Pointer(g_proxy_address_get_destination_protocol), 'g_proxy_address_get_destination_protocol'); LoadProc(Pointer(g_proxy_address_get_password), 'g_proxy_address_get_password'); LoadProc(Pointer(g_proxy_address_get_protocol), 'g_proxy_address_get_protocol'); LoadProc(Pointer(g_proxy_address_get_type), 'g_proxy_address_get_type'); LoadProc(Pointer(g_proxy_address_get_uri), 'g_proxy_address_get_uri'); LoadProc(Pointer(g_proxy_address_get_username), 'g_proxy_address_get_username'); LoadProc(Pointer(g_proxy_address_new), 'g_proxy_address_new'); LoadProc(Pointer(g_proxy_connect), 'g_proxy_connect'); LoadProc(Pointer(g_proxy_connect_async), 'g_proxy_connect_async'); LoadProc(Pointer(g_proxy_connect_finish), 'g_proxy_connect_finish'); LoadProc(Pointer(g_proxy_get_default_for_protocol), 'g_proxy_get_default_for_protocol'); LoadProc(Pointer(g_proxy_get_type), 'g_proxy_get_type'); LoadProc(Pointer(g_proxy_resolver_get_default), 'g_proxy_resolver_get_default'); LoadProc(Pointer(g_proxy_resolver_get_type), 'g_proxy_resolver_get_type'); LoadProc(Pointer(g_proxy_resolver_is_supported), 'g_proxy_resolver_is_supported'); LoadProc(Pointer(g_proxy_resolver_lookup), 'g_proxy_resolver_lookup'); LoadProc(Pointer(g_proxy_resolver_lookup_async), 'g_proxy_resolver_lookup_async'); LoadProc(Pointer(g_proxy_resolver_lookup_finish), 'g_proxy_resolver_lookup_finish'); LoadProc(Pointer(g_proxy_supports_hostname), 'g_proxy_supports_hostname'); LoadProc(Pointer(g_remote_action_group_activate_action_full), 'g_remote_action_group_activate_action_full'); LoadProc(Pointer(g_remote_action_group_change_action_state_full), 'g_remote_action_group_change_action_state_full'); LoadProc(Pointer(g_remote_action_group_get_type), 'g_remote_action_group_get_type'); LoadProc(Pointer(g_resolver_error_quark), 'g_resolver_error_quark'); LoadProc(Pointer(g_resolver_free_addresses), 'g_resolver_free_addresses'); LoadProc(Pointer(g_resolver_free_targets), 'g_resolver_free_targets'); LoadProc(Pointer(g_resolver_get_default), 'g_resolver_get_default'); LoadProc(Pointer(g_resolver_get_type), 'g_resolver_get_type'); LoadProc(Pointer(g_resolver_lookup_by_address), 'g_resolver_lookup_by_address'); LoadProc(Pointer(g_resolver_lookup_by_address_async), 'g_resolver_lookup_by_address_async'); LoadProc(Pointer(g_resolver_lookup_by_address_finish), 'g_resolver_lookup_by_address_finish'); LoadProc(Pointer(g_resolver_lookup_by_name), 'g_resolver_lookup_by_name'); LoadProc(Pointer(g_resolver_lookup_by_name_async), 'g_resolver_lookup_by_name_async'); LoadProc(Pointer(g_resolver_lookup_by_name_finish), 'g_resolver_lookup_by_name_finish'); LoadProc(Pointer(g_resolver_lookup_records), 'g_resolver_lookup_records'); LoadProc(Pointer(g_resolver_lookup_records_async), 'g_resolver_lookup_records_async'); LoadProc(Pointer(g_resolver_lookup_records_finish), 'g_resolver_lookup_records_finish'); LoadProc(Pointer(g_resolver_lookup_service), 'g_resolver_lookup_service'); LoadProc(Pointer(g_resolver_lookup_service_async), 'g_resolver_lookup_service_async'); LoadProc(Pointer(g_resolver_lookup_service_finish), 'g_resolver_lookup_service_finish'); LoadProc(Pointer(g_resolver_set_default), 'g_resolver_set_default'); LoadProc(Pointer(g_resource_enumerate_children), 'g_resource_enumerate_children'); LoadProc(Pointer(g_resource_error_quark), 'g_resource_error_quark'); LoadProc(Pointer(g_resource_get_info), 'g_resource_get_info'); LoadProc(Pointer(g_resource_get_type), 'g_resource_get_type'); LoadProc(Pointer(g_resource_load), 'g_resource_load'); LoadProc(Pointer(g_resource_lookup_data), 'g_resource_lookup_data'); LoadProc(Pointer(g_resource_new_from_data), 'g_resource_new_from_data'); LoadProc(Pointer(g_resource_open_stream), 'g_resource_open_stream'); LoadProc(Pointer(g_resource_ref), 'g_resource_ref'); LoadProc(Pointer(g_resource_unref), 'g_resource_unref'); LoadProc(Pointer(g_resources_enumerate_children), 'g_resources_enumerate_children'); LoadProc(Pointer(g_resources_get_info), 'g_resources_get_info'); LoadProc(Pointer(g_resources_lookup_data), 'g_resources_lookup_data'); LoadProc(Pointer(g_resources_open_stream), 'g_resources_open_stream'); LoadProc(Pointer(g_resources_register), 'g_resources_register'); LoadProc(Pointer(g_resources_unregister), 'g_resources_unregister'); LoadProc(Pointer(g_seekable_can_seek), 'g_seekable_can_seek'); LoadProc(Pointer(g_seekable_can_truncate), 'g_seekable_can_truncate'); LoadProc(Pointer(g_seekable_get_type), 'g_seekable_get_type'); LoadProc(Pointer(g_seekable_seek), 'g_seekable_seek'); LoadProc(Pointer(g_seekable_tell), 'g_seekable_tell'); LoadProc(Pointer(g_seekable_truncate), 'g_seekable_truncate'); LoadProc(Pointer(g_settings_apply), 'g_settings_apply'); LoadProc(Pointer(g_settings_bind), 'g_settings_bind'); LoadProc(Pointer(g_settings_bind_with_mapping), 'g_settings_bind_with_mapping'); LoadProc(Pointer(g_settings_bind_writable), 'g_settings_bind_writable'); LoadProc(Pointer(g_settings_create_action), 'g_settings_create_action'); LoadProc(Pointer(g_settings_delay), 'g_settings_delay'); LoadProc(Pointer(g_settings_get), 'g_settings_get'); LoadProc(Pointer(g_settings_get_boolean), 'g_settings_get_boolean'); LoadProc(Pointer(g_settings_get_child), 'g_settings_get_child'); LoadProc(Pointer(g_settings_get_double), 'g_settings_get_double'); LoadProc(Pointer(g_settings_get_enum), 'g_settings_get_enum'); LoadProc(Pointer(g_settings_get_flags), 'g_settings_get_flags'); LoadProc(Pointer(g_settings_get_has_unapplied), 'g_settings_get_has_unapplied'); LoadProc(Pointer(g_settings_get_int), 'g_settings_get_int'); LoadProc(Pointer(g_settings_get_mapped), 'g_settings_get_mapped'); LoadProc(Pointer(g_settings_get_range), 'g_settings_get_range'); LoadProc(Pointer(g_settings_get_string), 'g_settings_get_string'); LoadProc(Pointer(g_settings_get_strv), 'g_settings_get_strv'); LoadProc(Pointer(g_settings_get_type), 'g_settings_get_type'); LoadProc(Pointer(g_settings_get_uint), 'g_settings_get_uint'); LoadProc(Pointer(g_settings_get_value), 'g_settings_get_value'); LoadProc(Pointer(g_settings_is_writable), 'g_settings_is_writable'); LoadProc(Pointer(g_settings_list_children), 'g_settings_list_children'); LoadProc(Pointer(g_settings_list_keys), 'g_settings_list_keys'); LoadProc(Pointer(g_settings_list_relocatable_schemas), 'g_settings_list_relocatable_schemas'); LoadProc(Pointer(g_settings_list_schemas), 'g_settings_list_schemas'); LoadProc(Pointer(g_settings_new), 'g_settings_new'); LoadProc(Pointer(g_settings_new_full), 'g_settings_new_full'); LoadProc(Pointer(g_settings_new_with_backend), 'g_settings_new_with_backend'); LoadProc(Pointer(g_settings_new_with_backend_and_path), 'g_settings_new_with_backend_and_path'); LoadProc(Pointer(g_settings_new_with_path), 'g_settings_new_with_path'); LoadProc(Pointer(g_settings_range_check), 'g_settings_range_check'); LoadProc(Pointer(g_settings_reset), 'g_settings_reset'); LoadProc(Pointer(g_settings_revert), 'g_settings_revert'); LoadProc(Pointer(g_settings_schema_get_id), 'g_settings_schema_get_id'); LoadProc(Pointer(g_settings_schema_get_path), 'g_settings_schema_get_path'); LoadProc(Pointer(g_settings_schema_get_type), 'g_settings_schema_get_type'); LoadProc(Pointer(g_settings_schema_ref), 'g_settings_schema_ref'); LoadProc(Pointer(g_settings_schema_source_get_default), 'g_settings_schema_source_get_default'); LoadProc(Pointer(g_settings_schema_source_get_type), 'g_settings_schema_source_get_type'); LoadProc(Pointer(g_settings_schema_source_lookup), 'g_settings_schema_source_lookup'); LoadProc(Pointer(g_settings_schema_source_new_from_directory), 'g_settings_schema_source_new_from_directory'); LoadProc(Pointer(g_settings_schema_source_ref), 'g_settings_schema_source_ref'); LoadProc(Pointer(g_settings_schema_source_unref), 'g_settings_schema_source_unref'); LoadProc(Pointer(g_settings_schema_unref), 'g_settings_schema_unref'); LoadProc(Pointer(g_settings_set), 'g_settings_set'); LoadProc(Pointer(g_settings_set_boolean), 'g_settings_set_boolean'); LoadProc(Pointer(g_settings_set_double), 'g_settings_set_double'); LoadProc(Pointer(g_settings_set_enum), 'g_settings_set_enum'); LoadProc(Pointer(g_settings_set_flags), 'g_settings_set_flags'); LoadProc(Pointer(g_settings_set_int), 'g_settings_set_int'); LoadProc(Pointer(g_settings_set_string), 'g_settings_set_string'); LoadProc(Pointer(g_settings_set_strv), 'g_settings_set_strv'); LoadProc(Pointer(g_settings_set_uint), 'g_settings_set_uint'); LoadProc(Pointer(g_settings_set_value), 'g_settings_set_value'); LoadProc(Pointer(g_settings_sync), 'g_settings_sync'); LoadProc(Pointer(g_settings_unbind), 'g_settings_unbind'); LoadProc(Pointer(g_simple_action_get_type), 'g_simple_action_get_type'); LoadProc(Pointer(g_simple_action_group_add_entries), 'g_simple_action_group_add_entries'); LoadProc(Pointer(g_simple_action_group_get_type), 'g_simple_action_group_get_type'); LoadProc(Pointer(g_simple_action_group_insert), 'g_simple_action_group_insert'); LoadProc(Pointer(g_simple_action_group_lookup), 'g_simple_action_group_lookup'); LoadProc(Pointer(g_simple_action_group_new), 'g_simple_action_group_new'); LoadProc(Pointer(g_simple_action_group_remove), 'g_simple_action_group_remove'); LoadProc(Pointer(g_simple_action_new), 'g_simple_action_new'); LoadProc(Pointer(g_simple_action_new_stateful), 'g_simple_action_new_stateful'); LoadProc(Pointer(g_simple_action_set_enabled), 'g_simple_action_set_enabled'); LoadProc(Pointer(g_simple_action_set_state), 'g_simple_action_set_state'); LoadProc(Pointer(g_simple_async_report_error_in_idle), 'g_simple_async_report_error_in_idle'); LoadProc(Pointer(g_simple_async_report_gerror_in_idle), 'g_simple_async_report_gerror_in_idle'); LoadProc(Pointer(g_simple_async_report_take_gerror_in_idle), 'g_simple_async_report_take_gerror_in_idle'); LoadProc(Pointer(g_simple_async_result_complete), 'g_simple_async_result_complete'); LoadProc(Pointer(g_simple_async_result_complete_in_idle), 'g_simple_async_result_complete_in_idle'); LoadProc(Pointer(g_simple_async_result_get_op_res_gboolean), 'g_simple_async_result_get_op_res_gboolean'); LoadProc(Pointer(g_simple_async_result_get_op_res_gpointer), 'g_simple_async_result_get_op_res_gpointer'); LoadProc(Pointer(g_simple_async_result_get_op_res_gssize), 'g_simple_async_result_get_op_res_gssize'); LoadProc(Pointer(g_simple_async_result_get_source_tag), 'g_simple_async_result_get_source_tag'); LoadProc(Pointer(g_simple_async_result_get_type), 'g_simple_async_result_get_type'); LoadProc(Pointer(g_simple_async_result_is_valid), 'g_simple_async_result_is_valid'); LoadProc(Pointer(g_simple_async_result_new), 'g_simple_async_result_new'); LoadProc(Pointer(g_simple_async_result_new_error), 'g_simple_async_result_new_error'); LoadProc(Pointer(g_simple_async_result_new_from_error), 'g_simple_async_result_new_from_error'); LoadProc(Pointer(g_simple_async_result_new_take_error), 'g_simple_async_result_new_take_error'); LoadProc(Pointer(g_simple_async_result_propagate_error), 'g_simple_async_result_propagate_error'); LoadProc(Pointer(g_simple_async_result_run_in_thread), 'g_simple_async_result_run_in_thread'); LoadProc(Pointer(g_simple_async_result_set_check_cancellable), 'g_simple_async_result_set_check_cancellable'); LoadProc(Pointer(g_simple_async_result_set_error), 'g_simple_async_result_set_error'); LoadProc(Pointer(g_simple_async_result_set_error_va), 'g_simple_async_result_set_error_va'); LoadProc(Pointer(g_simple_async_result_set_from_error), 'g_simple_async_result_set_from_error'); LoadProc(Pointer(g_simple_async_result_set_handle_cancellation), 'g_simple_async_result_set_handle_cancellation'); LoadProc(Pointer(g_simple_async_result_set_op_res_gboolean), 'g_simple_async_result_set_op_res_gboolean'); LoadProc(Pointer(g_simple_async_result_set_op_res_gpointer), 'g_simple_async_result_set_op_res_gpointer'); LoadProc(Pointer(g_simple_async_result_set_op_res_gssize), 'g_simple_async_result_set_op_res_gssize'); LoadProc(Pointer(g_simple_async_result_take_error), 'g_simple_async_result_take_error'); LoadProc(Pointer(g_simple_permission_get_type), 'g_simple_permission_get_type'); LoadProc(Pointer(g_simple_permission_new), 'g_simple_permission_new'); LoadProc(Pointer(g_simple_proxy_resolver_get_type), 'g_simple_proxy_resolver_get_type'); LoadProc(Pointer(g_simple_proxy_resolver_new), 'g_simple_proxy_resolver_new'); LoadProc(Pointer(g_simple_proxy_resolver_set_default_proxy), 'g_simple_proxy_resolver_set_default_proxy'); LoadProc(Pointer(g_simple_proxy_resolver_set_ignore_hosts), 'g_simple_proxy_resolver_set_ignore_hosts'); LoadProc(Pointer(g_simple_proxy_resolver_set_uri_proxy), 'g_simple_proxy_resolver_set_uri_proxy'); LoadProc(Pointer(g_socket_accept), 'g_socket_accept'); LoadProc(Pointer(g_socket_address_enumerator_get_type), 'g_socket_address_enumerator_get_type'); LoadProc(Pointer(g_socket_address_enumerator_next), 'g_socket_address_enumerator_next'); LoadProc(Pointer(g_socket_address_enumerator_next_async), 'g_socket_address_enumerator_next_async'); LoadProc(Pointer(g_socket_address_enumerator_next_finish), 'g_socket_address_enumerator_next_finish'); LoadProc(Pointer(g_socket_address_get_family), 'g_socket_address_get_family'); LoadProc(Pointer(g_socket_address_get_native_size), 'g_socket_address_get_native_size'); LoadProc(Pointer(g_socket_address_get_type), 'g_socket_address_get_type'); LoadProc(Pointer(g_socket_address_new_from_native), 'g_socket_address_new_from_native'); LoadProc(Pointer(g_socket_address_to_native), 'g_socket_address_to_native'); LoadProc(Pointer(g_socket_bind), 'g_socket_bind'); LoadProc(Pointer(g_socket_check_connect_result), 'g_socket_check_connect_result'); LoadProc(Pointer(g_socket_client_add_application_proxy), 'g_socket_client_add_application_proxy'); LoadProc(Pointer(g_socket_client_connect), 'g_socket_client_connect'); LoadProc(Pointer(g_socket_client_connect_async), 'g_socket_client_connect_async'); LoadProc(Pointer(g_socket_client_connect_finish), 'g_socket_client_connect_finish'); LoadProc(Pointer(g_socket_client_connect_to_host), 'g_socket_client_connect_to_host'); LoadProc(Pointer(g_socket_client_connect_to_host_async), 'g_socket_client_connect_to_host_async'); LoadProc(Pointer(g_socket_client_connect_to_host_finish), 'g_socket_client_connect_to_host_finish'); LoadProc(Pointer(g_socket_client_connect_to_service), 'g_socket_client_connect_to_service'); LoadProc(Pointer(g_socket_client_connect_to_service_async), 'g_socket_client_connect_to_service_async'); LoadProc(Pointer(g_socket_client_connect_to_service_finish), 'g_socket_client_connect_to_service_finish'); LoadProc(Pointer(g_socket_client_connect_to_uri), 'g_socket_client_connect_to_uri'); LoadProc(Pointer(g_socket_client_connect_to_uri_async), 'g_socket_client_connect_to_uri_async'); LoadProc(Pointer(g_socket_client_connect_to_uri_finish), 'g_socket_client_connect_to_uri_finish'); LoadProc(Pointer(g_socket_client_get_enable_proxy), 'g_socket_client_get_enable_proxy'); LoadProc(Pointer(g_socket_client_get_family), 'g_socket_client_get_family'); LoadProc(Pointer(g_socket_client_get_local_address), 'g_socket_client_get_local_address'); LoadProc(Pointer(g_socket_client_get_protocol), 'g_socket_client_get_protocol'); LoadProc(Pointer(g_socket_client_get_proxy_resolver), 'g_socket_client_get_proxy_resolver'); LoadProc(Pointer(g_socket_client_get_socket_type), 'g_socket_client_get_socket_type'); LoadProc(Pointer(g_socket_client_get_timeout), 'g_socket_client_get_timeout'); LoadProc(Pointer(g_socket_client_get_tls), 'g_socket_client_get_tls'); LoadProc(Pointer(g_socket_client_get_tls_validation_flags), 'g_socket_client_get_tls_validation_flags'); LoadProc(Pointer(g_socket_client_get_type), 'g_socket_client_get_type'); LoadProc(Pointer(g_socket_client_new), 'g_socket_client_new'); LoadProc(Pointer(g_socket_client_set_enable_proxy), 'g_socket_client_set_enable_proxy'); LoadProc(Pointer(g_socket_client_set_family), 'g_socket_client_set_family'); LoadProc(Pointer(g_socket_client_set_local_address), 'g_socket_client_set_local_address'); LoadProc(Pointer(g_socket_client_set_protocol), 'g_socket_client_set_protocol'); LoadProc(Pointer(g_socket_client_set_proxy_resolver), 'g_socket_client_set_proxy_resolver'); LoadProc(Pointer(g_socket_client_set_socket_type), 'g_socket_client_set_socket_type'); LoadProc(Pointer(g_socket_client_set_timeout), 'g_socket_client_set_timeout'); LoadProc(Pointer(g_socket_client_set_tls), 'g_socket_client_set_tls'); LoadProc(Pointer(g_socket_client_set_tls_validation_flags), 'g_socket_client_set_tls_validation_flags'); LoadProc(Pointer(g_socket_close), 'g_socket_close'); LoadProc(Pointer(g_socket_condition_check), 'g_socket_condition_check'); LoadProc(Pointer(g_socket_condition_timed_wait), 'g_socket_condition_timed_wait'); LoadProc(Pointer(g_socket_condition_wait), 'g_socket_condition_wait'); LoadProc(Pointer(g_socket_connect), 'g_socket_connect'); LoadProc(Pointer(g_socket_connectable_enumerate), 'g_socket_connectable_enumerate'); LoadProc(Pointer(g_socket_connectable_get_type), 'g_socket_connectable_get_type'); LoadProc(Pointer(g_socket_connectable_proxy_enumerate), 'g_socket_connectable_proxy_enumerate'); LoadProc(Pointer(g_socket_connection_connect), 'g_socket_connection_connect'); LoadProc(Pointer(g_socket_connection_connect_async), 'g_socket_connection_connect_async'); LoadProc(Pointer(g_socket_connection_connect_finish), 'g_socket_connection_connect_finish'); LoadProc(Pointer(g_socket_connection_factory_create_connection), 'g_socket_connection_factory_create_connection'); LoadProc(Pointer(g_socket_connection_factory_lookup_type), 'g_socket_connection_factory_lookup_type'); LoadProc(Pointer(g_socket_connection_factory_register_type), 'g_socket_connection_factory_register_type'); LoadProc(Pointer(g_socket_connection_get_local_address), 'g_socket_connection_get_local_address'); LoadProc(Pointer(g_socket_connection_get_remote_address), 'g_socket_connection_get_remote_address'); LoadProc(Pointer(g_socket_connection_get_socket), 'g_socket_connection_get_socket'); LoadProc(Pointer(g_socket_connection_get_type), 'g_socket_connection_get_type'); LoadProc(Pointer(g_socket_connection_is_connected), 'g_socket_connection_is_connected'); LoadProc(Pointer(g_socket_control_message_deserialize), 'g_socket_control_message_deserialize'); LoadProc(Pointer(g_socket_control_message_get_level), 'g_socket_control_message_get_level'); LoadProc(Pointer(g_socket_control_message_get_msg_type), 'g_socket_control_message_get_msg_type'); LoadProc(Pointer(g_socket_control_message_get_size), 'g_socket_control_message_get_size'); LoadProc(Pointer(g_socket_control_message_get_type), 'g_socket_control_message_get_type'); LoadProc(Pointer(g_socket_control_message_serialize), 'g_socket_control_message_serialize'); LoadProc(Pointer(g_socket_create_source), 'g_socket_create_source'); LoadProc(Pointer(g_socket_get_available_bytes), 'g_socket_get_available_bytes'); LoadProc(Pointer(g_socket_get_blocking), 'g_socket_get_blocking'); LoadProc(Pointer(g_socket_get_broadcast), 'g_socket_get_broadcast'); LoadProc(Pointer(g_socket_get_credentials), 'g_socket_get_credentials'); LoadProc(Pointer(g_socket_get_family), 'g_socket_get_family'); LoadProc(Pointer(g_socket_get_fd), 'g_socket_get_fd'); LoadProc(Pointer(g_socket_get_keepalive), 'g_socket_get_keepalive'); LoadProc(Pointer(g_socket_get_listen_backlog), 'g_socket_get_listen_backlog'); LoadProc(Pointer(g_socket_get_local_address), 'g_socket_get_local_address'); LoadProc(Pointer(g_socket_get_multicast_loopback), 'g_socket_get_multicast_loopback'); LoadProc(Pointer(g_socket_get_multicast_ttl), 'g_socket_get_multicast_ttl'); LoadProc(Pointer(g_socket_get_option), 'g_socket_get_option'); LoadProc(Pointer(g_socket_get_protocol), 'g_socket_get_protocol'); LoadProc(Pointer(g_socket_get_remote_address), 'g_socket_get_remote_address'); LoadProc(Pointer(g_socket_get_socket_type), 'g_socket_get_socket_type'); LoadProc(Pointer(g_socket_get_timeout), 'g_socket_get_timeout'); LoadProc(Pointer(g_socket_get_ttl), 'g_socket_get_ttl'); LoadProc(Pointer(g_socket_get_type), 'g_socket_get_type'); LoadProc(Pointer(g_socket_is_closed), 'g_socket_is_closed'); LoadProc(Pointer(g_socket_is_connected), 'g_socket_is_connected'); LoadProc(Pointer(g_socket_join_multicast_group), 'g_socket_join_multicast_group'); LoadProc(Pointer(g_socket_leave_multicast_group), 'g_socket_leave_multicast_group'); LoadProc(Pointer(g_socket_listen), 'g_socket_listen'); LoadProc(Pointer(g_socket_listener_accept), 'g_socket_listener_accept'); LoadProc(Pointer(g_socket_listener_accept_async), 'g_socket_listener_accept_async'); LoadProc(Pointer(g_socket_listener_accept_finish), 'g_socket_listener_accept_finish'); LoadProc(Pointer(g_socket_listener_accept_socket), 'g_socket_listener_accept_socket'); LoadProc(Pointer(g_socket_listener_accept_socket_async), 'g_socket_listener_accept_socket_async'); LoadProc(Pointer(g_socket_listener_accept_socket_finish), 'g_socket_listener_accept_socket_finish'); LoadProc(Pointer(g_socket_listener_add_address), 'g_socket_listener_add_address'); LoadProc(Pointer(g_socket_listener_add_any_inet_port), 'g_socket_listener_add_any_inet_port'); LoadProc(Pointer(g_socket_listener_add_inet_port), 'g_socket_listener_add_inet_port'); LoadProc(Pointer(g_socket_listener_add_socket), 'g_socket_listener_add_socket'); LoadProc(Pointer(g_socket_listener_close), 'g_socket_listener_close'); LoadProc(Pointer(g_socket_listener_get_type), 'g_socket_listener_get_type'); LoadProc(Pointer(g_socket_listener_new), 'g_socket_listener_new'); LoadProc(Pointer(g_socket_listener_set_backlog), 'g_socket_listener_set_backlog'); LoadProc(Pointer(g_socket_new), 'g_socket_new'); LoadProc(Pointer(g_socket_new_from_fd), 'g_socket_new_from_fd'); LoadProc(Pointer(g_socket_receive), 'g_socket_receive'); LoadProc(Pointer(g_socket_receive_from), 'g_socket_receive_from'); LoadProc(Pointer(g_socket_receive_message), 'g_socket_receive_message'); LoadProc(Pointer(g_socket_receive_with_blocking), 'g_socket_receive_with_blocking'); LoadProc(Pointer(g_socket_send), 'g_socket_send'); LoadProc(Pointer(g_socket_send_message), 'g_socket_send_message'); LoadProc(Pointer(g_socket_send_to), 'g_socket_send_to'); LoadProc(Pointer(g_socket_send_with_blocking), 'g_socket_send_with_blocking'); LoadProc(Pointer(g_socket_service_get_type), 'g_socket_service_get_type'); LoadProc(Pointer(g_socket_service_is_active), 'g_socket_service_is_active'); LoadProc(Pointer(g_socket_service_new), 'g_socket_service_new'); LoadProc(Pointer(g_socket_service_start), 'g_socket_service_start'); LoadProc(Pointer(g_socket_service_stop), 'g_socket_service_stop'); LoadProc(Pointer(g_socket_set_blocking), 'g_socket_set_blocking'); LoadProc(Pointer(g_socket_set_broadcast), 'g_socket_set_broadcast'); LoadProc(Pointer(g_socket_set_keepalive), 'g_socket_set_keepalive'); LoadProc(Pointer(g_socket_set_listen_backlog), 'g_socket_set_listen_backlog'); LoadProc(Pointer(g_socket_set_multicast_loopback), 'g_socket_set_multicast_loopback'); LoadProc(Pointer(g_socket_set_multicast_ttl), 'g_socket_set_multicast_ttl'); LoadProc(Pointer(g_socket_set_option), 'g_socket_set_option'); LoadProc(Pointer(g_socket_set_timeout), 'g_socket_set_timeout'); LoadProc(Pointer(g_socket_set_ttl), 'g_socket_set_ttl'); LoadProc(Pointer(g_socket_shutdown), 'g_socket_shutdown'); LoadProc(Pointer(g_socket_speaks_ipv4), 'g_socket_speaks_ipv4'); LoadProc(Pointer(g_srv_target_copy), 'g_srv_target_copy'); LoadProc(Pointer(g_srv_target_free), 'g_srv_target_free'); LoadProc(Pointer(g_srv_target_get_hostname), 'g_srv_target_get_hostname'); LoadProc(Pointer(g_srv_target_get_port), 'g_srv_target_get_port'); LoadProc(Pointer(g_srv_target_get_priority), 'g_srv_target_get_priority'); LoadProc(Pointer(g_srv_target_get_type), 'g_srv_target_get_type'); LoadProc(Pointer(g_srv_target_get_weight), 'g_srv_target_get_weight'); LoadProc(Pointer(g_srv_target_list_sort), 'g_srv_target_list_sort'); LoadProc(Pointer(g_srv_target_new), 'g_srv_target_new'); LoadProc(Pointer(g_static_resource_fini), 'g_static_resource_fini'); LoadProc(Pointer(g_static_resource_get_resource), 'g_static_resource_get_resource'); LoadProc(Pointer(g_static_resource_init), 'g_static_resource_init'); LoadProc(Pointer(g_task_attach_source), 'g_task_attach_source'); LoadProc(Pointer(g_task_get_cancellable), 'g_task_get_cancellable'); LoadProc(Pointer(g_task_get_check_cancellable), 'g_task_get_check_cancellable'); LoadProc(Pointer(g_task_get_context), 'g_task_get_context'); LoadProc(Pointer(g_task_get_priority), 'g_task_get_priority'); LoadProc(Pointer(g_task_get_return_on_cancel), 'g_task_get_return_on_cancel'); LoadProc(Pointer(g_task_get_source_object), 'g_task_get_source_object'); LoadProc(Pointer(g_task_get_source_tag), 'g_task_get_source_tag'); LoadProc(Pointer(g_task_get_task_data), 'g_task_get_task_data'); LoadProc(Pointer(g_task_get_type), 'g_task_get_type'); LoadProc(Pointer(g_task_had_error), 'g_task_had_error'); LoadProc(Pointer(g_task_is_valid), 'g_task_is_valid'); LoadProc(Pointer(g_task_new), 'g_task_new'); LoadProc(Pointer(g_task_propagate_boolean), 'g_task_propagate_boolean'); LoadProc(Pointer(g_task_propagate_int), 'g_task_propagate_int'); LoadProc(Pointer(g_task_propagate_pointer), 'g_task_propagate_pointer'); LoadProc(Pointer(g_task_report_error), 'g_task_report_error'); LoadProc(Pointer(g_task_report_new_error), 'g_task_report_new_error'); LoadProc(Pointer(g_task_return_boolean), 'g_task_return_boolean'); LoadProc(Pointer(g_task_return_error), 'g_task_return_error'); LoadProc(Pointer(g_task_return_error_if_cancelled), 'g_task_return_error_if_cancelled'); LoadProc(Pointer(g_task_return_int), 'g_task_return_int'); LoadProc(Pointer(g_task_return_new_error), 'g_task_return_new_error'); LoadProc(Pointer(g_task_return_pointer), 'g_task_return_pointer'); LoadProc(Pointer(g_task_run_in_thread), 'g_task_run_in_thread'); LoadProc(Pointer(g_task_run_in_thread_sync), 'g_task_run_in_thread_sync'); LoadProc(Pointer(g_task_set_check_cancellable), 'g_task_set_check_cancellable'); LoadProc(Pointer(g_task_set_priority), 'g_task_set_priority'); LoadProc(Pointer(g_task_set_return_on_cancel), 'g_task_set_return_on_cancel'); LoadProc(Pointer(g_task_set_source_tag), 'g_task_set_source_tag'); LoadProc(Pointer(g_task_set_task_data), 'g_task_set_task_data'); LoadProc(Pointer(g_tcp_connection_get_graceful_disconnect), 'g_tcp_connection_get_graceful_disconnect'); LoadProc(Pointer(g_tcp_connection_get_type), 'g_tcp_connection_get_type'); LoadProc(Pointer(g_tcp_connection_set_graceful_disconnect), 'g_tcp_connection_set_graceful_disconnect'); LoadProc(Pointer(g_tcp_wrapper_connection_get_base_io_stream), 'g_tcp_wrapper_connection_get_base_io_stream'); LoadProc(Pointer(g_tcp_wrapper_connection_get_type), 'g_tcp_wrapper_connection_get_type'); LoadProc(Pointer(g_tcp_wrapper_connection_new), 'g_tcp_wrapper_connection_new'); LoadProc(Pointer(g_test_dbus_add_service_dir), 'g_test_dbus_add_service_dir'); LoadProc(Pointer(g_test_dbus_down), 'g_test_dbus_down'); LoadProc(Pointer(g_test_dbus_get_bus_address), 'g_test_dbus_get_bus_address'); LoadProc(Pointer(g_test_dbus_get_flags), 'g_test_dbus_get_flags'); LoadProc(Pointer(g_test_dbus_get_type), 'g_test_dbus_get_type'); LoadProc(Pointer(g_test_dbus_new), 'g_test_dbus_new'); LoadProc(Pointer(g_test_dbus_stop), 'g_test_dbus_stop'); LoadProc(Pointer(g_test_dbus_unset), 'g_test_dbus_unset'); LoadProc(Pointer(g_test_dbus_up), 'g_test_dbus_up'); LoadProc(Pointer(g_themed_icon_append_name), 'g_themed_icon_append_name'); LoadProc(Pointer(g_themed_icon_get_names), 'g_themed_icon_get_names'); LoadProc(Pointer(g_themed_icon_get_type), 'g_themed_icon_get_type'); LoadProc(Pointer(g_themed_icon_new), 'g_themed_icon_new'); LoadProc(Pointer(g_themed_icon_new_from_names), 'g_themed_icon_new_from_names'); LoadProc(Pointer(g_themed_icon_new_with_default_fallbacks), 'g_themed_icon_new_with_default_fallbacks'); LoadProc(Pointer(g_themed_icon_prepend_name), 'g_themed_icon_prepend_name'); LoadProc(Pointer(g_threaded_socket_service_get_type), 'g_threaded_socket_service_get_type'); LoadProc(Pointer(g_threaded_socket_service_new), 'g_threaded_socket_service_new'); LoadProc(Pointer(g_tls_backend_get_certificate_type), 'g_tls_backend_get_certificate_type'); LoadProc(Pointer(g_tls_backend_get_client_connection_type), 'g_tls_backend_get_client_connection_type'); LoadProc(Pointer(g_tls_backend_get_default), 'g_tls_backend_get_default'); LoadProc(Pointer(g_tls_backend_get_default_database), 'g_tls_backend_get_default_database'); LoadProc(Pointer(g_tls_backend_get_file_database_type), 'g_tls_backend_get_file_database_type'); LoadProc(Pointer(g_tls_backend_get_server_connection_type), 'g_tls_backend_get_server_connection_type'); LoadProc(Pointer(g_tls_backend_get_type), 'g_tls_backend_get_type'); LoadProc(Pointer(g_tls_backend_supports_tls), 'g_tls_backend_supports_tls'); LoadProc(Pointer(g_tls_certificate_get_issuer), 'g_tls_certificate_get_issuer'); LoadProc(Pointer(g_tls_certificate_get_type), 'g_tls_certificate_get_type'); LoadProc(Pointer(g_tls_certificate_is_same), 'g_tls_certificate_is_same'); LoadProc(Pointer(g_tls_certificate_list_new_from_file), 'g_tls_certificate_list_new_from_file'); LoadProc(Pointer(g_tls_certificate_new_from_file), 'g_tls_certificate_new_from_file'); LoadProc(Pointer(g_tls_certificate_new_from_files), 'g_tls_certificate_new_from_files'); LoadProc(Pointer(g_tls_certificate_new_from_pem), 'g_tls_certificate_new_from_pem'); LoadProc(Pointer(g_tls_certificate_verify), 'g_tls_certificate_verify'); LoadProc(Pointer(g_tls_client_connection_get_accepted_cas), 'g_tls_client_connection_get_accepted_cas'); LoadProc(Pointer(g_tls_client_connection_get_server_identity), 'g_tls_client_connection_get_server_identity'); LoadProc(Pointer(g_tls_client_connection_get_type), 'g_tls_client_connection_get_type'); LoadProc(Pointer(g_tls_client_connection_get_use_ssl3), 'g_tls_client_connection_get_use_ssl3'); LoadProc(Pointer(g_tls_client_connection_get_validation_flags), 'g_tls_client_connection_get_validation_flags'); LoadProc(Pointer(g_tls_client_connection_new), 'g_tls_client_connection_new'); LoadProc(Pointer(g_tls_client_connection_set_server_identity), 'g_tls_client_connection_set_server_identity'); LoadProc(Pointer(g_tls_client_connection_set_use_ssl3), 'g_tls_client_connection_set_use_ssl3'); LoadProc(Pointer(g_tls_client_connection_set_validation_flags), 'g_tls_client_connection_set_validation_flags'); LoadProc(Pointer(g_tls_connection_emit_accept_certificate), 'g_tls_connection_emit_accept_certificate'); LoadProc(Pointer(g_tls_connection_get_certificate), 'g_tls_connection_get_certificate'); LoadProc(Pointer(g_tls_connection_get_database), 'g_tls_connection_get_database'); LoadProc(Pointer(g_tls_connection_get_interaction), 'g_tls_connection_get_interaction'); LoadProc(Pointer(g_tls_connection_get_peer_certificate), 'g_tls_connection_get_peer_certificate'); LoadProc(Pointer(g_tls_connection_get_peer_certificate_errors), 'g_tls_connection_get_peer_certificate_errors'); LoadProc(Pointer(g_tls_connection_get_rehandshake_mode), 'g_tls_connection_get_rehandshake_mode'); LoadProc(Pointer(g_tls_connection_get_require_close_notify), 'g_tls_connection_get_require_close_notify'); LoadProc(Pointer(g_tls_connection_get_type), 'g_tls_connection_get_type'); LoadProc(Pointer(g_tls_connection_handshake), 'g_tls_connection_handshake'); LoadProc(Pointer(g_tls_connection_handshake_async), 'g_tls_connection_handshake_async'); LoadProc(Pointer(g_tls_connection_handshake_finish), 'g_tls_connection_handshake_finish'); LoadProc(Pointer(g_tls_connection_set_certificate), 'g_tls_connection_set_certificate'); LoadProc(Pointer(g_tls_connection_set_database), 'g_tls_connection_set_database'); LoadProc(Pointer(g_tls_connection_set_interaction), 'g_tls_connection_set_interaction'); LoadProc(Pointer(g_tls_connection_set_rehandshake_mode), 'g_tls_connection_set_rehandshake_mode'); LoadProc(Pointer(g_tls_connection_set_require_close_notify), 'g_tls_connection_set_require_close_notify'); LoadProc(Pointer(g_tls_database_create_certificate_handle), 'g_tls_database_create_certificate_handle'); LoadProc(Pointer(g_tls_database_get_type), 'g_tls_database_get_type'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle), 'g_tls_database_lookup_certificate_for_handle'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle_async), 'g_tls_database_lookup_certificate_for_handle_async'); LoadProc(Pointer(g_tls_database_lookup_certificate_for_handle_finish), 'g_tls_database_lookup_certificate_for_handle_finish'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer), 'g_tls_database_lookup_certificate_issuer'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer_async), 'g_tls_database_lookup_certificate_issuer_async'); LoadProc(Pointer(g_tls_database_lookup_certificate_issuer_finish), 'g_tls_database_lookup_certificate_issuer_finish'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by), 'g_tls_database_lookup_certificates_issued_by'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by_async), 'g_tls_database_lookup_certificates_issued_by_async'); LoadProc(Pointer(g_tls_database_lookup_certificates_issued_by_finish), 'g_tls_database_lookup_certificates_issued_by_finish'); LoadProc(Pointer(g_tls_database_verify_chain), 'g_tls_database_verify_chain'); LoadProc(Pointer(g_tls_database_verify_chain_async), 'g_tls_database_verify_chain_async'); LoadProc(Pointer(g_tls_database_verify_chain_finish), 'g_tls_database_verify_chain_finish'); LoadProc(Pointer(g_tls_error_quark), 'g_tls_error_quark'); LoadProc(Pointer(g_tls_file_database_get_type), 'g_tls_file_database_get_type'); LoadProc(Pointer(g_tls_file_database_new), 'g_tls_file_database_new'); LoadProc(Pointer(g_tls_interaction_ask_password), 'g_tls_interaction_ask_password'); LoadProc(Pointer(g_tls_interaction_ask_password_async), 'g_tls_interaction_ask_password_async'); LoadProc(Pointer(g_tls_interaction_ask_password_finish), 'g_tls_interaction_ask_password_finish'); LoadProc(Pointer(g_tls_interaction_get_type), 'g_tls_interaction_get_type'); LoadProc(Pointer(g_tls_interaction_invoke_ask_password), 'g_tls_interaction_invoke_ask_password'); LoadProc(Pointer(g_tls_password_get_description), 'g_tls_password_get_description'); LoadProc(Pointer(g_tls_password_get_flags), 'g_tls_password_get_flags'); LoadProc(Pointer(g_tls_password_get_type), 'g_tls_password_get_type'); LoadProc(Pointer(g_tls_password_get_value), 'g_tls_password_get_value'); LoadProc(Pointer(g_tls_password_get_warning), 'g_tls_password_get_warning'); LoadProc(Pointer(g_tls_password_new), 'g_tls_password_new'); LoadProc(Pointer(g_tls_password_set_description), 'g_tls_password_set_description'); LoadProc(Pointer(g_tls_password_set_flags), 'g_tls_password_set_flags'); LoadProc(Pointer(g_tls_password_set_value), 'g_tls_password_set_value'); LoadProc(Pointer(g_tls_password_set_value_full), 'g_tls_password_set_value_full'); LoadProc(Pointer(g_tls_password_set_warning), 'g_tls_password_set_warning'); LoadProc(Pointer(g_tls_server_connection_get_type), 'g_tls_server_connection_get_type'); LoadProc(Pointer(g_tls_server_connection_new), 'g_tls_server_connection_new'); LoadProc(Pointer(g_unix_connection_get_type), 'g_unix_connection_get_type'); LoadProc(Pointer(g_unix_connection_receive_credentials), 'g_unix_connection_receive_credentials'); LoadProc(Pointer(g_unix_connection_receive_credentials_async), 'g_unix_connection_receive_credentials_async'); LoadProc(Pointer(g_unix_connection_receive_credentials_finish), 'g_unix_connection_receive_credentials_finish'); LoadProc(Pointer(g_unix_connection_receive_fd), 'g_unix_connection_receive_fd'); LoadProc(Pointer(g_unix_connection_send_credentials), 'g_unix_connection_send_credentials'); LoadProc(Pointer(g_unix_connection_send_credentials_async), 'g_unix_connection_send_credentials_async'); LoadProc(Pointer(g_unix_connection_send_credentials_finish), 'g_unix_connection_send_credentials_finish'); LoadProc(Pointer(g_unix_connection_send_fd), 'g_unix_connection_send_fd'); LoadProc(Pointer(g_unix_credentials_message_get_credentials), 'g_unix_credentials_message_get_credentials'); LoadProc(Pointer(g_unix_credentials_message_get_type), 'g_unix_credentials_message_get_type'); LoadProc(Pointer(g_unix_credentials_message_is_supported), 'g_unix_credentials_message_is_supported'); LoadProc(Pointer(g_unix_credentials_message_new), 'g_unix_credentials_message_new'); LoadProc(Pointer(g_unix_credentials_message_new_with_credentials), 'g_unix_credentials_message_new_with_credentials'); LoadProc(Pointer(g_unix_fd_list_append), 'g_unix_fd_list_append'); LoadProc(Pointer(g_unix_fd_list_get), 'g_unix_fd_list_get'); LoadProc(Pointer(g_unix_fd_list_get_length), 'g_unix_fd_list_get_length'); LoadProc(Pointer(g_unix_fd_list_get_type), 'g_unix_fd_list_get_type'); LoadProc(Pointer(g_unix_fd_list_new), 'g_unix_fd_list_new'); LoadProc(Pointer(g_unix_fd_list_new_from_array), 'g_unix_fd_list_new_from_array'); LoadProc(Pointer(g_unix_fd_list_peek_fds), 'g_unix_fd_list_peek_fds'); LoadProc(Pointer(g_unix_fd_list_steal_fds), 'g_unix_fd_list_steal_fds'); LoadProc(Pointer(g_unix_fd_message_append_fd), 'g_unix_fd_message_append_fd'); LoadProc(Pointer(g_unix_fd_message_get_fd_list), 'g_unix_fd_message_get_fd_list'); LoadProc(Pointer(g_unix_fd_message_get_type), 'g_unix_fd_message_get_type'); LoadProc(Pointer(g_unix_fd_message_new), 'g_unix_fd_message_new'); LoadProc(Pointer(g_unix_fd_message_new_with_fd_list), 'g_unix_fd_message_new_with_fd_list'); LoadProc(Pointer(g_unix_fd_message_steal_fds), 'g_unix_fd_message_steal_fds'); LoadProc(Pointer(g_unix_input_stream_get_close_fd), 'g_unix_input_stream_get_close_fd'); LoadProc(Pointer(g_unix_input_stream_get_fd), 'g_unix_input_stream_get_fd'); LoadProc(Pointer(g_unix_input_stream_get_type), 'g_unix_input_stream_get_type'); LoadProc(Pointer(g_unix_input_stream_new), 'g_unix_input_stream_new'); LoadProc(Pointer(g_unix_input_stream_set_close_fd), 'g_unix_input_stream_set_close_fd'); LoadProc(Pointer(g_unix_is_mount_path_system_internal), 'g_unix_is_mount_path_system_internal'); LoadProc(Pointer(g_unix_mount_at), 'g_unix_mount_at'); LoadProc(Pointer(g_unix_mount_compare), 'g_unix_mount_compare'); LoadProc(Pointer(g_unix_mount_free), 'g_unix_mount_free'); LoadProc(Pointer(g_unix_mount_get_device_path), 'g_unix_mount_get_device_path'); LoadProc(Pointer(g_unix_mount_get_fs_type), 'g_unix_mount_get_fs_type'); LoadProc(Pointer(g_unix_mount_get_mount_path), 'g_unix_mount_get_mount_path'); LoadProc(Pointer(g_unix_mount_guess_can_eject), 'g_unix_mount_guess_can_eject'); LoadProc(Pointer(g_unix_mount_guess_icon), 'g_unix_mount_guess_icon'); LoadProc(Pointer(g_unix_mount_guess_name), 'g_unix_mount_guess_name'); LoadProc(Pointer(g_unix_mount_guess_should_display), 'g_unix_mount_guess_should_display'); LoadProc(Pointer(g_unix_mount_guess_symbolic_icon), 'g_unix_mount_guess_symbolic_icon'); LoadProc(Pointer(g_unix_mount_is_readonly), 'g_unix_mount_is_readonly'); LoadProc(Pointer(g_unix_mount_is_system_internal), 'g_unix_mount_is_system_internal'); LoadProc(Pointer(g_unix_mount_monitor_get_type), 'g_unix_mount_monitor_get_type'); LoadProc(Pointer(g_unix_mount_monitor_new), 'g_unix_mount_monitor_new'); LoadProc(Pointer(g_unix_mount_monitor_set_rate_limit), 'g_unix_mount_monitor_set_rate_limit'); LoadProc(Pointer(g_unix_mount_point_compare), 'g_unix_mount_point_compare'); LoadProc(Pointer(g_unix_mount_point_free), 'g_unix_mount_point_free'); LoadProc(Pointer(g_unix_mount_point_get_device_path), 'g_unix_mount_point_get_device_path'); LoadProc(Pointer(g_unix_mount_point_get_fs_type), 'g_unix_mount_point_get_fs_type'); LoadProc(Pointer(g_unix_mount_point_get_mount_path), 'g_unix_mount_point_get_mount_path'); LoadProc(Pointer(g_unix_mount_point_get_options), 'g_unix_mount_point_get_options'); LoadProc(Pointer(g_unix_mount_point_guess_can_eject), 'g_unix_mount_point_guess_can_eject'); LoadProc(Pointer(g_unix_mount_point_guess_icon), 'g_unix_mount_point_guess_icon'); LoadProc(Pointer(g_unix_mount_point_guess_name), 'g_unix_mount_point_guess_name'); LoadProc(Pointer(g_unix_mount_point_guess_symbolic_icon), 'g_unix_mount_point_guess_symbolic_icon'); LoadProc(Pointer(g_unix_mount_point_is_loopback), 'g_unix_mount_point_is_loopback'); LoadProc(Pointer(g_unix_mount_point_is_readonly), 'g_unix_mount_point_is_readonly'); LoadProc(Pointer(g_unix_mount_point_is_user_mountable), 'g_unix_mount_point_is_user_mountable'); LoadProc(Pointer(g_unix_mount_points_changed_since), 'g_unix_mount_points_changed_since'); LoadProc(Pointer(g_unix_mount_points_get), 'g_unix_mount_points_get'); LoadProc(Pointer(g_unix_mounts_changed_since), 'g_unix_mounts_changed_since'); LoadProc(Pointer(g_unix_mounts_get), 'g_unix_mounts_get'); LoadProc(Pointer(g_unix_output_stream_get_close_fd), 'g_unix_output_stream_get_close_fd'); LoadProc(Pointer(g_unix_output_stream_get_fd), 'g_unix_output_stream_get_fd'); LoadProc(Pointer(g_unix_output_stream_get_type), 'g_unix_output_stream_get_type'); LoadProc(Pointer(g_unix_output_stream_new), 'g_unix_output_stream_new'); LoadProc(Pointer(g_unix_output_stream_set_close_fd), 'g_unix_output_stream_set_close_fd'); LoadProc(Pointer(g_unix_socket_address_abstract_names_supported), 'g_unix_socket_address_abstract_names_supported'); LoadProc(Pointer(g_unix_socket_address_get_address_type), 'g_unix_socket_address_get_address_type'); LoadProc(Pointer(g_unix_socket_address_get_path), 'g_unix_socket_address_get_path'); LoadProc(Pointer(g_unix_socket_address_get_path_len), 'g_unix_socket_address_get_path_len'); LoadProc(Pointer(g_unix_socket_address_get_type), 'g_unix_socket_address_get_type'); LoadProc(Pointer(g_unix_socket_address_new), 'g_unix_socket_address_new'); LoadProc(Pointer(g_unix_socket_address_new_with_type), 'g_unix_socket_address_new_with_type'); LoadProc(Pointer(g_vfs_get_default), 'g_vfs_get_default'); LoadProc(Pointer(g_vfs_get_file_for_path), 'g_vfs_get_file_for_path'); LoadProc(Pointer(g_vfs_get_file_for_uri), 'g_vfs_get_file_for_uri'); LoadProc(Pointer(g_vfs_get_local), 'g_vfs_get_local'); LoadProc(Pointer(g_vfs_get_supported_uri_schemes), 'g_vfs_get_supported_uri_schemes'); LoadProc(Pointer(g_vfs_get_type), 'g_vfs_get_type'); LoadProc(Pointer(g_vfs_is_active), 'g_vfs_is_active'); LoadProc(Pointer(g_vfs_parse_name), 'g_vfs_parse_name'); LoadProc(Pointer(g_volume_can_eject), 'g_volume_can_eject'); LoadProc(Pointer(g_volume_can_mount), 'g_volume_can_mount'); LoadProc(Pointer(g_volume_eject_with_operation), 'g_volume_eject_with_operation'); LoadProc(Pointer(g_volume_eject_with_operation_finish), 'g_volume_eject_with_operation_finish'); LoadProc(Pointer(g_volume_enumerate_identifiers), 'g_volume_enumerate_identifiers'); LoadProc(Pointer(g_volume_get_activation_root), 'g_volume_get_activation_root'); LoadProc(Pointer(g_volume_get_drive), 'g_volume_get_drive'); LoadProc(Pointer(g_volume_get_icon), 'g_volume_get_icon'); LoadProc(Pointer(g_volume_get_identifier), 'g_volume_get_identifier'); LoadProc(Pointer(g_volume_get_mount), 'g_volume_get_mount'); LoadProc(Pointer(g_volume_get_name), 'g_volume_get_name'); LoadProc(Pointer(g_volume_get_sort_key), 'g_volume_get_sort_key'); LoadProc(Pointer(g_volume_get_symbolic_icon), 'g_volume_get_symbolic_icon'); LoadProc(Pointer(g_volume_get_type), 'g_volume_get_type'); LoadProc(Pointer(g_volume_get_uuid), 'g_volume_get_uuid'); LoadProc(Pointer(g_volume_monitor_get), 'g_volume_monitor_get'); LoadProc(Pointer(g_volume_monitor_get_connected_drives), 'g_volume_monitor_get_connected_drives'); LoadProc(Pointer(g_volume_monitor_get_mount_for_uuid), 'g_volume_monitor_get_mount_for_uuid'); LoadProc(Pointer(g_volume_monitor_get_mounts), 'g_volume_monitor_get_mounts'); LoadProc(Pointer(g_volume_monitor_get_type), 'g_volume_monitor_get_type'); LoadProc(Pointer(g_volume_monitor_get_volume_for_uuid), 'g_volume_monitor_get_volume_for_uuid'); LoadProc(Pointer(g_volume_monitor_get_volumes), 'g_volume_monitor_get_volumes'); LoadProc(Pointer(g_volume_mount), 'g_volume_mount'); LoadProc(Pointer(g_volume_mount_finish), 'g_volume_mount_finish'); LoadProc(Pointer(g_volume_should_automount), 'g_volume_should_automount'); LoadProc(Pointer(g_zlib_compressor_get_file_info), 'g_zlib_compressor_get_file_info'); LoadProc(Pointer(g_zlib_compressor_get_type), 'g_zlib_compressor_get_type'); LoadProc(Pointer(g_zlib_compressor_new), 'g_zlib_compressor_new'); LoadProc(Pointer(g_zlib_compressor_set_file_info), 'g_zlib_compressor_set_file_info'); LoadProc(Pointer(g_zlib_decompressor_get_file_info), 'g_zlib_decompressor_get_file_info'); LoadProc(Pointer(g_zlib_decompressor_get_type), 'g_zlib_decompressor_get_type'); LoadProc(Pointer(g_zlib_decompressor_new), 'g_zlib_decompressor_new'); end; procedure UnloadLibraries; begin if libgio_2_0_so_0 <> 0 then UnloadLibrary(libgio_2_0_so_0); libgio_2_0_so_0 := 0; g_action_activate := nil; g_action_change_state := nil; g_action_get_enabled := nil; g_action_get_name := nil; g_action_get_parameter_type := nil; g_action_get_state := nil; g_action_get_state_hint := nil; g_action_get_state_type := nil; g_action_get_type := nil; g_action_group_action_added := nil; g_action_group_action_enabled_changed := nil; g_action_group_action_removed := nil; g_action_group_action_state_changed := nil; g_action_group_activate_action := nil; g_action_group_change_action_state := nil; g_action_group_get_action_enabled := nil; g_action_group_get_action_parameter_type := nil; g_action_group_get_action_state := nil; g_action_group_get_action_state_hint := nil; g_action_group_get_action_state_type := nil; g_action_group_get_type := nil; g_action_group_has_action := nil; g_action_group_list_actions := nil; g_action_group_query_action := nil; g_action_map_add_action := nil; g_action_map_add_action_entries := nil; g_action_map_get_type := nil; g_action_map_lookup_action := nil; g_action_map_remove_action := nil; g_app_info_add_supports_type := nil; g_app_info_can_delete := nil; g_app_info_can_remove_supports_type := nil; g_app_info_create_from_commandline := nil; g_app_info_delete := nil; g_app_info_dup := nil; g_app_info_equal := nil; g_app_info_get_all := nil; g_app_info_get_all_for_type := nil; g_app_info_get_commandline := nil; g_app_info_get_default_for_type := nil; g_app_info_get_default_for_uri_scheme := nil; g_app_info_get_description := nil; g_app_info_get_display_name := nil; g_app_info_get_executable := nil; g_app_info_get_fallback_for_type := nil; g_app_info_get_icon := nil; g_app_info_get_id := nil; g_app_info_get_name := nil; g_app_info_get_recommended_for_type := nil; g_app_info_get_supported_types := nil; g_app_info_get_type := nil; g_app_info_launch := nil; g_app_info_launch_default_for_uri := nil; g_app_info_launch_uris := nil; g_app_info_remove_supports_type := nil; g_app_info_reset_type_associations := nil; g_app_info_set_as_default_for_extension := nil; g_app_info_set_as_default_for_type := nil; g_app_info_set_as_last_used_for_type := nil; g_app_info_should_show := nil; g_app_info_supports_files := nil; g_app_info_supports_uris := nil; g_app_launch_context_get_display := nil; g_app_launch_context_get_environment := nil; g_app_launch_context_get_startup_notify_id := nil; g_app_launch_context_get_type := nil; g_app_launch_context_launch_failed := nil; g_app_launch_context_new := nil; g_app_launch_context_setenv := nil; g_app_launch_context_unsetenv := nil; g_application_activate := nil; g_application_command_line_create_file_for_arg := nil; g_application_command_line_get_arguments := nil; g_application_command_line_get_cwd := nil; g_application_command_line_get_environ := nil; g_application_command_line_get_exit_status := nil; g_application_command_line_get_is_remote := nil; g_application_command_line_get_platform_data := nil; g_application_command_line_get_stdin := nil; g_application_command_line_get_type := nil; g_application_command_line_getenv := nil; g_application_command_line_print := nil; g_application_command_line_printerr := nil; g_application_command_line_set_exit_status := nil; g_application_get_application_id := nil; g_application_get_dbus_connection := nil; g_application_get_dbus_object_path := nil; g_application_get_default := nil; g_application_get_flags := nil; g_application_get_inactivity_timeout := nil; g_application_get_is_registered := nil; g_application_get_is_remote := nil; g_application_get_type := nil; g_application_hold := nil; g_application_id_is_valid := nil; g_application_new := nil; g_application_open := nil; g_application_quit := nil; g_application_register := nil; g_application_release := nil; g_application_run := nil; g_application_set_application_id := nil; g_application_set_default := nil; g_application_set_flags := nil; g_application_set_inactivity_timeout := nil; g_async_initable_get_type := nil; g_async_initable_init_async := nil; g_async_initable_init_finish := nil; g_async_initable_new_async := nil; g_async_initable_new_finish := nil; g_async_initable_new_valist_async := nil; g_async_initable_newv_async := nil; g_async_result_get_source_object := nil; g_async_result_get_type := nil; g_async_result_get_user_data := nil; g_async_result_is_tagged := nil; g_async_result_legacy_propagate_error := nil; g_buffered_input_stream_fill := nil; g_buffered_input_stream_fill_async := nil; g_buffered_input_stream_fill_finish := nil; g_buffered_input_stream_get_available := nil; g_buffered_input_stream_get_buffer_size := nil; g_buffered_input_stream_get_type := nil; g_buffered_input_stream_new := nil; g_buffered_input_stream_new_sized := nil; g_buffered_input_stream_peek := nil; g_buffered_input_stream_peek_buffer := nil; g_buffered_input_stream_read_byte := nil; g_buffered_input_stream_set_buffer_size := nil; g_buffered_output_stream_get_auto_grow := nil; g_buffered_output_stream_get_buffer_size := nil; g_buffered_output_stream_get_type := nil; g_buffered_output_stream_new := nil; g_buffered_output_stream_new_sized := nil; g_buffered_output_stream_set_auto_grow := nil; g_buffered_output_stream_set_buffer_size := nil; g_bus_get := nil; g_bus_get_finish := nil; g_bus_get_sync := nil; g_bus_own_name := nil; g_bus_own_name_on_connection := nil; g_bus_own_name_on_connection_with_closures := nil; g_bus_own_name_with_closures := nil; g_bus_unown_name := nil; g_bus_unwatch_name := nil; g_bus_watch_name := nil; g_bus_watch_name_on_connection := nil; g_bus_watch_name_on_connection_with_closures := nil; g_bus_watch_name_with_closures := nil; g_cancellable_cancel := nil; g_cancellable_connect := nil; g_cancellable_disconnect := nil; g_cancellable_get_current := nil; g_cancellable_get_fd := nil; g_cancellable_get_type := nil; g_cancellable_is_cancelled := nil; g_cancellable_make_pollfd := nil; g_cancellable_new := nil; g_cancellable_pop_current := nil; g_cancellable_push_current := nil; g_cancellable_release_fd := nil; g_cancellable_reset := nil; g_cancellable_set_error_if_cancelled := nil; g_cancellable_source_new := nil; g_charset_converter_get_num_fallbacks := nil; g_charset_converter_get_type := nil; g_charset_converter_get_use_fallback := nil; g_charset_converter_new := nil; g_charset_converter_set_use_fallback := nil; g_content_type_can_be_executable := nil; g_content_type_equals := nil; g_content_type_from_mime_type := nil; g_content_type_get_description := nil; g_content_type_get_generic_icon_name := nil; g_content_type_get_icon := nil; g_content_type_get_mime_type := nil; g_content_type_get_symbolic_icon := nil; g_content_type_guess := nil; g_content_type_guess_for_tree := nil; g_content_type_is_a := nil; g_content_type_is_unknown := nil; g_content_types_get_registered := nil; g_converter_convert := nil; g_converter_get_type := nil; g_converter_input_stream_get_converter := nil; g_converter_input_stream_get_type := nil; g_converter_input_stream_new := nil; g_converter_output_stream_get_converter := nil; g_converter_output_stream_get_type := nil; g_converter_output_stream_new := nil; g_converter_reset := nil; g_credentials_get_native := nil; g_credentials_get_type := nil; g_credentials_get_unix_pid := nil; g_credentials_get_unix_user := nil; g_credentials_is_same_user := nil; g_credentials_new := nil; g_credentials_set_native := nil; g_credentials_set_unix_user := nil; g_credentials_to_string := nil; g_data_input_stream_get_byte_order := nil; g_data_input_stream_get_newline_type := nil; g_data_input_stream_get_type := nil; g_data_input_stream_new := nil; g_data_input_stream_read_byte := nil; g_data_input_stream_read_int16 := nil; g_data_input_stream_read_int32 := nil; g_data_input_stream_read_int64 := nil; g_data_input_stream_read_line := nil; g_data_input_stream_read_line_async := nil; g_data_input_stream_read_line_finish := nil; g_data_input_stream_read_line_finish_utf8 := nil; g_data_input_stream_read_line_utf8 := nil; g_data_input_stream_read_uint16 := nil; g_data_input_stream_read_uint32 := nil; g_data_input_stream_read_uint64 := nil; g_data_input_stream_read_until := nil; g_data_input_stream_read_until_async := nil; g_data_input_stream_read_until_finish := nil; g_data_input_stream_read_upto := nil; g_data_input_stream_read_upto_async := nil; g_data_input_stream_read_upto_finish := nil; g_data_input_stream_set_byte_order := nil; g_data_input_stream_set_newline_type := nil; g_data_output_stream_get_byte_order := nil; g_data_output_stream_get_type := nil; g_data_output_stream_new := nil; g_data_output_stream_put_byte := nil; g_data_output_stream_put_int16 := nil; g_data_output_stream_put_int32 := nil; g_data_output_stream_put_int64 := nil; g_data_output_stream_put_string := nil; g_data_output_stream_put_uint16 := nil; g_data_output_stream_put_uint32 := nil; g_data_output_stream_put_uint64 := nil; g_data_output_stream_set_byte_order := nil; g_dbus_action_group_get := nil; g_dbus_action_group_get_type := nil; g_dbus_address_escape_value := nil; g_dbus_address_get_for_bus_sync := nil; g_dbus_address_get_stream := nil; g_dbus_address_get_stream_finish := nil; g_dbus_address_get_stream_sync := nil; g_dbus_annotation_info_get_type := nil; g_dbus_annotation_info_lookup := nil; g_dbus_annotation_info_ref := nil; g_dbus_annotation_info_unref := nil; g_dbus_arg_info_get_type := nil; g_dbus_arg_info_ref := nil; g_dbus_arg_info_unref := nil; g_dbus_auth_observer_allow_mechanism := nil; g_dbus_auth_observer_authorize_authenticated_peer := nil; g_dbus_auth_observer_get_type := nil; g_dbus_auth_observer_new := nil; g_dbus_connection_add_filter := nil; g_dbus_connection_call := nil; g_dbus_connection_call_finish := nil; g_dbus_connection_call_sync := nil; g_dbus_connection_call_with_unix_fd_list := nil; g_dbus_connection_call_with_unix_fd_list_finish := nil; g_dbus_connection_call_with_unix_fd_list_sync := nil; g_dbus_connection_close := nil; g_dbus_connection_close_finish := nil; g_dbus_connection_close_sync := nil; g_dbus_connection_emit_signal := nil; g_dbus_connection_export_action_group := nil; g_dbus_connection_export_menu_model := nil; g_dbus_connection_flush := nil; g_dbus_connection_flush_finish := nil; g_dbus_connection_flush_sync := nil; g_dbus_connection_get_capabilities := nil; g_dbus_connection_get_exit_on_close := nil; g_dbus_connection_get_guid := nil; g_dbus_connection_get_last_serial := nil; g_dbus_connection_get_peer_credentials := nil; g_dbus_connection_get_stream := nil; g_dbus_connection_get_type := nil; g_dbus_connection_get_unique_name := nil; g_dbus_connection_is_closed := nil; g_dbus_connection_new := nil; g_dbus_connection_new_finish := nil; g_dbus_connection_new_for_address := nil; g_dbus_connection_new_for_address_finish := nil; g_dbus_connection_new_for_address_sync := nil; g_dbus_connection_new_sync := nil; g_dbus_connection_register_object := nil; g_dbus_connection_register_subtree := nil; g_dbus_connection_remove_filter := nil; g_dbus_connection_send_message := nil; g_dbus_connection_send_message_with_reply := nil; g_dbus_connection_send_message_with_reply_finish := nil; g_dbus_connection_send_message_with_reply_sync := nil; g_dbus_connection_set_exit_on_close := nil; g_dbus_connection_signal_subscribe := nil; g_dbus_connection_signal_unsubscribe := nil; g_dbus_connection_start_message_processing := nil; g_dbus_connection_unexport_action_group := nil; g_dbus_connection_unexport_menu_model := nil; g_dbus_connection_unregister_object := nil; g_dbus_connection_unregister_subtree := nil; g_dbus_error_encode_gerror := nil; g_dbus_error_get_remote_error := nil; g_dbus_error_is_remote_error := nil; g_dbus_error_new_for_dbus_error := nil; g_dbus_error_quark := nil; g_dbus_error_register_error := nil; g_dbus_error_register_error_domain := nil; g_dbus_error_set_dbus_error := nil; g_dbus_error_set_dbus_error_valist := nil; g_dbus_error_strip_remote_error := nil; g_dbus_error_unregister_error := nil; g_dbus_generate_guid := nil; g_dbus_gvalue_to_gvariant := nil; g_dbus_gvariant_to_gvalue := nil; g_dbus_interface_dup_object := nil; g_dbus_interface_get_info := nil; g_dbus_interface_get_object := nil; g_dbus_interface_get_type := nil; g_dbus_interface_info_cache_build := nil; g_dbus_interface_info_cache_release := nil; g_dbus_interface_info_generate_xml := nil; g_dbus_interface_info_get_type := nil; g_dbus_interface_info_lookup_method := nil; g_dbus_interface_info_lookup_property := nil; g_dbus_interface_info_lookup_signal := nil; g_dbus_interface_info_ref := nil; g_dbus_interface_info_unref := nil; g_dbus_interface_set_object := nil; g_dbus_interface_skeleton_export := nil; g_dbus_interface_skeleton_flush := nil; g_dbus_interface_skeleton_get_connection := nil; g_dbus_interface_skeleton_get_connections := nil; g_dbus_interface_skeleton_get_flags := nil; g_dbus_interface_skeleton_get_info := nil; g_dbus_interface_skeleton_get_object_path := nil; g_dbus_interface_skeleton_get_properties := nil; g_dbus_interface_skeleton_get_type := nil; g_dbus_interface_skeleton_get_vtable := nil; g_dbus_interface_skeleton_has_connection := nil; g_dbus_interface_skeleton_set_flags := nil; g_dbus_interface_skeleton_unexport := nil; g_dbus_interface_skeleton_unexport_from_connection := nil; g_dbus_is_address := nil; g_dbus_is_guid := nil; g_dbus_is_interface_name := nil; g_dbus_is_member_name := nil; g_dbus_is_name := nil; g_dbus_is_supported_address := nil; g_dbus_is_unique_name := nil; g_dbus_menu_model_get := nil; g_dbus_menu_model_get_type := nil; g_dbus_message_bytes_needed := nil; g_dbus_message_copy := nil; g_dbus_message_get_arg0 := nil; g_dbus_message_get_body := nil; g_dbus_message_get_byte_order := nil; g_dbus_message_get_destination := nil; g_dbus_message_get_error_name := nil; g_dbus_message_get_flags := nil; g_dbus_message_get_header := nil; g_dbus_message_get_header_fields := nil; g_dbus_message_get_interface := nil; g_dbus_message_get_locked := nil; g_dbus_message_get_member := nil; g_dbus_message_get_message_type := nil; g_dbus_message_get_num_unix_fds := nil; g_dbus_message_get_path := nil; g_dbus_message_get_reply_serial := nil; g_dbus_message_get_sender := nil; g_dbus_message_get_serial := nil; g_dbus_message_get_signature := nil; g_dbus_message_get_type := nil; g_dbus_message_get_unix_fd_list := nil; g_dbus_message_lock := nil; g_dbus_message_new := nil; g_dbus_message_new_from_blob := nil; g_dbus_message_new_method_call := nil; g_dbus_message_new_method_error := nil; g_dbus_message_new_method_error_literal := nil; g_dbus_message_new_method_error_valist := nil; g_dbus_message_new_method_reply := nil; g_dbus_message_new_signal := nil; g_dbus_message_print := nil; g_dbus_message_set_body := nil; g_dbus_message_set_byte_order := nil; g_dbus_message_set_destination := nil; g_dbus_message_set_error_name := nil; g_dbus_message_set_flags := nil; g_dbus_message_set_header := nil; g_dbus_message_set_interface := nil; g_dbus_message_set_member := nil; g_dbus_message_set_message_type := nil; g_dbus_message_set_num_unix_fds := nil; g_dbus_message_set_path := nil; g_dbus_message_set_reply_serial := nil; g_dbus_message_set_sender := nil; g_dbus_message_set_serial := nil; g_dbus_message_set_signature := nil; g_dbus_message_set_unix_fd_list := nil; g_dbus_message_to_blob := nil; g_dbus_message_to_gerror := nil; g_dbus_method_info_get_type := nil; g_dbus_method_info_ref := nil; g_dbus_method_info_unref := nil; g_dbus_method_invocation_get_connection := nil; g_dbus_method_invocation_get_interface_name := nil; g_dbus_method_invocation_get_message := nil; g_dbus_method_invocation_get_method_info := nil; g_dbus_method_invocation_get_method_name := nil; g_dbus_method_invocation_get_object_path := nil; g_dbus_method_invocation_get_parameters := nil; g_dbus_method_invocation_get_sender := nil; g_dbus_method_invocation_get_type := nil; g_dbus_method_invocation_get_user_data := nil; g_dbus_method_invocation_return_dbus_error := nil; g_dbus_method_invocation_return_error := nil; g_dbus_method_invocation_return_error_literal := nil; g_dbus_method_invocation_return_error_valist := nil; g_dbus_method_invocation_return_gerror := nil; g_dbus_method_invocation_return_value := nil; g_dbus_method_invocation_return_value_with_unix_fd_list := nil; g_dbus_method_invocation_take_error := nil; g_dbus_node_info_generate_xml := nil; g_dbus_node_info_get_type := nil; g_dbus_node_info_lookup_interface := nil; g_dbus_node_info_new_for_xml := nil; g_dbus_node_info_ref := nil; g_dbus_node_info_unref := nil; g_dbus_object_get_interface := nil; g_dbus_object_get_interfaces := nil; g_dbus_object_get_object_path := nil; g_dbus_object_get_type := nil; g_dbus_object_manager_client_get_connection := nil; g_dbus_object_manager_client_get_flags := nil; g_dbus_object_manager_client_get_name := nil; g_dbus_object_manager_client_get_name_owner := nil; g_dbus_object_manager_client_get_type := nil; g_dbus_object_manager_client_new := nil; g_dbus_object_manager_client_new_finish := nil; g_dbus_object_manager_client_new_for_bus := nil; g_dbus_object_manager_client_new_for_bus_finish := nil; g_dbus_object_manager_client_new_for_bus_sync := nil; g_dbus_object_manager_client_new_sync := nil; g_dbus_object_manager_get_interface := nil; g_dbus_object_manager_get_object := nil; g_dbus_object_manager_get_object_path := nil; g_dbus_object_manager_get_objects := nil; g_dbus_object_manager_get_type := nil; g_dbus_object_manager_server_export := nil; g_dbus_object_manager_server_export_uniquely := nil; g_dbus_object_manager_server_get_connection := nil; g_dbus_object_manager_server_get_type := nil; g_dbus_object_manager_server_is_exported := nil; g_dbus_object_manager_server_new := nil; g_dbus_object_manager_server_set_connection := nil; g_dbus_object_manager_server_unexport := nil; g_dbus_object_proxy_get_connection := nil; g_dbus_object_proxy_get_type := nil; g_dbus_object_proxy_new := nil; g_dbus_object_skeleton_add_interface := nil; g_dbus_object_skeleton_flush := nil; g_dbus_object_skeleton_get_type := nil; g_dbus_object_skeleton_new := nil; g_dbus_object_skeleton_remove_interface := nil; g_dbus_object_skeleton_remove_interface_by_name := nil; g_dbus_object_skeleton_set_object_path := nil; g_dbus_property_info_get_type := nil; g_dbus_property_info_ref := nil; g_dbus_property_info_unref := nil; g_dbus_proxy_call := nil; g_dbus_proxy_call_finish := nil; g_dbus_proxy_call_sync := nil; g_dbus_proxy_call_with_unix_fd_list := nil; g_dbus_proxy_call_with_unix_fd_list_finish := nil; g_dbus_proxy_call_with_unix_fd_list_sync := nil; g_dbus_proxy_get_cached_property := nil; g_dbus_proxy_get_cached_property_names := nil; g_dbus_proxy_get_connection := nil; g_dbus_proxy_get_default_timeout := nil; g_dbus_proxy_get_flags := nil; g_dbus_proxy_get_interface_info := nil; g_dbus_proxy_get_interface_name := nil; g_dbus_proxy_get_name := nil; g_dbus_proxy_get_name_owner := nil; g_dbus_proxy_get_object_path := nil; g_dbus_proxy_get_type := nil; g_dbus_proxy_new := nil; g_dbus_proxy_new_finish := nil; g_dbus_proxy_new_for_bus := nil; g_dbus_proxy_new_for_bus_finish := nil; g_dbus_proxy_new_for_bus_sync := nil; g_dbus_proxy_new_sync := nil; g_dbus_proxy_set_cached_property := nil; g_dbus_proxy_set_default_timeout := nil; g_dbus_proxy_set_interface_info := nil; g_dbus_server_get_client_address := nil; g_dbus_server_get_flags := nil; g_dbus_server_get_guid := nil; g_dbus_server_get_type := nil; g_dbus_server_is_active := nil; g_dbus_server_new_sync := nil; g_dbus_server_start := nil; g_dbus_server_stop := nil; g_dbus_signal_info_get_type := nil; g_dbus_signal_info_ref := nil; g_dbus_signal_info_unref := nil; g_desktop_app_info_get_boolean := nil; g_desktop_app_info_get_categories := nil; g_desktop_app_info_get_filename := nil; g_desktop_app_info_get_generic_name := nil; g_desktop_app_info_get_is_hidden := nil; g_desktop_app_info_get_keywords := nil; g_desktop_app_info_get_nodisplay := nil; g_desktop_app_info_get_show_in := nil; g_desktop_app_info_get_startup_wm_class := nil; g_desktop_app_info_get_string := nil; g_desktop_app_info_get_type := nil; g_desktop_app_info_has_key := nil; g_desktop_app_info_launch_uris_as_manager := nil; g_desktop_app_info_lookup_get_type := nil; g_desktop_app_info_new := nil; g_desktop_app_info_new_from_filename := nil; g_desktop_app_info_new_from_keyfile := nil; g_desktop_app_info_set_desktop_env := nil; g_drive_can_eject := nil; g_drive_can_poll_for_media := nil; g_drive_can_start := nil; g_drive_can_start_degraded := nil; g_drive_can_stop := nil; g_drive_eject_with_operation := nil; g_drive_eject_with_operation_finish := nil; g_drive_enumerate_identifiers := nil; g_drive_get_icon := nil; g_drive_get_identifier := nil; g_drive_get_name := nil; g_drive_get_sort_key := nil; g_drive_get_start_stop_type := nil; g_drive_get_symbolic_icon := nil; g_drive_get_type := nil; g_drive_get_volumes := nil; g_drive_has_media := nil; g_drive_has_volumes := nil; g_drive_is_media_check_automatic := nil; g_drive_is_media_removable := nil; g_drive_poll_for_media := nil; g_drive_poll_for_media_finish := nil; g_drive_start := nil; g_drive_start_finish := nil; g_drive_stop := nil; g_drive_stop_finish := nil; g_emblem_get_icon := nil; g_emblem_get_origin := nil; g_emblem_get_type := nil; g_emblem_new := nil; g_emblem_new_with_origin := nil; g_emblemed_icon_add_emblem := nil; g_emblemed_icon_clear_emblems := nil; g_emblemed_icon_get_emblems := nil; g_emblemed_icon_get_icon := nil; g_emblemed_icon_get_type := nil; g_emblemed_icon_new := nil; g_file_append_to := nil; g_file_append_to_async := nil; g_file_append_to_finish := nil; g_file_attribute_info_list_add := nil; g_file_attribute_info_list_dup := nil; g_file_attribute_info_list_get_type := nil; g_file_attribute_info_list_lookup := nil; g_file_attribute_info_list_new := nil; g_file_attribute_info_list_ref := nil; g_file_attribute_info_list_unref := nil; g_file_attribute_matcher_enumerate_namespace := nil; g_file_attribute_matcher_enumerate_next := nil; g_file_attribute_matcher_get_type := nil; g_file_attribute_matcher_matches := nil; g_file_attribute_matcher_matches_only := nil; g_file_attribute_matcher_new := nil; g_file_attribute_matcher_ref := nil; g_file_attribute_matcher_subtract := nil; g_file_attribute_matcher_to_string := nil; g_file_attribute_matcher_unref := nil; g_file_copy := nil; g_file_copy_async := nil; g_file_copy_attributes := nil; g_file_copy_finish := nil; g_file_create := nil; g_file_create_async := nil; g_file_create_finish := nil; g_file_create_readwrite := nil; g_file_create_readwrite_async := nil; g_file_create_readwrite_finish := nil; g_file_delete := nil; g_file_delete_async := nil; g_file_delete_finish := nil; g_file_descriptor_based_get_fd := nil; g_file_descriptor_based_get_type := nil; g_file_dup := nil; g_file_eject_mountable_with_operation := nil; g_file_eject_mountable_with_operation_finish := nil; g_file_enumerate_children := nil; g_file_enumerate_children_async := nil; g_file_enumerate_children_finish := nil; g_file_enumerator_close := nil; g_file_enumerator_close_async := nil; g_file_enumerator_close_finish := nil; g_file_enumerator_get_child := nil; g_file_enumerator_get_container := nil; g_file_enumerator_get_type := nil; g_file_enumerator_has_pending := nil; g_file_enumerator_is_closed := nil; g_file_enumerator_next_file := nil; g_file_enumerator_next_files_async := nil; g_file_enumerator_next_files_finish := nil; g_file_enumerator_set_pending := nil; g_file_equal := nil; g_file_find_enclosing_mount := nil; g_file_find_enclosing_mount_async := nil; g_file_find_enclosing_mount_finish := nil; g_file_get_basename := nil; g_file_get_child := nil; g_file_get_child_for_display_name := nil; g_file_get_parent := nil; g_file_get_parse_name := nil; g_file_get_path := nil; g_file_get_relative_path := nil; g_file_get_type := nil; g_file_get_uri := nil; g_file_get_uri_scheme := nil; g_file_has_parent := nil; g_file_has_prefix := nil; g_file_has_uri_scheme := nil; g_file_hash := nil; g_file_icon_get_file := nil; g_file_icon_get_type := nil; g_file_icon_new := nil; g_file_info_clear_status := nil; g_file_info_copy_into := nil; g_file_info_dup := nil; g_file_info_get_attribute_as_string := nil; g_file_info_get_attribute_boolean := nil; g_file_info_get_attribute_byte_string := nil; g_file_info_get_attribute_data := nil; g_file_info_get_attribute_int32 := nil; g_file_info_get_attribute_int64 := nil; g_file_info_get_attribute_object := nil; g_file_info_get_attribute_status := nil; g_file_info_get_attribute_string := nil; g_file_info_get_attribute_stringv := nil; g_file_info_get_attribute_type := nil; g_file_info_get_attribute_uint32 := nil; g_file_info_get_attribute_uint64 := nil; g_file_info_get_content_type := nil; g_file_info_get_deletion_date := nil; g_file_info_get_display_name := nil; g_file_info_get_edit_name := nil; g_file_info_get_etag := nil; g_file_info_get_file_type := nil; g_file_info_get_icon := nil; g_file_info_get_is_backup := nil; g_file_info_get_is_hidden := nil; g_file_info_get_is_symlink := nil; g_file_info_get_modification_time := nil; g_file_info_get_name := nil; g_file_info_get_size := nil; g_file_info_get_sort_order := nil; g_file_info_get_symbolic_icon := nil; g_file_info_get_symlink_target := nil; g_file_info_get_type := nil; g_file_info_has_attribute := nil; g_file_info_has_namespace := nil; g_file_info_list_attributes := nil; g_file_info_new := nil; g_file_info_remove_attribute := nil; g_file_info_set_attribute := nil; g_file_info_set_attribute_boolean := nil; g_file_info_set_attribute_byte_string := nil; g_file_info_set_attribute_int32 := nil; g_file_info_set_attribute_int64 := nil; g_file_info_set_attribute_mask := nil; g_file_info_set_attribute_object := nil; g_file_info_set_attribute_status := nil; g_file_info_set_attribute_string := nil; g_file_info_set_attribute_stringv := nil; g_file_info_set_attribute_uint32 := nil; g_file_info_set_attribute_uint64 := nil; g_file_info_set_content_type := nil; g_file_info_set_display_name := nil; g_file_info_set_edit_name := nil; g_file_info_set_file_type := nil; g_file_info_set_icon := nil; g_file_info_set_is_hidden := nil; g_file_info_set_is_symlink := nil; g_file_info_set_modification_time := nil; g_file_info_set_name := nil; g_file_info_set_size := nil; g_file_info_set_sort_order := nil; g_file_info_set_symbolic_icon := nil; g_file_info_set_symlink_target := nil; g_file_info_unset_attribute_mask := nil; g_file_input_stream_get_type := nil; g_file_input_stream_query_info := nil; g_file_input_stream_query_info_async := nil; g_file_input_stream_query_info_finish := nil; g_file_io_stream_get_etag := nil; g_file_io_stream_get_type := nil; g_file_io_stream_query_info := nil; g_file_io_stream_query_info_async := nil; g_file_io_stream_query_info_finish := nil; g_file_is_native := nil; g_file_load_contents := nil; g_file_load_contents_async := nil; g_file_load_contents_finish := nil; g_file_load_partial_contents_async := nil; g_file_load_partial_contents_finish := nil; g_file_make_directory := nil; g_file_make_directory_with_parents := nil; g_file_make_symbolic_link := nil; g_file_monitor := nil; g_file_monitor_cancel := nil; g_file_monitor_directory := nil; g_file_monitor_emit_event := nil; g_file_monitor_file := nil; g_file_monitor_get_type := nil; g_file_monitor_is_cancelled := nil; g_file_monitor_set_rate_limit := nil; g_file_mount_enclosing_volume := nil; g_file_mount_enclosing_volume_finish := nil; g_file_mount_mountable := nil; g_file_mount_mountable_finish := nil; g_file_move := nil; g_file_new_for_commandline_arg := nil; g_file_new_for_commandline_arg_and_cwd := nil; g_file_new_for_path := nil; g_file_new_for_uri := nil; g_file_new_tmp := nil; g_file_open_readwrite := nil; g_file_open_readwrite_async := nil; g_file_open_readwrite_finish := nil; g_file_output_stream_get_etag := nil; g_file_output_stream_get_type := nil; g_file_output_stream_query_info := nil; g_file_output_stream_query_info_async := nil; g_file_output_stream_query_info_finish := nil; g_file_parse_name := nil; g_file_poll_mountable := nil; g_file_poll_mountable_finish := nil; g_file_query_default_handler := nil; g_file_query_exists := nil; g_file_query_file_type := nil; g_file_query_filesystem_info := nil; g_file_query_filesystem_info_async := nil; g_file_query_filesystem_info_finish := nil; g_file_query_info := nil; g_file_query_info_async := nil; g_file_query_info_finish := nil; g_file_query_settable_attributes := nil; g_file_query_writable_namespaces := nil; g_file_read := nil; g_file_read_async := nil; g_file_read_finish := nil; g_file_replace := nil; g_file_replace_async := nil; g_file_replace_contents := nil; g_file_replace_contents_async := nil; g_file_replace_contents_finish := nil; g_file_replace_finish := nil; g_file_replace_readwrite := nil; g_file_replace_readwrite_async := nil; g_file_replace_readwrite_finish := nil; g_file_resolve_relative_path := nil; g_file_set_attribute := nil; g_file_set_attribute_byte_string := nil; g_file_set_attribute_int32 := nil; g_file_set_attribute_int64 := nil; g_file_set_attribute_string := nil; g_file_set_attribute_uint32 := nil; g_file_set_attribute_uint64 := nil; g_file_set_attributes_async := nil; g_file_set_attributes_finish := nil; g_file_set_attributes_from_info := nil; g_file_set_display_name := nil; g_file_set_display_name_async := nil; g_file_set_display_name_finish := nil; g_file_start_mountable := nil; g_file_start_mountable_finish := nil; g_file_stop_mountable := nil; g_file_stop_mountable_finish := nil; g_file_supports_thread_contexts := nil; g_file_trash := nil; g_file_unmount_mountable_with_operation := nil; g_file_unmount_mountable_with_operation_finish := nil; g_filename_completer_get_completion_suffix := nil; g_filename_completer_get_completions := nil; g_filename_completer_get_type := nil; g_filename_completer_new := nil; g_filename_completer_set_dirs_only := nil; g_filter_input_stream_get_base_stream := nil; g_filter_input_stream_get_close_base_stream := nil; g_filter_input_stream_get_type := nil; g_filter_input_stream_set_close_base_stream := nil; g_filter_output_stream_get_base_stream := nil; g_filter_output_stream_get_close_base_stream := nil; g_filter_output_stream_get_type := nil; g_filter_output_stream_set_close_base_stream := nil; g_icon_equal := nil; g_icon_get_type := nil; g_icon_hash := nil; g_icon_new_for_string := nil; g_icon_to_string := nil; g_inet_address_equal := nil; g_inet_address_get_family := nil; g_inet_address_get_is_any := nil; g_inet_address_get_is_link_local := nil; g_inet_address_get_is_loopback := nil; g_inet_address_get_is_mc_global := nil; g_inet_address_get_is_mc_link_local := nil; g_inet_address_get_is_mc_node_local := nil; g_inet_address_get_is_mc_org_local := nil; g_inet_address_get_is_mc_site_local := nil; g_inet_address_get_is_multicast := nil; g_inet_address_get_is_site_local := nil; g_inet_address_get_native_size := nil; g_inet_address_get_type := nil; g_inet_address_mask_equal := nil; g_inet_address_mask_get_address := nil; g_inet_address_mask_get_family := nil; g_inet_address_mask_get_length := nil; g_inet_address_mask_get_type := nil; g_inet_address_mask_matches := nil; g_inet_address_mask_new := nil; g_inet_address_mask_new_from_string := nil; g_inet_address_mask_to_string := nil; g_inet_address_new_any := nil; g_inet_address_new_from_bytes := nil; g_inet_address_new_from_string := nil; g_inet_address_new_loopback := nil; g_inet_address_to_bytes := nil; g_inet_address_to_string := nil; g_inet_socket_address_get_address := nil; g_inet_socket_address_get_flowinfo := nil; g_inet_socket_address_get_port := nil; g_inet_socket_address_get_scope_id := nil; g_inet_socket_address_get_type := nil; g_inet_socket_address_new := nil; g_initable_get_type := nil; g_initable_init := nil; g_initable_new := nil; g_initable_new_valist := nil; g_initable_newv := nil; g_input_stream_clear_pending := nil; g_input_stream_close := nil; g_input_stream_close_async := nil; g_input_stream_close_finish := nil; g_input_stream_get_type := nil; g_input_stream_has_pending := nil; g_input_stream_is_closed := nil; g_input_stream_read := nil; g_input_stream_read_all := nil; g_input_stream_read_async := nil; g_input_stream_read_bytes := nil; g_input_stream_read_bytes_async := nil; g_input_stream_read_bytes_finish := nil; g_input_stream_read_finish := nil; g_input_stream_set_pending := nil; g_input_stream_skip := nil; g_input_stream_skip_async := nil; g_input_stream_skip_finish := nil; g_io_error_from_errno := nil; g_io_error_quark := nil; g_io_extension_get_name := nil; g_io_extension_get_priority := nil; g_io_extension_get_type := nil; g_io_extension_point_get_extension_by_name := nil; g_io_extension_point_get_extensions := nil; g_io_extension_point_get_required_type := nil; g_io_extension_point_implement := nil; g_io_extension_point_lookup := nil; g_io_extension_point_register := nil; g_io_extension_point_set_required_type := nil; g_io_extension_ref_class := nil; g_io_module_get_type := nil; g_io_module_new := nil; g_io_module_scope_block := nil; g_io_module_scope_free := nil; g_io_module_scope_new := nil; g_io_modules_load_all_in_directory := nil; g_io_modules_load_all_in_directory_with_scope := nil; g_io_modules_scan_all_in_directory := nil; g_io_modules_scan_all_in_directory_with_scope := nil; g_io_scheduler_cancel_all_jobs := nil; g_io_scheduler_push_job := nil; g_io_stream_clear_pending := nil; g_io_stream_close := nil; g_io_stream_close_async := nil; g_io_stream_close_finish := nil; g_io_stream_get_input_stream := nil; g_io_stream_get_output_stream := nil; g_io_stream_get_type := nil; g_io_stream_has_pending := nil; g_io_stream_is_closed := nil; g_io_stream_set_pending := nil; g_io_stream_splice_async := nil; g_io_stream_splice_finish := nil; g_loadable_icon_get_type := nil; g_loadable_icon_load := nil; g_loadable_icon_load_async := nil; g_loadable_icon_load_finish := nil; g_memory_input_stream_add_bytes := nil; g_memory_input_stream_add_data := nil; g_memory_input_stream_get_type := nil; g_memory_input_stream_new := nil; g_memory_input_stream_new_from_bytes := nil; g_memory_input_stream_new_from_data := nil; g_memory_output_stream_get_data := nil; g_memory_output_stream_get_data_size := nil; g_memory_output_stream_get_size := nil; g_memory_output_stream_get_type := nil; g_memory_output_stream_new := nil; g_memory_output_stream_new_resizable := nil; g_memory_output_stream_steal_as_bytes := nil; g_memory_output_stream_steal_data := nil; g_menu_append := nil; g_menu_append_item := nil; g_menu_append_section := nil; g_menu_append_submenu := nil; g_menu_attribute_iter_get_name := nil; g_menu_attribute_iter_get_next := nil; g_menu_attribute_iter_get_type := nil; g_menu_attribute_iter_get_value := nil; g_menu_attribute_iter_next := nil; g_menu_freeze := nil; g_menu_get_type := nil; g_menu_insert := nil; g_menu_insert_item := nil; g_menu_insert_section := nil; g_menu_insert_submenu := nil; g_menu_item_get_attribute := nil; g_menu_item_get_attribute_value := nil; g_menu_item_get_link := nil; g_menu_item_get_type := nil; g_menu_item_new := nil; g_menu_item_new_from_model := nil; g_menu_item_new_section := nil; g_menu_item_new_submenu := nil; g_menu_item_set_action_and_target := nil; g_menu_item_set_action_and_target_value := nil; g_menu_item_set_attribute := nil; g_menu_item_set_attribute_value := nil; g_menu_item_set_detailed_action := nil; g_menu_item_set_label := nil; g_menu_item_set_link := nil; g_menu_item_set_section := nil; g_menu_item_set_submenu := nil; g_menu_link_iter_get_name := nil; g_menu_link_iter_get_next := nil; g_menu_link_iter_get_type := nil; g_menu_link_iter_get_value := nil; g_menu_link_iter_next := nil; g_menu_model_get_item_attribute := nil; g_menu_model_get_item_attribute_value := nil; g_menu_model_get_item_link := nil; g_menu_model_get_n_items := nil; g_menu_model_get_type := nil; g_menu_model_is_mutable := nil; g_menu_model_items_changed := nil; g_menu_model_iterate_item_attributes := nil; g_menu_model_iterate_item_links := nil; g_menu_new := nil; g_menu_prepend := nil; g_menu_prepend_item := nil; g_menu_prepend_section := nil; g_menu_prepend_submenu := nil; g_menu_remove := nil; g_mount_can_eject := nil; g_mount_can_unmount := nil; g_mount_eject_with_operation := nil; g_mount_eject_with_operation_finish := nil; g_mount_get_default_location := nil; g_mount_get_drive := nil; g_mount_get_icon := nil; g_mount_get_name := nil; g_mount_get_root := nil; g_mount_get_sort_key := nil; g_mount_get_symbolic_icon := nil; g_mount_get_type := nil; g_mount_get_uuid := nil; g_mount_get_volume := nil; g_mount_guess_content_type := nil; g_mount_guess_content_type_finish := nil; g_mount_guess_content_type_sync := nil; g_mount_is_shadowed := nil; g_mount_operation_get_anonymous := nil; g_mount_operation_get_choice := nil; g_mount_operation_get_domain := nil; g_mount_operation_get_password := nil; g_mount_operation_get_password_save := nil; g_mount_operation_get_type := nil; g_mount_operation_get_username := nil; g_mount_operation_new := nil; g_mount_operation_reply := nil; g_mount_operation_set_anonymous := nil; g_mount_operation_set_choice := nil; g_mount_operation_set_domain := nil; g_mount_operation_set_password := nil; g_mount_operation_set_password_save := nil; g_mount_operation_set_username := nil; g_mount_remount := nil; g_mount_remount_finish := nil; g_mount_shadow := nil; g_mount_unmount_with_operation := nil; g_mount_unmount_with_operation_finish := nil; g_mount_unshadow := nil; g_native_volume_monitor_get_type := nil; g_network_address_get_hostname := nil; g_network_address_get_port := nil; g_network_address_get_scheme := nil; g_network_address_get_type := nil; g_network_address_new := nil; g_network_address_parse := nil; g_network_address_parse_uri := nil; g_network_monitor_can_reach := nil; g_network_monitor_can_reach_async := nil; g_network_monitor_can_reach_finish := nil; g_network_monitor_get_default := nil; g_network_monitor_get_network_available := nil; g_network_monitor_get_type := nil; g_network_service_get_domain := nil; g_network_service_get_protocol := nil; g_network_service_get_scheme := nil; g_network_service_get_service := nil; g_network_service_get_type := nil; g_network_service_new := nil; g_network_service_set_scheme := nil; g_networking_init := nil; g_output_stream_clear_pending := nil; g_output_stream_close := nil; g_output_stream_close_async := nil; g_output_stream_close_finish := nil; g_output_stream_flush := nil; g_output_stream_flush_async := nil; g_output_stream_flush_finish := nil; g_output_stream_get_type := nil; g_output_stream_has_pending := nil; g_output_stream_is_closed := nil; g_output_stream_is_closing := nil; g_output_stream_set_pending := nil; g_output_stream_splice := nil; g_output_stream_splice_async := nil; g_output_stream_splice_finish := nil; g_output_stream_write := nil; g_output_stream_write_all := nil; g_output_stream_write_async := nil; g_output_stream_write_bytes := nil; g_output_stream_write_bytes_async := nil; g_output_stream_write_bytes_finish := nil; g_output_stream_write_finish := nil; g_permission_acquire := nil; g_permission_acquire_async := nil; g_permission_acquire_finish := nil; g_permission_get_allowed := nil; g_permission_get_can_acquire := nil; g_permission_get_can_release := nil; g_permission_get_type := nil; g_permission_impl_update := nil; g_permission_release := nil; g_permission_release_async := nil; g_permission_release_finish := nil; g_pollable_input_stream_can_poll := nil; g_pollable_input_stream_create_source := nil; g_pollable_input_stream_get_type := nil; g_pollable_input_stream_is_readable := nil; g_pollable_input_stream_read_nonblocking := nil; g_pollable_output_stream_can_poll := nil; g_pollable_output_stream_create_source := nil; g_pollable_output_stream_get_type := nil; g_pollable_output_stream_is_writable := nil; g_pollable_output_stream_write_nonblocking := nil; g_pollable_source_new := nil; g_pollable_source_new_full := nil; g_pollable_stream_read := nil; g_pollable_stream_write := nil; g_pollable_stream_write_all := nil; g_proxy_address_enumerator_get_type := nil; g_proxy_address_get_destination_hostname := nil; g_proxy_address_get_destination_port := nil; g_proxy_address_get_destination_protocol := nil; g_proxy_address_get_password := nil; g_proxy_address_get_protocol := nil; g_proxy_address_get_type := nil; g_proxy_address_get_uri := nil; g_proxy_address_get_username := nil; g_proxy_address_new := nil; g_proxy_connect := nil; g_proxy_connect_async := nil; g_proxy_connect_finish := nil; g_proxy_get_default_for_protocol := nil; g_proxy_get_type := nil; g_proxy_resolver_get_default := nil; g_proxy_resolver_get_type := nil; g_proxy_resolver_is_supported := nil; g_proxy_resolver_lookup := nil; g_proxy_resolver_lookup_async := nil; g_proxy_resolver_lookup_finish := nil; g_proxy_supports_hostname := nil; g_remote_action_group_activate_action_full := nil; g_remote_action_group_change_action_state_full := nil; g_remote_action_group_get_type := nil; g_resolver_error_quark := nil; g_resolver_free_addresses := nil; g_resolver_free_targets := nil; g_resolver_get_default := nil; g_resolver_get_type := nil; g_resolver_lookup_by_address := nil; g_resolver_lookup_by_address_async := nil; g_resolver_lookup_by_address_finish := nil; g_resolver_lookup_by_name := nil; g_resolver_lookup_by_name_async := nil; g_resolver_lookup_by_name_finish := nil; g_resolver_lookup_records := nil; g_resolver_lookup_records_async := nil; g_resolver_lookup_records_finish := nil; g_resolver_lookup_service := nil; g_resolver_lookup_service_async := nil; g_resolver_lookup_service_finish := nil; g_resolver_set_default := nil; g_resource_enumerate_children := nil; g_resource_error_quark := nil; g_resource_get_info := nil; g_resource_get_type := nil; g_resource_load := nil; g_resource_lookup_data := nil; g_resource_new_from_data := nil; g_resource_open_stream := nil; g_resource_ref := nil; g_resource_unref := nil; g_resources_enumerate_children := nil; g_resources_get_info := nil; g_resources_lookup_data := nil; g_resources_open_stream := nil; g_resources_register := nil; g_resources_unregister := nil; g_seekable_can_seek := nil; g_seekable_can_truncate := nil; g_seekable_get_type := nil; g_seekable_seek := nil; g_seekable_tell := nil; g_seekable_truncate := nil; g_settings_apply := nil; g_settings_bind := nil; g_settings_bind_with_mapping := nil; g_settings_bind_writable := nil; g_settings_create_action := nil; g_settings_delay := nil; g_settings_get := nil; g_settings_get_boolean := nil; g_settings_get_child := nil; g_settings_get_double := nil; g_settings_get_enum := nil; g_settings_get_flags := nil; g_settings_get_has_unapplied := nil; g_settings_get_int := nil; g_settings_get_mapped := nil; g_settings_get_range := nil; g_settings_get_string := nil; g_settings_get_strv := nil; g_settings_get_type := nil; g_settings_get_uint := nil; g_settings_get_value := nil; g_settings_is_writable := nil; g_settings_list_children := nil; g_settings_list_keys := nil; g_settings_list_relocatable_schemas := nil; g_settings_list_schemas := nil; g_settings_new := nil; g_settings_new_full := nil; g_settings_new_with_backend := nil; g_settings_new_with_backend_and_path := nil; g_settings_new_with_path := nil; g_settings_range_check := nil; g_settings_reset := nil; g_settings_revert := nil; g_settings_schema_get_id := nil; g_settings_schema_get_path := nil; g_settings_schema_get_type := nil; g_settings_schema_ref := nil; g_settings_schema_source_get_default := nil; g_settings_schema_source_get_type := nil; g_settings_schema_source_lookup := nil; g_settings_schema_source_new_from_directory := nil; g_settings_schema_source_ref := nil; g_settings_schema_source_unref := nil; g_settings_schema_unref := nil; g_settings_set := nil; g_settings_set_boolean := nil; g_settings_set_double := nil; g_settings_set_enum := nil; g_settings_set_flags := nil; g_settings_set_int := nil; g_settings_set_string := nil; g_settings_set_strv := nil; g_settings_set_uint := nil; g_settings_set_value := nil; g_settings_sync := nil; g_settings_unbind := nil; g_simple_action_get_type := nil; g_simple_action_group_add_entries := nil; g_simple_action_group_get_type := nil; g_simple_action_group_insert := nil; g_simple_action_group_lookup := nil; g_simple_action_group_new := nil; g_simple_action_group_remove := nil; g_simple_action_new := nil; g_simple_action_new_stateful := nil; g_simple_action_set_enabled := nil; g_simple_action_set_state := nil; g_simple_async_report_error_in_idle := nil; g_simple_async_report_gerror_in_idle := nil; g_simple_async_report_take_gerror_in_idle := nil; g_simple_async_result_complete := nil; g_simple_async_result_complete_in_idle := nil; g_simple_async_result_get_op_res_gboolean := nil; g_simple_async_result_get_op_res_gpointer := nil; g_simple_async_result_get_op_res_gssize := nil; g_simple_async_result_get_source_tag := nil; g_simple_async_result_get_type := nil; g_simple_async_result_is_valid := nil; g_simple_async_result_new := nil; g_simple_async_result_new_error := nil; g_simple_async_result_new_from_error := nil; g_simple_async_result_new_take_error := nil; g_simple_async_result_propagate_error := nil; g_simple_async_result_run_in_thread := nil; g_simple_async_result_set_check_cancellable := nil; g_simple_async_result_set_error := nil; g_simple_async_result_set_error_va := nil; g_simple_async_result_set_from_error := nil; g_simple_async_result_set_handle_cancellation := nil; g_simple_async_result_set_op_res_gboolean := nil; g_simple_async_result_set_op_res_gpointer := nil; g_simple_async_result_set_op_res_gssize := nil; g_simple_async_result_take_error := nil; g_simple_permission_get_type := nil; g_simple_permission_new := nil; g_simple_proxy_resolver_get_type := nil; g_simple_proxy_resolver_new := nil; g_simple_proxy_resolver_set_default_proxy := nil; g_simple_proxy_resolver_set_ignore_hosts := nil; g_simple_proxy_resolver_set_uri_proxy := nil; g_socket_accept := nil; g_socket_address_enumerator_get_type := nil; g_socket_address_enumerator_next := nil; g_socket_address_enumerator_next_async := nil; g_socket_address_enumerator_next_finish := nil; g_socket_address_get_family := nil; g_socket_address_get_native_size := nil; g_socket_address_get_type := nil; g_socket_address_new_from_native := nil; g_socket_address_to_native := nil; g_socket_bind := nil; g_socket_check_connect_result := nil; g_socket_client_add_application_proxy := nil; g_socket_client_connect := nil; g_socket_client_connect_async := nil; g_socket_client_connect_finish := nil; g_socket_client_connect_to_host := nil; g_socket_client_connect_to_host_async := nil; g_socket_client_connect_to_host_finish := nil; g_socket_client_connect_to_service := nil; g_socket_client_connect_to_service_async := nil; g_socket_client_connect_to_service_finish := nil; g_socket_client_connect_to_uri := nil; g_socket_client_connect_to_uri_async := nil; g_socket_client_connect_to_uri_finish := nil; g_socket_client_get_enable_proxy := nil; g_socket_client_get_family := nil; g_socket_client_get_local_address := nil; g_socket_client_get_protocol := nil; g_socket_client_get_proxy_resolver := nil; g_socket_client_get_socket_type := nil; g_socket_client_get_timeout := nil; g_socket_client_get_tls := nil; g_socket_client_get_tls_validation_flags := nil; g_socket_client_get_type := nil; g_socket_client_new := nil; g_socket_client_set_enable_proxy := nil; g_socket_client_set_family := nil; g_socket_client_set_local_address := nil; g_socket_client_set_protocol := nil; g_socket_client_set_proxy_resolver := nil; g_socket_client_set_socket_type := nil; g_socket_client_set_timeout := nil; g_socket_client_set_tls := nil; g_socket_client_set_tls_validation_flags := nil; g_socket_close := nil; g_socket_condition_check := nil; g_socket_condition_timed_wait := nil; g_socket_condition_wait := nil; g_socket_connect := nil; g_socket_connectable_enumerate := nil; g_socket_connectable_get_type := nil; g_socket_connectable_proxy_enumerate := nil; g_socket_connection_connect := nil; g_socket_connection_connect_async := nil; g_socket_connection_connect_finish := nil; g_socket_connection_factory_create_connection := nil; g_socket_connection_factory_lookup_type := nil; g_socket_connection_factory_register_type := nil; g_socket_connection_get_local_address := nil; g_socket_connection_get_remote_address := nil; g_socket_connection_get_socket := nil; g_socket_connection_get_type := nil; g_socket_connection_is_connected := nil; g_socket_control_message_deserialize := nil; g_socket_control_message_get_level := nil; g_socket_control_message_get_msg_type := nil; g_socket_control_message_get_size := nil; g_socket_control_message_get_type := nil; g_socket_control_message_serialize := nil; g_socket_create_source := nil; g_socket_get_available_bytes := nil; g_socket_get_blocking := nil; g_socket_get_broadcast := nil; g_socket_get_credentials := nil; g_socket_get_family := nil; g_socket_get_fd := nil; g_socket_get_keepalive := nil; g_socket_get_listen_backlog := nil; g_socket_get_local_address := nil; g_socket_get_multicast_loopback := nil; g_socket_get_multicast_ttl := nil; g_socket_get_option := nil; g_socket_get_protocol := nil; g_socket_get_remote_address := nil; g_socket_get_socket_type := nil; g_socket_get_timeout := nil; g_socket_get_ttl := nil; g_socket_get_type := nil; g_socket_is_closed := nil; g_socket_is_connected := nil; g_socket_join_multicast_group := nil; g_socket_leave_multicast_group := nil; g_socket_listen := nil; g_socket_listener_accept := nil; g_socket_listener_accept_async := nil; g_socket_listener_accept_finish := nil; g_socket_listener_accept_socket := nil; g_socket_listener_accept_socket_async := nil; g_socket_listener_accept_socket_finish := nil; g_socket_listener_add_address := nil; g_socket_listener_add_any_inet_port := nil; g_socket_listener_add_inet_port := nil; g_socket_listener_add_socket := nil; g_socket_listener_close := nil; g_socket_listener_get_type := nil; g_socket_listener_new := nil; g_socket_listener_set_backlog := nil; g_socket_new := nil; g_socket_new_from_fd := nil; g_socket_receive := nil; g_socket_receive_from := nil; g_socket_receive_message := nil; g_socket_receive_with_blocking := nil; g_socket_send := nil; g_socket_send_message := nil; g_socket_send_to := nil; g_socket_send_with_blocking := nil; g_socket_service_get_type := nil; g_socket_service_is_active := nil; g_socket_service_new := nil; g_socket_service_start := nil; g_socket_service_stop := nil; g_socket_set_blocking := nil; g_socket_set_broadcast := nil; g_socket_set_keepalive := nil; g_socket_set_listen_backlog := nil; g_socket_set_multicast_loopback := nil; g_socket_set_multicast_ttl := nil; g_socket_set_option := nil; g_socket_set_timeout := nil; g_socket_set_ttl := nil; g_socket_shutdown := nil; g_socket_speaks_ipv4 := nil; g_srv_target_copy := nil; g_srv_target_free := nil; g_srv_target_get_hostname := nil; g_srv_target_get_port := nil; g_srv_target_get_priority := nil; g_srv_target_get_type := nil; g_srv_target_get_weight := nil; g_srv_target_list_sort := nil; g_srv_target_new := nil; g_static_resource_fini := nil; g_static_resource_get_resource := nil; g_static_resource_init := nil; g_task_attach_source := nil; g_task_get_cancellable := nil; g_task_get_check_cancellable := nil; g_task_get_context := nil; g_task_get_priority := nil; g_task_get_return_on_cancel := nil; g_task_get_source_object := nil; g_task_get_source_tag := nil; g_task_get_task_data := nil; g_task_get_type := nil; g_task_had_error := nil; g_task_is_valid := nil; g_task_new := nil; g_task_propagate_boolean := nil; g_task_propagate_int := nil; g_task_propagate_pointer := nil; g_task_report_error := nil; g_task_report_new_error := nil; g_task_return_boolean := nil; g_task_return_error := nil; g_task_return_error_if_cancelled := nil; g_task_return_int := nil; g_task_return_new_error := nil; g_task_return_pointer := nil; g_task_run_in_thread := nil; g_task_run_in_thread_sync := nil; g_task_set_check_cancellable := nil; g_task_set_priority := nil; g_task_set_return_on_cancel := nil; g_task_set_source_tag := nil; g_task_set_task_data := nil; g_tcp_connection_get_graceful_disconnect := nil; g_tcp_connection_get_type := nil; g_tcp_connection_set_graceful_disconnect := nil; g_tcp_wrapper_connection_get_base_io_stream := nil; g_tcp_wrapper_connection_get_type := nil; g_tcp_wrapper_connection_new := nil; g_test_dbus_add_service_dir := nil; g_test_dbus_down := nil; g_test_dbus_get_bus_address := nil; g_test_dbus_get_flags := nil; g_test_dbus_get_type := nil; g_test_dbus_new := nil; g_test_dbus_stop := nil; g_test_dbus_unset := nil; g_test_dbus_up := nil; g_themed_icon_append_name := nil; g_themed_icon_get_names := nil; g_themed_icon_get_type := nil; g_themed_icon_new := nil; g_themed_icon_new_from_names := nil; g_themed_icon_new_with_default_fallbacks := nil; g_themed_icon_prepend_name := nil; g_threaded_socket_service_get_type := nil; g_threaded_socket_service_new := nil; g_tls_backend_get_certificate_type := nil; g_tls_backend_get_client_connection_type := nil; g_tls_backend_get_default := nil; g_tls_backend_get_default_database := nil; g_tls_backend_get_file_database_type := nil; g_tls_backend_get_server_connection_type := nil; g_tls_backend_get_type := nil; g_tls_backend_supports_tls := nil; g_tls_certificate_get_issuer := nil; g_tls_certificate_get_type := nil; g_tls_certificate_is_same := nil; g_tls_certificate_list_new_from_file := nil; g_tls_certificate_new_from_file := nil; g_tls_certificate_new_from_files := nil; g_tls_certificate_new_from_pem := nil; g_tls_certificate_verify := nil; g_tls_client_connection_get_accepted_cas := nil; g_tls_client_connection_get_server_identity := nil; g_tls_client_connection_get_type := nil; g_tls_client_connection_get_use_ssl3 := nil; g_tls_client_connection_get_validation_flags := nil; g_tls_client_connection_new := nil; g_tls_client_connection_set_server_identity := nil; g_tls_client_connection_set_use_ssl3 := nil; g_tls_client_connection_set_validation_flags := nil; g_tls_connection_emit_accept_certificate := nil; g_tls_connection_get_certificate := nil; g_tls_connection_get_database := nil; g_tls_connection_get_interaction := nil; g_tls_connection_get_peer_certificate := nil; g_tls_connection_get_peer_certificate_errors := nil; g_tls_connection_get_rehandshake_mode := nil; g_tls_connection_get_require_close_notify := nil; g_tls_connection_get_type := nil; g_tls_connection_handshake := nil; g_tls_connection_handshake_async := nil; g_tls_connection_handshake_finish := nil; g_tls_connection_set_certificate := nil; g_tls_connection_set_database := nil; g_tls_connection_set_interaction := nil; g_tls_connection_set_rehandshake_mode := nil; g_tls_connection_set_require_close_notify := nil; g_tls_database_create_certificate_handle := nil; g_tls_database_get_type := nil; g_tls_database_lookup_certificate_for_handle := nil; g_tls_database_lookup_certificate_for_handle_async := nil; g_tls_database_lookup_certificate_for_handle_finish := nil; g_tls_database_lookup_certificate_issuer := nil; g_tls_database_lookup_certificate_issuer_async := nil; g_tls_database_lookup_certificate_issuer_finish := nil; g_tls_database_lookup_certificates_issued_by := nil; g_tls_database_lookup_certificates_issued_by_async := nil; g_tls_database_lookup_certificates_issued_by_finish := nil; g_tls_database_verify_chain := nil; g_tls_database_verify_chain_async := nil; g_tls_database_verify_chain_finish := nil; g_tls_error_quark := nil; g_tls_file_database_get_type := nil; g_tls_file_database_new := nil; g_tls_interaction_ask_password := nil; g_tls_interaction_ask_password_async := nil; g_tls_interaction_ask_password_finish := nil; g_tls_interaction_get_type := nil; g_tls_interaction_invoke_ask_password := nil; g_tls_password_get_description := nil; g_tls_password_get_flags := nil; g_tls_password_get_type := nil; g_tls_password_get_value := nil; g_tls_password_get_warning := nil; g_tls_password_new := nil; g_tls_password_set_description := nil; g_tls_password_set_flags := nil; g_tls_password_set_value := nil; g_tls_password_set_value_full := nil; g_tls_password_set_warning := nil; g_tls_server_connection_get_type := nil; g_tls_server_connection_new := nil; g_unix_connection_get_type := nil; g_unix_connection_receive_credentials := nil; g_unix_connection_receive_credentials_async := nil; g_unix_connection_receive_credentials_finish := nil; g_unix_connection_receive_fd := nil; g_unix_connection_send_credentials := nil; g_unix_connection_send_credentials_async := nil; g_unix_connection_send_credentials_finish := nil; g_unix_connection_send_fd := nil; g_unix_credentials_message_get_credentials := nil; g_unix_credentials_message_get_type := nil; g_unix_credentials_message_is_supported := nil; g_unix_credentials_message_new := nil; g_unix_credentials_message_new_with_credentials := nil; g_unix_fd_list_append := nil; g_unix_fd_list_get := nil; g_unix_fd_list_get_length := nil; g_unix_fd_list_get_type := nil; g_unix_fd_list_new := nil; g_unix_fd_list_new_from_array := nil; g_unix_fd_list_peek_fds := nil; g_unix_fd_list_steal_fds := nil; g_unix_fd_message_append_fd := nil; g_unix_fd_message_get_fd_list := nil; g_unix_fd_message_get_type := nil; g_unix_fd_message_new := nil; g_unix_fd_message_new_with_fd_list := nil; g_unix_fd_message_steal_fds := nil; g_unix_input_stream_get_close_fd := nil; g_unix_input_stream_get_fd := nil; g_unix_input_stream_get_type := nil; g_unix_input_stream_new := nil; g_unix_input_stream_set_close_fd := nil; g_unix_is_mount_path_system_internal := nil; g_unix_mount_at := nil; g_unix_mount_compare := nil; g_unix_mount_free := nil; g_unix_mount_get_device_path := nil; g_unix_mount_get_fs_type := nil; g_unix_mount_get_mount_path := nil; g_unix_mount_guess_can_eject := nil; g_unix_mount_guess_icon := nil; g_unix_mount_guess_name := nil; g_unix_mount_guess_should_display := nil; g_unix_mount_guess_symbolic_icon := nil; g_unix_mount_is_readonly := nil; g_unix_mount_is_system_internal := nil; g_unix_mount_monitor_get_type := nil; g_unix_mount_monitor_new := nil; g_unix_mount_monitor_set_rate_limit := nil; g_unix_mount_point_compare := nil; g_unix_mount_point_free := nil; g_unix_mount_point_get_device_path := nil; g_unix_mount_point_get_fs_type := nil; g_unix_mount_point_get_mount_path := nil; g_unix_mount_point_get_options := nil; g_unix_mount_point_guess_can_eject := nil; g_unix_mount_point_guess_icon := nil; g_unix_mount_point_guess_name := nil; g_unix_mount_point_guess_symbolic_icon := nil; g_unix_mount_point_is_loopback := nil; g_unix_mount_point_is_readonly := nil; g_unix_mount_point_is_user_mountable := nil; g_unix_mount_points_changed_since := nil; g_unix_mount_points_get := nil; g_unix_mounts_changed_since := nil; g_unix_mounts_get := nil; g_unix_output_stream_get_close_fd := nil; g_unix_output_stream_get_fd := nil; g_unix_output_stream_get_type := nil; g_unix_output_stream_new := nil; g_unix_output_stream_set_close_fd := nil; g_unix_socket_address_abstract_names_supported := nil; g_unix_socket_address_get_address_type := nil; g_unix_socket_address_get_path := nil; g_unix_socket_address_get_path_len := nil; g_unix_socket_address_get_type := nil; g_unix_socket_address_new := nil; g_unix_socket_address_new_with_type := nil; g_vfs_get_default := nil; g_vfs_get_file_for_path := nil; g_vfs_get_file_for_uri := nil; g_vfs_get_local := nil; g_vfs_get_supported_uri_schemes := nil; g_vfs_get_type := nil; g_vfs_is_active := nil; g_vfs_parse_name := nil; g_volume_can_eject := nil; g_volume_can_mount := nil; g_volume_eject_with_operation := nil; g_volume_eject_with_operation_finish := nil; g_volume_enumerate_identifiers := nil; g_volume_get_activation_root := nil; g_volume_get_drive := nil; g_volume_get_icon := nil; g_volume_get_identifier := nil; g_volume_get_mount := nil; g_volume_get_name := nil; g_volume_get_sort_key := nil; g_volume_get_symbolic_icon := nil; g_volume_get_type := nil; g_volume_get_uuid := nil; g_volume_monitor_get := nil; g_volume_monitor_get_connected_drives := nil; g_volume_monitor_get_mount_for_uuid := nil; g_volume_monitor_get_mounts := nil; g_volume_monitor_get_type := nil; g_volume_monitor_get_volume_for_uuid := nil; g_volume_monitor_get_volumes := nil; g_volume_mount := nil; g_volume_mount_finish := nil; g_volume_should_automount := nil; g_zlib_compressor_get_file_info := nil; g_zlib_compressor_get_type := nil; g_zlib_compressor_new := nil; g_zlib_compressor_set_file_info := nil; g_zlib_decompressor_get_file_info := nil; g_zlib_decompressor_get_type := nil; g_zlib_decompressor_new := nil; end; initialization LoadLibraries; LoadProcs; finalization UnloadLibraries; end.������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/glib/ugobject2.pas������������������������������������������������0000644�0001750�0000144�00000205536�12333344361�021436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This is an autogenerated unit using gobject introspection (gir2pascal). Do not Edit. } unit uGObject2; {$MODE OBJFPC}{$H+} {$PACKRECORDS C} {$MODESWITCH DUPLICATELOCALS+} {$LINKLIB libgobject-2.0.so.0} interface uses CTypes, uGLib2; const GObject2_library = 'libgobject-2.0.so.0'; PARAM_MASK = 255; PARAM_READWRITE = 0; PARAM_STATIC_STRINGS = 0; PARAM_USER_SHIFT = 8; SIGNAL_FLAGS_MASK = 511; SIGNAL_MATCH_MASK = 63; TYPE_FLAG_RESERVED_ID_BIT = 1; TYPE_FUNDAMENTAL_MAX = 255; TYPE_FUNDAMENTAL_SHIFT = 2; TYPE_RESERVED_BSE_FIRST = 32; TYPE_RESERVED_BSE_LAST = 48; TYPE_RESERVED_GLIB_FIRST = 22; TYPE_RESERVED_GLIB_LAST = 31; TYPE_RESERVED_USER_FIRST = 49; VALUE_COLLECT_FORMAT_MAX_LENGTH = 8; VALUE_NOCOPY_CONTENTS = 134217728; type TGBindingFlags = Integer; const { GBindingFlags } G_BINDING_DEFAULT: TGBindingFlags = 0; G_BINDING_BIDIRECTIONAL: TGBindingFlags = 1; G_BINDING_SYNC_CREATE: TGBindingFlags = 2; G_BINDING_INVERT_BOOLEAN: TGBindingFlags = 4; type TGConnectFlags = Integer; const { GConnectFlags } G_CONNECT_AFTER: TGConnectFlags = 1; G_CONNECT_SWAPPED: TGConnectFlags = 2; type TGParamFlags = Integer; const { GParamFlags } G_PARAM_READABLE: TGParamFlags = 1; G_PARAM_WRITABLE: TGParamFlags = 2; G_PARAM_CONSTRUCT: TGParamFlags = 4; G_PARAM_CONSTRUCT_ONLY: TGParamFlags = 8; G_PARAM_LAX_VALIDATION: TGParamFlags = 16; G_PARAM_STATIC_NAME: TGParamFlags = 32; G_PARAM_PRIVATE: TGParamFlags = 32; G_PARAM_STATIC_NICK: TGParamFlags = 64; G_PARAM_STATIC_BLURB: TGParamFlags = 128; type TGSignalFlags = Integer; const { GSignalFlags } G_SIGNAL_RUN_FIRST: TGSignalFlags = 1; G_SIGNAL_RUN_LAST: TGSignalFlags = 2; G_SIGNAL_RUN_CLEANUP: TGSignalFlags = 4; G_SIGNAL_NO_RECURSE: TGSignalFlags = 8; G_SIGNAL_DETAILED: TGSignalFlags = 16; G_SIGNAL_ACTION: TGSignalFlags = 32; G_SIGNAL_NO_HOOKS: TGSignalFlags = 64; G_SIGNAL_MUST_COLLECT: TGSignalFlags = 128; G_SIGNAL_DEPRECATED: TGSignalFlags = 256; type TGSignalMatchType = Integer; const { GSignalMatchType } G_SIGNAL_MATCH_ID: TGSignalMatchType = 1; G_SIGNAL_MATCH_DETAIL: TGSignalMatchType = 2; G_SIGNAL_MATCH_CLOSURE: TGSignalMatchType = 4; G_SIGNAL_MATCH_FUNC: TGSignalMatchType = 8; G_SIGNAL_MATCH_DATA: TGSignalMatchType = 16; G_SIGNAL_MATCH_UNBLOCKED: TGSignalMatchType = 32; type TGTypeDebugFlags = Integer; const { GTypeDebugFlags } G_TYPE_DEBUG_NONE: TGTypeDebugFlags = 0; G_TYPE_DEBUG_OBJECTS: TGTypeDebugFlags = 1; G_TYPE_DEBUG_SIGNALS: TGTypeDebugFlags = 2; G_TYPE_DEBUG_MASK: TGTypeDebugFlags = 3; type TGTypeFlags = Integer; const { GTypeFlags } G_TYPE_FLAG_ABSTRACT: TGTypeFlags = 16; G_TYPE_FLAG_VALUE_ABSTRACT: TGTypeFlags = 32; type TGTypeFundamentalFlags = Integer; const { GTypeFundamentalFlags } G_TYPE_FLAG_CLASSED: TGTypeFundamentalFlags = 1; G_TYPE_FLAG_INSTANTIATABLE: TGTypeFundamentalFlags = 2; G_TYPE_FLAG_DERIVABLE: TGTypeFundamentalFlags = 4; G_TYPE_FLAG_DEEP_DERIVABLE: TGTypeFundamentalFlags = 8; type PPGClosure = ^PGClosure; PGClosure = ^TGClosure; PPPGValue = ^PPGValue; PPGValue = ^PGValue; PGValue = ^TGValue; TGClosureMarshal = procedure(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; PPGSignalCMarshaller = ^PGSignalCMarshaller; PGSignalCMarshaller = ^TGSignalCMarshaller; TGSignalCMarshaller = TGClosureMarshal; TGVaClosureMarshal = procedure(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; PPGSignalCVaMarshaller = ^PGSignalCVaMarshaller; PGSignalCVaMarshaller = ^TGSignalCVaMarshaller; TGSignalCVaMarshaller = TGVaClosureMarshal; PPGType = ^PGType; PGType = ^TGType; TGType = gsize; TGBaseFinalizeFunc = procedure(g_class: gpointer); cdecl; TGBaseInitFunc = procedure(g_class: gpointer); cdecl; PPGBindingFlags = ^PGBindingFlags; PGBindingFlags = ^TGBindingFlags; PPGBinding = ^PGBinding; PGBinding = ^TGBinding; PPGObject = ^PGObject; PGObject = ^TGObject; PPGParameter = ^PGParameter; PGParameter = ^TGParameter; PPGParamSpec = ^PGParamSpec; PGParamSpec = ^TGParamSpec; PPGToggleNotify = ^PGToggleNotify; PGToggleNotify = ^TGToggleNotify; TGToggleNotify = procedure(data: gpointer; object_: PGObject; is_last_ref: gboolean); cdecl; PPGBindingTransformFunc = ^PGBindingTransformFunc; PGBindingTransformFunc = ^TGBindingTransformFunc; TGBindingTransformFunc = function(binding: PGBinding; source_value: PGValue; target_value: PGValue; user_data: gpointer): gboolean; cdecl; PPGWeakNotify = ^PGWeakNotify; PGWeakNotify = ^TGWeakNotify; TGWeakNotify = procedure(data: gpointer; where_the_object_was: PGObject); cdecl; PPGTypeInstance = ^PGTypeInstance; PGTypeInstance = ^TGTypeInstance; PPGTypeClass = ^PGTypeClass; PGTypeClass = ^TGTypeClass; TGTypeInstance = object g_class: PGTypeClass; end; TGObject = object g_type_instance: TGTypeInstance; ref_count: guint; qdata: PGData; end; TGBinding = object(TGObject) end; PPGValueTransform = ^PGValueTransform; PGValueTransform = ^TGValueTransform; TGValueTransform = procedure(src_value: PGValue; dest_value: PGValue); cdecl; PP_Value__data__union = ^P_Value__data__union; P_Value__data__union = ^T_Value__data__union; T_Value__data__union = record case longint of 0 : (v_int: gint); 1 : (v_uint: guint); 2 : (v_long: glong); 3 : (v_ulong: gulong); 4 : (v_int64: gint64); 5 : (v_uint64: guint64); 6 : (v_float: gfloat); 7 : (v_double: gdouble); 8 : (v_pointer: gpointer); end; TGValue = object g_type: TGType; data: array [0..1] of T_Value__data__union; end; TGBoxedCopyFunc = function(boxed: gpointer): gpointer; cdecl; TGBoxedFreeFunc = procedure(boxed: gpointer); cdecl; PPGClosureNotify = ^PGClosureNotify; PGClosureNotify = ^TGClosureNotify; TGClosureNotify = procedure(data: gpointer; closure: PGClosure); cdecl; PPGClosureMarshal = ^PGClosureMarshal; PGClosureMarshal = ^TGClosureMarshal; TGClosureBitfield0 = bitpacked record ref_count: guint15 { changed from guint to accomodate 15 bitsize requirement }; meta_marshal_nouse: guint1 { changed from guint to accomodate 1 bitsize requirement }; n_guards: guint1 { changed from guint to accomodate 1 bitsize requirement }; n_fnotifiers: guint2 { changed from guint to accomodate 2 bitsize requirement }; n_inotifiers: guint8 { changed from guint to accomodate 8 bitsize requirement }; in_inotify: guint1 { changed from guint to accomodate 1 bitsize requirement }; floating: guint1 { changed from guint to accomodate 1 bitsize requirement }; derivative_flag: guint1 { changed from guint to accomodate 1 bitsize requirement }; in_marshal: guint1 { changed from guint to accomodate 1 bitsize requirement }; is_invalid: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; PPGClosureNotifyData = ^PGClosureNotifyData; PGClosureNotifyData = ^TGClosureNotifyData; TGClosure = object Bitfield0 : TGClosureBitfield0; { auto generated type } marshal: procedure(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; data: gpointer; notifiers: PGClosureNotifyData; end; TGCallback = procedure; cdecl; PPGCClosure = ^PGCClosure; PGCClosure = ^TGCClosure; PPGCallback = ^PGCallback; PGCallback = ^TGCallback; TGCClosure = object closure: TGClosure; callback: gpointer; end; TGClassFinalizeFunc = procedure(g_class: gpointer; class_data: gpointer); cdecl; TGClassInitFunc = procedure(g_class: gpointer; class_data: gpointer); cdecl; TGClosureNotifyData = record data: gpointer; notify: TGClosureNotify; end; PPGConnectFlags = ^PGConnectFlags; PGConnectFlags = ^TGConnectFlags; TGTypeClass = object g_type: TGType; end; PPGEnumValue = ^PGEnumValue; PGEnumValue = ^TGEnumValue; TGEnumValue = record value: gint; value_name: Pgchar; value_nick: Pgchar; end; PPGEnumClass = ^PGEnumClass; PGEnumClass = ^TGEnumClass; TGEnumClass = record g_type_class: TGTypeClass; minimum: gint; maximum: gint; n_values: guint; values: PGEnumValue; end; PPGFlagsValue = ^PGFlagsValue; PGFlagsValue = ^TGFlagsValue; TGFlagsValue = record value: guint; value_name: Pgchar; value_nick: Pgchar; end; PPGFlagsClass = ^PGFlagsClass; PGFlagsClass = ^TGFlagsClass; TGFlagsClass = record g_type_class: TGTypeClass; mask: guint; n_values: guint; values: PGFlagsValue; end; PPGInitiallyUnowned = ^PGInitiallyUnowned; PGInitiallyUnowned = ^TGInitiallyUnowned; TGInitiallyUnowned = object(TGObject) end; PPGObjectConstructParam = ^PGObjectConstructParam; PGObjectConstructParam = ^TGObjectConstructParam; TGObjectConstructParam = record pspec: PGParamSpec; value: PGValue; end; PPGParamFlags = ^PGParamFlags; PGParamFlags = ^TGParamFlags; TGParamSpec = object g_type_instance: TGTypeInstance; name: Pgchar; flags: TGParamFlags; value_type: TGType; owner_type: TGType; _nick: Pgchar; _blurb: Pgchar; qdata: PGData; ref_count: guint; param_id: guint; end; PPGInitiallyUnownedClass = ^PGInitiallyUnownedClass; PGInitiallyUnownedClass = ^TGInitiallyUnownedClass; TGInitiallyUnownedClass = object g_type_class: TGTypeClass; construct_properties: PGSList; constructor_: function(type_: TGType; n_construct_properties: guint; construct_properties: PGObjectConstructParam): PGObject; cdecl; set_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; get_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; dispose: procedure(object_: PGObject); cdecl; finalize: procedure(object_: PGObject); cdecl; dispatch_properties_changed: procedure(object_: PGObject; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; notify: procedure(object_: PGObject; pspec: PGParamSpec); cdecl; constructed: procedure(object_: PGObject); cdecl; flags: gsize; pdummy: array [0..5] of gpointer; end; TGInstanceInitFunc = procedure(instance: PGTypeInstance; g_class: gpointer); cdecl; TGInterfaceFinalizeFunc = procedure(g_iface: gpointer; iface_data: gpointer); cdecl; TGInterfaceInitFunc = procedure(g_iface: gpointer; iface_data: gpointer); cdecl; PPGInterfaceInfo = ^PGInterfaceInfo; PGInterfaceInfo = ^TGInterfaceInfo; PPGInterfaceInitFunc = ^PGInterfaceInitFunc; PGInterfaceInitFunc = ^TGInterfaceInitFunc; PPGInterfaceFinalizeFunc = ^PGInterfaceFinalizeFunc; PGInterfaceFinalizeFunc = ^TGInterfaceFinalizeFunc; TGInterfaceInfo = record interface_init: TGInterfaceInitFunc; interface_finalize: TGInterfaceFinalizeFunc; interface_data: gpointer; end; TGParameter = record name: Pgchar; value: TGValue; end; PPGObjectClass = ^PGObjectClass; PGObjectClass = ^TGObjectClass; TGObjectClass = object g_type_class: TGTypeClass; construct_properties: PGSList; constructor_: function(type_: TGType; n_construct_properties: guint; construct_properties: PGObjectConstructParam): PGObject; cdecl; set_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; get_property: procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; dispose: procedure(object_: PGObject); cdecl; finalize: procedure(object_: PGObject); cdecl; dispatch_properties_changed: procedure(object_: PGObject; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; notify: procedure(object_: PGObject; pspec: PGParamSpec); cdecl; constructed: procedure(object_: PGObject); cdecl; flags: gsize; pdummy: array [0..5] of gpointer; end; TGObjectFinalizeFunc = procedure(object_: PGObject); cdecl; TGObjectGetPropertyFunc = procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; TGObjectSetPropertyFunc = procedure(object_: PGObject; property_id: guint; value: PGValue; pspec: PGParamSpec); cdecl; PPGParamSpecBoolean = ^PGParamSpecBoolean; PGParamSpecBoolean = ^TGParamSpecBoolean; TGParamSpecBoolean = object(TGParamSpec) default_value: gboolean; end; PPGParamSpecBoxed = ^PGParamSpecBoxed; PGParamSpecBoxed = ^TGParamSpecBoxed; TGParamSpecBoxed = object(TGParamSpec) end; PPGParamSpecChar = ^PGParamSpecChar; PGParamSpecChar = ^TGParamSpecChar; TGParamSpecChar = object(TGParamSpec) minimum: gint8; maximum: gint8; default_value: gint8; end; PPGParamSpecClass = ^PGParamSpecClass; PGParamSpecClass = ^TGParamSpecClass; TGParamSpecClass = object g_type_class: TGTypeClass; value_type: TGType; finalize: procedure(pspec: PGParamSpec); cdecl; value_set_default: procedure(pspec: PGParamSpec; value: PGValue); cdecl; value_validate: function(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; values_cmp: function(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; dummy: array [0..3] of gpointer; end; PPGParamSpecDouble = ^PGParamSpecDouble; PGParamSpecDouble = ^TGParamSpecDouble; TGParamSpecDouble = object(TGParamSpec) minimum: gdouble; maximum: gdouble; default_value: gdouble; epsilon: gdouble; end; PPGParamSpecEnum = ^PGParamSpecEnum; PGParamSpecEnum = ^TGParamSpecEnum; TGParamSpecEnum = object(TGParamSpec) enum_class: PGEnumClass; default_value: gint; end; PPGParamSpecFlags = ^PGParamSpecFlags; PGParamSpecFlags = ^TGParamSpecFlags; TGParamSpecFlags = object(TGParamSpec) flags_class: PGFlagsClass; default_value: guint; end; PPGParamSpecFloat = ^PGParamSpecFloat; PGParamSpecFloat = ^TGParamSpecFloat; TGParamSpecFloat = object(TGParamSpec) minimum: gfloat; maximum: gfloat; default_value: gfloat; epsilon: gfloat; end; PPGParamSpecGType = ^PGParamSpecGType; PGParamSpecGType = ^TGParamSpecGType; TGParamSpecGType = object(TGParamSpec) is_a_type: TGType; end; PPGParamSpecInt = ^PGParamSpecInt; PGParamSpecInt = ^TGParamSpecInt; TGParamSpecInt = object(TGParamSpec) minimum: gint; maximum: gint; default_value: gint; end; PPGParamSpecInt64 = ^PGParamSpecInt64; PGParamSpecInt64 = ^TGParamSpecInt64; TGParamSpecInt64 = object(TGParamSpec) minimum: gint64; maximum: gint64; default_value: gint64; end; PPGParamSpecLong = ^PGParamSpecLong; PGParamSpecLong = ^TGParamSpecLong; TGParamSpecLong = object(TGParamSpec) minimum: glong; maximum: glong; default_value: glong; end; PPGParamSpecObject = ^PGParamSpecObject; PGParamSpecObject = ^TGParamSpecObject; TGParamSpecObject = object(TGParamSpec) end; PPGParamSpecOverride = ^PGParamSpecOverride; PGParamSpecOverride = ^TGParamSpecOverride; TGParamSpecOverride = object(TGParamSpec) overridden: PGParamSpec; end; PPGParamSpecParam = ^PGParamSpecParam; PGParamSpecParam = ^TGParamSpecParam; TGParamSpecParam = object(TGParamSpec) end; PPGParamSpecPointer = ^PGParamSpecPointer; PGParamSpecPointer = ^TGParamSpecPointer; TGParamSpecPointer = object(TGParamSpec) end; PPGParamSpecPool = ^PGParamSpecPool; PGParamSpecPool = ^TGParamSpecPool; TGParamSpecPool = object end; PPGParamSpecString = ^PGParamSpecString; PGParamSpecString = ^TGParamSpecString; TGParamSpecStringBitfield0 = bitpacked record null_fold_if_empty: guint1 { changed from guint to accomodate 1 bitsize requirement }; ensure_non_null: guint1 { changed from guint to accomodate 1 bitsize requirement }; end; TGParamSpecString = object(TGParamSpec) default_value: Pgchar; cset_first: Pgchar; cset_nth: Pgchar; substitutor: gchar; Bitfield0 : TGParamSpecStringBitfield0; { auto generated type } end; PPGParamSpecTypeInfo = ^PGParamSpecTypeInfo; PGParamSpecTypeInfo = ^TGParamSpecTypeInfo; TGParamSpecTypeInfo = record instance_size: guint16; n_preallocs: guint16; instance_init: procedure(pspec: PGParamSpec); cdecl; value_type: TGType; finalize: procedure(pspec: PGParamSpec); cdecl; value_set_default: procedure(pspec: PGParamSpec; value: PGValue); cdecl; value_validate: function(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; values_cmp: function(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; end; PPGParamSpecUChar = ^PGParamSpecUChar; PGParamSpecUChar = ^TGParamSpecUChar; TGParamSpecUChar = object(TGParamSpec) minimum: guint8; maximum: guint8; default_value: guint8; end; PPGParamSpecUInt = ^PGParamSpecUInt; PGParamSpecUInt = ^TGParamSpecUInt; TGParamSpecUInt = object(TGParamSpec) minimum: guint; maximum: guint; default_value: guint; end; PPGParamSpecUInt64 = ^PGParamSpecUInt64; PGParamSpecUInt64 = ^TGParamSpecUInt64; TGParamSpecUInt64 = object(TGParamSpec) minimum: guint64; maximum: guint64; default_value: guint64; end; PPGParamSpecULong = ^PGParamSpecULong; PGParamSpecULong = ^TGParamSpecULong; TGParamSpecULong = object(TGParamSpec) minimum: gulong; maximum: gulong; default_value: gulong; end; PPGParamSpecUnichar = ^PGParamSpecUnichar; PGParamSpecUnichar = ^TGParamSpecUnichar; TGParamSpecUnichar = object(TGParamSpec) default_value: gunichar; end; PPGParamSpecValueArray = ^PGParamSpecValueArray; PGParamSpecValueArray = ^TGParamSpecValueArray; TGParamSpecValueArray = object(TGParamSpec) element_spec: PGParamSpec; fixed_n_elements: guint; end; PPGParamSpecVariant = ^PGParamSpecVariant; PGParamSpecVariant = ^TGParamSpecVariant; TGParamSpecVariant = object(TGParamSpec) type_: PGVariantType; default_value: PGVariant; padding: array [0..3] of gpointer; end; PPGSignalInvocationHint = ^PGSignalInvocationHint; PGSignalInvocationHint = ^TGSignalInvocationHint; PPGSignalFlags = ^PGSignalFlags; PGSignalFlags = ^TGSignalFlags; TGSignalInvocationHint = record signal_id: guint; detail: TGQuark; run_type: TGSignalFlags; end; TGSignalAccumulator = function(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; data: gpointer): gboolean; cdecl; TGSignalEmissionHook = function(ihint: PGSignalInvocationHint; n_param_values: guint; param_values: PGValue; data: gpointer): gboolean; cdecl; PPGSignalMatchType = ^PGSignalMatchType; PGSignalMatchType = ^TGSignalMatchType; PPGSignalQuery = ^PGSignalQuery; PGSignalQuery = ^TGSignalQuery; TGSignalQuery = record signal_id: guint; signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; return_type: TGType; n_params: guint; param_types: PGType; end; TGTypeCValue = record case longint of 0 : (v_int: gint); 1 : (v_long: glong); 2 : (v_int64: gint64); 3 : (v_double: gdouble); 4 : (v_pointer: gpointer); end; TGTypeClassCacheFunc = function(cache_data: gpointer; g_class: PGTypeClass): gboolean; cdecl; PPGTypeDebugFlags = ^PGTypeDebugFlags; PGTypeDebugFlags = ^TGTypeDebugFlags; PPGTypeFlags = ^PGTypeFlags; PGTypeFlags = ^TGTypeFlags; PPGTypeFundamentalFlags = ^PGTypeFundamentalFlags; PGTypeFundamentalFlags = ^TGTypeFundamentalFlags; PPGTypeFundamentalInfo = ^PGTypeFundamentalInfo; PGTypeFundamentalInfo = ^TGTypeFundamentalInfo; TGTypeFundamentalInfo = record type_flags: TGTypeFundamentalFlags; end; PPGTypeValueTable = ^PGTypeValueTable; PGTypeValueTable = ^TGTypeValueTable; PPGTypeCValue = ^PGTypeCValue; PGTypeCValue = ^TGTypeCValue; TGTypeValueTable = object value_init: procedure(value: PGValue); cdecl; value_free: procedure(value: PGValue); cdecl; value_copy: procedure(src_value: PGValue; dest_value: PGValue); cdecl; value_peek_pointer: function(value: PGValue): gpointer; cdecl; collect_format: Pgchar; collect_value: function(value: PGValue; n_collect_values: guint; collect_values: PGTypeCValue; collect_flags: guint): Pgchar; cdecl; lcopy_format: Pgchar; lcopy_value: function(value: PGValue; n_collect_values: guint; collect_values: PGTypeCValue; collect_flags: guint): Pgchar; cdecl; end; PPGTypeInfo = ^PGTypeInfo; PGTypeInfo = ^TGTypeInfo; PPGBaseInitFunc = ^PGBaseInitFunc; PGBaseInitFunc = ^TGBaseInitFunc; PPGBaseFinalizeFunc = ^PGBaseFinalizeFunc; PGBaseFinalizeFunc = ^TGBaseFinalizeFunc; PPGClassInitFunc = ^PGClassInitFunc; PGClassInitFunc = ^TGClassInitFunc; PPGClassFinalizeFunc = ^PGClassFinalizeFunc; PGClassFinalizeFunc = ^TGClassFinalizeFunc; PPGInstanceInitFunc = ^PGInstanceInitFunc; PGInstanceInitFunc = ^TGInstanceInitFunc; TGTypeInfo = record class_size: guint16; base_init: TGBaseInitFunc; base_finalize: TGBaseFinalizeFunc; class_init: TGClassInitFunc; class_finalize: TGClassFinalizeFunc; class_data: Pgpointer; instance_size: guint16; n_preallocs: guint16; instance_init: TGInstanceInitFunc; value_table: PGTypeValueTable; end; PPGTypeInterface = ^PGTypeInterface; PGTypeInterface = ^TGTypeInterface; PPGTypePlugin = ^PGTypePlugin; PGTypePlugin = ^TGTypePlugin; TGTypeInterface = object g_type: TGType; g_instance_type: TGType; end; TGTypePlugin = object end; TGTypeInterfaceCheckFunc = procedure(check_data: gpointer; g_iface: gpointer); cdecl; PPGTypeModule = ^PGTypeModule; PGTypeModule = ^TGTypeModule; TGTypeModule = object(TGObject) use_count: guint; type_infos: PGSList; interface_infos: PGSList; name: Pgchar; end; PPGTypeModuleClass = ^PGTypeModuleClass; PGTypeModuleClass = ^TGTypeModuleClass; TGTypeModuleClass = object parent_class: TGObjectClass; load: function(module: PGTypeModule): gboolean; cdecl; unload: procedure(module: PGTypeModule); cdecl; reserved1: procedure; cdecl; reserved2: procedure; cdecl; reserved3: procedure; cdecl; reserved4: procedure; cdecl; end; TGTypePluginUse = procedure(plugin: PGTypePlugin); cdecl; TGTypePluginUnuse = procedure(plugin: PGTypePlugin); cdecl; TGTypePluginCompleteTypeInfo = procedure(plugin: PGTypePlugin; g_type: TGType; info: PGTypeInfo; value_table: PGTypeValueTable); cdecl; TGTypePluginCompleteInterfaceInfo = procedure(plugin: PGTypePlugin; instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; PPGTypePluginClass = ^PGTypePluginClass; PGTypePluginClass = ^TGTypePluginClass; PPGTypePluginUse = ^PGTypePluginUse; PGTypePluginUse = ^TGTypePluginUse; PPGTypePluginUnuse = ^PGTypePluginUnuse; PGTypePluginUnuse = ^TGTypePluginUnuse; PPGTypePluginCompleteTypeInfo = ^PGTypePluginCompleteTypeInfo; PGTypePluginCompleteTypeInfo = ^TGTypePluginCompleteTypeInfo; PPGTypePluginCompleteInterfaceInfo = ^PGTypePluginCompleteInterfaceInfo; PGTypePluginCompleteInterfaceInfo = ^TGTypePluginCompleteInterfaceInfo; TGTypePluginClass = record base_iface: TGTypeInterface; use_plugin: TGTypePluginUse; unuse_plugin: TGTypePluginUnuse; complete_type_info: TGTypePluginCompleteTypeInfo; complete_interface_info: TGTypePluginCompleteInterfaceInfo; end; PPGTypeQuery = ^PGTypeQuery; PGTypeQuery = ^TGTypeQuery; TGTypeQuery = record type_: TGType; type_name: Pgchar; class_size: guint; instance_size: guint; end; PPGValueArray = ^PGValueArray; PGValueArray = ^TGValueArray; TGValueArray = object n_values: guint; values: PGValue; n_prealloced: guint; end; PPGWeakRef = ^PGWeakRef; PGWeakRef = ^TGWeakRef; TGWeakRef_union_priv = record case longint of 0 : (p: gpointer); end; TGWeakRef = object priv: TGWeakRef_union_priv; //union extracted from object and named 'TGWeakRef_union_priv' end; function g_binding_get_flags(binding: PGBinding): TGBindingFlags; cdecl; external; function g_binding_get_source(binding: PGBinding): PGObject; cdecl; external; function g_binding_get_source_property(binding: PGBinding): Pgchar; cdecl; external; function g_binding_get_target(binding: PGBinding): PGObject; cdecl; external; function g_binding_get_target_property(binding: PGBinding): Pgchar; cdecl; external; function g_binding_get_type: TGType; cdecl; external; function g_boxed_copy(boxed_type: TGType; src_boxed: Pgpointer): gpointer; cdecl; external; function g_boxed_type_register_static(name: Pgchar; boxed_copy: TGBoxedCopyFunc; boxed_free: TGBoxedFreeFunc): TGType; cdecl; external; function g_cclosure_new(callback_func: TGCallback; user_data: gpointer; destroy_data: TGClosureNotify): PGClosure; cdecl; external; function g_cclosure_new_object(callback_func: TGCallback; object_: PGObject): PGClosure; cdecl; external; function g_cclosure_new_object_swap(callback_func: TGCallback; object_: PGObject): PGClosure; cdecl; external; function g_cclosure_new_swap(callback_func: TGCallback; user_data: gpointer; destroy_data: TGClosureNotify): PGClosure; cdecl; external; function g_closure_get_type: TGType; cdecl; external; function g_closure_new_object(sizeof_closure: guint; object_: PGObject): PGClosure; cdecl; external; function g_closure_new_simple(sizeof_closure: guint; data: gpointer): PGClosure; cdecl; external; function g_closure_ref(closure: PGClosure): PGClosure; cdecl; external; function g_enum_get_value(enum_class: PGEnumClass; value: gint): PGEnumValue; cdecl; external; function g_enum_get_value_by_name(enum_class: PGEnumClass; name: Pgchar): PGEnumValue; cdecl; external; function g_enum_get_value_by_nick(enum_class: PGEnumClass; nick: Pgchar): PGEnumValue; cdecl; external; function g_enum_register_static(name: Pgchar; const_static_values: PGEnumValue): TGType; cdecl; external; function g_flags_get_first_value(flags_class: PGFlagsClass; value: guint): PGFlagsValue; cdecl; external; function g_flags_get_value_by_name(flags_class: PGFlagsClass; name: Pgchar): PGFlagsValue; cdecl; external; function g_flags_get_value_by_nick(flags_class: PGFlagsClass; nick: Pgchar): PGFlagsValue; cdecl; external; function g_flags_register_static(name: Pgchar; const_static_values: PGFlagsValue): TGType; cdecl; external; function g_gtype_get_type: TGType; cdecl; external; function g_initially_unowned_get_type: TGType; cdecl; external; function g_object_bind_property(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags): PGBinding; cdecl; external; function g_object_bind_property_full(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags; transform_to: TGBindingTransformFunc; transform_from: TGBindingTransformFunc; user_data: gpointer; notify: TGDestroyNotify): PGBinding; cdecl; external; function g_object_bind_property_with_closures(source: PGObject; source_property: Pgchar; target: PGObject; target_property: Pgchar; flags: TGBindingFlags; transform_to: PGClosure; transform_from: PGClosure): PGBinding; cdecl; external; function g_object_class_find_property(oclass: PGObjectClass; property_name: Pgchar): PGParamSpec; cdecl; external; function g_object_class_list_properties(oclass: PGObjectClass; n_properties: Pguint): PPGParamSpec; cdecl; external; function g_object_compat_control(what: gsize; data: gpointer): gsize; cdecl; external; function g_object_connect(object_: gpointer; signal_spec: Pgchar; args: array of const): gpointer; cdecl; external; function g_object_dup_data(object_: PGObject; key: Pgchar; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_object_dup_qdata(object_: PGObject; quark: TGQuark; dup_func: TGDuplicateFunc; user_data: gpointer): gpointer; cdecl; external; function g_object_get_data(object_: PGObject; key: Pgchar): gpointer; cdecl; external; function g_object_get_qdata(object_: PGObject; quark: TGQuark): gpointer; cdecl; external; function g_object_get_type: TGType; cdecl; external; function g_object_interface_find_property(g_iface: gpointer; property_name: Pgchar): PGParamSpec; cdecl; external; function g_object_interface_list_properties(g_iface: gpointer; n_properties_p: Pguint): PPGParamSpec; cdecl; external; function g_object_is_floating(object_: PGObject): gboolean; cdecl; external; function g_object_new(object_type: TGType; first_property_name: Pgchar; args: array of const): gpointer; cdecl; external; function g_object_new_valist(object_type: TGType; first_property_name: Pgchar; var_args: Tva_list): PGObject; cdecl; external; function g_object_newv(object_type: TGType; n_parameters: guint; parameters: PGParameter): PGObject; cdecl; external; function g_object_ref(object_: PGObject): PGObject; cdecl; external; function g_object_ref_sink(object_: PGObject): PGObject; cdecl; external; function g_object_replace_data(object_: PGObject; key: Pgchar; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_object_replace_qdata(object_: PGObject; quark: TGQuark; oldval: gpointer; newval: gpointer; destroy_: TGDestroyNotify; old_destroy: PGDestroyNotify): gboolean; cdecl; external; function g_object_steal_data(object_: PGObject; key: Pgchar): gpointer; cdecl; external; function g_object_steal_qdata(object_: PGObject; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_boolean(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: gboolean; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_boxed(name: Pgchar; nick: Pgchar; blurb: Pgchar; boxed_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_char(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint8; maximum: gint8; default_value: gint8; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_double(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gdouble; maximum: gdouble; default_value: gdouble; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_enum(name: Pgchar; nick: Pgchar; blurb: Pgchar; enum_type: TGType; default_value: gint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_flags(name: Pgchar; nick: Pgchar; blurb: Pgchar; flags_type: TGType; default_value: guint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_float(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gfloat; maximum: gfloat; default_value: gfloat; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_get_blurb(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_name(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_nick(pspec: PGParamSpec): Pgchar; cdecl; external; function g_param_spec_get_qdata(pspec: PGParamSpec; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_get_redirect_target(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_gtype(name: Pgchar; nick: Pgchar; blurb: Pgchar; is_a_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_int(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint; maximum: gint; default_value: gint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_int64(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gint64; maximum: gint64; default_value: gint64; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_internal(param_type: TGType; name: Pgchar; nick: Pgchar; blurb: Pgchar; flags: TGParamFlags): gpointer; cdecl; external; function g_param_spec_long(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: glong; maximum: glong; default_value: glong; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_object(name: Pgchar; nick: Pgchar; blurb: Pgchar; object_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_override(name: Pgchar; overridden: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_param(name: Pgchar; nick: Pgchar; blurb: Pgchar; param_type: TGType; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_pointer(name: Pgchar; nick: Pgchar; blurb: Pgchar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_pool_list(pool: PGParamSpecPool; owner_type: TGType; n_pspecs_p: Pguint): PPGParamSpec; cdecl; external; function g_param_spec_pool_list_owned(pool: PGParamSpecPool; owner_type: TGType): PGList; cdecl; external; function g_param_spec_pool_lookup(pool: PGParamSpecPool; param_name: Pgchar; owner_type: TGType; walk_ancestors: gboolean): PGParamSpec; cdecl; external; function g_param_spec_pool_new(type_prefixing: gboolean): PGParamSpecPool; cdecl; external; function g_param_spec_ref(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_ref_sink(pspec: PGParamSpec): PGParamSpec; cdecl; external; function g_param_spec_steal_qdata(pspec: PGParamSpec; quark: TGQuark): gpointer; cdecl; external; function g_param_spec_string(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: Pgchar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uchar(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint8; maximum: guint8; default_value: guint8; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uint(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint; maximum: guint; default_value: guint; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_uint64(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: guint64; maximum: guint64; default_value: guint64; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_ulong(name: Pgchar; nick: Pgchar; blurb: Pgchar; minimum: gulong; maximum: gulong; default_value: gulong; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_unichar(name: Pgchar; nick: Pgchar; blurb: Pgchar; default_value: gunichar; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_value_array(name: Pgchar; nick: Pgchar; blurb: Pgchar; element_spec: PGParamSpec; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_spec_variant(name: Pgchar; nick: Pgchar; blurb: Pgchar; type_: PGVariantType; default_value: PGVariant; flags: TGParamFlags): PGParamSpec; cdecl; external; function g_param_type_register_static(name: Pgchar; pspec_info: PGParamSpecTypeInfo): TGType; cdecl; external; function g_param_value_convert(pspec: PGParamSpec; src_value: PGValue; dest_value: PGValue; strict_validation: gboolean): gboolean; cdecl; external; function g_param_value_defaults(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; external; function g_param_value_validate(pspec: PGParamSpec; value: PGValue): gboolean; cdecl; external; function g_param_values_cmp(pspec: PGParamSpec; value1: PGValue; value2: PGValue): gint; cdecl; external; function g_pointer_type_register_static(name: Pgchar): TGType; cdecl; external; function g_signal_accumulator_first_wins(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; dummy: gpointer): gboolean; cdecl; external; function g_signal_accumulator_true_handled(ihint: PGSignalInvocationHint; return_accu: PGValue; handler_return: PGValue; dummy: gpointer): gboolean; cdecl; external; function g_signal_add_emission_hook(signal_id: guint; detail: TGQuark; hook_func: TGSignalEmissionHook; hook_data: gpointer; data_destroy: TGDestroyNotify): gulong; cdecl; external; function g_signal_connect_closure(instance: gpointer; detailed_signal: Pgchar; closure: PGClosure; after: gboolean): gulong; cdecl; external; function g_signal_connect_closure_by_id(instance: gpointer; signal_id: guint; detail: TGQuark; closure: PGClosure; after: gboolean): gulong; cdecl; external; function g_signal_connect_data(instance: gpointer; detailed_signal: Pgchar; c_handler: TGCallback; data: gpointer; destroy_data: TGClosureNotify; connect_flags: TGConnectFlags): gulong; cdecl; external; function g_signal_connect_object(instance: gpointer; detailed_signal: Pgchar; c_handler: TGCallback; gobject: gpointer; connect_flags: TGConnectFlags): gulong; cdecl; external; function g_signal_get_invocation_hint(instance: gpointer): PGSignalInvocationHint; cdecl; external; function g_signal_handler_find(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): gulong; cdecl; external; function g_signal_handler_is_connected(instance: gpointer; handler_id: gulong): gboolean; cdecl; external; function g_signal_handlers_block_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_handlers_disconnect_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_handlers_unblock_matched(instance: gpointer; mask: TGSignalMatchType; signal_id: guint; detail: TGQuark; closure: PGClosure; func: gpointer; data: gpointer): guint; cdecl; external; function g_signal_has_handler_pending(instance: gpointer; signal_id: guint; detail: TGQuark; may_be_blocked: gboolean): gboolean; cdecl; external; function g_signal_list_ids(itype: TGType; n_ids: Pguint): Pguint; cdecl; external; function g_signal_lookup(name: Pgchar; itype: TGType): guint; cdecl; external; function g_signal_name(signal_id: guint): Pgchar; cdecl; external; function g_signal_new(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_offset: guint; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: array of const): guint; cdecl; external; function g_signal_new_class_handler(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_handler: TGCallback; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: array of const): guint; cdecl; external; function g_signal_new_valist(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_closure: PGClosure; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; args: Tva_list): guint; cdecl; external; function g_signal_newv(signal_name: Pgchar; itype: TGType; signal_flags: TGSignalFlags; class_closure: PGClosure; accumulator: TGSignalAccumulator; accu_data: gpointer; c_marshaller: TGSignalCMarshaller; return_type: TGType; n_params: guint; param_types: PGType): guint; cdecl; external; function g_signal_parse_name(detailed_signal: Pgchar; itype: TGType; signal_id_p: Pguint; detail_p: PGQuark; force_detail_quark: gboolean): gboolean; cdecl; external; function g_signal_type_cclosure_new(itype: TGType; struct_offset: guint): PGClosure; cdecl; external; function g_strdup_value_contents(value: PGValue): Pgchar; cdecl; external; function g_type_check_class_cast(g_class: PGTypeClass; is_a_type: TGType): PGTypeClass; cdecl; external; function g_type_check_class_is_a(g_class: PGTypeClass; is_a_type: TGType): gboolean; cdecl; external; function g_type_check_instance(instance: PGTypeInstance): gboolean; cdecl; external; function g_type_check_instance_cast(instance: PGTypeInstance; iface_type: TGType): PGTypeInstance; cdecl; external; function g_type_check_instance_is_a(instance: PGTypeInstance; iface_type: TGType): gboolean; cdecl; external; function g_type_check_is_value_type(type_: TGType): gboolean; cdecl; external; function g_type_check_value(value: PGValue): gboolean; cdecl; external; function g_type_check_value_holds(value: PGValue; type_: TGType): gboolean; cdecl; external; function g_type_children(type_: TGType; n_children: Pguint): PGType; cdecl; external; function g_type_class_get_private(klass: PGTypeClass; private_type: TGType): gpointer; cdecl; external; function g_type_class_peek(type_: TGType): PGTypeClass; cdecl; external; function g_type_class_peek_parent(g_class: PGTypeClass): PGTypeClass; cdecl; external; function g_type_class_peek_static(type_: TGType): PGTypeClass; cdecl; external; function g_type_class_ref(type_: TGType): PGTypeClass; cdecl; external; function g_type_create_instance(type_: TGType): PGTypeInstance; cdecl; external; function g_type_default_interface_peek(g_type: TGType): PGTypeInterface; cdecl; external; function g_type_default_interface_ref(g_type: TGType): PGTypeInterface; cdecl; external; function g_type_depth(type_: TGType): guint; cdecl; external; function g_type_from_name(name: Pgchar): TGType; cdecl; external; function g_type_fundamental(type_id: TGType): TGType; cdecl; external; function g_type_fundamental_next: TGType; cdecl; external; function g_type_get_plugin(type_: TGType): PGTypePlugin; cdecl; external; function g_type_get_qdata(type_: TGType; quark: TGQuark): gpointer; cdecl; external; function g_type_get_type_registration_serial: guint; cdecl; external; function g_type_instance_get_private(instance: PGTypeInstance; private_type: TGType): gpointer; cdecl; external; function g_type_interface_get_plugin(instance_type: TGType; interface_type: TGType): PGTypePlugin; cdecl; external; function g_type_interface_peek(instance_class: PGTypeClass; iface_type: TGType): PGTypeInterface; cdecl; external; function g_type_interface_peek_parent(g_iface: PGTypeInterface): PGTypeInterface; cdecl; external; function g_type_interface_prerequisites(interface_type: TGType; n_prerequisites: Pguint): PGType; cdecl; external; function g_type_interfaces(type_: TGType; n_interfaces: Pguint): PGType; cdecl; external; function g_type_is_a(type_: TGType; is_a_type: TGType): gboolean; cdecl; external; function g_type_module_get_type: TGType; cdecl; external; function g_type_module_register_enum(module: PGTypeModule; name: Pgchar; const_static_values: PGEnumValue): TGType; cdecl; external; function g_type_module_register_flags(module: PGTypeModule; name: Pgchar; const_static_values: PGFlagsValue): TGType; cdecl; external; function g_type_module_register_type(module: PGTypeModule; parent_type: TGType; type_name: Pgchar; type_info: PGTypeInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_module_use(module: PGTypeModule): gboolean; cdecl; external; function g_type_name(type_: TGType): Pgchar; cdecl; external; function g_type_name_from_class(g_class: PGTypeClass): Pgchar; cdecl; external; function g_type_name_from_instance(instance: PGTypeInstance): Pgchar; cdecl; external; function g_type_next_base(leaf_type: TGType; root_type: TGType): TGType; cdecl; external; function g_type_parent(type_: TGType): TGType; cdecl; external; function g_type_plugin_get_type: TGType; cdecl; external; function g_type_qname(type_: TGType): TGQuark; cdecl; external; function g_type_register_dynamic(parent_type: TGType; type_name: Pgchar; plugin: PGTypePlugin; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_fundamental(type_id: TGType; type_name: Pgchar; info: PGTypeInfo; finfo: PGTypeFundamentalInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_static(parent_type: TGType; type_name: Pgchar; info: PGTypeInfo; flags: TGTypeFlags): TGType; cdecl; external; function g_type_register_static_simple(parent_type: TGType; type_name: Pgchar; class_size: guint; class_init: TGClassInitFunc; instance_size: guint; instance_init: TGInstanceInitFunc; flags: TGTypeFlags): TGType; cdecl; external; function g_type_test_flags(type_: TGType; flags: guint): gboolean; cdecl; external; function g_type_value_table_peek(type_: TGType): PGTypeValueTable; cdecl; external; function g_value_array_get_type: TGType; cdecl; external; function g_value_dup_boxed(value: PGValue): gpointer; cdecl; external; function g_value_dup_object(value: PGValue): PGObject; cdecl; external; function g_value_dup_param(value: PGValue): PGParamSpec; cdecl; external; function g_value_dup_string(value: PGValue): Pgchar; cdecl; external; function g_value_dup_variant(value: PGValue): PGVariant; cdecl; external; function g_value_fits_pointer(value: PGValue): gboolean; cdecl; external; function g_value_get_boolean(value: PGValue): gboolean; cdecl; external; function g_value_get_boxed(value: PGValue): gpointer; cdecl; external; function g_value_get_double(value: PGValue): gdouble; cdecl; external; function g_value_get_enum(value: PGValue): gint; cdecl; external; function g_value_get_flags(value: PGValue): guint; cdecl; external; function g_value_get_float(value: PGValue): gfloat; cdecl; external; function g_value_get_gtype(value: PGValue): TGType; cdecl; external; function g_value_get_int(value: PGValue): gint; cdecl; external; function g_value_get_int64(value: PGValue): gint64; cdecl; external; function g_value_get_long(value: PGValue): glong; cdecl; external; function g_value_get_object(value: PGValue): PGObject; cdecl; external; function g_value_get_param(value: PGValue): PGParamSpec; cdecl; external; function g_value_get_pointer(value: PGValue): gpointer; cdecl; external; function g_value_get_schar(value: PGValue): gint8; cdecl; external; function g_value_get_string(value: PGValue): Pgchar; cdecl; external; function g_value_get_type: TGType; cdecl; external; function g_value_get_uchar(value: PGValue): guint8; cdecl; external; function g_value_get_uint(value: PGValue): guint; cdecl; external; function g_value_get_uint64(value: PGValue): guint64; cdecl; external; function g_value_get_ulong(value: PGValue): gulong; cdecl; external; function g_value_get_variant(value: PGValue): PGVariant; cdecl; external; function g_value_init(value: PGValue; g_type: TGType): PGValue; cdecl; external; function g_value_peek_pointer(value: PGValue): gpointer; cdecl; external; function g_value_reset(value: PGValue): PGValue; cdecl; external; function g_value_transform(src_value: PGValue; dest_value: PGValue): gboolean; cdecl; external; function g_value_type_compatible(src_type: TGType; dest_type: TGType): gboolean; cdecl; external; function g_value_type_transformable(src_type: TGType; dest_type: TGType): gboolean; cdecl; external; function g_weak_ref_get(weak_ref: PGWeakRef): PGObject; cdecl; external; procedure g_boxed_free(boxed_type: TGType; boxed: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__BOXED_BOXED(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__BOXED_BOXEDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__FLAGS(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_BOOLEAN__FLAGSv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_generic(closure: PGClosure; return_gvalue: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_generic_va(closure: PGClosure; return_value: PGValue; instance: gpointer; args_list: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_STRING__OBJECT_POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_STRING__OBJECT_POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__BOOLEAN(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__BOOLEANv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__BOXED(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__BOXEDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__CHAR(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__CHARv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__DOUBLE(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__DOUBLEv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__ENUM(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__ENUMv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__FLAGS(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__FLAGSv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__FLOAT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__FLOATv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__INT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__INTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__LONG(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__LONGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__OBJECT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__OBJECTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__PARAM(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__PARAMv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__STRING(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__STRINGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UCHAR(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UCHARv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UINT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UINT_POINTER(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__UINT_POINTERv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__UINTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__ULONG(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__ULONGv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__VARIANT(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__VARIANTv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_cclosure_marshal_VOID__VOID(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer; marshal_data: gpointer); cdecl; external; procedure g_cclosure_marshal_VOID__VOIDv(closure: PGClosure; return_value: PGValue; instance: gpointer; args: Tva_list; marshal_data: gpointer; n_params: gint; param_types: PGType); cdecl; external; procedure g_clear_object(object_ptr: PPGObject); cdecl; external; procedure g_closure_add_finalize_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_add_invalidate_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_add_marshal_guards(closure: PGClosure; pre_marshal_data: gpointer; pre_marshal_notify: TGClosureNotify; post_marshal_data: gpointer; post_marshal_notify: TGClosureNotify); cdecl; external; procedure g_closure_invalidate(closure: PGClosure); cdecl; external; procedure g_closure_invoke(closure: PGClosure; return_value: PGValue; n_param_values: guint; param_values: PGValue; invocation_hint: gpointer); cdecl; external; procedure g_closure_remove_finalize_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_remove_invalidate_notifier(closure: PGClosure; notify_data: gpointer; notify_func: TGClosureNotify); cdecl; external; procedure g_closure_set_marshal(closure: PGClosure; marshal: TGClosureMarshal); cdecl; external; procedure g_closure_set_meta_marshal(closure: PGClosure; marshal_data: gpointer; meta_marshal: TGClosureMarshal); cdecl; external; procedure g_closure_sink(closure: PGClosure); cdecl; external; procedure g_closure_unref(closure: PGClosure); cdecl; external; procedure g_enum_complete_type_info(g_enum_type: TGType; info: PGTypeInfo; const_values: PGEnumValue); cdecl; external; procedure g_flags_complete_type_info(g_flags_type: TGType; info: PGTypeInfo; const_values: PGFlagsValue); cdecl; external; procedure g_object_add_toggle_ref(object_: PGObject; notify: TGToggleNotify; data: gpointer); cdecl; external; procedure g_object_add_weak_pointer(object_: PGObject; weak_pointer_location: Pgpointer); cdecl; external; procedure g_object_class_install_properties(oclass: PGObjectClass; n_pspecs: guint; pspecs: PPGParamSpec); cdecl; external; procedure g_object_class_install_property(oclass: PGObjectClass; property_id: guint; pspec: PGParamSpec); cdecl; external; procedure g_object_class_override_property(oclass: PGObjectClass; property_id: guint; name: Pgchar); cdecl; external; procedure g_object_disconnect(object_: gpointer; signal_spec: Pgchar; args: array of const); cdecl; external; procedure g_object_force_floating(object_: PGObject); cdecl; external; procedure g_object_freeze_notify(object_: PGObject); cdecl; external; procedure g_object_get(object_: gpointer; first_property_name: Pgchar; args: array of const); cdecl; external; procedure g_object_get_property(object_: PGObject; property_name: Pgchar; value: PGValue); cdecl; external; procedure g_object_get_valist(object_: PGObject; first_property_name: Pgchar; var_args: Tva_list); cdecl; external; procedure g_object_interface_install_property(g_iface: gpointer; pspec: PGParamSpec); cdecl; external; procedure g_object_notify(object_: PGObject; property_name: Pgchar); cdecl; external; procedure g_object_notify_by_pspec(object_: PGObject; pspec: PGParamSpec); cdecl; external; procedure g_object_remove_toggle_ref(object_: PGObject; notify: TGToggleNotify; data: gpointer); cdecl; external; procedure g_object_remove_weak_pointer(object_: PGObject; weak_pointer_location: Pgpointer); cdecl; external; procedure g_object_run_dispose(object_: PGObject); cdecl; external; procedure g_object_set(object_: gpointer; first_property_name: Pgchar; args: array of const); cdecl; external; procedure g_object_set_data(object_: PGObject; key: Pgchar; data: gpointer); cdecl; external; procedure g_object_set_data_full(object_: PGObject; key: Pgchar; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_object_set_property(object_: PGObject; property_name: Pgchar; value: PGValue); cdecl; external; procedure g_object_set_qdata(object_: PGObject; quark: TGQuark; data: gpointer); cdecl; external; procedure g_object_set_qdata_full(object_: PGObject; quark: TGQuark; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_object_set_valist(object_: PGObject; first_property_name: Pgchar; var_args: Tva_list); cdecl; external; procedure g_object_thaw_notify(object_: PGObject); cdecl; external; procedure g_object_unref(object_: PGObject); cdecl; external; procedure g_object_watch_closure(object_: PGObject; closure: PGClosure); cdecl; external; procedure g_object_weak_ref(object_: PGObject; notify: TGWeakNotify; data: gpointer); cdecl; external; procedure g_object_weak_unref(object_: PGObject; notify: TGWeakNotify; data: gpointer); cdecl; external; procedure g_param_spec_pool_insert(pool: PGParamSpecPool; pspec: PGParamSpec; owner_type: TGType); cdecl; external; procedure g_param_spec_pool_remove(pool: PGParamSpecPool; pspec: PGParamSpec); cdecl; external; procedure g_param_spec_set_qdata(pspec: PGParamSpec; quark: TGQuark; data: gpointer); cdecl; external; procedure g_param_spec_set_qdata_full(pspec: PGParamSpec; quark: TGQuark; data: gpointer; destroy_: TGDestroyNotify); cdecl; external; procedure g_param_spec_sink(pspec: PGParamSpec); cdecl; external; procedure g_param_spec_unref(pspec: PGParamSpec); cdecl; external; procedure g_param_value_set_default(pspec: PGParamSpec; value: PGValue); cdecl; external; procedure g_signal_chain_from_overridden(instance_and_params: PGValue; return_value: PGValue); cdecl; external; procedure g_signal_chain_from_overridden_handler(instance: gpointer; args: array of const); cdecl; external; procedure g_signal_emit(instance: gpointer; signal_id: guint; detail: TGQuark; args: array of const); cdecl; external; procedure g_signal_emit_by_name(instance: gpointer; detailed_signal: Pgchar; args: array of const); cdecl; external; procedure g_signal_emit_valist(instance: gpointer; signal_id: guint; detail: TGQuark; var_args: Tva_list); cdecl; external; procedure g_signal_emitv(instance_and_params: PGValue; signal_id: guint; detail: TGQuark; return_value: PGValue); cdecl; external; procedure g_signal_handler_block(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handler_disconnect(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handler_unblock(instance: gpointer; handler_id: gulong); cdecl; external; procedure g_signal_handlers_destroy(instance: gpointer); cdecl; external; procedure g_signal_override_class_closure(signal_id: guint; instance_type: TGType; class_closure: PGClosure); cdecl; external; procedure g_signal_override_class_handler(signal_name: Pgchar; instance_type: TGType; class_handler: TGCallback); cdecl; external; procedure g_signal_query(signal_id: guint; query: PGSignalQuery); cdecl; external; procedure g_signal_remove_emission_hook(signal_id: guint; hook_id: gulong); cdecl; external; procedure g_signal_set_va_marshaller(signal_id: guint; instance_type: TGType; va_marshaller: TGSignalCVaMarshaller); cdecl; external; procedure g_signal_stop_emission(instance: gpointer; signal_id: guint; detail: TGQuark); cdecl; external; procedure g_signal_stop_emission_by_name(instance: gpointer; detailed_signal: Pgchar); cdecl; external; procedure g_source_set_closure(source: PGSource; closure: PGClosure); cdecl; external; procedure g_source_set_dummy_callback(source: PGSource); cdecl; external; procedure g_type_add_class_cache_func(cache_data: gpointer; cache_func: TGTypeClassCacheFunc); cdecl; external; procedure g_type_add_class_private(class_type: TGType; private_size: gsize); cdecl; external; procedure g_type_add_interface_check(check_data: gpointer; check_func: TGTypeInterfaceCheckFunc); cdecl; external; procedure g_type_add_interface_dynamic(instance_type: TGType; interface_type: TGType; plugin: PGTypePlugin); cdecl; external; procedure g_type_add_interface_static(instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; external; procedure g_type_class_add_private(g_class: gpointer; private_size: gsize); cdecl; external; procedure g_type_class_unref(g_class: PGTypeClass); cdecl; external; procedure g_type_class_unref_uncached(g_class: PGTypeClass); cdecl; external; procedure g_type_default_interface_unref(g_iface: PGTypeInterface); cdecl; external; procedure g_type_ensure(type_: TGType); cdecl; external; procedure g_type_free_instance(instance: PGTypeInstance); cdecl; external; procedure g_type_init; cdecl; external; procedure g_type_init_with_debug_flags(debug_flags: TGTypeDebugFlags); cdecl; external; procedure g_type_interface_add_prerequisite(interface_type: TGType; prerequisite_type: TGType); cdecl; external; procedure g_type_module_add_interface(module: PGTypeModule; instance_type: TGType; interface_type: TGType; interface_info: PGInterfaceInfo); cdecl; external; procedure g_type_module_set_name(module: PGTypeModule; name: Pgchar); cdecl; external; procedure g_type_module_unuse(module: PGTypeModule); cdecl; external; procedure g_type_plugin_complete_interface_info(plugin: PGTypePlugin; instance_type: TGType; interface_type: TGType; info: PGInterfaceInfo); cdecl; external; procedure g_type_plugin_complete_type_info(plugin: PGTypePlugin; g_type: TGType; info: PGTypeInfo; value_table: PGTypeValueTable); cdecl; external; procedure g_type_plugin_unuse(plugin: PGTypePlugin); cdecl; external; procedure g_type_plugin_use(plugin: PGTypePlugin); cdecl; external; procedure g_type_query(type_: TGType; query: PGTypeQuery); cdecl; external; procedure g_type_remove_class_cache_func(cache_data: gpointer; cache_func: TGTypeClassCacheFunc); cdecl; external; procedure g_type_remove_interface_check(check_data: gpointer; check_func: TGTypeInterfaceCheckFunc); cdecl; external; procedure g_type_set_qdata(type_: TGType; quark: TGQuark; data: gpointer); cdecl; external; procedure g_value_copy(src_value: PGValue; dest_value: PGValue); cdecl; external; procedure g_value_register_transform_func(src_type: TGType; dest_type: TGType; transform_func: TGValueTransform); cdecl; external; procedure g_value_set_boolean(value: PGValue; v_boolean: gboolean); cdecl; external; procedure g_value_set_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_set_double(value: PGValue; v_double: gdouble); cdecl; external; procedure g_value_set_enum(value: PGValue; v_enum: gint); cdecl; external; procedure g_value_set_flags(value: PGValue; v_flags: guint); cdecl; external; procedure g_value_set_float(value: PGValue; v_float: gfloat); cdecl; external; procedure g_value_set_gtype(value: PGValue; v_gtype: TGType); cdecl; external; procedure g_value_set_instance(value: PGValue; instance: gpointer); cdecl; external; procedure g_value_set_int(value: PGValue; v_int: gint); cdecl; external; procedure g_value_set_int64(value: PGValue; v_int64: gint64); cdecl; external; procedure g_value_set_long(value: PGValue; v_long: glong); cdecl; external; procedure g_value_set_object(value: PGValue; v_object: PGObject); cdecl; external; procedure g_value_set_param(value: PGValue; param: PGParamSpec); cdecl; external; procedure g_value_set_pointer(value: PGValue; v_pointer: gpointer); cdecl; external; procedure g_value_set_schar(value: PGValue; v_char: gint8); cdecl; external; procedure g_value_set_static_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_set_static_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_set_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_set_uchar(value: PGValue; v_uchar: guint8); cdecl; external; procedure g_value_set_uint(value: PGValue; v_uint: guint); cdecl; external; procedure g_value_set_uint64(value: PGValue; v_uint64: guint64); cdecl; external; procedure g_value_set_ulong(value: PGValue; v_ulong: gulong); cdecl; external; procedure g_value_set_variant(value: PGValue; variant: PGVariant); cdecl; external; procedure g_value_take_boxed(value: PGValue; v_boxed: Pgpointer); cdecl; external; procedure g_value_take_object(value: PGValue; v_object: gpointer); cdecl; external; procedure g_value_take_param(value: PGValue; param: PGParamSpec); cdecl; external; procedure g_value_take_string(value: PGValue; v_string: Pgchar); cdecl; external; procedure g_value_take_variant(value: PGValue; variant: PGVariant); cdecl; external; procedure g_value_unset(value: PGValue); cdecl; external; procedure g_weak_ref_clear(weak_ref: PGWeakRef); cdecl; external; procedure g_weak_ref_init(weak_ref: PGWeakRef; object_: gpointer); cdecl; external; procedure g_weak_ref_set(weak_ref: PGWeakRef; object_: gpointer); cdecl; external; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uapplemagnifiedmodefix.pas����������������������������������������0000644�0001750�0000144�00000002424�12546226060�023333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uAppleMagnifiedModeFix; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface implementation uses BaseUnix, CocoaAll; const SecondStart = 'SecondStart'; AppleMagnifiedMode = 'AppleMagnifiedMode'; var UserDefaults: NSUserDefaults; function setenv(const name, value: pchar; overwrite: longint): longint; cdecl; external 'c' name 'setenv'; procedure ExportLanguage; var CurrentLocale: NSLocale; Language, Country: String; begin if fpGetEnv(PAnsiChar('LANG')) = '' then begin CurrentLocale:= NSLocale.currentLocale(); Country:= NSString(CurrentLocale.objectForKey(NSLocaleCountryCode)).UTF8String; Language:= NSString(CurrentLocale.objectForKey(NSLocaleLanguageCode)).UTF8String; if (Length(Language) > 0) and (Length(Country) > 0) then begin Language:= Language + '_' + Country + '.UTF-8'; setenv('LANG', PAnsiChar(Language), 1); WriteLn('Export LANG=' + Language); end; end; end; initialization {$IFDEF LCLQT} ExportLanguage; {$ENDIF} UserDefaults:= NSUserDefaults.standardUserDefaults; if not UserDefaults.boolForKey(NSSTR(SecondStart)) then begin UserDefaults.setBool_forKey(True, NSSTR(SecondStart)); UserDefaults.setBool_forKey(False, NSSTR(AppleMagnifiedMode)); UserDefaults.synchronize; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uudev.pas���������������������������������������������������������0000644�0001750�0000144�00000051655�12631011052�017753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Interface to UDev service via libudev. Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) Based on udisks-1.0.4/src/device.c Copyright (C) 2008 David Zeuthen <david@fubar.dk> 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 uUDev; {$mode delphi} {$assertions on} interface uses Classes, SysUtils, CTypes, Unix, BaseUnix, uUDisks; function Initialize: Boolean; procedure Finalize; procedure AddObserver(Func: TUDisksDeviceNotify); procedure RemoveObserver(Func: TUDisksDeviceNotify); function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; overload; var HasUdev: Boolean = False; implementation uses DynLibs, DCOSUtils, uDebug, uPollThread; type { TMonitorObject } TMonitorObject = class private FAction: String; FDevicePath: String; private procedure ReceiveDevice; procedure Handler(Sender: TObject); public constructor Create; end; type Pudev = ^Tudev; Tudev = record end; Pudev_device = ^Tudev_device; Tudev_device = record end; Pudev_monitor = ^Tudev_monitor; Tudev_monitor = record end; Pudev_enumerate = ^Tudev_enumerate; Tudev_enumerate = record end; Pudev_list_entry = ^Tudev_list_entry; Tudev_list_entry = record end; var // udev — libudev context udev_new: function(): Pudev; cdecl; udev_unref: function(udev: Pudev): Pudev; cdecl; // udev_list — list operation udev_list_entry_get_next: function(list_entry: Pudev_list_entry): Pudev_list_entry; cdecl; udev_list_entry_get_name: function(list_entry: Pudev_list_entry): PAnsiChar; cdecl; // udev_device — kernel sys devices udev_device_unref: procedure(udev_device: Pudev_device); cdecl; udev_device_new_from_syspath: function(udev: Pudev; const syspath: PAnsiChar): Pudev_device; cdecl; udev_device_get_devnode: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_devtype: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_syspath: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_action: function(udev_device: Pudev_device): PAnsiChar; cdecl; udev_device_get_property_value: function(udev_device: Pudev_device; const key: PAnsiChar): PAnsiChar; cdecl; udev_device_get_sysattr_value: function(udev_device: Pudev_device; const sysattr: PAnsiChar): PAnsiChar; cdecl; // udev_monitor — device event source udev_monitor_unref: procedure(udev_monitor: Pudev_monitor); cdecl; udev_monitor_new_from_netlink: function(udev: Pudev; const name: PAnsiChar): Pudev_monitor; cdecl; udev_monitor_filter_add_match_subsystem_devtype: function(udev_monitor: Pudev_monitor; const subsystem: PAnsiChar; const devtype: PAnsiChar): cint; cdecl; udev_monitor_enable_receiving: function(udev_monitor: Pudev_monitor): cint; cdecl; udev_monitor_get_fd: function(udev_monitor: Pudev_monitor): cint; cdecl; udev_monitor_receive_device: function(udev_monitor: Pudev_monitor): Pudev_device; cdecl; // udev_enumerate — lookup and sort sys devices udev_enumerate_new: function(udev: Pudev): Pudev_enumerate; cdecl; udev_enumerate_unref: function(udev_enumerate: Pudev_enumerate): Pudev_enumerate; cdecl; udev_enumerate_add_match_subsystem: function(udev_enumerate: Pudev_enumerate; const subsystem: PAnsiChar): cint; cdecl; udev_enumerate_scan_devices: function(udev_enumerate: Pudev_enumerate): cint; cdecl; udev_enumerate_get_list_entry: function(udev_enumerate: Pudev_enumerate): Pudev_list_entry; cdecl; const LibraryName = 'libudev.so.%d'; var udev: Pudev = nil; libudev: TLibHandle = NilHandle; udev_monitor: Pudev_monitor = nil; udev_monitor_object: TMonitorObject = nil; observers: TUDisksObserverList = nil; const UDEV_DEVICE_TYPE_DISK = 'disk'; UDEV_DEVICE_TYPE_PARTITION = 'partition'; drive_media_mapping: array [0..29, 0..1] of String = ( ( 'ID_DRIVE_FLASH', 'flash' ), ( 'ID_DRIVE_FLASH_CF', 'flash_cf' ), ( 'ID_DRIVE_FLASH_MS', 'flash_ms' ), ( 'ID_DRIVE_FLASH_SM', 'flash_sm' ), ( 'ID_DRIVE_FLASH_SD', 'flash_sd' ), ( 'ID_DRIVE_FLASH_SDHC', 'flash_sdhc' ), ( 'ID_DRIVE_FLASH_MMC', 'flash_mmc' ), ( 'ID_DRIVE_FLOPPY', 'floppy' ), ( 'ID_DRIVE_FLOPPY_ZIP', 'floppy_zip' ), ( 'ID_DRIVE_FLOPPY_JAZ', 'floppy_jaz' ), ( 'ID_CDROM', 'optical_cd' ), ( 'ID_CDROM_CD_R', 'optical_cd_r' ), ( 'ID_CDROM_CD_RW', 'optical_cd_rw' ), ( 'ID_CDROM_DVD', 'optical_dvd' ), ( 'ID_CDROM_DVD_R', 'optical_dvd_r' ), ( 'ID_CDROM_DVD_RW', 'optical_dvd_rw' ), ( 'ID_CDROM_DVD_RAM', 'optical_dvd_ram' ), ( 'ID_CDROM_DVD_PLUS_R', 'optical_dvd_plus_r' ), ( 'ID_CDROM_DVD_PLUS_RW', 'optical_dvd_plus_rw' ), ( 'ID_CDROM_DVD_PLUS_R_DL', 'optical_dvd_plus_r_dl' ), ( 'ID_CDROM_DVD_PLUS_RW_DL', 'optical_dvd_plus_rw_dl' ), ( 'ID_CDROM_BD', 'optical_bd' ), ( 'ID_CDROM_BD_R', 'optical_bd_r' ), ( 'ID_CDROM_BD_RE', 'optical_bd_re' ), ( 'ID_CDROM_HDDVD', 'optical_hddvd' ), ( 'ID_CDROM_HDDVD_R', 'optical_hddvd_r' ), ( 'ID_CDROM_HDDVD_RW', 'optical_hddvd_rw' ), ( 'ID_CDROM_MO', 'optical_mo' ), ( 'ID_CDROM_MRW', 'optical_mrw' ), ( 'ID_CDROM_MRW_W', 'optical_mrw_w' ) ); procedure Print(const sMessage: String); begin WriteLn('UDev: ', sMessage); end; procedure Load; var Version: Integer; begin for Version:= 1 downto 0 do begin libudev:= LoadLibrary(Format(LibraryName, [Version])); if libudev <> NilHandle then Break; end; HasUdev:= libudev <> NilHandle; if HasUdev then try // udev — libudev context udev_new:= SafeGetProcAddress(libudev, 'udev_new'); udev_unref:= SafeGetProcAddress(libudev, 'udev_unref'); // udev_list — list operation udev_list_entry_get_next:= SafeGetProcAddress(libudev, 'udev_list_entry_get_next'); udev_list_entry_get_name:= SafeGetProcAddress(libudev, 'udev_list_entry_get_name'); // udev_device — kernel sys devices udev_device_unref:= SafeGetProcAddress(libudev, 'udev_device_unref'); udev_device_new_from_syspath:= SafeGetProcAddress(libudev, 'udev_device_new_from_syspath'); udev_device_get_devnode:= SafeGetProcAddress(libudev, 'udev_device_get_devnode'); udev_device_get_devtype:= SafeGetProcAddress(libudev, 'udev_device_get_devtype'); udev_device_get_syspath:= SafeGetProcAddress(libudev, 'udev_device_get_syspath'); udev_device_get_action:= SafeGetProcAddress(libudev, 'udev_device_get_action'); udev_device_get_property_value:= SafeGetProcAddress(libudev, 'udev_device_get_property_value'); udev_device_get_sysattr_value:= SafeGetProcAddress(libudev, 'udev_device_get_sysattr_value'); // udev_monitor — device event source udev_monitor_unref:= SafeGetProcAddress(libudev, 'udev_monitor_unref'); udev_monitor_new_from_netlink:= SafeGetProcAddress(libudev, 'udev_monitor_new_from_netlink'); udev_monitor_filter_add_match_subsystem_devtype:= SafeGetProcAddress(libudev, 'udev_monitor_filter_add_match_subsystem_devtype'); udev_monitor_enable_receiving:= SafeGetProcAddress(libudev, 'udev_monitor_enable_receiving'); udev_monitor_get_fd:= SafeGetProcAddress(libudev, 'udev_monitor_get_fd'); udev_monitor_receive_device:= SafeGetProcAddress(libudev, 'udev_monitor_receive_device'); // udev_enumerate — lookup and sort sys devices udev_enumerate_new:= SafeGetProcAddress(libudev, 'udev_enumerate_new'); udev_enumerate_unref:= SafeGetProcAddress(libudev, 'udev_enumerate_unref'); udev_enumerate_add_match_subsystem:= SafeGetProcAddress(libudev, 'udev_enumerate_add_match_subsystem'); udev_enumerate_scan_devices:= SafeGetProcAddress(libudev, 'udev_enumerate_scan_devices'); udev_enumerate_get_list_entry:= SafeGetProcAddress(libudev, 'udev_enumerate_get_list_entry'); // Create the udev object udev:= udev_new(); if udev = nil then Raise Exception.Create('Can''t create udev'); except on E: Exception do begin HasUdev:= False; UnloadLibrary(libudev); Print(E.Message); end; end; end; procedure Free; begin if Assigned(udev) then udev_unref(udev); if libudev <> NilHandle then UnloadLibrary(libudev); end; function GetDeviceProperty(const Device: Pudev_device; const PropertyName: String; out Value: Boolean): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_property_value(Device, PAnsiCHar(PropertyName)); Result:= Assigned(pacValue); if (Result = False) then Value:= False else Value:= StrToBool(pacValue); end; function GetDeviceProperty(const Device: Pudev_device; const PropertyName: String; out Value: String): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_property_value(Device, PAnsiCHar(PropertyName)); Result:= Assigned(pacValue); if (Result = False) then Value:= EmptyStr else Value:= StrPas(pacValue); end; function GetDeviceAttribute(const Device: Pudev_device; const AttributeName: String; out Value: String): Boolean; overload; var pacValue: PAnsiChar; begin pacValue:= udev_device_get_sysattr_value(Device, PAnsiCHar(AttributeName)); Result:= Assigned(pacValue); if (Result = False) then Value:= EmptyStr else Value:= StrPas(pacValue); end; function GetDeviceAttribute(const Device: Pudev_device; const AttributeName: String; out Value: Boolean): Boolean; overload; var S: String; begin Result:= GetDeviceAttribute(Device, AttributeName, S); if Result then Result:= TryStrToBool(S, Value); end; function GetDeviceAttribute(const SystemPath: String; const AttributeName: String; out Value: Boolean): Boolean; overload; var S: AnsiChar; Handle: THandle; FileName: String; begin FileName:= IncludeTrailingBackslash(SystemPath) + AttributeName; Handle:= mbFileOpen(FileName, fmOpenRead or fmShareDenyNone); Result:= Handle <> feInvalidHandle; if Result then begin Result:= FileRead(Handle, S, SizeOf(S)) > 0; if Result then Result:= TryStrToBool(S, Value); FileClose(Handle); end; end; function DecodeString(const EncodedString: String): String; var Finish: Integer; Index: Integer = 1; StartIndex: Integer = 1; begin Result:= EmptyStr; Finish:= Length(EncodedString); while Index <= Finish - 3 do begin if EncodedString[Index] <> '\' then Inc(Index) else begin if EncodedString[Index + 1] <> 'x' then begin Print('**** NOTE: malformed encoded string: ' + EncodedString); Exit(EncodedString); end; Result:= Result + Copy(EncodedString, StartIndex, Index - StartIndex) + Chr(StrToInt('$' + Copy(EncodedString, Index + 2, 2))); Index:= Index + 4; StartIndex:= Index; end; end; Result:= Result + Copy(EncodedString, StartIndex, Finish - StartIndex + 1); end; procedure UpdateDriveConnectionInterface(SystemPath: PAnsiChar; var Info: TUDisksDeviceInfo); var Path, Connection: String; begin Path:= IncludeTrailingPathDelimiter(SystemPath); repeat Connection:= fpReadLink(Path + 'subsystem'); Connection:= ExtractFileName(ExcludeTrailingPathDelimiter(Connection)); if Connection = 'usb' then begin // Both the interface and the device will be 'usb'. // However only the device will have the 'speed' property. if mbFileExists(Path + 'speed') then begin Info.DriveConnectionInterface:= Connection; Break; end; end; Path:= ExtractFilePath(ExcludeTrailingPathDelimiter(Path)); until (Length(Path) = 0) or (CompareStr(Path, '/sys/devices/') = 0); end; procedure GetDeviceInfo(SystemPath: PAnsiChar; Device: Pudev_device; out Info: TUDisksDeviceInfo); overload; var I: Integer; Value: String; begin with Info do begin DeviceFile:= udev_device_get_devnode(Device); DeviceObjectPath:= SystemPath; GetDeviceProperty(Device, 'ID_BUS', DriveConnectionInterface); GetDeviceProperty(Device, 'ID_FS_USAGE', IdUsage); GetDeviceProperty(Device, 'ID_FS_TYPE', IdType); GetDeviceProperty(Device, 'ID_FS_VERSION', IdVersion); GetDeviceProperty(Device, 'ID_FS_UUID', IdUuid); GetDeviceProperty(Device, 'ID_FS_LABEL_ENC', IdLabel); if Length(IdLabel) > 0 then IdLabel:= DecodeString(IdLabel) else GetDeviceProperty(Device, 'ID_FS_LABEL', IdLabel); if not GetDeviceProperty(Device, 'ID_DRIVE_EJECTABLE', DriveIsMediaEjectable) then begin DriveIsMediaEjectable:= FALSE; DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_CDROM' ) <> nil); DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_DRIVE_FLOPPY_ZIP' ) <> nil); DriveIsMediaEjectable:= DriveIsMediaEjectable or (udev_device_get_property_value(Device, 'ID_DRIVE_FLOPPY_JAZ' ) <> nil); end; GetDeviceProperty(Device, 'UDISKS_SYSTEM_INTERNAL', DeviceIsSystemInternal); GetDeviceProperty(Device, 'UDISKS_AUTOMOUNT_HINT', DeviceAutomountHint); if not GetDeviceProperty(Device, 'UDISKS_IGNORE', DevicePresentationHide) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_HIDE', DevicePresentationHide); if not GetDeviceProperty(Device, 'UDISKS_NAME', DevicePresentationName) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_NAME', DevicePresentationName); if not GetDeviceProperty(Device, 'UDISKS_ICON_NAME', DevicePresentationIconName) then GetDeviceProperty(Device, 'UDISKS_PRESENTATION_ICON_NAME', DevicePresentationIconName); GetDeviceProperty(Device, 'ID_DRIVE_DETACHABLE', DriveCanDetach); Value:= udev_device_get_devtype(Device); DeviceIsDrive:= (Value = UDEV_DEVICE_TYPE_DISK); DeviceIsPartition:= (Value = UDEV_DEVICE_TYPE_PARTITION); if DeviceIsDrive then begin if not GetDeviceProperty(Device, 'UDISKS_PARTITION_TABLE', DeviceIsPartitionTable) then begin DeviceIsPartitionTable:= (udev_device_get_property_value(Device, 'ID_PART_TABLE_TYPE' ) <> nil); end; end else if DeviceIsPartition then begin if not GetDeviceProperty(Device, 'UDISKS_PARTITION_SLAVE', PartitionSlave) then begin if DeviceObjectPath[Length(DeviceObjectPath)] in ['0'..'9'] then begin PartitionSlave:= ExtractFileDir(DeviceObjectPath); GetDeviceAttribute(PartitionSlave, 'removable', DeviceIsRemovable); end; end; end; if not DeviceIsRemovable then begin GetDeviceAttribute(Device, 'removable', DeviceIsRemovable); end; UpdateDriveConnectionInterface(SystemPath, Info); DeviceIsMediaAvailable:= (Length(IdUsage) > 0) or (Length(IdType) > 0) or (Length(IdUuid) > 0) or (Length(IdLabel) > 0); if not DeviceIsMediaAvailable then begin GetDeviceProperty(Device, 'ID_CDROM_MEDIA', DeviceIsMediaAvailable); end; for I:= Low(drive_media_mapping) to High(drive_media_mapping) do begin if Assigned(udev_device_get_property_value(Device, PAnsiChar(drive_media_mapping[I, 0]))) then begin SetLength(DriveMediaCompatibility, Length(DriveMediaCompatibility) + 1); DriveMediaCompatibility[High(DriveMediaCompatibility)]:= drive_media_mapping[I, 1]; end; end; { WriteLn('Device: ', DeviceFile); WriteLn(' Devtype: ', Value); WriteLn(' IdType: ', IdType); WriteLn(' IdLabel: ', IdLabel ); WriteLn(' IdVersion: ', IdVersion ); WriteLn(' IdUsage: ', IdUsage ); WriteLn(' IdUuid: ', IdUuid ); WriteLn(' DriveIsMediaEjectable: ', DriveIsMediaEjectable ); WriteLn(' DeviceIsSystemInternal: ', DeviceIsSystemInternal ); WriteLn(' DeviceIsPartitionTable: ', DeviceIsPartitionTable ); WriteLn(' DevicePresentationHide: ', DevicePresentationHide ); WriteLn(' DevicePresentationName: ', DevicePresentationName ); WriteLn(' DevicePresentationIconName: ', DevicePresentationIconName ); WriteLn(' DeviceAutomountHint: ', DeviceAutomountHint ); WriteLn(' DriveCanDetach: ', DriveCanDetach ); WriteLn(' PartitionSlave: ', PartitionSlave ); WriteLn(' DeviceIsRemovable: ', DeviceIsRemovable ); WriteLn(' DriveConnectionInterface: ', DriveConnectionInterface ); } end; end; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; var path: PAnsiChar; device: Pudev_device; devices: Pudev_list_entry; enumerate: Pudev_enumerate; begin SetLength(DevicesInfos, 0); // Create a list of the devices in the 'block' subsystem enumerate:= udev_enumerate_new(udev); udev_enumerate_add_match_subsystem(enumerate, 'block'); udev_enumerate_scan_devices(enumerate); devices:= udev_enumerate_get_list_entry(enumerate); while devices <> nil do begin // Get the filename of the /sys entry for the device // and create a udev_device object (dev) representing it path:= udev_list_entry_get_name(devices); device:= udev_device_new_from_syspath(udev, path); if Assigned(device) then begin SetLength(DevicesInfos, Length(DevicesInfos) + 1); GetDeviceInfo(path, device, DevicesInfos[High(DevicesInfos)]); udev_device_unref(Device); end; devices:= udev_list_entry_get_next(devices); end; // Free the enumerator object udev_enumerate_unref(enumerate); Result:= Length(DevicesInfos) > 0; end; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; var Device: Pudev_device; begin Device:= udev_device_new_from_syspath(udev, PAnsiChar(ObjectPath)); Result:= Assigned(Device); if Result then begin GetDeviceInfo(PAnsiChar(ObjectPath), Device, Info); udev_device_unref(Device); end; end; function Initialize: Boolean; var Return: cint; begin // Set up a monitor to monitor block devices udev_monitor:= udev_monitor_new_from_netlink(udev, 'udev'); Result:= Assigned(udev_monitor); if Result then try Return:= udev_monitor_filter_add_match_subsystem_devtype(udev_monitor, 'block', nil); Assert(Return = 0, 'udev_monitor_filter_add_match_subsystem_devtype'); Return:= udev_monitor_enable_receiving(udev_monitor); Assert(Return = 0, 'udev_monitor_enable_receiving'); observers:= TUDisksObserverList.Create; udev_monitor_object:= TMonitorObject.Create; except Result:= False; udev_monitor_unref(udev_monitor); udev_monitor:= nil; end; end; procedure Finalize; begin FreeAndNil(udev_monitor_object); FreeAndNil(observers); udev_monitor_unref(udev_monitor); end; procedure AddObserver(Func: TUDisksDeviceNotify); begin if Observers.IndexOf(Func) < 0 then Observers.Add(Func); end; procedure RemoveObserver(Func: TUDisksDeviceNotify); begin Observers.Remove(Func); end; { TMonitorThread } procedure TMonitorObject.ReceiveDevice; var I: Integer; Method: TUDisksMethod; begin if FAction = 'add' then Method:= UDisks_DeviceAdded else if FAction = 'remove' then Method:= UDisks_DeviceRemoved else if FAction = 'change' then Method:= UDisks_DeviceChanged else Method:= UDisks_DeviceChanged; Print('Device ' + FAction + ': ' + FDevicePath); for I := 0 to Observers.Count - 1 do Observers[I](Method, FDevicePath); end; procedure TMonitorObject.Handler(Sender: TObject); var device: Pudev_device; begin // Make the call to ReceiveDevice the device // select() ensured that this will not block device:= udev_monitor_receive_device(udev_monitor); if Assigned(device) then begin FAction:= udev_device_get_action(device); FDevicePath:= udev_device_get_syspath(device); TThread.Synchronize(nil, ReceiveDevice); udev_device_unref(device); end; end; constructor TMonitorObject.Create; var fd: cint; begin // Get the file descriptor (fd) for the monitor // This fd will get passed to poll() fd := udev_monitor_get_fd(udev_monitor); AddPoll(fd, POLLIN, Handler, False); Print('Begin monitoring'); end; initialization Load; finalization Free; end. �����������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uvideothumb.pas���������������������������������������������������0000644�0001750�0000144�00000013043�12624110204�021144� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- FFmpeg thumbnail provider Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) FFmpegthumbnailer - lightweight video thumbnailer Copyright (C) 2010 Dirk Vanden Boer <dirk.vdb@gmail.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. } unit uVideoThumb; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils; implementation uses CTypes, DynLibs, Graphics, Types, LazUTF8, DCOSUtils, DCConvertEncoding, uThumbnails, uClassesEx, uMasks, uGraphics; type ThumbnailerImageType = ( Png, Jpeg, Unknown ); Pvideo_thumbnailer = ^Tvideo_thumbnailer; Tvideo_thumbnailer = record thumbnail_size: cint; //* default = 128 */ seek_percentage: cint; //* default = 10 */ seek_time: pchar; //* default = NULL (format hh:mm:ss, overrides seek_percentage if set) */ overlay_film_strip: cint; //* default = 0 */ workaround_bugs: cint; //* default = 0 */ thumbnail_image_quality: cint; //* default = 8 (0 is bad, 10 is best)*/ thumbnail_image_type: ThumbnailerImageType; //* default = Png */ av_format_context: pointer; //* default = NULL */ maintain_aspect_ratio: cint; //* default = 1 */ thumbnailer: pointer; //* for internal use only */ filter: pointer; //* for internal use only */ end; Pimage_data = ^Timage_data; Timage_data = record image_data_ptr: pcuint8; //* points to the image data after call to generate_thumbnail_to_buffer */ image_data_size: cint; //* contains the size of the image data after call to generate_thumbnail_to_buffer */ internal_data: pointer; //* for internal use only */ end; var { create video_thumbnailer structure } video_thumbnailer_create: function(): Pvideo_thumbnailer; cdecl; { destroy video_thumbnailer structure } video_thumbnailer_destroy: procedure(thumbnailer: Pvideo_thumbnailer); cdecl; { create image_data structure } video_thumbnailer_create_image_data: function(): Pimage_data; cdecl; { destroy image_data structure } video_thumbnailer_destroy_image_data: procedure(data: Pimage_data); cdecl; { generate thumbnail from video file (movie_filename), image data is stored in generated_image_data struct } video_thumbnailer_generate_thumbnail_to_buffer: function(thumbnailer: Pvideo_thumbnailer; movie_filename: Pchar; generated_image_data: Pimage_data): cint; cdecl; var MaskList: TMaskList = nil; libffmpeg: TLibHandle = NilHandle; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Data: Pimage_data; BlobStream: TBlobStream; Thumb: Pvideo_thumbnailer; Bitmap: TPortableNetworkGraphic; begin Result:= nil; if MaskList.Matches(aFileName) then begin Thumb:= video_thumbnailer_create(); if Assigned(Thumb) then try Thumb.thumbnail_size:= aSize.cx; Data:= video_thumbnailer_create_image_data(); if Assigned(Data) then try if video_thumbnailer_generate_thumbnail_to_buffer(Thumb, PAnsiChar(CeUtf8ToSys(aFileName)), Data) = 0 then begin Bitmap:= TPortableNetworkGraphic.Create; BlobStream:= TBlobStream.Create(Data^.image_data_ptr, Data^.image_data_size); try Bitmap.LoadFromStream(BlobStream); Result:= Graphics.TBitmap.Create; BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; Bitmap.Free; BlobStream.Free; end; finally video_thumbnailer_destroy_image_data(Data); end; finally video_thumbnailer_destroy(Thumb); end; end; end; procedure Initialize; begin libffmpeg:= LoadLibrary('libffmpegthumbnailer.so.4'); if (libffmpeg <> NilHandle) then try @video_thumbnailer_create:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_create'); @video_thumbnailer_destroy:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_destroy'); @video_thumbnailer_create_image_data:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_create_image_data'); @video_thumbnailer_destroy_image_data:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_destroy_image_data'); @video_thumbnailer_generate_thumbnail_to_buffer:= SafeGetProcAddress(libffmpeg, 'video_thumbnailer_generate_thumbnail_to_buffer'); // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); MaskList:= TMaskList.Create('*.avi;*.flv;*.mkv;*.mp4;*.mpg;*.mov;*.wmv;*.vob;*.mpeg'); except // Skip end; end; procedure Finalize; begin MaskList.Free; if (libffmpeg <> NilHandle) then FreeLibrary(libffmpeg); end; initialization Initialize; finalization Finalize; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/ukeyfile.pas������������������������������������������������������0000755�0001750�0000144�00000014631�12671241237�020452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Simple key file implementation based on GKeyFile Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uKeyFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, IniFiles, DCBasicTypes, uGLib2; const { Constants for handling freedesktop.org Desktop files } DESKTOP_GROUP = 'Desktop Entry'; DESKTOP_KEY_CATEGORIES = 'Categories'; DESKTOP_KEY_COMMENT = 'Comment'; DESKTOP_KEY_EXEC = 'Exec'; DESKTOP_KEY_ICON = 'Icon'; DESKTOP_KEY_NAME = 'Name'; DESKTOP_KEY_TYPE = 'Type'; DESKTOP_KEY_MIME_TYPE = 'MimeType'; DESKTOP_KEY_NO_DISPLAY = 'NoDisplay'; DESKTOP_KEY_TERMINAL = 'Terminal'; DESKTOP_KEY_KDE_BUG = 'Path[$e]'; type { TKeyFile } TKeyFile = class(TCustomIniFile) private FGKeyFile: PGKeyFile; protected function LoadFromFile(const AFileName: String; out AMessage: String): Boolean; inline; public constructor Create(const AFileName: String; AEscapeLineFeeds : Boolean = False); override; destructor Destroy; override; public function SectionExists(const Section: String): Boolean; override; function ReadBool(const Section, Ident: String; Default: Boolean): Boolean; override; function ReadString(const Section, Ident, Default: String): String; override; function ReadLocaleString(const Section, Ident, Default: String): String; virtual; function ReadStringList(const Section, Ident: String): TDynamicStringArray; virtual; protected procedure WriteString(const Section, Ident, Value: String); override; procedure ReadSection(const Section: string; Strings: TStrings); override; procedure ReadSections(Strings: TStrings); override; procedure ReadSectionValues(const Section: string; Strings: TStrings); override; procedure EraseSection(const Section: string); override; procedure DeleteKey(const Section, Ident: String); override; procedure UpdateFile; override; end; implementation uses RtlConsts, DCStrUtils; { TKeyFile } function TKeyFile.LoadFromFile(const AFileName: String; out AMessage: String): Boolean; var AChar: Pgchar; ALength: gsize; AContents: Pgchar; AError: PGError = nil; function FormatMessage: String; begin if Assigned(AError) then begin Result:= StrPas(AError^.message); g_error_free(AError); AError:= nil; end; end; begin Result:= g_key_file_load_from_file(FGKeyFile, Pgchar(AFileName), G_KEY_FILE_NONE, @AError); if not Result then begin AMessage:= FormatMessage; // KDE menu editor adds invalid "Path[$e]" key. GKeyFile cannot parse // such desktop files. We comment it before parsing to avoid this problem. if Pos(DESKTOP_KEY_KDE_BUG, AMessage) > 0 then begin Result:= g_file_get_contents(Pgchar(AFileName), @AContents, @ALength, @AError); if not Result then AMessage:= FormatMessage else try AChar:= g_strstr_len(AContents, ALength, DESKTOP_KEY_KDE_BUG); if Assigned(AChar) then AChar^:= '#'; Result:= g_key_file_load_from_data(FGKeyFile, AContents, ALength, G_KEY_FILE_NONE, @AError); if not Result then AMessage:= FormatMessage; finally g_free(AContents); end; end; end; end; constructor TKeyFile.Create(const AFileName: String; AEscapeLineFeeds: Boolean); var AMessage: String; begin FGKeyFile:= g_key_file_new(); if not LoadFromFile(AFileName, AMessage) then raise EFOpenError.CreateFmt(SFOpenErrorEx, [AFileName, AMessage]); inherited Create(AFileName, AEscapeLineFeeds); CaseSensitive:= True; end; destructor TKeyFile.Destroy; begin inherited Destroy; g_key_file_free(FGKeyFile); end; function TKeyFile.SectionExists(const Section: String): Boolean; begin Result:= g_key_file_has_group(FGKeyFile, Pgchar(Section)); end; function TKeyFile.ReadBool(const Section, Ident: String; Default: Boolean): Boolean; {$OPTIMIZATION OFF} var AError: PGError = nil; begin Result:= g_key_file_get_boolean(FGKeyFile, Pgchar(Section), Pgchar(Ident), @AError); if (AError <> nil) then begin Result:= Default; g_error_free(AError); end; end; {$OPTIMIZATION DEFAULT} function TKeyFile.ReadString(const Section, Ident, Default: String): String; var AValue: Pgchar; begin AValue:= g_key_file_get_string(FGKeyFile, Pgchar(Section), Pgchar(Ident), nil); if (AValue = nil) then Result:= Default else begin Result:= StrPas(AValue); g_free(AValue); end; end; function TKeyFile.ReadLocaleString(const Section, Ident, Default: String): String; var AValue: Pgchar; begin AValue:= g_key_file_get_locale_string(FGKeyFile, Pgchar(Section), Pgchar(Ident), nil, nil); if (AValue = nil) then Result:= Default else begin Result:= StrPas(AValue); g_free(AValue); end; end; function TKeyFile.ReadStringList(const Section, Ident: String): TDynamicStringArray; var AValue: PPgchar; AIndex, ALength: gsize; begin AValue:= g_key_file_get_string_list(FGKeyFile, Pgchar(Section), Pgchar(Ident), @ALength, nil); if Assigned(AValue) then begin SetLength(Result, ALength); for AIndex:= 0 to Pred(ALength) do begin Result[AIndex]:= StrPas(AValue[AIndex]); end; g_strfreev(AValue); end; end; procedure TKeyFile.WriteString(const Section, Ident, Value: String); begin end; procedure TKeyFile.ReadSection(const Section: string; Strings: TStrings); begin end; procedure TKeyFile.ReadSections(Strings: TStrings); begin end; procedure TKeyFile.ReadSectionValues(const Section: string; Strings: TStrings); begin end; procedure TKeyFile.EraseSection(const Section: string); begin end; procedure TKeyFile.DeleteKey(const Section, Ident: String); begin end; procedure TKeyFile.UpdateFile; begin end; end. �������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uappindicator.pas�������������������������������������������������0000644�0001750�0000144�00000007732�12507732524�021502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Application indicator support. Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 uAppIndicator; {$mode delphi} interface uses ExtCtrls; procedure RegisterAppIndicator(const ATrayIcon: TCustomTrayIcon); implementation uses DynLibs, WSLCLClasses, Glib2, Gtk2, Gtk2WSExtCtrls, DCOSUtils, uMyUnix; type TAppIndicatorCategory = ( APP_INDICATOR_CATEGORY_APPLICATION_STATUS, APP_INDICATOR_CATEGORY_COMMUNICATIONS, APP_INDICATOR_CATEGORY_SYSTEM_SERVICES, APP_INDICATOR_CATEGORY_HARDWARE, APP_INDICATOR_CATEGORY_OTHER ); TAppIndicatorStatus = ( APP_INDICATOR_STATUS_PASSIVE, APP_INDICATOR_STATUS_ACTIVE, APP_INDICATOR_STATUS_ATTENTION ); PAppIndicator = ^TAppIndicator; TAppIndicator = record end; type { TGtk2WSCustomTrayIconEx } TGtk2WSCustomTrayIconEx = class(TGtk2WSCustomTrayIcon) published class function Hide(const ATrayIcon: TCustomTrayIcon): Boolean; override; class function Show(const ATrayIcon: TCustomTrayIcon): Boolean; override; end; var PopupMenu: PGtkWidget; AppInd: PAppIndicator = nil; var app_indicator_new: function(const id, icon_name: Pgchar; category: TAppIndicatorCategory): PAppIndicator; cdecl; app_indicator_set_status: procedure(self: PAppIndicator; status: TAppIndicatorStatus); cdecl; app_indicator_set_menu: procedure(self: PAppIndicator; menu: PGtkWidget); cdecl; { TGtk2WSCustomTrayIconEx } class function TGtk2WSCustomTrayIconEx.Hide(const ATrayIcon: TCustomTrayIcon): Boolean; begin Result:= inherited Hide(ATrayIcon); if Assigned(AppInd) then app_indicator_set_status(AppInd, APP_INDICATOR_STATUS_PASSIVE); end; class function TGtk2WSCustomTrayIconEx.Show(const ATrayIcon: TCustomTrayIcon): Boolean; begin Result:= inherited Show(ATrayIcon); if Assigned(AppInd) then app_indicator_set_status(AppInd, APP_INDICATOR_STATUS_ACTIVE); end; function Load: Boolean; var libapp: TLibHandle; begin libapp:= LoadLibrary('libappindicator.so.1'); Result:= libapp <> NilHandle; if Result then try @app_indicator_new:= SafeGetProcAddress(libapp, 'app_indicator_new'); @app_indicator_set_menu:= SafeGetProcAddress(libapp, 'app_indicator_set_menu'); @app_indicator_set_status:= SafeGetProcAddress(libapp, 'app_indicator_set_status'); except Result:= False; FreeLibrary(libapp); end; end; procedure RegisterAppIndicator(const ATrayIcon: TCustomTrayIcon); var Index: Integer; MenuItem: PGtkWidget; WidgetSetClass: ^TWSLCLComponentClass; begin if fpSystemStatus('pgrep unity > /dev/null 2>&1') = 0 then begin if not Load then Exit; // Replace tray icon widgetset class WidgetSetClass:= @ATrayIcon.WidgetSetClass; WidgetSetClass^:= TGtk2WSCustomTrayIconEx; // Create and fill popup menu PopupMenu:= gtk_menu_new(); for Index:= 0 to ATrayIcon.PopupMenu.Items.Count - 1 do begin MenuItem:= PGtkWidget(ATrayIcon.PopupMenu.Items[Index].Handle); gtk_menu_shell_append(GTK_MENU_SHELL(PopupMenu), MenuItem); end; // Create application indicator AppInd:= app_indicator_new('doublecmd', 'doublecmd', APP_INDICATOR_CATEGORY_APPLICATION_STATUS); if Assigned(AppInd) then app_indicator_set_menu(AppInd, PopupMenu); end; end; end. ��������������������������������������doublecmd-0.7.1/src/platform/unix/ukde.pas����������������������������������������������������������0000644�0001750�0000144�00000003764�12612505011�017553� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- K Desktop Environment integration unit Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) 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 uKde; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uMyUnix; function ShowOpenWithDialog(const FileList: TStringList): Boolean; var UseKde: Boolean = False; implementation uses uDCUtils, uGlobs, uGlobsPaths, uOSUtils, uTrash, uPython; var PythonScript: String = 'scripts/doublecmd-kde.py'; function ShowOpenWithDialog(const FileList: TStringList): Boolean; var I: Integer; Args: String; begin Args := ' openwith'; for I := 0 to FileList.Count - 1 do Args+= ' ' + QuoteStr(FileList[I]); Result:= ExecCmdFork(PythonExe + ' ' + PythonScript + Args); end; function FileTrash(const FileName: String): Boolean; begin Result:= fpSystemStatus('kioclient move ' + QuoteStr(FileName) + ' trash:/') = 0; end; procedure Initialize; begin UseKde:= (DesktopEnv = DE_KDE); if UseKde then begin PythonScript:= gpExePath + PythonScript; if ExecutableInSystemPath('kioclient') then FileTrashUtf8:= @FileTrash; UseKde:= (fpSystemStatus(PythonExe + ' ' + PythonScript + ' > /dev/null 2>&1') = 0); end; end; initialization RegisterInitialization(@Initialize); end. ������������doublecmd-0.7.1/src/platform/unix/udcreadsvg.pas����������������������������������������������������0000644�0001750�0000144�00000024647�12612505011�020755� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Scalable Vector Graphics reader implementation (via rsvg and cairo) Copyright (C) 2012-2014 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uDCReadSVG; {$mode delphi} interface uses Classes, SysUtils, Graphics, FPImage; type { TDCReaderSVG } TDCReaderSVG = class (TFPCustomImageReader) private FRsvgHandle: Pointer; protected function InternalCheck (Stream:TStream):boolean;override; procedure InternalRead(Stream:TStream;Img:TFPCustomImage);override; end; { TScalableVectorGraphics } TScalableVectorGraphics = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: string; override; end; function BitmapLoadFromScalable(const FileName: String; AWidth, AHeight: Integer): TBitmap; implementation uses DynLibs, IntfGraphics, GraphType, Types, CTypes, LazUTF8, DCOSUtils, uThumbnails, uIconTheme; type cairo_format_t = ( CAIRO_FORMAT_ARGB32, CAIRO_FORMAT_RGB24, CAIRO_FORMAT_A8, CAIRO_FORMAT_A1 ); type Pcairo_surface_t = Pointer; Pcairo_t = Pointer; PRsvgHandle = Pointer; PPGError = Pointer; type PRsvgDimensionData = ^TRsvgDimensionData; TRsvgDimensionData = record width: cint; height: cint; em: cdouble; ex: cdouble; end; var cairo_image_surface_create: function(format: cairo_format_t; width, height: LongInt): Pcairo_surface_t; cdecl; cairo_surface_destroy: procedure(surface: Pcairo_surface_t); cdecl; cairo_image_surface_get_data: function(surface: Pcairo_surface_t): PByte; cdecl; cairo_create: function(target: Pcairo_surface_t): Pcairo_t; cdecl; cairo_destroy: procedure (cr: Pcairo_t); cdecl; cairo_scale: procedure(cr: Pcairo_t; sx, sy: cdouble); cdecl; rsvg_handle_new_from_file: function(const file_name: PAnsiChar; error: PPGError): PRsvgHandle; cdecl; rsvg_handle_new_from_data: function(data: PByte; data_len: SizeUInt; error: PPGError): PRsvgHandle; cdecl; rsvg_handle_get_dimensions: procedure(handle: PRsvgHandle; dimension_data: PRsvgDimensionData); cdecl; rsvg_handle_render_cairo: function(handle: PRsvgHandle; cr: Pcairo_t): LongBool; cdecl; g_type_init: procedure; cdecl; g_object_unref: procedure(anObject: Pointer); cdecl; type PBGRA = ^TBGRA; TBGRA = packed record Blue, Green, Red, Alpha: Byte; end; procedure RsvgHandleRender(RsvgHandle: Pointer; CairoSurface: Pcairo_surface_t; Cairo: Pcairo_t; Img: TFPCustomImage); var X, Y: Integer; ImageData: PBGRA; PixelColor: TFPColor; Desc: TRawImageDescription; begin try // Draws a SVG to a Cairo surface if rsvg_handle_render_cairo(RsvgHandle, Cairo) then begin // Get a pointer to the data of the image surface, for direct access ImageData:= PBGRA(cairo_image_surface_get_data(CairoSurface)); // Initialize image description Desc.Init_BPP32_B8G8R8A8_BIO_TTB(Img.Width, Img.Height); TLazIntfImage(Img).DataDescription:= Desc; // Read image data for Y:= 0 to Img.Height - 1 do for X:= 0 to Img.Width - 1 do with ImageData^ do begin PixelColor.alpha:= Alpha + Alpha shl 8; PixelColor.red:= Red + Red shl 8; PixelColor.green:= Green + Green shl 8; PixelColor.blue:= Blue + Blue shl 8; Img.Colors[X, Y]:= PixelColor; Inc(ImageData); end; end; finally g_object_unref(RsvgHandle); cairo_destroy(Cairo); cairo_surface_destroy(CairoSurface); end; end; function BitmapLoadFromScalable(const FileName: String; AWidth, AHeight: Integer): TBitmap; var Cairo: Pcairo_t; RsvgHandle: Pointer; Image: TLazIntfImage; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin Result:= nil; RsvgHandle:= rsvg_handle_new_from_file(PAnsiChar(UTF8ToSys(FileName)), nil); if Assigned(RsvgHandle) then begin Image:= TLazIntfImage.Create(AWidth, AHeight); try // Get the SVG's size rsvg_handle_get_dimensions(RsvgHandle, @RsvgDimensionData); // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, Image.Width, Image.Height); Cairo:= cairo_create(CairoSurface); // Scale image if needed if (Image.Width <> RsvgDimensionData.width) or (Image.Height <> RsvgDimensionData.height) then begin cairo_scale(Cairo, Image.Width / RsvgDimensionData.width, Image.Height / RsvgDimensionData.height); end; RsvgHandleRender(RsvgHandle, CairoSurface, Cairo, Image); Result:= TBitmap.Create; Result.LoadFromIntfImage(Image); finally Image.Free; end; end; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Scale: Boolean; Cairo: Pcairo_t; RsvgHandle: Pointer; Image: TLazIntfImage; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin Result:= nil; if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(aFileName)) then begin RsvgHandle:= rsvg_handle_new_from_file(PAnsiChar(UTF8ToSys(aFileName)), nil); if Assigned(RsvgHandle) then begin Result:= TBitmap.Create; // Get the SVG's size rsvg_handle_get_dimensions(RsvgHandle, @RsvgDimensionData); Scale:= (RsvgDimensionData.width > aSize.cx) or (RsvgDimensionData.height > aSize.cy); if Scale then begin // Calculate aspect width and height of thumb aSize:= TThumbnailManager.GetPreviewScaleSize(RsvgDimensionData.width, RsvgDimensionData.height); end else begin aSize.cx:= RsvgDimensionData.width; aSize.cy:= RsvgDimensionData.height; end; // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, aSize.cx, aSize.cy); Cairo:= cairo_create(CairoSurface); // Scale image if needed if Scale then begin cairo_scale(Cairo, aSize.cx / RsvgDimensionData.width, aSize.cy / RsvgDimensionData.height); end; Image:= TLazIntfImage.Create(aSize.cx, aSize.cy); try RsvgHandleRender(RsvgHandle, CairoSurface, Cairo, Image); Result.LoadFromIntfImage(Image); finally Image.Free; end; end; end; end; { TDCReaderSVG } function TDCReaderSVG.InternalCheck(Stream: TStream): boolean; var MemoryStream: TMemoryStream; begin MemoryStream:= Stream as TMemoryStream; FRsvgHandle:= rsvg_handle_new_from_data(MemoryStream.Memory, MemoryStream.Size, nil); Result:= Assigned(FRsvgHandle); end; procedure TDCReaderSVG.InternalRead(Stream: TStream; Img: TFPCustomImage); var Cairo: Pcairo_t; CairoSurface: Pcairo_surface_t; RsvgDimensionData: TRsvgDimensionData; begin // Get the SVG's size rsvg_handle_get_dimensions(FRsvgHandle, @RsvgDimensionData); // Set output image size Img.SetSize(RsvgDimensionData.width, RsvgDimensionData.height); // Creates an image surface of the specified format and dimensions CairoSurface:= cairo_image_surface_create(CAIRO_FORMAT_ARGB32, RsvgDimensionData.width, RsvgDimensionData.height); Cairo:= cairo_create(CairoSurface); // Render vector graphics to raster image RsvgHandleRender(FRsvgHandle, CairoSurface, Cairo, Img); end; { TScalableVectorGraphics } class function TScalableVectorGraphics.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TDCReaderSVG; end; class function TScalableVectorGraphics.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TScalableVectorGraphics.GetFileExtensions: string; begin Result:= 'svg;svgz'; end; const cairolib = 'libcairo.so.2'; rsvglib = 'librsvg-2.so.2'; gobjectlib = 'libgobject-2.0.so.0'; var libcairo, librsvg, libgobject: TLibHandle; procedure Initialize; begin libcairo:= LoadLibrary(cairolib); librsvg:= LoadLibrary(rsvglib); libgobject:= LoadLibrary(gobjectlib); if (libcairo <> NilHandle) and (librsvg <> NilHandle) and (libgobject <> NilHandle) then try @cairo_image_surface_create:= SafeGetProcAddress(libcairo, 'cairo_image_surface_create'); @cairo_surface_destroy:= SafeGetProcAddress(libcairo, 'cairo_surface_destroy'); @cairo_image_surface_get_data:= SafeGetProcAddress(libcairo, 'cairo_image_surface_get_data'); @cairo_create:= SafeGetProcAddress(libcairo, 'cairo_create'); @cairo_destroy:= SafeGetProcAddress(libcairo, 'cairo_destroy'); @cairo_scale:= SafeGetProcAddress(libcairo, 'cairo_scale'); @rsvg_handle_new_from_file:= SafeGetProcAddress(librsvg, 'rsvg_handle_new_from_file'); @rsvg_handle_new_from_data:= SafeGetProcAddress(librsvg, 'rsvg_handle_new_from_data'); @rsvg_handle_get_dimensions:= SafeGetProcAddress(librsvg, 'rsvg_handle_get_dimensions'); @rsvg_handle_render_cairo:= SafeGetProcAddress(librsvg, 'rsvg_handle_render_cairo'); @g_type_init:= SafeGetProcAddress(libgobject, 'g_type_init'); @g_object_unref:= SafeGetProcAddress(libgobject, 'g_object_unref'); g_type_init(); // Register image handler and format TIconTheme.RegisterExtension('svg;svgz'); TThumbnailManager.RegisterProvider(@GetThumbnail); ImageHandlers.RegisterImageReader ('Scalable Vector Graphics', 'SVG;SVGZ', TDCReaderSVG); TPicture.RegisterFileFormat('svg;svgz', 'Scalable Vector Graphics', TScalableVectorGraphics); except end; end; procedure Finalize; begin if (libcairo <> NilHandle) then FreeLibrary(libcairo); if (librsvg <> NilHandle) then FreeLibrary(librsvg); if (libgobject <> NilHandle) then FreeLibrary(libgobject); end; initialization Initialize; finalization Finalize; end. �����������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/umountwatcher.pas�������������������������������������������������0000644�0001750�0000144�00000002206�12606454152�021532� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uMountWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Unix, BaseUnix, CTypes; type { TMountWatcher } TMountWatcher = class private FOnMountEvent: TNotifyEvent; protected procedure DoMountEvent; procedure Handler(Sender: TObject); procedure ShowMessage(const Message: String); public procedure Start; property OnMountEvent: TNotifyEvent read FOnMountEvent write FOnMountEvent; end; implementation uses RtlConsts, uDebug, uPollThread; { TMountWatcher } procedure TMountWatcher.DoMountEvent; begin if Assigned(FOnMountEvent) then FOnMountEvent(Self); end; procedure TMountWatcher.Handler(Sender: TObject); begin Sleep(1000); TThread.Synchronize(nil, @DoMountEvent); ShowMessage('DoMountEvent'); end; procedure TMountWatcher.ShowMessage(const Message: String); begin DCDebug(ClassName + ': ' + Message); end; procedure TMountWatcher.Start; var fd: cint; begin fd:= fpOpen('/proc/self/mounts', O_RDONLY); if (fd = feInvalidHandle) then ShowMessage(Format(SFOpenError, ['/proc/self/mounts'])) else begin AddPoll(fd, POLLERR, @Handler, True); end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/upollthread.pas���������������������������������������������������0000644�0001750�0000144�00000007120�12606473365�021157� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uPollThread; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Unix, BaseUnix; procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean = True); procedure RemovePoll(fd: cint); implementation type { TPollRecord } TPollRecord = record handler: TNotifyEvent; CloseOnDestroy: Boolean; end; { TPollThread } TPollThread = class(TThread) private FCount: Cardinal; FEventPipe: TFilDes; FDesc: array of tpollfd; FHandler: array of TPollRecord; protected procedure Refresh; procedure Execute; override; procedure Clear(Sender: TObject); public procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean = True); constructor Create; reintroduce; destructor Destroy; override; end; var PollThread: TPollThread = nil; procedure Print(const sMessage: String); begin WriteLn('PollThread: ', sMessage); end; procedure AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean); begin if not Assigned(PollThread) then begin PollThread:= TPollThread.Create; end; PollThread.AddPoll(fd, events, handler, CloseOnDestroy); Print('AddPoll ' + IntToStr(fd)); end; procedure RemovePoll(fd: cint); var Index: Integer; begin for Index:= 0 to PollThread.FCount - 1 do begin if PollThread.FDesc[Index].fd = fd then begin PollThread.FDesc[Index].events:= 0; Break; end; end; Print('RemovePoll ' + IntToStr(fd)); end; { TPollThread } procedure TPollThread.Clear(Sender: TObject); var Symbol: Byte = 0; begin // Clear pipe while fpRead(FEventPipe[0], Symbol, 1) <> -1 do; end; procedure TPollThread.Refresh; var Symbol: Byte = 0; begin fpWrite(FEventPipe[1], Symbol, 1); end; procedure TPollThread.Execute; var i: cint; ret: cint; begin while not Terminated do begin ret:= fpPoll(@FDesc[0], FCount, -1); if (ret = -1) then begin Print(SysErrorMessage(fpGetErrNo)); Exit; end; for i := 0 to FCount - 1 do begin if (FDesc[i].events and FDesc[i].revents <> 0) then begin FHandler[i].handler(Self); end; end; end; end; procedure TPollThread.AddPoll(fd: cint; events: cshort; handler: TNotifyEvent; CloseOnDestroy: Boolean); var NewLength: Integer; begin NewLength:= FCount + 1; SetLength(FDesc, NewLength); SetLength(FHandler, NewLength); FDesc[FCount].fd:= fd; FDesc[FCount].events:= events; FHandler[FCount].handler:= handler; FHandler[FCount].CloseOnDestroy:= CloseOnDestroy; InterLockedIncrement(FCount); if FCount = 2 then begin Start; Print('Start polling'); end; Refresh; end; constructor TPollThread.Create; begin inherited Create(True); // Create pipe for user triggered fake event FEventPipe[0] := -1; FEventPipe[1] := -1; if fpPipe(FEventPipe) < 0 then Print(SysErrorMessage(fpGetErrNo)) else begin // Set both ends of pipe non blocking FpFcntl(FEventPipe[0], F_SetFl, FpFcntl(FEventPipe[0], F_GetFl) or O_NONBLOCK); FpFcntl(FEventPipe[1], F_SetFl, FpFcntl(FEventPipe[1], F_GetFl) or O_NONBLOCK); end; Self.AddPoll(FEventPipe[0], POLLIN, @Clear, True); end; destructor TPollThread.Destroy; var Index: Integer; begin Terminate; Refresh; inherited Destroy; // Close both ends of pipe if FEventPipe[1] <> -1 then begin fpClose(FEventPipe[1]); FEventPipe[1] := -1; end; for Index:= 0 to FCount - 1 do begin if FHandler[Index].CloseOnDestroy then fpClose(FDesc[Index].fd); end; Print('Finish polling'); end; finalization PollThread.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uxdg.pas����������������������������������������������������������0000644�0001750�0000144�00000010234�12612505011�017560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Miscellaneous freedesktop.org compatible utility functions Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) 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 uXdg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; {en Returns a base directory relative to which user-specific data files should be written. } function GetUserDataDir: String; {en Returns an ordered list of base directories in which to access system-wide application data. } function GetSystemDataDirs: TDynamicStringArray; {en Returns a base directory in which to store user-specific application configuration information such as user preferences and settings. } function GetUserConfigDir: String; {en Returns an ordered list of base directories in which to access system-wide configuration information. } function GetSystemConfigDirs: TDynamicStringArray; {en Get current desktop names } function GetCurrentDesktop: TDynamicStringArray; {en Get desktop file path by desktop base file name. } function GetDesktopPath(const DesktopName: String): String; implementation uses DCStrUtils, DCOSUtils, uOSUtils; function GetUserDataDir: String; begin Result:= mbGetEnvironmentVariable('XDG_DATA_HOME'); if Length(Result) = 0 then begin Result:= GetHomeDir + '/.local/share'; end; end; function GetSystemDataDirs: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_DATA_DIRS'); if Length(Value) = 0 then begin Value:= '/usr/local/share/:/usr/share/'; end; Result:= SplitString(Value, PathSeparator); end; function GetUserConfigDir: String; begin Result:= mbGetEnvironmentVariable('XDG_CONFIG_HOME'); if Length(Result) = 0 then begin Result:= GetHomeDir + '/.config'; end; end; function GetSystemConfigDirs: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_CONFIG_DIRS'); if Length(Value) = 0 then begin Value:= '/etc/xdg'; end; Result:= SplitString(Value, PathSeparator); end; function GetCurrentDesktop: TDynamicStringArray; var Value: String; begin Value:= mbGetEnvironmentVariable('XDG_CURRENT_DESKTOP'); if Length(Value) > 0 then begin Result:= SplitString(Value, PathSeparator); end; end; function GetDesktopPath(const DesktopName: String): String; const PrefixDelim = '-'; var Index: Integer; HasPrefix: Boolean; FileName: String; Path: TDynamicStringArray; function DesktopExists(var DesktopPath: String): Boolean; var Prefix: PAnsiChar; begin if mbFileExists(DesktopPath) then Exit(True); if HasPrefix then begin Prefix := PAnsiChar(DesktopPath); Prefix := strrscan(Prefix, PathDelim); Prefix := strscan(Prefix, PrefixDelim); while (Prefix <> nil) do begin Prefix^:= PathDelim; if mbFileExists(DesktopPath) then Exit(True); Prefix := strscan(Prefix, PrefixDelim); end; end; Result:= False; end; begin HasPrefix:= (Pos(PrefixDelim, DesktopName) > 0); FileName:= 'applications' + PathDelim + DesktopName; // Find in user data directory Result:= IncludeTrailingBackslash(GetUserDataDir) + FileName; if DesktopExists(Result) then Exit; // Find in system data directories Path:= GetSystemDataDirs; for Index:= Low(Path) to High(Path) do begin Result:= IncludeTrailingBackslash(Path[Index]) + FileName; if DesktopExists(Result) then Exit; end; Result:= EmptyStr; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uquicklook.pas����������������������������������������������������0000644�0001750�0000144�00000007317�12653453744�021033� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Quick Look thumbnail provider Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uQuickLook; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface uses Classes, SysUtils; implementation uses DynLibs, FileUtil, Types, Graphics, MacOSAll, CocoaAll, uThumbnails, uDebug, uClassesEx, uGraphics {$IF (FPC_FULLVERSION >= 30000)} , CGImage {$ENDIF} ; const libQuickLook = '/System/Library/Frameworks/QuickLook.framework/Versions/Current/QuickLook'; var QuickLook: TLibHandle = NIlHandle; var QLThumbnailImageCreate: function(allocator: CFAllocatorRef; url: CFURLRef; maxThumbnailSize: CGSize; options: CFDictionaryRef): CGImageRef; cdecl; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var ImageData: NSData; Bitmap: TTiffImage; NewImage: NSImage = nil; WorkStream: TBlobStream; maxThumbnailSize: CGSize; ImageRef: CGImageRef = nil; BitmapImageRep: NSBitmapImageRep; theFileNameUrlRef: CFURLRef = nil; theFileNameCFRef: CFStringRef = nil; begin theFileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PAnsiChar(aFileName)); theFileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, theFileNameCFRef, kCFURLPOSIXPathStyle, False); try maxThumbnailSize.width:= aSize.cx; maxThumbnailSize.height:= aSize.cy; ImageRef:= QLThumbnailImageCreate(kCFAllocatorDefault, theFileNameUrlRef, maxThumbnailSize, nil); if ImageRef = nil then Exit(nil); BitmapImageRep:= NSBitmapImageRep.alloc(); BitmapImageRep.initWithCGImage(ImageRef); // Create NSImage NewImage:= NSImage.alloc(); NewImage.initWithSize(BitmapImageRep.size); NewImage.addRepresentation(BitmapImageRep); BitmapImageRep.release(); // Get image data in TIFF format Bitmap:= TTiffImage.Create; ImageData:= NewImage.TIFFRepresentation; WorkStream:= TBlobStream.Create(ImageData.Bytes, ImageData.Length); try Bitmap.LoadFromStream(WorkStream); Result:= TBitmap.Create; try BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; finally Bitmap.Free; WorkStream.Free; end; NewImage.release(); CFRelease(ImageRef); finally if Assigned(theFileNameCFRef) then CFRelease(theFileNameCFRef); if Assigned(theFileNameUrlRef) then CFRelease(theFileNameUrlRef); end; end; procedure Initialize; begin QuickLook:= LoadLibrary(libQuickLook); if (QuickLook <> NilHandle) then begin Pointer(QLThumbnailImageCreate):= GetProcAddress(QuickLook, 'QLThumbnailImageCreate'); if Assigned(QLThumbnailImageCreate) then begin // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); DCDebug('Initialize QuickLook: Success'); end; end; end; procedure Finalize; begin if (QuickLook <> NilHandle) then FreeLibrary(QuickLook); end; initialization Initialize; finalization Finalize; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uoverlayscrollbarfix.pas������������������������������������������0000644�0001750�0000144�00000000656�12523355400�023107� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uOverlayScrollBarFix; {$mode objfpc}{$H+} interface implementation uses BaseUnix; function setenv(const name, value: pchar; overwrite: longint): longint; cdecl; external 'c' name 'setenv'; initialization setenv('LIBOVERLAY_SCROLLBAR', '0', 1); if (fpGetEnv(PAnsiChar('GTK_IM_MODULE')) = 'xim') then begin setenv('GTK_IM_MODULE', '', 1); WriteLn('Warning: Unsupported input method (xim)'); end; end. ����������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uudisks.pas�������������������������������������������������������0000644�0001750�0000144�00000065607�12612505011�020316� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Interface to UDisks service via DBUS. Copyright (C) 2010-2012 Przemyslaw Nagay (cobines@gmail.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 uUDisks; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl; type TStringArray = array of string; TUDisksDeviceInfo = record DeviceObjectPath: String; DeviceFile: String; DeviceIsDrive, DeviceIsSystemInternal, DeviceIsPartition, DeviceIsPartitionTable, // Does the device have a partition table DeviceIsMounted, DeviceIsRemovable, // If contains removable media. DeviceIsOpticalDisc, // If is an optical drive and optical disk is inserted. DeviceIsMediaAvailable, DriveIsMediaEjectable: Boolean; DeviceMountPaths: TStringArray; DevicePresentationHide: Boolean; DevicePresentationName: String; DevicePresentationIconName: String; DeviceAutomountHint: String; // Whether automatically mount or not DriveConnectionInterface, DriveMedia: String; // Type of media currently in the drive. DriveMediaCompatibility: TStringArray; // Possible media types. DriveCanDetach: Boolean; // Hot-plugged device (USB, Firewire, etc.) IdUsage, IdType, IdVersion, IdUuid, IdLabel, PartitionSlave: String; // Owner device if this is a partition end; TUDisksDevicesInfos = array of TUDisksDeviceInfo; TUDisksMethod = (UDisks_DeviceAdded, UDisks_DeviceRemoved, UDisks_DeviceChanged); TUDisksDeviceNotify = procedure(Reason: TUDisksMethod; const ObjectPath: String) of object; TUDisksObserverList = specialize TFPGList<TUDisksDeviceNotify>; const UDisksDevicePathPrefix = '/org/freedesktop/UDisks/devices/'; function UDisksObjectPathToDeviceFile(const ObjectPath: String): String; function DeviceFileToUDisksObjectPath(const DeviceFile: String): String; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: String; IsPropertyAnObjectPath: Boolean = False): Boolean; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: Boolean): Boolean; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: TStringArray): Boolean; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; function EnumerateDevices(out DevicesList: TStringArray): Boolean; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; function Mount(const ObjectPath: String; const FileSystemType: String; const Options: TStringArray; out MountPath: String): Boolean; function Unmount(const ObjectPath: String; const Options: TStringArray): Boolean; function Initialize: Boolean; procedure Finalize; procedure DispatchMessages; procedure AddObserver(Func: TUDisksDeviceNotify); procedure RemoveObserver(Func: TUDisksDeviceNotify); implementation uses dbus, ExtCtrls; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 2)} type DBusHandleMessageFunction = function(connection: PDBusConnection; message_: PDBusMessage; user_data: Pointer): DBusHandlerResult; cdecl; { Filters } function dbus_connection_add_filter(connection: PDBusConnection; function_: DBusHandleMessageFunction; user_data: Pointer; free_data_function: DBusFreeFunction): dbus_bool_t; cdecl; external LibDBus; procedure dbus_connection_remove_filter (connection: PDBusConnection; function_: DBusHandleMessageFunction; user_data: Pointer); cdecl; external LibDBus; {$ENDIF} type TDummy = class procedure OnTimer(Sender: TObject); end; var DBusConnectionOpen: Boolean = False; DBusFilterInstalled: Boolean = False; conn: PDBusConnection; error: DBusError; Observers: TUDisksObserverList = nil; InitializeCounter: Integer = 0; ConnTimer: TTimer = nil; Dummy: TDummy = nil; const UDisksMethodStr: array[TUDisksMethod] of string = ('DeviceAdded', 'DeviceRemoved', 'DeviceChanged'); UDisksAddress = 'org.freedesktop.UDisks'; UDisksObject = '/org/freedesktop/UDisks'; UDisksInterface = 'org.freedesktop.UDisks'; UDisksDeviceInterface = 'org.freedesktop.UDisks.Device'; DBusPropertiesInterface = 'org.freedesktop.DBus.Properties'; UDisksFilterStr = 'type=''signal'',' + 'sender=''' + UDisksAddress + ''',' + 'path=''' + UDisksObject + ''',' + 'interface=''' + UDisksInterface + ''''; procedure Print(const sMessage: String); begin WriteLn('UDisks: ', sMessage); end; function CheckError(const sMessage: String; pError: PDBusError): Boolean; begin if (dbus_error_is_set(pError) <> 0) then begin Print(sMessage + ': ' + pError^.name + ' ' + pError^.message); dbus_error_free(pError); Result := True; end else Result := False; end; function UDisksObjectPathToDeviceFile(const ObjectPath: String): String; begin if LeftStr(ObjectPath, Length(UDisksDevicePathPrefix)) = UDisksDevicePathPrefix then Result := '/dev/' + Copy(ObjectPath, Length(UDisksDevicePathPrefix) + 1, MaxInt) else raise Exception.Create('Invalid object path: ' + ObjectPath); end; function DeviceFileToUDisksObjectPath(const DeviceFile: String): String; begin if LeftStr(DeviceFile, 5) = '/dev/' then Result := UDisksDevicePathPrefix + Copy(DeviceFile, 6, MaxInt) else raise Exception.Create('Invalid device file name: ' + DeviceFile); end; function GetObjectPath(message: PDBusMessage; out ObjectPath: String): Boolean; var object_path: PChar; got_args: dbus_bool_t; begin dbus_error_init(@error); got_args := dbus_message_get_args(message, @error, DBUS_TYPE_OBJECT_PATH, [@object_path, DBUS_TYPE_INVALID]); if CheckError('Cannot get object path', @error) then Result := False else if got_args = 0 then begin Print('Cannot get object path'); Result := False; end else begin ObjectPath := StrPas(object_path); Result := True; end; end; function GetBasicVal(pIter: PDBusMessageIter; dbus_type: Integer; Ptr: Pointer): Boolean; begin if dbus_message_iter_get_arg_type(pIter) <> dbus_type then begin Print('Not a valid type'); Result := False; end else begin dbus_message_iter_get_basic(pIter, Ptr); Result := True; end; end; function GetArrayOfString(pIter: PDBusMessageIter; dbus_string_type: Integer; out Arr: TStringArray): Boolean; var arrayIter: DBusMessageIter; counter: Integer; StringPtr: PChar; begin if (dbus_message_iter_get_arg_type(pIter) <> DBUS_TYPE_ARRAY) or (dbus_message_iter_get_element_type(pIter) <> dbus_string_type) then begin Print('Not a valid type'); Result := False; end else begin dbus_message_iter_recurse(pIter, @arrayIter); // Check if array is not empty (if the first element is there). if dbus_message_iter_get_arg_type(@arrayIter) <> DBUS_TYPE_INVALID then begin counter := 0; repeat if GetBasicVal(@arrayIter, dbus_string_type, @StringPtr) and Assigned(StringPtr) then begin SetLength(Arr, counter + 1); Arr[counter] := StrPas(StringPtr); Inc(counter); end else Exit(False); until (dbus_message_iter_next(@arrayIter) = 0); end; end; Result := True; end; function GetArrayOfString(pIter: PDBusMessageIter; out Arr: TStringArray): Boolean; begin Result := GetArrayOfString(pIter, DBUS_TYPE_STRING, Arr); end; function GetArrayOfObjectPath(pIter: PDBusMessageIter; out Arr: TStringArray): Boolean; begin // Object path is an utf-8 string in DBUS, but marked with a different type // than normal DBUS_TYPE_STRING. Result := GetArrayOfString(pIter, DBUS_TYPE_OBJECT_PATH, Arr); end; // reply needs to be freed by the caller. function SendWithReply(message: PDBusMessage; out reply: PDBusMessage; expectedReplyType: Integer; replyIter: PDBusMessageIter): Boolean; begin dbus_error_init (@error); reply := dbus_connection_send_with_reply_and_block(conn, message, -1, @error); if CheckError('Error sending message', @error) then Result := False else if not Assigned(reply) then begin Print('Reply not received'); Result := False; end else if dbus_message_iter_init(reply, replyIter) = 0 then begin Print('Reply has no arguments'); Result := False; end else if dbus_message_iter_get_arg_type(replyIter) <> expectedReplyType then begin Print('Invalid argument type in reply.'); Result := False; end else Result := True; if (not Result) and Assigned(reply) then dbus_message_unref(reply); end; function DBusListActivatableNames(out Names: TStringArray): Boolean; var message, reply: PDBusMessage; replyIter: DBusMessageIter; begin message := dbus_message_new_method_call(DBUS_SERVICE_DBUS, DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS, 'ListActivatableNames'); if not Assigned(message) then begin Print('Cannot create message "ListActivatableNames"'); Result := False; end else begin Result := SendWithReply(message, reply, DBUS_TYPE_ARRAY, @replyIter); dbus_message_unref(message); if Result then begin Result := GetArrayOfString(@replyIter, Names); dbus_message_unref(reply); end; end; end; function Invoke_GetProperty(const ObjectPath: String; const PropertyName: String; out reply: PDBusMessage; // reply needs to be freed by the caller. pVariantIter: PDBusMessageIter): Boolean; var deviceInterfaceNamePChar: PChar; propertyNamePChar: PChar; message: PDBusMessage; replyIter: DBusMessageIter; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), DBusPropertiesInterface, 'Get'); if not Assigned(message) then begin Print('Cannot create message "Get"'); Exit(False); end; deviceInterfaceNamePChar := PChar(UDisksDeviceInterface); propertyNamePChar := PChar(PropertyName); if dbus_message_append_args(message, DBUS_TYPE_STRING, [@deviceInterfaceNamePChar, DBUS_TYPE_STRING, @propertyNamePChar, DBUS_TYPE_INVALID]) = 0 then begin Print('Cannot append arguments'); Result := False; end else if SendWithReply(message, reply, DBUS_TYPE_VARIANT, @replyIter) then begin dbus_message_iter_recurse(@replyIter, pVariantIter); Result := True; end else Result := False; dbus_message_unref(message); end; function Invoke_EnumerateDevices(out reply: PDBusMessage; // reply needs to be freed by the caller. pReplyIter: PDBusMessageIter): Boolean; var message: PDBusMessage; begin message := dbus_message_new_method_call(UDisksAddress, UDisksObject, UDisksInterface, 'EnumerateDevices'); if not Assigned(message) then begin Print('Cannot create message "EnumerateDevices"'); Result := False; end else begin Result := SendWithReply(message, reply, DBUS_TYPE_ARRAY, pReplyIter); dbus_message_unref(message); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: String; IsPropertyAnObjectPath: Boolean): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; StringPtr: PChar; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin if IsPropertyAnObjectPath then Result := GetBasicVal(@itVariant, DBUS_TYPE_OBJECT_PATH, @StringPtr) else Result := GetBasicVal(@itVariant, DBUS_TYPE_STRING, @StringPtr); if Result and Assigned(StringPtr) then Value := StrPas(StringPtr); dbus_message_unref(reply); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: Boolean): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; DbusValue: dbus_bool_t; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin Result := GetBasicVal(@itVariant, DBUS_TYPE_BOOLEAN, @DbusValue); if Result then Value := DbusValue <> 0; dbus_message_unref(reply); end; end; function GetObjectProperty(const ObjectPath: String; const PropertyName: String; out Value: TStringArray): Boolean; var reply: PDBusMessage; itVariant: DBusMessageIter; begin Result := Invoke_GetProperty(ObjectPath, PropertyName, reply, @itVariant); if Result then begin Result := GetArrayOfString(@itVariant, Value); dbus_message_unref(reply); end; end; function GetDeviceInfo(const ObjectPath: String; out Info: TUDisksDeviceInfo): Boolean; begin // Description of properties: // http://hal.freedesktop.org/docs/udisks/Device.html with Info do begin DeviceObjectPath := ObjectPath; Result := GetObjectProperty(ObjectPath, 'DeviceFile', DeviceFile) and GetObjectProperty(ObjectPath, 'DeviceIsDrive', DeviceIsDrive) and GetObjectProperty(ObjectPath, 'DeviceIsSystemInternal', DeviceIsSystemInternal) and GetObjectProperty(ObjectPath, 'DeviceIsPartition', DeviceIsPartition) and GetObjectProperty(ObjectPath, 'DeviceIsPartitionTable', DeviceIsPartitionTable) and GetObjectProperty(ObjectPath, 'DeviceIsMounted', DeviceIsMounted) and GetObjectProperty(ObjectPath, 'DeviceIsRemovable', DeviceIsRemovable) and GetObjectProperty(ObjectPath, 'DeviceIsOpticalDisc', DeviceIsOpticalDisc) and GetObjectProperty(ObjectPath, 'DeviceIsMediaAvailable', DeviceIsMediaAvailable) and GetObjectProperty(ObjectPath, 'DevicePresentationHide', DevicePresentationHide) and GetObjectProperty(ObjectPath, 'DevicePresentationName', DevicePresentationName) and GetObjectProperty(ObjectPath, 'DevicePresentationIconName', DevicePresentationIconName) and GetObjectProperty(ObjectPath, 'DeviceAutomountHint', DeviceAutomountHint); if Result and DeviceIsPartition then Result := GetObjectProperty(ObjectPath, 'PartitionSlave', PartitionSlave, True); if Result and DeviceIsMounted then Result := GetObjectProperty(ObjectPath, 'DeviceMountPaths', DeviceMountPaths); if Result and DeviceIsDrive then begin Result := GetObjectProperty(ObjectPath, 'DriveIsMediaEjectable', DriveIsMediaEjectable) and GetObjectProperty(ObjectPath, 'DriveConnectionInterface', DriveConnectionInterface) and GetObjectProperty(ObjectPath, 'DriveMedia', DriveMedia) and GetObjectProperty(ObjectPath, 'DriveMediaCompatibility', DriveMediaCompatibility) and GetObjectProperty(ObjectPath, 'DriveCanDetach', DriveCanDetach); end; if Result then begin Result := GetObjectProperty(ObjectPath, 'IdUsage', IdUsage) and GetObjectProperty(ObjectPath, 'IdType', IdType) and GetObjectProperty(ObjectPath, 'IdVersion', IdVersion) and GetObjectProperty(ObjectPath, 'IdUuid', IdUuid) and GetObjectProperty(ObjectPath, 'IdLabel', IdLabel); end; end; end; function EnumerateDevices(out DevicesList: TStringArray): Boolean; var reply: PDBusMessage; replyIter: DBusMessageIter; begin Result := Invoke_EnumerateDevices(reply, @replyIter); if Result then begin Result := GetArrayOfObjectPath(@replyIter, DevicesList); dbus_message_unref(reply); end; end; function EnumerateDevices(out DevicesInfos: TUDisksDevicesInfos): Boolean; var DevicesList: TStringArray; i: Integer; begin Result := EnumerateDevices(DevicesList); if Result then begin SetLength(DevicesInfos, Length(DevicesList)); for i := 0 to Length(DevicesList) - 1 do begin if not GetDeviceInfo(DevicesList[i], DevicesInfos[i]) then Exit(False); end; end; end; function Mount(const ObjectPath: String; const FileSystemType: String; const Options: TStringArray; out MountPath: String): Boolean; var message, reply: PDBusMessage; argsIter, arrayIter, replyIter: DBusMessageIter; optsPChar: PChar; i: Integer; StringPtr: PChar; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), UDisksDeviceInterface, 'FilesystemMount'); if not Assigned(message) then begin Print('Cannot create message "FilesystemMount"'); Result := False; end else begin dbus_message_iter_init_append(message, @argsIter); optsPChar := PChar(FileSystemType); Result := (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_STRING, @optsPChar) <> 0) and (dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, PChar(DBUS_TYPE_STRING_AS_STRING), @arrayIter) <> 0); if Result then begin for i := Low(Options) to High(Options) do begin optsPChar := PChar(Options[i]); if dbus_message_iter_append_basic(@arrayIter, DBUS_TYPE_STRING, @optsPChar) = 0 then begin Result := False; Break; end; end; if dbus_message_iter_close_container(@argsIter, @arrayIter) = 0 then Result := False; end; if not Result then begin Print('Cannot append arguments'); end else if SendWithReply(message, reply, DBUS_TYPE_STRING, @replyIter) then begin Result := GetBasicVal(@replyIter, DBUS_TYPE_STRING, @StringPtr) and Assigned(StringPtr); if Result then MountPath := StrPas(StringPtr); dbus_message_unref(reply); end else Result := False; dbus_message_unref(message); end; end; function Unmount(const ObjectPath: String; const Options: TStringArray): Boolean; var message, reply: PDBusMessage; argsIter, arrayIter: DBusMessageIter; optsPChar: PChar; i: Integer; begin message := dbus_message_new_method_call(UDisksAddress, PChar(ObjectPath), UDisksDeviceInterface, 'FilesystemUnmount'); if not Assigned(message) then begin Print('Cannot create message "FilesystemUnmount"'); Result := False; end else begin dbus_message_iter_init_append(message, @argsIter); Result := dbus_message_iter_open_container(@argsIter, DBUS_TYPE_ARRAY, PChar(DBUS_TYPE_STRING_AS_STRING), @arrayIter) <> 0; if Result then begin for i := Low(Options) to High(Options) do begin optsPChar := PChar(Options[i]); if dbus_message_iter_append_basic(@arrayIter, DBUS_TYPE_STRING, @optsPChar) = 0 then begin Result := False; Break; end; end; if dbus_message_iter_close_container(@argsIter, @arrayIter) = 0 then Result := False; end; if not Result then begin Print('Cannot append arguments'); end else begin dbus_error_init(@error); reply := dbus_connection_send_with_reply_and_block(conn, message, -1, @error); if CheckError('Error sending message', @error) then Result := False else if not Assigned(reply) then begin Print('Reply not received'); Result := False; end else Result := True; if Assigned(reply) then dbus_message_unref(reply); end; dbus_message_unref(message); end; end; function FilterFunc(connection: PDBusConnection; message: PDBusMessage; user_data: Pointer): DBusHandlerResult; cdecl; var DeviceObjectPath: String; i: Integer; begin if dbus_message_is_signal(message, 'org.freedesktop.DBus.Local', 'Disconnected') <> 0 then begin // The bus is disconnecting. "Disconnected" is the last signal in connection. Print('Disconnected from DBUS'); DBusConnectionOpen := False; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceAdded else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceAdded])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device added: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceAdded, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceRemoved else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceRemoved])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device removed: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceRemoved, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end // DeviceChanged else if dbus_message_is_signal(message, UDisksInterface, PChar(UDisksMethodStr[UDisks_DeviceChanged])) <> 0 then begin if GetObjectPath(message, DeviceObjectPath) then begin Print('Device changed: ' + DeviceObjectPath); for i := 0 to Observers.Count - 1 do Observers[i](UDisks_DeviceChanged, DeviceObjectPath); end; Exit(DBUS_HANDLER_RESULT_HANDLED); end; Exit(DBUS_HANDLER_RESULT_NOT_YET_HANDLED); end; function IsUDisksActivatable: Boolean; var ServicesNames: TStringArray; i: Integer; begin Result := False; if DBusListActivatableNames(ServicesNames) then begin for i := Low(ServicesNames) to High(ServicesNames) do if ServicesNames[i] = UDisksAddress then Exit(True); end else Print('Cannot list activatable services on DBUS'); end; function CheckUDisksService: Boolean; var udisks_exists: dbus_bool_t; start_reply: dbus_uint32_t; daemon_version: String; begin // Check if UDisks service is running. dbus_error_init(@error); udisks_exists := dbus_bus_name_has_owner(conn, UDisksAddress, @error); if CheckError('Cannot query UDisks on DBUS', @error) then Exit(False); if udisks_exists = 0 then begin // Check if UDisks service is installed and can be activated. if not IsUDisksActivatable then Exit(False); dbus_error_init(@error); dbus_bus_start_service_by_name(conn, UDisksAddress, 0, @start_reply, @error); if CheckError('Cannot request service to start', @error) then Exit(False); case start_reply of DBUS_START_REPLY_SUCCESS: Print('Service successfully started.'); DBUS_START_REPLY_ALREADY_RUNNING: Print('Service already running.'); end; end else Print('Service found running.'); if GetObjectProperty(UDisksObject, 'DaemonVersion', daemon_version) then Print('Version ' + daemon_version); Result := True; end; function Initialize: Boolean; var i: TUDisksMethod; begin Result := False; Inc(InitializeCounter); try if InitializeCounter > 1 then begin // Already initialized. Result := True; Exit; end; dbus_error_init(@error); conn := dbus_bus_get(DBUS_BUS_SYSTEM, @error); if CheckError('Cannot acquire connection to DBUS system bus', @error) then Exit; if Assigned(conn) then DBusConnectionOpen := True else Exit; // Disable exiting the application when it is disconnected from DBUS. dbus_connection_set_exit_on_disconnect(conn, 0); // Check if UDisks is running. if not CheckUDisksService then Exit; Observers := TUDisksObserverList.Create; dbus_error_init(@error); for i := Low(UDisksMethodStr) to High(UDisksMethodStr) do begin dbus_bus_add_match( conn, PChar(UDisksFilterStr + ',member=''' + UDisksMethodStr[i] + ''''), @error); CheckError('Cannot add matching rule', @error); end; Result := dbus_connection_add_filter(conn, @FilterFunc, nil, nil) <> 0; if not Result then Print('Cannot add filter for DBUS connection') else begin DBusFilterInstalled := True; Dummy := TDummy.Create; ConnTimer := TTimer.Create(nil); ConnTimer.Interval := 500; ConnTimer.OnTimer := @Dummy.OnTimer; ConnTimer.Enabled := True; end; finally if not Result then Finalize; end; end; procedure Finalize; var i: TUDisksMethod; begin Dec(InitializeCounter); if InitializeCounter <> 0 then // Don't finalize yet. Exit; if Assigned(ConnTimer) then FreeAndNil(ConnTimer); if DBusConnectionOpen then begin if DBusFilterInstalled then begin for i := Low(UDisksMethodStr) to High(UDisksMethodStr) do begin dbus_error_init(@error); dbus_bus_remove_match( conn, PChar(UDisksFilterStr + ',member=''' + UDisksMethodStr[i] + ''''), @error); CheckError('Cannot remove matching rule', @error); end; dbus_connection_remove_filter(conn, @FilterFunc, nil); DBusFilterInstalled := False; end; dbus_connection_unref(conn); DBusConnectionOpen := False; end; if Assigned(Observers) then FreeAndNil(Observers); if Assigned(Dummy) then FreeAndNil(Dummy); end; procedure DispatchMessages; begin if dbus_connection_read_write_dispatch(conn, 1) = 0 then DBusConnectionOpen := False; end; procedure AddObserver(Func: TUDisksDeviceNotify); begin if Observers.IndexOf(Func) < 0 then Observers.Add(Func); end; procedure RemoveObserver(Func: TUDisksDeviceNotify); begin Observers.Remove(Func); end; procedure TDummy.OnTimer(Sender: TObject); begin DispatchMessages; end; end. �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uusersgroups.pas��������������������������������������������������0000644�0001750�0000144�00000006444�11740433676�021431� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ File name: uUsersGroups.pas Date: 2003/07/03 Author: Martin Matusu <xmat@volny.cz> Copyright (C) 2003 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } {mate} unit uUsersGroups; {$mode objfpc}{$H+} interface uses Classes, uMyUnix; const groupInfo = '/etc/group'; userInfo = '/etc/passwd'; function uidToStr(uid: Cardinal): String; function gidToStr(gid: Cardinal): String; function strToUID(uname: AnsiString): Cardinal; function strToGID(gname: AnsiString): Cardinal; procedure getUsrGroups(uid: Cardinal; List: TStrings); procedure getUsers(List: TStrings); procedure getGroups(List: TStrings); implementation uses SysUtils; function uidToStr(uid: Cardinal): String; var uinfo: PPasswordRecord; begin uinfo:= getpwuid(uid); if (uinfo = nil) then Result:= '' else Result:= String(uinfo^.pw_name); end; function gidToStr(gid: Cardinal): String; var ginfo: PGroupRecord; begin ginfo:= getgrgid(gid); if (ginfo = nil) then Result:= '' else Result:= String(ginfo^.gr_name); end; procedure getUsrGroups(uid: Cardinal; List: TStrings); var groups: TStrings; iC,iD: integer; sT: string; begin // parse groups records groups:= TStringlist.Create; try List.Clear; groups.LoadFromFile(groupInfo); for ic:= 0 to (groups.Count - 1) do begin st:= groups.Strings[ic]; //get one record to parse id:= Pos(UIDtoStr(uid), st); //get position of uname if ((id<>0) or (uid=0)) then begin st:= Copy(st, 1, Pos(':',st) - 1); List.Append(st); end; // if end; // for finally FreeAndNil(groups); end; end; procedure getGroups(List: TStrings); begin getUsrGroups(0, List); end; procedure GetUsers(List: TStrings); var Users: TStrings; iC: integer; sT: string; begin users:= TStringList.Create; try users.LoadFromFile(userInfo); List.Clear; for ic:= 0 to (users.Count - 1) do begin st:= users.Strings[ic]; //get one record (line) st:= copy(st, 1, Pos(':',st) - 1); //extract username List.Append(st); //append to the list end; finally FreeAndNil(users); end; end; function strToUID(uname: AnsiString): Cardinal; //Converts username to UID ('root' results to 0) var uinfo: PPasswordRecord; begin uinfo:= getpwnam(PChar(uname)); if (uinfo = nil) then Result:= High(Cardinal) else Result:= uinfo^.pw_uid; end; function strToGID(gname: AnsiString): Cardinal; var ginfo: PGroupRecord; begin ginfo:= getgrnam(PChar(gname)); if (ginfo = nil) then Result:= High(Cardinal) else Result:= ginfo^.gr_gid; end; {/mate} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/umagickwand.pas���������������������������������������������������0000755�0001750�0000144�00000015527�12624110204�021117� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- ImageMagick thumbnail provider Copyright (C) 2013-2014 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uMagickWand; {$mode delphi} interface implementation uses LCLIntf, Classes, SysUtils, DynLibs, FileUtil, Types, Graphics, CTypes, DCOSUtils, DCConvertEncoding, uThumbnails, uDebug, uClassesEx, uGraphics; const MagickFalse = 0; MagickTrue = 1; const libMagickWand = 'libMagickWand.so.%d'; type PMagickWand = Pointer; MagickBooleanType = culong; ExceptionType = Word; PExceptionType = ^ExceptionType; {$PACKENUM 4} type FilterTypes = ( UndefinedFilter, PointFilter, BoxFilter, TriangleFilter, HermiteFilter, HanningFilter, HammingFilter, BlackmanFilter, GaussianFilter, QuadraticFilter, CubicFilter, CatromFilter, MitchellFilter, LanczosFilter, BesselFilter, SincFilter ); var MagickWand: TLibHandle; var MagickWandGenesis: procedure(); cdecl; MagickWandTerminus: procedure(); cdecl; NewMagickWand: function(): PMagickWand; cdecl; DestroyMagickWand: function(wand: PMagickWand): PMagickWand; cdecl; MagickGetException: function(wand: PMagickWand; severity: PExceptionType): PAnsiChar; cdecl; MagickRelinquishMemory: function(resource: Pointer): Pointer; cdecl; MagickReadImage: function(wand: PMagickWand; const filename: PAnsiChar): MagickBooleanType; cdecl; MagickGetImageWidth: function(wand: PMagickWand): culong; cdecl; MagickGetImageHeight: function(wand: PMagickWand): culong; cdecl; MagickResizeImage: function(wand: PMagickWand; const columns, rows: culong; const filter: FilterTypes; const blur: double): MagickBooleanType; cdecl; MagickSetImageFormat: function(wand: PMagickWand; const format: PAnsiChar): MagickBooleanType; cdecl; MagickGetImageBlob: function(wand: PMagickWand; length: Pcsize_t): PByte; cdecl; procedure RaiseWandException(Wand: PMagickWand); var Description: PAnsiChar; Severity: ExceptionType; ExceptionMessage: AnsiString; begin Description:= MagickGetException(Wand, @Severity); ExceptionMessage:= AnsiString(Description); Description:= MagickRelinquishMemory(Description); Raise Exception.Create(ExceptionMessage); end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Memory: PByte; Wand: PMagickWand; MemorySize: csize_t; Width, Height: culong; BlobStream: TBlobStream; Status: MagickBooleanType; Bitmap: TPortableNetworkGraphic; begin Result:= nil; if SameText(ExtractFileExt(aFileName), '.xcf') then begin // DCDebug('GetThumbnail start: ' + IntToStr(GetTickCount)); MagickWandGenesis; Wand:= NewMagickWand; try Status:= MagickReadImage(Wand, PAnsiChar(CeUtf8ToSys(aFileName))); try if (Status = MagickFalse) then RaiseWandException(Wand); // Get image width and height Width:= MagickGetImageWidth(Wand); Height:= MagickGetImageHeight(Wand); if (Width > aSize.cx) or (Height > aSize.cy) then begin // Calculate aspect width and height of thumb aSize:= TThumbnailManager.GetPreviewScaleSize(Width, Height); // Create image thumbnail Status:= MagickResizeImage(Wand, aSize.cx, aSize.cy, LanczosFilter, 1.0); if (Status = MagickFalse) then RaiseWandException(Wand); end; Status:= MagickSetImageFormat(Wand, 'PNG32'); if (Status = MagickFalse) then RaiseWandException(Wand); Memory:= MagickGetImageBlob(Wand, @MemorySize); if Assigned(Memory) then try BlobStream:= TBlobStream.Create(Memory, MemorySize); Bitmap:= TPortableNetworkGraphic.Create; try Bitmap.LoadFromStream(BlobStream); Result:= Graphics.TBitmap.Create; BitmapAssign(Result, Bitmap); except FreeAndNil(Result); end; Bitmap.Free; BlobStream.Free; finally MagickRelinquishMemory(Memory); end; except on E: Exception do DCDebug('ImageMagick: ' + E.Message); end; finally Wand:= DestroyMagickWand(Wand); MagickWandTerminus; // DCDebug('GetThumbnail finish: ' + IntToStr(GetTickCount)); end; end; end; procedure Initialize; var Version: Integer; LibraryName: AnsiString = 'libMagickWand-6.Q16.so.1'; begin MagickWand:= LoadLibrary(LibraryName); if (MagickWand = NilHandle) then for Version:= 7 downto 3 do begin LibraryName:= Format(libMagickWand, [Version]); MagickWand:= LoadLibrary(LibraryName); if (MagickWand <> NilHandle) then Break; end; if (MagickWand <> NilHandle) then try @MagickWandGenesis:= SafeGetProcAddress(MagickWand, 'MagickWandGenesis'); @MagickWandTerminus:= SafeGetProcAddress(MagickWand, 'MagickWandTerminus'); @NewMagickWand:= SafeGetProcAddress(MagickWand, 'NewMagickWand'); @DestroyMagickWand:= SafeGetProcAddress(MagickWand, 'DestroyMagickWand'); @MagickGetException:= SafeGetProcAddress(MagickWand, 'MagickGetException'); @MagickRelinquishMemory:= SafeGetProcAddress(MagickWand, 'MagickRelinquishMemory'); @MagickReadImage:= SafeGetProcAddress(MagickWand, 'MagickReadImage'); @MagickGetImageWidth:= SafeGetProcAddress(MagickWand, 'MagickGetImageWidth'); @MagickGetImageHeight:= SafeGetProcAddress(MagickWand, 'MagickGetImageHeight'); @MagickResizeImage:= SafeGetProcAddress(MagickWand, 'MagickResizeImage'); @MagickSetImageFormat:= SafeGetProcAddress(MagickWand, 'MagickSetImageFormat'); @MagickGetImageBlob:= SafeGetProcAddress(MagickWand, 'MagickGetImageBlob'); // Register thumbnail provider TThumbnailManager.RegisterProvider(@GetThumbnail); DCDebug('ImageMagick: ' + LibraryName); except end; end; procedure Finalize; begin if (MagickWand <> NilHandle) then FreeLibrary(MagickWand); end; initialization Initialize; finalization Finalize; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/upipeserver.pas���������������������������������������������������0000644�0001750�0000144�00000006510�12606472177�021207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Unix implementation of one-way IPC between 2 processes Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) Based on simpleipc.inc from Free Component Library. Copyright (c) 2005 by Michael Van Canneyt, member of the Free Pascal development team See the file COPYING.FPC.txt, included in this distribution, for details about the copyright. 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. } unit uPipeServer; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SimpleIPC, BaseUnix; Type { TPipeServerComm } TPipeServerComm = Class(TIPCServerComm) Private FFileName: String; FStream: TFileStream; private procedure Handler(Sender: TObject); Public Constructor Create(AOWner : TSimpleIPCServer); override; Procedure StartServer; override; Procedure StopServer; override; Function PeekMessage(TimeOut : Integer) : Boolean; override; Procedure ReadMessage ; override; Function GetInstanceID : String;override; Property FileName : String Read FFileName; Property Stream : TFileStream Read FStream; end; implementation uses uPollThread; ResourceString SErrFailedToCreatePipe = 'Failed to create named pipe: %s'; SErrFailedToRemovePipe = 'Failed to remove named pipe: %s'; type TUnixIPCServer = class(TSimpleIPCServer); procedure TPipeServerComm.Handler(Sender: TObject); begin TThread.Synchronize(nil, @TUnixIPCServer(Owner).ReadMessage); end; constructor TPipeServerComm.Create(AOWner: TSimpleIPCServer); Var D : String; begin inherited Create(AOWner); FFileName:=Owner.ServerID; If Not Owner.Global then FFileName:=FFileName+'-'+IntToStr(fpGetPID); D:='/tmp/'; // Change to something better later FFileName:=D+FFileName; end; procedure TPipeServerComm.StartServer; const PrivateRights = S_IRUSR or S_IWUSR; GlobalRights = PrivateRights or S_IRGRP or S_IWGRP or S_IROTH or S_IWOTH; Rights : Array [Boolean] of Integer = (PrivateRights,GlobalRights); begin If not FileExists(FFileName) then If (fpmkFifo(FFileName,438)<>0) then DoError(SErrFailedToCreatePipe,[FFileName]); FStream:=TFileStream.Create(FFileName,fmOpenReadWrite+fmShareDenyNone,Rights[Owner.Global]); AddPoll(FStream.Handle, POLLIN, @Handler, False); end; procedure TPipeServerComm.StopServer; begin RemovePoll(FStream.Handle); FreeAndNil(FStream); if Not DeleteFile(FFileName) then DoError(SErrFailedtoRemovePipe,[FFileName]); end; function TPipeServerComm.PeekMessage(TimeOut: Integer): Boolean; Var FDS : TFDSet; begin fpfd_zero(FDS); fpfd_set(FStream.Handle,FDS); Result:=fpSelect(FStream.Handle+1,@FDS,Nil,Nil,TimeOut)>0; end; procedure TPipeServerComm.ReadMessage; Var Count : Integer; Hdr : TMsgHeader; M : TStream; begin FStream.ReadBuffer(Hdr,SizeOf(Hdr)); SetMsgType(Hdr.MsgType); Count:=Hdr.MsgLen; M:=MsgData; if count > 0 then begin M.Seek(0,soFrombeginning); M.CopyFrom(FStream,Count); end else M.Size := 0; end; function TPipeServerComm.GetInstanceID: String; begin Result:=IntToStr(fpGetPID); end; initialization DefaultIPCServerClass:= TPipeServerComm; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/ujpegthumb.pas����������������������������������������������������0000644�0001750�0000144�00000005332�12612505011�020766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Fast JPEG thumbnail provider Copyright (C) 2013 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uJpegThumb; {$mode objfpc}{$H+} interface implementation uses Classes, SysUtils, Types, Graphics, FPReadJPEG, IntfGraphics, GraphType, DCClassesUtf8, uReSample, uThumbnails; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Bitmap: TBitmap; RawImage: TRawImage; FileStream: TFileStreamEx; FPReaderJPEG: TFPReaderJPEG; LazIntfImage: TLazIntfImage; begin Result:= nil; if TJPEGImage.IsFileExtensionSupported(ExtractFileExt(aFileName)) then begin Result:= TBitmap.Create; FPReaderJPEG:= TFPReaderJPEG.Create; FPReaderJPEG.MinWidth:= aSize.cx; FPReaderJPEG.MinHeight:= aSize.cy; try FileStream:= TFileStreamEx.Create(aFileName, fmOpenRead or fmShareDenyNone); LazIntfImage:= TLazIntfImage.Create(aSize.cx, aSize.cy, [riqfRGB]); try FPReaderJPEG.ImageRead(FileStream, LazIntfImage); LazIntfImage.GetRawImage(RawImage, True); if not ((LazIntfImage.Width > aSize.cx) or (LazIntfImage.Height > aSize.cy)) then Result.LoadFromRawImage(RawImage, True) else begin Bitmap:= TBitmap.Create; try Bitmap.LoadFromRawImage(RawImage, True); aSize:= TThumbnailManager.GetPreviewScaleSize(Bitmap.Width, Bitmap.Height); Result.SetSize(aSize.cx, aSize.cy); Stretch(Bitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width); finally Bitmap.Free; end; end; finally FPReaderJPEG.Free; LazIntfImage.Free; FileStream.Free; end; except FreeAndNil(Result); end; end; end; initialization TThumbnailManager.RegisterProvider(@GetThumbnail); end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/mime/�������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717737�017070� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/mime/umimetype.pas������������������������������������������������0000644�0001750�0000144�00000022717�12612505011�021567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Shared MIME-info Database - mime type guess Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) Based on PCManFM v0.5.1 (http://pcmanfm.sourceforge.net) Copyright (C) 2007 Houng Jen Yee (PCMan) <pcman.tw@gmail.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. } unit uMimeType; {$mode delphi} interface uses DCBasicTypes; {en Get file mime type. } function GetFileMimeType(const FileName: String): String; {en Get file mime type with parents. } function GetFileMimeTypes(const FileName: String): TDynamicStringArray; implementation uses Classes, SysUtils, Unix, BaseUnix, Math, LazFileUtils, DCStrUtils, DCOSUtils, uMimeCache, uXdg, uGio, uGlib2, uGio2; const xdg_mime_type_plain_text = 'text/plain'; xdg_mime_type_directory = 'inode/directory'; xdg_mime_type_unknown = 'application/octet-stream'; xdg_mime_type_executable = 'application/x-executable'; var caches: TFPList = nil; mime_magic_buf: PByte; mime_cache_max_extent: LongWord = 0; CriticalSection: TRTLCriticalSection; (* load all mime.cache files on the system, * including /usr/share/mime/mime.cache, * /usr/local/share/mime/mime.cache, * and $HOME/.local/share/mime/mime.cache. *) procedure mime_cache_load_all(); const MIME_CACHE = 'mime/mime.cache'; var I: Integer; Cache: PMimeCache; FileName: String; Path: TDynamicStringArray; begin caches := TFPList.Create; Path := GetSystemDataDirs; AddString(Path, GetUserDataDir); for I := Low(Path) to High(Path) do begin FileName := IncludeTrailingBackslash(Path[I]) + MIME_CACHE; if mbFileAccess(FileName, fmOpenRead or fmShareDenyNone) then begin Cache := mime_cache_new(FileName); caches.Add(Cache); if Cache^.magic_max_extent > mime_cache_max_extent then mime_cache_max_extent := Cache^.magic_max_extent; end; end; mime_magic_buf := GetMem(mime_cache_max_extent); end; //* free all mime.cache files on the system */ procedure mime_cache_free_all(); var I: Integer; begin for I := 0 to caches.Count - 1 do begin mime_cache_free(PMimeCache(caches[I])); end; FreeAndNil(caches); FreeMem(mime_magic_buf); end; (* * Get mime-type of the specified file (quick, but less accurate): * Mime-type of the file is determined by cheking the filename only. * If statbuf != NULL, it will be used to determine if the file is a directory. *) function mime_type_get_by_filename(const filename: PAnsiChar): PAnsiChar; var i: cint; cache: PMimeCache; glob_len: cint = 0; max_glob_len: cint = 0; suffix_pos: PByte = nil; mime_type, type_suffix: PAnsiChar; prev_suffix_pos: PByte = PByte(-1); begin //* literal matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); mime_type := mime_cache_lookup_literal(cache, filename); if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); end; //* suffix matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); type_suffix := mime_cache_lookup_suffix(cache, filename, @suffix_pos); if (type_suffix <> nil) and (suffix_pos < prev_suffix_pos) then begin mime_type := type_suffix; prev_suffix_pos := suffix_pos; end; end; if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); //* glob matching */ for i := 0 to caches.Count - 1 do begin cache := PMimeCache(caches[i]); type_suffix := mime_cache_lookup_glob(cache, filename, @glob_len); //* according to the mime.cache 1.0 spec, we should use the longest glob matched. */ if (type_suffix <> nil) and (glob_len > max_glob_len) then begin mime_type := type_suffix; max_glob_len := glob_len; end; end; if Assigned(mime_type) then Exit(PAnsiChar(mime_type)); Result := XDG_MIME_TYPE_UNKNOWN; end; (* * Get mime-type info of the specified file (slow, but more accurate): * To determine the mime-type of the file, mime_type_get_by_filename() is * tried first. If the mime-type couldn't be determined, the content of * the file will be checked, which is much more time-consuming. * If statbuf is not NULL, it will be used to determine if the file is a directory, * or if the file is an executable file; otherwise, the function will call stat() * to gather this info itself. So if you already have stat info of the file, * pass it to the function to prevent checking the file stat again. * If you have basename of the file, pass it to the function can improve the * efifciency, too. Otherwise, the function will try to get the basename of * the specified file again. *) function mime_type_get_by_file(const filepath: String; max_extent: cint): String; var data: PByte; i, len: cint; fd: cint = -1; mime_type: PAnsiChar; FileName: String; begin FileName := ExtractFileName(FilePath); mime_type := mime_type_get_by_filename(PAnsiChar(FileName)); if (strcomp(mime_type, XDG_MIME_TYPE_UNKNOWN) <> 0) then Exit(mime_type); if (max_extent > 0) then begin //* Open the file and map it into memory */ fd := mbFileOpen(filepath, fmOpenRead or fmShareDenyNone); if (fd <> -1) then begin {$IF DEFINED(HAVE_MMAP)} data := fpmmap(nil, mime_cache_max_extent, PROT_READ, MAP_SHARED, fd, 0); {$ELSE} (* * FIXME: Can g_alloca() be used here? It's very fast, but is it safe? * Actually, we can allocate a block of memory with the size of mime_cache_max_extent, * then we don't need to do dynamic allocation/free every time, but multi-threading * will be a nightmare, so... *) //* try to lock the common buffer */ if (TryEnterCriticalSection(CriticalSection) <> 0) then data := mime_magic_buf else //* the buffer is in use, allocate new one */ data := GetMem(max_extent); len := fpRead(fd, data^, max_extent); if (len = -1) then begin if (data = mime_magic_buf) then LeaveCriticalSection(CriticalSection) else FreeMem(data); data := Pointer(-1); end; {$ENDIF} if (data <> Pointer(-1)) then begin for i := 0 to caches.Count - 1 do begin mime_type := mime_cache_lookup_magic(PMimeCache(caches[i]), data, len); if (mime_type <> nil) then Break; end; //* Check for executable file */ if (mime_type = nil) and g_file_test(PAnsiChar(filepath), G_FILE_TEST_IS_EXECUTABLE) then mime_type := XDG_MIME_TYPE_EXECUTABLE; //* fallback: check for plain text */ if (mime_type = nil) then begin if FileIsText(filepath) then mime_type := XDG_MIME_TYPE_PLAIN_TEXT; end; {$IF DEFINED(HAVE_MMAP)} fpmunmap(data, mime_cache_max_extent); {$ELSE} if (data = mime_magic_buf) then LeaveCriticalSection(CriticalSection) //* unlock the common buffer */ else //* we use our own buffer */ FreeMem(data); {$ENDIF} end; fpClose(fd); end; end else begin //* empty file can be viewed as text file */ mime_type := XDG_MIME_TYPE_PLAIN_TEXT; end; if Assigned(mime_type) then Result := StrPas(mime_type) else Result := XDG_MIME_TYPE_UNKNOWN; end; (* * Get all parent type of this mime_type *) procedure mime_type_get_parents(const MimeType: String; var Parents: TDynamicStringArray); var I, J: Integer; Temp: TDynamicStringArray; begin for I := 0 to caches.Count - 1 do begin Temp := mime_cache_lookup_parents(PMimeCache(caches[I]), PAnsiChar(MimeType)); for J := Low(Temp) to High(Temp) do begin AddString(Parents, Temp[J]); end; end; end; function GetFileMimeType(const FileName: String): String; var Stat: TStat; MaxExtent: LongWord; begin if fpStat(FileName, Stat) < 0 then Exit(EmptyStr); if fpS_ISREG(Stat.st_mode) then begin MaxExtent:= Min(mime_cache_max_extent, Stat.st_size); if HasGio then Result:= GioGetMimeType(FileName, MaxExtent) else begin Result := mime_type_get_by_file(FileName, MaxExtent); end; end else if fpS_ISDIR(Stat.st_mode) then Result:= XDG_MIME_TYPE_DIRECTORY else if fpS_ISCHR(Stat.st_mode) then Result:= 'inode/chardevice' else if fpS_ISBLK(Stat.st_mode) then Result:= 'inode/blockdevice' else if fpS_ISFIFO(Stat.st_mode) then Result:= 'inode/fifo' else if fpS_ISLNK(Stat.st_mode) then Result:= 'inode/symlink' else if fpS_ISSOCK(Stat.st_mode) then Result:= 'inode/socket'; end; function GetFileMimeTypes(const FileName: String): TDynamicStringArray; var MimeType: String; begin MimeType:= GetFileMimeType(FileName); AddString(Result, MimeType); mime_type_get_parents(MimeType, Result); end; initialization mime_cache_load_all(); InitCriticalSection(CriticalSection); finalization mime_cache_free_all(); DoneCriticalSection(CriticalSection); end. �������������������������������������������������doublecmd-0.7.1/src/platform/unix/mime/umimecache.pas�����������������������������������������������0000644�0001750�0000144�00000034465�12613131232�021655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Shared MIME-info Database mime.cache file parser (http://standards.freedesktop.org/shared-mime-info-spec) Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) Based on PCManFM v0.5.1 (http://pcmanfm.sourceforge.net) Copyright (C) 2007 Houng Jen Yee (PCMan) <pcman.tw@gmail.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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. } unit uMimeCache; {$mode objfpc}{$H+} interface uses Classes, SysUtils, BaseUnix, Unix, Math, DCBasicTypes; type PMimeCache = ^TMimeCache; TMimeCache = record file_path: String; buffer: PAnsiChar; size: LongWord; n_alias: LongWord; s_alias: PAnsiChar; n_parents: LongWord; parents: PAnsiChar; n_literals: LongWord; literals: PAnsiChar; n_globs: LongWord; globs: PAnsiChar; n_suffix_roots: LongWord; suffix_roots: PAnsiChar; n_magics: LongWord; magic_max_extent: LongWord; magics: PAnsiChar; end; function mime_cache_new(const file_path: String): PMimeCache; procedure mime_cache_free(cache: PMimeCache); function mime_cache_load(cache: PMimeCache; const file_path: String): Boolean; function mime_cache_lookup_literal(cache: PMimeCache; const filename: PChar): PAnsiChar; function mime_cache_lookup_magic(cache: PMimeCache; const data: PByte; len: Integer): PAnsiChar; function mime_cache_lookup_parents(cache: PMimeCache; const mime_type: PChar): TDynamicStringArray; function mime_cache_lookup_glob(cache: PMimeCache; const filename: PChar; glob_len: PInteger): PAnsiChar; function mime_cache_lookup_suffix(cache: PMimeCache; const filename: PChar; const suffix_pos: PPChar): PAnsiChar; implementation uses uGlib2, CTypes; function fnmatch(const pattern: PAnsiChar; const str: PAnsiChar; flags: cint): cint; cdecl; external; const LIB_MAJOR_VERSION = 1; (* FIXME: since mime-cache 1.2, weight is splitted into three parts * only lower 8 bit contains weight, and higher bits are flags and case-sensitivity. * anyway, since we don't support weight at all, it'll be fixed later. * We claimed that we support 1.2 to cheat pcmanfm as a temporary quick dirty fix * for the broken file manager, but this should be correctly done in the future. * Weight and case-sensitivity are not handled now. *) LIB_MAX_MINOR_VERSION = 2; LIB_MIN_MINOR_VERSION = 1; const //* cache header */ MAJOR_VERSION = 0; MINOR_VERSION = 2; ALIAS_LIST = 4; PARENT_LIST = 8; LITERAL_LIST = 12; SUFFIX_TREE = 16; GLOB_LIST = 20; MAGIC_LIST = 24; NAMESPACE_LIST = 28; function VAL16(buffer: PAnsiChar; idx: Integer): Word; inline; begin Result := BEtoN(PWord(buffer + idx)^); end; function VAL32(buffer: PAnsiChar; idx: Integer): LongWord; inline; begin Result := BEtoN(PLongWord(buffer + idx)^); end; function mime_cache_new(const file_path: String): PMimeCache; begin New(Result); FillChar(Result^, SizeOf(TMimeCache), 0); if (Length(file_path) > 0) then mime_cache_load(Result, file_path); end; procedure mime_cache_unload(cache: PMimeCache; Clear: Boolean); begin if Assigned(cache^.buffer) then begin {$IF DEFINED(HAVE_MMAP)} fpmunmap(cache^.buffer, cache^.size); {$ELSE} FreeMem(cache^.buffer); {$ENDIF} end; if (Clear) then FillChar(cache^, sizeof(TMimeCache), 0); end; procedure mime_cache_free(cache: PMimeCache); begin mime_cache_unload(cache, False); Dispose(cache); end; function mime_cache_load(cache: PMimeCache; const file_path: String): Boolean; var offset: LongWord; fd: Integer = -1; majv, minv: LongWord; statbuf: BaseUnix.Stat; buffer: PAnsiChar = nil; begin //* Unload old cache first if needed */ mime_cache_unload(cache, True); //* Store the file path */ cache^.file_path := file_path; //* Open the file and map it into memory */ fd := fpOpen(file_path, O_RDONLY, 0); if (fd < 0) then Exit(False); if (fpFStat(fd, statbuf) < 0) then begin fpClose(fd); Exit(False); end; {$IF DEFINED(HAVE_MMAP)} buffer := fpmmap(nil, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); {$ELSE} buffer := GetMem(statbuf.st_size); if Assigned(buffer) then fpRead(fd, buffer^, statbuf.st_size) else buffer := Pointer(-1); {$ENDIF} fpClose(fd); if (buffer = Pointer(-1)) then Exit(False); majv := VAL16(buffer, MAJOR_VERSION); minv := VAL16(buffer, MINOR_VERSION); //* Check version */ if (majv > LIB_MAJOR_VERSION) or (minv > LIB_MAX_MINOR_VERSION) or (minv < LIB_MIN_MINOR_VERSION) then begin {$IF DEFINED(HAVE_MMAP)} fpmunmap(buffer, statbuf.st_size); {$ELSE} FreeMem(buffer); {$ENDIF} Exit(False); end; cache^.buffer := buffer; cache^.size := statbuf.st_size; offset := VAL32(buffer, ALIAS_LIST); cache^.s_alias := buffer + offset + 4; cache^.n_alias := VAL32(buffer, offset); offset := VAL32(buffer, PARENT_LIST); cache^.parents := buffer + offset + 4; cache^.n_parents := VAL32(buffer, offset); offset := VAL32(buffer, LITERAL_LIST); cache^.literals := buffer + offset + 4; cache^.n_literals := VAL32(buffer, offset); offset := VAL32(buffer, GLOB_LIST); cache^.globs := buffer + offset + 4; cache^.n_globs := VAL32(buffer, offset); offset := VAL32(buffer, SUFFIX_TREE); cache^.suffix_roots := buffer + VAL32(buffer + offset, 4); cache^.n_suffix_roots := VAL32(buffer, offset); offset := VAL32(buffer, MAGIC_LIST); cache^.n_magics := VAL32(buffer, offset); cache^.magic_max_extent := VAL32(buffer + offset, 4); cache^.magics := buffer + VAL32(buffer + offset, 8); Result := True; end; function magic_rule_match(const buf: PAnsiChar; rule: PAnsiChar; const data: PByte; len: Integer): Boolean; var i: Integer; value, mask: PByte; match: Boolean = False; offset, range: LongWord; val_off, mask_off: LongWord; max_offset, val_len: LongWord; n_children, first_child_off: LongWord; begin offset := VAL32(rule, 0); range := VAL32(rule, 4); max_offset := offset + range; val_len := VAL32(rule, 12); while (offset < max_offset) and ((offset + val_len) <= len) do begin val_off := VAL32(rule, 16); mask_off := VAL32(rule, 20); value := PByte(buf + val_off); //* FIXME: word_size and byte order are not supported! */ if (mask_off > 0) then //* compare with mask applied */ begin mask := PByte(buf + mask_off); for i := 0 to val_len - 1 do begin if ((data[offset + i] and mask[i]) <> value[i]) then break; end; if (i >= val_len) then match := True; end else //* direct comparison */ begin if (CompareMem(value, data + offset, val_len)) then match := True; end; if (match) then begin n_children := VAL32(rule, 24); if (n_children > 0) then begin i := 0; first_child_off := VAL32(rule, 28); rule := buf + first_child_off; while (i < n_children) do begin if (magic_rule_match(buf, rule, data, len)) then Exit(True); Inc(i); rule += 32; end; end else Exit(True); end; Inc(offset); end; Result := False; end; function magic_match(const buf: PAnsiChar; const magic: PAnsiChar; const data: PByte; len: Integer): Boolean; var i: Integer = 0; rule: PAnsiChar; n_rules, rules_off: LongWord; begin n_rules := VAL32(magic, 8); rules_off := VAL32(magic, 12); rule := buf + rules_off; while (i < n_rules) do begin if (magic_rule_match(buf, rule, data, len)) then Exit(True); Inc(i); rule += 32; end; Result := False; end; function mime_cache_lookup_magic(cache: PMimeCache; const data: PByte; len: Integer): PAnsiChar; var i: Integer = 0; magic: PAnsiChar; begin magic := cache^.magics; if (data = nil) or (0 = len) or (magic = nil) then Exit(nil); while (i < cache^.n_magics) do begin if (magic_match(cache^.buffer, magic, data, len)) then begin Exit(cache^.buffer + VAL32(magic, 4)); end; Inc(i); magic += 16; end; Result := nil; end; (* Reverse suffix tree is used since mime.cache 1.1 (shared mime info 0.4) * Returns the address of the found "node", not mime-type. * FIXME: 1. Should be optimized with binary search * 2. Should consider weight of suffix nodes *) function lookup_reverse_suffix_nodes(const buf: PAnsiChar; const nodes: PAnsiChar; n: LongWord; const name: Pgchar; const suffix: Pgchar; const suffix_pos: PPChar): PAnsiChar; var i: Integer; ch: LongWord; uchar: gunichar; node: PAnsiChar; ret: PAnsiChar = nil; cur_suffix_pos: Pgchar; _suffix_pos: Pgchar = nil; leaf_node: PAnsiChar = nil; n_children, first_child_off: LongWord; begin cur_suffix_pos := suffix + 1; if Assigned(suffix) then uchar := g_unichar_tolower(g_utf8_get_char(suffix)) else uchar := 0; //* g_debug("%s: suffix= '%s'", name, suffix); */ for i := 0 to n - 1 do begin node := nodes + i * 12; ch := VAL32(node, 0); _suffix_pos := suffix; if (ch > 0) then begin if (ch = uchar) then begin n_children := VAL32(node, 4); first_child_off := VAL32(node, 8); leaf_node := lookup_reverse_suffix_nodes(buf, buf + first_child_off, n_children, name, g_utf8_find_prev_char(name, suffix), @_suffix_pos); if Assigned(leaf_node) and (_suffix_pos < cur_suffix_pos) then begin ret := leaf_node; cur_suffix_pos := _suffix_pos; end; end; end else //* ch == 0 */ begin //* guint32 weight = VAL32(node, 8); */ //* suffix is found in the tree! */ if (suffix < cur_suffix_pos) then begin ret := node; cur_suffix_pos := suffix; end; end; end; suffix_pos^ := cur_suffix_pos; Result := ret; end; function mime_cache_lookup_suffix(cache: PMimeCache; const filename: PChar; const suffix_pos: PPChar): PAnsiChar; var suffix: Pgchar; root: PAnsiChar; n, fn_len: Integer; ret: PAnsiChar = nil; leaf_node: PAnsiChar; mime_type: PAnsiChar = nil; _suffix_pos: PChar = PAnsiChar(-1); begin root := cache^.suffix_roots; n := cache^.n_suffix_roots; if (filename = nil) or (filename^ = #0) or (0 = n) then Exit(nil); fn_len := strlen(filename); suffix := g_utf8_find_prev_char(filename, filename + fn_len); leaf_node := lookup_reverse_suffix_nodes(cache^.buffer, root, n, filename, suffix, @_suffix_pos); if (leaf_node <> nil) then begin mime_type := cache^.buffer + VAL32(leaf_node, 4); //* g_debug( "found: %s", mime_type ); */ suffix_pos^ := _suffix_pos; ret := mime_type; end; Result := ret; end; function lookup_str_in_entries(cache: PMimeCache; const entries: PAnsiChar; n: Integer; const str: Pgchar): PAnsiChar; var str2: Pgchar; entry: PAnsiChar; lower: Integer = 0; comp, upper, middle: Integer; begin upper := n; middle := upper div 2; if (Assigned(entries) and Assigned(str) and (str^ <> #0)) then begin //* binary search */ while (upper >= lower) do begin entry := entries + middle * 8; str2 := Pgchar(cache^.buffer + VAL32(entry, 0)); comp := strcomp(str, str2); if (comp < 0) then upper := middle - 1 else if (comp > 0) then lower := middle + 1 else //* comp == 0 */ Exit(cache^.buffer + VAL32(entry, 4)); middle := (upper + lower) div 2; end; end; Result := nil; end; function mime_cache_lookup_alias(cache: PMimeCache; const mime_type: PChar): PAnsiChar; begin Result := lookup_str_in_entries(cache, cache^.s_alias, cache^.n_alias, mime_type); end; function mime_cache_lookup_literal(cache: PMimeCache; const filename: PChar): PAnsiChar; var str2: Pgchar; lower: Integer = 0; entries, entry: PAnsiChar; comp, upper, middle: Integer; begin (* FIXME: weight is used in literal lookup after mime.cache v1.1. * However, it's poorly documented. So I've no idea how to implement this. *) entries := cache^.literals; upper := cache^.n_literals; middle := upper div 2; if (Assigned(entries) and Assigned(filename) and (filename^ <> #0)) then begin //* binary search */ while (upper >= lower) do begin //* The entry size is different in v 1.1 */ entry := entries + middle * 12; str2 := Pgchar(cache^.buffer + VAL32(entry, 0)); comp := strcomp(filename, str2); if (comp < 0) then upper := middle - 1 else if (comp > 0) then lower := middle + 1 else //* comp == 0 */ Exit(cache^.buffer + VAL32(entry, 4)); middle := (upper + lower) div 2; end; end; Result := nil; end; function mime_cache_lookup_glob(cache: PMimeCache; const filename: PChar; glob_len: PInteger): PAnsiChar; var glob: PChar; entry: PAnsiChar; i, _glob_len: Integer; max_glob_len: Integer = 0; begin Result := nil; entry := cache^.globs; for i := 0 to cache^.n_globs - 1 do begin glob := PChar(cache^.buffer + VAL32(entry, 0)); _glob_len := strlen(glob); if (fnmatch(glob, filename, 0) = 0) and (_glob_len > max_glob_len) then begin max_glob_len := _glob_len; Result := (cache^.buffer + VAL32(entry, 4)); end; entry += 12; end; glob_len^ := max_glob_len; end; function mime_cache_lookup_parents(cache: PMimeCache; const mime_type: PChar): TDynamicStringArray; var parent: PChar; n, i: LongWord; parents: PAnsiChar; parent_off: LongWord; begin parents := lookup_str_in_entries(cache, cache^.parents, cache^.n_parents, mime_type); if (parents = nil) then Exit(nil); n := VAL32(parents, 0); parents += 4; SetLength(Result, n); for i := 0 to n - 1 do begin parent_off := VAL32(parents, i * 4); parent := PChar(cache^.buffer + parent_off); Result[i] := parent; end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/mime/umimeactions.pas���������������������������������������������0000644�0001750�0000144�00000043412�12631011052�022237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Handles actions associated with MIME types in .desktop files. Based on FreeDesktop.org specifications (http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html) (http://www.freedesktop.org/wiki/Specifications/mime-apps-spec) Copyright (C) 2009-2010 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) 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 uMimeActions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type PDesktopFileEntry = ^TDesktopFileEntry; TDesktopFileEntry = record DesktopFilePath: String; MimeType: String; DisplayName: String; Comment: String; ExecWithParams: String; // with %F, %U etc. Exec: String; // % params resolved IconName: String; Categories: String; Terminal: Boolean; Hidden: Boolean; end; {en Needs absolute file names. Returns a list of PDesktopFileEntry. } function GetDesktopEntries(FileNames: TStringList): TList; {en Needs absolute file names. Returns a default application command line. } function GetDefaultAppCmd(FileNames: TStringList): String; {en Get desktop entry by desktop file name. } function GetDesktopEntry(const FileName: String): PDesktopFileEntry; {en Adds a new action for given mimetype. @param(MimeType File mime type) @param(DesktopEntry Desktop file name or user command) @param(DefaultAction Set as default action for this mime type) @returns(The function returns @true if successful, @false otherwise) } function AddDesktopEntry(const MimeType, DesktopEntry: String; DefaultAction: Boolean): Boolean; function TranslateAppExecToCmdLine(const entry: PDesktopFileEntry; const fileList: TStringList): String; implementation uses Unix, DCBasicTypes, DCClassesUtf8, DCStrUtils, uDCUtils, uGlib2, uIconTheme, uClipboard, DCOSUtils, uKeyFile, uGio, uXdg, uMimeType; type TMimeAppsGroup = (magDefault, magAdded, magRemoved); TMimeAppsGroupSet = set of TMimeAppsGroup; type TMimeAppsList = record Defaults, Added, Removed: TDynamicStringArray; end; function TranslateAppExecToCmdLine(const entry: PDesktopFileEntry; const fileList: TStringList): String; var StartPos: Integer = 1; CurPos: Integer = 1; i: Integer; filesAdded: Boolean = False; begin // The .desktop standard does not recommend using % parameters inside quotes // in the Exec entry (the behaviour is undefined), so all those parameters // can be quoted using any method. Result := ''; while CurPos <= Length(entry^.ExecWithParams) do begin if entry^.ExecWithParams[CurPos] = '%' then begin Result := Result + Copy(entry^.ExecWithParams, StartPos, CurPos - StartPos); Inc(CurPos); if CurPos <= Length(entry^.ExecWithParams) then case entry^.ExecWithParams[CurPos] of { 'U': begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileScheme + '//' + URIEncode(fileList[i])); end; filesAdded := True; end; 'u': if fileList.Count > 0 then begin Result := Result + QuoteStr(fileScheme + '//' + URIEncode(fileList[0])); filesAdded := True; end; } 'F','U': begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileList[i]); end; filesAdded := True; end; 'f','u': if fileList.Count > 0 then begin Result := Result + QuoteStr(fileList[0]); filesAdded := True; end; 'N': // deprecated begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(fileList[i]); end; filesAdded := True; end; 'n': // deprecated if fileList.Count > 0 then begin Result := Result + QuoteStr(fileList[0]); filesAdded := True; end; 'D': // deprecated begin for i := 0 to fileList.Count - 1 do begin if i <> 0 then Result := Result + ' '; Result := Result + QuoteStr(ExtractFilePath(fileList[i])); end; filesAdded := True; end; 'd': // deprecated if fileList.Count > 0 then begin Result := Result + QuoteStr(ExtractFilePath(fileList[0])); filesAdded := True; end; 'i': if entry^.IconName <> '' then Result := Result + '--icon ' + QuoteStr(entry^.IconName); 'c': Result := Result + QuoteStr(entry^.DisplayName); 'k': Result := Result + QuoteStr(entry^.DesktopFilePath); '%': Result := Result + '%'; end; Inc(CurPos); StartPos := CurPos; end else Inc(CurPos); end; if (StartPos <> CurPos) then Result := Result + Copy(entry^.ExecWithParams, StartPos, CurPos - StartPos); if not filesAdded then begin for i := 0 to fileList.Count - 1 do Result := Result + ' ' + QuoteStr(fileList[i]); end; end; procedure ParseActions(Actions: TDynamicStringArray; var ActionList: TDynamicStringArray); var Action: String; begin for Action in Actions do begin if Length(GetDesktopPath(Action)) > 0 then begin if not Contains(ActionList, Action) then AddString(ActionList, Action); end; end; end; procedure SetFindPath(var MimeAppsPath: TDynamicStringArray); const APPLICATIONS = 'applications/'; var I: Integer; Temp: TDynamicStringArray; begin // $XDG_CONFIG_HOME AddString(MimeAppsPath, IncludeTrailingBackslash(GetUserConfigDir)); // $XDG_CONFIG_DIRS Temp:= GetSystemConfigDirs; for I:= Low(Temp) to High(Temp) do begin AddString(MimeAppsPath, IncludeTrailingBackslash(Temp[I])); end; // $XDG_DATA_HOME AddString(MimeAppsPath, IncludeTrailingBackslash(GetUserDataDir) + APPLICATIONS); // $XDG_DATA_DIRS Temp:= GetSystemDataDirs; for I:= Low(Temp) to High(Temp) do begin AddString(MimeAppsPath, IncludeTrailingBackslash(Temp[I]) + APPLICATIONS); end; end; function ReadMimeAppsList(const MimeType, MimeAppsPath: String; Flags: TMimeAppsGroupSet): TMimeAppsList; const MIME_APPS_LIST = 'mimeapps.list'; var J: LongInt; FileName: String; MimeApps: TKeyFile; Actions: TDynamicStringArray; MimeAppsFile: TDynamicStringArray; begin // $XDG_CURRENT_DESKTOP Actions:= GetCurrentDesktop; // Desktop specific configuration for J:= Low(Actions) to High(Actions) do begin AddString(MimeAppsFile, LowerCase(Actions[J]) + '-' + MIME_APPS_LIST); end; // Common configuration AddString(MimeAppsFile, MIME_APPS_LIST); for J:= Low(MimeAppsFile) to High(MimeAppsFile) do begin FileName:= MimeAppsPath + MimeAppsFile[J]; if mbFileExists(FileName) then try MimeApps:= TKeyFile.Create(FileName); try if magDefault in Flags then begin Actions:= MimeApps.ReadStringList('Default Applications', MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Defaults); end; if magAdded in Flags then begin Actions:= MimeApps.ReadStringList('Added Associations', MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Added); end; if magRemoved in Flags then begin Actions:= MimeApps.ReadStringList('Removed Associations', MimeType); if (Length(Actions) > 0) then ParseActions(Actions, Result.Removed); end; finally FreeAndNil(MimeApps); end; except // Continue end; end; end; procedure ReadMimeInfoCache(const MimeType, Path: String; out Actions: TDynamicStringArray); const MIME_INFO_CACHE = 'mimeinfo.cache'; var MimeCache: TKeyFile; FileName: String; AValue: TDynamicStringArray; begin FileName:= IncludeTrailingBackslash(Path) + MIME_INFO_CACHE; if mbFileExists(FileName) then try MimeCache:= TKeyFile.Create(FileName); try AValue:= MimeCache.ReadStringList('MIME Cache', MimeType); if (Length(AValue) > 0) then ParseActions(AValue, Actions); finally FreeAndNil(MimeCache); end; except // Continue end; end; function GetDesktopEntries(FileNames: TStringList): TList; var Apps: TMimeAppsList; Entry: PDesktopFileEntry; Path, Action, MimeType: String; Actions, MimeTypes: TDynamicStringArray; ResultArray, MimeAppsPath: TDynamicStringArray; procedure AddAction(const Action: String); begin Path := GetDesktopPath(Action); if Length(Path) > 0 then begin Entry := GetDesktopEntry(Path); if Assigned(Entry) then begin Entry^.MimeType := MimeType; // Set Exec as last because it uses other fields of Entry. Entry^.Exec := TranslateAppExecToCmdLine(Entry, Filenames); Result.Add(Entry); end; end; end; begin if FileNames.Count = 0 then Exit(nil); // Get file mime type MimeTypes := GetFileMimeTypes(FileNames[0]); if Length(MimeTypes) = 0 then Exit(nil); Result := TList.Create; SetFindPath(MimeAppsPath); SetLength(ResultArray, 0); for MimeType in MimeTypes do begin for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magDefault, magAdded, magRemoved]); // Add actions from default group for Action in Apps.Defaults do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Removed, Action)) then AddString(ResultArray, Action); end; // Add actions from added group for Action in Apps.Added do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Defaults, Action)) then AddString(ResultArray, Action); end; // Read actions from mimeinfo.cache ReadMimeInfoCache(MimeType, Path, Actions); for Action in Actions do begin if (not Contains(ResultArray, Action)) and (not Contains(Apps.Removed, Action)) then begin AddString(ResultArray, Action); AddString(Apps.Removed, Action); end; end; end; end; if HasGio then begin Actions:= GioMimeTypeGetActions(MimeTypes[0]); for Action in Actions do begin if not Contains(ResultArray, Action) then AddString(ResultArray, Action); end; end; // Fill result list for Action in ResultArray do begin AddAction(Action); end; end; function GetDefaultAppCmd(FileNames: TStringList): String; var I: Integer; Action: String; Apps: TMimeAppsList; MimeType, Path: String; Entry: PDesktopFileEntry; Actions: TDynamicStringArray; MimeTypes: TDynamicStringArray; MimeAppsPath: TDynamicStringArray; function GetAppExec: String; begin if Length(Action) > 0 then begin Path := GetDesktopPath(Action); if Length(Path) > 0 then begin Entry := GetDesktopEntry(Path); if Assigned(Entry) then begin Entry^.MimeType := MimeType; // Set Exec as last because it uses other fields of Entry. Result := TranslateAppExecToCmdLine(Entry, Filenames); Dispose(Entry); end; end; end; end; begin Result:= EmptyStr; if FileNames.Count = 0 then Exit; // Get file mime type MimeTypes := GetFileMimeTypes(FileNames[0]); if Length(MimeTypes) = 0 then Exit; SetFindPath(MimeAppsPath); for MimeType in MimeTypes do begin // Check defaults for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magDefault]); if Length(Apps.Defaults) > 0 then begin // First Action is default Action:= Apps.Defaults[0]; Exit(GetAppExec); end end; // Check added for Path in MimeAppsPath do begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magAdded]); if Length(Apps.Added) > 0 then begin // First Action is default Action:= Apps.Added[0]; Exit(GetAppExec); end; end; // Check mime info cache for Path in MimeAppsPath do begin // Read actions from mimeinfo.cache ReadMimeInfoCache(MimeType, Path, Actions); if Length(Actions) > 0 then begin // Read actions from mimeapps.list Apps:= ReadMimeAppsList(MimeType, Path, [magRemoved]); for I:= Low(Actions) to High(Actions) do begin if not Contains(Apps.Removed, Actions[I]) then begin Action:= Actions[I]; Exit(GetAppExec); end; end; end; end; end; //for end; function GetDesktopEntry(const FileName: String): PDesktopFileEntry; var DesktopEntryFile: TKeyFile; begin try DesktopEntryFile:= TKeyFile.Create(FileName); if not DesktopEntryFile.SectionExists(DESKTOP_GROUP) then begin DesktopEntryFile.Free; Exit(nil); end; try New(Result); with Result^, DesktopEntryFile do begin DesktopFilePath := FileName; DisplayName := ReadLocaleString(DESKTOP_GROUP, DESKTOP_KEY_NAME, EmptyStr); Comment := ReadLocaleString(DESKTOP_GROUP, DESKTOP_KEY_COMMENT, EmptyStr); ExecWithParams := ReadString(DESKTOP_GROUP, DESKTOP_KEY_EXEC, EmptyStr); IconName := ReadString(DESKTOP_GROUP, DESKTOP_KEY_ICON, EmptyStr); Categories := ReadString(DESKTOP_GROUP, DESKTOP_KEY_CATEGORIES, EmptyStr); Terminal := ReadBool(DESKTOP_GROUP, DESKTOP_KEY_TERMINAL, False); Hidden := ReadBool(DESKTOP_GROUP, DESKTOP_KEY_NO_DISPLAY, False); { Some icon names in .desktop files are specified with an extension, even though it is not allowed by the standard unless an absolute path to the icon is supplied. We delete this extension here. } if GetPathType(IconName) = ptNone then IconName := TIconTheme.CutTrailingExtension(IconName); end; finally DesktopEntryFile.Free; end; except on E: Exception do begin Result:= nil; WriteLn('GetDesktopEntry: ', E.Message); end; end; end; function AddDesktopEntry(const MimeType, DesktopEntry: String; DefaultAction: Boolean): Boolean; var CustomFile: String; UserDataDir: String; DesktopFile: TIniFileEx; MimeTypeValue: String; MimeApps: String = '/applications/mimeapps.list'; procedure UpdateDesktop(const Group: String); begin // Read current actions of this mime type MimeTypeValue:= DesktopFile.ReadString(Group, MimeType, EmptyStr); // Remove chosen action if it exists MimeTypeValue:= StringReplace(MimeTypeValue, CustomFile, EmptyStr, [rfReplaceAll]); // Save chosen action as first DesktopFile.WriteString(Group, MimeType, CustomFile + MimeTypeValue); end; begin CustomFile:= DesktopEntry; UserDataDir:= GetUserDataDir; if (StrEnds(DesktopEntry, '.desktop') = False) then begin // Create new desktop entry file for user command CustomFile:= 'dc_' + ExtractFileName(DesktopEntry) + '_'; CustomFile:= UserDataDir + '/applications/' + CustomFile; CustomFile:= GetTempName(CustomFile) + '.desktop'; try DesktopFile:= TIniFileEx.Create(CustomFile, fmCreate or fmOpenReadWrite); try DesktopFile.WriteBool(DESKTOP_GROUP, DESKTOP_KEY_NO_DISPLAY, True); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_EXEC, DesktopEntry); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_MIME_TYPE, MimeType); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_NAME, ExtractFileName(DesktopEntry)); DesktopFile.WriteString(DESKTOP_GROUP, DESKTOP_KEY_TYPE, KEY_FILE_DESKTOP_TYPE_APPLICATION); DesktopFile.UpdateFile; finally DesktopFile.Free; end; fpSystem('update-desktop-database ' + UserDataDir); except Exit(False); end; CustomFile:= ExtractFileName(CustomFile); end; // Save association in MimeApps CustomFile:= CustomFile + ';'; MimeApps:= UserDataDir + MimeApps; try DesktopFile:= TIniFileEx.Create(MimeApps, fmOpenReadWrite); try // Update added associations UpdateDesktop('Added Associations'); // Set as default action if needed if DefaultAction then begin // Update default applications UpdateDesktop('Default Applications'); end; DesktopFile.UpdateFile; Result:= True; finally DesktopFile.Free; end; except Result:= False; end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/uunixicontheme.pas������������������������������������������������0000644�0001750�0000144�00000015633�12434341601�021672� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Some useful functions for Icon Theme implementation Copyright (C) 2009-2014 Alexander Koblov (alexx2000@mail.ru) 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 uUnixIconTheme; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uIconTheme; const DEFAULT_THEME_NAME: String = 'hicolor'; DEFAULT_THEME_KDE4: String = 'default.kde4'; type { TUnixIconTheme } TUnixIconTheme = class(TIconTheme) protected function CreateParentTheme(const sThemeName: String): TIconTheme; override; public constructor Create; reintroduce; constructor Create(sThemeName: String; BaseDirList: array of String); override; function Load: Boolean; override; end; implementation uses DOM, XMLRead, DCClassesUtf8, uMyUnix, DCOSUtils, uOSUtils, uGio; function GetKdeIconTheme: String; const kde3Config = '/.kde/share/config/kdeglobals'; kde4Config = '/.kde4/share/config/kdeglobals'; var kdeConfig: array[1..2] of String = (kde4Config, kde3Config); I: Integer; iniCfg: TIniFileEx = nil; begin Result:= EmptyStr; for I:= Low(kdeConfig) to High(kdeConfig) do begin if (Length(Result) = 0) and mbFileExists(GetHomeDir + kdeConfig[I]) then try iniCfg:= TIniFileEx.Create(GetHomeDir + kdeConfig[I]); try Result:= iniCfg.ReadString('Icons', 'Theme', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; if (Length(Result) = 0) and mbDirectoryExists('/usr/share/icons/default.kde4') then Result:= 'default.kde4' else if (Length(Result) = 0) and mbDirectoryExists('/usr/share/icons/default.kde') then Result:= 'default.kde'; end; function GetGnomeIconTheme: String; begin Result:= GioGetIconTheme('org.gnome.desktop.interface'); if Length(Result) = 0 then Result:= 'gnome'; end; function GetXfceIconTheme: String; const xfceConfig = '/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml'; var J, I: Integer; ChildNode1, ChildNode2: TDOMNode; xmlCfg: TXMLDocument = nil; begin Result:= EmptyStr; if mbFileExists(GetHomeDir + xfceConfig) then try ReadXMLFile(xmlCfg, GetHomeDir + xfceConfig); try for J := 0 to xmlCfg.DocumentElement.ChildNodes.Count -1 do begin ChildNode1:= xmlCfg.DocumentElement.ChildNodes.Item[J]; if (ChildNode1.NodeName = 'property') then if (ChildNode1.Attributes.Length > 0) and (ChildNode1.Attributes[0].NodeValue = 'Net') then for I:= 0 to ChildNode1.ChildNodes.Count - 1 do begin ChildNode2 := ChildNode1.ChildNodes.Item[I]; if (ChildNode2.NodeName = 'property') then if (ChildNode2.Attributes.Length > 2) and (ChildNode2.Attributes[0].NodeValue = 'IconThemeName') then begin Result:= ChildNode2.Attributes[2].NodeValue; Exit; end; end; end; finally xmlCfg.Free; end; except // Skip end; end; function GetLxdeIconTheme: String; const lxdeConfig1 = '/.config/lxsession/%s/desktop.conf'; lxdeConfig2 = '/etc/xdg/lxsession/%s/desktop.conf'; var I: Integer; DesktopSession: String; iniCfg: TIniFileEx = nil; lxdeConfig: array[1..2] of String = (lxdeConfig1, lxdeConfig2); begin Result:= EmptyStr; DesktopSession:= mbGetEnvironmentVariable('DESKTOP_SESSION'); if Length(DesktopSession) <> 0 then begin lxdeConfig[1]:= GetHomeDir + Format(lxdeConfig[1], [DesktopSession]); lxdeConfig[2]:= Format(lxdeConfig[2], [DesktopSession]); for I:= Low(lxdeConfig) to High(lxdeConfig) do begin if (Length(Result) = 0) and mbFileExists(lxdeConfig[I]) then try iniCfg:= TIniFileEx.Create(lxdeConfig[I]); try Result:= iniCfg.ReadString('GTK', 'sNet/IconThemeName', EmptyStr); finally iniCfg.Free; end; except // Skip end; end; end; end; function GetMateIconTheme: String; inline; begin Result:= GioGetIconTheme('org.mate.interface'); end; function GetCinnamonIconTheme: String; inline; begin Result:= GioGetIconTheme('org.cinnamon.desktop.interface'); end; function GetCurrentIconTheme: String; begin Result:= EmptyStr; case DesktopEnv of DE_UNKNOWN: Result:= DEFAULT_THEME_NAME; DE_KDE: Result:= GetKdeIconTheme; DE_GNOME: Result:= GetGnomeIconTheme; DE_XFCE: Result:= GetXfceIconTheme; DE_LXDE: Result:= GetLxdeIconTheme; DE_MATE: Result:= GetMateIconTheme; DE_CINNAMON: Result:= GetCinnamonIconTheme; end; if Result = EmptyStr then Result:= DEFAULT_THEME_NAME; end; var UnixIconThemesBaseDirList: array of String; procedure InitIconThemesBaseDirList; var Home: String; I: Integer = 1; begin Home := GetHomeDir; SetLength(UnixIconThemesBaseDirList, 6); UnixIconThemesBaseDirList[0] := Home + '/.icons'; UnixIconThemesBaseDirList[1] := Home + '/.local/share/icons'; if DesktopEnv = DE_KDE then begin I:= 3; SetLength(UnixIconThemesBaseDirList, 8); UnixIconThemesBaseDirList[2] := Home + '/.kde/share/icons'; UnixIconThemesBaseDirList[3] := Home + '/.kde4/share/icons'; end; UnixIconThemesBaseDirList[I + 1] := '/usr/local/share/icons'; UnixIconThemesBaseDirList[I + 2] := '/usr/local/share/pixmaps'; UnixIconThemesBaseDirList[I + 3] := '/usr/share/icons'; UnixIconThemesBaseDirList[I + 4] := '/usr/share/pixmaps'; end; { TUnixIconTheme } function TUnixIconTheme.CreateParentTheme(const sThemeName: String): TIconTheme; begin Result:= TUnixIconTheme.Create(sThemeName, FBaseDirListAtCreate); end; constructor TUnixIconTheme.Create; begin inherited Create(GetCurrentIconTheme, UnixIconThemesBaseDirList); end; constructor TUnixIconTheme.Create(sThemeName: String; BaseDirList: array of String); begin inherited Create(sThemeName, BaseDirList); end; function TUnixIconTheme.Load: Boolean; begin Result:= inherited Load; // add default theme if needed if Result and Assigned(FInherits) then begin LoadParentTheme(DEFAULT_THEME_NAME); if (DesktopEnv = DE_KDE) then LoadParentTheme(DEFAULT_THEME_KDE4); end; end; initialization InitIconThemesBaseDirList; end. �����������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/unix/ushellcontextmenu.pas���������������������������������������������0000644�0001750�0000144�00000066000�12647765722�022432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 uShellContextMenu; {$mode delphi}{$H+} interface uses Classes, SysUtils, Controls, Menus, uGlobs, uFile, uDrive; type { EContextMenuException } EContextMenuException = class(Exception); { TShellContextMenu } TShellContextMenu = class(TPopupMenu) private FFiles: TFiles; FDrive: TDrive; FUserWishForContextMenu: TUserWishForContextMenu; procedure PackHereSelect(Sender: TObject); procedure ExtractHereSelect(Sender: TObject); procedure ContextMenuSelect(Sender: TObject); procedure TemplateContextMenuSelect(Sender: TObject); procedure DriveMountSelect(Sender: TObject); procedure DriveUnmountSelect(Sender: TObject); procedure DriveEjectSelect(Sender: TObject); procedure OpenWithOtherSelect(Sender: TObject); procedure OpenWithMenuItemSelect(Sender: TObject); function FillOpenWithSubMenu: Boolean; procedure CreateActionSubMenu(MenuWhereToAdd:TComponent; aFile:TFile; bIncludeViewEdit:boolean); public constructor Create(Owner: TWinControl; ADrive: PDrive); reintroduce; overload; constructor Create(Owner: TWinControl; var Files : TFiles; Background: Boolean; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete); reintroduce; overload; destructor Destroy; override; end; implementation uses LCLProc, Dialogs, Graphics, uFindEx, uDCUtils, uOSUtils, uFileProcs, uShellExecute, uLng, uPixMapManager, uMyUnix, fMain, fFileProperties, DCOSUtils, DCStrUtils, uExts, uArchiveFileSourceUtil {$IF DEFINED(DARWIN)} , MacOSAll {$ELSE} , uKeyFile, uMimeActions, uOSForms {$IF DEFINED(LINUX)} , uRabbitVCS {$ENDIF} {$ENDIF} ; const sCmdVerbProperties = 'properties'; var // The "ContextMenuActionList" will hold the possible actions to do from the // context menu. Each "TMenuItem" associated with these actions will have the // the "tag" set to the matching "TExtActionCommand" in this "TextActionList" // list. ContextMenuActionList: TExtActionList = nil; {$IF NOT DEFINED(DARWIN)} function GetGnomeTemplateMenu(out Items: TStringList): Boolean; var searchRec: TSearchRecEx; templateDir: String; bmpBitmap: TBitmap = nil; userDirs: TStringList = nil; begin Result:= False; try Items:= nil; templateDir:= GetHomeDir + '/.config/user-dirs.dirs'; if not mbFileExists(templateDir) then Exit; userDirs:= TStringList.Create; try userDirs.LoadFromFile(templateDir); except Exit; end; templateDir:= userDirs.Values['XDG_TEMPLATES_DIR']; if Length(templateDir) = 0 then Exit; templateDir:= IncludeTrailingPathDelimiter(mbExpandFileName(TrimQuotes(templateDir))); if mbDirectoryExists(templateDir) then begin if FindFirstEx(templateDir, faAnyFile, searchRec) = 0 then begin Items:= TStringList.Create; repeat // Skip directories if FPS_ISDIR(searchRec.Attr) then Continue; bmpBitmap:= PixMapManager.LoadBitmapEnhanced(templateDir + searchRec.Name, 16, True, clMenu); Items.AddObject(ExtractOnlyFileName(searchRec.Name) + '=' + templateDir + searchRec.Name, bmpBitmap); until FindNextEx(searchRec) <> 0; Result:= Items.Count > 0; end; FindCloseEx(searchRec); end; finally if Assigned(Items) and (Items.Count = 0) then FreeAndNil(Items); FreeAndNil(userDirs); end; end; function GetKdeTemplateMenu(out Items: TStringList): Boolean; var I: Integer; bmpBitmap: TBitmap = nil; desktopFile: TKeyFile = nil; templateDir: array [0..1] of String; searchRec: TSearchRecEx; templateName, templateIcon, templatePath: String; begin Result:= False; try Items:= nil; templateDir[0]:= '/usr/share/templates'; templateDir[1]:= GetHomeDir + '/.kde/share/templates'; for I:= Low(templateDir) to High(templateDir) do if mbDirectoryExists(templateDir[I]) then begin if FindFirstEx(templateDir[I] + PathDelim + '*.desktop', faAnyFile, searchRec) = 0 then begin if not Assigned(Items) then Items:= TStringList.Create; repeat // Skip directories if FPS_ISDIR(searchRec.Attr) then Continue; try desktopFile:= TKeyFile.Create(templateDir[I] + PathDelim + searchRec.Name); try templateName:= desktopFile.ReadLocaleString('Desktop Entry', 'Name', EmptyStr); templateIcon:= desktopFile.ReadString('Desktop Entry', 'Icon', EmptyStr); templatePath:= desktopFile.ReadString('Desktop Entry', 'URL', EmptyStr); templatePath:= GetAbsoluteFileName(templateDir[I] + PathDelim, templatePath); bmpBitmap:= PixMapManager.LoadBitmapEnhanced(templateIcon, 16, True, clMenu); Items.AddObject(templateName + '=' + templatePath, bmpBitmap); finally FreeAndNil(desktopFile); end; except // Skip end; until FindNextEx(searchRec) <> 0; Result:= Items.Count > 0; end; FindCloseEx(searchRec); end; finally if Assigned(Items) and (Items.Count = 0) then FreeAndNil(Items); end; end; {$ENDIF} function GetTemplateMenu(out Items: TStringList): Boolean; begin {$IF DEFINED(DARWIN)} Result:= False; {$ELSE} case GetDesktopEnvironment of DE_KDE: Result:= GetKdeTemplateMenu(Items); else Result:= GetGnomeTemplateMenu(Items); end; {$ENDIF} end; procedure TShellContextMenu.PackHereSelect(Sender: TObject); begin frmMain.Commands.cm_PackFiles(['PackHere']); end; procedure TShellContextMenu.ExtractHereSelect(Sender: TObject); begin frmMain.Commands.cm_ExtractFiles(['ExtractHere']); end; (* handling user commands from context menu *) procedure TShellContextMenu.ContextMenuSelect(Sender: TObject); var UserSelectedCommand: TExtActionCommand = nil; begin with Sender as TComponent do UserSelectedCommand := ContextMenuActionList.ExtActionCommand[tag].CloneExtAction; try (* if SameText(sCmd, sCmdVerbProperties) then ShowFileProperties(FileSource, FFiles); *) try //For the %-Variable replacement that follows it might sounds incorrect to do it with "nil" instead of "aFile", //but original code was like that. It is useful, at least, when more than one file is selected so because of that, //it's pertinent and should be kept! ProcessExtCommandFork(UserSelectedCommand.CommandName, UserSelectedCommand.Params, UserSelectedCommand.StartPath, nil); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; finally if Assigned(UserSelectedCommand) then FreeAndNil(UserSelectedCommand); end; end; (* handling user commands from template context menu *) procedure TShellContextMenu.TemplateContextMenuSelect(Sender: TObject); var SelectedItem: TMenuItem; FileName: String; begin // ShowMessage((Sender as TMenuItem).Hint); SelectedItem:= (Sender as TMenuItem); FileName:= SelectedItem.Caption; if InputQuery(rsMsgNewFile, rsMsgEnterName, FileName) then begin FileName:= FileName + ExtractFileExt(SelectedItem.Hint); if CopyFile(SelectedItem.Hint, frmMain.ActiveFrame.CurrentPath + FileName) then begin frmMain.ActiveFrame.Reload; frmMain.ActiveFrame.SetActiveFile(FileName); end; end; end; procedure TShellContextMenu.DriveMountSelect(Sender: TObject); begin MountDrive(@FDrive); end; procedure TShellContextMenu.DriveUnmountSelect(Sender: TObject); begin UnmountDrive(@FDrive); end; procedure TShellContextMenu.DriveEjectSelect(Sender: TObject); begin EjectDrive(@FDrive); end; procedure TShellContextMenu.OpenWithOtherSelect(Sender: TObject); var I: LongInt; FileNames: TStringList; begin {$IF NOT DEFINED(DARWIN)} FileNames := TStringList.Create; for I := 0 to FFiles.Count - 1 do FileNames.Add(FFiles[I].FullPath); ShowOpenWithDialog(FileNames); {$ENDIF} end; procedure TShellContextMenu.OpenWithMenuItemSelect(Sender: TObject); var ExecCmd: String; begin ExecCmd := (Sender as TMenuItem).Hint; try ExecCmdFork(ExecCmd); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; function TShellContextMenu.FillOpenWithSubMenu: Boolean; {$IF DEFINED(DARWIN)} var I: CFIndex; ImageIndex: PtrInt; bmpTemp: TBitmap = nil; mi, miOpenWith: TMenuItem; ApplicationArrayRef: CFArrayRef = nil; FileNameCFRef: CFStringRef = nil; FileNameUrlRef: CFURLRef = nil; ApplicationUrlRef: CFURLRef = nil; ApplicationNameCFRef: CFStringRef = nil; ApplicationCString: array[0..MAX_PATH-1] of Char; begin Result:= False; if (FFiles.Count <> 1) then Exit; try FileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PChar(FFiles[0].FullPath)); FileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, FileNameCFRef, kCFURLPOSIXPathStyle, False); ApplicationArrayRef:= LSCopyApplicationURLsForURL(FileNameUrlRef, kLSRolesViewer or kLSRolesEditor or kLSRolesShell); if Assigned(ApplicationArrayRef) and (CFArrayGetCount(ApplicationArrayRef) > 0) then begin Result:= True; miOpenWith := TMenuItem.Create(Self); miOpenWith.Caption := rsMnuOpenWith; Self.Items.Add(miOpenWith); for I:= 0 to CFArrayGetCount(ApplicationArrayRef) - 1 do begin ApplicationUrlRef:= CFURLRef(CFArrayGetValueAtIndex(ApplicationArrayRef, I)); if CFURLGetFileSystemRepresentation(ApplicationUrlRef, True, ApplicationCString, SizeOf(ApplicationCString)) then begin mi := TMenuItem.Create(miOpenWith); mi.Caption := ExtractOnlyFileName(ApplicationCString); mi.Hint := QuoteStr(ApplicationCString) + #32 + QuoteStr(FFiles[0].FullPath); ImageIndex:= PixMapManager.GetApplicationBundleIcon(ApplicationCString, -1); if LSCopyDisplayNameForURL(ApplicationUrlRef, ApplicationNameCFRef) = noErr then begin if CFStringGetCString(ApplicationNameCFRef, ApplicationCString, SizeOf(ApplicationCString), kCFStringEncodingUTF8) then mi.Caption := ApplicationCString; CFRelease(ApplicationNameCFRef); end; if ImageIndex >= 0 then begin bmpTemp:= PixMapManager.GetBitmap(ImageIndex); if Assigned(bmpTemp) then begin mi.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; end; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); end; end; end; finally if Assigned(FileNameCFRef) then CFRelease(FileNameCFRef); if Assigned(FileNameUrlRef) then CFRelease(FileNameUrlRef); if Assigned(ApplicationArrayRef) then CFRelease(ApplicationArrayRef); end; end; {$ELSE} var I: LongInt; bmpTemp: TBitmap; FileNames: TStringList; Entry: PDesktopFileEntry; mi, miOpenWith: TMenuItem; DesktopEntries: TList = nil; begin Result := True; FileNames := TStringList.Create; try miOpenWith := TMenuItem.Create(Self); miOpenWith.Caption := rsMnuOpenWith; Self.Items.Add(miOpenWith); for I := 0 to FFiles.Count - 1 do FileNames.Add(FFiles[I].FullPath); DesktopEntries := GetDesktopEntries(FileNames); if Assigned(DesktopEntries) and (DesktopEntries.Count > 0) then begin for I := 0 to DesktopEntries.Count - 1 do begin Entry := PDesktopFileEntry(DesktopEntries[I]); mi := TMenuItem.Create(miOpenWith); mi.Caption := Entry^.DisplayName; mi.Hint := Entry^.Exec; bmpTemp:= PixMapManager.LoadBitmapEnhanced(Entry^.IconName, 16, True, clMenu); if Assigned(bmpTemp) then begin mi.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; mi.OnClick := Self.OpenWithMenuItemSelect; miOpenWith.Add(mi); end; miOpenWith.AddSeparator; end; mi := TMenuItem.Create(miOpenWith); mi.Caption := rsMnuOpenWithOther; mi.OnClick := Self.OpenWithOtherSelect; miOpenWith.Add(mi); {$IF DEFINED(LINUX)} FillRabbitMenu(Self, FileNames); {$ENDIF} finally FreeAndNil(FileNames); if Assigned(DesktopEntries) then begin for I := 0 to DesktopEntries.Count - 1 do Dispose(PDesktopFileEntry(DesktopEntries[I])); FreeAndNil(DesktopEntries); end; end; end; {$ENDIF} constructor TShellContextMenu.Create(Owner: TWinControl; ADrive: PDrive); var mi: TMenuItem; begin inherited Create(Owner); FDrive := ADrive^; mi := TMenuItem.Create(Self); if not ADrive^.IsMounted then begin if ADrive^.IsMediaAvailable then begin mi.Caption := rsMnuMount; mi.OnClick := Self.DriveMountSelect; end else begin mi.Caption := rsMnuNoMedia; mi.Enabled := False; end; end else begin mi.Caption := rsMnuUmount; mi.OnClick := Self.DriveUnmountSelect; end; Self.Items.Add(mi); if ADrive^.IsMediaEjectable then begin mi :=TMenuItem.Create(Self); mi.Caption := rsMnuEject; mi.OnClick := Self.DriveEjectSelect; Self.Items.Add(mi); end; end; { TShellContextMenu.CreateActionSubMenu } // Create the "Actions" menu/submenu. procedure TShellContextMenu.CreateActionSubMenu(MenuWhereToAdd:TComponent; aFile:TFile; bIncludeViewEdit:boolean); var mi: TMenuItem; I, iDummy:integer; sAct: String; iMenuPositionInsertion: integer =0; procedure AddMenuItemRightPlace; begin if MenuWhereToAdd is TMenuItem then TMenuItem(MenuWhereToAdd).Add(mi) else Self.Items.Add(mi); inc(iMenuPositionInsertion); end; procedure LocalInsertMenuSeparator; begin mi:=TMenuItem.Create(MenuWhereToAdd); mi.Caption:='-'; AddMenuItemRightPlace; end; procedure LocalInsertMenuItem(CaptionMenu:string; MenuDispatcher:integer); begin mi := TMenuItem.Create(MenuWhereToAdd); mi.Caption := CaptionMenu; mi.Tag := MenuDispatcher; mi.OnClick:= Self.ContextMenuSelect; AddMenuItemRightPlace; end; begin // Read actions from "extassoc.xml" if not gExtendedContextMenu then gExts.GetExtActions(aFile, ContextMenuActionList, @iDummy, False) else gExts.GetExtActions(aFile, ContextMenuActionList, @iDummy, True); if not gExtendedContextMenu then begin // In non expanded context menu (legacy), the order of items is: // 1o) Custom action different then Open, View or Edit // 2o) Add a separator in any action added above // 3o) View (always) // 4o) Edit (always) // note: In Windows flavor, this is not the same order but to respect initial DC legacy order, that was it. if ContextMenuActionList.Count > 0 then begin for I := 0 to pred(ContextMenuActionList.Count) do begin sAct := ContextMenuActionList.ExtActionCommand[I].ActionName; if (SysUtils.CompareText('OPEN', sAct) <> 0) and (SysUtils.CompareText('VIEW', sAct) <> 0) and (SysUtils.CompareText('EDIT', sAct) <> 0) then LocalInsertMenuItem(sAct, I); end; end; if iMenuPositionInsertion>0 then //It cannot be just (ContextMenuActionList.Count>0) 'case if the list has just OPEN, VIEW or READ, we will have nothing and we don't want the separator. LocalInsertMenuSeparator; I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView, '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName, I); I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit, '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName, I); end else begin // In expanded context menu (legacy), the order of items is the following. // 1o) Custom actions, no matter is open, view or edit (if any, add also a separator just before). // These will be shown in the same order as what they are configured in File Association. // The routine "GetExtActions" has already placed them in the wanted order. // Also, the routine "GetExtActions" has already included the menu separator ('-') between different "TExtAction". // 2o) Add a separator in any action added above // 3o) View (always, and if "external" is used, shows also the "internal" if user wants it. // 4o) Edit (always, and if "external" is used, shows also the "internal" if user wants it. // 5o) We add the Execute via shell if user requested it. // 6o) We add the Execute via terminal if user requested it (close and then stay open). // 7o) Still if user requested it, the shortcut run file association configuration, if user wanted it. // A separator also prior that last action. // note: In Windows flavor, this is not the same order but to respect initial DC legacy order, that was it. for I:= 0 to pred(ContextMenuActionList.Count) do begin if ContextMenuActionList.ExtActionCommand[I].ActionName<>'-' then begin sAct:= ContextMenuActionList.ExtActionCommand[I].ActionName; if (SysUtils.CompareText('OPEN', sAct) = 0) or (SysUtils.CompareText('VIEW', sAct) = 0) or (SysUtils.CompareText('EDIT', sAct) = 0) then sAct:=sAct+' ('+ExtractFilename(ContextMenuActionList.ExtActionCommand[I].CommandName)+')'; LocalInsertMenuItem(sAct,I); end else begin LocalInsertMenuSeparator; end; end; if ContextMenuActionList.Count>0 then LocalInsertMenuSeparator; // If the external generic viewer is configured, offer it. if gExternalTools[etViewer].Enabled then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView+' ('+rsViewWithExternalViewer+')','{!VIEWER}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Make sure we always shows our internal viewer I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuView+' ('+rsViewWithInternalViewer+')','{!DC-VIEWER}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); // If the external generic editor is configured, offer it. if gExternalTools[etEditor].Enabled then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit+' ('+rsEditWithExternalEditor+')','{!EDITOR}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Make sure we always shows our internal editor I := ContextMenuActionList.Add(TExtActionCommand.Create(rsMnuEdit+' ('+rsEditWithInternalEditor+')','{!DC-EDITOR}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); if gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen then LocalInsertMenuSeparator; // Execute via shell if gOpenExecuteViaShell then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaShell,'{!SHELL}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Execute via terminal and close if gExecuteViaTerminalClose then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalClose,'{!TERMANDCLOSE}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Execute via terminal and stay open if gExecuteViaTerminalStayOpen then begin I := ContextMenuActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalStayOpen,'{!TERMSTAYOPEN}',QuoteStr(aFile.FullPath),'')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; // Add shortcut to launch file association cnfiguration screen if gIncludeFileAssociation then begin LocalInsertMenuSeparator; I := ContextMenuActionList.Add(TExtActionCommand.Create(rsConfigurationFileAssociation,'cm_FileAssoc','','')); LocalInsertMenuItem(ContextMenuActionList.ExtActionCommand[I].ActionName,I); end; end; end; constructor TShellContextMenu.Create(Owner: TWinControl; var Files: TFiles; Background: Boolean; UserWishForContextMenu: TUserWishForContextMenu); var aFile: TFile = nil; sl: TStringList = nil; I, iDummy: Integer; sAct, sCmd: String; mi, miActions, miSortBy: TMenuItem; AddActionsMenu: Boolean = False; AddOpenWithMenu: Boolean = False; begin inherited Create(Owner); FFiles:= Files; FUserWishForContextMenu:= UserWishForContextMenu; try if ContextMenuActionList=nil then ContextMenuActionList:=TExtActionList.Create; ContextMenuActionList.Clear; if not Background then begin aFile := Files[0]; // Add the "Open" if FUserWishForContextMenu = uwcmComplete then begin mi:=TMenuItem.Create(Self); mi.Action := frmMain.actShellExecute; Self.Items.Add(mi); end; // Add the "Actions" menu if FUserWishForContextMenu = uwcmComplete then begin miActions:=TMenuItem.Create(Self); miActions.Caption:= rsMnuActions; CreateActionSubMenu(miActions, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); if miActions.Count>0 then Self.Items.Add(miActions) else miActions.Free; end else begin CreateActionSubMenu(Self, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))) end; if FUserWishForContextMenu = uwcmComplete then begin mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Open with" submenu if needed AddOpenWithMenu := FillOpenWithSubMenu; // Add delimiter menu mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Pack here..." mi:=TMenuItem.Create(Self); mi.Caption:= rsMnuPackHere; mi.OnClick:= Self.PackHereSelect; Self.Items.Add(mi); // Add "Extract here..." if FileIsArchive(aFile.FullPath) then begin mi:=TMenuItem.Create(Self); mi.Caption:= rsMnuExtractHere; mi.OnClick:= Self.ExtractHereSelect; Self.Items.Add(mi); end; // Add delimiter menu mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Move" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRename; Self.Items.Add(mi); // Add "Copy" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCopy; Self.Items.Add(mi); // Add "Delete" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actDelete; Self.Items.Add(mi); // Add "Rename" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRenameOnly; Self.Items.Add(mi); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Cut" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCutToClipboard; Self.Items.Add(mi); // Add "Copy" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actCopyToClipboard; Self.Items.Add(mi); // Add "PAste" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actPasteFromClipboard; Self.Items.Add(mi); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "Show file properties" mi:=TMenuItem.Create(Self); mi.Action := frmMain.actFileProperties; Self.Items.Add(mi); end; end else begin mi:=TMenuItem.Create(Self); mi.Action := frmMain.actRefresh; Self.Items.Add(mi); // Add "Sort by" submenu miSortBy := TMenuItem.Create(Self); miSortBy.Caption := rsMnuSortBy; Self.Items.Add(miSortBy); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByName; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByExt; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortBySize; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByDate; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actSortByAttr; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Caption := '-'; miSortBy.Add(mi); mi:=TMenuItem.Create(miSortBy); mi.Action := frmMain.actReverseOrder; miSortBy.Add(mi); mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); mi:=TMenuItem.Create(Self); mi.Action := frmMain.actPasteFromClipboard; Self.Items.Add(mi); if GetTemplateMenu(sl) then begin mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); // Add "New" submenu miSortBy := TMenuItem.Create(Self); miSortBy.Caption := rsMnuNew; Self.Items.Add(miSortBy); for I:= 0 to sl.Count - 1 do begin mi:=TMenuItem.Create(miSortBy); mi.Caption:= sl.Names[I]; mi.Hint:= sl.ValueFromIndex[I]; mi.OnClick:= Self.TemplateContextMenuSelect; if Assigned(sl.Objects[I]) then begin mi.Bitmap.Assign(TBitmap(sl.Objects[I])); sl.Objects[I].Free; sl.Objects[I]:= nil; end; miSortBy.Add(mi); end; FreeAndNil(sl); end; mi:=TMenuItem.Create(Self); mi.Caption:='-'; Self.Items.Add(mi); mi:=TMenuItem.Create(Self); mi.Caption:= frmMain.actFileProperties.Caption; mi.Hint:= sCmdVerbProperties; mi.OnClick:= Self.ContextMenuSelect; Self.Items.Add(mi); end; finally Files:= nil; end; end; destructor TShellContextMenu.Destroy; begin FreeThenNil(FFiles); inherited Destroy; end; end. doublecmd-0.7.1/src/platform/unix/urabbitvcs.pas����������������������������������������������������0000644�0001750�0000144�00000024172�12612505011�020763� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uRabbitVCS; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Menus, Graphics, uPixMapManager; const RabbitVCSAddress = 'org.google.code.rabbitvcs.RabbitVCS.Checker'; RabbitVCSObject = '/org/google/code/rabbitvcs/StatusChecker'; RabbitVCSInterface = 'org.google.code.rabbitvcs.StatusChecker'; type TVcsStatus = (vscNormal, vscModified, vscAdded, vscDeleted, vscIgnored, vscReadOnly, vscLocked, vscUnknown, vscMissing, vscReplaced, vscComplicated, vscCalculating, vscError, vscUnversioned); const VcsStatusText: array[TVcsStatus] of String = ( 'normal', 'modified', 'added', 'deleted', 'ignored', 'locked', 'locked', 'unknown', 'missing', 'replaced', 'complicated', 'calculating', 'error', 'unversioned' ); VcsStatusEmblems: array[TVcsStatus] of String = ( 'emblem-rabbitvcs-normal', 'emblem-rabbitvcs-modified', 'emblem-rabbitvcs-added', 'emblem-rabbitvcs-deleted', 'emblem-rabbitvcs-ignored', 'emblem-rabbitvcs-locked', 'emblem-rabbitvcs-locked', 'emblem-rabbitvcs-unknown', 'emblem-rabbitvcs-complicated', 'emblem-rabbitvcs-modified', 'emblem-rabbitvcs-complicated', 'emblem-rabbitvcs-calculating', 'emblem-rabbitvcs-error', 'emblem-rabbitvcs-unversioned' ); {en Requests a status check from the underlying status checker. } function CheckStatus(Path: String; Recurse: Boolean32 = False; Invalidate: Boolean32 = True; Summary: Boolean32 = False): string; procedure FillRabbitMenu(Menu: TPopupMenu; Paths: TStringList); var RabbitVCS: Boolean = False; implementation uses dbus, fpjson, jsonparser, unix, uGlobs, uGlobsPaths, uMyUnix, uPython; const MODULE_NAME = 'rabbit-vcs'; var error: DBusError; conn: PDBusConnection = nil; PythonModule: PPyObject = nil; ShellContextMenu: PPyObject = nil; procedure Print(const sMessage: String); begin WriteLn('RabbitVCS: ', sMessage); end; function CheckError(const sMessage: String; pError: PDBusError): Boolean; begin if (dbus_error_is_set(pError) <> 0) then begin Print(sMessage + ': ' + pError^.name + ' ' + pError^.message); dbus_error_free(pError); Result := True; end else Result := False; end; function CheckService(const PythonScript: String): Boolean; var service_exists: dbus_bool_t; begin dbus_error_init(@error); // Check if RabbitVCS service is running service_exists := dbus_bus_name_has_owner(conn, RabbitVCSAddress, @error); if CheckError('Cannot query RabbitVCS on DBUS', @error) then Exit(False); Result:= service_exists <> 0; if Result then Print('Service found running.') else begin Result:= fpSystemStatus(PythonExe + ' ' + PythonScript) = 0; if Result then Print('Service successfully started.'); end; end; function CheckStatus(Path: String; Recurse: Boolean32; Invalidate: Boolean32; Summary: Boolean32): string; var Return: Boolean; StringPtr: PAnsiChar; JAnswer : TJSONObject; VcsStatus: TVcsStatus; message: PDBusMessage; argsIter: DBusMessageIter; pending: PDBusPendingCall; begin if not RabbitVCS then Exit; // Create a new method call and check for errors message := dbus_message_new_method_call(RabbitVCSAddress, // target for the method call RabbitVCSObject, // object to call on RabbitVCSInterface, // interface to call on 'CheckStatus'); // method name if (message = nil) then begin Print('Cannot create message "CheckStatus"'); Exit; end; try // Append arguments StringPtr:= PAnsiChar(Path); dbus_message_iter_init_append(message, @argsIter); Return:= (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_STRING, @StringPtr) <> 0); Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Recurse) <> 0); Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Invalidate) <> 0); Return:= Return and (dbus_message_iter_append_basic(@argsIter, DBUS_TYPE_BOOLEAN, @Summary) <> 0); if not Return then begin Print('Cannot append arguments'); Exit; end; // Send message and get a handle for a reply if (dbus_connection_send_with_reply(conn, message, @pending, -1) = 0) then begin Print('Error sending message'); Exit; end; if (pending = nil) then begin Print('Pending call is null'); Exit; end; dbus_connection_flush(conn); finally dbus_message_unref(message); end; // Block until we recieve a reply dbus_pending_call_block(pending); // Get the reply message message := dbus_pending_call_steal_reply(pending); // Free the pending message handle dbus_pending_call_unref(pending); if (message = nil) then begin Print('Reply is null'); Exit; end; try // Read the parameters if (dbus_message_iter_init(message, @argsIter) <> 0) then begin if (dbus_message_iter_get_arg_type(@argsIter) = DBUS_TYPE_STRING) then begin dbus_message_iter_get_basic(@argsIter, @StringPtr); with TJSONParser.Create(StrPas(StringPtr)) do try JAnswer:= Parse as TJSONObject; try Result:= JAnswer.Strings['content']; if Result = 'unknown' then Exit(EmptyStr); except Exit(EmptyStr); end; JAnswer.Free; finally Free; end; for VcsStatus:= Low(TVcsStatus) to High(VcsStatus) do begin if (VcsStatusText[VcsStatus] = Result) then begin Result:= VcsStatusEmblems[VcsStatus]; Break; end; end; end; end; finally dbus_message_unref(message); end; end; procedure MenuClickHandler(Self, Sender: TObject); var pyMethod, pyArgs: PPyObject; MenuItem: TMenuItem absolute Sender; begin if Assigned(ShellContextMenu) then begin pyMethod:= PyString_FromString('Execute'); pyArgs:= PyString_FromString(PAnsiChar(MenuItem.Hint)); PyObject_CallMethodObjArgs(ShellContextMenu, pyMethod, pyArgs, nil); Py_XDECREF(pyArgs); Py_XDECREF(pyMethod); end; end; procedure FillRabbitMenu(Menu: TPopupMenu; Paths: TStringList); var Handler: TMethod; pyMethod, pyValue, pyArgs: PPyObject; procedure SetBitmap(Item: TMenuItem; const IconName: String); var bmpTemp: TBitmap; begin bmpTemp:= PixMapManager.LoadBitmapEnhanced(IconName, 16, True, clMenu); if Assigned(bmpTemp) then begin Item.Bitmap.Assign(bmpTemp); FreeAndNil(bmpTemp); end; end; procedure BuildMenu(pyMenu: PPyObject; BaseItem: TMenuItem); var Index: Integer; IconName: String; MenuItem: TMenuItem; pyItem, pyObject: PPyObject; begin for Index:= 0 to PyList_Size(pyMenu) - 1 do begin pyItem:= PyList_GetItem(pyMenu, Index); MenuItem:= TMenuItem.Create(BaseItem); pyObject:= PyObject_GetAttrString(pyItem, 'label'); MenuItem.Caption:= PyStringToString(pyObject); if MenuItem.Caption <> '-' then begin pyObject:= PyObject_GetAttrString(pyItem, 'identifier'); MenuItem.Hint:= PyStringToString(pyObject); if Length(MenuItem.Hint) > 0 then begin MenuItem.OnClick:= TNotifyEvent(Handler); end; pyObject:= PyObject_GetAttrString(pyItem, 'icon'); IconName:= PyStringToString(pyObject); if Length(IconName) > 0 then SetBitmap(MenuItem, IconName); end; pyObject:= PyObject_GetAttrString(pyItem, 'menu'); if Assigned(pyObject) and (PyList_Size(pyObject) > 0) then begin BuildMenu(pyObject, MenuItem); Py_DECREF(pyObject); end; BaseItem.Add(MenuItem); end; end; begin if not RabbitVCS then Exit; Py_XDECREF(ShellContextMenu); ShellContextMenu:= PythonRunFunction(PythonModule, 'GetContextMenu', Paths); if Assigned(ShellContextMenu) then begin Handler.Data:= Menu; Handler.Code:= @MenuClickHandler; pyMethod:= PyString_FromString('GetMenu'); pyValue:= PyObject_CallMethodObjArgs(ShellContextMenu, pyMethod, nil); if Assigned(pyValue) then begin BuildMenu(pyValue, Menu.Items); Py_DECREF(pyValue); end; Py_XDECREF(pyMethod); end; end; procedure Initialize; var PythonPath: String; begin dbus_error_init(@error); conn := dbus_bus_get(DBUS_BUS_SESSION, @error); if CheckError('Cannot acquire connection to DBUS session bus', @error) then Exit; if HasPython then begin PythonPath:= gpExePath + 'scripts'; RabbitVCS:= CheckService(PythonPath + PathDelim + MODULE_NAME + '.py'); if RabbitVCS then begin PythonAddModulePath(PythonPath); PythonModule:= PythonLoadModule(MODULE_NAME); end; end; end; procedure Finalize; begin if Assigned(conn) then dbus_connection_unref(conn); end; initialization RegisterInitialization(@Initialize); finalization Finalize; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uClipboard.pas���������������������������������������������������������0000644�0001750�0000144�00000042070�12454457622�017737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uClipboard; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLType; type TClipboardOperation = ( ClipboardCopy, ClipboardCut ); function CopyToClipboard(const filenames:TStringList):Boolean; function CutToClipboard(const filenames:TStringList):Boolean; function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; function URIDecode(encodedUri: String): String; function URIEncode(path: String): String; function ExtractFilenames(uriList: String): TStringList; function FileNameToURI(const FileName: String): String; function FormatUriList(FileNames: TStringList): String; function FormatTextPlain(FileNames: TStringList): String; procedure ClearClipboard; const // General MIME uriListMime = 'text/uri-list'; textPlainMime = 'text/plain'; fileScheme = 'file:'; // for URI {$IFDEF MSWINDOWS} CFSTR_PREFERRED_DROPEFFECT = 'Preferred DropEffect'; CFSTR_FILENAME = 'FileName'; CFSTR_FILENAMEW = 'FileNameW'; CFSTR_UNIFORM_RESOURCE_LOCATOR = 'UniformResourceLocator'; CFSTR_UNIFORM_RESOURCE_LOCATORW = 'UniformResourceLocatorW'; CFSTR_SHELL_IDLIST_ARRAY = 'Shell IDList Array'; CFSTR_FILEDESCRIPTOR = 'FileGroupDescriptor'; CFSTR_FILEDESCRIPTORW = 'FileGroupDescriptorW'; CFSTR_FILECONTENTS = 'FileContents'; CFSTR_HTMLFORMAT = 'HTML Format'; CFSTR_RICHTEXTFORMAT = 'Rich Text Format'; {$ELSE IFDEF UNIX} // Gnome cutText = 'cut'; copyText = 'copy'; gnomeClipboardMime = 'x-special/gnome-copied-files'; // Kde kdeClipboardMime = 'application/x-kde-cutselection'; {$ENDIF} var {$IFDEF MSWINDOWS} CFU_PREFERRED_DROPEFFECT, CFU_FILENAME, CFU_FILENAMEW, CFU_UNIFORM_RESOURCE_LOCATOR, CFU_UNIFORM_RESOURCE_LOCATORW, CFU_SHELL_IDLIST_ARRAY, CFU_FILECONTENTS, CFU_FILEGROUPDESCRIPTOR, CFU_FILEGROUPDESCRIPTORW, CFU_HTML, CFU_RICHTEXT, {$ELSE IFDEF UNIX} CFU_KDE_CUT_SELECTION, CFU_GNOME_COPIED_FILES, {$ENDIF} CFU_TEXT_PLAIN, CFU_URI_LIST: TClipboardFormat; implementation uses {$IFDEF MSWINDOWS} Windows, ActiveX, uOleDragDrop, fMain; {$ELSE IFDEF UNIX} LCLIntf, Clipbrd; {$ENDIF} procedure RegisterUserFormats; begin {$IF DEFINED(MSWINDOWS)} CFU_PREFERRED_DROPEFFECT := RegisterClipboardFormat(CFSTR_PREFERRED_DROPEFFECT); CFU_FILENAME := RegisterClipboardFormat(CFSTR_FILENAME); CFU_FILENAMEW := RegisterClipboardFormat(CFSTR_FILENAMEW); CFU_UNIFORM_RESOURCE_LOCATOR := RegisterClipboardFormat(CFSTR_UNIFORM_RESOURCE_LOCATOR); CFU_UNIFORM_RESOURCE_LOCATORW := RegisterClipboardFormat(CFSTR_UNIFORM_RESOURCE_LOCATORW); CFU_SHELL_IDLIST_ARRAY := RegisterClipboardFormat(CFSTR_SHELL_IDLIST_ARRAY); CFU_FILECONTENTS := $8000 OR RegisterClipboardFormat(CFSTR_FILECONTENTS) And $7FFF; CFU_FILEGROUPDESCRIPTOR := $8000 OR RegisterClipboardFormat(CFSTR_FILEDESCRIPTOR) And $7FFF; CFU_FILEGROUPDESCRIPTORW := $8000 OR RegisterClipboardFormat(CFSTR_FILEDESCRIPTORW) And $7FFF; CFU_HTML := $8000 OR RegisterClipboardFormat(CFSTR_HTMLFORMAT) And $7FFF; CFU_RICHTEXT := $8000 OR RegisterClipboardFormat(CFSTR_RICHTEXTFORMAT) And $7FFF; {$ELSEIF DEFINED(UNIX)} CFU_GNOME_COPIED_FILES := RegisterClipboardFormat(gnomeClipboardMime); CFU_KDE_CUT_SELECTION := RegisterClipboardFormat(kdeClipboardMime); {$ENDIF} CFU_TEXT_PLAIN := RegisterClipboardFormat(textPlainMime); CFU_URI_LIST := RegisterClipboardFormat(uriListMime); end; { Changes all '%XX' to bytes (XX is a hex number). } function URIDecode(encodedUri: String): String; var i, oldIndex: Integer; len: Integer; begin len := Length(encodedUri); Result := ''; oldIndex := 1; i := 1; while i <= len-2 do // must be at least 2 more characters after '%' begin if encodedUri[i] = '%' then begin Result := Result + Copy(encodedUri, oldIndex, i-oldIndex) + Chr(StrToInt('$' + Copy(encodedUri, i+1, 2))); i := i + 3; oldIndex := i; end else Inc(i); end; Result := Result + Copy(encodedUri, oldIndex, len - oldIndex + 1 ); end; { Escapes forbidden characters to '%XX' (XX is a hex number). } function URIEncode(path: String): String; const { Per RFC-3986, what's allowed in uri-encoded path. path-absolute = "/" [ segment-nz *( "/" segment ) ] segment = *pchar segment-nz = 1*pchar pchar = unreserved / pct-encoded / sub-delims / ":" / "@" <-- pct-encoded = "%" HEXDIG HEXDIG unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" We'll also allow "/" in pchar, because it happens to also be the OS path delimiter. } allowed : set of char = [ '-', '.', '_', '~', // 'A'..'Z', 'a'..'z', '0'..'9', '!', '$', '&', #39 {'}, '(', ')', '*', '+', ',', ';', '=', ':', '@', '/' ]; var i, oldIndex: Integer; len: Integer; begin len := Length(path); Result := ''; oldIndex := 1; i := 1; for i := 1 to len do begin if not ((path[i] >= 'a') and (path[i] <= 'z')) and not ((path[i] >= 'A') and (path[i] <= 'Z')) and not ((path[i] >= '0') and (path[i] <= '9')) and not (path[i] in allowed) then begin Result := Result + Copy(path, oldIndex, i-oldIndex) + '%' + Format('%2x', [Ord(path[i])]); oldIndex := i + 1; end; end; Result := Result + Copy(path, oldIndex, len - oldIndex + 1 ); end; { Extracts a path from URI } function ExtractPath(uri: String): String; var len: Integer; i, j: Integer; begin len := Length(uri); if (len >= Length(fileScheme)) and (CompareChar(uri[1], fileScheme, Length(fileScheme)) = 0) then begin i := 1 + Length(fileScheme); // Omit case where we would have a root-less path - it is useless to us. if (i <= len) and (uri[i] = '/') then begin // Check if we have a: - "//" authority - part. if (i+1 <= len) and (uri[i+1] = '/') then begin // Authority (usually a hostname) may be empty. for j := i + 2 to len do if uri[j] = '/' then begin Result := Copy(uri, j, len - j + 1); Break; end; end else begin // We have only a path. Result := Copy(uri, i, len - i + 1); end; end; end else Result := ''; end; { Retrieves file names delimited by line ending characters. } function ExtractFilenames(uriList: String): TStringList; var i, oldIndex: Integer; len: Integer; path: String; begin // Format should be: file://hostname/path/to/file // Hostname may be empty. len := Length(uriList); Result := TStringList.Create; // For compatibility with apps that end the string with zero. while (len > 0) and (uriList[len] = #0) do Dec(len); if len = 0 then Exit; oldIndex := 1; for i := 1 to len do begin // Search for the end of line. if uriList[i] in [ #10, #13 ] then begin if i > oldIndex then begin path := ExtractPath(Copy(uriList, oldIndex, i - oldIndex)); if Length(path) > 0 then Result.Add(path); end; oldIndex := i + 1; end end; if i >= oldIndex then begin // copy including 'i'th character path := ExtractPath(Copy(uriList, oldIndex, i - oldIndex + 1)); if Length(path) > 0 then Result.Add(path); end; end; function FileNameToURI(const FileName: String): String; begin Result := fileScheme + '//' + URIEncode(FileName); end; function FormatUriList(FileNames: TStringList): String; var i : integer; begin Result := ''; for i := 0 to filenames.Count-1 do begin // Separate previous uris with line endings, // but do not end the whole string with it. if i > 0 then Result := Result + LineEnding; Result := Result + fileScheme + '//' { don't put hostname } + URIEncode(filenames[i]); end; end; function FormatTextPlain(FileNames: TStringList): String; var i : integer; begin Result := ''; for i := 0 to filenames.Count-1 do begin if i > 0 then Result := Result + LineEnding; Result := Result + fileScheme + '//' { don't put hostname } + filenames[i]; end; end; {$IFDEF UNIX} function GetClipboardFormatAsString(formatId: TClipboardFormat): String; var PBuffer: PChar = nil; stream: TMemoryStream; begin Result := ''; stream := TMemoryStream.Create; if stream <> nil then try Clipboard.GetFormat(formatId, stream); stream.Seek(0, soFromBeginning); PBuffer := AllocMem(stream.Size); if PBuffer <> nil then begin stream.Read(PBuffer^, stream.Size); SetString(Result, PBuffer, stream.Size); end; finally if PBuffer <> nil then begin FreeMem(PBuffer); PBuffer := nil; end; FreeAndNil(stream); end; end; function GetClipboardFormatAsString(formatName: String): String; var formatId: Integer; begin formatId := Clipboard.FindFormatID(formatName); if formatId <> 0 then Result := GetClipboardFormatAsString(formatId) else Result := ''; end; {$ENDIF} function SendToClipboard(const filenames:TStringList; ClipboardOp: TClipboardOperation):Boolean; {$IFDEF MSWINDOWS} var DragDropInfo: TDragDropInfo; i: Integer; hGlobalBuffer: HGLOBAL; PreferredEffect: DWORD = DROPEFFECT_COPY; formatEtc: TFormatEtc = (CfFormat: 0; Ptd: nil; dwAspect: 0; lindex: 0; tymed: TYMED_HGLOBAL); {$ENDIF} {$IFDEF UNIX} var s: String; uriList: String; plainList: String; {$ENDIF} begin Result := False; if filenames.Count = 0 then Exit; {$IFDEF MSWINDOWS} if OpenClipboard(frmMain.Handle) = False then Exit; // Empty clipboard, freeing handles to data inside it. // Assign ownership of clipboard to self (frmMain.Handle). EmptyClipboard; { Create a helper object. } DragDropInfo := TDragDropInfo.Create(PreferredEffect); try for i := 0 to filenames.Count - 1 do DragDropInfo.Add(filenames[i]); { Now, set preferred effect. } if CFU_PREFERRED_DROPEFFECT <> 0 then begin if ClipboardOp = ClipboardCopy then PreferredEffect := DROPEFFECT_COPY else if ClipboardOp = ClipboardCut then PreferredEffect := DROPEFFECT_MOVE; hGlobalBuffer := DragDropInfo.CreatePreferredDropEffect(PreferredEffect); if hGlobalBuffer <> 0 then begin if SetClipboardData(CFU_PREFERRED_DROPEFFECT, hGlobalBuffer) = 0 then begin // Failed. GlobalFree(hGlobalBuffer); CloseClipboard; Exit; end // else SetClipboardData succeeded, // so hGlobalBuffer is now owned by the operating system. end else begin CloseClipboard; Exit; end; end; { Now, set clipboard data. } formatEtc.CfFormat := CF_HDROP; hGlobalBuffer := DragDropInfo.MakeDataInFormat(formatEtc); if SetClipboardData(CF_HDROP, hGlobalBuffer) = 0 then GlobalFree(hGlobalBuffer); formatEtc.CfFormat := CFU_SHELL_IDLIST_ARRAY; hGlobalBuffer := DragDropInfo.MakeDataInFormat(formatEtc); if SetClipboardData(CFU_SHELL_IDLIST_ARRAY, hGlobalBuffer) = 0 then GlobalFree(hGlobalBuffer); CloseClipboard; Result := True; finally FreeAndNil(DragDropInfo); end; {$ENDIF} {$IFDEF UNIX} // Prepare filenames list. uriList := FormatUriList(filenames); plainList := FormatTextPlain(filenames); Clipboard.Open; Clipboard.Clear; { Gnome } if CFU_GNOME_COPIED_FILES <> 0 then begin case ClipboardOp of ClipboardCopy: s := copyText; ClipboardCut: s := cutText; else // unsupported operation s := ''; end; if s <> '' then begin s := s + LineEnding + uriList; Clipboard.AddFormat(CFU_GNOME_COPIED_FILES, s[1], Length(s)); end; end; { KDE } if CFU_KDE_CUT_SELECTION <> 0 then begin case ClipboardOp of ClipboardCopy: s := '0'; ClipboardCut: s := '1'; else // unsupported operation s := ''; end; if s <> '' then Clipboard.AddFormat(CFU_KDE_CUT_SELECTION, s[1], Length(s)); end; // Common to all, plain text. Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), plainList[1], Length(plainList)); // Send also as URI-list. if CFU_URI_LIST <> 0 then Clipboard.AddFormat(CFU_URI_LIST, uriList[1], Length(uriList)); Clipboard.Close; Result := True; {$ENDIF} end; function CopyToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCopy); end; function CutToClipboard(const filenames:TStringList):Boolean; begin Result := SendToClipboard(filenames, ClipboardCut); end; function PasteFromClipboard(out ClipboardOp: TClipboardOperation; out filenames:TStringList):Boolean; {$IFDEF MSWINDOWS} var hGlobalBuffer: HGLOBAL; pBuffer: LPVOID; PreferredEffect: DWORD; {$ELSE IF DEFINED(UNIX)} var formatId: TClipboardFormat; uriList: String; s: String; {$ENDIF} begin filenames := nil; Result := False; // Default to 'copy' if effect hasn't been given. ClipboardOp := ClipboardCopy; {$IFDEF MSWINDOWS} if OpenClipboard(0) = False then Exit; if CFU_PREFERRED_DROPEFFECT <> 0 then begin hGlobalBuffer := GetClipboardData(CFU_PREFERRED_DROPEFFECT); if hGlobalBuffer <> 0 then begin pBuffer := GlobalLock(hGlobalBuffer); if pBuffer <> nil then begin PreferredEffect := PDWORD(pBuffer)^; if PreferredEffect = DROPEFFECT_COPY then ClipboardOp := ClipboardCopy else if PreferredEffect = DROPEFFECT_MOVE then ClipboardOp := ClipboardCut; GlobalUnlock(hGlobalBuffer); end; end; end; { Now, retrieve file names. } hGlobalBuffer := GetClipboardData(CF_HDROP); filenames := uOleDragDrop.TFileDropTarget.GetDropFilenames(hGlobalBuffer); if Assigned(filenames) then Result := True; CloseClipboard; {$ELSE IF DEFINED(UNIX)} uriList := ''; // Check if clipboard is not empty. if Clipboard.FormatCount = 0 then Exit; { Gnome } formatId := Clipboard.FindFormatID(gnomeClipboardMime); if formatId <> 0 then begin s := GetClipboardFormatAsString(formatId); { Format is: 'cut' or 'copy' + line ending character, followed by an URI-list delimited with line ending characters. Filenames may be UTF-8 encoded. e.g. cut#10file://host/path/to/file/name%C4%85%C3%B3%C5%9B%C5%BA%C4%87 } { Check operation } if (Length(s) >= Length(CutText)) and (CompareChar(s[1], CutText, Length(CutText)) = 0) then begin ClipboardOp := ClipboardCut; uriList := Copy(s, 1 + Length(CutText), Length(s)-Length(CutText)); end else if (Length(s) >= Length(CopyText)) and (CompareChar(s[1], CopyText, Length(CopyText)) = 0) then begin ClipboardOp := ClipboardCopy; uriList := Copy(s, 1 + Length(CopyText), Length(s)-Length(CopyText)); end; if Length(uriList) > 0 then uriList := URIDecode(Trim(uriList)); end else { KDE } begin formatId := Clipboard.FindFormatID(kdeClipboardMime); if formatId <> 0 then begin s := GetClipboardFormatAsString(formatId); { We should have a single char: '1' if 'cut', '0' if 'copy'. } { No uri-list in this target. } if Length(s) > 0 then begin if s[1] = '1' then ClipboardOp := ClipboardCut else ClipboardOp := ClipboardCopy; end; end; end; { Common formats } if uriList = '' then begin // Try to read one of the text formats. // The URIs in targets like STRING, UTF8_STRING, etc. are not encoded. // First try default target choosing behaviour. // Some buggy apps, however, supply UTF8_STRING or other targets // with 0 size and it's not detected by this function under gtk. uriList := Clipboard.AsText; // Next, try URI encoded list. if uriList = '' then begin uriList := GetClipboardFormatAsString(uriListMime); if Length(uriList) > 0 then uriList := URIDecode(Trim(uriList)); end; // Try plain texts now. // On non-UTF8 systems these should be encoded in system locale, // and may be displayed badly, but will be copied successfully. if uriList = '' then begin uriList := GetClipboardFormatAsString('STRING'); end; if uriList = '' then begin uriList := GetClipboardFormatAsString(textPlainMime); end; // If still nothing, then maybe the clipboard has no data in text format. if uriList = '' then Exit; end; filenames := ExtractFilenames(uriList); if (filenames <> nil) and (filenames.Count > 0) then Result := True; {$ENDIF} end; procedure ClearClipboard; {$IFDEF MSWINDOWS} begin if OpenClipboard(0) then begin EmptyClipboard; CloseClipboard; end; end; {$ELSE} begin Clipboard.Open; Clipboard.AsText := ''; Clipboard.Close; end; {$ENDIF} initialization RegisterUserFormats; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/lua.pas����������������������������������������������������������������0000644�0001750�0000144�00000155230�11740433676�016437� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit lua; (* * A complete Pascal wrapper for Lua 5.1 DLL module. * * Created by Geo Massar, 2006 * Distributed as free/open source. * 2008 Added dinamicly library loading by Dmitry Kolomiets (B4rr4cuda@rambler.ru) *) interface //{$I CallType.inc} {$DEFINE DINAMIC} {$IFDEF UNIX} uses dl; {$ENDIF} {$DEFINE LUA51} type size_t = type Cardinal; Psize_t = ^size_t; PPointer = ^Pointer; lua_State = record end; Plua_State = ^lua_State; const {$IF DEFINED(MSWINDOWS)} LuaDLL = 'lua5.1.dll'; {$ELSEIF DEFINED(UNIX)} {$IFDEF DARWIN} {$IF DEFINED(STATIC)} LuaDLL = 'lua5.1.dylib'; {$ELSEIF DEFINED(DINAMIC)} LuaDLL = 'liblua5.1.dylib'; {$ENDIF} {$ELSE} {$IF DEFINED(STATIC)} LuaDLL = 'lua5.1.so'; {$ELSEIF DEFINED(DINAMIC)} LuaDLL = 'liblua5.1.so.0'; {$ENDIF} {$ENDIF} {$ENDIF} (* formats for Lua numbers *) {$IFNDEF LUA_NUMBER_SCAN} const LUA_NUMBER_SCAN = '%lf'; {$ENDIF} {$IFNDEF LUA_NUMBER_FMT} const LUA_NUMBER_FMT = '%.14g'; {$ENDIF} {$IFDEF DINAMIC} function LoadLuaLib(filename:string):boolean; procedure UnloadLuaLib; function IsLuaLibLoaded:boolean; {$ENDIF} (*****************************************************************************) (* luaconfig.h *) (*****************************************************************************) (* ** $Id: luaconf.h,v 1.81 2006/02/10 17:44:06 roberto Exp $ ** Configuration file for Lua ** See Copyright Notice in lua.h *) (* ** {================================================================== @@ LUA_NUMBER is the type of numbers in Lua. ** CHANGE the following definitions only if you want to build Lua ** with a number type different from double. You may also need to ** change lua_number2int & lua_number2integer. ** =================================================================== *) type LUA_NUMBER_ = type Double; // ending underscore is needed in Pascal LUA_INTEGER_ = type Integer; (* @@ LUA_IDSIZE gives the maximum size for the description of the source @* of a function in debug information. ** CHANGE it if you want a different size. *) const LUA_IDSIZE = 60; (* @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. *) const LUAL_BUFFERSIZE = 1024; (* @@ LUA_PROMPT is the default prompt used by stand-alone Lua. @@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. ** CHANGE them if you want different prompts. (You can also change the ** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) *) const LUA_PROMPT = '> '; LUA_PROMPT2 = '>> '; (* @@ lua_readline defines how to show a prompt and then read a line from @* the standard input. @@ lua_saveline defines how to "save" a read line in a "history". @@ lua_freeline defines how to free a line read by lua_readline. ** CHANGE them if you want to improve this functionality (e.g., by using ** GNU readline and history facilities). *) function lua_readline(L : Plua_State; var b : PChar; p : PChar): Boolean; procedure lua_saveline(L : Plua_State; idx : Integer); procedure lua_freeline(L : Plua_State; b : PChar); (* @@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that @* is, whether we're running lua interactively). ** CHANGE it if you have a better definition for non-POSIX/non-Windows ** systems. */ #include <io.h> #include <stdio.h> #define lua_stdin_is_tty() _isatty(_fileno(stdin)) *) const lua_stdin_is_tty = TRUE; (*****************************************************************************) (* lua.h *) (*****************************************************************************) (* ** $Id: lua.h,v 1.216 2006/01/10 12:50:13 roberto Exp $ ** Lua - An Extensible Extension Language ** Lua.org, PUC-Rio, Brazil (http://www.lua.org) ** See Copyright Notice at the end of this file *) const LUA_VERSION = 'Lua 5.1'; LUA_VERSION_NUM = 501; LUA_COPYRIGHT = 'Copyright (C) 1994-2006 Tecgraf, PUC-Rio'; LUA_AUTHORS = 'R. Ierusalimschy, L. H. de Figueiredo & W. Celes'; (* mark for precompiled code (`<esc>Lua') *) LUA_SIGNATURE = #27'Lua'; (* option for multiple returns in `lua_pcall' and `lua_call' *) LUA_MULTRET = -1; (* ** pseudo-indices *) LUA_REGISTRYINDEX = -10000; LUA_ENVIRONINDEX = -10001; LUA_GLOBALSINDEX = -10002; function lua_upvalueindex(idx : Integer) : Integer; // a marco const (* thread status; 0 is OK *) LUA_YIELD_ = 1; // Note: the ending underscore is needed in Pascal LUA_ERRRUN = 2; LUA_ERRSYNTAX = 3; LUA_ERRMEM = 4; LUA_ERRERR = 5; type lua_CFunction = function(L : Plua_State) : Integer; cdecl; (* ** functions that read/write blocks when loading/dumping Lua chunks *) lua_Reader = function (L : Plua_State; ud : Pointer; sz : Psize_t) : PChar; cdecl; lua_Writer = function (L : Plua_State; const p : Pointer; sz : size_t; ud : Pointer) : Integer; cdecl; (* ** prototype for memory-allocation functions *) lua_Alloc = function (ud, ptr : Pointer; osize, nsize : size_t) : Pointer; cdecl; const (* ** basic types *) LUA_TNONE = -1; LUA_TNIL = 0; LUA_TBOOLEAN = 1; LUA_TLIGHTUSERDATA = 2; LUA_TNUMBER = 3; LUA_TSTRING = 4; LUA_TTABLE = 5; LUA_TFUNCTION = 6; LUA_TUSERDATA = 7; LUA_TTHREAD = 8; (* minimum Lua stack available to a C function *) LUA_MINSTACK = 20; type (* type of numbers in Lua *) lua_Number = LUA_NUMBER_; (* type for integer functions *) lua_Integer = LUA_INTEGER_; (* ** state manipulation *) {$IFDEF STATIC} function lua_newstate(f : lua_Alloc; ud : Pointer) : Plua_State; cdecl; external LuaDLL; procedure lua_close(L: Plua_State); cdecl; external LuaDLL; function lua_newthread(L : Plua_State) : Plua_State; cdecl; external LuaDLL; function lua_atpanic(L : Plua_State; panicf : lua_CFunction) : lua_CFunction; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type Tlua_newstate= function (f : lua_Alloc; ud : Pointer) : Plua_State; cdecl; Tlua_close= procedure (L: Plua_State); cdecl; Tlua_newthread= function (L : Plua_State) : Plua_State; cdecl; Tlua_atpanic= function (L : Plua_State; panicf : lua_CFunction) : lua_CFunction; cdecl; {$ENDIF} (* ** basic stack manipulation *) {$IFDEF STATIC} function lua_gettop(L : Plua_State) : Integer; cdecl; external LuaDLL; procedure lua_settop(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_pushvalue(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_remove(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_insert(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_replace(L : Plua_State; idx : Integer); cdecl; external LuaDLL; function lua_checkstack(L : Plua_State; sz : Integer) : LongBool; cdecl; external LuaDLL; procedure lua_xmove(src, dest : Plua_State; n : Integer); cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type Tlua_gettop= function (L : Plua_State) : Integer; cdecl; Tlua_settop= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_pushvalue= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_remove= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_insert= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_replace= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_checkstack= function (L : Plua_State; sz : Integer) : LongBool; cdecl; Tlua_xmove= procedure (src, dest : Plua_State; n : Integer); cdecl; {$ENDIF} (* ** access functions (stack -> C) *) {$IFDEF STATIC} function lua_isnumber(L : Plua_State; idx : Integer) : LongBool; cdecl; external LuaDLL; function lua_isstring(L : Plua_State; idx : Integer) : LongBool; cdecl; external LuaDLL; function lua_iscfunction(L : Plua_State; idx : Integer) : LongBool; cdecl; external LuaDLL; function lua_isuserdata(L : Plua_State; idx : Integer) : LongBool; cdecl; external LuaDLL; function lua_type(L : Plua_State; idx : Integer) : Integer; cdecl; external LuaDLL; function lua_typename(L : Plua_State; tp : Integer) : PChar; cdecl; external LuaDLL; function lua_equal(L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; external LuaDLL; function lua_rawequal(L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; external LuaDLL; function lua_lessthan(L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; external LuaDLL; function lua_tonumber(L : Plua_State; idx : Integer) : lua_Number; cdecl; external LuaDLL; function lua_tointeger(L : Plua_State; idx : Integer) : lua_Integer; cdecl; external LuaDLL; function lua_toboolean(L : Plua_State; idx : Integer) : LongBool; cdecl; external LuaDLL; function lua_tolstring(L : Plua_State; idx : Integer; len : Psize_t) : PChar; cdecl; external LuaDLL; function lua_objlen(L : Plua_State; idx : Integer) : size_t; cdecl; external LuaDLL; function lua_tocfunction(L : Plua_State; idx : Integer) : lua_CFunction; cdecl; external LuaDLL; function lua_touserdata(L : Plua_State; idx : Integer) : Pointer; cdecl; external LuaDLL; function lua_tothread(L : Plua_State; idx : Integer) : Plua_State; cdecl; external LuaDLL; function lua_topointer(L : Plua_State; idx : Integer) : Pointer; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_isnumber= function (L : Plua_State; idx : Integer) : LongBool; cdecl; Tlua_isstring= function (L : Plua_State; idx : Integer) : LongBool; cdecl; Tlua_iscfunction= function (L : Plua_State; idx : Integer) : LongBool; cdecl; Tlua_isuserdata= function (L : Plua_State; idx : Integer) : LongBool; cdecl; Tlua_type= function (L : Plua_State; idx : Integer) : Integer; cdecl; Tlua_typename= function (L : Plua_State; tp : Integer) : PChar; cdecl; Tlua_equal= function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; Tlua_rawequal= function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; Tlua_lessthan= function (L : Plua_State; idx1, idx2 : Integer) : LongBool; cdecl; Tlua_tonumber= function (L : Plua_State; idx : Integer) : lua_Number; cdecl; Tlua_tointeger= function (L : Plua_State; idx : Integer) : lua_Integer; cdecl; Tlua_toboolean= function (L : Plua_State; idx : Integer) : LongBool; cdecl; Tlua_tolstring= function (L : Plua_State; idx : Integer; len : Psize_t) : PChar; cdecl; Tlua_objlen= function (L : Plua_State; idx : Integer) : size_t; cdecl; Tlua_tocfunction= function (L : Plua_State; idx : Integer) : lua_CFunction; cdecl; Tlua_touserdata= function (L : Plua_State; idx : Integer) : Pointer; cdecl; Tlua_tothread= function (L : Plua_State; idx : Integer) : Plua_State; cdecl; Tlua_topointer= function (L : Plua_State; idx : Integer) : Pointer; cdecl; {$ENDIF} (* ** push functions (C -> stack) *) {$IFDEF STATIC} procedure lua_pushnil(L : Plua_State); cdecl; external LuaDLL; procedure lua_pushnumber(L : Plua_State; n : lua_Number); cdecl; external LuaDLL; procedure lua_pushinteger(L : Plua_State; n : lua_Integer); cdecl; external LuaDLL; procedure lua_pushlstring(L : Plua_State; const s : PChar; ls : size_t); cdecl; external LuaDLL; procedure lua_pushstring(L : Plua_State; const s : PChar); cdecl; external LuaDLL; function lua_pushvfstring(L : Plua_State; const fmt : PChar; argp : Pointer) : PChar; cdecl; external LuaDLL; function lua_pushfstring(L : Plua_State; const fmt : PChar) : PChar; varargs; cdecl; external LuaDLL; procedure lua_pushcclosure(L : Plua_State; fn : lua_CFunction; n : Integer); cdecl; external LuaDLL; procedure lua_pushboolean(L : Plua_State; b : LongBool); cdecl; external LuaDLL; procedure lua_pushlightuserdata(L : Plua_State; p : Pointer); cdecl; external LuaDLL; function lua_pushthread(L : Plua_state) : Cardinal; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_pushnil= procedure (L : Plua_State); cdecl; Tlua_pushnumber= procedure (L : Plua_State; n : lua_Number); cdecl; Tlua_pushinteger= procedure (L : Plua_State; n : lua_Integer); cdecl; Tlua_pushlstring= procedure (L : Plua_State; const s : PChar; ls : size_t); cdecl; Tlua_pushstring= procedure (L : Plua_State; const s : PChar); cdecl; Tlua_pushvfstring= function (L : Plua_State; const fmt : PChar; argp : Pointer) : PChar; cdecl; Tlua_pushfstring= function (L : Plua_State; const fmt : PChar) : PChar; {varargs;} cdecl; Tlua_pushcclosure= procedure (L : Plua_State; fn : lua_CFunction; n : Integer); cdecl; Tlua_pushboolean= procedure (L : Plua_State; b : LongBool); cdecl; Tlua_pushlightuserdata= procedure (L : Plua_State; p : Pointer); cdecl; Tlua_pushthread= function (L : Plua_state) : Cardinal; cdecl; {$ENDIF} (* ** get functions (Lua -> stack) *) {$IFDEF STATIC} procedure lua_gettable(L : Plua_State ; idx : Integer); cdecl; external LuaDLL; procedure lua_getfield(L : Plua_State; idx : Integer; k : PChar); cdecl; external LuaDLL; procedure lua_rawget(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_rawgeti(L : Plua_State; idx, n : Integer); cdecl; external LuaDLL; procedure lua_createtable(L : Plua_State; narr, nrec : Integer); cdecl; external LuaDLL; function lua_newuserdata(L : Plua_State; sz : size_t) : Pointer; cdecl; external LuaDLL; function lua_getmetatable(L : Plua_State; objindex : Integer) : LongBool; cdecl; external LuaDLL; procedure lua_getfenv(L : Plua_State; idx : Integer); cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_gettable= procedure (L : Plua_State ; idx : Integer); cdecl; Tlua_getfield= procedure (L : Plua_State; idx : Integer; k : PChar); cdecl; Tlua_rawget= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_rawgeti= procedure (L : Plua_State; idx, n : Integer); cdecl; Tlua_createtable= procedure (L : Plua_State; narr, nrec : Integer); cdecl; Tlua_newuserdata= function (L : Plua_State; sz : size_t) : Pointer; cdecl; Tlua_getmetatable= function (L : Plua_State; objindex : Integer) : LongBool; cdecl; Tlua_getfenv= procedure (L : Plua_State; idx : Integer); cdecl; {$ENDIF} (* ** set functions (stack -> Lua) *) {$IFDEF STATIC} procedure lua_settable(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_setfield(L : Plua_State; idx : Integer; const k : PChar); cdecl; external LuaDLL; procedure lua_rawset(L : Plua_State; idx : Integer); cdecl; external LuaDLL; procedure lua_rawseti(L : Plua_State; idx , n: Integer); cdecl; external LuaDLL; function lua_setmetatable(L : Plua_State; objindex : Integer): LongBool; cdecl; external LuaDLL; function lua_setfenv(L : Plua_State; idx : Integer): LongBool; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_settable= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_setfield= procedure (L : Plua_State; idx : Integer; const k : PChar); cdecl; Tlua_rawset= procedure (L : Plua_State; idx : Integer); cdecl; Tlua_rawseti= procedure (L : Plua_State; idx , n: Integer); cdecl; Tlua_setmetatable= function (L : Plua_State; objindex : Integer): LongBool; cdecl; Tlua_setfenv= function (L : Plua_State; idx : Integer): LongBool; cdecl; {$ENDIF} (* ** `load' and `call' functions (load and run Lua code) *) {$IFDEF STATIC} procedure lua_call(L : Plua_State; nargs, nresults : Integer); cdecl; external LuaDLL; function lua_pcall(L : Plua_State; nargs, nresults, errfunc : Integer) : Integer; cdecl; external LuaDLL; function lua_cpcall(L : Plua_State; func : lua_CFunction; ud : Pointer) : Integer; cdecl; external LuaDLL; function lua_load(L : Plua_State; reader : lua_Reader; dt : Pointer; const chunkname : PChar) : Integer; cdecl; external LuaDLL; function lua_dump(L : Plua_State; writer : lua_Writer; data: Pointer) : Integer; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_call= procedure (L : Plua_State; nargs, nresults : Integer); cdecl; Tlua_pcall= function (L : Plua_State; nargs, nresults, errfunc : Integer) : Integer; cdecl; Tlua_cpcall= function (L : Plua_State; func : lua_CFunction; ud : Pointer) : Integer; cdecl; Tlua_load= function (L : Plua_State; reader : lua_Reader; dt : Pointer; const chunkname : PChar) : Integer; cdecl; Tlua_dump= function (L : Plua_State; writer : lua_Writer; data: Pointer) : Integer; cdecl; {$ENDIF} (* ** coroutine functions *) {$IFDEF STATIC} function lua_yield(L : Plua_State; nresults : Integer) : Integer; cdecl; external LuaDLL; function lua_resume(L : Plua_State; narg : Integer) : Integer; cdecl; external LuaDLL; function lua_status(L : Plua_State) : Integer; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_yield= function (L : Plua_State; nresults : Integer) : Integer; cdecl; Tlua_resume= function (L : Plua_State; narg : Integer) : Integer; cdecl; Tlua_status= function (L : Plua_State) : Integer; cdecl; {$ENDIF} (* ** garbage-collection functions and options *) const LUA_GCSTOP = 0; LUA_GCRESTART = 1; LUA_GCCOLLECT = 2; LUA_GCCOUNT = 3; LUA_GCCOUNTB = 4; LUA_GCSTEP = 5; LUA_GCSETPAUSE = 6; LUA_GCSETSTEPMUL = 7; {$IFDEF STATIC} function lua_gc(L : Plua_State; what, data : Integer) : Integer; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type Tlua_gc = function(L : Plua_State; what, data : Integer):Integer; cdecl; {$ENDIF} (* ** miscellaneous functions *) {$IFDEF STATIC} function lua_error(L : Plua_State) : Integer; cdecl; external LuaDLL; function lua_next(L : Plua_State; idx : Integer) : Integer; cdecl; external LuaDLL; procedure lua_concat(L : Plua_State; n : Integer); cdecl; external LuaDLL; function lua_getallocf(L : Plua_State; ud : PPointer) : lua_Alloc; cdecl; external LuaDLL; procedure lua_setallocf(L : Plua_State; f : lua_Alloc; ud : Pointer); cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} Tlua_error= function (L : Plua_State) : Integer; cdecl; Tlua_next= function (L : Plua_State; idx : Integer) : Integer; cdecl; Tlua_concat= procedure (L : Plua_State; n : Integer); cdecl; Tlua_getallocf= function (L : Plua_State; ud : PPointer) : lua_Alloc; cdecl; Tlua_setallocf= procedure (L : Plua_State; f : lua_Alloc; ud : Pointer); cdecl; {$ENDIF} (* ** =============================================================== ** some useful macros ** =============================================================== *) procedure lua_pop(L : Plua_State; n : Integer); procedure lua_newtable(L : Plua_State); procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction); procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction); function lua_strlen(L : Plua_State; idx : Integer) : Integer; function lua_isfunction(L : Plua_State; n : Integer) : Boolean; function lua_istable(L : Plua_State; n : Integer) : Boolean; function lua_islightuserdata(L : Plua_State; n : Integer) : Boolean; function lua_isnil(L : Plua_State; n : Integer) : Boolean; function lua_isboolean(L : Plua_State; n : Integer) : Boolean; function lua_isthread(L : Plua_State; n : Integer) : Boolean; function lua_isnone(L : Plua_State; n : Integer) : Boolean; function lua_isnoneornil(L : Plua_State; n : Integer) : Boolean; procedure lua_pushliteral(L : Plua_State; s : PChar); procedure lua_setglobal(L : Plua_State; s : PChar); procedure lua_getglobal(L : Plua_State; s : PChar); function lua_tostring(L : Plua_State; idx : Integer) : PChar; (* ** compatibility macros and functions *) function lua_open : Plua_State; procedure lua_getregistry(L : Plua_State); function lua_getgccount(L : Plua_State) : Integer; type lua_Chuckreader = type lua_Reader; lua_Chuckwriter = type lua_Writer; (* ====================================================================== *) (* ** {====================================================================== ** Debug API ** ======================================================================= *) (* ** Event codes *) const LUA_HOOKCALL = 0; LUA_HOOKRET = 1; LUA_HOOKLINE = 2; LUA_HOOKCOUNT = 3; LUA_HOOKTAILRET = 4; (* ** Event masks *) LUA_MASKCALL = 1 shl LUA_HOOKCALL; LUA_MASKRET = 1 shl LUA_HOOKRET; LUA_MASKLINE = 1 shl LUA_HOOKLINE; LUA_MASKCOUNT = 1 shl LUA_HOOKCOUNT; type lua_Debug = packed record event : Integer; name : PChar; (* (n) *) namewhat : PChar; (* (n) `global', `local', `field', `method' *) what : PChar; (* (S) `Lua', `C', `main', `tail' *) source : PChar; (* (S) *) currentline : Integer; (* (l) *) nups : Integer; (* (u) number of upvalues *) linedefined : Integer; (* (S) *) short_src : array [0..LUA_IDSIZE-1] of Char; (* (S) *) (* private part *) i_ci : Integer; (* active function *) end; Plua_Debug = ^lua_Debug; (* Functions to be called by the debuger in specific events *) lua_Hook = procedure (L : Plua_State; ar : Plua_Debug); cdecl; {$IFDEF STATIC} function lua_getstack(L : Plua_State; level : Integer; ar : Plua_Debug) : Integer; cdecl; external LuaDLL; function lua_getinfo(L : Plua_State; const what : PChar; ar: Plua_Debug): Integer; cdecl; external LuaDLL; function lua_getlocal(L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; external LuaDLL; function lua_setlocal(L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; external LuaDLL; function lua_getupvalue(L : Plua_State; funcindex, n : Integer) : PChar; cdecl; external LuaDLL; function lua_setupvalue(L : Plua_State; funcindex, n : Integer) : PChar; cdecl; external LuaDLL; function lua_sethook(L : Plua_State; func : lua_Hook; mask, count: Integer): Integer; cdecl; external LuaDLL; { function lua_gethook(L : Plua_State) : lua_Hook; cdecl; external LuaDLL; } function lua_gethookmask(L : Plua_State) : Integer; cdecl; external LuaDLL; function lua_gethookcount(L : Plua_State) : Integer; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type Tlua_getstack= function (L : Plua_State; level : Integer; ar : Plua_Debug) : Integer; cdecl; Tlua_getinfo= function (L : Plua_State; const what : PChar; ar: Plua_Debug): Integer; cdecl; Tlua_getlocal= function (L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; Tlua_setlocal= function (L : Plua_State; ar : Plua_Debug; n : Integer) : PChar; cdecl; Tlua_getupvalue= function (L : Plua_State; funcindex, n : Integer) : PChar; cdecl; Tlua_setupvalue= function (L : Plua_State; funcindex, n : Integer) : PChar; cdecl; Tlua_sethook= function (L : Plua_State; func : lua_Hook; mask, count: Integer): Integer; cdecl; {function lua_gethook(L : Plua_State) : lua_Hook; cdecl;} Tlua_gethookmask= function (L : Plua_State) : Integer; cdecl; Tlua_gethookcount= function (L : Plua_State) : Integer; cdecl; {$ENDIF} (*****************************************************************************) (* lualib.h *) (*****************************************************************************) (* ** $Id: lualib.h,v 1.36 2005/12/27 17:12:00 roberto Exp $ ** Lua standard libraries ** See Copyright Notice at the end of this file *) const (* Key to file-handle type *) LUA_FILEHANDLE = 'FILE*'; LUA_COLIBNAME = 'coroutine'; LUA_TABLIBNAME = 'table'; LUA_IOLIBNAME = 'io'; LUA_OSLIBNAME = 'os'; LUA_STRLIBNAME = 'string'; LUA_MATHLIBNAME = 'math'; LUA_DBLIBNAME = 'debug'; LUA_LOADLIBNAME = 'package'; {$IFDEF STATIC} function luaopen_base(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_table(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_io(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_os(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_string(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_math(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_debug(L : Plua_State) : Integer; cdecl; external LuaDLL; function luaopen_package(L : Plua_State) : Integer; cdecl; external LuaDLL; procedure luaL_openlibs(L : Plua_State); cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type Tluaopen_base= function (L : Plua_State) : Integer; cdecl; Tluaopen_table= function (L : Plua_State) : Integer; cdecl; Tluaopen_io= function (L : Plua_State) : Integer; cdecl; Tluaopen_os= function (L : Plua_State) : Integer; cdecl; Tluaopen_string= function (L : Plua_State) : Integer; cdecl; Tluaopen_math= function (L : Plua_State) : Integer; cdecl; Tluaopen_debug= function (L : Plua_State) : Integer; cdecl; Tluaopen_package= function (L : Plua_State) : Integer; cdecl; TluaL_openlibs= procedure (L : Plua_State); cdecl; {$ENDIF} procedure lua_assert(x : Boolean); // a macro (*****************************************************************************) (* lauxlib.h *) (*****************************************************************************) (* ** $Id: lauxlib.h,v 1.87 2005/12/29 15:32:11 roberto Exp $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice at the end of this file. *) // not compatibility with the behavior of setn/getn in Lua 5.0 function luaL_getn(L : Plua_State; idx : Integer) : Integer; procedure luaL_setn(L : Plua_State; i, j : Integer); const LUA_ERRFILE = LUA_ERRERR + 1; type luaL_Reg = packed record name : PChar; func : lua_CFunction; end; PluaL_Reg = ^luaL_Reg; {$IFDEF STATIC} procedure luaL_openlib(L : Plua_State; const libname : PChar; const lr : PluaL_Reg; nup : Integer); cdecl; external LuaDLL; procedure luaL_register(L : Plua_State; const libname : PChar; const lr : PluaL_Reg); cdecl; external LuaDLL; function luaL_getmetafield(L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; external LuaDLL; function luaL_callmeta(L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; external LuaDLL; function luaL_typerror(L : Plua_State; narg : Integer; const tname : PChar) : Integer; cdecl; external LuaDLL; function luaL_argerror(L : Plua_State; numarg : Integer; const extramsg : PChar) : Integer; cdecl; external LuaDLL; function luaL_checklstring(L : Plua_State; numArg : Integer; ls : Psize_t) : PChar; cdecl; external LuaDLL; function luaL_optlstring(L : Plua_State; numArg : Integer; const def: PChar; ls: Psize_t) : PChar; cdecl; external LuaDLL; function luaL_checknumber(L : Plua_State; numArg : Integer) : lua_Number; cdecl; external LuaDLL; function luaL_optnumber(L : Plua_State; nArg : Integer; def : lua_Number) : lua_Number; cdecl; external LuaDLL; function luaL_checkinteger(L : Plua_State; numArg : Integer) : lua_Integer; cdecl; external LuaDLL; function luaL_optinteger(L : Plua_State; nArg : Integer; def : lua_Integer) : lua_Integer; cdecl; external LuaDLL; procedure luaL_checkstack(L : Plua_State; sz : Integer; const msg : PChar); cdecl; external LuaDLL; procedure luaL_checktype(L : Plua_State; narg, t : Integer); cdecl; external LuaDLL; procedure luaL_checkany(L : Plua_State; narg : Integer); cdecl; external LuaDLL; function luaL_newmetatable(L : Plua_State; const tname : PChar) : Integer; cdecl; external LuaDLL; function luaL_checkudata(L : Plua_State; ud : Integer; const tname : PChar) : Pointer; cdecl; external LuaDLL; procedure luaL_where(L : Plua_State; lvl : Integer); cdecl; external LuaDLL; function luaL_error(L : Plua_State; const fmt : PChar) : Integer; varargs; cdecl; external LuaDLL; function luaL_checkoption(L : Plua_State; narg : Integer; const def : PChar; const lst : array of PChar) : Integer; cdecl; external LuaDLL; function luaL_ref(L : Plua_State; t : Integer) : Integer; cdecl; external LuaDLL; procedure luaL_unref(L : Plua_State; t, ref : Integer); cdecl; external LuaDLL; function luaL_loadfile(L : Plua_State; const filename : PChar) : Integer; cdecl; external LuaDLL; function luaL_loadbuffer(L : Plua_State; const buff : PChar; sz : size_t; const name: PChar) : Integer; cdecl; external LuaDLL; function luaL_loadstring(L : Plua_State; const s : Pchar) : Integer; cdecl; external LuaDLL; function luaL_newstate : Plua_State; cdecl; external LuaDLL; function luaL_gsub(L : Plua_State; const s, p, r : PChar) : PChar; cdecl; external LuaDLL; function luaL_findtable(L : Plua_State; idx : Integer; const fname : PChar; szhint : Integer) : PChar; cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type TluaL_openlib= procedure (L : Plua_State; const libname : PChar; const lr : PluaL_Reg; nup : Integer); cdecl; TluaL_register= procedure (L : Plua_State; const libname : PChar; const lr : PluaL_Reg); cdecl; TluaL_getmetafield= function (L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; TluaL_callmeta= function (L : Plua_State; obj : Integer; const e : PChar) : Integer; cdecl; TluaL_typerror= function (L : Plua_State; narg : Integer; const tname : PChar) : Integer; cdecl; TluaL_argerror= function (L : Plua_State; numarg : Integer; const extramsg : PChar) : Integer; cdecl; TluaL_checklstring= function (L : Plua_State; numArg : Integer; ls : Psize_t) : PChar; cdecl; TluaL_optlstring= function (L : Plua_State; numArg : Integer; const def: PChar; ls: Psize_t) : PChar; cdecl; TluaL_checknumber= function (L : Plua_State; numArg : Integer) : lua_Number; cdecl; TluaL_optnumber= function (L : Plua_State; nArg : Integer; def : lua_Number) : lua_Number; cdecl; TluaL_checkinteger= function (L : Plua_State; numArg : Integer) : lua_Integer; cdecl; TluaL_optinteger= function (L : Plua_State; nArg : Integer; def : lua_Integer) : lua_Integer; cdecl; TluaL_checkstack= procedure (L : Plua_State; sz : Integer; const msg : PChar); cdecl; TluaL_checktype= procedure (L : Plua_State; narg, t : Integer); cdecl; TluaL_checkany= procedure (L : Plua_State; narg : Integer); cdecl; TluaL_newmetatable= function (L : Plua_State; const tname : PChar) : Integer; cdecl; TluaL_checkudata= function (L : Plua_State; ud : Integer; const tname : PChar) : Pointer; cdecl; TluaL_where= procedure (L : Plua_State; lvl : Integer); cdecl; TluaL_error= function (L : Plua_State; const fmt : PChar) : Integer; varargs; cdecl; TluaL_checkoption= function (L : Plua_State; narg : Integer; const def : PChar; const lst : array of PChar) : Integer; cdecl; TluaL_ref= function (L : Plua_State; t : Integer) : Integer; cdecl; TluaL_unref= procedure (L : Plua_State; t, ref : Integer); cdecl; TluaL_loadfile= function (L : Plua_State; const filename : PChar) : Integer; cdecl; TluaL_loadbuffer= function (L : Plua_State; const buff : PChar; sz : size_t; const name: PChar) : Integer; cdecl; TluaL_loadstring= function (L : Plua_State; const s : Pchar) : Integer; cdecl; TluaL_newstate= function : Plua_State; cdecl; TluaL_gsub= function (L : Plua_State; const s, p, r : PChar) : PChar; cdecl; TluaL_findtable= function (L : Plua_State; idx : Integer; const fname : PChar; szhint : Integer) : PChar; cdecl; {$ENDIF} (* ** =============================================================== ** some useful macros ** =============================================================== *) function luaL_argcheck(L : Plua_State; cond : Boolean; numarg : Integer; extramsg : PChar): Integer; function luaL_checkstring(L : Plua_State; n : Integer) : PChar; function luaL_optstring(L : Plua_State; n : Integer; d : PChar) : PChar; function luaL_checkint(L : Plua_State; n : Integer) : Integer; function luaL_optint(L : Plua_State; n, d : Integer): Integer; function luaL_checklong(L : Plua_State; n : LongInt) : LongInt; function luaL_optlong(L : Plua_State; n : Integer; d : LongInt) : LongInt; function luaL_typename(L : Plua_State; idx : Integer) : PChar; function luaL_dofile(L : Plua_State; fn : PChar) : Integer; function luaL_dostring(L : Plua_State; s : PChar) : Integer; procedure luaL_getmetatable(L : Plua_State; n : PChar); (* not implemented yet #define luaL_opt(L,f,n,d) (lua_isnoneornil(L,(n)) ? (d) : f(L,(n))) *) (* ** {====================================================== ** Generic Buffer manipulation ** ======================================================= *) type luaL_Buffer = packed record p : PChar; (* current position in buffer *) lvl : Integer; (* number of strings in the stack (level) *) L : Plua_State; buffer : array [0..LUAL_BUFFERSIZE-1] of Char; end; PluaL_Buffer = ^luaL_Buffer; procedure luaL_addchar(B : PluaL_Buffer; c : Char); (* compatibility only *) procedure luaL_putchar(B : PluaL_Buffer; c : Char); procedure luaL_addsize(B : PluaL_Buffer; n : Integer); {$IFDEF STATIC} procedure luaL_buffinit(L : Plua_State; B : PluaL_Buffer); cdecl; external LuaDLL; function luaL_prepbuffer(B : PluaL_Buffer) : PChar; cdecl; external LuaDLL; procedure luaL_addlstring(B : PluaL_Buffer; const s : PChar; ls : size_t); cdecl; external LuaDLL; procedure luaL_addstring(B : PluaL_Buffer; const s : PChar); cdecl; external LuaDLL; procedure luaL_addvalue(B : PluaL_Buffer); cdecl; external LuaDLL; procedure luaL_pushresult(B : PluaL_Buffer); cdecl; external LuaDLL; {$ENDIF} {$IFDEF DINAMIC} type TluaL_buffinit= procedure (L : Plua_State; B : PluaL_Buffer); cdecl; TluaL_prepbuffer= function (B : PluaL_Buffer) : PChar; cdecl; TluaL_addlstring= procedure (B : PluaL_Buffer; const s : PChar; ls : size_t); cdecl; TluaL_addstring= procedure (B : PluaL_Buffer; const s : PChar); cdecl; TluaL_addvalue= procedure (B : PluaL_Buffer); cdecl; TluaL_pushresult= procedure (B : PluaL_Buffer); cdecl; {$ENDIF} (* ====================================================== *) (* compatibility with ref system *) (* pre-defined references *) const LUA_NOREF = -2; LUA_REFNIL = -1; function lua_ref(L : Plua_State; lock : Boolean) : Integer; procedure lua_unref(L : Plua_State; ref : Integer); procedure lua_getref(L : Plua_State; ref : Integer); (******************************************************************************) (******************************************************************************) (******************************************************************************) {$IFDEF DINAMIC} type TLibHandle = PtrInt; var lua_newstate:Tlua_newstate; lua_close:Tlua_close; lua_newthread:Tlua_newthread; lua_atpanic:Tlua_atpanic; luaL_buffinit:TluaL_buffinit; luaL_prepbuffer:TluaL_prepbuffer; luaL_addlstring:TluaL_addlstring; luaL_addstring:TluaL_addstring; luaL_addvalue:TluaL_addvalue; luaL_pushresult:TluaL_pushresult; luaL_openlib:TluaL_openlib; luaL_register:TluaL_register; luaL_getmetafield:TluaL_getmetafield; luaL_callmeta:TluaL_callmeta; luaL_typerror:TluaL_typerror; luaL_argerror:TluaL_argerror; luaL_checklstring:TluaL_checklstring; luaL_optlstring:TluaL_optlstring; luaL_checknumber:TluaL_checknumber; luaL_optnumber:TluaL_optnumber; luaL_checkinteger:TluaL_checkinteger; luaL_optinteger:TluaL_optinteger; luaL_checkstack:TluaL_checkstack; luaL_checktype:TluaL_checktype; luaL_checkany:TluaL_checkany; luaL_newmetatable:TluaL_newmetatable; luaL_checkudata:TluaL_checkudata; luaL_where:TluaL_where; luaL_error:TluaL_error; luaL_checkoption:TluaL_checkoption; luaL_ref:TluaL_ref; luaL_unref:TluaL_unref; luaL_loadfile:TluaL_loadfile; luaL_loadbuffer:TluaL_loadbuffer; luaL_loadstring:TluaL_loadstring; luaL_newstate:TluaL_newstate; luaL_gsub:TluaL_gsub; luaL_findtable:TluaL_findtable; luaopen_base:Tluaopen_base; luaopen_table:Tluaopen_table; luaopen_io:Tluaopen_io; luaopen_os:Tluaopen_os; luaopen_string:Tluaopen_string; luaopen_math:Tluaopen_math; luaopen_debug:Tluaopen_debug; luaopen_package:Tluaopen_package; luaL_openlibs:TluaL_openlibs; lua_getstack:Tlua_getstack; lua_getinfo:Tlua_getinfo; lua_getlocal:Tlua_getlocal; lua_setlocal:Tlua_setlocal; lua_getupvalue:Tlua_getupvalue; lua_setupvalue:Tlua_setupvalue; lua_sethook:Tlua_sethook; {function lua_gethook(L : Plua_State) : lua_Hook; cdecl;} lua_gethookmask:Tlua_gethookmask; lua_gethookcount:Tlua_gethookcount; lua_error:Tlua_error; lua_next:Tlua_next; lua_concat:Tlua_concat; lua_getallocf:Tlua_getallocf; lua_setallocf:Tlua_setallocf; lua_gc:Tlua_gc; lua_yield:Tlua_yield; lua_resume:Tlua_resume; lua_status:Tlua_status; lua_call:Tlua_call; lua_pcall:Tlua_pcall; lua_cpcall:Tlua_cpcall; lua_load:Tlua_load; lua_dump:Tlua_dump; lua_settable:Tlua_settable; lua_setfield:Tlua_setfield; lua_rawset:Tlua_rawset; lua_rawseti:Tlua_rawseti; lua_setmetatable:Tlua_setmetatable; lua_setfenv:Tlua_setfenv; lua_gettable:Tlua_gettable; lua_getfield:Tlua_getfield; lua_rawget:Tlua_rawget; lua_rawgeti:Tlua_rawgeti; lua_createtable:Tlua_createtable; lua_newuserdata:Tlua_newuserdata; lua_getmetatable:Tlua_getmetatable; lua_getfenv:Tlua_getfenv; lua_pushnil:Tlua_pushnil; lua_pushnumber:Tlua_pushnumber; lua_pushinteger:Tlua_pushinteger; lua_pushlstring:Tlua_pushlstring; lua_pushstring:Tlua_pushstring; lua_pushvfstring:Tlua_pushvfstring; lua_pushfstring:Tlua_pushfstring; lua_pushcclosure:Tlua_pushcclosure; lua_pushboolean:Tlua_pushboolean; lua_pushlightuserdata:Tlua_pushlightuserdata; lua_pushthread:Tlua_pushthread; lua_isnumber:Tlua_isnumber; lua_isstring:Tlua_isstring; lua_iscfunction:Tlua_iscfunction; lua_isuserdata:Tlua_isuserdata; lua_type:Tlua_type; lua_typename:Tlua_typename; lua_equal:Tlua_equal; lua_rawequal:Tlua_rawequal; lua_lessthan:Tlua_lessthan; lua_tonumber:Tlua_tonumber; lua_tointeger:Tlua_tointeger; lua_toboolean:Tlua_toboolean; lua_tolstring:Tlua_tolstring; lua_objlen:Tlua_objlen; lua_tocfunction:Tlua_tocfunction; lua_touserdata:Tlua_touserdata; lua_tothread:Tlua_tothread; lua_topointer:Tlua_topointer; lua_gettop:Tlua_gettop; lua_settop:Tlua_settop; lua_pushvalue:Tlua_pushvalue; lua_remove:Tlua_remove; lua_insert:Tlua_insert; lua_replace:Tlua_replace; lua_checkstack:Tlua_checkstack; lua_xmove:Tlua_xmove; LuaLibD:TLibHandle; {$ENDIF} implementation uses SysUtils {$IFDEF DINAMIC} ,dynlibs {$ENDIF} ; {$IFDEF DINAMIC} procedure UnloadLuaLib; begin if LuaLibD<>0 then FreeLibrary(LuaLibD); end; function IsLuaLibLoaded: boolean; begin result:= (LuaLibD<>0); end; function LoadLuaLib(filename:string):boolean; begin result:=false; LuaLibD:=LoadLibrary(FileName); result:= (LuaLibD<>0); if LuaLibD=0 then exit; lua_newstate:=Tlua_newstate(GetProcAddress(LuaLibD,'lua_newstate')); lua_close:=Tlua_close(GetProcAddress(LuaLibD,'lua_close')); lua_newthread:=Tlua_newthread(GetProcAddress(LuaLibD,'lua_newthread')); lua_atpanic:=Tlua_atpanic(GetProcAddress(LuaLibD,'lua_atpanic')); luaL_buffinit:=TluaL_buffinit(GetProcAddress(LuaLibD,'luaL_buffinit')); luaL_prepbuffer:=TluaL_prepbuffer(GetProcAddress(LuaLibD,'luaL_prepbuffer')); luaL_addlstring:=TluaL_addlstring(GetProcAddress(LuaLibD,'luaL_addlstring')); luaL_addstring:=TluaL_addstring(GetProcAddress(LuaLibD,'luaL_addstring')); luaL_addvalue:=TluaL_addvalue(GetProcAddress(LuaLibD,'luaL_addvalue')); luaL_pushresult:=TluaL_pushresult(GetProcAddress(LuaLibD,'luaL_pushresult')); luaL_openlib:=TluaL_openlib(GetProcAddress(LuaLibD,'luaL_openlib')); luaL_register:=TluaL_register(GetProcAddress(LuaLibD,'luaL_register')); luaL_getmetafield:=TluaL_getmetafield(GetProcAddress(LuaLibD,'luaL_getmetafield')); luaL_callmeta:=TluaL_callmeta(GetProcAddress(LuaLibD,'luaL_callmeta')); luaL_typerror:=TluaL_typerror(GetProcAddress(LuaLibD,'luaL_typerror')); luaL_argerror:=TluaL_argerror(GetProcAddress(LuaLibD,'luaL_argerror')); luaL_checklstring:=TluaL_checklstring(GetProcAddress(LuaLibD,'luaL_checklstring')); luaL_optlstring:=TluaL_optlstring(GetProcAddress(LuaLibD,'luaL_optlstring')); luaL_checknumber:=TluaL_checknumber(GetProcAddress(LuaLibD,'luaL_checknumber')); luaL_optnumber:=TluaL_optnumber(GetProcAddress(LuaLibD,'luaL_optnumber')); luaL_checkinteger:=TluaL_checkinteger(GetProcAddress(LuaLibD,'luaL_checkinteger')); luaL_optinteger:=TluaL_optinteger(GetProcAddress(LuaLibD,'luaL_optinteger')); luaL_checkstack:=TluaL_checkstack(GetProcAddress(LuaLibD,'luaL_checkstack')); luaL_checktype:=TluaL_checktype(GetProcAddress(LuaLibD,'luaL_checktype')); luaL_checkany:=TluaL_checkany(GetProcAddress(LuaLibD,'luaL_checkany')); luaL_newmetatable:=TluaL_newmetatable(GetProcAddress(LuaLibD,'luaL_newmetatable')); luaL_checkudata:=TluaL_checkudata(GetProcAddress(LuaLibD,'luaL_checkudata')); luaL_where:=TluaL_where(GetProcAddress(LuaLibD,'luaL_where')); luaL_error:=TluaL_error(GetProcAddress(LuaLibD,'luaL_error')); luaL_checkoption:=TluaL_checkoption(GetProcAddress(LuaLibD,'luaL_checkoption')); luaL_ref:=TluaL_ref(GetProcAddress(LuaLibD,'luaL_ref')); luaL_unref:=TluaL_unref(GetProcAddress(LuaLibD,'luaL_unref')); luaL_loadfile:=TluaL_loadfile(GetProcAddress(LuaLibD,'luaL_loadfile')); luaL_loadbuffer:=TluaL_loadbuffer(GetProcAddress(LuaLibD,'luaL_loadbuffer')); luaL_loadstring:=TluaL_loadstring(GetProcAddress(LuaLibD,'luaL_loadstring')); luaL_newstate:=TluaL_newstate(GetProcAddress(LuaLibD,'luaL_newstate')); luaL_gsub:=TluaL_gsub(GetProcAddress(LuaLibD,'luaL_gsub')); luaL_findtable:=TluaL_findtable(GetProcAddress(LuaLibD,'luaL_findtable')); luaopen_base:=Tluaopen_base(GetProcAddress(LuaLibD,'luaopen_base')); luaopen_table:=Tluaopen_table(GetProcAddress(LuaLibD,'luaopen_table')); luaopen_io:=Tluaopen_io(GetProcAddress(LuaLibD,'luaopen_io')); luaopen_os:=Tluaopen_os(GetProcAddress(LuaLibD,'luaopen_os')); luaopen_string:=Tluaopen_string(GetProcAddress(LuaLibD,'luaopen_string')); luaopen_math:=Tluaopen_math(GetProcAddress(LuaLibD,'luaopen_math')); luaopen_debug:=Tluaopen_debug(GetProcAddress(LuaLibD,'luaopen_debug')); luaopen_package:=Tluaopen_package(GetProcAddress(LuaLibD,'luaopen_package')); luaL_openlibs:=TluaL_openlibs(GetProcAddress(LuaLibD,'luaL_openlibs')); lua_getstack:=Tlua_getstack(GetProcAddress(LuaLibD,'lua_getstack')); lua_getinfo:=Tlua_getinfo(GetProcAddress(LuaLibD,'lua_getinfo')); lua_getlocal:=Tlua_getlocal(GetProcAddress(LuaLibD,'lua_getlocal')); lua_setlocal:=Tlua_setlocal(GetProcAddress(LuaLibD,'lua_setlocal')); lua_getupvalue:=Tlua_getupvalue(GetProcAddress(LuaLibD,'lua_getupvalue')); lua_setupvalue:=Tlua_setupvalue(GetProcAddress(LuaLibD,'lua_setupvalue')); lua_sethook:=Tlua_sethook(GetProcAddress(LuaLibD,'lua_sethook')); //function lua_gethook(L := Plua_State) := lua_Hook; cdecl;')); lua_gethookmask:=Tlua_gethookmask(GetProcAddress(LuaLibD,'lua_gethookmask')); lua_gethookcount:=Tlua_gethookcount(GetProcAddress(LuaLibD,'lua_gethookcount')); lua_error:=Tlua_error(GetProcAddress(LuaLibD,'lua_error')); lua_next:=Tlua_next(GetProcAddress(LuaLibD,'lua_next')); lua_concat:=Tlua_concat(GetProcAddress(LuaLibD,'lua_concat')); lua_getallocf:=Tlua_getallocf(GetProcAddress(LuaLibD,'lua_getallocf')); lua_setallocf:=Tlua_setallocf(GetProcAddress(LuaLibD,'lua_setallocf')); lua_gc:=Tlua_gc(GetProcAddress(LuaLibD,'lua_gc')); lua_yield:=Tlua_yield(GetProcAddress(LuaLibD,'lua_yield')); lua_resume:=Tlua_resume(GetProcAddress(LuaLibD,'lua_resume')); lua_status:=Tlua_status(GetProcAddress(LuaLibD,'lua_status')); lua_call:=Tlua_call(GetProcAddress(LuaLibD,'lua_call')); lua_pcall:=Tlua_pcall(GetProcAddress(LuaLibD,'lua_pcall')); lua_cpcall:=Tlua_cpcall(GetProcAddress(LuaLibD,'lua_cpcall')); lua_load:=Tlua_load(GetProcAddress(LuaLibD,'lua_load')); lua_dump:=Tlua_dump(GetProcAddress(LuaLibD,'lua_dump')); lua_settable:=Tlua_settable(GetProcAddress(LuaLibD,'lua_settable')); lua_setfield:=Tlua_setfield(GetProcAddress(LuaLibD,'lua_setfield')); lua_rawset:=Tlua_rawset(GetProcAddress(LuaLibD,'lua_rawset')); lua_rawseti:=Tlua_rawseti(GetProcAddress(LuaLibD,'lua_rawseti')); lua_setmetatable:=Tlua_setmetatable(GetProcAddress(LuaLibD,'lua_setmetatable')); lua_setfenv:=Tlua_setfenv(GetProcAddress(LuaLibD,'lua_setfenv')); lua_gettable:=Tlua_gettable(GetProcAddress(LuaLibD,'lua_gettable')); lua_getfield:=Tlua_getfield(GetProcAddress(LuaLibD,'lua_getfield')); lua_rawget:=Tlua_rawget(GetProcAddress(LuaLibD,'lua_rawget')); lua_rawgeti:=Tlua_rawgeti(GetProcAddress(LuaLibD,'lua_rawgeti')); lua_createtable:=Tlua_createtable(GetProcAddress(LuaLibD,'lua_createtable')); lua_newuserdata:=Tlua_newuserdata(GetProcAddress(LuaLibD,'lua_newuserdata')); lua_getmetatable:=Tlua_getmetatable(GetProcAddress(LuaLibD,'lua_getmetatable')); lua_getfenv:=Tlua_getfenv(GetProcAddress(LuaLibD,'lua_getfenv')); lua_pushnil:=Tlua_pushnil(GetProcAddress(LuaLibD,'lua_pushnil')); lua_pushnumber:=Tlua_pushnumber(GetProcAddress(LuaLibD,'lua_pushnumber')); lua_pushinteger:=Tlua_pushinteger(GetProcAddress(LuaLibD,'lua_pushinteger')); lua_pushlstring:=Tlua_pushlstring(GetProcAddress(LuaLibD,'lua_pushlstring')); lua_pushstring:=Tlua_pushstring(GetProcAddress(LuaLibD,'lua_pushstring')); lua_pushvfstring:=Tlua_pushvfstring(GetProcAddress(LuaLibD,'lua_pushvfstring')); lua_pushfstring:=Tlua_pushfstring(GetProcAddress(LuaLibD,'lua_pushfstring')); lua_pushcclosure:=Tlua_pushcclosure(GetProcAddress(LuaLibD,'lua_pushcclosure')); lua_pushboolean:=Tlua_pushboolean(GetProcAddress(LuaLibD,'lua_pushboolean')); lua_pushlightuserdata:=Tlua_pushlightuserdata(GetProcAddress(LuaLibD,'lua_pushlightuserdata')); lua_pushthread:=Tlua_pushthread(GetProcAddress(LuaLibD,'lua_pushthread')); lua_isnumber:=Tlua_isnumber(GetProcAddress(LuaLibD,'lua_isnumber')); lua_isstring:=Tlua_isstring(GetProcAddress(LuaLibD,'lua_isstring')); lua_iscfunction:=Tlua_iscfunction(GetProcAddress(LuaLibD,'lua_iscfunction')); lua_isuserdata:=Tlua_isuserdata(GetProcAddress(LuaLibD,'lua_isuserdata')); lua_type:=Tlua_type(GetProcAddress(LuaLibD,'lua_type')); lua_typename:=Tlua_typename(GetProcAddress(LuaLibD,'lua_typename')); lua_equal:=Tlua_equal(GetProcAddress(LuaLibD,'lua_equal')); lua_rawequal:=Tlua_rawequal(GetProcAddress(LuaLibD,'lua_rawequal')); lua_lessthan:=Tlua_lessthan(GetProcAddress(LuaLibD,'lua_lessthan')); lua_tonumber:=Tlua_tonumber(GetProcAddress(LuaLibD,'lua_tonumber')); lua_tointeger:=Tlua_tointeger(GetProcAddress(LuaLibD,'lua_tointeger')); lua_toboolean:=Tlua_toboolean(GetProcAddress(LuaLibD,'lua_toboolean')); lua_tolstring:=Tlua_tolstring(GetProcAddress(LuaLibD,'lua_tolstring')); lua_objlen:=Tlua_objlen(GetProcAddress(LuaLibD,'lua_objlen')); lua_tocfunction:=Tlua_tocfunction(GetProcAddress(LuaLibD,'lua_tocfunction')); lua_touserdata:=Tlua_touserdata(GetProcAddress(LuaLibD,'lua_touserdata')); lua_tothread:=Tlua_tothread(GetProcAddress(LuaLibD,'lua_tothread')); lua_topointer:=Tlua_topointer(GetProcAddress(LuaLibD,'lua_topointer')); lua_gettop:=Tlua_gettop(GetProcAddress(LuaLibD,'lua_gettop')); lua_settop:=Tlua_settop(GetProcAddress(LuaLibD,'lua_settop')); lua_pushvalue:=Tlua_pushvalue(GetProcAddress(LuaLibD,'lua_pushvalue')); lua_remove:=Tlua_remove(GetProcAddress(LuaLibD,'lua_remove')); lua_insert:=Tlua_insert(GetProcAddress(LuaLibD,'lua_insert')); lua_replace:=Tlua_replace(GetProcAddress(LuaLibD,'lua_replace')); lua_checkstack:=Tlua_checkstack(GetProcAddress(LuaLibD,'lua_checkstack')); lua_xmove:=Tlua_xmove(GetProcAddress(LuaLibD,'lua_xmove')); end; {$ENDIF} (*****************************************************************************) (* luaconfig.h *) (*****************************************************************************) function lua_readline(L : Plua_State; var b : PChar; p : PChar): Boolean; var s : AnsiString; begin Write(p); // show prompt ReadLn(s); // get line b := PChar(s); // and return it lua_readline := (b[0] <> #4); // test for ctrl-D end; procedure lua_saveline(L : Plua_State; idx : Integer); begin end; procedure lua_freeline(L : Plua_State; b : PChar); begin end; (*****************************************************************************) (* lua.h *) (*****************************************************************************) function lua_upvalueindex(idx : Integer) : Integer; begin lua_upvalueindex := LUA_GLOBALSINDEX - idx; end; procedure lua_pop(L : Plua_State; n : Integer); begin lua_settop(L, -n - 1); end; procedure lua_newtable(L : Plua_State); begin lua_createtable(L, 0, 0); end; procedure lua_register(L : Plua_State; n : PChar; f : lua_CFunction); begin lua_pushcfunction(L, f); lua_setglobal(L, n); end; procedure lua_pushcfunction(L : Plua_State; f : lua_CFunction); begin lua_pushcclosure(L, f, 0); end; function lua_strlen(L : Plua_State; idx : Integer) : Integer; begin lua_strlen := lua_objlen(L, idx); end; function lua_isfunction(L : Plua_State; n : Integer) : Boolean; begin lua_isfunction := lua_type(L, n) = LUA_TFUNCTION; end; function lua_istable(L : Plua_State; n : Integer) : Boolean; begin lua_istable := lua_type(L, n) = LUA_TTABLE; end; function lua_islightuserdata(L : Plua_State; n : Integer) : Boolean; begin lua_islightuserdata := lua_type(L, n) = LUA_TLIGHTUSERDATA; end; function lua_isnil(L : Plua_State; n : Integer) : Boolean; begin lua_isnil := lua_type(L, n) = LUA_TNIL; end; function lua_isboolean(L : Plua_State; n : Integer) : Boolean; begin lua_isboolean := lua_type(L, n) = LUA_TBOOLEAN; end; function lua_isthread(L : Plua_State; n : Integer) : Boolean; begin lua_isthread := lua_type(L, n) = LUA_TTHREAD; end; function lua_isnone(L : Plua_State; n : Integer) : Boolean; begin lua_isnone := lua_type(L, n) = LUA_TNONE; end; function lua_isnoneornil(L : Plua_State; n : Integer) : Boolean; begin lua_isnoneornil := lua_type(L, n) <= 0; end; procedure lua_pushliteral(L : Plua_State; s : PChar); begin lua_pushlstring(L, s, StrLen(s)); end; procedure lua_setglobal(L : Plua_State; s : PChar); begin lua_setfield(L, LUA_GLOBALSINDEX, s); end; procedure lua_getglobal(L: Plua_State; s: PChar); begin lua_getfield(L, LUA_GLOBALSINDEX, s); end; function lua_tostring(L : Plua_State; idx : Integer) : PChar; begin lua_tostring := lua_tolstring(L, idx, nil); end; function lua_open : Plua_State; begin lua_open := luaL_newstate(); end; procedure lua_getregistry(L : Plua_State); begin lua_pushvalue(L, LUA_REGISTRYINDEX); end; function lua_getgccount(L : Plua_State) : Integer; begin lua_getgccount := lua_gc(L, LUA_GCCOUNT, 0); end; (*****************************************************************************) (* lualib.h *) (*****************************************************************************) procedure lua_assert(x : Boolean); begin end; (*****************************************************************************) (* lauxlib.h n *) (*****************************************************************************) function luaL_getn(L : Plua_State; idx : Integer) : Integer; begin luaL_getn := lua_objlen(L, idx); end; procedure luaL_setn(L : plua_State; i, j : Integer); begin (* no op *) end; function luaL_argcheck(L : Plua_State; cond : Boolean; numarg : Integer; extramsg : PChar): Integer; begin if not cond then luaL_argcheck := luaL_argerror(L, numarg, extramsg) else luaL_argcheck := 0; end; function luaL_checkstring(L : Plua_State; n : Integer) : PChar; begin luaL_checkstring := luaL_checklstring(L, n, nil); end; function luaL_optstring(L : Plua_State; n : Integer; d : PChar) : PChar; begin luaL_optstring := luaL_optlstring(L, n, d, nil); end; function luaL_checkint(L : Plua_State; n : Integer) : Integer; begin luaL_checkint := luaL_checkinteger(L, n); end; function luaL_optint(L : Plua_State; n, d : Integer): Integer; begin luaL_optint := luaL_optinteger(L, n, d); end; function luaL_checklong(L : Plua_State; n : LongInt) : LongInt; begin luaL_checklong := luaL_checkinteger(L, n); end; function luaL_optlong(L : Plua_State; n : Integer; d : LongInt) : LongInt; begin luaL_optlong := luaL_optinteger(L, n, d); end; function luaL_typename(L : Plua_State; idx : Integer) : PChar; begin luaL_typename := lua_typename( L, lua_type(L, idx) ); end; function luaL_dofile(L : Plua_State; fn : PChar) : Integer; Var Res : Integer; begin // WC 2007\03\22 - Updated for Delphi Res := luaL_loadfile(L, fn); if Res = 0 then Res := lua_pcall(L, 0, 0, 0); Result := Res; end; function luaL_dostring(L : Plua_State; s : PChar) : Integer; Var Res : Integer; begin // WC 2007\03\22 - Updated for Delphi Res := luaL_loadstring(L, s); if Res = 0 then Res := lua_pcall(L, 0, 0, 0); Result := Res; end; procedure luaL_getmetatable(L : Plua_State; n : PChar); begin lua_getfield(L, LUA_REGISTRYINDEX, n); end; procedure luaL_addchar(B : PluaL_Buffer; c : Char); begin if not(B^.p < B^.buffer + LUAL_BUFFERSIZE) then luaL_prepbuffer(B); B^.p^ := c; Inc(B^.p); end; procedure luaL_putchar(B : PluaL_Buffer; c : Char); begin luaL_addchar(B, c); end; procedure luaL_addsize(B : PluaL_Buffer; n : Integer); begin Inc(B^.p, n); end; function lua_ref(L : Plua_State; lock : Boolean) : Integer; begin if lock then lua_ref := luaL_ref(L, LUA_REGISTRYINDEX) else begin lua_pushstring(L, 'unlocked references are obsolete'); lua_error(L); lua_ref := 0; end; end; procedure lua_unref(L : Plua_State; ref : Integer); begin luaL_unref(L, LUA_REGISTRYINDEX, ref); end; procedure lua_getref(L : Plua_State; ref : Integer); begin lua_rawgeti(L, LUA_REGISTRYINDEX, ref); end; (****************************************************************************** * Original copyright for the lua source and headers: * 1994-2004 Tecgraf, PUC-Rio. * www.lua.org. * * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ******************************************************************************) end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/udragdropgtk.pas�������������������������������������������������������0000644�0001750�0000144�00000036334�11740433676�020356� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Drag&Drop operations for GTK. } unit uDragDropGtk; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, uDragDropEx {$IF DEFINED(LCLGTK)} ,GLib, Gtk, Gdk {$ELSEIF DEFINED(LCLGTK2)} ,GLib2, Gtk2, Gdk2 {$ENDIF} ; type TDragDropSourceGTK = class(TDragDropSource) constructor Create(TargetControl: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; procedure UnregisterEvents; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; private procedure ConnectSignal(name: pgChar; func: Pointer); procedure DisconnectSignal(func: Pointer); end; TDragDropTargetGTK = class(TDragDropTarget) public constructor Create(TargetControl: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private procedure ConnectSignal(name: pgChar; func: Pointer); procedure DisconnectSignal(func: Pointer); end; { Source events } function OnDragBegin(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; function OnDragDataGet(widget: PGtkWidget; context: PGdkDragContext; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; function OnDragDataDelete(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; function OnDragEnd(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; { Target events } function OnDragMotion(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; function OnDrop(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; function OnDataReceived(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; function OnDragLeave(widget: PGtkWidget; context: PGdkDragContext; time: guint; param: gPointer): GBoolean; cdecl; function GtkActionToDropEffect(Action: TGdkDragAction):TDropEffect; function DropEffectToGtkAction(DropEffect: TDropEffect):TGdkDragAction; implementation uses uClipboard; // URI handling type // Order of these should be the same as in Targets array. TTargetId = (tidTextUriList, tidTextPlain); var Targets: array [0..1] of TGtkTargetEntry // 'info' field is a unique target id // Uri-list should be first so it can be catched before other targets, if available. = ((target: uriListMime ; flags: 0; info:LongWord(tidTextUriList)), (target: textPlainMime; flags: 0; info:LongWord(tidTextPlain))); // True, if the user is already dragging inside the target control. // Used to simulate drag-enter event in drag-motion handler. DragEntered: Boolean = False; { ---------- TDragDropSourceGTK ---------- } constructor TDragDropSourceGTK.Create(TargetControl: TWinControl); begin inherited Create(TargetControl); end; destructor TDragDropSourceGTK.Destroy; begin inherited; end; procedure TDragDropSourceGTK.ConnectSignal(name: pgChar; func: Pointer); begin gtk_signal_connect(PGtkObject(GetControl.Handle), name, TGtkSignalFunc(func), gPointer(Self)); // Pointer to class instance end; procedure TDragDropSourceGTK.DisconnectSignal(func: Pointer); begin gtk_signal_disconnect_by_func(PGtkObject(GetControl.Handle), TGtkSignalFunc(func), gPointer(Self)); end; function TDragDropSourceGTK.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; GetControl.HandleNeeded; if GetControl.HandleAllocated = True then begin // We don't set up as a drag source here, as we handle it manually. ConnectSignal('drag_begin', @OnDragBegin); ConnectSignal('drag_data_get', @OnDragDataGet); ConnectSignal('drag_data_delete', @OnDragDataDelete); ConnectSignal('drag_end', @OnDragEnd); //'drag-failed'(widget, context, result:guint); Result := True; end; end; procedure TDragDropSourceGTK.UnregisterEvents; begin DisconnectSignal(@OnDragBegin); DisconnectSignal(@OnDragDataGet); DisconnectSignal(@OnDragDataDelete); DisconnectSignal(@OnDragEnd); inherited; end; function TDragDropSourceGTK.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var PList: PGtkTargetList; context: PGdkDragContext; ButtonNr: Integer; begin Result := False; FFileNamesList.Assign(FileNamesList); case MouseButton of mbLeft : ButtonNr := 1; mbMiddle: ButtonNr := 2; mbRight : ButtonNr := 3; else Exit; end; PList := gtk_target_list_new(@Targets[0], Length(Targets)); // Will be freed by GTK if Assigned(PList) then begin context := gtk_drag_begin( PGtkWidget(GetControl.Handle), PList, // Allowed effects GDK_ACTION_COPY or GDK_ACTION_MOVE or GDK_ACTION_LINK or GDK_ACTION_ASK, ButtonNr, nil // no event - we're starting manually ); if Assigned(context) then Result:=True; end; end; { ---------- TDragDropTargetGTK ---------- } constructor TDragDropTargetGTK.Create(TargetControl: TWinControl); begin inherited Create(TargetControl); end; destructor TDragDropTargetGTK.Destroy; begin inherited; end; procedure TDragDropTargetGTK.ConnectSignal(name: pgChar; func: Pointer); begin gtk_signal_connect(PGtkObject(GetControl.Handle), name, TGtkSignalFunc(func), gPointer(Self)); // Pointer to class instance end; procedure TDragDropTargetGTK.DisconnectSignal(func: Pointer); begin gtk_signal_disconnect_by_func(PGtkObject(GetControl.Handle), TGtkSignalFunc(func), gPointer(Self)); end; function TDragDropTargetGTK.RegisterEvents( DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin inherited; GetControl.HandleNeeded; if GetControl.HandleAllocated = True then begin // Set up as drag target. gtk_drag_dest_set( PGtkWidget(GetControl.Handle), // default handling of some signals GTK_DEST_DEFAULT_ALL, // What targets the drag source promises to supply. @Targets[0], Length(Targets), // Effects that target supports GDK_ACTION_COPY or GDK_ACTION_MOVE or GDK_ACTION_LINK or GDK_ACTION_ASK ); ConnectSignal('drag_motion', @OnDragMotion); ConnectSignal('drag_drop', @OnDrop); ConnectSignal('drag_data_received', @OnDataReceived); ConnectSignal('drag_leave', @OnDragLeave); Result := True; end; end; procedure TDragDropTargetGTK.UnregisterEvents; begin DisconnectSignal(@OnDragMotion); DisconnectSignal(@OnDrop); DisconnectSignal(@OnDataReceived); DisconnectSignal(@OnDragLeave); if GetControl.HandleAllocated = True then gtk_drag_dest_unset(PGtkWidget(GetControl.Handle)); inherited; end; { ---------- Source events ---------- } function OnDragBegin(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); if Assigned(DragDropSource.GetDragBeginEvent) then Result := DragDropSource.GetDragBeginEvent()() else Result := True; end; function OnDragDataGet(widget: PGtkWidget; context: PGdkDragContext; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; dataString: string; begin DragDropSource := TDragDropSourceGTK(param); if (info < Low(Targets)) or (info > High(Targets)) then begin // Should not happen, as we didn't promise other targets in gtk_drag_begin. Result := False; Exit; end; if Assigned(DragDropSource.GetRequestDataEvent) then begin // Event has a handler assigned, so ask the control for data string. dataString := DragDropSource.GetRequestDataEvent()( DragDropSource.GetFileNamesList, Targets[info].target, // context^.action - the action chosen by the destination GtkActionToDropEffect(context^.action)); end else case TTargetId(info) of tidTextUriList: dataString := FormatUriList(DragDropSource.GetFileNamesList); tidTextPlain: dataString := FormatTextPlain(DragDropSource.GetFileNamesList); end; // gtk_selection_data_set makes a copy of passed data and zero-terminates it. gtk_selection_data_set(selection, gdk_atom_intern(Targets[info].target, gtk_true), Sizeof(dataString[1]) * 8, // nr of bits per unit (char) pguchar(@dataString[1]), Length(dataString)); Result := True; end; function OnDragDataDelete(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); Result := True; end; function OnDragEnd(widget: PGtkWidget; context: PGdkDragContext; param: gPointer): GBoolean; cdecl; var DragDropSource: TDragDropSourceGTK; begin DragDropSource := TDragDropSourceGTK(param); if Assigned(DragDropSource.GetDragEndEvent) then Result := DragDropSource.GetDragEndEvent()() else Result := True; end; { ---------- Target events ---------- } function OnDragMotion(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; var DropEffect: TDropEffect; Action: TGdkDragAction; CursorPosition: TPoint; DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); Result := True; // default to accepting drag movement // context^.suggested_action - the action suggested by the source // context^.actions - a bitmask of actions proposed by the source // when suggested_action is GDK_ACTION_ASK. DropEffect := GtkActionToDropEffect(context^.suggested_action); CursorPosition := DragDropTarget.GetControl.ClientToScreen(Point(X, Y)); if DragEntered = False then begin // This is the first time a cursor is moving inside the window // (possibly after a previous drag-leave event). DragEntered := True; if Assigned(DragDropTarget.GetDragEnterEvent) then Result := DragDropTarget.GetDragEnterEvent()(DropEffect, CursorPosition); end else begin if Assigned(DragDropTarget.GetDragOverEvent) then Result := DragDropTarget.GetDragOverEvent()(DropEffect, CursorPosition); end; if Result = True then Action := DropEffectToGtkAction(DropEffect) else Action := 0; // don't accept dragging // Reply with appropriate 'action'. gdk_drag_status(context, Action, time); end; function OnDataReceived(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; selection: PGtkSelectionData; info, time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; DropEffect: TDropEffect; FileNamesList: TStringList = nil; CursorPosition: TPoint; uriList: string; begin DragDropTarget := TDragDropTargetGTK(param); DropEffect := GtkActionToDropEffect(context^.suggested_action); CursorPosition := DragDropTarget.GetControl.ClientToScreen(Point(X, Y)); Result := False; if Assigned(DragDropTarget.GetDropEvent) and Assigned(selection) and Assigned(selection^.data) and (selection^.length > 0) // if selection length < 0 data is invalid then begin SetString(uriList, PChar(selection^.data), selection^.length); // 'info' denotes which target was matched by gtk_drag_get_data case TTargetId(info) of tidTextUriList: uriList := URIDecode(Trim(uriList)); tidTextPlain: // try decoding, as text/plain may also be percent-encoded uriList := URIDecode(Trim(uriList)); else Exit; // not what we hoped for end; try FileNamesList := ExtractFilenames(uriList); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then Result := DragDropTarget.GetDropEvent()(FileNamesList, DropEffect, CursorPosition); finally if Assigned(FileNamesList) then FreeAndNil(FileNamesList); end; end; // gtk_drag_finish is called automatically, because // GTK_DEST_DEFAULT_DROP flag was passed to gtk_drag_dest_set. end; function OnDrop(widget: PGtkWidget; context: PGdkDragContext; x, y: gint; time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); Result := True; end; function OnDragLeave(widget: PGtkWidget; context: PGdkDragContext; time: guint; param: gPointer): GBoolean; cdecl; var DragDropTarget: TDragDropTargetGTK; begin DragDropTarget := TDragDropTargetGTK(param); DragEntered := False; if Assigned(DragDropTarget.GetDragLeaveEvent) then Result := DragDropTarget.GetDragLeaveEvent()() else Result:= True; end; { ---------------------------------------------------------------------------- } function GtkActionToDropEffect(Action: TGdkDragAction):TDropEffect; begin case Action of GDK_ACTION_COPY: Result := DropCopyEffect; GDK_ACTION_MOVE: Result := DropMoveEffect; GDK_ACTION_LINK: Result := DropLinkEffect; GDK_ACTION_ASK : Result := DropAskEffect; else Result := DropNoEffect; end; end; function DropEffectToGtkAction(DropEffect: TDropEffect):TGdkDragAction; begin case DropEffect of DropCopyEffect: Result := GDK_ACTION_COPY; DropMoveEffect: Result := GDK_ACTION_MOVE; DropLinkEffect: Result := GDK_ACTION_LINK; DropAskEffect : Result := GDK_ACTION_ASK; else Result := 0; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uinfotooltip.pas�������������������������������������������������������0000644�0001750�0000144�00000013556�12612505011�020373� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uInfoToolTip; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, DCXmlConfig, uFile, uFileSource; type { THintItem } THintItem = class Name: String; Mask: String; Hint: String; function Clone: THintItem; end; { THintItemList } THintItemList = specialize TFPGObjectList<THintItem>; { TFileInfoToolTip } TFileInfoToolTip = class(TPersistent) protected FHintItemList: THintItemList; public constructor Create; destructor Destroy; override; procedure Assign(Source: TPersistent); override; procedure Clear; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); property HintItemList: THintItemList read FHintItemList; end; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; implementation uses LCLProc, StrUtils, uMasks, uDebug, uGlobs, uFileProperty, uFileFunctions, uSearchTemplate, uFileSourceProperty {$IF DEFINED(MSWINDOWS)} , uShlObjAdditional {$ENDIF} ; function GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; function GetDefaultToolTip(const Hint: String): String; begin Result:= Hint; if fpModificationTime in aFile.SupportedProperties then with (aFile.Properties[fpModificationTime] as TFileModificationDateTimeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if fpSize in aFile.SupportedProperties then with (aFile.Properties[fpSize] as TFileSizeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; if fpCompressedSize in aFile.SupportedProperties then with (aFile.Properties[fpCompressedSize] as TFileCompressedSizeProperty) do Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + GetDescription + #58#32 + AsString; end; begin Result:= EmptyStr; if fspDirectAccess in aFileSource.Properties then begin Result:= StringReplace(gFileInfoToolTip.GetFileInfoToolTip(aFileSource, aFile), '\n', LineEnding, [rfReplaceAll]); {$IF DEFINED(MSWINDOWS)} Result:= IfThen(Result = EmptyStr, EmptyStr, Result + LineEnding) + SHGetInfoTip(aFile.Path, aFile.Name) {$ELSE} Result:= GetDefaultToolTip(Result); {$ENDIF} end else begin Result:= GetDefaultToolTip(Result); end; end; { THintItem } function THintItem.Clone: THintItem; begin Result:= THintItem.Create; Result.Name:= Name; Result.Mask:= Mask; Result.Hint:= Hint; end; { TFileInfoToolTip } constructor TFileInfoToolTip.Create; begin FHintItemList:= THintItemList.Create(True); end; destructor TFileInfoToolTip.Destroy; begin FreeThenNil(FHintItemList); inherited Destroy; end; procedure TFileInfoToolTip.Clear; begin begin while FHintItemList.Count > 0 do begin //FHintItemList[0].Free; FHintItemList.Delete(0); end; end; end; procedure TFileInfoToolTip.Assign(Source: TPersistent); var I: LongInt; From: TFileInfoToolTip; begin Clear; From:= Source as TFileInfoToolTip; for I:= 0 to From.FHintItemList.Count - 1 do FHintItemList.Add(From.FHintItemList[I].Clone); end; function TFileInfoToolTip.GetFileInfoToolTip(aFileSource: IFileSource; const aFile: TFile): String; var I, J: Integer; HintItem: THintItem; begin Result:= EmptyStr; for I:= 0 to FHintItemList.Count - 1 do begin HintItem:= FHintItemList[I]; // Get hint by search template if IsMaskSearchTemplate(HintItem.Mask) then for J:= 0 to gSearchTemplateList.Count - 1 do with gSearchTemplateList do begin if (Templates[J].TemplateName = PChar(HintItem.Mask)+1) and Templates[J].CheckFile(AFile) then begin Result:= FormatFileFunctions(HintItem.Hint, aFile, aFileSource); Exit; end; end; // Get hint by file mask if MatchesMaskList(AFile.Name, HintItem.Mask) then begin Result:= FormatFileFunctions(HintItem.Hint, aFile, aFileSource); Exit; end; end; end; procedure TFileInfoToolTip.Load(AConfig: TXmlConfig; ANode: TXmlNode); var sMask, sName, sHint: String; MaskItem: THintItem; begin Clear; ANode := ANode.FindNode('CustomFields'); if Assigned(ANode) then begin ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('CustomField') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', sName) and AConfig.TryGetValue(ANode, 'Mask', sMask) and AConfig.TryGetValue(ANode, 'Hint', sHint) then begin MaskItem:= THintItem.Create; MaskItem.Name := sName; MaskItem.Mask := sMask; MaskItem.Hint := sHint; FHintItemList.Add(MaskItem); end else begin DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; end; ANode := ANode.NextSibling; end; end; end; procedure TFileInfoToolTip.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I : Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'CustomFields', True); AConfig.ClearNode(ANode); for I:=0 to FHintItemList.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'CustomField'); AConfig.AddValue(SubNode, 'Name', FHintItemList[I].Name); AConfig.AddValue(SubNode, 'Mask', FHintItemList[I].Mask); AConfig.AddValue(SubNode, 'Hint', FHintItemList[I].Hint); end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717740�015745� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/umywindows.pas�����������������������������������������������������0000644�0001750�0000144�00000055651�12620707232�020674� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains specific WINDOWS functions. Copyright (C) 2006-2013 Koblov Alexander (Alexx2000@mail.ru) 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 uMyWindows; {$mode objfpc}{$H+} interface uses Graphics, Classes, SysUtils, JwaWinBase, Windows; type tagMENUITEMINFOW = record cbSize: UINT; fMask: UINT; fType: UINT; // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0) fState: UINT; // used if MIIM_STATE wID: UINT; // used if MIIM_ID hSubMenu: HMENU; // used if MIIM_SUBMENU hbmpChecked: HBITMAP; // used if MIIM_CHECKMARKS hbmpUnchecked: HBITMAP; // used if MIIM_CHECKMARKS dwItemData: ULONG_PTR; // used if MIIM_DATA dwTypeData: LPWSTR; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) cch: UINT; // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) hbmpItem: HBITMAP; // used if MIIM_BITMAP end; MENUITEMINFOW = tagMENUITEMINFOW; LPMENUITEMINFOW = ^MENUITEMINFOW; LPCMENUITEMINFOW = ^MENUITEMINFOW; TMenuItemInfoW = MENUITEMINFOW; PMenuItemInfoW = LPMENUITEMINFOW; function InsertMenuItemW(hMenu: HMENU; uItem: UINT; fByPosition: BOOL; const lpmii: MENUITEMINFOW): BOOL; stdcall; external 'user32' name 'InsertMenuItemW'; function GetMenuItemText(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): WideString; function GetMenuItemType(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UINT; function InsertMenuItemEx(hMenu, SubMenu: HMENU; Caption: PWideChar; Position, ItemID, ItemType : UINT; Bitmap:Graphics.TBitmap = nil): boolean; {en Extracts volume GUID from a volume GUID path } function ExtractVolumeGUID(const VolumeName: WideString): WideString; {en Retrieves a volume GUID path for the volume that is associated with the specified volume mount point (drive letter, volume GUID path, or mounted folder) @param(Path The string that contains the path of a mounted folder or a drive letter) @returns(Volume GUID path) } function GetMountPointVolumeName(const Path: WideString): WideString; {en Checks readiness of a drive @param(sDrv String specifying the root directory of a file system volume) @returns(The function returns @true if drive is ready, @false otherwise) } function mbDriveReady(const sDrv: String): Boolean; {en Get the label of a file system volume @param(sDrv String specifying the root directory of a file system volume) @param(bVolReal @true if it a real file system volume) @returns(The function returns volume label) } function mbGetVolumeLabel(const sDrv: String; const bVolReal: Boolean): String; {en Set the label of a file system volume @param(sRootPathName String specifying the root directory of a file system volume) @param(sVolumeName String specifying a new name for the volume) @returns(The function returns @true if successful, @false otherwise) } function mbSetVolumeLabel(sRootPathName, sVolumeName: String): Boolean; {en Wait for change disk label @param(sDrv String specifying the root directory of a file system volume) @param(sCurLabel Current volume label) } procedure mbWaitLabelChange(const sDrv: String; const sCurLabel: String); {en Close CD/DVD drive @param(sDrv String specifying the root directory of a drive) } procedure mbCloseCD(const sDrv: String); {en Get remote file name by local file name @param(sLocalName String specifying the local file name) @returns(The function returns remote file name) } function mbGetRemoteFileName(const sLocalName: String): String; {en Retrieves the short path form of the specified path @param(sLongPath The path string) @param(sShortPath A string to receive the short form of the path that sLongPath specifies) @returns(The function returns @true if successful, @false otherwise) } function mbGetShortPathName(const sLongPath: String; out sShortPath: AnsiString): Boolean; {en Retrieves owner of the file (user and group). Both user and group contain computer name. @param(sPath Absolute path to the file. May be UNC path.) @param(sUser Returns user name of the file.) @param(sGroup Returns primary group of the file.) } function GetFileOwner(const sPath: String; out sUser, sGroup: String): Boolean; {en Retrieves a description of file's type. @param(sPath Absolute path to the file.) } function GetFileDescription(const sPath: String): String; {en Retrieves file system name of the volume that sRootPath points to. @param(sRootPath Root directory of the volume, for example C:\) } function mbGetFileSystem(const sRootPath: String): String; {en Retrieves the actual number of bytes of disk storage used to store a specified file. @param(FileName The name of the file.) } function mbGetCompressedFileSize(const FileName: String): Int64; {en This routine returns @true if the caller's process is a member of the Administrators local group. @returns(The function returns @true if caller has Administrators local group, @false otherwise) } function IsUserAdmin: LongBool; {en Extract file attributes from find data record. Removes reparse point attribute if a reparse point tag is not a name surrogate. @param(FindData Find data record from FindFirstFile/FindNextFile function.) } function ExtractFileAttributes(const FindData: TWin32FindDataW): DWORD; procedure InitErrorMode; procedure FixCommandLineToUTF8; implementation uses ShellAPI, MMSystem, JwaWinNetWk, LazUTF8, uShlObjAdditional; function GetMenuItemText(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): WideString; var miiw: TMenuItemInfoW; wca: array[0..Pred(MAX_PATH)] of WideChar; begin Result:= EmptyWideStr; FillChar(miiw, SizeOf(TMenuItemInfoW), 0); with miiw do begin cbSize:= SizeOf(TMenuItemInfoW); fMask:= MIIM_FTYPE or MIIM_STRING; dwTypeData:= @wca[0]; cch:= MAX_PATH; end; if GetMenuItemInfoW(hMenu, uItem, fByPosition, @miiw) then begin Result:= miiw.dwTypeData; end; end; function GetMenuItemType(hMenu: HMENU; uItem: UINT; fByPosition: LongBool): UINT; var miiw: TMenuItemInfoW; begin Result:= 0; FillChar(miiw, SizeOf(TMenuItemInfoW), 0); with miiw do begin cbSize:= SizeOf(TMenuItemInfoW); fMask:= MIIM_FTYPE; end; if GetMenuItemInfoW(hMenu, uItem, fByPosition, @miiw) then begin Result:= miiw.fType; end; end; function InsertMenuItemEx(hMenu, SubMenu: HMENU; Caption: PWideChar; Position, ItemID, ItemType : UINT; Bitmap:Graphics.TBitmap): boolean; var mi: TMenuItemInfoW; begin FillChar(mi, SizeOf(mi), 0); with mi do begin cbSize := SizeOf(mi); case ItemType of MFT_SEPARATOR: begin fMask := MIIM_STATE or MIIM_TYPE or MIIM_ID; end; MFT_STRING: begin fMask := MIIM_BITMAP or MIIM_STRING or MIIM_SUBMENU or MIIM_ID; if BitMap<>nil then hbmpItem:=Bitmap.Handle; end; end; fType := ItemType; fState := MFS_ENABLED; wID := ItemID; hSubMenu := SubMenu; dwItemData := 0; dwTypeData := Caption; cch := SizeOf(Caption); end; Result := InsertMenuItemW(hMenu, Position, True, mi); end; function DisplayName(const wsDrv: WideString): WideString; var SFI: TSHFileInfoW; begin FillChar(SFI, SizeOf(SFI), 0); SHGetFileInfoW(PWChar(wsDrv), 0, SFI, SizeOf(SFI), SHGFI_DISPLAYNAME); Result:= SFI.szDisplayName; if Pos('(', Result) <> 0 then SetLength(Result, Pos('(', Result) - 2); end; function ExtractVolumeGUID(const VolumeName: WideString): WideString; var I, J: LongInt; begin I:= Pos('{', VolumeName); J:= Pos('}', VolumeName); if (I = 0) or (J = 0) then Exit(EmptyWideStr); Result:= Copy(VolumeName, I, J - I + 1); end; function GetMountPointVolumeName(const Path: WideString): WideString; const MAX_VOLUME_NAME = 50; var wsPath: WideString; wsVolumeName: array[0..Pred(MAX_VOLUME_NAME)] of WideChar; begin FillByte(wsVolumeName, MAX_VOLUME_NAME, 0); wsPath:= IncludeTrailingPathDelimiter(Path); if not GetVolumeNameForVolumeMountPointW(PWideChar(wsPath), wsVolumeName, MAX_VOLUME_NAME) then Result:= EmptyWideStr else Result:= WideString(wsVolumeName); end; (* Drive ready *) function mbDriveReady(const sDrv: String): Boolean; var NotUsed: DWORD; wsDrv: WideString; begin wsDrv:= UTF8Decode(sDrv); Result:= GetVolumeInformationW(PWChar(wsDrv), nil, 0, nil, NotUsed, NotUsed, nil, 0); end; (* Disk label *) function mbGetVolumeLabel(const sDrv: String; const bVolReal: Boolean): String; var WinVer: Byte; DriveType, NotUsed: DWORD; Buf: array [0..MAX_PATH - 1] of WideChar; wsDrv, wsResult: UnicodeString; begin Result:= ''; wsDrv:= UTF8Decode(sDrv); WinVer:= LOBYTE(LOWORD(GetVersion)); DriveType:= GetDriveTypeW(PWChar(wsDrv)); if (WinVer <= 4) and (DriveType <> DRIVE_REMOVABLE) or bVolReal then begin // Win9x, Me, NT <= 4.0 Buf[0]:= #0; GetVolumeInformationW(PWChar(wsDrv), Buf, DWORD(SizeOf(Buf)), nil, NotUsed, NotUsed, nil, 0); wsResult:= Buf; if bVolReal and (WinVer >= 5) and (Result <> '') and (DriveType <> DRIVE_REMOVABLE) then // Win2k, XP and higher wsResult:= DisplayName(wsDrv) else if (Result = '') and (not bVolReal) then wsResult:= '<none>'; end else wsResult:= DisplayName(wsDrv); Result:= UTF16ToUTF8(wsResult); end; (* Wait for change disk label *) function mbSetVolumeLabel(sRootPathName, sVolumeName: String): Boolean; var wsRootPathName, wsVolumeName: WideString; begin wsRootPathName:= UTF8Decode(sRootPathName); wsVolumeName:= UTF8Decode(sVolumeName); Result:= SetVolumeLabelW(PWChar(wsRootPathName), PWChar(wsVolumeName)); end; procedure mbWaitLabelChange(const sDrv: String; const sCurLabel: String); var st1, st2: String; begin if mbGetVolumeLabel(sDrv, True) = '' then Exit; st1:= TrimLeft(sCurLabel); st2:= st1; while st1 = st2 do st2:= mbGetVolumeLabel(sDrv, FALSE); end; {$IF FPC_FULLVERSION < 020600} type // mmsystem unit has incorrect definition MCI_OPEN_PARMS = packed record dwCallback: DWORD_PTR; wDeviceID: MCIDEVICEID; lpstrDeviceType: LPCTSTR; lpstrElementName: LPCTSTR; lpstrAlias: LPCTSTR; end; {$ENDIF} function mciSendCommand(IDDevice: MCIDEVICEID; uMsg: UINT; fdwCommand: DWORD; dwParam: DWORD_PTR): MCIERROR; stdcall; external 'winmm.dll' name 'mciSendCommandA'; (* Close CD/DVD *) procedure mbCloseCD(const sDrv: String); var OpenParms: MCI_OPEN_PARMS; begin FillChar(OpenParms, SizeOf(OpenParms), 0); OpenParms.lpstrDeviceType:= 'CDAudio'; OpenParms.lpstrElementName:= PAnsiChar(ExtractFileDrive(sDrv)); mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD_PTR(@OpenParms)); mciSendCommand(OpenParms.wDeviceID, MCI_SET, MCI_SET_DOOR_CLOSED, 0); mciSendCommand(OpenParms.wDeviceID, MCI_CLOSE, MCI_OPEN_TYPE or MCI_OPEN_ELEMENT, DWORD_PTR(@OpenParms)); end; function mbGetRemoteFileName(const sLocalName: String): String; var wsLocalName: WideString; dwResult, lpBufferSize: DWORD; lpBuffer: PUniversalNameInfoW; begin Result:= sLocalName; wsLocalName:= UTF8Decode(sLocalName); lpBufferSize:= SizeOf(TUniversalNameInfoW); GetMem(lpBuffer, lpBufferSize); try dwResult:= WNetGetUniversalNameW(PWideChar(wsLocalName), UNIVERSAL_NAME_INFO_LEVEL, lpBuffer, lpBufferSize); if dwResult = ERROR_MORE_DATA then begin lpBuffer:= ReallocMem(lpBuffer, lpBufferSize); dwResult:= WNetGetUniversalNameW(PWideChar(wsLocalName), UNIVERSAL_NAME_INFO_LEVEL, lpBuffer, lpBufferSize); end; if dwResult = NO_ERROR then Result:= UTF16ToUTF8(WideString(lpBuffer^.lpUniversalName)); finally FreeMem(lpBuffer); end; end; function mbGetShortPathName(const sLongPath: String; out sShortPath: AnsiString): Boolean; var wsLongPath, wsShortPath: UnicodeString; cchBuffer: DWORD; begin Result:= False; wsLongPath:= UTF8Decode(sLongPath); cchBuffer:= GetShortPathNameW(PWideChar(wsLongPath), nil, 0); if cchBuffer = 0 then Exit; SetLength(wsShortPath, cchBuffer); cchBuffer:= GetShortPathNameW(PWideChar(wsLongPath), PWideChar(wsShortPath), cchBuffer); if cchBuffer <> 0 then begin sShortPath:= AnsiString(wsShortPath); Result:= True; end; end; function GetFileOwner(const sPath: String; out sUser, sGroup: String): Boolean; var wsMachineName: UnicodeString; function SidToDisplayString(sid: PSID; sidType: SID_NAME_USE): String; var pName: PWideChar = nil; pDomain: PWideChar = nil; NameLen: DWORD = 0; DomainLen: DWORD = 0; begin // We're expecting insufficient buffer error here. if (LookupAccountSidW(PWideChar(wsMachineName), sid, nil, @NameLen, nil, @DomainLen, @SidType) = False) and (GetLastError = ERROR_INSUFFICIENT_BUFFER) then begin pName := Getmem(NameLen * SizeOf(WideChar)); pDomain := Getmem(DomainLen * SizeOf(WideChar)); if Assigned(pName) and Assigned(pDomain) and LookupAccountSidW(PWideChar(wsMachineName), sid, pName, @NameLen, pDomain, @DomainLen, @SidType) then begin if pDomain[0] <> #0 then Result := UTF16ToUTF8(UnicodeString(pDomain) + PathDelim + UnicodeString(pName)) else Result := UTF16ToUTF8(UnicodeString(pName)); end else Result := EmptyStr; Freemem(pName); Freemem(pDomain); end else Result := EmptyStr; end; // From UNC name extracts computer name. function GetMachineName(wPathName: LPCWSTR): WideString; var lpMachineName, lpMachineNameNext: PWideChar; begin lpMachineName := PathFindNextComponentW(wPathName); if Assigned(lpMachineName) then begin lpMachineNameNext := PathFindNextComponentW(lpMachineName); if Assigned(lpMachineNameNext) then SetString(Result, lpMachineName, lpMachineNameNext - lpMachineName - 1) else Result := lpMachineName; end else Result := EmptyWideStr; end; var wszUNCPathName: array[0..32767] of WideChar; wsPathName: WideString; pSecurityDescriptor: PSECURITY_DESCRIPTOR = nil; pOwnerSid: PSID = nil; pUNI: PUniversalNameInfoW; bDefault: Boolean; dwBufferSize: DWORD = 0; dwSizeNeeded: DWORD = 0; begin Result := False; if Length(sPath) = 0 then Exit; try wsPathName := UTF8Decode(sPath); // Check if the path is to remote share and get remote machine name. if PathIsUNCW(PWideChar(wsPathName)) then begin // Path is in full UNC format. wsMachineName := GetMachineName(PWideChar(wsPathName)); end else begin // Check if local path is mapped to network share. dwBufferSize := SizeOf(wszUNCPathName); pUNI := PUniversalNameInfoW(@wszUNCPathName[0]); if WNetGetUniversalNameW(PWideChar(wsPathName), UNIVERSAL_NAME_INFO_LEVEL, pUNI, dwBufferSize) = NO_ERROR then begin wsMachineName := GetMachineName(pUNI^.lpUniversalName); end; // else not a network share, no network connection, etc. end; { Get security descriptor. } // We're expecting insufficient buffer error here. if (GetFileSecurityW(PWideChar(wsPathName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION, nil, 0, @dwSizeNeeded) <> False) or (GetLastError <> ERROR_INSUFFICIENT_BUFFER) or (dwSizeNeeded = 0) then begin Exit; end; pSecurityDescriptor := GetMem(dwSizeNeeded); if not Assigned(pSecurityDescriptor) then Exit; if not GetFileSecurityW(PWideChar(wsPathName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION, pSecurityDescriptor, dwSizeNeeded, @dwSizeNeeded) then begin Exit; end; { Get Owner and Group. } if GetSecurityDescriptorOwner(pSecurityDescriptor, pOwnerSid, @bDefault) then sUser := SidToDisplayString(pOwnerSid, SidTypeUser) else sUser := EmptyStr; if GetSecurityDescriptorGroup(pSecurityDescriptor, pOwnerSid, @bDefault) then sGroup := SidToDisplayString(pOwnerSid, SidTypeGroup) else sGroup := EmptyStr; Result := True; finally if Assigned(pSecurityDescriptor) then Freemem(pSecurityDescriptor); end; end; function GetFileDescription(const sPath: String): String; var SFI: TSHFileInfoW; begin FillChar(SFI, SizeOf(SFI), 0); if SHGetFileInfoW(PWideChar(UTF8Decode(sPath)), 0, SFI, SizeOf(SFI), SHGFI_TYPENAME) <> 0 then Result := UTF16ToUTF8(UnicodeString(SFI.szTypeName)) else Result := EmptyStr; end; function mbGetFileSystem(const sRootPath: String): String; var Buf: array [0..MAX_PATH] of WideChar; NotUsed: DWORD; begin // Available since Windows XP. if ((Win32MajorVersion > 5) or ((Win32MajorVersion = 5) and (Win32MinorVersion >= 1))) and GetVolumeInformationW(PWideChar(UTF8Decode(sRootPath)), nil, 0, nil, NotUsed, NotUsed, Buf, SizeOf(Buf)) then begin Result:= UTF16ToUTF8(UnicodeString(Buf)); end else Result := EmptyStr; end; function mbGetCompressedFileSize(const FileName: String): Int64; begin Int64Rec(Result).Lo:= GetCompressedFileSizeW(PWideChar(UTF8Decode(FileName)), @Int64Rec(Result).Hi); end; type TOKEN_ELEVATION_TYPE = ( TokenElevationTypeDefault:= 1, TokenElevationTypeFull, TokenElevationTypeLimited ); TOKEN_INFORMATION_CLASS = ( TokenUser:= 1, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics, TokenRestrictedSids, TokenSessionId, TokenGroupsAndPrivileges, TokenSessionReference, TokenSandBoxInert, TokenAuditPolicy, TokenOrigin, TokenElevationType, TokenLinkedToken, TokenElevation, TokenHasRestrictions, TokenAccessInformation, TokenVirtualizationAllowed, TokenVirtualizationEnabled, TokenIntegrityLevel, TokenUIAccess, TokenMandatoryPolicy, TokenLogonSid, TokenIsAppContainer, TokenCapabilities, TokenAppContainerSid, TokenAppContainerNumber, TokenUserClaimAttributes, TokenDeviceClaimAttributes, TokenRestrictedUserClaimAttributes, TokenRestrictedDeviceClaimAttributes, TokenDeviceGroups, TokenRestrictedDeviceGroups, TokenSecurityAttributes, TokenIsRestricted, MaxTokenInfoClass ); function GetTokenInformation(TokenHandle: HANDLE; TokenInformationClass: TOKEN_INFORMATION_CLASS; TokenInformation: Pointer; TokenInformationLength: DWORD; out ReturnLength: DWORD): BOOL; stdcall; external 'advapi32' name 'GetTokenInformation'; function IsUserAdmin: LongBool; var ReturnLength: DWORD; TokenHandle: HANDLE = INVALID_HANDLE_VALUE; TokenInformation: array [0..1023] of Byte; ElevationType: TOKEN_ELEVATION_TYPE absolute TokenInformation; begin Result:= OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, TokenHandle); if not Result then begin if GetLastError = ERROR_NO_TOKEN then Result:= OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle); end; if Result then begin Result:= GetTokenInformation( TokenHandle, TokenElevationType, @TokenInformation, SizeOf(TokenInformation), ReturnLength ); CloseHandle(TokenHandle); if Result then begin case ElevationType of TokenElevationTypeDefault: Result:= False; // The token does not have a linked token. (UAC disabled) TokenElevationTypeFull: Result:= True; // The token is an elevated token. (Administrator) TokenElevationTypeLimited: Result:= False; // The token is a limited token. (User) end; end; end; end; function ExtractFileAttributes(const FindData: TWin32FindDataW): DWORD; inline; begin // If a reparse point tag is not a name surrogate then remove reparse point attribute // Fixes bug: http://doublecmd.sourceforge.net/mantisbt/view.php?id=531 if (FindData.dwFileAttributes and FILE_ATTRIBUTE_REPARSE_POINT <> 0) and (FindData.dwReserved0 and $20000000 = 0) then Result:= FindData.dwFileAttributes - FILE_ATTRIBUTE_REPARSE_POINT else Result:= FindData.dwFileAttributes; end; procedure InitErrorMode; begin SetErrorMode(SEM_FAILCRITICALERRORS or SEM_NOOPENFILEERRORBOX); end; procedure FixCommandLineToUTF8; var I, nArgs: Integer; sTemp: String; szArgList: PPWideChar; pwcCommandLine: PWideChar; lpFileName: array[0..Pred(MaxSmallInt)] of WideChar; begin {$IF DEFINED(FPC_HAS_CPSTRING)} if DefaultSystemCodePage = CP_UTF8 then Exit; {$ENDIF} pwcCommandLine:= GetCommandLineW(); for I:= 0 to lstrlenW(pwcCommandLine) - 1 do begin if (pwcCommandLine[I] = PathDelim) and (pwcCommandLine[I + 1] = '"') then begin pwcCommandLine[I]:= '"'; pwcCommandLine[I + 1]:= #32; end; end; szArgList:= CommandLineToArgvW(pwcCommandLine, @nArgs); if Assigned(szArgList) then begin if (nArgs > argc) then begin SysReAllocMem(argv, nArgs * SizeOf(Pointer)); FillChar(argv[argc], (nArgs - argc) * Sizeof(Pointer), #0); argc:= nArgs; end; // Special case for ParamStr(0) I:= GetModuleFileNameW(0, lpFileName, MaxSmallInt); lpFileName[I]:= #0; // to be safe sTemp:= UTF16ToUTF8(UnicodeString(lpFileName)); SysReAllocMem(argv[0], Length(sTemp) + 1); StrPCopy(argv[0], sTemp); // Process all other parameters for I:= 1 to nArgs - 1 do begin sTemp:= UTF16ToUTF8(UnicodeString(szArgList[I])); SysReAllocMem(argv[I], Length(sTemp) + 1); StrPCopy(argv[I], sTemp); end; LocalFree(HLOCAL(szArgList)); end; end; end. ���������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/uTotalCommander.pas������������������������������������������������0000644�0001750�0000144�00000222663�12653160466�021554� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Creates Total Commander fake window (some plugins don't work without it) Copyright (C) 2009-2016 Alexander Koblov (alexx2000@mail.ru) 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 } { Equivalence of some abreviation here: TC = Total Commander DC = Double Commander } unit uTotalCommander; {$MODE DELPHI} {.$DEFINE DEBUG} interface uses //Lazarus, Free-Pascal, etc. Windows, Classes, //DC uFile, uFileView, uFormCommands, KASToolItems, KASToolBar; const TCCONFIG_MAINBAR_NOTPRESENT = ':-<#/?*+*?\#>-:'; TCCONFIG_BUTTONBAR_SECTION = 'Buttonbar'; TCCONFIG_BUTTONBAR_COUNT = 'Buttoncount'; TCCONFIG_BUTTONHEIGHT = 'Buttonheight'; TCCONFIG_BUTTON_PREFIX = 'button'; TCCONFIG_ICONIC_PREFIX = 'iconic'; TCCONFIG_CMD_PREFIX = 'cmd'; TCCONFIG_STARTINGPATH_PREFIX = 'path'; TCCONFIG_HINT_PREFIX = 'menu'; TCCONFIG_PARAM_PREFIX = 'param'; var sTotalCommanderMainbarFilename: string = TCCONFIG_MAINBAR_NOTPRESENT; procedure CreateTotalCommanderWindow(hWindow: HWND); function ConvertTCStringToString(TCString: ansistring): string; function ConvertStringToTCString(sString: string): ansistring; function ReplaceDCEnvVars(const sText: string): string; function ReplaceTCEnvVars(const sText: string): string; function areWeInSituationToPlayWithTCFiles: boolean; function GetTCEquivalentCommandToDCCommand(DCCommand: string; var TCIndexOfCommand: integer): string; function GetTCIconFromDCIconAndCreateIfNecessary(const DCIcon: string): string; function GetTCEquivalentCommandIconToDCCommandIcon(DCIcon: string; TCIndexOfCommand: integer): string; procedure ExportDCToolbarsToTC(Toolbar: TKASToolbar; Barfilename: string; FlushExistingContent, FlagNeedToUpdateConfigIni: boolean); procedure ImportTCToolbarsToDC(Barfilename: string; UpperToolItem: TKASToolItem; Toolbar: TKASToolbar; WhereToImport: integer; FCurrentButton: TKASToolButton; FFormCommands: IFormCommands); implementation uses //Lazarus, Free-Pascal, etc. Graphics, LCLVersion, Forms, JwaDbt, SysUtils, LCLProc, //DC uFileProcs, uOSUtils, fOptionsMisc, uKASToolItemsExtended, DCClassesUtf8, DCOSUtils, uDebug, DCStrUtils, uPixMapManager, uShowMsg, uDCUtils, uLng, uGlobs, uGlobsPaths, DCConvertEncoding; type { TTCommandEquivalence } TTCommandEquivalence = record TCCommand: string; TCIcon: longint; DCCommand: string; end; const NUMBEROFCOMMANDS = 458; COMMANDS_LIST_TC: array[1..NUMBEROFCOMMANDS] of TTCommandEquivalence = ( (TCCommand: 'cm_SrcComments'; TCIcon: 21; DCCommand: ''), //Source: Show comments (TCCommand: 'cm_SrcShort'; TCIcon: 3; DCCommand: 'cm_BriefView'), //Source: Only file names (TCCommand: 'cm_SrcLong'; TCIcon: 4; DCCommand: 'cm_ColumnsView'), //Source: All file details (TCCommand: 'cm_SrcTree'; TCIcon: 2; DCCommand: ''), //Source: Directory tree (TCCommand: 'cm_SrcQuickview'; TCIcon: 22; DCCommand: 'cm_QuickView'), //Source: Quick view panel (TCCommand: 'cm_VerticalPanels'; TCIcon: 23; DCCommand: 'cm_HorizontalFilePanels'), //File windows above each other (TCCommand: 'cm_SrcQuickInternalOnly'; TCIcon: 22; DCCommand: ''), //Source: Quick view, no plugins (TCCommand: 'cm_SrcHideQuickview'; TCIcon: 22; DCCommand: ''), //Source: Quick view panel off (TCCommand: 'cm_SrcExecs'; TCIcon: 12; DCCommand: ''), //Source: Only programs (TCCommand: 'cm_SrcAllFiles'; TCIcon: 13; DCCommand: ''), //Source: All files (TCCommand: 'cm_SrcUserSpec'; TCIcon: 24; DCCommand: ''), //Source: Last selected (TCCommand: 'cm_SrcUserDef'; TCIcon: 25; DCCommand: ''), //Source: Select user type (TCCommand: 'cm_SrcByName'; TCIcon: 5; DCCommand: 'cm_SortByName'), //Source: Sort by name (TCCommand: 'cm_SrcByExt'; TCIcon: 6; DCCommand: 'cm_SortByExt'), //Source: Sort by extension (TCCommand: 'cm_SrcBySize'; TCIcon: 8; DCCommand: 'cm_SortBySize'), //Source: Sort by size (TCCommand: 'cm_SrcByDateTime'; TCIcon: 7; DCCommand: 'cm_SortByDate'), //Source: Sort by date (TCCommand: 'cm_SrcUnsorted'; TCIcon: 9; DCCommand: ''), //Source: Unsorted (TCCommand: 'cm_SrcNegOrder'; TCIcon: 10; DCCommand: 'cm_ReverseOrder'), //Source: Reversed order (TCCommand: 'cm_SrcOpenDrives'; TCIcon: -1; DCCommand: 'cm_SrcOpenDrives'), //Source: Open drive list (TCCommand: 'cm_SrcThumbs'; TCIcon: 26; DCCommand: 'cm_ThumbnailsView'), //Source: Thumbnail view (TCCommand: 'cm_SrcCustomViewMenu'; TCIcon: 52; DCCommand: ''), //Source: Custom view menu (TCCommand: 'cm_SrcPathFocus'; TCIcon: -1; DCCommand: ''), //Source: Put focus on path (TCCommand: 'cm_LeftComments'; TCIcon: 21; DCCommand: ''), //Left: Show comments (TCCommand: 'cm_LeftShort'; TCIcon: 3; DCCommand: 'cm_LeftBriefView'), //Left: Only file names (TCCommand: 'cm_LeftLong'; TCIcon: 4; DCCommand: 'cm_LeftColumnsView'), //Left: All file details (TCCommand: 'cm_LeftTree'; TCIcon: 2; DCCommand: ''), //Left: Directory tree (TCCommand: 'cm_LeftQuickview'; TCIcon: 22; DCCommand: ''), //Left: Quick view panel (TCCommand: 'cm_LeftQuickInternalOnly'; TCIcon: 22; DCCommand: ''), //Left: Quick view, no plugins (TCCommand: 'cm_LeftHideQuickview'; TCIcon: 22; DCCommand: ''), //Left: Quick view panel off (TCCommand: 'cm_LeftExecs'; TCIcon: 12; DCCommand: ''), //Left: Only programs (TCCommand: 'cm_LeftAllFiles'; TCIcon: 13; DCCommand: ''), //Left: All files (TCCommand: 'cm_LeftUserSpec'; TCIcon: 24; DCCommand: ''), //Left: Last selected (TCCommand: 'cm_LeftUserDef'; TCIcon: 25; DCCommand: ''), //Left: Select user type (TCCommand: 'cm_LeftByName'; TCIcon: 5; DCCommand: 'cm_LeftSortByName'), //Left: Sort by name (TCCommand: 'cm_LeftByExt'; TCIcon: 6; DCCommand: 'cm_LeftSortByExt'), //Left: Sort by extension (TCCommand: 'cm_LeftBySize'; TCIcon: 8; DCCommand: 'cm_LeftSortBySize'), //Left: Sort by size (TCCommand: 'cm_LeftByDateTime'; TCIcon: 7; DCCommand: 'cm_LeftSortByDate'), //Left: Sort by date (TCCommand: 'cm_LeftUnsorted'; TCIcon: 9; DCCommand: ''), //Left: Unsorted (TCCommand: 'cm_LeftNegOrder'; TCIcon: 10; DCCommand: 'cm_LeftReverseOrder'), //Left: Reversed order (TCCommand: 'cm_LeftOpenDrives'; TCIcon: -1; DCCommand: 'cm_LeftOpenDrives'), //Left: Open drive list (TCCommand: 'cm_LeftPathFocus'; TCIcon: -1; DCCommand: ''), //Left: Put focus on path (TCCommand: 'cm_LeftDirBranch'; TCIcon: 50; DCCommand: 'cm_LeftFlatView'), //Left: Branch view (TCCommand: 'cm_LeftDirBranchSel'; TCIcon: 50; DCCommand: ''), //Left: branch view, only selected (TCCommand: 'cm_LeftThumbs'; TCIcon: 26; DCCommand: 'cm_LeftThumbView'), //Left: Thumbnail view (TCCommand: 'cm_LeftCustomViewMenu'; TCIcon: 52; DCCommand: ''), //Left: Custom view menu (TCCommand: 'cm_RightComments'; TCIcon: 21; DCCommand: ''), //Right: Show comments (TCCommand: 'cm_RightShort'; TCIcon: 3; DCCommand: 'cm_RightBriefView'), //Right: Only file names (TCCommand: 'cm_RightLong'; TCIcon: 4; DCCommand: 'cm_RightColumnsView'), //Right: All file details (TCCommand: 'cm_RightTree'; TCIcon: 2; DCCommand: ''), //Right: Directory tree (TCCommand: 'cm_RightQuickview'; TCIcon: 22; DCCommand: ''), //Right: Quick view panel (TCCommand: 'cm_RightQuickInternalOnly'; TCIcon: 22; DCCommand: ''), //Right: Quick view, no plugins (TCCommand: 'cm_RightHideQuickview'; TCIcon: 22; DCCommand: ''), //Right: Quick view panel off (TCCommand: 'cm_RightExecs'; TCIcon: 12; DCCommand: ''), //Right: Only programs (TCCommand: 'cm_RightAllFiles'; TCIcon: 13; DCCommand: ''), //Right: All files (TCCommand: 'cm_RightUserSpec'; TCIcon: 24; DCCommand: ''), //Right: Last selected (TCCommand: 'cm_RightUserDef'; TCIcon: 25; DCCommand: ''), //Right: Select user type (TCCommand: 'cm_RightByName'; TCIcon: 5; DCCommand: ''), //Right: Sort by name (TCCommand: 'cm_RightByExt'; TCIcon: 6; DCCommand: 'cm_RightSortByName'), //Right: Sort by extension (TCCommand: 'cm_RightBySize'; TCIcon: 8; DCCommand: 'cm_RightSortByExt'), //Right: Sort by size (TCCommand: 'cm_RightByDateTime'; TCIcon: 7; DCCommand: 'cm_RightSortBySize'), //Right: Sort by date (TCCommand: 'cm_RightUnsorted'; TCIcon: 9; DCCommand: 'cm_RightSortByDate'), //Right: Unsorted (TCCommand: 'cm_RightNegOrder'; TCIcon: 10; DCCommand: 'cm_RightReverseOrder'), //Right: Reversed order (TCCommand: 'cm_RightOpenDrives'; TCIcon: -1; DCCommand: 'cm_RightOpenDrives'), //Right: Open drive list (TCCommand: 'cm_RightPathFocus'; TCIcon: -1; DCCommand: ''), //Right: Put focus on path (TCCommand: 'cm_RightDirBranch'; TCIcon: 50; DCCommand: 'cm_RightFlatView'), //Right: branch view (TCCommand: 'cm_RightDirBranchSel'; TCIcon: 50; DCCommand: ''), //Right: branch view, only selected (TCCommand: 'cm_RightThumbs'; TCIcon: 26; DCCommand: 'cm_RightThumbView'), //Right: Thumbnail view (TCCommand: 'cm_RightCustomViewMenu'; TCIcon: 52; DCCommand: ''), //Right: Custom view menu (TCCommand: 'cm_List'; TCIcon: 27; DCCommand: 'cm_View'), //View with Lister (TCCommand: 'cm_ListInternalOnly'; TCIcon: 27; DCCommand: 'cm_view'), //Lister without plugins/multimedia (TCCommand: 'cm_Edit'; TCIcon: 28; DCCommand: 'cm_Edit'), //Edit (Notepad) (TCCommand: 'cm_Copy'; TCIcon: 62; DCCommand: 'cm_Copy'), //Copy files (TCCommand: 'cm_CopySamepanel'; TCIcon: 62; DCCommand: 'cm_CopySamePanel'), //Copy within panel (TCCommand: 'cm_CopyOtherpanel'; TCIcon: 62; DCCommand: ''), //Copy to other (TCCommand: 'cm_RenMov'; TCIcon: 63; DCCommand: 'cm_Rename'), //Rename/Move files (TCCommand: 'cm_MkDir'; TCIcon: 29; DCCommand: 'cm_MakeDir'), //Make directory (TCCommand: 'cm_Delete'; TCIcon: 64; DCCommand: 'cm_Delete'), //Delete files (TCCommand: 'cm_TestArchive'; TCIcon: 60; DCCommand: 'cm_TestArchive'), //Test selected archives (TCCommand: 'cm_PackFiles'; TCIcon: 30; DCCommand: 'cm_PackFiles'), //Pack files (TCCommand: 'cm_UnpackFiles'; TCIcon: 31; DCCommand: 'cm_ExtractFiles'), //Unpack all (TCCommand: 'cm_RenameOnly'; TCIcon: 32; DCCommand: 'cm_RenameOnly'), //Rename (Shift+F6) (TCCommand: 'cm_RenameSingleFile'; TCIcon: 32; DCCommand: ''), //Rename file under cursor (TCCommand: 'cm_MoveOnly'; TCIcon: 63; DCCommand: ''), //Move (F6) (TCCommand: 'cm_Properties'; TCIcon: -1; DCCommand: 'cm_FileProperties'), //Properties dialog (TCCommand: 'cm_CreateShortcut'; TCIcon: 65; DCCommand: ''), //Create a shortcut (TCCommand: 'cm_Return'; TCIcon: -1; DCCommand: 'cm_Open'), //Simulate: Return pressed (TCCommand: 'cm_OpenAsUser'; TCIcon: -1; DCCommand: ''), //Open program under cursor as different user (TCCommand: 'cm_Split'; TCIcon: 68; DCCommand: 'cm_FileSpliter'), //Split file into pieces (TCCommand: 'cm_Combine'; TCIcon: 69; DCCommand: 'cm_FileLinker'), //Combine partial files (TCCommand: 'cm_Encode'; TCIcon: 66; DCCommand: ''), //Encode MIME/UUE/XXE (TCCommand: 'cm_Decode'; TCIcon: 67; DCCommand: ''), //Decode MIME/UUE/XXE/BinHex (TCCommand: 'cm_CRCcreate'; TCIcon: -1; DCCommand: 'cm_CheckSumCalc'), //Create CRC checksums (TCCommand: 'cm_CRCcheck'; TCIcon: 61; DCCommand: 'cm_CheckSumVerify'), //Verify CRC checksums (TCCommand: 'cm_SetAttrib'; TCIcon: 33; DCCommand: 'cm_SetFileProperties'), //Change attributes (TCCommand: 'cm_Config'; TCIcon: 34; DCCommand: 'cm_Options'), //Conf: Layout (first page) (TCCommand: 'cm_DisplayConfig'; TCIcon: 34; DCCommand: ''), //Conf: Display (TCCommand: 'cm_IconConfig'; TCIcon: 34; DCCommand: ''), //Conf: Icons (TCCommand: 'cm_FontConfig'; TCIcon: 34; DCCommand: ''), //Conf: Font (TCCommand: 'cm_ColorConfig'; TCIcon: 34; DCCommand: ''), //Conf: Colors (TCCommand: 'cm_ConfTabChange'; TCIcon: 34; DCCommand: ''), //Conf: Tabstops (TCCommand: 'cm_DirTabsConfig'; TCIcon: 34; DCCommand: 'cm_configfoldertabs'), //Conf: Directory tabs (TCCommand: 'cm_CustomColumnConfig'; TCIcon: 56; DCCommand: ''), //Conf: Custom colums (TCCommand: 'cm_CustomColumnDlg'; TCIcon: 56; DCCommand: ''), //Change current custom columns (TCCommand: 'cm_LanguageConfig'; TCIcon: 34; DCCommand: ''), //Conf: Language (TCCommand: 'cm_Config2'; TCIcon: 34; DCCommand: ''), //Conf: Operation (TCCommand: 'cm_EditConfig'; TCIcon: 34; DCCommand: ''), //Conf: Viewer/Editor (TCCommand: 'cm_CopyConfig'; TCIcon: 34; DCCommand: ''), //Conf: Copy/Delete (TCCommand: 'cm_RefreshConfig'; TCIcon: 34; DCCommand: ''), //Conf: Refresh file lists (TCCommand: 'cm_QuickSearchConfig'; TCIcon: 34; DCCommand: ''), //Conf: Quick Search (TCCommand: 'cm_FtpConfig'; TCIcon: 34; DCCommand: ''), //FTP options (TCCommand: 'cm_PluginsConfig'; TCIcon: 34; DCCommand: ''), //Conf: Plugins (TCCommand: 'cm_ThumbnailsConfig'; TCIcon: 34; DCCommand: ''), //Conf: Thumbnails (TCCommand: 'cm_LogConfig'; TCIcon: 34; DCCommand: ''), //Conf: Log file (TCCommand: 'cm_IgnoreConfig'; TCIcon: 34; DCCommand: ''), //Conf: Ignore list (TCCommand: 'cm_PackerConfig'; TCIcon: 34; DCCommand: ''), //Conf: Packer (TCCommand: 'cm_ZipPackerConfig'; TCIcon: 34; DCCommand: ''), //Conf: ZIP packer (TCCommand: 'cm_Confirmation'; TCIcon: 34; DCCommand: ''), //Conf: Misc, Confirmation (TCCommand: 'cm_ConfigSavePos'; TCIcon: -1; DCCommand: ''), //Conf: Save position (TCCommand: 'cm_ButtonConfig'; TCIcon: 14; DCCommand: 'cm_ConfigToolbars'), //Conf: Button bar (TCCommand: 'cm_ConfigSaveSettings'; TCIcon: -1; DCCommand: ''), //Save current paths etc. (TCCommand: 'cm_ConfigChangeIniFiles'; TCIcon: -1; DCCommand: ''), //Open ini files in notepad (TCCommand: 'cm_ConfigSaveDirHistory'; TCIcon: -1; DCCommand: ''), //Save directory history (TCCommand: 'cm_ChangeStartMenu'; TCIcon: 34; DCCommand: ''), //Change Start menu (TCCommand: 'cm_NetConnect'; TCIcon: 53; DCCommand: 'cm_NetworkConnect'), //Network connections (TCCommand: 'cm_NetDisconnect'; TCIcon: 54; DCCommand: 'cm_NetworkDisconnect'), //Disconnect network drives (TCCommand: 'cm_NetShareDir'; TCIcon: -1; DCCommand: ''), //Share directory (TCCommand: 'cm_NetUnshareDir'; TCIcon: -1; DCCommand: ''), //Unshare directory (TCCommand: 'cm_AdministerServer'; TCIcon: -1; DCCommand: ''), //Connect to admin share to open \\server\c$ etc. (TCCommand: 'cm_ShowFileUser'; TCIcon: -1; DCCommand: ''), //Which remote user has opened a local file (TCCommand: 'cm_GetFileSpace'; TCIcon: -1; DCCommand: 'cm_CalculateSpace'), //Calculate space (TCCommand: 'cm_VolumeId'; TCIcon: -1; DCCommand: ''), //Volume label (TCCommand: 'cm_VersionInfo'; TCIcon: -1; DCCommand: ''), //Version information (TCCommand: 'cm_ExecuteDOS'; TCIcon: -1; DCCommand: 'cm_RunTerm'), //Open command prompt window (TCCommand: 'cm_CompareDirs'; TCIcon: 35; DCCommand: 'cm_CompareDirectories'), //Compare dirs (TCCommand: 'cm_CompareDirsWithSubdirs'; TCIcon: 35; DCCommand: 'cm_CompareDirectories'), //Also mark subdirs not present in other dir (TCCommand: 'cm_ContextMenu'; TCIcon: -1; DCCommand: 'cm_ContextMenu'), //Show context menu (TCCommand: 'cm_ContextMenuInternal'; TCIcon: -1; DCCommand: ''), //Show context menu for internal associations (TCCommand: 'cm_ContextMenuInternalCursor'; TCIcon: -1; DCCommand: ''), //Internal context menu for file under cursor (TCCommand: 'cm_ShowRemoteMenu'; TCIcon: -1; DCCommand: ''), //Context menu for Media Center remote control Play/Pause (TCCommand: 'cm_SyncChangeDir'; TCIcon: 75; DCCommand: ''), //Synchronous directory changing in both windows (TCCommand: 'cm_EditComment'; TCIcon: -1; DCCommand: 'cm_EditComment'), //Edit file comment (TCCommand: 'cm_FocusLeft'; TCIcon: -1; DCCommand: ''), //Focus on left file list (TCCommand: 'cm_FocusRight'; TCIcon: -1; DCCommand: ''), //Focus on right file list (TCCommand: 'cm_FocusCmdLine'; TCIcon: -1; DCCommand: 'cm_FocusCmdLine'), //Focus on command line (TCCommand: 'cm_FocusButtonBar'; TCIcon: -1; DCCommand: ''), //Focus on button bar (TCCommand: 'cm_CountDirContent'; TCIcon: 36; DCCommand: 'cm_CountDirContent'), //Calculate space occupied by subdirs in current dir (TCCommand: 'cm_UnloadPlugins'; TCIcon: -1; DCCommand: ''), //Unload all plugins (TCCommand: 'cm_DirMatch'; TCIcon: 35; DCCommand: ''), //Mark newer (TCCommand: 'cm_Exchange'; TCIcon: 37; DCCommand: 'cm_Exchange'), //Swap panels (TCCommand: 'cm_MatchSrc'; TCIcon: 86; DCCommand: 'cm_TargetEqualSource'), //target=Source (TCCommand: 'cm_ReloadSelThumbs'; TCIcon: -1; DCCommand: ''), //Re-load selected thumbnails (TCCommand: 'cm_DirectCableConnect'; TCIcon: -1; DCCommand: ''), //Connect to other PC by cable (TCCommand: 'cm_NTinstallDriver'; TCIcon: -1; DCCommand: ''), //Install parallel port driver on NT (TCCommand: 'cm_NTremoveDriver'; TCIcon: -1; DCCommand: ''), //Remove parallel port driver on NT (TCCommand: 'cm_PrintDir'; TCIcon: 38; DCCommand: ''), //Print current directory (with preview) (TCCommand: 'cm_PrintDirSub'; TCIcon: 38; DCCommand: ''), //Print dir with subdirs (TCCommand: 'cm_PrintFile'; TCIcon: 38; DCCommand: ''), //Print file (TCCommand: 'cm_SpreadSelection'; TCIcon: 39; DCCommand: 'cm_MarkPlus'), //Select group (TCCommand: 'cm_SelectBoth'; TCIcon: 72; DCCommand: ''), //Select group: files+folders (TCCommand: 'cm_SelectFiles'; TCIcon: 70; DCCommand: ''), //Select group: just files (TCCommand: 'cm_SelectFolders'; TCIcon: 71; DCCommand: ''), //Select group: just folders (TCCommand: 'cm_ShrinkSelection'; TCIcon: 40; DCCommand: 'cm_MarkMinus'), //Unselect group (TCCommand: 'cm_ClearFiles'; TCIcon: 40; DCCommand: ''), //Unselect group: just files (TCCommand: 'cm_ClearFolders'; TCIcon: 40; DCCommand: ''), //Unselect group: just folders (TCCommand: 'cm_ClearSelCfg'; TCIcon: 40; DCCommand: ''), //Unselect group (files or both, as configured) (TCCommand: 'cm_SelectAll'; TCIcon: 44; DCCommand: 'cm_MarkMarkAll'), //Select all (files or both, as configured) (TCCommand: 'cm_SelectAllBoth'; TCIcon: 44; DCCommand: ''), //Select both files+folders (TCCommand: 'cm_SelectAllFiles'; TCIcon: 44; DCCommand: ''), //Select all files (TCCommand: 'cm_SelectAllFolders'; TCIcon: 44; DCCommand: ''), //Select all folders (TCCommand: 'cm_ClearAll'; TCIcon: -1; DCCommand: 'cm_MarkUnmarkAll'), //Unselect all (files+folders) (TCCommand: 'cm_ClearAllFiles'; TCIcon: -1; DCCommand: ''), //Unselect all files (TCCommand: 'cm_ClearAllFolders'; TCIcon: -1; DCCommand: ''), //Unselect all folders (TCCommand: 'cm_ClearAllCfg'; TCIcon: -1; DCCommand: ''), //Unselect all (files or both, as configured) (TCCommand: 'cm_ExchangeSelection'; TCIcon: 11; DCCommand: 'cm_MarkInvert'), //Invert selection (TCCommand: 'cm_ExchangeSelBoth'; TCIcon: 11; DCCommand: ''), //Invert selection (files+folders) (TCCommand: 'cm_ExchangeSelFiles'; TCIcon: 11; DCCommand: ''), //Invert selection (files) (TCCommand: 'cm_ExchangeSelFolders'; TCIcon: 11; DCCommand: ''), //Invert selection (folders) (TCCommand: 'cm_SelectCurrentExtension'; TCIcon: 41; DCCommand: 'cm_MarkCurrentExtension'), //Select all files with same ext. (TCCommand: 'cm_UnselectCurrentExtension'; TCIcon: -1; DCCommand: 'cm_UnmarkCurrentExtension'), //Unselect all files with same ext. (TCCommand: 'cm_SelectCurrentName'; TCIcon: -1; DCCommand: ''), //Select all files with same name (TCCommand: 'cm_UnselectCurrentName'; TCIcon: -1; DCCommand: ''), //Unselect all files with same name (TCCommand: 'cm_SelectCurrentNameExt'; TCIcon: -1; DCCommand: ''), //Select all files with same name+ext. (TCCommand: 'cm_UnselectCurrentNameExt'; TCIcon: -1; DCCommand: ''), //Unselect all files with same name+ext. (TCCommand: 'cm_SelectCurrentPath'; TCIcon: 72; DCCommand: ''), //Select all in same path (for branch view+search) (TCCommand: 'cm_UnselectCurrentPath'; TCIcon: -1; DCCommand: ''), //Unselect all in same path (TCCommand: 'cm_RestoreSelection'; TCIcon: 42; DCCommand: 'cm_RestoreSelection'), //Selection before last operation (TCCommand: 'cm_SaveSelection'; TCIcon: 43; DCCommand: 'cm_SaveSelection'), //Temporarily save selection (TCCommand: 'cm_SaveSelectionToFile'; TCIcon: -1; DCCommand: 'cm_SaveSelectionToFile'), //Save file selection to file (TCCommand: 'cm_SaveSelectionToFileA'; TCIcon: -1; DCCommand: ''), //Save file selection to file (ANSI) (TCCommand: 'cm_SaveSelectionToFileW'; TCIcon: -1; DCCommand: ''), //Save file selection to file (Unicode) (TCCommand: 'cm_SaveDetailsToFile'; TCIcon: -1; DCCommand: ''), //Save all shown columns to file (TCCommand: 'cm_SaveDetailsToFileA'; TCIcon: -1; DCCommand: ''), //Save all shown columns to file (ANSI) (TCCommand: 'cm_SaveDetailsToFileW'; TCIcon: -1; DCCommand: ''), //Save all shown columns to file (Unicode) (TCCommand: 'cm_LoadSelectionFromFile'; TCIcon: -1; DCCommand: 'cm_LoadSelectionFromFile'), //Read file selection from file (TCCommand: 'cm_LoadSelectionFromClip'; TCIcon: -1; DCCommand: 'cm_LoadSelectionFromClip'), //Read file selection from clipboard (TCCommand: 'cm_EditPermissionInfo'; TCIcon: -1; DCCommand: ''), //Permissions dialog (NTFS) (TCCommand: 'cm_EditPersmissionInfo'; TCIcon: -1; DCCommand: ''), //Typo... (TCCommand: 'cm_EditAuditInfo'; TCIcon: -1; DCCommand: ''), //File auditing (NTFS) (TCCommand: 'cm_EditOwnerInfo'; TCIcon: -1; DCCommand: ''), //Take ownership (NTFS) (TCCommand: 'cm_CutToClipboard'; TCIcon: -1; DCCommand: 'cm_CutToClipboard'), //Cut selected files to clipboard (TCCommand: 'cm_CopyToClipboard'; TCIcon: -1; DCCommand: 'cm_CopyToClipboard'), //Copy selected files to clipboard (TCCommand: 'cm_PasteFromClipboard'; TCIcon: -1; DCCommand: 'cm_PasteFromClipboard'), //Paste from clipboard to current dir (TCCommand: 'cm_CopyNamesToClip'; TCIcon: 45; DCCommand: 'cm_CopyNamesToClip'), //Copy filenames to clipboard (TCCommand: 'cm_CopyFullNamesToClip'; TCIcon: 45; DCCommand: 'cm_CopyFullNamesToClip'), //Copy names with full path (TCCommand: 'cm_CopyNetNamesToClip'; TCIcon: 45; DCCommand: ''), //Copy names with UNC path (TCCommand: 'cm_CopySrcPathToClip'; TCIcon: 45; DCCommand: ''), //Copy source path to clipboard (TCCommand: 'cm_CopyTrgPathToClip'; TCIcon: 45; DCCommand: ''), //Copy target path to clipboard (TCCommand: 'cm_CopyFileDetailsToClip'; TCIcon: 59; DCCommand: 'cm_CopyFileDetailsToClip'), //Copy all shown columns (TCCommand: 'cm_CopyFpFileDetailsToClip'; TCIcon: 59; DCCommand: ''), //Copy all columns, with full path (TCCommand: 'cm_CopyNetFileDetailsToClip'; TCIcon: 59; DCCommand: ''), //Copy all columns, with UNC path (TCCommand: 'cm_FtpConnect'; TCIcon: 16; DCCommand: ''), //Connect to FTP (TCCommand: 'cm_FtpNew'; TCIcon: 17; DCCommand: ''), //New FTP connection (TCCommand: 'cm_FtpDisconnect'; TCIcon: -1; DCCommand: ''), //Disconnect from FTP (TCCommand: 'cm_FtpHiddenFiles'; TCIcon: -1; DCCommand: ''), //Show hidden FTP files (TCCommand: 'cm_FtpAbort'; TCIcon: -1; DCCommand: ''), //Abort current FTP command (TCCommand: 'cm_FtpResumeDownload'; TCIcon: -1; DCCommand: ''), //Resume aborted download (TCCommand: 'cm_FtpSelectTransferMode'; TCIcon: -1; DCCommand: ''), //Select Binary, ASCII or Auto mode (TCCommand: 'cm_FtpAddToList'; TCIcon: -1; DCCommand: ''), //Add selected files to download list (TCCommand: 'cm_FtpDownloadList'; TCIcon: -1; DCCommand: ''), //Download files in download list (TCCommand: 'cm_GotoPreviousDir'; TCIcon: 18; DCCommand: ''), //Go back (TCCommand: 'cm_GotoNextDir'; TCIcon: 19; DCCommand: ''), //Go forward (TCCommand: 'cm_DirectoryHistory'; TCIcon: -1; DCCommand: 'cm_DirHistory'), //History list (TCCommand: 'cm_GotoPreviousLocalDir'; TCIcon: 18; DCCommand: ''), //Go back, no ftp (TCCommand: 'cm_GotoNextLocalDir'; TCIcon: 19; DCCommand: ''), //Go forward, no ftp (TCCommand: 'cm_DirectoryHotlist'; TCIcon: -1; DCCommand: 'cm_DirHotList'), //Directory popup menu (TCCommand: 'cm_GoToRoot'; TCIcon: -1; DCCommand: 'cm_ChangeDirToRoot'), //Go to root directory (TCCommand: 'cm_GoToParent'; TCIcon: 15; DCCommand: 'cm_ChangeDirToParent'), //Go to parent directory (TCCommand: 'cm_GoToDir'; TCIcon: -1; DCCommand: ''), //Open dir or zip under cursor (TCCommand: 'cm_OpenDesktop'; TCIcon: -1; DCCommand: ''), //Desktop folder (TCCommand: 'cm_OpenDrives'; TCIcon: -1; DCCommand: ''), //My computer (TCCommand: 'cm_OpenControls'; TCIcon: 20; DCCommand: ''), //Control panel (TCCommand: 'cm_OpenFonts'; TCIcon: -1; DCCommand: ''), //Fonts folder (TCCommand: 'cm_OpenNetwork'; TCIcon: -1; DCCommand: ''), //Network neighborhood (TCCommand: 'cm_OpenPrinters'; TCIcon: -1; DCCommand: ''), //Printers folder (TCCommand: 'cm_OpenRecycled'; TCIcon: -1; DCCommand: ''), //Recycle bin (TCCommand: 'cm_CDtree'; TCIcon: 1; DCCommand: ''), //Popup directory tree (TCCommand: 'cm_TransferLeft'; TCIcon: -1; DCCommand: 'cm_TransferLeft'), //Transfer dir under cursor to left window (TCCommand: 'cm_TransferRight'; TCIcon: -1; DCCommand: 'cm_TransferRight'), //Transfer dir under cursor to right window (TCCommand: 'cm_EditPath'; TCIcon: -1; DCCommand: 'cm_EditPath'), //Edit path field above file list (TCCommand: 'cm_GoToFirstFile'; TCIcon: -1; DCCommand: 'cm_GoToFirstFile'), //Place cursor on first file in list (TCCommand: 'cm_GotoNextDrive'; TCIcon: -1; DCCommand: ''), //Go one drive up (C->D) (TCCommand: 'cm_GotoPreviousDrive'; TCIcon: -1; DCCommand: ''), //Go one drive down (TCCommand: 'cm_GotoNextSelected'; TCIcon: -1; DCCommand: ''), //Go to next selected file (TCCommand: 'cm_GotoPrevSelected'; TCIcon: -1; DCCommand: ''), //Go to previous selected file (TCCommand: 'cm_GotoDriveA'; TCIcon: -1; DCCommand: ''), //Switch to drive A (TCCommand: 'cm_GotoDriveC'; TCIcon: -1; DCCommand: ''), //Switch to drive C (TCCommand: 'cm_GotoDriveD'; TCIcon: -1; DCCommand: ''), //Switch to drive D (TCCommand: 'cm_GotoDriveE'; TCIcon: -1; DCCommand: ''), //Switch to drive E (TCCommand: 'cm_GotoDriveF'; TCIcon: -1; DCCommand: ''), //(etc, define your own if) (TCCommand: 'cm_GotoDriveZ'; TCIcon: -1; DCCommand: ''), //(you need more drives) (TCCommand: 'cm_HelpIndex'; TCIcon: 55; DCCommand: 'cm_HelpIndex'), //Help index (TCCommand: 'cm_Keyboard'; TCIcon: -1; DCCommand: 'cm_Keyboard'), //Keyboard help (TCCommand: 'cm_Register'; TCIcon: -1; DCCommand: ''), //Registration info (TCCommand: 'cm_VisitHomepage'; TCIcon: -1; DCCommand: 'cm_VisitHomePage'), //Visit http://www.ghisler.com/ (TCCommand: 'cm_About'; TCIcon: -1; DCCommand: 'cm_About'), //Help/About Total Commander (TCCommand: 'cm_Exit'; TCIcon: -1; DCCommand: 'cm_Exit'), //Exit Total Commander (TCCommand: 'cm_Minimize'; TCIcon: -1; DCCommand: 'cm_Minimize'), //Minimize Total Commander (TCCommand: 'cm_Maximize'; TCIcon: -1; DCCommand: ''), //Maximize Total Commander (TCCommand: 'cm_Restore'; TCIcon: -1; DCCommand: ''), //Restore normal size (TCCommand: 'cm_ClearCmdLine'; TCIcon: -1; DCCommand: ''), //Clear command line (TCCommand: 'cm_NextCommand'; TCIcon: -1; DCCommand: 'cm_CmdLineNext'), //Next command line (TCCommand: 'cm_PrevCommand'; TCIcon: -1; DCCommand: 'cm_CmdLinePrev'), //Previous command line (TCCommand: 'cm_AddPathToCmdline'; TCIcon: -1; DCCommand: 'cm_AddPathToCmdLine'), //Copy path to command line (TCCommand: 'cm_MultiRenameFiles'; TCIcon: 46; DCCommand: 'cm_MultiRename'), //Rename multiple files (TCCommand: 'cm_SysInfo'; TCIcon: -1; DCCommand: ''), //System information (TCCommand: 'cm_OpenTransferManager'; TCIcon: 74; DCCommand: ''), //Background transfer manager (TCCommand: 'cm_SearchFor'; TCIcon: 47; DCCommand: 'cm_Search'), //Search for (TCCommand: 'cm_SearchStandalone'; TCIcon: 47; DCCommand: ''), //Search in separate process (TCCommand: 'cm_FileSync'; TCIcon: 48; DCCommand: 'cm_SyncDirs'), //Synchronize directories (TCCommand: 'cm_Associate'; TCIcon: -1; DCCommand: ''), //Associate (TCCommand: 'cm_InternalAssociate'; TCIcon: -1; DCCommand: 'cm_FileAssoc'), //Define internal associations (TCCommand: 'cm_CompareFilesByContent'; TCIcon: 49; DCCommand: 'cm_CompareContents'), //File comparison (TCCommand: 'cm_IntCompareFilesByContent'; TCIcon: 49; DCCommand: 'cm_CompareContents'), //Use internal compare tool (TCCommand: 'cm_CommandBrowser'; TCIcon: 82; DCCommand: ''), //Browse internal commands (TCCommand: 'cm_VisButtonbar'; TCIcon: -1; DCCommand: ''), //Show/hide button bar (TCCommand: 'cm_VisDriveButtons'; TCIcon: -1; DCCommand: ''), //Show/hide drive button bars (TCCommand: 'cm_VisTwoDriveButtons'; TCIcon: -1; DCCommand: ''), //Show/hide two drive bars (TCCommand: 'cm_VisFlatDriveButtons'; TCIcon: -1; DCCommand: ''), //Buttons: Flat/normal mode (TCCommand: 'cm_VisFlatInterface'; TCIcon: -1; DCCommand: ''), //Interface: Flat/normal mode (TCCommand: 'cm_VisDriveCombo'; TCIcon: -1; DCCommand: ''), //Show/hide drive combobox (TCCommand: 'cm_VisCurDir'; TCIcon: -1; DCCommand: ''), //Show/hide current directory (TCCommand: 'cm_VisBreadCrumbs'; TCIcon: -1; DCCommand: ''), //Show/hide Breadcrumb bar (TCCommand: 'cm_VisTabHeader'; TCIcon: -1; DCCommand: ''), //Show/hide tab header (sorting) (TCCommand: 'cm_VisStatusbar'; TCIcon: -1; DCCommand: ''), //Show/hide status bar (TCCommand: 'cm_VisCmdLine'; TCIcon: -1; DCCommand: ''), //Show/hide Command line (TCCommand: 'cm_VisKeyButtons'; TCIcon: -1; DCCommand: ''), //Show/hide function key buttons (TCCommand: 'cm_ShowHint'; TCIcon: -1; DCCommand: ''), //Show file tip window (TCCommand: 'cm_ShowQuickSearch'; TCIcon: -1; DCCommand: ''), //Show name search window (TCCommand: 'cm_SwitchLongNames'; TCIcon: -1; DCCommand: ''), //Turn long names on and off (TCCommand: 'cm_RereadSource'; TCIcon: 0; DCCommand: 'cm_Refresh'), //Reread source (TCCommand: 'cm_ShowOnlySelected'; TCIcon: 73; DCCommand: ''), //Hide files which aren't selected (TCCommand: 'cm_SwitchHidSys'; TCIcon: 79; DCCommand: ''), //Turn hidden/system files on and off (TCCommand: 'cm_SwitchHid'; TCIcon: 79; DCCommand: ''), //Turn hidden files on and off (TCCommand: 'cm_SwitchSys'; TCIcon: 79; DCCommand: 'cm_ShowSysFiles'), //Turn system files on and off (TCCommand: 'cm_Switch83Names'; TCIcon: -1; DCCommand: ''), //Turn 8.3 names lowercase on/off (TCCommand: 'cm_SwitchDirSort'; TCIcon: -1; DCCommand: ''), //Turn directory sorting by name on/off (TCCommand: 'cm_DirBranch'; TCIcon: 50; DCCommand: 'cm_FlatView'), //Show all files in current dir and all subdirs (TCCommand: 'cm_DirBranchSel'; TCIcon: 50; DCCommand: ''), //Show selected files, and all in selected subdirs (TCCommand: 'cm_50Percent'; TCIcon: -1; DCCommand: ''), //Window separator at 50% (TCCommand: 'cm_100Percent'; TCIcon: -1; DCCommand: ''), //Window separator at 100% (TCCommand: 'cm_VisDirTabs'; TCIcon: -1; DCCommand: ''), //Show/hide folder tabs (TCCommand: 'cm_VisXPThemeBackground'; TCIcon: -1; DCCommand: ''), //Show/hide XP theme background (TCCommand: 'cm_SwitchOverlayIcons'; TCIcon: -1; DCCommand: ''), //Switch icon overlays on/off (TCCommand: 'cm_VisHistHotButtons'; TCIcon: -1; DCCommand: ''), //Show/hide dir history+hotlist (TCCommand: 'cm_SwitchWatchDirs'; TCIcon: 80; DCCommand: ''), //Enable/disable WatchDirs auto-refresh temporarily (TCCommand: 'cm_SwitchIgnoreList'; TCIcon: 81; DCCommand: 'cm_SwitchIgnoreList'), //Enable/disable ignore list file to not show file names (TCCommand: 'cm_SwitchX64Redirection'; TCIcon: -1; DCCommand: ''), //64-bit Windows: Redirect 32-bit system32 dir off/on (TCCommand: 'cm_SeparateTreeOff'; TCIcon: 76; DCCommand: ''), //Disable separate tree panel (TCCommand: 'cm_SeparateTree1'; TCIcon: 77; DCCommand: ''), //One separate tree panel (TCCommand: 'cm_SeparateTree2'; TCIcon: 78; DCCommand: ''), //Two separate tree panels (TCCommand: 'cm_SwitchSeparateTree'; TCIcon: 51; DCCommand: ''), //Switch through tree panel options (TCCommand: 'cm_ToggleSeparateTree1'; TCIcon: 77; DCCommand: ''), //One separate tree panel on/off (TCCommand: 'cm_ToggleSeparateTree2'; TCIcon: 78; DCCommand: ''), //Two separate tree panels on/off (TCCommand: 'cm_UserMenu1'; TCIcon: -1; DCCommand: ''), //Start first menu item in Start menu (TCCommand: 'cm_UserMenu2'; TCIcon: -1; DCCommand: ''), //Second item (TCCommand: 'cm_UserMenu3'; TCIcon: -1; DCCommand: ''), //Third item (TCCommand: 'cm_UserMenu4'; TCIcon: -1; DCCommand: ''), //etc. (TCCommand: 'cm_UserMenu5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_UserMenu6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_UserMenu7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_UserMenu8'; TCIcon: -1; DCCommand: ''), //You can add more (TCCommand: 'cm_UserMenu9'; TCIcon: -1; DCCommand: ''), //custom user menu ids (TCCommand: 'cm_UserMenu10'; TCIcon: -1; DCCommand: ''), //in totalcmd.inc! (TCCommand: 'cm_OpenNewTab'; TCIcon: 83; DCCommand: 'cm_NewTab'), //Open new tab (TCCommand: 'cm_OpenNewTabBg'; TCIcon: 83; DCCommand: ''), //Open new tab in background (TCCommand: 'cm_OpenDirInNewTab'; TCIcon: -1; DCCommand: 'cm_OpenDirInNewTab'), //Open dir under cursor in tab (TCCommand: 'cm_OpenDirInNewTabOther'; TCIcon: -1; DCCommand: ''), //Open dir under cursor (other window) (TCCommand: 'cm_SwitchToNextTab'; TCIcon: -1; DCCommand: 'cm_NextTab'), //Switch to next Tab (as Ctrl+Tab) (TCCommand: 'cm_SwitchToPreviousTab'; TCIcon: -1; DCCommand: 'cm_PrevTab'), //Switch to previous Tab (Ctrl+Shift+Tab) (TCCommand: 'cm_CloseCurrentTab'; TCIcon: 84; DCCommand: 'cm_CloseTab'), //Close tab (TCCommand: 'cm_CloseAllTabs'; TCIcon: 85; DCCommand: 'cm_CloseAllTabs'), //Close all (TCCommand: 'cm_DirTabsShowMenu'; TCIcon: -1; DCCommand: ''), //Show tab menu (TCCommand: 'cm_ToggleLockCurrentTab'; TCIcon: -1; DCCommand: ''), //Turn on/off tab locking (TCCommand: 'cm_ToggleLockDcaCurrentTab'; TCIcon: -1; DCCommand: ''), //Same but with dir changes allowed (TCCommand: 'cm_ExchangeWithTabs'; TCIcon: 37; DCCommand: ''), //Swap all Tabs (TCCommand: 'cm_GoToLockedDir'; TCIcon: -1; DCCommand: ''), //Go to the base dir of locked tab (TCCommand: 'cm_SrcActivateTab1'; TCIcon: -1; DCCommand: ''), //Activate first tab (TCCommand: 'cm_SrcActivateTab2'; TCIcon: -1; DCCommand: ''), //Activate second tab (TCCommand: 'cm_SrcActivateTab3'; TCIcon: -1; DCCommand: ''), //(Source window) (TCCommand: 'cm_SrcActivateTab4'; TCIcon: -1; DCCommand: ''), //etc. (TCCommand: 'cm_SrcActivateTab5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcActivateTab6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcActivateTab7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcActivateTab8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcActivateTab9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcActivateTab10'; TCIcon: -1; DCCommand: ''), //(up to 99 items) (TCCommand: 'cm_TrgActivateTab1'; TCIcon: -1; DCCommand: ''), //Activate first tab (TCCommand: 'cm_TrgActivateTab2'; TCIcon: -1; DCCommand: ''), //Activate second tab (TCCommand: 'cm_TrgActivateTab3'; TCIcon: -1; DCCommand: ''), //(Target window) (TCCommand: 'cm_TrgActivateTab4'; TCIcon: -1; DCCommand: ''), //etc. (TCCommand: 'cm_TrgActivateTab5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgActivateTab6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgActivateTab7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgActivateTab8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgActivateTab9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgActivateTab10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab1'; TCIcon: -1; DCCommand: ''), //Activate first tab (TCCommand: 'cm_LeftActivateTab2'; TCIcon: -1; DCCommand: ''), //Activate second tab (TCCommand: 'cm_LeftActivateTab3'; TCIcon: -1; DCCommand: ''), //(Left window) (TCCommand: 'cm_LeftActivateTab4'; TCIcon: -1; DCCommand: ''), //etc. (TCCommand: 'cm_LeftActivateTab5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftActivateTab10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab1'; TCIcon: -1; DCCommand: ''), //Activate first tab (TCCommand: 'cm_RightActivateTab2'; TCIcon: -1; DCCommand: ''), //Activate second tab (TCCommand: 'cm_RightActivateTab3'; TCIcon: -1; DCCommand: ''), //(Right window) (TCCommand: 'cm_RightActivateTab4'; TCIcon: -1; DCCommand: ''), //etc. (TCCommand: 'cm_RightActivateTab5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightActivateTab10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol1'; TCIcon: -1; DCCommand: ''), // Sort by first column (TCCommand: 'cm_SrcSortByCol2'; TCIcon: -1; DCCommand: ''), // Sort by second column (TCCommand: 'cm_SrcSortByCol3'; TCIcon: -1; DCCommand: ''), // (source window) (TCCommand: 'cm_SrcSortByCol4'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_SrcSortByCol5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcSortByCol99'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol1'; TCIcon: -1; DCCommand: ''), // Sort by first column (TCCommand: 'cm_TrgSortByCol2'; TCIcon: -1; DCCommand: ''), // Sort by second column (TCCommand: 'cm_TrgSortByCol3'; TCIcon: -1; DCCommand: ''), // (target window) (TCCommand: 'cm_TrgSortByCol4'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_TrgSortByCol5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_TrgSortByCol99'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol1'; TCIcon: -1; DCCommand: ''), // Sort by first column (TCCommand: 'cm_LeftSortByCol2'; TCIcon: -1; DCCommand: ''), // Sort by second column (TCCommand: 'cm_LeftSortByCol3'; TCIcon: -1; DCCommand: ''), // (left window) (TCCommand: 'cm_LeftSortByCol4'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_LeftSortByCol5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftSortByCol99'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol1'; TCIcon: -1; DCCommand: ''), // Sort by first column (TCCommand: 'cm_RightSortByCol2'; TCIcon: -1; DCCommand: ''), // Sort by second column (TCCommand: 'cm_RightSortByCol3'; TCIcon: -1; DCCommand: ''), // (right window) (TCCommand: 'cm_RightSortByCol4'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_RightSortByCol5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol10'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightSortByCol99'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView1'; TCIcon: -1; DCCommand: ''), // Source: Custom columns 1 (TCCommand: 'cm_SrcCustomView2'; TCIcon: -1; DCCommand: ''), // (user defined columns) (TCCommand: 'cm_SrcCustomView3'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_SrcCustomView4'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcCustomView9'; TCIcon: -1; DCCommand: ''), // etc. until 299 (TCCommand: 'cm_LeftCustomView1'; TCIcon: -1; DCCommand: ''), // Left: Custom columns 1 (TCCommand: 'cm_LeftCustomView2'; TCIcon: -1; DCCommand: ''), // (user defined columns) (TCCommand: 'cm_LeftCustomView3'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_LeftCustomView4'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftCustomView5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftCustomView6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftCustomView7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftCustomView8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_LeftCustomView9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView1'; TCIcon: -1; DCCommand: ''), // Right: Custom columns 1 (TCCommand: 'cm_RightCustomView2'; TCIcon: -1; DCCommand: ''), // (user defined columns) (TCCommand: 'cm_RightCustomView3'; TCIcon: -1; DCCommand: ''), // etc. (TCCommand: 'cm_RightCustomView4'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView5'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView6'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView7'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView8'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_RightCustomView9'; TCIcon: -1; DCCommand: ''), (TCCommand: 'cm_SrcNextCustomView'; TCIcon: 52; DCCommand: ''), // Source: Next custom view (TCCommand: 'cm_SrcPrevCustomView'; TCIcon: 52; DCCommand: ''), // Source: Previous custom view (TCCommand: 'cm_TrgNextCustomView'; TCIcon: 52; DCCommand: ''), // Target: Next custom view (TCCommand: 'cm_TrgPrevCustomView'; TCIcon: 52; DCCommand: ''), // Target: Previous custom view (TCCommand: 'cm_LeftNextCustomView'; TCIcon: 52; DCCommand: ''), // Left: Next custom view (TCCommand: 'cm_LeftPrevCustomView'; TCIcon: 52; DCCommand: ''), // Left: Previous custom view (TCCommand: 'cm_RightNextCustomView'; TCIcon: 52; DCCommand: ''), //Right: Next custom view (TCCommand: 'cm_RightPrevCustomView'; TCIcon: 52; DCCommand: ''), //Right: Previous custom view (TCCommand: 'cm_LoadAllOnDemandFields'; TCIcon: -1; DCCommand: ''), //Load on demand fields for all files (TCCommand: 'cm_LoadSelOnDemandFields'; TCIcon: -1; DCCommand: ''), //Load on demand fields for selected files (TCCommand: 'cm_ContentStopLoadFields'; TCIcon: -1; DCCommand: '') //Stop loading on demand fields ); //DC commands unmatched for the moment //------------------------------------ //cm_AddFilenameToCmdLine - Looks like TC can do it with a CTRL+ENTER but no cm_ command for this. //cm_AddPathAndFilenameToCmdLine - Looks like TC can do it with a CTRL+SHIFT+ENTER but no cm_ command for this. //cm_ChangeDir - Looks like TC can do it with "CD ..." bit no cm_ command for this. //cm_ChangeDirToHome - Looks like there is no TC equivalent //cm_ClearLogFile - //cm_ClearLogWindow //cm_ConfigDirHotList //cm_CopyNoAsk //cm_DebugShowCommandParameters //cm_EditNew //cm_GoToLastFile //cm_HardLink //cm_LeftEqualRight //cm_LoadTabs //cm_OpenArchive //cm_OpenBar //cm_OpenVirtualFileSystemList //cm_OperationsViewer //cm_PanelsSplitterPerPos //cm_QuickFilter //cm_QuickSearch //cm_RenameNoAsk //cm_RenameTab //cm_RightEqualLeft //cm_SaveTabs //cm_SetTabOptionNormal //cm_SetTabOptionPathLocked //cm_SetTabOptionPathResets //cm_SetTabOptionDirsInNewTab //cm_ShellExecute //cm_ShowButtonMenu //cm_ShowCmdLineHistory //cm_ShowMainMenu //cm_SortByAttr //cm_SymLink //cm_UniversalSingleDirectSort //cm_ViewHistory //cm_ViewHistoryNext //cm_ViewHistoryPrev //cm_ViewLogFile //cm_Wipe //cm_WorkWithDirectoryHotlist var wcFakeWndClass: TWndClassEx; //hMainWindow, {$IFDEF DEBUG} hFakeWindow: HWND; {$ENDIF} TCIconSize: integer = 32; TCNumberOfInstance: integer; TCListOfCreatedTCIconFilename: TStringList; { WindowProc } function WindowProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin { Resend message to DoubleCommander main window. Disabled currently, because it may interfere with LCL, especially since the fake TotalCmd window is also a main app window (WS_OVERLAPPEDWINDOW). May be enabled in future if any plugins need this, but following messages should be skipped because they are known to cause conflict: - WM_ACTIVATEAPP Confuses LCL about which main form (window) is currently active and it stops calling OnExit events for controls (see TWinControl.WMKillFocus). } //SendMessage(hMainWindow, uiMsg, wParam, lParam); {$IF (lcl_fullversion >= 1020000)} if (uiMsg = WM_DEVICECHANGE) and (wParam = DBT_DEVNODES_CHANGED) and (lParam = 0) then begin Screen.UpdateMonitors; // Refresh monitor list DCDebug('WM_DEVICECHANGE:DBT_DEVNODES_CHANGED'); end; {$ENDIF} {$IFDEF DEBUG} WriteLn(uiMsg); {$ENDIF} Result := DefWindowProc(hWnd, uiMsg, wParam, lParam); end; { CreateTotalCommanderWindow } procedure CreateTotalCommanderWindow(hWindow: HWND); begin // hMainWindow:= hWindow; FillByte(wcFakeWndClass, SizeOf(wcFakeWndClass), 0); wcFakeWndClass.cbSize := SizeOf(wcFakeWndClass); wcFakeWndClass.Style := CS_HREDRAW or CS_VREDRAW; wcFakeWndClass.lpfnWndProc := @WindowProc; wcFakeWndClass.hInstance := hInstance; wcFakeWndClass.hbrBackground := Color_BtnFace + 12; wcFakeWndClass.lpszMenuName := nil; wcFakeWndClass.lpszClassName := 'TTOTAL_CMD'; RegisterClassEx(wcFakeWndClass); // Create Total Commander fake window {$IFDEF DEBUG} hFakeWindow := {$ENDIF} CreateWindowEx(0, 'TTOTAL_CMD', 'Double Commander', WS_OVERLAPPEDWINDOW, 100, 100, 300, 300, 0, 0, hInstance, nil); {$IFDEF DEBUG} // Show window (for debugging only) ShowWindow(hFakeWindow, SW_SHOW); {$ENDIF} end; // Test have been made with string from site http://stackoverflow.com/questions/478201/how-to-test-an-application-for-correct-encoding-e-g-utf-8 // Note: If you ever "think" to change or modify this routine, make sure to test the following: // 1o) Make a directory with utf-8 special characters, a path like this: "Card-♠♣♥♦" // 2o) Then, go with TC and add it as a favorite. // 3o) Then, exit it to make sure it is saved in its wndcmd.ini file // 4o) Then, go in the hotlist of DC and do an import from TC file // 5o) Make sure the path you've created has really been imported and it's NOT written "cd Card-♠♣♥♦\" or things like that. // 6o) Make sure you can also GO TO this folder from the popup menu of hotlist. // 7o) After that, repeat the step one through six with a path called "français", or "Esta frase está en español" and really take the time to do it. // 8o) Really take the time to do step 7 with the suggested two folder mentionned here. // In its "wincmd", TC is using AnsiString for character that don't need UTF-8 string. // He add the identifier "AnsiChar($EF) + AnsiChar($BB) + AnsiChar($BF)" at the beginning of each value that requires that the following needs to be interpret as UTF8 string. // So we cannot systematically convert the string. Some are using code between 128 and 255 that needs to be interpert as what it was in ANSI. // ALSO, lettings the $EF $BB $BF in the "string" make the string to be displayble "normally" in Lazarus, yes... // ...but when it's time to do things like "pos(...", "copy(...", the $EF $BB $BF are there, taken into acocunt, even when doing a print of the string we don't see see them! // Anyway. If you ever modify the following thinking it shouldn't be like this or there is a better way or whatever, please, take the time to do the test written after your modifications function ConvertTCStringToString(TCString: ansistring): string; begin Result := TCString; if length(Result) >= 3 then begin if ((TCString[1] = AnsiChar($EF)) and (TCString[2] = AnsiChar($BB)) and (TCString[3] = AnsiChar($BF))) then begin Result := copy(Result, 4, (length(Result) - 3)); end else begin Result := CeAnsiToUtf8(Result); end; end; end; // TC is adding the "$EF $BB $BF" identifier if the string stored in its config file require to be interpret in uniccode. // Adding it systematically, like we already tried before, doesn't work in 100% of the situation. // For example, for raison that can't explain without its source code, if a toolbar filename is express with the "$EF $BB $BF" in the name, // it will "basically work", but if it is defined to be shown as a drop menu, the little down triangle won't be shown in TC!!! // So let's add the "$EF $BB $BF" only when it required. function ConvertStringToTCString(sString: string): ansistring; begin if CeUtf8ToAnsi(sString) = sString then Result := sString else Result := AnsiChar($EF) + AnsiChar($BB) + AnsiChar($BF) + sString; end; { ReplaceDCEnvVars } // Routine to replace %VARIABLE% of DC path by the actual absolute path // This is useful when we "export" to TC related path to place them in absolute format this way TC refer them correctly after export. function ReplaceDCEnvVars(const sText: string): string; begin Result := StringReplace(sText, '%DC_CONFIG_PATH%', ExcludeTrailingPathDelimiter(gpCfgDir), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_PATH%', ExcludeTrailingPathDelimiter(ExtractFilePath(gpExePath)), [rfIgnoreCase]); end; { ReplaceTCEnvVars } // Routine to replace %VARIABLE% of TC path by the actual absolute path // This is useful when we "import" TC related path to place them in absolute format this way DC refer them correctly after import. function ReplaceTCEnvVars(const sText: string): string; begin Result := StringReplace(sText, '%COMMANDER_INI%', gTotalCommanderConfigFilename, [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_PATH%', ExcludeTrailingPathDelimiter(ExtractFilePath(gTotalCommanderExecutableFilename)), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_EXE%', ExcludeTrailingPathDelimiter(ExtractFilePath(gTotalCommanderExecutableFilename)), [rfIgnoreCase]); Result := StringReplace(Result, '%COMMANDER_DRIVE%', ExcludeTrailingPathDelimiter(ExtractFileDrive(gTotalCommanderExecutableFilename)), [rfIgnoreCase]); if utf8pos(UTF8UpperCase('wcmicons.dll'), UTF8UpperCase(Result)) = 1 then Result := StringReplace(Result, 'wcmicons.dll', ExtractFilePath(gTotalCommanderExecutableFilename) + 'wcmicons.dll', [rfIgnoreCase]); end; { GetTotalCommandeMainBarFilename } // We'll return the TC main bar filename. // At the same time, since we're in the config file, we'll determine the icon size for the button bar. function GetTotalCommandeMainBarFilename: string; var TCMainConfigFile: TIniFileEx; begin Result := ''; if mbFileExists(gTotalCommanderConfigFilename) then begin TCMainConfigFile := TIniFileEx.Create(gTotalCommanderConfigFilename); try Result := ReplaceTCEnvVars(ConvertTCStringToString(TCMainConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_MAINBAR_NOTPRESENT))); //While we're there, we'll get the button height. TCIconSize := TCMainConfigFile.ReadInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONHEIGHT, 32 + 5); TCIconSize := TCIconSize - 5; //Yeah... A magic -5... finally TCMainConfigFile.Free; end; //If the toolbar section is not present, TC attempts to load "DEFAULT.bar" from application path. //Let's see if there is such file there. if Result = TCCONFIG_MAINBAR_NOTPRESENT then begin if mbFileExists(IncludeTrailingPathDelimiter(ExtractFilePath(gTotalCommanderExecutableFilename)) + 'DEFAULT.bar') then Result := IncludeTrailingPathDelimiter(ExtractFilePath(gTotalCommanderExecutableFilename)) + 'DEFAULT.bar'; end; end; end; { EnumTaskWindowsProc } // Routine used for the following "IsTotalCommanderSeemsRunning" routine. function EnumTaskWindowsProc(Wnd: THandle; List{%H-}: TStrings): boolean; stdcall; var ClassName: PChar; begin ClassName := Stralloc(100); GetClassName(Wnd, ClassName, 99); if ClassName = 'TTOTAL_CMD' then Inc(TCNumberOfInstance); Result := True; strDispose(ClassName); end; { IsTotalCommanderSeemsRunning } // Routine that we'll return TRUE if TC is currently running and false otherwise function IsTotalCommanderSeemsRunning: boolean; begin TCNumberOfInstance := 0; try EnumWindows(@EnumTaskWindowsProc, 0); finally end; Result := (TCNumberOfInstance > 1); end; { areTCRelatedPathsAndFilesDetected } //To consider to be cumfortable to work with TC related stuff we need to make sure: //1o) We know where is the TC executable //2o) We know where is the TC config file //3o) We know where where is the file for the TC main toolbar //4o) We know where the toolbar and associted icon COULD be stored (util when exporting the DC toolbar) function areTCRelatedPathsAndFilesDetected: boolean; begin Result := False; if mbFileExists(gTotalCommanderExecutableFilename) then begin if mbFileExists(gTotalCommanderConfigFilename) then begin sTotalCommanderMainbarFilename := GetTotalCommandeMainBarFilename; if mbFileExists(sTotalCommanderMainbarFilename) then begin if mbDirectoryExists(ExcludeTrailingPathDelimiter(gTotalCommanderToolbarPath)) then begin Result := True; end else begin MsgError(Format(rsMsgTCToolbarNotFound, [gTotalCommanderToolbarPath])); end; end else begin MsgError(Format(rsImportToolbarProblem, [sTotalCommanderMainbarFilename])); end; end else begin MsgError(Format(rsMsgTCConfigNotFound, [gTotalCommanderConfigFilename])); end; end else begin MsgError(Format(rsMsgTCExecutableNotFound, [gTotalCommanderExecutableFilename])); end; if not Result then BringUsToTCConfigurationPage; end; { areWeInSituationToPlayWithTCFiles } function areWeInSituationToPlayWithTCFiles: boolean; var FlagCancelWaitingTCClose: TMyMsgResult; FlagTCIsRunning: boolean; begin Result := False; if areTCRelatedPathsAndFilesDetected then begin repeat FlagTCIsRunning := IsTotalCommanderSeemsRunning; if FlagTCIsRunning then FlagCancelWaitingTCClose := MsgBox(rsMsgTCisRunning, [msmbOk, msmbCancel], msmbOk, msmbCancel); until (FlagTCIsRunning = False) or (FlagCancelWaitingTCClose = mmrCancel); Result := not FlagTCIsRunning; end; end; { GetTCEquivalentCommandToDCCommand } // From the given DC command, we'll return the equivalent TC command. // If not found, we'll return the same DC command, at least. function GetTCEquivalentCommandToDCCommand(DCCommand: string; var TCIndexOfCommand: integer): string; var SearchingIndex: integer = 1; begin Result := ''; TCIndexOfCommand := -1; if DCCommand <> '' then begin DCCommand := UTF8LowerCase(DCCommand); //Let's see if we have an equivalent TC for our DC command. while (SearchingIndex <= NUMBEROFCOMMANDS) and (TCIndexOfCommand = -1) do begin if DCCommand = UTF8LowerCase(COMMANDS_LIST_TC[SearchingIndex].DCCommand) then begin Result := COMMANDS_LIST_TC[SearchingIndex].TCCommand; TCIndexOfCommand := SearchingIndex; end else begin Inc(SearchingIndex); end; end; if TCIndexOfCommand = -1 then Result := DCCommand; end; end; { GetTCIconFromDCIconAndCreateIfNecessary } // Will return the string to use for the icon for the tool bar button when doing an export to TC bar file. // Will also create a .ICO file if we know the fiel can't be load by TC. // Basically routine generate the same bitmap as what DC would generate to show. // Then, we look from where it's coming from with "fromWhatItWasLoaded)". // Depending of this, will simply return the same filename OR will create and icon for TC. // This has been test with: // fwbwlNotLoaded: NOT TESTED // fwbwlIconThemeBitmap: Tested with 'cm_configdirhotlist', 'cm_dirhotlist', 'utilities-terminal', 'cm_markunmarkall', 'go-previous', 'go-next' // fwbwlResourceFileExtracted: Tested with 'wcmicons.dll,3', 'MyOwnIcons.icl,12', 'doublecmd.exe', 'TOTALCMD64.EXE', 'HWorks32.exe' // fwbwlGraphicFile: Test with 'UploadDispatcher.ico', 'Carlos.bmp' // fwbwlGraphicFile switched to fwbwlGraphicFileNotSupportedByTC: Tested with 'Nop.png', 'cm_extractfiles.png', 'cm_about.png', a corrutped .png file // fwbwlFileIconByExtension: Tested with 'ElementaryOS-32bits.vbox', 'backupsource.bat', 'Microsoft Word 2010.lnk', a corrupted .bmp file since DC at least attenmpt to by the extension which is nice! // fwbwlFiDefaultIconID: Tested with "a missing unknown extension file", An empty icon string, function GetTCIconFromDCIconAndCreateIfNecessary(const DCIcon: string): string; var LocalBitmap: Graphics.TBitmap = nil; fromWhatItWasLoaded: TfromWhatBitmapWasLoaded; LocalIcon: Graphics.TIcon = nil; Suffix: string; needToBeConvertToIco: boolean = False; begin Result := DCIcon; //In any case, by default at least, return the same thing as what we got in DC and good luck TC! //Get the bitmap of the icon and make sure to get "fromWhatItWasLoaded" to see from where it came from LocalBitmap := PixmapManager.LoadBitmapEnhanced(DCICon, TCIconSize, True, clBtnFace, @fromWhatItWasLoaded); try if ExtractFileExt(UTF8Lowercase(DCIcon)) = '.png' then fromWhatItWasLoaded := fwbwlGraphicFileNotSupportedByTC; case fromWhatItWasLoaded of fwbwlNotLoaded: needToBeConvertToIco := False; fwbwlIconThemeBitmap: needToBeConvertToIco := True; fwbwlResourceFileExtracted: needToBeConvertToIco := False; fwbwlGraphicFile: needToBeConvertToIco := False; fwbwlGraphicFileNotSupportedByTC: needToBeConvertToIco := True; fwbwlFileIconByExtension: needToBeConvertToIco := True; fwbwlFiDefaultIconID: needToBeConvertToIco := True; end; // If TC can't load the file, let's generate a .ICO file for it. // We use a .ICO so we can passed at least something with transparency. if needToBeConvertToIco then begin Result := RemoveFileExt(ExtractFilename(DCIcon)); if Result = '' then Result := 'empty'; Result := gTotalCommanderToolbarPath + PathDelim + Result; //Make sure to use a filename not already generated. Suffix := ''; while TCListOfCreatedTCIconFilename.IndexOf(Result + Suffix + '.ico') <> -1 do Suffix := IntToStr(StrToIntDef(Suffix, 0) + 1); Result := Result + Suffix + '.ico'; //.ICO conversion. LocalIcon := Graphics.TIcon.Create; try LocalIcon.Assign(LocalBitmap); LocalIcon.SaveToFile(Result); TCListOfCreatedTCIconFilename.Add(Result); finally LocalIcon.Free; end; end; finally LocalBitmap.Free; end; end; { GetTCEquivalentCommandIconToDCCommandIcon } // Different from the previous "GetTCIconFromDCIconAndCreateIfNecessary" routine because it concerns "commands". // If TC has an icon in its "wcmicons.dll" file for the command, we'll use it. // If not, we'll save a .ICO for it, no matter where it is comming from. function GetTCEquivalentCommandIconToDCCommandIcon(DCIcon: string; TCIndexOfCommand: integer): string; begin Result := ''; if TCIndexOfCommand <> -1 then begin if COMMANDS_LIST_TC[TCIndexOfCommand].TCIcon <> -1 then Result := 'wcmicons.dll,' + IntToStr(COMMANDS_LIST_TC[TCIndexOfCommand].TCIcon); end; if Result = '' then Result := GetTCIconFromDCIconAndCreateIfNecessary(DCIcon); end; { GetDCEquivalentCommandToTCCommand } // From the given TC command, we'll return the equivalent DC command. function GetDCEquivalentCommandToTCCommand(TCCommand: string; var TCIndexOfCommand: integer): string; begin Result := 'nil'; TCIndexOfCommand := 1; if TCCommand <> '' then begin TCCommand := UTF8LowerCase(TCCommand); //Let's see if we have an equivalent DC for the TC command. while (TCIndexOfCommand <= NUMBEROFCOMMANDS) and (Result = 'nil') do begin if TCCommand = UTF8LowerCase(COMMANDS_LIST_TC[TCIndexOfCommand].TCCommand) then Result := COMMANDS_LIST_TC[TCIndexOfCommand].DCCommand else Inc(TCIndexOfCommand); end; end; if (Result = '') or (Result = 'nil') then begin TCIndexOfCommand := -1; Result := TCCommand; end; end; { ExportDCToolbarsToTC } procedure ExportDCToolbarsToTC(Toolbar: TKASToolbar; Barfilename: string; FlushExistingContent, FlagNeedToUpdateConfigIni: boolean); var TargetBarFilenamePrefix: string; TCToolBarIndex: integer; ExportationDateTime: TDateTime; procedure PossiblyRecursiveAddThisToolItemToConfigFile(ToolItem: TKASToolItem; TCBarConfigFile: TIniFileEx; TCIndexButton: integer); var sTCIndexButton: string; TCIndexOfCommand: integer = -1; IndexItem: integer; TCCommand, TCIcon: string; InnerTCBarConfigFilename: string; InnerTCBarConfigFile: TIniFileEx; begin sTCIndexButton := IntToStr(TCIndexButton); if ToolItem is TKASSeparatorItem then begin TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ''); TCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_ICONIC_PREFIX + sTCIndexButton, 0); end; if ToolItem is TKASCommandItem then begin TCCommand := GetTCEquivalentCommandToDCCommand(TKASCommandItem(ToolItem).Command, TCIndexOfCommand); TCIcon := GetTCEquivalentCommandIconToDCCommandIcon(TKASCommandItem(ToolItem).Icon, TCIndexOfCommand); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(TCCommand)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(TCIcon)); if (TKASCommandItem(ToolItem).Hint <> '') and (TCIndexOfCommand = -1) then //We'll write the hint *only* if command is not a recognized Total Commander command. TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASCommandItem(ToolItem).Hint)); end; if ToolItem is TKASProgramItem then begin TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(GetTCIconFromDCIconAndCreateIfNecessary(TKASProgramItem(ToolItem).Icon))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASProgramItem(ToolItem).Command))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_STARTINGPATH_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASProgramItem(ToolItem).StartPath))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASProgramItem(ToolItem).Hint)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_PARAM_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASProgramItem(ToolItem).Params)); end; if ToolItem is TKASMenuItem then begin InnerTCBarConfigFilename := TargetBarFilenamePrefix + '_SubBar' + Format('%2.2d', [TCToolBarIndex]) + '_' + GetDateTimeInStrEZSortable(ExportationDateTime) + '.BAR'; Inc(TCToolBarIndex); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + sTCIndexButton, ConvertStringToTCString(InnerTCBarConfigFilename)); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + sTCIndexButton, ConvertStringToTCString(mbExpandFileName(TKASMenuItem(ToolItem).Icon))); TCBarConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + sTCIndexButton, ConvertStringToTCString(TKASMenuItem(ToolItem).Hint)); TCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_ICONIC_PREFIX + sTCIndexButton, 1); //Now we have to create the TC toolbar file to store the coming subbar. InnerTCBarConfigFile := TIniFileEx.Create(InnerTCBarConfigFilename, fmOpenWrite); try for IndexItem := 0 to pred(TKASMenuItem(ToolItem).SubItems.Count) do PossiblyRecursiveAddThisToolItemToConfigFile(TKASMenuItem(ToolItem).SubItems[IndexItem], InnerTCBarConfigFile, (IndexItem + 1)); //*AFTER* all the buttons have been added, let's update for TC the number of buttons now present. InnerTCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, TKASMenuItem(ToolItem).SubItems.Count); InnerTCBarConfigFile.UpdateFile; finally InnerTCBarConfigFile.Free; end; end; end; var //Placed intentionnally *AFTER* above routine to make sure these variable names are not used in above possibly recursive routines. TCMainConfigFile, MainTCBarConfigFile: TIniFileEx; IndexButton, TCMainIndexButton: integer; begin ExportationDateTime := now; TargetBarFilenamePrefix := IncludeTrailingPathDelimiter(gTotalCommanderToolbarPath) + rsFilenameExportedTCBarPrefix; TCToolBarIndex := 1; TCListOfCreatedTCIconFilename := TStringList.Create; TCListOfCreatedTCIconFilename.Sorted := True; TCListOfCreatedTCIconFilename.Clear; try //Let's create/append the .BAR file(s)! MainTCBarConfigFile := TIniFileEx.Create(Barfilename, fmOpenReadWrite); try if FlushExistingContent then begin MainTCBarConfigFile.EraseSection(TCCONFIG_BUTTONBAR_SECTION); TCMainIndexButton := 0; end else begin TCMainIndexButton := MainTCBarConfigFile.ReadInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, 0); end; //Let's add the DC toolbar to the TC .BAR file. for IndexButton := 0 to pred(Toolbar.ButtonCount) do begin Inc(TCMainIndexButton); PossiblyRecursiveAddThisToolItemToConfigFile(Toolbar.Buttons[IndexButton].ToolItem, MainTCBarConfigFile, TCMainIndexButton); end; //*AFTER* all the buttons have been added, let's update for TC the number of buttons now present. MainTCBarConfigFile.WriteInteger(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_COUNT, TCMainIndexButton); MainTCBarConfigFile.UpdateFile; finally MainTCBarConfigFile.Free; end; finally TCListOfCreatedTCIconFilename.Free; end; //If we've been asked to play in the Wincmd.ini file, let's make sure to save the main bar filename. if FlagNeedToUpdateConfigIni then begin TCMainConfigFile := TIniFileEx.Create(gTotalCommanderConfigFilename, fmOpenReadWrite); try //2014-11-27:It looks like, will with TC 8.50B12, the main bar file cannot have unicode in the name??? //It "basically" works but have some annoying problem from here to thre. //So intentionnally, we don't use "ConvertStringToTCString(SaveDialog.Filename)" TCMainConfigFile.WriteString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTONBAR_SECTION, ansistring(Barfilename)); TCMainConfigFile.UpdateFile; finally TCMainConfigFile.Free; end; end; end; { ImportTCToolbarsToDC } // Will import the TC toolbar file named "Barfilename" into either: // -a TKASToolbar referenced by "Toolbar" (when "WhereToImport"=IMPORT_TO_BAR) // -a subtoolbar of a "TKASToolItem" referenced by "UpperToolItem" (when "WhereToImport"=IMPORT_TO_ITEM) // If the TC toolbar have buttons pointing other TC toolbar file, the routine will import them as well // and organize something similar in the tree structure of subtoolbar DC is using. // Obviously to avoid keeps cycling in round if "Toolbar A points toolbar B and toolbar B points toolbar A", // this import routine will not re-importe a toolbar already imported. procedure ImportTCToolbarsToDC(Barfilename: string; UpperToolItem: TKASToolItem; Toolbar: TKASToolbar; WhereToImport: integer; FCurrentButton: TKASToolButton; FFormCommands: IFormCommands); const IMPORT_TO_BAR = 0; IMPORT_TO_ITEM = 1; var TCToolbarFilenameList: TStringList; //To hold the TC toolbarfile already imported to don't re-import more than once a toolbar file already imported. TCIndexOfCommand: integer; procedure RecursiveIncorporateTCBarfile(Barfilename: string; UpperToolItem: TKASToolItem; Toolbar: TKASToolbar; WhereToImport: integer); var TCBarConfigFile: TIniFileEx; IndexButton: integer; sButtonName, sCmdName, sHintName, sParamValue, sStartingPath: string; SubToolItem: TKASToolItem = nil; procedure AddToolItem; begin case WhereToImport of IMPORT_TO_BAR: FCurrentButton := ToolBar.AddButton(SubToolItem); IMPORT_TO_ITEM: TKASMenuItem(UpperToolItem).SubItems.Add(SubToolItem); end; end; begin if mbFileExists(Barfilename) then begin TCBarConfigFile := TIniFileEx.Create(Barfilename); try IndexButton := 1; repeat sButtonName := ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_BUTTON_PREFIX + IntToStr(IndexButton), TCCONFIG_MAINBAR_NOTPRESENT)); if sButtonName <> TCCONFIG_MAINBAR_NOTPRESENT then begin if sButtonName = '' then begin //We have a separator bar! SubToolItem := TKASSeparatorItem.Create; AddToolItem; end else begin sButtonName := ReplaceTCEnvVars(sButtonName); sCmdName := TrimQuotes(ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_CMD_PREFIX + IntToStr(IndexButton), 'cmd_notimplement')))); sParamValue := ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_PARAM_PREFIX + IntToStr(IndexButton), ''))); sStartingPath := TrimQuotes(ReplaceTCEnvVars(ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_STARTINGPATH_PREFIX + IntToStr(IndexButton), '')))); sHintName := ConvertTCStringToString(TCBarConfigFile.ReadString(TCCONFIG_BUTTONBAR_SECTION, TCCONFIG_HINT_PREFIX + IntToStr(IndexButton), '')); if pos('cm_', UTF8LowerCase(sCmdName)) = 1 then begin //We have an internal command! sCmdName := GetDCEquivalentCommandToTCCommand(sCmdName, TCIndexOfCommand); SubToolItem := TKASCommandItem.Create(FFormCommands); TKASCommandItem(SubToolItem).Command := sCmdName; if sHintName <> '' then TKASCommandItem(SubToolItem).Hint := sHintName else TKASCommandItem(SubToolItem).Hint := FFormCommands.GetCommandCaption(sCmdName, cctLong); if TCIndexOfCommand = -1 then TKASCommandItem(SubToolItem).Icon := sButtonName else TKASCommandItem(SubToolItem).Icon := UTF8LowerCase(TKASCommandItem(SubToolItem).Command); AddToolItem; end else begin if UTF8UpperCase(ExtractFileExt(sCmdName)) = '.BAR' then begin //Since with TC we could have toolbar recursively pointing themselves, we need to make sure we'll not get lost cycling throught the same ones over and over. if TCToolbarFilenameList.IndexOf(UTF8UpperCase(sCmdName)) = -1 then begin //We have a subtoolbar! TCToolbarFilenameList.Add(UTF8UpperCase(sCmdName)); SubToolItem := TKASMenuItem.Create; TKASMenuItem(SubToolItem).Icon := sButtonName; if sHintName <> '' then TKASMenuItem(SubToolItem).Hint := sHintName else TKASMenuItem(SubToolItem).Hint := 'Sub menu'; AddToolItem; RecursiveIncorporateTCBarfile(sCmdName, SubToolItem, nil, IMPORT_TO_ITEM); end; end else begin //We have a "Program Item" SubToolItem := TKASProgramItem.Create; TKASProgramItem(SubToolItem).Icon := sButtonName; TKASProgramItem(SubToolItem).Command := sCmdName; TKASProgramItem(SubToolItem).Params := sParamValue; TKASProgramItem(SubToolItem).StartPath := sStartingPath; if sHintName <> '' then TKASProgramItem(SubToolItem).Hint := sHintName else TKASProgramItem(SubToolItem).Hint := 'Program'; AddToolItem; end; end; end; end; Inc(IndexButton); until sButtonName = TCCONFIG_MAINBAR_NOTPRESENT; finally TCBarConfigFile.Free; end; end; end; begin TCToolbarFilenameList := TStringList.Create; try RecursiveIncorporateTCBarfile(Barfilename, UpperToolItem, Toolbar, WhereToImport); finally TCToolbarFilenameList.Free; end; end; end. �����������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/uicofiles.pas������������������������������������������������������0000644�0001750�0000144�00000063326�11766020706�020433� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright (C) - .selfip.com // , // , . // "" , // , , // , png, , alpha-, // 32 true color . // // , , // // , http://janych.selfip.com/examples/Delphi/Icons/ // ********************************************************************************************* // Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) // Add some changes for compiling under FPC/Lazarus // Add function CreateIconFromHandle unit uIcoFiles; {$mode delphi} interface uses Classes,Graphics,Windows, JwaWinGDI; {$ASSERTIONS ON} const rc3_StockIcon = 0; rc3_Icon = 1; rc3_Cursor = 2; { currentlly defined blend function } AC_SRC_OVER = $00; AC_SRC_ALPHA = $01; type TCursorOrIcon = packed record Reserved: Word; wType: Word; Count: Word; end; TIconRec = packed record // Graphics Width: Byte; Height: Byte; Colors: Word; Reserved1: Word; Reserved2: Word; DIBSize: Longint; DIBOffset: Longint; end; TBits = array of Byte; TIconData = packed record // Info: TIconRec; // BitmapInfo, // , MaskBitmapInfo: PBitmapInfo; // - , needMaskBitmapInfo ImageLineWidth, // IsValidAlpha ConvertToPNG MaskLineWidth: Integer; // ConvertToPNG ImageBits: TBits; // MaskBits: TBits; // iRgbTable: integer; // , BitmapInfo end; TIcons = array of TIconData; // "" type TIcoFile = class(TComponent) private FIcons: TIcons; public destructor Destroy;override; procedure loadFromStream(Stream:TStream); procedure loadFromHandle(h:hicon); procedure saveTrueColorFrom32(icoNo:integer;out IconData:TIconData); procedure saveToStream(Stream:TStream); procedure check; procedure draw(icoNo,x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean);overload; procedure draw(IconData:TIconData;x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean);overload; function IsValidAlpha(icoNo:integer): boolean; // , - property Icons: TIcons read FIcons write FIcons; { procedure ConvertToPNG(icoNo:integer;Stream:TStream); procedure saveAsPng(icoNo:integer;fn:string); } procedure Add(IconData:TIconData); procedure AddCopy(IconData:TIconData); procedure DestroyIconData(IconData: TIconData); end; function getIconHandleForFile(fn:string;large:boolean): hicon; function CreateIconFromHandle(IconHandle : HIcon) : TIcon; implementation uses sysUtils, ShellAPI; // getIconHandleForFile //pngimage; // ConvertToPNG/saveAsPng, , type TRGBQuadArray = array[byte] of TRGBQuad; PRGBQuadArray = ^TRGBQuadArray; function BytesPerScanline(PixelsPerScanline, BitsPerPixel, Alignment: Longint): Longint; begin Dec(Alignment); Result := ((PixelsPerScanline * BitsPerPixel) + Alignment) and not Alignment; Result := Result div 8; end; { TIcoFile } destructor TIcoFile.Destroy; var i: integer; begin if Length(FIcons) > 0 then for i:=low(FIcons) to high(FIcons) do DestroyIconData(FIcons[i]); inherited; end; procedure TIcoFile.loadFromStream(Stream:TStream); var FileHeader: TCursorOrIcon; i,Size: integer; begin Stream.ReadBuffer(FileHeader,SizeOf(FileHeader)); // if (FileHeader.Reserved<>0) or not (FileHeader.wType in [RC3_ICON,RC3_CURSOR]) then raise Exception.Create('Invalid icon'); SetLength(FIcons,FileHeader.Count); // . Stream 1 for i:=0 to FileHeader.Count-1 do // - with FIcons[i] do Stream.ReadBuffer(Info,SizeOf(TIconRec)); for i:=0 to FileHeader.Count-1 do begin with FIcons[i] do begin Stream.Position := Info.DIBOffset; getMem(BitmapInfo,SizeOf(BitmapInfo^.bmiHeader)); Stream.ReadBuffer(BitmapInfo^.bmiHeader,SizeOf(BitmapInfo^.bmiHeader)); // with BitmapInfo^.bmiHeader do begin if biBitCount > 16 then iRgbTable := 0 else if (biBitCount < 16) then iRgbTable := (1 shl biBitCount)*sizeof(RGBQUAD) else Assert(false); // end; BitmapInfo := ReallocMemory(BitmapInfo,sizeof(BITMAPINFOHEADER)+iRgbTable); if iRgbTable <> 0 then Stream.ReadBuffer(BitmapInfo^.bmiColors,iRgbTable); with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := (biHeight div 2)*ImageLineWidth; // SetLength(ImageBits,Size); // Stream.ReadBuffer(ImageBits[0],Size); // MaskLineWidth := BytesPerScanline(biWidth,1,32); Size := (biHeight div 2)*MaskLineWidth; // (1-) Assert((biWidth+31) div 32*4*(biHeight div 2) = Size); end; SetLength(MaskBits,Size); Stream.ReadBuffer(MaskBits[0],Size); // end; end; end; function InternalGetDIB(Bitmap:HBITMAP;out iRgbTable:integer;out BitmapInfo:PBitmapInfo;var Bits:TBits): Boolean; var DC: HDC; DS: TDIBSection; Bytes: Integer; begin iRgbTable := 0; getMem(BitmapInfo,SizeOf(TBitmapInfo.bmiHeader)); try FillChar(BitmapInfo^.bmiHeader,sizeof(TBitmapInfo.bmiHeader),0); with BitmapInfo^ do begin DS.dsbmih.biSize := 0; Bytes := GetObject(Bitmap,SizeOf(DS),@DS); Assert(Bytes<>0); if (Bytes>=(sizeof(DS.dsbm)+sizeof(DS.dsbmih))) and (DS.dsbmih.biSize>=DWORD(sizeof(DS.dsbmih))) then bmiHeader := DS.dsbmih else begin bmiHeader.biSize := SizeOf(bmiHeader); bmiHeader.biWidth := DS.dsbm.bmWidth; bmiHeader.biHeight := DS.dsbm.bmHeight; bmiHeader.biBitCount := DS.dsbm.bmBitsPixel; bmiHeader.biPlanes := DS.dsbm.bmPlanes; end; if bmiHeader.biClrImportant > bmiHeader.biClrUsed then bmiHeader.biClrImportant := bmiHeader.biClrUsed; if bmiHeader.biSizeImage = 0 then bmiHeader.biSizeImage := BytesPerScanLine(bmiHeader.biWidth,bmiHeader.biBitCount,32)*Abs(bmiHeader.biHeight); Assert(bmiHeader.biCompression=0); if bmiHeader.biBitCount > 16 then iRgbTable := 0 else if bmiHeader.biClrUsed = 0 then iRgbTable := SizeOf(TRGBQuad)*(1 shl bmiHeader.biBitCount) else iRgbTable := SizeOf(TRGBQuad)*bmiHeader.biClrUsed; end; if iRgbTable > 0 then BitmapInfo := ReallocMemory(BitmapInfo,SizeOf(TBitmapInfoHeader)+iRgbTable); setLength(Bits,BitmapInfo^.bmiHeader.biSizeImage); DC := CreateCompatibleDC(0); try Result := GetDIBits(DC,Bitmap,0,BitmapInfo^.bmiHeader.biHeight,@Bits[0],BitmapInfo^,DIB_RGB_COLORS)<>0; finally DeleteDC(DC); end; except freeMem(BitmapInfo); BitmapInfo := nil; raise; end; end; procedure TIcoFile.loadFromHandle(h:hicon); var IconInfo: TIconInfo; Size: Cardinal; i: integer; begin if not GetIconInfo(h, IconInfo) then Exit; try try setLength(FIcons,length(FIcons)+1); with FIcons[high(FIcons)] do begin InternalGetDIB(IconInfo.hbmColor,iRgbTable,BitmapInfo,ImageBits); InternalGetDIB(IconInfo.hbmMask,i,MaskBitmapInfo,MaskBits); // MaskBitmapInfo , } with Info do begin Colors := 0; Width := BitmapInfo^.bmiHeader.biWidth; Height := BitmapInfo^.bmiHeader.biHeight; Reserved1 := MaskBitmapInfo^.bmiHeader.biBitCount; Reserved2 := BitmapInfo^.bmiHeader.biBitCount; DIBSize := MaskBitmapInfo^.bmiHeader.biSizeImage+DWORD(iRgbTable)+BitmapInfo^.bmiHeader.biSize+BitmapInfo^.bmiHeader.biSizeImage; DIBOffset := -1; // . end; with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := biHeight*ImageLineWidth; // Assert(Size=biSizeImage); biHeight := biHeight*2; // - end; with MaskBitmapInfo^.bmiHeader do begin MaskLineWidth := BytesPerScanline(biWidth,biBitCount,32); Assert((biWidth+31) div 32*4 = MaskLineWidth); // Size := biHeight*MaskLineWidth; // (1-) Assert(Size=biSizeImage); end; end; except setLength(FIcons,length(FIcons)-1); end; finally DeleteObject(IconInfo.hbmColor); DeleteObject(IconInfo.hbmMask); end; end; procedure TIcoFile.saveTrueColorFrom32(icoNo:integer;out IconData:TIconData); var useAlpha: boolean; Bitmap1,Bitmap2: Graphics.TBitmap; Size: integer; procedure setNewBitmap(h:HBITMAP); begin with IconData do begin if BitmapInfo <> nil then begin freeMem(BitmapInfo); BitmapInfo := nil; end; InternalGetDIB(h,iRgbTable,BitmapInfo,ImageBits); Assert(BitmapInfo <> nil); with Info do begin Colors := 0; Width := BitmapInfo^.bmiHeader.biWidth; Height := BitmapInfo^.bmiHeader.biHeight; Reserved1 := MaskBitmapInfo^.bmiHeader.biBitCount; Reserved2 := BitmapInfo^.bmiHeader.biBitCount; DIBSize := MaskBitmapInfo^.bmiHeader.biSizeImage+DWORD(iRgbTable)+BitmapInfo^.bmiHeader.biSize+BitmapInfo^.bmiHeader.biSizeImage; DIBOffset := -1; // . end; with BitmapInfo^.bmiHeader do begin ImageLineWidth := BytesPerScanline(biWidth,biBitCount,32); // Assert((biWidth*biBitCount+31) div 32*4 = ImageLineWidth); Size := biHeight*ImageLineWidth; // Assert(Size=biSizeImage); biHeight := biHeight*2; end; end; end; begin useAlpha := FIcons[icoNo].BitmapInfo.bmiHeader.biBitCount=32; if useAlpha then useAlpha := IsValidAlpha(icoNo); try IconData := FIcons[high(FIcons)]; Bitmap1 := Graphics.TBitmap.Create; Bitmap2 := Graphics.TBitmap.Create; try with IconData do begin MaskBits := copy(FIcons[high(FIcons)].MaskBits); getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); move(FIcons[high(FIcons)].MaskBitmapInfo^,MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); with MaskBitmapInfo^.bmiHeader do begin Assert(MaskLineWidth=BytesPerScanline(biWidth,biBitCount,32)); MaskLineWidth := BytesPerScanline(biWidth,biBitCount,32); Assert((biWidth+31) div 32*4 = MaskLineWidth); Size := biHeight*MaskLineWidth; Assert(Size=biSizeImage); end; BitmapInfo := nil; // , with FIcons[high(FIcons)] do begin Bitmap2.Width := Info.Width; Bitmap2.Height := Info.Height; Bitmap2.PixelFormat := pf24bit; if useAlpha then begin Bitmap1.Width := Info.Width; Bitmap1.Height := Info.Height; Bitmap1.PixelFormat := pf24bit; Bitmap1.Canvas.Brush.Color := clWhite; Bitmap1.Canvas.FillRect(Classes.Rect(0,0,Bitmap1.Width,Bitmap1.Height)); // Bitmap1 setNewBitmap(Bitmap1.Handle); Bitmap2.Canvas.Brush.Color := clWhite; Bitmap2.Canvas.FillRect(Classes.Rect(0,0,Bitmap2.Width,Bitmap2.Height)); draw(IconData,0,0,Bitmap2.Canvas.Handle,true,true,false); // - draw(IcoNo,0,0,Bitmap2.Canvas.Handle,true,true,useAlpha); end else begin // , Bitmap2.Canvas.Brush.Color := clBlack; Bitmap2.Canvas.FillRect(Classes.Rect(0,0,Bitmap2.Width,Bitmap2.Height)); draw(IcoNo,0,0,Bitmap2.Canvas.Handle,true,true,useAlpha); end; setNewBitmap(Bitmap2.Handle); end; end; finally Bitmap1.Free; Bitmap2.Free; end; except setLength(FIcons,length(FIcons)-1); end; end; procedure TIcoFile.saveToStream(Stream:TStream); var FileHeader: TCursorOrIcon; i: integer; offset: integer; begin FileHeader.Reserved := 0; FileHeader.wType := RC3_ICON; FileHeader.Count := length(FIcons); Stream.WriteBuffer(FileHeader,SizeOf(FileHeader)); offset := Stream.Position+length(FIcons)*SizeOf(TIconRec); // if Length(FIcons) > 0 then begin for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Info.DIBOffset := offset; Stream.WriteBuffer(Info,SizeOf(TIconRec)); offset := offset+SizeOf(BitmapInfo^.bmiHeader)+iRgbTable+length(ImageBits)+length(MaskBits); end; for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Stream.WriteBuffer(BitmapInfo^.bmiHeader,SizeOf(BitmapInfo^.bmiHeader)+iRgbTable); Stream.WriteBuffer(ImageBits[0],length(ImageBits)); Stream.WriteBuffer(MaskBits[0],length(MaskBits)); end; end; end; procedure TIcoFile.check; var i: integer; begin // , , . // , // . // " - ." if Length(FIcons) > 0 then for i:=low(FIcons) to high(FIcons) do with FIcons[i] do begin Assert((Info.Reserved1=0) = (Info.Reserved2=0)); // Assert((Info.Colors<>0) or (Info.Reserved1<>0)); Assert(Info.Reserved1 in [0,1]); with BitmapInfo^.bmiHeader do begin Assert(biSize=sizeOf(BitmapInfo^.bmiHeader)); Assert(Info.Width=biWidth); Assert(Info.Height*2=biHeight); Assert(biPlanes=1); Assert(Info.Reserved2 in [0,biBitCount]); Assert(biBitCount in [1,4,8,16,24,32]); Assert(biCompression=BI_RGB{=0}); Assert(biXPelsPerMeter=0); Assert(biYPelsPerMeter=0); end; end; end; procedure TIcoFile.draw(icoNo,x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean); begin draw(Icons[icoNo],x,y,dest,drawMask,drawImage,drawAlpha); end; procedure TIcoFile.draw(IconData:TIconData;x,y:integer;dest:hdc;drawMask,drawImage,drawAlpha:boolean); var h,hdcColor,hdcMask: hdc; pcolorBits: pointer; colorBitmap,hOldC,maskBitmap,hOldM: HBITMAP; pmaskBits: pointer; blend: BLENDFUNCTION; procedure needMaskBitmapInfo(var IconData:TIconData); begin with IconData do begin if MaskBitmapInfo <> nil then exit; // getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); FillChar(MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2,0); with MaskBitmapInfo^ do begin bmiHeader.biSize := sizeof(BITMAPINFOHEADER); bmiHeader.biWidth := BitmapInfo^.bmiHeader.biWidth; bmiHeader.biHeight := BitmapInfo^.bmiHeader.biHeight; bmiHeader.biPlanes := 1; bmiHeader.biBitCount := 1; bmiHeader.biSizeImage := length(MaskBits); bmiColors[0].rgbReserved := 0; bmiColors[0].rgbRed := 0; bmiColors[0].rgbBlue := 0; bmiColors[0].rgbGreen := 0; with PRGBQuadArray(@bmiColors)^[1] do begin rgbReserved := 0; rgbRed := 255; rgbBlue := 255; rgbGreen := 255; end; end; end; end; begin h := GetDC(0); pcolorBits := nil; colorBitmap := CreateDIBSection(h,IconData.BitmapInfo,DIB_RGB_COLORS,pcolorBits,0,0); hdcColor := CreateCompatibleDC(h); ReleaseDC(0,h); hOldC := SelectObject(hdcColor,colorBitmap); with IconData do begin if not drawAlpha then begin needMaskBitmapInfo(IconData); pmaskBits := nil; maskBitmap := CreateDIBSection(0,MaskBitmapInfo,DIB_RGB_COLORS,pmaskBits,0,0); hdcMask := CreateCompatibleDC(0); hOldM := SelectObject(hdcMask,maskBitmap); SetDIBitsToDevice(hdcMask,0,0,Info.Width,Info.Height,0,0,0,Info.Height,MaskBits,MaskBitmapInfo^,DIB_RGB_COLORS); if drawMask then BitBlt(dest,0,0,Info.Width,Info.Height,hdcMask,0,0,SRCAND); end else begin // hdcMask := 0; maskBitmap := 0; hOldM := 0; end; SetDIBitsToDevice(hdcColor,0,0,Info.Width,Info.Height,0,0,0,Info.Height,ImageBits,BitmapInfo^,DIB_RGB_COLORS); if drawImage then if not drawAlpha then BitBlt(dest,0,0,Info.Width,Info.Height,hdcColor,0,0,SRCINVERT) else begin // - blend.BlendOp := AC_SRC_OVER; blend.BlendFlags := 0; blend.SourceConstantAlpha := 255; blend.AlphaFormat := AC_SRC_ALPHA; AlphaBlend(dest,0,0,Info.Width,Info.Height,hdcColor,0,0,Info.Width,Info.Height,blend); end; end; // GDI , , . SelectObject(hdcColor,hOldC); if not drawAlpha then begin SelectObject(hdcMask,hOldM); DeleteObject(hdcMask); DeleteObject(maskBitmap); end; DeleteObject(hdcColor); DeleteObject(colorBitmap); end; function TIcoFile.IsValidAlpha(icoNo:integer): boolean; var X,Y: integer; Line32: PRGBQuadArray; begin with Icons[icoNo] do begin result := false; if BitmapInfo.bmiHeader.biBitCount <= 24 then exit; Result := true; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; for X:=0 to Info.Width-1 do // shGetFileInfo - if not Line32[X].rgbReserved=0 then exit; end; end; Result := false; end; function getIconHandleForFile(fn:string;large:boolean): hicon; var shfi: TShFileInfo; flag: integer; begin fillChar(shfi,SizeOf(TShFileInfo),0); if large then flag := SHGFI_LARGEICON else flag := SHGFI_SMALLICON; shGetFileInfo(pchar(fn),0,shfi,SizeOf(shfi),SHGFI_ICON or flag or SHGFI_SYSICONINDEX); Result := shfi.hIcon; end; function CreateIconFromHandle(IconHandle : HIcon) : TIcon; var I : Integer; IconData : TIconData; IcoFile : TIcoFile = nil; TempStream : TMemoryStream = nil; ColorDepth : Integer = 32; ActiveWindow: HWND; DeviceContext: HDC; begin Result := TIcon.Create; ActiveWindow := GetActiveWindow; DeviceContext := GetDC(ActiveWindow); // Get display color depth if (DeviceContext <> 0) then begin ColorDepth := GetDeviceCaps(DeviceContext, BITSPIXEL); ReleaseDC(ActiveWindow, DeviceContext); end; // Alpha channel can be used only with 24-32 bit color depth // otherwise use standard method to get icon from handle // because our method don't work in this case if (ColorDepth < 24) then Result.Handle:= IconHandle else begin IcoFile := TIcoFile.Create(nil); TempStream := TMemoryStream.Create; try IcoFile.loadFromHandle(IconHandle); if Length(IcoFile.Icons) = 0 then Result.Handle:= IconHandle else begin for I := Low(IcoFile.Icons) to High(IcoFile.Icons) do begin // If icon has invalid alpha channel // then display it as 24 bit icon if not IcoFile.IsValidAlpha(I) then begin IcoFile.saveTrueColorFrom32(I, IconData); IcoFile.DestroyIconData(IcoFile.Icons[I]); IcoFile.Icons[I] := IconData; end; end; IcoFile.saveToStream(TempStream); TempStream.Seek(0, soBeginning); Result.LoadFromStream(TempStream); end; finally FreeAndNil(IcoFile); FreeAndNil(TempStream); end; end; end; { type TChunkIHDRHack = class(TChunkIHDR); procedure Convert(const PNG:TPNGObject;const IconData:TIconData); var X,Y,Y2,BitCount: Integer; BitBuf: Byte; Line32: PRGBQuadArray; PNGLine: pRGBLine; Alpha: PByteArray; Mask: PByte; OnlyAlpha: boolean; begin with IconData do begin PNG.Header.Width := Info.Width; PNG.Header.Height := Info.Height; PNG.Header.BitDepth := 8; PNG.Header.ColorType := COLOR_RGBALPHA; TChunkIHDRHack(PNG.Header).PrepareImageData; BitBuf := 0; onlyAlpha := true; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; for X:=0 to Info.Width-1 do if Line32[X].rgbReserved=0 then begin onlyAlpha := false; break; end; if not onlyAlpha then break; end; for Y:=0 to Info.Height-1 do begin Line32 := @ImageBits[Y*ImageLineWidth]; Mask := @MaskBits[Y*MaskLineWidth]; Y2 := Info.Height-Y-1; Alpha := PNG.AlphaScanline[Y2]; PNGLine := PNG.ScanLine[Y2]; BitCount := 0; for X:=0 to Info.Width-1 do begin if BitCount=0 then begin BitCount := 8; BitBuf := Mask^; Inc(Mask); end; if BitBuf and $80=0 then with PNGLine[X],Line32[X] do begin rgbtRed := rgbRed; rgbtGreen := rgbGreen; rgbtBlue := rgbBlue; if not onlyAlpha then Alpha[X] := rgbReserved else Alpha[X] := $FF; end else with PNGLine[X] do begin rgbtRed := 0; rgbtGreen := 0; rgbtBlue := 0; Alpha[X] := 0; end; BitBuf := BitBuf shl 1; Dec(BitCount); end; end; end; end; procedure TIcoFile.ConvertToPNG(icoNo:integer;Stream:TStream); var PNG: TPNGObject; begin with Icons[icoNo] do begin Assert(BitmapInfo.bmiHeader.biBitCount>=24); if IsValidAlpha(icoNo) then PNG := TPNGObject.CreateBlank(COLOR_RGBALPHA,8,Info.Width,Info.Height) else PNG := TPNGObject.CreateBlank(COLOR_RGB,8,Info.Width,Info.Height); try Convert(PNG,Icons[icoNo]); PNG.CompressionLevel := 9; PNG.SaveToStream(Stream); finally PNG.Free; end; end; end; procedure TIcoFile.saveAsPng(icoNo:integer;fn:string); var Stream: TStream; begin Stream := TFileStream.Create(fn,fmCreate); try ConvertToPNG(icoNo,Stream); finally Stream.Free; end; end; } procedure TIcoFile.Add(IconData:TIconData); begin setLength(FIcons,length(FIcons)+1); Icons[high(FIcons)] := IconData; end; procedure TIcoFile.AddCopy(IconData:TIconData); begin setLength(FIcons,length(FIcons)+1); Icons[high(FIcons)] := IconData; with Icons[high(FIcons)] do begin ImageBits := copy(IconData.ImageBits); MaskBits := copy(IconData.MaskBits); getMem(BitmapInfo,sizeof(BITMAPINFOHEADER)+iRgbTable); getMem(MaskBitmapInfo,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); move(IconData.BitmapInfo^,BitmapInfo^,sizeof(BITMAPINFOHEADER)+iRgbTable); move(IconData.MaskBitmapInfo^,MaskBitmapInfo^,sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD)*2); end; end; procedure TIcoFile.DestroyIconData(IconData: TIconData); begin with IconData do begin if BitmapInfo<>nil then FreeMem(BitmapInfo); BitmapInfo := nil; if MaskBitmapInfo<>nil then FreeMem(MaskBitmapInfo); MaskBitmapInfo := nil; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/uthumbnailprovider.pas���������������������������������������������0000644�0001750�0000144�00000011676�12612505011�022361� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Windows thumbnail provider Copyright (C) 2012-2013 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uThumbnailProvider; {$mode delphi} interface uses uThumbnails; implementation uses SysUtils, Forms, Graphics, Windows, ActiveX, ShlObj; const SIIGBF_RESIZETOFIT = $00000000; SIIGBF_BIGGERSIZEOK = $00000001; SIIGBF_MEMORYONLY = $00000002; SIIGBF_ICONONLY = $00000004; SIIGBF_THUMBNAILONLY = $00000008; SIIGBF_INCACHEONLY = $00000010; const IID_IExtractImage: TGUID = '{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'; type SIIGBF = Integer; IShellItemImageFactory = interface(IUnknown) ['{BCC18B79-BA16-442F-80C4-8A59C30C463B}'] function GetImage(size: TSize; flags: SIIGBF; out phbm: HBITMAP): HRESULT; stdcall; end; IExtractImage = interface(IUnknown) ['{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'] function GetLocation(pszPathBuffer: LPWSTR; cchMax: DWORD; out pdwPriority: DWORD; const prgSize: LPSIZE; dwRecClrDepth: DWORD; var pdwFlags: DWORD): HRESULT; stdcall; function Extract(out phBmpImage: HBITMAP): HRESULT; stdcall; end; var SHCreateItemFromParsingName: function(pszPath: LPCWSTR; const pbc: IBindCtx; const riid: TIID; out ppv): HRESULT; stdcall; function GetThumbnailOld(const aFileName: String; aSize: TSize; out Bitmap: HBITMAP): HRESULT; var Folder, DesktopFolder: IShellFolder; Pidl, ParentPidl: PItemIDList; Image: IExtractImage; pchEaten: ULONG; wsTemp: WideString; dwPriority: DWORD; Status: HRESULT; dwRecClrDepth: DWORD; dwAttributes: ULONG = 0; dwFlags: DWORD = IEIFLAG_SCREEN or IEIFLAG_QUALITY or IEIFLAG_ORIGSIZE; begin Result:= E_FAIL; if SHGetDesktopFolder(DesktopFolder) = S_OK then begin wsTemp:= UTF8Decode(ExtractFilePath(aFileName)); if DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, ParentPidl, dwAttributes) = S_OK then begin if DesktopFolder.BindToObject(ParentPidl, nil, IID_IShellFolder, Folder) = S_OK then begin wsTemp:= UTF8Decode(ExtractFileName(aFileName)); if Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, Pidl, dwAttributes) = S_OK then begin if Succeeded(Folder.GetUIObjectOf(0, 1, Pidl, IID_IExtractImage, nil, Image)) then begin SetLength(wsTemp, MAX_PATH * SizeOf(WideChar)); dwRecClrDepth:= GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL); Status:= Image.GetLocation(PWideChar(wsTemp), Length(wsTemp), dwPriority, @aSize, dwRecClrDepth, dwFlags); if (Status = NOERROR) or (Status = E_PENDING) then begin Result:= Image.Extract(Bitmap); end; end; CoTaskMemFree(Pidl); end; Folder:= nil; end; CoTaskMemFree(ParentPidl); end; DesktopFolder:= nil; end; // SHGetDesktopFolder end; function GetThumbnailNew(const aFileName: String; aSize: TSize; out Bitmap: HBITMAP): HRESULT; var ShellItemImage: IShellItemImageFactory; begin Result:= SHCreateItemFromParsingName(PWideChar(UTF8Decode(aFileName)), nil, IShellItemImageFactory, ShellItemImage); if Succeeded(Result) then begin Result:= ShellItemImage.GetImage(aSize, SIIGBF_THUMBNAILONLY, Bitmap); end; end; function GetThumbnail(const aFileName: String; aSize: TSize): Graphics.TBitmap; var Bitmap: HBITMAP; Status: HRESULT = E_FAIL; begin Result:= nil; if (Win32MajorVersion > 5) then begin Status:= GetThumbnailNew(aFileName, aSize, Bitmap); end; if Failed(Status) then begin Status:= GetThumbnailOld(aFileName, aSize, Bitmap); end; if Succeeded(Status) then begin Result:= Graphics.TBitmap.Create; Result.Handle:= Bitmap; end; end; initialization SHCreateItemFromParsingName:= GetProcAddress(GetModuleHandle('shell32.dll'), 'SHCreateItemFromParsingName'); TThumbnailManager.RegisterProvider(@GetThumbnail); end. ������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/ushlobjadditional.pas����������������������������������������������0000644�0001750�0000144�00000021263�12621163275�022142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* Daniel U. Thibault <D.U.Thibault@Bigfoot.com> 19 August 1999 Updated 15 September 1999 Constants, types that have appeared since ShlObj.pas. The values marked //MISSING VALUES remain unidentified (two sets). Koblov Alexander (Alexx2000@mail.ru) 15 July 2007 Add some functions, constants and types for Lazarus compability *) unit uShlObjAdditional; {$mode delphi} interface uses Windows, ShlObj, ActiveX; const { User canceled the current action } COPYENGINE_E_USER_CANCELLED: HRESULT = HRESULT($80270000); const IID_IImageList: TGUID = '{46EB5926-582E-4017-9FDF-E8998DAA0950}'; { IShellIconOverlay Interface } { Used to return the icon overlay index or its icon index for an IShellFolder object, this is always implemented with IShellFolder [Member functions] IShellIconOverlay::GetOverlayIndex Parameters: pidl object to identify icon overlay for. pdwIndex the Overlay Index in the system image list IShellIconOverlay::GetOverlayIconIndex This method is only used for those who are interested in seeing the real bits of the Overlay Icon Returns: S_OK, if the index of an Overlay is found S_FALSE, if no Overlay exists for this file E_FAIL, if pidl is bad Parameters: pdwIconIndex the Overlay Icon index in the system image list } const IID_IShellIconOverlay : TGUID = ( D1:$7D688A70; D2:$C613; D3:$11D0; D4:($99,$9B,$00,$C0,$4F,$D6,$55,$E1)); SID_IShellIconOverlay = '{7D688A70-C613-11D0-999B-00C04FD655E1}'; type IShellIconOverlay = interface(IUnknown) [SID_IShellIconOverlay] function GetOverlayIndex(pidl : PItemIDList; var Index : Integer) : HResult; stdcall; function GetOverlayIconIndex(pidl : PItemIDList; var IconIndex : Integer) : HResult; stdcall; end; { IShellIconOverlay } function SHGetSystemImageList(iImageList: Integer): HIMAGELIST; function SHChangeIconDialog(hOwner: HWND; var FileName: String; var IconIndex: Integer): Boolean; function SHGetOverlayIconIndex(const sFilePath, sFileName: String): Integer; function SHGetInfoTip(const sFilePath, sFileName: String): String; function SHFileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; function PathIsUNCA(pszPath: LPCSTR): WINBOOL; stdcall; external 'shlwapi' name 'PathIsUNCA'; function PathIsUNCW(pwszPath: LPCWSTR): WINBOOL; stdcall; external 'shlwapi' name 'PathIsUNCW'; function PathFindNextComponentA(pszPath: LPCSTR): LPSTR; stdcall; external 'shlwapi' name 'PathFindNextComponentA'; function PathFindNextComponentW(pwszPath: LPCWSTR): LPWSTR; stdcall; external 'shlwapi' name 'PathFindNextComponentW'; procedure OleErrorUTF8(ErrorCode: HResult); procedure OleCheckUTF8(Result: HResult); implementation uses SysUtils, ShellApi, JwaShlGuid, ComObj, LazUTF8; function SHGetImageListFallback(iImageList: Integer; const riid: TGUID; var ImageList: HIMAGELIST): HRESULT; stdcall; var FileInfo: TSHFileInfoW; Flags: UINT = SHGFI_SYSICONINDEX; begin if not IsEqualGUID(riid, IID_IImageList) then Exit(E_NOINTERFACE); case iImageList of SHIL_LARGE, SHIL_EXTRALARGE: Flags:= Flags or SHGFI_LARGEICON; SHIL_SMALL: Flags:= Flags or SHGFI_SMALLICON; end; ZeroMemory(@FileInfo, SizeOf(TSHFileInfoW)); ImageList:= SHGetFileInfoW('', 0, FileInfo, SizeOf(FileInfo), Flags); if ImageList <> 0 then Exit(S_OK) else Exit(E_FAIL); end; function SHGetSystemImageList(iImageList: Integer): HIMAGELIST; var ShellHandle: THandle; SHGetImageList: function(iImageList: Integer; const riid: TGUID; var ImageList: HIMAGELIST): HRESULT; stdcall; begin Result:= 0; ShellHandle:= GetModuleHandle(Shell32); if (ShellHandle <> 0) then begin @SHGetImageList:= GetProcAddress(ShellHandle, 'SHGetImageList'); if @SHGetImageList = nil then begin @SHGetImageList:= GetProcAddress(ShellHandle, PAnsiChar(727)); if @SHGetImageList = nil then SHGetImageList:= @SHGetImageListFallback; end; SHGetImageList(iImageList, IID_IImageList, Result); end; end; function SHChangeIconDialog(hOwner: HWND; var FileName: String; var IconIndex: Integer): Boolean; type TSHChangeIconProcW = function(Wnd: HWND; szFileName: PWideChar; Reserved: Integer; var lpIconIndex: Integer): BOOL; stdcall; var ShellHandle: THandle; SHChangeIconW: TSHChangeIconProcW; FileNameW: array[0..MAX_PATH] of WideChar; begin Result := True; IconIndex := 0; ShellHandle := GetModuleHandle(Shell32); if ShellHandle <> 0 then begin @SHChangeIconW := Windows.GetProcAddress(ShellHandle, PAnsiChar(62)); if Assigned(SHChangeIconW) then begin FileNameW := UTF8Decode(FileName); Result := SHChangeIconW(hOwner, FileNameW, SizeOf(FileNameW), IconIndex); if Result then FileName := UTF16ToUTF8(UnicodeString(FileNameW)); end end; end; function SHGetOverlayIconIndex(const sFilePath, sFileName: String): Integer; var Folder, DesktopFolder: IShellFolder; Pidl, ParentPidl: PItemIDList; IconOverlay: IShellIconOverlay; pchEaten: ULONG; dwAttributes: ULONG = 0; wsTemp: WideString; begin Result:= -1; if SHGetDesktopFolder(DesktopFolder) = S_OK then begin wsTemp:= UTF8Decode(sFilePath); if DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, ParentPidl, dwAttributes) = S_OK then begin if DesktopFolder.BindToObject(ParentPidl, nil, IID_IShellFolder, Folder) = S_OK then begin // Get an IShellIconOverlay interface for the folder. // If this fails then this version of // the shell does not have this // interface. if Folder.QueryInterface(IID_IShellIconOverlay, IconOverlay) = S_OK then begin // Get a pidl for the file. wsTemp:= UTF8Decode(sFileName); if Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, Pidl, dwAttributes) = S_OK then begin // Get the overlay icon index. if IconOverlay.GetOverlayIconIndex(Pidl, Result) <> S_OK then Result:= -1; CoTaskMemFree(Pidl); end; end; end; CoTaskMemFree(ParentPidl); end; DesktopFolder:= nil; end; // SHGetDesktopFolder end; function SHGetInfoTip(const sFilePath, sFileName: String): String; var DesktopFolder, Folder: IShellFolder; pidlFolder: PItemIDList = nil; pidlFile: PItemIDList = nil; queryInfo: IQueryInfo; ppwszTip: PWideChar = nil; pchEaten: ULONG; dwAttributes: ULONG = 0; wsTemp: WideString; begin Result:= EmptyStr; if Succeeded(SHGetDesktopFolder(DesktopFolder)) then try wsTemp:= UTF8Decode(sFilePath); if Succeeded(DesktopFolder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, pidlFolder, dwAttributes)) then if Succeeded(DesktopFolder.BindToObject(pidlFolder, nil, IID_IShellFolder, Folder)) then try wsTemp:= UTF8Decode(sFileName); if Succeeded(Folder.ParseDisplayName(0, nil, PWideChar(wsTemp), pchEaten, pidlFile, dwAttributes)) then if Succeeded(Folder.GetUIObjectOf(0, 1, pidlFile, IID_IQueryInfo, nil, queryInfo)) then if Succeeded(queryInfo.GetInfoTip(QITIPF_USESLOWTIP, ppwszTip)) then Result:= UTF16ToUTF8(WideString(ppwszTip)); finally Folder:= nil; queryInfo:= nil; if Assigned(ppwszTip) then CoTaskMemFree(ppwszTip); if Assigned(pidlFile) then CoTaskMemFree(pidlFile); end; finally DesktopFolder:= nil; if Assigned(pidlFolder) then CoTaskMemFree(pidlFolder); end; end; function SHFileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; var Unknown: IUnknown; ShellLink: IShellLinkW; PersistFile: IPersistFile; FindData: TWin32FindDataW; pszFile:LPWSTR; begin Result := False; try Unknown := CreateComObject(CLSID_ShellLink); ShellLink := Unknown as IShellLinkW; PersistFile := Unknown as IPersistFile; if Failed(PersistFile.Load(PWideChar(UTF8Decode(FileName)), OF_READ)) then Exit; pszFile:= GetMem(MAX_PATH * 2); try if Failed(ShellLink.GetPath(pszFile, MAX_PATH, @FindData, 0)) then Exit; if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then begin LinkTarget := UTF16ToUTF8(WideString(pszFile)); Result := (LinkTarget <> EmptyStr); end; finally FreeMem(pszFile); end; except LinkTarget := EmptyStr; end; end; procedure OleErrorUTF8(ErrorCode: HResult); begin raise EOleError.Create(SysToUTF8(SysErrorMessage(ErrorCode))); end; procedure OleCheckUTF8(Result: HResult); begin if not Succeeded(Result) then OleErrorUTF8(Result); end; end. { ShlObjAdditional } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/uwinterm.pas�������������������������������������������������������0000644�0001750�0000144�00000017014�12630372731�020313� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Terminal emulator implementation for Windows Copyright (C) 2009-2010 Koblov Alexander (Alexx2000@mail.ru) 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 uWinTerm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Windows, uTerminal; {$IF FPC_FULLVERSION < 30000} type TStartupInfoW = TStartupInfo; {$ENDIF} type { TWinTerm } TWinTerm = class(TTerminal) private FConsoleWindow: HWND; FSecurityAttributes: TSecurityAttributes; FStartupInfo: TStartupInfoW; FProcessInformation: TProcessInformation; PipeStdInRead, PipeStdInWrite, PipeStdOutRead, PipeStdOutWrite: THandle; public constructor Create; destructor Destroy; override; //--------------------- function Read_Pty(var Output: String; const TimeOut: LongInt = 10): LongInt; override; // Read info from pty function Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String=''): THandle; override;//Create new pty and start cmd function Write_pty(const Input: String): Boolean; override; //write str to pty //--------------------- function SendBreak_pty(): Boolean; override; // ^C function SendSignal_pty(Sig: Cint): Boolean; override; function SetScreenSize(ColCount, RowCount: Integer): Boolean; override; function SetCurrentDir(const NewDir: String): Boolean; override; //--------------------- function KillShell: LongInt; override; function CSI_GetTaskId(const buf:String):integer; override; end; { TWinConThread } TWinConThread = class(TConsoleThread) private procedure AddSymbol; protected procedure Execute; override; public constructor Create; destructor Destroy; override; end; implementation uses LazUTF8, JwaWinCon, uOSUtils; { TWinTerm } constructor TWinTerm.Create; begin if not isConsole then begin AllocConsole(); FConsoleWindow:= GetConsoleWindow(); ShowWindow(FConsoleWindow, SW_HIDE); end; end; destructor TWinTerm.Destroy; begin KillShell; if not isConsole then FreeConsole(); inherited Destroy; end; function TWinTerm.Read_Pty(var Output: String; const timeout: LongInt): LongInt; var I: Integer; dwRead, BufSize, DesBufSize: DWORD; Res: Boolean; pcOutput: PChar; begin try BufSize:= 0; dwRead:= 0; Output:= EmptyStr; repeat for I:= 0 to 9 do begin Res:= PeekNamedPipe(PipeStdOutRead, nil, 0, nil, @DesBufSize, nil); Res:= Res and (DesBufSize > 0); if Res then Break; Sleep(TimeOut); end; if Res then begin if DesBufSize > BufSize then begin GetMem(pcOutput, DesBufSize); BufSize:= DesBufSize; end; Res:= ReadFile(PipeStdOutRead, pcOutput^, BufSize, dwRead, nil); end; until not Res; except end; if dwRead > 0 then begin Output:= ConsoleToUTF8(Copy(pcOutput, 1, dwRead)); FreeMem(pcOutput); end; Result:= dwRead; end; function TWinTerm.Fork_pty(const RowCount, ColCount: Integer; const Command: String; const Params: String): THandle; var hTmp1, hTmp2: THandle; begin ZeroMemory(@FSecurityAttributes, SizeOf(FSecurityAttributes)); FSecurityAttributes.nLength:= SizeOf(FSecurityAttributes); FSecurityAttributes.bInheritHandle:= True; FSecurityAttributes.lpSecurityDescriptor:= nil; // create input/output pipes CreatePipe(PipeStdInRead, PipeStdInWrite, @FSecurityAttributes, 0); CreatePipe(PipeStdOutRead, PipeStdOutWrite, @FSecurityAttributes, 0); DuplicateHandle(GetCurrentProcess(), PipeStdInWrite, GetCurrentProcess(), @hTmp1, 0, False, DUPLICATE_SAME_ACCESS); DuplicateHandle(GetCurrentProcess(), PipeStdOutRead, GetCurrentProcess(), @hTmp2, 0, False, DUPLICATE_SAME_ACCESS); CloseHandle(PipeStdInWrite); CloseHandle(PipeStdOutRead); PipeStdInWrite:= hTmp1; PipeStdOutRead:= hTmp2; ZeroMemory(@FStartupInfo, SizeOf(FStartupInfo)); FStartupInfo.cb:= SizeOf(FStartupInfo); with FStartupInfo do begin dwFlags:= STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow:= SW_HIDE; hStdInput:= PipeStdInRead; hStdOutput:= PipeStdOutWrite; hStdError:= PipeStdOutWrite; end; ZeroMemory(@FProcessInformation, SizeOf(FProcessInformation)); CreateProcessW(nil, PWideChar(UTF8Decode(Command)), // command line nil, // process security attributes nil, // primary thread security attributes TRUE, // handles are inherited 0, // creation flags nil, // use parent's environment nil, // use parent's current directory FStartupInfo, // STARTUPINFO pointer FProcessInformation); // receives PROCESS_INFORMATION Result:= FProcessInformation.hProcess; end; function TWinTerm.Write_pty(const Input: String): Boolean; var dwWritten, BufSize: DWORD; pcCommand: PChar; begin pcCommand:= PChar(UTF8ToConsole(Input)); BufSize:= Length(pcCommand); Result:= WriteFile(PipeStdInWrite, pcCommand^, BufSize, dwWritten, nil); Result:= Result and (BufSize = dwWritten); end; function TWinTerm.SendBreak_pty(): Boolean; begin Result:= SendSignal_pty(CTRL_C_EVENT); end; function TWinTerm.SendSignal_pty(Sig: Cint): Boolean; begin SetConsoleCtrlHandler(nil, True); Result:= GenerateConsoleCtrlEvent(Sig, 0); end; function TWinTerm.SetScreenSize(ColCount, RowCount: Integer): Boolean; begin Result:= False; end; function TWinTerm.SetCurrentDir(const NewDir: String): Boolean; begin Result:= Write_pty('cd /D "' + NewDir + '"' + #13#10); end; function TWinTerm.KillShell: LongInt; begin try CloseHandle(PipeStdInRead); CloseHandle(PipeStdInWrite); CloseHandle(PipeStdOutRead); CloseHandle(PipeStdOutWrite); CloseHandle(FProcessInformation.hThread); CloseHandle(FProcessInformation.hProcess); Result := 0; except Result := -1; end; end; function TWinTerm.CSI_GetTaskId(const buf:String):integer; begin Result := 0; // Dummy end; { TWinConThread } procedure TWinConThread.AddSymbol; begin if Assigned(FOut) then FOut.Write(FBuf); end; procedure TWinConThread.Execute; begin FShell:= GetShell; if Length(FShell) = 0 then FShell:= RunTermCmd; if Assigned(FTerm) then FTerm.Fork_pty(FRowsCount, FColsCount, FShell); while True do begin if Assigned(FTerm) then begin if FTerm.Read_pty(FBuf, 0) > 0 then Synchronize(@AddSymbol) else Sleep(1); end else Break; end; end; constructor TWinConThread.Create; begin inherited Create(True); System.InitCriticalSection(FLock); FTerm:= TWinTerm.Create; FRowsCount:= 50; FColsCount:= 100; end; destructor TWinConThread.Destroy; begin FreeAndNil(FTerm); System.DoneCriticalSection(FLock); inherited Destroy; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/ugdiplus.pas�������������������������������������������������������0000644�0001750�0000144�00000037552�11740433676�020315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains some GDI+ API functions Copyright (C) 2008 Koblov Alexander (Alexx2000@mail.ru) 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 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uGdiPlus; {$mode objfpc}{$H+} interface uses Windows; type GPSTATUS = ( Ok, GenericError, InvalidParameter, OutOfMemory, ObjectBusy, InsufficientBuffer, NotImplemented, Win32Error, WrongState, Aborted, FileNotFound, ValueOverflow, AccessDenied, UnknownImageFormat, FontFamilyNotFound, FontStyleNotFound, NotTrueTypeFont, UnsupportedGdiplusVersion, GdiplusNotInitialized, PropertyNotFound, PropertyNotSupported ); GpColorAdjustType = ( ColorAdjustTypeDefault = 0, ColorAdjustTypeBitmap = 1, ColorAdjustTypeBrush = 2, ColorAdjustTypePen = 3, ColorAdjustTypeText = 4, ColorAdjustTypeCount = 5, ColorAdjustTypeAny = 6 ); GpUnit = ( UnitWorld = 0, UnitDisplay = 1, UnitPixel = 2, UnitPoint = 3, UnitInch = 4, UnitDocument = 5, UnitMillimeter = 6 ); const GdipPixelFormatIndexed = $00010000; // Indexes into a palette GdipPixelFormatGDI = $00020000; // Is a GDI-supported format GdipPixelFormatAlpha = $00040000; // Has an alpha component GdipPixelFormatPAlpha = $00080000; // Pre-multiplied alpha GdipPixelFormatExtended = $00100000; // Extended color 16 bits/channel GdipPixelFormatCanonical = $00200000; type GPPIXELFORMAT = ( // ... PixelFormat32bppRGB = ( 9 or (32 shl 8) or GdipPixelFormatGDI), PixelFormat32bppARGB = (10 or (32 shl 8) or GdipPixelFormatAlpha or GdipPixelFormatGDI or GdipPixelFormatCanonical), PixelFormat32bppPARGB = (11 or (32 shl 8) or GdipPixelFormatAlpha or GdipPixelFormatPAlpha or GdipPixelFormatGDI) // ... ); GpGraphics = Pointer; GpImage = Pointer; GpBitmap = Pointer; GpImageAttributes = Pointer; type TDebugEventLevel = (DebugEventLevelFatal, DebugEventLevelWarning); // Callback function that GDI+ can call, on debug builds, for assertions // and warnings. TDebugEventProc = procedure(level: TDebugEventLevel; message: PChar); stdcall; // Notification functions which the user must call appropriately if // "SuppressBackgroundThread" (below) is set. TNotificationHookProc = function(out token: ULONG): GPSTATUS; stdcall; TNotificationUnhookProc = procedure(token: ULONG); stdcall; // Input structure for GdiplusStartup GdiplusStartupInput = packed record GdiplusVersion : Cardinal; // Must be 1 DebugEventCallback : TDebugEventProc; // Ignored on free builds SuppressBackgroundThread: BOOL; // FALSE unless you're prepared to call // the hook/unhook functions properly SuppressExternalCodecs : BOOL; // FALSE unless you want GDI+ only to use end; // its internal image codecs. TGdiplusStartupInput = GdiplusStartupInput; PGdiplusStartupInput = ^TGdiplusStartupInput; // Output structure for GdiplusStartup() GdiplusStartupOutput = packed record NotificationHook : TNotificationHookProc; NotificationUnhook: TNotificationUnhookProc; end; TGdiplusStartupOutput = GdiplusStartupOutput; PGdiplusStartupOutput = ^TGdiplusStartupOutput; PGdiPlusBitmapData = ^GdiPlusBitmapData; GdiPlusBitmapData = packed record Width: UINT; Height: UINT; Stride: UINT; PixelFormat: GPPIXELFORMAT; Scan0: LPBYTE; Reserved: UINT_PTR; end; PARGBQUAD = ^ARGBQUAD; ARGBQUAD = record rgbBlue : BYTE; rgbGreen : BYTE; rgbRed : BYTE; rgbAlpha : BYTE; end; const GdipImageLockModeRead = 1; GdipImageLockModeWrite = 2; GdipImageLockModeUserInputBuf = 4; type // functions prototypes TGdiplusStartup = function (out token: ULONG; input: PGdiplusStartupInput; output: PGdiplusStartupOutput): GPSTATUS; stdcall; TGdiplusShutdown = procedure (token: ULONG); stdcall; TGdipCreateBitmapFromHICON = function (hicon: HICON; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromHBITMAP = function (hbitmap: HBITMAP; hpalette: HPALETTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromScan0 = function (Width, Height: Integer; Stride: Integer; PixelFormat: GPPIXELFORMAT; Scan0: LPBYTE; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateBitmapFromGraphics = function (Width, Height: Integer; graphics: GPGRAPHICS; out bitmap: GPBITMAP): GPSTATUS; stdcall; TGdipCreateFromHDC = function (hdc: HDC; out graphics: GPGRAPHICS): GPSTATUS; stdcall; TGdipDrawImageRectI = function (graphics: GPGRAPHICS; image: GPIMAGE; x: Integer; y: Integer; width: Integer; height: Integer): GPSTATUS; stdcall; TGdipDrawImageRectRectI = function (graphics: GPGRAPHICS; image: GPIMAGE; dstx, dsty, dstwidth, dstheight: Integer; srcx, srcy, srcwidth, srcheight: Integer; srcUnit: GpUnit; imageattr: GPIMAGEATTRIBUTES; abortCallback: Pointer = nil; callbackData: Pointer = nil): GPSTATUS; stdcall; TGdipDisposeImage = function (image: GPIMAGE): GPSTATUS; stdcall; TGdipDeleteGraphics = function (graphics: GPGRAPHICS): GPSTATUS; stdcall; TGdipGraphicsClear = function (graphics: GPGRAPHICS; color: Integer): GPSTATUS; stdcall; TGdipSetInterpolationMode = function (graphics: GPGRAPHICS; interpolation: Integer): GPSTATUS; stdcall; TGdipCreateImageAttributes = function (out imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; TGdipDisposeImageAttributes = function (imageattr: GPIMAGEATTRIBUTES): GPSTATUS; stdcall; TGdipSetImageAttributesColorKeys = function (imageattr: GPIMAGEATTRIBUTES; ColorAdjustType: GpColorAdjustType; Enable: BOOL; ColorLow: LONG; ColorHigh: LONG): GPSTATUS; stdcall; TGdipBitmapLockBits = function (bitmap: GPBITMAP; rect: LPRECT; flags: UINT; PixelFormat: GPPIXELFORMAT; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; TGdipBitmapUnlockBits = function (bitmap: GPBITMAP; lockedData: PGdiPlusBitmapData): GPSTATUS; stdcall; TGdipGetImagePixelFormat = function (image: GPIMAGE; out pixelFormat: GPPIXELFORMAT): GPSTATUS; stdcall; var IsGdiPlusLoaded: Boolean = False; GdiplusStartup: TGdiplusStartup; GdiplusShutdown: TGdiplusShutdown; GdipCreateBitmapFromHICON: TGdipCreateBitmapFromHICON; GdipCreateBitmapFromHBITMAP: TGdipCreateBitmapFromHBITMAP; GdipCreateBitmapFromScan0: TGdipCreateBitmapFromScan0; GdipCreateBitmapFromGraphics: TGdipCreateBitmapFromGraphics; GdipCreateFromHDC: TGdipCreateFromHDC; GdipDrawImageRectI: TGdipDrawImageRectI; GdipDrawImageRectRectI: TGdipDrawImageRectRectI; GdipDisposeImage: TGdipDisposeImage; GdipDeleteGraphics: TGdipDeleteGraphics; GdipGraphicsClear: TGdipGraphicsClear; GdipSetInterpolationMode: TGdipSetInterpolationMode; GdipCreateImageAttributes: TGdipCreateImageAttributes; GdipDisposeImageAttributes: TGdipDisposeImageAttributes; GdipSetImageAttributesColorKeys: TGdipSetImageAttributesColorKeys; GdipBitmapLockBits: TGdipBitmapLockBits; GdipBitmapUnlockBits: TGdipBitmapUnlockBits; GdipGetImagePixelFormat: TGdipGetImagePixelFormat; function GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; function GdiPlusStretchDraw(himl: hImageList; ImageIndex: Integer; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; implementation uses CommCtrl; var StartupInput: TGDIPlusStartupInput; gdiplusToken: ULONG; function GetBitmapPixels(hDC: HDC; BitmapInfo: LPBITMAPINFO; hBitmap: HBITMAP): PBYTE; begin; // Buffer must be aligned to DWORD (it should automatically be on a 32-bit machine). Result := GetMem(BitmapInfo^.bmiHeader.biWidth * BitmapInfo^.bmiHeader.biHeight * BitmapInfo^.bmiHeader.biBitCount shr 3); if GetDIBits(hDC, hBitmap, 0, BitmapInfo^.bmiHeader.biHeight, Result, BitmapInfo, DIB_RGB_COLORS) = 0 then begin Freemem(Result); Result := nil; end; end; function GetBitmapFromARGBPixels(graphics: GPGRAPHICS; pixels: LPBYTE; Width, Height: Integer): GPBITMAP; var x, y: Integer; pSrc, pDst: LPDWORD; bmBounds: TRECT; bmData: GdiPlusBitmapData; begin if GdipCreateBitmapFromGraphics(Width, Height, graphics, Result) <> ok then Exit(nil); Windows.SetRect(@bmBounds, 0, 0, Width, Height); if GdipBitmapLockBits(Result, @bmBounds, GdipImageLockModeWrite, PixelFormat32bppARGB, @bmData) <> ok then begin GdipDisposeImage(Result); Exit(nil); end; pSrc := LPDWORD(pixels); pDst := LPDWORD(bmData.Scan0); // Pixels retrieved by GetDIBits are bottom-up, left-right. for x := 0 to Width - 1 do for y := 0 to Height - 1 do pDst[(Height - 1 - y) * Width + x] := pSrc[y * Width + x]; GdipBitmapUnlockBits(Result, @bmData); end; function HasAlphaChannel(pixels: LPBYTE; Width, Height: Integer): Boolean; var i: Integer; begin for i := 0 to Width * Height - 1 do begin if PARGBQUAD(pixels)[i].rgbAlpha <> 0 then Exit(True); end; Result := False; end; function GdiPlusStretchDraw(hicn: hIcon; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; var pIcon: GPIMAGE; pCanvas: GPGRAPHICS; IconInfo: TICONINFO; BitmapInfo: TBITMAPINFO; pixels: LPBYTE = nil; begin Result:= False; if GetIconInfo(hicn, IconInfo) = False then Exit; try GdipCreateFromHDC(hCanvas, pCanvas); // Prepare bitmap info structure. FillMemory(@BitmapInfo, sizeof(BitmapInfo), 0); BitmapInfo.bmiHeader.biSize := Sizeof(BitmapInfo.bmiHeader); GetDIBits(hCanvas, IconInfo.hbmColor, 0, 0, nil, @BitmapInfo, 0); if (BitmapInfo.bmiHeader.biBitCount = 32) then { only 32bpp } begin // Get pixels data. pixels := GetBitmapPixels(hCanvas, @BitmapInfo, IconInfo.hbmColor); // Check if the bitmap has alpha channel (have to be 32bpp to have ARGB format). if HasAlphaChannel(pixels, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight) then begin // GdipCreateBitmapFromHICON and GdipCreateBitmapFromHBITMAP functions // destroy alpha channel (they write alpha=255 for each pixel). // Copy the ARGB values manually. pIcon := GetBitmapFromARGBPixels(pCanvas, pixels, BitmapInfo.bmiHeader.biWidth, BitmapInfo.bmiHeader.biHeight); end else // This is OK for bitmaps without alpha channel or < 32bpp. GdipCreateBitmapFromHICON(hicn, pIcon); end else // This is OK for bitmaps without alpha channel or < 32bpp. GdipCreateBitmapFromHICON(hicn, pIcon); Result:= GdipDrawImageRectI(pCanvas, pIcon, X, Y, cxWidth, cyHeight) = Ok; finally GdipDisposeImage(pIcon); GdipDeleteGraphics(pCanvas); DeleteObject(IconInfo.hbmColor); DeleteObject(IconInfo.hbmMask); if Assigned(pixels) then Freemem(pixels); end; end; function GdiPlusStretchDraw(himl: hImageList; ImageIndex: Integer; hCanvas: HDC; X, Y, cxWidth, cyHeight: Integer): Boolean; var hicn: HICON; begin Result:= False; try hicn:= ImageList_ExtractIcon(0, himl, ImageIndex); Result:= GdiPlusStretchDraw(hicn, hCanvas, X, Y, cxWidth, cyHeight); finally DestroyIcon(hicn); end; end; var hLib: HMODULE; initialization hLib:= LoadLibrary('gdiplus.dll'); IsGdiPlusLoaded:= (hLib <> 0); if IsGdiPlusLoaded then begin GdiplusStartup:= TGdiplusStartup(GetProcAddress(hLib, 'GdiplusStartup')); GdiplusShutdown:= TGdiplusShutdown(GetProcAddress(hLib, 'GdiplusShutdown')); GdipCreateBitmapFromHICON:= TGdipCreateBitmapFromHICON(GetProcAddress(hLib, 'GdipCreateBitmapFromHICON')); GdipCreateBitmapFromHBITMAP:= TGdipCreateBitmapFromHBITMAP(GetProcAddress(hLib, 'GdipCreateBitmapFromHBITMAP')); GdipCreateBitmapFromScan0:= TGdipCreateBitmapFromScan0(GetProcAddress(hLib, 'GdipCreateBitmapFromScan0')); GdipCreateBitmapFromGraphics:= TGdipCreateBitmapFromGraphics(GetProcAddress(hLib, 'GdipCreateBitmapFromGraphics')); GdipCreateFromHDC:= TGdipCreateFromHDC(GetProcAddress(hLib, 'GdipCreateFromHDC')); GdipDrawImageRectI:= TGdipDrawImageRectI(GetProcAddress(hLib, 'GdipDrawImageRectI')); GdipDrawImageRectRectI:= TGdipDrawImageRectRectI(GetProcAddress(hLib, 'GdipDrawImageRectRectI')); GdipDisposeImage:= TGdipDisposeImage(GetProcAddress(hLib, 'GdipDisposeImage')); GdipDeleteGraphics:= TGdipDeleteGraphics(GetProcAddress(hLib, 'GdipDeleteGraphics')); GdipGraphicsClear:= TGdipGraphicsClear(GetProcAddress(hLib, 'GdipGraphicsClear')); GdipSetInterpolationMode:= TGdipSetInterpolationMode(GetProcAddress(hLib, 'GdipSetInterpolationMode')); GdipCreateImageAttributes:= TGdipCreateImageAttributes(GetProcAddress(hLib, 'GdipCreateImageAttributes')); GdipDisposeImageAttributes:= TGdipDisposeImageAttributes(GetProcAddress(hLib, 'GdipDisposeImageAttributes')); GdipSetImageAttributesColorKeys:= TGdipSetImageAttributesColorKeys(GetProcAddress(hLib, 'GdipSetImageAttributesColorKeys')); GdipBitmapLockBits:= TGdipBitmapLockBits(GetProcAddress(hLib, 'GdipBitmapLockBits')); GdipBitmapUnlockBits:= TGdipBitmapUnlockBits(GetProcAddress(hLib, 'GdipBitmapUnlockBits')); GdipGetImagePixelFormat:= TGdipGetImagePixelFormat(GetProcAddress(hLib, 'GdipGetImagePixelFormat')); // Initialize GDI+ StartupInput structure StartupInput.DebugEventCallback:= nil; StartupInput.SuppressBackgroundThread:= False; StartupInput.SuppressExternalCodecs:= False; StartupInput.GdiplusVersion:= 1; // Initialize GDI+ GdiplusStartup(gdiplusToken, @StartupInput, nil); end; finalization if IsGdiPlusLoaded then begin // Close GDI + GdiplusShutdown(gdiplusToken); GdiplusStartup:= nil; GdiplusShutdown:= nil; GdipCreateBitmapFromHICON:= nil; GdipCreateBitmapFromHBITMAP:= nil; GdipCreateBitmapFromScan0:= nil; GdipCreateBitmapFromGraphics:= nil; GdipCreateFromHDC:= nil; GdipDrawImageRectI:= nil; GdipDrawImageRectRectI:= nil; GdipDisposeImage:= nil; GdipDeleteGraphics:= nil; GdipGraphicsClear:= nil; GdipSetInterpolationMode:= nil; GdipCreateImageAttributes:= nil; GdipDisposeImageAttributes:= nil; GdipSetImageAttributesColorKeys:= nil; GdipBitmapLockBits:= nil; GdipBitmapUnlockBits:= nil; GdipGetImagePixelFormat:= nil; FreeLibrary(hLib); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/uNTFSLinks.pas�����������������������������������������������������0000644�0001750�0000144�00000032411�12620706714�020400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains functions to work with hard and symbolic links on the NTFS file system. Copyright (C) 2012 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 uNTFSLinks; {$mode delphi} interface uses Windows, SysUtils; const // CreateSymbolicLink flags SYMBOLIC_LINK_FLAG_FILE = 0; SYMBOLIC_LINK_FLAG_DIRECTORY = 1; // CreateFile flags FILE_FLAG_OPEN_REPARSE_POINT = $00200000; // DeviceIoControl control codes FSCTL_SET_REPARSE_POINT = $000900A4; FSCTL_GET_REPARSE_POINT = $000900A8; FSCTL_DELETE_REPARSE_POINT = $000900AC; const REPARSE_DATA_HEADER_SIZE = 8; MOUNT_POINT_HEADER_SIZE = 8; FILE_DOES_NOT_EXIST = DWORD(-1); wsNativeFileNamePrefix : UnicodeString = '\??\'; type {$packrecords c} TSymbolicLinkReparseBuffer = record SubstituteNameOffset: USHORT; SubstituteNameLength: USHORT; PrintNameOffset: USHORT; PrintNameLength: USHORT; Flags: ULONG; PathBuffer: array[0..0] of WCHAR; end; TMountPointReparseBuffer = record SubstituteNameOffset: USHORT; SubstituteNameLength: USHORT; PrintNameOffset: USHORT; PrintNameLength: USHORT; PathBuffer: array[0..0] of WCHAR; end; TGenericReparseBuffer = record DataBuffer: array[0..0] of UCHAR; end; REPARSE_DATA_BUFFER = record ReparseTag: ULONG; ReparseDataLength: USHORT; Reserved: USHORT; case Integer of 0: (SymbolicLinkReparseBuffer: TSymbolicLinkReparseBuffer); 1: (MountPointReparseBuffer: TMountPointReparseBuffer); 2: (GenericReparseBuffer: TGenericReparseBuffer); end; TReparseDataBuffer = REPARSE_DATA_BUFFER; PReparseDataBuffer = ^REPARSE_DATA_BUFFER; {$packrecords default} {en Creates a symbolic link. This function is only supported on the NTFS file system. On Windows 2000/XP it works for directories only On Windows Vista/Seven it works for directories and files (for files it works only with Administrator rights) @param(AFileName The name of the existing file) @param(ALinkName The name of the symbolic link) @returns(The function returns @true if successful, @false otherwise) } function CreateSymLink(ATargetName, ALinkName: UnicodeString): Boolean; {en Established a hard link beetwen an existing file and new file. This function is only supported on the NTFS file system, and only for files, not directories. @param(AFileName The name of the existing file) @param(ALinkName The name of the new hard link) @returns(The function returns @true if successful, @false otherwise) } function CreateHardLink(AFileName, ALinkName: UnicodeString): Boolean; {en Reads a symbolic link target. This function is only supported on the NTFS file system. @param(aSymlinkFileName The name of the symbolic link) @param(aTargetFileName The name of the target file/directory) @returns(The function returns @true if successful, @false otherwise) } function ReadSymLink(aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean; implementation uses LCLProc, uDebug; type TCreateSymbolicLinkW = function( pwcSymlinkFileName, pwcTargetFileName: PWideChar; dwFlags: DWORD): BOOL; stdcall; TCreateHardLinkW = function ( lpFileName, lpExistingFileName: LPCWSTR; lpSecurityAttributes: LPSECURITY_ATTRIBUTES): BOOL; stdcall; function HasNewApi: Boolean; begin Result:= (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6); end; function _CreateHardLink_New(AFileName : UnicodeString; ALinkName: UnicodeString): Boolean; var hLib: THandle; CreateHardLinkW: TCreateHardLinkW; begin Result:= False; hLib:= GetModuleHandle('kernel32.dll'); if hLib = 0 then begin DCDebug('Can not load library "kernel32.dll"'); Exit; end; CreateHardLinkW:= TCreateHardLinkW(GetProcAddress(hLib, 'CreateHardLinkW')); if not Assigned(CreateHardLinkW) then begin DCDebug('Can not get function address for "CreateHardLinkW"'); Exit; end; Result:= CreateHardLinkW(PWideChar(ALinkName), PWideChar(AFileName), nil); end; function _CreateHardLink_Old(aExistingFileName, aFileName: UnicodeString): Boolean; var hFile: THandle; lpBuffer: TWin32StreamId; wcFileName: array[0..MAX_PATH] of WideChar; dwNumberOfBytesWritten: DWORD = 0; lpContext: LPVOID = nil; lpFilePart: LPWSTR = nil; begin Result:= GetFullPathNameW(PWideChar(aFileName), MAX_PATH, wcFileName, lpFilePart) > 0; if Result then begin hFile:= CreateFileW(PWideChar(aExistingFileName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); Result:= (hFile <> INVALID_HANDLE_VALUE); end; if Result then try ZeroMemory(@lpBuffer, SizeOf(TWin32StreamId)); with lpBuffer do begin dwStreamId:= BACKUP_LINK; Size.LowPart:= (Length(aFileName) + 1) * SizeOf(WideChar); end; // Write stream header Result:= BackupWrite(hFile, @lpBuffer, SizeOf(TWin32StreamId) - SizeOf(PWideChar), dwNumberOfBytesWritten, False, False, lpContext); if not Result then Exit; // Write file name buffer Result:= BackupWrite(hFile, @wcFileName, lpBuffer.Size.LowPart, dwNumberOfBytesWritten, False, False, lpContext); if not Result then Exit; // Finish write operation Result:= BackupWrite(hFile, nil, 0, dwNumberOfBytesWritten, True, False, lpContext); finally CloseHandle(hFile); end; end; function CreateHardLink(AFileName, ALinkName: UnicodeString): Boolean; var dwAttributes: DWORD; begin dwAttributes := Windows.GetFileAttributesW(PWideChar(AFileName)); if dwAttributes = FILE_DOES_NOT_EXIST then raise Exception.Create('File "' + AFileName + '" does not exist.'); if (dwAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then raise Exception.Create('Can''t create hardlink for directory (file "' + AFileName + '").'); dwAttributes := Windows.GetFileAttributesW(PWideChar(ALinkName)); if dwAttributes <> FILE_DOES_NOT_EXIST then raise Exception.Create('File "' + ALinkName + '" already exists.'); if HasNewApi then Result:= _CreateHardLink_New(AFileName, ALinkName) else Result:= _CreateHardLink_Old(AFileName, ALinkName) end; function _CreateSymLink_New(const ATargetFileName, ASymlinkFileName: UnicodeString): boolean; var hLib: THandle; CreateSymbolicLinkW: TCreateSymbolicLinkW; begin Result:= False; hLib:= GetModuleHandle('kernel32.dll'); if hLib = 0 then begin DCDebug('Can not load library "kernel32.dll"'); Exit; end; CreateSymbolicLinkW:= TCreateSymbolicLinkW(GetProcAddress(hLib, 'CreateSymbolicLinkW')); if not Assigned(CreateSymbolicLinkW) then begin DCDebug('Can not get function address for "CreateSymbolicLinkW"'); Exit; end; Result:= CreateSymbolicLinkW(PWideChar(ASymlinkFileName), PWideChar(ATargetFileName), SYMBOLIC_LINK_FLAG_FILE); end; function _CreateSymLink_Old(aTargetFileName, aSymlinkFileName: UnicodeString): Boolean; var hDevice: THandle; lpInBuffer: PReparseDataBuffer; nInBufferSize, dwPathBufferSize: DWORD; wsNativeFileName: UnicodeString; lpBytesReturned: DWORD = 0; begin Result:= CreateDirectoryW(PWideChar(aSymlinkFileName), nil); if Result then try hDevice:= CreateFileW(PWideChar(aSymlinkFileName), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OPEN_REPARSE_POINT, 0); if hDevice = INVALID_HANDLE_VALUE then Exit; wsNativeFileName:= wsNativeFileNamePrefix + aTargetFileName; // File name length with trailing zero and zero for empty PrintName dwPathBufferSize:= Length(wsNativeFileName) * SizeOf(WideChar) + 4; nInBufferSize:= REPARSE_DATA_HEADER_SIZE + MOUNT_POINT_HEADER_SIZE + dwPathBufferSize; lpInBuffer:= GetMem(nInBufferSize); ZeroMemory(lpInBuffer, nInBufferSize); with lpInBuffer^, lpInBuffer^.MountPointReparseBuffer do begin ReparseTag:= IO_REPARSE_TAG_MOUNT_POINT; ReparseDataLength:= MOUNT_POINT_HEADER_SIZE + dwPathBufferSize; SubstituteNameLength:= Length(wsNativeFileName) * SizeOf(WideChar); PrintNameOffset:= SubstituteNameOffset + SubstituteNameLength + SizeOf(WideChar); CopyMemory(@PathBuffer[0], @wsNativeFileName[1], SubstituteNameLength); end; Result:= DeviceIoControl(hDevice, // handle to file or directory FSCTL_SET_REPARSE_POINT, // dwIoControlCode lpInBuffer, // input buffer nInBufferSize, // size of input buffer nil, // lpOutBuffer 0, // nOutBufferSize lpBytesReturned, // lpBytesReturned nil); // OVERLAPPED structure FreeMem(lpInBuffer); CloseHandle(hDevice); finally if not Result then RemoveDirectoryW(PWideChar(aSymlinkFileName)); end; end; function CreateSymLink(ATargetName, ALinkName: UnicodeString): Boolean; var dwAttributes : DWORD; begin Result:= False; dwAttributes := Windows.GetFileAttributesW(PWideChar(ATargetName)); if (dwAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then Result:= _CreateSymLink_Old(ATargetName, ALinkName) else if HasNewApi then Result:= _CreateSymLink_New(ATargetName, ALinkName); end; function ReadSymLink(aSymlinkFileName: UnicodeString; out aTargetFileName: UnicodeString): Boolean; var hDevice: THandle; dwFileAttributes: DWORD; caOutBuffer: array[0..4095] of Byte; lpOutBuffer: TReparseDataBuffer absolute caOutBuffer; pwcTargetFileName: PWideChar; lpBytesReturned: DWORD = 0; dwFlagsAndAttributes: DWORD; begin dwFileAttributes:= GetFileAttributesW(PWideChar(aSymlinkFileName)); Result:= dwFileAttributes <> FILE_DOES_NOT_EXIST; if Result then begin if (dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then dwFlagsAndAttributes:= FILE_FLAG_OPEN_REPARSE_POINT else dwFlagsAndAttributes:= FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OPEN_REPARSE_POINT; // Open reparse point hDevice:= CreateFileW(PWideChar(aSymlinkFileName), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, dwFlagsAndAttributes, 0); Result:= hDevice <> INVALID_HANDLE_VALUE; if not Result then Exit; Result:= DeviceIoControl(hDevice, // handle to file or directory FSCTL_GET_REPARSE_POINT, // dwIoControlCode nil, // input buffer 0, // size of input buffer @caOutBuffer, // lpOutBuffer SizeOf(caOutBuffer), // nOutBufferSize lpBytesReturned, // lpBytesReturned nil); // OVERLAPPED structure CloseHandle(hDevice); if Result then begin case lpOutBuffer.ReparseTag of IO_REPARSE_TAG_SYMLINK: with lpOutBuffer.SymbolicLinkReparseBuffer do begin pwcTargetFileName:= @PathBuffer[0]; pwcTargetFileName:= pwcTargetFileName + SubstituteNameOffset div SizeOf(WideChar); SetLength(aTargetFileName, SubstituteNameLength div SizeOf(WideChar)); CopyMemory(PWideChar(aTargetFileName), pwcTargetFileName, SubstituteNameLength); end; IO_REPARSE_TAG_MOUNT_POINT: with lpOutBuffer.MountPointReparseBuffer do begin pwcTargetFileName:= @PathBuffer[0]; pwcTargetFileName:= pwcTargetFileName + SubstituteNameOffset div SizeOf(WideChar); SetLength(aTargetFileName, SubstituteNameLength div SizeOf(WideChar)); CopyMemory(PWideChar(aTargetFileName), pwcTargetFileName, SubstituteNameLength); end; end; if Pos(wsNativeFileNamePrefix, aTargetFileName) = 1 then Delete(aTargetFileName, 1, Length(wsNativeFileNamePrefix)); end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/win/ushellcontextmenu.pas����������������������������������������������0000644�0001750�0000144�00000071763�12612650703�022240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Shell context menu implementation. Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 uShellContextMenu; {$mode delphi}{$H+} {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} {$POINTERMATH ON} {$ENDIF} interface uses Classes, SysUtils, Controls, uFile, Windows, ComObj, ShlObj, ActiveX, JwaShlGuid, uGlobs, uShlObjAdditional; const sCmdVerbOpen = 'open'; sCmdVerbRename = 'rename'; sCmdVerbDelete = 'delete'; sCmdVerbCut = 'cut'; sCmdVerbCopy = 'copy'; sCmdVerbPaste = 'paste'; sCmdVerbLink = 'link'; sCmdVerbProperties = 'properties'; sCmdVerbNewFolder = 'NewFolder'; type { EContextMenuException } EContextMenuException = class(Exception); { TShellContextMenu } TShellContextMenu = class private FOnClose: TNotifyEvent; FParent: TWinControl; FFiles: TFiles; FBackground: boolean; FShellMenu1: IContextMenu; FShellMenu: HMENU; FUserWishForContextMenu: TUserWishForContextMenu; public constructor Create(Parent: TWinControl; var Files: TFiles; Background: boolean; UserWishForContextMenu: TUserWishForContextMenu = uwcmComplete); reintroduce; destructor Destroy; override; procedure PopUp(X, Y: integer); property OnClose: TNotifyEvent read FOnClose write FOnClose; end; function GetShellContextMenu(Handle: HWND; Files: TFiles; Background: boolean): IContextMenu; implementation uses graphtype, intfgraphics, Graphics, uPixMapManager, uExts, LCLProc, Dialogs, uLng, uMyWindows, uShellExecute, fMain, uDCUtils, uFormCommands, DCOSUtils, uOSUtils, uShowMsg; const USER_CMD_ID = $1000; var OldWProc: WNDPROC = nil; ShellMenu2: IContextMenu2 = nil; ShellMenu3: IContextMenu3 = nil; ContextMenuDCIcon: Graphics.TBitmap = nil; ContextMenucm_FileAssoc: Graphics.TBitmap = nil; ContextMenucm_RunTerm: Graphics.TBitmap = nil; function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin case uiMsg of (* For working with submenu of context menu *) WM_INITMENUPOPUP, WM_DRAWITEM, WM_MENUCHAR, WM_MEASUREITEM: if Assigned(ShellMenu3) then ShellMenu3.HandleMenuMsg2(uiMsg, wParam, lParam, @Result) else if Assigned(ShellMenu2) then begin ShellMenu2.HandleMenuMsg(uiMsg, wParam, lParam); Result := 0; end else Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); else Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; // case end; function GetRecycleBinContextMenu(Handle: HWND): IContextMenu; var PathPIDL: PItemIDList = nil; DesktopFolder: IShellFolder; begin OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); OleCheckUTF8(SHGetSpecialFolderLocation(Handle, CSIDL_BITBUCKET, PathPIDL)); DesktopFolder.GetUIObjectOf(Handle, 1, PathPIDL, IID_IContextMenu, nil, Result); end; function GetForegroundContextMenu(Handle: HWND; Files: TFiles): IContextMenu; type PPIDLArray = ^PItemIDList; var Folder, DesktopFolder: IShellFolder; PathPIDL: PItemIDList = nil; tmpPIDL: PItemIDList = nil; S: WideString; List: PPIDLArray = nil; I: integer; pchEaten: ULONG; dwAttributes: ULONG = 0; begin Result := nil; OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); try List := CoTaskMemAlloc(SizeOf(PItemIDList) * Files.Count); ZeroMemory(List, SizeOf(PItemIDList) * Files.Count); for I := 0 to Files.Count - 1 do begin if Files[I].Name = EmptyStr then S := EmptyStr else S := UTF8Decode(Files[I].Path); OleCheckUTF8(DeskTopFolder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, PathPIDL, dwAttributes)); try OleCheckUTF8(DeskTopFolder.BindToObject(PathPIDL, nil, IID_IShellFolder, Folder)); finally CoTaskMemFree(PathPIDL); end; if Files[I].Name = EmptyStr then S := UTF8Decode(Files[I].Path) else S := UTF8Decode(Files[I].Name); OleCheckUTF8(Folder.ParseDisplayName(Handle, nil, PWideChar(S), pchEaten, tmpPIDL, dwAttributes)); (List + i)^ := tmpPIDL; end; Folder.GetUIObjectOf(Handle, Files.Count, PItemIDList(List^), IID_IContextMenu, nil, Result); finally if Assigned(List) then begin for I := 0 to Files.Count - 1 do if Assigned((List + i)^) then CoTaskMemFree((List + i)^); CoTaskMemFree(List); end; Folder := nil; DesktopFolder := nil; end; end; function GetBackgroundContextMenu(Handle: HWND; Files: TFiles): IContextMenu; var DesktopFolder, Folder: IShellFolder; wsFileName: WideString; PathPIDL: PItemIDList = nil; pchEaten: ULONG; dwAttributes: ULONG = 0; begin Result := nil; if Files.Count > 0 then begin wsFileName := UTF8Decode(Files[0].FullPath); OleCheckUTF8(SHGetDesktopFolder(DesktopFolder)); try OleCheckUTF8(DesktopFolder.ParseDisplayName(Handle, nil, PWideChar(wsFileName), pchEaten, PathPIDL, dwAttributes)); try OleCheckUTF8(DesktopFolder.BindToObject(PathPIDL, nil, IID_IShellFolder, Folder)); finally CoTaskMemFree(PathPIDL); end; OleCheckUTF8(Folder.CreateViewObject(Handle, IID_IContextMenu, Result)); finally Folder := nil; DesktopFolder := nil; end; end; end; function GetShellContextMenu(Handle: HWND; Files: TFiles; Background: boolean): IContextMenu; inline; begin if Files = nil then Result := GetRecycleBinContextMenu(Handle) else if Background then Result := GetBackgroundContextMenu(Handle, Files) else Result := GetForegroundContextMenu(Handle, Files); end; type { TShellThread } TShellThread = class(TThread) private FParent: HWND; FVerb: ansistring; FShellMenu: IContextMenu; protected procedure Execute; override; public constructor Create(Parent: HWND; ShellMenu: IContextMenu; Verb: ansistring); reintroduce; destructor Destroy; override; end; { TShellThread } procedure TShellThread.Execute; var Result: HRESULT; cmici: TCMINVOKECOMMANDINFO; begin CoInitializeEx(nil, COINIT_APARTMENTTHREADED); try FillByte(cmici, SizeOf(cmici), 0); with cmici do begin cbSize := SizeOf(cmici); hwnd := FParent; lpVerb := PAnsiChar(FVerb); nShow := SW_NORMAL; end; Result := FShellMenu.InvokeCommand(cmici); if not (Succeeded(Result) or (Result = COPYENGINE_E_USER_CANCELLED)) then msgError(Self, mbSysErrorMessage(Result)); finally CoUninitialize; end; end; constructor TShellThread.Create(Parent: HWND; ShellMenu: IContextMenu; Verb: ansistring); begin inherited Create(True); FVerb := Verb; FParent := Parent; FShellMenu := ShellMenu; FreeOnTerminate := True; end; destructor TShellThread.Destroy; begin FShellMenu := nil; inherited Destroy; end; procedure CreateActionSubMenu(MenuWhereToAdd: HMenu; paramExtActionList: TExtActionList; aFile: TFile; bIncludeViewEdit: boolean); const Always_Legacy_Action_Count = 2; DCIconRequired = True; var I, iDummy: integer; sAct: String; iMenuPositionInsertion: integer = 0; Always_Expanded_Action_Count: integer = 0; liiSource: TLazIntfImage = nil; liiDestination: TLazIntfImage = nil; ImgFormatDescription: TRawImageDescription; bSeparatorAlreadyInserted: boolean; function GetMeTheBitmapForThis(ImageRequiredIndex: PtrInt): TBitmap; begin Result := Graphics.TBitmap.Create; Result.SetSize(gIconsSize, gIconsSize); Result.Transparent := True; Result.Canvas.Brush.Color := clMenu; Result.Canvas.Brush.Style := bsSolid; Result.Canvas.FillRect(0, 0, gIconsSize, gIconsSize); PixMapManager.DrawBitmap(ImageRequiredIndex, Result.Canvas, 0, 0); if Result.PixelFormat <> pf32bit then begin liiSource := Result.CreateIntfImage; liiDestination := TLazIntfImage.Create(gIconsSize, gIconsSize); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(gIconsSize, gIconsSize); liiDestination.DataDescription := ImgFormatDescription; liiDestination.CopyPixels(liiSource); Result.FreeImage; Result.PixelFormat := pf32bit; Result.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; end; procedure LocalInsertMenuSeparator; begin InsertMenuItemEx(MenuWhereToAdd, 0, nil, iMenuPositionInsertion, 0, MFT_SEPARATOR); Inc(iMenuPositionInsertion); end; procedure LocalInsertMenuItemExternal(MenuDispatcher: integer; BitmapProvided: TBitmap = nil); begin if BitmapProvided = nil then InsertMenuItemEx(MenuWhereToAdd, 0, PWChar(UTF8Decode(paramExtActionList.ExtActionCommand[MenuDispatcher].ActionName)), iMenuPositionInsertion, MenuDispatcher + USER_CMD_ID, MFT_STRING, paramExtActionList.ExtActionCommand[MenuDispatcher].IconBitmap) else InsertMenuItemEx(MenuWhereToAdd, 0, PWChar(UTF8Decode(paramExtActionList.ExtActionCommand[MenuDispatcher].ActionName)), iMenuPositionInsertion, MenuDispatcher + USER_CMD_ID, MFT_STRING, BitmapProvided); Inc(iMenuPositionInsertion); end; begin // Read actions from "extassoc.xml" if not gExtendedContextMenu then gExts.GetExtActions(aFile, paramExtActionList, @iDummy, False) else gExts.GetExtActions(aFile, paramExtActionList, @iDummy, True); if not gExtendedContextMenu then begin // In non expanded context menu (legacy), the order of items is: // 1o) View (always) // 2o) Edit (always) // 3o) Custom action different then Open, View or Edit (if any, add also a separator just before) I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView, '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit, '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); if paramExtActionList.Count > Always_Legacy_Action_Count then begin bSeparatorAlreadyInserted := false; for I := 0 to (pred(paramExtActionList.Count) - Always_Legacy_Action_Count) do begin sAct := paramExtActionList.ExtActionCommand[I].ActionName; if (CompareText('OPEN', sAct) <> 0) and (CompareText('VIEW', sAct) <> 0) and (CompareText('EDIT', sAct) <> 0) then begin if not bSeparatorAlreadyInserted then begin LocalInsertMenuSeparator; bSeparatorAlreadyInserted := true; end; LocalInsertMenuItemExternal(I); end; end; end; end else begin // In expanded context menu, the order of items is: // 1o) View (always, and if "external" is used, shows also the "internal" if user wants it. // 2o) Edit (always, and if "external" is used, shows also the "internal" if user wants it. // 3o) Custom actions, no matter is open, view or edit (if any, add also a separator just before). // These will be shown in the same order as what they are configured in File Association. // The routine "GetExtActions" has already placed them in the wanted order. // Also, the routine "GetExtActions" has already included the menu separator ('-') between different "TExtAction". // 4o) We add the Execute via shell if user requested it. // 5o) We add the Execute via terminal if user requested it (close and then stay open). // 6o) Still if user requested it, the shortcut run file association configuration, if user wanted it. // A separator also prior that last action. // Let's prepare our icon for extended menu if not already prepaed during the session. if ContextMenuDCIcon = nil then ContextMenuDCIcon := GetMeTheBitmapForThis(gFiOwnDCIcon); if ContextMenucm_FileAssoc = nil then ContextMenucm_FileAssoc := GetMeTheBitmapForThis(PixMapManager.GetIconByName('cm_fileassoc')); if ContextMenucm_RunTerm = nil then ContextMenucm_RunTerm := GetMeTheBitmapForThis(PixMapManager.GetIconByName('cm_runterm')); // If the external generic viewer is configured, offer it. if gExternalTools[etViewer].Enabled then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView + ' (' + rsViewWithExternalViewer + ')', '{!VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); Inc(Always_Expanded_Action_Count); end; // Make sure we always shows our internal viewer I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuView + ' (' + rsViewWithInternalViewer + ')', '{!DC-VIEWER}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenuDCIcon); Inc(Always_Expanded_Action_Count); // If the external generic editor is configured, offer it. if gExternalTools[etEditor].Enabled then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit + ' (' + rsEditWithExternalEditor + ')', '{!EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); Inc(Always_Expanded_Action_Count); end; // Make sure we always shows our internal editor I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuEdit + ' (' + rsEditWithInternalEditor + ')', '{!DC-EDITOR}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenuDCIcon); Inc(Always_Expanded_Action_Count); // Now let's add the action button if paramExtActionList.Count > Always_Expanded_Action_Count then begin LocalInsertMenuSeparator; for I := 0 to (pred(paramExtActionList.Count) - Always_Expanded_Action_Count) do begin if paramExtActionList.ExtActionCommand[I].ActionName <> '-' then begin sAct := paramExtActionList.ExtActionCommand[I].ActionName; if (CompareText('OPEN', sAct) = 0) or (CompareText('VIEW', sAct) = 0) or (CompareText('EDIT', sAct) = 0) then sAct := sAct + ' (' + ExtractFilename(paramExtActionList.ExtActionCommand[I].CommandName) + ')'; if paramExtActionList.ExtActionCommand[I].IconIndex <> -1 then begin paramExtActionList.ExtActionCommand[I].IconBitmap := Graphics.TBitmap.Create; paramExtActionList.ExtActionCommand[I].IconBitmap.SetSize(gIconsSize, gIconsSize); paramExtActionList.ExtActionCommand[I].IconBitmap.Transparent := True; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.Brush.Color := clMenu; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.Brush.Style := bsSolid; paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas.FillRect(0, 0, gIconsSize, gIconsSize); PixMapManager.DrawBitmap(paramExtActionList.ExtActionCommand[I].IconIndex, paramExtActionList.ExtActionCommand[I].IconBitmap.Canvas, 0, 0); if paramExtActionList.ExtActionCommand[I].IconBitmap.PixelFormat <> pf32bit then begin liiSource := paramExtActionList.ExtActionCommand[I].IconBitmap.CreateIntfImage; liiDestination := TLazIntfImage.Create(gIconsSize, gIconsSize); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(gIconsSize, gIconsSize); liiDestination.DataDescription := ImgFormatDescription; liiDestination.CopyPixels(liiSource); paramExtActionList.ExtActionCommand[I].IconBitmap.FreeImage; paramExtActionList.ExtActionCommand[I].IconBitmap.PixelFormat := pf32bit; paramExtActionList.ExtActionCommand[I].IconBitmap.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; end; LocalInsertMenuItemExternal(I); end else begin LocalInsertMenuSeparator; end; end; end; if gOpenExecuteViaShell or gExecuteViaTerminalClose or gExecuteViaTerminalStayOpen then LocalInsertMenuSeparator; // now add various SHELL item if gOpenExecuteViaShell then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsMnuOpen + ' (' + rsExecuteViaShell + ')', '{!SHELL}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I); end; if gExecuteViaTerminalClose then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalClose, '{!TERMANDCLOSE}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenucm_RunTerm); end; if gExecuteViaTerminalStayOpen then begin I := paramExtActionList.Add(TExtActionCommand.Create(rsExecuteViaTerminalStayOpen, '{!TERMSTAYOPEN}', QuoteStr(aFile.FullPath), '')); LocalInsertMenuItemExternal(I, ContextMenucm_RunTerm); end; // Add shortcut to launch file association configuration screen if gIncludeFileAssociation then begin LocalInsertMenuSeparator; I := paramExtActionList.Add(TExtActionCommand.Create(rsConfigurationFileAssociation, 'cm_FileAssoc', '', '')); LocalInsertMenuItemExternal(I, ContextMenucm_FileAssoc); end; end; end; { TShellContextMenu } { TShellContextMenu.Create } constructor TShellContextMenu.Create(Parent: TWinControl; var Files: TFiles; Background: boolean; UserWishForContextMenu: TUserWishForContextMenu); var UFlags: UINT = CMF_EXPLORE; begin // Replace window procedure {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtr(Parent.Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} FParent := Parent; FFiles := Files; FBackground := Background; FShellMenu := 0; FUserWishForContextMenu := UserWishForContextMenu; if Assigned(Files) then begin UFlags := UFlags or CMF_CANRENAME; end; // Add extended verbs if shift key is down if (ssShift in GetKeyShiftState) then begin UFlags := UFlags or CMF_EXTENDEDVERBS; end; try try FShellMenu1 := GetShellContextMenu(Parent.Handle, Files, Background); if Assigned(FShellMenu1) then begin FShellMenu := CreatePopupMenu; if FUserWishForContextMenu = uwcmComplete then OleCheckUTF8(FShellMenu1.QueryContextMenu(FShellMenu, 0, 1, USER_CMD_ID - 1, UFlags)); FShellMenu1.QueryInterface(IID_IContextMenu2, ShellMenu2); // to handle submenus. FShellMenu1.QueryInterface(IID_IContextMenu3, ShellMenu3); // to handle submenus. end; except on e: EOleError do raise EContextMenuException.Create(e.Message); end; finally Files := nil; end; end; destructor TShellContextMenu.Destroy; begin // Restore window procedure {$PUSH}{$HINTS OFF} SetWindowLongPtr(FParent.Handle, GWL_WNDPROC, LONG_PTR(@OldWProc)); {$POP} // Free global variables ShellMenu2 := nil; ShellMenu3 := nil; // Free internal objects FShellMenu1 := nil; FreeThenNil(FFiles); if FShellMenu <> 0 then DestroyMenu(FShellMenu); inherited Destroy; end; procedure TShellContextMenu.PopUp(X, Y: integer); var aFile: TFile = nil; i: integer; hActionsSubMenu: HMENU = 0; cmd: UINT = 0; iCmd: integer; cmici: TCMINVOKECOMMANDINFO; bHandled: boolean = False; ZVerb: array[0..255] of char; sVerb: string; Result: HRESULT; FormCommands: IFormCommands; InnerExtActionList: TExtActionList = nil; UserSelectedCommand: TExtActionCommand = nil; sVolumeLabel: string; begin try try if Assigned(FShellMenu1) then try FormCommands := frmMain as IFormCommands; if Assigned(FFiles) then begin aFile := FFiles[0]; if FBackground then // Add "Background" context menu specific items begin InnerExtActionList := TExtActionList.Create; // Add commands to root of context menu I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_Refresh'), 'cm_Refresh', '', '')); InsertMenuItemEx(FShellMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add "Sort by" submenu hActionsSubMenu := CreatePopupMenu; I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_ReverseOrder'), 'cm_ReverseOrder', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add separator InsertMenuItemEx(hActionsSubMenu, 0, nil, 0, 0, MFT_SEPARATOR); // Add "Sort by" items I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByAttr'), 'cm_SortByAttr', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByDate'), 'cm_SortByDate', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortBySize'), 'cm_SortBySize', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByExt'), 'cm_SortByExt', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_SortByName'), 'cm_SortByName', '', '')); InsertMenuItemEx(hActionsSubMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 0, I + USER_CMD_ID, MFT_STRING); // Add submenu to context menu InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(UTF8Decode(rsMnuSortBy)), 1, 333, MFT_STRING); // Add menu separator InsertMenuItemEx(FShellMenu, 0, nil, 2, 0, MFT_SEPARATOR); // Add commands to root of context menu I := InnerExtActionList.Add(TExtActionCommand.Create(FormCommands.GetCommandCaption('cm_PasteFromClipboard'), 'cm_PasteFromClipboard', '', '')); InsertMenuItemEx(FShellMenu, 0, PWideChar(UTF8Decode(InnerExtActionList.ExtActionCommand[I].ActionName)), 3, I + USER_CMD_ID, MFT_STRING); // Add menu separator InsertMenuItemEx(FShellMenu, 0, nil, 4, 0, MFT_SEPARATOR); end else // Add "Actions" submenu begin InnerExtActionList := TExtActionList.Create; if FUserWishForContextMenu = uwcmComplete then begin hActionsSubMenu := CreatePopupMenu; CreateActionSubMenu(hActionsSubMenu, InnerExtActionList, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); end else begin CreateActionSubMenu(FShellMenu, InnerExtActionList, aFile, ((FFiles.Count = 1) and not (aFile.IsDirectory or aFile.IsLinkToDirectory))); end; // Add Actions submenu (Will never be empty, we always have View and Edit...) iCmd := GetMenuItemCount(FShellMenu) - 1; for I := 0 to iCmd do begin if GetMenuItemType(FShellMenu, I, True) = MFT_SEPARATOR then Break; end; if FUserWishForContextMenu = uwcmComplete then InsertMenuItemEx(FShellMenu, hActionsSubMenu, PWideChar(UTF8Decode(rsMnuActions)), I, 333, MFT_STRING); end; { /Actions submenu } end; //------------------------------------------------------------------------------ cmd := UINT(TrackPopupMenu(FShellMenu, TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or TPM_RETURNCMD, X, Y, 0, FParent.Handle, nil)); finally if hActionsSubMenu <> 0 then DestroyMenu(hActionsSubMenu); end; if (cmd > 0) and (cmd < USER_CMD_ID) then begin iCmd := longint(Cmd) - 1; if Succeeded(FShellMenu1.GetCommandString(iCmd, GCS_VERBA, nil, ZVerb, SizeOf(ZVerb))) then begin sVerb := StrPas(ZVerb); if SameText(sVerb, sCmdVerbRename) then begin if FFiles.Count = 1 then with FFiles[0] do begin if not SameText(FullPath, ExtractFileDrive(FullPath) + PathDelim) then frmMain.actRenameOnly.Execute else // change drive label begin sVolumeLabel := mbGetVolumeLabel(FullPath, True); if InputQuery(rsMsgSetVolumeLabel, rsMsgVolumeLabel, sVolumeLabel) then mbSetVolumeLabel(FullPath, sVolumeLabel); end; end else frmMain.actRename.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbCut) then begin frmMain.actCutToClipboard.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbCopy) then begin frmMain.actCopyToClipboard.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbNewFolder) then begin frmMain.actMakeDir.Execute; bHandled := True; end else if SameText(sVerb, sCmdVerbPaste) or SameText(sVerb, sCmdVerbDelete) then begin TShellThread.Create(FParent.Handle, FShellMenu1, sVerb).Start; bHandled := True; end; end; if not bHandled then begin FillChar(cmici, SizeOf(cmici), #0); with cmici do begin cbSize := SizeOf(cmici); hwnd := FParent.Handle; {$PUSH}{$HINTS OFF} lpVerb := PAnsiChar(PtrUInt(cmd - 1)); {$POP} nShow := SW_NORMAL; end; Result := FShellMenu1.InvokeCommand(cmici); if not (Succeeded(Result) or (Result = COPYENGINE_E_USER_CANCELLED)) then OleErrorUTF8(Result); // Reload after possible changes on the filesystem. if SameText(sVerb, sCmdVerbLink) or SameText(sVerb, sCmdVerbDelete) then frmMain.ActiveFrame.FileSource.Reload(frmMain.ActiveFrame.CurrentPath); end; end // if cmd > 0 else if (cmd >= USER_CMD_ID) then // actions sub menu begin if (cmd - USER_CMD_ID) < InnerExtActionList.Count then UserSelectedCommand := InnerExtActionList.ExtActionCommand[cmd - USER_CMD_ID].CloneExtAction; if FBackground then begin if SameText(UserSelectedCommand.CommandName, 'cm_PasteFromClipboard') then TShellThread.Create(FParent.Handle, FShellMenu1, sCmdVerbPaste).Start else FormCommands.ExecuteCommand(UserSelectedCommand.CommandName, []); bHandled := True; end else begin try with frmMain.ActiveFrame do begin try //For the %-Variable replacement that follows it might sounds incorrect to do it with "nil" instead of "aFile", //but original code was like that. It is useful, at least, when more than one file is selected so because of that, //it's pertinent and should be kept! ProcessExtCommandFork(UserSelectedCommand.CommandName, UserSelectedCommand.Params, UserSelectedCommand.StartPath, nil); except on e: EInvalidCommandLine do MessageDlg(rsMsgErrorInContextMenuCommand, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; finally bHandled := True; end; end; end; finally if Assigned(InnerExtActionList) then FreeAndNil(InnerExtActionList); if Assigned(UserSelectedCommand) then FreeAndNil(UserSelectedCommand); if Assigned(ContextMenuDCIcon) then FreeAndNil(ContextMenuDCIcon); end; except on e: EOleError do raise EContextMenuException.Create(e.Message); end; if Assigned(FOnClose) then FOnClose(Self); end; end. �������������doublecmd-0.7.1/src/platform/win/uexceptionhandlerfix.pas�������������������������������������������0000644�0001750�0000144�00000013750�11740433676�022703� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Replaces Free Pascal exception handler Fixes bug: http://doublecmd.sourceforge.net/mantisbt/view.php?id=50 Uses workaround from: http://bugs.freepascal.org/view.php?id=17280 http://bugs.freepascal.org/view.php?id=12974 } unit uExceptionHandlerFix; {$mode delphi} interface implementation uses Windows, SysUtils; type M128A = record Low : QWord; High : Int64; end; PContext = ^TContext; TContext = record P1Home : QWord; P2Home : QWord; P3Home : QWord; P4Home : QWord; P5Home : QWord; P6Home : QWord; ContextFlags : DWord; MxCsr : DWord; SegCs : word; SegDs : word; SegEs : word; SegFs : word; SegGs : word; SegSs : word; EFlags : DWord; Dr0 : QWord; Dr1 : QWord; Dr2 : QWord; Dr3 : QWord; Dr6 : QWord; Dr7 : QWord; Rax : QWord; Rcx : QWord; Rdx : QWord; Rbx : QWord; Rsp : QWord; Rbp : QWord; Rsi : QWord; Rdi : QWord; R8 : QWord; R9 : QWord; R10 : QWord; R11 : QWord; R12 : QWord; R13 : QWord; R14 : QWord; R15 : QWord; Rip : QWord; Header : array[0..1] of M128A; Legacy : array[0..7] of M128A; Xmm0 : M128A; Xmm1 : M128A; Xmm2 : M128A; Xmm3 : M128A; Xmm4 : M128A; Xmm5 : M128A; Xmm6 : M128A; Xmm7 : M128A; Xmm8 : M128A; Xmm9 : M128A; Xmm10 : M128A; Xmm11 : M128A; Xmm12 : M128A; Xmm13 : M128A; Xmm14 : M128A; Xmm15 : M128A; VectorRegister : array[0..25] of M128A; VectorControl : QWord; DebugControl : QWord; LastBranchToRip : QWord; LastBranchFromRip : QWord; LastExceptionToRip : QWord; LastExceptionFromRip : QWord; end; type PExceptionRecord = ^TExceptionRecord; TExceptionRecord = record ExceptionCode : DWord; ExceptionFlags : DWord; ExceptionRecord : PExceptionRecord; ExceptionAddress : Pointer; NumberParameters : DWord; ExceptionInformation : array[0..EXCEPTION_MAXIMUM_PARAMETERS-1] of Pointer; end; PExceptionPointers = ^TExceptionPointers; TExceptionPointers = packed record ExceptionRecord : PExceptionRecord; ContextRecord : PContext; end; type PVectoredExceptionNode = ^TVectoredExceptionNode; TVectoredExceptionNode = record m_pNextNode: PVectoredExceptionNode; m_pPreviousNode: PVectoredExceptionNode; m_Unknown: Pointer; m_pfnVectoredHandler: Pointer; end; function AddVectoredExceptionHandler(FirstHandler: ULONG; VectoredHandler: Pointer): Pointer; stdcall; external 'kernel32.dll' name 'AddVectoredExceptionHandler'; function RemoveVectoredExceptionHandler(VectoredHandlerHandle: Pointer): ULONG; stdcall; external 'kernel32.dll' name 'RemoveVectoredExceptionHandler'; function GetModuleHandleEx(dwFlags: DWORD; lpModuleName: Pointer; var hModule: THandle): BOOL; stdcall; external 'kernel32.dll' name 'GetModuleHandleExA'; function RtlEncodePointer(pfnVectoredHandler: Pointer): Pointer; stdcall; external 'ntdll' name 'RtlEncodePointer'; const GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2; GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4; // These entries are linked from FPC's RTL. // If the RTL changes, the entries should be changed accordingly. function syswin64_x86_64_exception_handler(excep : pointer) : Longint; external name 'SYSTEM_SYSWIN64_X86_64_EXCEPTION_HANDLER$PEXCEPTIONPOINTERS$$LONGINT'; var _fltused: int64 external name '_fltused'; // Test if the exception address resides in our program. function CheckOurModule(p: Pointer): boolean; var ModuleWithException: THandle; OurModule: THandle; Flags: DWORD; begin Result := False; { It's necessary to keep refcount intact. } Flags := GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS or GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT; with PExceptionPointers(p)^.ExceptionRecord^ do Result := GetModuleHandleEx(Flags, ExceptionAddress, ModuleWithException) and GetModuleHandleEx(Flags, @CheckOurModule, OurModule) and (ModuleWithException = OurModule); end; function ProcessException(p: Pointer): longint; stdcall; var _SS: PCardinal; Saved: TExceptionRecord; begin Result := EXCEPTION_CONTINUE_SEARCH; if CheckOurModule(p) then begin Saved := PExceptionPointers(p)^.ExceptionRecord^; with PExceptionPointers(p)^.ExceptionRecord^ do begin // Dirty hack - in system.pp, private variable _SS is just after public _fltused. This might change in the future. _SS := @_fltused; inc(PBYTE(_SS), sizeof(int64)); _SS^ := PExceptionPointers(p)^.ContextRecord^.SegSs; // Trying to unwind the stack in FPC's way - by walking the linked list of exception handers. Result := syswin64_x86_64_exception_handler(p); end; if Result <> 0 then begin // The FPC's unwind failed for some reason. // Restoring the Exception record, so the program's exception handlers can try to recover from the exception. PExceptionPointers(p)^.ExceptionRecord^ := Saved; // You can insert some kind of logging etc here. // ... end; end; end; var VectoredExceptionHandler: PVectoredExceptionNode = nil; procedure InstallExceptionHandler; var HandlerAddress: Pointer; Node: PVectoredExceptionNode; begin // Get Free Pascal exception handler encoded address HandlerAddress := RtlEncodePointer(@syswin64_x86_64_exception_handler); VectoredExceptionHandler := AddVectoredExceptionHandler(1, @ProcessException); // Find Free Pascal exception handler and remove it Node:= VectoredExceptionHandler^.m_pNextNode; repeat if (Node^.m_pfnVectoredHandler = HandlerAddress) then begin RemoveVectoredExceptionHandler(Node); Break; end; Node := Node^.m_pNextNode; until (Node = nil); end; procedure UninstallExceptionHandler; begin if Assigned(VectoredExceptionHandler) then begin RemoveVectoredExceptionHandler(VectoredExceptionHandler); VectoredExceptionHandler := nil; end; end; initialization InstallExceptionHandler; finalization UninstallExceptionHandler; end. ������������������������doublecmd-0.7.1/src/platform/udefaultplugins.pas����������������������������������������������������0000644�0001750�0000144�00000026051�12615100354�021051� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Some useful functions to work with plugins Copyright (C) 2011-2014 Alexander Koblov (alexx2000@mail.ru) 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 uDefaultPlugins; {$mode objfpc}{$H+} interface uses Classes, SysUtils; const WcxMask = '*.wcx'{$IFDEF CPU64} + ';*.wcx64'{$ENDIF}; WdxMask = '*.wdx'{$IFDEF CPU64} + ';*.wdx64'{$ENDIF}; WfxMask = '*.wfx'{$IFDEF CPU64} + ';*.wfx64'{$ENDIF}; WlxMask = '*.wlx'{$IFDEF CPU64} + ';*.wlx64'{$ENDIF}; type TBinaryType = (btUnknown, btPe32, btPe64, btElf32, btElf64, btMacho32, btMacho64); const PluginBinaryType = {$IF DEFINED(WIN32)} btPe32 {$ELSEIF DEFINED(WIN64)} btPe64 {$ELSEIF DEFINED(DARWIN) AND DEFINED(CPU32)} btMacho32 {$ELSEIF DEFINED(DARWIN) AND DEFINED(CPU64)} btMacho64 {$ELSEIF DEFINED(UNIX) AND DEFINED(CPU32)} btElf32 {$ELSEIF DEFINED(UNIX) AND DEFINED(CPU64)} btElf64 {$ELSE} btUnknown {$ENDIF} ; PluginBinaryTypeString: array[TBinaryType] of String = ( 'Unknown', 'Windows 32 bit', 'Windows 64 bit', 'Unix 32 bit', 'Unix 64 bit', 'Mac OS X 32 bit', 'Mac OS X 64 bit' ); procedure UpdatePlugins; function CheckPlugin(var FileName: String): Boolean; function GetPluginBinaryType(const FileName: String): TBinaryType; implementation uses Forms, Dialogs, DCOSUtils, DCStrUtils, DCClassesUtf8, uGlobs, uLng; procedure UpdatePlugins; var I: Integer; Folder: String; begin // Wcx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wcx' + PathDelim; I:= gWCXPlugins.IndexOfName('zip'); if I < 0 then gWCXPlugins.Add('zip', 735, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 735; {$IF DEFINED(MSWINDOWS)} I:= gWCXPlugins.IndexOfName('7z'); if I < 0 then gWCXPlugins.Add('7z', 607, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); {$ENDIF} I:= gWCXPlugins.IndexOfName('tar'); if I < 0 then gWCXPlugins.Add('tar', 223, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 223; I:= gWCXPlugins.IndexOfName('bz2'); if I < 0 then gWCXPlugins.Add('bz2', 91, Folder + 'zip' + PathDelim + 'zip.wcx') else begin gWCXPlugins.Flags[I]:= 91; // For bz2 used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'zip' + PathDelim + 'zip.wcx'; end; I:= gWCXPlugins.IndexOfName('tbz'); if I < 0 then gWCXPlugins.Add('tbz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; I:= gWCXPlugins.IndexOfName('gz'); if I < 0 then gWCXPlugins.Add('gz', 91, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 91; I:= gWCXPlugins.IndexOfName('tgz'); if I < 0 then gWCXPlugins.Add('tgz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; I:= gWCXPlugins.IndexOfName('lzma'); if I < 0 then gWCXPlugins.Add('lzma', 1, Folder + 'zip' + PathDelim + 'zip.wcx') else begin gWCXPlugins.Flags[I]:= 1; // For lzma used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'zip' + PathDelim + 'zip.wcx'; end; I:= gWCXPlugins.IndexOfName('tlz'); if I < 0 then gWCXPlugins.Add('tlz', 95, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 95; {$IF NOT DEFINED(DARWIN)} I:= gWCXPlugins.IndexOfName('xz'); if I < 0 then gWCXPlugins.Add('xz', 91, Folder + 'zip' + PathDelim + 'zip.wcx'); I:= gWCXPlugins.IndexOfName('txz'); if I < 0 then gWCXPlugins.Add('txz', 95, Folder + 'zip' + PathDelim + 'zip.wcx'); I:= gWCXPlugins.IndexOfName('zipx'); if I < 0 then gWCXPlugins.Add('zipx', 212, Folder + 'zip' + PathDelim + 'zip.wcx') else gWCXPlugins.Flags[I]:= 212; {$ENDIF} {$IF DEFINED(MSWINDOWS)} I:= gWCXPlugins.IndexOfName('cpio'); if I < 0 then gWCXPlugins.Add('cpio', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx') else begin gWCXPlugins.Flags[I]:= 4; // For cpio used another plugin, so update path too gWCXPlugins.FileName[I]:= Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'; end; I:= gWCXPlugins.IndexOfName('arj'); if I < 0 then gWCXPlugins.Add('arj', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('cab'); if I < 0 then gWCXPlugins.Add('cab', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('cramfs'); if I < 0 then gWCXPlugins.Add('cramfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('dmg'); if I < 0 then gWCXPlugins.Add('dmg', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('fat'); if I < 0 then gWCXPlugins.Add('fat', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('hfs'); if I < 0 then gWCXPlugins.Add('hfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('iso'); if I < 0 then gWCXPlugins.Add('iso', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('lha'); if I < 0 then gWCXPlugins.Add('lha', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('lzh'); if I < 0 then gWCXPlugins.Add('lzh', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('ntfs'); if I < 0 then gWCXPlugins.Add('ntfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('squashfs'); if I < 0 then gWCXPlugins.Add('squashfs', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('taz'); if I < 0 then gWCXPlugins.Add('taz', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('vhd'); if I < 0 then gWCXPlugins.Add('vhd', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('wim'); if I < 0 then gWCXPlugins.Add('wim', 85, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('xar'); if I < 0 then gWCXPlugins.Add('xar', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); I:= gWCXPlugins.IndexOfName('z'); if I < 0 then gWCXPlugins.Add('z', 4, Folder + 'sevenzip' + PathDelim + 'sevenzip.wcx'); {$ELSE} I:= gWCXPlugins.IndexOfName('cpio'); if I < 0 then gWCXPlugins.Add('cpio', 4, Folder + 'cpio' + PathDelim + 'cpio.wcx') else gWCXPlugins.Flags[I]:= 4; {$ENDIF} I:= gWCXPlugins.IndexOfName('deb'); if I < 0 then gWCXPlugins.Add('deb', 4, Folder + 'deb' + PathDelim + 'deb.wcx') else gWCXPlugins.Flags[I]:= 4; I:= gWCXPlugins.IndexOfName('rpm'); if I < 0 then gWCXPlugins.Add('rpm', 4, Folder + 'rpm' + PathDelim + 'rpm.wcx') else gWCXPlugins.Flags[I]:= 4; I:= gWCXPlugins.IndexOfName('rar'); {$IF DEFINED(MSWINDOWS)} if I < 0 then gWCXPlugins.Add('rar', 607, Folder + 'unrar' + PathDelim + 'unrar.wcx') else gWCXPlugins.Flags[I]:= 607; {$ELSE} if I < 0 then gWCXPlugins.Add('rar', 68, Folder + 'unrar' + PathDelim + 'unrar.wcx') else gWCXPlugins.Flags[I]:= 68; {$ENDIF} // Wdx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wdx' + PathDelim; if gWdxPlugins.IndexOfName('deb_wdx') < 0 then begin gWdxPlugins.Add('deb_wdx', Folder + 'deb_wdx' + PathDelim + 'deb_wdx.wdx', 'EXT="DEB"'); end; if gWdxPlugins.IndexOfName('rpm_wdx') < 0 then begin gWdxPlugins.Add('rpm_wdx', Folder + 'rpm_wdx' + PathDelim + 'rpm_wdx.wdx', 'EXT="RPM"'); end; // Wfx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wfx' + PathDelim; if gWFXPlugins.IndexOfName('FTP') < 0 then begin gWFXPlugins.Add('FTP', Folder + 'ftp' + PathDelim + 'ftp.wfx'); end; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if gWFXPlugins.IndexOfName('Windows Network') < 0 then begin gWFXPlugins.Add('Windows Network', Folder + 'samba' + PathDelim + 'samba.wfx'); end; {$ENDIF} {$IF DEFINED(LINUX)} // Wlx plugins Folder:= '%commander_path%' + PathDelim + 'plugins' + PathDelim + 'wlx' + PathDelim; I:= gWlxPlugins.IndexOfName('wlxMplayer'); if I >= 0 then begin gWlxPlugins.GetWlxModule(I).FileName:= Folder + 'wlxmplayer' + PathDelim + 'wlxmplayer.wlx'; end; {$ENDIF} end; function CheckPlugin(var FileName: String): Boolean; var PluginType: TBinaryType; begin {$IF DEFINED(CPU64)} if (StrEnds(FileName, '64') = False) and mbFileExists(FileName + '64') then begin FileName:= FileName + '64'; end; {$ENDIF} PluginType:= GetPluginBinaryType(FileName); case PluginType of PluginBinaryType: Exit(True); btUnknown: MessageDlg(Application.Title, rsMsgInvalidPlugin, mtError, [mbOK], 0, mbOK); else MessageDlg(Application.Title, Format(rsMsgInvalidPluginArchitecture, [ PluginBinaryTypeString[PluginType], LineEnding, PluginBinaryTypeString[PluginBinaryType] ]), mtError, [mbOK], 0, mbOK); end; Result:= False; end; function GetPluginBinaryType(const FileName: String): TBinaryType; var fsFileStream: TFileStreamEx; begin try fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try // Check Windows executable if fsFileStream.ReadWord = $5A4D then // 'MZ' begin fsFileStream.Seek(60, soBeginning); fsFileStream.Seek(fsFileStream.ReadDWord, soBeginning); if fsFileStream.ReadDWord = $4550 then // 'PE' begin fsFileStream.Seek(20, soCurrent); case fsFileStream.ReadWord of $10B: Exit(btPe32); // 32 bit $20B: Exit(btPe64); // 64 bit end; end; end; fsFileStream.Seek(0, soBeginning); // Check Unix executable if fsFileStream.ReadDWord = $464C457F then // 'ELF' begin case fsFileStream.ReadByte of 1: Exit(btElf32); // 32 bit 2: Exit(btElf64); // 64 bit end; end; fsFileStream.Seek(0, soBeginning); // Check Darwin executable case fsFileStream.ReadDWord of $feedface, $cefaedfe: Exit(btMacho32); // 32 bit $feedfacf, $cffaedfe: Exit(btMacho64); // 64 bit end; Result:= btUnknown; finally fsFileStream.Free; end; except Result:= btUnknown; end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/udragdropcocoa.pas�����������������������������������������������������0000644�0001750�0000144�00000006626�12451562014�020643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Drag&Drop operations for Cocoa. Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 uDragDropCocoa; {$mode objfpc}{$H+} {$modeswitch objectivec1} interface uses Classes, SysUtils, Controls, uDragDropEx; type TDragDropSourceCocoa = class(TDragDropSource) function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; end; implementation uses CocoaAll; { ---------- TDragDropSourceCocoa ---------- } function TDragDropSourceCocoa.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled in Cocoa. Result := True; end; function TDragDropSourceCocoa.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var I: Integer; Window: NSWindow; DragIcon: NSImage; DragPoint: NSPoint; FileList: NSMutableArray; PasteBoard: NSPasteboard; begin Result := False; // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; FileList:= NSMutableArray.arrayWithCapacity(FileNamesList.Count); for I:= 0 to FileNamesList.Count - 1 do begin FileList.addObject(NSSTR(PAnsiChar(FileNamesList[I]))); end; DragPoint.x:= ScreenStartPoint.X; DragPoint.y:= ScreenStartPoint.Y; Window:= NSApplication.sharedApplication.keyWindow; PasteBoard:= NSPasteboard.pasteboardWithName(NSDragPboard); PasteBoard.declareTypes_owner(NSArray.arrayWithObject(NSFileNamesPboardType), nil); PasteBoard.setPropertyList_forType(FileList, NSFileNamesPboardType); DragIcon:= NSWorkspace.sharedWorkspace.iconForFile(NSSTR(PAnsiChar(FileNamesList[0]))); Window.dragImage_at_offset_event_pasteboard_source_slideBack(DragIcon, DragPoint, NSZeroSize, nil, PasteBoard, Window, True); // Simulate drag-end event. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; end; end. ����������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/upixmapmanager.pas�����������������������������������������������������0000644�0001750�0000144�00000201224�12666540554�020671� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ File name: uPixMapManager.pas Date: 2004/04/xx Author: Radek Cervinka <radek.cervinka@centrum.cz> Fast pixmap memory manager a loader Copyright (C) 2004 contributors: Copyright (C) 2006-2014 Koblov Alexander (Alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit uPixMapManager; {$mode objfpc}{$H+} {$IFDEF DARWIN} {$modeswitch objectivec1} {$ENDIF} interface { GTK2 is used directly in PixmapManager, because FPC/Lazarus draws bitmaps without alpha channel under GTK2, so bitmaps looks ugly. If this problem will be fixed then GTK2 specific code could be dropped. } uses Classes, SysUtils, Graphics, syncobjs, uFileSorting, StringHashList, uFile, uIconTheme, uDrive, uDisplayFile, uGlobs, uDCReadPSD {$IF DEFINED(UNIX)} {$IF NOT DEFINED(DARWIN)} , contnrs, uDCReadSVG, uGio, uOSUtils {$IFDEF LCLGTK2} , gtk2 {$ELSE} , uUnixIconTheme {$ENDIF} {$ENDIF} {$ENDIF}; type TDriveIconList = record Size: Integer; bmMediaFloppy, bmDriveHardDisk, bmMediaFlash, bmMediaOptical, bmDriveNetwork, bmDriveVirtual, bmDriveRemovableMedia, bmDriveRemovableMediaUsb: TBitmap; end; { TfromWhatBitmapWasLoaded } //Used to indicate from where the icon was loaded from. //Useful when exporting to TC for example which cannot used "as is" the same icon file in some circumstances. TfromWhatBitmapWasLoaded = (fwbwlNotLoaded, fwbwlIconThemeBitmap, fwbwlResourceFileExtracted, fwbwlGraphicFile, fwbwlGraphicFileNotSupportedByTC, fwbwlFileIconByExtension, fwbwlFiDefaultIconID); PTfromWhatBitmapWasLoaded = ^TfromWhatBitmapWasLoaded; { TPixMapManager } TPixMapManager = class private {en Maps file extension to index of bitmap (in FPixmapList) for this file extension. } FExtList : TStringHashList; {en Maps icon filename to index of bitmap (in FPixmapList) for this icon. Uses absolute file names. } FPixmapsFileNames : TStringHashList; {en A list of loaded bitmaps. Stores TBitmap objects (on GTK2 it stores PGdkPixbuf pointers). } FPixmapList : TFPList; {en Lock used to synchronize access to PixmapManager storage. } FPixmapsLock: TCriticalSection; FDriveIconList : array[0..2] of TDriveIconList; FiDirIconID : PtrInt; FiDirLinkIconID : PtrInt; FiDirLinkBrokenIconID : PtrInt; FiLinkIconID : PtrInt; FiLinkBrokenIconID : PtrInt; FiEmblemLinkID: PtrInt; FiEmblemUnreadableID: PtrInt; FiUpDirIconID : PtrInt; FiDefaultIconID : PtrInt; FiExeIconID : PtrInt; FiArcIconID : PtrInt; FiSortAscID : PtrInt; FiSortDescID : PtrInt; {$IF DEFINED(MSWINDOWS)} FSysImgList : THandle; {$ELSEIF DEFINED(DARWIN)} FUseSystemTheme: Boolean; {$ELSEIF DEFINED(UNIX)} {en Maps file extension to MIME icon name(s). } FExtToMimeIconName: TFPDataHashTable; {$IFDEF LCLGTK2} FIconTheme: PGtkIconTheme; {$ELSE} FIconTheme: TIconTheme; {$ENDIF} FHomeFolder: String; {$ENDIF} {en Maps theme icon name to index of bitmap (in FPixmapList) for this icon. } FThemePixmapsFileNames: TStringHashList; FDCIconTheme: TIconTheme; procedure CreateIconTheme; procedure DestroyIconTheme; {en Same as LoadBitmap but displays a warning if pixmap file doesn't exist. } function CheckLoadPixmapFromFile(const AIconName: String) : TBitmap; {en If path is absolute tries to load bitmap and add to storage. If path is relative it tries to load theme icon and add to storage. } function CheckAddPixmap(AIconName: String; AIconSize : Integer = 0): PtrInt; {en Loads a theme icon and adds it to storage. This function should only be called under FPixmapLock. } function CheckAddThemePixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; {en Loads a theme icon and adds it to storage. Safe to call without a lock. } function CheckAddThemePixmap(const AIconName: String; AIconSize: Integer = 0) : PtrInt; {en Loads a theme icon. Returns TBitmap (on GTK2 convert GdkPixbuf to TBitmap). This function should only be called under FPixmapLock. } function LoadIconThemeBitmapLocked(AIconName: String; AIconSize: Integer): TBitmap; {$IF DEFINED(WINDOWS)} {en Checks if the AIconName points to an icon resource in a library, executable, etc. @param(AIconName Full path to the file with the icon with appended "," and icon index.) @param(IconFile Returns the full path to the file containing the icon resource.) @param(IconIndex Returns the index of the icon in the file.) @returns(@true if AIconName points to an icon resource, @false otherwise.) } function GetIconResourceIndex(const IconPath: String; out IconFile: String; out IconIndex: PtrInt): Boolean; function GetSystemFolderIcon: PtrInt; function GetSystemExecutableIcon: PtrInt; {$ENDIF} {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {en Loads MIME icons names and creates a mapping: file extension -> MIME icon name. Doesn't need to be synchronized as long as it's only called from Load(). } procedure LoadMimeIconNames; {en Retrieves index of a theme icon based on file extension using Extension->MIME map. Loads the icon and adds it into PixmapManager, if not yet added. This function should only be called under FPixmapLock. } function GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; {en It is synchronized in GetIconByName->CheckAddPixmap. } function GetIconByDesktopFile(sFileName: String; iDefaultIcon: PtrInt): PtrInt; {$ENDIF} {$IF DEFINED(DARWIN)} function GetSystemFolderIcon: PtrInt; function GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; {$ENDIF} function GetBuiltInDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; public constructor Create; destructor Destroy; override; procedure Load(const sFileName : String); {en Loads a graphical file (if supported) to a bitmap. @param(AIconFileName must be a full path to the graphical file.) @param(ABitmap receives a new bitmap object.) @returns(@true if bitmap has been loaded, @false otherwise.) } function LoadBitmapFromFile(AIconFileName: String; out ABitmap: TBitmap): Boolean; {en Loads a graphical file as a bitmap if filename is full path. Environment variables in the filename are supported. If filename is not graphic file it tries to load some bitmap associated with the file (by extension, attributes, etc.). Loads an icon from a file's resources if filename ends with ",Nr" (on Windows). Loads a theme icon if filename is not a full path. Performs resize of the bitmap to <iIconSize>x<iIconSize> if Stretch = @true. If Stretch = @false then clBackColor is ignored. } function LoadBitmapEnhanced(sFileName : String; iIconSize : Integer; Stretch: Boolean; clBackColor : TColor; fromWhatItWasLoaded:PTfromWhatBitmapWasLoaded = nil) : Graphics.TBitmap; {en Loads a theme icon as bitmap. @param(AIconName is a MIME type name.) } function LoadIconThemeBitmap(AIconName: String; AIconSize: Integer): TBitmap; {en Retrieves a bitmap stored in PixmapManager by index (always returns a new copy). On Windows if iIndex points to system icon list it creates a new bitmap by loading system icon and drawing onto the bitmap. } function GetBitmap(iIndex : PtrInt) : TBitmap; function DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y: Integer) : Boolean; {en Draws bitmap stretching it if needed to Width x Height. If Width is 0 then full bitmap width is used. If Height is 0 then full bitmap height is used. @param(iIndex Index of pixmap manager's bitmap.) } function DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y, Width, Height: Integer) : Boolean; {en Draws overlay bitmap for a file. @param(AFile File for which is needed to draw the overlay icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) } function DrawBitmapOverlay(AFile: TDisplayFile; DirectAccess: Boolean; Canvas : TCanvas; X, Y: Integer) : Boolean; function GetIconBySortingDirection(SortingDirection: TSortDirection): PtrInt; {en Retrieves icon index in FPixmapList table for a file. @param(AFile File for which to retrieve the icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) @param(LoadIcon Only used when an icon for a file does not yet exist in FPixmapsList. If @true then it loads the icon into FPixmapsList table and returns the index of the loaded icon. If @false then it returns -1 to notify that an icon for the file does not exist in FPixmapsList. If the icon already exists for the file the function returns its index regardless of LoadIcon parameter.) @param(IconsMode Whether to retrieve only standard icon, also from file resources, etc.) @param(GetIconWithLink If the file is a link and GetLinkIcon is @true it retrieves icon with embedded link bitmap. If @false it only retrieves the file icon itself.) } function GetIconByFile(AFile: TFile; DirectAccess: Boolean; LoadIcon: Boolean; IconsMode: TShowIconsMode; GetIconWithLink: Boolean): PtrInt; {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} {en Retrieves overlay icon index for a file. @param(AFile File for which to retrieve the overlay icon.) @param(DirectAccess Whether the file is on a directly accessible file source.) } function GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; {$ELSEIF DEFINED(DARWIN)} function GetApplicationBundleIcon(sFileName: String; iDefaultIcon: PtrInt): PtrInt; {$ENDIF} function GetIconByName(const AIconName: String): PtrInt; function GetDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; function GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; function GetVirtualDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; function GetArchiveIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; function GetFolderIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; {en Returns default icon for a file. For example default folder icon for folder, default executable icon for *.exe, etc. } function GetDefaultIcon(AFile: TFile): PtrInt; end; var PixMapManager: TPixMapManager = nil; procedure LoadPixMapManager; function StretchBitmap(var bmBitmap : Graphics.TBitmap; iIconSize : Integer; clBackColor : TColor; bFreeAtEnd : Boolean = False) : Graphics.TBitmap; implementation uses GraphType, LCLIntf, LCLType, LCLProc, Forms, uGlobsPaths, WcxPlugin, DCStrUtils, uDCUtils, uFileSystemFileSource, uReSample, uDebug, DCOSUtils, DCClassesUtf8, LazUTF8 {$IFDEF LCLGTK2} , uPixMapGtk, gdk2pixbuf, gdk2, glib2 {$ENDIF} {$IFDEF MSWINDOWS} , CommCtrl, ShellAPI, Windows, uIcoFiles, uGdiPlus, IntfGraphics, uShlObjAdditional {$ELSE} , StrUtils, DCBasicTypes {$ENDIF} {$IFDEF DARWIN} , CocoaAll, MacOSAll, uClassesEx {$ENDIF} {$IFDEF RabbitVCS} , Math, uRabbitVCS {$ENDIF} ; {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} const SystemIconIndexStart: PtrInt = High(PtrInt) div 2; {$ENDIF} function StretchBitmap(var bmBitmap : Graphics.TBitmap; iIconSize : Integer; clBackColor : TColor; bFreeAtEnd : Boolean = False) : Graphics.TBitmap; var memstream: TMemoryStream; {$IFDEF MSWINDOWS} liiSource: TLazIntfImage = nil; liiDestination: TLazIntfImage = nil; ImgFormatDescription:TRawImageDescription; {$ENDIF} begin {$IFDEF MSWINDOWS} //Let's make sure we're working with 32-bits bitmap if bmBitmap.PixelFormat<>pf32bit then begin liiSource:=bmBitmap.CreateIntfImage; liiDestination:=TLazIntfImage.Create(bmBitmap.Width,bmBitmap.Height); try ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(bmBitmap.Width,bmBitmap.Height); liiDestination.DataDescription:=ImgFormatDescription; liiDestination.CopyPixels(liiSource); bmBitmap.FreeImage; bmBitmap.PixelFormat:=pf32bit; bmBitmap.LoadFromIntfImage(liiDestination); finally liiDestination.Free; liiSource.Free; end; end; {$ENDIF} if (iIconSize <> bmBitmap.Height) or (iIconSize <> bmBitmap.Width) then begin Result := Graphics.TBitMap.Create; try Result.SetSize(iIconSize, iIconSize); if bmBitmap.RawImage.Description.AlphaPrec <> 0 then // if bitmap has alpha channel Stretch(bmBitmap, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width) else with Result do begin Canvas.Brush.Color := clBackColor; Canvas.FillRect(Canvas.ClipRect); Canvas.StretchDraw(Canvas.ClipRect, bmBitmap); { For drawing color transparent bitmaps } memstream := TMemoryStream.Create; try SaveToStream(memstream); memstream.position := 0; LoadFromStream(memstream); finally memstream.free; end; Transparent := True; if bmBitmap.RawImage.Description.MaskBitsPerPixel = 0 then TransparentColor := clBackColor; end; // with if bFreeAtEnd then FreeAndNil(bmBitmap); except FreeAndNil(Result); raise; end; end else // Don't need to stretch. begin if bFreeAtEnd then begin Result := bmBitmap; bmBitmap := nil; end else begin Result := Graphics.TBitMap.Create; try Result.Assign(bmBitmap); except FreeAndNil(Result); raise; end; end; end; end; { TPixMapManager } { TPixMapManager.LoadBitmapFromFile } function TPixMapManager.LoadBitmapFromFile(AIconFileName: String; out ABitmap: Graphics.TBitmap): Boolean; var {$IFDEF LCLGTK2} pbPicture : PGdkPixbuf; {$ELSE} Picture: TPicture; {$ENDIF} begin Result:= False; {$IFDEF LCLGTK2} pbPicture := gdk_pixbuf_new_from_file(PChar(AIconFileName), nil); if pbPicture <> nil then begin ABitmap := PixBufToBitmap(pbPicture); gdk_pixmap_unref(pbPicture); // if unsupported BitsPerPixel then exit if ABitmap.RawImage.Description.BitsPerPixel > 32 then raise EInvalidGraphic.Create('Unsupported bits per pixel'); Result:= True; end; {$ELSE} Picture := TPicture.Create; try ABitmap := Graphics.TBitmap.Create; try Picture.LoadFromFile(AIconFileName); //Picture.Graphic.Transparent := True; ABitmap.Assign(Picture.Bitmap); // if unsupported BitsPerPixel then exit if ABitmap.RawImage.Description.BitsPerPixel > 32 then raise EInvalidGraphic.Create('Unsupported bits per pixel'); Result:= True; except on E: Exception do begin FreeAndNil(ABitmap); DCDebug(Format('Error: Cannot load pixmap [%s] : %s',[AIconFileName, e.Message])); end; end; finally FreeAndNil(Picture); end; {$ENDIF} end; function TPixMapManager.LoadBitmapEnhanced(sFileName : String; iIconSize : Integer; Stretch: Boolean; clBackColor : TColor; fromWhatItWasLoaded:PTfromWhatBitmapWasLoaded) : Graphics.TBitmap; var {$IFDEF MSWINDOWS} iIconIndex: PtrInt; iIconLarge, iIconSmall: Integer; phIcon: HICON = INVALID_HANDLE_VALUE; phIconLarge : HICON = 0; phIconSmall : HICON = 0; Icon : TIcon = nil; IconFileName: String; {$ENDIF} AFile: TFile; iIndex : PtrInt; sExtFilter, sGraphicFilter : String; bmStandartBitmap : Graphics.TBitMap = nil; begin Result := nil; if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlNotLoaded; sFileName:= ReplaceEnvVars(sFileName); // If the name is not full path then treat it as MIME type. if GetPathType(sFileName) = ptNone then begin bmStandartBitmap := LoadIconThemeBitmap(sFileName, iIconSize); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlIconThemeBitmap; end else {$IFDEF MSWINDOWS} if GetIconResourceIndex(sFileName, IconFileName, iIconIndex) then begin if ExtractIconExW(PWChar(UTF8Decode(IconFileName)), iIconIndex, phIconLarge, phIconSmall, 1) = 2 then // if extracted both icons begin // Get system metrics iIconSmall:= GetSystemMetrics(SM_CXSMICON); iIconLarge:= GetSystemMetrics(SM_CXICON); if (iIconSize = 16) and (iIconSmall = 16) then phIcon:= phIconSmall // Use small icon else if (iIconSize = 32) and (iIconLarge = 32) then phIcon:= phIconLarge // Use large icon else if iIconSize > iIconSmall then phicon := phIconLarge // Use large icon else phicon := phIconSmall; // Use small icon if phIcon <> INVALID_HANDLE_VALUE then try Icon:= CreateIconFromHandle(phIcon); bmStandartBitmap := Graphics.TBitMap.Create; bmStandartBitmap.Assign(Icon); bmStandartBitmap.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlResourceFileExtracted; finally FreeThenNil(Icon); end; DestroyIcon(phIconLarge); DestroyIcon(phIconSmall); end; end // GetIconResourceIndex else {$ENDIF} begin sExtFilter := UTF8LowerCase(ExtractFileExt(sFileName)) + ';'; sGraphicFilter := GraphicFilter(TGraphic); // if file is graphic if (Length(sExtFilter) > 1) and (Pos(sExtFilter, sGraphicFilter) <> 0) and mbFileExists(sFileName) then begin LoadBitmapFromFile(sFileName, bmStandartBitmap); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlGraphicFile; end; end; if not Assigned(bmStandartBitmap) then // get file icon by ext begin if mbFileSystemEntryExists(sFileName) then begin AFile := TFileSystemFileSource.CreateFileFromFile(sFileName); try iIndex := GetIconByFile(AFile, True, True, sim_all_and_exe, False); bmStandartBitmap := GetBitmap(iIndex); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlFileIconByExtension; finally FreeAndNil(AFile); end; end else // file not found begin bmStandartBitmap := GetBitmap(FiDefaultIconID); if fromWhatItWasLoaded<> nil then fromWhatItWasLoaded^ := fwbwlFiDefaultIconID; end; end; if Stretch and Assigned(bmStandartBitmap) then Result := StretchBitmap(bmStandartBitmap, iIconSize, clBackColor, True) else Result := bmStandartBitmap; end; function TPixMapManager.LoadIconThemeBitmap(AIconName: String; AIconSize: Integer): Graphics.TBitmap; begin FPixmapsLock.Acquire; try Result := LoadIconThemeBitmapLocked(AIconName, AIconSize); finally FPixmapsLock.Release; end; end; function TPixMapManager.CheckLoadPixmapFromFile(const AIconName: String): Graphics.TBitmap; begin if not mbFileExists(AIconName) then begin DCDebug(Format('Warning: pixmap [%s] not exists!',[AIconName])); Exit(nil); end; LoadBitmapFromFile(AIconName, Result); end; function TPixMapManager.CheckAddThemePixmap(const AIconName: String; AIconSize : Integer) : PtrInt; begin if AIconSize = 0 then AIconSize := gIconsSize; FPixmapsLock.Acquire; try Result := CheckAddThemePixmapLocked(AIconName, AIconSize); finally FPixmapsLock.Release; end; end; function TPixMapManager.CheckAddPixmap(AIconName: String; AIconSize : Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF LCLGTK2} pbPicture : PGdkPixbuf; {$ELSE} bmpBitmap: Graphics.TBitmap; {$ENDIF} begin Result:= -1; if AIconName = EmptyStr then Exit; if AIconSize = 0 then AIconSize := gIconsSize; AIconName := ReplaceEnvVars(AIconName); if GetPathType(AIconName) = ptAbsolute then begin FPixmapsLock.Acquire; try // Determine if this file is already loaded. fileIndex := FPixmapsFileNames.Find(AIconName); if fileIndex < 0 then begin {$IFDEF LCLGTK2} if not mbFileExists(AIconName) then begin DCDebug(Format('Warning: pixmap [%s] not exists!', [AIconName])); Exit; end; pbPicture := gdk_pixbuf_new_from_file_at_size(PChar(AIconName), AIconSize, AIconSize, nil); if Assigned(pbPicture) then begin Result := FPixmapList.Add(pbPicture); FPixmapsFileNames.Add(AIconName, Pointer(Result)); end else DCDebug(Format('Error: pixmap [%s] not loaded!', [AIconName])); {$ELSE} bmpBitmap := LoadBitmapEnhanced(AIconName, AIconSize, False, clNone, nil); if Assigned(bmpBitmap) then begin // Shrink big bitmaps before putting them into PixmapManager, // to speed up later drawing. // // Note: Transparent bitmaps may lose transparency, because // they must drawn onto a background, so we allow smaller bitmaps // up to 48x48 (icons for example) to load in full size and they // are resized upon drawing. // // TODO: // This should resize any non-transparent, // non-alpha channel bitmaps to gIconsSize // (so if Width<>gIconsSize or Height<>gIconsSize then Resize). if (bmpBitmap.Width > 48) or (bmpBitmap.Height > 48) then begin bmpBitmap := StretchBitmap(bmpBitmap, AIconSize, clBlack, True); end; Result := FPixmapList.Add(bmpBitmap); FPixmapsFileNames.Add(AIconName, Pointer(Result)); end; {$ENDIF} end else begin Result:= PtrInt(FPixmapsFileNames.List[fileIndex]^.Data); end; finally FPixmapsLock.Release; end; end else begin Result := CheckAddThemePixmap(AIconName, AIconSize); end; end; procedure TPixMapManager.CreateIconTheme; var DirList: array of string; begin {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {$IFDEF LCLGTK2} // get current gtk theme FIconTheme:= gtk_icon_theme_get_for_screen(gdk_screen_get_default); { // load custom theme FIconTheme:= gtk_icon_theme_new; gtk_icon_theme_set_custom_theme(FIconTheme, 'oxygen'); } {$ELSE} FIconTheme:= TUnixIconTheme.Create; {$ENDIF} {$ENDIF} // Create DC theme. SetLength(DirList, 1); DirList[0] := ExcludeTrailingPathDelimiter(gpPixmapPath); FDCIconTheme := TIconTheme.Create('dctheme', DirList); end; procedure TPixMapManager.DestroyIconTheme; begin {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {$IFDEF LCLGTK2} FIconTheme:= nil; {$ELSE} if Assigned(FIconTheme) then FreeAndNil(FIconTheme); {$ENDIF} {$ENDIF} FreeThenNil(FDCIconTheme); end; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} procedure TPixMapManager.LoadMimeIconNames; const mime_globs = '/usr/share/mime/globs'; mime_generic_icons = '/usr/share/mime/generic-icons'; pixmaps_cache = 'pixmaps.cache'; cache_signature: DWord = $44435043; // 'DCPC' cache_version: DWord = 1; var I, J, K: Integer; globs: TStringListEx = nil; generic_icons: TStringListEx = nil; cache: TFileStreamEx = nil; mTime: TFileTime; sMimeType, sMimeIconName, sExtension: String; node: THTDataNode = nil; iconsList: TStringList; EntriesCount, IconsCount: Cardinal; nodeList: TFPObjectList; begin try // Try to load from cache. mTime:= mbFileAge(mime_globs); if (mbFileAge(gpCfgDir + pixmaps_cache) = mTime) and (mbFileAccess(gpCfgDir + pixmaps_cache, fmOpenRead)) and (mbFileSize(gpCfgDir + pixmaps_cache) > SizeOf(DWord) * 2) then begin cache := TFileStreamEx.Create(gpCfgDir + pixmaps_cache, fmOpenRead); if (cache.ReadDWord <> NtoBE(cache_signature)) or (cache.ReadDWord <> cache_version) then begin FreeAndNil(cache); end; end; if Assigned(cache) then begin EntriesCount := cache.ReadDWord; FExtToMimeIconName.HashTableSize := EntriesCount; // Each entry is a file extension with a list of icon names. for I := 0 to EntriesCount - 1 do begin sExtension := cache.ReadAnsiString; IconsCount := cache.ReadDWord; iconsList := TStringList.Create; FExtToMimeIconName.Add(sExtension, iconsList); iconsList.Capacity := IconsCount; for J := 0 to IconsCount - 1 do iconsList.Add(cache.ReadAnsiString); end; end else if mbFileAccess(mime_globs, fmOpenRead) then begin // Load mapping: MIME type -> file extension. globs:= TStringListEx.Create; globs.NameValueSeparator:= ':'; globs.LoadFromFile(mime_globs); // Try to load mapping: MIME type -> generic MIME icon name. if mbFileExists(mime_generic_icons) then begin generic_icons:= TStringListEx.Create; generic_icons.NameValueSeparator:= ':'; generic_icons.LoadFromFile(mime_generic_icons); end; EntriesCount := 0; // Create mapping: file extension -> list of MIME icon names. for I:= 0 to globs.Count - 1 do if (globs.Strings[I] <> '') and // bypass empty lines (globs.Strings[I][1] <> '#') then // and comments begin sMimeType := globs.Names[I]; sMimeIconName:= StringReplace(sMimeType, '/', '-', []); sExtension:= ExtractFileExt(globs.ValueFromIndex[I]); // Support only extensions, not full file name masks. if (sExtension <> '') and (sExtension <> '.*') then begin Delete(sExtension, 1, 1); node := THTDataNode(FExtToMimeIconName.Find(sExtension)); if not Assigned(node) then begin iconsList := TStringList.Create; FExtToMimeIconName.Add(sExtension, iconsList); Inc(EntriesCount); end else iconsList := TStringList(node.Data); if iconsList.IndexOf(sMimeIconName) < 0 then iconsList.Add(sMimeIconName); // Shared-mime-info spec says: // "If [generic-icon] is not specified then the mimetype is used to generate the // generic icon by using the top-level media type (e.g. "video" in "video/ogg") // and appending "-x-generic" (i.e. "video-x-generic" in the previous example)." if Assigned(generic_icons) then begin J := generic_icons.IndexOfName(sMimeType); if J <> -1 then sMimeIconName := generic_icons.ValueFromIndex[J] // found generic icon else sMimeIconName := Copy2Symb(sMimeIconName, '-') + '-x-generic'; end else sMimeIconName := Copy2Symb(sMimeIconName, '-') + '-x-generic'; if iconsList.IndexOf(sMimeIconName) < 0 then iconsList.Add(sMimeIconName); end; end; // save to cache cache := TFileStreamEx.Create(gpCfgDir + pixmaps_cache, fmCreate); cache.WriteDWord(NtoBE(cache_signature)); cache.WriteDWord(cache_version); cache.WriteDWord(EntriesCount); for I := 0 to FExtToMimeIconName.HashTable.Count - 1 do begin nodeList := TFPObjectList(FExtToMimeIconName.HashTable.Items[I]); if Assigned(nodeList) then for J := 0 to nodeList.Count - 1 do begin node := THtDataNode(nodeList.Items[J]); iconsList := TStringList(node.Data); cache.WriteAnsiString(node.Key); cache.WriteDWord(iconsList.Count); for K := 0 to iconsList.Count - 1 do cache.WriteAnsiString(iconsList.Strings[K]); end; end; FreeAndNil(cache); // Close file mbFileSetTime(gpCfgDir + pixmaps_cache, mTime, 0, 0); end; finally if Assigned(globs) then FreeAndNil(globs); if Assigned(generic_icons) then FreeAndNil(generic_icons); if Assigned(cache) then FreeAndNil(cache); end; end; function TPixMapManager.GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; var I: Integer; node: THTDataNode; iconList: TStringList; begin // This function must be called under FPixmapsLock. Result := -1; // Search for an icon for this file extension. node := THTDataNode(FExtToMimeIconName.Find(AFileExt)); if Assigned(node) then begin iconList := TStringList(node.Data); // Try to load one of the icons in the list. for I := 0 to iconList.Count - 1 do begin Result := CheckAddThemePixmapLocked(iconList.Strings[I], AIconSize); if Result <> -1 then break; end; end; end; function TPixMapManager.GetIconByDesktopFile(sFileName: String; iDefaultIcon: PtrInt): PtrInt; var I: PtrInt; iniDesktop: TIniFileEx = nil; sIconName: String; begin try iniDesktop:= TIniFileEx.Create(sFileName, fmOpenRead); try sIconName:= iniDesktop.ReadString('Desktop Entry', 'Icon', EmptyStr); finally FreeAndNil(iniDesktop); end; except Exit(iDefaultIcon); end; { Some icon names in .desktop files are specified with an extension, even though it is not allowed by the standard unless an absolute path to the icon is supplied. We delete this extension here. } if GetPathType(sIconName) = ptNone then sIconName := TIconTheme.CutTrailingExtension(sIconName); I:= GetIconByName(sIconName); if I < 0 then Result:= iDefaultIcon else Result:= I; end; {$ELSEIF DEFINED(DARWIN)} function TPixMapManager.GetApplicationBundleIcon(sFileName: String; iDefaultIcon: PtrInt): PtrInt; var I, J: PtrInt; slInfoFile: TStringListEx = nil; sTemp, sIconName: String; begin Result:= iDefaultIcon; slInfoFile:= TStringListEx.Create; try try slInfoFile.LoadFromFile(sFileName + '/Contents/Info.plist'); sTemp:= slInfoFile.Text; I:= Pos('CFBundleIconFile', sTemp); if I <= 0 then Exit; I:= PosEx('<string>', sTemp, I) + 8; J:= PosEx('</string>', sTemp, I); sIconName:= Copy(sTemp, I, J - I); if not StrEnds(sIconName, '.icns') then sIconName:= sIconName + '.icns'; sIconName:= sFileName + '/Contents/Resources/' + sIconName; except Exit; end; finally slInfoFile.Free; end; I:= GetIconByName(sIconName); if I >= 0 then Result:= I; end; {$ENDIF} // Unix function TPixMapManager.CheckAddThemePixmapLocked(AIconName: String; AIconSize: Integer): PtrInt; var fileIndex: PtrInt; {$IFDEF LCLGTK2} pbPicture: PGdkPixbuf = nil; sIconFileName: String; {$ELSE} bmpBitmap: Graphics.TBitmap; {$ENDIF} begin // This function must be called under FPixmapsLock. fileIndex := FThemePixmapsFileNames.Find(AIconName); if fileIndex < 0 then begin {$IF DEFINED(LCLGTK2) AND DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if gShowIcons > sim_standart then begin pbPicture:= gtk_icon_theme_load_icon(FIconTheme, Pgchar(AIconName), AIconSize, GTK_ICON_LOOKUP_USE_BUILTIN, nil); end; // If not found in system theme or using of system theme is disabled look in DC theme. if not Assigned(pbPicture) then begin sIconFileName := FDCIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then pbPicture := gdk_pixbuf_new_from_file_at_size( PChar(sIconFileName), AIconSize, AIconSize, nil); end; if Assigned(pbPicture) then begin Result := FPixmapList.Add(pbPicture); FThemePixmapsFileNames.Add(AIconName, Pointer(Result)); end else Result := -1; {$ELSE} bmpBitmap := LoadIconThemeBitmapLocked(AIconName, AIconSize); if Assigned(bmpBitmap) then begin Result := FPixmapList.Add(bmpBitmap); // add to list FThemePixmapsFileNames.Add(AIconName, Pointer(Result)); end else Result := -1; {$ENDIF} end else Result := PtrInt(FThemePixmapsFileNames.List[fileIndex]^.Data); end; function TPixMapManager.LoadIconThemeBitmapLocked(AIconName: String; AIconSize: Integer): Graphics.TBitmap; var sIconFileName: String; {$IFDEF LCLGTK2} pbPicture: PGdkPixbuf = nil; {$ENDIF} begin // This function must be called under FPixmapsLock. {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} Result := nil; {$IFDEF LCLGTK2} if gShowIcons > sim_standart then begin pbPicture:= gtk_icon_theme_load_icon(FIconTheme, Pgchar(PChar(AIconName)), AIconSize, GTK_ICON_LOOKUP_USE_BUILTIN, nil); if pbPicture <> nil then Result := PixBufToBitmap(pbPicture); end; {$ELSE} sIconFileName:= FIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then begin if TScalableVectorGraphics.IsFileExtensionSupported(ExtractFileExt(sIconFileName)) then Result := BitmapLoadFromScalable(sIconFileName, AIconSize, AIconSize) else Result := CheckLoadPixmapFromFile(sIconFileName); end; {$ENDIF} if not Assigned(Result) then {$ENDIF} begin sIconFileName:= FDCIconTheme.FindIcon(AIconName, AIconSize); if sIconFileName <> EmptyStr then Result := CheckLoadPixmapFromFile(sIconFileName) else Result := nil; end; end; {$IFDEF DARWIN} function TPixMapManager.GetSystemFolderIcon: PtrInt; var FileType: String; begin FileType:= NSFileTypeForHFSTypeCode(kGenericFolderIcon).UTF8String; Result:= GetMimeIcon(FileType, gIconsSize); end; function TPixMapManager.GetMimeIcon(AFileExt: String; AIconSize: Integer): PtrInt; var I: Integer; nImage: NSImage; nData: NSData; nRepresentations: NSArray; nImageRep: NSImageRep; WorkStream: TBlobStream; tfBitmap: TTiffImage; bmBitmap: TBitmap; begin Result:= -1; if not FUseSystemTheme then Exit; nImage:= NSWorkspace.sharedWorkspace.iconForFileType(NSSTR(PChar(AFileExt))); nRepresentations:= nImage.Representations; if AIconSize = 22 then AIconSize:= 32; for I:= nRepresentations.Count - 1 downto 0 do begin nImageRep:= NSImageRep(nRepresentations.objectAtIndex(I)); if (AIconSize <> nImageRep.Size.Width) then nImage.removeRepresentation(nImageRep); end; if nImage.Representations.Count = 0 then Exit; nData:= nImage.TIFFRepresentation; tfBitmap:= TTiffImage.Create; WorkStream:= TBlobStream.Create(nData.Bytes, nData.Length); try tfBitmap.LoadFromStream(WorkStream); bmBitmap:= TBitmap.Create; try bmBitmap.Assign(tfBitmap); Result:= FPixmapList.Add(bmBitmap); except bmBitmap.Free; end; finally tfBitmap.Free; WorkStream.Free; end; end; {$ENDIF} {$IFDEF WINDOWS} function TPixMapManager.GetIconResourceIndex(const IconPath: String; out IconFile: String; out IconIndex: PtrInt): Boolean; var iPos, iIndex: Integer; begin iPos := Pos(',', IconPath); if iPos <> 0 then begin if TryStrToInt(Copy(IconPath, iPos + 1, Length(IconPath) - iPos), iIndex) and (iIndex >= 0) then begin IconIndex := iIndex; IconFile := Copy(IconPath, 1, iPos - 1); Result := FileIsExeLib(IconFile); end else Result := False; end else begin IconIndex := 0; IconFile := IconPath; Result := FileIsExeLib(IconFile); end; end; function TPixMapManager.GetSystemFolderIcon: PtrInt; var FileInfo: TSHFileInfo; begin if (SHGetFileInfo('nil', FILE_ATTRIBUTE_DIRECTORY, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) = 0) then Result := -1 else Result := FileInfo.iIcon + SystemIconIndexStart; end; function TPixMapManager.GetSystemExecutableIcon: PtrInt; var FileInfo: TSHFileInfo; begin if (SHGetFileInfo(PAnsiChar('a.exe'), // Ansi version is enough. FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(FileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES) = 0) then Result := -1 else Result := FileInfo.iIcon + SystemIconIndexStart; end; {$ENDIF} constructor TPixMapManager.Create; {$IF DEFINED(DARWIN)} var systemVersion: SInt32; {$ELSEIF DEFINED(MSWINDOWS)} var iIconSize : Integer; {$ENDIF} begin FExtList := TStringHashList.Create(True); FPixmapsFileNames := TStringHashList.Create(True); FPixmapList := TFPList.Create; {$IF DEFINED(DARWIN)} FUseSystemTheme:= NSAppKitVersionNumber >= 1038; {$ELSEIF DEFINED(UNIX)} FExtToMimeIconName := TFPDataHashTable.Create; FHomeFolder := IncludeTrailingBackslash(GetHomeDir); {$ENDIF} FThemePixmapsFileNames := TStringHashList.Create(True); CreateIconTheme; {$IFDEF MSWINDOWS} case gIconsSize of 16: iIconSize := SHIL_SMALL; 32: iIconSize := SHIL_LARGE; else iIconSize := SHIL_EXTRALARGE; end; FSysImgList := SHGetSystemImageList(iIconSize); {$ENDIF} FPixmapsLock := syncobjs.TCriticalSection.Create; end; destructor TPixMapManager.Destroy; var I : Integer; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} J : Integer; nodeList: TFPObjectList; {$ENDIF} begin if Assigned(FPixmapList) then begin for I := 0 to FPixmapList.Count - 1 do if Assigned(FPixmapList.Items[I]) then {$IFDEF LCLGTK2} g_object_unref(PGdkPixbuf(FPixmapList.Items[I])); {$ELSE} Graphics.TBitmap(FPixmapList.Items[I]).Free; {$ENDIF} FreeAndNil(FPixmapList); end; if Assigned(FExtList) then FreeAndNil(FExtList); if Assigned(FPixmapsFileNames) then FreeAndNil(FPixmapsFileNames); for I := Low(FDriveIconList) to High(FDriveIconList) do with FDriveIconList[I] do begin if Assigned(bmMediaFloppy) then FreeAndNil(bmMediaFloppy); if Assigned(bmDriveHardDisk) then FreeAndNil(bmDriveHardDisk); if Assigned(bmMediaFlash) then FreeAndNil(bmMediaFlash); if Assigned(bmMediaOptical) then FreeAndNil(bmMediaOptical); if Assigned(bmDriveNetwork) then FreeAndNil(bmDriveNetwork); if Assigned(bmDriveVirtual) then FreeAndNil(bmDriveVirtual); if Assigned(bmDriveRemovableMedia) then FreeAndNil(bmDriveRemovableMedia); if Assigned(bmDriveRemovableMediaUsb) then FreeAndNil(bmDriveRemovableMediaUsb); end; {$IF DEFINED(MSWINDOWS)} ImageList_Destroy(FSysImgList); {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} for I := 0 to FExtToMimeIconName.HashTable.Count - 1 do begin nodeList := TFPObjectList(FExtToMimeIconName.HashTable.Items[I]); if Assigned(nodeList) then for J := 0 to nodeList.Count - 1 do TStringList(THtDataNode(nodeList.Items[J]).Data).Free; end; FreeThenNil(FExtToMimeIconName); {$ENDIF} DestroyIconTheme; FreeThenNil(FThemePixmapsFileNames); FreeThenNil(FPixmapsLock); inherited Destroy; end; procedure TPixMapManager.Load(const sFileName: String); var slPixmapList: TStringListEx; s:String; sExt, sPixMap:String; iekv:integer; iPixMap:PtrInt; I : Integer; iPixmapSize: Integer; begin // This function doesn't need to be synchronized // as long as it is called before creating the main form // (via LoadPixMapManager in doublecmd.lpr). // Load icon themes. {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if gShowIcons > sim_standart then begin LoadMimeIconNames; // For use with GetMimeIcon {$IFNDEF LCLGTK2} FIconTheme.Load; // Load system icon theme. {$ENDIF} end; {$ENDIF} FDCIconTheme.Load; // Load DC theme. // load all drive icons FDriveIconList[0].Size := 16; FDriveIconList[1].Size := 22; FDriveIconList[2].Size := 32; for I:= Low(FDriveIconList) to High(FDriveIconList) do with FDriveIconList[I] do begin iPixmapSize := FDriveIconList[I].Size; bmMediaFloppy := LoadIconThemeBitmapLocked('media-floppy', iPixmapSize); bmDriveHardDisk := LoadIconThemeBitmapLocked('drive-harddisk', iPixmapSize); bmMediaFlash := LoadIconThemeBitmapLocked('media-flash', iPixmapSize); bmMediaOptical := LoadIconThemeBitmapLocked('media-optical', iPixmapSize); bmDriveNetwork:= LoadIconThemeBitmapLocked('network-wired', iPixmapSize); bmDriveVirtual:= LoadIconThemeBitmapLocked('folder-virtual', iPixmapSize); bmDriveRemovableMedia:= LoadIconThemeBitmapLocked('drive-removable-media', iPixmapSize); bmDriveRemovableMediaUsb:= LoadIconThemeBitmapLocked('drive-removable-media-usb', iPixmapSize); end; // load emblems if gIconsSize = 22 then I:= 16 else if gIconsSize = 48 then I:= 22 else I:= gIconsSize div 2; FiEmblemLinkID:= CheckAddThemePixmap('emblem-symbolic-link', I); FiEmblemUnreadableID:= CheckAddThemePixmap('emblem-unreadable', I); // add some standard icons FiDefaultIconID:=CheckAddThemePixmap('unknown'); {$IF DEFINED(MSWINDOWS) or DEFINED(DARWIN)} FiDirIconID := -1; if gShowIcons > sim_standart then FiDirIconID := GetSystemFolderIcon; if FiDirIconID = -1 then {$ENDIF} FiDirIconID:=CheckAddThemePixmap('folder'); FiDirLinkIconID:=CheckAddThemePixmap('folder-link'); FiDirLinkBrokenIconID:=CheckAddThemePixmap('folder-link-broken'); FiLinkIconID:=CheckAddThemePixmap('link'); FiLinkBrokenIconID:=CheckAddThemePixmap('link-broken'); FiUpDirIconID:=CheckAddThemePixmap('go-up'); FiArcIconID := CheckAddThemePixmap('package-x-generic'); {$IFDEF MSWINDOWS} FiExeIconID := -1; if gShowIcons > sim_standart then FiExeIconID := GetSystemExecutableIcon; if FiExeIconID = -1 then {$ENDIF} FiExeIconID:= CheckAddThemePixmap('application-x-executable'); FiSortAscID := CheckAddThemePixmap('view-sort-ascending'); FiSortDescID := CheckAddThemePixmap('view-sort-descending'); gFiOwnDCIcon := CheckAddPixmap(ParamStr(0), gIconsSize); { Load icons from "extassoc.xml" } for I := 0 to gExts.Count - 1 do begin iPixMap := CheckAddPixmap(gExts.Items[I].Icon, gIconsSize); if iPixMap >= 0 then begin // set pixmap index for all extensions for iekv := 0 to gExts.Items[I].Extensions.Count - 1 do begin sExt := LowerCase(gExts.Items[I].Extensions[iekv]); if FExtList.Find(sExt) < 0 then FExtList.Add(sExt, TObject(iPixMap)); end; end else iPixMap:= FiDefaultIconID; gExts.Items[I].IconIndex:= iPixMap; end; {/ Load icons from "extassoc.xml" } // Load icons from pixmaps.txt only if "Only standart icons" enabled if (gShowIcons = sim_standart) and mbFileExists(sFileName) then try slPixmapList:= TStringListEx.Create; try slPixmapList.LoadFromFile(sFileName); for I:= 0 to slPixmapList.Count - 1 do begin s:= Trim(slPixmapList.Strings[I]); iekv := Pos('=',s); if iekv = 0 then Continue; sPixMap := Copy(s, iekv+1, length(s)-iekv); // Since DC 0.4.6 filename without path is treated as a MIME type // and it shouldn't have an extension. Cut any extension here. // Only '.png' were used in previous versions of pixmaps.txt. if (GetPathType(sPixMap) = ptNone) and StrEnds(sPixMap, '.png') then Delete(sPixMap, Length(sPixMap) - 3, 4); iPixMap := CheckAddPixmap(sPixMap); if iPixMap >= 0 then begin sExt := Copy(s, 1, iekv-1); if FExtList.Find(sExt) < 0 then FExtList.Add(sExt, TObject(iPixMap)); end; end; except on E: Exception do with Application do MessageBox(PAnsiChar(E.Message), PAnsiChar(Title), MB_OK or MB_ICONERROR); end; finally slPixmapList.Free; end; (* Set archive icons *) for I:=0 to gWCXPlugins.Count - 1 do begin if gWCXPlugins.Enabled[I] and ((gWCXPlugins.Flags[I] and PK_CAPS_HIDE) <> PK_CAPS_HIDE) then begin sExt := gWCXPlugins.Ext[I]; if (Length(sExt) > 0) and (FExtList.Find(sExt) < 0) then FExtList.Add(sExt, TObject(FiArcIconID)); end; end; //for for I:= 0 to gMultiArcList.Count - 1 do begin if gMultiArcList.Items[I].FEnabled then begin sExt := gMultiArcList.Items[I].FExtension; if (Length(sExt) > 0) and (FExtList.Find(sExt) < 0) then FExtList.Add(sExt, TObject(FiArcIconID)); end; end; (* /Set archive icons *) end; function TPixMapManager.GetBitmap(iIndex: PtrInt): Graphics.TBitmap; var PPixmap: Pointer; PixmapFromList: Boolean = False; {$IFDEF MSWINDOWS} hicn: HICON; Icon: TIcon = nil; {$ENDIF} begin FPixmapsLock.Acquire; try if (iIndex >= 0) and (iIndex < FPixmapList.Count) then begin PPixmap := FPixmapList[iIndex]; PixmapFromList := True; end; finally FPixmapsLock.Release; end; if PixmapFromList then begin {$IFDEF LCLGTK2} Result:= PixBufToBitmap(PGdkPixbuf(PPixmap)); {$ELSE} // Make a new copy. Result := Graphics.TBitmap.Create; Result.Assign(Graphics.TBitmap(PPixmap)); {$ENDIF} end else {$IFDEF MSWINDOWS} if iIndex >= SystemIconIndexStart then begin Result:= nil; hicn:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); if hicn <> 0 then try Icon := CreateIconFromHandle(hicn); Result := Graphics.TBitmap.Create; Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 finally FreeThenNil(Icon); DestroyIcon(hicn); end end else {$ENDIF} Result:= nil; end; function TPixMapManager.DrawBitmap(iIndex: PtrInt; Canvas : TCanvas; X, Y: Integer) : Boolean; begin Result := DrawBitmap(iIndex, Canvas, X, Y, gIconsSize, gIconsSize); // X, Y, 0, 0 - No bitmap stretching. end; function TPixMapManager.DrawBitmap(iIndex: PtrInt; Canvas: TCanvas; X, Y, Width, Height: Integer): Boolean; procedure TrySetSize(aWidth, aHeight: Integer); begin if Width = 0 then Width := aWidth; if Height = 0 then Height := aHeight; end; var PPixmap: Pointer; PixmapFromList: Boolean = False; {$IFDEF MSWINDOWS} hicn: HICON; cx, cy: Integer; {$ENDIF} {$IFDEF LCLGTK2} pbPicture : PGdkPixbuf; iPixbufWidth : Integer; iPixbufHeight : Integer; {$ELSE} Bitmap: Graphics.TBitmap; aRect: TRect; {$ENDIF} begin Result := True; FPixmapsLock.Acquire; try if (iIndex >= 0) and (iIndex < FPixmapList.Count) then begin PPixmap := FPixmapList[iIndex]; PixmapFromList := True; end; finally FPixmapsLock.Release; end; if PixmapFromList then begin {$IFDEF LCLGTK2} pbPicture := PGdkPixbuf(PPixmap); iPixbufWidth := gdk_pixbuf_get_width(pbPicture); iPixbufHeight := gdk_pixbuf_get_height(pbPicture); TrySetSize(iPixbufWidth, iPixbufHeight); DrawPixbufAtCanvas(Canvas, pbPicture, 0, 0, X, Y, Width, Height); {$ELSE} Bitmap := Graphics.TBitmap(PPixmap); TrySetSize(Bitmap.Width, Bitmap.Height); aRect := Classes.Bounds(X, Y, Width, Height); Canvas.StretchDraw(aRect, Bitmap); {$ENDIF} end else {$IFDEF MSWINDOWS} if iIndex >= SystemIconIndexStart then try if ImageList_GetIconSize(FSysImgList, @cx, @cy) then TrySetSize(cx, cy) else TrySetSize(gIconsSize, gIconsSize); if (Height in [16, 32, 48]) and (cx = Width) and (cy = Height) then // for transparent ImageList_Draw(FSysImgList, iIndex - SystemIconIndexStart, Canvas.Handle, X, Y, ILD_TRANSPARENT) else begin hicn:= ImageList_GetIcon(FSysImgList, iIndex - SystemIconIndexStart, ILD_NORMAL); try if IsGdiPlusLoaded then Result:= GdiPlusStretchDraw(hicn, Canvas.Handle, X, Y, Width, Height) else Result:= DrawIconEx(Canvas.Handle, X, Y, hicn, Width, Height, 0, 0, DI_NORMAL); finally DestroyIcon(hicn); end; end; except Result:= False; end; {$ELSE} Result:= False; {$ENDIF} end; function TPixMapManager.DrawBitmapOverlay(AFile: TDisplayFile; DirectAccess: Boolean; Canvas: TCanvas; X, Y: Integer): Boolean; var I: Integer; begin if AFile.FSFile.IsLink then begin I:= gIconsSize div 2; Result:= DrawBitmap(FiEmblemLinkID, Canvas, X, Y + I, I, I); if Assigned(AFile.FSFile.LinkProperty) then begin if not AFile.FSFile.LinkProperty.IsValid then Result:= DrawBitmap(FiEmblemUnreadableID, Canvas, X + I, Y + I, I, I); end; end {$IF DEFINED(MSWINDOWS) OR DEFINED(RabbitVCS)} else // Windows XP doesn't draw link overlay icon for soft links (don't know about Vista or 7). if DirectAccess then begin if AFile.IconOverlayID >= SystemIconIndexStart then Result:= DrawBitmap(AFile.IconOverlayID {$IFDEF RabbitVCS} - SystemIconIndexStart {$ENDIF}, Canvas, X, Y); end; {$ENDIF} ; end; function TPixMapManager.GetIconBySortingDirection(SortingDirection: TSortDirection): PtrInt; begin case SortingDirection of sdDescending: begin Result := FiSortDescID; end; sdAscending: begin Result := FiSortAscID; end; else Result := -1; end; end; function TPixMapManager.GetIconByFile(AFile: TFile; DirectAccess: Boolean; LoadIcon: Boolean; IconsMode: TShowIconsMode; GetIconWithLink: Boolean): PtrInt; var Ext: String; {$IFDEF MSWINDOWS} sFileName: String; FileInfo: TSHFileInfoW; dwFileAttributes: DWORD; uFlags: UINT; {$ENDIF} begin Result := -1; if not Assigned(AFile) then Exit; with AFile do begin if Name = '..' then begin Result := FiUpDirIconID; Exit; end; if IsLinkToDirectory then begin if GetIconWithLink then begin if (LinkProperty = nil) or LinkProperty.IsValid then Result := FiDirLinkIconID else Result := FiDirLinkBrokenIconID; Exit; end; end; if IsDirectory or IsLinkToDirectory then begin {$IF DEFINED(MSWINDOWS)} if (IconsMode = sim_standart) or // Directory has special icon only if it has "read only" or "system" attributes // and contains desktop.ini file (not (DirectAccess and (IsSysFile or FileIsReadOnly(Attributes)) and mbFileExists(FullPath + '\desktop.ini'))) or (GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 16) then {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if (IconsMode = sim_all_and_exe) and (DirectAccess) then begin if mbFileAccess(Path + Name + '/.directory', fmOpenRead) then begin if LoadIcon then Result := GetIconByDesktopFile(Path + Name + '/.directory', FiDirIconID) else Result := -1; Exit; end else if (FHomeFolder = Path) then begin if LoadIcon then Result := CheckAddThemePixmap(GioFileGetIcon(FullPath)) else Result := -1; Exit; end else Exit(FiDirIconID); end else {$ELSEIF DEFINED(DARWIN)} if (IconsMode = sim_all_and_exe) and (DirectAccess and (ExtractFileExt(FullPath) = '.app')) then begin if LoadIcon then Result := GetApplicationBundleIcon(FullPath, FiDirIconID) else Result := -1; Exit; end else {$ENDIF} begin Exit(FiDirIconID); end; end else // not directory begin if IsLink and GetIconWithLink then begin if (LinkProperty = nil) or LinkProperty.IsValid then Exit(FiLinkIconID) else Exit(FiLinkBrokenIconID); end; if (Extension = '') then Exit(FiDefaultIconID); Ext := UTF8LowerCase(Extension); {$IF DEFINED(MSWINDOWS)} if IconsMode <> sim_all_and_exe then begin if Ext = 'exe' then Exit(FiExeIconID) else if Ext = 'lnk' then Exit(FiLinkIconID) else if Ext = 'url' then Exit(FiLinkIconID) else if Ext = 'ico' then Exit(FiDefaultIconID) end; {$ELSEIF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} if IconsMode = sim_all_and_exe then begin if DirectAccess and (Ext = 'desktop') then begin if LoadIcon then Result := GetIconByDesktopFile(Path + Name, FiDefaultIconID) else Result := -1; Exit; end; end; {$ENDIF} FPixmapsLock.Acquire; try Result := FExtList.Find(Ext); if Result >= 0 then Exit(PtrInt(PtrUInt(FExtList.List[Result]^.Data))); if IconsMode <= sim_standart then Exit(FiDefaultIconID); {$IF DEFINED(UNIX)} if LoadIcon = False then Exit(-1); Result := GetMimeIcon(Ext, gIconsSize); if Result < 0 then Result := FiDefaultIconID; // Default icon should also be associated with the extension // because it will be faster to find next time. FExtList.Add(Ext, Pointer(Result)); {$ENDIF} finally FPixmapsLock.Release; end; end; {$IF DEFINED(MSWINDOWS)} if DirectAccess then begin if LoadIcon = False then Exit(-1); dwFileAttributes := 0; uFlags := SHGFI_SYSICONINDEX; sFileName := FullPath; end else begin // This is fast, so do it even if LoadIcon is false. dwFileAttributes := FILE_ATTRIBUTE_NORMAL; uFlags := SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES; sFileName := Name; end; if (SHGetFileInfoW(PWideChar(UTF8Decode(sFileName)), dwFileAttributes, FileInfo, SizeOf(FileInfo), uFlags) = 0) then begin // Could not retrieve icon. if IsDirectory then Result := FiDirIconID else Result := FiDefaultIconID; end else begin Result := FileInfo.iIcon + SystemIconIndexStart; if (not IsDirectory) and (Ext <> 'exe') and (Ext <> 'ico') and (Ext <> 'cur') and (Ext <> 'lnk') and (Ext <> 'url') then begin FPixmapsLock.Acquire; try FExtList.Add(Ext, Pointer(Result)); finally FPixmapsLock.Release; end; end; end; {$ENDIF} end; end; {$IF DEFINED(MSWINDOWS)} function TPixMapManager.GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; begin if DirectAccess then Result:= SHGetOverlayIconIndex(AFile.Path, AFile.Name) + SystemIconIndexStart else Result:= -1; end; {$ELSEIF DEFINED(RabbitVCS)} function TPixMapManager.GetIconOverlayByFile(AFile: TFile; DirectAccess: Boolean): PtrInt; var Emblem: String; begin if RabbitVCS and DirectAccess then begin Emblem:= CheckStatus(AFile.FullPath); if Length(Emblem) = 0 then Exit(0); Result:= CheckAddThemePixmap(Emblem); Result:= IfThen(Result < 0, 0, Result + SystemIconIndexStart); end else Result:= 0; end; {$ENDIF} function TPixMapManager.GetIconByName(const AIconName: String): PtrInt; begin Result := CheckAddPixmap(AIconName, gIconsSize); end; function TPixMapManager.GetDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; {$IFDEF MSWINDOWS} var SFI: TSHFileInfoW; Icon: TIcon = nil; uFlags: UINT; iIconSmall, iIconLarge: Integer; {$ENDIF} begin if Drive^.DriveType = dtVirtual then begin Result := GetVirtualDriveIcon(IconSize, clBackColor); Exit; end; Result := nil; {$IFDEF MSWINDOWS} if GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 15 then Exit; if (not gCustomDriveIcons) and (GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) > 16) then begin SFI.hIcon := 0; Result := Graphics.TBitMap.Create; iIconSmall:= GetSystemMetrics(SM_CXSMICON); iIconLarge:= GetSystemMetrics(SM_CXICON); if (IconSize = 16) and (iIconSmall = 16) then // standart small icon uFlags := SHGFI_SMALLICON // Use small icon else if (IconSize = 32) and (iIconLarge = 32) then // standart large icon uFlags := SHGFI_LARGEICON // Use large icon else if IconSize > iIconSmall then uFlags := SHGFI_LARGEICON // Use large icon else uFlags := SHGFI_SMALLICON; // Use small icon if (SHGetFileInfoW(PWideChar(UTF8Decode(Drive^.Path)), 0, SFI, SizeOf(SFI), uFlags or SHGFI_ICON) <> 0) and (SFI.hIcon <> 0) then begin if (IconSize = iIconSmall) or (IconSize = iIconLarge) then // standart icon size try Icon := CreateIconFromHandle(SFI.hIcon); Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 finally FreeThenNil(Icon); DestroyIcon(SFI.hIcon); end else // non standart icon size try Icon := CreateIconFromHandle(SFI.hIcon); Result.Assign(Icon); Result.Masked := True; // Need to explicitly set Masked=True, Lazarus issue #0019747 Result := StretchBitmap(Result, IconSize, clBackColor, True); finally FreeThenNil(Icon); DestroyIcon(SFI.hIcon); end end; end // not gCustomDriveIcons else {$ENDIF} begin Result := GetBuiltInDriveIcon(Drive, IconSize, clBackColor); end; end; function TPixMapManager.GetBuiltInDriveIcon(Drive : PDrive; IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; var DriveIconListIndex: Integer; Bitmap: Graphics.TBitmap; begin {$IFDEF MSWINDOWS} if GetDeviceCaps(Application.MainForm.Canvas.Handle, BITSPIXEL) < 15 then Exit(nil); {$ENDIF} case IconSize of 16: // Standart 16x16 icon size DriveIconListIndex := 0; 22: // Standart 22x22 icon size DriveIconListIndex := 1; 32: // Standart 32x32 icon size DriveIconListIndex := 2; else // for non standart icon size use more large icon for stretch DriveIconListIndex := 2; end; with FDriveIconList[DriveIconListIndex] do case Drive^.DriveType of dtFloppy: Bitmap := bmMediaFloppy; dtHardDisk: Bitmap := bmDriveHardDisk; dtFlash: Bitmap := bmMediaFlash; dtOptical: Bitmap := bmMediaOptical; dtNetwork: Bitmap := bmDriveNetwork; dtRemovable: Bitmap := bmDriveRemovableMedia; dtRemovableUsb: Bitmap := bmDriveRemovableMediaUsb; else Bitmap := bmDriveHardDisk; end; // if need stretch icon if (IconSize <> 16) and (IconSize <> 22) and (IconSize <> 32) then begin Result := StretchBitmap(Bitmap, IconSize, clBackColor, False); end else begin Result := Graphics.TBitmap.Create; Result.Assign(Bitmap); end; // 'Bitmap' should not be freed, because it only points to DriveIconList. end; function TPixMapManager.GetDefaultDriveIcon(IconSize : Integer; clBackColor : TColor) : Graphics.TBitmap; var Drive: TDrive = (DisplayName: ''; Path: ''; DriveLabel: ''; DeviceId: ''; DriveType: dtHardDisk; FileSystem: ''; IsMediaAvailable: True; IsMediaEjectable: False; IsMediaRemovable: False; IsMounted: True; AutoMount: True); begin Result := GetBuiltInDriveIcon(@Drive, IconSize, clBackColor); end; function TPixMapManager.GetVirtualDriveIcon(IconSize: Integer; clBackColor: TColor): Graphics.TBitmap; var DriveIconListIndex: Integer; begin case IconSize of 16: // Standart 16x16 icon size DriveIconListIndex := 0; 22: // Standart 22x22 icon size DriveIconListIndex := 1; 32: // Standart 32x32 icon size DriveIconListIndex := 2; else // for non standart icon size use more large icon for stretch DriveIconListIndex := 2; end; with FDriveIconList[DriveIconListIndex] do begin // if need stretch icon if (IconSize <> 16) and (IconSize <> 22) and (IconSize <> 32) then begin Result := StretchBitmap(bmDriveVirtual, IconSize, clBackColor, False); end else begin Result := Graphics.TBitmap.Create; Result.Assign(bmDriveVirtual); end; end; end; function TPixMapManager.GetArchiveIcon(IconSize: Integer; clBackColor : TColor) : Graphics.TBitmap; begin Result := GetBitmap(FiArcIconID); if Assigned(Result) then begin // if need stretch icon if (IconSize <> gIconsSize) then begin Result := StretchBitmap(Result, IconSize, clBackColor, True); end; end; end; function TPixMapManager.GetFolderIcon(IconSize: Integer; clBackColor: TColor): Graphics.TBitmap; begin Result := GetBitmap(FiDirIconID); if Assigned(Result) then begin // if need stretch icon if (IconSize <> gIconsSize) then begin Result := StretchBitmap(Result, IconSize, clBackColor, True); end; end; end; function TPixMapManager.GetDefaultIcon(AFile: TFile): PtrInt; begin if AFile.IsDirectory then Result := FiDirIconID else if UTF8LowerCase(AFile.Extension) = 'exe' then Result := FiExeIconID else Result := FiDefaultIconID; end; procedure LoadPixMapManager; begin DCDebug('Creating PixmapManager'); PixMapManager:=TPixMapManager.Create; PixMapManager.Load(gpCfgDir + 'pixmaps.txt'); end; initialization finalization if Assigned(PixMapManager) then begin DCDebug('Shutting down PixmapManager'); FreeAndNil(PixMapManager); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uicontheme.pas���������������������������������������������������������0000644�0001750�0000144�00000034744�12612505011�020002� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Simple implementation of Icon Theme based on FreeDesktop.org specification (http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) Copyright (C) 2009-2014 Alexander Koblov (alexx2000@mail.ru) 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 uIconTheme; {$mode objfpc}{$H+} interface uses SysUtils, Classes, StringHashList, DCClassesUtf8; type TIconType = (itFixed, itScalable, itThreshold); TIconDirInfo = record IconSize: Integer; //IconContext: String; // currently not used IconType: TIconType; IconMaxSize, IconMinSize, IconThreshold: Integer; FileListCache: array of TStringHashList; end; PIconDirInfo = ^TIconDirInfo; { TIconDirList } TIconDirList = class (TStringList) private function GetIconDir(Index: Integer): PIconDirInfo; public destructor Destroy; override; function Add(IconDirName: String; IconDirInfo: PIconDirInfo): Integer; reintroduce; property Items[Index: Integer]: PIconDirInfo read GetIconDir; end; { TIconTheme } TIconTheme = class protected FTheme, FThemeName: String; FComment: String; FInherits: TStringList; FOwnsInheritsObject: Boolean; FDirectories: TIconDirList; FBaseDirList: array of String; //en> List of directories that have this theme's icons. FBaseDirListAtCreate: array of String; //en> Base dir list passed to Create function LoadIconDirInfo(const IniFile: TIniFileEx; const sIconDirName: String): PIconDirInfo; function FindIconHelper(aIconName: String; AIconSize: Integer): String; function LoadThemeWithInherited(AInherits: TStringList): Boolean; procedure LoadParentTheme(AThemeName: String); procedure CacheDirectoryFiles(SubDirIndex: Integer; BaseDirIndex: Integer); protected function LookupIcon(AIconName: String; AIconSize: Integer): String; function CreateParentTheme(const sThemeName: String): TIconTheme; virtual; public constructor Create(sThemeName: String; BaseDirList: array of String); virtual; destructor Destroy; override; function Load: Boolean; virtual; function FindIcon(AIconName: String; AIconSize: Integer): String; function DirectoryMatchesSize(SubDirIndex: Integer; AIconSize: Integer): Boolean; function DirectorySizeDistance(SubDirIndex: Integer; AIconSize: Integer): Integer; class function CutTrailingExtension(const AIconName: String): String; class procedure RegisterExtension(const AExtension: String); property ThemeName: String read FThemeName; property Directories: TIconDirList read FDirectories; end; implementation uses LCLProc, StrUtils, uDebug, uFindEx, DCBasicTypes, DCOSUtils, DCStrUtils; var IconExtensionList: TDynamicStringArray; { TIconTheme } function LookupFallbackIcon (AIconName: String): String; begin (* for each directory in $(basename list) { for extension in ("png", "svg", "xpm") { if exists directory/iconname.extension return directory/iconname.extension } } *) Result := EmptyStr; end; function TIconTheme.DirectoryMatchesSize(SubDirIndex: Integer; AIconSize: Integer): Boolean; begin Result:= False; // read Type and Size data from subdir if SubDirIndex < 0 then Exit; with FDirectories.Items[SubDirIndex]^ do case IconType of itFixed: Result:= (IconSize = AIconSize); itScalable: Result:= (IconMinSize <= AIconSize) and (AIconSize <= IconMaxSize); itThreshold: Result:= ((IconSize - IconThreshold) <= AIconSize) and (AIconSize <= (IconSize + IconThreshold)); end; end; function TIconTheme.DirectorySizeDistance(SubDirIndex: Integer; AIconSize: Integer): Integer; begin Result:= 0; // read Type and Size data from subdir if SubDirIndex < 0 then Exit; with FDirectories.Items[SubDirIndex]^ do case IconType of itFixed: Result:= abs(IconSize - AIconSize); itScalable: begin if AIconSize < IconMinSize then Result:= IconMinSize - AIconSize; if AIconSize > IconMaxSize then Result:= AIconSize - IconMaxSize; end; itThreshold: begin if AIconSize < IconSize - IconThreshold then Result:= IconMinSize - AIconSize; if AIconSize > IconSize + IconThreshold then Result:= AIconSize - IconMaxSize; end; end; end; constructor TIconTheme.Create(sThemeName: String; BaseDirList: array of String); var I, J: Integer; sElement: String; begin FTheme:= sThemeName; FInherits:= nil; FOwnsInheritsObject:= False; FDirectories:= nil; J:= 0; SetLength(FBaseDirList, Length(BaseDirList)); SetLength(FBaseDirListAtCreate, Length(BaseDirList)); for I:= Low(BaseDirList) to High(BaseDirList) do begin sElement:= BaseDirList[I]; // use only directories that has this theme if mbDirectoryExists(sElement + PathDelim + FTheme) then begin FBaseDirList[J]:= sElement; Inc(J); end; FBaseDirListAtCreate[I] := sElement; // Remember full base dir list. end; SetLength(FBaseDirList, J); end; destructor TIconTheme.Destroy; var I: Integer; begin if FOwnsInheritsObject and Assigned(FInherits) then begin for I:= FInherits.Count - 1 downto 0 do begin if Assigned(FInherits.Objects[I]) then begin TIconTheme(FInherits.Objects[I]).Free; FInherits.Objects[I]:= nil; end; end; FreeThenNil(FInherits); end; FreeThenNil(FDirectories); inherited Destroy; end; function TIconTheme.Load: Boolean; begin Result := LoadThemeWithInherited(FInherits); end; function TIconTheme.LoadThemeWithInherited(AInherits: TStringList): Boolean; var I: Integer; sValue: String; sElement: String; sThemeName: String; IniFile: TIniFileEx = nil; IconDirInfo: PIconDirInfo = nil; begin Result:= False; for I:= Low(FBaseDirList) to High(FBaseDirList) do begin sElement:= FBaseDirList[I] + PathDelim + FTheme + PathDelim + 'index.theme'; if mbFileExists(sElement) then begin sThemeName:= sElement; Result:= True; Break; end; end; // theme not found if Result = False then begin DCDebug('Theme ', FTheme, ' not found.'); Exit; end; FDirectories:= TIconDirList.Create; // list of parent themes if Assigned(AInherits) then // if this theme is child FInherits:= AInherits else // new theme begin FInherits:= TStringList.Create; FOwnsInheritsObject:= True; end; // load theme from file IniFile:= TIniFileEx.Create(sThemeName, fmOpenRead); try FThemeName:= IniFile.ReadString('Icon Theme', 'Name', EmptyStr); FComment:= IniFile.ReadString('Icon Theme', 'Comment', EmptyStr); DCDebug('Loading icon theme ', FThemeName); // read theme directories sValue:= IniFile.ReadString('Icon Theme', 'Directories', EmptyStr); repeat sElement:= Copy2SymbDel(sValue, ','); IconDirInfo:= LoadIconDirInfo(IniFile, sElement); if Assigned(IconDirInfo) then FDirectories.Add(sElement, IconDirInfo); until sValue = EmptyStr; // read parent themes sValue:= IniFile.ReadString('Icon Theme', 'Inherits', EmptyStr); if sValue <> EmptyStr then repeat sElement:= Copy2SymbDel(sValue, ','); LoadParentTheme(sElement); until sValue = EmptyStr; finally FreeAndNil(IniFile); end; end; procedure TIconTheme.LoadParentTheme(AThemeName: String); var I: Integer; ATheme: TIconTheme; begin if FInherits.IndexOf(AThemeName) < 0 then begin ATheme:= CreateParentTheme(AThemeName); I:= FInherits.AddObject(AThemeName, ATheme); if not ATheme.LoadThemeWithInherited(FInherits) then begin ATheme.Free; FInherits.Delete(I); end; end; end; function TIconTheme.FindIcon(AIconName: String; AIconSize: Integer): String; begin Result:= FindIconHelper(AIconName, AIconSize); { if Result = EmptyStr then Result:= LookupFallbackIcon(AIconName); } end; function TIconTheme.LookupIcon(AIconName: String; AIconSize: Integer): String; var I, J, FoundIndex: Integer; MinimalSize, NewSize: Integer; procedure MakeResult; inline; begin Result:= FBaseDirList[J] + PathDelim + FTheme + PathDelim + FDirectories.Strings[I] + PathDelim + AIconName + '.' + IconExtensionList[PtrInt(FDirectories.Items[I]^.FileListCache[J].List[FoundIndex]^.Data)]; end; begin Result:= EmptyStr; if not Assigned(FDirectories) then Exit; { This is a slightly more optimized version of the original algorithm from freedesktop.org. } MinimalSize:= MaxInt; for J:= Low(FBaseDirList) to High(FBaseDirList) do begin for I:= 0 to FDirectories.Count - 1 do begin NewSize:= DirectorySizeDistance(I, AIconSize); if NewSize < MinimalSize then begin if not Assigned(FDirectories.Items[I]^.FileListCache[J]) then CacheDirectoryFiles(I, J); FoundIndex:= FDirectories.Items[I]^.FileListCache[J].Find(AIconName); if FoundIndex >= 0 then begin MakeResult; if NewSize = 0 then // exact match Exit else MinimalSize:= NewSize; end; end; end; end; end; function TIconTheme.CreateParentTheme(const sThemeName: String): TIconTheme; begin Result:= TIconTheme.Create(sThemeName, FBaseDirListAtCreate); end; function TIconTheme.LoadIconDirInfo(const IniFile: TIniFileEx; const sIconDirName: String): PIconDirInfo; var IconTypeStr: String; I: Integer; begin New(Result); with Result^ do begin IconSize:= IniFile.ReadInteger(sIconDirName, 'Size', 48); //IconContext:= IniFile.ReadString(sIconDirName, 'Context', EmptyStr); // currently not used IconTypeStr:= IniFile.ReadString(sIconDirName, 'Type', 'Threshold'); IconMaxSize:= IniFile.ReadInteger(sIconDirName, 'MaxSize', IconSize); IconMinSize:= IniFile.ReadInteger(sIconDirName, 'MinSize', IconSize); IconThreshold:= IniFile.ReadInteger(sIconDirName, 'Threshold', 2); if SameText(IconTypeStr, 'Fixed') then IconType:= itFixed else if SameText(IconTypeStr, 'Scalable') then IconType:= itScalable else if SameText(IconTypeStr, 'Threshold') then IconType:= itThreshold else begin Dispose(Result); DCDebug('Theme directory "%s" has unsupported icon type "%s"', [sIconDirName, IconTypeStr]); Exit(nil); end; SetLength(FileListCache, Length(FBaseDirList)); for I:= 0 to Length(FBaseDirList) - 1 do FileListCache[I]:= nil; end; end; function TIconTheme.FindIconHelper(aIconName: String; AIconSize: Integer): String; var I: Integer; begin Result:= LookupIcon(AIconName, AIconSize); if Result <> EmptyStr then Exit; if Assigned(FInherits) then begin // find in parent themes for I:= 0 to FInherits.Count - 1 do begin Result:= TIconTheme(FInherits.Objects[I]).LookupIcon(aIconName, AIconSize); if Result <> EmptyStr then Exit; end; end; Result:= EmptyStr; end; procedure TIconTheme.CacheDirectoryFiles(SubDirIndex: Integer; BaseDirIndex: Integer); var SearchDir, FoundName, FoundExt: String; SearchRec: TSearchRecEx; DirList: TStringHashList; I: Integer; begin DirList:= TStringHashList.Create(True); FDirectories.Items[SubDirIndex]^.FileListCache[BaseDirIndex]:= DirList; SearchDir := FBaseDirList[BaseDirIndex] + PathDelim + FTheme + PathDelim + FDirectories.Strings[SubDirIndex]; if FindFirstEx(SearchDir + PathDelim + '*', 0, SearchRec) = 0 then repeat if (SearchRec.Name <> '.') and (SearchRec.Name <> '..') then begin FoundExt := ExtractFileExt(SearchRec.Name); if Length(FoundExt) > 0 then begin FoundName := Copy(SearchRec.Name, 1, Length(SearchRec.Name) - Length(FoundExt)); Delete(FoundExt, 1, 1); // remove the dot // Add only files with supported extensions. for I:= Low(IconExtensionList) to High(IconExtensionList) do if IconExtensionList[I] = FoundExt then begin DirList.Add(FoundName, Pointer(PtrInt(I))); break; end; end; end; until FindNextEx(SearchRec) <> 0; FindCloseEx(SearchRec); end; class function TIconTheme.CutTrailingExtension(const AIconName: String): String; var I: Integer; begin for I:= Low(IconExtensionList) to High(IconExtensionList) do if StrEnds(AIconName, '.' + IconExtensionList[I]) then Exit(Copy(AIconName, 1, Length(AIconName) - Length(IconExtensionList[I]) - 1)); Result := AIconName; end; class procedure TIconTheme.RegisterExtension(const AExtension: String); var I: Integer; ExtList: TDynamicStringArray; begin ExtList:= SplitString(AExtension, ';'); for I:= Low(ExtList) to High(ExtList) do begin AddString(IconExtensionList, ExtList[I]); end; end; { TIconDirList } function TIconDirList.Add(IconDirName: String; IconDirInfo: PIconDirInfo): Integer; begin Result:= AddObject(IconDirName, TObject(IconDirInfo)); end; function TIconDirList.GetIconDir(Index: Integer): PIconDirInfo; begin Result:= PIconDirInfo(Objects[Index]); end; destructor TIconDirList.Destroy; var I, J: Integer; IconDirInfo: PIconDirInfo; begin for I:= Count - 1 downto 0 do begin if Assigned(Objects[I]) then begin IconDirInfo:= PIconDirInfo(Objects[I]); for J := 0 to Length(IconDirInfo^.FileListCache) - 1 do IconDirInfo^.FileListCache[J].Free; Dispose(IconDirInfo); end; end; inherited Destroy; end; initialization AddString(IconExtensionList, 'png'); AddString(IconExtensionList, 'xpm'); end. ����������������������������doublecmd-0.7.1/src/platform/udcversion.pas���������������������������������������������������������0000644�0001750�0000144�00000031444�12675713165�020041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Version information about DC, building tools and running environment. Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.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 uDCVersion; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLVersion; {$I dcrevision.inc} // Double Commander revision number {$I revision.inc} // Lazarus revision number const dcVersion = '0.7.1 beta'; dcBuildDate = {$I %DATE%}; lazVersion = lcl_version; // Lazarus version (major.minor.micro) lazRevision = RevisionStr; // Lazarus SVN revision fpcVersion = {$I %FPCVERSION%}; // FPC version (major.minor.micro) TargetCPU = {$I %FPCTARGETCPU%}; // Target CPU of FPC TargetOS = {$I %FPCTARGETOS%}; // Target Operating System of FPC var TargetWS, // Target WidgetSet of Lazarus OSVersion, // Operating System where DC is run WSVersion // WidgetSet library version where DC is run : String; procedure InitializeVersionInfo; function GetLazarusVersion: String; implementation uses InterfaceBase {$IF DEFINED(UNIX)} , BaseUnix, DCOSUtils, uDCUtils, DCClassesUtf8 {$IFDEF DARWIN} , MacOSAll {$ENDIF} {$ENDIF} {$IFDEF LCLQT} , qt4 {$ENDIF} {$IFDEF LCLGTK2} , gtk2 {$ENDIF} {$IFDEF MSWINDOWS} , Windows, JwaNative, JwaNtStatus, JwaWinType {$ENDIF} ; const // A custom version of InterfaceBase.LCLPlatformDirNames // because we make slight changes to names. LCLPlatform: array[TLCLPlatform] of string = ( 'gtk1', 'gtk2', 'gtk3', 'win32/win64', 'wince', 'carbon', 'qt4', 'fpGUI', 'NoGUI', 'cocoa', 'customdrawn' ); {$IF DEFINED(UNIX)} {en Reads file into strings. Returns @false if file not found or cannot be read. } function GetStringsFromFile(FileName: String; out sl: TStringListEx): Boolean; begin Result := False; sl := nil; if mbFileAccess(FileName, fmOpenRead) then begin sl := TStringListEx.Create; try sl.LoadFromFile(FileName); Result := True; except on EFilerError do; // Bypass end; end; end; {en Reads first line of file into a string. Returns @false if file not found or cannot be read. } function GetStringFromFile(FileName: String; out str: String): Boolean; var sl: TStringListEx; begin str := EmptyStr; Result := GetStringsFromFile(FileName, sl); if Result then try if sl.Count > 0 then str := sl.Strings[0]; finally sl.Free; end; end; function GetOsFromLsbRelease: String; var sl: TStringListEx; begin Result := EmptyStr; if GetStringsFromFile('/etc/lsb-release', sl) then try if sl.Count > 0 then begin Result := sl.Values['DISTRIB_DESCRIPTION']; if Result <> EmptyStr then Result := TrimQuotes(Result) else Result := sl.Values['DISTRIB_ID'] + sl.Values['DISTRIB_RELEASE'] + sl.Values['DISTRIB_CODENAME']; end; finally sl.Free; end; end; function GetOsFromProcVersion: String; var i: Integer; s: String; begin Result := EmptyStr; if GetStringFromFile('/proc/version', s) then begin // Get first three strings separated by space. i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i); Delete(s, 1, i); i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i); Delete(s, 1, i); i := Pos(' ', s); if i > 0 then Result := Result + Copy(s, 1, i - 1); Delete(s, 1, i); end; end; function GetOsFromIssue: String; begin if not GetStringFromFile('/etc/issue', Result) then Result := EmptyStr; end; function GetDebianVersion: String; var s: String; begin if GetStringFromFile('/etc/debian_version', s) then begin Result := 'Debian'; if s <> EmptyStr then Result := Result + ' ' + s; end else Result := EmptyStr; end; function GetSuseVersion: String; begin if GetStringFromFile('/etc/SuSE-release', Result) or GetStringFromFile('/etc/suse-release', Result) then begin if Result = EmptyStr then Result := 'Suse'; end else Result := EmptyStr; end; function GetRedHatVersion: String; begin if GetStringFromFile('/etc/redhat-release', Result) then begin if Result = EmptyStr then Result := 'RedHat'; end else Result := EmptyStr; end; function GetMandrakeVersion: String; begin if GetStringFromFile('/etc/mandrake-release', Result) then begin if Result = EmptyStr then Result := 'Mandrake'; end else Result := EmptyStr; end; function GetVersionNumber: String; var Info: utsname; I: Integer = 1; begin FillChar(Info, SizeOf(Info), 0); fpUname(Info); Result := Info.release; while (I <= Length(Result)) and (Result[I] in ['0'..'9', '.']) do Inc(I); Result := Copy(Result, 1, I - 1); end; {$IFDEF DARWIN} function GetMacOSXVersion: String; var versionMajor, versionMinor, versionBugFix: SInt32; begin Result:= EmptyStr; if (Gestalt(gestaltSystemVersionMajor, versionMajor) <> noErr) then Exit; if (Gestalt(gestaltSystemVersionMinor, versionMinor) <> noErr) then Exit; if (Gestalt(gestaltSystemVersionBugFix, versionBugFix) <> noErr) then Exit; Result:= Format('Mac OS X %d.%d.%d', [versionMajor, versionMinor, versionBugFix]); end; {$ENDIF} {$ENDIF} {$IF DEFINED(MSWINDOWS)} procedure TryGetNativeSystemInfo(var SystemInfo: TSystemInfo); type TGetNativeSystemInfo = procedure (var lpSystemInfo: TSystemInfo); stdcall; var hLib: HANDLE; GetNativeSystemInfoProc: TGetNativeSystemInfo; begin hLib := LoadLibrary(LPCTSTR('kernel32.dll')); if hLib <> 0 then begin try GetNativeSystemInfoProc := TGetNativeSystemInfo(GetProcAddress(hLib, 'GetNativeSystemInfo')); if Assigned(GetNativeSystemInfoProc) then GetNativeSystemInfoProc(SystemInfo) else GetSystemInfo(SystemInfo); finally FreeLibrary(hLib); end; end else GetSystemInfo(SystemInfo); end; {$ENDIF} procedure InitializeVersionInfo; {$IF DEFINED(MSWINDOWS)} const PROCESSOR_ARCHITECTURE_AMD64 = 9; var si: SYSTEM_INFO; osvi: TOsVersionInfoExW; {$ENDIF} begin TargetWS := LCLPlatform[WidgetSet.LCLPlatform]; {$IF DEFINED(MSWINDOWS)} OSVersion := 'Windows'; ZeroMemory(@osvi, SizeOf(TOsVersionInfoExW)); osvi.dwOSVersionInfoSize := SizeOf(TOsVersionInfoExW); if (RtlGetVersion(@osvi) = STATUS_SUCCESS) or GetVersionExW(@osvi) then begin ZeroMemory(@si, SizeOf(si)); TryGetNativeSystemInfo(si); case osvi.dwPlatformId of VER_PLATFORM_WIN32_WINDOWS: case osvi.dwMajorVersion of 4: case osvi.dwMinorVersion of 0: OSVersion := OSVersion + ' 95'; 10: OSVersion := OSVersion + ' 98'; 90: OSVersion := OSVersion + ' ME'; end; end; VER_PLATFORM_WIN32_NT: begin case osvi.dwMajorVersion of 3: OSVersion := OSVersion + ' NT 3.5'; 4: OSVersion := OSVersion + ' NT 4'; 5: case osvi.dwMinorVersion of 0: OSVersion := OSVersion + ' 2000'; 1: begin OSVersion := OSVersion + ' XP'; if osvi.wSuiteMask = $0000 then OSVersion := OSVersion + ' Home' else if osvi.wSuiteMask = $0200 then OSVersion := OSVersion + ' Professional'; end; 2: if (osvi.wProductType = VER_NT_WORKSTATION) and (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) then begin OSVersion := OSVersion + ' XP Professional x64' end else if (osvi.wProductType = VER_NT_SERVER) then begin if osvi.wSuiteMask = $8000 then OSVersion := OSVersion + ' Home Server' else OSVersion := OSVersion + ' Server 2003'; end; end; 6: case osvi.dwMinorVersion of 0: if (osvi.wProductType = VER_NT_WORKSTATION) then begin OSVersion := OSVersion + ' Vista'; if osvi.wSuiteMask = $0000 then OSVersion := OSVersion + ' Ultimate' else if osvi.wSuiteMask = $0200 then OSVersion := OSVersion + ' Home'; end else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2008'; 1: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 7' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2008 R2'; 2: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 8' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2012'; 3: if (osvi.wProductType = VER_NT_WORKSTATION) then OSVersion := OSVersion + ' 8.1' else if (osvi.wProductType = VER_NT_SERVER) then OSVersion := OSVersion + ' Server 2012 R2'; end; 10: case osvi.dwMinorVersion of 0: if (osvi.wProductType = VER_NT_WORKSTATION) then begin OSVersion := OSVersion + ' 10'; if (osvi.wSuiteMask and VER_SUITE_PERSONAL <> 0) then OSVersion := OSVersion + ' Home'; end end; end; end; end; // If something detected then add service pack number and architecture. if OSVersion <> 'Windows' then begin if osvi.wServicePackMajor > 0 then begin OSVersion := OSVersion + ' SP' + IntToStr(osvi.wServicePackMajor); if osvi.wServicePackMinor > 0 then OSVersion := OSVersion + '.' + IntToStr(osvi.wServicePackMinor); end; if si.wProcessorArchitecture in [PROCESSOR_ARCHITECTURE_AMD64] then OSVersion := OSVersion + ' x86_64' else OSVersion := OSVersion + ' i386'; end else OSVersion := OSVersion + ' Build ' + IntToStr(osvi.dwBuildNumber); end; {$ELSEIF DEFINED(UNIX)} // Try using linux standard base. OSVersion := GetOsFromLsbRelease; // Try some distribution-specific files. if OSVersion = EmptyStr then OSVersion := GetDebianVersion; if OSVersion = EmptyStr then OSVersion := GetRedHatVersion; if OSVersion = EmptyStr then OSVersion := GetSuseVersion; if OSVersion = EmptyStr then OSVersion := GetMandrakeVersion; {$IFDEF DARWIN} if OSVersion = EmptyStr then OSVersion := GetMacOSXVersion; {$ENDIF} // Other methods. if OSVersion = EmptyStr then OSVersion := GetOsFromIssue; if OSVersion = EmptyStr then OSVersion := GetOsFromProcVersion; // Set default names. if OSVersion = EmptyStr then begin {$IF DEFINED(LINUX)} OSVersion := 'Linux'; {$ELSEIF DEFINED(DARWIN)} OSVersion := 'Darwin'; // MacOS {$ELSEIF DEFINED(FREEBSD)} OSVersion := 'FreeBSD'; {$ELSEIF DEFINED(BSD)} OSVersion := 'BSD'; {$ELSE} OSVersion := 'Unix'; {$ENDIF} OSVersion += ' ' + GetVersionNumber; end; {$ENDIF} {$IFDEF LCLQT} WSVersion := 'Qt ' + QtVersion + ', libQt4Pas '; WSVersion := WSVersion + IntToStr((QT_VERSION shr 16) and 255) + '.' + IntToStr((QT_VERSION shr 8) and 255) + '.' + IntToStr((QT_VERSION ) and 255); {$ENDIF} {$IFDEF LCLGTK2} WSVersion := 'GTK ' + IntToStr(gtk_major_version) + '.' + IntToStr(gtk_minor_version) + '.' + IntToStr(gtk_micro_version); {$ENDIF} end; function GetLazarusVersion: String; begin Result:= lazVersion; if Length(lazRevision) > 0 then begin Result += '-' + lazRevision; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/svn2revisioninc.exe.cmd������������������������������������������������0000755�0001750�0000144�00000000776�12650255315�021557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off set REVISION_TXT=%1\revision.txt set REVISION_INC=%1\dcrevision.inc del /Q %REVISION_TXT% 2> nul del /Q %REVISION_INC% 2> nul copy ..\units\dcrevision.inc %REVISION_INC% > nul svnversion -n ..\ > %REVISION_TXT% IF ERRORLEVEL 1 goto EXIT set /P REVISION=<%REVISION_TXT% echo %REVISION% | find "Unversioned" > nul IF NOT ERRORLEVEL 1 goto EXIT echo // Created by Svn2RevisionInc> %REVISION_INC% echo const dcRevision = '%REVISION%';>> %REVISION_INC% :EXIT echo Subversion revision %REVISION% ��doublecmd-0.7.1/src/platform/udragdropqt.pas��������������������������������������������������������0000644�0001750�0000144�00000030320�11740433676�020202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Drag&Drop operations for QT. } unit uDragDropQt; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, uDragDropEx, qt4, qtwidgets; type TDragDropSourceQT = class(TDragDropSource) function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; override; private function GetWidget: QWidgetH; end; TDragDropTargetQT = class(TDragDropTarget) public constructor Create(TargetControl: TWinControl); override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private FEventHook : QObject_hookH; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; // called by QT function GetWidget: QWidgetH; function HasSupportedFormat(DropEvent: QDropEventH): Boolean; function OnDragEnter(DragEnterEvent: QDragEnterEventH): Boolean; function OnDragOver(DragMoveEvent: QDragMoveEventH): Boolean; function OnDrop(DropEvent: QDropEventH): Boolean; function OnDragLeave(DragLeaveEvent: QDragLeaveEventH): Boolean; end; function QtActionToDropEffect(Action: QtDropAction): TDropEffect; function DropEffectToQtAction(DropEffect: TDropEffect): QtDropAction; function QtDropEventPointToLCLPoint(const PDropEventPoint: PQtPoint): TPoint; implementation uses uClipboard, LCLIntf; const uriListMimeW : WideString = uriListMime; textPlainMimeW : WideString = textPlainMime; function GetWidgetFromLCLControl(AWinControl: TWinControl): QWidgetH; inline; begin // Custom controls (TQtCustomControl) are created by LCL as // QAbstractScrollArea with a viewport (and two scrollbars). // We want the viewport to be the source/target of drag&drop, so we use // GetContainerWidget which returns the viewport widget for custom controls // and regular widget handle for others. Result := TQtWidget(AWinControl.Handle).GetContainerWidget; end; { ---------- TDragDropSourceQT ---------- } function TDragDropSourceQT.RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled in QT. Result := True; end; function TDragDropSourceQT.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; procedure SetMimeDataInFormat(MimeData: QMimeDataH; MimeType: WideString; DataString: AnsiString); var ByteArray: QByteArrayH; begin ByteArray := QByteArray_create(PAnsiChar(DataString)); try QMimeData_setData(MimeData, @MimeType, ByteArray); finally QByteArray_destroy(ByteArray); end; end; var DragObject: QDragH = nil; MimeData: QMimeDataH = nil; begin Result := False; // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; DragObject := QDrag_create(GetWidget); // deleted automatically by QT try MimeData := QMimeData_create; QDrag_setMimeData(DragObject, MimeData); // MimeData owned by DragObject after this SetMimeDataInFormat(MimeData, uriListMimeW, FormatUriList(FileNamesList)); SetMimeDataInFormat(MimeData, textPlainMimeW, FormatTextPlain(FileNamesList)); except QDrag_destroy(DragObject); raise; end; // Start drag&drop operation (default to Copy action). QDrag_exec(DragObject, QtCopyAction or QtLinkAction or QtMoveAction, qtCopyAction); // Simulate drag-end event. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; end; function TDragDropSourceQT.GetWidget: QWidgetH; begin Result := GetWidgetFromLCLControl(GetControl); end; { ---------- TDragDropTargetQT ---------- } constructor TDragDropTargetQT.Create(TargetControl: TWinControl); begin inherited; FEventHook := nil; end; function TDragDropTargetQT.RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin inherited; QWidget_setAcceptDrops(GetWidget, True); if Assigned(FEventHook) then QObject_hook_destroy(FEventHook); // Tap into target widget's events. FEventHook := QObject_hook_create(GetWidget); QObject_hook_hook_events(FEventHook, @EventFilter); Result := True; end; procedure TDragDropTargetQT.UnregisterEvents; begin QWidget_setAcceptDrops(GetWidget, False); if Assigned(FEventHook) then begin QObject_hook_destroy(FEventHook); FEventHook := nil; end; inherited; end; function TDragDropTargetQT.GetWidget: QWidgetH; begin Result := GetWidgetFromLCLControl(GetControl); end; function TDragDropTargetQT.HasSupportedFormat(DropEvent: QDropEventH): Boolean; var MimeData: QMimeDataH; begin MimeData := QDropEvent_mimeData(DropEvent); if Assigned(MimeData) then begin if QMimeData_hasFormat(mimedata, @urilistmimew) or QMimeData_hasFormat(mimedata, @textPlainMimeW) then Exit(True); end; Result := False; end; function TDragDropTargetQT.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result := False; // False means the event is not filtered out. case QEvent_type(Event) of QEventDragEnter: begin QEvent_accept(Event); OnDragEnter(QDragEnterEventH(Event)); end; QEventDragMove: begin QEvent_accept(Event); OnDragOver(QDragMoveEventH(Event)); end; QEventDrop: begin QEvent_accept(Event); OnDrop(QDropEventH(Event)); end; QEventDragLeave: begin QEvent_accept(Event); OnDragLeave(QDragLeaveEventH(Event)); end; // QEventDragResponse - used internally by QT end; end; function TDragDropTargetQT.OnDragEnter(DragEnterEvent: QDragEnterEventH): Boolean; var CursorPosition: TPoint; DropEffect: TDropEffect; DropEvent: QDropEventH; QtAction: QtDropAction; begin // QDragEnterEvent inherits from QDragMoveEvent, which inherits from QDropEvent. DropEvent := QDropEventH(DragEnterEvent); if not HasSupportedFormat(DropEvent) then begin QDropEvent_setDropAction(DropEvent, QtIgnoreAction); Result := False; end else if Assigned(GetDragEnterEvent) then begin DropEffect := QtActionToDropEffect(QDropEvent_proposedAction(DropEvent)); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(DropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); Result := GetDragEnterEvent()(DropEffect, CursorPosition); if Result then QtAction := DropEffectToQtAction(DropEffect) else QtAction := QtIgnoreAction; QDropEvent_setDropAction(DropEvent, QtAction); end else begin QDropEvent_acceptProposedAction(DropEvent); Result := True; end; end; function TDragDropTargetQT.OnDragOver(DragMoveEvent: QDragMoveEventH): Boolean; var CursorPosition: TPoint; DropEffect: TDropEffect; DropEvent: QDropEventH; QtAction: QtDropAction; begin // QDragMoveEvent inherits from QDropEvent. DropEvent := QDropEventH(DragMoveEvent); if not HasSupportedFormat(DropEvent) then begin QDropEvent_setDropAction(DropEvent, QtIgnoreAction); Result := False; end else if Assigned(GetDragOverEvent) then begin DropEffect := QtActionToDropEffect(QDropEvent_proposedAction(DropEvent)); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(DropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); Result := GetDragOverEvent()(DropEffect, CursorPosition); if Result then QtAction := DropEffectToQtAction(DropEffect) else QtAction := QtIgnoreAction; QDropEvent_setDropAction(DropEvent, QtAction); end else begin QDropEvent_acceptProposedAction(DropEvent); Result := True; end; end; function TDragDropTargetQT.OnDrop(DropEvent: QDropEventH): Boolean; function GetMimeDataInFormat(MimeData: QMimeDataH; MimeType: WideString): AnsiString; var ByteArray: QByteArrayH; Size: Integer; Data: PAnsiChar; begin if QMimeData_hasFormat(MimeData, @MimeType) then begin ByteArray := QByteArray_create(); try QMimeData_data(MimeData, ByteArray, @MimeType); Size := QByteArray_size(ByteArray); Data := QByteArray_data(ByteArray); if (Size > 0) and Assigned(Data) then SetString(Result, Data, Size); finally QByteArray_destroy(ByteArray); end; end else Result := ''; end; var DropAction: QtDropAction; DropEffect: TDropEffect; CursorPosition: TPoint; uriList: String; FileNamesList: TStringList = nil; MimeData: QMimeDataH; begin Result := False; // QDropEvent_possibleActions() returns all actions allowed by the source. // QDropEvent_proposedAction() is the action proposed by the source. DropAction := QDropEvent_dropAction(DropEvent); // action to be performed by the target DropEffect := QtActionToDropEffect(DropAction); CursorPosition := QtDropEventPointToLCLPoint(QDropEvent_pos(dropEvent)); CursorPosition := GetControl.ClientToScreen(CursorPosition); QDropEvent_setDropAction(DropEvent, QtIgnoreAction); // default to ignoring the drop MimeData := QDropEvent_mimeData(DropEvent); if Assigned(GetDropEvent) and Assigned(MimeData) then begin if QMimeData_hasFormat(MimeData, @uriListMimeW) then uriList := URIDecode(Trim(GetMimeDataInFormat(MimeData, uriListMimeW))) else if QMimeData_hasFormat(MimeData, @textPlainMimeW) then // try decoding, as text/plain may also be percent-encoded uriList := URIDecode(Trim(GetMimeDataInFormat(MimeData, textPlainMimeW))) else Exit; // reject the drop try FileNamesList := ExtractFilenames(uriList); if Assigned(FileNamesList) and (FileNamesList.Count > 0) then Result := GetDropEvent()(FileNamesList, DropEffect, CursorPosition); finally if Assigned(FileNamesList) then FreeAndNil(FileNamesList); end; QDropEvent_setDropAction(DropEvent, DropAction); // accept the drop end; end; function TDragDropTargetQT.OnDragLeave(DragLeaveEvent: QDragLeaveEventH): Boolean; begin if Assigned(GetDragLeaveEvent) then Result := GetDragLeaveEvent()() else Result := True; end; { ---------------------------------------------------------------------------- } function QtActionToDropEffect(Action: QtDropAction): TDropEffect; begin case Action of QtCopyAction: Result := DropCopyEffect; QtMoveAction: Result := DropMoveEffect; QtTargetMoveAction: Result := DropMoveEffect; QtLinkAction: Result := DropLinkEffect; else Result := DropNoEffect; end; end; function DropEffectToQtAction(DropEffect: TDropEffect): QtDropAction; begin case DropEffect of DropCopyEffect: Result := QtCopyAction; DropMoveEffect: Result := QtMoveAction; DropLinkEffect: Result := QtLinkAction; else Result := QtIgnoreAction; end; end; function QtDropEventPointToLCLPoint(const PDropEventPoint: PQtPoint): TPoint; begin if Assigned(PDropEventPoint) then begin if (PDropEventPoint^.x <> 0) or (PDropEventPoint^.y <> 0) then begin Result.X := PDropEventPoint^.x; Result.Y := PDropEventPoint^.y; Exit; end; end; GetCursorPos(Result); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/utrash.pas�������������������������������������������������������������0000644�0001750�0000144�00000024746�12625655062�017171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Some functions for working with trash Copyright (C) 2009-2013 Koblov Alexander (Alexx2000@mail.ru) 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 uTrash; {$mode objfpc}{$H+} interface uses Classes, SysUtils; // 30.04.2009 - this function move files and folders to trash can. function mbDeleteToTrash(const FileName: String): Boolean; // 14.05.2009 - this funсtion checks trash availability. function mbCheckTrash(sPath: String): Boolean; var FileTrashUtf8: function(const FileName: String): Boolean; implementation uses DCOSUtils, {$IF DEFINED(MSWINDOWS)} Windows, ShellApi, Win32Int, InterfaceBase, uMyWindows {$ELSEIF DEFINED(UNIX)} BaseUnix, uMyUnix, DCStrUtils, uOSUtils, FileUtil {$IFDEF DARWIN} , MacOSAll, DynLibs, StrUtils {$ELSE} , uFileProcs, uClipboard, uXdg {$ENDIF} {$ENDIF}; function mbDeleteToTrash(const FileName: String): Boolean; {$IF DEFINED(MSWINDOWS)} var wsFileName: WideString; FileOp: TSHFileOpStructW; dwFileAttributes: LongWord; begin wsFileName:= UTF8Decode(FileName); // Windows before Vista don't move symlink into recycle bin // correctly, so we return False in that case if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion < 6) then begin dwFileAttributes:= GetFileAttributesW(PWideChar(wsFileName)); if FPS_ISLNK(dwFileAttributes) and FPS_ISDIR(dwFileAttributes) then Exit(False); end; wsFileName:= wsFileName + #0; FillChar(FileOp, SizeOf(FileOp), 0); FileOp.Wnd := TWin32Widgetset(Widgetset).AppHandle; FileOp.wFunc := FO_DELETE; FileOp.pFrom := PWideChar(wsFileName); // Move without question FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT or FOF_NOCONFIRMATION; Result := (SHFileOperationW(@FileOp) = 0) and (not FileOp.fAnyOperationsAborted); end; {$ELSEIF DEFINED(DARWIN)} type TFSMoveObjectToTrashSync = function( const (*var*) source: FSRef; var target: FSRef; options: OptionBits ): OSStatus; stdcall; var FSMoveObjectToTrash: TFSMoveObjectToTrashSync; CarbonLib: THandle; theSourceFSRef, theTargetFSRef: FSRef; newFileName: String; fullFileName: String; trashDir: String; dirList: array[0..100] of PChar; begin Result := False; CarbonLib := LoadLibrary('Carbon.framework/Versions/A/Carbon'); if CarbonLib <> NilHandle then begin try FSMoveObjectToTrash := TFSMoveObjectToTrashSync(GetProcedureAddress(CarbonLib, 'FSMoveObjectToTrashSync')); if Assigned(FSMoveObjectToTrash) then begin if (FSPathMakeRefWithOptions(PAnsiChar(FileName), kFSPathMakeRefDoNotFollowLeafSymlink, theSourceFSRef, nil) = noErr) then begin Result:= (FSMoveObjectToTrash(theSourceFSRef, theTargetFSRef, kFSFileOperationDefaultOptions) = noErr); Exit; end; end; { if } finally UnloadLibrary(CarbonLib); end; { try - finally } end; { if } { MacOSX 10.4 and below compatibility mode: - If file is in base drive, it gets moved to $HOME/.Trash - If file is in some other local drive, it gets moved to /Volumes/.Trashes/uid/ - If file is in network, it can't be moved to trash Trash folders are automatically created by OS at login and deleted if empty at logout. If a file with same name exists in trash folder, time is appended to filename } fullFileName := ExpandFileName(FileName); if AnsiStartsStr('/Volumes/', fullFileName) then begin // file is not located at base drive FillChar(dirList, SizeOf(dirList), 0); SysUtils.GetDirs(fullFileName, dirList); trashDir := Format('/Volumes/%s/.Trashes/%d/', [StrPas(dirList[1]), FpGetuid]); end { if } else trashDir := GetHomeDir + '/.Trash/'; // check if trash folder exists (e.g. network drives don't have one) if not mbDirectoryExists(trashDir) then begin Result := false; Exit; end; { if } newFileName := trashDir + ExtractFileName(FileName); if mbFileSystemEntryExists(newFileName) then newFileName := Format('%s %s', [newFileName, FormatDateTime('hh-nn-ss', Time)]); Result := mbRenameFile(FileName, newFileName); end; {$ELSEIF DEFINED(UNIX)} // This implementation is based on FreeDesktop.org "Trash Specification" // (http://www.freedesktop.org/wiki/Specifications/trash-spec) const trashFolder = '.Trash'; trashFiles = 'files'; trashInfo = 'info'; trashExt = '.trashinfo'; var sUserID: AnsiString; sTopDir, sFileName, sTemp, sNow, sHomeDir, sTrashInfoFile, sTrashDataFile: String; dtNow: TDateTime; st1, st2: Stat; function CreateTrashInfoFile: Boolean; var hFile: THandle; begin Result:= False; hFile:= mbFileCreate(sTrashInfoFile); if hFile <> feInvalidHandle then begin sTemp:= '[Trash Info]' + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); sTemp:= 'Path=' + URIEncode(FileName) + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); sTemp:= 'DeletionDate=' + FormatDateTime('YYYY-MM-DD', dtNow); sTemp:= sTemp + 'T' + FormatDateTime('hh:nn:ss', dtNow) + LineEnding; FileWrite(hFile, PChar(sTemp)[0], Length(sTemp)); FileClose(hFile); Result:= True; end; end; function TrashFile: Boolean; begin Result:= False; if CreateTrashInfoFile then begin Result:= (fpRename(UTF8ToSys(FileName), sTrashDataFile) >= 0); if not Result then mbDeleteFile(sTrashInfoFile); end; end; begin Result:= False; dtNow:= Now; sNow:= IntToStr(Trunc(dtNow * 86400000)); // The time in milliseconds sFileName:= ExtractOnlyFileName(FileName) + '_' + sNow + ExtractFileExt(FileName); // Get user home directory sHomeDir:= GetHomeDir; // Check if file in home directory if (fpLStat(UTF8ToSys(sHomeDir), st1) >= 0) and (fpLStat(UTF8ToSys(FileName), st2) >= 0) and (st1.st_dev = st2.st_dev) then begin // Get trash directory in $XDG_DATA_HOME sTemp:= IncludeTrailingPathDelimiter(GetUserDataDir) + 'Trash'; // Create destination directories if needed if (mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo)) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; sUserID:= IntToStr(fpGetUID); // Get “top directory” for file sTopDir:= FindMountPointPath(FileName); // Try to use "$topdir/.Trash/$uid" directory sTemp:= sTopDir + trashFolder; if (fpLStat(UTF8ToSys(sTemp), st1) >= 0) and fpS_ISDIR(st1.st_mode) and not fpS_ISLNK(st1.st_mode) then begin sTemp:= sTemp + PathDelim + sUserID; // Create destination directories if needed if mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; // Try to use "$topdir/.Trash-$uid" directory sTemp:= sTopDir + trashFolder + '-' + sUserID; if ((fpLStat(UTF8ToSys(sTemp), st1) >= 0) and fpS_ISDIR(st1.st_mode) and not fpS_ISLNK(st1.st_mode)) or mbCreateDir(sTemp) then begin // Create destination directories if needed if mbForceDirectory(sTemp + PathDelim + trashFiles) and mbForceDirectory(sTemp + PathDelim + trashInfo) then begin sTrashInfoFile:= sTemp + PathDelim + trashInfo + PathDelim + sFileName + trashExt; sTrashDataFile:= sTemp + PathDelim + trashFiles + PathDelim + sFileName; Result:= TrashFile; Exit; end; end; end; {$ELSE} begin Result:= False; end; {$ENDIF} function mbCheckTrash(sPath: String): Boolean; {$IF DEFINED(MSWINDOWS)} const wsRoot: WideString = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\BitBucket\'; var Key: HKEY; Value: DWORD; ValueSize: LongInt; VolumeName: WideString; begin Result:= False; if not mbDirectoryExists(sPath) then Exit; ValueSize:= SizeOf(DWORD); // Windows Vista/Seven if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6) then begin VolumeName:= GetMountPointVolumeName(UTF8Decode(ExtractFileDrive(sPath))); VolumeName:= 'Volume' + PathDelim + ExtractVolumeGUID(VolumeName); if RegOpenKeyExW(HKEY_CURRENT_USER, PWideChar(wsRoot + VolumeName), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end; end // Windows 2000/XP else if RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWideChar(wsRoot), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'UseGlobalSettings', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 1; // use global settings by default if (Value = 1) then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end else begin RegCloseKey(Key); if RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWideChar(wsRoot + sPath[1]), 0, KEY_READ, Key) = ERROR_SUCCESS then begin if RegQueryValueExW(Key, 'NukeOnDelete', nil, nil, @Value, @ValueSize) <> ERROR_SUCCESS then Value:= 0; // delete to trash by default Result:= (Value = 0); RegCloseKey(Key); end; end; end; end; {$ELSE} begin Result := True; end; {$ENDIF} initialization FileTrashUtf8:= @mbDeleteToTrash; end. ��������������������������doublecmd-0.7.1/src/platform/ukeyboard.pas����������������������������������������������������������0000644�0001750�0000144�00000100241�12647507751�017636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This unit handles anything regarding keyboard and keys. It is heavily dependent on operating system and widget set. For MSWINDOWS and Unix GTK1/2, QT. } unit uKeyboard; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLType; type TMenuKeyCap = (mkcClear, mkcBkSp, mkcTab, mkcEsc, mkcEnter, mkcSpace, mkcPgUp, mkcPgDn, mkcEnd, mkcHome, mkcLeft, mkcUp, mkcRight, mkcDown, mkcIns, mkcDel, mkcShift, mkcCtrl, mkcAlt, mkcWin, mkcNumDivide, mkcNumMultiply, mkcNumAdd, mkcNumSubstract); const SmkcClear = 'Clear'; SmkcBkSp = 'BkSp'; SmkcTab = 'Tab'; SmkcEsc = 'Esc'; SmkcEnter = 'Enter'; SmkcSpace = 'Space'; SmkcPgUp = 'PgUp'; SmkcPgDn = 'PgDn'; SmkcEnd = 'End'; SmkcHome = 'Home'; SmkcLeft = 'Left'; SmkcUp = 'Up'; SmkcRight = 'Right'; SmkcDown = 'Down'; SmkcIns = 'Ins'; SmkcDel = 'Del'; SmkcShift = 'Shift+'; SmkcCtrl = 'Ctrl+'; SmkcAlt = 'Alt+'; SmkcWin = 'WinKey+'; SmkcNumDivide = 'Num/'; SmkcNumMultiply = 'Num*'; SmkcNumAdd = 'Num+'; SmkcNumSubstract = 'Num-'; MenuKeyCaps: array[TMenuKeyCap] of string = ( SmkcClear, SmkcBkSp, SmkcTab, SmkcEsc, SmkcEnter, SmkcSpace, SmkcPgUp, SmkcPgDn, SmkcEnd, SmkcHome, SmkcLeft, SmkcUp, SmkcRight, SmkcDown, SmkcIns, SmkcDel, SmkcShift, SmkcCtrl, SmkcAlt, SmkcWin, SmkcNumDivide, SmkcNumMultiply, SmkcNumAdd, SmkcNumSubstract); // Modifiers that can be used for shortcuts (non-toggable). KeyModifiersShortcut = [ssShift, ssAlt, ssCtrl, ssMeta, ssSuper, ssHyper, ssAltGr]; // Modifiers that change meaning of entered text (case, non-ASCII characters). KeyModifiersText = [ssShift, ssAltGr, ssCaps]; // Modifiers that can be used for shortcuts without taking into account text modifiers. KeyModifiersShortcutNoText = KeyModifiersShortcut - KeyModifiersText; {en Retrieves current modifiers state of the keyboard. } function GetKeyShiftStateEx: TShiftState; function KeyToShortCutEx(Key: Word; Shift: TShiftState): TShortCut; function ModifiersTextToShortcutEx(const ModifiersText: String; out ModLength: Integer): TShortCut; {en Changes order of modifiers in text to always be the same. } function NormalizeModifiers(ShortCutText: String): String; function ShiftToShortcutEx(ShiftState: TShiftState): TShortCut; function ShiftToTextEx(ShiftState: TShiftState): String; function ShortcutToShiftEx(Shortcut: TShortCut): TShiftState; function ShortCutToTextEx(ShortCut: TShortCut): String; function TextToShortCutEx(const ShortCutText: String): TShortCut; {en Tries to translate virtual key (VK_..) into a valid UTF8 character, taking into account modifiers state. @param(Key Virtual key code.) @param(ShiftState Keyboard modifiers that should be taken into account when determining the character.) } function VirtualKeyToUTF8Char(Key: Byte; ShiftState: TShiftState = []): TUTF8Char; {en Returns text description of a virtual key trying to take into account given modifiers state. For keys that have characters assigned it usually returns that character, for others some textual description. @param(Key Virtual key code.) @param(ShiftState Keyboard modifiers that should be taken into account when determining the description.) @return(UTF8 character assigned to Key or an empty string.) } function VirtualKeyToText(Key: Byte; ShiftState: TShiftState = []): string; {$IFDEF MSWINDOWS} {en If a virtual key with any modifiers produces valid ANSI or UNICODE character, that character is returned in UTF8 encoding. @param(Key Virtual key code.) @param(ExcludeShiftState Which modifiers should not be taken into account when determining possible character.) @return(UTF8 character assigned to Key or an empty string.) } function GetInternationalCharacter(Key: Word; ExcludeShiftState: TShiftState = []): TUTF8Char; {$ENDIF} {en Initializes keyboard module. Should be called after Application.Initialize. } procedure InitializeKeyboard; procedure CleanupKeyboard; {en Should be called after main form has been created. } procedure HookKeyboardLayoutChanged; {en Should be called whenever a keyboard layout modification is detected. } procedure OnKeyboardLayoutChanged; {$IFDEF MSWINDOWS} var // True, if the current keyboard layout's right Alt key is mapped as AltGr. HasKeyboardAltGrKey : Boolean = False; {$ENDIF} implementation {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {$DEFINE X11} {$ENDIF} uses LCLProc, LCLIntf, LazUTF8 {$IF DEFINED(MSWINDOWS)} , Windows {$ENDIF} {$IF DEFINED(LCLGTK)} , Gdk, GLib , GtkProc , XLib, X {$ENDIF} {$IF DEFINED(LCLGTK2)} , Gdk2, GLib2, Gtk2Extra , Gtk2Proc {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} , qt4, qtwidgets , XLib, X , xutil, KeySym , Forms // for Application.MainForm {$ENDIF} ; const scWin = $1000; type TModifiersMap = record Shift: TShiftStateEnum; Shortcut: TShortCut; Text: TMenuKeyCap; end; const ModifiersMap: array [0..3] of TModifiersMap = ((Shift: ssCtrl; Shortcut: scCtrl; Text: mkcCtrl), (Shift: ssShift; Shortcut: scShift; Text: mkcShift), (Shift: ssAlt; Shortcut: scAlt; Text: mkcAlt), (Shift: ssSuper; Shortcut: scWin; Text: mkcWin)); {$IF DEFINED(X11)} var {$IF DEFINED(LCLGTK)} XDisplay: PDisplay = nil; {$ELSEIF DEFINED(LCLGTK2)} XDisplay: PGdkDisplay = nil; {$ELSEIF DEFINED(LCLQT)} XDisplay: PDisplay = nil; {$ENDIF} {$ENDIF} {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} var // This is set to a virtual key number that AltGr is mapped on. VK_ALTGR: Byte = VK_UNDEFINED; {$IF DEFINED(LCLGTK2)} KeysChangesSignalHandlerId : gulong = 0; {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} type TKeyboardLayoutChangedHook = class private EventHook: QObject_hookH; function EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; // called by QT public constructor Create(QObject: QObjectH); destructor Destroy; override; end; var // Used to catch "keyboard layout modified" event. KeyboardLayoutChangedHook: TKeyboardLayoutChangedHook = nil; ShiftMask : Cardinal = 0; AltGrMask : Cardinal = 0; {$ENDIF} var VKToCharArray: array[Low(Byte)..High(Byte)] of String; {$IF DEFINED(LCLGTK)} function XKeycodeToKeysym(para1:PDisplay; para2:TKeyCode; index:integer):TKeySym;cdecl;external libX11; {$ENDIF} procedure CacheVKToChar; var Key: Byte; begin for Key := Low(VKToCharArray) to High(VKToCharArray) do case Key of VK_BACK: VKToCharArray[Key] := MenuKeyCaps[mkcBkSp]; VK_TAB: VKToCharArray[Key] := MenuKeyCaps[mkcTab]; VK_CLEAR: VKToCharArray[Key] := MenuKeyCaps[mkcClear]; VK_RETURN: VKToCharArray[Key] := MenuKeyCaps[mkcEnter]; VK_ESCAPE: VKToCharArray[Key] := MenuKeyCaps[mkcEsc]; VK_SPACE..VK_DOWN: VKToCharArray[Key] := MenuKeyCaps[TMenuKeyCap(Ord(mkcSpace) + Key - VK_SPACE)]; VK_INSERT: VKToCharArray[Key] := MenuKeyCaps[mkcIns]; VK_DELETE: VKToCharArray[Key] := MenuKeyCaps[mkcDel]; VK_0..VK_9: VKToCharArray[Key] := Chr(Key - VK_0 + Ord('0')); VK_A..VK_Z: VKToCharArray[Key] := Chr(Key - VK_A + Ord('A')); VK_NUMPAD0..VK_NUMPAD9: VKToCharArray[Key] := Chr(Key - VK_NUMPAD0 + Ord('0')); VK_DIVIDE: VKToCharArray[Key] := MenuKeyCaps[mkcNumDivide]; VK_MULTIPLY: VKToCharArray[Key] := MenuKeyCaps[mkcNumMultiply]; VK_SUBTRACT: VKToCharArray[Key] := MenuKeyCaps[mkcNumSubstract]; VK_ADD: VKToCharArray[Key] := MenuKeyCaps[mkcNumAdd]; VK_F1..VK_F24: VKToCharArray[Key] := 'F' + IntToStr(Key - VK_F1 + 1); else VKToCharArray[Key] := VirtualKeyToUTF8Char(Key, []); end; end; {$IF DEFINED(X11) and DEFINED(LCLQT)} {en Retrieves the character and respective modifiers state for the given keysym and given level. } procedure XKeysymToUTF8Char(XKeysym: TKeySym; ShiftLevel: Cardinal; out ShiftState: TShiftState; out KeyChar: TUTF8Char); var XKeycode: TKeyCode; XKeyEvent: TXKeyEvent; KeySymChars: array[0..16] of Char; KeySymCharLen: Integer; Level: Integer; begin KeyChar := ''; ShiftState := []; XKeycode := XKeysymToKeycode(XDisplay, XKeysym); if XKeycode <> 0 then begin // 4 levels - two groups of two characters each (unshifted/shifted). // AltGr is usually the group switch. for Level := 0 to 3 do begin if XKeysym = XKeycodeToKeysym(XDisplay, XKeyCode, Level) then begin // Init dummy XEvent to retrieve the char corresponding to the keycode. FillChar(XKeyEvent, SizeOf(XKeyEvent), 0); XKeyEvent._Type := KeyPress; XKeyEvent.Display := XDisplay; XKeyEvent.Same_Screen := TBool(1); // True XKeyEvent.KeyCode := XKeyCode; case ShiftLevel of 0: XKeyEvent.State := 0; // 1st group 1: XKeyEvent.State := ShiftMask; // 1st group 2: XKeyEvent.State := AltGrMask; // 2nd group 3: XKeyEvent.State := AltGrMask or ShiftMask; // 2nd group else XKeyEvent.State := 0; end; // Retrieve the character for this KeySym. KeySymCharLen := XLookupString(@XKeyEvent, KeySymChars, SizeOf(KeySymChars), nil, nil); // Delete ending zero. if (KeySymCharLen > 0) and (KeySymChars[KeySymCharLen - 1] = #0) then Dec(KeySymCharLen); if KeySymCharLen > 0 then begin SetString(KeyChar, KeySymChars, KeySymCharLen); // Get modifier keys of the found keysym. case Level of 0: ShiftState := []; 1: ShiftState := [ssShift]; 2: ShiftState := [ssAltGr]; 3: ShiftState := [ssShift, ssAltGr]; end; end; Exit; end end; end; end; {$ENDIF} function GetKeyShiftStateEx: TShiftState; function IsKeyDown(Key: Integer): Boolean; begin Result := (GetKeyState(Key) and $8000)<>0; end; begin Result:=[]; {$IFDEF MSWINDOWS} if HasKeyboardAltGrKey then begin // Windows maps AltGr as Ctrl+Alt combination, so if AltGr is pressed, // it cannot be detected if Ctrl is pressed too. Therefore if AltGr // is pressed we don't include Ctrl in the result. Unless Left Alt is also // pressed - then we do include it under the assumption that the user // pressed Ctrl+Left Alt. The limitation is that a combination of // LeftAlt + AltGr is reported as [ssCtrl, ssAlt, ssAltGr]. if IsKeyDown(VK_LCONTROL) and ((not IsKeyDown(VK_RMENU)) or IsKeyDown(VK_LMENU)) then Include(Result,ssCtrl); if IsKeyDown(VK_RMENU) then Include(Result,ssAltGr); end else {$ENDIF} begin if IsKeyDown(VK_RMENU) or IsKeyDown(VK_MENU) then Include(Result,ssAlt); if IsKeyDown(VK_LCONTROL) or IsKeyDown(VK_CONTROL) then Include(Result,ssCtrl); end; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} if (VK_ALTGR <> VK_UNDEFINED) and IsKeyDown(VK_ALTGR) then Include(Result,ssAltGr); {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} // QtGroupSwitchModifier is only recognized on X11. if (QApplication_keyboardModifiers and QtGroupSwitchModifier) > 0 then Include(Result,ssAltGr); {$ENDIF} if IsKeyDown(VK_RCONTROL) then Include(Result,ssCtrl); if IsKeyDown(VK_LMENU) then Include(Result,ssAlt); if IsKeyDown(VK_SHIFT) then Include(Result,ssShift); if IsKeyDown(VK_LWIN) or IsKeyDown(VK_RWIN) then Include(Result,ssSuper); if (GetKeyState(VK_CAPITAL) and $1)<>0 then // Caps-lock toggled Include(Result,ssCaps); end; function KeyToShortCutEx(Key: Word; Shift: TShiftState): TShortCut; begin Result := (Key and $FF) or ShiftToShortcutEx(Shift); end; function ModifiersTextToShortcutEx(const ModifiersText: String; out ModLength: Integer): TShortCut; var StartPos: Integer; i: Integer = 0; Found: Boolean = True; function CompareFront(const Front: String): Boolean; begin if (Front <> '') and (StartPos + length(Front) - 1 <= length(ModifiersText)) and (AnsiStrLIComp(@ModifiersText[StartPos], PChar(Front), Length(Front)) = 0) then begin Result := True; Inc(StartPos, length(Front)); end else Result := False; end; begin Result := 0; StartPos := 1; while Found do begin Found := False; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if CompareFront(MenuKeyCaps[ModifiersMap[i].Text]) then begin Result := Result or ModifiersMap[i].Shortcut; Found := True; Break; end; end; end; ModLength := StartPos - 1; end; function NormalizeModifiers(ShortCutText: String): String; var ModLength: Integer; Shortcut: TShortCut; begin Shortcut := ModifiersTextToShortcutEx(ShortCutText, ModLength); Result := ShiftToTextEx(ShortcutToShiftEx(Shortcut)) + Copy(ShortCutText, ModLength + 1, MaxInt); end; function ShiftToShortcutEx(ShiftState: TShiftState): TShortCut; var i: Integer; begin Result := 0; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if ModifiersMap[i].Shift in ShiftState then Inc(Result, ModifiersMap[i].Shortcut); end; end; function ShiftToTextEx(ShiftState: TShiftState): String; var i: Integer; begin Result := EmptyStr; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if ModifiersMap[i].Shift in ShiftState then Result := Result + MenuKeyCaps[ModifiersMap[i].Text]; end; end; function ShortcutToShiftEx(Shortcut: TShortCut): TShiftState; var i: Integer; begin Result := []; for i := Low(ModifiersMap) to High(ModifiersMap) do begin if Shortcut and ModifiersMap[i].Shortcut <> 0 then Include(Result, ModifiersMap[i].Shift); end; end; function ShortCutToTextEx(ShortCut: TShortCut): String; begin Result := VirtualKeyToText(Byte(ShortCut and $FF), ShortcutToShiftEx(ShortCut)); end; function TextToShortCutEx(const ShortCutText: String): TShortCut; var Key: TShortCut; Shift: TShortCut; Name: String; StartPos: Integer; begin Result := 0; Shift := ModifiersTextToShortcutEx(ShortCutText, StartPos); Inc(StartPos); // Get text for the key if anything left in the string. if StartPos <= Length(ShortCutText) then begin { Copy range from table in ShortCutToText } for Key := $08 to $FF do begin Name := VirtualKeyToText(Key); if (Name <> '') and (length(Name) = length(ShortCutText) - StartPos + 1) and (AnsiStrLIComp(@ShortCutText[StartPos], PChar(Name), length(Name)) = 0) then begin Exit(Key or Shift); end; end; end; end; function VirtualKeyToUTF8Char(Key: Byte; ShiftState: TShiftState): TUTF8Char; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLQT))} function ShiftStateToXModifierLevel(ShiftState: TShiftState): Cardinal; begin Result := 0; if ssShift in ShiftState then Result := Result or 1; if ssAltGr in ShiftState then Result := Result or 2; end; {$ENDIF} var {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} KeyInfo: TVKeyInfo; {$ENDIF} ShiftedChar: Boolean; {$IF DEFINED(X11) and DEFINED(LCLQT)} KeyChar:TUTF8Char; KeySym: TKeySym; TempShiftState: TShiftState; {$ENDIF} begin Result := ''; // Upper case if either caps-lock is toggled or shift pressed. ShiftedChar := (ssCaps in ShiftState) xor (ssShift in ShiftState); {$IF DEFINED(MSWINDOWS)} Result := GetInternationalCharacter(Key, GetKeyShiftStateEx - ShiftState); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} KeyInfo := GetVKeyInfo(Key); // KeyInfo.KeyChar contains characters according to modifiers: // [0] - unshifted [2] - unshifted + AltGr // [1] - shifted [3] - shifted + AltGr // Caps-lock is handled below with ShiftedChar variable. Result := KeyInfo.KeyChar[ShiftStateToXModifierLevel(ShiftState)]; {$ELSEIF DEFINED(X11) and DEFINED(LCLQT)} // For QT we'll use Xlib to get text for a key. KeySym := 0; case Key of VK_0..VK_9: Result := Char(Ord('0') + Key - VK_0); VK_A..VK_Z: Result := Char(Ord('A') + Key - VK_A); VK_NUMPAD0.. VK_NUMPAD9: Result := Char(Ord('0') + Key - VK_NUMPAD0); VK_MULTIPLY: KeySym := XK_KP_Multiply; VK_ADD: KeySym := XK_KP_Add; VK_SUBTRACT: KeySym := XK_KP_Subtract; VK_DIVIDE: KeySym := XK_KP_Divide; // These VKs might only work for US-layout keyboards. VK_OEM_PLUS: KeySym := XK_plus; VK_OEM_MINUS: KeySym := XK_minus; VK_OEM_COMMA: KeySym := XK_comma; VK_OEM_PERIOD: KeySym := XK_period; VK_SEPARATOR: KeySym := XK_comma; VK_DECIMAL: KeySym := XK_period; VK_OEM_1: KeySym := XK_semicolon; VK_OEM_3: KeySym := XK_quoteleft; VK_OEM_4: KeySym := XK_bracketleft; VK_OEM_5: KeySym := XK_backslash; VK_OEM_6: KeySym := XK_bracketright; VK_OEM_7: KeySym := XK_apostrophe; // Some additional keys for QT not mapped in TQtWidget.QtKeyToLCLKey. // Based on QT sources: src/gui/kernel/qkeymapper_x11.cpp. QtKey_Bar: KeySym := XK_bar; QtKey_Underscore: KeySym := XK_underscore; QtKey_Question: KeySym := XK_question; QtKey_AsciiCircum: KeySym := XK_asciicircum; // $C1 - $DA not used VK space // Some of these keys (not translated in QtKeyToLCLKey) are on international keyboards. QtKey_Aacute: KeySym := XK_aacute; QtKey_Acircumflex: KeySym := XK_acircumflex; QtKey_Atilde: KeySym := XK_atilde; QtKey_Adiaeresis: KeySym := XK_adiaeresis; QtKey_Aring: KeySym := XK_aring; QtKey_AE: KeySym := XK_ae; QtKey_Ccedilla: KeySym := XK_ccedilla; QtKey_Egrave: KeySym := XK_egrave; QtKey_Eacute: KeySym := XK_eacute; QtKey_Ecircumflex: KeySym := XK_ecircumflex; QtKey_Ediaeresis: KeySym := XK_ediaeresis; QtKey_Igrave: KeySym := XK_igrave; QtKey_Iacute: KeySym := XK_iacute; QtKey_Icircumflex: KeySym := XK_icircumflex; QtKey_Idiaeresis: KeySym := XK_idiaeresis; QtKey_ETH: KeySym := XK_eth; QtKey_Ntilde: KeySym := XK_ntilde; QtKey_Ograve: KeySym := XK_ograve; QtKey_Oacute: KeySym := XK_oacute; QtKey_Ocircumflex: KeySym := XK_ocircumflex; QtKey_Otilde: KeySym := XK_otilde; QtKey_Odiaeresis: KeySym := XK_odiaeresis; QtKey_multiply: KeySym := XK_multiply; QtKey_Ooblique: KeySym := XK_ooblique; QtKey_Ugrave: KeySym := XK_ugrave; QtKey_Uacute: KeySym := XK_uacute; end; if KeySym <> 0 then begin // Get character for a key with the given keysym // and with given modifiers applied. // Don't care about modifiers state, because we already have it. XKeysymToUTF8Char(KeySym, ShiftStateToXModifierLevel(ShiftState), TempShiftState, KeyChar); Result := KeyChar; end; {$ELSE} {$ENDIF} // Make upper case if either caps-lock is toggled or shift pressed. if Result <> '' then begin if ShiftedChar then Result := UTF8UpperCase(Result) else Result := UTF8LowerCase(Result); end; end; function VirtualKeyToText(Key: Byte; ShiftState: TShiftState): string; var Name: string; {$IF DEFINED(X11) and DEFINED(LCLQT)} KeyChar: TUTF8Char; KeySym: TKeySym; TempShiftState: TShiftState; {$ENDIF} begin {$IF DEFINED(X11) and DEFINED(LCLQT)} // Overwrite behaviour for some keys in QT. KeySym := 0; case Key of QtKey_Bar: KeySym := XK_bar; // VK_F13 QtKey_Underscore: KeySym := XK_underscore; // VK_SLEEP // '+' (XK_plus) and 'numpad +' (XK_KP_Add) are both reported as VK_ADD (QtKey_Plus) VK_ADD: KeySym := XK_KP_Add; // '*' (XK_multiply) and 'numpad *' (XK_KP_Multiply) are both reported as VK_MULTIPLY (QtKey_Asterisk) VK_MULTIPLY: KeySym := XK_KP_Multiply; end; if KeySym <> 0 then begin // Get base character for a key with the given keysym. // Don't care about modifiers state, because we already have it. XKeysymToUTF8Char(KeySym, 0, TempShiftState, KeyChar); Name := KeyChar; end else {$ENDIF} Name := VKToCharArray[Key]; if Name <> '' then Result := ShiftToTextEx(ShiftState) + Name else Result := ''; end; {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} procedure UpdateGtkAltGrVirtualKeyCode; var VKNr: Byte; KeyInfo: TVKeyInfo; {$IFDEF LCLGTK2} GdkKey: TGdkKeymapKey = (KeyCode: 0; Group: 0; Level: 0); {$ENDIF} KeyVal: guint; begin VK_ALTGR := VK_UNDEFINED; // Search all virtual keys for a scancode of AltGraph. for VKNr := Low(Byte) to High(Byte) do begin KeyInfo := GetVKeyInfo(VKNr); if (KeyInfo.KeyCode[True] = 0) and // not extended (KeyInfo.KeyCode[False] <> 0) then begin {$IFDEF LCLGTK} KeyVal := XKeycodetoKeysym(XDisplay, KeyInfo.KeyCode[False], 0); if KeyVal = GDK_ISO_Level3_Shift then // AltGraph {$ELSE} GdkKey.keycode := KeyInfo.keycode[False]; KeyVal := gdk_keymap_lookup_key( gdk_keymap_get_for_display(XDisplay), @GdkKey); if KeyVal = GDK_KEY_ISO_Level3_Shift then // AltGraph {$ENDIF} begin VK_ALTGR := VKNr; Exit; end; end; end; end; {$ENDIF} {$IFDEF MSWINDOWS} function GetInternationalCharacter(Key: Word; ExcludeShiftState: TShiftState): TUTF8Char; var KeyboardState: array [0..255] of byte; wideChars: widestring; asciiChar: AnsiChar; IntResult: LongInt; function IsKeyDown(Key: Byte): Boolean; begin Result := (KeyboardState[Key] and $80)<>0; end; begin Result := ''; SetLength(wideChars, 16); // should be enough Windows.GetKeyboardState(KeyboardState); // Exclude not wanted modifiers. if ssCtrl in ExcludeShiftState then begin KeyboardState[VK_RCONTROL] := 0; if (not HasKeyboardAltGrKey) or (ssAltGr in ExcludeShiftState) or (not IsKeyDown(VK_RMENU)) // if AltGr not pressed then KeyboardState[VK_LCONTROL] := 0; end; if ssAlt in ExcludeShiftState then begin KeyboardState[VK_LMENU] := 0; if (not HasKeyboardAltGrKey) then KeyboardState[VK_RMENU] := 0; end; if ssAltGr in ExcludeShiftState then begin KeyboardState[VK_RMENU] := 0; if not IsKeyDown(VK_LMENU) then // if Left Alt not pressed KeyboardState[VK_LCONTROL] := 0; end; if ssCaps in ExcludeShiftState then KeyboardState[VK_CAPITAL] := 0; if ssShift in ExcludeShiftState then begin KeyboardState[VK_LSHIFT] := 0; KeyboardState[VK_RSHIFT] := 0; KeyboardState[VK_SHIFT] := 0; end; if (not IsKeyDown(VK_LCONTROL)) and (not IsKeyDown(VK_RCONTROL)) then KeyboardState[VK_CONTROL] := 0; if (not IsKeyDown(VK_LMENU)) and (not IsKeyDown(VK_RMENU)) then KeyboardState[VK_MENU] := 0; if (Win32Platform = VER_PLATFORM_WIN32_NT) then begin IntResult := Windows.ToUnicode(Key, 0, @KeyboardState, PWChar(wideChars), Length(wideChars), 0); if IntResult = 1 then Result := UTF8Copy(UTF16ToUTF8(wideChars), 1, 1); end else begin IntResult := Windows.ToAscii(Key, 0, @KeyboardState, @asciiChar, 0); if IntResult = 1 then Result := AnsiToUtf8(string(asciiChar)); end; end; procedure UpdateKeyboardLayoutAltGrFlag; type PKBDTABLES = ^KBDTABLES; KBDTABLES = record // not packed pCharModifers: Pointer; pVkToWCharTable: Pointer; pDeadKey: Pointer; pKeyNames: Pointer; pKeyNamesExt: Pointer; pKeyNamesDead: Pointer; pUsVscToVk: Pointer; MaxVscToVk: Byte; pVSCToVk_E0: Pointer; pVSCToVk_E1: Pointer; LocalFlags: DWORD; // <-- we only need this LgMaxD: Byte; cbLgEntry: Byte; pLigature: Pointer; end; const KBDTABLE_VERSION = 1; // Flags KLLF_ALTGR = 1; //KLLF_SHIFTLOCK = 2; //KLLF_LRM_RLM = 4; function GetKeyboardLayoutFileName: WideString; var KeyHandle: HKEY; KeyboardLayoutName: array [0..KL_NAMELENGTH-1] of WChar; RegistryKey : WideString = 'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\'; RegistryValue: WideString = 'Layout File'; BytesNeeded: DWORD; begin Result := ''; // Get current keyboard layout ID. if GetKeyboardLayoutNameW(KeyboardLayoutName) then begin RegistryKey := RegistryKey + PWChar(KeyboardLayoutName); // Read corresponding layout dll name from registry. if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, PWChar(RegistryKey), 0, KEY_QUERY_VALUE, @KeyHandle) = ERROR_SUCCESS) and (KeyHandle <> 0) then begin if RegQueryValueExW(KeyHandle, PWChar(RegistryValue), nil, nil, nil, @BytesNeeded) = ERROR_SUCCESS then begin SetLength(Result, BytesNeeded div SizeOf(WChar)); if RegQueryValueExW(KeyHandle, PWChar(RegistryValue), nil, nil, PByte(PWChar(Result)), @BytesNeeded) = ERROR_SUCCESS then begin Result := Result + #0; // end with zero to be sure end; end; RegCloseKey(KeyHandle); end; end; end; function GetKeyboardLayoutAltGrFlag(LayoutDllFileName: WideString): Boolean; type TKbdLayerDescriptor = function: PKBDTABLES; stdcall; var Handle: HMODULE; KbdLayerDescriptor: TKbdLayerDescriptor; Tables: PKBDTABLES; begin Result := False; // Load the keyboard layout dll. Handle := LoadLibraryW(PWChar(LayoutDllFileName)); if Handle <> 0 then begin KbdLayerDescriptor := TKbdLayerDescriptor(GetProcAddress(Handle, 'KbdLayerDescriptor')); if Assigned(KbdLayerDescriptor) then begin // Get the layout tables. Tables := KbdLayerDescriptor(); if Assigned(Tables) and (HIWORD(Tables^.LocalFlags) = KBDTABLE_VERSION) then begin // Read AltGr flag. Result := Boolean(Tables^.LocalFlags and KLLF_ALTGR); end; end; FreeLibrary(Handle); end; end; var FileName: WideString; begin HasKeyboardAltGrKey := False; FileName := GetKeyboardLayoutFileName; if FileName <> '' then HasKeyboardAltGrKey := GetKeyboardLayoutAltGrFlag(FileName); end; {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} procedure UpdateModifiersMasks; var Map: PXModifierKeymap; KeyCode: PKeyCode; KeySym: TKeySym; ModifierNr, l, Level: Integer; begin ShiftMask := 0; AltGrMask := 0; if Assigned(XDisplay) then begin Map := XGetModifierMapping(XDisplay); if Assigned(Map) then begin KeyCode := Map^.modifiermap; for ModifierNr := 0 to 7 do // Xlib uses up to 8 modifiers. begin // Scan through possible keycodes for each modifier. // We're looking for the keycodes assigned to Shift and AltGr. for l := 1 to Map^.max_keypermod do begin if KeyCode^ <> 0 then // Omit zero keycodes. begin for Level := 0 to 3 do // Check group 1 and group 2 (each has 2 keysyms) begin // Translate each keycode to keysym and check // if this is the modifier we are looking for. KeySym := XKeycodeToKeysym(XDisplay, KeyCode^, Level); // If found, assign mask according the the modifier number // (Shift by default should be the first modifier). case KeySym of XK_Mode_switch: AltGrMask := 1 shl ModifierNr; XK_Shift_L, XK_Shift_R: ShiftMask := 1 shl ModifierNr; end; end; end; Inc(KeyCode); end; end; XFreeModifiermap(Map); end; end; end; {$ENDIF} procedure OnKeyboardLayoutChanged; begin {$IFDEF MSWINDOWS} UpdateKeyboardLayoutAltGrFlag; {$ENDIF} {$IF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} UpdateGtkAltGrVirtualKeyCode; {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} UpdateModifiersMasks; {$ENDIF} CacheVKToChar; end; {$IF DEFINED(X11) and DEFINED(LCLQT)} constructor TKeyboardLayoutChangedHook.Create(QObject: QObjectH); begin EventHook := QObject_hook_create(QObject); if Assigned(EventHook) then begin QObject_hook_hook_events(EventHook, @EventFilter); end; end; destructor TKeyboardLayoutChangedHook.Destroy; begin if Assigned(EventHook) then begin QObject_hook_destroy(EventHook); EventHook := nil; end; end; function TKeyboardLayoutChangedHook.EventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result := False; // Don't filter any events. // Somehow this event won't be sent to the window, // unless the user first presses a key inside it. if QEvent_type(Event) = QEventKeyboardLayoutChange then begin OnKeyboardLayoutChanged; end; end; {$ENDIF} {$IF DEFINED(UNIX)} {$IF DEFINED(LCLGTK)} function EventHandler(GdkXEvent: PGdkXEvent; GdkEvent: PGdkEvent; Data: gpointer): TGdkFilterReturn; cdecl; var XEvent: xlib.PXEvent; XMappingEvent: PXMappingEvent; begin Result := GDK_FILTER_CONTINUE; // Don't filter any events. XEvent := xlib.PXEvent(GdkXEvent); case XEvent^._type of MappingNotify{, 112}: begin XMappingEvent := PXMappingEvent(XEvent); case XMappingEvent^.request of MappingModifier, MappingKeyboard: begin XRefreshKeyboardMapping(XMappingEvent); OnKeyboardLayoutChanged; end; // Don't care about MappingPointer. end; end; end; end; {$ELSEIF DEFINED(LCLGTK2)} procedure KeysChangedSignalHandler(keymap: PGdkKeymap; Data: gpointer); cdecl; begin OnKeyboardLayoutChanged; end; {$ENDIF} {$ENDIF} procedure UnhookKeyboardLayoutChanged; begin {$IF DEFINED(X11) and DEFINED(LCLQT)} if Assigned(KeyboardLayoutChangedHook) then FreeAndNil(KeyboardLayoutChangedHook); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} {$IF DEFINED(LCLGTK)} gdk_window_remove_filter(nil, @EventHandler, nil); {$ELSEIF DEFINED(LCLGTK2)} if (KeysChangesSignalHandlerId <> 0) and g_signal_handler_is_connected(gdk_keymap_get_for_display(XDisplay), KeysChangesSignalHandlerId) then begin g_signal_handler_disconnect(gdk_keymap_get_for_display(XDisplay), KeysChangesSignalHandlerId); KeysChangesSignalHandlerId := 0; end; {$ENDIF} {$ENDIF} end; procedure HookKeyboardLayoutChanged; begin UnhookKeyboardLayoutChanged; // On Unix (X server) the event for changing keyboard layout // is sent twice (on QT, GTK1 and GTK2). {$IF DEFINED(X11) and DEFINED(LCLQT)} KeyboardLayoutChangedHook := KeyboardLayoutChangedHook.Create( TQtWidget(Application.MainForm.Handle).TheObject); {$ELSEIF DEFINED(UNIX) and (DEFINED(LCLGTK) or DEFINED(LCLGTK2))} // On GTK1 XLib's MappingNotify event is used to detect keyboard mapping changes. // On GTK2 however (at least on my system), an event of type 112 instead of 34 // (which is a correct value for MappingNotify) is received, yet max value for // an event is 35. So, on GTK2 a GdkKeymap signal is used instead. {$IF DEFINED(LCLGTK)} gdk_window_add_filter(nil, @EventHandler, nil); // Filter events for all windows. {$ELSEIF DEFINED(LCLGTK2)} // Connect to GdkKeymap object for the given display. KeysChangesSignalHandlerId := g_signal_connect(gdk_keymap_get_for_display(XDisplay), 'keys-changed', TGCallback(@KeysChangedSignalHandler), nil); {$ENDIF} {$ENDIF} end; procedure InitializeKeyboard; begin OnKeyboardLayoutChanged; end; procedure CleanupKeyboard; begin UnhookKeyboardLayoutChanged; end; {$IF DEFINED(X11)} initialization // Get connection to X server. {$IF DEFINED(LCLGTK)} XDisplay := gdk_display; {$ELSEIF DEFINED(LCLGTK2)} XDisplay := gdk_display_get_default; {$ELSEIF DEFINED(LCLQT)} XDisplay := XOpenDisplay(nil); {$ENDIF} {$ENDIF} {$IF DEFINED(X11) and DEFINED(LCLQT)} finalization XCloseDisplay(XDisplay); {$ENDIF} end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uOleDragDrop.pas�������������������������������������������������������0000644�0001750�0000144�00000151526�12647507751�020214� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ DRAGDROP.PAS -- simple realization of OLE drag and drop. Author: Jim Mischel Last modification date: 30/05/97 Add some changes for compatibility with FPC/Lazarus Copyright (C) 2009 Alexander Koblov (Alexx2000@mail.ru) Some inspiration for drag-and-drop using CF_FILEGROUPDESCRIPTORW and CFU_FILECONTENTS: -http://msdn.microsoft.com/en-us/library/windows/desktop/bb776904%28v=vs.85%29.aspx#filecontents -http://www.unitoops.com/uoole/examples/outlooktest.htm } unit uOleDragDrop; {$mode delphi}{$H+} interface uses DCBasicTypes, Windows, ActiveX, Classes, Controls, uDragDropEx; type { IEnumFormatEtc } TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FIndex: Integer; public constructor Create(Index: Integer = 0); function Next(celt: LongWord; out elt: FormatEtc; pceltFetched: pULong): HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Clone(out enum: IEnumFormatEtc): HResult; stdcall; end; { TDragDropInfo } TDragDropInfo = class(TObject) private FFileList: TStringList; FPreferredWinDropEffect: DWORD; function CreateHDrop(bUnicode: Boolean): HGlobal; function CreateFileNames(bUnicode: Boolean): HGlobal; function CreateURIs(bUnicode: Boolean): HGlobal; function CreateShellIdListArray: HGlobal; function MakeHGlobal(ptr: Pointer; Size: LongWord): HGlobal; public constructor Create(PreferredWinDropEffect: DWORD); destructor Destroy; override; procedure Add(const s: string); function MakeDataInFormat(const formatEtc: TFormatEtc): HGlobal; function CreatePreferredDropEffect(WinDropEffect: DWORD): HGlobal; property Files: TStringList Read FFileList; end; TDragDropTargetWindows = class; // forward declaration { TFileDropTarget знает, как принимать сброшенные файлы } TFileDropTarget = class(TInterfacedObject, IDropTarget) private FHandle: HWND; FReleased: Boolean; FDragDropTarget: TDragDropTargetWindows; public constructor Create(DragDropTarget: TDragDropTargetWindows); {en Unregisters drag&drop target and releases the object (it is destroyed). This is the function that should be called to cleanup the object instead of Free. Do not use the object after calling it. } procedure FinalRelease; function DragEnter(const {%H-}dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; function DragOver(grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function Drop(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; {en Retrieves the filenames from the HDROP format as a list of UTF-8 strings. @returns(List of filenames or nil in case of an error.) } class function GetDropFilenames(hDropData: HDROP): TStringList; {en Retrieves the filenames from the CFU_FILEGROUPDESCRIPTORW/CFU_FILEGROUPDESCRIPTOR format as a list of UTF-8 strings. @returns(List of filenames or nil in case of an error.) } function GetDropFileGroupFilenames(const dataObj: IDataObject; var Medium: TSTGMedium; Format: TFormatETC): TStringList; function SaveCfuContentToFile(const dataObj:IDataObject; Index:Integer; WantedFilename:String; WantedCreationTime, WantedModificationTime, WantedLastAccessTime:DCBasicTypes.TFileTime):boolean; {en Retrieves the text from the CF_UNICODETEXT/CF_TEXT format, will store this in a single file return filename as a list of a single UTF-8 string. @returns(List of filenames or nil in case of an error.) } function GetDropTextCreatedFilenames(var Medium: TSTGMedium; Format: TFormatETC): TStringList; end; { TFileDropSource - источник для перетаскивания файлов } TFileDropSource = class(TInterfacedObject, IDropSource) constructor Create; {$IF FPC_FULLVERSION < 020601} function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: longint): HResult; stdcall; {$ELSE} function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; stdcall; {$ENDIF} {$IF FPC_FULLVERSION < 020601} function GiveFeedback(dwEffect: longint): HResult; stdcall; {$ELSE} function GiveFeedback(dwEffect: DWORD): HResult; stdcall; {$ENDIF} end; { THDropDataObject - объект данных с информацией о перетаскиваемых файлах } THDropDataObject = class(TInterfacedObject, IDataObject) private FDropInfo: TDragDropInfo; public constructor Create(PreferredWinDropEffect: DWORD); destructor Destroy; override; procedure Add(const s: string); { из IDataObject } function GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; stdcall; function GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; stdcall; function QueryGetData(const formatetc: TFormatEtc): HResult; stdcall; function GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; stdcall; function SetData(const formatetc: TFormatEtc; const medium: TStgMedium; fRelease: BOOL): HResult; stdcall; function EnumFormatEtc(dwDirection: LongWord; out enumFormatEtc: IEnumFormatEtc): HResult; stdcall; function DAdvise(const formatetc: TFormatEtc; advf: LongWord; const advSink: IAdviseSink; out dwConnection: LongWord): HResult; stdcall; function DUnadvise(dwConnection: LongWord): HResult; stdcall; function EnumDAdvise(out enumAdvise: IEnumStatData): HResult; stdcall; end; TDragDropSourceWindows = class(TDragDropSource) public function RegisterEvents(DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent;// not handled in Windows DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; override; function DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint ): Boolean; override; end; TDragDropTargetWindows = class(TDragDropTarget) public constructor Create(Control: TWinControl); override; destructor Destroy; override; function RegisterEvents(DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; override; procedure UnregisterEvents; override; private FDragDropTarget: TFileDropTarget; end; function GetEffectByKeyState(grfKeyState: LongWord) : Integer; { These functions convert Windows-specific effect value to { TDropEffect values and vice-versa. } function WinEffectToDropEffect(dwEffect: LongWord): TDropEffect; function DropEffectToWinEffect(DropEffect: TDropEffect): LongWord; { Query DROPFILES structure for [BOOL fWide] parameter } function DragQueryWide( hGlobalDropInfo: HDROP ): boolean; implementation uses //Lazarus, Free-Pascal, etc. LazUTF8, SysUtils, ShellAPI, ShlObj, LCLIntf, ComObj, DCDateTimeUtils, Forms, DCConvertEncoding, //DC uOSUtils, fOptionsDragDrop, uShowMsg, UGlobs, DCStrUtils, DCOSUtils, uClipboard, uLng, uDebug; var // Supported formats by the source. DataFormats: TList = nil; // of TFormatEtc procedure InitDataFormats; procedure AddFormat(FormatId: Word); var FormatEtc: PFormatEtc; begin if FormatId > 0 then begin New(FormatEtc); if Assigned(FormatEtc) then begin DataFormats.Add(FormatEtc); with FormatEtc^ do begin CfFormat := FormatId; Ptd := nil; dwAspect := DVASPECT_CONTENT; lindex := -1; tymed := TYMED_HGLOBAL; end; end; end; end; begin DataFormats := TList.Create; AddFormat(CF_HDROP); AddFormat(CFU_PREFERRED_DROPEFFECT); AddFormat(CFU_FILENAME); AddFormat(CFU_FILENAMEW); // URIs disabled for now. This implementation does not work correct. // See bug http://doublecmd.sourceforge.net/mantisbt/view.php?id=692 { AddFormat(CFU_UNIFORM_RESOURCE_LOCATOR); AddFormat(CFU_UNIFORM_RESOURCE_LOCATORW); } AddFormat(CFU_SHELL_IDLIST_ARRAY); end; procedure DestroyDataFormats; var i : Integer; begin if Assigned(DataFormats) then begin for i := 0 to DataFormats.Count - 1 do if Assigned(DataFormats.Items[i]) then Dispose(PFormatEtc(DataFormats.Items[i])); FreeAndNil(DataFormats); end; end; { TEnumFormatEtc.Create } constructor TEnumFormatEtc.Create(Index: Integer); begin inherited Create; FIndex := Index; end; { TEnumFormatEtc.Next извлекает заданное количество структур TFormatEtc в передаваемый массив elt. Извлекается celt элементов, начиная с текущей позиции в списке. } function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; pceltFetched: pULong): HResult; var i: Integer; eltout: PFormatEtc; begin // Support returning only 1 format at a time. if celt > 1 then celt := 1; eltout := @elt; i := 0; while (i < celt) and (FIndex < DataFormats.Count) do begin (eltout + i)^ := PFormatEtc(DataFormats.Items[FIndex])^; Inc(FIndex); Inc(i); end; if (pceltFetched <> nil) then pceltFetched^ := i; if (I = celt) then Result := S_OK else Result := S_FALSE; end; { TEnumFormatEtc.Skip пропускает celt элементов списка, устанавливая текущую позицию на (CurrentPointer + celt) или на конец списка в случае переполнения. } function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if (celt <= DataFormats.Count - FIndex) then begin FIndex := FIndex + celt; Result := S_OK; end else begin FIndex := DataFormats.Count; Result := S_FALSE; end; end; { TEnumFormatEtc.Reset устанавливает указатель текущей позиции на начало списка } function TEnumFormatEtc.Reset: HResult; begin FIndex := 0; Result := S_OK; end; { TEnumFormatEtc.Clone копирует список структур } function TEnumFormatEtc.Clone(out enum: IEnumFormatEtc): HResult; begin enum := TEnumFormatEtc.Create(FIndex); Result := S_OK; end; { TDragDropInfo.Create } constructor TDragDropInfo.Create(PreferredWinDropEffect: DWORD); begin inherited Create; FFileList := TStringList.Create; FPreferredWinDropEffect := PreferredWinDropEffect; end; { TDragDropInfo.Destroy } destructor TDragDropInfo.Destroy; begin FFileList.Free; inherited Destroy; end; { TDragDropInfo.Add } procedure TDragDropInfo.Add(const s: string); begin Files.Add(s); end; { TDragDropInfo.MakeDataInFormat } function TDragDropInfo.MakeDataInFormat(const formatEtc: TFormatEtc): HGlobal; begin Result := 0; if (formatEtc.tymed = DWORD(-1)) or // Transport medium not specified. (Boolean(formatEtc.tymed and TYMED_HGLOBAL)) // Support only HGLOBAL medium. then begin if formatEtc.CfFormat = CF_HDROP then begin Result := CreateHDrop(Win32Platform = VER_PLATFORM_WIN32_NT) end else if formatEtc.CfFormat = CFU_PREFERRED_DROPEFFECT then begin Result := CreatePreferredDropEffect(FPreferredWinDropEffect); end else if (formatEtc.CfFormat = CFU_FILENAME) then begin Result := CreateFileNames(False); end else if (formatEtc.CfFormat = CFU_FILENAMEW) then begin Result := CreateFileNames(True); end // URIs disabled for now. This implementation does not work correct. // See bug http://doublecmd.sourceforge.net/mantisbt/view.php?id=692 { else if (formatEtc.CfFormat = CFU_UNIFORM_RESOURCE_LOCATOR) then begin Result := CreateURIs(False); end else if (formatEtc.CfFormat = CFU_UNIFORM_RESOURCE_LOCATORW) then begin Result := CreateURIs(True); end } else if (formatEtc.CfFormat = CFU_SHELL_IDLIST_ARRAY) then begin Result := CreateShellIdListArray; end; end; end; { TDragDropInfo.CreateFileNames } function TDragDropInfo.CreateFileNames(bUnicode: Boolean): HGlobal; var FileList: AnsiString; wsFileList: WideString; begin if Files.Count = 0 then Exit; if bUnicode then begin wsFileList := UTF8Decode(Self.Files[0]) + #0; Result := MakeHGlobal(PWideChar(wsFileList), Length(wsFileList) * SizeOf(WideChar)); end else begin FileList := CeUtf8ToAnsi(Self.Files[0]) + #0; Result := MakeHGlobal(PAnsiChar(FileList), Length(FileList) * SizeOf(AnsiChar)); end; end; { TDragDropInfo.CreateURIs } function TDragDropInfo.CreateURIs(bUnicode: Boolean): HGlobal; var UriList: AnsiString; wsUriList: WideString; I: Integer; begin wsUriList := ''; for I := 0 to Self.Files.Count - 1 do begin if I > 0 then wsUriList := wsUriList + LineEnding; wsUriList := wsUriList + fileScheme + '//' { don't put hostname } + UTF8Decode(URIEncode(StringReplace(Files[I], '\', '/', [rfReplaceAll] ))); end; wsUriList := wsUriList + #0; if bUnicode then Result := MakeHGlobal(PWideChar(wsUriList), Length(wsUriList) * SizeOf(WideChar)) else begin // Wide to Ansi UriList := CeUtf8ToAnsi(UTF16ToUTF8(wsUriList)); Result := MakeHGlobal(PAnsiChar(UriList), Length(UriList) * SizeOf(AnsiChar)); end; end; { TDragDropInfo.CreateShellIdListArray } function TDragDropInfo.CreateShellIdListArray: HGlobal; var pidl: LPITEMIDLIST; pidlSize: Integer; pIdA: LPIDA = nil; // ShellIdListArray structure ShellDesktop: IShellFolder = nil; CurPosition: UINT; dwTotalSizeToAllocate: DWORD; I: Integer; function GetPidlFromPath(ShellFolder: IShellFolder; Path: WideString): LPITEMIDLIST; var chEaten: ULONG = 0; dwAttributes: ULONG = 0; begin if ShellFolder.ParseDisplayName(0, nil, PWideChar(Path), chEaten, Result, dwAttributes) <> S_OK then begin Result := nil; end; end; function GetPidlSize(Pidl: LPITEMIDLIST): Integer; var pidlTmp: LPITEMIDLIST; begin Result := 0; pidlTmp := pidl; while pidlTmp^.mkid.cb <> 0 do begin Result := Result + pidlTmp^.mkid.cb; pidlTmp := LPITEMIDLIST(LPBYTE(pidlTmp) + PtrInt(pidlTmp^.mkid.cb)); // Next Item. end; Inc(Result, SizeOf(BYTE) * 2); // PIDL ends with two zeros. end; begin Result := 0; // Get Desktop shell interface. if SHGetDesktopFolder(ShellDesktop) = S_OK then begin // Get Desktop PIDL, which will be the root PIDL for the files' PIDLs. if SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, pidl) = S_OK then begin pidlSize := GetPidlSize(pidl); // How much memory to allocate for the whole structure. // We don't know how much memory each PIDL takes yet // (estimate using desktop pidl size). dwTotalSizeToAllocate := SizeOf(_IDA.cidl) + SizeOf(UINT) * (Files.Count + 1) // PIDLs' offsets + pidlSize * (Files.Count + 1); // PIDLs pIda := AllocMem(dwTotalSizeToAllocate); // Number of files PIDLs (without root). pIdA^.cidl := Files.Count; // Calculate offset for the first pidl (root). CurPosition := SizeOf(_IDA.cidl) + SizeOf(UINT) * (Files.Count + 1); // Write first PIDL. pIdA^.aoffset[0] := CurPosition; CopyMemory(LPBYTE(pIda) + PtrInt(CurPosition), pidl, pidlSize); Inc(CurPosition, pidlSize); CoTaskMemFree(pidl); for I := 0 to Self.Files.Count - 1 do begin // Get PIDL for each file (if Desktop is the root, then // absolute paths are acceptable). pidl := GetPidlFromPath(ShellDesktop, UTF8Decode(Files[i])); if pidl <> nil then begin pidlSize := GetPidlSize(pidl); // If not enough memory then reallocate. if dwTotalSizeToAllocate < CurPosition + pidlSize then begin // Estimate using current PIDL's size. Inc(dwTotalSizeToAllocate, (Files.Count - i) * pidlSize); pIdA := ReAllocMem(pIda, dwTotalSizeToAllocate); if not Assigned(pIda) then Break; end; // Write PIDL. {$R-} pIdA^.aoffset[i + 1] := CurPosition; {$R+} CopyMemory(LPBYTE(pIdA) + PtrInt(CurPosition), pidl, pidlSize); Inc(CurPosition, pidlSize); CoTaskMemFree(pidl); end; end; if Assigned(pIda) then begin // Current position it at the end of the structure. Result := MakeHGlobal(pIdA, CurPosition); Freemem(pIda); end; end; // SHGetSpecialFolderLocation ShellDesktop := nil; end; // SHGetDesktopFolder end; { TDragDropInfo.CreatePreferredDropEffect } function TDragDropInfo.CreatePreferredDropEffect(WinDropEffect: DWORD) : HGlobal; begin Result := MakeHGlobal(@WinDropEffect, SizeOf(WinDropEffect)); end; { TDragDropInfo.MakeHGlobal } function TDragDropInfo.MakeHGlobal(ptr: Pointer; Size: LongWord): HGlobal; var DataPointer : Pointer; DataHandle : HGLOBAL; begin Result := 0; if Assigned(ptr) then begin DataHandle := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, Size); if (DataHandle <> 0) then begin DataPointer := GlobalLock(DataHandle); if Assigned(DataPointer) then begin CopyMemory(DataPointer, ptr, Size); GlobalUnlock(DataHandle); Result := DataHandle; end else begin GlobalFree(DataHandle); end; end; end; end; { TDragDropInfo.CreateHDrop } function TDragDropInfo.CreateHDrop(bUnicode: Boolean): HGlobal; var RequiredSize: Integer; I: Integer; hGlobalDropInfo: HGlobal; DropFiles: PDropFiles; FileList: AnsiString = ''; wsFileList: WideString = ''; begin { Построим структуру TDropFiles в памяти, выделенной через GlobalAlloc. Область памяти сделаем глобальной и совместной, поскольку она, вероятно, будет передаваться другому процессу. Bring the filenames in a form, separated by #0 and ending with a double #0#0 } if bUnicode then begin for I := 0 to Self.Files.Count - 1 do wsFileList := wsFileList + UTF8Decode(Self.Files[I]) + #0; wsFileList := wsFileList + #0; { Определяем необходимый размер структуры } RequiredSize := SizeOf(TDropFiles) + Length(wsFileList) * SizeOf(WChar); end else begin for I := 0 to Self.Files.Count - 1 do FileList := FileList + CeUtf8ToAnsi(Self.Files[I]) + #0; FileList := FileList + #0; { Определяем необходимый размер структуры } RequiredSize := SizeOf(TDropFiles) + Length(FileList) * SizeOf(AnsiChar); end; hGlobalDropInfo := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, RequiredSize); if (hGlobalDropInfo <> 0) then begin { Заблокируем область памяти, чтобы к ней можно было обратиться } DropFiles := GlobalLock(hGlobalDropInfo); { Заполним поля структуры DropFiles pFiles -- смещение от начала структуры до первого байта массива с именами файлов. } DropFiles.pFiles := SizeOf(TDropFiles); if Windows.GetCursorPos(@DropFiles.pt) = False then begin DropFiles.pt.x := 0; DropFiles.pt.y := 0; end; DropFiles.fNC := True; // Pass cursor coordinates as screen coords DropFiles.fWide := bUnicode; { Копируем имена файлов в буфер. Буфер начинается со смещения DropFiles + DropFiles.pFiles, то есть после последнего поля структуры. The pointer should be aligned nicely, because the TDropFiles record is not packed. } DropFiles := Pointer(DropFiles) + DropFiles.pFiles; if bUnicode then CopyMemory(DropFiles, PWideChar(wsFileList), Length(wsFileList) * SizeOf(WChar)) else CopyMemory(DropFiles, PAnsiChar(FileList), Length(FileList) * SizeOf(AnsiChar)); { Снимаем блокировку } GlobalUnlock(hGlobalDropInfo); end; Result := hGlobalDropInfo; end; { TFileDropTarget.Create } constructor TFileDropTarget.Create(DragDropTarget: TDragDropTargetWindows); begin inherited Create; // Here RefCount is 1 - as set in TInterfacedObject.NewInstance, // but it's decremented back in TInterfacedObject.AfterConstruction // (when this constructor finishes). So we must manually again increase it. _AddRef; FReleased := False; FDragDropTarget := DragDropTarget; // Increases RefCount. ActiveX.CoLockObjectExternal(Self, True, False); // Increases RefCount. if ActiveX.RegisterDragDrop(DragDropTarget.GetControl.Handle, Self) = S_OK then FHandle := DragDropTarget.GetControl.Handle else FHandle := 0; end; { TFileDropTarget.FinalRelease } procedure TFileDropTarget.FinalRelease; begin if not FReleased then begin FReleased := True; // Decreases reference count. ActiveX.CoLockObjectExternal(Self, False, True); // Check if window was not already destroyed. if (FHandle <> 0) and (IsWindow(FHandle)) then begin // Decreases reference count. ActiveX.RevokeDragDrop(FHandle); FHandle := 0; end else _Release; // Cannot revoke - just release reference. _Release; // For _AddRef in Create. end; end; function TFileDropTarget.DragEnter(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var DropEffect: TDropEffect; begin // dwEffect parameter states which effects are allowed by the source. dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); if Assigned(FDragDropTarget.GetDragEnterEvent) then begin DropEffect := WinEffectToDropEffect(dwEffect); if FDragDropTarget.GetDragEnterEvent()(DropEffect, pt) = True then begin dwEffect := DropEffectToWinEffect(DropEffect); Result := S_OK end else Result := S_FALSE; end else Result := S_OK; end; { TFileDropTarget.DragOver } function TFileDropTarget.DragOver(grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var DropEffect: TDropEffect; begin // dwEffect parameter states which effects are allowed by the source. dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); if Assigned(FDragDropTarget.GetDragOverEvent) then begin DropEffect := WinEffectToDropEffect(dwEffect); if FDragDropTarget.GetDragOverEvent()(DropEffect, pt) = True then begin dwEffect := DropEffectToWinEffect(DropEffect); Result := S_OK end else Result := S_FALSE; end else Result := S_OK; end; { TFileDropTarget.DragLeave } function TFileDropTarget.DragLeave: HResult; stdcall; begin if Assigned(FDragDropTarget.GetDragLeaveEvent) then begin if FDragDropTarget.GetDragLeaveEvent() = True then Result := S_OK else Result := S_FALSE; end else Result := S_OK; end; { Обработка сброшенных данных. } { TFileDropTarget.Drop } function TFileDropTarget.Drop(const dataObj: IDataObject; grfKeyState: LongWord; pt: TPoint; var dwEffect: LongWord): HResult; stdcall; var Medium: TSTGMedium; CyclingThroughFormat, ChosenFormat: TFormatETC; i: Integer; DropInfo: TDragDropInfo; FileNames, DragTextModeOfferedList: TStringList; SelectedFormatName:String; DropEffect: TDropEffect; Enum: IEnumFormatEtc; DragAndDropSupportedFormatList:TStringList; UnusedInteger : integer; begin DragAndDropSupportedFormatList:=TStringList.Create; try FileNames:=nil; UnusedInteger:=0; dataObj._AddRef; { Получаем данные. Структура TFormatETC сообщает dataObj.GetData, как получить данные и в каком формате они должны храниться (эта информация содержится в структуре TSTGMedium). } //1. Let's build as quick list of the supported formats of what we've just been dropped. // We scan through all because sometimes the best one is not the first compatible one. OleCheck(DataObj.EnumFormatEtc(DATADIR_GET, Enum)); while Enum.Next(1, CyclingThroughFormat, nil) = S_OK do DragAndDropSupportedFormatList.Add(IntToStr(CyclingThroughFormat.CfFormat)); //2. Let's determine our best guess. // The order for this will be: // 1st) CF_HDROP (for legacy purpose, since DC was using it first). // 2nd) CFU_FILEGROUPDESCRIPTORW + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 3rd) CFU_FILEGROUPDESCRIPTOR + CFU_FILECONTENTS (Outlook 2010 / Windows Live Mail, etc.) // 4th) We'll see if user would like to create a new text file from possible selected text dropped on the panel // CF_UNICODETEXT (Notepad++ / Wordpad / Firefox) // CF_TEXT (Notepad / Wordpad / Firefox) // CFU_HTML (Firefox) // Rich Text (Wordpad / Microsoft Word) ChosenFormat.CfFormat:=0; if DragAndDropSupportedFormatList.IndexOf(IntToStr(CF_HDROP))<>-1 then ChosenFormat.CfFormat:=CF_HDROP; if (ChosenFormat.CfFormat=0) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILEGROUPDESCRIPTORW))<>-1) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILECONTENTS))<>-1) then ChosenFormat.CfFormat:=CFU_FILEGROUPDESCRIPTORW; if (ChosenFormat.CfFormat=0) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILEGROUPDESCRIPTOR))<>-1) AND (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_FILECONTENTS))<>-1) then ChosenFormat.CfFormat:=CFU_FILEGROUPDESCRIPTOR; // If we have no chosen format yet, let's attempt for text ones... if ChosenFormat.CfFormat=0 then begin DragTextModeOfferedList:=TStringList.Create; try if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_RICHTEXT))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CFU_HTML))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CF_UNICODETEXT))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name); if (DragAndDropSupportedFormatList.IndexOf(IntToStr(CF_TEXT))<>-1) then DragTextModeOfferedList.Add(gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name); SortThisListAccordingToDragAndDropDesiredFormat(DragTextModeOfferedList); if DragTextModeOfferedList.Count>0 then SelectedFormatName:=DragTextModeOfferedList.Strings[0] else SelectedFormatName:=''; if (DragTextModeOfferedList.Count>1) AND (gDragAndDropAskFormatEachTime) then if not ShowInputListBox(rsCaptionForTextFormatToImport,rsMsgForTextFormatToImport,DragTextModeOfferedList,SelectedFormatName,UnusedInteger) then SelectedFormatName:=''; if SelectedFormatName<>'' then begin if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextRichText_Index].Name then ChosenFormat.CfFormat:=CFU_RICHTEXT; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextHtml_Index].Name then ChosenFormat.CfFormat:=CFU_HTML; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextUnicode_Index].Name then ChosenFormat.CfFormat:=CF_UNICODETEXT; if SelectedFormatName=gDragAndDropDesiredTextFormat[DropTextSimpleText_Index].Name then ChosenFormat.CfFormat:=CF_TEXT; end; finally DragTextModeOfferedList.Free; end; end; //3. According to our best guess, let's store to "FileNames" list, the list of files we got (...or that we'll create!) if ChosenFormat.CfFormat<>0 then begin ChosenFormat.ptd := nil; ChosenFormat.dwAspect := DVASPECT_CONTENT; ChosenFormat.lindex := -1; ChosenFormat.tymed := TYMED_HGLOBAL; { Заносим данные в структуру Medium } Result:=dataObj.GetData(ChosenFormat, Medium); { Если все прошло успешно, далее действуем, как при операции файлового перетаскивания FMDD. } if Result = S_OK then begin if Medium.Tymed=TYMED_HGLOBAL then begin case ChosenFormat.CfFormat of CF_HDROP: FileNames := GetDropFilenames(Medium.hGlobal); CF_UNICODETEXT, CF_TEXT: FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); else begin if ChosenFormat.CfFormat=CFU_FILEGROUPDESCRIPTORW then FileNames := GetDropFileGroupFilenames(dataObj, Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_FILEGROUPDESCRIPTOR then FileNames := GetDropFileGroupFilenames(dataObj, Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_HTML then FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); if ChosenFormat.CfFormat=CFU_RICHTEXT then FileNames := GetDropTextCreatedFilenames(Medium, ChosenFormat); end; end; end; end; end; //4. If we have some filenames in our list, continue to process the actual "Drop" of files if (Result = S_OK) then begin { Создаем объект TDragDropInfo } DropInfo := TDragDropInfo.Create(dwEffect); if Assigned(FileNames) then begin for i := 0 to FileNames.Count - 1 do DropInfo.Add(FileNames[i]); FreeAndNil(FileNames); end; { Если указан обработчик, вызываем его } if (Assigned(FDragDropTarget.GetDropEvent)) then begin // Set default effect by examining keyboard keys, taking into // consideration effects allowed by the source (dwEffect parameter). dwEffect := dwEffect and GetEffectByKeyState(grfKeyState); DropEffect := WinEffectToDropEffect(dwEffect); FDragDropTarget.GetDropEvent()(DropInfo.Files, DropEffect, pt); dwEffect := DropEffectToWinEffect(DropEffect); end; DropInfo.Free; if (Medium.PUnkForRelease = nil) then // Drop target must release the medium allocated by GetData. // This does the same as DragFinish(Medium.hGlobal) in this case, // but can support other media. ReleaseStgMedium(@Medium) else // Drop source is responsible for releasing medium via this object. IUnknown(Medium.PUnkForRelease)._Release; end; dataObj._Release; finally DragAndDropSupportedFormatList.Free; end; end; { TFileDropTarget.GetDropFilenames } class function TFileDropTarget.GetDropFilenames(hDropData: HDROP): TStringList; var NumFiles: Integer; i: Integer; wszFilename: PWideChar; FileName: WideString; RequiredSize: Cardinal; begin Result := nil; if hDropData <> 0 then begin Result := TStringList.Create; try NumFiles := DragQueryFileW(hDropData, $FFFFFFFF, nil, 0); for i := 0 to NumFiles - 1 do begin RequiredSize := DragQueryFileW(hDropData, i, nil, 0) + 1; // + 1 = terminating zero wszFilename := GetMem(RequiredSize * SizeOf(WideChar)); if Assigned(wszFilename) then try if DragQueryFileW(hDropData, i, wszFilename, RequiredSize) > 0 then begin FileName := wszFilename; // Windows inserts '?' character where Wide->Ansi conversion // of a character was not possible, in which case filename is invalid. // This may happen if a non-Unicode application was the source. if Pos('?', FileName) = 0 then Result.Add(UTF16ToUTF8(FileName)) else raise Exception.Create(rsMsgInvalidFilename + ': ' + LineEnding + UTF16ToUTF8(FileName)); end; finally FreeMem(wszFilename); end; end; except FreeAndNil(Result); raise; end; end; end; { TFileDropTarget.SaveCfuContentToFile } function TFileDropTarget.SaveCfuContentToFile(const dataObj:IDataObject; Index:Integer; WantedFilename:String; WantedCreationTime, WantedModificationTime, WantedLastAccessTime:DCBasicTypes.TFileTime):boolean; const TEMPFILENAME='CfuContentFile.bin'; var Format : TFORMATETC; Medium : TSTGMedium; Ifile, iStg : IStorage; tIID : PGuid; hFile: THandle; pvStrm: IStream; i64Size: Int64; i64Move: Int64; dwSize: LongInt; AnyPointer: PAnsiChar; InnerFilename: String; StgDocFile: WideString; msStream: TMemoryStream; begin result:=FALSE; InnerFilename:= ExtractFilepath(WantedFilename) + TEMPFILENAME; Format.cfFormat := CFU_FILECONTENTS; Format.dwAspect := DVASPECT_CONTENT; Format.lindex := Index; Format.ptd := nil; Format.TYMED := TYMED_ISTREAM OR TYMED_ISTORAGE or TYMED_HGLOBAL; if dataObj.GetData(Format, Medium) = S_OK then begin if Medium.TYMED = TYMED_ISTORAGE then begin iStg := IStorage(Medium.pstg); StgDocFile := UTF8Decode(InnerFilename); StgCreateDocfile(PWideChar(StgDocFile), STGM_CREATE Or STGM_READWRITE Or STGM_SHARE_EXCLUSIVE, 0, iFile); tIID:=nil; iStg.CopyTo(0, tIID, nil, iFile); iFile.Commit(0); iFile := nil; iStg := nil; end else if Medium.Tymed = TYMED_HGLOBAL then begin AnyPointer := GlobalLock(Medium.HGLOBAL); try hFile := mbFileCreate(InnerFilename); if hFile <> feInvalidHandle then begin FileWrite(hFile, AnyPointer^, GlobalSize(Medium.HGLOBAL)); FileClose(hFile); end; finally GlobalUnlock(Medium.HGLOBAL); end; if Medium.PUnkForRelease = nil then GlobalFree(Medium.HGLOBAL); end else begin pvStrm:=IStream(Medium.pstm); // Figure out how large the data is if (pvStrm.Seek(0, STREAM_SEEK_END, i64Size) = S_OK) then begin // Seek back to start of stream pvStrm.Seek(0, STREAM_SEEK_SET, i64Move); // Create memory stream to convert to msStream:=TMemoryStream.Create; // Allocate size msStream.Size:=i64Size; // Read from the IStream into the memory for the TMemoryStream if pvStrm.Read(msStream.Memory, i64Size, @dwSize)=S_OK then msStream.Size:=dwSize else msStream.Size:=0; // Release interface pvStrm:=nil; msStream.Position:=0; msStream.SaveToFile(UTF8ToSys(InnerFilename)); msStream.Free; end; end; end; if mbFileExists(InnerFilename) then begin mbRenameFile(InnerFilename,WantedFilename); if mbFileExists(WantedFilename) then result:=mbFileSetTime(WantedFilename, WantedModificationTime, WantedCreationTime, WantedLastAccessTime); end; end; { TFileDropTarget.GetDropFileGroupFilenames } function TFileDropTarget.GetDropFileGroupFilenames(const dataObj: IDataObject; var Medium: TSTGMedium; Format: TFormatETC): TStringList; var AnyPointer: Pointer; DC_FileGroupeDescriptorW: FILEGROUPDESCRIPTORW; DC_FileGroupeDescriptor: FILEGROUPDESCRIPTOR; DC_FileDescriptorW: FILEDESCRIPTORW; DC_FileDescriptor: FILEDESCRIPTOR; NumberOfFiles, CopyNumber, IndexFile: integer; ActualFilename, DroppedTextFilename: String; SuffixStr: string; WantedCreationTime, WantedModificationTime, WantedLastAccessTime : DCBasicTypes.TFileTime; begin Result := nil; AnyPointer := GlobalLock(Medium.HGLOBAL); try // Copy the structure if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then begin MoveMemory(@DC_FileGroupeDescriptorW, AnyPointer, SizeOf(FILEGROUPDESCRIPTORW)); NumberOfFiles:=DC_FileGroupeDescriptorW.cItems; end else begin MoveMemory(@DC_FileGroupeDescriptor, AnyPointer, SizeOf(FILEGROUPDESCRIPTOR)); NumberOfFiles:=DC_FileGroupeDescriptor.cItems; end; // Return the number of messages if NumberOfFiles>0 then begin if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then AnyPointer:=AnyPointer+SizeOf(FILEGROUPDESCRIPTORW.cItems) else AnyPointer:=AnyPointer+SizeOf(FILEGROUPDESCRIPTOR.cItems); result:=TStringList.Create; for IndexFile:=0 to pred(NumberOfFiles) do begin if Format.CfFormat=CFU_FILEGROUPDESCRIPTORW then begin MoveMemory(@DC_FileDescriptorW, AnyPointer, SizeOf(FILEDESCRIPTORW)); AnyPointer:=AnyPointer+SizeOf(FILEDESCRIPTORW); ActualFilename:=UTF16ToUTF8(UnicodeString(DC_FileDescriptorW.cFileName)); WantedCreationTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftCreationTime); WantedModificationTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftLastWriteTime); WantedLastAccessTime:=DCBasicTypes.TFileTime(DC_FileDescriptorW.ftLastAccessTime); end else begin MoveMemory(@DC_FileDescriptor, AnyPointer, SizeOf(FILEDESCRIPTOR)); AnyPointer:=AnyPointer+SizeOf(FILEDESCRIPTOR); ActualFilename:=CeSysToUTF8(AnsiString(DC_FileDescriptor.cFileName)); WantedCreationTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftCreationTime); WantedModificationTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftLastWriteTime); WantedLastAccessTime:=DCBasicTypes.TFileTime(DC_FileDescriptor.ftLastAccessTime); end; DroppedTextFilename := GetTempFolderDeletableAtTheEnd+ActualFilename; if result.IndexOf(DroppedTextFilename) <> -1 then begin CopyNumber := 2; repeat case gTypeOfDuplicatedRename of drLikeWindows7: SuffixStr:=' ('+IntToStr(CopyNumber)+')'; drLikeTC: SuffixStr:='('+IntToStr(CopyNumber)+')'; end; case gTypeOfDuplicatedRename of drLegacyWithCopy: DroppedTextFilename := GetTempFolderDeletableAtTheEnd+SysUtils.Format(rsCopyNameTemplate, [CopyNumber, ActualFilename]); drLikeWindows7, drLikeTC: DroppedTextFilename := GetTempFolderDeletableAtTheEnd+RemoveFileExt(ActualFilename) + SuffixStr + ExtractFileExt(ActualFilename); end; Inc(CopyNumber); until result.IndexOf(DroppedTextFilename) = -1; end; if SaveCfuContentToFile(dataObj, IndexFile, DroppedTextFilename, WantedCreationTime, WantedModificationTime, WantedLastAccessTime) then result.Add(DroppedTextFilename); end; end; finally // Release the pointer GlobalUnlock(Medium.HGLOBAL); end; end; { TFileDropTarget.GetDropTextCreatedFilenames } function TFileDropTarget.GetDropTextCreatedFilenames(var Medium: TSTGMedium; Format: TFormatETC): TStringList; var FlagKeepGoing:boolean; AnyPointer: Pointer; UnicodeCharPointer: PUnicodeChar; hFile: THandle; DroppedTextFilename: String; MyUnicodeString: UnicodeString; procedure SetDefaultFilename; begin DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedText+'.txt'; if Format.CfFormat=CFU_RICHTEXT then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextRichtextFilename+'.rtf'; if Format.CfFormat=CFU_HTML then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextHTMLFilename+'.html'; if (Format.CfFormat=CF_UNICODETEXT) AND not gDragAndDropSaveUnicodeTextInUFT8 then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextUnicodeUTF16Filename+'.txt'; if (Format.CfFormat=CF_UNICODETEXT) AND gDragAndDropSaveUnicodeTextInUFT8 then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextUnicodeUTF8Filename+'.txt'; if Format.CfFormat=CF_TEXT then DroppedTextFilename:=GetDateTimeInStrEZSortable(now)+rsDefaultSuffixDroppedTextSimpleFilename+'.txt'; end; begin result:=nil; FlagKeepGoing:=TRUE; SetDefaultFilename; if not gDragAndDropTextAutoFilename then FlagKeepGoing:=ShowInputQuery(rsCaptionForAskingFilename, rsMsgPromptAskingFilename, DroppedTextFilename); if FlagKeepGoing then begin if DroppedTextFilename='' then SetDefaultFilename; //Just minimal idot-proof... DroppedTextFilename:=GetTempFolderDeletableAtTheEnd+DroppedTextFilename; AnyPointer := GlobalLock(Medium.hGlobal); try hFile:= mbFileCreate(DroppedTextFilename); try case Format.CfFormat of CF_TEXT: begin FileWrite(hFile, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); end; CF_UNICODETEXT: begin if gDragAndDropSaveUnicodeTextInUFT8 then begin UnicodeCharPointer:=AnyPointer; MyUnicodeString:=''; while UnicodeCharPointer^<>#$0000 do begin MyUnicodeString:=MyUnicodeString+UnicodeCharPointer^; inc(UnicodeCharPointer); end; FileWrite(hFile, PChar(#$EF+#$BB+#$BF)[0], 3); //Adding Byte Order Mask for UTF8. FileWrite(hFile, UTF16toUTF8(MyUnicodeString)[1], Length(UTF16toUTF8(MyUnicodeString))); end else begin FileWrite(hFile, PChar(#$FF+#$FE)[0], 2); //Adding Byte Order Mask for UTF16, Little-Endian first. FileWrite(hFile, PUnicodeChar(AnyPointer)^, Length(PUnicodeChar(AnyPointer))*2); end; end; else begin if Format.CfFormat=CFU_HTML then FileWrite(hFile, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); if Format.CfFormat=CFU_RICHTEXT then FileWrite(hFile, PAnsiChar(AnyPointer)^, UTF8Length(PAnsiChar(AnyPointer))); end; end; finally FileClose(hFile); end; result:=TStringList.Create; result.Add(DroppedTextFilename); finally GlobalUnlock(Medium.hGlobal); end; end; end; { TFileDropSource.Create } constructor TFileDropSource.Create; begin inherited Create; _AddRef; end; { TFileDropSource.QueryContinueDrag } {$IF FPC_FULLVERSION < 020601} function TFileDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: longint): HResult; {$ELSE} function TFileDropSource.QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD): HResult; {$ENDIF} var Point:TPoint; begin if (fEscapePressed) then begin Result := DRAGDROP_S_CANCEL; // Set flag to notify that dragging was canceled by the user. uDragDropEx.TransformDragging := False; end else if ((grfKeyState and (MK_LBUTTON or MK_MBUTTON or MK_RBUTTON)) = 0) then begin Result := DRAGDROP_S_DROP; end else begin if uDragDropEx.AllowTransformToInternal then begin GetCursorPos(Point); // Call LCL function, not the Windows one. // LCL version will return 0 if mouse is over a window belonging to another process. if LCLIntf.WindowFromPoint(Point) <> 0 then begin // Mouse cursor has been moved back into the application window. // Cancel external dragging. Result := DRAGDROP_S_CANCEL; // Set flag to notify that dragging has not finished, // but rather it is to be transformed into internal dragging. uDragDropEx.TransformDragging := True; end else Result := S_OK; // Continue dragging end else Result := S_OK; // Continue dragging end; end; {$IF FPC_FULLVERSION < 020601} function TFileDropSource.GiveFeedback(dwEffect: longint): HResult; {$ELSE} function TFileDropSource.GiveFeedback(dwEffect: DWORD): HResult; {$ENDIF} begin case LongWord(dwEffect) of DROPEFFECT_NONE, DROPEFFECT_COPY, DROPEFFECT_MOVE, DROPEFFECT_LINK, DROPEFFECT_SCROLL: Result := DRAGDROP_S_USEDEFAULTCURSORS; else Result := S_OK; end; end; { THDropDataObject.Create } constructor THDropDataObject.Create(PreferredWinDropEffect: DWORD); begin inherited Create; _AddRef; FDropInfo := TDragDropInfo.Create(PreferredWinDropEffect); end; { THDropDataObject.Destroy } destructor THDropDataObject.Destroy; begin if (FDropInfo <> nil) then FDropInfo.Free; inherited Destroy; end; { THDropDataObject.Add } procedure THDropDataObject.Add(const s: string); begin FDropInfo.Add(s); end; { THDropDataObject.GetData } function THDropDataObject.GetData(const formatetcIn: TFormatEtc; out medium: TStgMedium): HResult; begin Result := DV_E_FORMATETC; { Необходимо обнулить все поля medium на случай ошибки } medium.tymed := 0; medium.hGlobal := 0; medium.PUnkForRelease := nil; { Если формат поддерживается, создаем и возвращаем данные } if (QueryGetData(formatetcIn) = S_OK) then begin if (FDropInfo <> nil) then begin { Create data in specified format. } { The hGlobal will be released by the caller of GetData. } medium.hGlobal := FDropInfo.MakeDataInFormat(formatetcIn); if medium.hGlobal <> 0 then begin medium.tymed := TYMED_HGLOBAL; Result := S_OK; end; end; end; end; { THDropDataObject.GetDataHere } function THDropDataObject.GetDataHere(const formatetc: TFormatEtc; out medium: TStgMedium): HResult; begin Result := DV_E_FORMATETC; { К сожалению, не поддерживается } end; { THDropDataObject.QueryGetData } function THDropDataObject.QueryGetData(const formatetc: TFormatEtc): HResult; var i:Integer; begin with formatetc do if dwAspect = DVASPECT_CONTENT then begin Result := DV_E_FORMATETC; // begin with 'format not supported' // See if the queried format is supported. for i := 0 to DataFormats.Count - 1 do begin if Assigned(DataFormats[i]) then begin if cfFormat = PFormatEtc(DataFormats[i])^.CfFormat then begin // Format found, see if transport medium is supported. if (tymed = DWORD(-1)) or (Boolean(tymed and PFormatEtc(DataFormats[i])^.tymed)) then begin Result := S_OK; end else Result := DV_E_TYMED; // transport medium not supported Exit; // exit if format found (regardless of transport medium) end end end end else Result := DV_E_DVASPECT; // aspect not supported end; { THDropDataObject.GetCanonicalFormatEtc } function THDropDataObject.GetCanonicalFormatEtc(const formatetc: TFormatEtc; out formatetcOut: TFormatEtc): HResult; begin formatetcOut.ptd := nil; Result := E_NOTIMPL; end; { THDropDataObject.SetData } function THDropDataObject.SetData(const formatetc: TFormatEtc; const medium: TStgMedium; fRelease: BOOL): HResult; begin Result := E_NOTIMPL; end; { THDropDataObject.EnumFormatEtc возвращает список поддерживаемых форматов} function THDropDataObject.EnumFormatEtc(dwDirection: LongWord; out enumFormatEtc: IEnumFormatEtc): HResult; begin { Поддерживается только Get. Задать содержимое данных нельзя } if dwDirection = DATADIR_GET then begin enumFormatEtc := TEnumFormatEtc.Create; Result := S_OK; end else begin enumFormatEtc := nil; Result := E_NOTIMPL; end; end; { THDropDataObject.DAdviseDAdvise не поддерживаются} function THDropDataObject.DAdvise(const formatetc: TFormatEtc; advf: LongWord; const advSink: IAdviseSink; out dwConnection: LongWord): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; { THDropDataObject.DUnadvise } function THDropDataObject.DUnadvise(dwConnection: LongWord): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; { THDropDataObject.EnumDAdvise } function THDropDataObject.EnumDAdvise(out enumAdvise: IEnumStatData): HResult; begin Result := OLE_E_ADVISENOTSUPPORTED; end; function GetEffectByKeyState(grfKeyState: LongWord): Integer; begin Result := DROPEFFECT_COPY; { default effect } if (grfKeyState and MK_CONTROL) > 0 then begin if (grfKeyState and MK_SHIFT) > 0 then Result := DROPEFFECT_LINK else Result := DROPEFFECT_COPY; end else if (grfKeyState and MK_SHIFT) > 0 then Result := DROPEFFECT_MOVE; end; function WinEffectToDropEffect(dwEffect: LongWord): TDropEffect; begin case dwEffect of DROPEFFECT_COPY: Result := DropCopyEffect; DROPEFFECT_MOVE: Result := DropMoveEffect; DROPEFFECT_LINK: Result := DropLinkEffect; else Result := DropNoEffect; end; end; function DropEffectToWinEffect(DropEffect: TDropEffect): LongWord; begin case DropEffect of DropCopyEffect: Result := DROPEFFECT_COPY; DropMoveEffect: Result := DROPEFFECT_MOVE; DropLinkEffect: Result := DROPEFFECT_LINK; else Result := DROPEFFECT_NONE; end; end; function DragQueryWide( hGlobalDropInfo: HDROP ): boolean; var DropFiles: PDropFiles; begin DropFiles := GlobalLock( hGlobalDropInfo ); Result := DropFiles^.fWide; GlobalUnlock( hGlobalDropInfo ); end; { ---------------------------------------------------------} { TDragDropSourceWindows } function TDragDropSourceWindows.RegisterEvents( DragBeginEvent : uDragDropEx.TDragBeginEvent; RequestDataEvent: uDragDropEx.TRequestDataEvent; // not Handled in Windows DragEndEvent : uDragDropEx.TDragEndEvent): Boolean; begin inherited; // RequestDataEvent is not handled, because the system has control of all data transfer. Result := True; // confirm that events are registered end; function TDragDropSourceWindows.DoDragDrop(const FileNamesList: TStringList; MouseButton: TMouseButton; ScreenStartPoint: TPoint): Boolean; var DropSource: TFileDropSource; DropData: THDropDataObject; Rslt: HRESULT; dwEffect: LongWord; I: Integer; begin // Simulate drag-begin event. if Assigned(GetDragBeginEvent) then begin Result := GetDragBeginEvent()(); if Result = False then Exit; end; // Create source-object DropSource:= TFileDropSource.Create; // and data object DropData:= THDropDataObject.Create(DROPEFFECT_COPY { default effect } ); for I:= 0 to FileNamesList.Count - 1 do DropData.Add (FileNamesList[i]); // Start OLE Drag&Drop Rslt:= ActiveX.DoDragDrop(DropData, DropSource, DROPEFFECT_MOVE or DROPEFFECT_COPY or DROPEFFECT_LINK, // Allowed effects @dwEffect); case Rslt of DRAGDROP_S_DROP: begin FLastStatus := DragDropSuccessful; Result := True; end; DRAGDROP_S_CANCEL: begin FLastStatus := DragDropAborted; Result := False; end; else begin MessageBox(0, PAnsiChar(SysErrorMessage(Rslt)), nil, MB_OK or MB_ICONERROR); FLastStatus := DragDropError; Result := False; end; end; // Simulate drag-end event. This must be called here, // after DoDragDrop returns from the system. if Assigned(GetDragEndEvent) then begin if Result = True then Result := GetDragEndEvent()() else GetDragEndEvent()() end; // Release created objects. DropSource._Release; DropData._Release; end; { ---------------------------------------------------------} { TDragDropTargetWindows } constructor TDragDropTargetWindows.Create(Control: TWinControl); begin FDragDropTarget := nil; inherited Create(Control); end; destructor TDragDropTargetWindows.Destroy; begin inherited Destroy; if Assigned(FDragDropTarget) then begin FDragDropTarget.FinalRelease; FDragDropTarget := nil; end; end; function TDragDropTargetWindows.RegisterEvents( DragEnterEvent: uDragDropEx.TDragEnterEvent; DragOverEvent : uDragDropEx.TDragOverEvent; DropEvent : uDragDropEx.TDropEvent; DragLeaveEvent: uDragDropEx.TDragLeaveEvent): Boolean; begin // Unregister if registered before. UnregisterEvents; inherited; // Call inherited Register now. GetControl.HandleNeeded; // force creation of the handle if GetControl.HandleAllocated = True then begin FDragDropTarget := TFileDropTarget.Create(Self); Result := True; end; end; procedure TDragDropTargetWindows.UnregisterEvents; begin inherited; if Assigned(FDragDropTarget) then begin FDragDropTarget.FinalRelease; // Releasing will unregister events FDragDropTarget := nil; end; end; initialization OleInitialize(nil); InitDataFormats; finalization OleUninitialize; DestroyDataFormats; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/ufilesystemwatcher.pas�������������������������������������������������0000644�0001750�0000144�00000123354�12673232504�021600� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This is a thread-component sends an event when a change in the file system occurs. Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) Copyright (C) 2011 Przemyslaw Nagay (cobines@gmail.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 uFileSystemWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils; //{$DEFINE DEBUG_WATCHER} type TFSWatchFilter = set of (wfFileNameChange, wfAttributesChange); TFSWatcherEventType = (fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed, fswUnknownChange); TFSWatcherEventTypes = set of TFSWatcherEventType; TFSWatcherEventData = record Path: String; EventType: TFSWatcherEventType; FileName: String; // Valid for fswFileCreated, fswFileChanged, fswFileDeleted, fswFileRenamed NewFileName: String; // Valid for fswFileRenamed UserData: Pointer; end; PFSWatcherEventData = ^TFSWatcherEventData; TFSWatcherEvent = procedure(const EventData: TFSWatcherEventData) of object; { TFileSystemWatcher } TFileSystemWatcher = class private class procedure CreateFileSystemWatcher; class procedure DestroyFileSystemWatcher; public {en Returns @true if watch has been successfully added or already exists. } class function AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; class procedure RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); class procedure RemoveWatch(aWatcherEvent: TFSWatcherEvent); class function CanWatch(const WatchPaths: array of String): Boolean; end; implementation uses LCLProc, uDebug, uExceptions, syncobjs, fgl {$IF DEFINED(MSWINDOWS)} ,Windows, JwaWinNT, JwaWinBase, LazUTF8, DCWindows, DCStrUtils, uGlobs, uOSUtils {$ELSEIF DEFINED(LINUX)} ,inotify, BaseUnix, FileUtil, DCConvertEncoding {$ELSEIF DEFINED(BSD)} ,BSD, Unix, BaseUnix, UnixType, FileUtil {$ENDIF}; {$IF DEFINED(MSWINDOWS)} const // For each outstanding ReadDirectoryW a buffer of this size will be allocated // by kernel, so this value should be rather small. READDIRECTORYCHANGESW_BUFFERSIZE = 4096; READDIRECTORYCHANGESW_DRIVE_BUFFERSIZE = 32768; var VAR_READDIRECTORYCHANGESW_BUFFERSIZE: DWORD = READDIRECTORYCHANGESW_BUFFERSIZE; CREATEFILEW_SHAREMODE: DWORD = FILE_SHARE_READ or FILE_SHARE_WRITE; function GetTargetPath(const Path: String): String; begin Result := mbReadAllLinks(Path); if Result = EmptyStr then Result := Path; end; function GetDriveOfPath(const Path: String): String; begin Result := ExtractFileDrive(GetTargetPath(Path)) + PathDelim; end; {$ENDIF} type TOSWatchObserver = class UserData: Pointer; WatcherEvent: TFSWatcherEvent; WatchFilter: TFSWatchFilter; {$IF DEFINED(MSWINDOWS)} RegisteredWatchPath: String; // Path that was registered to watch (for watching whole drive mode). TargetWatchPath: String; // What path is actually to be watched (for watching whole drive mode). {$ENDIF} end; TOSWatchObservers = specialize TFPGObjectList<TOSWatchObserver>; TOSWatch = class private FHandle: THandle; FObservers: TOSWatchObservers; FWatchFilter: TFSWatchFilter; FWatchPath: String; {$IF DEFINED(MSWINDOWS)} FOverlapped: OVERLAPPED; FBuffer: PByte; FNotifyFilter: DWORD; FReferenceCount: LongInt; FOldFileName: String; // for FILE_ACTION_RENAMED_OLD_NAME action {$ENDIF} {$IF DEFINED(UNIX)} FNotifyHandle: THandle; {$ENDIF} procedure CreateHandle; procedure DestroyHandle; {$IF DEFINED(MSWINDOWS)} procedure QueueCancelRead; procedure QueueRead; procedure SetFilter(aWatchFilter: TFSWatchFilter); {$ENDIF} public constructor Create(const aWatchPath: String {$IFDEF UNIX}; aNotifyHandle: THandle{$ENDIF}); reintroduce; destructor Destroy; override; procedure UpdateFilter; {$IF DEFINED(MSWINDOWS)} procedure Reference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; procedure Dereference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$ENDIF} property Handle: THandle read FHandle; property Observers: TOSWatchObservers read FObservers; property WatchPath: String read FWatchPath; end; TOSWatchs = specialize TFPGObjectList<TOSWatch>; { TFileSystemWatcherImpl } TFileSystemWatcherImpl = class(TThread) private FWatcherLock: syncobjs.TCriticalSection; FOSWatchers: TOSWatchs; {$IF DEFINED(UNIX)} FNotifyHandle: THandle; {$ENDIF} {$IF DEFINED(LINUX)} FEventPipe: TFilDes; {$ENDIF} FCurrentEventData: TFSWatcherEventData; FFinished: Boolean; procedure DoWatcherEvent; function GetWatchersCount: Integer; function GetWatchPath(var aWatchPath: String): Boolean; {$IF DEFINED(MSWINDOWS)} function IsPathObserved(Watch: TOSWatch; FileName: String): Boolean; {$ENDIF} {en Call only under FWatcherLock. } procedure RemoveObserverLocked(OSWatcherIndex: Integer; aWatcherEvent: TFSWatcherEvent); {en Call only under FWatcherLock. } procedure RemoveOSWatchLocked(Index: Integer); procedure RemoveOSWatch(Watch: TOSWatch); procedure TriggerTerminateEvent; protected procedure Execute; override; procedure ExecuteWatcher; public constructor Create; destructor Destroy; override; procedure Terminate; function AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; procedure RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); procedure RemoveWatch(aWatcherEvent: TFSWatcherEvent); property WatchersCount: Integer read GetWatchersCount; end; var FileSystemWatcher: TFileSystemWatcherImpl = nil; { TFileSystemWatcher } class procedure TFileSystemWatcher.CreateFileSystemWatcher; begin if Assigned(FileSystemWatcher) and FileSystemWatcher.FFinished then // Thread finished prematurely maybe because of an error. // Destroy and recreate below. DestroyFileSystemWatcher; if not Assigned(FileSystemWatcher) then FileSystemWatcher := TFileSystemWatcherImpl.Create; end; class procedure TFileSystemWatcher.DestroyFileSystemWatcher; begin if Assigned(FileSystemWatcher) then begin DCDebug('Waiting for FileSystemWatcher thread'); FileSystemWatcher.Terminate; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not FileSystemWatcher.FFinished do CheckSynchronize(100); {$ENDIF} FileSystemWatcher.WaitFor; FreeAndNil(FileSystemWatcher); end; end; class function TFileSystemWatcher.AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer = nil): Boolean; begin CreateFileSystemWatcher; if Assigned(FileSystemWatcher) then Result := FileSystemWatcher.AddWatch(aWatchPath, aWatchFilter, aWatcherEvent, UserData) else Result := False; end; class procedure TFileSystemWatcher.RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); begin if Assigned(FileSystemWatcher) then begin FileSystemWatcher.RemoveWatch(aWatchPath, aWatcherEvent); if FileSystemWatcher.WatchersCount = 0 then DestroyFileSystemWatcher; end; end; class procedure TFileSystemWatcher.RemoveWatch(aWatcherEvent: TFSWatcherEvent); begin if Assigned(FileSystemWatcher) then begin FileSystemWatcher.RemoveWatch(aWatcherEvent); if FileSystemWatcher.WatchersCount = 0 then DestroyFileSystemWatcher; end; end; class function TFileSystemWatcher.CanWatch(const WatchPaths: array of String): Boolean; {$IF DEFINED(MSWINDOWS)} var Index: Integer; DrivePath: UnicodeString; begin for Index:= Low(WatchPaths) to High(WatchPaths) do begin DrivePath:= UnicodeString(Copy(WatchPaths[Index], 1, 3)); if GetDriveTypeW(PWideChar(DrivePath)) = DRIVE_REMOTE then Exit(False) end; Result:= True; end; {$ELSE} begin Result:= True; end; {$ENDIF} // ---------------------------------------------------------------------------- procedure ShowError(const sErrMsg: String); begin DCDebug('FSWatcher: ' + sErrMsg + ': (' + IntToStr(GetLastOSError) + ') ' + SysErrorMessage(GetLastOSError)); end; {$IF DEFINED(MSWINDOWS)} procedure NotifyRoutine(dwErrorCode: DWORD; dwNumberOfBytes: DWORD; Overlapped: LPOVERLAPPED); stdcall; forward; function StartReadDirectoryChanges(Watch: TOSWatch): Boolean; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChanges for ', Watch.FWatchPath); {$ENDIF} if Watch.Handle <> feInvalidHandle then begin Result := ReadDirectoryChangesW( Watch.Handle, Watch.FBuffer, VAR_READDIRECTORYCHANGESW_BUFFERSIZE, gWatcherMode = fswmWholeDrive, Watch.FNotifyFilter, nil, @Watch.FOverlapped, @NotifyRoutine) or // ERROR_IO_PENDING is a confirmation that the I/O operation has started. (GetLastError = ERROR_IO_PENDING); if Result then Watch.Reference{$IFDEF DEBUG_WATCHER}('StartReadDirectoryChanges'){$ENDIF} else begin // ERROR_INVALID_HANDLE will be when handle was destroyed // just before the call to ReadDirectoryChangesW. if GetLastError <> ERROR_INVALID_HANDLE then ShowError('ReadDirectoryChangesW error'); end; end else Result := False; end; procedure ProcessFileNotifyInfo(Watch: TOSWatch; dwBytesReceived: DWORD); var wFilename: Widestring; fnInfo: PFILE_NOTIFY_INFORMATION; begin with FileSystemWatcher do begin FCurrentEventData.Path := Watch.WatchPath; if dwBytesReceived = 0 then begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Buffer overflowed. Some events happened though.'); {$ENDIF} // Buffer was not large enough to store all events. In this case it is only // known that something has changed but all specific events have been lost. FCurrentEventData.EventType := fswUnknownChange; FCurrentEventData.FileName := EmptyStr; FCurrentEventData.NewFileName := EmptyStr; Synchronize(@DoWatcherEvent); Exit; end; fnInfo := @Watch.FBuffer[0]; // FCurrentEventData can be accessed safely because only one ProcessFileNotifyInfo // is called at a time due to completion routines being in a queue. while True do begin SetString(wFilename, PWideChar(@fnInfo^.FileName), fnInfo^.FileNameLength div SizeOf(WideChar)); FCurrentEventData.NewFileName := EmptyStr; case fnInfo^.Action of FILE_ACTION_ADDED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileCreated; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Created file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_REMOVED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileDeleted; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Deleted file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_MODIFIED: begin FCurrentEventData.FileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileChanged; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Modified file ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_RENAMED_OLD_NAME: begin Watch.FOldFileName := UTF16ToUTF8(wFilename); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Rename from ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; FILE_ACTION_RENAMED_NEW_NAME: begin FCurrentEventData.FileName := Watch.FOldFileName; FCurrentEventData.NewFileName := UTF16ToUTF8(wFilename); FCurrentEventData.EventType := fswFileRenamed; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: Process watch ', hexStr(Watch), ': Rename to ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName); {$ENDIF} end; else begin FCurrentEventData.EventType := fswUnknownChange; FCurrentEventData.FileName := EmptyStr; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Process watch ', hexStr(Watch), ': Action ', fnInfo^.Action, ' for ', IncludeTrailingPathDelimiter(Watch.WatchPath) + FCurrentEventData.FileName]); {$ENDIF} end; end; if (fnInfo^.Action <> FILE_ACTION_RENAMED_OLD_NAME) and ((gWatcherMode <> fswmWholeDrive) or IsPathObserved(Watch, FCurrentEventData.FileName)) then Synchronize(@DoWatcherEvent); if fnInfo^.NextEntryOffset = 0 then Break else fnInfo := PFILE_NOTIFY_INFORMATION(PByte(fnInfo) + fnInfo^.NextEntryOffset); end; end; end; procedure NotifyRoutine(dwErrorCode: DWORD; dwNumberOfBytes: DWORD; Overlapped: LPOVERLAPPED); stdcall; var Watch: TOSWatch; bReadStarted: Boolean = False; begin Watch := TOSWatch(Overlapped^.hEvent); {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine for watch ', hexStr(Watch), ' bytes=', dwNumberOfBytes, ' code=', dwErrorCode, ' handle=', Integer(Watch.Handle)]); {$ENDIF} case dwErrorCode of ERROR_SUCCESS: begin if Watch.FHandle <> feInvalidHandle then begin ProcessFileNotifyInfo(Watch, dwNumberOfBytes); bReadStarted := StartReadDirectoryChanges(Watch); end else begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: NotifyRoutine Handle destroyed, not starting Read'); {$ENDIF}; end; end; ERROR_OPERATION_ABORTED: begin // I/O operation has been cancelled to change parameters. {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: NotifyRoutine aborted, will restart'); {$ENDIF} bReadStarted := StartReadDirectoryChanges(Watch); end; ERROR_ACCESS_DENIED: begin // Most probably handle has been closed or become invalid. {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine ERROR_ACCESS_DENIED watch=', hexStr(Watch)]); {$ENDIF} end; else begin DCDebug(['FSWatcher: NotifyRoutine error=', dwErrorCode]); end; end; if not bReadStarted then begin if Watch.Handle <> feInvalidHandle then // This will destroy the handle. FileSystemWatcher.RemoveOSWatch(Watch); // If Handle = feInvalidHandle that means Watch has already been // removed from FileSystemWatcher by main thread. end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('NotifyRoutine'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: NotifyRoutine for watch ', hexStr(Watch), ' done']); {$ENDIF} end; procedure ReadChangesProc(dwParam: ULONG_PTR); stdcall; var Watch: TOSWatch absolute dwParam; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChangesProc for watch ', hexStr(Watch)); {$ENDIF} if not StartReadDirectoryChanges(Watch) then begin if Watch.Handle <> feInvalidHandle then FileSystemWatcher.RemoveOSWatch(Watch); end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('ReadChangesProc'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: ReadChangesProc done for watch ', hexStr(Watch)); {$ENDIF} end; procedure CancelReadChangesProc(dwParam: ULONG_PTR); stdcall; var Watch: TOSWatch absolute dwParam; begin {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: CancelReadChangesProc for watch ', hexStr(Watch), ' handle ', Integer(Watch.Handle)]); {$ENDIF} // CancelIo will cause the completion routine to be called with ERROR_OPERATION_ABORTED. // Must be called from the same thread which started the I/O operation. if CancelIo(Watch.Handle) = False then begin if GetLastOSError <> ERROR_INVALID_HANDLE then ShowError('CancelReadChangesProc: CancelIo error'); end; Watch.Dereference{$IFDEF DEBUG_WATCHER}('CancelReadChangesProc'){$ENDIF}; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: CancelReadChangesProc done for watch ', hexStr(Watch)); {$ENDIF} end; procedure TerminateProc(dwParam: ULONG_PTR); stdcall; begin // This procedure does nothing. Simply queueing and executing it will cause // SleepEx to exit if there were no other APCs in the queue. end; {$ENDIF} { TFileSystemWatcherImpl } procedure TFileSystemWatcherImpl.Execute; begin DCDebug('FileSystemWatcher thread starting'); try try ExecuteWatcher; except on e: Exception do HandleException(e, Self); end; finally FFinished := True; DCDebug('FileSystemWatcher thread finished'); end; end; procedure TFileSystemWatcherImpl.ExecuteWatcher; {$IF DEFINED(MSWINDOWS)} begin while not Terminated do begin {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: SleepEx (', FOSWatchers.Count, ' watches)']); {$ENDIF} // Contrary to documentation: // SleepEx does not return until all APCs (including I/O completion routines) // in queue are called. Then it returns with WAIT_IO_COMPLETION. // Therefore there is no need to artificially flush queue. SleepEx(INFINITE, True); end; {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: SleepEx loop done'); {$ENDIF} end; {$ELSEIF DEFINED(LINUX)} const // Buffer size passed to read() must be at least the size of the first event // to be read from the file descriptor, otherwise Invalid Parameter is returned. // Event record size is variable, we use maximum possible for a single event. // Usually it is big enough so that multiple events can be read with single read(). // The 'name' field is always padded up to multiple of 16 bytes with NULLs. buffer_size = sizeof(inotify_event) + MAX_PATH; var bytes_to_parse, p, i: Integer; buf: PChar = nil; ev: pinotify_event; fds: TFDSet; nfds: cint; begin if (FNotifyHandle = feInvalidHandle) or (FEventPipe[0] = -1) or (FEventPipe[1] = -1) then Exit; try buf := GetMem(buffer_size); // get maximum file descriptor nfds := FEventPipe[0] + 1; if FNotifyHandle >= nfds then nfds := FNotifyHandle + 1; while not Terminated do begin // clear and set file descriptors fpFD_ZERO(fds); fpFD_SET(FEventPipe[0], fds); fpFD_SET(FNotifyHandle, fds); // wait for events if fpSelect(nfds, @fds, nil, nil, nil) = -1 then begin ShowError('select() failed'); Exit; end; { if } if fpFD_ISSET(FEventPipe[0], fds) = 1 then begin // clear pipe while FpRead(FEventPipe[0], buf, 1) <> -1 do; end; { if } if fpFD_ISSET(FNotifyHandle, fds) = 0 then // inotify handle didn't change, so user triggered continue; // Read events. bytes_to_parse := fpread(FNotifyHandle, buf, buffer_size); if bytes_to_parse = -1 then begin ShowError('read(): failed'); continue; end; { if } // parse events and print them p := 0; while p < bytes_to_parse do begin ev := pinotify_event(buf + p); for i := 0 to FOSWatchers.Count - 1 do begin if ev^.wd = FOSWatchers[i].Handle then begin with FCurrentEventData do begin Path := FOSWatchers[i].WatchPath; FileName := StrPas(PChar(@ev^.name)); NewFileName := EmptyStr; // IN_MOVED_FROM is converted to FileDelete. // IN_MOVED_TO is converted to FileCreate. // There is no guarantee we will receive as sequence of // IN_MOVED_FROM, IN_MOVED_TO as the events are only sent // if the source and destination directories respectively // are being watched. if (ev^.mask and (IN_IGNORED or IN_Q_OVERFLOW)) <> 0 then begin // Ignore this event. Break; end else if (ev^.mask and (IN_ACCESS or IN_MODIFY or IN_ATTRIB or IN_CLOSE or IN_OPEN or IN_CLOSE_WRITE or IN_CLOSE_NOWRITE)) <> 0 then begin EventType := fswFileChanged; end else if (ev^.mask and (IN_CREATE or IN_MOVED_TO)) <> 0 then begin EventType := fswFileCreated; end else if (ev^.mask and (IN_DELETE or IN_MOVED_FROM)) <> 0 then begin EventType := fswFileDeleted; end else if (ev^.mask and (IN_DELETE_SELF or IN_MOVE_SELF)) <> 0 then begin // Watched file/directory was deleted or moved. end else EventType := fswUnknownChange; end; // call event handler Synchronize(@DoWatcherEvent); break; end; { if } end; { for } p := p + sizeof(inotify_event) + ev^.len; end; { while } end; { while } finally if Assigned(buf) then FreeMem(buf); end; { try - finally } end; {$ELSEIF DEFINED(BSD)} var ke: TKEvent; begin if FNotifyHandle = feInvalidHandle then exit; while not Terminated do begin FillByte(ke, SizeOf(ke), 0); if kevent(FNotifyHandle, nil, 0, @ke, 1, nil) = -1 then break; case ke.Filter of EVFILT_TIMER: // user triggered continue; EVFILT_VNODE: begin with FCurrentEventData do begin Path := TOSWatch(ke.uData).WatchPath; EventType := fswUnknownChange; FileName := EmptyStr; NewFileName := EmptyStr; end; Synchronize(@DoWatcherEvent); end; end; { case } end; { while } end; {$ELSE} begin end; {$ENDIF} procedure TFileSystemWatcherImpl.DoWatcherEvent; var i, j: Integer; begin if not Terminated then begin try FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i].WatchPath = FCurrentEventData.Path then begin for j := 0 to FOSWatchers[i].Observers.Count - 1 do begin // TODO: Check filter. // Can be called under the lock because this function is run from // the main thread and the watcher thread is suspended anyway because // it's waiting until Synchronize call (thus this function) finishes. with FOSWatchers[i].Observers[j] do begin if Assigned(WatcherEvent) {$IFDEF MSWINDOWS} and ((gWatcherMode <> fswmWholeDrive) or IsInPath(TargetWatchPath, UTF8UpperCase(FOSWatchers[i].WatchPath + FCurrentEventData.FileName), False, False)) {$ENDIF} then begin FCurrentEventData.UserData := UserData; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then FCurrentEventData.Path := RegisteredWatchPath; {$ENDIF} WatcherEvent(FCurrentEventData); end; end; end; Break; end; { if } end; { for } finally FWatcherLock.Release; end; { try - finally } except on e: Exception do HandleException(e, Self); end; end; { if } end; function TFileSystemWatcherImpl.GetWatchersCount: Integer; begin FWatcherLock.Acquire; try Result := FOSWatchers.Count; finally FWatcherLock.Release; end; { try - finally } end; function TFileSystemWatcherImpl.GetWatchPath(var aWatchPath: String): Boolean; begin Result := True; {$IFDEF UNIX} if aWatchPath <> PathDelim then {$ENDIF} aWatchPath := ExcludeTrailingPathDelimiter(aWatchPath); {$IFDEF MSWINDOWS} // Special check for network path if (Pos(PathDelim, aWatchPath) = 1) and (NumCountChars(PathDelim, aWatchPath) < 3) then Exit(False); // Special check for drive root if (Length(aWatchPath) = 2) and (aWatchPath[2] = ':') then aWatchPath := aWatchPath + PathDelim; {$ENDIF} end; {$IF DEFINED(MSWINDOWS)} function TFileSystemWatcherImpl.IsPathObserved(Watch: TOSWatch; FileName: String): Boolean; var j: Integer; Path: String; begin Path := UTF8UpperCase(Watch.WatchPath + FileName); FWatcherLock.Acquire; try for j := 0 to Watch.Observers.Count - 1 do begin if IsInPath(Watch.Observers[j].TargetWatchPath, Path, False, False) then Exit(True); end; finally FWatcherLock.Release; end; { try - finally } Result := False; end; {$ENDIF} constructor TFileSystemWatcherImpl.Create; begin {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} // Workaround for race condition, see FPC Mantis #16884. inherited Create(True); {$ELSE} inherited Create(False); {$ENDIF} FOSWatchers := TOSWatchs.Create({$IFDEF MSWINDOWS}False{$ELSE}True{$ENDIF}); FWatcherLock := syncobjs.TCriticalSection.Create; FreeOnTerminate := False; FFinished := False; {$IF DEFINED(MSWINDOWS)} case gWatcherMode of fswmPreventDelete: VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_BUFFERSIZE; fswmAllowDelete: begin VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_BUFFERSIZE; CREATEFILEW_SHAREMODE := CREATEFILEW_SHAREMODE or FILE_SHARE_DELETE; end; fswmWholeDrive: begin VAR_READDIRECTORYCHANGESW_BUFFERSIZE := READDIRECTORYCHANGESW_DRIVE_BUFFERSIZE; CREATEFILEW_SHAREMODE := CREATEFILEW_SHAREMODE or FILE_SHARE_DELETE; end; end; {$ELSEIF DEFINED(LINUX)} // create inotify instance FNotifyHandle := fpinotify_init(); if FNotifyHandle < 0 then ShowError('inotify_init() failed'); // create pipe for user triggered fake event FEventPipe[0] := -1; FEventPipe[1] := -1; if FpPipe(FEventPipe) = 0 then begin // set both ends of pipe non blocking FpFcntl(FEventPipe[0], F_SetFl, FpFcntl(FEventPipe[0], F_GetFl) or O_NONBLOCK); FpFcntl(FEventPipe[1], F_SetFl, FpFcntl(FEventPipe[1], F_GetFl) or O_NONBLOCK); end else ShowError('pipe() failed'); {$ELSEIF DEFINED(BSD)} FNotifyHandle := kqueue(); if FNotifyHandle = feInvalidHandle then ShowError('kqueue() failed'); {$ELSEIF DEFINED(UNIX)} FNotifyHandle := feInvalidHandle; {$ENDIF} {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} Resume; {$ENDIF} end; destructor TFileSystemWatcherImpl.Destroy; begin {$IF DEFINED(LINUX)} // close both ends of pipe if FEventPipe[0] <> -1 then begin FpClose(FEventPipe[0]); FEventPipe[0] := -1; end; if FEventPipe[1] <> -1 then begin FpClose(FEventPipe[1]); FEventPipe[1] := -1; end; if FNotifyHandle <> feInvalidHandle then begin FpClose(FNotifyHandle); FNotifyHandle := feInvalidHandle; end; {$ELSEIF DEFINED(BSD)} if FNotifyHandle <> feInvalidHandle then begin FpClose(FNotifyHandle); FNotifyHandle := feInvalidHandle; end; {$ENDIF} if Assigned(FOSWatchers) then FreeAndNil(FOSWatchers); if Assigned(FWatcherLock) then FreeAndNil(FWatcherLock); inherited Destroy; end; procedure TFileSystemWatcherImpl.Terminate; begin {$IF DEFINED(MSWINDOWS)} // Remove leftover watchers before queueing TerminateProc. // Their handles will be destroyed which will cause completion routines // to be called before Terminate is set and SleepEx loop breaks. while FOSWatchers.Count > 0 do RemoveOSWatch(FOSWatchers[0]); // Then queue TerminateProc in TriggerTerminateEvent. {$ENDIF} inherited Terminate; TriggerTerminateEvent; end; function TFileSystemWatcherImpl.AddWatch(aWatchPath: String; aWatchFilter: TFSWatchFilter; aWatcherEvent: TFSWatcherEvent; UserData: Pointer): Boolean; var OSWatcher: TOSWatch = nil; OSWatcherCreated: Boolean = False; Observer: TOSWatchObserver; i, j: Integer; WatcherIndex: Integer = -1; {$IFDEF MSWINDOWS} RegisteredPath: String; {$ENDIF} begin if (aWatchPath = '') or (aWatcherEvent = nil) then Exit(False); if not GetWatchPath(aWatchPath) then Exit(False); {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then begin RegisteredPath := aWatchPath; aWatchPath := GetDriveOfPath(aWatchPath); end; {$ENDIF} // Check if the path is not already watched. FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do if FOSWatchers[i].WatchPath = aWatchPath then begin OSWatcher := FOSWatchers[i]; WatcherIndex := i; // Check if the observer is not already registered. for j := 0 to OSWatcher.Observers.Count - 1 do begin if CompareMethods(TMethod(OSWatcher.Observers[j].WatcherEvent), TMethod(aWatcherEvent)) then Exit(True); end; Break; end; finally FWatcherLock.Release; end; if not Assigned(OSWatcher) then begin OSWatcher := TOSWatch.Create(aWatchPath {$IFDEF UNIX}, FNotifyHandle {$ENDIF}); {$IF DEFINED(MSWINDOWS)} OSWatcher.Reference{$IFDEF DEBUG_WATCHER}('AddWatch'){$ENDIF}; // For usage by FileSystemWatcher (main thread) {$ENDIF} OSWatcherCreated := True; end; Observer := TOSWatchObserver.Create; Observer.WatchFilter := aWatchFilter; Observer.WatcherEvent := aWatcherEvent; Observer.UserData := UserData; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then begin Observer.RegisteredWatchPath := RegisteredPath; Observer.TargetWatchPath := UTF8UpperCase(GetTargetPath(RegisteredPath)); end; {$ENDIF} FWatcherLock.Acquire; try if OSWatcherCreated then WatcherIndex := FOSWatchers.Add(OSWatcher); OSWatcher.Observers.Add(Observer); OSWatcher.UpdateFilter; // This creates or recreates handle. Result := OSWatcher.Handle <> feInvalidHandle; // Remove watcher if could not create notification handle. if not Result then RemoveOSWatchLocked(WatcherIndex); finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveWatch(aWatchPath: String; aWatcherEvent: TFSWatcherEvent); var i: Integer; begin if not GetWatchPath(aWatchPath) then Exit; {$IFDEF MSWINDOWS} if gWatcherMode = fswmWholeDrive then aWatchPath := GetDriveOfPath(aWatchPath); {$ENDIF} FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i].WatchPath = aWatchPath then begin RemoveObserverLocked(i, aWatcherEvent); Break; end; end; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveWatch(aWatcherEvent: TFSWatcherEvent); var i: Integer; begin FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin RemoveObserverLocked(i, aWatcherEvent); end; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.RemoveObserverLocked(OSWatcherIndex: Integer; aWatcherEvent: TFSWatcherEvent); var j: Integer; begin for j := 0 to FOSWatchers[OSWatcherIndex].Observers.Count - 1 do begin if CompareMethods(TMethod(FOSWatchers[OSWatcherIndex].Observers[j].WatcherEvent), TMethod(aWatcherEvent)) then begin FOSWatchers[OSWatcherIndex].Observers.Delete(j); if FOSWatchers[OSWatcherIndex].Observers.Count = 0 then RemoveOSWatchLocked(OSWatcherIndex) else FOSWatchers[OSWatcherIndex].UpdateFilter; Break; end; end; end; procedure TFileSystemWatcherImpl.RemoveOSWatchLocked(Index: Integer); begin {$IF DEFINED(MSWINDOWS)} with FOSWatchers[Index] do begin DestroyHandle; Dereference{$IFDEF DEBUG_WATCHER}('RemoveOSWatchLocked'){$ENDIF}; // Not using anymore by FileSystemWatcher from main thread end; {$ENDIF} FOSWatchers.Delete(Index); end; procedure TFileSystemWatcherImpl.RemoveOSWatch(Watch: TOSWatch); var i: Integer; begin FWatcherLock.Acquire; try for i := 0 to FOSWatchers.Count - 1 do begin if FOSWatchers[i] = Watch then begin RemoveOSWatchLocked(i); Break; end; end; finally FWatcherLock.Release; end; end; procedure TFileSystemWatcherImpl.TriggerTerminateEvent; {$IF DEFINED(MSWINDOWS)} begin QueueUserAPC(@TerminateProc, Self.Handle, ULONG_PTR(Self)); end; {$ELSEIF DEFINED(LINUX)} var buf: Char; begin // check if thread has been started if Self.FNotifyHandle <> feInvalidHandle then begin buf := #0; FpWrite(FEventPipe[1], buf, 1); end; { if } end; {$ELSEIF DEFINED(BSD)} var ke: TKEvent; begin // check if thread has been started if Self.FNotifyHandle <> feInvalidHandle then begin FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 0, EVFILT_TIMER, EV_ADD or EV_ONESHOT, 0, 0, nil); if kevent(FNotifyHandle, @ke, 1, nil, 0, nil) = -1 then begin ShowError('ERROR: kevent()'); end; { if } end; { if } end; {$ELSE} begin end; {$ENDIF} // ---------------------------------------------------------------------------- { TOSWatch } constructor TOSWatch.Create(const aWatchPath: String {$IFDEF UNIX}; aNotifyHandle: THandle{$ENDIF}); begin FObservers := TOSWatchObservers.Create(True); FWatchFilter := []; FWatchPath := aWatchPath; {$IFDEF UNIX} FNotifyHandle := aNotifyHandle; {$ENDIF} {$IF DEFINED(MSWINDOWS)} FReferenceCount := 0; FBuffer := GetMem(VAR_READDIRECTORYCHANGESW_BUFFERSIZE); {$ENDIF} FHandle := feInvalidHandle; end; destructor TOSWatch.Destroy; begin DestroyHandle; inherited; {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Destroying watch ', hexStr(Self)]); {$ENDIF} FObservers.Free; {$IF DEFINED(MSWINDOWS)} Freemem(FBuffer); {$ENDIF} end; procedure TOSWatch.UpdateFilter; var i: Integer; NewFilter: TFSWatchFilter = []; begin for i := 0 to Observers.Count - 1 do NewFilter := NewFilter + Observers[i].WatchFilter; if FWatchFilter <> NewFilter then begin FWatchFilter := NewFilter; // Change watcher filter or recreate watcher. {$IF DEFINED(MSWINDOWS)} SetFilter(FWatchFilter); if FHandle = feInvalidHandle then CreateHandle else QueueCancelRead; // Will cancel and restart Read {$ELSE} DestroyHandle; CreateHandle; {$ENDIF} end; end; {$IF DEFINED(MSWINDOWS)} procedure TOSWatch.Reference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$IFDEF DEBUG_WATCHER} var CurrentRefCount: LongInt; {$ENDIF} begin {$IFDEF DEBUG_WATCHER} CurrentRefCount := {$ENDIF} System.InterlockedIncrement(FReferenceCount); {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Watch ', hexStr(Self), ' ++ref=', CurrentRefCount, ' ', s]); {$ENDIF} end; procedure TOSWatch.Dereference{$IFDEF DEBUG_WATCHER}(s: String){$ENDIF}; {$IFDEF DEBUG_WATCHER} var CurrentRefCount: LongInt; {$ENDIF} begin {$IFDEF DEBUG_WATCHER} CurrentRefCount := System.InterlockedDecrement(FReferenceCount); DCDebug(['FSWatcher: Watch ', hexStr(Self), ' --ref=', CurrentRefCount, ' ', s]); if CurrentRefCount = 0 then {$ELSE} if System.InterlockedDecrement(FReferenceCount) = 0 then {$ENDIF} Free; end; {$ENDIF} procedure TOSWatch.CreateHandle; {$IF DEFINED(MSWINDOWS)} begin FHandle := CreateFileW(PWideChar(UnicodeLongName(FWatchPath)), FILE_LIST_DIRECTORY, CREATEFILEW_SHAREMODE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0); if FHandle = INVALID_HANDLE_VALUE then begin FHandle := CreateFileW(PWideChar(UTF8Decode(FWatchPath)), FILE_LIST_DIRECTORY, CREATEFILEW_SHAREMODE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS or FILE_FLAG_OVERLAPPED, 0); end; if FHandle = INVALID_HANDLE_VALUE then begin FHandle := feInvalidHandle; ShowError('CreateFileW failed for ' + FWatchPath); end else begin FillChar(FOverlapped, SizeOf(FOverlapped), 0); // Pass pointer to watcher to the notify routine via hEvent member. FOverlapped.hEvent := Windows.HANDLE(Self); QueueRead; end; end; {$ELSEIF DEFINED(LINUX)} var hNotifyFilter: cuint32 = 0; begin if wfFileNameChange in FWatchFilter then hNotifyFilter := hNotifyFilter or IN_CREATE or IN_DELETE or IN_DELETE_SELF or IN_MOVE or IN_MOVE_SELF; if wfAttributesChange in FWatchFilter then hNotifyFilter := hNotifyFilter or IN_ATTRIB or IN_MODIFY; FHandle := fpinotify_add_watch(FNotifyHandle, FWatchPath, hNotifyFilter); if FHandle < 0 then begin FHandle := feInvalidHandle; ShowError('inotify_add_watch() failed for ' + FWatchPath); end; end; {$ELSEIF DEFINED(BSD)} var ke: TKEvent; hNotifyFilter: cuint = 0; begin if wfFileNameChange in FWatchFilter then hNotifyFilter := hNotifyFilter or NOTE_DELETE or NOTE_WRITE or NOTE_EXTEND or NOTE_RENAME; if wfAttributesChange in FWatchFilter then hNotifyFilter := hNotifyFilter or NOTE_ATTRIB or NOTE_REVOKE; FHandle := fpOpen(UTF8ToSys(FWatchPath), O_RDONLY); if FHandle < 0 then begin FHandle := feInvalidHandle; ShowError('failed to open file ' + FWatchPath); end else begin FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, FHandle, EVFILT_VNODE, EV_ADD or EV_CLEAR, hNotifyFilter, 0, Self); if kevent(FNotifyHandle, @ke, 1, nil, 0, nil) = -1 then begin DestroyHandle; ShowError('kevent failed'); end; { if } end; end; {$ELSE} begin FHandle := feInvalidHandle; end; {$ENDIF} procedure TOSWatch.DestroyHandle; {$IF DEFINED(MSWINDOWS)} var tmpHandle: THandle; {$ENDIF} begin if FHandle <> feInvalidHandle then begin {$IF DEFINED(LINUX)} fpinotify_rm_watch(FNotifyHandle, FHandle); {$ENDIF} {$IF DEFINED(BSD)} FpClose(FHandle); {$ENDIF} {$IF DEFINED(MSWINDOWS)} // If there are outstanding I/O operations on the handle calling CloseHandle // will fail those operations and cause completion routines to be called // but with ErrorCode = 0. Clearing FHandle before the call allows to know // that handle has been destroyed and to not schedule new Reads. {$IFDEF DEBUG_WATCHER} DCDebug(['FSWatcher: Watch ', hexStr(Self),' DestroyHandle ', Integer(FHandle), ' done']); {$ENDIF} tmpHandle := FHandle; FHandle := feInvalidHandle; CloseHandle(tmpHandle); {$ELSE} FHandle := feInvalidHandle; {$ENDIF} end; end; {$IF DEFINED(MSWINDOWS)} procedure TOSWatch.QueueCancelRead; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueCancelRead: Queueing Cancel APC'); {$ENDIF} Reference{$IFDEF DEBUG_WATCHER}('QueueCancelRead'){$ENDIF}; // For use by CancelReadChangesProc. QueueUserAPC(@CancelReadChangesProc, FileSystemWatcher.Handle, ULONG_PTR(Self)); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueCancelRead: Queueing Cancel APC done'); {$ENDIF} end; procedure TOSWatch.QueueRead; begin {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueRead: Queueing Read APC'); {$ENDIF} Reference{$IFDEF DEBUG_WATCHER}('QueueRead'){$ENDIF}; // For use by ReadChangesProc. QueueUserAPC(@ReadChangesProc, FileSystemWatcher.Handle, ULONG_PTR(Self)); {$IFDEF DEBUG_WATCHER} DCDebug('FSWatcher: QueueRead: Queueing Read APC done'); {$ENDIF} end; procedure TOSWatch.SetFilter(aWatchFilter: TFSWatchFilter); var // Use temp variable so that assigning FNotifyFilter is coherent. dwFilter: DWORD = 0; begin if wfFileNameChange in aWatchFilter then dwFilter := dwFilter or FILE_NOTIFY_CHANGE_FILE_NAME or FILE_NOTIFY_CHANGE_DIR_NAME; if wfAttributesChange in aWatchFilter then dwFilter := dwFilter or FILE_NOTIFY_CHANGE_ATTRIBUTES or FILE_NOTIFY_CHANGE_SIZE or FILE_NOTIFY_CHANGE_LAST_WRITE; FNotifyFilter := dwFilter; end; {$ENDIF} finalization TFileSystemWatcher.DestroyFileSystemWatcher; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/svn2revisioninc.cmd����������������������������������������������������0000755�0001750�0000144�00000000556�12650252770�020775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh export REVISION_INC=$1/dcrevision.inc rm -f $REVISION_INC cp ../units/dcrevision.inc $REVISION_INC export REVISION=$(svnversion ../ | sed -e 's/\([0-9]*\).*/\1/') if [ ! -z $REVISION ]; then echo "// Created by Svn2RevisionInc" > $REVISION_INC echo "const dcRevision = '$REVISION';" >> $REVISION_INC fi echo "Subversion revision" $REVISION ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/udrivewatcher.pas������������������������������������������������������0000644�0001750�0000144�00000106567�12646757161�020547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Enumerating and monitoring drives in the system. Copyright (C) 2006-2014 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.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 uDriveWatcher; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, LCLType, uDrive; type TDriveWatcherEvent = (dweDriveAdded, dweDriveRemoved, dweDriveChanged); TDriveWatcherEventNotify = procedure(EventType: TDriveWatcherEvent; const ADrive: PDrive) of object; TDriveWatcherObserverList = specialize TFPGList<TDriveWatcherEventNotify>; TDriveWatcher = class class procedure Initialize(Handle: HWND); class procedure Finalize; class procedure AddObserver(Func: TDriveWatcherEventNotify); class procedure RemoveObserver(Func: TDriveWatcherEventNotify); class function GetDrivesList: TDrivesList; end; implementation uses {$IFDEF UNIX} Unix, DCConvertEncoding, uMyUnix, uDebug {$IFDEF BSD} , BSD, BaseUnix, StrUtils, FileUtil {$ENDIF} {$IFDEF LINUX} , uUDisks, uUDev, uMountWatcher, DCStrUtils, uOSUtils, FileUtil {$ENDIF} {$ENDIF} {$IFDEF MSWINDOWS} uMyWindows, Windows, JwaDbt, LazUTF8 {$ENDIF} ; {$IFDEF LINUX} type { TFakeClass } TFakeClass = class public procedure OnMountWatcherNotify(Sender: TObject); procedure OnUDisksNotify(Reason: TUDisksMethod; const ObjectPath: String); end; {$ENDIF} {$IFDEF BSD} const {$warning Remove this two constants when they are added to FreePascal} NOTE_MOUNTED = $0008; NOTE_UMOUNTED = $0010; type TKQueueDriveEvent = procedure(Event: TDriveWatcherEvent); TKQueueDriveEventWatcher = class(TThread) private kq: Longint; Event: TDriveWatcherEvent; FErrorMsg: String; FOnError: TNotifyEvent; FOnDriveEvent: TKQueueDriveEvent; FFinished: Boolean; procedure RaiseErrorEvent; procedure RaiseDriveEvent; protected procedure Execute; override; procedure DoTerminate; override; public property ErrorMsg: String read FErrorMsg; property OnError: TNotifyEvent read FOnError write FOnError; property OnDriveEvent: TKQueueDriveEvent read FOnDriveEvent write FOnDriveEvent; constructor Create(); destructor Destroy; override; end; {$ENDIF} var FObservers: TDriveWatcherObserverList = nil; InitializeCounter: Integer = 0; {$IFDEF LINUX} FakeClass: TFakeClass = nil; MountWatcher: TMountWatcher = nil; IsUDisksAvailable: Boolean = False; {$ENDIF} {$IFDEF MSWINDOWS} OldWProc: WNDPROC; {$ENDIF} {$IFDEF BSD} KQueueDriveWatcher: TKQueueDriveEventWatcher; {$ENDIF} procedure DoDriveAdded(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveAdded, ADrive); end; procedure DoDriveRemoved(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveRemoved, ADrive); end; procedure DoDriveChanged(const ADrive: PDrive); var i: Integer; begin for i := 0 to FObservers.Count - 1 do FObservers[i](dweDriveChanged, ADrive); end; {$IFDEF MSWINDOWS} function MyWndProc(hWnd: HWND; uiMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var ADrive: TDrive; lpdb: PDEV_BROADCAST_HDR absolute lParam; lpdbv: PDEV_BROADCAST_VOLUME absolute lpdb; function GetDrivePath(UnitMask: ULONG): String; var DriveNum: Byte; begin for DriveNum:= 0 to 25 do begin if ((UnitMask shr DriveNum) and $01) <> 0 then Exit(AnsiChar(DriveNum + Ord('a')) + ':\'); end; end; begin case uiMsg of WM_DEVICECHANGE: case wParam of DBT_DEVICEARRIVAL: begin if (lpdb^.dbch_devicetype <> DBT_DEVTYP_VOLUME) then DoDriveAdded(nil) else begin ADrive.Path:= GetDrivePath(lpdbv^.dbcv_unitmask); DoDriveAdded(@ADrive); end; end; DBT_DEVICEREMOVECOMPLETE: begin if (lpdb^.dbch_devicetype <> DBT_DEVTYP_VOLUME) then DoDriveRemoved(nil) else begin ADrive.Path:= GetDrivePath(lpdbv^.dbcv_unitmask); DoDriveRemoved(@ADrive); end; end; end; end; // case Result := CallWindowProc(OldWProc, hWnd, uiMsg, wParam, lParam); end; procedure SetMyWndProc(Handle : HWND); begin {$PUSH}{$HINTS OFF} OldWProc := WNDPROC(SetWindowLongPtr(Handle, GWL_WNDPROC, LONG_PTR(@MyWndProc))); {$POP} end; {$ENDIF} {$IFDEF BSD} procedure KQueueDriveWatcher_OnDriveEvent(Event: TDriveWatcherEvent); begin case Event of dweDriveAdded: DoDriveAdded(nil); dweDriveRemoved: DoDriveRemoved(nil); end; { case } end; {$ENDIF} class procedure TDriveWatcher.Initialize(Handle: HWND); begin Inc(InitializeCounter); if InitializeCounter > 1 then // Already initialized. Exit; FObservers := TDriveWatcherObserverList.Create; {$IFDEF LINUX} FakeClass := TFakeClass.Create; if uUDisks.Initialize then begin IsUDisksAvailable := True; uUDisks.AddObserver(@FakeClass.OnUDisksNotify); end else begin if HasUdev then begin if uUDev.Initialize then uUDev.AddObserver(@FakeClass.OnUDisksNotify); end; DCDebug('Detecting mounts through /proc/self/mounts'); MountWatcher:= TMountWatcher.Create; MountWatcher.OnMountEvent:= @FakeClass.OnMountWatcherNotify; MountWatcher.Start; end; {$ENDIF} {$IFDEF MSWINDOWS} SetMyWndProc(Handle); {$ENDIF} {$IFDEF BSD} KQueueDriveWatcher := TKQueueDriveEventWatcher.Create(); KQueueDriveWatcher.OnDriveEvent := @KQueueDriveWatcher_OnDriveEvent; KQueueDriveWatcher.Start; {$ENDIF} end; class procedure TDriveWatcher.Finalize; begin Dec(InitializeCounter); if InitializeCounter <> 0 then // Don't finalize yet. Exit; {$IFDEF LINUX} if IsUDisksAvailable then begin uUDisks.RemoveObserver(@FakeClass.OnUDisksNotify); uUDisks.Finalize; IsUDisksAvailable := False; end else if HasUdev then begin uUDev.RemoveObserver(@FakeClass.OnUDisksNotify); uUDev.Finalize; end; FreeAndNil(MountWatcher); if Assigned(FakeClass) then FreeAndNil(FakeClass); {$ENDIF} {$IFDEF BSD} KQueueDriveWatcher.Terminate; FreeAndNil(KQueueDriveWatcher); {$ENDIF} if Assigned(FObservers) then FreeAndNil(FObservers); end; class procedure TDriveWatcher.AddObserver(Func: TDriveWatcherEventNotify); begin if FObservers.IndexOf(Func) < 0 then FObservers.Add(Func); end; class procedure TDriveWatcher.RemoveObserver(Func: TDriveWatcherEventNotify); begin FObservers.Remove(Func); end; {$IFDEF LINUX} function BeginsWithString(const patterns: array of string; const strings: array of string): Boolean; var i, j: Integer; begin for i := Low(strings) to High(strings) do begin for j := Low(patterns) to High(patterns) do if StrBegins(strings[i], patterns[j]) then Exit(True); end; Result := False; end; function IsPartOfString(const patterns: array of string; const str: string): Boolean; var I: Integer; begin for I := Low(patterns) to High(patterns) do if Pos(patterns[I], str) > 0 then Exit(True); Result := False; end; function UDisksGetDeviceInfo(const DeviceObjectPath: String; const Devices: TUDisksDevicesInfos; out DeviceInfo: TUDisksDeviceInfo): Boolean; var i: Integer; begin if Assigned(Devices) then begin for i := Low(Devices) to High(Devices) do begin if Devices[i].DeviceObjectPath = DeviceObjectPath then begin DeviceInfo := Devices[i]; Exit(True); end; end; Result := False; end else if IsUDisksAvailable then begin // Devices not supplied, retrieve info from UDisks. Result := uUDisks.GetDeviceInfo(DeviceObjectPath, DeviceInfo); end else begin // Devices not supplied, retrieve info from UDev. Result := uUDev.GetDeviceInfo(DeviceObjectPath, DeviceInfo); end; end; procedure UDisksDeviceToDrive(const Devices: TUDisksDevicesInfos; const DeviceInfo: TUDisksDeviceInfo; out Drive: PDrive); var OwnerDevice: TUDisksDeviceInfo; begin New(Drive); with DeviceInfo do begin Drive^.DeviceId := DeviceFile; Drive^.DisplayName := DevicePresentationName; if DeviceIsMounted and (Length(DeviceMountPaths) > 0) then begin Drive^.Path := DeviceMountPaths[0]; if Drive^.DisplayName = EmptyStr then begin if Drive^.Path <> PathDelim then Drive^.DisplayName := ExtractFileName(Drive^.Path) else Drive^.DisplayName := PathDelim; end; if Drive^.DisplayName = IdUuid then begin Drive^.DisplayName := ExtractFileName(DeviceFile); end; end else begin Drive^.Path := EmptyStr; if Drive^.DisplayName = EmptyStr then begin if (IdLabel <> EmptyStr) then Drive^.DisplayName := IdLabel else Drive^.DisplayName := ExtractFileName(DeviceFile); end; end; Drive^.DriveLabel := IdLabel; Drive^.FileSystem := IdType; if DeviceIsPartition then begin if UDisksGetDeviceInfo(PartitionSlave, Devices, OwnerDevice) and OwnerDevice.DeviceIsRemovable then begin // Removable partition usually means pen-drive type. if BeginsWithString(['usb'], OwnerDevice.DriveConnectionInterface) then Drive^.DriveType := dtRemovableUsb else Drive^.DriveType := dtRemovable; end else Drive^.DriveType := dtHardDisk; end else if DeviceIsDrive then begin if BeginsWithString(['flash'], DriveMediaCompatibility) then Drive^.DriveType := dtFlash else if BeginsWithString(['floppy'], DriveMediaCompatibility) then Drive^.DriveType := dtFloppy else if BeginsWithString(['optical'], DriveMediaCompatibility) then Drive^.DriveType := dtOptical else if BeginsWithString(['usb'], DriveConnectionInterface) then Drive^.DriveType := dtRemovableUsb else Drive^.DriveType := dtUnknown; end else if DeviceIsSystemInternal then Drive^.DriveType := dtHardDisk else Drive^.DriveType := dtUnknown; Drive^.IsMediaAvailable := DeviceIsMediaAvailable; Drive^.IsMediaEjectable := DeviceIsDrive and DriveIsMediaEjectable; Drive^.IsMediaRemovable := DeviceIsRemovable; Drive^.IsMounted := DeviceIsMounted; Drive^.AutoMount := (DeviceAutomountHint = EmptyStr) or (DeviceAutomountHint = 'always'); end; end; {$ENDIF} class function TDriveWatcher.GetDrivesList: TDrivesList; {$IF DEFINED(MSWINDOWS)} var Drive : PDrive; DriveNum: Integer; DriveBits: DWORD; WinDriveType: UINT; DriveLetter: AnsiChar; DrivePath: String; Key: HKEY; RegDrivePath: UnicodeString; NetworkPath: array[0..Pred(MAX_PATH)] of WideChar; NetworkPathSize: DWORD; begin Result := TDrivesList.Create; { fill list } DWORD(DriveBits) := GetLogicalDrives; for DriveNum := 0 to 25 do begin if ((DriveBits shr DriveNum) and $1) = 0 then begin // Try to find in mapped network drives DriveLetter := AnsiChar(DriveNum + Ord('a')); RegDrivePath := 'Network' + PathDelim + DriveLetter; if RegOpenKeyExW(HKEY_CURRENT_USER, PWideChar(RegDrivePath), 0, KEY_READ, Key) = ERROR_SUCCESS then begin NetworkPathSize := MAX_PATH * SizeOf(WideChar); if RegQueryValueExW(Key, 'RemotePath', nil, nil, @NetworkPath, @NetworkPathSize) = ERROR_SUCCESS then begin New(Drive); Result.Add(Drive); FillChar(Drive^, SizeOf(TDrive), #0); with Drive^ do begin Path := DriveLetter + ':\'; DisplayName := DriveLetter; DriveLabel := UTF16ToUTF8(UnicodeString(NetworkPath)); DriveType := dtNetwork; AutoMount := True; end; end; RegCloseKey(Key); end; Continue; end; DriveLetter := AnsiChar(DriveNum + Ord('a')); DrivePath := DriveLetter + ':\'; WinDriveType := GetDriveType(PChar(DrivePath)); if WinDriveType = DRIVE_NO_ROOT_DIR then Continue; New(Drive); Result.Add(Drive); with Drive^ do begin DeviceId := EmptyStr; Path := DrivePath; DisplayName := DriveLetter; DriveLabel := EmptyStr; FileSystem := EmptyStr; IsMediaAvailable := True; IsMediaEjectable := False; IsMediaRemovable := False; IsMounted := True; AutoMount := True; case WinDriveType of DRIVE_REMOVABLE: begin if DriveLetter in ['a', 'b'] then DriveType := dtFloppy else DriveType := dtFlash; IsMediaEjectable := True; IsMediaRemovable := True; end; DRIVE_FIXED: DriveType := dtHardDisk; DRIVE_REMOTE: DriveType := dtNetwork; DRIVE_CDROM: begin DriveType := dtOptical; IsMediaEjectable := True; IsMediaRemovable := True; end; DRIVE_RAMDISK: DriveType := dtRamDisk; else DriveType := dtUnknown; end; if IsMediaAvailable then begin case DriveType of dtFloppy: ; // Don't retrieve, it's slow. dtHardDisk: begin DriveLabel := mbGetVolumeLabel(Path, True); FileSystem := mbGetFileSystem(DrivePath); end; dtNetwork: DriveLabel := mbGetRemoteFileName(Path); else DriveLabel := mbGetVolumeLabel(Path, True); end; end; end; end; end; {$ELSEIF DEFINED(LINUX)} function CheckMountEntry(MountEntry: PMountEntry): Boolean; begin Result:= False; with MountEntry^ do begin // check filesystem if (mnt_fsname = 'proc') then Exit; // check mount dir if (mnt_dir = '') or (mnt_dir = '/') or (mnt_dir = 'none') or (mnt_dir = '/proc') or (StrBegins(mnt_dir, '/dev/')) or (StrBegins(mnt_dir, '/sys/')) or (StrBegins(mnt_dir, '/proc/')) then Exit; // check file system type if (mnt_type = 'ignore') or (mnt_type = 'none') or (mnt_type = 'cgroup') or (mnt_type = 'cpuset') or (mnt_type = 'tmpfs') or (mnt_type = 'proc') or (mnt_type = 'swap') or (mnt_type = 'sysfs') or (mnt_type = 'debugfs') or (mnt_type = 'devtmpfs') or (mnt_type = 'devpts') or (mnt_type = 'fusectl') or (mnt_type = 'securityfs') or (mnt_type = 'binfmt_misc') or (mnt_type = 'fuse.gvfs-fuse-daemon') or (mnt_type = 'fuse.truecrypt') or (mnt_type = 'nfsd') or (mnt_type = 'usbfs') or (mnt_type = 'mqueue') or (mnt_type = 'configfs') or (mnt_type = 'hugetlbfs') or (mnt_type = 'selinuxfs') or (mnt_type = 'rpc_pipefs') then Exit; end; Result:= True; end; function UDisksGetDeviceObjectByUUID(const UUID: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].IdUuid = UUID then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; function UDisksGetDeviceObjectByLabel(const DriveLabel: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].IdLabel = DriveLabel then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; function UDisksGetDeviceObjectByDeviceFile(const DeviceFile: String; const Devices: TUDisksDevicesInfos): String; var i: Integer; begin for i := Low(Devices) to High(Devices) do if Devices[i].DeviceFile = DeviceFile then Exit(Devices[i].DeviceObjectPath); Result := EmptyStr; end; var AddedDevices: TStringList = nil; AddedMountPoints: TStringList = nil; HaveUDisksDevices: Boolean = False; function CheckDevice(const Device: String): Boolean; begin // If UDisks is available name=value pair should have been handled, // so we are free to check the device name. Otherwise don't check it // if it is a known name=value pair. Result := HaveUDisksDevices or not (StrBegins(Device, 'UUID=') or StrBegins(Device, 'LABEL=')); end; // Checks if device on some mount point hasn't been added yet. function CanAddDevice(const Device, MountPoint: String): Boolean; var Idx: Integer; begin Idx := AddedMountPoints.IndexOf(MountPoint); Result := (Idx < 0) or (CheckDevice(Device) and CheckDevice(AddedDevices[Idx]) and (AddedDevices[Idx] <> Device)); end; function GetDrive(const DrivesList: TDrivesList; const Device, MountPoint: String): PDrive; var i: Integer; begin for i := 0 to DrivesList.Count - 1 do begin // If UDisks not available only check mount points. if (DrivesList[i]^.Path = MountPoint) and (not CheckDevice(Device) or not CheckDevice(DrivesList[i]^.DeviceId) or (DrivesList[i]^.DeviceId = Device)) then Exit(DrivesList[i]); end; Result := nil; end; function GetStrMaybeQuoted(const s: string): string; var i: Integer; begin Result := ''; if Length(s) > 0 then begin if s[1] in ['"', ''''] then begin for i := Length(s) downto 2 do begin if s[i] = s[1] then Exit(Copy(s, 2, i-2)); end; end else Result := s; end; end; function IsDeviceMountedAtRoot(const UDisksDevice: TUDisksDeviceInfo): Boolean; var i: Integer; begin if UDisksDevice.DeviceIsMounted then begin for i := Low(UDisksDevice.DeviceMountPaths) to High(UDisksDevice.DeviceMountPaths) do if UDisksDevice.DeviceMountPaths[i] = PathDelim then Exit(True); end; Result := False; end; function UDisksGetDevice(const UDisksDevices: TUDisksDevicesInfos; var DeviceFile: String; out UDisksDeviceObject: String): Boolean; begin // Handle "/dev/", "UUID=" and "LABEL=" through UDisks if available. if StrBegins(DeviceFile, 'UUID=') then begin UDisksDeviceObject := UDisksGetDeviceObjectByUUID( GetStrMaybeQuoted(Copy(DeviceFile, 6, MaxInt)), UDisksDevices); if UDisksDeviceObject <> EmptyStr then DeviceFile := '/dev/' + ExtractFileName(UDisksDeviceObject); Result := True; end else if StrBegins(DeviceFile, 'LABEL=') then begin UDisksDeviceObject := UDisksGetDeviceObjectByLabel( GetStrMaybeQuoted(Copy(DeviceFile, 7, MaxInt)), UDisksDevices); if UDisksDeviceObject <> EmptyStr then DeviceFile := '/dev/' + ExtractFileName(UDisksDeviceObject); Result := True; end else if StrBegins(DeviceFile, '/dev/') then begin DeviceFile := mbCheckReadLinks(DeviceFile); if StrBegins(DeviceFile, '/dev/') and IsUDisksAvailable then UDisksDeviceObject := DeviceFileToUDisksObjectPath(DeviceFile) else UDisksDeviceObject := UDisksGetDeviceObjectByDeviceFile(DeviceFile, UDisksDevices); Result := True; end else Result := False; end; const MntEntFileList: array[1..2] of PChar = (_PATH_MOUNTED, _PATH_FSTAB); var Drive : PDrive = nil; ExistingDrive : PDrive; fstab: PIOFile; pme: PMountEntry; I: Integer; UDisksDevices: TUDisksDevicesInfos; UDisksDevice: TUDisksDeviceInfo; UDisksDeviceObject: String; DeviceFile: String; MountPoint: String; HandledByUDisks: Boolean = False; begin Result := TDrivesList.Create; try AddedDevices := TStringList.Create; AddedMountPoints := TStringList.Create; if IsUDisksAvailable then HaveUDisksDevices := uUDisks.EnumerateDevices(UDisksDevices) else if HasUdev then HaveUDisksDevices := uUDev.EnumerateDevices(UDisksDevices); // Storage devices have to be in mtab or fstab and reported by UDisks. for I:= Low(MntEntFileList) to High(MntEntFileList) do begin fstab:= setmntent(MntEntFileList[I],'r'); if not Assigned(fstab) then Continue; pme:= getmntent(fstab); while (pme <> nil) do begin if CheckMountEntry(pme) then begin DeviceFile := StrPas(pme^.mnt_fsname); MountPoint := CeSysToUtf8(StrPas(pme^.mnt_dir)); if MountPoint <> PathDelim then MountPoint := ExcludeTrailingPathDelimiter(MountPoint); if HaveUDisksDevices then begin HandledByUDisks := UDisksGetDevice(UDisksDevices, DeviceFile, UDisksDeviceObject); if HandledByUDisks then begin if CanAddDevice(DeviceFile, MountPoint) and UDisksGetDeviceInfo(UDisksDeviceObject, UDisksDevices, UDisksDevice) then begin if not UDisksDevice.DevicePresentationHide then begin if (IsUDisksAvailable = False) then begin UDisksDevice.DeviceIsMounted:= (I = 1); AddString(UDisksDevice.DeviceMountPaths, MountPoint); end; UDisksDeviceToDrive(UDisksDevices, UDisksDevice, Drive); end; end // Even if mounted device is not listed by UDisks add it anyway the standard way. else if I = 1 then // MntEntFileList[1] = _PATH_MOUNTED HandledByUDisks := False; // Else don't add the device if it's not listed by UDisks. end; end; // Add by entry in fstab/mtab. if not HandledByUDisks then begin DeviceFile := mbCheckReadLinks(DeviceFile); if CanAddDevice(DeviceFile, MountPoint) then begin New(Drive); with Drive^ do begin DeviceId := DeviceFile; Path := MountPoint; if MountPoint <> PathDelim then DisplayName := ExtractFileName(Path) else DisplayName := PathDelim; DriveLabel := Path; FileSystem := StrPas(pme^.mnt_type); if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD', 'UDF'], UpperCase(FileSystem)) then // for external usb cdrom and dvd DriveType := dtOptical else if IsPartOfString(['ISO9660', 'CDROM', 'CDRW', 'DVD'], UpperCase(DeviceFile)) then DriveType := dtOptical else if IsPartOfString(['FLOPPY'], UpperCase(FileSystem)) then DriveType := dtFloppy else if IsPartOfString(['FLOPPY', '/DEV/FD'], UpperCase(DeviceFile)) then DriveType := dtFloppy else if IsPartOfString(['ZIP', 'USB', 'CAMERA'], UpperCase(FileSystem)) then DriveType := dtFlash else if IsPartOfString(['/MEDIA/'], UpperCase(MountPoint)) then DriveType := dtFlash else if IsPartOfString(['NFS', 'SMB', 'NETW', 'CIFS'], UpperCase(FileSystem)) then DriveType := dtNetwork else DriveType := dtHardDisk; IsMediaAvailable:= True; IsMediaEjectable:= (DriveType = dtOptical); IsMediaRemovable:= DriveType in [dtFloppy, dtOptical, dtFlash]; // If drive from /etc/mtab then it is mounted IsMounted:= (MntEntFileList[I] = _PATH_MOUNTED); AutoMount:= True; end; end; end; // If drive object has been created add it to the list. if Assigned(Drive) then begin Result.Add(Drive); Drive := nil; AddedDevices.Add(DeviceFile); AddedMountPoints.Add(MountPoint); {$IFDEF DEBUG} DCDebug('Adding drive "' + DeviceFile + '" with mount point "' + MountPoint + '"'); {$ENDIF} end; end // Add root drive in added list to skip it later else if HasUdev and (pme^.mnt_dir = PathDelim) then begin DeviceFile := StrPas(pme^.mnt_fsname); UDisksGetDevice(UDisksDevices, DeviceFile, UDisksDeviceObject); AddedDevices.Add(DeviceFile); AddedMountPoints.Add(PathDelim); end; pme:= getmntent(fstab); end; endmntent(fstab); end; if HaveUDisksDevices then begin for i := Low(UDisksDevices) to High(UDisksDevices) do begin // Add drives not having a partition table which are usually devices // with removable media like CDROM, floppy - they can be mounted. // Don't add drives with partition table because they cannot be mounted. // Don't add drives with ram and loop device because they cannot be mounted. // Add devices reported as "filesystem". if ((UDisksDevices[i].DeviceIsDrive and (not UDisksDevices[i].DeviceIsPartitionTable) and (UDisksDevices[i].IdType <> 'swap')) or (UDisksDevices[i].IdUsage = 'filesystem')) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/ram') = False) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/zram') = False) and (StrBegins(UDisksDevices[i].DeviceFile, '/dev/loop') = False) and (not UDisksDevices[i].DevicePresentationHide) then begin if (AddedDevices.IndexOf(UDisksDevices[i].DeviceFile) < 0) and (not IsDeviceMountedAtRoot(UDisksDevices[i])) then begin UDisksDeviceToDrive(UDisksDevices, UDisksDevices[i], Drive); Result.Add(Drive); Drive := nil; AddedDevices.Add(UDisksDevices[i].DeviceFile); AddedMountPoints.Add(EmptyStr); {$IFDEF DEBUG} DCDebug('Adding UDisks drive "' + UDisksDevices[i].DeviceFile + '"'); {$ENDIF} end; end; end; end; finally if Assigned(AddedDevices) then AddedDevices.Free; if Assigned(AddedMountPoints) then AddedMountPoints.Free; if Assigned(Drive) then Dispose(Drive); end; end; {$ELSEIF DEFINED(BSD)} function GetDriveTypeFromDeviceOrFSType(const DeviceId, FSType: String): TDriveType; begin // using filesystem type if FSType = 'swap' then Result := dtUnknown else if FSType = 'zfs' then Result := dtHardDisk else if FSType = 'nfs' then Result := dtNetwork else if FSType = 'smbfs' then Result := dtNetwork else if FSType = 'cifs' then Result := dtNetwork {$IF DEFINED(DARWIN)} else if FSType = 'hfs' then Result := dtHardDisk else if FSType = 'ntfs' then Result := dtHardDisk else if FSType = 'msdos' then Result := dtHardDisk else if FSType = 'exfat' then Result := dtHardDisk else if FSType = 'ufsd_NTFS' then Result := dtHardDisk else if FSType = 'fusefs_txantfs' then Result := dtHardDisk else if FSType = 'udf' then Result := dtOptical else if FSType = 'cd9660' then Result := dtOptical else if FSType = 'cddafs' then Result := dtOptical else if FSType = 'afpfs' then Result := dtNetwork else if FSType = 'webdav' then Result := dtNetwork {$ENDIF} // using device name else if AnsiStartsStr('/dev/ad', DeviceId) then Result := dtHardDisk else if AnsiStartsStr('/dev/acd', DeviceId) then Result := dtOptical // CD-ROM (IDE) else if AnsiStartsStr('/dev/da', DeviceId) then Result := dtFlash // USB else if AnsiStartsStr('/dev/cd', DeviceId) then Result := dtOptical // CD-ROM (SCSI) else if AnsiStartsStr('/dev/mcd', DeviceId) then Result := dtOptical // CD-ROM (other) else if AnsiStartsStr('/dev/fd', DeviceId) then Result := dtFloppy else if AnsiStartsStr('/dev/sa', DeviceId) then Result := dtUnknown // Tape (SCSI) else if AnsiStartsStr('/dev/ast', DeviceId) then Result := dtUnknown // Tape (IDE) else if AnsiStartsStr('/dev/fla', DeviceId) then Result := dtHardDisk // Flash drive else if AnsiStartsStr('/dev/aacd', DeviceId) or AnsiStartsStr('/dev/mlxd', DeviceId) or AnsiStartsStr('/dev/mlyd', DeviceId) or AnsiStartsStr('/dev/amrd', DeviceId) or AnsiStartsStr('/dev/idad', DeviceId) or AnsiStartsStr('/dev/idad', DeviceId) or AnsiStartsStr('/dev/twed', DeviceId) then Result := dtHardDisk else Result := dtUnknown; // devfs, nullfs, procfs, etc. end; const MAX_FS = 128; var drive: PDrive; fstab: PFSTab; fs: TStatFS; fsList: array[0..MAX_FS] of TStatFS; iMounted, iAdded, count: Integer; found: boolean; dtype: TDriveType; begin Result := TDrivesList.Create; fstab := getfsent(); while fstab <> nil do begin dtype := GetDriveTypeFromDeviceOrFSType(fstab^.fs_spec, fstab^.fs_vfstype); // only add known drive types and skip root directory if (dtype = dtUnknown) or (fstab^.fs_file = PathDelim) then begin fstab := getfsent(); Continue; end; { if } New(drive); Result.Add(drive); with drive^ do begin Path := CeSysToUtf8(fstab^.fs_file); DisplayName := ExtractFileName(Path); DriveLabel := Path; FileSystem := fstab^.fs_vfstype; DeviceId := fstab^.fs_spec; DriveType := dtype; IsMediaAvailable := false; IsMediaEjectable := false; IsMediaRemovable := false; IsMounted := false; AutoMount := true; end; { with } fstab := getfsent(); end; { while } endfsent(); count := getfsstat(@fsList, SizeOf(fsList), MNT_WAIT); for iMounted := 0 to count - 1 do begin fs := fsList[iMounted]; // check if already added using fstab found := false; for iAdded := 0 to Result.Count - 1 do begin if Result[iAdded]^.Path = fs.mountpoint then begin drive := Result[iAdded]; with drive^ do begin IsMounted := true; IsMediaAvailable := true; end; found := true; break; end; { if } end; { for } if found then continue; dtype := GetDriveTypeFromDeviceOrFSType( {$IF DEFINED(DARWIN)} fs.mntfromname {$ELSE} fs.mnfromname {$ENDIF}, fs.fstypename ); // only add known drive types and skip root directory if (dtype = dtUnknown) or (fs.mountpoint = PathDelim) then Continue; New(drive); Result.Add(drive); with drive^ do begin Path := CeSysToUtf8(fs.mountpoint); DisplayName := ExtractFileName(Path); DriveLabel := Path; FileSystem := fs.fstypename; DeviceId := {$IF DEFINED(DARWIN)}fs.mntfromname{$ELSE}fs.mnfromname{$ENDIF}; DriveType := dtype; IsMediaAvailable := true; IsMediaEjectable := false; IsMediaRemovable := false; IsMounted := true; AutoMount := true; end; { with } end; { for } end; {$ELSE} begin Result := TDrivesList.Create; end; {$ENDIF} {$IFDEF LINUX} procedure TFakeClass.OnMountWatcherNotify(Sender: TObject); var ADrive: PDrive = nil; begin DoDriveChanged(ADrive); end; procedure TFakeClass.OnUDisksNotify(Reason: TUDisksMethod; const ObjectPath: String); var Result: Boolean; ADrive: PDrive = nil; DeviceInfo: TUDisksDeviceInfo; begin if IsUDisksAvailable = False then Result:= uUDev.GetDeviceInfo(ObjectPath, DeviceInfo) else Result:= uUDisks.GetDeviceInfo(ObjectPath, DeviceInfo); if Result then UDisksDeviceToDrive(nil, DeviceInfo, ADrive); try case Reason of UDisks_DeviceAdded: DoDriveAdded(ADrive); UDisks_DeviceRemoved: DoDriveRemoved(ADrive); UDisks_DeviceChanged: DoDriveChanged(ADrive); end; finally if Assigned(ADrive) then Dispose(ADrive); end; end; {$ENDIF} {$IFDEF BSD} { TKQueueDriveEventWatcher } procedure TKQueueDriveEventWatcher.RaiseErrorEvent; begin DCDebug(Self.ErrorMsg); if Assigned(Self.FOnError) then Self.FOnError(Self); end; procedure TKQueueDriveEventWatcher.RaiseDriveEvent; begin if Assigned(Self.FOnDriveEvent) then Self.FOnDriveEvent(Self.Event); end; procedure TKQueueDriveEventWatcher.Execute; const KQUEUE_ERROR = -1; var ke: TKEvent; begin try Self.kq := kqueue(); if Self.kq = KQUEUE_ERROR then begin Self.FErrorMsg := 'ERROR: kqueue()'; Synchronize(@Self.RaiseErrorEvent); exit; end; { if } try FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 1, EVFILT_FS, EV_ADD, 0, 0, nil); if kevent(kq, @ke, 1, nil, 0, nil) = KQUEUE_ERROR then begin Self.FErrorMsg := 'ERROR: kevent()'; Synchronize(@Self.RaiseErrorEvent); exit; end; { if } while not Terminated do begin FillByte(ke, SizeOf(ke), 0); if kevent(kq, nil, 0, @ke, 1, nil) = KQUEUE_ERROR then break; case ke.Filter of EVFILT_TIMER: // user triggered continue; EVFILT_FS: begin if (ke.FFlags and NOTE_MOUNTED <> 0) then begin Self.Event := dweDriveAdded; {$IFDEF DARWIN} Sleep(1 * 1000); // wait so drive gets available in MacOSX {$ENDIF} Synchronize(@Self.RaiseDriveEvent); end { if } else if (ke.FFlags and NOTE_UMOUNTED <> 0) then begin Self.Event := dweDriveRemoved; {$IFDEF DARWIN} Sleep(1 * 1000); // wait so drive disappears in MacOSX {$ENDIF} Synchronize(@Self.RaiseDriveEvent); end; { else if } end; end; { case } end; { while } finally FpClose(Self.kq); end; { try - finally } finally FFinished := True; end; { try - finally } end; procedure TKQueueDriveEventWatcher.DoTerminate; var ke: TKEvent; begin inherited DoTerminate; if Self.kq = -1 then Exit; FillByte(ke, SizeOf(ke), 0); EV_SET(@ke, 0, EVFILT_TIMER, EV_ADD or EV_ONESHOT, 0, 0, nil); kevent(Self.kq, @ke, 1, nil, 0, nil); end; constructor TKQueueDriveEventWatcher.Create(); begin Self.FreeOnTerminate := true; Self.FFinished := false; inherited Create(true); end; destructor TKQueueDriveEventWatcher.Destroy; begin if not Terminated then begin Self.Terminate; {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not FFinished do CheckSynchronize(100); {$ENDIF} WaitFor; end; { if } end; {$ENDIF} end. �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uuniqueinstance.pas����������������������������������������������������0000644�0001750�0000144�00000026105�12653456217�021074� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uUniqueInstance; {$mode objfpc}{$H+} interface uses Classes, SysUtils, SimpleIPC, uCmdLineParams, SynRegExpr; type TOnUniqueInstanceMessage = procedure (Sender: TObject; Params: TCommandLineParams) of object; { TUniqueInstance } TUniqueInstance = class private FHandle: THandle; FInstanceName: String; FServerIPC: TSimpleIPCServer; FClientIPC: TSimpleIPCClient; FOnMessage: TOnUniqueInstanceMessage; FServernameByUser: String; {$IF DEFINED(UNIX)} FMyProgramCreateSemaphore:Boolean; {$ENDIF} procedure OnNative(Sender: TObject); procedure CreateServer; procedure CreateClient; function IsRunning: Boolean; procedure DisposeMutex; public constructor Create(aInstanceName: String; aServernameByUser: String); destructor Destroy; override; function IsRunInstance: Boolean; procedure SendParams; procedure RunListen; procedure StopListen; function isAnotherDCRunningWhileIamRunning:boolean; property OnMessage: TOnUniqueInstanceMessage read FOnMessage write FOnMessage; property ServernameByUser: String read FServernameByUser; end; procedure InitInstance; procedure InitInstanceWithName(aInstanceName: String; aServernameByUser: String); function IsUniqueInstance: Boolean; function WantsToBeClient: Boolean; {en Returns @true if current application instance is allowed to run. Returns @false if current instance should not be run. } function IsInstanceAllowed: Boolean; var UniqueInstance: TUniqueInstance = nil; FIsUniqueInstance: Boolean = False; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, {$ELSEIF DEFINED(UNIX)} ipc, baseunix, uPipeServer, {$ENDIF} Forms, StrUtils, FileUtil, uGlobs, uDebug; {$IF DEFINED(DARWIN)} const SEM_GETVAL = 5; // Return the value of semval (READ) SEM_SETVAL = 8; // Set the value of semval to arg.val (ALTER) {$ENDIF} { TUniqueInstance } procedure TUniqueInstance.OnNative(Sender: TObject); var Params: TCommandLineParams; begin if Assigned(FOnMessage) then begin FServerIPC.MsgData.Seek(0, soFromBeginning); FServerIPC.MsgData.ReadBuffer(Params, FServerIPC.MsgType); FOnMessage(Self, Params); end; end; procedure TUniqueInstance.CreateServer; begin if FServerIPC = nil then begin FServerIPC:= TSimpleIPCServer.Create(nil); FServerIPC.OnMessage:= @OnNative; end; if FClientIPC <> nil then FreeAndNil(FClientIPC); end; procedure TUniqueInstance.CreateClient; begin if FClientIPC = nil then FClientIPC:= TSimpleIPCClient.Create(nil); end; function TUniqueInstance.IsRunning: Boolean; {$IF DEFINED(MSWINDOWS)} var MutexName: AnsiString; begin Result:= False; MutexName:= ExtractFileName(ParamStr(0)); FHandle:= OpenMutex(MUTEX_MODIFY_STATE, False, PAnsiChar(MutexName)); if FHandle = 0 then FHandle:= CreateMutex(nil, True, PAnsiChar(MutexName)) else begin if WaitForSingleObject(FHandle, 0) <> WAIT_ABANDONED then Result:= True; end; end; {$ELSEIF DEFINED(UNIX)} const SEM_PERM = 6 shl 6 { 0600 }; var semkey: TKey; status: longint = 0; arg: tsemun; function id: byte; var UserID: LongRec; begin Result := 0; UserID := LongRec(fpGetUID); Result := Result xor UserID.Bytes[0]; Result := Result xor UserID.Bytes[1]; Result := Result xor UserID.Bytes[2]; Result := Result xor UserID.Bytes[3]; end; function semlock(semid: longint): boolean; // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) var p_buf: tsembuf; begin p_buf.sem_num := 0; p_buf.sem_op := 1; p_buf.sem_flg := SEM_UNDO; Result:= semop(semid, @p_buf, 1) = 0; end; begin Result := False; semkey := ftok(PAnsiChar(ParamStr(0)), id); // try create semapore for semkey // If semflg specifies both IPC_CREAT and IPC_EXCL and a semaphore set already // exists for semkey, then semget() return -1 and errno set to EEXIST FHandle := semget(semkey, 1, SEM_PERM or IPC_CREAT or IPC_EXCL); // if semaphore exists if FHandle = -1 then begin // get semaphore id FHandle := semget(semkey, 1, 0); // get special Value from semaphore structure status := semctl(FHandle, 0, SEM_GETVAL, arg); if status = 1 then // There is other running copy of the program begin Result := True; // Not to release semaphore when exiting from the program FMyProgramCreateSemaphore := false; end else begin // Other copy of the program has created a semaphore but has been completed incorrectly // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) semlock(FHandle); // its one copy of program running, release semaphore when exiting from the program FMyProgramCreateSemaphore := true; end; end else begin // its one copy of program running, release semaphore when exiting from the program FMyProgramCreateSemaphore := true; // set special Value in semaphore structure to 0 arg.val := 0; status := semctl(FHandle, 0, SEM_SETVAL, arg); // increase special Value in semaphore structure (value decreases automatically // when program completed incorrectly) semlock(FHandle); end; end; {$ENDIF} procedure TUniqueInstance.DisposeMutex; {$IF DEFINED(MSWINDOWS)} begin ReleaseMutex(FHandle); end; {$ELSEIF DEFINED(UNIX)} var arg: tsemun; begin // If my copy of the program created a semaphore then released it if FMyProgramCreateSemaphore then semctl(FHandle, 0, IPC_RMID, arg); end; {$ENDIF} function TUniqueInstance.IsRunInstance: Boolean; begin CreateClient; FClientIPC.ServerID:= FInstanceName; Result:= IsRunning and FClientIPC.ServerRunning; end; procedure TUniqueInstance.SendParams; var Stream: TMemoryStream = nil; begin CreateClient; FClientIPC.ServerID:= FInstanceName; if not FClientIPC.ServerRunning then Exit; Stream:= TMemoryStream.Create; Stream.WriteBuffer(CommandLineParams, SizeOf(TCommandLineParams)); try FClientIPC.Connect; Stream.Seek(0, soFromBeginning); FClientIPC.SendMessage(SizeOf(TCommandLineParams), Stream); finally Stream.Free; FClientIPC.Disconnect; end; end; procedure TUniqueInstance.RunListen; begin CreateServer; FServerIPC.ServerID:= FInstanceName; FServerIPC.Global:= True; FServerIPC.StartServer; end; procedure TUniqueInstance.StopListen; begin DisposeMutex; if FServerIPC = nil then Exit; FServerIPC.StopServer; end; function TUniqueInstance.isAnotherDCRunningWhileIamRunning:boolean; var LocalClientIPC: TSimpleIPCClient; IndexInstance:integer; function GetServerIdNameToCheck:string; begin result:=ApplicationName+'-'; if IndexInstance>1 then result:=result+IntToStr(IndexInstance); {$IF DEFINED(UNIX)} result := result + '-' + IntToStr(fpGetUID); {$ENDIF} end; begin Result:=True; if IsRunning then begin FServerIPC.Active:=False; try LocalClientIPC:=TSimpleIPCClient.Create(nil); IndexInstance:=1; Result:=FALSE; repeat LocalClientIPC.ServerID:=GetServerIdNameToCheck; Result:=LocalClientIPC.ServerRunning; inc(IndexInstance); until Result OR (IndexInstance>=10); finally FServerIPC.Active:=True; end; end; end; constructor TUniqueInstance.Create(aInstanceName: String; aServernameByUser: String); begin FServernameByUser := aServernameByUser; FInstanceName:= aInstanceName + '-' + FServernameByUser; {$IF DEFINED(UNIX)} FInstanceName+= '-' + IntToStr(fpGetUID); {$ENDIF} end; destructor TUniqueInstance.Destroy; begin if Assigned(FClientIPC) then FreeAndNil(FClientIPC); if Assigned(FServerIPC) then FreeAndNil(FServerIPC); inherited Destroy; end; {en Initializes instance with given name (currently this is ApplicationName), and user-provided servername (typically, an empty string). If there is no already existing instance, then create it. If there is already existing instance, and the current one is a client, then send params to the server (i.e. to the existing instance) If there is already existing instance, and the current one is not a client, (i.e. gOnlyOneAppInstance is false and no --client/-c options were given), then user-provided servername is altered: firstly, just add a trailing number '2'. If there is already some trailing number, then increase it by 1, until we found a servername that isn't busy yet, and then create instance with this servername. } procedure InitInstanceWithName(aInstanceName: String; aServernameByUser: String); {en If a given servername doesn't contain a trailing number, then add a trailing number '2'; otherwise increase existing number and return resulting string. } function GetNextServername(CurServername: String): String; var SNameRegExp: TRegExpr; CurNumber: Integer; begin SNameRegExp := TRegExpr.Create(); try SNameRegExp.Expression := '(\d+)$'; if SNameRegExp.Exec(CurServername) then begin //-- there is existing trailing number, so, increase it by 1 CurNumber := StrToInt(SNameRegExp.Match[1]) + 1; Result := ReplaceRegExpr(SNameRegExp.Expression, CurServername, IntToStr(CurNumber), False); end else //-- there is no trailing number, so, add a trailing number '2' Result := CurServername + '2'; finally SNameRegExp.Free; end; end; begin FIsUniqueInstance := True; //-- determine if the instance with the same name already exists UniqueInstance := TUniqueInstance.Create(aInstanceName, aServernameByUser); if UniqueInstance.IsRunInstance then //-- it does exist, so, set flag that instance is not unique FIsUniqueInstance := False; //-- if instance is allowed (i.e. is not a client), then find unique // servername if IsInstanceAllowed then begin while UniqueInstance.IsRunInstance do begin UniqueInstance.Free; aServernameByUser := GetNextServername(aServernameByUser); UniqueInstance := TUniqueInstance.Create(aInstanceName, aServernameByUser); end; //-- unique servername is found, so, run it as a server and set // FIsUniqueInstance flag UniqueInstance.RunListen; FIsUniqueInstance := True end else //-- if this instance is not allowed (i.e. it's a client), then send params to the server. UniqueInstance.SendParams; end; {en Initialize instance with an application name and user-provided servername (see detailed comment for InitInstanceWithName) } procedure InitInstance; begin InitInstanceWithName(ApplicationName, CommandLineParams.Servername); end; function IsUniqueInstance: Boolean; begin Result := FIsUniqueInstance; end; function WantsToBeClient: Boolean; begin Result := (gOnlyOneAppInstance or CommandLineParams.Client); end; function IsInstanceAllowed: Boolean; begin Result := (not WantsToBeClient) or IsUniqueInstance; end; finalization if Assigned(UniqueInstance) then begin UniqueInstance.StopListen; FreeAndNil(UniqueInstance); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/uosforms.pas�����������������������������������������������������������0000644�0001750�0000144�00000044673�12646532223�017535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) 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 uOSForms; {$mode delphi}{$H+} interface uses LCLType, Forms, Classes, SysUtils, Controls, uGlobs, uShellContextMenu, uDrive, uFile, uFileSource; type { TAloneForm } TAloneForm = class(TForm) {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} protected procedure DoClose(var CloseAction: TCloseAction); override; {$ELSEIF DEFINED(LCLWIN32)} public constructor Create(TheOwner: TComponent); override; {$ENDIF} end; { TModalDialog } TModalDialog = class(TAloneForm) protected FParentWindow: HWND; procedure CloseModal; protected procedure CreateParams(var Params: TCreateParams); override; public procedure ExecuteModal; virtual; function ShowModal: Integer; override; end; { TModalForm } {$IF DEFINED(LCLWIN32)} TModalForm = class(TModalDialog); {$ELSE} TModalForm = class(TForm); {$ENDIF} {en Must be called on main form create @param(MainForm Main form) } procedure MainFormCreate(MainForm : TCustomForm); {en Show file/folder properties dialog @param(Files List of files to show properties for) } procedure ShowFilePropertiesDialog(aFileSource: IFileSource; const Files: TFiles); {en Show file/folder context menu @param(Parent Parent window) @param(Files List of files to show context menu for. It is freed by this function.) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowContextMenu(Parent: TWinControl; var Files : TFiles; X, Y : Integer; Background: Boolean; CloseEvent: TNotifyEvent; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); {en Show drive context menu @param(Parent Parent window) @param(sPath Path to drive) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowDriveContextMenu(Parent: TWinControl; ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); {en Show trash context menu @param(Parent Parent window) @param(X Screen X coordinate) @param(Y Screen Y coordinate) @param(CloseEvent Method called when popup menu is closed (optional)) } procedure ShowTrashContextMenu(Parent: TWinControl; X, Y : Integer; CloseEvent: TNotifyEvent); {en Show open icon dialog @param(Owner Owner) @param(sFileName Icon file name) @returns(The function returns @true if successful, @false otherwise) } function ShowOpenIconDialog(Owner: TCustomControl; var sFileName : String) : Boolean; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} {en Show open with dialog @param(FileList List of files to open with) } procedure ShowOpenWithDialog(const FileList: TStringList); {$ENDIF} implementation uses ExtDlgs, LCLProc, Menus, Graphics, InterfaceBase, WSForms, LMessages, LCLIntf, uConnectionManager {$IF DEFINED(MSWINDOWS)} , ComObj, fMain, DCOSUtils, uOSUtils, uFileSystemFileSource , uTotalCommander, FileUtil, Windows, ShlObj, uShlObjAdditional , uWinNetFileSource, uVfsModule, uLng, uMyWindows , uThumbnailProvider, uFileSourceUtil, Dialogs {$ENDIF} {$IFDEF UNIX} , BaseUnix, fFileProperties, uJpegThumb {$IF NOT DEFINED(DARWIN)} , uDCReadSVG, uMagickWand, uGio, uGioFileSource, uVfsModule, uVideoThumb {$ELSE} , MacOSAll, uQuickLook {$ENDIF} {$IF NOT DEFINED(DARWIN)} , fOpenWith, uKde {$ENDIF} {$ENDIF}; { TAloneForm } {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} var FMain, FBefore, FCurrent: TCustomForm; procedure TAloneForm.DoClose(var CloseAction: TCloseAction); procedure TrySetFocus(Form: TCustomForm); inline; begin if Form.CanFocus then Form.SetFocus; end; var psnFront, psnCurrent: ProcessSerialNumber; begin inherited DoClose(CloseAction); if (GetCurrentProcess(psnCurrent) = noErr) and (GetFrontProcess(psnFront) = noErr) then begin // Check that our process is active if (psnCurrent.lowLongOfPSN = psnFront.lowLongOfPSN) and (psnCurrent.highLongOfPSN = psnFront.highLongOfPSN) then begin // Restore active form if (Screen.CustomFormIndex(FBefore) < 0) then TrySetFocus(FMain) else if (FBefore <> Self) then TrySetFocus(FBefore) else FBefore:= FMain; end; end; end; procedure ActiveFormChangedHandler(Self, Sender: TObject; Form: TCustomForm); begin if (Form is TAloneForm) or (FMain = Form) then begin if FCurrent <> Form then begin FBefore:= FCurrent; FCurrent:= Form; end; end; end; {$ELSEIF DEFINED(LCLWIN32)} constructor TAloneForm.Create(TheOwner: TComponent); begin inherited Create(TheOwner); if ShowInTaskBar = stAlways then // Set window owner to zero, so it will be really standalone window SetWindowLong(Handle, GWL_HWNDPARENT, 0); end; {$ENDIF} { TModalDialog } procedure TModalDialog.CloseModal; var CloseAction: TCloseAction; begin try CloseAction := caNone; if CloseQuery then begin CloseAction := caHide; DoClose(CloseAction); end; case CloseAction of caNone: ModalResult := 0; caFree: Release; end; { do not call widgetset CloseModal here, but in ShowModal to guarantee execution of it } except ModalResult := 0; Application.HandleException(Self); end; end; procedure TModalDialog.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if FParentWindow <> 0 then begin Params.Style := Params.Style or WS_POPUP; Params.WndParent := FParentWindow; end; end; procedure TModalDialog.ExecuteModal; begin repeat { Delphi calls Application.HandleMessage But HandleMessage processes all pending events and then calls idle, which will wait for new messages. Under Win32 there is always a next message, so it works there. The LCL is OS independent, and so it uses a better way: } try WidgetSet.AppProcessMessages; // process all events except if Application.CaptureExceptions then Application.HandleException(Self) else raise; end; if Application.Terminated then ModalResult := mrCancel; if ModalResult <> 0 then begin CloseModal; if ModalResult <> 0 then Break; end; Application.Idle(true); until False; end; function TModalDialog.ShowModal: Integer; procedure RaiseShowModalImpossible; var s: String; begin DebugLn('TModalForm.ShowModal Visible=',dbgs(Visible),' Enabled=',dbgs(Enabled), ' fsModal=',dbgs(fsModal in FFormState),' MDIChild=',dbgs(FormStyle = fsMDIChild)); s:='TCustomForm.ShowModal for '+DbgSName(Self)+' impossible, because'; if Visible then s:=s+' already visible (hint for designer forms: set Visible property to false)'; if not Enabled then s:=s+' not enabled'; if fsModal in FFormState then s:=s+' already modal'; if FormStyle = fsMDIChild then s:=s+' FormStyle=fsMDIChild'; raise EInvalidOperation.Create(s); end; var SavedFocusState: TFocusState; ActiveWindow: HWnd; begin if Self = nil then raise EInvalidOperation.Create('TModalForm.ShowModal Self = nil'); if Application.Terminated then ModalResult := 0; // Cancel drags DragManager.DragStop(false); // Close popupmenus if ActivePopupMenu <> nil then ActivePopupMenu.Close; if Visible or (not Enabled) or (FormStyle = fsMDIChild) then RaiseShowModalImpossible; // Kill capture when opening another dialog if GetCapture <> 0 then SendMessage(GetCapture, LM_CANCELMODE, 0, 0); ReleaseCapture; ActiveWindow := GetActiveWindow; // If parent window is normal window then call inherited method if GetWindowLong(ActiveWindow, GWL_HWNDPARENT) <> 0 then Result:= inherited ShowModal else begin Include(FFormState, fsModal); FParentWindow := ActiveWindow; SavedFocusState := SaveFocusState; Screen.MoveFormToFocusFront(Self); ModalResult := 0; try EnableWindow(FParentWindow, False); // If window already created then recreate it to force // call CreateParams with appropriate parent window if HandleAllocated then RecreateWnd(Self); Show; try // Activate must happen after show Perform(CM_ACTIVATE, 0, 0); TWSCustomFormClass(WidgetSetClass).ShowModal(Self); ExecuteModal; Result := ModalResult; if HandleAllocated and (GetActiveWindow <> Handle) then ActiveWindow := 0; finally { Guarantee execution of widgetset CloseModal } TWSCustomFormClass(WidgetSetClass).CloseModal(Self); // Set our modalresult to mrCancel before hiding. if ModalResult = 0 then ModalResult := mrCancel; EnableWindow(FParentWindow, True); // Needs to be called only in ShowModal Perform(CM_DEACTIVATE, 0, 0); Exclude(FFormState, fsModal); end; finally RestoreFocusState(SavedFocusState); if LCLIntf.IsWindow(ActiveWindow) then SetActiveWindow(ActiveWindow); // Hide window when focus already changed back // to parent window to avoid blinking LCLIntf.ShowWindow(Handle, SW_HIDE); Visible := False; end; end; end; var ShellContextMenu : TShellContextMenu = nil; {$IFDEF MSWINDOWS} procedure ActivateHandler(Self, Sender: TObject); var I: Integer = 0; begin with Screen do begin while (I < CustomFormCount) and (((CustomFormsZOrdered[I] is TModalForm) and ((CustomFormsZOrdered[I] as TModalForm).FParentWindow <> 0)) or not (fsModal in CustomFormsZOrdered[I].FormState)) do Inc(I); // If modal form exists then activate it if (I >= 0) and (I < CustomFormCount) then CustomFormsZOrdered[I].BringToFront; end; end; procedure MenuHandler(Self, Sender: TObject); var Ret: DWORD; Res: TNetResourceA; CDS: TConnectDlgStruct; begin if (Sender as TMenuItem).Tag = 0 then begin ZeroMemory(@Res, SizeOf(TNetResourceA)); Res.dwType := RESOURCETYPE_DISK; CDS.cbStructure := SizeOf(TConnectDlgStruct); CDS.hwndOwner := frmMain.Handle; CDS.lpConnRes := @Res; CDS.dwFlags := 0; Ret:= WNetConnectionDialog1(CDS); if Ret = NO_ERROR then begin SetFileSystemPath(frmMain.ActiveFrame, AnsiChar(Int64(CDS.dwDevNum) + Ord('a') - 1) + ':\'); end else if Ret <> DWORD(-1) then begin MessageDlg(mbSysErrorMessage(Ret), mtError, [mbOK], 0); end; end else begin Ret:= WNetDisconnectDialog(fmain.frmMain.Handle, RESOURCETYPE_DISK); case Ret of NO_ERROR, DWORD(-1): ; else MessageDlg(mbSysErrorMessage(Ret), mtError, [mbOK], 0); end; end; end; {$ENDIF} procedure MainFormCreate(MainForm : TCustomForm); {$IFDEF MSWINDOWS} var Handler: TMethod; MenuItem: TMenuItem; begin Handler.Code:= @ActivateHandler; Handler.Data:= MainForm; // Setup application OnActivate handler Application.AddOnActivateHandler(TNotifyEvent(Handler), True); // Disable application button on taskbar with Widgetset do SetWindowLong(AppHandle, GWL_EXSTYLE, GetWindowLong(AppHandle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW); // Emulate Total Commander window CreateTotalCommanderWindow(MainForm.Handle); // Register network file source RegisterVirtualFileSource(rsVfsNetwork, TWinNetFileSource); if (Win32MajorVersion > 5) and IsUserAdmin then // if run under administrator MainForm.Caption:= MainForm.Caption + ' - Administrator'; with frmMain do begin Handler.Code:= @MenuHandler; Handler.Data:= MainForm; MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= '-'; mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuMapNetworkDrive; MenuItem.Tag:= 0; MenuItem.OnClick:= TNotifyEvent(Handler); mnuNetwork.Add(MenuItem); MenuItem:= TMenuItem.Create(mnuMain); MenuItem.Caption:= rsMnuDisconnectNetworkDrive; MenuItem.Tag:= 1; MenuItem.OnClick:= TNotifyEvent(Handler); mnuNetwork.Add(MenuItem); end; end; {$ELSE} {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} var Handler: TMethod; {$ENDIF} begin if fpGetUID = 0 then // if run under root MainForm.Caption:= MainForm.Caption + ' - ROOT PRIVILEGES'; {$IF NOT DEFINED(DARWIN)} if HasGio then RegisterVirtualFileSource('GVfs', TGioFileSource, False); {$ENDIF} {$IF DEFINED(DARWIN) AND DEFINED(LCLQT)} FMain:= MainForm; Handler.Data:= MainForm; Handler.Code:= @ActiveFormChangedHandler; Screen.AddHandlerActiveFormChanged(TScreenFormEvent(Handler), True); {$ENDIF} end; {$ENDIF} procedure ShowContextMenu(Parent: TWinControl; var Files : TFiles; X, Y : Integer; Background: Boolean; CloseEvent: TNotifyEvent; UserWishForContextMenu:TUserWishForContextMenu = uwcmComplete); {$IFDEF MSWINDOWS} begin if Assigned(Files) and (Files.Count = 0) then begin FreeAndNil(Files); Exit; end; try // Create new context menu ShellContextMenu:= TShellContextMenu.Create(Parent, Files, Background, UserWishForContextMenu); ShellContextMenu.OnClose := CloseEvent; // Show context menu ShellContextMenu.PopUp(X, Y); finally // Free created menu FreeThenNil(ShellContextMenu); end; end; {$ELSE} begin if Files.Count = 0 then begin FreeAndNil(Files); Exit; end; // Free previous created menu FreeThenNil(ShellContextMenu); // Create new context menu ShellContextMenu:= TShellContextMenu.Create(nil, Files, Background, UserWishForContextMenu); ShellContextMenu.OnClose := CloseEvent; // Show context menu ShellContextMenu.PopUp(X, Y); end; {$ENDIF} procedure ShowDriveContextMenu(Parent: TWinControl; ADrive: PDrive; X, Y : Integer; CloseEvent: TNotifyEvent); {$IFDEF MSWINDOWS} var aFile: TFile; Files: TFiles; begin if ADrive.DriveType = dtVirtual then ShowVirtualDriveMenu(ADrive, X, Y, CloseEvent) else begin aFile := TFileSystemFileSource.CreateFile(EmptyStr); aFile.FullPath := ADrive^.Path; aFile.Attributes := faFolder; Files:= TFiles.Create(EmptyStr); // free in ShowContextMenu Files.Add(aFile); ShowContextMenu(Parent, Files, X, Y, False, CloseEvent); end; end; {$ELSE} begin if ADrive.DriveType = dtVirtual then ShowVirtualDriveMenu(ADrive, X, Y, CloseEvent) else begin // Free previous created menu FreeThenNil(ShellContextMenu); // Create new context menu ShellContextMenu:= TShellContextMenu.Create(nil, ADrive); ShellContextMenu.OnClose := CloseEvent; // show context menu ShellContextMenu.PopUp(X, Y); end; end; {$ENDIF} procedure ShowTrashContextMenu(Parent: TWinControl; X, Y: Integer; CloseEvent: TNotifyEvent); {$IFDEF MSWINDOWS} var Files: TFiles = nil; begin ShowContextMenu(Parent, Files, X, Y, False, CloseEvent); end; {$ELSE} begin end; {$ENDIF} (* Show file properties dialog *) procedure ShowFilePropertiesDialog(aFileSource: IFileSource; const Files: TFiles); {$IFDEF UNIX} begin ShowFileProperties(aFileSource, Files); end; {$ELSE} var cmici: TCMINVOKECOMMANDINFO; contMenu: IContextMenu; begin if Files.Count = 0 then Exit; try contMenu := GetShellContextMenu(frmMain.Handle, Files, False); if Assigned(contMenu) then begin FillChar(cmici, sizeof(cmici), #0); with cmici do begin cbSize := sizeof(cmici); hwnd := frmMain.Handle; lpVerb := sCmdVerbProperties; nShow := SW_SHOWNORMAL; end; OleCheckUTF8(contMenu.InvokeCommand(cmici)); end; except on e: EOleError do raise EContextMenuException.Create(e.Message); end; end; {$ENDIF} function ShowOpenIconDialog(Owner: TCustomControl; var sFileName : String) : Boolean; var opdDialog : TOpenPictureDialog; {$IFDEF MSWINDOWS} sFilter : String; iPos, iIconIndex: Integer; bAlreadyOpen : Boolean; bFlagKeepGoing : Boolean = True; {$ENDIF} begin opdDialog := nil; {$IFDEF MSWINDOWS} sFilter := GraphicFilter(TGraphic)+'|'+ 'Programs and Libraries (*.exe;*.dll)|*.exe;*.dll'+'|'+ Format('All files (%s)|%s',[GetAllFilesMask, GetAllFilesMask]); bAlreadyOpen := False; iPos :=Pos(',', sFileName); if iPos <> 0 then begin iIconIndex := StrToIntDef(Copy(sFileName, iPos + 1, Length(sFileName) - iPos), 0); sFileName := Copy(sFileName, 1, iPos - 1); end else begin opdDialog := TOpenPictureDialog.Create(Owner); opdDialog.Filter := sFilter; opdDialog.InitialDir := ExtractFileDir(sFileName); opdDialog.FileName := sFileName; Result := opdDialog.Execute; if Result then sFileName := opdDialog.FileName else bFlagKeepGoing := False; bAlreadyOpen := True; end; if FileIsExeLib(sFileName) then begin if bFlagKeepGoing then begin Result := SHChangeIconDialog(Owner.Handle, sFileName, iIconIndex); if Result then sFileName := sFileName + ',' + IntToStr(iIconIndex); end; end else if not bAlreadyOpen then {$ENDIF} begin opdDialog := TOpenPictureDialog.Create(Owner); opdDialog.InitialDir:=ExtractFileDir(sFileName); {$IFDEF MSWINDOWS} opdDialog.Filter:= sFilter; {$ENDIF} opdDialog.FileName := sFileName; Result:= opdDialog.Execute; sFileName := opdDialog.FileName; end; if Assigned(opdDialog) then FreeAndNil(opdDialog); end; {$IF DEFINED(UNIX) AND NOT DEFINED(DARWIN)} procedure ShowOpenWithDialog(const FileList: TStringList); begin if not (UseKde and uKde.ShowOpenWithDialog(FileList)) then begin fOpenWith.ShowOpenWithDlg(FileList); end; end; {$ENDIF} finalization FreeThenNil(ShellContextMenu); end. ���������������������������������������������������������������������doublecmd-0.7.1/src/platform/uOSUtils.pas�����������������������������������������������������������0000644�0001750�0000144�00000101241�12664631677�017405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains platform depended functions. Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 uOSUtils; {$mode delphi}{$H+} interface uses SysUtils, Classes, LCLType, uDrive, DCBasicTypes {$IF DEFINED(UNIX)} , DCFileAttributes {$IFDEF DARWIN} , MacOSAll {$ENDIF} {$ENDIF} ; const CnstUserCommand = '{command}'; {$IF DEFINED(MSWINDOWS)} faFolder = faDirectory; ReversePathDelim = '/'; RunTermCmd = 'cmd.exe'; // default terminal RunTermParams = ''; RunInTermStayOpenCmd = 'cmd.exe'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '/K {command}'; RunInTermCloseCmd = 'cmd.exe'; // default run in terminal command AND Close after command RunInTermCloseParams = '/C {command}'; fmtCommandPath = '%s>'; MonoSpaceFont = 'Fixedsys'; {$ELSEIF DEFINED(UNIX)} faFolder = S_IFDIR; ReversePathDelim = '\'; {$IFDEF DARWIN)} RunTermCmd = '/Applications/Utilities/Terminal.app %D'; // default terminal RunTermParams = ''; RunInTerm = ''; // default run in terminal command RunInTermStayOpenCmd = '%COMMANDER_PATH%/scripts/terminal.sh'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '''{command}'''; RunInTermCloseCmd = ''; // default run in terminal command AND Close after command RunInTermCloseParams = ''; MonoSpaceFont = 'Monaco'; {$ELSE} RunTermCmd = 'xterm'; // default terminal RunTermParams = ''; RunInTermStayOpenCmd = 'xterm'; // default run in terminal command AND Stay open after command RunInTermStayOpenParams = '-e sh -c ''{command}; echo -n Press ENTER to exit... ; read a'''; RunInTermCloseCmd = 'xterm'; // default run in terminal command AND Close after command RunInTermCloseParams = '-e sh -c {command}'; MonoSpaceFont = 'Monospace'; {$ENDIF} fmtCommandPath = '[%s]$:'; {$ENDIF} termStayOpen=True; termClose=False; type tTerminalEndindMode = boolean; EInvalidCommandLine = class(Exception); EInvalidQuoting = class(EInvalidCommandLine) constructor Create; reintroduce; end; function NtfsHourTimeDelay(const SourceName, TargetName: String): Boolean; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; {en Execute command line } function ExecCmdFork(sCmd: String): Boolean; {en Execute external commands @param(sCmd The executable) @param(sParams The optional paramters) @param(sStartPath The initial working directory) @param(bShowCommandLinePriorToExecute Flag indicating if we want the user to be prompted at the very last seconds prior to launch execution by offering a dialog window where he can adjust/confirm the three above parameters.) @param(bTerm Flag indicating if it should be launch through terminal) @param(bKeepTerminalOpen Value indicating the type of terminal to use (closed at the end, remain opened, etc.)) } function ExecCmdFork(sCmd: String; sParams: String; sStartPath: String = ''; bShowCommandLinePriorToExecute: Boolean = False; bTerm: Boolean = False; bKeepTerminalOpen: tTerminalEndindMode = termStayOpen): Boolean; {en Opens a file or URL in the user's preferred application @param(URL File name or URL) @returns(The function returns @true if successful, @false otherwise) } function ShellExecute(URL: String): Boolean; function GetDiskFreeSpace(const Path : String; out FreeSize, TotalSize : Int64) : Boolean; {en Get maximum file size for a mounted file system @param(Path The pathname of any file within the mounted file system) @returns(The maximum file size for a mounted file system) } function GetDiskMaxFileSize(const Path : String) : Int64; {en Create a hard link to a file @param(Path Name of file) @param(LinkName Name of hard link) @returns(The function returns @true if successful, @false otherwise) } function CreateHardLink(const Path, LinkName: String) : Boolean; {en Create a symbolic link @param(Path Name of file) @param(LinkName Name of symbolic link) @returns(The function returns @true if successful, @false otherwise) } function CreateSymLink(const Path, LinkName: string) : Boolean; {en Read destination of symbolic link @param(LinkName Name of symbolic link) @returns(The file name/path the symbolic link name is pointing to. The path may be relative to link's location.) } function ReadSymLink(const LinkName : String) : String; {en Reads the concrete file's name that the link points to. If the link points to a link then it's resolved recursively until a valid file name that is not a link is found. @param(PathToLink Name of symbolic link (absolute path)) @returns(The absolute filename the symbolic link name is pointing to, or an empty string when the link is invalid or the file it points to does not exist.) } function mbReadAllLinks(const PathToLink : String) : String; {en If PathToLink points to a link then it returns file that the link points to (recursively). If PathToLink does not point to a link then PathToLink value is returned. } function mbCheckReadLinks(const PathToLink : String) : String; {en Get the user home directory @returns(The user home directory) } function GetHomeDir : String; {en Get the appropriate directory for the application's configuration files @returns(The directory for the application's configuration files) } function GetAppConfigDir: String; {en Get the appropriate directory for the application's cache files @returns(The directory for the application's cache files) } function GetAppCacheDir: String; function GetTempFolder: String; { Similar to "GetTempFolder" but that we can unilaterally delete at the end when closin application} function GetTempFolderDeletableAtTheEnd: String; procedure DeleteTempFolderDeletableAtTheEnd; {en Get the system specific self extracting archive extension @returns(Self extracting archive extension) } function GetSfxExt: String; function IsAvailable(Drive: PDrive; TryMount: Boolean = True) : Boolean; function GetShell : String; {en Formats a string which will execute Command via shell. } function FormatShell(const Command: String): String; {en Formats a string which will execute Command in a terminal. } procedure FormatTerminal(var sCmd: String; var sParams: String; bKeepTerminalOpen: tTerminalEndindMode); {en Same as mbFileGetAttr, but dereferences any encountered links. } function mbFileGetAttrNoLinks(const FileName: String): TFileAttrs; {en Convert file name to system encoding, if name can not be represented in current locale then use short file name under Windows. } function mbFileNameToSysEnc(const LongPath: String): String; function mbGetEnvironmentVariable(const sName: String): String; function mbSetEnvironmentVariable(const sName, sValue: String): Boolean; {en Extract the root directory part of a file name. @returns(Drive letter under Windows and mount point under Unix) } function ExtractRootDir(const FileName: String): String; procedure FixFormIcon(Handle: LCLType.HWND); procedure HideConsoleWindow; procedure FixDateNamesToUTF8; function ParamStrU(Param: Integer): String; overload; function ParamStrU(const Param: String): String; overload; {en Get the current username of the current session } function GetCurrentUserName : String; {en Get the current machine name } function GetComputerNetName: String; implementation uses StrUtils, uFileProcs, FileUtil, uDCUtils, DCOSUtils, DCStrUtils, uGlobs, uLng, fConfirmCommandLine, uLog, DCConvertEncoding {$IF DEFINED(MSWINDOWS)} , JwaWinCon, Windows, LazUTF8, uNTFSLinks, uMyWindows, JwaWinNetWk, uShlObjAdditional, shlobj {$ENDIF} {$IF DEFINED(UNIX)} , BaseUnix, Unix, uMyUnix, dl {$IF NOT DEFINED(DARWIN)} , uGio, uClipboard {$ENDIF} {$ENDIF} ; function FileIsLinkToFolder(const FileName: String; out LinkTarget: String): Boolean; {$IF DEFINED(MSWINDOWS)} begin Result:= False; if LowerCase(ExtractOnlyFileExt(FileName)) = 'lnk' then Result:= SHFileIsLinkToFolder(FileName, LinkTarget); end; {$ELSEIF DEFINED(UNIX)} begin Result:= False; if LowerCase(ExtractOnlyFileExt(FileName)) = 'desktop' then Result:= uMyUnix.FileIsLinkToFolder(FileName, LinkTarget); end; {$ENDIF} function ExecCmdFork(sCmd, sParams, sStartPath:String; bShowCommandLinePriorToExecute, bTerm : Boolean; bKeepTerminalOpen: tTerminalEndindMode) : Boolean; {$IFDEF UNIX} var Args : TDynamicStringArray; bFlagKeepGoing: boolean = True; begin result:=False; if bTerm then FormatTerminal(sCmd, sParams, bKeepTerminalOpen); if bShowCommandLinePriorToExecute then bFlagKeepGoing:= ConfirmCommandLine(sCmd, sParams, sStartPath); if bFlagKeepGoing then begin if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch+': '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); if sCmd = EmptyStr then Exit(False); sCmd := UTF8ToSys(sCmd); SplitCommandArgs(UTF8ToSys(sParams), Args); Result := ExecuteCommand(sCmd, Args, sStartPath); if (log_commandlineexecution in gLogOptions) then begin if Result then logWrite(rsMsgLogExtCmdResult+': '+rsSimpleWordResult+'='+'Success!'+' / '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath) else logWrite(rsMsgLogExtCmdResult+': '+rsSimpleWordResult+'='+'Failed!'+' / '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); end; end else begin Result := True; end; end; {$ELSE} var wFileName, wParams, wStartPath: WideString; bFlagKeepGoing: boolean = True; ExecutionResult:HINST; begin sStartPath:=RemoveQuotation(sStartPath); if sStartPath='' then sStartPath:=mbGetCurrentDir; sCmd:= NormalizePathDelimiters(sCmd); if bTerm then begin sCmd := ConcatenateStrWithSpace(sCmd,sParams); if bKeepTerminalOpen = termStayOpen then begin sParams:=StringReplace(gRunInTermStayOpenParams, '{command}', QuoteFilenameIfNecessary(sCmd) , [rfIgnoreCase]); sCmd := gRunInTermStayOpenCmd; end else begin sParams:=StringReplace(gRunInTermCloseParams, '{command}', QuoteFilenameIfNecessary(sCmd) , [rfIgnoreCase]); sCmd := gRunInTermCloseCmd; end; end; if bShowCommandLinePriorToExecute then bFlagKeepGoing:= ConfirmCommandLine(sCmd, sParams, sStartPath); if bFlagKeepGoing then begin wFileName:= UTF8Decode(sCmd); wParams:= UTF8Decode(sParams); wStartPath:= UTF8Decode(sStartPath); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch+': '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); ExecutionResult:=ShellExecuteW(0, nil, PWChar(wFileName), PWChar(wParams), PWChar(wStartPath), SW_SHOW); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdResult+': '+rsSimpleWordResult+'='+ifThen((ExecutionResult > 32),'Success!',IntToStr(ExecutionResult)+':'+SysErrorMessage(ExecutionResult))+' / '+rsSimpleWordFilename+'='+sCmd+' / '+rsSimpleWordParameter+'='+sParams+' / '+rsSimpleWordWorkDir+'='+sStartPath); Result := (ExecutionResult > 32); end else begin result:=True; //User abort, so let's fake all things completed. end; end; {$ENDIF} function ExecCmdFork(sCmd: String): Boolean; {$IFDEF UNIX} var Command: String; Args : TDynamicStringArray; begin SplitCmdLine(sCmd, Command, Args); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch + ': ' + rsSimpleWordCommand + '=' + sCmd); Result:= ExecuteCommand(Command, Args, EmptyStr); if (log_commandlineexecution in gLogOptions) then begin if Result then logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + 'Success!' + ' / ' + rsSimpleWordCommand + '=' + sCmd) else logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + 'Failed!' + ' / ' + rsSimpleWordCommand + '=' + sCmd); end; end; {$ELSE} var sFileName, sParams: String; ExecutionResult: HINST; wsStartPath: UnicodeString; begin SplitCmdLine(sCmd, sFileName, sParams); wsStartPath:= UTF8Decode(mbGetCurrentDir()); sFileName:= NormalizePathDelimiters(sFileName); if (log_commandlineexecution in gLogOptions) then logWrite(rsMsgLogExtCmdLaunch + ': ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams); ExecutionResult := ShellExecuteW(0, nil, PWideChar(UTF8Decode(sFileName)), PWideChar(UTF8Decode(sParams)), PWideChar(wsStartPath), SW_SHOW); if (log_commandlineexecution in gLogOptions) then begin logWrite(rsMsgLogExtCmdResult + ': ' + rsSimpleWordResult + '=' + IfThen((ExecutionResult > 32), 'Success!', IntToStr(ExecutionResult) + ':' + SysErrorMessage(ExecutionResult)) +' / ' + rsSimpleWordFilename + '=' + sCmd + ' / ' + rsSimpleWordParameter + '=' + sParams); end; Result := (ExecutionResult > 32); end; {$ENDIF} function ShellExecute(URL: String): Boolean; {$IF DEFINED(MSWINDOWS)} var Return: HINST; wsFileName: UnicodeString; wsStartPath: UnicodeString; begin URL:= NormalizePathDelimiters(URL); wsFileName:= UTF8Decode(QuoteDouble(URL)); wsStartPath:= UTF8Decode(mbGetCurrentDir()); Return:= ShellExecuteW(0, nil, PWideChar(wsFileName), nil, PWideChar(wsStartPath), SW_SHOWNORMAL); if Return = SE_ERR_NOASSOC then Result:= ExecCmdFork('rundll32 shell32.dll OpenAs_RunDLL ' + URL) else Result:= Return > 32; end; {$ELSEIF DEFINED(DARWIN)} var theFileNameCFRef: CFStringRef = nil; theFileNameUrlRef: CFURLRef = nil; theFileNameFSRef: FSRef; begin Result:= False; try theFileNameCFRef:= CFStringCreateWithFileSystemRepresentation(nil, PAnsiChar(URL)); theFileNameUrlRef:= CFURLCreateWithFileSystemPath(nil, theFileNameCFRef, kCFURLPOSIXPathStyle, False); if (CFURLGetFSRef(theFileNameUrlRef, theFileNameFSRef)) then begin Result:= (LSOpenFSRef(theFileNameFSRef, nil) = noErr); end; finally if Assigned(theFileNameCFRef) then CFRelease(theFileNameCFRef); if Assigned(theFileNameUrlRef) then CFRelease(theFileNameUrlRef); end; end; {$ELSE} var sCmdLine: String; begin Result:= False; sCmdLine:= EmptyStr; if FileIsUnixExecutable(URL) then begin if GetPathType(URL) <> ptAbsolute then sCmdLine := './'; sCmdLine:= sCmdLine + QuoteStr(URL); end else begin if (DesktopEnv = DE_KDE) and (FindDefaultExecutablePath('kioclient') <> EmptyStr) then sCmdLine:= 'kioclient exec ' + QuoteStr(URL) // Under KDE use "kioclient" to open files else if HasGio and (DesktopEnv <> DE_XFCE) then Result:= GioOpen(URL) // Under GNOME, Unity and LXDE use "GIO" to open files else begin if GetPathType(URL) = ptAbsolute then sCmdLine:= URL else begin sCmdLine := IncludeTrailingPathDelimiter(mbGetCurrentDir); sCmdLine:= GetAbsoluteFileName(sCmdLine, URL) end; sCmdLine:= GetDefaultAppCmd(sCmdLine); end; end; if Length(sCmdLine) <> 0 then Result:= ExecCmdFork(sCmdLine); end; {$ENDIF} (* Get Disk Free Space *) function GetDiskFreeSpace(const Path : String; out FreeSize, TotalSize : Int64) : Boolean; {$IFDEF UNIX} var sbfs: TStatFS; begin Result:= (fpStatFS(PAnsiChar(CeUtf8ToSys(Path)), @sbfs) = 0); if not Result then Exit; FreeSize := (Int64(sbfs.bavail) * sbfs.bsize); TotalSize := (Int64(sbfs.blocks) * sbfs.bsize); end; {$ELSE} var wPath: WideString; begin wPath:= UTF8Decode(Path); Result:= GetDiskFreeSpaceExW(PWChar(wPath), FreeSize, TotalSize, nil); end; {$ENDIF} function GetDiskMaxFileSize(const Path: String): Int64; {$IFDEF UNIX} const MSDOS_SUPER_MAGIC = $4d44; var sbfs: TStatFS; begin Result := High(Int64); if (fpStatFS(PAnsiChar(CeUtf8ToSys(Path)), @sbfs) = 0) then begin {$IFDEF BSD} if (sbfs.ftype = MSDOS_SUPER_MAGIC) then {$ELSE} if (sbfs.fstype = MSDOS_SUPER_MAGIC) then {$ENDIF} Result:= $FFFFFFFF; // 4 Gb end; end; {$ELSE} var lpVolumeNameBuffer, lpFileSystemNameBuffer : array [0..255] of WideChar; lpMaximumComponentLength, lpFileSystemFlags : DWORD; begin Result := High(Int64); if GetVolumeInformationW(PWideChar(UTF8Decode(ExtractFileDrive(Path)) + PathDelim), lpVolumeNameBuffer, SizeOf(lpVolumeNameBuffer), nil, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, SizeOf(lpFileSystemNameBuffer)) then begin if SameText(lpFileSystemNameBuffer, 'FAT') then Result:= $80000000 // 2 Gb else if SameText(lpFileSystemNameBuffer, 'FAT32') then Result:= $FFFFFFFF; // 4 Gb end; end; {$ENDIF} function NtfsHourTimeDelay(const SourceName, TargetName: String): Boolean; {$IFDEF MSWINDOWS} var lpDummy: DWORD = 0; lpSourceFileSystem, lpTargetFileSystem: array [0..MAX_PATH] of WideChar; begin Result:= False; if GetVolumeInformationW(PWideChar(UTF8Decode(ExtractFileDrive(SourceName)) + PathDelim), nil, 0, nil, lpDummy, lpDummy, lpSourceFileSystem, MAX_PATH) and GetVolumeInformationW(PWideChar(UTF8Decode(ExtractFileDrive(TargetName)) + PathDelim), nil, 0, nil, lpDummy, lpDummy, lpTargetFileSystem, MAX_PATH) then begin Result:= (SameText(lpSourceFileSystem, 'FAT32') and SameText(lpTargetFileSystem, 'NTFS')) or (SameText(lpTargetFileSystem, 'FAT32') and SameText(lpSourceFileSystem, 'NTFS')) end; end; {$ELSE} begin Result:= False; end; {$ENDIF} function CreateHardLink(const Path, LinkName: String) : Boolean; {$IFDEF MSWINDOWS} var wsPath, wsLinkName: WideString; begin Result:= True; try wsPath:= UTF8Decode(Path); wsLinkName:= UTF8Decode(LinkName); Result:= uNTFSLinks.CreateHardlink(wsPath, wsLinkName); except Result:= False; end; end; {$ELSE} begin Result := (fplink(PAnsiChar(CeUtf8ToSys(Path)),PAnsiChar(CeUtf8ToSys(LinkName)))=0); end; {$ENDIF} function CreateSymLink(const Path, LinkName: string) : Boolean; {$IFDEF MSWINDOWS} var wsPath, wsLinkName: WideString; begin Result := True; try wsPath:= UTF8Decode(Path); wsLinkName:= UTF8Decode(LinkName); Result:= uNTFSLinks.CreateSymlink(wsPath, wsLinkName); except Result := False; end; end; {$ELSE} begin Result := (fpsymlink(PAnsiChar(CeUtf8ToSys(Path)), PAnsiChar(CeUtf8ToSys(LinkName)))=0); end; {$ENDIF} (* Get symlink target *) function ReadSymLink(const LinkName : String) : String; {$IFDEF MSWINDOWS} var wsLinkName, wsTarget: UnicodeString; begin try wsLinkName:= UTF8Decode(LinkName); if uNTFSLinks.ReadSymLink(wsLinkName, wsTarget) then Result := UTF16ToUTF8(wsTarget) else Result := ''; except Result := ''; end; end; {$ELSE} begin Result := SysToUTF8(fpReadlink(UTF8ToSys(LinkName))); end; {$ENDIF} function mbReadAllLinks(const PathToLink: String) : String; var Attrs: TFileAttrs; LinkTargets: TStringList; // A list of encountered filenames (for detecting cycles) function mbReadAllLinksRec(const PathToLink: String): String; begin Result := ReadSymLink(PathToLink); if Result <> '' then begin if GetPathType(Result) <> ptAbsolute then Result := GetAbsoluteFileName(ExtractFilePath(PathToLink), Result); if LinkTargets.IndexOf(Result) >= 0 then begin // Link already encountered - links form a cycle. Result := ''; {$IFDEF UNIX} fpseterrno(ESysELOOP); {$ENDIF} Exit; end; Attrs := mbFileGetAttr(Result); if (Attrs <> faInvalidAttributes) then begin if FPS_ISLNK(Attrs) then begin // Points to a link - read recursively. LinkTargets.Add(Result); Result := mbReadAllLinksRec(Result); end; // else points to a file/dir end else begin Result := ''; // Target of link doesn't exist {$IFDEF UNIX} fpseterrno(ESysENOENT); {$ENDIF} end; end; end; begin LinkTargets := TStringList.Create; try Result := mbReadAllLinksRec(PathToLink); finally FreeAndNil(LinkTargets); end; end; function mbCheckReadLinks(const PathToLink : String): String; var Attrs: TFileAttrs; begin Attrs := mbFileGetAttr(PathToLink); if (Attrs <> faInvalidAttributes) and FPS_ISLNK(Attrs) then Result := mbReadAllLinks(PathToLink) else Result := PathToLink; end; function GetHomeDir : String; {$IFDEF MSWINDOWS} var iSize: Integer; wHomeDir: UnicodeString; begin iSize:= GetEnvironmentVariableW('USERPROFILE', nil, 0); if iSize > 0 then begin SetLength(wHomeDir, iSize); GetEnvironmentVariableW('USERPROFILE', PWChar(wHomeDir), iSize); end; Delete(wHomeDir, iSize, 1); Result:= ExcludeBackPathDelimiter(UTF16ToUTF8(wHomeDir)); end; {$ELSE} begin Result:= ExcludeBackPathDelimiter(SysToUTF8(GetEnvironmentVariable('HOME'))); end; {$ENDIF} function GetShell : String; {$IFDEF MSWINDOWS} var iSize: Integer; wShell: UnicodeString; begin iSize:= GetEnvironmentVariableW('ComSpec', nil, 0); if iSize > 0 then begin SetLength(wShell, iSize); GetEnvironmentVariableW('ComSpec', PWChar(wShell), iSize); end; Delete(wShell, iSize, 1); Result:= UTF16ToUTF8(wShell); end; {$ELSE} begin Result:= SysToUTF8(GetEnvironmentVariable('SHELL')); end; {$ENDIF} function FormatShell(const Command: String): String; begin {$IF DEFINED(UNIX)} Result := Format('%s -c %s', [GetShell, QuoteSingle(Command)]); {$ELSEIF DEFINED(MSWINDOWS)} Result := Format('%s /C %s', [GetShell, QuoteDouble(Command)]); {$ENDIF} end; procedure FormatTerminal(var sCmd: String; var sParams: String; bKeepTerminalOpen: tTerminalEndindMode); var sConfigParam:string; begin {$IF DEFINED(UNIX)} sParams := ConcatenateStrWithSpace(sCmd, sParams); if bKeepTerminalOpen = termStayOpen then begin sCmd := gRunInTermStayOpenCmd; sConfigParam := gRunInTermStayOpenParams; end else begin sCmd := gRunInTermCloseCmd; sConfigParam := gRunInTermCloseParams; end; sCmd := ReplaceEnvVars(sCmd); if Pos(CnstUserCommand, sConfigParam) <> 0 then sParams := StringReplace(sConfigParam, CnstUserCommand, sParams , [rfIgnoreCase]) else sParams := ConcatenateStrWithSpace(sConfigParam, sParams); {$ELSEIF DEFINED(MSWINDOWS)} // if bKeepTerminalOpen then // Result := Format('%s %s', [gRunInTermStayOpenCmd, QuoteDouble(Command)]) // else // Result := Format('%s %s', [gRunInTermCloseCmd, QuoteDouble(Command)]); sParams := ConcatenateStrWithSpace(sCmd, sParams); if bKeepTerminalOpen = termStayOpen then begin sCmd := gRunInTermStayOpenCmd; sConfigParam := gRunInTermStayOpenParams; end else begin sCmd := gRunInTermCloseCmd; sConfigParam := gRunInTermCloseParams; end; if pos(CnstUserCommand,sConfigParam)<>0 then sParams := StringReplace(sConfigParam, CnstUserCommand, sParams , [rfIgnoreCase]) else sParams:=ConcatenateStrWithSpace(sConfigParam, sParams); {$ENDIF} end; function GetAppConfigDir: String; {$IF DEFINED(MSWINDOWS)} const SHGFP_TYPE_CURRENT = 0; var wPath: array[0..MAX_PATH-1] of WideChar; wUser: UnicodeString; dwLength: DWORD; begin if SUCCEEDED(SHGetFolderPathW(0, CSIDL_APPDATA or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, @wPath[0])) or SUCCEEDED(SHGetFolderPathW(0, CSIDL_LOCAL_APPDATA or CSIDL_FLAG_CREATE, 0, SHGFP_TYPE_CURRENT, @wPath[0])) then begin Result := UTF16ToUTF8(WideString(wPath)); end else begin dwLength := UNLEN + 1; SetLength(wUser, dwLength); if GetUserNameW(PWideChar(wUser), @dwLength) then begin SetLength(wUser, dwLength - 1); Result := GetTempDir + UTF16ToUTF8(wUser); end else Result := EmptyStr; end; if Result <> '' then Result := Result + DirectorySeparator + ApplicationName; end; {$ELSEIF DEFINED(DARWIN)} begin Result:= GetHomeDir + '/Library/Preferences/' + ApplicationName; end; {$ELSE} var uinfo: PPasswordRecord; begin uinfo:= getpwuid(fpGetUID); if (uinfo <> nil) and (uinfo^.pw_dir <> '') then Result:= CeSysToUtf8(uinfo^.pw_dir) + '/.config/' + ApplicationName else Result:= ExcludeTrailingPathDelimiter(SysToUTF8(SysUtils.GetAppConfigDir(False))); end; {$ENDIF} function GetAppCacheDir: String; {$IF DEFINED(MSWINDOWS)} var APath: array[0..MAX_PATH] of WideChar; begin if SHGetSpecialFolderPathW(0, APath, CSIDL_LOCAL_APPDATA, True) then Result:= UTF16ToUTF8(UnicodeString(APath)) + DirectorySeparator + ApplicationName else Result:= GetAppConfigDir; end; {$ELSEIF DEFINED(DARWIN)} begin Result:= GetHomeDir + '/Library/Caches/' + ApplicationName; end; {$ELSE} var uinfo: PPasswordRecord; begin uinfo:= getpwuid(fpGetUID); if (uinfo <> nil) and (uinfo^.pw_dir <> '') then Result:= CeSysToUtf8(uinfo^.pw_dir) + '/.cache/' + ApplicationName else Result:= GetHomeDir + '/.cache/' + ApplicationName; end; {$ENDIF} function GetTempFolder: String; begin Result:= GetTempDir + '_dc'; if not mbDirectoryExists(Result) then mbCreateDir(Result); Result:= Result + PathDelim; end; function GetTempFolderDeletableAtTheEnd: String; begin Result:= GetTempDir + '_dc~~~'; if not mbDirectoryExists(Result) then mbCreateDir(Result); Result:= Result + PathDelim; end; procedure DeleteTempFolderDeletableAtTheEnd; var TempFolderName:string; begin TempFolderName:= GetTempDir + '_dc~~~'; if mbDirectoryExists(TempFolderName) then DelTree(TempFolderName); end; function GetSfxExt: String; {$IFDEF MSWINDOWS} begin Result:= '.exe'; end; {$ELSE} begin Result:= '.run'; end; {$ENDIF} function IsAvailable(Drive: PDrive; TryMount: Boolean): Boolean; {$IF DEFINED(MSWINDOWS)} var Drv: String; DriveLabel: String; NetResource: TNetResourceW; wsLocalName, wsRemoteName: WideString; begin Drv:= ExtractFileDrive(Drive^.Path) + PathDelim; // Try to close CD/DVD drive if (GetDriveType(PChar(Drv)) = DRIVE_CDROM) and TryMount and (not mbDriveReady(Drv)) then begin DriveLabel:= mbGetVolumeLabel(Drv, False); mbCloseCD(Drv); if mbDriveReady(Drv) then mbWaitLabelChange(Drv, DriveLabel); end; // Try to connect to mapped network drive if (Drive^.DriveType = dtNetwork) and TryMount and (not mbDriveReady(Drv)) then begin wsLocalName := UTF8Decode(ExtractFileDrive(Drive^.Path)); wsRemoteName := UTF8Decode(Drive^.DriveLabel); FillChar(NetResource, SizeOf(NetResource), #0); NetResource.dwType:= RESOURCETYPE_DISK; NetResource.lpLocalName:= PWideChar(wsLocalName); NetResource.lpRemoteName:= PWideChar(wsRemoteName); WNetAddConnection2W(NetResource, nil, nil, CONNECT_INTERACTIVE); end; Result:= mbDriveReady(Drv); end; {$ELSEIF DEFINED(DARWIN)} begin // Because we show under Mac OS X only mounted volumes Result:= True; end; {$ELSEIF DEFINED(LINUX)} var mtab: PIOFile; pme: PMountEntry; begin Result:= False; mtab:= setmntent(_PATH_MOUNTED,'r'); if not Assigned(mtab) then exit; pme:= getmntent(mtab); while (pme <> nil) do begin if CeSysToUtf8(pme.mnt_dir) = Drive^.Path then begin Result:= True; Break; end; pme:= getmntent(mtab); end; endmntent(mtab); if not Result and TryMount then Result := MountDrive(Drive); end; {$ELSE} begin Result:= True; end; {$ENDIF} function mbFileGetAttrNoLinks(const FileName: String): TFileAttrs; {$IFDEF UNIX} var Info: BaseUnix.Stat; begin if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result := Info.st_mode else Result := faInvalidAttributes; end; {$ELSE} var LinkTarget: String; begin LinkTarget := mbReadAllLinks(FileName); if LinkTarget <> '' then Result := mbFileGetAttr(LinkTarget) else Result := faInvalidAttributes; end; {$ENDIF} function mbFileNameToSysEnc(const LongPath: String): String; {$IFDEF MSWINDOWS} begin Result:= CeUtf8ToSys(LongPath); if Pos('?', Result) <> 0 then mbGetShortPathName(LongPath, Result); end; {$ELSE} begin Result:= UTF8ToSys(LongPath); end; {$ENDIF} function mbGetEnvironmentVariable(const sName: String): String; {$IFDEF MSWINDOWS} var wsName: UnicodeString; smallBuf: array[0..1023] of WideChar; largeBuf: PWideChar; dwResult: DWORD; begin Result := EmptyStr; wsName := UTF8Decode(sName); dwResult := GetEnvironmentVariableW(PWideChar(wsName), @smallBuf[0], Length(smallBuf)); if dwResult > Length(smallBuf) then begin // Buffer not large enough. largeBuf := GetMem(SizeOf(WideChar) * dwResult); if Assigned(largeBuf) then try dwResult := GetEnvironmentVariableW(PWideChar(wsName), largeBuf, dwResult); if dwResult > 0 then Result := UTF16ToUTF8(UnicodeString(largeBuf)); finally FreeMem(largeBuf); end; end else if dwResult > 0 then Result := UTF16ToUTF8(UnicodeString(smallBuf)); end; {$ELSE} begin Result:= SysToUTF8(GetEnvironmentVariable(UTF8ToSys(sName))); end; {$ENDIF} function mbSetEnvironmentVariable(const sName, sValue: String): Boolean; {$IFDEF MSWINDOWS} var wsName, wsValue: WideString; begin wsName:= UTF8Decode(sName); wsValue:= UTF8Decode(sValue); Result:= SetEnvironmentVariableW(PWideChar(wsName), PWideChar(wsValue)); end; {$ELSE} begin Result:= (setenv(PAnsiChar(CeUtf8ToSys(sName)), PAnsiChar(CeUtf8ToSys(sValue)), 1) = 0); end; {$ENDIF} function ExtractRootDir(const FileName: String): String; {$IFDEF UNIX} begin Result:= ExcludeTrailingPathDelimiter(FindMountPointPath(ExcludeTrailingPathDelimiter(FileName))); end; {$ELSE} begin Result:= ExtractFileDrive(FileName); end; {$ENDIF} procedure FixFormIcon(Handle: LCLType.HWND); begin // Workaround for Lazarus issue 0018484. // Any form that sets its own icon should call this in FormCreate. {$IFDEF WINDOWS} Windows.SetClassLong(Handle, GCL_HICONSM, 0); Windows.SetClassLong(Handle, GCL_HICON, 0); {$ENDIF} end; procedure HideConsoleWindow; begin {$IFDEF WINDOWS} if isConsole then ShowWindow(GetConsoleWindow, SW_HIDE); {$ENDIF} end; procedure FixDateNamesToUTF8; var i: Integer; begin with DefaultFormatSettings do begin for i := Low(ShortMonthNames) to High(ShortMonthNames) do ShortMonthNames[i] := SysToUTF8(ShortMonthNames[i]); for i := Low(ShortDayNames) to High(ShortDayNames) do ShortDayNames[i] := SysToUTF8(ShortDayNames[i]); for i := Low(LongMonthNames) to High(LongMonthNames) do LongMonthNames[i] := SysToUTF8(LongMonthNames[i]); for i := Low(LongDayNames) to High(LongDayNames) do LongDayNames[i] := SysToUTF8(LongDayNames[i]); end; end; function ParamStrU(Param: Integer): String; {$IFDEF UNIX} begin Result:= SysToUTF8(ObjPas.ParamStr(Param)); end; {$ELSE} begin if (Param >= 0) and (Param < argc) then Result:= StrPas(argv[Param]) else Result:= EmptyStr; end; {$ENDIF} function ParamStrU(const Param: String): String; {$IFDEF UNIX} begin Result:= SysToUTF8(Param); end; {$ELSE} begin Result:= Param; end; {$ENDIF} { EInvalidQuoting } constructor EInvalidQuoting.Create; begin inherited Create(rsMsgInvalidQuoting); end; { GetCurrentUserName } function GetCurrentUserName : String; {$IF DEFINED(MSWINDOWS)} var wsUserName : UnicodeString; dwUserNameLen : DWORD = UNLEN + 1; begin SetLength(wsUserName, dwUserNameLen); if GetUserNameW(PWideChar(wsUserName), dwUserNameLen) then begin SetLength(wsUserName, dwUserNameLen - 1); Result := UTF16ToUTF8(wsUserName); end else Result := 'Unknown'; end; {$ELSEIF DEFINED(UNIX)} begin Result:= SysToUTF8(GetEnvironmentVariable('USER')); end; {$ENDIF} { GetComputerNetName } function GetComputerNetName: String; {$IF DEFINED(MSWINDOWS)} var Size: DWORD = MAX_PATH; Buffer: array[0..Pred(MAX_PATH)] of WideChar; begin if GetComputerNameW(Buffer, Size) then Result := UTF16ToUTF8(UnicodeString(Buffer)) else Result := '' end; {$ELSEIF DEFINED(UNIX)} begin Result:= SysToUTF8(GetHostName); end; {$ENDIF} end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/platform/ufindex.pas������������������������������������������������������������0000644�0001750�0000144�00000024223�12620706714�017307� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains UTF8 versions of Find(First, Next) functions and other stuff Copyright (C) 2006-2010 Koblov Alexander (Alexx2000@mail.ru) 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 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA } unit uFindEx; {$mode objfpc}{$H+} interface uses SysUtils, DCBasicTypes {$IFDEF UNIX} , BaseUnix, uMasks {$ENDIF} {$IFDEF MSWINDOWS} , Windows {$ENDIF} {$IFDEF DARWIN} , MacOSAll {$ENDIF} ; type {$IFDEF UNIX} TUnixFindData = record DirPtr: PDir; //en> directory pointer for reading directory sPath: String; //en> file name path Mask: TMask; //en> object that will check mask StatRec: Stat; end; PUnixFindData = ^TUnixFindData; {$ENDIF} PSearchRecEx = ^TSearchRecEx; TSearchRecEx = Record Time : DCBasicTypes.TFileTime; // modification time Size : Int64; Attr : TFileAttrs; Name : String; ExcludeAttr : TFileAttrs; {$ifdef unix} FindHandle : Pointer; {$else unix} FindHandle : THandle; {$endif unix} {$if defined(Win32) or defined(WinCE) or defined(Win64)} FindData : Windows.TWin32FindDataW; {$endif} {$ifdef netware_clib} FindData : TNetwareFindData; {$endif} {$ifdef netware_libc} FindData : TNetwareLibcFindData; {$endif} {$ifdef MacOS} FindData : TMacOSFindData; {$endif} end; function FindFirstEx (const Path : String; Attr : TFileAttrs; out SearchRec : TSearchRecEx) : Longint; function FindNextEx (var SearchRec : TSearchRecEx) : Longint; procedure FindCloseEx(var SearchRec: TSearchRecEx); function CheckAttrMask(DefaultAttr : TFileAttrs; sAttr : String; Attr : TFileAttrs) : Boolean; implementation uses LCLProc, uDebug {$IFDEF MSWINDOWS} , LazUTF8, uMyWindows {$ENDIF} {$IFDEF UNIX} , uMyUnix, Unix, FileUtil, DCOSUtils, DCFileAttributes {$ENDIF}; const faSpecial = faVolumeID or faDirectory; function mbFindMatchingFile(var SearchRec: TSearchRecEx): Integer; {$IFDEF MSWINDOWS} begin with SearchRec do begin while (FindData.dwFileAttributes and ExcludeAttr) <> 0 do if not FindNextFileW(FindHandle, FindData) then Exit(GetLastError); FindData.dwFileAttributes:= ExtractFileAttributes(FindData); Time:= TWinFileTime(FindData.ftLastWriteTime); Size:= (Int64(FindData.nFileSizeHigh) shl 32) + FindData.nFileSizeLow; Attr:= FindData.dwFileAttributes; Name:= UTF16ToUTF8(UnicodeString(FindData.cFileName)); end; Result:= 0; end; {$ELSE} var UnixFindData: PUnixFindData; WinAttr: LongInt; begin Result:= -1; UnixFindData:= PUnixFindData(SearchRec.FindHandle); if UnixFindData = nil then Exit; if not Assigned(UnixFindData^.Mask) or UnixFindData^.Mask.Matches(SearchRec.Name) then begin if fpLStat(UTF8ToSys(UnixFindData^.sPath + SearchRec.Name), @UnixFindData^.StatRec) >= 0 then begin with UnixFindData^.StatRec do begin WinAttr:= UnixToWinFileAttr(SearchRec.Name, TFileAttrs(UnixFindData^.StatRec.st_mode)); if (WinAttr and SearchRec.ExcludeAttr) <> 0 then Exit; SearchRec.Size:= Int64(st_size); SearchRec.Time:= DCBasicTypes.TFileTime(st_mtime); SearchRec.Attr:= DCBasicTypes.TFileAttrs(st_mode); end; Result:= 0; end; end; end; {$ENDIF} function FindFirstEx (const Path : String; Attr : TFileAttrs; out SearchRec : TSearchRecEx) : Longint; {$IFDEF MSWINDOWS} var wPath: WideString; begin wPath:= UTF8Decode(Path); SearchRec.ExcludeAttr:= not Attr and faSpecial; SearchRec.FindHandle:= FindFirstFileW(PWideChar(wPath), SearchRec.FindData); // if error then exit if SearchRec.FindHandle = INVALID_HANDLE_VALUE then Exit(GetLastError); Result:= mbFindMatchingFile(SearchRec); end; {$ELSE} var UnixFindData: PUnixFindData; begin //DCDebug('FindFirstEx with Path == ', Path); { Allocate UnixFindData } New(UnixFindData); FillChar(UnixFindData^, SizeOf(UnixFindData^), 0); SearchRec.FindHandle:= UnixFindData; SearchRec.ExcludeAttr:= not Attr and faSpecial; with UnixFindData^ do begin sPath:= ExtractFileDir(Path); if sPath = '' then sPath := mbGetCurrentDir; sPath:= IncludeTrailingBackSlash(sPath); // Assignment of SearchRec.Name also needed if the path points to a specific // file and only a single mbFindMatchingFile() check needs to be done below. SearchRec.Name:= ExtractFileName(Path); // Check if searching for all files. If yes don't need to use Mask. if (SearchRec.Name <> '*') and (SearchRec.Name <> '') then // '*.*' searches for files with a dot in name so mask needs to be checked. begin // If searching for single specific file, just check if it exists and exit. if (Pos('?', SearchRec.Name) = 0) and (Pos('*', SearchRec.Name) = 0) then begin if FileExists(UTF8ToSys(Path)) and (mbFindMatchingFile(SearchRec) = 0) then Exit(0) else Exit(-1); end; Mask := TMask.Create(SearchRec.Name); end; DirPtr:= fpOpenDir(PChar(UTF8ToSys(sPath))); end; Result:= FindNextEx(SearchRec); end; {$ENDIF} function FindNextEx (var SearchRec : TSearchRecEx) : Longint; {$IFDEF MSWINDOWS} begin if FindNextFileW(SearchRec.FindHandle, SearchRec.FindData) then begin Result:= mbFindMatchingFile(SearchRec); end else Result:= GetLastError; end; {$ELSE} var UnixFindData: PUnixFindData absolute SearchRec.FindHandle; PtrDirEnt: pDirent; begin Result:= -1; if UnixFindData = nil then Exit; if UnixFindData^.DirPtr = nil then Exit; PtrDirEnt:= fpReadDir(UnixFindData^.DirPtr); while PtrDirEnt <> nil do begin SearchRec.Name:= SysToUTF8(PtrDirEnt^.d_name); Result:= mbFindMatchingFile(SearchRec); if Result = 0 then // if found then exit Exit else // else read next PtrDirEnt:= fpReadDir(UnixFindData^.DirPtr); end; end; {$ENDIF} procedure FindCloseEx(var SearchRec: TSearchRecEx); {$IFDEF MSWINDOWS} begin if SearchRec.FindHandle <> INVALID_HANDLE_VALUE then Windows.FindClose(SearchRec.FindHandle); end; {$ELSE} var UnixFindData: PUnixFindData absolute SearchRec.FindHandle; begin if UnixFindData = nil then Exit; if UnixFindData^.DirPtr <> nil then fpCloseDir(UnixFindData^.DirPtr); if Assigned(UnixFindData^.Mask) then UnixFindData^.Mask.Free; Dispose(UnixFindData); SearchRec.FindHandle:= nil; end; {$ENDIF} function CheckAttrMask(DefaultAttr : TFileAttrs; sAttr : String; Attr : TFileAttrs) : Boolean; {$IFDEF WINDOWS} begin Result := True; if (DefaultAttr <> 0) and (DefaultAttr <> faAnyFile) then Result := (Attr and DefaultAttr) = DefaultAttr; if Length(sAttr) < 4 then Exit; if Result then begin if sAttr[1] = 'r' then Result := Result and ((Attr and faReadOnly) = faReadOnly) else if sAttr[1] = '-' then Result := Result and ((Attr and faReadOnly) <> faReadOnly); //WriteLN('After r == ', BoolToStr(Result)); if sAttr[2] = 'a' then Result := Result and ((Attr and faArchive) = faArchive) else if sAttr[2] = '-' then Result := Result and ((Attr and faArchive) <> faArchive); //WriteLN('After a == ', BoolToStr(Result)); if sAttr[3] = 'h' then Result := Result and ((Attr and faHidden) = faHidden) else if sAttr[3] = '-' then Result := Result and ((Attr and faHidden) <> faHidden); //WriteLN('After h == ', BoolToStr(Result)); if sAttr[4] = 's' then Result := Result and ((Attr and faSysFile) = faSysFile) else if sAttr[4] = '-' then Result := Result and ((Attr and faSysFile) <> faSysFile); end; end; {$ELSE} begin Result := True; if (DefaultAttr <> 0) and (DefaultAttr <> faAnyFile) then begin if Boolean(DefaultAttr and faDirectory) then Result := Result and fpS_ISDIR(Attr); DCDebug('Result do == ', BoolToStr(Result)); if Boolean(DefaultAttr and faSymLink) then Result := Result and ((Attr and S_IFLNK) = S_IFLNK); DCDebug('Result after == ', BoolToStr(Result)); end; if Length(sAttr) < 9 then Exit; if sAttr[1]='r' then Result:=Result and ((Attr AND S_IRUSR) = S_IRUSR) else if sAttr[1]='-' then Result:=Result and ((Attr AND S_IRUSR) <> S_IRUSR); if sAttr[2]='w' then Result:=Result and ((Attr AND S_IWUSR) = S_IWUSR) else if sAttr[2]='-' then Result:=Result and ((Attr AND S_IWUSR) <> S_IWUSR); if sAttr[3]='x' then Result:=Result and ((Attr AND S_IXUSR) = S_IXUSR) else if sAttr[3]='-' then Result:=Result and ((Attr AND S_IXUSR) <> S_IXUSR); if sAttr[4]='r' then Result:=Result and ((Attr AND S_IRGRP) = S_IRGRP) else if sAttr[4]='-' then Result:=Result and ((Attr AND S_IRGRP) <> S_IRGRP); if sAttr[5]='w' then Result:=Result and ((Attr AND S_IWGRP) = S_IWGRP) else if sAttr[5]='-' then Result:=Result and ((Attr AND S_IWGRP) <> S_IWGRP); if sAttr[6]='x' then Result:=Result and ((Attr AND S_IXGRP) = S_IXGRP) else if sAttr[6]='-' then Result:=Result and ((Attr AND S_IXGRP) <> S_IXGRP); if sAttr[7]='r' then Result:=Result and ((Attr AND S_IROTH) = S_IROTH) else if sAttr[7]='-' then Result:=Result and ((Attr AND S_IROTH) <> S_IROTH); if sAttr[8]='w' then Result:=Result and ((Attr AND S_IWOTH) = S_IWOTH) else if sAttr[8]='-' then Result:=Result and ((Attr AND S_IWOTH) <> S_IWOTH); if sAttr[9]='x' then Result:=Result and ((Attr AND S_IXOTH) = S_IXOTH) else if sAttr[9]='-' then Result:=Result and ((Attr AND S_IXOTH) <> S_IXOTH); if sAttr[3]='s' then Result:=Result and ((Attr AND STAT_ISUID) = STAT_ISUID); if sAttr[6]='s' then Result:=Result and ((Attr AND STAT_ISGID) = STAT_ISGID); end; {$ENDIF} end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fattributesedit.pas�������������������������������������������������������������0000644�0001750�0000144�00000014322�11740433676�017230� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Graphic control that allows choosing file attributes. Copyright (C) 2010 Przemysław Nagay (cobines@gmail.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 fAttributesEdit; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, ExtCtrls, StdCtrls, Buttons; type { TfrmAttributesEdit } TfrmAttributesEdit = class(TForm) btnOk: TBitBtn; btnCancel: TBitBtn; btnReset: TButton; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; cbDirectory: TCheckBox; cbSymlink: TCheckBox; cbCompressed: TCheckBox; cbEncrypted: TCheckBox; cbTemporary: TCheckBox; cbSparse: TCheckBox; cbArchive: TCheckBox; cbHidden: TCheckBox; cbReadOnly: TCheckBox; cbSystem: TCheckBox; edtTextAttrs: TEdit; gbWinGeneral: TGroupBox; gbNtfsAttributes: TGroupBox; lblAttrBitsStr: TLabel; lblAttrGroupStr: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblTextAttrs: TLabel; lblExec: TLabel; lblRead: TLabel; lblWrite: TLabel; pnlTextAttrs: TPanel; pnlTopAttrs: TPanel; pnlUnixAttrs: TPanel; pnlWinAttrs: TPanel; pnlButtons: TPanel; procedure btnCancelClick(Sender: TObject); procedure btnOkClick(Sender: TObject); procedure btnResetClick(Sender: TObject); procedure cbAttrCheckBoxChanged(Sender: TObject); procedure cbAttrCheckBoxClicked(Sender: TObject); private FOnOk: TNotifyEvent; FUpdatingControls: Boolean; function GetAttrsAsText: String; procedure UpdateText; function GetCheckStr(CheckBox: TCheckBox; AttrStr: String): String; public constructor Create(TheOwner: TComponent); override; procedure Reset; property OnOk: TNotifyEvent read FOnOk write FOnOk; property AttrsAsText: String read GetAttrsAsText; end; implementation {$R *.lfm} procedure TfrmAttributesEdit.btnOkClick(Sender: TObject); begin if Assigned(FOnOk) then FOnOk(Self); Close; end; procedure TfrmAttributesEdit.btnCancelClick(Sender: TObject); begin Close; end; procedure TfrmAttributesEdit.btnResetClick(Sender: TObject); begin Reset; end; procedure TfrmAttributesEdit.cbAttrCheckBoxChanged(Sender: TObject); begin // Note: OnChange may work incorrectly with tri-state checkboxes, // so OnClick is also used. UpdateText; end; procedure TfrmAttributesEdit.cbAttrCheckBoxClicked(Sender: TObject); begin UpdateText; end; constructor TfrmAttributesEdit.Create(TheOwner: TComponent); begin FOnOk := nil; FUpdatingControls := False; inherited Create(TheOwner); {$IF DEFINED(MSWINDOWS)} pnlWinAttrs.Visible := True; {$ELSEIF DEFINED(UNIX)} pnlUnixAttrs.Visible := True; {$ENDIF} end; procedure TfrmAttributesEdit.Reset; begin FUpdatingControls := True; cbDirectory.State := cbGrayed; cbSymlink.State := cbGrayed; cbReadOwner.State := cbGrayed; cbWriteOwner.State := cbGrayed; cbExecOwner.State := cbGrayed; cbReadGroup.State := cbGrayed; cbWriteGroup.State := cbGrayed; cbExecGroup.State := cbGrayed; cbReadOther.State := cbGrayed; cbWriteOther.State := cbGrayed; cbExecOther.State := cbGrayed; cbSuid.State := cbGrayed; cbSgid.State := cbGrayed; cbSticky.State := cbGrayed; cbArchive.State := cbGrayed; cbReadOnly.State := cbGrayed; cbHidden.State := cbGrayed; cbSystem.State := cbGrayed; cbCompressed.State := cbGrayed; cbEncrypted.State := cbGrayed; cbTemporary.State := cbGrayed; cbSparse.State := cbGrayed; edtTextAttrs.Text := ''; edtTextAttrs.Text := ''; FUpdatingControls := False; end; function TfrmAttributesEdit.GetAttrsAsText: String; begin Result := edtTextAttrs.Text; end; procedure TfrmAttributesEdit.UpdateText; var s: string = ''; begin if not FUpdatingControls then begin FUpdatingControls := True; s := s + GetCheckStr(cbDirectory, 'd'); s := s + GetCheckStr(cbSymlink, 'l'); if pnlUnixAttrs.Visible then begin s := s + GetCheckStr(cbReadOwner, 'ur'); s := s + GetCheckStr(cbWriteOwner, 'uw'); s := s + GetCheckStr(cbExecOwner, 'ux'); s := s + GetCheckStr(cbReadGroup, 'gr'); s := s + GetCheckStr(cbWriteGroup, 'gw'); s := s + GetCheckStr(cbExecGroup, 'gx'); s := s + GetCheckStr(cbReadOther, 'or'); s := s + GetCheckStr(cbWriteOther, 'ow'); s := s + GetCheckStr(cbExecOther, 'ox'); s := s + GetCheckStr(cbSuid, 'us'); s := s + GetCheckStr(cbSgid, 'gs'); s := s + GetCheckStr(cbSticky, 'sb'); end; if pnlWinAttrs.Visible then begin s := s + GetCheckStr(cbArchive, 'a'); s := s + GetCheckStr(cbReadOnly, 'r'); s := s + GetCheckStr(cbHidden, 'h'); s := s + GetCheckStr(cbSystem, 's'); s := s + GetCheckStr(cbCompressed, 'c'); s := s + GetCheckStr(cbEncrypted, 'e'); s := s + GetCheckStr(cbTemporary, 't'); s := s + GetCheckStr(cbSparse, 's'); end; edtTextAttrs.Text := s; FUpdatingControls := False; end; end; function TfrmAttributesEdit.GetCheckStr(CheckBox: TCheckBox; AttrStr: String): String; begin case CheckBox.State of cbChecked: Result := AttrStr + '+'; cbUnchecked: Result := AttrStr + '-'; else Result := ''; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackinfodlg.lrt����������������������������������������������������������������0000644�0001750�0000144�00000001202�12023046500�016441� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMPACKINFODLG.CAPTION=Properties of packed file TFRMPACKINFODLG.LBLPACKEDFILE.CAPTION=File: TFRMPACKINFODLG.LBLPACKER.CAPTION=Packer: TFRMPACKINFODLG.LBLORIGINALSIZE.CAPTION=Original size: TFRMPACKINFODLG.LBLPACKEDSIZE.CAPTION=Packed size: TFRMPACKINFODLG.LBLCOMPRESSIONRATIO.CAPTION=Compression ratio: TFRMPACKINFODLG.LBLMETHOD.CAPTION=Method: TFRMPACKINFODLG.LBLDATE.CAPTION=Date: TFRMPACKINFODLG.LBLTIME.CAPTION=Time: TFRMPACKINFODLG.LBLATTRIBUTES.CAPTION=Attributes: TFRMPACKINFODLG.BTNCLOSE.CAPTION=&Close TFRMPACKINFODLG.BTNUNPACKANDEXEC.CAPTION=&Unpack and execute TFRMPACKINFODLG.BTNUNPACKALLANDEXEC.CAPTION=Unpack &all and execute ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uthumbnails.pas�����������������������������������������������������������������0000644�0001750�0000144�00000026152�12630372731�016356� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uThumbnails; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, Types, fgl, DCClassesUtf8, uFile; type { TCreatePreviewHandler } TCreatePreviewHandler = function(const aFileName: String; aSize: TSize): TBitmap; { TBitmapList } TBitmapList = specialize TFPGObjectList<TBitmap>; { TThumbnailManager } TThumbnailManager = class private FBitmap: TBitmap; FBackColor: TColor; FFileName: String; FThumbPath: String; FProviderList: array of TCreatePreviewHandler; static; private procedure DoCreatePreviewText; function GetPreviewFileExt(const sFileExt: String): String; function GetPreviewFileName(const sFileName: String): String; function CreatePreviewImage(const Graphic: TGraphic): TBitmap; function ReadMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; function WriteMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; class function ReadFileName(const aThumb: String; out aFileName: String): Boolean; public constructor Create(BackColor: TColor); function CreatePreview(const aFile: TFile): TBitmap; function CreatePreview(const FullPathToFile: String): TBitmap; function RemovePreview(const FullPathToFile: String): Boolean; public class procedure CompactCache; class procedure RegisterProvider(Provider: TCreatePreviewHandler); class function GetPreviewScaleSize(aWidth, aHeight: Integer): TSize; end; implementation uses FileUtil, LazFileUtils, Forms, uDebug, DCOSUtils, uFileProcs, DCStrUtils, uReSample, uGlobsPaths, uGlobs, uPixmapManager, URIParser, md5, uFileSystemFileSource; const ThumbSign: QWord = $0000235448554D42; // '#0 #0 # T H U M B' function TThumbnailManager.GetPreviewFileExt(const sFileExt: String): String; begin if (sFileExt = 'jpg') or (sFileExt = 'jpeg') or (sFileExt = 'bmp') then Result:= 'jpg' else Result:= 'png'; end; function TThumbnailManager.GetPreviewFileName(const sFileName: String): String; begin Result:= MD5Print(MD5String(sFileName)); end; function TThumbnailManager.CreatePreviewImage(const Graphic: TGraphic): TBitmap; var aSize: TSize; bmpTemp: TBitmap = nil; begin try // Calculate aspect width and height of thumb aSize:= GetPreviewScaleSize(Graphic.Width, Graphic.Height); bmpTemp:= TBitMap.Create; bmpTemp.Assign(Graphic); Result:= TBitMap.Create; Result.SetSize(aSize.cx, aSize.cy); Stretch(bmpTemp, Result, ResampleFilters[2].Filter, ResampleFilters[2].Width); finally FreeAndNil(bmpTemp); end; end; procedure TThumbnailManager.DoCreatePreviewText; var x: LongInt; ARect: TRect; sStr: String; tFile: THandle; begin FBitmap:= TBitmap.Create; with FBitmap do begin SetSize(gThumbSize.cx, gThumbSize.cy); Canvas.Brush.Color:= clWhite; Canvas.FillRect(Canvas.ClipRect); Canvas.Font.Color:= clBlack; Canvas.Font.Size := gThumbSize.cy div 16; tFile:= mbFileOpen(FFileName, fmOpenRead or fmShareDenyNone); if (tFile <> feInvalidHandle) then begin for x:= 0 to 8 do begin if not FileReadLn(tFile, sStr) then Break; Canvas.TextOut(0, x * Canvas.Font.Size * 3 div 2, sStr); end; FileClose(tFile); end; Application.ProcessMessages; end; end; function TThumbnailManager.ReadMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; var sFileName: AnsiString; begin Result:= True; try // Read metadata position from last 4 byte of file FileStream.Seek(-4, soEnd); FileStream.Seek(FileStream.ReadDWord, soBeginning); // Check signature if (FileStream.ReadQWord <> NtoBE(ThumbSign)) then Exit(False); // Read thumbnail metadata Result:= (URIToFilename(FileStream.ReadAnsiString, sFileName) and SameText(sFileName, aFile.FullPath)); if not Result then Exit; Result:= (aFile.Size = FileStream.ReadQWord) and (QWord(aFile.ModificationTime) = FileStream.ReadQWord); if not Result then Exit; Result:= (gThumbSize.cx = FileStream.ReadWord) and (gThumbSize.cy = FileStream.ReadWord); except Result:= False; end; end; function TThumbnailManager.WriteMetaData(const aFile: TFile; FileStream: TFileStreamEx): Boolean; var iEnd: Int64; begin Result:= True; try // Get original file size iEnd:= FileStream.Seek(0, soEnd); // Write signature FileStream.WriteQWord(NtoBE(ThumbSign)); // Write thumbnail meta data FileStream.WriteAnsiString(FilenameToURI(aFile.FullPath)); FileStream.WriteQWord(aFile.Size); FileStream.WriteQWord(QWord(aFile.ModificationTime)); FileStream.WriteWord(gThumbSize.cx); FileStream.WriteWord(gThumbSize.cy); // Write original file size FileStream.WriteDWord(iEnd); except Result:= False; end; end; class function TThumbnailManager.ReadFileName(const aThumb: String; out aFileName: String): Boolean; var fsFileStream: TFileStreamEx; begin try fsFileStream:= TFileStreamEx.Create(aThumb, fmOpenRead or fmShareDenyNone); try // Read metadata position from last 4 byte of file fsFileStream.Seek(-4, soEnd); fsFileStream.Seek(fsFileStream.ReadDWord, soBeginning); // Check signature if (fsFileStream.ReadQWord <> NtoBE(ThumbSign)) then Exit(False); // Read source file name Result:= URIToFilename(fsFileStream.ReadAnsiString, aFileName); finally fsFileStream.Free; end; except Result:= False; end; end; constructor TThumbnailManager.Create(BackColor: TColor); begin FBackColor:= BackColor; FThumbPath:= gpCacheDir + PathDelim + 'thumbnails'; // If directory not exists then create it if not mbDirectoryExists(FThumbPath) then mbForceDirectory(FThumbPath); end; function TThumbnailManager.RemovePreview(const FullPathToFile: String): Boolean; var sExt, sName: String; begin sExt:= GetPreviewFileExt(ExtractOnlyFileExt(FullPathToFile)); sName:= GetPreviewFileName(FullPathToFile); // Delete thumb from cache Result:= mbDeleteFile(FThumbPath + PathDelim + sName + '.' + sExt); end; function TThumbnailManager.CreatePreview(const aFile: TFile): TBitmap; var I: Integer; sFullPathToFile, sThumbFileName, sExt: String; fsFileStream: TFileStreamEx = nil; Picture: TPicture = nil; begin Result:= nil; try Picture:= TPicture.Create; try sFullPathToFile:= aFile.FullPath; sExt:= GetPreviewFileExt(ExtractOnlyFileExt(sFullPathToFile)); sThumbFileName:= FThumbPath + PathDelim + GetPreviewFileName(sFullPathToFile) + '.' + sExt; // If thumbnail already exists in cache for this file then load it if mbFileExists(sThumbFileName) then begin fsFileStream:= TFileStreamEx.Create(sThumbFileName, fmOpenRead or fmShareDenyNone); try if ReadMetaData(aFile, fsFileStream) then begin fsFileStream.Position:= 0; Picture.LoadFromStreamWithFileExt(fsFileStream, sExt); Result:= TBitmap.Create; Result.Assign(Picture.Graphic); Exit; end; finally FreeAndNil(fsFileStream); end; end; // Try to create thumnail using providers for I:= Low(FProviderList) to High(FProviderList) do begin Result:= FProviderList[I](sFullPathToFile, gThumbSize); if Assigned(Result) then Break; end; if not Assigned(Result) then begin sExt:= ExtractOnlyFileExt(sFullPathToFile); // Create thumb for image files if GetGraphicClassForFileExtension(sExt) <> nil then begin fsFileStream:= TFileStreamEx.Create(sFullPathToFile, fmOpenRead or fmShareDenyNone); with Picture do try LoadFromStreamWithFileExt(fsFileStream, sExt); if (Graphic.Width > gThumbSize.cx) or (Graphic.Height > gThumbSize.cy) then Result:= CreatePreviewImage(Graphic) else begin Result:= TBitmap.Create; Result.Assign(Graphic); Exit; // No need to save in cache end; finally FreeAndNil(fsFileStream); end end // Create thumb for text files else if (mbFileExists(sFullPathToFile)) and (FileIsText(sFullPathToFile)) then begin FFileName:= sFullPathToFile; // Some widgetsets can not draw from background // thread so call draw text function from main thread TThread.Synchronize(nil, @DoCreatePreviewText); Exit(FBitmap); // No need to save in cache end; end; // Save created thumb to cache if gThumbSave and Assigned(Result) and not IsInPath(FThumbPath, sFullPathToFile, False, False) then begin Picture.Bitmap.Assign(Result); sExt:= GetPreviewFileExt(sExt); try fsFileStream:= TFileStreamEx.Create(sThumbFileName, fmCreate); try Picture.SaveToStreamWithFileExt(fsFileStream, sExt); WriteMetaData(aFile, fsFileStream); finally FreeAndNil(fsFileStream); end; except on e: EStreamError do DCDebug(['Cannot save thumbnail to file "', sThumbFileName, '": ', e.Message]); end; end; if not Assigned(Result) then Raise Exception.Create(EmptyStr); finally FreeAndNil(Picture); end; except Result:= PixMapManager.LoadBitmapEnhanced(sFullPathToFile, gIconsSize, True, FBackColor); end; end; function TThumbnailManager.CreatePreview(const FullPathToFile: String): TBitmap; var aFile: TFile; begin aFile := TFileSystemFileSource.CreateFileFromFile(FullPathToFile); try Result:= CreatePreview(aFile); finally FreeAndNil(AFile); end; end; class procedure TThumbnailManager.CompactCache; var I: Integer; aFileName: String; aFileList: TStringList; begin aFileList:= FindAllFiles(gpCacheDir + PathDelim + 'thumbnails'); for I:= 0 to Pred(aFileList.Count) do begin if not (ReadFileName(aFileList[I], aFileName) and mbFileExists(aFileName)) then begin mbDeleteFile(aFileList[I]); end; end; aFileList.Free; end; class procedure TThumbnailManager.RegisterProvider(Provider: TCreatePreviewHandler); begin SetLength(FProviderList, Length(FProviderList) + 1); FProviderList[High(FProviderList)]:= Provider; end; class function TThumbnailManager.GetPreviewScaleSize(aWidth, aHeight: Integer): TSize; begin if aWidth > aHeight then begin Result.cx:= gThumbSize.cx; Result.cy:= Result.cx * aHeight div aWidth; if Result.cy > gThumbSize.cy then begin Result.cy:= gThumbSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end else begin Result.cy:= gThumbSize.cy; Result.cx:= Result.cy * aWidth div aHeight; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmain.pas�����������������������������������������������������������������������0000644�0001750�0000144�00000553143�12673524511�015124� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Licence : GNU GPL v 2.0 Copyright (C) 2006-2016 Alexander Koblov (Alexx2000@mail.ru) Main Dialog window based on: Seksi Commander (radekc.regnet.cz) ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz Main Dialog window and other stuff contributors: based on (heavy rewriten): main Unit of PFM : Peter's File Manager --------------------------------------- Copyright : Peter Cernoch 2002 Contact : pcernoch@volny.cz Licence : GNU GPL v 2.0 contributors: Copyright (C) 2008 Vitaly Zotov (vitalyzotov@mail.ru) } unit fMain; {$mode objfpc}{$H+} interface uses ufavoritetabs, Graphics, Forms, Menus, Controls, StdCtrls, ExtCtrls, ActnList, Buttons, SysUtils, Classes, SynEdit, LCLType, ComCtrls, LResources, KASToolBar, KASComboBox, uCmdBox, uFilePanelSelect, uBriefFileView, uFileView, uFileSource, uFileViewNotebook, uFile, LCLVersion, uOperationsManager, uFileSourceOperation, uDrivesList, uTerminal, DCClassesUtf8, DCXmlConfig, uDrive, uDriveWatcher, uDCVersion, uMainCommands, uFormCommands, uOperationsPanel, KASToolItems, uKASToolItemsExtended, uCmdLineParams, uOSForms {$IF DEFINED(LCLQT)} , Qt4, QtWidgets {$ELSEIF DEFINED(LCLGTK2)} , Glib2, Gtk2 {$ENDIF} ; type TForEachViewFunction = procedure (AFileView: TFileView; UserData: Pointer) of object; { TfrmMain } TfrmMain = class(TAloneForm, IFormCommands) actExtractFiles: TAction; actAddPathToCmdLine: TAction; actFileAssoc: TAction; actFocusCmdLine: TAction; actContextMenu: TAction; actCopyNamesToClip: TAction; actCopyFullNamesToClip: TAction; actCutToClipboard: TAction; actCopyToClipboard: TAction; actChangeDirToRoot: TAction; actCountDirContent: TAction; actCheckSumVerify: TAction; actCheckSumCalc: TAction; actClearLogFile: TAction; actClearLogWindow: TAction; actChangeDir: TAction; actAddFilenameToCmdLine: TAction; actAddPathAndFilenameToCmdLine: TAction; actCopyNoAsk: TAction; actChangeDirToParent: TAction; actEditPath: TAction; actHorizontalFilePanels: TAction; actGoToFirstFile: TAction; actGoToLastFile: TAction; actCompareDirectories: TAction; actCmdLineNext: TAction; actCmdLinePrev: TAction; actBriefView: TAction; actColumnsView: TAction; actChangeDirToHome: TAction; actCopyFileDetailsToClip: TAction; actFlatView: TAction; actConfigDirHotList: TAction; actCopyPathOfFilesToClip: TAction; actCopyPathNoSepOfFilesToClip: TAction; actDoAnyCmCommand: TAction; actCloseDuplicateTabs: TAction; actCopyAllTabsToOpposite: TAction; actTreeView: TAction; actToggleFullscreenConsole: TAction; actSrcOpenDrives: TAction; actRightReverseOrder: TAction; actLeftReverseOrder: TAction; actRightFlatView: TAction; actLeftFlatView: TAction; actRightSortByAttr: TAction; actRightSortByDate: TAction; actRightSortBySize: TAction; actRightSortByExt: TAction; actRightSortByName: TAction; actLeftSortByAttr: TAction; actLeftSortByDate: TAction; actLeftSortBySize: TAction; actLeftSortByExt: TAction; actLeftSortByName: TAction; actLeftThumbView: TAction; actRightThumbView: TAction; actRightColumnsView: TAction; actLeftColumnsView: TAction; actRightBriefView: TAction; actLeftBriefView: TAction; actWorkWithDirectoryHotlist: TAction; actUniversalSingleDirectSort: TAction; actViewLogFile: TAction; actLoadTabs: TAction; actSaveTabs: TAction; actSyncDirs: TAction; actThumbnailsView: TAction; actShellExecute: TAction; actRenameTab: TAction; actOperationsViewer: TAction; actNetworkDisconnect: TAction; actNetworkQuickConnect: TAction; actNetworkConnect: TAction; actViewHistory: TAction; actViewHistoryPrev: TAction; actViewHistoryNext: TAction; actLoadSelectionFromClip: TAction; actLoadSelectionFromFile: TAction; actSaveSelectionToFile: TAction; actSaveSelection: TAction; actRestoreSelection: TAction; actSwitchIgnoreList: TAction; actTestArchive: TAction; actQuickView: TAction; actOpenBar: TAction; actSetFileProperties: TAction; actQuickFilter: TAction; actRenameNoAsk: TAction; actPanelsSplitterPerPos: TAction; actMinimize: TAction; actRightEqualLeft: TAction; actLeftEqualRight: TAction; actPasteFromClipboard: TAction; actExchange: TAction; actEditComment: TAction; actHelpIndex: TAction; actVisitHomePage: TAction; actKeyboard: TAction; actPrevTab: TAction; actNextTab: TAction; actCloseAllTabs: TAction; actSetTabOptionNormal: TAction; actSetTabOptionPathLocked: TAction; actSetTabOptionPathResets: TAction; actSetTabOptionDirsInNewTab: TAction; actUnmarkCurrentExtension: TAction; actMarkCurrentExtension: TAction; actWipe: TAction; actOpenDirInNewTab: TAction; actTargetEqualSource: TAction; actOpen: TAction; actQuickSearch: TAction; actShowButtonMenu: TAction; actOpenArchive: TAction; actTransferRight: TAction; actTransferLeft: TAction; actRightOpenDrives: TAction; actLeftOpenDrives: TAction; actOpenVirtualFileSystemList: TAction; actPackFiles: TAction; actCloseTab: TAction; actNewTab: TAction; actConfigToolbars: TAction; actDebugShowCommandParameters: TAction; btnF10: TSpeedButton; btnF3: TSpeedButton; btnF4: TSpeedButton; btnF5: TSpeedButton; btnF6: TSpeedButton; btnF7: TSpeedButton; btnF8: TSpeedButton; btnF9: TSpeedButton; btnLeftDirectoryHotlist: TSpeedButton; btnRightDirectoryHotlist: TSpeedButton; dskLeft: TKASToolBar; dskRight: TKASToolBar; edtCommand: TComboBoxWithDelItems; imgLstActions: TImageList; imgLstDirectoryHotlist: TImageList; lblRightDriveInfo: TLabel; lblLeftDriveInfo: TLabel; lblCommandPath: TLabel; mnuConfigureFavoriteTabs: TMenuItem; mnuRewriteFavoriteTabs: TMenuItem; mnuCreateNewFavoriteTabs: TMenuItem; mnuReloadActiveFavoriteTabs: TMenuItem; mnuFavoriteTabs: TMenuItem; mnuCloseDuplicateTabs: TMenuItem; miCloseDuplicateTabs: TMenuItem; mnuTreeView: TMenuItem; mnuCmdConfigDirHotlist: TMenuItem; mnuLoadTabs: TMenuItem; mnuSaveTabs: TMenuItem; miLine38: TMenuItem; miFlatView: TMenuItem; miMakeDir: TMenuItem; miWipe: TMenuItem; miDelete: TMenuItem; miLine50: TMenuItem; miCopyFileDetailsToClip: TMenuItem; mnuCmdSyncDirs: TMenuItem; mnuContextRenameOnly: TMenuItem; mnuContextCopy: TMenuItem; mnuContextOpen: TMenuItem; mnuContextLine1: TMenuItem; mnuContextLine2: TMenuItem; mnuContextFileProperties: TMenuItem; mnuContextDelete: TMenuItem; mnuContextView: TMenuItem; mnuThumbnailsView: TMenuItem; mnuColumnsView: TMenuItem; mnuBriefView: TMenuItem; miLine33: TMenuItem; mnuAllOperStart: TMenuItem; mnuAllOperStop: TMenuItem; mnuAllOperPause: TMenuItem; mnuAllOperProgress: TMenuItem; miCompareDirectories: TMenuItem; miLine37: TMenuItem; miRenameTab: TMenuItem; pnlMain: TPanel; tbChangeDir: TMenuItem; mnuShowHorizontalFilePanels: TMenuItem; miLine20: TMenuItem; miNetworkDisconnect: TMenuItem; miNetworkQuickConnect: TMenuItem; miNetworkConnect: TMenuItem; mnuNetwork: TMenuItem; pnlDskLeft: TPanel; pnlDiskLeftInner: TPanel; pnlDskRight: TPanel; pnlDiskRightInner: TPanel; Timer: TTimer; PanelAllProgress: TPanel; pbxRightDrive: TPaintBox; pbxLeftDrive: TPaintBox; tbPaste: TMenuItem; tbCopy: TMenuItem; tbCut: TMenuItem; tbSeparator: TMenuItem; mnuLoadSelectionFromClip: TMenuItem; mnuLoadSelectionFromFile: TMenuItem; mnuSaveSelectionToFile: TMenuItem; mnuRestoreSelection: TMenuItem; mnuSaveSelection: TMenuItem; miLine47: TMenuItem; mnuTestArchive: TMenuItem; mnuQuickView: TMenuItem; miLine32: TMenuItem; miLine14: TMenuItem; mnuTabOptionNormal: TMenuItem; mnuTabOptionDirsInNewTabs: TMenuItem; mnuTabOptions: TMenuItem; miTabOptionPathResets: TMenuItem; miTabOptionDirsInNewTab: TMenuItem; miTabOptionPathLocked: TMenuItem; miTabOptionNormal: TMenuItem; miTabOptions: TMenuItem; miLine19: TMenuItem; mnuSetFileProperties: TMenuItem; mnuShowOperations: TMenuItem; miLine13: TMenuItem; miLogClear: TMenuItem; miLogHide: TMenuItem; miLine25: TMenuItem; miLogSelectAll: TMenuItem; miLogCopy: TMenuItem; miLine24: TMenuItem; miTrayIconRestore: TMenuItem; miLine8: TMenuItem; miTrayIconExit: TMenuItem; mnuCheckSumCalc: TMenuItem; mnuCheckSumVerify: TMenuItem; mnuCountDirContent: TMenuItem; miLine22: TMenuItem; miLine18: TMenuItem; mnuHelpIndex: TMenuItem; mnuHelpVisitHomePage: TMenuItem; mnuHelpKeyboard: TMenuItem; MenuItem2: TMenuItem; mnuPrevTab: TMenuItem; mnuNextTab: TMenuItem; miLine17: TMenuItem; miLine16: TMenuItem; mnuTabOptionPathLocked: TMenuItem; mnuTabOptionPathResets: TMenuItem; mnuCloseAllTabs: TMenuItem; mnuCloseTab: TMenuItem; miLine15: TMenuItem; mnuOpenDirInNewTab: TMenuItem; mnuNewTab: TMenuItem; miCloseAllTabs: TMenuItem; miCloseTab: TMenuItem; miNewTab: TMenuItem; miEditComment: TMenuItem; mnuMarkCurrentExtension: TMenuItem; mnuTabs: TMenuItem; mnuUnmarkCurrentExtension: TMenuItem; miSymLink: TMenuItem; miHardLink: TMenuItem; miCancel: TMenuItem; miLine12: TMenuItem; miCopy: TMenuItem; miMove: TMenuItem; mi8020: TMenuItem; mi7030: TMenuItem; mi6040: TMenuItem; mi5050: TMenuItem; mi4060: TMenuItem; mi3070: TMenuItem; mi2080: TMenuItem; miCopyFullNamesToClip: TMenuItem; miCopyNamesToClip: TMenuItem; mnuFileAssoc: TMenuItem; nbConsole: TPageControl; pgConsole: TTabSheet; pnlCmdLine: TPanel; MainSplitter: TPanel; MainToolBar: TKASToolBar; mnuOpenVFSList: TMenuItem; mnuExtractFiles: TMenuItem; pmContextMenu: TPopupMenu; pmSplitterPercent: TPopupMenu; pnlCommand: TPanel; pnlKeys: TPanel; pnlLeftTools: TPanel; pnlRightTools: TPanel; pnlRight: TPanel; pnlLeft: TPanel; btnLeftDrive: TSpeedButton; btnLeftHome: TSpeedButton; btnLeftUp: TSpeedButton; btnLeftRoot: TSpeedButton; btnRightDrive: TSpeedButton; btnRightHome: TSpeedButton; btnRightUp: TSpeedButton; btnRightRoot: TSpeedButton; LogSplitter: TSplitter; pmColumnsMenu: TPopupMenu; pmDropMenu: TPopupMenu; pmTabMenu: TPopupMenu; pmTrayIconMenu: TPopupMenu; pmLogMenu: TPopupMenu; seLogWindow: TSynEdit; btnRightEqualLeft: TSpeedButton; btnLeftEqualRight: TSpeedButton; ConsoleSplitter: TSplitter; tbDelete: TMenuItem; tbEdit: TMenuItem; mnuMain: TMainMenu; pnlNotebooks: TPanel; pnlDisk: TPanel; mnuHelp: TMenuItem; mnuHelpAbout: TMenuItem; mnuShow: TMenuItem; mnuShowName: TMenuItem; mnuShowExtension: TMenuItem; mnuShowTime: TMenuItem; mnuShowSize: TMenuItem; mnuShowAttrib: TMenuItem; miLine7: TMenuItem; mnuShowReverse: TMenuItem; mnuShowReread: TMenuItem; mnuFiles: TMenuItem; mnuPackFiles : TMenuItem; mnuFilesSplit: TMenuItem; mnuFilesCombine: TMenuItem; mnuCmd: TMenuItem; mnuCmdDirHotlist: TMenuItem; miLine2: TMenuItem; mnuFilesSpace: TMenuItem; mnuFilesAttrib: TMenuItem; mnuFilesProperties: TMenuItem; miLine6: TMenuItem; mnuCmdSwapSourceTarget: TMenuItem; mnuCmdTargetIsSource: TMenuItem; miLine3: TMenuItem; mnuFilesShwSysFiles: TMenuItem; miLine1: TMenuItem; mnuFilesHardLink: TMenuItem; mnuFilesSymLink: TMenuItem; mnuConfig: TMenuItem; mnuConfigOptions: TMenuItem; mnuMark: TMenuItem; mnuMarkSGroup: TMenuItem; mnuMarkUGroup: TMenuItem; mnuMarkSAll: TMenuItem; mnuMarkUAll: TMenuItem; mnuMarkInvert: TMenuItem; miLine5: TMenuItem; mnuCmdSearch: TMenuItem; actionLst: TActionList; actExit: TAction; actView: TAction; actEdit: TAction; actCopy: TAction; actRename: TAction; actMakeDir: TAction; actDelete: TAction; actAbout: TAction; actShowSysFiles: TAction; actOptions: TAction; mnuFilesCmpCnt: TMenuItem; actCompareContents: TAction; actShowMainMenu: TAction; actRefresh: TAction; actSearch: TAction; actDirHotList: TAction; actMarkMarkAll: TAction; actMarkInvert: TAction; actMarkUnmarkAll: TAction; pmHotList: TPopupMenu; actMarkPlus: TAction; actMarkMinus: TAction; actSymLink: TAction; actHardLink: TAction; actReverseOrder: TAction; actSortByName: TAction; actSortByExt: TAction; actSortBySize: TAction; actSortByDate: TAction; actSortByAttr: TAction; miLine4: TMenuItem; miExit: TMenuItem; actMultiRename: TAction; miMultiRename: TMenuItem; actCopySamePanel: TAction; actRenameOnly: TAction; actEditNew: TAction; actDirHistory: TAction; pmDirHistory: TPopupMenu; actShowCmdLineHistory: TAction; actRunTerm: TAction; miLine9: TMenuItem; miRunTerm: TMenuItem; actCalculateSpace: TAction; actFileProperties: TAction; actFileLinker: TAction; actFileSpliter: TAction; pmToolBar: TPopupMenu; MainTrayIcon: TTrayIcon; TreePanel: TPanel; TreeSplitter: TSplitter; ShellTreeView: TCustomTreeView; miLine10: TMenuItem; miLine11: TMenuItem; miLine21: TMenuItem; miLine23: TMenuItem; miLine26: TMenuItem; miLine39: TMenuItem; miLine40: TMenuItem; actSetAllTabsOptionNormal: TAction; actSetAllTabsOptionPathLocked: TAction; actSetAllTabsOptionPathResets: TAction; actSetAllTabsOptionDirsInNewTab: TAction; actConfigFolderTabs: TAction; actLoadFavoriteTabs: TAction; actConfigFavoriteTabs: TAction; actSaveFavoriteTabs: TAction; actReloadFavoriteTabs: TAction; actNextFavoriteTabs: TAction; actPreviousFavoriteTabs: TAction; pmFavoriteTabs: TPopupMenu; mnuRenameTab: TMenuItem; mnuConfigFolderTabs: TMenuItem; mnuConfigFavoriteTabs: TMenuItem; mnuConfigurationFavoriteTabs: TMenuItem; mnuSaveFavoriteTabs: TMenuItem; mnuLoadFavoriteTabs: TMenuItem; mnuConfigurationFolderTabs: TMenuItem; mnuSetAllTabsOptionNormal: TMenuItem; mnuSetAllTabsOptionPathLocked: TMenuItem; mnuSetAllTabsOptionPathResets: TMenuItem; mnuSetAllTabsOptionDirsInNewTab: TMenuItem; miConfigFolderTabs: TMenuItem; miConfigFavoriteTabs: TMenuItem; miNextTab: TMenuItem; miPrevTab: TMenuItem; miSaveTabs: TMenuItem; miLoadTabs: TMenuItem; miSaveFavoriteTabs: TMenuItem; miLoadFavoriteTabs: TMenuItem; miSetAllTabsOptionNormal: TMenuItem; miSetAllTabsOptionPathLocked: TMenuItem; miSetAllTabsOptionPathResets: TMenuItem; miSetAllTabsOptionDirsInNewTab: TMenuItem; miOpenDirInNewTab: TMenuItem; actResaveFavoriteTabs: TAction; procedure actExecute(Sender: TObject); procedure btnF8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ; function MainToolBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String; procedure mnuAllOperStartClick(Sender: TObject); procedure mnuAllOperStopClick(Sender: TObject); procedure mnuAllOperPauseClick(Sender: TObject); procedure mnuAllOperProgressClick(Sender: TObject); procedure btnF8Click(Sender: TObject); procedure btnLeftClick(Sender: TObject); procedure btnLeftDirectoryHotlistClick(Sender: TObject); procedure btnRightClick(Sender: TObject); procedure btnRightDirectoryHotlistClick(Sender: TObject); procedure btnDriveMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ConsoleSplitterCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); procedure dskLeftResize(Sender: TObject); procedure dskRightResize(Sender: TObject); procedure dskLeftRightToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); procedure dskToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure lblAllProgressPctClick(Sender: TObject); procedure MainToolBarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainToolBarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); procedure MainToolBarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainToolBarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure miLogMenuClick(Sender: TObject); procedure miTrayIconExitClick(Sender: TObject); procedure miTrayIconRestoreClick(Sender: TObject); procedure PanelButtonClick(Button: TSpeedButton; FileView: TFileView); procedure ShellTreeViewDblClick(Sender: TObject); procedure ShellTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure ShellTreeViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure tbDeleteClick(Sender: TObject); procedure dskLeftToolButtonClick(Sender: TObject); procedure dskRightToolButtonClick(Sender: TObject); procedure btnVirtualDriveClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormDropFiles(Sender: TObject; const FileNames: array of String); procedure FormUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); procedure FormWindowStateChange(Sender: TObject); procedure MainSplitterDblClick(Sender: TObject); procedure MainSplitterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainSplitterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure MainSplitterMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure MainTrayIconClick(Sender: TObject); procedure lblDriveInfoDblClick(Sender: TObject); procedure MainToolBarDragDrop(Sender, Source: TObject; X, Y: Integer); procedure MainToolBarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); function MainToolBarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; procedure MainToolBarMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure frmMainClose(Sender: TObject; var CloseAction: TCloseAction); procedure frmMainAfterShow(Data: PtrInt); procedure frmMainShow(Sender: TObject); procedure mnuDropClick(Sender: TObject); procedure mnuSplitterPercentClick(Sender: TObject); procedure mnuTabMenuExecute(Sender: TObject); procedure mnuTabMenuClick(Sender: TObject); procedure nbPageAfterMouseDown(Data: PtrInt); procedure nbPageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure nbPageChanged(Sender: TObject); procedure nbPageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure NotebookCloseTabClicked(Sender: TObject); procedure pmDropMenuClose(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure edtCommandKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure pmToolBarPopup(Sender: TObject); procedure ShellTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); procedure pnlLeftResize(Sender: TObject); procedure pnlLeftRightDblClick(Sender: TObject); procedure pnlNotebooksResize(Sender: TObject); procedure pnlRightResize(Sender: TObject); procedure sboxDrivePaint(Sender: TObject); procedure PaintDriveFreeBar(Sender: TObject; bIndUseGradient:boolean; pIndForeColor,pIndBackColor:TColor); procedure seLogWindowSpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); function FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; const NewPath : String): Boolean; procedure FileViewAfterChangePath(FileView: TFileView); procedure FileViewActivate(FileView: TFileView); procedure FileViewFilesChanged(FileView: TFileView); procedure edtCommandKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtCommandExit(Sender: TObject); procedure tbChangeDirClick(Sender: TObject); procedure tbCopyClick(Sender: TObject); procedure tbEditClick(Sender: TObject); procedure OnUniqueInstanceMessage(Sender: TObject; Params: TCommandLineParams); procedure tbPasteClick(Sender: TObject); procedure AllProgressOnUpdateTimer(Sender: TObject); {$IFDEF LCLQT} private QEventHook: QObject_hookH; function QObjectEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; {$ENDIF} {$IF DEFINED(LCLGTK2)} procedure WindowStateUpdate(Data: PtrInt); {$ENDIF} private { Private declarations } FMainSplitterPos: Double; PanelSelected: TFilePanelSelect; DrivesList : TDrivesList; MainSplitterHintWnd: THintWindow; HiddenToTray: Boolean; HidingTrayIcon: Boolean; // @true if the icon is in the process of hiding nbLeft, nbRight: TFileViewNotebook; cmdConsole: TCmdBox; FCommands: TMainCommands; FInitializedView: Boolean; {en Used to pass drag&drop parameters to pmDropMenu. Single variable can be used, because the user can do only one menu popup at a time. } FDropParams: TDropParams; FDrivesListPopup: TDrivesListPopup; FOperationsPanel: TOperationsPanel; // frost_asm begin // mainsplitter MainSplitterLeftMouseBtnDown: Boolean; MainSplitterMouseDownX, MainSplitterMouseDownY: Integer; FResizingFilePanels: Boolean; // lastWindowState lastWindowState:TWindowState; // frost_asm end // for dragging buttons and etc NumberOfMoveButton, NumberOfNewMoveButton: integer; Draging : boolean; FUpdateDiskCount: Boolean; procedure CheckCommandLine(ShiftEx: TShiftState; var Key: Word); function ExecuteCommandFromEdit(sCmd: String; bRunInTerm: Boolean): Boolean; procedure SetMainSplitterPos(AValue: Double); procedure SetPanelSelected(AValue: TFilePanelSelect); procedure UpdateActionIcons; procedure UpdateHotDirIcons; procedure TypeInCommandLine(Str: String); procedure AddVirtualDriveButton(dskPanel: TKASToolBar); procedure AddSpecialButtons(dskPanel: TKASToolBar); procedure HideToTray; procedure RestoreFromTray; procedure ShowTrayIcon(bShow: Boolean); procedure HideTrayIconDelayed(Data: PtrInt); procedure PopupDragDropMenu(var DropParams: TDropParams); procedure CloseNotebook(ANotebook: TFileViewNotebook); procedure DriveListDriveSelected(Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect); procedure DriveListClose(Sender: TObject); function FindMatchingDrive(Path: String): Integer; procedure UpdateDriveToolbarSelection(DriveToolbar: TKAStoolBar; FileView: TFileView); procedure UpdateDriveButtonSelection(DriveButton: TSpeedButton; FileView: TFileView); procedure UpdateSelectedDrive(ANoteBook: TFileViewNotebook); procedure SetPanelDrive(aPanel: TFilePanelSelect; Drive: PDrive; ActivateIfNeeded: Boolean); procedure OnDriveWatcherEvent(EventType: TDriveWatcherEvent; const ADrive: PDrive); procedure AppActivate(Sender: TObject); procedure AppEndSession(Sender: TObject); procedure AppQueryEndSession(var Cancel: Boolean); procedure AppException(Sender: TObject; E: Exception); procedure AppShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); {en Convert toolbar configuration from .bar file to global config. } procedure ConvertToolbarBarConfig(BarFileName: String); procedure ConvertIniToolbarItem(Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String); procedure CreateDefaultToolbar; procedure EditToolbarButton(Button: TKASToolButton); procedure ToolbarExecuteCommand(ToolItem: TKASToolItem); procedure ToolbarExecuteProgram(ToolItem: TKASToolItem); procedure LeftDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure RightDriveBarExecuteDrive(ToolItem: TKASToolItem); procedure SetDragCursor(Shift: TShiftState); public constructor Create(TheOwner: TComponent); override; Function ActiveFrame: TFileView; // get Active frame Function NotActiveFrame: TFileView; // get NotActive frame :) function ActiveNotebook: TFileViewNotebook; function NotActiveNotebook: TFileViewNotebook; function FrameLeft: TFileView; function FrameRight: TFileView; procedure ForEachView(CallbackFunction: TForEachViewFunction; UserData: Pointer); //check selected count and generate correct msg, parameters is lng indexs Function GetFileDlgStr(sLngOne, sLngMulti : String; Files: TFiles):String; procedure HotDirSelected(Sender:TObject); procedure HotDirActualSwitchToDir(Index:longint); procedure HistorySelected(Sender:TObject); procedure ViewHistorySelected(Sender:TObject); procedure ViewHistoryPrevSelected(Sender:TObject); procedure ViewHistoryNextSelected(Sender:TObject); procedure CreatePopUpDirHistory; procedure ShowFileViewHistory; procedure ShowFileViewHistory(FromFileSourceIndex, FromPathIndex, ToFileSourceIndex, ToPathIndex: Integer); procedure miHotAddOrConfigClick(Sender: TObject); {en Returns @true if copy operation has been successfully started. } function CopyFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; {en Returns @true if move operation has been successfully started. } function MoveFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; function CopyFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; // this is for F5 and Shift+F5 function MoveFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; overload; procedure GetDestinationPathAndMask(SourceFiles: TFiles; TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); overload; procedure GetDestinationPathAndMask(SourceFiles: TFiles; SourceFileSource: IFileSource; var TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); overload; procedure SetActiveFrame(panel: TFilePanelSelect); procedure SetActiveFrame(FileView: TFileView); procedure UpdateShellTreeView; procedure UpdateTreeViewPath; procedure UpdateTreeView; procedure UpdateDiskCount; procedure UpdateSelectedDrives; procedure CreateDiskPanel(dskPanel : TKASToolBar); function CreateFileView(sType: String; Page: TFileViewPage; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer): TFileView; function CreateFileView(sType: String; Page: TFileViewPage; AConfig: TXmlConfig; ANode: TXmlNode): TFileView; procedure AssignEvents(AFileView: TFileView); function RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True; ConfirmCloseLocked: integer = 0; ShowButtonAll: Boolean = False): LongInt; procedure LoadTabsIni(ANoteBook: TFileViewNotebook); procedure LoadTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook); procedure SaveTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook; ASaveHistory: boolean); procedure LoadTheseTabsWithThisConfig(Config: TXmlConfig; ABranch:string; Source, Destination:TTabsConfigLocation; DestinationToKeep : TTabsConfigLocation; var TabsAlreadyDestroyedFlags:TTabsFlagsAlreadyDestroyed); procedure ToggleConsole; procedure UpdateWindowView; procedure MinimizeWindow; procedure LoadTabs; procedure LoadTabsCommandLine(Params: TCommandLineParams); procedure LoadWindowState; procedure SaveWindowState; procedure LoadMainToolbar; procedure SaveMainToolBar; function IsCommandLineVisible: Boolean; procedure ShowDrivesList(APanel: TFilePanelSelect); procedure ExecuteCommandLine(bRunInTerm: Boolean); procedure UpdatePrompt; procedure UpdateFreeSpace(Panel: TFilePanelSelect); procedure ReLoadTabs(ANoteBook: TFileViewNotebook); procedure ToggleFullscreenConsole; {en This function is called from various points to handle dropping files into the panel. It converts drop effects available on the system into TDragDropOperation operations. Handles freeing DropParams. } procedure DropFiles(var DropParams: TDropParams); {en Performs all drag&drop actions. Frees DropParams. } procedure DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); property Commands: TMainCommands read FCommands implements IFormCommands; property SelectedPanel: TFilePanelSelect read PanelSelected write SetPanelSelected; property LeftTabs: TFileViewNotebook read nbLeft; property RightTabs: TFileViewNotebook read nbRight; property MainSplitterPos: Double read FMainSplitterPos write SetMainSplitterPos; end; var frmMain: TfrmMain; Cons: TConsoleThread = nil; implementation {$R *.lfm} uses uFileProcs, uShellContextMenu, Math, LCLIntf, Dialogs, uGlobs, uLng, uMasks, fCopyMoveDlg, uQuickViewPanel, uShowMsg, uDCUtils, uLog, uGlobsPaths, LCLProc, uOSUtils, uPixMapManager, uDragDropEx, uKeyboard, uFileSystemFileSource, fViewOperations, uMultiListFileSource, uFileSourceOperationTypes, uFileSourceCopyOperation, uFileSourceMoveOperation, uFileSourceProperty, uFileSourceExecuteOperation, uArchiveFileSource, uThumbFileView, uShellExecute, fSymLink, fHardLink, uExceptions, uUniqueInstance, Clipbrd, uFileSourceOperationOptionsUI, uDebug, uHotkeyManager, uFileSourceUtil, uTempFileSystemFileSource, XMLRead, DCOSUtils, DCStrUtils, fOptions, fOptionsFrame, fOptionsToolbar, uHotDir, uFileSorting, DCBasicTypes, foptionsDirectoryHotlist, uConnectionManager {$IFDEF COLUMNSFILEVIEW_VTV} , uColumnsFileViewVtv {$ELSE} , uColumnsFileView {$ENDIF} // TODO: remove when switch to Lazarus 1.6 {$IF (lcl_fullversion < 1060000)} , uShellCtrls {$ELSE} , ShellCtrls {$ENDIF} ; const HotkeysCategory = 'Main'; DCToolItemClipboardHeader = 'DOUBLECMD#TOOLBAR#XMLDATA'; TCToolbarClipboardHeader = 'TOTALCMD#BAR#DATA'; DCToolbarClipboardHeader = 'DOUBLECMD#BAR#DATA'; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT)} var LastActiveWindow: TCustomForm = nil; {$ENDIF} {$IFDEF LCLQT} var CloseQueryResult: Boolean = False; {$ENDIF} {$IFDEF LCLGTK2} var MinimizedWindowButton: Boolean = False; {$ENDIF} var FunctionButtonsCaptions: array[0..7] of record ACaption: String; ACommand: String; end = ((ACaption: ''; ACommand: 'cm_View'), (ACaption: ''; ACommand: 'cm_Edit'), (ACaption: ''; ACommand: 'cm_Copy'), (ACaption: ''; ACommand: 'cm_Rename'), (ACaption: ''; ACommand: 'cm_MakeDir'), (ACaption: ''; ACommand: 'cm_Delete'), (ACaption: ''; ACommand: 'cm_RunTerm'), (ACaption: ''; ACommand: 'cm_Exit')); function HistoryIndexesToTag(aFileSourceIndex, aPathIndex: Integer): Longint; begin Result := (aFileSourceIndex << 16) or aPathIndex; end; procedure HistoryIndexesFromTag(aTag: Longint; out aFileSourceIndex, aPathIndex: Integer); begin aFileSourceIndex := aTag >> 16; aPathIndex := aTag and ((1<<16) - 1); end; procedure TfrmMain.FormCreate(Sender: TObject); function CreateNotebook(aParent: TWinControl; aSide: TFilePanelSelect): TFileViewNotebook; begin Result := TFileViewNotebook.Create(aParent, aSide); Result.Align := alClient; Result.Options := [nboHidePageListPopup]; Result.OnCloseTabClicked := @NotebookCloseTabClicked; Result.OnMouseDown := @nbPageMouseDown; Result.OnMouseUp := @nbPageMouseUp; Result.OnChange := @nbPageChanged; Result.OnDblClick := @pnlLeftRightDblClick; end; function GenerateTitle():String; var ServernameString: String; begin ServernameString := ''; if Length(UniqueInstance.ServernameByUser) > 0 then ServernameString := ' [' + UniqueInstance.ServernameByUser + ']'; Result := Format('%s%s %s build %s; %s', ['Double Commander', ServernameString, dcVersion, dcRevision, dcBuildDate] ); end; var HMMainForm: THMForm; I: Integer; begin Application.OnException := @AppException; Application.OnActivate := @AppActivate; Application.OnShowHint := @AppShowHint; Application.OnEndSession := @AppEndSession; Application.OnQueryEndSession := @AppQueryEndSession; // Use LCL's method of dropping files from external // applications if we don't support it ourselves. if not IsExternalDraggingSupported then frmMain.OnDropFiles := @FormDropFiles; {$IF DEFINED(DARWIN)} // MainForm receives in Mac OS closing events on system shortcut Command-Q // See details at http://doublecmd.sourceforge.net/mantisbt/view.php?id=712 Application.MainForm.OnClose := @frmMainClose; Application.MainForm.OnCloseQuery := @FormCloseQuery; {$ENDIF} ConvertToolbarBarConfig(gpCfgDir + 'default.bar'); CreateDefaultToolbar; //Caption of main window Self.Caption := GenerateTitle(); // Remove the initial caption of the button, which is just a text of the associated action. // The text would otherwise be briefly shown before the drive button was updated. btnLeftDrive.Caption := ''; btnRightDrive.Caption := ''; //Have the correct button label to indicate root btnLeftRoot.Caption:=DirectorySeparator; btnRightRoot.Caption:=DirectorySeparator; for I := 0 to pnlKeys.ControlCount - 1 do FunctionButtonsCaptions[I].ACaption := pnlKeys.Controls[I].Caption; {$IF DEFINED(LCLGTK2)} // Workaround: "Layout and line" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=573 TreePanel.Visible := False; pnlLeftTools.Visible := False; pnlRightTools.Visible := False; PanelAllProgress.Visible := False; {$ENDIF} InitPropStorage(Self); PanelSelected:=fpLeft; HMMainForm := HotMan.Register(Self, HotkeysCategory); HotMan.Register(edtCommand, 'Command Line'); nbLeft := CreateNotebook(pnlLeft, fpLeft); nbRight := CreateNotebook(pnlRight, fpRight); FDrivesListPopup := TDrivesListPopup.Create(Self, Self); FDrivesListPopup.OnDriveSelected := @DriveListDriveSelected; FDrivesListPopup.OnClose := @DriveListClose; TDriveWatcher.Initialize(Handle); TDriveWatcher.AddObserver(@OnDriveWatcherEvent); //NOTE: we don't check gOnlyOneAppInstance anymore, because cmdline option "--client" was implemented, // so, we should always listen for the messages if Assigned(UniqueInstance) then UniqueInstance.OnMessage:= @OnUniqueInstanceMessage; MainFormCreate(Self); // Load command line history edtCommand.Items.Assign(glsCmdLineHistory); // Initialize actions. actShowSysFiles.Checked := uGlobs.gShowSystemFiles; actHorizontalFilePanels.Checked := gHorizontalFilePanels; AllowDropFiles := not uDragDropEx.IsExternalDraggingSupported; MainToolBar.AddToolItemExecutor(TKASCommandItem, @ToolbarExecuteCommand); MainToolBar.AddToolItemExecutor(TKASProgramItem, @ToolbarExecuteProgram); // Use the same tooltips for some left and right panel butttons. btnRightDirectoryHotlist.Hint := btnLeftDirectoryHotlist.Hint; btnRightHome.Hint := btnLeftHome.Hint; btnRightRoot.Hint := btnLeftRoot.Hint; btnRightUp.Hint := btnLeftUp.Hint; { *HotKeys* } if (HotMan.Forms.Count = 0) or (HotMan.Version < hkVersion) then LoadDefaultHotkeyBindings; // Register action list for main form hotkeys. HMMainForm.RegisterActionList(actionlst); { *HotKeys* } LoadWindowState; // frost_asm begin lastWindowState:=WindowState; // frost_asm end UpdateActionIcons; UpdateWindowView; {$IFDEF LCLQT} // Fixes bug - [0000033] "DC cancels shutdown in KDE" // http://doublecmd.sourceforge.net/mantisbt/view.php?id=33 QEventHook:= QObject_hook_create(TQtWidget(Self.Handle).Widget); QObject_hook_hook_events(QEventHook, @QObjectEventFilter); {$ENDIF} LoadTabs; gFavoriteTabsList.AssociatedMainMenuItem := mnuFavoriteTabs; gFavoriteTabsList.RefreshAssociatedMainMenu; // Update selected drive and free space before main form is shown, // otherwise there is a bit of delay. UpdateTreeView; UpdateTreeViewPath; UpdateSelectedDrives; UpdateFreeSpace(fpLeft); UpdateFreeSpace(fpRight); end; procedure TfrmMain.btnLeftClick(Sender: TObject); begin PanelButtonClick(Sender as TSpeedButton, FrameLeft); end; procedure TfrmMain.actExecute(Sender: TObject); var cmd: string; begin cmd := (Sender as TAction).Name; cmd := 'cm_' + Copy(cmd, 4, Length(cmd) - 3); Commands.Commands.ExecuteCommand(cmd, []); end; procedure TfrmMain.btnF8MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Point: TPoint; begin if Button = mbRight then begin Point := (Sender as TControl).ClientToScreen(Classes.Point(X, Y)); ShowTrashContextMenu(Self, Point.X, Point.Y, nil); end; end; procedure TfrmMain.mnuAllOperStopClick(Sender: TObject); begin OperationsManager.StopAll; end; procedure TfrmMain.mnuAllOperPauseClick(Sender: TObject); begin OperationsManager.PauseAll; end; procedure TfrmMain.mnuAllOperProgressClick(Sender: TObject); begin ShowOperationsViewer; end; procedure TfrmMain.mnuAllOperStartClick(Sender: TObject); begin OperationsManager.UnPauseAll; end; procedure TfrmMain.btnF8Click(Sender: TObject); begin if GetKeyShiftStateEx * KeyModifiersShortcut = [ssShift] then Commands.cm_Delete(['trashcan=reversesetting']) else Commands.cm_Delete([]); end; { TfrmMain.btnLeftDirectoryHotlistClick} //To make appear the Directory Hotlist popup menu when pressing "*" button on left // procedure TfrmMain.btnLeftDirectoryHotlistClick(Sender: TObject); var P:TPoint; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(fpLeft); gDirectoryHotlist.PopulateMenuWithHotDir(pmHotList,@HotDirSelected,@miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); p := Classes.Point(btnLeftDirectoryHotlist.Left,btnLeftDirectoryHotlist.Height); p := pnlLeftTools.ClientToScreen(p); pmHotList.PopUp(P.x,P.y); end; procedure TfrmMain.btnRightClick(Sender: TObject); begin PanelButtonClick(Sender as TSpeedButton, FrameRight); end; { TfrmMain.btnRightDirectoryHotlistClick} //To make appear the Directory Hotlist popup menu when pressing "*" button on right // procedure TfrmMain.btnRightDirectoryHotlistClick(Sender: TObject); var P:TPoint; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(fpRight); gDirectoryHotlist.PopulateMenuWithHotDir(pmHotList,@HotDirSelected,@miHotAddOrConfigClick,mpHOTDIRSWITHCONFIG,0); p := Classes.Point(btnRightDirectoryHotlist.Left,btnRightDirectoryHotlist.Height); p := pnlRightTools.ClientToScreen(p); pmHotList.PopUp(P.x,P.y); end; procedure TfrmMain.btnDriveMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; begin if Button = mbRight then with Sender as TSpeedButton do begin if (Tag >= 0) and (Tag < DrivesList.Count) then begin pt.X := X; pt.Y := Y; pt := ClientToScreen(pt); ShowDriveContextMenu(Parent, DrivesList[Tag], pt.X, pt.Y, nil); end; end; end; procedure TfrmMain.ConsoleSplitterCanResize(Sender: TObject; var NewSize: Integer; var Accept: Boolean); begin // ConsoleSplitter is trying to resize pnlCommand, // so NewSize is the new size of pnlCommand. // Instead, resize nbConsole by the same difference. nbConsole.Height := nbConsole.Height + NewSize - pnlCommand.Height; end; procedure TfrmMain.ConvertToolbarBarConfig(BarFileName: String); var ToolBarLoader: TKASToolBarIniLoader; MainToolBarNode: TXmlNode; begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if not Assigned(MainToolBarNode) then begin if mbFileExists(BarFileName) then begin ToolBarLoader := TKASToolBarIniLoader.Create(Commands.Commands); try ToolBarLoader.Load(BarFileName, MainToolBar, nil, @ConvertIniToolbarItem); SaveMainToolBar; SaveGlobs; // Save toolbar and hotkeys mbRenameFile(BarFileName, BarFileName + '.obsolete'); finally ToolBarLoader.Free; end; end; end; end; procedure TfrmMain.dskLeftResize(Sender: TObject); begin pnlDskLeft.ClientHeight := dskLeft.Height + pnlDskLeft.BevelWidth * 2; pnlDiskLeftInner.ClientHeight := dskLeft.Height + pnlDiskLeftInner.BevelWidth * 2; end; procedure TfrmMain.dskRightResize(Sender: TObject); begin pnlDskRight.ClientHeight := dskRight.Height + pnlDskRight.BevelWidth * 2; pnlDiskRightInner.ClientHeight := dskRight.Height + pnlDiskRightInner.BevelWidth * 2; end; procedure TfrmMain.dskRightToolButtonClick(Sender: TObject); var FileView : TFileView; begin if gDriveBar2 then FileView := FrameRight else FileView := ActiveFrame; PanelButtonClick(Sender as TKASToolButton, FileView); end; procedure TfrmMain.dskLeftRightToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var ToolItem: TKASToolItem; DriveItem: TKASDriveItem; begin if Sender is TKASToolButton then begin ToolItem := TKASToolButton(Sender).ToolItem; if ToolItem is TKASDriveItem then begin DriveItem := TKASDriveItem(ToolItem); case GetDropEffectByKeyAndMouse(GetKeyShiftState, mbLeft) of DropCopyEffect: Self.CopyFiles(DriveItem.Drive^.Path, gShowDialogOnDragDrop); DropMoveEffect: Self.MoveFiles(DriveItem.Drive^.Path, gShowDialogOnDragDrop); end; end; end; end; procedure TfrmMain.dskToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin btnDriveMouseUp(Sender, Button, Shift, X, Y); end; procedure TfrmMain.EditToolbarButton(Button: TKASToolButton); var Editor: TOptionsEditor; Options: IOptionsDialog; begin Options := ShowOptions(TfrmOptionsToolbar); Application.ProcessMessages; Editor := Options.GetEditor(TfrmOptionsToolbar); if Assigned(Button) then begin (Editor as TfrmOptionsToolbar).SelectButton(Button.Tag); end; Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; end; procedure TfrmMain.lblAllProgressPctClick(Sender: TObject); begin ShowOperationsViewer; end; procedure TfrmMain.MainToolBarToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer); var I: LongWord; SelectedFiles: TFiles = nil; Param: string; ToolItem: TKASToolItem; begin if (ssShift in GetKeyShiftState) then // Button was moved. SaveMainToolBar else if Sender is TKASToolButton and not Draging then begin ToolItem := TKASToolButton(Sender).ToolItem; if ToolItem is TKASProgramItem then begin SelectedFiles := ActiveFrame.CloneSelectedOrActiveFiles; try if SelectedFiles.Count > 0 then begin Param:= EmptyStr; for I := 0 to SelectedFiles.Count - 1 do begin // Workaround for not fully implemented TMultiListFileSource. if ActiveFrame.FileSource.IsClass(TMultiListFileSource) then Param := Param + QuoteStr(SelectedFiles[I].FullPath) + ' ' else Param := Param + QuoteStr(ActiveFrame.CurrentAddress + SelectedFiles[I].FullPath) + ' '; end; TKASProgramItem(ToolItem).Command := ReplaceEnvVars(ReplaceTilde(TKASProgramItem(ToolItem).Command)); Param := PrepareParameter(Param, nil, []); if not (Commands.Commands.ExecuteCommand(TKASProgramItem(ToolItem).Command, [Param]) = cfrSuccess) then ProcessExtCommandFork(TKASProgramItem(ToolItem).Command, Param, TKASProgramItem(ToolItem).StartPath); end; finally FreeAndNil(SelectedFiles); end; end; end; end; procedure TfrmMain.MainToolBarToolButtonDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer); var aFile: TFile; tmp: Integer; ToolItem: TKASProgramItem; begin if (ssShift in GetKeyShiftState) then begin if not (Source is TKASToolButton) and not Draging then begin aFile := ActiveFrame.CloneActiveFile; try if Assigned(aFile) and aFile.IsNameValid then begin ToolItem := TKASProgramItem.Create; ToolItem.Command := aFile.FullPath; ToolItem.StartPath := aFile.Path; ToolItem.Icon := aFile.FullPath; ToolItem.Hint := ExtractOnlyFileName(aFile.Name); // ToolItem.Text := ExtractOnlyFileName(aFile.Name); MainToolBar.InsertButton(Sender as TKASToolButton, ToolItem); NumberOfMoveButton := (Sender as TSpeedButton).Tag; NumberOfNewMoveButton := (Sender as TSpeedButton).Tag-1; Draging := True; Accept := True; end else begin Accept := False; Exit; end; finally FreeAndNil(aFile); end; end; if (NumberOfMoveButton <> (Sender as TSpeedButton).Tag) then begin Draging := True; if Source is TSpeedButton then MainToolBar.MoveButton((Source as TSpeedButton).Tag, (Sender as TSpeedButton).Tag) else begin tmp:= (Sender as TSpeedButton).Tag; MainToolBar.MoveButton(NumberOfNewMoveButton, (Sender as TSpeedButton).Tag); NumberOfNewMoveButton := tmp; end; NumberOfMoveButton := (Sender as TSpeedButton).Tag; Accept := True; end; end else begin Accept := not Draging and (Sender is TKASToolButton) and (TKASToolButton(Sender).ToolItem is TKASProgramItem); if Accept then begin aFile := ActiveFrame.CloneActiveFile; try Accept := Assigned(aFile) and aFile.IsNameValid; finally FreeAndNil(aFile); end; end; end; end; procedure TfrmMain.MainToolBarToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssShift in Shift) and (Button = mbLeft) then begin (Sender as TKASToolButton).BeginDrag(False, 5); NumberOfMoveButton:= (Sender as TKASToolButton).Tag; end; Draging:= False; end; procedure TfrmMain.MainToolBarToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then MainToolBarMouseUp(Sender, Button, Shift, X, Y); end; function TfrmMain.MainToolBarToolItemShortcutsHint(ToolItem: TKASNormalItem): String; begin Result := ShortcutsToText(TfrmOptionsToolbar.GetShortcuts(ToolItem)); end; procedure TfrmMain.miLogMenuClick(Sender: TObject); begin case (Sender as TMenuItem).Tag of 0: seLogWindow.CopyToClipboard; 1: seLogWindow.SelectAll; 2: Commands.cm_ClearLogWindow([]); 3: ShowLogWindow(False); end; end; procedure TfrmMain.miTrayIconExitClick(Sender: TObject); begin RestoreFromTray; Close; end; procedure TfrmMain.miTrayIconRestoreClick(Sender: TObject); begin RestoreFromTray; end; procedure TfrmMain.PanelButtonClick(Button: TSpeedButton; FileView: TFileView); begin with FileView do begin if Button.Caption = DirectorySeparator then Commands.DoChangeDirToRoot(FileView) else if Button.Caption = '..' then ChangePathToParent(True) else if Button.Caption = '~' then SetFileSystemPath(FileView, GetHomeDir); end; if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(FileView); end; procedure TfrmMain.ShellTreeViewDblClick(Sender: TObject); begin ShellTreeView.Tag := 1; try SetFileSystemPath(ActiveFrame, (ShellTreeView as TShellTreeView).Path); finally ShellTreeView.Tag := 0; end; end; procedure TfrmMain.ShellTreeViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = VK_RETURN then ShellTreeViewDblClick(Sender); end; procedure TfrmMain.ShellTreeViewMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var AFile: TFile; AFiles: TFiles; APoint: TPoint; AFileName: String; begin {$IF DEFINED(MSWINDOWS)} if Button = mbRight then try AFileName:= ExcludeTrailingBackslash((ShellTreeView as TShellTreeView).Path); AFile:= TFileSystemFileSource.CreateFileFromFile(AFileName); try AFiles:= TFiles.Create(AFile.Path); AFiles.Add(AFile); APoint := ShellTreeView.ClientToScreen(Classes.Point(X, Y)); ShowContextMenu(ShellTreeView, AFiles, APoint.X, APoint.Y, False, nil); finally FreeAndNil(AFiles); end; except on E: EContextMenuException do ShowException(E) else; end; {$ENDIF} end; procedure TfrmMain.FormDestroy(Sender: TObject); begin DCDebug('Destroying main form'); if Assigned(HotMan) then begin HotMan.UnRegister(edtCommand); HotMan.UnRegister(Self); end; TDriveWatcher.RemoveObserver(@OnDriveWatcherEvent); TDriveWatcher.Finalize; DCDebug('Drive watcher finished'); // Close all tabs. CloseNotebook(LeftTabs); CloseNotebook(RightTabs); FreeAndNil(DrivesList); {$IFDEF LCLQT} QObject_hook_destroy(QEventHook); {$ENDIF} DCDebug('Main form destroyed'); end; procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: boolean); begin if OperationsManager.OperationsCount > 0 then begin CanClose := MessageDlg(rsMsgFileOperationsActive, rsMsgFileOperationsActiveLong + LineEnding + rsMsgConfirmQuit, mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes; end else CanClose := True; {$IFDEF LCLQT} CloseQueryResult:= CanClose; {$ENDIF} end; procedure TfrmMain.FormDropFiles(Sender: TObject; const FileNames: array of String); var TargetFileView: TFileView = nil; TargetControl: TControl; I: Integer; Files: TFiles = nil; FileNamesList: TStringList = nil; Point: TPoint; DropParams: TDropParams; begin TargetControl := FindLCLControl(Mouse.CursorPos); while TargetControl <> nil do begin if TargetControl = FrameLeft then begin // drop on left panel TargetFileView := FrameLeft; break; end else if TargetControl = FrameRight then begin // drop on right panel TargetFileView := FrameRight; break; end; TargetControl := TargetControl.Parent; end; if Assigned(TargetFileView) then try // fill file list by files FileNamesList := TStringList.Create; for I := Low(FileNames) to High(FileNames) do begin if Length(FileNames[I]) > 0 then FileNamesList.Add(FileNames[I]); end; if FileNamesList.Count > 0 then try Files := TFileSystemFileSource.CreateFilesFromFileList( ExtractFilePath(FileNamesList[0]), FileNamesList); if Files.Count > 0 then begin GetCursorPos(Point); DropParams := TDropParams.Create( Files, GetDropEffectByKeyAndMouse(GetKeyShiftState, mbLeft), Point, False, nil, TargetFileView, TargetFileView.FileSource, TargetFileView.CurrentPath); DropFiles(DropParams); end; except on e: EFileNotFound do MessageDlg(e.Message, mtError, [mbOK], 0); end; finally FreeAndNil(Files); FreeAndNil(FileNamesList); end; end; procedure TfrmMain.DropFiles(var DropParams: TDropParams); begin if Assigned(DropParams) then begin if DropParams.Files.Count > 0 then begin case DropParams.DropEffect of DropMoveEffect: DropParams.TargetPanel.DoDragDropOperation(ddoMove, DropParams); DropCopyEffect: DropParams.TargetPanel.DoDragDropOperation(ddoCopy, DropParams); DropLinkEffect: DropParams.TargetPanel.DoDragDropOperation(ddoSymLink, DropParams); DropAskEffect: begin // Ask the user what he would like to do by displaying a menu. // Returns immediately after showing menu. PopupDragDropMenu(DropParams); end; else FreeAndNil(DropParams); end; end else FreeAndNil(DropParams); end; end; procedure TfrmMain.DoDragDropOperation(Operation: TDragDropOperation; var DropParams: TDropParams); var SourceFileName, TargetFileName: string; begin try with DropParams do begin if Assigned(TargetFileSource) then begin case Operation of ddoMove: if GetDragDropType = ddtInternal then begin if Self.MoveFiles(SourcePanel.FileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop) then begin SourcePanel.MarkFiles(False); end; end else begin Self.MoveFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop); end; ddoCopy: if GetDragDropType = ddtInternal then begin if Self.CopyFiles(SourcePanel.FileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop) then begin SourcePanel.MarkFiles(False); end; end else begin Self.CopyFiles(TFileSystemFileSource.GetFileSource, TargetFileSource, Files, TargetPath, gShowDialogOnDragDrop); end; ddoSymLink, ddoHardLink: begin // Only for filesystem. if ((GetDragDropType = ddtExternal) or (SourcePanel.FileSource.IsClass(TFileSystemFileSource))) and (TargetFileSource.IsClass(TFileSystemFileSource)) then begin // TODO: process multiple files SourceFileName := Files.Items[0].FullPath; TargetFileName := TargetPath + ExtractFileName(SourceFileName); if ((Operation = ddoSymLink) and ShowSymLinkForm(SourceFileName, TargetFileName, TargetPath)) or ((Operation = ddoHardLink) and ShowHardLinkForm(SourceFileName, TargetFileName, TargetPath)) then TargetFileSource.Reload(TargetPath); end else begin msgWarning(rsMsgErrNotSupported); end; end; end; end else msgWarning(rsMsgErrNotSupported); end; finally FreeAndNil(DropParams); end; end; procedure TfrmMain.FormUTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char); begin // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; // Check for certain Ascii keys. if (not ((Length(UTF8Key) = 1) and (UTF8Key[1] in ['-', '*', '+', #0..#32]))) then begin if (gKeyTyping[ktmNone] = ktaCommandLine) {$IFDEF MSWINDOWS} // Allow entering international characters with Ctrl+Alt on Windows, // if there is no action for Ctrl+Alt and command line typing has no modifiers. or (HasKeyboardAltGrKey and (GetKeyShiftStateEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmCtrlAlt] = ktaNone)) {$ENDIF} then begin TypeInCommandLine(UTF8Key); UTF8Key := ''; end; end end; {$IF DEFINED(LCLGTK2)} procedure TfrmMain.WindowStateUpdate(Data: PtrInt); begin Resizing(lastWindowState); end; {$ENDIF} procedure TfrmMain.FormWindowStateChange(Sender: TObject); begin if FUpdateDiskCount and (WindowState <> wsMinimized) then begin UpdateDiskCount; FUpdateDiskCount:= False; end; {$IF DEFINED(LCLGTK2)} if MinimizedWindowButton then begin MinimizedWindowButton:= False; Application.QueueAsyncCall(@WindowStateUpdate, 0); Exit; end; {$ENDIF} if WindowState = wsMinimized then begin // Minimized MainToolBar.Top:= 0; // restore toolbar position if not HiddenToTray then begin {$IF DEFINED(LCLGTK2)} MinimizedWindowButton:= True; {$ENDIF} if gMinimizeToTray or gAlwaysShowTrayIcon then begin HideToTray; end; end else begin // If we get wsMinimized while HiddenToTray is true, // then this means it was sent by LCL when a hidden, minimized window was shown. // We don't react to this message in this case. HiddenToTray := False; {$IF DEFINED(LCLGTK2)} Application.QueueAsyncCall(@WindowStateUpdate, 0); {$ENDIF} end; end else begin // Not minimized // save window state before minimize for // future loading after restore from tray lastWindowState:=WindowState; HiddenToTray := False; end; end; procedure TfrmMain.MainSplitterDblClick(Sender: TObject); begin // To prevent MainSplitterMouseUp processing MainSplitterLeftMouseBtnDown:=false; MainSplitter.ParentColor:=true; // Set splitter to 50/50 Commands.DoPanelsSplitterPerPos(50); end; procedure TfrmMain.MainSplitterMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (Button=mbLeft) and (not MainSplitterLeftMouseBtnDown) then begin // Under Linux MainSplitter.Color:=clBlack Doesn't work MainSplitter.ParentColor:=true; MainSplitter.Color:=ColorToRGB(clBlack); MainSplitterMouseDownX:=X; MainSplitterMouseDownY:=Y; MainSplitterLeftMouseBtnDown:=true; end; end; procedure TfrmMain.MainSplitterMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var APoint: TPoint; Rect: TRect; sHint: String; Moved: Boolean = False; begin if MainSplitterLeftMouseBtnDown then begin if not gHorizontalFilePanels and (MainSplitter.Left + X > MainSplitter.Width) and (MainSplitter.Left + X + MainSplitter.Width < pnlNotebooks.Width) then begin MainSplitter.Left := MainSplitter.Left + X - MainSplitterMouseDownX; Moved := True; end else if gHorizontalFilePanels and (MainSplitter.Top + Y > MainSplitter.Height) and (MainSplitter.Top + Y + MainSplitter.Height < pnlNotebooks.Height) then begin MainSplitter.Top := MainSplitter.Top + Y - MainSplitterMouseDownY; Moved := True; end; if Moved then begin // create hint if not Assigned(MainSplitterHintWnd) then begin MainSplitterHintWnd := THintWindow.Create(nil); MainSplitterHintWnd.Color := Application.HintColor; end; // calculate percent if not gHorizontalFilePanels then FMainSplitterPos:= MainSplitter.Left * 100 / (pnlNotebooks.Width-MainSplitter.Width) else FMainSplitterPos:= MainSplitter.Top * 100 / (pnlNotebooks.Height-MainSplitter.Height); // generate hint text sHint:= FloatToStrF(FMainSplitterPos, ffFixed, 15, 1) + '%'; // calculate hint position Rect:= MainSplitterHintWnd.CalcHintRect(200, sHint, nil); APoint:= Mouse.CursorPos; with Rect do begin Right:= APoint.X + 8 + Right; Bottom:= APoint.Y + 12 + Bottom; Left:= APoint.X + 8; Top:= APoint.Y + 12; end; // show hint MainSplitterHintWnd.ActivateHint(Rect, sHint); end; end; end; procedure TfrmMain.MainSplitterMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin // hide and destroy hint if Assigned(MainSplitterHintWnd) then begin MainSplitterHintWnd.Hide; FreeAndNil(MainSplitterHintWnd); end; if (MainSplitterLeftMouseBtnDown) then begin MainSplitter.ParentColor:=true; MainSplitterLeftMouseBtnDown:=false; if not FResizingFilePanels then begin FResizingFilePanels := True; if not gHorizontalFilePanels then pnlLeft.Width := MainSplitter.Left else pnlLeft.Height := MainSplitter.Top; FResizingFilePanels := False; end; end; end; procedure TfrmMain.MainTrayIconClick(Sender: TObject); begin // Only react to clicks if the icon is not scheduled to be hidden. if not HidingTrayIcon then begin if WindowState = wsMinimized then begin RestoreFromTray; end else begin MinimizeWindow; HideToTray; end; end; end; { TfrmMain.lblDriveInfoDblClick } //Shows the Directory Hotlist at the cursor position after double-clicking the panel. //This is NOT like TC but was here as legacy in DC. Let it there for respect to original authors. //Double-clicking on the "FPathLabel" of the "TFileViewHeader" does the same as in TC and is implemented now. // procedure TfrmMain.lblDriveInfoDblClick(Sender: TObject); begin if tb_activate_panel_on_click in gDirTabOptions then begin if Sender = lblRightDriveInfo then SetActiveFrame(fpRight) else if Sender = lblLeftDriveInfo then SetActiveFrame(fpLeft); end; Commands.cm_DirHotList(['MousePos']); end; procedure TfrmMain.LeftDriveBarExecuteDrive(ToolItem: TKASToolItem); var DriveItem: TKASDriveItem; begin DriveItem := ToolItem as TKASDriveItem; SetPanelDrive(fpLeft, DriveItem.Drive, True); end; procedure TfrmMain.MainToolBarDragDrop(Sender, Source: TObject; X, Y: Integer); var aFile: TFile; ToolItem: TKASProgramItem; begin if not (Source is TSpeedButton) and not Draging and (ssShift in GetKeyShiftState) then begin aFile := ActiveFrame.CloneActiveFile; try if Assigned(aFile) and aFile.IsNameValid then begin ToolItem := TKASProgramItem.Create; ToolItem.Command := aFile.FullPath; ToolItem.StartPath := aFile.Path; ToolItem.Hint := ExtractOnlyFileName(aFile.Name); // ToolItem.Text := ExtractOnlyFileName(aFile.Name); ToolItem.Icon := aFile.FullPath; MainToolBar.AddButton(ToolItem); end; finally FreeAndNil(aFile); end; end; SaveMainToolBar; Draging := False; end; procedure TfrmMain.MainToolBarDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); var aFile: TFile; begin if (ssShift in GetKeyShiftState) and not (Source is TSpeedButton) then begin aFile := ActiveFrame.CloneActiveFile; try Accept := Assigned(aFile) and aFile.IsNameValid; finally FreeAndNil(aFile); end; end else Accept := false; end; function TfrmMain.MainToolBarLoadButtonGlyph(ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap; begin if ToolItem is TKASNormalItem then Result := PixMapManager.LoadBitmapEnhanced(TKASNormalItem(ToolItem).Icon, iIconSize, True, clBackColor, nil) else Result := nil; end; procedure TfrmMain.tbDeleteClick(Sender: TObject); var Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then begin if msgYesNo(Format(rsMsgDelSel, [Button.Hint])) then begin MainToolBar.RemoveButton(Button); SaveMainToolBar; end; end; end; procedure TfrmMain.dskLeftToolButtonClick(Sender: TObject); begin PanelButtonClick(Sender as TKASToolButton, FrameLeft); end; procedure TfrmMain.btnVirtualDriveClick(Sender: TObject); var TargetPanel: TFileView; begin if gDriveBar1 and gDriveBar2 then begin if (Sender as TSpeedButton).Parent = dskLeft then TargetPanel := FrameLeft else TargetPanel := FrameRight; end else TargetPanel := ActiveFrame; Commands.DoOpenVirtualFileSystemList(TargetPanel); end; procedure TfrmMain.MainToolBarMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var Point : TPoint; begin case Button of mbRight: begin Point.X := X; Point.Y := Y; Point := (Sender as TControl).ClientToScreen(Point); if Sender is TKASToolButton then pmToolBar.Tag := PtrInt(Sender) else pmToolBar.Tag := 0; pmToolBar.PopUp(Point.X, Point.Y); end; end; end; procedure TfrmMain.frmMainClose(Sender: TObject; var CloseAction: TCloseAction); begin // Process all queued asynchronous events before closing // (frmMainAfterShow, nbPageAfterMouseDown, etc.). Application.ProcessMessages; if tb_close_duplicate_when_closing in gDirTabOptions then begin Commands.cm_CloseDuplicateTabs(['LeftTabs']); Commands.cm_CloseDuplicateTabs(['RightTabs']); end; if gSaveConfiguration then try DebugLn('Saving configuration'); if Assigned(gIni) then uGlobs.ConvertIniToXml; if gSaveCmdLineHistory then glsCmdLineHistory.Assign(edtCommand.Items); SaveWindowState; if gButtonBar then SaveMainToolBar; SaveGlobs; // Should be last, writes configuration file except on E: Exception do DebugLn('Cannot save main configuration: ', e.Message); end; FreeAndNil(Cons); Application.Terminate; end; procedure TfrmMain.frmMainAfterShow(Data: PtrInt); begin ActiveFrame.SetFocus; HiddenToTray := False; end; procedure TfrmMain.frmMainShow(Sender: TObject); begin DCDebug('frmMain.frmMainShow'); {$IF DEFINED(LCLCARBON) and DECLARED(lcl_fullversion) and (lcl_fullversion >= 093100)} ActiveControl:= ActiveFrame; HiddenToTray := False; {$ELSE} Application.QueueAsyncCall(@frmMainAfterShow, 0); {$ENDIF} end; procedure TfrmMain.mnuDropClick(Sender: TObject); var DropParamsRef: TDropParams; begin if (Sender is TMenuItem) and Assigned(FDropParams) then begin // Make a copy of the reference to parameters and clear FDropParams, // so that they're not destroyed if pmDropMenuClose is called while we're processing. DropParamsRef := FDropParams; FDropParams := nil; // release ownership with DropParamsRef do begin if (Sender as TMenuItem).Name = 'miMove' then begin TargetPanel.DoDragDropOperation(ddoMove, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miCopy' then begin TargetPanel.DoDragDropOperation(ddoCopy, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miSymLink' then begin TargetPanel.DoDragDropOperation(ddoSymLink, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miHardLink' then begin TargetPanel.DoDragDropOperation(ddoHardLink, DropParamsRef); end else if (Sender as TMenuItem).Name = 'miCancel' then begin FreeAndNil(DropParamsRef); end; end; //with end; end; procedure TfrmMain.PopupDragDropMenu(var DropParams: TDropParams); begin // Disposing of the params is handled in pmDropMenuClose or mnuDropClick. if Assigned(DropParams) then begin FDropParams := DropParams; DropParams := nil; pmDropMenu.PopUp(FDropParams.ScreenDropPoint.X, FDropParams.ScreenDropPoint.Y); end; end; procedure TfrmMain.pmDropMenuClose(Sender: TObject); begin // Free drop parameters given to drop menu. FreeAndNil(FDropParams); end; procedure TfrmMain.mnuSplitterPercentClick(Sender: TObject); begin with (Sender as TMenuItem) do begin Commands.DoPanelsSplitterPerPos(Tag); end; end; procedure TfrmMain.mnuTabMenuExecute(Sender: TObject); begin (Sender as TAction).OnExecute:= @actExecute; end; procedure TfrmMain.mnuTabMenuClick(Sender: TObject); var Cmd: String; MenuItem: TMenuItem; NoteBook: TFileViewNotebook; begin MenuItem := (Sender as TMenuItem); NoteBook := (pmTabMenu.Parent as TFileViewNotebook); // pmTabMenu.Tag stores tab page nr where the menu was activated. if MenuItem = miCloseTab then Commands.DoCloseTab(NoteBook, pmTabMenu.Tag) else if MenuItem = miRenameTab then Commands.DoRenameTab(NoteBook.Page[pmTabMenu.Tag]) else if MenuItem = miTabOptionNormal then NoteBook.Page[pmTabMenu.Tag].LockState := tlsNormal else if MenuItem = miTabOptionPathLocked then NoteBook.Page[pmTabMenu.Tag].LockState := tlsPathLocked else if MenuItem = miTabOptionPathResets then NoteBook.Page[pmTabMenu.Tag].LockState := tlsPathResets else if MenuItem = miTabOptionDirsInNewTab then NoteBook.Page[pmTabMenu.Tag].LockState := tlsDirsInNewTab else begin Cmd:= MenuItem.Action.Name; Cmd:= 'cm_' + Copy(Cmd, 4, Length(Cmd) - 3); Commands.Commands.ExecuteCommand(Cmd, NoteBook.Name); end; // On click first the OnClick and then the Action.OnExecute is called MenuItem.Action.OnExecute:= @mnuTabMenuExecute; end; procedure TfrmMain.nbPageAfterMouseDown(Data: PtrInt); var Notebook: TFileViewNotebook; begin if TObject(Data) is TFileViewNotebook then begin Notebook := TObject(Data) as TFileViewNotebook; if (Notebook = nbLeft) and (FrameLeft <> nil) then begin if PanelSelected = fpLeft then // same panel FrameLeft.SetFocus else if (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(fpLeft) else FrameRight.SetFocus; end; if (Notebook = nbRight) and (FrameRight <> nil) then begin if PanelSelected = fpRight then // same panel FrameRight.SetFocus else if (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(fpRight) else FrameLeft.SetFocus; end; end; end; procedure TfrmMain.nbPageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Application.QueueAsyncCall(@nbPageAfterMouseDown, PtrInt(Sender)); end; procedure TfrmMain.nbPageChanged(Sender: TObject); var Notebook: TFileViewNotebook; Page: TFileViewPage; begin Notebook := Sender as TFileViewNotebook; Page := Notebook.ActivePage; if Assigned(Page) then begin if Page.LockState = tlsPathResets then // if locked with directory change ChooseFileSource(Page.FileView, Page.LockPath); // Update selected drive only on non-active panel, // because active panel is updated on focus change. if (PanelSelected <> Notebook.Side) and not (tb_activate_panel_on_click in gDirTabOptions) then begin UpdateSelectedDrive(Notebook); UpdateFreeSpace(Notebook.Side); end; end; if Assigned(QuickViewPanel) then Commands.cm_QuickView(['Close']); UpdatePrompt; UpdateTreeViewPath; end; procedure TfrmMain.nbPageMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var PopUpPoint: TPoint; NoteBook: TFileViewNotebook; TabNr: Integer; begin NoteBook := Sender as TFileViewNotebook; case Button of mbMiddle: begin TabNr := NoteBook.TabIndexAtClientPos(Point(X, Y)); if TabNr <> -1 then begin Commands.DoCloseTab(NoteBook, TabNr); end; end; mbRight: begin TabNr := NoteBook.TabIndexAtClientPos(Point(X, Y)); if TabNr <> -1 then begin PopUpPoint := NoteBook.ClientToScreen(Point(X, Y)); {$IFDEF LCLQT} // In QT the NoteBook.ClientToScreen calculates coordinates // relative to Page contents (client rectangle), // so we must substract the height and width of the tab bar. PopUpPoint.X := PopUpPoint.X - (NoteBook.Width - NoteBook.ClientWidth); PopUpPoint.Y := PopUpPoint.Y - (NoteBook.Height - NoteBook.ClientHeight); {$ENDIF} // Check tab options items. case NoteBook.Page[TabNr].LockState of tlsNormal: miTabOptionNormal.Checked := True; tlsPathLocked: miTabOptionPathLocked.Checked := True; tlsDirsInNewTab: miTabOptionDirsInNewTab.Checked := True; tlsPathResets: miTabOptionPathResets.Checked := True; end; pmTabMenu.Parent := NoteBook; pmTabMenu.Tag := TabNr; pmTabMenu.PopUp(PopUpPoint.x, PopUpPoint.y); end; end; end; end; procedure TfrmMain.NotebookCloseTabClicked(Sender: TObject); begin with (Sender As TFileViewPage) do if PageIndex <> -1 then begin RemovePage(Notebook, PageIndex); end; end; procedure TfrmMain.ConvertIniToolbarItem(Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String); procedure ConvertHotkeys(CommandItem: TKASCommandItem; Hotkeys: THotkeys; SearchHotkey: THotkey); var Hotkey: THotkey; begin Hotkey := Hotkeys.FindByContents(SearchHotkey); if Assigned(Hotkey) then begin Hotkey.Command := 'cm_ExecuteToolbarItem'; Hotkey.Params := nil; SetValue(Hotkey.Params, 'ToolItemID', CommandItem.ID); end; end; var HMForm: THMForm; Hotkey: THotkey; CommandItem: TKASCommandItem; MenuItem: TKASMenuItem; BarFileName: String; begin if Item is TKASCommandItem then begin CommandItem := TKASCommandItem(Item); // Convert toolbar hotkey to use ID as parameter. if Shortcut <> '' then begin Hotkey := THotkey.Create; try Hotkey.Command := 'cm_Int_RunCommandFromBarFile'; AddString(Hotkey.Shortcuts, Shortcut); Hotkey.Params := Hotkey.Shortcuts; HMForm := HotMan.Forms.Find('Main'); if Assigned(HMForm) then ConvertHotkeys(CommandItem, HMForm.Hotkeys, Hotkey); finally Hotkey.Free; end; end; if ((CommandItem.Command = 'cm_OpenBar') or (CommandItem.Command = 'cm_ShowButtonMenu')) and (Length(CommandItem.Params) > 0) then begin BarFileName := CommandItem.Params[0]; if Pos(PathDelim, BarFileName) <> 0 then BarFileName := GetCmdDirFromEnvVar(BarFileName) else BarFileName := gpCfgDir + BarFileName; if mbFileExists(BarFileName) then begin MenuItem := TKASMenuItem.Create; MenuItem.Assign(Item); // Copy whatever is possible from Command item Loader.Load(BarFileName, nil, MenuItem, @ConvertIniToolbarItem); mbRenameFile(BarFileName, BarFileName + '.obsolete'); Item.Free; Item := MenuItem; end; end; end; end; procedure TfrmMain.FormKeyPress(Sender: TObject; var Key: Char); var ModifierKeys: TShiftState; begin // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; ModifierKeys := GetKeyShiftStateEx; if gCmdLine and // If command line is enabled (GetKeyTypingAction(ModifierKeys) = ktaCommandLine) and not ((Key in ['-', '*', '+', #0..#32]) and (Trim(edtCommand.Text) = '')) then begin TypeInCommandLine(Key); Key := #0; end; end; function TfrmMain.ActiveFrame: TFileView; begin case PanelSelected of fpLeft: Result := FrameLeft; fpRight: Result := FrameRight; else assert(false,'Bad active frame'); end; end; function TfrmMain.NotActiveFrame: TFileView; begin case PanelSelected of fpRight: Result := FrameLeft; fpLeft: Result := FrameRight; else assert(false,'Bad active frame'); Result:=FrameLeft;// only for compilator warning; end; end; function TfrmMain.ActiveNotebook: TFileViewNotebook; begin case PanelSelected of fpLeft: Result := nbLeft; fpRight: Result := nbRight; else assert(false,'Bad active notebook'); end; end; function TfrmMain.NotActiveNotebook: TFileViewNotebook; begin case PanelSelected of fpLeft: Result := nbRight; fpRight: Result := nbLeft; else assert(false,'Bad active notebook'); end; end; function TfrmMain.FrameLeft: TFileView; begin Result := nbLeft.ActiveView; end; function TfrmMain.FrameRight: TFileView; begin Result := nbRight.ActiveView; end; procedure TfrmMain.ForEachView(CallbackFunction: TForEachViewFunction; UserData: Pointer); procedure EnumerateNotebook(ANoteBook: TFileViewNotebook); var i: Integer; begin for i := 0 to ANoteBook.PageCount - 1 do CallbackFunction(ANoteBook.View[i], UserData); end; begin EnumerateNotebook(nbLeft); EnumerateNotebook(nbRight); end; procedure TfrmMain.AppException(Sender: TObject; E: Exception); begin WriteExceptionToErrorFile; ShowExceptionDialog; end; procedure TfrmMain.AppShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo); begin // Refresh monitor list Screen.UpdateMonitors; end; constructor TfrmMain.Create(TheOwner: TComponent); begin FMainSplitterPos := 50.0; inherited Create(TheOwner); FCommands := TMainCommands.Create(Self, actionLst); Screen.Cursors[crArrowCopy] := LoadCursorFromLazarusResource('ArrowCopy'); Screen.Cursors[crArrowMove] := LoadCursorFromLazarusResource('ArrowMove'); Screen.Cursors[crArrowLink] := LoadCursorFromLazarusResource('ArrowLink'); end; procedure TfrmMain.UpdateActionIcons(); var I: Integer; imgIndex: Integer; iconsDir: String; fileName: String; iconImg: TPicture; actionName: TComponentName; begin if not gIconsInMenus then Exit; actionLst.Images := nil; pmTabMenu.Images := nil; mnuMain.Images := nil; imgLstActions.Clear; // Temporarily while feature is not implemented // http://doublecmd.sourceforge.net/mantisbt/view.php?id=11 fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'actions'; if not mbDirectoryExists(iconsDir) then Exit; iconImg := TPicture.Create; try imgLstActions.Width := gIconsInMenusSize; imgLstActions.Height := gIconsInMenusSize; actionLst.Images := imgLstActions; pmTabMenu.Images := imgLstActions; mnuMain.Images := imgLstActions; for I:= 0 to actionLst.ActionCount - 1 do begin actionName := UTF8LowerCase(actionLst.Actions[I].Name); fileName := iconsDir + PathDelim + 'cm_' + UTF8Copy(actionName, 4, Length(actionName) - 3) + '.png'; if mbFileExists(fileName) then try iconImg.LoadFromFile(fileName); imgIndex := imgLstActions.Add(iconImg.Bitmap, nil); if imgIndex >= 0 then begin TAction(actionLst.Actions[I]).ImageIndex := imgIndex; end; except // Skip end; end; finally FreeAndNil(iconImg); end; end; procedure TfrmMain.UpdateHotDirIcons; var I: Integer; iconsDir: String; fileName: String; iconImg: TPicture; begin pmHotList.Images:=nil; { TODO -oDB : The images of popup menu in configuration should also be nilled to be correct } imgLstDirectoryHotlist.Clear; fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'actions'; if not mbDirectoryExists(iconsDir) then Exit; iconImg := TPicture.Create; try fileName := IntToStr(gIconsInMenusSize); iconsDir := gpPixmapPath + 'dctheme' + PathDelim + fileName; iconsDir := iconsDir + 'x' + fileName + PathDelim + 'dirhotlist'; imgLstDirectoryHotlist.Width := gIconsInMenusSize; imgLstDirectoryHotlist.Height := gIconsInMenusSize; pmHotList.Images:=imgLstDirectoryHotlist; for I:=0 to pred(length(ICONINDEXNAME)) do begin filename:=iconsDir+PathDelim+ICONINDEXNAME[I]+'.png'; if mbFileExists(fileName) then try iconImg.LoadFromFile(fileName); imgLstDirectoryHotlist.Add(iconImg.Bitmap, nil); except // Skip end; end; finally FreeAndNil(iconImg); end; end; procedure TfrmMain.CreateDefaultToolbar; procedure AddCommand(Command: String); var CommandItem: TKASCommandItem; begin CommandItem := TKASCommandItem.Create(Commands.Commands); CommandItem.Icon := UTF8LowerCase(Command); CommandItem.Command := Command; // Leave CommandItem.Hint empty. It will be loaded at startup based on language. MainToolBar.AddButton(CommandItem); end; procedure AddSeparator; begin MainToolBar.AddButton(TKASSeparatorItem.Create); end; var MainToolBarNode: TXmlNode; begin if MainToolBar.ButtonCount = 0 then begin MainToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if not Assigned(MainToolBarNode) then begin AddCommand('cm_Refresh'); AddCommand('cm_RunTerm'); AddCommand('cm_Options'); AddSeparator; AddCommand('cm_BriefView'); AddCommand('cm_ColumnsView'); AddCommand('cm_ThumbnailsView'); AddSeparator; AddCommand('cm_FlatView'); AddSeparator; AddCommand('cm_ViewHistoryPrev'); AddCommand('cm_ViewHistoryNext'); AddSeparator; AddCommand('cm_MarkPlus'); AddCommand('cm_MarkMinus'); AddCommand('cm_MarkInvert'); AddSeparator; AddCommand('cm_PackFiles'); AddCommand('cm_ExtractFiles'); AddSeparator; AddCommand('cm_Search'); AddCommand('cm_MultiRename'); AddCommand('cm_SyncDirs'); AddCommand('cm_CopyFullNamesToClip'); SaveMainToolBar; end; end; end; function TfrmMain.GetFileDlgStr(sLngOne, sLngMulti: String; Files: TFiles): String; begin if Files.Count = 0 then raise Exception.Create(rsMsgNoFilesSelected); if Files.Count > 1 then Result := Format(sLngMulti, [Files.Count]) else Result := Format(sLngOne, [Files[0].Name]); end; procedure TfrmMain.miHotAddOrConfigClick(Sender: TObject); begin with Sender as TComponent do Commands.cm_WorkWithDirectoryHotlist(['action='+HOTLISTMAGICWORDS[tag], 'source='+QuoteStr(ActiveFrame.CurrentPath), 'target='+QuoteStr(NotActiveFrame.CurrentPath), 'index=0']); end; procedure TfrmMain.CreatePopUpDirHistory; var I: Integer; MenuItem: TMenuItem; begin pmDirHistory.Items.Clear; for I:= 0 to Min(gDirHistoryCount, glsDirHistory.Count - 1) do begin MenuItem:= TMenuItem.Create(pmDirHistory); MenuItem.Caption:= glsDirHistory[I]; MenuItem.Hint:= MenuItem.Caption; MenuItem.OnClick:= @HistorySelected; pmDirHistory.Items.Add(MenuItem); end; end; procedure TfrmMain.ShowFileViewHistory; begin ShowFileViewHistory(-1, -1, -1, -1); end; procedure TfrmMain.ShowFileViewHistory(FromFileSourceIndex, FromPathIndex, ToFileSourceIndex, ToPathIndex: Integer); const MaxItemsShown = 20; var ItemsBackward: Integer = 0; ItemsForward: Integer = 0; function GoBack(var FileSourceIndex, PathIndex: Integer): Boolean; begin if PathIndex = 0 then begin if FileSourceIndex = 0 then Result := False else begin Dec(FileSourceIndex); PathIndex := ActiveFrame.PathsCount[FileSourceIndex] - 1; Result := True; end; end else begin Dec(PathIndex); Result := True; end; end; function GoForward(var FileSourceIndex, PathIndex: Integer): Boolean; begin if PathIndex = ActiveFrame.PathsCount[FileSourceIndex] - 1 then begin if FileSourceIndex = ActiveFrame.FileSourcesCount - 1 then Result := False else begin Inc(FileSourceIndex); PathIndex := 0; Result := True; end; end else begin Inc(PathIndex); Result := True; end; end; procedure AddCaptionItem(s: String); var mi: TMenuItem; begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := s; mi.Enabled := False; pmDirHistory.Items.Add(mi); end; procedure FindBoundsBackward; var I: Integer; begin GoBack(ToFileSourceIndex, ToPathIndex); FromFileSourceIndex := ToFileSourceIndex; FromPathIndex := ToPathIndex; for i := 0 to MaxItemsShown - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); end; end; procedure FindBoundsFromCenter; var I: Integer; begin FromFileSourceIndex := ActiveFrame.CurrentFileSourceIndex; FromPathIndex := ActiveFrame.CurrentPathIndex; ToFileSourceIndex := FromFileSourceIndex; ToPathIndex := FromPathIndex; for i := 0 to (MaxItemsShown div 2) - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; for i := ItemsForward to (MaxItemsShown div 2) - 1 do begin if GoBack(FromFileSourceIndex, FromPathIndex) then Inc(ItemsBackward); end; for i := ItemsBackward to (MaxItemsShown div 2) - 1 do begin if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; end; procedure FindBoundsForward; var I: Integer; begin GoForward(FromFileSourceIndex, FromPathIndex); ToFileSourceIndex := FromFileSourceIndex; ToPathIndex := FromPathIndex; for i := 0 to MaxItemsShown - 1 do begin if GoForward(ToFileSourceIndex, ToPathIndex) then Inc(ItemsForward); end; end; var I: Integer; mi: TMenuItem; p: TPoint; begin pmDirHistory.Items.Clear; if FromFileSourceIndex <> -1 then FindBoundsForward else if ToFileSourceIndex <> - 1 then FindBoundsBackward else FindBoundsFromCenter; if (FromFileSourceIndex > 0) or (FromPathIndex > 0) then begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := '...'; mi.OnClick := @ViewHistoryPrevSelected; mi.Tag := HistoryIndexesToTag(FromFileSourceIndex, FromPathIndex); pmDirHistory.Items.Add(mi); end; for i := 0 to ItemsForward + ItemsBackward do begin mi := TMenuItem.Create(pmDirHistory); pmDirHistory.Items.Add(mi); mi.Caption := ActiveFrame.Path[FromFileSourceIndex, FromPathIndex]; mi.OnClick := @ViewHistorySelected; // Remember indexes into history. mi.Tag := HistoryIndexesToTag(FromFileSourceIndex, FromPathIndex); // Mark current history position. if (FromFileSourceIndex = ActiveFrame.CurrentFileSourceIndex) and (FromPathIndex = ActiveFrame.CurrentPathIndex) then mi.Checked := True; if not GoForward(FromFileSourceIndex, FromPathIndex) then Break; // Add separator and address of a file source as a caption. if FromPathIndex = 0 then begin AddCaptionItem('-'); AddCaptionItem('- ' + ActiveFrame.FileSources[FromFileSourceIndex].CurrentAddress + ' -'); end; end; if (ToFileSourceIndex < ActiveFrame.FileSourcesCount - 1) or (ToPathIndex < ActiveFrame.PathsCount[ToFileSourceIndex] - 1) then begin mi := TMenuItem.Create(pmDirHistory); mi.Caption := '...'; mi.OnClick := @ViewHistoryNextSelected; mi.Tag := HistoryIndexesToTag(ToFileSourceIndex, ToPathIndex); pmDirHistory.Items.Add(mi); end; //Let's show the popup right where is the current cursor instead of being on top left like previous version p:=Mouse.CursorPos; pmDirHistory.Popup(p.X, p.Y); end; { TfrmMain.HotDirActualSwitchToDir } // Actual routine called when user click the item from the Directory Hotlist popup menu to switch to a hot directory // The index received is the index from the "gDirectoryHotlist" to read hotdir entry from. // procedure TfrmMain.HotDirActualSwitchToDir(Index:longint); var aPath: String; isSHIFTDown, isCTRLDown: boolean; PossibleCommande,PossibleParam: string; PosFirstSpace: integer; Editor: TOptionsEditor; Options: IOptionsDialog; begin // This handler is used by HotDir AND SpecialDir. // HotDirs AND SpecialDirs are only supported by filesystem. // If the index is larger or equal to "TAGOFFSET_FORCHANGETOSPECIALDIR", it means it's a "SpecialDir" and we'll change accordingly if (Index < TAGOFFSET_FORCHANGETOSPECIALDIR) AND (Index >= 0) then begin isSHIFTDown:=((GetKeyState(VK_SHIFT) AND $80) <> 0); if not isSHIFTDown then //if SHIFT is NOT down, it's to change directory begin case gDirectoryHotlist.HotDir[Index].Dispatcher of hd_CHANGEPATH: begin isCTRLDown:=((GetKeyState(VK_CONTROL) AND $80) <> 0); //if CTRL is down, it's to request to DON'T CHANGE TARGET even if in the directoryhotlist entry it was requesting to do so aPath := gDirectoryHotlist.HotDir[Index].HotDirPath; if aPath<>'' then begin case gDirectoryHotlist.HotDir[Index].HotDirPathSort of 1: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_NAME,STR_ASCENDING]); //Name, a-z 2: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_NAME,STR_DESCENDING]); //Name, z-a 3: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_EXTENSION,STR_ASCENDING]); //Ext, a-z 4: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_EXTENSION,STR_DESCENDING]); //Ext, z-a 5: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_SIZE,STR_DESCENDING]); //Size 9-0 6: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_SIZE,STR_ASCENDING]); //Size 0-9 7: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_DESCENDING]); //Date 9-0 8: Commands.cm_UniversalSingleDirectSort([STR_ACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_ASCENDING]); //Date 0-9 end; aPath := mbExpandFileName(aPath); ChooseFileSource(ActiveFrame, aPath); if (not isCTRLDown) then //We don't change target folder if CTRL key is pressed begin aPath := gDirectoryHotlist.HotDir[Index].HotDirTarget; if aPath<>'' then begin case gDirectoryHotlist.HotDir[Index].HotDirTargetSort of 1: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_NAME,STR_ASCENDING]); //Name, a-z 2: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_NAME,STR_DESCENDING]); //Name, z-a 3: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_EXTENSION,STR_ASCENDING]); //Ext, a-z 4: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_EXTENSION,STR_DESCENDING]); //Ext, z-a 5: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_SIZE,STR_DESCENDING]); //Size 9-0 6: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_SIZE,STR_ASCENDING]); //Size 0-9 7: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_DESCENDING]); //Date 9-0 8: Commands.cm_UniversalSingleDirectSort([STR_NOTACTIVEFRAME,STR_MODIFICATIONDATETIME,STR_ASCENDING]); //Date 0-9 end; aPath := mbExpandFileName(aPath); ChooseFileSource(NotActiveFrame, aPath); end; end; end; end; //hd_CHANGEPATH: hd_COMMAND: begin PosFirstSpace:=pos(' ',gDirectoryHotlist.HotDir[Index].HotDirPath); if PosFirstSpace=0 then begin PossibleCommande:=gDirectoryHotlist.HotDir[Index].HotDirPath; PossibleParam:=''; end else begin PossibleCommande:=leftstr(gDirectoryHotlist.HotDir[Index].HotDirPath,(PosFirstSpace-1)); PossibleParam:=rightstr(gDirectoryHotlist.HotDir[Index].HotDirPath,length(gDirectoryHotlist.HotDir[Index].HotDirPath)-PosFirstSpace); end; Commands.Commands.ExecuteCommand(PossibleCommande, SplitString(PossibleParam,' ')); end; end; //case gDirectoryHotlist.HotDir[Index].Dispatcher of end else begin //if SHIFT IS down, it's to EDIT current selected entry from the Directory Hotlist that the current selected popup menu selection is pointing. Options := ShowOptions(TfrmOptionsDirectoryHotlist); Editor := Options.GetEditor(TfrmOptionsDirectoryHotlist); Application.ProcessMessages; if Editor.CanFocus then Editor.SetFocus; TfrmOptionsDirectoryHotlist(Editor).SubmitToAddOrConfigToHotDirDlg(ACTION_DIRECTLYCONFIGENTRY,ActiveFrame.CurrentPath,NotActiveFrame.CurrentPath,Index); end; end else begin if Index>=0 then begin //So it's a SpecialDir... Index:=Index-TAGOFFSET_FORCHANGETOSPECIALDIR; aPath := mbExpandFileName((gSpecialDirList.SpecialDir[Index].PathValue)); ChooseFileSource(ActiveFrame, aPath); end; end; end; procedure TfrmMain.HotDirSelected(Sender: TObject); begin HotDirActualSwitchToDir((Sender as TMenuItem).Tag); end; procedure TfrmMain.HistorySelected(Sender: TObject); var aPath: String; begin // This handler is used by DirHistory. aPath := (Sender as TMenuItem).Hint; aPath := mbExpandFileName(aPath); ChooseFileSource(ActiveFrame, aPath); end; procedure TfrmMain.ViewHistorySelected(Sender: TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ActiveFrame.GoToHistoryIndex(FileSourceIndex, PathIndex); end; end; procedure TfrmMain.ViewHistoryPrevSelected(Sender:TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ShowFileViewHistory(-1, -1, FileSourceIndex, PathIndex); end; end; procedure TfrmMain.ViewHistoryNextSelected(Sender:TObject); var FileSourceIndex, PathIndex: Integer; begin if Sender is TMenuItem then begin HistoryIndexesFromTag((Sender as TMenuItem).Tag, FileSourceIndex, PathIndex); ShowFileViewHistory(FileSourceIndex, PathIndex, -1, -1); end; end; procedure TfrmMain.edtCommandKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key=VK_Down) and (Shift=[ssCtrl]) and (edtCommand.Items.Count>0) then begin Key:=0; edtCommand.DroppedDown:=True; edtCommand.SetFocus; end; end; function TfrmMain.CopyFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier): Boolean; var sDestination: String; sDstMaskTemp: String; FileSource: IFileSource; TargetFiles: TFiles = nil; CopyDialog: TfrmCopyDlg = nil; OperationTemp: Boolean = False; OperationType: TFileSourceOperationType; OperationClass: TFileSourceOperationClass; Operation: TFileSourceCopyOperation = nil; OperationOptionsUIClass: TFileSourceOperationOptionsUIClass = nil; begin Result := False; try if SourceFiles.Count = 0 then Exit; if (SourceFiles.Count = 1) and ((not (SourceFiles[0].IsDirectory or SourceFiles[0].IsLinkToDirectory)) or (TargetPath = '')) then sDestination := TargetPath + SourceFiles[0].Name else sDestination := TargetPath + '*.*'; // If same file source and address if (fsoCopy in SourceFileSource.GetOperationsTypes) and (fsoCopy in TargetFileSource.GetOperationsTypes) and SourceFileSource.Equals(TargetFileSource) and SameText(SourceFileSource.GetCurrentAddress, TargetFileSource.GetCurrentAddress) then begin OperationType := fsoCopy; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopy); end else if TargetFileSource.IsClass(TFileSystemFileSource) and (fsoCopyOut in SourceFileSource.GetOperationsTypes) then begin OperationType := fsoCopyOut; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopyOut); end else if SourceFileSource.IsClass(TFileSystemFileSource) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) then begin OperationType := fsoCopyIn; FileSource := TargetFileSource; OperationClass := TargetFileSource.GetOperationClass(fsoCopyIn); end else if (fsoCopyOut in SourceFileSource.GetOperationsTypes) and (fsoCopyIn in TargetFileSource.GetOperationsTypes) and (not (fspCopyOutOnMainThread in SourceFileSource.Properties)) and (not (fspCopyInOnMainThread in TargetFileSource.Properties)) then begin OperationTemp := True; OperationType := fsoCopyOut; FileSource := SourceFileSource; OperationClass := SourceFileSource.GetOperationClass(fsoCopyOut); end else begin msgWarning(rsMsgErrNotSupported); Exit; end; if bShowDialog then begin if Assigned(OperationClass) then OperationOptionsUIClass := OperationClass.GetOptionsUIClass; CopyDialog := TfrmCopyDlg.Create(Application, cmdtCopy, FileSource, OperationOptionsUIClass); CopyDialog.edtDst.Text := sDestination; CopyDialog.edtDst.ReadOnly := OperationTemp; CopyDialog.lblCopySrc.Caption := GetFileDlgStr(rsMsgCpSel, rsMsgCpFlDr, SourceFiles); while True do begin if CopyDialog.ShowModal = mrCancel then Exit; sDestination := CopyDialog.edtDst.Text; GetDestinationPathAndMask(SourceFiles, SourceFileSource, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); if (TargetFileSource = nil) or (Length(TargetPath) = 0) then begin MessageDlg(rsMsgInvalidPath, rsMsgErrNotSupported, mtWarning, [mbOK], 0); Continue; end; if HasPathInvalidCharacters(TargetPath) then MessageDlg(rsMsgInvalidPath, Format(rsMsgInvalidPathLong, [TargetPath]), mtWarning, [mbOK], 0) else Break; end; QueueIdentifier := CopyDialog.QueueIdentifier; end else GetDestinationPathAndMask(SourceFiles, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); // Copy via temp directory if OperationTemp then begin // Execute both operations in one new queue if QueueIdentifier = FreeOperationsQueueId then QueueIdentifier := OperationsManager.GetNewQueueIdentifier; // Save real target sDestination := TargetPath; FileSource := TargetFileSource; TargetFiles := SourceFiles.Clone; // Replace target by temp directory TargetFileSource := TTempFileSystemFileSource.Create(); TargetPath := TargetFileSource.GetRootDir; ChangeFileListRoot(TargetPath, TargetFiles); end; case OperationType of fsoCopy: begin // Copy within the same file source. Operation := SourceFileSource.CreateCopyOperation( SourceFiles, TargetPath) as TFileSourceCopyOperation; end; fsoCopyOut: // CopyOut to filesystem. Operation := SourceFileSource.CreateCopyOutOperation( TargetFileSource, SourceFiles, TargetPath) as TFileSourceCopyOperation; fsoCopyIn: // CopyIn from filesystem. Operation := TargetFileSource.CreateCopyInOperation( SourceFileSource, SourceFiles, TargetPath) as TFileSourceCopyOperation; end; if Assigned(Operation) then begin // Set operation options based on settings in dialog. Operation.RenameMask := sDstMaskTemp; if Assigned(CopyDialog) then CopyDialog.SetOperationOptions(Operation); // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); Result := True; end else msgWarning(rsMsgNotImplemented); // Copy via temp directory if OperationTemp and Result then begin // CopyIn from temp filesystem Operation := FileSource.CreateCopyInOperation( TargetFileSource, TargetFiles, sDestination) as TFileSourceCopyOperation; Result := Assigned(Operation); if Result then begin if Assigned(CopyDialog) then CopyDialog.SetOperationOptions(Operation); // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); end; end; finally FreeAndNil(TargetFiles); FreeAndNil(SourceFiles); FreeAndNil(CopyDialog); end; end; function TfrmMain.MoveFiles(SourceFileSource, TargetFileSource: IFileSource; var SourceFiles: TFiles; TargetPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var sDestination: String; sDstMaskTemp: String; Operation: TFileSourceMoveOperation; bMove: Boolean; MoveDialog: TfrmCopyDlg = nil; begin Result := False; try // Only allow moving within the same file source. if (SourceFileSource.IsInterface(TargetFileSource) or TargetFileSource.IsInterface(SourceFileSource)) and (SourceFileSource.CurrentAddress = TargetFileSource.CurrentAddress) and (fsoMove in SourceFileSource.GetOperationsTypes) and (fsoMove in TargetFileSource.GetOperationsTypes) then begin bMove := True; end else if ((fsoCopyOut in SourceFileSource.GetOperationsTypes) and (fsoCopyIn in TargetFileSource.GetOperationsTypes)) then begin bMove := False; // copy + delete through temporary file system msgWarning(rsMsgNotImplemented); Exit; end else begin msgWarning(rsMsgErrNotSupported); Exit; end; if SourceFiles.Count = 0 then Exit; if (SourceFiles.Count = 1) and (not (SourceFiles[0].IsDirectory or SourceFiles[0].IsLinkToDirectory)) then sDestination := TargetPath + ExtractFileName(SourceFiles[0].Name) else sDestination := TargetPath + '*.*'; if bShowDialog then begin MoveDialog := TfrmCopyDlg.Create(Application, cmdtMove, SourceFileSource, SourceFileSource.GetOperationClass(fsoMove).GetOptionsUIClass); MoveDialog.edtDst.Text := sDestination; MoveDialog.lblCopySrc.Caption := GetFileDlgStr(rsMsgRenSel, rsMsgRenFlDr, SourceFiles); while True do begin if MoveDialog.ShowModal = mrCancel then Exit; sDestination := MoveDialog.edtDst.Text; GetDestinationPathAndMask(SourceFiles, SourceFileSource, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); if (TargetFileSource = nil) or (Length(TargetPath) = 0) then begin MessageDlg(EmptyStr, rsMsgInvalidPath, mtWarning, [mbOK], 0); Continue; end; if HasPathInvalidCharacters(TargetPath) then MessageDlg(rsMsgInvalidPath, Format(rsMsgInvalidPathLong, [TargetPath]), mtWarning, [mbOK], 0) else Break; end; QueueIdentifier := MoveDialog.QueueIdentifier; end else GetDestinationPathAndMask(SourceFiles, TargetFileSource, sDestination, SourceFiles.Path, TargetPath, sDstMaskTemp); if bMove then begin Operation := SourceFileSource.CreateMoveOperation( SourceFiles, TargetPath) as TFileSourceMoveOperation; if Assigned(Operation) then begin // Set operation options based on settings in dialog. Operation.RenameMask := sDstMaskTemp; if Assigned(MoveDialog) then MoveDialog.SetOperationOptions(Operation); // Start operation. OperationsManager.AddOperation(Operation, QueueIdentifier, False, True); Result := True; end else msgWarning(rsMsgNotImplemented); end else begin // Use CopyOut, CopyIn operations. end; finally FreeAndNil(SourceFiles); FreeAndNil(MoveDialog); end; end; function TfrmMain.CopyFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var FileSource: IFileSource; SourceFiles: TFiles = nil; begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SourceFiles) then begin if Length(sDestPath) > 0 then FileSource := NotActiveFrame.FileSource else begin FileSource := ActiveFrame.FileSource; end; try Result := CopyFiles(ActiveFrame.FileSource, FileSource, SourceFiles, sDestPath, bShowDialog, QueueIdentifier); if Result then ActiveFrame.MarkFiles(False); finally FreeAndNil(SourceFiles); end; end else Result := False; end; function TfrmMain.MoveFiles(sDestPath: String; bShowDialog: Boolean; QueueIdentifier: TOperationsManagerQueueIdentifier = FreeOperationsQueueId): Boolean; var SourceFiles: TFiles = nil; begin SourceFiles := ActiveFrame.CloneSelectedOrActiveFiles; if Assigned(SourceFiles) then begin try Result := MoveFiles(ActiveFrame.FileSource, NotActiveFrame.FileSource, SourceFiles, sDestPath, bShowDialog, QueueIdentifier); if Result then ActiveFrame.MarkFiles(False); finally FreeAndNil(SourceFiles); end; end else Result := False; end; procedure TfrmMain.GetDestinationPathAndMask(SourceFiles: TFiles; TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); var AbsolutePath: String; begin if TargetFileSource.GetPathType(EnteredPath) = ptAbsolute then AbsolutePath := EnteredPath else begin // This only work for filesystem for now. if TargetFileSource.IsClass(TFileSystemFileSource) then AbsolutePath := BaseDir + EnteredPath else AbsolutePath := PathDelim{TargetFileSource.GetRoot} + EnteredPath; end; AbsolutePath := NormalizePathDelimiters(AbsolutePath); // normalize path delimiters AbsolutePath := ExpandAbsolutePath(AbsolutePath); if Length(AbsolutePath) = 0 then Exit; // If the entered path ends with a path delimiter // treat it as a path to a not yet existing directory // which should be created. if (AbsolutePath[Length(AbsolutePath)] = PathDelim) or ((TargetFileSource.IsClass(TFileSystemFileSource)) and mbDirectoryExists(AbsolutePath)) then begin // Destination is a directory. DestPath := AbsolutePath; DestMask := '*.*'; end else begin // Destination is a file name or mask. DestPath := ExtractFilePath(AbsolutePath); DestMask := ExtractFileName(AbsolutePath); if (SourceFiles.Count > 1) and not ContainsWildcards(DestMask) then begin // Assume it is a path to a directory because cannot put multiple // files/directories into one file. DestPath := AbsolutePath; DestMask := '*.*'; end // For convenience, treat '*' as "whole file name". // To remove extension '*.' can be used. else if DestMask = '*' then DestMask := '*.*'; end; end; procedure TfrmMain.GetDestinationPathAndMask(SourceFiles: TFiles; SourceFileSource: IFileSource; var TargetFileSource: IFileSource; EnteredPath: String; BaseDir: String; out DestPath, DestMask: String); var FileSourceIndex, PathIndex: Integer; begin // If it is a file source root and we trying to copy/move to parent directory if StrBegins(EnteredPath, '..') and SourceFileSource.IsPathAtRoot(SourceFiles.Path) then begin // Change to previous file source and last path. FileSourceIndex := ActiveFrame.CurrentFileSourceIndex - 1; if FileSourceIndex < 0 then TargetFileSource := nil // No parent file sources. else begin PathIndex := ActiveFrame.PathsCount[FileSourceIndex] - 1; if PathIndex < 0 then TargetFileSource := nil // No paths. else begin TargetFileSource := ActiveFrame.FileSources[FileSourceIndex]; // Determine destination type if (Length(EnteredPath) = 2) or (EnteredPath[Length(EnteredPath)] = PathDelim) then EnteredPath:= EmptyStr // Destination is a directory else EnteredPath:= ExtractFileName(EnteredPath); // Destination is a file name or mask // Combine destination path EnteredPath := ActiveFrame.Path[FileSourceIndex, PathIndex] + EnteredPath; end; end; end; // Target file source is valid if Assigned(TargetFileSource) then begin GetDestinationPathAndMask(SourceFiles, TargetFileSource, EnteredPath, BaseDir, DestPath, DestMask); end; end; procedure TfrmMain.SetDragCursor(Shift: TShiftState); begin FrameLeft.SetDragCursor(Shift); FrameRight.SetDragCursor(Shift); end; procedure TfrmMain.FormKeyUp( Sender: TObject; var Key: Word; Shift: TShiftState) ; begin SetDragCursor(Shift); end; procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var ShiftEx : TShiftState; CmdText : String; begin SetDragCursor(Shift); // Either left or right panel has to be focused. if not FrameLeft.Focused and not FrameRight.Focused then begin Exit; end; ShiftEx := GetKeyShiftStateEx; case Key of VK_BACK: if (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin // Delete last character. CmdText := edtCommand.Text; UTF8Delete(CmdText, UTF8Length(CmdText), 1); edtCommand.Text := CmdText; edtCommand.SetFocus; edtCommand.SelStart := UTF8Length(edtCommand.Text) + 1; Key := 0; end; VK_ESCAPE: if IsCommandLineVisible and (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin edtCommand.Text := ''; Key := 0; end; VK_RETURN, VK_SELECT: if IsCommandLineVisible and (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin // execute command line (in terminal with Shift) ExecuteCommandLine(Shift = [ssShift]); Key := 0; end; VK_SPACE: if (GetKeyTypingAction(ShiftEx) = ktaCommandLine) and (edtCommand.Text <> '') then begin TypeInCommandLine(' '); Key := 0; end; VK_TAB: begin // Select opposite panel. case PanelSelected of fpLeft: SetActiveFrame(fpRight); fpRight: SetActiveFrame(fpLeft); else SetActiveFrame(fpLeft); end; Key := 0; end; end; CheckCommandLine(ShiftEx, Key); end; procedure TfrmMain.pmToolBarPopup(Sender: TObject); var sText: String; sDir: String; bPaste: Boolean; ToolItem: TKASToolItem; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); tbSeparator.Visible:= Assigned(Button); tbCut.Visible:= Assigned(Button); tbCopy.Visible:= Assigned(Button); tbChangeDir.Visible:= False; tbDelete.Visible:= Assigned(Button); if Assigned(Button) then begin ToolItem := Button.ToolItem; if ToolItem is TKASProgramItem then begin sDir := TKASProgramItem(ToolItem).StartPath; sDir:= PrepareParameter(sDir, nil, [ppoNormalizePathDelims, ppoReplaceTilde]); tbChangeDir.Caption := 'CD ' + sDir; tbChangeDir.Visible := True; end; end; sText:= Clipboard.AsText; bPaste:= StrBegins(sText, DCToolItemClipboardHeader) or StrBegins(sText, DCToolbarClipboardHeader) or StrBegins(sText, TCToolbarClipboardHeader); if bPaste then tbSeparator.Visible:= True; tbPaste.Visible:= bPaste; end; procedure TfrmMain.ShellTreeViewAdvancedCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage; var PaintImages, DefaultDraw: Boolean); begin Node.ImageIndex:= 0; Node.SelectedIndex:= 0; end; procedure TfrmMain.pnlLeftResize(Sender: TObject); begin if gDriveBar1 and gDriveBar2 and not gHorizontalFilePanels then pnlDskLeft.Width := pnlNotebooks.Width - pnlRight.Width; // Put splitter after left panel. if not gHorizontalFilePanels then begin MainSplitter.Left := pnlLeft.Width; MainSplitter.Top := pnlLeft.Top; MainSplitter.Height := pnlLeft.Height; MainSplitter.Width := 3; end else begin MainSplitter.Top := pnlLeft.Height; MainSplitter.Left := pnlLeft.Left; MainSplitter.Width := pnlLeft.Width; MainSplitter.Height := 3; end; end; procedure TfrmMain.pnlLeftRightDblClick(Sender: TObject); var APanel: TPanel; APoint: TPoint; FileViewNotebook: TFileViewNotebook; begin if Sender is TPanel then begin APanel := Sender as TPanel; if APanel = pnlLeft then begin APoint := FrameLeft.ClientToScreen(Classes.Point(0, FrameLeft.Top)); if Mouse.CursorPos.Y < APoint.Y then Commands.DoNewTab(nbLeft); end else if APanel = pnlRight then begin APoint := FrameRight.ClientToScreen(Classes.Point(0, FrameRight.Top)); if Mouse.CursorPos.Y < APoint.Y then Commands.DoNewTab(nbRight); end; end; if Sender is TFileViewNotebook then begin FileViewNotebook:= Sender as TFileViewNotebook; if FileViewNotebook.DoubleClickPageIndex < 0 then Commands.DoNewTab(FileViewNotebook) else begin case gDirTabActionOnDoubleClick of tadc_Nothing: begin end; tadc_CloseTab: Commands.DoCloseTab(FileViewNotebook, FileViewNotebook.DoubleClickPageIndex); tadc_FavoriteTabs: Commands.cm_LoadFavoriteTabs([]); tadc_TabsPopup: begin if FileViewNotebook.DoubleClickPageIndex<>-1 then begin // Check tab options items. case FileViewNotebook.Page[FileViewNotebook.DoubleClickPageIndex].LockState of tlsNormal: miTabOptionNormal.Checked := True; tlsPathLocked: miTabOptionPathLocked.Checked := True; tlsDirsInNewTab: miTabOptionDirsInNewTab.Checked := True; tlsPathResets: miTabOptionPathResets.Checked := True; end; pmTabMenu.Parent := FileViewNotebook; pmTabMenu.Tag := FileViewNotebook.DoubleClickPageIndex; pmTabMenu.PopUp(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; end; end; end; end; end; procedure TfrmMain.pnlNotebooksResize(Sender: TObject); begin if not FResizingFilePanels then begin FResizingFilePanels := True; if not gHorizontalFilePanels then pnlLeft.Width := Round(Double(pnlNotebooks.Width - MainSplitter.Width) * FMainSplitterPos / 100.0) else pnlLeft.Height := Round(Double(pnlNotebooks.Height - MainSplitter.Height) * FMainSplitterPos / 100.0); FResizingFilePanels := False; end; end; procedure TfrmMain.pnlRightResize(Sender: TObject); begin if gDriveBar1 and not gHorizontalFilePanels then begin if gDriveBar2 then pnlDskRight.Width := pnlRight.Width + 1 else pnlDskRight.Width := pnlNotebooks.Width - 2; end; end; procedure TfrmMain.sboxDrivePaint(Sender: TObject); begin PaintDriveFreeBar(Sender, gIndUseGradient, gIndForeColor, gIndBackColor); end; procedure TfrmMain.PaintDriveFreeBar(Sender: TObject; bIndUseGradient:boolean; pIndForeColor,pIndBackColor:TColor); var pbxDrive: TPaintBox absolute Sender; FillPercentage: PtrInt; i: Integer; AColor, AColor2: TColor; ARect: TRect; begin FillPercentage:= pbxDrive.Tag; if FillPercentage <> -1 then begin pbxDrive.Canvas.Brush.Color:= clBlack; pbxDrive.Canvas.FrameRect(0, 0, pbxDrive.Width - 1, pbxDrive.Height - 1); ARect.Top := 1; ARect.Bottom := pbxDrive.Height - 2; if not bIndUseGradient then begin ARect.Left := 1; ARect.Right := 1 + FillPercentage * (pbxDrive.Width - 2) div 100; AColor := pIndForeColor; pbxDrive.Canvas.GradientFill(ARect, LightColor(AColor, 25), DarkColor(AColor, 25), gdVertical); ARect.Left := ARect.Right + 1; ARect.Right := pbxDrive.Width - 2; AColor := pIndBackColor; pbxDrive.Canvas.GradientFill(ARect, DarkColor(AColor, 25), LightColor(AColor, 25), gdVertical); end else begin ARect.Right := 1; for i := 0 to FillPercentage - 1 do begin if i <= 50 then AColor:= RGB(0 + 5 * i, 255, 0) else AColor:= RGB(255, 255 - 5 * (i - 50), 0); AColor2:= DarkColor(AColor, 50); ARect.Left := ARect.Right; ARect.Right := 1 + (i + 1) * (pbxDrive.Width - 2) div 100; pbxDrive.Canvas.GradientFill(ARect, AColor, AColor2, gdVertical); end; ARect.Left := ARect.Right; ARect.Right := pbxDrive.Width - 2; pbxDrive.Canvas.GradientFill(ARect, clSilver, clWhite, gdVertical); end; end; end; procedure TfrmMain.seLogWindowSpecialLineColors(Sender: TObject; Line: integer; var Special: boolean; var FG, BG: TColor); var LogMsgTypeObject: TObject; LogMsgType : TLogMsgType absolute LogMsgTypeObject; begin LogMsgTypeObject := seLogWindow.Lines.Objects[Line-1]; Special := True; case LogMsgType of lmtInfo: FG := clNavy; lmtSuccess: FG := clGreen; lmtError: FG := clRed else FG := clWindowText; end; end; function TfrmMain.FileViewBeforeChangePath(FileView: TFileView; NewFileSource: IFileSource; const NewPath: String): Boolean; var ANoteBook: TFileViewNotebook; Page, NewPage: TFileViewPage; PageAlreadyExists: Boolean = False; i: Integer; tlsLockStateToEvaluate: TTabLockState; begin Result:= True; if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; tlsLockStateToEvaluate:=Page.LockState; if tlsLockStateToEvaluate=tlsPathLocked then if MsgBox(Format(rsMsgTabForOpeningInNewTab,[Page.Caption]), [msmbYes, msmbCancel], msmbCancel, msmbCancel) = mmrYes then tlsLockStateToEvaluate:=tlsDirsInNewTab; case tlsLockStateToEvaluate of tlsPathLocked: Result := False; // do not change directory in this tab tlsDirsInNewTab: begin Result := False; // do not change directory in this tab if Assigned(NewFileSource) then begin ANoteBook := Page.Notebook; if tb_reusing_tab_when_possible in gDirTabOptions then begin for i := 0 to ANotebook.PageCount - 1 do begin NewPage := ANotebook.Page[i]; PageAlreadyExists := Assigned(NewPage.FileView) and mbCompareFileNames(NewPage.FileView.CurrentPath, NewPath); if PageAlreadyExists then Break; end; end; if not PageAlreadyExists then begin // Open in a new page, cloned view. NewPage := ANotebook.NewPage(Page.FileView); NewPage.FileView.AddFileSource(NewFileSource, NewPath); end; NewPage.MakeActive; end; end; end; end; end; procedure TfrmMain.FileViewAfterChangePath(FileView: TFileView); var Index: Integer; Page: TFileViewPage; ANoteBook : TFileViewNotebook; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; ANoteBook := Page.Notebook; if Page.IsActive then begin if Assigned(FileView.FileSource) then begin if FileView.FileSource.IsClass(TFileSystemFileSource) then begin // Store only first 255 items if glsDirHistory.Count > $FF then begin glsDirHistory.Delete(glsDirHistory.Count - 1); end; Index:= glsDirHistory.IndexOf(FileView.CurrentPath); if Index = -1 then glsDirHistory.Insert(0, FileView.CurrentPath) else begin glsDirHistory.Move(Index, 0); end; UpdateTreeViewPath; end; UpdateSelectedDrive(ANoteBook); UpdatePrompt; end; // Update page hint ANoteBook.Hint := FileView.CurrentPath; end; {if (fspDirectAccess in FileView.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SetCurrentDir(FileView.CurrentPath); end;} end; end; procedure TfrmMain.FileViewActivate(FileView: TFileView); var Page: TFileViewPage; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; SelectedPanel := Page.Notebook.Side; UpdateSelectedDrive(Page.Notebook); UpdateFreeSpace(Page.Notebook.Side); end; end; procedure TfrmMain.FileViewFilesChanged(FileView: TFileView); var Page: TFileViewPage; begin if FileView.NotebookPage is TFileViewPage then begin Page := FileView.NotebookPage as TFileViewPage; if Page.IsActive then begin UpdateFreeSpace(Page.Notebook.Side); end; end; end; procedure TfrmMain.SetActiveFrame(panel: TFilePanelSelect); begin SelectedPanel:= panel; SetActiveFrame(ActiveFrame); end; procedure TfrmMain.SetActiveFrame(FileView: TFileView); begin FileView.SetFocus; if (fspDirectAccess in FileView.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SetCurrentDir(FileView.CurrentPath); end; end; type TCustomShellTreeViewCrack = class(TCustomShellTreeView); procedure TfrmMain.UpdateShellTreeView; begin actTreeView.Checked := gSeparateTree; TreeSplitter.Visible := gSeparateTree; TreePanel.Visible := gSeparateTree; if gSeparateTree and (ShellTreeView = nil) then begin ShellTreeView := TShellTreeView.Create(TreePanel); ShellTreeView.Parent := TreePanel; ShellTreeView.Align := alClient; ShellTreeView.ScrollBars := ssAutoBoth; with ShellTreeView as TShellTreeView do begin ReadOnly := True; RightClickSelect := True; TCustomShellTreeViewCrack(ShellTreeView).PopulateWithBaseFiles; Images := TImageList.Create(Self); Images.Width := gIconsSize; Images.Height := gIconsSize; Images.Add(PixMapManager.GetFolderIcon(gIconsSize, ShellTreeView.Color), nil); OnKeyDown := @ShellTreeViewKeyDown; OnMouseUp := @ShellTreeViewMouseUp; OnDblClick := @ShellTreeViewDblClick; OnAdvancedCustomDrawItem := @ShellTreeViewAdvancedCustomDrawItem; Options := Options - [tvoThemedDraw]; Options := Options + [tvoReadOnly, tvoRightClickSelect]; end; end; if gSeparateTree then begin ShellTreeView.Font.Color := gForeColor; ShellTreeView.BackgroundColor := gBackColor; ShellTreeView.SelectionColor := gCursorColor; FontOptionsToFont(gFonts[dcfMain], ShellTreeView.Font); end; end; procedure TfrmMain.UpdateTreeViewPath; begin if (gSeparateTree = False) then Exit; if (ShellTreeView.Tag <> 0) then Exit; if (fspDirectAccess in ActiveFrame.FileSource.Properties) then try (ShellTreeView as TShellTreeView).Path := ActiveFrame.CurrentPath; except // Skip end; end; procedure TfrmMain.UpdateTreeView; begin if (ShellTreeView = nil) then Exit; with (ShellTreeView as TShellTreeView) do begin if gShowSystemFiles then ObjectTypes:= ObjectTypes + [otHidden] else begin ObjectTypes:= ObjectTypes - [otHidden]; end; end; end; function CompareDrives(Item1, Item2: Pointer): Integer; begin Result := CompareText(PDrive(Item1)^.DisplayName, PDrive(Item2)^.DisplayName); end; procedure TfrmMain.UpdateDiskCount; var I: Integer; Drive: PDrive; begin DrivesList.Free; DrivesList := TDriveWatcher.GetDrivesList; DrivesList.Sort(@CompareDrives); { Delete drives that in drives black list } for I:= DrivesList.Count - 1 downto 0 do begin Drive := DrivesList[I]; if (gDriveBlackListUnmounted and not Drive^.IsMounted) or MatchesMaskList(Drive^.Path, gDriveBlackList) or MatchesMaskList(Drive^.DeviceId, gDriveBlackList) then DrivesList.Remove(I); end; UpdateDriveList(DrivesList); // create drives drop down menu FDrivesListPopup.UpdateDrivesList(DrivesList); // create drives left/right panels if gDriveBar1 then begin CreateDiskPanel(dskRight); if gDriveBar2 then CreateDiskPanel(dskLeft); end; dskLeft.AddToolItemExecutor(TKASDriveItem, @LeftDriveBarExecuteDrive); dskRight.AddToolItemExecutor(TKASDriveItem, @RightDriveBarExecuteDrive); end; procedure TfrmMain.AddVirtualDriveButton(dskPanel: TKASToolBar); const btnCaption = PathDelim + PathDelim; var bmpBitmap: TBitmap; ToolItem: TKASNormalItem; Button: TKASToolButton; begin (*virtual drive button*) ToolItem := TKASNormalItem.Create; ToolItem.Hint := actOpenVirtualFileSystemList.Caption; ToolItem.Text := btnCaption; Button := dskPanel.AddButton(ToolItem); bmpBitmap:= PixMapManager.GetVirtualDriveIcon(dskPanel.GlyphSize, clBtnFace); try Button.Glyph.Assign(bmpBitmap); Button.GroupIndex := 0; Button.Layout := blGlyphLeft; Button.OnClick:= @btnVirtualDriveClick; finally bmpBitmap.Free; end; end; procedure TfrmMain.AddSpecialButtons(dskPanel: TKASToolBar); procedure AddItem(FromButton: TSpeedButton); var Button: TKASToolButton; ToolItem: TKASNormalItem; begin ToolItem := TKASNormalItem.Create; ToolItem.Text := FromButton.Caption; ToolItem.Hint := FromButton.Hint; Button := dskPanel.AddButton(ToolItem); Button.GroupIndex := 0; end; begin AddItem(btnLeftRoot); AddItem(btnLeftUp); AddItem(btnLeftHome); end; procedure TfrmMain.CreateDiskPanel(dskPanel: TKASToolBar); var I, Count: Integer; Drive : PDrive; BitmapTmp: Graphics.TBitmap; ToolItem: TKASDriveItem; Button: TKASToolButton; begin dskPanel.BeginUpdate; try dskPanel.Clear; dskPanel.Flat := gDriveBarFlat; Count := DrivesList.Count - 1; for I := 0 to Count do begin Drive := DrivesList.Items[I]; ToolItem := TKASDriveItem.Create; ToolItem.Drive := Drive; ToolItem.Text := Drive^.DisplayName; ToolItem.Hint := GetDriveLabelOrStatus(Drive); Button := dskPanel.AddButton(ToolItem); // Set drive icon. BitmapTmp := PixMapManager.GetDriveIcon(Drive, dskPanel.GlyphSize, clBtnFace); Button.Glyph.Assign(BitmapTmp); FreeAndNil(BitmapTmp); {Set Buttons Transparent. Is need? } Button.Glyph.Transparent := True; Button.Transparent := True; {/Set Buttons Transparent} Button.Layout := blGlyphLeft; end; // for // Add virtual drive button AddVirtualDriveButton(dskPanel); // Add special buttons if not gDrivesListButton then AddSpecialButtons(dskPanel); finally dskPanel.EndUpdate; end; end; function TfrmMain.CreateFileView(sType: String; Page: TFileViewPage; AConfig: TIniFileEx; ASectionName: String; ATabIndex: Integer): TFileView; var FileViewFlags: TFileViewFlags = []; begin // This function should be changed to a separate TFileView factory. if gDelayLoadingTabs then FileViewFlags := [fvfDelayLoadingFiles]; if sType = 'columns' then Result := TColumnsFileView.Create(Page, AConfig, ASectionName, ATabIndex, FileViewFlags) else raise Exception.Create('Invalid file view type'); end; function TfrmMain.CreateFileView(sType: String; Page: TFileViewPage; AConfig: TXmlConfig; ANode: TXmlNode): TFileView; var FileViewFlags: TFileViewFlags = []; begin // This function should be changed to a separate TFileView factory. if gDelayLoadingTabs then FileViewFlags := [fvfDelayLoadingFiles]; if sType = 'columns' then Result := TColumnsFileView.Create(Page, AConfig, ANode, FileViewFlags) else if sType = 'brief' then Result := TBriefFileView.Create(Page, AConfig, ANode, FileViewFlags) else if sType = 'thumbnails' then Result := TThumbFileView.Create(Page, AConfig, ANode, FileViewFlags) else raise Exception.Create('Invalid file view type'); end; procedure TfrmMain.AssignEvents(AFileView: TFileView); begin with AFileView do begin OnBeforeChangePath := @FileViewBeforeChangePath; OnAfterChangePath := @FileViewAfterChangePath; OnActivate := @FileViewActivate; OnFileListChanged := @FileViewFilesChanged; end; end; // We ask the closing locked tab confirmation according to... // ConfirmCloseLocked = 0 ...option "tb_confirm_close_locked_tab". // ConfirmCloseLocked = 1 ...no matter the option, we ask confirmation // ConfirmCloseLocked = 2 ...no matter the option, we do not ask confirmation function TfrmMain.RemovePage(ANoteBook: TFileViewNotebook; iPageIndex:Integer; CloseLocked: Boolean = True; ConfirmCloseLocked: integer = 0; ShowButtonAll: Boolean = False): LongInt; var UserAnswer: TMyMsgResult; begin Result:= -1; if (ANoteBook.PageCount > 1) and (iPageIndex >= 0) and (iPageIndex < ANoteBook.PageCount) then begin if (ANoteBook.Page[iPageIndex].LockState <> tlsNormal) AND (((ConfirmCloseLocked=0) AND (tb_confirm_close_locked_tab in gDirTabOptions)) OR (ConfirmCloseLocked=1)) then begin if CloseLocked then begin if ShowButtonAll then UserAnswer := MsgBox(Format(rsMsgCloseLockedTab, [ANoteBook.Page[iPageIndex].Caption]), [msmbYes, msmbAll, msmbNo, msmbCancel], msmbYes, msmbCancel) else UserAnswer := MsgBox(Format(rsMsgCloseLockedTab, [ANoteBook.Page[iPageIndex].Caption]), [msmbYes, msmbNo, msmbCancel], msmbYes, msmbCancel); case UserAnswer of mmrNo: Exit(1); mmrCancel, mmrNone: Exit(2); end end else Exit(1); end; if Assigned(QuickViewPanel) then QuickViewClose; ANoteBook.RemovePage(iPageIndex); if UserAnswer=mmrAll then Result:=3 else Result:= 0; end; end; procedure TfrmMain.ReLoadTabs(ANoteBook: TFileViewNotebook); var I : Integer; begin for I := 0 to ANoteBook.PageCount - 1 do begin ANoteBook.View[I].UpdateView; end; end; procedure TfrmMain.LoadTabsIni(ANoteBook: TFileViewNotebook); var I: Integer; sIndex, TabsSection: String; sCurrentDir, sPath: String; iActiveTab: Integer; Page: TFileViewPage; AFileView: TFileView; aFileSource: IFileSource; begin if ANoteBook = nbLeft then begin TabsSection:= 'lefttabs'; end else begin TabsSection:= 'righttabs'; end; I:= 0; sIndex:= '0'; // create one tab in any way sCurrentDir:= gpExePath; // default path sPath:= gIni.ReadString(TabsSection, sIndex + '_path', sCurrentDir); while True do begin sPath := GetDeepestExistingPath(sPath); if sPath = EmptyStr then sPath := sCurrentDir; Page := ANoteBook.AddPage; aFileSource := TFileSystemFileSource.GetFileSource; AFileView := CreateFileView('columns', Page, gIni, TabsSection, StrToInt(sIndex)); if not Assigned(AFileView) then begin ANoteBook.RemovePage(Page); continue; end; Page.LockState := TTabLockState(gIni.ReadInteger(TabsSection, sIndex + '_options', Integer(tlsNormal))); Page.LockPath := sPath; AFileView.AddFileSource(aFileSource, sPath); // Assign events after loading file source. AssignEvents(AFileView); Inc(I); // get page index in string representation sIndex:= IntToStr(I); // get path of next tab sPath:= gIni.ReadString(TabsSection, sIndex + '_path', ''); // if not found then break if sPath = '' then Break; end; // read active tab index iActiveTab:= gIni.ReadInteger(TabsSection, 'activetab', 0); // set active tab if (iActiveTab >= 0) and (iActiveTab < ANoteBook.PageCount) then ANoteBook.PageIndex := iActiveTab; end; procedure TfrmMain.LoadTabsXml(AConfig: TXmlConfig; ABranch:string; ANoteBook: TFileViewNotebook); // default was ABranch: 'Tabs/OpenedTabs/' var sPath, sViewType: String; iActiveTab: Integer; Page: TFileViewPage; AFileView: TFileView; AFileViewFlags: TFileViewFlags; aFileSource: IFileSource; RootNode, TabNode, ViewNode: TXmlNode; begin RootNode := AConfig.FindNode(AConfig.RootNode,ABranch); if Assigned(RootNode) then begin TabNode := RootNode.FirstChild; while Assigned(TabNode) do begin if TabNode.CompareName('Tab') = 0 then begin Page := nil; AFileView := nil; ViewNode := AConfig.FindNode(TabNode, 'FileView', False); if Assigned(ViewNode) then begin // File view has its own configuration. if AConfig.TryGetAttr(ViewNode, 'Type', sViewType) then begin Page := ANoteBook.AddPage; Page.LoadConfiguration(AConfig, TabNode); AFileView := CreateFileView(sViewType, Page, AConfig, ViewNode); end else DCDebug('File view type not specified in configuration: ' + AConfig.GetPathFromNode(ViewNode) + '.'); end // Else try old configuration. else if AConfig.TryGetValue(TabNode, 'Path', sPath) then begin sPath := GetDeepestExistingPath(sPath); if sPath <> EmptyStr then begin Page := ANoteBook.AddPage; Page.LoadConfiguration(AConfig, TabNode); AFileView := CreateFileView('columns', Page, AConfig, TabNode); AFileView.AddFileSource(TFileSystemFileSource.GetFileSource, sPath); end; end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(TabNode) + '.'); if Assigned(Page) then begin if (not Assigned(AFileView)) or (AFileView.FileSourcesCount = 0) then begin ANoteBook.RemovePage(Page); end else begin if (Page.LockState in [tlsPathLocked, tlsPathResets, tlsDirsInNewTab]) and (Page.LockPath = '') then Page.LockPath := AFileView.CurrentPath; // Assign events after loading file source. AssignEvents(AFileView); end; end; end; TabNode := TabNode.NextSibling; end; end; // Create at least one tab. if ANoteBook.PageCount = 0 then begin Page := ANoteBook.AddPage; aFileSource := TFileSystemFileSource.GetFileSource; if gDelayLoadingTabs then AFileViewFlags := [fvfDelayLoadingFiles] else AFileViewFlags := []; AFileView := TColumnsFileView.Create(Page, aFileSource, gpExePath, AFileViewFlags); AssignEvents(AFileView); end else if Assigned(RootNode) then begin // read active tab index iActiveTab := AConfig.GetValue(RootNode, 'ActiveTab', 0); // set active tab if (iActiveTab >= 0) and (iActiveTab < ANoteBook.PageCount) then begin if ANoteBook.PageIndex = iActiveTab then nbPageChanged(ANoteBook) else ANoteBook.PageIndex := iActiveTab; end; end; end; procedure TfrmMain.SaveTabsXml(AConfig: TXmlConfig;ABranch:string; ANoteBook: TFileViewNotebook; ASaveHistory:boolean); // default was: 'Tabs/OpenedTabs' var I: Integer; TabsSection: String; Page: TFileViewPage; RootNode, TabNode, ViewNode: TXmlNode; begin RootNode := AConfig.FindNode(AConfig.RootNode, ABranch, True); if ANoteBook = nbLeft then TabsSection := 'Left' else TabsSection := 'Right'; RootNode := AConfig.FindNode(RootNode, TabsSection, True); AConfig.ClearNode(RootNode); AConfig.AddValue(RootNode, 'ActiveTab', ANoteBook.PageIndex); for I:= 0 to ANoteBook.PageCount - 1 do begin TabNode := AConfig.AddNode(RootNode, 'Tab'); ViewNode := AConfig.AddNode(TabNode, 'FileView'); Page := ANoteBook.Page[I]; Page.SaveConfiguration(AConfig, TabNode); Page.FileView.SaveConfiguration(AConfig, ViewNode, ASaveHistory); end; end; { TfrmMain.LoadTheseTabsWithThisConfig } // Will have tabs section from Xml from either left or right and store it back on actual form on left, right, active, inactive, both or none, with setting keep or not etc. // The "ABranch" *must* include the trailing slash when calling here. procedure TfrmMain.LoadTheseTabsWithThisConfig(Config: TXmlConfig; ABranch:string; Source, Destination:TTabsConfigLocation; DestinationToKeep : TTabsConfigLocation; var TabsAlreadyDestroyedFlags:TTabsFlagsAlreadyDestroyed); var sSourceSectionName: string; CheckNode: TXmlNode; begin if Destination<>tclNone then begin // 1. Normalize our destination side and destination to keep in case params specified active/inactive if ((Destination=tclActive) and (ActiveFrame=FrameLeft)) OR ((Destination=tclInactive) and (NotActiveFrame=FrameLeft)) then Destination:=tclLeft; if ((Destination=tclActive) and (ActiveFrame=FrameRight)) OR ((Destination=tclInactive) and (NotActiveFrame=FrameRight)) then Destination:=tclRight; if ((DestinationToKeep=tclActive) and (ActiveFrame=FrameLeft)) OR ((DestinationToKeep=tclInactive) and (NotActiveFrame=FrameLeft)) then DestinationToKeep:=tclLeft; if ((DestinationToKeep=tclActive) and (ActiveFrame=FrameRight)) OR ((DestinationToKeep=tclInactive) and (NotActiveFrame=FrameRight)) then DestinationToKeep:=tclRight; // 2. Setup our source section name. case Source of tclLeft: sSourceSectionName := 'Left'; tclRight: sSourceSectionName := 'Right'; end; // 3. Actual load infos from config file. if (Destination=tclLeft) OR (Destination=tclBoth) then begin CheckNode := Config.FindNode(Config.RootNode, ABranch + sSourceSectionName); if Assigned(CheckNode) then begin if (DestinationToKeep<>tclLeft) AND (DestinationToKeep<>tclBoth) AND (not(tfadLeft in TabsAlreadyDestroyedFlags)) then begin frmMain.LeftTabs.DestroyAllPages; TabsAlreadyDestroyedFlags := TabsAlreadyDestroyedFlags + [tfadLeft]; // To don't delete it twice in case both target are left. end; end; LoadTabsXml(Config, ABranch + sSourceSectionName, LeftTabs); end; if (Destination=tclRight) OR (Destination=tclBoth) then begin CheckNode := Config.FindNode(Config.RootNode, ABranch + sSourceSectionName); if Assigned(CheckNode) then begin if (DestinationToKeep<>tclRight) AND (DestinationToKeep<>tclBoth) AND (not(tfadRight in TabsAlreadyDestroyedFlags)) then begin frmMain.RightTabs.DestroyAllPages; TabsAlreadyDestroyedFlags := TabsAlreadyDestroyedFlags + [tfadRight]; // To don't delete it twice in case both target are right. end; LoadTabsXml(Config, ABranch + sSourceSectionName, RightTabs); end; end; // 4. Refresh content of tabs. case Destination of tclLeft: FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; tclRight: FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; tclBoth: begin FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; end; end; end; // if Destination<>tclNone then end; procedure TfrmMain.ToggleConsole; begin if gTermWindow then begin if not Assigned(cmdConsole) then begin cmdConsole:= TCmdBox.Create(pgConsole); cmdConsole.Parent:= pgConsole; cmdConsole.Align:= alClient; cmdConsole.AutoFollow:= True; cmdConsole.LineCount:= 256; FontOptionsToFont(gFonts[dcfConsole], cmdConsole.Font); end; if not Assigned(Cons) then begin Cons:= CreateConsoleThread; Cons.ColsCount:= 80; Cons.RowsCount:= cmdConsole.LineCount; Cons.CmdBox:= cmdConsole; Cons.Start; end; end else begin if Assigned(cmdConsole) then begin cmdConsole.Hide; FreeAndNil(cmdConsole); end; FreeAndNil(Cons); end; nbConsole.Visible:= gTermWindow; ConsoleSplitter.Visible:= gTermWindow; end; procedure TfrmMain.ToggleFullscreenConsole; begin if nbConsole.Height < (nbConsole.Height + pnlNotebooks.Height) then begin nbConsole.Height := nbConsole.Height + pnlNotebooks.Height; end else begin nbConsole.Height := 0; end; end; procedure TfrmMain.ToolbarExecuteCommand(ToolItem: TKASToolItem); var CommandItem: TKASCommandItem; CommandFuncResult: TCommandFuncResult; begin if not Draging then begin CommandItem := ToolItem as TKASCommandItem; CommandFuncResult:=Commands.Commands.ExecuteCommand(CommandItem.Command, CommandItem.Params); if gToolbarReportErrorWithCommands AND (CommandFuncResult=cfrNotFound) then begin MsgError('Command not found! ('+CommandItem.Command+')'); end; end; Draging := False; end; procedure TfrmMain.ToolbarExecuteProgram(ToolItem: TKASToolItem); var ProgramItem: TKASProgramItem; CommandExecResult: boolean; begin if not Draging then begin ProgramItem := ToolItem as TKASProgramItem; CommandExecResult:=ProcessExtCommandFork(ProgramItem.Command, ProgramItem.Params, ProgramItem.StartPath); if gToolbarReportErrorWithCommands AND (CommandExecResult=FALSE) then MsgError(Format(rsMsgProblemExecutingCommand,[ProgramItem.Command])); end; Draging := False; end; procedure TfrmMain.UpdateWindowView; procedure UpdateNoteBook(NoteBook: TFileViewNotebook); var I: Integer; begin NoteBook.ShowTabs := ((NoteBook.PageCount > 1) or (tb_always_visible in gDirTabOptions)) and gDirectoryTabs; if tb_show_close_button in gDirTabOptions then begin NoteBook.Options := NoteBook.Options + [nboShowCloseButtons]; end else begin NoteBook.Options := NoteBook.Options - [nboShowCloseButtons]; end; if nbcMultiline in NoteBook.GetCapabilities then NoteBook.MultiLine := tb_multiple_lines in gDirTabOptions; case gDirTabPosition of tbpos_top: NoteBook.TabPosition := tpTop; tbpos_bottom: NoteBook.TabPosition := tpBottom; else NoteBook.TabPosition := tpTop; end; if FInitializedView then begin for I := 0 to NoteBook.PageCount - 1 do // change on all tabs NoteBook.View[I].UpdateView; end; end; procedure AnchorHorizontalBetween(AControl, ALeftSibling, ARightSibling: TControl); begin AControl.Anchors := AControl.Anchors + [akLeft, akRight]; AControl.AnchorSide[akLeft].Control := ALeftSibling; AControl.AnchorSide[akLeft].Side := asrRight; AControl.AnchorSide[akRight].Control := ARightSibling; AControl.AnchorSide[akRight].Side := asrLeft; end; procedure AnchorHorizontal(AControl, ASibling: TControl); begin AControl.Anchors := AControl.Anchors + [akLeft, akRight]; AControl.AnchorSide[akLeft].Control := ASibling; AControl.AnchorSide[akLeft].Side := asrLeft; AControl.AnchorSide[akRight].Control := ASibling; AControl.AnchorSide[akRight].Side := asrRight; end; procedure AnchorFreeSpace(LeftControl, RightControl: TControl; ExcludeVert: Boolean); begin if gDrivesListButton then begin AnchorHorizontalBetween(LeftControl, btnLeftDrive, btnLeftDirectoryHotlist); AnchorHorizontalBetween(RightControl, btnRightDrive, btnRightDirectoryHotlist); if not ExcludeVert then begin LeftControl.AnchorVerticalCenterTo(pnlLeftTools); RightControl.AnchorVerticalCenterTo(pnlRightTools); end; end else begin AnchorHorizontal(LeftControl, pnlLeftTools); AnchorHorizontal(RightControl, pnlRightTools); if not ExcludeVert then begin LeftControl.AnchorSide[akTop].Control := pnlLeftTools; LeftControl.AnchorSide[akTop].Side := asrTop; RightControl.AnchorSide[akTop].Control := pnlRightTools; RightControl.AnchorSide[akTop].Side := asrTop; end; end; end; var I: Integer; HMForm: THMForm; FunButton: TSpeedButton; Hotkey: THotkey; begin DisableAutoSizing; try if gHorizontalFilePanels then begin pnlLeft.Align := alTop; pnlLeft.BorderSpacing.Right := 0; pnlLeft.BorderSpacing.Bottom := 3; MainSplitter.Cursor := crVSplit; end else begin pnlLeft.Align := alLeft; pnlLeft.BorderSpacing.Right := 3; pnlLeft.BorderSpacing.Bottom := 0; MainSplitter.Cursor := crHSplit; end; (* Disk Panels *) if gHorizontalFilePanels and gDriveBar1 and gDriveBar2 then begin dskLeft.Parent := pnlDiskLeftInner; dskRight.Parent := pnlDiskRightInner; end else begin dskLeft.Parent := pnlDskLeft; dskRight.Parent := pnlDskRight; end; pnlDiskLeftInner.Visible := gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDiskRightInner.Visible := gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDskLeft.Visible := not gHorizontalFilePanels and gDriveBar1 and gDriveBar2; pnlDskRight.Visible := gDriveBar1 and (not gHorizontalFilePanels or not gDriveBar2); pnlDisk.Visible := pnlDskLeft.Visible or pnlDskRight.Visible; // Create disk panels after assigning parent. UpdateDiskCount; // Update list of showed drives (*/ Disk Panels *) FDrivesListPopup.UpdateView; (*Main menu*) Commands.DoShowMainMenu(gMainMenu); (*Tool Bar*) MainToolBar.Visible:= gButtonBar; MainToolBar.Flat:= gToolBarFlat; MainToolBar.GlyphSize:= gToolBarIconSize; MainToolBar.SetButtonSize(gToolBarButtonSize, gToolBarButtonSize); MainToolBar.ChangePath:= gpExePath; MainToolBar.EnvVar:= '%commander_path%'; LoadMainToolbar; btnLeftDrive.Visible := gDrivesListButton; btnLeftDrive.Flat := gInterfaceFlat; btnLeftRoot.Visible := gDrivesListButton; btnLeftRoot.Flat := gInterfaceFlat; btnLeftUp.Visible := gDrivesListButton; btnLeftUp.Flat := gInterfaceFlat; btnLeftHome.Visible := gDrivesListButton; btnLeftHome.Flat := gInterfaceFlat; btnLeftDirectoryHotlist.Visible := gDrivesListButton; btnLeftDirectoryHotlist.Flat := gInterfaceFlat; btnLeftEqualRight.Visible := gDrivesListButton; btnLeftEqualRight.Flat:= gInterfaceFlat; lblLeftDriveInfo.Visible:= gDriveFreeSpace; pbxLeftDrive.Visible := gDriveInd; pnlLeftTools.Visible:= gDrivesListButton or gDriveFreeSpace or gDriveInd; pnlLeftTools.DoubleBuffered := True; btnRightDrive.Visible := gDrivesListButton; btnRightDrive.Flat := gInterfaceFlat; btnRightRoot.Visible := gDrivesListButton; btnRightRoot.Flat := gInterfaceFlat; btnRightUp.Visible := gDrivesListButton; btnRightUp.Flat := gInterfaceFlat; btnRightHome.Visible := gDrivesListButton;; btnRightHome.Flat := gInterfaceFlat; btnRightDirectoryHotlist.Visible := gDrivesListButton; btnRightDirectoryHotlist.Flat := gInterfaceFlat; btnRightEqualLeft.Visible := gDrivesListButton; btnRightEqualLeft.Flat:= gInterfaceFlat; lblRightDriveInfo.Visible:= gDriveFreeSpace; pbxRightDrive.Visible := gDriveInd; pnlRightTools.Visible:= gDrivesListButton or gDriveFreeSpace or gDriveInd; pnlRightTools.DoubleBuffered := True; // Free space indicator. if gDriveFreeSpace then begin AnchorFreeSpace(lblLeftDriveInfo, lblRightDriveInfo, gDriveInd); if gDriveInd then begin lblLeftDriveInfo.AnchorSide[akTop].Side := asrTop; lblRightDriveInfo.AnchorSide[akTop].Side := asrTop; end; end; // Drive free space indicator if gDriveInd then begin AnchorFreeSpace(pbxLeftDrive, pbxRightDrive, gDriveFreeSpace); if gDriveFreeSpace then begin pbxLeftDrive.AnchorSide[akTop].Control := lblLeftDriveInfo; pbxLeftDrive.AnchorSide[akTop].Side := asrBottom; pbxRightDrive.AnchorSide[akTop].Control := lblRightDriveInfo; pbxRightDrive.AnchorSide[akTop].Side := asrBottom; end; end; // Separate tree UpdateShellTreeView; // Operations panel and menu if (gPanelOfOp = False) then FreeAndNil(FOperationsPanel) else begin FOperationsPanel := TOperationsPanel.Create(Self); FOperationsPanel.Parent := PanelAllProgress; FOperationsPanel.DoubleBuffered := True; PanelAllProgress.OnResize := @FOperationsPanel.ParentResized; end; PanelAllProgress.Visible := gPanelOfOp; Timer.Enabled := gPanelOfOp or gProgInMenuBar; // Log window seLogWindow.Visible := gLogWindow; LogSplitter.Visible := gLogWindow; // Align log window seLogWindow.Top := 0; LogSplitter.Top := 0; FontOptionsToFont(gFonts[dcfLog], seLogWindow.Font); // Command line pnlCommand.Visible := gCmdLine; // Align command line and terminal window pnlCommand.Top := -Height; ConsoleSplitter.Top:= -Height; ToggleConsole; // Function keys pnlKeys.Visible := gKeyButtons; if gKeyButtons then begin pnlKeys.Height := Canvas.TextHeight('Wg') + 4; pnlKeys.Top:= Height * 2; HMForm := HotMan.Forms.Find('Main'); for I := 0 to pnlKeys.ControlCount - 1 do begin if pnlKeys.Controls[I] is TSpeedButton then begin FunButton := pnlKeys.Controls[I] as TSpeedButton; FunButton.Flat := gInterfaceFlat; if Assigned(HMForm) then begin Hotkey := HMForm.Hotkeys.FindByCommand(FunctionButtonsCaptions[I].ACommand); if Assigned(Hotkey) then FunButton.Caption := FunctionButtonsCaptions[I].ACaption + ' ' + ShortcutsToText(Hotkey.Shortcuts); end; end; end; end; UpdateNoteBook(nbLeft); UpdateNoteBook(nbRight); if FInitializedView then begin UpdateSelectedDrives; UpdateFreeSpace(fpLeft); UpdateFreeSpace(fpRight); end; UpdateHotDirIcons; // Preferable to be loaded even if not required in popupmenu *because* in the tree it's a must, especially when checking for missing directories ShowTrayIcon(gAlwaysShowTrayIcon); FInitializedView := True; finally EnableAutoSizing; end; end; procedure TfrmMain.edtCommandKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if not edtCommand.DroppedDown and ((Key=VK_UP) or (Key=VK_DOWN)) then begin ActiveFrame.SetFocus; Key:= 0; end else if edtCommand.DroppedDown and (Key in [VK_RETURN, VK_SELECT, VK_ESCAPE]) then begin edtCommand.DroppedDown := False; Key := 0; end else case Key of VK_ESCAPE: begin if edtCommand.Text <> '' then edtCommand.Text := '' else ActiveFrame.SetFocus; Key := 0; end; VK_RETURN, VK_SELECT: begin if (Shift * [ssCtrl, ssAlt, ssMeta, ssAltGr] = []) then begin ExecuteCommandLine(ssShift in Shift); Key := 0; end; end; VK_TAB: begin ActiveFrame.SetFocus; Key := 0; end; VK_PAUSE: begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SendBreak_pty(); end; end; CheckCommandLine(GetKeyShiftStateEx, Key); end; procedure TfrmMain.edtCommandExit(Sender: TObject); begin // Hide command line if it was temporarily shown. if (not gCmdLine) and IsCommandLineVisible then pnlCommand.Hide; end; procedure TfrmMain.tbChangeDirClick(Sender: TObject); var sDir: String; ToolItem: TKASToolItem; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then begin ToolItem := Button.ToolItem; if ToolItem is TKASProgramItem then begin sDir := TKASProgramItem(ToolItem).StartPath; sDir := PrepareParameter(sDir, nil, [ppoNormalizePathDelims, ppoReplaceTilde]); Commands.cm_ChangeDir([sDir]); end; end; end; procedure TfrmMain.tbCopyClick(Sender: TObject); var ToolItem: TKASToolItem; ItemClone: TKASToolItem = nil; Serializer: TKASToolBarSerializer = nil; Stream: TStringStream = nil; Button: TKASToolButton; begin Button := TKASToolButton(pmToolBar.Tag); if Assigned(Button) then try ToolItem := Button.ToolItem; // Create a copy so that ID of the button is different. if Sender = tbCopy then begin ItemClone := ToolItem.Clone; ToolItem := ItemClone; end; Stream := TStringStream.Create(''); Stream.WriteString(DCToolItemClipboardHeader); Serializer := TKASToolBarSerializer.Create; Serializer.Serialize(Stream, ToolItem); Clipboard.SetFormat(PredefinedClipboardFormat(pcfText), Stream); if Sender = tbCut then MainToolBar.RemoveButton(Button); SaveMainToolBar; finally ItemClone.Free; Serializer.Free; Stream.Free; end; end; procedure TfrmMain.tbEditClick(Sender: TObject); begin EditToolbarButton(TKASToolButton(pmToolBar.Tag)); end; procedure TfrmMain.OnUniqueInstanceMessage(Sender: TObject; Params: TCommandLineParams); begin if HiddenToTray then RestoreFromTray else begin WindowState:= lastWindowState; BringToFront; end; LoadTabsCommandLine(Params); end; procedure TfrmMain.tbPasteClick(Sender: TObject); var Data: TStringList = nil; ProgramItem: TKASProgramItem; ToolItem: TKASToolItem; Loader: TKASToolBarLoader = nil; Serializer: TKASToolBarSerializer = nil; Stream: TStringStream = nil; Pasted: Boolean = False; Button: TKASToolButton; begin Stream := TStringStream.Create(''); if Clipboard.GetFormat(PredefinedClipboardFormat(pcfText), Stream) then try Button := TKASToolButton(pmToolBar.Tag); // Cut any trailing zeros. while Stream.DataString[Length(Stream.DataString)] = #0 do Stream.Size := Stream.Size - 1; if StrBegins(Stream.DataString, TCToolbarClipboardHeader) or StrBegins(Stream.DataString, DCToolbarClipboardHeader) then begin Data:= TStringList.Create; Data.Text:= Stream.DataString; if Data.Count < 6 then Exit; if (Data[0] = TCToolbarClipboardHeader) or (Data[0] = DCToolbarClipboardHeader) then begin ProgramItem := TKASProgramItem.Create; ProgramItem.Command := Data[1]; ProgramItem.Params := Data[2]; ProgramItem.Icon := Data[3]; ProgramItem.Hint := Data[4]; ProgramItem.StartPath := Data[5]; MainToolBar.InsertButton(Button, ProgramItem); SaveMainToolBar; Pasted := True; end; end else if StrBegins(Stream.DataString, DCToolItemClipboardHeader) then begin Stream.Position := Length(DCToolItemClipboardHeader); Serializer := TKASToolBarSerializer.Create; Loader := TKASToolBarExtendedLoader.Create(Commands.Commands); try ToolItem := Serializer.Deserialize(Stream, Loader); MainToolBar.InsertButton(Button, ToolItem); SaveMainToolBar; Pasted := True; except on EXMLReadError do; end; end; if not Pasted then MessageDlg(Application.Title, rsClipboardContainsInvalidToolbarData, mtWarning, [mbOK], 0); finally Data.Free; Loader.Free; Serializer.Free; Stream.Free; end; end; procedure TfrmMain.CheckCommandLine(ShiftEx: TShiftState; var Key: Word); var ModifierKeys: TShiftState; UTF8Char: TUTF8Char; KeyTypingModifier: TKeyTypingModifier; begin for KeyTypingModifier in TKeyTypingModifier do begin if gKeyTyping[KeyTypingModifier] = ktaCommandLine then begin ModifierKeys := TKeyTypingModifierToShift[KeyTypingModifier]; if ((ModifierKeys <> []) and (ShiftEx * KeyModifiersShortcutNoText = ModifierKeys)) {$IFDEF MSWINDOWS} // Allow entering international characters with Ctrl+Alt on Windows, // if there is no action for Ctrl+Alt and command line typing has no modifiers. or (HasKeyboardAltGrKey and (ShiftEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmCtrlAlt] = ktaNone) and (gKeyTyping[ktmNone] = ktaCommandLine)) {$ENDIF} then begin if (Key <> VK_SPACE) or (edtCommand.Text <> '') then begin UTF8Char := VirtualKeyToUTF8Char(Key, ShiftEx - ModifierKeys); if (UTF8Char <> '') and (not ((Length(UTF8Char) = 1) and (UTF8Char[1] in [#0..#31]))) then begin TypeInCommandLine(UTF8Char); Key := 0; end; end; end; Break; end; end; end; function TfrmMain.ExecuteCommandFromEdit(sCmd: String; bRunInTerm: Boolean): Boolean; var iIndex: Integer; sDir, sParams: String; sFilename: String = ''; Operation: TFileSourceExecuteOperation = nil; aFile: TFile = nil; begin Result:= True; InsertFirstItem(sCmd, edtCommand); // only cMaxStringItems(see uGlobs.pas) is stored if edtCommand.Items.Count>cMaxStringItems then edtCommand.Items.Delete(edtCommand.Items.Count-1); edtCommand.DroppedDown:= False; if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin iIndex:= Pos('cd ', sCmd); if (iIndex = 1) or (sCmd = 'cd') then begin sCmd:= ReplaceEnvVars(sCmd); if (iIndex <> 1) then sDir:= GetHomeDir else begin sDir:= RemoveQuotation(Copy(sCmd, iIndex + 3, Length(sCmd))); sDir:= NormalizePathDelimiters(Trim(sDir)); sDir:= ReplaceTilde(sDir); sDir:= GetAbsoluteFileName(ActiveFrame.CurrentPath, sDir); if mbFileExists(sDir) then //if user entered an existing file, let's switch to the parent folder AND select that file begin sFilename:= ExtractFileName(sDir); sDir:= ExtractFileDir(sDir); end; end; // Choose FileSource by path ChooseFileSource(ActiveFrame, sDir); if sFilename <> '' then ActiveFrame.SetActiveFile(sFilename); if SameText(ExcludeBackPathDelimiter(ActiveFrame.CurrentPath), sDir) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SetCurrentDir(sDir); end; end else begin {$IFDEF MSWINDOWS} //Let's see if user typed something like "c:", "X:", etc. and if so, switch active panel to that drive (like TC) if (length(sCmd)=2) AND (pos(':',sCmd)=2) then begin iIndex:=0; while (iIndex<DrivesList.Count) AND (sCmd<>'') do begin if lowercase(sCmd[1]) = lowercase(PDrive(DrivesList.Items[iIndex])^.DisplayName) then begin SetPanelDrive(PanelSelected, DrivesList.Items[iIndex],false); sCmd:=''; end; inc(iIndex); end; end; {$ENDIF} if sCmd<>'' then begin if gTermWindow and Assigned(Cons) then begin sCmd:= ReplaceEnvVars(sCmd); Cons.Terminal.Write_pty(sCmd + sLineBreak) end else begin try SplitCmdLineToCmdParams(sCmd, sCmd, sParams); //TODO:Hum... ProcessExtCommandFork(sCmd, sParams, ActiveFrame.CurrentPath, nil, bRunInTerm, bRunInTerm); except on e: EInvalidCommandLine do MessageDlg(rsMsgInvalidCommandLine, rsMsgInvalidCommandLine + ': ' + e.Message, mtError, [mbOK], 0); end; end; end; end; end else begin aFile:= ActiveFrame.CloneActiveFile; if Assigned(aFile) then try sCmd:= 'quote' + #32 + sCmd; aFile.FullPath:= ActiveFrame.CurrentPath; Operation:= ActiveFrame.FileSource.CreateExecuteOperation( aFile, ActiveFrame.CurrentPath, sCmd) as TFileSourceExecuteOperation; if Assigned(Operation) then Operation.Execute; finally FreeThenNil(aFile); FreeThenNil(Operation); end; end; end; procedure TfrmMain.SetMainSplitterPos(AValue: Double); begin if (AValue >= 0) and (AValue <= 100) then FMainSplitterPos:= AValue; end; procedure TfrmMain.SetPanelSelected(AValue: TFilePanelSelect); begin if PanelSelected = AValue then Exit; PanelSelected := AValue; UpdateTreeViewPath; UpdatePrompt; end; procedure TfrmMain.TypeInCommandLine(Str: String); begin Commands.cm_FocusCmdLine([]); edtCommand.Text := edtCommand.Text + Str; edtCommand.SelStart := UTF8Length(edtCommand.Text) + 1; end; //LaBero begin //Minimize the main window procedure TfrmMain.MinimizeWindow; begin Self.WindowState := wsMinimized; end; //LaBero end procedure TfrmMain.LoadTabs; begin if Assigned(gIni) then begin LoadTabsIni(nbLeft); LoadTabsIni(nbRight); end else begin LoadTabsXml(gConfig,'Tabs/OpenedTabs/Left', nbLeft); LoadTabsXml(gConfig,'Tabs/OpenedTabs/Right', nbRight); end; LoadTabsCommandLine(CommandLineParams); if gDelayLoadingTabs then begin // Load only the current active tab of each notebook. FrameLeft.Flags := FrameLeft.Flags - [fvfDelayLoadingFiles]; FrameRight.Flags := FrameRight.Flags - [fvfDelayLoadingFiles]; end; end; procedure TfrmMain.LoadTabsCommandLine(Params: TCommandLineParams); procedure AddTab(ANoteBook: TFileViewNotebook; aPath: String); var Page: TFileViewPage; AFileView: TFileView; AFileViewFlags: TFileViewFlags; aFileSource: IFileSource; begin Page := ANoteBook.AddPage; aFileSource := TFileSystemFileSource.GetFileSource; if gDelayLoadingTabs then AFileViewFlags := [fvfDelayLoadingFiles] else AFileViewFlags := []; AFileView := TColumnsFileView.Create(Page, aFileSource, aPath, AFileViewFlags); AssignEvents(AFileView); ANoteBook.PageIndex := ANoteBook.PageCount - 1; end; procedure LoadPanel(aNoteBook: TFileViewNotebook; aPath: String); begin if Length(aPath) <> 0 then begin aPath:= ReplaceEnvVars(ReplaceTilde(aPath)); if not mbFileSystemEntryExists(aPath) then aPath:= GetDeepestExistingPath(aPath); if Length(aPath) <> 0 then begin if Params.NewTab then AddTab(aNoteBook, aPath) else aNoteBook.ActivePage.FileView.ChangePathAndSetActiveFile(aPath) end; end; end; begin //-- set path for left panel (if set) LoadPanel(nbLeft, Params.LeftPath); //-- set path for right panel (if set) LoadPanel(nbRight, Params.RightPath); //-- set active panel, if needed if Params.ActivePanelSpecified then begin if Params.ActiveRight then SetActiveFrame(fpRight) else SetActiveFrame(fpLeft); end; //-- set path for active panel (if set) if ActiveFrame.NotebookPage is TFileViewPage then begin LoadPanel((ActiveFrame.NotebookPage as TFileViewPage).Notebook, Params.ActivePanelPath); end; end; procedure TfrmMain.LoadWindowState; var ANode: TXmlNode; begin (* Load window bounds and state *) if Assigned(gIni) then begin Left := gIni.ReadInteger('Configuration', 'Main.Left', 80); Top := gIni.ReadInteger('Configuration', 'Main.Top', 48); Width := gIni.ReadInteger('Configuration', 'Main.Width', 800); Height := gIni.ReadInteger('Configuration', 'Main.Height', 480); if gIni.ReadBool('Configuration', 'Maximized', True) then Self.WindowState := wsMaximized; end else begin ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position'); if Assigned(ANode) then begin MainSplitterPos := gConfig.GetValue(ANode, 'Splitter', 50.0); Left := gConfig.GetValue(ANode, 'Left', 80); Top := gConfig.GetValue(ANode, 'Top', 48); Width := gConfig.GetValue(ANode, 'Width', 800); Height := gConfig.GetValue(ANode, 'Height', 480); if gConfig.GetValue(ANode, 'Maximized', True) then Self.WindowState := wsMaximized; end; end; end; procedure TfrmMain.SaveWindowState; var ANode: TXmlNode; begin (* Save all tabs *) SaveTabsXml(gConfig, 'Tabs/OpenedTabs/', nbLeft, gSaveDirHistory); SaveTabsXml(gConfig, 'Tabs/OpenedTabs/', nbRight, gSaveDirHistory); (* Save window bounds and state *) ANode := gConfig.FindNode(gConfig.RootNode, 'MainWindow/Position', True); // save window size only if it's not Maximized (for not break normal size) if (WindowState <> wsMaximized) then begin gConfig.SetValue(ANode, 'Left', Left); gConfig.SetValue(ANode, 'Top', Top); gConfig.SetValue(ANode, 'Width', Width); gConfig.SetValue(ANode, 'Height', Height); end; gConfig.SetValue(ANode, 'Maximized', (WindowState = wsMaximized)); gConfig.SetValue(ANode, 'Splitter', FMainSplitterPos); end; procedure TfrmMain.LoadMainToolbar; var ToolBarLoader: TKASToolBarExtendedLoader; ToolBarNode: TXmlNode; begin MainToolBar.BeginUpdate; ToolBarLoader := TKASToolBarExtendedLoader.Create(Commands.Commands); try MainToolBar.Clear; ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', False); if Assigned(ToolBarNode) then MainToolBar.LoadConfiguration(gConfig, ToolBarNode, ToolBarLoader, tocl_FlushCurrentToolbarContent); finally ToolBarLoader.Free; MainToolBar.EndUpdate; end; end; procedure TfrmMain.SaveMainToolBar; var ToolBarNode: TXmlNode; begin ToolBarNode := gConfig.FindNode(gConfig.RootNode, 'Toolbars/MainToolbar', True); gConfig.ClearNode(ToolBarNode); MainToolBar.SaveConfiguration(gConfig, ToolBarNode); end; function TfrmMain.IsCommandLineVisible: Boolean; begin Result := (edtCommand.Visible and pnlCommand.Visible); end; function TfrmMain.FindMatchingDrive(Path: String): Integer; var i : Integer; LongestPathLen: Integer = 0; DrivePath: String; DrivePathLen: PtrInt; begin Result := -1; if Assigned(DrivesList) then begin Path := UTF8UpperCase(Path); for i := 0 to DrivesList.Count - 1 do begin DrivePath := UTF8UpperCase(DrivesList[i]^.Path); DrivePathLen := UTF8Length(DrivePath); if (DrivePathLen > LongestPathLen) and IsInPath(DrivePath, Path, True, True) then begin LongestPathLen := DrivePathLen; Result := i; end; end; end; end; procedure TfrmMain.UpdateDriveToolbarSelection(DriveToolbar: TKAStoolBar; FileView: TFileView); var DriveIndex: Integer; begin DriveIndex := FindMatchingDrive(FileView.CurrentPath); if (DriveIndex >= 0) and (DriveIndex < DriveToolbar.ButtonCount) then DriveToolbar.Buttons[DriveIndex].Down := True else // Path not found in toolbar. DriveToolbar.UncheckAllButtons; end; procedure TfrmMain.UpdateDriveButtonSelection(DriveButton: TSpeedButton; FileView: TFileView); var BitmapTmp: Graphics.TBitmap = nil; DriveIndex: Integer; Drive: PDrive; begin if not gDrivesListButton then Exit; DriveIndex := FindMatchingDrive(FileView.CurrentPath); if DriveIndex >= 0 then begin Drive := DrivesList[DriveIndex]; DriveButton.Caption := Drive^.DisplayName; DriveButton.Tag := DriveIndex; BitmapTmp := PixMapManager.GetDriveIcon(Drive, 22, DriveButton.Color); end else begin DriveButton.Caption := ''; DriveButton.Tag := -1; if FileView.FileSource.IsClass(TArchiveFileSource) then BitmapTmp := PixMapManager.GetArchiveIcon(22, DriveButton.Color) else BitmapTmp := PixMapManager.GetDefaultDriveIcon(22, DriveButton.Color); end; DriveButton.Glyph := BitmapTmp; DriveButton.Width := DriveButton.Glyph.Width + DriveButton.Canvas.TextWidth(DriveButton.Caption) + 16; FreeAndNil(BitmapTmp); end; procedure TfrmMain.UpdateSelectedDrive(ANoteBook: TFileViewNotebook); var FileView: TFileView; begin FileView := ANoteBook.ActiveView; if Assigned(FileView) then begin // Change left drive toolbar for left drive button. if (ANoteBook = nbLeft) then begin if gDriveBar1 then // If drives toolbar enabled at all begin if gDriveBar2 then // If showing two toolbars UpdateDriveToolbarSelection(dskLeft, FileView) else // dskRight is the main toolbar. UpdateDriveToolbarSelection(dskRight, FileView); end; UpdateDriveButtonSelection(btnLeftDrive, FileView); end // Change right drive toolbar for right drive button else if (ANoteBook = nbRight) then begin if gDriveBar1 then UpdateDriveToolbarSelection(dskRight, FileView); UpdateDriveButtonSelection(btnRightDrive, FileView); end; end; end; procedure TfrmMain.UpdateSelectedDrives; begin if gDriveBar1 then begin if gDriveBar2 then begin UpdateDriveToolbarSelection(dskLeft, FrameLeft); UpdateDriveToolbarSelection(dskRight, FrameRight); end else // dskRight is the main toolbar. UpdateDriveToolbarSelection(dskRight, ActiveFrame); end; UpdateDriveButtonSelection(btnLeftDrive, FrameLeft); UpdateDriveButtonSelection(btnRightDrive, FrameRight); end; procedure TfrmMain.ShowDrivesList(APanel: TFilePanelSelect); var p: TPoint; ADriveIndex: Integer; begin if tb_activate_panel_on_click in gDirTabOptions then SetActiveFrame(APanel); case APanel of fpLeft: begin p := Classes.Point(btnLeftDrive.Left, btnLeftDrive.Height); p := pnlLeftTools.ClientToScreen(p); ADriveIndex := btnLeftDrive.Tag; end; fpRight: begin p := Classes.Point(btnRightDrive.Left, btnRightDrive.Height); p := pnlRightTools.ClientToScreen(p); ADriveIndex := btnRightDrive.Tag; end; end; p := ScreenToClient(p); FDrivesListPopup.Show(p, APanel, ADriveIndex); end; procedure TfrmMain.HideToTray; {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT)} var ActiveWindow: HWND; LCLObject: TObject; {$ENDIF} begin { If a modal form is active we have to hide it first before hiding the main form to avoid bugs: On GTK2 a modal form loses it's modal state after the main window is restored (GTK still says the window is modal and resetting modal state doesn't do anything). On QT the tray icon does not receive any mouse events (because the modal window has capture) thus preventing the user from restoring the main window. So when the main form is hidden the modal window is hidden too. } {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT)} LastActiveWindow := nil; if not Self.Active then // If there is another window active begin ActiveWindow := GetActiveWindow; if ActiveWindow <> 0 then begin LCLObject := GetLCLOwnerObject(ActiveWindow); if Assigned(LCLObject) and (LCLObject is TCustomForm) and (fsModal in (LCLObject as TCustomForm).FormState) then // only for modal windows begin LastActiveWindow := LCLObject as TCustomForm; {$IFDEF LCLGTK2} // Cannot use Hide method, because it closes the modal form. // We only want to hide it. LastActiveWindow.Visible := False; {$ENDIF} {$IFDEF LCLQT} // Have to use QT directly to hide the window for this to work. TQtWidget(LastActiveWindow.Handle).setVisible(False); {$ENDIF} end; end; end; {$ENDIF} Hide; ShowTrayIcon(True); HiddenToTray := True; end; procedure TfrmMain.RestoreFromTray; begin if lastWindowState=wsMaximized then WindowState:=wsMaximized; ShowOnTop; if not gAlwaysShowTrayIcon then ShowTrayIcon(False); // After the main form is shown, restore the last active modal form if there was any. {$IF DEFINED(LCLGTK2) or DEFINED(LCLQT)} if Assigned(LastActiveWindow) then begin {$IFDEF LCLQT} TQtWidget(LastActiveWindow.Handle).setVisible(true); {$ENDIF} {$IFDEF LCLGTK2} LastActiveWindow.Show; {$ENDIF} LastActiveWindow := nil; end; {$ENDIF} end; procedure TfrmMain.RightDriveBarExecuteDrive(ToolItem: TKASToolItem); var DriveItem: TKASDriveItem; Panel: TFilePanelSelect; begin DriveItem := ToolItem as TKASDriveItem; if gDriveBar2 then Panel := fpRight else Panel := ActiveNotebook.Side; SetPanelDrive(Panel, DriveItem.Drive, True); end; procedure TfrmMain.ShowTrayIcon(bShow: Boolean); begin if (bShow <> MainTrayIcon.Visible) and (HidingTrayIcon = False) then begin if bShow then begin MainTrayIcon.Visible := True; end else begin // ShowTrayIcon might be called from within OnClick event of the icon // (MainTrayIconClick->RestoreFromTray->ShowTrayIcon), so the MainTrayIcon // cannot be hidden here, because it would be destroyed causing A/V. // Hiding it must be delayed until after the mouse click handler of the icon is finished. HidingTrayIcon := True; Application.QueueAsyncCall(@HideTrayIconDelayed, 0); end; end; end; procedure TfrmMain.HideTrayIconDelayed(Data: PtrInt); begin MainTrayIcon.Visible := False; HidingTrayIcon := False; end; procedure TfrmMain.ExecuteCommandLine(bRunInTerm: Boolean); begin mbSetCurrentDir(ActiveFrame.CurrentPath); ExecuteCommandFromEdit(edtCommand.Text, bRunInTerm); edtCommand.Text := ''; ActiveFrame.Reload; ActiveFrame.SetFocus; {$IF DEFINED(LCLGTK) or DEFINED(LCLGTK2)} // workaround for GTK // edtCommandExit is not always called when losing focus edtCommandExit(Self); {$ENDIF} end; procedure TfrmMain.UpdatePrompt; const PTLen = 40; var st: String; begin if (fsoExecute in ActiveFrame.FileSource.GetOperationsTypes) then begin with lblCommandPath do begin Visible := True; AutoSize := False; if UTF8Length(ActiveFrame.CurrentPath) > PTLen then st:= UTF8Copy(ActiveFrame.CurrentPath, UTF8Length(ActiveFrame.CurrentPath) - PTLen, PTLen) else st:= ActiveFrame.CurrentPath; // Caption := Format(fmtCommandPath, [st]); AutoSize := True; Left := 1; end; // Change path in terminal if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin if gTermWindow and Assigned(Cons) then Cons.Terminal.SetCurrentDir(ActiveFrame.CurrentPath); end; edtCommand.Visible := True; end else begin lblCommandPath.Visible := False; edtCommand.Visible := False; end; // Change program current path if (fspDirectAccess in ActiveFrame.FileSource.GetProperties) then begin mbSetCurrentDir(ActiveFrame.CurrentPath); end; end; procedure TfrmMain.UpdateFreeSpace(Panel: TFilePanelSelect); var FreeSize, TotalSize: Int64; aFileView: TFileView; sboxDrive: TPaintBox; lblDriveInfo: TLabel; begin case Panel of fpLeft : begin sboxDrive := pbxLeftDrive; aFileView := FrameLeft; lblDriveInfo:=lblLeftDriveInfo; end; fpRight: begin sboxDrive := pbxRightDrive; aFileView := FrameRight; lblDriveInfo:=lblRightDriveInfo; end; end; if aFileView.FileSource.GetFreeSpace(aFileView.CurrentPath, FreeSize, TotalSize) then begin if gDriveInd = True then begin if TotalSize > 0 then sboxDrive.Tag:= 100 - Round((FreeSize / TotalSize) * 100) // Save busy percent else sboxDrive.Tag := -1; sboxDrive.Invalidate; end; lblDriveInfo.Hint := Format(rsFreeMsg, [cnvFormatFileSize(FreeSize), cnvFormatFileSize(TotalSize)]); if gShortFormatDriveInfo then lblDriveInfo.Caption := Format(rsFreeMsgShort, [cnvFormatFileSize(FreeSize)]) else lblDriveInfo.Caption := lblDriveInfo.Hint; sboxDrive.Hint := lblDriveInfo.Hint; end else begin lblDriveInfo.Caption := ''; lblDriveInfo.Hint := ''; sboxDrive.Hint := ''; sboxDrive.Tag := -1; sboxDrive.Invalidate; end; end; procedure TfrmMain.CloseNotebook(ANotebook: TFileViewNotebook); var I: Integer; begin for I := 0 to ANotebook.PageCount - 1 do ANotebook.View[I].Clear; ANotebook.DestroyAllPages; end; procedure TfrmMain.DriveListDriveSelected(Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect); begin SetPanelDrive(APanel, DrivesList.Items[ADriveIndex], True); end; procedure TfrmMain.DriveListClose(Sender: TObject); begin SetActiveFrame(SelectedPanel); end; procedure TfrmMain.AllProgressOnUpdateTimer(Sender: TObject); var AllProgressPoint: Integer; begin // Hide progress bar if there are no operations if OperationsManager.OperationsCount = 0 then begin mnuAllOperProgress.Visible:= False; mnuAllOperPause.Visible:= False; mnuAllOperStart.Visible:= False; end else begin if gPanelOfOp = True then FOperationsPanel.UpdateView; if gProgInMenuBar = True then begin AllProgressPoint:= Round(OperationsManager.AllProgressPoint * 100); // Show in menu line mnuAllOperProgress.Caption:=IntToStr(AllProgressPoint) + ' %'; mnuAllOperProgress.Visible:= True; mnuAllOperPause.Visible:= True; mnuAllOperStart.Visible:= True; end; end; end; procedure TfrmMain.SetPanelDrive(aPanel: TFilePanelSelect; Drive: PDrive; ActivateIfNeeded: Boolean); var Index: Integer; DriveIndex: Integer; FoundPath: Boolean = False; aFileView, OtherFileView: TFileView; begin if (Drive^.DriveType = dtVirtual) or IsAvailable(Drive, Drive^.AutoMount) then begin case aPanel of fpLeft: begin aFileView := FrameLeft; OtherFileView := FrameRight; end; fpRight: begin aFileView := FrameRight; OtherFileView := FrameLeft; end; end; // Special case for virtual drive if Drive^.DriveType = dtVirtual then begin ChooseFileSource(aFileView, GetNetworkPath(Drive)); if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); Exit; end; // Copy path opened in the other panel if the file source and drive match // and that path is not already opened in this panel. if OtherFileView.FileSource.IsClass(TFileSystemFileSource) and mbCompareFileNames(ExtractRootDir(OtherFileView.CurrentPath), ExcludeTrailingPathDelimiter(Drive^.Path)) and not mbCompareFileNames(OtherFileView.CurrentPath, aFileView.CurrentPath) and not gGoToRoot then begin FoundPath:= True; SetFileSystemPath(aFileView, OtherFileView.CurrentPath); end // Open latest path from history for chosen drive else if (gGoToRoot = False) and aFileView.FileSource.IsClass(TFileSystemFileSource) and not mbCompareFileNames(ExtractRootDir(aFileView.CurrentPath), ExcludeTrailingPathDelimiter(Drive^.Path)) then begin for Index:= 0 to glsDirHistory.Count - 1 do begin DriveIndex:= FindMatchingDrive(glsDirHistory[Index]); if (DriveIndex >= 0) and (DriveIndex < DrivesList.Count) then begin if mbCompareFileNames(Drive^.Path, DrivesList[DriveIndex]^.Path) then begin if mbDirectoryExists(ExcludeBackPathDelimiter(glsDirHistory[Index])) then begin SetFileSystemPath(aFileView, glsDirHistory[Index]); FoundPath:= True; Break; end; end; end; end; end; if not FoundPath then begin SetFileSystemPath(aFileView, Drive^.Path); end; if ActivateIfNeeded and (tb_activate_panel_on_click in gDirTabOptions) then SetActiveFrame(aPanel); end else begin msgWarning(rsMsgDiskNotAvail); // Restore previous selected button. case aPanel of fpLeft: UpdateSelectedDrive(LeftTabs); fpRight: UpdateSelectedDrive(RightTabs); end; end; end; procedure TfrmMain.OnDriveWatcherEvent(EventType: TDriveWatcherEvent; const ADrive: PDrive); begin // Update disk panel does not work correctly when main // window is minimized. So set FUpdateDiskCount flag instead // and update disk count later in WindowStateChange event if WindowState = wsMinimized then FUpdateDiskCount:= True else begin UpdateDiskCount; end; if (EventType = dweDriveRemoved) and Assigned(ADrive) then begin if IsInPath(ADrive^.Path, ActiveFrame.CurrentPath, True, True) then ActiveFrame.CurrentPath:= gpExePath else if IsInPath(ADrive^.Path, NotActiveFrame.CurrentPath, True, True) then NotActiveFrame.CurrentPath:= gpExePath; end; end; procedure TfrmMain.AppActivate(Sender: TObject); begin if Assigned(FrameLeft) then FrameLeft.ReloadIfNeeded; if Assigned(FrameRight) then FrameRight.ReloadIfNeeded; end; procedure TfrmMain.AppEndSession(Sender: TObject); var CloseAction: TCloseAction; begin frmMainClose(Sender, CloseAction); end; procedure TfrmMain.AppQueryEndSession(var Cancel: Boolean); var CanClose: Boolean = True; begin FormCloseQuery(Self, CanClose); Cancel := not CanClose; end; {$IFDEF LCLQT} function TfrmMain.QObjectEventFilter(Sender: QObjectH; Event: QEventH): Boolean; cdecl; begin Result:= False; if QEvent_type(Event) = QEventClose then begin TQtWidget(Self.Handle).SlotClose; Result:= CloseQueryResult; if Result then QEvent_accept(Event) else QEvent_ignore(Event); end; end; {$ENDIF} initialization {$I DragCursors.lrs} TFormCommands.RegisterCommandsForm(TfrmMain, HotkeysCategory, @rsHotkeyCategoryMain); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ucolumns.pas��������������������������������������������������������������������0000644�0001750�0000144�00000121512�12615361641�015665� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCClassesUtf8, Graphics, uFile, uFileSource, DCXmlConfig, uFileFunctions; type { TColPrm } TColPrm = class FontName: String; FontSize: Integer; FontStyle: TFontStyles; TextColor, Background, Background2, MarkColor, CursorColor, CursorText, InactiveCursorColor, InactiveMarkColor: TColor; UseInvertedSelection: Boolean; UseInactiveSelColor: Boolean; Overcolor: Boolean; public constructor Create; end; { TPanelColumnsType } TPanelColumn = class private FFuncString: String; procedure SetFuncString(NewValue: String); public //--------------------- Title: String; {String is function or simpletext; TObject(integer)=indicator of function: 0 is simpletext; 1 is function;} FuncList: TStringList; Width: Integer; Align: TAlignment; //--------------------- FontName: String; FontSize: Integer; FontStyle: TFontStyles; TextColor, Background, Background2, MarkColor, CursorColor, CursorText, InactiveCursorColor, InactiveMarkColor: TColor; UseInvertedSelection: Boolean; UseInactiveSelColor: Boolean; Overcolor: Boolean; //--------------------- constructor Create; destructor Destroy; override; //--------------------- function GetColumnResultString(AFile: TFile; const AFileSource: IFileSource): String; {en Converts string functions in the column into their integer values, so that they don't have to be compared by string during sorting. Call this before sorting then pass result to Compare in the sorting loop. } function GetColumnFunctions: TFileFunctions; //------------------------------------------------------ property FuncString: String read FFuncString write SetFuncString; end; { TPanelColumnsClass } TPanelColumnsClass = class //------------------------------------------------------ private FList: TList; fSetName: String; // Global settings for columns view. FCustomView: Boolean; FCursorBorder: Boolean; FCursorBorderColor: TColor; FUseFrameCursor: Boolean; //------------------------------------------------------ public constructor Create; destructor Destroy; override; procedure Assign(const OtherColumnsClass: TPanelColumnsClass); //--------------------- function GetColumnTitle(const Index: Integer): String; function GetColumnFuncString(const Index: Integer): String; function GetColumnWidth(const Index: Integer): Integer; function GetColumnAlign(const Index: Integer): TAlignment; function GetColumnAlignString(const Index: Integer): String; //--------------------- function GetColumnFontName(const Index: Integer): String; function GetColumnFontSize(const Index: Integer): Integer; function GetColumnFontStyle(const Index: Integer): TFontStyles; function GetColumnFontQuality(const Index: Integer): TFontQuality; function GetColumnTextColor(const Index: Integer): TColor; function GetColumnBackground(const Index: Integer): TColor; function GetColumnBackground2(const Index: Integer): TColor; function GetColumnMarkColor(const Index: Integer): TColor; function GetColumnCursorColor(const Index: Integer): TColor; function GetColumnCursorText(const Index: Integer): TColor; function GetColumnInactiveCursorColor(const Index: Integer): TColor; function GetColumnInactiveMarkColor(const Index: Integer): TColor; function GetColumnUseInvertedSelection(const Index: Integer): Boolean; function GetColumnUseInactiveSelColor(const Index: Integer): Boolean; function GetColumnOvercolor(const Index: Integer): Boolean; //--------------------- function GetColumnPrm(const Index: Integer): TColPrm; //--------------------- function GetColumnItem(const Index: Integer): TPanelColumn; function GetColumnItemResultString(const Index: Integer; const AFile: TFile; const AFileSource: IFileSource): String; function GetCount: Integer; function Add(Item: TPanelColumn): Integer; function Add(const Title, FuncString: String; const Width: Integer; const Align: TAlignment = taLeftJustify): Integer; overload; //--------------------- procedure SetColumnTitle(const Index: Integer; Title: String); procedure SetColumnFuncString(const Index: Integer; FuncString: String); procedure SetColumnWidth(Index, Width: Integer); procedure SetColumnAlign(const Index: Integer; Align: TAlignment); //--------------------- procedure SetColumnFontName(const Index: Integer; Value: String); procedure SetColumnFontSize(const Index: Integer; Value: Integer); procedure SetColumnFontStyle(const Index: Integer; Value: TFontStyles); procedure SetColumnTextColor(const Index: Integer; Value: TColor); procedure SetColumnBackground(const Index: Integer; Value: TColor); procedure SetColumnBackground2(const Index: Integer; Value: TColor); procedure SetColumnMarkColor(const Index: Integer; Value: TColor); procedure SetColumnCursorColor(const Index: Integer; Value: TColor); procedure SetColumnCursorText(const Index: Integer; Value: TColor); procedure SetColumnInactiveCursorColor(const Index: Integer; Value: TColor); procedure SetColumnInactiveMarkColor(const Index: Integer; Value: TColor); procedure SetColumnUseInvertedSelection(const Index: Integer; Value: Boolean); procedure SetColumnUseInactiveSelColor(const Index: Integer; Value: Boolean); procedure SetColumnOvercolor(const Index: Integer; Value: Boolean); //--------------------- procedure SetColumnPrm(const Index: Integer; Value: TColPrm); //--------------------- procedure Delete(const Index: Integer); procedure Clear; procedure AddDefaultColumns; procedure AddDefaultEverything; //--------------------- procedure Load(Ini: TIniFileEx; SetName: String); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; //--------------------- procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; //--------------------- function GetSignature:dword; property ColumnsCount: Integer read GetCount; property Count: Integer read GetCount; property CustomView: Boolean read FCustomView write FCustomView; property CurrentColumnsSetName: String read fSetName write fSetName; property SetName: String read fSetName write fSetName; property Name: String read fSetName write fSetName; property UseCursorBorder: boolean read FCursorBorder write FCursorBorder; property CursorBorderColor: TColor read FCursorBorderColor write FCursorBorderColor; property UseFrameCursor: boolean read FUseFrameCursor write FUseFrameCursor; //------------------------------------------------------ end; { TPanelColumnsList } TPanelColumnsList = class private fSet: TStringList; function GetCount: Integer; public constructor Create; destructor Destroy; override; //--------------------- procedure Clear; procedure Load(Ini: TIniFileEx); overload; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); overload; procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); overload; function Add(Item: TPanelColumnsClass): Integer; procedure Insert(AIndex: Integer; Item: TPanelColumnsClass); procedure DeleteColumnSet(SetName: String); procedure DeleteColumnSet(SetIndex: Integer); overload; procedure CopyColumnSet(SetName, NewSetName: String); function GetColumnSet(const Index: Integer): TPanelColumnsClass; function GetColumnSet(Setname: String): TPanelColumnsClass; //--------------------- property Items: TStringList read fSet; property Count: Integer read GetCount; end; function StrToAlign(str: String): TAlignment; implementation uses crc, uDebug, uLng, uGlobs; var DefaultTitleHash: LongWord = 0; procedure UpdateDefaultTitleHash; var Title: String = ''; begin DefaultTitleHash:= CRC32(0, nil, 0); Title:= rsColName + rsColExt + rsColSize + rsColDate + rsColAttr; DefaultTitleHash:= CRC32(DefaultTitleHash, Pointer(Title), Length(Title)); end; function StrToAlign(str: String): TAlignment; begin if str = '<-' then Result := taLeftJustify else if str = '->' then Result := taRightJustify else if str = '=' then Result := taCenter; end; { TPanelColumnsType } function TPanelColumnsClass.GetColumnTitle(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).Title; end; function TPanelColumnsClass.GetColumnFuncString(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).FuncString; end; function TPanelColumnsClass.GetColumnWidth(const Index: Integer): Integer; begin if Index >= Flist.Count then Exit(0); Result := TPanelColumn(Flist[Index]).Width; end; function TPanelColumnsClass.GetColumnAlign(const Index: Integer): TAlignment; begin if Index >= Flist.Count then Exit(taLeftJustify); Result := TPanelColumn(Flist[Index]).Align; end; function TPanelColumnsClass.GetColumnAlignString(const Index: Integer): String; begin if Index >= Flist.Count then Exit(EmptyStr); case TPanelColumn(Flist[Index]).Align of taLeftJustify: Result := '<-'; taRightJustify: Result := '->'; taCenter: Result := '='; end; end; function TPanelColumnsClass.GetColumnFontName(const Index: Integer): String; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontName else Result := gFonts[dcfMain].Name; end; function TPanelColumnsClass.GetColumnFontSize(const Index: Integer): Integer; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontSize else Result := gFonts[dcfMain].Size; end; function TPanelColumnsClass.GetColumnFontStyle(const Index: Integer): TFontStyles; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).FontStyle else Result := gFonts[dcfMain].Style; end; function TPanelColumnsClass.GetColumnFontQuality(const Index: Integer): TFontQuality; begin Result := gFonts[dcfMain].Quality; end; function TPanelColumnsClass.GetColumnTextColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).TextColor else Result := gForeColor; end; function TPanelColumnsClass.GetColumnBackground(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background else Result := gBackColor; end; function TPanelColumnsClass.GetColumnBackground2(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Background2 else Result := gBackColor2; end; function TPanelColumnsClass.GetColumnMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).MarkColor else Result := gMarkColor; end; function TPanelColumnsClass.GetColumnCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorColor else Result := gCursorColor; end; function TPanelColumnsClass.GetColumnCursorText(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).CursorText else Result := gCursorText; end; function TPanelColumnsClass.GetColumnInactiveCursorColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveCursorColor else Result := gInactiveCursorColor; end; function TPanelColumnsClass.GetColumnInactiveMarkColor(const Index: Integer): TColor; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).InactiveMarkColor else Result := gInactiveMarkColor; end; function TPanelColumnsClass.GetColumnUseInvertedSelection(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).UseInvertedSelection else Result := gUseInvertedSelection; end; function TPanelColumnsClass.GetColumnUseInactiveSelColor(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).UseInactiveSelColor else Result := gUseInactiveSelColor; end; function TPanelColumnsClass.GetColumnOvercolor(const Index: Integer): Boolean; begin if FCustomView and (Index < Flist.Count) then Result := TPanelColumn(Flist[Index]).Overcolor else Result := gAllowOverColor; end; function TPanelColumnsClass.GetColumnPrm(const Index: Integer): TColPrm; begin if Index >= Flist.Count then Exit(nil); Result := TColPrm.Create; Result.FontName := GetColumnFontName(Index); Result.FontSize := GetColumnFontSize(Index); Result.FontStyle := GetColumnFontStyle(Index); Result.TextColor := GetColumnTextColor(Index); Result.Background := GetColumnBackground(Index); Result.Background2 := GetColumnBackground2(Index); Result.MarkColor := GetColumnMarkColor(Index); Result.CursorColor := GetColumnCursorColor(Index); Result.CursorText := GetColumnCursorText(Index); Result.InactiveCursorColor := GetColumnInactiveCursorColor(Index); Result.InactiveMarkColor := GetColumnMarkColor(Index); Result.UseInvertedSelection:= GetColumnUseInvertedSelection(Index); Result.UseInactiveSelColor:= GetColumnUseInactiveSelColor(Index); Result.Overcolor := GetColumnOvercolor(Index); end; function TPanelColumnsClass.GetColumnItem(const Index: Integer): TPanelColumn; begin if Index >= Flist.Count then Exit(nil); Result := TPanelColumn(Flist[Index]); end; function TPanelColumnsClass.GetColumnItemResultString(const Index: Integer; const AFile: TFile; const AFileSource: IFileSource): String; begin if Index >= Flist.Count then Exit(EmptyStr); Result := TPanelColumn(Flist[Index]).GetColumnResultString(AFile, AFileSource); end; constructor TPanelColumnsClass.Create; begin FList := TList.Create; end; procedure TPanelColumnsClass.Clear; begin while Flist.Count > 0 do begin TPanelColumn(Flist[0]).Free; FList.Delete(0); end; end; destructor TPanelColumnsClass.Destroy; begin Self.Clear; FreeAndNil(FList); inherited Destroy; end; procedure TPanelColumnsClass.Assign(const OtherColumnsClass: TPanelColumnsClass); var OldColumn, NewColumn: TPanelColumn; i: Integer; begin Clear; if not Assigned(OtherColumnsClass) then Exit; Name := OtherColumnsClass.Name; FCustomView := OtherColumnsClass.FCustomView; FCursorBorder := OtherColumnsClass.FCursorBorder; FCursorBorderColor := OtherColumnsClass.FCursorBorderColor; FUseFrameCursor := OtherColumnsClass.FUseFrameCursor; for i := 0 to OtherColumnsClass.ColumnsCount - 1 do begin OldColumn := OtherColumnsClass.GetColumnItem(i); NewColumn := TPanelColumn.Create; Add(NewColumn); NewColumn.Title := OldColumn.Title; NewColumn.FuncString := OldColumn.FuncString; NewColumn.Width := OldColumn.Width; NewColumn.Align := OldColumn.Align; NewColumn.FontName := OldColumn.FontName; NewColumn.FontSize := OldColumn.FontSize; NewColumn.FontStyle := OldColumn.FontStyle; NewColumn.TextColor := OldColumn.TextColor; NewColumn.Background := OldColumn.Background; NewColumn.Background2 := OldColumn.Background2; NewColumn.MarkColor := OldColumn.MarkColor; NewColumn.CursorColor := OldColumn.CursorColor; NewColumn.CursorText := OldColumn.CursorText; NewColumn.InactiveCursorColor := OldColumn.InactiveCursorColor; NewColumn.InactiveMarkColor := OldColumn.InactiveMarkColor; NewColumn.UseInvertedSelection := OldColumn.UseInvertedSelection; NewColumn.UseInactiveSelColor := OldColumn.UseInactiveSelColor; NewColumn.Overcolor := OldColumn.Overcolor; end; end; function TPanelColumnsClass.GetCount: Integer; begin Result := FList.Count; end; function TPanelColumnsClass.Add(Item: TPanelColumn): Integer; begin Result := FList.Add(Item); end; function TPanelColumnsClass.Add(const Title, FuncString: String; const Width: Integer; const Align: TAlignment): Integer; var AColumn: TPanelColumn; begin AColumn := TPanelColumn.Create; Result := FList.Add(AColumn); AColumn.Title := Title; AColumn.FuncString := FuncString; AColumn.Width := Width; AColumn.Align := Align; AColumn.FontName := gFonts[dcfMain].Name; AColumn.FontSize := gFonts[dcfMain].Size; AColumn.FontStyle := gFonts[dcfMain].Style; AColumn.TextColor := gForeColor; AColumn.Background := gBackColor; AColumn.Background2 := gBackColor2; AColumn.MarkColor := gMarkColor; AColumn.CursorColor := gCursorColor; AColumn.CursorText := gCursorText; AColumn.InactiveCursorColor := gInactiveCursorColor; AColumn.InactiveMarkColor := gInactiveMarkColor; AColumn.UseInvertedSelection := gUseInvertedSelection; AColumn.UseInactiveSelColor := gUseInactiveSelColor; AColumn.Overcolor := gAllowOverColor; end; procedure TPanelColumnsClass.SetColumnTitle(const Index: Integer; Title: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Title := Title; end; procedure TPanelColumnsClass.SetColumnFuncString(const Index: Integer; FuncString: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FuncString := FuncString; end; procedure TPanelColumnsClass.SetColumnWidth(Index, Width: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Width := Width; end; procedure TPanelColumnsClass.SetColumnAlign(const Index: Integer; Align: TAlignment); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Align := Align; end; procedure TPanelColumnsClass.SetColumnFontName(const Index: Integer; Value: String); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontName := Value; end; procedure TPanelColumnsClass.SetColumnFontSize(const Index: Integer; Value: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontSize := Value; end; procedure TPanelColumnsClass.SetColumnFontStyle(const Index: Integer; Value: TFontStyles); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).FontStyle := Value; end; procedure TPanelColumnsClass.SetColumnTextColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).TextColor := Value; end; procedure TPanelColumnsClass.SetColumnBackground(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Background := Value; end; procedure TPanelColumnsClass.SetColumnBackground2(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Background2 := Value; end; procedure TPanelColumnsClass.SetColumnMarkColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).MarkColor := Value; end; procedure TPanelColumnsClass.SetColumnCursorColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).CursorColor := Value; end; procedure TPanelColumnsClass.SetColumnCursorText(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).CursorText := Value; end; procedure TPanelColumnsClass.SetColumnInactiveCursorColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).InactiveCursorColor := Value; end; procedure TPanelColumnsClass.SetColumnInactiveMarkColor(const Index: Integer; Value: TColor); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).InactiveMarkColor := Value; end; procedure TPanelColumnsClass.SetColumnUseInvertedSelection(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).UseInvertedSelection := Value; end; procedure TPanelColumnsClass.SetColumnUseInactiveSelColor(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).UseInactiveSelColor := Value; end; procedure TPanelColumnsClass.SetColumnOvercolor(const Index: Integer; Value: Boolean); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Overcolor := Value; end; procedure TPanelColumnsClass.SetColumnPrm(const Index: Integer; Value: TColPrm); begin if Index >= Flist.Count then Exit; SetColumnFontName(Index, Value.FontName); SetColumnFontSize(Index, Value.FontSize); SetColumnFontStyle(Index, Value.FontStyle); SetColumnTextColor(Index, Value.TextColor); SetColumnBackground(Index, Value.Background); SetColumnBackground2(Index, Value.Background2); SetColumnMarkColor(Index, Value.MarkColor); SetColumnCursorColor(Index, Value.CursorColor); SetColumnCursorText(Index, Value.CursorText); SetColumnInactiveCursorColor(Index, Value.InactiveCursorColor); SetColumnInactiveMarkColor(Index, Value.InactiveMarkColor); SetColumnUseInvertedSelection(Index, Value.UseInvertedSelection); SetColumnUseInactiveSelColor(Index, Value.UseInactiveSelColor); SetColumnOvercolor(Index, Value.Overcolor); end; procedure TPanelColumnsClass.AddDefaultColumns; var DCFunc: String; begin SetName := 'Default'; DCFunc := '[' + sFuncTypeDC + '().%s{}]'; // file name Add(rsColName, Format(DCFunc, [TFileFunctionStrings[fsfNameNoExtension]]), 250, taLeftJustify); // file ext Add(rsColExt, Format(DCFunc, [TFileFunctionStrings[fsfExtension]]), 50, taLeftJustify); // file size Add(rsColSize, Format(DCFunc, [TFileFunctionStrings[fsfSize]]), 70, taRightJustify); // file date/time Add(rsColDate, Format(DCFunc, [TFileFunctionStrings[fsfModificationTime]]), 140, taRightJustify); // file attributes Add(rsColAttr, Format(DCFunc, [TFileFunctionStrings[fsfAttr]]), 100, taLeftJustify); // Default title hash UpdateDefaultTitleHash; end; procedure TPanelColumnsClass.AddDefaultEverything; begin AddDefaultColumns; FCustomView := True; FCursorBorder := gUseCursorBorder; FCursorBorderColor := gCursorBorderColor; FUseFrameCursor := gUseFrameCursor; end; procedure TPanelColumnsClass.Load(Ini: TIniFileEx; SetName: String); var aCount, I: Integer; begin fSetName := SetName; Self.Clear; aCount := Ini.ReadInteger(fSetName, 'ColumnCount', 0); //--------------------- if aCount = 0 then begin AddDefaultColumns; end else for I := 0 to aCount - 1 do begin Flist.Add(TPanelColumn.Create); TPanelColumn(FList[I]).Title:=Ini.ReadString(fSetName,'Column'+IntToStr(I+1)+'Title',''); //--------------------- TPanelColumn(FList[I]).FuncString:=Ini.ReadString(fSetName,'Column'+IntToStr(I+1)+'FuncsString',''); TPanelColumn(FList[I]).Width:=Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'Width',50); TPanelColumn(FList[I]).Align:=TAlignment(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'Align',0)); //--------------------- TPanelColumn(FList[I]).FontName:=Ini.ReadString(fSetName,'Column'+IntToStr(I+1)+'FontName',gFonts[dcfMain].Name); TPanelColumn(FList[I]).FontSize:=Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'FontSize',gFonts[dcfMain].Size); TPanelColumn(FList[I]).FontStyle:=TFontStyles(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'FontStyle',Integer(gFonts[dcfMain].Style))); TPanelColumn(FList[I]).TextColor:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'TextColor',gForeColor)); TPanelColumn(FList[I]).Background:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'Background',gBackColor )); TPanelColumn(FList[I]).Background2:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'Background2',gBackColor2 )); TPanelColumn(FList[I]).MarkColor:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'MarkColor',gMarkColor )); TPanelColumn(FList[I]).CursorColor:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'CursorColor',gCursorColor )); TPanelColumn(FList[I]).CursorText:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'CursorText',gCursorText )); TPanelColumn(FList[I]).InactiveCursorColor:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'InactiveCursorColor',gInactiveCursorColor)); TPanelColumn(FList[I]).InactiveMarkColor:=Tcolor(Ini.ReadInteger(fSetName,'Column'+IntToStr(I+1)+'InactiveMarkColor',gInactiveMarkColor )); TPanelColumn(FList[I]).UseInvertedSelection:=Ini.ReadBool(fSetName,'Column'+IntToStr(I+1)+'UseInvertedSelection',true ); TPanelColumn(FList[I]).UseInactiveSelColor:=Ini.ReadBool(fSetName,'Column'+IntToStr(I+1)+'UseInactiveSelColor',gUseInactiveSelColor); TPanelColumn(FList[I]).Overcolor:=Ini.ReadBool(fSetName,'Column'+IntToStr(I+1)+'Overcolor',true ); //--------------------- end; //--------------------- FCustomView := Ini.ReadBool(fSetName, 'CustomView', False); FCursorBorder := Ini.ReadBool(fSetName, 'CursorBorder', gUseCursorBorder); FCursorBorderColor := TColor(Ini.ReadInteger(fSetName, 'CursorBorderColor', gCursorBorderColor)); FUseFrameCursor := Ini.ReadBool(fSetName, 'UseFrameCursor', gUseFrameCursor); end; procedure TPanelColumnsClass.Load(AConfig: TXmlConfig; ANode: TXmlNode); var Title: String; Hash: LongWord; SubNode: TXmlNode; Quality: Integer = 0; AColumn: TPanelColumn; begin FCustomView := AConfig.GetValue(ANode, 'CustomView', False); FCursorBorder := AConfig.GetAttr(ANode, 'CursorBorder/Enabled', gUseCursorBorder); FCursorBorderColor := TColor(AConfig.GetValue(ANode, 'CursorBorder/Color', gCursorBorderColor)); FUseFrameCursor := AConfig.GetAttr(ANode, 'UseFrameCursor', gUseFrameCursor); Clear; SubNode := ANode.FindNode('Columns'); if Assigned(SubNode) then begin SubNode := SubNode.FirstChild; while Assigned(SubNode) do begin if SubNode.CompareName('Column') = 0 then begin AColumn := TPanelColumn.Create; FList.Add(AColumn); AColumn.Title := AConfig.GetValue(SubNode, 'Title', ''); AColumn.FuncString := AConfig.GetValue(SubNode, 'FuncString', ''); AColumn.Width := AConfig.GetValue(SubNode, 'Width', 50); AColumn.Align := TAlignment(AConfig.GetValue(SubNode, 'Align', Integer(0))); AConfig.GetFont(SubNode, 'Font', AColumn.FontName, AColumn.FontSize, Integer(AColumn.FontStyle), Quality, gFonts[dcfMain].Name, gFonts[dcfMain].Size, Integer(gFonts[dcfMain].Style), Quality); AColumn.TextColor := TColor(AConfig.GetValue(SubNode, 'TextColor', gForeColor)); AColumn.Background := TColor(AConfig.GetValue(SubNode, 'Background', gBackColor)); AColumn.Background2 := TColor(AConfig.GetValue(SubNode, 'Background2', gBackColor2)); AColumn.MarkColor := TColor(AConfig.GetValue(SubNode, 'MarkColor', gMarkColor)); AColumn.CursorColor := TColor(AConfig.GetValue(SubNode, 'CursorColor', gCursorColor)); AColumn.CursorText := TColor(AConfig.GetValue(SubNode, 'CursorText', gCursorText)); AColumn.InactiveCursorColor := TColor(AConfig.GetValue(SubNode, 'InactiveCursorColor', gInactiveCursorColor)); AColumn.InactiveMarkColor := TColor(AConfig.GetValue(SubNode, 'InactiveMarkColor', gInactiveMarkColor)); AColumn.UseInvertedSelection := AConfig.GetValue(SubNode, 'UseInvertedSelection', gUseInvertedSelection); AColumn.UseInactiveSelColor := AConfig.GetValue(SubNode, 'UseInactiveSelColor', gUseInactiveSelColor); AColumn.Overcolor := AConfig.GetValue(SubNode, 'Overcolor', True); end; SubNode := SubNode.NextSibling; end; end; if Count = 0 then AddDefaultColumns else begin Title:= EmptyStr; for Quality:= 0 to Count - 1 do begin Title += TPanelColumn(Flist[Quality]).Title; end; Hash:= CRC32(0, nil, 0); Hash:= CRC32(Hash, Pointer(Title), Length(Title)); if Hash = DefaultTitleHash then begin SetColumnTitle(0, rsColName); SetColumnTitle(1, rsColExt); SetColumnTitle(2, rsColSize); SetColumnTitle(3, rsColDate); SetColumnTitle(4, rsColAttr); // Default title hash UpdateDefaultTitleHash; end; end; end; procedure TPanelColumnsClass.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; AColumn: TPanelColumn; begin AConfig.SetValue(ANode, 'CustomView', FCustomView); AConfig.SetAttr(ANode, 'CursorBorder/Enabled', FCursorBorder); if FCursorBorderColor <> clNone then AConfig.SetValue(ANode, 'CursorBorder/Color', FCursorBorderColor); AConfig.SetAttr(ANode, 'UseFrameCursor', FUseFrameCursor); ANode := AConfig.FindNode(ANode, 'Columns', True); AConfig.ClearNode(ANode); for I := 0 to FList.Count - 1 do begin AColumn := TPanelColumn(FList[I]); SubNode := AConfig.AddNode(ANode, 'Column'); AConfig.AddValue(SubNode, 'Title', AColumn.Title); AConfig.AddValue(SubNode, 'FuncString', AColumn.FuncString); AConfig.AddValue(SubNode, 'Width', AColumn.Width); AConfig.AddValue(SubNode, 'Align', Integer(AColumn.Align)); AConfig.SetFont(SubNode, 'Font', AColumn.FontName, AColumn.FontSize, Integer(AColumn.FontStyle), 0); if AColumn.TextColor <> clNone then AConfig.AddValue(SubNode, 'TextColor', AColumn.TextColor); if AColumn.Background <> clNone then AConfig.AddValue(SubNode, 'Background', AColumn.Background); if AColumn.Background2 <> clNone then AConfig.AddValue(SubNode, 'Background2', AColumn.Background2); if AColumn.MarkColor <> clNone then AConfig.AddValue(SubNode, 'MarkColor', AColumn.MarkColor); if AColumn.CursorColor <> clNone then AConfig.AddValue(SubNode, 'CursorColor', AColumn.CursorColor); if AColumn.CursorText <> clNone then AConfig.AddValue(SubNode, 'CursorText', AColumn.CursorText); if AColumn.InactiveCursorColor <> clNone then AConfig.AddValue(SubNode, 'InactiveCursorColor', AColumn.InactiveCursorColor); if AColumn.InactiveMarkColor <> clNone then AConfig.AddValue(SubNode, 'InactiveMarkColor', AColumn.InactiveMarkColor); AConfig.AddValue(SubNode, 'UseInvertedSelection', AColumn.UseInvertedSelection); AConfig.AddValue(SubNode, 'UseInactiveSelColor', AColumn.UseInactiveSelColor); AConfig.AddValue(SubNode, 'Overcolor', AColumn.Overcolor); end; end; procedure TPanelColumnsClass.Delete(const Index: Integer); begin if Index > Flist.Count then Exit; TPanelColumn(Flist[Index]).Free; FList.Delete(Index); end; function TPanelColumnsClass.GetSignature:dword; procedure ProgressSignatureWithThisString(sSomething:string); begin if length(sSomething) > 0 then Result := crc32(Result, @sSomething[1], length(sSomething)); end; var iPanelColumnIndex: integer; iFunction: integer; begin result:=$00000000; for iPanelColumnIndex := 0 to pred(Count) do begin with TPanelColumn(Flist[iPanelColumnIndex]) do begin ProgressSignatureWithThisString(Title); for iFunction:=0 to pred(FuncList.Count) do ProgressSignatureWithThisString(FuncList.Strings[iFunction]); Result := crc32(Result, @Width, sizeof(Width)); Result := crc32(Result, @Align, sizeof(Align)); if FCustomView then begin ProgressSignatureWithThisString(FontName); Result := crc32(Result, @FontSize, sizeof(FontSize)); Result := crc32(Result, @FontStyle, sizeof(FontStyle)); Result := crc32(Result, @TextColor, sizeof(TextColor)); Result := crc32(Result, @Background, sizeof(Background)); Result := crc32(Result, @Background2, sizeof(Background2)); Result := crc32(Result, @MarkColor, sizeof(MarkColor)); Result := crc32(Result, @CursorColor, sizeof(CursorColor)); Result := crc32(Result, @CursorText, sizeof(CursorText)); Result := crc32(Result, @InactiveCursorColor, sizeof(InactiveCursorColor)); Result := crc32(Result, @InactiveMarkColor, sizeof(InactiveMarkColor)); Result := crc32(Result, @UseInvertedSelection, sizeof(UseInvertedSelection)); Result := crc32(Result, @UseInactiveSelColor, sizeof(UseInactiveSelColor)); Result := crc32(Result, @Overcolor, sizeof(Overcolor)); end; end; end; ProgressSignatureWithThisString(fSetName); Result := crc32(Result, @FCustomView, sizeof(FCustomView)); Result := crc32(Result, @FCursorBorder, sizeof(FCursorBorder)); Result := crc32(Result, @FCursorBorderColor, sizeof(FCursorBorderColor)); Result := crc32(Result, @FUseFrameCursor, sizeof(FUseFrameCursor)); end; { TPanelColumn } constructor TPanelColumn.Create; begin FuncList := TStringList.Create; end; destructor TPanelColumn.Destroy; begin FreeAndNil(FuncList); inherited Destroy; end; function TPanelColumn.GetColumnFunctions: TFileFunctions; var FuncCount: Integer = 0; i: Integer; begin if Assigned(FuncList) and (FuncList.Count > 0) then begin SetLength(Result, FuncList.Count); // Start with all strings. for i := 0 to FuncList.Count - 1 do begin // Don't need to compare simple text, only functions. if PtrInt(FuncList.Objects[i]) = 1 then begin Result[FuncCount] := GetFileFunctionByName(FuncList.Strings[i]); // If the function was found, save it's number. if Result[FuncCount] <> fsfInvalid then FuncCount := FuncCount + 1; end; end; SetLength(Result, FuncCount); // Set the actual functions count. end else SetLength(Result, 0); end; function TPanelColumn.GetColumnResultString(AFile: TFile; const AFileSource: IFileSource): String; var i: Integer; s: String; begin s := ''; Result := ''; if (not Assigned(FuncList)) or (FuncList.Count = 0) then Exit; for i := 0 to FuncList.Count - 1 do begin //Item is simpletext if PtrInt(FuncList.Objects[i]) = 0 then s := s + FuncList[I] else //Item is function begin s := s + FormatFileFunction(FuncList[I], AFile, AFileSource); end; end; Result := s; end; procedure TPanelColumn.SetFuncString(NewValue: String); procedure FillListFromString(List: TStrings; FuncS: String); var p: Integer; begin while True do begin p := pos('[', FuncS); if p = 0 then Break else if p > 1 then List.AddObject(Copy(FuncS, 1, p - 1), TObject(0)); Delete(FuncS, 1, p); p := pos(']', FuncS); if p = 0 then Break else if p > 1 then List.AddObject(Copy(FuncS, 1, p - 1), TObject(1)); Delete(FuncS, 1, p); end; if FuncS <> '' then List.AddObject(FuncS, TObject(0)); end; begin FFuncString := NewValue; FillListFromString(FuncList, NewValue); end; { TPanelColumnsList } function TPanelColumnsList.GetCount: Integer; begin Result := fSet.Count; end; constructor TPanelColumnsList.Create; begin FSet := TStringList.Create; end; destructor TPanelColumnsList.Destroy; var i: Integer; begin if Assigned(FSet) then begin for i := 0 to Fset.Count - 1 do TPanelColumnsClass(Fset.Objects[i]).Free; FreeAndNil(FSet); end; inherited Destroy; end; procedure TPanelColumnsList.Clear; var i: Integer; begin for i := 0 to Fset.Count - 1 do TPanelColumnsClass(Fset.Objects[i]).Free; Fset.Clear; end; procedure TPanelColumnsList.Load(Ini: TIniFileEx); var aCount, I: Integer; begin Self.Clear; aCount := Ini.ReadInteger('ColumnsSet', 'ColumnsSetCount', 0); for I := 0 to aCount - 1 do begin fSet.AddObject(Ini.ReadString('ColumnsSet', 'ColumnsSet' + IntToStr(I + 1) + 'Name', ''), TPanelColumnsClass.Create); TPanelColumnsClass(fSet.Objects[I]).Load(ini, fset[i]); DCDebug('FsetName=' + Fset[i]); end; DCDebug('FsetCount=' + IntToStr(fset.Count)); end; procedure TPanelColumnsList.Load(AConfig: TXmlConfig; ANode: TXmlNode); var AName: String; AnObject: TPanelColumnsClass; begin Clear; ANode := ANode.FindNode('ColumnsSets'); if Assigned(ANode) then begin DefaultTitleHash := AConfig.GetAttr(ANode, 'DefaultTitleHash', 0); ANode := ANode.FirstChild; while Assigned(ANode) do begin if ANode.CompareName('ColumnsSet') = 0 then begin if AConfig.TryGetValue(ANode, 'Name', AName) then begin AnObject := TPanelColumnsClass.Create; fSet.AddObject(AName, AnObject); AnObject.Name := AName; AnObject.Load(AConfig, ANode); end else DCDebug('Invalid entry in configuration: ' + AConfig.GetPathFromNode(ANode) + '.'); end; ANode := ANode.NextSibling; end; end; end; procedure TPanelColumnsList.Save(AConfig: TXmlConfig; ANode: TXmlNode); var I: Integer; SubNode: TXmlNode; begin ANode := AConfig.FindNode(ANode, 'ColumnsSets', True); AConfig.ClearNode(ANode); AConfig.SetAttr(ANode, 'DefaultTitleHash', DefaultTitleHash); for I := 0 to FSet.Count - 1 do begin SubNode := AConfig.AddNode(ANode, 'ColumnsSet'); AConfig.AddValue(SubNode, 'Name', FSet[I]); TPanelColumnsClass(Fset.Objects[I]).Save(AConfig, SubNode); end; end; function TPanelColumnsList.Add(Item: TPanelColumnsClass): Integer; begin Result := Fset.AddObject(Item.Name, Item); end; procedure TPanelColumnsList.Insert(AIndex: Integer; Item: TPanelColumnsClass); begin Fset.InsertObject(AIndex, Item.Name, Item); end; procedure TPanelColumnsList.DeleteColumnSet(SetName: String); begin DeleteColumnSet(fSet.IndexOf(SetName)); end; procedure TPanelColumnsList.DeleteColumnSet(SetIndex: Integer); begin if (SetIndex >= Fset.Count) or (SetIndex < 0) then Exit; TPanelColumnsClass(fSet.Objects[SetIndex]).Free; fSet.Delete(SetIndex); end; procedure TPanelColumnsList.CopyColumnSet(SetName, NewSetName: String); var OldSetIndex, NewSetIndex: Integer; OldSet, NewSet: TPanelColumnsClass; begin OldSetIndex := fSet.IndexOf(SetName); if OldSetIndex <> -1 then begin OldSet := TPanelColumnsClass(fSet.Objects[OldSetIndex]); NewSetIndex := fSet.IndexOf(NewSetName); if NewSetIndex <> -1 then NewSet := TPanelColumnsClass(fSet.Objects[NewSetIndex]) else begin NewSet := TPanelColumnsClass.Create; fSet.AddObject(NewSetName, NewSet); end; NewSet.Assign(OldSet); // Set new name. NewSet.Name := NewSetName; end; end; function TPanelColumnsList.GetColumnSet(const Index: Integer): TPanelColumnsClass; begin //DCDebug('FsetCount='+inttostr(fset.Count)); if (Index > -1) and (Index < Fset.Count) then Result := TPanelColumnsClass(Fset.Objects[Index]) else begin if fset.Count = 0 then begin Fset.AddObject('Default', TPanelColumnsClass.Create); TPanelColumnsClass(Fset.Objects[0]).AddDefaultColumns; end; Result := TPanelColumnsClass(Fset.Objects[0]); end; end; function TPanelColumnsList.GetColumnSet(Setname: String): TPanelColumnsClass; begin //DCDebug('FsetCount='+inttostr(fset.Count)); if fset.IndexOf(Setname) > -1 then Result := TPanelColumnsClass(Fset.Objects[fset.IndexOf(Setname)]) else begin if fset.Count = 0 then begin Fset.AddObject('Default', TPanelColumnsClass.Create); TPanelColumnsClass(Fset.Objects[0]).AddDefaultColumns; end; Result := TPanelColumnsClass(Fset.Objects[0]); end; end; { TColPrm } constructor TColPrm.Create; begin Self.FontName := gFonts[dcfMain].Name; Self.FontSize := gFonts[dcfMain].Size; Self.FontStyle := gFonts[dcfMain].Style; Self.TextColor := gForeColor; Self.Background := gBackColor; Self.Background2 := gBackColor2; Self.MarkColor := gMarkColor; Self.CursorColor := gCursorColor; Self.CursorText := gCursorText; Self.InactiveCursorColor := gInactiveCursorColor; Self.InactiveMarkColor := gInactiveMarkColor; Self.UseInvertedSelection:= gUseInvertedSelection; Self.UseInactiveSelColor:= gUseInactiveSelColor; Self.Overcolor := gAllowOverColor; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmain.lrt�����������������������������������������������������������������������0000644�0001750�0000144�00000032743�12660674103�015137� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMAIN.CAPTION=Double Commander TFRMMAIN.BTNLEFTHOME.HINT=Go to home directory TFRMMAIN.BTNLEFTHOME.CAPTION=~ TFRMMAIN.BTNLEFTUP.HINT=Go to parent directory TFRMMAIN.BTNLEFTUP.CAPTION=.. TFRMMAIN.BTNLEFTROOT.HINT=Go to root directory TFRMMAIN.BTNLEFTROOT.CAPTION=/ TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT=Directory Hotlist TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION=* TFRMMAIN.BTNLEFTEQUALRIGHT.HINT=Show current directory of the right panel in the left panel TFRMMAIN.BTNLEFTEQUALRIGHT.CAPTION=< TFRMMAIN.BTNRIGHTHOME.CAPTION=~ TFRMMAIN.BTNRIGHTUP.CAPTION=.. TFRMMAIN.BTNRIGHTROOT.CAPTION=/ TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT=Directory Hotlist TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION=* TFRMMAIN.BTNRIGHTEQUALLEFT.HINT=Show current directory of the left panel in the right panel TFRMMAIN.BTNRIGHTEQUALLEFT.CAPTION=> TFRMMAIN.LBLCOMMANDPATH.CAPTION=Path TFRMMAIN.BTNF7.CAPTION=Directory TFRMMAIN.BTNF8.CAPTION=Delete TFRMMAIN.BTNF9.CAPTION=Terminal TFRMMAIN.BTNF10.CAPTION=Exit TFRMMAIN.MNUFILES.CAPTION=&Files TFRMMAIN.MILINE1.CAPTION=- TFRMMAIN.MILINE2.CAPTION=- TFRMMAIN.MILINE4.CAPTION=- TFRMMAIN.MILINE50.CAPTION=- TFRMMAIN.MNUMARK.CAPTION=&Mark TFRMMAIN.MILINE47.CAPTION=- TFRMMAIN.MILINE5.CAPTION=- TFRMMAIN.MILINE37.CAPTION=- TFRMMAIN.MNUCMD.CAPTION=&Commands TFRMMAIN.MILINE6.CAPTION=- TFRMMAIN.MILINE9.CAPTION=- TFRMMAIN.MILINE22.CAPTION=- TFRMMAIN.MNUNETWORK.CAPTION=Network TFRMMAIN.MNUTABS.CAPTION=&Tabs TFRMMAIN.MILINE15.CAPTION=- TFRMMAIN.MILINE11.CAPTION=- TFRMMAIN.MNUTABOPTIONS.CAPTION=Tab &Options TFRMMAIN.MILINE10.CAPTION=- TFRMMAIN.MILINE17.CAPTION=- TFRMMAIN.MILINE38.CAPTION=- TFRMMAIN.MILINE39.CAPTION=- TFRMMAIN.MNUFAVORITETABS.CAPTION=Favorites TFRMMAIN.MNUSHOW.CAPTION=&Show TFRMMAIN.MILINE33.CAPTION=- TFRMMAIN.MILINE32.CAPTION=- TFRMMAIN.MILINE7.CAPTION=- TFRMMAIN.MILINE3.CAPTION=- TFRMMAIN.MILINE20.CAPTION=- TFRMMAIN.MILINE13.CAPTION=- TFRMMAIN.MNUCONFIG.CAPTION=C&onfiguration TFRMMAIN.MILINE40.CAPTION=- TFRMMAIN.MNUHELP.CAPTION=&Help TFRMMAIN.MILINE18.CAPTION=- TFRMMAIN.MNUALLOPERSTART.CAPTION=Start TFRMMAIN.MNUALLOPERPAUSE.CAPTION=|| TFRMMAIN.MNUALLOPERSTOP.CAPTION=Cancel TFRMMAIN.ACTHORIZONTALFILEPANELS.CAPTION=&Horizontal Panels Mode TFRMMAIN.ACTPANELSSPLITTERPERPOS.CAPTION=Set splitter position TFRMMAIN.ACTVIEW.CAPTION=View TFRMMAIN.ACTEDIT.CAPTION=Edit TFRMMAIN.ACTHELPINDEX.CAPTION=&Contents TFRMMAIN.ACTKEYBOARD.CAPTION=&Keyboard TFRMMAIN.ACTVISITHOMEPAGE.CAPTION=&Visit Double Commander Website TFRMMAIN.ACTABOUT.CAPTION=&About TFRMMAIN.ACTOPTIONS.CAPTION=&Options... TFRMMAIN.ACTMULTIRENAME.CAPTION=Multi &Rename Tool TFRMMAIN.ACTSEARCH.CAPTION=&Search... TFRMMAIN.ACTSYNCDIRS.CAPTION=Synchronize dirs... TFRMMAIN.ACTCONFIGTOOLBARS.CAPTION=Toolbar... TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION=Configuration of Directory Hotlist TFRMMAIN.ACTWORKWITHDIRECTORYHOTLIST.CAPTION=Work with Directory Hotlist and paramters TFRMMAIN.ACTFILEASSOC.CAPTION=Configuration of File &Associations TFRMMAIN.ACTCOMPARECONTENTS.CAPTION=Compare by &Contents TFRMMAIN.ACTSHOWMAINMENU.CAPTION=Menu TFRMMAIN.ACTSHOWBUTTONMENU.CAPTION=Show button menu TFRMMAIN.ACTOPERATIONSVIEWER.CAPTION=Operations &Viewer TFRMMAIN.ACTREFRESH.CAPTION=&Refresh TFRMMAIN.ACTSHOWSYSFILES.CAPTION=Show &Hidden/System Files TFRMMAIN.ACTDIRHISTORY.CAPTION=Directory history TFRMMAIN.ACTDIRHOTLIST.CAPTION=Directory &Hotlist TFRMMAIN.ACTMARKPLUS.CAPTION=Select a &Group... TFRMMAIN.ACTMARKMINUS.CAPTION=Unselect a Gro&up... TFRMMAIN.ACTMARKMARKALL.CAPTION=&Select All TFRMMAIN.ACTMARKUNMARKALL.CAPTION=&Unselect All TFRMMAIN.ACTCALCULATESPACE.CAPTION=Calculate &Occupied Space TFRMMAIN.ACTNEWTAB.CAPTION=&New Tab TFRMMAIN.ACTCUTTOCLIPBOARD.CAPTION=Cu&t TFRMMAIN.ACTCOPYTOCLIPBOARD.CAPTION=&Copy TFRMMAIN.ACTPASTEFROMCLIPBOARD.CAPTION=&Paste TFRMMAIN.ACTRUNTERM.CAPTION=Run &Terminal TFRMMAIN.ACTMARKINVERT.CAPTION=&Invert Selection TFRMMAIN.ACTMARKCURRENTEXTENSION.CAPTION=Select All with the Same E&xtension TFRMMAIN.ACTUNMARKCURRENTEXTENSION.CAPTION=Unselect All with the Same Ex&tension TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION=Compare Directories TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT=Compare Directories TFRMMAIN.ACTEDITNEW.CAPTION=Edit new file TFRMMAIN.ACTCOPY.CAPTION=Copy TFRMMAIN.ACTCOPYNOASK.CAPTION=Copy files without asking for confirmation TFRMMAIN.ACTCOPYSAMEPANEL.CAPTION=Copy to same panel TFRMMAIN.ACTRENAME.CAPTION=Move TFRMMAIN.ACTRENAMENOASK.CAPTION=Move/Rename files without asking for confirmation TFRMMAIN.ACTRENAMEONLY.CAPTION=Rename TFRMMAIN.ACTMAKEDIR.CAPTION=Create &Directory TFRMMAIN.ACTDELETE.CAPTION=Delete TFRMMAIN.ACTWIPE.CAPTION=Wipe TFRMMAIN.ACTPACKFILES.CAPTION=&Pack Files... TFRMMAIN.ACTTESTARCHIVE.CAPTION=&Test Archive(s) TFRMMAIN.ACTOPENARCHIVE.CAPTION=Try open archive TFRMMAIN.ACTEXTRACTFILES.CAPTION=&Extract Files... TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION=Open &VFS List TFRMMAIN.ACTFILEPROPERTIES.CAPTION=Show &File Properties TFRMMAIN.ACTOPENDIRINNEWTAB.CAPTION=Open &Folder in a New Tab TFRMMAIN.ACTNEXTTAB.CAPTION=Switch to Nex&t Tab TFRMMAIN.ACTPREVTAB.CAPTION=Switch to &Previous Tab TFRMMAIN.ACTSWITCHIGNORELIST.CAPTION=Enable/disable ignore list file to not show file names TFRMMAIN.ACTCOPYNAMESTOCLIP.CAPTION=Copy &Filename(s) to Clipboard TFRMMAIN.ACTCOPYFULLNAMESTOCLIP.CAPTION=Copy Filename(s) with Full &Path TFRMMAIN.ACTSAVESELECTION.CAPTION=Sa&ve Selection TFRMMAIN.ACTRESTORESELECTION.CAPTION=&Restore Selection TFRMMAIN.ACTSAVESELECTIONTOFILE.CAPTION=Save S&election to File... TFRMMAIN.ACTLOADSELECTIONFROMFILE.CAPTION=&Load Selection from File... TFRMMAIN.ACTLOADSELECTIONFROMCLIP.CAPTION=Load Selection from Clip&board TFRMMAIN.ACTNETWORKCONNECT.CAPTION=Network &Connect... TFRMMAIN.ACTNETWORKQUICKCONNECT.CAPTION=Network &Quick Connect... TFRMMAIN.ACTNETWORKDISCONNECT.CAPTION=Network &Disconnect TFRMMAIN.ACTCOPYPATHOFFILESTOCLIP.CAPTION=Copy Full Path of selected file(s) TFRMMAIN.ACTCOPYPATHNOSEPOFFILESTOCLIP.CAPTION=Copy Full Path of selected file(s) with no ending dir separator TFRMMAIN.ACTCOPYFILEDETAILSTOCLIP.CAPTION=Copy all shown &columns TFRMMAIN.ACTRENAMETAB.CAPTION=&Rename Tab TFRMMAIN.ACTLEFTBRIEFVIEW.CAPTION=Brief view on left panel TFRMMAIN.ACTLEFTCOLUMNSVIEW.CAPTION=Columns view on left panel TFRMMAIN.ACTLEFTTHUMBVIEW.CAPTION=Thumbnails view on left panel TFRMMAIN.ACTLEFTFLATVIEW.CAPTION=&Flat view on left panel TFRMMAIN.ACTLEFTSORTBYNAME.CAPTION=Sort left panel by &Name TFRMMAIN.ACTLEFTSORTBYEXT.CAPTION=Sort left panel by &Extension TFRMMAIN.ACTLEFTSORTBYSIZE.CAPTION=Sort left panel by &Size TFRMMAIN.ACTLEFTSORTBYDATE.CAPTION=Sort left panel by &Date TFRMMAIN.ACTLEFTSORTBYATTR.CAPTION=Sort left panel by &Attributes TFRMMAIN.ACTLEFTREVERSEORDER.CAPTION=Re&verse order on left panel TFRMMAIN.ACTLEFTOPENDRIVES.CAPTION=Open left drive list TFRMMAIN.ACTRIGHTBRIEFVIEW.CAPTION=Brief view on right panel TFRMMAIN.ACTRIGHTCOLUMNSVIEW.CAPTION=Columns view on right panel TFRMMAIN.ACTRIGHTTHUMBVIEW.CAPTION=Thumbnails view on right panel TFRMMAIN.ACTRIGHTFLATVIEW.CAPTION=&Flat view on right panel TFRMMAIN.ACTRIGHTSORTBYNAME.CAPTION=Sort right panel by &Name TFRMMAIN.ACTRIGHTSORTBYEXT.CAPTION=Sort right panel by &Extension TFRMMAIN.ACTRIGHTSORTBYSIZE.CAPTION=Sort right panel by &Size TFRMMAIN.ACTRIGHTSORTBYDATE.CAPTION=Sort right panel by &Date TFRMMAIN.ACTRIGHTSORTBYATTR.CAPTION=Sort right panel by &Attributes TFRMMAIN.ACTRIGHTREVERSEORDER.CAPTION=Re&verse order on right panel TFRMMAIN.ACTRIGHTOPENDRIVES.CAPTION=Open right drive list TFRMMAIN.ACTFOCUSCMDLINE.CAPTION=Focus command line TFRMMAIN.ACTSHOWCMDLINEHISTORY.CAPTION=Show command line history TFRMMAIN.ACTCHANGEDIRTOPARENT.CAPTION=Change Directory To Parent TFRMMAIN.ACTCHANGEDIRTOHOME.CAPTION=Change directory to home TFRMMAIN.ACTCHANGEDIRTOROOT.CAPTION=Change directory to root TFRMMAIN.ACTTARGETEQUALSOURCE.CAPTION=Target &= Source TFRMMAIN.ACTTRANSFERLEFT.CAPTION=Transfer dir under cursor to left window TFRMMAIN.ACTTRANSFERRIGHT.CAPTION=Transfer dir under cursor to right window TFRMMAIN.ACTLEFTEQUALRIGHT.CAPTION=Left &= Right TFRMMAIN.ACTRIGHTEQUALLEFT.CAPTION=Right &= Left TFRMMAIN.ACTBRIEFVIEW.CAPTION=Brief view TFRMMAIN.ACTBRIEFVIEW.HINT=Brief View TFRMMAIN.ACTCOLUMNSVIEW.CAPTION=Full TFRMMAIN.ACTCOLUMNSVIEW.HINT=Columns View TFRMMAIN.ACTTHUMBNAILSVIEW.CAPTION=Thumbnails TFRMMAIN.ACTTHUMBNAILSVIEW.HINT=Thumbnails View TFRMMAIN.ACTFLATVIEW.CAPTION=&Flat view TFRMMAIN.ACTQUICKVIEW.CAPTION=&Quick View Panel TFRMMAIN.ACTSORTBYNAME.CAPTION=Sort by &Name TFRMMAIN.ACTSORTBYEXT.CAPTION=Sort by &Extension TFRMMAIN.ACTSORTBYSIZE.CAPTION=Sort by &Size TFRMMAIN.ACTSORTBYDATE.CAPTION=Sort by &Date TFRMMAIN.ACTSORTBYATTR.CAPTION=Sort by &Attributes TFRMMAIN.ACTREVERSEORDER.CAPTION=Re&verse Order TFRMMAIN.ACTSRCOPENDRIVES.CAPTION=Open drive list TFRMMAIN.ACTEXCHANGE.CAPTION=Swap &Panels TFRMMAIN.ACTQUICKSEARCH.CAPTION=Quick search TFRMMAIN.ACTVIEWLOGFILE.CAPTION=View log file TFRMMAIN.ACTCLEARLOGFILE.CAPTION=Clear log file TFRMMAIN.ACTCLEARLOGWINDOW.CAPTION=Clear log window TFRMMAIN.ACTQUICKFILTER.CAPTION=Quick filter TFRMMAIN.ACTEDITPATH.CAPTION=Edit path field above file list TFRMMAIN.ACTCHANGEDIR.CAPTION=Change directory TFRMMAIN.ACTCMDLINENEXT.CAPTION=Next Command Line TFRMMAIN.ACTCMDLINENEXT.HINT=Set command line to next command in history TFRMMAIN.ACTCMDLINEPREV.CAPTION=Previous Command Line TFRMMAIN.ACTCMDLINEPREV.HINT=Set command line to previous command in history TFRMMAIN.ACTADDPATHTOCMDLINE.CAPTION=Copy path to command line TFRMMAIN.ACTADDFILENAMETOCMDLINE.CAPTION=Add file name to command line TFRMMAIN.ACTADDPATHANDFILENAMETOCMDLINE.CAPTION=Add path and file name to command line TFRMMAIN.ACTGOTOFIRSTFILE.CAPTION=Place cursor on first file in list TFRMMAIN.ACTGOTOLASTFILE.CAPTION=Place cursor on last file in list TFRMMAIN.ACTVIEWHISTORY.CAPTION=Show history of visited paths for active view TFRMMAIN.ACTVIEWHISTORYNEXT.CAPTION=Go to next entry in history TFRMMAIN.ACTVIEWHISTORYPREV.CAPTION=Go to previous entry in history TFRMMAIN.ACTOPENBAR.CAPTION=Open bar file TFRMMAIN.ACTMINIMIZE.CAPTION=Minimize window TFRMMAIN.ACTEXIT.CAPTION=E&xit TFRMMAIN.ACTDEBUGSHOWCOMMANDPARAMETERS.CAPTION=Show Command Parameters TFRMMAIN.ACTDOANYCMCOMMAND.CAPTION=Select any command and execute it TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION=Change &Attributes... TFRMMAIN.ACTEDITCOMMENT.CAPTION=Edit Co&mment... TFRMMAIN.ACTCONTEXTMENU.CAPTION=Show context menu TFRMMAIN.ACTOPEN.CAPTION=Open TFRMMAIN.ACTSHELLEXECUTE.CAPTION=Open TFRMMAIN.ACTSHELLEXECUTE.HINT=Open using system associations TFRMMAIN.ACTSYMLINK.CAPTION=Create Symbolic &Link... TFRMMAIN.ACTHARDLINK.CAPTION=Create &Hard Link... TFRMMAIN.ACTFILESPLITER.CAPTION=Spl&it File... TFRMMAIN.ACTFILELINKER.CAPTION=Com&bine Files... TFRMMAIN.ACTCHECKSUMCALC.CAPTION=Calculate Check&sum... TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION=&Verify Checksum... TFRMMAIN.ACTUNIVERSALSINGLEDIRECTSORT.CAPTION=Sort according to parameters TFRMMAIN.ACTCOUNTDIRCONTENT.CAPTION=Sho&w Occupied Space TFRMMAIN.ACTTOGGLEFULLSCREENCONSOLE.CAPTION=Toggle fullscreen mode console TFRMMAIN.ACTTREEVIEW.CAPTION=&Tree View Panel TFRMMAIN.ACTCONFIGFOLDERTABS.CAPTION=Configuration of folder tabs TFRMMAIN.ACTCONFIGFAVORITETABS.CAPTION=Configuration of Favorite Tabs TFRMMAIN.ACTCLOSETAB.CAPTION=&Close Tab TFRMMAIN.ACTCLOSEALLTABS.CAPTION=Close &All Tabs TFRMMAIN.ACTCLOSEDUPLICATETABS.CAPTION=Close Duplicate Tabs TFRMMAIN.ACTCOPYALLTABSTOOPPOSITE.CAPTION=Copy all tabs to opposite side TFRMMAIN.ACTLOADTABS.CAPTION=&Load Tabs from File TFRMMAIN.ACTSAVETABS.CAPTION=&Save Tabs to File TFRMMAIN.ACTSETTABOPTIONNORMAL.CAPTION=&Normal TFRMMAIN.ACTSETTABOPTIONPATHLOCKED.CAPTION=&Locked TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION=Locked with &Directory Changes Allowed TFRMMAIN.ACTSETTABOPTIONDIRSINNEWTAB.CAPTION=Locked with Directories Opened in New &Tabs TFRMMAIN.ACTSETALLTABSOPTIONNORMAL.CAPTION=Set all tabs to Normal TFRMMAIN.ACTSETALLTABSOPTIONPATHLOCKED.CAPTION=Set all tabs to Locked TFRMMAIN.ACTSETALLTABSOPTIONPATHRESETS.CAPTION=All tabs Locked with Dir Changes Allowed TFRMMAIN.ACTSETALLTABSOPTIONDIRSINNEWTAB.CAPTION=All tabs Locked with Dir Opened in New Tabs TFRMMAIN.ACTLOADFAVORITETABS.CAPTION=Load tabs from Favorite Tabs TFRMMAIN.ACTSAVEFAVORITETABS.CAPTION=Save current tabs to a New Favorite Tabs TFRMMAIN.ACTRELOADFAVORITETABS.CAPTION=Reload the last Favorite Tabs loaded TFRMMAIN.ACTRESAVEFAVORITETABS.CAPTION=Resave on the last Favorite Tabs loaded TFRMMAIN.ACTPREVIOUSFAVORITETABS.CAPTION=Load the Previous Favorite Tabs in the list TFRMMAIN.ACTNEXTFAVORITETABS.CAPTION=Load the Next Favorite Tabs in the list TFRMMAIN.TBEDIT.CAPTION=Edit TFRMMAIN.TBDELETE.CAPTION=Delete TFRMMAIN.TBCHANGEDIR.CAPTION=CD TFRMMAIN.TBSEPARATOR.CAPTION=- TFRMMAIN.TBCUT.CAPTION=Cut TFRMMAIN.TBCOPY.CAPTION=Copy TFRMMAIN.TBPASTE.CAPTION=Paste TFRMMAIN.MNUCONTEXTLINE1.CAPTION=- TFRMMAIN.MNUCONTEXTLINE2.CAPTION=- TFRMMAIN.MENUITEM2.CAPTION=- TFRMMAIN.MI2080.CAPTION=&20/80 TFRMMAIN.MI3070.CAPTION=&30/70 TFRMMAIN.MI4060.CAPTION=&40/60 TFRMMAIN.MI5050.CAPTION=&50/50 TFRMMAIN.MI6040.CAPTION=&60/40 TFRMMAIN.MI7030.CAPTION=&70/30 TFRMMAIN.MI8020.CAPTION=&80/20 TFRMMAIN.MICOPY.CAPTION=Copy... TFRMMAIN.MIMOVE.CAPTION=Move... TFRMMAIN.MIHARDLINK.CAPTION=Create link... TFRMMAIN.MISYMLINK.CAPTION=Create symlink... TFRMMAIN.MILINE12.CAPTION=- TFRMMAIN.MICANCEL.CAPTION=Cancel TFRMMAIN.MILINE14.CAPTION=- TFRMMAIN.MILINE19.CAPTION=- TFRMMAIN.MITABOPTIONS.CAPTION=Tab options TFRMMAIN.MILINE16.CAPTION=- TFRMMAIN.MILINE21.CAPTION=- TFRMMAIN.MILINE23.CAPTION=- TFRMMAIN.MILINE26.CAPTION=- TFRMMAIN.MITRAYICONRESTORE.CAPTION=Restore TFRMMAIN.MILINE8.CAPTION=- TFRMMAIN.MITRAYICONEXIT.CAPTION=E&xit TFRMMAIN.MILOGCOPY.CAPTION=Copy TFRMMAIN.MILINE24.CAPTION=- TFRMMAIN.MILOGSELECTALL.CAPTION=Select All TFRMMAIN.MILINE25.CAPTION=- TFRMMAIN.MILOGCLEAR.CAPTION=Clear TFRMMAIN.MILOGHIDE.CAPTION=Hide �����������������������������doublecmd-0.7.1/src/uclassesex.pas������������������������������������������������������������������0000644�0001750�0000144�00000006010�12406320014�016155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This module contains additional or extended classes. Copyright (C) 2008-2014 Alexander Koblov (alexx2000@mail.ru) 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 uClassesEx; {$mode objfpc}{$H+} interface uses Classes, SysUtils, IniPropStorage; type { TBlobStream } TBlobStream = class(TCustomMemoryStream) public constructor Create(Ptr: Pointer; ASize: PtrInt); end; { TIniPropStorageEx } TIniPropStorageEx = class(TCustomIniPropStorage) private function ChangeIdent(const Ident: String): String; protected function IniFileClass: TIniFileClass; override; public procedure Restore; override; function DoReadString(const Section, Ident, default: string): string; override; procedure DoWriteString(const Section, Ident, Value: string); override; end; implementation uses LCLVersion, Forms, DCStrUtils, DCClassesUtf8; { TBlobStream } constructor TBlobStream.Create(Ptr: Pointer; ASize: PtrInt); begin inherited Create; SetPointer(Ptr, ASize); end; { TIniPropStorageEx } function TIniPropStorageEx.IniFileClass: TIniFileClass; begin Result:= TIniFileEx; end; procedure TIniPropStorageEx.Restore; var AMonitor: TMonitor; begin inherited Restore; if Self.Owner is TCustomForm then begin with TCustomForm(Self.Owner) do begin {$IF (lcl_fullversion >= 1020000)} // Refresh monitor list Screen.UpdateMonitors; {$ENDIF} AMonitor:= Screen.MonitorFromPoint(Classes.Point(Left, Top)); if Assigned(AMonitor) then MakeFullyVisible(AMonitor, True); // Workaround for bug: http://bugs.freepascal.org/view.php?id=18514 if WindowState = wsMinimized then WindowState:= wsNormal; end; end; end; function TIniPropStorageEx.DoReadString(const Section, Ident, default: string): string; begin Result := inherited DoReadString(Section, ChangeIdent(Ident), default); end; procedure TIniPropStorageEx.DoWriteString(const Section, Ident, Value: string); begin inherited DoWriteString(Section, ChangeIdent(Ident), Value); end; function TIniPropStorageEx.ChangeIdent(const Ident: String): String; begin // Change component name to class name. if StrBegins(Ident, Owner.Name) then Result := Owner.ClassName + Copy(Ident, 1 + Length(Owner.Name), MaxInt) else Result := Ident; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdeletedlg.lfm������������������������������������������������������������������0000644�0001750�0000144�00000002515�12624335730�016113� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmDeleteDlg: TfrmDeleteDlg Left = 347 Height = 86 Top = 169 Width = 415 AutoSize = True BorderStyle = bsDialog ClientHeight = 86 ClientWidth = 415 Position = poScreenCenter inherited pnlContent: TPanel Height = 1 Width = 399 Align = alTop ClientHeight = 1 ClientWidth = 399 object lblMessage: TLabel[0] AnchorSideLeft.Control = pnlContent AnchorSideTop.Control = pnlContent AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 0 Height = 1 Top = 0 Width = 399 Anchors = [akTop, akLeft, akRight] ParentColor = False WordWrap = True end end inherited pnlButtons: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = pnlContent AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Top = 41 Width = 399 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 32 ClientWidth = 399 inherited btnAddToQueue: TBitBtn TabOrder = 3 end inherited btnCreateSpecialQueue: TBitBtn TabOrder = 2 end inherited btnCancel: TBitBtn Left = 217 TabOrder = 1 end inherited btnOK: TBitBtn Left = 311 TabOrder = 0 end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uquickviewpanel.pas�������������������������������������������������������������0000644�0001750�0000144�00000011127�12626604255�017237� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uQuickViewPanel; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, fViewer, uFileViewNotebook, uFile, uFileSource, uFileView; type { TQuickViewPanel } TQuickViewPanel = class(TPanel) private FFirstFile: Boolean; FFileViewPage: TFileViewPage; FFileView: TFileView; FFileSource: IFileSource; FViewer: TfrmViewer; FFileName: String; public constructor Create(TheOwner: TComponent; aParent: TFileViewPage); reintroduce; destructor Destroy; override; procedure CreateViewer(aFileView: TFileView); procedure LoadFile(const aFileName: String); procedure FileViewChangeActiveFile(Sender: TFileView; const aFile : TFile); end; procedure QuickViewShow(aFileViewPage: TFileViewPage; aFileView: TFileView); procedure QuickViewClose; var QuickViewPanel: TQuickViewPanel; implementation uses LCLProc, Forms, Controls, uTempFileSystemFileSource, uFileSourceProperty, uFileSourceOperation, uFileSourceOperationTypes; procedure QuickViewShow(aFileViewPage: TFileViewPage; aFileView: TFileView); var aFile: TFile = nil; begin QuickViewPanel:= TQuickViewPanel.Create(Application, aFileViewPage); QuickViewPanel.CreateViewer(aFileView); aFile := aFileView.CloneActiveFile; try QuickViewPanel.FileViewChangeActiveFile(aFileView, aFile); finally FreeAndNil(aFile); end; aFileView.OnChangeActiveFile:= @QuickViewPanel.FileViewChangeActiveFile; end; procedure QuickViewClose; begin FreeThenNil(QuickViewPanel); end; { TQuickViewPanel } constructor TQuickViewPanel.Create(TheOwner: TComponent; aParent: TFileViewPage); begin inherited Create(TheOwner); Parent:= aParent; Align:= alClient; FFileViewPage:= aParent; FFileSource:= nil; FViewer:= nil; end; destructor TQuickViewPanel.Destroy; begin FFileView.OnChangeActiveFile:= nil; FViewer.ExitPluginMode; FFileViewPage.FileView.Visible:= True; FreeThenNil(FViewer); FFileSource:= nil; FFileView.SetFocus; inherited Destroy; end; procedure TQuickViewPanel.CreateViewer(aFileView: TFileView); begin FViewer:= TfrmViewer.Create(Self, nil, True); FViewer.Parent:= Self; FViewer.BorderStyle:= bsNone; FViewer.Align:= alClient; FFirstFile:= True; FFileView:= aFileView; FFileSource:= aFileView.FileSource; FFileViewPage.FileView.Visible:= False; end; procedure TQuickViewPanel.LoadFile(const aFileName: String); begin if FFirstFile then begin FFirstFile:= False; FViewer.LoadFile(aFileName); FViewer.Show; end else begin FViewer.LoadNextFile(aFileName); end; // Viewer can steal focus, so restore it if not FFileView.Focused then FFileView.SetFocus; end; procedure TQuickViewPanel.FileViewChangeActiveFile(Sender: TFileView; const aFile: TFile); var ActiveFile: TFile = nil; TempFiles: TFiles = nil; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; begin if not (Assigned(aFile) and (aFile.Name <> '..')) then Exit; try // If files are links to local files if (fspLinksToLocalFiles in Sender.FileSource.Properties) then begin if aFile.IsDirectory or aFile.IsLinkToDirectory then Exit; FFileSource := Sender.FileSource; ActiveFile:= aFile.Clone; if not FFileSource.GetLocalName(ActiveFile) then Exit; end // If files not directly accessible copy them to temp file source. else if not (fspDirectAccess in Sender.FileSource.Properties) then begin if aFile.IsDirectory or SameText(FFileName, aFile.Name) then Exit; if not (fsoCopyOut in Sender.FileSource.GetOperationsTypes) then Exit; ActiveFile:= aFile.Clone; TempFiles:= TFiles.Create(Sender.CurrentPath); TempFiles.Add(aFile.Clone); if FFileSource.IsClass(TTempFileSystemFileSource) then TempFileSource := (FFileSource as ITempFileSystemFileSource) else TempFileSource := TTempFileSystemFileSource.GetFileSource; Operation := Sender.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if not Assigned(Operation) then Exit; Operation.Execute; FreeAndNil(Operation); FFileName:= ActiveFile.Name; FFileSource := TempFileSource; ActiveFile.Path:= TempFileSource.FileSystemRoot; end else begin // We can use the file source directly. FFileSource := Sender.FileSource; ActiveFile:= aFile.Clone; end; LoadFile(ActiveFile.FullPath); finally FreeThenNil(TempFiles); FreeThenNil(ActiveFile); end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/dmcommondata.pas����������������������������������������������������������������0000644�0001750�0000144�00000000632�11740433676�016470� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit dmCommonData; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Dialogs; type { TdmComData } TdmComData = class(TDataModule) ImageList: TImageList; OpenDialog: TOpenDialog; SaveDialog: TSaveDialog; private { private declarations } public { public declarations } end; var dmComData: TdmComData; implementation {$R *.lfm} end. ������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fselecttextrange.pas������������������������������������������������������������0000644�0001750�0000144�00000003414�12612505011�017353� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fSelectTextRange; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ButtonPanel, Buttons, uOSForms; type { TfrmSelectTextRange } TfrmSelectTextRange = class(TModalForm) btpPanel: TButtonPanel; edtSelectText: TEdit; lblSelectText: TLabel; procedure edtSelectTextKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private FSelStart, FSelFinish: LongInt; public { public declarations } end; function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText: String; out ASelection: TPoint): Boolean; implementation {$R *.lfm} function ShowSelectTextRangeDlg(TheOwner: TCustomForm; const ACaption, AText: String; out ASelection: TPoint): Boolean; begin with TfrmSelectTextRange.Create(TheOwner) do try Caption:= ACaption; edtSelectText.Text:= AText; Result:= (ShowModal = mrOK); if Result then begin ASelection.X:= FSelStart; ASelection.Y:= FSelFinish; Result:= (FSelFinish >= FSelStart); end; finally Free; end; end; { TfrmSelectTextRange } procedure TfrmSelectTextRange.edtSelectTextKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin FSelStart:= edtSelectText.SelStart + 1; FSelFinish:= edtSelectText.SelStart + edtSelectText.SelLength; end; procedure TfrmSelectTextRange.edtSelectTextMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FSelStart:= edtSelectText.SelStart + 1; FSelFinish:= edtSelectText.SelStart + edtSelectText.SelLength; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/feditor.pas���������������������������������������������������������������������0000644�0001750�0000144�00000064465�12650530260�015463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Build-in Editor for Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz This form used SynEdit and his Highlighters contributors: Copyright (C) 2006-2015 Alexander Koblov (Alexx2000@mail.ru) } unit fEditor; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, ActnList, Menus, SynEdit, ComCtrls, SynEditSearch, SynEditHighlighter, uDebug, uOSForms, uShowForm, types, Graphics; type { TfrmEditor } TfrmEditor = class(TAloneForm) actEditCut: TAction; actEditCopy: TAction; actEditSelectAll: TAction; actEditUndo: TAction; actEditRedo: TAction; actEditPaste: TAction; actEditDelete: TAction; actEditFindNext: TAction; actEditLineEndCrLf: TAction; actEditLineEndCr: TAction; actEditLineEndLf: TAction; actEditGotoLine: TAction; ilImageList: TImageList; MainMenu1: TMainMenu; ActListEdit: TActionList; actAbout: TAction; actFileOpen: TAction; actFileClose: TAction; actFileSave: TAction; actFileSaveAs: TAction; actFileNew: TAction; actFileExit: TAction; miGotoLine: TMenuItem; miEditLineEndCr: TMenuItem; miEditLineEndLf: TMenuItem; miEditLineEndCrLf: TMenuItem; miLineEndType: TMenuItem; N5: TMenuItem; miEncodingOut: TMenuItem; miEncodingIn: TMenuItem; miEncoding: TMenuItem; miFindNext: TMenuItem; miDelete: TMenuItem; miSelectAll: TMenuItem; miRedo: TMenuItem; miDeleteContext: TMenuItem; miSelectAllContext: TMenuItem; miSeparator2: TMenuItem; miPasteContext: TMenuItem; miCopyContext: TMenuItem; miCutContext: TMenuItem; miSeparator1: TMenuItem; miUndoContext: TMenuItem; miFile: TMenuItem; New1: TMenuItem; Open1: TMenuItem; pmContextMenu: TPopupMenu; Save1: TMenuItem; SaveAs1: TMenuItem; N1: TMenuItem; Exit1: TMenuItem; miEdit: TMenuItem; miUndo: TMenuItem; N3: TMenuItem; miCut: TMenuItem; miCopy: TMenuItem; miPaste: TMenuItem; N4: TMenuItem; miFind: TMenuItem; miReplace: TMenuItem; Help1: TMenuItem; miAbout: TMenuItem; actSaveAll: TAction; StatusBar: TStatusBar; Editor: TSynEdit; miHighlight: TMenuItem; actEditFind: TAction; actEditRplc: TAction; actConfHigh: TAction; miDiv: TMenuItem; miConfHigh: TMenuItem; tbToolBar: TToolBar; tbNew: TToolButton; tbOpen: TToolButton; tbSave: TToolButton; tbSeparator1: TToolButton; tbCut: TToolButton; tbCopy: TToolButton; tbPaste: TToolButton; tbSeparator2: TToolButton; tbUndo: TToolButton; tbRedo: TToolButton; tbSeparator3: TToolButton; tbConfig: TToolButton; tbHelp: TToolButton; procedure actEditFindNextExecute(Sender: TObject); procedure actEditGotoLineExecute(Sender: TObject); procedure actEditLineEndCrExecute(Sender: TObject); procedure actEditLineEndCrLfExecute(Sender: TObject); procedure actEditLineEndLfExecute(Sender: TObject); procedure EditorMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure EditorMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure FormCreate(Sender: TObject); procedure actEditDeleteExecute(Sender: TObject); procedure actEditRedoExecute(Sender: TObject); procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure EditorReplaceText(Sender: TObject; const ASearch, AReplace: string; Line, Column: integer; var ReplaceAction: TSynReplaceAction); procedure actAboutExecute(Sender: TObject); procedure actEditCopyExecute(Sender: TObject); procedure actEditCutExecute(Sender: TObject); procedure actEditPasteExecute(Sender: TObject); procedure actEditSelectAllExecute(Sender: TObject); procedure actFileNewExecute(Sender: TObject); procedure actFileOpenExecute(Sender: TObject); procedure actEditUndoExecute(Sender: TObject); procedure EditorChange(Sender: TObject); procedure actFileSaveExecute(Sender: TObject); procedure actFileSaveAsExecute(Sender: TObject); procedure EditorStatusChange(Sender: TObject; Changes: TSynStatusChanges); procedure actFileExitExecute(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure EditorKeyPress(Sender: TObject; var Key: Char); procedure actEditFindExecute(Sender: TObject); procedure actEditRplcExecute(Sender: TObject); procedure actSave2Execute(Sender: TObject); procedure actConfHighExecute(Sender: TObject); procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); procedure frmEditorClose(Sender: TObject; var CloseAction: TCloseAction); private { Private declarations } bChanged:Boolean; bNoName: Boolean; bSearchBackwards:Boolean; bSearchCaseSensitive:Boolean; bSearchFromCaret:Boolean; bSearchSelectionOnly:Boolean; bSearchWholeWords:Boolean; bSearchRegExp:Boolean; FFileName: String; sSearchText, sReplaceText:String; sEncodingIn, sEncodingOut, sOriginalText: String; FWaitData: TEditorWaitData; procedure ChooseEncoding(mnuMenuItem: TMenuItem; sEncoding: String); {en Saves editor content to a file. @returns(@true if successful) } function SaveFile(const aFileName: String): Boolean; procedure SetFileName(const AValue: String); public { Public declarations } SynEditSearch: TSynEditSearch; { Function CreateNewTab:Integer; // return tab number Function OpenFileNewTab(const sFileName:String):Integer; } destructor Destroy; override; {en Opens a file. @returns(@true if successful) } function OpenFile(const aFileName: String): Boolean; procedure UpdateStatus; procedure SetEncodingIn(Sender:TObject); procedure SetEncodingOut(Sender:TObject); procedure SetHighLighter(Sender:TObject); procedure UpdateHighlighter(Highlighter: TSynCustomHighlighter); procedure DoSearchReplaceText(AReplace: boolean; ABackwards: boolean); procedure ShowSearchReplaceDialog(AReplace: boolean); property FileName: String read FFileName write SetFileName; end; procedure ShowEditor(WaitData: TEditorWaitData); function ShowEditor(const sFileName: String): TfrmEditor; implementation {$R *.lfm} uses dmCommonData, dmHigh, SynEditTypes, LCLType, LConvEncoding, uLng, uShowMsg, fEditSearch, uGlobs, fOptions, DCClassesUtf8, uOSUtils, uConvEncoding, fOptionsToolsEditor, uDCUtils; function ShowEditor(const sFileName: String): TfrmEditor; begin Result := TfrmEditor.Create(Application); if sFileName = '' then Result.actFileNew.Execute else begin if not Result.OpenFile(sFileName) then Exit; end; Result.ShowOnTop; end; procedure ShowEditor(WaitData: TEditorWaitData); var Editor: TfrmEditor; begin Editor:= ShowEditor(WaitData.FileName); Editor.FWaitData:= WaitData end; procedure TfrmEditor.FormCreate(Sender: TObject); var i:Integer; mi:TMenuItem; EncodingsList: TStringList; begin InitPropStorage(Self); Editor.Options:= gEditorSynEditOptions; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); // update menu highlighting miHighlight.Clear; for i:=0 to dmHighl.SynHighlighterList.Count - 1 do begin mi:=TMenuItem.Create(miHighlight); mi.Caption:=TSynCustomHighlighter(dmHighl.SynHighlighterList.Objects[i]).GetLanguageName; mi.Tag:=i; // mi.Name:='miHigh'+IntToStr(i); mi.Enabled:=True; mi.OnClick:=@SetHighLighter; miHighlight.Add(mi); end; // update menu encoding miEncodingIn.Clear; miEncodingOut.Clear; EncodingsList:= TStringList.Create; GetSupportedEncodings(EncodingsList); for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncodingIn); mi.Caption:= EncodingsList[I]; mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 1; mi.OnClick:= @SetEncodingIn; miEncodingIn.Add(mi); end; for I:= 0 to EncodingsList.Count - 1 do begin mi:= TMenuItem.Create(miEncodingOut); mi.Caption:= EncodingsList[I]; mi.AutoCheck:= True; mi.RadioItem:= True; mi.GroupIndex:= 2; mi.OnClick:= @SetEncodingOut; miEncodingOut.Add(mi); end; EncodingsList.Free; // if we already search text then use last searched text if not gFirstTextSearch then begin if glsSearchHistory.Count > 0 then sSearchText:= glsSearchHistory[0]; end; FixFormIcon(Handle); end; procedure TfrmEditor.actEditFindNextExecute(Sender: TObject); begin if gFirstTextSearch then begin ShowSearchReplaceDialog(False); Exit; end; if sSearchText <> '' then begin DoSearchReplaceText(False, bSearchBackwards); bSearchFromCaret:= True; end; end; procedure TfrmEditor.actEditGotoLineExecute(Sender: TObject); var P: TPoint; Value: String; NewTopLine: Integer; begin if ShowInputQuery(rsEditGotoLineTitle, rsEditGotoLineQuery, Value) then begin P.X := 1; P.Y := StrToIntDef(Value, 1); NewTopLine := P.Y - (Editor.LinesInWindow div 2); if NewTopLine < 1 then NewTopLine:= 1; Editor.CaretXY := P; Editor.TopLine := NewTopLine; Editor.SetFocus; end; end; procedure TfrmEditor.actEditLineEndCrExecute(Sender: TObject); begin Editor.Lines.TextLineBreakStyle:= tlbsCR; end; procedure TfrmEditor.actEditLineEndCrLfExecute(Sender: TObject); begin Editor.Lines.TextLineBreakStyle:= tlbsCRLF; end; procedure TfrmEditor.actEditLineEndLfExecute(Sender: TObject); begin Editor.Lines.TextLineBreakStyle:= tlbsLF; end; procedure TfrmEditor.EditorMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var t:integer; begin if (Shift=[ssCtrl])and(gFonts[dcfEditor].Size>MIN_FONT_SIZE_EDITOR) then begin t:=Editor.TopLine; gFonts[dcfEditor].Size:=gFonts[dcfEditor].Size-1; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); Editor.TopLine:=t; Editor.Refresh; Handled:=True; end; end; procedure TfrmEditor.EditorMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var t:integer; begin if (Shift=[ssCtrl])and(gFonts[dcfEditor].Size<MAX_FONT_SIZE_EDITOR) then begin t:=Editor.TopLine; gFonts[dcfEditor].Size:=gFonts[dcfEditor].Size+1; FontOptionsToFont(gFonts[dcfEditor], Editor.Font); Editor.TopLine:=t; Editor.Refresh; Handled:=True; end; end; function TfrmEditor.OpenFile(const aFileName: String): Boolean; var Buffer: AnsiString; Reader: TFileStreamEx; Highlighter: TSynCustomHighlighter; begin Result := False; try Reader := TFileStreamEx.Create(aFileName, fmOpenRead or fmShareDenyNone); try SetLength(sOriginalText, Reader.Size); Reader.Read(Pointer(sOriginalText)^, Length(sOriginalText)); finally Reader.Free; end; // Try to detect encoding by first 4 kb of text Buffer := Copy(sOriginalText, 1, 4096); sEncodingIn := DetectEncoding(Buffer); ChooseEncoding(miEncodingIn, sEncodingIn); sEncodingOut := sEncodingIn; // by default ChooseEncoding(miEncodingOut, sEncodingOut); // Try to guess line break style with Editor.Lines do begin if (sEncodingIn <> EncodingUCS2LE) and (sEncodingIn <> EncodingUCS2BE) then TextLineBreakStyle := GuessLineBreakStyle(Buffer) else begin sOriginalText := Copy(sOriginalText, 3, MaxInt); // Skip BOM TextLineBreakStyle := GuessLineBreakStyle(ConvertEncoding(Buffer, sEncodingIn, EncodingUTF8)); end; case TextLineBreakStyle of tlbsCRLF: actEditLineEndCrLf.Checked := True; tlbsCR: actEditLineEndCr.Checked := True; tlbsLF: actEditLineEndLf.Checked := True; end; end; // Convert encoding if needed if sEncodingIn = EncodingUTF8 then Buffer := sOriginalText else begin Buffer := ConvertEncoding(sOriginalText, sEncodingIn, EncodingUTF8); end; // Load text into editor Editor.Lines.Text := Buffer; // Add empty line if needed if (Length(Buffer) > 0) and (Buffer[Length(Buffer)] in [#10, #13]) then Editor.Lines.Add(EmptyStr); Result := True; except on E: EFCreateError do begin DCDebug(E.Message); msgError(rsMsgErrECreate + ' ' + aFileName); Exit; end; on E: EFOpenError do begin DCDebug(E.Message); msgError(rsMsgErrEOpen + ' ' + aFileName); Exit; end; on E: EReadError do begin DCDebug(E.Message); msgError(rsMsgErrERead + ' ' + aFileName); Exit; end; end; // set up highlighter Highlighter := dmHighl.GetHighlighterByExt(ExtractFileExt(aFileName)); UpdateHighlighter(Highlighter); FileName := aFileName; bChanged := False; bNoname := False; UpdateStatus; end; function TfrmEditor.SaveFile(const aFileName: String): Boolean; var TextOut: String; Encoding: String; Writer: TFileStreamEx; begin Result := False; try Writer := TFileStreamEx.Create(aFileName, fmCreate); try Encoding := NormalizeEncoding(sEncodingOut); // If file is empty and encoding with BOM then write only BOM if (Editor.Lines.Count = 0) then begin if (Encoding = EncodingUTF8BOM) then Writer.Write(UTF8BOM, SizeOf(UTF8BOM)) else if (Encoding = EncodingUCS2LE) then Writer.Write(UTF16LEBOM, SizeOf(UTF16LEBOM)) else if (Encoding = EncodingUCS2BE) then Writer.Write(UTF16BEBOM, SizeOf(UTF16BEBOM)); end else begin TextOut := EmptyStr; if (Encoding = EncodingUCS2LE) then TextOut := UTF16LEBOM else if (Encoding = EncodingUCS2BE) then begin TextOut := UTF16BEBOM end; TextOut += ConvertEncoding(Editor.Lines[0], EncodingUTF8, sEncodingOut); Writer.Write(Pointer(TextOut)^, Length(TextOut)); // If file has only one line then write it without line break if Editor.Lines.Count > 1 then begin TextOut := TextLineBreakValue[Editor.Lines.TextLineBreakStyle]; TextOut += GetTextRange(Editor.Lines, 1, Editor.Lines.Count - 2); // Special case for UTF-8 and UTF-8 with BOM if (Encoding <> EncodingUTF8) and (Encoding <> EncodingUTF8BOM) then begin TextOut:= ConvertEncoding(TextOut, EncodingUTF8, sEncodingOut); end; Writer.Write(Pointer(TextOut)^, Length(TextOut)); // Write last line without line break TextOut:= Editor.Lines[Editor.Lines.Count - 1]; // Special case for UTF-8 and UTF-8 with BOM if (Encoding <> EncodingUTF8) and (Encoding <> EncodingUTF8BOM) then begin TextOut:= ConvertEncoding(TextOut, EncodingUTF8, sEncodingOut); end; Writer.Write(Pointer(TextOut)^, Length(TextOut)); end; end; finally Writer.Free; end; Editor.Modified := False; // needed for the undo stack Editor.MarkTextAsSaved; Result := True; except on E: EFCreateError do begin DCDebug(E.Message); msgWarning(rsMsgErrSaveFile + ' ' + aFileName); end; on E: EFOpenError do begin DCDebug(E.Message); msgWarning(rsMsgErrSaveFile + ' ' + aFileName); end; end; end; procedure TfrmEditor.SetFileName(const AValue: String); begin if FFileName = AValue then Exit; FFileName := AValue; Caption := FFileName; end; destructor TfrmEditor.Destroy; begin inherited Destroy; if Assigned(FWaitData) then EditDone(FWaitData); end; procedure TfrmEditor.actFileNewExecute(Sender: TObject); begin inherited; FileName := rsMsgNewFile; Editor.Lines.Clear; bChanged:=False; bNoname:=True; UpdateStatus; end; procedure TfrmEditor.EditorReplaceText(Sender: TObject; const ASearch, AReplace: string; Line, Column: integer; var ReplaceAction: TSynReplaceAction ); begin if ASearch = AReplace then ReplaceAction := raSkip else begin case MsgBox('Replace this text?',[msmbYes, msmbNo, msmbCancel, msmbAll], msmbYes, msmbNo) of mmrYes: ReplaceAction := raReplace; mmrAll: ReplaceAction := raReplaceAll; mmrNo: ReplaceAction := raSkip; else ReplaceAction := raCancel; end; end; end; procedure TfrmEditor.EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // this is hack, action hot key not work yet case Key of VK_F2: begin actFileSave.Execute; Key:=0; end; // To prevent else one editor or viewer open on key F4 in viewer VK_F4: begin if Shift <> [ssAlt] then Key:=0; end; VK_F3: begin actEditFindNext.Execute; Key:=0; end; VK_N: begin if Shift=[ssCtrl] then begin actFileNew.Execute; Key:=0; end; end; VK_S: begin if Shift=[ssCtrl] then begin actFileSave.Execute; Key:=0; end; end; VK_F: begin if Shift=[ssCtrl] then begin actEditFind.Execute; Key:=0; end; end; VK_ESCAPE: begin Close; Key:=0; end; end; end; procedure TfrmEditor.actAboutExecute(Sender: TObject); begin msgOK(rsEditAboutText); end; procedure TfrmEditor.actEditCopyExecute(Sender: TObject); begin editor.CopyToClipboard; end; procedure TfrmEditor.actEditCutExecute(Sender: TObject); begin Editor.CutToClipboard; end; procedure TfrmEditor.actEditPasteExecute(Sender: TObject); begin editor.PasteFromClipboard; end; procedure TfrmEditor.actEditDeleteExecute(Sender: TObject); begin Editor.ClearSelection; end; procedure TfrmEditor.actEditRedoExecute(Sender: TObject); begin editor.Redo; end; procedure TfrmEditor.actEditSelectAllExecute(Sender: TObject); begin editor.SelectAll; end; procedure TfrmEditor.actFileOpenExecute(Sender: TObject); begin dmComData.OpenDialog.Filter:='*.*'; if not dmComData.OpenDialog.Execute then Exit; if OpenFile(dmComData.OpenDialog.FileName) then UpdateStatus; end; procedure TfrmEditor.SetHighLighter(Sender:TObject); var Highlighter: TSynCustomHighlighter; begin Highlighter:= TSynCustomHighlighter(dmHighl.SynHighlighterList.Objects[TMenuItem(Sender).Tag]); UpdateHighlighter(Highlighter); end; (* This is code for multi tabs editor, it's buggy because Synedit bad handle scrollbars in page control, maybe in future, workaround: new tab must be visible and maybe must have focus procedure TfrmEditor.actFileNewExecute(Sender: TObject); var iPageIndex:Integer; begin inherited; iPageIndex:=CreateNewTab; with pgEditor.Pages[iPageIndex] do begin Caption:='New'+IntToStr(iPageIndex); Hint:=''; // filename end; end; Function TfrmEditor.CreateNewTab:Integer; // return tab number var iPageIndex:Integer; begin with TTabSheet.Create(pgEditor) do // create Tab begin PageControl:=pgEditor; iPageIndex:=PageIndex; // now create Editor with TSynEdit.Create(pgEditor.Pages[PageIndex]) do begin Parent:=pgEditor.Pages[PageIndex]; Align:=alClient; Lines.Clear; end; end; end; procedure TfrmEditor.actFileOpenExecute(Sender: TObject); var iPageIndex:Integer; begin inherited; dmDlg.OpenDialog.Filter:='*.*'; if dmDlg.OpenDialog.Execute then OpenFileNewTab(dmDlg.OpenDialog.FileName); end; Function TfrmEditor.OpenFileNewTab(const sFileName:String):Integer; var iPageIndex:Integer; begin inherited; iPageIndex:=CreateNewTab; pgEditor.ActivePageIndex:=iPageIndex; with pgEditor.Pages[iPageIndex] do begin Caption:=sFileName; Hint:=sFileName; TSynEdit(pgEditor.Pages[iPageIndex].Components[0]).Lines.LoadFromFile(sFileName); end; end; procedure ShowEditor(lsFiles:TStringList); var i:Integer; begin with TfrmEditor.Create(Application) do begin try for i:=0 to lsFiles.Count-1 do OpenFileNewTab(lsFiles.Strings[i]); ShowModal; finally Free; end; end; end; *) procedure TfrmEditor.actEditUndoExecute(Sender: TObject); begin inherited; Editor.Undo; UpdateStatus; end; procedure TfrmEditor.EditorChange(Sender: TObject); begin inherited; bChanged:=True; UpdateStatus; end; procedure TfrmEditor.actFileSaveExecute(Sender: TObject); begin if bNoname then actFileSaveAs.Execute else begin SaveFile(FileName); bChanged:=False; UpdateStatus; end; end; procedure TfrmEditor.actFileSaveAsExecute(Sender: TObject); var Highlighter: TSynCustomHighlighter; begin dmComData.SaveDialog.FileName := FileName; dmComData.SaveDialog.Filter:='*.*'; // rewrite for highlighter if not dmComData.SaveDialog.Execute then Exit; FileName := dmComData.SaveDialog.FileName; SaveFile(FileName); bChanged:=False; bNoname:=False; UpdateStatus; Highlighter:= dmHighl.GetHighlighterByExt(ExtractFileExt(FileName)); UpdateHighlighter(Highlighter); end; procedure TfrmEditor.UpdateStatus; begin if bChanged then StatusBar.Panels[0].Text:='*' else StatusBar.Panels[0].Text:=''; StatusBar.Panels[1].Text:=Format('%d:%d',[Editor.CaretX, Editor.CaretY]); // StatusBar.Panels[2].Text:=IntToStr(Length(Editor.Lines.Text)); end; procedure TfrmEditor.SetEncodingIn(Sender: TObject); begin sEncodingIn:= (Sender as TMenuItem).Caption; sEncodingOut:= sEncodingIn; ChooseEncoding(miEncodingOut, sEncodingOut); Editor.Lines.Text:= ConvertEncoding(sOriginalText, sEncodingIn, EncodingUTF8); end; procedure TfrmEditor.SetEncodingOut(Sender: TObject); begin sEncodingOut:= (Sender as TMenuItem).Caption; end; procedure TfrmEditor.EditorStatusChange(Sender: TObject; Changes: TSynStatusChanges); begin inherited; UpdateStatus; end; procedure TfrmEditor.UpdateHighlighter(Highlighter: TSynCustomHighlighter); begin dmHighl.SetHighlighter(Editor, Highlighter); StatusBar.Panels[3].Text:= Highlighter.GetLanguageName; end; procedure TfrmEditor.actFileExitExecute(Sender: TObject); begin Close; end; procedure TfrmEditor.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin inherited; CanClose:=False; if bChanged then case msgYesNoCancel(Format(rsMsgFileChangedSave,[FileName])) of mmrYes: actFileSave.Execute; mmrNo: bChanged:=False; else Exit; end; CanClose:=True; end; procedure TfrmEditor.EditorKeyPress(Sender: TObject; var Key: Char); begin // inherited; end; procedure TfrmEditor.DoSearchReplaceText(AReplace: boolean; ABackwards: boolean); var Options: TSynSearchOptions; begin Statusbar.SimpleText := ''; if AReplace then Options := [ssoPrompt, ssoReplace, ssoReplaceAll] else Options := []; if ABackwards then Include(Options, ssoBackwards); if bSearchCaseSensitive then Include(Options, ssoMatchCase); if not bSearchFromCaret then Include(Options, ssoEntireScope); if bSearchSelectionOnly then Include(Options, ssoSelectedOnly); if bSearchWholeWords then Include(Options, ssoWholeWord); if bSearchRegExp then Include(Options, ssoRegExpr); try if Editor.SearchReplace(sSearchText, sReplaceText, Options) = 0 then begin if ssoBackwards in Options then Editor.BlockEnd := Editor.BlockBegin else Editor.BlockBegin := Editor.BlockEnd; Editor.CaretXY := Editor.BlockBegin; msgOK(Format(rsViewNotFound, ['"' + sSearchText + '"'])); end; except on E: Exception do msgError(E.Message); end; end; procedure TfrmEditor.ShowSearchReplaceDialog(AReplace: boolean); var dlg: TfrmEditSearchReplace; begin // Statusbar.SimpleText := ''; dlg := TfrmEditSearchReplace.Create(Self, AReplace); with dlg do try // assign search options SearchBackwards := bSearchBackwards; SearchCaseSensitive := bSearchCaseSensitive; SearchFromCursor := bSearchFromCaret; SearchInSelectionOnly := bSearchSelectionOnly; // start with last search text SearchText := sSearchText; { if fSearchTextAtCaret then begin} // if something is selected search for that text if Editor.SelAvail and (Editor.BlockBegin.Y = Editor.BlockEnd.Y) then SearchText := Editor.SelText else SearchText := Editor.GetWordAtRowCol(Editor.CaretXY); // end; SearchTextHistory := glsSearchHistory.Text; if AReplace then with dlg as TfrmEditSearchReplace do begin ReplaceText := sReplaceText; ReplaceTextHistory := glsReplaceHistory.Text; end; SearchWholeWords := bSearchWholeWords; if ShowModal = mrOK then begin bSearchBackwards := SearchBackwards; bSearchCaseSensitive := SearchCaseSensitive; bSearchFromCaret := SearchFromCursor; bSearchSelectionOnly := SearchInSelectionOnly; bSearchWholeWords := SearchWholeWords; bSearchRegExp := SearchRegExp; sSearchText := SearchText; glsSearchHistory.Text := SearchTextHistory; if AReplace then with dlg as TfrmEditSearchReplace do begin sReplaceText := ReplaceText; glsReplaceHistory.Text := ReplaceTextHistory; end; // bSearchFromCaret := gbSearchFromCaret; if sSearchText <> '' then begin DoSearchReplaceText(AReplace, bSearchBackwards); bSearchFromCaret:= True; gFirstTextSearch:= False; end; end; finally FreeAndNil(dlg); end; end; procedure TfrmEditor.actEditFindExecute(Sender: TObject); begin ShowSearchReplaceDialog(False); end; procedure TfrmEditor.actEditRplcExecute(Sender: TObject); begin ShowSearchReplaceDialog(True); end; procedure TfrmEditor.actSave2Execute(Sender: TObject); begin inherited; actFileSave.Execute; end; procedure TfrmEditor.actConfHighExecute(Sender: TObject); begin ShowOptions(TfrmOptionsEditor); end; procedure TfrmEditor.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin end; procedure TfrmEditor.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); begin end; procedure TfrmEditor.frmEditorClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:=caFree; end; procedure TfrmEditor.ChooseEncoding(mnuMenuItem: TMenuItem; sEncoding: String); var I: Integer; begin sEncoding:= NormalizeEncoding(sEncoding); for I:= 0 to mnuMenuItem.Count - 1 do if SameText(NormalizeEncoding(mnuMenuItem.Items[I].Caption), sEncoding) then mnuMenuItem.Items[I].Checked:= True; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdiffer.lfm���������������������������������������������������������������������0000644�0001750�0000144�00000463444�12263227030�015425� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmDiffer: TfrmDiffer Left = 200 Height = 370 Top = 140 Width = 760 Caption = 'Compare files' ClientHeight = 350 ClientWidth = 760 Menu = MainMenu OnClose = FormClose OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnResize = FormResize SessionProperties = 'actAutoCompare.Checked;actIgnoreCase.Checked;actIgnoreWhiteSpace.Checked;actKeepScrolling.Checked;actLineDifferences.Checked;actPaintBackground.Checked;Height;Left;Top;Width;WindowState' ShowHint = True ShowInTaskBar = stAlways LCLVersion = '1.0.1.3' object ToolBar: TToolBar Left = 0 Height = 22 Top = 0 Width = 760 AutoSize = True ButtonHeight = 20 ButtonWidth = 20 Images = ImageList ParentShowHint = False ShowHint = True TabOrder = 0 object btnSave: TToolButton Left = 21 Top = 2 Action = actSave end object btnSaveAs: TToolButton Left = 41 Top = 2 Action = actSaveAs end object Divider1: TToolButton Left = 61 Top = 2 Width = 4 Style = tbsDivider end object btnCompare: TToolButton Left = 65 Top = 2 Action = actStartCompare end object btnLast: TToolButton Left = 153 Top = 2 Action = actLastDifference end object btnNext: TToolButton Left = 109 Top = 2 Action = actNextDifference end object btnPrev: TToolButton Left = 129 Top = 2 Action = actPrevDifference end object btnFirst: TToolButton Left = 173 Top = 2 Action = actFirstDifference end object Divider2: TToolButton Left = 105 Top = 2 Width = 4 Style = tbsDivider end object Divider3: TToolButton Left = 149 Top = 2 Width = 4 Style = tbsDivider end object btnCancelCompare: TToolButton Left = 85 Top = 2 Action = actCancelCompare end object Divider4: TToolButton Left = 193 Top = 2 Width = 4 Style = tbsDivider end object btnReload: TToolButton Left = 1 Top = 2 Action = actReload end object btnCopyRightToLeft: TToolButton Left = 197 Top = 2 Action = actCopyRightToLeft end object btnCopyLeftToRight: TToolButton Left = 217 Top = 2 Action = actCopyLeftToRight end object Divider5: TToolButton Left = 237 Top = 2 Width = 8 Style = tbsSeparator end end object pnlLeft: TPanel Left = 0 Height = 305 Top = 22 Width = 379 Align = alLeft BevelOuter = bvNone ClientHeight = 305 ClientWidth = 379 TabOrder = 1 object pnlLeftBox: TPanel Left = 0 Height = 22 Top = 0 Width = 379 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 22 ClientWidth = 379 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameLeft: TFileNameEdit AnchorSideLeft.Control = btnLeftEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 21 Top = 0 Width = 285 OnAcceptFileName = edtFileNameLeftAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object btnLeftEncoding: TSpeedButton AnchorSideLeft.Control = btnLeftSaveAs AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftBox AnchorSideBottom.Control = edtFileNameLeft AnchorSideBottom.Side = asrBottom Left = 46 Height = 21 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00858A8802858A8808858A8808858A8808858A8808858A8808858A8808858A 8808858A8808858A8808858A8808858A8803FFFFFF00FFFFFF00FFFFFF00858A 8851868B89EF858A88FC858A88FC858A88FC858A88FC858A88FC858A88FC858A 88FC858A88FC858A88FC858A88FC868B89F4868C896AFFFFFF00FFFFFF00888D 8BD9C8CCCBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DD DBFFD9DDDBFFD9DDDBFFD9DDDBFFCBCFCEFF868B89F3FFFFFF00FFFFFF00878C 8AECD5D8D7FFB7BEBBFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB7BEBBFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFBAC0BEFFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3 C0FFBCC3C0FFBCC3C0FFBAC0BEFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF4F5F5FFF5F7F7FFF5F8F7FFF6F8F8FFF6F8F8FFF6F8F8FFF6F8 F8FFF6F8F8FFF6F8F8FFF4F5F5FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF3F4F4FFE2E7E4FFE5EAE7FFE8ECEAFFEBEFECFF969997FF7678 77FF7E807FFFE0E4E2FFF3F4F4FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D9D7FFEBEEEDFFE1E6E4FFE4E9E6FFE7EBE8FFE9EDEBFF3B3C3CFFE3E6 E4FF2B2C2CFFD8DDDAFFEBEEEEFFDBDEDDFF858A88FFFFFFFF00FFFFFF00878C 8AECD9DDDBFFE5E7E7FFE0E5E2FFE2E7E4FFE4E9E6FFE6EAE8FF9A9C9BFF696C 6AFF232323FFD7DBD9FFE5E7E7FFE0E3E2FF858A88FFFFFFFF00FFFFFF00888D 8BECDDE0DFFFE0E3E3FFDDE3E0FFE0E5E2FFE1E7E4FFE3E8E5FF9C9F9DFF6E71 6FFF393B3AFFE2E7E4FFE0E3E3FFE5E7E7FF858A88FFFFFFFF00FFFFFF00888D 8BECE0E3E2FFD9DDDDFFDBE1DEFFDDE3E0FFDEE4E1FFE0E5E2FFDCE2DFFFBABF BCFFD5DAD7FFDFE4E1FFD9DDDDFFE9EBEBFF858A88FFFFFFFF00FFFFFF00888D 8BECE3E5E4FFD5D9D9FFD8DFDBFFDAE0DDFFDBE1DEFFDCE2DFFFDDE2DFFF6B6D 6CFF515453FFDBE2DEFFD5D9D9FFEDEEEEFF858A88FFFFFFFF00FFFFFF00888D 8BECE4E7E5FFD7DBDBFFD7DADAFFD8DCDBFFD8DCDBFFD8DCDBFFD8DDDCFFD8DD DCFFD8DCDBFFD8DCDBFFD9DDDCFFEFF0F0FF858A88FFFFFFFF00FFFFFF008A8E 8CD7D4D7D6FFECEEEDFFEEF0EFFFF1F2F2FFF3F4F4FFF5F6F6FFF7F7F7FFF7F7 F7FFF5F6F6FFF3F4F4FFF1F2F2FFDEE0E0FF888C8AF1FFFFFF00FFFFFF00858A 8849888D8BEB858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF878C8AF1878C8A61FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnLeftEncodingClick end object btnLeftSave: TSpeedButton AnchorSideLeft.Control = pnlLeftBox AnchorSideTop.Control = pnlLeftBox Left = 0 Height = 22 Top = 0 Width = 23 Action = actSaveLeft Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end object btnLeftSaveAs: TSpeedButton AnchorSideLeft.Control = btnLeftSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlLeftBox Left = 23 Height = 22 Top = 0 Width = 23 Action = actSaveLeftAs Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000004864725A3654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end end end object Splitter: TSplitter Left = 379 Height = 305 Top = 22 Width = 5 end object pnlRight: TPanel Left = 384 Height = 305 Top = 22 Width = 376 Align = alClient BevelOuter = bvNone ClientHeight = 305 ClientWidth = 376 TabOrder = 3 object pnlRightBox: TPanel Left = 0 Height = 22 Top = 0 Width = 376 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 22 ClientWidth = 376 FullRepaint = False ParentShowHint = False ShowHint = True TabOrder = 0 object edtFileNameRight: TFileNameEdit AnchorSideLeft.Control = btnRightEncoding AnchorSideLeft.Side = asrBottom Left = 69 Height = 21 Top = 0 Width = 282 OnAcceptFileName = edtFileNameRightAcceptFileName DialogOptions = [] FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object btnRightEncoding: TSpeedButton AnchorSideLeft.Control = btnRightSaveAs AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightBox AnchorSideBottom.Control = edtFileNameRight AnchorSideBottom.Side = asrBottom Left = 46 Height = 21 Hint = 'Encoding' Top = 0 Width = 23 Anchors = [akTop, akLeft, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00858A8802858A8808858A8808858A8808858A8808858A8808858A8808858A 8808858A8808858A8808858A8808858A8803FFFFFF00FFFFFF00FFFFFF00858A 8851868B89EF858A88FC858A88FC858A88FC858A88FC858A88FC858A88FC858A 88FC858A88FC858A88FC858A88FC868B89F4868C896AFFFFFF00FFFFFF00888D 8BD9C8CCCBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DDDBFFD9DD DBFFD9DDDBFFD9DDDBFFD9DDDBFFCBCFCEFF868B89F3FFFFFF00FFFFFF00878C 8AECD5D8D7FFB7BEBBFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB7BEBBFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFBAC0BEFFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3C0FFBCC3 C0FFBCC3C0FFBCC3C0FFBAC0BEFFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF4F5F5FFF5F7F7FFF5F8F7FFF6F8F8FFF6F8F8FFF6F8F8FFF6F8 F8FFF6F8F8FFF6F8F8FFF4F5F5FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D8D7FFF3F4F4FFE2E7E4FFE5EAE7FFE8ECEAFFEBEFECFF969997FF7678 77FF7E807FFFE0E4E2FFF3F4F4FFD8DCDBFF858A88FFFFFFFF00FFFFFF00878C 8AECD5D9D7FFEBEEEDFFE1E6E4FFE4E9E6FFE7EBE8FFE9EDEBFF3B3C3CFFE3E6 E4FF2B2C2CFFD8DDDAFFEBEEEEFFDBDEDDFF858A88FFFFFFFF00FFFFFF00878C 8AECD9DDDBFFE5E7E7FFE0E5E2FFE2E7E4FFE4E9E6FFE6EAE8FF9A9C9BFF696C 6AFF232323FFD7DBD9FFE5E7E7FFE0E3E2FF858A88FFFFFFFF00FFFFFF00888D 8BECDDE0DFFFE0E3E3FFDDE3E0FFE0E5E2FFE1E7E4FFE3E8E5FF9C9F9DFF6E71 6FFF393B3AFFE2E7E4FFE0E3E3FFE5E7E7FF858A88FFFFFFFF00FFFFFF00888D 8BECE0E3E2FFD9DDDDFFDBE1DEFFDDE3E0FFDEE4E1FFE0E5E2FFDCE2DFFFBABF BCFFD5DAD7FFDFE4E1FFD9DDDDFFE9EBEBFF858A88FFFFFFFF00FFFFFF00888D 8BECE3E5E4FFD5D9D9FFD8DFDBFFDAE0DDFFDBE1DEFFDCE2DFFFDDE2DFFF6B6D 6CFF515453FFDBE2DEFFD5D9D9FFEDEEEEFF858A88FFFFFFFF00FFFFFF00888D 8BECE4E7E5FFD7DBDBFFD7DADAFFD8DCDBFFD8DCDBFFD8DCDBFFD8DDDCFFD8DD DCFFD8DCDBFFD8DCDBFFD9DDDCFFEFF0F0FF858A88FFFFFFFF00FFFFFF008A8E 8CD7D4D7D6FFECEEEDFFEEF0EFFFF1F2F2FFF3F4F4FFF5F6F6FFF7F7F7FFF7F7 F7FFF5F6F6FFF3F4F4FFF1F2F2FFDEE0E0FF888C8AF1FFFFFF00FFFFFF00858A 8849888D8BEB858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF878C8AF1878C8A61FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnRightEncodingClick end object btnRightSave: TSpeedButton AnchorSideLeft.Control = pnlRightBox AnchorSideTop.Control = pnlRightBox Left = 0 Height = 22 Top = 0 Width = 23 Action = actSaveRight Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end object btnRightSaveAs: TSpeedButton AnchorSideLeft.Control = btnRightSave AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlRightBox Left = 23 Height = 22 Top = 0 Width = 23 Action = actSaveRightAs Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000004864725A3654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } NumGlyphs = 0 ShowCaption = False end end end object StatusBar: TStatusBar Left = 0 Height = 23 Top = 327 Width = 760 Panels = < item Width = 100 end item Width = 100 end item Width = 100 end item Width = 100 end> SimplePanel = False end object MainMenu: TMainMenu Images = ImageList left = 72 top = 136 object mnuFile: TMenuItem Caption = '&File' object miOpenLeft: TMenuItem Action = actOpenLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8002D88 D8F72D87D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F72C86D800FFFFFF00FFFFFF00338ED9FBDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7 F3FF74D5F3FF70D3F2FFC2EAF8FF3594DAFFFFFFFF00FFFFFF003594DAF7EFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8 F4FF4DD4F3FF40D1F2FFCAF2FBFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDC F6FF5ED9F4FF4FD5F3FFCCF2FBFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CE D7FF8CC8CFFF86C1C6FFC9D8D6FF3594DAFFC57444E8CA7F53F137A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5 F5FF9EE5F5FF9FE5F4FFDAF3F8FF3594DAFFFDF4EEFFCA8054F935ABDAFAE8F6 FBFF70BCE7FF55AAE2FF4DA5E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFD FCFFFEFDFCFFFEFCFBFFFEFEFDFF3594DAFFEFF2E8FFCE8156FF36AADAF2F1FA FDFF94DEF5FF93DCF4FF64BCE9FF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFBF6EFFFCC8355FE35AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEA DBFFFFE9D9FFFFE7D7FFFFE5D2FFFFE2CBFFFFF7F1FFCB8555FE36B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7 D6FFFDE6D4FFFCE4D0FFFBE3CBFFFADCC2FFFEF3E8FFCC8656FE34B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7 D5FFFDE5D1FFFAE0CAFFF9DEC4FFF7D9BCFFFDF2E7FFCC8757FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4 D1FFFBE2CCFFF9DDC4FFF6D7BBFFF3D1AFFFFAEFE4FFCC8758FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3 CDFFFADFC8FFF7D9BCFFF5E9DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0 C7FFF9DCC2FFF5D3B4FFFEF9F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3 EAFFFCF2E8FFFAEFE3FFFAF2E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB 92FFD1A06CF5D09E6DF6CC965FDAC479427EB2673C09FFFFFF00 } OnClick = actOpenLeftExecute end object miOpenRight: TMenuItem Action = actOpenRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8002D88 D8F72D87D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F72C86D800FFFFFF00FFFFFF00338ED9FBDCF0 FAFF98E1F6FF95E0F6FF92DFF6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7 F3FF74D5F3FF70D3F2FFC2EAF8FF3594DAFFFFFFFF00FFFFFF003594DAF7EFFA FEFF93E5F8FF8FE4F8FF89E3F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8 F4FF4DD4F3FF40D1F2FFCAF2FBFF3594DAFFFFFFFF00FFFFFF00369ADAF8F2FA FDFF94E6F8FF92E5F8FF90E5F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDC F6FF5ED9F4FF4FD5F3FFCCF2FBFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFF94E5F8FF93E5F8FF93E5F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CE D7FF8CC8CFFF86C1C6FFC9D8D6FF3594DAFFC57444E8CA7F53F137A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF5FCFFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5 F5FF9EE5F5FF9FE5F4FFDAF3F8FF3594DAFFFDF4EEFFCA8054F935ABDAFAE8F6 FBFF70BCE7FF55AAE2FF4DA5E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFD FCFFFEFDFCFFFEFCFBFFFEFEFDFF3594DAFFEFF2E8FFCE8156FF36AADAF2F1FA FDFF94DEF5FF93DCF4FF64BCE9FF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFBF6EFFFCC8355FE35AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEA DBFFFFE9D9FFFFE7D7FFFFE5D2FFFFE2CBFFFFF7F1FFCB8555FE36B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7 D6FFFDE6D4FFFCE4D0FFFBE3CBFFFADCC2FFFEF3E8FFCC8656FE34B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7 D5FFFDE5D1FFFAE0CAFFF9DEC4FFF7D9BCFFFDF2E7FFCC8757FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4 D1FFFBE2CCFFF9DDC4FFF6D7BBFFF3D1AFFFFAEFE4FFCC8758FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3 CDFFFADFC8FFF7D9BCFFF5E9DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0 C7FFF9DCC2FFF5D3B4FFFEF9F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3 EAFFFCF2E8FFFAEFE3FFFAF2E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB 92FFD1A06CF5D09E6DF6CC965FDAC479427EB2673C09FFFFFF00 } OnClick = actOpenRightExecute end object miReload: TMenuItem Action = actReload Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00A465 34A2A4653401FFFFFF00FFFFFF00A4653405A4653453A76A3ABEA66938E9A466 35FAA76A3AE4A76B3BAAA4653424FFFFFF00FFFFFF00FFFFFF00FFFFFF00A465 34FFA5673693FFFFFF00A4653454A66737EEB58055F3CEA684FFD8B697FFDBB9 99FFD3AC8AFFC2946DFCA66838F6A466355BFFFFFF00FFFFFF00FFFFFF00A567 37FEB7845BF7A56736D4B17A4EF4E3CAB4FFECDAC9FFE7D1BCFFE3C9B0FFDEBE A0FFD2AB88FFCEA582FFD3AE8EFFA66838F5A465342AFFFFFF00FFFFFF00A668 38FDF1E4D8FFD4B295FEF4E9E0FFF3E8DDFFEDDCCCFFD2AD8FFEB0784CF5A566 35FBA66939FFA66939FEA96D3DFFB0784CFFA76A3AA8FFFFFF00FFFFFF00A567 37FDF6EEE6FFF5ECE3FFF5EDE4FFE6D2C1FFB0794DF5A66938CAA4653436FFFF FF00A465346AA96B3CEDB67C4FFFA76A3AFEA56837FAFFFFFF00FFFFFF00A466 35FCF6EEE6FFEBD7C4FFEAD9C9FFA46534FEA465346AFFFFFF00FFFFFF00FFFF FF00A465340BA56635E9C9956C8DB77F53C2A46534FFA4653405FFFFFF00A465 34FCF5EDE5FFF6EDE5FFF5ECE4FFD7B79CFDA66837E0A4653410FFFFFF00FFFF FF00FFFFFF00FFFFFF00D5A47E1ACD997239A46534FCA465340CFFFFFF00A465 34F9A46534FEA46534FEA46534FDA46534FCA46534FBA46534B9A465341DA465 3418A4653418A4653418A4653418A4653418A465341CFFFFFF00FFFFFF00A465 340DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00A46534A0A465 34FFAD7447F8AF774CF7AF774CF7AF784CF7A46534FFA4653408FFFFFF00A465 34FCB3794C7ECF9D762BBB835713A4653402FFFFFF00FFFFFF00A4653404A668 38C4D0AC8FFAF6EEE7FFF2E6DBFFF6EEE6FFA66A3AFBA4653409FFFFFF00A465 35FEA76A3AFBC791689DA56737E6A4653423FFFFFF00FFFFFF00FFFFFF00A465 3460A46635FFE9D7C7FFEBD8C6FFF5ECE3FFA66A3AFAA465340AFFFFFF00A668 38F3AB7041FFA96C3CFEA76A3AF5A4653475A4653419A4653445A66938CDB988 61F5EBDBCDFFF5EBE2FFF6EEE6FFF6EEE6FFA76A3AFAA465340BFFFFFF00A769 399BC09069FDC59872FFA86B3CFFA46635FFA76A3AFCB7855DF3D9BBA1FEF1E4 D8FFF2E6DBFFF3E8DDFFCEA788FDEAD8C8FFA76A3AF9A465340DFFFFFF00A465 3429A66939F5D3AD8CFFDCBD9DFFDDBEA1FFE5CBB4FFE9D3BFFFEEDDCCFFF0E2 D5FFE7D2BFFFAF774BF5A56736C0AB7143F7A46635FCA465340EFFFFFF00FFFF FF00A4653550A66838F6C09068FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB987 5FF4A56737F0A4653458FFFFFF00A4663566A46534FFA465340FFFFFFF00FFFF FF00FFFFFF00A465341DA7693A9FA76A3ADEA56736F6A76939E5A76A3ABCA465 3453A4653405FFFFFF00FFFFFF00FFFFFF00A4653479A4653410 } end object miDivider7: TMenuItem Caption = '-' end object miSaveLeft: TMenuItem Action = actSaveLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miSaveRight: TMenuItem Action = actSaveRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF001F1F 252F1D1D1FEC1C1B1EFF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF002222 24ED2A2A2DFF323135FF8B8A8BFF29282BFF201F21FF909090FF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF002524 26FF39383BFF39383BFF999999FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF002A29 2BFF403F42FF403F42FFA7A7A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF464549FF464549FFCDCDCDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6 D6FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFE8DDD0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DB CFFFE6DBCEFFE6DACDFFE6DACFFF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A1 8AFFB7A08AFFB6A089FFEDE5DCFF565557FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1 EDFFF5F0EBFFF4EFE9FFF3EDE7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7 F5FFF9F6F4FFF8F4F2FFF9F6F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB7 9DFFD0B79EFFD0B89FFFFEFDFDFF616062FF3F3E40FFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6 F3FFFCF8F5FFFCF9F7FFFDFBF9FF646365FF414042FFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8 B6FFBCB9B7FFBCB9B8FFBCB9B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miSaveLeftAs: TMenuItem Action = actSaveLeftAs Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000486472003654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } OnClick = actSaveLeftAsExecute end object miSaveRightAs: TMenuItem Action = actSaveRightAs Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000486472003654 6523FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006279867E3642 46FF44778DFB252D34FF757575FF787878FF787878FF787878FF787878FF7878 78FF787878FF1A191BFF19191BFF1D1C1FFF1F1F21EFFFFFFF00567181049DBC CAFF7AB8CCFF3C92AEFF1F6E89FF161517FF181719FF8A8A8AFF909090FF9090 90FF909090FF343336FF201F21FF4E4D51FF212023FFFFFFFF00FFFFFF0088A1 AFFFB0CAD6FF2C3A3EFF0B96C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F 9FFF9F9F9FFF3F3E41FF252426FF58575AFF252426FFFFFFFF00FFFFFF004E60 6CFF2C9ABDFF242C2FFF213136FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAE AEFFAEAEAEFF414042FF272728FF444346FF2A292BFFFFFFFF00FFFFFF002E2D 30FF298FB2FF1695BDFF252829FF18343DFF0EADDFFF2E5E6CFF424242FF9595 95FFD3D3D3FF272629FF242326FF464549FF2E2D30FFFFFFFF00FFFFFF003130 32FF494B4FFF46ADCEFF1582A5FF262626FF0E3845FF0CABDDFF173641FF1D1C 1DFF3D3D3FFF4B4A4DFF4B4A4DFF4B4A4DFF313032FFFFFFFF00FFFFFF003333 35FF4F4E51FF4A5156FF67C6E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F 36FF252426FF484749FF4F4E51FF4F4E51FF333335FFFFFFFF00FFFFFF003635 37FF535254FFE8DED4FFCCD0C9FF84DCF7FF54808CFF252525FF12617AFF1CA6 D1FF666867FF827B74FFDDD1C7FF535254FF363537FFFFFFFF00FFFFFF003837 39FF565557FFF1EAE2FFB8A28BFF979D92FF71D8F7FF34565FFF1D1D1DFF1173 90FF2199BCFF5E5449FF9F9A94FF555456FF383739FFFFFFFF00FFFFFF003B3A 3BFF5A595BFFF7F3EEFFF7F3EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF1518 19FF178BB0FF3DA2C1FF8F8B88FF464546FF3B3A3BFFFFFFFF00FFFFFF003D3C 3DFF5D5C5EFFFDFCFBFFFBF9F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF2736 3BFF0E171AFF1598C1FF57A6BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003F3E 40FF616062FFFDFAF9FFCFB69CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3 DBFF242B2DFF0B1C21FF11A0CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF004140 42FF59595AFFFAF4F1FFFAF4F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6 E9FF36AFD4FF1E2020FF1D2B85FF05079AFF3A394FFFFFFFFF00FFFFFF004B4B 4CEF444344FFB9B4B3FFB9B4B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6 B5FF34B6DEFF446AC0FF1B1BCEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00186FAB174345D3D63A3ACFB25353D418FFFFFF00FFFFFF00 } OnClick = actSaveRightAsExecute end object miDivider6: TMenuItem Caption = '-' end object miExit: TMenuItem Action = actExit Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00B7B7 B7FFAEAEAEFF3071A9FF2C6EA6FF286BA3FF2468A0FF21669EFF1D639BFF1A61 99FF175F97FF145C94FF115B93FF6C6C6CFF6C6C6CFFFFFFFF00FFFFFF00FFFF FF00FFFFFF003675ADFF86B6D8FF83B3D7FF81B2D6FF7DAFD5FF7BADD4FF79AB D3FF76AAD2FF74A8D1FF155D95FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF003C79B1FF8BB9DAFF66A2CEFF62A0CDFF5F9DCBFF5B9AC9FF5897 C8FF5495C7FF77ABD3FF196098FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00427DB5FF8FBDDCFF6CA7D0FF67A4CFFF64A1CDFF609ECCFF5C9B CAFF5999C9FF7BADD4FF1E649CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF004882BAFF93C0DDFF71ABD2FF6DA8D1FF69A5CFFF66A2CEFF629F CCFF5E9CCBFF7FB0D5FF23679FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF004E86BEFF98C3DFFF77AFD5FF73ACD3FF6FA9D2FF6BA7D0FF5BB7 E3FF54C2EDFF81B4D7FF286BA3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00538AC2FF9CC6E1FF7CB3D7FF79B1D5FF75ADD4FF71ABD2FF5FBA E4FF4BD4FFFF7CBBE0FF2E6FA7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00598EC6FFA0C9E3FF82B8D9FF7EB5D8FF7AB2D6FF77AFD5FF73AC D3FF6DABD4FF8CBADAFF3373ABFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF005E91C9FFA4CCE4FF87BBDBFF84B9DAFF80B6D8FF7CB3D7FF79B0 D5FF74ADD4FF8FBDDCFF3977AFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006395CDFFA8CFE5FF8CBFDDFF88BDDCFF85BADBFF81B7D9FF7EB4 D7FF7AB2D6FF94C1DDFF3F7CB4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006798D0FFABD1E7FF90C2DFFF8DC0DEFF8ABEDCFF87BBDBFF83B8 DAFF80B6D8FF99C4E0FF4580B8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006B9BD3FFAED4E8FFABD3E8FFAAD1E7FFA8CFE5FFA5CDE4FFA2CB E4FFA0C9E2FF9DC7E1FF4B84BCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF006E9DD5FF6C9BD3FF699AD2FF6697CFFF6395CDFF6093CBFF5C90 C8FF598EC6FF558BC3FF5188C0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end end object mnuEdit: TMenuItem Caption = '&Edit' object miEditUndo: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000018A6C3691AA7C46900A0C4180000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000A0C45D66DBEAB211A6C2AE0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000A0C42243C4DBFC43C5D8FE23A6C07F00000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFE5DDAE9FE23A6C0EF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 000000000000009EC11A02ACC8FF88E7F2FE11A2C2FF00000000000000000000 00000000000005797D1100A0C4FF76EDFBFF00A0C4FF000000000000000000A0 C4300099B95000A0C4C96DE6F5FF76E2EFFF19A3C1FF00000000000000000000 000005797D1100A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0F800000000000000000579 7D1100A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFF40000000005797E1100A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5F815A0BCCB0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDCA05797D0A0000000005797D0A00A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FE13A3C1E405797D320000000000000000000000000579 7D1100A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7F814A1BCD414A3C1D505797D1C000000000000000000000000000000000000 000005797D1100A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEE7159F BBCF1BA1BBA4067A7C0B00000000000000000000000000000000000000000000 00000000000005797D1100A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000009DBF1400A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miEditRedo: TMenuItem Action = actEditRedo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000069A4E20069A4E6A069A4E5B069A4E1D04A8B70404A8B803000000000000 000000000000000000000000000000000000000000000000000000000000069A 4E5E0FA85A862CD6C09602999A8C069A4E0C0000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EC123C7AFC6059D91CE069A4E48000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF3ADDB8F5069A4EFE0000000000000000000000000000000000000000069A 4EFF069A4E33000000000000000000000000000000000000000000000000069A 4EFF37D9B3FD069A4EFF069A4E4800000000000000000000000000000000069A 4EFF069A4EFF069A4E330000000000000000000000000000000000000000069A 4EFF46E2BEFF05A699FF069A4EF1069A4E73069A4E300000000000000000069A 4EFF34E28AFF069A4EFF069A4E41000000000000000000000000000000000A9D 52F164ECB2FF24D6CDFF0BA193FE069A4EFF069A4EFF069A4EFF069A4EFF069A 4EFF1ED4CCFF34E28AFF069A4EFF069A4E410000000000000000000000000C9F 55DA63E9B1FF31E0BAFF17D4CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DA A1FF23DED9FF16D273FF34E28AFF069A4EFF069A4E410000000000000000069A 4E9E30C29DEA60EDB1FF26DFA5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D2 73FF16D273FF16D273FF16D273FF34E28AFF069A4EFF069A4E4100000000069A 4E2B069A4EBA46D8A9FF65EFB1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7 AFFF16D273FF16D273FF16D273FF18D375FF6CF3AEFF069A4EFF000000000000 0000069A4E4A069A4EC845D9ACFD67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DB A0FF24DBA0FF16D273FF16D273FF6CF3AEFF069A4EFF0084773B000000000000 000000000000069A4E36069A4EB10C9B8FC449DEA9DD6AF1AEFF6BF2AEFF73F5 B3FF61EFA6FF16D273FF6CF3AEFF069A4EFF069A4E4100000000000000000000 00000000000000000000069A4E07069A4E46069A4E9E069A4ECF069A4EFF069A 4EFF6CF3AEFF6CF3AEFF069A4EFF069A4E410000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF6CF3AEFF069A4EFF069A4E41000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF069A4EFF069A4E4300000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000069A 4EFF069A4E330000000000000000000000000000000000000000 } OnClick = actEditRedoExecute end object miDivider8: TMenuItem Caption = '-' end object miEditCut: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000001A1A AF5C0E0EAAE71010ABF41616ABF71A1AAF330000000000000000000000000000 00001A1AAF5C0D0DAAC30B0BAAEE0B0BA9E21A1AAF3300000000000000001313 ABDF2727DBFD1F1FD0F91D1DCEFD0707A8E61A1AAF3300000000000000001A1A AF330808AAE92222D4FD1D1DCFF91D1DCEFD1313ABE900000000000000000D0D ABF91D1DCFFA000000000B0BB5902121D3FD0C0CAAD500000000000000000909 AACB2323D6FD0D0DB895000000001F1FD1FB1111ABFA00000000000000001414 ABE62323D5FD0303A87A000000001D1DCEF50A0AA9FC00000000000000000303 A8FD1A1BCAF2000000000202A7772020D1FD1414ABE600000000000000001A1A AF5C0606A8FE1F1FD0FB0303A8B81415C0F80101A6FF00000000000AA00E1C1D CDFD1315C0F90303A8B71D1DCDFA0606A7FE1A1AAF7D00000000000000000000 00001919AE7D0707A9FD2020D2FD1E1ECEFE0E0FB7FD0205A4A40304A8FC1A1A C9FF2020D1FD1F1FCBFD0A0AA9FD1919AE5D0000000000000000000000000000 000000000000000000001818AE8D1616ABF30606A6FF454AA3FE0202A6FF191A C7FF1717ADF01818AE8900000000000000000000000000000000000000000000 0000000000000000000000000000888D8B5C848989FFC3C6C5FFAFB2B3FF2C2F 9CF5888D8B330000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DA1B7BBBAFDE6E8E7FFA7ACAAFF8B90 8EFE878C8A970000000000000000000000000000000000000000000000000000 00000000000000000000888D8B33888D8BFEDFE1E1FFF5F6F5FD979C9AFFA5A9 A8FF888D8BF7888D8B3300000000000000000000000000000000000000000000 000000000000000000008A8F8DE1B2B6B5FFF7F7F7FF888D8BF29CA09FFEB3B6 B5FFB5BAB8FD888D8BB200000000000000000000000000000000000000000000 000000000000878C8A39888D8BFFD9DCDBFFEFF0EFFE8E9391BD898E8C99B3B8 B6FFCBCECDFF888D8BFD888D8B7D000000000000000000000000000000000000 0000000000008A8F8DF3B0B5B3FFF6F7F7FE888D8BD79297957D000000008B90 8EFAC9CECCFFABAFAEFD888D8BD4000000000000000000000000000000000000 000000000000888D8BFED0D4D2FFEFF0EFFD8F9492AC0000000000000000878C 8A3FA7ACAAFFC3C8C6FF8A8F8DF7000000000000000000000000000000000000 0000000000008B908EF6F7F7F7FD888D8BB79297957D00000000000000000000 00008D9190E6D0D3D2FE8C918FBF000000000000000000000000000000000000 000000000000888D8B48888D8BEC909593D50000000000000000000000000000 0000888D8B978C918FEE00000000000000000000000000000000 } OnClick = actEditCutExecute end object miEditCopy: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CA3868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88BF858A887F0000000000000000000000000000 00000000000000000000868B89FBF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF858A887F00000000000000000000 00000000000000000000868B89FBF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88CC8B908F50868B 897F868B897F868B897F868B89FDFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF868B897DF2F3 F37FF3F4F47FF2F2F27F878C8AFDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF868B897DF9F9 F97FEBEBEB7FEAEAEA7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF868B897DFEFE FE7FECECEC7FC3C4C47F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF868B897DFFFF FF7FEDEEEE7FECEDED7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEEEFEF7FC5C6C67F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FEEEFEF7F878C8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FC7C8C87F868B89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FEFF0F07F878C8AFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF868B897DFFFF FF7FEFF0F07FC7C8C87F979B9AD0858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DAB868B897DFFFF FF7FEFF0F07FEEEFEF7FEEEFEF7FEEEFEF7FEEEFEF7FEEEFEF7FEFF0F07FEFF0 F07FFFFFFF7F858A887F00000000000000000000000000000000868B897DFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7F858A887F000000000000000000000000000000008A8F8D4F858A 887F858A887F858A887F858A887F858A887F858A887F858A887F858A887F858A 887F858A887F89918E5300000000000000000000000000000000 } OnClick = actEditCopyExecute end object miEditPaste: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000143 6B6401436CEE01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BED00426A5D0000000000426A040143 6CF3237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BF000426A0200426A100245 6EF82687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFC00426A0800426A100245 6EF82687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFC00426A0800426A100245 6EF82687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6EF82687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFC00426A0800426A100246 6FF82788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFC00426A0800426A040144 6DF32484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CF000426A02000000000144 6C6401446DEE01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CED00436B5D00000000000000000000 000000000000000000005C5C5C015E5F5FBB5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FBB5C5C5C0100000000000000000000000000000000 } OnClick = actEditPasteExecute end object miEditDelete: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8F99919493FFADB0AFFF0000000000000000909492FF9DA09FFD989C9AE50000 000000000000A5A8A7677B7E7DC9989B9AA40000000000000000000000008C90 8FFDFAFAFAFF949897F9999C9BD6999C9BEF969A98FFEDEEEEF1949997CB9B9E 9DFF989B9AFF8B8E8DFFFFFFFFDE8F9392BC0000000000000000000000008C90 8F99858988ECF6F6F6FB999C9BFFABADACFF838885E7DEDFDEED9C9F9EC6CCCE CDDB989B9AFFEBEBEBF0969998E6959797670000000000000000000000000000 0000858988EFC9CBCAA2838885E8C4C4C4E9838885F0CACCCBEB9B9D9CE8C0C0 C0DF7C807FFFE2E3E3F28B8E8DF0000000000000000000000000000000000000 0000727675FAC7C9C8EB797E7BE89E9F9EE98E8F8FF6ADAEADED8C8D8CF1AEAF AEE77C807FFFB7B8B7EB767978F5000000000000000000000000000000000000 00006A6E6DFFCCCDCDFA656968F4AAACABF96C6F6EFEAEB0AFFB6B6E6DFDB0B2 B1FA6E7271FDB2B3B3FB6C706FFD000000000000000000000000874920C0874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920C0874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF874A207F874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF874A207F000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391BF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391BF0000000000000000 } OnClick = actEditDeleteExecute end object miDivider9: TMenuItem Caption = '-' end object miEditSelectAll: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00898E 8C94858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8D94FFFFFF00FFFFFF00858A 88FEF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFEFFFFFF00FFFFFF00858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A 88FEFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFEFFFFFF00FFFFFF00898D 8B94858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8C94FFFFFF00 } OnClick = actEditSelectAllExecute end end object mnuOptions: TMenuItem Caption = '&Options' object miAutoCompare: TMenuItem Action = actAutoCompare AutoCheck = True end object miDivider10: TMenuItem Caption = '-' end object miIgnoreWhiteSpace: TMenuItem Action = actIgnoreWhiteSpace AutoCheck = True end object miIgnoreCase: TMenuItem Action = actIgnoreCase AutoCheck = True end object miDivider4: TMenuItem Caption = '-' end object miPaintBackground: TMenuItem Action = actPaintBackground AutoCheck = True OnClick = actPaintBackgroundExecute end object miLineDifferences: TMenuItem Action = actLineDifferences AutoCheck = True end object miDivider3: TMenuItem Caption = '-' end object miBinaryCompare: TMenuItem Action = actBinaryCompare AutoCheck = True OnClick = actBinaryCompareExecute end object miKeepScrolling: TMenuItem Action = actKeepScrolling AutoCheck = True OnClick = actKeepScrollingExecute end end object mnuActions: TMenuItem Caption = '&Actions' object miStartCompare: TMenuItem Action = actStartCompare Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF18844DF504763BAB04733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF7BD3A6FF36A16AF804763CE10473 3A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF81D7ABFF6CD5A0FF58C18BFE0A79 40F504743A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004743AE80473 3AFF04733AFF04733AFF04733AFF04783CF781D6ABFF11BA64FF52D392FF73D7 A5FF1E8B53F504763CAC04733A0CFFFFFF00FFFFFF00FFFFFF0004733AFF7ECA A3FF7ECAA3FF7ECAA3FF7ECCA4FF7FD1A7FF81D5AAFF0EB761FF10BF66FF34CB 7FFF78DAA8FF3EA671F904763BE104733A2DFFFFFF00FFFFFF0004733AFF7ECA A3FF069A4EFF069A4EFF069C4FFF08A454FF0BAC5AFF0DB35EFF0EB962FF0FBC 64FF1CBF6CFF67D29CFF5DBB8BFE0E7A42F504733A65FFFFFF0004733AFF7ECA A3FF069A4EFF069A4EFF069A4EFF07A052FF09A757FF0BAE5BFF0EB25FFF17B8 66FF1FBA6CFF26BA6FFF55C68DFF76C99EFF268956F504753B9D04733AFF9CD7 B9FF3BAF74FF33AC6EFF2BA968FF2FAC6BFF3DB678FF49BE82FF50C389FF4DC4 88FF49C284FF44BE80FF6DCA9BFF89CEAAFF308F5EF604753B9D04733AFFA3D9 BDFF54B985FF58BB88FF5BBC8BFF5CBD8BFF5CBE8CFF5CC18DFF5AC28DFF55C2 8AFF58C38CFF8CD4AFFF7AC39CFE147C46F504733A65FFFFFF0004733AFFA7DB C0FFAADCC2FFADDDC5FFAFDEC6FFB0DEC7FFB0DEC7FF64C191FF61C18FFF73C8 9DFF9FD9BBFF5AAB81FA05743AE104733A2DFFFFFF00FFFFFF0004743AE80473 3AFF04733AFF04733AFF04733AFF04763BF7B6E0CBFF6FC499FF91D2B1FF9CD4 B7FF318F5FF604743BAC04733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFBBE3CEFFABDCC3FF84C6A4FE107A 43F504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFB7E1CBFF5AAB82F904743AE10473 3A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF2A8C59F604743AAB04733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miCancelCompare: TMenuItem Action = actCancelCompare Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000008606000089BB000086FF000086FF000086FF000086FF0000 86FF000086FF000088CF0000860F000000000000000000000000000000000000 000000008606000089BB1A1AB1F84A4AECFF4747EDFF4343EBFF3F3FEAFF3B3B E8FF3737E7FF1818BCFB000088D8000086140000000000000000000000000000 8606000089BB1D1DB4F84C4CEBFF0F0FCCFF0000C3FF0000C1FF0000BFFF0000 BDFF0505BFFF2D2DDFFF1919BFFC000088DF0000861A00000000000086060000 89BB2121B7F85252EDFF1010D0FF0000C7FF0000C5FF0000C3FF0000C1FF0000 BFFF0000BDFF0505BEFF2C2CDFFF1B1BC4FC000088E600008620000089BC2424 B8F95A5AEFFF1111D3FF0101CBFF5858D6FF0303C7FF0000C5FF0000C3FF0101 C1FF5F5FD6FF0202BDFF0404BEFF2B2BDFFF1D1DC7FD000087EB020288FF6969 F2FF2323D5FF1F1FD2FF9292DEFFECECECFFAAAAE4FF2F2FD0FF2828CEFFA5A5 E9FFFEFEFEFF9696E3FF0000BDFF0303BDFF3434E6FF020289FF030389FF8585 F5FF2F2FD5FF2F2FD5FF5B5BD7FFDFDFE5FFECECECFFAAAAE4FFA5A5E6FFF9F9 F9FFF7F7FCFF6767DAFF1A1AC5FF0202BDFF3737E8FF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF2F2FD5FF5B5BD8FFDFDFE6FFECECECFFF1F1F1FFEDED F3FF6464DAFF2F2FCEFF2F2FCCFF2929C9FF4545E9FF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF2F2FD5FF3030D5FFACACDEFFE8E8E8FFECECECFFBCBC E8FF3131D1FF2F2FCFFF2F2FCEFF2F2FCCFF6161ECFF020289FF030389FF8888 F6FF2F2FD5FF2F2FD5FF3030D5FF9999D8FFDFDFDFFFDEDEE2FFDFDFE6FFECEC ECFFABABE6FF3131D2FF2F2FD0FF2F2FCEFF6565EDFF020289FF020288FF8989 F6FF4040DBFF2F2FD5FF9292D8FFDBDBDBFFD6D6DAFF6060D7FF5A5AD8FFE0E0 E6FFEDEDEDFFA5A5E5FF2F2FD2FF3B3BD6FF6868EEFF020288FF000089B42626 B3F78383F3FF4141DBFF5757D7FFCDCDDAFF5F5FD7FF2F2FD5FF2F2FD5FF5C5C D8FFD9D9E6FF5F5FDBFF3B3BD9FF6A6AEFFF1818B0F7000089AE33339E050000 89B22424B2F78383F3FF4242DCFF3737D5FF2F2FD5FF2F2FD5FF2F2FD5FF2F2F D5FF3737D5FF3B3BDAFF6F6FF0FF1B1BB1F7000089B13F3FA404000000003F3F A404000089B12222B1F78383F3FF4242DCFF2F2FD5FF2F2FD5FF2F2FD5FF2F2F D5FF3C3CDBFF7575F1FF1F1FB4F8000089B50000860400000000000000000000 00003F3FA404000089AF2222AFF78888F6FF8B8BF7FF8B8BF7FF8A8AF6FF8787 F6FF8383F5FF2323B8F8000089B8000086040000000000000000000000000000 0000000000003F3FA404000089AD000086FF000086FF000086FF000086FF0000 86FF000086FF000089BC00008605000000000000000000000000 } end object miDivider1: TMenuItem Caption = '-' end object miNextDiff: TMenuItem Action = actNextDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004763C9D04763C9DFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65248B56F5248B56F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0E7A42F674D1A2FF75D3A3FF0E7B 42F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04763BE15DBF8DFE4CD18DFF4ED590FF5FC5 92FE04763CE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753BAC4CAA7AFA6DD6A0FF12C469FF14CB6EFF6CE0 A5FF3FA872F904763CABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65268C57F594DBB7FF31C379FF11C067FF12C56AFF1FC9 73FF78DBA8FF1E8952F504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F690D3B1FF65CC98FF3BC27DFF0FB962FF0FBC65FF10BD 65FF32C57BFF71CE9FFF0A783FF604733A2DFFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE175BF99FE83D1A9FF52C289FF4DC387FF1EB669FF0DB45FFF0DB4 5FFF0DB35EFF4EC589FF55B784FE04753BE104733A0CFFFFFF00FFFFFF000474 3BAC4FA57AF89BD6B8FF5DBE8DFF58C08AFF51C087FF42BC7EFF0CAB5AFF0BAB 59FF0AAA59FF0CA958FF68C797FF349A65F804743BABFFFFFF0004733A652789 56F6AADBC2FFAFDEC6FFADDDC5FFAADCC2FF56BD88FF4DBA82FF1FAA63FF08A2 53FF7FCEA5FF7ECDA4FF7ECCA4FF78C79FFF18824BF504733A6504753BC50473 3AFF04733AFF04733AFF04763BF7ADDDC5FF59BC89FF50B882FF34AD6FFF069A 4EFF7ECAA3FF04763BF704733AFF04733AFF04733AFF04753BC5FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DEC7FF5DBD8CFF54B985FF47B47CFF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC7FF5FBE8DFF55BA86FF41B278FF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC8FF5FBE8DFF55BA86FF37AE71FF069A 4EFF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DEC7FFABDCC3FFA6DABFFF91D2B1FF7ECA A3FF7ECAA3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743AE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miPrevDiff: TMenuItem Action = actPrevDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743BE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA5DFC1FF81D5AAFF81D7ABFF82D9ACFF82DA ADFF82D9ADFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA9E2C5FF16B665FF0FBA63FF10BE66FF11C1 67FF83DEB0FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFADE4C8FF1FBD6DFF10BF66FF12C56AFF13C9 6DFF84E3B3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0E5CAFF31C378FF11C067FF13C86CFF15CF 71FF85E5B4FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004753BC50473 3AFF04733AFF04733AFF04783CF7B2E6CBFF4BC989FF10BD65FF11C369FF12C7 6BFF84E1B2FF057A3EF704733AFF04733AFF04733AFF04753BC504733A65288B 58F6B5E0CAFFBCE5D0FFB8E5CEFFB3E5CBFF63CD97FF19BA68FF0FBC64FF10BE 65FF83DCAFFF82DBAEFF82D9ACFF7BD3A6FF18844CF504733A65FFFFFF000474 3BAC56A97FF9B0DFC7FF77CBA0FF6CCA9AFF63CA96FF43C181FF0DB35EFF0DB5 5FFF0DB45FFF0FB25FFF6ACE9BFF359C67F804753BABFFFFFF00FFFFFF000473 3A0C04743AE180C4A1FE97D5B5FF69C596FF60C591FF56C38BFF1DB066FF0BAC 59FF0BAB59FF4DC185FF55B484FE04753BE104733A0CFFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F69CD4B7FF7AC9A0FF5ABE8BFF51BC86FF38B474FF08A3 53FF2CAF6CFF6EC397FF0A773EF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65288A57F6A0D7BBFF5FBD8CFF4DB680FF44B37AFF1AA2 5CFF71C49AFF1D844FF504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743BAC4EA578FA91D2B0FF48B47DFF3FB176FF6AC2 95FF3B9C6AF904743AABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04743AE172BD96FE72C59AFF6AC295FF5BB3 86FE04743AE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0F7941F687CAA7FF7EC7A2FF0E79 41F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65288957F5268956F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004753B9D04753B9DFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miDivider2: TMenuItem Caption = '-' end object miFirstDiff: TMenuItem Action = actFirstDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04753BE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA1DCBEFF81D3A9FF81D5AAFF81D7ACFF82D9 ADFF82DAADFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA5DEC1FF14B161FF0DB560FF0FBB63FF10BF 66FF83DEB0FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFA9E1C5FF1BB668FF0EB962FF10C067FF12C6 6BFF84E3B3FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFADE2C7FF2EBD74FF0FBA63FF11C168FF13C8 6CFF85E6B5FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004753BC50473 3AFF04733AFF04733AFF04773CF7AFE3C8FF47C384FF0EB861FF10BE66FF11C3 69FF84E1B2FF057A3EF704733AFF04733AFF04733AFF04763BC504733A65288B 58F6B3DFC9FFB9E2CDFFB5E2CBFFB1E2C9FF5FC992FF18B665FF0EB861FF0FBB 64FF83DCAFFF83DCAFFF82DBAEFF7CD5A8FF19844DF504733A65FFFFFF000474 3BAC57A97FF9B0DFC7FF75C79DFF6AC697FF60C692FF41BE7EFF0CB05CFF0DB3 5EFF0DB45FFF0FB460FF6ACF9BFF359D68F804753BABFFFFFF00FFFFFF000473 3A0C04743AE183C5A3FE99D5B6FF69C395FF5FC18FFF56C18AFF1CAE63FF0AAA 58FF0BAB59FF4DC286FF55B584FE04753BE104733A0CFFFFFF00FFFFFF00FFFF FF0004733A2D0D7840F69ED4B8FF7CCAA2FF5CBD8BFF53BB85FF37B173FF08A1 53FF2CAF6CFF6EC397FF0A773EF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65298B58F6A2D8BCFF62BE8FFF4FB782FF45B37BFF1AA2 5CFF71C49AFF1D844FF504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743BAC4FA679FA93D3B2FF4BB67FFF42B279FF6BC2 96FF3B9C6AF904743AABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0C04743AE173BD97FE74C69CFF6CC396FF5CB3 86FE04743AE104733A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A2D0F7941F689CCA9FF7FC8A2FF0E79 41F604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF } end object miLastDiff: TMenuItem Action = actLastDifference Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000004733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733A000E7A42F674D1A2FF75D3A3FF0E7B 42F604733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733A0004763BE15DBF8DFE4CD18DFF4ED590FF5FC5 92FE04763CE104733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753BAC3DA36FF969D59EFF12C469FF14CB6EFF6CE0 A5FF3FA872F904763CABFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A00238A56F578D2A5FF1CBD6BFF11C067FF12C56AFF1FC9 73FF78DBA8FF1E8952F504733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A000B773EF68FD3B0FF5BC891FF0DB45FFF0FB962FF0FBC65FF10BD 65FF32C57BFF71CE9FFF0A783FF604733A00FFFFFF00FFFFFF00FFFFFF000473 3A0004743AE173BF98FE87D2ACFF56C38CFF30BA74FF0CB15DFF0DB45FFF0DB4 5FFF0DB35EFF4EC589FF55B784FE04753BE104733A00FFFFFF00FFFFFF000474 3BAC4DA478F89ED7BAFF61C090FF5BC18DFF55C18AFF3AB978FF11AD5EFF0BAB 59FF0AAA59FF0CA958FF68C797FF349A65F804743BABFFFFFF0004733A002789 56F6ACDCC4FFB2DFC8FFB0DEC7FFACDDC4FF58BD89FF4EBB84FF43B87CFF0FA4 58FF7FCEA5FF7ECDA4FF7ECCA4FF78C79FFF18824BF504733A0004753BC50473 3AFF04733AFF04733AFF04763BF7AFDEC6FF5BBC8BFF52B884FF47B47CFF35AD 70FF7FCBA4FF04763BF704733AFF04733AFF04733AFF04753BC5FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DFC7FF5EBE8DFF54B985FF49B57DFF3EB0 76FF85CDA9FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB1DFC7FF5EBE8DFF55BA86FF4AB57EFF3FB1 76FF8ACFACFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFB0DFC7FF5DBD8CFF54B985FF49B57DFF3EB0 76FF8FD1AFFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004733AFFAEDEC6FFAADCC2FFA4DABEFF9FD8BBFF9AD6 B7FF93D3B2FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04743AE8FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end object miDivider5: TMenuItem Caption = '-' end object miCopyLeftToRight: TMenuItem Action = actCopyLeftToRight Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004763BC504733A00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF19854DF504763CAB04733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF7DD9AAFF36A46CF804763CE10473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF83DDAFFF6EDCA5FF59C48DFE0A79 3FF504733A00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04743AE80473 3AFF04733AFF04733AFF04733AFF04793DF783DDAFFF15C86DFF55DC97FF73D6 A3FF1E8952F504763BAC04733A00FFFFFF0004733AFF04733AFF04733AFF7ECA A3FF7ECAA3FF7FCFA6FF80D4A9FF81D8ACFF83DCAFFF12C46AFF13C86CFF35CC 80FF77D7A6FF3DA36EF904753BE104733A0004733AFF04733AFF04733AFF7ECA A3FF069A4EFF08A152FF0AA958FF0CB15DFF0EB862FF10BE66FF11C067FF10BE 66FF1BBB6AFF66CE99FF5BB889FE0E7942F504733AFF04733AFF04733AFF7ECA A3FF069A4EFF079E50FF09A656FF0BAD5AFF0DB35EFF0EB761FF16BB66FF1FBC 6CFF2ABC71FF30B973FF60C592FF7FC9A3FF04733AFF04733AFF04733AFF8ACF ACFF16A059FF149F58FF18A75EFF26B26AFF35BB76FF45C283FF4BC688FF4DC5 88FF4DC387FF4CBF84FF76CB9FFF92D0B0FF04733AFF04733AFF04733AFF90D1 B0FF30AB6CFF37AE71FF3DB276FF45B87DFF4BBE83FF50C187FF53C38BFF56C3 8CFF60C591FF94D6B4FF81C5A2FE177E49F504733AFF04733AFF04733AFF93D3 B2FF96D4B4FF9AD6B7FF9ED7BAFFA1D9BDFFA4DCC0FF58C08AFF5CC28EFF76CB 9FFFA4DBBFFF60AF86FA06753BE104733A0004733AFF04733AFF04743AE80473 3AFF04733AFF04733AFF04733AFF04763BF7A9DBC1FF5FBE8EFF8DD2AFFFA0D6 BAFF359162F604743BAC04733A00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFABDCC3FFA0D8BCFF84C6A4FE117B 44F504733A00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFFA7DBC0FF55A97EF804743AE10473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF278956F604743AAB04733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFFFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733A00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF } end object miCopyRightToLeft: TMenuItem Action = actCopyRightToLeft Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004763CC5FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004763BAC1986 4EF504733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004753BE136A16AF87EDB ACFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF0004733A000A783FF555B987FE6CD59FFF84E0 B1FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF0004733A0004743BAC1D8550F56EC699FF4EC78AFF11BB64FF84E0 B1FF057B3FF704733AFF04733AFF04733AFF04733AFF04743AE804733AFF0473 3AFF04733A0004743AE13B9C6AF972C79CFF2DB470FF0CB05CFF0EB962FF83DE B0FF84E1B2FF84E1B2FF83DEB0FF82DAADFF81D6AAFF04733AFF04733AFF0473 3AFF0E7941F65AB285FE62BF8FFF13A259FF09A555FF0BAD5AFF0DB55FFF0FBB 64FF10BF66FF10BF66FF0FBB63FF0DB45FFF80D4A9FF04733AFF04733AFF0473 3AFF7EC7A1FF5DBD8CFF2BA968FF23A562FF1AA85FFF11AB5DFF0CB05CFF0DB5 60FF0EB862FF0EB861FF0DB55FFF0CAF5CFF80D2A8FF04733AFF04733AFF0473 3AFF8FCEAEFF73C69CFF48B47DFF49B57DFF4BB780FF4BBC83FF46BF81FF37BC 79FF2ABA71FF1EB569FF1BB365FF1DB065FF8ED5B0FF04733AFF04733AFF0473 3AFF177E48F680C3A0FE92D2B1FF5DBC8BFF55BA86FF54BD87FF52BF87FF4FC0 87FF4CC085FF46BE81FF3FBA7CFF39B576FF94D5B4FF04733AFF04733AFF0473 3AFF04733A0006753BE15FAE86FAA3D9BDFF75C79DFF5DBD8CFF5BBE8BFFA8DD C2FFA5DDC0FFA2DBBEFF9ED9BBFF9AD7B8FF96D4B4FF04733AFF04733AFF0473 3AFFFFFFFF0004733A0004743BAC359162F6A1D6BBFF90D2B0FF64C091FFABDD C3FF04763BF704733AFF04733AFF04733AFF04733AFF04743AE804733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF0004733A00127C45F587C7A6FEA5DABEFFAFDE C6FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004743AE158AA81F9ACDC C4FF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A0004743BAC288B 58F604733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733AFF0473 3AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004753BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00 } end end object mnuEncoding: TMenuItem Caption = 'En&coding' object miEncodingLeft: TMenuItem Caption = '&Left' end object miEncodingRight: TMenuItem Caption = '&Right' end end object miAbout: TMenuItem Action = actAbout end end object ActionList: TActionList Images = ImageList left = 16 top = 136 object actSave: TAction Caption = 'Save' Hint = 'Save' ImageIndex = 0 OnExecute = actSaveExecute end object actSaveAs: TAction Caption = 'Save as...' Hint = 'Save as...' ImageIndex = 1 OnExecute = actSaveAsExecute end object actStartCompare: TAction Caption = 'Compare' Hint = 'Compare' ImageIndex = 2 OnExecute = actStartCompareExecute end object actLastDifference: TAction Caption = 'Last Difference' Hint = 'Last Difference' ImageIndex = 3 OnExecute = actExecute end object actNextDifference: TAction Caption = 'Next Difference' Hint = 'Next Difference' ImageIndex = 4 OnExecute = actExecute end object actPrevDifference: TAction Caption = 'Previous Difference' Hint = 'Previous Difference' ImageIndex = 5 OnExecute = actExecute end object actFirstDifference: TAction Caption = 'First Difference' Hint = 'First Difference' ImageIndex = 6 OnExecute = actExecute end object actIgnoreCase: TAction Category = 'Options' AutoCheck = True Caption = 'Ignore Case' DisableIfNoHandler = False OnExecute = actIgnoreCaseExecute end object actIgnoreWhiteSpace: TAction Category = 'Options' AutoCheck = True Caption = 'Ignore Blanks' DisableIfNoHandler = False OnExecute = actIgnoreCaseExecute end object actKeepScrolling: TAction AutoCheck = True Caption = 'Keep Scrolling' Checked = True OnExecute = actKeepScrollingExecute end object actCancelCompare: TAction Caption = 'Cancel' Enabled = False Hint = 'Cancel' ImageIndex = 7 OnExecute = actCancelCompareExecute end object actBinaryCompare: TAction Category = 'Options' AutoCheck = True Caption = 'Binary Mode' OnExecute = actBinaryCompareExecute end object actPaintBackground: TAction Category = 'Options' AutoCheck = True Caption = 'Paint Background' Checked = True OnExecute = actPaintBackgroundExecute end object actCopyLeftToRight: TAction Caption = 'Copy Block Right' Hint = 'Copy Block Right' ImageIndex = 21 OnExecute = actExecute end object actCopyRightToLeft: TAction Caption = 'Copy Block Left' Hint = 'Copy Block Left' ImageIndex = 20 OnExecute = actExecute end object actSaveLeft: TAction Caption = 'Save Left' Hint = 'Save Left' ImageIndex = 9 OnExecute = actExecute end object actSaveRight: TAction Caption = 'Save Right' Hint = 'Save Right' ImageIndex = 9 OnExecute = actExecute end object actReload: TAction Caption = '&Reload' Hint = 'Reload' ImageIndex = 8 OnExecute = actExecute end object actOpenLeft: TAction Caption = 'Open Left...' ImageIndex = 11 OnExecute = actOpenLeftExecute end object actOpenRight: TAction Caption = 'Open Right...' ImageIndex = 11 OnExecute = actOpenRightExecute end object actExit: TAction Caption = 'E&xit' ImageIndex = 12 OnExecute = actExecute end object actEditCut: TAction Category = 'Edit' Caption = 'Cut' ImageIndex = 15 OnExecute = actEditCutExecute end object actEditCopy: TAction Category = 'Edit' Caption = 'Copy' ImageIndex = 16 OnExecute = actEditCopyExecute end object actEditPaste: TAction Category = 'Edit' Caption = 'Paste' ImageIndex = 17 OnExecute = actEditPasteExecute end object actEditDelete: TAction Category = 'Edit' Caption = 'Delete' ImageIndex = 18 OnExecute = actEditDeleteExecute end object actEditSelectAll: TAction Category = 'Edit' Caption = 'Select &All' ImageIndex = 19 OnExecute = actEditSelectAllExecute end object actEditRedo: TAction Category = 'Edit' Caption = 'Redo' ImageIndex = 14 OnExecute = actEditRedoExecute end object actEditUndo: TAction Category = 'Edit' Caption = 'Undo' ImageIndex = 13 OnExecute = actEditUndoExecute end object actSaveLeftAs: TAction Caption = 'Save Left As...' Hint = 'Save Left As...' ImageIndex = 10 OnExecute = actSaveLeftAsExecute end object actSaveRightAs: TAction Caption = 'Save Right As...' Hint = 'Save Right As...' ImageIndex = 10 OnExecute = actSaveRightAsExecute end object actAbout: TAction Caption = 'About' OnExecute = actAboutExecute end object actLineDifferences: TAction Category = 'Options' AutoCheck = True Caption = 'Line Differences' OnExecute = actLineDifferencesExecute end object actAutoCompare: TAction Category = 'Options' AutoCheck = True Caption = 'Auto Compare' DisableIfNoHandler = False end end object ImageList: TImageList left = 200 top = 136 Bitmap = { 4C6916000000100000001000000077856C7C91794D7E8B67386F8B67388C8B67 38D48B6738FF8A693DF880714AE57A7858850000000000000000000000000000 00000000000000000000000000009270425EBB96627ED1AD815DE6CEB1CDEFDF D0FFECDBC5FFDFC29BFFA08B68FD886E43FD5A7F6A1B00000000000000000000 0000000000000000000000000000887F6B96737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706E006B706E006B70 6E006B706E006B706E006B706E006E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706E006B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706E006B706E00FCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706E006B706E00FAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706E006B706E00F9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706E006B706E00F9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706E006B706E00F7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706E006B706E00FEFEFEFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F4F4FFF4F4F4FFEBEBEBFFEBEB EBFFE3E3E3FFF0F0F0FF6B706E006B706E00CECECEFFC9C9C9FFC9C9C9FFC9C9 C9FFC9C9C9FFC5C5C5FFC9C9C9FFC9C9C9FFC5C5C5FFC5C5C5FFC5C5C5FFC5C5 C5FFC5C5C5FFD6D6D6FF6B706E006B706E00CECECEFFC5C5C5FF9F9F9FFFAFAF AFFFBCBCBCFFC4C4C4FFC8C8C8FFD0D0D0FFA9A9A9FFD2D2D2FFA9A9A9FFD2D2 D2FFB9B9B9FFCACACAFF6B706E006B706E00CDCDCDFFC3C3C3FFA9AAAAFFB4B4 B4FFC2C2C2FFC4C4C4FFC8C8C8FFCBCBCBFFA8A7A8FFD1D1D1FFA7A7A8FFD1D1 D1FFB6B6B7FFCACACAFF6B706E006B706E00DDDDDDFFDCDCDCFFDCDCDCFFDCDC DCFFD5D5D5FFD5D5D5FFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCF CFFFCFCFCFFFCACACAFF6B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E0077856C7C91794D7E8B67386F8B67388C8B67 38D48B6738FF8A693DF880714AE57A7858850000000000000000000000000000 00000000000000000000000000009270425EBB96627ED1AD815DE6CEB1CDEFDF D0FFECDBC5FFDFC29BFFA08B68FD886E43FD5A7F6A1B00000000000000000000 0000000000000000000000000000887F6B96737166FF757062FF856D4AFF9A74 41FF9F7844FFD9BF9EFFEBD9C1FFAF8651FF7D6A4EFF6B706E006B706E006B70 6E006B706E006B706E006B706E006E716BFFDDE6E2FFFFFFFFFFD6E1DDFFDDD6 C9FFB6996EFF8B6738FFE2CBABFFD3B792FF9B7D54FFE5DFD5FFFFFFFFFFFFFF FFFFFFFFFFFFF4F4F4FF6B706E006B7572FFFDFDFDFFEEEEEEFFEDEDEDFFDEE2 DFFFB09877FF8B6738FFCAA779FFCEB38FFF8E6B3DFFC3BCACFFEEEDEDFFEEEE EDFFEDEEEDFFF3F4F3FF6B706E006B706E00FCFBFCFFECECEBFF8B6738FF8B67 38FF8B6738FF8B6738FFCAA779FFBD9258FF8B6738FF8B6738FF8B6738FF8B67 38FFECECECFFF3F3F3FF6B706E006B706E00FAFAFAFFEAE9E9FFC4CFCAFF8B67 38FFDCBF98FFBF9F71FFBF9F71FFBF9F71FFC09F73FFD8BB96FF8B6738FFAFA9 95FFEAE9EAFFF2F2F2FF6B706E006B706E00F9F9F9FFFAFAFAFFE4E4E4FFBFCB C5FF8B6738FFDCBF98FFC09F73FFC09F73FFDFC8ABFF8B6738FFACA692FFE4E4 E4FFF4F4F4FFF1F1F1FF6B706E006B706E00F9F9F9FFEEEEEEFFFAFAFAFFE4E4 E4FFBFCBC5FF8B6738FFE3CBACFFDCBF98FF8F6B3BFFACA692FFE4E4E4FFFAFA FAFFEEEEEEFFF1F1F1FF6B706E006B706E00F7F7F7FFE3E3E3FFEEEEEEFFFAFA FAFFFAFAFAFFC8D4CEFF8E6C3FFF8B6738FFB4AE9AFFFAFAFAFFFCFCFCFFEEEE EEFFE3E3E3FFF0F0F0FF6B706E006B706E00A1A4A3FFA1A4A2FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4A3FFA1A4 A3FFA1A4A3FFA1A4A3FF6B706E006B706E00DCDCDCFFDBDBDCFFDBDCDCFFDCDC DCFFDCDBDCFFDBDCDCFFDCDBDCFFDCDCDCFFDBDCDBFFDCDCDBFF000000FFDBDC DCFFDCDCDBFFDCDCDCFF6B706E006B706E00EFEFEFFFADB0AFFFAEB0AEFFAEB0 AFFFADB0AEFFADB0AFFFADB0AFFFADB0AFFFADB0AFFFEFEEEFFF000000FFEEEF EEFFEFEEEEFFEFEEEFFF6B706E006B706E00FFFFFFFFB6B8B7FFB6B8B7FFB6B8 B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFB6B8B7FFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706E006B706E00FFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FFFFFF FFFFFFFFFFFFFFFFFFFF6B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E006B706E006B706E006B706E006B706E006B70 6E006B706E006B706E006B706E00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004753BC504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF2A8C59F604743AAB04733A0CFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFFB7E1CBFF5AAB82F904743AE104733A2DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFFBBE3CEFFABDCC3FF84C6A4FE107A43F504733A65FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF0473 3AFF04763BF7B6E0CBFF6FC499FF91D2B1FF9CD4B7FF318F5FF604743BAC0473 3A0CFFFFFF00FFFFFF00FFFFFF0004733AFFA7DBC0FFAADCC2FFADDDC5FFAFDE C6FFB0DEC7FFB0DEC7FF64C191FF61C18FFF73C89DFF9FD9BBFF5AAB81FA0574 3AE104733A2DFFFFFF00FFFFFF0004733AFFA3D9BDFF54B985FF58BB88FF5BBC 8BFF5CBD8BFF5CBE8CFF5CC18DFF5AC28DFF55C28AFF58C38CFF8CD4AFFF7AC3 9CFE147C46F504733A65FFFFFF0004733AFF9CD7B9FF3BAF74FF33AC6EFF2BA9 68FF2FAC6BFF3DB678FF49BE82FF50C389FF4DC488FF49C284FF44BE80FF6DCA 9BFF89CEAAFF308F5EF604753B9D04733AFF7ECAA3FF069A4EFF069A4EFF069A 4EFF07A052FF09A757FF0BAE5BFF0EB25FFF17B866FF1FBA6CFF26BA6FFF55C6 8DFF76C99EFF268956F504753B9D04733AFF7ECAA3FF069A4EFF069A4EFF069C 4FFF08A454FF0BAC5AFF0DB35EFF0EB962FF0FBC64FF1CBF6CFF67D29CFF5DBB 8BFE0E7A42F504733A65FFFFFF0004733AFF7ECAA3FF7ECAA3FF7ECAA3FF7ECC A4FF7FD1A7FF81D5AAFF0EB761FF10BF66FF34CB7FFF78DAA8FF3EA671F90476 3BE104733A2DFFFFFF00FFFFFF0004743AE804733AFF04733AFF04733AFF0473 3AFF04783CF781D6ABFF11BA64FF52D392FF73D7A5FF1E8B53F504763CAC0473 3A0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF81D7ABFF6CD5A0FF58C18BFE0A7940F504743A65FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF7BD3A6FF36A16AF804763CE104733A2DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733AFF18844DF504763BAB04733A0CFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004753BC504733A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743AE8FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFAEDEC6FFAADCC2FFA4DABEFF9FD8BBFF9AD6B7FF93D3B2FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DFC7FF5DBD8CFF54B985FF49B57DFF3EB076FF8FD1AFFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC7FF5EBE8DFF55BA86FF4AB57EFF3FB176FF8ACFACFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DFC7FF5EBE8DFF54B985FF49B57DFF3EB076FF85CDA9FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733AFF04733AFF04733AFF0476 3BF7AFDEC6FF5BBC8BFF52B884FF47B47CFF35AD70FF7FCBA4FF04763BF70473 3AFF04733AFF04733AFF04753BC504733A00278956F6ACDCC4FFB2DFC8FFB0DE C7FFACDDC4FF58BD89FF4EBB84FF43B87CFF0FA458FF7FCEA5FF7ECDA4FF7ECC A4FF78C79FFF18824BF504733A00FFFFFF0004743BAC4DA478F89ED7BAFF61C0 90FF5BC18DFF55C18AFF3AB978FF11AD5EFF0BAB59FF0AAA59FF0CA958FF68C7 97FF349A65F804743BABFFFFFF00FFFFFF0004733A0004743AE173BF98FE87D2 ACFF56C38CFF30BA74FF0CB15DFF0DB45FFF0DB45FFF0DB35EFF4EC589FF55B7 84FE04753BE104733A00FFFFFF00FFFFFF00FFFFFF0004733A000B773EF68FD3 B0FF5BC891FF0DB45FFF0FB962FF0FBC65FF10BD65FF32C57BFF71CE9FFF0A78 3FF604733A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A00238A 56F578D2A5FF1CBD6BFF11C067FF12C56AFF1FC973FF78DBA8FF1E8952F50473 3A00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000475 3BAC3DA36FF969D59EFF12C469FF14CB6EFF6CE0A5FF3FA872F904763CABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0004763BE15DBF8DFE4CD18DFF4ED590FF5FC592FE04763CE104733A00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A000E7A42F674D1A2FF75D3A3FF0E7B42F604733A00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743AE8FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DEC7FFABDCC3FFA6DABFFF91D2B1FF7ECAA3FF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC8FF5FBE8DFF55BA86FF37AE71FF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB1DFC7FF5FBE8DFF55BA86FF41B278FF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0DEC7FF5DBD8CFF54B985FF47B47CFF069A4EFF7ECAA3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF0004753BC504733AFF04733AFF04733AFF0476 3BF7ADDDC5FF59BC89FF50B882FF34AD6FFF069A4EFF7ECAA3FF04763BF70473 3AFF04733AFF04733AFF04753BC504733A65278956F6AADBC2FFAFDEC6FFADDD C5FFAADCC2FF56BD88FF4DBA82FF1FAA63FF08A253FF7FCEA5FF7ECDA4FF7ECC A4FF78C79FFF18824BF504733A65FFFFFF0004743BAC4FA57AF89BD6B8FF5DBE 8DFF58C08AFF51C087FF42BC7EFF0CAB5AFF0BAB59FF0AAA59FF0CA958FF68C7 97FF349A65F804743BABFFFFFF00FFFFFF0004733A0C04743AE175BF99FE83D1 A9FF52C289FF4DC387FF1EB669FF0DB45FFF0DB45FFF0DB35EFF4EC589FF55B7 84FE04753BE104733A0CFFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F690D3 B1FF65CC98FF3BC27DFF0FB962FF0FBC65FF10BD65FF32C57BFF71CE9FFF0A78 3FF604733A2DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65268C 57F594DBB7FF31C379FF11C067FF12C56AFF1FC973FF78DBA8FF1E8952F50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000475 3BAC4CAA7AFA6DD6A0FF12C469FF14CB6EFF6CE0A5FF3FA872F904763CABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04763BE15DBF8DFE4CD18DFF4ED590FF5FC592FE04763CE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0E7A42F674D1A2FF75D3A3FF0E7B42F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65248B56F5248B56F504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004763C9D04763C9DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF0004753B9D04753B9DFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF0004733A65288957F5268956F504733A65FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0F7941F687CAA7FF7EC7A2FF0E7941F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE172BD96FE72C59AFF6AC295FF5BB386FE04743AE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3BAC4EA578FA91D2B0FF48B47DFF3FB176FF6AC295FF3B9C6AF904743AABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65288A 57F6A0D7BBFF5FBD8CFF4DB680FF44B37AFF1AA25CFF71C49AFF1D844FF50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F69CD4 B7FF7AC9A0FF5ABE8BFF51BC86FF38B474FF08A353FF2CAF6CFF6EC397FF0A77 3EF604733A2DFFFFFF00FFFFFF00FFFFFF0004733A0C04743AE180C4A1FE97D5 B5FF69C596FF60C591FF56C38BFF1DB066FF0BAC59FF0BAB59FF4DC185FF55B4 84FE04753BE104733A0CFFFFFF00FFFFFF0004743BAC56A97FF9B0DFC7FF77CB A0FF6CCA9AFF63CA96FF43C181FF0DB35EFF0DB55FFF0DB45FFF0FB25FFF6ACE 9BFF359C67F804753BABFFFFFF0004733A65288B58F6B5E0CAFFBCE5D0FFB8E5 CEFFB3E5CBFF63CD97FF19BA68FF0FBC64FF10BE65FF83DCAFFF82DBAEFF82D9 ACFF7BD3A6FF18844CF504733A6504753BC504733AFF04733AFF04733AFF0478 3CF7B2E6CBFF4BC989FF10BD65FF11C369FF12C76BFF84E1B2FF057A3EF70473 3AFF04733AFF04733AFF04753BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFB0E5CAFF31C378FF11C067FF13C86CFF15CF71FF85E5B4FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFADE4C8FF1FBD6DFF10BF66FF12C56AFF13C96DFF84E3B3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA9E2C5FF16B665FF0FBA63FF10BE66FF11C167FF83DEB0FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA5DFC1FF81D5AAFF81D7ABFF82D9ACFF82DAADFF82D9ADFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04743BE8FFFF FF00FFFFFF00FFFFFF00FFFFFF0004733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04733AFF0473 3AFF04733AFF04733AFF04733AFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF0004733A2D0F7941F689CCA9FF7FC8A2FF0E7941F604733A2DFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3A0C04743AE173BD97FE74C69CFF6CC396FF5CB386FE04743AE104733A0CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3BAC4FA679FA93D3B2FF4BB67FFF42B279FF6BC296FF3B9C6AF904743AABFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A65298B 58F6A2D8BCFF62BE8FFF4FB782FF45B37BFF1AA25CFF71C49AFF1D844FF50473 3A65FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0004733A2D0D7840F69ED4 B8FF7CCAA2FF5CBD8BFF53BB85FF37B173FF08A153FF2CAF6CFF6EC397FF0A77 3EF604733A2DFFFFFF00FFFFFF00FFFFFF0004733A0C04743AE183C5A3FE99D5 B6FF69C395FF5FC18FFF56C18AFF1CAE63FF0AAA58FF0BAB59FF4DC286FF55B5 84FE04753BE104733A0CFFFFFF00FFFFFF0004743BAC57A97FF9B0DFC7FF75C7 9DFF6AC697FF60C692FF41BE7EFF0CB05CFF0DB35EFF0DB45FFF0FB460FF6ACF 9BFF359D68F804753BABFFFFFF0004733A65288B58F6B3DFC9FFB9E2CDFFB5E2 CBFFB1E2C9FF5FC992FF18B665FF0EB861FF0FBB64FF83DCAFFF83DCAFFF82DB AEFF7CD5A8FF19844DF504733A6504753BC504733AFF04733AFF04733AFF0477 3CF7AFE3C8FF47C384FF0EB861FF10BE66FF11C369FF84E1B2FF057A3EF70473 3AFF04733AFF04733AFF04763BC5FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFADE2C7FF2EBD74FF0FBA63FF11C168FF13C86CFF85E6B5FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA9E1C5FF1BB668FF0EB962FF10C067FF12C66BFF84E3B3FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA5DEC1FF14B161FF0DB560FF0FBB63FF10BF66FF83DEB0FF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000473 3AFFA1DCBEFF81D3A9FF81D5AAFF81D7ACFF82D9ADFF82DAADFF04733AFFFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000474 3AE804733AFF04733AFF04733AFF04733AFF04733AFF04733AFF04753BE8FFFF FF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000003F3FA4040000 89AD000086FF000086FF000086FF000086FF000086FF000086FF000089BC0000 860500000000000000000000000000000000000000003F3FA404000089AF2222 AFF78888F6FF8B8BF7FF8B8BF7FF8A8AF6FF8787F6FF8383F5FF2323B8F80000 89B8000086040000000000000000000000003F3FA404000089B12222B1F78383 F3FF4242DCFF2F2FD5FF2F2FD5FF2F2FD5FF2F2FD5FF3C3CDBFF7575F1FF1F1F B4F8000089B5000086040000000033339E05000089B22424B2F78383F3FF4242 DCFF3737D5FF2F2FD5FF2F2FD5FF2F2FD5FF2F2FD5FF3737D5FF3B3BDAFF6F6F F0FF1B1BB1F7000089B13F3FA404000089B42626B3F78383F3FF4141DBFF5757 D7FFCDCDDAFF5F5FD7FF2F2FD5FF2F2FD5FF5C5CD8FFD9D9E6FF5F5FDBFF3B3B D9FF6A6AEFFF1818B0F7000089AE020288FF8989F6FF4040DBFF2F2FD5FF9292 D8FFDBDBDBFFD6D6DAFF6060D7FF5A5AD8FFE0E0E6FFEDEDEDFFA5A5E5FF2F2F D2FF3B3BD6FF6868EEFF020288FF030389FF8888F6FF2F2FD5FF2F2FD5FF3030 D5FF9999D8FFDFDFDFFFDEDEE2FFDFDFE6FFECECECFFABABE6FF3131D2FF2F2F D0FF2F2FCEFF6565EDFF020289FF030389FF8888F6FF2F2FD5FF2F2FD5FF2F2F D5FF3030D5FFACACDEFFE8E8E8FFECECECFFBCBCE8FF3131D1FF2F2FCFFF2F2F CEFF2F2FCCFF6161ECFF020289FF030389FF8888F6FF2F2FD5FF2F2FD5FF2F2F D5FF5B5BD8FFDFDFE6FFECECECFFF1F1F1FFEDEDF3FF6464DAFF2F2FCEFF2F2F CCFF2929C9FF4545E9FF020289FF030389FF8585F5FF2F2FD5FF2F2FD5FF5B5B D7FFDFDFE5FFECECECFFAAAAE4FFA5A5E6FFF9F9F9FFF7F7FCFF6767DAFF1A1A C5FF0202BDFF3737E8FF020289FF020288FF6969F2FF2323D5FF1F1FD2FF9292 DEFFECECECFFAAAAE4FF2F2FD0FF2828CEFFA5A5E9FFFEFEFEFF9696E3FF0000 BDFF0303BDFF3434E6FF020289FF000089BC2424B8F95A5AEFFF1111D3FF0101 CBFF5858D6FF0303C7FF0000C5FF0000C3FF0101C1FF5F5FD6FF0202BDFF0404 BEFF2B2BDFFF1D1DC7FD000087EB00008606000089BB2121B7F85252EDFF1010 D0FF0000C7FF0000C5FF0000C3FF0000C1FF0000BFFF0000BDFF0505BEFF2C2C DFFF1B1BC4FC000088E6000086200000000000008606000089BB1D1DB4F84C4C EBFF0F0FCCFF0000C3FF0000C1FF0000BFFF0000BDFF0505BFFF2D2DDFFF1919 BFFC000088DF0000861A00000000000000000000000000008606000089BB1A1A B1F84A4AECFF4747EDFF4343EBFF3F3FEAFF3B3BE8FF3737E7FF1818BCFB0000 88D8000086140000000000000000000000000000000000000000000086060000 89BB000086FF000086FF000086FF000086FF000086FF000086FF000088CF0000 860F000000000000000000000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 3A9FA76A3ADEA56736F6A76939E5A76A3ABCA4653453A4653405FFFFFF00FFFF FF00FFFFFF00A4653479A4653410FFFFFF00FFFFFF00A4653550A66838F6C090 68FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB9875FF4A56737F0A4653458FFFF FF00A4663566A46534FFA465340FFFFFFF00A4653429A66939F5D3AD8CFFDCBD 9DFFDDBEA1FFE5CBB4FFE9D3BFFFEEDDCCFFF0E2D5FFE7D2BFFFAF774BF5A567 36C0AB7143F7A46635FCA465340EFFFFFF00A769399BC09069FDC59872FFA86B 3CFFA46635FFA76A3AFCB7855DF3D9BBA1FEF1E4D8FFF2E6DBFFF3E8DDFFCEA7 88FDEAD8C8FFA76A3AF9A465340DFFFFFF00A66838F3AB7041FFA96C3CFEA76A 3AF5A4653475A4653419A4653445A66938CDB98861F5EBDBCDFFF5EBE2FFF6EE E6FFF6EEE6FFA76A3AFAA465340BFFFFFF00A46535FEA76A3AFBC791689DA567 37E6A4653423FFFFFF00FFFFFF00FFFFFF00A4653460A46635FFE9D7C7FFEBD8 C6FFF5ECE3FFA66A3AFAA465340AFFFFFF00A46534FCB3794C7ECF9D762BBB83 5713A4653402FFFFFF00FFFFFF00A4653404A66838C4D0AC8FFAF6EEE7FFF2E6 DBFFF6EEE6FFA66A3AFBA4653409FFFFFF00A465340DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00A46534A0A46534FFAD7447F8AF774CF7AF77 4CF7AF784CF7A46534FFA4653408FFFFFF00A46534F9A46534FEA46534FEA465 34FDA46534FCA46534FBA46534B9A465341DA4653418A4653418A4653418A465 3418A4653418A465341CFFFFFF00FFFFFF00A46534FCF5EDE5FFF6EDE5FFF5EC E4FFD7B79CFDA66837E0A4653410FFFFFF00FFFFFF00FFFFFF00FFFFFF00D5A4 7E1ACD997239A46534FCA465340CFFFFFF00A46635FCF6EEE6FFEBD7C4FFEAD9 C9FFA46534FEA465346AFFFFFF00FFFFFF00FFFFFF00A465340BA56635E9C995 6C8DB77F53C2A46534FFA4653405FFFFFF00A56737FDF6EEE6FFF5ECE3FFF5ED E4FFE6D2C1FFB0794DF5A66938CAA4653436FFFFFF00A465346AA96B3CEDB67C 4FFFA76A3AFEA56837FAFFFFFF00FFFFFF00A66838FDF1E4D8FFD4B295FEF4E9 E0FFF3E8DDFFEDDCCCFFD2AD8FFEB0784CF5A56635FBA66939FFA66939FEA96D 3DFFB0784CFFA76A3AA8FFFFFF00FFFFFF00A56737FEB7845BF7A56736D4B17A 4EF4E3CAB4FFECDAC9FFE7D1BCFFE3C9B0FFDEBEA0FFD2AB88FFCEA582FFD3AE 8EFFA66838F5A465342AFFFFFF00FFFFFF00A46534FFA5673693FFFFFF00A465 3454A66737EEB58055F3CEA684FFD8B697FFDBB999FFD3AC8AFFC2946DFCA668 38F6A466355BFFFFFF00FFFFFF00FFFFFF00A46534A2A4653401FFFFFF00FFFF FF00A4653405A4653453A76A3ABEA66938E9A46635FAA76A3AE4A76B3BAAA465 3424FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004B4B4CEF444344FFB9B4B3FFB9B4 B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFBCB8B6FFBCB9B7FFBCB9B8FFBCB9 B9FF444344FF4B4B4CEFFFFFFF00FFFFFF00414042FF59595AFFFAF4F1FFFAF4 F0FFFAF4F0FFFAF4F0FFFAF4F1FFFAF5F2FFFBF6F3FFFCF8F5FFFCF9F7FFFDFB F9FF646365FF414042FFFFFFFF00FFFFFF003F3E40FF616062FFFDFAF9FFCFB6 9CFFCFB69CFFCFB69CFFCFB69CFFCFB69DFFCFB79DFFD0B79EFFD0B89FFFFEFD FDFF616062FF3F3E40FFFFFFFF00FFFFFF003D3C3DFF5D5C5EFFFDFCFBFFFBF9 F8FFFBF9F9FFFBF9F8FFFBF9F8FFFAF8F7FFFAF7F5FFF9F6F4FFF8F4F2FFF9F6 F2FF5D5C5EFF3D3C3DFFFFFFFF00FFFFFF003B3A3BFF5A595BFFF7F3EEFFF7F3 EFFFF7F3EFFFF7F3EFFFF7F3EEFFF6F2EEFFF6F1EDFFF5F0EBFFF4EFE9FFF3ED E7FF5A595BFF3B3A3BFFFFFFFF00FFFFFF00383739FF565557FFF1EAE2FFB8A2 8BFFB8A28BFFB8A28BFFB8A28BFFB7A18AFFB7A18AFFB7A08AFFB6A089FFEDE5 DCFF565557FF383739FFFFFFFF00FFFFFF00363537FF535254FFE8DED4FFE8DD D0FFE8DDD0FFE8DDD0FFE7DCD0FFE7DCCFFFE7DBCFFFE6DBCEFFE6DACDFFE6DA CFFF535254FF363537FFFFFFFF00FFFFFF00333335FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E51FF4F4E 51FF4F4E51FF333335FFFFFFFF00FFFFFF00313032FF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A4DFF4B4A 4DFF4B4A4DFF313032FFFFFFFF00FFFFFF002E2D30FF464549FF464549FFCDCD CDFFD6D6D6FFD5D5D6FFD5D5D5FFD6D6D6FFD6D6D6FFD3D3D3FF272629FF2423 26FF464549FF2E2D30FFFFFFFF00FFFFFF002A292BFF403F42FF403F42FFA7A7 A7FF3D3C3FFF333335FFAEAEAEFFAEAEAEFFAEAEAEFFAEAEAEFF414042FF2727 28FF444346FF2A292BFFFFFFFF00FFFFFF00252426FF39383BFF39383BFF9999 99FF323134FF262528FF9F9F9FFF9F9F9FFF9F9F9FFF9F9F9FFF3F3E41FF2524 26FF58575AFF252426FFFFFFFF00FFFFFF00222224ED2A2A2DFF323135FF8B8A 8BFF29282BFF201F21FF909090FF909090FF909090FF909090FF343336FF201F 21FF4E4D51FF212023FFFFFFFF00FFFFFF001F1F252F1D1D1FEC1C1B1EFF7575 75FF787878FF787878FF787878FF787878FF787878FF787878FF1A191BFF1919 1BFF1D1C1FFF1F1F21EFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00186FAB174345D3D63A3A CFB25353D418FFFFFF00FFFFFF00FFFFFF004B4B4CEF444344FFB9B4B3FFB9B4 B3FFB9B4B3FFB9B4B3FFB9B6B4FFBBB6B4FFB6B6B5FF34B6DEFF446AC0FF1B1B CEFF1111A3FF4A4A4DEFFFFFFF00FFFFFF00414042FF59595AFFFAF4F1FFFAF4 F0FFFAF4F0FFFAF4F0FFFAF4F1FFF9F5F2FF55C6E9FF36AFD4FF1E2020FF1D2B 85FF05079AFF3A394FFFFFFFFF00FFFFFF003F3E40FF616062FFFDFAF9FFCFB6 9CFFCFB69CFFCFB69CFFCFB69CFF5E9FABFF2EB3DBFF242B2DFF0B1C21FF11A0 CDFF2E607AFF3E3D3FFFFFFFFF00FFFFFF003D3C3DFF5D5C5EFFFDFCFBFFFBF9 F8FFFBF9F9FFFBF9F8FF94C3D1FF32C4F1FF27363BFF0E171AFF1598C1FF57A6 BEFF3D3C3EFF3B3A3BFFFFFFFF00FFFFFF003B3A3BFF5A595BFFF7F3EEFFF7F3 EFFFF7F3EFFFAFCFD7FF33CAF9FF2C454CFF151819FF178BB0FF3DA2C1FF8F8B 88FF464546FF3B3A3BFFFFFFFF00FFFFFF00383739FF565557FFF1EAE2FFB8A2 8BFF979D92FF71D8F7FF34565FFF1D1D1DFF117390FF2199BCFF5E5449FF9F9A 94FF555456FF383739FFFFFFFF00FFFFFF00363537FF535254FFE8DED4FFCCD0 C9FF84DCF7FF54808CFF252525FF12617AFF1CA6D1FF666867FF827B74FFDDD1 C7FF535254FF363537FFFFFFFF00FFFFFF00333335FF4F4E51FF4A5156FF67C6 E4FF4E899CFF252525FF094558FF0DA4D5FF1E2F36FF252426FF484749FF4F4E 51FF4F4E51FF333335FFFFFFFF00FFFFFF00313032FF494B4FFF46ADCEFF1582 A5FF262626FF0E3845FF0CABDDFF173641FF1D1C1DFF3D3D3FFF4B4A4DFF4B4A 4DFF4B4A4DFF313032FFFFFFFF00FFFFFF002E2D30FF298FB2FF1695BDFF2528 29FF18343DFF0EADDFFF2E5E6CFF424242FF959595FFD3D3D3FF272629FF2423 26FF464549FF2E2D30FFFFFFFF00FFFFFF004E606CFF2C9ABDFF242C2FFF2131 36FF0BA3D2FF0C5166FF2B2B2BFF606060FFAEAEAEFFAEAEAEFF414042FF2727 28FF444346FF2A292BFFFFFFFF00FFFFFF0088A1AFFFB0CAD6FF2C3A3EFF0B96 C1FF0C6885FF070707FF404040FF9C9C9CFF9F9F9FFF9F9F9FFF3F3E41FF2524 26FF58575AFF252426FFFFFFFF00567181049DBCCAFF7AB8CCFF3C92AEFF1F6E 89FF161517FF181719FF8A8A8AFF909090FF909090FF909090FF343336FF201F 21FF4E4D51FF212023FFFFFFFF006279867E364246FF44778DFB252D34FF7575 75FF787878FF787878FF787878FF787878FF787878FF787878FF1A191BFF1919 1BFF1D1C1FFF1F1F21EFFFFFFF004864720036546523FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9 F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9 DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7 BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3 E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3 CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0 F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5 D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5 E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3 F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5 F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8 D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5 F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2 FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3 F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2 FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA F8FF3594DAFFFFFFFF00FFFFFF002C86D8002D88D8F72D87D8F72D88D8F72D88 D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88 D8F72C86D800FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006E9DD5FF6C9B D3FF699AD2FF6697CFFF6395CDFF6093CBFF5C90C8FF598EC6FF558BC3FF5188 C0FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006B9BD3FFAED4 E8FFABD3E8FFAAD1E7FFA8CFE5FFA5CDE4FFA2CBE4FFA0C9E2FF9DC7E1FF4B84 BCFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006798D0FFABD1 E7FF90C2DFFF8DC0DEFF8ABEDCFF87BBDBFF83B8DAFF80B6D8FF99C4E0FF4580 B8FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF006395CDFFA8CF E5FF8CBFDDFF88BDDCFF85BADBFF81B7D9FF7EB4D7FF7AB2D6FF94C1DDFF3F7C B4FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF005E91C9FFA4CC E4FF87BBDBFF84B9DAFF80B6D8FF7CB3D7FF79B0D5FF74ADD4FF8FBDDCFF3977 AFFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00598EC6FFA0C9 E3FF82B8D9FF7EB5D8FF7AB2D6FF77AFD5FF73ACD3FF6DABD4FF8CBADAFF3373 ABFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00538AC2FF9CC6 E1FF7CB3D7FF79B1D5FF75ADD4FF71ABD2FF5FBAE4FF4BD4FFFF7CBBE0FF2E6F A7FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004E86BEFF98C3 DFFF77AFD5FF73ACD3FF6FA9D2FF6BA7D0FF5BB7E3FF54C2EDFF81B4D7FF286B A3FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF004882BAFF93C0 DDFF71ABD2FF6DA8D1FF69A5CFFF66A2CEFF629FCCFF5E9CCBFF7FB0D5FF2367 9FFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00427DB5FF8FBD DCFF6CA7D0FF67A4CFFF64A1CDFF609ECCFF5C9BCAFF5999C9FF7BADD4FF1E64 9CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003C79B1FF8BB9 DAFF66A2CEFF62A0CDFF5F9DCBFF5B9AC9FF5897C8FF5495C7FF77ABD3FF1960 98FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003675ADFF86B6 D8FF83B3D7FF81B2D6FF7DAFD5FF7BADD4FF79ABD3FF76AAD2FF74A8D1FF155D 95FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00B7B7B7FFAEAEAEFF3071A9FF2C6E A6FF286BA3FF2468A0FF21669EFF1D639BFF1A6199FF175F97FF145C94FF115B 93FF6C6C6CFF6C6C6CFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000009D BF1400A0C4FF00A0C4FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000005797D1100A0 C4FFADF3FBFF00A0C4FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000005797D1100A0C4FFADF3 FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEE7159FBBCF1BA1BBA4067A7C0B0000 00000000000000000000000000000000000005797D1100A0C4FFADF3FBFF31E1 F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8F7F814A1BCD414A3C1D50579 7D1C00000000000000000000000005797D0A00A0C4FFADF3FBFF2FE0F6FF32E2 F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9ECFF69E7F6FF41CEE3FE13A3 C1E405797D32000000000000000000A0C4FFADF3FBFF2FE0F6FF32E2F8FF32E2 F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2E8FF1DD2E8FF36D9ECFF40CD E1FF16A1BDCA05797D0A0000000005797E1100A0C4FF79EDFBFF32E2F8FF2CDF F4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2E8FF1DD2E8FF0BC8DFFF6AE5 F3FF1BABC5F815A0BCCB000000000000000005797D1100A0C4FF76EDFBFF04C3 DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EAF9FF05DDF7FF0AC8DFFF07C2 D8FF6FDCEBFF1BA3BFF400000000000000000000000005797D1100A0C4FF76ED FBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0C4FF01A9C4FF6EE1EEFF0FC9 DFFF69E4F2FF1AA4C0F80000000000000000000000000000000005797D1100A0 C4FF76EDFBFF00A0C4FF000000000000000000A0C4300099B95000A0C4C96DE6 F5FF76E2EFFF19A3C1FF00000000000000000000000000000000000000000000 000000A0C4FF00A0C4FF00000000000000000000000000000000009EC11A02AC C8FF88E7F2FE11A2C2FF00000000000000000000000000000000000000000000 00000000000000A0C4FF00000000000000000000000000000000000000000EAA CBFE5DDAE9FE23A6C0EF00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C42243C4 DBFC43C5D8FE23A6C07F00000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000A0C45D66DB EAB211A6C2AE0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000018A6C3691AA7 C46900A0C4180000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4E33000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF069A4EFF069A4E430000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4EFF6CF3AEFF069A4EFF069A 4E4100000000000000000000000000000000000000000000000000000000069A 4E07069A4E46069A4E9E069A4ECF069A4EFF069A4EFF6CF3AEFF6CF3AEFF069A 4EFF069A4E410000000000000000000000000000000000000000069A4E36069A 4EB10C9B8FC449DEA9DD6AF1AEFF6BF2AEFF73F5B3FF61EFA6FF16D273FF6CF3 AEFF069A4EFF069A4E41000000000000000000000000069A4E4A069A4EC845D9 ACFD67EFAFFF50E9A1FF24DBA0FF24DBA0FF24DBA0FF24DBA0FF16D273FF16D2 73FF6CF3AEFF069A4EFF0084773B00000000069A4E2B069A4EBA46D8A9FF65EF B1FF24DEA4FF2ADD97FF24DBA0FF24DBA0FF1AD7AFFF16D273FF16D273FF16D2 73FF18D375FF6CF3AEFF069A4EFF00000000069A4E9E30C29DEA60EDB1FF26DF A5FF1AD7AFFF1AD7AFFF09D0C8FF14D077FF16D273FF16D273FF16D273FF16D2 73FF34E28AFF069A4EFF069A4E41000000000C9F55DA63E9B1FF31E0BAFF17D4 CBFF22D69BFF23DAA1FF23DAA1FF23DAA1FF23DAA1FF23DED9FF16D273FF34E2 8AFF069A4EFF069A4E4100000000000000000A9D52F164ECB2FF24D6CDFF0BA1 93FE069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF1ED4CCFF34E28AFF069A 4EFF069A4E41000000000000000000000000069A4EFF46E2BEFF05A699FF069A 4EF1069A4E73069A4E300000000000000000069A4EFF34E28AFF069A4EFF069A 4E4100000000000000000000000000000000069A4EFF37D9B3FD069A4EFF069A 4E4800000000000000000000000000000000069A4EFF069A4EFF069A4E330000 000000000000000000000000000000000000069A4EFF3ADDB8F5069A4EFE0000 000000000000000000000000000000000000069A4EFF069A4E33000000000000 000000000000000000000000000000000000069A4EC123C7AFC6059D91CE069A 4E48000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000069A4E5E0FA85A862CD6C0960299 9A8C069A4E0C0000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000069A4E20069A4E6A069A 4E5B069A4E1D04A8B70404A8B803000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000888D8B48888D 8BEC909593D500000000000000000000000000000000888D8B978C918FEE0000 00000000000000000000000000000000000000000000000000008B908EF6F7F7 F7FD888D8BB79297957D0000000000000000000000008D9190E6D0D3D2FE8C91 8FBF000000000000000000000000000000000000000000000000888D8BFED0D4 D2FFEFF0EFFD8F9492AC0000000000000000878C8A3FA7ACAAFFC3C8C6FF8A8F 8DF70000000000000000000000000000000000000000000000008A8F8DF3B0B5 B3FFF6F7F7FE888D8BD79297957D000000008B908EFAC9CECCFFABAFAEFD888D 8BD4000000000000000000000000000000000000000000000000878C8A39888D 8BFFD9DCDBFFEFF0EFFE8E9391BD898E8C99B3B8B6FFCBCECDFF888D8BFD888D 8B7D000000000000000000000000000000000000000000000000000000008A8F 8DE1B2B6B5FFF7F7F7FF888D8BF29CA09FFEB3B6B5FFB5BAB8FD888D8BB20000 000000000000000000000000000000000000000000000000000000000000888D 8B33888D8BFEDFE1E1FFF5F6F5FD979C9AFFA5A9A8FF888D8BF7888D8B330000 0000000000000000000000000000000000000000000000000000000000000000 00008A8F8DA1B7BBBAFDE6E8E7FFA7ACAAFF8B908EFE878C8A97000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000888D8B5C848989FFC3C6C5FFAFB2B3FF2C2F9CF5888D8B33000000000000 0000000000000000000000000000000000000000000000000000000000001818 AE8D1616ABF30606A6FF454AA3FE0202A6FF191AC7FF1717ADF01818AE890000 000000000000000000000000000000000000000000001919AE7D0707A9FD2020 D2FD1E1ECEFE0E0FB7FD0205A4A40304A8FC1A1AC9FF2020D1FD1F1FCBFD0A0A A9FD1919AE5D0000000000000000000000001A1AAF5C0606A8FE1F1FD0FB0303 A8B81415C0F80101A6FF00000000000AA00E1C1DCDFD1315C0F90303A8B71D1D CDFA0606A7FE1A1AAF7D00000000000000001414ABE62323D5FD0303A87A0000 00001D1DCEF50A0AA9FC00000000000000000303A8FD1A1BCAF2000000000202 A7772020D1FD1414ABE600000000000000000D0DABF91D1DCFFA000000000B0B B5902121D3FD0C0CAAD500000000000000000909AACB2323D6FD0D0DB8950000 00001F1FD1FB1111ABFA00000000000000001313ABDF2727DBFD1F1FD0F91D1D CEFD0707A8E61A1AAF3300000000000000001A1AAF330808AAE92222D4FD1D1D CFF91D1DCEFD1313ABE900000000000000001A1AAF5C0E0EAAE71010ABF41616 ABF71A1AAF33000000000000000000000000000000001A1AAF5C0D0DAAC30B0B AAEE0B0BA9E21A1AAF33000000008A8F8D4F858A887F858A887F858A887F858A 887F858A887F858A887F858A887F858A887F858A887F858A887F89918E530000 0000000000000000000000000000868B897DFFFFFF7FFFFFFF7FFFFFFF7FFFFF FF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7FFFFFFF7F858A887F0000 0000000000000000000000000000868B897DFFFFFF7FEFF0F07FEEEFEF7FEEEF EF7FEEEFEF7FEEEFEF7FEEEFEF7FEFF0F07FEFF0F07FFFFFFF7F858A887F0000 0000000000000000000000000000868B897DFFFFFF7FEFF0F07FC7C8C87F979B 9AD0858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF8A8F8DAB868B897DFFFFFF7FEFF0F07FEFF0F07F878C 8AFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF868B897DFFFFFF7FEFF0F07FC7C8C87F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEFF0F07FEEEFEF7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7 C7FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEEEFEF7FC5C6C67F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFFFFFF7FEDEEEE7FECEDED7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0 F0FFEFF0F0FFFFFFFFFF858A88FF868B897DFEFEFE7FECECEC7FC3C4C47F868B 89FDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFFF3F3F3FF858A88FF868B897DF9F9F97FEBEBEB7FEAEAEA7F878C 8AFDFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFC6C7C7FFEEEE EEFFF6F7F7FFC3C4C3FF858A88FF868B897DF2F3F37FF3F4F47FF2F2F27F878C 8AFDFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FF898E8CFF898E 8CFF898E8CFF898E8CFF858A88FF8B908F50868B897F868B897F868B897F868B 89FDFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFF959A98FFFAFA FAFFF7F8F8FFE2E4E3FF858A88FF00000000000000000000000000000000868B 89FBF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFFAFAFAFF959A98FFFAFA FAFFE2E3E3FF858A88FF858A88CC00000000000000000000000000000000868B 89FBF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFBFBFFD4D4D4FF969A98FFE2E4 E3FF858A88FF858A887F0000000000000000000000000000000000000000898E 8CA3868B89FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88BF858A887F0000000000000000000000000000000000000000000000005C5C 5C015E5F5FBB5C5C5CFF5C5C5CFF5C5C5CFF5C5C5CFF5E5F5FBB5C5C5C010000 00000000000000000000000000000000000001446C6401446DEE01446CFF0344 6BFF5B5C5CFF899595FF8A9797FF8A9797FF899595FF5B5C5CFF03446BFF0144 6CFF01446CED00436B5D0000000000426A0401446DF32484C0FF3E7EA4FF646D 70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E7EFF5E5E5EFF646C6EFF407C A1FF237FB9FF01436CF000426A0200426A1002466FF82788C6FF646F71FFF1F1 F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBBBBFFE0E0E0FFF2F2F2FF646D 6EFF2787C5FF00426AFC00426A0800426A1002466FF82788C6FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466FF82687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5B3FFEEEFEFFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466FF82687C5FF646866FFFFFF FFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEFEFFFEBEDEDFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2B1FFE8EAEAFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EAEAFFD9DBDBFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DADAFFCACDCCFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002466EF82687C5FF646866FFFFFF FFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BAB9FFB5B9B8FFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF646866FFFFFF FFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFFFFFFFFFFFFFFFFFFFFFF6469 67FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF646866FFFFFF FFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFFFFFFFFFFFFFF646967FF2787 C5FF2886C2FF00426AFC00426A0800426A1002456EF82687C5FF636D70FFEDEE EDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFEFEFF646967FF2787C5FF2787 C5FF2787C5FF00426AFC00426A0800426A0401436CF3237FBAFF3B7DA7FF646F 73FF686C6AFF686C6AFF686C6AFF686C6AFF686C6AFF3D7CA3FF3D7CA3FF3D7C A3FF227BB3FF01436BF000426A020000000001436B6401436CEE01446CFF0144 6CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01436BED00426A5D0000000000000000000000008F9391BF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF8F9391BF00000000000000000000000000000000858A88FFF1F1F1FFEBEB EBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9 E9FF858A88FF0000000000000000874A207F874A20FF858A88FFE7E7E7FFD7D7 D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5D5FFD5D5D5FFDADADAFFDCDC DCFF858A88FF874A20FF874A207F874A20FFDDBB9CFF777C7AFFD9D9D9FFBDBD BDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBCBCFFBCBCBCFFBFBFBFFFC0C0 C0FF777C7AFFDDBB9CFF874A20FF874A20FFDDBB9CFF6A5B4EFFC9C9C9FF9C9C 9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB9CFF86522CFF86512BFF8651 2BFF86512BFF86512BFF86512BFF86522CFF86522CFF86522CFF86522CFF8652 2CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB9CFFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFDDBB9CFF874A20FF874920C0874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874920C000000000000000006A6E6DFFCCCDCDFA6569 68F4AAACABF96C6F6EFEAEB0AFFB6B6E6DFDB0B2B1FA6E7271FDB2B3B3FB6C70 6FFD0000000000000000000000000000000000000000727675FAC7C9C8EB797E 7BE89E9F9EE98E8F8FF6ADAEADED8C8D8CF1AEAFAEE77C807FFFB7B8B7EB7679 78F50000000000000000000000000000000000000000858988EFC9CBCAA28388 85E8C4C4C4E9838885F0CACCCBEB9B9D9CE8C0C0C0DF7C807FFFE2E3E3F28B8E 8DF0000000000000000000000000000000008C908F99858988ECF6F6F6FB999C 9BFFABADACFF838885E7DEDFDEED9C9F9EC6CCCECDDB989B9AFFEBEBEBF09699 98E6959797670000000000000000000000008C908FFDFAFAFAFF949897F9999C 9BD6999C9BEF969A98FFEDEEEEF1949997CB9B9E9DFF989B9AFF8B8E8DFFFFFF FFDE8F9392BC0000000000000000000000008C908F99919493FFADB0AFFF0000 000000000000909492FF9DA09FFD989C9AE50000000000000000A5A8A7677B7E 7DC9989B9AA40000000000000000FFFFFF00898D8B94858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF898E8C94FFFFFF00FFFFFF00858A88FEFDFDFDFFFEFEFEFFFEFE FEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFAFAFAFFFAFA FAFFF9F9F9FF888D8BFEFFFFFF00FFFFFF00858A88FFFDFDFDFFD6BEA8FFD7BF A9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1ABFFD9C1 ABFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFEFEFEFFD7BFA9FFAF97 81FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF9781FFAF9781FFAF9781FFDAC2 ACFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3ADFFDBC3ADFFDBC3ADFFDBC3 ADFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFDFDFDFFD8C0AAFFAF97 81FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4AEFFDCC4AEFFDCC4AEFFEBEB EBFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFD9C1ABFFAF97 81FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF9781FFAF9781FFDDC5AFFFECEC ECFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFDAC2ACFFDAC2 ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDEC6B0FFEEEE EEFFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFCFCFCFFDAC2ACFFDBC3 ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6B0FFDFC7B1FFDFC7B1FFF0F0 F0FFF8F8F8FF888D8BFFFFFFFF00FFFFFF00858A88FFFBFBFBFFDAC2ACFFAF97 81FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFE0C8B2FFF2F2 F2FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFFBFBFBFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8B2FF000000FFE1C9B3FFF4F4 F4FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFFAFAFAFFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF5F5F5FFF6F6F6FFF6F6 F6FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFF9F9F9FFDBC3ADFFB098 82FFB09882FFB09882FFB09882FFE0C8B2FF000000FFF7F7F7FFF8F8F8FFF7F7 F7FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FFF9F9F9FFDBC3ADFFDCC4 AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF000000FFF7F7F7FFF9F9F9FFF8F8 F8FFF7F7F7FF888D8BFFFFFFFF00FFFFFF00858A88FEF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8F8FF000000FFF8F8F8FFF8F8 F8FFF8F8F8FF888D8BFEFFFFFF00FFFFFF00898E8C94858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8D94FFFFFF00808080FF808080FF808080FF808080FF8080 80FF808080FF808080FF0000000000000000000000003516E8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF808080FF00000000583EE0FF2A0BE4FF1A00A8FF000000000000 0000000000000000000000000000808080FF808080FF808080FF808080FF8080 80FFFFFFFFFF808080FF1F00D3FF6E56E4FFCBC2F9FF1A00A8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF1F00CCFF9F91F0FFC3BAF8FFCFC7F9FF1A00A8FF000000000000 0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF583E E0FF3817EAFFBEB4F6FFAC9FF6FF7C66F0FFCAC2F9FF1B00B7FF1A00A8FF1A00 A8FF1A00A8FF1A00A8FF1E00CBFF808080FF808080FF808080FF1F01D5FF745D E6FFC1B7F8FF8F7CF2FF745DEFFF725BF0FFC8BFF9FFC5BBFAFFC2B7F9FFBDB2 F8FFB8ADF7FFB3A7F6FF1A00A8FFFFFFFFFFFFFFFFFF1E00D2FF9687EFFFAEA1 F6FF735CEFFF6B53EEFF6B52F1FF6A51F2FF694EF3FF664AF4FF5F43F3FF5537 F4FF4929F7FFB2A5F7FF1A00A8FF808080FF1E00D2FFAA9CF4FF8D79F2FF5B40 EEFF5B42EEFF6146EEFF6448F1FF5F43F4FF4C2BFAFF3B17FFFF2E06FFFF2701 FFFF2700FFFFAB9EF8FF1A00A8FFFFFFFFFF1A00A8FF9686F1FF745DEFFF2B07 FFFF2500FAFF2400F4FF2500EEFF2400EEFF2700F4FF2700F8FF2600F8FF2500 F4FF2500EDFF9E8DF8FF1A00A8FFFFFFFFFFFFFFFFFF1C00C4FF6D57E8FF7963 F0FF2300E7FF2200E0FF2300EAFF2500F4FF2800FCFF2902FFFF2902FFFF2600 FCFF2600F3FF9F8EF9FF1A00A8FF808080FF808080FFFFFFFFFF1F00D3FF4325 EBFF8D78F3FF3914FFFF2400EEFF2700F9FFA796FEFFA999FFFFA999FFFFA796 FEFFA393FCFFA090FAFF1A00A8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF583E E0FF2302DEFF8873F3FF6B4FF8FF2700FEFFA898FFFF1E00BDFF1A00A8FF1A00 A8FF1A00A8FF1A00A8FF1E00CBFF808080FF808080FF808080FF808080FF8080 80FF808080FF1D00C0FF6D53EEFF8C77FCFFA898FFFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000002000D4FF4022EFFFA08EFDFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000005740E0FF2100DDFF1A00A8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000003816E8FF000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003516E8FF000000000000000000000000808080FF808080FF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FF280AE2FF5840E0FF00000000808080FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 00001A00A8FFC5BDF8FF6953E4FF1F00D3FF808080FFFFFFFFFF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FFCAC1F9FFBFB4F7FF9C8DF0FF1F00CAFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF1E00CBFF1A00A8FF1A00A8FF1A00A8FF1A00 A8FF1B00B7FFC7BFF8FF775FF0FFAA9CF6FFBDB3F6FF3817EAFF583EE0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF1A00A8FFB0A3F6FFB3A7F6FFB7ACF7FFBCB1 F7FFC0B5F8FFC4BAF9FF7058F2FF765DF3FF917EF5FFC3B9F9FF745FE6FF1F01 D5FF808080FF808080FF808080FF1A00A8FFAD9FF5FF3512FBFF4121F6FF4B2E F3FF593EF1FF6349F2FF694FF4FF6F53F5FF7157F4FF7A63F4FFB2A5F8FF9989 F0FF1F00D3FFFFFFFFFFFFFFFFFF1A00A8FFA697F5FF2200E8FF2300E5FF2500 F1FF2F0BFFFF4627FBFF6143F6FF684BF8FF694DF7FF684DF5FF654AF3FF917E F5FFADA1F4FF1F00D3FF808080FF1A00A8FF9887F3FF1F00D2FF2000D7FF2300 E1FF2300EAFF2500F2FF2600F7FF2904FFFF330EFFFF3B19FFFF3F1DFEFF7B63 F4FF9988F2FF1A00A8FFFFFFFFFF1A00A8FF9887F3FF1F00D2FF2000DBFF2300 E5FF2500EFFF2700F8FF2901FFFF2B04FFFF2901FFFF3009FFFF846DF9FF715A ECFF1F00C5FFFFFFFFFFFFFFFFFF1A00A8FF9887F3FF9887F3FF9B8AF6FF9F8E F9FFA291FBFFA695FDFF3009FFFF340EFFFF5634FFFF9884FCFF472DECFF2000 D4FFFFFFFFFF808080FF808080FF1E00CBFF1A00A8FF1A00A8FF1A00A8FF1A00 A8FF1D00BAFFA696FDFF3510FFFF7D64FFFF937FFCFF2302E3FF5740E0FFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 00001A00A8FFA696FDFF937DFFFF735CF4FF1D00C1FF808080FF808080FF8080 80FF808080FF808080FF808080FF000000000000000000000000000000000000 00001A00A8FF9E8CFCFF4324F0FF2100D5FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00001A00A8FF1F00DCFF5C41E0FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00003516E8FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end object ContextMenu: TPopupMenu left = 136 top = 136 object miUndoContext: TMenuItem Action = actEditUndo Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000066DBEAFF11A6C2FF0000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000043C4DBFF43C5D8FF0000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 000000000000000000000EAACBFF5DDAE9FF23A6C0FF00000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000002ACC8FF88E7F2FF11A2C2FF00000000000000000000 0000000000000000000000A0C4FF76EDFBFF00A0C4FF00000000000000000000 00000000000000A0C4FF6DE6F5FF76E2EFFF19A3C1FF00000000000000000000 00000000000000A0C4FF76EDFBFF76EDFBFF00A0C4FF00A0C4FF00A0C4FF00A0 C4FF01A9C4FF6EE1EEFF0FC9DFFF69E4F2FF1AA4C0FF00000000000000000000 000000A0C4FF76EDFBFF04C3DAFF76EDFBFF69EAF9FF69EAF9FF69EAF9FF69EA F9FF05DDF7FF0AC8DFFF07C2D8FF6FDCEBFF1BA3BFFF000000000000000000A0 C4FF79EDFBFF32E2F8FF2CDFF4FF04C0D6FF04C0D6FF04C0D6FF1DD2E8FF1DD2 E8FF1DD2E8FF0BC8DFFF6AE5F3FF1BABC5FF15A0BCFF0000000000A0C4FFADF3 FBFF2FE0F6FF32E2F8FF32E2F7FF32E2F7FF2FE0F5FF29DBF1FF1DD2E8FF1DD2 E8FF1DD2E8FF36D9ECFF40CDE1FF16A1BDFF00000000000000000000000000A0 C4FFADF3FBFF2FE0F6FF32E2F7FF29DBF1FF2FE0F5FF29DBF1FF16CDE3FF36D9 ECFF69E7F6FF41CEE3FF13A3C1FF000000000000000000000000000000000000 000000A0C4FFADF3FBFF31E1F6FF20E3FAFF73ECFAFF6FEBFAFF6EE8F7FF6CE8 F7FF14A1BCFF14A3C1FF00000000000000000000000000000000000000000000 00000000000000A0C4FFADF3FBFF25E4FBFF00A0C4FF00A0C4FF13A1BEFF159F BBFF1BA1BBFF0000000000000000000000000000000000000000000000000000 0000000000000000000000A0C4FFADF3FBFF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000A0C4FF00A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000A0C4FF00000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditUndoExecute end object miSeparator1: TMenuItem Caption = '-' end object miCutContext: TMenuItem Action = actEditCut Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000E0EAAFF1010ABFF1616ABFF000000000000000000000000000000000000 0000000000000D0DAAFF0B0BAAFF0B0BA9FF0000000000000000000000001313 ABFF2727DBFF1F1FD0FF1D1DCEFF0707A8FF0000000000000000000000000000 00000808AAFF2222D4FF1D1DCFFF1D1DCEFF1313ABFF00000000000000000D0D ABFF1D1DCFFF000000000B0BB5FF2121D3FF0C0CAAFF00000000000000000909 AAFF2323D6FF0D0DB8FF000000001F1FD1FF1111ABFF00000000000000001414 ABFF2323D5FF00000000000000001D1DCEFF0A0AA9FF00000000000000000303 A8FF1A1BCAFF00000000000000002020D1FF1414ABFF00000000000000000000 00000606A8FF1F1FD0FF0303A8FF1415C0FF0101A6FF00000000000000001C1D CDFF1315C0FF0303A8FF1D1DCDFF0606A7FF0000000000000000000000000000 0000000000000707A9FF2020D2FF1E1ECEFF0E0FB7FF0205A4FF0304A8FF1A1A C9FF2020D1FF1F1FCBFF0A0AA9FF000000000000000000000000000000000000 000000000000000000001818AEFF1616ABFF0606A6FF454AA3FF0202A6FF191A C7FF1717ADFF1818AEFF00000000000000000000000000000000000000000000 000000000000000000000000000000000000848989FFC3C6C5FFAFB2B3FF2C2F 9CFF000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000008A8F8DFFB7BBBAFFE6E8E7FFA7ACAAFF8B90 8EFF878C8AFF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000888D8BFFDFE1E1FFF5F6F5FF979C9AFFA5A9 A8FF888D8BFF0000000000000000000000000000000000000000000000000000 000000000000000000008A8F8DFFB2B6B5FFF7F7F7FF888D8BFF9CA09FFFB3B6 B5FFB5BAB8FF888D8BFF00000000000000000000000000000000000000000000 00000000000000000000888D8BFFD9DCDBFFEFF0EFFF8E9391FF898E8CFFB3B8 B6FFCBCECDFF888D8BFF00000000000000000000000000000000000000000000 0000000000008A8F8DFFB0B5B3FFF6F7F7FF888D8BFF00000000000000008B90 8EFFC9CECCFFABAFAEFF888D8BFF000000000000000000000000000000000000 000000000000888D8BFFD0D4D2FFEFF0EFFF8F9492FF00000000000000000000 0000A7ACAAFFC3C8C6FF8A8F8DFF000000000000000000000000000000000000 0000000000008B908EFFF7F7F7FF888D8BFF0000000000000000000000000000 00008D9190FFD0D3D2FF8C918FFF000000000000000000000000000000000000 00000000000000000000888D8BFF909593FF0000000000000000000000000000 0000888D8BFF8C918FFF00000000000000000000000000000000 } OnClick = actEditCutExecute end object miCopyContext: TMenuItem Action = actEditCopy Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 00000000000000000000898E8CFF868B89FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF000000000000000000000000000000000000 00000000000000000000868B89FFF4F4F4FFF6F7F7FFF5F6F6FFFBFCFCFFFBFB FBFFD4D4D4FF969A98FFE2E4E3FF858A88FF0000000000000000000000000000 00000000000000000000868B89FFF9FAFAFFEFF0F0FFEFF0F0FFEFF0F0FFFAFA FAFFFAFAFAFF959A98FFFAFAFAFFE2E3E3FF858A88FF858A88FF000000000000 00000000000000000000868B89FFFDFEFEFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFFAFAFAFF959A98FFFAFAFAFFF7F8F8FFE2E4E3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FF898E8CFF898E8CFF898E8CFF898E8CFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEEEEEEFFF6F7F7FFC3C4C3FF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFFAFAFAFFF3F3F3FF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFEFF0F0FFC6C7C7FFC6C7C7FFC6C7 C7FFC6C7C7FFC6C7C7FFC6C7C7FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000868B89FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFFFFFFFFF858A88FF000000000000 00000000000000000000878C8AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF858A88FF000000000000 00000000000000000000979B9AFF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } OnClick = actEditCopyExecute end object miPasteContext: TMenuItem Action = actEditPaste Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000000000 000001436CFF01446CFF01446CFF01446CFF01446CFF01446CFF01446CFF0144 6CFF01446CFF01446CFF01446CFF01436BFF0000000000000000000000000143 6CFF237FBAFF3B7DA7FF646F73FF686C6AFF686C6AFF686C6AFF686C6AFF686C 6AFF3D7CA3FF3D7CA3FF3D7CA3FF227BB3FF01436BFF00000000000000000245 6EFF2687C5FF636D70FFEDEEEDFFFEFEFEFFFEFEFEFFFEFEFEFFEEEFEFFFFDFE FEFF646967FF2787C5FF2787C5FF2787C5FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE4E7E7FFD5D8D8FFBEC2C1FFB4B7B7FFFFFF FFFFFFFFFFFF646967FF2787C5FF2886C2FF00426AFF00000000000000000245 6EFF2687C5FF646866FFFFFFFFFFE7E9E9FFE5E7E7FFD6D9D9FFB6B9B9FFFFFF FFFFFFFFFFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEAECECFFE8EAEAFFE6E8E8FFCBCECDFFB6BA B9FFB5B9B8FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEDEEEEFFEBECECFFE9EBEBFFE7E9E9FFD8DA DAFFCACDCCFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFEEEFEFFFECEDEDFFEAEBEBFFE8EA EAFFD9DBDBFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6EFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB4B4B2FFB2B2 B1FFE8EAEAFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEDEF EFFFEBEDEDFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2687C5FF646866FFFFFFFFFFEFF0F0FFB5B5B3FFB5B5B3FFB5B5B3FFB5B5 B3FFEEEFEFFFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646866FFFFFFFFFFEFF0F0FFEFF0F0FFEFF0F0FFEFF0F0FFEFF0 F0FFEFF0F0FFFFFFFFFF646967FF2886C2FF00426AFF00000000000000000246 6FFF2788C6FF646F71FFF1F1F1FFE0E0E0FFBBBBBBFFBBBBBBFFBBBBBBFFBBBB BBFFE0E0E0FFF2F2F2FF646D6EFF2787C5FF00426AFF00000000000000000144 6DFF2484C0FF3E7EA4FF646D70FF5E5E5EFF7C7F7FFF7D8080FF7D8080FF7B7E 7EFF5E5E5EFF646C6EFF407CA1FF237FB9FF01436CFF00000000000000000000 000001446DFF01446CFF03446BFF5B5C5CFF899595FF8A9797FF8A9797FF8995 95FF5B5C5CFF03446BFF01446CFF01446CFF0000000000000000000000000000 00000000000000000000000000005E5F5FFF5C5C5CFF5C5C5CFF5C5C5CFF5C5C 5CFF5E5F5FFF0000000000000000000000000000000000000000 } OnClick = actEditPasteExecute end object miDeleteContext: TMenuItem Action = actEditDelete Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 2000000000000004000064000000640000000000000000000000000000008C90 8FFF919493FFADB0AFFF0000000000000000909492FF9DA09FFF989C9AFF0000 000000000000000000007B7E7DFF989B9AFF0000000000000000000000008C90 8FFFFAFAFAFF949897FF999C9BFF999C9BFF969A98FFEDEEEEFF949997FF9B9E 9DFF989B9AFF8B8E8DFFFFFFFFFF8F9392FF0000000000000000000000008C90 8FFF858988FFF6F6F6FF999C9BFFABADACFF838885FFDEDFDEFF9C9F9EFFCCCE CDFF989B9AFFEBEBEBFF969998FF000000000000000000000000000000000000 0000858988FFC9CBCAFF838885FFC4C4C4FF838885FFCACCCBFF9B9D9CFFC0C0 C0FF7C807FFFE2E3E3FF8B8E8DFF000000000000000000000000000000000000 0000727675FFC7C9C8FF797E7BFF9E9F9EFF8E8F8FFFADAEADFF8C8D8CFFAEAF AEFF7C807FFFB7B8B7FF767978FF000000000000000000000000000000000000 00006A6E6DFFCCCDCDFF656968FFAAACABFF6C6F6EFFAEB0AFFF6B6E6DFFB0B2 B1FF6E7271FFB2B3B3FF6C706FFF000000000000000000000000874920FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874920FF874A20FFDDBB 9CFFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFCF9F 72FFCF9F72FFCF9F72FFCF9F72FFCF9F72FFDDBB9CFF874A20FF874A20FFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB 9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFFDDBB9CFF874A20FF874A20FFDDBB 9CFFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFCA8A 58FFCA8A58FFCA8A58FFCA8A58FFCA8A58FFDDBB9CFF874A20FF874A20FFDDBB 9CFF86522CFF86512BFF86512BFF86512BFF86512BFF86512BFF86522CFF8652 2CFF86522CFF86522CFF86522CFF86522CFFDDBB9CFF874A20FF874A20FFDDBB 9CFF6A5B4EFFC9C9C9FF9C9C9CFF9C9C9CFF9C9C9CFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF6A5B4EFFDDBB9CFF874A20FF874A20FFDDBB 9CFF777C7AFFD9D9D9FFBDBDBDFFBDBDBDFFBDBDBDFFBDBDBDFFBCBCBCFFBCBC BCFFBCBCBCFFBFBFBFFFC0C0C0FF777C7AFFDDBB9CFF874A20FF00000000874A 20FF858A88FFE7E7E7FFD7D7D7FFD6D6D6FFD6D6D6FFD6D6D6FFD6D6D6FFD5D5 D5FFD5D5D5FFDADADAFFDCDCDCFF858A88FF874A20FF00000000000000000000 0000858A88FFF1F1F1FFEBEBEBFFEBEBEBFFEBEBEBFFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FF858A88FF0000000000000000000000000000 00008F9391FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF8F9391FF0000000000000000 } OnClick = actEditDeleteExecute end object miSeparator2: TMenuItem Caption = '-' end object miSelectAllContext: TMenuItem Action = actEditSelectAll Bitmap.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 200000000000000400006400000064000000000000000000000000000000898E 8CFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF8A8F8DFF0000000000000000858A 88FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FFF8F8F8FF000000FFF8F8 F8FF000000FFF8F8F8FFF8F8F8FFF8F8F8FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF7F7F7FFF9F9F9FFF8F8F8FFF7F7F7FF888D8BFF0000000000000000858A 88FFF9F9F9FFDBC3ADFFB09882FFB09882FFB09882FFB09882FFE0C8B2FF0000 00FFF7F7F7FFF8F8F8FFF7F7F7FFF7F7F7FF888D8BFF0000000000000000858A 88FFFAFAFAFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDFC7B1FFE0C8B2FF0000 00FFF5F5F5FFF6F6F6FFF6F6F6FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDBC3ADFFDCC4AEFFDDC5AFFFDEC6B0FFDEC6B0FF000000FFE0C8 B2FF000000FFE1C9B3FFF4F4F4FFF7F7F7FF888D8BFF0000000000000000858A 88FFFBFBFBFFDAC2ACFFAF9781FFAF9781FFAF9781FFAF9781FFAF9781FFAF97 81FFAF9781FFE0C8B2FFF2F2F2FFF7F7F7FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6B0FFDEC6 B0FFDFC7B1FFDFC7B1FFF0F0F0FFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFDAC2ACFFDAC2ACFFDBC3ADFFDCC4AEFFDDC5AFFFDDC5AFFFDEC6 B0FFDEC6B0FFDEC6B0FFEEEEEEFFF8F8F8FF888D8BFF0000000000000000858A 88FFFCFCFCFFD9C1ABFFAF9781FFAF9781FFAF9781FFAF9781FFDCC4AEFFAF97 81FFAF9781FFDDC5AFFFECECECFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDCC4 AEFFDCC4AEFFDCC4AEFFEBEBEBFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD8C0AAFFAF9781FFAF9781FFAF9781FFAF9781FFDBC3ADFFDBC3 ADFFDBC3ADFFDBC3ADFFDBC3ADFFF8F8F8FF888D8BFF0000000000000000858A 88FFFEFEFEFFD7BFA9FFAF9781FFAF9781FFAF9781FFAF9781FFDAC2ACFFAF97 81FFAF9781FFAF9781FFDAC2ACFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFD6BEA8FFD7BFA9FFD7BFA9FFD8C0AAFFD8C0AAFFD9C1ABFFD9C1 ABFFD9C1ABFFD9C1ABFFD9C1ABFFF8F8F8FF888D8BFF0000000000000000858A 88FFFDFDFDFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFAFAFAFFFAFAFAFFF9F9F9FF888D8BFF0000000000000000898D 8BFF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF898E8CFF00000000 } OnClick = actEditSelectAllExecute end end object pmEncodingLeft: TPopupMenu left = 256 top = 144 end object pmEncodingRight: TPopupMenu left = 319 top = 144 end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ukastoolitemsextended.pas�������������������������������������������������������0000644�0001750�0000144�00000024025�12205740427�020443� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Extended tool items types for KASToolBar Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 uKASToolItemsExtended; {$mode objfpc}{$H+} interface uses Classes, SysUtils, KASToolItems, KASToolBar, IniFiles, DCXmlConfig, uDrive, DCBasicTypes, uFormCommands; type { TKASCommandItem } TKASCommandItem = class(TKASNormalItem) strict private FCommands: IFormCommands; strict protected procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); override; public Command: String; Params: TDynamicStringArray; constructor Create(AFormCommands: IFormCommands); reintroduce; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; end; { TKASProgramItem } TKASProgramItem = class(TKASNormalItem) Command: String; Params: String; StartPath: String; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; end; { TKASDriveItem } TKASDriveItem = class(TKASNormalItem) Drive: PDrive; procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; end; TKASToolBarIniLoader = class; TOnLoadIniItem = procedure (Loader: TKASToolBarIniLoader; var Item: TKASToolItem; const Shortcut: String) of object; TOnOpenIniFile = function (FileName: String): TIniFile of object; { TKASToolBarIniLoader } TKASToolBarIniLoader = class strict private FCommands: IFormCommands; FDepthLevel: Integer; // In case .bar files reference each other public constructor Create(AFormCommands: IFormCommands); reintroduce; procedure Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem); end; { TKASToolBarExtendedLoader } TKASToolBarExtendedLoader = class(TKASToolBarLoader) strict private FCommands: IFormCommands; protected function CreateItem(Node: TXmlNode): TKASToolItem; override; public constructor Create(AFormCommands: IFormCommands); reintroduce; end; implementation uses DCClassesUtf8, DCStrUtils; const CommandItemConfigNode = 'Command'; ProgramItemConfigNode = 'Program'; DriveItemConfigNode = 'Drive'; { TKASDriveItem } procedure TKASDriveItem.Assign(OtherItem: TKASToolItem); var DriveItem: TKASDriveItem; begin inherited Assign(OtherItem); if OtherItem is TKASDriveItem then begin DriveItem := TKASDriveItem(OtherItem); Drive := DriveItem.Drive; end; end; function TKASDriveItem.Clone: TKASToolItem; begin Result := TKASDriveItem.Create; Result.Assign(Self); end; function TKASDriveItem.ConfigNodeName: String; begin Result := DriveItemConfigNode; end; { TKASCommandItem } procedure TKASCommandItem.Assign(OtherItem: TKASToolItem); var CommandItem: TKASCommandItem; begin inherited Assign(OtherItem); if OtherItem is TKASCommandItem then begin CommandItem := TKASCommandItem(OtherItem); Command := CommandItem.Command; Params := Copy(CommandItem.Params); end; end; function TKASCommandItem.Clone: TKASToolItem; begin Result := TKASCommandItem.Create(FCommands); Result.Assign(Self); end; function TKASCommandItem.ConfigNodeName: String; begin Result := CommandItemConfigNode; end; constructor TKASCommandItem.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; procedure TKASCommandItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); Params := nil; Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Command') = 0 then Command := Config.GetContent(Node) else if Node.CompareName('Param') = 0 then AddString(Params, Config.GetContent(Node)); Node := Node.NextSibling; end; if Hint = EmptyStr then begin Hint := FCommands.GetCommandCaption(Command, cctLong); end; end; procedure TKASCommandItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); var AParam: String; begin inherited SaveContents(Config, Node); Config.AddValue(Node, 'Command', Command); for AParam in Params do Config.AddValueDef(Node, 'Param', AParam, ''); end; procedure TKASCommandItem.SaveHint(Config: TXmlConfig; Node: TXmlNode); begin if Hint <> FCommands.GetCommandCaption(Command, cctLong) then begin Config.AddValueDef(Node, 'Hint', Hint, ''); end; // else don't save default text for the hint so that a different text // can be loaded if the language changes. end; { TKASProgramItem } procedure TKASProgramItem.Assign(OtherItem: TKASToolItem); var ProgramItem: TKASProgramItem; begin inherited Assign(OtherItem); if OtherItem is TKASProgramItem then begin ProgramItem := TKASProgramItem(OtherItem); Command := ProgramItem.Command; Params := ProgramItem.Params; StartPath := ProgramItem.StartPath; end; end; function TKASProgramItem.Clone: TKASToolItem; begin Result := TKASProgramItem.Create; Result.Assign(Self); end; function TKASProgramItem.ConfigNodeName: String; begin Result := ProgramItemConfigNode; end; procedure TKASProgramItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Command') = 0 then Command := Config.GetContent(Node) else if Node.CompareName('Params') = 0 then Params := Config.GetContent(Node) else if Node.CompareName('StartPath') = 0 then StartPath := Config.GetContent(Node); Node := Node.NextSibling; end; end; procedure TKASProgramItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin inherited SaveContents(Config, Node); Config.AddValueDef(Node, 'Command', Command, ''); Config.AddValueDef(Node, 'Params', Params, ''); Config.AddValueDef(Node, 'StartPath', StartPath, ''); end; { TKASToolBarExtendedLoader } constructor TKASToolBarExtendedLoader.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; function TKASToolBarExtendedLoader.CreateItem(Node: TXmlNode): TKASToolItem; begin Result := inherited CreateItem(Node); if not Assigned(Result) then begin if Node.CompareName(CommandItemConfigNode) = 0 then Result := TKASCommandItem.Create(FCommands) else if Node.CompareName(ProgramItemConfigNode) = 0 then Result := TKASProgramItem.Create else if Node.CompareName(DriveItemConfigNode) = 0 then Result := TKASDriveItem.Create; end; end; { TKASToolBarIniLoader } constructor TKASToolBarIniLoader.Create(AFormCommands: IFormCommands); begin FCommands := AFormCommands; end; procedure TKASToolBarIniLoader.Load(IniFileName: String; ToolBar: TKASToolBar; ToolItemMenu: TKASMenuItem; OnLoadIniItem: TOnLoadIniItem); var BtnCount, I: Integer; CommandItem: TKASCommandItem; ProgramItem: TKASProgramItem; Command, Menu, Button, Param, Path, Misk: String; Item: TKASToolItem; IniFile: TIniFileEx = nil; begin if (FDepthLevel < 10) then begin IniFile := TIniFileEx.Create(IniFileName, fmOpenRead or fmShareDenyNone); if Assigned(IniFile) then try Inc(FDepthLevel); BtnCount := IniFile.ReadInteger('Buttonbar', 'Buttoncount', 0); for I := 1 to BtnCount do begin Command := IniFile.ReadString('Buttonbar', 'cmd' + IntToStr(I), ''); Menu := IniFile.ReadString('Buttonbar', 'menu' + IntToStr(I), ''); Button := IniFile.ReadString('Buttonbar', 'button' + IntToStr(I), ''); Param := IniFile.ReadString('Buttonbar', 'param' + IntToStr(I), ''); Path := IniFile.ReadString('Buttonbar', 'path' + IntToStr(I), ''); Misk := IniFile.ReadString('Buttonbar', 'misk' + IntToStr(I), ''); Item := nil; if Menu = '-' then begin Item := TKASSeparatorItem.Create; end else if (Length(Command) > 3) and (Copy(Command, 1, 3) = 'cm_') then begin CommandItem := TKASCommandItem.Create(FCommands); CommandItem.Command := Command; CommandItem.Hint := Menu; CommandItem.Icon := Button; if Param <> EmptyStr then AddString(CommandItem.Params, Param); Item := CommandItem; end else begin ProgramItem := TKASProgramItem.Create; ProgramItem.Command := Command; ProgramItem.Hint := Menu; ProgramItem.Icon := Button; ProgramItem.Params := Param; ProgramItem.StartPath := Path; Item := ProgramItem; end; if Assigned(OnLoadIniItem) then OnLoadIniItem(Self, Item, Misk); if Assigned(ToolBar) then ToolBar.AddButton(Item); if Assigned(ToolItemMenu) then ToolItemMenu.SubItems.Add(Item); end; finally IniFile.Free; Dec(FDepthLevel); end; end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udetectstr.pas������������������������������������������������������������������0000644�0001750�0000144�00000024307�12612505011�016176� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Detect string parser. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Based on TMathControl by Vimil Saju 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 uDetectStr; {$mode objfpc}{$H+} interface uses SysUtils, Classes, uMasks, uFile; type TMathtype=(mtnil,mtoperator,mtlbracket,mtrbracket,mtoperand); type TMathOperatortype=(monone, // NULL moequ, // = moneq, // != replaced with # moles, // < momor, // > moand, // & moor, // | monot // NOT ); type pmathchar = ^Tmathchar; TMathChar = record case mathtype: Tmathtype of mtoperand:(data:shortstring); mtoperator:(op:TMathOperatortype); end; type { TParserControl } TParserControl = class public function TestFileResult(const aFile: TFile): boolean; overload; function TestFileResult(const aFileName: String): boolean; overload; private input,output,stack:array of tmathchar; fmathstring:string; fforce:boolean; function getresult(const aFile: TFile):boolean; function calculate(aFile: TFile; operand1,operand2,Aoperator:Tmathchar):string; function getoperator(c:String):TMathOperatortype; function getoperand(mid:integer;var len:integer):string; procedure processstring; procedure convertinfixtopostfix; function isdigit(c:String):boolean; function isoperator(c:String):boolean; function getprecedence(mop:TMathOperatortype):integer; function BooleanToStr(x:boolean):string; function StrToBoolean(s:string):boolean; public destructor Destroy; override; published property DetectStr:string read fmathstring write fmathstring; property IsForce:boolean read fforce write fforce; end; implementation uses uDebug, uFileProperty, uFileSystemFileSource; function TParserControl.calculate(aFile: TFile; operand1,operand2,Aoperator:Tmathchar):string; var tmp, data1: String; begin result:='false'; data1:= UpperCase(operand1.data); //Not if (operand1.data='NOT') and ((operand2.data='true') or (operand2.data='false')) then begin Result:=BooleanToStr(Not StrToBoolean(operand2.data)); end; // & | if ((operand1.data='true') or (operand1.data='false')) and ((operand2.data='true') or (operand2.data='false')) then begin case Aoperator.op of moand: result:= BooleanToStr((StrToBoolean(operand1.data)) and (StrToBoolean(operand2.data))); moor: result:=BooleanToStr((StrToBoolean(operand1.data)) or (StrToBoolean(operand2.data))); end; end; //EXT= EXT!= if (data1 = 'EXT') then begin //--------------------- tmp:= aFile.Extension; tmp:= UpperCase(tmp); tmp:= '"'+tmp+'"'; //--------------------- case Aoperator.op of moequ: Result:=BooleanToStr(MatchesMask(tmp,operand2.data)); moneq: Result:=BooleanToStr(not MatchesMask(tmp,operand2.data)); end; end; //SIZE > < = != if (data1 = 'SIZE') and (fpSize in aFile.SupportedProperties) then begin tmp:= IntToStr(aFile.Size); case Aoperator.op of moequ: Result:= BooleanToStr(strtoint(tmp)=strtoint(operand2.data)); moneq: Result:= BooleanToStr(strtoint(tmp)<>strtoint(operand2.data)); moles: Result:= BooleanToStr(strtoint(tmp)<strtoint(operand2.data)); momor: Result:= BooleanToStr(strtoint(tmp)>strtoint(operand2.data)); end; end; { case Aoperator.op of moneq: ; moequ: ; moles: ; momor: ; moor: ; moand: ; monot: ; end;} end; function TParserControl.TestFileResult(const aFile: TFile):boolean; begin Result:= getresult(aFile); end; function TParserControl.TestFileResult(const aFileName: String): boolean; var aFile: TFile; begin aFile:= TFileSystemFileSource.CreateFileFromFile(aFileName); try DCDebug('aFile.Extension = ' + aFile.Extension); Result:= getresult(aFile); finally aFile.Free; end; end; function TParserControl.getresult(const aFile: TFile):boolean; var i:integer; tmp1,tmp2,tmp3:tmathchar; begin if fmathstring='' then begin Result:=true; exit; end; convertinfixtopostfix; setlength(stack,0); for i:=0 to length(output)-1 do begin if output[i].mathtype=mtoperand then begin setlength(stack,length(stack)+1); stack[length(stack)-1]:=output[i]; end else if output[i].mathtype=mtoperator then begin tmp1:=stack[length(stack)-1]; tmp2:=stack[length(stack)-2]; setlength(stack,length(stack)-2); tmp3.mathtype:=mtoperand; tmp3.data:=calculate(aFile, tmp2,tmp1,output[i]); setlength(stack,length(stack)+1); stack[length(stack)-1]:=tmp3; end; end; result:=strToBoolean(stack[0].data); setlength(stack,0); setlength(input,0); setlength(output,0); end; function TParserControl.getoperator(c:String):TMathOperatortype; begin result:=monone; if c='<' then result:=moles else if c='>' then result:=momor else if c='&' then result:=moand else if c='=' then result:=moequ else if c='#' then result:=moneq else if c='|' then result:=moor else if c='!' then result:=monot; end; function TParserControl.getoperand(mid:integer;var len:integer):string; var i,j:integer; begin Result := ''; j:=1; for i:=mid to length(fmathstring)-1 do begin if isdigit(fmathstring[i]) then begin if j<=20 then Result:=Result+fmathstring[i]; j:=j+1; end else break; end; len:=length(Result); end; procedure TParserControl.processstring; var i:integer; numlen:integer; begin //--------------------- while pos('!=',fmathstring)>0 do begin i:=pos('!=',fmathstring); delete(fmathstring,i,2); insert('#',fmathstring,i); end; //--------------------- fmathstring:= StringReplace(fmathstring, 'FORCE', BooleanToStr(fforce), [rfReplaceAll, rfIgnoreCase]); //--------------------- fmathstring:= StringReplace(fmathstring, 'MULTIMEDIA', 'true', [rfReplaceAll, rfIgnoreCase]); //--------------------- numlen:=1; while numlen < length(fmathstring) do if (fmathstring[numlen]='!') and (fmathstring[numlen+1]<>'=') then begin i:=numlen; delete(fmathstring,i,1); insert('NOT!',fmathstring,i); inc(numlen,4); end else inc(numlen); //--------------------- i:=0; numlen:=0; setlength(output,0); setlength(input,0); setlength(stack,0); fmathstring:='('+fmathstring+')'; setlength(input,length(fmathstring)); while i<=length(fmathstring)-1 do begin if fmathstring[i+1]='(' then begin input[i].mathtype:=mtlbracket; i:=i+1; end else if fmathstring[i+1]=')' then begin input[i].mathtype:=mtrbracket; i:=i+1; end else if isoperator(fmathstring[i+1]) then begin input[i].mathtype:=mtoperator; input[i].op:=getoperator(fmathstring[i+1]); i:=i+1; end else if isdigit(fmathstring[i+1]) then begin input[i].mathtype:=mtoperand; input[i].data:=getoperand(i+1,numlen); i:=i+numlen; end else {if fmathstring[i+1]=' ' then} inc(i); end; end; function TParserControl.isoperator(c:String):boolean; begin result:=false; if (c='=') or (c='#') or (c='!') or (c='&') or (c='<') or (c='>') or (c='|') then result:=true; end; function TParserControl.isdigit(c:String):boolean; begin result:=false; if pos(c,'=#!&<>|() ')<=0 then result:=true; end; function TParserControl.getprecedence(mop:TMathOperatortype):integer; begin result:=-1; case mop of moor:result:=1; moand:result:=1; moequ:result:=2; moneq:result:=2; moles:result:=2; momor:result:=2; monot:result:=2; end; end; function TParserControl.BooleanToStr(x: boolean): string; begin if x then Result:='true' else Result:='false'; end; function TParserControl.StrToBoolean(s: string): boolean; begin if s='true' then Result:=true else Result:=false; end; destructor TParserControl.Destroy; begin inherited Destroy; end; procedure TParserControl.convertinfixtopostfix; var i,j,prec:integer; begin processstring; for i:=0 to length(input)-1 do begin if input[i].mathtype=mtoperand then begin setlength(output,length(output)+1); output[length(output)-1]:=input[i]; end else if input[i].mathtype=mtlbracket then begin setlength(stack,length(stack)+1); stack[length(stack)-1]:=input[i]; end else if input[i].mathtype=mtoperator then begin prec:=getprecedence(input[i].op); j:=length(stack)-1; if j>=0 then begin while(getprecedence(stack[j].op)>=prec) and (j>=0) do begin setlength(output,length(output)+1); output[length(output)-1]:=stack[j]; setlength(stack,length(stack)-1); j:=j-1; end; setlength(stack,length(stack)+1); stack[length(stack)-1]:=input[i]; end; end else if input[i].mathtype=mtrbracket then begin j:=length(stack)-1; if j>=0 then begin while(stack[j].mathtype<>mtlbracket) and (j>=0) do begin setlength(output,length(output)+1); output[length(output)-1]:=stack[j]; setlength(stack,length(stack)-1); j:=j-1; end; if j>=0 then setlength(stack,length(stack)-1); end; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/flinker.lrt���������������������������������������������������������������������0000644�0001750�0000144�00000000556�12567136531�015500� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMLINKER.CAPTION=Linker TFRMLINKER.GBSAVETO.CAPTION=Save to... TFRMLINKER.LBLFILENAME.CAPTION=&File name TFRMLINKER.BTNSAVE.CAPTION=... TFRMLINKER.GRBXCONTROL.CAPTION=Item TFRMLINKER.SPBTNUP.HINT=Up TFRMLINKER.SPBTNUP.CAPTION=&Up TFRMLINKER.SPBTNDOWN.HINT=Down TFRMLINKER.SPBTNDOWN.CAPTION=Do&wn TFRMLINKER.SPBTNREM.HINT=Delete TFRMLINKER.SPBTNREM.CAPTION=&Remove ��������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fFindDlg.lfm��������������������������������������������������������������������0000644�0001750�0000144�00000124521�12673215117�015473� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmFindDlg: TfrmFindDlg Left = 294 Height = 397 Top = 232 Width = 839 Caption = 'Find files' ClientHeight = 397 ClientWidth = 839 Constraints.MinHeight = 360 Constraints.MinWidth = 585 KeyPreview = True OnClose = frmFindDlgClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy OnKeyDown = FormKeyDown OnShow = frmFindDlgShow Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '1.4.3.0' object pnlFindFile: TPanel Left = 3 Height = 391 Top = 3 Width = 833 Align = alClient BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 391 ClientWidth = 833 TabOrder = 0 object pgcSearch: TPageControl Left = 0 Height = 391 Top = 0 Width = 724 ActivePage = tsStandard Align = alClient TabIndex = 0 TabOrder = 0 OnChange = pgcSearchChange object tsStandard: TTabSheet Caption = 'Standard' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 363 ClientWidth = 716 object gbDirectories: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = tsStandard AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 116 Top = 3 Width = 710 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Directories' ChildSizing.LeftRightSpacing = 5 ClientHeight = 96 ClientWidth = 706 TabOrder = 0 OnResize = gbDirectoriesResize object lblFindPathStart: TLabel AnchorSideLeft.Control = gbDirectories AnchorSideBottom.Control = cbFollowSymLinks AnchorSideBottom.Side = asrBottom Left = 5 Height = 15 Top = 4 Width = 87 Anchors = [akLeft, akBottom] Caption = 'Start in &directory' FocusControl = edtFindPathStart ParentColor = False end object cbFollowSymLinks: TCheckBox AnchorSideTop.Control = gbDirectories AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 597 Height = 19 Top = 0 Width = 104 Anchors = [akTop, akRight] Caption = 'Follow s&ymlinks' TabOrder = 0 end object edtFindPathStart: TDirectoryEdit AnchorSideLeft.Control = lblFindPathStart AnchorSideTop.Control = cbFollowSymLinks AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 5 Height = 23 Top = 19 Width = 670 ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 1 end object lblExcludeDirectories: TLabel AnchorSideLeft.Control = edtFindPathStart AnchorSideTop.Control = edtFindPathStart AnchorSideTop.Side = asrBottom Left = 5 Height = 15 Top = 45 Width = 117 BorderSpacing.Top = 3 Caption = 'E&xclude subdirectories' FocusControl = cmbExcludeDirectories ParentColor = False end object cmbExcludeDirectories: TComboBoxWithDelItems AnchorSideLeft.Control = lblExcludeDirectories AnchorSideTop.Control = lblExcludeDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlDirectoriesDepth Left = 5 Height = 23 Hint = 'Enter directories names that should be excluded from search separated with ";"' Top = 60 Width = 491 Anchors = [akTop, akLeft, akRight] BorderSpacing.Right = 5 BorderSpacing.Bottom = 5 ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 2 end object pnlDirectoriesDepth: TPanel AnchorSideTop.Control = lblExcludeDirectories AnchorSideRight.Control = gbDirectories AnchorSideRight.Side = asrBottom Left = 501 Height = 51 Top = 45 Width = 200 Anchors = [akTop, akRight] BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 51 ClientWidth = 200 TabOrder = 3 object lblSearchDepth: TLabel Left = 0 Height = 15 Top = 0 Width = 200 Caption = 'Search su&bdirectories:' FocusControl = cmbSearchDepth ParentColor = False end object cmbSearchDepth: TComboBox Left = 0 Height = 23 Top = 15 Width = 200 ItemHeight = 15 Style = csDropDownList TabOrder = 0 end end object cbSelectedFiles: TCheckBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbFollowSymLinks AnchorSideBottom.Control = cbFollowSymLinks AnchorSideBottom.Side = asrBottom Left = 422 Height = 19 Top = 0 Width = 169 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Selected directories and &files' OnChange = cbSelectedFilesChange TabOrder = 4 end end object gbFiles: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = gbDirectories AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 108 Top = 119 Width = 710 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Files' ChildSizing.LeftRightSpacing = 5 ClientHeight = 88 ClientWidth = 706 TabOrder = 1 object lblFindFileMask: TLabel AnchorSideLeft.Control = gbFiles AnchorSideBottom.Control = cbPartialNameSearch AnchorSideBottom.Side = asrBottom Left = 5 Height = 15 Top = 4 Width = 51 Anchors = [akLeft, akBottom] Caption = '&File mask' FocusControl = cmbFindFileMask Font.Style = [fsBold] ParentColor = False ParentFont = False end object cmbFindFileMask: TComboBoxWithDelItems AnchorSideLeft.Control = gbFiles AnchorSideTop.Control = lblFindFileMask AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 5 Height = 23 Hint = 'Enter files names separated with ";"' Top = 19 Width = 696 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 0 Text = '*' end object lblExcludeFiles: TLabel AnchorSideLeft.Control = cmbFindFileMask AnchorSideTop.Control = cmbFindFileMask AnchorSideTop.Side = asrBottom Left = 5 Height = 15 Top = 45 Width = 64 BorderSpacing.Top = 3 Caption = '&Exclude files' FocusControl = cmbExcludeFiles ParentColor = False end object cmbExcludeFiles: TComboBoxWithDelItems AnchorSideLeft.Control = gbFiles AnchorSideTop.Control = lblExcludeFiles AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 5 Height = 23 Hint = 'Enter files names that should be excluded from search separated with ";"' Top = 60 Width = 696 Anchors = [akTop, akLeft, akRight] BorderSpacing.Bottom = 5 ItemHeight = 15 ParentShowHint = False ShowHint = True TabOrder = 1 end object cbPartialNameSearch: TCheckBox AnchorSideRight.Control = cbRegExp AnchorSideBottom.Control = cbRegExp AnchorSideBottom.Side = asrBottom Left = 414 Height = 19 Top = 0 Width = 163 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Searc&h for part of file name' Checked = True OnChange = cbPartialNameSearchChange State = cbChecked TabOrder = 3 end object cbRegExp: TCheckBox AnchorSideTop.Control = gbFiles AnchorSideRight.Control = gbFiles AnchorSideRight.Side = asrBottom Left = 583 Height = 19 Top = 0 Width = 118 Anchors = [akTop, akRight] Caption = '&Regular expression' OnChange = cbRegExpChange TabOrder = 4 end object cbFindInArchive: TCheckBox AnchorSideRight.Control = cbPartialNameSearch AnchorSideBottom.Control = cbPartialNameSearch AnchorSideBottom.Side = asrBottom Left = 294 Height = 19 Top = 0 Width = 114 Anchors = [akRight, akBottom] BorderSpacing.Right = 6 Caption = 'Search in &archives' OnChange = cbFindInArchiveChange TabOrder = 2 end end object gbFindData: TGroupBox AnchorSideLeft.Control = tsStandard AnchorSideTop.Control = gbFiles AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsStandard AnchorSideRight.Side = asrBottom Left = 3 Height = 123 Top = 227 Width = 710 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Find Data' ChildSizing.TopBottomSpacing = 2 ClientHeight = 103 ClientWidth = 706 TabOrder = 2 object lblEncoding: TLabel AnchorSideLeft.Control = gbFindData AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrCenter AnchorSideRight.Control = CheksPanel AnchorSideRight.Side = asrBottom Left = 6 Height = 15 Top = 81 Width = 53 BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 Caption = 'Encodin&g:' FocusControl = cmbEncoding ParentColor = False end object cbCaseSens: TCheckBox AnchorSideLeft.Control = cbNotContainingText AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbNotContainingText AnchorSideTop.Side = asrCenter Left = 239 Height = 19 Top = 55 Width = 93 BorderSpacing.Left = 36 BorderSpacing.Top = 4 BorderSpacing.Bottom = 8 Caption = 'Case sens&itive' OnChange = cbCaseSensChange TabOrder = 4 end object cbNotContainingText: TCheckBox AnchorSideLeft.Control = lblEncoding AnchorSideTop.Control = cmbReplaceText AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 55 Width = 197 BorderSpacing.Top = 4 Caption = 'Find files N&OT containing the text' TabOrder = 3 end object cmbEncoding: TComboBox AnchorSideLeft.Control = cmbReplaceText AnchorSideTop.Control = cbNotContainingText AnchorSideTop.Side = asrBottom Left = 112 Height = 23 Top = 77 Width = 100 BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 ItemHeight = 15 OnSelect = cmbEncodingSelect Style = csDropDownList TabOrder = 6 end object cmbFindText: TComboBoxWithDelItems AnchorSideLeft.Control = CheksPanel AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindData AnchorSideRight.Control = gbFindData AnchorSideRight.Side = asrBottom Left = 112 Height = 23 Top = 2 Width = 591 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Right = 3 ItemHeight = 15 TabOrder = 1 end object cmbReplaceText: TComboBoxWithDelItems AnchorSideLeft.Control = cmbFindText AnchorSideTop.Control = cmbFindText AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindData AnchorSideRight.Side = asrBottom Left = 112 Height = 23 Top = 28 Width = 591 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 3 BorderSpacing.Right = 3 ItemHeight = 15 TabOrder = 2 end object CheksPanel: TPanel AnchorSideLeft.Control = gbFindData AnchorSideTop.Control = cmbFindText AnchorSideBottom.Control = cmbReplaceText AnchorSideBottom.Side = asrBottom Left = 0 Height = 49 Top = 2 Width = 109 Anchors = [akTop, akLeft, akBottom] AutoSize = True BevelOuter = bvNone ClientHeight = 49 ClientWidth = 109 TabOrder = 0 object cbFindText: TCheckBox AnchorSideLeft.Control = CheksPanel AnchorSideTop.Control = CheksPanel AnchorSideRight.Side = asrBottom Left = 6 Height = 19 Top = 2 Width = 97 BorderSpacing.Left = 6 BorderSpacing.Top = 2 BorderSpacing.Right = 6 Caption = 'Find &text in file' OnChange = cbFindTextChange TabOrder = 0 end object cbReplaceText: TCheckBox AnchorSideLeft.Control = CheksPanel AnchorSideTop.Control = CheksPanel AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = CheksPanel AnchorSideBottom.Side = asrBottom Left = 6 Height = 19 Top = 28 Width = 77 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Bottom = 2 Caption = 'Re&place by' OnChange = cbReplaceTextChange TabOrder = 1 end end object cbTextRegExp: TCheckBox AnchorSideLeft.Control = cbCaseSens AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = cbCaseSens AnchorSideTop.Side = asrCenter Left = 344 Height = 19 Top = 55 Width = 118 BorderSpacing.Left = 12 Caption = 'Regular &expression' OnChange = cbTextRegExpChange TabOrder = 5 end end end object tsAdvanced: TTabSheet Caption = 'Advanced' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 352 ClientWidth = 717 ImageIndex = 1 object cbDateFrom: TCheckBox AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = seFileSizeFrom AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 127 Width = 76 BorderSpacing.Left = 6 BorderSpacing.Top = 13 Caption = '&Date from:' OnChange = cbDateFromChange TabOrder = 8 end object cbNotOlderThan: TCheckBox AnchorSideLeft.Control = seNotOlderThan AnchorSideTop.Control = tsAdvanced Left = 3 Height = 19 Top = 18 Width = 100 BorderSpacing.Top = 18 Caption = 'N&ot older than:' Color = clBtnFace OnChange = cbNotOlderThanChange ParentColor = False TabOrder = 0 end object seNotOlderThan: TSpinEdit AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = cbNotOlderThan AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateFrom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbNotOlderThanUnit AnchorSideBottom.Side = asrBottom Left = 3 Height = 23 Top = 37 Width = 79 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 999999999 OnChange = seNotOlderThanChange TabOrder = 1 end object cmbNotOlderThanUnit: TComboBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbNotOlderThan AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateTo AnchorSideRight.Side = asrBottom Left = 112 Height = 23 Top = 37 Width = 79 Anchors = [akTop, akLeft, akRight] Enabled = False ItemHeight = 15 Style = csDropDownList TabOrder = 2 end object cbFileSizeFrom: TCheckBox AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = seNotOlderThan AnchorSideTop.Side = asrBottom Left = 3 Height = 19 Top = 72 Width = 72 BorderSpacing.Top = 12 Caption = 'S&ize from:' OnChange = cbFileSizeFromChange TabOrder = 3 end object cbDateTo: TCheckBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 112 Height = 19 Top = 127 Width = 61 BorderSpacing.Top = 18 Caption = 'Dat&e to:' OnChange = cbDateToChange TabOrder = 10 end object cbFileSizeTo: TCheckBox AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbFileSizeFrom Left = 112 Height = 19 Top = 72 Width = 57 Caption = 'Si&ze to:' OnChange = cbFileSizeToChange TabOrder = 5 end object seFileSizeFrom: TSpinEdit AnchorSideLeft.Control = ZVDateFrom AnchorSideTop.Control = cbFileSizeFrom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateFrom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbFileSizeUnit AnchorSideBottom.Side = asrBottom Left = 3 Height = 23 Top = 91 Width = 79 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 2147483647 OnChange = seFileSizeFromChange TabOrder = 4 end object seFileSizeTo: TSpinEdit AnchorSideLeft.Control = ZVDateTo AnchorSideTop.Control = cbFileSizeTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVDateTo AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cmbFileSizeUnit AnchorSideBottom.Side = asrBottom Left = 112 Height = 23 Top = 91 Width = 79 Anchors = [akTop, akLeft, akRight, akBottom] MaxValue = 2147483647 OnChange = seFileSizeToChange TabOrder = 6 end object cmbFileSizeUnit: TComboBox AnchorSideLeft.Control = ZVTimeFrom AnchorSideTop.Control = cbFileSizeTo AnchorSideTop.Side = asrBottom AnchorSideRight.Control = ZVTimeTo AnchorSideRight.Side = asrBottom Left = 221 Height = 23 Top = 91 Width = 160 Anchors = [akTop, akLeft, akRight] Enabled = False ItemHeight = 15 Style = csDropDownList TabOrder = 7 end object cbTimeFrom: TCheckBox AnchorSideLeft.Control = ZVTimeFrom AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 221 Height = 19 Top = 127 Width = 79 BorderSpacing.Top = 12 Caption = '&Time from:' OnChange = cbTimeFromChange TabOrder = 12 end object cbTimeTo: TCheckBox AnchorSideLeft.Control = ZVTimeTo AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrCenter Left = 316 Height = 19 Top = 127 Width = 64 Caption = 'Ti&me to:' OnChange = cbTimeToChange TabOrder = 14 end object Bevel2: TBevel AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = ZVDateFrom AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom Left = 6 Height = 4 Top = 181 Width = 704 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 12 BorderSpacing.Right = 6 Shape = bsTopLine Style = bsRaised end object ZVDateFrom: TDateTimePicker AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = cbDateFrom AnchorSideTop.Side = asrBottom Left = 3 Height = 23 Top = 146 Width = 79 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 9 BorderSpacing.Left = 3 TrailingSeparator = False TextForNullDate = 'NULL' LeadingZeros = True Kind = dtkDate TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.925837488422985 UseDefaultSeparators = True OnChange = ZVDateFromChange end object ZVDateTo: TDateTimePicker AnchorSideLeft.Control = ZVDateFrom AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideTop.Side = asrCenter Left = 112 Height = 23 Top = 146 Width = 79 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 11 BorderSpacing.Left = 30 TrailingSeparator = False TextForNullDate = 'NULL' LeadingZeros = True Kind = dtkDate TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.927234872688132 UseDefaultSeparators = True OnChange = ZVDateToChange end object ZVTimeFrom: TDateTimePicker AnchorSideLeft.Control = ZVDateTo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideBottom.Control = ZVDateFrom AnchorSideBottom.Side = asrBottom Left = 221 Height = 23 Top = 146 Width = 65 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 13 BorderSpacing.Left = 30 TrailingSeparator = False TextForNullDate = 'NULL' LeadingZeros = True Anchors = [akTop, akLeft, akBottom] Kind = dtkTime TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.930765335644537 UseDefaultSeparators = True OnChange = ZVTimeFromChange end object ZVTimeTo: TDateTimePicker AnchorSideLeft.Control = ZVTimeFrom AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = ZVDateFrom AnchorSideBottom.Control = ZVDateFrom AnchorSideBottom.Side = asrBottom Left = 316 Height = 23 Top = 146 Width = 65 CenturyFrom = 1941 MaxDate = 2958465 MinDate = -53780 TabOrder = 15 BorderSpacing.Left = 30 TrailingSeparator = False TextForNullDate = 'NULL' LeadingZeros = True Anchors = [akTop, akLeft, akBottom] Kind = dtkTime TimeFormat = tf24 TimeDisplay = tdHMS DateMode = dmComboBox Date = 40598 Time = 0.930765335644537 UseDefaultSeparators = True OnChange = ZVTimeToChange end object lblAttributes: TLabel AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = Bevel2 AnchorSideTop.Side = asrBottom Left = 3 Height = 16 Top = 193 Width = 53 BorderSpacing.Left = 3 BorderSpacing.Top = 8 Caption = 'Attri&butes' FocusControl = edtAttrib ParentColor = False end object edtAttrib: TEdit AnchorSideLeft.Control = tsAdvanced AnchorSideTop.Control = lblAttributes AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAddAttribute Left = 3 Height = 23 Top = 213 Width = 600 HelpType = htKeyword HelpKeyword = '/findfiles.html#attributes' Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Top = 4 BorderSpacing.Right = 3 ParentShowHint = False ShowHint = True TabOrder = 16 end object btnAddAttribute: TButton AnchorSideLeft.Control = edtAttrib AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnAttrsHelp Left = 606 Height = 26 Top = 211 Width = 48 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 3 Caption = '&Add' Constraints.MinHeight = 26 OnClick = btnAddAttributeClick TabOrder = 17 end object btnAttrsHelp: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edtAttrib AnchorSideTop.Side = asrCenter AnchorSideRight.Control = tsAdvanced AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 657 Height = 27 Top = 211 Width = 53 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 1 Caption = '&Help' Constraints.MinHeight = 26 OnClick = btnAttrsHelpClick TabOrder = 18 end end object tsPlugins: TTabSheet Caption = 'Plugins' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 352 ClientWidth = 717 object cbUsePlugin: TCheckBox AnchorSideLeft.Control = tsPlugins AnchorSideTop.Control = cmbPlugin AnchorSideTop.Side = asrCenter Left = 3 Height = 21 Top = 13 Width = 131 Caption = '&Use search plugin:' OnChange = cbUsePluginChange TabOrder = 0 end object cmbPlugin: TComboBox AnchorSideLeft.Control = cbUsePlugin AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = tsPlugins AnchorSideRight.Control = tsPlugins AnchorSideRight.Side = asrBottom Left = 137 Height = 23 Top = 10 Width = 577 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Top = 10 Enabled = False ItemHeight = 15 TabOrder = 1 end inline frmContentPlugins: TfrmSearchPlugin AnchorSideLeft.Control = tsPlugins AnchorSideTop.Control = cmbPlugin AnchorSideTop.Side = asrBottom AnchorSideRight.Control = tsPlugins AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = tsPlugins AnchorSideBottom.Side = asrBottom Left = 6 Height = 303 Top = 43 Width = 705 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.Bottom = 6 ClientHeight = 303 ClientWidth = 705 TabOrder = 2 inherited pnlTable: TScrollBox Height = 186 Width = 705 end inherited pnlButtons: TPanel Top = 253 Width = 705 ClientWidth = 705 end inherited HeaderControl: THeaderControl Width = 705 end inherited pnlHeader: TPanel Width = 705 ClientWidth = 705 inherited chkUsePlugins: TCheckBox Width = 297 end inherited rbAnd: TRadioButton Left = 303 Width = 198 end inherited rbOr: TRadioButton Left = 507 Width = 198 end end end end object tsLoadSave: TTabSheet Caption = 'Load/Save' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 352 ClientWidth = 717 OnShow = tsLoadSaveShow object lblTemplateHeader: TLabel Left = 3 Height = 13 Top = 3 Width = 715 Align = alTop BorderSpacing.Left = 3 BorderSpacing.Top = 3 BorderSpacing.Right = 3 Caption = '&Previous searches:' FocusControl = lbSearchTemplates ParentColor = False end object lbSearchTemplates: TListBox Left = 3 Height = 275 Top = 16 Width = 715 Align = alClient BorderSpacing.Left = 3 BorderSpacing.Right = 3 BorderSpacing.Bottom = 3 ItemHeight = 0 OnDblClick = lbSearchTemplatesDblClick OnSelectionChange = lbSearchTemplatesSelectionChange ScrollWidth = 713 TabOrder = 0 end object lblSearchContents: TPanel Left = 3 Height = 21 Top = 297 Width = 715 Align = alBottom Alignment = taLeftJustify AutoSize = True BorderSpacing.Top = 3 BorderSpacing.Bottom = 3 BorderSpacing.Around = 3 BevelOuter = bvLowered Constraints.MinHeight = 21 TabOrder = 1 end object pnlLoadSaveBottom: TPanel Left = 3 Height = 30 Top = 324 Width = 715 Align = alBottom AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 30 ClientWidth = 715 TabOrder = 2 object pnlLoadSaveBottomButtons: TPanel Left = 332 Height = 30 Top = 0 Width = 383 Align = alRight AutoSize = True BevelOuter = bvNone ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 30 ClientWidth = 383 TabOrder = 0 object btnSearchLoad: TButton Left = 0 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Right = 3 Caption = 'L&oad' Constraints.MinWidth = 75 OnClick = btnSearchLoadClick TabOrder = 0 end object btnSearchSave: TButton Left = 78 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'S&ave' Constraints.MinWidth = 75 OnClick = btnSearchSaveClick TabOrder = 1 end object btnSearchSaveWithStartingPath: TButton Left = 156 Height = 30 Hint = 'If saved then "Start in directory" will be restored when loading template. Use it if you want to fix searching to a certain directory' Top = 0 Width = 149 AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 Caption = 'Sa&ve with "Start in directory"' Constraints.MinWidth = 75 OnClick = btnSearchSaveWithStartingPathClick ParentShowHint = False ShowHint = True TabOrder = 2 end object btnSearchDelete: TButton Left = 308 Height = 30 Top = 0 Width = 75 AutoSize = True BorderSpacing.Left = 3 Caption = '&Delete' Constraints.MinHeight = 30 Constraints.MinWidth = 75 OnClick = btnSearchDeleteClick TabOrder = 3 end end end end object tsResults: TTabSheet Caption = 'Results' ChildSizing.LeftRightSpacing = 3 ChildSizing.TopBottomSpacing = 3 ClientHeight = 363 ClientWidth = 716 object pnlResults: TPanel AnchorSideTop.Control = pnlFindFile Left = 3 Height = 357 Top = 3 Width = 710 Align = alClient BevelOuter = bvNone ClientHeight = 357 ClientWidth = 710 FullRepaint = False TabOrder = 0 object pnlStatus: TPanel Left = 0 Height = 8 Top = 0 Width = 710 Align = alTop AutoSize = True BevelOuter = bvNone ClientHeight = 8 ClientWidth = 710 FullRepaint = False TabOrder = 0 object lblStatus: TLabel AnchorSideLeft.Control = pnlStatus AnchorSideTop.Control = lblCurrent AnchorSideTop.Side = asrBottom Left = 3 Height = 1 Top = 7 Width = 1 BorderSpacing.Left = 3 BorderSpacing.Top = 3 ParentColor = False ParentFont = False end object lblCurrent: TLabel AnchorSideLeft.Control = pnlStatus AnchorSideTop.Control = pnlStatus Left = 3 Height = 1 Top = 3 Width = 1 BorderSpacing.Left = 3 BorderSpacing.Top = 3 ParentColor = False ParentFont = False end object lblFound: TLabel AnchorSideTop.Control = lblStatus AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlStatus AnchorSideRight.Side = asrBottom Left = 706 Height = 1 Top = 7 Width = 1 Anchors = [akTop, akRight] BorderSpacing.Right = 3 ParentColor = False ParentFont = False end end object lsFoundedFiles: TListBox Left = 3 Height = 307 Top = 11 Width = 704 Align = alClient BorderSpacing.Around = 3 ItemHeight = 0 MultiSelect = True OnDblClick = lsFoundedFilesDblClick OnKeyDown = lsFoundedFilesKeyDown PopupMenu = PopupMenuFind ScrollWidth = 707 TabOrder = 1 end object pnlResultsBottom: TPanel Left = 3 Height = 33 Top = 321 Width = 704 Align = alBottom AutoSize = True BorderSpacing.Around = 3 BevelOuter = bvNone ClientHeight = 33 ClientWidth = 704 TabOrder = 2 object pnlResultsBottomButtons: TPanel Left = 390 Height = 33 Top = 0 Width = 314 Align = alRight AutoSize = True BevelOuter = bvNone ClientHeight = 33 ClientWidth = 314 TabOrder = 0 object btnWorkWithFound: TButton AnchorSideLeft.Side = asrBottom Left = 204 Height = 33 Top = 0 Width = 110 Align = alRight AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'Feed to &listbox' Constraints.MinWidth = 50 OnClick = btnWorkWithFoundClick TabOrder = 0 end object btnGoToPath: TButton Left = 119 Height = 33 Top = 0 Width = 82 Align = alRight AutoSize = True BorderSpacing.Left = 3 BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Caption = '&Go to file' Constraints.MinWidth = 50 OnClick = btnGoToPathClick TabOrder = 1 end object btnView: TButton Left = 0 Height = 33 Top = 0 Width = 59 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Caption = '&View' Constraints.MinWidth = 50 OnClick = btnViewClick TabOrder = 3 end object btnEdit: TButton Left = 62 Height = 33 Top = 0 Width = 54 Align = alRight AutoSize = True BorderSpacing.Right = 3 BorderSpacing.InnerBorder = 4 Caption = '&Edit' Constraints.MinWidth = 50 OnClick = btnEditClick TabOrder = 2 end end end end end end object pnlButtons: TPanel Left = 730 Height = 351 Top = 40 Width = 103 Align = alRight Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Top = 40 BevelOuter = bvNone ChildSizing.VerticalSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 351 ClientWidth = 103 Constraints.MinWidth = 100 TabOrder = 1 object btnUseTemplate: TButton Left = 0 Height = 33 Top = 0 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'Use template' ModalResult = 1 TabOrder = 0 Visible = False end object btnSaveTemplate: TButton AnchorSideBottom.Side = asrBottom Left = 0 Height = 33 Top = 39 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Save' ModalResult = 1 OnClick = btnSearchSaveClick TabOrder = 1 Visible = False end object btnStart: TButton Left = 0 Height = 33 Top = 78 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Start' OnClick = btnStartClick TabOrder = 2 end object btnStop: TButton Left = 0 Height = 33 Top = 117 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = 'C&ancel' Enabled = False OnClick = btnStopClick TabOrder = 3 end object btnClose: TButton Left = 0 Height = 33 Top = 156 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Close' OnClick = btnCloseClick TabOrder = 4 end object btnNewSearch: TButton Left = 0 Height = 33 Top = 219 Width = 103 AutoSize = True BorderSpacing.Top = 30 BorderSpacing.InnerBorder = 4 Caption = '&New search' OnClick = btnNewSearchClick TabOrder = 5 end object btnLastSearch: TButton Left = 0 Height = 33 Top = 258 Width = 103 AutoSize = True BorderSpacing.InnerBorder = 4 Caption = '&Last search' OnClick = btnLastSearchClick TabOrder = 6 end end end object PopupMenuFind: TPopupMenu left = 336 object miShowInViewer: TMenuItem Caption = 'Show In Viewer' OnClick = miShowInViewerClick end object miRemoveFromLlist: TMenuItem Caption = 'Remove from list' OnClick = miRemoveFromLlistClick end object miShowAllFound: TMenuItem Caption = 'Show all found items' Enabled = False OnClick = miShowAllFoundClick end end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udrive.pas����������������������������������������������������������������������0000644�0001750�0000144�00000010344�12477043646�015326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Structures describing drives. Copyright (C) 2006-2010 Koblov Alexander (Alexx2000@mail.ru) Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.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 uDrive; {$mode objfpc}{$H+} interface uses Classes; type TDriveType = (dtUnknown, dtFlash, // Flash drive dtFloppy, // 3.5'', ZIP drive, etc. dtHardDisk, // Hard disk drive dtNetwork, // Network share dtOptical, // CD, DVD, Blu-Ray, etc. dtRamDisk, // Ram-disk dtRemovable, // Drive with removable media dtRemovableUsb, // Drive connected via USB dtVirtual); // Virtual drive { TDrive } // On Linux we also put here mount points other than drives. TDrive = record DisplayName, //<en Name displayed to the user. Path, //<en Where this drive is or should be mounted (by /etc/fstab). DriveLabel, //<en Drive label if filesystem on the drive supports it. DeviceId: String; //<en Device ID that can be used for mounting, ejecting, etc. DriveType : TDriveType; FileSystem: String; //<en Filesystem on the drive IsMediaAvailable: Boolean; //<en Is media available in a drive with removable media. IsMediaEjectable: Boolean; //<en Can eject media by a command. IsMediaRemovable: Boolean; //<en If the drive has removable media. IsMounted: Boolean; //<en Is the drive mounted. AutoMount: Boolean; //<en Should the drive be automounted end; PDrive = ^TDrive; { TDrivesList } TDrivesList = class private FList: TFPList; protected function Get(Index: Integer): PDrive; function GetCount: Integer; public constructor Create; destructor Destroy; override; function Add(ADrive: PDrive): Integer; procedure Remove(Index: Integer); procedure RemoveAll; procedure Sort(Compare: TListSortCompare); property Items[Index: Integer]: PDrive read Get; default; property Count: Integer read GetCount; end; {en Returns drive label or status description. } function GetDriveLabelOrStatus(Drive: PDrive): String; implementation uses SysUtils, uLng; function GetDriveLabelOrStatus(Drive: PDrive): String; begin if Drive^.DriveLabel <> EmptyStr then Result := Drive^.DriveLabel else if not Drive^.IsMediaAvailable then Result := rsDriveNoMedia else Result := rsDriveNoLabel; end; { TDrivesList } constructor TDrivesList.Create; begin FList := TFPList.Create; end; destructor TDrivesList.Destroy; begin inherited Destroy; RemoveAll; FList.Free; end; function TDrivesList.Add(ADrive: PDrive): Integer; begin Result := FList.Add(ADrive); end; procedure TDrivesList.Remove(Index: Integer); begin if (Index >= 0) and (Index < FList.Count) then begin Dispose(PDrive(FList[Index])); FList.Delete(Index); end else raise ERangeError.Create('Invalid index'); end; procedure TDrivesList.RemoveAll; begin while FList.Count > 0 do Remove(0); end; procedure TDrivesList.Sort(Compare: TListSortCompare); begin FList.Sort(Compare); end; function TDrivesList.Get(Index: Integer): PDrive; begin if (Index >= 0) and (Index < FList.Count) then begin Result := PDrive(FList.Items[Index]); end else raise ERangeError.Create('Invalid index'); end; function TDrivesList.GetCount: Integer; begin Result := FList.Count; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ftweakplugin.lrt����������������������������������������������������������������0000644�0001750�0000144�00000002452�12020403374�016525� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMTWEAKPLUGIN.CAPTION=Tweak plugin TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION=&Plugin: TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION=&Extension: TFRMTWEAKPLUGIN.LBLFLAGS.CAPTION=Flags: TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION=&Remove TFRMTWEAKPLUGIN.BTNADD.CAPTION=A&dd new TFRMTWEAKPLUGIN.BTNCHANGE.CAPTION=C&hange TFRMTWEAKPLUGIN.CBPK_CAPS_NEW.CAPTION=Can create new archi&ves TFRMTWEAKPLUGIN.CBPK_CAPS_MODIFY.CAPTION=Can &modify exisiting archives TFRMTWEAKPLUGIN.CBPK_CAPS_MULTIPLE.CAPTION=&Archive can contain multiple files TFRMTWEAKPLUGIN.CBPK_CAPS_DELETE.CAPTION=Can de&lete files TFRMTWEAKPLUGIN.CBPK_CAPS_OPTIONS.CAPTION=S&upports the options dialogbox TFRMTWEAKPLUGIN.CBPK_CAPS_MEMPACK.CAPTION=Supports pac&king in memory TFRMTWEAKPLUGIN.CBPK_CAPS_BY_CONTENT.CAPTION=De&tect archive type by content TFRMTWEAKPLUGIN.CBPK_CAPS_SEARCHTEXT.CAPTION=Allow searchin&g for text in archives TFRMTWEAKPLUGIN.CBPK_CAPS_HIDE.CAPTION=Sho&w as normal files (hide packer icon) TFRMTWEAKPLUGIN.CBPK_CAPS_ENCRYPT.CAPTION=Supports e&ncryption TFRMTWEAKPLUGIN.BTNDEFAULT.CAPTION=De&fault TFRMTWEAKPLUGIN.LBLNAME.CAPTION=&Name: TFRMTWEAKPLUGIN.LBLDETECTSTR.CAPTION=D&etect string: TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION=&Description: TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION=&Plugin: TFRMTWEAKPLUGIN.BTNOK.CAPTION=&OK TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION=&Cancel ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fstartingsplash.lrt�������������������������������������������������������������0000644�0001750�0000144�00000001003�12662424243�017242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSTARTINGSPLASH.CAPTION=Double Commander TFRMSTARTINGSPLASH.LBLTITLE.CAPTION=Double Commander TFRMSTARTINGSPLASH.LBLVERSION.CAPTION=Version TFRMSTARTINGSPLASH.LBLREVISION.CAPTION=Revision TFRMSTARTINGSPLASH.LBLBUILD.CAPTION=Build TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION=Lazarus TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION=Free Pascal TFRMSTARTINGSPLASH.LBLPLATFORM.CAPTION=Platform TFRMSTARTINGSPLASH.LBLOPERATINGSYSTEM.CAPTION=Operating System TFRMSTARTINGSPLASH.LBLWIDGETSETVER.CAPTION=WidgetsetVer �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fbuttonform.pas�����������������������������������������������������������������0000644�0001750�0000144�00000006042�12673524511�016366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fButtonForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons, Menus, uOperationsManager, uFileSource; type { TfrmButtonForm } TfrmButtonForm = class(TForm) btnAddToQueue: TBitBtn; btnCancel: TBitBtn; btnCreateSpecialQueue: TBitBtn; btnOK: TBitBtn; mnuNewQueue: TMenuItem; mnuQueue1: TMenuItem; mnuQueue2: TMenuItem; mnuQueue3: TMenuItem; mnuQueue4: TMenuItem; mnuQueue5: TMenuItem; pmQueuePopup: TPopupMenu; pnlContent: TPanel; pnlButtons: TPanel; procedure btnAddToQueueClick(Sender: TObject); procedure btnCreateSpecialQueueClick(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure mnuNewQueueClick(Sender: TObject); procedure mnuQueueNumberClick(Sender: TObject); private function GetQueueIdentifier: TOperationsManagerQueueIdentifier; public constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent; FileSource: IFileSource); reintroduce; property QueueIdentifier: TOperationsManagerQueueIdentifier read GetQueueIdentifier; end; var frmButtonForm: TfrmButtonForm; implementation uses uFileSourceProperty; {$R *.lfm} var FQueueIdentifier: TOperationsManagerQueueIdentifier = SingleQueueId; { TfrmButtonForm } procedure TfrmButtonForm.btnCreateSpecialQueueClick(Sender: TObject); begin btnCreateSpecialQueue.PopupMenu.PopUp; end; procedure TfrmButtonForm.btnAddToQueueClick(Sender: TObject); begin ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmButtonForm.btnOKClick(Sender: TObject); begin if FQueueIdentifier <> ModalQueueId then FQueueIdentifier := FreeOperationsQueueId; end; procedure TfrmButtonForm.mnuNewQueueClick(Sender: TObject); begin FQueueIdentifier := OperationsManager.GetNewQueueIdentifier; ModalResult := btnAddToQueue.ModalResult; end; procedure TfrmButtonForm.mnuQueueNumberClick(Sender: TObject); var NewQueueNumber: TOperationsManagerQueueIdentifier; begin if TryStrToInt(Copy((Sender as TMenuItem).Name, 9, 1), NewQueueNumber) then begin FQueueIdentifier := NewQueueNumber; ModalResult := btnAddToQueue.ModalResult; end; end; function TfrmButtonForm.GetQueueIdentifier: TOperationsManagerQueueIdentifier; begin Result:= FQueueIdentifier; end; constructor TfrmButtonForm.Create(TheOwner: TComponent); begin Create(TheOwner, nil); end; constructor TfrmButtonForm.Create(TheOwner: TComponent; FileSource: IFileSource); begin inherited Create(TheOwner); if FQueueIdentifier <= FreeOperationsQueueId then FQueueIdentifier:= SingleQueueId; btnAddToQueue.Caption:= btnAddToQueue.Caption + ' #' + IntToStr(FQueueIdentifier); if Assigned(FileSource) and (fspListOnMainThread in FileSource.Properties) then begin btnAddToQueue.Visible:= False; FQueueIdentifier:= ModalQueueId; btnCreateSpecialQueue.Visible:= btnAddToQueue.Visible; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udefaultfilepropertyformatter.pas�����������������������������������������������0000644�0001750�0000144�00000015003�12422245255�022215� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uDefaultFilePropertyFormatter; {$mode objfpc}{$H+} interface uses Classes, SysUtils, uFileProperty; type TDefaultFilePropertyFormatter = class(TInterfacedObject, IFilePropertyFormatter) public function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; TMaxDetailsFilePropertyFormatter = class(TInterfacedObject, IFilePropertyFormatter) public function FormatFileName(FileProperty: TFileNameProperty): String; function FormatFileSize(FileProperty: TFileSizeProperty): String; function FormatDateTime(FileProperty: TFileDateTimeProperty): String; function FormatModificationDateTime(FileProperty: TFileModificationDateTimeProperty): String; function FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; function FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; end; var DefaultFilePropertyFormatter: IFilePropertyFormatter = nil; MaxDetailsFilePropertyFormatter: IFilePropertyFormatter = nil; implementation uses uGlobs, uDCUtils, DCBasicTypes, DCFileAttributes, DCDateTimeUtils; function TDefaultFilePropertyFormatter.FormatFileName( FileProperty: TFileNameProperty): String; begin Result := FileProperty.Value; end; function TDefaultFilePropertyFormatter.FormatFileSize( FileProperty: TFileSizeProperty): String; begin Result := cnvFormatFileSize(FileProperty.Value); end; function TDefaultFilePropertyFormatter.FormatDateTime( FileProperty: TFileDateTimeProperty): String; begin Result := SysUtils.FormatDateTime(gDateTimeFormat, FileProperty.Value); end; function TDefaultFilePropertyFormatter.FormatModificationDateTime( FileProperty: TFileModificationDateTimeProperty): String; begin Result := FormatDateTime(FileProperty); end; function TDefaultFilePropertyFormatter.FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; { Format as decimal: begin Result := IntToStr(FileProperty.Value); end; } var iAttr: TFileAttrs; begin iAttr := FileProperty.Value; Result:= '--------'; if (iAttr and FILE_ATTRIBUTE_DIRECTORY ) <> 0 then Result[1] := 'd'; if (iAttr and FILE_ATTRIBUTE_REPARSE_POINT) <> 0 then Result[1] := 'l'; if (iAttr and FILE_ATTRIBUTE_READONLY ) <> 0 then Result[2] := 'r'; if (iAttr and FILE_ATTRIBUTE_ARCHIVE ) <> 0 then Result[3] := 'a'; if (iAttr and FILE_ATTRIBUTE_HIDDEN ) <> 0 then Result[4] := 'h'; if (iAttr and FILE_ATTRIBUTE_SYSTEM ) <> 0 then Result[5] := 's'; // These two are exclusive on NTFS. if (iAttr and FILE_ATTRIBUTE_COMPRESSED ) <> 0 then Result[6] := 'c'; if (iAttr and FILE_ATTRIBUTE_ENCRYPTED ) <> 0 then Result[6] := 'e'; if (iAttr and FILE_ATTRIBUTE_TEMPORARY ) <> 0 then Result[7] := 't'; if (iAttr and FILE_ATTRIBUTE_SPARSE_FILE ) <> 0 then Result[8] := 'p'; end; function TDefaultFilePropertyFormatter.FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; var iAttr: TFileAttrs; begin iAttr := FileProperty.Value; Result:= '----------'; if ((iAttr and S_IFMT) = S_IFDIR) then Result[1] := 'd'; if ((iAttr and S_IFMT) = S_IFLNK) then Result[1] := 'l'; if ((iAttr and S_IFMT) = S_IFSOCK) then Result[1] := 's'; if ((iAttr and S_IFMT) = S_IFIFO) then Result[1] := 'f'; if ((iAttr and S_IFMT) = S_IFBLK) then Result[1] := 'b'; if ((iAttr and S_IFMT) = S_IFCHR) then Result[1] := 'c'; if ((iAttr and S_IRUSR) = S_IRUSR) then Result[2] := 'r'; if ((iAttr and S_IWUSR) = S_IWUSR) then Result[3] := 'w'; if ((iAttr and S_IXUSR) = S_IXUSR) then Result[4] := 'x'; if ((iAttr and S_IRGRP) = S_IRGRP) then Result[5] := 'r'; if ((iAttr and S_IWGRP) = S_IWGRP) then Result[6] := 'w'; if ((iAttr and S_IXGRP) = S_IXGRP) then Result[7] := 'x'; if ((iAttr and S_IROTH) = S_IROTH) then Result[8] := 'r'; if ((iAttr and S_IWOTH) = S_IWOTH) then Result[9] := 'w'; if ((iAttr and S_IXOTH) = S_IXOTH) then Result[10] := 'x'; if ((iAttr and S_ISUID) = S_ISUID) then begin if Result[4] = 'x' then Result[4] := 's' else Result[4] := 'S'; end; if ((iAttr and S_ISGID) = S_ISGID) then begin if Result[7] = 'x' then Result[7] := 's' else Result[7] := 'S'; end; if ((iAttr and S_ISVTX) = S_ISVTX) then begin if Result[10] = 'x' then Result[10] := 't' else Result[10] := 'T'; end; end; // ---------------------------------------------------------------------------- function TMaxDetailsFilePropertyFormatter.FormatFileName( FileProperty: TFileNameProperty): String; begin Result := FileProperty.Value; end; function TMaxDetailsFilePropertyFormatter.FormatFileSize( FileProperty: TFileSizeProperty): String; var d: Double; begin d := FileProperty.Value; Result := Format('%.0n', [d]); end; function TMaxDetailsFilePropertyFormatter.FormatDateTime( FileProperty: TFileDateTimeProperty): String; var Bias: LongInt = 0; Sign: String; begin Bias := -GetTimeZoneBias; if Bias >= 0 then Sign := '+' else Sign := '-'; Result := SysUtils.FormatDateTime('ddd, dd mmmm yyyy hh:nn:ss', FileProperty.Value) + ' UT' + Sign + Format('%.2D%.2D', [Bias div 60, Bias mod 60]); end; function TMaxDetailsFilePropertyFormatter.FormatModificationDateTime( FileProperty: TFileModificationDateTimeProperty): String; begin Result := FormatDateTime(FileProperty); end; function TMaxDetailsFilePropertyFormatter.FormatNtfsAttributes(FileProperty: TNtfsFileAttributesProperty): String; begin Result := DefaultFilePropertyFormatter.FormatNtfsAttributes(FileProperty); end; function TMaxDetailsFilePropertyFormatter.FormatUnixAttributes(FileProperty: TUnixFileAttributesProperty): String; begin Result := DefaultFilePropertyFormatter.FormatUnixAttributes(FileProperty); end; initialization DefaultFilePropertyFormatter := TDefaultFilePropertyFormatter.Create as IFilePropertyFormatter; MaxDetailsFilePropertyFormatter := TMaxDetailsFilePropertyFormatter.Create as IFilePropertyFormatter; finalization DefaultFilePropertyFormatter := nil; // frees the interface MaxDetailsFilePropertyFormatter := nil; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uhash.pas�����������������������������������������������������������������������0000644�0001750�0000144�00000011076�12575100074�015127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- General Hash Unit: This unit defines the common types, functions, and procedures Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) 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 uHash; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCPcrypt2, crc; type THashContext = TDCP_hash; THashAlgorithm = (HASH_BLAKE2S, HASH_BLAKE2SP, HASH_CRC32, HASH_HAVAL, HASH_MD4, HASH_MD5, HASH_RIPEMD128, HASH_RIPEMD160, HASH_SFV, HASH_SHA1, HASH_SHA256, HASH_SHA384, HASH_SHA512, HASH_TIGER ); var HashFileExt: array[THashAlgorithm] of String = ( 'blake2s', 'blake2sp', 'crc32', 'haval', 'md4', 'md5', 'ripemd128', 'ripemd160', 'sfv', 'sha', 'sha256', 'sha384', 'sha512', 'tiger' ); procedure HashInit(out Context: THashContext; const Algorithm: THashAlgorithm); procedure HashUpdate(var Context: THashContext; const Buffer; BufLen: LongWord); procedure HashFinal(var Context: THashContext; out Hash: String); function HashString(const Line: String; IgnoreCase, IgnoreWhiteSpace: Boolean): LongWord; { Helper functions } function FileExtIsHash(const FileExt: String): Boolean; function FileExtToHashAlg(const FileExt: String): THashAlgorithm; implementation uses LazUTF8, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPcrc32, DCPsha1, DCPsha256, DCPsha512, DCPtiger, DCPblake2; procedure HashInit(out Context: THashContext; const Algorithm: THashAlgorithm); begin case Algorithm of HASH_BLAKE2S: Context:= TDCP_blake2s.Create(nil); HASH_BLAKE2SP: Context:= TDCP_blake2sp.Create(nil); HASH_CRC32: Context:= TDCP_crc32.Create(nil); HASH_HAVAL: Context:= TDCP_haval.Create(nil); HASH_MD4: Context:= TDCP_md4.Create(nil); HASH_MD5: Context:= TDCP_md5.Create(nil); HASH_RIPEMD128: Context:= TDCP_ripemd128.Create(nil); HASH_RIPEMD160: Context:= TDCP_ripemd160.Create(nil); HASH_SFV: Context:= TDCP_crc32.Create(nil); HASH_SHA1: Context:= TDCP_sha1.Create(nil); HASH_SHA256: Context:= TDCP_sha256.Create(nil); HASH_SHA384: Context:= TDCP_sha384.Create(nil); HASH_SHA512: Context:= TDCP_sha512.Create(nil); HASH_TIGER: Context:= TDCP_tiger.Create(nil); end; Context.Init; end; procedure HashUpdate(var Context: THashContext; const Buffer; BufLen: LongWord); begin Context.Update(Buffer, BufLen); end; procedure HashFinal(var Context: THashContext; out Hash: String); var I, HashSize: LongWord; Digest: array of Byte; begin Hash:= EmptyStr; HashSize:= Context.HashSize div 8; SetLength(Digest, HashSize); Context.Final(Pointer(Digest)^); for I := 0 to HashSize - 1 do Hash := Hash + HexStr(Digest[I], 2); Hash := LowerCase(Hash); FreeAndNil(Context); end; function HashString(const Line: String; IgnoreCase, IgnoreWhiteSpace: Boolean): LongWord; var S: String; I, J, L: Integer; begin S := Line; if IgnoreWhiteSpace then begin J := 1; L := Length(Line); for I:= 1 to L do begin // Skip white spaces if not (Line[I] in [#9, #32]) then begin S[J] := Line[I]; Inc(J); end; end; SetLength(S, J - 1); end; if IgnoreCase then S := UTF8LowerCase(S); Result := crc32(0, nil, 0); Result := crc32(Result, PByte(S), Length(S)); end; function FileExtIsHash(const FileExt: String): Boolean; var I: THashAlgorithm; begin Result:= False; for I:= Low(HashFileExt) to High(HashFileExt) do begin if SameText(FileExt, HashFileExt[I]) then Exit(True); end; end; function FileExtToHashAlg(const FileExt: String): THashAlgorithm; var I: THashAlgorithm; begin for I:= Low(HashFileExt) to High(HashFileExt) do begin if SameText(FileExt, HashFileExt[I]) then Exit(I); end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/foptions.lfm��������������������������������������������������������������������0000644�0001750�0000144�00000264455�12671115613�015670� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmOptions: TfrmOptions Left = 372 Height = 480 Top = 55 Width = 640 ActiveControl = tvTreeView Caption = 'Options' ClientHeight = 480 ClientWidth = 640 OnClose = FormClose OnCloseQuery = FormCloseQuery OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState;tvTreeView.Width' ShowInTaskBar = stAlways LCLVersion = '1.6.0.4' object tvTreeView: TTreeView Left = 0 Height = 437 Top = 0 Width = 193 Align = alLeft AutoExpand = True DefaultItemHeight = 18 Images = OptionsEditorsImageList ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 OnChange = tvTreeViewChange Options = [tvoAutoExpand, tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end object Panel3: TPanel Left = 196 Height = 437 Top = 0 Width = 444 Align = alClient BevelOuter = bvNone ClientHeight = 437 ClientWidth = 444 TabOrder = 1 object pnlCaption: TPanel Left = 0 Height = 23 Top = 0 Width = 444 Align = alTop Color = clActiveCaption Font.Color = clCaptionText Font.Style = [fsBold] ParentColor = False ParentFont = False TabOrder = 0 end object sboxOptionsEditor: TScrollBox Left = 0 Height = 414 Top = 23 Width = 444 HorzScrollBar.Increment = 40 HorzScrollBar.Page = 401 HorzScrollBar.Smooth = True HorzScrollBar.Tracking = True VertScrollBar.Increment = 2 VertScrollBar.Page = 25 VertScrollBar.Smooth = True VertScrollBar.Tracking = True Align = alClient BorderStyle = bsNone ClientHeight = 414 ClientWidth = 444 TabOrder = 1 object lblEmptyEditor: TLabel AnchorSideLeft.Control = sboxOptionsEditor AnchorSideTop.Control = sboxOptionsEditor Left = 10 Height = 15 Top = 10 Width = 391 BorderSpacing.Left = 10 BorderSpacing.Top = 10 Caption = 'Please select one of the subpages, this page does not contain any settings.' ParentColor = False Visible = False end end end object splOptionsSplitter: TSplitter Left = 193 Height = 437 Top = 0 Width = 3 end object Panel1: TPanel Left = 0 Height = 43 Top = 437 Width = 640 Align = alBottom ClientHeight = 43 ClientWidth = 640 FullRepaint = False TabOrder = 2 object btnOK: TBitBtn AnchorSideRight.Control = btnCancel Left = 321 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 OnClick = btnOKClick TabOrder = 0 end object btnCancel: TBitBtn AnchorSideRight.Control = btnApply Left = 427 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 OnClick = btnCancelClick TabOrder = 1 end object btnApply: TBitBtn AnchorSideRight.Control = Panel1 AnchorSideRight.Side = asrBottom Left = 533 Height = 31 Top = 5 Width = 98 Anchors = [akTop, akRight] BorderSpacing.Right = 8 BorderSpacing.InnerBorder = 2 Caption = '&Apply' OnClick = btnApplyClick TabOrder = 2 end end object OptionsEditorsImageList: TImageList left = 72 top = 16 Bitmap = { 4C6927000000100000001000000066355CFF66355CFF66355CFF66355CFF6635 5CFF66355CFF66355CFF66355CFF66355CFF66355CFF66355CFF66355CFF6635 5CFF00000000000000000000000066355CFFB395AFFFC6ACC3FFD3BED0FFD1C0 CEFFC9BBC7FFAA97A7FF877184FF755871FF6A4565FF744B6FFF7E5278FF6635 5CFF00000000000000000000000066355CFFB395AFFFA1769BFFAB81A5FF956D 8FFF7E5A79FF684763FF563752FF603E5BFF6A4565FF744B6FFF7E5278FF6635 5CFF00000000000000000000000066355CFFB395AFFFA1769BFFAB81A5FF956D 8FFF7E5A79FF684763FF563752FF603E5BFF6A4565FF744B6FFF7E5278FF6635 5CFF00000000000000000000000066355CFFB395AFFFA1769BFFAB81A5FF956D 8FFF7E5A79FF684763FF563752FF603E5BFF6A4565FF744B6FFF7E5278FF6635 5CFF00000000000000000000000066355CFFB395AFFFA1769BFF069A4EFF069A 4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A 4EFF069A4EFF069A4EFF069A4EFF66355CFFB395AFFFA1769BFF089B50FF68E7 A6FF73ECB0FF89F1BDFF9CEEC5FFAFEDCEFF71DAA5FF2EC176FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF66355CFFB395AFFFA1769BFF089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF66355CFFB395AFFFA1769BFF089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF66355CFFB395AFFFC6ACC3FF089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF66355CFF66355CFF66355CFF089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF000000000000000000000000089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF000000000000000000000000089B50FF66E6 A6FF3EE692FF48EA99FF3BDE8CFF2FD280FF22C673FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF000000000000000000000000089B50FF66E6 A6FF40E693FF4AEA9AFF3EDE8DFF33D282FF24C674FF15BA66FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF000000000000000000000000079A4FFF66E6 A6FF72ECAFFF87F1BCFF99EDC3FFAAECCBFF70DAA4FF2EC176FF18BF6AFF1EC9 72FF24D27AFF28D980FF069A4EFF000000000000000000000000069A4EFF069A 4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A4EFF069A 4EFF069A4EFF069A4EFF069A4EFF00000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000858A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3E3FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFC5C6C6FFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFC5C6C6FFE3E3E3FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE3E3E3FFE3E3 E3FFA8ABAAFFC6C7C7FFE6E6E6FFE6E7E6FFC6C8C7FFA8ABAAFFE5E4E4FFE4E3 E4FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE4E4E4FFE5E6 E6FFA8ABAAFFE9E8E9FFE9E9E9FFE9E9E9FFE9E9EAFFA8ABAAFFE7E7E8FFE6E6 E6FFE4E5E4FFFBFBFBFF858A88FF858A88FFFFFFFFFFE4E4E4FFE6E7E6FFE8E8 E9FFA8ABAAFFEBECEBFFECECECFFECEDEDFFECEDECFFA8ABAAFFEBEBEAFFE9E9 E9FFE6E7E7FFFBFBFBFF858A88FF858A88FFFFFFFFFFE6E6E6FFE9E8E8FFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFEBEC ECFFEAE9E9FFF8F8F8FF858A88FF858A88FFFFFFFFFFE8E8E8FFEBEBEAFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFEEEE EEFFECEBECFFF6F6F6FF858A88FF858A88FFFFFFFFFFE9E9EAFFECECECFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFF0F0 F0FFEDEDEDFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEBEAFFEEEDEDFFA8AB AAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFF1F1 F2FFEFEEEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEBFFEEEEEEFFCCCD CDFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFA8ABAAFFCECFCFFFF3F3 F3FFEFF0EFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEAFFEEEEEEFFF2F1 F2FFF5F5F5FFF8F8F8FFFBFBFBFFFEFEFEFFFCFCFCFFF9F9F9FFF6F6F5FFF3F3 F3FFEFEFEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEAEBFFEDEEEDFFF1F1 F1FFF4F4F4FFF6F6F7FFF9F9F9FFFBFAFBFFF9FAF9FFF8F8F8FFF5F5F4FFF2F2 F2FFEFEFEFFFEFEFEFFF858A88FF858A88FFFFFFFFFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFFAFAFAFFF6F6F6FFF6F6 F6FFF6F6F6FFEFEFEFFF858A88FF00000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000858A 88FF000000000000000000000000000000000000000000000000000000000000 0000858A88FF0000000000000000000000000000000000000000858A88FFE9EB ECFF858A88FF000000000000000000000000000000000000000000000000858A 88FFEEEFEFFF858A88FF0000000000000000000000000000000000000000858A 88FFEEF0F0FF858A88FF00000000000000000000000000000000858A88FFF0F0 F0FF858A88FF000000000000000000000000858A88FF0000000000000000858A 88FFFAFAFAFF858A88FF00000000000000000000000000000000858A88FF878C 8AFF000000000000000000000000858A88FFF5F6F6FFA9ACABFF858A88FFF7F7 F7FFE2E3E5FFAAADADFFECEEEEFF0000000000000000858A88FF000000000000 000000000000000000000000000000000000858A88FFF3F3F3FFEFF0F0FFEDEE EEFFEAECECFFB6B9BAFF858A88FF00000000858A88FF00000000000000000000 00000000000000000000000000000000000000000000858A88FF858A88FF858A 88FF858A88FFD0D1D2FFA3A4A4FF858A88FF858A88FF00000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 000000000000B5B7B8FF858A88FFB7B8B9FF858A88FF00000000000000000000 0000000000000000000000000000000000000000000000000000874A20FF874A 20FF874A20FF85837DFFAAADADFFC8C9CAFFBDBEBFFF858A88FF000000000000 00000000000000000000000000000000000000000000874A20FFCCBBADFFCCBB ADFFB3937CFF874A20FF858A88FF858A88FFD3D3D4FFBDBEBFFF858A88FF0000 000000000000000000000000000000000000874A20FFD4C8BDFFA48D78FFA48D 78FFBEA592FF874A20FF0000000000000000858A88FFE2E3E4FFC2C4C6FF858A 88FF858A88FF0000000000000000874A20FFCCBBADFFA48D78FFA28A74FFB495 7AFFB3937CFF874A20FF000000000000000000000000858A88FFD2D3D4FFC2C3 C4FF858A88FF0000000000000000874A20FFCCBBADFFA7917DFFB5957AFFAE8B 72FF874A20FF0000000000000000000000000000000000000000858A88FF9EA1 A0FF858A88FF0000000000000000874A20FFBEA592FFB89C86FFB89C86FF874A 20FF000000000000000000000000000000000000000000000000858A88FF858A 88FF858A88FF000000000000000000000000874A20FF874A20FF874A20FF0000 0000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000858A88FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF858A88FF858A88FFFFFFFFFFE3E3E3FFA7A7A7FF8282 82FF2F2F2FFF2F2F2FFFE3E3E3FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFE2E2E2FFDBDB DBFFCECECEFF2F2F2FFFE3E3E3FFE8E8E8FFE9E9E9FFE8E8E8FFE8E8E8FFE3E3 E3FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FFB1B1B1FF2F2F 2FFF747474FF2F2F2FFFE6E6E6FFE6E7E6FFE6E6E6FFE5E6E5FFE5E4E4FFE4E3 E4FFE3E3E3FFFDFDFDFF858A88FF858A88FFFFFFFFFFE3E3E3FF2F2F2FFFD3D3 D3FFBFBFBFFF2F2F2FFFE9E9E9FFE9E9E9FFE9E9EAFFE9E9E8FFE7E7E8FFE6E6 E6FFE4E5E4FFFBFBFBFF858A88FF858A88FFFFFFFFFFE4E4E4FF2F2F2FFF2F2F 2FFF2F2F2FFFB8B9B8FF4B4B4BFF2F2F2FFFECEDECFFECEBECFFEBEBEAFFE9E9 E9FFE6E7E7FFFBFBFBFF858A88FF858A88FFFFFFFFFFE6E6E6FFECECECFFEDED EDFFEEEEEEFFEFEFEFFF474747FF2C2C2CFFF0F0F0FFEFEFEFFFEEEEEEFFEBEC ECFFEAE9E9FFF8F8F8FF858A88FF858A88FFFFFFFFFFE8E8E8FFEDEDEDFFEFEF EFFFF0F0F0FFF1F1F1FF484848FF202020FF343434FF000000FF010101FF6262 62FFF2F2F2FFF6F6F6FF858A88FF858A88FFFFFFFFFFE9E9EAFFEFEFEFFFF0F0 F0FFF2F2F2FFF3F3F3FF484848FF000000FF767676FFF2F2F2FF666666FF0000 00FFB1B1B1FFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEBEAFFF0F0F0FFF2F2 F2FFF3F3F3FFF5F5F5FF494949FF050505FFF3F3F3FFF9F9F9FFDBDBDBFF0000 00FF7C7C7CFFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEBFFF1F1F1FFF3F3 F3FFF4F4F4FFF6F6F6FF494949FF060606FFF1F1F1FFFBFBFBFFD3D3D3FF0000 00FF767676FFEFEFEFFF858A88FF858A88FFFFFFFFFFEBEBEAFFF2F2F2FFF4F4 F4FFF6F6F6FFF7F7F7FF4A4A4AFF000000FF797979FFF7F7F7FF5F5F5FFF0000 00FFADADADFFEFEFEFFF858A88FF858A88FFFFFFFFFFEAEAEBFFF2F2F2FFF4F4 F4FFF6F6F6FFF8F8F8FF565656FF2E2E2EFF222222FF040404FF000000FF4D4D 4DFFF7F7F7FFEFEFEFFF858A88FF858A88FFFFFFFFFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFAFAFAFFFAFAFAFFFAFAFAFFF6F6F6FFF6F6 F6FFF6F6F6FFEFEFEFFF858A88FF00000000858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF858A88FF00000000FFFFFF00FFFFFF00FFFFFF000DD8000004D0 13000CD135FF15D255FF18D474FF18D68CFF13D8A2FF0DDBB9FF06E4D900FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF003AD5040020D009FF3AD7 3DFF6AE67CFF88F3AAFF96F9C4FF97FBD3FF87F7DBFF68EFE0FF1AE7E5FF0AD5 EBFF05BBF400FFFFFF00FFFFFF00FFFFFF0065D800004CD50EFF74E158FFA1F6 99FF9EFFA6FF7BFF9EFF70FFAEFF70FFC7FF7CFFE3FFA5FFFAFF98F4FBFF55D8 F5FF0DB7F9FF008DFC00FFFFFF0080DE000077DA09FF94E257FFBBF99DFF8AFF 6EFF79FF76FF82FF97FF89FFB6FF87FFD1FF7EFFECFF6DFBFEFF76E8FFFF9BDF FCFF54BAFBFF0782F6FFFFFFFF0096DF0000A0E138FFCBF697FFAEFF6CFFA4FF 7AFF9DFF8DFF9BFFA3FFA4FFC4FFA2FFDFFF97FFF8FF85EFFFFF6ED3FFFF78C5 FFFF92C5FCFF146EF4FF0052F000B2E608FFC6EB67FFDDFF9BFFC5FF6FFFC3FF 8CFFBEFFA1FFB9FFB3FFBDFFCFFFBDFFEEFFB0F8FFFF99DEFFFF7EC2FFFF63A3 FFFF9EBDFFFF5983F8FF0336E2FFCDEA0EFFE4F582FFE5FF6FFFE0FF79FFE0FF 95FFDFFFAFFFDCFFC7FFDCFFE0FFD9FEFAFFC5E9FFFFA7CAFFFF87AAFFFF698B FFFF788EFFFF7386FBFF0822DDFFEAEC0EFFF9FA92FFFAFD64FFFAFD7BFFF9FD 98FFFAFDB5FFFAFED3FFFAFEEFFFEFF3FFFFD0D5FFFFAFB3FFFF8D91FFFF6C6F FFFF6769FFFF8283FBFF090DD9FFF1DA0EFFFFF290FFFFE962FFFFE876FFFFE7 93FFFFE7B0FFFFE6CAFFFFE5E5FFFCDEFDFFE1C6FFFFC2A6FFFFA184FFFF7E66 FFFF7664FFFF887BF6FF1A08D5FFF5BF09FFFEDD80FFFFD16CFFFFC76BFFFFC7 85FFFFC49EFFFFBDB3FFFFBFD0FFFFBFF1FFF4B0FFFFD696FFFFB679FFFF955E FFFF9977FFFF8265ECFF2A04D0FFFBA600FFFDBE60FFFFD09CFFFFA55BFFFFA2 71FFFF9A84FFFF979BFFFF9FBFFFFF9FE0FFFE92FBFFE77CFFFFC966FFFFA84F FFFFBE95FDFF7240DDFF3600CC00FA820000F87C0BFFFBB98EFFFF976AFFFF79 5BFFFF716BFFFF7689FFFF7CADFFFF7BCDFFFF71EDFFF763FFFFD952FFFFCF7C FFFFB373ECFF5906CCFF4600CC00FFFFFF00F05600FFF07744FFFCA692FFFF7B 6FFFFF5158FFFF5A79FFFF5E9BFFFF5CBCFFFF57DAFFFF4CF7FFF17BFFFFD685 F1FF9734CFFF6100C200FFFFFF00FFFFFF00EB470000E22A00FFE95240FFF885 84FFFF969FFFFF7491FFFF609AFFFF60B7FFFF78D8FFFC92EFFFE871EAFFB632 CCFF8900BDFF6D00CE00FFFFFF00FFFFFF00FFFFFF00E51E0000D30400FFD404 0CFFE14059FFEE6384FFF373A1FFF071B2FFE45AB6FFD236B4FFBE02B4FFAD00 BA009700CC00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D000 0700C3001C00BF0031FFBE0144FFBB005AFFB90072FFB8008A00C100AF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 000000000000894D25FF884C23FF884C23FF884C23FF884C23FF884C23FF884C 23FF884C23FF894F26FF00000000000000000000000000000000000000000000 00008B5129FFE2DFDAFFEDEFEEFFF0F2F1FFF4F5F4FFF6F7F7FFF7F8F8FFF5F6 F6FFF3F4F4FFE1DAD4FF894F26FF000000000000000000000000874A20FF874A 20FF8E5630FFE8EBEAFFD6DADAFFD6DADAFFD7DADAFFD8DCDBFFD8DCDBFFD7DC DBFFDADEDEFFEFF0F0FF874A20FF0000000000000000874A20FF874A20FF874A 20FF8E562FFFE6E8E7FFD6DBDBFFDAE0DDFFDCE2DFFFDDE3E0FFDEE4E1FFDCE2 E0FFD8DCDCFFEAECECFF874A20FF00000000874A20FF874A20FF874A20FF0000 00008E562FFFE0E3E2FFDEE2E1FFDDE3E0FFE0E6E3FFE2E7E5FFE3E8E5FFE2E7 E4FFDFE2E2FFE4E7E6FF874A20FF00000000874A20FF874A20FF000000000000 00008D562FFFDBDEDCFFE7E9E9FFE1E6E3FFE4E9E6FFE7EBE9FFE8ECE9FFE6EB E8FFE6E8E8FFDEE0DFFF874A20FF00000000894F27FF874B21FF874B22FF874A 21FF8D552FFFD7DBD9FFEFF2F2FFE4E9E6FFE8ECEAFFEBEFEDFFEDF0EEFFEBEF EDFFEDEFEFFFD7DBD9FF874A20FF895028FFC1B6ABFFD5D9D8FFD6DAD9FFD1D0 CDFF8F5933FFD6DAD8FFEFF1F0FFF8F9F9FFF8F9F9FFF8F9F9FFF8F9F9FFF8F9 F9FFE9EBEBFFD7DBD9FF874A20FF874B22FFD6DAD9FFD7DBDBFFD8DCDCFFD2D3 D0FF8F5933FFD6DAD8FFB7BEBBFFB7BEBBFFB7BEBBFFB7BEBBFFB7BEBBFFB7BE BBFFB9BFBCFFD7DBD9FF874A20FF874B22FFD6DAD9FFE4E6E6FFD0D8D4FFD3D8 D3FF8C542EFFCECBC5FFD7DAD8FFD7DAD8FFD7DAD8FFD7DAD8FFD7DAD8FFD7DA D8FFD7DAD8FFC8C2B9FF884E25FF874B22FFD6DAD9FFEEEFEFFFD3DAD6FFD7DE DBFFB7A18DFF8E5731FF884D24FF884D24FF884D24FF884D24FF884D24FF884D 24FF884D24FF8F5A34FF874D25FF874B22FFD6DAD9FFF8F8F8FFD4DBD8FFD9E0 DDFFDFE4E1FFE3E8E5FFE7ECE9FFEAEEEBFFE8ECEAFFE4E9E6FFE0E5E2FFDBE1 DEFFEDEFEEFFDCDFDFFF884D25FF874B22FFD6DAD9FFFCFCFCFFF5F7F7FFF6F7 F7FFF6F8F8FFF7F8F8FFF7F9F8FFF8F9F9FFF7F9F9FFF7F8F8FFF6F8F8FFF6F8 F7FFFCFCFCFFDEE1E0FF884D25FF874B22FFD6DAD9FFBEC4C1FFC1C7C4FFC1C7 C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7C4FFC1C7 C4FFC0C6C4FFD6DAD9FF884D24FF895028FFC0B4A8FFD6DAD8FFD6DAD9FFD6DA D9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DAD9FFD6DA D9FFD6DAD8FFBFB4A7FF895028FF00000000895029FF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FF895028FF00000000000000009D9D9DFF9C9C9CFF9C9C9CFF9C9C 9CFF9C9C9CFF9C9C9CFF9C9C9CFF9C9C9CFF9C9C9CFF9C9C9CFF9C9C9CFF9C9C 9CFF9C9C9CFF9D9D9DFF9F9F9FFF9D9D9DFFFAFAFAFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFBFBFBFF9C9C9CFF9C9C9CFFFFFFFFFFE2E2E2FFE3E3E3FFE4E4 E4FFE4E4E4FFE5E5E5FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE6E6E6FFE5E5 E5FFE5E5E5FFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFFE6E6E6FF4F4E48FF4F4E48FF4F4E48FF4F4E 48FFE5E5E5FFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF9B9B9BFFE8E8E8FF57554EFF57554EFF57554EFF5755 4EFFE6E6E6FFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFFFFFFFFFFECEE EEFFECEEEEFFFFFFFFFF9B9B9BFFEAEAEAFF5F5D54FF5F5D54FF5F5D54FF5F5D 54FFE8E8E8FFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFFFFFFFFFFECEE EEFFECEEEEFFFFFFFFFF9B9B9BFFECECECFF67645AFF67645AFF67645AFF6764 5AFFEAEAEAFFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFFA0A0A0FFFFFFFFFF9C9C9CFF9C9C9CFFFFFFFFFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFFA5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FDFF9F9F9FFFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFEAEAEAFF666359FF6663 59FF666359FF666359FFECECECFFA5A5A5FFFDFEFEFFECEEEEFFEDEFEFFFFDFD FDFF9F9F9FFFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFEBEBEBFF6E6A5FFF6E6A 5FFF6E6A5FFF6E6A5FFFEDEDEDFFA5A5A5FFFDFEFEFFECEEEEFFEDEFEFFFFDFD FDFF9F9F9FFFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFECECECFF757164FF7571 64FF757164FF757164FFEFEFEFFFA5A5A5FFFFFFFFFFFFFFFFFFFFFFFFFFFDFD FDFF9F9F9FFFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFEDEDEDFF797567FF7975 67FF797567FF797567FFF1F1F1FF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFFA0A0A0FFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFEEEEEEFFF0F0F0FFF2F2 F2FFF4F4F4FFF6F6F6FFF8F8F8FFFAFAFAFFFBFBFBFFFAFAFAFFF9F9F9FFF7F7 F7FFF5F5F5FFFFFFFFFF9C9C9CFF9D9D9DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF9C9C9CFFA0A0A0FF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B9BFF9B9B 9BFF9B9B9BFF9B9B9BFFA1A1A1FF00000000B6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFF000000000000 0000000000000000000000000000B6BDBAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFEFEFEFF874A20FF874A20FF874A 20FF874A20FF874A20FF874A20FF874A20FF874A20FFFDFDFDFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFBFCFCFFA46534FFA46534FFA465 34FFA46534FFA46534FFA46534FFA46534FFA46534FFFBFBFBFFB6BDBAFF0000 0000000000000000000000000000B6BDBAFFFAFBFAFFF9F9F9FFF9F9F9FFE0E3 E2FFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFF00000000B6BDBAFFF8F8F8FFF6F6F6FFF6F6F5FFB6BD BAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB6BDBAFFB6BDBAFFF7F7F7FFF3F3F4FFF3F3F3FFB6BD BAFFFEFEFEFF874A20FF874A20FF874A20FF874A20FF874A20FF874A20FF874A 20FF874A20FFFDFDFDFFB6BDBAFFB6BDBAFFF2F2F2FFEEEEEEFFEFEFEFFFB6BD BAFFFBFCFCFFA46534FFA46534FFA46534FFA46534FFA46534FFA46534FFA465 34FFA46534FFFBFBFBFFB6BDBAFFB6BDBAFFF0EFEFFFEAEAEBFFEAEAEAFFB6BD BAFFFAFBFAFFF9F9F9FFF9F9F9FFF9F9F9FFF8F9F8FFF8F8F8FFF8F8F8FFF8F8 F8FFF8F8F8FFF8F9F8FFB6BDBAFFB6BDBAFFEEEFEEFFE6E5E5FFE5E5E5FFB6BD BAFFF8F8F8FFF6F6F6FFF6F6F5FFF6F5F6FFF6F6F6FFF5F5F6FFF5F5F5FFF5F5 F6FFF5F5F6FFF7F7F7FFB6BDBAFFB6BDBAFFF2F2F3FFEFF0EFFFEFEFF0FFB6BD BAFFF7F7F7FFF3F3F4FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F2FFF3F3F3FFF3F2 F2FFF3F2F3FFF6F6F6FFB6BDBAFF00000000B6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFF2F2F2FFEEEEEEFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEF EFFFEEEEEEFFF1F2F1FFB6BDBAFF00000000000000000000000000000000B6BD BAFFF0EFEFFFEAEAEBFFEAEAEAFFEAEAEAFFEAEAEAFFE9E9E9FFEAEAEAFFE9E9 EAFFEAE9EAFFEFEFEFFFB6BDBAFF00000000000000000000000000000000B6BD BAFFEEEFEEFFE6E5E5FFE5E5E5FFE5E6E5FFE5E5E5FFE5E5E5FFE5E5E5FFE5E5 E5FFE5E5E5FFEDEEEEFFB6BDBAFF00000000000000000000000000000000B6BD BAFFF2F2F3FFEFF0EFFFEFEFF0FFEFEFEFFFF0F0EFFFEFEFEFFFEFEFEFFFEFEF F0FFEFEFEFFFEFEFEFFFB6BDBAFF000000000000000000000000000000000000 0000B6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BDBAFFB6BD BAFFB6BDBAFFB6BDBAFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00EAC39DFFE6BF96FFE4BB92FFE4BB92FFD1A06CF5D09E6DF6CC96 5FDAC479427EB2673C09FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E5BE96FFFFFFFEFFFDF3E9FFFDF3EAFFFCF2E8FFFAEFE3FFFAF2 E7FFEABB88FFCF8555B3B4693D0CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB93FFFEF5EDFFFCDEC5FFFBE0C7FFF9DCC2FFF5D3B4FFFEF9 F3FFFAE2C4FFECC193FFC37D4893FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF6F0FFFCE2CDFFFCE3CDFFFADFC8FFF7D9BCFFF5E9 DDFFFAF3EBFFFBF8F3FFCA8353FEFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00E4BB92FFFEF7F1FFFCE5D2FFFCE4D1FFFBE2CCFFF9DDC4FFF6D7 BBFFF3D1AFFFFAEFE4FFCC8758FE34B4D9D05EC2E1FA60C3E2FA60C3E2FA60C3 E2FA5FC3E2FAE4BB91FFFFF7F2FFFEE7D5FFFEE7D5FFFDE5D1FFFAE0CAFFF9DE C4FFF7D9BCFFFDF2E7FFCC8757FE36B3DAF8FDFEFEFFFEFFFFFFFEFEFFFFFDFE FFFFFEFFFFFFE4BA91FFFFF7F0FFFFE7D5FFFDE7D6FFFDE6D4FFFCE4D0FFFBE3 CBFFFADCC2FFFEF3E8FFCC8656FE35AFDAF0F7FCFEFF8EE4F8FF91DEF5FF9FE0 F5FFACE1F6FFCA8452FFFFF7F1FFFFE9D9FFFFEADBFFFFE9D9FFFFE7D7FFFFE5 D2FFFFE2CBFFFFF7F1FFCB8555FE36AADAF2F1FAFDFF94DEF5FF93DCF4FF64BC E9FF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594DAFF3594 DAFF3594DAFFFBF6EFFFCC8355FE35ABDAFAE8F6FBFF70BCE7FF55AAE2FF4DA5 E0FF91C9EBFFFAF3EFFFFDFEFDFFFFFDFCFFFFFDFCFFFEFDFCFFFEFCFBFFFEFE FDFF3594DAFFEFF2E8FFCE8156FF37A6DAFAFEFFFFFFF8FDFFFFF6FDFFFFF5FC FFFFF3FCFEFF9AE4F4FF9AE6F7FF9BE6F6FF9DE5F5FF9EE5F5FF9FE5F4FFDAF3 F8FF3594DAFFFDF4EEFFCA8054F936A1DAF9F6FCFEFF94E5F8FF93E5F8FF93E5 F8FF91E5F8FF93DBE9FF93D7E3FF93D2DCFF90CED7FF8CC8CFFF86C1C6FFC9D8 D6FF3594DAFFC57444E8CA7F53F1369ADAF8F2FAFDFF94E6F8FF92E5F8FF90E5 F8FF8BE3F8FF86E2F7FF7FE1F7FF77DEF6FF6CDCF6FF5ED9F4FF4FD5F3FFCCF2 FBFF3594DAFFFFFFFF00FFFFFF003594DAF7EFFAFEFF93E5F8FF8FE4F8FF89E3 F8FF82E1F7FF7ADFF7FF71DEF6FF67DBF5FF5BD8F4FF4DD4F3FF40D1F2FFCAF2 FBFF3594DAFFFFFFFF00FFFFFF00338ED9FBDCF0FAFF98E1F6FF95E0F6FF92DF F6FF8EDEF5FF89DCF5FF85DAF4FF80D9F4FF7AD7F3FF74D5F3FF70D3F2FFC2EA F8FF3594DAFFFFFFFF00FFFFFF002C86D8D12D88D8F72D87D8F72D88D8F72D88 D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D87D8F72D88 D8F72C86D8D1FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B9844448B68140FAB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB9844448000000000000000000000000B9844448BA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B68140FAF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37BFFF2C2 79FFFCDDA8FFC7995DFF0000000000000000B47D3CFFFBE1AEFFC9772FFFCD78 33FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CB88FFF3CB 87FFFADBA5FFC69659FFB88342A8B98444FFCCA26CFFCC7630FFCA974EFFCCA4 70FFD4AF80FFCC833FFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D8 9CFFFBDFA5FFF2D49BFFBD8949FFBA8545FFCD7935FFDAB176FFCC8036FFC992 4BFFCE9B4AFF775429FFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F 3FFFB6803FFFB78242FFB98545FFCA975AFFECD2ACFFCC843EFF000000466B35 1BB1DFA34DFFF1D7B3FF00000033000000330000003300000033000000330000 0033000000330000003300000033CD7731FFCA904CFFE4C394FFC279356A946A 8AFF3A99E2FF4CBCF6FF4A9FE0FF000000000000000000000000000000000000 000000000000000000000000000000000000DDBC8DFFE8B266FFF7DCB5FF298B DFFF41A9EBFFC7721FF656BFF6FF000000000000000000000000000000000000 000000000000000000000000000000000000BD652AEF0000005CF5C279FFCC67 2AFF51C4F9FF45ABEBFF4896D8FF000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000005C0000 005C1B3D608A438DD1FF3577BAF1000000000000000000000000000000000000 0000000000000000000000000000FFFFFF00C17D4460C88B4DBBC88C4FEEC88C 4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B368 3C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F4 EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB94 65F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE1 C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFB6CBC2FF58A5 D8FF85B1DBFF469DD0FF2B95D15EFFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3 CEFFFBE3CDFFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFAFE3F1FF77BEE7FFB4D2 F0FFE5F3FFFFACD2EFFF488CC7E8FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFBE4 D0FFFCE4CFFFFCE3CDFFFAE1CAFFF9DDC4FFAFCDC9FF81D5EEFFB2E3F9FF8BC0 E7FFAED3F6FFC4E0FCFF669FD3F7FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFCE6 D4FFFDE7D3FFFCE4D1FFFBE3CDFFBED4D0FF7DD4EEFFC4F6FDFF6CDDF6FF6DCA EDFF63A3D7FF6499C8FE5192CA26FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7 D6FFFDE7D5FFFDE6D4FFBDD6D5FF79D3EEFFC7F7FDFF5FDCF5FF5BE2F7FF7AD6 F2FF51A1E0FFAD8560F9FFFFFF00FFFFFF00C68849F7F9F4EDFFFEE8D8FFFEE8 D8FFFEE8D7FFB0C6CCFF77CBE7FFC7F7FDFF5EDCF5FF5AE1F7FF7BD4F1FF4B99 DBFFD2DFE9FFC68245F7FFFFFF00FFFFFF00C68447F7F9F3ECFFFEE8D6FFFEE8 D7FFB3C6CCFF76B9D6FFC2F6FDFF63DFF7FF5DE2F8FF79D3F0FF4998DAFFE2D5 C8FFFAF2EAFFC68042F7FFFFFF00FFFFFF00C58245F7F8F2EBFFFEE7D6FFA6B6 BFFF7AB6D5FF90B7D1FF55C9E4FF5BDFF5FF78D0EDFF519BD9FFE1D6CDFFFBE1 C9FFFBF7F2FFC57C3FF7FFFFFF00FFFFFF00C58042F7F8F1E8FFFEE5D5FF4389 AAFFE0F2FFFF549AD8FF1A7ABEFF4998C5FF488CC2FFDAD2CDFFFBE0C9FFFBE1 C8FFFDFAF7FFC1763BF7FFFFFF00FFFFFF00C47C40F7F7F0E6FFF8B455FF2E66 82FF94C7F9FF91C9F9FF4185C9FF2668A6FFD2A865FFF7B251FFF7B24FFFF7B2 4FFFFCF9F5FFBF6F36F7FFFFFF00FFFFFF00C1783CF7F7EDE3FFFDC26EFF1842 57FF2B6187FF4C89BCFF709FB3FFE3C99AFFFFD695FFFFD594FFFFD493FFFBBE 65FFFBF7F4FFBB6731F7FFFFFF00FFFFFF00BF7138F5F5EBDFFEFDBF68FFFCBD 67FFFBBE65FFFCBE64FFFCBE64FFFCBD62FFFBBD63FFFBBC61FFFCBE60FFFCBC 62FFFDFBF8FDB9642DF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7ECDFFDF6EB DEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFFFAF2EAFFFCF7F3FFFCF8 F4FDFEFEFDF0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB6631EDBA66 30F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF7B9652EF7B9642EF7B964 2EEFB7622CBDB7622E63FFFFFF00C17D4460C88B4DBBC88C4FEEC88C4FFFC88C 4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B3683C06FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F3EDFFF8F3 EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB9465F5B3683B07FFFF FF00FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE2C9FFFBE0 C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8B4FFE1B07DFFDB9264F6B46B 3E07FFFFFF00FFFFFF00FFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3CDFFFBE2 CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6CDFFFAE5C9FFE2B684FFBF79 42A6FFFFFF00FFFFFF00FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFCE4CFFFFCE3 CDFFFAE1CAFFF9DDC4FFF6D9BCFFF4E9DFFFF7F2ECFFFBF7F3FFF5EFE9FFC27E 45FBFFFFFF00FFFFFF00FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFDE7D3FFFCE4 D1FFFBE3CDFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4B5FFF1D2B3FFF8F4F0FFC482 46F7FFFFFF00FFFFFF00FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7D5FFFDE6 D4FFFCE6D2FFD4976EFFD49E7BFFD09871FFD6A482FFCD8E68FFCD9069FFD09A 75FFD19973FFC88B62FFAD5A2036C68849F7F9F4EDFFFEE8D8FFFEE8D7FFFEE7 D6FFFDE5D3FFCC8D65FFF3CDB0FFFFFFFFFFE3C7B3FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFEABFA1FFC98960FFC68447F7F9F3ECFFFEE8D6FFFDE7D6FFFDE7 D6FFFDE7D5FFC7865BFFEFC09EFFFFFFFFFFCC936EFFFFFFFFFFFFFFFFFFFFFB F7FFFFF8F1FFE4AF8CFFC78A61FFC58245FFF8F2EBFFFEE7D6FFFDE7D6FFFDE7 D6FFFDE6D5FFC8885DFFEFBFA1FFFDFCFAFFFEFCFBFFFEFDFDFFFEFDFCFFFDFB FAFFFDFCFBFFDDA885FFC17F53FFC47C40F7F7F0E6FFF8B455FFF7B554FFF8B4 53FFF8B253FFCA8D65FFEAB899FFDDA57EFFDDA680FFDBA37CFFD9A07AFFD9A0 79FFD89F78FFD89E78FFBF845DFFC1783CF7F7EDE3FFFDC26EFFFFD79EFFFFD6 9BFFFFD798FFC98B61FFE6B592FFE2A781FFE1A781FFDEA37DFFDCA17BFFDB9F 79FFD99E77FFD49A73FFBB7E57FFBF7138F5F5EBDFFEFDBF68FFFBBE65FFFCBE 64FFFCBE64FFC48154FFEAB697FFF3F3EAFFEDF1E6FFEFF1E6FFEFF0E6FFEDF1 E5FFF3F5EDFFD59C79FFB07044FFBC6933DEF8F1EAF2F7ECDFFDF6EADEFFF6EA DCFFF6EADCFFC37F51FFEFB69AFFEAF3E8FF51BF84FF6FC998FF71C999FF54BF 84FFE4F4E9FFDD9C7BFFAA693AFFBB6A346BBA6530BCBB6631EDBA6630FFBA66 30F7BA6530F7C68355FFEFCEBAFFDDFFFFFF87EEC7FFA2F4D7FFA2F6D7FF8CEE C7FFE0FFFFFFDDA285FFAB6A3EFFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00BA6833C5C38458FFD38B68FFE18F70FFDC8D6CFFDA8B6DFFD78A 6EFFCD8B6CFFAB6D44FFA65F2EFFFFFFFF00FFFFFF00C17D4460C88B4DBBC88C 4FEEC88C4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C476 3B91B3683C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4 EEFCF8F4EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B2 7DFFDB9465F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0 C7FFFBE1C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8 B4FFE1B07DFFDB9264F6B46B3E07FFFFFF0092877B12776D62FF756D65FFDDC8 B5FF6F665EFF6C6259FFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6 CDFFFAE5C9FFE2B684FFBF7942A6756C630F988C808F9C8F83FF524C47FFCBB7 A7FF544D47FF908579FF9A8C7FFFF5DDC6FFF9DDC4FFF6D9BCFFF4E9DFFFF7F2 ECFFFBF7F3FFF5EFE9FFC27E45FB95897D1D665E56F385786FFF4A413BFF9586 7AFF564A40FF928374FF4F4740FFE4CFBBFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4 B5FFF1D2B3FFF8F4F0FFC48246F73E3934855B544DFFB0A090FF695D51FF8674 65FF63584EFFAA9888FF5A514AFF85796EFFFBE1CCFFFADFC7FFF8DCC2FFF6DA BDFFF6D8BBFFFAF4EFFFC68346F7665E56EF696158FF564F48FF4D4946FF8C80 77FF403B37FF46423CFF3D3833FF2C2825FFFCE4D1FFFBE1CCFFFAE0C7FFF9DD C3FFF8DCC2FFFAF4EDFFC68245F7756C63F8C4B9AFFFA79A8DFF807A73FFD6C3 B4FF6C635CFFBBAFA4FFA6988BFF534D46FFFDE5D3FFFBE4D0FFFBE3CCFFFADF C7FFFADFC6FFFAF2EAFFC68042F771685FFFC1B6ABFF797066FF625C56FFBAA9 9CFF6E665DFFBDB1A5FF7E746AFF332E2BFFFDE5D3FFFCE4D1FFFCE2CDFFFBE1 CBFFFBE1C9FFFBF7F2FFC57C3FF7635B54FFA79A8DFF70675EFF453F3AFFAD9C 91FF5C554EFF968A7FFF665E56FF1B1918FFFCE4D1FFFCE2CEFFFCE2CCFFFBE0 C9FFFBE1C8FFFDFAF7FFC1763BF7423D38D948423CD94B3E31FE58544FFFB686 42FF3D3020FF413524FF372B1BFF3B2C15FFF7B352FFF7B352FFF7B251FFF7B2 4FFFF7B24FFFFCF9F5FFBF6F36F7FFFFFF00FFFFFF00C1783CF7F7EDE3FFFDC2 6EFFFFD8A0FFFFD79EFFFFD69BFFFFD798FFFFD696FFFFD695FFFFD594FFFFD4 93FFFBBE65FFFBF7F4FFBB6731F7FFFFFF00FFFFFF00BF7138F5F5EBDFFEFDBF 68FFFCBD67FFFBBE65FFFCBE64FFFCBE64FFFCBD62FFFBBD63FFFBBC61FFFCBE 60FFFCBC62FFFDFBF8FDB9642DF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7EC DFFDF6EBDEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFFFAF2EAFFFCF7 F3FFFCF8F4FDFEFEFDF0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB66 31EDBA6630F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF7B9652EF7B964 2EF7B9642EEFB7622CBDB7622E63B57B09B2B88217FFB78115FFB68114FFB681 15FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB681 14FFB78115FFB88217FFB57B09B2B88216FFEFD09EFFECCD99FFECCD99FFECCD 9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD 99FFECCD99FFEFD09EFFB88216FFB67F10FFF5DDB7FFDC9D37FFDC9E39FFDC9F 3AFFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDB9E39FFDC9E39FFDB9E 39FFDB9D37FFF5DDB7FFB67F10FFB57C0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB57C0BFFB57C09FFFFFFFFFF807E7DFF767372FF7977 76FFAEADACFFDADAD9FFA1A09FFFA1A09FFFDADADAFFA1A1A0FFA2A2A1FFA2A2 A1FF9F9FA0FFFFFFFFFFB57B09FFB57B09FFFFFFFFFFE6E6E5FFEBEAE8FFEAE9 E7FFE5E4E2FFE2E1DFFFE4E3E1FFE4E3E1FFE3E2DFFFE4E3E1FFE6E5E2FFE5E4 E2FFE2E2E1FFFFFFFFFFB57B08FFB57C09FFFFFFFFFF8B8988FF807E7CFF8381 7FFFBABAB7FFE9E8E7FFACABAAFFADACABFFE9E8E7FFADACABFFAFAEADFFAEAD ACFFABABABFFFFFFFFFFB57B08FFB57B08FFFFFFFFFFF2F1F2FFF6F5F5FFF5F4 F4FFF0F0EFFFEEEDECFFEFEEEDFFEFEEEDFFEEEDECFFEFEEEDFFF1F0EFFFF1F0 EFFFEEEEEEFFFFFFFFFFB57B08FFB57B08FFFFFFFFFF92908FFF868381FF8886 84FFC4C1BFFFF3F2F1FFB3B2B2FFB3B2B2FFF4F2F1FFB3B2B2FFB5B4B4FFB5B4 B4FFB2B2B4FFFFFFFFFFB57B08FFB57B08FFFFFFFFFFFCFDFEFFFFFFFFFFFFFF FEFFFAFAF9FFF7F7F6FFF8F8F7FFF8F8F7FFF7F7F6FFF8F9F7FFFAFAF9FFFAFA F9FFF8F9F9FFFFFFFFFFB57B08FFB57B08FFFFFFFFFF999696FF8B8886FF8F8C 8AFFCAC9C8FFFCFCFBFFBBBBBBFFBBBBBBFFFCFCFBFFBBBBBBFFBDBDBDFFBDBD BDFFBBBCBEFFFFFFFFFFB57B08FFB57B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB47B08FFB57C09FFFFFFFFFFA09D9EFF8F8F8FFF9392 91FFD2D1D2FFFFFFFFFFC1C2C3FFC1C2C4FFFFFFFFFFC1C2C4FFC3C4C6FFC3C4 C6FFC2C4C7FFFFFFFFFFB57B09FFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB67E0EFFA77108C1B67E0EFFB57C09FFB57C09FFB57C 09FFB57B08FFB47B08FFB57B08FFB57B08FFB47B08FFB57B08FFB57B08FFB57B 08FFB57C09FFB67E0EFFA77108C1000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000000000000000000000000000000000000000A0 C41B02A1C5A404A2C5EA02A1C4FD02A1C4FD03A2C5EA01A1C49800A0C41B0000 000000000000000000000000000000000000000000000000000000A0C46401A0 C4FBEEF8FAFFF4FBFCFFE4F9FCFFE4F9FCFFC3EDF4FF18AACAFA00A0C4F800A0 C464000000000000000000000000000000000000000000A0C46800A0C4FF83D4 E5FEEFFCFDFFCEF7FCFFAFF4FCFFA9F4FCFF9CF0FAFF4ECCDEFF5ECBDFFA00A0 C4FF00A0C46400000000000000000000000000A0C41B01A0C4FC7DD5E5FFCDF6 FAFFEAFBFDFFB8F4FBFFB5F4FCFFADF3FBFF9CEEF8FF52CFE0FFA7EFF8FF61CD E0FC00A0C4FA00A0C41B000000000000000001A1C49D1AACCBFEC4F3F8FFAEEF F7FFE0F9FCFFBDF3F9FFAEF1F9FFA4EFF8FF8EE6F2FF54D2E1FFC1F4F9FF6FE3 EFFF13A9C9F900A0C48A000000000000000005A3C6EC91DEEBFF93E8F2FFA1EB F4FFCDF4F9FFAEEEF6FFA1ECF5FF96EAF4FF81E2EFFF4ECFDFFF9EEBF4FF59DC EBFF54CDE0FE01A0C4E2000000000000000002A1C4FEA4E8F1FF80E2EDFF8BE5 F0FF90E6F1FF90E7F1FF8BE6F0FF82E4EFFF74DFEDFF6CDEECFF63DCEAFF3BD2 E4FF40D1E3FF01A0C4FD000000000000000003A1C4FF9BE6F0FF66DAE8FF69DB E9FF5CD9E7FF50D6E6FF51D6E7FF4FD6E6FF42D3E3FF32CDE1FF29CCE0FF24CA DEFF1FC8DDFF00A0C4FF000000000000000000A0C4FF79DDE8FF23C7DCFF16C5 DAFF65D9E7FF55D5E5FF47D2E3FF38CEE1FF28C9DDFF13B7CBFF16C5DAFF13C3 D9FF11C2D8FF00A0C4FF000000000000000000A0C4FF8BE1EBFF01BCD3FF04BE D4FF31C9DDFF08BFD5FF09BFD6FF09BFD6FF08BFD5FF05B0C5FF04BED4FF01BC D3FFFFFFFFFF00A0C4FF000000000000000000A0C4FFC9F1F6FF8AE1EBFF00BC D3FF22C5D9FF00BCD3FF00BCD3FF00BCD3FF00BCD3FF00AFC4FF01BCD3FF87DF EAFFFFFFFFFF00A0C4FF000000000000000001A0C4FCE3F4F8FFA3E7EFFFBAED F3FF84DEEAFF75DBE7FF3FCCDEFF0BBFD5FF4CD0E0FF9BE1EAFFC9F0F6FFC9F1 F6FFE3F4F8FF019FC3FC000000000000000000A0C4BB00A0C4FFDDF2F7FF93E3 EDFF9AE5EEFFA0E6EFFFA6E8F0FFABEAF1FFAFEAF1FFB1EAF1FFAFEAF1FFDDF2 F7FF00A0C4FF00A0C4AB00000000000000000000000006A2C4CE00A0C4FF5AC1 D8FFC7EAF2FFF0F9FBFFFDFEFEFFFDFEFEFFF0F9FBFFC7EAF2FF5AC1D8FF00A0 C4FF039FC0C80000000000000000000000000000000000000000009EC150019B BBCD11A4C4F407A2C4FC01A0C4FF01A0C4FF08A1C4FC0EA1C1F3049BBBCF0098 BA4A000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00A465341DA769 3A9FA76A3ADEA56736F6A76939E5A76A3ABCA4653453A4653405FFFFFF00FFFF FF00FFFFFF00A4653479A4653410FFFFFF00FFFFFF00A4653550A66838F6C090 68FAD3B08FFFDFC2A8FFDEC1A8FFD4B193FFB9875FF4A56737F0A4653458FFFF FF00A4663566A46534FFA465340FFFFFFF00A4653429A66939F5D3AD8CFFDCBD 9DFFDDBEA1FFE5CBB4FFE9D3BFFFEEDDCCFFF0E2D5FFE7D2BFFFAF774BF5A567 36C0AB7143F7A46635FCA465340EFFFFFF00A769399BC09069FDC59872FFA86B 3CFFA46635FFA76A3AFCB7855DF3D9BBA1FEF1E4D8FFF2E6DBFFF3E8DDFFCEA7 88FDEAD8C8FFA76A3AF9A465340DFFFFFF00A66838F3AB7041FFA96C3CFEA76A 3AF5A4653475A4653419A4653445A66938CDB98861F5EBDBCDFFF5EBE2FFF6EE E6FFF6EEE6FFA76A3AFAA465340BFFFFFF00A46535FEA76A3AFBC791689DA567 37E6A4653423FFFFFF00FFFFFF00FFFFFF00A4653460A46635FFE9D7C7FFEBD8 C6FFF5ECE3FFA66A3AFAA465340AFFFFFF00A46534FCB3794C7ECF9D762BBB83 5713A4653402FFFFFF00FFFFFF00A4653404A66838C4D0AC8FFAF6EEE7FFF2E6 DBFFF6EEE6FFA66A3AFBA4653409FFFFFF00A465340DFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00A46534A0A46534FFAD7447F8AF774CF7AF77 4CF7AF784CF7A46534FFA4653408FFFFFF00A46534F9A46534FEA46534FEA465 34FDA46534FCA46534FBA46534B9A465341DA4653418A4653418A4653418A465 3418A4653418A465341CFFFFFF00FFFFFF00A46534FCF5EDE5FFF6EDE5FFF5EC E4FFD7B79CFDA66837E0A4653410FFFFFF00FFFFFF00FFFFFF00FFFFFF00D5A4 7E1ACD997239A46534FCA465340CFFFFFF00A46635FCF6EEE6FFEBD7C4FFEAD9 C9FFA46534FEA465346AFFFFFF00FFFFFF00FFFFFF00A465340BA56635E9C995 6C8DB77F53C2A46534FFA4653405FFFFFF00A56737FDF6EEE6FFF5ECE3FFF5ED E4FFE6D2C1FFB0794DF5A66938CAA4653436FFFFFF00A465346AA96B3CEDB67C 4FFFA76A3AFEA56837FAFFFFFF00FFFFFF00A66838FDF1E4D8FFD4B295FEF4E9 E0FFF3E8DDFFEDDCCCFFD2AD8FFEB0784CF5A56635FBA66939FFA66939FEA96D 3DFFB0784CFFA76A3AA8FFFFFF00FFFFFF00A56737FEB7845BF7A56736D4B17A 4EF4E3CAB4FFECDAC9FFE7D1BCFFE3C9B0FFDEBEA0FFD2AB88FFCEA582FFD3AE 8EFFA66838F5A465342AFFFFFF00FFFFFF00A46534FFA5673693FFFFFF00A465 3454A66737EEB58055F3CEA684FFD8B697FFDBB999FFD3AC8AFFC2946DFCA668 38F6A466355BFFFFFF00FFFFFF00FFFFFF00A46534A2A4653401FFFFFF00FFFF FF00A4653405A4653453A76A3ABEA66938E9A46635FAA76A3AE4A76B3BAAA465 3424FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00884A2086874A20F9884B 21C6874A2025FFFFFF00FFFFFF00FFFFFF00FFFFFF00A5673686A46635F9A668 38C6A4653425FFFFFF00FFFFFF00FFFFFF00874A206B8B4E23F49F6131FF9658 2AFD884B20E1874A200BFFFFFF00FFFFFF00A466356BAA6E3DF4C89669FFBA83 54FDA66736E1A465340BFFFFFF00FFFFFF00884B20ED9F6030FFA46534FFA465 34FF8C4F23F2874A204DFFFFFF00FFFFFF00A56736EDC79567FFCF9F72FFCF9F 72FFAC7040F2A465344DFFFFFF00874A2018884B20F7A46534FFA46534FFA465 34FF945629FC874A2087FFFFFF00A4653418A56736F7CF9F72FFCF9F72FFCF9F 72FFB88050FCA4663587FFFFFF00874A204D8D5024F0A46534FFA46534FFA465 34FF9A5C2DFF894B21C9FFFFFF00A465344DAD7242F0CF9F72FFCF9F72FFCF9F 72FFC18C5EFFA76938C9FFFFFF00874A2082945629FCA46534FFA46534FFA465 34FFA06231FF874A20F6FFFFFF00A4653482B88051FCCF9F72FFCF9F72FFCF9F 72FFCA986BFFA56635F6FFFFFF00874A2079945629FAA46534FFA46534FFA465 34FF9F6030FF884B20EDFFFFFF00A4653479B77F50FACF9F72FFCF9F72FFCF9F 72FFC89568FFA56736EDFFFFFF00874A20518E5025F0A46534FFA46534FFA465 34FF995B2CFF894B21BAFFFFFF00A4653451AF7444F0CF9F72FFCF9F72FFCF9F 72FFBF8A5BFFA76938BAFFFFFF00874A2029894C21F3A46534FFA46534FFA465 34FF935528F9874A207AFFFFFF00A4653429A86A3AF3CF9F72FFCF9F72FFCF9F 72FFB67D4EF9A465347AFFFFFF00874A2006874A20FD874A20FF874A20FF874A 20FF874A20FF874A2044FFFFFF00A4653406A46534FDA46534FFA46534FFA465 34FFA46534FFA4653444FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00874A20E4874A20FF874A20FF874A 20FF874A20FAFFFFFF00FFFFFF00FFFFFF00A56635E4A46534FFA46534FFA465 34FFA46534FAFFFFFF00FFFFFF00FFFFFF00884B21C69A5C2DFFA46534FF9D5F 2FFF884B21E1FFFFFF00FFFFFF00FFFFFF00A66838C6C08B5DFFCF9F72FFC592 64FFA66837E1FFFFFF00FFFFFF00FFFFFF00874A20668C4F24F69E5F2FFF8F51 25F9884B208AFFFFFF00FFFFFF00FFFFFF00A4653466AC7040F6C69365FFB075 45F9A567368AFFFFFF00FFFFFF00FFFFFF00874A2008874A2082874A20F3884B 2096874A2010FFFFFF00FFFFFF00FFFFFF00A4653408A5663582A56635F3A667 3696A4653410FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00874A2002FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C5C5C575CCCCCC99BCBCBC3CFFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF007373733C72727286979797DAE8E8E8FFF1F1F1FFCFCFCFF77373 738C6C6C6C3CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF007373735C727272DCBABABAFFD8D8D8FFF4F4F4FFFDFDFDFFEAEAEAFFBCBC BCFF6B6B6BDC6A6A6A5CFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00757575C6C4C4C4FFDFDFDFFFEBEBEBFFE8E8E8FFF6F6F6FFF0F0F0FFE9E9 E9FFABABABFF6C6C6CC6FFFFFF00FFFFFF00FFFFFF00FFFFFF00B0B0B001ADAD AD01A1A1A1F2EFEFEFFFF0F0F0FFE6E6E6FFEDEDEDFFEEEEEEFFF9F9F9FFDDDD DDFFDEDEDEFF898989F6FFFFFF00FFFFFF00B1B1B103AFAFAF22ACACAC3CA9A9 A942B0B0B0FECBCBCBFFEFEFEFFFEFEFEFFFEDEDEDFFEFEFEFFFEFEFEFFFEFEF EFFFA6A6A6FF898989FFFFFFFF00FFFFFF00AFAFAF2AACACACA6A8A8A8E6A4A4 A4F2A1A1A1FFB9B9B9FFC7C7C7FFBEBEBEFFBFBFBFFFBBBBBBFFC2C2C2FFBABA BAFFC6C6C6FF848484FFFFFFFF00AEAEAE0CABABABB6D7D7D7FFEEEEEEFFF3F3 F3FFE3E3E3FFB6B6B6FFA9A9A9FFCCCCCCFFCDCDCDFFCACACAFFC6C6C6FFB6B6 B6FFB6B6B6FF7E7E7EFFFFFFFF00AAAAAA52C1C1C1FFEFEFEFFFE5E5E5FFEBEB EBFFF1F1F1FFEEEEEEFFB6B6B6FFA9A9A9FFD8D8D8FFCBCBCBFFD0D0D0FF9D9D 9DFFB5B5B5FF797979FFFFFFFF00A5A5A5BBE2E2E2FFDCDCDCFFD8D8D8FFDDDD DDFFE5E5E5FFEFEFEFFFE9E9E9FF868686FFD7D7D7FFCDCDCDFFD3D3D3FF9797 97FFB4B4B4FF747474FFFFFFFF00A0A0A0D0E6E6E6FFBFBFBFFFD0D0D0FFD5D5 D5FFDADADAFFE5E5E5FFF5F5F5FF787878FFC6C6C6FFCDCDCDFFD3D3D3FF9191 91FFB1B1B1FF6F6F6FFFFFFFFF009A9A9AB2DBDBDBFFE8E8E8FFB7B7B7FFA9A9 A9FFCCCCCCFFDADADAFFF5F5F5FF717171FFBFBFBFFFCBCBCBFFD1D1D1FF8C8C 8CFFAFAFAFFF6B6B6BFFFFFFFF009494945AB5B5B5FFF4F4F4FFE5E5E5FFDBDB DBFFDADADAFFDADADAFFF0F0F0FF6E6E6EFFCFCFCFFFC9C9C9FFD0D0D0FF8F8F 8FFFB9B9B9FF666666FFFFFFFF00FFFFFF00888888ACB5B5B5FFF3F3F3FFE9E9 E9FFE3E3E3FFE4E4E4FFB6B6B6FF929292FFE5E5E5FFE4E4E4FFDEDEDEFFD4D4 D4FFA0A0A0FF626262E5FFFFFF00FFFFFF00828282017C7C7CAEA7A7A7FFDADA DAFFD8D8D8FFD3D3D3FF666666FE727272FF707070FF6C6C6CFF686868FF6565 65FA626262E05F5F5F13FFFFFF00FFFFFF00FFFFFF00FFFFFF007171715D6C6C 6CE2686868C9646464BC60606061FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000007AB9FF007AB9FF007A B9FF007AB9FF007AB9FF00000000000000000000000000000000000000000000 000000000000000000000000000000000000007AB9FF9AEFFEFF9AEFFEFF9292 92FF97ECFEFF96ECFEFF0178B6FF000000000000000000000000000000000000 0000000000000000000000000000007AB9FF9DF2FEFF9DF2FEFF929292FFB6B6 B6FF0E0E0EFF99EEFEFF98EEFEFF0373ADFF0471AAFF056EA5FF066AA0FF0767 9BFF086597FF00000000000000000179B7FFC5F8FFFFC1F4FDFF929292FFC5F8 FFFF0E0E0EFFA7E0EEFFA0D9EBFF9BD5E7FF94CFE3FF8DCADFFF87C4DCFF81BF D9FF7ABAD5FF0B5D8AFF000000000277B4FFC3F6FDFF9CF3FEFF929292FFB6B6 B6FF0E0E0EFF92EBFDFF90E9FDFF8DE7FDFF8AE4FDFF88E2FDFF86E0FDFF83DE FDFF76B6D2FF0B5D8AFF000000000175B2FFBEF3FBFF9CF2FEFFB6B6B6FF0000 0000B6B6B6FF91E9FDFF8EE8FDFF8CE5FDFF89E3FDFF87E1FDFF84DEFDFF81DC FCFF72B3CFFF0B5D8AFF000000000374AFFFBAEFF9FF9AF1FEFF000000009292 92FF0000000090E8FDFF8DE6FEFF8BE3FDFF87E1FDFF85DFFDFF82DDFDFF7FDB FDFF6DAFCDFF0B5D8AFF000000000373ADFFB5ECF6FF98F0FEFFB6B6B6FF9292 92FFB6B6B6FF8EE7FDFF8BE4FEFF89E2FDFF85DFFDFF84DEFDFF80DBFDFF7ED9 FCFF69ABCBFF0B5D8AFF000000000471AAFFB1E7F4FF97EFFEFF000000009292 92FF000000008CE5FEFF8AE3FEFF87E1FDFF84DEFDFF81DCFDFF80DAFDFF7CD8 FDFF65A8C8FF0B5D8AFF00000000056FA7FFADE4F2FF95EDFDFFB6B6B6FF9292 92FFB6B6B6FF8AE4FDFF88E2FDFF85DFFDFF83DDFDFF80DBFDFF7DD9FDFF7BD6 FCFF60A4C6FF0B5D8AFF00000000056EA4FFA8E0EFFF94ECFDFF000000009292 92FF0000000089E2FDFF86E0FDFF84DEFCFF81DCFDFF7FD9FDFF7CD7FCFF79D5 FCFF5CA1C3FF0B5D8AFF00000000056CA1FFA4DDEDFF9ED7E8FF97D2E6FF90CD E1FF8AC8DEFF84C2DAFF7EBDD7FF77B8D3FF71B2D0FF6AADCCFF64A7C9FF5DA3 C4FF579DC1FF0B5D8AFF0000000000000000086597FF096496FF086495FF0963 94FF096292FF096291FF0A608FFF0B608FFF0A5E8DFF0B5E8BFF0C5E8AFF0C5C 8AFF0C5C88FF0000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000774B3B86774A3AE1784938FC794A38FD774B3AE3764C3D8D000000000000 000000000000000000000000000000000000000000000000000077493821784C 3BE2C3ADA4FFF4EFEDFFFDFCFCFFFBF9F7FFEFE7E2FFBEA59AFF794E3EE9764D 3D26000000000000000000000000000000000000000000000000784D3CE6E0D5 D0FFFAF8F5D5F4EFE8AAF3EAE2A4EEE3D9A8EBDFD3B2EDE2D8D9D6C4B9FF7B51 41F00000000000000000000000000000000000000000764D3D8EC3ADA4FFFAF8 F5D6F7F3EFA0FAF7F49FF6F0EBA2F2E8DFA6EDE0D4AAE4D3C2A7E5D5C5D3B89C 8DFF775143A2000000000000000000000000000000007A5040EDF4EFEDFFF5EF E8ACFAF7F39FFDFCFA9DF7F1ECA1F2E7DFA4EBDDD0A4E4D2C1A5C49D788AE1D2 C5FF7F5546F600000000000000000000000000000000794A39FDFDFBFAFFF2E9 E0A5F8F3EEB2FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7CCC1C1B988597BE9DB CEFF7A4B39FE716461020000000000000000000000007A4B3AFEFAF7F4FFEDE1 D6A7F1E7DEA7FFFFFFFFF5F0EBC9ECE6E0CCE2DAD2C8CDAE9191B682537DE7D6 C9FF7A4B39FE7164610B0000000000000000000000007E5445F4EDE5E0FFE8D9 CBADE8D7C89EFFFFFFFFE3D0C097E0CAB596D6B99D90BA895C7BBC8E608CDBC7 B5FF835848F9000000000000000000000000000000007A574ABABDA498FFECE0 D4D7D8BEA693FFFFFFFFD8BEA594CCA88787B9895B7AB27E4B80D9C1AAD6B191 7EFF836054D7000000000000000000000000000000007164610A805747F7D5C2 B7FFE4D3C3D3C59D778AFFFFFFFFB581527EBA8D5E8DD9C0A9D6C8AE9BFF8559 49FA7164611B000000000000000000000000000000000000000073584F4D8057 47F9B89B8CFFE0D0C2FFE8D9CCFFE5D6C7FFDAC6B5FFB2907EFF865A4AFB7C62 596A000000000000000000000000000000000000000000000000000000007164 6113836358DD835B4BFC98ACA6FF98ADA7FF98B1ABFF80685EF37164611F0000 0000000000000000000000000000000000000000000000000000000000000000 00004259590C3E5E5EFFC1EDEBFFCAF8F5FFABDFDDFF3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000425959073E5E5EFF5C8080FF84AAA8FF668B8AFF3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000003E5E5EFFBAE6E3FEC9F6F3FFB0D5D3FE3E5E5EFF000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000003E5E5E4C363939A5464646EC303030A93E5E5E4C000000000000 0000000000000000000000000000699A2FFF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FFFF0000FF412323FFD8E9ECFFD8E9ECFFD8E9ECFFD8E9 ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9ECFFD8E9 ECFFD8E9ECFFD8E9ECFF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF412323FF412323FF4123 23FF412323FFFFF8F1FFFFF8F1FF412323FFFFF8F1FF412323FF412323FF4123 23FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF0000FFFF0000FFFF0000 FFFF0000FFFFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFF0000FFFF0000FFFF00 00FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFF00FF00FF00FF00FF00 FF00FF00FF00FFF8F1FFFFF8F1FF412323FFFFF8F1FFFFFF00FFFFFF00FFFFFF 00FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FF00FF00FF00FF00FF00FF 00FF00FF00FFFFF8F1FFFFF8F1FF412323FFFFF8F1FF00FFFFFF00FFFFFF00FF FFFFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FFFFF8F1FF412323FFFFF8F1FFFFF8F1FFFFF8F1FFFFF8 F1FFFFF8F1FFFFF8F1FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FFFFFFFFFFFFFFFFFF412323FF4123 23FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF412323FF412323FF412323FF412323FF4123 23FF412323FF412323FF412323FF000000008A8F8DFF858A88FF858A88FF858A 88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A88FF858A 88FF858A88FF8A8F8DFF0000000000000000858A88FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FF0000 FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF4F5 F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF4F5F5FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8 F8FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFFF00 FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFF5F6 F6FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF7F8F8FFF6F7F7FFF5F6F6FFF4F5 F5FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF7F8 F8FFF7F8F8FFF7F8F8FFF7F8F8FFF6F7F7FFF5F6F6FFF4F5F5FFF3F4F4FFF3F3 F3FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FF007F 00FF007F00FF007F00FF007F00FF007F00FF007F00FF007F00FF007F00FFF1F2 F2FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF7F8F8FFF3F4 F4FFF3F4F4FFF2F3F3FFF1F2F2FFF0F1F1FFEFF0F0FFEEEFEFFFEDEEEEFFF0F0 F0FFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF6F7F7FFF5F6 F6FFF4F5F5FFF3F4F4FFF2F3F3FFF2F2F2FFF1F1F1FFF0F0F0FFEFF0F0FFEEEF EFFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF4F5F5FF9999 99FF999999FF999999FF999999FF999999FF999999FF999999FF999999FFEDED EDFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFF3F4F4FFEFF0 F0FFEEEFEFFFEDEEEEFFEDEDEDFFECECECFFEBEBEBFFEAEAEAFFE9E9E9FFEBEC ECFFFEFEFEFF888D8BFF0000000000000000858A88FFFFFFFFFFFEFEFEFFFEFE FEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFEFEFFFEFE FEFFFFFFFFFF888D8BFF00000000000000008A8F8DFF888D8BFF888D8BFF888D 8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D8BFF888D 8BFF888D8BFF8A8E8CFF00000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C99B6433C99B6433C99B6433C698 6233C3955F33C0925C33FFFFFF00FFFFFF00B3855033AE804C33A97B4733A376 42339E703D33986B3833FFFFFF00C99B6433C99B64FFD3AE82FFD0AC80FFCEA9 7DFFCBA67BFFC6A074FFB789532DB2844F2DBB956AFFB8946AFFB49066FFAF8B 62FFAB875EFF926432FF996C3933C69963FFC89A63FFFAFAFAFFFAFAFAFFFAFA FAFFF8F8F8FFD9C6B1FFB1834EE6AC7E4AE6D7C4AFFFF9F9F9FFF9F9F9FFF9F9 F9FFF9F9F9FF8B5D2CFF976938FFC69963FFC59760FFFAFAFAFFCDCDCDFFCACA CAFFC6C6C6FFF2F2F2FFDDD8D2FFEBE5DFFFFCFCFCFFCCCCCCFFC9C9C9FFBDBD BDFFF9F9F9FF845726FF916333FFC69963FFC1935CFFFAFAFAFFF2F2F2FFEFEF EFFFEAEAEAFFD5D5D5FFB5B5B5FFDFDFDFFFF5F5F5FFF1F1F1FFECECECFFDEDE DEFFF9F9F9FF7D5020FF8A5E2DFFC69862FFBC8E58FFFAFAFAFFCCCCCCFFCACA CAFFC5C5C5FFD4D4D4FFA7A7A7FFD8D8D8FFF5F5F5FFCBCBCBFFC7C7C7FFBBBB BBFFF8F8F8FF774A1AFF845828FFC29560FFB78953FFFAFAFAFFF1F1F1FFEDED EDFFE9E9E9FFD4D4D4FFA6A6A6FFD8D8D8FFF5F5F5FFEFEFEFFFEBEBEBFFDCDC DCFFF8F8F8FF714415FF7F5323FFBE915CFFB1834EFFF9F9F9FFCCCCCCFFC9C9 C9FFC5C5C5FFD3D3D3FFA6A6A6FFD8D8D8FFF4F4F4FFCACACAFFC6C6C6FFBABA BAFFF8F8F8FF6B3E10FF7A4D1EFFBA8D58FFAB7D49FFF9F9F9FFF1F1F1FFEDED EDFFE7E7E7FFD3D3D3FFA5A5A5FFD7D7D7FFF4F4F4FFEEEEEEFFEAEAEAFFDCDC DCFFF8F8F8FF66390BFF74481AFFB68854FFA57743FFF9F9F9FFF9F9F9FFF9F9 F9FFF8F8F8FFF1F1F1FFE3E3E3FFF3F3F3FFF8F8F8FFF9F9F9FFF8F8F8FFE9E9 E9FFF8F8F8FF623507FF704416FFB0834FFF9E703DFF986B38FF936533FF8D60 2EFF875A29FF825424FFAB9074FFAA8F73FF724516FF6D4011FF693C0DFF6538 0AFF613406FF5E3103FF6C3F12FFAB7E4AFFB38B5DFFB38B5DFFB38B5DFFB38B 5DFFB38B5DFFB38B5DFF7D5121FF794C1DFFB38B5DFFB38B5DFFB38B5DFFB38B 5DFFB38B5DFFB38B5DFF683C0EFFA37642FF9E703DFF986B38FF936533FF8D60 2EFF875A29FF825424FF936839FF906536FF724516FF6D4011FF693C0DFF6538 0AFF613406FF5E3103FF5B2E01FFFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF008254249F764919E1714415E1825424BAFFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00CFCFCF48648BC2FF4978BEFF2861 BAFF000000360000003600000036000000360000003600000036000000360000 0036000000360000003600000020CFCFCF2ECCCCCCF4C4C7CAFFC1C7CDFF275F B8FFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFF0000003678787806B1B1B1606787B9FF679AC5FF275E B8FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF5F5F5FFF4F4F4FFF4F4F4FFF4F4 F4FFF2F2F2FFFBFBFBFF00000036CFCFCF2ECCCCCCF4C4C7CAFFC0C7CDFF265B B7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF5F5F5FFF5F5F5FFF5F5 F5FFF3F3F3FFFAFAFAFF0000003678787806B1B1B1606783B7FF6699C4FF2659 B7FFF8F8F8FFF8F8F8FFE1A57AFFE1A378FFE1A377FFE0A276FFE0A076FFE0A0 74FFF4F4F4FFFAFAFAFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C7CDFF2656 B5FFF9F9F9FFF9F9F9FFE1A378FFEAC0A3FFEAC0A2FFEABFA1FFEABEA0FFDF9E 71FFF4F4F4FFF7F7F7FF0000003678787806B1B1B1606682B5FF6596C3FF2555 B4FFFAFAFAFFFAFAFAFFE0A276FFE0A076FFE0A074FFDF9E73FFDC9C72FFDC9B 6FFFF2F2F2FFF6F6F6FD00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C7CDFF2552 B2FFFBFBFBFFFAFAFAFFF8F8F8FFF8F8F8FFF8F8F8FFF7F7F7FFF3F3F3FFF2F2 F2FFF0F0F0FFEEEEEEF40000003378787806B1B1B160657FB5FF6494C2FF2451 B2FFFAFAFAFFF8F8F8FFE09F73FFDD9D71FFDC9A6EFFDA996BFFD9986AFFD493 6AFFEAEAEAFFECECECFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CDFF234E B1FFFAFAFAFFF9F9F9FFF8F8F8FFF7F7F7FFF6F6F6FFFAFAFAFFFAFAFAFFFAFA FAFFF2F2F2FFD1D1D1FF0303033878787806B1B1B160647CB3FF6392C1FF234B AFFFF9F9F9FFF9F9F9FFF9F9F9FFF6F6F6FFF3F3F3FFFAFAFAFFFAFAFAFFF2F2 F2FFC9C9C9FFE8E8E8FF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CCFF2249 AEFFFAFAFAFFFAFAFAFFF8F8F8FFF4F4F4FFF1F1F1FFFBFBFBFFF2F2F2FFCACA CAFFE6E6E6FFFCFCFCFF0000003678787806B1B1B1606379B3FF618FBFFF2246 AEFFFAFAFAFFFAFAFAFFF6F6F6FFF3F3F3FFEEEEEEFFF3F3F3FFCACACAFFE6E6 E6FFFBFBFBFFFCFCFCFF00000036CFCFCF2ECCCCCCF4C4C6CAFFC0C6CCFF2143 ACFFFDFDFDFFFBFBFBFFF8F8F8FFF4F4F4FFEDEDEDFFD5D5D5FFE9E9E9FFFFFF FF00FFFFFF00FFFFFF000000003678787806747474212C4BA5FF355DAFFF2142 ABFFDCDCDCFFD8D8D8FFD4D4D4FFD2D2D2FFD1D1D1FFD3D3D3FFD1D1D1FFCBCB CBFFCDCDCDFFC7C7C7FF00000036FFFFFF00FFFFFF001225603F18317E811326 6364000000360000003600000036000000360000003600000036000000360000 0036000000360000003600000020FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00AAA39E99C3BFBBFAC8C4BFFFC8C2BEFFC5C0 BAFFC1BAB5FFBDB6B1FFB9B2ABFFB5ACA5FFB0A79FFFABA098FFA69B92FFA195 8BFF9C8F85FF94877CFA7E736B6EC3BFBBFE4A4FD3FF17ADE2FF3EB042FFE1DB D6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DBD6FFE1DB D6FFE1DCD7FFEDEAE7FF8B7B6E93C9C3BFFFB8BBF1FF94E4F6FFB2E5B4FFEDE9 E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9E6FFEDE9 E6FFEDE9E6FFF5F4F2FF86776994C5C0BAFF313131FF323232FF333333FF3434 34FF353535FF363636FF373737FF393939FF3B3B3BFF3C3C3CFF3D3D3DFF3F3F 3FFF414141FF434343FF7F706494C3BEB9FF343434FF202020FF212121FF2222 22FF242424FF252525FF262626FF282828FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F 2FFF313131FF464646FF8F7F7394C1BAB5FF343434FF202020FFCFCFCFFFA8A8 A8FF242424FF252525FF262626FF282828FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F 2FFF313131FF464646FF8B7B6E94BEB7B2FF393939FF252525FF262626FFDEDE DEFF747474FF2A2A2AFF2C2C2CFF2D2D2DFF2F2F2FFF313131FF323232FF3434 34FF353535FF4B4B4BFF85766894BAB2ACFF3D3D3DFF292929FFD1D1D1FFADAD ADFF2E2E2EFF2F2F2FFF313131FF323232FF343434FF363636FF373737FF3838 38FF3A3A3AFF4E4E4EFF7E6F6394B6AEA7FF424242FF2F2F2FFF303030FF3131 31FF333333FF343434FF363636FF363636FF383838FF3A3A3AFF3B3B3BFF3D3D 3DFF3D3D3DFF525252FF786B5F94B2A9A1FF474747FF333333FF343434FF3636 36FF373737FF393939FF3A3A3AFF3B3B3BFF3C3C3CFF3E3E3EFF3F3F3FFF4040 40FF414141FF555555FF73665B94AEA49CFF4B4B4BFF383838FF393939FF3A3A 3AFF3C3C3CFF3D3D3DFF3F3F3FFF3F3F3FFF414141FF424242FF424242FF4444 44FF454545FF575757FF6E615694A99F96FF4E4E4EFF3D3D3DFF3D3D3DFF3E3E 3EFF3F3F3FFF414141FF424242FF434343FF444444FF454545FF464646FF4646 46FF484848FF5A5A5AFF695D53949D938AF2525252FF535353FF545454FF5555 55FF565656FF575757FF575757FF585858FF595959FF5A5A5AFF5B5B5BFF5C5C 5CFF5C5C5CFF5D5D5DFF61564C8C82786F6F91857CD293857CDF8F8276DF8C7E 72DF88796DDF847569DF7F7065DF7A6D61DF76695DDF71645ADF6E6156DF695D 53DF665A51DF61554CD2554C4440FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000001C000000330000 0036000000360000003600000036000000360000003600000036000000360000 002000000002FFFFFF00FFFFFF00FFFFFF00FFFFFF0000000033F8F8F8F0FBFB FBFDFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFF8F8F8FF9494 94910000002000000002FFFFFF00FFFFFF00FFFFFF0000000036FBFBFBFDF4F4 F4FFF5F5F5FFF5F5F5FFF5F5F5FFF1F1F1FFEFEFEFFFE9E9E9FFFCFCFCFFE7E7 E7FF959595910000002000000002FFFFFF000000000100000036FCFCFCFFF7F7 F7FFF9F9F9FFF7F7F7FFF7F7F7FFF3F3F3FFF0F0F0FFEAEAEAFFFCFCFCFFF6F6 F6FFF4F4F4FF9999999100000020FFFFFF000000000100000036EFF0FBFFF9F9 F9FFF9F9F9FFF9F9F9FFF7F7F7FFF6F6F6FFF2F2F2FFEBEBEBFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFF00000036FFFFFF0000000001070A3642646AF3FF5253 F2FFFCFCFCFF5A57F4FF6568F4FFEBECF7FFF5F5F5FFF1F1F1FFECECECFFEAEA EAFFE6E6E6FFFCFCFCFF00000036FFFFFF001B2DE013343EE3D26366F2FF565F F2FFFCFCFCFF5A5BF4FF6868F3FF636BF3FFE8EAF7FFF5F5F5FFF2F2F2FFEFEF EFFFEDEDEDFFFCFCFCFF000000361B2FEC584A4DF2F76265F1FF5562F2FFE3E7 FAFFFCFCFCFFE4E6FAFF575CF2FF6265F1FF4D53F1FFA9B5F2FFF6F6F6FFF3F3 F3FFF2F2F2FFFCFCFCFF00000036464AF1F16B70F3FF474EEEFCCDD5F7FFFCFC FCFFFCFCFCFFFCFCFCFFCED4F8FF4A51EFFF676EF0FF4A59EFFFF3F5F8FFF6F6 F6FFF6F6F6FFFCFCFCFF000000361334E7584450F0F75B65F0FF5065EDFFE2E8 F9FFFCFCFCFFE3E7FAFF5362EFFF5B65F0FF4755EDFFA8B9F2FFF9F9F9FFF9F9 F9FFF8F8F8FFFCFCFCFF00000036FFFFFF000C36D6132847DAD25565EEFF4E6A EBFFFCFCFCFF5264EFFF5964EFFF5972ECFFEAEEF9FFFAFAFAFFFAFAFAFFF8F8 F8FFF8F8F8FFFCFCFCFF00000036FFFFFF0000000001020E32425773EAFF4662 EAFFFCFCFCFF495CEDFF5972ECFFEDF0F9FFFAFAFAFFFAFAFAFFFAFAFAFFFAFA FAFFFAFAFAFFFCFCFCFF00000036FFFFFF000000000100000036FCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFB FBFFFBFBFBFFFCFCFCFF00000036FFFFFF000000000100000036FCFCFCFEFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFFFCFCFCFD00000036FFFFFF00FFFFFF0000000034F9F9F9F5FCFC FCFDFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFC FCFFFCFCFCFDF9F9F9F300000033FFFFFF00FFFFFF000000001D000000340000 0036000000360000003600000036000000360000003600000036000000360000 003600000036000000330000001DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D9D9D967D4D4D4F6CFCF CFEFC8C8C8E5C0C0C0D8B7B7B7C3AEAEAE93A4A4A47D9B9B9B6E919191498787 8704FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00D0D0D0F8C9C9C9F8C2C2 C267FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C4C4C4FDBCBCBCB4B3B3 B310FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FCDEC1E3FCDEC1FFBBB9B6FFB3B1AEFFFADB BEFFF8D8BBFFF6D5B7FFF3D2B3FFF0CEAEFFEDC9AAFFEAC5A4FFE7C09FFFE3BC 9AFFE0B795FFDDB28FFFD9AE8AE3FCDEC1FFEFE2D8FFEFE2D8FFEFE2D8FFEEE1 D7FFEEE0D6FFEEDFD4FFEDDDD2FFECDCD1FFEBDACEFFEAD8CCFFEAD7CAFFE8D5 C7FFE7D3C5FFE7D1C2FFD5A883FFFCDEC1FFEFE2D8FFFCFCFCFFE4CCBCFFFCFC FCFFE1C9B7FFFCFCFCFFDFC3B0FFFCFCFCFFDCBEA9FFFCFCFCFFD9B8A1FFFCFC FCFFF7F3F0FFE5CEBEFFD1A27DFFFADCBFFFEEE0D6FFE3CBBAFFE2C9B8FFE0C6 B4FFDFC4B1FFDEC2ADFFDCBFAAFFDABCA6FFD9B9A2FFD7B69EFFD6B39AFFE9D6 CAFFFCFCFCFFE3CBBAFFCE9D77FFF8D8BBFFEDDED4FFFCFCFCFFFCFCFCFFDEC2 AEFFFCFCFCFFDBBCA6FFFCFCFCFFD8B69EFFFCFCFCFFD5B097FFFCFCFCFFFCFC FCFFFCFCFCFFE1C8B6FFCA9972FFF5D4B6FFECDCD0FFDEC3AFFFDDBFABFFDBBD A7FFD9BAA3FFD8B79FFFD6B49CFFD5B197FFD3AE94FFD1AB8FFFD0A88CFFCFA6 88FFCDA385FFE0C5B3FFC7956EFFF2D0B1FFEAD8CCFFFCFCFCFFDABAA4FFFCFC FCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFCCA1 82FFFCFCFCFFDFC3B0FFC5926AFFEECBABFFE8D5C8FFE8D4C5FFE7D2C3FFE5D0 C1FFE5CEBEFFE3CCBCFFE3CAB9FFE2C9B7FFE1C7B5FFE0C5B3FFDFC4B1FFDFC4 B0FFDEC2AFFFDEC2AEFFC49068FFEAC5A4EBE7C09FFFE3BC9AFFE0B795FFDDB2 8FFFD9AE8AFFD6A985FFD3A57FFFD0A07BFFCD9C76FFCA9972FFC8966EFFC693 6BFFC49069FFC49068FFC49068EBFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF0000000000000000000000000000000000ACAC AC1DACACAC8FA4A4A4E7A3A3A3F3A3A3A3F2AEB0AF8A00000000000000000000 000000000000AFB1B04CA5A6A6B200000000000000000000000000000000ACAC AC4AA3A4A3ECAFB1B0C100000000AEB0AF519F9F9FD4A4A4A4E8A4A5A4E4AEB0 AF4F00000000AFB1B0D3AFB1B081000000000000000000000000000000008383 8394909191F0818181E5818181A1000000000000000000000000ACACAC1FA6A7 A7D2A6A7A6C8ADAFAEA0000000008083847F828586FF838886FF858A88FF8181 81FFBDBDBDFFA1A4A3FF828382FF858A88FF818685FF7F8283EF818485A40000 0000000000000000000000000000848788FFEDEDEDFEF0F0F0FFFAFAFAFF8383 83FFBABABAFFAAAAAAFF838383FFFAFAFAFFECECECFFD8D9DAFE848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFFAFAFAFF8383 83FFA0A0A0FFA3A3A3FF838383FFFAFAFAFFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFFAFAFAFFFAFA FAFF878787FF878787FFFAFAFAFFFAFAFAFFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFE5E5E5FFFAFA FAFFFAFAFAFFFAFAFAFFFAFAFAFFE5E5E5FFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFE7E7E6FFD3D3D2FFD3D3D2FFD3D3 D2FFE0E0DFFFFCFCFCFFD3D3D2FFD3D3D2FFD3D3D2FFE7E7E6FF848788FF0000 0000000000000000000000000000848788FFDAD9DAFFE6E5E6FFE6E5E6FFE6E5 E6FFE1E1E1FFE6E5E6FFE6E5E6FFE6E5E6FFE6E5E6FFDAD9DAFF848788FF0000 0000000000000000000000000000848788FFE5E5E6FFD1D0D1FFD1D1D1FFD2D1 D2FFD0D0D1FFCECECEFFCCCDCCFFC9CACAFFC7C8C7FFDFDFDFFF848788FF0000 0000000000000000000000000000848788CCE4E4E4FFCECFCEFFCECFCFFFCECE CFFFCDCECEFFCCCCCCFFCACACAFFC8C8C8FFC5C6C6FFDFDFDFFF848788CC0000 0000000000000000000000000000848788A3E1E1E1FFD1D1D1FFCCCBCBFFCBCB CCFFCACACBFFC9CACAFFC8C8C7FFC6C6C6FFCCCBCCFFDFDFDFFF8487889B0000 000000000000000000000000000084878864B9BABAFFDDDDDDFFD4D4D4FFCDCD CDFFC8C8C8FFC7C7C7FFC5C5C5FFD1D1D1FFDBDBDBFFB4B5B5FF848788770000 00000000000000000000000000008487880E8A8D8EC3C0C1C1FFE1E1E1FFE0E0 E0FFE0E0DFFFDFDFDFFFDFDFDFFFDEDEDEFFBDBFBFFF9A9D9DFF848788160000 0000000000000000000000000000848788098487882184878895848788C78487 88FF848788FF848788FF848788FF848788FF848788E08487881B848788070000 0000000000000000000000000000FFFFFF00C17D4460C88B4DBBC88C4FEEC88C 4FF6C88C4FF7C88C4FF7C88D4FF7C98C4FF7C78B4FF7C5894BD4C4763B91B368 3C06FFFFFF00FFFFFF00FFFFFF00FFFFFF00C48549C3F7F2ECECF8F4EEFCF8F4 EDFFF8F3EDFFF8F3EDFFF8F3EDFFF8F2ECFFF7F2ECFFF2E6D7FFE2B27DFFDB94 65F5B3683B07FFFFFF00FFFFFF00FFFFFF00C5884BEAFAF6F2FCFAE0C7FFFBE1 C9FFFBE2C9FFFBE0C8FFF9DFC5FFF8DBC1FFF4D6B8FFFFFBF8FFF6D8B4FFE1B0 7DFFDB9264F6B46B3E07FFFFFF00FFFFFF00C6894CF6F9F5F1FFFCE3CDFFFBE3 CEFFFBE3CDFFFBE2CBFFF9E0C8FFF8DCC2FFF5D6BAFFFDFBF8FFFCE6CDFFFAE5 C9FFE2B684FFBF7942A6FFFFFF00FFFFFF00C6894BF7F9F5F1FFFCE3CFFFFBE4 D0FFFCE4CFFFFCE3CDFFFAE1CAFFF9DDC4FFF6D9BCFFF4E9DFFFF7F2ECFFFBF7 F3FFF5EFE9FFC27E45FBFFFFFF00FFFFFF00C6894BF7F9F4F0FFFCE6D3FFFCE6 D4FFFDE7D3FFFCE4D1FFFBE3CDFFFAE0C8FFF8DCC2FFF5D6BBFFF3D4B5FFF1D2 B3FFF8F4F0FFC48246F7FFFFFF00FFFFFF00C6884AF7F9F4EFFFFEE7D7FFFDE7 D6FFFDE7D5FFFDE6D4FFFCE6D2FFFBE1CCFFFADFC7FFF8DCC2FFF6DABDFFF6D8 BBFFFAF4EFFFC68346F7FFFFFF00FFFFFF00C68849F7F9F4EDFFFEE8D8FFFEE8 D8FFFEE8D7FFFEE7D6FFFDE5D3FFFCE4D1FFFBE1CCFF46A872FF319F65FFF8DC C2FFFAF4EDFFC68245F7FFFFFF00FFFFFF00C68447F7F9F3ECFFFEE8D6FFFEE8 D7FFFDE7D6FFFDE7D6FFFDE7D5FFFDE5D3FFFBE4D0FF41A46BFF5AB381FF2898 57FFFAF2EAFFC68042F7FFFFFF00FFFFFF00C58245F7F8F2EBFFFEE7D6FFFDE7 D6FFFDE7D6FF3DA56FFF3AA46FFF36A269FF329E63FF55AF7CFF91CBAAFF4FAB 74FF1B9148FFC47C3FF7FFFFFF00FFFFFF00C58042F7F8F1E8FFFEE5D5FFFDE5 D3FFFDE5D3FF37A36BFF96CEB0FF94CDADFF91CBAAFF90CBA8FF74BC90FF8AC7 A1FF46A568FF0A8735FF01832D01FFFFFF00C47C40F7F7F0E6FFF8B455FFF7B4 56FFF7B554FF319F63FF94CDADFF6FBA8EFF6BB889FF66B685FF61B380FF67B5 82FF83C298FF3CA05CFF007F25F9FFFFFF00C1783CF7F7EDE3FFFDC26EFFFFD8 A0FFFFD79EFF299B5BFF90CAA9FF8DC8A5FF8AC6A1FF88C59EFF6AB685FF82C2 97FF48A566FF1D7A23FE00791B09FFFFFF00BF7138F5F5EBDFFEFDBF68FFFCBD 67FFFBBE65FF239751FF1D9149FF178F43FF118B3BFF3A9F5EFF80C196FF46A3 62FF2E9446FFB4652CF3FFFFFF00FFFFFF00BC6933DEF8F1EAF2F7ECDFFDF6EB DEFFF6EADEFFF6EADCFFF6EADCFFFAF3EBFFFAF3EBFF158C3AFF43A15FFF3294 4AFFF8FBF8F0B7602AD5FFFFFF00FFFFFF00BB6A346BBA6530BCBB6631EDBA66 30F7BA6630F7BA6630F7BA6530F7BA652FF7B9652EF70E7B22FE037B1EFFB664 2EEFB7622CBDB7622E63FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00BB89626BE4C2A5F4E3BA95FFD8AF88FFD6AB 86FFD4A981FFCFAD90F4B8845FA9E2BD9FF4E1B48DFFE1B28AFFD1A27CFFCE9F 77FFC9A284F4AF78566BFFFFFF00E4BE9FFDEDC8A9FFEDC7A8FFEDC7A8FFECC6 A7FFECC5A5FFECC4A4FFE2B897FFEBC3A1FFEBC19FFFEAC09DFFEABF9CFFEABE 9AFFE9BD98FFC39473FDFFFFFF00E3B995FFE3B994FFE3B893FFE2B791FFE2B6 90FFE2B58EFFE1B38CFFE0B28AFFE0B189FFDFAF87FFDFAE85FFDEAC82FFDDAB 80FFDDA97EFFC08C67FFFFFFFF00E2B692FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDFAD86FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBB8461FFFFFFFF00E0B48FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDCAA82FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB67F5BFFFFFFFF00DEB18CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFDAA67EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB17756FFFFFFFF00DBAD86FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFD6A178FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFAD7052FFFFFFFF00D9A982FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFD39D73FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA86B4EFFFFFFFF00D5A47CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCF986EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFA4674AFFFFFFFF00CF9D75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC89067FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF9D6045FFFFFFFF00CB9771FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC58963FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF995D43FFFFFFFF00C8916BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC1845EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF975A40FFFFFFFF00A66D4EA9C08862FFBC835FFFA66C4FFFA269 4BFF9F6549FF9D6246FF9C6045E2B97C57FFB57654FFB27251FF9A5E43FF975B 42FF975940FF975940A9FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000A971516BDDB18DF4DCA77BFFDCA67AFFDAA4 7AFFD8A279FFD5A076FFD49E75FFD29D73FFCF9A72FFCE9970FFCB966FFFC994 6CFFC49A7AF4A971516B00000000DDAC85FDE8B992FFE8B992FFE8B992FFE8B9 92FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B992FFE8B9 92FFE8B992FFC1906FFD00000000DCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA7 7BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA77BFFDCA7 7BFFDCA77BFFC08B66FF00000000DBA47AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFBD8763FF00000000D9A379FFFFFFFFFFCCCCCCFFCACACAFFC6C6 C6FFFEFAF7FFBDBDBDFFBBBBBBFFB7B7B7FFFEFAF7FFB1B1B1FFB0B0B0FFADAD ADFFFFFFFFFFBA8560FF00000000D8A279FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFB7815EFF00000000D5A076FFFFFFFFFFC8C8C8FFC6C6C6FFC0C0 C0FFFEFAF7FFBABABAFFB8B8B8FFB2B2B2FFFEFAF7FFA9A9A9FFA7A7A7FFA5A5 A5FFFFFFFFFFB57E5CFF00000000D49E75FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFD4EAF6FF808691FF309ED33ED19C73FFFFFFFFFFC2C2C2FFC0C0C0FFB9B9 B9FFFEFAF7FFB5B5B5FFB3B3B3FFABABABFFFEFAF7FFA2A2A2FF9E9E9EFF7FA2 ADFF8AC1E7FFCBE3F8FF64A3D4EACC976FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCAEDF8FF9AE2 F4FF7BCEEFFF86BAE5FF75ABD9BDCA946EFFFFFFFFFFBEBEBEFFBABABAFFB2B2 B2FFFEFAF7FFB2B2B2FFAEAEAEFFA5A5A5FFFEFAF7FF7DA0ABFF9AE2F4FF6EE1 F7FF6FDAF4FF5F90BAFF00000000C8926CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC8E1EDFF97D6E9FF6EE1F7FF6FDA F4FF74B4E5FFA97251FF00000000A97151A9C38E68FFC08B66FFBE8864FFBB85 61FFB9835FFFB47E5CFFB27C5AFF877668FF9CC7E2FF4BA7CDFF62C9E6FF5D8D B5FFA97151FFA97151A900000000000000000000000000000000000000000000 0000000000000000000000000000185876808CBEECFF5296D6FF256FB1BF0000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000134058401D567D80327EB66B000000000000 000000000000000000000000000000000000D8D8D847D6D6D6B3D1D1D1BFCBCB CBBFC5C5C5BFBEBEBEBFB6B6B6BFAFAFAFBFA5A5A5B3A0A0A047000000000000 0000000000000000000000000000D6D6D618DEDEDEAFEAEAEAFFEAEAEAFFEAEA EAFFEAEAEAFFEAEAEAFFE9E9E9FFE3E3E3FFDDDDDDFFADADADB08E8E8E180000 0000000000000000000000000000D6D6D64FE1E1E1EFE0E0E0FFDCDCDCFFD8D8 D8FFD5D5D5FFD4D4D4FFD5D5D5FFCCCCCCFFD9D9D9FFBCBCBCEE8E8E8E500000 0000000000000000000000000000D7D7D7B6E6E6E6FFE2E2E2FFDEDEDEFFDBDB DBFFDADADAFFD8D8D8FFD8D8D8FFD9D9D9FFDDDDDDFFD2D2D2FF909090B60000 0000000000000000000000000000CECECEDAD2D2D2FFC2C2C2FFB4B4B4FFB2B2 B2FFB0B0B0FFAEAEAEFFACACACFFA9A9A9FFB0B0B0FFBBBBBBFF948D87FFE8B9 92FFE8B992FFE8B992FFC1906FFDC6C6C6FFCECECEFFBDBDBDFF909090FF9191 91FF929292FF919191FF909090FF8E8E8EFFABABABFFBCBCBCFF808080FFDCA7 7BFFDCA77BFFDCA77BFFC08B66FFBFBFBFFFC9C9C9FFBABABAFFACACACFFAAAA AAFFA9A9A9FFA6A6A6FFA4A4A4FFA2A2A2FFA8A8A8FFB8B8B8FF7A7A7AFFFFFF FFFFFFFFFFFFFFFFFFFFBD8763FFB8B8B8F1CECECEFFC3C3C3FFBFBFBFFFBCBC BCFFB9B9B9FFB6B6B6FFB3B3B3FFB1B1B1FFAFAFAFFFB7B7B7FF797979FFB9B9 B9FFB9B9B9FFFFFFFFFFBA8560FFA4A4A4649D9D9D80959595808B8B8B80AD92 7EFFBDBDBDFFB8B8B8FFB5B5B5FFB2B2B2FFAFAFAFFFADADADFFBDBDBDFFFDFD FDFFFDFDFDFFFFFFFFFFB7815EFF00000000000000000000000000000000D5A0 76FFFFFFFFFFC1C1C1FFBEBEBEFFBABABAFFB7B7B7FFB5B5B5FFB2B2B2FFAEAE AEFFADADADFFFFFFFFFFB57E5CFF00000000000000000000000000000000D49E 75FFFFFFFFFFFFFFFFFFFEFEFEFFFEFEFEFFFEFEFEFFFDFDFDFFFDFDFDFFFDFD FDFFFCFCFCFFFFFFFFFFB27C5AFF00000000000000000000000000000000D19C 73FFFFFFFFFFB9B9B9FFB5B5B5FFB1B1B1FFADADADFFA9A9A9FFA6A6A6FFA2A2 A2FFA1A1A1FFFFFFFFFFB07A58FF00000000000000000000000000000000CC97 6FFFFFFFFFFFFDFDFDFFFDFDFDFFFCFCFCFFFCFCFCFFFCFCFCFFFCFCFCFFFBFB FBFFFBFBFBFFFFFFFFFFAC7554FF00000000000000000000000000000000CA94 6EFFFFFFFFFFB2B2B2FFADADADFFA8A8A8FFA4A4A4FF9F9F9FFF9D9D9DFF9999 99FF999999FFFFFFFFFFAA7353FF00000000000000000000000000000000C892 6CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFA97251FF00000000000000000000000000000000A971 51A9C38E68FFBB8561FFB9835FFFB47E5CFFB27C5AFFB17B58FFAE7957FFAB75 54FFA97353FFA97151FFA97151A90000000000000000888D8B48888D8BEC9095 93D500000000000000000000000000000000888D8B978C918FEE000000000000 0000000000000000000000A0C45D00000000000000008B908EF6F7F7F7FD888D 8BB79297957D00000000000000008D9190E6D0D3D2FE8C918FBF000000000000 00000000000000A0C43D00A0C4FA0000000000000000888D8BFED0D4D2FFEFF0 EFFD8F9492AC00000000878C8A3FA7ACAAFFC3C8C6FF8A8F8DF7000000000000 000000A0C42403A2C5F203A1C5FF00000000000000008A8F8DF3B0B5B3FFF6F7 F7FE888D8BD79297957D8B908EFAC9CECCFFABAFAEFD888D8BD40000000000A0 C41103A3C6E375DAEBFE10A6C8FC0000000000000000878C8A39888D8BFFD9DC DBFFEFF0EFFE8A8F8DE5B3B8B6FFCBCECDFF888D8BFD888D8B7D00A0C40503A3 C6C857CEE3FABCF6FDFF10A6C8FC0000000000000000000000008A8F8DE1B2B6 B5FFF7F7F7FF9B9F9EFFB3B6B5FFB5BAB8FD888D8BB20000000003A3C6A53ABE D9F7ADF4FDFFB1F5FDFF0FA5C7FC000000000000000000000000888D8B33888D 8BFEDFE1E1FF979C9AFFA5A9A8FF888D8BF7888D8B3302A2C57B22B3D0F5A7F1 FBFF62E8F9FFA4F1FBFF0EA5C7FC000000000000000000000000000000008A8F 8DA1B7BBBAFDA7ACAAFF8B908EFE878C8A9700A0C45310A8CAF69BEBF7FF6BE6 F7FF44DFF4FF9CEEF9FF0DA4C7FC0000000000000000000000001818AE8D1717 AAF70606A6FF0202A6FF191AC7FF1719ACF50F57B8FB88E3F2FF74E5F6FF37D2 EAFF3FDAF1FF94EAF7FF0CA4C7FC000000001919AE7D0707A9FD2020D2FD1E1E CEFE0E0FB7FD0204A7FE1A1AC9FF1F21D0FF1F20CBFF0A0BA9FF2C8ED4FF08A7 CAFF3AD6EDFF8BE6F4FF0BA3C7FC1A1AAF5C0606A8FE1F1FD0FB0303A8B81415 C0F80101A6FF004FB01A1B1ECCFF1419C0FF2742BDFF1D20CDFF0606A7FF0C5E B9FF34D0E8FF84E2F2FF0AA3C6FC1414ABE62323D5FD0303A87A000000001D1D CEF50A0AA9FC02A2C6BF0304A8FF1F25CCFF3CD1E8FF095CBCFB1F20D0FE1221 ADFF2FCBE5FF7ADEEEFF09A2C6FC0D0DABF91D1DCFFA000000000B0BB5902121 D3FD0A1BACEE26B3D0F62134B8FF2324D6FF1052C3FF00A0C4FF1E21D0FF1013 ABFF29C5E1FF70D9EBFF08A2C6FC1313ABDF2727DBFD1F1FD0F91D1DCEFD060D A9F1158CC4F87ADCECFF3BAADBFF0A18AEFF2223D4FF1D20CFFF1D1ECEFF1421 AFFF25C3DEFF66D4E8FF08A2C6FC1A1AAF5C0E0EAAE71010ABF41517ABF90B86 C2F86BD4E8FF77DAECFF6DD7EAFF4D91D3FF223BB8FF1118AEFF1421AFFF52AC DAFF5DD0E5FF62D1E5FF07A2C6FC000000000000000000A0C42D00A0C4F404A1 C5FC0EA5C8F60DA5C8F60CA4C8F60CA4C8F60BA4C8F60BA4C8F60BA4C8F60AA4 C7F60AA4C7F609A3C7F601A0C4FF4398D2EF3D94D0FF3A92CFFF3A92CFFF3D94 D0FF4197D1E44398D22B4498D2324498D2334498D2334498D2334499D2334499 D3370000000000000000000000003D94D0FFDCFCFFFFD8F7FFFFD8F7FFFFDBFA FFFF358ECDFF3991CEFF3A92CFFF3A92CFFF3A92CFFF3A92CFFF3A92CFFF3D94 D0FF4298D2EA00000000000000003B92CFFFD5F7FFFF60D1F9FF61D0F8FFB4EB FDFFD9F6FFFFDAF8FFFFDAF8FFFFDAF9FFFFDBF9FFFFDAF9FFFFDAFAFFFFDFFE FFFF3D94D0FF4599D335000000003B92CFFFCAF6FFFF69D5F9FF6CD5F9FF6AD4 F9FF69D4F9FF69D5F9FF6AD6FAFF6BD8FBFF6BD9FCFF6BDAFDFF69DAFDFFDAFD FFFF3C93D0FF367BAA2F000000003C92CFFFC0F3FFFF70D9FBFF73DAFBFF74DA FBFF74DAFBFF74DBFBFF76DEFDFF4FA9DCFF368BCAFF358BCBFF348BCBFF338C CCFF3790CEFF3D94D0FF4398D2AE3D92CFFFB8F3FFFF77DFFEFF7BE0FEFF7CE1 FEFF7CE1FFFF7DE2FFFF52ABDDFF56B9E8FFDAF8FFFFD8F7FFFFCCF1FFFFD6F7 FFFFD6F7FFFFDBFCFFFF3E94D0FF3E93CFFFB2F6FFFF51ACDEFF358ACAFF358A CAFF358ACAFF368ACAFF5BBDE9FF6ED9FBFF6BD7FAFF67D2F9FF2E9BEAFF64D2 F9FF83DFFCFFAAE1F6FF3A8AC1C84095D0FF90DDF8FF44A0D8FFDDFCFFFFDAFA FFFFDBF9FFFFDEFAFFFF74DCFCFF77DCFBFF78DDFBFF4EB8F1FF92E9FEFF48B4 F0FFA3EBFFFF7DC0E6FF3275A3704296D1FF8DA49CFF869D98FFD7B78AFF8BB1 A6FF90B2A5FF7ADFFDFF7FE2FDFF82E4FEFF70D5F9FF6AC2F2FFEEFFFFFF68C2 F3FF8EDCFBFF4D9CD2FF000000126F878BFFD9B98DFFD8B88FFFC99240FFD8B8 8FFFDBBA8EFF9AB8A8FF54BAF2FF329BE9FF2D99E9FFB7EEFEFFABEDFDFFB7EE FEFF2D9BEAFF329CEAFD38A1ED996A7F80FFC59555FFCB964FFF9A9A79FFCC97 4EFFCE9A56FF9BAA8CFF5AC1F5FFAFE8FCFFBFF4FFFF86E2FAFF5FD7FAFF85E3 FBFFC9F8FFFFB0E8FBFF3B9FE2BBDDB680FFE4B874FF787C71FF3E92CFFF707C 7EFFBAA786FFB5A389FF3F8ECFFF399CE1FF54C5F5FF7EDEFAFF5CD4F8FF7EDE FAFF4CC0F3FF2E8BD0B500000024714E259FCF974AFFDFBF92FFA17D51B5679D C4FF32C0FFFE3BC1FFFF3A86BFD028628D6A71CAF6FF76DAF8FF54CBF5FF7BDC F8FF69C8F3FF0000002000000000B079366FE4BD85FFD7A45DFFFFD78CFF15A6 FCFEA1A79FFF778683DC49B9EFFF47A3E59777D5F8FF3EAAEDFF318BCFAD3EAA EDFF7CD6F7FF39A0EB9700000000000000008A5F2C8F97683381EEB15EFF638B A5FF42C1F9FF45BAEDFF3C8BC8C44AA9EDFF389DE7F0173E5A490000001F163E 5A493FA0E7F045A7ECFF3CA3EB06000000000000000000000003000000050837 6F36295A8B5A275989521D426D45000000330000002F00000006000000000000 00060000002F00000033000000015A5857B1595756FF595857A95A5959005959 59005958590059585900595858005A585800595857A9595756FF5A5857B15C5A 59005C5A59005C5A59005C5A5900595756FFC5C6C7FF555657FF4F545AFF4C52 5AFF4B5158FF4B5056FF4C5055FF4F5155FF555455FFC5C6C7FF595756FF5C5A 59005D5B5A005D5B5A005D5B5A005C5A59FF575656FF50555BFFFFA022FFFFAD 46FFFFB860FFFFC274FFFFCC85FFFFD892FF505256FF575555FF5C5A59FF5F5D 5C005F5D5C005F5D5C005F5D5C005C5A59FFC2C4C6FF4D535BFFFFA73BFFFFB2 61FFFCBF7DFFFCC88EFFFFC88AFFFFCD84FF4D5157FFC2C4C5FF5C5A59FF5F5D 5C00605E5D005E5C5B005D5B5A005F5D5CFF5A5959FF50555DFFFFB150FFFCBB 74FFF6BA75FFF3B368FFF9AC56FFFFA740FF50555CFF5A5959FF5F5D5CFF615F 5E00605E5D005D5B5B008C8A8800615D5CFFC2C4C5FF54585DFFFFB553FFFFB5 5FFFFBBE76FFFAC17CFFFFB764FFFFB048FF55585DFFC2C3C5FF605D5CFF625F 5E005F5C5B008D8B890088868400625F5FFF5E5C5CFF5A5B60FF4F5764FF4954 63FF485260FF48515FFF49525FFF4E5560FF595A5EFF5D5B5CFF605D5DFF605D 5D008E8C8A008A8886008684820064615FFFC1C3C4FF5A5C61FFFFA01DFFFFAD 40FFFFBB5CFFFFC671FFFFCE84FFFFD891FF58595CFFBEBFC1FF5E5B5AFF8C8A 87008A8886008886840086848200656261FF605E5DFF5D5F60FFA88C70FF787E 85FF72777CFF6C7075FF8F8579FFFFCC83FF5A5B5EFF787675FF848280FF8381 7FFF83817FFF858381D485838100676462FFBFBFC0FF7D7C7AFFB7B8B8FFFDFE FFFFE7E6E7FFE4E4E5FFAAABADFF8C7154FF727272FFB8B6B6FFFFFFFFFFF4F1 F1FFE9E7E6FFB0AEACFF7C7A78D4686564FF625F5EFF807E7CFFFFFFFFFF817F 7DFF666462FF7C7A79FF7D7B7AFF7D7C7BFF7F7D7CFF7F7D7BFF7F7C7AFF6866 65FF575553FFDBD9D8FF807E7CFF6A6766FFBEBFBFFF787674FFEBE9EAFF7E7C 7AFF6B6767FF6B6966FFFFFFFFFFECEAEAFFE4E2E1FFC3C1BFFF7D7B7AFF4746 4569535150FFB2B0AFFF817F7EFF63605FBF696665FF747270FFE8E6E5FF8482 80FF6C6A68FF555352FF838180FF7A7877FF787675FF716F6EFF5C5A59FF6B69 67FF545251FFABA9A6FF716F6DFF00000023000000336C6A67D7AEACABFFD7D5 D4FFC2C0BFFF8E8C8BFF3F3D3CFF302E2DEE353433CD565453FF817F7DFFB0AE ACFFAAA8A6FF92908DFF5B5958FD6E6B6A006F6D6B00000000295F5D5BDD6B69 68FF757370FF696766FF312F2EEB17161644000000263A3838DC383635FF6A68 67FF62605FFF504E4DEC2726254D0000000000000000000000000000002A0000 003300000033000000330000002E00000005000000000000002A000000330000 0033000000330000002E00000007B57B09B2B88217FFB78115FFB68114FFB681 15FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB68115FFB681 14FFB78115FFB88217FFB57B09B2B88216FFEFD09EFFECCD99FFECCD99FFECCD 9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD9AFFECCD 99FFECCD99FFEFD09EFFB88216FFB67F10FFF6DDB7FFDC9D37FFDC9E39FFDC9E 39FFDB9E39FFDC9E39FFDC9F3AFFDC9E39FFDB9E39FFDC9E39FFDC9F3AFFDB9E 39FFDB9D37FFF5DDB6FFB67F10FFB57C0BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB57C0AFFB57C09FFFFFFFFFF7D7D7CFF747270FFADAC ABFFDCDCDBFF7F7E7CFF747371FFADACABFFDCDCDBFF7F7E7CFF747371FFACAB AAFFD7D7D7FFFFFFFFFFB57B08FFB57B09FFFFFFFFFFE5E6E5FFE9E8E6FFE5E5 E2FFE4E3E1FFE8E7E5FFE9E8E6FFE5E5E2FFE4E3E1FFE8E7E5FFE9E8E6FFE5E4 E1FFDEDEDEFFFFFFFFFFB57B08FFB57C09FFFFFFFFFF888785FF7E7C79FFB9B9 B6FFEBEAE9FF8A8885FF7E7C7AFFB9B9B6FFEBEAE9FF8A8885FF7E7C7AFFB9B8 B5FFE5E5E5FFFFFFFFFFB47B08FFB57B08FFFFFFFFFFF2F1F2FFF4F3F2FFF1F0 EFFFEFEEEDFFF3F2F1FFF4F3F3FFF1F0EFFFEFEEEDFFF3F2F1FFF4F3F3FFF0EF EEFFEAEAEAFFFFFFFFFFB47B08FFB57B08FFFFFFFFFF8E8D8CFF83817EFFC1C0 BFFFF5F4F3FF908D8BFF83817FFFC1C0BFFFF5F4F3FF908D8BFF83817FFFC0BF BEFFF0F0F0FFFFFFFFFFB47A08FFB57B08FFFFFFFFFFFCFDFEFFFDFEFDFFFAFA F9FFF8F8F7FFFCFDFCFFFEFEFDFFFAFAF9FFF8F8F7FFFCFDFCFFFEFEFDFFF9F9 F8FFF4F5F6FFFFFFFFFFB47A07FFB57B08FFFFFFFFFF969394FF888684FFCAC8 C7FFFEFFFDFF969291FF888684FFCAC8C7FFFEFFFDFF969291FF888684FFCAC7 C6FFFAFBFBFFFFFFFFFFB47A07FFB57B08FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB47A07FFB57C09FFFFFFFFFF9C9A9BFF8D8D8CFFD1D0 D1FFFFFFFFFF9B9998FF8D8D8CFFD1D0D1FFFFFFFFFF9B9998FF8D8D8CFFD0D0 D0FFFFFFFFFFFFFFFFFFB47B09FFB67E0EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB67E0EFFA77108C1B67E0EFFB57C09FFB57C09FFB57B 08FFB57B08FFB57B09FFB57C09FFB57B08FFB57B08FFB57B09FFB57C09FFB57B 08FFB57B09FFB67E0EFFA77108C1000000000000003300000033000000330000 0033000000330000003300000033000000330000003300000033000000330000 00330000003300000033000000005A5857B1595756FF595857A9000000000000 000000000000000000000000000000000000B3A293FAB5A292FFB4A08FFFB39F 8FFFB4A090FFB5A393FFB8A697EF595756FFC5C6C7FF555657FF4F545AFF4C52 5AFF4B5158FF4B5056FF4C5055FF4F5155FFB5A292FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFB7A596FF5C5A59FF575656FF50555BFFFFA022FFFFAD 46FFFFB860FFFFC274FFFFCC85FFFFD892FFB4A191FFFCFBF9FFFFFFFFFFFFFF FFFFFFFFFFFFB27223FFB9A799FF5C5A59FFC2C4C6FF4D535BFFFFA73BFFFFB2 61FFFCBF7DFFFCC88EFFFFC88AFFFFCD84FFB5A293FFF4F1ECFFAD6C1CFFFEFF FFFFAE6F21FFE6D7C1FFBAA899FF5F5D5CFF5A5959FF50555DFFFFB150FFFCBB 74FFF6BA75FFF3B368FFF9AC56FFFFA740FFB6A394FFEBE4DCFFF7F3EFFFB070 22FFF7F4F0FFECE6DFFFB8A596FF615D5CFFC2C4C5FF54585DFFFFB553FFFFB5 5FFFFBBE76FFFAC17CFFFFB764FFFFB048FFB7A595FFE4D9CDFFE2D8CCFFE3D9 CEFFE2D8CCFFE4D9CDFFB8A596FF625F5FFF5E5C5CFF5A5B60FF4F5764FF4954 63FF485260FF48515FFF49525FFF4E5560FF94887EFFB7A596FFB6A495FFB6A4 95FFB6A495FFB7A596FFA9998BBD64615FFFC1C3C4FF5A5C61FFFFA01DFFFFAD 40FFFFBB5CFFFFC671FFFFCE84FFFFD891FF4B4C4FFF98989AFF4B4848FF0000 0033000000330000003300000023656261FF605E5DFF5D5F60FFA88C70FF787E 85FF72777CFF6C7075FF8F8579FFFFCC83FF5A5B5EFF787675FF848280FF8381 7FFF83817FFF858381D400000000676462FFBFBFC0FF7D7C7AFFB7B8B8FFFDFE FFFFE7E6E7FFE4E4E5FFAAABADFF8C7154FF727272FFB8B6B6FFFFFFFFFFF4F1 F1FFE9E7E6FFB0AEACFF7C7A78D4686564FF625F5EFF807E7CFFFFFFFFFF817F 7DFF666462FF7C7A79FF7D7B7AFF7D7C7BFF7F7D7CFF7F7D7BFF7F7C7AFF6866 65FF575553FFDBD9D8FF807E7CFF6A6766FFBEBFBFFF787674FFEBE9EAFF7E7C 7AFF6B6767FF6B6966FFFFFFFFFFECEAEAFFE4E2E1FFC3C1BFFF7D7B7AFF4746 4569535150FFB2B0AFFF817F7EFF63605FBF696665FF747270FFE8E6E5FF8482 80FF6C6A68FF555352FF838180FF7A7877FF787675FF716F6EFF5C5A59FF6B69 67FF545251FFABA9A6FF716F6DFF00000023000000336C6A67D7AEACABFFD7D5 D4FFC2C0BFFF8E8C8BFF3F3D3CFF302E2DEE353433CD565453FF817F7DFFB0AE ACFFAAA8A6FF92908DFF5B5958FD0000000000000000000000295F5D5BDD6B69 68FF757370FF696766FF312F2EEB17161644000000263A3838DC383635FF6A68 67FF62605FFF504E4DEC2726254D0000000000000000000000000000002A0000 003300000033000000330000002E00000005000000000000002A000000330000 0033000000330000002E00000007000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000B9844448B68140FAB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB9844448000000000000000000000000B9844448BA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B68140FAF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFF389FEAFFF2C2 79FFFCDDA8FFC7995DFF00000000B98544A8B47D3CFFFBE1AEFFF4CB87FFF3CB 88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FF88B5C2FF9AF0FFFF88B4 C1FFFADBA5FFC69659FFB88342A8B98444FFE4C186FFFCE1A8FFF8D89CFFF8D8 9CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFF6FC7F4FFF1FFFFFF6FC7 F4FFFBDFA5FFF2D49BFFBD8949FFBA8545FFB88342FFB68040FFB57F3FFFB57F 3FFFB57F3FFFB57F3FFF6694ACFF359EEAFF329EEAFFB9F0FEFFACEDFDFFB9F0 FEFF329EEAFF359EEAFF6896AEFF000000330000003300000033000000330000 003300000033000000333793D2CAB3EBFCFFC1F5FFFF86E3FBFF5FD8FAFF86E3 FBFFCAF8FFFFB1E8FBFF3793D2CA000000000000000000000000000000000000 00000000000000000000000000243291D1B554C5F4FF7EDEFAFF5CD4F8FF7EDE FAFF4CC0F3FF2E8BD0B500000024000000000000000000000000000000000000 00000000000000000000000000000000002071CAF5FF76DAF8FF54CBF5FF7BDC F8FF69C8F3FF0000002000000000000000000000000000000000000000000000 00000000000000000000000000004AA8EC9777D4F7FF3EAAEDFF318BCFAD3EAA EDFF7CD6F7FF39A0EA9700000000000000000000000000000000000000000000 00000000000000000000000000004AA9ECFF389DE7F1173E5A490000001F163E 5A493FA0E7F145A7ECFF00000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000309163FF009C61FF0099 5DFF00985DFF00995DFF00A77BFF000000000000000000000000000000000000 000000000000008A47FF008A47FF0000000000000000008945FF84E5DFFF7EE0 D7FF7EDFD5FF82E2D9FF00995DFF000000000000000000000000000000000000 0000008642FF74E7DAFF74E7DAFF008641FF0000000000000000008037FF6EDF D2FF00B597FF6EE0D3FF00985DFF000000000000000000000000000000000086 42FF64E7D7FF00C09BFF00BF9BFF63E7D6FF00833DFF00823BFF62E5D3FF00BC 9AFF00BA9AFF5EE4D2FF00995EFF000000000000000000000000008642FF52E9 D4FF00C59DFF00C69EFF00C49EFF00C39DFF50E6CFFF50E6CFFF00C39CFF00C4 9EFF007E34FF49E6D3FF009B61FF0000000000000000008642FF40EBD0FF00C9 9DFF00CB9FFF008037FF008037FF00CA9EFF00C79CFF00C79CFF00C99EFF007D 32FF00000000008238FF007D3FB900000000008642FF30EECEFF00CE9CFF00CF 9DFF007C32FF0000000000000000007D32FF00CE9EFF00CE9EFF007C31FF0000 0000000000000000000000000000008947FF1EF0CCFF34BB83FFB28241FFB57F 3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB47F3EFFB57F3EFFB681 40FAB98444480000000000000000008946FF39D4A3FFBA8746FFF5D5AEFFFFEE CDFFFFE2B7FFFFE3B8FFFFE3B8FFFFE3B8FFFFE3B8FFFFE2B7FFFFEECDFFF5D5 AEFFBA8746FFB98444480000000000000000B2813FFFF2D3A8FFFBD094FFF2B2 5CFFF2B35DFFF2B35EFFF2B35EFFF2B35EFFF2B35EFFF2B35DFFF2B25CFFFBD0 94FFF2D2A8FFB68140FA0000000000000000B57F3EFFFFE8BFFFF2BA6BFFF2BA 6EFFF2BB6FFFF2BB70FFF2BB70FFF2BB70FFF2BB70FFF2BB6FFFF2BA6EFFF2B9 6BFFFFEAC3FFB57E3DFF0000000000000000B57F3EFFFCDFAAFFF2C279FFF2C3 7BFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37CFFF2C37BFFF2C2 79FFFCDDA8FFC7995DFF00000000B98544A8B47D3CFFFBE1AEFFF4CB87FFF3CB 88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CC88FFF3CB88FFF3CB 87FFFADBA5FFC69659FFB88342A8B98444FFE4C186FFFCE1A8FFF8D89CFFF8D8 9CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D89CFFF8D8 9CFFFBDFA5FFF2D49BFFBD8949FFBA8545FFB88342FFB68040FFB57F3FFFB57F 3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F3FFFB57F 3FFFB6803FFFB78242FFB98545FF000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000 } end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsymlink.lrt��������������������������������������������������������������������0000644�0001750�0000144�00000000351�12023046500�015652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMSYMLINK.CAPTION=Create symbolic link TFRMSYMLINK.LBLEXISTINGFILE.CAPTION=&Destination that the link will point to TFRMSYMLINK.LBLLINKTOCREATE.CAPTION=&Link name TFRMSYMLINK.BTNOK.CAPTION=&OK TFRMSYMLINK.BTNCANCEL.CAPTION=&Cancel ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udcreadpsd.pas������������������������������������������������������������������0000644�0001750�0000144�00000003642�12561717131�016140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Photoshop Document image class Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit uDCReadPSD; {$mode objfpc}{$H+} interface uses Graphics, FPImage; type { TPhotoshopDocument } TPhotoshopDocument = class(TFPImageBitmap) protected class function GetReaderClass: TFPCustomImageReaderClass; override; class function GetSharedImageClass: TSharedRasterImageClass; override; public class function GetFileExtensions: String; override; end; implementation uses FPReadPSD; { TPhotoshopDocument } class function TPhotoshopDocument.GetReaderClass: TFPCustomImageReaderClass; begin Result:= TFPReaderPSD; end; class function TPhotoshopDocument.GetSharedImageClass: TSharedRasterImageClass; begin Result:= TSharedBitmap; end; class function TPhotoshopDocument.GetFileExtensions: String; begin Result:= 'psd'; end; procedure Initialize; begin // Register image format TPicture.RegisterFileFormat('psd', 'Photoshop Document', TPhotoshopDocument); end; initialization Initialize; end. ����������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ftweakplugin.lfm����������������������������������������������������������������0000644�0001750�0000144�00000032377�12020403374�016513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmTweakPlugin: TfrmTweakPlugin Left = 405 Height = 482 Top = 52 Width = 544 AutoSize = True Caption = 'Tweak plugin' ClientHeight = 482 ClientWidth = 544 OnCreate = FormCreate Position = poScreenCenter ShowInTaskBar = stNever LCLVersion = '1.1' object nbTweakAll: TNotebook Left = 0 Height = 437 Top = 0 Width = 544 PageIndex = 0 Align = alClient TabOrder = 0 TabStop = True object pgTweakPacker: TPage object pnlTweak: TPanel Left = 6 Height = 425 Top = 6 Width = 532 Align = alClient AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone BorderStyle = bsSingle ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 423 ClientWidth = 530 TabOrder = 0 object lblFlagsValue: TLabel AnchorSideLeft.Control = lblFlags AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = lblFlags AnchorSideTop.Side = asrBottom Left = 25 Height = 1 Top = 98 Width = 1 ParentColor = False end object lblPlugin: TLabel AnchorSideLeft.Control = pnlTweak AnchorSideTop.Control = pnlTweak Left = 6 Height = 18 Top = 12 Width = 45 BorderSpacing.Top = 12 Caption = '&Plugin:' FocusControl = edtPlugin ParentColor = False end object lblExtension: TLabel AnchorSideLeft.Control = lblPlugin AnchorSideTop.Control = edtPlugin AnchorSideTop.Side = asrBottom Left = 6 Height = 18 Top = 47 Width = 68 BorderSpacing.Top = 12 Caption = '&Extension:' FocusControl = cbExt ParentColor = False end object lblFlags: TLabel AnchorSideLeft.Control = lblExtension AnchorSideTop.Control = pnlPackerExtsButtons AnchorSideTop.Side = asrBottom Left = 6 Height = 18 Top = 80 Width = 39 BorderSpacing.Top = 8 Caption = 'Flags:' ParentColor = False end object edtPlugin: TEdit AnchorSideLeft.Control = pnlPackerExtsButtons AnchorSideTop.Control = lblPlugin AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlPackerExtsButtons AnchorSideRight.Side = asrBottom Left = 86 Height = 28 Top = 7 Width = 438 Anchors = [akTop, akLeft, akRight] TabOrder = 0 end object pnlPackerExtsButtons: TPanel AnchorSideLeft.Control = lblExtension AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblExtension AnchorSideTop.Side = asrCenter AnchorSideRight.Control = pnlTweak AnchorSideRight.Side = asrBottom Left = 86 Height = 31 Top = 41 Width = 438 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 12 BevelOuter = bvNone ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.Layout = cclTopToBottomThenLeftToRight ClientHeight = 31 ClientWidth = 438 TabOrder = 1 object cbExt: TComboBox Left = 0 Height = 31 Top = 0 Width = 129 Constraints.MinWidth = 80 ItemHeight = 0 OnChange = cbExtChange Style = csDropDownList TabOrder = 0 end object btnRemove: TButton Left = 129 Height = 31 Top = 0 Width = 103 AutoSize = True Caption = '&Remove' Constraints.MinWidth = 80 OnClick = btnRemoveClick TabOrder = 1 end object btnAdd: TButton Left = 232 Height = 31 Top = 0 Width = 103 AutoSize = True Caption = 'A&dd new' Constraints.MinWidth = 80 OnClick = btnAddClick TabOrder = 2 end object btnChange: TButton Left = 335 Height = 31 Top = 0 Width = 103 AutoSize = True Caption = 'C&hange' Constraints.MinWidth = 80 OnClick = btnChangeClick TabOrder = 3 end end object pnlFlags: TPanel AnchorSideLeft.Control = pnlPackerExtsButtons AnchorSideTop.Control = lblFlags AnchorSideRight.Control = pnlTweak AnchorSideRight.Side = asrBottom Left = 86 Height = 267 Top = 80 Width = 276 AutoSize = True BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 267 ClientWidth = 276 TabOrder = 2 object cbPK_CAPS_NEW: TCheckBox Left = 0 Height = 23 Top = 0 Width = 276 Caption = 'Can create new archi&ves' OnClick = cbPackerFlagsClick TabOrder = 0 end object cbPK_CAPS_MODIFY: TCheckBox Left = 0 Height = 23 Top = 23 Width = 276 Caption = 'Can &modify exisiting archives' OnClick = cbPackerFlagsClick TabOrder = 1 end object cbPK_CAPS_MULTIPLE: TCheckBox Left = 0 Height = 23 Top = 46 Width = 276 Caption = '&Archive can contain multiple files' OnClick = cbPackerFlagsClick TabOrder = 2 end object cbPK_CAPS_DELETE: TCheckBox Left = 0 Height = 23 Top = 69 Width = 276 Caption = 'Can de&lete files' OnClick = cbPackerFlagsClick TabOrder = 3 end object cbPK_CAPS_OPTIONS: TCheckBox Left = 0 Height = 23 Top = 92 Width = 276 Caption = 'S&upports the options dialogbox' OnClick = cbPackerFlagsClick TabOrder = 4 end object cbPK_CAPS_MEMPACK: TCheckBox Left = 0 Height = 23 Top = 115 Width = 276 Caption = 'Supports pac&king in memory' OnClick = cbPackerFlagsClick TabOrder = 5 end object cbPK_CAPS_BY_CONTENT: TCheckBox Left = 0 Height = 23 Top = 138 Width = 276 Caption = 'De&tect archive type by content' OnClick = cbPackerFlagsClick TabOrder = 6 end object cbPK_CAPS_SEARCHTEXT: TCheckBox Left = 0 Height = 23 Top = 161 Width = 276 Caption = 'Allow searchin&g for text in archives' OnClick = cbPackerFlagsClick TabOrder = 7 end object cbPK_CAPS_HIDE: TCheckBox Left = 0 Height = 23 Top = 184 Width = 276 Caption = 'Sho&w as normal files (hide packer icon)' OnClick = cbPackerFlagsClick TabOrder = 8 end object cbPK_CAPS_ENCRYPT: TCheckBox Left = 0 Height = 23 Top = 207 Width = 276 Caption = 'Supports e&ncryption' OnClick = cbPackerFlagsClick TabOrder = 9 end object btnDefault: TButton AnchorSideLeft.Control = cbPK_CAPS_ENCRYPT AnchorSideTop.Control = cbPK_CAPS_ENCRYPT AnchorSideTop.Side = asrBottom Left = 0 Height = 31 Top = 236 Width = 100 AutoSize = True BorderSpacing.Top = 6 Caption = 'De&fault' Constraints.MinWidth = 100 OnClick = btnDefaultClick TabOrder = 10 end end end end object pgTweakOther: TPage object pnlTweakOther: TPanel Left = 6 Height = 425 Top = 6 Width = 532 Align = alClient Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone BorderStyle = bsSingle ClientHeight = 423 ClientWidth = 530 TabOrder = 0 object lblName: TLabel AnchorSideLeft.Control = lblPlugin1 AnchorSideTop.Control = edtPlugin1 AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 68 Width = 41 Caption = '&Name:' FocusControl = edtName ParentColor = False end object lblDetectStr: TLabel AnchorSideLeft.Control = lblName AnchorSideTop.Control = edtName AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 128 Width = 92 Caption = 'D&etect string:' FocusControl = edtDetectStr ParentColor = False end object lblDescription: TLabel AnchorSideLeft.Control = lblDetectStr AnchorSideTop.Control = edtDetectStr AnchorSideTop.Side = asrBottom Left = 10 Height = 18 Top = 188 Width = 79 Caption = '&Description:' FocusControl = edtDescription ParentColor = False end object edtName: TEdit AnchorSideLeft.Control = lblName AnchorSideTop.Control = lblName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPlugin1 AnchorSideRight.Side = asrBottom Left = 10 Height = 28 Top = 92 Width = 510 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 1 end object edtDetectStr: TEdit AnchorSideLeft.Control = edtPlugin1 AnchorSideTop.Control = lblDetectStr AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPlugin1 AnchorSideRight.Side = asrBottom Left = 10 Height = 28 Top = 152 Width = 510 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 2 end object edtDescription: TEdit AnchorSideLeft.Control = edtPlugin1 AnchorSideTop.Control = lblDescription AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPlugin1 AnchorSideRight.Side = asrBottom Left = 10 Height = 28 Top = 212 Width = 510 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Bottom = 8 TabOrder = 3 end object edtPlugin1: TEdit AnchorSideLeft.Control = pnlTweakOther AnchorSideTop.Control = lblPlugin1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlTweakOther AnchorSideRight.Side = asrBottom Left = 10 Height = 28 Top = 32 Width = 510 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 6 BorderSpacing.Right = 10 BorderSpacing.Bottom = 8 Constraints.MinWidth = 350 TabOrder = 0 end object lblPlugin1: TLabel AnchorSideLeft.Control = pnlTweakOther AnchorSideTop.Control = pnlTweakOther Left = 10 Height = 18 Top = 8 Width = 45 BorderSpacing.Left = 10 BorderSpacing.Top = 8 Caption = '&Plugin:' FocusControl = edtPlugin1 ParentColor = False end end end end object pnlButtons: TPanel Left = 0 Height = 45 Top = 437 Width = 544 Align = alBottom AutoSize = True BevelOuter = bvNone ClientHeight = 45 ClientWidth = 544 TabOrder = 1 object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 329 Height = 31 Top = 7 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 Caption = '&OK' Constraints.MinWidth = 100 Default = True ModalResult = 1 TabOrder = 0 end object btnCancel: TButton AnchorSideTop.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButtons AnchorSideBottom.Side = asrBottom Left = 437 Height = 31 Top = 7 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Around = 7 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 ModalResult = 2 TabOrder = 1 end end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffileproperties.pas�������������������������������������������������������������0000644�0001750�0000144�00000040734�12647757143�017243� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------- File Properties Dialog Copyright (C) 2003-2004 Radek Cervinka (radek.cervinka@centrum.cz) Copyright (C) 2003 Martin Matusu <xmat@volny.cz> Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit fFileProperties; {$mode objfpc}{$H+} interface uses LResources, SysUtils, Classes, Graphics, Forms, StdCtrls, Buttons, ComCtrls, Dialogs, Controls, ExtCtrls, DCBasicTypes, uFile, uFileProperty, uFileSource, uFileSourceOperation, uFileSourceCalcStatisticsOperation; type { TfrmFileProperties } TfrmFileProperties = class(TForm) btnSetPropertiesToAllFiles: TBitBtn; btnClose: TBitBtn; btnSetProperties: TBitBtn; btnSkipFile: TBitBtn; cbExecGroup: TCheckBox; cbExecOther: TCheckBox; cbExecOwner: TCheckBox; cbReadGroup: TCheckBox; cbReadOther: TCheckBox; cbReadOwner: TCheckBox; cbSgid: TCheckBox; cbSticky: TCheckBox; cbSuid: TCheckBox; cbWriteGroup: TCheckBox; cbWriteOther: TCheckBox; cbWriteOwner: TCheckBox; cbxGroups: TComboBox; cbxUsers: TComboBox; edtOctal: TEdit; gbOwner: TGroupBox; lblFileName: TLabel; lblFileNameStr: TLabel; lblFolder: TLabel; lblFolderStr: TLabel; lblLastAccess: TLabel; lblLastAccessStr: TLabel; lblLastModif: TLabel; lblLastModifStr: TLabel; lblLastStChange: TLabel; lblLastStChangeStr: TLabel; lblOctal: TLabel; lblAttrBitsStr: TLabel; lblAttrText: TLabel; lblExec: TLabel; lblFileStr: TLabel; lblFile: TLabel; lblAttrGroupStr: TLabel; lblGroupStr: TLabel; lblAttrOtherStr: TLabel; lblAttrOwnerStr: TLabel; lblOwnerStr: TLabel; lblRead: TLabel; lblSize: TLabel; lblContains: TLabel; lblSizeStr: TLabel; lblContainsStr: TLabel; lblSymlink: TLabel; lblAttrTextStr: TLabel; lblSymlinkStr: TLabel; lblType: TLabel; lblTypeStr: TLabel; lblWrite: TLabel; pnlCaption: TPanel; pnlData: TPanel; pcPageControl: TPageControl; tmUpdateFolderSize: TTimer; tsProperties: TTabSheet; tsAttributes: TTabSheet; procedure btnSetPropertiesToAllFilesClick(Sender: TObject); procedure btnCloseClick(Sender: TObject); procedure cbChangeModeClick(Sender: TObject); procedure edtOctalKeyPress(Sender: TObject; var Key: char); procedure edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); procedure FormCreate(Sender: TObject); procedure btnSetPropertiesClick(Sender: TObject); procedure btnSkipFileClick(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure tmUpdateFolderSizeTimer(Sender: TObject); procedure FileSourceOperationStateChangedNotify(Operation: TFileSourceOperation; State: TFileSourceOperationState); private bPerm: Boolean; iCurrent: Integer; FFileSource: IFileSource; FFiles: TFiles; FPropertyFormatter: IFilePropertyFormatter; FFileSourceCalcStatisticsOperation: TFileSourceCalcStatisticsOperation; ChangeTriggersEnabled: Boolean; OriginalAttr: TFileAttrs; OriginalUser, OriginalGroup: String; FChangedProperties: Boolean; function ShowError(const MessageFmt: String): TModalResult; procedure ShowPermissions(Mode: TFileAttrs); function ChangeProperties: Boolean; function CheckIfChangedProperties: Boolean; function GetModeFromForm: TFileAttrs; procedure ShowFile(iIndex:Integer); procedure AllowChange(Allow: Boolean); procedure StartCalcFolderSize; procedure StopCalcFolderSize; public constructor Create(AOwner: TComponent; aFileSource: IFileSource; theFiles: TFiles); reintroduce; destructor Destroy; override; end; procedure ShowFileProperties(aFileSource: IFileSource; const aFiles: TFiles); implementation {$R *.lfm} uses LCLType, FileUtil, StrUtils, uLng, BaseUnix, uUsersGroups, uDCUtils, uOSUtils, uDefaultFilePropertyFormatter, uMyUnix, DCFileAttributes, uFileSourceOperationTypes, uFileSystemFileSource, uOperationsManager, uFileSourceOperationOptions, uKeyboard, DCStrUtils, DCUnix; procedure ShowFileProperties(aFileSource: IFileSource; const aFiles: TFiles); begin if aFiles.Count > 0 then begin with TfrmFileProperties.Create(Application, aFileSource, aFiles) do try ShowModal; finally Free; end; end; end; constructor TfrmFileProperties.Create(AOwner: TComponent; aFileSource: IFileSource; theFiles: TFiles); begin FFileSource:= aFileSource; FFiles := theFiles; FPropertyFormatter := MaxDetailsFilePropertyFormatter; ChangeTriggersEnabled := True; inherited Create(AOwner); end; destructor TfrmFileProperties.Destroy; begin StopCalcFolderSize; inherited Destroy; FPropertyFormatter := nil; // free interface end; function TfrmFileProperties.GetModeFromForm: TFileAttrs; begin Result:=0; if cbReadOwner.Checked then Result:=(Result OR S_IRUSR); if cbWriteOwner.Checked then Result:=(Result OR S_IWUSR); if cbExecOwner.Checked then Result:=(Result OR S_IXUSR); if cbReadGroup.Checked then Result:=(Result OR S_IRGRP); if cbWriteGroup.Checked then Result:=(Result OR S_IWGRP); if cbExecGroup.Checked then Result:=(Result OR S_IXGRP); if cbReadOther.Checked then Result:=(Result OR S_IROTH); if cbWriteOther.Checked then Result:=(Result OR S_IWOTH); if cbExecOther.Checked then Result:=(Result OR S_IXOTH); if cbSuid.Checked then Result:=(Result OR S_ISUID); if cbSgid.Checked then Result:=(Result OR S_ISGID); if cbSticky.Checked then Result:=(Result OR S_ISVTX); end; procedure TfrmFileProperties.btnCloseClick(Sender: TObject); begin if FChangedProperties then FFileSource.Reload(FFiles.Path); Close; end; procedure TfrmFileProperties.cbChangeModeClick(Sender: TObject); begin if ChangeTriggersEnabled then begin ChangeTriggersEnabled := False; edtOctal.Text:= DecToOct(GetModeFromForm); ChangeTriggersEnabled := True; end; end; procedure TfrmFileProperties.edtOctalKeyPress(Sender: TObject; var Key: char); begin if not ((Key in ['0'..'7']) or (Key = Chr(VK_BACK)) or (Key = Chr(VK_DELETE))) then Key:= #0; end; procedure TfrmFileProperties.edtOctalKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ChangeTriggersEnabled then begin ChangeTriggersEnabled := False; ShowPermissions(OctToDec(edtOctal.Text)); ChangeTriggersEnabled := True; end; end; procedure TfrmFileProperties.btnSetPropertiesToAllFilesClick(Sender: TObject); begin repeat if not ChangeProperties then Exit; Inc (iCurrent); until (iCurrent = FFiles.Count); FFileSource.Reload(FFiles.Path); Close; end; procedure TfrmFileProperties.ShowPermissions(Mode: TFileAttrs); begin cbReadOwner.Checked:= ((Mode AND S_IRUSR) = S_IRUSR); cbWriteOwner.Checked:= ((Mode AND S_IWUSR) = S_IWUSR); cbExecOwner.Checked:= ((Mode AND S_IXUSR) = S_IXUSR); cbReadGroup.Checked:= ((Mode AND S_IRGRP) = S_IRGRP); cbWriteGroup.Checked:= ((Mode AND S_IWGRP) = S_IWGRP); cbExecGroup.Checked:= ((Mode AND S_IXGRP) = S_IXGRP); cbReadOther.Checked:= ((Mode AND S_IROTH) = S_IROTH); cbWriteOther.Checked:= ((Mode AND S_IWOTH) = S_IWOTH); cbExecOther.Checked:= ((Mode AND S_IXOTH) = S_IXOTH); cbSuid.Checked:= ((Mode AND S_ISUID) = S_ISUID); cbSgid.Checked:= ((Mode AND S_ISGID) = S_ISGID); cbSticky.Checked:= ((Mode AND S_ISVTX) = S_ISVTX); end; function TfrmFileProperties.ChangeProperties: Boolean; begin Result:= True; // First set owner/group because it clears SUID bit. if bPerm then begin if fplchown(FFiles[iCurrent].FullPath, StrToUID(cbxUsers.Text), StrToGID(cbxGroups.Text)) <> 0 then begin if ShowError(rsPropsErrChOwn) = mrCancel then Exit(False); end; end; if not FFiles[iCurrent].IsLink then begin if fpchmod(PAnsiChar(UTF8ToSys(FFiles[iCurrent].FullPath)), GetModeFromForm) <> 0 then begin if ShowError(rsPropsErrChMod) = mrCancel then Exit(False); end; end; end; function TfrmFileProperties.CheckIfChangedProperties: Boolean; begin Result := (OriginalAttr <> GetModeFromForm) or (OriginalUser <> cbxUsers.Text) or (OriginalGroup <> cbxGroups.Text); end; procedure TfrmFileProperties.ShowFile(iIndex:Integer); var sb: BaseUnix.Stat; iMyUID: Cardinal; Attrs: TFileAttrs; isFileSystem: Boolean; hasSize: Boolean; begin StopCalcFolderSize; // Stop previous calculate folder size operation isFileSystem := FFileSource.IsClass(TFileSystemFileSource); with FFiles[iIndex] do begin lblFileName.Caption:= Name; lblFile.Caption:= Name; lblFolder.Caption:= Path; // Size hasSize := (fpSize in SupportedProperties); if hasSize then begin if IsDirectory and (fsoCalcStatistics in FFileSource.GetOperationsTypes) then StartCalcFolderSize // Start calculate folder size operation else lblSize.Caption := Properties[fpSize].Format(FPropertyFormatter); end; lblSize.Visible := hasSize; lblSizeStr.Visible := hasSize; lblContains.Visible:= IsDirectory; lblContainsStr.Visible:= IsDirectory; // Times lblLastAccess.Visible := fpLastAccessTime in SupportedProperties; lblLastAccessStr.Visible := fpLastAccessTime in SupportedProperties; if fpLastAccessTime in SupportedProperties then lblLastAccess.Caption := Properties[fpLastAccessTime].Format(FPropertyFormatter) else lblLastAccess.Caption := ''; lblLastStChange.Visible := fpChangeTime in SupportedProperties; lblLastStChangeStr.Visible := fpChangeTime in SupportedProperties; if fpChangeTime in SupportedProperties then lblLastStChange.Caption := Properties[fpChangeTime].Format(FPropertyFormatter) else lblLastStChange.Caption := ''; lblLastModif.Visible := fpModificationTime in SupportedProperties; lblLastModifStr.Visible := fpModificationTime in SupportedProperties; if fpModificationTime in SupportedProperties then lblLastModif.Caption := Properties[fpModificationTime].Format(FPropertyFormatter) else lblLastModif.Caption := ''; // Chown if isFileSystem and (fpLStat(PChar(UTF8ToSys(FullPath)), sb) = 0) then begin OriginalUser := UIDToStr(sb.st_uid); OriginalGroup := GIDToStr(sb.st_gid); // Get current user UID iMyUID := fpGetUID; // Only owner or root can change owner bPerm := (iMyUID = sb.st_uid) or (iMyUID = 0); // Owner combo box cbxUsers.Text := OriginalUser; // Only root can change owner cbxUsers.Enabled := (imyUID = 0); if cbxUsers.Enabled then GetUsers(cbxUsers.Items); // Group combo box cbxGroups.Text := OriginalGroup; cbxGroups.Enabled := bPerm; if bPerm then GetUsrGroups(iMyUID, cbxGroups.Items); end; // Attributes if fpAttributes in SupportedProperties then begin Attrs := AttributesProperty.Value; OriginalAttr := Attrs and $0FFF; //if Attrs is TUnixFileAttributesProperty //if Attrs is TNtfsFileAttributesProperty ShowPermissions(Attrs); edtOctal.Text:= DecToOct(GetModeFromForm); lblAttrText.Caption := Properties[fpAttributes].Format(DefaultFilePropertyFormatter); if FPS_ISDIR(Attrs) then lblType.Caption:=rsPropsFolder else if FPS_ISREG(Attrs) then lblType.Caption:=rsPropsFile else if FPS_ISCHR(Attrs) then lblType.Caption:=rsPropsSpChrDev else if FPS_ISBLK(Attrs) then lblType.Caption:=rsPropsSpBlkDev else if FPS_ISFIFO(Attrs) then lblType.Caption:=rsPropsNmdPipe else if FPS_ISLNK(Attrs) then lblType.Caption:=rsPropsSymLink else if FPS_ISSOCK(Attrs) then lblType.Caption:=rsPropsSocket else lblType.Caption:=rsPropsUnknownType; lblSymlink.Visible := FPS_ISLNK(Attrs); lblSymlinkStr.Visible := lblSymlink.Visible; if lblSymlink.Visible then begin if isFileSystem then lblSymlink.Caption := ReadSymLink(FullPath) else if (Assigned(LinkProperty) and LinkProperty.IsValid) then lblSymlink.Caption := LinkProperty.LinkTo else begin lblSymlink.Visible := False; lblSymlinkStr.Visible := False; end; end; end else begin edtOctal.Text:=rsMsgErrNotSupported; lblAttrText.Caption:=rsMsgErrNotSupported; lblType.Caption:=rsPropsUnknownType; lblSymlink.Caption:=''; end; end; // Only allow changes for file system file. AllowChange(isFileSystem); end; procedure TfrmFileProperties.FormCreate(Sender: TObject); begin lblFileNameStr.Font.Style:=[fsBold]; lblFileName.Font.Style:=[fsBold]; AllowChange(False); ShowFile(0); end; procedure TfrmFileProperties.btnSetPropertiesClick(Sender: TObject); begin if CheckIfChangedProperties then FChangedProperties := True; if not ChangeProperties then Exit; btnSkipFileClick(Self); end; procedure TfrmFileProperties.btnSkipFileClick(Sender: TObject); begin inc(iCurrent); if iCurrent >= FFiles.Count then begin if FChangedProperties then FFileSource.Reload(FFiles.Path); Close; end else ShowFile(iCurrent); end; procedure TfrmFileProperties.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin case Key of VK_TAB: begin if Shift * KeyModifiersShortcut = [ssCtrl] then begin pcPageControl.SelectNextPage(True); Key := 0; end else if Shift * KeyModifiersShortcut = [ssCtrl, ssShift] then begin pcPageControl.SelectNextPage(False); Key := 0; end; end; end; end; procedure TfrmFileProperties.tmUpdateFolderSizeTimer(Sender: TObject); begin if Assigned(FFileSourceCalcStatisticsOperation) then with FFileSourceCalcStatisticsOperation.RetrieveStatistics do begin lblSize.Caption := Format('%s (%s)', [cnvFormatFileSize(Size), Numb2USA(IntToStr(Size))]); lblContains.Caption := Format(rsPropsContains, [Files, Directories]); end; end; procedure TfrmFileProperties.FileSourceOperationStateChangedNotify( Operation: TFileSourceOperation; State: TFileSourceOperationState); begin if Assigned(FFileSourceCalcStatisticsOperation) and (State = fsosStopped) then begin tmUpdateFolderSize.Enabled:= False; tmUpdateFolderSizeTimer(tmUpdateFolderSize); FFileSourceCalcStatisticsOperation := nil; end; end; function TfrmFileProperties.ShowError(const MessageFmt: String): TModalResult; begin Result:= MessageDlg(Caption, Format(MessageFmt, [FFiles[iCurrent].FullPath]) + LineEnding + SysErrorMessageUTF8(fpgetErrNo), mtError, mbOKCancel, 0); end; procedure TfrmFileProperties.AllowChange(Allow: Boolean); begin btnSetPropertiesToAllFiles.Enabled := Allow; btnSetProperties.Enabled := Allow; end; procedure TfrmFileProperties.StartCalcFolderSize; var aFiles: TFiles; begin aFiles:= TFiles.Create(FFiles.Path); aFiles.Add(FFiles.Items[iCurrent].Clone); FFileSourceCalcStatisticsOperation:= FFileSource.CreateCalcStatisticsOperation(aFiles) as TFileSourceCalcStatisticsOperation; if Assigned(FFileSourceCalcStatisticsOperation) then begin FFileSourceCalcStatisticsOperation.SkipErrors:= True; FFileSourceCalcStatisticsOperation.SymLinkOption:= fsooslDontFollow; FFileSourceCalcStatisticsOperation.AddStateChangedListener([fsosStopped], @FileSourceOperationStateChangedNotify); OperationsManager.AddOperation(FFileSourceCalcStatisticsOperation); tmUpdateFolderSize.Enabled:= True; end; end; procedure TfrmFileProperties.StopCalcFolderSize; begin if Assigned(FFileSourceCalcStatisticsOperation) then begin tmUpdateFolderSize.Enabled:= False; FFileSourceCalcStatisticsOperation.Stop; end; FFileSourceCalcStatisticsOperation:= nil; end; end. ������������������������������������doublecmd-0.7.1/src/ufileprocs.pas������������������������������������������������������������������0000644�0001750�0000144�00000016443�12612505011�016165� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz some file routines contributors: Mattias Gaertner (from Lazarus code) Copyright (C) 2007-2010 Koblov Alexander (Alexx2000@mail.ru) } unit uFileProcs; {$mode objfpc}{$H+} interface uses Classes; {en Create a chain of directories @param(DirectoryName The full path to directory) @returns(@true if DirectoryName already existed or was created succesfully. If it failed to create any of the parts, @false is returned.) } function mbForceDirectory(DirectoryName: string): boolean; {en Copies a file. @param(sSrc String expression that specifies the name of the file to be copied) @param(sDst String expression that specifies the target file name) @returns(The function returns @true if successful, @false otherwise) } function CopyFile(const sSrc, sDst: String; bAppend: Boolean = False): Boolean; {en Remove the contents of directory recursively @param(sFolderName String expression that specifies the name of the folder to be removed) } procedure DelTree(const sFolderName: String); {en Read string from a text file into variable and goto next line @param(hFile Handle of file) @param(S Stores the result string) } function FileReadLn(hFile: THandle; out S: String): Boolean; {en Write string to a text file and append newline @param(hFile Handle of file) @param(S String for writing) } procedure FileWriteLn(hFile: Integer; S: String); function GetNextCopyName(FileName: String): String; implementation uses LCLProc, Dialogs, SysUtils, uLng, uGlobs, DCClassesUtf8, DCStrUtils, DCOSUtils, uFileSystemFileSource, uFile, uFileSystemDeleteOperation, uFileSourceOperationOptions; const cBlockSize=16384; // size of block if copyfile // if pb is assigned > use, else work without pb :-) function CopyFile(const sSrc, sDst: String; bAppend: Boolean): Boolean; var src: TFileStreamEx = nil; dst: TFileStreamEx = nil; iDstBeg:Integer; // in the append mode we store original size Buffer: PChar = nil; CopyPropertiesOptions: TCopyAttributesOptions; begin Result:=False; if not mbFileExists(sSrc) then Exit; GetMem(Buffer,cBlockSize+1); try try src:=TFileStreamEx.Create(sSrc,fmOpenRead or fmShareDenyNone); if not Assigned(src) then Exit; if bAppend then begin dst:=TFileStreamEx.Create(sDst,fmOpenReadWrite); dst.Seek(0,soFromEnd); // seek to end end else dst:=TFileStreamEx.Create(sDst,fmCreate); if not Assigned(dst) then Exit; iDstBeg:=dst.Size; // we dont't use CopyFrom, because it's alocate and free buffer every time is called while (dst.Size+cBlockSize)<= (src.Size+iDstBeg) do begin Src.ReadBuffer(Buffer^, cBlockSize); dst.WriteBuffer(Buffer^, cBlockSize); end; if (iDstBeg+src.Size)>dst.Size then begin // dst.CopyFrom(src,src.Size-dst.size); src.ReadBuffer(Buffer^, src.Size+iDstBeg-dst.size); dst.WriteBuffer(Buffer^, src.Size+iDstBeg-dst.size); end; CopyPropertiesOptions := CopyAttributesOptionCopyAll; if gDropReadOnlyFlag then Include(CopyPropertiesOptions, caoRemoveReadOnlyAttr); Result := mbFileCopyAttr(sSrc, sDst, CopyPropertiesOptions) = []; // chmod, chgrp except on EStreamError do MessageDlg('Error', Format(rsMsgErrCannotCopyFile, [sSrc, sDst]), mtError, [mbOK], 0); end; finally if assigned(src) then FreeAndNil(src); if assigned(dst) then FreeAndNil(dst); if assigned(Buffer) then FreeMem(Buffer); end; end; procedure DelTree(const sFolderName: String); var DeleteOperation: TFileSystemDeleteOperation = nil; aFiles: TFiles = nil; begin aFiles := TFiles.Create(sFolderName); try aFiles.Add(TFileSystemFileSource.CreateFileFromFile(sFolderName)); DeleteOperation := TFileSystemDeleteOperation.Create( TFileSystemFileSource.GetFileSource, aFiles); DeleteOperation.DeleteReadOnly := fsoogYes; DeleteOperation.SymLinkOption := fsooslDontFollow; DeleteOperation.SkipErrors := True; DeleteOperation.Execute; finally FreeThenNil(aFiles); FreeThenNil(DeleteOperation); end; end; function FileReadLn(hFile: THandle; out S: String): Boolean; const cBufSize = 4096; var Buf: array[1..cBufSize] of Char; iNumRead, iCounter, iBufPos: Integer; bEOLFound: Boolean; iFilePos, iFileSize: Int64; begin S:=''; Result:= False; // get current position iFilePos:= FileSeek(hFile, 0, soFromCurrent); // get file size iFileSize:= FileSeek(hFile, 0, soFromEnd); // restore position FileSeek(hFile, iFilePos, soFromBeginning); bEOLFound:= False; while (iFilePos < iFileSize) and not bEOLFound do begin iNumRead:= FileRead(hFile, Buf, SizeOf(Buf)); for iCounter:= 1 to iNumRead do begin if Buf[iCounter] in [#13, #10] then begin bEOLFound:=True; iBufPos:=iCounter+1; if ((iBufPos) <= iNumRead) and (Buf[iBufPos] in [#13, #10]) then Inc(iBufPos); Buf[iCounter]:= #0; S:= StrPas(@Buf); FileSeek(hFile, iFilePos+iBufPos-1, soFromBeginning); Exit(True); end; end; // for if (not bEOLFound) then begin if (iNumRead < cBufSize) then Buf[iNumRead+1]:= #0; S:= StrPas(@Buf); end; Inc(iFilePos, iNumRead); end; // while end; procedure FileWriteLn(hFile: Integer; S: String); begin S:= S + LineEnding; FileWrite(hFile, PChar(S)[0], Length(S)); end; function mbForceDirectory(DirectoryName: string): boolean; var i: integer; sDir: string; begin if DirectoryName = '' then Exit; DirectoryName := IncludeTrailingPathDelimiter(DirectoryName); i:= 1; if Pos('\\', DirectoryName) = 1 then // if network path begin i := CharPos(PathDelim, DirectoryName, 3); // index of the end of computer name i := CharPos(PathDelim, DirectoryName, i + 1); // index of the end of first remote directory end; // Move past path delimiter at the beginning. if (i = 1) and (DirectoryName[i] = PathDelim) then i := i + 1; while i<=length(DirectoryName) do begin if DirectoryName[i]=PathDelim then begin sDir:=copy(DirectoryName,1,i-1); if not mbDirectoryExists(sDir) then begin Result:=mbCreateDir(sDir); if not Result then exit; end; end; Inc(i); end; Result := True; end; function GetNextCopyName(FileName: String): String; var CopyNumber: Int64 = 1; sFilePath, sFileName, SuffixStr: String; begin sFilePath:= ExtractFilePath(FileName); sFileName:= ExtractFileName(FileName); SuffixStr:= ''; repeat case gTypeOfDuplicatedRename of drLegacyWithCopy: Result := sFilePath + Format(rsCopyNameTemplate, [CopyNumber, sFileName]); drLikeWindows7, drLikeTC: Result :=sFilePath + RemoveFileExt(sFileName) + SuffixStr + ExtractFileExt(sFileName); end; Inc(CopyNumber); case gTypeOfDuplicatedRename of drLikeWindows7: SuffixStr:=' ('+IntToStr(CopyNumber)+')'; drLikeTC: SuffixStr:='('+IntToStr(CopyNumber)+')'; end; until not mbFileSystemEntryExists(Result); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fcopymovedlg.lrt����������������������������������������������������������������0000644�0001750�0000144�00000000711�12362413601�016522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMCOPYDLG.CAPTION=Copy file(s) TFRMCOPYDLG.BTNOPTIONS.CAPTION=O&ptions TFRMCOPYDLG.BTNADDTOQUEUE.CAPTION=A&dd To Queue TFRMCOPYDLG.BTNCANCEL.CAPTION=&Cancel TFRMCOPYDLG.BTNSAVEOPTIONS.CAPTION=Sa&ve these options as default TFRMCOPYDLG.MNUNEWQUEUE.CAPTION=New queue TFRMCOPYDLG.MNUQUEUE1.CAPTION=Queue 1 TFRMCOPYDLG.MNUQUEUE2.CAPTION=Queue 2 TFRMCOPYDLG.MNUQUEUE3.CAPTION=Queue 3 TFRMCOPYDLG.MNUQUEUE4.CAPTION=Queue 4 TFRMCOPYDLG.MNUQUEUE5.CAPTION=Queue 5 �������������������������������������������������������doublecmd-0.7.1/src/fsymlink.pas��������������������������������������������������������������������0000644�0001750�0000144�00000004331�12630667552�015662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fSymLink; interface uses SysUtils, Classes, Controls, Forms, StdCtrls, Buttons; type { TfrmSymLink } TfrmSymLink = class(TForm) lblExistingFile: TLabel; lblLinkToCreate: TLabel; edtExistingFile: TEdit; edtLinkToCreate: TEdit; btnOK: TBitBtn; btnCancel: TBitBtn; procedure btnOKClick(Sender: TObject); procedure FormShow(Sender: TObject); private FCurrentPath: String; public constructor Create(TheOwner: TComponent; CurrentPath: String); reintroduce; end; function ShowSymLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; implementation {$R *.lfm} uses LazFileUtils, uLng, uGlobs, uLog, uShowMsg, uOSUtils, DCStrUtils; function ShowSymLinkForm(const sExistingFile, sLinkToCreate, CurrentPath: String): Boolean; begin with TfrmSymLink.Create(Application, CurrentPath) do begin try edtLinkToCreate.Text := sLinkToCreate; edtExistingFile.Text := sExistingFile; Result:= (ShowModal = mrOK); finally Free; end; end; end; constructor TfrmSymLink.Create(TheOwner: TComponent; CurrentPath: String); begin inherited Create(TheOwner); FCurrentPath := CurrentPath; end; procedure TfrmSymLink.btnOKClick(Sender: TObject); var sSrc,sDst:String; begin sSrc:=edtExistingFile.Text; sDst:=edtLinkToCreate.Text; if CompareFilenames(sSrc, sDst) = 0 then Exit; sSrc := GetAbsoluteFileName(FCurrentPath, sSrc); sDst := GetAbsoluteFileName(FCurrentPath, sDst); if CreateSymLink(sSrc, sDst) then begin // write log if (log_cp_mv_ln in gLogOptions) and (log_success in gLogOptions) then logWrite(Format(rsMsgLogSuccess+rsMsgLogSymLink,[sSrc+' -> '+sDst]), lmtSuccess); end else begin // write log if (log_cp_mv_ln in gLogOptions) and (log_errors in gLogOptions) then logWrite(Format(rsMsgLogError+rsMsgLogSymLink,[sSrc+' -> '+sDst]), lmtError); // Standart error modal dialog MsgError(rsSymErrCreate); end; end; procedure TfrmSymLink.FormShow(Sender: TObject); begin edtLinkToCreate.SelectAll; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmodview.lrt��������������������������������������������������������������������0000644�0001750�0000144�00000001327�12646706137�015666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMODVIEW.CAPTION=New Size TFRMMODVIEW.LBLQUALITY.CAPTION=Quality of compress to Jpg TFRMMODVIEW.TEQUALITY.TEXT=80 TFRMMODVIEW.RBJPG.CAPTION=JPG TFRMMODVIEW.RBBMP.CAPTION=BMP TFRMMODVIEW.RBPNG.CAPTION=PNG TFRMMODVIEW.RBICO.CAPTION=ICO TFRMMODVIEW.RBPNM.CAPTION=PNM TFRMMODVIEW.BTNPATH1.CAPTION=... TFRMMODVIEW.BTNPATH2.CAPTION=... TFRMMODVIEW.BTNPATH3.CAPTION=... TFRMMODVIEW.BTNPATH4.CAPTION=... TFRMMODVIEW.BTNPATH5.CAPTION=... TFRMMODVIEW.LBLPATH1.CAPTION=1 TFRMMODVIEW.LBLPATH2.CAPTION=2 TFRMMODVIEW.LBLPATH3.CAPTION=3 TFRMMODVIEW.LBLPATH4.CAPTION=4 TFRMMODVIEW.LBLPATH5.CAPTION=5 TFRMMODVIEW.LBLHEIGHT.CAPTION=Height : TFRMMODVIEW.LBLWIDTH.CAPTION=Width : TFRMMODVIEW.TEWIDTH.TEXT=Width TFRMMODVIEW.TEHEIGHT.TEXT=Height ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fopenwith.lrt�������������������������������������������������������������������0000755�0001750�0000144�00000001173�12054100376�016035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMOPENWITH.CAPTION=Choose an application TFRMOPENWITH.LBLMIMETYPE.CAPTION=File type to be opened: %s TFRMOPENWITH.CHKUSEASDEFAULT.CAPTION=Set selected application as default action TFRMOPENWITH.CHKCUSTOMCOMMAND.CAPTION=Custom command TFRMOPENWITH.CHKSAVEASSOCIATION.CAPTION=Save association TFRMOPENWITH.MISINGLEFILENAME.CAPTION=Single file name TFRMOPENWITH.MISINGLEFILENAME.HINT=%f TFRMOPENWITH.MILISTOFFILES.CAPTION=Multiple file names TFRMOPENWITH.MILISTOFFILES.HINT=%F TFRMOPENWITH.MISINGLEURL.CAPTION=Single URI TFRMOPENWITH.MISINGLEURL.HINT=%u TFRMOPENWITH.MILISTOFURLS.CAPTION=Multiple URIs TFRMOPENWITH.MILISTOFURLS.HINT=%U �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fdescredit.lfm������������������������������������������������������������������0000644�0001750�0000144�00000006271�12633603226�016131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmDescrEdit: TfrmDescrEdit Left = 290 Height = 300 Top = 175 Width = 400 ActiveControl = memDescr BorderIcons = [biSystemMenu, biMaximize] Caption = 'File/folder comment' ClientHeight = 300 ClientWidth = 400 OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '1.6.0.2' object lblEditCommentFor: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 12 Height = 15 Top = 12 Width = 96 BorderSpacing.Left = 12 BorderSpacing.Top = 12 Caption = 'E&dit comment for:' FocusControl = memDescr ParentColor = False end object lblEncoding: TLabel AnchorSideTop.Control = cbEncoding AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbEncoding Left = 223 Height = 15 Top = 221 Width = 53 Anchors = [akTop, akRight] BorderSpacing.Right = 12 Caption = '&Encoding:' FocusControl = cbEncoding ParentColor = False end object lblFileName: TLabel AnchorSideLeft.Control = lblEditCommentFor AnchorSideTop.Control = lblEditCommentFor AnchorSideTop.Side = asrBottom Left = 12 Height = 15 Top = 33 Width = 15 BorderSpacing.Top = 6 Caption = '???' Font.Style = [fsBold] ParentColor = False ParentFont = False end object memDescr: TMemo AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblFileName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = cbEncoding Left = 12 Height = 149 Top = 56 Width = 376 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 12 BorderSpacing.Top = 8 BorderSpacing.Right = 12 BorderSpacing.Bottom = 12 OnKeyDown = memDescrKeyDown TabOrder = 0 end object cbEncoding: TComboBox AnchorSideTop.Side = asrBottom AnchorSideRight.Control = memDescr AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCancel Left = 288 Height = 23 Top = 217 Width = 100 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 12 ItemHeight = 15 OnChange = cbEncodingChange Style = csDropDownList TabOrder = 1 end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 202 Height = 30 Top = 252 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbEncoding AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 298 Height = 30 Top = 252 Width = 90 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 18 Cancel = True Caption = '&Cancel' Kind = bkCancel ModalResult = 2 TabOrder = 3 end object ActionList: TActionList left = 104 top = 224 object actSaveDescription: TAction Caption = 'Save Description' OnExecute = actExecute end end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufilefunctions.pas��������������������������������������������������������������0000644�0001750�0000144�00000032174�12604012076�017053� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Filepanel columns implementation unit Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) 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 uFileFunctions; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Menus, uFile, uFileProperty, uFileSource; type TFileFunction = (fsfName, fsfExtension, fsfSize, fsfAttr, fsfPath, fsfGroup, fsfOwner, fsfModificationTime, fsfCreationTime, fsfLastAccessTime, fsfChangeTime, fsfLinkTo, fsfNameNoExtension, fsfType, fsfComment, fsfCompressedSize, fsfInvalid); TFileFunctions = array of TFileFunction; const TFileFunctionStrings: array [TFileFunction] of string = ('GETFILENAME', 'GETFILEEXT', 'GETFILESIZE', 'GETFILEATTR', 'GETFILEPATH', 'GETFILEGROUP', 'GETFILEOWNER', 'GETFILETIME', 'GETFILECREATIONTIME', 'GETFILELASTACCESSTIME', 'GETFILECHANGETIME', 'GETFILELINKTO', 'GETFILENAMENOEXT', 'GETFILETYPE', 'GETFILECOMMENT', 'GETFILECOMPRESSEDSIZE', '' // fsfInvalid ); // Which file properties must be supported for each file function to work. const TFileFunctionToProperty: array [TFileFunction] of TFilePropertiesTypes = ([fpName], [fpName], [fpSize], [fpAttributes], [] { path }, [fpOwner], [fpOwner], [fpModificationTime], [fpCreationTime], [fpLastAccessTime], [fpChangeTime], [fpLink], [fpName], [fpType], [fpComment], [fpCompressedSize], [] { invalid }); function FormatFileFunction(FuncS: string; AFile: TFile; const AFileSource: IFileSource; RetrieveProperties: Boolean = False): string; function FormatFileFunctions(FuncS: String; AFile: TFile; const AFileSource: IFileSource): String; function GetFileFunctionByName(FuncS: string): TFileFunction; procedure FillContentFieldMenu(MenuItem: TMenuItem; OnMenuItemClick: TNotifyEvent); procedure FillFileFuncList; const sFuncTypeDC = 'DC'; sFuncTypePlugin = 'PLUGIN'; var FileFunctionsStr: TStringList; implementation uses StrUtils, WdxPlugin, uWdxModule, uGlobs, uLng, uDefaultFilePropertyFormatter, uFileSourceProperty; //Return type (Script or DC or Plugin etc) function GetModType(str: String): String; begin if pos('(', Str) > 0 then Result := Copy(Str, 1, pos('(', Str) - 1) else Result := EmptyStr; end; //Return name in (). (SriptName or PluginName etc) function GetModName(str: String): String; var s: String; begin s := str; if pos('(', S) > 0 then Delete(s, 1, pos('(', S)) else Exit(EmptyStr); if pos(')', s) > 0 then Result := Copy(s, 1, pos(')', s) - 1); end; //Return function name (DCFunction,PluginFunction etc) function GetModFunctionName(str: String): String; var s: String; begin s := str; if pos('.', S) > 0 then Delete(s, 1, pos('.', S)) else Exit(EmptyStr); if pos('{', S) > 0 then Result := Copy(s, 1, pos('{', S) - 1); end; // Return function parameters function GetModFunctionParams(str: String): String; var I: Integer; S: String; begin S := str; I := pos('{', S); if I < 0 then Exit(EmptyStr); Delete(S, 1, I); I := pos('}', S); if I < 0 then Exit(EmptyStr); Result := Copy(S, 1, I - 1); end; function FormatFileFunction(FuncS: String; AFile: TFile; const AFileSource: IFileSource; RetrieveProperties: Boolean = False): String; var AIndex: Integer; AType, AName, AFunc, AParam: String; FileFunction: TFileFunction; FilePropertiesNeeded: TFilePropertiesTypes; begin Result := EmptyStr; //--------------------- AType := upcase(GetModType(FuncS)); AName := upcase(GetModName(FuncS)); AFunc := upcase(GetModFunctionName(FuncS)); AParam := upcase(GetModFunctionParams(FuncS)); //--------------------- //Internal doublecmd function //------------------------------------------------------ if AType = sFuncTypeDC then begin AIndex:= FileFunctionsStr.IndexOfName(AFunc); if AIndex < 0 then Exit; FileFunction:= TFileFunction(AIndex); // Retrieve additional properties if needed if RetrieveProperties then begin FilePropertiesNeeded:= TFileFunctionToProperty[FileFunction]; if aFileSource.CanRetrieveProperties(AFile, FilePropertiesNeeded) then aFileSource.RetrieveProperties(AFile, FilePropertiesNeeded); end; case FileFunction of fsfName: begin // Show square brackets around directories if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := '[' + AFile.Name + ']' else Result := AFile.Name; end; fsfExtension: begin Result := AFile.Extension; end; fsfSize: begin if (AFile.IsDirectory or AFile.IsLinkToDirectory) and ((not (fpSize in AFile.SupportedProperties)) or (AFile.Size = 0)) then Result := '<DIR>' else if fpSize in AFile.SupportedProperties then Result := AFile.Properties[fpSize].Format(DefaultFilePropertyFormatter); end; fsfAttr: if fpAttributes in AFile.SupportedProperties then Result := AFile.Properties[fpAttributes].Format(DefaultFilePropertyFormatter); fsfPath: Result := AFile.Path; fsfGroup: if fpOwner in AFile.SupportedProperties then Result := AFile.OwnerProperty.GroupStr; fsfOwner: if fpOwner in AFile.SupportedProperties then Result := AFile.OwnerProperty.OwnerStr; fsfModificationTime: if fpModificationTime in AFile.SupportedProperties then Result := AFile.Properties[fpModificationTime].Format( DefaultFilePropertyFormatter); fsfCreationTime: if fpCreationTime in AFile.SupportedProperties then Result := AFile.Properties[fpCreationTime].Format( DefaultFilePropertyFormatter); fsfLastAccessTime: if fpLastAccessTime in AFile.SupportedProperties then Result := AFile.Properties[fpLastAccessTime].Format( DefaultFilePropertyFormatter); fsfChangeTime: if fpChangeTime in AFile.SupportedProperties then Result := AFile.Properties[fpChangeTime].Format( DefaultFilePropertyFormatter); fsfLinkTo: if fpLink in AFile.SupportedProperties then Result := AFile.LinkProperty.LinkTo; fsfNameNoExtension: begin // Show square brackets around directories if gDirBrackets and (AFile.IsDirectory or AFile.IsLinkToDirectory) then Result := '[' + AFile.NameNoExt + ']' else Result := AFile.NameNoExt; end; fsfType: if fpType in AFile.SupportedProperties then Result := AFile.TypeProperty.Format(DefaultFilePropertyFormatter); fsfComment: if fpComment in AFile.SupportedProperties then Result := AFile.CommentProperty.Format(DefaultFilePropertyFormatter); fsfCompressedSize: begin if (AFile.IsDirectory or AFile.IsLinkToDirectory) and ((not (fpCompressedSize in AFile.SupportedProperties)) or (AFile.CompressedSize = 0)) then Result := '<DIR>' else if fpCompressedSize in AFile.SupportedProperties then Result := AFile.Properties[fpCompressedSize].Format(DefaultFilePropertyFormatter); end; end; end //------------------------------------------------------ //Plugin function //------------------------------------------------------ else if AType = sFuncTypePlugin then begin if fspDirectAccess in AFileSource.Properties then begin if not gWdxPlugins.IsLoaded(AName) then if not gWdxPlugins.LoadModule(AName) then Exit; if gWdxPlugins.GetWdxModule(AName).FileParamVSDetectStr(AFile) then begin Result := gWdxPlugins.GetWdxModule(AName).CallContentGetValue( AFile.FullPath, AFunc, AParam, 0); end; end; end; //------------------------------------------------------ end; function FormatFileFunctions(FuncS: String; AFile: TFile; const AFileSource: IFileSource): String; var P: Integer; begin Result:= EmptyStr; while True do begin P := Pos('[', FuncS); if P = 0 then Break else if P > 1 then Result:= Result + Copy(FuncS, 1, P - 1); Delete(FuncS, 1, P); P := Pos(']', FuncS); if P = 0 then Break else if P > 1 then Result:= Result + FormatFileFunction(Copy(FuncS, 1, P - 1), AFile, AFileSource, True); Delete(FuncS, 1, P); end; if Length(FuncS) <> 0 then Result:= Result + FuncS; end; function GetFileFunctionByName(FuncS: String): TFileFunction; var AIndex: Integer; AType, AFunc: String; begin AType := UpCase(GetModType(FuncS)); AFunc := UpCase(GetModFunctionName(FuncS)); // Only internal DC functions. if AType = sFuncTypeDC then begin AIndex := FileFunctionsStr.IndexOfName(AFunc); if AIndex >= 0 then Exit(TFileFunction(AIndex)); end; Result := fsfInvalid; end; procedure FillContentFieldMenu(MenuItem: TMenuItem; OnMenuItemClick: TNotifyEvent); var I, J: Integer; sUnits: String; Module: TWDXModule; Mi, mi2: TMenuItem; begin MenuItem.Clear; // DC commands MI:= TMenuItem.Create(MenuItem); MI.Caption:= 'DC'; MenuItem.Add(MI); for I:= 0 to FileFunctionsStr.Count - 1 do begin MI:= TMenuItem.Create(MenuItem); MI.Tag:= 0; MI.Hint:= FileFunctionsStr.Names[I]; MI.Caption:= FileFunctionsStr.ValueFromIndex[I] + ' (' + MI.Hint + ')'; MI.OnClick:= OnMenuItemClick; MenuItem.Items[0].Add(MI); end; // Plugins MI:= TMenuItem.Create(MenuItem); MI.Caption:= 'Plugins'; MenuItem.Add(MI); for I:= 0 to gWdxPlugins.Count - 1 do begin Module:= gWdxPlugins.GetWdxModule(I); if not (Module.IsLoaded or Module.LoadModule) then Continue; MI:= TMenuItem.Create(MenuItem); MI.Caption:= Module.Name; MenuItem.Items[1].Add(MI); // Load fields list for J:= 0 to Module.FieldList.Count - 1 do begin MI:= TMenuItem.Create(MenuItem); MI.Tag:= 1; MI.Caption:= Module.FieldList[J]; MenuItem.Items[1].Items[MenuItem.Items[1].Count - 1].Add(MI); with TWdxField(Module.FieldList.Objects[J]) do if FType <> ft_multiplechoice then begin sUnits:= FUnits; while sUnits <> EmptyStr do begin MI2:=TMenuItem.Create(MenuItem); MI2.Tag:= 2; MI2.Caption:= Copy2SymbDel(sUnits, '|'); MI2.OnClick:= OnMenuItemClick; MI.Add(MI2); end; end; if MI.Count = 0 then MI.OnClick:= OnMenuItemClick; end; end; end; procedure FillFileFuncList; begin with FileFunctionsStr do begin Add(TFileFunctionStrings[fsfName] + '=' + rsFuncName); Add(TFileFunctionStrings[fsfExtension] + '=' + rsFuncExt); Add(TFileFunctionStrings[fsfSize] + '=' + rsFuncSize); Add(TFileFunctionStrings[fsfAttr] + '=' + rsFuncAttr); Add(TFileFunctionStrings[fsfPath] + '=' + rsFuncPath); Add(TFileFunctionStrings[fsfGroup] + '=' + rsFuncGroup); Add(TFileFunctionStrings[fsfOwner] + '=' + rsFuncOwner); Add(TFileFunctionStrings[fsfModificationTime] + '=' + rsFuncMTime); Add(TFileFunctionStrings[fsfCreationTime] + '=' + rsFuncCTime); Add(TFileFunctionStrings[fsfLastAccessTime] + '=' + rsFuncATime); Add(TFileFunctionStrings[fsfChangeTime] + '=' + rsFuncHTime); Add(TFileFunctionStrings[fsfLinkTo] + '=' + rsFuncLinkTo); Add(TFileFunctionStrings[fsfNameNoExtension] + '=' + rsFuncNameNoExt); Add(TFileFunctionStrings[fsfType] + '=' + rsFuncType); Add(TFileFunctionStrings[fsfComment] + '=' + rsFuncComment); Add(TFileFunctionStrings[fsfCompressedSize] + '=' + rsFuncCompressedSize); end; end; initialization FileFunctionsStr := TStringList.Create; finalization FreeAndNil(FileFunctionsStr); end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmultirename.lrt����������������������������������������������������������������0000644�0001750�0000144�00000005576�12023046500�016524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMMULTIRENAME.CAPTION=MultiRename TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION=Old File Name TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION=New File Name TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION=File Path TFRMMULTIRENAME.GBMASKA.CAPTION=Mask TFRMMULTIRENAME.LBNAME.CAPTION=File &Name TFRMMULTIRENAME.LBEXT.CAPTION=&Extension TFRMMULTIRENAME.BTNNAMEMENU.CAPTION=... TFRMMULTIRENAME.BTNEXTMENU.CAPTION=... TFRMMULTIRENAME.GBFINDREPLACE.CAPTION=Find && Replace TFRMMULTIRENAME.LBFIND.CAPTION=&Find... TFRMMULTIRENAME.LBREPLACE.CAPTION=Re&place... TFRMMULTIRENAME.CBREGEXP.CAPTION=Regular e&xpressions TFRMMULTIRENAME.CBUSESUBS.CAPTION=&Use substitution TFRMMULTIRENAME.GBCOUNTER.CAPTION=Counter TFRMMULTIRENAME.LBSTNB.CAPTION=S&tart Number TFRMMULTIRENAME.EDPOC.TEXT=1 TFRMMULTIRENAME.LBINTERVAL.CAPTION=&Interval TFRMMULTIRENAME.EDINTERVAL.TEXT=1 TFRMMULTIRENAME.LBWIDTH.CAPTION=&Width TFRMMULTIRENAME.CMBXWIDTH.TEXT=01 TFRMMULTIRENAME.BTNRENAME.CAPTION=&Rename TFRMMULTIRENAME.BTNCLOSE.CAPTION=&Close TFRMMULTIRENAME.GBLOG.CAPTION=Log Result TFRMMULTIRENAME.CBLOG.CAPTION=Ena&ble TFRMMULTIRENAME.BTNRESTORE.CAPTION=Reset &all TFRMMULTIRENAME.GBPRESETS.CAPTION=Presets TFRMMULTIRENAME.BTNLOADPRESET.CAPTION=&Load TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION=&Save TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION=&Delete TFRMMULTIRENAME.MINEXTNAME.CAPTION=Name... TFRMMULTIRENAME.MINAME.CAPTION=[N] Name TFRMMULTIRENAME.MINAMEX.CAPTION=[Nx] Character at position x TFRMMULTIRENAME.MINAMEXX.CAPTION=[Nx:y] Characters from position x to y TFRMMULTIRENAME.N1.CAPTION=- TFRMMULTIRENAME.MINEXTEXTENSION.CAPTION=Extension... TFRMMULTIRENAME.EXTENSION.CAPTION=[E] Extension TFRMMULTIRENAME.MIEXTENSIONX.CAPTION=[Ex] Character at position x TFRMMULTIRENAME.MIEXTENSIONXX.CAPTION=[Ex:y] Characters from position x to y TFRMMULTIRENAME.N2.CAPTION=- TFRMMULTIRENAME.MICOUNTER.CAPTION=[C] Counter TFRMMULTIRENAME.N3.CAPTION=- TFRMMULTIRENAME.MINEXT.CAPTION=Time... TFRMMULTIRENAME.MIYEAR.CAPTION=[Y] Year (2 digits) TFRMMULTIRENAME.MIYEAR1.CAPTION=[YYYY] Year (4 digits) TFRMMULTIRENAME.MIMONTH.CAPTION=[M] Month TFRMMULTIRENAME.MIMONTH1.CAPTION=[MM] Month (2 digits) TFRMMULTIRENAME.MIMONTH2.CAPTION=[MMM] Month name (short, e.g., "jan") TFRMMULTIRENAME.MIMONTH3.CAPTION=[MMMM] Month name (long, e.g., "january") TFRMMULTIRENAME.MIDAY.CAPTION=[D] Day TFRMMULTIRENAME.MIDAY1.CAPTION=[DD] Day (2 digits) TFRMMULTIRENAME.MIDAY2.CAPTION=[DDD] Day of the week (short, e.g., "mon") TFRMMULTIRENAME.MIDAY3.CAPTION=[DDDD] Day of the week (long, e.g., "monday") TFRMMULTIRENAME.N4.CAPTION=- TFRMMULTIRENAME.MIHOUR.CAPTION=[h] Hour TFRMMULTIRENAME.MIHOUR1.CAPTION=[hh] Hour (2 digits) TFRMMULTIRENAME.MIMINUTE.CAPTION=[n] Minute TFRMMULTIRENAME.MIMINUTE1.CAPTION=[nn] Minute (2 digits) TFRMMULTIRENAME.MISECOND.CAPTION=[s] Second TFRMMULTIRENAME.MISECOND1.CAPTION=[ss] Second (2 digits) TFRMMULTIRENAME.N5.CAPTION=- TFRMMULTIRENAME.MIPLUGIN.CAPTION=Plugin ����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackdlg.lrt��������������������������������������������������������������������0000644�0001750�0000144�00000001210�12613175013�015573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMPACKDLG.CAPTION=Pack files TFRMPACKDLG.LBLPROMPT.CAPTION=Pack file(s) to the file: TFRMPACKDLG.RGPACKER.CAPTION=Packer TFRMPACKDLG.BTNCONFIG.CAPTION=Con&figure TFRMPACKDLG.CBOTHERPLUGINS.CAPTION==> TFRMPACKDLG.CBSTOREDIR.CAPTION=Also &pack path names (only recursed) TFRMPACKDLG.CBMULTIVOLUME.CAPTION=&Multiple disk archive TFRMPACKDLG.CBMOVETOARCHIVE.CAPTION=Mo&ve to archive TFRMPACKDLG.CBCREATESFX.CAPTION=Create self e&xtracting archive TFRMPACKDLG.CBENCRYPT.CAPTION=Encr&ypt TFRMPACKDLG.CBPUTINTARFIRST.CAPTION=P&ut in the TAR archive first TFRMPACKDLG.CBCREATESEPARATEARCHIVES.CAPTION=C&reate separate archives, one per selected file/dir ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffileexecuteyourself.lrt��������������������������������������������������������0000644�0001750�0000144�00000000442�11740433676�020303� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMFILEEXECUTEYOURSELF.CAPTION=Wait... TFRMFILEEXECUTEYOURSELF.LBLPROMPT.CAPTION=Click on Close when the temporary file can be deleted! TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION=&Close TFRMFILEEXECUTEYOURSELF.LBLFILENAME.CAPTION=File name: TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION=From: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ffileexecuteyourself.pas��������������������������������������������������������0000644�0001750�0000144�00000010206�12612505011�020242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Copy out, execute and delete files from non FileSystemFileSource Copyright (C) 2010 Koblov Alexander (Alexx2000@mail.ru) 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 fFileExecuteYourSelf; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, uFile, uFileSource, uFileView, uOSForms; type { TfrmFileExecuteYourSelf } TfrmFileExecuteYourSelf = class(TAloneForm) btnClose: TBitBtn; lblFromPath: TLabel; lblFileName: TLabel; lblFromPathValue: TLabel; lblFileNameValue: TLabel; lblPrompt: TLabel; procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); private FFileSource: IFileSource; public constructor Create(TheOwner: TComponent; aFileSource: IFileSource; const FileName, FromPath: String); reintroduce; destructor Destroy; override; end; function ShowFileExecuteYourSelf(aFileView: TFileView; aFile: TFile; bWithAll: Boolean): Boolean; implementation {$R *.lfm} uses LCLProc, uTempFileSystemFileSource, uFileSourceOperation, uShellExecute, DCOSUtils; function ShowFileExecuteYourSelf(aFileView: TFileView; aFile: TFile; bWithAll: Boolean): Boolean; var TempFiles: TFiles = nil; TempFileSource: ITempFileSystemFileSource = nil; Operation: TFileSourceOperation = nil; CurrentDir, FileName: String; begin Result:= False; try TempFileSource:= TTempFileSystemFileSource.GetFileSource; if bWithAll then begin FileName:= TempFileSource.FileSystemRoot + aFile.FullPath; TempFiles:= aFileView.FileSource.GetFiles(aFileView.FileSource.GetRootDir); end else begin FileName:= TempFileSource.FileSystemRoot + aFile.Name; TempFiles:= TFiles.Create(aFileView.CurrentPath); TempFiles.Add(aFile.Clone); end; Operation := aFileView.FileSource.CreateCopyOutOperation( TempFileSource, TempFiles, TempFileSource.FileSystemRoot); if not Assigned(Operation) then Exit; // Execute operation Operation.Execute; // Create wait window with TfrmFileExecuteYourSelf.Create(Application, TempFileSource, aFile.Name, aFileView.CurrentAddress + aFileView.CurrentPath) do begin // Show wait window Show; // Save current directory CurrentDir:= mbGetCurrentDir; Result:= ShellExecuteEx('open', FileName, TempFileSource.FileSystemRoot + aFile.Path); // Restore current directory mbSetCurrentDir(CurrentDir); // If file can not be opened then close wait window if not Result then Close; end; finally FreeThenNil(Operation); FreeThenNil(TempFiles); end; end; { TfrmFileExecuteYourSelf } procedure TfrmFileExecuteYourSelf.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; end; constructor TfrmFileExecuteYourSelf.Create(TheOwner: TComponent; aFileSource: IFileSource; const FileName, FromPath: String); begin inherited Create(TheOwner); FFileSource:= aFileSource; lblFileNameValue.Caption:= FileName; lblFromPathValue.Caption:= FromPath; end; destructor TfrmFileExecuteYourSelf.Destroy; begin // Delete the temporary file source and all files inside. FFileSource:= nil; inherited Destroy; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/foptionshotkeysedithotkey.lrt���������������������������������������������������0000644�0001750�0000144�00000000612�12020403374�021363� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMEDITHOTKEY.LBLSHORTCUTS.CAPTION=Shortcuts: TFRMEDITHOTKEY.LBLPARAMETERS.CAPTION=&Parameters (each in a separate line): TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION=Only for these controls TFRMEDITHOTKEY.BTNOK.CAPTION=&OK TFRMEDITHOTKEY.BTNCANCEL.CAPTION=&Cancel TFRMEDITHOTKEY.BTNADDSHORTCUT.HINT=Add new shortcut to sequence TFRMEDITHOTKEY.BTNREMOVESHORTCUT.HINT=Remove last shortcut from sequence ����������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udisplayfile.pas����������������������������������������������������������������0000644�0001750�0000144�00000015220�12070253712�016502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uDisplayFile; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Graphics, uFile; type TDisplayItemPtr = Pointer; {en Describes the file displayed in the file view. } { TDisplayFile } TDisplayFile = class private FFSFile: TFile; //<en reference to file source's file FDisplayItem: TDisplayItemPtr; //<en Item that displays this file (for example Node in a tree). // Other properties. FTag: PtrInt; //<en File view related info FSelected: Boolean; //<en If is selected FIconID: PtrInt; //<en Icon ID for PixmapManager FIconOverlayID: PtrInt; //<en Overlay icon ID for PixmapManager FTextColor: TColor; //<en Text color in file list {en Used to indicate that the file has been recently updated. Value goes from 100 to 0. 0 - not recently updated, 100 - just updated. } FRecentlyUpdatedPct: Integer; // Cache of displayed strings. FDisplayStrings: TStringList; public {en @param(ReferenceFile Reference file source file that will be associated with this display file. The TDisplayFile takes ownership and will destroy the FS file.) } constructor Create(ReferenceFile: TFile); virtual reintroduce; destructor Destroy; override; {en Creates an identical copy of the object (as far as object data is concerned). @param(NewReferenceFile FS file to assign as the reference file (possibly a clone too).) } function Clone(NewReferenceFile: TFile): TDisplayFile; {en Creates an identical copy of the object (as far as object data is concerned). @param(CloneFSFile If @false then the reference FS file must be later manually assigned. Also, if @false DisplayStrings are not cloned.) } function Clone(CloneFSFile: Boolean): TDisplayFile; virtual; procedure CloneTo(AFile: TDisplayFile); virtual; property FSFile: TFile read FFSFile write FFSFile; property DisplayItem: TDisplayItemPtr read FDisplayItem write FDisplayItem; property Selected: Boolean read FSelected write FSelected; property IconID: PtrInt read FIconID write FIconID; property IconOverlayID: PtrInt read FIconOverlayID write FIconOverlayID; property TextColor: TColor read FTextColor write FTextColor; property DisplayStrings: TStringList read FDisplayStrings; property RecentlyUpdatedPct: Integer read FRecentlyUpdatedPct write FRecentlyUpdatedPct; property Tag: PtrInt read FTag write FTag; end; { TDisplayFiles } TDisplayFiles = class private FList: TFPList; FOwnsObjects: Boolean; protected function GetCount: Integer; procedure SetCount(Count: Integer); function Get(Index: Integer): TDisplayFile; procedure Put(Index: Integer; AFile: TDisplayFile); public constructor Create(AOwnsObjects: Boolean = True); virtual; destructor Destroy; override; {en Create a list with cloned files. @param(CloneFSFiles If @true automatically clones all FS reference files too. If @false does not clone reference files and some properties that are affected by reference FS files.) } function Clone(CloneFSFiles: Boolean): TDisplayFiles; virtual; procedure CloneTo(Files: TDisplayFiles; CloneFSFiles: Boolean); virtual; function Add(AFile: TDisplayFile): Integer; procedure Clear; procedure Delete(Index: Integer); function Find(AFile: TDisplayFile): Integer; procedure Remove(AFile: TDisplayFile); property Count: Integer read GetCount write SetCount; property Items[Index: Integer]: TDisplayFile read Get write Put; default; property List: TFPList read FList; property OwnsObjects: Boolean read FOwnsObjects write FOwnsObjects; end; implementation constructor TDisplayFile.Create(ReferenceFile: TFile); begin FTag := -1; FIconID := -1; FIconOverlayID := -1; FTextColor := clNone; FFSFile := ReferenceFile; FDisplayStrings := TStringList.Create; end; destructor TDisplayFile.Destroy; begin inherited Destroy; FDisplayStrings.Free; FSFile.Free; end; function TDisplayFile.Clone(NewReferenceFile: TFile): TDisplayFile; begin Result := TDisplayFile.Create(NewReferenceFile); CloneTo(Result); end; function TDisplayFile.Clone(CloneFSFile: Boolean): TDisplayFile; var AFile: TFile; begin if CloneFSFile then AFile := FSFile.Clone else AFile := nil; Result := TDisplayFile.Create(AFile); CloneTo(Result); end; procedure TDisplayFile.CloneTo(AFile: TDisplayFile); begin if Assigned(AFile) then begin AFile.FTag := FTag; AFile.FSelected := FSelected; AFile.FIconID := FIconID; AFile.FIconOverlayID := FIconOverlayID; AFile.FTextColor := FTextColor; if Assigned(AFile.FFSFile) then begin AFile.FDisplayStrings.AddStrings(FDisplayStrings); end; end; end; // ---------------------------------------------------------------------------- constructor TDisplayFiles.Create(AOwnsObjects: Boolean = True); begin inherited Create; FOwnsObjects := AOwnsObjects; FList := TFPList.Create; end; destructor TDisplayFiles.Destroy; begin Clear; FreeAndNil(FList); inherited Destroy; end; function TDisplayFiles.Clone(CloneFSFiles: Boolean): TDisplayFiles; begin Result := TDisplayFiles.Create(FOwnsObjects); CloneTo(Result, CloneFSFiles); end; procedure TDisplayFiles.CloneTo(Files: TDisplayFiles; CloneFSFiles: Boolean); var i: Integer; begin for i := 0 to FList.Count - 1 do begin Files.Add(Get(i).Clone(CloneFSFiles)); end; end; function TDisplayFiles.GetCount: Integer; begin Result := FList.Count; end; procedure TDisplayFiles.SetCount(Count: Integer); begin FList.Count := Count; end; function TDisplayFiles.Add(AFile: TDisplayFile): Integer; begin Result := FList.Add(AFile); end; procedure TDisplayFiles.Clear; var i: Integer; p: Pointer; begin if FOwnsObjects then begin for i := 0 to FList.Count - 1 do begin p := FList.Items[i]; TDisplayFile(p).Free; end; end; FList.Clear; end; procedure TDisplayFiles.Delete(Index: Integer); begin if FOwnsObjects then TDisplayFile(FList.Items[Index]).Free; FList.Delete(Index); end; function TDisplayFiles.Find(AFile: TDisplayFile): Integer; begin Result := FList.IndexOf(AFile); end; procedure TDisplayFiles.Remove(AFile: TDisplayFile); var i: Integer; begin i := Find(AFile); if i >= 0 then Delete(i); end; function TDisplayFiles.Get(Index: Integer): TDisplayFile; begin Result := TDisplayFile(FList.Items[Index]); end; procedure TDisplayFiles.Put(Index: Integer; AFile: TDisplayFile); begin FList.Items[Index] := AFile; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackdlg.lfm��������������������������������������������������������������������0000644�0001750�0000144�00000015371�12616371371�015575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������inherited frmPackDlg: TfrmPackDlg Left = 338 Height = 272 Width = 540 HelpContext = 150 ActiveControl = edtPackCmd AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Pack files' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 272 ClientWidth = 540 Constraints.MinHeight = 236 Constraints.MinWidth = 482 OnShow = FormShow Position = poScreenCenter inherited pnlContent: TPanel Height = 179 Width = 532 Align = alNone ClientHeight = 179 ClientWidth = 532 ParentColor = True object lblPrompt: TLabel[0] Left = 0 Height = 15 Top = 0 Width = 113 Caption = 'Pack file(s) to the file:' FocusControl = edtPackCmd ParentColor = False ShowAccelChar = False end object edtPackCmd: TDirectoryEdit[1] AnchorSideLeft.Control = lblPrompt AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 23 Top = 15 Width = 340 OnAcceptDirectory = edtPackCmdAcceptDirectory ShowHidden = False ButtonWidth = 23 NumGlyphs = 1 Anchors = [akTop, akLeft, akRight] MaxLength = 0 TabOrder = 0 end object rgPacker: TRadioGroup[2] AnchorSideLeft.Control = edtPackCmd AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblPrompt AnchorSideRight.Control = pnlContent AnchorSideRight.Side = asrBottom Left = 372 Height = 100 Top = 0 Width = 148 Anchors = [akTop, akLeft, akRight] AutoFill = True AutoSize = True BorderSpacing.Left = 32 BorderSpacing.Right = 12 Caption = 'Packer' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize ChildSizing.EnlargeVertical = crsHomogenousSpaceResize ChildSizing.ShrinkHorizontal = crsHomogenousSpaceResize ChildSizing.ShrinkVertical = crsHomogenousSpaceResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 3 Columns = 3 Constraints.MinHeight = 100 Constraints.MinWidth = 100 OnClick = arbChange TabOrder = 2 end object cbPackerList: TComboBox[3] AnchorSideLeft.Control = cbOtherPlugins AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rgPacker AnchorSideTop.Side = asrBottom AnchorSideRight.Control = rgPacker AnchorSideRight.Side = asrBottom Left = 414 Height = 23 Top = 106 Width = 100 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 BorderSpacing.Right = 6 Enabled = False ItemHeight = 15 OnChange = cbOtherPluginsChange ParentFont = False Style = csDropDownList TabOrder = 4 Visible = False end object btnConfig: TButton[4] AnchorSideLeft.Control = rgPacker AnchorSideTop.Control = cbPackerList AnchorSideTop.Side = asrBottom AnchorSideRight.Control = rgPacker AnchorSideRight.Side = asrBottom Left = 378 Height = 32 Top = 135 Width = 136 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 4 Caption = 'Con&figure' OnClick = btnConfigClick TabOrder = 5 end object cbOtherPlugins: TCheckBox[5] AnchorSideLeft.Control = rgPacker AnchorSideTop.Control = cbPackerList AnchorSideTop.Side = asrCenter Left = 378 Height = 19 Top = 108 Width = 36 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '=>' Enabled = False OnChange = cbOtherPluginsChange TabOrder = 3 Visible = False end object pnlOptions: TPanel[6] AnchorSideTop.Control = edtPackCmd AnchorSideTop.Side = asrBottom Left = 0 Height = 133 Top = 46 Width = 340 AutoSize = True BorderSpacing.Top = 8 BevelOuter = bvNone ChildSizing.Layout = cclLeftToRightThenTopToBottom ClientHeight = 133 ClientWidth = 340 Constraints.MinWidth = 340 TabOrder = 1 object cbStoreDir: TCheckBox Left = 0 Height = 19 Top = 0 Width = 277 Caption = 'Also &pack path names (only recursed)' Checked = True State = cbChecked TabOrder = 0 end object cbMultivolume: TCheckBox Left = 0 Height = 19 Top = 19 Width = 277 Caption = '&Multiple disk archive' TabOrder = 1 end object cbMoveToArchive: TCheckBox Left = 0 Height = 19 Top = 38 Width = 277 Caption = 'Mo&ve to archive' TabOrder = 2 end object cbCreateSFX: TCheckBox Left = 0 Height = 19 Top = 57 Width = 277 Caption = 'Create self e&xtracting archive' OnClick = cbCreateSFXClick TabOrder = 3 end object cbEncrypt: TCheckBox Left = 0 Height = 19 Top = 76 Width = 277 Caption = 'Encr&ypt' TabOrder = 4 end object cbPutInTarFirst: TCheckBox Left = 0 Height = 19 Top = 95 Width = 277 Caption = 'P&ut in the TAR archive first' OnChange = cbPutInTarFirstChange TabOrder = 5 end object cbCreateSeparateArchives: TCheckBox Left = 0 Height = 19 Top = 114 Width = 277 Caption = 'C&reate separate archives, one per selected file/dir' OnChange = cbCreateSeparateArchivesChange TabOrder = 6 end end end inherited pnlButtons: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = DividerBevel AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Top = 214 Width = 524 Align = alNone Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 8 BorderSpacing.Top = 6 BorderSpacing.Right = 8 ClientWidth = 524 inherited btnCancel: TBitBtn Left = 342 end inherited btnOK: TBitBtn Left = 436 end end object DividerBevel: TDividerBevel[2] AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlContent AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom Left = 8 Height = 15 Top = 191 Width = 524 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 Font.Style = [fsBold] ParentFont = False end inherited pmQueuePopup: TPopupMenu[3] left = 264 top = 216 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/DragCursors.lrs�����������������������������������������������������������������0000644�0001750�0000144�00000035373�12512434150�016274� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('ArrowCopy','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#0#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#0#0#0#255#255#255#0#0 +#183#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2 +#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2 +#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#2 +#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2 +#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0 +#0#0#0#0#0#0#0#0#1#1#1#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0 +#0#0#1#1#0#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0#0#0#0#1#0#0#0#0#0#1#1#1#0#0 +#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0 +#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#1#0#0#1#1#1#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2 +#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0 +#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#1#1#1 +#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1 +#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 +#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255 +#255#255#255#255#192#255#255#255#192#255#255#255#192#255#255#255#192#255#255 +#255#192#255#255#248#0#7#255#136#0#7#255#8#0#7#255#8#0#7'~'#8#0#7'>'#24#0#7 +#28#31#192#255#12'?'#192#255#0'?'#192#255#0#127#192#255#0#1#192#255#0#3#255 +#255#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255#255#0#255 +#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255#255 +#255'?'#255#255#255#127#255#255#255 ]); LazarusResources.Add('ArrowMove','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#0#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#0#0#0#255#255#255#0#0 +#22'r'#0#15#31#244#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#2#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#3#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#2#3#3#3#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#2#3#3#3#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#2#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#2#2#2#2#2#2#2#2#2 +#2#2#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1 +#1#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1 +#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#143#255#255#254#0#1#255#254#0#1#255'~'#0 +#1#255'>'#0#1#255#28#0#1#255#12#0#1#255#0'?'#255#255#0#127#255#255#0#1#255 +#255#0#3#255#255#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255 +#255#0#255#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255 +#31#255#255#255'?'#255#255#255#127#255#255#255 ]); LazarusResources.Add('ArrowLink','CUR',[ #0#0#2#0#1#0' '#0#0#0#0#0#0#168#8#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1#0 +#8#0#0#0#0#0#0#4#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#1#0#0#0#0#0#0#255#255#255#0']' +#18#4#0#156#30#7#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#2#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#2#2#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#2#0#0#0#0#0#0#0#0#2#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#2#2#0#0#0#0#0#0#2#2#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#2#3#3#3#2#2#0#0#0#2#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#2#3#3#3#3#2#2#2#2#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3 +#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#2#3#3#3#3#3#3#3 +#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#2#3#3#3#3#3#3#3#3#2#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#2#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#1#1#1#0#0#2#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#1#1#0#0#2#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#1#0#0#0#0#0#1#1#1#0 +#2#3#3#3#3#3#3#3#3#3#2#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#1#1#0#2#2#2#2#2#2#2 +#2#2#2#2#2#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1 +#1#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1 +#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#1#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#1#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#1#1#1#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#1#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#1#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#224#255#255#255 +#195#255#255#255#199#255#255#255#135#251#255#255#131#243#255#255#192#227#255 +#255#192#3#255#255#192#3#255#255#128#3#255#255#0#3#255#255#0#3#255'~'#8#3#255 +'>'#16#3#255#28#0#3#255#12#0#3#255#0#127#255#255#0#127#255#255#0#1#255#255#0 +#3#255#255#0#7#255#255#0#15#255#255#0#31#255#255#0'?'#255#255#0#127#255#255#0 +#255#255#255#1#255#255#255#3#255#255#255#7#255#255#255#15#255#255#255#31#255 +#255#255'?'#255#255#255#127#255#255#255 ]); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uconvencoding.pas���������������������������������������������������������������0000644�0001750�0000144�00000030073�12675512324�016664� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Encoding conversion and related stuff Copyright (C) 2011 Alexander Koblov (Alexx2000@mail.ru) 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 uConvEncoding; {$mode delphi} interface function TextIsASCII(const S: String): Boolean; function DetectEncoding(const S: String): String; function SingleByteEncoding(TextEncoding: String): Boolean; implementation uses SysUtils, Classes, LazUTF8, LConvEncoding, GetText, nsCore, nsUniversalDetector; var Lang, FallbackLang: AnsiString; SupportedEncodings: TStringList = nil; type TMyCodePages = (cp1251, cpKOI8R, cp866); const scCodePage : array[TMyCodePages] of AnsiString = ( // CP1251 (WINDOWS) #$C0#$E0 + // Аа #$C1#$E1 + // Бб #$C2#$E2 + // Вв #$C3#$E3 + // Гг #$C4#$E4 + // Дд #$C5#$E5 + // Ее #$A8#$B8 + // Ёё #$C6#$E6 + // Жж #$C7#$E7 + // Зз #$C8#$E8 + // Ии #$C9#$E9 + // Йй #$CA#$EA + // Кк #$CB#$EB + // Лл #$CC#$EC + // Мм #$CD#$ED + // Нн #$CE#$EE + // Оо #$CF#$EF + // Пп #$D0#$F0 + // Рр #$D1#$F1 + // Сс #$D2#$F2 + // Тт #$D3#$F3 + // Уу #$D4#$F4 + // Фф #$D5#$F5 + // Хх #$D6#$F6 + // Цц #$D7#$F7 + // Чч #$D8#$F8 + // Шш #$D9#$F9 + // Щщ #$DA#$FA + // Ъъ #$DB#$FB + // Ыы #$DC#$FC + // Ьь #$DD#$FD + // Ээ #$DE#$FE + // Юю #$DF#$FF , // Яя // KOI8-R (UNIX) #$E1#$C1 + // Аа #$E2#$C2 + // Бб #$F7#$D7 + // Вв #$E7#$C7 + // Гг #$E4#$C4 + // Дд #$E5#$C5 + // Ее #$B3#$A3 + // Ёё #$F6#$D6 + // Жж #$FA#$DA + // Зз #$E9#$C9 + // Ии #$EA#$CA + // Йй #$EB#$CB + // Кк #$EC#$CC + // Лл #$ED#$CD + // Мм #$EE#$CE + // Нн #$EF#$CF + // Оо #$F0#$D0 + // Пп #$F2#$D2 + // Рр #$F3#$D3 + // Сс #$F4#$D4 + // Тт #$F5#$D5 + // Уу #$E6#$C6 + // Фф #$E8#$C8 + // Хх #$E3#$C3 + // Цц #$FE#$DE + // Чч #$FB#$DB + // Шш #$FD#$DD + // Щщ #$FF#$DF + // Ъъ #$F9#$D9 + // Ыы #$F8#$D8 + // Ьь #$FC#$DC + // Ээ #$E0#$C0 + // Юю #$F1#$D1 , // Яя // CP866 (DOS) #$80#$A0 + // Аа #$81#$A1 + // Бб #$82#$A2 + // Вв #$83#$A3 + // Гг #$84#$A4 + // Дд #$85#$A5 + // Ее #$F0#$F1 + // Ёё #$86#$A6 + // Жж #$87#$A7 + // Зз #$88#$A8 + // Ии #$89#$A9 + // Йй #$8A#$AA + // Кк #$8B#$AB + // Лл #$8C#$AC + // Мм #$8D#$AD + // Нн #$8E#$AE + // Оо #$8F#$AF + // Пп #$90#$E0 + // Рр #$91#$E1 + // Сс #$92#$E2 + // Тт #$93#$E3 + // Уу #$94#$E4 + // Фф #$95#$E5 + // Хх #$96#$E6 + // Цц #$97#$E7 + // Чч #$98#$E8 + // Шш #$99#$E9 + // Щщ #$9A#$EA + // Ъъ #$9B#$EB + // Ыы #$9C#$EC + // Ьь #$9D#$ED + // Ээ #$9E#$EE + // Юю #$9F#$EF // Яя ); var svStatistic : array[AnsiChar] of Single; procedure InitStatistic; begin FillChar(svStatistic, SizeOf(svStatistic), 0); // CP1251 (WINDOWS) svStatistic[#$C0] := 0.001; // 'А' svStatistic[#$C1] := 0; // 'Б' svStatistic[#$C2] := 0.002; // 'В' svStatistic[#$C3] := 0; // 'Г' svStatistic[#$C4] := 0.001; // 'Д' svStatistic[#$C5] := 0.001; // 'Е' svStatistic[#$C6] := 0; // 'Ж' svStatistic[#$C7] := 0; // 'З' svStatistic[#$C8] := 0.001; // 'И' svStatistic[#$C9] := 0; // 'Й' svStatistic[#$CA] := 0.001; // 'К' svStatistic[#$CB] := 0; // 'Л' svStatistic[#$CC] := 0.001; // 'М' svStatistic[#$CD] := 0.001; // 'Н' svStatistic[#$CE] := 0.001; // 'О' svStatistic[#$CF] := 0.002; // 'П' svStatistic[#$D0] := 0.002; // 'Р' svStatistic[#$D1] := 0.001; // 'С' svStatistic[#$D2] := 0.001; // 'Т' svStatistic[#$D3] := 0; // 'У' svStatistic[#$D4] := 0; // 'Ф' svStatistic[#$D5] := 0; // 'Х' svStatistic[#$D6] := 0; // 'Ц' svStatistic[#$D7] := 0.001; // 'Ч' svStatistic[#$D8] := 0.001; // 'Ш' svStatistic[#$D9] := 0; // 'Щ' svStatistic[#$DA] := 0; // 'Ъ' svStatistic[#$DB] := 0; // 'Ы' svStatistic[#$DC] := 0; // 'Ь' svStatistic[#$DD] := 0.001; // 'Э' svStatistic[#$DE] := 0; // 'Ю' svStatistic[#$DF] := 0; // 'Я' svStatistic[#$E0] := 0.057; // 'а' svStatistic[#$E1] := 0.01; // 'б' svStatistic[#$E2] := 0.031; // 'в' svStatistic[#$E3] := 0.011; // 'г' svStatistic[#$E4] := 0.021; // 'д' svStatistic[#$E5] := 0.067; // 'е' svStatistic[#$E6] := 0.007; // 'ж' svStatistic[#$E7] := 0.013; // 'з' svStatistic[#$E8] := 0.052; // 'и' svStatistic[#$E9] := 0.011; // 'й' svStatistic[#$EA] := 0.023; // 'к' svStatistic[#$EB] := 0.03; // 'л' svStatistic[#$EC] := 0.024; // 'м' svStatistic[#$ED] := 0.043; // 'н' svStatistic[#$EE] := 0.075; // 'о' svStatistic[#$EF] := 0.026; // 'п' svStatistic[#$F0] := 0.038; // 'р' svStatistic[#$F1] := 0.034; // 'с' svStatistic[#$F2] := 0.046; // 'т' svStatistic[#$F3] := 0.016; // 'у' svStatistic[#$F4] := 0.001; // 'ф' svStatistic[#$F5] := 0.006; // 'х' svStatistic[#$F6] := 0.002; // 'ц' svStatistic[#$F7] := 0.011; // 'ч' svStatistic[#$F8] := 0.004; // 'ш' svStatistic[#$F9] := 0.004; // 'щ' svStatistic[#$FA] := 0; // 'ъ' svStatistic[#$FB] := 0.012; // 'ы' svStatistic[#$FC] := 0.012; // 'ь' svStatistic[#$FD] := 0.003; // 'э' svStatistic[#$FE] := 0.005; // 'ю' svStatistic[#$FF] := 0.015; // 'я' end; function MyConvertString(const S: AnsiString; const FromCP, ToCP: TMyCodePages): AnsiString; var I: Integer; C: AnsiChar; Chars: array [AnsiChar] of AnsiChar; begin Result:= S; if FromCP = ToCP then Exit; for C := #0 to #255 do Chars[C] := C; for I := 1 to Length(scCodePage[cp1251]) do Chars[scCodePage[FromCP][I]] := scCodePage[ToCP][I]; for I := 1 to Length(s) do Result[I] := Chars[Result[I]]; end; function DetectCharsetCyrillic(const S: AnsiString): AnsiString; var I: Integer; J: LongWord; C: AnsiChar; D, M: Single; T: AnsiString; CodePage: TMyCodePages; CharCount: array [AnsiChar] of Integer; begin J := 0; M := 0; T := S; FillChar(CharCount, SizeOf(CharCount), 0); for I := 1 to Length(S) do Inc(CharCount[S[I]]); // Check for CP866 encoding for C := #$80 {'А'} to #$AF {'п'} do Inc(J, CharCount[C]); if J > (Length(S) div 3) then begin Result := 'CP866'; Exit; end; for C := #$C0 {'А'} to #$FF {'я'} do M := M + sqr(CharCount[C] / Length(S) - svStatistic[C]); for CodePage := Low(TMyCodePages) to High(TMyCodePages) do begin // Convert to cp1251, because statistic in this encoding T:= MyConvertString(S, CodePage, cp1251); FillChar(CharCount, SizeOf(CharCount), 0); for I := 1 to Length(T) do Inc(CharCount[T[I]]); D := 0; for C := #$C0 {'А'} to #$FF {'я'} do D := D + sqr(CharCount[C] / Length(S) - svStatistic[C]); if D <= M then begin M := D; case CodePage of cp1251 : Result:= 'CP1251'; cpKOI8R: Result:= 'KOI-8'; cp866 : Result:= 'CP866'; end; end; end; end; function MyDetectCodePageType(const S: AnsiString): AnsiString; var Detector: TnsUniversalDetector = nil; CharsetInfo: rCharsetInfo; begin Detector:= TnsUniversalDetector.Create; try Detector.Reset; Detector.HandleData(PChar(S), Length(S)); if not Detector.Done then Detector.DataEnd; CharsetInfo:= Detector.GetDetectedCharsetInfo; case CharsetInfo.CodePage of 866: Result:= 'CP866'; 932: Result:= 'CP932'; 950: Result:= 'CP950'; 1251: Result:= 'CP1251'; 1252: Result:= 'CP1252'; 1253: Result:= 'CP1253'; 1255: Result:= 'CP1255'; 20866: Result:= 'KOI-8'; else begin Result:= CharsetInfo.Name; // When unknown encoding then use system encoding if SupportedEncodings.IndexOf(Result) < 0 then begin if (FallbackLang = 'be') or (FallbackLang = 'bg') or (FallbackLang = 'ky') or (FallbackLang = 'mk') or (FallbackLang = 'mn') or (FallbackLang = 'ru') or (FallbackLang = 'tt') then Result:= DetectCharsetCyrillic(S) else begin Result:= GetDefaultTextEncoding; if NormalizeEncoding(Result) = EncodingUTF8 then begin // the system encoding is UTF-8, but it is not UTF-8 // use ISO-8859-1 instead. This encoding has a full 1:1 mapping to unicode, // so no character is lost during conversions. Result:= 'ISO-8859-1'; end; end; end; end; end; finally FreeAndNil(Detector); end; end; function DetectEncoding(const s: string): string; function CompareI(p1, p2: PChar; Count: integer): boolean; var i: Integer; Chr1: Byte; Chr2: Byte; begin for i:=1 to Count do begin Chr1 := byte(p1^); Chr2 := byte(p2^); if Chr1<>Chr2 then begin if Chr1 in [97..122] then dec(Chr1,32); if Chr2 in [97..122] then dec(Chr2,32); if Chr1<>Chr2 then exit(false); end; inc(p1); inc(p2); end; Result:=true; end; var l: Integer; p: Integer; EndPos: LongInt; i: LongInt; begin l:= Length(s); if l = 0 then begin Result:= GetDefaultTextEncoding; Exit; end; // try UTF-8 BOM (Byte Order Mark) if CompareI(@s[1],#$EF#$BB#$BF,3) then begin Result:=EncodingUTF8BOM; exit; end; // try ucs-2le BOM FF FE if (length(s)>=2) and (s[1]=#$FF) and (s[2]=#$FE) then begin Result:=EncodingUCS2LE; exit; end; // try ucs-2be BOM FE FF if (length(s)>=2) and (s[1]=#$FE) and (s[2]=#$FF) then begin Result:=EncodingUCS2BE; exit; end; // try {%encoding eee} if CompareI(@s[1],'{%encoding ',11) then begin p:=12; while (p<=l) and (s[p] in [' ',#9]) do inc(p); EndPos:=p; while (EndPos<=l) and (not (s[EndPos] in ['}',' ',#9])) do inc(EndPos); Result:=NormalizeEncoding(copy(s,p,EndPos-p)); exit; end; // try UTF-8 (this includes ASCII) p:=1; while (p<=l) do begin if ord(s[p])<128 then begin // ASCII inc(p); end else begin i:=UTF8CharacterStrictLength(@s[p]); //DebugLn(['GuessEncoding ',i,' ',DbgStr(s[p])]); if i=0 then begin break; end; inc(p,i); end; end; if p>l then begin Result:=EncodingUTF8; exit; end; // Try to detect encoding Result:= MyDetectCodePageType(s); end; function SingleByteEncoding(TextEncoding: String): Boolean; begin TextEncoding := NormalizeEncoding(TextEncoding); Result := (TextEncoding <> EncodingUTF8) and (TextEncoding <> EncodingUTF8BOM) and (TextEncoding <> EncodingUCS2LE) and (TextEncoding <> EncodingUCS2BE); end; function TextIsASCII(const S: String): Boolean; inline; var I: Integer; begin for I:= 1 to Length(S) do begin if Ord(S[I]) > 127 then Exit(False); end; Result:= True; end; initialization InitStatistic; GetLanguageIDs(Lang, FallbackLang); SupportedEncodings:= TStringList.Create; GetSupportedEncodings(SupportedEncodings); finalization FreeAndNil(SupportedEncodings); end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uhotkeymanager.pas��������������������������������������������������������������0000644�0001750�0000144�00000113245�12172444104�017041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Double Commander ------------------------------------------------------------------------- HotKey Manager. Allow to set it's own bindings to each TWinControl on form. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Copyright (C) 2011-2012 Przemyslaw Nagay (cobines@gmail.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 uHotkeyManager; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Controls, LCLProc, LCLType, LCLIntf, Forms, ActnList, DCClassesUtf8, fgl, contnrs, DCXmlConfig, DCBasicTypes; type generic THMObjectInstance<InstanceClass> = class Instance: InstanceClass; KeyDownProc: TKeyEvent; end; THMFormInstance = specialize THMObjectInstance<TCustomForm>; THMControlInstance = specialize THMObjectInstance<TWinControl>; { THotkey } THotkey = class Shortcuts: array of String; Command: String; Params: array of String; procedure Assign(Hotkey: THotkey); function Clone: THotkey; function HasParam(const aParam: String): Boolean; overload; function HasParam(const aParams: array of String): Boolean; overload; function SameAs(Hotkey: THotkey): Boolean; function SameParams(const aParams: array of String): Boolean; function SameShortcuts(const aShortcuts: array of String): Boolean; end; TBaseHotkeysList = specialize TFPGObjectList<THotkey>; { TFreeNotifier } TFreeNotifier = class(TComponent) private FFreeEvent: TNotifyEvent; protected procedure Notification(AComponent: TComponent; Operation: TOperation); override; public property OnFree: TNotifyEvent read FFreeEvent write FFreeEvent; end; THotkeyOperation = (hopAdd, hopRemove, hopClear, hopUpdate); THotkeyEvent = procedure (hotkey: THotkey; operation: THotkeyOperation) of object; { THotkeys } THotkeys = class(TBaseHotkeysList) private FOnChange: THotkeyEvent; procedure DoOnChange(hotkey: THotkey; operation: THotkeyOperation); public constructor Create(AFreeObjects: Boolean = True); reintroduce; function Add(const Shortcuts, Params: array of String; Command: String): THotkey; overload; function AddIfNotExists(const Shortcuts, Params: array of String; Command: String): THotkey; overload; {en Adds multiple shortcuts to the same command. @param(ShortcutsWithParams Array of shortcuts followed by any number of parameters. Each shortcuts array must end with an empty string, and similarly each parameters must end with an empty string. [Shortcut1A, Shortcut1B, '', S1ParamA, '', Shortcut2, '', S2ParamA, S2ParamB, '', ...]) @param(Command Command to which the shortcuts should be added.) @param(OldShortcuts, OldParams Adds new shortcuts even if old shortcut exists. If a different shortcuts exists however then doesn't add new one.) } procedure AddIfNotExists(const ShortcutsWithParams: array of String; Command: String; const OldShortcuts, OldParams: array of String); overload; procedure AddIfNotExists(const ShortcutsWithParams: array of String; Command: String); overload; procedure Clear; reintroduce; procedure Remove(var hotkey: THotkey); reintroduce; function Find(const Shortcuts: TDynamicStringArray): THotkey; {en Find hotkey which shortcuts begin with Shortcuts parameter. If BothWays=@true then also looks for shortcuts which are the beginning of Shortcuts parameter. } function FindByBeginning(const Shortcuts: TDynamicStringArray; BothWays: Boolean): THotkey; function FindByCommand(Command: String): THotkey; function FindByContents(Hotkey: THotkey): THotkey; {en Should be called whenever a hotkey has shortcut updated to update the shortcuts in ActionLists. } procedure UpdateHotkey(Hotkey: THotkey); property OnChange: THotkeyEvent read FOnChange write FOnChange; end; { THMBaseObject } generic THMBaseObject<InstanceClass, InstanceInfoClass> = class private FObjects: TFPObjectList; FHotkeys: THotkeys; FName: String; public constructor Create(AName: String); virtual; destructor Destroy; override; function Add(AInstanceInfo: InstanceInfoClass): Integer; procedure Delete(AInstance: InstanceClass); function Find(AInstance: InstanceClass): InstanceInfoClass; property Hotkeys: THotkeys read FHotkeys; property Name: String read FName; end; THMControl = specialize THMBaseObject<TWinControl, THMControlInstance>; THMBaseControls = specialize TFPGObjectList<THMControl>; { THMControls } THMControls = class(THMBaseControls) procedure Delete(AName: String); overload; function Find(AName: String): THMControl; function Find(AControl: TWinControl): THMControl; function FindOrCreate(AName: String): THMControl; end; THMBaseForm = specialize THMBaseObject<TCustomForm, THMFormInstance>; TActionLists = specialize TFPGObjectList<TActionList>; { THMForm } THMForm = class(THMBaseForm) private {en Used for notifying when an ActionList is destroyed. } FFreeNotifier: TFreeNotifier; FActionLists: TActionLists; function GetActionByCommand(ActionList: TActionList; Command: String): TAction; procedure OnActionListFree(Sender: TObject); procedure OnHotkeyEvent(hotkey: THotkey; operation: THotkeyOperation); procedure RemoveActionShortcut(hotkey: THotkey; AssignNextShortcut: Boolean); procedure SetActionShortcut(hotkey: THotkey; OverridePrevious: Boolean); public Controls: THMControls; constructor Create(AName: String); override; destructor Destroy; override; procedure RegisterActionList(ActionList: TActionList); procedure UnregisterActionList(ActionList: TActionList); end; TBaseForms = specialize TFPGObjectList<THMForm>; { THMForms } THMForms = class(TBaseForms) procedure Delete(AName: String); overload; function Find(AName: String): THMForm; function Find(AForm: TCustomForm): THMForm; function FindOrCreate(AName: String): THMForm; end; { THotKeyManager } THotKeyManager = class private FForms: THMForms; FLastShortcutTime: Double; // When last shortcut was received (used for sequences of shortcuts) FSequenceStep: Integer; // Which hotkey we are waiting for (from 0) FShortcutsSequence: TDynamicStringArray; // Sequence of shortcuts that has been processed since last key event FVersion: Integer; //--------------------- procedure ClearAllHotkeys; //Hotkey Handler procedure KeyDownHandler(Sender: TObject; var Key: Word; Shift: TShiftState); //--------------------- //This function is called from KeyDownHandler to find registered hotkey and execute assigned action function HotKeyEvent(Form: TCustomForm; Hotkeys: THotkeys): Boolean; //--------------------- function RegisterForm(AFormName: String): THMForm; function RegisterControl(AFormName: String; AControlName: String): THMControl; //--------------------- procedure Save(Config: TXmlConfig; Root: TXmlNode); procedure Load(Config: TXmlConfig; Root: TXmlNode); procedure LoadIni(FileName: String); //--------------------- function IsShortcutConflictingWithOS(Shortcut: String): Boolean; public constructor Create; destructor Destroy; override; //--------------------- procedure Save(FileName: String); procedure Load(FileName: String); //--------------------- function Register(AForm: TCustomForm; AFormName: String): THMForm; function Register(AControl: TWinControl; AControlName: String): THMControl; procedure UnRegister(AForm: TCustomForm); procedure UnRegister(AControl: TWinControl); //--------------------- property Forms: THMForms read FForms; property Version: Integer read FVersion; end; implementation uses XMLRead, uKeyboard, uGlobs, uDebug, uDCVersion, uFormCommands, DCOSUtils, DCStrUtils; const MaxShortcutSequenceInterval = 1000; // in ms { THotkey } procedure THotkey.Assign(Hotkey: THotkey); begin Shortcuts := Copy(Hotkey.Shortcuts); Params := Copy(Hotkey.Params); Command := Hotkey.Command; end; function THotkey.Clone: THotkey; begin Result := THotkey.Create; Result.Assign(Self); end; function THotkey.HasParam(const aParams: array of String): Boolean; begin Result := ContainsOneOf(Params, aParams); end; function THotkey.HasParam(const aParam: String): Boolean; begin Result := Contains(Params, aParam); end; function THotkey.SameAs(Hotkey: THotkey): Boolean; begin Result := (Command = Hotkey.Command) and (SameShortcuts(Hotkey.Shortcuts)) and (SameParams(Hotkey.Params)); end; function THotkey.SameParams(const aParams: array of String): Boolean; begin Result := Compare(Params, aParams); end; function THotkey.SameShortcuts(const aShortcuts: array of String): Boolean; begin Result := Compare(Shortcuts, aShortcuts); end; { TFreeNotifier } procedure TFreeNotifier.Notification(AComponent: TComponent; Operation: TOperation); begin if (Operation = opRemove) and Assigned(FFreeEvent) then FFreeEvent(AComponent); inherited Notification(AComponent, Operation); end; { THotkeys } constructor THotkeys.Create(AFreeObjects: Boolean); begin FOnChange := nil; inherited Create(AFreeObjects); end; function THotkeys.Add(const Shortcuts, Params: array of String; Command: String): THotkey; begin if (Command <> EmptyStr) and (Length(Shortcuts) > 0) then begin Result := THotkey.Create; Result.Shortcuts := CopyArray(Shortcuts); Result.Params := CopyArray(Params); Result.Command := Command; Add(Result); DoOnChange(Result, hopAdd); end else Result := nil; end; function THotkeys.AddIfNotExists(const Shortcuts, Params: array of String; Command: String): THotkey; var i: Integer; begin // Check if the shortcuts aren't already assigned to a different command // or if a different shortcut isn't already assigned to the command. // Also check if the shortucts aren't a partial match to another shortcuts. for i := 0 to Count - 1 do begin if ArrBegins(Items[i].Shortcuts, Shortcuts, True) or (Items[i].Command = Command) then Exit(nil); end; Result := Add(Shortcuts, Params, Command); end; procedure THotkeys.AddIfNotExists(const ShortcutsWithParams: array of String; Command: String); begin AddIfNotExists(ShortcutsWithParams, Command, [], []); end; procedure THotkeys.AddIfNotExists(const ShortcutsWithParams: array of String; Command: String; const OldShortcuts, OldParams: array of String); var s: String; StartIndex: Integer; function GetArray: TDynamicStringArray; var i: Integer; begin Result := nil; for i := StartIndex to High(ShortcutsWithParams) do begin s := ShortcutsWithParams[i]; if s <> '' then AddString(Result, s) else Break; end; StartIndex := i + 1; end; function CheckIfOldOrEmpty: Boolean; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].Command = Command then begin if not (Items[i].SameShortcuts(OldShortcuts) and Items[i].SameParams(OldParams)) then Exit(False); end; Result := True; end; var Shortcuts, Params: array of String; begin // Check if a different shortcut isn't already assigned to the command. // If there is only the old shortcut then allow adding new one. if not CheckIfOldOrEmpty then Exit; StartIndex := Low(ShortcutsWithParams); while True do begin Shortcuts := GetArray; Params := GetArray; if Length(Shortcuts) > 0 then begin // Check if the shortcuts aren't already assigned to a different command. if not Assigned(FindByBeginning(Shortcuts, True)) then Add(Shortcuts, Params, Command); end else Break; end; end; procedure THotkeys.Clear; var i: Integer; begin for i := 0 to Count - 1 do begin DoOnChange(Items[0], hopClear); inherited Delete(0); end; end; procedure THotkeys.Remove(var hotkey: THotkey); begin if Assigned(hotkey) then begin DoOnChange(hotkey, hopRemove); inherited Remove(hotkey); if FreeObjects then hotkey := nil; end; end; procedure THotkeys.UpdateHotkey(Hotkey: THotkey); begin DoOnChange(Hotkey, hopUpdate); end; function THotkeys.Find(const Shortcuts: TDynamicStringArray): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].SameShortcuts(Shortcuts) then Exit(Items[i]); Result := nil; end; function THotkeys.FindByBeginning(const Shortcuts: TDynamicStringArray; BothWays: Boolean): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if ArrBegins(Items[i].Shortcuts, Shortcuts, BothWays) then Exit(Items[i]); Result := nil; end; function THotkeys.FindByCommand(Command: String): THotkey; var i: Integer; begin for i := 0 to Count - 1 do if Items[i].Command = Command then Exit(Items[i]); Result := nil; end; function THotkeys.FindByContents(Hotkey: THotkey): THotkey; var i: Integer; begin for i := 0 to Count - 1 do begin Result := Items[i]; if Result.SameAs(Hotkey) then Exit; end; Result := nil; end; procedure THotkeys.DoOnChange(hotkey: THotkey; operation: THotkeyOperation); begin if Assigned(FOnChange) then FOnChange(hotkey, operation); end; { THMForm } constructor THMForm.Create(AName: String); begin FFreeNotifier := nil; inherited; Controls := THMControls.Create(True); FActionLists := TActionLists.Create(False); end; destructor THMForm.Destroy; begin inherited; Controls.Free; FActionLists.Free; FFreeNotifier.Free; end; procedure THMForm.RegisterActionList(ActionList: TActionList); var i: Integer; begin if FActionLists.IndexOf(ActionList) < 0 then begin FActionLists.Add(ActionList); Hotkeys.OnChange := @OnHotkeyEvent; if not Assigned(FFreeNotifier) then begin FFreeNotifier := TFreeNotifier.Create(nil); FFreeNotifier.OnFree := @OnActionListFree; end; ActionList.FreeNotification(FFreeNotifier); // Initialize actionlist with shortcuts. for i := 0 to hotkeys.Count - 1 do SetActionShortcut(hotkeys[i], False); end; end; procedure THMForm.UnregisterActionList(ActionList: TActionList); begin if FActionLists.Remove(ActionList) >= 0 then ActionList.RemoveFreeNotification(FFreeNotifier); end; function THMForm.GetActionByCommand(ActionList: TActionList; Command: String): TAction; var action: TContainedAction; begin action := ActionList.ActionByName('act' + Copy(Command, 4, Length(Command) - 3)); if action is TAction then Result := action as TAction else Result := nil; end; procedure THMForm.OnActionListFree(Sender: TObject); begin if Sender is TActionList then UnregisterActionList(Sender as TActionList); end; procedure THMForm.OnHotkeyEvent(hotkey: THotkey; operation: THotkeyOperation); begin case operation of hopAdd: SetActionShortcut(hotkey, False); hopRemove: RemoveActionShortcut(hotkey, True); hopClear: RemoveActionShortcut(hotkey, False); hopUpdate: SetActionShortcut(hotkey, True); end; end; procedure THMForm.RemoveActionShortcut(hotkey: THotkey; AssignNextShortcut: Boolean); var action: TAction; i, j: Integer; shortcut, newShortcut: TShortCut; begin shortcut := TextToShortCutEx(hotkey.Shortcuts[0]); for i := 0 to FActionLists.Count - 1 do begin action := GetActionByCommand(FActionLists[i], hotkey.Command); if Assigned(action) then begin if action.Shortcut = shortcut then begin newShortcut := VK_UNKNOWN; if AssignNextShortcut then begin // Search for another possible hotkey assigned for the same command. for j := 0 to hotkeys.Count - 1 do if (hotkeys[j].Command = hotkey.Command) and (hotkeys[j] <> hotkey) then begin newShortcut := TextToShortCutEx(hotkeys[j].Shortcuts[0]); Break; end; end; action.ShortCut := newShortcut; end; end; end; end; procedure THMForm.SetActionShortcut(hotkey: THotkey; OverridePrevious: Boolean); var action: TAction; i: Integer; shortcut: TShortCut; begin shortcut := TextToShortCutEx(hotkey.Shortcuts[0]); for i := 0 to FActionLists.Count - 1 do begin action := GetActionByCommand(FActionLists[i], hotkey.Command); if Assigned(action) then begin if OverridePrevious or (action.Shortcut = VK_UNKNOWN) then action.ShortCut := shortcut; end; end; end; { THMBaseObject } constructor THMBaseObject.Create(AName: String); begin FName := AName; FHotkeys := THotkeys.Create(True); FObjects := TFPObjectList.Create(True); end; destructor THMBaseObject.Destroy; begin inherited Destroy; FHotkeys.Free; FObjects.Free; end; function THMBaseObject.Add(AInstanceInfo: InstanceInfoClass): Integer; begin Result := FObjects.Add(AInstanceInfo); end; procedure THMBaseObject.Delete(AInstance: InstanceClass); var i: Integer; begin for i := 0 to FObjects.Count - 1 do if InstanceInfoClass(FObjects[i]).Instance = AInstance then begin FObjects.Delete(i); Exit; end; end; function THMBaseObject.Find(AInstance: InstanceClass): InstanceInfoClass; var i: Integer; begin for i := 0 to FObjects.Count - 1 do begin if InstanceInfoClass(FObjects[i]).Instance = AInstance then Exit(InstanceInfoClass(FObjects[i])); end; Result := nil; end; { THMControls } procedure THMControls.Delete(AName: String); var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then begin Delete(i); Exit; end; end; function THMControls.Find(AName: String): THMControl; var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then Exit(Items[i]); Result := nil; end; function THMControls.Find(AControl: TWinControl): THMControl; var i: Integer; begin for i := 0 to Count - 1 do begin if Assigned(Items[i].Find(AControl)) then Exit(Items[i]); end; Result := nil; end; function THMControls.FindOrCreate(AName: String): THMControl; begin Result := Find(AName); if not Assigned(Result) then begin Result := THMControl.Create(AName); Add(Result); end; end; { THMForms } procedure THMForms.Delete(AName: String); var i: Integer; begin for i := 0 to Count - 1 do if SameText(Items[i].Name, AName) then begin Delete(i); Exit; end; end; function THMForms.Find(AName: String): THMForm; var i: Integer; begin for i := 0 to Count - 1 do begin if SameText(Items[i].Name, AName) then Exit(Items[i]); end; Result := nil; end; function THMForms.Find(AForm: TCustomForm): THMForm; var i: Integer; begin for i := 0 to Count - 1 do begin if Assigned(Items[i].Find(AForm)) then Exit(Items[i]); end; Result := nil; end; function THMForms.FindOrCreate(AName: String): THMForm; begin Result := Find(AName); if not Assigned(Result) then begin Result := THMForm.Create(AName); Add(Result); end; end; { THotKeyManager } constructor THotKeyManager.Create; begin FForms := THMForms.Create(True); FSequenceStep := 0; end; destructor THotKeyManager.Destroy; begin inherited Destroy; FForms.Free; end; procedure THotKeyManager.Save(FileName: String); var Config: TXmlConfig = nil; begin try Config := TXmlConfig.Create(FileName, True); Config.SetAttr(Config.RootNode, 'DCVersion', dcVersion); Save(Config, Config.RootNode); Config.Save; finally Config.Free; end; end; procedure THotKeyManager.Load(FileName: String); var Config: TXmlConfig = nil; NotAnXML: Boolean = False; begin try Config := TXmlConfig.Create(FileName); try if Config.Load then Load(Config, Config.RootNode); finally Config.Free; end; except on EXMLReadError do NotAnXML := True; end; if NotAnXML then begin LoadIni(FileName); // Immediately save as xml so that configuration isn't lost. if mbRenameFile(FileName, FileName + '.ini.obsolete') then Save(FileName); end; end; procedure THotKeyManager.Save(Config: TXmlConfig; Root: TXmlNode); var SavedHotkeys: THotkeys; procedure SaveHotkeys(Form: THMForm; Hotkeys: THotkeys; ControlIndex: Integer; Node: TXmlNode); var i, j: Integer; HotkeyNode, ControlNode: TXmlNode; Control: THMControl; procedure AddControl(AName: String); begin ControlNode := Config.AddNode(HotkeyNode, 'Control'); Config.SetContent(ControlNode, AName); end; begin for i := 0 to Hotkeys.Count - 1 do begin // Save Form's hotkeys and hotkeys which have not been saved yet. if (ControlIndex < 0) or (not Assigned(SavedHotkeys.FindByContents(Hotkeys[i]))) then begin HotkeyNode := Config.AddNode(Node, 'Hotkey'); for j := Low(Hotkeys[i].Shortcuts) to High(Hotkeys[i].Shortcuts) do Config.AddValue(HotkeyNode, 'Shortcut', Hotkeys[i].Shortcuts[j]); Config.AddValue(HotkeyNode, 'Command', Hotkeys[i].Command); for j := Low(Hotkeys[i].Params) to High(Hotkeys[i].Params) do Config.AddValue(HotkeyNode, 'Param', Hotkeys[i].Params[j]); if ControlIndex >= 0 then AddControl(Form.Controls[ControlIndex].Name); // Search all successive controls for the same hotkey. for j := Succ(ControlIndex) to Form.Controls.Count - 1 do begin Control := Form.Controls[j]; if Assigned(Control.Hotkeys.FindByContents(Hotkeys[i])) then AddControl(Control.Name); end; SavedHotkeys.Add(Hotkeys[i]); end; end; end; var i, j: Integer; FormNode: TXmlNode; Form: THMForm; begin Root := Config.FindNode(Root, 'Hotkeys', True); Config.ClearNode(Root); Config.SetAttr(Root, 'Version', hkVersion); SavedHotkeys := THotkeys.Create(False); try for i := 0 to FForms.Count - 1 do begin Form := FForms[i]; FormNode := Config.AddNode(Root, 'Form'); Config.SetAttr(FormNode, 'Name', Form.Name); SaveHotkeys(Form, Form.Hotkeys, -1, FormNode); for j := 0 to Form.Controls.Count - 1 do SaveHotkeys(Form, Form.Controls[j].Hotkeys, j, FormNode); end; finally SavedHotkeys.Free; end; end; procedure THotKeyManager.Load(Config: TXmlConfig; Root: TXmlNode); var Form: THMForm; procedure AddIfNotEmpty(var Arr: TDynamicStringArray; const Value: String); begin if Value <> '' then AddString(Arr, Value); end; procedure LoadHotkey(FormName: String; Hotkeys: THotkeys; Node: TXmlNode); const RenamedCommandsMain: array [0..1] of record OldName, NewName: String; SinceVersion: Integer end = ( (OldName: 'cm_RemoveTab'; NewName: 'cm_CloseTab'; SinceVersion: 14), (OldName: 'cm_RemoveAllTabs'; NewName: 'cm_CloseAllTabs'; SinceVersion: 14) ); var Shortcut, Command, Param: String; Shortcuts: array of String = nil; Params: array of String = nil; Controls: array of String = nil; HMControl: THMControl; i: Integer; begin // These checks for version may be removed after 0.5.5 release because // the XML format for hotkeys has only been added in development version 0.5.5. // Only Command needs to be retrieved here. if FVersion <= 1 then Command := Config.GetAttr(Node, 'Command', '') else Command := Config.GetValue(Node, 'Command', ''); // Leave only this or move this to the loop "while Assigned(Node) do" below if FVersion <= 1 then Param := Config.GetAttr(Node, 'Params', '') else if FVersion < 9 then Param := Config.GetValue(Node, 'Params', ''); if FVersion < 10 then begin Shortcut := Config.GetAttr(Node, 'Key', ''); if Shortcut <> '' then begin Shortcut := NormalizeModifiers(Shortcut); AddIfNotEmpty(Shortcuts, Shortcut); end; end; if (FVersion < 9) then AddIfNotEmpty(Params, Param); // Up to here may be deleted after 0.5.5 release. Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('Shortcut') = 0 then AddIfNotEmpty(Shortcuts, NormalizeModifiers(Config.GetContent(Node))) else if Node.CompareName('Control') = 0 then AddIfNotEmpty(Controls, Config.GetContent(Node)) else if Node.CompareName('Param') = 0 then AddIfNotEmpty(Params, Config.GetContent(Node)); Node := Node.NextSibling; end; if Command <> EmptyStr then begin // Rename commands that have changed names. if FormName = 'Main' then begin for i := Low(RenamedCommandsMain) to High(RenamedCommandsMain) do begin if (FVersion <= RenamedCommandsMain[i].SinceVersion) and (Command = RenamedCommandsMain[i].OldName) then Command := RenamedCommandsMain[i].NewName; end; end; if Length(Shortcuts) > 0 then begin if Length(Controls) = 0 then begin // This "if" block may also be deleted after 0.5.5 release. if (FVersion <= 3) and IsShortcutConflictingWithOS(Shortcuts[0]) then begin HMControl := Form.Controls.FindOrCreate('Files Panel'); HMControl.Hotkeys.AddIfNotExists(Shortcuts, Params, Command); end else Hotkeys.Add(Shortcuts, Params, Command); // Leave only this end else begin for i := Low(Controls) to High(Controls) do begin HMControl := Form.Controls.FindOrCreate(Controls[i]); HMControl.Hotkeys.Add(Shortcuts, Params, Command); end; end; end; end; end; var FormNode, HotkeyNode: TXmlNode; AName: String; begin ClearAllHotkeys; Root := Config.FindNode(Root, 'Hotkeys'); if Assigned(Root) then begin FVersion := Config.GetAttr(Root, 'Version', hkVersion); FormNode := Root.FirstChild; while Assigned(FormNode) do begin if (FormNode.CompareName('Form') = 0) and (Config.TryGetAttr(FormNode, 'Name', AName)) and (AName <> EmptyStr) then begin Form := FForms.FindOrCreate(AName); HotkeyNode := FormNode.FirstChild; while Assigned(HotkeyNode) do begin if HotkeyNode.CompareName('Hotkey') = 0 then LoadHotkey(Form.Name, Form.Hotkeys, HotkeyNode); HotkeyNode := HotkeyNode.NextSibling; end; end; FormNode := FormNode.NextSibling; end; end; end; procedure THotKeyManager.LoadIni(FileName: String); var st: TStringList; ini: TIniFileEx; i, j: Integer; section: String; shortCut: String; hotkeys: THotkeys; form: THMForm; control: THMControl; Command, Param, FormName, ControlName: String; Params: array of String = nil; procedure RemoveFrmPrexif(var s: String); begin if SameText(Copy(s, 1, 3), 'Frm') then Delete(s, 1, 3); end; begin ClearAllHotkeys; st := TStringList.Create; ini := TIniFileEx.Create(FileName); ini.ReadSections(st); for i := 0 to st.Count - 1 do begin section := st[i]; shortCut := NormalizeModifiers(section); if shortCut <> '' then begin j := 0; while ini.ValueExists(section, 'Command' + IntToStr(j)) do begin Command := ini.ReadString(section, 'Command' + IntToStr(j), ''); Param := ini.ReadString(section, 'Param' + IntToStr(j), ''); ControlName := ini.ReadString(section, 'Object' + IntToStr(j), ''); FormName := ini.ReadString(section, 'Form' + IntToStr(j), ''); RemoveFrmPrexif(FormName); RemoveFrmPrexif(ControlName); form := FForms.FindOrCreate(FormName); if IsShortcutConflictingWithOS(shortCut) then ControlName := 'Files Panel'; // Old config had FormName=ControlName for main form. if SameText(FormName, ControlName) then begin hotkeys := form.Hotkeys; end else begin control := form.Controls.FindOrCreate(ControlName); hotkeys := control.Hotkeys; end; if Param <> '' then begin SetLength(Params, 1); Params[0] := Param; end else Params := nil; hotkeys.Add([shortcut], Params, Command); j := j + 1; end; end; end; FreeAndNil(st); FreeAndNil(ini); end; function THotKeyManager.IsShortcutConflictingWithOS(Shortcut: String): Boolean; const ConflictingShortcuts: array [0..27] of String = (SmkcBkSp, // Delete previous character SmkcDel, // Delete next character SmkcLeft, // Move cursor left SmkcRight, // Move cursor right SmkcSpace, // Space SmkcWin, // Context menu SmkcShift + 'F10', // Context menu SmkcShift + SmkcDel, // Cut text SmkcShift + SmkcIns, // Paste text SmkcShift + SmkcHome, // Select to beginning SmkcShift + SmkcEnd, // Select to end SmkcShift + SmkcLeft, // Select previous character SmkcShift + SmkcRight, // Select next character SmkcCtrl + 'A', // Select all SmkcCtrl + 'C', // Copy text SmkcCtrl + 'V', // Paste text SmkcCtrl + 'X', // Cut text SmkcCtrl + 'Z', // Undo SmkcCtrl + SmkcBkSp, // Delete previous word SmkcCtrl + SmkcDel, // Delete next word SmkcCtrl + SmkcIns, // Copy text SmkcCtrl + SmkcHome, // Move to beginning SmkcCtrl + SmkcEnd, // Move to end SmkcCtrl + SmkcLeft, // Move to beginning of word SmkcCtrl + SmkcRight, // Move to end of word SmkcCtrl + SmkcShift + 'Z', // Redo SmkcCtrl + SmkcShift + SmkcLeft, // Select to beginning of word SmkcCtrl + SmkcShift + SmkcRight); // Select to end of word var i: Integer; begin for i := Low(ConflictingShortcuts) to High(ConflictingShortcuts) do if Shortcut = ConflictingShortcuts[i] then Exit(True); Result := False; end; function THotKeyManager.Register(AForm: TCustomForm; AFormName: String): THMForm; var formInstance: THMFormInstance; begin Result := RegisterForm(AFormName); formInstance := Result.Find(AForm); if not Assigned(formInstance) then begin formInstance := THMFormInstance.Create; formInstance.Instance := AForm; formInstance.KeyDownProc := AForm.OnKeyDown; Result.Add(formInstance); AForm.OnKeyDown := @KeyDownHandler; AForm.KeyPreview := True; end; end; function THotKeyManager.Register(AControl: TWinControl; AControlName: String): THMControl; var ParentForm: TCustomForm; form: THMForm; controlInstance: THMControlInstance; begin ParentForm := GetParentForm(AControl); if Assigned(ParentForm) then begin form := FForms.Find(ParentForm); if not Assigned(form) then begin DCDebug('HotMan: Failed registering ' + AControlName + ': Form ' + ParentForm.ClassName + ':' + ParentForm.Name + ' not registered.'); Exit(nil); end; Result := form.Controls.Find(AControlName); if not Assigned(Result) then begin Result := THMControl.Create(AControlName); form.Controls.Add(Result); end; controlInstance := Result.Find(AControl); if not Assigned(controlInstance) then begin controlInstance := THMControlInstance.Create; controlInstance.Instance := AControl; controlInstance.KeyDownProc := AControl.OnKeyDown; Result.Add(controlInstance); //AControl.OnKeyDown := @KeyDownHandler; end; end; end; function THotKeyManager.RegisterForm(AFormName: String): THMForm; begin Result := FForms.Find(AFormName); if not Assigned(Result) then begin Result := THMForm.Create(AFormName); FForms.Add(Result); end; end; function THotKeyManager.RegisterControl(AFormName: String; AControlName: String): THMControl; var form: THMForm; begin form := RegisterForm(AFormName); Result := form.Controls.Find(AControlName); if not Assigned(Result) then begin Result := THMControl.Create(AControlName); form.Controls.Add(Result); end; end; procedure THotKeyManager.UnRegister(AForm: TCustomForm); var form: THMForm; formInstance: THMFormInstance; begin form := FForms.Find(AForm); if Assigned(form) then begin formInstance := form.Find(AForm); AForm.OnKeyDown := formInstance.KeyDownProc; form.Delete(AForm); end; end; procedure THotKeyManager.UnRegister(AControl: TWinControl); var ParentForm: TCustomForm; form: THMForm; control: THMControl; i: Integer; begin ParentForm := GetParentForm(AControl); if Assigned(ParentForm) then begin form := FForms.Find(ParentForm); if Assigned(form) then begin control := form.Controls.Find(AControl); if Assigned(control) then control.Delete(AControl); end; end else begin // control lost its parent, find through all forms for i := 0 to FForms.Count - 1 do begin form := FForms[i]; control := form.Controls.Find(AControl); if Assigned(control) then control.Delete(AControl); end; end; end; function THotKeyManager.HotKeyEvent(Form: TCustomForm; Hotkeys: THotkeys): Boolean; var hotkey: THotkey; FormCommands: IFormCommands; begin hotkey := Hotkeys.FindByBeginning(FShortcutsSequence, False); if Assigned(hotkey) then begin if High(hotkey.Shortcuts) > FSequenceStep then begin // There are more shortcuts to match. FLastShortcutTime := SysUtils.Now; Inc(FSequenceStep); Result := True; end else begin FSequenceStep := 0; FormCommands := Form as IFormCommands; Result := Assigned(FormCommands) and (FormCommands.ExecuteCommand(hotkey.Command, hotkey.Params) = cfrSuccess); end; end else Result := False; end; procedure THotKeyManager.ClearAllHotkeys; var i, j: Integer; Form: THMForm; begin for i := 0 to FForms.Count - 1 do begin Form := FForms[i]; Form.Hotkeys.Clear; for j := 0 to Form.Controls.Count - 1 do Form.Controls[j].Hotkeys.Clear; end; end; procedure THotKeyManager.KeyDownHandler(Sender: TObject; var Key: Word; Shift: TShiftState); //------------------------------------------------------ var i: Integer; Shortcut: TShortCut; TextShortcut: String; Form: TCustomForm; Control: TWinControl; HMForm: THMForm; HMControl: THMControl; HMFormInstance: THMFormInstance; HMControlInstance: THMControlInstance; ShiftEx: TShiftState; function OrigKeyDown(AKeyDownProc: TKeyEvent): Boolean; begin if Assigned(AKeyDownProc) then begin AKeyDownProc(Sender, Key, ShiftEx); Result := True; end else Result := False; end; begin Form := GetParentForm(Sender as TWinControl); HMForm := FForms.Find(Form); if not Assigned(HMForm) then Exit; ShiftEx := GetKeyShiftStateEx; Shortcut := KeyToShortCutEx(Key, ShiftEx); TextShortcut := ShortCutToTextEx(Shortcut); Control := Form.ActiveControl; // Don't execute hotkeys that coincide with key typing actions. if (TextShortcut <> '') and ((FSequenceStep > 0) or (not (((GetKeyTypingAction(ShiftEx) <> ktaNone) {$IFDEF MSWINDOWS} // Don't execute hotkeys with Ctrl+Alt = AltGr on Windows. or (HasKeyboardAltGrKey and (ShiftEx * KeyModifiersShortcutNoText = [ssCtrl, ssAlt]) and (gKeyTyping[ktmNone] <> ktaNone)) // Don't execute hotkeys with AltGr on Windows. or (ShiftEx = [ssAltGr]) {$ENDIF} ) and (Key in [VK_0..VK_9, VK_A..VK_Z])))) then begin // If too much time has passed reset sequence. if (FSequenceStep > 0) and (DateTimeToTimeStamp(SysUtils.Now - FLastShortcutTime).Time > MaxShortcutSequenceInterval) then FSequenceStep := 0; // Add shortcut to sequence. if Length(FShortcutsSequence) <> FSequenceStep + 1 then SetLength(FShortcutsSequence, FSequenceStep + 1); FShortcutsSequence[FSequenceStep] := TextShortcut; if Assigned(Control) then begin for i := 0 to HMForm.Controls.Count - 1 do begin HMControl := HMForm.Controls[i]; HMControlInstance := HMControl.Find(Control); if Assigned(HMControlInstance) then begin if HotKeyEvent(Form, HMControl.Hotkeys) then begin Key := VK_UNKNOWN; Exit; end else Break; end; end; end; // Hotkey for the whole form if (Key <> VK_UNKNOWN) and HotKeyEvent(Form, HMForm.Hotkeys) then begin Key := VK_UNKNOWN; Exit; end; FSequenceStep := 0; // Hotkey was not matched - reset sequence. end; if Key <> VK_UNKNOWN then begin HMFormInstance := HMForm.Find(Form); OrigKeyDown(HMFormInstance.KeyDownProc); end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackinfodlg.lfm����������������������������������������������������������������0000644�0001750�0000144�00000020524�12023046500�016426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmPackInfoDlg: TfrmPackInfoDlg Left = 525 Height = 400 Top = 83 Width = 284 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Properties of packed file' ClientHeight = 400 ClientWidth = 284 Position = poScreenCenter LCLVersion = '1.1' object pnlInfo: TPanel Left = 0 Height = 313 Top = 0 Width = 284 Align = alClient AutoSize = True BevelOuter = bvNone ClientHeight = 313 ClientWidth = 284 TabOrder = 0 object pnlInfoFile: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfo AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 38 Top = 0 Width = 254 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 15 BorderSpacing.Right = 15 BevelOuter = bvNone ClientHeight = 38 ClientWidth = 254 TabOrder = 1 object lblPackedFile: TLabel AnchorSideLeft.Control = pnlInfoFile AnchorSideTop.Control = edtPackedFile AnchorSideTop.Side = asrCenter Left = 0 Height = 18 Top = 15 Width = 28 BorderSpacing.Top = 10 Caption = 'File:' FocusControl = edtPackedFile ParentColor = False end object edtPackedFile: TEdit AnchorSideLeft.Control = lblPackedFile AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = pnlInfoFile AnchorSideRight.Control = pnlInfoFile AnchorSideRight.Side = asrBottom Left = 43 Height = 28 Top = 10 Width = 211 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 15 BorderSpacing.Top = 10 Color = clBtnFace Constraints.MinWidth = 200 Font.Color = clBtnText ParentFont = False ReadOnly = True TabStop = False TabOrder = 0 end end object Bevel1: TBevel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = pnlInfoFile AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 9 Top = 48 Width = 254 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 15 BorderSpacing.Top = 10 BorderSpacing.Right = 15 Shape = bsTopLine end object pnlInfoProperties: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideTop.Control = Bevel1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = pnlInfo AnchorSideRight.Side = asrBottom Left = 15 Height = 179 Top = 57 Width = 254 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 15 BorderSpacing.Right = 15 BevelOuter = bvNone ChildSizing.HorizontalSpacing = 30 ChildSizing.VerticalSpacing = 5 ChildSizing.EnlargeHorizontal = crsHomogenousChildResize ChildSizing.EnlargeVertical = crsHomogenousChildResize ChildSizing.ShrinkHorizontal = crsHomogenousChildResize ChildSizing.ShrinkVertical = crsHomogenousChildResize ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 179 ClientWidth = 254 TabOrder = 0 object lblPacker: TLabel Left = 0 Height = 18 Top = 0 Width = 173 Caption = 'Packer:' ParentColor = False end object lblPackedPacker: TLabel Left = 203 Height = 18 Top = 0 Width = 51 ParentColor = False ShowAccelChar = False end object lblOriginalSize: TLabel Left = 0 Height = 18 Top = 23 Width = 173 Caption = 'Original size:' ParentColor = False end object lblPackedOrgSize: TLabel Left = 203 Height = 18 Top = 23 Width = 51 ParentColor = False ShowAccelChar = False end object lblPackedSize: TLabel Left = 0 Height = 18 Top = 46 Width = 173 Caption = 'Packed size:' ParentColor = False end object lblPackedPackedSize: TLabel Left = 203 Height = 18 Top = 46 Width = 51 ParentColor = False ShowAccelChar = False end object lblCompressionRatio: TLabel Left = 0 Height = 18 Top = 69 Width = 173 Caption = 'Compression ratio:' ParentColor = False end object lblPackedCompression: TLabel Left = 203 Height = 18 Top = 69 Width = 51 ParentColor = False ShowAccelChar = False end object lblMethod: TLabel Left = 0 Height = 18 Top = 92 Width = 173 Caption = 'Method:' ParentColor = False end object lblPackedMethod: TLabel Left = 203 Height = 18 Top = 92 Width = 51 ParentColor = False ShowAccelChar = False end object lblDate: TLabel Left = 0 Height = 18 Top = 115 Width = 173 Caption = 'Date:' ParentColor = False end object lblPackedDate: TLabel Left = 203 Height = 18 Top = 115 Width = 51 ParentColor = False ShowAccelChar = False end object lblTime: TLabel Left = 0 Height = 18 Top = 138 Width = 173 Caption = 'Time:' ParentColor = False end object lblPackedTime: TLabel Left = 203 Height = 18 Top = 138 Width = 51 ParentColor = False ShowAccelChar = False end object lblAttributes: TLabel Left = 0 Height = 18 Top = 161 Width = 173 Caption = 'Attributes:' ParentColor = False end object lblPackedAttr: TLabel Left = 203 Height = 18 Top = 161 Width = 51 ParentColor = False ShowAccelChar = False end object Bevel2: TBevel AnchorSideLeft.Control = pnlInfoProperties AnchorSideRight.Control = pnlInfoProperties AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblDate Left = 0 Height = 4 Top = 106 Width = 254 Anchors = [akLeft, akRight, akBottom] BorderSpacing.Bottom = 4 Shape = bsBottomLine end end end object pnlButtons: TPanel Left = 0 Height = 72 Top = 328 Width = 284 Align = alBottom AutoSize = True BorderSpacing.Top = 15 BevelOuter = bvNone ClientHeight = 72 ClientWidth = 284 TabOrder = 1 object btnClose: TButton AnchorSideLeft.Control = pnlButtons AnchorSideTop.Control = pnlButtons AnchorSideBottom.Control = btnUnpackAndExec AnchorSideBottom.Side = asrBottom Left = 10 Height = 31 Top = 0 Width = 48 Anchors = [akTop, akLeft, akBottom] AutoSize = True BorderSpacing.Left = 10 Cancel = True Caption = '&Close' Default = True ModalResult = 2 OnKeyUp = btnCloseKeyUp TabOrder = 0 end object btnUnpackAndExec: TButton AnchorSideLeft.Control = btnClose AnchorSideLeft.Side = asrBottom AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnUnpackAllAndExec Left = 62 Height = 31 Top = 0 Width = 212 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 4 BorderSpacing.Right = 10 BorderSpacing.Bottom = 4 Caption = '&Unpack and execute' ModalResult = 1 TabOrder = 1 end object btnUnpackAllAndExec: TButton AnchorSideLeft.Control = pnlButtons AnchorSideRight.Control = pnlButtons AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = pnlButtons AnchorSideBottom.Side = asrBottom Left = 10 Height = 31 Top = 35 Width = 264 Anchors = [akLeft, akRight, akBottom] AutoSize = True BorderSpacing.Left = 10 BorderSpacing.Right = 10 BorderSpacing.Bottom = 6 Caption = 'Unpack &all and execute' ModalResult = 8 TabOrder = 2 end end end ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uShowMsg.pas��������������������������������������������������������������������0000644�0001750�0000144�00000053233�12612505011�015564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Seksi Commander ---------------------------- Implementing of Showing messages with localization Licence : GNU GPL v 2.0 Author : radek.cervinka@centrum.cz contributors: Koblov Alexander (Alexx2000@mail.ru) } unit uShowMsg; {$mode delphi}{$H+} interface uses Forms, Classes, DCBasicTypes; type TMyMsgResult=(mmrOK, mmrNo, mmrYes, mmrCancel, mmrNone, mmrAppend, mmrResume, mmrCopyInto, mmrCopyIntoAll, mmrOverwrite, mmrOverwriteAll, mmrOverwriteOlder, mmrOverwriteSmaller, mmrOverwriteLarger, mmrAutoRenameSource, mmrRenameSource, mmrSkip, mmrSkipAll, mmrIgnoreAll, mmrAll, mmrRetry, mmrAbort); TMyMsgButton=(msmbOK, msmbNo, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbResume, msmbCopyInto, msmbCopyIntoAll, msmbOverwrite, msmbOverwriteAll, msmbOverwriteOlder, msmbOverwriteSmaller, msmbOverwriteLarger, msmbAutoRenameSource, msmbRenameSource, msmbSkip, msmbSkipAll, msmbIgnoreAll, msmbAll, msmbRetry, msmbAbort); { TDialogMainThread } TDialogMainThread = class private procedure SyncMsgBox; procedure SyncMessageBox; procedure SyncInputQuery; procedure SyncMessageChoiceBox; protected FThread: TThread; FCaption, FMessage, FValue: String; FMaskInput: Boolean; FFlags: Longint; FButtons: array of TMyMsgButton; FButDefault, FButEscape: TMyMsgButton; FInputQueryResult: Boolean; FMsgBoxResult: TMyMsgResult; FMessageBoxResult: LongInt; FChoices: TDynamicStringArray; public constructor Create(AThread: TThread); destructor Destroy;override; function ShowMsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape:TMyMsgButton) : TMyMsgResult; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; function ShowMessageChoiceBox(const Message: String; Buttons: TDynamicStringArray): Integer; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String) : Boolean; end; function msgYesNo(const sMsg: String): Boolean; overload; function msgYesNo(Thread: TThread; const sMsg: String): Boolean; overload; function msgYesNoCancel(const sMsg: String): TMyMsgResult; overload; function msgYesNoCancel(Thread: TThread; const sMsg: String): TMyMsgResult; overload; procedure msgOK(const sMsg: String); overload; procedure msgOK(Thread: TThread; const sMsg: String); overload; procedure msgWarning(const sMsg: String); overload; procedure msgWarning(Thread: TThread; const sMsg: String); overload; procedure msgError(const sMsg: String); overload; procedure msgError(Thread: TThread; const sMsg: String); overload; function MsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton): TMyMsgResult; overload; function MsgBox(Thread: TThread; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton): TMyMsgResult; overload; function MsgTest:TMyMsgResult; function MsgChoiceBox(const Message: String; Buttons: TDynamicStringArray): Integer; overload; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray): Integer; overload; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; overload; function ShowMessageBox(Thread: TThread; const AText, ACaption: String; Flags: LongInt): LongInt; overload; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; function ShowInputQuery(const ACaption, APrompt: String; var Value: String): Boolean; overload; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; var Value: String): Boolean; overload; function ShowInputComboBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String) : Boolean; function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean; procedure msgLoadLng; implementation uses LCLIntf, SysUtils, StdCtrls, Graphics, Math, typinfo, Menus, fMsg, uLng, Buttons, Controls, uLog, uGlobs, uDebug; const cMsgName = 'Double Commander'; var cLngButton: array[TMyMsgButton] of String; { TDialogMainThread } procedure TDialogMainThread.SyncMsgBox; begin FMsgBoxResult:= MsgBox(FMessage, FButtons, FButDefault, FButEscape); end; procedure TDialogMainThread.SyncMessageBox; begin FMessageBoxResult:= MessageBoxFunction(PAnsiChar(FMessage), PAnsiChar(FCaption), FFlags); end; procedure TDialogMainThread.SyncInputQuery; begin FInputQueryResult := LCLIntf.RequestInput(FCaption, FMessage, FMaskInput, FValue); end; procedure TDialogMainThread.SyncMessageChoiceBox; begin FMessageBoxResult:= MsgChoiceBox(FMessage, FChoices); end; constructor TDialogMainThread.Create(AThread : TThread); begin FThread:= AThread; end; destructor TDialogMainThread.Destroy; begin FButtons:= nil; inherited Destroy; end; function TDialogMainThread.ShowMsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton) : TMyMsgResult; var I : Integer; begin FMessage := sMsg; SetLength(FButtons, Length(Buttons)); for I := Low(Buttons) to High(Buttons) do FButtons[I] := Buttons[I]; FButDefault := ButDefault; FButEscape := ButEscape; TThread.Synchronize(FThread, SyncMsgBox); Result := FMsgBoxResult; end; function TDialogMainThread.ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; begin FCaption:= ACaption; FMessage:= AText; FFlags:= Flags; TThread.Synchronize(FThread, SyncMessageBox); Result:= FMessageBoxResult; end; function TDialogMainThread.ShowMessageChoiceBox(const Message: String; Buttons: TDynamicStringArray): Integer; begin FMessage:= Message; FChoices:= Buttons; TThread.Synchronize(FThread, SyncMessageChoiceBox); Result:= FMessageBoxResult; end; function TDialogMainThread.ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; begin FCaption:= ACaption; FMessage:= APrompt; FMaskInput:= MaskInput; FValue:= Value; TThread.Synchronize(FThread, SyncInputQuery); Value:= FValue; Result:= FInputQueryResult; end; procedure SetMsgBoxParams(var frmMsg: TfrmMsg; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton); const cButtonCount = 8; cButtonSpace = 8; var iIndex: Integer; iCount: Integer; MenuItem: TMenuItem; CaptionWidth: Integer; More: Boolean = False; MinButtonWidth: Integer; iIndexDefault : Integer = -1; begin Assert(Assigned(frmMsg)); frmMsg.Position:= poScreenCenter; frmMsg.BorderStyle:= bsSingle; frmMsg.BorderIcons:= [biSystemMenu]; frmMsg.Caption:= cMsgName; frmMsg.lblMsg.Caption:= sMsg; // Get default button width with TButton.Create(nil) do begin MinButtonWidth:= GetDefaultWidth; Free; end; // Determine number of buttons iCount:= High(Buttons); if iCount > cButtonCount then begin More:= True; iCount:= cButtonCount - 1; CaptionWidth:= frmMsg.Canvas.TextWidth(rsDlgButtonOther); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; // Calculate minimum button width for iIndex:= Low(Buttons) to iCount do begin CaptionWidth:= frmMsg.Canvas.TextWidth(cLngButton[Buttons[iIndex]]); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; // Add first 9 items as buttons for iIndex:= Low(Buttons) to iCount do begin with TButton.Create(frmMsg) do begin AutoSize:= True; Caption:= cLngButton[Buttons[iIndex]]; Parent:= frmMsg.pnlButtons; Constraints.MinWidth:= MinButtonWidth; Tag:= iIndex; OnClick:= frmMsg.ButtonClick; OnMouseUp:= frmMsg.MouseUpEvent; if Buttons[iIndex] = ButDefault then begin Default:= True; iIndexDefault:=iIndex; end; if Buttons[iIndex] = ButEscape then frmMsg.Escape:= iIndex; end; end; //Once the buttons has been added, let's set the correct "TabOrder" in such way: //1o) The one with the default is "TabOrder=0" //2o) If we press "TAB" key, it keeps moving to the right //Let's determine what should be the "TabOrder" initial value so //1. The default button will have tab order 0 //2. When moving with "tab" key, it will move from left to right //"TabOrder" need to be set *after* all the buttons are there if iIndexDefault<>-1 then begin for iIndex:= 0 to pred(frmMsg.ComponentCount) do begin if frmMsg.Components[iIndex] is TButton then begin with frmMsg.Components[iIndex] as TButton do TabOrder:=(tag+(iCount+1)-iIndexDefault) mod (iCount+1); //Tricky but it does it, no "if", no negative after to check, etc. end; end; end; // More add as popup menu if More then begin // Add button with popup menu with TButton.Create(frmMsg) do begin AutoSize:= True; Caption:= rsDlgButtonOther; Parent:= frmMsg.pnlButtons; Constraints.MinWidth:= MinButtonWidth; OnClick:= frmMsg.ButtonOtherClick; end; // Fill popup menu for iIndex:= cButtonCount to High(Buttons) do begin MenuItem:= TMenuItem.Create(frmMsg.mnuOther); with MenuItem do begin Tag:= iIndex; Caption:= cLngButton[Buttons[iIndex]]; OnClick:= frmMsg.ButtonClick; frmMsg.mnuOther.Items.Add(MenuItem); end; end; end; end; function MsgBox(const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape:TMyMsgButton):TMyMsgResult; var frmMsg:TfrmMsg; begin frmMsg:=TfrmMsg.Create(Application); try SetMsgBoxParams(frmMsg, sMsg, Buttons, ButDefault, ButEscape); frmMsg.ShowModal; if (frmMsg.iSelected)=-1 then Result:=mmrNone else { TODO : not safe code because of direct typecast from one enumeration to another, better to use array lookup } Result:=TMyMsgResult(Buttons[frmMsg.iSelected]); finally frmMsg.Free; end; end; function MsgBox(Thread: TThread; const sMsg: String; const Buttons: array of TMyMsgButton; ButDefault, ButEscape: TMyMsgButton): TMyMsgResult; var DialogMainThread : TDialogMainThread; begin Result := mmrNone; DialogMainThread := TDialogMainThread.Create(Thread); try Result := DialogMainThread.ShowMsgBox(sMsg, Buttons, ButDefault, ButEscape); finally DialogMainThread.Free; end; end; Function MsgTest:TMyMsgResult; begin Result:= MsgBox('test language of msg subsystem'#10'Second line',[msmbOK, msmbNO, msmbYes, msmbCancel, msmbNone, msmbAppend, msmbOverwrite, msmbOverwriteAll],msmbOK, msmbNO); end; function msgYesNo(const sMsg: String):Boolean; begin Result:= MsgBox(nil, sMsg,[msmbYes, msmbNo], msmbYes, msmbNo )= mmrYes; end; function msgYesNo(Thread: TThread; const sMsg: String): Boolean; begin Result:= MsgBox(Thread, sMsg,[msmbYes, msmbNo], msmbYes, msmbNo )= mmrYes; end; function msgYesNoCancel(const sMsg: String):TMyMsgResult; begin Result:= MsgBox(sMsg,[msmbYes, msmbNo, msmbCancel], msmbYes, msmbCancel); end; function msgYesNoCancel(Thread: TThread; const sMsg: String): TMyMsgResult; begin Result:= MsgBox(Thread, sMsg,[msmbYes, msmbNo, msmbCancel], msmbYes, msmbCancel); end; procedure msgOK(const sMsg: String); begin MsgBox(sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgOK(Thread: TThread; const sMsg: String); begin MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgError(const sMsg: String); begin MsgBox(sMsg,[msmbOK],msmbOK, msmbOK); end; procedure msgError(Thread: TThread; const sMsg: String); begin MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK) end; procedure msgWarning(const sMsg: String); begin if gShowWarningMessages then MsgBox(sMsg,[msmbOK],msmbOK, msmbOK) else begin if gLogWindow then // if log window enabled then write error to it logWrite(sMsg, lmtError) else Beep; end; end; procedure msgWarning(Thread: TThread; const sMsg: String); begin if gShowWarningMessages then MsgBox(Thread, sMsg,[msmbOK],msmbOK, msmbOK) else begin if gLogWindow then // if log window enabled then write error to it logWrite(Thread, sMsg, lmtError) else Beep; end; end; function ShowMessageBox(const AText, ACaption: String; Flags: LongInt): LongInt; begin Result:= ShowMessageBox(nil, AText, ACaption, Flags); end; function ShowMessageBox(Thread: TThread; const AText, ACaption: String; Flags: LongInt): LongInt; var DialogMainThread : TDialogMainThread; begin Result:= 0; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowMessageBox(AText, ACaption, Flags); finally DialogMainThread.Free; end; end; function ShowInputQuery(const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; overload; begin Result:= ShowInputQuery(nil, ACaption, APrompt, MaskInput, Value); end; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; MaskInput: Boolean; var Value: String): Boolean; var DialogMainThread : TDialogMainThread; begin Result := False; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowInputQuery(ACaption, APrompt, MaskInput, Value); finally DialogMainThread.Free; end; end; function ShowInputQuery(const ACaption, APrompt: String; var Value: String): Boolean; overload; begin Result:= ShowInputQuery(nil, ACaption, APrompt, False, Value); end; function ShowInputQuery(Thread: TThread; const ACaption, APrompt: String; var Value: String): Boolean; begin Result:= ShowInputQuery(Thread, ACaption, APrompt, False, Value); end; function ShowInputComboBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String) : Boolean; var frmDialog : TForm; lblPrompt : TLabel; cbValue : TComboBox; bbtnOK, bbtnCancel : TBitBtn; begin frmDialog := TForm.CreateNew(nil, 0); with frmDialog do try BorderStyle := bsDialog; Position := poScreenCenter; AutoSize := True; Height := 120; ChildSizing.TopBottomSpacing := 8; ChildSizing.LeftRightSpacing := 8; Caption := sCaption; lblPrompt := TLabel.Create(frmDialog); with lblPrompt do begin Parent := frmDialog; Caption := sPrompt; Top := 6; Left := 6; end; cbValue := TComboBox.Create(frmDialog); with cbValue do begin Parent := frmDialog; Items.Assign(slValueList); Text := sValue; Left := 6; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth := max(280, Screen.Width div 4); end; bbtnCancel := TBitBtn.Create(frmDialog); with bbtnCancel do begin Parent := frmDialog; Kind := bkCancel; Cancel := True; Left := 6; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, cbValue); AnchorSide[akRight].Control := cbValue; AnchorSide[akRight].Side := asrRight; end; bbtnOK := TBitBtn.Create(frmDialog); with bbtnOK do begin Parent := frmDialog; Kind := bkOk; Default := True; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, cbValue); AnchorToNeighbour(akRight, 6, bbtnCancel); end; Result := (ShowModal = mrOK); if Result then begin if slValueList.IndexOf(cbValue.Text) < 0 then slValueList.Add(cbValue.Text); sValue := cbValue.Text; end; finally FreeAndNil(frmDialog); end; // with frmDialog end; function ShowInputListBox(const sCaption, sPrompt : String; slValueList : TStringList; var sValue : String; var SelectedChoice:integer) : Boolean; var frmDialog : TForm; lblPrompt : TLabel; lbValue : TListBox; bbtnOK, bbtnCancel : TBitBtn; begin SelectedChoice:=-1; frmDialog := TForm.CreateNew(nil, 0); with frmDialog do try BorderStyle := bsDialog; Position := poScreenCenter; AutoSize := True; Height := 120; ChildSizing.TopBottomSpacing := 8; ChildSizing.LeftRightSpacing := 8; Caption := sCaption; lblPrompt := TLabel.Create(frmDialog); with lblPrompt do begin Parent := frmDialog; Caption := sPrompt; Top := 6; Left := 6; end; lbValue := TListBox.Create(frmDialog); with lbValue do begin Parent := frmDialog; Height := (slValueList.Count*15)+50; if height=0 then Height:=150 else if height > (screen.Height div 2) then height := (Screen.Height div 2); Items.Assign(slValueList); ItemIndex:=Items.IndexOf(sValue); if (ItemIndex=-1) AND (Items.count>0) then ItemIndex:=0; Left := 6; AnchorToNeighbour(akTop, 6, lblPrompt); Constraints.MinWidth := max(280, Screen.Width div 4); end; bbtnCancel := TBitBtn.Create(frmDialog); with bbtnCancel do begin Parent := frmDialog; Kind := bkCancel; Cancel := True; Left := 6; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, lbValue); AnchorSide[akRight].Control := lbValue; AnchorSide[akRight].Side := asrRight; end; bbtnOK := TBitBtn.Create(frmDialog); with bbtnOK do begin Parent := frmDialog; Kind := bkOk; Default := True; Width:= 90; Anchors := [akTop, akRight]; AnchorToNeighbour(akTop, 18, lbValue); AnchorToNeighbour(akRight, 6, bbtnCancel); end; Result := (ShowModal = mrOK) AND (lbValue.ItemIndex<>-1); if Result then begin sValue:=lbValue.Items.Strings[lbValue.ItemIndex]; SelectedChoice:=lbValue.ItemIndex end; finally FreeAndNil(frmDialog); end; // with frmDialog end; function MsgChoiceBox(const Message: String; Buttons: TDynamicStringArray): Integer; const cButtonSpace = 8; var Index: Integer; frmMsg: TfrmMsg; CaptionWidth: Integer; MinButtonWidth: Integer; begin frmMsg:= TfrmMsg.Create(Application); try frmMsg.BorderStyle:= bsSingle; frmMsg.Position:= poScreenCenter; frmMsg.BorderIcons:= [biSystemMenu]; frmMsg.Caption:= Application.Title; frmMsg.lblMsg.WordWrap:= True; frmMsg.lblMsg.Caption:= Message; frmMsg.Constraints.MaxWidth:= 600; // Get default button width with TButton.Create(nil) do begin MinButtonWidth:= GetDefaultWidth; Free; end; // Calculate minimum button width for Index:= Low(Buttons) to High(Buttons) do begin CaptionWidth:= frmMsg.Canvas.TextWidth(Buttons[Index]); if CaptionWidth >= (MinButtonWidth - cButtonSpace) then MinButtonWidth:= CaptionWidth + cButtonSpace; end; // Add all buttons for Index:= Low(Buttons) to High(Buttons) do begin with TButton.Create(frmMsg) do begin Tag:= Index; AutoSize:= True; Caption:= Buttons[Index]; Parent:= frmMsg.pnlButtons; OnClick:= frmMsg.ButtonClick; Constraints.MinWidth:= MinButtonWidth; end; end; frmMsg.ShowModal; Result:= frmMsg.iSelected; finally frmMsg.Free; end; end; function MsgChoiceBox(Thread: TThread; const Message: String; Buttons: TDynamicStringArray): Integer; var DialogMainThread : TDialogMainThread; begin Result := -1; DialogMainThread:= TDialogMainThread.Create(Thread); try Result:= DialogMainThread.ShowMessageChoiceBox(Message, Buttons); finally DialogMainThread.Free; end; end; procedure msgLoadLng; var I: TMyMsgButton; begin cLngButton[msmbOK] := rsDlgButtonOK; cLngButton[msmbNo] := rsDlgButtonNo; cLngButton[msmbYes] := rsDlgButtonYes; cLngButton[msmbCancel] := rsDlgButtonCancel; cLngButton[msmbNone] := rsDlgButtonNone; cLngButton[msmbAppend] := rsDlgButtonAppend; cLngButton[msmbResume] := rsDlgButtonResume; cLngButton[msmbCopyInto] := rsDlgButtonCopyInto; cLngButton[msmbCopyIntoAll] := rsDlgButtonCopyIntoAll; cLngButton[msmbOverwrite] := rsDlgButtonOverwrite; cLngButton[msmbOverwriteAll] := rsDlgButtonOverwriteAll; cLngButton[msmbOverwriteOlder] := rsDlgButtonOverwriteOlder; cLngButton[msmbOverwriteSmaller] := rsDlgButtonOverwriteSmaller; cLngButton[msmbOverwriteLarger] := rsDlgButtonOverwriteLarger; cLngButton[msmbAutoRenameSource] := rsDlgButtonAutoRenameSource; cLngButton[msmbRenameSource] := rsDlgButtonRename; cLngButton[msmbSkip] := rsDlgButtonSkip; cLngButton[msmbSkipAll] := rsDlgButtonSkipAll; cLngButton[msmbIgnoreAll] := rsDlgButtonIgnoreAll; cLngButton[msmbAll] := rsDlgButtonAll; cLngButton[msmbRetry] := rsDlgButtonRetry; cLngButton[msmbAbort] := rsDlgButtonAbort; for I:= Low(TMyMsgButton) to High(TMyMsgButton) do begin // A reminder in case someone forgots to assign text. if cLngButton[I] = EmptyStr then DCDebug('Warning: MsgBox button ' + GetEnumName(TypeInfo(TMyMsgButton), Integer(I)) + ' caption not set.'); end; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fpackinfodlg.pas����������������������������������������������������������������0000644�0001750�0000144�00000012731�11736421532�016450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Packed file information window Copyright (C) 2008-2010 Koblov Alexander (Alexx2000@mail.ru) 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 fPackInfoDlg; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Forms, StdCtrls, ExtCtrls, Controls, uFile, uArchiveFileSource, uFileSourceExecuteOperation; type { TfrmPackInfoDlg } TfrmPackInfoDlg = class(TForm) Bevel1: TBevel; Bevel2: TBevel; btnClose: TButton; btnUnpackAllAndExec: TButton; btnUnpackAndExec: TButton; lblAttributes: TLabel; lblCompressionRatio: TLabel; lblDate: TLabel; lblMethod: TLabel; lblOriginalSize: TLabel; lblPackedFile: TLabel; lblPackedSize: TLabel; lblPacker: TLabel; lblTime: TLabel; lblPackedAttr: TLabel; lblPackedCompression: TLabel; lblPackedDate: TLabel; edtPackedFile: TEdit; lblPackedMethod: TLabel; lblPackedOrgSize: TLabel; lblPackedPackedSize: TLabel; lblPackedPacker: TLabel; lblPackedTime: TLabel; pnlInfoProperties: TPanel; pnlInfoFile: TPanel; pnlInfo: TPanel; pnlButtons: TPanel; procedure btnCloseKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { private declarations } public constructor Create(TheOwner: TComponent; aFileSource: IArchiveFileSource; aFile: TFile); reintroduce; end; function ShowPackInfoDlg(aFileSource: IArchiveFileSource; aFile: TFile): TFileSourceExecuteOperationResult; implementation {$R *.lfm} uses {$IF DEFINED(LCLGTK2)} LCLType, LCLVersion, {$ENDIF} uFileSourceOperationTypes; function ShowPackInfoDlg(aFileSource: IArchiveFileSource; aFile: TFile): TFileSourceExecuteOperationResult; begin Result:= fseorSuccess; with TfrmPackInfoDlg.Create(Application, aFileSource, aFile) do begin case ShowModal of mrCancel: Result:= fseorCancelled; mrOK: Result:= fseorYourSelf; mrAll: Result:= fseorWithAll; end; Free; end; end; { TfrmPackInfoDlg } procedure TfrmPackInfoDlg.btnCloseKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin {$IF DEFINED(LCLGTK2) and (lcl_fullversion < 093100)} if Key = VK_RETURN then // Lazarus issue 0021483. ControlKeyUp not called after Enter pressed. Application.ControlKeyUp(btnClose, Key, Shift); {$ENDIF} end; constructor TfrmPackInfoDlg.Create(TheOwner: TComponent; aFileSource: IArchiveFileSource; aFile: TFile); var sArcType: String; upperInfoControls: array[0..4] of TControl; i: Integer; foundDividingControl: Boolean = False; begin inherited Create(TheOwner); btnUnpackAndExec.Enabled:= (fsoCopyOut in aFileSource.GetOperationsTypes); btnUnpackAllAndExec.Enabled:= ([fsoList, fsoCopyOut] * aFileSource.GetOperationsTypes = [fsoList, fsoCopyOut]); edtPackedFile.Text:= aFile.FullPath; sArcType:= ExtractFileExt(aFileSource.ArchiveFileName); Delete(sArcType, 1, 1); lblPackedPacker.Caption:= sArcType; lblPackedOrgSize.Visible := not aFile.IsDirectory; lblPackedPackedSize.Visible := not aFile.IsDirectory; lblPackedCompression.Visible := False; lblPackedMethod.Visible := False; if not aFile.IsDirectory then begin lblPackedOrgSize.Caption := IntToStr(aFile.Size); lblPackedPackedSize.Caption := IntToStr(aFile.CompressedSize); if aFile.Size > 0 then begin lblPackedCompression.Caption := IntToStr(100 - (aFile.CompressedSize * 100 div aFile.Size)) + '%'; lblPackedCompression.Visible := True; end; end; // DateTime and Attributes lblPackedDate.Caption:= DateToStr(aFile.ModificationTime); lblPackedTime.Caption:= TimeToStr(aFile.ModificationTime); lblPackedAttr.Caption:= aFile.AttributesProperty.AsString; // Hide labels for not visible values. lblOriginalSize.Visible := lblPackedOrgSize.Visible; lblPackedSize.Visible := lblPackedPackedSize.Visible; lblCompressionRatio.Visible := lblPackedCompression.Visible; lblMethod.Visible := lblPackedMethod.Visible; // Controls from the dividing line to top. upperInfoControls[0] := lblMethod; upperInfoControls[1] := lblCompressionRatio; upperInfoControls[2] := lblPackedSize; upperInfoControls[3] := lblOriginalSize; upperInfoControls[4] := lblPacker; // Make space for the dividing line. for i := Low(upperInfoControls) to High(upperInfoControls) do begin if foundDividingControl then upperInfoControls[i].BorderSpacing.Bottom := 0 else if upperInfoControls[i].Visible then begin foundDividingControl := True; upperInfoControls[i].BorderSpacing.Bottom := 12; end; end; end; end. ���������������������������������������doublecmd-0.7.1/src/uparitercontrols.pas������������������������������������������������������������0000644�0001750�0000144�00000024653�12476416123�017450� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2004 Flavio Etrusco Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. } unit uPariterControls; {$mode objfpc}{$H+} interface uses Controls, SysUtils, Classes, SynEditHighlighter, uSynDiffControls, uDiffONP; const SynSpaceGlyph = Chr($B7); //'·' SynTabGlyph = Chr($BB); //'»' type { TSynDiffHighlighter } TSynDiffHighlighter = class(TSynCustomHighlighter) private fWhitespaceAttribute: TSynHighlighterAttributes; fAddedAttribute: TSynHighlighterAttributes; fRemovedAttribute: TSynHighlighterAttributes; fModifiedAttribute: TSynHighlighterAttributes; fUnmodifiedAttribute: TSynHighlighterAttributes; fDiff: TDiff; fTokens: TStringList; {} fRun: Integer; fTokenPos: Integer; fTokenLen: Integer; fTokenKind: TChangeKind; {} fAddedAttriPointer: TSynHighlighterAttributes; fDefaultAttriPointer: TSynHighlighterAttributes; function GetEditor: TSynDiffEdit; procedure ComputeTokens(const aOldLine, aNewLine: String); protected function GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; override; public constructor Create(aOwner: TSynDiffEdit); reintroduce; overload; constructor Create(aOwner: TComponent); overload; override; destructor Destroy; override; procedure ResetRange; override; procedure SetLine(const aNewValue: String; aLineNumber: Integer); override; procedure UpdateColors; function GetEol: Boolean; override; function GetToken: String; override; procedure GetTokenEx(out TokenStart: PChar; out TokenLength: Integer); override; function GetTokenAttribute: TSynHighlighterAttributes; override; function GetTokenKind: Integer; override; function GetTokenPos: Integer; override; // 0-based procedure Next; override; property Editor: TSynDiffEdit read GetEditor; end; implementation uses LazUTF8, Graphics, UnicodeUtils; { TSynDiffHighlighter } procedure TSynDiffHighlighter.ComputeTokens(const aOldLine, aNewLine: String); var I: Integer; LastToken: String; LastKind: TChangeKind; aOld, aNew: UCS4String; FirstToken: Boolean = True; procedure AddTokenIfNeed(Symbol: UCS4Char; Kind: TChangeKind); begin if (Kind = LastKind) then // Same Kind, no need to change colors LastToken := LastToken + UnicodeToUTF8(Symbol) else begin fTokens.AddObject(LastToken, TObject(PtrInt(LastKind))); LastToken := UnicodeToUTF8(Symbol); LastKind := Kind; end; end; begin // Convert to UCS-4 aOld:= UTF8ToUCS4(aOldLine); aNew:= UTF8ToUCS4(aNewLine); // Compare lines if not Assigned(Editor.OriginalFile) then // Original file fDiff.Execute(PInteger(aNew), PInteger(aOld), Length(aNew), Length(aOld)) else if not Assigned(Editor.ModifiedFile) then // Modified file fDiff.Execute(PInteger(aOld), PInteger(aNew), Length(aOld), Length(aNew)); // Prepare diffs to display LastToken:= EmptyStr; for I := 0 to fDiff.Count - 1 do with fDiff.Compares[I] do begin if not Assigned(Editor.OriginalFile) then // Original file begin // Show changes for original file if Kind <> ckAdd then begin if FirstToken then begin LastKind:= Kind; FirstToken:= False; end; AddTokenIfNeed(int1, Kind); end; end else if not Assigned(Editor.ModifiedFile) then // Modified file begin // Show changes for modified file if Kind <> ckDelete then begin if FirstToken then begin LastKind:= Kind; FirstToken:= False; end; AddTokenIfNeed(int2, Kind); end; end; end; // Add last token fTokens.AddObject(LastToken, TObject(PtrInt(LastKind))); end; constructor TSynDiffHighlighter.Create(aOwner: TComponent); begin Create(aOwner as TSynDiffEdit); end; constructor TSynDiffHighlighter.Create(aOwner: TSynDiffEdit); begin inherited Create(aOwner); fDiff := TDiff.Create(Self); {} fWhitespaceAttribute := TSynHighlighterAttributes.Create('Whitespace'); AddAttribute(fWhitespaceAttribute); {} fAddedAttribute := TSynHighlighterAttributes.Create('Added'); fAddedAttribute.Style := [fsBold]; AddAttribute(fAddedAttribute); {} fRemovedAttribute := TSynHighlighterAttributes.Create('Removed'); fRemovedAttribute.Style := [fsBold]; AddAttribute(fRemovedAttribute); {} fModifiedAttribute := TSynHighlighterAttributes.Create('Modified'); fModifiedAttribute.Style := [fsBold]; AddAttribute(fModifiedAttribute); {} fUnmodifiedAttribute := TSynHighlighterAttributes.Create('Unmodified'); AddAttribute(fUnmodifiedAttribute); {} UpdateColors; SetAttributesOnChange(@DefHighlightChange); fTokens := TStringList.Create; end; destructor TSynDiffHighlighter.Destroy; begin inherited Destroy; fTokens.Free; end; function TSynDiffHighlighter.GetEditor: TSynDiffEdit; begin Result := TSynDiffEdit(inherited Owner); end; function TSynDiffHighlighter.GetDefaultAttribute(Index: Integer): TSynHighlighterAttributes; begin if Index = SYN_ATTR_WHITESPACE then Result := fDefaultAttriPointer else Result := nil; end; function TSynDiffHighlighter.GetEol: Boolean; begin Result := (fTokenLen = 0); end; function TSynDiffHighlighter.GetToken: String; var cChar: Integer; begin Result := fTokens[fRun]; if (Editor.PaintStyle = psForeground) and (fTokenKind <> ckNone) then for cChar := 1 to Length(Result) do if Result[cChar] = #32 then Result[cChar] := SynSpaceGlyph else if Result[cChar] = #9 then Result[cChar] := SynTabGlyph; end; function TSynDiffHighlighter.GetTokenAttribute: TSynHighlighterAttributes; begin case fTokenKind of ckAdd: Result := fAddedAttriPointer; ckModify: Result := fModifiedAttribute; ckDelete: Result := fAddedAttriPointer; else Result := fDefaultAttriPointer; end; end; function TSynDiffHighlighter.GetTokenKind: integer; begin Result := Ord(fTokenKind); end; procedure TSynDiffHighlighter.GetTokenEx(out TokenStart: PChar; out TokenLength: integer); begin TokenLength:= fTokenLen; if TokenLength > 0 then TokenStart:= PChar(fTokens[fRun]) else TokenStart:= nil; end; function TSynDiffHighlighter.GetTokenPos: Integer; begin Result := fTokenPos; end; procedure TSynDiffHighlighter.Next; begin Inc(fRun); if fRun = fTokens.Count then begin fTokenLen := 0; Exit; end; Inc(fTokenPos, fTokenLen); fTokenLen := Length(fTokens[fRun]); fTokenKind := TChangeKind(PtrInt(fTokens.Objects[fRun])); end; procedure TSynDiffHighlighter.ResetRange; begin fDefaultAttriPointer := fWhitespaceAttribute; end; procedure TSynDiffHighlighter.SetLine(const aNewValue: String; aLineNumber: Integer); var vOtherEdit: TSynDiffEdit; vOldLine: String; vNewLine: String; begin fDiff.Clear; fTokens.Clear; fRun := -1; fTokenPos := 0; fTokenLen := 0; if Editor.OriginalFile <> nil then begin fAddedAttriPointer := fAddedAttribute; vOtherEdit := Editor.OriginalFile; end else begin fAddedAttriPointer := fRemovedAttribute; vOtherEdit := Editor.ModifiedFile; end; if TChangeKind(Editor.Lines.Kind[aLineNumber]) = ckModify then fDefaultAttriPointer := fUnmodifiedAttribute else fDefaultAttriPointer := fWhitespaceAttribute; if (vOtherEdit <> nil) and (aLineNumber < vOtherEdit.Lines.Count) then vOldLine := vOtherEdit.Lines[aLineNumber]; vNewLine := aNewValue; if Length(vNewLine) <> 0 then begin if (Length(vOldLine) <> 0) and (TChangeKind(Editor.Lines.Kind[aLineNumber]) = ckModify) then ComputeTokens(vOldLine, vNewLine) else fTokens.Add(vNewLine); end; Next; end; procedure TSynDiffHighlighter.UpdateColors; begin BeginUpdate; try if Editor.PaintStyle = psForeground then begin fAddedAttribute.Foreground := Editor.Colors.Added; fAddedAttribute.Background := clBtnFace; fRemovedAttribute.Foreground := Editor.Colors.Deleted; fRemovedAttribute.Background := clBtnFace; fModifiedAttribute.Foreground := Editor.Colors.Modified; fModifiedAttribute.Background := clBtnFace; fUnmodifiedAttribute.Foreground := clNone; fUnmodifiedAttribute.Background := clNone; end else begin fAddedAttribute.Foreground := clNone; fAddedAttribute.Background := Editor.Colors.Added; fRemovedAttribute.Foreground := clNone; fRemovedAttribute.Background := Editor.Colors.Deleted; fModifiedAttribute.Foreground := clNone; fModifiedAttribute.Background := Editor.Colors.Modified; fUnmodifiedAttribute.Foreground := clNone; fUnmodifiedAttribute.Background := Editor.Colors.Modified; end; finally EndUpdate; end; end; end. �������������������������������������������������������������������������������������doublecmd-0.7.1/src/fchecksumverify.lrt�������������������������������������������������������������0000644�0001750�0000144�00000000131�12454026023�017215� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMCHECKSUMVERIFY.CAPTION=Verify checksum... TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION=&Close ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsplitter.lfm�������������������������������������������������������������������0000644�0001750�0000144�00000024177�12365151656�016045� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSplitter: TfrmSplitter Left = 359 Height = 311 Top = 326 Width = 461 HorzScrollBar.Page = 464 HorzScrollBar.Range = 369 VertScrollBar.Page = 301 VertScrollBar.Range = 227 ActiveControl = cmbxSize BorderIcons = [biSystemMenu] Caption = 'Splitter' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 311 ClientWidth = 461 OnClose = FormClose OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'cmbxSize.Text;rbtnByte.Checked;rbtnGigaB.Checked;rbtnKiloB.Checked;rbtnMegaB.Checked;teNumberParts.Text;Width;cbRequireACRC32VerificationFile.Checked' LCLVersion = '1.0.14.0' object grbxFile: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom Left = 6 Height = 124 Top = 6 Width = 447 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Bottom = 6 Caption = 'File name' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 4 ClientHeight = 106 ClientWidth = 443 TabOrder = 0 object lbFileSource: TLabel Left = 10 Height = 16 Top = 4 Width = 57 Caption = 'File &source' FocusControl = edFileSource ParentColor = False end object lbDirTarget: TLabel AnchorSideTop.Control = edFileSource AnchorSideTop.Side = asrBottom Left = 10 Height = 16 Top = 59 Width = 83 BorderSpacing.Top = 12 Caption = 'Directory &target' FocusControl = edDirTarget ParentColor = False end object edFileSource: TEdit AnchorSideTop.Control = lbFileSource AnchorSideTop.Side = asrBottom AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 24 Width = 422 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ReadOnly = True TabOrder = 0 end object edDirTarget: TEdit AnchorSideTop.Control = lbDirTarget AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnFTChoice Left = 10 Height = 23 Top = 79 Width = 372 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 TabOrder = 1 end object btnFTChoice: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edDirTarget AnchorSideRight.Control = btnRelativeFTChoice AnchorSideBottom.Control = edDirTarget AnchorSideBottom.Side = asrBottom Left = 382 Height = 23 Top = 79 Width = 24 Anchors = [akTop, akRight, akBottom] Caption = '...' OnClick = btnFTChoiceClick TabOrder = 2 end object btnRelativeFTChoice: TSpeedButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edDirTarget AnchorSideRight.Control = edFileSource AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = edDirTarget AnchorSideBottom.Side = asrBottom Left = 406 Height = 23 Hint = 'Some functions to select appropriate path' Top = 79 Width = 26 Anchors = [akTop, akRight, akBottom] Glyph.Data = { 36040000424D3604000000000000360000002800000010000000100000000100 20000000000000040000640000006400000000000000000000002C86D8702D88 D8A62D87D8EA2D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88D8F72D88 D8F72D88D8F72D87D8F72D88D8F12C86D893FFFFFF00FFFFFF00338ED9E6DCF0 FAF0A7DDF4FD9EDBF4FF96DAF3FF8ED8F3FF86D7F3FF7FD4F2FF79D3F2FF72D2 F1FF6CD0F1FF69CFF1FFC2EAF8FE338ED9F0FFFFFF00FFFFFF003594DAF7EFFA FEFFA1E9F9FF91E5F8FF81E1F7FF72DEF6FF63DAF5FF54D7F4FF47D3F3FF39D0 F2FF2ECDF1FF26CBF0FFCAF2FBFF3594DAF7FFFFFF00FFFFFF00369ADAF8F2FA FDFFB3EDFAFFA4E9F9FF95E6F8FF85E2F7FF81E1F7FF7AE0F7FF7CE0F7FF62DA F5FF54D6F3FF47D3F2FFE8F9FDFF3594DAFFFFFFFF00FFFFFF0036A1DAF9F6FC FEFFC8F2FCFFB9EFFBFF94DFEFFF8CE4F8FF99CED3FF91D0D8FF82E1F7FF6DDD F6FF61DAF5FF57D7F4FFE7F8FDFF3594DAFFFFFFFF00FFFFFF0037A6DAFAFEFF FFFFF8FDFFFFF6FDFFFFF4F4F2FFE8FAFEFFB6D7D8FFAAC7C5FF92D8E4FF7DE0 F7FF72DDF6FF68DBF5FFE9F9FDFF3594DAFFFFFFFF00FFFFFF0035ABDAFAE8F6 FBFF7EC5EAFF4AA3DFFF5E97C2FF4DA3DEFFF2F1EDFFF3EFECFFEDE5DFFFEDEB E8FFF1F9FDFFF0F9FDFFFFFFFFFF3594DAFFFFFFFF00FFFFFF0036AADAF2F1FA FDFF94DEF5FF93DCF4FFACBFBFFFBC9F90FF64A1CFFF3594DAFF3594DAFF3594 DAFF3594DAFF3594DAFF3594DAFF3594DAFFFFFFFF00FFFFFF0035AFDAF0F7FC FEFF8EE4F8FF91DEF5FF9FE0F5FFC5C7C2FFDFA583FFEDC8B3FFEDCDB8FFE9BE A3FFD58E64FFEEFBFEFFFAFDFFF936AFDAD4FFFFFF00FFFFFF0036B3DAF8FDFE FEFFFEFFFFFFFEFEFFFFFDFEFFFFFEFFFFFFE7D6C9FFE0A987FFEBC7B0FFDDA1 7CFFBCA595FF839DA5FC7BAEBEEC6395A58E81818117FFFFFF0034B4D9D05EC2 E1FA60C3E2FA60C3E2FA60C3E2FA5FC3E2FA3CB6DBDDD5B1968CDDAB8DF9C4AF A3FFD5D5D5FFBBBBBBFFA6A6A6FFA0A0A0FF848484E482828262FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00969696029494 94C5CBCBCBFFD2D2D2FFC9C9C9FFD2D2D2FFC6C6C6FF858585E8FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009898 9855B2B2B2FFD6D6D6FF919191DA8E8E8EF5C0C0C0FF898989FDFFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009B9B 9B54B5B5B5FFE6E6E6FF949494EF929292AF8F8F8FA68D8D8D90FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF009E9E 9E1B9C9C9CE4E1E1E1FFD2D2D2FF969696ABFFFFFF00FFFFFF00FFFFFF00FFFF FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF FF009E9E9E629D9D9DE89B9B9BF999999992FFFFFF00FFFFFF00 } NumGlyphs = 0 OnClick = btnRelativeFTChoiceClick end end object grbxSize: TGroupBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = grbxFile AnchorSideTop.Side = asrBottom Left = 6 Height = 136 Top = 136 Width = 362 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 BorderSpacing.Right = 6 Caption = 'Size and number of parts' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 118 ClientWidth = 358 Constraints.MinWidth = 300 TabOrder = 1 object cmbxSize: TComboBox AnchorSideLeft.Control = grbxSize AnchorSideTop.Control = grbxSize AnchorSideRight.Side = asrBottom Left = 6 Height = 23 Top = 6 Width = 338 Anchors = [akTop, akLeft, akRight] ItemHeight = 15 Items.Strings = ( 'Automatic' '1457664B - 3.5" High Density 1.44M' '1213952B - 5.25" High Density 1.2M' '730112B - 3.5" Double Density 720K' '362496B - 5.25" Double Density 360K' '98078KB - ZIP 100MB' '650MB - CD 650MB' '700MB - CD 700MB' '4482MB - DVD+R' ) OnChange = cmbxSizeChange TabOrder = 0 Text = '1457664B - 3.5"' end object rbtnByte: TRadioButton AnchorSideLeft.Control = cmbxSize AnchorSideTop.Control = cmbxSize AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 31 Width = 48 BorderSpacing.Top = 2 Caption = '&Bytes' Checked = True OnChange = rbtnByteChange TabOrder = 1 TabStop = True end object rbtnKiloB: TRadioButton AnchorSideLeft.Control = rbtnByte AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnByte Left = 56 Height = 19 Top = 31 Width = 68 BorderSpacing.Left = 2 Caption = '&Kilobytes' OnChange = rbtnByteChange TabOrder = 2 end object rbtnMegaB: TRadioButton AnchorSideLeft.Control = rbtnKiloB AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB Left = 126 Height = 19 Top = 31 Width = 78 BorderSpacing.Left = 2 Caption = '&Megabytes' OnChange = rbtnByteChange TabOrder = 3 end object teNumberParts: TEdit AnchorSideLeft.Control = lblNumberParts AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB AnchorSideTop.Side = asrBottom Left = 98 Height = 23 Top = 60 Width = 128 BorderSpacing.Left = 4 BorderSpacing.Top = 10 OnChange = teNumberPartsChange TabOrder = 4 end object lblNumberParts: TLabel AnchorSideLeft.Control = rbtnByte AnchorSideTop.Control = teNumberParts AnchorSideTop.Side = asrCenter Left = 6 Height = 16 Top = 63 Width = 88 Caption = '&Number of parts' FocusControl = teNumberParts ParentColor = False end object rbtnGigaB: TRadioButton AnchorSideLeft.Control = rbtnMegaB AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = rbtnKiloB Left = 206 Height = 19 Top = 31 Width = 72 BorderSpacing.Left = 2 Caption = '&Gigabytes' OnChange = rbtnByteChange TabOrder = 5 end object cbRequireACRC32VerificationFile: TCheckBox AnchorSideLeft.Control = cmbxSize AnchorSideTop.Control = teNumberParts AnchorSideTop.Side = asrBottom Left = 6 Height = 19 Top = 93 Width = 188 BorderSpacing.Top = 10 Caption = 'Require a CRC32 verification file' Checked = True State = cbChecked TabOrder = 6 end end object btnOK: TButton AnchorSideRight.Control = btnCancel AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = btnCancel Left = 378 Height = 32 Top = 202 Width = 75 Anchors = [akRight, akBottom] BorderSpacing.Bottom = 6 Caption = '&OK' Default = True OnClick = btnOKClick TabOrder = 2 end object btnCancel: TButton AnchorSideLeft.Control = grbxSize AnchorSideLeft.Side = asrBottom AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = grbxSize AnchorSideBottom.Side = asrBottom Left = 378 Height = 32 Top = 240 Width = 75 Anchors = [akLeft, akBottom] BorderSpacing.Left = 10 Cancel = True Caption = '&Cancel' ModalResult = 2 TabOrder = 3 end object pmPathHelper: TPopupMenu left = 408 top = 128 end end �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uvariablemenusupport.pas��������������������������������������������������������0000644�0001750�0000144�00000021714�12646752277�020334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Support for popup menu to help to enter variable parameters. Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 uVariableMenuSupport; {$mode objfpc}{$H+} interface uses //Lazarus, Free-Pascal, etc. Classes, Menus, StdCtrls, //DC dmHelpManager; type TSupportForVariableHelperMenu = class(TObject) public constructor Create; destructor Destroy; override; procedure PopulateMenuWithVariableHelper(pmToPopulate: TComponent; ParamAssociatedComponent: TComponent); end; TVariableMenuItem = class(TMenuItem) private FAssociatedTComponent: TComponent; FSubstitutionText: string; public constructor MyCreate(TheOwner: TComponent; ParamTComponent: TComponent; ParamCaption, ParamSubstitutionText: string); procedure VariableHelperClick(Sender: TObject); procedure HelpOnVariablesClick(Sender: TObject); end; procedure LoadVariableMenuSupport; implementation uses //Lazarus, Free-Pascal, etc. SysUtils, Dialogs, //DC uGlobs, uLng; procedure LoadVariableMenuSupport; begin gSupportForVariableHelperMenu := TSupportForVariableHelperMenu.Create; end; { TVariableMenuItem.MyCreate } constructor TVariableMenuItem.MyCreate(TheOwner: TComponent; ParamTComponent: TComponent; ParamCaption, ParamSubstitutionText: string); begin inherited Create(TheOwner); Caption := ParamCaption; if ParamCaption <> rsVarHelpWith then begin if ParamSubstitutionText <> '' then begin FAssociatedTComponent := ParamTComponent; FSubstitutionText := ParamSubstitutionText; OnClick := @VariableHelperClick; end; end else begin OnClick := @HelpOnVariablesClick; end; end; { TVariableMenuItem.VariableHelperClick } //Our intention: //-If something is selected, we replace what's selected by the helper string //-If nothing is selected, we insert our helper string at the current cursor pos //-If nothing is there at all, we add, simply procedure TVariableMenuItem.VariableHelperClick(Sender: TObject); begin TCustomEdit(FAssociatedTComponent).SelText := FSubstitutionText; end; { TVariableMenuItem.HelpOnVariablesClick } procedure TVariableMenuItem.HelpOnVariablesClick(Sender: TObject); begin ShowHelpForKeywordWithAnchor('/Variables.html'); end; { TSupportForVariableHelperMenu.Create } constructor TSupportForVariableHelperMenu.Create; begin inherited Create; end; { TSupportForVariableHelperMenu.Destroy } destructor TSupportForVariableHelperMenu.Destroy; begin inherited Destroy; end; { TSupportForVariableHelperMenu.PopulateMenuWithVariableHelper } procedure TSupportForVariableHelperMenu.PopulateMenuWithVariableHelper(pmToPopulate: TComponent; ParamAssociatedComponent: TComponent); type tFunctionHelper = record sLetter: string; sDescription: string; bAddSeparator: boolean; end; tFirstSubLevelHelper = record sLetter: string; sDescription: string; bAddSeparator: boolean; end; const NbOfFunctions = 10; FunctionHelper: array[1..NbOfFunctions] of tFunctionHelper = ( (sLetter: 'f'; sDescription: rsVarOnlyFilename; bAddSeparator: False), (sLetter: 'd'; sDescription: rsVarPath; bAddSeparator: False), (sLetter: 'p'; sDescription: rsVarFullPath; bAddSeparator: False), (sLetter: 'o'; sDescription: rsVarFilenameNoExt; bAddSeparator: False), (sLetter: 'e'; sDescription: rsVarOnlyExtension; bAddSeparator: False), (sLetter: 'v'; sDescription: rsVarRelativePathAndFilename; bAddSeparator: True), (sLetter: 'D'; sDescription: rsVarCurrentPath; bAddSeparator: True), (sLetter: 'L'; sDescription: rsVarListFullFilename; bAddSeparator: False), (sLetter: 'F'; sDescription: rsVarListFilename; bAddSeparator: False), (sLetter: 'R'; sDescription: rsVarListRelativeFilename; bAddSeparator: False)); NbOfSubLevel = 6; SubLevelHelper: array[1..NbOfSubLevel] of tFirstSubLevelHelper = ( (sLetter: 's'; sDescription: rsVarSourcePanel; bAddSeparator: False), (sLetter: 't'; sDescription: rsVarTargetPanel; bAddSeparator: True), (sLetter: 'l'; sDescription: rsVarLeftPanel; bAddSeparator: False), (sLetter: 'r'; sDescription: rsVarRightPanel; bAddSeparator: True), (sLetter: 'b'; sDescription: rsVarBothPanelLeftToRight; bAddSeparator: False), (sLetter: 'p'; sDescription: rsVarBothPanelActiveToInactive; bAddSeparator: False)); NbOfSubLevelExamples = 15; SubLevelHelperExamples: array[1..NbOfSubLevelExamples] of tFirstSubLevelHelper = ( (sLetter: '%?'; sDescription: rsVarShowCommandPrior; bAddSeparator: False), (sLetter: '%%'; sDescription: rsVarPercentSign; bAddSeparator: False), (sLetter: '%#'; sDescription: rsVarPercentChangeToPound; bAddSeparator: False), (sLetter: '#%'; sDescription: rsVarPoundChangeToPercent; bAddSeparator: True), (sLetter: '%"0'; sDescription: rsVarWillNotBeQuoted; bAddSeparator: False), (sLetter: '%"1'; sDescription: rsVarWillBeQuoted; bAddSeparator: False), (sLetter: '%/0'; sDescription: rsVarWillNotHaveEndingDelimiter; bAddSeparator: False), (sLetter: '%/1'; sDescription: rsVarWillHaveEndingDelimiter; bAddSeparator: False), (sLetter: '%t0'; sDescription: rsVarWillNotDoInTerminal; bAddSeparator: False), (sLetter: '%t1'; sDescription: rsVarWillDoInTerminal; bAddSeparator: True), (sLetter: rsVarSimpleMessage; sDescription: rsVarSimpleShowMessage; bAddSeparator: False), (sLetter: rsVarPromptUserForParam; sDescription: rsVarInputParam; bAddSeparator: True), (sLetter: '%f{-a }'; sDescription: rsVarPrependElement; bAddSeparator: False), (sLetter: '%f{[}{]} '; sDescription: rsVarEncloseElement; bAddSeparator: False), (sLetter: '%pr2'; sDescription: rsVarSecondElementRightPanel; bAddSeparator: False)); var miMainTree, miSubTree: TVariableMenuItem; iFunction, iSubLevel: integer; procedure InsertSeparatorInMainMenu; begin miMainTree := TVariableMenuItem.MyCreate(pmToPopulate, nil, '-', ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); end; procedure InsertSeparatorInSubMenu; begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, nil, '-', ''); miMainTree.Add(miSubTree); end; begin //Add the automatic helper for iFunction := 1 to NbOfFunctions do begin miMainTree := TVariableMenuItem.MyCreate(pmToPopulate, nil, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, '%' + FunctionHelper[iFunction].sLetter + ' - ' + FunctionHelper[iFunction].sDescription, '%' + FunctionHelper[iFunction].sLetter); miMainTree.Add(miSubTree); InsertSeparatorInSubMenu; for iSubLevel := 1 to NbOfSubLevel do begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, '%' + FunctionHelper[iFunction].sLetter + SubLevelHelper[iSubLevel].sLetter + ' - ' + '...' + SubLevelHelper[iSubLevel].sDescription, '%' + FunctionHelper[iFunction].sLetter + SubLevelHelper[iSubLevel].sLetter); miMainTree.Add(miSubTree); if SubLevelHelper[iSubLevel].bAddSeparator then InsertSeparatorInSubMenu; end; if (FunctionHelper[iFunction].bAddSeparator) then InsertSeparatorInMainMenu; end; //Add the more complex-not-so-complex other examples miMainTree := TVariableMenuItem.MyCreate(pmToPopulate, nil, rsVarOtherExamples, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); for iSubLevel := 1 to NbOfSubLevelExamples do begin miSubTree := TVariableMenuItem.MyCreate(miMainTree, ParamAssociatedComponent, SubLevelHelperExamples[iSubLevel].sLetter + ' - ' + SubLevelHelperExamples[iSubLevel].sDescription, SubLevelHelperExamples[iSubLevel].sLetter); miMainTree.Add(miSubTree); if SubLevelHelperExamples[iSubLevel].bAddSeparator then InsertSeparatorInSubMenu; end; //Add link for the help at the end InsertSeparatorInMainMenu; miMainTree := TVariableMenuItem.MyCreate(pmToPopulate, nil, rsVarHelpWith, ''); TPopupMenu(pmToPopulate).Items.Add(miMainTree); end; end. ����������������������������������������������������doublecmd-0.7.1/src/fAbout.lfm����������������������������������������������������������������������0000644�0001750�0000144�00000041135�12045446211�015227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmAbout: TfrmAbout Left = 26 Height = 400 Top = 125 Width = 667 BorderIcons = [biSystemMenu, biMaximize] Caption = 'About' ClientHeight = 400 ClientWidth = 667 KeyPreview = True OnKeyDown = FormKeyDown OnShow = frmAboutShow Position = poScreenCenter LCLVersion = '1.0.1.3' object pnlText: TPanel AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 168 Height = 384 Top = 8 Width = 491 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Around = 8 BevelInner = bvRaised BevelOuter = bvLowered ClientHeight = 384 ClientWidth = 491 FullRepaint = False TabOrder = 0 object lblHomePage: TLabel AnchorSideLeft.Control = memInfo AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 10 Height = 22 Top = 345 Width = 81 Anchors = [akLeft, akBottom] BorderSpacing.Bottom = 15 Caption = 'Home Page:' ParentColor = False end object lblHomePageAddress: TLabel AnchorSideLeft.Control = lblHomePage AnchorSideLeft.Side = asrBottom AnchorSideTop.Side = asrBottom AnchorSideBottom.Control = pnlText AnchorSideBottom.Side = asrBottom Left = 97 Height = 22 Top = 345 Width = 231 Anchors = [akLeft, akBottom] BorderSpacing.Left = 6 BorderSpacing.Top = 8 BorderSpacing.Bottom = 15 Caption = 'http://doublecmd.sourceforge.net' Font.Color = clBlue ParentColor = False ParentFont = False OnClick = lblHomePageAddressClick OnMouseEnter = lblHomePageAddressMouseEnter OnMouseLeave = lblHomePageAddressMouseLeave end object memInfo: TMemo AnchorSideLeft.Control = pnlText AnchorSideTop.Control = pnlText AnchorSideRight.Control = pnlText AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = lblHomePage Left = 10 Height = 327 Top = 10 Width = 471 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 8 BorderSpacing.Top = 8 BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 ReadOnly = True ScrollBars = ssAutoBoth TabOrder = 0 end end object pnlInfo: TPanel Left = 9 Height = 290 Top = 9 Width = 151 AutoSize = True BorderSpacing.Around = 8 BevelOuter = bvNone ChildSizing.VerticalSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 290 ClientWidth = 151 TabOrder = 1 object pnlLogo: TPanel Left = 39 Height = 72 Top = 8 Width = 72 BorderSpacing.Top = 8 BorderSpacing.Bottom = 8 BorderSpacing.CellAlignHorizontal = ccaCenter BevelInner = bvRaised BevelOuter = bvLowered BevelWidth = 2 ClientHeight = 72 ClientWidth = 72 TabOrder = 0 object imgLogo: TImage Left = 4 Height = 64 Top = 4 Width = 64 Align = alClient Center = True Picture.Data = { 1754506F727461626C654E6574776F726B47726170686963F511000089504E47 0D0A1A0A0000000D4948445200000040000000400806000000AA6971DE000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000B1300000B1301009A9C180000000774494D4507DA021112343B F8979BBE000011754944415478DADD9B79905D559DC73FE7DC7BDFD24BBAD39D 3D241D9640020414102C4046CA5229401C71199771CA1A7416D19A9A19A79CC2 3F8471299491C1D1D2A15C81128D5A52AC53208B16191C9180C8960D1224E94E 27E974F7DBEF727EBFF9E3DED7FD3A74BFEEA483C0DCAA5B6F3BEFDCF3FB9EDF FEFB1D6873A92AFF5FAE996831330D36C6B4FED1BCDEE937C64CA16B5600000F 08803C901751CF5AA3AFB75D37C6C44023BBDDA14098E90857D5A231A60758B8 77F0C08A91DD7B97D66A8DE2C3BF7A6231869941505EF6A379F9903F05E166F1 92858D0DA79F38BAEAA48191C58B7B770383C0412032667223CD21C4FBC04260 0038EE1F2EF9E415FD94CE59B36E4D61755F1038455140D31724FB22235C9B00 A8A06A50145533051955455BDF4F3C3F7D159D44B229B72AA046419AD31826A7 555426E748D7A324899A3D2315F7DC737B4ACBCF3CF3A1AFDE74F50F45E4596B ED2010021863A600605575A13166DD2DDFFAD97B5F7AE0BE2B3F70C986DC9A1E 341CDA6DA2F238A2922E42155130B9226A6DBAC08C46D17401A293C4AAA68B97 560054106D8ECFFEAF9344A828922172E85C2E8E496AF50C7445267E4B3F7BC5 4EFC8E4E3A962CA5B864098F6D19E67F9FDEFBD4B5777CEBEAAE62F028306C8C 8955750A0005E0B8DB7E72FFFB776CBCF9EA2B3F7601D1738FA1C68282A84C2E 36DB0991960793EEBAA8A0A228267B4D7728DD451091740745D3B16A5A884BE7 C4804AF3790691942B9C4EEEB6A4AC82A84ECCD91C27D926A1E0C4915BD0A3C9 CAB5E6D6BB9E7CEEBB8F6EFC7BCF9ADF1B63C68D31D8A6CC00C5F1B1CAEA5F7E E3C68F5FF9A1B388B76E56635FF7CA1F632D61A964823DDBF5ED672C5BBFE917 F79F6B8C599429F814804C17148777ED5EF9E7672F5E69CA073198D73BF553AE FAD898E94F4AFCE26BDFFD04D00714547502000572BFBFFBA1F5EBD7AF32EEC0 E084401A32017F1DBA029ACA29886054F1C23AF9FAC163A37AB26C4209DE70C3 0DC50B2EB860477F7F7F978BE3BC7571DEF33D5CE220AC93D42AB8B103C8C161 BCE15D2C2CED070CCED84CD65E233A40158962B4A3133D6680DCC0B1E417F651 5CB49862FFA25439FA3EA28A09821AC6C443434357F9F57ADD747676F6E6F3F9 0ECDE526D0F301E8A5600CD6AEC3F7031255F68D1C441E7F88DE179FC536AA18 15F4D5E40E154C90C35BB21CFFBC3FA377DD29F47477E15B9B01ABD3B9C11D00 BEEF17FC294ECB0C62EF9CC3390740FF822EB8F032709730B6FB45F4819FB2A0 3A8EBE1A0A338E70679DCBB20BDF4EEFD265586B271C0AE7DCA4B7370D5D4D50 FCB93CE76513A8A2C6D0B7E6781A1FFB2C639B1F26F8DD031424CE7485BEA29A 9D3846561F4FEFA5EF61F989EB9038CECC9ECEBA99875E7E2B22871BFD254982 0FF49FF516AAEBDE48E317DF215FDAFFCABABBD6D2F8B38B38E5DD9723714C12 86F38A5EEDA13B7D24B788D0D1D949E1C39FE6C09AD3B04D4D7594AFC47AE43F 7405A75CF61E3449E6B5E609005A3FB42A8DC3B99BFFF5AD65F9BB3FCAC1B567 A2224795ED136BE9FAD015ACDE703A9224539E7BA46B9E108136DAF2B02F1387 2C7EC7E5ECC3B070CB63B8A3A01C9DE7D3F9D79F66D9EA01E2383EAA5CE58B88 F13CAF03C0063E82A7C66002CFC7B918750E1599369930B3985AFADF7939FBC7 46E81DDE354F4023F4D20FB274D5EA299A7D2ED91F630C412E87F53CD41892D4 92A9C69111278848CE6CDAB4C90E0F0FBFE1A4D34E5DF7C2CDB75D79C6A29173 EB62A9E73AA167116EF9712C5CB90AAF73019EE7CF59C3AB2A61AD4A74F3F578 61E3081CA1F4F7D28673D8F0171F250EC359896F6E92029AC48C0C0EB26FDB56 AA2FEE42460E62460F52E8E961F771E77C79C5DAFEFF2E97CB5BFCF3CE3B4F80 2D406E308A2BBD12D29324485442CB83E8EE27897FE71316BB195A7B0ECBCE38 0F5C3CABA931C650E8EA66FF85EFA3FF9E1FA273B3B853E45E8B5DAC7AC7BB48 A2684EC4FB41C081B1315EFAD98F31DBB7A1F53A8890270554150AF900EB7243 175F7CF173C088DF120C99FDCE4E666D4C6ACF552DBE0AB63ACA9ACD77B27FFB E3D8F3DF45F7CA01C4256D17A622AC39F534869E594FC78BDB0E2B9E50111A17 7F80EEAECE39E92607ECBAE74E2AF7DE85278A1A8B41119B725BF3D18A215FC8 4993E62966B024A6ED129DF5E92B0FD37DCFF7D8FBCC13F841D07671C6189238 2677FE45187187B5FFB5E5AB597BEA8659895755C439B6FCC75768DC7737BEB5 60BD36C02A6B4F5C559BD60F98EBE5A9B0F4E19F33F4DB5FE3FBFEAC20F4AC58 C5E8CA13A6786A6D159F4BC8BFF9ADB35A2655A55A6FB0F5BA2F100CED066BE7 AA9FCCBC00500CD65AFA1EBF9FBD2FEE4C7DF07656411CC1F917A173D0E00608 7BFAE93E615D5BCBA39A263B76DFFA03BCD19194F823B0E2763E262A5061C12F 7F44AD566BBB5322C2E2E52B483ABAE714DD554F7F33FDDDDD6DF58BE7FB6C79 F8D778DB9E9997EB3D2F0014C84575CACF3E91C6DA22D3DEAA8A18835BB21233 8B18489063C1C0713897CC389F8850191BC3BBF776F0BCF9394247C39BCA3FFE 10E3A79C49CEB40D2929AF389EC2F63FA0DECCB8BB7C919EFE45842D41CE748E D681271FC73897E522F4D504C0D01355D9B3F5297AD79EDC5ED1AD5883710978 C18C392CEDEE41B24873C627FA0195C71F25DF525778553940AC47D71FB790AC 59DB9E53F2391A0B971054CB33CABF5BB4141521690364BD56A330F847D47A73 B62CAF2800184BA1B49F4A1CD32E99EC594354E83C04009DB42DAA84411ED74C 36CE6056E37D7BD318C5D879275F8E0E008036EA181562D7C61A00B19F4BC359 E790895B5282C2107A1692B489F88C31D477EE40CA65D40FC09A1488EC566B53 636A4CB34E97BDD75716005471CE913899D17C19CFC3292423C3B824233E71A9 A57082346A18CF6FCB01188346118D7D4368904B95A0B12836F505AC07D6C378 1EF801C6F3534B619AC0BC52001883384792CC1CB2AA7368A3463C368A388713 C93841D33478BD8688A40AB00D0061B54A343E0E418064142936DD706B338EF0 52403C1F633DF0739820C02B16302D8EDB3C0150D4254814E2A2104CEA21CE04 40248ADB3784AB551027290788A63546716818D3D8F62C9D03C7B575820A2B8E A15229A1F9425AB7C4A46175C6F54A260E4DD1C8B802CFC3063E7D2DBEC36101 6068C6EE0E091B4818E2C206124548771F4EB5AD5B6CACC19447D3FFBAB4F0A1 2E739444D124A4806067516E1D1BDE806BD453229B79846639BE09064D4052D6 579B7245AEA32B158F2301409308693490B03149781C236148BC7A7D2A7B6DB4 77A31E523C308826719A656AEEBE6B569D159EDF9289EACC1C902F1691638EC5 0C0F4D94D155D2DE82664F82D0AC5899C9DB18A25A6D6A52742E6C2E7184544A 486914298F219571A45A46EB15A45E85D2412AA79EDF369456559228C40EBE98 EA02972A3E9AAEB2086A2CC9CEADD85982266934E8BEE83254252DC989A0EA52 CE1487B8044D92543C9338BDE3080943246E4CC902D8765A5D5D8256CB687914 ADA6444BAD8234AA6858471A0D340A29AF389EDC09A7CC1ABB7BCF6ECE185B5F E60334DF6B691CC27AFBF4781CD377FE5B5385A79A02A16912455D5A88D44CC1 AA7399D94D1097207132C555B1D3C5A3AA9212582921D512522F23F52A1AD6D0 A891DAEB3844E3084D62920BDF8749A2B679783586FCE65FA5B6BBD94FD32CE1 B6DCA63C4EEDC07E3CCF6B3B5F71D500C1056F87A6CFD09208553D24D3AD69C7 491310DA8A804BA056416A25B45E411B55B4D140C30634094F22344E3049447D F971D853CF4145DA174FEA35ECAEADD3D4AF5B3301293794EED8885FEC680F68 92B0E6AA2F60962C9F0AE6840FA1531E937289BECCBCDA431724B50A52AF40A3 86366A681442DC8038425D9C56649C0371D4BB16A29FFA4A0A5A3BD6F73C4677 EEC0AB8CCFC9ADB60FDC4EA334FB582F89597ECD7568239AE2274C4A550B7761 A6345ECD08006115C23A12A54413479942895197803890847AA183EADF7E39DD F9594A54A1F5E9BAEB87734F89F93EB55FDE411004B396B7166F78030337DE32 4B44903536CD9A105145C354B199388224CA884EC00946047509F5FE95C49FBB 897CFF524CE6FCB4BBC3271E21B7FDA939E7ECB01EA53B7F425028CC3A771285 F49DF64606FEEB16BC053D6D4A7266AAEE995E07282431B838DB7197B2B713AC 8B8815062FFF47DC3F7D738A3BD97E3703B8E3A654F91D4EE27578905DDFFE77 FC4261160FDC20E2E85FB79E33EE7C908EF77D18899239B7F5F859EB681D68B8 3811AB554CA3868D631227943BFA48161D43E584337067BF93EE7C0E49662F8C A4A5B61CC3B7DD44CF0B4FE3FCFC61C6A901C9EDB7125EF25E724B576415A5F6 7E8603CEFEFC9738F05757B0EFE73FE6C06F1EA1B6631B321EA66D7D808411D6 78215037C6A8B9F9E69B0B2B56ACB8B7A3A3A3AF323276CC325BE945A09CEF26 E85B42B158C40222EEB08AA7D65A6A2FEEC07EF99369A4279AF51666BD449239 3F5939ACD9DBD73A4E4449D69CC4FAEFFC94A85A3DACE77B9E47B1B31327C2D8 F838E5A79FA251AEE0E5028A6B4FDA8161AC5C2E5FEF8F8C8CD80D1B36BC2997 CB157B7B7B9B4DADA627435CC5212DEC36E7C246A5827EFDB3A9DE9847B8E56D 7F86E7AFFE0C277FF1064A6363735E8388502DA789978E5C8ECEB3DE34C92C22 27349374D6A6DE944EB8A322A655911C6EE381F53C3C6B31D75E49502DCDBFBB CE0F881EBC8767BF7D3D9D3DBD47B4AE66F528BB4D935611517FBAB2F2BC6AF9 5184FBD2DF111C18E468B54818DF27FAD177D852AD72FABF5EC3D8C18347ED30 87DFACBE98793686068502B55DDB906F7E8E60642FD2260D75A40997C6C61FF0 44699C933EF72554E4A8344BF887B2D4E165C1D2F8DFF33C0EFEFA1EBA6FB916 C164C473F4AF5C9EC67D77B2F9F78FB1EEEBDFA773C54A92AC43EC48D60E60E7 C301F98E4EC68776137EF1132CB8F5AB737774E69981F68687D8FAE14B79EEDA 6BB07E404767E71130544AF39C1A259B20D92CE91839811D7FA0BCE96EFA7F77 2F0E9BC9FB2BDD23D8E2EF8BA37AFB4FD8FCF083F4BFFF23AC7CD7E514571C03 71441C4573E60AFF50E2D3EEDC34B1636DAAD573BE4FB55CA65C29C353FFC3C2 077F8C19DD8F6011EB672EA6F027BD34F53275EC20FB6FFC3AC3FF791D85B3CF 65E9DF7C8AFE934EA66BC1021211DCCB2B4C0A98894ED18E8E8EA8542A7D5EA1 9703074ECF0D3E776971740F188B28D8A19D24A5118A95125DE307208A70D643 3D0FDC6BE70C95C9E5A93FF65B9EFFCD23BCD0D58DE95B44D0D74F61E531E4FA FA09A308CF0F745F1898B3FEF99377C5B5DAF65AADF670EB89919EFD3B5EB870 FC6B9FDAB878412E48F63C6F347138254D604A56C0902CE426B3A54EB3A32F4D 0F4F264E92A4AF9A75AC1F9927D89C5315DCB4E3B465CED6F9B235389706B00E 8ACB97B04906F67C7FF0D1CB80678C31A16DD188C982D5ABF7FCFCE978B0B8A8 DFE0E750CFCF2A2E66EA3D21E7E6357E8C40B3DA80C1F8505F7A2CEFBFFEDFBE 075452B275D20A00613EE70F5DFA8D1BAFF9C6DD2F49EEF4F3D2AA8A01632D86 26107A88AEB31908AF45240C9208413E50F7A6B7B1A9BAF0C9B7BDE76D8FA8EA 28904C9C1A6BF1AA3A513DF1BEDB7E75C9DDD75C73D527FEF22DC5BE3D4FE097 4690B0813A87CB8A186931A37960213B5425D9692F6DF6F9B58EC958B2E5BB66 5A7CEA7720B4FE3639D7D4CF2DA230B186C9FF193FD0C8A929AC3D991D1D03FA CCEEEA533F7DE6F6AB80A78121634C34E5D458068455D51E63CCC0F667779E71 C3BF5C77857B69C7590B6C985BB9BC9BBC6F303A29BBDACCE5A3538EBC35534F D27A3E509838E6D63C77A8ADC7E1267215538FC071E8B896A4C644AE0F404DCB 7B78693422ACC72C583DB0EDF2CF7C7CE3C51FB9649331662BE991B9B0797872 BA93A31628AAEA6263CCF29D8363AB6EDF78FFCAD20B7F5C58E8ECE8A854EBFD BDBD5DA3D552AD1A27499C2E6B9A63A86D4CF8DC98F7E5838DC1E6F3B99CF1BD FE5A2DECF7BC433D2FD5247671B198DF7BEC9A657BDEF2C18B77AEEC2BEE0646 5575D418330EC4D39E1C6D7578B236321F28909E1DB6A467893BB3EF22A00AC4 7F1ACF674A062B007A80E234952DC9D6546A595F98AD3731C6C8B440CF00C274 E3BC6C114ADA9C29AF82F66B6E8E9DE1D90A24D9FAB4D5D19BCE3BFC3F18A85F E1469E4F0B0000000049454E44AE426082 } Proportional = True end end object lblTitle: TLabel Left = 0 Height = 22 Top = 88 Width = 151 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Double Commander' Font.Color = clRed Font.Style = [fsBold] ParentColor = False ParentFont = False end object lblVersion: TLabel Left = 0 Height = 22 Top = 114 Width = 51 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Version' ParentColor = False end object lblRevision: TLabel Left = 0 Height = 22 Top = 140 Width = 58 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Revision' ParentColor = False end object lblBuild: TLabel Left = 0 Height = 22 Top = 166 Width = 37 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Build' ParentColor = False end object lblLazarusVer: TLabel Left = 0 Height = 22 Top = 192 Width = 53 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Lazarus' ParentColor = False end object lblFreePascalVer: TLabel Left = 0 Height = 22 Top = 218 Width = 77 BorderSpacing.CellAlignHorizontal = ccaLeftTop Caption = 'Free Pascal' ParentColor = False end object lblPlatform: TLabel Left = 0 Height = 1 Top = 244 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object lblOperatingSystem: TLabel Left = 0 Height = 1 Top = 249 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object lblWidgetsetVer: TLabel Left = 0 Height = 1 Top = 254 Width = 1 BorderSpacing.CellAlignHorizontal = ccaLeftTop ParentColor = False end object btnCopyToClipboard: TButton Left = 4 Height = 31 Top = 259 Width = 143 AutoSize = True BorderSpacing.CellAlignHorizontal = ccaCenter Caption = 'Copy to clipboard' Constraints.MinWidth = 100 OnClick = btnCopyToClipboardClick TabOrder = 1 end end object btnClose: TBitBtn AnchorSideLeft.Control = pnlInfo AnchorSideLeft.Side = asrCenter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 34 Height = 35 Top = 357 Width = 100 Anchors = [akLeft, akBottom] AutoSize = True BorderSpacing.Bottom = 8 BorderSpacing.InnerBorder = 2 Caption = '&Close' Constraints.MinWidth = 100 Default = True Kind = bkClose ModalResult = 11 TabOrder = 2 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fconfirmcommandline.pas���������������������������������������������������������0000644�0001750�0000144�00000004614�12532643273�020037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Window to confirm the execution of command line and its parameters Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 fConfirmCommandLine; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, Buttons; type { TTfrmConfirmCommandLine } TTfrmConfirmCommandLine = class(TForm) btnCancel: TBitBtn; btnOK: TBitBtn; lbleCommandLine: TLabeledEdit; lbleStartPath: TLabeledEdit; lbleParameters: TLabeledEdit; procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; var TfrmConfirmCommandLine: TTfrmConfirmCommandLine; function ConfirmCommandLine(var sCommandLine: string; var sParameter:string; var sStartPath:string):boolean; implementation {$R *.lfm} uses uLng,uGlobs; function ConfirmCommandLine(var sCommandLine: string; var sParameter:string; var sStartPath:string):boolean; begin with TTfrmConfirmCommandLine.Create(Application) do try Caption:= rsConfirmExecution; lbleCommandLine.Text:=sCommandLine; lbleParameters.Text:=sParameter; lbleStartPath.Text:=sStartPath; Result:= (ShowModal = mrOK); if Result then begin sCommandLine:=lbleCommandLine.Text; sParameter:=lbleParameters.Text; sStartPath:=lbleStartPath.Text; end; finally Free; end; end; { TTfrmConfirmCommandLine } procedure TTfrmConfirmCommandLine.FormCreate(Sender: TObject); begin InitPropStorage(Self); end; end. ��������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/foptions.pas��������������������������������������������������������������������0000644�0001750�0000144�00000030035�12656270711�015662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Implementing of Options dialog Copyright (C) 2006-2016 Koblov Alexander (Alexx2000@mail.ru) contributors: Radek Cervinka <radek.cervinka@centrum.cz> 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 fOptions; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, Forms, Dialogs, ExtCtrls, ComCtrls, Buttons, StdCtrls, fgl, uGlobs, fOptionsFrame, uDCUtils; type { TOptionsEditorView } TOptionsEditorView = class EditorClass: TOptionsEditorClass; Instance: TOptionsEditor; TreeNode: TTreeNode; LegacyOrderIndex: integer; end; TOptionsEditorViews = specialize TFPGObjectList<TOptionsEditorView>; { TfrmOptions } TfrmOptions = class(TForm, IOptionsDialog) lblEmptyEditor: TLabel; OptionsEditorsImageList: TImageList; Panel1: TPanel; Panel3: TPanel; pnlCaption: TPanel; btnOK: TBitBtn; btnApply: TBitBtn; btnCancel: TBitBtn; sboxOptionsEditor: TScrollBox; tvTreeView: TTreeView; splOptionsSplitter: TSplitter; procedure btnCancelClick(Sender: TObject); procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); procedure FormCloseQuery(Sender: TObject; var CanClose: boolean); procedure FormCreate(Sender: TObject); procedure btnOKClick(Sender: TObject); procedure btnApplyClick(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure tvTreeViewChange(Sender: TObject; Node: TTreeNode); private FOptionsEditorList: TOptionsEditorViews; FOldEditor: TOptionsEditorView; function CreateEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; procedure CreateOptionsEditorList; function GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; procedure LoadSettings; procedure SelectEditor(EditorClassName: String); function CompareTwoNodeOfConfigurationOptionTree(Node1, Node2: TTreeNode): integer; public constructor Create(TheOwner: TComponent); override; constructor Create(TheOwner: TComponent; EditorClass: TOptionsEditorClass); overload; constructor Create(TheOwner: TComponent; EditorClassName: String); overload; procedure LoadConfig; procedure SaveConfig; end; function ShowOptions(EditorClass: TOptionsEditorClass = nil): IOptionsDialog; function ShowOptions(EditorClassName: String): IOptionsDialog; procedure SortConfigurationOptionsOnLeftTree; //If the var "frmOptions" would be in the interface section, we could have called directly "frmOptions.tvTreeView.CustomSort(@frmOptions.CompareTwoNodeOfConfigurationOptionTree);" //But it's not the case... Let's create this routine and respect the wish of original authors to have it there. Maybe there is a raison why so let's play safe. function GetOptionsForm: TfrmOptions; implementation {$R *.lfm} uses LCLProc, LCLVersion, uLng, fMain; var LastOpenedEditor: TOptionsEditorClass = nil; frmOptions: TfrmOptions = nil; { GetOptionsForm } // To get a point on the frmOptions. // Could have been simple to place "frmOptions" in the "interface" section but not sure why original author hide it under. Let's play safe. function GetOptionsForm: TfrmOptions; begin result := frmOptions; end; function ShowOptions(EditorClass: TOptionsEditorClass): IOptionsDialog; begin Result := ShowOptions(EditorClass.ClassName); end; function ShowOptions(EditorClassName: String): IOptionsDialog; begin if Assigned(frmOptions) then begin if frmOptions.WindowState = wsMinimized then frmOptions.WindowState:= wsNormal else frmOptions.BringToFront; frmOptions.SelectEditor(EditorClassName); end else begin if EditorClassName = '' then frmOptions := TfrmOptions.Create(Application) else frmOptions := TfrmOptions.Create(Application, EditorClassName); frmOptions.Show; end; Result := frmOptions; end; procedure SortConfigurationOptionsOnLeftTree; begin if frmOptions<>nil then frmOptions.tvTreeView.CustomSort(@frmOptions.CompareTwoNodeOfConfigurationOptionTree); end; procedure TfrmOptions.FormCreate(Sender: TObject); begin // Initialize property storage InitPropStorage(Self); end; procedure TfrmOptions.FormClose(Sender: TObject; var CloseAction: TCloseAction); begin CloseAction:= caFree; frmOptions:= nil; end; procedure TfrmOptions.FormCloseQuery(Sender: TObject; var CanClose: boolean); var I:integer; NeedsUpdateWindowView:boolean=FALSE; begin CanClose:=TRUE; I:=0; while (I<FOptionsEditorList.Count) AND (CanClose) do begin if Assigned(FOptionsEditorList[I].Instance) then CanClose:=FOptionsEditorList[I].Instance.CanWeClose(NeedsUpdateWindowView); inc(I); end; if NeedsUpdateWindowView then frmMain.UpdateWindowView; end; procedure TfrmOptions.btnCancelClick(Sender: TObject); begin // close window Close; end; procedure TfrmOptions.btnOKClick(Sender: TObject); begin // save all configuration SaveConfig; // write to config file SaveGlobs; // close window Close; end; procedure TfrmOptions.btnApplyClick(Sender: TObject); begin // save all configuration SaveConfig; // write to config file SaveGlobs; end; procedure TfrmOptions.FormDestroy(Sender: TObject); begin FreeThenNil(FOptionsEditorList); end; function TfrmOptions.CompareTwoNodeOfConfigurationOptionTree(Node1, Node2: TTreeNode): integer; begin case gSortOrderOfConfigurationOptionsTree of scoClassicLegacy: begin if TOptionsEditorView(Node1.Data).LegacyOrderIndex < TOptionsEditorView(Node2.Data).LegacyOrderIndex then result:=-1 else result:=1; end; scoAlphabeticalButLanguage: begin if TOptionsEditorView(Node1.Data).EditorClass.ClassName='TfrmOptionsLanguage' then result:=-1 else if TOptionsEditorView(Node2.Data).EditorClass.ClassName='TfrmOptionsLanguage' then result:=1 else result:=CompareStrings(Node1.Text,Node2.Text, gSortNatural, gSortCaseSensitivity) end; end; end; procedure TfrmOptions.CreateOptionsEditorList; procedure AddEditors(EditorClassList: TOptionsEditorClassList; RootNode: TTreeNode); var I: LongInt; aOptionsEditorClass: TOptionsEditorClass; aOptionsEditorView: TOptionsEditorView; TreeNode: TTreeNode; IconIndex: Integer; begin for I:= 0 to EditorClassList.Count - 1 do begin aOptionsEditorClass := EditorClassList[I].EditorClass; aOptionsEditorView := TOptionsEditorView.Create; aOptionsEditorView.EditorClass := aOptionsEditorClass; aOptionsEditorView.Instance := nil; aOptionsEditorView.LegacyOrderIndex:=I; FOptionsEditorList.Add(aOptionsEditorView); TreeNode := tvTreeView.Items.AddChild(RootNode, {$IF lcl_fullversion >= 093100} aOptionsEditorClass.GetTitle {$ELSE} StringReplace(aOptionsEditorClass.GetTitle, '&', '&&', [rfReplaceAll]) {$ENDIF} ); if Assigned(TreeNode) then begin IconIndex := aOptionsEditorClass.GetIconIndex; TreeNode.ImageIndex := IconIndex; TreeNode.SelectedIndex := IconIndex; TreeNode.StateIndex := IconIndex; TreeNode.Data := aOptionsEditorView; end; aOptionsEditorView.TreeNode := TreeNode; if EditorClassList[I].HasChildren then AddEditors(EditorClassList[I].Children, TreeNode); end; //2014-08-12:Let's sort by alphabetical order this list. tvTreeView.CustomSort(@CompareTwoNodeOfConfigurationOptionTree); end; begin FOptionsEditorList:= TOptionsEditorViews.Create; AddEditors(OptionsEditorClassList, nil); end; function TfrmOptions.GetEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; var I: Integer; begin for I := 0 to FOptionsEditorList.Count - 1 do begin if FOptionsEditorList[I].EditorClass = EditorClass then begin if not Assigned(FOptionsEditorList[I].Instance) then FOptionsEditorList[I].Instance := CreateEditor(FOptionsEditorList[I].EditorClass); Result := FOptionsEditorList[I].Instance; Exit; end; end; Result := nil; end; procedure TfrmOptions.LoadSettings; begin LoadConfig; end; procedure TfrmOptions.SelectEditor(EditorClassName: String); var I: Integer; begin for I := 0 to FOptionsEditorList.Count - 1 do begin if (FOptionsEditorList[I].EditorClass.ClassName = EditorClassName) then if Assigned(FOptionsEditorList[I].TreeNode) then begin FOptionsEditorList[I].TreeNode.Selected := True; Break; end; end; end; constructor TfrmOptions.Create(TheOwner: TComponent); begin if not Assigned(LastOpenedEditor) and (OptionsEditorClassList.Count > 0) then LastOpenedEditor := OptionsEditorClassList[0].EditorClass; // Select first editor. Create(TheOwner, LastOpenedEditor); end; constructor TfrmOptions.Create(TheOwner: TComponent; EditorClass: TOptionsEditorClass); begin if Assigned(EditorClass) then Create(TheOwner, EditorClass.ClassName) else Create(TheOwner, ''); end; constructor TfrmOptions.Create(TheOwner: TComponent; EditorClassName: String); begin if (EditorClassName = '') and Assigned(LastOpenedEditor) then EditorClassName := LastOpenedEditor.ClassName; FOldEditor := nil; inherited Create(TheOwner); CreateOptionsEditorList; SelectEditor(EditorClassName); end; procedure TfrmOptions.tvTreeViewChange(Sender: TObject; Node: TTreeNode); var SelectedEditorView: TOptionsEditorView; begin SelectedEditorView := TOptionsEditorView(Node.Data); if Assigned(SelectedEditorView) and (FOldEditor <> SelectedEditorView) then begin if Assigned(FOldEditor) and Assigned(FOldEditor.Instance) then FOldEditor.Instance.Visible := False; if not Assigned(SelectedEditorView.Instance) then SelectedEditorView.Instance := CreateEditor(SelectedEditorView.EditorClass); if Assigned(SelectedEditorView.Instance) then SelectedEditorView.Instance.Visible := True; lblEmptyEditor.Visible := not Assigned(SelectedEditorView.Instance); FOldEditor := SelectedEditorView; LastOpenedEditor := SelectedEditorView.EditorClass; pnlCaption.Caption := SelectedEditorView.EditorClass.GetTitle; end; end; function TfrmOptions.CreateEditor(EditorClass: TOptionsEditorClass): TOptionsEditor; begin if Assigned(EditorClass) and not EditorClass.IsEmpty then begin Result := EditorClass.Create(Self); Result.Align := alClient; Result.Visible := False; Result.Init(sboxOptionsEditor, Self, [oeifLoad]); end else Result := nil; end; procedure TfrmOptions.LoadConfig; var I: LongInt; begin { Load options to frames } for I:= 0 to FOptionsEditorList.Count - 1 do begin if Assigned(FOptionsEditorList[I].Instance) then FOptionsEditorList[I].Instance.LoadSettings; end; end; procedure TfrmOptions.SaveConfig; var I: LongInt; NeedsRestart: Boolean = False; begin { Save options from frames } for I:= 0 to FOptionsEditorList.Count - 1 do begin if Assigned(FOptionsEditorList[I].Instance) then try if oesfNeedsRestart in FOptionsEditorList[I].Instance.SaveSettings then NeedsRestart := True; except on E: Exception do MessageDlg(FOptionsEditorList[I].Instance.GetTitle, E.Message, mtError, [mbOK], 0); end; end; if NeedsRestart then MessageDlg(rsMsgRestartForApplyChanges, mtInformation, [mbOK], 0); frmMain.UpdateWindowView; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmaskinputdlg.lfm���������������������������������������������������������������0000644�0001750�0000144�00000007237�12451476632�016677� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmMaskInputDlg: TfrmMaskInputDlg Left = 404 Height = 231 Top = 635 Width = 331 BorderIcons = [biSystemMenu] ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 231 ClientWidth = 331 OnCreate = FormCreate Position = poScreenCenter SessionProperties = 'Height;Width' LCLVersion = '1.2.4.0' object lblPrompt: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 1 Top = 10 Width = 311 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Right = 10 ParentColor = False WordWrap = True end object lblSearchTemplate: TLabel AnchorSideLeft.Control = cmbMask AnchorSideTop.Control = cmbMask AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 46 Width = 185 BorderSpacing.Top = 6 Caption = 'O&r select predefined selection type:' FocusControl = lbxSearchTemplate ParentColor = False WordWrap = True end object cmbMask: TComboBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblPrompt AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 17 Width = 311 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 10 BorderSpacing.Top = 6 BorderSpacing.Right = 10 DropDownCount = 10 ItemHeight = 15 TabOrder = 0 end object btnOK: TBitBtn AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lbxSearchTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnCancel Left = 115 Height = 30 Top = 193 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&OK' Constraints.MinWidth = 100 Default = True Kind = bkOK ModalResult = 1 TabOrder = 3 end object btnCancel: TBitBtn AnchorSideTop.Control = lbxSearchTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = lbxSearchTemplate AnchorSideRight.Side = asrBottom Left = 221 Height = 30 Top = 193 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.InnerBorder = 2 Cancel = True Caption = '&Cancel' Constraints.MinWidth = 100 Kind = bkCancel ModalResult = 2 TabOrder = 4 end object lbxSearchTemplate: TListBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblSearchTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 10 Height = 120 Top = 67 Width = 311 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Left = 10 BorderSpacing.Top = 6 BorderSpacing.Right = 10 ItemHeight = 0 OnClick = lbxSearchTemplateClick OnDblClick = lbxSearchTemplateDblClick ScrollWidth = 317 Sorted = True TabOrder = 1 end object btnDefineTemplate: TBitBtn AnchorSideTop.Control = lbxSearchTemplate AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnOK AnchorSideBottom.Control = btnCancel AnchorSideBottom.Side = asrBottom Left = 9 Height = 30 Top = 193 Width = 100 Anchors = [akTop, akRight, akBottom] AutoSize = True BorderSpacing.Top = 6 BorderSpacing.Right = 6 BorderSpacing.InnerBorder = 2 Caption = '&Define...' Constraints.MinWidth = 100 OnClick = btnDefineTemplateClick TabOrder = 2 end end �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsyncdirsdlg.lfm����������������������������������������������������������������0000644�0001750�0000144�00000067437�12546157411�016526� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmSyncDirsDlg: TfrmSyncDirsDlg Left = 250 Height = 438 Top = 140 Width = 691 Caption = 'Synchronize directories' ClientHeight = 438 ClientWidth = 691 KeyPreview = True OnClose = FormClose OnCreate = FormCreate OnKeyDown = FormKeyDown Position = poScreenCenter SessionProperties = 'Height;Left;Top;Width;WindowState' ShowInTaskBar = stAlways LCLVersion = '1.2.4.0' object edPath1: TEdit AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir1 Left = 3 Height = 27 Top = 3 Width = 254 Anchors = [akTop, akLeft, akRight] BorderSpacing.Around = 3 TabOrder = 1 end object edPath2: TEdit AnchorSideLeft.Control = cbExtFilter AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = btnSelDir2 Left = 407 Height = 27 Top = 3 Width = 251 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 3 BorderSpacing.Around = 3 TabOrder = 3 end object cbExtFilter: TComboBox AnchorSideLeft.Control = Owner AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = Owner Left = 290 Height = 27 Top = 3 Width = 111 BorderSpacing.Top = 3 ItemHeight = 0 ItemIndex = 0 Items.Strings = ( '*.*' ) TabOrder = 0 Text = '*.*' end object btnSelDir1: TButton AnchorSideTop.Control = edPath1 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbExtFilter Left = 260 Height = 27 Top = 3 Width = 24 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Around = 3 Caption = '>>' OnClick = btnSelDir1Click TabOrder = 2 end object btnSelDir2: TButton Tag = 1 AnchorSideTop.Control = edPath2 AnchorSideTop.Side = asrCenter AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 661 Height = 27 Top = 3 Width = 24 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 3 BorderSpacing.Around = 3 Caption = '>>' OnClick = btnSelDir1Click TabOrder = 4 end object TopPanel: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnSelDir1 AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 86 Top = 33 Width = 691 Anchors = [akTop, akLeft, akRight] AutoSize = True ClientHeight = 86 ClientWidth = 691 TabOrder = 5 object LeftPanel1: TPanel AnchorSideLeft.Control = TopPanel AnchorSideTop.Control = TopPanel Left = 1 Height = 74 Top = 1 Width = 107 AutoSize = True BevelOuter = bvNone ClientHeight = 74 ClientWidth = 107 TabOrder = 0 object btnCompare: TButton AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = LeftPanel1 Left = 3 Height = 27 Top = 3 Width = 65 AutoSize = True BorderSpacing.Around = 3 Caption = 'Compare' Default = True OnClick = btnCompareClick TabOrder = 0 end object chkOnlySelected: TCheckBox AnchorSideLeft.Control = LeftPanel1 AnchorSideTop.Control = btnCompare AnchorSideTop.Side = asrBottom Left = 3 Height = 21 Top = 33 Width = 101 BorderSpacing.Around = 3 Caption = 'only selected' Enabled = False TabOrder = 1 end object Label1: TLabel AnchorSideLeft.Control = chkOnlySelected AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = chkOnlySelected AnchorSideTop.Side = asrBottom Left = 2 Height = 17 Top = 57 Width = 102 Caption = '(in main window)' Enabled = False ParentColor = False end end object LeftPanel2: TPanel AnchorSideLeft.Control = LeftPanel1 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 113 Height = 84 Top = 1 Width = 93 AutoSize = True BorderSpacing.Left = 5 BevelOuter = bvNone ClientHeight = 84 ClientWidth = 93 TabOrder = 1 object chkAsymmetric: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = LeftPanel2 Left = 0 Height = 21 Top = 0 Width = 93 Caption = 'asymmetric' Enabled = False TabOrder = 0 end object chkSubDirs: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkAsymmetric AnchorSideTop.Side = asrBottom Left = 0 Height = 21 Top = 21 Width = 68 Caption = 'Subdirs' TabOrder = 1 end object chkByContent: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkSubDirs AnchorSideTop.Side = asrBottom Left = 0 Height = 21 Top = 42 Width = 88 Caption = 'by content' TabOrder = 2 end object chkIgnoreDate: TCheckBox AnchorSideLeft.Control = LeftPanel2 AnchorSideTop.Control = chkByContent AnchorSideTop.Side = asrBottom Left = 0 Height = 21 Top = 63 Width = 91 Caption = 'ignore date' TabOrder = 3 end end object GroupBox1: TGroupBox AnchorSideLeft.Control = LeftPanel2 AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = TopPanel Left = 211 Height = 64 Top = 1 Width = 202 AutoSize = True BorderSpacing.Left = 5 Caption = 'Show:' ClientHeight = 45 ClientWidth = 198 TabOrder = 2 object sbCopyRight: TSpeedButton AnchorSideLeft.Control = GroupBox1 AnchorSideTop.Control = GroupBox1 Left = 6 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '>' Down = True GroupIndex = 1 OnClick = FilterSpeedButtonClick end object sbEqual: TSpeedButton AnchorSideLeft.Control = sbCopyRight AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 32 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '=' Down = True GroupIndex = 2 OnClick = FilterSpeedButtonClick end object sbNotEqual: TSpeedButton AnchorSideLeft.Control = sbEqual AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 58 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '!=' Down = True GroupIndex = 3 OnClick = FilterSpeedButtonClick end object sbCopyLeft: TSpeedButton AnchorSideLeft.Control = sbNotEqual AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbCopyRight Left = 84 Height = 24 Top = 6 Width = 24 AllowAllUp = True BorderSpacing.Left = 2 Caption = '<' Down = True GroupIndex = 4 OnClick = FilterSpeedButtonClick end object sbDuplicates: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = GroupBox1 Left = 112 Height = 18 Top = 0 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Right = 6 Caption = 'duplicates' Down = True GroupIndex = 5 OnClick = FilterSpeedButtonClick end object sbSingles: TSpeedButton AnchorSideLeft.Control = sbCopyLeft AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = sbDuplicates AnchorSideTop.Side = asrBottom Left = 112 Height = 18 Top = 21 Width = 80 AllowAllUp = True BorderSpacing.Left = 4 BorderSpacing.Top = 3 BorderSpacing.Bottom = 6 Caption = 'singles' Down = True GroupIndex = 6 OnClick = FilterSpeedButtonClick end end object btnSynchronize: TButton AnchorSideTop.Control = TopPanel AnchorSideRight.Control = TopPanel AnchorSideRight.Side = asrBottom Left = 601 Height = 27 Top = 7 Width = 83 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Around = 6 Caption = 'Synchronize' Enabled = False OnClick = btnSynchronizeClick TabOrder = 3 end object btnClose: TButton AnchorSideLeft.Control = btnSynchronize AnchorSideTop.Control = btnSynchronize AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSynchronize AnchorSideRight.Side = asrBottom Left = 601 Height = 27 Top = 40 Width = 83 Anchors = [akTop, akLeft, akRight] AutoSize = True Cancel = True Caption = 'Close' OnClick = btnCloseClick TabOrder = 4 end end object StatusBar1: TStatusBar Left = 0 Height = 21 Top = 417 Width = 691 Panels = < item Text = 'Please press "Compare" to start' Width = 50 end> SimplePanel = False end object HeaderDG: TDrawGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = TopPanel AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 0 Height = 20 Top = 119 Width = 691 Anchors = [akTop, akLeft, akRight] AutoFillColumns = True BorderStyle = bsNone ColCount = 7 Columns = < item SizePriority = 0 Title.Caption = 'Name' Width = 250 end item SizePriority = 0 Title.Caption = 'Size' Width = 150 end item SizePriority = 0 Title.Caption = 'Date' Width = 170 end item SizePriority = 0 Title.Caption = '<=>' Width = 30 end item SizePriority = 0 Title.Caption = 'Date' Width = 170 end item SizePriority = 0 Title.Caption = 'Size' Width = 120 end item Title.Caption = 'Name' Width = 0 end> ExtendedSelect = False FixedCols = 0 Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goColSizing, goSmoothScroll, goHeaderPushedLook] RowCount = 1 ScrollBars = ssNone TabOrder = 7 OnHeaderClick = HeaderDGHeaderClick OnHeaderSizing = HeaderDGHeaderSizing ColWidths = ( 250 150 170 30 170 120 0 ) end object MainDrawGrid: TDrawGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = HeaderDG AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = StatusBar1 Left = 0 Height = 278 Top = 139 Width = 691 Anchors = [akTop, akLeft, akRight, akBottom] AutoFillColumns = True ColCount = 0 ExtendedSelect = False FixedCols = 0 FixedRows = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goSmoothScroll, goHeaderPushedLook, goDontScrollPartCell] PopupMenu = pmGridMenu RowCount = 0 ScrollBars = ssAutoVertical TabOrder = 8 OnDblClick = MainDrawGridDblClick OnDrawCell = MainDrawGridDrawCell OnMouseDown = MainDrawGridMouseDown end object ImageList1: TImageList left = 256 top = 195 Bitmap = { 4C69070000001000000010000000C3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF150088FF150088FF150088FF150088FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF150088FF150088FFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF1500 88FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF1500 88FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFF150088FF150088FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000 EBFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000EBFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000EBFF0000EBFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000EBFF0000 EBFF0000EBFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000EBFF0000EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 EBFF0000EBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFCC48 3FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC483FFFCC48 3FFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFCC483FFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFCC483FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D 1BFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF3D8D 1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFF3D8D1BFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFF3D8D1BFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D8D1BFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFF0000 FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000FFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FF000000FF000000FF000000FF0000 00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000 00FF000000FF000000FFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FF000000FFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3C3FFC3C3 C3FFC3C3C3FFC3C3C3FFC3C3C3FF } end object pmGridMenu: TPopupMenu left = 121 top = 217 object MenuItemViewLeft: TMenuItem Caption = 'View left' ShortCut = 114 OnClick = MenuItemViewClick end object MenuItemViewRight: TMenuItem Caption = 'View right' ShortCut = 8306 OnClick = MenuItemViewClick end object MenuItemCompare: TMenuItem Caption = 'Compare' ShortCut = 16498 OnClick = MainDrawGridDblClick end end end ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fchecksumcalc.lrt���������������������������������������������������������������0000644�0001750�0000144�00000000436�12567134601�016632� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMCHECKSUMCALC.CAPTION=Calculate checksum... TFRMCHECKSUMCALC.LBLSAVETO.CAPTION=&Save checksum file(s) to: TFRMCHECKSUMCALC.CBSEPARATEFILE.CAPTION=C&reate separate checksum file for each file TFRMCHECKSUMCALC.CBOPENAFTERJOBISCOMPLETE.CAPTION=Open checksum file after job is completed ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufindbyrmr.pas������������������������������������������������������������������0000644�0001750�0000144�00000010524�12630374024�016175� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ implementing memory searching with case (any single-byte encoding) and mmap file to memory based on ufindmmap.pas by radek.cervinka@centrum.cz } unit uFindByrMr; {$mode objfpc}{$H+} interface type TAbortFunction = function: Boolean of object; TRecodeTable = array[0..255] of byte; function PosMemBoyerMur(pAdr: PChar; iLength: Integer; const sFindData: String; RecodeTable: TRecodeTable): Integer; {en Searches a file for a string using memory mapping. @param(sFileName File to search in.) @param(sFindData String to search for.) @param(RecodeTable table for case-insensitive compare) @param(Abort This function is called repeatedly during searching. If it returns @true the search is aborted.) @returns(-1 in case of error @br 0 if the string wasn't found @br 1 if the string was found) } function FindMmapBM(const sFileName: String; const sFindData: String; RecodeTable: TRecodeTable; Abort: TAbortFunction):Integer; {en Initializes table for recode from different encodings. @param(Encoding Name of encoding.) @param(bCaseSensitive If @true the search is case sensitive.) @returns(TRecodeTable array to use in FindMmap) } function InitRecodeTable(Encoding: String; bCaseSensitive: Boolean): TRecodeTable; implementation uses DCOSUtils, LConvEncoding, LazUTF8; type TIntArray = array of Integer; function InitRecodeTable(Encoding:string; bCaseSensitive: Boolean): TRecodeTable; var i:byte; c:string; begin for i:=0 to 255 do begin if bCaseSensitive then Result[i]:=i else begin c:=ConvertEncoding(chr(i), Encoding, EncodingUTF8); c:=UTF8UpperCase(c); c:=ConvertEncoding(c, EncodingUTF8, Encoding); if length(c)>0 then Result[i]:=ord(c[1]); end; end; end; function PosMemBoyerMur(pAdr: PChar; iLength: Integer; const sFindData: String; RecodeTable: TRecodeTable):Integer; function prefixFunc(s:string):TIntArray; var k,i:Integer; begin SetLength(Result, Length(s)+1); Result[0] := 0; Result[1] := 0; k := 0; for i := 2 to Length(s) do begin while (k > 0) and (s[k+1] <> s[i]) do k := Result[k]; if s[k+1] = s[i] then Inc(k); Result[i] := k; end; end; var StopTable:array[0..255] of byte; prefTable,pf1,pf2:TIntArray; i,j,len:Integer; curPos,curCharPos:Integer; encStr,rvrsStr:string; curChar:byte; begin Result:=-1; len:=Length(sFindData); encStr:=''; for i:=1 to len do encStr:=encStr+chr(RecodeTable[ord(sFindData[i])]); rvrsStr:=''; for i:=len downto 1 do rvrsStr:=rvrsStr+encStr[i]; for i:=0 to 255 do StopTable[i]:=0; for i:=len-1 downto 1 do if StopTable[ord(encStr[i])]=0 then StopTable[ord(encStr[i])]:=i; //Calc prefix table pf1:=prefixFunc(encStr); pf2:=prefixFunc(rvrsStr); setLength(prefTable,len+1); for j:=0 to len do prefTable[j]:= len - pf1[len]; for i:=1 to len do begin j:= len - pf2[i]; if i - pf2[i] < prefTable[j] then prefTable[j]:= i - pf2[i]; end; curPos:=0; while curPos<=iLength-len do begin curCharPos:=len; curChar:=RecodeTable[ord((pAdr+curPos+curCharPos-1)^)]; while (curCharPos>0) do begin if (curChar<>byte(encStr[curCharPos])) then break; dec(curCharPos); if curCharPos>0 then curChar:=RecodeTable[ord((pAdr+curPos+curCharPos-1)^)]; end; if curCharPos=0 then begin//found Result:=curPos; exit; end else begin//shift if curCharPos=len then curPos:=curPos+len-StopTable[curChar] else curPos:=curPos+prefTable[curCharPos]; end end; end; function FindMmapBM(const sFileName, sFindData: String; RecodeTable: TRecodeTable; Abort: TAbortFunction):Integer; var fmr : TFileMapRec; begin Result := -1; if MapFile(sFileName, fmr) then begin try begin if PosMemBoyerMur(fmr.MappedFile, fmr.FileSize, sFindData, RecodeTable) <> -1 then Result := 1 else Result := 0; end; finally UnMapFile(fmr); end; end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udriveslist.pas�����������������������������������������������������������������0000644�0001750�0000144�00000037366�12624353307�016412� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Control that shows drives list and allows selecting a drive. Copyright (C) 2009-2011 Przemyslaw Nagay (cobines@gmail.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 uDrivesList; {$mode objfpc}{$H+} {$IFDEF MSWINDOWS} {$DEFINE ForceVirtualKeysShortcuts} {$ENDIF} interface uses Classes, SysUtils, Grids, Controls, LCLType, uFilePanelSelect, uDrive; type TDriveSelected = procedure (Sender: TObject; ADriveIndex: Integer; APanel: TFilePanelSelect) of object; { TDrivesListPopup } TDrivesListPopup = class(TStringGrid) private FDrivesList: TDrivesList; FPanel: TFilePanelSelect; FShortCuts: array of TUTF8Char; FAllowSelectDummyRow: Boolean; FOnDriveSelected: TDriveSelected; FOnClose: TNotifyEvent; {en @param(ARow Row nr in the grid (LowestRow..HighestRow).) } function GetDriveIndexByRow(ARow: Integer): Integer; function GetDrivesCount: Integer; function GetLowestRow: Integer; function GetHighestRow: Integer; procedure PrepareCanvasEvent(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); procedure SelectCellEvent(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); procedure EnterEvent(Sender: TObject); procedure ExitEvent(Sender: TObject); procedure KeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState); {$IFNDEF ForceVirtualKeysShortcuts} procedure KeyPressEvent(Sender: TObject; var Key: Char); procedure UTF8KeyPressEvent(Sender: TObject; var UTF8Key: TUTF8Char); {$ENDIF} procedure SelectDrive(ADriveIndex: Integer); procedure DoDriveSelected(ADriveIndex: Integer); procedure ShowContextMenu(ADriveIndex: Integer; X, Y: Integer); procedure ContextMenuClosed(Sender: TObject); {en Checks if the given shortcut is assigned to a drive. If it is then that drive is selected. @returns(@true if shortcut found, @false otherwise.) } function CheckShortcut(AShortcut: TUTF8Char): Boolean; procedure Close; procedure UpdateCells; procedure UpdateSize; property LowestRow: Integer read GetLowestRow; property HighestRow: Integer read GetHighestRow; protected procedure DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Paint; override; public constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; procedure UpdateDrivesList(ADrivesList: TDrivesList); procedure UpdateView; {en Shows the drive list. @param(AtPoint Position where to show the list.) @param(APanel For which panel the list is to be shown.) @param(ASelectedDriveIndex Which drive to pre-select (0..DrivesCount-1).) } procedure Show(AtPoint: TPoint; APanel: TFilePanelSelect; ASelectedDriveIndex: Integer = -1); procedure SetFocus; override; property Panel: TFilePanelSelect read FPanel; property DrivesCount: Integer read GetDrivesCount; property OnDriveSelected: TDriveSelected read FOnDriveSelected write FOnDriveSelected; property OnClose: TNotifyEvent read FOnClose write FOnClose; end; implementation uses StdCtrls, Graphics, LCLProc, uPixMapManager, uOSUtils, uDCUtils, uOSForms, uGlobs; const DriveIconSize = 16; // One dummy row is added, which is not displayed and cannot be selected. // It is used to simulate having no selection in the grid, because the // TCustomGrid forces at least one row/cell to be selected or focused. DummyRows = 1; constructor TDrivesListPopup.Create(AOwner: TComponent; AParent: TWinControl); begin inherited Create(AOwner); ControlStyle := ControlStyle + [csNoFocus]; Parent := AParent; FDrivesList := nil; FShortCuts := nil; FAllowSelectDummyRow := False; FOnDriveSelected := nil; FOnClose := nil; AllowOutboundEvents := False; AutoFillColumns := False; BorderStyle := bsNone; BorderWidth := 0; ExtendedSelect := False; Flat := False; FocusRectVisible := False; MouseWheelOption := mwGrid; Options := [goRowSelect, goThumbTracking]; ScrollBars := ssNone; Visible := False; while Columns.Count < 5 do Columns.Add; RowCount := 0 + DummyRows; FixedCols := 0; FixedRows := 0; if DummyRows > 0 then RowHeights[FixedRows] := 1; // Every row must have Height > 0 Color := clBtnFace; Font.Color := clWindowText; OnPrepareCanvas := @PrepareCanvasEvent; OnSelectCell := @SelectCellEvent; OnEnter := @EnterEvent; OnExit := @ExitEvent; OnKeyDown := @KeyDownEvent; {$IFNDEF ForceVirtualKeysShortcuts} OnKeyPress := @KeyPressEvent; OnUTF8KeyPress := @UTF8KeyPressEvent; {$ENDIF} end; procedure TDrivesListPopup.UpdateDrivesList(ADrivesList: TDrivesList); begin FDrivesList := ADrivesList; RowCount := LowestRow + ADrivesList.Count; Clean; SetLength(FShortCuts, ADrivesList.Count); // If currently visible update the grid. if IsVisible then begin UpdateCells; UpdateSize; end; end; procedure TDrivesListPopup.UpdateView; begin Columns.Items[2].Visible := dlbShowLabel in gDrivesListButtonOptions; Columns.Items[3].Visible := dlbShowFileSystem in gDrivesListButtonOptions; Columns.Items[4].Visible := dlbShowFreeSpace in gDrivesListButtonOptions; end; procedure TDrivesListPopup.Show(AtPoint: TPoint; APanel: TFilePanelSelect; ASelectedDriveIndex: Integer = -1); begin UpdateCells; UpdateSize; FPanel := APanel; Left := AtPoint.X; Top := AtPoint.Y; Visible := True; ASelectedDriveIndex := LowestRow + ASelectedDriveIndex; if (ASelectedDriveIndex >= LowestRow) and (ASelectedDriveIndex <= HighestRow) then Row := ASelectedDriveIndex else begin FAllowSelectDummyRow := True; Row := FixedRows; // Select dummy row to clear selection FAllowSelectDummyRow := False; end; // Set focus using parent procedure. inherited SetFocus; end; procedure TDrivesListPopup.SetFocus; begin // Empty - don't allow setting focus. end; procedure TDrivesListPopup.PrepareCanvasEvent(Sender: TObject; aCol, aRow: Integer; aState: TGridDrawState); var ts: TTextStyle; begin if aCol = 4 then begin // Right-align free space text in third column. ts := Canvas.TextStyle; ts.Alignment := taRightJustify; Canvas.TextStyle := ts; end else if aCol > 0 then begin // Left-align other columns (except column 0 which shows the icon). ts := Canvas.TextStyle; ts.Alignment := taLeftJustify; Canvas.TextStyle := ts; end; end; function TDrivesListPopup.GetDriveIndexByRow(ARow: Integer): Integer; begin if (ARow >= LowestRow) and (ARow <= HighestRow) then Result := ARow - LowestRow else Result := -1; end; function TDrivesListPopup.GetDrivesCount: Integer; begin Result := HighestRow - LowestRow + 1; end; function TDrivesListPopup.GetLowestRow: Integer; begin Result := FixedRows + DummyRows; end; function TDrivesListPopup.GetHighestRow: Integer; begin Result := RowCount - 1; end; procedure TDrivesListPopup.DrawCell(aCol, aRow: Integer; aRect: TRect; aState: TGridDrawState); var Drive: PDrive; BitmapTmp: TBitmap; begin if (aRow = FixedRows) and (DummyRows > 0) then // Don't draw the dummy row. Exit else if (aCol = 0) and (aRow >= LowestRow) then begin inherited; // Draw drive icon in the first column. Drive := FDrivesList.Items[GetDriveIndexByRow(aRow)]; // get disk icon BitmapTmp := PixMapManager.GetDriveIcon(Drive, DriveIconSize, Self.Color); if Assigned(BitmapTmp) then begin // Center icon in the cell. aRect.Left := aRect.Left + (ColWidths[aCol] - DriveIconSize) div 2; aRect.Top := aRect.Top + (RowHeights[aRow] - DriveIconSize) div 2; Canvas.Draw(aRect.Left, aRect.Top, BitmapTmp); FreeAndNil(BitmapTmp); end; end else begin inherited; // Draw vertical lines separating cells, but only in columns other than first. with Canvas, aRect do begin MoveTo(Right - 1, Top); LineTo(Right - 1, Bottom); end; end; end; procedure TDrivesListPopup.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseDown (don't call inherited). if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) then Close else begin MouseToCell(X, Y, ACol, ARow); if (ACol < 0) or (ARow < 0) then Close else begin case Button of mbLeft: SelectDrive(GetDriveIndexByRow(ARow)); mbRight: ShowContextMenu(GetDriveIndexByRow(ARow), X, Y); end; end; end; end; procedure TDrivesListPopup.MouseMove(Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseMove (don't call inherited). if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) then Exit; MouseToCell(X, Y, ACol, ARow); if (ACol >= 0) and (ARow >= 0) then Row := ARow; end; procedure TDrivesListPopup.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var ACol, ARow: Integer; begin // Totally override MouseUp (don't call inherited). MouseToCell(X, Y, ACol, ARow); if (X < 0) or (Y < 0) or (X >= Width) or (Y >= Height) or (ACol < 0) or (ARow < 0) then Close; end; procedure TDrivesListPopup.Paint; var ARect: TRect; begin {$IFDEF LCLQT} // In QT Frame3d draws filled rectangle, so it must be drawn before // or it would overwrite all the painting done below. ARect := Classes.Rect(0, 0, Width, Height); Canvas.Frame3d(ARect, 1, bvRaised); {$ENDIF} inherited Paint; {$IFNDEF LCLQT} // This draws empty frame rectangle. ARect := Classes.Rect(0, 0, Width, Height); Canvas.Frame3d(ARect, 1, bvRaised); {$ENDIF} end; procedure TDrivesListPopup.SelectCellEvent(Sender: TObject; aCol, aRow: Integer; var CanSelect: Boolean); begin // Don't allow selecting dummy row. if (not FAllowSelectDummyRow) and (DummyRows > 0) then CanSelect := aRow > FixedRows else CanSelect := True; end; procedure TDrivesListPopup.EnterEvent(Sender: TObject); begin // Mouse capture is needed for detecting when mouse is clicked outside the control. // This also recaptures mouse if user switched to another application and back. MouseCapture := True; end; procedure TDrivesListPopup.ExitEvent(Sender: TObject); begin Close; end; procedure TDrivesListPopup.KeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState); var Rect: TRect; begin case Key of VK_HOME, VK_PRIOR: begin Row := LowestRow; Key := 0; end; VK_END, VK_NEXT: begin Row := HighestRow; Key := 0; end; VK_UP, VK_LEFT: begin if Row > LowestRow then Row := Row - 1 // If dummy row selected then select the last row. else if Row = FixedRows then Row := HighestRow; Key := 0; end; VK_DOWN, VK_RIGHT: begin if Row < HighestRow then Row := Row + 1; Key := 0; end; VK_RETURN, VK_SELECT, VK_SPACE: begin SelectDrive(GetDriveIndexByRow(Row)); Key := 0; end; VK_ESCAPE: begin Close; Key := 0; end; VK_APPS: begin Rect := CellRect(2, Row); ShowContextMenu(GetDriveIndexByRow(Row), Rect.Left, Rect.Top); Key := 0; end; {$IFDEF ForceVirtualKeysShortcuts} else if (CheckShortcut(TUTF8Char(Char(Key)))) then Key := 0; {$ENDIF} end; end; {$IFNDEF ForceVirtualKeysShortcuts} procedure TDrivesListPopup.KeyPressEvent(Sender: TObject; var Key: Char); begin if CheckShortcut(TUTF8Char(Key)) then Key := #0; end; procedure TDrivesListPopup.UTF8KeyPressEvent(Sender: TObject; var UTF8Key: TUTF8Char); begin if CheckShortcut(UTF8Key) then UTF8Key := ''; end; {$ENDIF} procedure TDrivesListPopup.SelectDrive(ADriveIndex: Integer); begin if (ADriveIndex >= 0) and (ADriveIndex < DrivesCount) then begin MouseCapture := False; DoDriveSelected(ADriveIndex); Close; end; end; procedure TDrivesListPopup.DoDriveSelected(ADriveIndex: Integer); begin if Assigned(FOnDriveSelected) then FOnDriveSelected(Self, ADriveIndex, FPanel); end; procedure TDrivesListPopup.ShowContextMenu(ADriveIndex: Integer; X, Y: Integer); var pt: TPoint; begin if (ADriveIndex >= 0) and (ADriveIndex < FDrivesList.Count) then begin pt.X := X; pt.Y := Y; pt := ClientToScreen(pt); // Context menu usually captures mouse so we have to disable ours. MouseCapture := False; ShowDriveContextMenu(Self, FDrivesList[ADriveIndex], pt.X, pt.Y, @ContextMenuClosed); end; end; procedure TDrivesListPopup.ContextMenuClosed(Sender: TObject); begin MouseCapture := True; end; function TDrivesListPopup.CheckShortcut(AShortcut: TUTF8Char): Boolean; var i: Integer; begin for i := 0 to Length(FShortCuts) - 1 do begin if FShortCuts[i] = AShortcut then begin SelectDrive(i); Exit(True); end; end; Result := False; end; procedure TDrivesListPopup.Close; begin MouseCapture := False; Visible := False; if Assigned(FOnClose) then FOnClose(Self); end; procedure TDrivesListPopup.UpdateCells; var I, RowNr : Integer; FreeSize, TotalSize: Int64; Drive: PDrive; begin for I := 0 to FDrivesList.Count - 1 do begin Drive := FDrivesList[I]; RowNr := LowestRow + I; if Length(Drive^.DisplayName) > 0 then begin Cells[1, RowNr] := Drive^.DisplayName; {$IFDEF ForceVirtualKeysShortcuts} FShortCuts[I] := UTF8Copy(UpperCase(Drive^.DisplayName), 1, 1); {$ELSE} FShortCuts[I] := UTF8Copy(Drive^.DisplayName, 1, 1); {$ENDIF} end else begin Cells[1, RowNr] := Drive^.Path; FShortCuts[I] := ''; end; Cells[2, RowNr] := GetDriveLabelOrStatus(Drive); Cells[3, RowNr] := Drive^.FileSystem; // Display free space only for some drives // (removable, network, etc. may be slow). if (Drive^.DriveType in [dtHardDisk, dtOptical, dtRamDisk]) and IsAvailable(Drive, False) and GetDiskFreeSpace(Drive^.Path, FreeSize, TotalSize) then begin Cells[4, RowNr] := Format('%s/%s', [cnvFormatFileSize(FreeSize, True), cnvFormatFileSize(TotalSize, True)]) end; end; // for end; procedure TDrivesListPopup.UpdateSize; var I : Integer; w, h: Integer; begin // Needed for autosizing to work before the control is visible. HandleNeeded; AutoSizeColumns; // Add some space to the icon column. ColWidths[0] := DriveIconSize + 8; // Add some space to other columns. for I := 1 to ColCount - 1 do ColWidths[I] := ColWidths[I] + 4; w := GridWidth; h := GridHeight; if DummyRows > 0 then Inc(h, RowHeights[FixedRows] + GridLineWidth); Width := w; Height := h; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fmultirename.lfm����������������������������������������������������������������0000644�0001750�0000144�00000046650�12456274747�016531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object frmMultiRename: TfrmMultiRename Left = 299 Height = 465 Top = 143 Width = 803 Caption = 'MultiRename' ClientHeight = 465 ClientWidth = 803 OnClose = FormClose OnCreate = FormCreate OnShow = FormShow Position = poScreenCenter SessionProperties = 'Height;Width;WindowState;Left;Top' ShowInTaskBar = stAlways LCLVersion = '1.2.6.0' object StringGrid: TStringGrid Left = 6 Height = 233 Top = 6 Width = 791 Align = alClient AutoFillColumns = True BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 ColCount = 3 Columns = < item SizePriority = 0 Title.Caption = 'Old File Name' Width = 248 end item SizePriority = 0 Title.Caption = 'New File Name' Width = 249 end item Title.Caption = 'File Path' Width = 292 end> ExtendedSelect = False FixedCols = 0 MouseWheelOption = mwGrid Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goRowSelect, goSmoothScroll] RowCount = 1 TabOrder = 0 TitleStyle = tsNative OnKeyDown = StringGridKeyDown OnMouseDown = StringGridMouseDown OnMouseUp = StringGridMouseUp OnResize = StringGridTopLeftChanged OnSelection = StringGridSelection OnTopLeftChanged = StringGridTopLeftChanged ColWidths = ( 248 249 292 ) end object pnlOptions: TPanel Left = 6 Height = 214 Top = 245 Width = 791 Align = alBottom AutoSize = True BorderSpacing.Around = 6 BevelOuter = bvNone ClientHeight = 214 ClientWidth = 791 TabOrder = 1 object gbMaska: TGroupBox AnchorSideLeft.Control = pnlOptions AnchorSideTop.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 0 Height = 118 Top = 0 Width = 342 AutoSize = True Caption = 'Mask' ClientHeight = 101 ClientWidth = 338 TabOrder = 0 object lbName: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = gbMaska Left = 6 Height = 16 Top = 1 Width = 58 BorderSpacing.Left = 6 BorderSpacing.Top = 1 Caption = 'File &Name' FocusControl = edName ParentColor = False end object lbExt: TLabel AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = cmbNameStyle AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 56 Width = 59 BorderSpacing.Left = 6 BorderSpacing.Top = 10 Caption = '&Extension' FocusControl = edExt ParentColor = False end object edName: TEdit AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbName AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 19 Width = 136 BorderSpacing.Left = 6 BorderSpacing.Top = 2 OnChange = cmbNameStyleChange TabOrder = 0 end object edExt: TEdit Tag = 25 AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = lbExt AnchorSideTop.Side = asrBottom Left = 6 Height = 25 Top = 74 Width = 136 BorderSpacing.Left = 6 BorderSpacing.Top = 2 OnChange = cmbNameStyleChange TabOrder = 3 end object btnNameMenu: TButton AnchorSideLeft.Control = edName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edName AnchorSideBottom.Control = edName AnchorSideBottom.Side = asrBottom Left = 146 Height = 25 Top = 19 Width = 20 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnNameMenuClick PopupMenu = ppNameMenu TabOrder = 1 end object btnExtMenu: TButton AnchorSideLeft.Control = edExt AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = edExt AnchorSideBottom.Control = edExt AnchorSideBottom.Side = asrBottom Left = 146 Height = 25 Top = 74 Width = 20 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 4 BorderSpacing.InnerBorder = 4 Caption = '...' OnClick = btnExtMenuClick PopupMenu = ppNameMenu TabOrder = 4 end object cmbNameStyle: TComboBox AnchorSideLeft.Control = btnNameMenu AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnNameMenu AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 170 Height = 29 Top = 17 Width = 164 BorderSpacing.Left = 4 BorderSpacing.Right = 4 ItemHeight = 0 OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 2 end object cmbExtensionStyle: TComboBox AnchorSideLeft.Control = btnExtMenu AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnExtMenu AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 170 Height = 29 Top = 72 Width = 164 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Right = 4 ItemHeight = 0 OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 5 end end object gbFindReplace: TGroupBox AnchorSideLeft.Control = gbMaska AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbMaska AnchorSideRight.Control = gbCounter AnchorSideBottom.Side = asrBottom Left = 348 Height = 181 Top = 0 Width = 236 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = 'Find && Replace' ChildSizing.TopBottomSpacing = 2 ClientHeight = 164 ClientWidth = 232 TabOrder = 2 object lbFind: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = gbFindReplace Left = 6 Height = 16 Top = 6 Width = 35 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = '&Find...' FocusControl = edFind ParentColor = False end object lbReplace: TLabel AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = edFind AnchorSideTop.Side = asrBottom Left = 6 Height = 16 Top = 55 Width = 56 BorderSpacing.Left = 6 BorderSpacing.Top = 6 Caption = 'Re&place...' FocusControl = edReplace ParentColor = False end object edFind: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbFind AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 25 Top = 24 Width = 224 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 2 BorderSpacing.Right = 4 OnChange = cmbNameStyleChange TabOrder = 0 end object edReplace: TEdit AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = lbReplace AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbFindReplace AnchorSideRight.Side = asrBottom Left = 4 Height = 25 Top = 73 Width = 224 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 2 BorderSpacing.Right = 4 OnChange = cmbNameStyleChange TabOrder = 1 end object cbRegExp: TCheckBox AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = edReplace AnchorSideTop.Side = asrBottom Left = 4 Height = 22 Top = 108 Width = 143 BorderSpacing.Left = 4 BorderSpacing.Top = 10 Caption = 'Regular e&xpressions' OnChange = cbRegExpChange TabOrder = 2 end object cbUseSubs: TCheckBox AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = cbRegExp AnchorSideTop.Side = asrBottom Left = 4 Height = 22 Top = 140 Width = 119 BorderSpacing.Left = 4 BorderSpacing.Top = 10 Caption = '&Use substitution' Enabled = False OnChange = cmbNameStyleChange TabOrder = 3 end end object gbCounter: TGroupBox AnchorSideLeft.Control = gbFindReplace AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = gbFindReplace AnchorSideRight.Control = pnlOptions AnchorSideRight.Side = asrBottom Left = 590 Height = 96 Top = 0 Width = 201 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = 'Counter' ChildSizing.LeftRightSpacing = 6 ChildSizing.HorizontalSpacing = 5 ChildSizing.VerticalSpacing = 2 ChildSizing.EnlargeHorizontal = crsScaleChilds ChildSizing.EnlargeVertical = crsScaleChilds ChildSizing.ShrinkHorizontal = crsScaleChilds ChildSizing.ShrinkVertical = crsScaleChilds ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 2 ClientHeight = 79 ClientWidth = 197 TabOrder = 3 object lbStNb: TLabel Left = 6 Height = 16 Top = 4 Width = 80 BorderSpacing.CellAlignVertical = ccaCenter Caption = 'S&tart Number' FocusControl = edPoc ParentColor = False end object edPoc: TEdit Left = 91 Height = 25 Top = 0 Width = 100 MaxLength = 10 OnChange = edPocChange TabOrder = 0 Text = '1' end object lbInterval: TLabel Left = 6 Height = 16 Top = 31 Width = 80 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Interval' FocusControl = edInterval ParentColor = False end object edInterval: TEdit Left = 91 Height = 25 Top = 27 Width = 100 MaxLength = 10 OnChange = edIntervalChange TabOrder = 2 Text = '1' end object lbWidth: TLabel Left = 6 Height = 16 Top = 58 Width = 80 BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Width' FocusControl = cmbxWidth ParentColor = False end object cmbxWidth: TComboBox Left = 91 Height = 25 Top = 54 Width = 100 ItemHeight = 0 ItemIndex = 0 Items.Strings = ( '01' '02' '03' '04' '05' '06' '07' '08' '09' '10' ) OnChange = cmbNameStyleChange Style = csDropDownList TabOrder = 1 Text = '01' end end object btnRename: TButton AnchorSideLeft.Control = btnRestore AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnRestore AnchorSideRight.Control = btnClose Left = 454 Height = 27 Top = 187 Width = 231 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Left = 6 Caption = '&Rename' Constraints.MinWidth = 100 Default = True OnClick = btnRenameClick TabOrder = 6 end object btnClose: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnRename AnchorSideRight.Control = gbCounter AnchorSideRight.Side = asrBottom Left = 691 Height = 27 Top = 187 Width = 100 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Left = 6 Cancel = True Caption = '&Close' Constraints.MinWidth = 100 OnClick = btnCloseClick TabOrder = 7 end object gbLog: TGroupBox AnchorSideLeft.Control = gbCounter AnchorSideTop.Control = gbCounter AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbCounter AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = gbFindReplace AnchorSideBottom.Side = asrBottom Left = 590 Height = 85 Top = 96 Width = 201 Anchors = [akTop, akLeft, akRight, akBottom] AutoSize = True Caption = 'Log Result' ClientHeight = 68 ClientWidth = 197 TabOrder = 4 object edFile: TEdit AnchorSideLeft.Control = gbLog AnchorSideTop.Control = cbLog AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbLog AnchorSideRight.Side = asrBottom Left = 4 Height = 25 Top = 28 Width = 189 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 4 BorderSpacing.Top = 4 BorderSpacing.Right = 4 TabOrder = 1 end object cbLog: TCheckBox AnchorSideLeft.Control = gbLog AnchorSideTop.Control = gbLog Left = 4 Height = 22 Top = 2 Width = 64 BorderSpacing.Left = 4 BorderSpacing.Top = 2 Caption = 'Ena&ble' OnClick = cbLogClick TabOrder = 0 end end object btnRestore: TButton AnchorSideLeft.Control = gbFindReplace AnchorSideTop.Control = gbFindReplace AnchorSideTop.Side = asrBottom Left = 348 Height = 27 Top = 187 Width = 100 AutoSize = True BorderSpacing.Top = 6 Caption = 'Reset &all' Constraints.MinWidth = 100 OnClick = btnRestoreClick TabOrder = 5 end object gbPresets: TGroupBox AnchorSideLeft.Control = gbMaska AnchorSideTop.Control = gbMaska AnchorSideTop.Side = asrBottom AnchorSideRight.Control = gbMaska AnchorSideRight.Side = asrBottom Left = 0 Height = 91 Top = 118 Width = 342 Anchors = [akTop, akLeft, akRight] AutoSize = True Caption = 'Presets' ClientHeight = 74 ClientWidth = 338 TabOrder = 1 object cbPresets: TComboBox AnchorSideLeft.Control = gbPresets AnchorSideTop.Control = gbPresets AnchorSideRight.Control = gbPresets AnchorSideRight.Side = asrBottom Left = 6 Height = 27 Top = 6 Width = 326 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 6 BorderSpacing.Top = 6 BorderSpacing.Right = 6 ItemHeight = 0 TabOrder = 0 end object btnLoadPreset: TButton AnchorSideLeft.Control = cbPresets AnchorSideTop.Control = cbPresets AnchorSideTop.Side = asrBottom Left = 6 Height = 27 Top = 41 Width = 100 AutoSize = True BorderSpacing.Top = 8 BorderSpacing.Bottom = 6 Caption = '&Load' Constraints.MinWidth = 100 OnClick = btnLoadPresetClick TabOrder = 1 end object btnSavePreset: TButton AnchorSideLeft.Control = cbPresets AnchorSideLeft.Side = asrCenter AnchorSideTop.Control = btnLoadPreset Left = 119 Height = 27 Top = 41 Width = 100 AutoSize = True BorderSpacing.CellAlignHorizontal = ccaCenter BorderSpacing.CellAlignVertical = ccaCenter Caption = '&Save' Constraints.MinWidth = 100 OnClick = btnSavePresetClick TabOrder = 2 end object btnDeletePreset: TButton AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = btnSavePreset AnchorSideRight.Control = cbPresets AnchorSideRight.Side = asrBottom Left = 232 Height = 27 Top = 41 Width = 100 Anchors = [akTop, akRight] AutoSize = True Caption = '&Delete' Constraints.MinWidth = 100 OnClick = btnDeletePresetClick TabOrder = 3 end end end object ppNameMenu: TPopupMenu AutoPopup = False left = 784 top = 168 object miNextName: TMenuItem Caption = 'Name...' object miName: TMenuItem Caption = '[N] Name' OnClick = NameClick end object miNameX: TMenuItem Caption = '[Nx] Character at position x' OnClick = NameXClick end object miNameXX: TMenuItem Caption = '[Nx:y] Characters from position x to y' OnClick = NameXXClick end end object N1: TMenuItem Caption = '-' end object miNextExtension: TMenuItem Caption = 'Extension...' object Extension: TMenuItem Caption = '[E] Extension' OnClick = ExtensionClick end object miExtensionX: TMenuItem Caption = '[Ex] Character at position x' OnClick = ExtensionXClick end object miExtensionXX: TMenuItem Caption = '[Ex:y] Characters from position x to y' OnClick = ExtensionXXClick end end object N2: TMenuItem Caption = '-' end object miCounter: TMenuItem Caption = '[C] Counter' OnClick = CounterClick end object N3: TMenuItem Caption = '-' end object miNext: TMenuItem Caption = 'Time...' object miYear: TMenuItem Caption = '[Y] Year (2 digits)' OnClick = miYearClick end object miYear1: TMenuItem Caption = '[YYYY] Year (4 digits)' OnClick = miYear1Click end object miMonth: TMenuItem Caption = '[M] Month' OnClick = miMonthClick end object miMonth1: TMenuItem Caption = '[MM] Month (2 digits)' OnClick = miMonth1Click end object miMonth2: TMenuItem Caption = '[MMM] Month name (short, e.g., "jan")' OnClick = miMonth2Click end object miMonth3: TMenuItem Caption = '[MMMM] Month name (long, e.g., "january")' OnClick = miMonth3Click end object miDay: TMenuItem Caption = '[D] Day' OnClick = miDayClick end object miDay1: TMenuItem Caption = '[DD] Day (2 digits)' OnClick = miDay1Click end object miDay2: TMenuItem Caption = '[DDD] Day of the week (short, e.g., "mon")' OnClick = miDay2Click end object miDay3: TMenuItem Caption = '[DDDD] Day of the week (long, e.g., "monday")' OnClick = miDay3Click end object N4: TMenuItem Caption = '-' end object miHour: TMenuItem Caption = '[h] Hour' OnClick = miHourClick end object miHour1: TMenuItem Caption = '[hh] Hour (2 digits)' OnClick = miHour1Click end object miMinute: TMenuItem Caption = '[n] Minute' OnClick = miMinuteClick end object miMinute1: TMenuItem Caption = '[nn] Minute (2 digits)' OnClick = miMinute1Click end object miSecond: TMenuItem Caption = '[s] Second' OnClick = miSecondClick end object miSecond1: TMenuItem Caption = '[ss] Second (2 digits)' OnClick = miSecond1Click end end object N5: TMenuItem Caption = '-' end object miPlugin: TMenuItem Caption = 'Plugin' end end end ����������������������������������������������������������������������������������������doublecmd-0.7.1/src/fsyncdirsperformdlg.pas���������������������������������������������������������0000644�0001750�0000144�00000001252�12546157411�020105� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fSyncDirsPerformDlg; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls, ButtonPanel; type { TfrmSyncDirsPerformDlg } TfrmSyncDirsPerformDlg = class(TForm) Bevel1: TBevel; ButtonPanel1: TButtonPanel; chkDeleteRight: TCheckBox; chkConfirmOverwrites: TCheckBox; chkLeftToRight: TCheckBox; chkRightToLeft: TCheckBox; edRightPath: TEdit; edLeftPath: TEdit; private { private declarations } public { public declarations } end; var frmSyncDirsPerformDlg: TfrmSyncDirsPerformDlg; implementation {$R *.lfm} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uexceptions.pas�����������������������������������������������������������������0000644�0001750�0000144�00000014034�12612505011�016352� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uExceptions; {$mode objfpc}{$H+} interface uses Classes, SysUtils; function ExceptionToString: String; procedure WriteExceptionToFile(const aFileName: String; const ExceptionText: String = ''); procedure WriteExceptionToErrorFile(const ExceptionText: String = ''); inline; procedure ShowExceptionDialog(const ExceptionText: String = ''); procedure ShowException(e: Exception); {en Log exception to file, show on console and show message dialog. Can be called from other threads. } procedure HandleException(e: Exception; AThread: TThread = nil); implementation uses Forms, Controls, Dialogs, LCLProc, LCLStrConsts, syncobjs, uDebug, uLng, uGlobs, uDCVersion, DCOSUtils, LazUTF8; type THandleException = class private FHandleExceptionLock: TCriticalSection; FHandleExceptionMessage: String; FHandleExceptionBackTrace: String; procedure ShowException; public constructor Create; reintroduce; destructor Destroy; override; procedure HandleException(e: Exception; AThread: TThread = nil); end; var HandleExceptionObj: THandleException; function ExceptionToString: String; var FrameCount: Integer; FrameNumber: Integer; Frames: PPointer; begin Result := 'Unhandled exception:'; if Assigned(ExceptObject) and (ExceptObject is Exception) then begin Result := Result + ' ' + Exception(ExceptObject).ClassName + ': ' + Exception(ExceptObject).Message; end; Result := Result + LineEnding + ' Stack trace:' + LineEnding + BackTraceStrFunc(ExceptAddr) + LineEnding; FrameCount := ExceptFrameCount; Frames := ExceptFrames; for FrameNumber := 0 to FrameCount - 1 do Result := Result + BackTraceStrFunc(Frames[FrameNumber]) + LineEnding; end; procedure WriteExceptionToFile(const aFileName: String; const ExceptionText: String); var f: System.Text; begin if (aFileName <> EmptyStr) and not mbDirectoryExists(aFileName) then begin AssignFile(f, UTF8ToSys(aFileName)); {$PUSH}{$I-} if not mbFileExists(aFileName) then Rewrite(f) else if mbFileAccess(aFileName, fmOpenWrite or fmShareDenyNone) then Append(f); {$POP} if (TextRec(f).mode <> fmClosed) and (IOResult = 0) then begin WriteLn(f, '--------------- ', FormatDateTime('dd-mm-yyyy, hh:nn:ss', SysUtils.Now), ' ---------------'); WriteLn(f, '| DC v', dcVersion, ' Rev. ', dcRevision, ' -- ', TargetCPU + '-' + TargetOS + '-' + TargetWS); if WSVersion <> EmptyStr then WriteLn(f, '| ', OSVersion, ' -- ', WSVersion) else WriteLn(f, '| ', OSVersion); if ExceptionText = EmptyStr then begin if Assigned(ExceptObject) and (ExceptObject is Exception) then WriteLn(f, 'Unhandled exception: ', Exception(ExceptObject).ClassName, ': ', Exception(ExceptObject).Message) else WriteLn(f, 'Unhandled exception'); WriteLn(f, ' Stack trace:'); System.DumpExceptionBackTrace(f); end else WriteLn(f, ExceptionText); // Make one empty line. WriteLn(f); CloseFile(f); end; end; end; procedure WriteExceptionToErrorFile(const ExceptionText: String = ''); begin WriteExceptionToFile(gErrorFile, ExceptionText); end; procedure ShowExceptionDialog(const ExceptionText: String = ''); // Based on TApplication.ShowException. var Msg: string; MsgResult: Integer; begin if AppNoExceptionMessages in Application.Flags then exit; if ExceptionText = EmptyStr then begin if Assigned(ExceptObject) and (ExceptObject is Exception) then Msg := Exception(ExceptObject).Message else Msg := ''; end else Msg := ExceptionText; if FindInvalidUTF8Character(PChar(Msg), Length(Msg), False) > 0 then Msg := AnsiToUtf8(Msg); if (Msg <> '') and (Msg[length(Msg)] = LineEnding) then Delete(Msg, Length(Msg), 1); with Application do if (not Terminated) and (Application <> nil) and (AppInitialized in Flags) then begin DisableIdleHandler; try MsgResult := MessageDlg( Application.Title + ' - ' + rsMtError, rsMtError + ':' + LineEnding + Msg + LineEnding + LineEnding + Format(rsUnhandledExceptionMessage, [LineEnding + gErrorFile + LineEnding + LineEnding, StringReplace(rsMbIgnore, '&', '', [rfReplaceAll]), StringReplace(rsMbAbort, '&', '', [rfReplaceAll])]), mtError, [mbIgnore, mbAbort], 0, mbIgnore); finally EnableIdleHandler; end; if MsgResult = mrAbort then begin Flags := Flags + [AppNoExceptionMessages]; Halt; end; end; end; procedure ShowException(e: Exception); begin MessageDlg(Application.Title, rsMsgLogError + LineEnding + e.Message, mtError, [mbOK], 0); end; procedure HandleException(e: Exception; AThread: TThread); begin HandleExceptionObj.HandleException(e, AThread); end; constructor THandleException.Create; begin FHandleExceptionLock := TCriticalSection.Create; end; destructor THandleException.Destroy; begin inherited; FreeAndNil(FHandleExceptionLock); end; procedure THandleException.HandleException(e: Exception; AThread: TThread); var BackTrace: String; begin if MainThreadID = GetCurrentThreadId then begin BackTrace := ExceptionToString; DCDebug(BackTrace); WriteExceptionToErrorFile(BackTrace); ShowExceptionDialog(e.Message); end else begin FHandleExceptionLock.Acquire; try FHandleExceptionMessage := e.Message; FHandleExceptionBackTrace := ExceptionToString; if FHandleExceptionBackTrace <> EmptyStr then DCDebug(FHandleExceptionBackTrace); TThread.Synchronize(AThread, @ShowException); finally FHandleExceptionLock.Release; end; end; end; procedure THandleException.ShowException; begin WriteExceptionToErrorFile(FHandleExceptionBackTrace); ShowExceptionDialog(FHandleExceptionMessage); end; initialization HandleExceptionObj := THandleException.Create; finalization FreeAndNil(HandleExceptionObj); end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/ufilepanelselect.pas������������������������������������������������������������0000644�0001750�0000144�00000000231�11747211345�017336� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uFilePanelSelect; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TFilePanelSelect = (fpLeft, fpRight); implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/uguimessagequeue.pas������������������������������������������������������������0000644�0001750�0000144�00000014334�11747211345�017406� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Thread-safe asynchronous call queue. It allows queueing methods that should be called by GUI thread. Copyright (C) 2009-2011 Przemysław Nagay (cobines@gmail.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 uGuiMessageQueue; {$mode objfpc}{$H+} interface uses Classes, SysUtils, syncobjs; type TGuiMessageProc = procedure (Data: Pointer) of object; PMessageQueueItem = ^TMessageQueueItem; TMessageQueueItem = record Method: TGuiMessageProc; Data : Pointer; Next : PMessageQueueItem; end; TGuiMessageQueueThread = class(TThread) private FWakeThreadEvent: PRTLEvent; FMessageQueue: PMessageQueueItem; FMessageQueueLastItem: PMessageQueueItem; FMessageQueueLock: TCriticalSection; FFinished: Boolean; {en This method executes some queued functions. It is called from main thread through Synchronize. } procedure CallMethods; public constructor Create(CreateSuspended: Boolean = False); reintroduce; destructor Destroy; override; procedure Terminate; procedure Execute; override; {en @param(AllowDuplicates If @false then if the queue already has AMethod with AData parameter then it is not queued for a second time. If @true then the same methods with the same parameters are allowed to exists multiple times in the queue.) } procedure QueueMethod(AMethod: TGuiMessageProc; AData: Pointer; AllowDuplicates: Boolean = True); end; procedure InitializeGuiMessageQueue; procedure FinalizeGuiMessageQueue; var GuiMessageQueue: TGuiMessageQueueThread; implementation uses uDebug, uExceptions; const // How many functions maximum to call per one Synchronize. MaxMessages = 10; constructor TGuiMessageQueueThread.Create(CreateSuspended: Boolean = False); begin FWakeThreadEvent := RTLEventCreate; FMessageQueue := nil; FMessageQueueLastItem := nil; FMessageQueueLock := TCriticalSection.Create; FFinished := False; FreeOnTerminate := False; inherited Create(CreateSuspended, DefaultStackSize); end; destructor TGuiMessageQueueThread.Destroy; var item: PMessageQueueItem; begin // Make sure the thread is not running anymore. Terminate; FMessageQueueLock.Acquire; while Assigned(FMessageQueue) do begin item := FMessageQueue^.Next; Dispose(FMessageQueue); FMessageQueue := item; end; FMessageQueueLock.Release; RTLeventdestroy(FWakeThreadEvent); FreeAndNil(FMessageQueueLock); inherited Destroy; end; procedure TGuiMessageQueueThread.Terminate; begin inherited Terminate; // Wake after setting Terminate to True. RTLeventSetEvent(FWakeThreadEvent); end; procedure TGuiMessageQueueThread.Execute; begin try while not Terminated do begin if Assigned(FMessageQueue) then // Call some methods. Synchronize(@CallMethods) else // Wait for messages. RTLeventWaitFor(FWakeThreadEvent); end; finally FFinished := True; end; end; procedure TGuiMessageQueueThread.QueueMethod(AMethod: TGuiMessageProc; AData: Pointer; AllowDuplicates: Boolean = True); var item: PMessageQueueItem; begin FMessageQueueLock.Acquire; try if AllowDuplicates = False then begin // Search the queue for this method and parameter. item := FMessageQueue; while Assigned(item) do begin if (item^.Method = AMethod) and (item^.Data = AData) then Exit; item := item^.Next; end; end; New(item); item^.Method := AMethod; item^.Data := AData; item^.Next := nil; if not Assigned(FMessageQueue) then FMessageQueue := item else FMessageQueueLastItem^.Next := item; FMessageQueueLastItem := item; RTLeventSetEvent(FWakeThreadEvent); finally FMessageQueueLock.Release; end; end; procedure TGuiMessageQueueThread.CallMethods; var MessagesCount: Integer = MaxMessages; item: PMessageQueueItem; begin while Assigned(FMessageQueue) and (MessagesCount > 0) do begin try // Call method with parameter. FMessageQueue^.Method(FMessageQueue^.Data); except on e: Exception do begin HandleException(e, Self); end; end; FMessageQueueLock.Acquire; try item := FMessageQueue^.Next; Dispose(FMessageQueue); FMessageQueue := item; // If queue is empty then reset wait event (must be done under lock). if not Assigned(FMessageQueue) then RTLeventResetEvent(FWakeThreadEvent); finally FMessageQueueLock.Release; end; Dec(MessagesCount, 1); end; end; // ---------------------------------------------------------------------------- procedure InitializeGuiMessageQueue; begin DCDebug('Starting GuiMessageQueue'); {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} GuiMessageQueue := TGuiMessageQueueThread.Create(True); GuiMessageQueue.Resume; {$ELSE} GuiMessageQueue := TGuiMessageQueueThread.Create(False); {$ENDIF} end; procedure FinalizeGuiMessageQueue; begin GuiMessageQueue.Terminate; DCDebug('Finishing GuiMessageQueue'); {$IF (fpc_version<2) or ((fpc_version=2) and (fpc_release<5))} If (MainThreadID=GetCurrentThreadID) then while not GuiMessageQueue.FFinished do CheckSynchronize(100); {$ENDIF} GuiMessageQueue.WaitFor; FreeAndNil(GuiMessageQueue); end; initialization InitializeGuiMessageQueue; finalization FinalizeGuiMessageQueue; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/fAbout.lrt����������������������������������������������������������������������0000644�0001750�0000144�00000000720�11740433676�015261� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������TFRMABOUT.CAPTION=About TFRMABOUT.LBLHOMEPAGE.CAPTION=Home Page: TFRMABOUT.LBLHOMEPAGEADDRESS.CAPTION=http://doublecmd.sourceforge.net TFRMABOUT.LBLTITLE.CAPTION=Double Commander TFRMABOUT.LBLVERSION.CAPTION=Version TFRMABOUT.LBLREVISION.CAPTION=Revision TFRMABOUT.LBLBUILD.CAPTION=Build TFRMABOUT.LBLLAZARUSVER.CAPTION=Lazarus TFRMABOUT.LBLFREEPASCALVER.CAPTION=Free Pascal TFRMABOUT.BTNCOPYTOCLIPBOARD.CAPTION=Copy to clipboard TFRMABOUT.BTNCLOSE.CAPTION=&Close ������������������������������������������������doublecmd-0.7.1/src/fhackform.pas�������������������������������������������������������������������0000644�0001750�0000144�00000000444�11740433676�015766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fHackForm; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms; type { TfrmHackForm } TfrmHackForm = class(TForm) private { private declarations } public { public declarations } end; var frmHackForm: TfrmHackForm; implementation {$R *.lfm} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/src/udiffond.pas��������������������������������������������������������������������0000644�0001750�0000144�00000060743�12475401266�015630� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit uDiffOND; (******************************************************************************* * Component TDiff * * Version: 3.1 * * Date: 7 November 2009 * * Compilers: Delphi 7 - Delphi2009 * * Author: Angus Johnson - angusj-AT-myrealbox-DOT-com * * Copyright: 2001-200( Angus Johnson * * * * Licence to use, terms and conditions: * * The code in the TDiff component is released as freeware * * provided you agree to the following terms & conditions: * * 1. the copyright notice, terms and conditions are * * left unchanged * * 2. modifications to the code by other authors must be * * clearly documented and accompanied by the modifier's name. * * 3. the TDiff component may be freely compiled into binary * * format and no acknowledgement is required. However, a * * discrete acknowledgement would be appreciated (eg. in a * * program's 'About Box'). * * * * Description: Component to list differences between two integer arrays * * using a "longest common subsequence" algorithm. * * Typically, this component is used to diff 2 text files * * once their individuals lines have been hashed. * * * * Acknowledgements: The key algorithm in this component is based on: * * "An O(ND) Difference Algorithm and its Variations" * * By E Myers - Algorithmica Vol. 1 No. 2, 1986, pp. 251-266 * * http://www.cs.arizona.edu/people/gene/ * * http://www.cs.arizona.edu/people/gene/PAPERS/diff.ps * * * *******************************************************************************) (******************************************************************************* * History: * * 13 December 2001 - Original Release * * 22 April 2008 - Complete rewrite to greatly improve the code and * * provide a much simpler view of differences through a new * * 'Compares' property. * * 7 November 2009 - Updated so now compiles in newer versions of Delphi. * *******************************************************************************) {$mode delphi}{$H+} interface uses SysUtils, Classes, Math, Forms; const //Maximum realistic deviation from centre diagonal vector ... MAX_DIAGONAL = $FFFFFF; //~16 million type {$IFDEF UNICODE} P8Bits = PByte; {$ELSE} P8Bits = PAnsiChar; {$ENDIF} PDiags = ^TDiags; TDiags = array [-MAX_DIAGONAL .. MAX_DIAGONAL] of integer; PIntArray = ^TIntArray; TIntArray = array[0 .. MAXINT div sizeof(integer) -1] of Integer; PChrArray = ^TChrArray; TChrArray = array[0 .. MAXINT div sizeof(char) -1] of Char; TChangeKind = (ckNone, ckAdd, ckDelete, ckModify); PCompareRec = ^TCompareRec; TCompareRec = record Kind : TChangeKind; oldIndex1, oldIndex2 : integer; case boolean of false : (chr1, chr2 : Char); true : (int1, int2 : integer); end; TDiffStats = record matches : integer; adds : integer; deletes : integer; modifies : integer; end; TDiff = class(TComponent) private fCompareList: TList; fCancelled: boolean; fExecuting: boolean; fDiagBuffer, bDiagBuffer: pointer; Chrs1, Chrs2: PChrArray; Ints1, Ints2: PIntArray; LastCompareRec: TCompareRec; fDiag, bDiag: PDiags; fDiffStats: TDiffStats; procedure InitDiagArrays(MaxOscill, len1, len2: integer); //nb: To optimize speed, separate functions are called for either //integer or character compares ... procedure RecursiveDiffChr(offset1, offset2, len1, len2: integer); procedure AddChangeChrs(offset1, range: integer; ChangeKind: TChangeKind); procedure RecursiveDiffInt(offset1, offset2, len1, len2: integer); procedure AddChangeInts(offset1, range: integer; ChangeKind: TChangeKind); function GetCompareCount: integer; function GetCompare(index: integer): TCompareRec; public constructor Create(aOwner: TComponent); override; destructor Destroy; override; //compare either and array of characters or an array of integers ... function Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; overload; function Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; overload; //Cancel allows interrupting excessively prolonged comparisons procedure Cancel; procedure Clear; property Cancelled: boolean read fCancelled; property Count: integer read GetCompareCount; property Compares[index: integer]: TCompareRec read GetCompare; default; property DiffStats: TDiffStats read fDiffStats; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TDiff]); end; constructor TDiff.Create(aOwner: TComponent); begin inherited; fCompareList := TList.create; end; //------------------------------------------------------------------------------ destructor TDiff.Destroy; begin Clear; fCompareList.free; inherited; end; //------------------------------------------------------------------------------ function TDiff.Execute(pchrs1, pchrs2: PChar; len1, len2: integer): boolean; var maxOscill, x1,x2, savedLen: integer; compareRec: PCompareRec; begin result := not fExecuting; if not result then exit; fExecuting := true; fCancelled := false; try Clear; //save first string length for later (ie for any trailing matches) ... savedLen := len1-1; //setup the character arrays ... Chrs1 := pointer(pchrs1); Chrs2 := pointer(pchrs2); //ignore top matches ... x1:= 0; x2 := 0; while (len1 > 0) and (len2 > 0) and (Chrs1[len1-1] = Chrs2[len2-1]) do begin dec(len1); dec(len2); end; //if something doesn't match ... if (len1 <> 0) or (len2 <> 0) then begin //ignore bottom of matches too ... while (len1 > 0) and (len2 > 0) and (Chrs1[x1] = Chrs2[x2]) do begin dec(len1); dec(len2); inc(x1); inc(x2); end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); fCompareList.Capacity := len1 + len2; //nb: the Diag arrays are extended by 1 at each end to avoid testing //for array limits. Hence '+3' because will also includes Diag[0] ... GetMem(fDiagBuffer, sizeof(integer)*(maxOscill*2+3)); GetMem(bDiagBuffer, sizeof(integer)*(maxOscill*2+3)); try RecursiveDiffChr(x1, x2, len1, len2); finally freeMem(fDiagBuffer); freeMem(bDiagBuffer); end; end; if fCancelled then begin result := false; Clear; exit; end; //finally, append any trailing matches onto compareList ... while (LastCompareRec.oldIndex1 < savedLen) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; finally fExecuting := false; end; end; //------------------------------------------------------------------------------ function TDiff.Execute(pints1, pints2: PInteger; len1, len2: integer): boolean; var maxOscill, x1,x2, savedLen: integer; compareRec: PCompareRec; begin result := not fExecuting; if not result then exit; fExecuting := true; fCancelled := false; try Clear; //setup the character arrays ... Ints1 := pointer(pints1); Ints2 := pointer(pints2); //save first string length for later (ie for any trailing matches) ... savedLen := len1-1; //ignore top matches ... x1:= 0; x2 := 0; while (len1 > 0) and (len2 > 0) and (Ints1[len1-1] = Ints2[len2-1]) do begin dec(len1); dec(len2); end; //if something doesn't match ... if (len1 <> 0) or (len2 <> 0) then begin //ignore bottom of matches too ... while (len1 > 0) and (len2 > 0) and (Ints1[x1] = Ints2[x2]) do begin dec(len1); dec(len2); inc(x1); inc(x2); end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); fCompareList.Capacity := len1 + len2; //nb: the Diag arrays are extended by 1 at each end to avoid testing //for array limits. Hence '+3' because will also includes Diag[0] ... GetMem(fDiagBuffer, sizeof(integer)*(maxOscill*2+3)); GetMem(bDiagBuffer, sizeof(integer)*(maxOscill*2+3)); try RecursiveDiffInt(x1, x2, len1, len2); finally freeMem(fDiagBuffer); freeMem(bDiagBuffer); end; end; if fCancelled then begin result := false; Clear; exit; end; //finally, append any trailing matches onto compareList ... while (LastCompareRec.oldIndex1 < savedLen) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; finally fExecuting := false; end; end; //------------------------------------------------------------------------------ procedure TDiff.InitDiagArrays(MaxOscill, len1, len2: integer); var diag: integer; begin inc(maxOscill); //for the extra diag at each end of the arrays ... P8Bits(fDiag) := P8Bits(fDiagBuffer) - sizeof(integer)*(MAX_DIAGONAL-maxOscill); P8Bits(bDiag) := P8Bits(bDiagBuffer) - sizeof(integer)*(MAX_DIAGONAL-maxOscill); //initialize Diag arrays (assumes 0 based arrays) ... for diag := - maxOscill to maxOscill do fDiag[diag] := -MAXINT; fDiag[0] := -1; for diag := - maxOscill to maxOscill do bDiag[diag] := MAXINT; bDiag[len1 - len2] := len1-1; end; //------------------------------------------------------------------------------ procedure TDiff.RecursiveDiffChr(offset1, offset2, len1, len2: integer); var diag, lenDelta, Oscill, maxOscill, x1, x2: integer; begin //nb: the possible depth of recursion here is most unlikely to cause // problems with stack overflows. application.processmessages; if fCancelled then exit; if (len1 = 0) then begin AddChangeChrs(offset1, len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeChrs(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin AddChangeChrs(offset1, 1, ckDelete); AddChangeChrs(offset1, 1, ckAdd); exit; end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); InitDiagArrays(MaxOscill, len1, len2); lenDelta := len1 -len2; Oscill := 1; //ie assumes prior filter of top and bottom matches while Oscill <= maxOscill do begin if (Oscill mod 200) = 0 then begin application.processmessages; if fCancelled then exit; end; //do forward oscillation (keeping diag within assigned grid)... diag := Oscill; while diag > len1 do dec(diag,2); while diag >= max(- Oscill, -len2) do begin if fDiag[diag-1] < fDiag[diag+1] then x1 := fDiag[diag+1] else x1 := fDiag[diag-1]+1; x2 := x1 - diag; while (x1 < len1-1) and (x2 < len2-1) and (Chrs1[offset1+x1+1] = Chrs2[offset2+x2+1]) do begin inc(x1); inc(x2); end; fDiag[diag] := x1; //nb: (fDiag[diag] is always < bDiag[diag]) here when NOT odd(lenDelta) ... if odd(lenDelta) and (fDiag[diag] >= bDiag[diag]) then begin inc(x1);inc(x2); //save x1 & x2 for second recursive_diff() call by reusing no longer //needed variables (ie minimize variable allocation in recursive fn) ... diag := x1; Oscill := x2; while (x1 > 0) and (x2 > 0) and (Chrs1[offset1+x1-1] = Chrs2[offset2+x2-1]) do begin dec(x1); dec(x2); end; RecursiveDiffChr(offset1, offset2, x1, x2); x1 := diag; x2 := Oscill; RecursiveDiffChr(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; //do backward oscillation (keeping diag within assigned grid)... diag := lenDelta + Oscill; while diag > len1 do dec(diag,2); while diag >= max(lenDelta - Oscill, -len2) do begin if bDiag[diag-1] < bDiag[diag+1] then x1 := bDiag[diag-1] else x1 := bDiag[diag+1]-1; x2 := x1 - diag; while (x1 > -1) and (x2 > -1) and (Chrs1[offset1+x1] = Chrs2[offset2+x2]) do begin dec(x1); dec(x2); end; bDiag[diag] := x1; if bDiag[diag] <= fDiag[diag] then begin //flag return value then ... inc(x1);inc(x2); RecursiveDiffChr(offset1, offset2, x1, x2); while (x1 < len1) and (x2 < len2) and (Chrs1[offset1+x1] = Chrs2[offset2+x2]) do begin inc(x1); inc(x2); end; RecursiveDiffChr(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; inc(Oscill); end; //while Oscill <= maxOscill raise Exception.create('oops - error in RecursiveDiffChr()'); end; //------------------------------------------------------------------------------ procedure TDiff.RecursiveDiffInt(offset1, offset2, len1, len2: integer); var diag, lenDelta, Oscill, maxOscill, x1, x2: integer; begin //nb: the possible depth of recursion here is most unlikely to cause // problems with stack overflows. application.processmessages; if fCancelled then exit; if (len1 = 0) then begin assert(len2 > 0,'oops!'); AddChangeInts(offset1, len2, ckAdd); exit; end else if (len2 = 0) then begin AddChangeInts(offset1, len1, ckDelete); exit; end else if (len1 = 1) and (len2 = 1) then begin assert(Ints1[offset1] <> Ints2[offset2],'oops!'); AddChangeInts(offset1, 1, ckDelete); AddChangeInts(offset1, 1, ckAdd); exit; end; maxOscill := min(max(len1,len2), MAX_DIAGONAL); InitDiagArrays(MaxOscill, len1, len2); lenDelta := len1 -len2; Oscill := 1; //ie assumes prior filter of top and bottom matches while Oscill <= maxOscill do begin if (Oscill mod 200) = 0 then begin application.processmessages; if fCancelled then exit; end; //do forward oscillation (keeping diag within assigned grid)... diag := Oscill; while diag > len1 do dec(diag,2); while diag >= max(- Oscill, -len2) do begin if fDiag[diag-1] < fDiag[diag+1] then x1 := fDiag[diag+1] else x1 := fDiag[diag-1]+1; x2 := x1 - diag; while (x1 < len1-1) and (x2 < len2-1) and (Ints1[offset1+x1+1] = Ints2[offset2+x2+1]) do begin inc(x1); inc(x2); end; fDiag[diag] := x1; //nb: (fDiag[diag] is always < bDiag[diag]) here when NOT odd(lenDelta) ... if odd(lenDelta) and (fDiag[diag] >= bDiag[diag]) then begin inc(x1);inc(x2); //save x1 & x2 for second recursive_diff() call by reusing no longer //needed variables (ie minimize variable allocation in recursive fn) ... diag := x1; Oscill := x2; while (x1 > 0) and (x2 > 0) and (Ints1[offset1+x1-1] = Ints2[offset2+x2-1]) do begin dec(x1); dec(x2); end; RecursiveDiffInt(offset1, offset2, x1, x2); x1 := diag; x2 := Oscill; RecursiveDiffInt(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; //do backward oscillation (keeping diag within assigned grid)... diag := lenDelta + Oscill; while diag > len1 do dec(diag,2); while diag >= max(lenDelta - Oscill, -len2) do begin if bDiag[diag-1] < bDiag[diag+1] then x1 := bDiag[diag-1] else x1 := bDiag[diag+1]-1; x2 := x1 - diag; while (x1 > -1) and (x2 > -1) and (Ints1[offset1+x1] = Ints2[offset2+x2]) do begin dec(x1); dec(x2); end; bDiag[diag] := x1; if bDiag[diag] <= fDiag[diag] then begin //flag return value then ... inc(x1);inc(x2); RecursiveDiffInt(offset1, offset2, x1, x2); while (x1 < len1) and (x2 < len2) and (Ints1[offset1+x1] = Ints2[offset2+x2]) do begin inc(x1); inc(x2); end; RecursiveDiffInt(offset1+x1, offset2+x2, len1-x1, len2-x2); exit; //ALL DONE end; dec(diag,2); end; inc(Oscill); end; //while Oscill <= maxOscill raise Exception.create('oops - error in RecursiveDiffInt()'); end; //------------------------------------------------------------------------------ procedure TDiff.Clear; var i: integer; begin for i := 0 to fCompareList.Count-1 do dispose(PCompareRec(fCompareList[i])); fCompareList.clear; LastCompareRec.Kind := ckNone; LastCompareRec.oldIndex1 := -1; LastCompareRec.oldIndex2 := -1; fDiffStats.matches := 0; fDiffStats.adds := 0; fDiffStats.deletes :=0; fDiffStats.modifies :=0; Chrs1 := nil; Chrs2 := nil; Ints1 := nil; Ints2 := nil; end; //------------------------------------------------------------------------------ function TDiff.GetCompareCount: integer; begin result := fCompareList.count; end; //------------------------------------------------------------------------------ function TDiff.GetCompare(index: integer): TCompareRec; begin result := PCompareRec(fCompareList[index])^; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeChrs(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (LastCompareRec.oldIndex1 < offset1 -1) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); chr1 := Chrs1[oldIndex1]; chr2 := Chrs2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckAdd : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := LastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).chr2 := Chrs2[oldIndex2]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; chr1 := #0; inc(oldIndex2); chr2 := Chrs2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := LastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).chr1 := Chrs1[oldIndex1]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; chr2 := #0; inc(oldIndex1); chr1 := Chrs1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.AddChangeInts(offset1, range: integer; ChangeKind: TChangeKind); var i,j: integer; compareRec: PCompareRec; begin //first, add any unchanged items into this list ... while (LastCompareRec.oldIndex1 < offset1 -1) do begin with LastCompareRec do begin Kind := ckNone; inc(oldIndex1); inc(oldIndex2); int1 := Ints1[oldIndex1]; int2 := Ints2[oldIndex2]; end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.matches); end; case ChangeKind of ckAdd : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of adds are following a range of deletes //and convert them to modifies ... if Kind = ckDelete then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckDelete) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.deletes); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex2); PCompareRec(fCompareList[j]).oldIndex2 := LastCompareRec.oldIndex2; PCompareRec(fCompareList[j]).int2 := Ints2[oldIndex2]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckAdd; int1 := $0; inc(oldIndex2); int2 := Ints2[oldIndex2]; //ie what we added end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.adds); end; end; ckDelete : begin for i := 1 to range do begin with LastCompareRec do begin //check if a range of deletes are following a range of adds //and convert them to modifies ... if Kind = ckAdd then begin j := fCompareList.Count -1; while (j > 0) and (PCompareRec(fCompareList[j-1]).Kind = ckAdd) do dec(j); PCompareRec(fCompareList[j]).Kind := ckModify; dec(fDiffStats.adds); inc(fDiffStats.modifies); inc(LastCompareRec.oldIndex1); PCompareRec(fCompareList[j]).oldIndex1 := LastCompareRec.oldIndex1; PCompareRec(fCompareList[j]).int1 := Ints1[oldIndex1]; if j = fCompareList.Count-1 then LastCompareRec.Kind := ckModify; continue; end; Kind := ckDelete; int2 := $0; inc(oldIndex1); int1 := Ints1[oldIndex1]; //ie what we deleted end; New(compareRec); compareRec^ := LastCompareRec; fCompareList.Add(compareRec); inc(fDiffStats.deletes); end; end; end; end; //------------------------------------------------------------------------------ procedure TDiff.Cancel; begin fCancelled := true; end; //------------------------------------------------------------------------------ end. �����������������������������doublecmd-0.7.1/docgen.sh���������������������������������������������������������������������������0000755�0001750�0000144�00000000177�11740433676�014333� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # http://pasdoc.sourceforge.net pasdoc --marker en --output doc/en/dev-help --define UNIX --source units-doc-unix.txt�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/units-doc-unix.txt������������������������������������������������������������������0000644�0001750�0000144�00000000422�12014201074�016131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������src/ufilelist.pas src/udcutils.pas src/platform/uOSUtils.pas src/platform/uosforms.pas src/uvfs.pas src/uexts.pas src/ufileprocs.pas src/udescr.pas src/platform/win/umywindows.pas src/platform/unix/umyunix.pas src/platform/unix/inotify.pp src/uvfsutil.pas src/uwcxmodule.pas����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/���������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717726�014324� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.fr.po������������������������������������������������������������0000644�0001750�0000144�00001275262�12666540554�017240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 2016-02-12:DB-Dans ce fichier le terme "Dossier" a été préféré à "Répertoire". # Par soucis d'être constant, il n'y a pas d'exception, c'est toujours "Dossier" qui est utilisé. # C'est comme ça pour reprendre la même nomenclature que Windows et Apple. # Il est vrai que TC utilise le terme "Répertoire" mais on prend le partie de Windows qui lui parle de "dossier". # Pour quelqu'un qui a toujours préféré le terme "Répertoire" c'est un peu irritant la première heure d'utiliser le terme "Dossier". # Mais courage, après quelques minutes, on fini par s'y habituer et c'est très bien. # # 2016-02-12:DB-Pour le nom commun, on peut dire "double-clic". Puis pour l'action de le faire, le verbe c'est "double-cliquer". # C'est comme ça dans le Larousse en ligne et c'est ce qui a été suivi ici. # # 2016-02-12:DB-Pour ce qui est du terme "plugin", il y a un peu moins de certitude! # La Comission générale de terminologie et de néologie en France en 1999 préconisait "Module d'extension". # L'Office québécois de la langue française en 2002 y allait de "plugiciel". # TC lui parle en façon de "Module-additionel" ou même de "Additif" sur son site web. # Devant ces différences, on préfère ne pas s'éparpiller d'avantage et on va utiliser le même terme qu'en angalis, soit "plugin". # On le mettra partout entre guillemet. Puis si c'est au pluriels on ajoutera un "s" genre "plugins" simplement. # La seule exception c'est pour "ulng.rsoptionseditorplugins" où il n'estpas entre guillemet. C'est juste pour que dans le menu d'option alors qu'on trie # alphabétiquement pour pas que cela ne se retrouve en haut de la liste à cause du guilemet. # C'est tout de même très répandu aussi comme terme même en français. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.1 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-02-16 22:01-0500\n" "Last-Translator: Denis Bisson <denis.bisson@denisbisson.org>\n" "Language-Team: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Français\n" "Language: fr\n" "X-Generator: Poedit 1.8.7\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparaison... %d%% (ESC pour annuler)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Droite: Effacement %d fichiers(s)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fichiers trouvés: %d (Identique: %d, Différents: %d, Gauche unique: %d, Droit unique: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Gauche vers la droite: Copier %d fichiers, raille totale: %d octets" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Droite versla gauche: Copier %d fichiers, taille totale: %d octets" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Tous" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Personnaliser les colonnes affichées" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Arrière-plan" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordure du curseur" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Autoriser la superposition des couleurs" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Utiliser des polices et couleurs personnalisées" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Couleur du texte :" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Police :" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Taille :" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Arrière-plan 2 :" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configurer la vue n°" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Couleur du curseur :" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Caractère du curseur :" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Couleur de marque:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nom :" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Ajouter une colonne" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Personnaliser les colonnes :" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Prévisualisation" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Choisir un modèle..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Vérifier l'espace disponible" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copier les attributs" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copier propriétaire" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Copier permissions" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Copier date et heure" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Liens valides" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Ne pas tenir compte du marqueur \"lecture seule\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Exclure les dossiers vides" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Suivre les liens" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Réserver l'espace" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Quoi faire lorsqu'on ne peut ajuster la date, les attributs, etc. du fichier" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Utiliser un fichier-modèle" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Quand le dossier existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quand le fichier existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quand on ne peut ajuste les propriétés" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<pas de modèle>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copier vers le presse-papier" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Date révision" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Page de démarrage :" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Révision" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuler" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Choisir les attributs" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Archive" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Compressé" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Dossier" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Archive cryptée" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Caché" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Lecture seule" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Clairesemé" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Lien symbolique" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Système" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Temporaire" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Attributs NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Attributs généraux" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lire" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Comme texte:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Écrire" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calculer une signature..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Ouvre le fichier de signature à la fin de la tâche" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Créer une signature séparée pour chaque fichier" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Sauvegarder le fichier de signature dans:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Vérification de signature..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Se connecter" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Supprimer" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Connexion manager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Se connecter à :" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Ajoute à la file d'attente" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&ptions" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sauvegarder les valeurs des options comme celles par défaut" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copier le(s) fichier(s)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nouvelle file d'attente" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "File d'attente 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "File d'attente 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "File d'attente 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "File d'attente 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "File d'attente 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Sauvegarder la description" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Commentaires liés aux fichiers/dossiers" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Éditer le commentaire pour:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Encodage :" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Comparaison automatique" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Mode binaire" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annuler" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copier le bloc vers la droite" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copier le bloc vers la droite" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copier le bloc vers la gauche" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copier le bloc vers la gauche" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refaire" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Tout sélectionner" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annuler (en arrière)" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Quitter" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Première différence" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Première différence" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorer la casse" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorer les espaces" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Défilement simultané des deux côtés à la fois" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Dernière différence" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Dernière différence" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Différences de la ligne en cours" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Prochaine différence" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Prochaine différence" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Ouvrir à Gauche" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Ouvrir à Droite" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Colorer l'arrière-plan" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Précédente différence" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Précédente différence" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Recharger" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recharger" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Enregistrer" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Enregistrer" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Enregistrer sous... " #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Enregistrer sous... " #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Sauvegarder la gauche" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sauvegarder la gauche" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sauvegarder la gauche sous..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sauvegarder la gauche sous..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sauvegarder la droite" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sauvegarder la droite" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sauvegarder la droite sous..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sauvegarder la droite sous..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparer" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparer" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Encodage" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparer les fichiers" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Gauche" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Droite" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Actions" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Encodage" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Fichier" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Options" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Ajouter un nouveau raccourcis à la séquence" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuler" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Retirer le dernier raccourcis de la séquence" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Seulement pour ces sections" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Paramètre (chacun sur sa ligne unique)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Raccourcis:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "A propos" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuration" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuration" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Copier" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Couper" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Supprimer" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Rechercher" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Rechercher" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Rechercher le suivant" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Allez à la ligne..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Window (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Coller" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refaire" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Refaire" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "R&emplacer" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Remplacer" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Tout sélectionner" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Tout sélectionner" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annuler" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Annuler" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Fermer" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Sortie" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nouveau" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nouveau" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Ouvrir" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Ouvrir" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Enregistrer" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Enregister" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Enregistrer &sous" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Sauvegarder sous" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "T&out enregistrer" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Sauvegarder tout" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Éditeur" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "Édit&er" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "En&codage" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Ouvrir en :" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Enregistrer en :" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fichier" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Coloration syntaxique" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fin de ligne" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensibilité à la c&asse" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Chercher à partir du curseur" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expression &régulière" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Seulement le &texte sélectionné" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Mots entiers uniquement" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Option" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&remplacer avec :" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Chaine à R&echercher :" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direction" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Extraire les fichiers" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Extraire en utilisant les chemins des dossiers dans l'archive" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Extraire chaque archive dans un sous-dossier séparé (au nom de l'archive)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Écraser les fichier existants" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Dans le dossier:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Extraire les fichiers correspondant au masque:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Mot de passe pour les fichiers cryptés:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Ajouter" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Ajouter" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "En dessous" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Supprimer" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Supprimer" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Supprimer" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Renommer" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Au dessus" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Associations de fichiers" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Actions" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Types de fichiers" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icône" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Action :" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Commande :" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Éditer" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Ouvrir dans l'éditeur" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nom de fichier" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Chemin du fichier" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Chemin complet" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Récupérer la sortie de la commande" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Ouvrir" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Exécuter dans un terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Ouvrir dans les VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vue" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Ouvrir dans la visionneuse" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Attendre..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nom de fichier:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De :" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Cliquer sur Fermer quand le fichier temporaire ne peut pas être supprimé !" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Vers le panneau" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Voir tous" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Opération courante:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De :" #: tfrmfileop.lblto.caption msgid "To:" msgstr "A :" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Ajuster les propriétés" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ajuster pour tous les fichiers sélectionnés" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sauter ce fichier" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriétés" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propriétaire" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texte :" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contient:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nom du fichier" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nom :" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nom du fichier : " #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Chemin :" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Groupe" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Dernier accès :" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Dernière modification :" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Dernier changement de statut :" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal :" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propriétaire" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lecture" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Taille :" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Lien symbolique vers :" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Type :" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écriture" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriétés" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ajouter" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmfinddlg.btnedit.caption msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Éditer" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Aller au fichier" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "Dernière recherche" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nouvelle recherche" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Enregister" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Supprimer" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Charger" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Enregistrer" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sauvegarder avec le nom du dossier de début de recherche" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Si sauvegardé, alors le dossier de début de recherche sera restitué lorsqu'on chargera le modèle. Utilisez cela si vous voulez chercher à nouveau dans un même dossier." #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "Dé&marrer" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Annuler" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Utiliser un modèle" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Vue" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Envoyer vers un &onglet" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Rechercher les fichiers" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible à la &casse" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Date début:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Date fin:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Taille mini:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Taille maxi:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Recherche dans les archives" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Rechercher le &texte dans les fichiers" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Suivre les liens symboliques" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Rechercher les fichiers &ne contenant PAS le texte" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Pas plus vieux que:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Recherche pour les parties de noms" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressions &régulières" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Rem&placer par" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Dossiers et fichiers sélectionnés" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Expression régulière" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "H. début:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H. fin:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utiliser le \"plugin\" de recherche:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Entrer les noms de dossiers à exclure de la recherche et les séparer par un point-virgule" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Entrer les noms de fichiers à exclure de la recherche et les séparer par un point-virgule" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Entrer les noms de fichiers séparés par un point-virgule" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Dossiers" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Fichiers" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Chercher les données" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attributs" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Encodage:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Exclure les sous-dossiers" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Exclures les fichiers" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Masque de &fichiers" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Démarre la recherche dans le dossier" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Rechercher dans les sous-dossiers:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Recherches &précédentes:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Ovrir dans un nouvel onglet" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Supprimer de la liste" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Afficher tous les éléments trouvés" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Ouvrir dans l'éditeur" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Afficher dans la visionneuse" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avancé" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Charger/Sauvegarder" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Résultat" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Rechercher" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Rechercher" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensible à la casse" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Créer un lien dur (hardlink)" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destination sur laquelle le lien va pointer" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom du lien" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importer tout!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importer ce qui est sélectionné" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Choissiez l'entrée à importer" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Lorsqu'on clique un sous-menu, cela le sélectionnera au complet" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Maintenant la touche CTRL enfoncé et cliquez les entrées pour en choisir plus d'une à la fois" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Concaténeur" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Enregistrer sous..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Élément" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nom du fichier" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "En dessous" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "En dessous" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Supprimer" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Supprimer" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Au dessus" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Au dessus" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&A propos" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Ajouter le nom du fichier dans la ligne de commande" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Ajouter le chemin complet et le nom du fichier dans la ligne de commande" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copier le chemin vers la ligne de commande" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Vue résumée" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vue résumée" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcul de l'espace &occupé" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Changer de dossier" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Aller au dossier d'accueil" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Aller au dossier parent" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Aller au dossier racine" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calculer la &somme de contrôle..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Vérifier la somme de contrôle..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Effacer le fichier journal" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Effacer la fenêtre du journal" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Fermer &tous les onglets" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Fermer les onglets doublons" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Fermer l'onglet" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Prochaine ligne de commande" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Ajuster la ligne de commande pour la suivante dans l'historique" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Ligne de commande précédente" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Ajuster la ligne de commande pour la précédente dans l'historique" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Complet" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vue colonne" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Comparer le contenu" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Compare dossiers" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Compare dossiers." #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuration de la liste des dossiers favoris" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Configuration des groupes d'onglets favoris" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Configuration des options reliées aux onlgets" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Configuation de la barre d'outils" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Afficher le menu contextuel" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copier" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Copier tous les onglets sur le panneau opposé" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copier toutes les colonnes affichées" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copier les fichiers avec l'&arborescence complète" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copier le &nom du(des) fichier(s) dans le presse-papier" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copier les fichiers sans demander de confirmation" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Copier le chemin complet de la sélection sans le séparateur de dossier final" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Copier le chemin au complet des fichiers sélectionnés" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copier dans le même panneau" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copier" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Afficher l'espace &occupé" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Co&uper" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Affiche les paramètres des commandes" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Historique des dossiers" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Dossiers &favoris" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Choisissez n'importe quelle commande et l'exécuter" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Éditer" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Éditer le commentaire" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Éditer le nouveau fichier" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Éditer le champ du chemin au dessus de la liste des fichiers" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Permuter les panneaux" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extraire les fichiers..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Configuration des associations d'extension de fichiers" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Conca&téner les fichiers..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Afficher les &propriétés des fichiers" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Découper un fichier..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vue à plat" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Mettre la contrôle actif sur la ligne de commande" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer le curseur sur le premier fichier de la liste" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer le curseur sur le dernier fichier de la liste" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Créer un lien d&ur (hardlink)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Index de l'aide" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Mode &horizontal pour les panneaux" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Raccourcis &clavier" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Vue résumée dans le panneau de gauche" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Vue colonne sur le panneau de gauche" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Gauche &= Droite" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Vue à plat sur le panneau de gauche" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Ouvrir la liste des volumes de gauche" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Inverse l'ordre dans le panneau de gauche" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Trier le panneau de gauche par attribut" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Trier le panneau de gauche par date" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Trier le panneau de gauche par extension" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Trier le panneau de gauche par nom" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Trier le panneau de gauche par taille" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Vue vignette sur le panneau gauche" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Charger un groupe d'onglets favoris" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Charger la sélection depuis le &presse-papier" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Charger la sélection depuis un fichier..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Charger les onglets d'un fichier" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Nouveau dossier" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Sélectionner tous les fichiers avec la même &extension" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverser la sélection" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Tout sélectionner" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Désélectionner un &groupe" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Sélectionner un groupe" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Tout &désélectionner" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimiser la fenêtre" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Outil pour &renommer par lot" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connexion au réseau" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Déconnexion du réseau" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connexion &rapide au réseau..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nouvel onglet" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Charger le groupe suivant d'onglets favoris" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Onglet &suivant" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Ouvrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tentative d'ouverture de l'archive" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Ouvre un fichier de barre" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Ouvrir le &dossier dans un nouvel onglet" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Ouvrir la liste des VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Voir les opérations en cours" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Options..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Compresser les fichiers..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Définir la position du séparateur de panneau" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Co&ller" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Charger le groupe précédent d'onglets favoris" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Onglet &précédent" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtre rapide" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Recherche rapide" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Panneau de visualisation rapide" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Rafraichir" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Recharger le groupe courant d'onglets favoris" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Déplacer" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Déplacer/Renommer les fichiers sans demande de confirmation" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renommer" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Re&nommer l'onglet" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Resauvegarder les onglets courants dans un groupe d'onglets favoris" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurer la sélection" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Inverser l'ordre" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Vue résumée dans le panneau de droite" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Vue colonne sur le panneau de droite" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Droite &= Gauche" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Vue à plat sur le panneau de droite" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Ouvrir la liste des volumes/disques de droite" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Iverser l'ordre de tri sur le panneau de droite" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Trier le panneau de droite par attribut" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Trier le panneau de droite par date" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Trier le panneau de droite par extension" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Trier le panneau de droite par nom" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Trier le panneau de droite par taille" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Vue \"Vignette\" dans le panneau de droite" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Ouvrir un &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Sauvegarder les onglets courants dans un groupe d'onglets favoris" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sau&vegarder la sélection" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sauv&egarder la sélection dans un fichier..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Sauvegarde des onglets dans un fichier" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Chercher..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Tous les onglets verrouillés avec les dossiers ouverts dans des nouveaux onglets" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Tous les onglets déverrouillés" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Tous les onglets verrouillés" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Tous les onglets verrouillés avec les changements de &dossiers autorisés" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Changer les &attributs..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Verrouillé avec les dossiers ouverts dans des nouveaux &onglets" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Verrouillé" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Verrouillé avec les changements de &dossiers autorisés" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Ouvrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Ouvrir en utilisant les associations-système" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Afficher les boutons dans le menu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Afficher l'historique des commandes" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Afficher les fichiers &cachés et système" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Trier par &Attributs" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Trier par &Date" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Trier par &Extension" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Trier par &Nom" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Trier par &Taille" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Ouvre la liste des lecteurs" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Activer/désactiver la liste des fichiers/dossiers ignorés" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Créer un &lien symbolique..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Appairer les dossiers..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cible &= Source" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Tester une(des) archive(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Vignettes" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vue \"Vignette\"" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Alterner la vue plein écran du mode console" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Ouvrir le dossier sous le curseur dans l'onglet du panneau de gauche" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Ouvrir le dossier sous le curseur dans l'onglet du panneau de droite" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Vue du panneau d'arborescence" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Trier selon les paramètres" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Désélectionner tous les fichiers avec la &même extension" #: tfrmmain.actview.caption #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Voir" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Afficher l'historique des chemins visités pour la vue active" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Aller à l'entrée suivante de l'historique" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Aller à l'entrée précédente de l'historique" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Regarder le fichier journal" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visiter le site Web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Effacement Sécurisé" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Travail avec la liste des dossiers favoris et ses paramètres" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Quitter" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Dossier" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Liste des dossiers favoris" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Afficher le même dossier que celui actif dans le panneau opposé" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Aller au dossier personnel" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Aller au dossier racine" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Aller au dossier parent" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Dossiers favoris" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Afficher le même dossier que celui actif dans le panneau opposé" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Chemin" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copier..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Créer un lien..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Effacer" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Cacher" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Tout sélectionner" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Déplacer..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Créer un lien symbolique" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Options des onglets" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Restaurer" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Démarrer" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Annuler" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Commandes" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "Confi&guration" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Onglets favoris" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Fichiers" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Sélection" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Réseau" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Affichage" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Options des onglets" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Onglets" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copier" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Couper" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Supprimer" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Éditer" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Coller" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Annuler" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Choisissez vore commande interne" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Ordonné de manière classique" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Ordonné de manière classique" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Choisissez toutes les catégories par défaut" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Sélection:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Catégories:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Nom de commande:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "Filtre:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Indice:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Raccourci clavier" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Catégorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Aide" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Indice" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Raccourci clavier" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Définir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ou choisissez un type de sélection prédéfinie:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Créer un nouveau dossier" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Nom du nouveau dossier:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nouvelle Taille" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Hauteur :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualité de la compression JPEG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Largeur :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Hauteur" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largeur" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Supprimer" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Charger" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Renommer" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Réinitialiser tout" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Enregister" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Renommer par lot" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Activer" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpression régulière" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Utiliser la substitution" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Extension" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Compteur" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Chercher && Remplacer" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Journaliser le résultat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Masque" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Présélections" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extension" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Chercher..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Intervalle" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nom de fichier" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Rem&placer" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Nombre de départ" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Largeur" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Compteur" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[J] Jour" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[JJ] Jour (2 digits)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Jour de la semaine (court, ex : \"lun\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Jour de la semaine (long, ex : \"lundi\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Caractère à la position x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caractère de la position x à y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Heure" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Heure (2 digits)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 digits)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mois" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mois (2 digits)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nom du mois (court, ex : \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nom du mois (long, ex : \"janvier\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nom" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Ex] Caractère à la position x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Ex:y] Caractère de la position x à y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Heure..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extension..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nom..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Seconde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Seconde (2 digits)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Année (2 digits)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Année (4 digits)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Ancien nom du fichier" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nouveau nom du fichier" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Chemin du Fichier" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Choisir une application" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Commande personalisée" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Sauvegarder l'association" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Ajuster l'application à utiliser par défaut" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Type de fichier à être ouvert: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Noms de fichiers multiple" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Plusieurs URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fichier unique" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Identifiant de ressource unique" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Appliquer" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Options" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Choisissez une sous-page, celle-ci ne contient aucun ajustements." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Configuration automatique" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Supprimer" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Renommer" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Quelques fonctions pour choisir le chemin approprié" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Mode de débbogage" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Activé" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Afficher la sortie de la console" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Options" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Ajouter:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Extension:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Extraire:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Liste:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Fin de liste (optionnel):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Format de liste:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Fin de liste (optionnel):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Programme gérant les archives :" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Description:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Avancé" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Général" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quand la &taille, la date ou les attributs changent" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pour les chemins suivants et leurs sous-dossiers :" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quand les fichiers sont &créés, supprimés ou renommés" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quand l'application est en &arrière-plan" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Désactiver le rafraichissement automatique" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Rafraichir la liste des fichiers" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Toujours afficher l'icône dans la zone de notification" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Cache lenom automatiquement des disque non montés" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Icône dans la zone de notification lorsque la fenêtre est minimisée" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Autoriser une seule instance de Double Commander à la fois" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ici vous pouvez entrer un ou plus lecteur ou point de montage, séparés par \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Liste noire des lecteurs:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Taille des colonnes" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Affiche l'extension des fichiers" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "aligne (avec tabulation)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "directement après le nom du fichier" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Nombre de colonne fixe" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Largeur de colonne fixe" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Couper le texte à la largeur de la colonne" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Lignes horizontales" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Lignes verticales" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Remplissage automatique des colonnes" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Affiche la grille" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Dimensionne automatiquement les colonnes" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Largeur des colonnes automatique :" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Éditer" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Historique des commandes" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Historique des dossiers" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Historique des masques de fichier" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Sauvegarder la configuration" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Historique des Recherches/Remplacements" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Emplacement des fichiers de configuration" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Sauvegarder en quittant" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Classement des éléments de configuration de l'arbre de gauche" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Ajuster sur la ligne de commande" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Dossier où se trouve l'exécutable (version portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Dossier personnel de l'utilisateur" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Applique la modification à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tous" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Appliquer les modifications à toutes les colonnes" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Supprimer" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Aller à ajuster le défaut" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Réinitialise aux valuers par défaut" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nouveau" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Prochain" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Précédent" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Réinitialise aux valeurs par défaut" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Enregistrer sous" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Enregistrer" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Autoriser la superposition des couleurs" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Lorsqu'on clique pour changer quelque chose, le faire pour toutes les colonnes" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Général" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordure du curseur" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Utilise le curseur avec le cadre" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Utiliser une couleur pour la sélection inactive" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Utiliser la couleur inversé" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Personnaliser la police et couleur pour cette vue" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Arrière-plan" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Arrière-plan 2 :" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Configurer les colonnes pour l'affichage des dossiers/fichiers" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Nom de colonne courante]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Couleur du curseur:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Caractère du curseur:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Police:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Taille:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Couleur du texte:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Couleur curseur inactif" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Couleur sélection inactive" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Couleur de marque:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ci-dessus en un aperçu. Vous pouvez promener le cuseur et sélectionner des fichiers. Ça vous donne un aperçu immédiate de l'effet des ajustements." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Option pour colonne:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Ajouter une colonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Position des panneaux après la comparaison:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Ajouter..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Archiver..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Effacer..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Exportr..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Aide" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Insérer..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Divers..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Quelques fonctions pour choisir le chemin approprié pour la cible" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Trier..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Lorsqu'on ajoute un dossier, ajouter aussi une cible" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Toujours déployer tout l'arbre" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Afficher seulement les variables d'environnement qui semblent valides" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "Dans le menu, afficher [le chemin]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nom, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nom, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Liste des dossiers favoris (utilisez le glisser et déposer pour changer l'ordre)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Autre options" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nom :" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Chemin :" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Cible:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "dossier du panneau actif" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "dossiers des panneaux actifs et inactifs" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "une commande" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Ajouter une commande" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "un copie de l'entrée sélectionnée" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Ajoute une copie de l'entrée sélectionnée" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "un séparateur" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Ajoute un séparateur" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "sous-menu" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Ajoute un sous-menu" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "un dossier que je vais parcourir" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Compacte le tout" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...au niveau de l'élément sélectionné seulement" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "ce qui est choisis présentement dans le dossier actif" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Couper" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "efface tout!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sous-menu et tous ses éléments" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "juste le sous-menu mais en conservant ses éléments" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "élément sélectionné" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Efface l'élément sélectionné" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Parcourir tous les chemins source des dossiers favoris et valider ceux qui existent réellement" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Parcourir tous les chemins source et de cible des dossiers favoris et valider ceux qui existent réellement" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "vers le fichier des dossiers favoris (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers le fichier \"wincmd.ini\" de TC (en conservant les dossiers favoris existants)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers le fichier \"wincmd.ini\" de TC (efface les dossiers favoris existants)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Aller configurer les options relié à TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Aller configurer les options relié à TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Menu de test pour les dossiers favoris" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "d'un fichier de dossiers favoris (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "de \"wincmd.ini\" de TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Déploie toutes les branches" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Coller" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Ramène un fichier de backup d'une liste de dossiers favoris" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Sauvegarder un backup de la liste courante de dossiers favoris" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Recherche et remplace..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "dans tous les chemins..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "dans tous les chemins-cible" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "dans tout les chemins et les chemins-cible" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...tout, de A à Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...simple groupe d'items seulement" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Tri un seul groupe d'items" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...le contenu des sous-menu sélectionné, mais pas plus creux" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...le contenu des sous-menus et de leur descendance" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Vérification du menu résultant" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "nom de dossier que je vais taper" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Ajoute un dossier dont je vais entrer le nom" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Insère le dossier dont je vais entrer le nom" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Ajout du panneau principal" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "De tous les formats supportés, demander lequel utilisé à chaque fois" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Lorsqu'on sauvegarde du texte en Unicode, utiliser le format UTF8 (autrement, cela sera UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Lorsqu'on dépose du texte, décider automatiquement du nom de fichier résultant (autrement, on le demande à l'usager a chaque fois)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Affiche la fenêtre de confirmation après avoir déposé" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Lorsqu'on fait un glisser et déposer de texte vers un panneau:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Placer le format le plus désirable en premier (utiliser le glisser et déposer)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(si celui le plus désiré n'est pas présent, on prendra le second et ainsi de suite)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(ne fonctionnera pas avec certains applications, décoché si problème)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Montre les fichiers-systèmes" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Montre l'espace-libre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Montre les étiquettes" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Liste des lecteurs" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Le curseur a passé la fin de la ligne" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Affiche les caractères spéciaux" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Options de l'éditeur interne" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Fond" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Fond" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Réinitialiser" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Enregister" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Élements d'attributs:" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "En avant-plan" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "En avant-plan" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Texte sélectionné" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Utiliser (et éditer) selon le schéma global des ajustements" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Utiliser les paramètres locaux" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Gras" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "Inverse" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Italique" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Inverse" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Barré" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Inverse" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Soulignement" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Inverse" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Non" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Oui" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Ajouter..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Effacer..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importation/Exportation" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Insérer..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Trier..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Aucun." #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Toujours déployer tout l'arbre" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Non" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Gauche" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Droite" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Liste des groupses d'onglets favoris (on peut utiliser le glisser et déposer)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Autre options" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Quoi restituer où pour l'entrée choisie:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Onglet à conserver:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Sauvegarder l'historique des dossiers:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Les onglets de gauche sauvés seront ramenés à:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Les onglets de droite sauvés seront ramenés à:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un séparateur" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Ajoute un séparateur" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sous-menu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Ajouter un sous-menu" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Compacte le tout" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...au niveau de l'élément sélectionné seulement" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Couper" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "efface tout!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sous-menu et tous ses éléments" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "juste le sous-menu mais en conservant ses éléments" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "élément sélectionné" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Efface l'élément sélectionné" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exporter vers fichier .tab classique" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "Menu de test des groupes d'onglets favoris" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importe les fichiers classique d'onglets selon les ajustements par défaut" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importe les fichiers classique d'onglets à l'emplacement sélectionné" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importe les fichiers classique d'onglets à l'emplacement sélectionné" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importe les fichiers classique d'onglets dans un sous-menu à l'emplacement sélectionné " #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Insérer un séparateur" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Insérer un sous-menu" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Déploie toutes les branches" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Coller" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renommer" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...tout, de A à Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...un seul groupe d'items seulement" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Tri un seul groupe d'items" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...le contenu des sous-menus sélectionnés, mais pas plus profond" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...le contenu des sous-menus et de leur descendance" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Vérification du menu résultant" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Ajouter" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Ajouter" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Duplique" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "En dessous" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Éditer" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Insérer" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "Insérer" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Supprimer" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Renommer" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Au dessus" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Chemin de démarrage de la commande. Ne metter jamais entre guillemets." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Nom de l'action. Ce ne sera jamais passé au système, c'est simplement un nom idenitifant l'action choisi par vous et pour vous." #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "Paramètre à passe à la commande. Les noms longs de fichier doivent être entre guillemets." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "Command à exécuter. Les noms long doivent être entre guillemets." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Description de l'action" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Actions" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Peut être réarranger par glisser et déposer" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Types de fichiers" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icône" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Les actions peuvent être glissées/déposées" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Les extensions peuvent être triées par glisser et déposer" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Les types de fichier peuvent être trier par glisser et déposer" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Action :" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Commande :" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paramètres:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Chemin de démarrage:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Chemin au démarrage" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Personalisé avec..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Personalisé" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Éditer" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Ouvrir dans l'éditeur" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Éditer avec..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Récupérer la sortie de la commande" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Ouvrir dans l'éditeur interne" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Ouvrir avec la visionneuse interne" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Ouvrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Ouvir avec..." #: tfrmoptionsfileassoc.miseparator.caption msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Exécuter dans un terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Voir" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Ouvrir dans la visionneuse" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Voir avec..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Cliquez-moi pour changer l'icône!" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Exécuter via l'invite de commande" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Menu contextuel étendu" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Lorsqu'on accès au menu d'association, offrir d'ajouter l'extension du fichier sélectionné courant aux configuration d'extension si elle ne correspond pas déjà un groupe existant" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Configuration des associations d'extensions" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Offrir d'ajouter à la configuration d'association d'extension la sélection lorsqu'elle n'y est pas déjà" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Lorsqu'on accède les associations d'extensions, offrir d'ajouter celle du fichier sélectionné si elle n'est pas déjà configurée" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Exécuter via le terminal puis fermer" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Exécuter via le terminal et demeurer actif" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Options étendures:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Afficher la fenêtre de confirmation pour:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Opération de copie" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Opération d'effacement" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Utiliser la corbeille lors des suppressions. (L'utilisation des touches Maj+Del permet la suppression sans passer par la corbeille.)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Opération d'effacement vers la corbeille" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Ne pas tenir compte du marqueur \"lecture seule\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Opération de déplacement" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "Recherche pour les parties de noms" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Traiter les commentaires avec les fichiers/dossiers" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Séletionner uniquement le nom du fichier lors d'un renommage (pas l'extension)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Afficher l'onglet sélectionné dans la boite de dialogue des copies/déplacement" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Continuer en cas d'erreurs lors des opérations et les afficher dans la fenêtre du journal" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Recherche de texte dans les fichiers" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Exécution des opérations" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Recherche de fichiers" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interface usager" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Taille du tampon pour les opérations sur les fichiers (en KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Taille du tampon pour le calcul de signature (en KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Montre la progression des opérations dans" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Modèle de recherche par défaut:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Méthode de renommage automatique des fichiers à dupliquer:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Nombre de cycles de pulvérisation:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Utiliser la mémoire pour les recherches dans les fichiers texte" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Utiliser un flux pour les recherches dans les fichiers texte" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Réinitialiser aux options par défaut DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Autoriser la superposition des couleurs" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Utiliser un cadre seul pour le curseur" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utiliser l'indicateur en gradient" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Utilisez la couleur de sélection inactive" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Utiliser la sélection inverse" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Bordure du curseur" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicateur d'espace-disque libre" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fond:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Arrière-plan 2 :" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Couleur du curseur:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Caractère du curseur:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Couleur du curseur inactif" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Couleur de sélection inactive" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Niveau de luminosité du panneau inactif" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Couleur arrière de l'indicateur" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Couleur avant de l'indicateur" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Couleur de marque:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Un aperçu apparaît ci-dessous. Vous pouvez vus déplacer, sélectionner un fichier et voir l'effet immédiatement des différentes options." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Couleur du Texte:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Ne pas charger la liste des fichiers juqu'au moment où l'onglet est activé" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Mettre les noms des dossiers entre crochets" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Colore les nouveaux fichiers et ceux actualisés" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Active le renommage du fichier en double-cliquant sur son nom" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Charger la liste des fichiers dans un \"tread\" séparé" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Charger les icônes après la liste des fichiers" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Afficher les fichiers cachés et système" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Lors de la sélections des fichiers avec la barre d'espace, se déplacer sur le fichier suivant vers le bas (comme avec <Insér.>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatage" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Tri" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Sensible à la casse:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorrect" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Format des dates et heures:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format de taille de fichier:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Insérer de nouveaux fichiers" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Triage des dossiers:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Méthode de tri:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Déplace les fichiers mise à jour" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Supprimer" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modèle..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Couleurs de type de fichiers (se trie par glisser et déposer)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Attributs de catégorie:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Couleur de catégorie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Masque de catégorie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Nom de catégorie:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Police de la console" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Police de l'éditeur" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Police du journal" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Police principale" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Police pour la visionneuse en mode \"Book\"" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Police du lecteur de fichiers" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Ajoute un raccourci clavier" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Efface le raccourci clavier" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "Éditer raccourci clavier" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Filtres" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Catégories:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Commandes:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fichiers des raccourcis clavier:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Commande" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Raccourcis clavier" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Description" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Raccourci clavier" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Paramètres" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Contrôle" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pour les chemins suivants et leurs sous-dossiers :" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Montre les icônes pour les actions dans les menus" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Afficher les icônes \"overlay\", par exemple pour les liens" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Désactiver les icônes spéciales" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Icône dans les menus" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " &Taille des icônes " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Montrer les icônes à gauche des noms de fichier" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Toutes" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Toutes les associations existantes + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Pas d'icônes" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Seulement les icônes standard" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Ajouter les noms sélectionnés" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Ajouter les noms sélectionnés avec le chemin &complet" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorer (ne pas montrer) les fichiers et dossiers suivant :" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Enregistrer dans :" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Les flèches gauche et droite change de dossier (déplacement comme Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Frappe" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Lettres" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Lettres" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters" msgstr "Lettres" #: tfrmoptionslayout.cbflatdiskpanel.caption #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Boutons plats" #: tfrmoptionslayout.cbflatinterface.caption #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Interface simple" #: tfrmoptionslayout.cbflattoolbar.caption #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Boutons plats" #: tfrmoptionslayout.cbfreespaceind.caption #| msgid "Show free space indicator on drive label" msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Afficher l'espace disponible sur l'étiquette des volumes/disques" #: tfrmoptionslayout.cblogwindow.caption #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Afficher la fenêtre du journal" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Afficher les opérations dans les panneaux en arrière-plan" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Afficher la barre de progression dans le menu" #: tfrmoptionslayout.cbshowcmdline.caption #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Afficher la ligne de commande" #: tfrmoptionslayout.cbshowcurdir.caption #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Afficher le dossier courant" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Afficher les boutons des volumes/disques" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Afficher l'étiquette avec l'espace libre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Afficher les boutons de lecteur" #: tfrmoptionslayout.cbshowkeyspanel.caption #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Afficher les boutons des touches de &fonction (F3 à F10)" #: tfrmoptionslayout.cbshowmainmenu.caption #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Afficher le menu principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Afficher la barre d'outils" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Afficher l'étiquette d'espace libre restant" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Afficher la barre de statut" #: tfrmoptionslayout.cbshowtabheader.caption #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Afficher la ligne de titre dans les onglets" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Afficher les &onglets de dossiers" #: tfrmoptionslayout.cbtermwindow.caption #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Afficher la fenêtre de terminal" #: tfrmoptionslayout.cbtwodiskpanels.caption #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Afficher deux barres de boutons avec les volumes/disques (largeur fixe, au dessus de la fenêtre des fichiers)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Apparence de l'écran" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Voir le contenu du fichier-journal" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Inclure la date dans le nom du fichier-journal" #: tfrmoptionslog.cblogarcop.caption #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Archivage/extraction des données des archives compressées" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Ligne de commande d'exécution externe" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Copie/Déplacement de fichier - Création de liens durs/symboliques" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Supprimer" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Créations/Suppressions des dossiers" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Journaliser les erreurs" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Créer un fichier journal :" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Journaliser les messages d'information" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Démarrage/Fermeture" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Journaliser les opérations &réussies" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "\"Plugin\" de système de fichier" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Emplacement du fichier journal" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Journalisation des opérations" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Statut de l'opération" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Efface les vignettes pour les fichiers qui n'existent plus" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Voir le contenu du fichier-journal" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Toujours aller à la racine du lecteur lorsqu'on change de lecteur" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Montrer les messages d'avertissement (seulement le bouton \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Sauverager les vignettes en cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Vignettes" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Concernant les importation/exportation avec TC:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Fichier de configuration:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Exécutable de TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Chemin de sortie de la barre d'outils:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Taille de vignette:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgctxt "TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION" msgid "&Selection by mouse" msgstr "Sélection à la souris" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "TFRMOPTIONSMOUSE.GBSCROLLING.CAPTION" msgid "Scrolling" msgstr "Défilement" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Sélection" #: tfrmoptionsmouse.lblmousemode.caption msgctxt "TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION" msgid "&Mode:" msgstr "Mode:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION" msgid "&Line by line" msgstr "Ligne par ligne" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION" msgid "Line by line &with cursor movement" msgstr "Ligne par ligne avec les mouvements du curseur" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgctxt "TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION" msgid "&Page by page" msgstr "Page par page" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Configurer" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Activer" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Supprimer" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Raffiner" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Les \"plugins\" de recherche permettent d'utiliser des algorithmes de recherche alternatifs ou des outils externes (comme \"locate\", etc)." #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Les \"plugins\" de compresseur sont utilisés pour travailler avec les archives compressées." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Les \"plugins\" de contenu permettent d'afficher la liste des métadonnées des fichiers comme les tags mp3 ou les attributs des images. Ils permettent aussi d'utiliser ces métadonnées dans les recherches ou l'outil de renommage en lots." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Les \"plugins\" de dystème de fichier permettent d'accéder à des systèmes de fichiers qui ne sont pas pris en charge par le système d'exploitation ou sur des périphériques externes comme les Palm et PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Les \"plugins\" de visualisation permettent d'afficher différents formats de fichiers comme les images, les tableurs, les bases de données, etc, dans une visionneuse intégrée. (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Actif" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Enregistré pour" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nom du fichier" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "\"Plugins\" de recherche (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "\"Plugins\" de compresseur (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "\"Plugins\" de contenu (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "\"Plugins\" de système de fichiers (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "\"Plugins\" de visualisation (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Commence par (le nom doit commencer par les caractères tapés)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Se &termine par (les derniers caractères avant le . de l'extension doivent correspondre)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Options" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Correspondance exacte de nom" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Sensible à la casse" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Rechercher tous ces éléments" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Conserver le nom donner à l'onglet lorsqu'on le déverouille" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activer le panneau cible lors d'un clic sur un de ses onglets" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Montrer les entêtes des onglets même s'il n'y a qu'un &seul onglet" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Fermer les onglets doublons lorsqu'on quitte l'application" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Confirmation pour la fermeture de tous les onglets" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Confirmer la fermeture des onglets verrouillés" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Limiter la légende de l'onglet à" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Afficher les onglets verrouillés avec un astérisque *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Disposer les &onglets sur plusieurs lignes" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&FlècheHaut ouvre un nouvel onglet à l'arrière-plan" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Ouvrir les nouveaux onglets à côté de l'onglet courant" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Réutiliser les onglets existants quand c'est possible" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Afficher le bouton de fermeture des onglets" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Toujours afficher la lettre du lecteur dans l'onglet" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Titre des onglets de dossiers" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caractères" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Action à faire si on double clique sur un onglet:" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Position des onglets" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Aucun" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Non" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Gauche" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Droite" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Aller à la configuration des groupes d'onglets favoris après l'avoir re-sauvegarder" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Aller à la configuration des groupes d'onglets favoris après en avoir sauvegarder un nouveau" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Active les options extra des groupes d'onglets favoris (choix du panneau-cible lorsqu'on rappel, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Valeurs des options extra des groupes d'onglets favoris lorsqu'on en ajoute un nouveau" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Options \"extra\" des onglets de dossiers" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Lorsqu'on restitue un onglet, conserver les onglets existants:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Les onglets de gauche sauvegardé seront rechargés:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Les onglets de droite sauvegardé seront rechargés:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conservation de l'historique des dossis avec ce groupe d'onglets favoris:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Position par défault du nouveau groupe d'onglets favori lorsqu'on l'ajoute:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Commande pour simplement exécuter le terminal:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Commande pour exécuter une commande en mode terminal et qui sera fermé ensuite:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Commande pour exécuter une commande en mode terminal et qui demeurera ouvert:" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Commande:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Paramètres:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "L'expression {command} devrait normalement être présente ici quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode terminal" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Commande:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "Paramètres:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "L'expression {command} devrait normalement être présente ici quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode terminal" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Commande:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "Paramètres:" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "L'expression {command} devrait normalement être présente ici quelque part pour refléter l'emplacement où doit être la commande à exécuter en mode terminal" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "&Dupliquer le bouton" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Supprimer" #: tfrmoptionstoolbar.btnedithotkey.caption #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Éditer raccourci clavier" #: tfrmoptionstoolbar.btninsertbutton.caption #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insérer un nouveau bouton" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Choisissez" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Autre..." #: tfrmoptionstoolbar.btnremovehotkey.caption #| msgid "Remove hotkey" msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Retire raccourci clavier" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Suggestion" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Suggère un tooltip basé sur le type de bouton, sa commande et paramètres" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Bo&utons simples" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapporter les erreurs avec les commandes" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Entrez les paramètres, un sur chaque ligne. Appuyez F1 pour obtenir de l'aide sur les paramètres." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Apparence" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Taille de la barre" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Commande" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paramètres:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Aide" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Raccourci clavier" #: tfrmoptionstoolbar.lbliconfile.caption #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Icône :" #: tfrmoptionstoolbar.lbliconsize.caption #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "T&aille de l'icône :" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Commande:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paramètres:" #: tfrmoptionstoolbar.lblstartpath.caption #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Chemin de démarrage" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&InfoBulles" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Ajoute une barre d'outil avec TOUTES les commandes internes" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pour une commande externe" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pour une commande interne" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pour un séparateur" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pour un sous-menu" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Archivage..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exporter..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barre courante..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outil (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier de barre d'outil TC en conservant les existants (.BAR)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier de barre d'outil TC en remplaçant les existants (.BAR)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conservant les existants)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplaçant les existants)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barre d'outil principale..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Savegarde une archive de la barre d'outil" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "vers un fichier de barre d'outils (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "vers un fichier .BAR de TC (remplace les existants)." #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "vers un fichier de barre d'outil TC en remplaçant les existants (.BAR)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "vers \"wincmd.ini\" de TC (conservant les existants)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "vers \"wincmd.ini\" de TC (remplaçant les existants)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la séelection courante" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importer..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Ramène un backup de barre d'outils" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil principale" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "d'un fichier de barre (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "d'un fichier de barre de TC (.BAR)" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "de \"wincmd.ini\" de TC" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "pour ajouter à la barre d'outils courante" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outil courante" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "pour ajouter une nouvelle barre d'outils à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "pour ajouter à la barre d'outils principale" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "pour remplace la barre d'outil pricipale" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Recherche et remplace..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "dans tout ce qu'il y a plus haut..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "dans toutes les commandes" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "dans toutes les icônes" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "dans tous les paramètres" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "dans tous les chemins de démarrage" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "immédiatement après la sélection courante" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "comme premier élément" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "comme dernier élément" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "immédiatement avant la sélection courante" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Type de bouton" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Garder la fenêtre de terminal ouverte après avoir exécuté un programme" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Exécuter dans un terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Utiliser un programme externe" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Paramètres supplémentaires" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Chemin du programme à exécuter" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Ajouter" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Appliquer" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Supprimer" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modèle..." #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Afficher les info-bulles dans les panneaux de fichiers" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Champs personnalisés par type de fichier" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Indice de catégorie:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Masque de catégorie:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Nom de catégorie:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Vue en mode \"Book\" (book viewer)" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemple" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Arrière-plan dans la vue en mode \"Book\"" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Couleur de la police en mode \"Book\"" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Nombre de colonne en mode \"Book\"" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configurer" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Compresser les fichiers" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Créer des archives séparées, &une par fichier/dossier" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Créer une archive auto-e&xtractible" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Cr&ypter" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Déplacer les fichiers dans l'archive" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archive en plusieurs &volumes" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Placer les fichiers dans une archive TAR avant de compresser" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ajouter les noms de chemins dans l'archive (seulement si récursif)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Nom et emplacement du fichier archive :" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compression" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Fermer" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Tout extraire et exécuter" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Extraire et exécuter" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propriété de l'archive" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributs :" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Taux de compression :" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Date :" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Methode :" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Taille originale :" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fichier :" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Taille de l'archive :" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Programme d'archivage:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Date/heure :" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Ferme le panneau de filtre" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Entrez le texte à rechercher ou pour filtrer" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensible à la casse" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Dossiers" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fichiers" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Que le début corresponde" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Que la fin corresponde" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filtres" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Alterner entre la recherche et le filtre" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "D'avantage de règles" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Moins de règles" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Utiliser les \"plugins\" de contenu, combiner avec:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "\"Plugin\"" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Champ" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Opérateur" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valeur" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "ET (tout correspond)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "OU (n'importe quel concordance)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annuler" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Fermer" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Ai&de" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Choisissez les caractères à insérer:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Changer les attributs" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Collant" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archive" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Créé :" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Caché" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accédé :" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modifié :" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Lecture seule" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Récursif" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Système" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propriétés de l'horodatage" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributs" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits :" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groupe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(les champs grisés signifient des valeurs inchangées)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Autres" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Prorpiétaire" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texte :" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Exécuter" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(les champs grisés signifient des valeurs inchangées)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal :" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lire" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Écrire" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Fonctions pour choisir le chemin approprié" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Découper le fichier" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Demander un fichier de vérification de signature CRC21" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nom du fichier" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Taille et nombre de parts" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Dossier-cible" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Fichier source" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Nombre de blocs" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Octets" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "Gigaoctets" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "Kilooctets" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "Mégaoctets" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Date révision" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Système d'explotation" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plateforme" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Révision" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Version de Widget" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Créer un lien symbolique" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destination vers laquelle le lien va pointer" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom du lien" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Fermer" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparer" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Appairer" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Appairer les dossiers" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymétrique" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "par contenu" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorer la date" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "seulement les sélections" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Sous-dossiers" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Montre:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Taille" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Date" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Date" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Taille" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(dans la fenêtre principale)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparer" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vue de gauche" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vue de droite" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "dupliqué" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "uniques" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Appuyez \\Comparer\" pour lancer" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchronise" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmer l'écrasement" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Ajouter un nouveau" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuler" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Changer" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Défaut" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Supprimer" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Raffiner le \"plugin\"" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Détecter le type des archives par le contenu" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Impossible de supprimer le(s) fichier(s)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Supporte le cryptage" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Afficher comme des fichiers normaux (cacher l'icône d'archive)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Supporte les opérations d'archivage en mémoire" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Impossible de modifier l'archive existante" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "L'archive peut contenir plusieurs fichiers" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Impossible de créer une(des) nouvelle(s) archive(s)" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Supporte les boites de dialogue avec les options" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Autoriser la recherche de texte dans les archives" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Description:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Chaine à détecter:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Extension:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Marqueurs :" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Nom:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "\"Plugin\":" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "\"Plugin:\"" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "A propos de la visionneuse" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Affiche le message d'À propos" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copie fichier" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copie fichier" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Efface le fichier" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Efface le fichier" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Sui&vant" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Charger le fichier suivant" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Précédent" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Charger le fichier précédent" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Miroir" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Mirroir" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Déplace fichier" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Déplace fichier" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recharger" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recharger le fichier courant" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Tourner de 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Tourner de 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Tourner de 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Tourner de 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Tourner de 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Tourner de 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Enregistrer sous..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Sauvegarder le fichier sous..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Étirer" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Étendre l'image" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copier" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copier" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Rogner" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Supprimer" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Supprimer" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Plein écran" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Surbrillance" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Miroir" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Déplacer" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Déplacer" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colorer" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Yeux rouges" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionner" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Annuler" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Zoom -" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visionneuse" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Crayon" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Surbrillance" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Colorer" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Vue" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "A propos" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Vue en &Binaire" #: tfrmviewer.micenter.caption msgid "Center" msgstr "Centrer" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copier dans le presse-papier" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Édit&er" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "En&codage" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Quitter" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fichier" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Plein écran" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Graphiques" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Vue en &Hexadécimal" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Image" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Vue en mode \"&Book\"" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Mirroir" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "\"Plugins\"" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Prévisualisation" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Imprimer..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Pivoter" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Enregister" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Enregistrer sous..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Capture d'écran" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Rechercher" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Rechercher le suivant" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Rechercher le précédent" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Tout sélectionner" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Étirer" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "Étendre seulement les grandes images" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Vue en mode &Texte" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vue" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Vue avec &retours à la ligne" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Zoom -" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copier dans le presse-papier" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Tout sélectionner" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Démarrer" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Arrêter" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Opérations sur les fichiers" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Toujours sur le dessus" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Utilisez le glisser et déposer pour déplacer les opérations dans les files d'attente" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annuler" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annuler" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nouvelle file d'attente" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Montre dans une fenêtre détachée" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Mettre en premier dans la file d'attente" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Mettre en dernier dans la file d'attente" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "File d'attente" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Plus de file d'attente disponible" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "File d'attente 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "File d'attente 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "File d'attente 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "File d'attente 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "File d'attente 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Montre dans une fenêtre détachée" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Une pause pour tous" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quand le fichier existe" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Travailler en arrière-plan (connexion séparée)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quand le fichier existe" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Ce fichier est introuvable et pourrait aider à valider la concaténation des fichiers à la finl:\n" "%s\n" "\n" "Est-ce que vous pourriez le rendre disponible et appuyer \"OK\" quand vous êtes prêt,\n" "ou \"ANNULER\" pour continuer tout de même sans ce fichier?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annule le filtre rapide" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuler l'opération en cours" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Entrez le nom, avec l'extension, pour le texte déposé" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Format du texteà importer" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Brisé:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Général:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Manquant:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Erreur de lecture:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Succès:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Entrer la signature et sélectionnez l'algorithme" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Vérifier la signature" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Le presse papier ne contient aucune information de barre d'outils" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Tous;Panneau actif;Panneau de gauche;Panneau de droite;Opérations sur fichier;Configuration;Réseau;Divers;Port parallèle;Impression;Sélection;Securité;Presse-papier;FTP;Navigation;Aide;Window;Ligne de commande;Outil;Affichage;Utilisateur;Onglet;Tri;Journal" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ordonné de manière classique;Trié alphabétiquement" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Date" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nom" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Taille" #: ulng.rsconfcolalign msgid "Align" msgstr "Aligner" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Légende" #: ulng.rsconfcolconfig msgid "Config" msgstr "Configurer" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Supprimer" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenu du champ" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Déplacer" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Largeur" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personnaliser la colonne" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Configuration des associations d'extension" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Confirmer la ligne de commande et les paramètres" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copie (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barre d'outils DC importée" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barre d'outils TC importée" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_TexteDéposé" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_TexteHTMLDéposé" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_TexteRichDéposé" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_TexteSimpleDéposé" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_TexteUnicodeUTF16Déposé" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_TexteUnicodeUTF8Déposé" #: ulng.rsdiffadds msgid " Adds: " msgstr "Adjouté:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Effacé:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Les deux fichiers sont identiques!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Corresponde:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modifie:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Toutes les opérations sont terminées" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progressions de toutes les opérations en cours %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Abandonner" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tous" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Ajo&uter" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Renomme automatiquement le fichier" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annuler" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Continuer" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Copier &dans" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copie tout à l'intérieur" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Sortie de l'application" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignorez tous" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Non" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Aucu&n" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Autre" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Écraser" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "&Tout Écraser" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Écrasement de ceux plus grands" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Écrasement de ceux plus vieux" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Écrasement des plus petits" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Renommer" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Reprendre" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Ré-&essayer" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Passer" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Passer pour &tous" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Oui" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calculer les fichiers et dossiers" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calculer une signature..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Vérification de signature..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copie du(des) fichier(s)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Suppression du(des) fichier(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Déplacement du(des) fichier(s)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pause" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Démarrer" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "File d'attente" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Vitesse %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Vitesse %s/s, temps restant estimé %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Scinder" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Effacement sécurisé du(des) fichier(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sans étiquette>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sans média>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Éditeur interne de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Aller à la ligne:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Aller à la ligne" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nom de fichier :" #: ulng.rseditnewopen msgid "Open file" msgstr "Ouvrir le fichier" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Retour en arrière" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Rechercher" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Aller en avant" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Remplacer" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "avec un éditeur externe" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "avec éditeur interne" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Exécuter via l'invite de commande" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Exécuter via le terminal puis fermer" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Exécuter via le terminal et demeurer actif" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Gauche;Droite;Actif;Inactif;Les deux;Aucun" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Non;Oui" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exporté_de_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Demande;Ré-écris;Copie à l'intérieur;Saute" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Demande;Ré-écris;Ré-écris plus vieux;Saute" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Demande;N'ajuste plus désormais;Ignore les erreurs" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRE" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Définir un modèle" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s niveaux" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "tout (profondeur illimitée)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "seulement le dossier courant" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Le dossier %s n'existe pas !" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Trouvé : %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Sauvegarder le modèle de la recherche" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nom du modèle:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Analyse effectuée : %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Analyse" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Rechercher les fichiers" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Durée du balayage:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Commencer à" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%s libre sur %s octets" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s octets libres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Date/heure d'accès" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributs" #: ulng.rsfunccomment msgid "Comment" msgstr "Commentaire" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Taille compressé" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Date/heure de création" #: ulng.rsfuncext msgid "Extension" msgstr "Extension" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Groupe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Changer date/heure" #: ulng.rsfunclinkto msgid "Link to" msgstr "Lier à" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Date/heure de modification" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nom" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nom sans l'extension" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propriétaire" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Chemin" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Taille" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Erreur lors de la création du lien dur (hardlink)." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "aucun;Nom, a-z;Nom, z-a;Ext, a-z;Ext, z-a;Taille 9-0;Taille 0-9;Date 9-0;Date 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Désolé, rien n'a été détecté à importer!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Avertissement! Lorsqu'on ramène liste de dossiers favoris, cela va effacer celle existant pour la replacer par celle importée.\n" "\n" "Êtes-vous sûr de vouloir continuer?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Fenêtre de copie/déplacement" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Différences" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Fenêtre d'édition du commentaire" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Éditeur" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Rechercher les fichiers" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visionneuse" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "On ne troube pas de rérérence à la barre par défaut" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Concaténation terminée" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Désélectionner le masque" #: ulng.rsmarkplus msgid "Select mask" msgstr "Choisissez le masque" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Masque de saisie :" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Une configuration de colonne avec ce nom existe déjà" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Pour éditer une autre vue \"colonne\", vous devez SAUVEGARDER, COPIER ou EFFACER celle qui vous éditez présentement" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurer les colonnes personnalisées" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Entrez un nom pour la nouvelle colonne personnalisée" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configurer cette vue personnalisée des colonnes" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actions" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Déconnecté les lecteurs-réseaux" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Éditer" #: ulng.rsmnueject msgid "Eject" msgstr "Éjecter" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Extraire ici..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Connecter un lecteur réseau..." #: ulng.rsmnumount msgid "Mount" msgstr "Monter" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nouveau" #: ulng.rsmnunomedia msgid "No media available" msgstr "Média indisponible" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Ouvrir" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Ouvrir avec" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Autre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Compresse ici..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Trier par" #: ulng.rsmnuumount msgid "Unmount" msgstr "Démonter" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Voir" #: ulng.rsmsgaccount msgid "Account:" msgstr "Compte :" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Paramètres additionnels pour la ligne de commande du programme d'archivage :" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Mauvais CRC32 pour le fichier résultant:\n" "\"%s\"\n" "\n" "Voulez-vous conserver le fichier résultant même s'il est corrompu?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Vous ne pouvez pas copier/déplacer le fichier \"%s\" sur lui-même !" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "On ne peut pas effacer le dossier %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Le changement de dossier vers [%s] a échoué !" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Fermer tous les onglets inactifs?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Cet onglet est verrouillé! Forcer sa fermeture tout de même?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options concernant la vue \"colonne\" ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Êtes-vous certain de vouloir quitter ?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Le fichier %s a changé. Voulez-vous tout de même l'écraser avec ce contenu?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "On ne peut pas copier en retour - voulez-vous conserver le fichier qui a changé?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Copier les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copier la sélection \"%s\" ?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Créer un nouveau type de fichier \"%s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Entrez l'emplacement et le nom de fichier pour la barre d'outil DC à sauvegarder" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Action personalisée" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Effacer le fichier copié partiellement?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Supprimer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Déplacer les %d fichiers/dossiers sélectionnés dans la corbeille ?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Supprimer la sélection \"%s\" ?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Déplacer le fichier/dossier \"%s\" sélectionné dans la corbeille ?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossible de mettre \"%s\" à la corbeille ! Le supprimer définitivement ?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Le volume/disque n'est pas accessible" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Les options concernant le glisser et déposer ont été modifiées. Voulez vous les sauvegarder avant de quitter?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Enter le nom de l'action personalisée" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Donnez l'extension de fichier:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Donnez le nom:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Entrez un nom pour le nouveau type de fichier à créer avec l'extension \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Erreur CRC (contrôle de redondance cyclique) dans l'archive" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Les données sont erronées" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Impossible de se connecter au serveur : \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossible de copier le fichier %s vers %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Il existe déjà un dossier nommé \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La date %s n'est pas supportée" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Le dossier %s existe déjà !" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Fonction interrompue par l'utilisateur" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Erreur à la fermeture du fichier" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossible de créer le fichier" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Plus de fichier dans l'archive" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossible d'ouvrir le fichier existant" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Erreur de lecture du fichier" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Erreur lors de l'écriture dans le fichier" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Impossible de créer le dossier %s !" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Lien non valide" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Pas de fichier trouvé" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "La mémoire est insuffisante" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Fonction non supportée !" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Erreur dans la commande du menu contextuel" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Erreur de chargement de la configuration" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Erreur de syntaxe dans l'expression régulière !" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Impossible de renommer le fichier %s en %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "On ne peut sauver l'association!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossible de sauvegarder le fichier" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Impossible de définir les attributs pour \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossible de définir la date/heure pour \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "On ne peut pas ajuster le propiétaire/groupe pour \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "On ne peut ajuster les permissions pour \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Le cache (mémoire tampon) est trop petit" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Il y a trop de fichier à archiver" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format d'archive inconnu" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Êtes-vous sûr que vous vous détruire toutes les entrées de vos onglets-favoris? (On ne pourra pas défaire cette action!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Déplacer ici les autres entrées" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(fin de menu)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "Entrer un nom pour ce groupes d'onglets favoris" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Savegarde vers une nouvelle entrée de groupe d'onglets favoris" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Erreur de chargement de vos groupes d'onglets favoris" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Erreur de sauvegarde des groups d'onglets favoris" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Nombre de groupes d'onglets exportés avec succès: %d sur %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Ajustement pour sauvegarde de l'historique des dossiers par défaut pour un nouveau groupe d'onglets favoris" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "La combinaison d'onglet-favori a été ajoutée!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Nombre de fichiers importés avec succès: %d sur %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Les .tab favoris ont été importés" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Les dernières modifications des onglets favoris n'ont pas été sauvegardées. Est-ce que vous voulez les sauvegarder avant de continuer?" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "Les onglets-favoris ont été modiés. Est-ce que vous voulez sauvegarder avant de quitter?" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nom" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "Cela va restituer le groupe d'onglets favoris sauvegardé sous le nom \"%s\"" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "Réécrire la dernière configuration d'onglets favoris avec les onglets courants" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Nom du menu:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Conservation de l'historique des dossis avec ce groupe d'onglets favoris:" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(séparateur)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nom du sous-menu" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Cela va restituer le groupe d'onglets favoris sauvegardé sous le nom \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Sauvegarder les onglets courants sur un groupe d'onglets favoris existant" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Les options d'association d'extension extra ont été modifiées.\n" "\n" "Est-ce que vous voulez les sauvez avant de quitter?\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Les options d'association d'extension ont été modifiées.\n" "\n" "Est-ce que vous voulez les sauvez avant de quitter?\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Le fichier %s a été modifié, le sauvegarder ?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s octets, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Écraser:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Le fichier %s existe déjà, l'écraser ?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Avec fichier:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Ce fichier est introuvable: %s" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Opérations sur les fichiers en cours" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Certaines opérations sur les fichiers ne sont pas encore terminées. Fermer Double Commander peut entraîner la perte de données." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Les options concernant les opérationsur les fichiers ont été modifiées. Voulez vous les sauvegarder avant de quitter?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options concernant les couleurs de panneau ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Le fichier %s est en lecture seule. Le supprimer quand même ?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La taille du fichier \"%s\" est supérieure à l'espace disponible sur le système de fichier de destination !" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Le dossier %s existe déjà, l'écraser ?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Suivre le lien symbolique \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Sélectionnez le format du texte à importer" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Ajoute les %d dossiers sélectionnés" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Ajoute le dossier sélectionné: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Ajoute le dossier courant: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Commande" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_something" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuration des dossiers favoris" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Êtes-vous sûr de retirer toutes les entrées de votre liste de dossiers favoris? (Il n'y a pas de \"undo\" à cette action!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Cela exécutera la commande suivante:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ceci est le dossier favori appelé " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Cela changerait le chemin du panneau actif pour le suivant:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Et le panneau inactif changerait de chemin pour le suivant:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Erreur en archivant les entrées..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Erreur d'exportation d'entrées" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exporter tous!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exporte la liste des dossiers favoris - Sélectionnez les entrées à exporter" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exporte la sélection" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importe tous!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importe liste des dossiers favoris - Sélectionnez les entrées à importer" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importe la sélection" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Chemin" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Pointez le fichier \".hotlist\" à importer" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "La liste des dossiers favoris a été modifié. Voulez-vous la sauvegarder?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nom du favori:" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Nombre de nouvelles entrées: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Rien à exporter" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Chemin du dossier" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ajoute à nouveau le dossier sélectionné: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ajoute à nouveau le dossier courant: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Sélectionner le fichier de dossiers favoris" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Commande" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fin de menu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Sous-menu:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nom :" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(séparateur)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nom du sous-menu" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Dossier-cible" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Détermine l''ordre de tri du panneau actif après avoir changé de dossier" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Détermine l''ordre de tri du panneau inactif après avoir changé de dossier" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Quelques fonctions pour choisir le chemin parmis ceux relatif, absolu, selon les dossiers spéciaux de Windows, etc." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Entrées sauvegardées: %d\n" "\n" "Fichier de backup: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Nombre d''entrées exportées: " #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Voulez-vous effacer tous les éléments du sous-menu [%s]?\n" "Répondre NON va effacer seulment les délimiteurs de menu mais conservera tous les éléments à l'intérieur du menu\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Sélectionnez où sauvegarder le fichier des dossiers favoris" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longueur de fichier résultant incorrecte: \"%s\"" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Insérez le prochain média de support.\n" "\n" "C'est pour écrire le fichier:\n" "\"%s\"\n" "\n" "Nombre d'octets restant à écrire: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Erreur dans la ligne de commande" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nom de fichier incorrect" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format incorrect du fichier de configuration" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Chemin invalide" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Le chemin \"%s\" contient de caractères interdits" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ce n'est pas un \"plugin\" valide!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ce \"plugin\" est fait pour Double Commander pour %s.%sIl ne peut pas fonctionner avec Double Commander pour %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Mise entre guillemets invalide" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Sélection non permise" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Chargement de la liste des fichiers..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Localisez le fichier de configuration de TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Localisez le fichier de l'exécutable (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copie du fichier %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Suppression du fichier %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Erreur :" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Lancement externe" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Résultat externe" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Extraction du fichier %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Information :" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Créer le lien %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Créer le dossier %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Déplacer le fichier %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options concernant le journal ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Archiver dans le fichier %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Supprimer le dossier %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Effectué :" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Créer le lien symbolique %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Test de l'intégrité du fichier %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Pulvérisez le fichier %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Pulvérisez le dossier %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mot de passe principal" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Introduisez le mot de passe principal :" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Les options de la section divers ont été modifiées. Est-ce que vous voulez sauvegarder avant de quitter?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nouveau fichier" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Le volume suivant de l'archive va être extrait" #: ulng.rsmsgnofiles msgid "No files" msgstr "Aucun fichier" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Aucun fichier sélectionner." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espace insuffisant sur le volume cible. Continuer ?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espace insuffisant sur le volume cible. Réessayer ?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Impossible de supprimer le fichier %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Pas encore implémenté." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ci-dessous est un aperçu. Vous pouvez voir immédiatement le résultat de vos ajustements de couleur et tester un peu." #: ulng.rsmsgpassword msgid "Password:" msgstr "Mot de passe :" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Les mots de passe sont différent!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Introduire le mot de passe :" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Mot de passe (Firewall) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "S'il vous plait, ré-entrez le mot de passe pour vérification:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Ajouter %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configurer" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Supprimer %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Écraser la configuration existante ?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problème d'exécution de la commande (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Nom de fichier pour le texte déposé:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "S'il vous plait, rendez ce fichier disponible. Ré-essayer?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Entrez un nom pour ce groupe d'onglets favoris" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Entrez un nom pour ce nouveau menu" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Renommer/Déplacer les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Renommer/Déplacer la sélection \"%s\" ?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Vous devez redémarrer Double Commander pour activer les changements." #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Choisissez le type de fichier auquel ajouté une extension \"%s\"" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Sélectionnés: %s de %s, fichiers: %d sur %d, dossiers: %d sur %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Choisissez le fichier d'exécutable pour" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "S'il vous plait, choisissez uniquement un fichier contenant une (des) signature(s)!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Merci de choisir l'emplacement du volume suivant" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Définir le nom du vomume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Dossier spéciaux" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Ajoute le dossier du panneau actif" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Ajoute le dossier du panneau inactif" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Parcourir et utiliser le dossier désigné" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Utilise variable d'environnement" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Aller configurer les chemin spéciaux de DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Aller au variables d'environnement" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Aller aux dossiers spéciaux de Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Aller aux dossiers spéciaux de Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Transforme le chemin en absolu" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Transforme le chemin en relatif par rapport à un dossier spécial de DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Transforme le chemin en relatif par rapport à une variable d'environnement" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Transforme le chemin en relatif par rapport à un dossier spécial de Windows (même que TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Transforme le chemin en relatif par rapport à un autre dossier spécial de Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Utilise un chemin spécial de Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Choisir parmis d'autre dossiers spéciaux de Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Choisir parmis des dossiers spéciaux de Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Cet onglet (%s) est verrouillé! Voulez-vous ouvrir ce dossier dans un autre onglet?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renommer l'onglet" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nom du nouvel onglet :" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options \"extra\" concernant les onglets ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options concernant les onglets ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Chemin du dossier cible :" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le fichier de configuratio de TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le fichier de l'exécutable de TC:\n" "%s\n" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Erreur! TC est toujours en cours d'exécution mais devrait être fermé pour compléter cette opération.\n" "Fermez-le et appuyez OK ou ANNULER pour avorter.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Erreur! On ne trouve pas le dossier de sortie pour la barre d'outil TC désirée:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Entrez l'emplacement et le nom de fichier pour la barre d'outil TC à sauvegarder" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Les options concernant le terminal ont été modifiées.\n" "\n" "Voulez vous les sauvegarder avant de quitter?\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%\" est maintenant dans le presse-papier" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "L'extension du fichier sélectionné n'est pas parmis celles reconnues" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Erreur! Problème de sauvegarde de la barre d'outil" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Sélectionnez le fichier \".toolbar\" à importer" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Sélectionnez le fichier \".BAR\" à importer" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "La barre d'outil a été modifié. Voulez-vous sauvegarder avant de quitter?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Entrez l'emplacement et le nom de fichier pour la barre d'outil à ramener" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Sauvegardé!\n" "Nom du fichier de barre d'outil: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Trop de fichier sélectionnés." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Indéterminé" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<SANS EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<SANS NOM>" #: ulng.rsmsgusername msgid "User name:" msgstr "Nom d'utilisateur :" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nom d'utilisateur (Firewall) :" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Nom de volume :" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Entrez la taille du volume :" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Lancer l'effacement sécurisé pour les %d fichiers/dossiers sélectionnés ?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Lancer l'effacement sécurisé pour la sélection \"%s\" ?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "avec" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Pas de changement;MAJUSCULE;minuscule;Premier caractère majuscule;Premier Caractère De Chaque Mot Majuscule;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Annulé" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Calcun de signature" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Calcul de signature en \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Calcul de signature de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calcul en cours..." #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calcul \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Concaténage" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Concaténer fichiers dans \"%s\" vers \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copie" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copie de \"%s\" vers \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copie \"%s\" vers \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Création d'un dossier" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Création du dossier \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Suppression" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Effacement dans \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Efface \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Exécution" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Exécution de \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Décompression" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Décompression de \"%s\" vers \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminés" #: ulng.rsoperlisting msgid "Listing" msgstr "Liste" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Liste \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Déplacement" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Déplacement de \"%s\" vers \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Pas encore démarrés" #: ulng.rsoperpacking msgid "Packing" msgstr "Compression" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Compression de \"%s\" vers \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "En attente" #: ulng.rsoperpausing msgid "Pausing" msgstr "Mettre en attente" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Dans la file d'attente" #: ulng.rsoperrunning msgid "Running" msgstr "En cours" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Ajustement d'une propriété" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Ajustement d'une propriété dans \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Ajustement d'une propriété de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Fractionnement" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Fractionnement de \"%s\" vers \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "En cours de démarrage" #: ulng.rsoperstopped msgid "Stopped" msgstr "Annulés" #: ulng.rsoperstopping msgid "Stopping" msgstr "Annuler" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Test dans \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Test \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Vérification de la signature" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Vérification de la signature dans \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Vérification de la signature de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "En attente de l'accès au fichier source..." #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "En attente de la réponse de l'utilisateur..." #: ulng.rsoperwiping msgid "Wiping" msgstr "Pulvérisation" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Pulvérise dans \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Pulvérise \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Dossier de travail" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Ajout au début;Ajout à la fin;Ajout astucieux" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Supprimer :" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Extraire sans les chemins des dossiers contenus dans l'archive :" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Mode d'analyse de format:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID :" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Position de l'ID :" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Plage de recherche du ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Paramètre" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Mot de passe :" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Créer une archive auto-extractible :" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Tester l'archive :" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Type d'archive :" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valeur" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associer le \"plugin\" %s avec:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Premier;Dernier;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Ordre classique;Ordre alphabétique (mais \"Langue\" sera toujours premier)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Le panneau actif à gauche et l'inactif à droite (classique);Le panneau de gauche à gauche, celui de droite à droite" #: ulng.rsoptdisable msgid "Disable" msgstr "Désactiver" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Activer" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Entrer une extension" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Curseur" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Signet" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Signet + Curseur" #: ulng.rsoptexampletext msgid "Text" msgstr "Texte" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Ajoute au début;Ajoute à la fin;Ordre alphabétique" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "fenêtre séparée;fenêtre séparée réduite;panneau d'opération" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "dynamique;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Le raccourci %s de la commande cm_Delete va être enregistré, donc it pourra être utilisé pour inverser cette option." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Ajoute un raccourci clavier pour %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Ajoute un raccourci" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "On ne peut ajuster de raccourci" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Changer le raccourci" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Commande" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Le raccourci %s de la commande cm_Delete a un paramètre qui peut passer outre cette option. Voulez-vous changer ce paramètre pour utiliser celui global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Le raccourci %s de la commande cm_Delete a besoin d'avoir un paramètre modifié pour correspondre au raccourci %s. Est-ce que vous voulez le changer?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Description" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Éditer raccourci clavier pour %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Paramètre fixe" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Raccourci clavier" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Raccourcis clavier" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<aucun>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paramètres" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Ajuster le raccourci pour effacer un fichier" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pour que cette option fonctionne avec le raccouris %s, le raccourci %s doit être assigné à cm_Delete but imais il est déjà assigné à %s. Désirez-vous changer cela?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Le raccourci %s de la commande cm_Delete est une séquence de raccouci pourlaquelle l'action inverse avec \"SHIFT\" ne peux pas être habitué. Cet ajustement peut donc ne pas fonctionner." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Raccourcis utilisé" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Le raccourci %s est déjà utilisé." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Modifier en %s ?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "utilisé par %s dans %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "utilisé pour cette commande mais avec des paramètres différents" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Gestions des archives" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Rafraichissement automatique" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportements" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Vue résumé" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Couleurs" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Colonnes" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuration" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Colonnes personalisées" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Dossiers favoris" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Glisser et déposer" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Bouton de lecteurs" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Onglets favoris" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Extension \"extra\"" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associations de fichiers" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Opérations sur fichiers" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panneaux des fichiers" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Affichage des fichiers" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Types de fichiers" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Onglets" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Options extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Polices" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Surbrillance" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Raccourcis clavier" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icônes" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Fichiers/dossiers ignorés" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Clavier" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Langue" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposition" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Journal" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Divers" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Souris" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Filtres de recherche rapide" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barre d'outils" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Compléments" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Outils" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Info-bulles" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Aucun;Ligne de commande;Recherche rapide;Filtre rapide" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bouton gauche; Bouton droit;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "en premier de la liste de fichiers;après les dossiers (si les dossiers sont triés avant les fichiers);à la position selon le tri;à la fin de la liste de fichiers" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Le \"plugin\" %s est déjà enregistré pour les extensions suivantes :" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actif" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nom de fichier" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nom" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Enregistré pour" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Sensible;Insensible" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Fichiers;Dossiers;Fichiers et Dossiers" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Cacher le panneau de filtre s'il n'est pas actif;conserver ces options pour les prochaines sessions" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "non sensible à la casse;selon paramètres régionaux (aAbBcC);Première en majuscule, le reste en minuscule (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "trier par nom et montrer en premier;trier comme les fichiers et montrer en premier;trier comme les fichiers" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alphabétique avec prise en considération des accents;Tri naturel alphanumérique (lettres et chiffres)" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Haut;Bas;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Séparateur;Commande interne;Commande externe;Menu" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC classique - Copy (x) nom_de_fichier.ext;Windows - nom_de_fichier (x).ext;Autre - nom_de_fichier(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne change pas de position;utilise les mêmes option que pour les nouveaux fichiers;à l'endroit normal du tri en cours" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fichiers: %d, Dossiers: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossible de changer les droits pour \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Impossible de changer le propriétaire pour \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fichier" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dossier" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Tube nommé" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Non" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Périphérique spécial bloc" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Périphérique spécial caractères" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Lien symbolique" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Type inconnu" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Oui (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Résultat de la recherche" #: ulng.rssearchstatus msgid "SEARCH" msgstr "RECHERCHE" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modèle sans nom>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Sélectionner un dossier" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Affiche de l'aide pour %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tous" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Catégorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Colonne" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Commande" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Nom de fichier" #: ulng.rssimplewordfiles msgid "files" msgstr "fichiers" #: ulng.rssimplewordparameter msgid "Param" msgstr "Paramètre" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Aperçu" #: ulng.rssimplewordresult msgid "Result" msgstr "Résultat" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Sauvegardé!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Dossier de travail" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Octets" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigaoctets" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilooctets" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Mégaoctets" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Téraoctets" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fichiers : %d, Dossiers: %d, Taille: %s (%s octets)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossible de créer le dossier cible !" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Format de fichier incorrect !" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossible de scinder le fichier !" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Le nombre de partie est supérieur à 100 ! Continuer ?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Sélectionner un dossier :" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Erreur à la création du lien symbolique." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texte par défaut:" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texte simple" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ne fait rien;Ferme l'onglet;Accéder aux groupes d'onglets favoris;Le menu des onglets" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Jour(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Heure(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minute(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mois" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Seconde(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semaine(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Année(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Renomme l'onglet favori" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Renomme le sous-menu" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Différences" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Éditeur" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Erreur d'ouverture de l'outil comparateur" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Erreur de lancement de l'éditeur" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Erreur de lancement du terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Erreur de lancement de la visionneuse" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visionneuse" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Merci de rapporter cette erreur sur le \"bug tracker\" avec une description de ce que vous étiez en train de faire ainsi que le fichier suivant : %sCliquez %s pour continuer ou %s pour quitter le programme." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Les deux panneaux, de l'actif à l'inactif" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Les deux panneaux, de gauche à droite" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Chemin du panneau" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Isole chaque nom entre crochers ou ce que vous voulez" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Simplement le nom du fichier, sans extension" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Nom de fichier complet (chemin+nom de fichier)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Aide avec les variables \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Va demander à l'utilisateur d'entre un paramètre avec une valeur par défaut suggérée" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Panneau de gauche" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Nom de fichier temporaire de la liste des noms de fichiers" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Nom de fichier temporaire de la liste des noms complets de fichier (chemin+nom de fichier)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Nom de fichier temporaire de la liste des noms de fichiers avec chemins relatifs" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Seulement extension de fichier" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Seulement nom de fichier" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Autres exemples de ce qui est possible" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Chemin, avec le séparateur de dossier à la fin" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "À partir d'ici jusqu'à la fin de la ligne, la variable-pourcent est indiquer par le symbole \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Retourne le signe de pourcentage" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "À partir d'ici jusqu'à la fin de la ligne, la variable-pourcent est de retour indiquer par le symbole \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Faire précéder chaque nom avec \"-a\" ou ce que vous désirez" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Interroge l'usager pour un paramètre;La valeur par défaut proposée]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Nom de fichier avec chemin relatif" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Panneau droit" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Le chemin cmplet du second fichier sélectionné dans le panneau de droite" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Montre la commande avant de l'exécuter" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Simplement un message]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Va afficher un message simplement" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Panneau actif (source)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Panneau inactif" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Les noms de fichiers seront mis entre guillemets à partir d'ici (défaut)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "La commande sera faite en mode terminal qui demeurera ouver à la fin." #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Les chemins auront un séparateur de dossier à la fin" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Les noms de fichiers ne seront pas mis entre guillemets à partir d'ici" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "La commande sera faite en mode terminal qui sera fermé à la fin" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Les chemins n'auront pas de séparateur de dossier à la fin (défaut)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Réseau" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visionneuse interne de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Maubaise qualité" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Encodage" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Type d'image" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nouvelle Taille" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s introuvable !" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "avec une visionneuse externe" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "avec la visionneuse interne" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Nombre de remplacements: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Aucun remplacement n'a eu lieu." ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.tr.po������������������������������������������������������������0000644�0001750�0000144�00001140063�12666540554�017244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.46 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-20 12:40+0300\n" "PO-Revision-Date: 2013-08-27 11:34+0100\n" "Last-Translator: Ahmet Çağlar <ahmetcaglar111@hotmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Türk\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Tüm" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "İptal" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Özel sütun görünümlerini düzenle" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Arka plan:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Gösterge sınırı" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Fazla renge izin ver" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Kullanıcı tanımlı yazı tipi ve renk kullanın" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Metin rengi" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Yazı karakteri:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Boyut:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Arka plan 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Görünümünü yapılandır Nr:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Gösterge rengi:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Metin İmleci:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "İşaret rengi:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "İsim:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Sütun Ekle" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Sütunları Düzenle" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Önizleme" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Boş alanı kontrol edin" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Doğru bağlantılar" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Salt okunur özniteliğini kaldır" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Bağlantıları İzle" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "Dizin mevcutsa" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Dosya mevcutsa" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Kapat" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Yapı" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal Editor" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Ana Sayfa" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Gözden geçir" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption #, fuzzy #| msgid "Version %s" msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Çeviri Çağlar" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&İptal" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Baştaki konumuna getir" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Özelliklerini seçin" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Kayıtlar" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Sıkıştırılmış" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Dizin" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Şifreli" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Gizli" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Salt okunur" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Seyrek" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Sembolik link" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistem" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Geçici" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS öznitelikleri" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Genel öznitelikler" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption #, fuzzy #| msgid "Gruppe" msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Sahip" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Çalıştır" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Oku" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Metin olarak:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Yaz" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Sağlama toplamı hesapla..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Her dosya için ayrı bir sağlama toplamı dosyası oluştur" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Sağlama toplamı dosya(lar)ını kaydet:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Sağlama toplamı doğrula..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ekle" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Bağlan" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Sil" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Düzenle" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Bağlantı Yöneticisi" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Bağlantıla:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Seçenekler" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Bu seçenekleri varsayılan olarak kaydet" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Dosya(lar)Kopyala" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Dosya/klasör açıklaması" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Açıklamayı düzenle:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kodlama:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Otomatik karşılaştır" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "İkili mod" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "İptal" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "İptal" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Bloğu sağa kopyala" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Bloğu sağa kopyala" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Bloğu sola kopyala" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Bloğu sola kopyala" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Yinele" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Tümünü &Seç" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Geri Al" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ç&ıkış" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "İlk fark" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "İlk fark" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Büyük-küçük harf ayrımı yapma" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Boşlukları yoksay" #: tfrmdiffer.actkeepscrolling.caption #, fuzzy #| msgid "Keep Scrolling\"Kaydırma tutma" msgid "Keep Scrolling" msgstr "Kaydırma devam" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Son Fark" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Son Fark" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Satır farklılıkları" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Sonraki Fark" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Sonraki Fark" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Sol Açık..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Sağ Açık..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Arkaplan Rengi" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Önceki Fark" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Önceki Fark" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Güncelle" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Güncelle" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Kaydet" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Kaydet" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Farklı Kaydet ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Farklı Kaydet ..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Sol Kaydet" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sol Kaydet" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sol olarak kaydet..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sol olarak kaydet..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sağ Kaydet" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sağ Kaydet" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sağ olarak kaydet..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sağ olarak kaydet..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Karşılaştır" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Karşılaştır" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kodlama" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kodlama" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Dosyaları karşılaştır" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "Sol" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "Sağ" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Eylemler" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Düzenle" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kodlama" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Dosya" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Seçenekler" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&İptal" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Hakkında" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Yapılandır" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Yapılandırma" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopyala" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Kes" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "&Sil" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Bul" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Bul" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Sonrakini Bul" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Yapıştır" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Yenile" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Yenile" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Değiştir" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Değiştir" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Hepsini Seç" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Tümünü Seç" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Geri A" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Geri al" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Kapat" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Çıkış" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Yeni" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Yeni" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Açık" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Açık" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Kaydet" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Kaydet" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Farklı &Kaydet..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Tümünü Kaydet" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Düzenleyici" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Düzenle" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodlama" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Olarak aç..." #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Farklı Kaydet..." #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Dosya" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Sözdizimi vurgulama" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "tfrmeditor.n5.caption" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Büyük/küçük harf duyarlılığı" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgid "S&earch from caret" msgstr "Şapka &imi ara" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Kısaltılmış metin karekterleri" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Sadece &seçili metin" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "&Sadece tüm kelimeler" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Seçenek" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&İle değiştirin:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Bulmaya çalış:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Yön" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Dosya(ları) aç" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Eğer dosyalar kaydedilmişse sıkıştırılmış yol adlarını aç" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Her bir arşivi ayrı bir alt dizine aç(arşiv adıyla)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Varolan dosya(ların) üzerine yaz" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Sıkıştırılmış dosya(ları) dizine aç:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "Dosya maskesi eşleşen dosyaları ayıkla:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Şifrelenmiş Dosya için şifre" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Ekle" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Ekle" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Ekle" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Aşağı" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Kaldır" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Kaldır" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Kaldır" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Yeniden Adlandır" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Yukarı" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Dosya ilişkileri" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Eylemler" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Uzantıları" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Dosya türü" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Simge" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Eylem:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Komut" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Düzenle" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Düzenleyici´de aç" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Dosya adı" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Dosya yolu" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Tam yol" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Çıkış komutu Alın" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Açık" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Konsol penceresinde çalıştırın" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "VFS Aç" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Göster" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Görüntüleyicide açık" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Bekle..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Dosya Adı:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Kaynak:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Geçici dosyayı(TEMP)silmek için Kapat'ı tıklatın!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Tarafından:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Sonra:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Kapat" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Özellikleri" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID(yürütme Grup kimliği kurun) bir dosya/klasör verilen dosya izinleri özel bir türüdür." #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID (Kullanıcı Kimliği ayarlayın) bir dosyaya verilen dosya izinleri özel bir türü" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Sahibi" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Diğer" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Metin" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Çalıştır" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Dosya adı" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Adı:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Dosya adı" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Yol:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Grup" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Son erişim" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Son değişiklik:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Son durum değişikliği:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Sekizli:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Sahibi" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Okuma" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Boyutu:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sembolik link için:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Yaz" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikleri" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Özellikleri" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Ekle" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmfinddlg.btnedit.caption msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "&Düzenle" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Dosya'ya git" #: tfrmfinddlg.btnlastsearch.caption msgid "&Last search" msgstr "" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Yeni arama" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Kaydet" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Sil" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Yükle" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Kaydet" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Başlat" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "İptal" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Göster" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "&Liste kutusunu besle" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Dosyaları bul" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Büyük/küçük harf duyarlı" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Tarihinden itibaren:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Bitiş tarihi:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Büyüklükleri:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "En büyük dosya boyutu" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Dosyadaki metni bul" #: tfrmfinddlg.cbfollowsymlinks.caption msgid "Follow s&ymlinks" msgstr "" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Metin içermeyen dosyaları bul" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Daha eski değil:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Dosya adının bir kısmını ara" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Kısaltılmış metin karekterleri" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Metni Değiştir" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Yeni Tarih:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Eski Tarih:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Arama eklentisi kullan" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Veri Bul" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kodlama:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Dosya Maskesi" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Directory" msgid "Start in &directory" msgstr "DoubleCommander dizininde ara" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Alt dizinleri ara" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Önceki arama(lar)" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Listeden kaldır" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Bulunan tüm öğeleri göster" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Görüntüleyicide göster" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Gelişmiş" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Yükle/Kaydet" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Eklentiler" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Sonuçlar" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standart" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Bul" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Bul" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Büyük/küçük harf duyarlı" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Sabit bağlantı oluştur" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Mevcut hedef (nereye bağlantı noktası)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Bağlantı adı" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Bağlayıcı" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Kaydedin..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Öğe" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Dosya Adı" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Aşağı" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Aşağı" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Kaldır" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "&Sil" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Yukarı" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Yukarı" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Hakkında" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dosya adını komut satırına ekle" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Yolu ve dosya adını komut satırına ekle" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Komut satırına yolu kopyala" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Kullanılan alanı hesapla" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Dizin Değiştir" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Ana dizini değiştir" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Kök dizini Değiştir" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Sağlama toplamı hesapla..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Sağlama toplamı doğrula..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Boş günlük dosyası" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Günlüğü Temizle penceresi" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Içeriğine göre karşılaştır" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Bağlam menüsünü göster" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy F5" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopyala F5" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Dosya ad(ları) tam yolu ile kopyala" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Dosya ad(ları) Panoya Kopyala" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Onay istemeden dosya(ları) kopyala" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Aynı panele kopyala" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopyala" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Kullanılan alanı göster" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "K&es" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete F8" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Sil F8" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Dizin geçmişi" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Sık Kullanılanlar &klasörü" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit F4" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Düzenle F4" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Açıklamayı D&üzenle" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Yeni dosya Düzenle" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Dosya listesi üzerinde Yol alanını düzenle" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Panoları &Değiştir" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ç&ıkış" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Dosyaları Ayıkla" #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Dosya &ilişkileri" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Dosya(ları) birleştir" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Dosya Özelliklerini &Göster" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Dosyayı Parçala" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Komut satırında odakla" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Listedeki ilk öğeye ekleme noktasını(imleç) ayarla" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Listedeki son madde için imleci ayarlayın" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Sabit bağlantı oluştur" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&İçindekiler" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Panoları yatay bölme modu" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Klavye" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Sol &= Sağ" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Sol sürücü listesini aç" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Panoya &Yükle öğesini seç" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Dosya Yükle öğesini seç" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Yeni Dizin F7" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Ayni uzantıya &sahip olanların tümünü seç" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Seçimi tersine çevir" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Tümünü Seç" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Gruptan& seçimi kaldır" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Grup seç" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Tüm Seçimi Kaldır" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Pencereyi simge durumuna küçült" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Çoklu ¥iden adlandırma aracı" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Ağ &Bağlantısı..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Ağ &Bağlantısını kes" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hızlı &Ağ Bağlantısı..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Yeni Sekme" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Sonraki &Sekmeye Geç" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Açık" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Arşivi açmak için tekrar dene" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Dosya Çubuğu Aç" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Klasörü &Yeni Sekmede Aç" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Sanal Dosya Sistemi &listesi(VFS) aç" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "İşlemleri & Görüntüle" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Seçenekler..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Sıkıştırılmış Dosya(lar)" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Parçalamanın konumunu ayarla" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Yapıştır" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Bir önceki &sekmeye geç" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hızlı süzgeç" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hızlı ara" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hızlı Görünüm paneli" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Yenile" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move F6" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Taşı F6" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Dosya(ları) onay istemeden Yeniden adlandır/ Taşı" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Sekmeyi &Yeniden Adlandır" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Seçimi geri yükle" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Te&rs Sırala" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Sağ &= Sol" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Sağ sürücü listesini aç" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Komut istemi penceresini aç" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Seçimi &Kaydet" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Seçimi dosyaya &Kaydet" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Araştır" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Öznitelikleri &Değiştir" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Kilitli Dizinleri &Yeni Sekmede Aç" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Kilitli" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Kilitli, ancak &izin verilenler değiştirilebilir" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Açık" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Düğme menüsünü göster" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Komut satırı geçmişi göster" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu F9" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü F9" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Gizli/sistem &dosyalarını göster" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Özniteliklerine &Göre Sırala" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Tarihine &Göre Sırala" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Uzantısına &Göre Sırala" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Adına &Göre Sırala" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Boyutuna &Göre Sırala" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Etkinleştirme/devre dışı bırakma yoksayma listesi dosyaları için dosya adları" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Simgesel bağlantı &Oluştur" #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Hedef &= Kaynak" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Arşivi(leri)Test Et" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Sol penceredeki seçilen klasörü taşı" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "sağ penceredeki seçilen klasörü taşı" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Ayni uzantılı olanların tümünün seçimini kaldır" #: tfrmmain.actview.caption #, fuzzy #| msgid "View F3" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Göster F3" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Ziyaret edilen yolun etkin görüntüsünün geçmişini göster\"" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Git sonraki giriş tarihi" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Git önceki giriş tarihi" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Double Commander Web Sitesini ziyaret edin" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Temizle" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit F10" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Çıkış F10" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Dizin" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "&Sil" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal F9" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Komut İstemi F9" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Önemli liste Dizini" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Sol paneldeki sağ panelin geçerli dizini göster" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Dizinin Başına Git" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Kök Dizinine Git" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ana dizinine git" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Önemli Liste Dizini" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Sağ paneldeki sol panelin geçerli dizini göster" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Yol" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "İptal" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopyala..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Bağlantı oluştur" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "tfrmmain.miline37.caption" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Temizle" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Gizle" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Hepsini Seç" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Taşı..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Sembolik bağ oluştur" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Sekme seçenekleri" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Çıkış" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Eski haline getir" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Başlat" #: tfrmmain.mnualloperstop.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Bitiş" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Komutlar" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Yapılandır" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Dosyalar" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Yardım" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&İşaretle" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Ağ" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Görünüm" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Seçenekler" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Sekmeler" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopyala" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Kes" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Sil" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Düzenle" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Yapıştır" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "İptal" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Kısayol tuşu" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "Tanımla..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "Veya önceden tanımlanmış seçenek türünü seçin:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Yeni dizin oluştur" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Yeni klasör için ad girin" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Yeni Boyut" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Yükseklik :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG sıkıştırma kalitesi" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Genişlik:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Yükseklik" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Genişlik" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Kapat" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Sil" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Yükle" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Tümünü geri yükle" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Kaydet" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Çoklu yeniden adlandırma" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Etkinleştir" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Kısaltılmış metin karekterleri" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Yerine Kullan" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E]Uzantı" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Sayaç" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Bul ve Yerine Koy" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Günlük sonuç" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Ön ayarlı" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Uzantı" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Bul..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Aralık" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Dosya &Adı" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Değiştir..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Başlangıç ​​Numarası" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Genişlik" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Yöntem sayma" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Gün" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Gün (2 basamaklı)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Haftanın günü (kısa, Örneğin, \"Prtesi\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Haftanın günü (uzun, Örneğin, \"Pazartesi\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex]Karakter konumu x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y]Karakter konumu x ile y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h]Saat" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Saat (2 basamaklı)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Dakika" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Dakika (2 basamaklı)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Ay" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Ay (2 basamaklı)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ay Adı (kısa, Örneğin, \"Şbat\")" #: tfrmmultirename.mimonth3.caption #, fuzzy #| msgid "[MMMM] Month name (long, e.g. \"january\")" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ay Adı (Uzun, Örneğin, \"Şubat\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Adı" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx]Karakter konumu x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Karakter konumu x ile y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tarih..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Uzantı..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Adı..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Eklenti" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[S] Saniye " #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Saniye (2 basamaklı)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Yıl (2 basamaklı)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Yıl (4 basamaklı)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Eski dosya adı" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Yeni dosya adı" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Dosya Yolu" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Uygula" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnautoconfig.caption msgid "A&uto Configure" msgstr "" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "tfrmoptionsarchivers.btnmultiarcadd.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "tfrmoptionsarchivers.btnmultiarcapply.caption" msgid "A&pply" msgstr "" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "tfrmoptionsarchivers.btnmultiarcdelete.caption" msgid "D&elete" msgstr "" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "tfrmoptionsarchivers.btnmultiarcrename.caption" msgid "&Rename" msgstr "&Yeniden Adlandır" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgid "De&bug mode" msgstr "" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgid "E&nabled" msgstr "" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgid "S&how console output" msgstr "" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "tfrmoptionsarchivers.gbarchiveroptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmoptionsarchivers.lblarchiveadd.caption msgid "Add&ing:" msgstr "" #: tfrmoptionsarchivers.lblarchiveextension.caption msgid "E&xtension:" msgstr "" #: tfrmoptionsarchivers.lblarchiveextract.caption msgid "Ex&tract:" msgstr "" #: tfrmoptionsarchivers.lblarchivelist.caption msgid "&List:" msgstr "" #: tfrmoptionsarchivers.lblarchivelistend.caption msgid "Listing &finish (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgid "Listing for&mat:" msgstr "" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgid "Listin&g start (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiver.caption msgid "Arc&hiver:" msgstr "" #: tfrmoptionsarchivers.lbldescription.caption msgid "De&scription:" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Ek" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Genel" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Gerektiğinde &Boyut,Tarih veya özniteliklerini değiştir" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Aşağıdaki &yolları ve alt dizinleri için:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgid "When &files are created, deleted or renamed" msgstr "" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Güncellemeleri arka planda yap" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Otomatik yenilemeyi devre dışı bırak" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Dosya listesini yenile" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgid "Al&ways show tray icon" msgstr "" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Küçültüldüğünde simgeyi sistem tepsisine taşı" #: tfrmoptionsbehavior.cbonlyonce.caption msgid "A&llow only one copy of DC at a time" msgstr "" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "&Düzenle" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "" #: tfrmoptionsconfiguration.cbdirhistory.caption msgid "&Directory history" msgstr "" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Yapılandırma dosyasının konumu" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Çıkışta Kaydet" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Komut satırında ayarla" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tüm" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Yeni" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Farklı Kaydet..." #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Kaydet" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Fazla renge izin ver" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Genel" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Gösterge sınırı" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Arka plan:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Arka plan 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Gösterge rengi:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Metin İmleci:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Yazı karakteri:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Boyut:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Metin rengi" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "İşaret rengi:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Sütun Ekle" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "İsim:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Yol:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Kes" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Yapıştır" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Kaydet" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgctxt "tfrmoptionseditorcolors.textboldcheckbox.caption" msgid "&Bold" msgstr "&Kalın" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgctxt "tfrmoptionseditorcolors.textitaliccheckbox.caption" msgid "&Italic" msgstr "&Yatık" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgctxt "tfrmoptionseditorcolors.textunderlinecheckbox.caption" msgid "&Underline" msgstr "&Alt çizgi" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Hayır" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Kes" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Yapıştır" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Yeniden Adlandır" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Ekle" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Ekle" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Aşağı" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Düzenle" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Kaldır" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Yeniden Adlandır" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Yukarı" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Eylemler" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Uzantıları" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Dosya türü" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Simge" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Eylem:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Komut" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Düzenle" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Düzenleyici´de aç" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Çıkış komutu Alın" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Açık" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Konsol penceresinde çalıştırın" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View F3" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Göster F3" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Görüntüleyicide açık" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgid "D&rop readonly flag" msgstr "" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Dosya ara" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Fazla renge izin ver" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Gösterge sınırı" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgid "Backg&round 2:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgid "C&ursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgid "Cursor Te&xt:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgid "&Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgid "T&ext Color:" msgstr "" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgid "Load &file list in separate thread" msgstr "" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgid "Load icons af&ter file list" msgstr "" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Sınıflandır" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Şablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgid "&Editor font" msgstr "" #: tfrmoptionsfonts.lbllogfont.caption msgid "&Log font" msgstr "" #: tfrmoptionsfonts.lblmainfont.caption msgid "Main &font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption msgid "&Viewer font" msgstr "" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "" #: tfrmoptionshotkeys.btnedithotkey.caption msgid "&Edit hotkey" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgid "&Filter" msgstr "" #: tfrmoptionshotkeys.lblcategories.caption msgid "C&ategories:" msgstr "" #: tfrmoptionshotkeys.lblcommands.caption msgid "Co&mmands:" msgstr "" #: tfrmoptionshotkeys.lblscfiles.caption msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Kısayol tuşları" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Kısayol tuşu" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Değişkenler" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "tfrmoptionsicons.cbiconsexclude.caption" msgid "For the following &paths and their subdirectories:" msgstr "Aşağıdaki &yolları ve alt dizinleri için:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgid "Show o&verlay icons, e.g. for links" msgstr "" #: tfrmoptionsicons.cbiconssize.text msgctxt "tfrmoptionsicons.cbiconssize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "" #: tfrmoptionsicons.gbiconssize.caption msgid " Icon size " msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr "Dosya adının solundaki simgeleri göster" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Tümü" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Tüm ilişkili+&exe/LNK(yavaş)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "&Simge yok" #: tfrmoptionsicons.rbiconsshowstandard.caption msgid "Only &standard icons" msgstr "" #: tfrmoptionsignorelist.btnaddsel.caption msgid "A&dd selected names" msgstr "" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Seçilen isimler ile &tam yolu ekle" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Aşağıdaki dosya ve klasörleri Yoksay (görmezden gel):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "&Kaydet:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "" #: tfrmoptionskeyboard.lblalt.caption msgid "Alt+L&etters" msgstr "" #: tfrmoptionskeyboard.lblctrlalt.caption msgid "Ctrl+Alt+Le&tters" msgstr "" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters" msgstr "" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionslayout.cbflatinterface.caption msgid "Flat i&nterface" msgstr "" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Yassı düğmeler" #: tfrmoptionslayout.cbfreespaceind.caption msgid "Show fr&ee space indicator on drive label" msgstr "" #: tfrmoptionslayout.cblogwindow.caption msgid "Show lo&g window" msgstr "" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Panel işlemlerini arka planda göster" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Genel ilerlemeyi menü çubuğunda göster" #: tfrmoptionslayout.cbshowcmdline.caption msgid "Show command l&ine" msgstr "" #: tfrmoptionslayout.cbshowcurdir.caption msgid "Show current director&y" msgstr "" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Göster &sürücü düğmeleri" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption msgid "Show function &key buttons" msgstr "" #: tfrmoptionslayout.cbshowmainmenu.caption msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show &button bar" msgstr "Düğme çubuğunu &göster" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Durum çubuğunu &göster" #: tfrmoptionslayout.cbshowtabheader.caption msgid "S&how tabstop header" msgstr "" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Klasör sekmelerini göster" #: tfrmoptionslayout.cbtermwindow.caption msgid "Show te&rminal window" msgstr "" #: tfrmoptionslayout.cbtwodiskpanels.caption msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr "Ekran düzeni" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgid "&Pack/Unpack" msgstr "" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgid "Cop&y/Move/Create link/symlink" msgstr "" #: tfrmoptionslog.cblogdelete.caption msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionslog.cblogdirop.caption msgid "Crea&te/Delete directories" msgstr "" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Günlük &hataları" #: tfrmoptionslog.cblogfile.caption msgid "C&reate a log file:" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgid "Log &information messages" msgstr "" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Günlük &başarılı işlemler" #: tfrmoptionslog.cblogvfs.caption msgid "&File system plugins" msgstr "" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Günlük dosyası İşlemi" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgid "Show &warning messages (\"OK\" button only)" msgstr "" #: tfrmoptionsmisc.chkthumbsave.caption msgid "&Save thumbnails in cache" msgstr "" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Kaydırma" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Ekle" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Yapılandırma" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Etkinleştir" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Kaldır" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Ayarla" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Alternatif arama algoritmaları kullanmak için arama eklentilerine veya harici araçlara izin ver(\"yerini belirle\",vb.gibi)" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Arşivler ile çalışmak için sıkıştırma eklentileri kullanılabilir." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "İçerik eklentilerine izin ver, genişletilmiş dosya ayrıntıları gibi mp3 etiketleri veya resim özniteliklerini dosya listelerinde görüntülemek için veya onları aramada kullan ve çoklu-yeniden adlandırma aracı" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Dosya sistemi eklentileri işletim sistemi tarafından ulaşılmaz disklere veya (Palm/PocketPC) gibi harici cihazlara erişim sağlar" #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION"dosya tipi imgeleri ğibigörüntülemek için izin verresimlerin" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Görüntüleyici eklentilerine izin ver, dosya tipleri,resimler,elektronik tablolar, veritabanları vb. gibi.gösterilmesini sağlar(F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Etkin" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Eklenti" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Kayıtlı" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Dosya Adı" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Arama eklentileri(.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Sıkıştırma eklentileri (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "İçerik eklentileri (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Dosya sistemi eklentileri (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Görüntüleyici eklentileri(.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&Başlangıç (Adı ilk yazdığınız karakterle başlamalıdır)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Bitiş (Noktadan önceki son karakter ile . uyumlu olmalıdır)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Seçenekler" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Hedef &paneli etkinleştir onun sekmelerinden birisini tıklayarak" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Sadece bir sekme olduğunda da sekme başlığı göster" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgid "Con&firm close all tabs" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "tfrmoptionstabs.cbtabslimitoption.caption" msgid "&Limit tab title length to" msgstr "&Sekme başlık(alınlık) uzunluğunu sınırla" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Kilitli sekmeleri &yıldız işareti * ile göster" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Çoklu satır sekmeleri" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up ön planda yeni sekmede açar" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Geçerli sekmenin yanında yeni bir sekme ekle" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgid "Show ta&b close button" msgstr "" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Klasör sekmeleri başlıkları" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "karakterler" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Hayır" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Sil" #: tfrmoptionstoolbar.btnedithotkey.caption msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Yeni düğme ekle" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Görünüm" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbar.lblexternalcommand.caption msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbar.lblinternalcommand.caption msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Değişkenler" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Araç İpucu" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Ekle" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Uygula" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Sil" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Şablon..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Araç İpucu'nu göster (Not sözleri)" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Dosya türüne göre özel alanlar" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Sınıf ipucu:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Sınıf maskesi" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Sınıf adı" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Kitap Modu Görünümü" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Örnek" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Yapılandır" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Sıkıştırılmış dosyalar" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Ayrı arşiv oluştur, &Bir seçili dosya/dizin başına" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Kendi kendine &açılan arşiv oluştur(SFX)" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Şifrele&mek" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "&Arşive taşı" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Çoklu disk arşivi" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "İlk TAR arşivi yerleştir" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ayrıca sıkıştırılmış yol adları (sadece özyineleme)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Dosya;Sıkıştırma dosya(lar)ına " #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Sıkıştırıcı" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Kapat" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Tümünü aç ve yürüt" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Aç ve yürüt" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Sıkıştırılmış dosyanın Özellikleri" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Öznitelikleri:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Sıkıştırma oranı:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Tarihi:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Yöntemi:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Orijinal boyutu" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Dosya:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Sıkıştırılmış boyutu:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Sıkıştırıcı:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Zaman:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Süzgeç" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Eklenti" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Değer" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "İptal" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Kapat" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Yardım" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&TAMAM" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Öznitelikleri Değiştir" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Yapışkan" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arşiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Oluşturulan:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Gizli" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Giriş:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Değişiklik yap" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Salt okunur" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Özyinelemeli" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Zaman Damgası özellikleri(geçerli tarih ve saat, ayarlı değerleri)" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikler" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Öznitelikler" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption #, fuzzy #| msgid "(gray field means unchanged value)\"" msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gri alan değiştirilmemiş değer anlamına gelir)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Diğer" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Sahibi" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Metin gösterimi" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Yürüt" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy #| msgid "(gray field means unchanged value)\"" msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gri alan değiştirilmemiş değer anlamına gelir)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Sekizli:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Okuma" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Yazma" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "TAMAM" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Ayırıcı" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Dosya Adı" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Boyut ve parça sayıları" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Hedef dizin" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Dosya kaynağı" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Parça sayısı" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption #, fuzzy #| msgid "Gigabytes" msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "Gigabayt" #: tfrmsplitter.rbtnkilob.caption #, fuzzy #| msgid "Kilobytes" msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "Kilobayt" #: tfrmsplitter.rbtnmegab.caption #, fuzzy #| msgid "Megabytes" msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "Megabayt" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Yapı" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal Editor" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Gözden geçir" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption #, fuzzy #| msgid "Version %s" msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Çeviri Çağlar" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&TAMAM" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Sembolik bağlantı oluştur" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Mevcut hedef;bağlantı noktası ile gösterilen" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Bağlantı adı" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Kapat" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Karşılaştır" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Adı" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Boyut" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Tarih" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Tarih" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Boyutu" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Adı" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Karşılaştır" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Yeni ekle" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "İptal" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Değiştir" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Varsayılan" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "TAMAM" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Kaldır" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Ayarlama eklentisi" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content\"" msgid "De&tect archive type by content" msgstr "Arşiv türü içeriğini algıla" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Dosyaları silebilirsiniz" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Şifrelemeyi destekler" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Normal dosyalar olarak göster(Sıkıştırıcı simgesini gizle)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Bellek içi sıkıştırmayı destekler" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Var olan arşivi değiştirebilirsiniz" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "Arşiv birden fazla dosya içerebilir" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Yeni arşivler oluşturabilirsiniz" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Seçenekler iletişim kutusunu destekler" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Metin arşivlerinde arama izni verir" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Tanım:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "Dizi algıla:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Uzantı:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Etiketler" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Adı:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Eklenti" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Eklenti" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Görüntüleyici Hakkında" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Sonraki" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Önceki" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirror.caption msgctxt "tfrmviewer.actmirror.caption" msgid "Mirror" msgstr "Yansıt(Aynala)" #: tfrmviewer.actmirror.hint msgctxt "tfrmviewer.actmirror.hint" msgid "Mirror" msgstr "Yansıt(Aynala)" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Güncelle" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgctxt "tfrmviewer.actrotate180.caption" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate180.hint msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate270.caption msgctxt "tfrmviewer.actrotate270.caption" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate270.hint msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate90.caption msgctxt "tfrmviewer.actrotate90.caption" msgid "Rotate 90" msgstr "" #: tfrmviewer.actrotate90.hint msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate 90" msgstr "" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Farklı Kaydet ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Çek-Düzelt" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopyala" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopyala" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Kırp" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "&Sil" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "&Sil" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Tam Ekran" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Vurgula" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Yansıt(Aynala)" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Taşı" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Taşı" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Boya" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Kırmızı göz" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Yeniden boyutlandır" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Geri al" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Yakınlaştır" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Uzaklaştır" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Göster" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Resimleri otomatik olarak sırayla göster(Slayt Gösterisi)" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Kalem" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Vurgula" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Boya" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Resimleri otomatik olarak sırayla göster(Slayt Gösterisi)" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Göster" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Hakkında" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Ikili olarak göster&Bin dosyaları[0,1]" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Panoya Kopyala" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Düzenle" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodlama" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Çık&ış" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Dosya" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Tam Ekran" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Teknik çizim" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "&Hex olarak göster(onaltılı sayı sistemi)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Resim" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Kitap olarak &göster" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Yansıt(Aynala)" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Eklentiler" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Önizleme" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Yazdır..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Döndür" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Kaydet" #: tfrmviewer.misaveas.caption msgctxt "tfrmviewer.misaveas.caption" msgid "Save As..." msgstr "Farklı Kaydet ..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Ekran görüntüsü" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Ara" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Sonrakini ara" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Öncekini ara" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Tümünü Seç" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "tfrmviewer.mistretch.caption" msgid "Stretch" msgstr "Çek-Düzelt" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Metin olarak &göster" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Göster" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Kaydırma metin &olarak göster" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Yakınlaştır" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Uzaklaştır" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Panoya kopyala" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Tümünü Seç" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Başlat" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Dosya işlemleri" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "İptal" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "İptal" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Dosya mevcutsa" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Dosya mevcutsa" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Öznitelik" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Tarih" #: ulng.rscolext msgid "Ext" msgstr "Dahili" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Adı" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Boyutu" #: ulng.rsconfcolalign msgid "Align" msgstr "Hizala" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Altbaşlık" #: ulng.rsconfcolconfig msgid "Config" msgstr "Yapılandır" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "&Sil" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Alan içeriği" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Taşı" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Genişlik" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Sütunları Özelleştir" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopyala (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "Tüm işlemler tamamlandı" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Tüm işlemlerin ilerleme durumu %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Iptal &et" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tümü" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Ekle" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&İptal" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "İçine &koplaya" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Hepsini içine &kopyala" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Hayır" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Hiçbiri" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&TAMAM" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Üzerine yaz" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Tüm dosyaların &üzerine yaz" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Yeniden Adlandır" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Yeniden dene" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Atla" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Tümünü &Atla" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Evet" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Dosya ve klasörleri hesapla" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Sağlama toplamı hesapla..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Sağlama toplamı doğrula..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Dosya(ları) Kopyala" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Dosya(ları) Sil" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Dosya(ları) Taşı" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Duraklat" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Başlat" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Hız %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Hız %s/s, kalan süre %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "&Parçala" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Dosya(ları) tam sil(üzerine yazarak kurtarılamayacak şekilde sil)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander İç metin editörü" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "Yeni.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Dosyaadı:" #: ulng.rseditnewopen msgid "Open file" msgstr "Dosya aç" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Geri" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Ara" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&İleri" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Değiştir" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Şablonu tanımla" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s Seviye(ler)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Tüm (sınırsız derinlik)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Yalnızca geçerli dizin" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Dizin %s mevcut değil!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Bulundu: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Arama Şablonunu Kaydet" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Şablon adı" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Taranan: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Tara" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Dosyaları bul" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Başlayın" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%sBayt %s içermez" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s boş bayt" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Tarih/saat Erişimi" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Öznitelikleri" #: ulng.rsfunccomment msgid "Comment" msgstr "Açıklama" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Tarih/saat oluştur" #: ulng.rsfuncext msgid "Extension" msgstr "Uzantı" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Bağlantı" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Tarih/saat Son değiştirilme tarihi" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Adı" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Adı, uzantısı hariç" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Sahibi" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Yol" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Boyut" #: ulng.rsfunctype msgid "Type" msgstr "Türü" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Sabit bağlantı oluşturma hatası." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Karşılaştır" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Düzenleyici" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Dosyaları bul" #: ulng.rshotkeycategorymain msgid "Main" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Göster" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Tam ilişkilendir" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maske seçimini kaldır" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maske seç" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Make girişi:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Özel sütunları yapılandır" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Bu özel sütun görünümünü yapılandır" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Eylemler" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Düzenle" #: ulng.rsmnueject msgid "Eject" msgstr "Çıkar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Monte et" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Yeni" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kullanılabilir ortam yok" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Açık" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "Birlikte aç..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Şuna Göre Sırala" #: ulng.rsmnuumount msgid "Unmount" msgstr "Kaldır" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Göster" #: ulng.rsmsgaccount msgid "Account:" msgstr "Hesap:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Arşiv komut satırı için ek değişkenler:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself #, fuzzy #| msgid "You can not copy/move a file \"%s\"to itself!\"" msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Dosyayı \"kendisine!\" kopyalayamaz/taşıyamazsınız\"%s\"" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Dizin değişikliği [%s]başarısız oldu!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Tüm etkin olmayan sekmeler kaldırılsın mı?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Bu sekme (%s) kilitli! Yine de kapatılsın mı?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Çıkmak istediğinizden emin misiniz?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Seçilen %d dosyalar/dizinleri kopyala?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopyalanacakları\"%s\"seç?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Seçili %d dosyaları/dizinleri sil ?" #: ulng.rsmsgdelfldrt #, fuzzy #| msgid "Delete %d selected files/directories into trash can?\"" msgid "Delete %d selected files/directories into trash can?" msgstr "seçilen %d dosyaları/dizinleri çöp kutusuna at?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Seçilenleri sil \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Seçilenleri sil\"%s\" çöp kutusuna at?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Çöp kutusuna\"%s\" atılamıyor! Doğrudan sil?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Sürücü kullanılamıyo" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Dosya uzantısını girin:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Adını girin:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Arşiv verisinde CRC hatası" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Veri kötü" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Sunucuya bağlanamıyor \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Dosya %s kopyalanamıyor %s" #: ulng.rsmsgerrcreatefiledirectoryexists #, fuzzy,badformat msgid "There already exists a directory named \"%s\"." msgstr "Orada zaten o adda bir dizin var" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Tarih %s desteklenmiyor" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Dizin %s zaten var!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "İşlev kullanıcı tarafından iptal edildi" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Dosya kapatma hatası" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Dosya oluşturulamıyor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Daha fazla arşiv dosyası yok" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Varolan dosyayı açamıyor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Dosya okuma hatası" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Dosya yazma hatası" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Dizin oluşturulamıyor %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Geçersiz bağlantı" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Dosya bulunamadı" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Yeterli bellek yok" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "İşlev desteklenmiyor!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntax(Sözdizim)-normal ifadede hata!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Dosya yeniden %s adlandırılamıyor %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Dosya kaydedilemiyor" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Öznitelikleri ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Tarih/saat ayarlanabilir değil \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Arabellek çok küçük" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Sıkıştırma için dosya miktarı çok fazla " #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arşiv biçimi bilinmiyor" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Adı" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Dosya %s değişikliğini,kaydet?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Dosya %s zaten var üzerine yazılsın mı?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Dosya işlemleri etkin" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Bazı dosya işlemleri henüz bitmiş değil .Double Commander´ın kapatılması veri kaybına neden olabilir!" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Dosya %s salt okunur olarak işaretlenmiş. Silinsin mi?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Dosya boyutu \"%s\" hedef dosya sistemi için çok büyük!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Klasör %s zaten var, üzerine yazılsın mı?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Sembolik bağlantıyı izle\"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Yol" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Adı:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Geçersiz dosya adı" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Geçersiz seçim." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Dosya listesi yükleniyor..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Dosyayı kopyala %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Dosya Sil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Hata:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Dosya ayıkla %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Bilgi" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Bağlantı oluştur %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Dizin oluştur %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Dosyayı Taşı %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Doyayı Sıkıştır %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Dizini Kaldır %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Bitmiş:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Sembolik bağlantı oluştur %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Dosya bütünlüğünü sına %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Ana şifre" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Lütfen ana şifreyi girin:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Yeni dosya" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Bir Sonraki birim açılmamış" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Dosya seçilmedi." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Hedef sürücüde yeterli boşluk yok.Yine de devam edilsin mi?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Hedef sürücüde yeterli boşluk yok. Yeniden Dene?" #: ulng.rsmsgnotdelete #, fuzzy,badformat msgid "Can not delete file %s" msgstr "Dosya silinemiyor" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Uygulanmamış." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Şifre" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Lütfen şifreyi girin.:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Şifre (Güvenlik Duvarı):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Ekle %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Yapılandır" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Sil %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Ön ayar \"%s\" zaten var.Üzerine yazılsın mı?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Seçilen %d dosya(ları)/Dizinleri/Yeniden adlandır?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Seçilenleri Taşı/Yeniden adlandır\"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Lütfen,değişiklikleri uygulamak için Double Commander´ı yeniden başlatın" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Lütfen yalnızca sağlama toplamı dosyaları seçin!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Lütfen bir sonraki parçanın konumunu belirtin" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Birim kümesi etiketi" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Sekmeyi yeniden adlandır" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Yni sekme adı" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Hedef yol" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Çok fazla dosya seçili." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Kullanıcı adı:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Kullanıcı adı (Güvenlik duvarı):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Birim etiketi:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Lütfen birimin boyutu girin:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Tam sil %d Seçilen dosya/dizinler?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Tam silme Seçili \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Değişiklik yok;TÜMÜ BÜYÜK HARF;tümü küçük harf;İlk karakter büyük harfle;Her kelimeyi büyük harflerle" #: ulng.rsoperaborted msgid "Aborted" msgstr "İptal edildi" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Hesaplama" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sil" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "Bitmiş" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "Başlatılmadı" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Duraklatıldı" #: ulng.rsoperpausing msgid "Pausing" msgstr "Duraklat" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Sıraya(kuyruk)alındı" #: ulng.rsoperrunning msgid "Running" msgstr "Çalışıyor" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "Başlangıç" #: ulng.rsoperstopped msgid "Stopped" msgstr "Durmuş" #: ulng.rsoperstopping msgid "Stopping" msgstr "Durdur" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Dosya kaynağına erişim için bekleniyor" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Kullanıcı yanıtı bekleniyor" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "" #: ulng.rsoperworking msgid "Working" msgstr "" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Sil:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Yol olmadan Çıkart:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Format ayrıştırma modu:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "KİMLİK(ID):" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "(ID)Kimlik konumu" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID Kimlik arama aralığı (isteğe bağlı)" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Değişkenler" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Şifre sorgu dizgisi:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Kendiliğinden açılan arşiv oluştur(Sfx):" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Deneme:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arşiv tipi adı:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Değer" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Eklentiyi ilişkilendir \"%s\" ile:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "İlk; Son;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Devre dışı" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Etkinleştir" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Uzantıyı gir" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "İmleç" #: ulng.rsoptexamplemark msgid "Mark" msgstr "İşaret" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "İşaret+İmleç" #: ulng.rsoptexampletext msgid "Text" msgstr "Metin" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Kısayol tuşu" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Kısayol tuşları" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Değişkenler" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Kısayol kullanımı" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy,badformat #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Kısayol %s zaten kullanılıyor %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Bunu değiştir %s?" #: ulng.rsopthotkeysusedby #, fuzzy,badformat #| msgid "used by" msgid "used for %s in %s" msgstr "tarafından kullanılan" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Sıkıştır" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Otomatik Yenileme" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Davranış" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Renkler" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Sütunlar" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Yapılandırma" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Önemli Liste Dizini" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Dosya ilişkileri" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Dosya işlemleri" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Dosya penceresi" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Dosya türleri" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Klasör sekmeleri" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Yazı tipleri" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Kısayol tuşları" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Simge" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Yoksayma listesi" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "lisan " #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Düzen" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Günlük" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Çeşitli" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Eklentiler" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hızlı arama/süzgeç" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Komut İstemi F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Araçlar" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Araç ipuçları" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Sol düğme;Sağ düğme;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Eklenti %s aşağıdaki uzantıya zaten atanmış :" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Etkin" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Dosya adı" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Adı" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Kayıtlı" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod #, fuzzy #| msgid "\"Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetik,sıralamayı hesaba katma;Doğal sıralama: alfabetik ve numaraları" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Üst;Alt;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Erişim haklarını değiştirmek mümkün değil \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Sahibini değiştiremezsiniz \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Dosya" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dizin" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Adı konmuş iletişim kanalı" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Hayır" #: ulng.rspropssocket msgid "Socket" msgstr "Terminal adresleme yapısı" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Özel blok aygıtları" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Özel karakter çevre birimi" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Sembolik bağlantı" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Bilinmeyen tür" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Evet (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Arama sonucu" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Bir dizin seçin" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tüm" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Önizleme" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes #, fuzzy #| msgid "bayt" msgid "Bytes" msgstr "bayt" #: ulng.rssizeunitgbytes #, fuzzy #| msgid "Gigabayt" msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabayt" #: ulng.rssizeunitkbytes #, fuzzy #| msgid "Kilobayt" msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobayt" #: ulng.rssizeunitmbytes #, fuzzy #| msgid "Megabayt" msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabayt" #: ulng.rssizeunittbytes #, fuzzy #| msgid "Terabayt" msgid "Terabytes" msgstr "Terabayt" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Dosya: %d, endeks : %d, Boyut: %s (%s bayt)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Hedef dizini oluşturulamadı" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Yanlış dosya boyutu biçimi!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Dosya parçalanması yapılamıyor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Parçaların sayısı, 100 'den fazla! Devam edilsin mi?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Dizin Seç:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Sembolik bağ oluşturma hatası." #: ulng.rssyndefaulttext msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Gün(ler)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "saat(ler)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Dakika (lar)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Ay(lar)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Saniye (ler)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Hafta(lar)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Yıl(lar)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Karşılaştır" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Araç Düzenleyicisi" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Komut İstemi F9" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Göster" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Bu hatayı düzeltebilmemiz için lütfen bu hatayı bildirin Ne yaptığınızın bir açıklaması ve aşağıdaki dosya: %sdevam etmek için %sbasın %s ,iptal etmek için programı tıklayın" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Ağ" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander dahili Görüntüleyici" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodlama" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Yeni Boyut" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s bulunamadı!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.ko.po������������������������������������������������������������0000644�0001750�0000144�00001215613�12666540554�017234� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-03-31 22:53+0900\n" "PO-Revision-Date: 2012-04-02 23:34+0900\n" "Last-Translator: sheppaul <sheppaul@gmail.com>\", \"Lee, Cheon-Pung <salm2000@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 한국의\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "전부" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "취소" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "사용자 열 보기 설정" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "배경 색상:" #: tfcolumnssetconf.cbcursorborder.caption #, fuzzy msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "커서 테두리" #: tfcolumnssetconf.cbovercolor.caption #, fuzzy msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "윤색 허용" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "사용자 글꼴과 색상 사용하기" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "텍스트 색상:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "글꼴:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "크기:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "배경 색상 2:" #: tfcolumnssetconf.lblconfigviewnr.caption #, fuzzy msgid "Configure view nr:" msgstr "열 보기 설정 번호:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "커서 색상:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "커서 텍스트:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "선택 색상:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "이름:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "열 추가" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "사용자 정의 열:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "미리보기" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "여유 용량 계산하기" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "링크 바로잡기" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "읽기전용 속성 제거하기" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "링크 따라가기" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "폴더가 존재할 때" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "파일이 존재할 때" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기 (&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "클립보드에 복사" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "정보" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "빌드" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "홈페이지:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "리비전" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "버전" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "리셋(&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "속성 선택" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "기록" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "압축" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "폴더" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "암호화" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "숨김" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "읽기전용" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "심링크" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "시스템" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "임시" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 속성" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "일반 속성" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "그룹" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Other" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "실행" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "읽기" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "CRC 체크섬 생성..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "각각의 파일별로 체크섬 파일 분리 생성하기" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "체크섬 파일 저장:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "CRC 체크섬 검사..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "연결" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "삭제" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "편집" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "연결 매니저" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "연결하기:" #: tfrmcopydlg.btnaddtoqueue.caption #, fuzzy #| msgid "Add To Queue" msgid "A&dd To Queue" msgstr "대기열에 추가하기" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "옵션(&P)" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "이 옵션을 기본값으로 저장" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "파일 복사" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "새 대기열" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "대기열 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "대기열 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "대기열 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "대기열 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "대기열 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "파일/폴더 주석" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "주석 편집:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "인코딩:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "정보" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "자동 비교" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "바이너리 모드" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "취소" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "블록 우측으로 복사" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "블록 우측으로 복사" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "블록 좌측으로 복사" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "블록 좌측으로 복사" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "재실행" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "전체 선택하기(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "되돌리기" #: tfrmdiffer.actexit.caption #, fuzzy msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "종료(&X)" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "처음 차이점" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "처음 차이점" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "대소문자 무시" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "공백 무시" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "스크롤 유지" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "마지막 차이점" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "마지막 차이점" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "줄 차이점" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "다음 차이점" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "다음 차이점" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "왼쪽 열기..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "오른쪽 열기..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "배경 채우기" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "이전 차이점" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "이전 차이점" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "다시 열기" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "다시 열기" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "저장하기" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "저장하기" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "다른 이름으로 저장..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "다른 이름으로 저장..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "왼쪽 저장하기" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "왼쪽 저장하기" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "왼쪽을 다른 이름으로 저장하기..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "왼쪽을 다른 이름으로 저장하기..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "오른쪽 저장" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "오른쪽 저장" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "오른쪽을 다른 이름으로 저장하기..." #: tfrmdiffer.actsaverightas.hint #, fuzzy msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "오른쪽을 다른 이름으로 저장하기..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "비교하기" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "비교하기" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "인코딩" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "인코딩" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "파일 비교" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "왼쪽" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "오른쪽" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "동작(&A)" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "편집" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "인코딩" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "파일" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "옵션(&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "이 컨트롤 동작만" #: tfrmedithotkey.lblparameters.caption #, fuzzy #| msgid "Parameters (each in a separate line):" msgid "&Parameters (each in a separate line):" msgstr "변수 (분리된 줄에 각각):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "정보" #: tfrmeditor.actabout.hint #, fuzzy msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "정보" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "환경설정(&C)" #: tfrmeditor.actconfhigh.hint #, fuzzy msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "환경설정" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmeditor.acteditcopy.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "복사" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmeditor.acteditcut.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "잘라내기" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmeditor.acteditdelete.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "삭제" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "찾기(&F)" #: tfrmeditor.acteditfind.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "찾기" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "다음 찾기" #: tfrmeditor.acteditfindnext.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "다음 찾기" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "맥 (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "맥 (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "윈도우 (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "윈도우 (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "유닉스 (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "유닉스 (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmeditor.acteditpaste.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "붙여넣기" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "재실행" #: tfrmeditor.acteditredo.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "재실행" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "바꾸기(&R)" #: tfrmeditor.acteditrplc.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "바꾸기" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "전체 선택(&A)" #: tfrmeditor.acteditselectall.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "전부 선택" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "되돌리기" #: tfrmeditor.acteditundo.hint #, fuzzy msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "되돌리기" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmeditor.actfileclose.hint #, fuzzy msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "닫기" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "종료" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "새 파일(&N)" #: tfrmeditor.actfilenew.hint #, fuzzy msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "새 파일" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "열기(&o)" #: tfrmeditor.actfileopen.hint #, fuzzy msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "열기" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "저장(&S)" #: tfrmeditor.actfilesave.hint #, fuzzy msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "저장하기" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "다른 이름으로 저장(&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "다른 이름으로 저장하기" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "모두 저장(&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "전부 저장하기" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "편집기" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "편집기(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "인코딩(&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "다른 형식으로 열기" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "다른 형식으로 저장" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "파일(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "구문강조(&H)" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "줄의 끝" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "대/소문자 구별(&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "커서 이하 검색(&C)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "정규 표현식(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "선택한 텍스트 내(&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "온전한 단어(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "옵션" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "바꾸기(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "찾기(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "방향" #: tfrmextractdlg.caption #, fuzzy msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "압축 해제" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "경로명도 함께 압축 해제(&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "파일명으로 폴더를 만들어 각각 압축 파일 풀기(&S)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "기존 파일 덮어쓰기(&O)" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "압축 해제할 폴더:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "압축 해제할 파일(&F):" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "암호화 파일의 비밀번호:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "추가" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "추가" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "아래" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "제거" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "제거" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "제거" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "이름 바꾸기" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "위" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "파일 연결" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "동작" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "확장자" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "파일 형식" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "아이콘" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "동작:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "명령(&C):" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "편집" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "편집기로 열기" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "파일명" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "파일 경로" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "전체 경로" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "명령으로부터 출력 얻기" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "열기" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "명령행에서 실행" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "VFS에서 열기" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "보기" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "뷰어로 열기" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "대기..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "파일명:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "원본:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "임시 파일을 삭제 가능할 때 닫기를 누르십시오!" #: tfrmfileop.btncancel.caption #, fuzzy msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소(&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "패널로(&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "모두 보기(&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "현재 작업:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "원본:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "대상:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: tfrmfileproperties.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "속성" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "그룹" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Other" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "텍스트:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "실행" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "파일명" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "이름:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "파일명" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "경로:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "그룹" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "마지막 액세스:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "마지막 변경:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "마지막 상태 바꾸기:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "소유자" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "읽기" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "크기:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy msgid "Symlink to:" msgstr "심링크:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "형식:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "속성" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "속성" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "추가(&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "편집" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "파일로 가기(&G)" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "새 찾기(&N)" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "저장하기(&A)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "삭제하기(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "불러오기(&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "저장(&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "시작(&S)" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "취소" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "보기(&V)" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "목록상자에 입력(&L)" #: tfrmfinddlg.caption #, fuzzy msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "파일 찾기" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "대소문자 구별(&I)" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "다음 날짜에서:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "다음 날짜까지:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "다음 크기에서:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "다음 크기까지:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "파일에서 텍스트 찾기(&T)" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "심링크 따라가기" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "텍스트를 포함하지 않은 파일 찾기(&O)" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "지정된 시간/날짜 이내:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "파일명의 일부도 검색" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "정규 표현식(&R)" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy msgid "Re&place by" msgstr "텍스트 바꾸기(&P)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "다음 시간에서:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "다음 시간까지:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "검색 플러그인 이용(&U):" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption #, fuzzy msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "폴더" #: tfrmfinddlg.gbfiles.caption #, fuzzy msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "파일(&F)" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "문자열 검색" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "인코딩:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "찾을 파일(&F)" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "폴더(&D)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "하위 폴더 찾기(&B):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "이전 찾기(&P):" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "목록에서 제거" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "찾기 결과 모두 보기" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "뷰어로 보여주기" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "고급" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "읽어오기/저장" #: tfrmfinddlg.tsplugins.caption #, fuzzy msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "플러그인" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "결과" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "기본" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "찾기" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "찾기" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "대소문자 구별" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmhardlink.caption #, fuzzy msgid "Create hard link" msgstr "하드 링크 생성" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "링크 대상이 존재합니다." #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "링크 이름" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "링커" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "...로 저장" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "아이템" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "파일명" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "아래" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "아래" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "제거" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "삭제" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "위" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "위" #: tfrmmain.actabout.caption #, fuzzy msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "더블 커맨더 정보(&A)" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "명령행에 파일명 추가하기" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "명령행에 파일명과 경로 추가하기" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "명령행에 경로 복사하기" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption #, fuzzy msgid "Calculate &Occupied Space" msgstr "점유 공간 계산(&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "폴더 이동하기" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "상위 폴더로 이동하기" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "루트로 이동하기" #: tfrmmain.actchecksumcalc.caption #, fuzzy msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "CRC 체크섬 생성(&S)..." #: tfrmmain.actchecksumverify.caption #, fuzzy msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "CRC 체크섬 검사(&V)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "로그 파일 비우기" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "로그 창 비우기" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "모든 탭 제거(&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "탭 제거(&R)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "파일 내용 비교(&Y)" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "폴더 비교" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "폴더 비교하기" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "컨텍스트 메뉴 보이기" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr " 복사" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "전체경로를 포함한 파일명 클립보드로 복사(&P)" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "선택 파일명 클립보드로 복사(&F)" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "묻지 않고 파일 복사" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "같은 패널로 복사" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "복사(&C)" #: tfrmmain.actcountdircontent.caption #, fuzzy msgid "Sho&w Occupied Space" msgstr "점유 공간 보이기(&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "잘라내기(&T)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "삭제" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "폴더 히스토리" #: tfrmmain.actdirhotlist.caption #, fuzzy msgid "Directory &Hotlist" msgstr "폴더 즐겨찾기(&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "편집" #: tfrmmain.acteditcomment.caption #, fuzzy msgid "Edit Co&mment..." msgstr "주석 편집(&M)..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "새 파일 편집" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "위 파일목록의 경로 필드 편집" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "패널 맞바꾸기(&P)" #: tfrmmain.actexit.caption #, fuzzy msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmmain.actextractfiles.caption #, fuzzy msgid "&Extract Files..." msgstr "압축 해제(&U)..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "파일 연결(&A)..." #: tfrmmain.actfilelinker.caption #, fuzzy msgid "Com&bine Files..." msgstr "파일 결합(&M)..." #: tfrmmain.actfileproperties.caption #, fuzzy msgid "Show &File Properties" msgstr "속성 보기(R)" #: tfrmmain.actfilespliter.caption #, fuzzy msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "파일 분할(&S)..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption #, fuzzy msgid "Focus command line" msgstr "명령행 포커스" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "목록의 첫 파일에 커서 놓기" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "목록의 마지막 파일에 커서 놓기" #: tfrmmain.acthardlink.caption #, fuzzy msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "하드 링크 생성(&H)..." #: tfrmmain.acthelpindex.caption #, fuzzy msgid "&Contents" msgstr "도움말 항목(&I)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "수직 패널 모드(&Z)" #: tfrmmain.actkeyboard.caption #, fuzzy msgid "&Keyboard" msgstr "단축키 정보(&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "왼쪽 &= 오른쪽" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption #, fuzzy msgid "Open left drive list" msgstr "왼쪽 드라이브 목록 열기" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "선택목록 클립보드에서 불러오기(&B)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "선택목록 파일에서 불러오기(&L)..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "폴더 생성" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy msgid "Select All with the Same E&xtension" msgstr "같은 확장자 모두 선택(&X)" #: tfrmmain.actmarkinvert.caption #, fuzzy msgid "&Invert Selection" msgstr "선택 반전(&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "전체 선택(&A)" #: tfrmmain.actmarkminus.caption #, fuzzy msgid "Unselect a Gro&up..." msgstr "그룹 해제(&U)..." #: tfrmmain.actmarkplus.caption #, fuzzy msgid "Select a &Group..." msgstr "그룹 선택(&G)..." #: tfrmmain.actmarkunmarkall.caption #, fuzzy msgid "&Unselect All" msgstr "전체 해제(&N)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "창 최소화" #: tfrmmain.actmultirename.caption #, fuzzy msgid "Multi &Rename Tool" msgstr "파일명 일괄 변경(&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "네트워크 연결(&C)..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "네트워크 연결 해제(&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "네트워크 빠른 연결(&Q)..." #: tfrmmain.actnewtab.caption #, fuzzy msgid "&New Tab" msgstr "새 탭(&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy msgid "Switch to Nex&t Tab" msgstr "다음 탭으로 전환(&T)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "열기" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "압축 파일 열어보기" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "도구모음 파일 열기" #: tfrmmain.actopendirinnewtab.caption #, fuzzy msgid "Open &Folder in a New Tab" msgstr "새 탭에 폴더 열기(&F)" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "가상 파일 시스템 목록 열기(&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "작업 관리자(&O)" #: tfrmmain.actoptions.caption #, fuzzy msgid "&Options..." msgstr "옵션(&O)..." #: tfrmmain.actpackfiles.caption #, fuzzy msgid "&Pack Files..." msgstr "파일 압축(&P)..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "자르기 위치 설정" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "붙여넣기(&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption #, fuzzy msgid "Switch to &Previous Tab" msgstr "이전 탭으로 전환(&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "빠른 필터" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "빠른 찾기" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "미리 보기(&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "새로 고침(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "이동" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "묻지 않고 파일 이동/이름 바꾸기" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "이름 바꾸기" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "탭이름 변경(&N)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "선택목록 복원(&R)" #: tfrmmain.actreverseorder.caption #, fuzzy msgid "Re&verse Order" msgstr "역순 정렬(&V)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption #, fuzzy msgid "Right &= Left" msgstr "오른쪽 &= 왼쪽" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "오른쪽 드라이브 목록 열기" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy msgid "Run &Terminal" msgstr "명령 프롬프트 실행(&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "선택목록 저장(&S)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "선택목록 파일로 저장(&E)..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption #, fuzzy msgid "&Search..." msgstr "파일 찾기(&S)..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "속성 변경(&A)..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "새탭으로 연 폴더 잠김(&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "보통(&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "잠김(&L)" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "잠김/폴더 변경 허용(&F))" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "열기" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "버튼 메뉴 보이기" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "명령행 히스토리 보이기" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "메뉴" #: tfrmmain.actshowsysfiles.caption #, fuzzy msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "숨김/시스템 파일 보기(&H)" #: tfrmmain.actsortbyattr.caption #, fuzzy msgid "Sort by &Attributes" msgstr "속성순(&A)" #: tfrmmain.actsortbydate.caption #, fuzzy msgid "Sort by &Date" msgstr "시간순(&D)" #: tfrmmain.actsortbyext.caption #, fuzzy msgid "Sort by &Extension" msgstr "확장자순(&E)" #: tfrmmain.actsortbyname.caption #, fuzzy msgid "Sort by &Name" msgstr "파일명순(&N)" #: tfrmmain.actsortbysize.caption #, fuzzy msgid "Sort by &Size" msgstr "크기순(&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "무시 목록 파일 토글하기(파일명 감추기)" #: tfrmmain.actsymlink.caption #, fuzzy msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "심볼릭 링크 생성(&B)..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "대상 &= 원본" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "압축파일 검사(&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "커서가 위치한 폴더를 왼쪽 창으로 전송" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "커서가 위치한 폴더를 오른쪽 창으로 전송" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy msgid "Unselect All with the Same Ex&tension" msgstr "같은 확장자 모두 해제(&T)" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "보기" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "활성창에 방문한 경로 히스토리 보이기" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "히스토리의 다음 항목으로" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "히스토리의 이전 항목으로" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy msgid "&Visit Double Commander Website" msgstr "더블 커맨더 홈페이지 방문(&V)" #: tfrmmain.actwipe.caption #, fuzzy msgid "Wipe" msgstr "반복하여 지우기" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "종료" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "폴더" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "지우기" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "명령프롬프트" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "폴더 즐겨찾기" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "오른쪽 패널의 현재 폴더를 왼쪽 패널에 보이기" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "사용자 폴더로 가기" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "루트로 가기" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "상위 폴더로 가기" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "폴더 즐겨찾기" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "왼쪽 패널의 현재 폴더를 오른쪽 패널에 보이기" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "더블 커맨더" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "경로" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "복사..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "링크 생성..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "비우기" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "복사" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "숨기기" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "전부 선택" #: tfrmmain.mimove.caption msgid "Move..." msgstr "이동..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "심링크 생성..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "탭 옵션" #: tfrmmain.mitrayiconexit.caption #, fuzzy msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "복원" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "시작" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "취소" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "명령(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "설정(&O)" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy msgid "&Files" msgstr "파일(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "선택(&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "네트워크" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "보기(&W)" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "옵션(&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "탭(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "복사하기" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "잘라내기" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "삭제하기" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "편집하기" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "붙여넣기" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "취소" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "단축키" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "정의하기..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "또는 미리 정의한 선택 형식을 고르십시오:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "새 폴더 만들기" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "새 폴더 이름 입력:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "새 크기" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "높이:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG 압축 품질" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "너비" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "높이" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "너비" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "삭제(&D)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "읽어오기(&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "이름 바꾸기(&R)" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "전부 재설정" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "저장(&S)" #: tfrmmultirename.caption #, fuzzy msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "파일명 일괄 변경" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "사용하기" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "정규 표현식(&X)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "치환 문자열 사용(&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy msgid "[E] Extension" msgstr "[E] 확장자" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "카운터 정의" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "찾기 및 바꾸기" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "결과 로그" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "마스크" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "프리셋" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "확장자(&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "찾기(&F)..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "간격" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "파일명(&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "바꾸기(&P)..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "시작 번호" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "너비" #: tfrmmultirename.micounter.caption #, fuzzy msgid "[C] Counter" msgstr "[C] 카운터" #: tfrmmultirename.miday.caption #, fuzzy msgid "[D] Day" msgstr "[D] 날짜" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 날짜 (2자리)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 요일 (짧게, 예, \"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 요일 (길게, 예, \"monday\")" #: tfrmmultirename.miextensionx.caption #, fuzzy msgid "[Ex] Character at position x" msgstr "[Ex] 확장자 위치 x의 문자" #: tfrmmultirename.miextensionxx.caption #, fuzzy msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x] 확장자 위치 x에서 y까지 문자" #: tfrmmultirename.mihour.caption #, fuzzy msgid "[h] Hour" msgstr "[h] 시간" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 시간 (2자리)" #: tfrmmultirename.miminute.caption #, fuzzy msgid "[n] Minute" msgstr "[n] 분" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 분 (2자리)" #: tfrmmultirename.mimonth.caption #, fuzzy msgid "[M] Month" msgstr "[M] 월" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 월 (2자리)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 월 (짧게, 예, \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 월 (길게, 예, \"january\")" #: tfrmmultirename.miname.caption #, fuzzy msgid "[N] Name" msgstr "[N] 이름" #: tfrmmultirename.minamex.caption #, fuzzy msgid "[Nx] Character at position x" msgstr "[Nx] 파일명 위치 x의 문자" #: tfrmmultirename.minamexx.caption #, fuzzy msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] 파일명 위치 x에서 y까지 문자" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "시간..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "확장자..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "이름..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "플러그인" #: tfrmmultirename.misecond.caption #, fuzzy msgid "[s] Second" msgstr "[s] 초" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 초 (2자리)" #: tfrmmultirename.miyear.caption #, fuzzy msgid "[Y] Year (2 digits)" msgstr "[Y] 년 (2자리)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 년 (4자리)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption #, fuzzy msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "이전 파일명" #: tfrmmultirename.stringgrid.columns[1].title.caption #, fuzzy msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "새 파일명" #: tfrmmultirename.stringgrid.columns[2].title.caption #, fuzzy msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "파일 경로" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "적용" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmoptions.caption #, fuzzy msgctxt "tfrmoptions.caption" msgid "Options" msgstr "옵션" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "자동 설정하기" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "적용" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "삭제" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "이름 바꾸기" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "디버그 모드" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "활성화" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "콘솔 출력 보기" #: tfrmoptionsarchivers.gbarchiveroptions.caption #, fuzzy msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "옵션" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "추가:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "확장자:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "압축해제:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "목록:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "목록 종료 (선택사항):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "목록 형식:" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "목록 시작 (선택사항):" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "압축기" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "설명:" #: tfrmoptionsarchivers.tbarchiveradditional.caption #, fuzzy msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "추가" #: tfrmoptionsarchivers.tbarchivergeneral.caption #, fuzzy msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "일반" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption #, fuzzy msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "파일 크기/날짜/속성이 변경될 때(&S)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption #, fuzzy msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "다음 경로와 하위폴더:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "파일 생성/삭제/이름 바꾸기할 때(&C)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption #, fuzzy msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "응용 프로그램이 백그라운드에 있을 때(&R)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption #, fuzzy msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "자동 새로고침을 하지 않기" #: tfrmoptionsautorefresh.gbautorefreshenable.caption #, fuzzy msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "파일 목록을 새로 고치기" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "항상 트레이 아이콘 보이기" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption #, fuzzy msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "최소화 할 때 시스템 트레이로 아이콘 옮기기" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "더블 커맨더 중복 실행 금지" #: tfrmoptionsbehavior.edtdrivesblacklist.hint #, fuzzy msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "여기에 하나 이상의 드라이브(\";\"로 구분)를 입력할 수 있습니다." #: tfrmoptionsbehavior.lbldrivesblacklist.caption #, fuzzy #| msgid "Drives blacklist" msgid "Drives &blacklist" msgstr "드라이브 블랙리스트:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgid "Cut &text to column width" msgstr "열 너비만큼 텍스트 잘라내기" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgid "&Horizontal lines" msgstr "가로줄 표시선" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgid "&Vertical lines" msgstr "세로줄 표시선" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgid "A&uto fill columns" msgstr "자동으로 열 채우기" #: tfrmoptionscolumnsview.gbshowgrid.caption #, fuzzy msgid "Show grid" msgstr "표시선 보이기" #: tfrmoptionscolumnsview.grpautosizecolumns.caption #, fuzzy msgid "Auto-size columns" msgstr "열 크기 자동 조절" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgid "Auto si&ze column:" msgstr "열 크기 자동 조절:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "적용" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "편집" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgid "Co&mmand line history" msgstr "명령행 히스토리" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "폴더 히스토리" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgid "&File mask history" msgstr "파일 마스크 히스토리" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgid "Sa&ve configuration" msgstr "설정 저장하기" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgid "Searc&h/Replace history" msgstr "검색/바꾸기 히스토리" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "환경설정 파일 위치" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "종료할 때 저장" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "명령행에 지정" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgid "P&rogram directory (portable version)" msgstr "프로그램 폴더 (포터블 버전)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgid "&User home directory" msgstr "사용자 홈 폴더" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "전부" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "삭제하기(&D)" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "새 파일" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "다른 형식으로 저장" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "저장하기" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "윤색 허용" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "일반" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "커서 테두리" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "배경 색상:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "배경 색상 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "파일 시스템별 열 설정" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "커서 색상:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "커서 텍스트:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "글꼴:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "크기:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "텍스트 색상:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "선택 색상:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "열 추가" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "이름:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "경로:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "잘라내기" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "붙여넣기" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption #, fuzzy #| msgid "Show confirmation dialog after drop" msgid "&Show confirmation dialog after drop" msgstr "드롭시 확인 대화상자 보이기" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption #, fuzzy #| msgid "Show file system" msgid "Show &file system" msgstr "파일 시스템 표시하기" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption #, fuzzy #| msgid "Show free space" msgid "Show fr&ee space" msgstr "여유 용량 표시하기" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy #| msgid "Show label" msgid "Show &label" msgstr "레이블 표시하기" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "드라이브 목록" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "배경 색상:" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption #, fuzzy #| msgid "Background" msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "배경 색상:" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint #, fuzzy msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "저장하기" #: tfrmoptionseditorcolors.bvlattributesection.caption #, fuzzy msgid "Element Attributes" msgstr "요소 속성" #: tfrmoptionseditorcolors.foregroundlabel.caption #, fuzzy #| msgid "Foreground" msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "전경" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption #, fuzzy #| msgid "Foreground" msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "전경" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption #, fuzzy #| msgid "Text-mark" msgid "&Text-mark" msgstr "텍스트 선택" #: tfrmoptionseditorcolors.tbtnglobal.caption #, fuzzy #| msgid "Use (and edit) global scheme settings" msgid "Use (and edit) &global scheme settings" msgstr "일괄 설정(편집)하기" #: tfrmoptionseditorcolors.tbtnlocal.caption #, fuzzy #| msgid "Use local scheme settings" msgid "Use &local scheme settings" msgstr "개별 설정하기" #: tfrmoptionseditorcolors.textboldcheckbox.caption #, fuzzy #| msgid "Bold" msgid "&Bold" msgstr "굵게(&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전" #: tfrmoptionseditorcolors.textboldradiooff.caption #, fuzzy #| msgid "Off" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "해제" #: tfrmoptionseditorcolors.textboldradioon.caption #, fuzzy #| msgid "On" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "사용" #: tfrmoptionseditorcolors.textitaliccheckbox.caption #, fuzzy #| msgid "Italic" msgid "&Italic" msgstr "기울임(&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전" #: tfrmoptionseditorcolors.textitalicradiooff.caption #, fuzzy #| msgid "Off" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "해제" #: tfrmoptionseditorcolors.textitalicradioon.caption #, fuzzy #| msgid "On" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "사용" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption #, fuzzy #| msgid "Strike Out" msgid "&Strike Out" msgstr "취소선(&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "반전" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption #, fuzzy #| msgid "Off" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "사용" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption #, fuzzy #| msgid "On" msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "사용" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption #, fuzzy #| msgid "Underline" msgid "&Underline" msgstr "밑줄(&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "반전" #: tfrmoptionseditorcolors.textunderlineradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "해제" #: tfrmoptionseditorcolors.textunderlineradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "사용" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "아니오" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "잘라내기" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "붙여넣기" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "이름 바꾸기" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "추가" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "추가(&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "추가" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "아래" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "편집" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "제거" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "제거" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "제거" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "이름 바꾸기" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "위" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "동작" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "확장자" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "파일 형식" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "아이콘" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "동작:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "명령(&C):" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "시작 경로(&S):" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "편집하기" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "편집기로 열기" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "명령으로부터 출력 얻기" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "열기" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "명령행에서 실행" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "보기" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "뷰어로 열기" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "삭제시 휴지통으로 (Shift 키는 이 설정을 반대로 함)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "읽기전용 속성 제거하기" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgid "&Search for part of file name" msgstr "파일명의 일부 검색하기" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgid "&Process comments with files/folders" msgstr "파일/폴더와 함께 주석 처리하기" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgid "Select &file name without extension when renaming" msgstr "이름 바꾸기를 할 때 파일명만 선택하기 (확장자 제외)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgid "Sho&w tab select panel in copy/move dialog" msgstr "복사/이동 대화상자에서 탭 선택 패널 보이기" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgid "S&kip file operations errors and write them to log window" msgstr "파일 작업 오류 건너뛰기 및 로그 창에 기록하기" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "작업 실행하기" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "파일 찾기" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "사용자 인터페이스" #: tfrmoptionsfileoperations.lblbuffersize.caption #, fuzzy #| msgid "Buffer size for file operations (in KB):" msgid "&Buffer size for file operations (in KB):" msgstr "파일 작업용 버퍼 크기 (KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption #, fuzzy #| msgid "Show operations progress initially in" msgid "Show operations progress &initially in" msgstr "처음에 작업 진행을 보여주는 방법: " #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgid "&Number of wipe passes:" msgstr "반복하여 지우기 횟수:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgid "Use memory mapping for search te&xt in files" msgstr "파일에서 텍스트를 검색할 때 메모리 매핑 사용하기" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgid "&Use stream for search text in files" msgstr "파일에서 텍스트 검색할 때 스트림 사용" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "윤색 허용" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgid "Use &Frame Cursor" msgstr "커서 테두리 사용" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption #, fuzzy #| msgid "Use Gradient Indicator" msgid "Use &Gradient Indicator" msgstr "표시기에 그래디언트 효과(자연스러운 색상 변화) 사용하기" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgid "U&se Inverted Selection" msgstr "선택 반전 사용" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "커서 테두리" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "드라이브 여유 공간 표시기" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgid "Bac&kground:" msgstr "배경 색상:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "배경 색상 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "커서 색상:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "커서 글꼴:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgid "&Brightness level of inactive panel" msgstr "비활성 패널의 밝기 정도" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption #, fuzzy #| msgid "Indicator Back Color:" msgid "In&dicator Back Color:" msgstr "표시기 배경 색상:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption #, fuzzy #| msgid "Indicator Fore Color:" msgid "&Indicator Fore Color:" msgstr "표시기 전경 색상" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "선택 색상:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "글꼴 색상:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption #, fuzzy #| msgid "Don't load file list until a tab is activated" msgid "Do&n't load file list until a tab is activated" msgstr "탭 활성화시에만 파일을 불러오기" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgid "S&how square brackets around directories" msgstr "폴더 이름 양 옆에 대괄호 [] 보이기" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption #, fuzzy #| msgid "Highlight new and updated files" msgid "Hi&ghlight new and updated files" msgstr "새파일/업데이트된 파일 강조하기" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "파일 목록을 분리된 쓰레드에서 읽어오기" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "파일 목록 읽은 후에 아이콘 읽어오기" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "숨김/시스템 파일 보기" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "<스페이스바>로 파일 선택 시, 다음 파일로 이동 (<인서트>처럼 동작)" #: tfrmoptionsfilesviews.gbformatting.caption #, fuzzy msgid "Formatting" msgstr "형식" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "정렬" #: tfrmoptionsfilesviews.lblcasesensitivity.caption #, fuzzy #| msgid "Case sensitivity:" msgid "Case s&ensitivity:" msgstr "대/소문자 구별" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgid "&Date and time format:" msgstr "날짜 및 시간 형식:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "Insert new files" msgid "&Insert new files" msgstr "새 파일 삽입" #: tfrmoptionsfilesviews.lblsortfoldermode.caption #, fuzzy #| msgid "Sorting directories:" msgid "So&rting directories:" msgstr "폴더 정렬" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgid "&Sort method:" msgstr "정렬 방식" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "Move updated files" msgid "&Move updated files" msgstr "갱신된 파일 이동" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "적용" #: tfrmoptionsfiletypescolors.btncategorycolor.caption #, fuzzy msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "삭제" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint #, fuzzy msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "템플릿..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy msgid "File types colors (sort by drag&&drop)" msgstr "파일 형식 색상 (드래그&&드롭으로 정렬)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgid "Category a&ttributes:" msgstr "카테고리 속성:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgid "Category co&lor:" msgstr "카테고리 색상:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "카테고리 마스크:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "카테고리 이름:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption #, fuzzy msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption #, fuzzy msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption #, fuzzy msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption #, fuzzy msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption #, fuzzy msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "편집기 글꼴" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "로그 글꼴" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "메인 창 글꼴" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "책 뷰어 글꼴" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "뷰어 글꼴" #: tfrmoptionshotkeys.btnaddhotkey.caption #, fuzzy #| msgid "Add hotkey" msgid "Add &hotkey" msgstr "단축키 추가하기" #: tfrmoptionshotkeys.btndeletehotkey.caption #, fuzzy #| msgid "Delete hotkey" msgid "&Delete hotkey" msgstr "단축키 삭제하기" #: tfrmoptionshotkeys.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "단축키 편집하기" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "필터" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "카테고리:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "명령어:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "바로가기 파일:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "명령어" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "단축키" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "설명" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "단축키" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "변수들" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "제어" #: tfrmoptionsicons.cbiconsexclude.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "다음 경로와 하위폴더:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text #, fuzzy msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "오버레이 아이콘 보이기(링크에 표시되는 것과 같은)(&C)" #: tfrmoptionsicons.cbiconssize.text #, fuzzy msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "아이콘 크기(&S)" #: tfrmoptionsicons.gbshowiconsmode.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "파일명 왼쪽에 아이콘 보이기" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "전부(&A)" #: tfrmoptionsicons.rbiconsshowallandexe.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "모든 연결된 파일 + &EXE/LNK (느림)" #: tfrmoptionsicons.rbiconsshownone.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "표시 안함(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "표준 아이콘(&O)" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "선택된 이름 추가(&A)" #: tfrmoptionsignorelist.btnaddselwithpath.caption #, fuzzy msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "선택된 이름 경로명 포함해서 추가(&F)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption #, fuzzy msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "다음 파일과 폴더를 무시하기(보이지 않기):" #: tfrmoptionsignorelist.lblsavein.caption #, fuzzy msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "저장(&S):" #: tfrmoptionskeyboard.cblynxlike.caption #, fuzzy #| msgid "Left, Right arrows change directory (Lynx-like movement)" msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "좌우 화살표 키로 폴더 변경하기 (Lynx처럼 동작)" #: tfrmoptionskeyboard.gbtyping.caption #, fuzzy msgid "Typing" msgstr "입력" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+문자" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+문자" #: tfrmoptionskeyboard.lblnomodifier.caption #, fuzzy #| msgid "Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "문자" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "평평한 버튼" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "평평한 인터페이스" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "평평한 버튼" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "드라이브 레이블에 여유 공간 표시기 보이기" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "로그 창 보이기" #: tfrmoptionslayout.cbpanelofoperations.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "작업 패널을 백그라운드로 보이기" #: tfrmoptionslayout.cbproginmenubar.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "메뉴 바에 일반 작업 처리 보이기" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "명령행 보이기(&L)" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "현재 폴더 보이기(&C)" #: tfrmoptionslayout.cbshowdiskpanel.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "드라이브 버튼 보이기(&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "여유 공간 레이블 보이기" #: tfrmoptionslayout.cbshowdriveslistbutton.caption #, fuzzy #| msgid "Show d&rives list button" msgid "Show drives list bu&tton" msgstr "드라이브 목록 버튼 보이기(&R)" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "단축키 버튼 표시줄 보이기(&F)" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "메인 메뉴 보이기" #: tfrmoptionslayout.cbshowmaintoolbar.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "도구모음 보이기(&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption #, fuzzy #| msgid "Show short free space label" msgid "Show short free space &label" msgstr "짧은 여유 공간 레이블 보이기" #: tfrmoptionslayout.cbshowstatusbar.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "상태 표시줄 보이기(&S)" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "구분 탭 보이기(&T)" #: tfrmoptionslayout.cbshowtabs.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "폴더 탭 보이기(&W)" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "명령 프롬프트 창 보이기" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "두 개의 드라이브 버튼바 보이기 (파일창 위에 고정)" #: tfrmoptionslayout.gbscreenlayout.caption #, fuzzy msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " 화면 레이아웃 " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "압축/해제" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "링크 및 심링크 복사/이동/생성" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "삭제" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "폴더 생성/삭제" #: tfrmoptionslog.cblogerrors.caption #, fuzzy msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "오류 로그(&E)" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "로그 파일 만들기(&C)" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "정보 메시지 로그" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption #, fuzzy msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "성공한 작업 로그(&S)" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "파일 시스템 플러그인" #: tfrmoptionslog.gblogfile.caption #, fuzzy msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "파일 작업 로그 파일" #: tfrmoptionslog.gblogfileop.caption #, fuzzy msgid "Log operations" msgstr "작업 로그:" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy msgid "Operation status" msgstr "작업 상태:" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption #, fuzzy msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "경고 메시지 보이기 (\"확인\" 버튼만)" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "썸네일을 캐쉬에 저장하기" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgid "&Selection by mouse" msgstr "마우스로 선택하기" #: tfrmoptionsmouse.gbscrolling.caption #, fuzzy msgid "Scrolling" msgstr "스크롤" #: tfrmoptionsmouse.gbselection.caption #, fuzzy msgid "Selection" msgstr "선택" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgid "&Mode:" msgstr "모드:" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgid "&Line by line" msgstr "지정 줄간격만큼" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgid "Line by line &with cursor movement" msgstr "커서 이동과 함께 한줄씩" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgid "&Page by page" msgstr "한 페이지씩" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "설정" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "사용하기" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "제거" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "트윅" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "검색 플러그인으로 다른 검색 알고리듬 또는 외부 도구(\"locate\" 처럼)를 사용할 수 있습니다." #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "압축기 플러그인으로 압축 파일을 다룹니다." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "컨텐츠 플러그인은 파일 목록에서 mp3 태그 또는 이미지 속성 등과 같은 확장된 파일 정보를 보여주거나, 그러한 정보를 파일 찾기나 파일명 일괄 변경시에 이용할 수 있습니다." #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "파일 시스템 플러그인을 이용하여 운영체제에서 접근할 수 없는 디스크 또는 또는 Palm/PocketPC 등과 같은 외부 기기에 접근할 수 있습니다." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "뷰어 플러그인은 뷰어에서 이미지, 스프레드시트, 데이터베이스 등의 파일 형식을 보여줍니다. (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption #, fuzzy msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "활성" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption #, fuzzy msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "플러그인" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption #, fuzzy msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "등록" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption #, fuzzy msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "파일명" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "찾기 플러그인 (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "압축기 플러그인 (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "컨텐츠 플러그인 (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "파일 시스템 플러그인 (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "뷰어 플러그인 (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption #, fuzzy msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "앞에서 (맨 앞부터 한 문자씩 일치하는 이름으로 찾기)(&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption #, fuzzy msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "뒤에서 (점.을 기준으로 가까운 한 문자씩 일치하는 이름으로 찾기)(&D)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption #, fuzzy msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "옵션" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy msgid "Exact name match" msgstr "일치하는 이름 찾기" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption #, fuzzy msgid "Search case" msgstr "대소문자 찾기" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption #, fuzzy msgid "Search for these items" msgstr "파일명의 일부 검색하기" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "탭 클릭 시 대상 패널 활성화(&P)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "탭이 하나만 있어도 탭 보이기(&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "모든 탭을 닫을 때 확인(&C)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "탭 이름 너비 제한(&L):" #: tfrmoptionstabs.cbtabslockedasterisk.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "잠긴 탭에 별표 * 보이기(&W)" #: tfrmoptionstabs.cbtabsmultilines.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "다중 라인으로 탭 정렬(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Up으로 새 탭을 최상위에 열기(&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "현재 탭 옆에 새 탭 열기(&N)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "탭 닫기 버튼 보이기" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "폴더 탭 이름 표시줄" #: tfrmoptionstabs.lblchar.caption #, fuzzy msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "문자" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "탭 위치" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "아니오" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "버튼복제(&N)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "삭제하기(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "편집" #: tfrmoptionstoolbar.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "새 버튼 삽입(&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "평평한 버튼(&U)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption #, fuzzy msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "외형" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "바 크기" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "아이콘 파일(&F):" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "아이콘 크기(&O)" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "시작 경로(&S):" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "풍선 도움말(&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgid "&Keep terminal window open after executing program" msgstr "프로그램 실행 후 명령 프롬프트 창 유지하기" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgid "&Execute in terminal" msgstr "명령 프롬프트에서 실행하기" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgid "&Use external program" msgstr "외부 프로그램 사용하기" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgid "A&dditional parameters" msgstr "추가적인 변수" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgid "&Path to program to execute" msgstr "실행할 프로그램의 경로" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "추가" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "적용" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "삭제" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "템플릿..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "풍선 도움말 보이기" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "파일 형식에 의한 사용자 필드" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "카테고리 힌트:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "카테고리 마스크:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "카테고리 이름:" #: tfrmoptionsviewer.btnbackviewercolor.caption #, fuzzy msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption #, fuzzy msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "책 뷰어 모드" #: tfrmoptionsviewer.gbviewerexample.caption #, fuzzy msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "예시" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgid "&Background color in book viewer" msgstr "책 뷰어의 배경색" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgid "&Font color in book viewer" msgstr "책 뷰어의 글꼴 색" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgid "&Number of columns in book viewer" msgstr "책 뷰어의 열 개수" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "설정(&C)" #: tfrmpackdlg.caption #, fuzzy msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "파일 압축하기" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "선택한 파일/폴더마다 각각의 압축 파일 만들기(&N)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "자체 압축 풀림 파일 만들기(&X)" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "암호화하기(&Y)" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "압축 파일로 이동하기(&O)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "다중 디스크/볼륨 압축하기(&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "TAR 압축파일에 먼저 저장하기" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "경로명 압축하기 (하위 폴더만) (&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "파일 압축:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "압축기" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "닫기" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "전부 압축 풀기 및 실행(&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "압축 풀기 및 실행(&U)" #: tfrmpackinfodlg.caption #, fuzzy msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "압축 파일의 속성" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "속성:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "압축률:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "날짜:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "압축 방식:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "원래 크기:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "파일:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "압축된 크기:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "압축기:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "시간:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint #, fuzzy msgid "Case Sensitive" msgstr "대소문자 구별" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint #, fuzzy msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "폴더" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint #, fuzzy msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "파일(&F)" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "시작 일치하기" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "끝 일치하기" #: tfrmquicksearch.tglfilter.caption #, fuzzy msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "필터" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "플러그인" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "값" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption #, fuzzy msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "취소" #: tfrmselecttextrange.btppanel.closebutton.caption #, fuzzy msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "닫기 (&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption #, fuzzy msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "도움말(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "확인(&O)" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "삽입할 문자 선택하기:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmsetfileproperties.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "속성 변경" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "기록" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "생성됨:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "숨김" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "접근함" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "변경됨" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "읽기전용" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "하위폴더 포함" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "시스템" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "타임스탬프 속성" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "속성" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "속성" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "그룹" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(회색 필드는 값의 변동이 없음을 뜻한다)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Other" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "소유자" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "텍스트:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "실행" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(회색 필드는 값의 변동이 없음을 뜻한다)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8진법:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "읽기" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "쓰기" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "확인" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption #, fuzzy msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "분할하기" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664 바이트 - 3.5인치" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "파일명" #: tfrmsplitter.grbxsize.caption #, fuzzy msgid "Size and number of parts" msgstr "크기와 분할 개수" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "대상 폴더" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "파일 소스" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "분할 개수" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "더블 커맨더" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "빌드" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "리비전" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "더블 커맨더" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "버전" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "확인(&O)" #: tfrmsymlink.caption #, fuzzy msgid "Create symbolic link" msgstr "심볼릭 링크 생성" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "링크 대상이 존재합니다." #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "링크 이름" #: tfrmsyncdirsdlg.btnclose.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "닫기" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "비교하기" #: tfrmsyncdirsdlg.btnseldir1.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption #, fuzzy msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "이름" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "크기" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "날짜" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "날짜" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "크기" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "이름" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "비교하기" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "새로 추가" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "취소" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "바꾸기" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "기본값" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "확인" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "제거" #: tfrmtweakplugin.caption #, fuzzy msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "플러그인 트윅" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "내용으로 압축 형식 검출" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "파일 삭제 가능" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "암호화 지원" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "보통 파일처럼 보이기 (압축 아이콘 숨기기)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "메모리 압축 지원" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "존재하는 압축 파일 변경 가능" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "압축 파일에 여러 파일을 포함" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "새 압축 파일 생성 가능" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "옵션 대화 상자 지원" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "압축 파일 안에서 텍스트 찾기 허용" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "설명:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "문자열 검출:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "확장자:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "플래그:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "이름:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "플러그인:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "플러그인:" #: tfrmviewer.actabout.caption #, fuzzy msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "뷰어 정보..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "About 메시지 보기" #: tfrmviewer.actcopyfile.caption #, fuzzy msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "파일 복사" #: tfrmviewer.actcopyfile.hint #, fuzzy msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "파일 복사" #: tfrmviewer.actdeletefile.caption #, fuzzy msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "파일 삭제" #: tfrmviewer.actdeletefile.hint #, fuzzy msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "파일 삭제" #: tfrmviewer.actloadnextfile.caption #, fuzzy msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "다음(&N)" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "다음 파일 불러오기" #: tfrmviewer.actloadprevfile.caption #, fuzzy msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "이전(&P)" #: tfrmviewer.actloadprevfile.hint #, fuzzy msgid "Load Previous File" msgstr "이전 파일 불러오기" #: tfrmviewer.actmirror.caption #, fuzzy msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "미러" #: tfrmviewer.actmirror.hint #, fuzzy msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "미러" #: tfrmviewer.actmovefile.caption #, fuzzy msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "파일 이동" #: tfrmviewer.actmovefile.hint #, fuzzy msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "파일 이동" #: tfrmviewer.actreload.caption #, fuzzy msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "다시 열기" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "현재 파일 다시 열기" #: tfrmviewer.actrotate180.caption #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "180도 회전하기" #: tfrmviewer.actrotate180.hint #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "180도 회전하기" #: tfrmviewer.actrotate270.caption #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "270도 회전하기" #: tfrmviewer.actrotate270.hint #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "270도 회전하기" #: tfrmviewer.actrotate90.caption #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "90도 회전하기" #: tfrmviewer.actrotate90.hint #, fuzzy msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "90도 회전하기" #: tfrmviewer.actsaveas.caption #, fuzzy msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "다른 이름으로 저장하기..." #: tfrmviewer.actsaveas.hint #, fuzzy msgid "Save File As..." msgstr "다른 이름으로 저장하기..." #: tfrmviewer.actstretchimage.caption #, fuzzy msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "창 크기에 맞추기" #: tfrmviewer.actstretchimage.hint #, fuzzy msgid "Stretch Image" msgstr "창 크기에 맞추기" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "복사" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "복사" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "크롭" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "삭제" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "삭제" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "전체 화면" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "강조" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "미러" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "이동" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "이동" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "칠하기" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "적색 눈" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "리사이즈" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "되돌리기" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "확대하기" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "축소하기" #: tfrmviewer.caption #, fuzzy msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "뷰어" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "슬라이드 쇼" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "펜" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "강조" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "칠하기" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "슬라이드 쇼" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "보기" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "정보" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "바이너리(&B)" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "클립보드로 복사" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "편집(&E)" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "인코딩(&C)" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "종료(&X)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "파일(&F)" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "전체 화면" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "그래픽" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "16진수로(&H)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "이미지(&i)" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "책으로 보기(&B)" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "좌우 뒤집기" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "플러그인" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "미리보기" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "프린트..." #: tfrmviewer.mirotate.caption #, fuzzy msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "회전하기" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "저장하기" #: tfrmviewer.misaveas.caption #, fuzzy msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "다른 이름으로 저장하기..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "스크린샷" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "찾기" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "다음 찾기" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "이전 찾기" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "전부 선택" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "창 크기에 맞추기" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "텍스트로(&T)" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "보기(&V)" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "워드랩(&W)" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "확대하기" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "축소하기" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "클립보드로 복사" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "전부 선택" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "시작(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "종료(&T)" #: tfrmviewoperations.caption #, fuzzy msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "파일 작업" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "취소" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "취소" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "새 대기열" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "분리된 창에서 보기" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "대기열 맨 앞에 넣기" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "대기열 맨 뒤에 넣기" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "대기열" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "대기열 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "대기열 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "대기열 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "대기열 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "대기열 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "분리된 창에서 보기" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "모두 일시정지(&P)" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "파일이 존재할 때" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "파일이 존재할 때" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "백그라운드로 동작하기 (연결 분리)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "파일이 존재할 때" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter #, fuzzy msgid "Cancel Quick Filter" msgstr "빠른 필터 취소" #: ulng.rscanceloperation #, fuzzy msgid "Cancel Current Operation" msgstr "현재 작업 취소" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "속성" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "날짜" #: ulng.rscolext msgid "Ext" msgstr "확장자" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "이름" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "크기" #: ulng.rsconfcolalign msgid "Align" msgstr "정렬" #: ulng.rsconfcolcaption msgid "Caption" msgstr "캡션" #: ulng.rsconfcolconfig msgid "Config" msgstr "환경설정" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "삭제" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "필드 내용" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "이동" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "너비" #: ulng.rsconfcustheader msgid "Customize column" msgstr "사용자 정의 열" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "(%d)를 %s로 복사하기" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "모든 작업이 완료되었습니다." #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "모든 작업의 처리 %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "중지(&O)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "모두(&6)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "추가(&P)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "취소(&C)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "복사(&I)" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "전부 복사(&A)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "아니오(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "전부 아니오(&E)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "확인(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "덮어쓰기(&R)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "전부 덮어쓰기(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder #, fuzzy msgid "Overwrite All Ol&der" msgstr "옛파일 전부 덮기(&D)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "이름 바꾸기" #: ulng.rsdlgbuttonresume #, fuzzy msgid "&Resume" msgstr "다시 시작(&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "다시 시도(&T)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "건너뛰기(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "전부 건너뛰기(&K)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "예(&Y)" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "파일과 폴더 계산하기" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "CRC 체크섬 생성..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "CRC 체크섬 검사..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "파일 복사" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "파일 삭제" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "파일 이동" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "중지(&S)" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "시작(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "대기열" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "속도 %s/s" #: ulng.rsdlgspeedtime #, fuzzy msgid "Speed %s/s, time remaining %s" msgstr "속도 %s/s, 남은 시간 %s" #: ulng.rsdlgsplit #, fuzzy msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "파일 분할(&S)" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "반복해서 파일 삭제" #: ulng.rsdrivenolabel #, fuzzy msgid "<no label>" msgstr "<레이블 없음>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<미디어 없음>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "더블 커맨더 내장 에디터" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "새 파일.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "파일명:" #: ulng.rseditnewopen msgid "Open file" msgstr "파일 열기" #: ulng.rseditsearchback msgid "&Backward" msgstr "뒤로(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "찾기" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "앞으로(&F)" #: ulng.rseditsearchreplace #, fuzzy msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "바꾸기" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "필터" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "템플릿 정의" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s 단계" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "전부 (제한 없음)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "현재 폴더만" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "%s 폴더가 존재하지 않습니다!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "찾았습니다: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "찾기 템플릿 저장" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "템플릿 이름:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "검색됨: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "검색 중" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "파일 찾기" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "시작함:" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%s / %s bytes (여유공간/전체)" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "" #: ulng.rsfuncatime msgid "Access date/time" msgstr "접근 날짜/시간" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "속성" #: ulng.rsfunccomment #, fuzzy msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "코멘트" #: ulng.rsfunccompressedsize #, fuzzy msgid "Compressed size" msgstr "압축 크기" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "생성 날짜/시간" #: ulng.rsfuncext msgid "Extension" msgstr "확장자" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "그룹" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "변경 날짜/시간" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "이름" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "확장자 없는 이름" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "소유자" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "경로" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "크기" #: ulng.rsfunctype msgid "Type" msgstr "형식" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "하드 링크 생성 오류" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "복사/이동 대화상자" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "파일 비교" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "편집기" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "파일 찾기" #: ulng.rshotkeycategorymain #, fuzzy msgid "Main" msgstr "메인" #: ulng.rshotkeycategoryviewer #, fuzzy msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "뷰어" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "링커 완료" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "마스크 선택 해제" #: ulng.rsmarkplus msgid "Select mask" msgstr "마스크 선택" #: ulng.rsmaskinput msgid "Input mask:" msgstr "파일 종류 지정:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "사용자 열 설정" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "사용자 열 보기 설정" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "동작" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "편집" #: ulng.rsmnueject msgid "Eject" msgstr "꺼내기" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "마운트" #: ulng.rsmnunew #, fuzzy msgctxt "ulng.rsmnunew" msgid "New" msgstr "새 파일" #: ulng.rsmnunomedia msgid "No media available" msgstr "매체가 없습니다" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "열기" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "...로 열기" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "정렬" #: ulng.rsmnuumount #, fuzzy msgid "Unmount" msgstr "언마운트" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "보기" #: ulng.rsmsgaccount msgid "Account:" msgstr "계정:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "압축기 명령행 실행시의 추가적인 변수" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "\"%s\"파일을 그 자신에게 복사/이동할 수 없습니다!" #: ulng.rsmsgcannotdeletedirectory #, fuzzy msgid "Cannot delete directory %s" msgstr "%s 폴더를 삭제할 수 없습니다!" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "[%s]로 경로 이동 실패!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "모든 비활성 탭을 제거할까요?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "이 탭(%s)은 잠겼습니다. 닫을까요?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "정말 끝내시겠습니까?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "선택한 파일/폴더 %d 개를 복사할까요?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "선택한 \"%s\"를 복사할까요?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "일부 복사된 파일을 삭제할까요?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "선택한 파일/폴더 %d 개를 삭제할까요?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "선택한 파일/폴더 %d 개를 휴지통으로 삭제할까요?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "선택한 \"%s\"를 지울까요?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "선택한 \"%s\"를 휴지통으로 삭제할까요?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" 삭제 불가! 직접 삭제할까요?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "디스크를 사용할 수 없습니다" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "파일 확장자 입력" #: ulng.rsmsgentername msgid "Enter name:" msgstr "이름 입력:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "압축 데이터에서 CRC 오류 발생" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "데이터가 틀립니다" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "서버에 연결할 수 없습니다: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "파일을 복사할 수 없습니다. (%s -> %s)" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "\"%s\" 이름의 폴더가 이미 존재합니다." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "날짜 %s 는 지원하지 않습니다." #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "%s 폴더가 존재합니다!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "기능을 사용자가 중단했습니다" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "파일 닫기 오류" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "파일을 만들 수 없습니다" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "압축 파일에 더 이상 파일이 없습니다" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "존재하는 파일을 열 수 없습니다" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "파일 읽기 오류" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "파일 쓰기 오류" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "%s 폴더를 만들 수 없습니다!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "잘못된 링크" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "파일을 찾을 수 없습니다" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "메모리 부족" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "지원되지 않는 기능!" #: ulng.rsmsgerrorincontextmenucommand #, fuzzy msgid "Error in context menu command" msgstr "컨텍스트 메뉴 명령어 오류" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "정규 표현식 구문 오류!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "파일명을 변경할 수 없습니다. (%s -> %s)" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "파일을 저장할 수 없습니다" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "\"%s\" 의 속성을 설정할 수 없습니다" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "\"%s\" 의 날짜/시간을 설정할 수 없습니다" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "너무 작은 버퍼" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "압축하기에 너무 많은 파일" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "알려지지 않은 압축 파일 형식" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "이름" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "%s 파일이 변경되었습니다. 저장할까요?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "%s 파일이 존재합니다. 덮어쓸까요?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "파일 작업 활성화" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "어떤 파일 작업이 아직 끝나지 않았습니다. 더블 커멘더를 종료시 자료를 소실할 수 있습니다." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "%s 는 읽기전용 파일입니다. 삭제할까요?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "\"%s\" 파일 크기가 대상 파일 시스템에 너무 큽니다!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "%s 폴더가 존재합니다. 덮어쓸까요?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "심링크 \"%s\"를 추적할까요?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "경로" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "이름:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline #, fuzzy msgid "Error in command line" msgstr "명령행 오류" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "잘못된 파일명" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidpath #, fuzzy msgid "Invalid path" msgstr "잘못된 경로" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "경로 %s 는 금지된 문자를 포함하고 있습니다." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting #, fuzzy msgid "Invalid quoting" msgstr "잘못된 인용" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "잘못된 선택." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "파일 목록 불러오기..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "파일 %s 복사" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "파일 %s 지우기" #: ulng.rsmsglogerror msgid "Error: " msgstr "오류: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "파일 %s 압축 풀기" #: ulng.rsmsgloginfo msgid "Info: " msgstr "정보: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "링크 %s 생성" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "폴더 %s 생성" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "파일 %s 이동" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "파일 %s 압축" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "폴더 %s 제거" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "완료: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "심링크 %s 생성" #: ulng.rsmsglogtest #, fuzzy,badformat msgid "Test file integrity %s" msgstr "파일 % 상태 테스트" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "주 암호" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "주 암호를 입력하시오:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "새 파일" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "다음 볼륨의 압축을 풀었습니다" #: ulng.rsmsgnofiles msgid "No files" msgstr "파일이 없습니다." #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "선택한 파일이 없습니다." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "대상 드라이브에 여유 공간이 부족합니다. 계속할까요?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "대상 드라이브에 여유 공간이 부족합니다. 다시 시도할까요?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "%s 파일을 삭제할 수 없습니다" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "구현되지 않았습니다." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "암호:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "암호가 다릅니다!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "암호를 입력하세요:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "암호 (방화벽):" #: ulng.rsmsgpasswordverify #, fuzzy msgid "Please re-enter the password for verification:" msgstr "암호를 확인하기 위해 다시 입력하세요:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "%s 추가(&A)" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "설정(&C)" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "%s 지우기(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "\"%s\" 프리셋이 이미 존재합니다. 덮어쓸까요?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "선택한 파일/폴더 %d 개의 이름을 바꿀/이동할까요?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "선택한 \"%s\"의 이름을 바꿀/이동할까요?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "변경 사항을 적용하려면 더블 커맨더를 재실행해 주세요." #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo #, fuzzy msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "용량: %s / %s, 파일 : %d / %d, 폴더: %d / %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "체크섬 파일만 선택해 주세요!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "다음 볼륨의 위치를 선택해 주세요." #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "볼륨 레이블 지정" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "탭이름 바꾸기" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "새 탭 이름:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "대상 경로:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "너무 많은 파일을 선택했습니다." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "사용자 이름:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "사용자 이름 (방화벽):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "볼륨 레이블:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "볼륨 크기를 입력하세요:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "선택한 파일/폴더를 %d 회 지울까요?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "선택한 \"%s\"를 반복하여 지울까요?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "변경 없음;대문자로;소문자로;첫 문자만 대문자로;모든 낱말의 첫 문자를 대문자로;" #: ulng.rsoperaborted msgid "Aborted" msgstr "취소됨" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "체크섬 계산" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "\"%s\" 의 체크섬 계산" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "\"%s\" 의 체크섬 계산" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "계산하기" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "\"%s\" 계산하기" #: ulng.rsopercombining msgid "Joining" msgstr "합치기" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "\"%s\" 의 파일을 \"%s\"로 합치기" #: ulng.rsopercopying msgid "Copying" msgstr "복사하기" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "\"%s\" 에서 \"%s\" 로 복사하기" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "\"%s\" ygw \"%s\" 로 복사하기" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "폴더 생성하기" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "\"%s\" 폴더 생성하기" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "삭제하기" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "\"%s\" 를 삭제하기" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "\"%s\" 를 삭제하기" #: ulng.rsoperexecuting msgid "Executing" msgstr "실행하기" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "\"%s\" 를 실행하기" #: ulng.rsoperextracting msgid "Extracting" msgstr "압축 해제하기" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "\"%s\" 에서 \"%s\" 로 압축 해제하기" #: ulng.rsoperfinished msgid "Finished" msgstr "완료됨" #: ulng.rsoperlisting msgid "Listing" msgstr "목록 만들기" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "\"%s\" 의 목록 만들기" #: ulng.rsopermoving msgid "Moving" msgstr "이동하기" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "\"%s\" 에서 \"%s\" 로 이동하기" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "\"%s\" 를 \"%s\" 로 이동하기" #: ulng.rsopernotstarted msgid "Not started" msgstr "시작되지 않음" #: ulng.rsoperpacking msgid "Packing" msgstr "압축하기" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "\"%s\" 에서 \"%s\" 로 압축하기" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "\"%s\" 를 \"%s\" 로 압축하기" #: ulng.rsoperpaused msgid "Paused" msgstr "중지됨" #: ulng.rsoperpausing msgid "Pausing" msgstr "중지중" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "대기중" #: ulng.rsoperrunning msgid "Running" msgstr "실행중" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "속성 설정하기" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "\"%s\" 에 있는 속성 설정하기" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "\"%s\" 의 속성 설정하기" #: ulng.rsopersplitting msgid "Splitting" msgstr "분할하기" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "\"%s\" 를 \"%s\" 로 분할하기" #: ulng.rsoperstarting msgid "Starting" msgstr "시작하기" #: ulng.rsoperstopped msgid "Stopped" msgstr "정지됨" #: ulng.rsoperstopping msgid "Stopping" msgstr "정지하기" #: ulng.rsopertesting msgid "Testing" msgstr "검사하기" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "\"%s\" 를 검사하기" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "\"%s\" 를 검사하기" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "체크섬 검사하기" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "\"%s\" 에 있는 체크섬 검사하기" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "\"%s\" 의 체크섬 검사하기" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "파일 소스에 접근을 기다리는 중" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "사용자 응답을 기다리는 중" #: ulng.rsoperwiping msgid "Wiping" msgstr "완전히 삭제하기" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "\"%s\" 를 완전히 삭제하기" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "\"%s\" 를 완전히 삭제하기" #: ulng.rsoperworking msgid "Working" msgstr "작업하기" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "삭제:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "경로 없이 압축해제:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "포멧 분석 모드" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID 위치:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID 검색 범위:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "변수" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "암호 질의 문자열:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "자동 풀림 압축 파일 생성:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "시험:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "압축 형식 이름:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "값" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "연결된 플러그인 \"%s\":" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "처음;마지막;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "사용 안함" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "사용하기" #: ulng.rsoptenterext msgid "Enter extension" msgstr "확장자 입력" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "커서" #: ulng.rsoptexamplemark msgid "Mark" msgstr "선택" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "선택 + 커서" #: ulng.rsoptexampletext msgid "Text" msgstr "텍스트" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "분리된 창에;최소화된 분리된 창에;작업 패널에" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "이 설정을 뒤집어 사용할 수 있도록, cm_Delete의 바로가기 %s가 등록될 것입니다." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "%s 의 단축키 추가" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "바로가기 추가" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "바로가기 설정 불가" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "바로가기 변경하기" #: ulng.rsopthotkeyscommand #, fuzzy msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "명령어" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "cm_Delete의 바로가기 %s는 바로가기 %s와 일치하기 위해 매개변수를 바꿀 필요가 있습니다. 바꾸시겠습니까?" #: ulng.rsopthotkeysdescription #, fuzzy msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "설명" #: ulng.rsopthotkeysedithotkey #, fuzzy,badformat msgid "Edit hotkey for %s" msgstr "%의 단축키 편집" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "변수 고치기" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "단축키" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "단축키" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "변수" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "파일 삭제할 바로가기 설정" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "이 설정이 바로가기 %s와 동작하려면, 바로가기 %s 는 cm_Delete에 할당되야 하지만 이미 %s에 지정되어 있습니다. 바꾸시겠습니까?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "사용중인 바로가기" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy msgid "Shortcut %s is already used." msgstr "바로가기 %s 가 이미 사용중입니다." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "%s로 바꿀까요?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "사용중: %s / %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers #, fuzzy msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "압축기" #: ulng.rsoptionseditorautorefresh #, fuzzy msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "자동 새로 고침" #: ulng.rsoptionseditorbehavior #, fuzzy msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "동작" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors #, fuzzy msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "색상" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "열 설정" #: ulng.rsoptionseditorconfiguration #, fuzzy msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "환경설정" #: ulng.rsoptionseditorcustomcolumns #, fuzzy msgid "Custom columns" msgstr "사용자 정의 열" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "폴더 즐겨찾기" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "드래그 & 드롭" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "드라이브 목록 버튼" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "파일 연결" #: ulng.rsoptionseditorfileoperations #, fuzzy msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "파일 작업" #: ulng.rsoptionseditorfilepanels #, fuzzy msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "파일 패널" #: ulng.rsoptionseditorfilesviews #, fuzzy msgid "Files views" msgstr "파일 보기" #: ulng.rsoptionseditorfiletypes #, fuzzy msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "파일 형식" #: ulng.rsoptionseditorfoldertabs #, fuzzy msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "폴더 탭" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts #, fuzzy msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "글꼴" #: ulng.rsoptionseditorhighlighters #, fuzzy msgid "Highlighters" msgstr "강조 표시기" #: ulng.rsoptionseditorhotkeys #, fuzzy msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "단축키" #: ulng.rsoptionseditoricons #, fuzzy msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "아이콘" #: ulng.rsoptionseditorignorelist #, fuzzy msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "무시 목록" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "키" #: ulng.rsoptionseditorlanguage #, fuzzy msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "언어 (Language)" #: ulng.rsoptionseditorlayout #, fuzzy msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "레이아웃" #: ulng.rsoptionseditorlog #, fuzzy msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "로그" #: ulng.rsoptionseditormiscellaneous #, fuzzy msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "기타" #: ulng.rsoptionseditormouse #, fuzzy msgid "Mouse" msgstr "마우스" #: ulng.rsoptionseditorplugins #, fuzzy msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "플러그인" #: ulng.rsoptionseditorquicksearch #, fuzzy msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "빠른 찾기/필터" #: ulng.rsoptionseditorterminal #, fuzzy msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "명령 프롬프트" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools #, fuzzy msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "도구" #: ulng.rsoptionseditortooltips #, fuzzy msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "풍선 도움말" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "왼쪽 버튼;오른쪽 버튼;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "파일 목록의 맨 위에;폴더 뒤에 (폴더가 파일 앞쪽에 정렬된 경우);정렬된 위치에;파일 목록의 맨 아래에" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "플러그인 %s 는 이미 다음 확장자와 연결되어 있습니다:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "활성" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "파일명" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "이름" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "등록" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "대소문자 구별하지 않기;로케일 설정에 따라서 (aAbBcC);처음은 대문자 그리고 소문자 (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "이름순으로 정렬하고 먼저 보여주기;파일처럼 정렬하고 먼저 보여주기;파일처럼 정렬하기" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "액센트를 고려하여 알파벳순으로;자연스럽게 정렬: 알파벳과 숫자순으로" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "위;아래;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "위치 변경하지 않기;새 파일처럼 동일한 설정 사용하기;정렬된 위치로" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "\"%s\" 의 접근 권한 변경 불가" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "\"%s\" 소유자 변경 불가!" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "파일" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "폴더" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "이름이 있는 파이프" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "아니오" #: ulng.rspropssocket msgid "Socket" msgstr "소켓" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "특별한 블록 기기" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "특별한 문자 기기" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "심볼릭 링크" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "알 수 없는 형식" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "예 (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "검색 결과" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "폴더 선택" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "전부" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "명령어" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "미리보기" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "파일: %d, 폴더: %d, 크기: %s (%s 바이트)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "대상 디렉토리를 만들 수 없습니다!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "잘못된 파일 크기 형식!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "파일을 자를 수 없습니다" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "100 개 이상의 부분으로 되어 있습니다! 계속할까요?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "폴더 선택:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "심링크 생성 오류" #: ulng.rssyndefaulttext #, fuzzy msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "기본 텍스트" #: ulng.rssynlangplaintext #, fuzzy msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "일반 텍스트" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "일" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "시" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "분" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "월" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "초" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "주" #: ulng.rstimeunityear msgid "Year(s)" msgstr "년" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "파일 비교" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "편집기" #: ulng.rstoolerroropeningdiffer #, fuzzy msgid "Error opening differ" msgstr "파일 비교 열기 오류" #: ulng.rstoolerroropeningeditor #, fuzzy msgid "Error opening editor" msgstr "편집기 열기 오류" #: ulng.rstoolerroropeningterminal #, fuzzy msgid "Error opening terminal" msgstr "명령 프롬프트 열기 오류" #: ulng.rstoolerroropeningviewer #, fuzzy msgid "Error opening viewer" msgstr "뷰어 열기 오류" #: ulng.rstoolterminal #, fuzzy msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "명령 프롬프트" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "뷰어" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "이 에러가 발생했을 때 무엇을 하고 있었는지 다음 파일과 함께 버그 트래커에 보고해 주시면 감사하겠습니다: %s 계속하려면 %s 를 누르거나 프로그램을 종료하려면 %s를 누르세요." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "네트워크" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "더블 커맨더 내장 뷰어" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "인코딩" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "새 크기" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s 를 찾지 못했습니다!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.sr@latin.po������������������������������������������������������0000644�0001750�0000144�00001202266�12666540554�020377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-01-06 17:20+0100\n" "Last-Translator: Саша Петровић <salepetronije@gmail.com>\n" "Language-Team: srpski <xfce4@xfce4.org>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" "X-Language: sr_RS\n" "X-Native-Language: srpski\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Upoređujem... %d%% (ESC za otkazivanje)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Pronađeno je datoteka: %d (istovetnih: %d, različitih: %d, jedinstvenih levo: %d, jedinstvenih desno: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Sa leva na desno: Umnoži %d datoteka, ukupne veličine %d bajta" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Sa desna na levo: Umnoži %d datoteka, ukupne veličine %d bajta" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Sve" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Podesite prilagođeni izgled stubaca" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Pozadina:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Koristi prilagođenu boju i slovni lik" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Boja teksta:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Slovni lik:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Pozadina 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Podesi prikaz br.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Boja pokazivača:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Pokazivač teksta:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Boja označavanja:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Naziv:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj stubac" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Prilagodi stubac:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Pregled" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Izaberite obrazac..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "P&roveri slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Umnoži& svojstva" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Umnoži v&lasništvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Umnoži v&reme i datum" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Ispravi v&eze" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Poništi osobinu samo za &čitanje" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "I&zuzmi prazne fascikle" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "S&ledi veze" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Čuvaj slobodan prostor" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Šta činiti kada se ne mogu podesiti vreme, svojstva, itd." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Koristi obrazac datoteke" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Kada &fascikla postoji" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Kada &datoteka postoji" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Kada se ne& mogu postaviti osobine" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nema obrasca>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Umnoži u ostavu isečaka" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Izgrađen" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Početna stranica:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Prepravka" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Izdanje" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Poništi" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Izaberite svojstva" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Ostava" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Sa&žmano" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Fascikla" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Šifrovano" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skriveno" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Samo za &čitanje" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "P&roređeno" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Simbolička veza" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Privremeno" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Svojstva NTFS " #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Opšta svojstva" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostalo" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Kao t&ekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Izračunaj zbirnu proveru" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Obrazuj posebnu datoteku zbirne provere za svaku datoteku" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Sačuvaj zbirnu(e) proveru(e) u:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Zbirna provera..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "D&odaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otk&aži" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Po&veži se" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Upravnik veza" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Poveži se na:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Dodaj u zakazano" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Mogućnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sačuvaj ove mogućnosti kao podrazumevane" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Umnoži datoteku(e)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Sačuvaj opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Napomena datoteke/fascikle" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Uredi& napomenu za:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Šifrovanje:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samostalno upoređivanje" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Binarno" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Otkaži" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Umnoži skup desno" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Umnoži skup desno" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Umnoži skup levo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Umnoži skup levo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Nalepi" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Označi &sve" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Poništi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Izlaz" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Zanemari veličinu slova" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Zanemari praznine" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Nastavi klizanje" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Poslednja razlika" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Razlika linija" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Sledeća razlika" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Sledeća razlika" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otvori levo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otvori desno..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Oboji pozadinu" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Prethodna razlika" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Učitaj ponovo" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ponovo učitaj" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Sačuvaj kao..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Sačuvaj kao..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Sačuvaj levo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Sačuvaj levo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sačuvaj levo kao..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sačuvaj levo kao..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Sačuvaj desno" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Sačuvaj desno" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Sačuvaj desno kao..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Sačuvaj desno kao..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Uporedi" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Uporedi" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Šifrovanje" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Šifrovanje" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Uporedi datoteke" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Radnje" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Ši&frovanje" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Mogućnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj novu prečicu nizu" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Odustani" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Ukloni poslednju prečicu iz niza" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Samo za sledeća poklapanja" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Odrednice (svaka u posebnoj liniji):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Prečice:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O radnji" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Postavke" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Postavke" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Umnoži" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Iseci" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Obriši" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Pronađi" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Pronađi" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Nađi sledeće" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Nađi sledeće" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Idi na liniju..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mek (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Uniks (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Zameni" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Zameni" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Označi &sve" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Označi sve" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Opozovi" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zatvori" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Izađi" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Napusti" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otvori" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Otvori" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Sačuvaj" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Sačuvaj &kao..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Sačuvaj kao" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Sač&uvaj sve" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "_Sačuvaj sve" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Uređivač" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Po&moć" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Ši&frovanje" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otvori kao" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Sačuvaj kao" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Isticanje sintakse" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Završetak linije" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "O&setljivo na veličinu slova" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Traži od umetnutog znaka" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regularni izrazi" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Samo označeni tekst&" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Samo cele reči" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "&Mogućnosti" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Zameni sa:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Traži:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Raspakuj datoteke" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Raspakuj imena putanje ako su sačuvana u datotekama" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Raspakuj svaku od arhiva u &posebnu podfasciklu (po imenima arhiva)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "P&repiši postojeće datoteke" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "U &fasciklu:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Izvuci datoteke na osnovu poklapanja:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Lozinka za šifrovane datoteke:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Dodaj" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Dodaj" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Dole" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Ukloni&" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Ukloni&" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Ukloni&" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Pre&imenuj" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Gore" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Pridruživanje datoteka" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Radnje" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Nastavci" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Vrste datoteka" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikonica" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Radnja:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Naredba:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvori u uređivaču" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Putanja datoteke" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Puna putanja" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Dobavi izlaz iz naredbe" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Pokreni u terminalu" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Otvori pomoću VFS-a" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Pregled" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvori u pregledniku" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Sačekajte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ime datoteke:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na „Zatvori“ ako se privremena datoteka ne može izbrisati. " #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Na površ" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Pregledaj sve" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "&Trenutna radnja:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ka:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Podesite svojstva" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Dodeli svim odabranim datotekama" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Preskoči& ovu datoteku " #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Sadrži:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Putanja:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Udruženje" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Poslednji pristup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Poslednja izmena:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Poslednja izmena stanja:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlasnik&" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitanje" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veličina:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Veza ka:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Svojstva" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Uredi&" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Idi na datoteku" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Poslednja pretraga" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nova pretraga" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Sačuvaj" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "U&čitaj" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Sačuvaj&" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sačuvaj kao „Početak u fascikli“" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ako se sačuva, „Početak u fascikli“ će biti povraćen prilikom učitavanja obrasca. Upotrebite to ako želite da primenite pretragu na određenu fasciklu" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Početak" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Otkaži" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Koristi obrazac" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Pregled" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Dovod &spisku" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Pronađi datoteke" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "O&setljivo na veličinu slova" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Od &datuma:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Do &datuma:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Od &veličine:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Do &veličine:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Pronađi &tekst u datoteci" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Prati &simboličke veze" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Pronađi datoteke koje ne& sadrže tekst" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ne& starije od:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Traži& po delu imena datoteke" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Zameni& sa" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Označenim fasciklama i &datotekama" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "&Regularni izraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Od &vremena:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Do vre&mena:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Koristi priključak za pretragu:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Unesite imena fascikli koje bi trebalo da budu isključene iz pretrage odvojene znakom „;“" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Unesite imena datoteka koje bi trebalo da budu isključene iz pretrage odvojene znakom „;“" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Unesite imena datoteka razdvojena znakom „;“" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Fascikle" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Datoteke" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Pronađi podatke" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Odrednice&" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Šifrovanje:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "I&zuzmi podfascikle" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Izuzmi datoteke" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Maska datoteke" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Počni u &fascikli" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "traži u &podfasciklama:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Prethodne pretrage:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Ukloni sa spiska" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Prikaži sve pronađene stavke" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Prikaži u pregledniku" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Napredno" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Učitaj/Sačuvaj" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Prikljuci" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Izlazi" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Obično" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Pronađi&" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Pronađi" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "O&setljivo na veličinu slova" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Napravi čvrstu vezu" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će veza biti usmerena" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Uvezi sve!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Uvezi izabrano" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Izaberite stavke koje želite da uvezete" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Klikom na podizbornik će se izabrati ceo izbornik" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Držite KTRL i kliknite na stavke radi izbora više njih" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Usmerivač" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Sačuvaj u..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Stavka" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Ime datoteke" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dole&" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dole" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Obriši" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&gore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Gore" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&O programu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dodaj ime datoteke u naredbenu liniju" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Dodaj putanju i ime datoteke u naredbenu liniju" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Umnoži putanju u naredbenu liniju" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Sažeto" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Sažeti pregled" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Izračunaj zauzeće prostora" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Promeni fasciklu" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Pređi na domaću fasciklu" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Pređi u roditeljsku fasciklu" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Pređi u korenu fasciklu" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Računanje zbirne& provere..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Provera zbira..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Očisti datoteku dnevnika" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Očisti prozor dnevnika" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Zatvori &sve kartice" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Zatvori karticu" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Sledeća naredbena linija" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Postavi sledeću naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Prethodna naredbena linija" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Postavi prethodnu naredbu iz istorije u naredbenu liniju" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Potpuno" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Pregled u vidu stubaca" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Uporedi po &sadržaju" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Uporedi fascikle" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Uporedi fascikle" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska fascikli" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Prikaži priručni izbornik" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Umnoži" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Umnoži sve prikazane &stupce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Umnoži potpunu putanju sa imenima datoteka" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Umnoži imena datoteka u ostavu isečaka" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Umnoži datoteke bez pitanja za potvrdu" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Umnoži u istu površ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Umnoži" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Prikaži zauzeće memorije" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Iseci" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Istorija fascikle" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Brzi spisak &fascikli" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Uredi &napomenu..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Uredi novu datoteku" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Uredi polje putanje iznad spiska" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zameni površi" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Napusti" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Izvuci datoteke..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Pridruživanje &datoteka..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Spoji datoteke..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Prikaži svojstva &datoteka" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Podeli& datoteku..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Ravan prikaz" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Žiža na naredbenu liniju" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi pokazivač na prvu datoteku spiska" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi pokazivač na poslednju datoteku spiska" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Napravi &čvrstu vezu..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Sadržaj" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vodoravan prikaz površi" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatura" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levo &= Desno" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otvori spisak levog uređaja" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Učitaj sadržaj ostave isečaka" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Učitaj izbor iz datoteke..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Učitaj kartice iz datoteke" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Napravi &fasciklu" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Označi sve sa istim nastavkom&" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Obrni izbor" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Označi sve" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Poništi izbor &skupa..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Izaberi &skup..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Odznači sve" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Umanji prozor" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Pribor za masovno &preimenovanje" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Uspostavi mrežnu &vezu..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Prekini mrežnu &vezu" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Brza mrežna veza..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Novi list" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Pređi na &sledeći list" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Pokušaj da otvoriš skladište" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otvori datoteku sa trake" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otvori &fasciklu u novom listu" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otvori &VFS spisak" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Preglednik &napretka radnji" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Mogućnosti..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Skladišti datoteke..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Podesite položaj deobe" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Prilepi" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Pređi na &prethodni list" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Brzi propusnik" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Brza pretraga" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Površ za brzi pregled" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Osveži" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Premesti" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Premeštaj i preimenuj datoteke bez pitanja za potvrdu" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Preimenuj list" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Povrati izbor" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Obrnuti redosled" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Desno &= levo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvori spisak desnog uređaja" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Pokreni u &terminalu" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Sačuvaj izbor" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sačuvaj &izbor u datoteku..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Sačuvaj kartice u datoteku" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Traži..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Promeni &svojstva..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zaključano sa fasciklama otvorenim u novom &listu" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Obično" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zaključano" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zaključeno sa dozvolom izmene &fascikli" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Otvori" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otvori koristeći pridruživanje datoteka" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Prikaži izbornik dugmeta" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "prikaži istoriju naredbi" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Izbornik" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Prikazuj &skrivene i sistemske datoteke" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Poređaj po &svojstvima" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Poređaj po &datumu" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Poređaj po &nastavku" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Poređaj po &imenu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Poređaj po &veličini" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Omogući/onemogući prikaz zanemarenih datoteka sa spiska" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Napravi simboličku &vezu..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Uskladi fascikle..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cilj &= izvor" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Proveri skladište" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Umanjene sličice" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pregled umanjenih sličica" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Premesti fasciklu pod pokazivačem na levi prozor" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Premesti fasciklu pod pokazivačem na desni prozor" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odznači sve sa istim nastavkom&" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Pregled" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Prikaži istoriju posećenih putanja pod ovakvim pregledom" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Idi na sledeću stavku istorije" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Idi na prethodnu stavku istorije" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Posetite Veb stranicu Double Commander-a" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Briši potpuno" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Izlaz" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Fascikla" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Prikaži trenutnu fasciklu sa desne površi na levu površ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Idi u domaću fasciklu" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Idi u korenu fasciklu" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Idi u roditeljsku fasciklu" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Prikaži trenutnu fasciklu sa leve površi na desnu površ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Putanja" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Umnožavanje..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Stvaranje veze..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Očisti" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Sakrij" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Premesti..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Stvaranje simboličke veze..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Mogućnosti lista" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Izlaz&" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Povrati" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Početak" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Naredbe" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Postavke" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Datoteke&" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomoć&" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Oznaka&" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Mreža" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Prikaži&" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Mogućnosti" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Listovi&" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Umnoži" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Otkaži" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&U redu" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Pomoć" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Prečica" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Opiši&..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ili& odaberi predodređenu vrstu izbora:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Napravi novu fasciklu" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Unesite& ime nove fascikle:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nova veličina" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Visina :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kakvoća sažmanosti JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Širina :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Visina" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zatvori&" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Izbriši&" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Učitaj&" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Pre&imenuj" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Poništi sve&" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Sačuvaj&" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Višestruko preimenovanje" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Omogući&" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regularni izrazi" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Koristi& zamenu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] nastavak" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Brojač" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Nađi i zameni" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Izlazi dnevnika" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Obrasci" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Nastavci&" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Pronađi&..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Međuvreme" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Ime datoteke" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Zameni&..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Početni broj" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Širina&" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Brojač" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] dan" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] dan (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] dan u nedelji (kratko, npr. „pon“)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] dan u nedelji (potpuno, npr. „ponedeljak“)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] znak na položaju x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] znaci od položaja x do položaja y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] čas" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Čas (2 znaka)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (2 znaka)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mesec" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesec (2 znaka)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ime meseca (kratko, npr., „jan“)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ime meseca (puno, npr., „januar“)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ime" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] znak na položaju x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] znaci od položaja x do položaja y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Vreme..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Nastavak..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ime..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Priključak" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (2 znaka)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Godina (2 znaka)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Godina (4 znaka)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Staro ime datoteke" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo ime datoteke" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Putanja datoteke" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Izaberite program" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Prilagođena naredba" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Sačuvaj pridruživanje" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Postavi izabrani program kao podrazumevani program" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Vrsta datoteke koja će biti otvorena: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Višestruka imena datoteka" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Višestruke adrese" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jedno ime datoteke" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jedna adresa" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Primeni&" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Otkaži&" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "U redu&" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Izaberite jednu podstranicu, ova stranica ne sadrži ni jednu postavku." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Samostalno& podesi" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Dodaj&" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Izbriši&" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Preimenuj&" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Način otklanjanja& grešaka" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Omogućen&" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Prikazuj& izlaz iz konzole" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Dodajem&:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Nastavci&:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Izdvoji&:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Listaj&:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Listanje i dovršavanje& (mogućnost):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Oblik& listanja:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Početak listanja& (mogućnost):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Program za sažimanje:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Opis&:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Dodatno" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Opšte" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Prilikom izmena &veličine, datuma ili svojstava" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sledeće putanje& i njene podfascikle:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Prilikom stvaranja datoteka, brisanja ili preimenovanja" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Kada je program u pozadini&" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Onemogući samostalno osvežavanje" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Osveži spisak datoteka" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Uvek prikazuj ikonu u obaveštajnoj oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Samostalno skrivaj& otkačene uređaje" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Prilikom umanjenja premesti ikonu u obaveštajnu oblast" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Dozvoli samo jedan primerak DN u isto vreme" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ovde možete uneti jedan ili veše uređaja ili tačaka kačenja odvajajući ih znacima „;“" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Crni spisak uređaja" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Opseci tekst na širinu stupca" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Vodoravne& linije" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Uspravne& linije" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Samostalno& popuni stupce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Prikazuj mrežu" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Samostalno uklopi veličinu stubaca" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Samostalno uklopi veličinu stupca:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Uredi&" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Istorija naredbi&" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Istorija fascikli&" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Istorija maski datoteka&" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sačuvaj& postavke" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Istorija pretrage& i zamene" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Putanja datoteka postavki" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Sačuvaj po izlazu" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Uključi naredbenu liniju" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Fascikla programa& (prenosno izdanje)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Domaća fascikla korisnika&" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Sve" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Sačuvaj kao" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Opšte" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Pozadina:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadina 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Podesi stupce za sistem datoteka:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Boja pokazivača:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Pokazivač teksta:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Slovni lik:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veličina:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Boja teksta:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Boja označavanja:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj stubac" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Dodavanje..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Brisanje..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Umetanje..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Razno..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Neke radnje za odabir odgovarajućeg cilja" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Prilikom dodavanja fascikle, dodaj i cilj" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Uvek širi stablo fascikli" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy,badformat #| msgid "Show only valid %senv_var%s" msgid "Show only valid environment variables" msgstr "Prikazuj samo ispravne %env_var%" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "Pri iskačućim prozorima prikaži [i putanju]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Ime, a-š" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Brzi spisak fascikli (preurediti prevlačenjem i spuštanjem)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Putanja:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Cilj:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "fascikla radnog okvira" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "Fascikle radnih i mirujućih okvira" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "naredba" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Dodaj naredbu" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "umnožak označene stavke" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Dodaj umnožak označene stavke" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "razdvajač" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Dodaj razdvajač" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podizbornik" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Dodaj podizbornik" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "fascikla za pregled" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...trenutni stupanj stavki koje su samo označene" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "trenutno označene ili radne fascikle radnog okvira" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Iseci" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "obriši sve!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podizbornik i svi njegovi činioce" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "samo podizbornik, ali zadrži činioce" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "označena stavka" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih fascikli radi utvrđivanja koje stvarno postoje" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Pretraži sve putanje brzih fascikli i ciljeva radi utvrđivanja koji stvarno postoje" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "u datoteku spiska brzih fascikli (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Izbornik probe spiska brzih fascikli" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "iz datoteke brzog spiska fascikli (brzi spisak)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "iz „wincmd.ini“ TC-a" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Povrati spisak brzih fascikli iz ostave" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Sačuvaj u ostavu trenutni spisak brzih fascikli" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...sve, od A do Š!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pojedinačni skup stavki isključivo" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Razvrstaj pojedinačni skup stavki isključivo" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Proveri izlazni izbornik" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "fascikla za kucanje" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Dodaj fasciklu za kucanje" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Ubaci fasciklu za kucanje" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Dodatak iz glavne površi:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Prikazuj& prozorče potvrde posle otpuštanja" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Prikazuj sistem datoteka" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Prikazuj slobodan& prostor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Prikaži natpis&" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Spisak uređaja" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Pozadina" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Vrati na podrazumevano" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Sačuvaj" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Svojstva stavke" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Sučelje&" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Oznaka tekstom&" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Koristi (i uredi) opšte& postavke sheme" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Koristi mesne& postavke sheme" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Podebljan" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Uključi" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Iskošeno" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Uključi" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Pre&crtaj" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "U&ključi" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podv&učeno" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Iz&vrni" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Isključi" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "U&ključi" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Dodavanje..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Brisanje..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Umetanje..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Razvrstavanje..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Uvek širi stablo fascikli" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Ostale mogućnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "razdvajač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podizbornik" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Dodaj podizbornik" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Skupi sve" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...trenutni stupanj stavki koje su samo označene" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Iseci" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "obriši sve!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podizbornik i svi njegovi činioce" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "samo podizbornik, ali zadrži činioce" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "označena stavka" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Obrišite označenu stavku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otvori sve grane" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...sve, od A do Š!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Razvrstaj pojedinačni skup stavki isključivo" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...sadržaj označenog podizbornika, bez podnivoa" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...sadržaj označenog podizbornika i sve njegove podnivoe" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Proveri izlazni izbornik" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Dodaj&" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Dole" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Ukloni&" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Pre&imenuj" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Gore" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Radnje" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Nastavci" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Vrste datoteka" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikonica" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Radnja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Naredba:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvori u uređivaču" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Dobavi izlaz iz naredbe" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otvori" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Pokreni u terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Pregled" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvori u pregledniku" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Prikazuj prozor potvrde za:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Umnoži& postupak" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Izbriši& postupak" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Premesti u smeće (dugme shift poništava ovu postavku)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Radnja slanja u smeće" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Poništi oznaku samo za čitanje" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Radnja premeštanja&" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Pretraga& po delu imena datoteke" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Obrađuj napomene sa datotekama i fasciklama" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Označi ime datoteke& bez nastavka prilikom preimenovanja" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Prikazuj karticu površi odabira u prozoru za umnožavanje premeštanje" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Zanemari greške radnji nad datotekama i upisuj ih u prozoru dnevnika" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Izvršavanje radnji" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Pretraga datoteka" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Korisničko sučelje" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Veličina ostave za radnje nad datotekama (u KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Prikazuj početni napredak radnji u" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Broj prolaza potpunog brisanja:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Koristi kartu memorije za pretrage po tekstovima" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Koristi tok za pretrage po tekstovima" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Omogući pojačano bojenje" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Koristi trepćući pokazivač" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Koristi ukazivač sa prelivom" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Koristi obrnuti odabir" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Okvir pokazivača" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazivač slobodnog mesta na uređajima" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "P&ozadina:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "P&ozadina 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Boja pokazivača&:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Pokazivač teksta&:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Osvetljenje neradne kartice" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Pozadinska boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Čeona boja &ukazivača:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Boja označavanja&:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Boja teksta&" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Nemoj da učitavaš spisak datoteka dok se kartica ne pokrene" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Prikazuj& uglaste zagrade oko fascikli" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Istakni& nove i osvežene datoteke" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogući &preimenovanje na mestu pri dvokliku na ime" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Učitaj spisak &datoteka u posebnom procesu" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Učitavaj ikone nakon& spiska datoteka" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Prikaži sistemske i skrivene datoteke" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Prilikom odabira datoteka pomoću <SPACEBAR>, pređi na sledeću datoteku ( kao i sa <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Oblikujem" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ređanje" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Osetljivo na &veličinu slova" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Neispravan oblik" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Oblik datuma i vremena:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Oblik veličine& datoteka:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Umetni& nove datoteke" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Raspored fascikli:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Način raspoređivanja:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Premesti osvežene datoteke" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Obriši" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Boje vrsta datoteka (rasporedite ih povlačenjem i &spuštanjem)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Svojstva& vrste:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Boja vrste&:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Maska vrste&:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Ime &vrste:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Slovni lik uređivača" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Slovni lik dnevnika&" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Glavni slovni lik&" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Slovni lik preglednika& knjiga" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Slovni lik preglednika&" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Dodaj prečicu&" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Izbriši& prečicu" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Uredi& prečicu" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Propusnik&" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Vrste&:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Naredbe&:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Datoteke prečica&:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Naredba" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Prečice" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Prečica" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Odrednica" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Upravljači" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za sledeće &putanje i njihove podfascikle:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Prikazuj ikonice radnji u izbornicima&" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Prikazuj preklapajuće& ikonice, npr. za veze" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Onemogući naročite ikonice" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikonice u izbornicima" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Veličina ikonica" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Prikazuj ikonice levo od imena datoteka" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Sve&" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Sve povezane + &EXE/LNK (sporo)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez& ikonica" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Samo &uobičajene ikonice" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Dodaj& označena imena" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Dodaj označena imena sa &potpunim putanjama" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Zanemari& (ne prikazuj) sledeće datoteke i fascikle:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Sačuvaj u:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Leva& i desna strelica menja fasciklu (kretanje kao u Linksu)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Kucanje" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Menja+slova&" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ktrl+menja+slova" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Slova" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ravno &sučelje" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Ravna dugmad&" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Prikazuj ukazivač slobodnog prostora na natpisu uređaja" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Prikazuj prozor dnevnika&" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Prikazuj površ radnje iz pozadine" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Prikazuj uobičajeni napredak u traci izbornika" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Prikazuj naredbenu liniju&" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Prikazuj trenutnu fasciklu" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Prikazuj dugmiće uređaja&" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Prikazuj natpis slobodnog prostora&" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Prikazuj dugme spiska uređaja" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Prikazuj dugmiće radnji" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Prikazuj glavni& izbornik" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Prikazuj traku dugmadi" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Prikazuj natpis malog slobodnog prostora" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Prikazuj traku stanja&" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Prikazuj& zaglavlje kartice za zaustavljanje" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Prikazuj kartice fascikle" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Prikazuj prozor terminala&" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Prikazuj dve trake dugmadi uređaja (stalne širine, iznad prozora)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Raspored na ekranu" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Sažmi/izvuci" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Umnoži/premesti/napravi vezu/simboličku vezu" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Napravi/Izbriši fascikle" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Dnevnik grešaka" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Napravi& datoteku dnevnika:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Unosi u dnevnik poruke podataka&" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Unosi u dnevnik uspešne& radnje" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Priključci &sistema datoteka" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Datoteka dnevnika radnji nad datotekama" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Upisuj radnje u dnevnik" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stanje radnje" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Ukloni umanjene sličice nepostojećih datoteka" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Uvek idi u& koren uređaja prilikom menjanja uređaja" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Prikazuj poruke upozorenja (samo dugme „U redu“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Čuvaj umanjene sličice u ostavi" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Umanjene sličice" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "tačke" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "H" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Veličina &umanjenih sličica:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Odabir mišem" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Klizanje" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Izbor" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Način:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linija po linija" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linija po linija &sa pomeranjem pokazivača" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stranica po stranica" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Podesi&" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Omogući" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Ukloni" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "&Lickaj" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Priključci &pretrage omogućuju zamenske algoritme pretrage, ili spoljne alate (kao što je „locate“, itd.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Priključci za sažimanje se upotrebljavaju za rad sa arhivama" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Priključci za sadržaje se upotrebljavaju za proširenje prikaza pojedinosti datoteka kao što su mp3 oznake ili svojstva slika u spiskovima datoteka, ili se koriste u priključcima pretrage i alatima za višestruko preimanovanje" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Priključci sistema datoteka& omogućavaju pristup radnjama sa diskovima koje nisu dostupne iz operativnog sistema ili spoljnjim uređajima ko što su Palm i džepni računar." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Priključci za pregled omogućavaju prikaz oblika datoteka kao što su slike, tabele, baze podataka itd. u pregledniku (F3, Ktrl+Ku)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Radno" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Priključak" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Prijavljeno za" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "&Priključci pretrage (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Priključci za sažimanje (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Priključci& sadržaja (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Priključci sistema datoteka (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Priključci preglednika (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Počinje sa (ime mora da počinje prvim otkucanim znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Završava se sa (poslednji znak pre otkucane tačke . mora da se poklapa)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Mogućnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Potpuno slaganje imena" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Veličina slova pretrage" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Traži ove stavke" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Pokreni ciljnu površ& pri kliku na jednu od njenih kartica" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Prikaži i zaglavlje kartice kada se prikazuje samo jedna kartica" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Potvrdi zatvaranje svih kartica" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ograniči dužinu naslova kartice na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Prikazuj zaključane kartice &sa znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Kartice na višestrukim linijama" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ktrl+&gore otvara novu karticu u pozadini" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otvori novu karticu pored trenutnr kartice" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Prikazuj dugme za zatvaranje &kartice" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Zaglavlje kartice fascikli" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znaci" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Položaj kartica&" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Naredba:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Dugme potpuno istih umnožaka" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi &prečicu" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Unesi novo dugme" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Drugo..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Ukloni &prečicu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ravna& dugmad" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Unesite odrednice naredbe, svaku u posebnoj liniji. Pritisnite F1 za pregled pomoći za odrednice." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Prikaz" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Veličina &trake:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Naredba:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Odrednica&:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Pomoć" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Prečica:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ikonica&:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veličina& ikonice:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Naredba&:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Odrednice&:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Početna &putanja:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Napomena:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Ostava..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Izvoz..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "u „wincmd.ini“ TC-a (zadrži postojeće)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "u „wincmd.ini“ TC-a (izbriši postojeće)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Uvoz..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta dugmeta" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Zadržavaj otvorenim prozor terminala posle izvršenja programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Izvrši u terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Koristi spoljni program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatne odrednice" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Putanja programa za izvršenje" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Primeni&" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Izbriši&" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Obrazac..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Prikaži napomenu" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Prilagođeno polje po vrsti datoteka" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Vrsta napomene&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Vrsta maske&:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Vrsta imena&:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Način prikaza preglednika knjiga" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Primer" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Pozadinska boja u pregledniku knjiga" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Slovni lik u pregledniku knjiga" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Broj stubaca u pregledniku knjiga" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Podesi" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Sažmi datoteke" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Napravi odvojene skladišta, svako posebno za odabranu datoteku i fasciklu" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Napravi samoizdvajajuće skladište" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Šifruj" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Premesti& u skladište" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Višestruko skladište diskova" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Prvo smesti& u TAR skladište" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Takođe sažmi& i imena putanje (samo rekurzivno)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Sažmi datoteku(e) u datoteku:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Sažimalac" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Izdvoji &sve i izvrši" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Izdvoji i izvrši" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Svojstva sažmane datoteke" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Svojstva:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Stupanj sažimanja:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Način:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Izvorna veličina:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datoteka:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Veličina sažmane datoteke:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Sažimalac:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Vreme:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "H" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zatvori površ propusnika" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Unesite tekst ili uslov pretrage" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Osetljivo na veličinu slova" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Fascikle" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Datoteke" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Početak poklapanja" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Završetak poklapanja" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Uslov" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Zamena pretrage i uslova" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Priključak" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Vrednost" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zatvori" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Pomoć" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Izaberite znakove za unos:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Izmeni svojstva" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Skladište" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Napravljeno:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skriveno" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Pristupano:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Izmenjeno:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Samo za čitanje" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Uključujući podfascikle" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Svojstva vremenske oznake" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Svojstva" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bita:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Udruženje" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlasnik" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvrši" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(siva polja označavaju neizmenjene vrednosti)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktalno:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čitaj" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Piši" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Neke radnje za odabir odgovarajuće putanje" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Delilac" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Veličina i broj delova" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Ciljna fascikla&" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Izvorna& fascikla" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Broje delova" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabajta" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobajta" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabajta" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Izgrađen" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Slobodni Paskal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativni sistem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Prepravka" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Izdanje" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Napravi simboličku vezu" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Odredište na koje će ukazivati veza" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &veze" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zatvori" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Uporedi" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklađene fascikle" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "nesimetrično" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "po sadržaju" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "zanemari datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "samo odabrano" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podfascikle" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Prikazuj:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Veličina" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(u glavnom prozoru)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Uporedi" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "blizanci" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "pojedinačni" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Molim, pritisnite „Uporedi“ za početak" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potvrdi prepisivanje" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Dodaj novo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Otkaži" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Izmeni" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "&Podrazumevano" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&U redu" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Ukloni&" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Priključak za lickanje" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Prepoznaj vrstu skladišta po sadržaju" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Nisam uspeo da &izbrišem datoteke" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podržava &šifrovanje" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Prikazuj& kao obične datoteke (sakrij ikonicu sažimanja)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podržava &sažimanje u memoriji" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Nisam uspeo da izmenim postojeća skladišta" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Skladište može da sadrži višestruke datoteke" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Nisam uspeo da napravim nova skladišta&" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podržava& prozor za prikaz mogućnosti" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Omogućava pretragu& teksta u skladištima" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Opis&:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Prepoznaj& nisku:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Nastavci&:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Oznake:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Ime&:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Priključak:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O pregledniku..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Prikazuje poruku o programu" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Umnoži datoteku" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Umnoži datoteku" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Izbriši datoteku" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Sledeća" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Učitaj sledeću datoteku" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Prethodna" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Učitaj prethodnu datoteku" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Premesti datoteku" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Premesti datoteku" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Učitaj ponovo" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ponovo učitaj trenutnu datoteku" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Obrni za 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Obrni za 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Obrni za 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Obrni za 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Obrni za 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Obrni za 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Sačuvaj kao..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Sačuvaj datoteku kao..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Razvuci" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Razvuci sliku" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Umnoži" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Umnoži" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Opseci" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Obriši" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Obriši" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Preko celog ekrana" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Premesti" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Premesti" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Oboji" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Crvene oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Promeni veličinu" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Vrati" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Udalji" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Preglednik" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretne slike" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Olovka" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Isticanje" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Bojenje" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokretni prikaz" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Pregled" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Prikaži binarno&" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Umnoži u ostavu isečaka" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Šifrovanje" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Izlaz&" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Preko celog ekrana" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafika" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Prikaži heksadecimalno&" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Slika" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Prikaži kao knjigu&" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Ogledalo" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Priključak" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Pregled" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Štampaj..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Obrni" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Sačuvaj" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Sačuvaj kao..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Slika ekrana" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Traži" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Nađi sledeće" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Nađi prethodno" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Razvuci" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Prikaži kao &tekst" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Pregled" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Prikaži kao &uvučen tekst" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Približi" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Udalji" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Umnoži u ostavu isečaka" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Označi sve" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Počni" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Zaustavi" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Radnje nad datotekama" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Uvek na vrhu" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Koristi „prevuci i spusti“ za radnje premeštanja između zakazanih" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Otkaži" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Novo zakazivanje" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Prikaži u odvojenom prozoru" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Zakaži prvu" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Zakaži poslednju" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Zakazano" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Van zakazanih" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Zakazano 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Zakazano 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Zakazano 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Zakazano 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Zakazano 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Prikaži u odvojenom prozoru" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Zaustavi sve" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Radi u pozadini (posebna veza)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Kada datoteka postoji" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Nisam uspeo da pronađem datoteku i da pomognem pri proveri konačnog sklopa datoteka:\n" "%s\n" "\n" "Da li možete da omogućite to i pritisnite „U redu“ kada bude spremno,\n" "ili pritisnite „OTKAŽI“ za nastavak bez toga?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Otkaži brzi uslov" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Otkaži trenutnu radnju" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Oštećeno:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Opšte:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Nedostaje:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Greška čitanja:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Uspeh:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Unesi zbir za proveru i izaberi algoritam:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Proveri zbir" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Ukupno:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Ostava isečaka ne sadrži ispravne podatke trake alata." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Svojstvo" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Nastavak" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ime" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Veličina" #: ulng.rsconfcolalign msgid "Align" msgstr "Podvuci" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Naslov" #: ulng.rsconfcolconfig msgid "Config" msgstr "Postavke" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Izbriši" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Sadržaj polja" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Premesti" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Širina" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prilagodi kolonu" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Umnoži (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Sve radnje su završene" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Napredak svih radnji %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Prekini" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Sve" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Nastavi" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Samostalno preimenuj izvorne datoteke" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Otkaži" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Nastavi" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Umnoži &u" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Umnoži u &sve" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Napusti& program" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Zanemari& sve" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ništa" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&U redu" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "drugo&" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepiši" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepiši &sve" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepiši sve &veće" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepiši sve &starije" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepiši sve &Manje" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "P&reimenuj" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Nastavi" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Po&novo pokušaj" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Preskoči" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Preskoči& sve" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Da" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Izračunaj fascikle i datoteke" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Izračunavam zbirnu proveru..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Proveravam zbir..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Umnoži datoteku(e)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Izbriši datoteku(e)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Premesti datoteku(e)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Zastanak&" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Početak&" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Zakazano" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Brzina %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Brzina %s/s, preostalo vreme %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Podeli" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Izbriši potpuno datoteku(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez oznake>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nema uređaja>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Unutrašnji uređivač Double Commander-a." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Idi na liniju:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Idi na liniju" #: ulng.rseditnewfile msgid "new.txt" msgstr "novi.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ime datoteke:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otvori datoteku" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Unazad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Traži" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Unapred" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zameni" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Pitaj;Prepiši;Umnoži;Preskoči" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Pitaj;Prepiši;Prepiši starije;Preskoči" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Pitaj;Ne postavljaj više;Zanemari greške" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Uslov" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Odredi obrazac" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s stupanj(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "sve (neograničena dubina)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "samo trenutnu fasciklu" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Fascikla %s ne postoji. " #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Pronašao sam: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Sačuvaj obrazac pretrage" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ime obrasca:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pregledano je: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Pregledam" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Počni sa" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Slobodno je %s od %s bajta" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bajta je slobodno" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum i vreme pristupa" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Svojstva" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Napomena" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Veličina skladišta" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum i vreme nastanka" #: ulng.rsfuncext msgid "Extension" msgstr "Nastavak" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Udruženje" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Veza do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum i vreme izmene" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ime" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ime bez nastavka" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlasnik" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Putanja" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Veličina" #: ulng.rsfunctype msgid "Type" msgstr "Vrsta" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Desila se greška pri stvaranju čvrste veze" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Žalim, nisam pronašao ništa za uvoz!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Upozorenje: Pri vraćanju datoteke .hotlist iz ostave, trenutni spisak će biti izbrisan i zamenjen uvezenim.\n" "\n" "Da li sigurno želite da nastavite?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Prozorče umnožavanja i premeštanja" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Program za razlike" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Uredite napomenu" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Uređivač" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Nađi datoteke" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Glavni" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Stvaralac veza je završio rad" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Odznači masku" #: ulng.rsmarkplus msgid "Select mask" msgstr "Označi masku" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Unesi masku:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Podesite prilagođene stupce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Podesite ovaj pregled stubaca" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Radnje" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Uredi" #: ulng.rsmnueject msgid "Eject" msgstr "Izbaci" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Prikači" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nova" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nema dostupnih uređaja" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvori" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Otvori sa" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Drugo..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Razvrstaj po" #: ulng.rsmnuumount msgid "Unmount" msgstr "Otkači" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Prikaži" #: ulng.rsmsgaccount msgid "Account:" msgstr "Nalog:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatne odrednice za naredbenu liniju programa sažimanja:" #: ulng.rsmsgbadcrc32 #, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Izlazna datoteka CRC32 je neispravna:\n" "„%s“\n" "\n" "Da li želite da zadržite neispravnu datoteku?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ne možete umnožavati i premeštati u samu datoteku „%s“!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Ne možete izbrisati %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Nisam uspeo da pređem na fasciklu [%s]." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Da li da uklonim sve kartice koje se ne koriste?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Kartica (%s) je zaključana. Da li da je uprkos tome zatvorim?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Da li ste sigurni da želite napustiti program?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Da li da umnožim %d odabranih datoteka/fascikli?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Da umnožim odabrano „%s“?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Da li da izbrišem delimično umnoženu datoteku ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Da li da izbrišem %d odabranih datoteka/fascikli?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Da li da premestim %d odabrane datoteke/fascikle u smeće?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Da li da izbrišem odabrani „%s“?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Da li da premestim odabrano „%s“ u smeće?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nisam uspeo da premestim „%s“ u smeće. Da li da ga izbrišem?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nije dostupan" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Unesite nastavak datoteke:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Unesite ime:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Desila se CRC greška u podacima skladišta" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Podaci su oštećeni" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nisam uspeo da se povežem sa služiteljem „%s“" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nisam uspeo da umnožim datoteku %s u %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Datoteka pod imenom „%s“ već postoji." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s nije podržan" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Fascikla %s već postoji." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Korisnik je prekinuo tekuću radnju" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Desila se greška pri zatvaranju datoteke" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nisam uspeo da obrazujem datoteku" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nema više datoteka u arhivi" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nisam uspeo da otvorim postojeću datoteku" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Desila se greška pri čitanju datoteke" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Desila se greška pri upisu u datoteku" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Nisam uspeo da obrazujem fasciklu %s." #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Veza nije ispravna" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nisam pronašao datoteke" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nema dovoljno memorije" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Radnja nije podržana." #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Desila se greška u priručnom izborniku" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Desila se greška prilikom učitavanja postavki" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Postoji sintaksna greška u regularnom izrazu" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nisam uspeo da promenim naziv datoteke %s u %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nisam uspeo da sačuvam pridruživanje datoteka programima." #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nisam uspeo da sačuvam datoteku" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nisam uspeo da postavim svojstva datoteci „%s“" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nisam uspeo da postavim datum i vreme datoteci „%s“" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nisam uspeo da postavim vlasnika/udruženje datoteci %s“" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Prihvatna memorija je premala" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Previše datoteka je izabrano za sažimanje" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Nije poznat oblik željene datoteke za sažimanje" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(kraj podizbornika)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Ime" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Naziv izbornika:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(razdvajač)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Datoteka %s je izmenjena. Da li da je sačuvam?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajta, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datoteka %s već postoji, da li da je prepišem?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Datotekom:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Nisam uspeo da pronađem datoteku „%s“." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "U pogonu je radnja nad datotekama" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Neke radnje nad datotekama nisu dovršene. Zatvaranje Double Commander-a može dovesti do gubljenja podataka." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Datoteka %s je samo za čitanje. Da li da je izbrišem?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Datoteka veličine „%s“ je prevelika za odredišni sistem datoteka." #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Datoteka %s postoji. Da li da je prepišem?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Da li da pratim simboličku vezu „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Dodaj %d označenih fascikli" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj označenu fasciklu: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj trenutnu fasciklu: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Naredba za izvršenje" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Postavke brzog spiska fascikli" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Da li ste sigurni da želite ukloniti sve unose iz brzog spiska fascikli? (Opoziv ove radnje je nemoguć!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ovo će izvršiti sledeću naredbu:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ovo je imenovano kao brza fascikla." #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Ovo će izmeniti radni okvir na sledeću putanju:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "I neradni okvir će se izmeniti na sledeću putanju:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Desila se greška prilikom smeštaja stavki u ostavu..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Desila se greška prilikom izvoza stavki..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Izvezi sve!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Izvezi brzi spisak fascikli - Izaberite stavke koje želite da izvezete" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Izvezi odabrane" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Uvezi sve!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Uvezi brzi spisak fascikli - Izaberite stavke koje želite da uvezete" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Uvezi izabrano" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Putanja" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Pronađite datoteku „.hotlist“ za uvoz" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Brzi spisak fascikli je izmenjen. Da li želite da ga sačuvate pre izlaska?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ime brze fascikle" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Broj novih stavki: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nema ničeg za izvoz!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Putanja brze fascikle" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ponovno dodaj izabranu fasciklu: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ponovo dodaj trenutnu fasciklu: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Unesite putanju i ime datoteke brzog spiska fascikli za oporavak" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Naredba:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(kraj podizbornika)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Naziv izbornika:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Ime:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(razdvajač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ime podizbornika" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cilj podizbornika" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Određuje da li želite da razvrstate radni okvir određenim redosledom posle izmene fascikle" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Određuje da li želite da ne razvrstavate radni okvir određenim redosledom posle izmene fascikle" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Neke radnje za izbor određene putanje odnosne, apsolutne, naročite fascikle Vindouza, itd." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Ukupan broj sačuvanih stavki: %d\n" "\n" "Ime ostave: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Ukupna broj izvezenih stavki: " #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Da li želite da izbrišete sve činioce podizbornika [%s]?\n" "Odgovorom NE ćete izbrisati samo ograničenje izbornika, ali će se zadržati činilac unutar podizbornika.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Unesite putanju i ime mesta za čuvanje datoteke brzog spiska fascikli" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Netačna je izlazna dužina datoteke : „%s“" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Molim, ubacite sledeći disk ili nešto slično.\n" "\n" "To će vam omogućiti da upišete sledeću datoteku:\n" "„%s“\n" "\n" "Broj bajta preostao za upis: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Greška u naredbenoj liniji" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neispravan naziv datoteke" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neispravan oblik u datoteci podešavanja" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neispravna putanja" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Putanja %s sadrži nedozvoljene znakove" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ovo nije ispravan priključak." #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ovaj priključak je napisan za Double Commander %s.%sNe može da radi sa Double Commander-om %s." #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neispravan navod" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neispravan izbor." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Učitavam spisak datoteka..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Umnoži datoteku %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Obriši datoteku %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Greška: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Raspakujem datoteku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podaci: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Napravi fasciklu %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Premesti datoteku %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Putanja do datoteke %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Ukloni fasciklu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Urađeno: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Napravi vezu %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Proveri ispravnost datoteke %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Izbriši potpuno datoteku %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Izbriši potpuno fasciklu %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Glavna lozinka" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Unesite ponovo glavnu lozinku:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nova datoteka" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Sledeći sadržaj će biti izdvojen" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nema datoteka" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nije izabrana nijedna datoteka." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nema dovoljno mesta u odredištu. Da li da nastavim?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nema dovoljno slobodnog mesta na odredišnom uređaju. Da li da pokušam ponovo?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Nisam uspeo da izbrišem datoteku %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nije primenjeno." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Lozinka:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Lozinke se razlikuju!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Unesite vašu lozinku:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Lozinka (vatreni zid):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Unesite ponovo lozinku za sistem provere:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "Dodaj %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "Podesi" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "Obriši %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Datoteka „%s“ već postoji. Da je prepišem?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Molim, pobrinite se da ova datoteka bude dostupna. Pokušati ponovo?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Preimenuj/premesti %d označenih datoteka/fascikli?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Preimenuj/premesti označeno „%s“?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Molim, ponovo pokrenite Double Commander-a da bi se primenile izmene" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Označeno: %s od %s, datoteka: %d od %d, fascikli: %d od %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Molim, odaberite samo datoteke za proveru zbira." #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Izaberite položaj sledećeg sadržaja/uređaja" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Postavi oznaku uređaju" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Naročite fascikle" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodajte putanju radnom okviru" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodajte putanju iz neradnog okvira" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Pregledaj i koristi odabranu putanju" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Koristi promenljive okruženja..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Idi na naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Idi na promenljivu okruženja..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Idi na drugu naročitu fasciklu Windows-a..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Idi na naročitu fasciklu Windows-a (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Učini putanju apsolutnom" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Učini odnosnom na naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Učini odnosnom na promenljivu okruženja..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Učini odnosnom na naročitu faciklu Windows-a (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Učini odnosnom na drugu naročitu fasciklu Windows-a..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Koristi naročitu putanju Double Commander-a..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Koristi drugu naročitu putanju Windows-a..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Koristi naročitu fasciklu Windows-a (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Preimenuj karticu" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novi naziv kartice:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Putanja do odredišta:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Previše datoteka je odabrano." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Neodređeno" #: ulng.rsmsgurl msgid "URL:" msgstr "Adresa:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Korisničko ime:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "korisničko ime (vatreni zid):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Oznaka uređaja:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Unesite veličinu uređaja:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Da li da potpuno izbrišem %d označenih datoteka/fascikli?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Da li da potpuno izbrišem odabrano „%s“?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez izmena;VELIKA SLOVA;mala slova;Prvi znak veliki;Prvi Znak Svake Reči Veliki;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Obustavljeno" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavam zbirnu proveru" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Računam zbirnu proveru u „%s“" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Računam zbirnu proveru „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Računam" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Računam „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Spajam" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spajam datoteke iz „%s“ na „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Umnožavam" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Umnožavam iz „%s“ u „%s“ " #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Umnožavam „%s“ na „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Stvaram fasciklu" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Stvaram fasciklu „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brišem" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Brišem iz „%s“" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Brišem „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvršavam" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Izvršavam „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Izdvajam" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Izdvajam iz „%s“ u „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Gotovo" #: ulng.rsoperlisting msgid "Listing" msgstr "Listam" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Listam „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Premeštam" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Premeštam iz „%s“ u „%s“" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Premeštam „%s“ na „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nije pokrenuto" #: ulng.rsoperpacking msgid "Packing" msgstr "Sažimam" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Sažimam iz „%s“ u „%s“" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Sažimam „%s“ u „%s“" #: ulng.rsoperpaused msgid "Paused" msgstr "Zastanak" #: ulng.rsoperpausing msgid "Pausing" msgstr "Zastanak" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Zakazano" #: ulng.rsoperrunning msgid "Running" msgstr "Pokrenuto" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Postavljam svojstva" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Postavljam svojstva u „%s“" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Postavljam svojstva datoteci „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Deljenje" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Delim „%s“ na „%s“" #: ulng.rsoperstarting msgid "Starting" msgstr "Pokrećem" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zaustavljeno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Prekidam" #: ulng.rsopertesting msgid "Testing" msgstr "Probanje" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Probam u „%s“" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Probam „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Proveravam zbir" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Proveravam zbir u „%s“" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Proveravam zbir „%s“" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čekam na pristup izvornoj datoteci" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čekam na odziv korisnika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Brisanje" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Brisanje u „%s“" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Brisanje „%s“" #: ulng.rsoperworking msgid "Working" msgstr "Rad" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Izbriši:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Izdvoji bez putanje:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Način rada raščlanjivanja oblika:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "LB:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Položaj LB:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Opseg traženja LB:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Odrednica" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Niska upita lozinke:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Obrazuj samoizdvajajuće skladište:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Proba:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Naziv vrste skladišta:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Vrednost" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Pridruži priključak „%s“ sa:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Prvi;poslednji;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Onemogući" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Omogući" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Unesite nastavak" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Pokazivač" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Oznaka" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Oznaka + pokazivač" #: ulng.rsoptexampletext msgid "Text" msgstr "Tekst" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Odvojen prozor;umanjen odvojen prozor;površ radnji" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "pokretna tačka;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Prečica %s za „cm_Delete“ će biti prijavljena, tako da može biti korišćena za vraćanje ove postavke." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Dodaj prečicu za %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj prečicu" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nisam uspeo da postavim prečicu" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Izmeni prečicu" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Naredba" #: ulng.rsopthotkeysdeletetrashcanoverrides #, fuzzy,badformat msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Prečica za „cm_Delete“ ima odrednicu koja zaobilazi ove postavke. Da li želite da izmenite odrednicu i koristite opšte postavke?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Prečici %s za „cm_Delete“ treba da se promeni odrednica d bi se slagala sa prečicom %s. Da li želite da je promenite?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Uredi prečicu za %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ispravi odrednicu" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Prečica" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Prečice" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ništa>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Odrednice" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Postavi prečicu za brisanje datoteke" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, fuzzy,badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Da bi ove postavke radile sa prečicom %s, prečica mora da bude dodeljena „cm_Delete“, ali je već dodeljena za %s. Da li želite da je promenite?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Prečica %s za „cm_Delete“ je niz za koji dugme Šift ne može biti dodeljeno. Najverovatnije neće raditi." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Prečica je u upotrebi" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Prečica %s već postoji." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Da li je dodeliti %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "koristi se za %s u %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "koristi za ovu naredbu sa drugačijim odrednicama" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Programi za sažimanje" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Samoosvežavanje" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Ponašanje" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Sažeto" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Boje" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Stupci" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Postavke" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Prilagođene boje" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Brzi spisak fascikli" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Prevuci i spusti" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Dugme za spisak uređaja" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Pridruživanje datoteka" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Radnje nad datotekama" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Površi datoteka" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Pregledi datoteka" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Vrste datoteka" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Kartice datoteka" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Slovni likovi" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Isticanje" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Prečice" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikonice" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Zanemari spisak" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasteri" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jezik" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Raspored" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Dnevnik" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Razno" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Miš" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Priključci" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Brza pretraga/uslov" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Traka alata" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Alatke" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Napomene" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ništa;Naredbena linija;Brza pretraga;Brzi uslov" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Levo dugme;Desno dugme;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na vrhu spiska datoteka:posle fascikli (ako se fascikle prikazuju pre datoteka); na određenom položaju;na dnu spiska datoteka" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Priključak %s je već dodeljen sledećim nastavcima:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Radni" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ime datoteke" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ime" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Prijavljen za" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Osetljivo;&Neosetljivo" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Datoteke;&Fascikle;Datoteke i fascikle" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skriva površ uslova kada on nije u žiži" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "neosetljivo na veličinu slova;prema postavkama lokaliteta (aAbBvV);prvo velika, pa mala slova (ABVabv)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "rasporedi po imenu i prikaži prvu;rasporedi kao datoteke i prikaži prvu;rasporedi kao datoteke" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Azbučno, vodeći računa o akcentima;Prirodan raspored: azbučno i brojevno" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Vrh;Dno" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Razdvajač&;&unutrašnja naredba;&Spoljna naredba;Izbornik&" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne menjaj položaj;koristi iste postavke za nove datoteke;na položaju po rasporedu" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Datoteka: %d, fascikli: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nisam uspeo da promenim prava pristupa za „%s“" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Nisam uspeo da promenim vlasnika „%s“" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datoteka" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Fascikla" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Imenovana cev" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Ne" #: ulng.rspropssocket msgid "Socket" msgstr "Utičnica" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Naročiti blok uređaj" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Naročiti znakovni uređaj" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Simbolička veza" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Nepoznata vrsta" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Da (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Izlazi pretrage" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<neimenovani obrazac>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izaberite fasciklu" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Prikaži pomoć za %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Sve" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Naredba" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Pregled" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtova" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajta" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajta" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajta" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajta" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Datoteka: %d, Fascikli: %d, Veličina: %s (%s bajta)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nisam uspeo da napravim ciljnu fasciklu." #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Oblik veličine datoteke nije ispravan." #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nisam uspeo da podelim datoteku." #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Broj delova je više od 100! Da li da nastavim?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Izaberite fasciklu:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Greška prilikom stvaranja simboličke veze." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Podrazumevani tekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Običan tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dan(i)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Sat(i)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(i)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mesec(i)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunda (e)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Nedelja(e)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Godina(e)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Razlika" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Uređivač" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Desila se greška pri otvaranju programa za razlike" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Desila se greška pri otvaranju urednika" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Desila se greška pri otvaranju terminala" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Desila se greška pri otvaranju preglednika" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Preglednik" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prijavite grešku bubolovcu sa opisom radnje koju ste primenjivali na sledeću datoteku: %s. Pritisnite %s za nastavak ili %s za izlazak iz programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Mreža" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Unutrašnji preglednik Double Commander-a." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Šifrovanje" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova veličina" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "Nisam uspeo da pronađem %s." #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.ja.po������������������������������������������������������������0000644�0001750�0000144�00001313317�12666540554�017215� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.8.0 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-02-15 21:55+0900\n" "Last-Translator: Kazunari Sekigawa <kazunari.sekigawa@gmail.com>\n" "Language-Team: Language <email@address>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 日本語\n" "Language: ja\n" "X-Generator: Poedit 1.8.7\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "比較しています… %d (ESCでキャンセル)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "右:%d 個のファイルを削除" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "ファイルが見つかりました: 合計%d項目  (同一:%d 異なる:%d 左側だけに存在:%d、右側だけに存在:%d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "左から右へ: %d 個のファイルをコピー、合計サイズ: %d バイト" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "左から右へ: %d 個のファイルをコピー、合計サイズ: %d バイト" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "全て" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "…" #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "カスタム列のビューを構成" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "背景:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "カーソルの境界" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "強調を許可" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "カスタム フォントと色を使用" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "テキストの色:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "フォント:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "サイズ:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "背景2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "ビュー の行数を構成:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "カーソルの色:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "カーソルの文字:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "マークした項目の色:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "名前:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "カラムを追加" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "カラムをカスタマイズ:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "プレビュー" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "右" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "右" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "テンプレートを選択…" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "空き領域を確認(&h)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "属性をコピー(&y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "所有権をコピー(&w)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "ファイル権限をコピー(&p)" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "日付/時間をコピー(&a)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "リンクを修正(&k)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "読み取り専用フラッグをドロップ(&g)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "空のディレクトリを除外(&x)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "リンクを辿る(&l)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "スペースを確保(&R)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "ファイルの時間、属性などを設定できない場合どうするか" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "テンプレートを使用" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "ディレクトリが存在する場合(&e)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "ファイルが存在する場合(&f)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "属性を設定できない場合(&n)" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<テンプレートが存在しない>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "クリップボードにコピー" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "ビルド" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "フリーPascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "ホームページ:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "リビジョン" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "バージョン" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "リセット(&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "属性を選択" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "アーカイブ(&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "圧縮(&m)" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "ディレクトリ(&D)" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "暗号化済み(&E)" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "非表示(&H)" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "読み取り専用(&n)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "スパース・ファイル(&p)" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUIDアクセス権" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "シンボリックリンク(&S)" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "システム(&y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "テンポラリ(&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 属性" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "一般的な属性" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "読み込み" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "テキストとして(&x)" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "チェックサムを計算…" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "作業完了後にチェックサムファイルを開く" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "ファイルごとに個別のチェックサム ファイルを作成(&r)" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "チェックサム ファイルを保存(&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "チェックサムを確認…" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "接続(&o)" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "接続マネージャ" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "接続先:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "キューに追加(&d)" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "オプション(&p)" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "これらのオプションを規定値として保存(&v)" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "ファイルのコピー" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新しいキュー" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "キュー1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "キュー2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "キュー3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "キュー4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "キュー5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "説明を保存" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "ファイル/フォルダのコメント" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "コメントを編集(&d):" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "エンコード(&E)" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "自動比較" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "バイナリ モード" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "キャンセル" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "ブロックを右にコピー" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "ブロックを右にコピー" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "ブロックを左にコピー" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "ブロックを左にコピー" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "やり直し" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "すべて選択(&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "元に戻す" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "最初の違い" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "最初の違い" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "大文字小文字を区別しない" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "空白を無視" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "スクロールし続ける" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "最後の違い" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "最後の違い" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "行の違い" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "次の違い" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "次の違い" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "左を開く…" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "右を開く…" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "背景を塗りつぶす" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "前の相違点" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "前の相違点" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "再読み込み(&R)" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "再読み込み" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "保存" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "保存" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "名前を付けて保存…" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "名前を付けて保存…" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "左を保存" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "左を保存" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "名前を付けて左を保存…" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "名前を付けて左を保存…" #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "右を保存" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "右を保存" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "名前を付けて右を保存…" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "名前を付けて右を保存…" #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "比較" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "エンコード" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "エンコード" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "ファイルを比較" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "左(&L)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "右(&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "アクション(&A)" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "オプション(&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "新しいショートカットをシーケンスに追加" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "シーケンスから最後のショートカットを削除" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "これらのコントロールの場合のみ" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "パラメータ(1行に1項目)(&P)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "ショートカット:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "本製品について" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "設定(&C)" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "設定" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "コピー" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "切り取り" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "削除" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "検索(&F)" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "検索" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "次を検索" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "次を検索" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "指定行へ移動…" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "貼り付け" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "やり直し" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "やり直し" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "置換(&R)" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "置換" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "すべて選択(&A)" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "すべて選択" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "元に戻す" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "元に戻す" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "閉じる" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "終了" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "新規(&N)" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "新規" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "開く(&O)" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "開く" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "保存" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "名前を付けて保存(&A)…" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "名前を付けて保存" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "全て保存(&v)" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "全て保存" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "エディタ" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "名前を付けて開く" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "名前を付けて保存" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "構文のハイライト表示" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "行の末尾" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大文字小文字を区別(&a)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "カレットの範囲から検索(&e)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "正規表現(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "選択した テキストのみ(&t)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "単語のみ(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "オプション" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "置換後の文字列(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "検索する文字列(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "方向" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "ファイルを解凍" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "ファイルに格納されている場合は、パス名を解凍(&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "各アーカイブを個別のサブディレクトリ (アーカイブの名前) に解凍(&s)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "既存のファイルを上書き(&v)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "保存・移動先ディレクトリ(&d):" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "ファイル マスクに一致するファイルを抽出(&E):" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "ファイル暗号化のためのパスワード(&P):" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "追加" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "追加(&A)" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "下へ(&D)" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "削除(&v)" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "削除(&m)" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "名前の変更(&e)" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "上へ(&U)" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "ファイルの関連付け" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "アクション" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "拡張子" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "ファイルの種類" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "アイコン" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "アクション:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "コマンド(&C):" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "編集" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "エディタで開く" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "ファイルのパス" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "フルパス" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "コマンドの出力を取得" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "開く" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "端末内で実行" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "仮想ファイルシステム(VFS)で開く" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "見る" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "ビューアで開く" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "待つ…" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "ファイル名:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "From :" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "一時ファイルを削除することができたときに閉じるをクリック" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "パネルに(&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "全てを見る(&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "現在の操作:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "From :" #: tfrmfileop.lblto.caption msgid "To:" msgstr "To:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "属性を設定(&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "選択したすべてのファイルに設定(&a)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "このファイルをスキップ(&p)" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUIDアクセス権" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "テキスト:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "含む" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "名前:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "パス:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "グループ(&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "最終アクセス:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "最終変更:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "最終ステータス変更:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進法:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "所有者(&w)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "読み込み" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "サイズ:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "シンボリックリンク先:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "タイプ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "追加(&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "ファイルに移動(&G)" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "最後の検索(&L)" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "新しい検索(&N)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "ロード(&o)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "セーブ(&a)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "開始ディレクトリにセーブ(&v)" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "保存された場合は、 テンプレートをロードするとき開始ディレクトリを復元します。特定のディレクトリに検索先を固定したい場合これを使います。" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "開始(&S)" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "キャンセル(&a)" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "テンプレートを使用" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "表示(&V)" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "リストボックスへ送付(&l)" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "ファイルの検索" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "大文字と小文字を区別(&i)" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "開始日付(&D):" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "終了日付(&e):" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "下限サイズ(&i):" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "上限サイズ(&z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "アーカイブ中を探索(&a)" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "ファイル内のテキストを検索(&t)" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "シンボリックリンクを辿る(&y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "指定したテキストを含まないファイルを検索(&O)" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "これより古くない(&o):" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "ファイル名の一部を検索(&h)" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "正規表現(&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "置き換え(&p)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "選択したディレクトリとファイル(&f)" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "正規表現(&e)" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "開始時間(&T):" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "終了時間(&m)" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "検索プラグインを使用(&U):" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "検索対象から除外すべきディレクトリ名を”;”で区切って入力" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "検索対象から除外すべきファイル名を”;”で区切って入力" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "ファイル名を”;”で区切って入力" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "ディレクトリ" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "ファイル" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "データを検索" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "属性(&b)" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "エンコーディング(&)g" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "除外するディレクトリ(&x)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "除外するファイル(&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "ファイルマスク(&F)" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "開始するディレクトリ(&d)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "検索するサブディレクトリ(&b):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "以前の検索(&P):" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "新しいタブで開く" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "リストから削除" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "見つかったすべての項目を表示" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "エディタに表示" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "ビューアで表示" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "上級" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "ロード/保存" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "プラグイン" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "結果" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "標準" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "検索(&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "検索" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "大文字と小文字を区別(&a)" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "ハードリンクを作成" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "リンクが指し示す目標(&D)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "リンク名(&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "全てをインポート!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "選択したものをインポート" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "インポートしたいエントリーを選択" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "サブメニューをクリックすると、全体メニューを選択します" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "複数のものを選択するには、Ctrlキーを押したままエントリーをクリックします" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "…" #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "リンカー" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "保存先…" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "アイテム" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "ファイル名(&F)" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下へ(&w)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下へ" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "削除(&R)" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "削除" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "上へ(&)U" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "上へ" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "本製品について(&A)" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "コマンドラインにファイル名を追加" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "コマンドラインにパスとファイル名を追加" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "コマンドラインにパスをコピー" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "概要表示" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "概要表示" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "占有スペースを計算(&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "ディレクトリを変更" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "ホームディレクトリに移動" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "親ディレクトリに移動" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "ルートディレクトリに移動" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "チェックサムを計算(&s)…" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "チェックサムを確認(&V)…" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "ログファイルをクリア" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "ログウィンドウをクリア" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "すべてのタブを閉じる(&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "重複したタブを閉じる" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "タブを閉じる(&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "次のコマンドライン" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "履歴中の次のコマンドにコマンドラインを移動" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "前のコマンドライン" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "履歴中の前のコマンドにコマンドラインを移動" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "詳細" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "詳細表示" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "内容で比較(&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "ディレクトリを比較" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "ディレクトリを比較" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」の構成" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "お気に入りタブの構成" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "フォルダー タブの構成" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "ツールバー…" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "コンテキストメニューを表示" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "コピー" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "全てのタブを反対側にコピー" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "全ての表示されているカラムをコピー(&c)" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "ファイル名(複数可)をフルパスでクリップボードにコピー(&P)" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "ファイル名(複数可)をクリップボードにコピー(&F)" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "確認を求めずにファイルをコピー" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "選択したファイル(複数可)のフルパスを末尾のディレクトリ・セパレータなしでコピー" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "選択したファイル(複数可)のフルパスをコピー" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "同じパネルにコピー" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "コピー" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "占有スペースを表示(&w)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "切り取り(&t)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "コマンドのパラメータを表示" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "ディレクトリ履歴" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "ディレクトリ・ホットリスト(&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "任意のコマンドを選択し、それを実行します" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "編集" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "コメントを編集(&m)…" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "新しいファイルを編集" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "ファイルリストのパスフィールドを編集" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "パネルの交換(&P)" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "ファイルを解凍・抽出(&E)…" #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "ファイルの関連づけの設定(&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "ファイルの結合(&b)…" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "ファイル属性の表示(&F)" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "ファイルの分割(&i)…" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "フラットビュー(&F)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "コマンドラインにフォーカス" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "リストの最初のファイルにカーソルを置く" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "リストの最後のファイルにカーソルを置く" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "ハードリンクを作成(&H)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "内容(&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "水平パネル モード(&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "キーボード(&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "左側パネルの簡易表示" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "左側パネルのカラム表示" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左 <= 右" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "左側パネルのフラット表示(&F)" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "左側のドライブリストを開く" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "左側パネルの表示を逆転(&v)" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "左側パネルを属性でソート(&A)" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "左側パネルを日付でソート(&D)" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "左側パネルを拡張子でソート(&E)" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "左側パネルをファイル名でソート(&N)" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "左側パネルをサイズでソート(&S)" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "左側パネルのサムネール表示" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "お気に入りのタブからタブをロード" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "クリップボードから選択した項目を開く(&b)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "ファイルから選択した項目を開く(&L)…" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "ファイルからタブを読み込む(&L)" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "ディレクトリを作成(&D)" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "同じ拡張子の項目を全て選択(&x)" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "選択を反転(&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "全て選択(&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "グループの選択を解除(&u)" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "グループを選択(&G)" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "全ての選択を解除(&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "ウィンドウを最小化" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "複数リネーム・ツール(&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "ネットワーク接続(&C)…" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "ネットワーク切断(&D)…" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "ネットワークへの(お急ぎ)接続(&Q)…" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "新しいタブ(&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "リストから次のお気に入りタブを読み込む" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "次のタブに切り替え(&t)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "開く" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "アーカイブファイルを試しで開く" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "メニューバーファイルを開く" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "新しいタブでフォルダを開く(&F)" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "仮想ファイルシステム(VFS)リストを開く(&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "オペレーション・ビューア(&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "オプション(&O)…" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "ファイルを圧縮(&P)…" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "分割位置を設定" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "貼り付け(&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "リストから前のお気に入りタブを読み込む" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "前のタブに切り替え(&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "クイックフィルタ…" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "クイック検索" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "クイック ビュー パネル(&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "リフレッシュ(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "最後に読み込まれたお気に入りタブを再読み込み" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "移動/変名" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "確認を求めることがなくファイルを移動/名前変更" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "名前の変更" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "タブの名前を変更(&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "最後に読み込まれたお気に入りタブに再保存" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "選択を元に戻す(&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "順序を逆転(&v)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "右側パネルの簡易表示" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "右側パネルのカラム表示" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "左 => 右" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "右側パネルのフラット表示(&F)" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "右側のドライブリストを開く" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "右側パネルの表示を逆転(&v)" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "右側パネルを属性でソート(&A)" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "右側パネルを日付でソート(&D)" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "右側パネルを拡張子でソート(&E)" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "右側パネルをファイル名でソート(&N)" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "右側パネルをサイズでソート(&S)" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "右側パネルのサムネール表示" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "端末をこのディレクトリで実行(&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "現在のタブを新しいお気に入りタブに保存" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "選択し項目を保存(&v)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "選択した項目をファイルに保存(&e)…" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "タブをファイルに保存(&S)" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "検索(&S)…" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "全てのタブをロックしディレクトリの変更は新しいタブで開く" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "全てのタブを通常状態にする" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "全てのタブをロック状態にする" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "全てのタブをロックするがディレクトリの移動を許可する" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "属性の変更(&A)…" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "ロック済み:ディレクトリの変更は新しいタブで(&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "通常(&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "ロック済み(&L)" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "ロック済み:ディレクトリの変更は同じタブで(&D)" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "開く" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "システムの関連付けを使用して開く" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "ボタンのメニューを表示" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "コマンドラインヒストリを表示" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "メニュー" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "システムファイルの表示/非表示(&H)" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "属性でソート(&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "日付でソート(&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "拡張子でソート(&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "名前でソート(&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "サイズでソート(&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "ドライブリストを開く" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "ファイル名を表示しないための「ファイル無視リスト」の有効化/無効化" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "シンボリックリンクを作成(&L)…" #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "ディレクトリの同期…" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "ターゲット <= ソース" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "アーカイブをテスト(&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "サムネイル" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "サムネイル表示" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "フルスクリーンモード・コンソールをトグル" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "左のウィンドウにカーソルの下のディレクトリを転送" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "右のウィンドウにカーソルの下のディレクトリを転送" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "ツリー表示パネル(&T)" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "パラメータに従ってソート" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "同じ拡張子の項目を全て選択解除(&t)" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "表示" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "訪問済みのパスの履歴をアクティブ・ビューとして表示" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "履歴内の次のエントリへ移動" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "履歴内の前のエントリへ移動" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "ログファイルの表示" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "ダブル・コマンダーのウェブサイトを訪問" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "完全削除(抹殺)" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "ディレクトリ・ホットリストとパラメータを使用" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "終了" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "ディレクトリの作成" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "端末" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "右側のパネルの現在のディレクトリを左側のパネルに表示" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "ホームディレクトリに移動" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "ルート ディレクトリに移動" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "親ディレクトリに移動" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "左側のパネルの現在のディレクトリを右側のパネルに表示" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "パス:" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "左右パネルサイズ比 20:80(&2)" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "左右パネルサイズ比 30:70(&3)" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "左右パネルサイズ比 40:60(&4)" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "左右パネルサイズ比 50:50(&5)" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "左右パネルサイズ比 60:40(&6)" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "左右パネルサイズ比 70:30(&7)" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "左右パネルサイズ比 80:20(&8)" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "コピー…" #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "リンクを作成…" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "クリア" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隠す" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "すべて選択" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移動…" #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "シンボリック リンクを作成…" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "タブのオプション" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "復元" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "開始" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "コマンド(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "構成設定(&o)" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "お気に入り" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "ファイル(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "マーク(&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "ネットワーク(&N)" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "表示(&S)" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "タブのオプション(&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "タブ(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "コピー" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "削除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "編集" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "OK(&O)" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "内部コマンドを選択" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "レガシーソート" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "レガシーソート" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "デフォルトではすべてのカテゴリを選択" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "選択:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "カテゴリー(&C):" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "コマンド名(&n):" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "フィルター(&F):" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "ヒント:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "ホットキー:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "カテゴリ" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "ヘルプ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "ヒント" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "ホットキー" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "定義(&D)…" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "既定の選択タイプを選定(&r)" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "ディレクトリを新規作成" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "新規ディレクトリの名前を入力(&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "…" #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "新しいサイズ" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "高さ:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPEGの圧縮品質" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "幅:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "高さ" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "幅" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "…" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "読み込み(&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "…" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "全てリセット(&a)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "複数リネーム" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "有効化(&b)" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "正規表現(&x)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "置き換え(&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] 拡張子" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "カウンタ" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "検索と置換" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "結果をログに記録" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "マスク" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "プリセット" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "拡張子(&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "検索(&F)…" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "間隔(&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "ファイル名(&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "置き換え(&p)…" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "開始番号(&t)" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "幅(&W)" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] カウンタ" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 日" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 日(2桁)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 曜日(短縮形 例:”mon”)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 曜日(完全形 例:”monday”)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 位置xの文字" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 位置xからyの文字" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 時間" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 時間(2桁)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 分" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 分(2桁)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 月" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 月(2桁)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 月の名前(短縮形 例:”jan”)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 月の名前(完全形 例:”january”)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] ファイル名" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] ファイル名の位置xの文字" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] ファイル名の位置xからyの文字" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "時間…" #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "拡張子…" #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名前…" #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "プラグイン" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 秒" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 秒(2桁)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 年(2桁)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 年(4桁)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "古いファイル名" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "新しいファイル名" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "ファイルのパス" #: tfrmopenwith.caption msgid "Choose an application" msgstr "アプリケーションを選択" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "カスタム コマンド" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "関連付けを保存" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "選択したアプリケーションを既定のアクションとして設定" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "開くべきファイルの種類: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "複数のファイル名" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "複数の URL" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "1 つのファイル名" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "1つののURI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "適用(&A)" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "オプション" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "サブページの 1 つを選択してください。このページには、何も含まれていません。" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "自動構成(&u)" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "削除(&e)" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "名前の変更(&R)" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "デバッグモード(&b)" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "有効(&n)" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "コンソール出力を表示(&h)" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "オプション" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "追加(&i):" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "拡張子(&x):" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "抽出(&t):" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "リスト(&L):" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "リスト表示 終了(オプション)(&f):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "リスト表示 フォーマット(&m):" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "リスト表示 開始(オプション)(&g):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "アーカイブ作成ツール(&h):" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "説明(&s):" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "追加" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "一般" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "サイズ、日付、属性が変更されたとき(&s)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "以下のパスとそのサブディレクトリについて(&p):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "ファイルが新規作成、削除、改名されたとき(&f)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "アプリケーションがバックグラウンドで動作しているとき(&b)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "自動更新を無効化" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "ファイル リストを更新" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "常にトレイアイコンを表示(&w)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "アンマウントされているデバイスを自動的に非表示(&h)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "最小化時にアイコンをシステムトレイに移動(&v)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "同時に起動できるダブル・コマンダーの数を1つに限定(&l)" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "“;”で区切ることで、複数のドライブやマウントポイントを入力可能" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "ドライブのブラックリスト(&b)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "カラムサイズ" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "ファイル拡張子を表示" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "整列させて(Tabで)(&g)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "ファイル名の直後に(&d)" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "自動" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "カラム数を固定" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "カラムの幅を固定" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "カラムの幅で文字列を切断(&t)" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "水平ライン(&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "垂直ライン(&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "カラムを自動的に埋める(&u)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "グリッドを表示" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "カラムのサイズを自動調整" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "カラムのサイズを自動調整(&z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "コマンドラインの履歴(&m)" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "ディレクトリ履歴(&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "ファイルマスクの履歴(&F)" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "設定を保存(&v)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "検索と置換の履歴(&h)" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "設定ファイルの保存場所" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "終了時に保存" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "←左側ツリー中での構成設定要素の並べ替え順序" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "コマンドラインで設定" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "プログラムディレクトリ (ポータブル版)(&r)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "ユーザのホームディレクトリ(&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "全て" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "すべてのカラムに変更を適用" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "…" #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "デフォルトの設定に進みます" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "新規" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "次へ" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "前へ" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "右" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "デフォルトにリセット" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "名前を付けて保存" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "保存" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "強調を許可" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "何かを変更するにはクリックすると、すべてのカラムを変更" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "一般" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "カーソルの境界" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "枠型カーソルを使用" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "非アクティブの選択色を使用" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "反転選択を使用" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "このビューにはカスタム・フォントと色を使用" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "背景:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "ファイルシステムのカラムを構成(&f):" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[現在のカラム名]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "カーソルの色:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "カーソルの文字:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "フォント:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "サイズ:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "テキストの色:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "非アクティブカーソルの色:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非アクティブマークの色" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "マークした項目の色:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "下に示すのはプレビューです。カーソルを動かしファイルを選択すれば、様々な設定のルック&フィールが直ちに分かります。" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "カラムの設定:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "カラムを追加" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "比較した後のフレーム パネルの位置:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "追加…" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "バックアップ…" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "削除…" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "ヘルプ" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "挿入…" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgctxt "tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption" msgid "Miscellaneous..." msgstr "その他…" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの関数" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "適切なターゲットを選択するいくつかの関数" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "ソート…" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "ディレクトを追加する場合、ターゲットも追加" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "ツリーを常に展開" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "有効な環境変数のみを表示" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "ポップアップで表示 [パスも]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "名前、a ~ z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "名前、a ~ z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "「ディレクトリ・ホットリスト」(ドラッグ&ドロップで並べ替え)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "その他のオプション" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "名前:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "パス:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "ターゲット:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "アクティブなフレームのディレクトリ" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "アクティブなフレームとアクティブでないフレームのディレクトリ" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "コマンド" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "コマンドを追加" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "選択した項目のコピー" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "選択した項目のコピーを追加" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "セパレータ" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "セパレータを追加" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "サブメニュー" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "サブメニューを追加" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "参照しようとしているディレクトリ" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "すべて折畳む" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "…選択されている要素の現在のレベルのみ" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "現在選択されている または アクティブフレームのアクティブなディレクトリ" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "切り取り" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "すべてを削除!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "サブメニューとすべての要素" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "サブメニューのみ(要素は維持)" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "選択した項目" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "選択した項目の削除" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "実際に存在する全てのホルダーのパスをスキャンして認証" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "実際に存在する全てのホルダーのパスとターゲットをスキャンして認証" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "ディレクトリ ホットリストのファイル (.hotlist) に" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TC の”wincmd.ini”に (既存の維持)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TC の”wincmd.ini”に (既存の維持)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "TC関連情報の構成に移動" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "TC関連情報の構成に移動" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "ホットディレクトリのテストメニュー" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "ディレクトリ ホットリストのファイル (.hotlist) から" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "TC の”wincmd.ini”から" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "全てのブランチを開く" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "貼り付け" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」のバックアップを復元" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "現在の「ディレクトリ・ホットリスト」のバックアップを作成" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "検索と置換…" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "パス…" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "ターゲットパス…" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "パスとターゲットパス…" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "…全て、A~Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "…項目の1グループのみ" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "項目の1グループのみをソート" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "…選択されたサブメニューの内容(サブレベルではない)" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "…選択されたサブメニューと全てのサブレベルの内容" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "結果のメニューをテスト" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "指定するディレクトリ" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "指定するディレクトリを追加" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "指定するディレクトリを挿入" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "メインパネルからの追加:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "全てのサポートされているフォーマットから、毎回使用するものを尋ねる" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Unicode テキストを保存するとき UTF8 形式で保存(さもなくば、UTF16形式)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "テキストをドロップするときファイル名を自動的に生成 (さもなくば、ユーザーに操作を要求)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "ドロップした後、確認ダイアログボックスを表示(&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "パネルにテキストをドラッグ&&ドロップしたとき:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "リストの最初に最も必要な書式を配置 (ドラッグ&&ドロップを利用して)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(もし最も必要なものがなければ、2番目を選択。以下同様)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(ソースアプリケーションでは動作しない可能性がある。もし問題がある場合はチェックを外してみる。)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "ファイルシステムを表示" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "空きスペースを表示(&e)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "ラベルを表示(&l)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "ドライブリスト" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "キャレットが行末を過ぎました" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "特殊文字を表示" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "内部エディターのオプション" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "背景(&k)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "背景" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "リセット" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "保存" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "要素の属性" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "前景(&r)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "前景(&r)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "テキスト マーク(&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "グローバル設定の使用(と編集)(&g)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "ローカルスキーム設定の使用(&l)" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "太字(&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "イタリック(&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "取り消し線(&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "下線(&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "反転(&v)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "オフ(&f)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "オン(&n)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "追加…" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "削除…" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "インポート / エクスポート" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "挿入…" #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "ソート…" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "なし" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "ツリーを常に展開" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "いいえ" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "左" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "右" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "お気に入りタブ リスト (ドラッグ&ドロップで並び替え)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "その他のオプション" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "選択したエントリーに対して何をどこに復元するか:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "キープする既存のタブ:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "ディレクトリの訪問履歴を保存:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "左で保存したタブの復元先:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "右で保存したタブの復元先:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "セパレータ" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "セパレータを追加" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "サブメニュー" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "サブメニューを追加" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "すべて折畳む" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "…選択されている要素の現在のレベルのみ" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "切り取り" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "すべてを削除!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "サブメニューとすべての要素" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "サブメニューのみ(要素は維持)" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "選択した項目" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "選択した項目の削除" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "選択した項目をレガシーな.tabファイル(複数可)にエクスポート" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "お気に入りのタブ テストメニュー" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "デフォルトの設定に従ってレガシー.tabファイル(複数可)をインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "レガシー.tabファイル(複数可)を選択した位置にインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "レガシー.tabファイル(複数可)を選択した位置にインポート" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "レガシー.tabファイル(複数可)をサブメニューの選択した位置にインポート" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "セパレーターを挿入" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "サブメニューを挿入" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "全てのブランチを開く" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "貼り付け" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "名前の変更" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "…全て、A~Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "…項目の1グループのみ" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "項目の1グループのみをソート" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "…選択されたサブメニューの内容(サブレベルではない)" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "…選択されたサブメニューと全てのサブレベルの内容" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "結果のメニューをテスト" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "追加" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "追加(&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "複製" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "下へ(&D)" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "編集" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "挿入" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "挿入" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "削除(&v)" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "削除(&m)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "名前の変更(&e)" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "上へ(&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "コマンドの開始パス(この文字列は引用符で囲まない)" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "アクションの名称(これはシステムに渡されるものではなく、あなたのための記憶を助けるためのものです)" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "コマンドに渡すパラメータ(スペースを含む長いファイル名は引用符で囲むこと)" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "実行するコマンド(スペースを含む長いファイル名は引用符で囲むこと)" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "アクションの説明:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "アクション" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "拡張子" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "ドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "ファイルの種類" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "アイコン" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "アクションはドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "拡張子はドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "ファイルの種類はドラッグ&ドロップでソート可能" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "アクションの名称:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "コマンド(&C):" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "パラメータ(&s):" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "開始パス:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始パス(&h)" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "カスタム…" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "カスタム" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "編集" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "エディタで開く" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "編集…" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "コマンドの出力を取得" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "内部エディタで開く" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "内部ビューアで開く" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "開く" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "開く…" #: tfrmoptionsfileassoc.miseparator.caption msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "端末内で実行" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "見る" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "ビューアで開く" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "表示する…" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "クリックしてアイコンを変更!" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "シェル経由で実行" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "拡張コンテキストメニュー" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "ファイルの関連付けにアクセスする場合、もしどの設定済みのファイルタイプに属していないなら、現在選択されているファイルを追加することを提案する" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "ファイルの関連付けの設定" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "選択した項目をファイルの関連づけに追加することを提案する(未登録の場合)" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "ファイルの関連付けにアクセスする場合、もしどの設定済みのファイルタイプに属していないなら、現在選択されているファイルを追加することを提案する" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "端末内で実行した後クローズ" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "端末内で実行した後開いたままにする" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "拡張オプション項目:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "確認ウィンドウの表示:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "「コピー」操作(&y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "「削除」操作(&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "リサイクル箱へ削除(Shiftキーでこの設定を戻す)(&t)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "「ゴミ箱へ削除」の操作(&e)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "読み取り専用フラグをドロップ(&r)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "「移動」操作(&M)" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "ファイル名の一部を検索(&S)" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "ファイル/フォルダのコメントを処理(&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "名前を変更するとき、拡張子を除いてファイル名を選択(&f)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "コピー/移動ダイアログボックスにタブ選定パネルを表示(&w)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "ファイル操作エラーはスキップして、そのエラーをログウィンドウに書く(&k)" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "ファイル中の文字列検索" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "操作を実行中" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "ファイル検索" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "ユーザインタフェース" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "ファイル操作用のバッファー サイズ(KB単位)(&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "ハッシュ値の計算のためのバッファサイズ(KB単位)(&h):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "操作の進行状況を最初ここに表示(&i):" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "デフォルトの検索テンプレート:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "重複した名前を自動的に変更するスタイル:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "完全削除(抹殺)の実行回数(&N):" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "ファイル中のテキスト検索にメモリマッピングを使って実行(&x)" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "ファイル中のテキスト検索をストリームを使って実行(&U)" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "DCのデフォルトにリセット" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "強調を許可" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "枠型カーソル(&F)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "グラデーション インジケータを使用(&G)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "非アクティブの選択色を使用" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "反転選択を使用(&s)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "カーソルの境界" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "ドライブの空き容量インジケータ" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "背景(&k)" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "背景2(&r):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "カーソルの色(&u):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "カーソルのテキスト(&x):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "非アクティブカーソルの色:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "非アクティブマークの色:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "アクティブでないパネルの明るさのレベル(&B)" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "背景色のインジケータ(&d):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "前景色のインジケータ(&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "マーカーの色(&M):" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "プレビューが下に表示されます。カーソルを動かしたりファイルを選択したりすると、実際のルック&フィールが直ちに分かります。" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "テキストの色(&e):" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "タブが有効になるまではファイルリストをロードしない(&n)" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "ディレクトリ名を[角かっこ]で囲んで表示(&n)" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "新規ファイルと更新されたファイルをハイライト(&g)" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "名前を2回クリックしたら(ダブルクリックではない)、その場所での名前の編集を可能にする(&r)" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "別のスレッドでファイルリストをロード(&f)" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "ファイルリストの後でアイコンをロード(&t)" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "システムファイルと隠しファイルを表示(&y)" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "<SPACE BAR>でファイルを検索するとき下のファイルに移動(<INSERT>と同様)(&W)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "フォーマット中" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "ソート中" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "大文字と小文字を区別(&e)" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "正しくないフォーマット" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "日付と時刻のフォーマット(&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "ファイルサイズのフォーマット(&z):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "新しいファイルの挿入(&I)" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "ディレクトリをソート中(&r):" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "ソート方法(&S):" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "更新されたファイルを移動(&M):" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "削除(&e)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "テンプレート…" #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "ファイルの種類の色(ドラッグ&&ドロップでソート)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "カテゴリーの属性(&t):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "カテゴリーの色(&l):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "カテゴリーのマスク(&m):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "カテゴリーの名前(&n):" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "…" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "コンソール・フォント(&C)" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "エディタのフォント(&E)" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "ログのフォント(&L)" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "メインフォント(&f)" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "ブックビューアのフォント(&B)" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "ビューアのフォント(&V)" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "ホットキーを追加(&h)" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "ホットキーを削除(&D)" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "ホットキーを編集(&E)" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "フィルタ(&F)" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "カテゴリー(&a):" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "コマンド(&m):" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "ショートカットファイル(&S):" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "コマンド" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "ホットキー" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "説明" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "ホットキー" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "パラメータ" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "コントロール" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "以下のパスとそのサブディレクトリに対して(&p):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "メニューにアクションのアイコンを表示(&m)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "オーバーレイアイコンの表示(例:リンクに対して)(&v)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "特別なアイコンを無効化" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "メニューでアイコンの表示" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "アイコンサイズ" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "ファイル名の左にアイコンを表示" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "全て(&l)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "全ての関連づけられた項目と実行/リンク(動作が遅くなります)(&E)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "アイコンを表示しない(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "標準のアイコンのみ(&s)" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "選択した名前を追加(&d)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "選択した名前をフルパスで追加(&f)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "以下のファイルとフォルダを無視(表示しない)(&I):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "指定先に保存(&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "左右の矢印キーでディレクトリの変更(Lynxのような動き)(&f)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "入力中" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+文字(&e)" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+文字(&t)" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "文字(&L)" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "平らなボタン(&F)" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "平らなインターフェース(&n)" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "平らなボタン(&u)" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "ドライブラベルの上に空き領域インジケータを表示(&e)" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "ログウィンドウを表示" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "バックグランド動作のパネルを表示" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "メニューバーに共通の進捗状況を表示" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "コマンドラインを表示(&i)" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "現在のディレクトリを表示(&y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "ドライブボタンを表示(&d)" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "空き領域のラベルを表示(&p)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "ドライブリストのボタンを表示(&t)" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "機能キーボタンを表示(&k)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "メインメニューを表示(&m)" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "ボタンバーを表示(&b)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "空き領域のラベルを短く表示(&l)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "ステータスバーの表示(&s)" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "タブストップのヘッダを表示(&h)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "フォルダのタブを表示(&w)" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "端末のウィンドウを表示(&r)" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "ドライブボタンバーを2つ表示(等幅でファイルウィンドウの上)(&x)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "画面レイアウト" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "ログファイルの内容を表示" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "ログファイル名に日付を含める" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "圧縮/展開(&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "外部コマンドラインの実行" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "リンク/シンボリックリンクのコピー/移動/作成(&y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "ディレクトリの作成/削除(&t)" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "エラーメッセージをログファイルに記録(&e)" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "ログファイルを作成(&r):" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "情報メッセージをログファイルに記録(&i)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "起動/シャットダウン" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "成功した操作をログファイルに記録(&s)" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "ファイルシステムのプラグイン(&F)" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "ファイル操作のログファイル" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "操作をログファイルに記録" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "操作の状態" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "存在しなくなったファイルのサムネールを削除(&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "ログファイルの内容を表示" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "ドライブを変更する場合は必ずドライブのルートに移動(&g)" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "ワーニングメッセージを表示(”OK”ボタンだけの提供)(&w)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "キャッシュにあるサムネールを保存(&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "サムネイル" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "TCのエクスポート/インポートについて:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "設定ファイル:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TCの実行ファイル:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "ツールバー出力パス:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "ピクセル" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "サムネイルサイズ(&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "マウスによる選択(&S)" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "スクロール中" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "選択" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "モード(&M):" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "行ごと(&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "カーソルを動かしながら行ごと(&w)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "1ページごと(&P)" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "構成(&f)" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "有効(&n)" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "微調整(&T)" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "検索プラグインは、代替検索アルゴリズムや外部ツール(例えば”locate”等)の利用を可能にします(&h)。" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "圧縮プラグインはアーカイブの操作に使われます(&e)。" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "コンテンツ・プラグインは、ファイルリストにおいて、MP3のタグのようなファイルの拡張情報や画像属性の表示を可能にします。またこれは、検索と複数リネームツールで使用します(&g)。" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "ファイルシステム・プラグインは、OSによってアクセスを禁止されているディスクやPalm/PocketPCのような外部デバイスへのアクセスを可能にします(&l)。" #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "ビューア・プラグインは、ビューアの中で、画像、スプレッドシート、データベース等のフォーマットを表示します(&w)。(F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "有効" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "プラグイン" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "登録済み" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "検索プラグイン(.DSX)(&S)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "圧縮プラグイン(&k)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "コンテンツ・プラグイン(.WDX)(&u)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "ファイルシステム・プラグイン(.WFX)(&i)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "ビューア・プラグイン(.WLX)(&V)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "開始文字(名前は最初に入力した文字で始まらなくてはなりません)(&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "終了文字(入力したドット.の直前の文字に一致しなくてはなりません)(&d)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "オプション" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "完全な名前の一致" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "検索ケース" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "これらの項目を検索" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "タブのロックを解除するとき変更した名前をそのままにする" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "タブの1つをクリックしたらターゲットパネルをアクティブにする(&p)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "タブが1つしかなくてもタブヘッダを表示する(&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "アプリケーションを閉じる際、重複したタブを閉じる" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "全てのタブを閉じてもよいか確認(&f)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "ロックしたタブを閉じる際、確認する" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "タブに表示するタイトルをこの長さに制限する(&L):" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "ロックされたタブにはアスタリスク(*)を表示(&w)" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "タブを複数行に並べる(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+UP 新しいタブをフォアグランドに開く(&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "新しいタブを現在のタブの近くに開く(&n)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "可能であれば既存のタブを再利用する" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "タブの「閉じる」ボタンを表示(&b)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "タブのタイトルにドライブ文字を常に表示" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "タブヘッダのフォルダ" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "文字" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "タブをダブルクリックした際実行するアクション:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "タブの位置(&b)" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "なし" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "いいえ" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "左" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "右" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "再保存の後お気に入りのタブの設定に移動" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "新しい設定を保存した後お気に入りのタブの設定に移動" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "お気に入りのタブの追加オプションを有効にします(復元の際ターゲットにする側の選定等)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "新しいお気に入りのタブを保存する際のデフォルトの追加設定:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "フォルダータブヘッダーの追加" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "タブを復元する際維持する既存のタブ:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "左側で保存したタブの復元先:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "右側で保存したタブの復元先:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "お気に入りのタブのディレクトリ履歴を保存し続ける:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "新しいお気に入りタブを保存する際のメニュー中のデフォルトの位置:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "端末を実行するだけのコマンド:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "端末でコマンドを実行し、実行後は端末を閉じるためのコマンド:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "端末でコマンドを実行し、実行後も端末を開いたままにするコマンド:" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "パラメータ:" # “releft” looks wrong. # reflect? #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "端末中で実行されるコマンドを反映するため、通常 {command} がこの位置になくてはなりません" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "パラメータ:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "端末中で実行されるコマンドを反映するため、通常 {command} がこの位置になくてはなりません" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "コマンド:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "パラメータ:" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "端末中で実行されるコマンドを反映するため、通常 {command} がこの位置になくてはなりません" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "ボタンを複製(&l)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "削除(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "ホットキーを編集(&k)" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "新しいボタンを挿入(&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "選択" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "その他…" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "ホットキーを削除(&y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "提案" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "ボタンの種類、コマンド、パラメータに基づいてDCにツールチップを提案させる" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平らなボタン(&F)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "コマンドのエラーを報告" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "コマンドのパラメータを1行に1項目入力。F1キーを押してパラメータについてのヘルプを参照。" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "外観" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "バーのサイズ(&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "コマンド(&d):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "パラメータ(&s):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "ヘルプ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "ホットキー" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "アイコン(&n):" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "アイコンのサイズ(&s)" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "コマンド(&m)" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "パラメータ(&P)" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始パス(&h)" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "ツールのヒント(&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "全てのDCコマンドを含むツールバーを追加する" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "外部コマンドを" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "内部コマンドを" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "区切りを" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "サブツールバーを" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "バックアップ…" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "エクスポート…" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "現在のツールバー" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "TCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "TCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "トップツールバー" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "ツールバーのバックアップを保存" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)へ" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "TCの.BARファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "TCの.BARファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは維持)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "TCの\"wincmd.ini\"ファイルへ(既存のものは削除)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "インポート…" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "ツールバーのバックアップから復元" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "ツールバーファイル (.toolbar)から" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "TCの.BARファイル(1つ)から" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "TC の”wincmd.ini”から" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "現在のツールバーに追加" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "現在のツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "トップツールバーに新しいツールバーを追加" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "トップツールバーに追加" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "トップツールバーを入れ替え" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "検索と置換…" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "上にある全ての項目の全てで…" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "全てのコマンドで…" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "全てのアイコン名で…" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "全てのパラメータで…" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "全ての開始パスで…" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "現在の選択の直後に" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "最初の要素として" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "最後の要素として" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "現在の選択の直前に" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "ボタンタイプ" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "プログラムの実行後も端末のウィンドウを開いたままにする(&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "端末内で実行(&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "使用する外部プログラム(&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "追加のパラメータ(&d)" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "実行するプログラムへのパス(&P)" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "追加(&d)" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "適用(&p)" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "削除(&e)" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "テンプレート…" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "ファイルパネル内のファイルに対してツールチップを表示します(&S)" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "ファイルタイプによるカスタムフィールド" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "カテゴリーのヒント(&h):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "カテゴリーのマスク(&m):" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "カテゴリーの名前(&n):" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "ブックモードで表示" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "例" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "ブックビューアの背景色(&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "ブックビューアのフォントの色(&F)" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "ブックビューアのカラム数(&N)" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "構成(&f)" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "ファイルを圧縮" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "アーカイブを個別に作成(選択されたファイル/ディレクトリに1個ずつ)(&r)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "自己解凍式のアーカイブを作成(&x)" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "暗号化(&y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "アーカイブに移動(&v)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "複数ディスクのアーカイブ(&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "最初にTARアーカイブに入れる(&u)" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "パス名も含める(再帰的)(&p)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "ファイル(複数可)をこのファイルに詰める:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "圧縮ツール" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "全てを解凍して実行(&a)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解凍して実行(&U)" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "圧縮ファイルの属性" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "属性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "圧縮比:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日付:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "圧縮方法:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "元のサイズ:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "ファイル:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "圧縮後のサイズ:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "圧縮ツール:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "時間:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "フィルターパネルを閉じる" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "検索する/フィルタに使う文字列を入力" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "大文字と小文字を区別" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "ディレクトリ" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "ファイル" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "最初にマッチ" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "最後にマッチ" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "フィルタ" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "検索とフィルターを入れ替え" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "ルールの追加(&M)" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "ルールの削減(&e)" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "コンテンツプラグインを使用。組み合わせ(&c):" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "プラグイン" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "フィールド" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "演算子" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "値" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "AND (完全一致)(&A)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "OR (部分一致)(&O)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "閉じる(&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "ヘルプ(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "挿入する文字を選択(&S):" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "属性の変更" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "スティッキー" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "アーカイブ" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "作成済み:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "非表示" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "アクセス済み:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "修正済み:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "読み取り専用" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "サブディレクトリを含めて" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "システム" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "タイムスタンプの属性" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "ビット:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "グループ" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(値に変更がない場合、フィールドは灰色で表示)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "その他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "テキスト" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "実行権" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(値に変更がない場合、フィールドは灰色で表示)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進数:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "読み取り" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "書き込み" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "…" #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "適切なパスを選択するいくつかの機能" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "ファイルの分割" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "CRC32の検証ファイルが必要" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "ファイル名" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "分割のサイズと個数" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "格納先ディレクトリ(&t)" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "元ファイル(&s)" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "分割数(&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "バイト(&B)" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "ギガバイト(&G)" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "キロバイト(&K)" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "メガバイト(&M)" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "ビルド" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "フリーPascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "オペレーティングシステム" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "プラットフォーム" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "リビジョン" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "ダブル・コマンダー" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "バージョン" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "ウィジエットバージョン" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "シンボリックリンクを作成" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "リンクが指し示す目標(&D)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "リンク名(&L)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "閉じる" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "同期" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "ディレクトリの同期" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "非対称" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "内容で" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "日付を無視" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "選択項目のみ" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "サブディレクトリ" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "表示:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "名前" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "サイズ" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "日付" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "日付" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "サイズ" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "名前" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(メインウィンドウで)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "左の項目を表示" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "右の項目を表示" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "重複" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "単独" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "\"比較\"ボタンを押して開始" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "同期" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "上書きを確認" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "新規追加(&d)" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "キャンセル(&C)" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "変更(&h)" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "デフォルト(&f)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK(&O)" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "削除(&R)" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "微調整用プラグイン" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "内容からアーカイブの種類を検出(&t)" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "ファイルの削除が可能(&l)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "暗号化をサポート(&n)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "通常のファイルとして表示(圧縮ツールのアイコンを隠す)(&w)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "メモリー中での圧縮をサポート(&k)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "存在するアーカイブの修正が可能(&m)" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "アーカイブは複数のファイルを含むことが可能(&A)" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "新しいアーカイブの作成が可能(&v)" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "オプションダイアログをサポート(&u)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "アーカイブ中の文字列検索を許可(&g)" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "説明(&D):" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "検出する文字列(&e):" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "拡張子(&E)" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "フラグ:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "名前(&N):" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "プラグイン(&P):" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "プラグイン(&P):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "ビューアについて…" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "「この製品について」メッセージを表示" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "ファイルをコピー" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "ファイルをコピー" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "ファイルを削除" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "ファイルを削除" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "次(&N)" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "次のファイルをロード" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "前(&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "前のファイルをロード" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "ミラーリング" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "ミラーリング" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "ファイルを移動" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "ファイルを移動" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "再ロード" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "現在のファイルを再ロード" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "180°回転" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "180°回転" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "270°回転" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "270°回転" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "90°回転" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "90°回転" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "名前を付けて保存…" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "名前を付けてファイルを保存…" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "引き延ばし" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "画像を引き伸ばし" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "コピー" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "コピー" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "トリミングする" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "削除" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "削除" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "全画面" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "強調表示" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "ミラーリング" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "移動" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "移動" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "塗りつぶし" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "赤目補正" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "サイズ変更" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "元に戻す" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "ズームイン" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "ズームアウト" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "ビューア" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "スライドショー" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "ペン" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "強調表示" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "塗りつぶし" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "スライドショー" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "表示" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "本製品について" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "ゴミ箱として表示(&B)" #: tfrmviewer.micenter.caption msgid "Center" msgstr "センター" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "クリップボードにコピー" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編集(&E)" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "エンコード(&c)" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "終了(&x)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "ファイル(&F)" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "全画面" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "グラフィックス" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "16進数で表示(&H)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "画像(&I)" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Bookとして表示(&o)" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "ミラーリング" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "プラグイン" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "プレビュー" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "印刷…" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "回転" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "保存" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "名前を付けて保存…" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "スクリーンショット" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "検索" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "次を検索" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "前を検索" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "すべて選択" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "引き延ばし" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "引き延ばしだけ" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "テキストとして表示(&T)" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "表示(&V)" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "ラップテキストとして表示(&W)" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "ズームイン" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "ズームアウト" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "クリップボードにコピー" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "すべて選択" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "開始(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "停止(&t)" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "ファイル操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "常に前面に表示" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "キュー間での操作を移動するためには「ドラッグ&&ドロップ 」を使用してください" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "キャンセル" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "新しいキュー" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "分離されたウィンドウに表示" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "最初の項目をキューに入れる" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "最後の項目をキューに入れる" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "キュー" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "キューが不足" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "キュー1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "キュー2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "キュー3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "キュー4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "キュー5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "分離されたウィンドウに表示" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "全て一時停止(&P)" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "バックグラウンドで動作(別の接続)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "ファイルが存在する場合" # 元の英語の品質悪い。 #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "このファイル(ファイルの最終的な組み合わせの検証に役立ちます)が見つかりません。\n" "%s\n" "\n" "これファイルが利用可能になり、準備ができたら”OK”を押す。\n" "そうでない場合は、”キャンセル”を押して継続する。\n" "
\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "クイックフィルタをキャンセル" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "現在の操作をキャンセル" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "ドロップされたテキストについて、拡張子付きでファイル名を入力してください" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "インポートするテキスト形式" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "破損:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "一般:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "紛失:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "読み取りエラー:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "成功:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "チェックサムを入力し、アルゴリズムを選択:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "チェックサムを確認" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "合計:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "クリップボードには、有効なツールバーのデータが含まれていません。" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "全て;アクティブパネル;左パネル;右パネル;ファイル操作;設定;ネットワーク;その他;パラレル・ポート;印刷;マーク;セキュリティ;クリップボード;FTP;ナビゲーション;ヘルプ;ウィンドウ;コマンドライン;ツール;ユーザ;タブ;ソーティング;ログ" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "レガシーな順のソート;A-Z順のソート" #: ulng.rscolattr msgid "Attr" msgstr "属性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日付" #: ulng.rscolext msgid "Ext" msgstr "拡張子" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名前" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "サイズ" #: ulng.rsconfcolalign msgid "Align" msgstr "整列" #: ulng.rsconfcolcaption msgid "Caption" msgstr "キャプション" #: ulng.rsconfcolconfig msgid "Config" msgstr "設定" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "削除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "フィールドの内容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移動" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "幅" #: ulng.rsconfcustheader msgid "Customize column" msgstr "カラムをカスタマイズ" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "ファイルの関連づけを設定" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "コマンドラインとパラメータを確認中" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "コピー(%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "インポートされたDCのツールバー" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "インポートされたTCのツールバー" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_DroppedText" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_DroppedRichtext" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" # どの文脈か不明 #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr "追加:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "削除:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "2つのファイルは同じものです" #: ulng.rsdiffmatches msgid " Matches: " msgstr "一致:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "変更:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "すべての操作が完了しました" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "すべての操作の進捗 %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "中止(&o)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全て(&l)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "追加(&p)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "ソースファイルの名前を自動修正(&u)" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "キャンセル(&C)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "継続(&C)" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "この中へコピー(&I)" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "全てコピー(&A)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "プログラムの終了(&x)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "全て無視(&g)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "いいえ(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "無し(&e)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "OK(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "その他(&h)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "上書き(&O)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "全て上書き(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "全ての大きい項目を上書き(&L)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "全ての古い項目を上書き(&d)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "全ての小さい項目を上書き(&m)" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "名前の変更(&e)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "再開(&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "再試行(&t)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "スキップ(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "全てスキップ(&k)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "はい(&Y)" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "ファイルとフォルダを計算" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "チェックサムを計算…" #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "チェックサムを確認…" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "ファイルのコピー" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "ファイルの削除" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "ファイルの移動" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "一時停止(&s)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "開始(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "キュー" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "スピード %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "スピード %s/s、残り時間 %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "ファイル分割:" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "ファイルの完全削除(抹殺)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<ラベル無し>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<メディア無し>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "ダブル・コマンダーの内部エディタ" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "指定行へ移動:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "指定行へ移動" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "ファイル名:" #: ulng.rseditnewopen msgid "Open file" msgstr "ファイルを開く" #: ulng.rseditsearchback msgid "&Backward" msgstr "後方へ(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "検索" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "前方へ(&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "置換" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "外部エディタを使用" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "内部エディタを使用" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "シェル内で実行" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "端末内で実行した後クローズ" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "端末内で実行した後開いたままにする" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "左;右;アクティブ;非アクティブ;両方;なし" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "いいえ;はい" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "DCからエクスポート済み" # どの文脈か不明 #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "質問;上書き;コピー;スキップ" # どの文脈か不明 #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "質問;上書き;古い項目を上書き;スキップ" # どの文脈か不明 #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "質問;これ以上設定しない;エラーを無視" #: ulng.rsfilterstatus msgid "FILTER" msgstr "フィルター" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "テンプレートを定義" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s レベル(複数可)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全て(深さは無制限)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "現在のディレクトリのみ" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "ディレクトリ%sは存在しません!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "見つかった項目数:%d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "検索テンプレートを保存" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "テンプレート名:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "スキャンした項目数:%d" #: ulng.rsfindscanning msgid "Scanning" msgstr "スキャン中" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "ファイルの検索" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "開始時刻" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "空き領域 %s バイト(%s バイト中)" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s バイトの空き領域" #: ulng.rsfuncatime msgid "Access date/time" msgstr "アクセス 日付/時間" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "属性" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "コメント" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "圧縮されたサイズ" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "作成 日付/時間" #: ulng.rsfuncext msgid "Extension" msgstr "拡張子" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "グループ" #: ulng.rsfunchtime msgid "Change date/time" msgstr "日付/時間を変更" #: ulng.rsfunclinkto msgid "Link to" msgstr "リンク先" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "修正 日付/時間" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "ファイル名" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "拡張子なしのファイル名" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "所有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "パス:" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "サイズ" #: ulng.rsfunctype msgid "Type" msgstr "種類" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "ハードリンク作成時エラーが発生しました。" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "なし;名前(昇順);名前(降順);拡張子(昇順);拡張子(降順);サイズ(降順);サイズ(昇順);日付(降順);日付(昇順)" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "残念。インポートする項目が検出されませんでした!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "警告! .hotlistバックアップファイルを復元する場合、既存のリストは、インポートされたもので置換されるため消去されます。\n" "\n" "このまま進めてよろしいですか?\n" "
\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "コピー/移動ダイアログ" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "差分検出" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "コメントダイアログの編集" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "エディタ" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "ファイルの検索" #: ulng.rshotkeycategorymain msgid "Main" msgstr "メイン" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "ビューア" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "デフォルトのバーファイルへの参照を見つけることができません" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "リンカ完了" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "選択解除マスク" #: ulng.rsmarkplus msgid "Select mask" msgstr "選択マスク" #: ulng.rsmaskinput msgid "Input mask:" msgstr "入力マスク:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "その名前のカラムビューは既に存在します。" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "現在編集中のカラムビューを変更するためには、保存、コピーまたは削除します" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "カスタム列の構成" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "新しいカスタムカラム名を入力" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "カスタム列のビューを構成" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "アクション" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "ネットワークドライブの切断…" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "編集" #: ulng.rsmnueject msgid "Eject" msgstr "取り出し" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "ここに抽出…" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "ネットワークドライブの割り当て…" #: ulng.rsmnumount msgid "Mount" msgstr "マウント" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "新規" #: ulng.rsmnunomedia msgid "No media available" msgstr "利用可能なメディアがありません" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "開く" #: ulng.rsmnuopenwith msgid "Open with" msgstr "ファイルを開くアプリケーション" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "その他…" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "ここでパック…" #: ulng.rsmnusortby msgid "Sort by" msgstr "ソートのキー" #: ulng.rsmnuumount msgid "Unmount" msgstr "アンマウント" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "ビュー" #: ulng.rsmsgaccount msgid "Account:" msgstr "アカウント:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "アーカイバコマンドライン用の追加パラメータ:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "下記結果ファイルのCRC32が正しくありません:\n" "<%s>\n" "\n" "それを承知で、この破壊した結果ファイルを保持しますか?\n" "
\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "ファイル<%s>をそれ自身にコピー/移動することはできません!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "ディレクトリ<%s>を削除できません。" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "ディレクトリ<%s>への移動ができません。" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "全てのアクティブでないタブを削除しますか?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "この<%s>タブはロックされています。それも、閉じるしますか?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "カラムビューに関するオプションが変更済みです。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "終了してもよろしいですか?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "ファイル %s は変更されました。過去に遡ってコピーしますか?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "過去へのコピーができませんでした。変更したファイルを維持しますか?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリをコピーしますか?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "選択した<%s>をコピーしますか?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "<新しいファイルタイプ ”%s ファイル”>" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "DC ツールバー ファイルを保存する場所とファイル名を入力" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "カスタムアクション" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "部分的にコピーされたファイルを削除しますか?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "選択した %d 個のファイル/ディレクトリを削除しますか?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "選択した %d 個のファイル/ディレクトリをごみ箱に入れて削除しますか?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "選択された<%s>を削除しますか?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "選択した<%s>をゴミ箱に入れて削除しますか?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "<%s>をゴミ箱に入れて削除することができません。直接削除しますか?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "ディスクが利用できません。" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "マウスのドラッグ&&ロップに関するオプションが変更されています。終了する前に保存しますか?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "カスタムアクション名を入力:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "ファイルの拡張子を入力:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "ファイルの種類名を入力:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "拡張子<%s>のための新しいファイルタイプ名を入力" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "アーカイブ ・ データの CRC エラー" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "データが不良" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "サーバー<%s>に接続できません。" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "ファイル<%s>を<%s>にコピーできません。" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "<%s>という名前のディレクトが既に存在します。" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "日付<%s>はサポートされていません。" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "ディレクトリ<%s>が存在します!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "関数がユーザーによって中止されました。" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "ファイルを閉じる際のエラー" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "ファイルを作成できません。" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "これ以上のファイルがアーカイブには存在しません。" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "既存のファイルを開くことができません。" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "ファイルからの読み取り中のエラー" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "ファイルへの書き込み中のエラー" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "ディレクトリ<%s>を作成できません!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "無効なリンク" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "ファイルが見つかりません。" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "メモリが不足です。" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "サポートされていない関数!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "コンテキストメニューのコマンドでのエラー" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "構成の読み込み時のエラー" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "正規表現での構文エラー!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "ファイル名<%s>を<%s>に変更できません。" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "ファイルの関連付けを保存できません!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "ファイルを保存できません。" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "<%s>の属性を設定出来ません。" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "<%s>の日付/時刻を設定出来ません。" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "<%s>の所有者/グループを設定出来ません。" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "<%s>のファイル権限が設定できません" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "バッファた小さすぎます。" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "圧縮するファイルが多すぎます。" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "アーカイブのフォーマットが不明です。" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "お気に入りのタブから全てのエントリを本当に削除していいですか?(これは「やり直し」の効かない操作です!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "ここに他のエントリをドラッグ" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(サブメニューの終了)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "このお気に入りのタブのエントリの名前を入力" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "新しいお気に入りのタブのエントリを保存中" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "お気に入りのタブの読み込みエラー…" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "お気に入りのタブの保存エラー…" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "正常にエクスポートされたお気に入りのタブの数: %d個(%d中)" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "デフォルトの追加設定(新しいお気に入りのタブのディレクトリ履歴の保存):" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "お気に入りのタブがメモリに追加されました!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "正常にインポートされたファイルの数:%d個(%d個中)" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "インポートされたレガシーなタブ" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" # 英語がおかしい。 # have not been saved yet. #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "お気に入りのタブへの最終変更がまだ保存されていません。続行する前に保存しますか?" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "お気に入りタブが変更されました。終了する前に保存しますか?" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "名前" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "お気に入りのタブの設定<%s>を読み込み" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "最後にロードされたお気に入りのタブ<%s>に保存" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "メニューの名前:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "お気に入りのタブのディレクトリ履歴を必ず保存:" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(区切り)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "サブメニューの名前" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "お気に入りのタブをロード:<%s>" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "既存のお気に入りのタブのエントリに現在のタブを保存" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "ファイルの拡張子の関連づけの追加オプションが変更されています。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "ファイルの拡張子の関連づけが変更されています。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "ファイル<%s>は変更されました。保存しますか?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s バイト, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "上書き:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "ファイル<%s>が存在します。上書きしますか?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "ファイル:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "ファイル<%s>が見つかりません。" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "ファイル操作を実行中です。" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "まだ幾つかのファイル操作が終了していません。この状態でダブル・コマンダーを終了すると、データを失う可能性があります。" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "ファイル操作に関するオプションが変更されています。終了する前に保存しますか?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "パネルの色に関するオプションが変更されています。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "ファイル<%s>は読み込み専用です。それでも削除しますか?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "ファイル<%s>のサイズは、送り先のファイルシステムには大きすぎます!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "ディレクトリ<%s>が存在します。上書きしますか?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "シンボリックリンク<%s>を辿りますか?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "インポートするファイルフォーマットを選択" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "選択した %d 個のディレクトリを追加" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "選択したディレクトリを追加:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "現在のディレクトリを追加:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "コマンドを実行" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "「ディレクトリ・ホットリスト」の構成" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "本当に、「ディレクトリ・ホットリスト」の全部の要素を削除しますか?(これは「やり直し」の効かない操作です!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "これは右のコマンド実行します:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "これは「ホットディレクトリ」として名前が記録されています。" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "アクティブフレームをこのパスに変更します:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "また、非アクティブフレームをこのパスに変更します:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "項目のバックアップ中のエラー…" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "項目のエクスポート中のエラー…" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "全てをエクスポート!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "「ディレクトリ・ホットリスト」のエクスポート - エクスポートしたい項目を選択して下さい。" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "選択した項目をエクスポート" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "全てをインポート!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "「ディレクトリ・ホットリスト」のインポート - インポートしたい項目を選択して下さい。" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "選択した項目をインポート" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "パス" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "インポートする<.hotlist>ファイルの場所を指定" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "「ディレクトリ・ホットリスト」が変更されています。終了する前に保存しますか?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "ホットディレクトリ名" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "新しい項目数:%d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "エクスポートする項目が何も選択されていません!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "ホットディレクトリのパス" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "選択したディレクトリを再度追加:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "現在のディレクトリを再度追加:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "復元する「ディレクトリ・ホットリスト」の場所とファイル名を入力して下さい。" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "コマンド:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(サブメニューの終了)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "メニューの名前:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "名前:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(区切り)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "サブメニューの名前" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "ホットディレクトリのターゲット" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "ディレクトリの変更後、アクティブフレームが指定された順序で並べ替えられる必要があれば指定" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "ディレクトリの変更後、非アクティブフレームが指定された順序で並べ替えられる必要があれば指定" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "相対パス、絶対パス、Windowsの特別フォルダ等を適切に選択する関数" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "保存された項目の合計: %d 個\n" "\n" "バックアップファイル名: %s\n" "
\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "エクスポートされた項目の合計:" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "サブメニュー<%s>中の全ての項目を削除しますか?\n" "答えが「いいえ」の場合、メニューの区切りだけが消され、サブメニュー中の項目はそのまま残ります。\n" "
\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "「ディレクトリ・ホットリスト」ファイルを保存する場所とファイル名を入力して下さい。" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "結果であるファイルの長さが正しくありません: <%s>" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "次のディスクまたは何か同様のものを挿入して下さい。\n" "\n" "次のファイルを書き込むためのものです:\n" "<%s>\n" "残りの書き込みサイズ:<%d>バイト\n" "
\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "コマンドラインでのエラー" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "無効なファイル名" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "設定ファイルのフォーマットが無効" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無効なパス" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "パス<%s>には認められていない文字が含まれています。" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "これは有効なプラグインではありません" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "このプラグインはダブル・コマンダー<%s.%s>のためのにビルドされており、<%s>では動作しません!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "無効な呼び出し" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "無効な選択" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "ファイルリストを読み込み中…" #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr " TCの設定ファイル(wincmd.ini)の場所を指定" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TCの実行ファイル (totalcmd.exe or totalcmd64.exe)の場所を指定" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "ファイル<%s>をコピー" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "ファイル<%s>を削除" #: ulng.rsmsglogerror msgid "Error: " msgstr "エラー:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "外部コマンドを起動" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "外部コマンドの結果" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "ファイル<%s>を抽出" #: ulng.rsmsgloginfo msgid "Info: " msgstr "情報:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "リンク<%s>を作成" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "ディレクトリ<%s>を作成" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "ファイル<%s>を移動" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "ログに関するオプションが変更されています。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "ファイル<%s>に圧縮" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "ディレクトリ<%s>を削除" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完了:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "シンボリックリンク<%s>を作成" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "ファイル<%s>の完全性をテスト" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "ファイル<%s>を完全消去(抹殺)" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "ディレクトリ<%s>を完全消去(抹殺)" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "マスターパスワード" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "マスターパスワードを入力して下さい:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "その他の細々したオプションが変更されています。終了する前に保存しますか?" #: ulng.rsmsgnewfile msgid "New file" msgstr "新しいファイル" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "次のボリュームを解凍します" #: ulng.rsmsgnofiles msgid "No files" msgstr "ファイルがありません" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "ファイルが選択されていません。" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "ターゲットドライブには十分な空きスペースがありません。継続しますか?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "ターゲットドライブには十分な空きスペースがありません。もう一度やりますか?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "ファイル<%s>を削除できません。" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "機能は提供されていません。" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "下に示すのはプレビューです。カーソルを動かしファイルを選択すれば、様々な設定のルック&フィールが直ちに分かります。" #: ulng.rsmsgpassword msgid "Password:" msgstr "パスワード:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "パスワードが一致しません!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "パスワードを入力して下さい:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "パスワード(ファイアウォール用):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "確認のためパスワードを再度入力して下さい:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "<%s>を追加(&A)" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "設定(&C)" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "<%s>を削除(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "プリセット<%s>が既に存在します。上書きしますか?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "コマンド<%s>を実行中の問題" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "ドロップした文字列に対するファイル名:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "このファイルを使用可能にして下さい。もう一度やりますか?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "このお気に入りのタブの分かりやすい名前を入力" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "このメニューの新しい名前を入力" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリの名前を変更/移動しますか?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "選択した<%s>の名前を変更/移動しますか?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "諸々の変更を有効にするため、ダブル・コマンダーを再起動して下さい。" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "ファイルの拡張子<%s>をどのファイルタイプに追加するか選択" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "選択済みファイル:%sバイト(%sバイト中)ファイル個数:%d個(%d個中)ディレクトリ個数:%d個(%d個中)" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "実行するファイルを選択" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "チェックサムファイルだけを選択して下さい!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "次のボリュームの場所を選択して下さい!" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "ボリュームラベルをセット" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "特別なディレクトリ" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "アクティブフレームからパスを追加" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "非アクティブフレームからパスを追加" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "選択したパスを参照して使用" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "環境変数を使用…" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "ダブル・コマンダー専用のパスへ移動…" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "環境変数を取得…" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "その他のWindowsの特別なフォルダに移動…" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Windowsの特別なフォルダ(TC)に移動…" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "パスを絶対パスにする" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "ダブル・コマンダーの特別パスに対しての相対パスにする…" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "環境変数に対しての相対パスにする…" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "ウィンドウズの特別なフォルダ(TC)に対する相対パスにする…" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "その他のWindowsの特別なフォルダに対する相対パスにする…" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "ダブル・コマンダーの特別パスを使用…" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "その他のWindowsの特別なフォルダを使用する…" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Windowsの特別なフォルダ(TC)を使用する…" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "このタブ<%s>はロックされています! 他のタブで開きますか?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "タブの名前を変更" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "新しいタブの名前:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "フォルダー・タブの追加に関するオプションが変更されています。\n" "\n" "終了前に保存しますか?\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "フォルダー・タブに関するオプションが変更されています。\n" "\n" "終了前に保存しますか?\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "ターゲットのパス:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "エラー!:TCの設定ファイルが見つかりません:\n" "<%s>\n" "
\n" # どの実行ファイルのこと? #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "エラー!:TCの設定実行ファイルが見つかりません:\n" "%s\n" "
\n" # なぜ、TCの実行が関係するのか不明。 # TCの文字列を全部取り込んでいる? #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "エラー!:TCはまだ動作していますが、この操作のために終了する必要があります。\n" "閉じてOKを押すか、キャンセルを押して中止。\n" "
\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "エラー!:お望みのTCツールバー出力フォルダが見つかりません:\n" "%s\n" "
\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "TCツールバーファイルを保存する場所とファイル名を入力して下さい。" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "端末に関するオプションが変更されています。\n" "\n" "終了前に保存しますか?\n" "
\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "<”%s”>が現在クリップボードにあります" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "選択したファイルの拡張子は認識可能なファイルタイプにありません" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "エラー!:ツールバーの保存中の問題!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "インポートすべき<.toolbar>ファイルの場所を指定して下さい。" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "インポートすべき<.BAR>ファイルの場所を指定して下さい。" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "ツールバーが更新されています。終了する前に保存しますか?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "復元するツールバーの場所とファイル名を入力して下さい。" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "ツールバーを保存しました。\n" "ファイル名: %s\n" "
\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "選択されたファイル名が多すぎます。" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "特定不能" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<拡張子無し>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<名前無し>" #: ulng.rsmsgusername msgid "User name:" msgstr "ユーザ名:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "ユーザ名(ファイアウォール用):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "ボリュームラベル:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "ボリュームサイズを入力して下さい:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "選択した<%d>個のファイル/ディレクトリを完全削除(抹殺)しますか?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "選択した<%s>を完全削除(抹殺)しますか?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "with" # 文脈不明 #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "変更無し;大文字;小文字;最初だけ大文字;各単語の頭を大文字" #: ulng.rsoperaborted msgid "Aborted" msgstr "中止しました。" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "チェックサムを計算中" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "<%s>でチェックサムを計算中" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "<%s>のチェックサムを計算中" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "計算中" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "<%s>を計算中" #: ulng.rsopercombining msgid "Joining" msgstr "結合中" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "<%s>にあるファイルを<%s>に結合中" #: ulng.rsopercopying msgid "Copying" msgstr "コピー中" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "<%s>から<%s>にコピー中" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "<%s>を<%s>にコピー中" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "ディレクトリを作成中" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "ディレクトリ<%s>を作成中" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "削除中" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "<%s>で削除中" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "<%s>を削除中" #: ulng.rsoperexecuting msgid "Executing" msgstr "実行中" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "<%s>を実行中" #: ulng.rsoperextracting msgid "Extracting" msgstr "抽出中" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に抽出中" #: ulng.rsoperfinished msgid "Finished" msgstr "完了" #: ulng.rsoperlisting msgid "Listing" msgstr "リスト中" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "<%s>をリスト中" #: ulng.rsopermoving msgid "Moving" msgstr "移動中" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に移動中" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "<%s>を<%s>に移動中" #: ulng.rsopernotstarted msgid "Not started" msgstr "開始していません" #: ulng.rsoperpacking msgid "Packing" msgstr "圧縮中" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "<%s>から<%s>に圧縮中" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "<%s>を<%s>に圧縮中" #: ulng.rsoperpaused msgid "Paused" msgstr "一時停止" #: ulng.rsoperpausing msgid "Pausing" msgstr "一時停止中" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "キューに待機済み" #: ulng.rsoperrunning msgid "Running" msgstr "実行中" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "属性を設定中" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "<%s>で属性を設定中" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "<%s>の属性を設定中" #: ulng.rsopersplitting msgid "Splitting" msgstr "分割中" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "<%s>を<%s>に分割中" #: ulng.rsoperstarting msgid "Starting" msgstr "開始中" #: ulng.rsoperstopped msgid "Stopped" msgstr "停止済み" #: ulng.rsoperstopping msgid "Stopping" msgstr "停止中" #: ulng.rsopertesting msgid "Testing" msgstr "テスト中" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "<%s>でテスト中" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "<%s>をテスト中" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "チェックサムを検証中" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "<%s>でチェックサムを検証中" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "<%s>のチェックサムを検証中" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "ファイルソースへのアクセスを待機中" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "ユーザの応答を待機中" #: ulng.rsoperwiping msgid "Wiping" msgstr "完全削除(抹殺)中" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "<%s>で完全削除(抹殺)中" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "<%s>を完全削除(抹殺)中" #: ulng.rsoperworking msgid "Working" msgstr "動作中" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "最初に追加;最後に追加;賢く追加" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "削除:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "パスを付けずに抽出:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "フォーマットの構文解析モード:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "IDの位置:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "IDの探査レンジ:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "パラメータ" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "パスワード質問文字列:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "自己解凍型のアーカイブを作成:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "テスト:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "アーカイブのタイプ名:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "値" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "プラグイン<%s>を右に関連づけ:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "最初;最後;" # 「アルファベット順(言語最初)」を選んでも、言語は最後になる。恐らく、ソートのキーの間違い。 #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "クラッシックな順番;レガシーな順番;アルファベットの順番" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "アクティブパネルを左に、非アクティブパネルを右に(レガシーな仕様);左のパネルを左に、右のパネルを右に" #: ulng.rsoptdisable msgid "Disable" msgstr "無効にする" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "有効にする" #: ulng.rsoptenterext msgid "Enter extension" msgstr "拡張子を入力" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "カーソル" #: ulng.rsoptexamplemark msgid "Mark" msgstr "マーク" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "マーク+カーソル" #: ulng.rsoptexampletext msgid "Text" msgstr "テキスト" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "最初に追加;最後に追加;アルファベット順にソート" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "独立ウィンドウ;最小化した独立ウインドウ;操作パネル" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "小数;B;K;M;G" # 元の英語の質が悪い。 #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "ショートカット<%s>をcm_Delete用に登録しようとしています。この設定を逆にするために使用できます。" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "<%s>のホットキーを追加" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "ショートカットを追加" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "ショートカットを設定できません" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "ショートカットを変更" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "コマンド" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "ショートカット<%s>(cm_Delete用)には、この設定に優先するパラメータがあります。グローバル設定を使うため、このパラメータを変更しますか?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "ショートカット<%s>(cm_Delete用)は、ショートカット<%s>に一致するよう変更すべきパラメータがあります。その変更をしますか?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "説明" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "<%s>のホットキーを編集" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "パラメータを修正/確定して下さい。" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "ホットキー" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "ホットキー" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<無し>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "パラメータ" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "ファイル削除のショートカットを設定" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "この設定をショートカット<%s>で使えるようにするためには、ショートカット<%s>を(cm_Delete)にアサインする必要がありますが、既に<%s>アサインされています。これを変更しますか?" # resersed Shiftって何? #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "ショートカット<%s>(cm_Delete用)は、シーケンスショートカットであり逆Shiftのホットキーはアサインできません。この設定は恐らく動作しません。" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "ショートカットは使用中です。" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "ショートカット<%s>は既に使用中です。" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "変更して<%s>にしますか?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "<%s>で<%s>のために使用中です。" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "このコマンドのために別のパラメータで使用中" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "アーカイーバ" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "自動更新" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "システム全体の挙動" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "概要表示" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "色彩設定" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "詳細表示" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "設定" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "詳細表示のカスタム設定" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "ディレクトリ・ホットリスト" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "ドラッグ&ドロップ" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "ドライブリストボタン" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "お気に入りのタブ" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "ファイルの関連づけ(追加)" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "ファイルの関連づけ" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "ファイル操作" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "ファイルパネル" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "ファイルビュー" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "ファイルタイプ" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "フォルダのタブ" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "フォルダー タブの追加" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "フォント" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "強調表示" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "ホットキー" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "アイコン" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "無視するリスト" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "キー設定" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "表示言語" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "レイアウト" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "ログ" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "その他…" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "マウス" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "プラグイン" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "クイック検索/フィルタ" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "端末" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "ツールバー" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "補足" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "ツール" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "ツールのヒント" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "無し;コマンドライン;クイック検索;クイックフィルター" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左ボタン;右ボタン;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "ファイルリストの先頭;ディレクトリの後(ディレクトリがファイルの前にソートされている場合);ソートされた位置;ファイルリストの末尾" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "プラグイン<%s>は既に右の拡張子にアサインされています:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "有効" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "ファイル名" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名前" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "登録済み:" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "影響される;影響されない(&S)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "ファイル;ディレクトリ;ファイルとディレクトリ(&F)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "フォーカスが外れたらフィルターパネルを隠す(&H);次のセッションのため設定の変更を保存" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "大文字小文字の区別なし;ロケールの設定による(aAbBcC);最初に大文字次に小文字(ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "名前でソートして常に最初に表示;ファイルと同一視してソートし最初に表示;ファイルと区別せずソート" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "アクセントを考慮の上アルファベット順;自然なソート;アルファベット・数字の順" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "上部;下部;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "区切り;内部コマンド;外部コマンド;メニュー(&e)" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DCレガシー: Copy (x) ファイル名.拡張子;Windows: ファイル名 (x).拡張子;その他: ファイル名(x).拡張子" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "位置を変えない;新しいファイルには同じ設定を使う;ソートした位置へ" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "ファイル:%d、フォルダ:%d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "<%s>のアクセス権限の変更ができません。" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "<%s>の所有権の変更ができません。" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "ファイル" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "ディレクトリ" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "名前付きパイプ" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "いいえ" #: ulng.rspropssocket msgid "Socket" msgstr "ソケット" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "スペシャル・ブロック・デバイス" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "スペシャル・キャラクタ・デバイス" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "シンボリックリンク" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "不明なタイプ" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "はい(%s)" #: ulng.rssearchresult msgid "Search result" msgstr "検索結果" #: ulng.rssearchstatus msgid "SEARCH" msgstr "検索" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<名前のないテンプレート>" #: ulng.rsselectdir msgid "Select a directory" msgstr "ディレクトリを1つ選択して下さい。" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "<%s>のヘルプを表示(&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "全て" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "カテゴリ" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "カラム" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "コマンド" #: ulng.rssimplewordfilename msgid "Filename" msgstr "ファイル名:" #: ulng.rssimplewordfiles msgid "files" msgstr "ファイル" #: ulng.rssimplewordparameter msgid "Param" msgstr "パラメータ" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "プレビュー" #: ulng.rssimplewordresult msgid "Result" msgstr "結果" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "保存しました!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "作業ディレクトリ" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "バイト" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gバイト" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kバイト" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Mバイト" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Tバイト" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "ファイル:%d、ディレクトリ:%d、サイズ:%s (%s バイト)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "ターゲットディレクトリを作成できません!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "正しくないファイルサイズのフォーマットです!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "ファイルを分割できません!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "パーツの数が100を超えます!続けますか?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "ディレクトリを選択:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "シンボリックリンクの作成中のエラー。" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "デフォルトの文字列" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "プレーンテキスト" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "何もしない;タブを閉じる;お気に入りのタブにアクセス;タブのポップアップメニュー" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "日" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "時" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "分" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "月" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "秒" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "週" #: ulng.rstimeunityear msgid "Year(s)" msgstr "年" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "お気に入りのタブの名前を変更" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "お気に入りのタブのサブメニューの名前を変更" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "差分検出ツール" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "エディタ" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "エラー:差分検出ツールの開始" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "エラー:エディタの開始" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "エラー:端末の開始" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "エラー:ビューアの開始" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "端末" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "ビューア" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "このエラーを「何をしている時に起きたかを書いて」次の<%s>ファイルと一緒に、バグ追跡システムに報告して下さい。<%s>を押して継続;または、<%s>を押してプログラムを終了。" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "左右両パネル(アクティブから非アクティブへ)" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "左右両パネル(左から右へ)" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "パネルのパス" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "名前または何をしたいかを括弧で囲みます" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "拡張子なしでファイル名のみ" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "完全なファイル名(パス+ファイル名)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "変数<”%”>のヘルプ" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "デフォルトの推奨値つきでパラメータを入力するようユーザに求めます" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "左パネル" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "ファイル名のリストを保存する一時ファイル名" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "完全なファイル名(パス+ファイル名)のリストを保存する一時ファイル名" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "相対パスでのファイル名のリストを保存する一時ファイル名" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "ファイル拡張子のみ" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "ファイル名のみ" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "何が可能かを示す他の例" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "パス(行末の区切り文字付き)" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "この位置から行末まで(パーセント変数インジケータは”#”)" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "パーセント記号を返します" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "この位置から行末まで(パーセント変数インジケータは”%”)" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "名前のの前に “-a” またはしたいことを付加" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[パラメータの入力を求める;デフォルトの値を提案する]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "相対パスでのファイル名" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "右パネル" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "右パネル中で2番目に選択されたファイルのフルパス" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "実行前にコマンドを表示" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[簡単なメッセージ]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "簡単なメッセージが表示されます" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "アクティブパネル(ソース)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "非アクティブパネル(ターゲット)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "ファイル名はここから引用されます(デフォルト)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "コマンドは端末で実行され、終了後も端末は開いたままです" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "パスには行末の区切り文字がつきます" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "ファイル名はここから引用されることはありません" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "コマンドは端末で実行され、終了後に端末は閉じます" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "パスには行末の区切り文字がつきません(デフォルト)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "ネットワーク" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "ダブル・コマンダーの内部ビューア" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "劣悪な品質" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "エンコード" #: ulng.rsviewimagetype msgid "Image Type" msgstr "画像タイプ" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "新しいサイズ" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "<%s>はありません!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "外部ビューアで" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "内部ビューアで" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "置換の回数:%d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "置換は起こりませんでした。" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.cs.po������������������������������������������������������������0000644�0001750�0000144�00001213317�12666540554�017227� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Lukáš Novotný <lenochod@tiscali.cz>, 2016. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-02-27 11:35+0100\n" "Last-Translator: Lukáš Novotný <lenochod@tiscali.cz>\n" "Language-Team: čeština <info@pestasoft.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: čeština\n" "Language: cs\n" "X-Generator: Gtranslator 2.91.7\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porovnávám... %d%% (pro zrušení použijte ESC)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Vpravo: Smazáno %d soubor(ů)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Nalezeno souborů: %d (Stejných: %d, Rozdílných: %d, Unikátních vlevo: %d, Unikátních vpravo: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Zleva doprva: Kopírované soubory %d, Celková velikost: %d bajtů" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Zprava doleva: Kopírované soubory %d, Celková velikost: %d byjtů" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Vše" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Nastavit vlastní sloupcové zobrazení" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Pozadí:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Ohraničení kurzoru" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Povolit barvu přes" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Použít vlastní písmo a barvu" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Barva písma:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Písmo:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Pozadí 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Nastavení pohledu č.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Barva kurzoru:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Barva označených:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Název:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Přidat sloupec" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Nastavení sloupců:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Náhled" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vybrat šablonu..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Z&kontrolovat volné místo" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopírova&t atributy" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopírovat v&lastnictví" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopírovat o&právnění" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopírovat d&atum/čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Opravit odka&zy" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Zrušit pří&znak jen pro čtení" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "V&yloučit prázdné adresáře" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Ná&sledovat odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervní prostor" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Co dělat, když nelze nastavit čas souboru, atributy, atd." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Použít šablonu souboru" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Pokud adr&esář existuje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Pokud &soubor existuje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Pokud ne&lze nastavit vlastnost" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<žádná šablona>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopírovat do schránky" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Sestavení" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domovská stránka:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revize" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Verze" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "Ob&novit" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Vyberte atributy" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archív" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Ko&mprimováno" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Adresář" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Š&ifrováno" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skryté" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Pouze pro č&tení" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Ř&ídké" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolický odkaz" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystém" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Dočasné" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributy NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Obecné atributy" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Jako te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Výpočet kontrolního součtu..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Otevřít soubor po vytvoření kontrolního součtu" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "V&ytvořit samostatný kontrolní součet pro každý soubor" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Uložit soubor(y) s kontrolním součtem do:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Kontrola kontrolního součtu..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "P&řipojit" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Správce připojení" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Připojit k:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Při&dat do fronty" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "M&ožnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Ul&ožit tyto možnosti jako výchozí" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopírovat soubor(y)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nová fronta" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Fronta 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Fronta 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Fronta 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Fronta 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Fronta 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Uložit popis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentář souboru/adresáře" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "U&pravit komentář pro:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Kódování:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automaticky porovnat" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Binární režim" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Zrušit" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopírovat pravý blok" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopírovat pravý blok" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopírovat levý blok" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopírovat levý blok" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazat" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovat" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vybrat &vše" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Zpět" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "První rozdíl" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "První rozdíl" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorovat velikost znaků" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorovat mezery" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Udržovat rolování" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Poslední rozdíl" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Poslední rozdíl" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Rozdíly řádky" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Další rozdíl" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Další rozdíl" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otevřít levý..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otevřít pravý..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Kreslit pozadí" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Předchozí rozdíl" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Předchozí rozdíl" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Znovu načíst" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Znovu načíst" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Uložit" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Uložit" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Uložit jako..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Uložit jako..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Uložit levý" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Uložit levý" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Uložit levý jako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Uložit levý jako..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Uložit pravý" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Uložit pravý" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Uložit pravý jako..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Uložit pravý jako..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Porovnat" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódování" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódování" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Porovnat soubory" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Vlevo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Vpravo" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akce" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "M&ožnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Přidá novou zkratku do sekvence" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Odstraní poslední zkratku ze sekvence" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Pouze pro tyto prvky" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametry (každý na zvláštní řádce):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Zkratky:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O programu" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Nastavení" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Nastavení" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopírovat" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Vyjmout" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazat" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Vymazat" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Hledat" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Hledat" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Hledat další" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Hledat další" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Přejít na řadek..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Vložit" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovat" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Opakovat" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Nahradit" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Nahradit" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Vybrat &vše" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Vybrat vše" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Zpět" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Zpět" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zavřít" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ukončit" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nový" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nový" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otevřít" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Otevřít" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Uložit" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Uložit &jako.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Uložit jako" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Uložit vše" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Uložit vše" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otevřít jako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Uložit jako" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Zvýrazňování syntaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Konec řádky" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Rozlišovat velikost" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "H&ledat od ukazatele" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulární výrazy" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Pouze vybraný &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Pouze celá slova" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Možnost" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Nahradit čím:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Vyhledat:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Směr" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Rozbalení souborů" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozbalit i s cestou, pokud je uložena" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Rozbalit do oddělených po&dadresářů (podle názvu archívu)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "P&řepsat existující soubory" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Do &adresáře:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Rozbalit soubory odpovídající masc&e souborů:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Heslo pro šifrované soubory:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Přidat" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Přidat" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Dolů" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Sma&zat" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Sm&azat" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Přejm&enovat" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Nahoru" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Přidružení souborů" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Akce" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Přípony" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Typy souborů" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Akce:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Příkaz:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Edit" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otevřít v editoru" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Cesta k souboru" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Úplná cesta" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Získat výstup příkazu" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Spustit v terminálu" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Otevřít v VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Zobrazit" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otevřít v prohlížeči" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Čekejte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Název souboru:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klikněte na Zavřít, až bude moci být odstraněn dočasný soubor!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Na panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Zobrazit vše" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuální operace:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Do:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Nastavení vlastností" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastavit na &všech vybraných souborech" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Pře&skočit tento soubor" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Název:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Poslední přístup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Poslední změna:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Poslední změna stavu:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkově:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "V&lastník" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Sym. odkaz na:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Přidat" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Jdi k souboru" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Poslední hledání" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nové hledání" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Načíst" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Uložit" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Ulo&žit s \"Začátek v adresáři\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Pokud je uloženo, pak \"Začátek v adresáři \" se obnoví při načítání šablony. Použijte, pokud chcete opravit hledání v určitém adresáři" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Z&rušit" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Použít šablonu" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Zobrazit" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Výsledek do &okna" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Hledat soubory" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Rozlišovat velikost" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Datum od:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dat&um do:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "V&elikost od:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Ve&likost do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "&Hledat v archivech" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Vyhledat &text" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Následovat s&ymbolické odkazy" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Hledat soubory NEobsahující text" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "N&ení starší, než:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Hled&at části jména souboru" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulární výrazy" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Nahradit &pomocí" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Vybrané adresáře a &soubory" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "R&egulární výrazy" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Čas od:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ča&s do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Po&užít vyhledávací doplněk:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Zadejte názvy adresářů, které mají být vyloučeny z hledání, oddělených \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Zadejte názvy souborů, které mají být vyloučeny z hledání, oddělených \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Zadejte názvy souborů oddělených s \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Adresáře" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Soubory" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Vyhledávat v obsahu" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&buty" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kódován&í:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "V&yloučené podadresáře" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Vyloučené soubory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Souborová maska" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Spustit v a&dresáři" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Prohledat po&dadresáře:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Předchozí hledání:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odebrat ze seznamu" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Zobrazit všechny nalezené položky" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zobrazit v prohlížeči" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Rozšířené" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Načíst/uložit" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Doplňky" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Výsledky" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Hledat" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Hledat" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "C&itlivé na velikost znaků" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Vytvořit hardlink" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cíl, na který bude odkaz ukazovat" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Název odkazu" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Importovat vše!!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Importovat vybrané" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Vyberte položky, které chcete importovat" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Při kliknutí na podnabídku, bude vybrána celá nabídka" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Podržte CTRL a klikejte pro vybrání vycenásebných položek" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Spojování souborů" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Uložit do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Položka" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Název souboru" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Do&lů" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dolů" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Vymazat" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Nahoru" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Nahoru" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&O programu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Přidat název souboru do příkazového řádku" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Uložit cestu a název souboru do příkazového řádku" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopírovat cestu do příkazového řádku" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Stručné zobrazení" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Stručné zobrazení" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Spočítat &obsazené místo..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Změnit adresář" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Přejde do domácího adresáře" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Změnit adresář na nadřazený" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Jít do kořenového adresáře disku" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Spočítat kontrolní &součet..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Ověřit kontrolní součet..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Vyčistit soubor protokolu" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Vymazat okno protokolu" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Zavřít &všechny záložky" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zavřít duplicitní záložky" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Zavřít záložku" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Další příkazová řádka" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Nastavení příkazového řádku na následující příkaz v historii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Předchozí příkazová řádka" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nastavení příkazového řádku na předchozí příkaz v historii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Plný" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Sloupcové zobrazení" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porovnat pod&le obsahu" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Porovnat adresáře" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Porovnat adresáře" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "Nastavení rychlého adresáře" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Nastavení oblíbených záložek" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Nastavení adresářů záložek" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Nástrojová lišta" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Zobrazit místní nabídku" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopírovat všechny záložky na druhou stranu" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopí&rovat všechny zobrazené sloupce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopírovat název(y) souboru(ů) s úplnou &cestou" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopírovat název(y) souboru(ů) do schránky" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopírovat soubory bez dotazu na potvrzení" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopírovat úplnou cestu k vybraným souborům bez posledního oddělovače adresářů" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopírovat úplnou cestu k vybraným souborům" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopírovat do stejného panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopírovat" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Zo&brazit obsazené místo" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Vyjmout" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Zobrazit parametry příkazu" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Vymazat" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Historie adresářů" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Rychlé adresáře" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Vybrat jakýkoliv příkaz a spustit ho" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Upravit" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Upravit ko&mentář..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editovat nový soubor" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Upravit cestu pole nad souborem seznamu" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zaměnit &panely" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Rozbalit soubory..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Konfigurov&at přidružení souboru" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Spojit sou&bory..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Zobrazit &vlastnosti souboru" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Rozděl&it soubor..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Pří&mé zobrazení" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Zaměřit příkazový řádek" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umístit kurzor na první soubor v seznamu" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umístit kurzor na poslední soubor v seznamu" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Vytvořit &hardlink..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Obsah" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vodorovný režim panelů" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Klávesnice" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Stručné zobrazení v levé záložce" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Sloupcové zobrazení v levé záložce" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levý &= Pravý" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Přímé zobrazení v levé záložce" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otevřít levý seznam disků" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Opačné pořadí v le&vé záložce" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Seřadit levou záložku podle &atributů" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Seřadit levou záložku podle &datumu" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "S&eřadit levou záložku podle přípony" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Seřadit levou záložku podle &názvu" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Seřadit levou záložku podle veliko&sti" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Zobrazit miniatury v levé záložce" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Načíst záložku z oblíbených" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Načíst výběr ze schrán&ky" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Načíst výběr ze souboru..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Načíst zá&ložky ze souboru" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Vytvořit a&dresář" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Vybrat vše se stejnou &příponou" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Převrát&it výběr" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Vybrat vše" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Zrušit výběr sk&upiny..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Výběr &skupiny..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Zrušit výběr všeho" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizovat okno" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Nástroj pro h&romadné přejmenování" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Připojit síť..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Odpojit síť" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Síť &rychle připojit..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nová záložka" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Načíst následující oblíbenou záložku v seznamu" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Přepnou&t do nové záložky" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Zkusit otevřít archív" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otevřít bar soubor" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otevřít &adresář v nové záložce" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otevřít &VFS seznam" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "P&rohlížeč operací" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "M&ožnosti..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Zabalit soubory..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Nastavit pozici dělící čáry" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Vložit" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Načíst předchozí oblíbenou záložku v seznamu" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Přepno&ut do předešlé záložky" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Rychlý filtr" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Rychlé hledání" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Panel rychlého prohlížení" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Obnovit" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Znovu načíst posledně načtené oblíbené záložky" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Přesunout" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Přesunout/přejmenovat soubory bez dotazu na potvrzení" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Přejmenovat" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Přejmenovat záložku" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Znovu uložit do posledně načtené oblíbené záložky" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Obnovit výběr" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&brácené pořadí" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Stručné zobrazení v pravé záložce" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Sloupcové zobrazení v pravé záložce" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Pravý &= Levý" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Přímé zobrazení v pravé záložce" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otevřít pravý seznam disků" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Opačné pořadí v pra&vé záložce" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Seřadit pravou záložku podle &atributů" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Seřadit pravou záložku podle &datumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "S&eřadit pravou záložku podle přípony" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Seřadit pravou záložku podle &názvu" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Seřadit pravou záložku podle veliko&sti" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Zobrazit miniatury v pravé záložce" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Spustit &terminál" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Uložit aktuální záložku mezi oblíbené" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Uložit &výběr" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Uložit vý&běr do souboru..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Uložit záložky do &souboru" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Hledat..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Uzamknout všechny záložky s otevřením adresáře v nové záložce " #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Nastavit všechny záložky na Normální" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Nastavit všechny záložky na Uzamčeno" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Uzamknout všechny záložky s povolením změny adresáře" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Změnit &atributy..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Uzamčeno s otevřením adresáře v nové &záložce" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normální" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Uzamčeno" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Uzamčeno s povolenou změnou a&dresáře" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otevřít s pomocí přidružení nastavených v systému" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Zobrazit tlačítkovou nabídku" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Zobrazit historii příkazového řádku" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Nabídka" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "&Zobrazit skryté/systémové soubory" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Řadit podle &atributů" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Řadit podle &data" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Řadit podl&e přípony" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Řadit podle &názvu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Řadit podle veliko&sti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Otevřít seznam disků" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Povolit/zakázat seznam ignorování souborů, aby nezobrazoval jména souborů" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Vytvořit symbolický o&dkaz..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Synchronizovat adresáře..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cíl &= Zdroj" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Testovat archív(y)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatury" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Zobrazení miniatur" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Přepnout režim konzoly na celou obrazovku" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Přenést adresář pod kurzorem do levého okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Přenést adresář pod kurzorem do pravého okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "S&tromové zobrazení" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Seřadit podle parametrů" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Zrušit označení všech se stejnou &příponou" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Zobrazit" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zobrazit historii navštívených cest pro aktivní pohled" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Jít na další položku v historii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Jít na předchozí položku v historii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Zobrazit soubor protokolu" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Na&vštívit domovskou stránku" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Nevratně smazat" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Pracovat s rychlýma adresářema a parametrama" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ukončit" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Adresář" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Vymazat" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Rychlé adresáře" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Zobrazit aktuální adresář pravého panelu na levém panelu" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Jít do domovského adresáře" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Jít do kořenového adresáře" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Jít do nadřízeného adresáře" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Rychlé adresáře" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Zobrazit aktuální adresář levého panelu na pravém panelu" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cesta" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopírovat..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Vytvořit odkaz..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Vymazat" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skrýt" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat vše" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Přesunout..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Vytvořit symbolický odkaz..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti záložky" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Obnovit" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Začátek" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Příkazy" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "N&astavení" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Oblíbené" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Soubory" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Označit" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Síť" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Zobrazit" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "M&ožnosti záložky" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Záložky" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopírovat" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Vymazat" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Upravit" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Vyberte vnitřní příkaz" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Starší řazení" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Starší řazení" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Jako výchozí, vybrat všechny kategorie" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Vybráno:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorie:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Název příkazu:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filtr:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Rada:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Klávesová zkratka:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_název" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "Kategorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "Nápověda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Rada" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "Klávesová zkratka" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Určit..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ne&bo vyberte předdefinovaný typ výběru:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvořit nový adresář" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Zadejte nový název adresáře:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nová velikost" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Výška :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kvalita komprese Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Šířka :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Výška" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šířka" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Načíst" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Obnovit &vše" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Uložit" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Hromadné přejmenování" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Povo&lit" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulární výrazy" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Po&užít náhradu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Přípona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhledat a Nahradit" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Výsledek protokolu" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Předvolby" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Přípona" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Hledat..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Název souboru" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Nah&radit..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Č&íslovat od" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Šířka" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Počítadlo" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Den" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Den (2 cifry)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Den v týdnu (krátký, např. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Den v týdnu (dlouhý, např.\"pondělí\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozici x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Znaky od pozice x do y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hodina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hodin (2 cifry)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (2 cifry)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Měsíc" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Měsíc (2 cifry)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Název měsíce (krátké, např. \"led\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Název měsíce (dlouhé, např. \"leden\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Název" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozici x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaky od pozice x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Přípona..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Název..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Doplněk" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (2 cifry)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 cifry)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 cifry)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Starý název souboru" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Nový název souboru" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Cesta k souboru" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Vybrat aplikaci" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Vlastní příkaz" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Uložit přidružení" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastavit zvolenou aplikaci jako výchozí akci" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Typ souboru, který se má otevřít: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Několik názvů souborů" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Více URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jeden název souboru" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Jeden URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Použít" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Prosím, zvolte jednu z podstránek, tato stránka neobsahuje žádné nastavení." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "N&astavit automaticky" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "V&ymazat" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Přejmenovat" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "TFRMOPTIONSARCHIVERS.BTNRELATIVEARCHIVER.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "La&dící režim" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "P&ovoleno" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "U&kázat výstup konzoly" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Př&idat:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "P&řípona:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Rozbali&t:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Seznam:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Konec &výpisu (volitelné):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Form&át výpisu:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Začáte&k výpisu (volitelné):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Arch&ivátor:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Po&pis:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Přídavné" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Obecné" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Při změně &velikosti, data, nebo atributů" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pro následující &cesty a jejich podadresáře:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Při vytvoření, smazání, nebo přejmenování &souborů" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Když je aplikace na &pozadí" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Zakázat automatické obnovení" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Obnovit seznam souborů" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Vž&dy zobrazit ikonu v oznamovací oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automaticky &skrýt nepřipojená zařízení" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Přesunout do oznamo&vací oblasti pokud je minimalizováno" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "P&ovolit pouze jednu kopii DC ve stejný čas" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Zde můžete zadat jednu nebo více jednotek nebo připojovacích bodů oddělených \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Seznam zakázaných disků" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Velikost sloupce" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Zobrazit přípony souborů" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Zarovnat (na konec slou&pce )" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Přímo za názvem soubo&ru" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Automaticky" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Počet pevných sloupců" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Pevná šířka sloupce" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Oříznout &text na šířku sloupce" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Vodorovné čáry" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Svislé čáry" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&utomaticky naplnit sloupce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Zobrazit mřížku" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatická velikost sloupců" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Automatická ve&likost sloupce:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Hi&storie příkazového řádku" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "&Historie adresářů" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "&Historie použitých masek" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Ul&ožit nastavení" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Historie hle&dání/nahrazení" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Umístění konfiguračních souborů" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Uložit při ukončení" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Řazení pořadí levého konfiguračního stromu" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Nastavit na příkazové řádce" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Adresář p&rogramu (přenosná verze)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "&Domovský adresář uživatele" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Vše" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Provede úpravy pro všechny sloupce" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Smazat" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Přejít na nastavení" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Nový" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Další" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Předchozí" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "O" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Obnoví na výchozí hodnoty" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Uložit jako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Uložit" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Povolit barvu přes" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Při provedení jakékoliv změny ji aplikovat na všechny sloupce" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Obecné" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Ohraničení kurzoru" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Použít ohraničení kurzoru" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Použít barvu neaktivního výběru" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Použít obrácený výběr" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Použít vlastní písmo a barvu pro toto zobrazení" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION" msgid "BackGround:" msgstr "Pozadí:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION" msgid "Background 2:" msgstr "Pozadí 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Kon&figurace sloupcového zobrazení:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Barva kurzoru:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION" msgid "Font:" msgstr "Písmo:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION" msgid "Text Color:" msgstr "Barva písma:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Barva neaktivního kurzoru:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Barva neaktivního označení:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Barva označených:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Níže je náhled. Můžeme pohybovat kurzorem a vybrat soubory, a okamžitě získáme aktuální vzhled podle různých nastavení." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Nastavení pro sloupec:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION" msgid "Add column" msgstr "Přidat sloupec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Umístění záložky v rámu po porovnání:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Přidat..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Zálohovat..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Vymazat..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Nápověda" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importovat..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Vložit..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Různé..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Některé funkce pro výběr příslušného cíle" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Seřadit..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Když přidávám adresář, přidat také cíl" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Vždy rozbalit strom" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Zobrazit pouze ověřenou proměnnou prostředí" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "V roletovém menu, zobrazit [také cestu]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Název, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Název, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Rychlé adresáře (lze přeskupit přetáhnutím)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Další možnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Název:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Cesta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Cíl:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "adresář z aktivního rámu" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "adresáře z aktivního a neaktivního rámu" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "příkaz" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Přidat příkaz" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "kopii z vybrané položky" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Přidat kopii vybrané položky" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "oddělovač" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Přidat oddělovač" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podnabídku" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Přidat podnabídku" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "adresář, budu procházet" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Sbalit vše" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...pouze aktuální úroveň z vybraných položek " #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "aktuálně vybraný nebo aktivní adresář v aktivním rámu" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Vyjmout" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "vymazat vše!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podnabídku a všechny její prvky" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "jen podnabídky, prvky zůstanou" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "vybranou položku" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Smazat vybranou položku" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Prohledat všechny cesty rychlých adresářů pro ověření že skutečně existují" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Prohledat všechny cesty a cíle rychlých adresářů pro ověření že skutečně existují" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "do adresáře souboru hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (neměnit existující)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (smazat existující)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "jít k souvisejícím konfiguracím TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "jít k souvisejícím konfiguracím TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "TestovacíNabídkaRychléhoAdresáře" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "z adresáře souboru hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "z \"wincmd.ini\" od TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Otevřít všechny položky" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Vložit" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "obnovit zálohu adresáře hotlist" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "uložit zálohu aktuálního adresáře hotlist" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Vyhledat a nahradit..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "v cestě..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "v cílové cestě..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "v cestě a cílové cestě..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...vše, od A do Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pouze jednu skupinu položek" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Seřadit pouze jednu skupinu položek" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...obsah vybrané podnabídky, ne podúrovně" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...obsah vybrané podnabídky, a všech podúrovní" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Otestovat výsledné zobrazení nabídky" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "adresář, budu psát" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Přidat adresář, budeme dopňovat" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Vložit adresář, budeme doplňovat" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Přidá z hlavního panelu:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Vždy se zeptat, který z podporovaných formátů se má použít" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Při ukládání textu Unicode ho uloží ve formátu UTF8 (jinak v UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Po upuštění textu, generovat název souboru automaticky (jinak vyzve uživatele)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Zobrazit potvrzovací dialog po upuštění" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Když přetáhnete text na záložky:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Umístěte nejžádanější formát v seznamu nahoru (použijte přetáhnutí):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(v případě, že nejžádanější není přítomen, vezmeme druhý formát atd.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(pokud nastane z nějakého důvodu problém s aplikací, zkuste zrušit zaškrtnutí)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Zobrazit &souborový systém" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Zobrazit vol&né místo" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Zobrazit &štítek" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Seznam disků" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Stříšku podél konci řádku" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Zobrazit speciální znaky" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti interního editoru" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Po&zadí" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Po&zadí" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Obnovit" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Uložit" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributy prvku" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Po&předí" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Po&předí" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Text-značka" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Použít (a upravit) &globální systém nastavení" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Použít &místní systém nastavení" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Tučný" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Kurzíva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Vyškrtnout" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podtrhnout" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Pře&vrátit" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Vy&pnout" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Za&pnout" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Přidat..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Vymazat..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Importovat/Exportovat" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Vložit..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Seřadit..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Žádná" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Vždy rozbalit strom" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Seznam oblíbených záložek (lze přeskupit přetáhnutím)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Další možnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Co kam obnovit pro vybranou položku:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Zachovat existující záložku:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Uložit historii adresáře:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Záložky uložené vlevo budou obnoveny do:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Záložky uložené vpravo budou obnoveny do:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "oddělovač" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Přidat oddělovač" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "podnabídku" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Přidat podnabídku" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Sbalit vše" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...pouze aktuální úroveň z vybraných položek" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Vyjmout" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "vymazat vše!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "podnabídku a všechny její prvky" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "jen podnabídky, prvky zůstanou" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "vybranou položku" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Smazat vybranou položku" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Exportovat zvolené do starších souborů .tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Importovat starší .tab soubor(y) podle výchozího nastavení" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovat starší .tab soubor(y) na vybranou pozici" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Importovat starší .tab soubor(y) na vybranou pozici" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Importovat starší .tab soubor(y) na vybranou pozici v podnabídce" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Vložit oddělovač" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Vložit podnabídku" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Otevřít všechny položky" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Vložit" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Přejmenovat" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...vše, od A do Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...pouze jednu skupinu položek" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Seřadit pouze jednu skupinu položek" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...obsah vybrané podnabídky, ne podúrovně" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...obsah vybrané podnabídky, a všech podúrovní" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Otestovat výsledné zobrazení nabídky" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Přidat" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Přidat" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Klonovat" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Dolů" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edit" msgstr "Upravit" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Vložit" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "Insert" msgstr "Vložit" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Sma&zat" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Sm&azat" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Př&ejmenovat" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Nahoru" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Výchozí cesta k příkazu. Nikdy tento řetězec nevkládat do uvovozovek." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Název akce. Není nikdy předán do systému, je to jen symbolické jméno vybrané od vás, pro vás" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "Parametr bude předán příkazu. Dlouhý název s mezerami by měly být uzavřen do uvozovek." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "Příkaz k vykonání. Dlouhý název s mezerou by měly být uzavřen do uvozovek." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Popis akce:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Akce" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Přípony" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Může být seřazeno přetáhnutím" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Typy souborů" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Akce mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Přípony mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Typy souborů mohou být seřazeny přetáhnutím" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "Název akce:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Příkaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&y:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Výchozí cesta:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Výchozí cest&a:" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "TFRMOPTIONSFILEASSOC.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Vlastní s..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Vlastní" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Upravit" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Otevřít v editoru" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Upravit s..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Získat výstup příkazu" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Otevřít s vnitřním editorem" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Otevřít s vnitřním prohlížečem" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otevřít" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Otevřít s..." #: tfrmoptionsfileassoc.miseparator.caption msgctxt "TFRMOPTIONSFILEASSOC.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "Spustit v terminálu" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Zobrazit" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "Otevřít v prohlížeči" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Zobrazit s..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klikni pro změnu ikony!" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "Spustit přes shell" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Rozšířená místní nabídka" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Při přidružení souboru, nabídne přidat aktuální vybraný soubor, pokud již není zahrnut v seznamu nakonfigurovaných typů souboru" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfigurační soubor přidružení" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Nabídnout přidání přidružení souboru, pokud již není zahrnutý" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint #, fuzzy msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Při přidružení souboru, nabídne přidat aktuální vybraný soubor, pokud již není zahrnut v seznamu nakonfigurovaných typů souboru" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "Spustit přes terminál a zavřít" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "Spustit přes terminál a ponechat otevřený" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Rozšířené položky:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION" msgid "Show confirmation window for:" msgstr "Zobrazit potvrzovací okno pro:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopí&rovat operaci" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Smazat operaci" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Odstra&nit do koše (klávesa Shift převrací toto nastavení)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "V&yhodit operaci do koše" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Z&rušit příznak jen pro čtení" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Přesunout operaci" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Hledat část jména souboru" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Zpracovat komentáře složek/souborů" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Při přejmenování vybrat pouze název &souboru (bez přípony)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Zobra&zit výběr záložky v dialogu kopírovat/přesunout" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "P&řeskočit chyby a zapsat je do okna protokolu" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Hledání textu v souborech" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Provádění operací" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Hledání souborů" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Uživatelské rozhraní" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Velikost vyrovnávací paměti pro operace se soubory (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Velikost vyrovnávací paměti pro výpočet &hash (v KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Zobrazit pokrok v operacích &zpočátku v" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Výchozí šablona vyhledávání:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION" msgid "Duplicated name auto-rename style:" msgstr "Styl stejného názvu souboru u automatického přejmenování:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Počet nevratně mazacích průchodů:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Použít mapování paměti pro hledání te&xtu v souborech" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Použit proud pro hledání textu v souborech" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Obnovit DC na výchozí" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Povolit barvu přes" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Použít oh&raničení kurzoru" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Použít ukazatel &barevného přechodu" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Barva pro výběr neaktivního" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "P&oužít obrácený výběr" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Ohraničení kurzoru" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Ukazatel volného místa na disku " #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Poz&adí:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Poz&adí 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "B&arva kurzoru:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xt kurzoru:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Barva neaktivního kurzoru:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Barva neaktivního označení:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "&Úroveň jasu neaktivního panelu" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Uka&zatel barvy pozadí:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "U&kazatel barvy popředí:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Barva označených:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Níže je náhled. Můžeme pohybovat kurzorem a vybrat soubory, a okamžitě získáme aktuální vzhled podle různých nastavení." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "B&arva písma:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Nevklá&dat seznam souborů, dokud se karta neaktivuje" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "N&ázvy adresářů v hranatých závorkách" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Zvý&raznit nové a aktualizované soubory" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Povoli&t při dvojkliknutí na název přejmenování" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Načíst &seznam souborů v odděleném vlákně" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Načíst ikony p&o seznam souborů" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Zobrazit s&ystémové a skryté soubory" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Při výběru souboru <mezerníkem> posunout kurzor dolů na další soubor, jako při výběru klávesou <Insert>" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formátování" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Řazení" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "R&ozlišovat velikost:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nesprávný formát" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Formát data a času:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formát veli&kosti souboru:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Vložit nové soubory" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Řazení a&dresářů:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metoda řazení" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Přesun aktualizovaných souborů" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "V&ymazat" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablony..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Barvy typů souborů (lze seřadit přetáhnutím)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributy kategorií:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Ba&rva kategorie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Název kategorie:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Pí&smo konzoly" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Písmo &editoru" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Písmo protokolu" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Hlavní &písmo" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "&Knižní písmo prohlížeče" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "&Písmo prohlížeče" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Přidat &klávesovou zkratku" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Vymazat klávesovou zkratku" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Upravit klávesovou zkratku" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtr" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "K&ategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Př&íkazy:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Soubory zástupců:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[0].TITLE.CAPTION" msgid "Command" msgstr "Příkaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[1].TITLE.CAPTION" msgid "Hotkeys" msgstr "Klávesové zkratky" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[2].TITLE.CAPTION" msgid "Description" msgstr "Popis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Klávesová zkratka" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parametry" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Ovládací prvky" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Pro následující &cesty a jejich podadresáře:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Zobrazit ikony pro akce v &nabídkách" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Zobrazit p&řekryvné i&kony, např. pro odkazy" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Zakázat speciální ikony" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikony v nabídkách" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Velikost ikon " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Zobrazit ikony nalevo od názvu souboru " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "V&še" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Všechny přidružení + &EXE/LNK (pomalé)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Pouze &standardní ikony" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "P&řidat vybrané názvy" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Přidat označené názvy s ú&plnou cestou" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorovat (nezobrazovat) následující soubory a složky:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Uložit v:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Šip&ky vlevo a vpravo mění adresář (jako pohyb v Lynxu)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Psaní" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+P&ísmena" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Pís&mena" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Písmena" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Plochá tlačítka" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ploché &rozhraní" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Plochá t&lačítka" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Zobrazovat ukazatel vol&ného místa v označení disku" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Zobrazit okno protokol&u" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Zobrazovat panel operací na pozadí" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Zobrazovat běžný průběh v liště nabídky" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Zobrazit příkazový řá&dek" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Zobrazit aktuální adresá&ř" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Zobrazit &tlačítka disků" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Zobrazit štítek vol&ného místa" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Zobrazit tlačí&tko seznamu disků" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Zobrazit funkční &tlačítka" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Zobrazit &hlavní nabídku" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Zobrazit &tlačítkovou lištu" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Krátce vypsat &štítek volného místa " #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Zobrazit &stavový řádek" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Z&obrazit záhlaví tabulátoru" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Zobrazit &záložky adresářů" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Zobrazit okno te&rminálu" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zobrazit 2 seznamy disků (pe&vná šířka, nad souborovými okny)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Vzhled obrazovky" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Zobrazí obsah souboru s protokolem" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Název souboru bude obsahovat datum" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Komprese/Dekomprese" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Spuštění externího příkazového řádku" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopírování/přesun/vytvoření odkazu/s&ymbolický odkaz" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Tvor&ba/Mazání adresářů" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Zaznamenávat &chyby" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "V&ytvořit soubor protokolu:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Protokol &informačních zpráv" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Spuštění/vypnutí" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Protokol &dokončených operací" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Doplňky souborového systému" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Protokol souborových operací" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Protokol operací" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stav operace" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Odstranit miniatury už existujících souborů" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "Zobrazí obsah souboru s protokolem" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Vždy &jít do kořenového adresáře při výměně disků" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Zobrazit &varovné zprávy (pouze tlačítko \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Uložit miniatury ve vyrovnávací paměti" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniatury" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Exportování/importování TC:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurační soubor:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Spouštění TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Výstupní cesta nástrojové lišty:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixelů" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Velikost náhledů" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Výběr myší" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Rolování" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Výběr" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Režim:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Řádek po řádku" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Řádek po řádku &s posunem kurzoru" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stránka po stránce" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Kon&figurovat" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "P&ovolit" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Smazat" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "&Vylepšení" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Vyhle&dávací doplňky umožňují použití při hledání alternativních vyhledávacích algoritmů nebo externích nástrojů (např. \"najít \", atd.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Komp&rimační doplňky pro práci s archívy." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Obsahové dop&lňky umožňují zobrazit rozšířené informace jako jsou MP3 značky nebo atributy obrázků v seznamu souborů, nebo je používat při vyhledávání a s nástrojem hromadného přejmenování" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Doplňky sou&borových systémů umožní přístup na běžně nedostupná média jako jsou například externí zařízení Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Zobra&zovací doplňky umožňují prohlížení souborů jako jsou například obrázky, databáze a podobně v prohlížeči (F3, nebo Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Aktivní" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Doplněk" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Registrováno pro" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "&Vyhledávací doplňky (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Kom&primační doplňky (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Obsahové do&plňky (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "D&oplňky souborových systémů (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "&Zobrazovací doplňky (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Začátek (název musí začínat zadaným znakem)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Konec (poslední znak před . musí odpovídat zadanému)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Odpovídá přesně jménu" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Hledat znaky" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Hledání těchto položek" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Neměnit přejmenovaný název pokud odemkneme záložku" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktivovat cílový &panel při kliknutí na jeho libovolnou záložku" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Zobrazit záložku, i když bude pouze 1" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Zavřít stejné záložky při ukončování aplikace" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Potv&rdit uzavření všech záložek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potvrdit zavření uzamčené záložky" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Omezit šířku záložky na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Zobrazit uzamčené záložky se znakem *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Záložky na více řádků" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Nahoru otevře novou záložku na pozadí" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otevřít &novou záložku vedle aktuální" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Znovu použít existující záložku, pokud je to možné" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Na zálož&kách i tlačítko zavřít" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Záhlaví záložek" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znaky" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Akce k provedení když poklikáme na záložku:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Pozice zá&ložek" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Žádná" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Jít na konfiguraci oblíbených záložek po znovuuložení" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Jít na konfiguraci oblíbených záložek po uložení nové" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Povolit další možnosti oblíbených záložek (volba cílové strany při obnově, atd.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Další možnosti pro ukládání nových oblíbených záložek:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Záhlaví záložek adresářů" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Při obnově záložek, zachovat stávající záložky:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Záložky uložené vlevo budou obnoveny:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Záložky uložené vpravo budou obnoveny:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Výchozí umístění v menu při ukládání nové oblíbené záložky:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Příkaz pouze pro spuštění terminálu:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Příkaz pro spuštění v terminálu a terminál se zavře:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Příkaz pro spuštění v terminálu a terminál zůstane otevřený:" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSECMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zde za normálních okolností znovu předloží příkaz, který chcete spustit v terminálu" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zde za normálních okolností znovu předloží příkaz, který chcete spustit v terminálu" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Příkaz:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Parametry:" #: tfrmoptionsterminal.ledtruntermparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} zde za normálních okolností znovu předloží příkaz, který chcete spustit v terminálu" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "K&lonovat tlačítko" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Vymazat" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Upravit kláveso&vou zkratku" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Vložit nové tlačítko" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Vybrat" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "Ostatní..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Odstranit kláveso&vou zkratku" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Navrhnout" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC navrhne popisek založený na typu tlačítka, příkazu a parametru" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Plochá tlačítka" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Oznámit chyby a příkazy" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Zadejte parametry příkazů, každý na samostatném řádku. Stisknutím klávesy F1 zobrazíte nápovědu k parametrům." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Vzhled" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "&Velikost lišty:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Příka&z" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&y:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Nápověda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Klávesová zkratka:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ik&ona:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Ve&likost ikony:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Pří&kaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametry" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Výchozí cest&a:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Nástro&jový tip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "přidat nástrojovou lištu s VŠEMI příkazy DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "pro externí příkaz" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "pro vnitřní příkaz" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "pro oddělovač" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "pro podnabídku nástrojové lišty" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Zálohovat..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Exportovat..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuální nástrojovou lištu..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (neměnit existující)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (smazat existující)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Horní nástrojovou lištu..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Uložit zálohu nástrojové lišty" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "do souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "do souboru .BAR z TC (neměnit existující)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "do souboru .BAR z TC (smazat existující)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "do \"wincmd.ini\" z TC (neměnit existující)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "do \"wincmd.ini\" z TC (smazat existující)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Importovat..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovit zálohu nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "z souboru nástrojové lišty (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "z jednoho .BAR souboru od TC..." #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "z \"wincmd.ini\" od TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "přidat do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "přidat novou lištu do aktuální nástrojové lišty" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "přidat novou lištu do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "přidat do horní nástrojové lišty" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "nahradit horní nástrojovou lištu" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Vyhledat a nahradit..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "ve všech výše uvedených ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "ve všech příkazech..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "ve všech názvech ikon..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "ve všech parametrech..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "ve všech spouštěcích cestách..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "hned za aktuální výběr" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "jako první prvek" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "jako poslední prvek" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "hned před aktuální výběr" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačítka" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Po vykonání programu ponechat okno terminálu otevřené" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Vykonat v terminálu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Použít externí program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "D&oplňující parametry" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Cesta programu k vykonání" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "P&řidat" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "P&oužít" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "V&ymazat" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablona..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Zobrazit nástrojový tip" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Vlastní pole podle typu souboru" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Pokyn &kategorie:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Maska &kategorie:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Název kategorie:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Režim knihy prohlížeče" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Ukázka" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Barva pozadí v prohlížeči knih" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Barva písma v prohlížeči knih" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Počet sloupců v prohlížeči knih" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Konfi&gurovat" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Komprimovat soubory" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "V&ytvořit oddělené archívy, jeden na vybraný soubor/adresář" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbalovací archív" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Zaši&frovat" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Pře&sunout do archívu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Vícesvazkový archív" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "N&ejdříve vložit do TAR archívu" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Také kom&primovat se jmény cest (pouze rekurzivně)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Komprimovat soubor(y) do souboru:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Komprimátor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Rozbalit &vše a spustit" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Rozbalit a spustit" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Vlastnosti komprimovaného souboru" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributy:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimační poměr:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metoda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Původní velikost:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Soubor:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Zkomprimovaná velikost:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Komprimátor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zavřít panel filtru" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Zadejte text, který chcete vyhledat nebo filtrovat podle" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Rozlišovat velikost znaků" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Adresáře" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Soubory" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Srovnání začíná" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Srovnání končí" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtr" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Přepnout mezi hledaním nebo filtrováním" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Více pra&videl" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Méně pravid&el" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Použít obsahové doplňky, v kombina&ci s:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Doplněk" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Pole" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Operátor" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Hodnota" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (všechny shody)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (některé shody)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zavřít" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Nápověda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Vyberte znaky k vložení:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Změnit atributy" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archív" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Vytvořeno:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skryté" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Zpřístupněno:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Změněno:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Pouze pro čtení" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Včetně podsložek" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Systém" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Vlastnosti časové známky" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributy" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitů:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(šedá pole znamenají nezměněné hodnoty)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustit" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(šedá pole znamenají nezměněné hodnoty)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmičkově:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čtení" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Některé funkce pro výběr příslušné cesty" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Dělení souborů" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Vyžadovat kontrolní soubor CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Název souboru" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Velikost a počet částí" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "&Cílový adresář" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Zdrojový &soubor" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Počet částí" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajtů" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabajtů" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobajtů" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabajtů" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Sestavení" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operační systém" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revize" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Verze" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Vytvořit symbolický odkaz" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cíl, na který bude odkaz ukazovat" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Název odkazu" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zavřít" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizovat" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizovat adresáře" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymetricky" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "podle obsahu" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorovat datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "pouze vybrané" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "podadresáře" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Zobrazit:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Název" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Název" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(v hlavním okně)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnat" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Zobrazit levý" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Zobrazit pravý" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "stejné" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "samostatné" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klikněte prosím pro spuštění na \"Porovnat\"" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synchronizovat" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Ověření přepsání" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "P&řidat nový" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušit" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Z&měnit" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Vý&chozí" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Odstranit" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Vylepšovací doplněk" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Zj&istí typ archívu podle obsahu" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Může ma&zat soubory" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Po&dporuje šifrování" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Zobra&zen jako normální soubory (skrýt ikonu komprimátoru)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podporuje kom&primaci v paměti" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Může &měnit stávající archívy" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Archiv může obsahovat více souborů" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Může vytvářet nové arch&ívy" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "P&odporuje okno s možnostmi" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Umožňuje vyhledáván&í textu v archívu" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Popis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etekovaný text:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Přípona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Příznaky:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Název:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Doplněk:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Doplněk:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O prohlížeči..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zobrazit zprávu o programu" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopírovat soubor" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopírovat soubor" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Vymazat soubor" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Vymazat soubor" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Další" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Načíst další soubor" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Předešlý" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Načíst předchozí soubor" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Zrcadlit" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Zrcadlit" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Přesunout soubor" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Přesunout soubor" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Obnovit" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Znovu načíst aktuální soubor" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Otočit 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Otočit 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Otočit 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Otočit 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Otočit 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Otočit 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Uložit jako..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Uložit soubor jako..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Přizpůsobit" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Roztáhnout obrázek" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopírovat" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopírovat" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Oříznout" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Vymazat" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Vymazat" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýraznění" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Zrcadlit" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Přesunout" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Přesunout" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Kreslit" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Změnit velikost" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Zpět" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Přiblížit" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Oddálit" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Prohlížeč" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prohlídka" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pero" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zvýraznění" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Kreslit" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prohlídka" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Zobrazit" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Zobrazit &binárně" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopírovat do schránky" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Upravit" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dování" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Konec" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Soubor" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafika" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Zobrazit &hexadecimálně" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Obrázek" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Zobrazit jako &knížku" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Zrcadlit" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Doplňky" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Náhled" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Tisk..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Otočit" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Uložit" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Uložit jako..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Snímek obrazovky" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Hledat" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Hledat další" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Hledat předchozí" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat vše" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Přizpůsobit" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Zobrazit jako &text" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Zobrazit" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Zobrazit &jako zalamovaný text" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Přiblížit" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Oddálit" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopírovat do schránky" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat vše" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Začít" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "S&top" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Souborové operace" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vždy navrchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Použijte \"přetáhnutí\" pro přesunutí operací mezi frontami" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Zrušit" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nová fronta" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Zobrazit v samostatném okně" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Vložit první ve frontě" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Vložit poslední ve frontě" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Fronta" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Mimo frontu" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Fronta 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Fronta 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Fronta 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Fronta 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Fronta 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Zobrazit v samostatném okně" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pozastavit vše" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Práce v pozadí (samostatné přípojení)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Pokud soubor existuje" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Tento soubor nelze nalézt, a mohl by pomoci ověřit konečné kombinace souborů:\n" "%s\n" "\n" "Mohl byste ho dát jen k dispozici, a kliknout tlačítko \"OK\", pokud jste připraveni,\n" "nebo pokračovat bez něj kliknutím na \"ZRUŠIT\"?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Zrušit rychlý filtr" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Zrušit aktuální operaci" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Zadejte název souboru s příponou, pro upuštění textu" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formát textu pro import" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Rozbitý:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Obecné:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Chybějící:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Chyba čtení:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Úspěšný:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Zadejte kontrolní součet a vyberte algoritmus:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Ověřit kontrolní součet" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Celkem:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schránka neobsahuje žádné platné údaje z nástrojové lišty." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Vše;Aktivní záložka;Levá záložka;Pravá záložka;Činnosti souboru;Konfigurace;Síť;Různé;Paralelní port;Tisk;Výběr;Bezpečnost;Schránka;FTP;Navigace;Nápověda;Okno;Příkazový řádek;Nástroje;Zobrazit;Uživatel;Záložky;Řazení;Protokol" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Starší řazení;Řazení A-Z" #: ulng.rscolattr msgid "Attr" msgstr "Atr." #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Přípona" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Název" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Velikost" #: ulng.rsconfcolalign msgid "Align" msgstr "Zarovnat" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nadpis" #: ulng.rsconfcolconfig msgid "Config" msgstr "Nastavit" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Vymazat" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Detaily položky" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Přesunout" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Šířka" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Nastavení sloupců" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Konfigurace přidružení souborů" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopírovat (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importovaná nástrojová lišta DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importovaná nástrojová lišta TC" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr " Přidáno: " #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Smazáno: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Tyto dva soubory jsou stejné!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Shodných: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Upravených: " #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Všechny operace dokončeny" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Průběh všech operací %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Př&erušit" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Vše" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Připojit" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomatické přejmenování zdrojových souborů" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Zrušit" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Pokračovat" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopírovat &do" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopírovat do &Vše" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "U&končit program" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorovat vše" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Žád&ný" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Os&tatní" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Přepsat" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Přepsat &Vše" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Přepsat všechno &větší" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Přepsat Vše s&tarší" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Přepsat všechno &menší" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "S&mazat" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Znovu začít" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "O&pakovat" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Pře&skočit" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Přes&kočit vše" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ano" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Spočítat soubory a adresáře" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Výpočet kontrolního součtu..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Kontrola kontrolního součtu..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopírovat soubor(y)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Smazat soubor(y)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Přesunout soubor(y)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Poza&stavit" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Spustit" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Fronta" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Rychlost %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Rychlost %s/s, zbývající čas %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Dělení" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Nevratně smazat soubor(y)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<bez štítku>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<žádné médium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Vnitřní editor Double Commanderu." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Jít na řádek:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Jít na řádek" #: ulng.rseditnewfile msgid "new.txt" msgstr "nový.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Název souboru:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otevřít soubor" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vzad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Hledat" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "V&před" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Nahradit" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "s externím prohlížečem" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "s vnitřním prohlížečem" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Spustit přes shell" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Spustit přes terminál a zavřít" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Spustit přes terminál a ponechat otevřené" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Vlevo;Vpravo;V aktivním;V neaktivním;V obojím;V žádným" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Ne;Ano" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportováno_z_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Zeptat se;Přepsat;Kopírovat do;Přeskočit" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Zeptat se;Přepsat;Přepsat starší;Přeskočit" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Zeptat se;Už nenastavovat;Ignorovat chyby" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTR" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Určit šablonu" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s úrovní" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "vše (neomezená hloubka)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "pouze aktuální adresář" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Adresář %s neexistuje!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Nalezeno: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Uložit vyhledávací šablonu" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Název šablony:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Prohledáno: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Prohledávám" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Hledat soubory" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začít v" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Volno %s z %s bytů" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bajtů volných" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum/čas přístupu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributy" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Komentář" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimovaná velikost" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum/čas vytvoření" #: ulng.rsfuncext msgid "Extension" msgstr "Rozšíření" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Datum/čas změny" #: ulng.rsfunclinkto msgid "Link to" msgstr "Napojit na" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum/čas úpravy" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Název" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Název bez přípony" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlastník" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cesta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Velikost" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Chyba při vytváření hardlinku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "Žádná;Název, a-z;Název, z-a;Přípona, a-z;Přípona, z-a;Velikost 9-0;Velikost 0-9;Datum 9-0;Datum 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Bohužel, není nic detekováno pro import!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Varování! Při obnově záložního souboru .hotlist, tento bude smazán a nahrazen jiným.\n" "\n" "Jste si skutečně jisti, že chcete pokračovat?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopírovat/Přesunout dialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Rozdílné" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Dialogové okno upravit komentář" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Hledat soubory" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hlavní" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Prohlížeč" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Nemohu najít odkaz na výchozí BAR soubor" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Spojování dokončeno" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska zrušení výběru" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska výběru" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Vstupní maska:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Zobrazené sloupce s tímto názvem již existují." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Chceme-li změnit aktuální úpravy sloupců, použijeme buďto ULOŽIT, KOPÍROVAT nebo SMAZAT" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Nastavit uživatelské sloupce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Zadejte nový název vlastních sloupců" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Nastavit vlastní sloupcové zobrazení" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akce" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Upravit" #: ulng.rsmnueject msgid "Eject" msgstr "Vysunout" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Rozbalit zde..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Připojit" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nový" #: ulng.rsmnunomedia msgid "No media available" msgstr "Žádné dostupné médium" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otevřít" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Otevřít s" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Ostatní..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Zabalit zde..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Řadit podle" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odpojit" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Zobrazit" #: ulng.rsmsgaccount msgid "Account:" msgstr "Účet:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Doplňující parametry pro archivátor příkazové řádky:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Špatný výsledek CRC32 pro soubor:\n" "\"%s\"\n" "\n" "Přejete si ponechat výsledný poškozený soubor?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nemůžete kopírovat/přesunout soubor \"%s\" do sebe!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nelze odstranit adresář %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Změna adresáře na [%s] selhala!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Odstranit všechny neaktivní záložky?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Záložka (%s) je uzamčena! Přesto zavřít?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se sloupcového zobrazení byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Opravdu chcete skončit?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Kopírovat %d vybraných souborů/adresářů?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopírovat vybrané \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Vytvořit nový typ souboru pro \"soubory %s\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Zadejte umístění a název souboru pro uložení souboru nástrojové lišty DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Vlastní akce" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Odstranit částečně zkopírovaný soubor ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Vymazat %d vybrané soubory / adresáře?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Vymazat %d vybraných souborů/adresářů do koše?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Vymazat vybrané \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Přesunout vybrané \"%s\" do koše?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nelze odstranit \"%s\" do koše! Odstranit přímo?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk není dostupný" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Možnosti týkající se přetáhnutí myší byly změněny. Chcete je před ukončením uložit?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Vlastní název akce:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Zadejte příponu souboru:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Zadejte název:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Vložte název pro vytvoření nového typu souboru pro příponu \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC chyba v datech archívu" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Špatná data" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nelze se připojit k serveru: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nelze zkopírovat soubor %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Již existuje adresář jménem \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s není podporován" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Adresář %s existuje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Operace přerušena uživatelem" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Chyba při uzavírání souboru" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nelze vytvořit soubor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V archívu nejsou žádné další soubory" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nelze otevřít existující soubor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Chyba při čtení ze souboru" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Chyba při zápisu do souboru" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Nelze vytvořit adresář %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Nesprávný odkaz" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Soubory neexistují" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nedostatek paměti" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkce není podporována!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Chyba v příkazu místní nabídky" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Chyba při načítání nastavení" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Chyba syntaxe v regulárním výrazu!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nelze přejmenovat soubor %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nelze uložit přidružení!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nelze uložit soubor" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nelze nastavit atributy pro \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nelze nastavit datum/čas pro \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nelze nastavit vlastníka/skupinu pro \"%s \"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Oprávnění pro \"%s\" nelze nastavit" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Vyrovnávací paměť je příliš malá" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Příliš mnoho souborů pro kompresi" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Neznámý formát archívu" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Jste si jisti že chcete vymazat všechny položky oblíbených záložek? (Neexistuje krok \"zpět\" pro tuto akci!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Přetáhněte sem další položky" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(konec v podnabídce) " #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "Zadání názvu záložky mezi oblíbené" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Uloží novou záložku mezi oblíbené" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Chyba načítání oblíbených záložek..." #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Chyba ukládání oblíbených záložek..." #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Počet úspěšně exportovaných oblíbených záložek: %d z %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Další nastavení u uložení historii složek pro nové oblíbené záložky:" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "Oblíbené záložky byly přidány do paměti!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Počet úspěšně importovaných souborů: %d z %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Poslední změny oblíbených záložek dosud nebyly uloženy. Chcete je před pokračováním uložit?" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "Možnosti týkající se oblíbených záložek byly upraveny. Chcete je před ukončením uložit?" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Název" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Název nabídky:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(oddělovač)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Název podnabídky" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Uložit aktuální záložku do existující oblíbené záložky" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Soubor týkající se dalšího přidružení souborů byl změněn.\n" "\n" "Chcete ho před ukončením uložit?\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Soubor týkající se přidružení souborů byl změněn.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Soubor %s byl změněn, uložit?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtů, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Přepsat:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Soubor %s existuje, přepsat?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Souborem:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Soubor \"%s\" nebyl nalezen." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktivní souborové operace)" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Některé souborové operace nejsou dokončeny. Uzavření Double Commanderu může vést ke ztrátě dat." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Možnosti týkající se činnosti souborů byly upraveny. Chcete je před ukončením uložit?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se barvy panelu byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Soubor %s je pouze ke čtení! Přesto vymazat?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Velikost souboru \"%s\" je příliš velká pro cílový souborový systém!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Složka %s existuje, přepsat?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Následovat symbolický odkaz \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Vyberte formát textu pro import" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Přidat %d vybraných adresářů" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Přidat vybraný adresář: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Přidat aktuální adresář: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Provést příkaz" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_jakýkoliv" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Nastavit rychlé adresáře" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Jste si jisti že chcete vymazat všechny položky Rychlého adresáře? (U této akce neexistuje krok \"zpět\"!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Spustí následující příkaz:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Toto je rychlý adresář pojmenovaný " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Změní aktivní rám do následující cesty:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "A neaktivní rám může zmenit do následující cesty:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Chyba položky zálohování..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Chyba položky exportu..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportovat vše!!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Export rychlého adresáře - Vyberte položku pro export" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Export vybraného" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importovat vše!!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Import rychlého adresáře - vyberte položky pro import" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importovat vybrané" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Cesta" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Nalezení souboru \".hotlist\" pro import" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Rychlé adresáře byly upraveny, Chcete je před uzavřením uložit?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Název rychlého adresáře" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Počet nových položek: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Pro import není nic vybráno!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Cesta rychlého adresáře" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Znovu přidat vybraný adresář: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Znovu přidat aktuální adresář: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Zadejte umístění a název souboru pro obnovu hotlist" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Příkaz:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(konec v podnabídce)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Název nabídky:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Název:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(oddělovač)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Název podnabídky" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cíl rychlého adresáře" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Určete, zda má být aktivní rám seřazen v specifikovaném pořadí po změně adresáře" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Určete, zda má být neaktivní rám seřazen v specifikovaném pořadí po změně adresáře" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Některé funkce pro výběr příslušné relativní nebo absolutní cesty, speciální složky Windows, atd." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Celkem uložených položek: %d\n" "\n" "Název souboru se zálohou: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Celkem exportovaných položek: " #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Chcete smazat všechny prvky uvnitř podnabídky [%s]?\n" "Odpověď NE smaže pouze oddělovače nabídky, ale nezmění prvek uvnitř podnabídky.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Zadání umístění a názvu souboru pro uložení souboru hotlist" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Neplatný výsledek délky souboru pro soubor: \"%s\"" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Vložte prosím další disk nebo něco podobného.\n" "\n" "To umožní zapsání tohoto souboru:\n" "\"%s\"\n" "\n" "Počet bytů stále potřebných zapsat: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Chyba v příkazovém řádku" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nesprávný název souboru" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neplatný formát konfiguračního souboru" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neplatná cesta" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Cesta %s obsahuje nepovolené znaky." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Toto není platný doplněk!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Tento plugin je vyvinut pro Double Commander pro %s.%s Nemůže pracovat s Double Commander pro %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neplatná citace" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Nesprávný výběr." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Načítání seznamu souborů..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Nalezení konfiguračního souboru TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Nalezení spustitelného souboru TC (totalcmd.exe nebo totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopírovat soubor %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Smazán soubor %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Chyba: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Externě spuštěno" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Výsledek externího" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Rozbalit soubor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Vytvořit odkaz %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Vytvořit adresář %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Přesunout soubor %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se protokolu byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Komprimovat do souboru %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstranit adresář %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Vytvořit symbolický odkaz %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testovat integritu souboru %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Nevratně smaže soubor %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Nevratně smaže adresář %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hlavní heslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prosíme zadejte hlavní heslo:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Různé možnosti byly upraveny. Chcete je před ukončením uložit?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nový soubor" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Další část bude rozbalena" #: ulng.rsmsgnofiles msgid "No files" msgstr "Žádné soubory" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nejsou vybrány žádné soubory." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Není dostatek volného místa na cílovém disku! Pokračovat?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Není dostatek volného místa na cílovém disku! Opakovat?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Nelze vymazat soubor %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Není implementováno." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Níže je náhled. Můžeme pohybovat kurzorem a vybrat soubory, a okamžitě získáme aktuální vzhled podle různých nastavení." #: ulng.rsmsgpassword msgid "Password:" msgstr "Heslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Hesla jsou rozdílná!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Prosíme zadejte heslo" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Heslo (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prosíme zopakujte heslo pro ověření:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Přidat %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Nastavit" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Vymazat %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Předvolba \"%s\" již existuje. Nahradit?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problém při vykonávání příkazu (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Název souboru pro upuštěný text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Prosím, vytvořte tento soubor dostupný. Zopakovat?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Vložte nový název pro tuto oblíbenou záložku" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Vložte nový název pro tuto nabídku" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Přejmenovat/přesunout %d vybraných souborů/adresářů?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Přejmenovat/přesunout vybrané \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Pro provedení změn prosím restartujte Double Commander" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Zvolte ke kterému typu souboru přiřadit příponu \"%s\"" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Vybráno: %s z %s, souborů: %d z %d, složek: %d z %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Výběr spustitelného souboru pro" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Prosím vyberte pouze soubory s kontrolním součtem!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prosím vyberte umístění další části" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Nastavit název disku" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Speciální adresář" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Přidat cestu z aktivního rámu" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Přidat cestu z neaktivního rámu" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Procházet a použít vybranou cestu" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Použít proměnnou prostředí..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Jít do speciální cesty Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Jít do prostředí proměnných..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Jít do jiné speciální složky Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Jít do speciální složky Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Vytvořit absolutní cestu" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Vytvořit relativní speciální cestu Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Vytvořit relativní proměnné prostředí..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Vytvořit relativní speciální složku Windows (TC)... " #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Vytvořit jinou relativní speciální složku Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Použít speciální cestu Double Commanderu..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Použít jinou speciální složku Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Použít speciální složku Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Záložka (%s) je uzamčena! Otevřít adresář v jiné záložce?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Přejmenovat záložku" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Název nové záložky:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se dalších záložek adresářů byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se oblíbených záložek byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cílová cesta:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Chyba! Nelze najít konfigurační soubor TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Chyba! Nelze najít spustitelnou konfiguraci TC:\n" "%s\n" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Chyba! TC je stále spuštěn, ale může být pro tuto činnost uzavřen.\n" "Ukončete ho a klikněte na OK nebo kliknutím na ZRUŠIT akci přerušte.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Chyba! Nelze najít požadovanou výstupní složku nástrojové lišty TC:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Zadání umístění a názvu souboru pro uložení souboru nástrojové lišty TC" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Možnosti týkající se terminálu byly změněny.\n" "\n" "Chcete je před ukončením uložit?\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" je nyní ve schránce" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Přípona souboru není v žádném z rozpoznaných typů" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Chyba! Problém s uložením nástrojové lišty!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Nalezení souboru \".toolbar\" pro import" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Nalezení souboru \".BAR\" pro import" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Nástrojová lišta byla upravena. Chcete ji před ukončením uložit?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Zadání umístění a názvu souboru pro obnovení nástrojové lišty" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Uloženo!\n" "Název souboru nástrojové lišty: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Vybráno příliš mnoho souborů." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<BEZ PŘÍPONY>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<BEZ NÁZVU>" #: ulng.rsmsgusername msgid "User name:" msgstr "Jméno uživatele:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Uživatelské jméno (firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Název disku:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prosím zadejte velikost disku:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Nevratně smazat %d vybraných souborů/adresářů?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Nevratně smazat \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "s" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Neměnit;VELKÁ;malá;1. znak velkým;1. znak každého slova velkým;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Přerušeno" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Přepočítávám kontrolní součet" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Přepočítávám kontrolní součet v \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Přepočítávám kontrolní součet z \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Počítání" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Probíhá výpočet \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Spojování" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Spojení obrázků v \"%s \" do \"%s \"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopírování" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírování z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírování \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváření adresáře" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Vytváření adresáře \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Mazání" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Mazání v \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Mazání \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Provádění" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Provádění \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbalování" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Rozbaluji z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Hotovo" #: ulng.rsoperlisting msgid "Listing" msgstr "Vypisování" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Vypisování \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Přesunování" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Přesunování z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Přesunování \"%s\" do \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nespuštěno" #: ulng.rsoperpacking msgid "Packing" msgstr "Zabalení" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Zabalení z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Zabalení \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pozastaveno" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pozastavuji" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Ve frontě" #: ulng.rsoperrunning msgid "Running" msgstr "Běží" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavení vlastnosti" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Nastavení vlastnosti v \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavení vlastnosti z \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Rozdělení" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Rozdělení \"%s\" do \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Spouštím" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zastaveno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zastavuji" #: ulng.rsopertesting msgid "Testing" msgstr "Testování" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Testování v \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Testování \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Ověřuji kontrolní součet" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Ověřuji kontrolní součet v \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Ověřuji kontrolní součet z \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čekání pro přístup k zdroji souboru" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čekám na reakci uživatele" #: ulng.rsoperwiping msgid "Wiping" msgstr "Otírání " #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Otírání v \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Otírání \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Práce" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Na začátek;Na konec;Chytře" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Smazat:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Rozbalit bez cesty:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Režim rozboru formátu:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Pozice ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Rozsah hledání ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parametr" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Dotazovací řetězec hesla:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Vytvořit samorozbalovací archív:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Název typu archívu:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Hodnota" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Asociovat doplněk \"%s\" s:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "První;Poslední;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klasicky, starší pořadí;Abecední pořadí (jazyk ale stále jako první)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Záložka aktivního rámu na levé straně, neaktivní na pravé (starší);Levá záložka rámu na levé straně, pravá na pravé" #: ulng.rsoptdisable msgid "Disable" msgstr "Zakázat" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Povolit" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Zadejte příponu" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Kurzor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Označit" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Značka + Kurzor" #: ulng.rsoptexampletext msgid "Text" msgstr "Text" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Přidat na začátek;Přidat na konec;Abecedně seřadit" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "samostatné okno;minimalizované samostatné okno;záložka operace" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "plovoucí;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Zkratka %s pro cm_Delete budou registrovány, takže jej lze použít ke obrácení tohoto nastavení." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Přidat klávesovou zkratku pro %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Přidat zástupce" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nelze nastavit zástupce" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Změnit zástupce" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Příkaz" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Zástupce %s pro cm_Delete má parametr, který přepíše toto nastavení. Chcete změnit tento parametr a použít globální nastavení?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Zástupce %s pro cm_Delete potřebuje mít parametr změněný, aby odpovídal zástupci %s. Chcete ho změnit?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Popis" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Změnit klávesovou zkratku pro %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Opravit parametr" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Klávesová zkratka" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Klávesové zkratky" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<žádná>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametry" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Nastavit zástupce ke smazání souboru" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pro toto nastavení, aby pracoval zástupce %s, musí zástupce %s být přiřazen cm_Delete, ale už byl přiřazen k %s. Chcete to změnit?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Zástupce %s pro cm_Delete je sekvence zkratek pro které nesmí být přidělena obrácená klávesová zkratka Shift. Toto nastavení nemusí fungovat." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Zástupci v použití" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Zástupce %s je již použit." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Změnit toto na %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "použito pro %s v %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "použito pro tento příkaz, ale s různými parametry" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archivátory" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatická obnova" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Chování" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Stručný" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Barvy" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Sloupce" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Nastavení" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Vlastní sloupce" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Rychlé adresáře" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Přetáhnutí" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tlačítko seznamu disků" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Oblíbené záložky" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Další přidružení souborů" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Přidružení souborů" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Souborové operace" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panely souborů" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Zobrazení souborů" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy souborů" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Záložky adresářů" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Další záložky adresářů" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Písma" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Zvýrazňovače" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Klávesové zkratky" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Seznam ignorování" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klávesy" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jazyk" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Rozvržení" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Protokol" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Různé" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Myš" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Doplňky" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Rychlé hledání/filtr" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Nástrojová lišta" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Nástroje" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Nástrojové tipy" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Žádný;Příkazová řádka;Rychlé hledání;Rychlý filtr" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Levé tlačítko;Pravé tlačítko;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "nahoře v seznamu souborů;po adresářích (pokud jsou adresáře řazeny před soubory);na řazené pozici;v dolní části seznamu souborů" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Doplněk %s již je přiřazen pro následující rozšíření:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktivní" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Název souboru" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Název" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrováno pro" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Citlivý;&Necitlivý" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Soubory;Ad&resáře;Soubory a& adresáře" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Skrýt panel filtru pokud není označen;Pozdržet ukládání úprav nastavení pro příští sezení" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nezáleží na velikosti znaků;podle místního nastavení (aAbBcC);první velká, poté malá písmena (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "seřadit podle názvu a zobrazit první;seřadit jako soubory a zobrazit první;seřadit jako soubory" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "abecedně, s ohledem na diakritiku;přirozené řazení: abecedně a čísla" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Nahoře;Dole;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "O&ddělovač;Vni&třní příkaz;V&nější příkaz;Nabíd&ka" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Starší DC - kopie (x) názevsouboru.ext;Windows - názevsouboru (x).ext;Ostatní - názevsouboru(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "neměnit pozici;použít stejné nastavení pro nové soubory;do řazené pozice" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Soubory: %d, složky: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nelze změnit přístupová práva pro \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Nelze změnit vlastníka pro \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Soubor" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Adresář" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Pojmenované roury" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Ne" #: ulng.rspropssocket msgid "Socket" msgstr "Zásuvka" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Zvláštní blokové zařízení" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Zvláštní znakové zařízení" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolický odkaz" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Neznámý typ" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ano (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Výsledky hledání" #: ulng.rssearchstatus msgid "SEARCH" msgstr "VYHLEDAT" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<nepojmenovaná šablona>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrat adresář" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Zobrazit nápovědu pro %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Vše" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Sloupec" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Příkaz" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Název souboru" #: ulng.rssimplewordfiles msgid "files" msgstr "soubory" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametr" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Náhled" #: ulng.rssimplewordresult msgid "Result" msgstr "Výsledek" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Uloženo!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "PracovníAdresář" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtů" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajtů" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajtů" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajtů" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajtů" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Souborů: %d, Adresářů: %d, Velikost: %s (%s bytů)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nelze vytvořit cílový adresář!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Neplatný formát velikosti souboru!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nelze rozdělit soubor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Počet částí je větší než 100! Pokračovat?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Výběr adresáře:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Chyba při vytváření zástupce." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Původní text" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Prostý text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Žádná;Zavřít záložku;Přístup k oblíbeným záložkám;Roletovou nabídku záložek" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dnů(í)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hodin(y)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(y)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Měsíc(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(y)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Týden(y)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok(y)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Přejmenování oblíbených záložek" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Přejmenování podnabídky oblíbených záložek" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Rozdílné" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Chyba otevření rozdílných" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Chyba otevření editoru" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Chyba otevření terminálu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Chyba otevření prohlížeče" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Prohlížeč" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prosíme nahlašte tuto chybu do sledovače chyb a popište, co jste dělali a následující soubor:%sStiskněte %s pro pokračování nebo %s pro přerušení programu." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "obě záložky, z aktivní do neaktivní" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "obě záložky, z levé do pravé" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "cesta k záložce" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "uzavřít každý název v závorkách, nebo v čem zrovna potřebujete" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "pouze název souboru, ne jeho přípona" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "kompletní název souboru (cesta + název souboru)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Nápověda k proměnným s \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "bude požadovat od uživatele zadání parametru s výchozí navrhovanou hodnotou" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "levá záložka" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "dočasný seznam názvů souborů" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "dočasný seznam úplných názvů souborů (cesta+název souboru)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "dočasný seznam názvů souborů s relativní cestou" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "pouze přípona souboru" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "pouze název souboru" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Další příklady toho, co je možné" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "cesta, s oddělovačem na konci" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "odtud až do konce řádku, bude proměnná ukazatele procent \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "vrátit procenta" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "odtud až do konce řádku, bude zpátky proměnná ukazatele procent \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "přidat před každý název \"-a \" nebo co zrovna potřebujete" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Vyzvat uživatele k zadání parametru;Výchozí navrhovaná hodnota]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "název souboru s relativní cestou" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "pravá záložka" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "úplnou cestu druhého vybraného souboru v pravém panelu" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "ukázat příkaz před spuštěním" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Jednoduchá zpráva]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "zobrazí jednoduchou zprávu" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "aktivní záložka (zdroj)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "neaktivní záložka (cíl)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "názvy souborů budou odtud citovány (výchozí)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "příkaz bude běžet v terminálu, potom zůstane otevřen" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "cesty budou mít koncový oddělovač" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "názvy souborů nebudou odtud citovány" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "příkaz bude běžet v terminálu, potom se zavře" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "cesty nebudou mít koncový oddělovač (výchozí)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Síť" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Vnitřní prohlížeč Double Commanderu." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódování" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nová velikost" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nenalezeno!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "s externím prohlížečem" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "s vnitřním prohlížečem" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Počet nahrazených: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Žádné nahrazení se nekonalo." �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.hu.po������������������������������������������������������������0000644�0001750�0000144�00001200403�12666540554�017226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0 alpha r5566\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2014-06-29 16:20+0100\n" "Last-Translator: Nyilas MISY <dr.dabzse@gmail.com>\n" "Language-Team: unDoRito -- HTC-iP <dr.dabzse@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hu\n" "X-Generator: Poedit 1.5.4\n" "X-Native-Language: Magyar\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Összehasonlítás.... %d%% (ESC a kilépéshez)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fájl található : %d (azonos : %d, különböző : %d, csak balról : %d, csak jobbról : %d )" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Balról jobbra : %d fájl másolása, teljes méret : %d bájt" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Jobbról balra : %d fájl másolása, teljes méret : %d bájt" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Mind" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Egyéni oszlopmegjelnítés beállítása" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Háttér 1 :" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Kurzor szegélye" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Átszínezés engedélyezése" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Egyedi betűtípus és szín használata" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Szöveg színe :" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Betűtípus :" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Méret :" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Háttér 2 :" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Nézetszám beállítás :" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Kurzorszín :" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Kurzor szöveg :" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Jelölő színe :" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Név :" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Oszlop hozzáadása" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Oszlop testreszabása :" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Előnézet" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Sablon kiválasztása..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Szabad &terület ellenőrzése" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Attribútumok másolása" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "&Tulajdonos másolása" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "&Dátum/Idő másolása" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Helyes lin&kek" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Írásvédelmi attribútum elhagyása" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Üres &mappák kizárása" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Linkek követése" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Hely &tartalékolása" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Mit tegyen, ha nem bírja beállítani a fájl idejét, attribútumait, stb." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Fájl-sablon használata" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Ha a &mappa létezik" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Ha a &fájl létezik" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ha &nem bírja beállítani a tulajdonságokat" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nincs sablon>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Másolás a vágólapra" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Kiadás" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Honlap :" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revízió" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "verzió :" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Visszaállít" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Attribútumok kiválasztása" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archívum" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Tö&mörített" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Könyvtár" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Titkosított" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Rejtett" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Csak &olvasható" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Ritka" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Szimbolikus hivatkozás" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&Rendszer" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Ideiglenes" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS attribútumok" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Általános attribútumok" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek :" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "&Szövegként :" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Ellenőrző összeg számítása..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Külön MD5/SHA1 készítése fájlonként" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Ellenőrzőösszeg(ek) mentése :" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Ellenőrző összeg vizsgálata..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Hozzáadás" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Mégsem" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Csatlakozás" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Szerkesztés" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Csatlakozás kezelő" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Csatlakozás ide :" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Sorbaállít" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Beállítások" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Ezen beállítások az alapértelmezettek" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Fájl(ok) másolása" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Új sorbaállítás" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Sorbaállítás 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Sorbaállítás 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Sorbaállítás 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Sorbaállítás 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Sorbaállítás 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Leírás mentése" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Fájl/Könyvtár megjegyzés" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Megjegyzés szerkesztése :" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Kódolás :" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automatikus összehasonlítás" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Bináris mód" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Mégsem" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Jobbra másolás" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Jobbra másolás" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Balra másolás" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Balra másolás" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ismét" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Mind kiválasztása" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Visszavonás" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Első különbség" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Első különbség" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Karakterkészlet figyelmen kívül hagyása" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Üres helyek figyelmen kívül hagyása" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Folyamatos görgetés" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Utolsó különbség" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Utolsó különbség" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Sor különbségek" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Következő különbség" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Következő különbség" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Bal oldali megnyitása..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Jobb oldali megnyitása..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Háttér befestése" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Előző különbség" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Előző különbség" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Új&ratölt" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Újratölt" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Mentés" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Mentés" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Mentés másként..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Mentés másként..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Bal oldali mentése" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Bal oldali mentése" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Bal oldali mentése másként..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Bal oldali mentése másként..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Jobb oldali mentése" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Jobb oldali mentése" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Jobb oldali mentése másként..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Jobb oldali mentése másként..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Összehasonlítás" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Összehasonlítás" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódolás" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódolás" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Fájlok összehasonlítása" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Bal" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Jobb" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Műveletek" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Sz&erkesztés" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Kódolás" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Beállítások" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Új gyorsbillentyű hozzáadása a sorozathoz" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Utolsó gyorsbillentyű eltávolítása a sorozatból" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Csak ezekhez a vezérlésekhez" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Paraméterek (mind külön sorban) :" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Gyorsbillentyűk :" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Névjegy" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Konfiguráció" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Beállítás" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Másolás" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Kivágás" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Törlés" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Keresés" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Keresés" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Következő keresése" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Következő keresése" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Sorra ugrás..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Beillesztés" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ismét" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ismét" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Helyettesítés" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Csere" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Összes kiválasztás&a" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Összes kijelölése" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Visszavonás" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Visszavonás" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Bezárás" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Kilépés" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "Ú&j" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Új" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Megnyitás" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Megnyitás" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Mentés" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Men&tés másként..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Mentés másként" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Ö&sszes mentése" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Összes mentése" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Szerkesztő" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dolás" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Megnyitás mint" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Mentés mint" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Szintaxis kiemelés" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Sor vége" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Karakterér&zékeny" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Keresés a hiány&jeltől" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Reguláris kifejezések" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Csak a kiválasztott szöve&g" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Csak a &teljes szavak" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opciók" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Helyettesítés ezzel :" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Keresés :" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Irány" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Fájlok kibontása" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Ú&tvonalak kibontása ha a fájlnév tartalmazza" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Minden archívum kibontása külön &alkönyvtárakba (archívnév)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Létező fájlok &felülírása" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Fájl kicsomagolása ide :" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Kibontandó fájlok :" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Jelszó a titkosított fájl(ok)hoz :" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Hozzáadás" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Hozzáadás" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Hozzáadás" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Le" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "&Eltávolítás" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "&Eltávolítás" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Át&nevezés" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Fel" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Fájltársítások" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Műveletek" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Kiterjesztések" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Fájltípusok" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Művelet :" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Parancs :" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Szerkesztés :" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Megnyitás szerkesztőben" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Fájl útvonala" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Teljes elérési út" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Parancs kimenetének kérése" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Futtatás terminálban" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Megnyitás VFS-ben" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Nézőke" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Megnyitás nézőkében" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Várjon..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Fájl neve :" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Innen :" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kattintson a Bezárás gombra, ha az ideiglenes fájl törölhető!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&A panelbe" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Mind megtekintése" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Jelenlegi művelet :" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Innen :" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Eddig :" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Tulajdonságok beállítása" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "&Minden kiválasztott fájlra" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Ezen fájl kihagyása" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Tulajdonságok" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek :" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Szöveges megfelelő :" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Tartalmaz :" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Fájl néve" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Név :" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Útvonal :" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Csoport" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Utolsó hozzáférés :" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Utolsó módosítás :" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Legutóbbi állapotváltozás :" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktális :" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Tulajdonos" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Méret :" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Szimbolikus hivatkozás :" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Típus :" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Tulajdonságok" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Szerkesztés" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Ugrás fájlhoz" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Utolsó keresés" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Ú&j keresés" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Be&töltés" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "M&entés" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Me&ntés ezzel \"Indítás a mappába\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ha el van mentve \"Indítás a mappában\", akkor vissza lesz állítva a sablon betöltésekor. Használja akkor, ha szeretné rögzíteni a keresést egy adott mappában" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Indítás" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Mégsem" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Sablon használata" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Nézőke" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "&Ablakba" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Fájlok keresése" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Kisbetű/Nagybetű érzékeny" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Dátumtól :" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dá&tumig :" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Fájlmérettől :" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Fá&jlméretig :" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Keresés fájlban" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "&Szimbolikus hivatkozás követése" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "A szöveget &NEM tartalmazó fájlok keresése" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nem régebbi mint :" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Keresés fájlnév &részletre" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Reguláris kifejezések" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Szöveg &helyettesítése" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Kiválasztott mappák és &fájlok" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "R&eguláris kifejezés" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Időtől :" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "I&dőig :" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Kereső &beépülő használata :" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Írja be a mappák nevét amelyeket kizár a keresésből, \";\" az elválasztó" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Írja be a fájlok nevét amelyeket kizár a keresésből, \";\" az elválasztó" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Írja be a fájlok nevét, \";\" az elválasztó" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mappák" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Fájlok" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Adat keresése" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Attri&bútumok" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Kódolás :" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "&Almappák kizárása" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Fájlok kizárása" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Fájl maszk" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "&Indítás a mappában" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "&Alkönyvtárak keresése :" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Előző keresések :" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Eltávolít a listáról" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Minden megtalált elem megjelenítése" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Megjelenítés a nézőkében" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Haladó" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Betölt/Ment" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Beépülők" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Eredmények" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Alap" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Keresés" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Keresés" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "K&arakterérzékeny" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Hardlink készítése" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Létező cél (erre fog mutatni a hivatkozás)" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Hivatkozás neve" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Mentés másként..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Tétel" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Fájl neve" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Le" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Le" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Törlés" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Fel" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Fel" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Névjegy" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Fájlnév hozzáadása a parancssorhoz" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Útvonal és fájlnév hozzáadása a parancssorhoz" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Útvonal másolása parancssorba" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Rövid nézet" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Rövid nézet" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Elfoglalt &terület számítása..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Könyvtár cseréje" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Főkönyvtárba váltás" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Szülő könyvtárra cserél" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gyökér könyvtárra cserél" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Ellenőrző összeg számítása..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Ellenőrző összeg &vizsgálata..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Naplófájl űrítése" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Naplóablak űrítése" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Ö&sszes fül bezárása" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Fül bezárása" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Következő parancssor" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Parancssor beállítása a következő parancsra az előzményekből" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Előző parancssor" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Parancssor beállítása a előző parancsra az előzményekből" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Teljes" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Oszlopnézet" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Összehasonlítás &tartalom alapján" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Mappák összehasonlítása" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Mappák összehasonlítása" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Helyi menü megjelenítése" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Másolás" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Minden látható oszlop más&olása" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Fájlnév másolása &teljes elérési úttal" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Fájlnév másolása a &vágólapra" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Megerősítés nélküli másolás" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Másolás ugyanarra a panelre" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Másolás" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Elfoglalt &terület megjelenítése" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Kivágás" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Könyvtár előzmények" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Kedvenc &könyvtárak" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Szerkeszt" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Megjegyzés s&zerkesztése..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Új fájl szerkesztése" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Útvonalmező szerkesztése a fájl felett" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Panelek &cseréje" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Fájlok &kibontása..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Fájl&társítások..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Fájlegyesítés..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "&Fájl tulajdonságainak megjelenítése" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Fájl szele&telése" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Lapos nézet" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Parancssorra fókuszálás" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Kurzor helyezése az első fájlra" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Kurzor helyezése az utolsó fájlra" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Hivatkozás létrehozása..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Tartalomjegyzék" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Vízszintes elrendezés" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Billentyűzet" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Bal &= Jobb" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Baloldali meghajtólista megnyitása" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Kiválasztás betöltése a &vágólapról" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Kiválasztás betöltése &fájlból" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Fülek betöltése fájlból" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Új könyvtár" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Minden &azonos kiterjesztésű kijelölése" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Kijelölés meg&fordítása" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Minden kiválasztása" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Csoportos kijelölés megszüntetése" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Csoport &kijelölése" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Összes kijelölés me&gszüntetése" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Kis méret" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Csoportos át&nevezés" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Hálózati &csatlakozás..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Hálózati &szétkapcsolás" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hálózati &gyors csatlakozás..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Új &fül" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Váltás a &következő fülre" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Archív megnyitásának kísérlete" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Sávfájl megnyitása" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "&Mappa megnyitása új fülön" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "&VFS lista megnyitása" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Műveletek nézőke" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Beállítások..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Fájlok &tömörítése..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Elválasztó pozíciójának beállítás" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Beillesztés" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Váltás az &előző fülre" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Gyors szűrő" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Gyorskeresés" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Gyorsnézőke panel" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Frissítés" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Áthely/Átnev." #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Fájlok mozgatása/átnevezése megerősítő kérdés nélkül" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Átnevezés" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Fül át&nevezése" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Kijelölt &visszaállítása" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "For&dított sorrend" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Jobb &= Bal" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Jobboldali meghajtólista megnyitása" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "&Terminál futtatása" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Kiválasztott men&tése" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Kiválasztott m&entése fájlba..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Fülek mentése fájlba" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Keresés..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "&Attribútumok cseréje..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zárolva ezzel : ú&j füleken megnyitott könyvtárak" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Rendes" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zárolt" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zárolva ezzel : könyvár &változások engedélyezése" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Megnyitás" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Megnyitás a rendszertársítottal" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Gyorsgomb menü megjelenítése" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Parancssori előzmények megjelenítése" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Rejtett/Rendszer fájlok &megjelenítése" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Rendezés &attribútumok szerint" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Rendezés &dátum szerint" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Rendezés &kiterjesztés szerint" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Rendezés &név szerint" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Rendezés &méret szerint" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Kihagyási lista engedélyezése/kikapcsolása, hogy nem mutatja fájlneveket" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "&Szimbolikus hivatkozás készítése.." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Könyvtárak szinkronizálása...." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cél &= Forrás" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "A&rchívum(ok) tesztelése" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatűrök" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Bélyegkép-nézet" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Kurzor alatti mappa küldése a bal ablakba" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Kurzor alatti mappa küldése a jobb ablakba" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Összes azonos kiterjesztésű kijelölésének megszüntetése" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Nézőke" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Aktív nézet előzményeinek megtekintése" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Következő előzményre ugrik" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Előző előzményre ugrik" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Látogassa meg a Double Commander honlapját" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Eltöröl" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Kilépés" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Könyvtár" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "A jelenlegi jobb oldali könyvtár megtekintése a bal ablakban" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Ugrás a saját mappába" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Ugrás a gyökérkönyvtárba" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Ugrás a szülőkönyvtárba" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "A jelenlegi bal oldali könyvtár megtekintése a jobb ablakban" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Útvonal" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Másolás..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Hivatkozás készítése..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Ürítés" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Elrejtés" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Összes kijelölése" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Áthelyezés..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Szimbolikus hivatkozás készítése..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Fül beállítások" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Visszaállítás" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Indítás" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Parancsok" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Beállítások" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Fájlok" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Megjelölés" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Hálózat" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Nézet" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Beállítások" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Fülek" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Másolás" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Kivágás" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Törlés" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Szerkesztés" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Beillesztés" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Gyorsbillentyű" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Meghatároz..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&vagy válasszon előre meghatározott kiválasztási típust :" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Új könyvtár létrehozása" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Adja meg az új könyvtár nevét :" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Új méret" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Magasság :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-be való sűrítés minősége" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Szélesség :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Magasság" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Szélesség" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Betö<és" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Átnevezés (&R)" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Mind visszaállítása" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Menté&s" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Csoportos Átnevező" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "E&ngedélyez" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguláris kifejezések" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Helyettesítések használata" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Kiterjesztés" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Számláló" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Keresés && Csere" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Eredmény naplózása" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maszk" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Előre beállított" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Kiterjesztés" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Keresés..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervallum" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Fájl &neve" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Csere..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Kezdőszám" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Szélesség" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Számláló" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Nap" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Nap (2 számjegy)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] A hét neve (röviden, pl : \"hét\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] A hét neve (hosszan, pl : \"hétfő\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Kiterjesztés" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Kiterjesztés" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Óra" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Óra (2 számjegy)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Perc" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Perc (2 számjegy)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Hónap" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Hónap (2 számjegy)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Hónap neve (röviden, pl : \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Hónap neve (hosszan, pl : \"január\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Név" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Név" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] Név" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Idő..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Kiterjesztés..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Név..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Beépülő" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Másodperc" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Másodperc (2 számjegy)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Év (2 számjegy)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Év (4 számjegy)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "---" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Fájl régi neve" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Fájl új neve" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Fájl útvonala" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Alkalmazás kiválasztása" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Egyéni parancs" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Társítások mentése" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Kiválasztott alkalmazások az alapértelmezettek" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Fájltípus legyen megnyitva : %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Összetett fájl nevek" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Összetett URI-k" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Egyszerű fájlnév" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Egyszerű URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Alkalmaz" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opciók" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Kérem, válasszon egyet az aloldalak közül, ez az oldal nem tartalmaz beállításokat" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "A&utomatikus beállítás" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "&Hozzáadás" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "&Törlés" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Át&nevezés" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "&Hibakereső mód" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "E&ngedélyezve" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Konzol kimenet megjelenítése" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opciók" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Hozzá&adás" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "&Kiterjesztés :" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Ki&bont :" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Lista :" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Listázás &befejezve (választható) :" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Listázási for&mátum :" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Listázás &kezdése (választható) :" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Tö&mötírő :" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Leírá&s :" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "További" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Általános" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Méret, dátum vagy attribútum változása esetén is" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "A következő útvonalakhoz és az alma&ppáikhoz :" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Frissítés fájlok létrehozása, törlése és átnevezése esetén" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Amikor az alkalmazás a &háttérben fut" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Auto-frissítés kikapcsolása" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Fájl lista frissítése" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mindig mutatja a tálca ikont" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Nem csatlakoztatott eszközök automatikus elrejtése" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "&Ikon tálcára minimalizálása" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "cs&ak 1 DC futhat" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Ide beírhat egy vagy több meghajtót vagy csatolási pontot, elkülönítve ezzel : \";\"" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Meghajtó &feketelista" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Szöveg &vágása az oszlop szélességéhez" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Vízszintes vonalak" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Függőleges vonalak" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Automatikus oszlop kitöltés" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Rácsok megjelenítése" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatikus oszlopméret" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Automatikus os&zlopméret :" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Parancssori előz&mények" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "&Könyvtár előzmények" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "&Fájlmaszk előzmények" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "B&eállítások mentése" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Keresés/Csere előzmé&nyek" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Konfigurációs állományok helye" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Mentés kilépéskor" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Állítsa be a parancssorra" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "P&rogram könyvtár (hordozható változat)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Felhasználó &saját könyvtára" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Mind" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Új" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Mentés mint" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Mentés" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Átszínezés engedélyezése" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Általános" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Kurzor szegélye" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Háttér 1 :" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Háttér 2 :" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Fájlrendszer &oszlopok beállítása :" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Kurzorszín :" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Kurzor szöveg :" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Betűtípus :" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Méret :" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Szöveg színe :" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Jelölő színe :" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Oszlop hozzáadása" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Név :" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Útvonal :" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Kivágás" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Beillesztés" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Megerő&sítő ablak megjelenítése \"ejtés\" után" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "&Fájlrendszer megjelenítése" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Szabad t&erület megjelenítése" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Címke megje&lenítése" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Meghajtólista" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Hát&tér" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Hát&tér" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Visszaállítás" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Mentés" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elem attribútumai" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Előté&r" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Előté&r" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "S&zöveg-megjelölés" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "&Globalis vázlat használata (és módosítása)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "He&lyi vázlat használata" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Félkövér" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Dőlt" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Á&thúzott" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Be" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Aláhúzott" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Fordított" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Ki" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Be" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nem" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Kivágás" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Beillesztés" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Átnevezés" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Hozzáadás" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Hozzáadás" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Le" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Szerkesztés" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Eltávolítás" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Át&nevezés" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Fel" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Műveletek" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Kiterjesztések" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Fájltípusok" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Művelet :" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Parancs :" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Para&méterek" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ki&induló útvonal :" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Szerkesztés" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Megnyitás szerkesztőben" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Parancs kimenetének kérése" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Megnyitás" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Futtatás terminálban" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Nézőke" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Megnyitás nézőkében" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Megerősítő ablak megjelenítése :" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Művelet &másolása" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Művelet &törlése" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&F8/Del gomb a Kukába helyez (Shifttel együtt töröl)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "&Törlés a kukába művelet" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Írásvédelmi attribútum elhagyása" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Mozgatás művelet" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "Kere&sés fájlnév részletre" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Fájl/Könyvtár megjegyzések &feldolgozása" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Csak a &fájlnév kiválasztása átnevezés előtt (a kiterjesztést nem)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Fül kiválasztási panel megjelenítése a másol/áthelyez párbeszédablakban" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Fájlműveleti hibá&k átugrása és írja naplóablakba" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Műveletek futtatása" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Fájlkeresés" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Felhasználói felület" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Pufferméret fájlműveletekhez (kB) :" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mű&ködő műveletek megjelenítése" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "&Hányszoros legyen a végleges törlés??" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Memória térképezés has&ználata fájlokban történő kereséskor" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Memóriafolyam haszná&lata fájlokban történő kereséskor" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Átszínezés engedélyezése" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Kurz&orkeret használata" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "&Gradiens (lejtő) mutató használata" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Fordított kijelölé&s használata" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Kurzor szegélye" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Meghajtón a szabad terület mutató" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Hát&tér 1 :" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Hátté&r 2 :" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "K&urzor színe :" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Kurzor s&zöveg :" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "I&naktív panel fényereje" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Mutató háttér szí&ne :" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Mutató &előtér szí&ne :" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Jelölő színe :" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Szövegszín :" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Ne töltse be addig a fájl listát amíg a fül aktív" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Szö&gletes zárójel a könyvtárnevek körül" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Ú&j és frissített fájlok kiemelése" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Fájl lista betöltése másik szálon" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Ikonok be&töltése a fájl lista után" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "R&ejtett/Rendszer fájlok megjelenítése" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Szó&közzel történő kijelöléskor automatikus léptetés (mint <INSERT> estén)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatálás" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Rendezés" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Karakterérzék&eny :" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Hibás formátum" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Dátum és idő formátum :" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Fá&jlméret formátum :" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Új fájl&ok beszúrása" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Mappák &rendezése :" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Rendezé&si módszer :" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Frissített fájlok &mozgatása" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Törlés" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Sablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Fájltípus színek (húzás és ejtés által rendez)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "A&ttribútum kategória :" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Kat&egória színe :" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Kategória &maszk :" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Kategória neve :" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Sz&erkesztő betűtípusa" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Nap&lófájl betűtípusa" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fő betűtípus" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Megjelenítő könyv &betűtípusa" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Né&zőke betűtípusa" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Gyorsbillentyű &hozzáadása" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Gyorsbillentyű tö&rlése" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Gyorsbillentyű &módosítása" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Szűrő" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "K&ategóriák :" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "&Parancsok :" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fájl rövidíté&sek :" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Parancs" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Gyorsbillentyűk" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Leírás" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Gyorsbillentyű" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Paraméterek" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Ellenőrzések" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Az alábbi útvonalakhoz és alkönyvtáraikhoz :" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Műveleti ikonok megjelenítése a &menükben" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Beborító ikonok megjelenítése, pl : linkek" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Speciális ikonok kikapcsolása" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikonok a menükben" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Ikon mérete " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Ikonok megjelenítése a fájlnév bal oldalán " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Mind" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Minden társított + &EXE/LNK (lassú)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Nincs ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Csak átlagos ikonok" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Kiválasztott nevek hozzáa&dása" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "&Kiválasztott nevek hozzáadása teljes elérési útvonallal" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Mellőzi (nem mutatja) a következp fájlokat és mappákat :" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Mentés ide :" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Bal, Jobb nyilak váltogatják a mappákat (Lynx-féle mozgás)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Írás" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Al&t+Betű" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "&Ctrl+Alt+Betű" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Betűk" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Lapos gombok" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Lapos felület" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Lapos gombok" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Szabad terület mutató megjelenítése a meghajtó címkéjében" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Naplóablak me&gjelenítése" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Műveleti panel megjelenítése a háttérben" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Megosztott műveletek megjelenítése a menüsávban" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Parancs&sor megjelenítése" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Aktuális &könyvtár megjelenítése" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "&Meghajtógombok megjelenítése" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Szabad terület címke megjelenítése" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Meghajtó lista gombok megjelenítése" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "&Funkcióbillentyűk megjelenítése" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Fő&menü megjelenítése" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Gom&bsor megjelenítése" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Rövid szabad terü&leti címke megjelenítése" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Állapot&sor megjelenítése" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Oszlopok neveinek megjelenítése" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "&Mappa fülek megjelenítése" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Te&rminálablak megjelenítése" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Két meghajtó gombsor megjelenítése (rögzített szélességben, az ablakok felett)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Képernyő felosztása " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Csomagolás/Kibontás" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Szimbolikus hivatkozás/másolás/mozgatás/készítés" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Könyvtár létrehozás/törlés" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Hibák &naplózása" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Naplófájl &létrehozása :" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Információs üzenetek naplózása" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "&Sikeres műveletek naplózása" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Fájlrendszer beépülők" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Fájlműveletek naplófájlja" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Naplózási műveletek" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Művelet állapota" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Nem létező fájlok bélyegképeinek eltávolítása" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Mindig ugorjon a gyökérkönyvtárba a meghajtó váltásakor" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Fig&yelmeztető üzenetek megjelenítése (csak \"OK\" gomb)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Miniatűrök gyor&sítótárazása" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatűrök" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bélyegkép mérete : " #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Egérrel való kivála&sztás" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Görgetés" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Kiválasztás" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Mód :" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Sorró&l sorra" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Sorról sorra k&urzormozgással" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Oldalról oldalra" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "B&eállítás" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "E&ngedélyezés" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "El&távolítás" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "F&inomhangolás" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "A kereső beépülők le&hetővé tesznek más keresési algoritmusokat vagy külső eszközöket (mint pl : \"lokális\", stb)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "A tömö&rítő beépülők az archív fájlokkal való munkához valók." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "A tartalmi beépülők lehetővé teszik kiegészítő fájlinformációk megjelenítését, mint pl : mp3 tag vagy kép attribútumok a fájl listában, vagy használja kereséshez és csoportos átnevezéshez" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "A fáj&lrendszer beépülők lehetővé teszik, hogy az operációs rendszer számára elérhetetlen lemezek hozzáférését, vagy külső eszközöket, mint pl : Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "A né&zőke beépülők lehetővé teszik képek, táblázatok, adatbázisok, stb megtekintését a Nézőkében (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTIONTFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Aktív" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Beépülő" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Regisztrálva" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Kere&ső beépülők (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Tömörítő beépülő&k (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Tartalmi beé&pülők (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Fá&jlrendszer beépülők (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Né&zőke beépülők (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Kezdet (a névnek az első begépelt karakterrel kell kezdődnie)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Végződés (a . előtti utolsó karakterrel kell egyeznie)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opciók" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Teljes &név egyezés:" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Karakterérzékeny keresés" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Keresés ezekre a tételekre" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "A fülre kattintva a hozzá tartozó &panel aktiválása" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Fül fejléc megjelenítése akkor is ha csak egy fül van" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "M&inden fül bezárásának megerősítése" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Fül címének maximá&lis hossza" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "&Zárolt fülek megjelenítése csillaggal *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Fülek &több sorban" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "CTRL-Fel új fület nyit az előtérben" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Új fül &nyitása a jelenlegi mellett" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Fül bezárása gombok megjelenítése" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Mappafül fejléce" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "karakterek" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Fü&l pozíciók :" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nem" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Gomb k&lónozása" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Törlés" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Gyorsbillentyű szerkesztése :" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Ú&j gomb beszúrása" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Más..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Gyorsbillent&yű eltávolítása" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "L&apos gombok" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Adja meg a parancs paramétereit, mindegyik külön sorban. Nyomja meg az F1 billentyűt a paraméterek súgójához" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Megjelenés" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Sáv mérete :" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Para&ncs" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Para&méterek" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Gyorsbillentyű :" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Iko&n :" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ikon mé&rete :" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Pa&rancs :" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Paraméterek :" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ki&induló útvonal :" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Buborék& :" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Gomb típusa" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Terminálabla&k nyitva tartása a program futtatása után" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "T&erminálban futtat" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Kü&lső program használata" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "T&ovábbi paraméterek" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Futtatandó &program útvonala" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Hozzáa&dás" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "&Alkalmaz" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Törlés" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Sablon..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Buboréktippek megjelenítése" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Egyedi mezők fájl típusok szerint" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategória tipp :" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maszk kategória:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Név kategória:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Megjelenítő könyv mód" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Példa" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Megjelenítő könyv &háttérszíne" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Megjelenítő könyv &betűszíne" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Megjele&nítő könyv oszlopszáma" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Beállítás" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Fájlok tömörítése" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Több a&rchívum készítése kijelölt fájlonként/mappánként egy" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Ön&kicsomagoló archívum készítése" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "T&itkosítás" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "A&rchívumba helyezés" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Többlemezes archívum" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "E&lőször TAR archívumba tegye" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Elérési &utak tárolása az archívumban (csak a rekurzív)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Fájl(ok) becsomagolása a fájlba :" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Tömörítő" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Mind kicsomagolás&a és végreh&ajtás" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Kicsomagolás és &végrehajtás" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "A tömörített fájl tulajdonságai" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attribútumok :" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tömörítési arány :" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dátum :" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Módszer :" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Eredeti méret :" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fájl :" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tömörített méret :" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Tömörítő :" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Idő :" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Szűrőpanel bezárása" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Írja be a keresendő szöveget vagy szűrőt" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Karakterérzékeny" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mappák" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fájlok" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Kezdeti egyezés" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Vég egyezés" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Szűrő" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Váltás kereső és szűrő közt" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Beépülő" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Érték" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Bezárás" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Súgó" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "karakterek kivála&sztása beszúráshoz :" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Attribútumok cseréje" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Ragadós" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archívum" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Létrehozva :" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Rejtett" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Utolsó hozzáférés :" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Módosított :" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Csak olvasható" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "ALmappákkal együtt" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Rendszer" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Időbélyegző tulajdonságai" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribútumok" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitek :" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Csoport" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szürke mező változatlan értéket jelent)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Egyéb" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Tulajdonos" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Szöveges megfelelő :" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Végrehajtás" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szürke mező változatlan értéket jelent)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktális :" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Olvasás" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Írás" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Kilépés" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Vágó" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Fájl neve" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Fájlméret" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Célkönyv&tár" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Fájlforrá&s" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Darabszám" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&GB" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&kB" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&MB" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Kiadás" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revízió" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "verzió :" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Szimbolikus hivatkozás létrehozása" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Létező cél (erre fog mutatni a hivatkozás)" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Hivatkozás neve" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Bezárás" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Összehasonlítás" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Szinkronizálás" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Könyvtárak szinkronizálása" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "aszimmetrikus" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "tartalom szerint" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "dátum mellőzése" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "csak a kiválasztott" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Almappák" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mutat :" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Név" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Méret" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Méret" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Név" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(a főablakban)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Összehasonlítás" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "másolatok" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "egyedülállók" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Nyomja meg az \"Összehasonlítás\" gombot a kezdéshez" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Szinkronizálás" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Felülírások megerősítése" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Új hozzáa&dása" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Mégsem" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Mó&dosít" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "A&lapértelmezett" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Eltávolít" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Beépülő finomhangolása" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Archívum &típusának megállapítása tartalma alapján" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Tud fáj< törölni" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "T&itkosítás támogatása" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "M&egjelenítés normál fájlként (tömörítő ikonjának elrejtése)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Memó&riába tömörítés támogatása" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Tud létező archívu&mokat módosítani" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Az archívum több fájlt is tartalmazhat" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Tud új archí&vumot létrehozni" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Támogatja a beállítások dialóg&usablakot" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Lehetővé teszi a szöve&gkeresést az archívumban" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Leírás :" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etektálandó szöveg :" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Kiterjesztés :" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Állapotjelző :" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Név :" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Beépülő :" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Beépülő :" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Nézőke névjegye..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "A névjegy megjelenítése" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Fájl másolása" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Fájl másolása" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Fájl törlése" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Fájl törlése" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Következő" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Következő fájl betöltése" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Előző" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Előző fájl betöltése" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Fájl mozgatása" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Fájl mozgatása" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Újratölt" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Újratölti a jelenlegi fájlt" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Elforgat : 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Elforgat : 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Elforgat : 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Elforgat : 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Elforgat : 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Elforgat : 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Mentés másként..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Fájl mentése másként..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Széthúzás" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Kép széthúzása" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Másolás" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Másolás" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Levágás" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Törlés" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Törlés" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Teljes képernyő" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Kiemel" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Mozgat" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Mozgat" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Befest" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Piros szemek" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Átméretez" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Visszavonás" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Nagyítás" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Kicsinyítés" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Nézőke" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bemutató" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Toll" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Kiemel" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Befest" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bemutató" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Nézőke" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Névjegy" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Megjelenítés &binárisként" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Másolás a vágólapra" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "S&zerkesztés" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dolás" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Kilépés" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fájl" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Teljes képernyő" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafika" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Megjelenítés &hexában" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Kép" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Kö&nyvként megjelenít" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Tükör" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Beépülők" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Előnézet" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Nyomtat..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Elforgat" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Mentés" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Mentés másként..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Képernyőkép" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Keresés" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Következő" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Előző keresése" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Összes kijelölése" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Széthúzás" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Megjelenítés &szövegként" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Nézőke" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Megjelenítés &tördelt szövegként" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Nagyítás" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Kicsinyítés" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Másolás a vágólapra" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Összes kijelölése" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "Indítá&s" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Leállí&tás" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Fájlműveletek" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Mindig felül" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "\"Fogd && Ejtsd\" használata a sorbaállítási műveletek közt" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Mégsem" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Új sorbaállítás" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Külünálló ablakban mutat" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Elsőnek" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Utolsónak" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Sorbaállítás" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Soron kívül" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Sorbaállítás 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Sorbaállítás 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Sorbaállítás 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Sorbaállítás 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Sorbaállítás 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Külünálló ablakban mutat" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Mind &szüneteltetése" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Háttérben (különálló kapcsolat)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ha a fájl létezik" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Gyorsszűrő mellőzése" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Jelenlegi művelet megállítása" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Törött :" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Általános :" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Hiányzó :" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Olvasási hiba :" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Sikeres :" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Ellenőrző összeg beírása és algoritmus kiválasztása :" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Ellenőrzőösszeg ellenőrzése" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Összes :" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "A vágólap nem tartalmaz érvényes eszköztári adatot." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dátum" #: ulng.rscolext msgid "Ext" msgstr "Kit" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Név" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Méret" #: ulng.rsconfcolalign msgid "Align" msgstr "Igazítás" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Fejléc" #: ulng.rsconfcolconfig msgid "Config" msgstr "Beállít" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Töröl" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Mező tartalma" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mozgat" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Szélesség" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Oszlop személyreszabása:" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Másolat (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Minden művelet befejezve" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Az összes művelet haladása : %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Megszü&ntet" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "M&ind" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Hozzáfűz" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Forrásfájlok a&utomatikus átnevezése" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Mégsem" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Folytat" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "&Belemásol" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "&Mind belemásolja" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Kilépés a programból" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Min&d mellőzése" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nem" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Egyik sem" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Má&s" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Felülír" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Min&det felülír" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Minden &nagyobb felülírása" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Min&den régebbi felülírása" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Minden &kisebb felülírása" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Át&nevezés" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Fol&ytat" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Újra&próbál" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Kihagy" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Minde&t kihagy" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Igen" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Fájlok és mappák számítása" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Ellenőrző összeg számítása..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Ellenőrző összeg vizsgálata..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Fájl(ok) másolása" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Fájl(ok) törlése" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Fájl(ok) mozgatása" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "&Szünet" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Indítá&s" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Sorbaállítás" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Sebesség : %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Sebesség : %s/s, hátralevő idő : %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Fájl szeletelése" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Fájl(ok) tisztítása" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<címtelen>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nincs hordozó>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander belső szerkesztője" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Sorra ugrás :" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Sorra ugrás" #: ulng.rseditnewfile msgid "new.txt" msgstr "új.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Fájl neve :" #: ulng.rseditnewopen msgid "Open file" msgstr "Fájl megnyitása" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vissza" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Keresés" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Előre" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Csere" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Kérdez;Felülír;Belemásol;Kihagy" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Kérdez;Felülír;Régebbi felülírása;Kihagy" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Kérdez;Nem állít be többet;Hibák mellőzése" #: ulng.rsfilterstatus msgid "FILTER" msgstr "SZŰRŐ" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Sablon meghatátozása" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s szint mélységben" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "mind (végtelen mélység)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "csak az aktuális mappában" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "A könyvtár \"%s\" nem létezik!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Találat : %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Keresési sablon mentése" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Sablon neve :" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Végignézve : %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Keresés" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Fájlok keresése" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Kezdés" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%s szabad %s bájtból" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bájt szabad" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Utolsó hozzáférési dátum/idő" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attribútumok" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Megjegyzés" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tömörített méret" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Létrehozási dátum/idő" #: ulng.rsfuncext msgid "Extension" msgstr "Kiterjesztés" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Csoport" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Erre utal" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Módosítási dátum/idő" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Név" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Név, kiterjesztés nélkül" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Tulajdonos" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Útvonal" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Méret" #: ulng.rsfunctype msgid "Type" msgstr "Típus" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Hiba a hardlink létrehozásakor." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Párbeszédablak másolása/mozgatása" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Eltérésnézőke" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Megjegyzés ablakának szerkesztése" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Szerkesztő" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Fájlok keresése" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Fő" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Nézőke" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Linker végzett" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maszk kijelölés megszüntetése" #: ulng.rsmarkplus msgid "Select mask" msgstr "Kijelölő maszk" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maszk bevitele :" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Egyéni oszlopok beállítása" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Egyéni oszlop nézet beállítása" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Műveletek" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Szerkesztés" #: ulng.rsmnueject msgid "Eject" msgstr "Kiadás" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Csatolás" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Új" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nincs elérhető hordozó" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Megnyitás" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Megnyitás ezzel ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Más..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Rendezés" #: ulng.rsmnuumount msgid "Unmount" msgstr "Lecsatolás" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Nézőke" #: ulng.rsmsgaccount msgid "Account:" msgstr "Fiók :" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "További paraméterek az archiváló parancssorra :" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nem másolhatja/helyezheti a fájlt \"%s\" saját magára!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "A mappa \"%s\" nem törölhető" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Váltás ide \"%s\" meghiúsult!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Eltávolítja az összes inaktív fület?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Ez a fül (%s) zárolt! Mégis bezárja?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Biztosan ki akar lépni?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár másolása?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "\"%s\" másolása?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Törölje a részben átmásolt fájlt?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "%d kiválasztott fájl/könyvtár törlése?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "A kijelölt %d fájlt/mappát a Kukába helyezi?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "\"%s\" törlése?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "A kijelölt \"%s\" Kukába helyezi?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nem helyezhető a Kukába! Véglegesen törli?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "A lemez nem elérhető" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Írja be a fájl kiterjesztést :" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Írja be a nevet :" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC hiba az archívumban" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Hibás adat" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nem bír csatlakozni a szerverhez : \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nem tudom %s fájlt ide másolni : %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Már létező könyvtárnév : \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "A dátum %s nem támogatott" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "A könyvtár %s létezik!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "A műveletet a felhasználó megszakította" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Hiba a fájl bezárásakor" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nem lehet létrehozni a fájlt" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nincs több fájl az archívumban" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nem lehet megnyitni létező fájlt" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Hiba a fájlból olvasáskor" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Hiba a fájl írásakor" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Nem lehet létrehozni a mappát : %s !" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Érvénytelen hivatkozás" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "A fájl nem található" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nincs elég memória" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "A művelet nem támogatott!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Hiba a helyi menü parancsban" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Hiba a beállítások betöltésekor" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Szintaktikai hiba a reguláris kifejezésben!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nem tudom a fájlt (%s) %s névre változtatni" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nem bírja menteni a társítást!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "A fájl nem menthető" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nem módosíthatóak az attribútumok : \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nem módosítható a dátum/idő : \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nem módosítható a tulajdonos/csoport : \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "A puffer túl kicsi" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Túl sok fájl a tömörítéshez" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Ismeretlen archívum" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Név" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "A fájl %s megváltozott, menti?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bájt, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Felülírja :" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "A fájl %s már létezik, felülírja?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Ezzel a fájllal :" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "A fájl \"%s\" nem található." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktív fájl műveletek" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Néhány fájlművelet még nem lett befejezve. Double Commander bezárása adatvesztést eredményezhet!" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "A fájl (%s) csak olvasható. Törli?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "A fájl \"%s\" mérete túl nagy a cél fájlrendszerre!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "A mappa %s már létezik, felülírja?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "A szimbolikus hivatkozás \"%s\" követése?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Útvonal" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Név :" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Hiba a parancssorban" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Érvénytelen fájlnév" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Érvénytelen beállítási fájl formátum" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Érvénytelen útvonal" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Az útvonal (%s) tiltott karaktereket tartalmaz" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ez nem érvényes beépülő!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ez a beépülő a Double Commander %s verziójához készült! %s nem fog működni a Double Commander %s verziójával!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Érvénytelen idézet" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Érvénytelen kijelölés" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Fájl lista betöltése..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "%s másolása" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "%s törlése" #: ulng.rsmsglogerror msgid "Error: " msgstr "Hiba : " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "%s kitömörítése" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Infó : " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "%s hivatkozás létrehozása" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "%s könyvtár létrehozása" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "%s fájl mozgatása" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Tömörítés %s fájlba" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "%s könyvtár törlése" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Kész : " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "%s szimbolikus hivatkozás létrehozása" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "%s fájl sértetlenségének ellenőrzése" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Mesterjelszó" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Kérem, írja be a mesterjelszavat :" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Új fájl" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "A következő darab kicsomagolása következik" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nincsenek fájlok." #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nincsenek kijelölt fájlok." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nincs elég hely a célmeghajtón, folytatja?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nincs elég hely a célmeghajtón, újrapróbálja?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Nem lehet törölni a fájlt : %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nincs leprogramozva." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Jelszó :" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "A jelszavak különböznek!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Kérem, írja be a jelszavat :" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Jelszó (Tűzfal) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Kérem, írja be újból a jelszavat az ellenőrzéshez :" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "%s hozzá&adása" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Beállítás" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "%s &törlése" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" már létezik. Felülírja?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "%d fájl/könyvtár áthelyezése/átnevezése?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Kiválasztott \"%s\" áthelyezése/átnevezése?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Kérem indítsa újra a Double Commander-t, hogy érvényesítse a változásokat" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Kiválasztva : %s/%s, fájl : %d/%d, mappa : %d/%d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Kérem, csak ellenőrzőösszeg-fájlokat jelöljön ki!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Válassza ki a következő kötet helyét" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Kötetcimke beállítása" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Fül átnevezése" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Fül új neve :" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cél útvonal :" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Túl sok fájl van kijelölve." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL : " #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Felhasználónév :" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Felhasználónév (Tűzfal) :" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Kötetcimke :" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Kérem, írja be a kötet méretét :" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "A kiválasztott %d fájl/mappa törlése?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Törli a kiválasztott \"%s\"-t?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nincs változás;NAGYBETŰS;kisbetűs;Nagy kezdőbetűs;Minden Szó Nagy Kezdőbetűs" #: ulng.rsoperaborted msgid "Aborted" msgstr "Megszüntetett" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Ellenőrzőösszegének számítás" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Ellenőrzőösszegének számítás itt : \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "\"%s\" ellenőrzőösszegének számítása" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Számítás" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Számítás \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Összefűzés" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Fájlok összefűzése itt : \"%s\" ebbe \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Másolás" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Másolás innen \"%s\" ide \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "\"%s\" másolása ide \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Mappa készítése" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Mappa készítése : \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Törlés" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Törlés itt : \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "\"%s\" törlése" #: ulng.rsoperexecuting msgid "Executing" msgstr "Végrehajtás" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "\"%s\" végrehajtása" #: ulng.rsoperextracting msgid "Extracting" msgstr "Kibontás" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Kibontás innen \"%s\" ide \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Befejezve" #: ulng.rsoperlisting msgid "Listing" msgstr "Listázás" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "\"%s\" listázása" #: ulng.rsopermoving msgid "Moving" msgstr "Mozgatás" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Mozgatás innen \"%s\" ide \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "\"%s\" mozgatása ide \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nincs elindítva" #: ulng.rsoperpacking msgid "Packing" msgstr "Csomagolás" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Csomagolás innen \"%s\" ide \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "\"%s\" csomagolása ide \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Szüneteltetve" #: ulng.rsoperpausing msgid "Pausing" msgstr "Szünetelés" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Sorbaállított" #: ulng.rsoperrunning msgid "Running" msgstr "Futás" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Tulajdonság beállítása" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Tulajdonság beállítása itt \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "\"%s\" tulajdonságainak beállítása" #: ulng.rsopersplitting msgid "Splitting" msgstr "Vágás" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "\"%s\" vágása ide \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Indítás" #: ulng.rsoperstopped msgid "Stopped" msgstr "Megállított" #: ulng.rsoperstopping msgid "Stopping" msgstr "Megállítás" #: ulng.rsopertesting msgid "Testing" msgstr "Próbálás" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Próbálás itt \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "\"%s\" próbálása" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Ellenőrzőösszeg ellenőrzése" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Ellenőrzőösszeg ellenőrzése itt \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "\"%s\" ellenőrzőösszeg ellenőrzése" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Fájl forrás hozzáférhetőségére várva" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "A felhasználó válaszára vár" #: ulng.rsoperwiping msgid "Wiping" msgstr "Tisztítás" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Tisztítás itt \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "\"%s\" tisztítása" #: ulng.rsoperworking msgid "Working" msgstr "Dolgozik" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Törlés :" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Útvonal nélküli kibontás" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Formátum értelmezési mód :" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID : " #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID pozíció :" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID keresési taromány :" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Paraméter" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Jelszó kérdező sztring :" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Önkioldó archívum létrehozása :" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Próba :" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Archívum típusának neve :" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Érték" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "A beépülő \"%s\" társítása ezzel :" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Első;Utolsó;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Letiltás" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Engedélyezés" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Kiterjesztés megadása" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Kurzor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Kijelölés" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Kijelölés + kurzor" #: ulng.rsoptexampletext msgid "Text" msgstr "Szöveg" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "külön ablak;kicsinyített külön ablak;műveleti panel" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "lebegő;B;k;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "A gyorsbillentyű \"%s\" a cm_Delete-tel lesz bejegyezve, így azt fel lehet használni, hogy megfordítsuk ezt a beállítást." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Gyorsbillentyű hozzáadása ehhez : %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Gyorsbillentyű hozzáadása" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Gyorsbillentyű beállítása sikertelen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Gyorsbillentyű cseréje" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Parancs" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "A cm_Delete gyorsbillentyűje \"%s\" rendelkezik paraméterrel amely felülírja ezt a beállítást. Szeretné megváltoztatni ezt a paramétert és használni a globális beállítást?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "A gyorsbillentyű \"%s\" a cm_Delete-hez paraméterváltozást igényel, hogy egyezzen \"%s\" gyorsbillentyűvel. Szeretné megváltoztatni?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Leírás" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Gyorsbillentyű szerkesztése ehhez : %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Állandó paraméter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Gyorsbillentyű" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Gyorsbillentyűk" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<semmi>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paraméterek" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Gyorsbillentyű beállítása törlésre" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Ahhoz, hogy a gyorsbillentyű \"%s\" működjön, a gyorsbillentyűt \"%s\" hozzá kell rendelni a cm_Delete parancshoz, de már hozzá van rendelve ehhez : \"%s\". Szeretné megváltoztatni?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "A gyorsbillentyű \"%s\" a cm_Delete-hez egy olyan szekvencia gyorsbillentyű amely a fordított Shift forrógombbal nem használható. Ez a beállítás valószínűleg nem fog működni." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "A gyorsbillentyű már foglalt" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "A gyorsbillentyű \"%s\" már foglalt" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Cseréli erre \"%s\"?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "erre van használva \"%s\", itt : \"%s\"" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "erre a parancsra van használva, de másik paraméterrel" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archívumok" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatikus frissítés" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Viselkedés" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Rövid nézet" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Színek" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Oszlopok" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Beállítás" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Egyedi oszlopok" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Kedvenc könyvtárak" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Húzd és ejtsd" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Meghajtólista gombok" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Fájltársítások" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Fájlműveletek" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Fájl panelek" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Fájlok megtekintése" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Fájltípusok" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Mappafülek" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Betűtípusok" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Kiemelők" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Gyorsbillentyűk" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikonok" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Kihagyási lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Gombok" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Nyelv" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Megjelenés" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Napló" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Egyéb" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Egér" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Beépülők" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Gyorskeresés/szűrő" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Eszköztár" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Eszközök" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Buboréktippek" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Sehol;Parancssor;Gyorskeresés;Gyorsszűrő" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Bal gomb;Jobb gomb;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "a fájl lista tetején;mappák után (ha a mappák hamarább vannak a fájloktól);rendezési sorrendben;a fájllista alján" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "A beépülő (%s) már hozzá van rendelve a következő kiterjesztés(ek)hez :" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktív" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Fájlnév" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Név" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Regisztrálva" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Érzéke&ny;Érzéke&tlen" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fájlok;&Mappák;Fájlok é&s Mappák" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Szűrőpanel elrejtése, &ha nem fókuszált" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nem karakterérzékeny;területi beállítások szerint (aAbBcC);előbb nagybetűs, aztán kisbetűs (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "rendezés név szerint és mutatja az elsőt;rendezés, mint a fájlokat és mutatja az elsőt;rendezés, mint a fájlokat" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Betűrendes, ékezetekre figyel;Természetes elrendezés : betűrendes és számok" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Felül;Alul;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Elválasztó;Belső pa&rancs;Külső ¶ncs;&Menü" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "ne módosítsa a helyzetet;használja az új fájl beállításait;rendezett sorrendben" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fájl : %d, mappa : %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "\"%s\" jogosultsága nem állítható" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "\"%s\" tulajdonosa nem állítható" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fájl" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Könyvtár" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Csőnév" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nem" #: ulng.rspropssocket msgid "Socket" msgstr "Foglalat" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciális blokk eszköz" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciális karakter eszköz" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Szimbolikus hivatkozás" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ismeretlen típus" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Igen (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Keresés eredménye" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<névtelen sablon>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Válasszon ki egy könyvtárat" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Súgó ehhez : %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Mind" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Parancs" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Előnézet" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "B" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "GB" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "kB" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "MB" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "TB" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fájlok:%d, Mappák:%d, Méret: %s (%s bájt)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nem lehet létrehozni a célkönyvtárat!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Hibás fájlméret formátum!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nem lehet darabolni a fájlt!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "A darabok száma több, mint 100! Folytassam?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Könyvtár kiválasztása :" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Hiba a szimbolikus hivatkozás létrehozásakor." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Átlagos szöveg" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Egyszerű szöveg" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Nap" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Óra" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Perc" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Hónap" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Másodperc" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Hét" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Év" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Különbségvizsgáló" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Szerkesztő" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Hiba a különbségvizsgáló megnyitásakor" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Hiba a szerkesztő megnyitásakor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Hiba a terminál megnyitásakor" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Hiba a nézőke megnyitásakor" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Nézőke" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Kérjük, jelezze a hibát a 'bug tracker'-en egy leírással, hogy mit csinált, és a következő fájlt : %s. Nyomja meg \"%s\" gombot a folytatáshoz, vagy \"%s\" gombot a programból való kilépéshez." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Hálózat" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "A Double Commander belső nézőkéje" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódolás" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Új méret" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nem található!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/�����������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717726�015076� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.pl.po�����������������������������������������������������0000644�0001750�0000144�00000111375�12250635767�020606� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: AlbercikCD\n" "PO-Revision-Date: 2007-01-14 00:01+0100\n" "Project-Id-Version: lclstrconsts\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.3\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "POT-Creation-Date: \n" "MIME-Version: 1.0\n" "X-Poedit-Language: Polish\n" "X-Poedit-Country: POLAND\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "" #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konwertuj" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Lewy przycisk myszy" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Środkowy przycisk myszy" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Prawy przycisk myszy" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Kontrolka nie może być sama swoim rodzicem" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Wszystkie pliki (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Pusty" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nie można ustawić ogniska." #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas nie pozwala na rysowanie" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Błąd przy tworzeniu \"gdb catchable\":" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "uprawnienia użytkownik grupa rozmiar data czas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocking msgid "Docking" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Błąd" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Błąd przy tworzeniu \"device context\" dla %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "BŁĄD w LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Błąd w %s przy %sAdres %s%s Ramka %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Błąd odczytu %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "Wyjątek" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Katalog musi istnieć" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Katalog \"%s\" nie istnieje." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Plik \"%s\" już istnieje. Nadpisać ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Plik musi istnieć" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Plik \"%s\" nie istnieje." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Plik \"%s\" nie jest zapisywalny." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Plik nie jest zapisywalny" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Zapisz plik jako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otwórz istniejący plik" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Chcesz nadpisać plik?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Ścieżka musi istnieć" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Ścieżka \"%s\" nie istnieje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Wybierz katalog" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(nie znaleziono pliku: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacja o pliku" #: lclstrconsts.rsfind msgid "Find" msgstr "" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols nie może być >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows nie może być >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Błąd przy zapisie formularza do strumienia \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Włącz specificzne dla GDK komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Wyłącz specificzne dla GDK komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Ostrzerzenia i błędy Gtk+/GDK zatrzymają aplikację." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Plik siatki nie istnieje" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nie może być mniejszy niż poprzedniego elementu menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtr:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Zgodnie z konwencją Xt klasę programu tworzy jego nazwa z pierwszą wielką literą. Np. nazwą klasy dla programu gimp jest \"Gimp\". Jeśli --class jest podane, klasa programu będzie ustawiona na \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Włącz specyficzne dla Gtk+ komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Połącz z podany mserwerem X; \"h\" jest nazwą hosta, \"s\" jest numerem serwera (zwykle 0), a \"d\" jest numerem ekranu (zwyle pomijanym). Jeśli --display nie jet podane, użyję zmienna środowiaka DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Ładuje podany moduł przy starcie." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Wyłącz specyficzne dla Gtk+ komunikaty śledzenia/odpluskwiania." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Nie ustawiaj nietrwałej kolejności dla modalnych formularzy" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Wyłącz używanie X Shared Memory Extension." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Wywołaj XSynchronize (display, True) Po połączeniu z serwerem X. To ułatwia odpluskwianie protokołu X, ponieważ buforowanie żądań X będzie wyłączonei błędy X będą odbierane natychmiast po przetworzeniu przez serwer X żądania, które spowodowało błąd." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Nie znaleziono pomocy" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d przekracza zakres 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks poza zakresem Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "błędny strumień obiektu formularza" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Błędna wartość właściwości" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Błędny format strumienia" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s jest już skojarzony z %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Indeks listy poza zakresem (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Lista musi być pusta" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Porzuć" #: lclstrconsts.rsmball msgid "&All" msgstr "&Wszystkie" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Anuluj" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Z&amknij" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "P&omoc" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Zignoruj" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nie" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nie na wszystkie" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Ponów próbę" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Tak" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Tak na &wszystkie" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " zmodyfikowany" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potwierdzenie" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Inny" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Błąd" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informacja" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Ostrzeżenie" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Nieprawidłowy plik siatki" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Wybierz datę" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Właściwość %s nie istnieje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Odśwież" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Zamień" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Zamień wszystko" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Nie znaleziono zasobu: %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Właściwość ScrollBar'u poza zakresem" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Wybierz kolor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Wybierz czcionkę" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " rozmiar " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nie można załadować domyślnej czcionki" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Nieznane rozszerzenie pliku obrazka" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nieobsługiwany format bitmapy." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nieobsługiwany format schowka: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UWAGA: Pozostały %d niezwolnione DC, szczegółowy zrzut poniżej:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UWAGA: Pozostało %d niezwolnionych GDIObject, szczegółowy zrzut poniżej:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UWAGA: Pozostało %d komunikatów w kolejce! Zostaną usunięte." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UWAGA: Pozostało %d struktur TimerInfo zostaną usunięte" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UWAGA: Pozostały %s nieusunięte dowiązania do LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Błąd:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Ostrzeżenie:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nie można ustawić ogniska na wyłączone lub niewidzialne okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Zdublowane menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Błędne tworzenie akcji" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Błędna enumeracja akcji" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Błędna rejestracja akcji" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Błędne wyrejestrowanie akcji" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Błędny rozmiar obrazka" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Błędny indeks ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indeks menu poza zakresem" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Element menu ma wartość nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu nie jest w menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Brak dostępnych timerów" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.da.po�����������������������������������������������������0000644�0001750�0000144�00000122624�12673236715�020555� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s kan ikke åbnes." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s kan ikke findes." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Fejl under udførsel %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Kan ikke finde en HTML-browser." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Ingen HTML-browser fundet. Definer venligst en under Værktøjer -> Indstillinger -> Hjælp -> Hjælp - indstillinger" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Hjælpedatabasen %s%s%s kunne ikke finde filen %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makroen %s i BrowserParams vil blive erstattet med URL'en." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "OK" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "programtast" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Store" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Ryd" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Kontrol" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konveter" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Slet" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Ned" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Udfør" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Endelig" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Hjælp" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Indsæt" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ventre musetast" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Venstre" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "venstre windowstast" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Miderste musetast" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Tilstandsændring" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Næste" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Ikke-konverteret" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerisk tastatur %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause-tast" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Tilbage" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Højre musetast" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Højre" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "højre windowstast" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rul" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Markér" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Mellemrumtast" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ukendt" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Op" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "kan ikke udføre %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s ikke fundet" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "programfil ikke fundet %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Mørk 3D-skygge" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Lys 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "En kontrol kan ikke have sig selv som overordnet" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktiv kant" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktiv titelliste" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Alle filer (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Arbejdsområde" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Akvamarin" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Skrivebord" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Tilbage" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Sort" #: lclstrconsts.rsblank msgid "Blank" msgstr "Tomt" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blå" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Knapflade" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Knap fremhævet" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Knapskygge" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Knaptekst" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Regnemaskine" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kan ikke fokusere" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Lærred tillader ikke tegning" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Titellistetekst" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Forskel på store og små bogstaver" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Kontrol over class '%s' kan ikke have kontrol over class '%s', da den er underordnet" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Kontrol '%s' har ikke et overordnet vindue" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' er ikke overordnet for '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme-farvet" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Opretter en GDB-fangbar fejl:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Markør" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Brugerdefineret ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Standard" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "tilladelser brugergruppe størrelse dato tid" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Slet optegnelse" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Slet" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Retning" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Mappe" #: lclstrconsts.rsdocking msgid "Docking" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Dobbelt ikon-format" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Redigere" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Søg hele filen" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fejl" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Kunne ikke oprette kontekst for enhed %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "FEJL i LCL" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fejl i %s på %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Kunne ikke læse %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Kunne ikke gemme bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Undtagelse" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Mappen skal eksistere" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Mappen \"%s\" findes ikke." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Filen \"%s\" findes allerede. Skal den overskrives ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Filen skal eksistere" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Filen \"%s\" findes ikke." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Filen \"%s\" er skrivebeskyttet." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Filen er skrivebeskyttet" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Gem som" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Åbn eksisterende fil" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Overskriv fil ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Stien skal eksistere" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Stien \"%s\" findes ikke." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Slet mappe" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(fil ikke fundet: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Filinformation" #: lclstrconsts.rsfind msgid "Find" msgstr "Søg" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Søg igen" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Første" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols kan ikke være >=ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows kan ikke være >=RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Formressourcen %s kan ikke findes. Til ressourceløse forms skal CreateNew constructor anvendes. Se den globale variable RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Form-streaming \"%s\" fejl: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Frem" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpur" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Tænd for særlig GDK trace/debug meddelelser." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Sluk for særlig GDK trace/debug meddelelser." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "GIF (Graphics Interchange Format)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Advarsler og fejl genereret af Gtk+/GDK vil standse programmet" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient af den aktive titelliste" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient af den inaktive titelliste" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grå" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Grå tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Grøn" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Mønsterfil findes ikke" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Mønsterindeks uden for interval" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex må ikke være mindre end forrige menus GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historik:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Ifølge Xt-konventionerne, er et programs class dets navn med det første tegn med stort. F.eks. er class-navnet for gimp: \"Gimp\". Hvis --class er specificeret, bliver programmets class til \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Tænd for særlig Gtk+ trace/debug meddelelser." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Forbind til den valgte X server, hvor \"h\" er værtsnavnet, \"s\" er serveres nummer (normalt 0), og \"d" er displayets nummer (typisk udeladt). Hvis --display ikke er specificeret, bliver DISPLAY miljøvariablen anvendt." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Indlæs det specificerede modul ved start." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Indstil programmets navn til \"progname\". Hvis ikke specificeret, bliver programmets navn sat til ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Sluk for særlig Gtk+ trace/debug meddelelser." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Indstil ikke midlertidig rækkefølge for modalformer" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Deaktiver brugen af X Delt Memory-udvidelse." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kald XSynchronize (display, True) efter Xserver-forbindelsen er etableret. Det gør det nemmere at fejlfinde X protokolfejl, fordi X forespørgsels-buffering bliver deaktiveret og X fejl bliver modtaget umiddelbart efter protokolanmodningen, som genererede fejlen, er blevet behandlet af X serveren." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Allerede registreret" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Der blev fundet en hjælpedatabase til emnet, men emnet blev ikke fundet" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Der er ingen hjælpedatabase installeret til emnet" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hjælpefejl" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Hjælpekontekst %s ikke fundet." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Hjælpekontekst %s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Hjælpedatabase %s%s%s fandt ikke en fremviser til en hjælpeside af typen %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Hjælpedatabase %s%s%s ikke fundet" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Hjælp til direktivet %s%s%s blev ikke fundet i database %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Søgeord %s%s%s ikke fundet." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Søgeord %s%s%s ikke fundet i Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Hjælpeknude %s%s%s har ingen hjælpedatabase tillknyttet" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Ingen hjælp til linje %d, kolonne %d af %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Ingen opslag tilgængelige for emnet" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ingen hjælp fundet for emnet" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Ikke registreret" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hjælpeudvælgerfejl" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Der er ingen fremviser for hjælpetype %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hjælpefremviserfejl" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Der blev ikke fundet en fremviser til denne type af hjælpeindhold" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Fremhævelse" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Fremhæv tekst" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Kraftigt fremhævet" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS ikon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Ikonbillede kan ikke være tomt" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Ikonbillede skal have samme format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kan ikke ændre ikonbilledets format" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Ikonbillede skal have samme størrelse" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kan ikke ændre ikonbilledets størrelse" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikon har intet gyldigt billede" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktiv kant" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktiv titelliste" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktiv titelliste" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d udenfor intervallet 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks udenfor celleintervallet [Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Baggrundsinformation" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informationstekst" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Indsæt" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Ugyldig dato : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ugyldig dato: %s. Skal være mellem %s og %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "ugyldigt formularobjekt-Stream " #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ugyldig egenskabsværdi" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Ugyldigt streamformat" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s er allerede associeret med %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG (Joint Picture Expert Group)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Sidste" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limegrøn" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Listeindekset overskrider grænser (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Listen skal være tom" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Rødbrun" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Afbryd" #: lclstrconsts.rsmball msgid "&All" msgstr "%Alle" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuller" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Luk" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Hjælp" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nej" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nej til alt" #: lclstrconsts.rsmbok msgid "&OK" msgstr "" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Åbn" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Forsøg igen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Gem" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Lås op" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja til alt" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Mellemgrå" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menubar" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu fremhævet" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menutekst" #: lclstrconsts.rsmodified msgid " modified " msgstr " ændret" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Pengegrøn" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Godkendelse" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bekræftelse" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Brugerdef." #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fejl" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Advarsel" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marineblå" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Næste" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ingen" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Ikke en gyldig mønsterfil" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Intet widgetset-objekt. Kontroller venligst om enheden \"interfaces\" blev tilføjet til programmerne brugerbetingelser." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivengrøn" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Vælg en dato" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sTryk OK for at ignorere og risikere ødelagt data.%sTryk Annuller for at afslutte programmet." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Tilbage" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Prompt, hvis flyttes" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Egenskab %s findes ikke" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpur" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (kun under X11), kørt under en debugger kan det forårsage en implicit -nograb. Brug -dograb for at tilsidesætte. Skal bruge QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, indstiller backenden til at blive brugt til widgets og QPixmaps på skærmen. Tilgængelige muligheder er lokale, raster og OpenGL. OpenGL er stadig ustabil." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, fortæller Qt at det aldrig skal gribe musen eller tastaturet. Skal bruge QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, indstiller programmets layoutretning for Qt::HøjreTilVenstre. " #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, genopretter programmet fra en tidligere session." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style eller-style=style, indstiller programmets brugergrænsefladestil. Mulige værdier er motiv, vinduer og platin. Hvis du har kompileret Qt med yderligere stilarter eller har yderligere stilarter plugins, vil disse være til rådighed for -style kommandolinjeindstillingen. BEMÆRK: Ikke alle stilarter er tilgængelige på alle platforme. Hvis style param ikke eksisterer, vil Qt starte et program med standardstil (Windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet eller-stylesheet=stylesheet, indstiller programmets stilart. Værdien skal være en sti til en fil, der indeholder stilarten. Bemærk: Relative URL'er i stilart-filen er relative i forhold til stilart-filens sti." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (kun under X11), skifter til synkronoserngstilstand for fejlsøgning." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, udskriver fejlsøgningsmeddelelse i slutningen om antallet af ikke-ødelagte widgets og det maksimale antal widgets, som eksisterede på samme tid." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg eller-background color, indstiller standardbaggrundsfarven og et programs farvepalette (lyse og mørke nuancer bliver beregnet)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn eller -button color, indstiller knappers standardfarve." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, får programmet til at installere et privat farveskema på en 8-bit skærm." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, indstiller X skærmen (standard er $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg eller -foreground color, indstiller forgrundens standardfarver." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn eller -font font, definerer programmets skrifttype. Skrifttypen defineres med en X logisk skrifttype-beskrivelse." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, indstiller geometrien af det første vindue, som vises på klienten." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, indstiller input-metoden på serveren (svarer til indstilling af XMODIFIERS miljøvariablen)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definerer, hvordan input indsættes i den givne widget, fx onTheSpot viser input direkte i widget, mens overTheSpot viser input i en boks flydende over widget og indsættes ikke før redigeringen er færdig." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, indstiller programmets navn." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, begrænser antallet af farver tildelt i farveterningen på en 8-bit skærm, hvis programmet bruger QApplication::ManyColor farvespecifikation. Hvis count er 216 så anvendes en 6x6x6 farveterning (dvs. 6 niveauer af rød, 6 grønne og 6 blå); for andre værdier, anvendes en terning omtrent proportional med en 2x3x1 terning." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, indstiller programmets titel." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, tvinger programmet til at bruge en visuel TrueColor på en 8-bit skærm." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Afslut opdatering, når ingen opdatering er i gang " #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kan ikke gemme billede, mens opdatering er i gang." #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kan ikke begynde 'opdater alt', mens 'opdater kun mønster' er i gang" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rød" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Genindlæs" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Erstat" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Erstat alt" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s ikke fundet" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Rullebjælke" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Rullebarens egenskaber er uden for intervallet" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Vælg farve" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Vælg en skrifttype" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Sølv" #: lclstrconsts.rssize msgid " size " msgstr " størrelse " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Himmelblå" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "En kontrol med tabulator" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Blågrøn" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF (Tagged Image File Format)" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "En greb til at styre, hvor store de to dele af et område skal være" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "En træstruktur af elementer" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kunne ikke indlæse skrifttypen" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Ukendt fejl, rapporter venligst fejlen" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ukendt filendelse på billedet" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Ukendt billedformat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Ikke-understøttet bitmapformat." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Ikke-understøttet udklipsholder-format: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ADVARSEL: Der er %d ikke-frigivne DC'er, et detaljeret dump følger:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ADVARSEL: Der er %d ikke-frigivne GDI-objekter, et detaljeret dump følger:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ADVARSEL: Der er stadig %d meddelelser i køen! De frigives nu" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ADVARSEL: Der er stadig %d TimerInfo strukturer. De frigives nu" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ADVARSEL: Der er stadig %s LM_PAINT/LM_GtkPAINT meddelelser tilbage." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Hvid" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Kun hele ord" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fejl:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Advarsel:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Vindue" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Vinduesramme" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Vinduestekst" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Gul" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kan ikke fokusere på et deaktiveret eller usynligt vindue" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Dublet-menuer" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ugyldig aktion oprettelse" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ugyldig aktion nummerering" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ugyldig aktion registrering" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ugyldig aktion afregistrering" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Tegnsettet i mønster \"%s\" er ikke gyldigt!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ugyldig billedstørrelse" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ugyldig billedliste-indeks" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Den aktuelle tekst matcher ikke den valgte maske." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menuindekset er uden for intervallet" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menuelementet er NIL" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Undermenu er ikke i menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Ned" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Venstre" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Højre" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "Mellemrum" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Op" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Ingen MDI-formular til stede" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Ingen timer til rådighed" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Forkert symboltype: %s var forventet" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ugyldigt kommatal: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ugyldigt heltal: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %.8x)" msgstr " (ved %d,%d, stream offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Uafsluttet byte-værdi" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Uafsluttet streng" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Forkert symbol: %s var forventet, men %s blev fundet" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Forkert symboltype: %s var forventet, men %s blev fundet"������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.sk.po�����������������������������������������������������0000644�0001750�0000144�00000113601�12250635767�020602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ translation of lclstrconsts.po to Slovenský Slavko <slavino@slavino.sk>, 2008. msgid "" msgstr "" "Project-Id-Version: lclstrconsts\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-02-02 16:22+0100\n" "PO-Revision-Date: 2008-11-16 19:50+0100\n" "Last-Translator: Slavko <slavino@slavino.sk>\n" "Language-Team: Slovenský <sk@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: KBabel 1.11.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Prehliadač %s%s%s nie je spustiteľný." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Prehliadač %s%s%s nenájdený." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Chyba·pri·vykonávaní·%s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "nemožno nájsť prehliadač HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Databáza pomocníka %s%s%s nemohla nájsť súbor %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v BrowserParams bude nahradené URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Veľkým" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Vyčistiť" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Prvok" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konvertovať" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Zmazať" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Dole" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Spustiť" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoc" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ľavé tlačítko myši" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ľavý Win kláves" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Stredné tlačítko·myši" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Ďalej" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerická klávesnica %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Kláves Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Tlačiť" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Pred" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Pravé tlačítko·myši" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "pravý Win kláves" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Vybrať" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snímka" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Medzerník" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznámy" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Prvok nemôže mať sám seba za rodiča" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Všetky súbory (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Spätný" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmapy" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prázdne" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulačka" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nemožno zamerať" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Plátno nedovoľuje kreslenie" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Citlivé na veľkosť" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Vlastné ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "povolenia používateľ skupina veľkosť dátum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Zmazať záznam?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Smer" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "A&dresár" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Dokovanie" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zdvojený formát ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Upraviť" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Chyba vytvárania kontextu zariadenie pre %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Chyba v LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Chyba čítania %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Chyba pri ukladaní bitmapy." #: lclstrconsts.rsexception msgid "Exception" msgstr "Výnimka" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Adresár musí existovať" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Adresár \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Súbor \"%s\" už existuje. Prepísať?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Súbor musí existovať" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Súbor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Súbor \"%s\" nie·je·zapisovateľný." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Súbor nie je zapisovateľný" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Uložiť súbor ako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otvoriť existujúci súbor" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Prepísať súbor?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Cesta musí existovať" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Výber adresára" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(súbor nenájdený: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Súborové informácie" #: lclstrconsts.rsfind msgid "Find" msgstr "Hľadať" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Hľadať ďalej" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Prvý" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols nemôže byť >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows nemôže byť >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Chyba streamovania formulára \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Súbor mriežky neexistuje" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index mriežky mimo rozsahu." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nemmôže byť menší ako GroupIndex predchádzajúcej položky menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "História:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Už je registrovaný" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Kontextová pomoc nenájdená" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Databáza·pomoci nenájdená" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Chyba pomoci" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Kontextová pomoc %s nenájdená." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Kontextová pomoc %s nenájdená v databáze %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Databáza pomoci %s%s%s nenašla zobrazovač pre stránku pomocníka typu %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Databáza pomoci %s%s%s nenájdená" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Kľúčové slovo pomoci %s%s%s nenájdené." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Kľúčové·slovo·pomoci·%s%s%s nenájdené v databáze %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Uzol pomocníka %s%s%s nemá databázu pomocníka" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nenájdený pomocník pre riadok %d, stĺpec %d %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nie sú dostupné žiadne uzly pomoci" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Pomoc nenájdená" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Neregistrovaný" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba selektora pomoci" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Nie je zobrazovač pre pomoc typu %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba zobrazovača pomoci" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Zobrazovač pomoci nenájdený" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Obrázok ikony nemôže byť prázdny" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Obrázok ikony musí mať rovnaký formát" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nemožno zmeniť formát obrázka ikony" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Obrázok ikony musí mať rovnakú veľkosť" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nemožno zmeniť veľkosť obrázka ikony" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nemá aktuálny obrázok" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d presahuje hranicu 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index mimo rozsahu Bunka[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Neplatný dátum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neplatný dátum: %s. Musí byť medzi %s a %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "neplatný prúd objektu Form" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neplatná hodnota vlastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neplatný formát streamu" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s už je priradený k %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Posledný" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Index zoznamu prekračuje hranice (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Zoznam musí byť prázdny" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Prerušiť" #: lclstrconsts.rsmball msgid "&All" msgstr "&Všetko" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Zrušiť" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zatvoriť" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Pomoc" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorovať" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nie" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nie pre všetky" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opakovať" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "Án&o" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Án&o pre všetky" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr ".. zmenené" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potvrdenie" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Vlastné" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informácia" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Upozornenie" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Ďalší" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Neplatný súbor mriežky" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Neexistuje objekt widgetsetu. Prosím skontrolujte, či je jednotka \"interfaces\" pridaná do klauzuly uses programu." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Výber dátumu" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "za" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sStlačte OK pre ignorovanie a risk porušenia dát.%sStlačte Zrušiť pre zabitie programu." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Pred" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Vlastnosť %s neexistuje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Koniec aktualizácie, ale aktualizácia nie je vykonávaná" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nemožno uložiť obrázok počas aktualizácie" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nemožno začať aktualizáciu všetkého, počas aktualizácie len plátna" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Obnoviť" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Nahradiť" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Nahradiť všetko" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenájdený" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Vlastnosť ScrollBar mimo rozsahu" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Výber farby" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Výber fontu" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr "..veľkosť " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nemožno načítať predvolený font" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Neznáma chyba, prosím ohláste túto chybu" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznáma prípona obrázku" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodporovaný formát bitmapy" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UPOZORNENIE: Existuje %d neuvoľnených DCs, detailný výpis nasleduje:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UPOZORNENIE: Existuje %d neuvoľnených GDIObjects, detailný výpis nasleduje:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UPOZORNENIE: Vo fronte ostáva %d správ! Uvoľním ich" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UPOZORNENIE: Ostáva %d štruktúr TimerInfo, uvoľním ich" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UPOZORNENIE: Ostáva %s neodstránených správ LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Len celé slová" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Chyba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Upozornenie:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nemôžem zamerať vypnuté alebo neviditeľné okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikované menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neplatné akcia vytvorenia" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neplatné·akcia vymenovania" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neplatné·akcia registrácie" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neplatné·akcia odregistrovania" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Množina znakov v maske \"%s\" nei je platná!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neplatná veľkosť obrázku" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neplatný index ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index menu mimo rozsahu" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem je nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu nie je v menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Dole" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nie je MIDI formulár" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nie sú dostupné žiadne časovače" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Zlý typ tokenu: očakávaný %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neplatné číslo s pohyblivou rádovou čiarkou: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Neukončená bytová hodnota" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený reťazec" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Zlý symbol tokenu: očakávaný bol %s, ale nájdený bol %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Zlý typ tokenu: očakávaný bol %s , ale nájdený bol %s" �������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.hu.po�����������������������������������������������������0000644�0001750�0000144�00000123217�12354033623�020571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Péter Gábor <ptrg@freemail.hu>\n" "Language-Team: Magyar (Hungarian)\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable #| msgid "Browser %s%s%s not executable." msgid "Browser \"%s\" not executable." msgstr "A böngésző nem végrehajtható: \"%s\"" #: lclstrconsts.hhshelpbrowsernotfound #| msgid "Browser %s%s%s not found." msgid "Browser \"%s\" not found." msgstr "A böngésző nem található: \"%s\"" #: lclstrconsts.hhshelperrorwhileexecuting #| msgid "Error while executing %s%s%s:%s%s" msgid "Error while executing \"%s\":%s%s" msgstr "Hiba a végrehajtás közben: \"%s\":%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nem található HTML böngésző." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "" "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> " "Help Options" msgstr "" "Nincs HTML böngésző. %s Meg kell adni egyet: Eszközök -> Beállítások -> Súgó " "-> Súgó beállítások" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile #| msgid "The help database %s%s%s was unable to find file %s%s%s." msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "A(z) \"%s\" súgóadatbázishoz hiányzik a \"%s\" fájl." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A(z) %s makrót az URL helyettesíti a BrowserParams-ban." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Elfogadás" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Alkalmazás billentyű" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Nagy betűk" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Törlés" #: lclstrconsts.ifsvk_cmd #, fuzzy msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control #, fuzzy msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Átalakítás" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Le" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Végrehajtás" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Végső" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Súgó" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Bal egérgomb" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Balra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "bal windows billentyű" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Középső egérgomb" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Módváltás" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Következő" #: lclstrconsts.ifsvk_nonconvert #, fuzzy msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause billentyű" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Nyomtatás" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Előző" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Jobb egérgomb" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Jobbra" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "jobb windows billentyű" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Görgetés" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Kijelölés" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Pillanatkép" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Szóköz" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Ismeretlen" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Fel" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Az erőforrás nem található: %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D sötét árnyék" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D megvilágítás" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "A vezérlő nem lehet saját szülője" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktív keret" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktív cím" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Minden fájl (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Alkalmazás munkaterülete" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Világoskék" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Asztal" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Vissza" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitképek" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Fekete" #: lclstrconsts.rsblank msgid "Blank" msgstr "Üres" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Kék" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Gomb felszíne" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Gomg megvilágítva" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Gomb árnyéka" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Gomb felirata" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Számológép" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nem lehet fókuszálni" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "A vászonra nem lehet rajzolni" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Felirat szövege" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Kis-/nagybetűre érzékeny" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "'%s' osztályú vezérlőnek nem lehet gyermeke egy '%s' osztályú vezérlő" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "A(z) '%s' vezérlőnek nincs szülő ablaka" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' nem szülője ennek: '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krém" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "GDB által feldolgozható hiba készítése:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kurzor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Saját ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Alapértelmezett" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "engedélyek felhasználó csoport méret dátum idő" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Rekord törlése?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Törlés" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Irány" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Könyvtár" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Dokkolás" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Kettős ikonformátum" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Szerkesztés" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Keresés az egész fájlban" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Hiba" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Hiba az eszköz-környezet létrhozásakor a(z) %s.%s számára" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "HIBA az LCL-ben:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Hiba történt ebben: %s%sCím: %s%s Keret: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Hiba a bitkép mentése közben." #: lclstrconsts.rsexception msgid "Exception" msgstr "Kivétel" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "A könyvtárnak léteznie kell" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "A(z) \"%s\" könyvtár nem létezik." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "A(z) \"%s\" fájl már létezik. Felülírható?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "A fájlnak léteznie kell" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "A(z) \"%s\" fájl nem létezik." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "A(z) \"%s\" fájl nem írható." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "A fájl nem írható" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Fájl mentése másként" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Látező fájl megnyitása" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Felülírható a fájl?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Az útvonalnak léteznie kell" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "A(z) \"%s\" útvonal nem tezik." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Könyvtár kiválasztása" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(a fájl nem található: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Fájlinformáció" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(szűrő)" #: lclstrconsts.rsfind msgid "Find" msgstr "Keresés" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "További keresés" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Első" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols nem lehet > ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows nem lehet > RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "" "Form resource %s not found. For resourceless forms CreateNew constructor " "must be used. See the global variable RequireDerivedFormResource." msgstr "" "Az űrlap forrása (%s) nem található. Forrásfájl nélküli űrlapok " "létrehozásához a CreateNew constructor használata szükséges. Lásd a globális " "RequireDerivedFormResource változót." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Form adatfolyam \"%s\" hiba: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Előre" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fukszia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" "--gdk-debug jelzők Bekapcsolja a megadott GDK nyomkövetési/hibakeresési " "üzeneteket." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" "--gdk-no-debug jelzők Kikapcsolja a megadott GDK nyomkövetési/" "hibakeresési üzeneteket." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "" "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt " "the application." msgstr "" "--g-fatal-warnings A Gtk+/GDK által generált figyelmeztetések és hibák " "leállítják az alkalmazást." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Aktív gradiens cím" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Inaktív gradiens cím" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Szürke" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Szürke szöveg" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zöld" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "A táblafájl nem létezik" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "A táblaindex kilóg a lehetséges tartományból" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nem lehet kisebb, mint egy előző menü elem GroupIndex-e" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Szűrő:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Előzmények:" #: lclstrconsts.rsgtkoptionclass msgid "" "--class classname Following Xt conventions, the class of a program is " "the program name with the initial character capitalized. For example, the " "classname for gimp is \"Gimp\". If --class is specified, the class of the " "program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" "--gtk-debug jelzők Bekapcsolja a megadott Gtk+ nyomkövetési/hibakeresési " "üzeneteket." #: lclstrconsts.rsgtkoptiondisplay msgid "" "--display h:s:d Connect to the specified X server, where \"h\" is the " "hostname, \"s\" is the server number (usually 0), and \"d\" is the display " "number (typically omitted). If --display is not specified, the DISPLAY " "environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modul Betölti a megadott modult induláskor." #: lclstrconsts.rsgtkoptionname msgid "" "--name programe Set program name to \"progname\". If not specified, " "program name will be set to ParamStrUTF8(0)." msgstr "" "--name prognév Beállítja a program nevét a \"prognév\" értékére. Ha " "nincs megadva, a program neve a ParamStrUTF8(0) értékére lesz beállítva." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" "--gtk-no-debug jelzők Kikapcsolja a megadott Gtk+ nyomkövetési/hibakeresési " "üzeneteket." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" "--lcl-no-transient Nem lesz beállítva ideiglenes sorrend a modal form-ok " "számára" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" "--no-xshm Letiltja az X Shared Memory Extension használatát." #: lclstrconsts.rsgtkoptionsync msgid "" "--sync Call XSynchronize (display, True) after the Xserver " "connection has been established. This makes debugging X protocol errors " "easier, because X request buffering will be disabled and X errors will be " "received immediately after the protocol request that generated the error has " "been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Már regisztrálva van" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Van súgóadatbázis ehhez a témakörhöz, de ez a témakör nem található." #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Nincs súgóadatbázis telepítve ehhez a témakörhöz" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Súgó hiba" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "A(z) %s súgó témakör nem található" #: lclstrconsts.rshelphelpcontextnotfoundindatabase #| msgid "Help context %s not found in Database %s%s%s." msgid "Help context %s not found in Database \"%s\"." msgstr "A(z) %s súgó témakör nem található a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" "A(z) %s%s%s súgó adatbázis nem talált megjelenítőt a(z) %s típusú súgó " "oldalhoz" #: lclstrconsts.rshelphelpdatabasenotfound #| msgid "Help Database %s%s%s not found" msgid "Help Database \"%s\" not found" msgstr "A(z) \"%s\" súgó adatbázis nem található" #: lclstrconsts.rshelphelpfordirectivenotfound #| msgid "Help for directive %s%s%s not found." msgid "Help for directive \"%s\" not found." msgstr "Nem található súgó a(z) \"%s\" direktívához." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase #| msgid "Help for directive %s%s%s not found in Database %s%s%s." msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "Nem található súgó a(z) \"%s\" direktívához a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpkeywordnotfound #| msgid "Help keyword %s%s%s not found." msgid "Help keyword \"%s\" not found." msgstr "A(z) \"%s\" súgó kulcsszó nem található." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase #| msgid "Help keyword %s%s%s not found in Database %s%s%s." msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "A(z) \"%s\" súgó kulcsszó nem található a(z) \"%s\" adatbázisban." #: lclstrconsts.rshelphelpnodehasnohelpdatabase #| msgid "Help node %s%s%s has no Help Database" msgid "Help node \"%s\" has no Help Database" msgstr "A(z) \"%s\" elemhez nincs súgó adatbázis" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nem található súgó a %d. sorhoz, %d. oszlophoz ebben: %s." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Nincs elérhető súgóbejegyzés ehhez a témához" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Nincs súgó ehhez a témához" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Nincs regisztrálva" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Súgó kiválasztó hiba" #: lclstrconsts.rshelpthereisnoviewerforhelptype #| msgid "There is no viewer for help type %s%s%s" msgid "There is no viewer for help type \"%s\"" msgstr "Nincs megjelenítő a(z) \"%s\" típusú súgóhoz." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Súgó megjelenítő hiba" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Nincs megjelenítő az ilyen típusú súgótartalomhoz" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Kiemelés" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Szöveg kiemelése" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Meleg Fény" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X ikon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Az ikon képe nem lehet üres" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Az ikon képének azonos formátumúnak kell lennie" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Az ikon képének formátumát nem lehet meváltoztatni" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Az ikon képének azonos méretűnek kell lennie" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Az ikon képének méretét nem lehet megváltoztatni" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Az ikonnak nincs jelenleg képe" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktív keret" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktív cím" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktív cím" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "A(z) %s %d Index a 0 .. %d tartományon kívül esik" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Az index a tartományon kívül esik Cella[Oszlop=%d Sor=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Infó háttér" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Infó szöveg" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Beszúrás" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Hibás dátum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Hibás dátum: %s. %s és %s között kell lennie." #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "érvénytelen Form objektum adatfolyam" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Érvénytelen tulajdonság érték" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Érvénytelen stream formátum" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s már hozzá van rendelve ehhez: %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Utolsó" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Élénkzöld" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "A lista indexe a határon kívül esik (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "A listának üresnek kell lennie" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Gesztenyebarna" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Megszakítás" #: lclstrconsts.rsmball msgid "&All" msgstr "&Mind" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Mégsem" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Be&zár" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Súgó" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "Ki&hagyás" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nem" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nem, mindre" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Ok" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Megnyitás" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Új&ra" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Menté&s" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Feloldás" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Igen" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Igen, mindre" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Középszürke" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menüsáv" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menü kiemelése" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menü szövege" #: lclstrconsts.rsmodified msgid " modified " msgstr " módosítva" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Pénzzöld" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Hitelesítés" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Jóváhagyás" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Egyedi" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Hiba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Információ" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Figyelmeztetés" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Tengerkék" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Következő" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Semmi" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Érvénytelen táblafájl" #: lclstrconsts.rsnowidgetset msgid "" "No widgetset object. Please check if the unit \"interfaces\" was added to " "the programs uses clause." msgstr "" "Nincs widgetset objektum. Ellenőrizze, hogy az \"interfaces\" unit hozzá " "lett-e adva a program uses részéhez." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olívazöld" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Dátum kiválasztása" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint #, fuzzy msgid "Post" msgstr "Elküldés" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the " "program." msgstr "" "%s%sAz OK-t választva figyelmen kívül hagyja és adatsérülést kockáztat. %sA " "Mégsem gombbal bezárja a programot." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Előző" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Kérdés felülírásnál" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "A tulajdonság nem létezik: %s" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Lila" #: lclstrconsts.rsqtoptiondograb msgid "" "-dograb (only under X11), running under a debugger can cause an implicit -" "nograb, use -dograb to override. Need QT_DEBUG." msgstr "" "-dograb (csak X11 alatt), a hibakeresőben történő futtatás akaratlan \"-" "nograb\"-ot okozhat, a -dograb használata ezt bírálja felül. QT_DEBUG " "szükséges hozzá." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "" "-graphicssystem param, sets the backend to be used for on-screen widgets and " "QPixmaps. Available options are native, raster and opengl. OpenGL is still " "unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "" "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need " "QT_DEBUG." msgstr "" "-nograb, utasítja a Qt rendszert, hogy ne sajátítsa ki az egeret vagy a " "billentyűzetet. QT_DEBUG szükséges hozzá." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" "-reverse, beállítja az alkalmazás elrendezési irányát a Qt::RightToLeft " "értékre." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" "-session munkamenet, visszaállítja az alkalmazást egy korábbi munkamenetből." #: lclstrconsts.rsqtoptionstyle msgid "" "-style style or -style=style, sets the application GUI style. Possible " "values are motif, windows, and platinum. If you compiled Qt with additional " "styles or have additional styles as plugins these will be available to the -" "style command line option. NOTE: Not all styles are available on all " "platforms. If style param does not exist Qt will start an application with " "default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "" "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style " "Sheet. The value must be a path to a file that contains the Style Sheet. " "Note: Relative URLs in the Style Sheet file are relative to the Style Sheet " "file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (csak X11 alatt), szinkronmódba kapcsol a hibakereséshez." #: lclstrconsts.rsqtoptionwidgetcount msgid "" "-widgetcount, prints debug message at the end about number of widgets left " "undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "" "-bg or -background color, sets the default background color and an " "application palette (light and dark shades are calculated)." msgstr "" "-bg vagy -background szín, beállítja az alkalmazás alapértelmezett " "háttérszínét és színkészletét (a világos és sötét árnyalatok számított " "értékek)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn vagy -button szín, beállítja a gombok alapértelmezett színét." #: lclstrconsts.rsqtoptionx11cmap msgid "" "-cmap, causes the application to install a private color map on an 8-bit " "display." msgstr "" "-cmap, egyéni színösszeállítás használatára kényszeríti az alkalmazást 8-" "bites megjelenítőn." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" "-display megjelenítő, beállítja az X megjelenítőt (alapértelmezett a " "$DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg vagy -foreground szín, beállítja az alapértelmezett előtérszínt." #: lclstrconsts.rsqtoptionx11font msgid "" "-fn or -font font, defines the application font. The font should be " "specified using an X logical font description." msgstr "" "-fn vagy -font betűtípus, beállítja az alkalmazás betűtípusát, A betűtípust " "az X logikai betűtípus leírás használatával kell megadni." #: lclstrconsts.rsqtoptionx11geometry msgid "" "-geometry geometry, sets the client geometry of the first window that is " "shown." msgstr "" "-geometry elhelyezés, megadja az elsőként megjelenő ablak elhelyezkedését." #: lclstrconsts.rsqtoptionx11im msgid "" "-im, sets the input method server (equivalent to setting the XMODIFIERS " "environment variable)." msgstr "" "-im, beállítja a beviteli mód kiszolgálóját (ugyanúgy mint az XMODIFIERS " "környezeti változó beállítása)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "" "-inputstyle, defines how the input is inserted into the given widget, e.g. " "onTheSpot makes the input appear directly in the widget, while overTheSpot " "makes the input appear in a box floating over the widget and is not inserted " "until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name név, beállítja az alkalmazás nevét." #: lclstrconsts.rsqtoptionx11ncols msgid "" "-ncols count, limits the number of colors allocated in the color cube on an " "8-bit display, if the application is using the QApplication::ManyColor color " "specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 " "levels of red, 6 of green, and 6 of blue); for other values, a cube " "approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title cím, beállítja az alkalmazás címét." #: lclstrconsts.rsqtoptionx11visual msgid "" "-visual TrueColor, forces the application to use a TrueColor visual on an 8-" "bit display." msgstr "" "-visual TrueColor, az alkalmazást TrueColor megjelenítés használatára " "kényszeríti 8-bites megjelenítőn." #: lclstrconsts.rsrasterimageendupdate #, fuzzy msgid "Endupdate while no update in progress" msgstr "Endupdate esemény miközben nincs frissítés folyamatban" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "A kép mentése nem lehetséges frissítés közben" #: lclstrconsts.rsrasterimageupdateall #, fuzzy msgid "Cannot begin update all when canvas only update in progress" msgstr "" "Nem kezdhető el az összes frissítése amikor helyi frissítés van folyamatban" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Piros" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Frissítés" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Csere" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Mindet cseréli" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Az erőforrás nem található: %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Görgetősáv" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "ScrollBar tulajdonság a tartományon kívül esik" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Szín kiválasztása" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Betűtípus kiválasztása" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Ezüst" #: lclstrconsts.rssize msgid " size " msgstr " méret " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Égszín kék" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Egy vezérlő fülekkel" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Kékeszöld" #: lclstrconsts.rstext msgid "Text" msgstr "Szöveg" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" "Egy fogantyú, amivel egy terület két részre osztásának arányát lehet állítani" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Egy fa elemekkel" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nem lehet betölteni az alapértelmezett betűtípust" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Ismeretlen hiba, kérem jelentse" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ismeretlen kép kiterjesztés" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Ismeretlen képformátum" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nem támogatott bitkép-formátum" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nem támogatott vágólap-formátum: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" " FIGYELMEZTETÉS: %d nem felszabadított DC van, részletes memóriakép " "következik:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" " FIGYELMEZTETÉS: %d nem felszabadított GDIObject van, részletes memóriakép " "következik:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " FIGYELMEZTETÉS: %d üzenet maradt a sorban! Fel lesznek szabadítva" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " FIGYELMEZTETÉS: %d TimerInfo struktúra maradt, fel lesznek szabadítva" #: lclstrconsts.rswarningunremovedpaintmessages msgid "" " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" " FIGYELMEZTETÉS: %s el nem távolított LM_PAINT/LM_GtkPAINT üzenet hivatkozás " "maradt." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Fehér" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Csak egész szavak" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Hiba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Figyelmeztetés:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Ablak" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Ablakkeret" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Ablak szövege" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Sárga" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nem lehet letiltott vagy láthatatlan ablakot előtérbe hozni" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Többszörös menük" #: lclstrconsts.sinvalidactioncreation #, fuzzy msgid "Invalid action creation" msgstr "Érvénytelen művelet létrehozás" #: lclstrconsts.sinvalidactionenumeration #, fuzzy msgid "Invalid action enumeration" msgstr "Érvénytelen művelet felsorolás" #: lclstrconsts.sinvalidactionregistration #, fuzzy msgid "Invalid action registration" msgstr "Érvénytelen művelet regisztrálás" #: lclstrconsts.sinvalidactionunregistration #, fuzzy msgid "Invalid action unregistration" msgstr "Érvénytelen művelet kiregisztrálás" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "A karakterkészlet a \"%s\" maszkban érvénytelen!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Érvénytelen képméret" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Érvénytelen ImageList index" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "A jelenlegi szöveg nem illeszkedik a megadott mintára." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menü index a tartományon kívül esik" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem értéke nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Az almenü nincs a menüben" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Le" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Balra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Jobbra" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Szóköz" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Fel" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nincs MDI form." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nincsenek elérhető időzítők" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Rossz token típus: %s az elvárt" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Érvénytelen lebegőpontos szám: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Érvénytelen egész szám: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (itt: %d,%d, az adatfolyamban itt: %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Lezáratlan byte érték" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Lezáratlan karakterlánc" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Rossz token szimbólum: %s az elvárt, de %s található" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Rossz token típus: %s az elvárt, de %s található" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.ro.po�����������������������������������������������������0000644�0001750�0000144�00000077567�12524074426�020622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Maximilian Machedon <maximilian.machedon@gmail.com>, 2015. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-12-25 21:16Z\n" "PO-Revision-Date: 2015-04-12 14:55-0700\n" "Last-Translator: Maximilian Machedon <maximilian.machedon@gmail.com>\n" "Language-Team: Maximilian Machedon\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2);;\n" "X-Generator: Virtaal 0.7.1\n" "X-Native-Language: Română\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navigatorul %s%s%s nu este executabil." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navigatorul %s%s%s nu a fost găsit." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Eroare în cursul execuției %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nu s-a putut găsi un navigator HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "" #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Acceptă" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Revocare" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajutor" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Acasă" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserează" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Stânga" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocking msgid "Docking" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "" #: lclstrconsts.rsmball msgid "&All" msgstr "" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "" #: lclstrconsts.rsmbno msgid "&No" msgstr "" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "" #: lclstrconsts.rsmbok msgid "&OK" msgstr "" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr "" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr "" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.po��������������������������������������������������������0000644�0001750�0000144�00000100417�12250635767�020167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "" #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocking msgid "Docking" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "" #: lclstrconsts.rsfind msgid "Find" msgstr "" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "" #: lclstrconsts.rsmball msgid "&All" msgstr "" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "" #: lclstrconsts.rsmbno msgid "&No" msgstr "" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "" #: lclstrconsts.rsmbok msgid "&OK" msgstr "" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr "" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr "" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "" #: lclstrconsts.rswin32error msgid "Error:" msgstr "" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.ca.po�����������������������������������������������������0000644�0001750�0000144�00000116365�12250635767�020562� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2008-11-26 11:49+0100\n" "Last-Translator: Antoni Clavell <antoni@clavell.org>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s no executable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s no trobat." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Error en executar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "No puc trobar un navegador HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de dades de l'ajuda %s%s%s no ha pogut trobar el fitxer %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s en BrowserParams (paràmetres navegador) serà substituïda per la URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accepta" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tecla d'aplicació" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Espai enrere" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Majúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Neteja" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converteix" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Esborra" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Avall" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fi" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escapa" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Executa" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Inici" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insereix" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botó esquerre del ratolí" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Esquerra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tecla windows esquerra" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Butó del mig del ratolí" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menú" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Canvi de mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Pròxim" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "No convertible" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Teclat numèric" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Teclat numèric %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla de pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimeix" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Previ" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botó dret del ratolí" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retorn" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Dreta" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla windows dreta" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Explora" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecciona" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Majúsc." #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Captura" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Espaiador" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconegut" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Amunt" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurs %s no trobat" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Un control no pot cridar-se a ell mateix" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tots els fitxers (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Enrere" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Mapes de bits" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "En blanc" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "No es pot focalitzar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "El marc no permet el dibuix" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensible a majúsc-minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creant un error gdb capturable:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permisos usuari grup mida dia hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Esborra" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direcció" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Directori" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Fixa" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Error en crear dispositiu de context per a %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERROR en LCL" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Error ocorregut en %s a l'%sAdreça %s%s Estructura %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Error en llegir %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Error en desar el mapa de bits" #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepció" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Cal que el directori existeixi" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "El directori \"%s\" no existeix." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "El fitxer \"%s\" ja existeix. El sobrescric ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "El fitxer ha d'existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "El fitxer \"%s\" no existeix." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "El fitxer \"%s\" no és d'escriptura." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "No es pot escriure aquest fitxer" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Anomena i desa el fitxer" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Obre fitxer existent" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescric el fitxer?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "El camí ha d'existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "El camí \"%s\" no existeix." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecciona directori" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(fitxer no trobat: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informació del fitxer" #: lclstrconsts.rsfind msgid "Find" msgstr "Busca" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Busca més" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols (columnes fixades) no poden ser>= ColCount (recompte de columnes)" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows (files fixades) no poden ser >= RowCount (recompte de files)" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Formació del corrent \"%s\" amb error: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Endavant" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Engega missatges específics de GDK de traça/depuració." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Tanca els missatges específics GDK de traça/depuració." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Els errors i advertències generats per Gtk+/GDK aturaran l'aplicació." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "No existeix fitxer de la graella" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índex de la graella fora de rang" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex no pot ser menor que un ítem de menú GroupIndex anterior." #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtre:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historial:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguint les convencions Xt, la classe d'un programa és el nom del programa amb el caràcter inicial en majúscula. Per exemple, el nom de classe (classname) per al gimp és \"Gimp\". Si --class s'especifica, la classe del programa serà posada com \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Mostra missatges Gtk+ específics de traça/depuració." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Connecta al servidor X especificat, on \"h\" és el nom del host, \"s\" és el número del servidor (usualment 0), i \"d\" és el número a mostrar (típicament omès). Si --display no s'ha especificat,s'usarà l'entorn variable DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Carrega el mòdul especificat a l'engegar." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Posa el nom del programa a \"progname\". Si no s'ha especificat, el nom serà posat a ParamStr(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Tanca els missatges Gtk+ específics de traça/depuració." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient No posis ordre transient per a formes modals." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desactiva l'ús de l'extensió X de memòria compartida." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Crida XSynchronize (display, True) un cop la connexió al Xserver ha estat establerta. Això facilita que la depuració d'errors del protocol X sigui més senzilla, perquè la demanda de memòria cau X serà desactivad i els errors X seran rebuts immediatament després que la demanda del protocol que ha generat l'error ha estat processat pel servidor X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "Ja enregistrat" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "No trobo ajuda contextual" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Base de dades de l'ajuda no trobada" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Error d'ajuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Context d'ajuda %s no trobat." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Context d'ajuda %s no trobat en la base de dades %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "La base de dades de l'ajuda %s%s%s no ha trobat un visor per una pàgina d'ajuda del tipus %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de dades de l'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Paraula clau d'ajuda %s%s%s no trobada" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Paraula clau d'ajuda %s%s%s no trobada en la base de dades %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "El node d'ajuda %s%s%s no té base de dades d'ajuda" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "No s'ha trobat cap ajuda per a la línia %d, columna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "No hi ha nodes d'ajuda disponibles" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Ajuda no trobada" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "No enregistrat" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector d'ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "No hi ha cap visor per al tipus d'ajuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Error del visor d'ajuda" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visor d'ajuda no trobat" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s índex %d fora de límits 0-%d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índex fora de rang Cel·lal[Col=%d Fila=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insereix" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Data no vàlida: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data no vàlida: %s. Cal que estigui entre %s i %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Corrent d'objecte de forma no vàlid" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de la propietat no vàlid" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Corrent amb format invàlid" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s ja està associat amb %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "L'índex de la llista excedeix els límits (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Cal que la llista sigui buida" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Cancel·la" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tot" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancel·la" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Tan&ca" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignora" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a tot" #: lclstrconsts.rsmbok msgid "&OK" msgstr "D'&acord" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Torna-ho a provar" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sí" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sí a &tot" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menú" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificat " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmació" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalitza" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Error" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informació" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avís" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Pròxim" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Fitxer de graella no vàlid" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "No hi és com a objecte o dispositiu. Sisplau, comproveu si la unitat \"interfaces\" (interfícies) fou afegida a la clàusula d'usos del programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecciona una data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Mapa de píxels" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s%sPolseu Ok per ignorar, tot arriscant de corrompre les dades.%sPolseu Cancel per interrompre el programa" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Previ" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propietat %s no existeix" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substitueix" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substitueix-ho tot" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurs %s no trobat" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propietat de la barra de desplaçament fora de mida" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Tria color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecciona tipus de lletra" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " mida " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "No puc carregar la font per defecte" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Error desconegut. Sisplau reporteu-lo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensió d'imatge desconeguda" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format de mapa de bits no suportat" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Format del portaretalls no suportat: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Avís: hi ha %d DCs no llançats, tot seguit es mostra informació detallada:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Avís: Hi ha %d Objectes-GDI no llançats, tot seguit es mostra informació detallada:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Avís: Hi ha %d missatges perduts a la cua!, els allibero" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Avís: s'han perdut %d estructures TimerInfo, les allibero" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "Avís: S'han deixat %s enllaços a missatge LM_PAINT/LM_GtkPAINT, sense eliminar" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Només mots sencers" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Error:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Avís:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "No puc accedir a una finestra invisible o tancada" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menús duplicats" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creació d'acció no vàlida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeració d'acció no vàlida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Enregistrament d'acció no vàlid" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Acció de desenregistrar invàlida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "El caràcter de la màscara \"%s\" no és vàlid!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Mida de la imatge no vàlida" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índex de llista d'imatges no vàlid" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índex de menú fora de rang" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "L'opció no hi és al menú" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "El submenú no és al menú" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Avall" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fi" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Inici" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Dreta" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Amunt" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "No hi ha cap forma MDI present" #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hi ha rellotges disponibles" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.fr.po�����������������������������������������������������0000644�0001750�0000144�00000124640�12250635767�020601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\n" "PO-Revision-Date: 2011-12-14 14:37+0100\n" "Language-Team: Zebulon Tourneboulle <zebulon.tourneboulle@gmail.com>\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "MIME-Version: 1.0\n" "POT-Creation-Date: \n" "Project-Id-Version: Double Commander 0.5.1 beta\n" "X-Poedit-Bookmarks: -1,190,-1,-1,-1,-1,-1,-1,-1,-1\n" "X-Poedit-Language: French\n" "X-Poedit-Country: BELGIUM\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navigateur %s%s%s non exécutable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navigateur %s%s%s non trouvé." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Erreur en exécutant %s%s%s : %s%s" Le chemin défini pour la config n'existe pas dans la version 0.5.1 pour linux !!! #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossible de trouver un navigateur HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de données d'aide %s%s%s ne trouve pas le fichier %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s dans BrowserParams sera remplacée par l'URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accepter" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "touche application" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Retour arrière" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuler" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Majuscule" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Effacer" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Contrôle" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convertir" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Supprimer" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Bas" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fin" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Echappement" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Exécuter" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" Je préfère traduire par "Origine" plutôt que par "Maison"... #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Aide" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Origine" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insérer" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Bouton gauche de la souris" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Gauche" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Touche Windows gauche" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Bouton central de la souris" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Changement de mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Suivant" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Non converti" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Verr num." #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "%d pav num." #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Touche pause" Dans quel contexte ??? #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimer" #: lclstrconsts.ifsvk_prior #, fuzzy msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prioritaire" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Bouton droit de la souris" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retour" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Droite" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Touche Windows droite" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Défilement" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Sélectionner" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Maj." #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Capture d'écran" ??? #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Barre d'espace" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Étiquette" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Inconnu" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Haut" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "impossible d'exécuter %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s non trouvée" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "fichier du programme non trouvé %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Dark Shadow" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Light" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Un contrôle ne peut pas être son propre parent" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bordure active" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Champ actif" Dans quel contexte ??? #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tous les fichiers (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espace de travail de l'application" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Bureau" ??? Attention car c'es t un mode de représentation des images... #: lclstrconsts.rsbackward msgid "Backward" msgstr "Arrière" #: lclstrconsts.rsbitmaps #, fuzzy msgid "Bitmaps" msgstr "Images" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Noir" #: lclstrconsts.rsblank msgid "Blank" msgstr "Blanc" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Bleu" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face du bouton" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Bouton en surbrillance" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Ombre du bouton" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texte du bouton" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculateur" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Anuler" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossible de focaliser" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Dessin sur le canevas non autorisé" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texte du champ" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Respecter la casse" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Le contrôle de la classe '%s' ne peut pas avoir le contrôle sur la classe '%s' comme enfant" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Le contrôle '%s' n'a pas de fenêtre parente" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crême" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Créer une erreur d'arrêt de gdb :" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Curseur" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personnaliser..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Défaut" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permission utilisateur groupe taille date heure" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Supprimer l'enregistrement ?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Supprimer" Je pense que "Dossier" est maintenant plus utilisé que "Répertoire"... #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direction" ??? #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Dossier" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Amarrage" #: lclstrconsts.rsduplicateiconformat #, fuzzy msgid "Duplicate icon format." msgstr "Dupliquer le format d'icône." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editer" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Rechercher dans tout le fichier" ??? Quel est le contexte de ce message ? #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erreur" #: lclstrconsts.rserrorcreatingdevicecontext #, fuzzy msgid "Error creating device context for %s.%s" msgstr "Erreur en créant le contexte du périphérique pour %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Erreur dans LCL :" #: lclstrconsts.rserroroccurredinataddressframe #, fuzzy msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Une erreur s'est produite dans %s à l'adresse %s%s de la page %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Erreur de lecture %s%s%s : %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erreur en sauvegardant l'image." Je pense que "Dossier" est maintenant plus utilisé que "Répertoire"... #: lclstrconsts.rsexception msgid "Exception" msgstr "Exception" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Le dossier doit exister" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Le dossier \"%s\" n'existe pas." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Le fichier \"%s\" existe déjà. L'écraser ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Le fichier doit exister" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Le fichier \"%s\" n'existe pas." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Le fichier \"%s\" est en lecture seule." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Fichier protégé en écriture" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Enregistrer le fichier sous" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Ouvrir un fichier existant" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Ecraser le fichier ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Le chemin doit exister" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Le chemin \"%s\" n'existe pas." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Choisir un dossier" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(Fichier \"%s\" non trouvé)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informations sur le fichier" #: lclstrconsts.rsfind msgid "Find" msgstr "Chercher" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Chercher encore" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Premier" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "\"FixedCols\" ne peut pas être supérieur \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "\"FixedRows\" ne peut pas être supérieur \"RowCount\"" ??? Flux de "fiche" ? #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulaire" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror #, fuzzy msgid "Form streaming \"%s\" error: %s" msgstr "Dans le flux de fiche \"%s\" : erreur %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Avant" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Activer les messages spécifique GDK+ trace/debug." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Arrêter les messages spécifique GDK+ trace/debug." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Les avertissements et les erreurs produits par Gtk+/GDK stopperont l'application." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient du champ inactif" Dans quel contexte ??? #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient du champ inactif" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Graphique" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gris" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texte gris" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Vert" #: lclstrconsts.rsgridfiledoesnotexists #, fuzzy msgid "Grid file doesn't exists" msgstr "Le fichier \"Grid\" n'existe pas" #: lclstrconsts.rsgridindexoutofrange #, fuzzy msgid "Grid index out of range." msgstr "Index de grille hors limite." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" ne peut pas être inférieur au \"GroupIndex\" des éléments précédents" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtre :" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historique" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Suivre la convention Xt, la classe d'un programme est le nom de programme avec le caractère initial en majuscule. Par exemple, le nom de classe pour gimp est \"Gimp\". Si --class est indiquée, la classe du programme sera réglé sur \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Activer les messages spécifique Gtk+ trace/debug." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Se connecter à X serveur, où \"h\" est le nom d'hôte, \"s\" est le nombre de serveur (habituellement 0), et \"d\" est le nombre d'affichage (typiquement omis). Si --l'affichage n'est pas indiqué, la variable d'environnement DISPLAY est employé." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Charger le module indiqué au démarrage." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programme Ensemble pour le nom du programme \"progname\". Si non spécifiée, le nom du programme sera fixée à ParamStrUTF8 (0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Arrêter les messages spécifique Gtk+ trace/debug." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Ne mettez pas d'ordre transitoire pour les formes modales" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Désactive l'utilisation de la mémoire étendu partagée par X." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Appel XSynchronize (affichage, Vrai) après que le raccordement au serveur X ait été établi. Ceci rend le déboguage des erreurs du protocole X plus faciles, parce que les demandes de buffer par X sont désactivé et les erreurs de X seront reçu immédiatement après la demande de protocole qui a produit l'erreur traité par le serveur X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s : Déjà enregistré" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Contexte d'aide non trouvé" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Base de données d'aide non trouvée" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erreur d'aide" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Contexte d'aide %s non trouvé." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Contexte d'aide %s non trouvé dans la base de données %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "La base de données d'aide %s%s%s n'a pas trouvé une visionneuse pour une page d'aide du type %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de données d'aide %s%s%s non trouvée" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Mot-clé d'aide %s%s%s non trouvé." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Mot-clé d'aide %s%s%s non trouvé dans la base de données %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Le nœud d'aide %s%s%s n'a aucune base de données" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Aucune aide trouvée pour la ligne %d, colonne %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Aucuns nœuds d'aide disponibles" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Aide non trouvée" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s : Non enregistré" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erreur de sélecteur d'aide" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Il n'y a aucune visionneuse pour ce type d'aide %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erreur de la visionneuse d'aide" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visionneuse d'aide non trouvée" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Surbrillance" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texte en surbrillance" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "\"Lumière chaude\"" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Ressource d'icône OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icône" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "L'image de l'icône ne peut pas être vide" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "L'image de l'icône doit avoir le même format" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossible de modifier le format de l'image de l'icône" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "L'image de l'icône doit avoir la même taille" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossible de modifier la taille de l'image de l'icône" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icône n'a pas d'image" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bordure innactive" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Champ inactif" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Champ inactif" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d hors des limites 0 .. %d " #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index hors limites Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Arrière-plan de l'info" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texte d'information" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insérer" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Date invalide : %s" ??? Objet "fiche" ? #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Date invalide : %s. Doit être entre %s et %s" #: lclstrconsts.rsinvalidformobjectstream #, fuzzy msgid "invalid Form object stream" msgstr "Flux d'objet fiche invalide" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valeur de propriété incorrecte" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Format de flux incorrect" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s est déjà associé avec %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Dernier" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citron" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Index de liste hors limites (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "La liste doit être vide" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maron" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abandonner" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tout" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuler" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fermer" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Aide" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Non" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Non pour tout" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Ouvrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Réessayer" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Enregistrer" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Déverouiller" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Oui" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Oui pour &tout" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gris moyen" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barre du menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu en surbrillance" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texte des menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modifié " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Vert de gris" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Authentification" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmation" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personnalisé" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erreur" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Information" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avertissement" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Navy" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Suivant" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Aucune" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "N'est pas un fichier de grille correct" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Aucun objet \"widgetset\". Vérifier si l'unité \"interfaces\" a bien été ajoutée à la clause \"uses\" du programme." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olive" ??? Pas de meilleure traduction ? #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Choisir une date" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" Dans quel contexte ??? #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint #, fuzzy msgid "Post" msgstr "Message" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s Pressez OK pour ignorer et risquer des données corruption.%s Pressez Annuler pour fermer le programme. " #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Précédent" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propriété %s n'existe pas" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Pourpre" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" ??? Dans quel contexte ? #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossible de sauvegarder l'image pendant la mise à jour" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossible de démarrer la mise à jour compète pendant la mise à jour du canevas" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rouge" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Rafraichir" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Remplacer" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Tout remplacer" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s non trouvée" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barre de défilement" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriété \"ScrollBar\" hors limites" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Choisir une couleur" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Choisir une police" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Argent" #: lclstrconsts.rssize msgid " size " msgstr " taille " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Bleu ciel" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Sarcelle" #: lclstrconsts.rstext msgid "Text" msgstr "Texte" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossible de charger la police par défaut" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erreur inconnue, merci de rapporter ce bogue svp" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Type d'image inconnu" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Format d'image inconnu" Dans quelle contexte ? #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format bitmap non supporté." #: lclstrconsts.rsunsupportedclipboardformat #, fuzzy msgid "Unsupported clipboard format: %s" msgstr "Format %s de presse-papiers non supporté" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ATTENTION : Il y a %d DCs non libres, en voici le détail : " #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ATTENTION : Il y a %d GDIObjects non libres, en voici le détail : " #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ATTENTION : il y a %d messages en file d'attente ! Ils seront supprimés." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ATTENTION : Il y a %d structures TimerInfo, elles seront supprimées." #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ATTENTION : Il y a %s liens de message LM_PAINT/LM_GtkPAINT non enlevés." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Blanc" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Mots entiers seulement" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erreur :" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Attention :" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Fenêtre" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Cadre de la fenêtre" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texte de la fenêtre" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Jaune" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossible de focaliser une fenêtre invisible ou désactivée" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Doublons dans les menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Création d'action non valide" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumration d'action non valide" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Référencement d'action non valide" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Déréférencement d'action non valide" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Le caractère placé dans le masque \"%s\" n'est pas valide !" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Taille d'image non valide" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Index de liste d'images non valide" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index de menu hors limites" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" n'est pas assigné (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Le sous-menu n'est pas dans le menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Retour arrière" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Sup." #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Bas" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fin" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Entrée" Je préfère traduire par "Origine" plutôt que par "Maison"... #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Origine" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Gauche" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Droite" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" ??? #: lclstrconsts.smkcspace msgid "Space" msgstr "Espace" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Étiquette" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Haut" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Aucune fiche MDI présente" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Aucun temporisateur disponible" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Mauvais type de jeton : %s attendu" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Nombre à virgule flottante non valide : %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Nombre entier non valide : %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (à %d,%d, stream offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valeur d'octet non terminée" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Chaîne non terminée" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Mauvais symbole de jeton : %s attendu mais %s trouvé" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Mauvais type de jeton : %s attendu mais %s trouvé" ������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.es.po�����������������������������������������������������0000644�0001750�0000144�00000122051�12250635767�020573� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Lucas Martín <codedeep@hotmail.com>\n" "PO-Revision-Date: 2010-05-03 20:19+0100\n" "Language-Team: \n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: lcl\n" "POT-Creation-Date: \n" "MIME-Version: 1.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s no ejecutable." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s no encontrado." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Error al ejecutar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "No puedo encontrar un visor HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "La base de datos de ayuda %s%s%s no pudo encontrar el archivo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s en BrowserParams será reemplazada por la URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Aceptar" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "clave de la aplicación" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Retroceso" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Mayúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Limpiar" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convertir" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Borrar" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Abajo" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fin" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Ejecutar" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ayuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Inicio" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insertar" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botón Izquierdo del Ratón" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Izquierdo" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Tecla izquierda de las ventanas" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Botón del Medio del Ratón" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menú" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modo Cambio" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Siguiente" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Sin convertir" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "BloqNum" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "TeclaNum %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla Pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimir" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Anterior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botón Derecho del Ratón" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Derecha" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla derecha de las ventanas" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Desplazar" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Seleccionar" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Capturar pantalla" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tecla espaciadora" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulador" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconocido" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Arriba" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s no encontrado" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D sombra oscura" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D Luz" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Un control no puede tenerse a si mismo como pariente" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borde Activo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Título activo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Todos los archivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espacio de trabajo de la Aplicación" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Agua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Escritorio" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Retrasado" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Negro" #: lclstrconsts.rsblank msgid "Blank" msgstr "Vacío" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Cara de Boton" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Botón Resaltado" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra boton" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto boton" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "No se puede establecer el foco" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "El lienzo no permite dibujar" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto de título" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensible a MAY/min" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creando un error capturable por gdb" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predeterminado" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permisos usuario grupo tamaño fecha hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "¿Borrar registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Suprimir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Dirección" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Directorio" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Anclado" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato de icono." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Buscar en todo el archivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Error" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Error creando contexto de dispositivo para %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERROR en LCL" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Ocurrió un error en %s en %s Dirección %s%s Marco %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Error leyendo %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Error al salvar el bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Excepción" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Directorio debe de existir" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "El directorio \"%s\" no existe." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "El archivo \"%s\" ya existe. Sobreescribirlo ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "El archivo debe existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "No existe el archivo \"%s\"" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "No se puede escribir en el archivo \"%s\"" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "El archivo no se puede escribir" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Guardar archivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir un archivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "¿Sobreescribir archivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "La ruta debe existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "No existe la ruta \"%s\"" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Escoja Directorio" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(archivo no encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Información de archivo" #: lclstrconsts.rsfind msgid "Find" msgstr "Buscar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Buscar más" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primero" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols no puede ser >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows no puede ser >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulario" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Flujo de Formulario \"%s\" error: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adelante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fucsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug-flags Activa los mensajes de traza/depurado específicos de GDK" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug-flags Desactiva los mensajes de traza/depurado específicos de GDK" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Alertas y errores generados por Gtk+/GDK con interrupción de la aplicación" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Degradado título activo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradiente título inactivo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gris" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto Gris" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "No existe el archivo de rejilla" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice de rejilla fuera de rango." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex no puede ser menor que un elemento de menú de GroupIndex" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historial:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class nombre de clase Siguiendo las convenciones Xt, la clase de un programa es el nombre del programa con el caracter inicial en mayúsculas. Por ejemplo, el nombre de clase para gimp es \"Gimp\". Si se especifica --class, la clase del programá se establecerá a \"nombre de clase\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug-flags Activa los mensajes de traza/depurado específicos de Gtk+" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta al servidor X especificado, donde \"h\" es el nombre del host, \"s\" el número de servidor (normalmente 0), y \"d\" el número de display (normalmente omitido). Si no se especifica --display, se usará el variable de entorno DISPLAY" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulo Carga el módulo especificado en al inicio." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "-name progname Pon el nombre del programa en \"progname\". Si no se especifica el nombre del programa se establecerá en ParamStrUTF8 (0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug-flags Desactiva los mensajes de traza/depurado específicos de Gtk+" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient No establecer el orden transitorio para los formularios modal." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desactivar el uso de Extensión de Memoria Extendida de X" #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Llama a XSynchronize (display, True) después que se haya establecido la conexión el servidor X. Esto hace más fácil depurar los errores de protocolo de X, porque se desactivará la solicitud de buffer y los errores de X serán recibidos inmediatamente después que el protocolo solicite ese error generado que ha sido procesado por el servidor X" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Ya está registrado" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Contexto de ayuda no encontrado" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Base de datos de ayuda no encontrada" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Error de la ayuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Contexto de ayuda %s no encontrado." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Contexto de ayuda %s no encontrado en la base de datos %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "La base de datos de ayuda %s%s%s no encontró un visor para el tipo de página de ayuda %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Base de datos de ayuda %s%s%s no encotrada" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Clave de ayuda %s%s%s no encontrada" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Clave de ayuda %s%s%s no encontrada en la base de datos %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "El nodo de ayuda %s%s%s no tiene base de datos de ayuda" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "No se ha encontrado ayuda para la línea %d, columna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "No hay nodos de ayuda disponibles" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Ayuda no encontrada" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: No registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Error del selector de ayuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "No hay visor de ayuda para el tipo de ayuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Error en el visor de ayuda" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visor de ayuda no encontrado" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Resaltar" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Resaltar texto" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz caliente" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX recurso de icono" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icono" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "La imagen del Icono no puede estar vacia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "La imagen del Icono debe tener el mismo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "No se puede cambiar el formato del icono" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "La imagen del Icono debe tener el mismo tamaño" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "No se puede cambiar el tamaño del icono" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "El Icono no tiene imagen actual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borde Inactivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Título inactivo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Título inactivo" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %d fuera de límites 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fuera de rango Celda[Col=%s Línea=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "información de fondo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Texto informativo" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insertar" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Fecha Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Fecha Inválida: %s. Debe estar entre %s y %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Flujo de objeto formulario inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propiedad inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato de flujo inválido" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s ya está asociado con %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ultimo" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lima" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "El índice de lista excede los límites (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "La lista debe estar vacía" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marron" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "Todo" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Cerrar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Ayuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a todo" #: lclstrconsts.rsmbok msgid "&OK" msgstr "Aceptar" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Reintentar" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Guardar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Desbloquear" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Si" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sí &a todo" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Gris medio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra de Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menú" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menú Resaltado" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto de Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Dinero Verde" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticación" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmación" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Error" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Información" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Advertencia" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul Marino" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Siguiente" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ninguno" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "No es un archivo de rejilla válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "No existe un objeto widgetset. Por favor, compruebe que la unidad \"interfaces\" ha sido añadida a la cláusula uses del programa" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Escoja una fecha" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Enviar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPulse Aceptar para ignorar y correr el riesgo de corromper datos.%sPulse cancelar para terminar el programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Prioridad" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La propiedad %s no existe" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpura" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Fin actualización mientras ninguna actualización en curso" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "No se puede guardar la imagen mientras la actualizacion esta en progreso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "No puede comenzar la actualización todo cuando la lona sólo pone al día en curso" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rojo" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Refrescar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Reemplazar" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Reemplazar todo" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s no encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de Desplazamiento" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propiedad ScrollBar fuera de rango" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Escoja color" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Escoja una fuente" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Plateado" #: lclstrconsts.rssize msgid " size " msgstr " tamaño " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Cielo azul" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "turquesa" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Etiquetas de formato de archivo de la imagen" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "No se ha podido cargar la fuente predeterminada" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Error desconocido. Por favor, informe de este fallo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensión de imagen inválida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato de imagen desconocida" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato de mapa de bits no soportado" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato de portapapeles no soportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ADVERTENCIA: Hay %d DCs sin liberar, sigue un volcado detallado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ADVERTENCIA: Hay %d GDIObjects sin liberar, sigue un volcado detallado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ADVERTENCIA: ¡Quedan %d mensajes! Se liberarán" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ADVERTENCIA: Quedan %d estructuras TimerInfo, se liberarán." #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ADVERTENCIA: Hay %s mensajes de enlaces LM_PAINT/LM_GtkPAINT sin eliminar" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Blanco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Sólo palabras completas" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Error:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Advertencia:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Ventana" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Marco de ventana" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto de Ventana" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarillo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "No se puede establecer el foco en una ventana desactivada o invisible" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menús" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creación de acción inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeración de acción inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de acción inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de información inválida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "¡La máscara \"%s\" no es válida!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamaño de imagen inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice de ImageList Inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice de menú fuera de rango" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem es nulo" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-menu no está en el menú" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abajo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fin" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Inicio" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Izquierdo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Derecha" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulador" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Arriba" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "No hay formulario MDI presente" #: lclstrconsts.snotimers msgid "No timers available" msgstr "No hay temporizadores disponibles" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo de token incorrecto: %s esperado" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Número de coma flotante no válido : %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Número entero no válido: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (en %d,%d, flujo de desplazamiento %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor byte no finalizado" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Cadena de texto no finalizada" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Simbolo de token incorrecto: %s esperado pero %s encontrado" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo de token incorrecto: %s esperado pero %s encontrado" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.uk.po�����������������������������������������������������0000644�0001750�0000144�00000145112�12573770736�020612� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Браузер %s%s%s не є виконуваним." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Браузер %s%s%s не знайдено." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Помилка при виконанні %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Не вдається знайти браузер HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "База даних довідки %s%s%s не змогла знайти файл %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрос %s в BrowserParams буде замінений на URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Прийняти" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "кнопка програми" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Великі літери" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Очистити" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Керування" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Перетворити" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Видалити" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Кінець" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Вихід" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Виконати" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Кінцевий" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Китайська" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Допомога" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Дім" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Вставити" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Кенійська" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Японська" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ліва клавіша миші" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Вліво" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ліва клавіша Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Середня клавіша миші" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Меню" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Зміна режиму" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Наступний" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Неконвертоване" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавіша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Друкувати" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Попередній" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Права клавіша миші" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "права клавіша Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Вибрати" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Скріншот" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробіл" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невідомий" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Вверх" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "неможливо виконати %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурс %s не знайдено" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "програмний файл %s не знайдено" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Об'ємна тінь" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Об'ємне світло" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Елемент управління не може бути сам собі предком" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Активні границі" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Активні заголовки" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Всі файли (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Робоча область програми" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Колір морської хвилі" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Робочий стіл" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Навпаки" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Піктограмки" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чорний" #: lclstrconsts.rsblank msgid "Blank" msgstr "Порожній" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Синій" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Вигляд кнопки" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Підсвітка кнопки" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Тінь кнопки" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Текст кнопки" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятор" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не можу сфокусуватися" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Полотно не підтримує малювання" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Текст заголовка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Врахування регістру" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Елемент управління класу '%s' не може мати наслідником елемент класу '%s'" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Елемент управління '%s' не має батьківського вінка" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовий" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Створення помилки кешування gdb:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Власний..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "За замовчуванням" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "дозволи користувач група розмір дата час" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Видалити запис?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Видалити" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Напрямок" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Стикування" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Дублювати формат іконок." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Редагувати" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Шукати по усьому файлу" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Помилка створення контексту пристроїв для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ПОМИЛКА в LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Сталась помилка в %s за %s адресою %s%s Кадр %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Помилка читання %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Помилка збереження растрового зображення." #: lclstrconsts.rsexception msgid "Exception" msgstr "Виняток" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Тека повинна існувати" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Теки \"%s\" не існує." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Такий файл \"%s\" вже існує. Переписати його ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл має існувати" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не існує." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" не може бути записаний." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл тільки для читання" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Зберегти файл як" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Відкрити існуючий файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перезаписати файл ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Шлях має існувати" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Шлях \"%s\" не існує." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Виберіть каталог" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(файл не знайдений: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Інформація про файл" #: lclstrconsts.rsfind msgid "Find" msgstr "Знайти" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Знайти ще" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Перший" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols не може бути >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows не може бути >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Помилка потоків форм \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Вперед" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Фуксія" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ввімкнути вказані налагоджувальні повідомлення GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Вимкнути вказані налагоджувальні повідомлення GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Формат обміну графічними даними" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Попередження і помилки програми, згенеровані Gtk+/GDK, зупинятимуть програму." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Заголовок активного градієнта" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Заголовок неактивного градієнта" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Графічний" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Сірий" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Сірий текст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Пастельно-зелений" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Файла сітки не існує" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Індекс сітки поза межею допустимих значень." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не може бути менше GroupIndex для попереднього елемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фільтр:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Історія:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Відповідно до домовленостей Xt, класом програмим є її назва з великої літери. Напр., назвою класу для gimp є \"Gimp\". Якщо вказано --class, клас програми буде встановлено в \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ввімкнути вказані налагоджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Зв'язатись із вказаним X-сервером, де \"h\" - назва хоста, \"s\" - номер сервера (звичайно 0) і \"d\" - номер дисплея (звичайно нехтують). Якщо --display не вказаний, використовується змінна оточення DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module модуль Завантажити вказаний модуль при запуску." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name ім'япрог Встановити ім'я програми в \"progname\". Якщо не вказано, ім'я програми буде встановлено в ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Вимкнути вказані налагоджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Не встановлювати тимчасовий порядок модальних форм" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Заборонити використання спільних розширень Х-пам'яті." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Виклик XSynchronize (display, True) після встановлення з'єднання з X-сервером. Це полегшує налагодження помилок протоколу X через те, що запити буферування X будуть вимкнені і помилки X будуть одержані одразу після запиту протоколу, який викликав цю помилку, яка була оброблена X-сервером." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Вже зареєстрований" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Контекст довідки не знайдено" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "База даних довідки не знайдена" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Помилка довідки" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Контекст довідки %s не знайдено" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Контекст довідки %s не знайдено в базі %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "База даних довідки %s%s%s не знайшла програму перегляду для сторінки довідки типу %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Базу даних довідки %s%s%s не знайдено" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ключове слово довідки %s%s%s не знайдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Ключове слово довідки %s%s%s не знайдено в базі даних %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Вузол довідки %s%s%s не має відповідної бази даних" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Не знайдено довідки для рядка %d, колонки %d з %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Відсутні доступні вузли довідки" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Довідку не знайдено" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Не зареєстрований" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Помилка відбірника довідки" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Відсутня програма для перегляду такого типу довідки %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Помилка переглядача довідки" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Не знайдено переглядач довідки" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Підсвічений" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Підсвічений текст" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Гаряче світло" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Ресурс значків OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Іконка" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Зображення іконки не може бути порожнім" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Зображення іконки має бути того самого формату" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Не вдалося змінити формат зображення іконки" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Зображення іконки має бути того самого розміру" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Не вдалося змінити розмір іконки" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Іконка не має поточного зображення" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Межа неактивного вікна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Індекс %d поза діапазоном 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Індекс поза діапазоном Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон повідомлення" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Текст повідомлення" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Вставка" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Неправильна Дата : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Неправильна Дата: %s. Має бути між %s та %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "неправильний потік об'єкту Форми" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Неправильне значення властивості" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Неправильний формат потоку" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s вже зіставлено з %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Остання" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелений" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Індекс списку поза діапазоном (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Список має бути порожнім" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Коричнево-малиновий" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Перервати" #: lclstrconsts.rsmball msgid "&All" msgstr "&Всі" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрити" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Довідка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Знехтувати" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ні" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ні для всіх" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&ОК" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Відкрити" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Повтор" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Зберегти" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Розблокувати" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Так" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Так для &Всіх" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Світло-сірий" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панель меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Підсічене меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Текст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " змінений" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Сиваво-зелений" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Ідентифікація" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Підтвердження" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Спеціальний" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Відомості" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Попередження" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Темно-синій" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Наступний" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Жоден" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Неправильний файл сітки" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Об'єкт не є widgetset. Перевірте, чи був доданий модуль \"interfaces\" до програмних частин uses." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Оливковий" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Виберіть дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Растрове зображення" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Чорно-біле зображення (PBM)" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Напівтонове зображення (PGM)" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Переносна мережева графіка (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Кольорове зображення (PPM)" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Відправити" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sНатисніть 'OK' щоб проігнорувати і ризикнути втратити дані.%sНатисніть 'Скасувати' для закриття програми." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Попередній" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Властивості %s не існує" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Пурпуровий" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (лише під X11), запуск під налаголжувачем може спричинити неявний -nograb, використайте -dograb щоб перевизначити. Потрібен QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, задає бекенд, який буде використовуватись для екранних віджетів та QPixmaps. Доступні опції: native, raster та opengl. OpenGL все ще нестабільний." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, вказує Qt щоб він ніколи не захоплював мишку чи клавіатуру. Потрібен QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, виставляє напрямок макету програми на Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, відновлює програму з попереднього сеансу." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style або -style=style, задає стиль GUI програми. Можливі значення: motif, windows, та platinum. Якщо ви зібрали Qt з додатковими стилями ябо маєте додаткові стилі як плагіни вони будуть доступні для опцій командного рядка -style. ПРИМІТКА: Не всі стилі доступні на всіх платформах. Якщо параметр style не існує Qt запустить програму з типовим стилем (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet або -stylesheet=stylesheet, задає програмі Список Стилів. Значення повинне бути шляхом до файлу що містить Список Стилів. Note: Відносні URLs в файлі Списку Стилів сприймаються відносно шляху до файлу Списку Стилів." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (лише під X11), перемикає в снхронний режим налагодження." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, друкує налагоджувальне повідомлення в кінці про кількість незнищених віджетів та максимальну кількість віджетів, що існували в той же час." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg or -background color, задає типовий колір фону та палітру програми (обчислюються світлі на темні відтінки)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn або -button color, задає типовий колір кнопок." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, змушує програму встановити карту приватних кольорів на 8-бітний дисплей." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, задає дисплей Іксів (типовим є $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg або -foreground color, задає типовий колір переднього плану." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn або -font font, визначає шрифт для програми. Шрифт повинен бути вказаний використовуючи X-логічний опис шрифту." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, задає клієнтську геометрію першого показаного вікна." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, задає сервер методу вводу (аналогічно до задання змінної оточення XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, визначає як ввід вставляється в заданий віджет, наприклад onTheSpot вносить ввід прямо в віджет, тоді як overTheSpot робить так, що ввід з'являється в вікні, що плаває над віджетом і не вставляється поки редагування не завершено." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, задає назву програми." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, обмежує кількість кольорів, розміщних в кольоровому кубі на 8-бітному дисплеї, якщо програма використовує специфікацію кольору QApplication::ManyColor. Якщо кількість рівна 216 тоді використовується кольоровий куб 6x6x6 (тобто 6 рівнів червоного, 6 зеленого, та 6 синього); для інших значень використовується куб приблизно пропорційний до 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, задає заголовок програми." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, змушує програму використовувати TrueColor visual на 8-бітному дисплеї." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Команда Endupdate, хоча ніякого оновлення не проводиться" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Неможливо зберегти зображення під час оновлення" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Неможливо почати оновлення під час оновлення полотна" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Червоний" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Оновити" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Замінити" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Замінити все" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ресурс %s не знайдено" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Смуга прокрутки" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Властивості смуги прокручування виходять поза діапазон" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Вибрати колір" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Вибрати шрифт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Срібний" #: lclstrconsts.rssize msgid " size " msgstr " розмір " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Небесно-синій" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Синьо-зелений" #: lclstrconsts.rstext msgid "Text" msgstr "Текст" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Тегований формат файлу зображення" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Не можу завантажити шрифт за замовчуванням" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Невідома помилка, повідомте розробників" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Невідоме розширення файлу зображення" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Невідомий формат зображення" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Непідтримуваний тип растрового малюнку." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Непідтримуваний формат буферу обміну: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених контекстів пристроїв, список див. нижче:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених GDIObject, список див. нижче:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: В черзі залишилось %d повідомлень! Я їх видаляю" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: Залишилось %d структур TimerInfo, я їх звільняю" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " УВАГА: Знайдено %s не видалених LM_PAINT/LM_GtkPAINT посилань на повідомлення." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Білий" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Тільки цілі слова" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Помилка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Попередження:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Вікно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Межі вікна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Текст вікна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жовтий" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Не можна дати фокус вимкненому або невидимому вікну" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Дублювати меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Неправильне створення дії" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Неправильне перерахування дій" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Неправильна реєстрація дії" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Скасування реєстрації невірної дії" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Невірний набір символів по масці \"%s\"!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Невірний розмір зображення" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Невірний індекс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Індекс меню поза діапазоном" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem вказує на nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Підменю не в меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Вниз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Вліво" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Вправо" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Пробіл" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вгору" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Немає MDI форми." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Немає доступних таймерів" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Невірний тип маркера: очікується %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Невірне число з плаваючою крапкою: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Невірне ціле число: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, зміщення потоку %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Значення байта незавершене" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершений рядок" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Невірний символ маркера: очікувався %s, але знайдений %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Невірний тип маркера: очікувався %s, але знайдений %s" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.zh_CN.po��������������������������������������������������0000644�0001750�0000144�00000113752�12250635767�021175� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: 0.9.27 beta\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2009-04-24 19:20+0800\n" "Last-Translator: XY.Chen <chenxinyv@gmail.com>、Liu Sizhuang <chinatslsz@hotmail.com>(2008-06-15)\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: CHINA\n" "X-Poedit-SourceCharset: utf-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "浏览 %s%s%s 不是可执行程序." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "浏览 %s%s%s 未找到." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "当执行 %s%s%s 时发生错误:%s%s " #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "无法找到 HTML 浏览器" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "帮助数据库 %s%s%s 无法找到文件 %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "浏览框里的宏 %s 将被 URL 所替代." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "接受" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "应用程序快捷键" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "退格" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "大写" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "清除" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "控件" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "转换" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "删除" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "执行" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "帮助" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "鼠标左键" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "左" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Win 键" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "鼠标中键" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "菜单" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "模式更改" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "不转换" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "数字锁定" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "数字键盘 %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "暂停键" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "打印" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "鼠标右键" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "返回" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "右" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Win 键" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "滚动" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "选择" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "快照" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "空格键" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "上" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "未找到资源 %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D阴影" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D光线" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "控件不能把自己设为父节点" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "活动边线" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "活动标题" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "所有文件 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "引用程序工作区" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "桌面" #: lclstrconsts.rsbackward msgid "Backward" msgstr "后退" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "黑白位图" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "黑" #: lclstrconsts.rsblank msgid "Blank" msgstr "空白" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "蓝" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "按钮表面" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "按钮高亮" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "按钮阴影" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "按钮文本" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "计算器" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "取消" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "无法聚焦" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas 不允许画图" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "标题文本" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "大小写敏感" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "创建 GDB 可以捕捉的错误" #: lclstrconsts.rscursor msgid "Cursor" msgstr "光标" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "自定义..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "默认" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "权限 用户 组 大小 日期 时间" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "删除记录?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "删除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "目录(&D)" #: lclstrconsts.rsdocking msgid "Docking" msgstr "停靠" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "同样的图标格式." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "编辑" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "错误" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "在 %s %s地址 %s%s 框架 %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "读取 %s%s%s 错误: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "保存位图时出错。" #: lclstrconsts.rsexception msgid "Exception" msgstr "异常" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "目录必须存在" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "目录 \"%s\" 不存在." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "文件 \"%s\" 已经存在.%s替换吗?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "文件必须存在" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "文件 \"%s\" 不存在." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "文件 \"%s\" 为只读." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "文件为只读" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "另存为" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "打开文件" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "覆盖文件?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "路径不存在" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "路径 \"%s\" 不存在." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "选择目录" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(未找到文件: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "文件信息" #: lclstrconsts.rsfind msgid "Find" msgstr "查找" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "查找更多" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols 不能 >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows 不能 >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "窗体" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "窗体流 \"%s\" 错误: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "向前" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "紫红" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags 打开 GDK 跟踪/调试信息." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags 关闭 GDK 跟踪/调试信息." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings 使 Gtk+/GDK 产生的警告和错误终止应用程序。" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "活动标题颜色渐变" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "非活动标题颜色渐变" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "灰" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "灰色文本" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "绿" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "网格文件不存在" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "网格索引越界。" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex 不能比之前的菜单项目的 GroupIndex 少" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "过滤器:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "历史:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname 按照 Xt 转换规则, 一个程序的类别是第一个字母大写的程序名称。比如,gimp 的类别是 \"Gimp\"。如果指定了 --class,程序的类别会被设为 \"classname\"。" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 打开 Gtk+ 跟踪/调试信息." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d 连接到指定的 X 服务器,其中 \"h\"是主机名,\"s\"是服务器编号(通常是0),\"d\" 是显示编号(一般省略)。如果没有指定 --display ,将会使用 DISPLAY 环境变量。" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module 启动时载入指定模块" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags 关闭 Gtk+ 跟踪/调试信息." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient 不要为形式上的窗体设定临时顺序" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm 禁止使用 X 共享内存扩展。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: 已经注册" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "未找到帮助内容" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "未找到帮助数据库" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "帮助错误" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "未找到帮助上下文 %s." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "没有找到 %s 的帮助内容在数据库 %s%s%s 中." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "帮助数据库 %s%s%s 未找到浏览器可以阅读帮助页 %s 的类型" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "未找到帮助数据库 %s%s%s" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "关键字 %s%s%s 未找到帮助." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "关键字 %s 的帮助在数据库 %s%s%s 中没有找到." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "帮助节点 %s%s%s 没有帮助数据库" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "没有找到 %s 的行 %d, 列 %d 的 %s 的相关帮助." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "没有有效的帮助节点" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "未找到帮助" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: 没有注册" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "帮助选择器错误" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "帮助类型 %s%s%s 没有查看器" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "帮助查看器错误" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "未找到帮助查看器" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "高亮" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "高亮文本" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX 图标资源" #: lclstrconsts.rsicon msgid "Icon" msgstr "图标" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "图标图像不能为空" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "图标图像必须有相同的格式" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "不能改变图标图像的格式" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "图标图像必须有同样的大小" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "不能改变图标图像的大小" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "图标有不正确的图像" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非活动边框" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非活动标题" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非活动标题" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s 索引 %d 超出范围 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "单元格索引超过范围[列=%d 行=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "info底色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "info文本" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "插入" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "无效日期: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "无效日期: %s。 必须在 %s 和 %s 之间" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "无效窗体流对象" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "无效属性值" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "无效流格式" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s 已经与 %s 相关联" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "橙" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "list 索引超过限制 (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "列表必须为空" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "栗" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "中止" #: lclstrconsts.rsmball msgid "&All" msgstr "所有(&A)" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "关闭(&C)" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "帮助(&H)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "忽略(&I)" #: lclstrconsts.rsmbno msgid "&No" msgstr "否(&N)" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "全部选否" #: lclstrconsts.rsmbok msgid "&OK" msgstr "确定(&O)" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "重试(&R)" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "是(&Y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "全部选是(&A)" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "中灰" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "菜单条" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "菜单" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "菜单高亮" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "菜单文本" #: lclstrconsts.rsmodified msgid " modified " msgstr "已更改" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "钱青" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "确认" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "自定义" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "错误" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "信息" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "深蓝" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "下一个" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "无" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "不是有效的网格文件" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "没有窗口部件集合对象,请检查单元 \"interfaces\" 是否已添加到程序的uses语句中。" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "橄榄" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "选择日期" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "位图" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "便携黑白位图" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "便携灰度位图" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "便携网络图片(PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "便携位图" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "提交" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s确定忽略但数据有遗失的风险。%s取消则终止程序." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "优先" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "属性 %s 不存在" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "紫" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "处理更新时候不能保存图片" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "红" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "刷新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "替换" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "替换所有" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "未找到资源 %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "滚动条" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "滚动条属性超出范围" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "选择颜色" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "选择字体" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "银" #: lclstrconsts.rssize msgid " size " msgstr "大小" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "天蓝" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "青" #: lclstrconsts.rstext msgid "Text" msgstr "文本" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "无法装载默认字体" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知错误, 请报告这个错误" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "未知图形文件后缀" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "未支持的位图格式" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "未支持的剪贴板格式: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "白" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "仅整个单词" #: lclstrconsts.rswin32error msgid "Error:" msgstr "错误:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "窗口" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "窗口框架" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "窗口文本" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "黄" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "不能聚焦于无法聚焦或者不可见的窗口" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "重复的菜单" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "无效创建行为" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "无效列举行为" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "无效的注册行为" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "无效的取消注册行为" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "\"%s\" 指定的字符集无效!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "无效图像大小" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "无效 ImageList 索引" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "菜单索引超过范围" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem 为 nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "子菜单不在菜单中" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "左" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "右" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "上" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "没有 MDI 窗体出现" #: lclstrconsts.snotimers msgid "No timers available" msgstr "无有效计时器" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "错误的标识符类型:期望 %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "无效的浮点数:%s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "无效的整数:%s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(在 %d,%d, 流偏移 %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "未结束的字节值" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "未结束的字符串" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "错误的标识符:期望 %s 但是找到了 %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "错误的标识符类型:期望 %s 但是找到了 %s" ����������������������doublecmd-0.7.1/language/lcl/lclstrconsts.ru.po�����������������������������������������������������0000644�0001750�0000144�00000152741�12671115613�020611� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator: Maxim Ganetsky <maxkill@mail.ru>\n" "Project-Id-Version: lazaruside\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2016-03-10 21:11+0400\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Language: ru\n" "X-Generator: Poedit 1.7.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Браузер %s%s%s не является исполнимым файлом." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Браузер %s%s%s не найден." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Ошибка при выполнении %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Невозможно найти браузер HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Браузер HTML не найден.%sПожалуйста, установите один в Tools -> Options -> Help -> Help Options" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "База данных справки %s%s%s не смогла найти файл %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрос %s в BrowserParams будет заменён на URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Клавиша Application" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "CapsLock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Стрелка вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Ханчча" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Справка" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Джанджа" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Кана" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Левая клавиша мыши" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Стрелка влево" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Левая клавиша Windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Средняя клавиша мыши" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Изменение режима" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Next" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "NumLock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "%d цифровой клавиатуры" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавиша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Page Up" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Правая клавиша мыши" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Ввод" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Стрелка вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Правая клавиша Windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "ScrollLock" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробел" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Неизвестная" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Стрелка вверх" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "Запустить %s невозможно" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(фильтр)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурс %s не найден" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "Файл программы %s не найден" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Затенённая часть объекта 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Освещённая часть объекта 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Элемент управления не может быть родителем сам себе" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Граница активного окна" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Заголовок активного окна" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Все файлы (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Рабочая область приложения" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Морской волны" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Рабочий стол" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Назад" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Точечные рисунки" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чёрный" #: lclstrconsts.rsblank msgid "Blank" msgstr "Пустой" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Синий" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Лицевая часть кнопки" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Освещаемая сторона кнопки" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Затенённая сторона кнопки" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Текст кнопки" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятор" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Отмена" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не могу принять фокус" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Канва не поддерживает рисования" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Текст заголовка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "С учётом регистра" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Элемент управления класса '%s' не может иметь потомком элемент управления класса '%s'" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Элемент управления '%s' не имеет родительского окна" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' не родитель '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовый" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Создание ошибки, захватываемой GDB:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Пользовательский ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "По умолчанию" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "права пользователь группа размер дата время" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Удалить запись?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Удалить" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Направление" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Стыковка" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Формат значков дублируется." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Редактировать" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Во всём файле" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Ошибка" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Ошибка создания контекста устройства для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ОШИБКА в LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Произошла ошибка в %s по %s адресу %s%s фрейм %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Ошибка чтения %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Ошибка при сохранении точечного рисунка (bitmap)." #: lclstrconsts.rsexception msgid "Exception" msgstr "Исключение" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Каталог должен существовать" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Каталог \"%s\" не существует." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Файл \"%s\" уже существует. Перезаписать?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл должен существовать" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не существует" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" не доступен для записи." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл не доступен для записи" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Сохранить файл как" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Открыть существующий файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перезаписать файл?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Путь должен существовать" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Путь \"%s\" не существует." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Выберите каталог" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(файл не найден: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Информация о файле" #: lclstrconsts.rsfind msgid "Find" msgstr "Найти" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Найти далее" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Первая" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols не может быть >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows не может быть >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Ресуры формы %s не найдены. Для форм без ресурсов должен быть использован конструктор CreateNew. См. глобальную переменную RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Ошибка потоков \"%s\" форм: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Вперёд" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Розовый" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Включить указанные отладочные сообщения GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Выключить указанные отладочные сообщения GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Формат Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Замечания и ошибки, выдаваемые Gtk+/GDK, остановят приложение." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Градиент активного заголовка" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Градиент неактивного заголовка" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Графические файлы" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Тёмно-серый" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Серый текст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Тёмно-зелёный" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Файл сетки не существует" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Индекс Grid'а вне диапазона допустимых значений." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не может быть меньше GroupIndex для предыдущего элемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фильтр:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "История:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Следуя соглашениям Xt, класс программы - это имя программы с прописным первым символом. Например, имя класса для gimp - \"Gimp\". Если задан --class, класс программы будет установлен в \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Включить указанные отладочные сообщения Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Связаться с указанным сервером X, где \"h\" - имя хост-машины, \"s\" - номер сервера (обычно 0), и \"d\" - номер дисплея (обычно опускается). Если не задан --display, используется переменная окружения DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module модуль Загрузить указанный модуль при запуске." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name имяпрог Установить имя программы в \"имяпрог\". Если не задано, имя программы будет установлено в ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Выключить указанные отладочные сообщения Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Не устанавливать временный порядок модальных форм" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Запрет использования расширений X по разделяемой памяти." #: lclstrconsts.rsgtkoptionsync #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Вызвать XSynchronize (display, True) после установления соединения с сервером X. Это облегчает отладку ошибок протокола X, так как запросы буферизации X будут отключены, и ошибки X будут получаться сразу после обработки сервером X запроса протокола, который вызвал ошибку." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: уже зарегистрирован" #: lclstrconsts.rshelpcontextnotfound #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Контекст справки не найден" #: lclstrconsts.rshelpdatabasenotfound #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "База данных справки не найдена" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Ошибка справки" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Контекст справки %s не найден." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Контекст справки %s не найден в базе данных %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "База данных справки %s%s%s не нашла программу просмотра для страницы справки типа %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "База данных справки %s%s%s не найдена" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Директива справки %s%s%s не найдена." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Директива справки %s%s%s не найдена в базе данных %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ключевое слово справки %s%s%s не найдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Ключевое слово справки %s%s%s не найдено в базе данных %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Узел справки %s%s%s не имеет соответствующей базы данных" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Не найдено справки для строки %d, столбца %d из %s." #: lclstrconsts.rshelpnohelpnodesavailable #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Доступные узлы справки отсутствуют" #: lclstrconsts.rshelpnotfound #| msgid "Help not found" msgid "No help found for this topic" msgstr "Справка не найдена" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Не зарегистрирован" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Ошибка переключателя справки" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Отсутствует программа просмотра для типа справки %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Ошибка программы просмотра справки" #: lclstrconsts.rshelpviewernotfound #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Программа просмотра справки не найдена" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Выделенное" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Текст выделенного" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Выделение" #: lclstrconsts.rsicns #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Ресурс значков OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Значок" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Изображение значка не может быть пустым" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Изображение значка должно иметь тот же формат" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Невозможно изменить формат изображения значка" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Изображение значка должно иметь тот же размер" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Невозможно изменить размер изображения значка" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Значок не имеет текущего изображения" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Граница неактивного окна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Заголовок неактивного окна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Заголовок неактивного окна" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Индекс %d вне диапазона 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Индекс вне диапазона Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон сообщения" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Текст сообщения" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Вставить" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Неверная дата: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Неверная дата: %s. Должна быть между %s and %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "неправильный поток объекта формы" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Неправильное значение свойства" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Неправильный формат потока" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s уже сопоставлено с %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Последняя" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелёный" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Индекс списка вне диапазона (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Список должен быть пуст" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Малиновый" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Прервать" #: lclstrconsts.rsmball msgid "&All" msgstr "&Все" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Отмена" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрыть" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Справка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Пропуск" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Нет" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Нет для всех" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&ОК" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Открыть" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Повтор" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Сохранить" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Разблокировать" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Да" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Да для &всех" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Серый" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панель меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Выделенный пункт меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Текст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " изменён " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Светло-зелёный" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Проверка подлинности" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Подтверждение" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Пользовательский" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Ошибка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Сведения" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Предупреждение" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Тёмно-синий" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Следующая" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Нет" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Неверный файл сетки" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Отсутствует объект библиотеки виджетов. Проверьте, что модуль \"interfaces\" был добавлен в выражение uses программы." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Оливковый" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Выберите дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Отправить" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sНажмите 'OK' чтобы игнорировать и подвергнуться риску повреждения данных.%sНажмите 'Отмена' для закрытия программы." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Предыдущая" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Подсказка замены" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Свойство %s не существует" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Лиловый" #: lclstrconsts.rsqtoptiondograb #| msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override.Need QT_DEBUG." msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (только в X11), запуск в отладчике может повлечь неявный -nograb, используйте -dograb для отмены. Требуется QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle #| msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps.Available options are native,raster and opengl.OpenGL is still unstable." msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, устанавливает используемый механизм отрисовки экранных виджетов и QPixmaps. Доступные варианты: native, raster и opengl. OpenGL всё ещё нестабилен." #: lclstrconsts.rsqtoptionnograb #| msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard.Need QT_DEBUG." msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, запрещает Qt захват мыши или клавиатуры. Требует QT_DEBUG." #: lclstrconsts.rsqtoptionreverse #| msgid "-reverse, sets the application's layout direction to Qt::RightToLeft" msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, устанавливает направление размещения виджетов приложения в Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, восстанавливает приложение из более ранней сессии." #: lclstrconsts.rsqtoptionstyle #| msgid "-style style or -style=style, sets the application GUI style.Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style style или -style=style, устанавливает стиль виджетов интерфейса приложения. Возможные значения: motif, windows, и platinum. Если Qt собран с дополнительными стилями или они имеются в виде модулей, эти стили будут доступны в команде -style. ПРИМЕЧАНИЕ: не все стили доступны на всех платформах. Если стиль отсутствует, Qt запустит приложение со стилем по умолчанию (windows)." #: lclstrconsts.rsqtoptionstylesheet #| msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application styleSheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet stylesheet или -stylesheet=stylesheet, устанавливает таблицу стилей приложения (Style Sheet). Значение должно являться путём к файлу с таблицей стилей. Примечание: относительные URL'ы в таблице стилей даются относительно пути к файлу таблицы стилей." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (только в X11), устанавливает синхронный режим отладки." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, выводит отладочное сообщение в конце о количестве неуничтоженных, а также максимальном количестве существовавших в один момент времени виджетов." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg или -background color, устанавливает цвет фона по умолчанию и палитру приложения (вычисляются светлые и тёмные оттенки)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn или -button color, устанавливает цвет кнопки по умолчанию." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, вызывает установку собственной цветовой карты приложением на 8-разрядном дисплее." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, устанавливает дисплей X (по умолчанию - $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg или -foreground color, устанавливает цвет текста по умолчанию." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn или -font font, задаёт шрифт приложения. Он должен быть указан с использованием логического описания шрифтов X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, устанавливает клиентскую геометрию первого показанного окна." #: lclstrconsts.rsqtoptionx11im #| msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)" msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, устанавливает сервер методов ввода (эквивалентно установке значения переменной окружения XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle #| msgid "-inputstyle, defines how the input is inserted into the given widget, e.g., onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, задаёт, как вводимая информация вносится в данный виджет. Например, onTheSpot приводит к прямому появлению вводимой информации в виджете, тогда как overTheSpot вызывает появление информации в поле, находящемся над виджетом, и не вставляется до окончания редактирования." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, устанавливает имя приложения." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols count, ограничивает число цветов в цветовом кубе 8-разрядного дисплея, если приложение использует перечень цветов QApplication::ManyColor. Если количество равно 216, используется цветовой куб 6x6x6 (то есть, 6 уровней красного, 6 зелёного и 6 синего); для других значений используется куб, примерно пропорциональный кубу 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, устанавливает заголовок приложения." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, вынуждает приложение использовать TrueColor на 8-разрядном дисплее." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Команда Endupdate, хотя обновления не производилось" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Невозможно сохранить изображение во время обновления" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Невозможно начать обновление всех во время обновления канвы" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Красный" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Обновить" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Заменить" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Заменить всё" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ресурс %s не найден" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Полоса прокрутки" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "свойство ScrollBar вне диапазона" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Выбрать цвет" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Выбрать шрифт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Серебристый" #: lclstrconsts.rssize msgid " size " msgstr " размер " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Голубой" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Элемент управления вкладками" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Бирюзовый" #: lclstrconsts.rstext msgid "Text" msgstr "Текст" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Формат Tagged Image File" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "Панель" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "Захватите, чтобы управлять размером двух частей области." #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "Дерево элементов" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Невозможно загрузить шрифт по умолчанию" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Неизвестная ошибка, сообщите о ней разработчикам" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Неизвестное расширение файла изображения" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Неизвестный формат изображения" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Неподдерживаемый тип точечного рисунка." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Неподдерживаемый формат буфера обмена: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " ВНИМАНИЕ: Найдено %d неосвобождённых контекстов устройств, список см. ниже:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " ВНИМАНИЕ: Найдено %d неосвобождённых GDIObject, список см. ниже:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " ВНИМАНИЕ: В очереди осталось %d сообщений! Они будут удалены" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " ВНИМАНИЕ: Осталось %d структур TimerInfo, они будут освобождены" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " ВНИМАНИЕ: Найдено %s неудалённых ссылок на сообщение LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Белый" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Только целые слова" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Ошибка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Предупреждение:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Окно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Граница окна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Текст окна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жёлтый" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Невозможно перевести фокус в отключённое или невидимое окно" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Дублирующиеся меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Неверное создание действия" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Неверное перечисление действий" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Неверная регистрация действия" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Неверная разрегистрация действия" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Набор символов в маске \"%s\" неверен!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Неверный размер рисунка" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Неверный индекс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Текущий текст не совпадает с указанной маской." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Индекс меню вне диапазона" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem указывает на нуль" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Подменю не в меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Вниз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Влево" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Вправо" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Пробел" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вверх" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Отсутствует форма MDI." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Таймеры недоступны" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Неверный тип лексемы: ожидался %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Неверное число с плавающей точкой: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Неверное целое число: %s" #: lclstrconsts.sparlocinfo #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, смещение потока %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Незавершённое значение байта" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершённая строка" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Неверный символ лексемы: ожидался %s, но найден %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Неверный тип лексемы: ожидался %s, но найден %s" �������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.it.po�����������������������������������������������������0000644�0001750�0000144�00000127774�12250635767�020621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: 0.9.2\n" "POT-Creation-Date: 2009-11-29 13:59+0200\n" "PO-Revision-Date: 2013-11-03 13:34+0100\n" "Last-Translator: Krypton <krypton873@gmail.com>\n" "Language-Team: Krypton <krypton873@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Il browser %s%s%s non è eseguibile." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Il browser %s%s%s non è stato trovato." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Errore eseguendo %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossibile trovare un browser HTML" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Il database d'aiuto %s%s%s non riesce a trovare il file %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "La macro %s nei BrowserParams verrà sostituita dall'URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accetta" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Tasto dell'applicazione" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancella" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Maiuscolo" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Azzera" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converti" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Elimina" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Giù" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Fine" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Esegui" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Finale" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Aiuto" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserisci" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Tasto sinistro del mouse" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Sinistra" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tasto windows sinistro" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Tasto centrale del mouse" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Cambiamento di modalità" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Successivo" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Non convertire" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "BlocNum" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "TastNum %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tasto pausa" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Stampa" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Precedente" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Tasto destro del mouse" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Invio" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Destra" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tasto windows destro" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scorrimento" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selezione" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Istantanea" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tasto spazio" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Sconosciuto" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Su" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "Non posso eseguire %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Risorsa %s non trovata" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "Programma non trovato %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Ombra scura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luce 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Un controllo non può avere se stesso come genitore" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Bordo attivo" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Caption attivo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tutti i file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Area di lavoro dell'applicazione" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Acqua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Scrivania" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Indietro" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Nero" #: lclstrconsts.rsblank msgid "Blank" msgstr "Vuoto" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blu" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Superfice pulsante" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Evidendiazione pulsante" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Ombra pulsante" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Testo pulsante" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calcolatore" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancella" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossibile spostare il focus" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Le canvas non permettono il disegno" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Testo caption" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Distingui maiusc./minusc." #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Il controllo della classe '%s' non può avere il controllo della classe '%s' come processo figlio" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Il controllo '%s' non ha finestre genitore" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crema" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Creazione di errore gdb intercettabile:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursore" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizzato ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Predefinito" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permessi del gruppo utente in formato data ora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Eliminare un record?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Elimina" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direzione" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Cartella" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Aggancia" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicare formato icona." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Modifica" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Cerca il file intero" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Errore" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Errore nella creazione del contesto dispositivo per %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Errore nell'LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Errore occorso in %s all' %sIndirizzo %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Errore nella lettura di %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Errore durante il salvataggio del bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Eccezione" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "La cartella deve esistere" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "La cartellla \"%s\" non esiste." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Il file \"%s\" Esiste già. Sovrascriverlo?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Il file deve esistere" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Il file \"%s\" non esiste." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Il file \"%s\" non è scrivibile." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Il file non è scrivibile" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salva con nome" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Apri file esistente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sovrascrivere il file?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Il percorso deve esistere" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Il percorso \"%s\" non esiste." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selezionare una directory" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(file non trovato: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informazioni sul file" #: lclstrconsts.rsfind msgid "Find" msgstr "Trova" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Trova successivo" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primo" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCol non può essere >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows non può essere >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Form streaming \"%s\" errore: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Avanti" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fucsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug-flags Abilita specifici messaggi di trace/debug GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Disabilita messaggi specifici di trace/debug di GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Avvertimenti ed errori generati da Gtk/GDK bloccheranno l'applicazione." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient Caption attivo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient Caption disattivo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafica" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grigio" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Testo in grigio" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Il file di griglia non esiste" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indice della griglia fuori dal range." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex non può essere minore del GroupIndex della precedente voce di menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Cronologia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class nomeclasse Secondo le convenzioni Xt, la classe di un programma è il nome del programma con il carattere iniziale maiuscolo. Per esempio il nome della classe per gimp è \"Gimp\". Se --class viene specificata, la classe del programma verrà impostata a \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Abilita messaggi specifici di trace/debug Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Connessione al server X specificato, dove \"h\" è il nome host, \"s\" è il numero di server (solitamente 0), e \"d\" è il numero di display (normalmente viene omesso). Se --display non è specificato, verrà utilizzata la variabile di ambiente DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Carica il modulo specificato all'avvio del programma." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Imposta il nome del programma a \"progname\". Se non specificato, il nome del programma sarà impostato a ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug-flags Disabilita messaggi specifici di trace/debug Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Non impostare l'ordine temporaneo per i form modali" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Disabilita l'uso dell'estensione della memoria condivisa di X." #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chiama XSynchronize (display, True) dopo che è stata stabilita la connessione al server X. Ciò rende più semplice la correzione degli errori del protocollo X, poiché la richiesta di bufferizzazione di X sarà disabilitata e quindi gli errori di X saranno ricevuti immediatamente dopo che la richiesta di protocollo che ha generato l'errore è stata elaborata dal server X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Già registrato" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Aiuto contestuale non trovato" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Database di aiuto non trovato" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Errore nell'aiuto" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Aiuto contestuale %s non trovato." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Aiuto contestuale %s non trovato nel Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Il Database di aiuto %s%s%s non trova un visualizzatore per le pagine di aiuto di tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Database di aiuto %s%s%s non trovato" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Aiuto sulla parola chiave %s%s%s non trovato." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Aiuto sulla parola chiave %s%s%s non trovato nel Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Il nodo di aiuto %s%s%s non ha un Database di aiuto" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nessun aiuto trovato per la linea %d, colonna %d di %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nessun aiuto disponibile" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Aiuto non trovato" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Non registrato" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Errore nella selezione dell'aiuto" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Non c'è nessun visualizzatore per aiuti di tipo %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Errore nel visualizzatore dell'aiuto" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visualizzatore dell'aiuto non trovato" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Evidenzia" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Evidenzia testo" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luce calda" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "isorsa di icone OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "L'immagine dell'icona non può essere vuota" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "L'immagine dell'icona deve avere lo stesso formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossibile cambiare il formato dell'immagine dell'icona" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "L'immagine dell'icona deve avere le stesse dimensioni" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossibile cambiare le dimensioni dell'immagine dell'icona" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "L'icona non ha nessuna immagine" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Bordo inattivo" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Caption inattiva" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Caption inattiva" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indice %d fuori dai limiti 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indice fuori dal range della Cella[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informazioni sfondo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informazioni testo" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserimento" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Data non valida: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data non valida: %s. Deve essere compresa tra %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Form object stream non valido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valore della proprietà non valido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato stream non valido" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s è già associato con %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Ultimo" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lime" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "L'elenco dell'indice eccede i limiti (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "L'elenco deve essere vuoto" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maroon" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Interrompi" #: lclstrconsts.rsmball msgid "&All" msgstr "&Tutti" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annulla" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Chiudi" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Aiuto" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignora" #: lclstrconsts.rsmbno msgid "&No" msgstr "&No" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "No a tutto" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Apri" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Riprova" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salva" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Sblocca" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Si" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Si a &tutti" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Grigio medio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Evidenziare Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Testo Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificato " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Denaro Verde" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticazione" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Conferma" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizza" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Errore" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informazioni" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Avviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marina" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Successivo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nessuno" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Non è un file di griglia valido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nessun oggetto widgetset. Verifica se l'unità \"interfaces\" was added to the programs uses clause." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Seleziona una data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPremi Ok per ignorare il messaggio e rischiare di corrompere i dati.%sPremi Annulla per terminare l'esecuzione del programma." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Precedente" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "La proprietà %s non esiste" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Viola" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (solo sotto ambiente X11), l'esecuzione di un debugger può causare un implicito -nograb, usare -dograb per bypassare. Necessita di QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, imposta il backend da usare per widget su schermo e QPixmaps. Le opzioni disponibili sono native, raster e opengl. OpenGL è ancora instabile." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, dice a Qt che non deve mai acquisire input dal mouse o dalla tastiera. Necessita di QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, imposta la direzione del layout dell'applicazione su Qt::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessione, ripristina l'applicazione da una sessione precedente." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style stile oppure -style=stile, imposta lo stile dell'interfaccia grafica (GUI) dell'applicazione. I valori possibili sono motif, windows, e platinum. Se hai compilato Qt con stili aggiuntivi o ne hai aggiunti sotto forma plugin, essi saranno disponibili come opzioni per il comando -style. NOTA: Non tutti gli stili sono disponibili su tutte le piattaforme. Se un parametro di stile non esiste, Qt avvierà l'applicazione con lo stile predefinito (windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet foglio di stile oppure -stylesheet=foglio di stile, imposta l'applicazione foglio di stile. Il valore deve essere un percorso che punta a un file contenente il foglio di stile. Nota: Gli indirizzi relativi (URL) all'interno del foglio di stile sono relativi a un percorso di file." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (solo sotto ambiente X11), commuta nel modo sincrono per operazioni di debugging." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, stampa alla fine un messaggio riguardo al numero di widget che non sono stati distrutti e al numero massimo di widget che sono esistiti nello stesso tempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg oppure -background colore, imposta il colore di background predefinito e una applicazione tavolozza (le tonalità chiare e scure saranno calcolate)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn oppure -button color, imposta il colore del pulsante predefinito" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "cmpa, causa che l'applicazione installi una mappa di colore privata su un display a 8-bit." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, imposta il display X (il predefinito è $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg oppure -foreground colore, imposta il colore di primo piano predefinito." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn oppure -font font, definisce il font dell'applicazione. Il font dovrebbe essere specificato usando una X logical font description." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, imposta la geometria del client della prima finestra che viene visualizzata." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, imposta il metodo di input server (equivalente all'impostazione della variabile d'ambiente XMODIFIERS." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, definisce come l'input è inserito in un dato widget, ad esempio onTheSpot fa in modo che l'input appaia direttamente nel widget, mentre overTheSpot fa in modo che l'input appaia in una casella flottante sul widget e non sia inserito finché la fase di modifica non è conclusa." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, imposta il nome dell'applicazione" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols conteggio, limita il numero di colori allocati nel cubo di colori di un display a 8-bit, se l'applicazione sta usando la specifica di colore di QApplication::ManyColor. Se il conteggio è 216 allora il cubo di colori 6x6x6 sarà usato (cioè 6 levelli di rosso, 6 di verde, e 6 di blu); per altri valori, sarà usato un cubo approsimativamente proporzionale a 2x3x1" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title titolo, imposta il titolo dell'applicazione" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, forza l'applicazione a usare TrueColor visual su un display a 8-bit." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate mentre nessun aggiornamento era in corso" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Non posso salvare l'immagine mentre l'aggiornamento è in corso" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Non è possibile iniziare l'aggiornamento quando l'aggiornamento delle canvas è in corso" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rosso" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Aggiorna" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Sostituisci" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Sostituisci tutto" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Risorsa %s non trovata" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra di scorrimento" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Proprietà della barra di scorrimento fuori dal range" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selezionare un colore" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selezionare un font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Argento" #: lclstrconsts.rssize msgid " size " msgstr " dimensione " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Cielo blu" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Teal" #: lclstrconsts.rstext msgid "Text" msgstr "Testo" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossibile caricare il font predefinito" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Errore sconosciuto. Per favore, riporta questo errore al team di sviluppo" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Estensione immagine sconosciuta" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato di immagine sconosciuto" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "ormato bitmap non supportato." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato degli appunti non supportato %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "AVVISO: esistono %s DC non rilasciati, segue un dump dettagliato:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "AVVISO: ci sono %d GDIObjects non rilasciati, segue un dump dettagliato:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "AVVISO: ci sono %d messaggi lasciati in coda! Li sto liberando" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "AVVISO: Ci sono ancora %d strutture TimerInfo, le sto liberando" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "AVVISO: Ci sono ancora %s collegamenti a messaggi M_PAINT/LM_GtkPAINT non rimossi." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bianco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Solo parole intere" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Errore:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Avviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Finestra" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Frame della finestra" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Testo della finestra" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Giallo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossibile spostare il focus su una finestra disabilitata o invisibile" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Menu dupicati" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Creazione dell'azione non valida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerazione dell'azione non valida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registrazione dell'azione non valida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Deregistrazione dell'azione non valida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Il set di caratteri nella maschera \"%s\" non è valido!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Dimensione dell'immagine non valida" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Indice ImageList non valido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indice del menu fuori dal range" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "La voce del menu è nulla" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Il sottomenu non è nel menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Canc" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Giù" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Fine" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Invio" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Sinistra" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PagGiù" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PagSu" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Destra" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spazio" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Su" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nessun form MDI presente" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nessun temporizzatore disponibile" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo di token sbagliato: %s previsto" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Numero in virgola mobile non valido: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Numero intero non valido: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(at %d,%d, stream offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valore in byte incompleto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Stringa incompleta" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Simbolo token sbagliato: %s previsto ma %s trovato" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo di token sbagliato: %s previsto ma %s trovato" ����doublecmd-0.7.1/language/lcl/lclstrconsts.ua.po�����������������������������������������������������0000644�0001750�0000144�00000133151�12250635767�020574� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Браузер %S%S%S не є виконавчим." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Браузер %S%S%S не знайдено." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Помилка при виконанні %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Не вдається знайти браузер HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "База даних довідки %s%s%s не змогла знайти файл %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Макрос %s в BrowserParams буде замінений на URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Прийняти" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "кнопка програми" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Відміна" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Великі літери" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Очистити" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Керування" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Перетворити" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Видалити" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Вниз" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Кінець" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Вихід" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Виконати" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Кінцевий" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Корейська" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Допомога" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Дім" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Вставити" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Кенійська" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Японська" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Ліва клавіша миші" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Вліво" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "ліва клавіша Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Середня клавіша миші" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Меню" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Зміна режиму" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Наступний" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Неконвертоване" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Клавіша Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Друкувати" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Права клавіша миші" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Вправо" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "права клавіша Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Вибрати" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Скріншот" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Пробіл" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Невідомий" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Вверх" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ресурсу %s не знайдено" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Об'ємна тінь" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Об'ємне світло" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Елемент управління не може бути сам собі предком" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Активні границі" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Активні заголовки" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Всі файли (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Робоча область програми" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Колір морської хвилі" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Робочий стіл" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Навпаки" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Піктограмки" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Чорний" #: lclstrconsts.rsblank msgid "Blank" msgstr "Порожній" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Синій" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Вигляд кнопки" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Підсвітка кнопки" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Тінь кнопки" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Текст кнопки" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Калькулятор" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Відміна" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Не можу сфокусуватися" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Полотно не підтримує малювання" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Текст заголовка" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Враховувати регістр" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Кремовий" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Створення помилки кешування gdb:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Курсор" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Власний..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "За замовчуванням" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "дозволи групи користувачі розмір дата час" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Видалити запис?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Видалити" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Напрямок" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Каталог" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Стикування" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Дублювати формат іконок." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Редагувати" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Шукати по усьому файлу" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Помилка створення контексту пристроїв для %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ПОМИЛКА в LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Сталась помилка в %s за %s адресою %s%s Кадр %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Помилка читання %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Помилка збереження растрового зображення." #: lclstrconsts.rsexception msgid "Exception" msgstr "Виняткова ситуація" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Має існувати тека" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Теки \"%s\" не існує." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Такий файл \"%s\" вже існує. Переписати його ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Файл має існувати" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Файл \"%s\" не існує" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Файл \"%s\" не для запису." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Файл тільки для читання" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Зберегти файл як" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Відкрити існуючий файл" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Перезаписати файл ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Шлях має існувати" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Шлях \"%s\" не існує." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Виберіть теку" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(файл не знайдений: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Інформація про файл" #: lclstrconsts.rsfind msgid "Find" msgstr "Знайти" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Знайти ще" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Перший" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols не може бути >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows не може бути >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Форма" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Помилка потоків \"%s\" форм: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Вперед" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Фуксія" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ввімкнути вказані налагоджувальні повідомлення GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Вимкнути вказані налагоджувальні повідомлення GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Попередження і помилки програми, згенеровані Gtk+/GDK, зупинятимуть програму." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Заголовок активного градієнта" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Заголовок неактивного градієнта" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Сірий" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Сірий текст" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Пастельно-зелений" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Файла сітки не існує" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Індекс Grid'а поза межею допустимих значень." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex не може бути менше GroupIndex для попереднього елемента меню" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Фільтр" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Історія" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Відповідно до домовленостей Xt, класом програмим є її назва з великої літери. Напр., назвою класу для gimp є \"Gimp\". Якщо вказано --class, клас програми буде встановлено в \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ввімкнути вказані налагоджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Зв'язатись із вказаним сервером іксів, де \"h\" - назва хоста, \"s\" - номер сервера (звичайно 0) і \"d\" - номер дисплея (звичайно нехтують). Якщо --display не вказаний, використовується змінна оточення DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module модуль Завантажити вказаний модуль при запуску." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name ім'япрог Встановити ім'я програми в \"ім'япрог\". Якщо не вказано, ім'я програми буде встановлено в ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Вимкнути вказані налагоджувальні повідомлення Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Не встановлювати тимчасовий порядок модальних форм" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Заборонити використання розширень Х-пам'яті, що розділяється." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Виклик XSynchronize (display, True) після встановлення з'єднання з Xserver'ом. Це полегшує налагодження помилок протокола X через те, що запити буферування X будуть вимкнені і помилки X будуть одержані одразу після запиту протоколу, який викликав цю помилку, яка була оброблена сервером X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: вже зареєстрований" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Контекст довідки не знайдено" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "База даних довідки не знайдена" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Помилка довідки" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Контекст довідки %s не знайдено" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Контекст довідки %s не знайдено в базі %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "База даних довідки %s%s%s не знайла програму перегляду для сторінки довідки типу %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Базу даних довідки %s%s%s не знайдено" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ключове слово довідки %s%s%s не знайдено." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Ключове слово довідки %s%s%s не знайдено в базі даних %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Вузол довідки %s%s%s не має відповідної бази даних" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Не знайдено довідки для рядка %d, колонки %d з %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Відсутні доступни вузли довідки" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Довідку не знайдено" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Не зареєстрований" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Помилка відбірника довідки" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Відсутня програма для перегляду такого типу довідки %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Помилка переглядача довідки" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Не знайдено переглядач довідки" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Підсвічений" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Підсвічений текст" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Гаряче світло" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Ресурс значків OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Іконка" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Зображення іконки не може бути пустим" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Зображення іконки має бути того самого формату" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Невдалося змінити формат зображення іконки" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Зображення іконки має бути того самого розміру" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Невдалося змінити розмір іконки" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Іконка не має поточного зображення" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Межа неактивного вікна" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Заголовок неактивного вікна" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Індекс %d поза діапазоном 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Індекс поза діапазоном Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Фон повідомлення" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Текст повідомлення" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Вставка" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Неправильна Дата : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Неправильна Дата: %s. Має бути між %s та %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "неправильний потік об'єкту Форми" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Неправильне значення властивості" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Неправильний формат потоку" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s вже зіставлено з %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Остання" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Зелений" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Індекс списку поза діапазоном (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Список має бути порожнім" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Коричнево-малиновий" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Скидання" #: lclstrconsts.rsmball msgid "&All" msgstr "&Всі" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Скасувати" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Закрити" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Довідка" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Знехтувати" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ні" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ні для всіх" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&ОК" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Відкрити" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Повтор" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Зберегти" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Розблокувати" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Так" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Так для &усіх" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Сірий" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Панель меню" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Меню" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "підсічене меню" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Текст меню" #: lclstrconsts.rsmodified msgid " modified " msgstr " змінений" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Сиваво-зелений" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Ідентифікація" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Підтвердження" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Спеціальний" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Помилка" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Відомості" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Попередження" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Темно-синій" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Наступний" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Ні" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Неправильний файл сітки" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Об'єкт не є widgetset. Перевірте, чи був доданий модуль \"interfaces\" до програмних частин uses." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Оливковий" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Виберіть дату" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Растрове зображення" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Чорно-біле зображення (PBM)" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Напівтонове зображення (PGM)" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Переносна мережева графіка (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Кольорове зображення (PPM)" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Відправити" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sНатисніть 'OK' щоб проігнорувати і ризикнути втратити дані.%sНатисніть 'Відміна' для закриття програми." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Попередній" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Властивості %s не існує" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Пурпурний" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Команда Endupdate, хоча ніякого оновлення не проводилося" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Неможливо зберегти зображення під час оновлення" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Неможливо почати оновлення під час оновлення полотна" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Червоний" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Поновити" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Замінити" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Замінити все" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ресурсу %s не знайдено" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Смуга прокрутки" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Властивості смуги прокручування виходять поза діапазон" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Вибрати колір" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Вибрати шрифт" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Срібний" #: lclstrconsts.rssize msgid " size " msgstr " розмір" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Небесно-синій" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Синьо-зелений" #: lclstrconsts.rstext msgid "Text" msgstr "Текст" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Не можу завантажити шрифт за замовчуванням" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Невідома помилка, повідомте розробника" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Невідоме розширення файлу зображення" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Не підтримуваний тип точкового малюнка." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Формат не підтримує буфер обміну: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених контекстів пристроїв, список див. нижче:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " УВАГА: Знайдено %d не звільнених GDIObject, список див. нижче:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " УВАГА: В черзі залишилось %d повідомлень! Я їх видаляю" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " УВАГА: Залишилось %d структур TimerInfo, я їх звільняю" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " УВАГА: Знайдено %s не видалених LM_PAINT/LM_GtkPAINT посилань на повідомлення." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Білий" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Тільки цілі слова" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Помилка:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Попередження:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Вікно" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Межі вікна" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Текст вікна" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Жовтий" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Не можна дати фокус вимкненому або невидимому вікну" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Повторювані меню" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Неправильне створення дії" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Неправильне перерахування дій" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Неправильна реєстрація дії" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Неправильна дія зняття реєстрації" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Невірний набір символів по масці \"%s\"!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Неправильний розмір малюнка" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Неправильний індекс ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Індекс меню поза діапазоном" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem вказує на nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Підменю не в меню" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Вниз" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Кінець" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Дім" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Вліво" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Вправо" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Вверх" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Немає MDI форми" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Таймери є недоступними" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Невірний тип маркера: очікується %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Невірне число з плаваючою крапкою: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Невірне ціле число: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (на %d,%d, зміщення потоку %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Значення байта незавершене" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Незавершений рядок" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Невірний символ маркера: очікувався %s, але знайдений %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Невірний тип маркера: очікувався %s, але знайдений %s" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.id.po�����������������������������������������������������0000644�0001750�0000144�00000115070�12250635767�020563� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Lazarus LCL v1.x\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-01-30 02:21+0700\n" "Last-Translator: Zaenal Mutaqin <ade999@gmail.com>\n" "Language-Team: Zaenal Mutaqin <ade999@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Country: INDONESIA\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s bukan eksekutabel." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s tidak ditemukan." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Kesalahan saat mengeksekusi %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Tidak bisa menemukan HTML browser" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Database bantuan %s%s%s tidak bisa menemukan file %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s dalam BrowserParams akan diganti dengan URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Terima" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tombol aplikasi" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Kapital" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Kontrol" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konversi" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Turun" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Jalankan" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Panduan" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Tombol Mouse Kiri" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Left" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tombol kiri windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Tombol Mouse Tengah" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Ubah Mode" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonkonversi" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tombol pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Cetak" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Tombol Mouse Kanan" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Right" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tombol kanan windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Pilih" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tombol Spasi" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Tidak dikenal" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Up" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Sumber %s tidak ditemukan" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Kontrol tidak bisa menjadikan dirinya sebagai induk" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Semua file (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Mundur" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "Kosong" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulator" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Tidak bisa memfokuskan" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Kanvas tidak membolehkan penggambaran" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sensitif huruf" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Pembuatan cachable salah: " #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "ukuran waktu tanggal perijinan grup pemakai " #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Arah" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Direktori" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Docking" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Kesalahan pembuatan konteks device untuk %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "KESALAHAN dalam LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Kesalahan terjadi dalam %s at %sAlamat %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Kesalahan pembacaan %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Kesalahan ketika menyimpan bitmap" #: lclstrconsts.rsexception msgid "Exception" msgstr "Kekecualian" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Direktori harus ada" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Directori \"%s\" tidak ada." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "File \"%s\" sudah ada. Timpa saja ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "File harus ada" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "File \"%s\" tidak ada." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "File \"%s\" tidak bisa ditulisi." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "File tidak bisa ditulisi" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Simpan file sebagai" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Buka file yang ada" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Timpa file ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Path harus ada" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Path \"%s\" tidak ada." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Pilih Direktori" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(file tidak ditemukan: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informasi file" #: lclstrconsts.rsfind msgid "Find" msgstr "Cari" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Cari lagi" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols tidak bisa >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows tidak bisa >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Pengaliran form \"%s\" salah: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Maju" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Hidupkan pesan khusus GDK trace/debug." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Matikan pesan khusus GDK trace/debug." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Peringatan dan kesalahan dihasilkan oleh Gtk+/GDK akan menghentikan aplikasi." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "File grid tidak ada" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Indeks grid di luar jangkauan" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex tidak bisa kurang dari item GroupIndex menu sebelumnya" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histori:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Mengikuti konvensi Xt, class dari sebuah program dalam nama program dengan inisial karakter dibesarkan. Sebagai contoh, classname untuk gimp adalah \"Gimp\". Jika --class ditetapkan, class dari program akan di set ke \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Hidupkan pesan khusus Gtk+ trace/debug." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Sambungkan ke X server tertentu, dimana \"h\" adalah nama host, \"s\" adalah nomor server (biasanya 0), dan \"d\" adalah nomor layar (biasanya diabaikan). Jika --display tidak ditetapkan, variabel lingkungan DISPLAY yang digunakan." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Ambil modul yang ditetapkan saat startup." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Matikan pesan khusus Gtk+ trace/debug." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Jangan set urutan sementara untuk form modal" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Matikan penggunaan X Shared Memory Extension." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Panggil XSynchronize (layar, Benar) setelah sambungan Xserver terlaksana. Ini membuat debugging kesalahan protokol X lebih mudah, karena permintaan penyanggaan X akan dimatikan dan kesalahan X akan diterima segera setelah permintaan protokol yang kesalahannya telah dibuat sudah diproses oleh X server." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Sudah teregistrasi" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Konteks Bantuan tidak ditemukan" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Database Bantuan tidak ditemukan" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Bantuan Salah" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Konteks Bantuan %s tidak ditemukan." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Konteks Bantuan %s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Database Bantuan %s%s%s tidak ditemukan peninjau untuk halaman bantuan dari tipe %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Database Bantuan %s%s%s tidak ditemukan" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Kata kunci Bantuan %s%s%s tidak ditemukan dalam Database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Node Bantuan %s%s%s tidak mempunyai Database Bantuan" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Tidak ada bantuan ditemukan untuk baris %d, column %d of %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Node bantuan tidak tersedia" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Bantuan tidak ditemukan" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Tidak teregistrasi" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Selektor Bantuan Salah" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Tidak ada peninjau untuk tipe bantuan %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Peninjau Bantuan Salah" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Peninjau Bantuian tidak ditemukan" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Indeks %d di luar jangkauan 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Indeks Diluar jangkauan Cell[Kolom=%d Baris=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Tanggal tidak benar : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Tanggal tidak benar: %s. Harus ada diantara %s dan %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Aliran Objek Form tidak benar" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Nilai properti tidak benar" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Format stream tidak benar" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s sudah dikaitkan dengan %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Indeks List melebihi jangkauan (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "List harus kosong" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Batal" #: lclstrconsts.rsmball msgid "&All" msgstr "&Semua" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Batal" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Tutup" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Panduan" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Abaikan" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Tidak" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Tidak untuk semua" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Coba lagi" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ya" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ya untuk &Semua" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " diubah " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Konfirmasi" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Kustom" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Salah" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informasi" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Peringatan" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Berikutnya" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Bukan file grid yang benar" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Objek widgetset todal ada. Tolong periksa apakah unit \"interfaces\" sudah ditambahkan ke klausul uses program." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Pilih tanggal" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sTekan Ok untuk mengabaikan dan resiko kerusakan data.%sTekan Batal untuk mematikan program" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Sebelumnya" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Properti %s tidak ada" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Ganti" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Ganti semua" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Sumber %s tidak ditemukan" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Properti ScrollBar diluar jangkauan" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Pilih warna" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Pilih font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " ukuran " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Teks" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Tidak bisa mengambil font default" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Kesalahan Tidak Dikenal, silahkan laporkan bug ini" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Ekstensi gambar tidak dikenal" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Format bitmap tidak didukung." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Format clipboard tidak didukung: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " PERINGATAN: Ada %d DCs tidak dilepas, dump detil sebagai berikut:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " PERINGATAN: Ada %d GDIObjects tidak dilepas, detil dump sebagai berikut:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " PERINGATAN: Ada %d pesan tersisa dalam antrian! Saya akan membebaskannya" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " PERINGATAN: Ada %d struktur TimerInfo tersisa, Saya akan membebaskannya" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " PERINGATAN: ada %s tersisa link pesan LM_PAINT/LM_GtkPAINT tidak dihapus." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Hanya seluruh kata" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Kesalahan:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Peringatan:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Tidak bisa memberikan fokus ke jendela yang dimatikan atau tidak nampak" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplikasi menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Pembuatan action tidak benar" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumerasi action tidak benar" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registrasi action tidak benar" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Pembatalan registrasi action tidak benar" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "set karakter dalam mask \"%s\" tidak benar!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ukuran gambar tidak benar" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Indeks ImageList tidak benar" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Indeks Menu diluar jangkauan" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem kosong" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Sub-menu tidak dalam menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Turun" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Left" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Right" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Up" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Tidak ada form MDI" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Tidak tersedia timer" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.lt.po�����������������������������������������������������0000644�0001750�0000144�00000122363�12250635767�020611� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ translation of lclstrconsts.po to Valdas Jankūnas <zmuogs@gmail.com>, 2008, 2009, 2010. msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: 2010-05-23 21:32+0300\n" "Project-Id-Version: lclstrconsts\n" "Language-Team: Lietuvių <kde-i18n-lt@kde.org>\n" "X-Generator: Lokalize 1.0\n" "MIME-Version: 1.0\n" "Last-Translator: Valdas Jankūnas <zmuogs@gmail.com>\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Naršyklė %s%s%s nėra vykdomasis failas." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Naršyklė %s%s%s nerasta." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Įvyko klaida startuojant %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepavyko rasti HTML naršyklės." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Žinyno duomenų bazė %s%s%s neranda failo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makrokomanda %s naršyklės parametruose bus pakeista URL reikšme." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Programos klavišas" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Caps Lock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ctrl" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Convert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Down" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Esc" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Kairys peles klavišas" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Left" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Kairysis windows klavišas" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Vidurinis pelės klavišas" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Mode Change" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Next" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nonconvert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Prior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Dešinys pelės klavišas" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Right" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Dešinysis windows klavišas" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Space" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Nežinomas" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Up" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Resursas %s nerastas" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tamsumos šešėlis" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D šviesuma" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Valdiklio tėvas negali būti pats valdiklis" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktyvus rėmelis" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Veikiamoji antraštė" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Visi failai (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Programos darbo laukas" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Žydra" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Darbalaukis" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atgal" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Juoda" #: lclstrconsts.rsblank msgid "Blank" msgstr "Tuščias" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Mėlyna" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Mygtuko paviršius" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Mygtuko paryškinimas" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Mygtuko šešėlis" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Mygtuko tekstas" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Skaičiuotuvas" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Atsisakyti" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Suaktyvinti negalima" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Į „Canvas“ negalima piešti" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Antraštės tekstas" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Paisyti raidžių lygio" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kreminė" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Kuriama GDB aptinkama klaida:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Žymeklis" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Naudotojo…" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Numatytasis" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "leidimai naudotojas grupė dydis data laikas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Ištrinti įrašą?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Delete" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Kryptis" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Aplankas" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Pritvirtinimas" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Piktogramos formatai dubliuojasi." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Keisti" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Ieškoti visame faile" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Klaida" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Įvyko klaida kuriant įrenginio turinį, skirtą %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL klaida:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "%s įvyko klaida:%sadresas %s%s, kadras %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Įvyko klaida skaitant %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Įrašant rastrinį paveikslą įvyko klaida." #: lclstrconsts.rsexception msgid "Exception" msgstr "Išimtinė situacija" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Aplankas turi egzistuoti" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Aplankas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Toks failas „%s“ jau yra. Rašyti ant viršaus?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Failas turi egzistuoti" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Failas „%s“ neegzistuoja." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Failas „%s“ nėra skirtas rašymui." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Failas ne rašymui" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Įrašyti failą kaip" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Atverti egzistuojanti failą" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Perrašyti failą?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Kelias turi egzistuoti" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Kelias „%s“ neegzistuoja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Nurodykit aplanką" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(failas nerastas: „%s“)" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informacija apie failą" #: lclstrconsts.rsfind msgid "Find" msgstr "Ieškoti" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Ieškoti toliau" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Pirmasis" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "„FixedCols“ reikšmė negali būti lygi ar didesnė nei „ColCount“" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "„FixedRows“ reikšmė negali būti lygi ar didesnė nei „RowCount“" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Forma" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Formą siunčiant srautu „%s“ įvyko klaida: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Pirmyn" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpurinė" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug žymės Įjungiami nurodyti GDK sekimo/derinimo pranešimai." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug žymės Išjungiami nurodyti GDK sekimo/derinimo pranešimai." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings GTK+ ar GDK sugeneravus perspėjimą arba klaidą, programa bus sustabdyta." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Veikiamosios antraštės gradientas" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Įprastos antraštės gradientas" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Pilka" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Neveiksnus tekstas" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Žalia" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Tinklelio failas neegzistuoja" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Tinklelio indeksas peržengia ribas" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "„GroupIndex“ negali būti mažesnis už ankstesnių menių punktų „GroupIndex“" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtras:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Istorija:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class klasės_pavadinimas Pagal Xt susitarimą, programos klasė yra programos pavadinimas, kuriame pirmoji raidė yra didžioji. Pavyzdžiui: GIMP programos klasė yra „Gimp“. Jei --class nurodytas, tai klasės pavadinimas bus priskirtas „classname“." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug žymės Įjungiami nurodyti GTK+ sekimo/derinimo pranešimai." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Prisijungti prie nurodyto X serverio, čia „h“ yra hostname, „s“ - serverio numeris (paprastai 0), ir „d“ - ekrano numeris (dažniausia praleidžiamas). Jei --display nenurodytas, tada naudojamas DISPLAY aplinkos kintamasis." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modulis Starto metu įkelti nurodytą modulį." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programa Programos pavadinimą nustatyti į „programa“. Jei nenurodyta, tai programos pavadinimas bus nustatytas į ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug žymės Išjungiami nurodyti GTK+ sekimo/derinimo pranešimai." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Modalinių formų eilę nedaryti trumpalaikę." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Nenaudoti „X Shared Memory“ plėtinio." #: lclstrconsts.rsgtkoptionsync #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Kai XServer ryšys sukurtas, vykdyti „XSynchronize (display, True)“. Tai padarys lengvesnį X protokolo klaidų derinimą, nes bus išjungtas X kreipinių buferis ir X serveriui apdorojant protokolo kreipinį įvykusi klaida bus gauta iškart." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: jau yra registruotas" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Žinyno turinys nerastas" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Žinyno duomenų bazė nerasta" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Žinyno klaida" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Žinyno turinys %s nerastas." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Žinyno turinys %s duomenų bazėje %s%s%s nerastas." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Žinyno duomenų bazė %s%s%s nerado žiūryklės %s tipo žinyno lapui." #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Žinyno duomenų bazė %s%s%s nerasta." #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Žinyno raktažodis %s%s%s nerastas." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Žinyno raktažodis %s%s%s duomenų bazėje %s%s%s nerastas." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Žinyno mazgas %s%s%s neturi žinyno duomenų bazės." #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Žinyne nėra duomenų eilutei %d, stulpeliui %d šio %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Žinyno nėra" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Žinynas nerastas" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: neregistruotas" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Žinyno išrinkėjo klaida" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Nerasta žiūryklė %s%s%s žinyno tipui." #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Žinyno žiūryklės klaida" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Žinyno žiūryklė nerasta" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Paryškinimas" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Paryškintas tekstas" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Indikatorius" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX piktogramos resursas" #: lclstrconsts.rsicon msgid "Icon" msgstr "Piktograma" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Piktogramos paveikslėlis neturi būti tuščias" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Piktogramos ir naujasis paveikslėliai turi būti to paties formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Neina pakeisti piktogramos paveikslo formato" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Piktogramos ir naujasis paveikslėliai turi būti to paties dydžio" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Neina pakeisti piktogramos paveikslo dydžio" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Veikiamoji piktograma neturi paveikslėlio" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Neaktyvus rėmelis" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Neaktyvi antraštė" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Neaktyvi antraštė" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s indeksas %d peržengia ribas 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Langelio [stulpelis = %d, eilutė = %d] indeksas peržengia ribas" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Fonas informacijai" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informacijos tekstas" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Insert" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Klaidinga data: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Klaidinga data: %s. Ji turi būti tarp %s ir %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "klaidingas formos objekto srautas" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Klaidinga savybės reikšmė" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Klaidingas srauto formatas" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s jau yra asocijuotas su %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Paskutinysis" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citrininė" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Sąrašo indeksas peržengė ribas (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Sąrašas turi būti tuščias" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kaštoninė" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Nutraukti" #: lclstrconsts.rsmball msgid "&All" msgstr "&Visi" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Atsisakyti" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Užverti" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Žin&ynas" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignoruoti" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Visada ne" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Tinka" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "At&verti" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Ka&rtoti" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Į&rašyti" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Atsklęsti" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Taip" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Vis&ada taip" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Vidutiniškai pilka" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Meniu juosta" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Paryškintas meniu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menu tekstas" #: lclstrconsts.rsmodified msgid " modified " msgstr " pakeista " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Žalsva" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Tapatumo nustatymas" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Patvirtinimas" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Naudotojo" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Klaida" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informacija" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Perspėjimas" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Tamsiai mėlyna" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Kitas" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Jokia" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Klaidingas tinklelio failas" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Ne valdiklio objektas. Patikrinkite ar modulis „interfaces“ yra paminėtas programos naudojamų modulių sąraše." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Alyvuogių" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Nurodykite datą" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portatyvus BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portatyvus GreyMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portatyvus PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Tolesnis" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPaspaudę „Tinka“ ignoruosite, tačiau rizikuosite duomenimis.%sPaspaudę „Atsisakyti“ sustabdysite programą." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Ankstesnis" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Savybė %s neegzistuoja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpurinė" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "„Endupdate“, tačiau niekas neatnaujinama" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Neina įrašyti paveikslo, nes jis atnaujinamas" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Visko atnaujinti negalima kai atnaujinamas tik „Canvas“" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Raudona" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atnaujinti" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Pakeisti" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Pakeisti visus" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Resursas %s nerastas" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Slinkties juosta" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Savybės „ScrollBar“ vertė peržengia ribas" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Nurodykit spalvą" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Nurodykit šriftą" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Sidabrinė" #: lclstrconsts.rssize msgid " size " msgstr " dydis " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Dangaus žydrumo" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Tamsiai žydra" #: lclstrconsts.rstext msgid "Text" msgstr "Tekstas" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "„Tagged Image File Format“" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nepavyko įkelti numatytą šriftą" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Nežinoma klaida, prašau praneškite kūrėjams apie šią klaidą." #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Nežinomas paveikslo plėtinys" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Nežinomas paveikslo formatas" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepalaikomas rastrinio paveikslo formatas." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nepalaikomas iškarpinės formatas: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " Perspėjimas: liko %d neatlaisvinti „DC“, išsamiau:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " Perspėjimas: liko %d neatlaisvinti „GDIObject“, išsamiau:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " Perspėjimas: eilėje dar yra %d pranešimų, jie bus pašalinti." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Perspėjimas: dar liko %d „TimerInfo“ struktūrų, jos bus sunaikintos." #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " Perspėjimas: liko %s nepašalintos nuorodos į LM_PAINT/LM_GtkPAINT pranešimus." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Balta" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Tik visų žodžių" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Klaida:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Perspėjimas:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Langas" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Lango rėmelis" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Lango tekstas" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Geltona" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Neįgalintą arba nematomą langą suaktyvinti negalima" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Meniu dubliuojasi" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Klaidingas veiksmo kūrimas" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Klaidinga veiksmo enumeracija" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Klaidingas veiksmo registravimas" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Klaidingas veiksmo išregistravimas" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Klaidinga kaukės „%s“ koduotė!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Klaidingas paveikslo dydis" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Klaidingas„ImageList“ indeksas" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Meniu indeksas peržengia ribas" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "„MenuItem“ reikšmė yra nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Pomeniu nėra įdėtas į menių" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Vald+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Šal" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Žemyn" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Pab" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Įvesti" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Gr" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Prad" #: lclstrconsts.smkcins msgid "Ins" msgstr "Įterpti" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Kairėn" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "Psl. žemyn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "Psl. aukštyn" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Dešinėn" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Lyg2+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Tarpas" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Aukštyn" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "MDI formos nėra." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nėra laikmačių" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Klaidingas leksemos tipas: tikėtasi %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Klaidingas slankaus kablelio skaičius: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Klaidingas sveikasis skaičius: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (ties %d,%d, srauto poslinkis %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Neužbaigta bitų vertė" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neužbaigta eilutė" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Klaidingas leksemos simbolis: tikėtasi %s, tačiau rasta %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Klaidingas leksemos tipas: tikėtasi %s, tačiau rasta %s" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.sl.po�����������������������������������������������������0000644�0001750�0000144�00000130035�12313075650�020570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovenian translations for double-commander lclstrconsts. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # This file is distributed under the same license as the double-commander package. # # Matej Urbančič <mateju@svn.gnome.org>, 2011-2014. # msgid "" msgstr "" "Project-Id-Version: double-commander-lclstrconsts master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2014-03-16 16:36+0100\n" "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.5.4\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Brskalnik %s%s%s ni izvedljiv." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Brskalnika %s%s%s ni mogoče najti." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Napaka med zaganjanjem %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Ni mogoče najti brskalnika HTML." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "" "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> " "Help Options" msgstr "" "Ni mogoče najti brskalnika HTML. %s Program je treba določiti med Orodji -> " "Možnosti -> Pomoč -> Možnosti pomoči" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Podatkovni zbirki %s%s%s manjka datoteka %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v predmetu BrowserParams bo zamenjan z naslovom URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Sprejmi" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "ključ programa" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Povratna tipka" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Velike črke" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Počisti" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Ukaz" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Tipka" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Pretvori" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Izbriši" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Navzdol" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Konec" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Ubežna tipka" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Izvedi" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Končna različica" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Pomoč" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Domov" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Vstavi" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Levi gumb miške" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Levo" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Leva tipka Win" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Srednji gumb miške" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Meni" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Sprememba načina" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Naslednji" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nepretvorjeno" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Zaklep številčnice" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Številčnica %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tipka za premor" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Natisni" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Predhodni" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Desni gumb miške" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Vnosna tipka" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Desno" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Desna tipka Win" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Drsnik" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Izbor" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Dvigalka" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Zaslonske slike" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Preslednica" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznano" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Navzgor" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "ni mogoče izvesti ukaza %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filter)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Vira %s ni mogoče najti" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "datoteke programa ni mogoče najti %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D temna senca" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D svetla senca" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "Nadzorni predmet ne more biti sam sebi nadrejen" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Dejaven okvir" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Dejaven naslov" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Vse datoteke (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Delovna površina programa" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Vodna" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Namizje" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Nazaj" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Slike" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Črna" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prazno" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Modra" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Neizbran gumb" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Poudarjen gumb" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Senca gumba" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Besedilo gumba" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Računalo" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Ni mogoče postaviti v žarišče" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Na platno ni mogoče risati" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Besedilo naslova" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Razlikovanje velikosti črk" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" "Predmet razreda '%s' ne more imet hkrati tudi podrejenega predmeta razreda " "'%s'." #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Nadzorno okno '%s' je brez nadrejenega okna" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' ni nadrejen '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Kremasta" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Ustvarjanje napake predpomnjenja gdb:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Kazalka" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Po meri ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Privzeto" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "dovoljenja uporabnik skupina velikost datum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Ali naj se vpis izbriše?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Izbriši" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Smer" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Mapa" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Sidrišče" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Podvojen zapis ikone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Uredi" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Preišči celotno datoteko" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Napaka" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Napaka med ustvarjanjem vsebine naprave za %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "Napaka v LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Prišlo je do napake v %s pri %s na naslovu %s%s v okvirju %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Napaka med branjem %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Napaka med shranjevanjem bitne slike." #: lclstrconsts.rsexception msgid "Exception" msgstr "Izjema" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Mapa mora obstajati" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Mapa \"%s\" ne obstaja!" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Datoteka \"%s\" že obstaja. Ali naj bo prepisana?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Datoteka mora obstajati" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Datoteka \"%s\" ne obstaja." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Datoteka \"%s\" ni zapisljiva." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Datoteka ni zapisljiva" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Shrani datoteko kot" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Odpri obstoječo datoteko" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Ali naj bo datoteka prepisana?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Pot mora obstajati" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Pot \"%s\" ne obstaja." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Izbor mape" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(datoteke ni mogoče najti: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Podrobnosti datoteke" #: lclstrconsts.rsfind msgid "Find" msgstr "Najdi" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Najdi več" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Prvi" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "Predmet stalnega števila stolpcev ne more bi >= števcu stolpcev" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "Predmet stalnega števila vrstic ne more bi >= števca vrstic" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Obrazec" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "" "Form resource %s not found. For resourceless forms CreateNew constructor " "must be used. See the global variable RequireDerivedFormResource." msgstr "" "Vira obrazca %s ni mogoče najti. Za obrazce brez virov je treba ustvariti " "posebne predmete. Oglejte si možnosti splošne spremenljivke " "RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Napaka pretakanja obrazca \"%s\": %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Posreduj" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuksija" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" "--gdk-debug flags Prikaži posebna sporočila sledenja in razhroščevanja " "GDK." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" "--gdk-no-debug flags Skrij posebna sporočila sledenja in razhroščevanja GDK." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Slikovni zapis GIF" #: lclstrconsts.rsgoptionfatalwarnings msgid "" "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt " "the application." msgstr "" "--g-fatal-warnings Opozorila in napake s strani Gtk+/GDK zaustavijo " "delovanje programa." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Preliv naziva dejavnega okna" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Preliv naziva nedejavnega okna" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Siva" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Sivo besedilo" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zelena" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Datoteka mreže ne obstaja." #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Določilo mreže je izven veljavnega obsega." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" "Vrednost predmeta GroupIndex ne more biti manjše od predhodne vrednosti " "istega predmeta" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Zgodovina:" #: lclstrconsts.rsgtkoptionclass msgid "" "--class classname Following Xt conventions, the class of a program is " "the program name with the initial character capitalized. For example, the " "classname for gimp is \"Gimp\". If --class is specified, the class of the " "program will be set to \"classname\"." msgstr "" "--class ImeRazreda Po določilih Xt je razred programa ime programa z " "veliko začetnico. \"Gimp\" (pisan z veliko) je na primer ime razreda " "programa gimp. Če je navedena zastavica --class, bo razred programa " "nastavljen na \"Imerazreda\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" "--gtk-debug zastavice Omogoči posebna sporočila sledenja in " "razhroščevanja Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "" "--display h:s:d Connect to the specified X server, where \"h\" is the " "hostname, \"s\" is the server number (usually 0), and \"d\" is the display " "number (typically omitted). If --display is not specified, the DISPLAY " "environment variable is used." msgstr "" "--display h:s:d Povezava z določenim strežnikom X, kjer je \"h\" ime " "gostitelja, \"s\" številka strežnika (običajno 0) in \"d\" številka zaslona " "(ta je običajno izpuščena). Če zastavica --display ni določena, je " "uporabljena spremenljivka okolja DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module modul Naloži določen modul ob zagonu." #: lclstrconsts.rsgtkoptionname msgid "" "--name programe Set program name to \"progname\". If not specified, " "program name will be set to ParamStrUTF8(0)." msgstr "" "--name imeprograma Nastavi ime programa na \"imeprograma\". V kolikor " "to ime ni navedeno, je ime določeno kot ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" "--gtk-no-debug flags Onemogoči posebna sporočila sledenja in razhroščevanja " "Gtk+." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" "--lcl-no-transient : ne nastavi razvrstitve pogovornih oken modalnih obrazcev" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" "--no-xshm Onemogoči uporabo razširitve souporabe pomnilnika X." #: lclstrconsts.rsgtkoptionsync msgid "" "--sync Call XSynchronize (display, True) after the Xserver " "connection has been established. This makes debugging X protocol errors " "easier, because X request buffering will be disabled and X errors will be " "received immediately after the protocol request that generated the error has " "been processed by the X server." msgstr "" "--sync Zastavica izvede priklic programa XSynchronize " "(zaslon, PRAV) po vzpostavitvi povezave s strežnikom Xserver. S tem postane " "razhroščevanje protokolov X enostavnejše, saj je medpomnjenje zahtev " "strežnika X onemogočeno. Napake strežnika X so prejete ob dogodku ali " "zahtevi protokola, ki je napako sprožilo." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: že vpisano" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "Najdena je dokumentacija pomoči, ne pa tudi pomoč za iskano vsebino" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "Za to vsebino ni nameščene dokumentacije" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Napaka prikazovanja pomoči" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Pomoči vsebine %s ni mogoče najti." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Pomoči vsebine %s v podatkovni zbirki %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" "Podatkovni zbirki %s%s%s ni mogoče pripisati pregledovalnika za pomoč vrste " "%s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Podatkovne zbirke %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Datoteke pomoči za %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Datoteke pomoči za %s%s%s ni mogoče najti v podatkovni zbirki %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Ključne besede pomoči %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" "Ključne besede pomoči %s%s%s v podatkovni zbirki %s%s%s ni mogoče najti." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Vozlišče pomoči %s%s%s je brez pripadajoče podatkovne zbirke pomoči" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Pomoči za vrsto %d in stolpec %d od %s ni mogoče najti." #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "Za to vsebino pomoč ni na voljo." #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "Ni pomoči za to vrsto vsebine" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: ni vpisano" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Napaka izbirnika pomoči" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Ni pregledovalnika za vrsto pomoči %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Napaka pregledovalnika pomoči" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "Ni ustreznega pregledovalnika za to vrsto vsebine pomoči" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Poudarjeno" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Poudarjeno besedilo" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Vroča svetloba" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Ikona Mac OS" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Vrednost slike ikone ne more biti prazna" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Ikona mora biti v enakem zapisu" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Ni mogoče spremeniti zapisa ikone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Ikona mora biti enako velikost" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Ni mogoče spremeniti velikosti ikone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nima trenutne slike" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Nedejaven okvir" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Nedejaven napis" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Nedejaven napis" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s. Določilo %d je izven veljavnih meja 0 - %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Kazalo je izven obsega celice [Stolpec=%d Vrstica=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Ozadje okna podrobnosti" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Besedilo podrobnosti" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Vstavi" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Neveljaven datum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neveljaven datum: %s. Vrednost mora biti med %s in %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Neveljaven pretok obrazca predmeta" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neveljavna vrednost lastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neveljaven zapis pretoka" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "Pripona %s je že programsko povezana z programom %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Slikovni zapis JPEG" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Zadnji" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Rumeno-zelena" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Določilo seznama presega dovoljene meje (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Seznam mora biti prazen" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kostanjeva" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Prekini" #: lclstrconsts.rsmball msgid "&All" msgstr "&Vse" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Prekliči" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zapri" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "Pomo&č" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Prezri" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ne za vse" #: lclstrconsts.rsmbok msgid "&OK" msgstr "V &redu" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Odpri" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Poskusi &znova" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Shrani" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Odkleni" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Da" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Da za &vse" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Svetlosiva" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menijska vrstica" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Meni" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Poudarek v meniju" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Besedilo menija" #: lclstrconsts.rsmodified msgid " modified " msgstr " spremenjeno" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Zelena" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Overitev" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potrditev" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Po meri" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Napaka" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Podrobnosti" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Opozorilo" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Mornarsko modra" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Naslednji" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Brez" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Neveljavna datoteka mreže" #: lclstrconsts.rsnowidgetset msgid "" "No widgetset object. Please check if the unit \"interfaces\" was added to " "the programs uses clause." msgstr "" "Ni naveden predmet nabora gradnikov. Preveriti je treba ali so enote " "\"vmesnikov\" dodane zahtevam programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivna" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Izbor datuma" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Sličica" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Po" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "" "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the " "program." msgstr "" "%s%sPritisnite gumb V redu, če želite napako prezreti in posledično morda " "izgubiti podatke..%sPritisnite gumb Prekliči za uničenje programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Pred" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Opozori ob zamenjavi" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Lastnost %s ne obstaja" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Škrlatna" #: lclstrconsts.rsqtoptiondograb msgid "" "-dograb (only under X11), running under a debugger can cause an implicit -" "nograb, use -dograb to override. Need QT_DEBUG." msgstr "" "-dograb : (le v okolju X11), zagon z razhroščevanjem lahko povroči izrecno " "uporabo atributa -nograb. Z uporabo -dograb se možnost prepiše. Možnost " "zahteva nameščen paket QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "" "-graphicssystem param, sets the backend to be used for on-screen widgets and " "QPixmaps. Available options are native, raster and opengl. OpenGL is still " "unstable." msgstr "" "-graphicssystem parameter : nastavi ozadnji program za uporabo z zaslonskimi " "gradniki in predmeti QPixmaps. Na voljo so možnosti native (programsko), " "raster (rastersko) in opengl (OpenGL). OpenGL je še vedno v razvoju in ni " "povsem stabilen." #: lclstrconsts.rsqtoptionnograb msgid "" "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need " "QT_DEBUG." msgstr "" "-nograb : pove Qt, da ne sme prevzeti nadzora nad miško ali tipkovnico; " "zahteva QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" "-reverse : nastavi usmerjenost pisave programa na obratno vrednost Qt::" "RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session <seja> : obnovi program predhodne seje." #: lclstrconsts.rsqtoptionstyle msgid "" "-style style or -style=style, sets the application GUI style. Possible " "values are motif, windows, and platinum. If you compiled Qt with additional " "styles or have additional styles as plugins these will be available to the -" "style command line option. NOTE: Not all styles are available on all " "platforms. If style param does not exist Qt will start an application with " "default common style (windows)." msgstr "" "-style <slog> ali -style=<slog> nastavi slog uporabniškega vmesnika " "programa. Mogoče vrednosti so motif, windows in platinum. Pri izgradnji s Qt " "so na voljo tudi drugi slogi ali slogi kot vstavki. OPOMBA: vsi slogi niso " "na voljo v vseh okoljih. Kadar parametri sloga niso poseben določeni, se " "program zažene v slogu oken (Windows)." #: lclstrconsts.rsqtoptionstylesheet msgid "" "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style " "Sheet. The value must be a path to a file that contains the Style Sheet. " "Note: Relative URLs in the Style Sheet file are relative to the Style Sheet " "file's path." msgstr "" "-stylesheet <slogovna predloga> ali pa -stylesheet=<slogovna predloga> : " "nastavi slogovno predlogo programa. Vrednost mora biti pot do datoteke s " "predlogo. Opomba: relativni naslovi URL v datoteki predloge so relativni na " "pot datoteke predloge." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (le pod X11) : preklopi na usklajevalni način za razhroščevanje." #: lclstrconsts.rsqtoptionwidgetcount msgid "" "-widgetcount, prints debug message at the end about number of widgets left " "undestroyed and maximum number of widgets existed at the same time." msgstr "" "-widgetcount : na koncu odvoda izpiše sporočilo razhroščevanja o številu " "neuničenih gradnikov in največje število sočasno zagnanih gradnikov." #: lclstrconsts.rsqtoptionx11bgcolor msgid "" "-bg or -background color, sets the default background color and an " "application palette (light and dark shades are calculated)." msgstr "" "-bg ali -background <barva> : nastavi privzeto barvo ozadja in paleto " "programa (na osnovi barve so preračunane svetlejšie in temnejši odtenki)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ali -button <barva> : nastavi privzeto barvno gumba." #: lclstrconsts.rsqtoptionx11cmap msgid "" "-cmap, causes the application to install a private color map on an 8-bit " "display." msgstr "-cmap : vsili namestitev zasebne barvne palete na 8-bitnih zaslonih." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display <zaslon> : nastavi zaslon X (default is $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ali -foreground <barva> : nastavi privzeto barvo pisave." #: lclstrconsts.rsqtoptionx11font msgid "" "-fn or -font font, defines the application font. The font should be " "specified using an X logical font description." msgstr "" "-fn ali -font <pisava> : določa pisavo programa. Ta mora biti naveden kot " "logični opis pisave za X." #: lclstrconsts.rsqtoptionx11geometry msgid "" "-geometry geometry, sets the client geometry of the first window that is " "shown." msgstr "" "-geometry <geometrija> : nastavi geometrijo okna odjemalca prvega " "prikazanega okna." #: lclstrconsts.rsqtoptionx11im msgid "" "-im, sets the input method server (equivalent to setting the XMODIFIERS " "environment variable)." msgstr "" "-im : nastavi strežnik načina vhoda (možnost je enaka nastavitve okoljske " "spremenljivke XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "" "-inputstyle, defines how the input is inserted into the given widget, e.g. " "onTheSpot makes the input appear directly in the widget, while overTheSpot " "makes the input appear in a box floating over the widget and is not inserted " "until the editing is done." msgstr "" "-inputstyle Določa kako naj se obravnavajo programski vhodi v podan " "gradnik. Na primer gradnik onTheSpot omogoča vhod prikazan neposredno v " "gradniku, medtem ko omogoča gradnik overTheSpot prikaz vhoda v polju, ki " "plava nad gradnikom in ni vstavljen, dokler urejanje ni končano." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name <ime> : nastavi ime programa." #: lclstrconsts.rsqtoptionx11ncols msgid "" "-ncols count, limits the number of colors allocated in the color cube on an " "8-bit display, if the application is using the QApplication::ManyColor color " "specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 " "levels of red, 6 of green, and 6 of blue); for other values, a cube " "approximately proportional to a 2x3x1 cube is used." msgstr "" "-ncols <števec> : omeji število barv, ki so dodeljene barvni kocki 8-bitnega " "zaslona, kadar program uporablja določilo QApplication::ManyColor. Če je " "števec enak 216, je uporabljena barvna kocka 6x6x6 (to je 6 ravni rdeče, 6 " "zelene in 6 modre); za druge vrednosti je uporabljena kocka približnih " "vrednosti razmerja 2x3x1." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title <naziv> : nastavi naziv programa" #: lclstrconsts.rsqtoptionx11visual msgid "" "-visual TrueColor, forces the application to use a TrueColor visual on an 8-" "bit display." msgstr "" "-visual <TrueColor> : vsili uporabo predočenja TrueColor tudi na 8-bitnih " "zaslonih." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" "Prejeta je zahteva konca posodobitve, čeprav posodobitev sploh ni zagnana" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Ni mogoče shraniti slike med izvajanjem posodabljanja" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" "Ni mogoče začeti posodabljanja vseh predmetov, ko je v teku posodabljanje " "platna. " #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rdeča" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Osveži" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Zamenjaj" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Zamenjaj vse" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Vira %s ni mogoče najti" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Drsnik" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Lastnost drsnika je izven dovoljenega območja" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Izbor barve" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Izbor pisave" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Srebrna" #: lclstrconsts.rssize msgid " size " msgstr " velikost" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Nebesno modra" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Upravljanje z zavihki" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Modrozelena" #: lclstrconsts.rstext msgid "Text" msgstr "Besedilo" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Tagged Image File Format" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "Pult" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "Oprijemalnik za nadzor velikosti dveh delov površine" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "Drevesna zgradba predmetov" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Ni mogoče naložiti privzete pisave" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Prišlo je do neznane napake. Pošljite sporočilo." #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznana pripona slike" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Neznan zapis slike" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodprt zapis bitne slike" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nepodprta oblika odložišča: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" " Opozorilo: obstaja neobljavljenih primerkov programa DCs; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" " Opozorilo: obstaja %d neobjavljenih predmetov GDIObjects; sledi podroben " "izpis dnevnika:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" " Opozorilo: obstaja %d preostalih sporočil v vrsti, ki bodo nemudoma " "sproščena" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " Opozorilo: obstaja %d predmetov TimerInfo, ki bodo nemudoma sproščeni" #: lclstrconsts.rswarningunremovedpaintmessages msgid "" " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" " Opozorilo: obstaja %s neodstranjenih povezav sporočil LM_PAINT/LM_GtkPAINT." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bela" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Le cele besede" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Napaka:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Opozorilo:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Okvir okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Besedilo okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Rumena" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Onemogočenega ali nevidnega okna ni mogoče postaviti v žarišče" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Podvojen meni" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neveljavno ustvarjanje dejanja" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neveljavno oštevilčenje dejanja" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neveljaven vpis dejanja" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neveljavno izpisovanje dejanja" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Znakovni nabor v maski \"%s\" ni veljaven!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neveljavna velikost slike" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neveljavno kazalo seznama slik" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "Trenutno besedilo ni skladno z določeno masko." #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Kazalo menija je izven veljavnega obsega" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Predmet menija je prazno polje" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podrejeni meni ni meni" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "Povratnica" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Navzdol" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Vnosna tipka" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Domov" #: lclstrconsts.smkcins msgid "Ins" msgstr "Vrivalka" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Levo" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "Stran dol" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "Stran gor" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Desno" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Dvigalka+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Preslednica" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Gor" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Ni veljavne oblike MDI." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Na voljo ni nobenega časomera." #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neveljavno število s plavajočo vejico: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neveljavna celoštevilčna vrednost: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (pri %d,%d, zamik pretoka %.d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nekončana bitna vrednost" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nekončan niz" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Napačen simbol žetona: pričakovan je %s, prejet pa %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Neznana vrsta žetona: pričakovana je vrsta %s; vrnjena pa je %s" #~ msgid "Help Context not found" #~ msgstr "Pomoči vsebine ni mogoče najti" #~ msgid "Help Database not found" #~ msgstr "Podatkovne zbirke pomoči ni mogoče najti" #~ msgid "Help not found" #~ msgstr "Pomoči ni mogoče najti" #~ msgid "Help Viewer not found" #~ msgstr "Pregledovalnika pomoči ni mogoče najti" #~ msgid "OSX Icon Resource" #~ msgstr "Vir ikon OSX" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.zh_TW.po��������������������������������������������������0000644�0001750�0000144�00000114066�12250635767�021226� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: 0.9.27 beta\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2011-10-17 14:44+0800\n" "Last-Translator: Lance <l381@ms5.hinet.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: TAIWAN\n" "X-Poedit-SourceCharset: utf-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "瀏覽 %s%s%s 不是可執行程式." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "瀏覽 %s%s%s 未找到." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "當執行 %s%s%s 時發生錯誤:%s%s " #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "無法找到 HTML 瀏覽器" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "幫助資料庫 %s%s%s 無法找到檔案 %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "瀏覽框裏的巨集 %s 將被 URL 所替代." #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "接受" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "應用程式快捷鍵" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "後退" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "大寫" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "清除" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "控制" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "轉換" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "刪除" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "下" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "執行" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "幫助" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "插入" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "滑鼠左鍵" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "左" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Win 鍵" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "滑鼠中鍵" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "目錄" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "模式更改" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "下一個" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "不轉換" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "數字鎖定" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "數字鍵盤 %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "暫停鍵" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "列印" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "優先" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "滑鼠右鍵" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "返回" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "右" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Win 鍵" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "滾動" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "選擇" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "快照" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "空格鍵" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "未知" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "上" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "未找到資源 %s" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D陰影" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D光線" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "控制點不能把自己設為父節點" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "作用中邊線" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "作用中標題" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "所有檔案 (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "程式工作區" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "桌面" #: lclstrconsts.rsbackward msgid "Backward" msgstr "後退" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "黑白位圖" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "黑色" #: lclstrconsts.rsblank msgid "Blank" msgstr "空白" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "藍色" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "按鈕表面" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "按鈕高亮" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "按鈕陰影" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "按鈕文字" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "計算機" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "取消" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "無法聚焦" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas 不允許畫圖" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "標題文字" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "大小寫敏感" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "建立 GDB 可以捕捉的錯誤" #: lclstrconsts.rscursor msgid "Cursor" msgstr "光標" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "自定義..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "預設值" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "權限 用戶 群組 大小 日期 時間" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "刪除記錄?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "刪除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "目錄 &D" #: lclstrconsts.rsdocking msgid "Docking" msgstr "停靠" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "同樣的圖示格式." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "編輯" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "尋找整個檔案" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "錯誤" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "在 %s %s地址 %s%s 框架 %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "讀取 %s%s%s 錯誤: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "儲存位圖時出錯。" #: lclstrconsts.rsexception msgid "Exception" msgstr "異常" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "目錄必須存在" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "目錄 \"%s\" 不存在." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "檔案 \"%s\" 已經存在.%s替換嗎?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "檔案必須存在" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "檔案 \"%s\" 不存在." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "檔案 \"%s\" 為只讀." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "檔案為只讀" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "另存為" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "打開檔案" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "覆蓋檔案?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "路徑不存在" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "路徑 \"%s\" 不存在." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "選擇目錄" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(未找到檔案: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "檔案資訊" #: lclstrconsts.rsfind msgid "Find" msgstr "尋找" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "尋找更多" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "第一個" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols 不能 >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows 不能 >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "向前" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "紫紅" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags 打開 GDK 跟蹤/調試訊息." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags 關閉 GDK 跟蹤/調試訊息." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings 使 Gtk+/GDK 產生的警告和錯誤終止應用程式。" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "作用中標題顏色漸變" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "非作用中標題顏色漸變" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "灰色" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "灰色文字" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "綠色" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "網格檔案不存在" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "網格索引越界。" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex 不能比之前的目錄項目的 GroupIndex 少" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "過濾器:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "歷史:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname 按照 Xt 轉換規則, 一個程式的類別是第一個字母大寫的程式名稱。比如,gimp 的類別是 \"Gimp\"。如果指定了 --class,程式的類別會被設為 \"classname\"。" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags 打開 Gtk+ 跟蹤/調試資訊." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d 連接到指定的 X 伺服器,其中 \"h\"是主機名,\"s\"是伺服器編號(通常是0),\"d\" 是顯示編號(一般省略)。如果沒有指定 --display ,將會使用 DISPLAY 環境變量。" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module 啟動時載入指定模組" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags 關閉 Gtk+ 跟蹤/調試訊息." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient 不要為形式上的窗體設定臨時順序" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm 禁止使用 X 共享延伸記憶體。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: 已經註冊" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "未找到幫助內容" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "未找到幫助資料庫" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "幫助錯誤" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "未找到幫助上下文 %s." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "沒有找到 %s 的幫助內容在資料庫 %s%s%s 中." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "幫助資料庫 %s%s%s 未找到瀏覽器可以閱讀幫助頁 %s 的類型" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "未找到幫助資料庫 %s%s%s" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "關鍵字 %s%s%s 未找到幫助." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "關鍵字 %s 的幫助在資料庫 %s%s%s 中沒有找到." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "幫助節點 %s%s%s 沒有幫助資料庫" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "沒有找到 %s 的行 %d, 列 %d 的 %s 的相關幫助." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "沒有有效的幫助節點" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "未找到幫助" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: 沒有註冊" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "幫助選擇器錯誤" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "幫助類型 %s%s%s 沒有檢視器" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "幫助檢視器錯誤" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "未找到幫助檢視器" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "高亮" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "高亮文字" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX 圖示資源" #: lclstrconsts.rsicon msgid "Icon" msgstr "圖示" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "圖示圖像不能為空" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "圖示圖像必須有相同的格式" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "不能改變圖示圖像的格式" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "圖示圖像必須有同樣的大小" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "不能改變圖示圖像的大小" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "圖示有不正確的圖像" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非作用中邊框" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非作用中標題" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非作用中標題" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s 索引 %d 超出範圍 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "單元格索引超過範圍[列=%d 行=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "資訊底色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "資訊文字" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "插入" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "無效日期: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "無效日期: %s。 必須在 %s 和 %s 之間" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "無效窗體流對象" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "無效屬性值" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "無效流格式" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s 已經與 %s 相關聯" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "橙" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "list 索引超過限制 (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "列表必須為空" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "中止" #: lclstrconsts.rsmball msgid "&All" msgstr "所有 &A" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "取消" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "關閉 &C" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "幫助 &H" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "忽略 &I" #: lclstrconsts.rsmbno msgid "&No" msgstr "否 &N" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "全部選否" #: lclstrconsts.rsmbok msgid "&OK" msgstr "確定 &O" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "打開 &O" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "重試 &R" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "儲存 &S" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "解開/不鎖定 &U" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "是 &Y" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "全部選是 &A" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "中灰色" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "目錄欄" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "目錄" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "目錄高亮" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "目錄文字" #: lclstrconsts.rsmodified msgid " modified " msgstr "已更改" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "錢青色" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "確認" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "自定義" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "錯誤" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "資訊" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "深藍色" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "下一個" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "無" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "不是有效的網格檔案" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "沒有視窗部件集合對象,請檢查單元 \"interfaces\" 是否已添加到程式的uses語句中。" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "橄欖色" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "選擇日期" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "位圖" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "便攜黑白位圖" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "便攜灰度位圖" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "便攜網絡圖片(PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "便攜位圖" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "張貼" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s確定忽略但資料有遺失的風險。%s取消則終止程式." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "優先" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "屬性 %s 不存在" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "紫色" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "處理更新時候不能儲存圖片" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "紅色" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "更新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "替換" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "替換所有" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "未找到資源 %s" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "滾動欄" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "滾動欄屬性超出範圍" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "選擇顏色" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "選擇字體" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "銀色" #: lclstrconsts.rssize msgid " size " msgstr "大小" #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "天藍色" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "青色" #: lclstrconsts.rstext msgid "Text" msgstr "文字" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "無法裝載預設值字體" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知錯誤, 請報告這個錯誤" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "未知圖形檔案副檔名" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "未支援的圖檔格式" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "未支援的剪貼格式: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "白色" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "僅整個單詞" #: lclstrconsts.rswin32error msgid "Error:" msgstr "錯誤:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "視窗" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "視窗框架" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "視窗文字" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "黃色" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "不能聚焦於無法聚焦或者不可見的視窗" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "重複的目錄" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "無效的建立動作" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "無效列舉行為" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "無效的註冊行為" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "無效的取消註冊行為" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "\"%s\" 指定的字符集無效!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "無效圖像大小" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "無效 ImageList 索引" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "目錄索引超過範圍" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "MenuItem 為 nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "子目錄不在目錄中" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "下" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "左" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "右" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "上" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "沒有 MDI 窗體出現" #: lclstrconsts.snotimers msgid "No timers available" msgstr "無有效計時器" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "錯誤的標識符類型:期望 %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "無效的浮點數:%s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "無效的整數:%s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(在 %d,%d, 流偏移 %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "未結束的字節值" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "未結束的字符串" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "錯誤的標識符:期望 %s 但是找到了 %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "錯誤的標識符類型:期望 %s 但是找到了 %s" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.nl.po�����������������������������������������������������0000644�0001750�0000144�00000125376�12516753065�020607� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2007-10-03 22:04+0100\n" "Last-Translator: fer <connect37@yopmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s niet uitvoerbaar" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s niet gevonden" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Fout tijdens uitvoeren van %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Geen HTML browser kunnen vinden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "Geen HTML browser gevoden.%sBepaal een in Gereedschappen -> Opties -> Help -> Help opties" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "De help database %s%s%s heeft bestand %s%s%s niet kunnen vinden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "De macro %s in BrowserParams zal worden vervangen door de URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accepteer" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "toepassing sleutel" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Annuleer" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Hoofdletter" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Wissen" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Controleer" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converteer" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Verwijder" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Neer" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Eind" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Voer uit" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Laatste" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Voeg in" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Muisknop Links" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Links" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "linker Windows toets" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Muisknop midden" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modus wijziging" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Volgend" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Niet converteren" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Nummeriek deel %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pauze toets" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Druk af" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Voordien" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Muisknop Rechts" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Return" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Rechts" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "rechter windows toets" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Schuif" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecteer" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snapshot" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Spatiebalk" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Onbekend" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Omhoog" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "kan %s niet uitvoeren" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "(filter)" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Bron %s is niet gevonden" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "programmabestand niet gevonden %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D donkere schaduw" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Een controle kan niet zijn eigen ouder zijn" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Actieve rand" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Actieve kop" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Alle bestanden (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Toepassing werkruimte" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Bureaublad" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Achteruit" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Zwart" #: lclstrconsts.rsblank msgid "Blank" msgstr "Spatie" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blauw" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Knop gezicht" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Knop highlight" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Knop schaduw" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Knop tekst" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Rekenmachine" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Annuleer" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kan geen focus geven" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Er kan op het canvas niet getekend worden" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Kop tekst" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Hoofd/kleine letter gevoelig" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle van klassse '%s' kan geen controle van klasse '%s' als kind hebben" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Controle '%s' heeft geen oudervenster" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "'%s' ia geen oude van '%s'" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Crme" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Maak een fout die door gdb opgevangen kan worden" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Aangepast..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Standaard" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissies gebruiker groep grootte datum tijd" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Record verwijderen?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Verwijder" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Richting" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Directory" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Verankeren" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplikaat icoon formaat" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Bewerk" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Zoek gehele bestand" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fout" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Fout tijdens het maken van een DC voor %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "FOUT in LCL" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Er is een fout opgetreden in %s op %sAdres %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Fout tijdens lezen %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Fout tijdens opslaan bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Uitzondering" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Directory moet bestaan" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "De directory \"%s\" bestaat niet." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Het bestand \"%s\" bestaat al. Overschrijven?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Bestand moet bestaan" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Het bestand \"%s\" bestaat niet." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Het bestand \"%s\" kan niet geschreven worden." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Kan bestand niet schrijven" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Bestand opslaan als" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Open een bestaand bestand" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Bestand overschrijven?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Het pad moet bestaan" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Het pad \"%s\" bestaat niet." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Kies directory" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(bestand niet gevonden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Bestandsinformatie" #: lclstrconsts.rsfind msgid "Find" msgstr "Vind" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Vind meer" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Eerst" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols kan niet >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows kan niet >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Vorm" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "Vorm bron %s niet gevonden. Voor bronloze vormen moet CreateNew constructor gebruikt worden. Zie de globale variabele RequireDerivedFormResource." #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "\"%s\" fout: %s bij het streamen van form." #: lclstrconsts.rsforward msgid "Forward" msgstr "Vooruit" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Zet bepaalde GDK trace/debug berichten aan." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-feen-debug flags Zet bepaalde GDK trace/debug berichten uit." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "GIF (Graphics Interchange Format)" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatale-waarschuwingen De applicatie stop bij waarschuwingen en fouten gegenereerd door GtK+/GDK." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Hellingshoek actieve kop" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Hellingshoek inactieve kop" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafisch" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grijs" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Grijze tekst" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Groen" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Rasterlijnbestand bestaat niet" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Rasterlijn-index buiten bereik" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "De GroupIndex kan niet minder zijn dan de GroupIndex van een vorig item." #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Geschiedenis:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class klassenaam Volgens de Xt conventies, is de klasse van een programma de naam van dat programma met de eerste letter als hoofdletter. Bijv. the klassenaam voor gimp is \"Gimp\". Als de --class optie is meegegeven, wordt de klasse van het programma gezet op \"klassenaam\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Zet bepaalde GtK+ trace/debug berichten aan." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Start het programma op de genoemde X server, waarbij \"h\" de hostnaam is, \"s\" het nummer van de server (meestal 0), en \"d\" is het display nummer (vaak weggelaten). Als --display niet is meegegeven, wordt de DISPLAY omgevings variabele gebruikt." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Laad de betreffende module tijdens het starten." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Stelt programmanaam in op \"progname\". Indien niet opgegeven, zal programmanaam ingesteld worden op ParamStrUTF8(0)." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Zet bepaalde GtK+ trace/debug berichten uit." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Zet geen overdraagbare volgorde voor modale schermen" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Maak geen gebruik van de X Shared Memory Extensie." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Roep XSynchronize (display, True) aan na verbinding met de Xserver. Dit maakt het debuggen van X protocol fouten eenvoudiger, doordat X aanvragen buffering uitstaat en X fouten direct ontvangen worden nadat de aanvraag door de Xserver is behandeld." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Reeds vastgelegd" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Een help database was gevonden voor dit onderwerp, maar dit onderwerp was niet gevonden" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Er is heen help database genstalleerd voor dit onderwerp" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Help fout" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Help context %s niet gevonden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Help context %s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Help database %s%s%s heeft geen viewer gevonden voor helppagina van type %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Help database %s%s%s niet gevonden" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "Help voor instructie %s%s%s niet gevonden" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "Help voor instructie %s%s%s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Help sleutelwoord %s%s%s niet gevonden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Help sleutelwoord %s%s%s niet gevonden in database %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Help node %s%s%s heeft geen help database" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Geen help gevonden voor regel %d, kolom %d van %s. " #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Geen help voor dit item beschikbaar" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Help voor dit item niet gevonden" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Niet vastgelegd" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Help selectie fout" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Er is geen viewer voor help type %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Help viewer fout" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Help viewer niet gevonden" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Highlight" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Highlight tekst" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Hotlight" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X icoon" #: lclstrconsts.rsicon msgid "Icon" msgstr "Icoon" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Icoon afbeelding kan niet leeg zijn" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Icoon afbeelding moet hetzelfde formaat hebben" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kan formaat icoon afbeelding niet wijzigen" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Icoon afbeelding moet dezelfde grootte hebben" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kan grootte icoon afbeelding niet wijzigen" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Icoon heeft geen huidige afbeelding" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inactieve rand" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inactieve kop" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inactieve kop" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d valt buiten de grenzen 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index buiten de grenzen Cell[Col=%d Ro=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Info achtergrond" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Info tekst" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Voeg in" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Ongeldige datum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ongeldige datum: %s. Het moet liggen tussen %s en %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Ongeldige form objectstream" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ongeldige eigenschap waarde" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Omgeldig stream format" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s is al verbonden met %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG (Joint Picture Expert Group)" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Laatste" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citroengeel" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Lijst index overschrijdt grenzen (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Lijst moet leeg zijn" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kastanjebruin" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Afbreken" #: lclstrconsts.rsmball msgid "&All" msgstr "&Alles" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Annuleer" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Sluiten" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Help" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Negeer" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nee" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Nee op alles" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Open" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Opnieuw" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Opslaan" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Deblokkeer" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ja op &alles" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Medium grijs" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menubalk" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menu highlight" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menu tekst" #: lclstrconsts.rsmodified msgid " modified " msgstr " gewijzigd " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Geldgroen" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Verificatie" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bevestiging" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Aangepast" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fout" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informatie" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Waarschuwing" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marine blauw" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Volgende" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Geen" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Geen geldig rasterlijnbestand" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Geen widgetset object. Controleer of the unit \"interface\" is toegevoegd aan de \"uses\" van het programma." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olijfgroen" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Kies een datum" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "PBM (Portable BitMap)" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "PGM (Portable GrayMap)" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG (Portable Network Graphic)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PPM (Portable PixMap)" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Post" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sDruk op OK om te negeren, hierbij kunnen gegevens verloren gaan.%sDruk op Annuleren om het programma te annuleren." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorige" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "Geheugensteun bij vervangen" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Eigenschap %s bestaat niet" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Paars" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (alleen onder X11), lopen onder een debugger kan een impliciete -nograb, gebruik -dograb om te overrulen. Benodigd QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem param, stelt de te gebruiken backend in voor on-screen widgets en QPixmaps. Beschikbare opties zijn inheems, raster en opengl. OpenGL is nog onstabiel." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, zegt QT dat deze nooit de muis of het toetsenbord moet grijpen. Benodigd QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, stelt de toepassing's layout richting in naar QT::RightToLeft." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session session, herstelt de toepassing naar een eerdere sessie." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (only under X11), schakelt naar synchroon modus voor debugging." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg or -background color, stelt de standaard achtergrondkleur en een toepassingpalet (lichte en donkere schaduwen zijn berekend) in" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn or -button color, stelt de standaard knopkleur in." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, zorgt ervoor dat de toepassing een persoonlijke kleurmap installeert op een 8-bit scherm." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display display, stelt het X beeld in (standaard is $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg or -foreground color, stelt de standaard voorgrondkleur in." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn or -font font, bepaalt het toepassingslettrtype. Het lettertype moet opgegeven worden met gebruik van een X ligische lettertypeomschrijving." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometry, stelt de client geometrie in van het eerste getoonde venster" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, stelt de input methode server in "(gelijk aan instelling XMODIFIERS omgevingsvariabele). #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name name, stelt de toepassingsnaam in" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title title, stelt de toepassings titel in." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, forceert de toepassing een TrueColor visueel te gebruiken op een 8-bit beeld." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Einde update omdat geen update bezig is" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kan afbeelding niet opslaan omdat update bezig is" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kan niet beginnen met updaten als alleen canvas update bezig is" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rood" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Ververs" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Vervang" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Vervang alles" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Bron %s niet gevonden" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Schuifbalk" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Schuifbalk eigenschap buiten bereik" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Kies een kleur" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Kies een font" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Zilver" #: lclstrconsts.rssize msgid " size " msgstr " grootte " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Hemelsblauw" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "Een controle met tabs" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Blauwachtig groen" #: lclstrconsts.rstext msgid "Text" msgstr "Tekst" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF (Tagged Image File Format)" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "Panel" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "Een handvat om te controleren hoeveel ruimte te geven aan twee delen van een gebied." #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "Een items-boom" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kan het standaard lettertype niet laden" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Onbekende fout, rapporteer deze fout" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Onbekende extensie voor afbeelding" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Onbekend afbeeldingsformaat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Niet ondersteund bitmap formaat." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Niet ondersteund klembord formaat: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " WAARSCHUWING: Er zijn nog %d DCs niet vrijgegeven, een gedetailleerde dump volgt:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " WAARSCHUWING: Er zijn nog %d GDIObject niet vrijgegeven, een gedetailleerde dump volgt:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " WAARSCHUWING: Er staan nog %d berichten in de queue! Deze worden nu vrijgegeven" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " WAARSCHUWING: Er zijn %d TimerInfo structuren overgebleven. Deze worden nu vrijgegeven" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " WAARSCHUWING: Er zijn %s LM_PAINT/LM_GtkPAINT berichten niet verwijderd." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Wit" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Alleen hele woorden" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fout:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Waarschuwing:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Venster" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Vensterrand" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Venstertekst" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Geel" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kan geen focus geven aan een onzichtbaar of uitgeschakeld scherm" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Dubbele menu's" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ongeldige actie aangemaakt" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ongeldige actie opsomming" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ongeldige actie registratie" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ongeldige actie de-registratie" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "De karakterset in masker \"%s\" is ongeldig!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ongeldig afbeeldingsformaat" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ongeldige index van ImageList index" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "De huidige tekst komt niet overeen met het opgegeven masker" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menu index buiten de grenzen" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menu item is nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu niet in menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Neer" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Eind" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Links" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Rechts" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Spatie" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Omhoog" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Geen MDI formulier aanwezig" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Geen timers beschikbaar" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Verkeerd genomen type: %s verwacht" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ongeldig floating nummer: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ongeldig integer nummer: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (op %d,%d, stream offset %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Niet klare byte waarde" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Niet klare string" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Verkeerd genomen symbool: %s verwacht maar %s gevonden" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Verkeerd genomen type: %s verwacht maar %s gevonden" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.fi.po�����������������������������������������������������0000644�0001750�0000144�00000102267�12250635767�020571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "" #: lclstrconsts.ifsalt msgid "Alt" msgstr "" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Hyväksy" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Kaikki tiedostot (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Taaksepäin" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "" #: lclstrconsts.rsblank msgid "Blank" msgstr "" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Laskin" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Sama kirjainkoko" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "" #: lclstrconsts.rscursor msgid "Cursor" msgstr "" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "oikeudet käyttäjä ryhmä koko päivä aika" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Suunta" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "" #: lclstrconsts.rsdocking msgid "Docking" msgstr "" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "" #: lclstrconsts.rsexception msgid "Exception" msgstr "" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Tiedosto täytyy olla olemassa" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Tiedostoa \"%s\" ei ole olemassa." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Tallenna nimellä" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Avaa tiedosto" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Tallennetaanko vanhan päälle ?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Valitse kansio" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(tiedostoa ei löytynyt: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Tiedoston tietoja" #: lclstrconsts.rsfind msgid "Find" msgstr "Etsi" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols ei voi olla suurempi kuin kaikkien sarakkeiden määrä (ColCount)" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows ei voi olla suurempi kuin kaikkien rivien määrä (RowCount)" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "" #: lclstrconsts.rsforward msgid "Forward" msgstr "Eteenpäin" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Suodatus:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historia:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "" #: lclstrconsts.rsicon msgid "Icon" msgstr "" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Ideksi osoittaa taulukon ulkopuolella olevaa solua [saraketta(col)=%d ja riviä(row)=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Laiton päivämäärä: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Keskeytä" #: lclstrconsts.rsmball msgid "&All" msgstr "Kaikki" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Peru" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Sulje" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ohje" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "Ohita" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ei" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ei kaikkiin" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "Uudelleen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Kyllä" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Kyllä, kaikki" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "" #: lclstrconsts.rsmodified msgid " modified " msgstr " muokattu " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Vahvistus" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Virhe" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informaatio" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Varoitus" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Valitse päivä" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPaina 'Ok'-näppäintä jos haluat ohittaa varoituksen ja ottaa riskin tietojen (datan) sekoamisesta.%sPaina 'Peru'-näppäintä poistuaksesi ohjelmasta." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Etsi ja korvaa" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Korvaa kaikki" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Valitse väri" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Valitse fontti" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "" #: lclstrconsts.rssize msgid " size " msgstr " koko " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "" #: lclstrconsts.rstext msgid "Text" msgstr "Teksti" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Etsi vain kokonaisia sanoja" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Virhe:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Varoitus:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "" #: lclstrconsts.snotimers msgid "No timers available" msgstr "" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr "" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.tr.po�����������������������������������������������������0000644�0001750�0000144�00000130771�12250635767�020621� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Last-Translator:Ahmet Çağlar <ahmetcaglar111@hotmail.com>\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2013-08-11 00:06+0200\n" "Language-Team: \n" "MIME-Version: 1.0\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Tarayıcı %s%s%s çalıştırılabilir değil." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Tarayıcısı %s%s%s bulunamadı." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Yürütülürken hata oluştu %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML tarayıcı bulunamıyor." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Yardım veritabanı %s%s%s dosyası bulamadı %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "TarayıcıDeğişkenleri içindeki %s makro(komut dizisi) URL ile değiştirilecek." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Kabul et" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "uygulama tuşu" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Geri Al" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "İptal" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Büyük harf" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Temizle" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Denetim" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Dönüştür" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Sil" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Aşağı" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Bitiş" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Çık" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Çalıştır" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Son" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Yardım" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Başa git" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Ekle" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Sol fare düğmesi" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Sol" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Sol pencere tuşu" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "fare orta düğmesi" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modu Değiştir" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Sonraki" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Dönüştürülmez" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Sayısal tuş takımı %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Durdurma tuşu" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Yazdır" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Önceki" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Sağ fare düğmesi" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Giriş" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Sağ" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "sağ pencere tuşu" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Kaydırma" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Seçim" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Üstkarakter" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Anlık görüntü" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Boşluk tuşu" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Sekme" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Bilinmeyen" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Yukarı" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "yürütemez" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Kaynak %s bulunamadı" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "program dosyası bulunamadı %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D Koyu gölge" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D ışık" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Bir denetim, kendikendini üstdenetim(parent) olarak gösteremez" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Etkin kenarlık" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Etkin resim yazısı" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Tüm dosyalar (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Uygulama Çalışma Alanı" #: lclstrconsts.rsaquacolorcaption #, fuzzy #| msgid "White" msgctxt "lclstrconsts.rsaquacolorcaption" msgid "Aqua" msgstr "Beyaz" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Masaüstü" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Geriye" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmap resimleri" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Siyah" #: lclstrconsts.rsblank msgid "Blank" msgstr "Boş" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Mavi" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Düğme yüzü" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Düğme Vurgusu" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Düğme Gölgesi" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Düğme metni" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Hesap makinesi" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "İptal" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Odaklanamıyor" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Tuval(canvas) çizmeye izin vermiyor" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Resim yazısı metni" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Büyük/küçük harfe duyarlı" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Sınıfın denetimini '%s' bir alt sınıf '%s' kontrol edemez" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Hiçbir üst pencere '%s' denetimi yok" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krem rengi" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "gdb (hata ayıklama) yakalanabilir yaratma hatası:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "İmleç" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Özel" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Varsayılan" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "kullanıcı grup boyut tarih zaman izinleri" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Kayıt silinsin mi?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Sil" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Yön" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Dizin" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Yerleştir" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Çift simge biçimi" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Düzenle" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Tüm dosya ara" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Hata" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "için aygıt içerik oluşturma hatası %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL'de HATA:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Adres Çerçeve %s de %s Hata %s%s oluştu %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Okunurken hata %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Bitmap verisini kaydederken hata." #: lclstrconsts.rsexception msgid "Exception" msgstr "İstisna" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Dizin mevcut olmalıdır" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Dizin \"% s\" mevcut değil." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Bu dosya \"%s\" zaten var. Üzerine yazılsın mı?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Dosya mevcut olmalıdır" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Bu dosya \"%s\" mevcut değil." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Bu dosya \"%s\" yazılabilir değil." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Dosya yazılabilir değil" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Dosyayı farklı kaydet" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Var olan dosyayı aç" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Dosyanın üzerine yazılsın mı?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Yol var olmak zorunda" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Bu yol \"%s\" mevcut değil." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Dizin seç" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(dosya bulunamadı: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dosya bilgisi" #: lclstrconsts.rsfind msgid "Find" msgstr "Bul" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Daha fazla bul" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "İlk" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "Sabit Sütunlar olamaz >= Sütun sayısı" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "Sabit satır olamaz >= Satır sayısı" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Biçim" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Biçim akışı \"%s\" hatası: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "İleri doğru" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuşya(eflatun)" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-hata ayıklama göstergeleri GDK'ya özgü izleme/hata ayıklama iletilerini açar." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "-gdk-hata ayıklama göstergelerini gösterme GDK'ya özgü izleme/hata ayıklama iletilerini kapatır." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Grafik Değişim Biçimi" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-Önemli-uyarılar Gtk+/GDK tarafından üretilen hatalar ve uyarılar uygulamayı sonlandıracak." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Etkin Alt başlık geçişi" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Etkin olmayan Alt başlık geçişi" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gri" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Gri metin" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Yeşil" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Izgara dosyası mevcut değil" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Izgara dizini sınırın dışında." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "Grupdizin değeri, önceki menü bileşeninin Grupdizin değerinden az olamaz" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Süzgeç:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Geçmiş:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--sınıf sınıfadı Bir programın sınıfı büyük harfle başlayan program adıyla aynı ise, Xt geleneklerini izler. Örneğin, gimp için sınıf adı \"Gimp\". Eğer --sınıf belirtilmişse, program sınıfı \"sınıfadı\" olacak şekilde ayarlanacaktır." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-hata ayıklama göstergeleri Gtk+'a özgü izleme/hata ayıklama iletilerini açar." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--gösterici h:s:d Belirtilen X sunucusuna bağlanır, \"h\" bilgisayar adı, \"s\" sunucu numarası (genellikle 0), ve \"d\" ekran numarasıdır (genellikle yazılmaz). Eğer --gösterici belirtilmezse, GÖSTERİCİ ortam değişkeni kullanılır." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-Modül modül Belirtilen modülü başlangıçta yükler." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--Program adı Program adı olarak ayarlayın \"progname\".Eğer belirtilmezse,Program adı StrUTF8(0) değişkenine ayarlanır." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-hayır-hata ayıklama işaretleri Gtk+'a özgü izleme/hata ayıklama iletilerini kapatır." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-hayır-geçici Kalıcı formlar için geçici komut ayarlı değil" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--hayır-xshm X paylaşımlı bellek genişletmesini kullanmayı kapatır." #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Xserver bağlantısı sağlandıktan sonra Xeşzamanlama (Gerçek,görüntü) işlevini çağırır. Bu X protokol hatalarını ayıklamayı kolaylaştırır, çünkü X istek tamponlama kapalı olacaktır ve X hataları hata oluşturan protokol isteği X sunucu tarafından işlendikten hemen sonra alınacaktır." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Zaten kaydedilmiş" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Yardım bağlamı bulunamadı" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Yardım veritabanı bulunamadı" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Yardım hatası" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Yardım bağlamı %s bulunamadı." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Yardım bağlamı %s veritabanı içinde bulunamadı %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr " Yardım veritabanı %s%s%s türündeki yardım sayfası için bir görüntüleyici bulamadı %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "%s%s%s Yardım veritabanı bulunamadı" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "%s%s%s yardım anahtar sözcüğü bulunamadı." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "%s%s%s Yardım anahtar sözcüğü %s%s%s veritabanı içinde bulunamadı." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "%s%s%s yardım düğümü yardım veritabanına sahip değil" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "%s'nin satır %d, sütun %d için yardım bulunamadı." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Kullanılabilir yardım düğümü yok" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Yardım bulunamadı" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: kaydedilmemiş" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Yardım seçici hatası" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "%s%s%s yardım türü için bir görüntüleyici yok" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Yardım görüntüleyici hatası" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Yardım görüntüleyici bulunamadı" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Vurgula" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Metni vurgula" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Güçlü Vurgula" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX Simge Kaynağı" #: lclstrconsts.rsicon msgid "Icon" msgstr "Simge" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Simge görüntüsünü boş olamaz" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Simge görüntüsü aynı biçimde olmalıdır" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Simge görüntüsünün biçimini değiştiremezsiniz" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Simge görüntüsü aynı boyutta olmalıdır" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Simge resminin boyutunu değiştiremezsiniz" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Hiçbir geçerli görüntü simgesi yok" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Etkin olmayan kenarlık" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Etkin olmayan renk resim yazısı" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Etkin olmayan resim yazısı" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Dizin %d sınırların dışında 0.. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Dizin hücre aralıği dışında Cell[Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Arkapalan bilgisi" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Metin bilgisi" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Ekle" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Geçersiz tarih : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Geçersiz tarih : %s. %s ve %s arasında olmalı" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "Geçersiz Biçim nesnesi akışı" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Geçersiz özellik değeri" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Geçersiz akış biçimi" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s zaten %s ile birleştirilmiş durumda" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Ortak resim uzman grubu" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Sonuncu" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Açık yeşil" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Liste dizini sınırları aşıyor (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Liste boş olmak zorunda" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kestane rengi" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Vazgeç" #: lclstrconsts.rsmball msgid "&All" msgstr "Tümü" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "İptal" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "Kapat" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Yardım" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Yoksay" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Hayır" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Tümüne hayır" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Tamam" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "Aç" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Tekrar dene" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "Kaydet" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "Kilidi aç" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Evet" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Tümüne evet" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Orta gri" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menü çubuğu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menüyü Vurgula" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menü metni" #: lclstrconsts.rsmodified msgid " modified " msgstr " değiştirilmiş " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Para yeşili" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Kimlik Doğrula" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Onayla" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Özel" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Hata" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Bilgi" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Uyarı" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Lacivert" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Sonraki" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Hiçbiri" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Geçerli bir ızgara dosyası değil" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Parçacık nesnesi yok. Lütfen \"arayüzleri\" biriminin programın kullanır bölümüne eklenip eklenmediğini denetleyin." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Zeytin yeşili" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Bir tarih seç" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Piksel haritası" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Taşınabilir BitMap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Taşınabilir GrayMap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Taşınabilir ağ grafiği" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Taşınabilir PixMap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Postala" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #, fuzzy #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%s Yoksaymak ve verinin bozulması riskiyle devam etmek için Tamam'a basın. %s Programı sonlandırmak için İptal'e basın." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Önceki" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Özelliği %s mevcut değil" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Mor(erguvan)" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-yakalama (Sadece altında X11),yakalayamamaya bir hata ayıklayıcı altında çalışan örtülü içerik neden olabilir,kullanın - geçersiz kılmak için yakala.onarmak için (QT_DEBUG)ihtiyaç var." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-grafiksistemdeğişkenleri,ekranda kullanılmak üzere arka uç ayar grafik bileşenleri ve QPixmaps.Yerel kullanılabilir seçenekler,tarama örüntüsü ve opengl.OpenGL hala kararsız." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-yakalama yok,QT bunu asla yakalayamadığını fare veya klavye gerektiğini söyler. QT_DEBUG lazım." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-tersine, Qt::RightToLeft için uygulamanın düzeni yönünü ayarlar" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-Oturum oturum, uygulamayı bir önceki oturumdan yükler." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-Tarzı tarzı veya -tarzı=tarzı,uygulama grafik stilini ayarlar.Olası değerler motifi mümkündür,pencere,ve platin.eğer ek tarzla ile Qt derlenmiş ise veya ek olarak tarz eklentileri varsa bunlar tarzlar komut satırı seçeneğinde sunulacak.NOT:Tüm tarzlar tüm platformlarda mevcut.Tarz değişkenleri(parametreler) yoksa Qt bir uygulama başlatacak Varsayılan ortak stil ile (pencereler)." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-tarzsayfası tarzsayfası veya -tarzsayfası=tarzsayfası, tarzsayfası uygulama ayarları.Bu değer için bir yol, Stil sayfasını içeren dosya yolu olmalıdır. Not: Bağıntılı Stil sayfası URL'leri dosya şuna bağlıdır Stil sayfası dosyasının yoluna" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-senkronize (Sadece altında X11), hata ayıklama için eşzamanlı moduna geçer" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-grafikbileşen sayısı hata ayıklama iletisi sonunda yazdırır, bozulmamış grafik bileşen sonu hakkında ve en fazla sayıda grafik bileşen aynı anda var." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg veya arka plan rengi,varsayılan arka plan rengini ayarlar ve bir uygulama paleti (açık ve koyu tonları hesaplanır)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn veya -buton rengi, varsayılan düğme rengini ayarlar." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, uygulama 8-bitlik bir ekranda özel bir renk haritası yüklemeye neden olur." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-ekran ekran,x ekran ayarları ($EKRAN varsayılandır)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg veya -ön plan rengi, Varsayılan ön plan rengini ayarlar." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn veya -yazı tipi yazı tipi, Uygulama yazı tipini tanımlar.Yazı tipi bir X mantıksal bir yazı tipi açıklaması kullanılarak belirtilmelidir." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometri geometri,gösterilen ilk pencerenin geometrisini istemci ayarlar." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, sunucuya giriş yöntemi ayarları\"(X DEĞİŞTİRİCİLER ortam değişkeni ayarına eşdeğerdir" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-giriştarzı,nasıl girileceğini tanımlar verilen grafik bileşen içine eklenir,Örneğin Nokta üzerindeki giriş grafik bileşenin doğrudan görünmesini sağlar,Nokta üzerinde giriş görünmesini sağlar iken grafik bileşen üzerinde kayan bir kutu ve düzenleme bitene kadar eklenmez." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "adı adı, Uygulama adı ayarları" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-nsutunları sayısı,Ayrılmış renklerin sayısını sınırlar 8-bitlik ekranda bir renkli küp, eğer uygulama Q Uygulama kullanıyorsa:Birçok renk renk belirtimi.eğer 216 sayısı daha sonra ise, 6x6x6 bir renk küpün kullanıldığı(Yani 6 seviye kırmızı, 6 yeşil ve 6 mavi);diğer değerler için,bir küp yaklaşık 2 x 3 x 1 küp ile orantılı kullanılır." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-başlık başlık, Uygulama başlığı ayarlar." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-görsel GerçekRenk, gerçekrenkli görüntü 8 bit görüntü üzerinde kullanmak için uygulamayı zorlar." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Güncelleştirme yapılırken sonlandı, devam etmeyen bir güncelleştirme" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Güncelleştirme devam ederken görüntü kaydedemezsiniz" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Tümünü güncelle,tuval(canvas) güncellemesi devam ettiğinden başlayamaz" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Kırmızı" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Yenile" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Değiştir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Tümünü değiştir" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "adlı kaynak %s bulunamadı" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Kaydırma çubuğu" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Kaydırma çubuğu özelliği sınırın dışında" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Renk seç" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Yazıtipi seç" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Gümüş" #: lclstrconsts.rssize msgid " size " msgstr " boyut " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Gök mavisi" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Deniz mavisi" #: lclstrconsts.rstext msgid "Text" msgstr "Metin" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Etiketli Resim dosyası biçimi" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Varsayılan yazıtipi yüklenemiyor" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Bilinmeyen hata, lütfen bu hatayı bildirin" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Bilinmeyen resim genişletmesi" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Bilinmeyen resim biçimi" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Desteklenmeyen bitmap biçimi." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Desteklenmeyen pano biçimi: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " UYARI: serbest %d bırakılmamış DCs var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " UYARI: serbest %d bırakılmamış GDINesne var, ayrıntılı döküm aşağıda:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " UYARI: Kuyrukta %d mesaj kaldı! Onları serbest bırak" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " UYARI: Saat Bilgisi %d yapısı kaldı, onları serbest bırak" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " UYARI: kaldırılmamış %s LM_PAINT/LM_GtkBOYA mesaj bağlantısı kaldı." #: lclstrconsts.rswhitecolorcaption msgctxt "lclstrconsts.rswhitecolorcaption" msgid "White" msgstr "Beyaz" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Yalnızca tam sözcükler" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Hata:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Uyarı:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Pencere" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Pencere çerçevesi" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Pencere metni" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Sarı" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Etkisizleştirilmiş ya da görünmez pencerelere odaklanılamaz" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Birbirinin aynı menüler" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Geçersiz eylem yaratma" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Geçersiz eylem sayımı" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Geçersiz eylem kaydı" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Geçersiz eylem kayıt silme işlemi" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "maskede \"%s\" ile gösterilen karakter geçerli değil!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Geçersiz görüntü boyutu" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Geçersiz GörüntüListesi dizini" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menü dizini sınırın dışında" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menüöğesi yok" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Alt-menü, menü içinde değil" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "" #: lclstrconsts.smkcdel msgid "Del" msgstr "" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Aşağı" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Bitiş" #: lclstrconsts.smkcenter msgid "Enter" msgstr "" #: lclstrconsts.smkcesc msgid "Esc" msgstr "" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Başa git" #: lclstrconsts.smkcins msgid "Ins" msgstr "" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Sol" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Sağ" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Sekme" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Yukarı" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "MDI Pencere mevcut değil." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Kullanılabilir zamanlayıcı yok" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Yanlış belirteç tipi: % s bekleniyor" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Geçersiz kayan nokta sayısı: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Geçersiz tamsayı: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (at %d,%d, Akış uzaklığı %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Sonlandırılmamış bayt değeri" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sonlandırılmamış dizgi" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Yanlış simge sembolü: %s bekleniyor ama %s bulundu" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Yanlış tip sembolü: %s bekleniyor ama %s bulundu" �������doublecmd-0.7.1/language/lcl/lclstrconsts.pb.po�����������������������������������������������������0000644�0001750�0000144�00000130317�12250635767�020571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Marcelo Borges de Paula\n" "Language-Team: \n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Navegador %s%s%s não é executável" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Navegador %s%s%s não encontrado" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Erro ao executar %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Impossível encontrar um navegador \"HTML\"." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "O banco de dados de ajuda %s%s%s não pôde encontrar o arquivo %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "A macro %s em \"BrowseParams\" será substituída pela URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Aceitar" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "tecla da aplicação" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "\"Backspace\"" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Maiúscula" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Limpar" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Control" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Converter" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Excluir" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Abaixo" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Executar" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Ajuda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Inserir" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Botão Esquerdo do Mouse" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Esquerda" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "tecla windows esquerda" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Botão Central do Mouse" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menu" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modo Alterar" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Próximo" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Não converter" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numpad %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Tecla Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Imprimir" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Anterior" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Botão Direito do Mouse" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Retorno" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Direita" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "tecla windows direita" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rolar" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Selecionar" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Instantâneo" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Tecla espaço" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Desconhecido" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Acima" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "impossível executar %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "arquivo programa não encontrado %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Sombra escura 3D" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "Luz 3D" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Um controle não pode ter ele mesmo como pai" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Borda Ativa" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Rótulo Ativo" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Todos os arquivos (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Espaço de trabalho Aplicação" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Ciano" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Área de trabalho" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Atrás" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Preto" #: lclstrconsts.rsblank msgid "Blank" msgstr "Em Branco" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Azul" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Face Botão" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Realce Botão" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Sombra Botão" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Texto Botão" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Calculadora" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Impossível focar" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas não permite desenho" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Texto Rótulo" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Diferenciar maiúsc./minúsc." #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Controle de classe '%s' não pode ter controle de classe '%s' como filho" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Controle '%s' não possui janela pai" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Creme" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Criando erro \"gdb\" capturável:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Cursor" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Personalizado ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Padrão" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "permissões grupo usuário, tamanho, data, hora" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Excluir registro?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Excluir" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Direção" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Diretório" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Aportar" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Duplicar formato ícone." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Editar" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Localizar em todo o arquivo" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Erro" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Erro na criação do dispositivo de contexto para %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "ERRO na LCL: " #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Erro ocorrido em %s no %sEndereço %s%s Quadro %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Erro na leitura %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Erro ao salvar \"bitmap\"." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exceção" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Diretório deve existir" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "O diretório \"%s\" não existe." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "O arquivo \"%s\" já existe. Sobrescrever?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Arquivo deve existir" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "O arquivo \"%s\" não existe." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "O arquivo \"%s\" não é gravável." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Arquivo não é gravável" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Salvar arquivo como" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Abrir arquivo existente" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Sobrescrever arquivo?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Caminho deve existir" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "O caminho \"%s\" não existe." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Selecionar Diretório" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(arquivo não encontrado: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informação arquivo" #: lclstrconsts.rsfind msgid "Find" msgstr "Localizar" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Localizar mais" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Primeiro" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "\"FixedCols\" não pode ser >= \"ColCount\"" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "\"FixedRows\" não pode ser >= \"RowCount\"" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulário" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Fluxo formulário \"%s\" com erro: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Adiante" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Lilás" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Ativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Desativa mensagens GDK específicas rastreamento/depuração." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatar-warnings Avisos e erros gerados por Gkt+/GDK interromperá a aplicação." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Rótulo Gradiente Ativo" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Rótulo Gradiente Inativo" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Gráfico" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Cinza" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Texto Cinza" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Verde" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Arquivo de grade não existe" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Índice grade fora de faixa." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "\"GroupIndex\" não pode ser menor que um \"GroupIndex\" anterior dos itens de menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtro:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Histórico:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Seguindo convenções Xt, a classe do programa é o nome do programa com o caractere inicial em maiúsculo. Por exemplo, o nome de classe para gimp é \"Gimp\". Se \"--class\" for especificado, a classe do programa será definida para \"classname\"." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Ativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Conecta com o servidor X especificado, onde \"h\" é o nome do servidor, \"s\" é o número do servidor (normalmente 0), e \"d\" é o número da tela (tipicamente omitido). Se \"--display\" não for especificado, a variável de ambiente \"DISPLAY\" é usada." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module módulo Carregar o módulo especificado na inicialização." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name nomeprograma Define nome do programa para \"nomeprograma\". Se não especificado, nome do programa será definido para \"ParamStrUTF8(0)\"." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Desativa mensagens Gtk+ específicas rastreamento/depuração." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Não defina ordenação transiente para formulários modais" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Desativa uso da Extensão Compartilhada de Memória do X." #: lclstrconsts.rsgtkoptionsync #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Chama XSynchronize (display, True) após ser estabelecida a conexão com Xserver. Isto torna fácil a depuração de erros de protocolo do X, porque as solicitações de armazenamento do X serão desativadas e erros do X serão recebidos imediatamente, após as solicitações de protocolo que geraram os erros, tenham sido processadas pelo servidor X." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: já registrado" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Ajuda contextual não encontrada" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Banco de dados de ajuda não encontrado" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Erro na ajuda" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Ajuda contextual %s não encontrada." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Ajuda contextual %s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Banco de dados Ajuda %s%s%s não encontra visualizador para página de ajuda do tipo %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Banco de dados de ajuda %s%s%s não encontrado" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Palavra-chave Ajuda %s%s%s não encontrada." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Palavra-chave Ajuda %s%s%s não encontrada no banco de dados %s%s%s." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Nó ajuda %s%s%s não tem banco de dados ajuda" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nenhuma ajuda encontrada para a linha %d, coluna %d de %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Nenhum nó de ajuda disponível" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Ajuda não encontrada" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: não registrado" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Erro no seletor de ajuda" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Não ha visualizador para tipo ajuda %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Erro no visualizador de ajuda" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Visualizador de ajuda não encontrado" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Realçar" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Texto realçado" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Luz Quente" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Recurso de ícone OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ícone" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Imagem ícone não pode estar vazia" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Imagem ícone deve ter o mesmo formato" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Impossível alterar formato da imagem do ícone" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Imagem ícone deve ter o mesmo tamanho" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Impossível alterar tamanho da imagem do ícone" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ícone não tem imagem atual" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Borda Inativa" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Rótulo Inativo" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Índice %s fora dos limites 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Índice fora de faixa Célula[Col=%d Lin=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informações plano de fundo" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informações Texto" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Inserir" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Data Inválida : %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Data Inválida: %s. Deve estar entre %s e %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "fluxo de objeto de Formulário inválido" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Valor de propriedade inválido" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Formato fluxo inválido" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s já está associado com %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "\"Joint Picture Expert Group\"" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Último" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Limão" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Índice lista excede o limite (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Lista deve estar vazia" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Marrom" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abortar" #: lclstrconsts.rsmball msgid "&All" msgstr "&Todos" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Cancelar" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Fechar" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Ajuda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorar" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Não" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Não para todos" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Abrir" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Tentar novamente" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Salvar" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Destravar" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Sim" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Sim para &todos" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Cinza Médio" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Barra Menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menu" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Realce Menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Texto Menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " modificado " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Verde dinheiro" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autenticação" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Confirmação" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Personalizado" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Erro" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informação" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Aviso" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Azul marinho" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Próximo" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Nenhum" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Não é um arquivo de grade válido" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Nenhum objeto \"widgetset\". Favor verificar se a unidade \"interfaces\" foi adicionada à cláusula \"uses\" do programa." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliva" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Selecionar uma data" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "\"Pixmap\"" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "\"BitMap\" portátil" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "\"GrayMap\" portátil" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Gráfico Rede Portátil (PNG)" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "\"PixMap\" portátil" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Postar" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sPressione Ok para ignorar e correr o risco de corrupção de dados.%sCancelar para finalizar o programa." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Anterior" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Propriedade %s inexistente" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Roxo" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (apenas sob X11), executando sob um depurador pode causar um -nograb implícito, use -dograb para subrepor. Necessita QT_DEBUG." #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "parâmetro -graphicssystem, define a retaguarda para ser usada com \"widgest\" de tela e QPixmaps. Opções disponíveis são: \"native\",\"raster\" e \"opengl\". OpenGL ainda está instável." #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb, diz ao QT para nunca capturar o mouse ou teclado. Necessário QT_DEBUG." #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse, define a direção do \"layout\" da aplicação para Qt::RightToLeft (Direita para esquerda)." #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session sessão, restaura a aplicação de uma sessão anterior." #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style estilo ou -style=estilo, define o estilo do GUI da aplicação. Valores possíveis são \"motif\", \"windows\" e \"platinum\". Se você compilou o QT com estilos adicionais ou tem \"plugins\" de estilo adicionais, estes estarão disponíveis para a opção em linha do comando -style. NOTA: Nem todos os estilos estão disponíveis em todas plataformas. Se o parâmetro estilo não existir, QT iniciará a aplicação com um estilo comum padrão (\"windows\")." #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet folha-de-estilo ou -stylesheet=folha-de-estilo, define a Folha de Estilo da aplicação. O valor deve ser um caminho para o arquivo que contenha a folha de estilo. Nota: URLs relativas no arquivo de folha de estilo, são relativas para o caminho do arquivo de folha de estilo." #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (apenas sob X11), alterna para o modo síncrono para depuração." #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount, imprime mensagem de depuração no final sobre o número de \"widgets\" que sobraram sem ser destruídos e o número máximo de \"widgets\" co-existentes ao mesmo tempo." #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg ou -background color, define a cor de fundo padrão e a paleta da aplicação (sombreamento claro e escuro são calculados)." #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn ou -button color, define a cor padrão de botões." #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap, provoca a instalação de um mapa de cores reservado em uma tela de 8-bits." #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display tela, define a tela do X (padrão é $DISPLAY)." #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg ou -foreground color, define a cor padrão do primeiro plano." #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn ou -font fonte, define a fonte da aplicação. A fonte deve ser informada usando uma descrição lógica de fonte X." #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry geometria, define a geometria do cliente da primeira janela a ser mostrada." #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im, define o servidor de métodos de entrada (equivale a configurar a variável de ambiente XMODIFIERS)." #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle, define como as entradas são inseridas em um dado \"widget\", ex. \"onTheSpot\" faz a entrada aparecer diretamente no \"widget\", ao passo que \"overTheSpot\" faz a entrada aparecer em uma caixa flutuante sobre o \"widget\" e não é inserido até o término da edição." #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name nome, define o nome da aplicação." #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols contador, limita o número de cores alocadas no cubo de cores de uma tela 8-bits, se a aplicação estiver usando a especificação QApplication::ManyColor. Se o contador for 216 então um cubo de cor de 6x6x6 é usado (ou seja 6 níveis de vermelho, 6 de verde e 6 de azul); para outros valores, um cubo aproximadamente de 2x3x1 será usado." #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title título, define o título da aplicação." #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor, força a aplicação a usar um visual TrueColor em uma tela de 8-bits." #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "\"Endupdate\" sem nenhuma atualização em andamento" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Impossível salvar imagem durante atualização" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Impossível iniciar \"atualizar tudo\" durante atualização \"somente canvas\"" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Vermelho" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Atualizar" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Substituir" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Substituir todos" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Recurso %s não encontrado" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Barra de rolagem" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Propriedade da Barra de rolagem fora de faixa" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Selecionar cor" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Selecionar uma fonte" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Prata" #: lclstrconsts.rssize msgid " size " msgstr " tamanho " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Azul Celeste" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Verde Musgo" #: lclstrconsts.rstext msgid "Text" msgstr "Texto" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Formato Arquivo Imagem \"Tagged\"" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Impossível carregar fonte padrão" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Erro desconhecido, favor relatar esta falha" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Extensão da imagem desconhecida" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Formato imagem desconhecido" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Formato \"bitmap\" não suportado." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Formato aréa de transferência não suportado: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr " AVISO: Há %d \"DCs\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr " AVISO: Há %d \"GDIObjects\" não liberados, segue um despejo detalhado:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " AVISO: Há %d mensagens restantes na fila! Liberando." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr " AVISO: Há %d estruturas \"TimerInfo\" restantes. Liberando" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr " AVISO: Há %d, vínculos de mensagem \"LM_PAINT/LM_GtkPAINT\" não removidos, restantes." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Branco" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Somente palavras inteiras" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Erro:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Aviso:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Janela" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Quadro Janela" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Texto Janela" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Amarelo" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Impossível focar uma janela inativa ou invisível" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Duplicar menus" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Criação de ação inválida" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Enumeração de ação inválida" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Registro de ação inválida" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Desregistro de ação inválida" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "O conjunto de caracteres na máscara \"%s\" não é válido!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Tamanho de imagem inválido" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Índice \"ImageList\" inválido" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Índice Menu fora de faixa" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "\"MenuItem\" é nulo (nil)" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Submenu não está no menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Abaixo" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Esquerda" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Direita" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Espaço" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulação" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Acima" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nenhum formulário MDI presente." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nenhum temporizador disponível" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Tipo sílaba incorreta: %s esperado" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Número de ponto flutuante inválido: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Número inteiro inválido: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr "(em %s,%s, deslocamento fluxo %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Valor \"byte\" em aberto" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Sequência de caracteres em aberto" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Símbolo sílaba incorreto: %s esperado mas %s encontrado" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Tipo sílaba incorreto: %s esperado mas %s encontrado" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.ja.po�����������������������������������������������������0000644�0001750�0000144�00000145464�12601454423�020557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Kazunari Sekigawa <kazunari.sekigawa@gmail.com>\n" "Language-Team: Japanese Lazarus ML\n" "X-Generator: Poedit 1.8.4\n" "Language: ja\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser \"%s\" not executable." msgstr "ブラウザ \"%s\" が起動できません。" #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser \"%s\" not found." msgstr "ブラウザ \"%s\" が見つかりません。" #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing \"%s\":%s%s" msgstr "\"%s\" を実行中のエラー:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "HTML ブラウザーを見つけることができません。" #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "HTMLブラウザが見つかりません。\"%s\" 何か1つを「ツール→オプション→ヘルプ→ヘルプオプション」で設定して下さい。" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database \"%s\" was unable to find file \"%s\"." msgstr "ヘルプデータベース\"%s\"はファイル\"%\"を見つけることができませんでした。" #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "BrowserParams中のマクロ\"%s\"はURLで置き換えられます。" #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Accept" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "アプリケーションキー" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Cancel" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Caps Lock" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Clear" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "Cmd" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ctrl" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "変換" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Delete" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "↓" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "End" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Execute" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Final" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja(韓国における漢字)" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Help" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Home" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Insert" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "カタカナ ひらがな" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "マウスの左ボタン" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "←" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "左 Windows キー" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "マウスの中ボタン" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Alt" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "Meta" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "モード変更" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Page Down" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "無変換" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Num Lock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "テンキーの %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Print" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Page Up" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "マウスの右ボタン" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Enter" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "→" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "右 Windows キー" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Scroll Lock" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Select" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Print Screen" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "スペースキー" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "Super" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "不明" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "↑" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "リソース %s が見つかりません" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3 次元要素の暗い影の色" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3 次元要素の明るい色" #: lclstrconsts.rsacontrolcannothaveitselfasparent msgid "A control can't have itself as a parent" msgstr "コントロールはそれ自身を親とすることはできません" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "アクティブウィンドウの境界色" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "アクティブタイトルバーの色" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "すべてのファイル (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "アプリケーションの作業領域色" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aqua(水色)" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "デスクトップの背景色" #: lclstrconsts.rsbackward msgid "Backward" msgstr "後方へ" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "ビットマップファイル" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Black(黒色)" #: lclstrconsts.rsblank msgid "Blank" msgstr "空欄" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blue(青色)" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "ボタン面の色" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "ボタンの強調表示色" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "ボタンの影の色" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "ボタンの文字色" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "電卓" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "キャンセル" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "フォーカスを設定できません" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "キャンバスに描画が許可されていません" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "アクティブタイトルバーの文字色" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "大文字小文字を区別" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "クラス\"%s\"のコントロールが、クラス\"%s\"のコントロールを子とすることはできません" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "コントール\"%d\"には親となるウィンドウがありません" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "\"%s\"は\"%s\"の親ではありません" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Cream(クリーム色)" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "GDBが補足可能なエラーを生成中:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "カーソルファイル" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "カスタム色" #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "デフォルト色" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "権限 ユーザ グループ サイズ 日付 時間" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "レコードを削除しますか?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "削除" #: lclstrconsts.rsdirection msgid "Direction" msgstr "方向" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "ディレクトリ(&D)" #: lclstrconsts.rsdocking msgid "Docking" msgstr "ドッキング" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "アイコンの形式が重複しています。" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "編集" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "ファイル全体を検索" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "エラー" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "%s.%s のデバイスコンテキスト生成中のエラー" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "LCL 内エラー:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "フレーム %4:s %1:s アドレス %2:s%3:s の %0:s においてエラーが発生しました" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "ビットマップ保存中にエラーが発生しました。" #: lclstrconsts.rsexception msgid "Exception" msgstr "例外" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "ディレクトリが存在しなければなりません" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "ディレクトリ\"%s\"が存在しません。" #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "ファイル\"%s\"は既に存在しています。上書きしますか?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "ファイルが存在しなければなりません。" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "ファイル\"%s\"が存在しません。" #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "ファイル\"%s\"は書き込みできません。" #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "ファイルは書き込み禁止です" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "ファイルに名前を付けて保存" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "既存のファイルを開く" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "ファイルを上書きしますか?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "パスが存在しなければなりません" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "パス\"%s\"が存在しません。" #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "ディレクトリの選択" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(ファイルが見つかりません \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "ファイル情報" #: lclstrconsts.rsfilter msgctxt "lclstrconsts.rsfilter" msgid "(filter)" msgstr "(フィルタ)" #: lclstrconsts.rsfind msgid "Find" msgstr "検索" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "次の検索" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "最初へ" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be > ColCount" msgstr "FixedCols の値は ColCount より大きくすることはできません" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be > RowCount" msgstr "FixedRows の値は RowCount の値より大きくすることはできません" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "フォームの背景色" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "フォームのリソース\"%s\"がありません。リソースのないフォームでは、CreateNew コンストラクタを使わなくてはなりません。グローバル変数RequireDerivedFormResourceを参照して下さい。" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "フォームストリーム \"%s\" エラー:%s" #: lclstrconsts.rsforward msgid "Forward" msgstr "前方へ" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuchsia(鮮やかな赤紫色)" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags: GDK 固有のトレース/デバッグメッセージを有効にします。" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags: GDK 固有のトレース/デバッグメッセージを無効にします。" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "GIF ファイル" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings: Gtk+/GDK による警告またはエラーが発生した場合、アプリケーションを停止させます。" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "アクティブタイトルバーのグラデーション色" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "非アクティブタイトルバーのグラデーション色" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "画像ファイル" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Gray(灰色)" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "淡色文字の色" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Green(みどり色)" #: lclstrconsts.rsgridfiledoesnotexist msgid "Grid file doesn't exist" msgstr "グリッドファイルが存在しません" #: lclstrconsts.rsgridhasnocols msgid "Cannot insert rows into a grid when it has no columns" msgstr "カラムが存在しない場合、グリッドに行を挿入できません" #: lclstrconsts.rsgridhasnorows msgid "Cannot insert columns into a grid when it has no rows" msgstr "行が存在しない場合、グリッドにカラムを挿入できません" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "グリッドインデックスが範囲外です。" #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndexは、前のメニュー要素のGroupIndex より小さくなることはできません" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "フィルタ:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "履歴:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname: Xtの慣例に従い、あるプログラムのクラス名はプログラム名の最初の文字を大文字にしたものです。例えば、gimpのクラス名は\"Gimp\"となります。もし、--class オプションが指定されると、プログラムのクラス名は、「classname」に設定されます。" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags: Gtk+ 固有のトレース/デバッグメッセージを有効にします。" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d : 指定されたXサーバに接続します。ここで、<h>はホスト名、<s>はサーバ番号(通常ゼロ)、<d>はディスプレイ番号(通常は省略)。もし、--displayオプションが指定されないと、DISPLAY環境変数が使用されます。" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module: 指定されたモジュールを起動時にロードします。" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe: プログラム名を「programe」に設定します。もし、このオプションが指定されないと、プログラム名は、ParamStrUTF8(0)に設定されます。" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags: Gtk+ 固有のトレース/デバッグメッセージを無効にします。" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient: モーダルフォームにおいて一時ウィンドウを使用しません" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm: X共有メモリ拡張機能の使用を無効にする。" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync: X サーバとの接続を確立した後、「XSynchronize (display, True)」を呼び出します。これにより、X プロトコルエラーのデバッグが容易になります。なぜなら、X リクエストバッファリングは無効とされ、Xのエラーを発生させたプロトコルリクエストの直後にそのエラーが受信され、Xサーバにより処理されるからです。" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "\"%s\"は既に登録されています" #: lclstrconsts.rshelpcontextnotfound msgid "A help database was found for this topic, but this topic was not found" msgstr "このトピックに関するヘルプデータベースが見つかりましたが、このトピック自体はありませんでした。" #: lclstrconsts.rshelpdatabasenotfound msgid "There is no help database installed for this topic" msgstr "このトピックに関するヘルプデータベースはインストールされていません。" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "ヘルプエラー" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "ヘルプコンテキスト\"%s\"が見つかりません。" #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database \"%s\"." msgstr "ヘルプコンテキスト\"%s\"はデータベース\"%s\"にありません。" #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database \"%s\" did not find a viewer for a help page of type %s" msgstr "ヘルプデータベース\"%s\"のヘルプページタイプ\"%s\"に対するビューアが見つかりません" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database \"%s\" not found" msgstr "ヘルプデータベース\"%s\"が見つかりません" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive \"%s\" not found." msgstr "指令\"%s\"に対するヘルプが見つかりません。" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive \"%s\" not found in Database \"%s\"." msgstr "指令\"%s\"に対するヘルプがデータベース\"%s\"の中に見つかりません。" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword \"%s\" not found." msgstr "ヘルプキーワード\"%s\"が見つかりません。" #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword \"%s\" not found in Database \"%s\"." msgstr "ヘルプキーワード\"%s\"をデータベース\"%s\"から見つけることができませんでした。" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node \"%s\" has no Help Database" msgstr "ヘルプノード\"%s\"にヘルプデータベースはありません" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "%2:s の行 %0:d、列 %1:d のヘルプが見つかりませんでした。" #: lclstrconsts.rshelpnohelpnodesavailable msgid "No help entries available for this topic" msgstr "このトピックスで利用できるヘルプエントリがありません" #: lclstrconsts.rshelpnotfound msgid "No help found for this topic" msgstr "このトピックのヘルプが見つかりません" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "\"%s\"は登録されていません" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "ヘルプセレクタエラー" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type \"%s\"" msgstr "ヘルプタイプ\"%s\"に対するビューアがありません" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "ヘルプビューアエラー" #: lclstrconsts.rshelpviewernotfound msgid "No viewer was found for this type of help content" msgstr "このヘルプコンテンツタイプに対応するビューアが見つかりません" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "選択した文字の背景色" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "選択した文字の色" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "選択項目の背景色" #: lclstrconsts.rsicns msgid "Mac OS X Icon" msgstr "Mac OS X アイコン" #: lclstrconsts.rsicon msgid "Icon" msgstr "アイコン" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "アイコンイメージは空にできません" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "アイコンイメージは同じ形式でなければなりません" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "アイコンのイメージ形式が変更できません" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "アイコンイメージは同じサイズでなければなりません" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "アイコンイメージのサイズが変更できません" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "このアイコンは現在イメージを持っていません" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "非アクティブウィンドウの境界色" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "非アクティブタイトルバーの色" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "非アクティブタイトルバーの文字色" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "\"%s\" インデックスが %d、インデックス範囲外(0 .. %d)です" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "セルインデックスが範囲を超えています [Col=%d Row=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "ツールチップの背景色" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "ツールチップの文字色" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "挿入" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "無効な日付:%s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "無効な日付:%s。%s と %s の間でなければなりません" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "フォームオブジェクトストリームが無効です" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "無効なプロパティ値" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "無効なストリーム形式" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "\"%s\"は既に\"%s\"と関連付けられています" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "JPEG ファイル" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "最後へ" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Lime(ライム色)" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "リストインデックスが範囲外です (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "ハッシュリストは空でなくてはなりません" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Maroon(栗色)" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "中止" #: lclstrconsts.rsmball msgid "&All" msgstr "すべて(&A)" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "キャンセル" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "閉じる(&C)" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "ヘルプ(&H)" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "無視(&I)" #: lclstrconsts.rsmbno msgid "&No" msgstr "いいえ(&N)" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "全て「いいえ」" #: lclstrconsts.rsmbok msgid "&OK" msgstr "OK(&O)" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "開く(&O)" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "再試行(&R)" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "保存(&S)" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "ロック解除(&U)" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "はい(&Y)" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "全て「はい」(&A)" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Medium Gray(中位の灰色)" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "メニューバーの色" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "メニューの背景色" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "選択メニューの背景色" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "メニューの文字色" #: lclstrconsts.rsmodified msgid " modified " msgstr " 修正済み " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Money Green(マネーグリーン;深緑色)" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "認証" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "確認" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "カスタム" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "エラー" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "情報" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "警告" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Navy(濃紺色)" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "次へ" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "色なし" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "有効なグリッド用ファイルではありません" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "ウィジェットセットオブジェクトではありません。ユニット \"interfaces\" が uses 節に追加されているか確認してください。" #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olive(オリーブ色)" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "日付の選択" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "XPM ファイル" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "PBM ファイル" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "PGM ファイル" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG ファイル" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "PNM ファイル" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "レコードの登録" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "" "%s%s OKを押して無視するとデータが壊れる危険性があります。\n" "%s キャンセルを押すとプログラムは強制終了します。" #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "前へ" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "置換を確認" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "プロパティ\"%s\"が存在しません" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purple(紫色)" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "-dograb (X11 のみ): デバッガの動作下では暗黙的に -nograb が使われるので、-dograb で上書きします。QT_DEBUG が必要です。" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "-graphicssystem パラメータ: オンスクリーンウィジェットと QPixmaps で使われるバックエンドの設定をします。有効なオプションは native、raster、opengl です。OpenGL はまだ不安定版です。" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "-nograb: マウスやキーボードに関することを捕捉しなくていいよう Qt に伝えます。QT_DEBUG が必要です。" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "-reverse: アプリケーションのレイアウト方向を Qt::RightToLeft (右横書き) に設定します。" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "-session セッション: セッションは早い順にアプリケーションへ戻されます。" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "-style スタイル または -style=スタイル: アプリケーション GUI を設定します。設定できる値は motif、windows、platinum です。Qt で追加されたスタイルをコンパイルしたもしくはその他の追加スタイルがある場合、それらプラグインを -style コマンドラインオプションとして利用できます。注:すべてのスタイルがあらゆるプラットフォームで利用できるわけではありません。スタイルの値が存在しない場合、Qt はデフォルトの共通スタイル(windows)でアプリケーションを起動します。" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "-stylesheet スタイルシート または -stylesheet=スタイルシート: アプリケーションのスタイルシートを設定します。設定する値は、そのスタイルシートを含むファイルへのパスでなければなりません。注:スタイルシートファイル中の相対URLは、スタイルシートファイルのパスに対する相対パスとなります。" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "-sync (X11 のみ): デバッグを同期モードに切り替えます。" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "-widgetcount: 破棄されずに残っているウィジェット数とその時に存在しているウィジェットの最大数を終了時にデバッグメッセージへ表示させます。" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "-bg または -background 色: デフォルトの背景色とアプリケーションパレットを設定します(陰の濃淡は計算で決定されます)。" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "-btn または -button 色: デフォルトのボタンの色を設定します。" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "-cmap: 8 ビットディスプレイにおいてプライベートカラーマップをインストールしアプリケーションを起動します。" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "-display ディスプレイ: X ディスプレイを設定します(デフォルトは、 $DISPLAYで決まる値です)。" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "-fg または -foreground 色: デフォルトの前景色を設定します。" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "-fn または -font フォント: アプリケーションのフォントを定義します。フォントの指定は X 論理フォント記述子を推奨します。" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "-geometry ジオメトリ: 表示される最初のクライアントウィンドウの幾何学的なサイズを設定します。" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "-im: キーボード入力メソッドのサーバを設定します(環境変数 XMODIFIERS の値を設定するのと同じです)。" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "-inputstyle: 入力がどのようにウィジェットに挿入されるかを決めます。例:onTheSpot は、入力がウィジエットに直接現れます。一方、overTheSpot は、入力がウィジェットの上に浮かんだ箱の中に現れ、編集が完了するまで挿入はされません。" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "-name 名前: アプリケーション名を設定します。" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "-ncols 数: アプリケーションで QApplication::ManyColor の色指定を使っている場合、8 ビットディスプレイにおける割り当てられるカラー数を制限します。指定した値が 216 の場合、18 ビットカラー空間(RGB が各 6 ビットの色空間)が使われます。他の値の場合、RGB が 2-3-1 に概ね比例した色空間が使われます。" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "-title タイトル: アプリケーションタイトルを設定します。" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "-visual TrueColor: 8 ビットディスプレイでトゥルーカラー表示するようアプリケーションに強制します。" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "更新処理中でないのに更新終了をしました" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "更新処理中にイメージの保存はできません" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "キャンバスのみの更新処理を行っているときは全体の更新を行うことはできません" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Red(赤色)" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "更新" #: lclstrconsts.rsreplace msgid "Replace" msgstr "置換" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "すべて置換" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "リソース\"%s\"が見つかりません" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "スクロールバーの色" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "スクロールバーの値の範囲外" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "色の選択" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "フォントの選択" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Silver(銀色)" #: lclstrconsts.rssize msgid " size " msgstr " サイズ " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Sky Blue(空色)" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "タブ付きコントロール" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Teal(暗青緑色)" #: lclstrconsts.rstext msgid "Text" msgstr "テキスト" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "TIFF ファイル" #: lclstrconsts.rstpanelaccessibilitydescription msgctxt "lclstrconsts.rstpanelaccessibilitydescription" msgid "Panel" msgstr "パネル" #: lclstrconsts.rstsplitteraccessibilitydescription msgctxt "lclstrconsts.rstsplitteraccessibilitydescription" msgid "A grip to control how much size to give two parts of an area" msgstr "2つの領域サイズを変更することができるグリップ" #: lclstrconsts.rsttreeviewaccessibilitydescription msgctxt "lclstrconsts.rsttreeviewaccessibilitydescription" msgid "A tree of items" msgstr "アイテムのツリー" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "デフォルトフォントを読み込むことができません" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "未知のエラーです、このバグを報告してください。" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "不明な画像ファイル拡張子" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "不明な画像フォーマット" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "サポートされていないビットマップ形式です。" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "サポートしていないクリップボード形式:%s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "警告:解放されていないデバイスコンテキストが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "警告:解放されてない GDI オブジェクトが %d 個あります。詳細は以下の通りです:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "警告:キューに %d 個のメッセージが残っています!それらを解放します" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "警告:%d 個のタイマー情報が残っています!それらを解放します" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "警告:LM_PAINT/LM_GtkPAINT メッセージリンクが %s 個削除されずに残っています。" #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "White(白色)" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "単語(完全一致)のみ" #: lclstrconsts.rswin32error msgid "Error:" msgstr "エラー:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "警告:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "ウィンドウの背景色" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "ウィンドウの境界色" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "ウィンドウ内の文字色" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Yellow(黄色)" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "無効または不可視ウィンドウにフォーカスはできません" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "メニューが重複しています" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "無効なアクション生成" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "アクション一覧が無効です" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "アクション登録が無効です" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "アクション登録解除が無効です" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "マスク\"%s\"にセットされた文字は有効なものではありません" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "無効なイメージサイズ" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "無効なイメージリストインデックス" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "現在のテキストは指定されているマスクに合致しません。" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "メニューインデックスが範囲外です" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "メニューアイテムは空(nilです" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "サブメニューがメニューにありません" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Del" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "↓" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "End" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Home" #: lclstrconsts.smkcins msgid "Ins" msgstr "Ins" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "←" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "→" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Space" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "↑" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "MDI フォームが存在しません。" #: lclstrconsts.snotimers msgid "No timers available" msgstr "利用できるタイマーがありません" #: lclstrconsts.sparentrequired msgid "Control \"%s\" has no parent window." msgstr "コントロール\"%s\"には親ウィンドウがありません。" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "正しくないトークンタイプ: \"%s\"ではありません" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "無効な浮動小数点数値: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "無効な整数値: %s" #: lclstrconsts.sparlocinfo msgid " (at %d,%d, stream offset %d)" msgstr " (位置 %d,%d、ストリームオフセット %d)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "バイトデータが終端していません" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "文字列が終端していません" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "正しくないトークンシンボル: \"%s\"があるべきところに\"%s\"があります" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "正しくないトークンタイプ: \"%s\"があるべきところに\"%s\"があります" #: lclstrconsts.sshellctrlsbytes msgid "%s bytes" msgstr "%s バイト" #: lclstrconsts.sshellctrlsinvalidpath msgctxt "lclstrconsts.sshellctrlsinvalidpath" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlsinvalidpathrelative msgid "" "Invalid relative pathname:\n" "\"%s\"\n" "in relation to rootpath:\n" "\"%s\"\n" msgstr "" "ルートパス:\n" "\"%1:s\"に関連した\n" "無効な相対パス名:\n" "\"%0:s\"\n" #: lclstrconsts.sshellctrlsinvalidroot msgctxt "lclstrconsts.sshellctrlsinvalidroot" msgid "" "Invalid pathname:\n" "\"%s\"\n" msgstr "" "無効なパス名:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlskb msgid "%s kB" msgstr "%s kB" #: lclstrconsts.sshellctrlsmb msgid "%s MB" msgstr "%s MB" #: lclstrconsts.sshellctrlsname msgid "Name" msgstr "名前" #: lclstrconsts.sshellctrlsselecteditemdoesnotexists msgid "" "The selected item does not exist on disk:\n" "\"%s\"\n" msgstr "" "選択された項目はディスク上にありません:\n" "\"%s\"\n" #: lclstrconsts.sshellctrlssize msgid "Size" msgstr "サイズ" #: lclstrconsts.sshellctrlstype msgid "Type" msgstr "タイプ" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.de.po�����������������������������������������������������0000644�0001750�0000144�00000121700�12250635767�020554� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2010-08-25 23:51+0100\n" "Last-Translator: Swen Heinig <swen.heinig@freenet.de>\n" "Language-Team: Deutsch <lazarus@miraclec.com>\n" "MIME-Version: 1.0\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" "X-Poedit-SourceCharset: utf-8\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Browser %s%s%s nicht ausführbar." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Browser %s%s%s nicht gefunden." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Fehler beim Ausführen von %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Kann den HTML-Browser nicht finden." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Die Hilfedatenbank %s%s%s konnte die Datei %s%s%s nicht finden." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Das Makro %s in BrowserParams wird durch den URL ersetzt." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Strg" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Übernehmen" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "Programmtaste" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Rückschritt" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Großbuchstabe" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Löschen" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Steuerelement" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Konvertiert" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Löschen" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Hinunter" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Ende" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Ausführen" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Schluß" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Hilfe" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Pos1" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Einfügen" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Linke Maustaste" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Links" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "Linke Windows-Taste" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Mittlere Maustaste" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Menü" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Modusänderung" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Weiter" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nichtkonvertiert" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "NumLock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Zahlenblock %s" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Pause-Taste" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Druck" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Zurück" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Rechte Maustaste" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Eingabe" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Rechts" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "Rechte Windows-Taste" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Rollen" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Auswählen" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Umsch" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Auszug" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Leertaste" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Unbekannt" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Hoch" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "Kann %s nicht ausführen" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Ressource %s nicht gefunden" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "Programmdatei nicht gefunden %s" #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "Dunkl. 3D-Schatten" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D-Licht" #: lclstrconsts.rsacontrolcannothaveitselfasparent #, fuzzy #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Ein Control kann nicht sein eigener Vorfahr sein" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktiver Rand" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktive Titelleiste" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Alle Dateien (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Arbeitsbereich" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Aquamarin" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Desktop" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Rückwärts" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitmaps" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Schwarz" #: lclstrconsts.rsblank msgid "Blank" msgstr "Leer" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Blau" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Schalterfläche" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Schalter-Hervorheb." #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Schalter-Schatten" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Schalter-Text" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Rechner" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Kann nicht fokussieren" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Canvas erlaubt kein Zeichnen" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Titelleistentext" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Schreibweisenabhängig" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Cremefarbig" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Erzeuge GDB-fangbaren Fehler:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Zeiger" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Eigene ..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Voreingestellt" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "Genehmigung User GruppeGröße DatumZeit" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Datensatz löschen?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Löschen" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Richtung" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Verzeichnis" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Andocken" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Doppeltes Icon-Format" #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Bearbeiten" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Gesamte Datei durchsuchen" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Fehler" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Fehler beim Erzeugen des Gerätekontexts für %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "FEHLER in der LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Fehler aufgetreten in %s bei %sAdresse %s%s Frame %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Fehler beim Lesen %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Fehler beim Speichern der Bitmap." #: lclstrconsts.rsexception msgid "Exception" msgstr "Exception" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Verzeichnis muß vorhanden sein" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Das Verzeichnis \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Die Datei \"%s\" ist bereits vorhanden. Überschreiben?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Datei muß vorhanden sein" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Die Datei \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Die Datei \"%s\" ist schreibgeschützt." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Datei ist nicht beschreibbar" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Datei sichern als" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Vorhandene Datei öffnen" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Datei überschreiben?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Pfad muß angelegt sein" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Der Pfad \"%s\" ist nicht vorhanden." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Verzeichnis auswählen" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(Datei nicht gefunden: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Dateiinformation" #: lclstrconsts.rsfind msgid "Find" msgstr "Suchen" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Weitersuchen" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "Erster" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols kann nicht größer/gleich ColCount sein" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows kann nicht größer/gleich RowCount sein" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Form" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Form-Streaming \"%s\" Fehler: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Vorwärts" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Purpur" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "--gdk-debug flags Besondere GDK-Trace/Debug-Meldungen anschalten." #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "--gdk-no-debug flags Besondere GDK-Trace/Debug-Meldungen abschalten." #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "--g-fatal-warnings Von Gtk+/GDK generierte Warnungen und Fehler halten das Programm an." #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "Gradient der aktiven Titelleiste" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "Gradient der inaktiven Titelleiste" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafik" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Grau" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Ausgegrauter Text" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Grün" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Grid-Datei fehlt" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Gitterindex außerhalb des Bereichs." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex darf nicht kleiner als der GroupIndex eines vorherigen Menüeintrags sein" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filter:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Verlauf:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "--class classname Den Xt-Konventionen folgend, entspricht der Klassenname dem Programmnamen mit dem ersten Buchstaben in Großschreibung. Beispielsweise ist der Klassenname von gimp \"Gimp\". Wenn --class angegeben ist, wird die Klasse des Programme auf \"classname\" gesetzt." #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "--gtk-debug flags Anschalten spezifischer Trace-/Debug-Meldungen des Gtk+." #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "--display h:s:d Anbinden an den angegebenen X-Server wobei \"h\" für den Hostnamen steht, \"s\" die Nummer des Server ist (normalerweise 0) und \"d\" die Nummer des Displays (typischerweise weggelassen). Ist --display nicht angegeben, gilt der Wert der Umgebungsvariable DISPLAY." #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "--gtk-module module Das abgegebene Modul beim Starten laden." #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "--name programe Setzen des Programmnamens auf \"progname\". Ist nichts angegeben, wird der Name auf ParamStrUTF8(0) gesetzt." #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "--gtk-no-debug flags Besondere Gtk+-Trace-/Debug-Meldungen abschalten." #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "--lcl-no-transient Transiente Reihenfolge für modale Formulare nicht setzen." #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "--no-xshm Abschalten der Verwendung der Shared-Memory-Erweiterung von X" #: lclstrconsts.rsgtkoptionsync #, fuzzy #| msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediatey after the protocol request that generated the error has been processed by the X server." msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "--sync Aufruf von XSynchronize (Display, True) nachdem die XServer-Verbindung zustandegekommen ist. Dies erleichtert das Debugging des X-Protokolls, weil die X-Anfragepufferung abgeschaltet ist und X-Fehler sofort ankommen, nachdem die Anfrage, die den Fehler erzeugt hat, beim X-Server angekommen ist." #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Bereits registriert" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Hilfekontext nicht gefunden" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Hilfedatenbank nicht gefunden" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Hilfefehler" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Hilfekontext %s nicht gefunden." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Hilfekontext %s nicht in der Datenbank %s%s%s gefunden." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Die Hilfedatenbank %s%s%s fand keinen Betrachter für eine Hilfeseite des Typs %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Hilfedatenbank %s%s%s nicht gefunden" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Hilfeschlüsselwort %s%s%s nciht gefunden." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Hilfeschlüsselwort %s nicht in der Datenbank %s%s%s gefunden." #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Hilfeknoten %s%s%s besitzt keine Hilfedatenbank" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Keine Hilfe für Zeile %d, Spalte %d von %s gefunden." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Keine Hilfeknoten verfügbar" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Hilfe nicht gefunden" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Nicht registriert" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Hilfeauswahlfehler" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Es gibt keinen Viewer für den Hilfetyp %s%s%s" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Hilfebetrachterfehler" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Hilfebetrachter nicht gefunden" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Hervorhebung" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Hervorgehob. Text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "Kräftig hervorgehoben" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "OSX-Icon-Ressource" #: lclstrconsts.rsicon msgid "Icon" msgstr "Symbol" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Icon-Bild darf nicht leer sein" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Icon-Bild muß das gleiche Format haben" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Kann Format des Icon-Bilds nicht ändern" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Icon-Bild muß die gleiche Größe haben" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Kann Größe des Icon-Bilds nicht ädnern" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Icon besitzt kein gültiges Bild" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Inaktiver Rand" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Inaktive Titelleiste" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Inaktive Titelleiste" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %s außerhalb des Bereichs 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index außerhalb des Bereichs Zelle[Spalte=%s Reihe=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Info-Hintergrund" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Infotext" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Einfg" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Ungültiges Datum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Ungültiges Datum: %s. Es muß zwischen %s und %s sein" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "ungültiger Formularobjekt-Stream" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Ungültiger Eigenschaftenwert" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Ungültiges Streamformat" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s ist bereits mit %s verbunden" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Jpint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Letzter" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Hellgrün" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Listenindex überschreitet Grenzen (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Zeile muß leer sein" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kastanienbraun" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Abbruch" #: lclstrconsts.rsmball msgid "&All" msgstr "&Alle" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Abbrechen" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Schließen" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Hilfe" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Übergehen" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Nein" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Immer Nein" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&Ok" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Öffnen" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Wiederholen" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Speichern" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Freigeben" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ja" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "&Alles bestätigen" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Mittelgrau" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Menübalken" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Menü" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Menühervorhebung" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Menütext" #: lclstrconsts.rsmodified msgid " modified " msgstr " geändert " #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "\"Geldgrün\"" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Authentifikation" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Bestätigung" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Spezial" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Fehler" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Information" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Warnung" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Marineblau" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Nächster" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Keine" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Keine gültige Grid-Datei" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Kein Widgetset-Objekt. Bitte überprüfen Sie, ob die Unit \"Interfaces\" in der Uses-Anweisung des Programms enthalten ist." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Oliv" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Datum auswählen" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmap" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Portable Bitmap" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Portable Graymap" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "PNG-Grafik" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Portable Pixmap" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Übertragen" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok #| msgid "%s%sPress Ok to ignore and risk data corruption.%sPress Cancel to kill the program." msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sOk übergeht und riskiert Dateninkonsistenz.%sMit Abbrechen wird das Programm abgebrochen." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Vorher" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Eigenschaft %s fehlt" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Purpur" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Endupdate wenn kein Update läuft" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Kann Bild während des Updates nicht sichern" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Kann nicht mit dem kompletten Aktualisieren beginnen wenn ein Canvas-Update durchgeführt wird" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Rot" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Auffrischen" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Ersetzen" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Alle ersetzen" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Ressource %s nicht gefunden" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Scrollbalken" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Scrollbar-Eigenschaft außerhalb des Bereichs" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Farbe auswählen" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Schriftart auswählen" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Silber" #: lclstrconsts.rssize msgid " size " msgstr " Größe " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Himmelblau" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Türkiss" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Kann Default-Schriftart nicht laden" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Unbekannter Fehler, bitte melden Sie diesen Bug." #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Unbekannte Bilddateiendung" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Unbekanntes Bildformat" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nicht unterstütztes Bitmap-Format" #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nicht unterstütztes Clipboard-Format: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "WARNUNG: Es gibt %d nicht freigegebene DCs. Es folgt ein detaillierter Dump:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "WARNUNG: Es gibt %d nicht freigegebene GDI-Objekte. Es folgt ein detaillierter Dump:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr "WARNUNG: Es sind %d Meldungen in der Queue übrig. Sie werden freigegeben" #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "WARNUNG: Es sind %d Timerinfo-Strukturen übrig, sie werden freigegeben" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "WARNUNG: Es sind %s nicht entfernte LM_PAINT/LM_GtkPAINT-Meldungs-Links übrig." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Weiß" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Nur ganze Worte" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Fehler:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Warnung:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Fenster" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Fensterrahmen" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Fenstertext" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Gelb" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Kann abgeschaltetes oder unsichtbares Fenster nicht fokussieren" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Doppelte Menüs" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Ungültige Action-Erzeugung" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Ungültige Action-Numerierung" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Ungültige Action-Registrierung" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Ungültige Action-Registierungsaufhebung" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Der Zeichensatz in der Maske \"%s\" ist ungültig!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Ungültige Bildgröße" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Ungültiger Bildlistenindex" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Menüindex außerhalb des Bereichs" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Menüeintrag ist NIL" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Untermenü ist nicht im Menü" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Strg+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Entf" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Hinunter" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Ende" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Pos1" #: lclstrconsts.smkcins msgid "Ins" msgstr "Einfg" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Links" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Rechts" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "" #: lclstrconsts.smkcspace msgid "Space" msgstr "" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tabulator" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Hoch" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Kein MDI-Formular vorhanden" #: lclstrconsts.snotimers msgid "No timers available" msgstr "Keine Timer verfügbar" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Falscher Token-Typ: %s erwartet" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Ungültige Gleitkommazahl: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Ungültiger Integerzahl: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (bei %d,%d, Stream-Offset %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nicht abgeschlossener Byte-Wert" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Nicht abgeschlossene Zeichenkette " #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Falscher Token: %s erwartet, %s gefunden" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Falscher Token-Typ: %s erwartet, %s gefunden" ����������������������������������������������������������������doublecmd-0.7.1/language/lcl/lclstrconsts.cs.po�����������������������������������������������������0000644�0001750�0000144�00000115472�12250635767�020602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2010-07-27 17:12+0100\n" "Last-Translator: Chronos <robie@centrum.cz>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Czech\n" #: lclstrconsts.hhshelpbrowsernotexecutable msgid "Browser %s%s%s not executable." msgstr "Prohlížeč %s%s%s není spustitelný." #: lclstrconsts.hhshelpbrowsernotfound msgid "Browser %s%s%s not found." msgstr "Prohlížeč %s%s%s nenalezen." #: lclstrconsts.hhshelperrorwhileexecuting msgid "Error while executing %s%s%s:%s%s" msgstr "Chyba během spouštění %s%s%s:%s%s" #: lclstrconsts.hhshelpnohtmlbrowserfound msgid "Unable to find a HTML browser." msgstr "Nepodařilo se nalézt HTML prohlížeč." #: lclstrconsts.hhshelpnohtmlbrowserfoundpleasedefineone msgid "No HTML Browser found.%sPlease define one in Tools -> Options -> Help -> Help Options" msgstr "" #: lclstrconsts.hhshelpthehelpdatabasewasunabletofindfile msgid "The help database %s%s%s was unable to find file %s%s%s." msgstr "Databáze nápovědy %s%s%s nemůže najít soubor %s%s%s." #: lclstrconsts.hhshelpthemacrosinbrowserparamswillbereplacedbytheurl msgid "The macro %s in BrowserParams will be replaced by the URL." msgstr "Makro %s v BrowserParams bude nahrazeno URL." #: lclstrconsts.ifsalt msgid "Alt" msgstr "Alt" #: lclstrconsts.ifsctrl msgid "Ctrl" msgstr "Ctrl" #: lclstrconsts.ifsvk_accept msgid "Accept" msgstr "Přijmout" #: lclstrconsts.ifsvk_apps msgid "application key" msgstr "aplikační klávesa" #: lclstrconsts.ifsvk_back msgid "Backspace" msgstr "Backspace" #: lclstrconsts.ifsvk_cancel msgctxt "lclstrconsts.ifsvk_cancel" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.ifsvk_capital msgid "Capital" msgstr "Velké písmena" #: lclstrconsts.ifsvk_clear msgid "Clear" msgstr "Vyčistit" #: lclstrconsts.ifsvk_cmd msgid "Cmd" msgstr "" #: lclstrconsts.ifsvk_control msgid "Control" msgstr "Ovládání" #: lclstrconsts.ifsvk_convert msgid "Convert" msgstr "Převést" #: lclstrconsts.ifsvk_delete msgctxt "lclstrconsts.ifsvk_delete" msgid "Delete" msgstr "Smazat" #: lclstrconsts.ifsvk_down msgctxt "lclstrconsts.ifsvk_down" msgid "Down" msgstr "Dolů" #: lclstrconsts.ifsvk_end msgctxt "lclstrconsts.ifsvk_end" msgid "End" msgstr "Konec" #: lclstrconsts.ifsvk_escape msgid "Escape" msgstr "Escape" #: lclstrconsts.ifsvk_execute msgid "Execute" msgstr "Vykonat" #: lclstrconsts.ifsvk_final msgid "Final" msgstr "Konečný" #: lclstrconsts.ifsvk_hanja msgid "Hanja" msgstr "Hanja" #: lclstrconsts.ifsvk_help msgid "Help" msgstr "Nápověda" #: lclstrconsts.ifsvk_home msgctxt "lclstrconsts.ifsvk_home" msgid "Home" msgstr "Domů" #: lclstrconsts.ifsvk_insert msgctxt "lclstrconsts.ifsvk_insert" msgid "Insert" msgstr "Vložit" #: lclstrconsts.ifsvk_junja msgid "Junja" msgstr "Junja" #: lclstrconsts.ifsvk_kana msgid "Kana" msgstr "Kana" #: lclstrconsts.ifsvk_lbutton msgid "Mouse Button Left" msgstr "Levé tlačítko myši" #: lclstrconsts.ifsvk_left msgctxt "lclstrconsts.ifsvk_left" msgid "Left" msgstr "Doleva" #: lclstrconsts.ifsvk_lwin msgid "left windows key" msgstr "levá klávesa windows" #: lclstrconsts.ifsvk_mbutton msgid "Mouse Button Middle" msgstr "Prostřední tlačítko myši" #: lclstrconsts.ifsvk_menu msgctxt "lclstrconsts.ifsvk_menu" msgid "Menu" msgstr "Nabídka" #: lclstrconsts.ifsvk_meta msgid "Meta" msgstr "" #: lclstrconsts.ifsvk_modechange msgid "Mode Change" msgstr "Změna režimu" #: lclstrconsts.ifsvk_next msgctxt "lclstrconsts.ifsvk_next" msgid "Next" msgstr "Další" #: lclstrconsts.ifsvk_nonconvert msgid "Nonconvert" msgstr "Nepřevedeitelné" #: lclstrconsts.ifsvk_numlock msgid "Numlock" msgstr "Numlock" #: lclstrconsts.ifsvk_numpad msgid "Numpad %d" msgstr "Numerická klávesa %d" #: lclstrconsts.ifsvk_pause msgid "Pause key" msgstr "Klávesa pouza" #: lclstrconsts.ifsvk_print msgid "Print" msgstr "Tisknout" #: lclstrconsts.ifsvk_prior msgctxt "lclstrconsts.ifsvk_prior" msgid "Prior" msgstr "Předchozí" #: lclstrconsts.ifsvk_rbutton msgid "Mouse Button Right" msgstr "Pravé tlačítko myši" #: lclstrconsts.ifsvk_return msgid "Return" msgstr "Návrat" #: lclstrconsts.ifsvk_right msgctxt "lclstrconsts.ifsvk_right" msgid "Right" msgstr "Doprava" #: lclstrconsts.ifsvk_rwin msgid "right windows key" msgstr "pravá klávesa windows" #: lclstrconsts.ifsvk_scroll msgid "Scroll" msgstr "Posouvat" #: lclstrconsts.ifsvk_select msgid "Select" msgstr "Vybrat" #: lclstrconsts.ifsvk_shift msgid "Shift" msgstr "Shift" #: lclstrconsts.ifsvk_snapshot msgid "Snapshot" msgstr "Snímek" #: lclstrconsts.ifsvk_space msgid "Space key" msgstr "Mezerník" #: lclstrconsts.ifsvk_super msgid "Super" msgstr "" #: lclstrconsts.ifsvk_tab msgctxt "lclstrconsts.ifsvk_tab" msgid "Tab" msgstr "Tab" #: lclstrconsts.ifsvk_unknown msgid "Unknown" msgstr "Neznámé" #: lclstrconsts.ifsvk_up msgctxt "lclstrconsts.ifsvk_up" msgid "Up" msgstr "Nahoru" #: lclstrconsts.liscannotexecute msgid "can not execute %s" msgstr "nelze spustit %s" #: lclstrconsts.liscefilter msgid "(filter)" msgstr "" #: lclstrconsts.lislclresourcesnotfound msgctxt "lclstrconsts.lislclresourcesnotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenalezen" #: lclstrconsts.lisprogramfilenotfound msgid "program file not found %s" msgstr "soubor programu %s nenalezen " #: lclstrconsts.rs3ddkshadowcolorcaption msgid "3D Dark Shadow" msgstr "3D tmavě stínová" #: lclstrconsts.rs3dlightcolorcaption msgid "3D Light" msgstr "3D světlo" #: lclstrconsts.rsacontrolcannothaveitselfasparent #| msgid "A control can't have itself as parent" msgid "A control can't have itself as a parent" msgstr "Prvek nemůže mít sebe jako rodiče" #: lclstrconsts.rsactivebordercolorcaption msgid "Active Border" msgstr "Aktivní okraj" #: lclstrconsts.rsactivecaptioncolorcaption msgid "Active Caption" msgstr "Aktivní titulek" #: lclstrconsts.rsallfiles msgid "All files (%s)|%s|%s" msgstr "Všechny soubory (%s)|%s|%s" #: lclstrconsts.rsappworkspacecolorcaption msgid "Application Workspace" msgstr "Pracovní prostředí aplikace" #: lclstrconsts.rsaquacolorcaption msgid "Aqua" msgstr "Vodní" #: lclstrconsts.rsbackgroundcolorcaption msgid "Desktop" msgstr "Plocha" #: lclstrconsts.rsbackward msgid "Backward" msgstr "Nazpět" #: lclstrconsts.rsbitmaps msgid "Bitmaps" msgstr "Bitové mapy" #: lclstrconsts.rsblackcolorcaption msgid "Black" msgstr "Černá" #: lclstrconsts.rsblank msgid "Blank" msgstr "Prázdné" #: lclstrconsts.rsbluecolorcaption msgid "Blue" msgstr "Modrá" #: lclstrconsts.rsbtnfacecolorcaption msgid "Button Face" msgstr "Povrch tlačítka" #: lclstrconsts.rsbtnhighlightcolorcaption msgid "Button Highlight" msgstr "Zvýraznění tlačítka" #: lclstrconsts.rsbtnshadowcolorcaption msgid "Button Shadow" msgstr "Stín tlačítka" #: lclstrconsts.rsbtntextcolorcaption msgid "Button Text" msgstr "Text tlačítka" #: lclstrconsts.rscalculator msgid "Calculator" msgstr "Kalkulačka" #: lclstrconsts.rscancelrecordhint msgctxt "lclstrconsts.rscancelrecordhint" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.rscannotfocus msgid "Can not focus" msgstr "Nelze zaměřit" #: lclstrconsts.rscanvasdoesnotallowdrawing msgid "Canvas does not allow drawing" msgstr "Plátno neumožňuje kreslení" #: lclstrconsts.rscaptiontextcolorcaption msgid "Caption Text" msgstr "Text titulku" #: lclstrconsts.rscasesensitive msgid "Case sensitive" msgstr "Rozlišovat velká/malá" #: lclstrconsts.rscontrolclasscantcontainchildclass msgid "Control of class '%s' can't have control of class '%s' as a child" msgstr "Prvek třídy '%s' nemůže mít prvek třídy '%s' jako dítě" #: lclstrconsts.rscontrolhasnoparentwindow msgid "Control '%s' has no parent window" msgstr "Prvek '%s' nemá rodičovské okno" #: lclstrconsts.rscontrolisnotaparent msgid "'%s' is not a parent of '%s'" msgstr "" #: lclstrconsts.rscreamcolorcaption msgid "Cream" msgstr "Krémová" #: lclstrconsts.rscreatinggdbcatchableerror msgid "Creating gdb catchable error:" msgstr "Vytvářím chytatelnou chybu gdb:" #: lclstrconsts.rscursor msgid "Cursor" msgstr "Ukazatel" #: lclstrconsts.rscustomcolorcaption msgid "Custom ..." msgstr "Vlastní..." #: lclstrconsts.rsdefaultcolorcaption msgid "Default" msgstr "Výchozí" #: lclstrconsts.rsdefaultfileinfovalue msgid "permissions user group size date time" msgstr "oprávnění uživatel skupina velikost datum čas" #: lclstrconsts.rsdeleterecord msgid "Delete record?" msgstr "Smazat záznam?" #: lclstrconsts.rsdeleterecordhint msgctxt "lclstrconsts.rsdeleterecordhint" msgid "Delete" msgstr "Smazat" #: lclstrconsts.rsdirection msgid "Direction" msgstr "Adresář" #: lclstrconsts.rsdirectory msgid "&Directory" msgstr "&Adresář" #: lclstrconsts.rsdocking msgid "Docking" msgstr "Ukotvení" #: lclstrconsts.rsduplicateiconformat msgid "Duplicate icon format." msgstr "Zdvojený formát ikony." #: lclstrconsts.rseditrecordhint msgid "Edit" msgstr "Upravit" #: lclstrconsts.rsentirescope msgid "Search entire file" msgstr "Prohledat celý soubor" #: lclstrconsts.rserror msgctxt "lclstrconsts.rserror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rserrorcreatingdevicecontext msgid "Error creating device context for %s.%s" msgstr "Chyba vytváření kontextu zařízení %s.%s" #: lclstrconsts.rserrorinlcl msgid "ERROR in LCL: " msgstr "CHYBA v LCL:" #: lclstrconsts.rserroroccurredinataddressframe msgid "Error occurred in %s at %sAddress %s%s Frame %s" msgstr "Nastala chyba v %s na %sAdresa %s%s Rámec %s" #: lclstrconsts.rserrorreadingproperty msgid "Error reading %s%s%s: %s" msgstr "Chyba čtení %s%s%s: %s" #: lclstrconsts.rserrorwhilesavingbitmap msgid "Error while saving bitmap." msgstr "Chyba během ukládání bitmapy." #: lclstrconsts.rsexception msgid "Exception" msgstr "Vyjímka" #: lclstrconsts.rsfddirectorymustexist msgid "Directory must exist" msgstr "Adresář musí existovat" #: lclstrconsts.rsfddirectorynotexist msgid "The directory \"%s\" does not exist." msgstr "Adresář \"%s\" neexistuje." #: lclstrconsts.rsfdfilealreadyexists msgid "The file \"%s\" already exists. Overwrite ?" msgstr "Soubor \"%s\" již existuje. Přepsat ?" #: lclstrconsts.rsfdfilemustexist msgid "File must exist" msgstr "Soubor musí existovat" #: lclstrconsts.rsfdfilenotexist msgid "The file \"%s\" does not exist." msgstr "Soubor \"%s\" neexistuje." #: lclstrconsts.rsfdfilereadonly msgid "The file \"%s\" is not writable." msgstr "Soubor \"%s\" není zapisovatelný." #: lclstrconsts.rsfdfilereadonlytitle msgid "File is not writable" msgstr "Soubor není zapisovatelný" #: lclstrconsts.rsfdfilesaveas msgid "Save file as" msgstr "Uložit soubor jako" #: lclstrconsts.rsfdopenfile msgid "Open existing file" msgstr "Otevřít existující soubor" #: lclstrconsts.rsfdoverwritefile msgid "Overwrite file ?" msgstr "Přepsat soubor?" #: lclstrconsts.rsfdpathmustexist msgid "Path must exist" msgstr "Cesta musí existovat" #: lclstrconsts.rsfdpathnoexist msgid "The path \"%s\" does not exist." msgstr "Cesta \"%s\" neexistuje." #: lclstrconsts.rsfdselectdirectory msgid "Select Directory" msgstr "Vybrat adresář" #: lclstrconsts.rsfileinfofilenotfound msgid "(file not found: \"%s\")" msgstr "(soubor nenalezen: \"%s\")" #: lclstrconsts.rsfileinformation msgid "File information" msgstr "Informace o souboru" #: lclstrconsts.rsfind msgid "Find" msgstr "Najít" #: lclstrconsts.rsfindmore msgid "Find more" msgstr "Najít další" #: lclstrconsts.rsfirstrecordhint msgid "First" msgstr "První" #: lclstrconsts.rsfixedcolstoobig msgid "FixedCols can't be >= ColCount" msgstr "FixedCols nemůže být >= ColCount" #: lclstrconsts.rsfixedrowstoobig msgid "FixedRows can't be >= RowCount" msgstr "FixedRows nemůže být >= RowCount" #: lclstrconsts.rsformcolorcaption msgid "Form" msgstr "Formulář" #: lclstrconsts.rsformresourcesnotfoundforresourcelessformscreatenew msgid "Form resource %s not found. For resourceless forms CreateNew constructor must be used. See the global variable RequireDerivedFormResource." msgstr "" #: lclstrconsts.rsformstreamingerror msgid "Form streaming \"%s\" error: %s" msgstr "Chyba zřetězení \"%s\" chyba: %s" #: lclstrconsts.rsforward msgid "Forward" msgstr "Vpřed" #: lclstrconsts.rsfuchsiacolorcaption msgid "Fuchsia" msgstr "Fuksiová" #: lclstrconsts.rsgdkoptiondebug msgid "--gdk-debug flags Turn on specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgdkoptionnodebug msgid "--gdk-no-debug flags Turn off specific GDK trace/debug messages." msgstr "" #: lclstrconsts.rsgif msgid "Graphics Interchange Format" msgstr "Graphics Interchange Format" #: lclstrconsts.rsgoptionfatalwarnings msgid "--g-fatal-warnings Warnings and errors generated by Gtk+/GDK will halt the application." msgstr "" #: lclstrconsts.rsgradientactivecaptioncolorcaption msgid "Gradient Active Caption" msgstr "" #: lclstrconsts.rsgradientinactivecaptioncolorcaption msgid "Gradient Inactive Caption" msgstr "" #: lclstrconsts.rsgraphic msgid "Graphic" msgstr "Grafika" #: lclstrconsts.rsgraycolorcaption msgid "Gray" msgstr "Šedá" #: lclstrconsts.rsgraytextcolorcaption msgid "Gray Text" msgstr "Šedý text" #: lclstrconsts.rsgreencolorcaption msgid "Green" msgstr "Zelená" #: lclstrconsts.rsgridfiledoesnotexists msgid "Grid file doesn't exists" msgstr "Soubor mřížky neexistuje" #: lclstrconsts.rsgridindexoutofrange msgid "Grid index out of range." msgstr "Index mřížky mimo rozsah." #: lclstrconsts.rsgroupindexcannotbelessthanprevious msgid "GroupIndex cannot be less than a previous menu item's GroupIndex" msgstr "GroupIndex nemůže být menší než předchozí GroupIndex položky menu" #: lclstrconsts.rsgtkfilter msgid "Filter:" msgstr "Filtr:" #: lclstrconsts.rsgtkhistory msgid "History:" msgstr "Historie:" #: lclstrconsts.rsgtkoptionclass msgid "--class classname Following Xt conventions, the class of a program is the program name with the initial character capitalized. For example, the classname for gimp is \"Gimp\". If --class is specified, the class of the program will be set to \"classname\"." msgstr "" #: lclstrconsts.rsgtkoptiondebug msgid "--gtk-debug flags Turn on specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptiondisplay msgid "--display h:s:d Connect to the specified X server, where \"h\" is the hostname, \"s\" is the server number (usually 0), and \"d\" is the display number (typically omitted). If --display is not specified, the DISPLAY environment variable is used." msgstr "" #: lclstrconsts.rsgtkoptionmodule msgid "--gtk-module module Load the specified module at startup." msgstr "" #: lclstrconsts.rsgtkoptionname msgid "--name programe Set program name to \"progname\". If not specified, program name will be set to ParamStrUTF8(0)." msgstr "" #: lclstrconsts.rsgtkoptionnodebug msgid "--gtk-no-debug flags Turn off specific Gtk+ trace/debug messages." msgstr "" #: lclstrconsts.rsgtkoptionnotransient msgid "--lcl-no-transient Do not set transient order for modal forms" msgstr "" #: lclstrconsts.rsgtkoptionnoxshm msgid "--no-xshm Disable use of the X Shared Memory Extension." msgstr "" #: lclstrconsts.rsgtkoptionsync msgid "--sync Call XSynchronize (display, True) after the Xserver connection has been established. This makes debugging X protocol errors easier, because X request buffering will be disabled and X errors will be received immediately after the protocol request that generated the error has been processed by the X server." msgstr "" #: lclstrconsts.rshelpalreadyregistered msgid "%s: Already registered" msgstr "%s: Již zaregistrováno" #: lclstrconsts.rshelpcontextnotfound #, fuzzy #| msgid "Help Context not found" msgid "A help database was found for this topic, but this topic was not found" msgstr "Kontext nápovědy nenalezen" #: lclstrconsts.rshelpdatabasenotfound #, fuzzy #| msgid "Help Database not found" msgid "There is no help database installed for this topic" msgstr "Databáze nápovědy nenalezena" #: lclstrconsts.rshelperror msgid "Help Error" msgstr "Chyba nápovědy" #: lclstrconsts.rshelphelpcontextnotfound msgid "Help context %s not found." msgstr "Kontext nápovědy %s nenalezen." #: lclstrconsts.rshelphelpcontextnotfoundindatabase msgid "Help context %s not found in Database %s%s%s." msgstr "Kontext nápovědy %s nenalezen v databázi %s%s%s." #: lclstrconsts.rshelphelpdatabasedidnotfoundaviewerforahelppageoftype msgid "Help Database %s%s%s did not found a viewer for a help page of type %s" msgstr "Databáze nápovědy %s%s%s nenalezla prohlížeč pro stránku nápovědy typu %s" #: lclstrconsts.rshelphelpdatabasenotfound msgid "Help Database %s%s%s not found" msgstr "Databáze nápovědy %s%s%s nenalezena" #: lclstrconsts.rshelphelpfordirectivenotfound msgid "Help for directive %s%s%s not found." msgstr "" #: lclstrconsts.rshelphelpfordirectivenotfoundindatabase msgid "Help for directive %s%s%s not found in Database %s%s%s." msgstr "" #: lclstrconsts.rshelphelpkeywordnotfound msgid "Help keyword %s%s%s not found." msgstr "Klíčové slovo %s%s%s nenalezeno." #: lclstrconsts.rshelphelpkeywordnotfoundindatabase msgid "Help keyword %s%s%s not found in Database %s%s%s." msgstr "Klíčové slovo %s%s%s nebylo nalezeno v Databázi %s%s%s" #: lclstrconsts.rshelphelpnodehasnohelpdatabase msgid "Help node %s%s%s has no Help Database" msgstr "Uzel nápovědy %s%s%s nemá Databázi nápovědy" #: lclstrconsts.rshelpnohelpfoundforsource msgid "No help found for line %d, column %d of %s." msgstr "Nápověda nenalezena pro řádek %d, sloupce %d pro %s." #: lclstrconsts.rshelpnohelpnodesavailable #, fuzzy #| msgid "No help nodes available" msgid "No help entries available for this topic" msgstr "Uzly nápovědy nejsou dostupné" #: lclstrconsts.rshelpnotfound #, fuzzy #| msgid "Help not found" msgid "No help found for this topic" msgstr "Nápověda nenalezena" #: lclstrconsts.rshelpnotregistered msgid "%s: Not registered" msgstr "%s: Neregistrováno" #: lclstrconsts.rshelpselectorerror msgid "Help Selector Error" msgstr "Chyba výběru nápovědy" #: lclstrconsts.rshelpthereisnoviewerforhelptype msgid "There is no viewer for help type %s%s%s" msgstr "Pro typ %s%s%s není prohlížeč" #: lclstrconsts.rshelpviewererror msgid "Help Viewer Error" msgstr "Chyba prohlížeče nápovědy" #: lclstrconsts.rshelpviewernotfound #, fuzzy #| msgid "Help Viewer not found" msgid "No viewer was found for this type of help content" msgstr "Prohlížeč nápovědy nenalezen" #: lclstrconsts.rshighlightcolorcaption msgid "Highlight" msgstr "Zvýraznění" #: lclstrconsts.rshighlighttextcolorcaption msgid "Highlight Text" msgstr "Zvýrazněný text" #: lclstrconsts.rshotlightcolorcaption msgid "Hot Light" msgstr "" #: lclstrconsts.rsicns #, fuzzy #| msgid "OSX Icon Resource" msgid "Mac OS X Icon" msgstr "Zdroj ikony OSX" #: lclstrconsts.rsicon msgid "Icon" msgstr "Ikona" #: lclstrconsts.rsiconimageempty msgid "Icon image cannot be empty" msgstr "Obrázek ikony nemůže být prázdný" #: lclstrconsts.rsiconimageformat msgid "Icon image must have the same format" msgstr "Obrázek ikony musí mít stejný formát" #: lclstrconsts.rsiconimageformatchange msgid "Cannot change format of icon image" msgstr "Nelze změnit formát obrázku ikony" #: lclstrconsts.rsiconimagesize msgid "Icon image must have the same size" msgstr "Obrázek ikony musí mít stejnou velikost" #: lclstrconsts.rsiconimagesizechange msgid "Cannot change size of icon image" msgstr "Nelze změnit velikost obrázku ikony" #: lclstrconsts.rsiconnocurrent msgid "Icon has no current image" msgstr "Ikona nemá aktuálně obrázek" #: lclstrconsts.rsinactivebordercolorcaption msgid "Inactive Border" msgstr "Neaktivní okraj" #: lclstrconsts.rsinactivecaptioncolorcaption msgctxt "lclstrconsts.rsinactivecaptioncolorcaption" msgid "Inactive Caption" msgstr "Neaktivní titulek" #: lclstrconsts.rsinactivecaptiontext msgctxt "lclstrconsts.rsinactivecaptiontext" msgid "Inactive Caption" msgstr "Neaktivní titulek" #: lclstrconsts.rsindexoutofbounds msgid "%s Index %d out of bounds 0 .. %d" msgstr "%s Index %d mimo rozsahy 0 .. %d" #: lclstrconsts.rsindexoutofrange msgid "Index Out of range Cell[Col=%d Row=%d]" msgstr "Index mimo rozsah Buňka[Sloupec=%d Řádek=%d]" #: lclstrconsts.rsinfobkcolorcaption msgid "Info Background" msgstr "Informační pozadí" #: lclstrconsts.rsinfotextcolorcaption msgid "Info Text" msgstr "Informační text" #: lclstrconsts.rsinsertrecordhint msgctxt "lclstrconsts.rsinsertrecordhint" msgid "Insert" msgstr "Vložit" #: lclstrconsts.rsinvaliddate msgid "Invalid Date : %s" msgstr "Neplatný Datum: %s" #: lclstrconsts.rsinvaliddaterangehint msgid "Invalid Date: %s. Must be between %s and %s" msgstr "Neplatný datum: %s. Musí být mezi %s a %s" #: lclstrconsts.rsinvalidformobjectstream msgid "invalid Form object stream" msgstr "neplatný proud objektu formuláře" #: lclstrconsts.rsinvalidpropertyvalue msgid "Invalid property value" msgstr "Neplatná hodnota vlastnosti" #: lclstrconsts.rsinvalidstreamformat msgid "Invalid stream format" msgstr "Neplatný formát proudu" #: lclstrconsts.rsisalreadyassociatedwith msgid "%s is already associated with %s" msgstr "%s již je přidružen k %s" #: lclstrconsts.rsjpeg msgid "Joint Picture Expert Group" msgstr "Joint Picture Expert Group" #: lclstrconsts.rslastrecordhint msgid "Last" msgstr "Poslední" #: lclstrconsts.rslimecolorcaption msgid "Lime" msgstr "Citrusová" #: lclstrconsts.rslistindexexceedsbounds msgid "List index exceeds bounds (%d)" msgstr "Index seznamu překročil meze (%d)" #: lclstrconsts.rslistmustbeempty msgid "List must be empty" msgstr "Seznam musí být prázdný" #: lclstrconsts.rsmarooncolorcaption msgid "Maroon" msgstr "Kaštanová" #: lclstrconsts.rsmbabort msgid "Abort" msgstr "Přerušit" #: lclstrconsts.rsmball msgid "&All" msgstr "&Všechno" #: lclstrconsts.rsmbcancel msgctxt "lclstrconsts.rsmbcancel" msgid "Cancel" msgstr "Zrušit" #: lclstrconsts.rsmbclose msgid "&Close" msgstr "&Zavřít" #: lclstrconsts.rsmbhelp msgid "&Help" msgstr "&Nápověda" #: lclstrconsts.rsmbignore msgid "&Ignore" msgstr "&Ignorovat" #: lclstrconsts.rsmbno msgid "&No" msgstr "&Ne" #: lclstrconsts.rsmbnotoall msgid "No to all" msgstr "Ne všem" #: lclstrconsts.rsmbok msgid "&OK" msgstr "&OK" #: lclstrconsts.rsmbopen msgid "&Open" msgstr "&Otevřít" #: lclstrconsts.rsmbretry msgid "&Retry" msgstr "&Znovu" #: lclstrconsts.rsmbsave msgid "&Save" msgstr "&Uložit" #: lclstrconsts.rsmbunlock msgid "&Unlock" msgstr "&Udemknout" #: lclstrconsts.rsmbyes msgid "&Yes" msgstr "&Ano" #: lclstrconsts.rsmbyestoall msgid "Yes to &All" msgstr "Ano všem" #: lclstrconsts.rsmedgraycolorcaption msgid "Medium Gray" msgstr "Středně šedá" #: lclstrconsts.rsmenubarcolorcaption msgid "Menu Bar" msgstr "Lišta menu" #: lclstrconsts.rsmenucolorcaption msgctxt "lclstrconsts.rsmenucolorcaption" msgid "Menu" msgstr "Nabídka" #: lclstrconsts.rsmenuhighlightcolorcaption msgid "Menu Highlight" msgstr "Zvýraznění menu" #: lclstrconsts.rsmenutextcolorcaption msgid "Menu Text" msgstr "Text menu" #: lclstrconsts.rsmodified msgid " modified " msgstr " upravený" #: lclstrconsts.rsmoneygreencolorcaption msgid "Money Green" msgstr "Peněžní zelená" #: lclstrconsts.rsmtauthentication msgid "Authentication" msgstr "Autentizace" #: lclstrconsts.rsmtconfirmation msgid "Confirmation" msgstr "Potvrzení" #: lclstrconsts.rsmtcustom msgid "Custom" msgstr "Volitelné" #: lclstrconsts.rsmterror msgctxt "lclstrconsts.rsmterror" msgid "Error" msgstr "Chyba" #: lclstrconsts.rsmtinformation msgid "Information" msgstr "Informace" #: lclstrconsts.rsmtwarning msgid "Warning" msgstr "Varování" #: lclstrconsts.rsnavycolorcaption msgid "Navy" msgstr "Námořnická modř" #: lclstrconsts.rsnextrecordhint msgctxt "lclstrconsts.rsnextrecordhint" msgid "Next" msgstr "Další" #: lclstrconsts.rsnonecolorcaption msgid "None" msgstr "Žádné" #: lclstrconsts.rsnotavalidgridfile msgid "Not a valid grid file" msgstr "Žádný platný soubor mřížky" #: lclstrconsts.rsnowidgetset msgid "No widgetset object. Please check if the unit \"interfaces\" was added to the programs uses clause." msgstr "Žádný objekt widgetsetu. Prosíme zkontrolujte, zda jednotka \"interfaces\" byla přidána do sekce uses programu." #: lclstrconsts.rsolivecolorcaption msgid "Olive" msgstr "Olivová" #: lclstrconsts.rspickdate msgid "Select a date" msgstr "Vybrat datum" #: lclstrconsts.rspixmap msgid "Pixmap" msgstr "Pixmapa" #: lclstrconsts.rsportablebitmap msgid "Portable BitMap" msgstr "Přenosná BitMapa" #: lclstrconsts.rsportablegraymap msgid "Portable GrayMap" msgstr "Přenositelná MapaŠedi" #: lclstrconsts.rsportablenetworkgraphic msgid "Portable Network Graphic" msgstr "Portable Network Graphic" #: lclstrconsts.rsportablepixmap msgid "Portable PixMap" msgstr "Přenositelná PixMapa" #: lclstrconsts.rspostrecordhint msgid "Post" msgstr "Odeslat" #: lclstrconsts.rspressoktoignoreandriskdatacorruptionpresscanceltok msgid "%s%sPress OK to ignore and risk data corruption.%sPress Cancel to kill the program." msgstr "%s%sStiskněte OK k ignorování a riskování poškození dat.%sStiskněte Zrušit k zabití programu." #: lclstrconsts.rspriorrecordhint msgctxt "lclstrconsts.rspriorrecordhint" msgid "Prior" msgstr "Předchozí" #: lclstrconsts.rspromptonreplace msgid "Prompt on replace" msgstr "" #: lclstrconsts.rspropertydoesnotexist msgid "Property %s does not exist" msgstr "Vlastnost %s neexistuje" #: lclstrconsts.rspurplecolorcaption msgid "Purple" msgstr "Fialová" #: lclstrconsts.rsqtoptiondograb msgid "-dograb (only under X11), running under a debugger can cause an implicit -nograb, use -dograb to override. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptiongraphicsstyle msgid "-graphicssystem param, sets the backend to be used for on-screen widgets and QPixmaps. Available options are native, raster and opengl. OpenGL is still unstable." msgstr "" #: lclstrconsts.rsqtoptionnograb msgid "-nograb, tells Qt that it must never grab the mouse or the keyboard. Need QT_DEBUG." msgstr "" #: lclstrconsts.rsqtoptionreverse msgid "-reverse, sets the application's layout direction to Qt::RightToLeft." msgstr "" #: lclstrconsts.rsqtoptionsession msgid "-session session, restores the application from an earlier session." msgstr "" #: lclstrconsts.rsqtoptionstyle msgid "-style style or -style=style, sets the application GUI style. Possible values are motif, windows, and platinum. If you compiled Qt with additional styles or have additional styles as plugins these will be available to the -style command line option. NOTE: Not all styles are available on all platforms. If style param does not exist Qt will start an application with default common style (windows)." msgstr "" #: lclstrconsts.rsqtoptionstylesheet msgid "-stylesheet stylesheet or -stylesheet=stylesheet, sets the application Style Sheet. The value must be a path to a file that contains the Style Sheet. Note: Relative URLs in the Style Sheet file are relative to the Style Sheet file's path." msgstr "" #: lclstrconsts.rsqtoptionsync msgid "-sync (only under X11), switches to synchronous mode for debugging." msgstr "" #: lclstrconsts.rsqtoptionwidgetcount msgid "-widgetcount, prints debug message at the end about number of widgets left undestroyed and maximum number of widgets existed at the same time." msgstr "" #: lclstrconsts.rsqtoptionx11bgcolor msgid "-bg or -background color, sets the default background color and an application palette (light and dark shades are calculated)." msgstr "" #: lclstrconsts.rsqtoptionx11btncolor msgid "-btn or -button color, sets the default button color." msgstr "" #: lclstrconsts.rsqtoptionx11cmap msgid "-cmap, causes the application to install a private color map on an 8-bit display." msgstr "" #: lclstrconsts.rsqtoptionx11display msgid "-display display, sets the X display (default is $DISPLAY)." msgstr "" #: lclstrconsts.rsqtoptionx11fgcolor msgid "-fg or -foreground color, sets the default foreground color." msgstr "" #: lclstrconsts.rsqtoptionx11font msgid "-fn or -font font, defines the application font. The font should be specified using an X logical font description." msgstr "" #: lclstrconsts.rsqtoptionx11geometry msgid "-geometry geometry, sets the client geometry of the first window that is shown." msgstr "" #: lclstrconsts.rsqtoptionx11im msgid "-im, sets the input method server (equivalent to setting the XMODIFIERS environment variable)." msgstr "" #: lclstrconsts.rsqtoptionx11inputstyle msgid "-inputstyle, defines how the input is inserted into the given widget, e.g. onTheSpot makes the input appear directly in the widget, while overTheSpot makes the input appear in a box floating over the widget and is not inserted until the editing is done." msgstr "" #: lclstrconsts.rsqtoptionx11name msgid "-name name, sets the application name." msgstr "" #: lclstrconsts.rsqtoptionx11ncols msgid "-ncols count, limits the number of colors allocated in the color cube on an 8-bit display, if the application is using the QApplication::ManyColor color specification. If count is 216 then a 6x6x6 color cube is used (i.e. 6 levels of red, 6 of green, and 6 of blue); for other values, a cube approximately proportional to a 2x3x1 cube is used." msgstr "" #: lclstrconsts.rsqtoptionx11title msgid "-title title, sets the application title." msgstr "" #: lclstrconsts.rsqtoptionx11visual msgid "-visual TrueColor, forces the application to use a TrueColor visual on an 8-bit display." msgstr "" #: lclstrconsts.rsrasterimageendupdate msgid "Endupdate while no update in progress" msgstr "Konec aktualizace zatímco žádná aktualizace nebyla v běhu" #: lclstrconsts.rsrasterimagesaveinupdate msgid "Cannot save image while update in progress" msgstr "Nelze uložit obrázek zatímco běží aktualizace" #: lclstrconsts.rsrasterimageupdateall msgid "Cannot begin update all when canvas only update in progress" msgstr "Nelze začít vše aktualizovat, když se aktualizuje plátno" #: lclstrconsts.rsredcolorcaption msgid "Red" msgstr "Červená" #: lclstrconsts.rsrefreshrecordshint msgid "Refresh" msgstr "Obnovit" #: lclstrconsts.rsreplace msgid "Replace" msgstr "Nahradit" #: lclstrconsts.rsreplaceall msgid "Replace all" msgstr "Nahradit vše" #: lclstrconsts.rsresourcenotfound msgctxt "lclstrconsts.rsresourcenotfound" msgid "Resource %s not found" msgstr "Zdroj %s nenalezen" #: lclstrconsts.rsscrollbarcolorcaption msgid "ScrollBar" msgstr "Posuvník" #: lclstrconsts.rsscrollbaroutofrange msgid "ScrollBar property out of range" msgstr "Vlastnost posuvníku mimo rozsah" #: lclstrconsts.rsselectcolortitle msgid "Select color" msgstr "Zvolte barvu" #: lclstrconsts.rsselectfonttitle msgid "Select a font" msgstr "Zvolte písmo" #: lclstrconsts.rssilvercolorcaption msgid "Silver" msgstr "Stříbrná" #: lclstrconsts.rssize msgid " size " msgstr " velikost " #: lclstrconsts.rsskybluecolorcaption msgid "Sky Blue" msgstr "Nebeská modrá" #: lclstrconsts.rstcustomtabcontrolaccessibilitydescription msgid "A control with tabs" msgstr "" #: lclstrconsts.rstealcolorcaption msgid "Teal" msgstr "Hluboká zelenomodrá" #: lclstrconsts.rstext msgid "Text" msgstr "Text" #: lclstrconsts.rstiff msgid "Tagged Image File Format" msgstr "Označkovaný obrazový formát souboru" #: lclstrconsts.rstpanelaccessibilitydescription msgid "Panel" msgstr "" #: lclstrconsts.rstsplitteraccessibilitydescription msgid "A grip to control how much size to give two parts of an area" msgstr "" #: lclstrconsts.rsttreeviewaccessibilitydescription msgid "A tree of items" msgstr "" #: lclstrconsts.rsunabletoloaddefaultfont msgid "Unable to load default font" msgstr "Nelze načíst výchozí písmo" #: lclstrconsts.rsunknownerrorpleasereportthisbug msgid "Unknown Error, please report this bug" msgstr "Neznámá chyba, prosíme nahlašte tuto chybu" #: lclstrconsts.rsunknownpictureextension msgid "Unknown picture extension" msgstr "Neznámá přípona obrázku" #: lclstrconsts.rsunknownpictureformat msgid "Unknown picture format" msgstr "Neznámý formát obrázku" #: lclstrconsts.rsunsupportedbitmapformat msgid "Unsupported bitmap format." msgstr "Nepodporovaný formát bitmapy." #: lclstrconsts.rsunsupportedclipboardformat msgid "Unsupported clipboard format: %s" msgstr "Nepodporovaný formát schránky: %s" #: lclstrconsts.rswarningunreleaseddcsdump msgid " WARNING: There are %d unreleased DCs, a detailed dump follows:" msgstr "VAROVÁNÍ: Existuje %d neuvolněných DC, následuje podrobný popis:" #: lclstrconsts.rswarningunreleasedgdiobjectsdump msgid " WARNING: There are %d unreleased GDIObjects, a detailed dump follows:" msgstr "VAROVÁNÍ: Existuje %d neuvolněných GDIObjects, následuje podrobný popis:" #: lclstrconsts.rswarningunreleasedmessagesinqueue msgid " WARNING: There are %d messages left in the queue! I'll free them" msgstr " VAROVÁNÍ: Ve frontě zbývá %d zpráv! Vyprázdním je." #: lclstrconsts.rswarningunreleasedtimerinfos msgid " WARNING: There are %d TimerInfo structures left, I'll free them" msgstr "VAROVÁNÍ: Zbývá %d TimerInfo struktur, Uvolním je" #: lclstrconsts.rswarningunremovedpaintmessages msgid " WARNING: There are %s unremoved LM_PAINT/LM_GtkPAINT message links left." msgstr "VAROVÁNÍ: Zbývá %s neodstraněných LM_PAINT/LM_GtkPAINT odkazů zpráv." #: lclstrconsts.rswhitecolorcaption msgid "White" msgstr "Bílá" #: lclstrconsts.rswholewordsonly msgid "Whole words only" msgstr "Pouze celá slova" #: lclstrconsts.rswin32error msgid "Error:" msgstr "Chyba:" #: lclstrconsts.rswin32warning msgid "Warning:" msgstr "Varování:" #: lclstrconsts.rswindowcolorcaption msgid "Window" msgstr "Okno" #: lclstrconsts.rswindowframecolorcaption msgid "Window Frame" msgstr "Rámeček okna" #: lclstrconsts.rswindowtextcolorcaption msgid "Window Text" msgstr "Text okna" #: lclstrconsts.rsyellowcolorcaption msgid "Yellow" msgstr "Žlutá" #: lclstrconsts.scannotfocus msgid "Cannot focus a disabled or invisible window" msgstr "Nelze zaktivnit zakázané nebo neviditelné okno" #: lclstrconsts.sduplicatemenus msgid "Duplicate menus" msgstr "Zdvojené menu" #: lclstrconsts.sinvalidactioncreation msgid "Invalid action creation" msgstr "Neplatná vytvářecí akce" #: lclstrconsts.sinvalidactionenumeration msgid "Invalid action enumeration" msgstr "Neplatná výčtová akce" #: lclstrconsts.sinvalidactionregistration msgid "Invalid action registration" msgstr "Neplatná registrační akce" #: lclstrconsts.sinvalidactionunregistration msgid "Invalid action unregistration" msgstr "Neplatná odregistrační akce" #: lclstrconsts.sinvalidcharset msgid "The char set in mask \"%s\" is not valid!" msgstr "Znaková sada v masce \"%s\" není platná!" #: lclstrconsts.sinvalidimagesize msgid "Invalid image size" msgstr "Neplatná velikost obrázku" #: lclstrconsts.sinvalidindex msgid "Invalid ImageList Index" msgstr "Neplatný index ImageList" #: lclstrconsts.smaskeditnomatch msgid "The current text does not match the specified mask." msgstr "" #: lclstrconsts.smenuindexerror msgid "Menu index out of range" msgstr "Index menu mimo rozsah" #: lclstrconsts.smenuitemisnil msgid "MenuItem is nil" msgstr "Položka menu je nil" #: lclstrconsts.smenunotfound msgid "Sub-menu is not in menu" msgstr "Podmenu není v menu" #: lclstrconsts.smkcalt msgid "Alt+" msgstr "Alt+" #: lclstrconsts.smkcbksp msgid "BkSp" msgstr "BkSp" #: lclstrconsts.smkcctrl msgid "Ctrl+" msgstr "Ctrl+" #: lclstrconsts.smkcdel msgid "Del" msgstr "Smazat" #: lclstrconsts.smkcdown msgctxt "lclstrconsts.smkcdown" msgid "Down" msgstr "Dolů" #: lclstrconsts.smkcend msgctxt "lclstrconsts.smkcend" msgid "End" msgstr "Konec" #: lclstrconsts.smkcenter msgid "Enter" msgstr "Enter" #: lclstrconsts.smkcesc msgid "Esc" msgstr "Esc" #: lclstrconsts.smkchome msgctxt "lclstrconsts.smkchome" msgid "Home" msgstr "Domů" #: lclstrconsts.smkcins msgid "Ins" msgstr "Vložit" #: lclstrconsts.smkcleft msgctxt "lclstrconsts.smkcleft" msgid "Left" msgstr "Doleva" #: lclstrconsts.smkcmeta msgid "Meta+" msgstr "Meta+" #: lclstrconsts.smkcpgdn msgid "PgDn" msgstr "PgDn" #: lclstrconsts.smkcpgup msgid "PgUp" msgstr "PgUp" #: lclstrconsts.smkcright msgctxt "lclstrconsts.smkcright" msgid "Right" msgstr "Doprava" #: lclstrconsts.smkcshift msgid "Shift+" msgstr "Shift+" #: lclstrconsts.smkcspace msgid "Space" msgstr "Mezerník" #: lclstrconsts.smkctab msgctxt "lclstrconsts.smkctab" msgid "Tab" msgstr "Tab" #: lclstrconsts.smkcup msgctxt "lclstrconsts.smkcup" msgid "Up" msgstr "Nahoru" #: lclstrconsts.snomdiform msgid "No MDI form present." msgstr "Nepřítomno žádné MDI okno." #: lclstrconsts.snotimers msgid "No timers available" msgstr "Nedostupné žádné časovače" #: lclstrconsts.sparexpected msgid "Wrong token type: %s expected" msgstr "Nesprávný typ symbolu: očekáváno %s" #: lclstrconsts.sparinvalidfloat msgid "Invalid floating point number: %s" msgstr "Neplatné desetinné číslo: %s" #: lclstrconsts.sparinvalidinteger msgid "Invalid integer number: %s" msgstr "Neplatné celé číslo: %s" #: lclstrconsts.sparlocinfo #, fuzzy #| msgid " (at %d,%d, stream offset %.8x)" msgid " (at %d,%d, stream offset %d)" msgstr " (u %d,%d, posun proudu %.8x)" #: lclstrconsts.sparunterminatedbinvalue msgid "Unterminated byte value" msgstr "Nepřerušená bajtová hodnoty" #: lclstrconsts.sparunterminatedstring msgid "Unterminated string" msgstr "Neukončený řetězec" #: lclstrconsts.sparwrongtokensymbol msgid "Wrong token symbol: %s expected but %s found" msgstr "Nesprávný symbol: Očekáváno %s, ale nalezeno %s" #: lclstrconsts.sparwrongtokentype msgid "Wrong token type: %s expected but %s found" msgstr "Nesprávný typ symbolu: Očekáváno %s, ale nalezeno %s" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.ru.po������������������������������������������������������������0000644�0001750�0000144�00001375633�12671115613�017250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0 alpha\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2016-03-12 20:10+0400\n" "Last-Translator: Alexander Koblov <alexx2000@mail.ru>\n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Русский\n" "X-Generator: Poedit 1.7.4\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Сравнение... %d%% (ESC для отмены)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Справа: Удалить файлы (%d шт.)" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Найдено файлов: %d (Одинаковых: %d, Различных: %d, Уникальных слева: %d, Уникальных справа: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Слева направо: Копируется файлов: %d, общий размер: %d байт" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Справа налево: Копируется файлов: %d, общий размер: %d байт" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Все" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Настройка набора колонок" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Фон &1:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Рамка вокруг курсора" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Раскраска файлов" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Использовать шрифт и цвета" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "&Текст:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Шрифт:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Размер:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Фон &2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Настройка набора номер:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Курсор:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Текст под курсором:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Выделение:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Имя:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Добавить колонку" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Настроить колонку: " #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Предварительный просмотр" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Выбрать шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Проверять свобо&дное место" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Копировать атрибуты" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "К&опировать владельца" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Копировать права доступа" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Копировать дат&у/время" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Исп&равлять ссылки" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "С&бросить флаг \"Только для чтения\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "&Исключить пустые каталоги" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "С&ледовать ссылкам" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Р&езервировать место" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgctxt "tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint" msgid "What to do when cannot set file time, attributes, etc." msgstr "Что делать, когда не удается установить время файла, его атрибуты и т.д." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Использовать шаблон" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Если к&аталог существует" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Если &файл существует" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Если &нельзя устан. свойство" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<нет шаблона>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Копировать" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Сборка" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашняя страница:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Ревизия" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Версия" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Сбросить" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Выбрать атрибуты" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Архивный" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "С&жатый" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Каталог" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Зашифрованный" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ск&рытый" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "&Только для чтения" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Разрежённ&ый" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закре&пляющий бит" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Ссы&лка" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "С&истемный" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Временны&й" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Атрибуты NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Основные атрибуты" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Как т&екст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Посчитать контрольные суммы..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Открыть файл контрольной суммы после расчёта" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Д&ля каждого файла создать отдельный файл контрольной суммы" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Сохранить файл(ы) контрольных сумм как:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Проверить контрольные суммы..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Со&единиться" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Редактировать" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Сетевые соединения" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Соединиться с:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&В очередь" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "О&пции" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Со&хранить по умолчанию" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Копировать файл(ы)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Новая очередь" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Очередь 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Очередь 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Очередь 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Очередь 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Очередь 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Сохранить описание" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Комментарий к файлу/папке" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Правка комментария к:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Кодировка:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "О программе" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Автоматическое сравнение" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Бинарный режим" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Отмена" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Копировать блок направо" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Копировать блок направо" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Копировать блок налево" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Копировать блок налево" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "В&ырезать" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "&Вставить" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторить" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Выделить в&сё" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отменить" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Выход" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Первое отличие" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Первое отличие" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Не учитывать регистр" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Не учитывать пробелы" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Одновременная прокрутка" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Последнее отличие" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Последнее отличие" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Разница строк" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Следующее отличие" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Следующее отличие" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Открыть слева..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Открыть справа..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Подсвечивать фон" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Предыдущее отличие" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Предыдущее отличие" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "П&ерезагрузить" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Перезагрузить" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Сохранить" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Сохранить" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Сохранить как..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Сохранить как..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Сохранить слева" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Сохранить слева" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Сохранить слева как..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Сохранить слева как..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Сохранить справа" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Сохранить справа" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Сохранить справа как..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Сохранить справа как..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Сравнить" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Сравнить" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Кодировка" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Кодировка" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Сравнить файлы" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "С&лева" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "С&права" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "Действия" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Настройка" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Добавить новое сочетание клавиш к последовательности" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Удалить последнее сочетание клавиш из последовательности" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Только для этих элементов" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Параметры (каждый в отдельной строке)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Сочетание клавиш:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "О программе..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Настройка" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Конфигурация" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Копировать" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "&Вырезать" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Вырезать" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "&Удалить" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Удалить" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find" msgstr "&Найти..." #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Найти" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Найти далее" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Найти далее" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Перейти к строке..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вст&авить" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Вставить" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "&Повторить" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Повторить" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Заменить..." #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Заменить" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "В&ыделить всё" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Выделить всё" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "&Отменить" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Отменить" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Закрыть" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Выход" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Создать" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Создать" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Открыть" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Открыть" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Со&хранить" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Сохранить" #: tfrmeditor.actfilesaveas.caption msgid "Save &As..." msgstr "Сохранить &как..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Сохранить как..." #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Сохранить &все" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Сохранить все" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Редактор" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmeditor.menuitem1.caption msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Открыть как" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Сохранить как" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Подсветка &синтаксиса" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Конец строки" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Учитывать регистр" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Искать от &курсора" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регулярные выражения" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "В в&ыделенном тексте" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Только слово &целиком" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Опции" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Заменить:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Н&айти:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Направление" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Распаковать файлы" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Учитывать подкаталоги" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Распаковать каждый &архив в отдельный каталог (с именем архива)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Заменять существующие файлы" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "В &каталог:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Распаковать файлы согласно маске:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Пароль (для зашифрованных файлов):" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Добавить" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Добавить" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "До&бавить" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Вниз" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "&Удалить" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Уд&алить" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Уда&лить" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Пе&реименовать" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Вв&ерх" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Файловые ассоциации" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Действия" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Расширения" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Типы файлов" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Значок" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Действие:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Команда:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Редактировать" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Открыть в редакторе" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Путь к файлу" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Полный путь" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Получить вывод команды" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Открыть" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустить в терминале" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Открыть в VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Просмотреть" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Открыть в просмотрщике" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Подождите..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Имя файла:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Нажмите \"Закрыть\", когда временный файл можно будет удалить!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На панель" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Показать все" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Текущая операция:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "в:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Установить" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "У&становить для всех" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Пропустить" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закрепляющий бит" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Содержит:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Имя:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путь:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Группа" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последний доступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последнее изменение:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Последнее изменение статуса:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Восьмеричный:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Владелец" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. ссылка" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfinddlg.actcancel.caption msgctxt "tfrmfinddlg.actcancel.caption" msgid "Cancel" msgstr "Отмена" #: tfrmfinddlg.actcancelclose.caption msgid "Cancel search and close window" msgstr "Отменить поиск и зыкрыть окно поиска" #: tfrmfinddlg.actclose.caption msgctxt "tfrmfinddlg.actclose.caption" msgid "Close" msgstr "Закрыть" #: tfrmfinddlg.actedit.caption msgctxt "tfrmfinddlg.actedit.caption" msgid "Edit" msgstr "Редактровать" #: tfrmfinddlg.actfeedtolistbox.caption msgid "Feed to listbox" msgstr "Файлы на панель" #: tfrmfinddlg.actgotofile.caption msgid "Go to file" msgstr "Перейти к файлу" #: tfrmfinddlg.actintellifocus.caption msgctxt "tfrmfinddlg.actintellifocus.caption" msgid "Find Data" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "Last search" msgstr "Последний поиск" #: tfrmfinddlg.actnewsearch.caption msgid "New search" msgstr "Новый поиск" #: tfrmfinddlg.actpageadvanced.caption msgid "Go to page \"Advanced\"" msgstr "Перейти к вкладке \"Расширенный\"" #: tfrmfinddlg.actpageloadsave.caption msgid "Go to page \"Load/Save\"" msgstr "Перейти к вкладке \"Загрузить/Сохранить\"" #: tfrmfinddlg.actpageplugins.caption msgid "Go to page \"Plugins\"" msgstr "Перейти к вкладке \"Плагины\"" #: tfrmfinddlg.actpageresults.caption msgid "Go to page \"Results\"" msgstr "Перейти к вкладке \"Загрузить/Сохранить\"" #: tfrmfinddlg.actpagestandard.caption msgid "Go to page \"Standard\"" msgstr "Перейти к вкладке \"Стандартный\"" #: tfrmfinddlg.actstart.caption msgctxt "tfrmfinddlg.actstart.caption" msgid "Start" msgstr "Старт" #: tfrmfinddlg.actview.caption msgctxt "tfrmfinddlg.actview.caption" msgid "View" msgstr "Просмотр" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавить" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmfinddlg.btnedit.caption msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Пр&авка" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "Пере&йти к файлу" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "&Предыдущий поиск" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Н&овый поиск" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Сохранить" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "З&агрузить" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Со&хранить" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Сох&ранить с \"Начинать с каталога\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "При нажатии сохраняется значение \"Начинать с каталога\". Используйте, если хотите начинать поиск только с определенного каталога" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Старт" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Отмена" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Использовать шаблон" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "П&росмотр" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Фай&лы на панель" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Поиск файлов" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "С &учётом регистра" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Дата от:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Да&та до:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Р&азмер от:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Раз&мер до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Искать в ар&хивах" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Искать в файле &текст" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "С&ледовать ссылкам" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Файлы, &НЕ содержащие этот текст" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Н&е старше чем:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Поис&к по части имени" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регулярное выражение" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "З&аменить текст" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "&Выбранные файлы и каталоги" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Регулярное &выражение" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Время от:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "В&ремя до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Использовать поисковый плагин:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Введите имена каталогов, которые должны быть исключены из поиска, разделённых символом \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Введите имена файлов, которые должны быть исключены из поиска, разделённых символом \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Введите имена файлов, разделённых символом \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файлы" #: tfrmfinddlg.gbfinddata.caption msgctxt "tfrmfinddlg.gbfinddata.caption" msgid "Find Data" msgstr "С текстом" #: tfrmfinddlg.lblattributes.caption msgctxt "tfrmfinddlg.lblattributes.caption" msgid "Attri&butes" msgstr "Атри&буты" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Ко&дировка:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Искл&ючать подкаталоги" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Исключать файлы:" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Искать &файлы:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Н&ачинать с каталога:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Глубина вло&женности подкаталогов:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Сохранённые &шаблоны поиска:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Открыть в новой вкладке(ах)" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Убрать из списка" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Показать все найденные элементы" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Показать в редакторе" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Просмотр" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Расширенный" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Шаблоны поиска" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Плагины" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Результаты" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Стандартный" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Найти" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Найти" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "С учётом &регистра" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Создать жёсткую ссылку" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "На &что указывает" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Имя ссылки" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Импортировать все" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Импортировать выделенный" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Выделите элементы для импорта" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "При выборе подменю, будет выделено всё меню" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Удерживая CTRL и нажимая на объекты, можно выделить сразу несколько объектов" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Сборка" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Сохранить как..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Элемент" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Имя &файла" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Вниз" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Вниз" #: tfrmlinker.spbtnrem.caption msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Уда&лить" #: tfrmlinker.spbtnrem.hint msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Удалить" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Вв&ерх" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Вверх" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&О программе..." #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Добавить имя файла в командную строку" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Добавить путь и имя файла в командную строку" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Копировать путь в командную строку" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Краткий" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Краткий вид" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Рассчитать &занимаемое место..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Сменить каталог" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Перейти в домашний каталог" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Перейти в родительский каталог" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Перейти в корневой каталог" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Посчитать &контрольные суммы..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Проверить ко&нтрольные суммы..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очистить лог файл" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очистить окно протокола" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Закрыть &все вкладки" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Закрыть &дубликаты вкладок" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Закрыть вкладку" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Следующая командная строка" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Выбрать следующую команду в истории командной строки" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Предыдущая командная строка" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Выбрать предыдущую команду в истории командной строки" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Подробный" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Колоночный вид" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Сравнивать п&о содержимому" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Сравнить &каталоги" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Сравнить &каталоги" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Настройка Избранных каталогов" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Настройка Избранных Вкладок" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Настройка вкладок каталогов" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Панель инструментов..." #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показать контекстное меню" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Копировать" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Скопировать все вкладки на противоположную панель" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Копировать &содержимое всех колонок" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Копировать по&лные имена файлов" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Копировать имена фа&йлов в буфер" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Копирует файлы без запроса подтверждения" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Копировать полный путь выделенного файла(ов) без конечного разделителя каталогов" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Копировать полный путь выделенного файла(ов)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Копировать в ту же панель" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Копировать" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Показать размеры все&х папок" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Вырезать" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Показать параметры команды" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "История каталогов" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Избранные каталоги" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Выбрать любую команду и выполнить её" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Правка" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Редактировать ко&мментарий..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Редактировать новый" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Редактировать путь в заголовке панели" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "П&оменять панели местами" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Р&аспаковать..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Настройка файловых &ассоциаций" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Склеить файлы..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "С&войства..." #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Разрезать файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Показать все фа&йлы без подкаталогов" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Перейти к командной строке" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Поместить курсор на первый файл в списке" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Поместить курсор на последний файл в списке" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Создать &жёсткую ссылку..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Содержание" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Панели одна над другой" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Горячие клавиши" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Краткий вид в левой панели" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Колоночный вид в левой панели" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Левая &= Правая" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Показать все фа&йлы без подкаталогов в левой панели" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Открыть список дисков слева" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Обра&тить порядок в левой панели" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Сортировка левой панели по &атрибутам" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Сортировка левой панели по &дате" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Сортировка левой панели по &расширению" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Сортировка левой панели по &имени" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Сортировка левой панели по &размеру" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Просмотр эскизов в левой панели" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Загрузить вкладки из Избранных Вкладок" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Загрузить выделение из &буфера" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Загрузить выделение из &файла..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Загрузить вкладки из файла" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Создать &каталог" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Выделить файлы по рас&ширению" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Инверсия выделения" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Выделить все" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "&Снять выделение с группы..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Выделить &группу..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "С&нять выделение со всех" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Свернуть" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Групповое &переименование" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Соединиться с сервером..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Ра&зорвать соединение" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Новое соединение..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Н&овая вкладка" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Загрузить вкладки из следующего списка Избранных Вкладок" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Переключиться на с&ледующую вкладку" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Открыть" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Попробовать открыть архив" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Открыть bar файл" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Открыть &каталог в новой вкладке" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Откр&ыть список VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Фа&йловые операции" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Параметры..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Упаковать..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Установить позицию разделителя" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Вставить" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Загрузить вкладки из предыдущего списка Избранных Вкладок" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Переключиться на &предыдущую вкладку" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Быстрый фильтр" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Быстрый поиск" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Быстрый просмотр" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Обновить" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Перезагрузить последние загруженные Избранные Вкладки" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Переместить" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Перемещает файлы без запроса подтверждения" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Переименовать" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Переи&меновать вкладку" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Пересохранить последние загруженные Избранные Вкладки" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Восс&тановить выделение" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Обра&тный п&орядок" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Краткий вид в правой панели" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Колоночный вид в правой панели" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Правая &= Левая" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Показать все фа&йлы без подкаталогов в правой панели" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Открыть список дисков справа" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Обра&тить порядок в правой панели" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Сортировка правой панели по &атрибутам" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Сортировка правой панели по &дате" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Сортировка правой панели по &расширению" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Сортировка правой панели по &имени" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Сортировка правой панели по &размеру" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Просмотр эскизов в правой панели" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Пуск &терминала" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Сохранить текущие вкладки как Новые Избранные Вкладки" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "С&охранить выделение" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Со&хранить выделение в файл..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Сохранить вкладки в файл" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Поиск..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Заблокировать все вкладки и открывать каталоги в новой вкладке" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Установить все вкладки как Обычная" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Установить все вкладки как Заблокированная" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Заблокировать все вкладки с возможностью смены каталога" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Изменить атри&буты" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "О&ткрывать каталоги в новой вкладке" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обычная" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Заблокированная" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "З&аблокировать с возможностью смены каталога" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Открыть" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Открыть, используя системные ассоциации" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показать кнопочное меню" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "История командной строки" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Меню" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "По&казывать системные файлы" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "&Атрибуты" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "&Дата" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Рас&ширение" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "&Имя" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "&Размер" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Открыть список дисков" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Функция исключений файловых имён: вкл/выкл" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Создать символ&ьную ссылку..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "&Синхронизировать каталоги..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "&Две одинаковых панели" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Про&тестировать архив(ы)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Эскизы" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Просмотр эскизов" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Переключить окно консоли в режим полного экрана" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Открыть каталог под курсором на левой панели" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Открыть каталог под курсором на правой панели" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Дерево каталогов" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Сортировка по параметрам" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Снять выделение по расши&рению" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Просмотр" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показать историю каталогов для активной вкладки" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Перейти к следующему элементу истории" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Перейти к предыдущему элементу истории" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Просмотреть содержимое лог-файла" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Посетить сайт Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Стереть" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Работа с Избранными каталогами и параметрами" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Выход" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Каталог" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Открыть в левой панели текущий каталог правой" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Перейти в домашний каталог" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Перейти в корневой каталог" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Перейти в вышестоящий каталог" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Открыть в правой панели текущий каталог левой" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Путь" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Копировать..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Создать &ссылку..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Очистить" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Скрыть" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Выделить &всё" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Переместить..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Создать символьную сс&ылку..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Опции вкладки" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "В&ыход" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Восстановить" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Старт" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Отмена" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Команды" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Настройка" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Избранное" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файлы" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Выделение" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Сеть" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Ви&д" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Опции вкладки" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Вк&ладки" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "&Копировать" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "В&ырезать" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Удалить" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Редактировать" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "&Вставить" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "О&тмена" #: tfrmmaincommandsdlg.btnok.caption msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&ОК" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Выберите внутреннюю команду" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Выбрать все категории по умолчанию" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Выбор:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Категории:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Название команды:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Фильтр:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Подсказка:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Горячая клавиша:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Категория" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помощь" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Подсказка" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Горячая клавиша" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Шаблон..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&Или выберите тип файлов по шаблону:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Создать новый каталог" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Введите имя каталога:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Новый размер" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Высота:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Качество сжатия JPEG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Высота" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Удалить" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "З&агрузить" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Переименовать" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "&Восстановить всё" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Сохранить" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Групповое переименование" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Вкл&ючено" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Регулярные выражения" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Под&становка" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Расширение" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Счётчик" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Найти и заменить" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Результат" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Шаблоны" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Рас&ширение" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Найти..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Интервал" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "И&мя файла" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Заменит&ь..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "На&ч. знач." #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Ши&рина" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Счётчик" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] День" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] День (2 цифры)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] День недели (краткий, т.е., \"Пн\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] День недели (полный, т.е., \"понедельник\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Символ с позиции x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Символы с позиции x по y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Час (2 цифры)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Минута" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Минута (2 цифры)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месяц" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месяц (2 цифры)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Наименование месяца (краткий, т.е., \"янв\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Наименование месяца (полный, т.е., \"Январь\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Имя" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Символ с позиции x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Символы с позиции x по y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Время..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Расширение..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Имя..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Плагин" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунда (2 цифры)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Год (2 цифры)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Год (4 цифры)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Старое имя" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Новое имя" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Путь файла" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Выбор приложения" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Пользовательская команда" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Сохранить ассоциацию" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Установить как приложение по умолчанию" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Тип открываемого файла: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Список файлов" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Список URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Один файл" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Один URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Применить" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Настройка" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Выберите одну из подстраниц, эта страница не содержит никаких настроек" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "&Автонастройка" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "&Удалить" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "П&ереименовать" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Ре&жим отладки" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "В&ключен" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Пока&зывать консольный вывод" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Настройка" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "До&бавить:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Рас&ширение:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "И&звлечь:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Сп&исок:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Коне&ц списка (необязательный):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Фор&мат списка:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "На&чало списка (необязательный):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Ар&хиватор:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Оп&исание:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Дополнительные" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Основные" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "При изменении &размера, даты или атрибутов" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Для следующих каталогов и их подкаталогов:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "При &создании, удалении и переименовании файлов" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Не реаг&ировать на изменения, если окно DC неактивно" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Отключить автообновление" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Обновлять список файлов" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Вс&егда показывать иконку в трее" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "С&крывать отмонтированные устройства" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "С&ворачивать в системный трей" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Не запускать более одной копии DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Введите один или несколько дисков, точек монтирования, разделяемые \";\"" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Чёрный список дисков" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Размер колонок" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показывать расширения файлов" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&Выровненными (по Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&Сразу после имени" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Автоматически" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Фиксированное число колонок" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Фиксированная ширина колонок" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Обр&езать текст по ширине колонки" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Горизонтальные линии" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Вертикальные линии" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "&Растягивать колонки на всю ширину панели" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Показывать сетку" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Автоматически изменять размер колонок" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "И&зменять размер колонки:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Р&едактировать" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Историю командной строки" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "И&сторию каталогов" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Историю &масок файлов" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Со&хранять конфигурацию" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Истори&ю поиска/замены" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Месторасположение файлов конфигурации" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Сохранять при выходе" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Сортировка дерева конфигурации (слева)" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Задано через командную строку" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "&Каталог программы (portable version)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "&Домашний каталог пользователя" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Все" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Применить изменения ко всем колонкам" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Удалить" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Перейти к умолчаниям" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Создать" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Далее" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Назад" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Восстановить значение по умолчанию" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Сохранить как" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Сохранить" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Раскраска файлов" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Изменять для всех колонок" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Основные" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Рамка вокруг курсора" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Использовать курсор-рамку" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Выделение в неактивной панели" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Использовать Инверсное выделение" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Использовать пользовательский шрифт и цвет" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Фон 1:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "&Настроить набор:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Курсор:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Текст под курсором:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Шрифт:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Размер:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Текст:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивный курсор:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивное выделение:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Выделение:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ниже находится предварительный просмотр. Вы можете перемещать курсор и выбирать файлы, чтобы получить полное представление о выбранных настройках." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Настройки колонки:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Добавить колонку" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Позиция панели после сравнения:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Добавить..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Резервирование..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Удалить..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Помощь" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Вставить..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Разное..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Некоторые функции для выбора подходящего назначения" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Сортировать..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "При добавлении папки, также добавить папку назначения" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Всегда разворачивать дерево" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Показывать только приемлемые переменные окружения" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "В контекстном меню показывать также и путь" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Имя, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Имя, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Избранные каталоги (сортируйте перетаскиванием)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Другие настройки" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Имя:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Путь:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Целевой путь:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "каталог активной панели" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "каталоги активной и неактивной панелей" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "команду" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Добавить команду" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "копия выделенного элемента" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Добавить копию выделенного элемента" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "разделитель" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Добавить разделитель" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "подменю" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Добавить подменю" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "каталог, который выберу" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Свернуть все" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...текущий уровень элемента(ов) только для выделенных" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "текущие выделенные или активные каталоги в активной панели" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Вырезать" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "удалить все!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "подменю и все его элементы" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "только подменю без элементов" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "выделенный элемент" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Удалить выделенный элемент" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Сканировать все пути в избранных для проверки на существование" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Сканировать все пути в избранных и назначениях для проверки на существование" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "в файл Избранных каталогов (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" от TC (оставить существующий)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" от TC (удалить существующий)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Перейти к настройкам, связанным с TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Перейти к настройкам, связанным с TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "из файла Избранных каталогов (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "из файла \"wincmd.ini\" от TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Открыть все ветки" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "&Вставить" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Восстановить из резервной копии Избранных каталогов" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Сохранить резервную копию Избранных каталогов" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Найти и заменить..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "в пути..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "в целевом пути..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "в пути и целевом пути..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, от А до Я!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...только одну группу элементов" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортировать только одну группу элементов" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...содержимое подменю выделено, не подуровень" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...содержимое подменю выделено и все подуровни" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Проверить полученное меню" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "каталог, который буду вводить вручную" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Добавить каталог, который буду вводить" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Вставить каталог, который буду вводить" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Добавление из главной панели:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Из всех поддерживаемых форматов, спрашивать, какой будет использоваться каждый раз" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "При сохранении Юникод текста, сохранять в формате UTF8 (или будет UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "При перетаскивании текста, генерировать имя файла автоматически (или будет спрашивать)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "По&казать диалог подтверждения после окончания перетаскивания" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При перетаскивании текста в панели:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Положить в наиболее желаемый формат из начала списка (используйте перетаскивание):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(если наиболее приемлемое не представлено, мы возьмём второе и так далее)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(не будет работать с некоторыми приложениями, поэтому, если есть проблемы, то попробуйте снять галочку)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Тип &файловой системы" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "&Свободное место" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "&Метка" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Список дисков" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Прокручивать за конец строки" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Показывать специальные символы" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Опции встроенного редактора" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Фо&н" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Сбросить" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Сохранить" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Атрибуты элементов" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Цвет текста" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Цвет текста" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "О&тметка" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Использовать (и менять) &глобальную схему" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Использовать &локальную схему" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Жирный" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "К&урсив" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Зачёркнутый" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "По&дчёркнутый" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "О&братить" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "В&ыкл." #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Вкл." #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Добавить..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Удалить..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Импортировать/Экспортировать" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Вставить..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Сортировать..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Нет" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Всегда разворачивать дерево" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Нет" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Список Избранных Вкладок (сортируйте перетаскиванием)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Другие настройки" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Что восстановить для выбранной записи:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Существующие вкладки держать:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Сохранять историю каталогов:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Вкладки сохранённые слева будут восстановлены:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Вкладки сохранённые справа будут восстановлены:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "разделитель" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Добавить разделитель" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "подменю" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Добавить подменю" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Свернуть все" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...текущий уровень элемента(ов) только для выделенных" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Вырезать" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "удалить все!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "подменю и все его элементы" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "только подменю без элементов" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "выделенный элемент" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Удалить выделенный элемент" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Экспортировать выбранное в устаревший .tab файл(ы)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Импортировать устаревший .tab файл(ы) в соответствии с настройками по умолчанию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Импорт устаревших .tab файл(ов) в выбранную позицию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Импорт устаревших .tab файл(ов) в выбранную позицию" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Импорт устаревших .tab файл(ов) в выбранную позицию подменю" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Вставить разделитель" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Вставить подменю" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Открыть все ветки" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Вставить" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Переименовать" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, от А до Я!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...только одну группу элементов" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортировать только одну группу элементов" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...содержимое подменю выделено, не подуровень" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...содержимое подменю выделено и все подуровни" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Проверить полученное меню" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Добавить" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Добавить" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Клонировать" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Вниз" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Редактировать" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Вставить" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "Вставить" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Удалить" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Уд&алить" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Уда&лить" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пе&реименовать" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Вв&ерх" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Путь запуска команды. Не использовать кавычки." #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Название действия. Оно никогда не передаётся в систему, это просто выбранное вами мнемоническое имя, для вас" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "Параметр команды. Длинное имя файла с пробелами должно быть заключено в кавычки." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "Команда для выполнения. Длинное имя файла с пробелами должно быть заключено в кавычки." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Описание действия:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Действия" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Расширения" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Типы файлов" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Значок" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Действия могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Расширения могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Типы файлов могут быть отсортированы перетаскиванием" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Название:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Команда:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметры:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Путь запуска:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "П&уть запуска:" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Пользовательское с..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Пользовательское" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Редактировать" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Открыть в редакторе" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Редактировать с помощью..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Получить вывод команды" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Открыть во встроенном редакторе" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Открыть во встроенном просмотрщике" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Открыть" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Открыть с помощью..." #: tfrmoptionsfileassoc.miseparator.caption msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустить в терминале" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Просмотр" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Открыть в просмотрщике" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Просмотреть с помощью..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Нажмите здесь для смены иконки" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Запустить с помощью оболочки" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Расширенное контекстное меню" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Если доступна ассоциация файлов, предлагаем добавить текущий выбранный файл, если он ещё не входит в конфигурацию типа файла" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Настроить файловые ассоциации" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Предлагать добавить выделение в файловые ассоциации если ещё не включены" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Если доступна ассоциация файлов, предлагаем добавить текущий выбранный файл, если он ещё не входит в конфигурацию типа файла" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Запустить в терминале и закрыть" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Запустить в терминале и оставить открытым" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Настройки дополнительных пунктов:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Показывать окно подтверждения для следующих операций:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "&Копирования" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Удаления" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Уд&аление в Корзину (с Shift - око&нчательно)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "У&даления в корзину" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Сбросить флаг \"Только для чтения\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "П&еремещения" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "По&иск по части имени" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "О&брабатывать комментарии с файлами/папками" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "П&ри переименовании выделять имя файла без расширения" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Показ&ывать панель выбора вкладок в диалоге копирования/перемещения" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Пропускать о&шибки при файловых операциях и выводить их в окно лога" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Поиск текста в файлах" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Операции исполнения" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Поиск файлов" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Пользовательский интерфейс" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Ра&змер буфера для файловых операций (Кб):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Размер буфера для вычисления &хэш (Кб):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Показыват&ь прогресс операций в" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Шаблон поиска по умолчанию:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Стиль автопереименования совпадающих имён:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Число перезаписе&й при стирании (Wipe):" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Использовать отобра&жение в память" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Испо&льзовать поток" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Сбросить на умолчания DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Раскраска файлов" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "К&урсор-рамка" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Использовать &градиентный индикатор" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Курсор в неактивной панели" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Инверсное в&ыделение" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Рамка вокруг курсора" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Индикатор свободного места" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Фон 1:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Фо&н 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Курсор:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Т&екст под курсором:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Неактивный курсор:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Неактивное выделение:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Уровень &яркости неактивной панели" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Цвет фона &индикатора:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Цвет индикатора:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Выделение:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Ниже находится предварительный просмотр. Вы можете перемещать курсор и выбирать файлы, чтобы получить полное представление о выбранных настройках." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "&Текст:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Не загружать список файлов, пока вкладка активируется" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Показыват&ь квадратные скобки вокруг имён папок" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "По&дсвечивать новые и изменённые файлы" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Включить &переименование прямо в строке по двойному щелчку по имени" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Загру&жать список файлов в отдельном потоке" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "За&гружать иконки после списка файлов" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgid "Show s&ystem and hidden files" msgstr "Показывать систе&мные файлы" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При в&ыделении файлов пробелом перемещать курсор на следующий файл" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Форматирование" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Сортировка" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&Чувствительность к регистру:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неверный формат" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Формат даты и времени:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Формат ра&змера файла:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Вставлять новые файлы" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Со&ртировка каталогов:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Метод &сортировки:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "П&еремещать изменённые файлы" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Удалить" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Цвета по типу (сортировка перетаскиванием)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Атрибуты:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Цвет:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Наименование:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Консоли" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "&Редактора" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Протоко&ла" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "О&сновной" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Просмотрщика (режим \"&Книга\")" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Прос&мотрщика" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "&Добавить" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Удалить" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "&Редактировать" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Фильтр" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "К&атегории:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ко&манды:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Набор горячих клавиш:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Команда" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Горячие клавиши" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Описание" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Горячая клавиша" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Параметры" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Элементы" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для следующих &каталогов и их подкаталогов:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Показывать значки для &команд в меню" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Показывать овер&лейные значки (например, для ярлыков)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Отключить загрузку специальных иконок" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Значки в меню" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Размер значков " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Показ значков, связанных с типом файлов " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Все" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Вс&е ассоциированные + EXE/LNK (медленно)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Не показывать значки" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Только &стандартные" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Добавить все выделенные" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "До&бавить все выделенные с путями" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Исключить (не показывать) следующие файлы и каталоги:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Сохранить в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "П&равая и левая стрелки изменяют каталог (Lynx-поведение)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Ввод" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Б&уква" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Бу&ква" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Буквы" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "П&лоские" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Плоский инт&ерфейс" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Пло&ские" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "&Индикатор свободного места на диске" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Окно протокола" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Панель фонов&ых операций" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Об&щий прогресс в меню" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Ко&мандная строка" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Имя тек&ущего каталога" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Кнопки &дисков" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Строка сво&бодного места на диске" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "К&нопка списка дисков" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Кнопки &функциональных клавиш" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "&Главное меню" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show tool&bar" msgstr "П&анель инструментов" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "К&ратко" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Строка состо&яния" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "&Заголовки табуляторов" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "В&кладки каталогов" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Консол&ь" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Д&ве панели кнопок дисков (над файловыми панелями)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Компоненты основного окна " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Просмотреть содержимое файла журнала" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Добавлять дату в имя файла журнала" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Уп&аковка / Распаковка" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Выполнение внешней команды" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Копирование / Перемещение / Создание ссылок" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Удаление" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Со&здание / Удаление каталогов" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "О&шибки" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Соз&дать файл отчёта:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Информационные сообщения" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Запуск / завершение" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "У&спешные операции" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "П&лагины файловой системы" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Отчёт о файловых операциях" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Протоколируемые действия" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Протоколировать операции со статусом" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Удалить эскизы для отсутствующих файлов" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Просмотреть содержимое файла журнала" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "При смене диска всегда пере&ходить в корневой каталог" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "По&казывать не критические сообщения об ошибках (с одной кнопкой \"ОК\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Сохранять эскизы в кэш" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Эскизы" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Касательно TC экспорта/импорта:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Файл настроек:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Исполняемый файл TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Каталог с панелями инструментов:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "пикселей" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Размер эскизов:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Выбор с помощью мыши" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Прокрутка" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Выбор" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Р&ежим" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "По&строчно" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Построчно с &движением курсора" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Пост&ранично" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "&Настроить" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Включить" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Удалить" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Параметр&ы" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Поз&воляют использовать в поиске альтернативные алгоритмы или внешние инструменты (например \"locate\", и т.п.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Позволяют р&аботать с архивами." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Позвол&яют использовать расширенные сведения о файлах (теги mp3, атрибуты изображений и т.д.) в панелях или при поиске/переименовании." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Позволя&ют обращаться к дискам, недоступным из ОС или к внешним устройствам, типа Palm/PocketPC, и т.д." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Позволяют ото&бражать во внутреннем просмотрщике (F3, Ctrl+Q) файлы различных форматов, таких как рисунки, таблицы, базы данных и т.д." #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Состояние" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Плагин" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Ассоциация" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "По&исковые плагины (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Ар&хиваторные плагины (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "&Контентные плагины (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "П&лагины файловой системы (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Пла&гины просмотрщика (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Начало (имя должно начинаться с набранных символов)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Конец (последние символы до набранной точки '.' должны совпадать)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Настройка" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Точное соответствие имени" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Поисковый регистр" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Искать" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Сохранять переименованное название при разблокировании вкладки" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Делат&ь панель активной при щелчке по одной из её вкладок" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Показ&ывать заголовок вкладки, даже если она одна" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Закрыть дубликаты вкладок при закрытии приложения" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "По&дтверждать закрытие всех вкладок" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Подтверждать закрытие заблокированных вкладок" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Ог&раничить размер заголовка до" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Отмечать за&блокированные вкладки звёздочкой *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Размещать вкладки в несколько рядов" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+вверх делает &новую вкладку активной" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "От&крывать новую вкладку рядом с текущей" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "По возможности использовать существующие вкладки" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Кнопка &закрытия вкладки" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Всегда показывать букву диска в заголовке вкладки" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "За&головки вкладок" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "символов" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Действие по двойному щелчку на вкладке:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Положение &вкладок:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Нет" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Нет" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Перейти к настройкам Избранных Вкладок после пересохранения" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Перейти к настройкам Избранных Вкладок после сохранения новой вкладки" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Включить дополнительные параметры Избранных Вкладок (выбор целевой стороны при восстановлении и т.д.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Дополнительные настройки по умолчанию для новой Избранной Вкладки:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Дополнительные параметры Избранных Вкладок" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "При восстановлении вкладки, существующие вкладки держать:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Вкладки сохранённые слева будут восстановлены:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Вкладки сохранённые справа будут восстановлены:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Сохранять историю каталогов для Избранных Вкладок:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "По умолчанию в меню новые Избранные Вкладки:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Команда запуска терминала:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Команда для запуска команды в терминале (окно будет закрыто):" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Команда для запуска команды в терминале (окно останется открытым):" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} должна присутствовать здесь, чтобы обозначить команду, запуск которой будет произведён в терминале" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} должна присутствовать здесь, чтобы обозначить команду, запуск которой будет произведён в терминале" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Команда:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "Параметры:" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{command} должна присутствовать здесь, чтобы обозначить команду, запуск которой будет произведён в терминале" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "&Дублировать" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Удалить" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "&Редактировать" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Вставить" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Выбрать" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Другое..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "У&далить" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Подсказка" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "Всплывающая подсказка на основе типа, команды и параметров кнопки" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Плоские кнопки" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Сообщить об ошибках с командами" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Параметры команды находятся каждая на отдельной строке. F1 - помощь" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Вид кнопок" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Р&азмер панели:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Команда:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметры:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помощь" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Горячая клавиша:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "&Файл значка:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Ра&змер значков:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Кома&нда:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Пара&метры:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "П&уть запуска:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Подс&казка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Добавить панель инструментов со ВСЕМИ командами DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для внешней команды" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для внутренней команды" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для разделителя" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для под-панели инструментов" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Резервирование..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Экспорт..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущая панель инструментов..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл Панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" от TC (оставить существующий)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" от TC (удалить существующий)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Наивысшая панель инструментов..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Сохранить резервную копию Панели инструментов" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "в файл Панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "в файл TC .BAR (оставить существующий)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "в файл TC .BAR (удалить существующий)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "в файл \"wincmd.ini\" от TC (оставить существующий)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "в файл \"wincmd.ini\" от TC (удалить существующий)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "сразу после текущей выбранной" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед текущей выбранной" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Импорт..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Восстановить из резервной копии Панели инструментов" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "из файла Панели инструментов (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущей панели инструментов" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "из одного файла TC .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшей панели инструментов" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "из файла \"wincmd.ini\" от TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "добавить в текущую панель" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "добавить в новую панель в текущую панель инструментов" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "добавить в новую панель в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "добавить в наивысшую панель инструментов" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "заменить наивысшую панель инструментов" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "сразу после текущей выбранной" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед текущей выбранной" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Найти и заменить..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "сразу после текущей выбранной" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед текущей выбранной" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "во всём вышеперечисленном..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "во всех командах..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "во всех файлах значка..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "во всех параметрах..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "во всех путях запуска..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "сразу после текущей выбранной" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "как первый элемент" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "как последний элемент" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "сразу перед текущей выбранной" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Тип кнопки" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Не закрывать окно терминала после запуска программы" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Запускать в терминале" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Использовать внешнюю программу" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "&Дополнительные параметры" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "П&уть к программе" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Добавить" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "П&рименить" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Удалить" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Показывать всплывающие подсказки в файловой панели" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Дополнительные поля по типам файлов" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Под&сказка:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Наименование:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Режим просмотра \"Книга\"" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "&Цвет фона " #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "&Шрифт" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Кол-во колонок" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Настроить" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Упаковка файлов" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Отде&льные архивы для кажд&ого выбранного файла/каталога" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Само&распаковывающийся архив" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Шифровать" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "У&далить исходные файлы после упаковки" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Многотомный архив" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Пр&едварительно упаковать в TAR архив" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Сохранять пути" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Имя архива:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr " Архиватор " #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Выполнить, распаковав все" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Р&аспаковать и выполнить" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Свойства упакованного файла" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Атрибуты:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Коэффициент сжатия:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Метод:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Исходный размер:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Размер после сжатия:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Архиватор:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Время:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Закрыть панель фильтра" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Текст для поиска или для фильтрации" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Аа" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Регистрозависимый" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "К" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Каталоги" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Ф" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Файлы" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Начало" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Конец" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Фильтр" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Поиск или фильтр" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Добавить правило" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Удалить правило" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Использовать контентные плагины, объединять:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагин" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Оператор" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Значение" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "И (все правила)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "ИЛИ (любое правило)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Отмена" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Закрыть" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Помощ&ь" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&ОК" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Си&мволы для вставки" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Изменить атрибуты" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закрепляющий бит" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Архивный" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Создан:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Скрытый" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Открыт:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Изменён:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Только для чтения" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Рекурсивно" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Системный" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Дата и время" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибуты" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Биты:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Группа" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(серое поле означает неизменяемое значение)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Другие" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Владелец" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Выполнение" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(серое поле означает неизменяемое значение)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Восьмеричный:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Чтение" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запись" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Некоторые функции для выбора подходящего пути" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Разбиение" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Создать файл контрольной суммы" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Имя файла" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Размер и кол-во частей" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "&Каталог назначения" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "&Исходный файл" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Ко&л-во частей" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Байт" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гигабайт" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "К&илобайт" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабайт" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Сборка" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Операционная система" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Ревизия" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Версия" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Создать симв. ссылку" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&На что указывает" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Имя ссылки" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Закрыть" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Сравнить" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Синхронизировать" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Синхронизация каталогов" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&асимметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "&по содержимому" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "&игнорировать дату" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "&Выделенные" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "с &подкаталогами" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Показывать:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Имя" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Имя" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(в главном окне)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Сравнить" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Внутренний просмотр слева" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Внутренний просмотр справа" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "&дубликаты" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "&уникальные" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Чтобы начать, нажмите \"Сравнить\"" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Синхронизировать" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Подтвердить замену" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Добавить" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "О&тмена" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Изменить" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "По умол&чанию" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&ОК" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Удалить" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Настройка плагина" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Определяет тип ар&хива по содержимому" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Мо&жет удалять из архива" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Поддерживает &шифрование" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Пока&зывать как нормальные файлы (скрывать иконку архива)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Поддерживает упа&ковку в памяти" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Может &модифицировать архивы" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Архив может содержать несколько файлов" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Может &создавать архивы" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Им&еет диалог настроек" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Поз&воляет искать текст в архивах" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Опис&ание:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Дете&кт строка:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Расширение:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Флаги:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Имя:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Плагин:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Плагин:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "О просмотрщике..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Показывает сообщение о..." #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Копировать файл" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Копировать файл" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Удалить файл" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Удалить файл" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Следующий" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Загрузить следующий файл" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Предыдущий" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Загрузить предыдущий файл" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Зеркально" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Зеркально" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Переместить файл" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Переместить файл" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перезагрузить" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перезагрузить текущий файл" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Повернуть на 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Повернуть на 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Повернуть на 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Повернуть на 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Повернуть на 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Повернуть на 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Сохранить как..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Сохранить файл как..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Растянуть" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Растянуть изображение" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Копировать" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Копировать" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Обрезать" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Удалить" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Удалить" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Развернуть на весь экран" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Выделение" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Зеркально" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Переместить" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Переместить" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Рисование" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Красные глаза" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Изменить размер" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Отменить" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Увеличить" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Уменьшить" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Программа просмотра" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд шоу" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Карандаш" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Выделение" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Рисование" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд шоу" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Просмотреть" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О программе..." #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "&Двоичный (фиксированная длина строки)" #: tfrmviewer.micenter.caption msgid "Center" msgstr "По центру окна" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "&Копировать в буфер" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Правка" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодировка" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Вы&ход" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "На весь экран" #: tfrmviewer.migraphics.caption msgctxt "tfrmviewer.migraphics.caption" msgid "Graphics" msgstr "&Графика" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "&Шестнадцатеричный" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Рисунок" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "&Книга" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Зеркально" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Плагины" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Предварительный просмотр" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Печать..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Повернуть" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Сохранить" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Сохранить как..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Скриншот" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "&Найти..." #: tfrmviewer.misearchnext.caption msgctxt "tfrmviewer.misearchnext.caption" msgid "Search next" msgstr "Найти далее" #: tfrmviewer.misearchprev.caption msgctxt "tfrmviewer.misearchprev.caption" msgid "Search previous" msgstr "Найти предыдущее" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Выделить &всё" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "&Растянуть" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "Растягивать только большие" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Только &текст" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Вид" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Текст с &разрывами строк" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Увеличить" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Уменьшить" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "&Копировать в буфер" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Выделить &всё" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Старт" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Сто&п" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Файловые операции" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Всегда сверху" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "\"Drag && drop\" для перемещения операций между потоками" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Отмена" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Отмена" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Новая очередь" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Показать в отдельном окне" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "В начало очереди" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "В конец очереди" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Очередь" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Убрать из очереди" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Очередь 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Очередь 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Очередь 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Очередь 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Очередь 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Показать в отдельном окне" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Пауза (для всех)" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Если файл существует" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Если файл существует" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Работать в фоне (отдельное соединение)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Если файл существует" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Этот файл не может быть найден и можно помочь принять окончательную комбинацию файлов:\n" "%s\n" "\n" "Можете ли вы сделать это доступным и нажать \"OK\" когда будете готовы,\n" "или нажать \"ОТМЕНА\" чтобы продолжить без этого?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Отменить быстрый фильтр" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Отменить текущую операцию" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Введите имя файла, с расширением, для перетащенного текста" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Текстовый формат для импорта" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Ошибка:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Отчёт:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Не найдено:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Ошибка чтения:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Успешно:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Введите контрольную сумму и выберите алгоритм:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Проверка контрольной суммы" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Всего:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Буфер обмена не содержит данных панели инструментов" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Все;Активная панель;Левая панель;Правая панель;Файловые операции;Настройка;Сеть;Разное;Параллельный порт;Печать;Выделение; Безопасности;Буфер обмена;FTP;Навигация;Помощь;Окно;Командная строка;Инструменты;Вид;Пользователь;Вкладки;Сортировка;Протокол" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "По умолчанию;По алфавиту" #: ulng.rscolattr msgid "Attr" msgstr "Атриб" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Тип" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Имя" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Размер" #: ulng.rsconfcolalign msgid "Align" msgstr "Выравн." #: ulng.rsconfcolcaption msgid "Caption" msgstr "Заголовок" #: ulng.rsconfcolconfig msgid "Config" msgstr "Настройка" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Удалить" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Содержимое поля данных" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Переместить" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Настроить колонку" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Настроить файловые ассоциации" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Подтвердить командную строку и параметры" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Копия (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Импортированная панель инструментов DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Импортированная панель инструментов TC" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr " Добавлено: " #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Удалено: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Эти два файла идентичны!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Совпало: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Изменено: " #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Все операции завершены" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Прогресс выполнения %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Пр&ервать" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Все" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Дописать" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Автоматически переименовывать копируемые файлы" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "О&тмена" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Продолжить" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "&Копировать в" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "К&опировать в (для всех)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Выйти из программы" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "И&гнорировать всех" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Нет" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ни одного" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Другое" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Переписать" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Переписать &все" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Заменить &большие" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Заменить более &старые" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Заменить &меньшие" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Пере&именовать" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "П&родолжить" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Пов&торить" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Пр&опустить" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Проп&устить все" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Посчитать файлы и каталоги" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Посчитать контрольные суммы..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Проверить контрольные суммы..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Копировать файл(ы)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Удалить файл(ы)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Переместить файл(ы)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Па&уза" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Старт" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Очередь" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Скорость %s/с" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Скорость %s/с, осталось времени %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Разбиение" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Стереть файл(ы)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<нет метки>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<нет носителя>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Встроенный редактор Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Перейти к строке:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Переход к строке" #: ulng.rseditnewfile msgid "new.txt" msgstr "новый.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Имя файла:" #: ulng.rseditnewopen msgid "Open file" msgstr "Открыть файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Назад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Найти..." #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Вперед" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Заменить" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "во внешнем редакторе" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "во встроенном редакторе" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Запустить с помощью оболочки" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Запустить в терминале и закрыть" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Запустить в терминале и оставить открытым" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Слева;Справа;В активной;В неактивной;Обе;Нет" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Нет;Да" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Спрашивать;Перезаписывать;Копировать в;Пропускать" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Спрашивать;Перезаписывать;Перезаписывать более старые;Пропускать" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Спрашивать;Никогда не устанавливать;Игнорировать" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ФИЛЬТР" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Задать шаблон" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "число уровней: %s" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "все (неограниченная)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "только текущий каталог" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Каталог %s не существует!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Найдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сохранить шаблон поиска" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Имя шаблона:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Просмотрено: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Сканирование" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Поиск файлов" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Время сканирования: " #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Начинать у" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Свободно %s из %s байт" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s байт свободно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/время последнего доступа" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Атрибуты" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Комментарий" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Сжатый размер" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/время создания" #: ulng.rsfuncext msgid "Extension" msgstr "Расширение" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Группа" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Изменение даты/времени" #: ulng.rsfunclinkto msgid "Link to" msgstr "Ссылка на" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/время модификации" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Имя" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Имя без расширения" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Владелец" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Путь" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Размер" #: ulng.rsfunctype msgid "Type" msgstr "Тип" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Ошибка создания жёсткой ссылки." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "нет;Имя, а-я;Имя, я-а;Тип, а-я;Тип, я-а;Размер 9-0;Размер 0-9;Дата 9-0;Дата 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Извините, нечего импортировать!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Внимание! Когда восстановите из резервного файла .hotlist, очистится существующий список и заменится импортированным.\n" "\n" "Вы уверены что хотите продолжить?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Диалог копирования/перемещения" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Поиск различий" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Диалог редактирования комментария" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Редактор" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Поиск файлов" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основной" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Внутренняя программа просмотра" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Не могу найти ссылку на файл панели инструментов по умолчанию" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Сборка завершена" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Маска снятия выбора" #: ulng.rsmarkplus msgid "Select mask" msgstr "Маска выбора" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Укажите маску файлов (разделитель - ';'):" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Набор колонок с таким именем уже существует." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Изменить либо СОХРАНИТЬ, КОПИРОВАТЬ или УДАЛИТЬ текущий набор колонок" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Настроить наборы колонок" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Введите имя нового набора колонок" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Настроить текущий набор колонок" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команды" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Отключить сетевой диск..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Редактировать" #: ulng.rsmnueject msgid "Eject" msgstr "Извлечь" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Распаковать здесь..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Подключить сетевой диск..." #: ulng.rsmnumount msgid "Mount" msgstr "Смонтировать" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Создать" #: ulng.rsmnunomedia msgid "No media available" msgstr "Устройство недоступно" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Открыть" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Открыть с помощью" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Другое..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Упаковать здесь..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Упор&ядочить по" #: ulng.rsmnuumount msgid "Unmount" msgstr "Отмонтировать" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Просмотреть" #: ulng.rsmsgaccount msgid "Account:" msgstr "Учётная запись:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Дополнительные параметры командной строки архиватора:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Плохой CRC32 для файла назначения:\n" "\"%s\"\n" "\n" "Хотите оставить повреждённый файл назначения?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Нельзя скопировать/переместить файл \"%s\" сам в себя!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Нельзя удалить каталог %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Переход в каталог [%s] не удался!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Закрыть все неактивные вкладки?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Вкладка (%s) заблокирована! Закрыть?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Настройки набора колонок были изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Вы уверены что хотите выйти?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Файл %s изменён. Хотите скопировать его обратно?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Не удалось скопировать обратно - хотите сохранить измененный файл?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Копировать %d выбранных файлов/каталогов?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Копировать выделенное \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Создать новый тип файла \"%s файлы\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Введите место расположения и имя файла, куда сохранить файл Панели инструментов DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Пользовательское действие" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Удалить частично скопированный файл?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Удалить %d выбранных файлов/каталогов?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Удалить %d выбранных файлов/каталогов в корзину?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Удалить выбранный \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Удалить выбранный \"%s\" в корзину?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Не удалось удалить \"%s\" в корзину! Удалить совсем?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск недоступен" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Настройки перетаскивания мышью изменены. Хотите сохранить настройки перед тем как выйти?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Введите имя пользовательского действия:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Введите расширение:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Введите имя:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Введите имя нового типа файлов для расширения \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Контрольная сумма не совпадает, архив повреждён." #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Данные повреждены" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Не могу соединиться с сервером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Не могу копировать файл из %s в %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Уже существует каталог с именем \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Дата %s не поддерживается" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Каталог %s существует!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Прервано пользователем." #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Не могу закрыть файл" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Не могу создать файл" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "В архиве нет больше файлов" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Не могу открыть файл" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Ошибка чтения из файла" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Ошибка записи в файл" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Не могу создать каталог %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Некорректная ссылка" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Файлы не найдены" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостаточно памяти" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Функция не поддерживается!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Ошибка в команде контекстного меню" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Ошибка при загрузке конфигурации" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Ошибка синтаксиса в регулярном выражении!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Невозможно переименовать файл %s в %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Не могу сохранить ассоциацию!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Невозможно сохранить файл" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Невозможно установить атрибуты для \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Невозможно установить дату/время для \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Не могу установить владельца/группу для \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Не могу установить права доступа для \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буфер слишком маленький" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Слишком много файлов" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Архив повреждён или имеет неизвестный формат." #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Вы уверены что хотите удалить все объекты из ваших Избранных Вкладок? (Нельзя будет вернуть как было!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Перетащите сюда другие записи" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(конец подменю)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "Введите имя данной записи Избранных Вкладок" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Сохранение новой записи Избранных Вкладок" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Ошибка при загрузке Избранных Вкладок..." #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Ошибка при сохранении Избранных Вкладок..." #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Количество успешно экспортированных Избранных Вкладок: %d из %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Сохранять историю каталогов для новых Избранных Вкладок:" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "Избранные Вкладки добавлены!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Количество успешно импортированных файлов: %d из %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Вкладки по умолчанию импортированы" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "Выделите .tab файл(ы) для импорта (можно больше одного за раз!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Последние изменения Избранных Вкладок сохранены. Хотите сохранить перед тем как продолжить?" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "Избранные Вкладки изменены. Хотите сохранить перед тем как выйти?" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Имя" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Имя меню:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Сохранять историю каталогов для Избранных Вкладок:" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(разделитель)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Имя подменю" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Это позволит загрузить Избранные Вкладки: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Сохранить текущие вкладки поверх существующей записи Избранных Вкладок" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Дополнительные настройки файловых ассоциаций изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Настройки файловых ассоциаций изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файл %s изменён, сохранить?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Заменить:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Файл %s существует, переписать?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "файлом:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Файл \"%s\" не найден." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Активные файловые операции" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Некоторые операции ещё не завершены. Закрытие Double Commander может привести к потере данных." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Настройки файловых операций изменены. Хотите сохранить настройки перед тем как выйти?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Настройки цвета файловой панели были изменены. \n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Файл %s помечен как доступный только для чтения. Удалить?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Размер файла \"%s\" слишком большой для файловой системы получателя!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Каталог %s существует, переписать?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Следовать ссылке \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Выберите текстовый формат для импорта" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Добавить %d выделенных каталогов" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Добавить выделенный каталог: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Добавить текущий каталог: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Выполнить команду" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Настройка Избранных каталогов" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Вы уверены что хотите удалить все объекты из ваших Избранных каталогов? (Нельзя будет вернуть как было!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Это запустит следующую команду:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Это избранный каталог по имени " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Это изменит активную панель на следующий путь:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "И изменит неактивную панель на следующий путь:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Ошибка создания резервной копии..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Ошибка экспорта объектов..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Экспортировать все" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Экспорт Избранных каталогов - Выделите объекты, которые хотите экспортировать" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Экспорт выделенных" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Импортировать все" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Импорт Избранных каталогов - Выделите объекты, которые хотите импортировать" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Импортировать выделенный" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Путь:" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Укажите файл \".hotlist\" для импорта" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Избранные каталоги изменены. Хотите сохранить, перед тем как выйти?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Имя избранного каталога" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Число новых элементов: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ничего не выбрано для экспорта!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Путь избранного каталога" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Передобавление выбранного каталога: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Передобавление текущего каталога: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Введите место расположения и имя файла Избранных каталогов для восстановления" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Команда:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(конец подменю)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Имя меню:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Имя:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(разделитель)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Имя подменю" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Путь избранного целевого каталога" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Определите, как вы хотите чтобы активная панель была отсортирована после изменения каталога" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Определите, как вы хотите чтобы НЕактивная панель была отсортирована после изменения каталога" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Некоторые функции для выбора пути - относительный, абсолютный, спец. папки Windows, и т.д." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Всего объектов сохранено: %d\n" "\n" "Имя резервного файла: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всего объектов экспортировано: " #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Вы хотите удалить все элементы внутри подменю [%s]?\n" "Ответ НЕТ удалит только разделители меню и оставит элементы внутри подменю.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Введите место расположения и имя файла куда сохранить файл Избранных каталогов" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Неверная длина файла назначения для файла : \"%s\"" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Пожалуйста, вставьте следующий диск или что-то похожее.\n" "\n" "Это разрешит запись этого файла:\n" "\"%s\"\n" "\n" "Число байтов оставшихся для записи: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Ошибка в командной строке" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Некорректное имя файла" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неверный формат файла конфигурации" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некорректный путь" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Путь %s содержит запрещённые символы" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Этот файл не является корректным плагином!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Этот плагин собран для Double Commander для %s.%sОн не может работать с Double Commander для %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неверное цитирование" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Некорректное выделение." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Загрузка списка файлов..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Укажите файл конфигурации TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Укажите исполняемый файл TC (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Копирование файла %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Удаление файла %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Ошибка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Внешняя команда" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Результат внешней команды" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Распаковка файла %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Информация: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Создание ссылки %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Создание каталога %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Перемещение файла %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Настройки протоколирования изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Упаковка в файл %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Удаление каталога %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Выполнено: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Создание символьной ссылки %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Проверка целостности файла %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Стирание файла %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Стирание каталога %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Мастер пароль:" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Введите мастер пароль:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Настройки Разное изменены. Хотите сохранить настройки перед тем как выйти?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Новый файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Следующий том будет распакован" #: ulng.rsmsgnofiles msgid "No files" msgstr "Нет файлов" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Нет выделенных файлов." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостаточно места на получателе. Продолжить?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостаточно места на получателе. Повторить?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Не могу удалить файл %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Не реализовано." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Ниже находится предварительный просмотр. Вы можете перемещать курсор и выбирать файлы, чтобы получить полное представление о выбранных настройках." #: ulng.rsmsgpassword msgid "Password:" msgstr "Пароль:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Пароли отличаются!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Введите пароль:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Пароль (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Повторите ввод пароля:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Добавить %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Настроить" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Удалить %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" существует. Перезаписать?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Проблема выполнения команды (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Имя файла для перетащенного файла:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Пожалуйста, сделайте этот файл доступным. Повторить?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Введите новое имя для этих Избранных Вкладок" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Введите новое имя для этого меню" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Переименовать/переместить %d выбранных файлов/каталогов?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Переименовать/переместить выбранный \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Перезапустите Double Commander для применения изменений" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Выберите тип файла для добавления расширения \"%s\"" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Выделено: %s из %s, файлов: %d из %d, каталогов: %d из %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Выберите исполняемый файл" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Необходимо выбрать только файлы контрольных сумм!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Укажите путь к следующему тому" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Изменение метки диска" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Специальные каталоги" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Добавить путь из активной панели" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Добавить путь из неактивной панели" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Выбрать и использовать выбранный путь" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Использовать переменную окружения..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Перейти в специальную папку DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Перейти в переменную окружения..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Перейти в другие специальные папки Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Перейти в специальные папки Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Сделать путь относительным к пути из избранных каталогов" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Сделать путь абсолютным" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Сделать путь относительным к специальной папке DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Сделать путь относительным к переменному окружения..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Сделать путь относительным к специальной папке Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Сделать путь относительным к другой специальной папке Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Использовать специальные пути DC..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Использовать путь из избранных каталогов" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Использовать другую специальную папку Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Использовать специальную папку Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Вкладка (%s) заблокирована! Открыть каталог в другой вкладке?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Переименовать вкладку" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Новое имя вкладки:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Дополнительные настройки вкладок каталогов изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Настройки вкладок каталогов изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Целевой путь:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Ошибка! Не могу найти файл конфигурации TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Ошибка! Не могу найти исполняемый файл TC:\n" "%s\n" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Ошибка! TC всё ещё запущен, но он должен быть закрыт для этой операции.\n" "Закройте его и нажмите OK или нажмите ОТМЕНА для прекращения.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Ошибка! Не могу найти приемлемый каталог для Панели инструментов TC:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Введите место расположения и имя файла куда сохранить Панель инструментов TC" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Настройки терминала изменены.\n" "\n" "Хотите сохранить настройки перед тем как выйти?\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" скопирован в буфер обмена" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Расширение выделенного файла отсутствует в каких-либо типах файлов" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Ошибка! Проблема сохранения Панели инструментов!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Укажите файл \".toolbar\" для импорта" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Укажите файл \".BAR\" для импорта" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Панель инструментов изменена. Хотите сохранить перед тем как выйти?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Введите место расположения и имя файла Панели инструментов для восстановления" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Сохранено!\n" "Имя файла Панели инструментов: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Выделено слишком много файлов" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Неопределённый" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<БЕЗ ТИПА>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<БЕЗ ИМЕНИ>" #: ulng.rsmsgusername msgid "User name:" msgstr "Имя пользователя:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Имя пользователя (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Метка диска:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Введите размер тома:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Стереть %d выбранных файлов/каталогов?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Стереть выбранный \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "с" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без изменений;ПРОПИСНЫЕ;строчные;С прописной;Каждое Слово С Прописной;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Прервано" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Вычисление контрольной суммы" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Вычисление контрольной суммы \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Подсчёт" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Вычисление \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Объединение" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Объединение файлов \"%s\" в \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копирование" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Копирование из \"%s\" в \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Копирование \"%s\" в \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Создание каталога" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Создание каталога \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Удаление" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Удаление в \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Удаление \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Выполнение" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Выполнение \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Распаковка" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Распаковка из \"%s\" в \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Список" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Список \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Перемещение" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Перемещение из \"%s\" в \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Перемещение \"%s' в \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упаковка" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Упаковка из \"%s\" в \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Упаковка \"%s\" в \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "На паузе" #: ulng.rsoperpausing msgid "Pausing" msgstr "Установка на паузу" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "В очереди" #: ulng.rsoperrunning msgid "Running" msgstr "Выполняется" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Установка свойства" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Установка свойства в \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Установка свойства на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Разрезание" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Разрезание \"%s\" в \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Запускается" #: ulng.rsoperstopped msgid "Stopped" msgstr "Остановлено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Останавливается" #: ulng.rsopertesting msgid "Testing" msgstr "Проверка" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Проверка в \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Проверка \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверка контрольной суммы" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Проверка контрольной суммы в \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Проверка контрольной суммы из \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Ожидание ответа источника" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Ожидание ответа от пользователя" #: ulng.rsoperwiping msgid "Wiping" msgstr "Стирание" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Стирание в \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Стирание \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Работа" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Добавлять в начало;Добавлять в конец;Добавлять по логике" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Удалить:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Распаковать не учитывая пути:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Режим разбора формата:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID Position:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID Seek Range:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Параметр" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Строка запроса пароля:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Создать самораспаковывающийся архив:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Проверить:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Наименование типа архива:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Значение" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Связать плагин \"%s\" с расширением:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Первой;Последней;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Классическая (по умолчанию);В алфавитном порядке (но язык первый)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Активная панель слева, неактивная справа;Левая панель слева, правая справа" #: ulng.rsoptdisable msgid "Disable" msgstr "Отключить" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Включить" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Введите расширение" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Курсор" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Выделение" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Выделение + Курсор" #: ulng.rsoptexampletext msgid "Text" msgstr "Текст" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Добавлять в начало;Добавлять в конец;Добавлять по алфавиту" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "отдельное окно;минимизировать отдельное окно;панель операций" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "плавающий;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Сочетание %s для cm_Delete будет зарегистрировано, поэтому оно может быть использовано обратным этой настройке." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Добавить горячую клавишу для %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Добавить сочетание" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Невозможно установить сочетание" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Изменить сочетание" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Команда" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Сочетание %s для cm_Delete имеет параметр, который перекрывает эту настройку. Хотите изменить этот параметр для использования глобально?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Сочетание %s для cm_Delete нуждается в изменении параметра для соответствия сочетанию %s. Хотите изменить это?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Описание" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Редактировать горячую клавишу для %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Исправить параметр" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Горячая клавиша" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Горячие клавиши" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<нет>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Параметры" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Установить сочетание для удаления файла" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Чтобы эта настройка работала с сочетанием %s, сочетание %s должно быть назначено на cm_Delete, но оно уже назначено на %s. Хотите изменить это?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Сочетание %s для cm_Delete это последовательность сочетаний для которого горячая клавиша с обратным Shift не может быть назначена. Эта настройка может не работать." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Горячая клавиша уже используется" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Горячая клавиша %s уже используется." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Изменить на %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "уже используется для %s в %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "уже используется для этой команды, но с другими параметрами" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Архиваторы" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Автообновление" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Поведение" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Краткий" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Цвета" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Колонки" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Конфигурация" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Наборы колонок" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Избранные каталоги" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Перетаскивание" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Кнопка списка дисков" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Избранные Вкладки" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Файловые ассоциации (дополнительно)" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Файловые ассоциации" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Файловые операции" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Файловые панели" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Просмотр файлов" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Типы файлов" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Вкладки каталогов" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Вкладки каталогов (дополнительно)" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифты" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Подсветка" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Горячие клавиши" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Значки" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Список исключений" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавиши" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Язык" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Вид окна" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Протокол" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Разное" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Мышь" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Плагины" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Быстрый поиск/фильтр" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Панель инструментов" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Дополнения" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Инструменты" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Подсказки" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Нет;Командная строка;Быстрый поиск;Быстрый фильтр" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Левая клавиша;Правая клавиша;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "сверху списка файлов;после каталогов (если каталоги отсортированы перед файлами);в отсортированной позиции;внизу списка файлов" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Плагин %s уже назначен для следующих расширений:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Состояние" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Имя файла" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Имя" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Ассоциация" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Чувствителен;Н&е чувствителен" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файлы;Катало&ги;Ф&айлы и каталоги" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ск&рывать панель фильтра, когда она не в фокусе;Сохранять настройки, изменённые через панель фильтра" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "не чувствителен к регистру;соответственно локальным установкам (аАбБгГ);сначала верхний регистр, потом нижний (АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "сортировать по имени и показывать первыми;сортировать как файлы и показывать первыми;сортировать как файлы" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Алфавитная, с учётом особенностей языка;Естественная сортировка: алфавитно-числовая" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Вверху;Внизу;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Разд&елитель;Внутрення&я команда;Вне&шняя команда;Мен&ю" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Штатный - Копия (x) имяфайла.тип;Windows - имяфайла (x).тип;Другой - имяфайла(x).тип" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не менять позицию;использовать те же установки, как для новых файлов;в отсортированной позиции" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлов: %d, папок: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Не могу изменить права доступа для \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Не могу изменить владельца для \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Каталог" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Именованный канал" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Нет" #: ulng.rspropssocket msgid "Socket" msgstr "Сокет" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Особое блочное устройство" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Особое символьное устройство" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Символьная ссылка" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Неизвестный тип" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Да (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Результаты поиска" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ПОИСК" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<безымянный шаблон>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Выберите каталог" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Показать помощ&ь для %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Все" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Категория" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Колонка" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Команда" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Имя файла" #: ulng.rssimplewordfiles msgid "files" msgstr "файлы" #: ulng.rssimplewordparameter msgid "Param" msgstr "Параметры" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Предварительный просмотр" #: ulng.rssimplewordresult msgid "Result" msgstr "Итог" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Сохранено!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Рабочий каталог" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Байт" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гигабайт" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Килобайт" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабайт" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабайт" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлов: %d, Каталогов: %d, Размер: %s (%s байт)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Не могу создать каталог назначения!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Неправильный размер файла" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Не могу разрезать файл!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Количество частей больше 100! Продолжить?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Выберите каталог:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Ошибка создания симв. ссылки." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Текст по умолчанию" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Простой текст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Ничего не делать;Закрыть вкладку;Доступ к Избранным Вкладкам;Всплывающее меню вкладок" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Дня (дней)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Часа(ов)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Минуты (минут)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Месяца(ев)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунды (секунд)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Недели (недель)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Года (лет)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Переименовать Избранные Вкладки" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Переименовать подменю Избранных Вкладок" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Поиск различий" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Редактор" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Ошибка открытия программы сравнения" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Ошибка открытия редактора" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Ошибка открытия терминала" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Ошибка открытия программы просмотра" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Проcмотр" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Пожалуйста сообщите о данной ошибке на багтрекер с описанием того что вы делали и следующим файлом:%sНажмите %s для продолжения работы или %s для выхода из программы." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Обе панели, из активной в неактивную" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Обе панели, слева направо" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Путь панели" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Заключить каждое имя в квадратные скобки или что вы хотите" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Только имя файла, без расширения" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Полное имя файла (путь + имя файла)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Помощь с переменными \"%\"" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Запрос ввода параметра со значением по умолчанию" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Левая панель" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Временный файл со списком имён файлов" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Временный файл со списком полных имён файлов (путь+имя файла)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Временный файл со списком имён файлов с относительным путем" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Только расширение файла" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Только имя файла" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Другое" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Путь с разделителем в конце" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Отсюда и до конца строки указателем переменной с процентами будет знак \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Возвращает знак процента" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Обратно, отсюда и до конца строки указателем переменной с процентами будет знак \"%\"" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Представить каждое имя в виде \"-a \" или как вы хотите" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Параметр;Значение]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Имя файла с относительным путем" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Правая панель" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Полный путь второго выбранного файла в правой панели" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "До выполнения показать команду" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Простое сообщение]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Будет показано простое сообщение" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Активная панель (источник)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Неактивная панель (назначение)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Имена файлов будут взяты в кавычки (по умолчанию)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Команда будет выполнена в терминале, терминал останется открытым" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Пути с разделителем в конце" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Имена файлов не будут взяты в кавычки" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Команда будет выполнена в терминале, после этого терминал будет закрыт" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Пути без разделителя в конце (по умолчанию)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Сеть" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Внутренняя программа просмотра Double Commander" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Некорректное качество" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Кодировка" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Тип файла" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Новый размер" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s не найден!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "во внешнем просмотрщике" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "во встроенном просмотрщике" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Число замен: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Замена не состоялась." �����������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.uk.po������������������������������������������������������������0000644�0001750�0000144�00001347112�12675470464�017244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2015-08-25 23:33+0200\n" "Last-Translator: masterok <m_shein@ukr.net>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Український\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Порівняння... %d%% (ESC щоб скасувати)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Справа: Видалити %d файл(и) " #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Знайдено файлів: %d (Однакових: %d, Різних: %d, Унікальних зліва: %d, Унікальних справа: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Справа на ліво: Копіювати %d файлів, загальним розміром: %d байт" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Зліва на право: Копіювати %d файлів, загальним розміром: %d байт" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Всім" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Налаштування набору колонок" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Фон:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Межі курсору" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Дозволити виділення кольором" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Власні налаштування шрифтів і кольорів" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Колір тексту:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Шрифт:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Розмір:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Фон 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Налаштування набору номер:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Колір курсора" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Текст &під курсором" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Виділення" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Ім'я:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Додати колонку" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Налаштувати колонку:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Попередній перегляд" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Вибрати шаблон..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Перевірити вільне міс&це" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Копі&ювати атрибути" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Копіювати &власника" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Копіювати &права" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Копіювати &дату/час" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Правил&ьні посилання" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Скинути позначку \"Л&ише читання\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Викл&ючити порожні каталоги" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Перейти за поси&ланнями" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Зарезервувати &місце" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Що робити, якщо неможливо встановити час файла, атрибути, тощо." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Використати файл шаблону" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Якщо &каталог існує" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Якщо &файл існує" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Коли не можливо встановити в&ластивості" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<no template>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Копіювати в буфер" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Збірка" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашня сторінка:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Ревізія:" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Версія" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Скинути" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Вибрати атрибути" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Архівний" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Стиснути&й" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Каталог" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "За&шифрований" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "При&хований" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Лише &читання" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Розрід&жений" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Симв. посилання" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "&Системний" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Тимчасовий" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Атрибути NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Основні атрибути" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконання" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Як те&кст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Розрахувати контрольну суму..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Відкрити файл контрольної суми після розрахунку" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Для кожного файлу ство&рити свій контрольний файл" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Зберегти файл(и) контрольних сум &як:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Перевірка контрольної суми..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Додати" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "З'&єднати" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Редагувати" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Диспетчер з'єднань" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "З'єднатися з:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Додати в &чергу" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Налашт&увати" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Зберегти ці налаштування як &типові" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Копіювати файл(и)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Нова черга" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Черга 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Черга 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Черга 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Черга 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Черга 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Зберегти опис" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Коментар файлу/теки" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Ре&дагувати коментар для:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Кодування:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Авто порівняння" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Двійковий режим" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Скасувати" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Копіювати блок вправо" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Копіювати блок вправо" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Копіювати блок вліво" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Копіювати блок вліво" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторити" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Виділити в&се" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Вернути" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Ви&хід" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Перша відмінність" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Перша відмінність" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ігнорувати регістр" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ігнорувати пробіли" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Одночасне прокручування" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Остання відмінність" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Остання відмінність" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Відмінності в рядку" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Наступна відмінність" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Наступна відмінність" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Відкрити зліва..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Відкрити справа..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Зафарбовувати фон" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Попередня відмінність" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Попередня відмінність" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Пере&завантажити" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Перезавантажити" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Зберегти" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Зберегти" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Зберегти як..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Зберегти як..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Зберегти лівий" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Зберегти лівий" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Зберегти лівий як..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Зберегти лівий як..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Зберегти правий" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Зберегти правий" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Зберегти правий як..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Зберегти правий як..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Порівняти" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Порівняти" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Кодування" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Кодування" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Порівняти файли" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "З&ліва" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Сп&рава" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Дії" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Р&едагувати" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Кодування" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Налаштування" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Додати новий ярлик в послідовність" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Видалити останній ярлик з послідовності" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Тільки для цих елементів керування" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Параметри (кожен в окремому рядку):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Ярлики:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Про програму..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Налаштування" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Конфігурація" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Копіювати" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Вирізати" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Видалити" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "З&найти" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Знайти" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Знайти наступний" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Знайти наступний" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Перехід до рядка" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Вставити" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Повторити" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Повторити" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Замінити" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Замінити" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Виділити &все" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Виділити &усе" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Вернути" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Вернути" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Закрити" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Вихід" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Створити" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Створити" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Відкрити" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Відкрити" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Збере&гти" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Зберегти" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Зберегти &як.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Зберегти як" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Зберегти все" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Зберегти все" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Редактор" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Довід&ка" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Редагувати" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Кодування" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Відкрити як" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Зберегти як" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "&Підсвітка синтаксису" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Кінець рядка" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Чутливість до регістру" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Шукати від &курсора" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регулярні вирази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Лише виділений &текст" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Лише слова &повністю" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Опції" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Замінити на:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "З&найти:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Напрямок" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Розпакувати файли" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Роз&пакувати шляхи якщо такі є з файлами" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Розпакувати кожен архів в &окремий каталог (з іменем архіву)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Замінювати існуючі файли" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "В катало&г:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Розпакувати файли по мас&ці:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Пароль для за&шифрованих файлів:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Додати" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Додати" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Додати" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "В&низ" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "&Видалити" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "В&идалити" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Вид&алити" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Пере&йменувати" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Вгор&у" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Асоціації з файлами" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Дії" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Розширення" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Типи файлів" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Іконка" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Дія:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Команда:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Редагувати" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Відкрити у редакторі" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Шлях до файлу" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Повний шлях" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Отримати вивід команди" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Відкрити" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустити у терміналі" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Відкрити з VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Перегляд" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Відкрити у переглядачі" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Почекайте..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ім'я файлу:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "З" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Натисніть \"Закрити\", коли тимчасовий файл може бути видалений!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На панель" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Переглянути &все" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Поточна операція:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "З" #: tfrmfileop.lblto.caption msgid "To:" msgstr "В" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "В&становити властивості" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Встановити для &всіх вибраних файлів" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Пропустити цей файл" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Властивості" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "У вигляді тексту:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Містить:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконати" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Ім'я:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Шлях:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Гру&па" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Останній доступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Остання зміна:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Остання зміна статусу:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Вісімковий" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Власни&к" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Розмір:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Симв. посилання для:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Тип:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Властивості" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Додати" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Довід&ка" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmfinddlg.btnedit.caption msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Р&едагувати" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "Пере&йти до файлу" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "Останній пошу&к" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Н&овий пошук" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Збере&гти" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Заван&тажити" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Збере&гти" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "З&берегти з \"Починати з каталога\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Якщо шлях запуску збережено, то його буде відновлено при завантаженні шаблону. Використовуйте його, якщо ви хочете виправити пошук в певному каталозі." #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Старт" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Ск&асувати" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Використати шаблон" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Перегляд" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Фай&ли на панель" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Пошук файлів" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "З врахуванням регістру" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Дата в&ід:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Дата д&о:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Розмір &від:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Розмір &до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Шукати текст у файлі" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Пере&йти за посиланнями" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Шукати файли, що &НЕ містять текст" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Н&е старші ніж:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Шукати по &частині імені файла" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регулярні вирази" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "За&мінити на" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Вибрані &файли і каталоги" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Р&егулярний вираз" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Час від:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ча&с до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Використовувати пошуковий п&лагін" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Введіть імена каталогів, які повинні бути виключені з пошуку, через \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Введіть імена файлів, які повинні бути виключені з пошуку, через \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Введіть імена файлів, через \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Каталоги" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Файли" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Пошук даних з текстом" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Атри&бути" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Кодуванн&я:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Пр&опустити підкаталоги" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Проп&устити файли" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "По &масці файлу" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Шукати в &каталозі:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Шукати в під&каталогах:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Попередні пошуки:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Видалити зі списку" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Показати все знайдене" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Перегляд" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Розширені" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Завантажити/Зберегти" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Плагіни" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Результати" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Стандартні" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Знайти" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Знайти" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "З урахуванням рег&істру" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Створити жорстке посилання" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "О&б’єкт на який вказуватиме посилання" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ім'я п&осилання" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Імпортувати все!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Імпортувати виділене" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Виділіть елементи для імпотру" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "При клацанні на підменю, буде обрано все меню" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "При утриманні CTRL можна вибирати кілька елементів" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Компонувальник" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Зберегти до..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Елемент" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Ім'&я файлу" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "В&низ" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Вниз" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Вид&алити" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Видалити" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Вгор&у" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Вгору" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Пр&о програму" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Додати ім'я файлу в командний рядок" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Додати шлях і ім'я файлу в командний рядок" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Копіювати шлях в командний рядок" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Короткий" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Cтислий вигляд" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Розрахувати зайнятий об'&єм" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Змінити каталог" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Перейти в домашній каталог" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Перейти в батьківський каталог" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Перейти в кореневий каталог" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Розрахувати контрольну суму..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Перевірити контрол&ьну суму..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очистити файл звіту" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очистити вікно звіту" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "За&акрити всі вкладки" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Закрити вкладку" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Наступний командний рядок" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Встановіть командному рядку наступну команду з історії" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Попередній командний рядок" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Встановіть командному рядку попередню команду з історії" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Повний" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Набір колонок" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Порівняти за &вмістом" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Порівняти файли у каталогах" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Порівняти файли у каталогах" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Налаштування обраних каталогів" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показати контекстне меню" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Копіювати" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Копіювати в&сі показані колонки" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Копіювати ім'я файла(ів) разом з повним шля&хом" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Копіювати ім'я файла(ів) в &буфер" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Копіювати файли без запиту підтвердження" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Копіювати в ту ж панель" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Копіювати" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Показати зайнятий простір" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Ви&різати" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Історія каталогів" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Особистий спис&ок каталогів" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Редагувати" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Редагувати &коментар..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Редагувати новий файл" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Редагувати шлях в заголовку списку" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Поміняти панелі місцями" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Розпак&увати файли..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Асоціаці&ї з файлами..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Ск&леїти файли..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Властивост&і файлу" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Ро&зрізати файл..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Плоский вигл&яд" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Перейти в командний рядок" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Помістити курсор на перший у списку файл" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Помістити курсор на останній у списку файл" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Створити &жорстке посилання..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Довідка" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Горизонтальне розміщення панелей" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Гарячі &клавіші" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ліва &= Права" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Відкрити список дисків зліва" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Завантажити виділенння з б&уферу" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Завантажити виділенння з ф&айлу..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Завантажити вкладки &з файлу" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Створити ката&лог" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Виділити всі з такими ж роз&ширеннями" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Інверсія виділення" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Виділити все" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Зняти виділення з г&рупи..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Виділити &групу..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Зняти виділення з у&сіх" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Згорнути" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "&Мультиперейменування" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "З'&єднання з мережею..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Розірвати з'є&днання" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Н&ове з'єднання..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Н&ова вкладка" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Перейти до нас&тупної вкладки" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Відкрити" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Спробувати відкрити архів" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Відкрити bar файл" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Відкрити теку у новій вклад&ці" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Відкрити сп&исок VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Показати операції з &файлами" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Основні..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "У&пакувати файли..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Встановити позицію роздільника" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Вставити" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Перейти до &попередньої вкладки" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Швидкий фільтр" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Швидкий пошук" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Панель швидкого перегляду" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Оновити" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Перемістити" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Перемістити/Перейменувати файли без запиту підтвердження" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Перейменувати" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Перей&менувати вкладку" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Ві&дновити виділення" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "О&бернений порядок" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Права &= Ліва" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Відкрити список дисків справа" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Запуск &терміналу" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Зберегти виділенння" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Зберегти виділення у фай&л..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Зберегти вкладки &до файлу" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "По&шук..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Змінити &атрибути..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Забло&кувати і відкривати каталоги у нових вкладках" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Звичай&но" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Заб&локувати" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Заблоку&вати, але дозволити зміну каталогу" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Відкрити" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Відкрийте за допомогою системи асоціацій" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показати меню кнопки" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Історія командного рядка" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Меню" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Показувати при&ховані/системні файли" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Сортувати за &атрибутами" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Сортувати за &датою" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Сортувати за роз&ширенням" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Сортувати за &ім’ям" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Сортувати за роз&міром" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Включити/виключити чорний список файлів, щоб не показувати імена файлів" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Створити &символічне посилання..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Синхронізація тек..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Ціль &= Джерелу" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Перевіри&ти архів(и)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Мініатюри" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Перегляд мініатюр" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Перейти до повноекранного режиму консолі" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Відкрити каталог під курсором на лівій панелі" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Відкрити каталог під курсором на правій панелі" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Зняти виділення з усіх з таким &же розширенням" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Перегляд" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показати історію відвіданих шляхів для активної панелі" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Перейти до наступного запису в історії" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Перейти до попереднього запису в історії" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Відвідати домашн&ю сторінку Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Очистити" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Вихід" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Каталог" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Термінал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Показати поточний каталог правої панелі в лівій панелі" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Перейти в домашній каталог" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Перейти в кореневий каталог" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Перейти у каталог вище" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Показати поточний каталог лівої панелі в правій панелі" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Шлях" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Копіювати..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Створити посилання..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Очистити" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Сховати" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Виділити все" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Перемістити..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Створити символічне посилання..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Налаштування вкладки" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Відновити" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Старт" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Команди" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Налаштування" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файли" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Дов&ідка" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Виділення" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Мережа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Ви&гляд" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Налаштування" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Вкладк&и" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Копіювати" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Вирізати" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Видалити" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Редагувати" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Вставити" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Категорії" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Довідка" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Гаряча клавіша" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Ви&значити..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Або вибе&ріть тип виділення за шаблоном:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Створити новий каталог" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Введіть &ім'я каталогу:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Новий розмір" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Висота :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Якість стиснення в Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Висота" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Завантажити" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Перейменувати" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Відн&овити все" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "З&берегти" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Групове перейменування" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Ввімкн&ено" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Регулярні вира&зи" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Використов&увати заміну" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Розширення" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Лічильник" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Знайти &та замінити" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Результат у звіт" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Шаблони" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Розшир&ення" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Зна&йти..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Інтервал" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "І&м'я файлу" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Заміни&ти..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Поча&ткове значення" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Ширина" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Лічильник" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] День" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] День (2 цифри)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] День тижня (коротко, \"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] День тижня (довге, \"monday\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Символ на позиції x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Символи між позиціями x і y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Година" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Години (2 цифри)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Хвилина" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Хвилини (2 цифри)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Місяць" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Місяць (2 цифри)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Назва місяця (коротко, \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Назва місяця (довга, \"грудень\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ім’я" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Символ на позиції x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Символи між позиціями x і y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Час..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Розширення..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ім’я..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Плагін" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунди (2 цифри)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Рік (2 цифри)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Рік (4 цифри)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Старе ім’я файла" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Нове ім’я файла" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Шлях до файла" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Вибір програми" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Власна команда" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Зберегти асоціації" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Встановити обрану програму як типову дію" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Відкривати тип файлу: %s" #: tfrmopenwith.milistoffiles.caption #, fuzzy msgid "Multiple file names" msgstr "Кілька імен файлів" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption #, fuzzy msgid "Multiple URIs" msgstr "Кілька посилань" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption #, fuzzy msgid "Single file name" msgstr "Одиночне ім’я" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption #, fuzzy msgid "Single URI" msgstr "Одиночне посилання" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Застосувати" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "С&касувати" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Налаштування" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Будь ласка, виберіть підсторінку, ця сторінка не містить налаштувань." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Автоналашт&ування" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Ви&далити" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Пе&рейменувати" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Ре&жим налагодження" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Ввімкне&но" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Показати вивід на консол&ь" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Налаштування" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Додат&и:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Роз&ширення:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Розпакува&ти:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Спис&ок:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Кіне&ць списку (за бажанням)" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Форма&т списку:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "По&чаток списку (за бажанням)" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Ар&хіватор:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Опи&с:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Додатково" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Основні" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "&Також оновлювати при зміні розміру, дати чи атрибутів" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для наступних шляхів і їх підкаталогів:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "&Оновлювати при створенні, копіюванні чи видаленні файлів" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Не реагувати на зміни якщо вікно у &фоні" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Відключити автооновлення" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Оновлення списку файлів" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Завжди показувати іконку в тре&ї" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Автоматично при&ховувати відмонтовані пристрої" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Перемістити іконку в системний трей при згортанні" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Н&е запускати більше однієї копії DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Тут ви можете ввести один або декілька дисків, розділених \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Чорний список дискі&в" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Розмір колонок" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показувати розширення файлів" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "вирівнян&о (по Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "одразу після &імені файлу" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Автоматично" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Стала кількість колонок" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Стала ширниа колонок" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Обр&ізати текст до ширини колонки" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Горизонтальні лінії" #: tfrmoptionscolumnsview.cbgridvertline.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Вертикальні лінії" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Розтягуват&и колонки на ширину панелі" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Показати сітку" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Автоматична зміна розмірів колонок" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Пристосовув&ати розмір:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Редаг&увати" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "І&сторія командного рядка" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Історія катало&гів" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Історія масок &файлів" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "З&берегти налаштування" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Іст&орія пошуку/заміни" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Розміщення файлів конфігурації" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Зберігати при виході" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Сортіування конфігурації в лівому дереві" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Встановити в командному рядку" #: tfrmoptionsconfiguration.rbprogramdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Каталог п&рограми (для переносної версії)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Домашній каталог корист&увача" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Всім" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Ви&далити кнопку" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Створити" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Зберегти як" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Зберегти" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Дозволити виділення кольором" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Основні" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Межі курсору" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Фон:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Фон 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "На&лаштувати колонки для файлової системи:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Колір курсора" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Текст &під курсором" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Шрифт:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Розмір:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Колір тексту:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Виділення" #: tfrmoptionscustomcolumns.lblpreviewtop.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Нижче попередній перегляд. Ви можете переміщати курсор і вибрати файли, щоб отримати фактичний вигляд різних налаштувань." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Додати колонку" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Позиція панелі після порівняння:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Додати..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Резервн копіювання..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Видалити..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Довідка" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Імпорт..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Вставити..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Різне..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Кілька функцій для вибору відповідного шляху" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Кілька функцій для вибору відповідного місця призначення" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Сортувати..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Додаючи каталог, додавати каталог призначення" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Завжди розгортати дерево" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Показувати лише дійсні змінні оточення" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "У спливаючому вікні показувати шлях" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Ім’я, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Ім’я, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Вибрані теки (можна сортувати перетягуванням)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Інші налаштування" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Ім'я:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Шлях:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Призначення:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "теку активної панелі" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "теки активної &і неактивної панелей" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "команду" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Додати команду" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "копія виділеного елемента" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Додати копію виділеного елемента" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "роздільник" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Додати роздільник" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "підменю" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додати підменю" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "теку до якої я перейду" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Згорнути все" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...поточний рівень виділених елементів" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "...поточні виділені чи активні теки в поточній панелі" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Вирізати" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "видалити все!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "підменю і всі його елементи" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "тільки підменю без елементів" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "виділений елемент" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Видалити виділений елемент" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Перевірити чи дійсні шляхи в обраних теках" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Перевірити чи існують шляхи в обраних каталогах і призначеннях" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "у файл Обрані теки ((.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від TC (лишити існуючий)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від TC (видалити існуючий)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Перейти до налаштувань данних пов’язаних з ТС" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Перейти до налаштувань данних пов’язаних з ТС" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption #, fuzzy msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "з файлу Обрані теки (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "з файла \"wincmd.ini\" від TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Відкрити всі гілки" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Вставити" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Відновити з резервної копії Обрані теки" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Зберегти резевну копію Обраних тек" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Пошук і заміна..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "на шляху..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "на шляху призначення..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "на шляху і шляху призначення..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, від А до Я!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...тільки одну групу елементів" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортувати тількиодну групу елементів" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...вміст підменю виділено, без підрівнів" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...вміст підменю виділено разом з підрівнями" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Перевірити меню" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "теку, яку я введу" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Додати теку яку я введу" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Вставити теку яку я введу" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Додавання з головної панелі:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "З усіх підтримуваних форматів, запитати, який з них щоразу використовувати" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "При збереженні тексту Unicode, збережіть його у форматі UTF8 (інакше буде UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "При перетягуванні тексті, давати ім’я автоматично (інакше питати користувача)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Показувати діалог підтвердження при перетягуванні" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При перетя&гуванні текста в панелі:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Помістіть найбільш бажаний формат на початку списку (використовуйте перетя&гування):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(якщо найбільш бажаного немає, брати другий і так далі)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(якщо з деякими додатками не працює, зніміть галочку)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Показувати &файлову систему" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Показувати вільн&е місце" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Показувати &мітки" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Список дисків" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Фон" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Фон" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Скинути" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Зберегти" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Атрибути елементу" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&Передній план" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Передній план" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Текстова мітка" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Використати (і редагувати) глобальні налаштування схеми" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Використати локальні параметри схеми" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Bold" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Italic" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Закреслений" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Підкреслений" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "І&нвертувати" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Вимк" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Увімк." #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Додати..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Видалити..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Вставити..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Сортувати..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Завжди розгортати дерево" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Ні" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Інші налаштування" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "роздільник" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "підменю" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додати підменю" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Згорнути все" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...поточний рівень виділених елементів" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Вирізати" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "видалити все!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "підменю і всі його елементи" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "тільки підменю без елементів" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "виділений елемент" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Видалити виділений елемент" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Відкрити всі гілки" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Вставити" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Перейменувати" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...все, від А до Я!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...тільки одну групу елементів" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Сортувати тількиодну групу елементів" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...вміст підменю виділено, без підрівнів" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...вміст підменю виділено разом з підрівнями" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Перевірити меню" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Додати" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Додати" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "В&низ" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Редагувати" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Видалити" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "В&идалити" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Вид&алити" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пере&йменувати" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Вгор&у" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Дії" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Розширення" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Типи файлів" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Іконка" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Дія:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Команда:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметр&и:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Шля&х запуску:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Редагувати" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Відкрити у редакторі" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Отримати вивід команди" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Відкрити" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Запустити у терміналі" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Перегляд" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Відкрити у переглядачі" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Виконати через оболонку" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Виконати через термінал і закрити" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Виконати через термінал і лишити відкритим" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Показувати вікно підтвердження для:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Операції &копіювання" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Операції &видалення" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "F8/Del - видалення в Кошик (з Shift - на&завжди)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Операції видалення до к&ошика" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "С&кинути прапорець \"Лише читання\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Операції &переміщення" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "&Шукати по частині імені файла" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "О&працьовувати коментарі з файлами/каталогами" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "П&ри перейменуванні виділяти лише ім'я файлу (без розширення)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Показу&вати панель вибору вкладок при перейменування/переміщенні" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Пропус&кати помилки при файлових операціях і заносити їх у звіт" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Пошук тексту у файлах" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Виконання операцій" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Пошук файлів" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Інтерфейс користувача" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Розмір &буфера для операцій з файлами (в КB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Показати прогрес &операцій спочатку в" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Типовий шаблон для пошуку:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Стиль автопереіменування співпадаючих імен:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Кіл-&ть проходів стирання:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Використати відображенн&я в пам'ять при пошуку тексту у файлах" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Використати п&отік при пошуку тексту в файлах" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Дозволити виділення кольором" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Використовувати курсор-&рамку" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Використовувати &градієнтну заливку індикатора" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "В&икористовувати інверсне виділення" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Межі курсору" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Керування індикатором вільного місця" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&Фон:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Фон &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Колір к&урсора" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Текст під курсоро&м" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Рівень &яскравості неактивної панелі" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Колір віл&ьного місця:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Колір заповненн&я:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Ко&лір виділення:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Колір &тексту:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Не зава&нтажувати список файлів доки вкладка не активна" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Показувати квадратні ду&жки навколо каталогів" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Виділяти но&ві та оновлені файли" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Увімкнути &оперативне переіменування при подвійному клацанні на імені" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Завантажувати список &файлів в окремому потоці" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Завантажувати іконки після сп&иску" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Показувати системні та п&риховані файли" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При виділенні файлів пр&обілом переміщувати курсор на наступний файл (як в <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Форматування" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Сортування" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "&Чутливість до регістру:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgctxt "TFRMOPTIONSFILESVIEWS.lblDateTimeExample.CAPTION" msgid "Incorrect format" msgstr "Неправильний формат" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Формат &дати і часу:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "&Формат розміру файла:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Вставити нов&і файли" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Со&ртування каталогів:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Метод сортування:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Перемістити оновлені фай&ли" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Видалити" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Кольори за &типом файлу (сортувати перетягуванням)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "&Атрибути категорії:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Колір категорії:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска категорії:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Назва категорії:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Шрифт &консолі" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Шрифт &редактора" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Шрифт &логу" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Основний &шрифт" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Шрифт переглядача &книг" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Шрифт &переглядача" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Додати &гар.кл." #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Видалити гар.кл." #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "&Редагувати гар.кл." #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Фільтр" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "К&атегорії:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ко&манди:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Ярлики:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Команди" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Гарячі клавіші" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Опис" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Гаряча клавіша" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Параметри" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Елементи керування" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Для наступних шляхів і їх підкаталогів:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Показувати іконки для дій в &меню" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Показувати оверле&йні &іконки (наприклад для ярликів)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Вимкнути спеціальні іконки" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Іконки в меню" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Розмір іконок" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Показ іконок зв’язаних з типом файлу " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Усі" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Усі асоційовані + &EXE/LNK (повільно)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Без іконок" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Лише &стандартні іконки" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "До&дати виділені імена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Додати виділені імена з &повними шляхами" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ігнорувати (не показувати) такі файли і папки:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Зберегти в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Зміна каталогу с&трілками Вліво, Вправо (Навігація в стилі Lynx)" #: tfrmoptionskeyboard.gbtyping.caption #, fuzzy msgid "Typing" msgstr "Введення" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Літ&ери" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Лі&тери" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Літери" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Пло&скі кнопки" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Плоский і&нтерфейс" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Пл&оскі кнопки" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Показувати індикатор вільного місця на пан&елі дисків" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Показувати &вікно звіту" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Показувати панель операцій у фоні" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Показувати загальний прогрес в рядку меню" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Показувати &командний рядок" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Показувати по&точний каталог" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Показувати кнопки &дисків" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Показувати індикатор вільного міс&ця" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Показувати кнопки мен&ю дисків" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Показувати кнопки &функціональних клавіш" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Показувати &головне меню" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Показувати &панель кнопок" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Короткий індикатор ві&льного місця" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Показувати рядок стану" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Показувати &заголовки табуляторів" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Показувати вкл&адки" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Показувати вікно терм&іналу" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Показувати д&ві панелі кнопок дисків (фіксована довжина, над файловими панелями)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Компоненти основного вікна " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Переглянути вміст звіту" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Додавати дату до імені звіту" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Запак&увати/Розпакувати" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Копі&ювання/Переміщення/Створення посилань" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Ви&далити" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Створення/Видалення ка&талогів" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Звіт &помилок" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Створити файл звіту:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Звіт &інформаційних повідомлень" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Пуск/Завершення роботи" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Звіт про ус&пішні операції" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Плагіни &файлової системи" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Звіт про операції з файлами" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Підзвітні дії" #: tfrmoptionslog.gblogfilestatus.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Статус операції" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Видалити мініат&юри для не існуючих файлів" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Переглянути вміст звіту" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Завжди переходити в &корінь диску при зміні дисків" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Показу&вати попередження (лише кнопка \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Зберігати мініат&юри в кеші" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Мініатюри" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Стосовно імпорту/експорту ТС:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Файл налаштувань:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Виконуваний файл ТС:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Шлях до теки з панелями інструментів:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "пікселів" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Розмір мініа&тюр:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Виділе&ння мишкою" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Прокрутка" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Виділення" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Ре&жим:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Через ряд&ків" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Р&ядок за рядком з рухом курсора" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Посторінково" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "До&дати" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Налашту&вати" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Увімкнути" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Видалити" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Пара&метри" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "По&шукові плагіни дозволяють використовувати альтернативні алгоритми пошуку або зовнішні засоби (такі як \"locate\", та інші)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Ар&хіваторні плагіни дозволяють працювати з архівами" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "&Інформаційні плагіни дозволяють відображати розширені відомості про файли, такі як mp3 теги або атрибути зображення, або використовувати їх для пошуку або у інструменті масового перейменування." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Плагіни &файлових систем дозволяють звертатися до дисків, недоступних з ОС або до зовнішніх пристроїв, напр. Palm/PocketPC, тощо." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "&Плагіни перегляду дозволяють відобразити різні формати файлів, такі як: зображення, бази даних, таблиці та інші у Переглядачі (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Активний" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Плагін" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Асоціації з" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "По&шукові плагіни (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "&Архіваторні плагіни (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "&Контентні плагіни (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Плагіни &файлової системи (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Плагіни &перегляду (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "По&чаток (ім'я має починатись з набраних символів)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Кі&нець (останні символи до набраної крапки '.' повинні співпадати)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Налаштування" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Точне співпадіння імені" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Регістр при пошуку" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Критерії пошуку" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Робити &панель активною при клацанні по одній з її вкладок" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Показувати заголовок вкладки, нав&іть якщо вона одна" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Підтверд&жувати закриття всіх вкладок" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Обмежити розмір заголовка вкладки до" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Показувати заблоковані вкладки зі знаком зірочки *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Розміщати вкладки в декі&лька рядів" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up відкриває нову вкладку на передньому плані" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Відкривати &нову вкладку поряд з поточною" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Показувати кнопку закриття &вкладки" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Заголовки вкладок" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "символів" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Поло&ження вкладок" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Ні" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Команди:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "К&лонувати кнопку" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "Ви&далити кнопку" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Реда&гувати" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "В&ставити нову кнопку" #: tfrmoptionstoolbar.btnopencmddlg.caption #, fuzzy msgid "Select" msgstr "Виділення" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Інше..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Видалит&и гар.кл." #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Пропозиції" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC буде пропонувати підказки на основі типу кнопки, команди і параметрів" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "П&ласкі кнопки" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Звітувати про помилки з командами" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Введіть параметри команди, кожен в окремому рядку. Натисніть F1, щоб отримати довідку по параметрах." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Вигляд кнопок" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Розмір п&анелі:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Коман&да:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Параметр&и:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Довідка" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Гаряча клавіша:" #: tfrmoptionstoolbar.lbliconfile.caption msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Іко&нка:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Р&озмір іконки:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Коман&да:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Параметри:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Шля&х запуску:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "Під&казка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Додати панель інструментів зі всіма командами DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "для зовнішньої команди" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "для внутрішньої команди" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "для роздільника" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "для підпанелі інструментів" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Резервне копіювання..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Експортувати..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Поточна панель інстументів..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Головна панель інструментів..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Зберегти резервну копію Панелі інструментів" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "у файл Панелі інструментів (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "у файл TC .BAR (лишити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "у файл TC .BAR (видалити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у файл \"wincmd.ini\" від ТС (лишити існуючий)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у файл \"wincmd.ini\" від ТС (видалити існуючий)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Імпортувати..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Відновити з резервної копії Панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "з файлу Панель інструментів (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "з одного файлу ТС .BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "з файлу \"wincmd.ini\" від ТС..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "додати до поточної панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "додати до нової панелі на поточній панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "додати до нової панелі на головній панелі інструментів" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "додати до головної панелі" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "замінити головну панель інструментів" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "as first element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Знайти і замінити..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "як перший елемент" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "в усіх усіх вищезгаданих..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "у всіх командах..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "у всіх іменах іконок..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "у всіх параметрах..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "у всіх шляхах запуску..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "одразу після обраного" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "as first element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "як останній елемент" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "одразу перед обраним" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Тип кнопки" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Тримати ві&кно терміналу відкритим після виконання програми" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Виконати у т&ерміналі" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Використовувати &зовнішню програму" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Додатков&і параметри" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Шлях до зовнішньої програми" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "До&дати" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "&Застосувати" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Видалити" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Показати спливаючі підказки" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Додаткові поля за типами файлів" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "&Підказка категорії:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Маска категорії:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Назва категорії:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Режим перегляду книг" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Приклад" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Колір ф&ону в переглядачі книг" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Колір шри&фту в переглядачі книг" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "К-сть колонок у переглядачі к&ниг" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Налаштувати" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Упакування файлів" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Окремі архіви для кожн&ого вибраного файлу/каталогу" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Створити само&розпаковуваний архів" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Шифрувати" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Перем&істити в архів" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Багатото&мний архів" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Сперш&у помістити в TAR архів" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Зберігати шляхи" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Ім'я архіву:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Пакувальник" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Розпакувати все і виконати" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Розпакувати і виконати" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Властивості стисненого файлу" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Атрибути:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Коефіцієнт стиснення:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Метод:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Оригінальний розмір:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Розмір стисненого:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Пакувальник:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Час:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Закрити панель фільтрів" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Введіть текст для пошуку чи фільтрації" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Чутливість до регістру" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Каталоги" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Файли" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Початок співпадіння" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Кінець співпадіння" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Фільтр" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Перемикання між режимами пошуку або фільтра" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Д&одати правила" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "П&рибрати правила" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Використати контент-плагіни, комбінуючи з:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Плагін" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Поле" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Оператор" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Значення" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (всі правила)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (будь-яке правило)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Скасувати" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Закрити" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "До&відка" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Гаразд" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Виберіть &символи для вставки:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Змінити атрибути" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Закріплювальний біт" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Архівний" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Створений:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Прихований" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Доступний:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Змінений:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Лише читання" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Рекурсивно" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Системний" #: tfrmsetfileproperties.gbtimesamp.caption #, fuzzy msgid "Timestamp properties" msgstr "Властивості мітки часу" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Атрибути" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Біти:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сірі поля змінити неможливо)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Інші" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Виконання" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сірі поля змінити неможливо)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Вісімковий" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читання" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Запис" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Деякі функції, щоб вибрати відповідний шлях" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Розбивка" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Створити файл контрольної суми" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Ім'я файлу" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Розмір і кількість частин" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Катал&ог призначення" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Вхідний фай&л" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Кількіст&ь частин" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Байт" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гігабайти" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Кілобайти" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабайти" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Збірка" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Операційна система" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Ревізія:" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Версія" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "Версія додатків" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Створити симв. посилання" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Місце, на яке вказуватиме посилання" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ім'я поси&лання" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Закрити" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Порівняти" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Синхронізація" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Синхронізувати теки" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "асиметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "за змістом" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ігнорувати дату" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "лише виділене" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Підтеки" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Показати:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Розмір" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Розмір" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Ім'я" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(в основному вікні)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Порівняти" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Вид зліва" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Вид справа" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "дублікати" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "<=>" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "унікальні" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Для запуску натисніть \"Порівняти\" " #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Синхронізація" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Підтвердження перезапису" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Д&одати новий" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Скасувати" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "З&мінити" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "&Типовий" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Гаразд" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Вида&лити" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Параметри плагіну" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Визнача&ти тип архіву за вмістом" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Може вида&ляти файли" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Підтримує &шифрування" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Показувати як нормальні фа&йли (сховати іконку архіву)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Підтриму&є стиснення в пам'яті" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Може з&мінювати існуючі архіви" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Архів може містити декілька файлів" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Може створювати нові архі&ви" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Підтримує діалогове вікно з налашт&уваннями" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Дозволити шукати текст у архі&вах" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Оп&ис:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Визна&чення рядка:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Розширення:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Позначки:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "І&м'я" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Плагін:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Плагін:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Про переглядач..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Відображає інформаційне повідомлення" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Копіювати файл" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Копіювати файл" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Видалити файл" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Видалити файл" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "На&ступний" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Завантажити наступний" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Попередній" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Завантажити попередній" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Дзеркально" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Дзеркально" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Перемістити файл" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Перемістити файл" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Перезавантажити" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Перезавантажити поточний файл" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Повернути на 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Повернути на 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Повернути на 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Повернути на 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Повернути на 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Повернути на 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Зберегти як..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Зберегти як..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Розтягнути" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Розтягнути зображення" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "на 90° ліворуч" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "на 90° праворуч" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Копіювати" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Копіювати" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Обрізати" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Видалити" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Видалити" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "На весь екран" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Підсвітити" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Дзеркально" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Перемістити" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Перемістити" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Малювати" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Червоні очі" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Змінити розмір" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Вернути" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Збільшити" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Зменшити" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Переглядач" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд-шоу" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Ручка" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Підсвітити" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Малювати" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Слайд-шоу" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Перегляд" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "на 180° праворуч" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "на 90° ліворуч" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "на 90° праворуч" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Про програму..." #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Показати як &двійковий" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Копіювати в буфер" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Редагування" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Код&ування" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Ви&хід" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "На весь екран" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Графіка" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Показати як &шістнадцятковий" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Малюнок" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Показати як &книгу" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Дзеркально" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Плагіни" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Попередній перегляд" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Друк..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Обертати" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Зберегти" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Зберегти як..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Скріншот" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Пошук" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Знайти далі" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Знайти раніше" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Виділити &усе" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Розтягнути" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Показати як &текст" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Перегляд" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Показати як текст з &розривами рядків" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Збільшити" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Зменшити" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "&Копіювати в буфер" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Виділити &все" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "С&тарт" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Зупини&ти" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Операції з файлами" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Завжди поверх інших вікон" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Використовуйте \"drag && drop\", щоб переміщувати операції між чергами" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Скасувати" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Нова черга" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Показати в окремому вікні" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "На початок черги" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "В кінець черги" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Черга" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "З черги" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Черга 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Черга 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Черга 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Черга 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Черга 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Показати в окремому вікні" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Призупинити все" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Якщо файл існує" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Якщо файл існує" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Працювати у фоні (окреме з’єднання)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Якщо файл існує" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Цей файл не може бути знайдений проте може допомогти, щоб перевірити остаточну комбінацію файлів:\n" "%s\n" "\n" "Чи не могли б ви зробити його доступним і натиснути \"Гаразд \", коли будете готові, \n" "або натиснути \"Скасувати \", щоб продовжити без нього? \n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Скасувати швидкий фільтр" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Скасувати поточну операцію" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Введіть ім’я файла з розширенням для перетягнутого тексту" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Формат тексту до імпорту" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Пошкоджені:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Загальні:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Відсутні:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Помилок читання:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Успішно:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Введіть контрольну суму і виберіть алгоритм:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Перевірити контрольну суму" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Всього:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Буфер обміну не містить допустимих даних панелі інструментів." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Все;Активна панель;Ліва панель;Права панель;Файлові операції;Конфігурація;Мережа;Різне;Паралельний порт;Принтер;Відмітки;Безпека;Буфер обміну;FTP;Навігація;Довідка;Вікно;Командний рядок;Інструменти;Вигляд;Користувач;Вкладки;Сортування;Звіт" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Класичне сортування;А-Я сортування" #: ulng.rscolattr msgid "Attr" msgstr "Атриб" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Розш" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ім'я" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Розмір" #: ulng.rsconfcolalign msgid "Align" msgstr "Вирівн" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Заголовок" #: ulng.rsconfcolconfig msgid "Config" msgstr "Налаштувати" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Видалити" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Вміст поля даних" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Перемістити" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Налаштування колонки" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Налаштування асоціацій з файлами" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Підтвердження командного рядка і параметрів" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Копіювати (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Імпортована панель інструментів DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Імпортована панель інструментів ТC" #: ulng.rsdefaultsuffixdroppedtext #, fuzzy msgid "_DroppedText" msgstr "_DroppedText" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename #, fuzzy msgid "_DroppedHTMLtext" msgstr "_DroppedHTMLtext" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename #, fuzzy msgid "_DroppedRichtext" msgstr "_DroppedRichtext" #: ulng.rsdefaultsuffixdroppedtextsimplefilename #, fuzzy msgid "_DroppedSimpleText" msgstr "_DroppedSimpleText" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename #, fuzzy msgid "_DroppedUnicodeUTF16text" msgstr "_DroppedUnicodeUTF16text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename #, fuzzy msgid "_DroppedUnicodeUTF8text" msgstr "_DroppedUnicodeUTF8text" #: ulng.rsdiffadds msgid " Adds: " msgstr "Додано:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Видалено:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Ці два файли ідентичні!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Співпадінь:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Змінено:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Всі операції завершено" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Прогрес всіх операцій %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "П&ерервати" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "В&се" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Додати" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Авто-перейменування вихідних файлів" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Скасувати" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Продов&жити" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "&Копіювати в" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Копіюв&ати у всі" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "В&ихід з програми" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Пропуст&ити все" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ні" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Жодного" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&ОК" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Ін&ший" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Перезаписати" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Пере&записати все" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Перезаписати всі &великі" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Замінити всі ста&рі" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Перезаписати всі &маленькі" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Пере&йменувати" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Підсумок" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Повтор&ити" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Пр&опустити" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Проп&устити все" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Так" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Підрахувати файли і теки" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Розрахувати контрольну суму..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Перевірити контрольну суму..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Копіювання файлу(ів)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Видалити файл(и)" #: ulng.rsdlgmv msgctxt "ulng.rsdlgmv" msgid "Move file(s)" msgstr "Переміщення файлу(ів)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Пау&за" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Старт" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Черга" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Швидкість %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Швидкість %s/с, залишилось часу %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Розрізати" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Стерти файл(и)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<no label>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<no media>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Внутрішній редактор Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Перейти до рядка:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Перехід до рядка" #: ulng.rseditnewfile msgid "new.txt" msgstr "Новий.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ім'я файлу:" #: ulng.rseditnewopen msgid "Open file" msgstr "Відкрити файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Назад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Пошук" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Вперед" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замінити" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "із зовнішнім редактором" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "з внутрішнім редактором" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Виконати через оболонку" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Виконати через термінал і закрити" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Виконати через термінал і лишити відкритим" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Експортувати_з_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Запитати;Замінити;Копіювати в; Пропустити" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Запитати;Замінити;Замінити старі;Пропустити" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Запитати;Не встановлювати більше;Ігнорувати помилки" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Фільтр" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Визначення шаблону" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s рівень(і)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Всюди (необмежена глибина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Тільки поточному каталогозі" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Каталог %s не існує!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Знайдено: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Зберегти шаблон пошуку" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ім'я шаблону" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Проглянуто: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Сканування" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Пошук файлів" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Починати з" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Вільно %s з %s байт" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s байт вільно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Дата/Час доступу" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Атрибути" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Коментар" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Стиснутий розмір" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Дата/Час створення" #: ulng.rsfuncext msgid "Extension" msgstr "Розширення" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Група" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Посилання на" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Дата/Час зміни" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ім'я" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ім’я без розширення" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Власник" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Шлях" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Розмір" #: ulng.rsfunctype msgid "Type" msgstr "Тип" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Помилка створення жорсткого посилання." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Вибачте, нічого імпортувати!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Увага! При відновленні файлу .hotlist з резервної копії, буде стерто існуючий список.\n" "\n" "Ви впевнені, що хочете продовжити?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Вікно Копіювання/Переміщення" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Порівнювач" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Діалог редагування коментаря" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Редактор" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Пошук файлів" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основний" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Переглядач" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Не вдається знати файл типової панелі інструментів" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Компонування завершено" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Маска зняття вибору" #: ulng.rsmarkplus msgid "Select mask" msgstr "Маска вибору" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Вкажіть маску (роздільник - ';'):" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Набір колонок з таким іменем вже існує." #: ulng.rsmenuconfigurecolumnssavetochange #, fuzzy #| msgid "To change current editing columns view, either SAVE, COPY or DELETE current editing one" msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Для зміни поточного редагування набору колонок, або збереження, копійювання чи видалення одного" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Налаштувати набір колонок" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Введіть нове ім’я набору колонок" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Налаштувати поточний набір колонок" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Команди" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Редагувати" #: ulng.rsmnueject msgid "Eject" msgstr "Витягнути" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Монтувати" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Створити" #: ulng.rsmnunomedia msgid "No media available" msgstr "Немає доступних носіїв" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Відкрити" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Відкрити з допомогою..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Інше..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Сортувати за" #: ulng.rsmnuumount msgid "Unmount" msgstr "Розмонтувати" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Перегляд" #: ulng.rsmsgaccount msgid "Account:" msgstr "Обліковий запис:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Додаткові параметри для командного рядка архіватора:" #: ulng.rsmsgbadcrc32 #, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Не збігається контрольна сума для файлу:\n" "\"%s\"\n" "\n" "Бажаєте зберегти пошкоджений файл в будь-якому разі?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Ви не можете скопіювати/перемістити файл \"%s\" в самого себе!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Не вдається видалити каталог %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Перехід в каталог [%s] не вдався!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Видалити всі неактивні вкладки?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Закладка (%s) заблокована. Закрити?" #: ulng.rsmsgcolumnsmodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding columns view have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Опції відносно набору колонок було змінено.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ви впевнені, що хочете вийти?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Не вдалося скопіювати назад - бажаєте зберегти змінений файл?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Копіювати %d обраних файлів/каталогів?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Копіювати виділене \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Створення нового типу файла \"%s files\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Введіть розташування і ім'я файлу, куди зберегти файл панелі інструментів" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Дії користувача" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Видалити частково скопійований файл?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Видалити %d обраних файлів/каталогів?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Видалити %d обраних файлів/каталогів у смітник?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Видалити вибрані \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Видалити вибрані \"%s\" в смітник" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Неможливо видалити \"%s\" у смітник! Видалити назавжди?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск не доступний" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Опції відноски перетягування мишею були змінені. Зберегти зміни перед виходом?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Введіть ім’я дії користувача:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Введіть розширення файла:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Введіть ім'я:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Введіть ім'я нового типу файла, щоб створити розширення для \"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Контрольна сума не співпадає, архів пошкоджено." #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Дані пошкоджено" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Неможливо з'єднатися з серевером: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Помилка при копіюванні файлу %s в %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Там вже існує каталог з ім'ям \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Дата %s не підтримується" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Каталог %s існує!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Припинено користувачем" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Не можу закрити файл" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Не можу створити файл" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "В архіві немає більше файлів" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Не можу відкрити існуючий файл" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Помилка читання з файлу" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Помилка запису в файл" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Не можу створити каталог %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Некоректне посилання" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Файли не знайдено" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостатньо пам'яті" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Функція не підтримується!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Помилка в команді контекстного меню" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Помилка при завантаженні конфігурації" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Синтаксична помилка в регулярному виразі!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Неможливо перейменувати файл з %s в %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Не вдається зберегти асоціацію!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Неможливо зберегти файл" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Неможливо встановити атрибути для \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Неможливо встановити дату/час для \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Не вдається встановити права/групу для \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Не вдається встановити права для \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буфер переповнено" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Надто багато файлів для запакування" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Архів пошкоджено або має невідомий формат" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(кінець підменю)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Ім'я" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Назва меню:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(роздільник)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Назва підменю" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave #, fuzzy #| msgid "" #| "File extension associations extra options have been modified.\n" #| "\n" #| "Do you want to save before to exit?\n" msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Додаткові опції асоціації розширення файлів було змінено.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave #, fuzzy #| msgid "" #| "File extension associations have been modified.\n" #| "\n" #| "Do you want to save before to exit?\n" msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Асоціації розширеня файлів було змінено.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Файл %s змінено, зберегти?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s байт, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Перезаписати:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Файл %s існує, перезаписати?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "З файлу:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Не знайдено файл \"%s\"." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Активні операції з файлами" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Деякі операції з файлами ще не завершені. Закриття Double Commander може призвести до втрати даних." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Опції операцій з файлами було змінено. Збеергти зміни перед виходом?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding panel color have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Опції відносно кольору панелі були змінені.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Файл %s помічений як доступний лише для читання. Видалити?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Розмір файлу \"%s\" є занадто великим для цільової файлової системи!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Тека %s існує, перезаписати?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Прямувати за посиланням \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Виберіть текстовий формат для імпорту" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Додати %d виділених тек" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Додати виділений каталог:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Додати поточний каталог:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Виконати каманду" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Налаштування обраних каталогів" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Ви впевнені, що хочете видалити всі записи зі списку Обраних каталогів? (Шляху назад не буде!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Це виконає наступну команду:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Це Вибраний каталог по імені" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Це змінить активну панель на наступний шлях:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "І змінить неактивну панель на наступний шлях:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Помилка резервного копіювання..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Помилка експорту об’єктів..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Експортувати все!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Експорт обраних каталогів - Виділіть об’єкти для експорту" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Експотрувати виділене" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Імпортувати все!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Імпорт обраних каталогів - Виділіть об’єкти для експорту" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Імпортувати виділене" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Шлях" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Знайдіть файл \".hotlist\" для імпорту" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Список обраних каталогів було змінено, зберегти перш ніж вийти?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ім’я обраних каталогів" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Кількість нових елементів: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Нічого не вибрано для експорта!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Шлях до Обраних каталогів" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Передодати обраний каталог:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Передодати поточний каталог:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Введіть розташування і ім'я файлу Обраних каталогів для відновлення" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Команди:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(кінець підменю)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Назва меню:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Назва:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(роздільник)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Назва підменю" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Обрані каталоги у призначенні" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Визначте, як має бути відсортована активна панель після зміни каталога " #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Визначте, як має бути відсортована НЕактивна панель після зміни каталога " #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Деякі функції, щоб вибрати відповідний шлях - відносний, абсолютний, спеціальні папки Windows, тощо." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Всього об’єктів збережено: %d\n" "\n" "Ім’я резервного файла: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Всього записів експортовано:" #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Ви хочете видалити всі елементи всередині підменю [%s]?\n" "Відповідь НІ видалить тільки роздільники і залишить елементи всередині підменю.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Введіть розташування і ім’я файла, куди зберегти файл Обраних каталогів" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Невірна довжина файла : \"%s\"" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Будь ласка, вставте наступний диск чи щось подібне.\n" "\n" "Це дозволить запис цього файла:\n" "\"%s\"\n" "\n" "Кількість вільних байт для запису:%d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Помилка в командному рядку" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Некоректне ім’я файла" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неправильний формат файла конфігурації" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Некоректний шлях" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Шлях %s містить недопустимі символи." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Цей плагін недопустимий!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Цей плагін створений для Double Commander %s. %s не може працювати з Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Недопустиме значення в лапках" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Некоректне виділення." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Завантаження списку файлів..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Знайдіть файл конфігурації TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Знадіть виконуваний файл ТС (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Копіювання файлу %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Видалення файлу %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Помилка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Зовнішній запуск" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Зовнішній результат" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Розпакування файлу %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Інформація: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Створення посилання %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Створення каталогу %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Переміщення файлу %s" #: ulng.rsmsglogoptionsmodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding log have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Опції відносно звіту було змінено.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Упакування в файл %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Видалення каталогу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Виконано: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Створення символьного посилання %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Перевірка цілістності файлу %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Знищення файлу %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Знищення каталогу %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Суперпароль" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Будь ласка, введіть суперпароль:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Налаштування \"Різне\" змінено. Бажаєте зберегти налаштуваня перед виходом?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Новий файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Наступний том буде розпаковано" #: ulng.rsmsgnofiles msgid "No files" msgstr "Файли відсутні" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Немає виділених файлів." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостатньо місця на отримувачі. Продовжити?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостатньо місця на отримувачі. Повторити?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Не можу стерти файл %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Не реалізовано" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Нижче попередній перегляд. Ви можете переміщати курсор і вибрати файли, щоб отримати фактичний вигляд різних налаштувань." #: ulng.rsmsgpassword msgid "Password:" msgstr "Пароль:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Паролі відрізняються!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Будь ласка, введіть пароль:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Пароль (Фаєрвол):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Будь ласка, ще раз введіть пароль для перевірки:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Додати %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Налаштувати" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "Видалити %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Шаблон \"%s\" вже існує. Перезаписати?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Проблема виконання команди (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Ім’я файла для перетягнутого тексту:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Будь ласка, переконайтеся у доступності файла. Спробувати ще раз?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Перейменувати/перемістити %d вибраних файлів/каталогів?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Перейменувати/перемістити вибраний \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Будь ласка, перезапустіть Double Commander для того щоб зміни вступили в дію" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Виберіть тип файлу до якого треба додати розширення \"%s\"" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Виділено: %s з %s, файлів: %d з %d, папок: %d з %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Виберіть виконуваний файл" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Виберіть лише файли контрольних сум!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Вкажіть шлях до наступного тому" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Встановити мітку диску" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Спеціальні теки" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Додати шлях від активного фрейма" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Додати шлях від неактивного фрейма" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Перейти і використати обраний шлях" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Використовуйте змінну оточення..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Перейти до спеціальної теки DC..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Перейти в змінну оточення..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "пеерйти у інші спеціальні папки Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Перейти у спеціальні теки Windows (ТС)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Зробити шлях відносним" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Зробити відносний шлях до спеціальної папки DC..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Зробити відносний шлях до змінної оточення..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Зробити відносний шлях до спеціальної теки (ТС)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Зробити відносний шлях до спеціальної теки Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Використовувати спеціальні шляхи DC..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Використовувати іншу спеціальну папку Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Використовувати спеціальну теку Windows (ТС)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Перейменування вкладки" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Нове ім’я вкладки" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Шлях призначення:" #: ulng.rsmsgtcconfignotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Помилка! Відсутній файл конфігурації ТС:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration executable:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Помилка! Відсутній виконуваний файл ТС:\n" "%s\n" #: ulng.rsmsgtcisrunning #, fuzzy #| msgid "" #| "Error! TC is still running but it should be closed for this operation.\n" #| "Close it and press OK or press CANCEL to abort.\n" msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Помилка! ТС має бути закритий для цієї операції.\n" "Закрийте його і натисніть Гаразд або натисніть Скасувати.\n" #: ulng.rsmsgtctoolbarnotfound #, fuzzy #| msgid "" #| "Error! Cannot find the desired wanted TC toolbar output folder:\n" #| "%s\n" msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Помилка! Відсутня необхідна тека для Панелі інструментів ТС:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Введіть розташування і ім'я файлу, куди зберегти файл панелі інструментів ТС" #: ulng.rsmsgterminaloptionsmodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding terminal have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Опції відносно термінала було змінено.\n" "\n" "Зберегти зміни перед виходом?\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" тепер в буфері обміну" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Розширення вибраного файлу немає у визнаних типах файлів" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Помилка! Проблеми збереження панелі інструментів!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Знайдіть файл \".toolbar\" для імпорту" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Знайдіть файл \".BAR\" для імпорту" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Панель інструментів було змінено. Зберегти перед виходом?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Введіть розташування і ім'я файла Панелі інструментів для відновлення" #: ulng.rsmsgtoolbarsaved #, fuzzy #| msgid "" #| "Saved!\n" #| "Toolbar filename: %s\n" msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Збережено!\n" "Назва панелі інструментів: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Виділено надто багато файлів." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Невизначений" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<NO EXT>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<NO EXT>" #: ulng.rsmsgusername msgid "User name:" msgstr "Ім'я користувача:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Ім'я користувача (Фаєрвол):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Мітка диску:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Будь ласка, введіть розмір тому:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Стерти %d обраних файлів/каталогів?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Стерти обраний \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "з" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без змін;ПРОПИСНІ;рядкові;З Прописної;Кожне Слово З Прописної;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Перервано" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Розрахунок контрольної суми" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Розрахунок контрольної суми в \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Розрахунок контрольної суми \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Підрахунок" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Розрахунок \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "З’єднання" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Додавання файлів in \"%s\" to \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Копіювання" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Копіювання з \"%s\" до \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Копіювання \"%s\" до \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Створення каталогу" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Створення каталогу \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Видалення" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Видалення в \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Видалення \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Розпакування" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Виконання \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Розпакування" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Видобування з \"%s\" до \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Завершено" #: ulng.rsoperlisting msgid "Listing" msgstr "Створення списку" #: ulng.rsoperlistingin #, fuzzy msgid "Listing \"%s\"" msgstr "Складання списку \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Переміщення" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Переміщення з \"%s\" до \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Переміщення \"%s\" до \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Не запущено" #: ulng.rsoperpacking msgid "Packing" msgstr "Упакування" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Упакування з \"%s\" до \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Упакування \"%s\" до \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Призупинено" #: ulng.rsoperpausing msgid "Pausing" msgstr "Призупинення" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "У черзі" #: ulng.rsoperrunning msgid "Running" msgstr "Виконується" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Встановлення властивостей" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Встановлення властивостей в \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Встановлення властивостей на \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Розрізання" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Розрізання \"%s\" до \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Запускається" #: ulng.rsoperstopped msgid "Stopped" msgstr "Зупинено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Зупиняється" #: ulng.rsopertesting msgid "Testing" msgstr "Тестування" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Тестування в \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Тестування \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Перевірка контрольної суми" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Перевірка контрольної суми в \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Перевірка контрольної суми \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Очікування доступу до джерела" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Очікування відповіді від користувача" #: ulng.rsoperwiping msgid "Wiping" msgstr "Стирання" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Стирання в \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Стирання \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Опрацювання" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Додати на початку;Додати в кінці;Розумне додавання" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Видалити:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Розпакувати без шляхів:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Синтаксичний аналіз:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Позиція ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Діапазон пошуку ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Параметр" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Рядок запиту пароля:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Створити саморозпаковуваний архів:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Перевірити:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Тип архіву:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Значення" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Асоціювати плагін \"%s\" з:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Першої колонки;Останньої колонки;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Класичне типове сортування;У алфавітному порядку (мова в першу чергу)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Активна панель зліва, неактивна панель зправа (класично);Ліва панель - зліва, права зправа" #: ulng.rsoptdisable msgid "Disable" msgstr "Вимкнути" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Увімкнути" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Введіть розширення" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Курсор" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Відмітка" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Відмітка + Курсор" #: ulng.rsoptexampletext msgid "Text" msgstr "Текст" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "в окремому вікні; мінімізувати в окремому вікні; панель операції" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "Плаваючий;Б;KБ;MБ;ГБ" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Буде зареєстровано гар.клавішу %s для cm_Delete , таким чином вона буде використана для реверсінгу налаштування." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Додати гар.кл. для %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Додати гар.клавішу" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Не можливо встановити ярлик" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Змінити ярлик" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Команди" #: ulng.rsopthotkeysdeletetrashcanoverrides #, fuzzy msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Ярлик %s для cm_Delete має параметр, який перекриває ці налаштування. Змінити цей параметр, щоб використовувати глобальні налаштування?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, fuzzy msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Параметр ярлика %s для cm_Delete повинен бути змінений відповідно до контекстного %s. Змінити його?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Опис" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Змінити гар.клавішу для %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Зафіксувати параметр" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Гаряча клавіша" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Гарячі клавіші" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<none>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Параметри" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Встановити ярлик для видалення файлу" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, fuzzy msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Для цього налаштування роботи з ярликом %s, ярлику %s повинен бути присвоєний cm_Delete, але це вже присвоєно для %s. Змінити це?" #: ulng.rsopthotkeysshortcutfordeleteissequence #, fuzzy msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Ярлик %s для cm_Delete є ярликом послідовності для якого не може бути призначена гар.кл. з інв. Shift. Цей параметр не буде працювати." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Гаряча клавіша вже використовується" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy,badformat #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Гаряча клавіша %s вже використовується для %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Змінити на %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "використовується для %s в %s" #: ulng.rsopthotkeysusedwithdifferentparams #, fuzzy msgid "used for this command but with different parameters" msgstr "використовувати для цієї команди, але з різними параметрами" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Архіватори" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Автооновлення" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Поведінка" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Короткий" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Кольори" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Колонки" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Конфігурація" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Набір колонок" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Вибрані каталоги" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Перетягування" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Кнопки дисків" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Додаткові асоціації файлу" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Асоціації з файлами" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Операції з файлами" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Файлові панелі" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Перегляд файлів" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Типи файлів" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Вкладки тек" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифти" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Підсвітка" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Гарячі клавіші" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Іконки" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Чорний список" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавіатура" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Мова" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Вигляд вікна" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Звіт" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Різне" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Миша" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Плагіни" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Швидкий пошук/фільтр" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Термінал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Панель інструментів" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Доповнення" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Інструменти" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Підказки" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Немає;Командний рядок;Швидкий пошук;Швидкий фільтр" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ліва кнопка;Права кнопка;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "з початку списку файлів; після каталогів (якщо каталоги сортуються перед файлами); за сортуванням; в кінці списку файлів" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Плагін %s вже призначено для наступних розширень:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Активний" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ім'я файлу" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ім'я" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Асоціації з" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Чутливий;&Не чутливий" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Файли;&Каталоги;Файли &і каталоги" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Приховати панель фільтру якщо не у фокусі; Зберігайте налаштування модифікацій до наступної сесії" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "не чутливі до регістру; залежно від налаштувань локалі (aAbBcC); спочатку верхній а потім нижній регістр (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "сортувати по імені і показувати першими; сортувати як файли і показувати першими; сортувати як файли" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "За абеткою, з урахуванням наголосів; Природне сортування: по алфавіту і цифрах" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Зверху;Знизу" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Роздільник;&Внутрішні команди;&Зовнішні команди;&Меню" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Класичний DC - Copy (x) filename.ext;Windows - filename (x).ext;Інший - filename(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не змінювати положення; використовувати ті ж налаштування, як для нових файлів; сортувати по позиції" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлів: %d, папок: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Не можу змінити права доступу для \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Не можу змінити власника для \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Каталог" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Іменований канал" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Ні" #: ulng.rspropssocket msgid "Socket" msgstr "Сокет" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Особливий блочний пристрій" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Особливий символьний пристрій" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Символьне посилання" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Невідомий тип" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Так (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Результати пошуку" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Пошук" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<безіменний шаблон>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Виберіть каталог" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Пока&зати довідку для %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Всім" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Категорії" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Колонка" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Команди" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Ім’я" #: ulng.rssimplewordfiles msgid "files" msgstr "файли" #: ulng.rssimplewordparameter msgid "Param" msgstr "Параметр" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Попередній перегляд" #: ulng.rssimplewordresult msgid "Result" msgstr "Результат" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "РобТека" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Байти" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гігабайти" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Кілобайти" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабайти" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабайти" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлів: %d, Каталогів: %d, Розмір: %s (%s байт)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Не можу створити каталог призначення!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Невірний формат розміру файла!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Не можу розрізати файл!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Кількість частин більше 100! Продовжити?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Виберіть каталог:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Помилка створення симв. посилання." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Типовий текст" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Простий текст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Днів" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Годин(а)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Хвилин(а)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Місяців" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунд(а)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Тижнів" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Років" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Порівнювач" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Редактор" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Помилка відкриття порівнювача" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Помилка відкриття редактора" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Помилка відкриття терміналу" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Помилка відкриття переглядача" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Термінал" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Переглядач" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "При помилці зверніться до розробників. У листі опишіть помилку, вкажіть при яких діях вона виникла і вкладіть цей файл:%s. Натисніть %s щоб продовжити чи %s щоб перервати роботу." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Обидві панелі, з активної в неактивну" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Обидві панелі, з лівої в праву" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Шлях до панелі" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Заключіть кожне ім’я у дужки чи у щось інше" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Тільки ім’я, без розширення" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Повне ім'я файлу (шлях + ім'я файлу)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Допомога зі змінними \"%\"" #: ulng.rsvarinputparam #, fuzzy msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Буде пропонувати користувачу ввести необхідне значення параметра (типово)" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Ліва панель" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Тимчасове ім'я списку імен файлів" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Тимчасове ім'я списку повних імен файлів (шлях + ім'я файлу)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Тимчасове ім'я списку імен файлів з відносними шляхами" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Тільки розширення файлу" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Тільки ім’я файлу" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Інший приклад можливостей" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Шлях з роздільником в кінці" #: ulng.rsvarpercentchangetopound #, fuzzy msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Звідси і до кінця рядка, індикатор відсотків змінної знак - \"#\"" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Повернути знак відсотків" #: ulng.rsvarpoundchangetopercent #, fuzzy msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Звідси до кінця рядка, індикатор відсотків змінної повертається знак - \"%\"" #: ulng.rsvarprependelement #, fuzzy msgid "Prepend each name with \"-a \" or what you want" msgstr "Попередньо очікуйте кожне ім’я з \"-a \" чи чого хочете" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Запитувати користувача;Пропонувати типове значення]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Ім’я файлу з відносним шляхом" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Права панель" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Повний шлях другого вибраного файлу в правій панелі" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Показати команду до виконання" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Просте повідомлення]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Покаже просте повідомлення" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Активна панель (джерело)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Неактивна панель (ціль)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Імена файлів будуть братися у лапки тут (типово)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Команда буде виконана в терміналі, залишаючись відкритою в кінці" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Шлях буде завершуватися роздільником" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Імена файлів не будуть братися тут у лапки" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Команда буде виконана в терміналі, закритому в кінці" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Шлях не буде завершуватися роздільником (типово)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мережа" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Внутрішній переглядач Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Кодування" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Новий розмір" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s не знайдено!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "у зовнішньому переглядачі" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "у внутрішньому переглядачі" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Кількість замін: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Заміна не відбулася." ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.po���������������������������������������������������������������0000644�0001750�0000144�00001053411�12666540554�016620� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Full Name <email@address>\n" "Language-Team: Language <email@address>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: English\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "" #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "" #: tfrmeditor.menuitem1.caption msgctxt "TFRMEDITOR.MENUITEM1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "" #: tfrmfileop.lblto.caption msgid "To:" msgstr "" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmhardlink.caption msgid "Create hard link" msgstr "" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "" #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "" #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "" #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr "" #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "" #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline10.caption msgctxt "TFRMMAIN.MILINE10.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline11.caption msgctxt "TFRMMAIN.MILINE11.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline21.caption msgctxt "TFRMMAIN.MILINE21.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline23.caption msgctxt "TFRMMAIN.MILINE23.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline26.caption msgctxt "TFRMMAIN.MILINE26.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline39.caption msgctxt "TFRMMAIN.MILINE39.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline40.caption msgctxt "TFRMMAIN.MILINE40.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "" #: tfrmmain.mimove.caption msgid "Move..." msgstr "" #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmmkdir.caption msgid "Create new directory" msgstr "" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "" #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "" #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "" #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "" #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "TFRMOPTIONSARCHIVERS.BTNRELATIVEARCHIVER.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "" #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION" msgid "BackGround:" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION" msgid "Background 2:" msgstr "" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION" msgid "Font:" msgstr "" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION" msgid "Text Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION" msgid "Add column" msgstr "" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "TFRMOPTIONSFAVORITETABS.CBSAVEDIRHISTORY.TEXT" msgid "No" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edit" msgstr "" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "TFRMOPTIONSFILEASSOC.MENUITEM1.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption msgctxt "TFRMOPTIONSFILEASSOC.MISEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "" #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[0].TITLE.CAPTION" msgid "Command" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[1].TITLE.CAPTION" msgid "Hotkeys" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[2].TITLE.CAPTION" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "" #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "TFRMOPTIONSTABSEXTRA.LBLFAVORITETABSSAVEDIRHISTORY.CAPTION" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSECMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.HINT" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr "" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "" #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "TFRMOPTIONSTOOLTIPS.CHKSHOWTOOLTIP.CAPTION" msgid "&Show tooltip for files in the file panel" msgstr "" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "" #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr "" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr "" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "" #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "" #: ulng.rscolext msgid "Ext" msgstr "" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "" #: ulng.rsconfcolalign msgid "Align" msgstr "" #: ulng.rsconfcolcaption msgid "Caption" msgstr "" #: ulng.rsconfcolconfig msgid "Config" msgstr "" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "" #: ulng.rsconfcustheader msgid "Customize column" msgstr "" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "" #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "" #: ulng.rseditnewfilename msgid "Filename:" msgstr "" #: ulng.rseditnewopen msgid "Open file" msgstr "" #: ulng.rseditsearchback msgid "&Backward" msgstr "" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "" #: ulng.rsfindscanning msgid "Scanning" msgstr "" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "" #: ulng.rsfuncatime msgid "Access date/time" msgstr "" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "" #: ulng.rsfuncext msgid "Extension" msgstr "" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "" #: ulng.rsfunctype msgid "Type" msgstr "" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "" #: ulng.rshotkeycategorymain msgid "Main" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "" #: ulng.rsmarkplus msgid "Select mask" msgstr "" #: ulng.rsmaskinput msgid "Input mask:" msgstr "" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "" #: ulng.rsmnueject msgid "Eject" msgstr "" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "" #: ulng.rsmnunomedia msgid "No media available" msgstr "" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "" #: ulng.rsmnuopenwith msgid "Open with" msgstr "" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "" #: ulng.rsmnuumount msgid "Unmount" msgstr "" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "" #: ulng.rsmsgaccount msgid "Account:" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "" #: ulng.rsmsgentername msgid "Enter name:" msgstr "" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "" #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "" #: ulng.rsmsglogerror msgid "Error: " msgstr "" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "" #: ulng.rsmsgloginfo msgid "Info: " msgstr "" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "" #: ulng.rsoperaborted msgid "Aborted" msgstr "" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "" #: ulng.rsoperpausing msgid "Pausing" msgstr "" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "" #: ulng.rsoperrunning msgid "Running" msgstr "" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "" #: ulng.rsoperstopped msgid "Stopped" msgstr "" #: ulng.rsoperstopping msgid "Stopping" msgstr "" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "" #: ulng.rsoperworking msgid "Working" msgstr "" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "" #: ulng.rsoptenterext msgid "Enter extension" msgstr "" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "" #: ulng.rsoptexamplemark msgid "Mark" msgstr "" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "" #: ulng.rsoptexampletext msgid "Text" msgstr "" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "" #: ulng.rspropssocket msgid "Socket" msgstr "" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "" #: ulng.rssearchresult msgid "Search result" msgstr "" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "" #: ulng.rstimeunityear msgid "Year(s)" msgstr "" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.sk.po������������������������������������������������������������0000644�0001750�0000144�00001220727�12666540554�017242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.0 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-05-08 18:30+0300\n" "PO-Revision-Date: 2015-03-16 20:20+0100\n" "Last-Translator: Rastislav Vojtek <rastislav.vojtek@enel.com>\n" "Language-Team: Slovenský <sk@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Slovenčina\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Všetko" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Zrušiť" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption #, fuzzy msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption #, fuzzy msgid "Configure custom columns view" msgstr "Konfigurovať vlastný pohľad (stĺpce)" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Pozadie:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Rámček kurzoru" #: tfcolumnssetconf.cbovercolor.caption #, fuzzy msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Použiť vlastný font a farbu" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Farba písma:" #: tfcolumnssetconf.label3.caption #, fuzzy #| msgid "Configure view nr:" msgctxt "TFCOLUMNSSETCONF.LABEL3.CAPTION" msgid "Font:" msgstr "Konfigurácia pohľadu č.:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Veľkosť:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Pozadie 2:" #: tfcolumnssetconf.lblconfigviewnr.caption #, fuzzy #| msgid "Configure view nr:" msgctxt "TFCOLUMNSSETCONF.LBLCONFIGVIEWNR.CAPTION" msgid "Configure view nr:" msgstr "Konfigurácia pohľadu č.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Farba kurzoru:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Farba označených:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Meno:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Pridať stĺpec" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Nastavenie stĺpcov:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Náhľad" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vyber šablónu" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Kontrolovať voľné miesto" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopírovať atribút&y" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopírovať vlastníka" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopírov&ať dátum/čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Opraviť od&kazy" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Zahodiť znak len na čítanie" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Vynechať prázdne adresáre" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Nas&ledovať odkazy" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Vyh&radený priestor" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Čo urobiť, ak nemôžem nastaviť súboru čas, atribúty a pod." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Použi šablónu súboru" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "Ak adresár &existuje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Ak súbor existuje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ak sa nedá nastaviť vlastnosť" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Zavrieť" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopírovať do schránky" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domovská stránka:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revízia" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Verzia" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Zvoľte atribúty" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Archivovať" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Komprimovaný" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Adresár" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Šifrovaný" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Skrytý" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Len na čítanie" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Riedky" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "&Symbolický link" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystémový" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Dočasný" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS atribúty" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Všeobecné atribúty" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Ako te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Výpočet kontrolného súčtu..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Vytvo&riť samostatný MD5/SHA1 pre každý súbor" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Uložiť &súbor(y) s kontrolným súčtom do:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Overiť kontrolný súčet..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Pri&dať" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Prip&ojiť" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Vymazať" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Správca pripojení" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Pripojiť k:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Pri&daj do fronty" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Voľby" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Uložiť tieto &voľby ako východzie" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopírovať súbor(y)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentár k súboru/adresáru" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Upraviť komentár k:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Zakódovani&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automaticky porovnať" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Binárny mód" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Zrušiť" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Zrušiť" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopírovať blok vpravo" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopírovať blok vpravo" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopírovať blok vľavo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopírovať blok vľavo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovať" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vybr&ať všetko" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Späť" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Koniec" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Prvý rozdiel" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Prvý rozdiel" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorovať veľkosť písmien" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorovať prázdne znaky" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Skrolovať bez prerušenia" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Posledný rozdiel" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Posledný rozdiel" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Rozdiely riadkov" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Ďalší rozdiel" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Ďalší rozdiel" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otvoriť ľavý" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otvoriť pravý" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Vyfarbiť pozadie" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Predchádzajúci rozdiel" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Predchádzajúci rozdiel" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Obnoviť" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Obnoviť" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Uložiť" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Uložiť" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Uložiť ako..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Uložiť ako..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Uložiť ľavý" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Uložiť ľavý" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Uložiť ľavý ako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Uložiť ľavý ako..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Uložiť pravý" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Uložiť pravý" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Uložiť pravý ako..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Uložiť pravý ako..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Porovnať" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Porovnať" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kódovanie" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kódovanie" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Porovnať súbory" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "Vľavo" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "Vpravo" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akcie" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Upraviť" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kódovanie" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Súbor" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Nastavenia" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Pridaj novú skratku k sekvencii" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Zmazať poslednú skratku zo sekvencie" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Iba pre toto riadenie" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (každý v samostatnom riadku):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Klávesové skratky" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "O programe" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Konfigurácia" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Umiestnenie konfigurácie" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopírovať" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Vystrihnúť" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Vymazať" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Hľadať" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Hľadať" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Hľadať ďalší" #: tfrmeditor.acteditgotoline.caption msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Vložiť" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Opakovať" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Opakovať" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Nahradiť" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Nahradiť" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Vybrať &Všetko" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Vybrať všetko" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Späť" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Zpäť" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Zavrieť" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Koniec" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Koniec" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nový" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nový" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otvoriť" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Otvoriť" #: tfrmeditor.actfilesave.caption #, fuzzy msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Uložiť" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Uložiť" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Uložiť &ako.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Uložiť ako" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "&Uložiť Všetko" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Uložiť všetko" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editovať" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dovanie" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otvoriť ako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Uložiť ako" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Súbor" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Zvýrazňovanie syntaxu" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Koniec riadku" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "tfrmeditor.n5.caption" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Rozlišovať veľkosť" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Hľadať od &striešky" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulárne výrazy" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Len vybraný &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Len celé slová" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Voľba" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Nahradiť týmto:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Vyhľadať:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Rozbaliť súbory" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Rozbaliť aj s cestou, ak je uložená" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Rozbaliť do oddelených po&dzložiek (podľa názvu archívu)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Prepísať existujúca súbory" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Rozbaliť súbory do:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "&Súbory na rozbalenie:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Heslo pre šifrované súbory:" #: tfrmfileassoc.btnaddact.caption #, fuzzy msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Pridať" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Pridať" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Pridať" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Dole" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Odstrániť" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Odstrániť" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Odst&rániť" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Pr&emenovať" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Hore" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Asociácie súborov" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Akcie" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Prípony" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Typy súborov" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Akcia:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Príkaz:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Editovať" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvoriť v editore" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Cesta k súboru" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Úplná cesta" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Získať výstup príkazu" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otvoriť" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Spustiť v terminále" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Otvoriť vo VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Zobraziť" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvoriť v prezerači" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Čakaj..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Meno súboru" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Od:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na Zavrieť, až keď bude možné zmazať dočasné súbory." #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Na panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Pohľad všetko" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuálna operácia:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Od:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Do:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zavrieť" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Nastav vlastnosti" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastav na všetky vybrané súbory" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Preskoč tento súbor" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Vlastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Textovo:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Obsahuje:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Meno:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cesta:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Posledný prístup:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Posledná zmena:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Posledná zmena stavu:" #: tfrmfileproperties.lbloctal.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Číselne:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Vlastník" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Veľkosť:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Zástupca:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Vlastnosti" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "&Upraviť" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Choď na súbor" #: tfrmfinddlg.btnlastsearch.caption msgid "&Last search" msgstr "&Posledné vyhľadávanie" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nové hľadanie" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Uložiť" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Vymazať" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Načítať" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Uložiť" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Ulož s \"Start in directory\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ak je uložené potom \"Start in directory\" bude obnovené pri nahrávaní šablóny. Použiť pri oprave hľadania na určený adresár." #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Zrušiť" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Použi šablónu" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "Z&obraziť" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "&Výsledok do okna" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Hľadať súbory" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Rozl&išovať veľkosť" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "&Dátum od:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Dátum do:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Veľkosť od:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Veľkosť do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Vyhľadať &text" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Nasledovať symlinky" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Hľadať súbory NE&obsahujúce text" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Nie staršie ako:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Hľadať časť mena" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulárne výrazy" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Nahradiť text" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Vybrané adresáre a súbory" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Čas od:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Čas do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Po&užiť vyhľadávací zásuvný modul:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Zadaj mená adresárov, ktoré by mali byť vynechané z vyhľadávania oddelené \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Zadaj mená súborov, ktoré by mali byť vynechané z vyhľadávania oddelené \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Zadaj mená súborov oddelené \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Adresáre" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Súbory" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Vyhľadávať v obsahu" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atribúty" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kódovanie:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "V&ynechať podadresáre" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Vynechať súbory" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Súborová maska" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "&Adresárová maska" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Prehľadať po&dadresáre:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Predchádzajúce hľadania:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odobrať zo zoznamu" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Ukázať všetky nájdené položky" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zobraziť v prehliadači" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Rozšírené" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Načítať/Uložiť" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Výsledky" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Normálne" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Hľadať" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Hľadať" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Rozlišovat veľkosť" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Vytvoriť hardlink" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Cieľ (kam bude odkaz ukazovať)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Spojovač súborov" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Uložiť do..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Položka" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Názov súboru" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Dolu" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Dolu" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Vymazať" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Hore" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Hore" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "O programe" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Pridať názov súboru do príkazového riadku" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Uložiť cestu a názov súboru do príkazového riadku" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopírovať cestu do príkazového riadku" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Vypočítať &obsadené miesto..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zmeniť adresár" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Ísť do nadradeného adresára" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Ísť do koreňového adresára" #: tfrmmain.actchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Vytvoriť kontrolný súčet..." #: tfrmmain.actchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Overiť kontrolný súčet..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Vymazať log súbor" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Vymazať okno logu" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Vymazať záložky" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Zavrieť záložku" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Nasledujúci príkazový riadok" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Nastav príkazový riadok na nasledujúci príkaz v histórii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Predchádzajúci príkazový riadok" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nastav príkazový riadok na predchádzajúci príkaz v histórii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Plný" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Stĺpcový pohľad" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porovnať po&dľa obsahu" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Porovnať adresáre" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Porovnať adresáre" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Zobraziť kontextové menu" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy F5" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopírovať mená, vrátane cesty, do schránky" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopírovať mená súborov do schránky" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopírovať súbory bez potvrdzovania" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopírovať do rovnakého panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopírovať" #: tfrmmain.actcountdircontent.caption #, fuzzy #| msgid "Sho&w occupied space" msgid "Sho&w Occupied Space" msgstr "Zo&braziť obsadené miesto" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Vys&trihnúť" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete F8" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Vymazať" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "História zložiek" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "&Rýchle adresáre" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit F4" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editovať" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." msgid "Edit Co&mment..." msgstr "Upraviť ko&mentár..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editovať nový súbor" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Upraviť cestu nad zoznamom súborov" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zameniť &panely" #: tfrmmain.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "Rozbaliť súbory..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Asociácia súborov..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Spojiť súbory" #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Zobraziť vlastnosti súboru" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Rozdeliť súbor..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Aktivovať príkazový riadok" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umiestniť kurzor na prvý súbor zoznamu" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umiestniť kurzor na posledný súbor zoznamu" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Vytvoriť &HardLink..." #: tfrmmain.acthelpindex.caption #, fuzzy #| msgid "Contents" msgid "&Contents" msgstr "Obsah" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Režim s horizontálnymi panelmi" #: tfrmmain.actkeyboard.caption #, fuzzy #| msgid "Keyboard" msgid "&Keyboard" msgstr "Klávesnica" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ľavý &= Pravý" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otvoriť ľavý zoznam diskov" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Nahrať vý&ber zo schránky" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Nahrať výber zo súboru..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Vytvor adresár" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "Vybrať všetko s rovnakou príponou" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "Invertovať výber" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Vybrať všetko" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Zrušiť výber sk&upiny" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Výber skupiny" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "Zr&ušiť výber" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizovať okno" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "Nástroj pre hromadné premenovanie" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Pripojiť sieťový adresár" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Odpojiť sieťový adresár" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Rýchle pripojiť zo siete" #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "Nová záložka" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "Prepnúť do novej záložky" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otvoriť" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Zkúsiť otvoriť archív" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otvoriť súbor lišty" #: tfrmmain.actopendirinnewtab.caption #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "Otvoriť adresár v novej záložke" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otvoriť VFS zoznam" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Konzola operácií" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "Nastavenia..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Zabaliť súbory..." #: tfrmmain.actpanelssplitterperpos.caption #, fuzzy msgid "Set splitter position" msgstr "Nastaviť pozíciu deliacej čiary" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Vložiť" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "Prepnúť do predchádzajúcej záložky" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Rýchly filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Rýchle hľadanie" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panel rýchleho náhľadu" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Obnoviť" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move F6" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Presun" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Presunúť/premenovať súbory bez potvrdzovania" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Premenovať" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Preme&novať záložku" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Obnoviť výbe&r" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Obrátené poradie" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Pravý &= Ľavý" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otvoriť pravý zoznam diskov" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Spustiť terminál" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Uložiť výber" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Uložiť výber do &súboru..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Hľadať" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Zmena atribútov" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Uzamknuté; adresáre otvárať v nových záložkách" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normálne" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Uzamknuté" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Uzamknuté; zmena adresára povolená" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Otvoriť" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otvor použité systémové asociácie" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Zobraziť menu tlačítok" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Zobraziť históriu príkazového riadku" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu F9" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Zobraziť skryté/systémové súbory" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Triediť podľa &atribútov" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Triediť podľa &dátumu" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Tri&ediť podľa prípony" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Triediť podľa &názvu" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Triediť podľa veľko&sti" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Povoliť/zakázať zoznam súborov, ktoré sa nemajú zobrazovať" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Vytvoriť Sym&Link..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Cieľ &= Zdroj" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Testovať archív(y)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Náhľady" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pohľad s náhľadmi" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Preniesť adresár pod kurzorom do ľavého okna" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Preniesť adresár pod kurzorom do pravého okna" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "Zrušiť výber súborov s rovnakou príponou" #: tfrmmain.actview.caption #, fuzzy #| msgid "View F3" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Zobraziť" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zobraziť históriu navštívených ciest" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ísť na nasledujúcu položku v histórii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ísť na predchádzajúcu položku v histórii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "Navštíviť domovskú stránku" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Bezpečne zmazať" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit F10" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Koniec" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Adresár" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Vymazať" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal F9" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminál" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Hotlist zložiek" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Zobraziť aktuálny adresár pravého panelu v ľavom panely" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Ísť do domovského adresára" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ísť do koreňového adresára" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ísť do nadradeného adresára" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Rýchle adresáre" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Zobraziť aktuálny adresár ľavého panelu v pravom panely" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cesta" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Zrušiť" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopírovať..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Vytvoriť odkaz..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "tfrmmain.miline37.caption" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Vyčistiť" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skryť" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vybrať všetko" #: tfrmmain.mimove.caption #, fuzzy msgid "Move..." msgstr "Presunúť..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Vytvoriť symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti záložiek" #: tfrmmain.mitrayiconexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Obnoviť" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Štart" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Príkazy" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Konfigurácia" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "&Súbory" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Pomoc" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Označiť" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Sieť" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Zobraziť" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Nastavenia" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Záložky" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopírovať" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Vystrihnúť" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Vymazať" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Upraviť" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Vložiť" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Klávesa" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "&Definovať..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "Alebo zvoľte preddefinovaný typ výbe&ru:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Vytvoriť nový adresár" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Zadajte nový názov adresára:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nová veľkosť" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Výška" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kvalita JPG kompresie" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Šírka" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Výška" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Šírka" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zavrieť" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Vymazať" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Nahrať (Ctrl+&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "P&remenovať" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Obnoviť všetko" #: tfrmmultirename.btnsavepreset.caption #, fuzzy msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Uložiť (Ctrl+&S)" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Hromadné premenovanie" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Log" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Regulárne výrazy" #: tfrmmultirename.cbusesubs.caption #, fuzzy #| msgid "Use substitution" msgid "&Use substitution" msgstr "Po&užiť substitúciu" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E] Prípona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Počítadlo" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Vyhľadať && Nahradiť" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log výsledku" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predvoľby" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "Prípona" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Hľadať..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "&Názov súboru" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Nahradiť..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Číslovať od" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Šírka" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C] Počítadlo" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Deň" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Deň (2 číslice)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Deň týždňa (skrátene, t.j. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] Deň týždňa (celý, t.j. \"pondelok\")" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozícii x" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x] Znaky od pozície x do y" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[h] Hodina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hodina (2 číslice)" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[n] Minúta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minúta (2 číslice)" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[M] Mesiac" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesiac (2 číslice)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Meno mesiaca (krátko, t.j. \"jan\")" #: tfrmmultirename.mimonth3.caption #, fuzzy #| msgid "[MMMM] Month name (long, e.g. \"january\")" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Meno mesiaca (celé, t.j. \"január\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]Názov" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozícii x" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaky od pozície x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Prípona..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Názov..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[s] Sekunda" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekundy (2 číslice)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 číslice)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 číslice)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Staré meno súboru" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nové meno súboru" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Cesta k súboru" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Vyber aplikáciu" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Užívateľský príkaz" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Ulož asociácie" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastav vybranú aplikáciu ako štandartnú akciu" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Typ súboru na otvorenie: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Viacnásobné mená súboru" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Jednoduché meno súboru" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Použiť" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Prosím, vyber jednu z podstránok, táto stránka neobsahuje nastavenia." #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "tfrmoptionsarchivers.btnautoconfig.caption" msgid "A&uto Configure" msgstr "A&utokonfigurovať" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsarchivers.btnmultiarcadd.caption" msgid "A&dd" msgstr "Pridať" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsarchivers.btnmultiarcapply.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsarchivers.btnmultiarcdelete.caption" msgid "D&elete" msgstr "Vymazať" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsarchivers.btnmultiarcrename.caption" msgid "&Rename" msgstr "Premenovať" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "tfrmoptionsarchivers.chkmultiarcdebug.caption" msgid "De&bug mode" msgstr "Režim ladenia" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "tfrmoptionsarchivers.chkmultiarcenabled.caption" msgid "E&nabled" msgstr "Povolené" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "tfrmoptionsarchivers.chkmultiarcoutput.caption" msgid "S&how console output" msgstr "Ukázať výstup konzoly" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "tfrmoptionsarchivers.gbarchiveroptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "tfrmoptionsarchivers.lblarchiveadd.caption" msgid "Add&ing:" msgstr "Pridať:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "tfrmoptionsarchivers.lblarchiveextension.caption" msgid "E&xtension:" msgstr "Prípona:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "tfrmoptionsarchivers.lblarchiveextract.caption" msgid "Ex&tract:" msgstr "Rozbaliť:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "tfrmoptionsarchivers.lblarchivelist.caption" msgid "&List:" msgstr "Zoznam:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "tfrmoptionsarchivers.lblarchivelistend.caption" msgid "Listing &finish (optional):" msgstr "Päta výpisu (nepovinné)" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "tfrmoptionsarchivers.lblarchivelistformat.caption" msgid "Listing for&mat:" msgstr "Formát výpisu" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "tfrmoptionsarchivers.lblarchiveliststart.caption" msgid "Listin&g start (optional):" msgstr "Hlavička výpisu (nepovinné)" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "tfrmoptionsarchivers.lblarchiver.caption" msgid "Arc&hiver:" msgstr "Archivátor:" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "tfrmoptionsarchivers.lbldescription.caption" msgid "De&scription:" msgstr "Popis:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Rozšírené" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Hlavné" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption #, fuzzy #| msgid "Also when &size, date, or attributes change" msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Tiež pri zmene &veľkosti, dátumu alebo atribútov" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Pre nasledujúce cesty a podadresáre" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "tfrmoptionsautorefresh.cbwatchfilenamechange.caption" msgid "When &files are created, deleted or renamed" msgstr "Aktualizovať zoznam pri vy&tvorení, zmazaní alebo premenovaní" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption #, fuzzy #| msgid "Don't &react to updates while in the background" msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Pokiaľ je aplikácia na pozadí" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Zakázať automatické obnovovanie" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Obnoviť zoznam súborov" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "tfrmoptionsbehavior.cbalwaysshowtrayicon.caption" msgid "Al&ways show tray icon" msgstr "Vždy zobraziť ikonu v oznamovacej oblasti" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automaticky skryť odpojené disky" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Minimalizovať do oznamovacej oblasti (System Tray)" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "tfrmoptionsbehavior.cbonlyonce.caption" msgid "A&llow only one copy of DC at a time" msgstr "Povoliť beh len jednej inštancie DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Tu môžeš zadať 1 alebo viac diskov alebo prípojných bodov oddelených \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Zoznam zakázaných diskov" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "tfrmoptionscolumnsview.cbcuttexttocolwidth.caption" msgid "Cut &text to column width" msgstr "Orezať text na šírku stĺpca" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "tfrmoptionscolumnsview.cbgridhorzline.caption" msgid "&Horizontal lines" msgstr "Horizontálne čiary" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "tfrmoptionscolumnsview.cbgridvertline.caption" msgid "&Vertical lines" msgstr "&Vertikálne čiary" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "tfrmoptionscolumnsview.chkautofillcolumns.caption" msgid "A&uto fill columns" msgstr "A&utomaticky vyplniť stĺpce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Zobraz mriežku" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Automatická veľkosť stĺpcov" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "tfrmoptionscolumnsview.lblautosizecolumn.caption" msgid "Auto si&ze column:" msgstr "Automatická veľkosť stĺpca" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "Upraviť" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "tfrmoptionsconfiguration.cbcmdlinehistory.caption" msgid "Co&mmand line history" msgstr "Históriu príkazového riadku" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "tfrmoptionsconfiguration.cbdirhistory.caption" msgid "&Directory history" msgstr "Históriu adresárov" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "tfrmoptionsconfiguration.cbfilemaskhistory.caption" msgid "&File mask history" msgstr "Históriu použitých masiek" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "tfrmoptionsconfiguration.chksaveconfiguration.caption" msgid "Sa&ve configuration" msgstr "Nastavenie" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "tfrmoptionsconfiguration.chksearchreplacehistory.caption" msgid "Searc&h/Replace history" msgstr "Históriu hľadania/nahrádzania" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Umiestnenie konfiguračných súborov" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Uložiť pri ukončení" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Nastaviť v príkazovom riadku" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "tfrmoptionsconfiguration.rbprogramdir.caption" msgid "P&rogram directory (portable version)" msgstr "Adresár p&rogramu (\"portable\" verzia)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "tfrmoptionsconfiguration.rbuserhomedir.caption" msgid "&User home directory" msgstr "Domovský adresár užívateľa" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Všetko" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Vymazať" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nový" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Uložiť ako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Uložiť" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Hlavné" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Rámček kurzoru" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Pozadie:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Pozadie 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "tfrmoptionscustomcolumns.lblconfigcolumns.caption" msgid "Con&figure columns view:" msgstr "Kon&figurácia stĺpcov pre systém súborov:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Farba kurzoru:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text kurzoru:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy #| msgid "Configure view nr:" msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Konfigurácia pohľadu č.:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Veľkosť:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Farba písma:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Farba označených:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Pridať stĺpec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Meno:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Cesta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Vystrihnúť" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Vložiť" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Ukáž potvrdzovacie okno po drop-e" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Ukáž súborový systém" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Ukáž voľný pri&estor" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Ukáž značku" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Zoznam diskov" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Pozadie" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Pozadie" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Uložiť" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atribúty prvku" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Pop&redie" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Pop&redie" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Textová značka" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Použi (a uprav) &globálnu schému nastavení" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Použi miestnu schému nastavení" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Tučné" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Vypni" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "Zapni" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kurzíva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "In&vert" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Vypni" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "Zapni" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Strike Out" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Pre&vrátiť" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Vyp" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "Zap" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podčiarknuť" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Pre&vrátiť" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Vyp" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Zap" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Vystrihnúť" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Vložiť" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Premenovať" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Pridať" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Prid&ať" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Pridať" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Dole" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Upraviť" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Odstrániť" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Odstrániť" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Odst&rániť" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Pr&emenovať" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Hore" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Akcie" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Prípony" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Typy súborov" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Akcia:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Príkaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Upraviť" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otvoriť v editore" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Získať výstup príkazu" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otvoriť" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Spustiť v terminále" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Zobraziť" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otvoriť v prezerači" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Ukázať okno potvrdenia pre:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operácie kopírovania" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operácie zmazania" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "tfrmoptionsfileoperations.cbdeletetotrash.caption" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&F8/Del presúva do koša (Shift=zmazať ihneď)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operácie vyhodenia do koša" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "tfrmoptionsfileoperations.cbdropreadonlyflag.caption" msgid "D&rop readonly flag" msgstr "Zahodiť znak len na čítanie" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operácie presunu" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgctxt "tfrmoptionsfileoperations.cbpartialnamesearch.caption" msgid "&Search for part of file name" msgstr "Hľadať časť mena súboru" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "tfrmoptionsfileoperations.cbprocesscomments.caption" msgid "&Process comments with files/folders" msgstr "Spracovať komentáre s adresármi/súbormi" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Vybrať meno súboru bez prípony, pri premenovaní" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Zobraziť výber záložky v dialógu \"kopírovať/presunúť\"" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "tfrmoptionsfileoperations.cbskipfileoperror.caption" msgid "S&kip file operations errors and write them to log window" msgstr "Preskočiť chyby súborových operácií a len ich zapísať do okna logov" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Vykonávanie operácií" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Hľadanie súborov" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Užívateľský interfejs" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Veľkosť zásobníka pre súborové operácie (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Ukázať postup operácií &inicializovaný v" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Počet prechodov bezpečného vymazania:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "tfrmoptionsfileoperations.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Použíť mapovanie pamäte pre hľadanie textu v súboroch" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "tfrmoptionsfileoperations.rbusestreaminsearch.caption" msgid "&Use stream for search text in files" msgstr "Po&užiť stream pre hľadanie textu v súboroch" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Povoliť Overcolor" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "tfrmoptionsfilepanelscolors.cbbuseframecursor.caption" msgid "Use &Frame Cursor" msgstr "Použiť rámčekový kurzor" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Použiť Indikátor &Gradientu" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption" msgid "U&se Inverted Selection" msgstr "Použiť inverzný výber" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Rámček kurzoru" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Indikátor Voľného Miesta na Disku" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Pozadie" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption" msgid "Backg&round 2:" msgstr "Pozadie 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "tfrmoptionsfilepanelscolors.lblcursorcolor.caption" msgid "C&ursor Color:" msgstr "Farba kurzoru:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "tfrmoptionsfilepanelscolors.lblcursortext.caption" msgid "Cursor Te&xt:" msgstr "Text kurzoru:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption" msgid "&Brightness level of inactive panel" msgstr "Úroveň jasu neaktívneho panela" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Indikátor Zadnej Farby:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indikátor Prednej Farby:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "tfrmoptionsfilepanelscolors.lblmarkcolor.caption" msgid "&Mark Color:" msgstr "Farba označenia:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "tfrmoptionsfilepanelscolors.lbltextcolor.caption" msgid "T&ext Color:" msgstr "Farba písma:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Nenačítať zoznam súborov pokiaľ záložka je aktivovaná" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "tfrmoptionsfilesviews.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Názvy zložiek v hranatých zátvorkách" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Zvýraznenie nových a aktualizovaných súborov" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "tfrmoptionsfilesviews.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Nahrať zoznam súborov v samostatnom vlákne" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "tfrmoptionsfilesviews.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Nahrať ikony po zozname súborov" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "tfrmoptionsfilesviews.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Zobraziť skryté/systémové súbory" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "tfrmoptionsfilesviews.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Pri výbere medzerníkom posunúť kurzor dolu, ako pri výbere klávesou Insert" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formátovanie" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Triedenie" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Rozlíšovanie veľkosti písmen:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nesprávny formát" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "tfrmoptionsfilesviews.lbldatetimeformat.caption" msgid "&Date and time format:" msgstr "Formát dátumu a času:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formát veľkosti súboru:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Vlož&iť nové súbory" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Triedenie adresárov:" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "tfrmoptionsfilesviews.lblsortmethod.caption" msgid "&Sort method:" msgstr "Metóda triedenia:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Presunúť aktualizované súbory" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Pridať" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Vymazať" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Šablóny..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Farby typu súborov (trieď podľa drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryattr.caption" msgid "Category a&ttributes:" msgstr "Atribúty kategórií:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "tfrmoptionsfiletypescolors.lblcategorycolor.caption" msgid "Category co&lor:" msgstr "Farba kategórie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Maska kategórie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Názov kategórie:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "tfrmoptionsfonts.lbleditorfont.caption" msgid "&Editor font" msgstr "Písmo editora" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "tfrmoptionsfonts.lbllogfont.caption" msgid "&Log font" msgstr "Písmo logu" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "tfrmoptionsfonts.lblmainfont.caption" msgid "Main &font" msgstr "Hlavné písmo" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "tfrmoptionsfonts.lblviewerbookfont.caption" msgid "Viewer&Book Font" msgstr "Písmo prezerača kníh" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "tfrmoptionsfonts.lblviewerfont.caption" msgid "&Viewer font" msgstr "Písmo prezerača" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Pridaj horúcu klávesu" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Vymaž horúcu klávesu" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "Zm&eň horúcu klávesu" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "tfrmoptionshotkeys.lbfilter.caption" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "K&ategórie:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Príkazy:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "tfrmoptionshotkeys.lblscfiles.caption" msgid "&Shortcut files:" msgstr "&Súbory zástupcov:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Príkaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Horúce klávesy" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Popis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Klávesa" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Controls" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pre nasledujúce cesty a podadresáre" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Ukáž ikony akcií v &menu" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "tfrmoptionsicons.cbiconsshowoverlay.caption" msgid "Show o&verlay icons, e.g. for links" msgstr "Zobraziť prekladané i&kony (pre zástupcov)" #: tfrmoptionsicons.cbiconssize.text msgctxt "tfrmoptionsicons.cbiconssize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Zakáž špeciálne ikony" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikony v menu" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "tfrmoptionsicons.gbiconssize.caption" msgid " Icon size " msgstr "Veľkosť i&kon" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr "Zobraziť ikony vľavo od názvu súboru" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Všetko" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Všetky asociácie + &EXE/LNK (pomaly)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Bez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "tfrmoptionsicons.rbiconsshowstandard.caption" msgid "Only &standard icons" msgstr "L&en štandartné ikony" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "tfrmoptionsignorelist.btnaddsel.caption" msgid "A&dd selected names" msgstr "Prid&ať vybrané mená" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Pridať vybrané mená s celou cestou" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorovať (nezobrazovať) nasledujúce súbory a adresáre:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "Uložiť do:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Ľavá, pravá šípka zmení adresár (pohyby ako v Lynx-e)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Písanie" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "tfrmoptionskeyboard.lblalt.caption" msgid "Alt+L&etters" msgstr "Al&t+Písmená" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "tfrmoptionskeyboard.lblctrlalt.caption" msgid "Ctrl+Alt+Le&tters" msgstr "&Ctrl+Alt+Písmená" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters" msgstr "Písmená" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Ploché tlačítka" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "tfrmoptionslayout.cbflatinterface.caption" msgid "Flat i&nterface" msgstr "Ploché rozhranie" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Ploché tlačítka" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "tfrmoptionslayout.cbfreespaceind.caption" msgid "Show fr&ee space indicator on drive label" msgstr "Zobraziť indikátor voľného miesta na disku" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "tfrmoptionslayout.cblogwindow.caption" msgid "Show lo&g window" msgstr "Zobraz okno logu" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Zobraziť panel operácií na pozadí" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Zobraziť celkový postup v lište menu" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "tfrmoptionslayout.cbshowcmdline.caption" msgid "Show command l&ine" msgstr "Zobraziť príkazový ria&dok" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "tfrmoptionslayout.cbshowcurdir.caption" msgid "Show current director&y" msgstr "Zobraziť aktuáln&y adresár" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Zobraziť &tlačítka diskov" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "tfrmoptionslayout.cbshowdrivefreespace.caption" msgid "Show free s&pace label" msgstr "V hlavičke panela zobraziť údaj o voľnom mieste" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Ukáž &tlačidlo zoznamu diskov" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "tfrmoptionslayout.cbshowkeyspanel.caption" msgid "Show function &key buttons" msgstr "Zobraziť &funkčné tlačidlá" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "tfrmoptionslayout.cbshowmainmenu.caption" msgid "Show &main menu" msgstr "Zobraziť hlavné menu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show &button bar" msgstr "Zobraziť &tlačídlovú lištu" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Ukáž skrátený štítok voľného priestoru" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Zobraziť &stavový riadok" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "tfrmoptionslayout.cbshowtabheader.caption" msgid "S&how tabstop header" msgstr "Zobraziť &tabstop hlavičku" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Zobraziť &záložky" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "tfrmoptionslayout.cbtermwindow.caption" msgid "Show te&rminal window" msgstr "Zobraziť okno terminálu" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "tfrmoptionslayout.cbtwodiskpanels.caption" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zobraziť 2 zoznamy diskov (pevná šírka, nad oknami so súbormi)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr "Vzhľad obrazovky" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "tfrmoptionslog.cblogarcop.caption" msgid "&Pack/Unpack" msgstr "Zbaliť/Rozbaliť" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "tfrmoptionslog.cblogcpmvln.caption" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopírovanie/Presun/Vytvorenie linku/symlinku" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "Vymazať" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "tfrmoptionslog.cblogdirop.caption" msgid "Crea&te/Delete directories" msgstr "Tvorba/Mazanie zložiek" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Spis &chýb" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "tfrmoptionslog.cblogfile.caption" msgid "C&reate a log file:" msgstr "&Vytvoriť súbor spisu:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "tfrmoptionslog.cbloginfo.caption" msgid "Log &information messages" msgstr "Spis informačných správ" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Spis &dokončených operácií" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "tfrmoptionslog.cblogvfs.caption" msgid "&File system plugins" msgstr "Zásuvné moduly súborového systému" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Spis súborových operácií" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Spis operácií" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stav operácie" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Odober náhľady pre už neexistujúce súbory" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Vždy choď na root disku, keď je zmena diskov" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Zobraziť varovné správy (len tlačítko \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Uložiť náhľady do cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Náhľady" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixely" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Veľkosť náhľadu:" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgctxt "tfrmoptionsmouse.cbselectionbymouse.caption" msgid "&Selection by mouse" msgstr "Výber myšou" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Skrolovanie" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Výber" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "tfrmoptionsmouse.lblmousemode.caption" msgid "&Mode:" msgstr "Mód:" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "tfrmoptionsmouse.rbscrolllinebyline.caption" msgid "&Line by line" msgstr "Riadok po riadku" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "tfrmoptionsmouse.rbscrolllinebylinecursor.caption" msgid "Line by line &with cursor movement" msgstr "Riadok po riadku s posunom kurzoru" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "tfrmoptionsmouse.rbscrollpagebypage.caption" msgid "&Page by page" msgstr "Stránka po stránke" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Pridať" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Konfigurovať" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Povoliť" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Odstrániť" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Ladenie" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Vyhľadávacie zásuvné moduly umožňujú použitie pri hľadaní alternatívnych vyhľadávacích algoritmov alebo externých nástrojov (napr. \"nájsť \", atď.)." #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Komprimačné zásuvné moduly pre prácu s archívmi." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Obsahové zásuvné moduly umožňujú zobraziť rozšírené informácie ako sú MP3 tagy alebo atribúty obrázkov v zozname súborov, alebo ich používať na vyhľadávanie a \"multi-premenovanie\"." #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Zásuvné moduly súborových systémov umožnia prístup k bežne nedostupným médiám ako sú napr. externé zariadenia (Palm/PocketPC)." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Zobrazovacie zásuvné moduly umožňujú prezeranie súborov ako sú napr. obrázky, databázy a pod. v prezerači (F3, alebo Ctrl+Q)." #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktívne" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrované pre" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Názov súboru" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Vyhľadávacie zásuvné moduly (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Komprimačné zásuvné moduly (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Zásuvné moduly obsahu (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Zásuvné moduly súborových systémov (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Zobrazovacie zásuvné moduly (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&Začiatok (meno musí začínať zadaným znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Koniec (posledný znak pred . musí zodpovedať zadanému)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Nastavenia" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Presné meno súhlasí" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Hľadaj písmeno" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Vyhľadať tieto položky" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktivovať cieľový &panel pri kliknutí na jeho ľubovolnú záložku" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Zobraziť záložku, aj keď existuje len jedna" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "tfrmoptionstabs.cbtabsconfirmcloseall.caption" msgid "Con&firm close all tabs" msgstr "&Potvrdiť uzatvorenie všetkých záložiek" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "Obmedzená dĺžka názvu záložky na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Zobraziť uzamknuté záložky so znakom *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Záložky na viac riadkov" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Hore otvorí novú záložku na pozadí" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Otvárať &nové záložky vedľa aktuálnej záložky" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "tfrmoptionstabs.cbtabsshowclosebutton.caption" msgid "Show ta&b close button" msgstr "Na záložkách aj tlačítko zavrieť" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Hlavičky záložiek" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "znakov" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Umiestnenie záložky" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Klonovať tlačidlo" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Vymazať" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Zmeň horúcu klávesu" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "Vložte nové tlačítko" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Iné ..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "V&ymaž horúcu klávesu" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Ploché tlačítka" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Zadaj parametre príkazu, každý v samostatnom riadku. Stlač F1 na pozretie pomoci k parametrom" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Vzhľad" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Veľkosť lišty:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Príkaz:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Horúca klávesa:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ikona:" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Veľkosť ikony:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Príkaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začiatok cesty:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Pomôcka:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ tlačidla" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "tfrmoptionstoolbase.cbtoolskeepterminalopen.caption" msgid "&Keep terminal window open after executing program" msgstr "Ponechať o&kno terminálu otvorené aj po skončení programu" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "tfrmoptionstoolbase.cbtoolsruninterminal.caption" msgid "&Execute in terminal" msgstr "Spustiť v t&erminály" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption" msgid "&Use external program" msgstr "Po&užiť externý program" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "tfrmoptionstoolbase.lbltoolsparameters.caption" msgid "A&dditional parameters" msgstr "Ďalšie parametre" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "tfrmoptionstoolbase.lbltoolspath.caption" msgid "&Path to program to execute" msgstr "Cesta k externému &programu" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Pri&dať" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "&Použiť" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Vymazať" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Šablóny..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Zobraziť bublinovú pomoc" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Užívateľské polia podľa typu súboru" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Pomoc pre kategóriu:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategórie:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Názov kategórie:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Mód prezerania knihy" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Vzorka" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption" msgid "&Background color in book viewer" msgstr "Far&ba pozadia v prezerači kníh" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "tfrmoptionsviewer.lblfontcolorviewerbook.caption" msgid "&Font color in book viewer" msgstr "&Farba písma v prezerači kníh" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "tfrmoptionsviewer.lblnumbercolumnsviewer.caption" msgid "&Number of columns in book viewer" msgstr "Počet stĺpcov v prezerači k&níh" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Konfigurovať" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Komprimovať súbory" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Vytvoriť samostat&né archívne súbory pre každý vybratý súbor/adresár" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Sa&morozbaľovací archív" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Zakódovať" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Pre&sunúť do archívu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Viaczväzkový archív" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Najskôr vytvoriť archív TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Kom&primovať s cestou (only recursed)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Komprimovať súbor(y) do súboru:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Komprimátor" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zavrieť" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Rozbaliť &Všetko a spustiť" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Rozbaliť a spustiť" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Vlastnosti komprimovaného súboru" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atribúty:" #: tfrmpackinfodlg.lblcompressionratio.caption #, fuzzy msgid "Compression ratio:" msgstr "Kompresný pomer:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dátum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metóda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Pôvodná veľkosť:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Súbor:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Skomprimovaná veľkosť:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Komprimátor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zavrieť panel filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Zadaj text na vyhľadanie alebo filtrovanie" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Rozlíšovať veľkosť písmen" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Adresáre" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Súbory" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Zhoda Začiatok" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Zhoda Koniec" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Prepnúť medzi vyhľadávaním a filtrom" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Zásuvný modul" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Hodnota" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Zavrieť" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Pomoc" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vyber znaky na vloženie:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Nastaviť atribúty" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archív" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Vytvorený:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skrytý" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Naposledy otvorený" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Zmenený" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Len na čítanie" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Rekurzívne" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Systémový" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Časová značka" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribúty" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bitov:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(šedé pole znamená nezmenenú hodnotu)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostatní" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Vlastník" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Textovo:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Spustiť" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(šedé pole znamená nezmenenú hodnotu)" #: tfrmsetfileproperties.lbloctal.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Číselne:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Čítanie" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zápis" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Delenie súborov" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Názov súboru" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Veľkosť a počet častí" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Cieľový adresár" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Zdroj &súboru" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Počet častí" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption #, fuzzy #| msgid "Gigabytes" msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "GB" #: tfrmsplitter.rbtnkilob.caption #, fuzzy #| msgid "Kilobytes" msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "KB" #: tfrmsplitter.rbtnmegab.caption #, fuzzy #| msgid "Megabytes" msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "MB" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revízia" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Verzia" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Vytvoriť symbolický odkaz" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Existujúci cieľ (kde link bude ukazovať)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Názov odkazu" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Zavrieť" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Porovnať" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Meno" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Dátum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Veľkosť" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Meno" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Porovnať" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Pri&dať nový" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Zrušiť" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Zmeniť" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Východzí" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Odst&rániť" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Vylepšovací zásuvný modul" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "De&tekovať typ archívu podľa obsahu" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Môžete mazať súbory" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Podporuje šifrovanie" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Zobraziť ako normálne súbory (skryť ikonu komprimátora)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Podporuje komprimáciu v pamäti" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Môžte meniť existujúce archívy" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "&Archív môže obsahovať viac súborov" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Môžte vytvárať nové archí&vy" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Podpor&uje dialóg s nastavením" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Podporuje vyhľadávanie textu v archívoch" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Popis:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "D&etekovaný text:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Prípona:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Vlajky:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Me&no:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Zásuvný modul:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Zásuvný modul:" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "O prezerači..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zobraziť About správu" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Skopírovať Súbor" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "Skopírovať Súbor" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Vymazať Súbor" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "Vymazať Súbor" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Další" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Načítať Nasledujúci Súbor" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Predchádzajúci" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Načítať Predchádzajúci Súbor" #: tfrmviewer.actmirror.caption msgctxt "tfrmviewer.actmirror.caption" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.actmirror.hint msgctxt "tfrmviewer.actmirror.hint" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Presunúť Súbor" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "Presunúť Súbor" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Obnoviť" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Znova načítať aktuálny súbor" #: tfrmviewer.actrotate180.caption msgctxt "tfrmviewer.actrotate180.caption" msgid "Rotate 180" msgstr "Otoč o 180" #: tfrmviewer.actrotate180.hint msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180" msgstr "Otoč o 180" #: tfrmviewer.actrotate270.caption msgctxt "tfrmviewer.actrotate270.caption" msgid "Rotate 270" msgstr "Otoč o 270" #: tfrmviewer.actrotate270.hint msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate 270" msgstr "Otoč o 270" #: tfrmviewer.actrotate90.caption msgctxt "tfrmviewer.actrotate90.caption" msgid "Rotate 90" msgstr "Otoč o 90" #: tfrmviewer.actrotate90.hint msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate 90" msgstr "Otoč o 90" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Uložiť ako..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Ulož Súbor Ako ..." #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Roztiahnuť" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Natiahni obrázok" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopírovať" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopírovať" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Vystrihnúť" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Vymazať" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Vymazať" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zvýrazniť" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Presunúť" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Presunúť" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Farba" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Červené oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Zmeniť veľkosť/rozlíšenie" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Zpäť" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Priblížiť" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Oddialiť" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Prezerač" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentácia" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pero" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zvýrazniť" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Farba" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentácia" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Zobraziť" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programe" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Zobraziť &binárne" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopírovať do schránky" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edit" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kó&dovanie" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Koniec" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Súbor" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Celá obrazovka" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafika" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Zobraziť &hexadecimálne" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Obrázok" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Zobraziť ako knihu" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Zrkadliť" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Zásuvné moduly" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Náhľad" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Tlač..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Otočiť" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Uložiť" #: tfrmviewer.misaveas.caption msgctxt "tfrmviewer.misaveas.caption" msgid "Save As..." msgstr "Uložiť ako..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Okopírovať obrazovku" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Hľadať" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Hľadať ďalší" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Hľadať predchádzajúci" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrat Všetko" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "tfrmviewer.mistretch.caption" msgid "Stretch" msgstr "Roztiahnuť" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Zobraziť ako &Text" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Zobraziť" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Zobraziť &ako zalamovaný text" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Priblížiť" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Oddialiť" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopírovať do schránky" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vybrať všetko" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Zas&tav" #: tfrmviewoperations.caption #, fuzzy msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Súborové operácie" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vždy navrchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Použiť \"drag && drop\" na presun operácií medzi radmi" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Zrušiť" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nový rad" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Ukáž v oddelenom okne" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Vložiť prvý do radu" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Vložiť posledný do radu" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Rad" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Mimo radu" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Rad 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Rad 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Rad 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Rad 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Rad 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Ukáž v oddelenom okne" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Preruš všetko" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Ak súbor existuje" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Pracuj na pozadí (oddelené spojenie)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Ak súbor existuje" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Zruš Rýchly Filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Prerušiť Prebiehajúcu Operáciu" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schránka neobsahuje žiadne platné údaje panelu nástrojov" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atr." #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dátum" #: ulng.rscolext msgid "Ext" msgstr "Prípona" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Meno" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Veľkosť" #: ulng.rsconfcolalign msgid "Align" msgstr "Zarovnať" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nadpis" #: ulng.rsconfcolconfig msgid "Config" msgstr "Konfigurácia" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Vymazať" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Detaily položky" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Presunúť" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Šírka" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Nastavenie stĺpcov:" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopírovanie (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "Všetky operácie boli dokončené" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Priebeh všetkých operácií %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Pr&erušiť" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Všetko" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Pripojiť" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Zrušiť" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Pokračovať" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopírovať do" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopírovať do &Všetko" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Ukončiť program" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Všetko ignorovať" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nie" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Nie je" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepísať" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepísať &Všetko" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepísať Všetko Staršie" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Pr&emenovať" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Znovu" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Pre&skočiť" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Pres&kočiť Všetko" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ano" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Spočítať súbory a adresáre" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Výpočet kontrolného súčtu..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Kontrola kontrolného súčtu..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopírovať súbor(y)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Zmazať súbor(y)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Presunúť súbor(y)" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauza" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Štart" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Rad" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Rýchlosť %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "Rýchlosť %s/s, ostávajúci čas %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Delenie súborov" #: ulng.rsdlgwipe #, fuzzy msgid "Wipe file(s)" msgstr "Bezpečne zmazať súbor(y)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interný editor Double Commanderu." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "nový.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Meno súboru:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otvoriť súbor" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Vzad" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Hľadanie" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "V&pred" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Nahradiť" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Opýtaj sa;Prepíš;Skopíruj do;Preskoč" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Opýtaj sa;Prepíš;Prepíš staršie;Preskoč" #: ulng.rsfileopsetpropertyerroroptions msgid "Ask;Don't set anymore;Ignore errors" msgstr "Opýtaj sa;Nenastavuj už nikdy;Ignoruj chyby" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definovať vzor" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s úrovní" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "všetko (nelimitovaná hĺbka)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "len aktuálny adresár" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Adresár %s neexistuje!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Nájdené: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Uložiť vyhľadávaciu šablónu" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Názov šablóny:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Prehľadané: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Prehľadávam" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Hľadať súbory" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začať v" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Voľných %s z %s bytov" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "Voľné miesto %s bytov" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Dátum/čas posledného prístupu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atribúty" #: ulng.rsfunccomment msgid "Comment" msgstr "Komentár" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Skomprimovaná veľkosť" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Dátum/čas vytvoeenia" #: ulng.rsfuncext msgid "Extension" msgstr "Prípona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Odkaz na" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Dátum/čas zmeny" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Meno" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Meno bez prípony" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Vlastník" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cesta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Veľkosť" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Chyba pri vytváraní hardlinku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Dialód kopírovania/presunu" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Porovnávač" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Hľadať súbory" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hlavný" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Prezerač" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Linkovanie dokončené" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska zrušenia výberu" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska výberu" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Vstupná maska:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Konfigurovať užívateľské stĺpce" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Konfigurovať tento vlastný pohľad" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Akcie" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Upraviť" #: ulng.rsmnueject msgid "Eject" msgstr "Vysunúť" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Pripojiť" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nový" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nie je dostupné žiadne médium" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otvoriť" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "Otvoriť s ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Iné ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Triediť podľa" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" msgid "Unmount" msgstr "Odpojiť" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Zobraziť" #: ulng.rsmsgaccount msgid "Account:" msgstr "Účet:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ďalšie parametre pre príkazový riadok archivátora:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nedá sa kopírovať/presunúť súbor \"%s\" sám na seba!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nemôžem vymazať adresár %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Zmena adresára na [%s] zlyhala!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Odstrániť všetky neaktívne záložky?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Záložka (%s) je uzamknutá! Aj tak zavrieť?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Skutočne chcete skončiť?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Kopírovať %d vybraných súborov/zložek?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopírovať vybrané \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Vymazať čiastočne skopírovaný súbor?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Vymazať %d vybrané súbory / adresáre?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Vymazať %d vybraných súborov/zložiek do koša?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Vymazať vybrané \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Presunúť vybrané \"%s\" do koša?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "\"%s\" nedá sa zmazať do koše! Vymazať priamo?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk nie je dostupný" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext #, fuzzy msgid "Enter file extension:" msgstr "Zadajte príponu súboru:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Zadajte názov:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC chyba (kontrolný súčet nesúhlasí)" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dáta sú zlé" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nedá sa spojiť so serverom: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nedá sa kopírovať súbor %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Už existuje adresár s menom \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Dátum %s nie je podporovaný!" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Adresár %s existuje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Operácia prerušená užívateľom" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Chyba pri uzatváraní súboru" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nedá sa vytvoriť súbor" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V archíve nie sú žiadne ďalšie súbory" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nedá sa otvoriť existujúci súbor" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Chyba pri čítaní súboru" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Chyba pri zápise do súboru" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Nedá sa vytvoriť adresár %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Neplatný odkaz" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Súbory neexistujú" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nedostatok pamäti" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcia nie je podporovaná!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Chyba v príkaze kontextového menu " #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Chyba pri načítavaní konfigurácie" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaktická chyba v regulárnom výraze!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nedá sa premenovať súbor %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nemôžem uložiť asociáciu súboru!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Súbor sa nedá uložiť" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nedajú sa nastaviť atribúty pre \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nedá sa nastaviť dátum/čas pre \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nemôžem nastaviť majiteľa/skupinu pre \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer je príliš malý" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Príliš mnoho súborov pre kompresiu" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Neznámy formát archívu" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Meno" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Súbor %s bol zmenený, uložiť?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Súbor %s existuje, prepísať?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Sú aktívne súborové operácie" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Niektoré súborové operácie ešte neboli dokončené. Ukončenie Double Commanderu môže spôsobiť stratu dát." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Súbor %s je len na čítanie! Aj tak Vymazať?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Veľkosť \"%s\" je príliš veľká pro cieľový súborový systém!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Adresár %s existuje, prepísať?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Následuj symbolický odkaz \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Cesta" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Meno:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Chyba v príkazovom riadku" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neplatné meno súboru" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Nesprávny formát konfiguračného súboru" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Nesprávna cesta" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Cesta %s obsahuje zakázané znaky." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Toto nie je platný zásuvný modul!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Tento zásuvný modul je vytvorený pre Double Commander pre %s.%s Nemôže fungovať s Double Commander pre %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Nesprávne úvodzovky" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neplatný výber." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Nahrávam zoznam súborov..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopírovať súbor %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Zmazať súbor %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Chyba:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Rozbaliť súbor %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Vytvoriť odkaz %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Vytvoriť adresár %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Presunúť súbor %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Komprimovať do súboru %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstrániť adresár %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hotovo:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Vytvoriť symlink %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testovať integritu súboru %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hlavné heslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prosím, zadejte hlavné heslo:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nový súbor" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ďalšia časť bude rozbalená" #: ulng.rsmsgnofiles msgid "No files" msgstr "Žiadne súbory" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nie sú vybrané žiadne súbory." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nie je dostatok voľného miesta na cieľovom disku! Pokračovať?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nie je dostatok voľného miesta na cieľovom disku! Opakovať?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Nedá sa vymazať súbor %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nie je zavedené." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Heslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Heslá sú rozdielne!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Prosím, zadejte heslo:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Heslo (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prosím, znova zadaj heslo na kontrolu:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Pridať %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Konfigurovať" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Vymazať %s" #: ulng.rsmsgpresetalreadyexists #, fuzzy msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predvoľba \"%s\" už existuje. Nahradiť?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Premenovať/presunúť %d vybraných súborov/zložek?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Premenovať/presunúť vybrané \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Prosím, na uplatnenie zmien reštartujte program" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Vybrané: %s z %s, súbory: %d z %d, adresáre: %d of %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Prosím, vyberte len súbory s kontrolným súčtom!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prosím, vyberte umiestnenie ďalšej časti" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Nastaviť názov disku" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Premenovať záložku" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nové meno záložky:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Cieľová cesta:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Bolo vybraných príliš veľa súborov." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Užívateľské meno:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Užívateľské meno (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Názov disku:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prosím, zadajte veľkosť zväzku:" #: ulng.rsmsgwipefldr #, fuzzy msgid "Wipe %d selected files/directories?" msgstr "Bezpečne zmazať %d vybraných súborov/zložek?" #: ulng.rsmsgwipesel #, fuzzy msgid "Wipe selected \"%s\"?" msgstr "Bezpečne zmazať vybrané \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nemeniť;VEĽKÝM;malým;Prvý znak veľkým;Prvý Znak Každého Slova Veľkým;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Prerušené" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Počítam kontrolný súčet" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Počítam kontrolný súčet v \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Počítam kontrolný súčet \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Počíta sa" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Počíta sa \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Pripájam sa" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Pripájam súbory v \"%s\" do \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopírujem" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopírujem z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopírujem \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Vytváram adresár" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Vytváram adresár \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Mazanie" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Mazanie v \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Mazanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Vykonávam" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Vykonávam \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Rozbaľujem" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Rozbaľujem z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Ukončené" #: ulng.rsoperlisting msgid "Listing" msgstr "Výpis" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Výpis \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Presúvam" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Presúvam z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Presúvam \"%s\" na \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nespustené" #: ulng.rsoperpacking msgid "Packing" msgstr "Balím" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Balím z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Balím \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pozastavené" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pozastavujem" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "V rade" #: ulng.rsoperrunning msgid "Running" msgstr "Beží" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavujem vlastníctvo" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Nastavujem vlastníctvo v \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavujem vlastníctvo \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Delím" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Delím \"%s\" na \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Spúšťam" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zastavené" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zastavujem" #: ulng.rsopertesting msgid "Testing" msgstr "Skúšam" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Skúšam v \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Skúšam \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Overujem kontrolný súčet" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Overujem kontrolný súčet v \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Overujem kontrolný súčet \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čakám na prístup k zdroju súborov" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čakám na reakciu užívateľa" #: ulng.rsoperwiping msgid "Wiping" msgstr "Bezpečné mazanie" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Bezpečné mazanie v \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Bezpečné mazanie \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Pracujem" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Zmazať:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Rozbaliť bez cesty:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Mód kontroly formátu:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Pozícia ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Rozsah hľadania ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parameter" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Výzva pre zadanie hesla:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Vytvoriť samorozbalovací archív:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Skúška:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Meno typu archívu:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Hodnota" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Asociovať zásuvný modul \"%s\" s:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Prvý;Posledný" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable #, fuzzy msgid "Disable" msgstr "Zakázať" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Povoliť" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Zadajte príponu" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Kurzor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Označiť" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Označiť + Kurzor" #: ulng.rsoptexampletext msgid "Text" msgstr "Text" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "oddelenom okne;minimalizovanom oddelenom okne;panely operácií" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong #, fuzzy,badformat msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Skratka pre cm_Delete bude zaregistrovaná, takže môže byť použitá na obrátenie tohto nastavenia." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Pridať skratku pre %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Pridať skratku" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nemôžem zmeniť skratku" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Zmeniť skratku" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Príkaz" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Skratka %s pre cm_Delete má parameter, ktorý prepíše toto nastavenie. Chceš tento parameter na použitie s globálnym nastavením?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Skratka %s pre cm_Delete musí mať parameter zmenený, aby súhlasil so skratkou %s. Chceš ho zmeniť?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Popis" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Zmeniť skratku pre %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Opraviť parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Klávesa" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Horúce klávesy" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Nastaviť skratku pre vymazanie súboru" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, fuzzy,badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pre toto nastavenie" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Skratka %s pre cm_Delete je postupnosť skratiek, pre ktorú klávesa so spätným Shiftom nemôže byť priradená. Toto nastavenie nemusí fungovať." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Klávesa sa už používa" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Klávesa %s sa už používa pre" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Zmeniť na %s?" #: ulng.rsopthotkeysusedby #, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "použité pre %s %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "použité pre tento príkaz, ale s inými parametrami" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archivátory" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatická obnova" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Funkcie" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farby" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Stĺpce" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Umiestnenie konfigurácie" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Užívateľské stĺpce" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Rýchle adresáre" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Tlačidlo zoznamu diskov" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asociácie súborov" #: ulng.rsoptionseditorfileoperations #, fuzzy msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Súborové operácie" #: ulng.rsoptionseditorfilepanels #, fuzzy msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panely súborov" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Náhľad súborov" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy súborov" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Záložky zložiek" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Písma" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Zvýrazňovače" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Horúce klávesy" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Zoznam ignorovaných" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klávesy" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jazyk" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Rozvrhnutie" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Rôzne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Myš" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Zásuvné moduly" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Rýchle hľadanie/filter" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Panel nástrojov" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Nástroje" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Bublinová pomoc" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Žiadny;Príkaz;Rýchle hľadanie;Rýchly filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ľavé tlačítko;Pravé tlačítko;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "Na vrch zoznamu súborov;Pod adresáre (ak sú adresáre zoradené pred súbormi);Na vytriedenej pozícii;Na spodok zoznamu súborov" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Zásuvný modul %s je už priradený nasledujúcim príponám:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktívne" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Názov súboru" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Meno" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrované pre" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Súbory;Ad&resáre;Súbory a Adresáre" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Sc&hovaj filter panelu, keď s ním nepracuješ" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Nerozlišovať veľkosť písmen;Podľa miestneho nastavenia (aAbBcC);Najprv veľké, potom malé písmená (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Triediť podľa mena a zobraz ich na začiatku;Triediť ako súbory a zobraz ich na začiatku;Triediť ako súbory" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Abecedne, s ohľadom na prízvuk;Prirodzené triedenie: abecedne a číselne" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Hore;Dole" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Odd&eľovač;Vnúto&rný príkaz;E&xterný príkaz;Men&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "Nemeň pozíciu;Použi také isté nastavenia ako pre nové súbory;Na triedenú pozíciu" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Súbory: %d, adresáre: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nedajú sa zmeniť prístupové práva pre \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Nedá sa zmeniť vlastník pre \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Súbor" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Adresár" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Pomenovaná rúra" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nie" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Špeciálne blokové zariadenie" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Špeciálne znakové zariadenie" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Zástupca" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Neznámy typ" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ano (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Výsledok hľadania:" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vybrať adresár" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Ukáže &sa pomoc pre %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Všetko" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Príkaz" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Náhľad" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajtov" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajtov" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajtov" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajtov" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajtov" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Súborov: %d, Zložiek: %d, Veľkosť: %s (%s bajtov)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nedá sa vytvoriť cieľový adresár!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nesprávný formát veľkosti súboru!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nedá sa rozdeliť súbor!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Počet častí je väčší ako 100! Pokračovať?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Zvoľte adresár:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Chyba pri vytváraní zástupcu." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Predvolený text" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Prostý text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dňov" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hodina(hodiny,hodín)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minúta(ty,t)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mesiac(e,ov)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunda(sekundy,sekúnd)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Týždeň(ne,ňov)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok(y,ov)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Porovnávač" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Chyba otvorenia iných" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Chyba otvorenia editora" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Chyba otvorenia terminálu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Chyba otvorenia prezerača" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminál" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Prezerač" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Prosím, založte do bug trackeru správu o tejto chybe s popisom, čo ste robili a s nasledujúcim súborom:%sStlačte %s pre pokračovanie alebo %s pre ukončenie programu." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Sieť" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interný prezerač Double Commandera." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kódovanie" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nová veľkosť" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nebol nájdený!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �����������������������������������������doublecmd-0.7.1/language/doublecmd.pl.po������������������������������������������������������������0000644�0001750�0000144�00001161221�12666540554�017231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2014-05-09 12:11+0100\n" "Last-Translator: Maciej Bojakowski <maciejbojakowski@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Polski\n" #: fsyncdirsdlg.rscomparingpercent #, fuzzy #| msgid "\"Comparing... %d%% (ESC to cancel)" msgid "Comparing... %d%% (ESC to cancel)" msgstr "Porównywanie... %d%% (ESC, aby anulować)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Znaleziono plików: %d (Identycznych: %d, Różnych: %d, Unikalnych po lewej: %d, Unikalnych po prawej: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Z lewej do prawej: Kopiowanie %d plików, całkowity rozmiar: %d bajtów" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Z prawej do lewej: Kopiowanie %d plików, całkowity rozmiar: %d bajtów" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Wszystko" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Konfiguracja wyglądu kolumn" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Tło:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Obramowanie kursora" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Zezwól na nakładanie kolorów" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Użyj niestandardowej czcionki i koloru" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Kolor tekstu:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Czcionka:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Rozmiar:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Tło 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Konfiguracja wyglądu nr:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Kolor kursora:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Kolor tekstu pod kursorem:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Kolor zaznaczenia:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nazwa:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj kolumnę" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Dostosuj kolumnę: " #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Podgląd" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Wybierz szablon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Sprawdź wolne miejsce" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "K&opiuj atrybuty" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiuj upra&wnienia" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopiuj d&atę/czas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Popraw lin&ki" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Zdejmij flagę \"Tylko do odczytu\"" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Usuń puste katalogi" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Idź za linkami" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Za&rezerwuj miejsce" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Co zrobić, gdy nie można ustawić czasu pliku, atrybutów, itp." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Użyj pliku szablonu" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Gdy katalog istnieje" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Gdy plik istnieje" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Gdy nie moż&na ustawić właściwość" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<brak szablonu>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiuj do schowka" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programie" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Kompilacja" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Strona domowa:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Wydanie" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Wersja" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Resetuj" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Wybierz atrybuty" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archiwum" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Sko&mpresowany" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Katalog" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Zaszyfrowany" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ukryty" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Tylko do odczytu" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Rzadki" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Przyklejony" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Link symboliczny" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystemowy" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Tymczasowy" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atrybuty NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atrybuty ogólne" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bity:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupa" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Inne" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Właściciel" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Uruchom" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Odczyt" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Jako tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapis" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Oblicz sumę kontrolną..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Dla każdego pliku utwó&rz oddzielny plik sumy kontrolnej" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Zapi&sz plik(i) sumy kontrolnej do:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zamknij" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Sprawdź sumę kontrolną..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "P&ołącz" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Usuń" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Edytuj" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Menedżer połączeń" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Połącz z:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Dodaj do kolejki" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pcje" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Zapisz te opcje jako domyślne" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiuj plik(i)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nowa kolejka" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kolejka 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kolejka 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kolejka 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kolejka 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kolejka 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Zapisz opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Komentarz do pliku/katalogu" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Edytuj komentarz dla:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kodowani&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programie" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Porównaj automatycznie" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Tryb binarny" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Anuluj" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiuj blok na prawo" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiuj blok na prawo" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiuj blok na lewo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiuj blok na lewo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiuj" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Wytnij" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Wstaw" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Wykonaj ponownie" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Zaznacz &wszystko" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Cofnij" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Pierwsza różnica" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Pierwsza różnica" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignoruj wielkość liter" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignoruj puste" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Kontynuuj przewijanie" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Ostatnia różnica" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Ostatnia różnica" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Różnice linii" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Następna różnica" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Następna różnica" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Otwórz lewy..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Otwórz prawy..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Maluj tło" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Poprzednia różnica" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Poprzednia różnica" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Wczytaj ponownie" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Wczytaj ponownie" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Zapisz" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Zapisz" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Zapisz jako..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Zapisz jako..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Zapisz lewy" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Zapisz lewy" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Zapisz lewy jako..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Zapisz lewy jako..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Zapisz prawy" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Zapisz prawy" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Zapisz prawy jako..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Zapisz prawy jako..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Porównaj" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Porównaj" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Kodowanie" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Kodowanie" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Porównaj pliki" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Lewy" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "P&rawy" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Akcje" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Edycja" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Kodowanie" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Plik" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opcje" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj nowy skrót do sekwencji" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Usuń ostatni skrót z sekwencji" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Tylko dla tych kontrolek" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametry (każdy w osobnym wierszu):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Skróty:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programie" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O programie" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "Konfiguracja" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Konfiguracja" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiuj" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopiuj" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Wytnij" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Wytnij" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Usuń" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "Znajdź" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Znajdź" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Znajdź następny" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Znajdź następny" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Idź do linii..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Wstaw" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Wstaw" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Powtórz" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Powtórz szukanie" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "Zamień" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Zamień" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Zaznacz &wszystko" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Cofnij" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Cofnij" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Zamknij" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Zakończ" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Zakończ" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nowy" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nowy" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Otwórz" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Otwórz" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Zapi&sz" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Zapisz" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Zapisz j&ako..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Zapisz jako" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Zapisz wszystko" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Zapisz wszystko" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Edytor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Pomoc" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "Edycja" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kodowanie" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Otwórz jako" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Zapisz jako" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "Plik" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Kolorowanie składni" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Koniec linii" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "&Uwzględniaj wielkość liter" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Szukaj od kursora" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Wyrażenie ®ularne" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Tylko w zaznaczonym tekście" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Tylko całe wyrazy" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opcje" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Zamień na:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Znajdź:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Kierunek" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Rozpakuj plik(i)" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Rozpakuj z podkatalogami" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Każde archiwum rozpakuj do oddzielnego katalogu (z nazwą archiwum)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Nadpisz istniejące pliki" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Do katalogu:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Rozpakuj pliki zgodne z maską:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Hasło dla zaszyfrowanych plików:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Dodaj" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Dodaj" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Dodaj" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "W dół" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Usuń" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Usuń" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Usuń" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Zmi&eń nazwę" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "W górę" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Skojarzenia plików" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Akcja" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Rozszerzenie" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Typ pliku" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Akcja:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "Polecenie:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Edytuj" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otwórz w edytorze" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nazwa pliku" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Ścieżka do pliku" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Pełna ścieżka" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Wyświetl zwrócone komunikaty polecenia" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Otwórz" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Uruchom w terminalu" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Otwórz w VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Podgląd" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otwórz w przeglądarce" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Czekaj..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nazwa pliku:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknij na Zamknij, gdy plik tymczasowy może zostać usunięty!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Anuluj" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Idź do panelu" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Zobacz wszystko" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Bieżąca operacja:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Z:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Do:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "U&staw właściwości" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ustaw dla wszystkich wybranych plików" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Pomiń ten plik" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Właściwości" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Przyklejony" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Właściciel" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bity:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupa" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Inne" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Właściciel" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekstowo:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Zawartość:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Wykonywalny" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nazwa pliku" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nazwa:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nazwa pliku" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ścieżka:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Grupa" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ostatnio używany:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ostatnio zmieniony:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ostatnia zmiana statusu:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ósemkowo:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Właściciel" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Odczyt" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Rozmiar:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link symboliczny do:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapis" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Arybuty" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Właściwości" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Dodaj" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Pomoc" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Edycja" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "Idź do pliku" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "Ostatnie szukanie" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Nowe szukanie" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Zapisz" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Usuń" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Wczytaj" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Zapisz" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Zapisz z \"Start w katalogu\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Jeśli zapiszesz jako \"Start w katalogu\" zostanie przywrócony podczas ładowania szablonu. Użyj, jeśli chcesz naprawić wyszukiwanie do określonych katalogów" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Anuluj" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Użyj szblonu" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Podgląd" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Wyświetl w &panelu" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Znajdź pliki" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Rozróżniaj wielkość liter" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Od daty:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Do daty:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Wielkość od:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Wielkość do:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Znajdź &tekst w pliku" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Śledź linki symboliczne" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Pliki &NIE zawierające tekstu" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nie starsze niż:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Szukaj części nazwy pliku" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Wyrażenie regularne" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Za&mień tekst" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Wybrane katalogi i pliki" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Wyrażenie regularne" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Czas od:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Czas do:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Użyj wtyczki wyszukiwania:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Wprowadź nazwy katalogów, które powinny być wyłączone z wyszukiwania oddzielone \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Wprowadź nazwy plików, które powinny być wyłączone z wyszukiwania oddzielone \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Wpisz nazwy plików oddzielone \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Katalogi" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Pliki" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Znajdź dane" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atry&buty" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Kodowanie:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Wyklucz podkatalogi" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Wyklucz pliki" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Maska &pliku" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Rozpocznij w &katalogu" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Przeszukuj po&dkatalogi:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Poprzednie wyszukiwanie:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Usuń z listy" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Pokaż wszystkie znalezione pozycje" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Podgląd" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Zaawansowane" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Wczytaj/zapisz" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Wtyczki" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Wyniki" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Podstawowe" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Szukaj" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Szukaj" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Uwzględniaj wielość liter" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Utwórz link twardy" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Obiekt docelowy, który będzie wskazywał link" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nazwa &linku" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linkowanie" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Zapisz jako..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Obiekt" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nazwa pliku" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "W dół" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "W dół" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Usuń" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Usuń" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "W górę" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "W górę" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "O programie" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dodaj nazwę pliku do paska poleceń" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Dodaj ścieżkę i nazwę pliku do paska poleceń" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiuj ścieżkę do paska poleceń" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Krótki" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Krótki widok" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Oblicz zajmowane &miejsce" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zmień katalog" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Zmień katalog na domowy" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Zmień katalog na wyższy" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Przejdź do katalogu głównego" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "O&blicz sumy kontrolne..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Sprawdź s&umy kontrolne..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Wyczyść plik logów" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Wyczyść okno logów" #: tfrmmain.actclosealltabs.caption msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Zamknij wszystkie k&arty" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Zamknij kartę" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Następny wiersz polecenia" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Ustaw wiersz polecenia do następnego polecenia w historii" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Poprzedni wiersz polecenia" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Ustaw wiersz polecenia do poprzedniego polecenia w historii" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Pełny" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Widok kolumn" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Porównaj &zawartość" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Porównaj katalogi" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Porównaj katalogi" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Pokaż menu kontekstowe" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Skopiuj wszystkie pokazane &kolumny" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiuj nazwę pliku(ów) ze ścieżką &dostępu" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopiuj nazwę(y) pliku(ów) do schowka" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiuj bez pytania o potwierdzenie" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiuj do tego samego panelu" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopiuj" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Pokaż zajęte miejsce" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Wytnij" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Historia katalogów" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Lista otwieranych katalogów" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Edytuj" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Edytuj k&omentarz..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Utwórz plik" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Edycja ścieżki nad listą plików" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zamień panele" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Zakończ" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Rozpakuj pliki..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Skoj&arzenia plików..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "P&ołącz pliki..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Pokaż &właściwości pliku" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Po&dziel plik" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Płaski widok (bez podkatalogów)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Przejdź do lini poleceń" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Umieść kursor na pierwszym pliku listy" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Umieść kursor na ostatnim pliku listy" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Utwórz link &twardy..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Zawartość" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Poziome ustawienie paneli" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Skróty klawiaturowe" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Lewa &= Prawa" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Otwórz listę dysków z lewej" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Wczytaj zaznaczenie ze s&chowka" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Wczytaj wybór z p&liku" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Wczytaj zakładki z p&liku" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Utwórz katalog" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Zaznacz wszystko z tym samyn &rozszerzeniem" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Odwróć zaznaczenie" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Zaznacz &wszystko" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Odznacz grupę..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Zaznacz &grupę..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Usuń zaznaczenie" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimalizuj okno" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Zmiany w&ielokrotne" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Połączenie sieciowe" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Rozłącz sieć" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Szybkie połączenie sieciowe..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nowa karta" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Przełącz do &kolejnej karty" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Otwórz" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Otwórz archiwum" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Otwórz plik paska" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Otwórz katalog w &nowej karcie" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Otwórz listę VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Podgląd &operacji" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Opcje" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "S&pakuj pliki" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Ustaw położenie elementu rozdzielającego" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Wklej" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Wróć do &poprzedniej karty" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Szybki filtr" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Szybkie wyszukiwanie" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Panel szybkiego podglądu" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "Odśwież" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Przenieś" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Przenieś/zmień nazwę bez potwierdzania" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Zmień nazwę" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Zmień &nazwę karty" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Przywróć wybór" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Odwrotna kolejność" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Prawy &= lewy" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Otwórz listę dysków z prawej" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Otwórz &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Zapisz wybór" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Z&apisz wybór do pliku..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Zapi&sz zakładki do pliku" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Znajdź..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Zmień &atrybuty..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Katalogi otwierane w &nowych kartach" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normalna" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zablokowana" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zablokowana, ale możliwa zmiana &katalogu" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Otwórz" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Otwórz za pomocą skojarzeń systemowych" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Pokaż menu na przyciskach" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Pokaż historie linii poleceń" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Pokaż pliki &ukryte/systemowe" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortuj wg &atrybutów" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sortuj wg &daty" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortuj wg rozszerzenia" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortuj wg &nazwy" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Sortuj wg &wielkości" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Włącz/wyłącz plik ignorowania plików, aby nie pokazywać nazw plików" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Utwórz link &symboliczny..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Synchronizuj katalogi..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Wyrównaj zawartości okien" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Testuj ar&chiwum" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatury" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Widok miniatur" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Otwórz ten katalog w lewym oknie" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Otwórz ten katalog w prawym oknie" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Usuń s&elekcję według rozszerzenia" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Podgląd" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Pokaż historię odwiedzanych ścieżek dla aktywnego widoku" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Przejdź do następnego wpisu w historii" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Przejdź do poprzedniego wpisu w historii" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Odwiedź stronę Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Wyczyść" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Wyjście" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Katalog" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Lista katalogów" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Pokaż bieżący katalog prawego panelu w lewym panelu" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Idź do katalogu domowego" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Idź do katalogu głównego" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Przejdź do katalogu nadrzędnego" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Lista katalogów" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Pokaż bieżący katalog lewego panelu w prawym panelu" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Ścieżka" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiuj" #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Utwórz link" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Wyczyść" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ukryj" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Przenieś..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Utwórz link symboliczny" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opcje kart" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Przywróć" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Anuluj" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "Polecenia" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "Konfiguracja" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Pliki" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomoc" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Zaznacz" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Sieć" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Widok" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opcje" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Karty" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiuj" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Wytnij" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Usuń" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Edytuj" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Wstaw" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Anuluj" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Ok" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Skrót" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Definiuj..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Lub wybierz predefiniowany rodzaj zaznaczenia:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Utwórz nowy katalog" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Podaj nazwę katalogu:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nowy rozmiar" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Wysokość:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Jakośc kompresji do Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Szerokość:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Wysokość" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Cyfry" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Usuń" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Wczytaj" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Zmień nazwę" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Porzuć wszystko" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Zapisz" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Wielokrotna zmiana nazwy" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Włącz" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Wyrażenie regularne" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Podmiana" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Rozszerzenie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Licznik" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Znajdź i zamień" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Rezultat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Wzorce" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Rozszerzenie" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Znajdź" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Przerwa" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Nazwa pliku" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Zamień..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Start" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Cyfry" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Licznik" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dzień" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dzień (2 cyfry)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dzień tygodnia (krótki, np. \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dzień tygodnia (długi, np. \"poniedziałek\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak na pozycji x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Znaki na pozycjach od x do y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Godzina" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Godzina (2 cyfry)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuta" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuty (2 cyfry)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[М] Miesiąc" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Miesiąc (2 cyfry)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nazwa miesiąca (krótka, np. \"sty\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nazwa miesiąca (długa, np. \"styczeń\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nazwa" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak na pozycji x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] Znaki na pozycjach od x do y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Czas..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Rozszerzenie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nazwa..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Wtyczka" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] sekunda" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekundy (2 cyfry)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Rok (2 cyfry)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Rok (4 cyfry)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Stara nazwa pliku" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Nowa nazwa pliku" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Ścieżka" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Wybierz aplikację" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Własne polecenie" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Zapisz skojarzenia" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Ustaw wybraną aplikację jako domyślną akcję" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Typ pliku do otwarcia: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Wiele nazw plików" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Wiele URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Pojedyncza nazwa pliku" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Pojedynczy URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Zastosuj" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opcje" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Proszę wybrać jedną z podstron, ta strona nie zawiera żadnych ustawień" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Auto konfiguracja" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Dodaj" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Zastosuj" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Usuń" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Zmień nazwę" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Tryb debugowania" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Włączone" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Pokaż wyjście konsoli" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opcje" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Dodaj:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Rozszerzenia:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Wypakuj:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Listuj:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Koniec listingu (opcjonalnie)" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Format listingu:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Początek listingu (opcjonalnie):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Archiwizer:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Opis:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Dodatkowe" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Ogólne" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Po zmianie &wielkości, daty lub atrybutów" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Dla następujących ścieżek i ich podkatalogów:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Po &utworzeniu pliku, skasowaniu i zmianie nazwy" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Gdy program działa w &tle" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Wyłącz autoodświeżanie" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Odśwież listę plików" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Ikona zawsze widoczna na pasku" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automatycznie ukryj odmontowane urządzenia" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Pokazuj ikonę na pasku gdy zminimalizowany" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Zezwalaj na tylko jedną kopię DC" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Tu można wpisać jeden lub więcej dysków oddzielonych średnikiem \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Czarna lista napędów" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Obetnij tekst do szerokości kolumny" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linie poziome" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linie pionowe" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Automatycznie wypełniaj kolumny" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Pokaż siatkę" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Autorozmiar kolumn" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Autorozmiar kolumn:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Zastosuj" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Edytuj" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Historia linii komend" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Historia katalogów" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Historia wzorców" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Zapisz konfigurację" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Historia znajdź/zamień" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Położenie plików konfiguracji" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Zapisz przy wyjściu" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Ustaw w linii komend" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Katalog programu (wersja portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Katalog domowy użytkownika" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Wszystko" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Usuń" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nowy" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Zapisz jako" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Zapisz" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Zezwól na nakładanie kolorów" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Ogólne" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Obramowanie kursora" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Tło:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Tło 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Konfiguracja kolumn dla systemu plików:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Kolor kursora:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Kolor tekstu pod kursorem:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Czcionka:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Rozmiar:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Kolor tekstu:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Kolor zaznaczenia:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj kolumnę" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nazwa:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Ścieżka:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Wytnij" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Wstaw" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Pokaż okno dialogowe po upuszczeniu" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Pokaż system plików" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Pokaż wolne miejsce" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Pokaż nazwę" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista urządzeń" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Tło" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Tło" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Resetuj" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Zapisz" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atrybuty jednostki" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Kolor pierwszego planu" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Kolor pierwszego planu" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Zaznaczony tekst" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Używaj (i edytuj) globalny schemat kolorów" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Używaj własny schemat kolorów" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Pogrubienie" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Odwróć" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Wyłączony" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Włączony" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Kursywa" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Odwróć" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Wyłączony" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Włączony" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Przekreślony" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Odwróć" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Wyłączony" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Włączony" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Podkreślony" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Odwróć" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Wyłączony" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Włączony" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Wytnij" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Wstaw" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Zmień nazwę" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "W dół" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Edytuj" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Usuń" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Usuń" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Usuń" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Zmi&eń nazwę" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "W górę" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Akcja" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Rozszerzenie" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Typ pliku" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Akcja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "Polecenie:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametry" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Katalog startowy:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Edytuj" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Otwórz w edytorze" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Wyświetl zwrócone komunikaty polecenia" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Otwórz" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Uruchom w terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Podgląd" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Otwórz w przeglądarce" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Pokaż okno potwierdzenia dla:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operacja kopiowania" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operacja usuwania" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Usuń do kosza (z Shiftem - usuwa bezpowrotnie)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operacja usuwania do Kosza" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Zdejmij flagę \"Tylko do odczytu\"" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operacja przenoszenia" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Szukaj części nazwy pliku" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Komentarze do plików/katalogów" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Przy zmianie nazwy edytuj tylko nazwę (bez rozszerzenia)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Pokaż pasek postępu podczas kopiowania/przenoszenia" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Komunikaty o błędach przy operacjach na plikach pokazuj tylko w oknie logów" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Wykonywanie operacji" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Szukanie plików" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfejs użytkownika" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Rozmiar bufora do operacji na plikach (w KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Pokaż postęp operacji początkowo w" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Liczba przebiegów zacierania:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Przy poszukiwaniu ciągu znaków korzystaj z mapowania pamięci" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Przy poszukiwaniu ciągu znaków korzystaj z funkcji potokowej (stream)" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Zezwól na nakładanie kolorów" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Używaj kursora jako ramki" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Używaj gradientu kolorów wskaźnika" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Używaj odwrotnej selekcji" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Obramowanie kursora" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Wskaźnik wolnego miejsca na dysku" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Tło:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Tło 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Kolor kursora:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Tekst pod kursorem:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Przyciemnienie nieaktywnego panelu" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Kolor tła wskaźnika:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Kolor wskaźnika:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Kolor zaznaczania:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Kolor tekstu:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Nie ładuj listy plików aż zakładka zostanie wybrana" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Pokazuj nazwy katalogów w nawiasach kwadratowych" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "WYróżnij nowe i zaktualizowane pliki" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Wczytuj listę plików w oddzielnym wątku" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Wczytuj najpierw listę plików, potem ikony" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Pokaż pliki ukryte/systemowe" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Klawisz <spacja> przenosi do następnego pliku (tak jak <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatowanie" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Sortowanie" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Pisownia wielkich liter:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Nieprawidłowy format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Format daty i czasu:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format rozmiaru pliku:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Wstawianie nowych plików" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Sortowanie katalogów:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metoda sortowania:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Przenieś zaktualizowane pliki" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Zastosuj" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Usuń" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Szablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Kolor typu plików (sortuj przez \"przeciągnij i upuść\")" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Atrybuty kategorii:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Kolor kategorii:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategorii:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Nazwa kategorii:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Czcionka edytora" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Czcionka logów" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Czcionka podstawowa" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Czcionka przeglądarki książek" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Czcionka podglądu" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Dodaj klawisz skrótu" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Usuń klawisz skrótu" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Edytuj klawisz skrótu" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Filtr" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Kategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Polecenia:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Pliki skrótów:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Polecenia" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Skróty" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Skrót" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parametry" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Kontrolki" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Dla następujących ścieżek i ich podkatalogów:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Pokaż ikony dla działań w &menu" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Pokazuj ikony nakładkowo (np dla linków symbolicznych)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Wyłącz specjalne ikony" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikony w menu" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Rozmiar ikon" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Pokazuj ikony po lewej stronie nazwy pliku" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Wszystko" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Wszystkie skojarzone + &EXE/LNK (wolne)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Bez ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Tylko standardowe ikony" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Dodaj wybrane nazwy" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Dodaj wybrane nazwy z pełną ścieżką" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoruj (nie pokazuj) następujących plików i katalogów:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Zapisz w:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Strzałki w prawo, lewo zmieniają katalog (nawigacja w stylu Lynksa)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Pisanie" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Litery" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Litery" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "Litery" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Płaskie przyciski" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Płaski wygląd" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Płaskie przyciski" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Pokaż pasek wolnego miejsca przy etykiecie napędu" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Pokaż okno logów" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Pokaż panel operacji w tle" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Pokazuj postęp ogólny na pasku menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Pokaż &linie poleceń" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Pokaż nazwę &bieżącego katalogu" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Pokaż przyciski &dysków" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Pokaż wolne miejsce na dysku" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Pokaż p&rzycisk listy dysków" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Pokaż przyciski klawiszy &funkcyjnych" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Pokaż główne menu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Pokaż pasek &przycisków" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Pokaż mały opis wolnego miejsca" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Pokaż pasek &stanu" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Pokaż nagłówki &kolumn" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Pokaż &karty katalogów" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Pokaż okno terminala" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Pokazuj dwa paski napędów (zmienna szerokość, nad oknami plików)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Wygląd ekranu głównego" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Pakowanie/Rozpakowanie" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiowanie/Przenoszenie/Tworzenie dowiązań" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Usuwanie" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Tworzenie/Usuwanie katalogów" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Błędy" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Utwórz plik z logami:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Wyświetlanie komunikatów" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Informacje o zakończonej operacji" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Wtyczki systemów plików" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Plik zapisu operacji na plikach" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Zapisz operacje" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Status operacji" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Usunąć miniatury dla nie istniejących plików" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Zawsze idź do katalogu głównego dysku podczas zmiany dysków" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Pokaż komunikaty o błędach (z przyciskiem \"Ok\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "Zapisz miniatury w pamięci cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniatury" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "piksele" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Rozmiar miniatur" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Zaznaczanie myszą" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Przewijanie" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Wybór" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Tryb:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Ilość wierszy:" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Co jeden wiersz z przesuwaniem kursora" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Całymi stronami" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Dodaj" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Konfiguruj" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Włącz" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Usuń" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Dostosuj" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Zezwalaj na szukanie wtyczek wg alternatywnych algorytmów i narzędzi zewnętrznych (np. \"locate\")" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Obsługa archiwów z użyciem wtyczek." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Wtyczki pozwalające wyświetlać dodatkowe informacje o plikach (np. tagi mp3, atrybuty grafiki) w panelach oraz przy szukaniu i zamianie." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Wtyczki obsługujące niedostępne dla systemu dyski i urządzenia zewnętrzne (np. Palm/PocketPC)" #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Wtyczki pozwalające wyświetlić za pomocą przeglądarki (listera, komendą F3) pliki takie jak np. grafika, bazy danych akusze kalkulacyjne" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Aktywne" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Wtyczka" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Zarejestrowany dla" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nazwa pliku" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Wtyczki wyszukiwania (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Wtyczki pakera (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Wtyczki zawartości (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Wtyczki systemu plików (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Wtyczki przeglądarki (listera) (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Początek (nazwa musi zaczynać się wybranym znakiem)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Koniec (taki musi być ostatni znak przed znakiem kropki '.')" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opcje" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Dokładne brzmienie nazwy" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Wielkie/małe litery" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Szukaj tych pozycji" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktywacja okna przez kliknięcie na którykolwiek z jego elementów" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Nagłówek karty widoczny nawet przy jednej karcie" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Potwierdzanie zamykania wszystkich kart" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Ogranicz &długość tytułu karty do" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Karty zablokowane oznacz &gwiazdką" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Karty w kilku rzędach" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+W_górę otwiera nową aktywną kartę" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Otwieraj &nowe karty obok bieżącej" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Pokaż przycisk zamykania karty" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Nagłówki kart" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znaków" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Pozycja kart" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nie" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Klonuj przycisk" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Usuń" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Edytuj" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Dodaj nowy przycisk" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Inne..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Usuń skrót klawiaturowy" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Płaskie przyciski" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Wygląd" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Rozmiar paska:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Polecenie:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametry" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Skrót klawiaturowy" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Plik ikony:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Rozmiar ikon:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Polecenie" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Parametry" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Katalog startowy:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Podpowiedź:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Typ przycisku" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Zachowaj otwarty terminal po wykonaniu programu" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Wykonaj w terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Użyj zewnętrznego programu" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Dodatkowe parametry" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Ścieżka programu do wykonania" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Dodaj" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Zastosuj" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Usuń" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Szablon..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Pokaż podpowiedzi" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Pola użytkownika wg typu pliku" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Wskazówka kategorii:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Maska kategorii:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Nazwa kategorii:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Przeglądarka w trybie książki" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Przykład" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Kolor tła w przeglądarce książek" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Kolor czcionki w przeglądarce książek" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Liczba kolumn w przeglądarce książek" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Konfiguruj" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Pakowanie plików" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Utwórz oddzielne archiwa dla każdego z katalogów/plików" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Utwórz samorozpakowujące się archiwum" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Za&szyfrowane" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "&Usuń pliki po ich zarchwizowaniu" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Wieloczęściowe archiwum dyskowe" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Spakuj najpierw do archiwum TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Przy archwizowaniu z podkatalogami zachowaj ścieżki" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Nazwa pliku archiwum:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Paker" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Wypakuj &wszystko i uruchom" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Wypakuj i &uruchom" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Właściwości spakowanego pliku" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atrybuty:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Stopień kompresji:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metoda:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Wiekość oryginalna:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Plik:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Wielkość po skompresowaniu:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Paker:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Czas:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zamknij panel filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Wpisz tekst do wyszukiwania lub filtrowania" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Uwzględnia pisownię wielkich liter" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Katalog" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Pliki" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Początek odnalezionego wzorca" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Koniec odnalezionego wzorca" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtr" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Przełączanie między wyszukiwaniem lub filtrowaniem" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Wtyczka" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Wartość" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Zamknij" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Pomoc" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Wybierz znaki do wstawienia:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Zmień atrybuty" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Przyklejony" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archiwum" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Utworzony:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Ukryty" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Dostęp:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modyfikacja:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Tylko do odczytu" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Dołącz podfoldery" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Właściwości znacznika czasu" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atrybuty" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Arybuty" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bity:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupa" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szare pole oznacza niezmienioną wartość)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Inne" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Właściciel" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Jako tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Wykonywalny" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(szare pole oznacza niezmienioną wartość)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ósemkowo:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Odczyt" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapis" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Dzielenie" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nazwa pliku" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Wielkość i liczba części" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Katalog docelowy" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Plik źródłowy" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Liczba części" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "Gigabajty" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "Kilobajty" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "Megabajty" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Kompilacja" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Wydanie" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Wersja" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Anuluj" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Utwórz link symboliczny" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Obiekt docelowy, który będzie wskazywał link" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nazwa linku" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zamknij" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Porównaj" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronizuj" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronizuj katalogi" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymetrycznie" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "wg zawartości" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignoruj datę" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "tylko zaznaczone" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Podkatalogi" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Pokaż:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Nazwa" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Rozmiar" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Rozmiar" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Nazwa" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(w głównym oknie)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Porównaj" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplikaty" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "pojedyncze" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Proszę nacisnąć przycisk \"Porównaj\", aby rozpocząć" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synchronizuj" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potwierdź nadpisanie" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Dodaj nowy" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Porzuć" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Zmień" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Domyślny" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Usuń" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Ustawienia wtyczki" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Wykryj typ archiwum wg zawartości" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Możliwość usunięcia pliku z archiwum" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Wsparcie szyfrowania" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Pokazuj jako zwykły plik (nie pokazuj ikony archiwum)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Wsparcie pakowania w pamięci" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Dozwól na modyfikację archiwum" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Archiwum może zawierać kilka plików" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Może tworzyć nowe archiwum" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Z oknem dialogowym" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Pozwala przeszukiwać archiwa" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Opis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Wykryj łańcuch (string):" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Rozszerzenie:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flagi:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Nazwa:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Wtyczki:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Wtyczki:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O listerze..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Wyświetla komunikat \"O...\"" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Skopiuj plik" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Skopiuj plik" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Skasuj plik" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Skasuj plik" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Następny" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Ładuj następny plik" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Poprzedni" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Ładuj poprzedni plik" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Odbicie lustrzane" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Odbicie lustrzane" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Przesuń plik" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Przesuń plik" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Wczytaj ponownie" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Załaduj ponownie bieżący plik" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Obróć o 180°" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Obróć o 180°" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Obróć o 270°" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Obróć o 270°" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Obróć o 90°" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Obróć o 90°" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Zapisz jako..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Zapisz plik jako..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Rozciągnij" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Rozciągnij obrazek" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopiuj" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopiuj" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Przytnij" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Usuń" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Usuń" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Pełny ekran" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Zaznacz" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Odbicie lustrzane" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Przenieś" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Przenieś" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Maluj" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Czerwone oczy" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Zmień rozmiar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Cofnij" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Powiększ" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Zmniejsz" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Lister" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokaz slajdów" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Ołówek" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Zaznacz" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Maluj" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Pokaz slajdów" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Podgląd" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programie" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Tryb binarny" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiuj do schowka" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Edytuj" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Kodowanie" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Koniec" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "Plik" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Pełny ekran" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafika" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Tryb szesnastkowy (hex)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Rysunek" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Pokaż jak&o Książkę" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Odbicie lustrzane" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Wtyczki" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Podgląd" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Drukuj..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Obróć" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Zapisz" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Zapisz jako..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Zrzut ekranu" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Znajdź" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Znajdź następny" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Znajdź poprzedni" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Rozciągnij" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Jako tekst" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Podgląd" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Tekst z zawijaniem wierszy" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Powiększ" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Zmniejsz" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiuj do schowka" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Zaznacz wszystko" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Operacje na plikach" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Zawsze na wierzchu" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Użyj \"przeciągnij && upuść\", aby przenieść operacje pomiędzy kolejkami" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Anuluj" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nowa kolejka" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Pokaż w osobnym oknie" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Umieść jako pierwszy w kolejce" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Umieść jako ostatni w kolejce" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Kolejka" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Z kolejki" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kolejka 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kolejka 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kolejka 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kolejka 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kolejka 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Pokaż w osobnym oknie" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Wstrzymaj wszystko" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Gdy plik istnieje" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Gdy plik istnieje" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Praca w tle (oddzielne połączenie)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Gdy plik istnieje" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Anuluj szybki filtr" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Anuluj bieżącą operację" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Uszkodzone:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Ogólne:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Brakujące:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Błąd odczytu:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Pomyślne:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Wprowadź sumę kontrolną i wybierz algorytm:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Sprawdź sumę kontrolną" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Ogółem:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Schowek nie zawiera żadnych ważnych danych paska narzędzi" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atr." #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Rozsz." #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nazwa" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Rozmiar" #: ulng.rsconfcolalign msgid "Align" msgstr "Wyrównywanie" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Nagłówek" #: ulng.rsconfcolconfig msgid "Config" msgstr "Ustawienia" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Usuń" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Pola danych" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Przenieś" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Szerokość" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Ustawienia kolumny: " #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopiuj (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Wszystkie operacje zakończone" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Postęp dla wszystkich operacji %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Przerwij" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Wszystko" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Dodaj" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&utomatyczna zmiana nazwy plików źródłowych" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Anuluj" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Kontynuuj" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopiuj do" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopiuj do &wszystkich" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Wyjdź z programu" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignoruj wszystko" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nie" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Żaden" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Inne" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Zastąp" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Zastąp wszystko" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Nadpisz wszystkie większe" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Nadpisz wszystkie &starsze" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Nadpisz wszystkie mniejsze" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Zmień nazwę" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Wznów" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Ponów" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Pomiń" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Pomiń &wszystko" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Tak" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Zlicz pliki i katalogi" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Oblicz sumę kontrolną" #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Sprawdź sumę kontrolną" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiuj plik(i)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Usuń plik(i)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Przenieś plik(i)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauza" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Start" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kolejka" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Prędkość %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Prędkość %s/s, pozostały czas %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Podziel" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Wymaż plik(i)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<brak etykiety>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<brak nośnika>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Wewnętrzny edytor Double Commandera" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Idź do linii:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Idź do linii" #: ulng.rseditnewfile msgid "new.txt" msgstr "nowy.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nazwa pliku:" #: ulng.rseditnewopen msgid "Open file" msgstr "Otwórz plik" #: ulng.rseditsearchback msgid "&Backward" msgstr "Cofnij" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Szukaj" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Naprzód" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zamień" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Pytaj;Zastąp;Skopiuj do;Pomiń" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Pytaj;Zastąp;Zastąp starsze;Pomiń" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Pytaj;Nie ustawiaj więcej;Ignoruj błędy" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTR" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Zdefiniuj wzorzec" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s poziom(y)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Wszystko (bez ograniczeń)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Tylko bieżący katalog" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Katalog %s nie istnieje!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Szukaj: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Zapisz szablon wyszukiwania" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nazwa szablonu:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Przeskanowano: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanowanie" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Znajdź plik" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Zacznij w" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Wolne %s z %s" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bajtów wolnych" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/czas dostępu" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atrybuty" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Komentarz" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Rozmiar skompresowany" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/czas utworzenia" #: ulng.rsfuncext msgid "Extension" msgstr "Rozszerzenie" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupa" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/czas modyfikacji" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nazwa" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nazwa bez rozszerzenia" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Właściciel" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ścieżka" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Rozmiar" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Błąd podczas tworzenia twardego linku." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Okienko kopiuj/przenieś" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Różnice" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Okno dialogowe Edytuj komentarz" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Edytor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Znajdź plik" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Główny" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Lister" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Zakończono" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska odzanaczania" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska zaznaczania" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maska wejściowa:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Ustawienia własnego wyglądu kolumn" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Ustawienia bieżącego wyglądu kolumn" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Polecenia" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Edytuj" #: ulng.rsmnueject msgid "Eject" msgstr "Wysuń" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Zamontuj" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nowy" #: ulng.rsmnunomedia msgid "No media available" msgstr "Brak dostępnego nośnika" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Otwórz" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Otwórz z ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Inne..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortuj wg" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odmontuj" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Podgląd" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatkowe parametry linii komend archiwizera:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nie można skopiować/przenieść pliku \"%s\" do niego samego!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nie mogę usunąć katalogu %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Nieudane przejście do katalogu [%s] !" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Zamknąć nieaktywne karty?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Karta (%s) jest zablokowana! Zamknąć mimo to?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Na pewno zakończyć?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Skopiować %d wybranych plików/katalogów?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Skopiować wybrane \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Skasować ten częściowo skopiowany plik?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Usunąć %d wybranych plików/katalogów?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Wyrzucić do kosza %d wybranych plików/katalogów?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Usuń wybrane \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Usunąć wybrane \"%s\" do kosza?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nie można usunąć \"%s\" do kosza! Usunąć bezpośrednio?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Dysk jest niedostępny" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Podaj rozszerzenie:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Podaj nazwę:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Błąd CRC w archiwum danych" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Błąd w danych" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nie można połączyć z serwerem: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nie można skopiować pliku %s do %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Katalog o nazwie \"%s\" już istnieje." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s nie jest obsługiwana" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Katalog %s już istnieje!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Przerwane przez użytkownika." #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Błąd zamknięcia pliku" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Nie można utworzyć pliku" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nie ma więcej plików w archiwum" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nie można otworzyć pliku" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Błąd odczytu z pliku" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Błąd zapisu do pliku" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Nie można utworzyć katalogu %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Błędny link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nie znaleziono plików" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Za mało pamięci" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcja nie jest obsługiwana!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Błąd w poleceniu menu kontekstowego" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Błąd podczas ładowania konfiguracji" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Błąd składni w wyrażeniu regularnym!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nie można zmienić nazwy pliku %s na %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nie można zapisać powiązania!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nie można zapisać pliku" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nie można ustawić atrybutów dla \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nie można ustawić daty/czasu dla \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nie można ustawić właściciela/grupy dla \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Za mały bufor" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Zbyt wiele plików do spakowania" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Nieznany format archiwum" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nazwa" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Plik %s zmieniono, zapisać?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtów, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Nadpisz:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Plik o nazwie %s istnieje, zastąpić?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Plikiem:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Plik \"%s\" nie został znaleziony." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktywne operacje na plikach" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Niektóre operacje na plikach nie zostały zakończone. Zamknięcie Double Commandera może spowodować utratę danych." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Plik %s jest oznaczony jako tylko do odczytu. Usunąć mimo to?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Rozmiar pliku \"%s\" jest zbyt duży dla docelowego systemu plików!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "katalog o nazwie %s istnieje, zastąpić?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Iść za linkiem \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Ścieżka" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nazwa:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Błąd w linii poleceń" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Błądna nazwa pliku" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Nieprawidłowy format pliku konfiguracyjnego" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Zła ścieżka" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Ścieżka %s zawiera niedozwolone znaki." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "To nie jest prawidłowa wtyczka!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Ta wtyczka jest zbudowana dla Double Commander %s.%sNie będzie działać z Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Błędne cytowanie" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Błędny wybór." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Wczytywanie listy plików..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopiowanie pliku %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Kasowanie pliku %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Błąd: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Rozpakowywanie pliku %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informacja: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Tworzenie twardego linku %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Tworzenie katalogu %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Przenoszenie pliku %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Archiwizowanie do pliku %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Usunięcie katalogu %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Wykonano: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Tworzenie linku symbolicznego %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testowanie intergralności %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hasło główne" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Proszę wprowadzić hasło główne:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nowy plik" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Kolejna część będzie rozpakowana" #: ulng.rsmsgnofiles msgid "No files" msgstr "Brak plików" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Brak wybranych plików." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Brak miejsca na dysku. Kontynuować?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Brak miejsca na dysku. Ponowić próbę?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Pliku %s nie można skasować" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nie zaimplementowo." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Hasło:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Hasła są różne!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Proszę wprowadzić hasło:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Hasło (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Proszę ponownie wprowadzić hasło dla weryfikacji:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Dodaj %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Konfiguruj" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Usuń %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Wzorzec \"%s\" istnieje. Zastąpić?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Zmienić nazwę/przenieść %d wybranych plików/katalogów?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Przenieść/zmienić nazwę \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Zmiana ustawień. Należy ponownie uruchomić Double Commandera" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Wybrane: %s z %s, plików: %d z %d, katalogów: %d z %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Zaznacz tylko pliki z sumą kontrolną!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Wybierz lokalizacją kolejnej części" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Zmień etykietę części" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Zmień nazwę karty" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nowa nazwa karty:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ścieżka docelowa:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Wybrano zbyt dużo plików" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nazwa użytkownika:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nazwa użytkownika (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etykieta części:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Proszę wpisać rozmiar części:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Zamazać %d wybranych plików/katalogów?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Zamazać \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Bez zmian;WIELKIMI ZNAKAMI;małymi znakami;Pierwszy wielki;Pierwszy Znak Każdego Słowa Wielki;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Przerwane" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Obliczanie sumy kontrolnej" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Obliczanie sumy kontrolnej dla \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Obliczanie sumy kontrolnej z \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Obliczanie" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Obliczanie \"%s|\"" #: ulng.rsopercombining msgid "Joining" msgstr "Łączenie\"" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Łączenie plików w \"%s\" do \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiowanie" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiowanie z \"%s\" do \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiowanie \"%s\" do \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Tworzenie katalogu" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Tworzenie katalogu \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Usuwanie" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Usuwanie w \"%s|\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Usuwanie \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Wykonywanie" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Wykonywanie \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Wyodrębnianie" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Wyodrębnianie z \"%s\" do \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Zakończony" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "Przenoszenie" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Przenoszenie z \"%s\" do \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Przenoszenie \"%s\" do \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nie uruchomiony" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakowanie" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakowanie z \"%s\" do \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Pakowanie \"%s\" do \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pauza" #: ulng.rsoperpausing msgid "Pausing" msgstr "Wstrzymywanie" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "W kolejce" #: ulng.rsoperrunning msgid "Running" msgstr "Działające" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Ustawianie właściwości" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Ustawianie właściwości w \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Ustawianie właściwości \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dzielenie" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Dzielenie \"%s\" to \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Uruchamianie" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zatrzymane" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zatrzymywanie" #: ulng.rsopertesting msgid "Testing" msgstr "Testowanie" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Testowanie w \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Testowanie \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Sprawdzanie sumy kontrolnej" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Sprawdzanie sumy kontrolnej w \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Sprawdzanie sumy kontrolnej z \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Oczekiwanie na dostęp do źródła pliku" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Oczekiwanie na odpowiedź użytkownika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Wycieranie" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Wycieranie w \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Wycieranie \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Działanie" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Usuń:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Rozpakuj bez ścieżki:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Tryb parsowania formatu:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Pozycja ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Zakres wyszukiwania ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parametr" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Ciąg zapytania hasła:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Utwórz archiwum samorozpakowujące:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nazwa rodzaju archiwum:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Wartość" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Skojarzyć wtyczkę \"%s\" z:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Pierwszy;Ostatni;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Wyłącz" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Włącz" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Wpisz rozszerzenie" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Kursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Zaznaczenie" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Zaznaczenie pod kursorem" #: ulng.rsoptexampletext msgid "Text" msgstr "Tekst" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "oddzielnym oknie;zminimalizowanym oddzielnym oknie;panelu operacji" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "dynamiczny;bajty;kbajty;Mbajty;Gbajty" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Skrót %s do cm_Delete zostanie dodany, a więc może zostać używany do odwracania tego ustawienia." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Dodaj klawisz skrótu dla %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj skrót" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nie można ustawić skrótu" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Zmień skrót" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Polecenia" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Skrót %s do cm_Delete ma parametr, który zastępuje to ustawienie. Czy chcesz zmienić ten parametr, aby używać ustawienia globalnego?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, fuzzy,badformat msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Skrót %s do cm_Delete musi mieć parametr zmieniajacy trafność skrótu % s. Czy chcesz zmienić?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Edytuj skrót klawiszowy do %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Popraw parametr" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Skrót" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Skróty" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<brak>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametry" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Ustaw skrót do usunięcia pliku" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Dla tego ustawienia do pracy ze skrótem %s, skrót %s musi być przypisany do cm_Delete ale jest już przypisany do %s. Czy chcesz to zmienić?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Skrót %s dla cm_Delete to skrót sekwencji, dla którego nie można przypisać skrót klawiszowy z odwróconym Shift. To ustawienie może nie działać." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Skrót jest używany" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Skrót %s jest już używany." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Zmienić na %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "używany przez %s w %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "używany dla tego polecenia ale z różnymi parametrami" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archiwizery" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Autoodświeżanie" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Zachowanie" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Krótki" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Kolory" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Kolumny" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Konfiguracja" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Własne kolumny" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Lista katalogów" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Przeciągnij i upuść" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Przycisk listy dysków" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Skojarzenia plików" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operacje na plikach" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Okna główne" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Widoki plików" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Typy plików" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Karty katalogów" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Czcionki" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Podświetlanie" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Skróty klawiaturowe" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikony" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Lista ignorowanych" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Klawisze" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Język" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Wygląd" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Logi" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Różne" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mysz" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Wtyczki" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Szybkie wyszukiwanie/filtr" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Pasek narzędzi" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Narzędzia" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Podpowiedzi" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Brak;Wiersz polecenia;Szybkie wyszukiwanie;Szybki filtr" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Lewy klawisz;Prawy klawisz;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "na początku listy plików;po katalogach(jeśli katalogi są sortowane przed plikami);od sortowanej pozycji;na końcu listy plików" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Wtyczka %s jest już przypisana do następujących rozszerzeń:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Stan" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nazwa pliku" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nazwa" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Skojarzenia" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Wrażliwe;Niewrażliwe" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Pliki;Katalogi;Pliki i katalogi" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ukryj filtr panelu jeśli nie ustawiony" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nie uwzględnia wielkości liter; według ustawień lokalnych (aAbBcC); napierw wielkie, potem małe litery (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "według nazwy i pokaż pierwsze; sortuj jako pliki i pokaż pierwsze; sortuj jako pliki" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetycznie, uwzględniając akcenty;Naturalne sortowanie: alfabetycznie i numery" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Góra;Dół;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Separator;Polecenie wewnętrzne;Polecenie zewnętrzne;Men&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "nie zmieniaj pozycji;użyj takich samych ustawień dla nowych plików; do posortowanej pozycji" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Pliki: %d, foldery: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nie można zmienić praw dostępu dla \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Nie można zmienić właściciela dla \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Plik" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Katalog" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nazwany strumień" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nie" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Specjalne urządzenie blokowe" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Specjalne urządzenie wirtualne" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Link symboliczny" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Nieznany typ" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Tak (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Wynik wyszukiwania" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<szablon bez nazwy>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Wybierz katalog" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Pokaż pomoc dla %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Wszystko" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Polecenia" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Podgląd" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajty" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajty" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajty" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajty" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajty" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Plików: %d, Katalogów: %d, Rozmiar: %s (%s bajtów)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nie można utworzyć katalogu docelowego!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nieprawodłowy format wielkości pliku!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Pliku nie da sie podzilić!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Liczba części jest większa niż 100! Kontynuować?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Wybierz katalog:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Błąd przy tworzeniu linku symbolicznego." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Zwykły tekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Czysty tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dzień (dni)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Godzin(y)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(y)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Miesiąc(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(y)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Tydzień (tygodnie)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Rok (Lata)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Różnice" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Edytor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Błąd przy otwieraniu porównywania" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Błąd przy otwieraniu edytora" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Błąd przy otwieraniu terminalu" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Błąd przy otwieraniu podglądu" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Lister" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Proszę zgłosić ten błąd do systemu śledzenia błędów wraz z opisem wcześniejszych działań i następującym plikiem:%sWciśnij %s aby kontynuować lub %s aby zakończyć program." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Sieć" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Program wewnętrzny Double Commandera do podglądu" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Kodowanie" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nowy rozmiar" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nie znaleziony!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.nl.po������������������������������������������������������������0000644�0001750�0000144�00001235554�12666540554�017242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: \n" "Last-Translator: fer <connect37@yopmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Nederlands\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergelijken... %d%% (ESC om te annuleren)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Gevonden bestanden: %d (Identiek: %d, Verschillend: %d, Uniek links: %d, Uniek rechts: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Links naar rechts: Kopiëer %d bestanden, totale grootte: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Rechts naar links: Kopiëer %d bestanden, totale grootte: %d bytes" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Alles" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Annuleer" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configureer aangepast kolomoverzicht" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Achtergrond:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Cursor rand" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Toestaan overkleur" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Gebruik aangepast lettertype en kleur" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Tekstkleur:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Lettertype:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Grootte:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Achtergrond 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configureer overzichtnr:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Cursor kleur:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Cursor tekst:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Markeer kleur:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Naam:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Voeg kolom toe" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Aanpassen kolom :" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Voorafweergave" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Kies template..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Check vrije ruimte" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopiëer attributen" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiëer eigenaarschap" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopiëer datum/tijd" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Correct links" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Verwijder alleen-lezen attribuut" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Excl. lege mappen" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Volg links" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserveer ruimte" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Wat te doen bij niet kunnen instellen bestandstijd, attributen, etc." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Gebruik bestand template" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Als map bestaat" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Als bestand bestaat" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Wanneer niet kunnen instellen eigenschap" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<geen template>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Sluit" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiëer naar klembord" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Homepage:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisie" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versie" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "Terugzetten" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Kies attributen" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archief" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Gecomprimeerd" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Directory" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Versleuteld" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Verborgen" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Alleen-lezen" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Schaars" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Kleverig" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symlink" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Systeem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Tijdelijk" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS attributen" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Algemene attributen" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groep" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ander" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Voer uit" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lees" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Als tekst" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijf" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Bereken checksom..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "OPen checksom-bestand nadat job voltooid is" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Maak aparte checksom voor ieder bestand aan" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Sla checksom-bestand(en) op in:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluit" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifiëer checksom..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Verbind" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Verwijder" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerk" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Verbindingsbeheerder" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Verbind met:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Voeg toe aan wachtrij" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Opties" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sla deze opties als standaard op" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiëer bestand(en)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nieuwe wachtrij" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Wachtrij 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Wachtrij 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Wachtrij 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Wachtrij 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Wachtrij 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Opslaan beschrijving" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Bestand/map commentaar" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Bewerk commentaar voor:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Codering:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Auto-vergelijken" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Binaire modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Annuleer" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annuleer" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiëer rechter blok" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiëer rechter blok" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiëer linker blok" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiëer linker blok" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiëer" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Knip" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Verwijder" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Plak" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Herongedaan maken" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecteer alles" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Ongedaan maken" #: tfrmdiffer.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Afsluiten" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Eerste verschil" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Eerste verschil" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Negeer geval\" XXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Negeer blanco's" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Blijf scrollen" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Laatste verschil" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Laatste verschil" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Regel verschillen" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Volgend verschil" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Volgend verschil" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Open links..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "OPen rechts..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Schilder achtergrond" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Vorig verschil" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Vorig verschil" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Herlaad" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Herlaad" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Opslaan" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Opslaan" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "OPslaan als..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Opslaan als..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Opslaan links" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Opslaan links" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Sla links op als..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Sla links op als..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "OPslaan rechts" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Opslaan rechts" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Opslaan rechts als..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Opslaan rechts als..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Vergelijk" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Vergelijk" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Versleutel" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Vergelijk bestanden" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acties" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerk" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Versleutel" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Bestand" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opties" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Voeg toe nieuwe shortcut aan volgorde" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Verwijder laatste shortcut uit volgorde" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Alleen voor deze controls" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parameters (elk op een aparte regel):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Shortcuts:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Over" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuratie" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuratie" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiëer" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopiëer" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Knip" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Knip" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Verwijder" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Verwijder" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "Zoek" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Zoek" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Vind volgende" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Vind volgende" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Ga naar regel..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "MAC (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "MAC (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "UNIX (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "UNIX (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Plak" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Plak" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Herongedaan maken" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Herongedaan maken" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "Vervang" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Vervang" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecteer &alles" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Selecteer alles" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Ongedaan maken" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Ongedaan maken" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Sluit" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Sluit" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Beëindig" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Beëindig" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nieuw" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nieuw" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Open" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Open" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Opslaan" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Opslaan" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Opslaan &als" #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Opslaan als" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Sla alles op" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Sla alles op" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Bewerker" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Help" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerk" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Coderen" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Open als" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Opslaan als" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "Bestand" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Syntax kleuring" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Einde regel" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption #, fuzzy #| msgid "C&ase gevoeligheid" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Hoofdletter gevoelig" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Zoek vanaf ^" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Reguliere uitdrukkingen" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Selecteer alleen tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Alleen hele woorden" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Optioneel" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Vervang door:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Zoek naar:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Richting" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Uitpakken bestanden " #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Uitpakken paden indien opgeslagen met bestanden" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Pak elk archief uit in &aparte submap (naam van het archief)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "Overschrijf bestaande bestanden" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Pak bestand uit naar:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "&Uit te pakken bestanden:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Paswoord voor versleutelde bestanden" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Voeg toe" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Voeg toe" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Omlaag" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Verwijder" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Verwijder" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Verwijder" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Hernoem" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Omhoog" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Bestandsverwantschappen" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Acties" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensies" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Bestandtypes" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icoon" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Actie:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Opdracht:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Bewerk" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Openen in Bewerker" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Bestandspad" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Volledig pad" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Verkrijg uitvoer van opdracht" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Open" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Uitvoeren in terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Openenen in VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Bekijk" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Openen in Viewer" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluit" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Wacht..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Bestandsnaam:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Van:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klik op Sluiten als tijdelijk bestand verwijderd kan worden!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Naar panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Bekijk alles" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Huidige uitvoering:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Van:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Naar:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluit" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Instellen eigenschappen" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Instellen voor alle geselecteerde bestanden" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sla dit bestand over" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschappen" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groep" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ander" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Representatie in tekst:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Bevat:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Voer uit" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Naam:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pad:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Groep" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Laatst benaderd:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Laatste wijziging:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Laatste status wijziging:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octaal:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Eigenaar" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lees" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Grootte:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Symlink naar :" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Type:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijf" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributen" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschappen" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Voeg toe" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Help" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Sluit" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "&Bewerk" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Ga naar bestand" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "&Laatste zoekopdracht" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nieuwe zoekopdracht" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Opslaan" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Verwijder" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Laad" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Opslaan" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Opslaan met \"Start in map\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Indien opgeslagen dan \"Start in map\" zal worden hersteld bij laden template. Gebruik dit als je zoeken wilt opknappen naar zekere map" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Annuleer" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Gebruik template" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Bekijk" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Voeg toe aan &lijstvenster" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Vind bestanden" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Hoofdlettergevoelig" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "&Datum van:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Datum tot:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Bestandsgrootte vanaf:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Bestandsgrootte tot:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Zoek tekst in bestand" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Volg symlinks" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Vind bestanden die NIET de tekst bevatten" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Niet ouder dan:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Zoek naar deel bestandsnaam" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Reguliere uitdrukking" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Vervang door" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Geselecteerde mappen en bestanden" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Reguliere uitdrukking" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "&Tijd vanaf:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Tijd tot:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Gebruik zoek plug-in:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Geef mapnamen in die uitgesloten zijn van zoeken gescheiden door \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Geef bestandsnamen in die uitgesloten zijn van zoeken gescheiden door \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Geef bestanden in gescheiden door \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mappen" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Bestanden" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Zoek data" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attributen" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Coderen:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Excl. submappen" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excl. bestanden" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&BestandsMasker" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Start in map" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Doorzoek submappen:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "& vorige zoekopdrachten:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Verwijder uit lijst" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Toon alle gevonden items" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Laat zien in Viewer" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Uitgebreid" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Laad/Opslaan" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Plug-in's" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultaten" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standaard" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Vind" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Vind" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Grote/kleine letters gevoelig" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Maak hardlink" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Bestaand doel (waar link naar zal wijzen)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Linknaam" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importeer alles!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Geselecteerde import" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Selecteer de gewenste items" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Bij klikken op submenu, selecteert dit het hele menu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Druk CTRL en klik items om meerdere te selecteren" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Opslaan in..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Item" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Bestandsnaam" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Omlaag" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Omlaag" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Verwijder" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Verwijder" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Omhoog" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Omhoog" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Over" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Voeg toe bestandsnaam aan opdrachtregel" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Voeg toe pad en bestandsnaam aan opdrachtregel" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopiëer pad naar opdrachtregel" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Kort" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kort overzicht" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Bereken gebruikte ruimte..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Wijzig map" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Wijzig map naar home" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Wijzig directory naar ouder" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Wijzig directory naar root" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Bereken checksom..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Verifiëer checksom..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Schoon logbestand op" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Schoon logvenster op" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Sluit alle tabs" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Sluit tab" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Volgende opdrachtregel" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Vorige opdrachtregel" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Stel opdrachtregel in op vorige opdracht in geschiedenis" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Volledig" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolommen overzicht" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Vergelijk op inhoud" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Vergelijk mappen" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Vergelijk mappen" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuratie van directory hotlist" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Toon context menu" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiëer" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiëer alle getoonde kolommen" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiëer bestand(en) met volledig pad" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiëer bestandsnaam(en) naar klembord" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiëer bestanden zonder bevestiging te vragen" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiëer naar zelfde panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Kopiëren" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Toon bezette ruimte" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Knippen" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Verwijder" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Directory geschiedenis" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "Directory &hotlist" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Bewer" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." msgid "Edit Co&mment..." msgstr "Bewerk commentaar..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Bewerk nieuw bestand" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Bewerk padveld boven bestandslijst" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Verwissel panelen" #: tfrmmain.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Afsluiten" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "Uitpakken bestanden..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Bestand verwantschappen..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Link bestanden..." #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Toon bestands eigenschappen" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Splits bestand" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Plat voorbeeld" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Focus opdrachtregel" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Plaats cursor op eerste bestand in lijst" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Plaats cursor op laatste bestand in lijst" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Maak hardlink..." #: tfrmmain.acthelpindex.caption #, fuzzy #| msgid "Contents" msgid "&Contents" msgstr "&Inhoud" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Horizontale panels modus" #: tfrmmain.actkeyboard.caption #, fuzzy #| msgid "Keyboard" msgid "&Keyboard" msgstr "&Toetsenbord" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Links &= Rechts" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Open linker drive lijst" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Laad selectie van klembord" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Laad selectie van bestand" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Laad tabs van bestand" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Maak directory" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "Selecteer alles met dezelfde toevoeging" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "&Inverteer selectie" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecteer alles" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Deselecteer een groep" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Selecteer een groep" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "Deselecteer alles" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimaliseer venster" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "Meervoudig hernoem gereedschap" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Netwerk &verbinden..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Netwerk verbreken" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Netwerk snel verbinden" #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "&Nieuwe tab" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "Spring naar volgende tab" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Open" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Probeer archief te openen" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Open balk bestand" #: tfrmmain.actopendirinnewtab.caption #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "Open map in een nieuwe tab" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Open VFS lijst" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Uitvoeringen bekijker" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "&Opties..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "&Inpakken bestanden..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Instellen splits positie" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Plak" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "Spring naar vorige tab" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Snelfilter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Snel zoeken" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Snel overzicht panel" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Ververs" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Verplaats" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Verplaats/Hernoem bestanden zondder vragen om bevestiging" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Hernoem" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Hernoem tab" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Herstel selectie" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Keer volgorde om" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Rechts &= Links" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Open rechter driver-lijst" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Start terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Opslaan selectie" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Sla selectie op naar bestand..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Sla tabs op naar bestand" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Zoek" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Wijzig attributen" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Geblokkeerd met mappen geopend in nieuwe tabs" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normaal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Geblokkeerd" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Geblokkeerd, maar directory wijzigingen toegestaan" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Open" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Open met gebruik van systeem associaties" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Toon knoppenmenu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Toon opdrachtregel geschiedenis" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Toon verborgen/systeem bestanden" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Soteer op attributen" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Sorteer op datum" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Sorteer op extensie" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Sorteer op naam" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Sorteer op grootte" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "In-/Uitschakelen negeer-lijstbestand om geen bestandsnamen te tonen" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Maak symbolische link..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Synchroniseer mappen..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Doel &= Bron" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Test archief(en)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturen" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Miniaturen overzicht" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Verplaats map onder cursor naar linker panel" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Verplaats map onder cursor naar rechter panel" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "Deselecteer alles met dezelfde" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Overzicht" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Toon geschiedenis van bezochte paden voor actief beeld" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ga naar volgend item in geschiedenis" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ga naar vorig item in geschiedenis" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "&Bezoek de Double Commander website" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Wis" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Beëindig" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Directory" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Verwijder" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Directory hotlist" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Toon huidige directory van rechter panel in linker panel" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "-" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Map hotlist" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Toon huidige directory van linker panel in rechter panel" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Pad" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annuleer" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiëer..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Maak link..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiëer" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Verplaats..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Maak symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "" #: tfrmmain.mitrayiconexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Afsluiten" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Herstel" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Annuleer" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Opdrachten" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguratie" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "Bestanden" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Help" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markeer" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Toon" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Opties" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Tabs" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiëer" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Knip" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Verwijder" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Bewerk" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Plak" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Annuleer" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Help" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Hotkey" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Maak nieuwe map" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Geef nieuwe mapnaam:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "breedte" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Sluit" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Verwijder" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Restore Alles" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Opslaan" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Meervoudig hernoemen" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Log" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguliere expressie" #: tfrmmultirename.cbusesubs.caption #, fuzzy #| msgid "Use substitution" msgid "&Use substitution" msgstr "Gebruik substitutie" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E]xtentie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Teller" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Zoek && Vervang" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log Resultaat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Masker" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "Extentie" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Zoek..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "Bestandsnaam" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Vervang..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Begin nummer" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "breedte" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[T]eller" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D]ag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex]xtentie" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x]xtentie" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[U]ur" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[Mi]nuut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[Ma]and" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]aam" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx]aam" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx.x]aam" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tijd..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Naam..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plug-in" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S]econde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[J]aar" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Bestandspad" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Pas toe" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opties" #: tfrmoptions.lblemptyeditor.caption #, fuzzy #| msgid "Please select one of the subpages. This page does not contain any settings." msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Selecteer een van de subpagina's, deze pagina bevat geen instellingen" #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy msgctxt "tfrmoptionsarchivers.btnautoconfig.caption" msgid "A&uto Configure" msgstr "Auto-configureren" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Pas toe" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Verwijder" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Hernoem" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om geschikte pad te selecteren" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Debug modus" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Ingeschakeld" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Toon console output" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opties" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Bezig met toevoegen" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Extensie:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Uitpakken:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Lijst:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Lijsten maken eindigen (optioneel)" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Lijstformaat:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Lijst start (optioneel)" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Inpakker" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Omschrijving:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Extra" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Algemeen" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Als grootte, datum of attributen wijzigen" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Voor de volgende paden en hun sub-directory" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Als bestanden worden gemaakt, verwijderd of hernoemd" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Als toepassing op de achtergrond is" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Uitschakelen auto-verversen" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Ververs bestandslijst" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Altijd balk-icoon tonen" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Automatisch verbergen niet-gemonteerde apparaten" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Verplaats icoon naar systeem tray indien geminimaliseerd" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Een kopie van DC per keer toestaan" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Hier kun je een of meer drives of gemonteerde punten opgeven, gescheiden door \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Drives zwarte lijst" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Toon bestandsextensies" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "gericht (met tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "direct na bestandsnaam" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Snij tekst af op kolombreedte" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Horizontale lijnen" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Verticale lijnen" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Auto-invullen kolommen" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Toon rasterlijn" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Auto-grootte kolommen" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Auto-grootte kolom:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Pas toe" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Bewerk" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Opdrachtregel geschiedenis" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Directory geschiedenis" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Bestandsmasker geschiedenis" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Opslaan configuratiemeegedeelde" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Zoek en vervang geschiedenis" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Locatie van configuratiebestanden" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Opslaan bij afsluiten" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Programma map (draagbare versie)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Gebruikers home map" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alles" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Verwijder" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nieuw" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Hernoem" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Opslaan als" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Opslaan" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Toestaan overkleur" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Algemeen" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Cursor rand" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Achtergrond:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Achtergrond 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Configureer kolommen voor bestandsysteem:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cursor kleur:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Cursor tekst:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Lettertype:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Grootte:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Tekstkleur:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Markeer kleur:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Voeg kolom toe" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Plaats van frame panel na de vergelijking" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Voeg toe..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Verwijder..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Export..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Help" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Import..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Voeg in..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Diverse..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om juiste pad te selecteren" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Sommige functies om juiste doel te selecteren" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Sorteer..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Wanneer directory toevoegen, ook doel toevoegen" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Altijd boom uitbreiden" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Toon alleen geldige omgevings variabelen" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "In pop-up, toon [ook pad]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Naam, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Naam, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Directory hotlist (sorteer opnieuw per drag && drop)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andere opties" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Naam:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Pad:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Doel:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "directory van het actieve frame" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "directory van de actieve && inactieve frames" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "een opdracht" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Voeg opdracht toe" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "een kopie van het geselecteerde item" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Voeg een kopie van het geselecteerde item toe" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "een scheidingsteken" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Voeg een een scheidingsteken toe" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menu" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Voeg een sub-menu toe" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "directory waar ik naar toe wil bladeren" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Vouw alles op" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... huidige niveau van alleen geselecteerde item(s)" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "Huidige geselecteerde of actieve directories van actieve frame" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Knip" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "Verwijder alles!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menu en al zijn elementen" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "alleen sub-menu maar behoud elementen" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "geselecteerde item" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Verwijder geselecteerde item" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Scan alle hot-directories pad om diegene te valideren die actueel bestaan" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Scan alle hot-directories pad && doel om diegene te valideren die actueel bestaan" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "naar een directory hotlist bestand (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "naar een \"wincmd.ini\" van TC (behoud bestaande)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "naar een \"wincmd.ini\" van TC (wis bestaande)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Ga naar configureren TC gerelateerde info" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Ga naar configureren TC gerelateerde info" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Hot directory testmenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "van een directory hotlist bestand (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "van \"\"wincmd.ini\" van T" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Öpen alle takken" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Plak" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Herstel een backup van directory hotlist" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Opslaan backup van huidige directory hotlist\"" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Toevoeging van hoofdpanel:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Van alle ondersteunde formaten, vraag welke iedere keer te gebruiken" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Bij opslaan Unicode tekst, sla dit op in UTF8 formaat (anders UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Bij vallen tekst, genereer bestandsnaam automatisch (anders vragen gebruiker)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Toon bevestigingsvenster na laten vallen" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Als drag && drop tekst naar panels" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption #, fuzzy #| msgid "Place the most desired format on top of list (use drag && drop):" msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plaats het meest gewenste formaat bovenaan lijst (gebruik drag && drop):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(als de meest gewenste niet aanwezig is, nemen we de tweede enz.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(zal met sommige brontoepassingen niet werken. Probeer bij probleem af te vinken)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Toon bestandssysteem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Toon vrije ruimte" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Toon label" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drives lijst" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Achtergrond" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Achtergrond" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Terugstellen" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Opslaan" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Element attributen" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Voorgrond" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Voorgrond" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekst markering" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Gebruik (en bewerk) globale schema instellingen" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Gebruik lokale schema instellingen" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Vet" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "Omgekeerd" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "UIit" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "Aan" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Schuin" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Omgekeerd" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Uit" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "Aan" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Doorgestreept" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Omgekeerd" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Uit" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "Aan" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Onderstreept" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Omgekeerd" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Uit" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Aan" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Voeg toe..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Verwijder..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Voeg in..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Hernoem" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sorteer..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Altijd boom uitbreiden" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nee" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andere opties" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "een scheidingsteken" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Voeg een sub-menu toe" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Vouw alles op" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... huidige niveau van alleen geselecteerde item(s)" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Knip" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Verwijder alles!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menu en al zijn elementen" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "alleen sub-menu maar behoud elementen" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "geselecteerde item" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Verwijder geselecteerde item" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Öpen alle takken" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Plak" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Hernoem" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Voeg toe" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Voeg toe" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Voeg toe" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Omlaag" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Bewerk" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Verwijder" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Verwijder" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Verwijder" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Hernoem" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Omhoog" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Acties" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensies" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Bestandtypes" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icoon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Actie:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Opdracht:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start pad:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Bewerk" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Openen in Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Verkrijg uitvoer van opdracht" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Openen" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Uitvoeren in terminal" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Overzicht" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Openen in Viewer" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Toon bevestigingsvenster voor:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopiëer uitvoering" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "&Verwijder uitvoering" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Verwijder naar prullenbak (Shift keert deze instelling om" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Verwijder naar afval uitvoering" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Verwijder alleen lezen attribuut" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Verplaats uitvoering" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "&Zoek naar deel van bestandsnaam" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Verwerk commentaar met bestanden/mappen" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Selecteer alleen de bestandsnaam met hernoemen (niet de extentie)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Toon tab selectie panel in kopiëer/verplaats dialoog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Sla bestandsuitvoeringen fouten over en schrijf deze naar logvenster" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Bezige uitvoeringen" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Zoek bestand" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Gebruiker interface" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Buffergrootte voor bestandsuitvoeringen (in KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Toon uitvoeringen voortgang in het begin in" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Aantal wissingen:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Gebruik geheugen mapping voor zoeken tekst in bestanden" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Gebruik stream voor zoeken tekst in bestanden" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Toestaan overkleur" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Gebruik frame cursor" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Gebruik hellingshoek indicator" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Gebruik geïnverteerde selectie" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Cursor rand" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Drive vrije ruimte indicator" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Achtergrond:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Achtergrond 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Cursor kleur:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Cursor tekst:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "&Helderheidsniveau van inactieve panel" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicator achtergrondkleur" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Indicator voorgrondkleur:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Markeer kleur:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Tekst kleur:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Laad bestand niet totdat een tab is geactiveerd" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Toon [ ] rond directory" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Highlight nieuwe en geupdate bestanden" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Inschakelen i.p.v. hernoemen bij tweemaal klikken op een naam" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Laad bestandslijst in aparte procedure" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Laad iconen na bestandslijst" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Laat systeem en verborgen bestanden zien" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Bij selecteren bestanden met <SPACEBAR>, ga naar beneden naar volgend bestand (zoals bij <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Bezig met formatteren" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Bezig met sorteren" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Case s&ensitivity:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Onjuist formaat" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Datum en tijd formaat:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Bestandsgrootte formaat" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Invoegen nieuwe bestanden" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Bezig met sorteren directories:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Sorteer methode:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Verplaats geupdate bestanden" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Pas toe" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Verwijder" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "" #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Bestandstype kleuren" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Categorie attributen:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Categorie kleur:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Categorie masker:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Categorie naam:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Editor lettertype" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Log lettertype" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Standaard lettertype" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Viewer boek lettertype" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Viewer lettertype" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Voeg toe hotkey" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Verwijder hotkey" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "&Bewerk hotkey" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Categoriën:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Opdrachten:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Shortcut bestanden:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Opdracht" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Hotkeys" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Hotkey" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parameters" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Controles" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Voor de volgende paden en hun sub-directories:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Toon iconen voor acties in menu's" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Toon overlay iconen, bijv. voor links" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Uitschakelen speciale iconen" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Iconen in menu's" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Icoon grootte" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Toon iconen links van de bestandsnaam" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Alles" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Alle geassociëerde + &EXE/LNK (langzaam)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Geen iconen" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Alleen standaard iconen" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Voeg toe geselecteerde namen" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Voeg geselecteerde namen met volledig pad toe" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om passend pad te selecteren" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Negeer (toon niet) de volgende bestanden en mappen:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Opslaan in :" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Linker, rechter pijlen wijzigen directory (Lynx-like verplaatsing)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Bezig met typen" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Al&t+Letters" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "&Ctrl+Alt+Letters" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Letters" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Platte knoppen" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Platte interface" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Platte knoppen" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Toon vrije ruimte indicator op drive label" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Toon logvenster" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Toon uitvoeringspanel op achtergrond" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Toon gewone voortgang in menubalk" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Toon opdrachtregel" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Toon huidige map" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Toon &drive balk" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Toon vrije ruimte label" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Toon drives lijst knop" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Toon &functietoets knoppen" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Toon hoofdmenu" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Toon knoppenbalk" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Toon kort vrije ruimte labe" #: tfrmoptionslayout.cbshowstatusbar.caption msgid "Show &status bar" msgstr "" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Toon &tabstop header" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Toon map tabs" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Toon terminal venster" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Toon twee drive knoppenbalken (vaste breedte, boven bestandspanel" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Scherm opmaak " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om passend pad te selecteren" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Overzicht logbestand inhoud" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Incl. datum in log bestandsnaam" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Inpakken/Uitpakken" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiëer/Verplaats/Maak link/syslink" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Verwijder" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Maak/Verwijder mappen" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Log fouten" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Creëer een logbestand:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Log informtie berichten" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/afsluiten" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Log gelukte handelingen" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Bestandsysteem plug-in's" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Bestandshandelingen logbestand" #: tfrmoptionslog.gblogfileop.caption #, fuzzy #| msgid "Log operations:" msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Log handelingen:" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Bewerkingsstatus:" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om geschikte pad te selecteren" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om geschikte pad te selecteren" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om geschikte pad te selecteren" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Verwijder miniaturen van niet langer bestaande bestanden" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Overzicht logbestand inhoud" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ga altijd naar de drive-root bij wisseling drives" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Toon waarschuwingen (\"OK\" knop alleen)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Opslaan miniaturen in cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniaturen" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Betreffende TC export/import:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Configuratie bestand:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC uitvoerbaar:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Gereedschapsbalk doelpad" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Miniatuurgrootte" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selectie per muis" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Bezig met scrollen" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selectie" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Modus:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Regel voor regel" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Regel voor regel met cursor beweging" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagina voor pagina" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Configureer" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Activeer" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Verwijder" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Pas aan" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Zoek plug-in's toestaan alternatieve zoekalgorithmes of externe gereedschappen (zoals \"locate\", etc.) te gebruiken" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Inpak plug-in's worden gebruikt om te werken met archieven" #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Inhoud plug-in's geven uitgebreide bestanddetails weer zoals mp3 tags of afbeeldings attributen in bestandslijsten, of gebruik ze in zoek en hernoem tool" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Bestandssysteem plug-in's zorgen voor toegang tot schijven niet benaderbaar door het bedrijfssysteem of tot apparaten zoals Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Viewer plug-in's laten formaten zoals plaatjes, rekenbladen en databases etc. zien in Viewer (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Actief" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption #, fuzzy #| msgid "Plug-in" msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Plug-in" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Geregistreerd voor" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Zoek plug-in's (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Inpak plug-in's (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Inhoud plug-in's (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Bestandsysteem plug-in's (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "&Viewer plug-in's (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Viewer plug-in's (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Begin (naam moet beginnen met eerst getypte letter)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Einde (laatste karakter voor een getypte punt . moet overeenkomen" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opties" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Precieze naamovereenkomst:" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Zoek zaak" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Zoek naar deze items" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activeer doelpanel bij klikken op een van zijn tabs" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Toon tab header ook als er één tab is" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Bevestig sluiten alle tabs" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limiteer tab titellengte tot:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Toon beveiligde tabs met een asterisk *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Tabs op meerdere regels" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up opent nieuwe tab in voorgrond" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Open nieuwe tabs naast huidige tab" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Toon tab sluitknop" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Map tabs headers" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "tekens" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Tabs positie" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nee" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Opdracht" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Opdracht" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Opdracht" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Kloon knop" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "Verwijder" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Bewerk" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "Voeg nieuwe knop in" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Ander..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Verwijder hotkey" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Platte knoppen" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapporteer fouten met opdrachten" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Verschijning" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Balk grootte:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Opdracht:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Help" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Hotkey:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Icoon:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Icoon grootte:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Opdracht:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parameters:" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start pad:" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Tooltip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "voor een externe opdracht" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "voor een interne opdracht" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "voor een scheidingsteken" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "voor een sub-gereedschapsbalk" #: tfrmoptionstoolbar.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbar.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Export..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Huidige gereedschapsbalk..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "aan een gereedschapsbalk bestand (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR bestand (behoud bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR bestand (wis bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "aan een \"wincmd.ini\" van TC (behoud bestaande)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "aan een \"wincmd.ini\" van TC (wis bestaande)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Bovenste gereedschapsbalk..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Opslaan backup gereedschapsbalk" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "aan een gereedschapsbalk bestand (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "aan een TC .BAR bestand (behoud bestaande)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "aan een TC .BAR bestand (wis bestaande)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "aan een \"wincmd.ini\" van TC (behoud bestaande)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "aan een \"wincmd.ini\" van TC (wis bestaande)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "net na huidige selectie" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Import..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Herstel een backup van gereedschapsbalk" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "toevoegen aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "van een gereedschapsbalk bestand (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "toevoegen aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "te vervangen \"bovenste gereedschapsbalk" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "van een enkele TC .BAR bestand" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe gereedschapsbalk aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen aan nieuwe gereedschapsbalk aan top gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "toe te voegen aan top gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "te vervangen \"bovenste gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "van \"wincmd.ini\" van TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "toe te voegen aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "toe te voegen aan nieuwe gereedschapsbalk aan huidige gereedschapsbalk" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "toe te voegen nieuwe gereedschapsbalk aan top gereedschapsbalk" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "toe te voegen aan top gereedschapsbalk" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "te vervangen top gereedschapsbalk" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "precies na huidige selectie" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "precies voor huidige selectie" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "precies na huidige selectie" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "juist voor huidige selectie" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "juist na huidige selectie" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "als eerste element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "als laatste element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "juist voor huidige selectie" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Knoptype" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Sommige functies om passend pad te selecteren" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Houd terminal-venster open na uitvoering programma" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Uitvoeren in terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Gebruik extern programma" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Extra parameters" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Pad naar uit te voeren programma" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Voeg toe" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Pas toe" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Verwijder" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Template..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Toon gereedschap tip" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Aangepaste velden per bestandstype" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Categorie hint:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Categorie masker:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Categorie naam:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Viewer boekmodus" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Voorbeeld" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "&Achtergrond in boek viewer" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Lettertypekleur in boek viewer" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Aantal kolommen in boek viewer" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configureer" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Bestanden inpakken" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Maak aparte archieven, één per geselecteerd bestand/dir" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Maak zelfuitpakkend archief" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Versleutel" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Verplaatst naar archief" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Meerdere disk archief" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Plaats in TAR archief eerst" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Ook padnamen toevoegen (alleen recursief)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Inpakken bestand(en) naar bestand:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Inpakker" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Sluit" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Alles uitpakken en uitvoeren" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Uitpakken en uitvoeren" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Eigenschappen van ingepakt bestand" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributen:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Comprimerings faktor:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Methode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Oorspronkelijke grootte:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Bestand:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Ingepakte grootte:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Inpakker:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tijd:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Sluit filter panel" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Geef zoektekst voor of filter op" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Grote/kleine letters gevoelig" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Directories" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Bestanden" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Begin van overeenkomst" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Einde van overeenkomst" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Wissel tussen zoeken of filteren" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Meer regels" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Minder regels" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Gebruik inhoud plug-in's, cobineer met:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plug-in" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Veld" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Waarde" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&EN (alle overeenkomsten)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OF (iedere overeenkomst)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annuleer" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Sluit" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Help" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecteer de in te voegen karakters:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Wijzig attributen" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archief" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Gemaakt:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Verborgen" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Bevaderd:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Gewijzigd:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Alleen-lezen" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Systeem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Tijdstempel eigenschappen" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributen" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributen" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Groep" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ander" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Eigenaar" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Representatie in tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Voer uit" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lbloctal.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octaal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lees" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schrijf" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Enige functies om juiste pad te kiezen" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Splitsen" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Benodigd een CRC32 verificatie bestand" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Bestandsnaam" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Bestandsgrootte" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Directory doel" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Bestandsbron" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Aantal onderdelen" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operating Systeem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Platform" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisie" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versie" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annuleer" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Maak symlink" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Bestaand doel (waar zal link naar wijzen)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Link naam" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Sluit" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Vergelijk" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchroniseer" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchroniseer" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymmetrisch" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "op inhoud" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "negeer datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "alleen geselecteerde" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Toon:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Naam" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Grootte" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Grootte" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Naam" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(in hoofdvenster)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Vergelijk" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Overzicht links" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Overzicht rechts" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicaten" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "enkele" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Druk \"Vergelijk\" om te starten" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchroniseer" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Bevestig overschrijven" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Voeg nieuw toe" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuleer" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Wijzig" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Standaard" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Verwijder" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Pas plug-in's aan" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "Detecteer archieftype door inhoud" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Kan bestanden vewijderen" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Ondersteund versleuteling" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Toon als normale bestanden (verberg inpak icoon)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Ondersteund inpakken in geheugen" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Kan bestaande archieven aanpassen" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "Archief kan meerder bestanden bevatten" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Kan nieuw archief aanmaken" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Ondersteund de opties dialogbox" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Toestaan zoeken tekst in archieven" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Omschrijving:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "Detecteer reeks karakters:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Extensie:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Vlaggen:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Naam:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Plug-in:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Plug-in:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Over Viewer..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Toont het Over-bericht" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopiëer bestand" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiëer bestand" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Verwijder bestand" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Verwijder bestand" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Volgend" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Laad volgend bestand" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "Vorig" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Laad vorig bestand" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Spiegel" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Spiegel" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Verplaats bestand" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Verplaats bestand" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Herlaad" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Herlaad huidig bestand" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Draai 180°" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Draai 180°" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Draai 270°" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Draai 270°" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Draai 90°" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Draai 90°" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Opslaan als..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Opslaan bestand als..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Passend maken" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strek afbeelding" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90°" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90°" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopiëer" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopiëer" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Crop" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Verwijder" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Verwijder" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Volledig scherm" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Highlight" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Spiegel" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Verplaats" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Verplaats" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Schilderen" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rode ogen" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Nieuwe grootte" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Ongedaan maken" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Inzoomen" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Uitzoomen" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Viewer" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diashow" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pen" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Highlight" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Schilderen" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diashow" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Overzicht" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180°" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90°" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90°" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Over" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Toon als &binair" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiëer naar klembord" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bewerken" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Coderen" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Einde" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "Bestand" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Volledig scherm" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Afbeeldingen" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Toon als &Hex" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Afbeelding" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Toon als boek" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Spiegel" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Plug-in's" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Voorafweergave" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Afdrukken..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Draaïen" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Opslaan" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Opslaan als..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Schermafdruk" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Zoek" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Zoek volgende" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Zoek vorige" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Passend maken" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Toon als &Tekst" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Overzicht" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Toon als &wrap tekst" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Inzoomen" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Uitzoomen" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiëer naar klembord" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecteer alles" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Stop" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Bestandshandelingen" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Altijd \"on-top\"" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Gebruik \"drag && drop\" om uitvoeringen tussen wachtrijen te verplaatsen" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Annuleer" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Annuleer" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nieuwe wachtrij" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Toon in losgekoppeld venster" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Plaats vooraan in wachtrij" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Plaats in laatste wachtrij" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Wachtrij" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Buiten wachtrij" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Wachtrij 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Wachtrij 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Wachtrij 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Wachtrij 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Wachtrij 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Toon in losgekoppeld venster" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pauzeer alles" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Als bestand bestaat" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Als bestand bestaat" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Werk op de achtergrond (aparte verbinding)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Als bestand bestaat" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annuleer snelfilter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuleer huidige uitvoering" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Geef bestandsnaam in, met extensie, voor te vallen tekst" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Te importeren tekstformaat" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Afgebroken:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Algemeen:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Onbreekt:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Leesfout:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Geslaagd:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Geef checksom in en selecteer algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifiëer checksom" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Totaal" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Plakbord bevat geen enkele geldige gereedschap data." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Naam" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Grootte" #: ulng.rsconfcolalign msgid "Align" msgstr "Uitlijnen" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Titel" #: ulng.rsconfcolconfig msgid "Config" msgstr "Config" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Verwijder" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Veld inhoud" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Verplaats" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Breedte" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Aanpassen kolom : " #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopiëer (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Geïmporteerde DC gereedschapsbalk" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Geïmporteerde DC gereedschapsbalk" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "Gevallen tekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "Gevallen HTML tekst" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "Gevallen rich tekst" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "Gevallen eenvoudige tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "Gevallen UnicodeUTF16 tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "Gevallen UnicodeUTF8 tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr "Toegevoegd:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Verwijderd:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Overeenkomend:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Gewijzigd:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Alle uitvoeringen voltooid" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Voortgang van alle uitvoeringen %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Afgebroken" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Alles" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Voeg to" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Auto-hernoem bronbestanden" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Annuleren" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Doorgaan" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopiëer in" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopiëer in alles" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Beëindig programma" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Negeer alles" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nee" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Geen" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Andere" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Overschrijf" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Overschrijf &alles'" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Overschrijf alle langere" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Overschrijf alle oudere" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Overschrijf alle kleinere" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Hernoem" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Hervat" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Opnieuw" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Overslaan" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Alles overslaan" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Bereken bestanden en mappen" #: ulng.rsdlgchecksumcalc #, fuzzy msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Bereken checksom..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verifiëer checksom..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopieer bestand(en)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Verwijder bestand(en)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Verplaats bestand(en)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauze" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Start" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Wachtrij" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Snelheid %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "Snelheid %s/s, tijd te gaan %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Splits bestand" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Wis bestand(en)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<geen label>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<geen media>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interne bewerker van Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ga naar regel" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Ga naar regel" #: ulng.rseditnewfile msgid "new.txt" msgstr "nieuwe.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Bestandsnaam:" #: ulng.rseditnewopen msgid "Open file" msgstr "Open bestand" #: ulng.rseditsearchback msgid "&Backward" msgstr "Achterwaards" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Zoek" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Voorwaarts" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Vervang" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Geëxporteerd uit DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Vraag;Overschrijf;Kopiëer in;Overslaan" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Vraag;Overschrijf;Overschrijf oudere;Overslaan" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Vraag;Niet meer instellen;Negeer fouten" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Bepaal template" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s niveau(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "alles (ongelimiteerde diepte)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "alleen huidige map" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Directory %s bestaat niet!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Gevonden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Opslaan zoek template" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Template naam:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Gescand: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Bezig met scannen" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Vind bestanden" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Begin op" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Vrij %s van %s bytes" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bytes vrij" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Toegang datum/tijd" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributen" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Commentaar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Gecomprimeerde grootte" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Aanmaak datum/tijd" #: ulng.rsfuncext msgid "Extension" msgstr "Extensie" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Groep" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link naar" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Wijziging datum/tijd" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Naam" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Naam zonder extensie" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Eigenaar" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pad" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Grootte" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Fout bij maken hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Sorry, niet gevonden bij importeren!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "Zeker weten om door te gaan?" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopiëer/Verplaats dialoog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Verschil" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Bewerk commentaar dialoog" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Bewerker" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Vind bestanden" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hoofd" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Viewer" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan referentie naar standaardbalk bestand niet vinden" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Linker klaar" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deselectie masker" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selectie masker" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Invoer masker:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configureer aangepaste kolommen" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configureer dit aangepaste kolomoverzicht" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acties" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Bewerk" #: ulng.rsmnueject msgid "Eject" msgstr "Werp uit" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Mount" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nieuw" #: ulng.rsmnunomedia msgid "No media available" msgstr "Geen media beschikbaar" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Openen" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Open met" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Ander..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sorteer op" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" msgid "Unmount" msgstr "Umount" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Overzicht" #: ulng.rsmsgaccount msgid "Account:" msgstr "Account" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Extra parameters voor inpakker opdrachtregel:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kan directory %s niet verwijderen" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Wijzigen dir naar [%s] mislukt!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle niet actieve tabs verwijderen?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Deze tab (%s) is geblokkeerd! Toch sluiten?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Zeker weten met verlaten?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Kopiëer %d geselecteerde bestanden/mappen?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopiëer geselecteerde \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Geef locatie en bestandsnaam in waar een DC gereedschapsbalk bestand op te slaan" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Verwijder het gedeeltelijk gekopiëerde bestand?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Verwijder %d geselecteerde bestanden/mappen?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Verwijder %d geselecteerde bestanden/directories naar prullenbak?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Verwijder geselecteerde \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Verwijder geselecteerde \"%s\" naar prullenbak?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan \"%s\" niet verwijderen naar prullenbak! Direct verwijderen?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk is niet voorhanden" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Opties betreffende muis drag && drop zijn gewijzigd. Opslaan voor beëindigen?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Geef bestand extentie:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Geen naam:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC fout in archief gegevens" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Gegevens zijn niet goed" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Kan niet verbinden met server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kan bestand %s niet kopiëren naar %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Er is al een directory genaamd \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s wordt niet ondersteund" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Directory %s bestaat!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Functie afgebroken door gebruiker" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Fout bij sluiten bestand" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan bestand niet aanmaken" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Geen bestanden meer in archief" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan bestaand bestand niet openen" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Fout bij lezen van bestand" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Fout bij schrijven naar bestand" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Kan directory %s niet aanmaken!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ongeldige link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Geen bestanden gevonden" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Niet genoeg geheugen" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Functie niet ondersteund" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fout in contextmenu opdracht" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fout bij laden configuratie" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntax fout in reguliere uitdrukking!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Kan bestand %s niet hernoemen in %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan associatie niet opslaan" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan bestand niet opslaan" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Kan attributen voor \"%s\" niet instellen" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kan datum/tijd voor \"%s\" niet instellen" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kan eigenaar/groep voor \"%s\" niet instellen" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer te klein" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Te veel bestanden om in te pakken" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Archief formaat onbekend" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(einde submenu)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Naam" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Menu naam" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(scheidingsteken)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Submenu naam" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Bestand %s gewijzigd, opslaan?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overschrijf:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Bestand %s bestaat, overschrijven?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Met bestand:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Bestand \"%s\" niet gevonden" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Bestandsuitvoeringen actief" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Sommige bestandsuitvoeringen zijn nog niet beëindigd. Afsluite Double Commander kan dataverlies veroorzaken." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Opties betreffende bestandsuitvoeringen zijn gewijzigd. Opslaan voor beëindigen?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Bestand %s is gemarkeerd als alleen-lezen. Verwijderen?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "De bestandsgrootte van \"%s\" is te groot voor doelbestand systeem!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Map %s bestaat, overschrijven?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Volg symlink \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Selecteer het te importeren tekstformaat" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Voeg toe %d geselecteerde directories" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Voeg toe geselecteerde directory" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Voeg toe huidige directory" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Doe opdracht" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuratie van directory hotlist" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Zeker weten om alle items van de directory hotlist te verwijderen? (er is geen\"undo\" voor deze actie!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dit zal de volgende opdracht uitvoeren:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Dit is hot directory genaamd" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dit zal het actieve frame wijzigen naar het volgende pad:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "En inactieve frame wilde wijzigen naar het volgende pad:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Fout bij backup items..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Fout bij exporteren items..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exporteer alles!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exporteer directory hotlist - Selecteer de te exporteren items" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exporteer geselecteerde" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importeer alles!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importeer directory hotlist - Selecteer de te importeren items\"" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importeer geselecteerde" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Pad" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Plaats te importeren \".hotlist\" bestand" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Directory hotlist is gewijzigd. Opslaan voor te beëindigen?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Hot onderverdeling naam" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Aantal nieuwe items\"%d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Niet geselecteerd om te exporteren!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Hot-onderverdeling pad" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Opnieuw toevoegen geselecteerde onderverdeling: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Opnieuw toevoegen huidige onderverdeling:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Geef locatie en bestand van onderverdeling hotlist om te herstellen in" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Opdracht" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(einde submenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Menu naam" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Naam:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(scheidingsteken)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Submenu naam" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Hot onderverdeling doel" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Bepaal of je wilt dat het actieve frame gesorteerd wordt op een opgegeven manier na wijziging onderverdeling" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Bepaal of je wilt dat het niet-actieve frame gesorteerd wordt op een opgegeven manier na wijziging onderverdeling\"" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Enige functies om geschikte pad te selecteren, relatief, absoluut, windows speciale mappen, etc." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Aantal alle opgeslagen items: %d\n" "\n" "Backupnaam: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Totaal items geëxporteerd:" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Geef locatie en bestandsnaam in waar een onderverdeling hotlijst op te slaan" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Onjuist resultaat bestandslengte voor bestand: \"%s\"" #: ulng.rsmsginsertnextdisk #, fuzzy,badformat #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Volgende disk of dergelijke inleggen.\n" "Opdat dit bestand kan worden geschrevenn: %d\n" "\"%s\"\n" "\n" "Aantal nog te schrijven Bytes: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fout in opdrachtregel" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ongeldige bestandsnaam" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ongeldig formaat van configuratiebestand" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ongeldig pad" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Pad %s bevat verboden karakters." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dit is geen geldige plug-in!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Deze plug-in is gemaakt voor Double Commander voor %s.%sHet werkt niet met Double Commander voor %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ongeldige aanhaling" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ongeldige selectie" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Eerst laden bestandslijst..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Lokaliseer TC configuratie bestand (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Lokaliseer TC uitvoerbaar bestand (totalcmd.exe of totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopiëer bestand %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Verwijder bestand %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fout: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Uitpkken bestand %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Maak link %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Maak onderverdeling %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Verplaats bestand %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Inpakken naar bestand %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Verwijder onderverdeling %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Klaar: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Maak symlink %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Test bestandsintegriteit %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Wis bestand %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Wis onderverdeling %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Master paswoord" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Geef het master paswoord in:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Verschillende opties zijn gewijzigd. Wil je opslaan voor te eindigen?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nieuw bestand" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "De volgende schijf zal worden uitgepakt" #: ulng.rsmsgnofiles msgid "No files" msgstr "Geen bestanden" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Geen bestanden geselecteerd" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Niet genoeg vrije ruimte op doelschijf, Doorgaan?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Niet genoeg vrije ruimte op doelschijf, Herhalen?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Kan bestand niet verwijderen %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Niet verwezenlijkt" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Paswoord:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Paswoorden zijn verschillend!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Geef het paswoord in:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Paswoord (firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Geef paswoord opnieuw in voor verificatie:" #: ulng.rsmsgpopuphotadd #, fuzzy,badformat msgid "&Add %s" msgstr "&Voeg toe" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configureer" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Verwijder %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voorinstelling \"%s\" bestaat reeds. Overschrijven?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Bestandsnaam voor vallen gelaten tekst:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Maak dit bestand beschikbaar. Opnieuw proberen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Verplaats/hernoem %d geselecteerde bestanden/mappen?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Verplaats/hernoem geselecteerde \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Herstart Double Commander om wijzigingen door te voeren" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Geselecteerd: %s van %s, bestanden: %d van %d, mappen: %d van %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Selecteer alleen checksom bestanden!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Selecteer locatie van volgende schijf" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Stel volume label in" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Speciale directories" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Voeg toe pad van actieve frame" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Voeg toe pad van actieve frame" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Blader en gebruik geselecteerde pad" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Gebruik omgevingsvariabele..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ga naar Double Commander speciale pad..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ga naar omgevingsvariabele..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ga naar andere Windows speciale map..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ga naar Windows speciale map (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Maak pad absoluut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Maak relatief naar Double Commander speciale pad..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Maak relatief naar omgevingsvariabele..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Maak relatief naar Windows speciale map (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Maak relatief naar andere Windows speciale map...\"" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Gebruik Double Commander speciale pad..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Gebruik andere Windows speciale map..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Gebruik Windows speciale map (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Hernoem tab" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nieuwe tabnaam:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Doelpad:" #: ulng.rsmsgtcconfignotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fout! Kan het TC-configuratiebestand niet vinden:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound #, fuzzy,badformat #| msgid "" #| "Error! Cannot find the TC configuration executable:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "Fout! Kan het bestand voor uitvoeren van TC-configuratie niet vinden:" #: ulng.rsmsgtcisrunning #, fuzzy #| msgid "" #| "Error! TC is still running but it should be closed for this operation.\n" #| "Close it and press OK or press CANCEL to abort.\n" msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Fout! TC loopt nog maar moet gesloten wordentijdens dit proces.\n" "TC sluiten en OK drukken of ANNULEER om af te breken.\n" #: ulng.rsmsgtctoolbarnotfound #, fuzzy,badformat #| msgid "" #| "Error! Cannot find the desired wanted TC toolbar output folder:\n" #| "%s\n" msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fout! Kan de gewenste benodigde TC gereedschapsbalk doelmap:\n" " niet vinden.\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Geef locatie en bestandsnaam in waar het TC gereedschapsbalk-bestand op te slaan" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Fout! Probleem met opslaan gereedschapsbalk!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Localiseer \".toolbar\" bestand om te importeren" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Localiseer \".BAR\" bestand om te importeren" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Gereedschapsbalk is gewijzigd. Opslaan om te eindigen?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Geef locatie en bestandsnaam in van gereedschapsbalk om te herstellen" #: ulng.rsmsgtoolbarsaved #, fuzzy #| msgid "" #| "Saved!\n" #| "Toolbar filename: %s\n" msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "Opgeslagen! Gereedschapbalk bestandsnaam\"%s" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Teveel bestanden geselecteerd" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Niet beslist" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Gebruikersnaam" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Gebruikersnaam (Firewall)" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Volume label:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Geef volume grootte in:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Wis %d geselecteerde bestanden/directories" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Wis geselecteerde \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Geem wijziging:HOOFDLETTERS;kleine letters;Eerste letter van ieder woord Groot;grote letters;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afgebroken" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Bezig met berekenen checksom" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Bezig met berekenen checksom in \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Bezig met berekenen checksom van \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Bezig met berekenen" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Bezig met berekenen \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Bezig met samenvoegen" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Bezig met samenvoegen bestanden in \"%s\" naar \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Bezig met kopiëren" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Bezig met kopiëren van \"%s\" naar \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Bezig met kopiëren \"%s\" naar \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Bezig met onderverdeling" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Bezig met onderverdeling \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Bezig met verwijderen" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Bezig met verwijderen in \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Bezig met verwijderen \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Bezig met uitvoeren" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Bezig met uitvoeren \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Bezig met uitpakken" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Bezig met van \"%s\" naar \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Klaar" #: ulng.rsoperlisting msgid "Listing" msgstr "Bezig met lijst maken" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Bezig met lijst maken \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Bezig met verplaatsen" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Bezig met verplaatsen van \"%s\" naar \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Bezig met verplaatsen \"%s\" naar \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Niet gestart" #: ulng.rsoperpacking msgid "Packing" msgstr "Bezig met inpakken" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Bezig met inpakken van \"%s\" naar \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Bezig met inpakken \"%s\" naar \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Gepauzeerd" #: ulng.rsoperpausing msgid "Pausing" msgstr "Bezig met pauzeren" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "In de wachtrij" #: ulng.rsoperrunning msgid "Running" msgstr "Bezig met starten" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Instelling eiegenschappen" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Instellen eigenschappen in \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Instellen eigenschappen van \"%s\"" #: ulng.rsopersplitting #, fuzzy,badformat #| msgid "SplittingSplitting \"%s\" to \"%s\"" msgid "Splitting" msgstr "Bezig met splitseBezig met splitsen \"%s\" naar \"%s\"" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "Bezig met starten" #: ulng.rsoperstopped msgid "Stopped" msgstr "Gestopt" #: ulng.rsoperstopping msgid "Stopping" msgstr "Bezig met stoppen" #: ulng.rsopertesting msgid "Testing" msgstr "Bezig met testen " #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Bezig met testen in \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Bezig met testen \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Bezig met verifiëren" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Bezig met verifiëren checksom in \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Bezig met verifiëren checksom van \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Wachtend op toegang tot bestandsbron" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Wachtend op gebruiker antwoord" #: ulng.rsoperwiping msgid "Wiping" msgstr "Bezig met wissen" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Bezig met wissen in \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Bezig met wissen \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Bezig met bezig" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Voeg toe aan begin;Voeg toe aan einde;Voeg slim toe" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Verwijder:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Uitpakken zonder pad:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Formaat ontledingsmodus:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID positie:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID zoekrange:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parameter" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Paswoord zoekopdracht string:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Maak zelf-uitpakkend archief:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Archieftype naam:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Waarde" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associëer plug-in \"%s\" met:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Eerst;Laatst" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassiek;Meegedeelde volgorde;Alfabetische volgorde (maar taal toch eerst)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Actieve framepanel op links\", inactieve op rechts (meegedeeld);Linker framepanel op links, rechter op recht" #: ulng.rsoptdisable msgid "Disable" msgstr "De-activeer" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Activeer" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Geef extentie" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Merk" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Merk + \"Curso" #: ulng.rsoptexampletext msgid "Text" msgstr "Tekst" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "apart venster;geminimaliseerd apart venster;uitvoeringspanel" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "Drijvend;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong #, fuzzy,badformat msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Shortcut voor cm_Delete zal geregistreerd worden, zodat het gebruikt kan worden om deze instelling om te keren." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Voeg toe hotkey voor %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Voeg toe shortcut" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kan shortcut niet instellen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Wijzig shortcut" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Opdracht" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Shortcut %s voor cm_Delete heeft een parameter dat deze instelling overruled. Wil je deze parameter wijzigen en de globale instelling gebruiken?" #: ulng.rsopthotkeysdeletetrashcanparameterexists #, fuzzy #| msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?Description" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Shortcut %s voor cm_Delete heeft nodig een parameter gewijzigd om met shortcut %s overeen te komen. Wil je dit wijzigenOmschrijving" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Bewerk hotkey voor %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Repareer parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Hotkey" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Hotkeys" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<geen>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parameters" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Instellen shortcut om bestand te verwijderen" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, fuzzy,badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Om met deze instelling te werken, moet deze toegewezen worden aan cm_Delete, maar het is reeds toegewezen aan %s. Wil je dit eijzigen? " #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Shortcut %s voor cm_Delete is een volgorde shortcut waarvoor een hotkey met omkeer Shift niet toegewezen kan worden. Deze instelling kan misschien niet werken" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Shortcut in gebruik" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Shortcut %s is reeds gebruikt" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Dit wijzigen naar %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "gebruikt voor %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "gebruikt voor deze opdrachtregel maar met verschillende parameters" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Inpakkers" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Auto-ververs" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Gedrag" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kort" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Kleuren" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Kolommen" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuratie" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Aangepaste kolommen" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Map hotlist" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag & drop" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drive-lijstknop" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Bestandsverwantschappen" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Bestandshandelingen" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Bestandspanelen" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Bestandsvoorbeelden" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Bestandstypes" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Maptabs" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Lettertypes" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Highlighters" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Hotkeys" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Iconen" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Negeerlijst" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Sleutels" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Taal" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Weergave" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Allerlei" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Muis" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plug-in's" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Snel zoeken" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Gereedschapsbalk" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Aanvullingen" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Gereedschappen" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Gereedschaptips" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Geen;Opdrachtregel;Snelzoeken;Snelfilter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Linkerknop;Rechterknop" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "bovenaan bestandslijst;na onderverdeling (indien directories zijn gesorteerd voor bestanden;op gesorteerde positie;onderaan bestandslijst" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plug-in %s is reeds toegewezen aan de volgende extensies:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actief" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Bestandsnaam" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Naam" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Geregistreerd voor" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Gevoelig;&Ongevoelig" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Bestanden;Directories;Bestanden en directories" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Verberg filterpanel indien niet in focus" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "niet grote/kleine gevoelig;overeenkomstig lokale instellingen(aAbBcC);eerst upper dan lower case (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sorteer op naam en toon eerst;toon als bestanden en toon eerst;sorteer als bestan den" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetisch, overweeg accenten;Natuurlijke sortering: alfabetisch en cijfers" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Boven;Onder" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Scheidingsteken;Interne opdracht;Externe opdracht;Menu" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC erfenis - Kopiëer (x) bestandsnaam.ext;Windows - bestandsnaam (x).ext;Ander - bestandsnaam (x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "wijzig plaats niet;gebruik dezelfde instelling als voor nieuwe bestanden;op gesorteerde plaats" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Bestanden: %d, mappen: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kan toegangsrechten voor \"%s\" niet wijzigen\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Kan eigenaar van \"%s\" niet wijzigen" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Bestand" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Directory" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Named pipe" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nee" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciaal blok apparaat" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciaal karakter apparaat" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolische link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Onbekend type" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ja (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Zoekresultaat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<naamloze template>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecteer een map" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Toon hulp voor %s" #: ulng.rssimplewordall #, fuzzy msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alles" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Opdracht" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Voorafweergave" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Bestanden: %d, Dirs: %d, Grootte: %s (%s, bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kan doelmap niet maken!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Onjuist bestandsgrootte formaat!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan bestand niet opsplitsen!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Het aantal delen is meer dan 100! Doorgaan?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Selecteer map:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Fout bij maken symlink." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standaard tekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Platte tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dag(en)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Uur/en" #: ulng.rstimeunitminute #, fuzzy #| msgid "Minute(s" msgid "Minute(s)" msgstr "Minuut/en" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Maand/en" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Seconde/n" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Week/en" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Jaar/en" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Verschil" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Bewerker" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fout bij openen verschil" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fout bij openen bewerker" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fout bij openen terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fout bij openen Viewer" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Viewer" #: ulng.rsunhandledexceptionmessage #, fuzzy,badformat msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapporteer deze fout aan de bug tracker met een omschrijving van wat je aan het doen was en het volgende bestand:%Druk %s om door te gaan of %s om het programma af te breken." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Netwerk" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interne Viewer van Double Commander" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Encodering" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s niet gevonden!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.ro.po������������������������������������������������������������0000644�0001750�0000144�00001202443�12666540554�017240� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Maximilian Machedon <maximilian.machedon@gmail.com>, 2015. msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-12-01 15:48+0300\n" "Last-Translator: Maximilian Machedon <maximilian.machedon@gmail.com>\n" "Language-Team: Maximilian Machedon\n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2);;\n" "X-Generator: Virtaal 0.7.1\n" "X-Native-Language: Română\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Se compară... %d%% (ESC pentru a renunța)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Fișiere găsite: %d (Identice: %d, Diferite: %d, Unice la stânga: %d, Unice la dreapta: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "De la Dreapta la Stânga: Copiază %d fișiere, dimensiune totală: %d octeți" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "De la Stânga la Dreapta: Copiază %d fișiere, mărime totală: %d octeți" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Toate" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configurează vizualizare coloane" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Fundal:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Margine cursor" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Permite Supra-culoare" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Folosește font și culoare personalizată" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Culoare text:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Font:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Mărime:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Fundal 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configurare număr vizualizare:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Culoare cursor:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Cursor text:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Culoare Marcaj:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nume:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Adaugă o coloană" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Personalizează coloană:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Previzualizează" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Alege șablon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Verifică spațiul liber (&h)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copiază atribute (&y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiază posesor (&w)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Copiază d&ată/timp" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corectează legături (&k)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Elimină eticheta doar citire (&g)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xclude directoarele goale" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Urmărește &legăturile" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Rezervă spațiu" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Ce să fac când nu se pot seta numele de fișier, atributele, etc." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Utilizează șablon" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Când dir&ectorul există" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Când &fișierul există" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Când &nu se poate seta proprietate" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<niciun șablon>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiază în clipboard" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Generează" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Pagină de pornire:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revizie" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versiune" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Resetează" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Alege atribute" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arhivează" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimat" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Director" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Criptat (&e)" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ascuns (&h)" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Doar citire (&n)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Rezervă (&p)" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Legătură &simbolică" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistem (&y)" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporar" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atribute NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atribute generale" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altele" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Ca te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calculează suma de control..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Deschide fișierul sumă de control după ce se termină activitatea" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&reează sume de control separate pentru fiecare fișier" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "&Salvează fișierul/fișierele sumă de control în:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifică sumă de control..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onectează" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestionar de conexiune" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Conectează la:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&daugă în Coadă" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pțiuni" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sal&vează aceste opțiuni ca implicite" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiază fișier(e)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Coadă nouă" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Coada 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Coada 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Coada 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Coada 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Coada 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Salvează descrierea" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentariu fișier/dosar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditează comentariu pentru:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codificar&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Auto compară" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Mod Binar" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Renunță" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiază Bloc la Dreapta" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiază Bloc la Dreapta" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiază Bloc la Stânga" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiază Bloc la Stânga" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refă" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selectează to&ate" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Anulează" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prima Diferență" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prima Diferență" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignoră majusculele" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignoră spații goale" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Păstrează Derularea" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Ultima Diferență" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Ultimele Diferențe" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferențe de Linie" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Următoarea Diferență" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Următoarea Diferență" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Deschide la Stânga..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Deschide la Dreapta..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pictează Fundalul" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Diferența Precedentă" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferența Precedentă" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Reîncarcă" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Reîncarcă" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Salvează" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Salvează" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Salvează ca..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Salvează ca..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Salvează la Stânga" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Salvează la Stânga" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Salvează la Stânga Ca..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Salvează la Stânga Ca..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Salvează la Dreapta" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Salvează la Dreapta" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Salvează la Dreapta Ca..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Salvează la Dreapta Ca..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Compară" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Compară" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificare" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificare" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Compară fișierele" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Stânga (&l)" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "D&reapta" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acțiuni" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opțiuni" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Adaugă scurtătură nouă secvenței" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Înlătură ultima scurtătură din secvență" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Doar pentru aceste controale" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (fiecare pe un rând separat):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Scurtături:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Despre" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configurare" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configurare" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiază" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Tăiere" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Șterge" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "Găsește (&f)" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Găsește" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Găsește următorul" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Găsește următorul" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Mergi la Linia..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Lipește" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refă ultima acțiune" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Refă ultima acțiune" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "Înlocui&re" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Înlocuire" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "SelectareTo&ate" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Selectează toate" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Anulează" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Anulează" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Închide" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Ieșire" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nou" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nou" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Deschide (&o)" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Deschide" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Salvează" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Salvare C&a.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Salvează Ca" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Sal&vează Toate" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Salvează Toate" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Deschide ca" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Salvează ca" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Evidențiere sintaxă" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Sfârșit de linie" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensibil la m&ajuscule" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Caută d&e la cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expresii ®ulate" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Doar &textul selectat" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Numai cuvinte întregi (&w)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opțiuni" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Înlocui&re cu:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Caută (&s) după:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direcție" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Despachetează fișiere" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "Despachetează n&umele de căi dacă sunt stocate cu fișierele" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Despachetează fiecare arhivă într-un subdosar &separat (nume de arhivă)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Suprascrie fișierele existente (&v)" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Spre &dosarul:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extrage fișierele ce se potrivesc măștii de fișier:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Parolă pentru fișiere criptate:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Adaugă" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Adaugă" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "În jos (&d)" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Înlătură (&v)" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Înlătură (&m)" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "R&edenumește" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "În s&us" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Asocieri de fișier" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Acțiuni" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensii" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Tipuri de fișier" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Iconiță" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Acțiune:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Comandă:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Editează" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Deschis în Editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Cale fișier" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Cale completă" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ia rezultatul comenzii" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Deschide" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Rulează în terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Deschide în VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vizualizează" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Deschide în Vizualizator" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Se așteaptă..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nume fișier:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Din:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Apăsați Închide când fișierele temporare pot fi șterse!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "La panou (&t)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vizualizează toate" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operațiunea curentă:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Din:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "La:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Setează proprietăți" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Sete&ază tuturor fișierelor selectate" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sari &peste acest fișier" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietăți" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altul" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conține:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nume:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Cale:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grup" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ultima accesare:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ultima modificare:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ultima schimbare de status:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Proprietar (&w)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mărime:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Legătură simbolică la:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tip:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietăți" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adaugă" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "Du-te la fișier (&g)" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "U<ima căutare" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Căutare &nouă" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Încarcă (&o)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "S&alvează" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sal&vează cu \"Pornește în director\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Dacă e salvat atunci \"Pornește în director\" va fi restaurat când se încarcă șablonul. Utilizați dacă doriți să fixați căutarea la un director anume" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "Pornește (&s)" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Revoc&are" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Utilizează șablonul" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Vizualizare" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Aprovizionează caseta cu &liste" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Găsește fișiere" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensibili&tate la majuscule" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data de la:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Data (&e) până la:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Măr&ime de la:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Mărime (&z) până la:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Găsește &text în fișier" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Urmează legăturile simbolice (&y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Găsește fișierele care NU c&onțin textul" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Nu mai vechi (&o) decât:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Caută după o parte din numele fișierului (&h)" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expresii ®ulate" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Înlocuiește (&p) cu" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Directoarele și &fișierele selectate" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "&Expresie regulată" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Timp de la:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ti&mp până la:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utilizează pluginul căutare:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Introduceți numele de directoare ce ar trebui excluse de la căutare separate cu \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Introduceți numele de directoare ce ar trebui excluse de la căutare separate cu \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introduceți numele de fișiere separate cu \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Directoare" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Fișiere" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Găsește Date" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&bute" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codificare (&g):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xclude subdirectoarele" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Exclude fișierele" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Mască &fișier" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Pornește în &dosarul" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Caută su&bdosarele:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Căutări &precedente:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Înlătură din listă" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Arată toate elementele găsite" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Arată în Vizualizator" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avansat" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Încarcă/Salvează" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Module" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Rezultate" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Găsește (&f)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Caută" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensibilitate la m&ajuscule" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Creează legătură dură" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinația spre care va duce legătura" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nume &legătură" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importă toate!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importă selectate" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Selectați elementele pe care doriți să le importați" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Când faceți click într-un sub-meniu, se va selecta întregul meniu" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Țineți apăsat CTRL și faceți click pentru a selecta multiple elemente" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Legător" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Salvează în..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nume &fișier" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "În jos (&w)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "În jos" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Şterge" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "În s&us" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "În sus" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Despre (&a)" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Adaugă numele de fișiere liniei de comandă" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Adaugă cale și nume de fișier liniei de comandă" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiază calea la linia de comandă" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Pe scurt" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vizualizare pe Scurt" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calculează spațiul &ocupat" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Schimbă directorul" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Schimbă directorul la acasă" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Schimbă Directorul la Părinte" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Schimbă directorul la rădăcină" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calculează &suma de control..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verificare sumă de control..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Curăță fișierul jurnal" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Golește fereastra de jurnal" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Închide to&ate Filele" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "În&chide fila" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Următoarea Linie de Comandă" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Setează linia de comandă la comanda următoare în istoric" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Linia de Comandă Precedentă" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Setează linia de comandă la comanda precedentă în istoric" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Plin" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vizualizare Coloane" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Compară după &Conținut" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "&Compară Dosare" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Compară Dosarele" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Arată meniul contextual" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiază" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copiază toate &coloanele afișate" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Co&piază numele de fișier(e) cu căi complete" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiază numele de &fișier(e) în Clipboard" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiază fișierele fără a cere confirmarea" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiază în același panou" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiază" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Afișează Spațiu Ocupat (&w)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Taie" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Istoricul dosarelor" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Listă dosare (&h)" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editează" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editează Co&mentariu..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editează un fișier nou" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editează calea deasupra fișierului listă" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Comută &Panourile" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "D&ezarhivare fișiere..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "&Asocieri fișiere..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binare Fișiere..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Arată Proprietățile &Fișierului" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Desparte F&ișierul..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vizualizare plată (&f)" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Evidențiază linia de comandă" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Pune cursorul pe primul fișier din listă" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Pune cursorul pe ultimul fișier din listă" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Creează Legătură (&h) Dură..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Conținut" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Mod Panou Orizontal (&h)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Tastatură (&k)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Stânga &= Dreapta" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Deschide lista discului din stânga" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Încarcă Selecția din Clip&board" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Încarcă Se&lecția din Fișier..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Încarcă fi&le din fișier" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Creează &dosar" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selectează Toate cu aceeași E&xtensie" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inversare Selecție" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selectează Toate" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Deselectează un Gr&up..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Selectează un &Grup..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Deselectează Tot&ul" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizează fereastra" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Unealtă &Redenumire Multiplă" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Conexiune Rețea..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Deconectare Rețea" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Conexiunea Rapidă (&q) Rețea..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Filă &Nouă" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Schimbă la Fila Urmă&toare" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Deschide" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Încearcă deschiderea arhivei" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Deschide fișier bară" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Deschide Dosarul într-o &Filă Nouă" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Deschide Listă &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vizualizator de Operații" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opțiuni..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Îm&pachetează Fișierele..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Determină poziția separatorului" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Li&pește" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Comută la Fila &precedentă" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtru rapid" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Căutare rapidă" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panou Vizualizare Rapidă (&q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Reîmprospătează" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mută" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mută/Redenumește fișierele fără a cere confirmare" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Redenumește" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Redenumește Fila" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurează Selecția" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "In&versează Ordinea" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Dreapta &= Stânga" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Deschide lista discului din dreapta" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Rulează &Terminalul" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sal&vează Selecția" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Salvează S&elecția în Fișierul..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Salvează file în fișier" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Caută (&s)..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Schimbă &Atributele..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloca&t cu Dosarele Deschise în File Noi" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&locat" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Blocat cu Schimbările &Dosarului Permise" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Deschide" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Deschide utilizând asocierile de sistem" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Arată meniul butonului" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Arată istoricul liniei de comandă" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Meniu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Arată Fișierele (&h) Ascunse/Sistem" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortează după &Atribute" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sortează după &Dată" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortează după &Extensie" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortează după &Nume" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "&Sortează după Mărime" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Activează/dezactivează ca fișierul conținând lista de ignorați să arate numele de fișier" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Creează &Legătură Simbolică..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Se sincronizează dosarele..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Țintă &= Sursă" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Testează Arhivă/Arhive" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturi" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vizualizare în miniatură" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Comută modul ecran complet al consolei" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferă dosarul de sub cursor spre fereastra din stânga" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferă dosarul de sub cursor spre fereastra din dreapta" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselectează Toate cu Aceeași Ex&tensie" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Vizualizează" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Arată istoricul căilor vizitate pentru zona activă" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Du-te la următoarea intrare în istoric" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Du-te la intrarea precedentă în istoric" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Vizitați Situl Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Ștergere definitivă" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Ieșire" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Dosar" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Listă dosare" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Arată dosarul curent pentru panoul din dreapta în panoul din stânga" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Mergi la dosarul acasă" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Mergi în dosarul rădăcină" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Mergi în dosarul părinte" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Listă dosare" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Arată dosarul curent pentru panoul din stânga în panoul din dreapta" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Cale" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiază..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Creează o legătură..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Golește" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ascunde" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selectează Toate" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mută..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Creează legătură simbolică..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opțiuni filă" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Restaurează" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Pornește" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Renunță" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comenzi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfigurare" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Fișiere" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marchează" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rețea" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Arată (&s)" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opțiuni" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "File (&t)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiază" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Taie" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Șterge" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editează" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Lipește" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Revo&care" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ajutor" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Taste rapide" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definește..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Sau selectează tip selecție p&redefinit:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Creează dosar nou" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Introduceți numele noului dosar:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Dimensiune nouă" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Înălțime :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Calitatea compresiei JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Lățime :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Înălțime" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Lățime" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Încarcă (&l)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Redenumește" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Resetează to&ate" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Salvează" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "RedenumireMultiplă" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Activare (&b)" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpresii regulate" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Utilizează substituție" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Extensie" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contor" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Găsește și Înlocuiește" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Jurnal Rezultate" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Mască" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Presetări" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extensie" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Găsește (&f)..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Numele Fișierului" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Înlocuiește (&p)..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Numărul de s&tart" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Lățime (&w)" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Countor" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Zi" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Zi (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Zi a săptămânii (scurt, ex., \"mar\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Zi a săptămânii (lung, ex., \"marți\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Caracter la poziția x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caractere de la poziția x la y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Oră" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Oră (2 cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Lună" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Lună (2 cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Mule lună (scurt, ex., \"ian\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nume lună (lung, ex., \"ianuarie\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nume" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Caracter la poziția x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caractere de la poziția x la y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Timpu..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensie..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nume..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Modul" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Secundă" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Secundă (2 cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] An (2 cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] An (4 cifre)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Vechiul Nume de Fișier" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Noul Nume de Fișier" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Calea Fișierului" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Alege o aplicație" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comandă personalizată" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Salvează asociere" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Setează aplicația selectată ca acțiune implicită" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Tipul de fișier ce va fi deschis: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Multiple nume de fișier" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI-uri Multiple" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nume de fișier unic" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI Singular" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplică" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opțiuni" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Selectați una din subpagini, această pagină nu conține setări." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Configurare A&utomată" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Șt&erge" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Redenumește" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Mod depanare (&b)" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Activat (&n)" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Arată ieșire consolă (&h)" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opţiuni" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Se adaugă (&i):" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "E&xtensie:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Ex&trage:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Listă:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "&Finalizarea listării (opțional):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "For&matul listării:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Pornirea listării (&g opțional):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Ar&hivator:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "De&scriere:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adițional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Când mărimea, data sau atributele se &schimbă" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pentru căile următoare și subdosarele lor:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Când &fișierele sunt create, șterse sau redenumite" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Când aplicația e în fundal (&b)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Dezactivează auto-împrospătarea" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Împrospătează lista de fișiere" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Arată întotdeauna iconița de notificare (&w)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Ascunde automat dispozitivele demontate (&h)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mută iconița în zona de notificare când se minimizează (&v)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Permite o singură copie DC &la un moment dat" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aici puteți introduce unul sau mai multe dispozitive sau puncte de montare, separate prin \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Dispozitive interzise (&b)" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Mărimea coloanelor" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Arată extensiile fișierelor" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "aliniate (&g cu Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "imediat după numele fișie&rului" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Auto" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Numărul coloanelor fixe" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Lățimea coloanelor fixe" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Taie &textul la mărimea coloanei" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linii orizontale (&h)" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linii &verticale" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Umple a&utomat coloanele" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Arată grila" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Mărime automată coloane" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Mărime automată coloană (&z):" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Istoricul liniei de co&mandă" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Istoricul &dosarului" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Istoricul măștii &fișierului" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sal&vează configurația" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Istoricul (&h) Caută/Înlocuiește" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Locația fișierelor de configurare" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Salvați la ieșire" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Ordinea de sortare a ordinii de configurare în arborele stâng" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Setează în linia de comandă" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Dosarul p&rogramului (versiunea portabilă)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Dosarul acasă al &utilizatorului" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Toate" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nou" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Salvează ca" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Salvează" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permite Supraculoare" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generale" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Margine cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fundal:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fundal 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Con&figurează coloane pentru sistemul de fișiere:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Culoare cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Cursor text:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Mărime:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Culoare text:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Culoare Marcaj:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Adaugă o coloană" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Poziția panoului cadru după comparare:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Adaugă..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Copie de rezervă..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Șterge..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Ajutor" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Inserează..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Diverse..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Unele funcții pentru a selecta ținta potrivită" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Sortează..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Când se adaugă un dosar, adaugă și ținta" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Extinde întotdeauna arborele" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Arată numai variabilele de mediu valide" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "Arată [și calea] în popup" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nume, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nume, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista de dosare (reordonează cu glisare și fixare)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Alte opțiuni" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nume:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Cale:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Țintă:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "dosarul cadrului activ" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "dosarele cadrelor active și inactive" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "o comandă" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Adaugă o comandă" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "o copie a elementului selectat" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Adaugă o copie a elementului selectat" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "un separator" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Adaugă un separator" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-meniu" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Adaugă sub-meniu" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "dosarul la care voi naviga" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Restrânge toate" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...numai nivelul curent al intrării/intrărilor selectat(e)" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "dosarele selectate în mod curent sau active în cadrul activ" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Tăiere" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "șterge toate!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-meniul și toate elementele sale" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "doar sub-meniul dar păstrează elementele" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "elementul selectat" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Șterge elementul selectat" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Scanează toată calea dosarului pentru a le valida pe cele care chiar există" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Scanează toată calea dosarului și a țintei pentru a le valida pe cele care chiar există" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "către o un fișier listare dosar (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Mergi la configurarea informațiilor legate de TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Mergi la configurarea informațiilor legate de TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirTestMenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "dintr-un fișier listare dosar (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "din \"wincmd.ini\" al TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Deschide toate ramurile" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Lipește" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Restaurează o copie de rezervă a listării dosarului" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Salvează o copie de rezervă a listării dosarului curentă" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Caută și înlocuiește..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "în calea..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "în calea țintă..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "în cale și în calea țintă..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...totul, de la A la Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...numai un grup de elemente" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortează un singur grup de elemente" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...conținutul submeniului/submeniurilor selectate, fără sub-nivel" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...conținutul submeniului/submeniurilor și tuturor sub-nivelurilor" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Testează meniul ce rezultă" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "dosarul pe care îl voi tasta" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Adaugă dosarul pe care îl voi tasta" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Inserează dosarul pe care îl voi tasta" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Adăugare din cadrul principal:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Dintre toate formatele acceptate, întreabă de fiecare dată care să fie folosit" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Când se salvează text Unicode, salvează-l în format UTF8 (altfel va fi UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Când se glisează și fixează text, generează automat un nume de fișier (altfel utilizatorul va fi întrebat)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Arată fereastra de confirmare după renunțare" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Când se glisează și fixează text în cadre:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Plasează formatul cel mai dorit în capul listei (folosește glisare și fixare):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(dacă cel mai dorit nu este prezent, îl vom folosi pe cel de-al doilea și așa mai departe)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(nu va funcționa cu unele aplicații sură, așa că încercați să debifați dacă apar probleme)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Arată sistem de &fișiere" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Arată spațiu lib&er" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Arată etichetă (&l)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Listă dispozitive" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Fundal (&k)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Fundal (&k)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Resetează" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Salvează" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atribute Element" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "P&rim plan" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "P&rim plan" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marcaj &text" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Utilizează (și editează) schemă de setări &globală" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Utilizează schemă de setări &locală" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Îngroșat (&b)" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Curs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Tăiat (&s)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Por&nit" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "S&ubliniere" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&versează" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Oprit (&f)" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Por&nit" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Adaugă..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Șterge..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Inserează..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortează..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Extinde întotdeauna arborele" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nu" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Alte opțiuni" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-meniu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Adaugă sub-meniu" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Restrânge toate" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...numai nivelul curent al intrării/intrărilor selectat(e)" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Taie" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "șterge toate!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-meniul și toate elementele sale" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "doar sub-meniul dar păstrează elementele" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "elementul selectat" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Șterge elementul selectat" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Deschide toate ramurile" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Lipește" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Redenumește" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...totul, de la A la Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...numai un grup de elemente" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortează un singur grup de elemente" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...conținutul submeniului/submeniurilor selectate, fără sub-nivel" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...conținutul submeniului/submeniurilor și tuturor sub-nivelurilor" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Testează meniul ce rezultă" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Adaugă" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Adaugă" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "În jos (&d)" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Editează" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Înlătură (&v)" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Înlătură (&m)" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&edenumește" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "În s&us" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Actiuni" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensii" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipuri de fișier" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Iconiță" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Acțiune:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Comandă:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametri(&s):" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Cale de pornire (&h):" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editează" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Deschis în Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ia rezultatul comenzii" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Deschide" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Rulează în terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Vizualizează" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Deschide în Vizualizator" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Arată fereastra de confirmare pentru:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operație de copiere (&y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operație de ștergere (&d)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Ș&terge la coș (Tasta Shift inversează această setare)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operație de șt&ergere la coș" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Elimină eticheta doar citi&re" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operație de &mutare" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Caută (&s) după parte din numele fișierului" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Procesează comentariile cu fișiere/dosare" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Selectează numele de &fișier fără extensie la redenumire" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Arată panoul de selecție al filei în fereastra de dialog (&w)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Sari peste erorile din operațiile cu fișiere și scrie-le în fereastra jurnal (&k)" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Operații în executare" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Căutare de fișiere" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfața cu utilizatorul" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Mărime tampon pentru operațiile cu fișiere (în K&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Afișează progresul operațiilor &inițial în" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Stilul de auto-redenumire a numelor duplicate:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Număr de treceri pentru ștergere definitivă:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Utilizează maparea memoriei pentru căutarea te&xtului în fișiere" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Utilizează fluxarea pentru căutarea textului în fișiere" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permite Supraculoare" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Utilizează Cursor Cadru (&f)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Utilizează Indicator colorat &gradat" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Utilizează &Selecție Inversată" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Margine cursor" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicator de Spațiu Liber pe Disc" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fundal (&k):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Fundal 2 (&k):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Culoare C&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xt Cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Nivelul de strălucire al panoului inactiv (&b)" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Culoarea de fundal a in&dicatorului:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Culoarea de prim plan a &Indicatorului:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Culoare &Marcaj:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Culoare T&ext:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Nu încărca lista de fișiere până când o filă este activă" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Arată paranteze pătrate în jurul dosarelor (&h)" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Evidențiază fișiere noi și actualizate (&g)" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Activează &redenumirea când se face click de două ori pe un nume" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Încarcă lista de &fișiere într-un fir de execuție separat" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Încarcă iconițele după lis&ta de fișiere" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Arată fișierele ascunse și de sistem (&y)" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Când (&w) se selectează fișiere cu <SPACEBAR>, mergi în jos la următorul fișier (ca și cu <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatare" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Sortare" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensibilitate majuscule:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorect" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Format &dată și timp:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format mărime fișier (&z):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Inserează fișiere noi" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "So&rtarea dosarelor:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Metodă &sortare:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Mută fișierele actualizate" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Șt&erge" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Șablon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Culori tipuri de fișiere (sortează după trage și plasează)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tribute categorie:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Cu&loare categorie:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Mască categorie:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nume categorie:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Fontul &consolei" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Font &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Font jurna&l" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fontul principal" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Font Vizualizator de Carte (&b)" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Font &vizualizator" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Adaugă tastă rapidă (&h)" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Șterge tastă rapi&dă" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Editează tastă rapidă" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtru" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorii:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&menzi:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fișiere &scurtătură:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comandă" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Taste rapide" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descriere" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Tastă rapidă" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Controale" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Pentru căile următoare și subdirectoarele lor:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Arată iconițe pentru acțiuni în &meniuri" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Arată iconițe suprapuse, de exemplu pentru legături (&v)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Dezactivează iconițele speciale" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Iconițe în meniuri" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Mărime iconiță " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Arată iconițe la dreapta numelui de fișier " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Toate (&l)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Toate asociate + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Fără ico&nițe" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Doar iconițe &standard" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "A&daugă numele selectate" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Adaugă numele selectate cu calea completă (&f)" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoră (nu arăta) fișierele și dosarele următoare:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Salvează în:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Săgețile Stânga, Dreapta schimbă dosarul (&f mișcare ca în Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tastare" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Lit&ere" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Li&tere" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Litere" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Butoane plate (&f)" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "I&nterfață plată" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "B&utoane plate" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Afișează indicatorul de spațiu lib&er în eticheta discului" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Afișează fereastra jurnalului (&g)" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Afișează panoul de operații în fundal" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Afișează progresul bara de meniuri" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Arată l&inia de comandă" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Arată dosarul curent (&y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Arată butoanele &discului" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Arată eticheta s&pațiului liber" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Arată bu&tonul listei cu dispozitive" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Arată butoanele funcției cheie (&k)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Afișează &meniul principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Arată bara de &butoane" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Afișează eticheta spațiului &liber" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Arată bara de &stare" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Arată antetul tabstop (&h)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Arată filele dosarelor (&w)" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Arată fereastra te&rminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Arată barele cu butoane de două discuri (lățime fi&xă, deasupra ferestrelor de fișiere)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Aranjament ecran " #: tfrmoptionslog.btnrelativelogfile.hint #, fuzzy msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Îm&pachetează/Despachetează" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Copiază/Mută/Creează legătură/legătură simbolică (&y)" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Creează/Ș&terge dosarele" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Jurnalizează &erorile" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&reează un fișier jurnal:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Jurnalizează mesajele de &informare" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Jurnalizează operațiile cu &succes" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Module sistem de &fișiere" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Jurnalul operațiilor cu fișiere" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Jurnalizează operații" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Starea operației" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint #, fuzzy msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint #, fuzzy msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint #, fuzzy msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Ște&rge miniaturile pentru fișierele inexistente" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Mer&gi întotdeauna la rădăcina discului când schimbi dispozitivele" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Arată mesaje de avertizare (&w doar butonul \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Salvează miniaturile în cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturi" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixeli" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Dimensiune minia&tură:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selecție cu mausul" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Derulare" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecție" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Mod:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linie cu linie" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linie cu linie cu mișcarea cursorului (&w)" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagină cu pagină" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Con&figurează" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Activare (&n)" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Ajus&tare" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Modulele de căutare permit utilizarea algoritmilor alternativi sau a uneltelor externe (&h precum \"locate\", etc.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Module pack&er sunt utilizate pentru a lucra cu arhivele" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Modulele de conținut permit afișarea extinsă a detaliilor fișierelor, precum etichete mp3 sau atributele ima&ginii în listele de fișiere, sau utilizarea lor în căutare sau în unealta de redenumire multiplă" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Modulele pentru fișiere&le de sistem permit accesul la discurile inaccesibile prin sistemul de operare sau la dispozitive externe precum Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Modulele de vizualizare (&w) permit afișarea formatelor de fișier cum ar fi imagini, foi de calcul, baze de date etc. în Vizualizator (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Activ" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Modul" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Înregistrat pentru" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Module (&s) de căutare (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Module Pac&ker (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Mod&ule Conținut (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Module sistem de f&ișiere (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Module &Vizualizator (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "Început (numele tre&buie să înceapă cu primul caracter introdus)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Sfârșit (ultimul caracter înainte de punct . trebuie să coinci&dă)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opțiuni" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Potrivire exactă de nume" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Căutare" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Caută după aceste elemente" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activează &panoul țintă când se face clic pe una din filele sale" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Arată antetul filei când există o &singură filă" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firmă închiderea tuturor filelor" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitează mărimea titlului filei la" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Arată (&w) filele blocate cu asterisc *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "File pe mai multe linii (&t)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up deschide o filă nouă în prim plan" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Deschide o filă &nouă în fila curentă" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Arată &butonul închiderii filei" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Antetele filelor dosarului" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caractere" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Poziția filelor (&b)" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nu" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Buton de c&lonare" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "Șterge (&d)" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editează tastă rapidă (&k)" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserează un buton nou" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Altul..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Înlătură tastă rapidă (&y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Butoane plate (&f)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Introduceți parametri de comandă, fiecare pe o linie separată. Apăsați F1 pentru a primi ajutor la parametri." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aspect" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensiune &bară:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&dă:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametri(&s):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ajutor" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Tastă rapidă:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&niță:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Mărime iconiță (&z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mandă:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Cale de pornire (&h):" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Indiciu (&t):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Copie de rezervă..." #: tfrmoptionstoolbar.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportă..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "către un \"wincmd.ini\" al TC (păstrează pe cel existent)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "către un \"wincmd.ini\" al TC (șterge pe cel existent)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importă..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Caută și înlocuiește..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tip de buton" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Păstrează fereastra terminal deschisă după execuția programului (&k)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Execută în terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Utilizează un program extern" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parametri a&diționali" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Calea spre &programul de executat" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "A&daugă" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "A&plică" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Șt&erge" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Șablon..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Arată indiciu" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Câmpuri personalizate pe tip de fișier" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Indiciu categorie (&h):" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Mască categorie:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Nume categorie:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Mod Vizualizare Carte" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemplu" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Culoare fundal în vizualizatorul de cărți (&b)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Culoarea &fontului în vizualizatorul de cărți" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Număr de coloane în vizualizatorul de cărți" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurează" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Împachetează fișiere" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "C&reează arhive separate, una per fișierul/dosarul selectat" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Creează o arhivă cu e&xtracție autonomă" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Criptează (&y)" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mută în arhi&vă" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Arhivă &multi disc" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "P&une mai întâi în arhiva TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Îm&pachetează și numele căii (doar recursiv)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Împachetează fișierul/fișierele în fișierul:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Programe de împachetat" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Despachetează to&ate și execută" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Despachetează și exec&ută" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Proprietățile fișierului împachetat" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atribute:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Rată de compresie:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dată:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metodă:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Dimensiunea originală:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fișier:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Mărime împachetată:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Programe de împachetat:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Timp:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Închide filtrul panoului" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Introduceți textul de căutat sau filtrul" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensibil la Majuscule" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Dosare" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fișiere" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Potrivește inceputul" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Potrivește sfârșitul" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtru" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Comută între căutare și filtru" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Modul" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valoare" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Renunţă" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "În&chide" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Ajutor (&h)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selectați caracterele pentru inserție:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Schimbă atributele" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Persistent" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arhivă" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creat:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Ascuns" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accesat:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modificat:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Doar citire" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Include subdosarele" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistem" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Proprietăți timestamp" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atribute" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biți:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(câmpul gri semnifică valori neschimbate)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altele" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietar" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execută" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(câmpul gri semnifică valori neschimbate)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Citește" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrie" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint #, fuzzy msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Unele funcții pentru a selecta calea potrivită" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Separator" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nume fișier" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Mărime și număr de părți" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Țin&tă dosar" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "&Sursă fișier" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Număr de părți" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "Octeți (&b)" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigaocteți" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kiloocteți" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megaocteți" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Generează" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revizie" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versiune" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Creează legătură simbolică" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinația spre care va duce legătura" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nume &legătură" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Închide" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Compară" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizează" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizează dosarele" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asimetric" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "după conținut" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignoră data" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "doar selectate" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Subdosare" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Arată:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Nume" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Mărime" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Dată" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Dată" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Mărime" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Nume" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(în fereastra principală)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Compară" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicate" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "singure" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Apăsați \"Compară\" pentru a începe" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Sincronizează" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmă suprascrierile" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&daugă nou" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Revo&care" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Sc&himbă" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Implicit (&f)" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Înlătu&ră" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Modul de ajustare" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tectează tipul arhivei după conținut" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Se pot ș&terge dosarele" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Suportă criptare (&n)" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Arată ca fișiere normale (arată iconița programului de împachetat (&w)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Suportă împachetarea în memorie (&k)" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Poate &modifica arhivele existente" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Arhiva poate conține fișiere multiple" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Poate crea arhi&ve noi" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&uportă fereastra cu opțiuni" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permite căutarea după text în arhive (&g)" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descriere:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etectează șir:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensie:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Fanioane:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nume:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Modul (&p):" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Modul (&p):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Despre Vizualizator..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Afișează mesajul despre" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiază fișier" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiază fișier" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Șterge fișierul" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Șterge fișierul" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Î&nainte" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Încarcă Fișierul Următor" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Precedent" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Încarcă Fișierul Precedent" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Oglindă" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Oglindă" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mută fișier" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mută fișier" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Reîncarcă" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Reîncarcă fișierul curent" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Rotește 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Rotește 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Rotește 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Rotește 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Rotește 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Rotește 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Salvează ca..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Salvare Fișier Ca..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Extinde" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Extinde Imaginea" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copiază" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copiază" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Decupează" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Șterge" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Șterge" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ecran complet" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidențiază" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Oglindire" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Mută" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Mută" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Desenează" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ochi roșii" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionează" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Anulează" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Mărește" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Micșorează" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Vizualizator" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentare" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stilou" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Evidențiază" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Desenează" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Prezentare" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Vizualizează" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Despre" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Arată ca &Bin" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copiază în Clipboard" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editează" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificare" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Ieșire (&x)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fișier" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Ecran complet" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafică" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Arată ca &Hex" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagine" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Arată ca și Carte (&o)" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Oglindă" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Module" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Previzualizează" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Imprimare..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rotește" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Salvează" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Salvează ca..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captură ecran" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Caută" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Caută următorul" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Previzualizarea căutării" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Selectează toate" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Extinde" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Arată ca &Text" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vizualizează" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Arată ca text &Wrap" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Mărește" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Micșorează" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copiază în Clipboard" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selectează Toate" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "S&top" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Operații cu fișiere" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Întotdeauna în față" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Utilizează \"trage și plasează\" pentru a muta operațiile între cozi" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Renunţă" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Renunţă" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Coadă nouă" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Afișează în fereastră separată" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Pune primul în coadă" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Pune ultimul în coadă" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Coadă" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "În afara cozii" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Coada 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Coada 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Coada 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Coada 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Coada 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Afișează în fereastră separată" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pauză pentru tot" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Lucrează în fundal (conexiune separată)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Când fișierul există" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Anulează Filtrul Rapid" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Anulează Operațiunea Curentă" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Deteriorat:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "General:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Lipsă:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Eroare de citire:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Succes:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Introduceți suma de control și selectați algoritmul:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifică sumă de control" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Clipboard-ul nu conține date valide." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dată" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nume" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Mărime" #: ulng.rsconfcolalign msgid "Align" msgstr "Aliniază" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Legendă" #: ulng.rsconfcolconfig msgid "Config" msgstr "Configurează" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Șterge" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Conținutul câmpului" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mută" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Lățime" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizează coloană" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copiază (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Toate operațiile au fost încheiate" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progresul tuturor operațiilor %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Renunță (&b)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Toate (&l)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Adaugă (&p)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto redenumește fișierele sursă" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Revo&care" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuă" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Cop&iază la" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copiază to&ate la" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Părăsește programul (&x)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnoră toate" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nu" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Niciuna (&e)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Altele (&h)" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Suprascrie (&o)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Suprascrie To&ate" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Suprascrie Toate Mai Mari (&l)" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Suprascrie Toate Mai Vechi (&d)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Suprascrie Toate Mai &Mici" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "R&edenumește" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Reia" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Reîncearcă (&t)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Sari" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Sari peste toate (&k)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "Da (&y)" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calculează fișierele și dosarele" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calculează suma de control..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verifică suma de control..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiază fișier(e)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Șterge fișier(e)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mută fișier(e)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pauză (&s)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Pornește (&s)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Coadă" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Viteză %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Viteză %s/s, timp rămas %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Împarte" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Șterge definitiv fișier(e)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<fără etichetă>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<fără disc>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editorul Intern al Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Mergi la linia:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Mergi la Linia" #: ulng.rseditnewfile msgid "new.txt" msgstr "nou.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Numele fișierului:" #: ulng.rseditnewopen msgid "Open file" msgstr "Deschide fișierul" #: ulng.rseditsearchback msgid "&Backward" msgstr "Înapoi (&b)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Caută" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Înainte (&f)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Înlocuiește" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Întreabă;Suprascrie;Copiază la;Sari" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Întreabă;Suprascrie;Suprascrie mai vechi;Sari" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Întreabă;Nu mai seta;Ignoră erorile" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTER" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definește șablonull" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s nivel(uri)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "toate (adâncime nelimitată)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "numai dosarul curent" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Dosarul %s nu există!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Găsit: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Salvează șablonul căutării" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Numele șablonului:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Scanat: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Se scanează" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Găsește fișiere" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Începi la" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Liber %s din %s octeți" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s octeți liberi" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Accesează dată/timp" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atribute" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentariu" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Mărime comprimată" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/timpul creării" #: ulng.rsfuncext msgid "Extension" msgstr "Extensie" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Leagă la" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/timpul modificării" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nume" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nume fișier fără extensie" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietar" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Cale" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Mărime" #: ulng.rsfunctype msgid "Type" msgstr "Tip" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Eroare la crearea legăturii dure." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Fereastră de Copiere/Mutare" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Comparator" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Găsește fișiere" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Vizualizator" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Legător finalizat" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deselectează masca" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selectează masca" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Introduceți masca:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurează coloane personalizate" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configurează această coloană personalizată" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Actiuni" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editează" #: ulng.rsmnueject msgid "Eject" msgstr "Scoate" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Montează" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nou" #: ulng.rsmnunomedia msgid "No media available" msgstr "Niciun dispozitiv disponibil" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Deschide" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Deschide cu" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Altul..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortează după" #: ulng.rsmnuumount msgid "Unmount" msgstr "Demontează" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vizualizează" #: ulng.rsmsgaccount msgid "Account:" msgstr "Cont:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parametri adiționali pentru linia de comandă a arhivatorului:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Nu puteți copia/muta un fișier \"%s\" la sine însuși!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Nu se poate șterge dosarul %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "ChDir la [%s] a eșuat!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Se înlătură toate filele inactive?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Această filă (%s) este blocată! Se închide oricum?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sigur doriți să închideți?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Se copiază %d fișiere/dosare selectate?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Se copiază selecția \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Se șterge fișierul copiat parțial?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Se șterge %d fișiere/dosare selectate?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Mutați %d fișiere/dosare selectate la gunoi?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Se șterge selecția \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Se mută selecția \"%s\" la gunoi?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Nu s-a putut muta \"%s\" la gunoi! Ștergeți dosarul?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Discul nu este disponibil" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduceți extensia fișierului:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduceți numele:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Eroare CRC în arhivarea datelor" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Date corupte" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Nu s-a putut efectua conexiunea la server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Nu s-a putut copia fișierul %s la %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Există deja un dosar cu numele de \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s nu este admisă" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Dosarul %s există deja!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funcția abandonată de utilizatoru" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Eroare la închiderea fișierului" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Eroare la crearea fisierului" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Nici un alt fișier în arhivă" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Nu se poate deschide un fișier existent" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Eroare la citirea din fișier" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Eroare la scrierea fișierului" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Dosarul %s nu a putut fi creat!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Legătură nevalidă" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Nici un fișier găsit" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memorie insuficientă" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funcție neadmisă!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Eroare la comanda din meniul contextul" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Eroare la încărcarea configurației" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Eroare de sintaxă în expresia regulă!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Nu s-a putut redenumi fișierul %s în %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Nu se poate salva asocierea!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Nu am putut salva fișierul" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Nu am putut seta atributele pentru \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Nu am putut seta data/timpul pentru \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Nu am putut seta proprietarul/grupul pentru \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Memoria tampon este prea mică" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Prea multe fișiere de împachetat" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format necunoscut de arhivă" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nume" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Fișierul %s a fost modificat, doriți salvarea lui?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s octeți, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Suprascrie:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Fișierul %s există, se suprascrie?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Cu fișierul:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Fișierul \"%s\" nu a fost găsit." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operațiile cu fișiere active" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Câteva operații cu fișierele nu au fost finalizate. Închiderea Double Commander ar putea duce la pierderea datelor." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Fișierul %s e setat ca doar citibil. Se șterge?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Mărimea lui \"%s\" este prea mare pentru sistemul de fișiere destinație!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Dosarul %s există, se suprascrie?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Urmează legătura simbolică \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall #, fuzzy msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importă toate!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel #, fuzzy msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importă selectate" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Cale" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nume:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Eroare în linia de comandă" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nume de fișier nevalid" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format sau fișier de configurare nevalid" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Cale nevalidă" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Calea %s conține caracter interzise." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Acesta nu este un modul valid!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Acest modul este construit pentru Double Commander pentru %s.%sNu poate funcționa cu Double Commander pentru %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Citare nevalidă" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selecția nu este validă." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Se încarcă lista de fișiere..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copiază fișierul %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Șterge fișierul %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Eroare: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Dezarhivare fișierul %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informații: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Creează legătura %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Creează dosarul %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mută fișierul %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Împachetează în fișierul %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Elimină dosarul %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Gata: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Creează legătura simbolică %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testează integritatea fișierului %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Șterge definitiv fișierul %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Șterge definitiv dosarul %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Parolă" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Introduceți parola:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Fișier nou" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Următorul volum va fi despachetat" #: ulng.rsmsgnofiles msgid "No files" msgstr "Niciun fișier" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Niciun fișier selectat." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nu există spațiu suficient pe dispozitivul țintă, continuați?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nu există spațiu suficient pe dispozitivul țintă, reîncercați?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Nu poate fi șters fișierul %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nu este implementat." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Parolă:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Parolele sunt diferite!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Introduceți parola:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Parolă (Paravan de protecție):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Reintroduceți parola pentru verificare:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Adaugă %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configurează" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "Șterge (&d) %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Fișierul predefinit \"%s\" există deja. Suprascrieți?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Se redenumesc/mută %d fișiere/dosare selectate?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Se redenumește/mută \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Reporniți Double Commander pentru a aplica modificările" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selectate: %s din %s, fișiere: %d din %d, dosare: %d din %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Vă rugăm să selectați doar fișierele sumă de control!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Selectați locația volumului următor" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definește eticheta volumului" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Redenumește fila" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Noul nume al filei:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Calea țintei:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Prea multe fișiere selectate." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nume utilizator:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nume utilizator (Paravan de protecție):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Eticheta volumului:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Introduceți dimensiunea volumului:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Se șterg definitiv %d fișiere/dosare selectate?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Se șterge definitiv selecția \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nicio schimbare: MAJUSCULE;minuscule;Majuscule primul char; Primul char din fiecare cuvânt Majusculă" #: ulng.rsoperaborted msgid "Aborted" msgstr "Anulat" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Se calculează suma de control" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Se calculează suma de control în \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Se calculează suma de control a \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Se calculează" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Se calculează \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Se îmbină" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Se îmbină fișierele \"%s\" la \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Se copiază" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Se copiază de la \"%s\" la \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Se copiază \"%s\" la \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Se creează dosarul" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Se creează dosarul \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Se șterge" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Se șterge în \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Se șterge \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Se execută" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Se execută \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Se extrage" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Se extrage din \"%s\" la \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminat" #: ulng.rsoperlisting msgid "Listing" msgstr "Se listează" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Se listează \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Se mută" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Se mută de la \"%s\" la \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Se mută \"%s\" la \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nu a început" #: ulng.rsoperpacking msgid "Packing" msgstr "Se împachetează" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Se împachetează de la \"%s\" la \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Se împachetează \"%s\" la \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pauzat" #: ulng.rsoperpausing msgid "Pausing" msgstr "Se pauzează" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "În coadă" #: ulng.rsoperrunning msgid "Running" msgstr "În execuţie" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Se setează proprietatea" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Se setează proprietatea în \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Se setează proprietatea lui \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Se separă" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Se separă \"%s\" la \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Se pornește" #: ulng.rsoperstopped msgid "Stopped" msgstr "Oprit" #: ulng.rsoperstopping msgid "Stopping" msgstr "Se oprește" #: ulng.rsopertesting msgid "Testing" msgstr "Se testează" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Se testează în \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Se testează \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Se verifică suma de control" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Se verifică suma de control în \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Se verifică suma de control a lui \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Se așteaptă permisiunea de a accesa sursa fișierului" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Se așteaptă răspunsul utilizatorului" #: ulng.rsoperwiping msgid "Wiping" msgstr "Se curăță" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Se curăță în \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Se curăță \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Se lucrează" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Ștergere:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Extrage fără cale:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Formatează modul analiză:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Poziție ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Rază de căutare ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parametru" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Șir de interogare parolă:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Creează o arhivă cu extracție autonomă:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Numele tipului de arhivă:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valoare" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Asociază modulul \"%s\" cu:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primul;Ultimul;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Dezactivează" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Activează" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduceți extensia fișierului" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Marchează" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Marchează + Cursor" #: ulng.rsoptexampletext msgid "Text" msgstr "Text" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "separă fereastra;minimizează fereastra separată;panou de operații" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "float;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Scurtătura %s pentru cm_Delete va fi înregistrată, pentru a putea fi inversată această setare." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Adaugă tastă rapidă pentru %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Adaugă scurtătură" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Nu se poate seta scurtătura" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Schimbă scurtătura" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comandă" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Scurtătura %s pentru cm_Delete are un parametru ce suprascrie această setare. Doriți să schimbați acest parametru ca să utilizeze setarea globală?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Scurtătura %s pentru cm_Delete necesită schimbarea unui parametru pentru a se potrivi cu scurtătura %s. Doriți să o schimbați?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descriere" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Editează tastă rapidă pentru %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Repară parametru" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Taste rapide" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Taste rapide" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<niciuna>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Setează scurtătura la fișierul șters" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Pentru ca această setare să funcționeze cu scurtătura %s, scurtătura %s trebuie atribuită la cm_Delete dar e deja atribuită lui %s. Doriți să o schimbați?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Scurtătura %s pentru cm_Delete este o scurtătură secvențială pentru care o tastă rapidă cu Shift inversat nu poate fi atribuită. Această setare ar putea să nu funcționeze." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Scurtătură în uz" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Scurtătura %s este deja folosită." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "O schimbați la %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "utilizat pentru %s în %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "utilizat pentru această comandă dar cu parametri diferiți" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Arhivatoare" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Reîmprospătează automat" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamente" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Pe scurt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Culori" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Coloane" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configurație" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Coloane personalizate" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Listă dosare" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Trage și mută" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Butonul listei cu dispozitive" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asocieri de fișier" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operații cu fișiere" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panouri fișiere" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vedere fișiere" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipuri de fișier" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Filele dosarelor" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fonturi" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Evidențiatoare" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Taste rapide" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Iconițe" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Listă de ignorate" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taste" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Limbă" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Aranjament" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Jurnal" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Diverse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Maus" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Module" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Căutare/filtru rapid" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Bară de unelte" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Unelte" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Trucuri" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nimic;Linie de Comandă;Căutare Rapidă;Filtrare Rapidă" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Buton stânga;Buton Dreapta" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "în vârful listei de fișiere;după dosare (dacă acestea sunt sortate înaintea fișierelor);la poziția sortată;la baza listei de fișiere" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Modului %s este deja atribuit următoarelor extensii:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Activ" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nume fișier" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nume" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Înregistrat pentru" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensibil;&Insensibil" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fișiere;Dosa&re;Fișiere și Dosare (&n)" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ascunde (&h) panoul cu filtre când nu este activ;Continuă salvarea modificărilor setării pentru sesiunea următoare" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "cu majuscule semnificative;potrivit setărilor locale (aAbBcC);mai întâi cu majuscule apoi cu minuscule (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortează după nume și arată primul;sortează ca fișiere și arată primul;sortează ca fișiere" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetic, cu accente;Sortare naturală;alfabetic și după număr" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Vârf;Bază;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparator;Comandă inte&rnă;Comandă e&xternă;Meni&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "nu schimba poziția;utilizează aceleași setări ca pentru fișierele noi;la poziția sortată" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fișiere: %d, dosare: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Nu se pot schimba drepturile de acces pentru \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Nu se poate schimba proprietarul lui \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fișier" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Dosar" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Tub denumit" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nu" #: ulng.rspropssocket msgid "Socket" msgstr "Soclu" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispozitiv bloc special" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispozitiv caracter special" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Legătură simbolică" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tip necunoscut" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Da (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Rezultate căutare" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selectați un director" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Arată (&s) ajutorul pentru %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Toate" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comandă" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Previzualizează" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Octeți" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigaocteți" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kiloocteți" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megaocteți" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Teraocteți" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fișiere: %d, Dosare: %d, Mărime: %s (%s octeți)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Nu s-a putut crea directorul țintă!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formatul mărimii fișierului este greșit!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Nu s-a putut separa fișierul!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Numărul de părți e mai mare de 100! Continuați?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Selectați directorul:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Eroare la crearea legăturii simbolice." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Text implicit" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Text simplu" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Zi(le)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Oră/Ore" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(e)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Lună/Luni" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Secundă/Secunde" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Săptămână/Săptămâni" #: ulng.rstimeunityear msgid "Year(s)" msgstr "An(i)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Diferențiator" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Eroare la deschiderea diferențiatorului" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Eroare la deschiderea editorului" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Eroare la deschiderea terminalului" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Eroare la deschiderea vizualizatorului" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Vizualizator" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Vă rugăm raportați această eroare la sistemul de urmărire a defecțiunilor cu o descriere a ceea ce făceați și a fișierelor implicate:%sApăsați %s pentru a continua sau %s pentru a părăsi programul." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rețea" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Vizualizatorul Intern al Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificare" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Dimensiune nouă" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nu a fost găsit!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.sr.po������������������������������������������������������������0000644�0001750�0000144�00001276416�12666540554�017257� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-01-06 18:04+0100\n" "Last-Translator: Саша Петровић <salepetronije@gmail.com>\n" "Language-Team: српски <xfce4@xfce4.org>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Poedit 1.5.4\n" "X-Language: sr_RS\n" "X-Source-Language: C\n" "X-Native-Language: српски\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Упоређујем... %d%% (ЕСЦ за отказивање)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Пронађено је датотека: %d (истоветних: %d, различитих: %d, јединствених лево: %d, јединствених десно: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Са лева на десно: Умножи %d датотека, укупне величине %d бајта" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Са десна на лево: Умножи %d датотека, укупне величине %d бајта" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Све" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Подесите прилагођени изглед стубаца" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Позадина:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Оквир показивача" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Користи прилагођену боју и словни лик" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Боја текста:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Словни лик:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Величина:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Позадина 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Подеси приказ бр.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Боја показивача:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Показивач текста:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Боја означавања:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Назив:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Додај стубац" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Прилагоди колону:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Преглед" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "Р" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "Р" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Изаберите образац..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "П&ровери слободан простор" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Умножи& својства" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Умножи в&ласништво" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Умножи в&реме и датум" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Исправи в&езе" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Поништи особину само за &читање" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "И&зузми празне фасцикле" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "С&леди везе" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Чувај слободан простор" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Шта чинити када се не могу подесити време, својства, итд." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Користи образац датотеке" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Када &фасцикла постоји" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Када &датотека постоји" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Када се не& могу поставити особине" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<нема обрасца>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Умножи у оставу исечака" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Изграђен" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Слободни Паскал" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "почетна страница:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Лазарус" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преправка" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Издање" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Поништи" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Изаберите својства" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Остава" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Са&жмано" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Фасцикла" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Шифровано" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Скривено" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Само за &читање" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "П&роређено" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Симболичка веза" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "С&истем" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Привремено" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Својства НТФС " #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Општа својства" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Остало" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Читај" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Као т&екст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Пиши" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Израчунај збирну проверу" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Образуј посебну датотеку збирне провере за сваку датотеку" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Сачувај збирну(е) проверу(е) у:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Збирна провера..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Д&одај" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отк&ажи" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "По&вежи се" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Управник веза" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Повежи се на:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Додај у заказано" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Могућности" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Сачувај ове могућности као подразумеване" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Умножи датотеку(е)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ново заказивање" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Заказано 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Заказано 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Заказано 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Заказано 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Заказано 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Сачувај опис" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Напомена датотеке/фасцикле" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Уреди& напомену за:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Шифровање:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Самостално упоређивање" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Бинарно" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Откажи" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Умножи скуп десно" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Умножи скуп десно" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Умножи скуп лево" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Умножи скуп лево" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Налепи" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Понови" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Означи &све" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Поништи" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Излаз" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Прва разлика" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Прва разлика" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Занемари величину слова" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Занемари празнине" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Настави клизање" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Последња разлика" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Последња разлика" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Разлика линија" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Следећа разлика" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Следећа разлика" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Отвори лево..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Отвори десно..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Обоји позадину" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Претходна разлика" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Претходна разлика" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Учитај поново" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Поново учитај" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Сачувај" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Сачувај" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Сачувај као..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Сачувај као..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Сачувај лево" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Сачувај лево" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Сачувај лево као..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Сачувај лево као..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Сачувај десно" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Сачувај десно" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Сачувај десно као..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Сачувај десно као..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Упореди" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Упореди" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Шифровање" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Шифровање" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Упореди датотеке" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Лево" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Десно" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Радње" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Ши&фровање" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Могућности" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Додај нову пречицу низу" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Одустани" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Уклони последњу пречицу из низа" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Само за следећа поклапања" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Одреднице (свака у посебној линији):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Пречице:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "О радњи" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Поставке" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Поставке" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Умножи" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Исеци" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Обриши" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Обриши" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Пронађи" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Пронађи" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Нађи следеће" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Нађи следеће" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Иди на линију..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Мек (ЦР)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Мек (ЦР)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Вундоуз (ЦРЛФ)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Вундоуз (ЦРЛФ)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Уникс (ЛФ)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Уникс (ЛФ)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Прилепи" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Прилепи" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Понови" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Понови" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Замени" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Замени" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Означи &све" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Означи све" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Опозови" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Опозови" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Затвори" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Изађи" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Напусти" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Ново" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Ново" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Отвори" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Отвори" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Сачувај" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Сачувај" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Сачувај &као..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Сачувај као" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Сач&увај све" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "_Сачувај све" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Уређивач" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "По&моћ" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Ши&фровање" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Отвори као" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Сачувај као" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Истицање синтаксе" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Завршетак линије" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "О&сетљиво на величину слова" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Тражи од уметнутог знака" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Регуларни изрази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Само означени текст&" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Само целе речи" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "&Могућности" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Замени са:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Тражи:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Смер" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Распакуј датотеке" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Распакуј имена путање ако су сачувана у датотекама" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Распакуј сваку од архива у &посебну подфасциклу (по именима архива)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "П&репиши постојеће датотеке" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "У &фасциклу:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Извуци датотеке на основу поклапања:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Лозинка за шифроване датотеке:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Додај" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Додај" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Додај" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Доле" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Уклони&" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Уклони&" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Уклони&" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Пре&именуј" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Горе" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Придруживање датотека" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Радње" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Наставци" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Врсте датотека" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Иконица" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Радња:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Наредба:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Уреди" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Отвори у уређивачу" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Путања датотеке" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Пуна путања" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Добави излаз из наредбе" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Отвори" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Покрени у терминалу" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Отвори помоћу ВФС-а" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Отвори у прегледнику" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Сачекајте..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Име датотеке:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Кликните на „Затвори“ ако се привремена датотека не може избрисати. " #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&На површ" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Прегледај све" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "&Тренутна радња:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Из:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Ка:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Подесите својства" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Додели свим одабраним датотекама" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Прескочи& ову датотеку " #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Својства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Садржи:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Име:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Путања:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Удружење" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последњи приступ:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последња измена:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Последња измена стања:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Октално:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Власник&" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читање" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Величина:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Веза ка:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Врста:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Писање" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Својства" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Додај&" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Помоћ" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Уреди&" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Иди на датотеку" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Последња претрага" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Нова претрага" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Сачувај" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "У&читај" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Сачувај&" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Сачувај као „Почетак у фасцикли“" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Ако се сачува, „Почетак у фасцикли“ ће бити повраћен приликом учитавања обрасца. Употребите то ако желите да примените претрагу на одређену фасциклу" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Почетак" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Откажи" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Користи образац" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Довод &списку" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Пронађи датотеке" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "О&сетљиво на величину слова" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Од &датума:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "До &датума:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Од &величине:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "До &величине:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Пронађи &текст у датотеци" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Прати &симболичке везе" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Пронађи датотеке које не& садрже текст" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Не& старије од:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Тражи& по делу имена датотеке" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Регуларни израз" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Замени& са" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Означеним фасциклама и &датотекама" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "&Регуларни израз" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Од &времена:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "До вре&мена:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Користи прикључак за претрагу:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Унесите имена фасцикли које би требало да буду искључене из претраге одвојене знаком „;“" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Унесите имена датотека које би требало да буду искључене из претраге одвојене знаком „;“" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Унесите имена датотека раздвојена знаком „;“" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Фасцикле" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Датотеке" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Пронађи податке" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Одреднице&" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Шифровање:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "И&зузми подфасцикле" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Изузми датотеке" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Маска датотеке" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Почни у &фасцикли" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "тражи у &подфасциклама:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Претходне претраге:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Уклони са списка" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Прикажи све пронађене ставке" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Прикажи у прегледнику" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Напредно" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Учитај/Сачувај" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Прикљуци" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Излази" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Обично" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Пронађи&" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Пронађи" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "О&сетљиво на величину слова" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Направи чврсту везу" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Одредиште на које ће веза бити усмерена" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име &везе" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Увези све!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Увези изабрано" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Изаберите ставке које желите да увезете" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Кликом на подизборник ће се изабрати цео изборник" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Држите КТРЛ и кликните на ставке ради избора више њих" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Усмеривач" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Сачувај у..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Ставка" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Име датотеке" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Доле&" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Доле" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Уклони&" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Обриши" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&горе" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Горе" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&О програму" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Додај име датотеке у наредбену линију" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Додај путању и име датотеке у наредбену линију" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Умножи путању у наредбену линију" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Сажето" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Сажети преглед" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Израчунај заузеће простора" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Промени фасциклу" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Пређи на домаћу фасциклу" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Пређи у родитељску фасциклу" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Пређи у корену фасциклу" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Рачунање збирне& провере..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Провера збира..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Очисти датотеку дневника" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Очисти прозор дневника" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Затвори &све картице" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Затвори картицу" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Следећа наредбена линија" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Постави следећу наредбу из историје у наредбену линију" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Претходна наредбена линија" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Постави претходну наредбу из историје у наредбену линију" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Потпуно" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Преглед у виду стубаца" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Упореди по &садржају" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Упореди фасцикле" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Упореди фасцикле" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Поставке брзог списка фасцикли" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Прикажи приручни изборник" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Умножи" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Умножи све приказане &ступце" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Умножи потпуну путању са именима датотека" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Умножи имена датотека у оставу исечака" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Умножи датотеке без питања за потврду" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Умножи у исту површ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Умножи" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "&Прикажи заузеће меморије" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Исеци" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Историја фасцикле" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Брзи списак &фасцикли" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Уреди" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Уреди &напомену..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Уреди нову датотеку" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Уреди поље путање изнад списка" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Замени површи" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Напусти" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Извуци датотеке..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Придруживање &датотека..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Споји датотеке..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Прикажи својства &датотека" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Подели& датотеку..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Раван приказ" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Жижа на наредбену линију" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Постави показивач на прву датотеку списка" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Постави показивач на последњу датотеку списка" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Направи &чврсту везу..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Садржај" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Водораван приказ површи" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Тастатура" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Лево &= Десно" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Отвори списак левог уређаја" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Учитај садржај оставе исечака" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Учитај избор из датотеке..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Учитај картице из датотеке" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Направи &фасциклу" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Означи све са истим наставком&" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Обрни избор" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Означи све" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Поништи избор &скупа..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Изабери &скуп..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Одзначи све" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Умањи прозор" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Прибор за масовно &преименовање" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Успостави мрежну &везу..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Прекини мрежну &везу" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Брза мрежна веза..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Нови лист" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Пређи на &следећи лист" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Отвори" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Покушај да отвориш складиште" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Отвори датотеку са траке" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Отвори &фасциклу у новом листу" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Отвори &ВФС списак" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Прегледник &напретка радњи" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Могућности..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Складишти датотеке..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Подесите положај деобе" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Прилепи" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Пређи на &претходни лист" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Брзи пропусник" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Брза претрага" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Површ за брзи преглед" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Освежи" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Премести" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Премештај и преименуј датотеке без питања за потврду" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Преименуј" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Преименуј лист" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Поврати избор" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Обрнути редослед" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Десно &= лево" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Отвори списак десног уређаја" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Покрени у &терминалу" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Сачувај избор" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Сачувај &избор у датотеку..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Сачувај картице у датотеку" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Тражи..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Промени &својства..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Закључано са фасциклама отвореним у новом &листу" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обично" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Закључано" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Закључено са дозволом измене &фасцикли" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Отвори" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Отвори користећи придруживање датотека" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Прикажи изборник дугмета" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "прикажи историју наредби" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Изборник" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Приказуј &скривене и системске датотеке" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Поређај по &својствима" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Поређај по &датуму" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Поређај по &наставку" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Поређај по &имену" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Поређај по &величини" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Омогући/онемогући приказ занемарених датотека са списка" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Направи симболичку &везу..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Усклади фасцикле..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Циљ &= извор" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Провери складиште" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Умањене сличице" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Преглед умањених сличица" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Премести фасциклу под показивачем на леви прозор" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Премести фасциклу под показивачем на десни прозор" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Одзначи све са истим наставком&" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Преглед" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Прикажи историју посећених путања под оваквим прегледом" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Иди на следећу ставку историје" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Иди на претходну ставку историје" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Посетите Веб страницу Двоструког наредника" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Бриши потпуно" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Излаз" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Фасцикла" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Прикажи тренутну фасциклу са десне површи на леву површ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Иди у домаћу фасциклу" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Иди у корену фасциклу" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Иди у родитељску фасциклу" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Прикажи тренутну фасциклу са леве површи на десну површ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Путања" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Умножавање..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Стварање везе..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Очисти" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Сакриј" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Означи све" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Премести..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Стварање симболичке везе..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Могућности листа" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Излаз&" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Поврати" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Почетак" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Наредбе" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Поставке" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Датотеке&" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помоћ&" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Ознака&" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Мрежа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Прикажи&" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Могућности" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Листови&" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "ЦД" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Умножи" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Избриши" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Уреди" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Прилепи" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Откажи" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&У реду" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помоћ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Пречица" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Опиши&..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Или& одабери предодређену врсту избора:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Направи нову фасциклу" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Унесите& име нове фасцикле:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Нова величина" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Висина :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Каквоћа сажманости ЈПГ" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ширина :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Висина" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Затвори&" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Избриши&" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Учитај&" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Пре&именуј" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Поништи све&" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Сачувај&" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Вишеструко преименовање" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Омогући&" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Регуларни изрази" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Користи& замену" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] наставак" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Бројач" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Нађи и замени" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Излази дневника" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Маска" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Обрасци" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Наставци&" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Пронађи&..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Међувреме" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Име датотеке" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Замени&..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Почетни број" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Ширина&" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Бројач" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] дан" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] дан (2 цифре)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] дан у недељи (кратко, нпр. „пон“)" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDD] дан у недељи (потпуно, нпр. „понедељак“)" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] знак на положају x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] знаци од положаја x до положаја y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Час (2 знака)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Минут" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Минут (2 знака)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Месец" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Месец (2 знака)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Име месеца (кратко, нпр., „јан“)" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Име месеца (пуно, нпр., „јануар“)" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Име" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] знак на положају x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] знаци од положаја x до положаја y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Време..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Наставак..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Име..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Прикључак" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Секунд" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунд (2 знака)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Година (2 знака)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Година (4 знака)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Старо име датотеке" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Ново име датотеке" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Путања датотеке" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Изаберите програм" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Прилагођена наредба" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Сачувај придруживање" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Постави изабрани програм као подразумевани програм" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Врста датотеке која ће бити отворена: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Вишеструка имена датотека" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Вишеструке адресе" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Једно име датотеке" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Једна адреса" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Примени&" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Откажи&" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "У реду&" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Могућности" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Изаберите једну подстраницу, ова страница не садржи ни једну поставку." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Самостално& подеси" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Додај&" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Избриши&" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Преименуј&" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Начин отклањања& грешака" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Омогућен&" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Приказуј& излаз из конзоле" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Могућности" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Додајем&:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Наставци&:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Издвоји&:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Листај&:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Листање и довршавање& (могућност):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Облик& листања:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Почетак листања& (могућност):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Програм за сажимање:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Опис&:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Додатно" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Опште" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Приликом измена &величине, датума или својстава" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следеће путање& и њене подфасцикле:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Приликом стварања датотека, брисања или преименовања" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Када је програм у позадини&" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Онемогући самостално освежавање" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Освежи списак датотека" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Увек приказуј икону у обавештајној области" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Самостално скривај& откачене уређаје" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Приликом умањења премести икону у обавештајну област" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Дозволи само један примерак ДН у исто време" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Овде можете унети један или веше уређаја или тачака качења одвајајући их знацима „;“" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Црни списак уређаја" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Опсеци текст на ширину ступца" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Водоравне& линије" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Усправне& линије" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Самостално& попуни ступце" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Приказуј мрежу" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Самостално уклопи величину стубаца" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Самостално уклопи величину ступца:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Уреди&" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Историја наредби&" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Историја фасцикли&" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Историја маски датотека&" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Сачувај& поставке" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Историја претраге& и замене" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Путања датотека поставки" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Сачувај по излазу" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Укључи наредбену линију" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Фасцикла програма& (преносно издање)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Домаћа фасцикла корисника&" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Све" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Ново" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "Р" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Сачувај као" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Сачувај" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Опште" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Оквир показивача" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Позадина:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Позадина 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Подеси ступце за систем датотека:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Боја показивача:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Показивач текста:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Словни лик:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Величина:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Боја текста:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Боја означавања:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Додај стубац" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Додавање..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Остава..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Брисање..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Помоћ" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Уметање..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Разно..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Неке радње за одабир одговарајућег циља" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Разврставање..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Приликом додавања фасцикле, додај и циљ" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Увек шири стабло фасцикли" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy,badformat #| msgid "Show only valid %senv_var%s" msgid "Show only valid environment variables" msgstr "Приказуј само исправне %env_var%" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "При искачућим прозорима прикажи [и путању]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Име, а-ш" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Име, а-ш" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Брзи списак фасцикли (преуредити превлачењем и спуштањем)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Остале могућности" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Име:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Путања:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Циљ:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "фасцикла радног оквира" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "Фасцикле радних и мирујућих оквира" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "наредба" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Додај наредбу" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "умножак означене ставке" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Додај умножак означене ставке" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "раздвајач" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Додај раздвајач" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "подизборник" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Додај подизборник" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "фасцикла за преглед" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Скупи све" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...тренутни ступањ ставки које су само означене" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "тренутно означене или радне фасцикле радног оквира" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Исеци" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "обриши све!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "подизборник и сви његови чиниоце" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "само подизборник, али задржи чиниоце" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "означена ставка" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Обришите означену ставку" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Претражи све путање брзих фасцикли ради утврђивања које стварно постоје" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Претражи све путање брзих фасцикли и циљева ради утврђивања који стварно постоје" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "у датотеку списка брзих фасцикли (брзи списак)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Изборник пробе списка брзих фасцикли" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "из датотеке брзог списка фасцикли (брзи списак)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "из „wincmd.ini“ ТЦ-а" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Отвори све гране" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Прилепи" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Поврати списак брзих фасцикли из оставе" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Сачувај у оставу тренутни списак брзих фасцикли" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...све, од А до Ш!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...појединачни скуп ставки искључиво" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Разврстај појединачни скуп ставки искључиво" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...садржај означеног подизборника, без поднивоа" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...садржај означеног подизборника и све његове поднивое" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Провери излазни изборник" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "фасцикла за куцање" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Додај фасциклу за куцање" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Убаци фасциклу за куцање" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Додатак из главне површи:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Приказуј& прозорче потврде после отпуштања" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Приказуј систем датотека" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Приказуј слободан& простор" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Прикажи натпис&" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Списак уређаја" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Позадина" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "&Позадина" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Врати на подразумевано" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Сачувај" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Својства ставке" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Сучеље&" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Сучеље&" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Ознака текстом&" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Користи (и уреди) опште& поставке схеме" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Користи месне& поставке схеме" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Подебљан" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Укључи" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Искошено" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Укључи" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Пре&цртај" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "У&кључи" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Подв&учено" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Из&врни" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Искључи" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "У&кључи" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Додавање..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Брисање..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Уметање..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Разврставање..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Увек шири стабло фасцикли" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Остале могућности" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "раздвајач" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "подизборник" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Додај подизборник" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Скупи све" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...тренутни ступањ ставки које су само означене" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Исеци" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "обриши све!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "подизборник и сви његови чиниоце" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "само подизборник, али задржи чиниоце" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "означена ставка" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Обришите означену ставку" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Отвори све гране" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Прилепи" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Преименуј" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...све, од А до Ш!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...појединачни скуп ставки искључиво" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Разврстај појединачни скуп ставки искључиво" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...садржај означеног подизборника, без поднивоа" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...садржај означеног подизборника и све његове поднивое" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Провери излазни изборник" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Додај" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Додај&" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Додај" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Доле" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Уреди" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Уклони&" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Пре&именуј" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Горе" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Радње" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Наставци" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Врсте датотека" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Иконица" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Радња:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Наредба:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Одредница&:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Почетна &путања:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Уреди" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Отвори у уређивачу" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Добави излаз из наредбе" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Отвори" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Покрени у терминалу" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Преглед" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Отвори у прегледнику" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Приказуј прозор потврде за:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Умножи& поступак" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Избриши& поступак" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Премести у смеће (дугме схифт поништава ову поставку)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Радња слања у смеће" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Поништи ознаку само за читање" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Радња премештања&" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Претрага& по делу имена датотеке" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Обрађуј напомене са датотекама и фасциклама" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Означи име датотеке& без наставка приликом преименовања" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Приказуј картицу површи одабира у прозору за умножавање премештање" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Занемари грешке радњи над датотекама и уписуј их у прозору дневника" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Извршавање радњи" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Претрага датотека" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Корисничко сучеље" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Величина оставе за радње над датотекама (у KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Приказуј почетни напредак радњи у" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Број пролаза потпуног брисања:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Користи карту меморије за претраге по текстовима" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Користи ток за претраге по текстовима" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Омогући појачано бојење" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Користи трепћући показивач" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Користи указивач са преливом" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Користи обрнути одабир" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Оквир показивача" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Указивач слободног места на уређајима" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "П&озадина:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "П&озадина 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Боја показивача&:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Показивач текста&:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Осветљење нерадне картице" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Позадинска боја &указивача:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Чеона боја &указивача:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Боја означавања&:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Боја текста&" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Немој да учитаваш списак датотека док се картица не покрене" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Приказуј& угласте заграде око фасцикли" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Истакни& нове и освежене датотеке" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Омогући &преименовање на месту при двоклику на име" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Учитај списак &датотека у посебном процесу" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Учитавај иконе након& списка датотека" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Прикажи системске и скривене датотеке" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Приликом одабира датотека помоћу <SPACEBAR>, пређи на следећу датотеку ( као и са <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Обликујем" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ређање" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Осетљиво на &величину слова" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неисправан облик" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Облик датума и времена:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Облик величине& датотека:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Уметни& нове датотеке" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Распоред фасцикли:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Начин распоређивања:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Премести освежене датотеке" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Додај" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Обриши" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Образац..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Боје врста датотека (распоредите их повлачењем и &спуштањем)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Својства& врсте:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Боја врсте&:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Маска врсте&:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Име &врсте:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Словни лик уређивача" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Словни лик дневника&" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Главни словни лик&" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Словни лик прегледника& књига" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Словни лик прегледника&" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Додај пречицу&" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Избриши& пречицу" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Уреди& пречицу" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Пропусник&" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Врсте&:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Наредбе&:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Датотеке пречица&:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Наредба" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Пречице" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Опис" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Пречица" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Одредница" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Управљачи" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следеће &путање и њихове подфасцикле:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Приказуј иконице радњи у изборницима&" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Приказуј преклапајуће& иконице, нпр. за везе" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Онемогући нарочите иконице" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Иконице у изборницима" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Величина иконица" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Приказуј иконице лево од имена датотека" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Све&" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Све повезане + &EXE/LNK (споро)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Без& иконица" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Само &уобичајене иконице" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Додај& означена имена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Додај означена имена са &потпуним путањама" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Занемари& (не приказуј) следеће датотеке и фасцикле:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Сачувај у:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Лева& и десна стрелица мења фасциклу (кретање као у Линксу)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Куцање" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Мења+слова&" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ктрл+мења+слова" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Слова" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Равна& дугмад" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Равно &сучеље" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Равна дугмад&" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Приказуј указивач слободног простора на натпису уређаја" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Приказуј прозор дневника&" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Приказуј површ радње из позадине" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Приказуј уобичајени напредак у траци изборника" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Приказуј наредбену линију&" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Приказуј тренутну фасциклу" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Приказуј дугмиће уређаја&" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Приказуј натпис слободног простора&" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Приказуј дугме списка уређаја" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Приказуј дугмиће радњи" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Приказуј главни& изборник" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Приказуј траку дугмади" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Приказуј натпис малог слободног простора" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Приказуј траку стања&" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Приказуј& заглавље картице за заустављање" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Приказуј картице фасцикле" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Приказуј прозор терминала&" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Приказуј две траке дугмади уређаја (сталне ширине, изнад прозора)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Распоред на екрану" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Сажми/извуци" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Умножи/премести/направи везу/симболичку везу" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "&Направи/Избриши фасцикле" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Дневник грешака" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Направи& датотеку дневника:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Уноси у дневник поруке података&" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Уноси у дневник успешне& радње" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Прикључци &система датотека" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Датотека дневника радњи над датотекама" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Уписуј радње у дневник" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Стање радње" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Уклони умањене сличице непостојећих датотека" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Увек иди у& корен уређаја приликом мењања уређаја" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Приказуј поруке упозорења (само дугме „У реду“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Чувај умањене сличице у остави" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Умањене сличице" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "тачке" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "Х" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Величина &умањених сличица:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Одабир мишем" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Клизање" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Избор" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Начин:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Линија по линија" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Линија по линија &са померањем показивача" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Страница по страница" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "&Додај" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Подеси&" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Омогући" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Уклони" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "&Лицкај" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Прикључци &претраге омогућују заменске алгоритме претраге, или спољне алате (као што је „locate“, итд.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Прикључци за сажимање се употребљавају за рад са архивама" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Прикључци за садржаје се употребљавају за проширење приказа појединости датотека као што су мп3 ознаке или својства слика у списковима датотека, или се користе у прикључцима претраге и алатима за вишеструко преимановање" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Прикључци система датотека& омогућавају приступ радњама са дисковима које нису доступне из оперативног система или спољњим уређајима ко што су Палм и џепни рачунар." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Прикључци за преглед омогућавају приказ облика датотека као што су слике, табеле, базе података итд. у прегледнику (Ф3, Ктрл+Ку)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Радно" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Прикључак" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Пријављено за" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "&Прикључци претраге (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Прикључци за сажимање (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Прикључци& садржаја (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Прикључци система датотека (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Прикључци прегледника (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Почиње са (име мора да почиње првим откуцаним знаком)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Завршава се са (последњи знак пре откуцане тачке . мора да се поклапа)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Могућности" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Потпуно слагање имена" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Величина слова претраге" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Тражи ове ставке" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Покрени циљну површ& при клику на једну од њених картица" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Прикажи и заглавље картице када се приказује само једна картица" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Потврди затварање свих картица" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ограничи дужину наслова картице на" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Приказуј закључане картице &са знаком *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Картице на вишеструким линијама" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ктрл+&горе отвара нову картицу у позадини" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Отвори нову картицу поред тренутнр картице" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Приказуј дугме за затварање &картице" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Заглавље картице фасцикли" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "знаци" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Положај картица&" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Наредба:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Дугме потпуно истих умножака" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Избриши" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Уреди &пречицу" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Унеси ново дугме" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Друго..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Уклони &пречицу" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Равна& дугмад" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Унесите одреднице наредбе, сваку у посебној линији. Притисните Ф1 за преглед помоћи за одреднице." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Приказ" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Величина &траке:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Наредба:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Одредница&:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помоћ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Пречица:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Иконица&:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Величина& иконице:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Наредба&:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Одреднице&:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Почетна &путања:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Напомена:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Остава..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Извоз..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "у „wincmd.ini“ ТЦ-а (задржи постојеће)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "у „wincmd.ini“ ТЦ-а (избриши постојеће)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Увоз..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Врста дугмета" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Задржавај отвореним прозор терминала после извршења програма" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Изврши у терминалу" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Користи спољни програм" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Додатне одреднице" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Путања програма за извршење" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Додај" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Примени&" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Избриши&" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Образац..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Прикажи напомену" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Прилагођено поље по врсти датотека" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Врста напомене&:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Врста маске&:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Врста имена&:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Начин приказа прегледника књига" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Позадинска боја у прегледнику књига" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Словни лик у прегледнику књига" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Број стубаца у прегледнику књига" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Подеси" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Сажми датотеке" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Направи одвојене складишта, свако посебно за одабрану датотеку и фасциклу" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Направи самоиздвајајуће складиште" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Шифруј" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Премести& у складиште" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Вишеструко складиште дискова" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Прво смести& у ТАР складиште" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Такође сажми& и имена путање (само рекурзивно)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Сажми датотеку(е) у датотеку:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Сажималац" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Издвоји &све и изврши" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Издвоји и изврши" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Својства сажмане датотеке" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Својства:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Ступањ сажимања:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Датум:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Начин:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Изворна величина:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Датотека:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Величина сажмане датотеке:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Сажималац:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Време:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "Х" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Затвори површ пропусника" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Унесите текст или услов претраге" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Аа" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Осетљиво на величину слова" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "Д" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Фасцикле" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Ф" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Датотеке" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Почетак поклапања" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Завршетак поклапања" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Услов" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Замена претраге и услова" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Прикључак" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Вредност" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Затвори" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Помоћ" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Изаберите знакове за унос:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Измени својства" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "СГИД" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лепљиво" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "СУИД" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Складиште" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Направљено:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Скривено" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Приступано:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Измењено:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Само за читање" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Укључујући подфасцикле" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Систем" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Својства временске ознаке" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Својства" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Бита:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Удружење" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сива поља означавају неизмењене вредности)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Власник" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изврши" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сива поља означавају неизмењене вредности)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Октално:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Читај" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Пиши" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Неке радње за одабир одговарајуће путање" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Делилац" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Име датотеке" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Величина и број делова" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Циљна фасцикла&" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Изворна& фасцикла" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Броје делова" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Гигабајта" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Килобајта" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Мегабајта" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Изграђен" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Слободни Паскал" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Лазарус" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Оперативни систем" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Платформа" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преправка" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Двоструки наредник" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Издање" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Направи симболичку везу" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Одредиште на које ће указивати веза" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име &везе" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Затвори" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Упореди" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Усклади" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Усклађене фасцикле" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "несиметрично" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "по садржају" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "занемари датум" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "само одабрано" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Подфасцикле" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Приказуј:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Величина" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Датум" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Датум" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Величина" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(у главном прозору)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Упореди" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "близанци" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "појединачни" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Молим, притисните „Упореди“ за почетак" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Усклади" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Потврди преписивање" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "&Додај ново" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Откажи" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "&Измени" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "&Подразумевано" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&У реду" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Уклони&" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Прикључак за лицкање" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "&Препознај врсту складишта по садржају" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Нисам успео да &избришем датотеке" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Подржава &шифровање" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Приказуј& као обичне датотеке (сакриј иконицу сажимања)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Подржава &сажимање у меморији" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Нисам успео да изменим постојећа складишта" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "&Складиште може да садржи вишеструке датотеке" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Нисам успео да направим нова складишта&" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Подржава& прозор за приказ могућности" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Омогућава претрагу& текста у складиштима" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Опис&:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Препознај& ниску:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Наставци&:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Ознаке:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Име&:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Прикључак:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Прикључак:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "О прегледнику..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Приказује поруку о програму" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Умножи датотеку" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Умножи датотеку" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Избриши датотеку" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Избриши датотеку" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Следећа" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Учитај следећу датотеку" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Претходна" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Учитај претходну датотеку" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Огледало" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Огледало" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Премести датотеку" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Премести датотеку" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Учитај поново" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Поново учитај тренутну датотеку" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Обрни за 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Обрни за 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Обрни за 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Обрни за 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Обрни за 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Обрни за 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Сачувај као..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Сачувај датотеку као..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Развуци" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Развуци слику" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Умножи" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Умножи" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Опсеци" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Обриши" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Обриши" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Преко целог екрана" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "С" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Истицање" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Огледало" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Премести" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Премести" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Обоји" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Црвене очи" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Промени величину" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Врати" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Приближи" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Удаљи" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Прегледник" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Покретне слике" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Оловка" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Истицање" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Бојење" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Покретни приказ" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "О програму" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Прикажи бинарно&" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Умножи у оставу исечака" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Уреди" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Шифровање" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Излаз&" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Датотека" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Преко целог екрана" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Графика" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Прикажи хексадецимално&" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Слика" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Прикажи као књигу&" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Огледало" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Прикључак" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Преглед" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Штампај..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Обрни" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Сачувај" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Сачувај као..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Слика екрана" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Тражи" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Нађи следеће" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Нађи претходно" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Означи све" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Развуци" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Прикажи као &текст" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Прикажи као &увучен текст" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Приближи" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Удаљи" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Умножи у оставу исечака" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Означи све" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Почни" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Заустави" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Радње над датотекама" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Увек на врху" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Користи „превуци и спусти“ за радње премештања између заказаних" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Откажи" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ново заказивање" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Прикажи у одвојеном прозору" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Закажи прву" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Закажи последњу" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Заказано" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Ван заказаних" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Заказано 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Заказано 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Заказано 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Заказано 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Заказано 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Прикажи у одвојеном прозору" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Заустави све" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Ради у позадини (посебна веза)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Када датотека постоји" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Нисам успео да пронађем датотеку и да помогнем при провери коначног склопа датотека:\n" "%s\n" "\n" "Да ли можете да омогућите то и притисните „У реду“ када буде спремно,\n" "или притисните „ОТКАЖИ“ за наставак без тога?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Откажи брзи услов" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Откажи тренутну радњу" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Оштећено:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Опште:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Недостаје:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Грешка читања:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Успех:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Унеси збир за проверу и изабери алгоритам:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Провери збир" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Укупно:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Остава исечака не садржи исправне податке траке алата." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Својство" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Датум" #: ulng.rscolext msgid "Ext" msgstr "Наставак" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Име" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Величина" #: ulng.rsconfcolalign msgid "Align" msgstr "Подвуци" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Наслов" #: ulng.rsconfcolconfig msgid "Config" msgstr "Поставке" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Избриши" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Садржај поља" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Премести" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Прилагоди колону" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Умножи (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Све радње су завршене" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Напредак свих радњи %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Прекини" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Све" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Настави" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Самостално преименуј изворне датотеке" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Откажи" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Настави" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Умножи &у" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Умножи у &све" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Напусти& програм" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Занемари& све" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Не" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ништа" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&У реду" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "друго&" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Препиши" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Препиши &све" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Препиши све &веће" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Препиши све &старије" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Препиши све &Мање" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "П&реименуј" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Настави" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "По&ново покушај" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Прескочи" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Прескочи& све" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Израчунај фасцикле и датотеке" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Израчунавам збирну проверу..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Проверавам збир..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Умножи датотеку(е)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Избриши датотеку(е)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Премести датотеку(е)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Застанак&" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Почетак&" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Заказано" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Брзина %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Брзина %s/s, преостало време %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Подели" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Избриши потпуно датотеку(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<без ознаке>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<нема уређаја>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Унутрашњи уређивач Двоструког наредника." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Иди на линију:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Иди на линију" #: ulng.rseditnewfile msgid "new.txt" msgstr "нови.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Име датотеке:" #: ulng.rseditnewopen msgid "Open file" msgstr "Отвори датотеку" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Уназад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Тражи" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Унапред" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замени" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Питај;Препиши;Умножи;Прескочи" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Питај;Препиши;Препиши старије;Прескочи" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Питај;Не постављај више;Занемари грешке" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Услов" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Одреди образац" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s ступањ(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "све (неограничена дубина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само тренутну фасциклу" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Фасцикла %s не постоји. " #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Пронашао сам: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Сачувај образац претраге" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Име обрасца:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Прегледано је: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Прегледам" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Нађи датотеке" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Почни са" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Слободно је %s од %s бајта" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s бајта је слободно" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Датум и време приступа" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Својства" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Напомена" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Величина складишта" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Датум и време настанка" #: ulng.rsfuncext msgid "Extension" msgstr "Наставак" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Удружење" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Веза до" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Датум и време измене" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Име" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Име без наставка" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Власник" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Путања" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Величина" #: ulng.rsfunctype msgid "Type" msgstr "Врста" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Десила се грешка при стварању чврсте везе" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Жалим, нисам пронашао ништа за увоз!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Упозорење: При враћању датотеке .hotlist из оставе, тренутни списак ће бити избрисан и замењен увезеним.\n" "\n" "Да ли сигурно желите да наставите?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Прозорче умножавања и премештања" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Програм за разлике" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Уредите напомену" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Уређивач" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Нађи датотеке" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Главни" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Прегледник" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Стваралац веза је завршио рад" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Одзначи маску" #: ulng.rsmarkplus msgid "Select mask" msgstr "Означи маску" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Унеси маску:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Подесите прилагођене ступце" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Подесите овај преглед стубаца" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Радње" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Уреди" #: ulng.rsmnueject msgid "Eject" msgstr "Избаци" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Прикачи" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Нова" #: ulng.rsmnunomedia msgid "No media available" msgstr "Нема доступних уређаја" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Отвори" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Отвори са" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Друго..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Разврстај по" #: ulng.rsmnuumount msgid "Unmount" msgstr "Откачи" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Прикажи" #: ulng.rsmsgaccount msgid "Account:" msgstr "Налог:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Додатне одреднице за наредбену линију програма сажимања:" #: ulng.rsmsgbadcrc32 #, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Излазна датотека CRC32 је неисправна:\n" "„%s“\n" "\n" "Да ли желите да задржите неисправну датотеку?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Не можете умножавати и премештати у саму датотеку „%s“!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Не можете избрисати %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Нисам успео да пређем на фасциклу [%s]." #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Да ли да уклоним све картице које се не користе?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Картица (%s) је закључана. Да ли да је упркос томе затворим?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Да ли сте сигурни да желите напустити програм?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Да ли да умножим %d одабраних датотека/фасцикли?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Да умножим одабрано „%s“?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Да ли да избришем делимично умножену датотеку ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Да ли да избришем %d одабраних датотека/фасцикли?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Да ли да преместим %d одабране датотеке/фасцикле у смеће?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Да ли да избришем одабрани „%s“?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Да ли да преместим одабрано „%s“ у смеће?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Нисам успео да преместим „%s“ у смеће. Да ли да га избришем?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Диск није доступан" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Унесите наставак датотеке:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Унесите име:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Десила се ЦРЦ грешка у подацима складишта" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Подаци су оштећени" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Нисам успео да се повежем са служитељем „%s“" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Нисам успео да умножим датотеку %s у %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Датотека под именом „%s“ већ постоји." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Датум %s није подржан" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Фасцикла %s већ постоји." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Корисник је прекинуо текућу радњу" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Десила се грешка при затварању датотеке" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Нисам успео да образујем датотеку" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Нема више датотека у архиви" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Нисам успео да отворим постојећу датотеку" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Десила се грешка при читању датотеке" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Десила се грешка при упису у датотеку" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Нисам успео да образујем фасциклу %s." #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Веза није исправна" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Нисам пронашао датотеке" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Нема довољно меморије" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Радња није подржана." #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Десила се грешка у приручном изборнику" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Десила се грешка приликом учитавања поставки" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Постоји синтаксна грешка у регуларном изразу" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Нисам успео да променим назив датотеке %s у %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Нисам успео да сачувам придруживање датотека програмима." #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Нисам успео да сачувам датотеку" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Нисам успео да поставим својства датотеци „%s“" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Нисам успео да поставим датум и време датотеци „%s“" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Нисам успео да поставим власника/удружење датотеци %s“" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Прихватна меморија је премала" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Превише датотека је изабрано за сажимање" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Није познат облик жељене датотеке за сажимање" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(крај подизборника)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Име" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Назив изборника:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(раздвајач)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Име подизборника" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Датотека %s је измењена. Да ли да је сачувам?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s бајта, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Препиши:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Датотека %s већ постоји, да ли да је препишем?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Датотеком:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Нисам успео да пронађем датотеку „%s“." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "У погону је радња над датотекама" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Неке радње над датотекама нису довршене. Затварање Двоструког наредника може довести до губљења података." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Датотека %s је само за читање. Да ли да је избришем?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Датотека величине „%s“ је превелика за одредишни систем датотека." #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Датотека %s постоји. Да ли да је препишем?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Да ли да пратим симболичку везу „%s“?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Додај %d означених фасцикли" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Додај означену фасциклу: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Додај тренутну фасциклу: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Наредба за извршење" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Поставке брзог списка фасцикли" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Да ли сте сигурни да желите уклонити све уносе из брзог списка фасцикли? (Опозив ове радње је немогућ!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ово ће извршити следећу наредбу:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Ово је именовано као брза фасцикла." #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Ово ће изменити радни оквир на следећу путању:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "И нерадни оквир ће се изменити на следећу путању:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Десила се грешка приликом смештаја ставки у оставу..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Десила се грешка приликом извоза ставки..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Извези све!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Извези брзи списак фасцикли - Изаберите ставке које желите да извезете" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Извези одабране" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Увези све!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Увези брзи списак фасцикли - Изаберите ставке које желите да увезете" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Увези изабрано" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Путања" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Пронађите датотеку „.hotlist“ за увоз" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Брзи списак фасцикли је измењен. Да ли желите да га сачувате пре изласка?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Име брзе фасцикле" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Број нових ставки: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Нема ничег за извоз!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Путања брзе фасцикле" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Поновно додај изабрану фасциклу: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Поново додај тренутну фасциклу: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Унесите путању и име датотеке брзог списка фасцикли за опоравак" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Наредба:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(крај подизборника)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Назив изборника:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Име:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(раздвајач)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Име подизборника" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Циљ подизборника" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Одређује да ли желите да разврстате радни оквир одређеним редоследом после измене фасцикле" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Одређује да ли желите да не разврставате радни оквир одређеним редоследом после измене фасцикле" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Неке радње за избор одређене путање односне, апсолутне, нарочите фасцикле Виндоуза, итд." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Укупан број сачуваних ставки: %d\n" "\n" "Име оставе: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Укупна број извезених ставки: " #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Да ли желите да избришете све чиниоце подизборника [%s]?\n" "Одговором НЕ ћете избрисати само ограничење изборника, али ће се задржати чинилац унутар подизборника.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Унесите путању и име места за чување датотеке брзог списка фасцикли" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Нетачна је излазна дужина датотеке : „%s“" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Молим, убаците следећи диск или нешто слично.\n" "\n" "То ће вам омогућити да упишете следећу датотеку:\n" "„%s“\n" "\n" "Број бајта преостао за упис: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Грешка у наредбеној линији" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Неисправан назив датотеке" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Неисправан облик у датотеци подешавања" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Неисправна путања" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Путања %s садржи недозвољене знакове" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ово није исправан прикључак." #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Овај прикључак је написан за Двоструког наредника %s.%sНе може да ради са Двоструким наредником %s." #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неисправан навод" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Неисправан избор." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Учитавам списак датотека..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Умножи датотеку %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Обриши датотеку %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Грешка: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Распакујем датотеку %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Подаци: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Направи везу %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Направи фасциклу %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Премести датотеку %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Путања до датотеке %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Уклони фасциклу %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Урађено: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Направи везу %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Провери исправност датотеке %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Избриши потпуно датотеку %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Избриши потпуно фасциклу %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Главна лозинка" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Унесите поново главну лозинку:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Нова датотека" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Следећи садржај ће бити издвојен" #: ulng.rsmsgnofiles msgid "No files" msgstr "Нема датотека" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Није изабрана ниједна датотека." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Нема довољно места у одредишту. Да ли да наставим?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Нема довољно слободног места на одредишном уређају. Да ли да покушам поново?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Нисам успео да избришем датотеку %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Није примењено." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Лозинка:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Лозинке се разликују!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Унесите вашу лозинку:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Лозинка (ватрени зид):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Унесите поново лозинку за систем провере:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "Додај %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "Подеси" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "Обриши %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Датотека „%s“ већ постоји. Да је препишем?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Молим, побрините се да ова датотека буде доступна. Покушати поново?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Преименуј/премести %d означених датотека/фасцикли?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Преименуј/премести означено „%s“?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Молим, поново покрените Двоструког наредника да би се примениле измене" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Означено: %s од %s, датотека: %d од %d, фасцикли: %d од %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Молим, одаберите само датотеке за проверу збира." #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Изаберите положај следећег садржаја/уређаја" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Постави ознаку уређају" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Нарочите фасцикле" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Додајте путању радном оквиру" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Додајте путању из нерадног оквира" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Прегледај и користи одабрану путању" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Користи променљиве окружења..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Иди на нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Иди на променљиву окружења..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Иди на другу нарочиту фасциклу Виндоуза..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Иди на нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Учини путању апсолутном" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Учини односном на нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Учини односном на променљиву окружења..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Учини односном на нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Учини односном на другу нарочиту фасциклу Виндоуза..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Користи нарочиту путању Двоструког наредника..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Користи другу нарочиту путању Виндоуза..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Користи нарочиту фасциклу Виндоуза (ТЦ)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Преименуј картицу" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Нови назив картице:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Путања до одредишта:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Превише датотека је одабрано." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Неодређено" #: ulng.rsmsgurl msgid "URL:" msgstr "Адреса:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Корисничко име:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "корисничко име (ватрени зид):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Ознака уређаја:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Унесите величину уређаја:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Да ли да потпуно избришем %d означених датотека/фасцикли?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Да ли да потпуно избришем одабрано „%s“?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без измена;ВЕЛИКА СЛОВА;мала слова;Први знак велики;Први Знак Сваке Речи Велики;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Обустављено" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Израчунавам збирну проверу" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Рачунам збирну проверу у „%s“" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Рачунам збирну проверу „%s“" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Рачунам" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Рачунам „%s“" #: ulng.rsopercombining msgid "Joining" msgstr "Спајам" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Спајам датотеке из „%s“ на „%s“" #: ulng.rsopercopying msgid "Copying" msgstr "Умножавам" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Умножавам из „%s“ у „%s“ " #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Умножавам „%s“ на „%s“" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Стварам фасциклу" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Стварам фасциклу „%s“" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Бришем" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Бришем из „%s“" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Бришем „%s“" #: ulng.rsoperexecuting msgid "Executing" msgstr "Извршавам" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Извршавам „%s“" #: ulng.rsoperextracting msgid "Extracting" msgstr "Издвајам" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Издвајам из „%s“ у „%s“" #: ulng.rsoperfinished msgid "Finished" msgstr "Готово" #: ulng.rsoperlisting msgid "Listing" msgstr "Листам" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Листам „%s“" #: ulng.rsopermoving msgid "Moving" msgstr "Премештам" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Премештам из „%s“ у „%s“" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Премештам „%s“ на „%s“" #: ulng.rsopernotstarted msgid "Not started" msgstr "Није покренуто" #: ulng.rsoperpacking msgid "Packing" msgstr "Сажимам" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Сажимам из „%s“ у „%s“" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Сажимам „%s“ у „%s“" #: ulng.rsoperpaused msgid "Paused" msgstr "Застанак" #: ulng.rsoperpausing msgid "Pausing" msgstr "Застанак" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Заказано" #: ulng.rsoperrunning msgid "Running" msgstr "Покренуто" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Постављам својства" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Постављам својства у „%s“" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Постављам својства датотеци „%s“" #: ulng.rsopersplitting msgid "Splitting" msgstr "Дељење" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Делим „%s“ на „%s“" #: ulng.rsoperstarting msgid "Starting" msgstr "Покрећем" #: ulng.rsoperstopped msgid "Stopped" msgstr "Заустављено" #: ulng.rsoperstopping msgid "Stopping" msgstr "Прекидам" #: ulng.rsopertesting msgid "Testing" msgstr "Пробање" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Пробам у „%s“" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Пробам „%s“" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Проверавам збир" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Проверавам збир у „%s“" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Проверавам збир „%s“" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Чекам на приступ изворној датотеци" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Чекам на одзив корисника" #: ulng.rsoperwiping msgid "Wiping" msgstr "Брисање" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Брисање у „%s“" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Брисање „%s“" #: ulng.rsoperworking msgid "Working" msgstr "Рад" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Избриши:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Издвоји без путање:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Начин рада рашчлањивања облика:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ЛБ:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Положај ЛБ:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Опсег тражења ЛБ:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Одредница" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Ниска упита лозинке:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Образуј самоиздвајајуће складиште:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Проба:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Назив врсте складишта:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Вредност" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Придружи прикључак „%s“ са:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Први;последњи;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Онемогући" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Омогући" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Унесите наставак" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Показивач" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Ознака" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Ознака + показивач" #: ulng.rsoptexampletext msgid "Text" msgstr "Текст" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Одвојен прозор;умањен одвојен прозор;површ радњи" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "покретна тачка;Б;К;М;Г" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Пречица %s за „cm_Delete“ ће бити пријављена, тако да може бити коришћена за враћање ове поставке." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Додај пречицу за %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Додај пречицу" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Нисам успео да поставим пречицу" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Измени пречицу" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Наредба" #: ulng.rsopthotkeysdeletetrashcanoverrides #, fuzzy,badformat msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Пречица за „cm_Delete“ има одредницу која заобилази ове поставке. Да ли желите да измените одредницу и користите опште поставке?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Пречици %s за „cm_Delete“ треба да се промени одредница д би се слагала са пречицом %s. Да ли желите да је промените?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Опис" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Уреди пречицу за %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Исправи одредницу" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Пречица" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Пречице" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ништа>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Одреднице" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Постави пречицу за брисање датотеке" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned #, fuzzy,badformat msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Да би ове поставке радиле са пречицом %s, пречица мора да буде додељена „cm_Delete“, али је већ додељена за %s. Да ли желите да је промените?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Пречица %s за „cm_Delete“ је низ за који дугме Шифт не може бити додељено. Највероватније неће радити." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Пречица је у употреби" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Пречица %s већ постоји." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Да ли је доделити %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "користи се за %s у %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "користи за ову наредбу са другачијим одредницама" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Програми за сажимање" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Самоосвежавање" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Понашање" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Сажето" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Боје" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Ступци" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Поставке" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Прилагођене боје" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Брзи списак фасцикли" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Превуци и спусти" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Дугме за списак уређаја" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Придруживање датотека" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Радње над датотекама" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Површи датотека" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Прегледи датотека" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Врсте датотека" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Картице датотека" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Словни ликови" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Истицање" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Пречице" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Иконице" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Занемари списак" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Тастери" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Језик" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Распоред" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Дневник" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Разно" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Миш" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Прикључци" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Брза претрага/услов" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Трака алата" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Алатке" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Напомене" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ништа;Наредбена линија;Брза претрага;Брзи услов" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Лево дугме;Десно дугме;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "на врху списка датотека:после фасцикли (ако се фасцикле приказују пре датотека); на одређеном положају;на дну списка датотека" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Прикључак %s је већ додељен следећим наставцима:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Радни" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Име датотеке" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Име" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Пријављен за" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Осетљиво;&Неосетљиво" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Датотеке;&Фасцикле;Датотеке и фасцикле" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Скрива површ услова када он није у жижи" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "неосетљиво на величину слова;према поставкама локалитета (аАбБвВ);прво велика, па мала слова (АБВабв)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "распореди по имену и прикажи прву;распореди као датотеке и прикажи прву;распореди као датотеке" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Азбучно, водећи рачуна о акцентима;Природан распоред: азбучно и бројевно" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Врх;Дно" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Раздвајач&;&унутрашња наредба;&Спољна наредба;Изборник&" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "не мењај положај;користи исте поставке за нове датотеке;на положају по распореду" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Датотека: %d, фасцикли: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Нисам успео да променим права приступа за „%s“" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Нисам успео да променим власника „%s“" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Датотека" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Фасцикла" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Именована цев" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Не" #: ulng.rspropssocket msgid "Socket" msgstr "Утичница" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Нарочити блок уређај" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Нарочити знаковни уређај" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Симболичка веза" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Непозната врста" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Да (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Излази претраге" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<неименовани образац>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Изаберите фасциклу" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Прикажи помоћ за %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Све" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Наредба" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Преглед" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Бајтова" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Гигабајта" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Килобајта" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Мегабајта" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Терабајта" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Датотека: %d, Фасцикли: %d, Величина: %s (%s бајта)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Нисам успео да направим циљну фасциклу." #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Облик величине датотеке није исправан." #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Нисам успео да поделим датотеку." #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Број делова је више од 100! Да ли да наставим?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Изаберите фасциклу:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Грешка приликом стварања симболичке везе." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Подразумевани текст" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Обичан текст" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Дан(и)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Сат(и)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Минут(и)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Месец(и)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Секунда (е)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Недеља(е)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Година(е)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Разлика" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Уређивач" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Десила се грешка при отварању програма за разлике" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Десила се грешка при отварању уредника" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Десила се грешка при отварању терминала" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Десила се грешка при отварању прегледника" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Прегледник" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Пријавите грешку буболовцу са описом радње коју сте примењивали на следећу датотеку: %s. Притисните %s за наставак или %s за излазак из програма." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Унутрашњи прегледник Двоструког наредника." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Шифровање" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Нова величина" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "Нисам успео да пронађем %s." #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.zh_TW.po���������������������������������������������������������0000644�0001750�0000144�00001212372�12666540554�017655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" "PO-Revision-Date: 2013-04-17 19:07+0800\n" "Last-Translator: Kne luo\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 繁體中文\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "全部" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "設置自訂欄位檢視" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "背景色彩:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "指標外框" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "允許顏色覆蓋" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "使用自訂字型和色彩" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "文字色彩:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "字型:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "大小:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "背景色彩2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "設置檢視:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "指標行背景色彩:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "指標行文字色彩:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "標記行色彩:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "名稱:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "新增欄位" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "自訂欄位:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "預覽" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "選擇範本..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "檢查可用空間 (&H)" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "複製屬性 (&Y)" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "複製擁有者 (&W)" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "複製日期/時間 (&A)" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "修正連結 (&K)" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "丟棄唯讀屬性 (&G)" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "排除空白資料夾 (&X)" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "允許連結 (&L)" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "預留空間 (&R)" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "當不能設定檔案時間、屬性及其它項目時要如何處理" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "使用檔案範本" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "當資料夾存在時 (&E)" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "當檔案存在時 (&F)" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "當不能設定檔案內容時 (&N)" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<沒有範本>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "複製到剪貼簿" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "構建" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "首頁:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "修訂" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "重置 (&R)" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "選擇屬性" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "封存 (&A)" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "壓縮 (&M)" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "資料夾 (&D)" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "加密 (&E)" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "隱藏 (&H)" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "唯讀 (&N)" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "疏鬆 (&P)" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "符號連結 (&S)" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "系統 (&Y)" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "暫存 (&T)" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS 屬性" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "一般屬性" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "當成文字檔 (&X):" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "計算驗證碼..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "為每個檔案建立單獨的驗證碼檔案 (&R)" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "儲存驗證碼檔案到 (&S):" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "校驗驗證碼..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "加入 (&D)" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "連線 (&O)" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "連線管理" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "連線到:" #: tfrmcopydlg.btnaddtoqueue.caption #, fuzzy #| msgid "Add To Queue" msgid "A&dd To Queue" msgstr "加入佇列" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "選項 (&P)" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "將目前設定儲存為預設值 (&V)" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "複製檔案" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "新增佇列" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "佇列 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "佇列 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "佇列 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "佇列 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "佇列 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "檔案/資料夾註解" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "編輯註解 (&D):" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "編碼 (&E):" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "自動比較" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "二進制模式" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "複製區塊至右邊" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "複製區塊至右邊" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "複製區塊至左邊" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "複製區塊至左邊" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "全選 (&A)" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "復原" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "離開 (&X)" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "第一個不同點" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "第一個不同點" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "忽略大小寫" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "忽略空白" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "同步捲動" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "最後一個不同點" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "最後一個不同點" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "註明不同點" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "下一個不同點" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "下一個不同點" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "開啟左邊文件..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "開啟右邊文件..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "繪製背景色彩" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "上一個不同點" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "上一個不同點" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "重新載入 (&R)" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "重新載入" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "儲存" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "儲存" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "另存新檔..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "另存新檔..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "儲存左邊文件" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "儲存左邊文件" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "左邊文件另存新檔..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "左邊文件另存新檔..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "儲存右邊文件" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "儲存右邊文件" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "右邊文件另存新檔..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "右邊文件另存新檔..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "比較" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "比較" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "編碼" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "編碼" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "比較檔案" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "左邊 (&L)" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "右邊 (&R)" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "動作 (&A)" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "選項 (&O)" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "新增新的快速鍵序列" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "移除最後的快速鍵序列" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "僅用於這些控制項" #: tfrmedithotkey.lblparameters.caption #, fuzzy #| msgid "Parameters (each in a separate line):" msgid "&Parameters (each in a separate line):" msgstr "參數(每參數一行) (&P):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "快速鍵:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "關於" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "設置 (&C)" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "設置" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "複製" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "剪下" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "刪除" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "尋找 (&F)" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "尋找" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "找下一個" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "找下一個" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "貼上" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "取代 (&R)" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "取代" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "全選 (&A)" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "全選" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "復原" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "復原" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "關閉" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "離開" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "新增 (&N)" #: tfrmeditor.actfilenew.hint #, fuzzy msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "新增" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "開啟 (&O)" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "開啟" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "儲存" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "另存新檔 (&A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "另存新檔" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "儲存所有檔案 (&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "儲存所有檔案" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "編輯器" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "開啟為" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "儲存為" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "語法高亮 (&S)" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "換行符號" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大小寫視為相異 (&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "從目前位置找起 (&E)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "規則運算式 (&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "僅選擇文字 (&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "僅完整單字 (&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "選項" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "取代 (&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "搜尋 (&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "方向" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "解壓縮檔案" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "解壓時包含完整的路徑名稱 (&U)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "將每個壓縮檔解壓到不同的子資料夾 (名稱用壓縮檔名稱) (&S)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "覆寫已存在檔案 (&V)" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "解壓路徑 (&D):" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "解壓檔案遮罩 (&E):" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "加密檔案的密碼 (&P):" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "新增" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "新增 (&A)" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "下移 (&D)" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "移除 (&V)" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "移除 (&M)" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "移除 (&R)" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "重新命名 (&E)" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "上移 (&U)" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "檔案關聯" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "動作" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "副檔名" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "檔案類型" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "圖示" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "動作:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "指令 (&C):" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "編輯" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "在編輯器開啟" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "檔案路徑" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "完整路徑" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "從命令行取得輸出" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "開啟" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "使用終端機執行" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "在虛擬檔案系統開啟" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "檢視" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "在檢視器開啟" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "等待..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "檔案名稱:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "從:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "關閉時暫存檔會被刪除!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "移到面板 (&T)" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "檢視全部 (&V)" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "現正操作:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "從:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "到:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "設定內容 (&S)" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "設置到所有已選取的檔案 (&A)" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "略過這個檔案 (&P)" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "內容" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文字:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "包含:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "名稱:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路徑:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "群組 (&G)" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "上次存取:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "上次修改:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "上次修改狀態:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進制:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "擁有者 (&W)" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "符號連結:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "類別:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "內容" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "移到檔案 (&G)" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "最近搜尋 (&L)" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "新的搜尋 (&N)" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "載入 (&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "儲存 (&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "儲存並保存\"開始位置\" (&V)" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "當載入範本時將會還原為目前設置的\"開始位置\"。如果你要固定搜尋一個特定的資料夾時就使用它" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "開始 (&S)" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "取消 (&A)" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "使用範本" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "檢視 (&V)" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "傳送到清單列表 (&L)" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "尋找檔案" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "大小寫視為相異 (&I)" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "開始日期 (&D):" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "結束日期 (&E):" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "最小容量 (&I):" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "最大容量 (&Z):" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "在檔案中尋找文字 (&T)" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "允許符號連結 (&Y)" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "尋找不包含這些文字的檔案 (&O)" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "不早於 (&O):" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "搜尋部分檔名 (&H)" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "規則運算式 (&R)" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "取代文字 (&P)" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "選取的資料夾及檔案 (&F)" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "開始時間 (&T):" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "結束時間 (&M):" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "使用搜尋插件 (&U):" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "輸入想要排除搜尋的資料夾名稱 (分隔符號\";\")" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "輸入想要排除搜尋的檔案名稱 (分隔符號\";\")" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "輸入檔案名稱 (分隔符號\";\")" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "資料夾" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "檔案" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "尋找數據" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "屬性 (&B)" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "編碼 (&G):" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "排除子目錄 (&X)" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "排除檔案 (&E)" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "檔案遮罩 (&F)" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "開始位置 (&D)" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "搜尋子目錄 (&B):" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "歷史搜尋 (&P):" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "從清單移除" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "顯示找到的全部項目" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "在檢視器顯示" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "進階" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "載入/儲存" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "結果" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "標準" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "尋找 (&F)" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "尋找" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "大小寫視為相異 (&A)" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmhardlink.caption msgid "Create hard link" msgstr "建立硬式連結" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "連結目標 (&D)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "連結名稱 (&L)" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "合併器" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "另存新檔..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "項目" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "檔案名稱 (&F)" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下移 (&W)" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下移" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "刪除" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "上移 (&U)" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "上移" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "關於 (&A)" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "加入檔案名稱到指令行" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "加入路徑和檔案名稱到指令行" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "複製路徑到指令行" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "簡要" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "簡要檢視" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "計算佔用空間 (&O)" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "變更資料夾" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption #, fuzzy msgid "Change Directory To Parent" msgstr "回到上一層資料夾" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "變更到根資料夾" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "計算驗證碼... (&S)" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "校驗驗證碼... (&V)" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "清除記錄檔案" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "清除記錄視窗" #: tfrmmain.actclosealltabs.caption msgid "Close &All Tabs" msgstr "關閉所有分頁 (&A)" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgid "&Close Tab" msgstr "關閉分頁 (&C)" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "下一個指令" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "將歷史記錄中的下一個指令設置到指令行" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "上一個指令" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "將歷史記錄中的上一個指令設置到指令行" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "完整" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "欄位檢視" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "比較檔案內容 (&C)" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "比較資料夾" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "比較資料夾" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "顯示內文選單" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "複製" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "複製包含完整路徑的檔案名稱" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "複製檔案名稱到剪貼簿 (&F)" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "無需確認複製檔案" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "複製到同面板下" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "複製 (&C)" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "顯示佔用空間 (&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "剪下 (&T)" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "資料夾歷史記錄" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "常用資料夾列表 (&H)" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "編輯" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "編輯註解... (&M)" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "編輯新檔案" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "變更路徑" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "交換面板 (&P)" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "解壓縮檔案... (&E)" #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "檔案關聯... (&A)" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "合併檔案... (&B)" #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "顯示檔案內容 (&F)" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "分割檔案... (&I)" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "切換到指令行" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "移到清單中第一個檔案" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "移到清單中最後一個檔案" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "建立硬式連結... (&H)" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "內容 (&C)" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "水平面板模式 (&H)" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "鍵盤配置 (&K)" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左面板 &= 右面板" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "開啟左面板磁碟清單" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "從剪貼簿載入所選項目 (&B)" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "從檔案載入所選項目 (&L)..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "建立資料夾" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "選擇所有相同副檔名 (&X)" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "反向選擇 (&I)" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "全選 (&S)" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "取消所選群組... (&U)" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "選擇群組 (&G)" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "取消全選 (&U)" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "最小化視窗" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "多重命名工具 (&R)" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "連接網路... (&C)" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "中斷連接網路 (&D)" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "快速連接網路 (&Q)" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "新增分頁 (&N)" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "切換到下一個分頁 (&T)" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "開啟" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "嘗試開啟壓縮檔" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "開啟 bar 檔案" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "在新分頁開啟資料夾 (&F)" #: tfrmmain.actopenvirtualfilesystemlist.caption msgid "Open &VFS List" msgstr "開啟虛擬檔案系統清單 (&V)" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "操作檢視器 (&V)" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "選項... (&O)" #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "壓縮檔案... (&P)" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "設置分隔位置" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "貼上 (&P)" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "切換到上一個分頁 (&P)" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "快速篩選" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "快速搜尋" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "快速檢視面板 (&Q)" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "重新整理 (&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "移動" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "移動/重新命名時無需確認" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "重新命名" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "重新命名分頁 (&R)" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "回復所選項目 (&R)" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "反向排序 (&V)" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "右面板 &= 左面板" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "開啟右面板磁碟清單" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "開啟終端機 (&T)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "儲存所選項目 (&V)" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "儲存所選項目到檔案... (&E)" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "搜尋... (&S)" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "變更檔案屬性... (&A)" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "鎖定並可在新分頁開啟資料夾 (&T)" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "普通 (&N)" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "鎖定 (&L)" #: tfrmmain.actsettaboptionpathresets.caption msgid "Locked with &Directory Changes Allowed" msgstr "鎖定並允許在目前分頁變更資料夾 (&D)" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "開啟" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "使用系統預設的檔案關聯開啟" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "顯示底部選單" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "顯示指令行歷史記錄" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "選單" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "顯示/隱藏系統檔案 (&H)" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "依屬性排序 (&A)" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "依日期排序 (&D)" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "依副檔名排序 (&E)" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "依檔名排序 (&N)" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "依大小排序 (&S)" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "啟用/停用不顯示在忽略清單下所設定的檔案或資料夾" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "建立符號連結... (&L)" #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "目標面板 &= 來源面板" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "測試壓縮檔 (&T)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "縮圖" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "縮圖檢視" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "傳送指標行上的資料夾到左視窗" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "傳送指標行上的資料夾到右視窗" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "取消選擇所有相同副檔名 (&T)" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "檢視" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "顯示路徑歷史記錄" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "移到下一個歷史記錄" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "移到上一個歷史記錄" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "參觀 Double Commander 網站 (&V)" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "抹除檔案" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "離開" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "資料夾" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "終端機" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用資料夾清單" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "在左面板顯示右面板目前的資料夾" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "移到個人資料夾" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "移到根資料夾" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "回到上一層資料夾" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用資料夾列表" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "在右面板顯示左面板目前的資料夾" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "路徑" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "複製..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "建立連結..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "清除" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隱藏" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "全選" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移動..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "建立符號連結..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "分頁選項" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "還原" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "開始" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "取消" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "指令 (&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "設置 (&O)" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "檔案 (&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "標記 (&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "網路" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "顯示 (&S)" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "選項 (&O)" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "分頁 (&T)" #: tfrmmain.tbchangedir.caption #, fuzzy msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "複製" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "剪下" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "刪除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "編輯" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "貼上" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "熱鍵" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "定義... (&D)" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "選擇預先定義好的類型 (&R) :" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "建立新資料夾" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "輸入新資料夾名稱 (&I):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "新的大小" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "高 :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG 壓縮品質" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "寬 :" #: tfrmmodview.rbbmp.caption #, fuzzy msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption #, fuzzy msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text #, fuzzy msgid "Height" msgstr "高度" #: tfrmmodview.tequality.text #, fuzzy msgid "80" msgstr "&20/80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "寬度" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "載入 (&L)" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "全部重置 (&A)" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "儲存 (&S)" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "多重命名工具" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "啟用 (&B)" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "使用規則運算式 (&X)" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "使用替代 (&U)" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] 副檔名" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "計數器" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "尋找 && 取代" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "記錄結果" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "名稱遮罩" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "預先配置" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "副檔名 (&E)" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "尋找 (&F)" #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "間隔 (&I)" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "檔案名稱 (&N)" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "取代 (&P)" #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "初始編號 (&T)" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "寬度 (&W)" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] 計數器" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] 日" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] 日 (2位數)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] 每週日數 (縮寫, 例: \"mon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] 每週日數 (整字, 例: \"monday\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] 位置 x 的字元" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] 從 x 到 y 位置的字元" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] 小時" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] 小時 (2位數)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] 分" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] 分 (2位數)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] 月" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] 月 (2位數)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] 月份名稱 (縮寫, 例: \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] 月份名稱 (整字, 例: \"january\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] 名稱" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] x 位置的字元" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] 從 x 到 y 位置的字元" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "時間..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "副檔名..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名稱..." #: tfrmmultirename.miplugin.caption #, fuzzy msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "插件" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] 秒" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] 秒 (2位數)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] 年 (2位數)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] 年 (4位數)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "舊檔名" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "新檔名" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "檔案路徑" #: tfrmopenwith.caption msgid "Choose an application" msgstr "請選擇一個應用程式" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "自訂指令" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "儲存檔案關聯" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "設置所選擇的應用程式為預設動作" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "檔案類型已開啟: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "多重檔案名稱" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "多重網址" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "單一檔案名稱" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "單一網址" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "套用 (&A)" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "選項" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "請選擇一個子頁面,這個頁面不包含任何設定。" #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "自動設置 (&U)" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "刪除 (&E)" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "重新命名 (&R)" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "除錯模式 (&B)" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "啟用 (&N)" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "顯示終端機輸出結果 (&H)" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "選項" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "加入壓縮檔 (&I):" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "副檔名 (&X):" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "解壓縮 (&T):" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "清單 (&L):" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "清單完成 (可選) (&F):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "清單格式 (&M):" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "清單開始 (可選) (&G):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "壓縮器 (&H):" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "描述 (&S):" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "額外" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "一般" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "當大小,日期或屬性改變時更新 (&S)" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "在下列路徑及子資料夾時停用更新 (&P):" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "當檔案建立,刪除或重新命名時更新 (&F)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "當應用程式在背景模式下執行時停用更新 (&B)" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "停用自動更新" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "更新檔案清單" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "總是顯示通知區域圖示 (&W)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "自動隱蔵未掛載的裝置 (&H)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "當最小化時顯示通知區域圖示 (&V)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "僅允許同時間執行一個 DC 程式 (&L)" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "你可以在這裡輸入一個或多個磁碟及掛載位置 (分隔符號\";\")" #: tfrmoptionsbehavior.lbldrivesblacklist.caption #, fuzzy #| msgid "Drives blacklist" msgid "Drives &blacklist" msgstr "磁碟黑名單 (&B) " #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "依欄寬裁剪文字 (&T)" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "水平列 (&H)" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "垂直列 (&V)" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "自動填滿欄位 (&U)" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "顯示格線" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "自動大小欄位" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "自動大小欄位 (&Z):" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "指令行歷史記錄 (&M)" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "資料夾歷史記錄 (&D)" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "檔案遮罩歷史記錄 (&F)" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "儲存設置 (&V)" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "搜尋/取代歷史記錄 (&H)" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "設定檔案儲存位置" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "在離開程式時儲存" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "在指令行設置" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "程式資料夾 (可攜版) (&R)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "個人資料夾 (&U)" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "全部" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "新增" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "儲存為" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "儲存" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允許顏色覆蓋" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "一般" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "指標外框" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "背景色彩:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景色彩2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "設置檔案系統欄位 (&F):" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "指標行背景色彩:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "指標行文字色彩:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "字型:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "大小:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "文字色彩:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "標記行色彩:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "新增欄位" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "名稱:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "路徑:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "剪下" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "貼上" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption #, fuzzy #| msgid "Show confirmation dialog after drop" msgid "&Show confirmation dialog after drop" msgstr "顯示確認對話盒在拖曳操作後 (&S)" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption #, fuzzy #| msgid "Show file system" msgid "Show &file system" msgstr "顯示檔案系統 (&F)" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption #, fuzzy #| msgid "Show free space" msgid "Show fr&ee space" msgstr "顯示可用空間 (&E)" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy #| msgid "Show label" msgid "Show &label" msgstr "顯示標籤 (&L)" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "磁碟清單" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "背景色彩 (&K)" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "背景色彩 (&K)" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "儲存" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "元件屬性" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "前景色彩 (&R)" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "前景色彩 (&R)" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "文字遮罩 (&T)" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "使用通用格式設定值 (&G)" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "使用本處格式設定值 (&L)" #: tfrmoptionseditorcolors.textboldcheckbox.caption #, fuzzy #| msgid "Bold" msgid "&Bold" msgstr "粗體 (&B)" #: tfrmoptionseditorcolors.textboldradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textboldradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textboldradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textitaliccheckbox.caption #, fuzzy #| msgid "Italic" msgid "&Italic" msgstr "斜體 (&I)" #: tfrmoptionseditorcolors.textitalicradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textitalicradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textitalicradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "刪除線 (&S)" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption #, fuzzy #| msgid "Underline" msgid "&Underline" msgstr "底線 (&U)" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "反向 (&V)" #: tfrmoptionseditorcolors.textunderlineradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "關 (&F)" #: tfrmoptionseditorcolors.textunderlineradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "開 (&N)" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "剪下" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "貼上" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "重新命名" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "新增" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "新增 (&A)" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "下移 (&D)" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "編輯" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "移除 (&V)" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "移除 (&M)" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "移除 (&R)" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "重新命名 (&E)" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "上移 (&U)" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "動作" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "副檔名" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "檔案類型" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "圖示" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "動作:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "指令 (&C):" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "參數 (&S):" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始路徑 (&H):" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "編輯" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "在編輯器開啟" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "從命令行取得輸出" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "開啟" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "使用終端機執行" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "檢視" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "在檢視器開啟" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "顯示確認視窗在:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "複製操作 (&Y)" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "刪除操作 (&D)" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "刪除到資源回收筒 (與 Shift 鍵同按為徹底刪除) (&T)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "刪除到資源回收筒操作 (&E)" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "丟棄唯讀屬性(&R)" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "移動操作 (&M)" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "搜尋部分檔名 (&S)" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "處理檔案/資料夾的註解 (&P)" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "重新命名檔案名稱時不包含副檔名 (&F)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "顯示分頁選擇面板在複製/移動對話盒 (&W)" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "略過操作有錯誤的檔案並將錯誤寫到記錄視窗 (&K)" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "執行操作" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "檔案搜尋" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "使用者介面" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "檔案操作的緩衝區大小 (單位: KB) (&B):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "顯示操作處理進度在 (&I):" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "檔案抹除次數: (&N)" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "使用記憶體映射搜尋檔案中的文字 (&X)" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "使用檔案串流搜尋檔案中的文字 (&U)" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允許顏色覆蓋" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "使用框架指標 (&F)" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "使用漸層指示器 (&G)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "使用反白選取 (&S)" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "指標外框" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "磁碟可用空間指示器" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgid "Bac&kground:" msgstr "背景色彩 (&K):" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "背景色彩2 (&R):" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "指標行背景色彩 (&U):" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "指標行文字色彩 (&X):" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "非現用面板的亮度級別 (&B):" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "指示器背景色彩 (&D):" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "指示器前景色彩 (&I):" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "標記色彩 (&M):" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "文字色彩 (&E):" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "不要載入檔案清單直到分頁已可用 (&N)" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "顯示方括號在資料夾項目的兩端 (&H)" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "高亮顯示新檔及更新檔案 (&G)" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "載入檔案清單在獨立的執行緒 (&F)" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "載入檔案清單後再讀取圖示 (&T)" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "顯示系統及隱藏檔案 (&Y)" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "當按下 <空白鍵> 選擇檔案後, 移動到下一個檔案 (就像按下 <INSERT>) (&W)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "格式" #: tfrmoptionsfilesviews.gbsorting.caption #, fuzzy msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "排序" #: tfrmoptionsfilesviews.lblcasesensitivity.caption #, fuzzy #| msgid "Case sensitivity:" msgid "Case s&ensitivity:" msgstr "區分大小寫 (&E):" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "格式不正確" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "日期及時間格式 (&D):" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "檔案大小格式 (&Z):" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "Insert new files" msgid "&Insert new files" msgstr "插入新檔案 (&I):" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "排序資料夾 (&R):" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "排序方式 (&S):" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "移動更新檔案 (&M):" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "刪除 (&E)" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "範本..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "檔案類型色彩 (可用拖曳排序)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "類別屬性 (&T):" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "類別色彩 (&L):" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "類別遮罩 (&M):" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "類別名稱 (&N):" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "編輯器字型 (&E)" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "記錄器字型 (&L)" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "主要字型 (&F)" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "檢視器閱讀模式字型 (&B)" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "檢視器字型 (&V)" #: tfrmoptionshotkeys.btnaddhotkey.caption #, fuzzy #| msgid "Add hotkey" msgid "Add &hotkey" msgstr "新增熱鍵 (&H)" #: tfrmoptionshotkeys.btndeletehotkey.caption #, fuzzy #| msgid "Delete hotkey" msgid "&Delete hotkey" msgstr "刪除熱鍵 (&D)" #: tfrmoptionshotkeys.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "編輯熱鍵 (&E)" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "篩選 (&F):" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "類別 (&A):" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "指令 (&M):" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "快速鍵檔案 (&S):" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "指令" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "熱鍵" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "描述" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "熱鍵" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "參數" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "控制項" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "在下列路徑及子資料夾時停用 (&P):" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "在選單項目顯示圖示 (&M)" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "顯示覆蓋圖示,例如捷徑 (&V)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "停用特定的圖示" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "選單圖示" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "圖示大小" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "顯示圖示在檔案名稱左邊" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "全部 (&L)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "所有已關聯的檔案 + 執行檔/捷徑 (較慢) (&E)" #: tfrmoptionsicons.rbiconsshownone.caption #, fuzzy msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "不顯示圖示 (&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "僅標準圖示 (&S)" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "加入已選取項目的名稱 (&D)" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "加入已選取項目的完整路徑名稱 (&F)" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "忽略/不顯示下列的檔案及資料夾 (&I):" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "儲存位置 (&S):" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "使用左鍵及右鍵變更資料夾 (類似 Lynx 操作) (&F)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "輸入焦點" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+字母 (&E)" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+字母 (&T)" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters" msgstr "字母 (&L)" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "平面按鈕 (&F)" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "平面介面 (&N)" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "平面按鈕 (&U)" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "顯示可用空間指示器在磁碟標籤 (&E)" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "顯示記錄視窗 (&G)" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "顯示操作面板在背景模式" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "顯示處理進度在選單列" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "顯示指令行 (&I)" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "顯示當前資料夾 (&Y)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "顯示磁碟按鈕 (&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "顯示可用空間標籤 (&P)" #: tfrmoptionslayout.cbshowdriveslistbutton.caption #, fuzzy #| msgid "Show d&rives list button" msgid "Show drives list bu&tton" msgstr "顯示碟磁清單按鈕 (&T)" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "顯示功能鍵按鈕 (&K)" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "顯示主要選單 (&M)" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "顯示工具列 (&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "顯示簡短的可用空間標籤 (&L)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "顯示狀態列 (&S)" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "顯示欄位名稱 (&H)" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "顯示資料夾分頁 (&W)" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "顯示終端機視窗 (&R)" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "顯示兩個磁碟按鈕列 (&X)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " 畫面佈置 " #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "壓縮/解壓縮 (&P)" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "複製/移動/建立硬式連結/建立符號連結 (&Y)" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "建立/刪除資料夾 (&T)" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "記錄錯誤 (&E)" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "建立記錄檔案 (&R):" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "記錄資訊 (&I)" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "記錄操作成功 (&S)" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "檔案系統插件 (&F)" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "檔案操作記錄檔案" #: tfrmoptionslog.gblogfileop.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "操作記錄" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "操作狀態" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "移除已不存在檔案的縮圖快取 (&R)" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "當切換磁碟時總是移到根目錄 (&G)" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "顯示警告訊息 (&W)" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "儲存縮圖快取 (&S)" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "縮圖" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "像素" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "縮圖大小 (&T):" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgctxt "TFRMOPTIONSMOUSE.CBSELECTIONBYMOUSE.CAPTION" msgid "&Selection by mouse" msgstr "使用滑鼠選取項目 (&S)" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "TFRMOPTIONSMOUSE.GBSCROLLING.CAPTION" msgid "Scrolling" msgstr "滾輪" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "選取項目" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "TFRMOPTIONSMOUSE.LBLMOUSEMODE.CAPTION" msgid "&Mode:" msgstr "模式 (&M):" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINE.CAPTION" msgid "&Line by line" msgstr "一次捲動行數 (&L)" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLLINEBYLINECURSOR.CAPTION" msgid "Line by line &with cursor movement" msgstr "一次捲動一行 + 指標行跟隨移動 (&W)" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "TFRMOPTIONSMOUSE.RBSCROLLPAGEBYPAGE.CAPTION" msgid "&Page by page" msgstr "一次捲動一頁 (&P)" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "設置 (&F)" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "啟用 (&N)" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "移除 (&R)" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "調整 (&T)" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "搜尋插件可允許使用其他替代搜尋演算法或外部工具搜尋 (像 \"locate\" 等)" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "壓縮插件用於支援特定壓縮格式的處理" #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "內容插件可允許在檔案清單顯示 MP3 標籤或圖片屬性等延伸的檔案詳細資料, 或是在搜尋和多重命名工具中使用" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "檔案系統插件可允許存取一些作業系統上罕見的檔案系統, 或是像 Palm/PocketPC 等外部裝置" #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "檢視器插件可允許顯示圖片,試算表,資料庫等檔案格式在檢視器" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "啟動" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "插件" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "登錄對象" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "搜尋插件 (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "壓縮插件 (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "內容插件 (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "檔案系統插件 (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "檢視器插件 (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "開頭 (名稱開頭必需符合第一個輸入的字元) (&B)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "結尾 (名稱結尾必需符合最後輸入的字元) (&D)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "選項" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "精準名稱比對" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "區分大小寫" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "搜尋下列項目" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "點擊分頁後立即啟動該分頁 (&P)" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "總是顯示分頁 (&S)" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "關閉所有分頁時需確認 (&F)" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "限制分頁標題長度為 (&L):" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "顯示星號在鎖定的分頁 (&W)" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "允許分頁多行顯示 (&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Up 開啟新分頁時切換到該分頁 (&U)" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "開啟新分頁於目前分頁旁邊 (&N)" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "顯示分頁關閉按鈕 (&B)" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "資料夾分頁" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "字元" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "分頁位置 (&B):" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "複製按鈕 (&L)" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "刪除 (&D)" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "編輯熱鍵 (&K)" #: tfrmoptionstoolbar.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "插入新按鈕 (&I)" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "其它..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "移除熱鍵 (&Y)" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "平面按鈕 (&F)" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "輸入指令參數 (每指令一行)" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "外觀" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "工具列大小 (&B):" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "指令 (&D):" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "參數 (&S):" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "熱鍵:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "圖示 (&N):" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "圖示大小 (&Z):" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "指令 (&M):" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "參數 (&P):" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "開始路徑 (&H):" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "工具提示 (&T):" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "按鈕類型" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "在執行程式後保持終端機視窗開啟 (&K)" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "使用終端機執行 (&E)" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "使用外部程式 (&U)" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "額外參數 (&D)" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "執行程式路徑 (&P)" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "新增 (&D)" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "套用 (&P)" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "刪除 (&E)" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "範本..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "顯示工具提示" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "檔案類型自訂提示" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "類別提示 (&H):" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "類別遮罩 (&M):" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "類別名稱 (&N):" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "檢視器閱讀模式" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "範例" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "閱讀模式背景色彩 (&B)" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "閱讀模式字型色彩 (&F)" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "閱讀模式欄位數量 (&N)" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "設置 (&F)" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "壓縮檔案" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "替每個選取的檔案/資料夾建立各自的壓縮檔案 (&R)" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "建立自解壓檔案 (&X)" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "加密 (&Y)" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "移動到壓縮檔 (&V)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "分片壓縮 (&M)" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "先用 TAR 打包檔案 (&U)" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "包含路徑名稱 (僅遞迴) (&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "壓縮到這個檔案:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "壓縮程式" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "解壓所有檔案並執行 (&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解壓縮並執行 (&U)" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "壓縮檔案內容" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "屬性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "壓縮率:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日期:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "方式:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "原始大小:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "檔案:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "壓縮大小:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "壓縮者:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "時間:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "關閉篩選面板" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "輸入要搜尋或篩選的文字" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "大小寫視為相異" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "資料夾" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "檔案" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "比對開頭" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "比對結尾" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "篩選" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "切換搜尋或篩選" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "插件" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "值" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "關閉 (&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "說明 (&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "確定 (&O)" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "選擇要插入的字元: (&S)" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmsetfileproperties.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "變更屬性" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Sticky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "封存" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "建立日期:" #: tfrmsetfileproperties.chkhidden.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "隱藏" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "存取日期:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "修改日期:" #: tfrmsetfileproperties.chkreadonly.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "唯讀" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "包含子資料夾" #: tfrmsetfileproperties.chksystem.caption #, fuzzy msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "系統" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "時間戳記內容" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "屬性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "群組" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色欄位代表不可改變的數值)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "擁有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文字:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "執行" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(灰色欄位代表不可改變的數值)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "8進制:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "讀取" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "寫入" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "分割" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "檔案名稱" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "分割檔大小及數量" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "目標資料夾 (&T)" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "來源檔案 (&S)" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "分割檔數量 (&N)" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "構建" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "修訂" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "建立符號連結" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "連結目標 (&D)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "連結名稱 (&L)" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "關閉" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "名稱" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "名稱" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "比較" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "增加" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消 (&C)" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "變更 (&H)" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "預設值 (&F)" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "確定 (&O)" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "移除 (&R)" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "調整插件" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "依內容檢測壓縮類型 (&T)" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "可以刪除檔案 (&L)" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "支持加密 (&N)" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "顯示為普通檔案 (隱藏壓縮器圖示) (&W)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "支持在記憶體進行壓縮 (&K)" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "可以修改已存在的壓縮檔 (&M)" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "壓縮檔可包含複數檔案 (&A)" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "可以建立新壓縮檔 (&V)" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "支持選項對話盒 (&U)" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "允許在壓縮檔搜尋文字 (&G)" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "描述 (&D):" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "檢測字串 (&E):" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "副檔名 (&E):" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "旗標:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "名稱 (&N):" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "插件 (&P):" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "插件 (&P):" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "關於檢視器..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "顯示關於訊息" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "複製檔案" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "複製檔案" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "刪除檔案" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "刪除檔案" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "下一個 (&N)" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "載入下一個檔案" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "上一個 (&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "載入上一個檔案" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "水平翻轉" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "水平翻轉" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "移動檔案" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "移動檔案" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "重新載入" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "重新載入目前檔案" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "旋轉180度" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "旋轉180度" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "旋轉270度" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "旋轉270度" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "旋轉90度" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "旋轉90度" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "另存新檔..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "另存新檔..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "延展" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "延展圖片" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "複製" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "複製" #: tfrmviewer.btncuttuimage.hint #, fuzzy msgid "Crop" msgstr "裁剪" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "刪除" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "刪除" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "全螢幕" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "高亮" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "水平翻轉" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "移動" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "移動" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "繪圖" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "紅眼" #: tfrmviewer.btnresize.hint msgid "Resize" msgstr "調整大小" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "復原" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "放大" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "縮小" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "檢視器" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "投影片放映" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "鉛筆" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption #, fuzzy msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "高亮" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "繪圖" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "投影片放映" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "檢視" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "關於" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "顯示為二進制 (&B)" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "複製到剪貼簿" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "編輯 (&E)" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "編碼 (&C)" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "離開 (&X)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "檔案 (&F)" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "全螢幕" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "圖像" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "顯示為十六進制 (&H)" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "圖片(&I)" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "顯示為閱讀模式 (&O)" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "水平翻轉" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "插件" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "預覽" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "列印..." #: tfrmviewer.mirotate.caption #, fuzzy msgid "Rotate" msgstr "旋轉" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "儲存" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "另存新檔..." #: tfrmviewer.miscreenshot.caption msgid "Screenshot" msgstr "截圖" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "搜尋" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "搜尋下一個" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "搜尋上一個" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "全選" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "延展" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "顯示為文字 (&T)" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "檢視 (&V)" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "顯示為自動換行文字 (&W)" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "放大" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "縮小" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "複製到剪貼簿" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "全選" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "開始 (&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "停止 (&T)" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "檔案操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "總是顯示在最上層" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "可使用\"拖曳\"來改變操作的佇列順序" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "新增佇列" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "顯示在分離視窗" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "移到佇列頂端" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "移到佇列底部" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "佇列" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "移出佇列" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "佇列 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "佇列 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "佇列 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "佇列 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "佇列 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "顯示在分離視窗" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "暫停全部 (&P)" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "當檔案存在時" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "執行在背景模式 (單獨連接)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption #, fuzzy msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "當檔案存在時" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "取消快速篩選" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "取消目前操作" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "剪貼簿沒有包含任何可用的工具列資料。" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "屬性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日期" #: ulng.rscolext msgid "Ext" msgstr "副檔名" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名稱" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "大小" #: ulng.rsconfcolalign msgid "Align" msgstr "對齊" #: ulng.rsconfcolcaption msgid "Caption" msgstr "標題" #: ulng.rsconfcolconfig msgid "Config" msgstr "設置" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "刪除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "欄位內容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移動" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "寬度" #: ulng.rsconfcustheader msgid "Customize column" msgstr "自訂欄位" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "複製 (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "所有操作已完成" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "所有操作進度 %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "放棄 (&O)" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全部 (&L)" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "增加 (&P)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "取消 (&C)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "繼續 (&C)" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "複製進去 (&I)" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "全部複製進去 (&A)" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "離開程式 (&X)" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "忽略全部 (&G)" #: ulng.rsdlgbuttonno msgid "&No" msgstr "否 (&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "無 (&E)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "確定 (&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "覆蓋 (&O)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "覆蓋全部 (&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "覆蓋全部舊檔 (&D)" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "重新命名 (&E)" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "回復 (&R)" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "重試 (&T)" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "略過 (&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "略過全部 (&K)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "是 (&Y)" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "計算檔案及資料夾" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "計算驗證碼..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "校驗驗證碼..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "複製檔案" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "刪除檔案" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "移動檔案" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "暫停 (&S)" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "開始 (&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "佇列" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "速度 %s/秒" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "速度 %s/秒, 剩餘時間 %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "分割" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "抹除檔案" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<沒有標籤>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<沒有媒體>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander 內部編輯器。" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "檔案名稱:" #: ulng.rseditnewopen msgid "Open file" msgstr "開啟檔案" #: ulng.rseditsearchback msgid "&Backward" msgstr "前一個(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "搜尋" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "下一個 (&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "取代" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "詢問;覆蓋;複製進去;略過" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "詢問;覆蓋;覆蓋舊檔;略過" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "詢問;不要設置;忽略錯誤" #: ulng.rsfilterstatus msgid "FILTER" msgstr "篩選" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "定義範本" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s 級" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "全部 (不限層次)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "僅目前資料夾" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "資料夾 %s 不存在!" #: ulng.rsfindfound msgid "Found: %d" msgstr "找到: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "儲存搜尋範本" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "範本名稱:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "已掃描: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "掃描" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "尋找檔案" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "開始" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "可用 %sB,容量 %sB" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%sB 可用" #: ulng.rsfuncatime msgid "Access date/time" msgstr "存取日期/時間" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "屬性" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "註解" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "壓縮大小" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "建立日期/時間" #: ulng.rsfuncext msgid "Extension" msgstr "副檔名" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "群組" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "連結" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "修改日期/時間" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "名稱" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "名稱但不含副檔名" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "擁有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "路徑" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "大小" #: ulng.rsfunctype msgid "Type" msgstr "類型" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "建立硬式連結發生錯誤。" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "複製/移動對話盒" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "比對器" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "編輯器" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "尋找檔案" #: ulng.rshotkeycategorymain msgid "Main" msgstr "主視窗" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "檢視器" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "連結完成" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "取消選擇遮罩" #: ulng.rsmarkplus msgid "Select mask" msgstr "選擇遮罩" #: ulng.rsmaskinput msgid "Input mask:" msgstr "輸入遮罩" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "設置自訂欄位" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "設置這個自訂欄位檢視" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "動作" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "編輯" #: ulng.rsmnueject msgid "Eject" msgstr "退出" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "掛載" #: ulng.rsmnunew #, fuzzy msgctxt "ulng.rsmnunew" msgid "New" msgstr "新增" #: ulng.rsmnunomedia msgid "No media available" msgstr "沒有可用的媒體" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "開啟" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "開啟..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "其它..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "排序方式" #: ulng.rsmnuumount msgid "Unmount" msgstr "卸載" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "檢視" #: ulng.rsmsgaccount msgid "Account:" msgstr "帳戶:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "壓縮器命令行的額外參數" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "你不能複製/移動檔案【%s】到相同目錄" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "無法刪除資料夾【%s】" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "變更目錄到資料夾【%s】失敗!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "你確定要關閉所有非現用的分頁嗎?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "這個分頁【%s】已鎖定! 仍要關閉嗎?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "你確定要退出嗎?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "你確定要複製這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "你確定要複製所選擇的【%s】嗎?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "你確定要刪除這個部份複製的檔案嗎?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "你確定要刪除這 %d 個被選擇的檔案/資料夾到資源回收筒嗎?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "你確定要刪除所選擇的【%s】嗎?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "你確定要刪除所選擇的【%s】到資源回收筒嗎?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "無法刪除【%s】到資源回收筒! 要直接刪除嗎?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "磁碟不存在" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "輸入檔案副檔名:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "輸入名稱:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "壓縮檔資料 CRC 錯誤" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "資料損壞" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "無法連接到伺服器:【%s】" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "無法複製檔案 %s 到 %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "目標已存在名稱為【%s】的資料夾。" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "日期 %s 不被支援" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "資料夾 %s 已存在!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "使用者中止執行" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "關閉檔案發生錯誤" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "無法建立檔案" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "壓縮檔裡沒有檔案" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "無法打開已存在的檔案" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "讀取檔案發生錯誤" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "寫入檔案發生錯誤" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "無法建立資料夾 %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "無效的連結" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "未找到檔案" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "記憶體不足" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "不支持的功能!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "內文選單指令發生錯誤" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "載入設置時發生錯誤" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "規則運算式語法錯誤!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "無法重新命名檔案 %s 為 %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "無法儲存檔案關聯!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "無法儲存檔案" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "無法替【%s】設置屬性" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "無法替【%s】設置日期/時間" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "無法替【%s】設置擁有者/群組" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "緩沖區太小" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "要壓縮的檔案太多" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "未知的壓縮格式" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "名稱" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "檔案 %s 已變更, 是否要儲存?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "檔案 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "檔案操作啟動" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "部份檔案操作尚未完成。關閉 Double Commander 可能會使資料遺失。" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "檔案 %s 是唯讀檔。仍要刪除嗎?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "這個檔案【%s】的容量對於目標檔案系統來說太大!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "資料夾 %s 已存在, 是否要覆蓋?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "你確定要允許符號連結【%s】嗎?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "路徑" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "名稱:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "指令行發生錯誤" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "無效的檔案名稱" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "無效的設定檔格式" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "無效的路徑" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "路徑 %s 包含禁用字元 " #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "這不是可用的插件!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "這個插件是替 TotalDouble Commander 的 %s 所建立。%s不能正常運作在 Double Commander 的 %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "無效的引用" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "無效的選擇" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "載入檔案清單..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "複製檔案 %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "刪除檔案 %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "錯誤:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "解壓縮檔案 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "資訊: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "建立連結 %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "建立資料夾 %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "移動檔案 %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "壓縮檔案 %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "移除資料夾 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "建立符號連結 %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "測試檔案完整性 %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "主要密碼" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "請輸入主要密碼:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "新增檔案" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "將解壓縮下一個分卷檔" #: ulng.rsmsgnofiles msgid "No files" msgstr "沒有檔案" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "尚未選擇檔案" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "目標磁碟沒有足夠的可用空間, 仍要繼續嗎?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "目標磁碟沒有足夠的可用空間, 是否要重試?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "無法刪除檔案 %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "未實現" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "密碼:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "密碼不相同!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "請輸入密碼:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "密碼 (防火牆):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "請再次輸入密碼來驗證" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "加入【%s】(&A)" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "設置 (&C)" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "移除【%s】(&D)" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "預先配置檔【%s】已存在。是否要覆蓋?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "你確定要重新命名/移動這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "你確定要重新命名/移動所選擇的【%s】嗎?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "請重新啟動 Double Commander 以套用變更" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "選擇: %s / %sB | 檔案: %d / %d | 資料夾: %d / %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "請僅選擇驗證碼檔案!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "請選擇下一個分卷檔位置" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "設置磁碟標籤" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "重新命名分頁" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "新的分頁名稱:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "目標路徑:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "選擇了太多檔案。" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl #, fuzzy msgid "URL:" msgstr "網址:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "使用者名稱:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "使用者名稱 (防火牆):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "磁碟標籤:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "請輸入磁碟大小:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "你確定要抹除這 %d 個被選擇的檔案/資料夾嗎?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "你確定要抹除所選擇的【%s】嗎?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "不變更;大寫;小寫;首字大寫;每個單字首字大寫;" #: ulng.rsoperaborted msgid "Aborted" msgstr "已放棄" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "正在計算驗證碼" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "正在【%s】計算驗證碼" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "正在計算【%s】的驗證碼" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "正在計算" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "正在計算【%s】" #: ulng.rsopercombining msgid "Joining" msgstr "正在合併" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "正在【%s】合併檔案到【%s】" #: ulng.rsopercopying msgid "Copying" msgstr "正在複製" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "正在從【%s】複製到【%s】" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "正在複製【%s】到【%s】" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "正在建立資料夾" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "正在建立資料夾【%s】" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "正在刪除" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "正在【%s】刪除" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "正在刪除【%s】" #: ulng.rsoperexecuting msgid "Executing" msgstr "正在執行" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "正在執行【%s】" #: ulng.rsoperextracting msgid "Extracting" msgstr "正在解壓縮" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "正在從【%s】解壓縮到【%s】" #: ulng.rsoperfinished msgid "Finished" msgstr "已完成" #: ulng.rsoperlisting msgid "Listing" msgstr "正在列表" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "正在列表【%s】" #: ulng.rsopermoving msgid "Moving" msgstr "正在移動" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "正在從【%s】移動到【%s】" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "正在移動【%s】到【%s】" #: ulng.rsopernotstarted msgid "Not started" msgstr "尚未開始" #: ulng.rsoperpacking msgid "Packing" msgstr "正在壓縮" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "正在從【%s】壓縮到【%s】" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "正在壓縮【%s】到【%s】" #: ulng.rsoperpaused msgid "Paused" msgstr "已暫停" #: ulng.rsoperpausing msgid "Pausing" msgstr "正在暫停" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "已佇列" #: ulng.rsoperrunning msgid "Running" msgstr "正在執行" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "正在設置內容" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "正在【%s】設置內容" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "正在設置【%s】的內容" #: ulng.rsopersplitting msgid "Splitting" msgstr "正在分離" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "正在分離【%s】到【%s】" #: ulng.rsoperstarting msgid "Starting" msgstr "正在開始" #: ulng.rsoperstopped msgid "Stopped" msgstr "已停止" #: ulng.rsoperstopping msgid "Stopping" msgstr "正在停止" #: ulng.rsopertesting msgid "Testing" msgstr "正在測試" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "正在【%s】測試" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "正在測試【%s】" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "正在校驗驗證碼" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "正在【%s】校驗驗證碼" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "正在校驗【%s】的驗證碼" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "正在等待存取來源檔案" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "正在等待使用者回應" #: ulng.rsoperwiping msgid "Wiping" msgstr "正在抹除" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "正在【%s】抹除" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "正在抹除【%s】" #: ulng.rsoperworking msgid "Working" msgstr "正在處理" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "刪除:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "解壓縮但不含路徑:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "格式分析模式:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID 位置 :" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID 搜尋範圍:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "參數" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "密碼詢問字串:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "建立自解壓縮檔:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "測試:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "壓縮類型名稱:" #: ulng.rsoptarchivevalue #, fuzzy msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "值" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "【%s】插件關聯:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "第一個;最後一個;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "停用" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "啟用" #: ulng.rsoptenterext msgid "Enter extension" msgstr "輸入副檔名" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "指標" #: ulng.rsoptexamplemark msgid "Mark" msgstr "標記" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "反白 + 指標" #: ulng.rsoptexampletext msgid "Text" msgstr "文字" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "分離視窗;最小化分離視窗;操作面板" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "浮動;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "快速鍵 %s 將登錄給 cm_Delete 使用,它會視這個設定的狀態而執行相反的刪除動作。" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "替 %s 加入熱鍵" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "加入快速鍵" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "無法設置快速鍵" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "變更快速鍵" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "指令" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "cm_Delete 的快速鍵 %s 已有覆蓋此設定的參數。你要變更這個參數以使用這個通用設定嗎?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "cm_Delete 的快速鍵 %s 需要變更參數來符合快速鍵 %s。你要變更它嗎?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "描述" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "替 %s 編輯熱鍵" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "修正參數" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "熱鍵" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "熱鍵" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<無>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "參數" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "設置快速鍵以刪除檔案" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "要讓這個設定利用快速鍵 %s 執行運作, 快速鍵 %s 必需分配給 cm_Delete, 但是它已經分配給 %s 使用。你要變更它嗎?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "cm_Delete 的快速鍵 %s 是序列快速鍵, 所以無法判斷要將哪個熱鍵用來分配使用。這個設定可能無法正常運作。" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "快速鍵已使用" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "快速鍵 %s 已被使用。" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "你要將它變更給 %s 使用嗎?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "已被 %s 使用在 %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "已使用在這個指令但使用不同的參數" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "壓縮工具" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "自動更新" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "行為" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "簡要" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "顏色" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "欄位" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "設定檔" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "自訂欄位" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "常用資料夾列表" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "拖曳" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "磁碟清單按鈕" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "檔案關聯" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "檔案操作" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "檔案面板" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "檔案檢視" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "檔案類型" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "資料夾分頁" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "字型" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "語法高亮" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "熱鍵" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "圖示" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "忽略清單" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "按鍵" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "語言" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "佈置" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "記錄" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "雜項" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "滑鼠" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "插件" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "快速搜尋/篩選" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "終端機" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "工具列" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "工具" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "提示工具" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "無;指令行;快速搜尋;快速篩選" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左鍵;右鍵;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "位於檔案清單頂端;位於資料夾後面 (若資料夾排序在檔案前);位於排序位置;位於檔案清單底部" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "插件 %s 已經分配給下列副檔名:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "啟動" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "檔案名稱" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名稱" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "登錄對象" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "大小寫視為相異 (&S);大小寫視為相同 (&I)" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "檔案 (&F);資料夾 (&R);檔案及資料夾 (&N)" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "當不在焦點時隱藏篩選面板 (&H)" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "不區分大小寫;根據區域設定 (aAbBcC);先大寫再小寫 (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "依名稱排序並優先顯示;依類似檔案排序並優先顯示;依類似檔案排序" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "依字母順序排序, 考慮重音;依自然順序排序, 考慮字母和數字" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "頂端;底部;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "分隔線 (&E);內部指令 (&R);外部指令 (&X);選單 (&U)" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "不要改變位置;使用和插入新檔案同樣的設定;移到排序位置" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "檔案: %d, 資料夾: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "無法變更【%s】的存取權限" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "無法變更【%s】的擁有者" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "檔案" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "資料夾" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "命名管道" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "否" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "特殊區塊裝置" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "特殊字元裝置" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "符號連結" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "未知類型" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "是 (%S)" #: ulng.rssearchresult msgid "Search result" msgstr "搜尋結果" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<未命名範本>" #: ulng.rsselectdir msgid "Select a directory" msgstr "選擇資料夾" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "顯示 %s 的說明 (&S)" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "全部" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "指令" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "預覽" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "檔案: %d, 資料夾: %d, 大小: %s (%s 位元組)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "無法建立目標資料夾!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "無效的檔案大小格式!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "無法分割這個檔案!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "分割數量大於 100! 是否要繼續?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "選擇資料夾:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "建立符號連結發生錯誤。" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "預設文字" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "純文字" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "天" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "小時" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "分" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "月" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "秒" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "週" #: ulng.rstimeunityear msgid "Year(s)" msgstr "年" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "比對器" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "編輯器" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "開啟比對器發生錯誤" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "開啟編輯器發生錯誤" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "開啟終端機發生錯誤" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "開啟檢視器發生錯誤" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "終端機" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "檢視器" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "請回報這個錯誤到問題追蹤系統並包含你對下面這個檔案所進行的操作描述:%s請按下 %s 繼續或 %s 放棄這個程式。" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "網路" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander 內部檢視器" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "正在編碼" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "新的大小" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "沒有找到 %s!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.zh_CN.po���������������������������������������������������������0000644�0001750�0000144�00001145056�12666540554�017627� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "POT-Creation-Date: \n" "PO-Revision-Date: 2009-09-07 10:38+0800\n" "Last-Translator: wwfifi <wwfifi@gmail.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: 中文\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "所有" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "配置自定义列视图" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "背景色:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "允许着色过浓" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "文本颜色:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "字体:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "大小:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "背景色2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "配置视图:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "当前行背景颜色:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "当前行文本颜色:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "标记颜色:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "名称:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "添加列" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "自定义列:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "预览" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "丢弃只读标志" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "构建" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "主页:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "修订本" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "目录" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "固定" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "组" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "执行" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "读" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "写" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "产生校验..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "为每个文件分别创建MD5/SHA1文件" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "保存校验数据到文件:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "验证校验..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "删除" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "编辑" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "复制文件" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "文件/文件夹注释" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "编辑注释:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "编码:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "取消" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪切" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "粘贴" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "撤销" #: tfrmdiffer.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "退出" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "比较文件" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "编辑" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "文件" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "选项" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消(&C)" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "关于" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "配置(&C)" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "配置" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "复制" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "剪切" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "剪切" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "删除" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "查找(&F)" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "查找" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "查找下一个" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "查找下一个" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "粘贴" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "粘贴" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "重做" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "替换(&R)" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "替换" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "取消(&A)" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "全选" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "撤销" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "撤销" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "关闭" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "退出(&X)" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "新建(&N)" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "打开(&O)" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "打开" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "另存为(A)..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "全部保存(&V)" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "编辑器" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "编码(&C)" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "文件(&F)" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "语法高亮" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "大小写敏感(&A)" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "从托字符找起(&C)" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "正则表达式(&R)" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "仅选择文本(&T)" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "仅整个词(&W)" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "选项" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "替换(&R):" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "查找(&S):" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "方向" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "打包文件" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "如果目录包含文件就解包文件路径" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "解包每个文件到子目录(名称用包文件名)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "覆盖已存在文件(&O)" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "解包到" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "解包(&F)" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "添加" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "添加" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "向下" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "移除" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "移除" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "移除" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "改名" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "向上" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "文件关联" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "动作" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "扩展名" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "文件类型" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "图标" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "动作:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "命令(&C)" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "编辑" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "编辑器中编辑" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "文件名" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "文件路径" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "完整路径" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "从命令行获得输出" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "打开" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "在终端运行" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "在VFS中打开" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "视图" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "在查看器中打开" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "从:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "从:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "到" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "固定" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "组" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文本中再现:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "执行" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "文件名" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "名称:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "文件名" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "路径:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "组" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "上次访问:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "上次修改:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "上次修改状态:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "八进制:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "所有者" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "读" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "大小:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "符号链接:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "类型:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "写" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "属性" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "添加" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "编辑" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "转到文件(&G)" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "搜索(&N)" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "删除(&D)" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "载入(&O)" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "保存(&A)" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "开始(&S)" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "取消" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "视图(&V)" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "发给列表框(&L)" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "查找文件" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "区分大小写" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "开始日期:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "结束日期:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "最小:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "最大:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "在文件中查找" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "查找不包含这些文本的文件" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "不早于:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "正则表达式(&R)" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "替换文本" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "开始时间:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "结束时间" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "使用搜索插件:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "查找数据" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "编码:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "文件名掩码" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "文件所在目录" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "搜索子目录:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "最近搜索(&P):" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "查看" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "高级" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "载入/保存" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "插件" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "标准" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "查找" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "查找" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "创建硬链接" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "目标已存在(链接点所在)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "链接名" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "链接程序" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "保存到..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "条目" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "文件名" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "下" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "下" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "移除" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "删除" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "上" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "上" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "关于" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "添加文件名到命令行" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "添加路径和文件名到命令行" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "复制路径到命令行" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "计算已用空间..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "切换目录" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "切换到根目录" #: tfrmmain.actchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "产生校验..." #: tfrmmain.actchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "验证校验..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "清除日志文件" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "清除日志窗口" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "移除所有标签" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "删除标签页" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "比较内容" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "上下文菜单" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "复制" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "复制包含完整路径的文件名" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "复制文件名到剪贴板" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "复制到同面板下" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "复制" #: tfrmmain.actcountdircontent.caption #, fuzzy #| msgid "Sho&w occupied space" msgid "Sho&w Occupied Space" msgstr "显示文件夹容量(&W)" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "剪切" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "历史浏览目录" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "常用目录列表" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "编辑" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." msgid "Edit Co&mment..." msgstr "编辑注释..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "编辑新文件" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "交换面板(&P)" #: tfrmmain.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "退出" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "解压缩文件" #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "文件关联..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "链接文件" #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "显示文件属性" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "分割文件" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "转到命令行" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "创建硬链接" #: tfrmmain.acthelpindex.caption #, fuzzy #| msgid "Contents" msgid "&Contents" msgstr "内容" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "" #: tfrmmain.actkeyboard.caption #, fuzzy #| msgid "Keyboard" msgid "&Keyboard" msgstr "热键列表" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "左 &= 右" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "左驱动器列表" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "创建目录" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "选择所有相同扩展" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "反向选择" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "全部选中(&S)" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "取消选择组" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "选择一组" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "全部不选" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "最小化窗口" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "多文件改名工具" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "" #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "新建标签页" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "切换到下一标签" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "打开" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "尝试打开归档" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "" #: tfrmmain.actopendirinnewtab.caption #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "新标签页打开文件夹" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "打开VFS列表" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "选项..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "打包文件" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "设置分隔符位置" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "粘贴" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "切换到上一标签" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "快速搜索" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "刷新(&R)" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "改名" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "改名" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "反序排列" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "右 &= 左" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "右驱动器列表" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "运行终端" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "搜索(&S)" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "锁定,但目录允许修改" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "打开" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "显示底部按钮" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "显示历史命令" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "菜单" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "显示隐藏/系统文件" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "属性" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "按日期" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "按扩展名" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "按文件名" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "按大小" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "创建符号链接" #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "目标 &= 源" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "传输当前行到左窗口" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "传输当前行到右窗口" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "取消选择所有相同扩展" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "查看" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "访问 Double Commander 网站" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "擦去" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "目录" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "终端" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用目录列表" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "转到用户主目录" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "转到根目录" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "转到父目录" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "常用目录列表" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "路径" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copy..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "创建硬链接" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "清除" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "隐藏" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "全选" #: tfrmmain.mimove.caption msgid "Move..." msgstr "移动..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "创建符号链接" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "" #: tfrmmain.mitrayiconexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "退出" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "还原" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "取消" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "命令(&C)" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "配置(&O)" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "文件(&F)" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "标记(&M)" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "显示(&S)" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "选项" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "标签(&T)" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "复制" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "剪切" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "删除" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "编辑" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "粘贴" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "取消" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmmkdir.caption msgid "Create new directory" msgstr "创建新目录" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "熟路新目录名:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "宽度" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "删除(&D)" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "全部回滚" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "保存(&S)" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "多文件改名" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "日志" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "正则表达式(&R)" #: tfrmmultirename.cbusesubs.caption #, fuzzy #| msgid "Use substitution" msgid "&Use substitution" msgstr "使用替代" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E]xtension" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "数量" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "查找 && 替换" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "记录结果" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "掩码" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "扩展名" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "查找..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "间隔" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "文件主名" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "替换..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "起始数" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "宽度" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C]ounter" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D]ay" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex]xtension" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x]xtension" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[H]our" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[Mi]nute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[Mo]nth" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]ame" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx]ame" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x]ame" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "时间..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "扩展名..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "名称..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S]econd" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y]ear" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "文件路径" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "应用" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "选项" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "应用" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "删除" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "改名" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "选项" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "扩展名:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "注释:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "一般" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption #, fuzzy #| msgid "Also when &size, date, or attributes change" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "当大小、日期、其他属性修改时" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "当文件创建、删除,改名时刷新(&C)" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption #, fuzzy #| msgid "Don't &react to updates while in the background" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "后台时不激活刷新" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "总是显示托盘图标" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "最小化到系统栏图标(&V)" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "按列宽裁剪文本" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "水平行" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "垂直列" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "应用" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "编辑" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "命令行历史" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "历史浏览目录" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "文件掩码历史" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "本地化配置文件" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "保存并退出" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "程序目录(便携版)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "用户主目录" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "所有" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "改名" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允许着色过浓" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "一般" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "背景色:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "背景色2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "为文件系统配置列" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "当前行背景颜色:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "当前行文本颜色:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "字体:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "大小:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "文本颜色:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "标记颜色:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "添加列" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "名称:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "路径:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "剪切" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "粘贴" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "改名" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "剪切" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "粘贴" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "改名" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "添加" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "添加" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "添加" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "向下" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "编辑" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "移除" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "移除" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "移除" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "改名" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "向上" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "动作" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "扩展名" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "文件类型" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "图标" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "动作:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "命令(&C)" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "开始路径(&S)" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "编辑" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "编辑器中编辑" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "从命令行获得输出" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "打开" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "在终端运行" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "查看" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "在查看器中打开" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&F8/Del 删除文件到回收站 (Shift=彻底删除)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "丢弃只读标志" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "文件/文件夹的注释一起处理" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "仅选择文件名然后改名(不包含扩展名)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "在复制/移动对话框显示标签页" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "忽略文件操作错误,并记录到日志窗口" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "搜索文件" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "擦去数:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "使用内存映像搜索文本" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "使用流搜索文本" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "允许着色过浓" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "使用反选" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "背景色:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "背景色2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "当前行背景颜色:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "当前行文本颜色:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "标记颜色:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "文本颜色:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "目录用方括号包含" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "显示隐藏/系统文件" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "当用空格键 <SPACEBAR>选文件时, 自动移动到下一文件 (相当于执行插入键<INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "日期时间格式:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "应用" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "删除" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "模板..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "文件类型颜色" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "分类属性:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "类别颜色:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "类别掩码:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "类别名:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "编辑器字体" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "主字体" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "查看器字体" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "过滤" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "类别" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "命令:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "显示覆盖图标,比如链接" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "图标大小(&S)" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "在文件名左侧显示图标" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "全部(&A)" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "所有关联+&EXE/LNK (慢)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "无图标(&N)" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "仅标准图标(&O)" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+字母(&T)" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+字母(&C)" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "扁平按钮" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "扁平界面" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "扁平按钮" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "日志窗" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "显示命令行(&L)" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "显示当前目录(&C)" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "显示驱动器栏(&D)" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "显示功能键按钮(&F)" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "显示按钮栏(&B)" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "显示状态栏(&S)" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "显示标签页头" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "显示文件夹标签页(&W)" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "显示终端窗口" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "显示2个驱动按钮栏" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "屏幕布局" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "打包/解包" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "复制/移动/创建 硬/符号链接" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "删除" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "创建/删除目录" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "错误日志" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "创建日志文件(&C):" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "日志信息" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "操作成功日志" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "文件系统插件" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "文件操作日志" #: tfrmoptionslog.gblogfileop.caption #, fuzzy #| msgid "Log operations:" msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "操作日志:" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "操作状态" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "显示所有警告信息(仅有“确定”按钮)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "配置" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "允许" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "移除" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "调整" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "搜索插件可以在其他搜索算法下或扩展工具下搜索(像本地搜索等)" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "打包工具插件可以处理压缩文件" #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "内容插件可以显示文件扩展信息——像mp3 tags或图片属性,或者在搜索和改名工具中使用" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "文件系统插件允许访问操作系统能访问的磁盘或像Palm/PocketPC这样的扩展设备." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "查看器插件允许查看图片,电子表格,数据库等格式(F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "激活" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "注册给" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "文件名" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "搜索插件 (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "打包工具插件(.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "内容插件(.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "文件系统插件(.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "查看器插件 (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "开始(&B)(名称必须是首次输入的字符)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "结束(&D)(匹配句点号前一字母)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "选项" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "扩展名匹配(&N)" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "点击标签页后激活目标面板" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "总是显示标签页" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "关闭所有标签时需确认" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "限制标签页标题长度为:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "锁定的标签页显示星号 *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "在多行上显示标签页(&T)" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up 前台打开新标签页" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "标签页显示关闭" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "文件夹标签页头" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "字符" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "标签页位置:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "否" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "删除(&D)" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "编辑" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "扁平按钮" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "外观" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "图标文件(&F)" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "开始路径(&S)" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "工具提示(&T)" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "" #: tfrmoptionstoolbase.lbltoolspath.caption msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "添加" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "应用" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "删除" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "模板..." #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "类别掩码:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "类别名:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "例如" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "配置(&C)" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "打包文件" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "为选择的每个文件/目录创建单独的包文件" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "创建自解压文件(&X)" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "加密(&Y)" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "移动到文件包(&O)" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "多磁盘打包" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "打包路径名(仅有依赖时)(&P)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "打包到一个文件" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "打包程序" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "关闭" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "解开所有包并执行(&A)" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "解包并执行(&U)" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "压缩包属性" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "属性:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "压缩率:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "日期:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "事件:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "原始大小:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "文件:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "包大小:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "打包者:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "时间:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "过滤" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "取消" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "关闭(&C)" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "帮助(&H)" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "确定(&O)" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "固定" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "创建日期:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "属性" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "组" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "其他" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "所有者" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "文本中再现:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "执行" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "八进制:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "读" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "写" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "退出" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "确定" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "分割" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "文件名" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "文件大小" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "目标目录" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "源文件" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "构建" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "修订本" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "版本" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "确定(&O)" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "创建符号链接" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "目标已存在(链接点所在)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "链接名" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "关闭" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "名称" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "日期" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "大小" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "名称" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "添加" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "取消" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "修改" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "默认" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "确定" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "移除" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Tweak插件" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "按内容检测压缩包类型" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "可以删除文件" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "支持加密" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "显示为普通文件(隐藏包图标)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "支持在内存中打包" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "允许修改已有压缩包" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "压缩包可包含多个文件" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "创建新压缩包" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "支持选项对话框" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "允许在压缩包中搜索文本" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "注释:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "检测字符串:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "扩展名:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "标志:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "名称:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "插件:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "插件:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "关于查看器" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "向后(&N)" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "向前(&P)" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "展开" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "复制" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "复制" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "删除" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "删除" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "移动" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "移动" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "撤销" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "查看器" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "视图" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "关于" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "显示为二进制" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "复制到剪贴板" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "编辑(&E)" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "编码(&C)" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "退出(&X)" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "文件(&F)" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "图形" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "显示为十六进制" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "图片(&I)" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "插件" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "预览" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "" #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "" #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "搜索" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "全选" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "展开" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "显示为文本" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "视图(&V)" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "显示为换行文本" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "复制到剪贴板" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "全选" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "开始(&S)" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "文件操作" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "取消" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "属性" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "日期" #: ulng.rscolext msgid "Ext" msgstr "扩展名" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "名称" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "大小" #: ulng.rsconfcolalign msgid "Align" msgstr "对齐" #: ulng.rsconfcolcaption msgid "Caption" msgstr "标题" #: ulng.rsconfcolconfig msgid "Config" msgstr "配置" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "删除" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "域内容" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "移动" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "宽度" #: ulng.rsconfcustheader msgid "Customize column" msgstr "自定义列" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "全部" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "添加(&A)" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "取消(&C)" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "否(&N)" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "无(&N)" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "确定(&O)" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "覆盖(&R)" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "覆盖全部(&A)" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "改名" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "略过(&S)" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "略过全部(&K)" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "是(&Y)" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "产生校验..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "验证校验..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "复制文件" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "删除文件" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "移动文件" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "开始(&S)" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "速度 %s/秒, 剩余时间 %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "分割文件" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "擦除文件" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commander内部编辑器。" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "文件名:" #: ulng.rseditnewopen msgid "Open file" msgstr "打开文件" #: ulng.rseditsearchback msgid "&Backward" msgstr "后退(&B)" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "搜索" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "往前(&F)" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "替换" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s级" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "所有(不限深度)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "仅当前目录" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "目录 %s 不存在!" #: ulng.rsfindfound msgid "Found: %d" msgstr "找到: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "保存搜索模板" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "模板名:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "已扫描: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "扫描" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "查找文件" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "开始" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "可用 %s 总容量 %s bytes" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "" #: ulng.rsfuncatime msgid "Access date/time" msgstr "" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "属性" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "" #: ulng.rsfuncext msgid "Extension" msgstr "" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "组" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "名称" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "所有者" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "路径" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "大小" #: ulng.rsfunctype msgid "Type" msgstr "" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "创建硬链接出现错误." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "编辑器" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "查找文件" #: ulng.rshotkeycategorymain msgid "Main" msgstr "" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "查看器" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "连接完成" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "不选择掩码" #: ulng.rsmarkplus msgid "Select mask" msgstr "选择掩码" #: ulng.rsmaskinput msgid "Input mask:" msgstr "输入掩码" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "配置自定义列" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "配置这个自定义列视图" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "动作" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "编辑" #: ulng.rsmnueject msgid "Eject" msgstr "弹出" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "解挂" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "" #: ulng.rsmnunomedia msgid "No media available" msgstr "" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "打开" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "打开..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" msgid "Unmount" msgstr "挂载" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "视图" #: ulng.rsmsgaccount msgid "Account:" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "无法转到目录 [%s]!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "移除所有非活动标签吗?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "这个标签页 (%s) 已锁定! 仍旧关闭吗?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "复制 %d 选中的文件/目录吗?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "复制选中的 \"%s\" 吗?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "删除 %d 选中的文件/目录吗?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "删除 %d 个选择的文件/目录到回收站?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "删除选中的 \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "删除选中的文件\"%s\"到回收站?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "无效的磁盘" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "输入文件扩展名:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "输入名称:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "压缩文件CRC错误" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "数据损坏" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "目录 %s 已存在!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "用户中止执行" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "关闭文件出错." #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "不能创建文件" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "压缩包中没有文件" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "不能打开已存在的文件" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "读取文件出错" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "写文件出错" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "不能创建目录 %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "无效的链接" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "未找到文件" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "内存不足" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "不支持的功能!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "正则表达式语法错误!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "不能重命名文件 %s 为 %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "缓冲区太小" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "要打包的文件太多" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "位置的压缩格式" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "名称" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "文件 %s 已修改, 是否保存?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "文件 %s 已存在, 是否覆盖?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "文件 %s 只读. 删除吗?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "文件夹%s已存在, 覆盖吗?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "允许符号链接\"%s\"吗?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "路径" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "名称:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "无效的文件名" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "无效的选择" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "" #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "复制文件 %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "删除文件 %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "错误:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "解开文件 %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "信息:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "创建硬链接 %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "创建目录 %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "移动文件 %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "打包到 %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "移除目录 %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "完成:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "创建符号链接 %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "新建文件" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "将解包下一卷" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "没有选中文件" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "目标磁盘空间不足,继续?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "目标磁盘空间不足, 重试?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "不能删除文件 %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "没有实现。" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "添加(&A) %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "配置(&C)" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "删除(&D) %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "\"%s\" 已存在. 覆盖吗?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "重命名/移动 %d 选中的文件/目录吗?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "重命名/移动选中的 \"%s\" 吗?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "请重启Double Commander,使修改生效" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "只能选择校验文件!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "选择下一卷位置" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "设置卷标" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "选择了太多文件" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "卷标:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "擦除 %d 个选择的文件/目录?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "擦除选中的文件 \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "不修改;大写;小写;首字大写;" #: ulng.rsoperaborted msgid "Aborted" msgstr "终止" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "删除中" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "" #: ulng.rsoperexecuting msgid "Executing" msgstr "" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "" #: ulng.rsoperextracting msgid "Extracting" msgstr "" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperfinished msgid "Finished" msgstr "已结束" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "" #: ulng.rsopernotstarted msgid "Not started" msgstr "未开始" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "暂停" #: ulng.rsoperpausing msgid "Pausing" msgstr "暂停中" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "队列" #: ulng.rsoperrunning msgid "Running" msgstr "运行中" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "正开始" #: ulng.rsoperstopped msgid "Stopped" msgstr "已停止" #: ulng.rsoperstopping msgid "Stopping" msgstr "正停止" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "等待用户响应" #: ulng.rsoperwiping msgid "Wiping" msgstr "" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "" #: ulng.rsoperworking msgid "Working" msgstr "" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr " \"%s\" 相关插件:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "禁止" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "允许" #: ulng.rsoptenterext msgid "Enter extension" msgstr "输入扩张名" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "" #: ulng.rsoptexamplemark msgid "Mark" msgstr "" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "" #: ulng.rsoptexampletext msgid "Text" msgstr "" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "自动刷新" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "行为" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "颜色" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "列" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "配置" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "常用目录列表" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "文件关联" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "文件操作" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "文件面板" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "文件类型" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "文件夹列表" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "字体" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "快捷键" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "图标" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "语言" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "布局" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "日志" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "杂项" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "插件" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "快速搜索" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "终端" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "工具栏" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "左按钮;右按钮;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "激活" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "文件名" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "名称" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "注册给" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "文件" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "目录" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "命名管道" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "否" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "特殊块设备" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "特殊字符设备" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "符号链接" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "未知类型" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "是 (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "选择目录" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "所有" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "预览" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "文件: %d, 目录: %d, 大小: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "无法创建目标目录!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "无效的文件大小格式!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "不能分割文件!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "选中的目录:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "创建符号链接出现错误." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "天" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "" #: ulng.rstimeunityear msgid "Year(s)" msgstr "" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "编辑器" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "终端" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "查看器" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commander查看器" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.de.po������������������������������������������������������������0000644�0001750�0000144�00001331140�12673236522�017200� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2009-12-20 12:40+0300\n" "PO-Revision-Date: 2016-02-22 18:12+0100\n" "Last-Translator: Vacon <vacon@users.sourceforge.net>\n" "Language-Team: Deutsch <vacon@users.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Deutsch\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Vergleiche... %d%% (ESC zum Abbrechen)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Lösche Datei(en) %d" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Dateien gefunden: %d (Identisch: %d, Unterschiedlich: %d, Einzigartig links: %d, Einzigartig rechts: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Links nach rechts: Kopiere %d Dateien, Gesamtgröße: %d Bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Rechts nach links: Kopiere %d Dateien, Gesamtgröße: %d Bytes" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Abbruch" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "" #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Bearbeite angepasste Spaltenansichten" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Hintergrund:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Cursor Begrenzung" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Erlaube Farb-Überschneidung" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Nutze selbstdefinierte Schriftart und -farbe" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Textfarbe" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Schriftart:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Größe:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Hintergrund 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Bearbeite Ansicht Nr.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Cursorfarbe" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Cursortext" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Markierungsfarbe" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Name:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Spalte hinzufügen" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Spalten bearbeiten" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Vorschau" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vorlage wählen..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Prüfe freien Speic&her" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption #, fuzzy #| msgid "Copy attributes" msgid "Cop&y attributes" msgstr "Attribute ko&pieren" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption #, fuzzy #| msgid "Copy ownership" msgid "Copy o&wnership" msgstr "Besitzer k&opieren" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Berechtigungen ko&pieren" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption #, fuzzy #| msgid "Copy date/time" msgid "Copy d&ate/time" msgstr "D&atum/Zeit kopieren" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "&Korrigiere Verknüpfungen" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Sch&reibschutz-Attribut entfernen" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption #, fuzzy #| msgid "Exclude empty directories" msgid "E&xclude empty directories" msgstr "Leere &Verzeichnisse ignorieren" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Fo&lge Verknüpfungen" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption #, fuzzy #| msgid "Reserve space" msgid "&Reserve space" msgstr "Speicherplatz &reservieren" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Was soll getan werden, wenn Dateieigenschaften nicht übernommen werden können" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Vorlage aus Datei übernehmen" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "W&enn das Verzeichnis vorhanden ist" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "&Wenn die Datei vorhanden ist" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption #, fuzzy #| msgid "When cannot set property" msgid "When ca&nnot set property" msgstr "We&nn Eigenschaften nicht übernommen werden können" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<Keine Vorlage>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "In die Zwischenablage kopieren" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Homepage" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revision" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbru&ch" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Zurücksetzen" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Attribute wählen" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archiv" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Ko&mprimiert" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Ver&zeichnis" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "V&erschlüsselt" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Versteckt" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "&Schreibgeschützt" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "&Kaum" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Dauerhaft" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "&Temporär" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-Attribute" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Allgemeine Attribute" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ausführen" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Als Te&xt:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmchecksumcalc.caption msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Berechne Prüfsumme..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Prüfsummen-Datei öffnen wenn der Job beendet ist" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Fü&r jede Datei eigene MD5/SHA1-Prüfdatei erstellen" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Prüf&summen-Datei speichern unter:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifiziere Prüfsumme..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Ve&rbinden" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Löschen" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Bearb&eiten" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Verbindungsmanager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Verbinde mit:" #: tfrmcopydlg.btnaddtoqueue.caption #, fuzzy #| msgid "Add To Queue" msgid "A&dd To Queue" msgstr "&Zur Warteschlange hinzufügen" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&ptionen" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Diese &Optionen als Standard speichern" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Datei(en) kopieren" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Neue Warteschlange" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Beschreibung speichern" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Datei- / Ordnerkommentar" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "&Bearbeite Kommentar für:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kodier&e:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Automatisch vergleichen" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Binärer Modus" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Abbruch" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Abbruch" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Block nach rechts kopieren" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Block nach rechts kopieren" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Block nach links kopieren" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Block nach links kopieren" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Wiederholen" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "&Alles markieren" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig machen" #: tfrmdiffer.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Beenden" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Erster Unterschied" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Erster Unterschied" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Groß- / Kleinschreibung ignorieren" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Leerzeichen ignorieren" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Bildlauf fortsetzen" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Letzter Unterschied" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Letzter Unterschied" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Zeilenunterschied" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Nächster Unterschied" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Nächster Unterschied" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Öffne links ..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Öffne rechts ..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Hintergrund zeichnen" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Vorheriger Unterschied" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Vorheriger Unterschied" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Neu laden" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Neu laden" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Speichern" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Speichern" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Speichern unter ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Speichern unter ..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Speichere links" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Speichere links" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Speichere links unter ..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Speichere links unter ..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Speichere rechts" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Speichere rechts" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Speichere rechts unter ..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Speichere rechts unter ..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Vergleiche" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Vergleiche" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codierung" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codierung" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Vergleiche Dateien" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "&Links" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "&Rechts" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Aktionen" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Bea&rbeiten" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codierung" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Datei" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Optionen" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Neue Verknüpfung zur Sequenz hinzufügen" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbru&ch" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Letzte Verknüpfung aus der Sequenz entfernen" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Nur für diese Steuerungselemente" #: tfrmedithotkey.lblparameters.caption #, fuzzy #| msgid "Parameters (each in a separate line):" msgid "&Parameters (each in a separate line):" msgstr "&Parameter (jeder in einer eigenen Zeile):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Verknüpfungen:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "&Über" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Einstellungen" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Einstellungen" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopieren" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Ausschneiden" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "&Löschen" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Suchen" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Suchen" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Finde nächste" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Finde nächste" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gehe zu Zeile..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Einfügen" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Wiederholen" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Wiederholen" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "E&rsetzen" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Ersetzen" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Alle markieren" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Rückgängig machen" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Rückgängig machen" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Schließen" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "En&de" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Programm beenden" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Neu" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Neu" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Öffnen" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Öffne" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Speichern" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Speichern" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Speichern &unter..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Speichern unter ..." #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Alles &speichern" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Alle speichern" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Text-Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bearbeiten" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodiere" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Öffnen als..." #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Speichern unter..." #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datei" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "S&yntax hervorheben" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Zeilenende" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgid "C&ase sensitivity" msgstr "Strikt nach S&chreibweise" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgid "S&earch from caret" msgstr "Suche von &caret" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Reguläre Ausdrücke" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgid "Selected &text only" msgstr "Nur den markierten &Text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgid "&Whole words only" msgstr "Nur ganze &Wörter" #: tfrmeditsearchreplace.gbsearchoptions.caption msgid "Option" msgstr "Optionen" #: tfrmeditsearchreplace.lblreplacewith.caption msgid "&Replace with:" msgstr "&Ersetzen mit:" #: tfrmeditsearchreplace.lblsearchfor.caption msgid "&Search for:" msgstr "&Suche nach:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgid "Direction" msgstr "Richtung" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Entpacke Datei(en)" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Pfad mit entpacken (falls gespeichert)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Jedes Archiv in &separaten Ordner entpacken (mit Namen des Archivs)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Bestehende Datei(en) überschreiben" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Entpacke &Datei(en) nach:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "Entpacken von &Dateien anhand von Vorgaben:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "&Passwort für verschlüsselte Dateien" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Hinzufügen" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Hinzufügen" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Runter" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Ent&fernen" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Ent&fernen" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Umb&enennen" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Hoch" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Datei-Verknüpfungen" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Aktionen" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Endungen" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Dateitypen" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icon" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Aktion:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Befehl" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Bearbeiten" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Im Editor öffnen" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Dateipfad" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Vollständiger Pfad" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ausgabe aus Konsolen-Fenster entnehmen" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Öffnen" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "In Konsolen-Fenster ausführen" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "In VFS öffnen" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Betrachten" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "In Betrachter öffnen" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Warte..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Dateiname:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Von:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Auf [Schließen] klicken, wenn die temporären Daten gelöscht werden können!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&In Panel:" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Alle betrachten" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuelle Operation:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Von:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Nach:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Eigen&schaften einstellen" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "&Auf alle ausgewählten Dateien anwenden" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Diese Datei übers&pringen" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschaften" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Dauerhaft" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Darstellung im Text" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Enthält:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ausführen" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Name:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pfad:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppe" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Letzter Zugriff" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Letzte Änderung:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Letzte Änderung des Status:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Besit&zer" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Größe:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Symb. Link:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Typ:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Eigenschaften" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "actAbbrechen" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "actSchließen" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "actBearbeiten" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "actInListboxEeinfügen" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "actGeheZuDatei" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "actIntelligenterFokus" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "actLetzteSuche" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "actNeueSuche" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "actSeiteFortgeschritten" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "actSeiteLadenSpeichern" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "actSeitePlugins" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "actSeiteErgebnisse" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "actSeiteStandard" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "actBetrachten" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Bea&rbeiten" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Gehe zu Datei" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "&Letzte Suche" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Neue Suche" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Speichern" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "L&öschen" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Laden" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Speichern" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption #, fuzzy #| msgid "Save with starting path" msgid "Sa&ve with \"Start in directory\"" msgstr "S&peichern mit Start-Pfad" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint #, fuzzy #| msgid "If starting path if saved then it will be restored when loading template. Use it if you want to fix searching to a certain directory." msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Wenn der Start-Pfad mitgepeichert wird, wird er wiederhergestellt, wenn die Vorlage geladen wird. Nützlich, wenn eine Suche immer im gleichen Verzeichnis gestartet werden soll." #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Starten" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Abbruch" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Vorlage benutzen" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Betrachten" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Füge in &Listbox ein" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Suche Datei(en)" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Groß- / Kle&inschreibung beachten" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Ab &Datum:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "&Vor Datum:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Date&igröße ab:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Bis Dateigr&öße" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "In &Archiv(en) suchen" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Suche in Da&tei" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "S&ymlinks folgen" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Suche Datei die &NICHT den Text enthalten" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Nicht &älter als:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Suc&he nach einem Teil des Dateinamens" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Reguläre Ausdrücke" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "E&rsetze Text" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Ausgew&ählte Verzeichnisse und Dateien" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "R&egulärer Ausdruck" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Ne&uer als:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Ä<er als:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Nutze Such-PlugIn" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Verzeichnisnamen eingeben, die von der Suche ausgeschlossen werden sollen (Namen mit \";\" trennen)" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Dateinamen eingeben, die von der Suche ausgeschlossen werden sollen (Namen mit \";\" trennen)" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Dateinamen durch \";\" getrennt eingeben" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Verzeichnisse" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Dateien" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Suche Daten" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Attri&bute" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Kodiere:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Unter&verzeichnisse ausschließen" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Dateien a&usschließen" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Dateimaske" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Verzeichnis in dem &DoubleCommander suchen soll" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Suche Unter&verzeichnisse" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Vorherige Suche(n)" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "In (einem) neuen Tab(s) öffnen" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Von der Liste entfernen" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Alle gefundenen Einträge anzeigen" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Im Editor öffnen" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Zeige im Betrachter" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Fortgeschritten" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Laden/Speichern" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Ergebnisse" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Suchen" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Suchen" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Schreibweise be&achten" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Hardlink erstellen" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Bestehen&des Ziel (auf das der Hardlink zeigt)" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Hard&link-Name" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Alle importieren!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Ausgewählte importieren" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Einträge auswählen, die importiert werden sollen" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Wird ein Untermenü ausgewählt, wird das ganze Menü ausgewählt" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Strg halten und Einträge anklicken um mehrere auszuwählen" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Verschmelzer" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Speichern unter..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Eintrag" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Dateiname" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "A&bwärts" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "A&bwärts" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "&Löschen" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Aufw&ärts" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Aufw&ärts" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Über" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Dateiname in die Befehlszeile kopieren" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Pfad und Dateiname in die Befehlszeile kopieren" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "&Pfad in die Befehlszeile eintragen" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Verkürzt" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Verkürzte Ansicht" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Berechne belegten &Platz" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Verzeichnis wechseln" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Wechsel zum Home-Verzeichnis (Nutzer)" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "In das übergeordnete Verzeichnis wechseln" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Verzeichnis zu Root wechseln" #: tfrmmain.actchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Berechne Prüf&summe..." #: tfrmmain.actchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verifiziere Prüfsumme..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Log-Datei leeren" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Log-Fenster leeren" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Alle Reiter ent&fernen" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Doppelte Tabs schließen" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Entferne Reiter" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Nächste Befehlszeile" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Stelle Befehlszeile auf den nächsten Befehl im Verlauf" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Vorher eingegebener Befehl" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Nutze die Befehlszeile mit dem zuletzt eingegebenen Befehl" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Vollständig" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Spaltenansicht" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Anhand des &Inhalts vergleichen" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Vergleiche Ordner/Verzeichnisse" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Vergleiche Ordner/Verzeichnisse" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnis-Hotlist" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Konfiguration der Favoriten-Tabs" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Konfiguration der Verzeichnis-Tabs" #: tfrmmain.actconfigtoolbars.caption #, fuzzy #| msgid "Configure toolbar" msgid "Toolbar..." msgstr "Toolbar konfigurieren" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "&Zeige Kontextmenü" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopieren" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Alle Tabs auf die gegenüberliegende Seite kopieren" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiere alle ange&zeigten Spalten" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiere Dateinamen mit komplettem &Pfad" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiere Datei&namen in die Zwischenablage" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Datei(en) ohne Nachfrage kopieren" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiere den kompletten Pfad der markierten Datei(en) ohne Verzeichnis-Trennzeichen am Ende (/)" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiere den kompletten Pfad der markierten Datei(en)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiere in gleichen Ordner" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopieren" #: tfrmmain.actcountdircontent.caption #, fuzzy #| msgid "Sho&w occupied space" msgid "Sho&w Occupied Space" msgstr "&Belegten Speicherplatz anzeigen" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "A&usschneiden" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Zeige Befehlsparameter" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Löschen" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Verzeichnisverlauf" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "Verzeic&hnis-Favoriten" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Einen Befehl wählen und ausführen" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Bearbeiten" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." msgid "Edit Co&mment..." msgstr "Ko&mmentar bearbeiten" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Datei erstellen und bearbeiten" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Pfad-Zeile über der Dateiliste bearbeiten" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "&Panels tauschen" #: tfrmmain.actexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "E&ntpacke Dateien" #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Konfiguration von Dateiverkn&üpfungen" #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "&Verbinde Datei(en)" #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Dateiei&genschaften" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Teile Datei" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "\"&Flache\" Ansicht" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus auf die Befehlsze&ile" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Setze die Einfügemarke auf den ersten Eintrag der Liste" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Setze die Einfügemarke auf den letzten Eintrag der Liste" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "&Hardlink erstellen" #: tfrmmain.acthelpindex.caption #, fuzzy #| msgid "Contents" msgid "&Contents" msgstr "&Inhalte" #: tfrmmain.acthorizontalfilepanels.caption #, fuzzy #| msgid "Horizontal file panels" msgid "&Horizontal Panels Mode" msgstr "&Horizontale Datei-Panel" #: tfrmmain.actkeyboard.caption #, fuzzy #| msgid "Keyboard" msgid "&Keyboard" msgstr "&Tastatur" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Verkürzte Ansicht im linken Panel" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Spaltenansicht im linken Panel" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Links &= Rechts" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Flache Ansicht im linken Panel" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Öffne &linke Laufwerksliste" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Umgekehrte Reihenfolge im linken Panel" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Linkes Panel nach &Attributen sortieren" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Linkes Panel nach &Datum sortieren" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Linkes Panel nach &Dateiendung sortieren" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Linkes Panel nach &Namen sortieren" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Linkes Panel nach &Größe sortieren" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Thumbnails-Ansicht im linken Panel" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Tabs aus den Favoriten-Tabs laden" #: tfrmmain.actloadselectionfromclip.caption #, fuzzy #| msgid "Load Selection From Clipboard" msgid "Load Selection from Clip&board" msgstr "Auswahl aus der &Zwischenablage laden" #: tfrmmain.actloadselectionfromfile.caption #, fuzzy #| msgid "Load Selection From File" msgid "&Load Selection from File..." msgstr "Auswah&l aus Datei laden" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Lade Tabs aus Datei" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Verzeichnis erstellen" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "Alle mit gleicher &Endung markieren" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "Auswahl um&kehren" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Alle&s markieren" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Gru&ppe abwählen" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "&Gruppe wählen" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "Alles a&bwählen" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Fenster minimieren" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "Meh&rfaches umbenennen" #: tfrmmain.actnetworkconnect.caption #, fuzzy #| msgid "Network Connect..." msgid "Network &Connect..." msgstr "Net&zwerk verbinden..." #: tfrmmain.actnetworkdisconnect.caption #, fuzzy #| msgid "Network Disconnect" msgid "Network &Disconnect" msgstr "Netzwerk &trennen" #: tfrmmain.actnetworkquickconnect.caption #, fuzzy #| msgid "Network Quick Connect..." msgid "Network &Quick Connect..." msgstr "Netzwerk schnell &verbinden..." #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "Ne&uer Reiter" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Nächsten Tab aus der Liste laden" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "Zum n&ächsten Reiter wechseln" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Öffne" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Versuche Archiv zu öffnen" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Leisten-Datei öffnen" #: tfrmmain.actopendirinnewtab.caption #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "Verzeichnis in neue&m Reiter öffnen" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Öffne &VFS-Liste" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Ablauf-&Betrachter" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "&Optionen..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "&Packe Dateien" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Position des Fenster-Teilers festlegen" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Einf&ügen" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Vorherigen Tab aus der Liste laden" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "Zum v&orherigen Reiter wechseln" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Schneller Filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Schnelle Suche" #: tfrmmain.actquickview.caption #, fuzzy #| msgid "Quick View Panel" msgid "&Quick View Panel" msgstr "S&chnellbetrachter-Panel" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "A&ktualisieren" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Zuletzt geladenen Tab erneut öffnen" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Verschieben" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Verschieben / Umbenennen von Datei(en) ohne Nachfrage" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Umbenennen" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "&Reiter umbenennen" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Neu im letzten geladenen Favoriten-Tab speichern" #: tfrmmain.actrestoreselection.caption #, fuzzy #| msgid "Restore Selection" msgid "&Restore Selection" msgstr "Auswahl w&ieder herstellen" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "&Umgekehrt anordnen" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Verkürzte Ansicht im rechten Panel" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Spaltenansicht im rechten Panel" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Rechts = L&inks" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Flache Ansicht im rechten Panel" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Öffne rechte Laufwerksliste" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Umgekehrte Anordnung im rechten Panel" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Rechtes Panel nach &Attributen sortieren" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Rechtes Panel nach &Datum sortieren" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Rechtes Panel nach &Dateiendung sortieren" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Rechtes Panel nach &Namen sortieren" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Rechtes Panel nach &Größe sortieren " #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Thumbnail-Ansicht im rechten Panel" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Konsolen-Fens&ter öffnen" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Aktuellen Tab in neuen Favoriten-Tab speichern" #: tfrmmain.actsaveselection.caption #, fuzzy #| msgid "Save Selection" msgid "Sa&ve Selection" msgstr "Auswahl speiche&rn" #: tfrmmain.actsaveselectiontofile.caption #, fuzzy #| msgid "Save Selection To File" msgid "Save S&election to File..." msgstr "Auswa&hl in Datei speichern" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Speichere Tabs in Datei" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Suchen..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Alle gesperrten Tabs, in denen Verzeichnisse in neuen Tabs geöffnet werden" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Alle Tabs in 'Normal' umwandeln" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Alle Tabs in 'Gesperrt' umwandeln" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Alle gesperrten Tabs, in denen Verzeichniswechsel erlaubt sind" #: tfrmmain.actsetfileproperties.caption #, fuzzy #| msgid "Change attributes" msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Eigensch&aften ändern" #: tfrmmain.actsettaboptiondirsinnewtab.caption #, fuzzy #| msgid "Directories are opened in new &tabs" msgid "Locked with Directories Opened in New &Tabs" msgstr "Verzeichnisse in neuem Rei&ter öffnen" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption #, fuzzy #| msgid "Locked" msgid "&Locked" msgstr "&Gesperrt" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Gesperrt, aber &Verzeichniswechsel erlaubt" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Öffnen" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Öffnen anhand der System-eigenen Dateiverknüpfungen (außerhalb von DoubleCommander)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Button-Leiste anzeigen" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Befehlszeilenverlauf anzeigen" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menü" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "&Zeige versteckte und Systemdateien" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Nach &Attributen sortieren" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Nach &Datum sortieren" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Nach &Endung sortieren" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Nach &Name sortieren" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Nach &Grösse sortieren" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Liste der Laufwerke öffnen" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "De-/Aktivieren der Dateiliste um Dateinamen nicht anzuzeigen" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Erstelle symb. &Link..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Sychronisiere Verzeichnisse..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Ziel = &Quelle" #: tfrmmain.acttestarchive.caption #, fuzzy #| msgid "Test Archive(s)" msgid "&Test Archive(s)" msgstr "Archiv(e) &testen" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Vorschaubilder" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Ansicht \"Vorschaubilder\"" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Vollbild-Modus der Konsole umschalten" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Bewege markierten &Ordner in das linke Fenster" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Bewege &markierten Ordner in das rechte Fenster" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Baumansich&t-Panel" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Anhand von Parametern sortieren" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "Alle mit der gleichen E&ndung abwählen" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Betrachten" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Zeige den Verlauf der geöffneten Verzeichnisse des aktiven Panels" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gehe zum nächsten Eintrag in der Verlaufsliste" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gehe zum vorherigen Eintrag in der Verlaufsliste" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Log-Datei betrachten" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "&Homepage von DoubleCommander öffnen" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Löschen" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Mit der Verzeichnis-Hotlist und Parametern arbeiten" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Beenden" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Verzeichnis" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Löschen" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Konsolen-Fenster" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Verzeichnis-Hotlist" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Aktuelles Verzeichnis der rechten Seite auch auf der linken Seite anzeigen" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Zu 'Eigene Dateien' wechseln" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Zum Root-Verzeichnis wechseln" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Zum übergeordneten Verzeichnis wechseln" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Verzeichnis-Hotlist" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Aktuelles Verzeichnis der linken Seite auch auf der rechten Seite anzeigen" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Pfad" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Abbruch" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiere..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Hardlink erstellen" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Leeren" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Verstecken" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Verschiebe..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Erstelle symb. Link" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Reiter-Optionen" #: tfrmmain.mitrayiconexit.caption #, fuzzy #| msgid "Exit" msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Beenden" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Wiederherstellen" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Abbruch" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Befehle" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "K&onfigurieren" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Favoriten" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "&Dateien" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markieren" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Netzwerk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Zeigen" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Tab &Optionen" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Reiter" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "Verzeichnis-Wechsel" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopieren" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Ausschneiden" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "&Löschen" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Bea&rbeiten" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Einfügen" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Abbruch" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Internen Befehl auswählen" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Auf alte Art sortiert" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "Auf alte Art sortiert" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Alle Kategorien nach Standard sortieren" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Auswahl:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Kategorien:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Befehls&name:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Hinweis:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "Kategorie" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hilfe" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Hinweis" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Tastaturkürzel" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "&Definieren..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "Ode&r vordefinierten Auswahltyp wählen:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Neues Verzeichnis anlegen" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Namen für neues Verze&ichnis eingeben" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Neue Größe" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Höhe :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kompressions-Qualität für Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Breite :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "Höhe" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Breite" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "L&öschen" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Laden" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Umbenennen" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "&Alle wieder herstellen" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Speichern" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Mehrfaches Umbenennen" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Akti&vieren" #: tfrmmultirename.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Reguläre Ausdrücke" #: tfrmmultirename.cbusesubs.caption #, fuzzy #| msgid "Use substitution" msgid "&Use substitution" msgstr "N&utze Ersetzung" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E]ndung" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Zähler" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Suchen und e&rsetzen" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log-Ergebnis" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Vorgaben" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "&Endung" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Su&che..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "&Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "Datei&name" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Er&setze..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "S&tarten bei" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Breite" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C] Zählweise" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Tag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Tag (zweistellig)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Tag der Woche (kurz, z. B. \"Mo\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Tag der Woche (lang, z. B. \"Montag\")" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex]Bezeichnung an Position x" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y]Bezeichnung von Positionx bis y" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[h]Stunde" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Stunde (zweistellig)" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (zweistellig)" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[M] Monat" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Monat (zweistellig)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Monatsname (kurz, z. B. \"Jan\")" #: tfrmmultirename.mimonth3.caption #, fuzzy #| msgid "[MMMM] Month name (long, e.g. \"january\")" msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Monatsname (lang, z. B. \"Januar\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N] Name" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx]Bezeichnung an Position x" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Bezeichnung von Position x bis y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Zeit..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Endung..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Name..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S] Sekunde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekunde (zweistellig)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Jahr (zweistellig)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Jahr (vierstellig)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Vorheriger Dateiname" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Neuer Dateiname" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Dateipfad" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Anwendung auswählen" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Angepasster Befehl" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Verknüpfung speichern" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Gewählte Aktion als Standard festlegen" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Dateityp zum Öffnen: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Mehrere Dateinamen" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Mehrere URL" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Einzelner Dateiname" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Einzelne URL" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Übernehmen" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Abbru&ch" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Optionen" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Bitte eine der Unterseiten auswählen, diese Seite hier enthält keine Einstellmöglichkeiten." #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "A&uto-Konfiguration" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "&Übernehmen" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "&Löschen" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Umbenennen" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "De&bug-Modus" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "A&ktiviert" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "&Zeige die Ausgabe des Konsolenfensters" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Optionen" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Füge h&inzu:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "&Endung:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "En&tpacke:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Liste auf:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Aufli&stungsende (optional):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Auflistungsfor&mat" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Auflistun&gsbeginn (optional):" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Arc&hivierer:" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Be&schreibung:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Zusätzlich" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Allgemein" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption #, fuzzy #| msgid "Also when &size, date, or attributes change" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Auch wenn &Größe, Datum oder Attribut geändert werden" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Für die &folgenden Pfade und Unterverzeichnisse:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Au&ffrischen wenn Dateien erstellt, gelöscht oder umbenannt werden" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption #, fuzzy #| msgid "Don't &react to updates while in the background" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Nicht auf Änderungen reagieren wenn im Hintergrund" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Kein automatisches Auffrischen" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Dateiliste auffrischen" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "&Immer Tray-Icon anzeigen (neben der Uhr)" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption #, fuzzy #| msgid "Automatically hide unmounted devices" msgid "Automatically &hide unmounted devices" msgstr "Automatisc&h Laufwerke ausblenden, die nicht mehr eingehangen sind (Linux: unmounted)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "In den Sys-Tray minimieren (neben der Uhr)" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Nur eine Instanz von Doub&leCommander gleichzeitig erlauben" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Hier können ein oder mehrere Laufwerke oder Mount_Points angegeben werden, die so getrennt werden müssen \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption #, fuzzy #| msgid "Drives blacklist" msgid "Drives &blacklist" msgstr "A&usschlussliste für Laufwerke" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Spaltenweite" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Zeige Dateiendungen" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Ausgerichtet (mit TAB)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Unmittelba&r hinter dem Dateinamen" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Feste Anzahl von Spalten" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Feste Spaltenweite" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "&Text auf Spaltenbreite kürzen" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "&Horizontale Linien" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "&Vertikale Linien" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Spalten &automatisch füllen" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Zeige Gitterstruktur zur Orientierung" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Größe der Spalten automatisch einstellen" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "&Größe der Spalten automatisch einstellen:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Übernehmen" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "B&earbeiten" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "&Verlauf der Befehlszeile" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Ver&zeichnisverlauf" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Dateimasken-Verlau&f" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "&Konfiguration speichern" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Suc&he / Ersetze Verlauf " #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Speicherort der Konfigurationsdatei" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Beim Beenden speichern" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Reihenfolge der Konfigurationsfolge im linken Baum sortieren" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "An Eingabeaufforderung übergeben" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "P&rogrammverzeichnis (portable Version)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "E&igene Dateien" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "Änderung für alle Spalten übernehmen" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "L&öschen" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Standard für Gehe zu" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Neu" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Nächstes" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Vorheriges" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "Auf Standard zurücksetzen" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Speichern unter..." #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Speichern" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Erlaube Farb-Überschneidung" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "Wenn etwas geändert wird, das in allen Spalten ändern" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Allgemein" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Cursor Begrenzung" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Nutze Frame-Cursor" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Farbe der inaktiven Auswahl nutzen" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Umgekehrte Auswahl nutzen" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Angepasste Schriftart und -farbe für diese Ansicht nutzen" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Hintergrund:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Hintergrund 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Bearbeite Spalten für Dateis&ystem" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Aktuelle Bezeichnung der Spalte]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cursorfarbe" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Cursortext" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Schriftart:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Größe:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Textfarbe" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Farbe für inaktiven Cursor:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Farbe für inaktive Markierung:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Markierungsfarbe" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Unten ist eine Vorschau. Sie kann für eine sofortige Überprüfung er Einstellungen genutzt werden." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Einstellungen für Spalten:" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Spalte hinzufügen" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Position des Frame-Panel nach dem Vergleich:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Füge hinzu..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Lösche..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Exportieren..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Hilfe" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importieren..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Einfügen..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Verschiedenes..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Einige Funktionen um angemessene Ziele zu wählen" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Sortieren..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Beim Hinzufügen eines Verzeichnisses, auch das Ziel hinzufügen" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Struktur immer aufklappen" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption #, fuzzy #| msgid "Show only valid %senv_var%s" msgid "Show only valid environment variables" msgstr "Nur gültige Umgebungsvariable verwenden" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "Im Pop-Up-Menü [auch Pfad] zeigen" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Name, a bis z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Name, a bis z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Verzeichnis hotlist (Umsortieren durch Drag&&Drop" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andere Optionen" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Name:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Pfad:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Ziel:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "Verzeichnis des aktiven Frames" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "Verzeichnisse der aktiven und nicht aktiven Frames" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "Ein Befehl" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Füge einen Befehl hinzu" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "Eine Kopie des gewählten Eintrages" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Füge eine Kopie des gewählten Eintrages hinzu" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "Ein Trennzeichen" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Füge ein Trennzeichen hinzu" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "Untermenü" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Füge Untermenü hinzu" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "Verzeichnis zu dem gewechselt wird" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Alle zusammenfalten" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... aktuelles Level an markierten Einträgen" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "Aktuell markierte oder aktive Verzeichnisse aktiver Frames" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Ausschneiden" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "Lösche alle!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Untermenü und alle seine Elemente" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Nur das Untermenü, nicht seine Elemente" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "Gewählte Einträge" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Lösche gewählte Einträge" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Alle Hot-Dir Verzeichnisse scannen um die zu erkennen, die wirklich existieren" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Alle Hot-Dir Verzeichnisse und Ziele scannen, um die zu erkennen, die wirklich existieren" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "zu einer Verzeichnis-Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Starte die Konfiguration von TC-bezogenen Informationen" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Starte die Konfiguration von TC-bezogenen Informationen" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDir-Testmenü" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "aus einer Verzeichnis-Hotlist (.hotlis)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "aus einer \"wincmd.ini\" des TotalCommander" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Alle Zweige öffnen" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Einfügen" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Wiederherstellen einer Verzeichnis-Hotlist aus einem Backup" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Speichern einer aktuellen Verzeichnis-Hotlist in ein Backup" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Suchen und Ersetzen" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "im Pfad..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "im Zielpfad..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "im Pfad und Zielpfad..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "... alles von A bis Z" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "... nur einzelne Gruppe von Einträgen" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortiere nur einzelne Gruppe von Einträgen" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "... Inhalt von Untermenüs gewählt, aber keine tieferen Level" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "Inhalt von Untermenüs ausgewählt, auch alle tiferen Level" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Menü aus Testergebnissen" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "Verzeichnis das ich eintippe" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Füge Verzeichnis hinzu, dass ich eintippe" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Füge Verzeichnis ein, das ich eintippe" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Zusatz aus dem Hauptpanel:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Frage welches von allen unterstützten Formaten ständig benutzt werden soll" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Wenn Unicode-Text gespeichert werden soll, nutze das UTF-8 Format (ansonsten wird das UTF-16 Format benutzt)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Wenn Text fallen gelassen wird, erstelle den Dateinamen automatisch (ansonsten wird der Nutzer gefragt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption #, fuzzy #| msgid "Show confirmation dialog after drop" msgid "&Show confirmation dialog after drop" msgstr "Zeige Be&stätigungsdialog nach dem Ziehen und Ablegen von Dateien" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Wenn Drag && Drop benutzt wird:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Das wahrscheinlichste Format an oberste Stelle setzen (Nutze Drag && Drop):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(ist das wahrscheinlichste Format nicht verfügbar, einen Ersatz festlegen (und so weiter) )" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(wird mit einigen Quellen nicht fünktionieren, bitte in diesem Fall versuchen das Problem durch Nicht-Markieren zu lösen)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption #, fuzzy #| msgid "Show file system" msgid "Show &file system" msgstr "&Zeige Dateisystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption #, fuzzy #| msgid "Show free space" msgid "Show fr&ee space" msgstr "Z&eige freien Speicherplatz" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy #| msgid "Show label" msgid "Show &label" msgstr "Zeige &Laufwerksbezeichnung" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Laufwerksliste" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Caret nach dem Ende der Zeile" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Zeige besondere Zeichen" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Optionen des internen Editors" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Hintergrund" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Hintergrund" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Zurücksetzen" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Speichern" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Attribut des Elements" #: tfrmoptionseditorcolors.foregroundlabel.caption #, fuzzy #| msgid "Foreground" msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Vo&rdergrund" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption #, fuzzy #| msgid "Foreground" msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Vo&rdergrund" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption #, fuzzy #| msgid "Text-mark" msgid "&Text-mark" msgstr "&Textmarkierung" #: tfrmoptionseditorcolors.tbtnglobal.caption #, fuzzy #| msgid "Use (and edit) global scheme settings" msgid "Use (and edit) &global scheme settings" msgstr "Nutze (und bearbeite) all&gemeine Schemaeinstellungen" #: tfrmoptionseditorcolors.tbtnlocal.caption #, fuzzy #| msgid "Use local scheme settings" msgid "Use &local scheme settings" msgstr "Nutze &lokale Schemaeinstellungen" #: tfrmoptionseditorcolors.textboldcheckbox.caption #, fuzzy #| msgid "Bold" msgid "&Bold" msgstr "&Fett" #: tfrmoptionseditorcolors.textboldradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "&Umgekehrt" #: tfrmoptionseditorcolors.textboldradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textboldradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption #, fuzzy #| msgid "Italic" msgid "&Italic" msgstr "Kurs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textitalicradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textitalicradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption #, fuzzy #| msgid "Strike Out" msgid "&Strike Out" msgstr "Durchge&strichen" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption #, fuzzy #| msgid "Underline" msgid "&Underline" msgstr "&Unterstreichen" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Um&gekehrt" #: tfrmoptionseditorcolors.textunderlineradiooff.caption #, fuzzy #| msgid "Off" msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Au&s" #: tfrmoptionseditorcolors.textunderlineradioon.caption #, fuzzy #| msgid "On" msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "A&n" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Füge hinzu..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Lösche..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Einfügen..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortieren..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Nichts" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Struktur immer aufklappen" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nein" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Links" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Rechts" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Liste der Favoriten-Tab (umsortieren durch Drag && Drop" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andere Optionen" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Was wo wiederhergestellt werden soll für den gewählten Eintrag:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Existierende Tabs die erhalten bleiben sollen:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Verzeichnisverlauf speichern:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Links gespeicherte Tabs dort wiederherstellen:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Rechts gespeicherte Tabs dort wiederherstellen:" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "Ein Trennzeichen" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Trennzeichen hinzufügen" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "Untermenü" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Füge Untermenü hinzu" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Alle zusammenfalten" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... aktuelles Level an markierten Einträgen" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Ausschneiden" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Lösche alle!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Untermenü und alle seine Elemente" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "Nur das Untermenü, nicht seine Elemente" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "Gewählte Einträge" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Lösche gewählte Einträge" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Auswahl in veraltete .tab Datei(en) exportieren" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Veraltete .tab Datei nach Standardart importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Veraltete .tab Datei(en) an gewählte Position importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Veraltete .tab Datei(en) an gewählte Position importieren" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Veraltete .tab Datei(en) an gewählte Position in ein Untermenü importieren" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Trennzeichen einfügen" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Untermenü einfügen" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Alle Zweige öffnen" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Einfügen" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Umbenennen" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "... alles von A bis Z" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "... nur einzelne Gruppe von Einträgen" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sortiere nur einzelne Gruppe von Einträgen" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "... Inhalt von Untermenüs gewählt, aber keine tieferen Level" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "Inhalt von Untermenüs ausgewählt, auch alle tiferen Level" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Menü aus Testergebnissen" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Hinzufügen" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Hinzufügen" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Klonen" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Runter" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Bea&rbeiten" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Einfügen" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "Einfügen" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Ent&fernen" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Ent&fernen" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Umb&enennen" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Hoch" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Startpfad des Befehles. Nicht in Anführungstriche setzen!" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "Name der Aktion. Wird nicht an das System übergeben, sondern dient nur der Identifizierung." #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "Parameter für den Befehl. Lange Pfade mit Leerzeichen sollten in Anführungsstriche gesetzt werden." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "Befehl zum Ausführen. Lange Pfade mit Leerzeichen sollten in Anführungsstriche gesetzt werden." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Beschreibung der Aktion" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Aktionen" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Endungen" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Kann durch Drag & Drop sortiert werden" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Dateitypen" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Aktionen können durch Drag & Drop angeordnet werden" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Endungen können durch Drag & Drop angeordnet werden" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Dateitypen können durch Drag & Drop angeordnet werden" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Name der Aktion:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Befehl" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parameter:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Startpfad:" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Start&pfad" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Angepasst mit..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Angepasst" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Bea&rbeiten" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "im Editor öffnen" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Bearbeiten mit..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Ausgabe aus Konsolen-Fenster entnehmen" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Im internen Editor öffnen" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Im internen Betrachter öffnen" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Öffnen" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Öffnen mit..." #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "In Konsolen-Fenster ausführen" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Betrachten" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "In Betrachter öffnen" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Betrachten mit..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Hier klicken um das Icon zu ändern!" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption #, fuzzy msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "Auf der Befehlszeile ausführen" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Erweitertes Kontextmenü" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Wenn die Dateityp-Verknüpfung genutzt wird, anbieten die aktuelle Datei hinzuzfügen, wenn nicht bereits in einem konfigurierten Typ enthalten" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Konfiguration der Dateitypen" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "Anbieten die Auswahl zur Dateityp-Verknüpfung hinzuzfügen, wenn nicht bereits enthalten" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "Wenn die Dateityp-Verknüpfung genutzt wird, anbieten die aktuelle Datei hinzuzfügen, wenn nicht bereits in einem konfigurierten Tpy enthalten" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "Im Terminal ausführen und schließen" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "Im Terminal ausführen und geöffnet lassen" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Einträge für erweiterte Optionen:" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Bestätigungsdialog zeigen für:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption #, fuzzy #| msgid "Copy operation" msgid "Cop&y operation" msgstr "Kop&ieren" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption #, fuzzy #| msgid "Delete operation" msgid "&Delete operation" msgstr "En&dgültiges Löschen" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "&F8/Entf löscht in den Papierkorb (mit 'Umschalt'- Taste = endgültiges Löschen)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption #, fuzzy #| msgid "Delete to trash operation" msgid "D&elete to trash operation" msgstr "In d&en Papierkorb löschen" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Sch&reibschutz-Attribut entfernen" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption #, fuzzy #| msgid "Move operation" msgid "&Move operation" msgstr "&Verschieben" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "&Suche nach Teil des Dateinamens" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "K&ommentare von Dateien/Verzeichnissen mitbearbeiten" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "&Nur den Dateinamen bearbeiten (nicht die Endung)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "&Zeige Auswahldialog für Tabs im Kopieren/Verschieben-Dialog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "&Fehler bei Datei-Operationen ignorieren und sie im Log-Fenster anzeigen" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Textsuche in Dateien" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Führe Operationen aus" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Dateisuche" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Nutzeroberfläche" #: tfrmoptionsfileoperations.lblbuffersize.caption #, fuzzy #| msgid "Buffer size for file operations (in KB):" msgid "&Buffer size for file operations (in KB):" msgstr "&Puffergröße für Dateioperationen (in KB)" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Puffergröße für die &Hash-Kalkulation (in KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption #, fuzzy #| msgid "Show operations progress initially in" msgid "Show operations progress &initially in" msgstr "Ze&ige Operationsfortschritt von Anfang an" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Standardvorlage für Suche:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Art der Neubenennung bei gleichem Namen:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "A&nzahl der Reinigungsdurchgänge" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Nutze Memor&y-Mapping zur Textsuche in Dateien" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "N&utze Stream zur Textsuche in Dateien" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Auf Standard-Einstellungen zurücksetzen" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Erlaube Farb-Überschneidung" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Ein&fügemarke nur als Rahmen darstellen" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption #, fuzzy #| msgid "Use Gradient Indicator" msgid "Use &Gradient Indicator" msgstr "Ver&wende Farbverlauf als Indikator" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Nutze inaktive Sel-Farbe" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Umgekehrte Au&swahl nutzen" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Cursor Begrenzung" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indikator für freien Speicherplatz auf Laufwerken" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Hinter&grund:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Hinte&rgrund 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "C&ursorfarbe" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Cursorte&xt" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Inaktive Cursor-Farbe" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Inaktive Markierungsfarbe" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "&Helligkeitswert des inaktiven Panels" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption #, fuzzy #| msgid "Indicator Back Color:" msgid "In&dicator Back Color:" msgstr "Hintergrun&dfarbe für Indikator" #: tfrmoptionsfilepanelscolors.lblindcolor.caption #, fuzzy #| msgid "Indicator Fore Color:" msgid "&Indicator Fore Color:" msgstr "Vordergrundfarbe für &Indikator:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Markierungsfarbe" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "Unten ist eine Vorschau. Der Cursor kann bewegt werden und Dateien markiert um einen sofortigen Eindruck von den verschieden Einstellungen zu bekommen." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "T&extfarbe" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption #, fuzzy #| msgid "Don't load file list until a tab is activated" msgid "Do&n't load file list until a tab is activated" msgstr "Datei &nicht laden bis ein Reiter aktiviert ist" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Zeige eckige Klammern um Verzeic&hnisse" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption #, fuzzy #| msgid "Highlight new and updated files" msgid "Hi&ghlight new and updated files" msgstr "Ma&rkiere neue und aktualisierte Dateien" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Ermöglicht sofortiges Umbenennen beim zweimaligen Anklicken eines Dateinamens" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "&Datei(en) in eigenem Prozess starten" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Icons nach Da&teiliste laden" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Zeige versteckte und S&ystemdateien" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Wenn Dateien mit der <Leertaste> ausgewählt werden, zur nächsten Datei wechseln (wie mit <Einfügen>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Format" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Sortierung" #: tfrmoptionsfilesviews.lblcasesensitivity.caption #, fuzzy #| msgid "Case sensitivity:" msgid "Case s&ensitivity:" msgstr "Schreibw&eise beachten:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Falsches Format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "&Datums- und Zeitformat" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Dateigr&öße-Format" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "Insert new files" msgid "&Insert new files" msgstr "Neue Date&ien einfügen" #: tfrmoptionsfilesviews.lblsortfoldermode.caption #, fuzzy #| msgid "Sorting directories:" msgid "So&rting directories:" msgstr "So&rtierung von Verzeichnissen:" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Sortierungs&methode" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "Move updated files" msgid "&Move updated files" msgstr "Aktualisierte Dateien verschiebe&n" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Übernehmen" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Lösch&en" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Vorlage..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Dateitypfarben (durch \"Ziehen und Loslassen\" anordnen)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Ka&tegorie der Attribute" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "&Kategoriefarbe" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Kategorie&maske" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Kategorie&name" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "S&chriftart für die Konsole" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Schrift für &Editor" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Log-Schriftart" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Hauptschri&ftart" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Schriftart für die &buchartige Ansicht" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Schriftart für &Betrachter" #: tfrmoptionshotkeys.btnaddhotkey.caption #, fuzzy #| msgid "Add hotkey" msgid "Add &hotkey" msgstr "Tastaturkürzel &hinzufügen" #: tfrmoptionshotkeys.btndeletehotkey.caption #, fuzzy #| msgid "Delete hotkey" msgid "&Delete hotkey" msgstr "&Tastaturkürzel löschen" #: tfrmoptionshotkeys.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "Tastaturkürz&el bearbeiten" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "K&ategorien:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "&Befehle:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Verknüpfungen:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Befehle" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Tastaturkürzel" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Beschreibung" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Tastaturkürzel" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parameter" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Steuerungs-Elemente" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Für die &folgenden Pfade und Unterverzeichnisse:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Icons für Aktionen in Menüs anzeigen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "&Überlagernde Icons zeigen (z. B. Pfeile bei Verknüpfungen)" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Keine speziellen Symbole" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Icons in Menüs" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Icon-Grö&ße" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Icons links vom Dateinamen anzeigen" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "A&lle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Alle verknüpften .&exe / .lnk - Dateien (langsam)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Keine Icons" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Nur &Standard-Icons" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Ausgewählte Namen hinzufügen" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Ausgewählte Namen mit &komplettem Pfad hinzufügen" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignoriere (zeige nicht) die folgenden Dateien und Verzeichnisse:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Speichern in:" #: tfrmoptionskeyboard.cblynxlike.caption #, fuzzy #| msgid "Left, Right arrows change directory (Lynx-like movement)" msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "P&feil nach links, bzw. rechts wechselt das Verzeichnis (Lynx-artiges Navigieren)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Schreiben" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt-Tast&e+Buchstabe" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "S&trg+Alt+Buchstabe" #: tfrmoptionskeyboard.lblnomodifier.caption #, fuzzy #| msgid "Letters" msgid "&Letters" msgstr "&Buchstaben" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Flache Schalter" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Flaches Erschei&nungsbild" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Fla&che Schalter" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Z&eige den 'Freien Speicher'-Indikator über den Panels" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Lo&g-Datei anzeigen" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Zeige den ausführenden Fensterteil im Hintergrund" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Zeige allgemeinen Fortschritt in der Menü-Zeile" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Befehlsze&ile anzeigen" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "&Zeige aktuelles Verzeichnis" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Zeige Schalter für &Laufwerke" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Zeige '&freien Speicher' von 'Gesamt-Speicherplatz' über den Panels" #: tfrmoptionslayout.cbshowdriveslistbutton.caption #, fuzzy #| msgid "Show d&rives list button" msgid "Show drives list bu&tton" msgstr "Zeige Schalte&r für das Laufwerks-Drop-down-Menü" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Ze&ige Schalter der Funktionstasten" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Zeige Haupt&menü" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Zeige &Schalterleiste" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption #, fuzzy #| msgid "Show short free space label" msgid "Show short free space &label" msgstr "Zeige kurze Information zum freien Speicherp&latz" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "&Statusleiste zeigen" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Zeige Ta&bstop-Zeile" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Zeige &Verzeichnis-Reiter" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Konsolenfenste&r zeigen" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Zeige zwei &Laufwerksleisten (feste Breite, über den Dateifenstern)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Bildschirmdarstellung" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Inhalt der Log-Datei betrachten" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Datum in den Namen der Log-Datei aufnehmen" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Packen / Entpacken" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Externe Befehlszeile ausführen" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Kopiere/Verschiebe/Erstelle Link/s&ymb. Link" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Löschen" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Ers&telle / Lösche Verzeichnisse" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "F&ehler aufzeichnen" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "E&rstelle Log-Datei:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Log-Informat&ionsmeldungen" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/Beenden" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Erfolgreiche Vorg&änge aufzeichnen" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Dateisystem Plugin" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Dateioperation Log-Datei" #: tfrmoptionslog.gblogfileop.caption #, fuzzy #| msgid "Log operations:" msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Operationen aufzeichnen:" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Fortschritt des Vorgangs:" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Vo&rschaubilder für gelöschte Dateien entfernen" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Inhalt der Log-Datei betrachten" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Beim Wechsel des Laufwerkes immer zur &obersten Ebenen des Laufwerkes wechseln" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "&Warnungen anzeigen (nur mit \"OK\" Schalter)" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Speichern von Bildvorschauen im Cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Vorschaubilder" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "In Bezug auf TC Import/Export:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsdatei:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC.exe-Datei" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ausgabepfad für Toolbar:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "Pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Größe der Vorschaubilder" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgid "&Selection by mouse" msgstr "Au&swahl mit der Maus" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Bewegen durch die Seite (scrollen)" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Auswahl" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgid "&Mode:" msgstr "&Modus" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgid "&Line by line" msgstr "Zei&le für Zeile" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgid "Line by line &with cursor movement" msgstr "Zeile für Zeile mit Be&wegen der Zeilenmarkierung" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgid "&Page by page" msgstr "&Seite für Seite" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "E&instellen" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Aktiviere&n" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "An&passen" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Suc&h-PlugIns erlauben es, alternative Such-Algorithmen oder aber externe Tools (wie \"locate\", oder ähnliches) zu nutzen" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Pack&er-PlugIns werden benutzt um mit Archiven zu arbeiten." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Inhalt-Plu&gIns erlauben es, weitere Details (wie z.B. MP3-Tags) in Dateilisten anzuzeigen, oder sie zur Suche oder Umbenennung zu nutzen" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Dateisystem-P&lugIns erlauben auf Dateisysteme oder externe Laufwerke zuzugreifen, auf die das Betriebssystem nicht zugreifen kann (z.B. Palm oder Pocket-PCs)." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Be&trachter-PlugIns erlauben die Anzeige von Bilder, Tabellen, Datenbanken o.ä. durch den Betrachter (F3 oder Strg+Q)." #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Aktiv" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Registriert für" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "&Such-PlugIns" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Pac&ker plugins (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Inhalt Pl&ugin (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Date&isystem-Plugins (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "&Betrachter-PlugIns" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Beginn (Name soll mit dem ersten eingetippten Buchstaben beginnen)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Ende des Namens (letztes Zeichen vor einem . soll passen)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Optionen" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Exakter &Name" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Suche Schreibweise" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Suche nach diesen Einträgen" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Umbennung erhalten, wenn ein Tab entsperrt wird" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Ziel-&Panel auswählen, wenn eines seiner Tabs angeklickt wird" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Reiter-Titel auch zeigen wenn nur einer vorhanden" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Doppelte Tabs schließen wenn DC geschlossen wird" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Schließen aller Reiter bestätigen" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Schließen von gesperrten Tabs bestätigen" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Begrenze Reiter-Tite&lzeile auf" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Alle gesperrten Reiter mit Sternchen * markieren" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Rei&ter-Titel auf mehrere Zeilen verteilen" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Strg+Pf&eil hoch öffnet einen neuen Reiter im Vordergrund" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "&Neuen Reiter neben aktuellem Reiter einfügen" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Bestehenden Tab erneut nutze, wenn möglich" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Zeige Schalter um Ta&bs zu schließen" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Laufwerksbuchstaben im Tab-Titel immer zeigen" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Verzeichnisreiter-Titel" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "Bu&chstaben" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Aktion festlegen, wenn auf den Tab-Titel doppel-geklickt wird" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Rei&ter-Position" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Nichts" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nein" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Links" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Rechts" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Nach dem erneuten Speichern zur-Tab-Konfiguration wechseln" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "Nach dem Speichern eines neuen Tab zur-Tab-Konfiguration wechseln" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "Extra-Optionen für Favoriten-Tabs ermöglichen (Zielseite beim Wiederherstellen auswählen, etc.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "Standard-Extra-Einstellungen zum Speichern neuer Favoriten-Tabs:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Extras für Tabs-Header" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "Wenn Tabs wiederhergestellt werden, diese erhalten:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Links gespeicherte Tabs sollen hier wiederhergestellt werden:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Rechts gespeicherte Tabs sollen hier wiederhergestellt werden:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verzeichnis-Verlauf weiter speichern bei diesen Favoriten-Tabs:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "Standardposition im Menü beim Speicherneines neuen Favoriten-Tabs:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Befehl um das Terminal auszuführen" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Befehl um einen Befehl im Terminal auszuführen und es anschließend zu schließen:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Befehl um einen Befehl im Terminal auszuführen und es anschließend offen zu halten:" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Befehl" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Befehl" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Befehl" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "Parameter:" #: tfrmoptionsterminal.ledtruntermparams.hint #, fuzzy #| msgid "{command} should normally present here to releft the command to be run in terminal" msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "{Befehl} sollte normalerweise hier angezeigt werden um den Befehl im Terminal auszuführen" #: tfrmoptionstoolbar.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "S&chalter klonen" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "L&öschen" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Tastatur&kürzel bearbeiten" #: tfrmoptionstoolbar.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "Neuen Schalter e&infügen" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Auswählen" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Andere..." #: tfrmoptionstoolbar.btnremovehotkey.caption #, fuzzy #| msgid "Remove hotkey" msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Tastaturk&ürzel entfernen" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Vorschlag" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "DC einen Vorschlag für den Tooltip anhand des Schaltertyps, Befehls oder Parameters machen lassen" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Flache Schalter" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Berichte Fehler mit Befehlen" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Befehlsparameter eingeben, jeden in einer eigenen Zeile. [F1] drücken um Hilfe zu Parametern zu erhalten." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Aussehen" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Höhe de&r Leiste:" #: tfrmoptionstoolbar.lblexternalcommand.caption #, fuzzy #| msgid "Command:" msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "&Befehl:" #: tfrmoptionstoolbar.lblexternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "&Parameter:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hilfe" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Tastaturkürzel:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Ico&ndatei" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Höhe der I&cons:" #: tfrmoptionstoolbar.lblinternalcommand.caption #, fuzzy #| msgid "Command:" msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Befehl:" #: tfrmoptionstoolbar.lblinternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parameter:" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Start&pfad" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Tooltip" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Toolbar mit ALLEN DC-Befehlen hinzufügen" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "für externen Befehl" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "für internen Befehl" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "für ein Trennzeichen" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "für ein Untermenü" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportieren..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuelle Toolbar..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Toolbar-Datei" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine TC .bar - Datei (bestehende erhalten)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine TC .bar - Datei (bestehende überschreiben)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Top-Toolbar..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Ein Backup der Toolbar" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "in eine Toolbar-Datei (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "in eine TC .bar - Datei (bestehende erhalten)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "in eine TC .bar - Datei (bestehende überschreiben)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende erhalten)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "zu einer \"wincmd.ini\" aus TotalCommander (bestehende ersetzen)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter der aktuellen Auswahl" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Auswahl" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importieren..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Backup einer Toolbar wieder herstellen" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "zur aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu neuer Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar auf oberster Toolbarebene hinzufügen" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbarebene hinzufügen" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbarebene ersetzen" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "aus einer Toolbar-Datei (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toolbar to current toolbar" msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu neuer Toolbar in der aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu neuer Toolbar an oberster Position der Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbar hinzufügen" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "aus einzelner TC .bar - Datei" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu einer neuen Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar der obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "zu oberster Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "aus \"wincmd.ini\" des TC" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "zu aktueller Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "zu einer neuen Toolbar in der aktuellen Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "zu einer neuen Toolbar in der obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "zur obersten Toolbar hinzufügen" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "die oberste Toolbar ersetzen" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "Suchen und Ersetzen..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "Alle in allen oberhalb..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "in allen Befehlen..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "in allen Icon-Bezeichnungen..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "in allen Parametern.." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "in allen Startpfaden..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "direkt hinter die aktuelle Markierung" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "als erstes Element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "als letztes Element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "direkt vor die aktuelle Markierung" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Schaltertyp" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Konsolenfenster offen lassen, wenn der Vorgang abgeschlossen ist" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "In Konsol&enfenster ausführen" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Externes Programm ben&utzen" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Zus&ätzliche Parameter" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "&Pfad zum ausführbaren Programm" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Hinzufügen" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "&Übernehmen" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Löschen" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Vorlage..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Zeige Tooltips (Hinweistexte)" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Angepasste Felder nach Dateityp" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategorie-&Hinweis:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Kategorie&maske" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Kategorie&name" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Buchartige Ansicht" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Beispiel" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Hintergrundfarbe in der &buchartigen Ansicht" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Schri&ftfarbe in der buchartigen Ansicht" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "A&nzahl der Spalten in der buchartigen Ansicht" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Kon&figurieren" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Packe Dateien" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Sepa&rate Archive erstellen, pro gewählte Datei/Verzeichnis eins" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "SF&X-Archiv erstellen" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Verschl&üsseln" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "In Archiv &verschieben" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archiv auf&teilen" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Z&uerst in einem TAR-Archiv zusammenfassen" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Pfadnamen &mitspeichern (nur abwärts)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Packe Datei(en) in Archiv" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Packer" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Alle entpacken und ausführen" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Entpacken und ausführen" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Eigenschaften der gepackten Datei(en)" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attribute:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Kompressionsverhältnis:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Methode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Originalgröße" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datei:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Gepackte Größe:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Packer:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Zeit:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Filter-Panel schließen" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Text eingeben, nach dem gesucht oder gefiltert werden soll" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Abhängig von der Schreibweise" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Verzeichnisse" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Dateien" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Entspricht dem Anfang" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Entspricht der Endung" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Umschalten zwischen Suchen und Filtern" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Mehr Regeln" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "W&eniger Regeln" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Nutze Inhalts-Plugin, kombiniert mit:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Feld" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Wert" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&UND (alles stimmt überein)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&ODER (irgendeine Übereinstimmung)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Abbruch" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "S&chließen" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Hilfe" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "Zeichen zum Einfügen au&swählen:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Ok" #: tfrmsetfileproperties.caption #, fuzzy #| msgid "Change file properties" msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Ändern von Dateieigenschaften" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Dauerhaft" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Erstellt:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Versteckt" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Zugriff:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Geändert" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Schreibgeschützt" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Auch Unterverzeichnisse" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Zeitstempel-Eigenschaften" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attribute" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption #, fuzzy #| msgid "(gray = unchanged, checked=set attribute)" msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(Ein graues Feld bedeutet, dass ein Wert unverändert bleibt)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andere" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Besitzer" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Darstellung im Text" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ausführen" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy #| msgid "(gray = unchanged, checked=set attribute)" msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(Ein graues Feld bedeutet, dass ein Wert unverändert bleibt)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lesen" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Schreiben" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Ende" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Einige Funktionen um angemessene Pfade zu wählen" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Teiler" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Benötigt eine CRC32-Datei zum Verifizieren" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Dateiname" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Größe und Anzahl der Teilstücke" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "&Zielverzeichnis" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Datei&quelle" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "A&nzahl der Teile" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Betriebssystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Maschinen-Typ" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revision" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Version" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Abbruch" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Erstelle symb. Link" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Bestehen&des Ziel (auf das die Verknüpfung zeigt)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "&Verknüpfungsname" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Schließen" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Vergleiche" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Synchronisiere" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synchronisiere Verzeichnisse" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asymetrisch" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "nach Inhalt" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignoriere Datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "nur ausgewählte" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Unterverzeichnisse" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Zeige:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Name" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Größe" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Größe" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Name" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(im Hauptfenster)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Vergleiche" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Ansicht links" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Ansicht rechts" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "Duplikate" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "Einzelne" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Bitte \"Vergleiche\" anklicken um zu beginnen" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Synchronisieren" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Überschreiben bestätigen" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "&Neue hinzufügen" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "A&bbruch" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "&Ändern" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "&Standard" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Entfe&rnen" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Anpass-PlugIn" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "Archiv&typ am Inhalt erkennen" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Kann Dateien &löschen" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "U&nterstützt Verschlüsselung" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "A&ls normale Dateien zeigen (Packer-Symbol verstecken)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Unterstützt &Kompression im Arbeitsspeicher" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Ka&nn bestehende Archive verändern" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "&Archive können mehrere Dateien enthalten" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Kann neue Archi&ve erstellen" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "&Unterstützt die Optionen-Dialogbox" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Erlaubt die Suche von Te&xt in Archiven" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Beschreibung:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "&Erkenne String:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Endung:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Name:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Über den Be&trachter" #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Zeigt den 'Über'-Dialog" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Datei kopieren" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Datei kopieren" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Datei löschen" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Datei löschen" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Nächste" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Nächste Datei laden" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Vorherige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Vorherige Datei laden" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Spiegeln" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Spiegeln" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Datei verschieben" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Datei verschieben" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Neu laden" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Aktuelle Datei neu laden" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Um 180 Grad drehen" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Um 180 Grad drehen" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Um 270 Grad drehen" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Um 270 Grad drhen" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Um 90 Grad drehen" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Um 90 Grad drehen" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Speichern unter ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Datei speichern unter ..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Strecken" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Bild strecken" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopieren" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopieren" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beschneiden" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "&Löschen" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "&Löschen" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ganzer Bildschirm" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Markieren" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Spiegeln" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Verschieben" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Verschieben" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Malen" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rote Augen" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "" "Größe\n" "ändern\n" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Rückgängig machen" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Größer darstellen" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Kleiner darstellen" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Schnellansicht" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bilder automatisch nacheinander anzeigen (Slideshow)" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stift" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Markieren" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Malen" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Bilder automatisch nacheinander anzeigen (Slideshow)" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Betrachten" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Über" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Bin&är anzeigen" #: tfrmviewer.micenter.caption msgid "Center" msgstr "Zentrieren" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "In &Zwischenablage kopieren" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Bearbeiten" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodiere" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "En&de" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datei" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Ganzer Bildschirm" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Bilder" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Als He&x anzeigen" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "B&ild" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Wie ein &Buch anzeigen" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Spiegeln" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugins" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Vorschau" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Drucken..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Drehen" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Speichern" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Speichern unter ..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "" "Anzeige als\n" "Bild kopieren (Screenshot)\n" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Suchen" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Nächste suchen" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Voriges suchen" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Strecken" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "Nur große strecken" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "A&ls Text anzeigen" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Betrachten" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "&Zeilenumbruch" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Größer darstellen" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Kleiner darstellen" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "In &Zwischenablage kopieren" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Alle mar&kieren" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Starten" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Dateioperationen" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Immer im Vordergrund" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Nutze \"drag && drop\" um Operationen zwischen Warteschlangen zu verschieben" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Abbruch" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Abbruch" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Neue Warteschlange" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "In eigenem Fenster anzeigen" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "An den Beginn der Warteschlange setzen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "An das Ende der Warteschlange setzen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Warteschlange" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Aus der Warteschlange entfernen" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "In eigenem Fenster anzeigen" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Alle &pausieren" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Wenn die Datei vorhanden ist" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Im Hintergrund ausführen (eigene Verbindung)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Wenn Datei vorhanden" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Die Datei konnte nicht gefunden werden, aber könnte helfen die vorhandenen zu prüfen:\n" "%s\n" "\n" "Kann sie manuell zur Verfügung gestellt werden? Dann bitte \"Ok\" klicken,\n" "oder \"Abbruch\" klicken um ohne sie fortzusetzen.\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Schnell-Filter abbrechen" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Aktuellen Vorgang abbrechen" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Dateinamen eingeben, mit Endung, für gezogenen Text" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Zu importierendes Textformat" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Kompromitiert:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Allgemein:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Fehlend:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Lesefehler:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Erfolg:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Checksum eingeben und Algorithmus auswählen" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Checksum verifizieren" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Gesamt:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Die Zwischenablage enthält keine gültigen Daten für die Werkzeugleiste." #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "Alle;aktives Panel;Linkes Panel;rechtes Panel;Datei-Operationen;Konfiguration;Netzwerk;Verschiedenes;Paralleler Anschluss;Druck;Markierung;Sicherheit;Zwischenablage;FTP;Navigation;Hilfe;Fenster;Befehlszeile;Werkzeuge;Ansicht;Benutzer;Tabs;Sortierung;Log" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ablauf sortiert;A-Z sortiert" #: ulng.rscolattr msgid "Attr" msgstr "Attribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Endung" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Name" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Größe" #: ulng.rsconfcolalign msgid "Align" msgstr "Ausrichten" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Überschrift" #: ulng.rsconfcolconfig msgid "Config" msgstr "Einstellung" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "&Löschen" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feldinhalt" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Verschieben" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Breite" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Spalten anpassen" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Dateiverknüpfungen konfigurieren" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Befehlszeile und Parameter bestätigen" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopie (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importierte DC-Toolbar" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importierte TC-Toolbar" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Gezogener Text" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_Gezogener HTML-Text" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Gezogener RichText" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Gezogener einfacher Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Gezogener UnicodeUTF16-Text" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_Gezogener UnicodeUTF8-Text" #: ulng.rsdiffadds msgid " Adds: " msgstr " Fügt hinzu: " #: ulng.rsdiffdeletes msgid " Deletes: " msgstr " Löscht: " #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Die Dateien sind identisch!" #: ulng.rsdiffmatches msgid " Matches: " msgstr " Entspricht: " #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Verändert: " #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "Alle Vorgänge abgeschlossen" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Fortschritt für alle Vorgänge %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Unterbrechen" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "A&lle" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "An&hängen" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Quelldateien a&utomatisch umbenennen" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Abbru&ch" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortset&zen" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Zunächst nur d&ieses Verzeichnis kopieren" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "&Alle bestehenden Verzeichnisse kopieren" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Programm beenden" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Alle i&gnorieren" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nein" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Keine" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "A&ndere" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Überschreiben" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Alle &vorhandenen Dateien überschreiben" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "A&lle größeren Dateien überschreiben" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Alle älteren &Dateien überschreiben" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Alle &kleineren Dateien überschreiben" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Umb&enennen" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Fo&rtsetzen" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "&Wiederholen" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Übe&rspringen" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Übers&pringe alle" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Berechne Dateien und Verzeichnisse" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Berechne Prüfsumme..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verifiziere Prüfsumme..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Datei(en) kopieren" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Datei(en) löschen" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Datei(en) verschieben" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Starten" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Warteschlange" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Geschwindigkeit %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "Geschwindigkeit %s/s, verbleibende Zeit %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "&Teile Datei" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Datei(en) durch überschreiben löschen (nicht wiederherstellbar)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<keine Bezeichnung>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<kein Medium>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Interner Text-Editor von Double Commander" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gehe zu Zeile:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gehe zu Zeile" #: ulng.rseditnewfile msgid "new.txt" msgstr "Neu.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Dateiname:" #: ulng.rseditnewopen msgid "Open file" msgstr "Öffne Datei" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Zurück" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Suchen" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Vorwärts" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Ersetzen" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "Mit externem Editor" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "Mit internem Editor" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Auf der Befehlszeile ausführen" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Im Terminal ausführen und schließen" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Im Terminal ausführen und offen lassen" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Links;Rechts;Aktiv;Inaktiv;Beide;Nichts" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Ja;Nein" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportiert_aus_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Fragen;Überschreiben;Hinein kopieren;Überspringen" #: ulng.rsfileopfileexistsoptions #, fuzzy #| msgid "Ask;Overwrite;Skip" msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Fragen;Überschreiben;Ältere überschreiben;Überspringen" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Fragen;Niemals setzen;Fehler ignorieren" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Vorlage definieren" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s Level" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Alle (ohne Einschränkung der Verzeichnistiefe)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Nur das aktuelle Verzeichnis" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Verzeichnis %s existiert nicht!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Gefunden: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Suche als Vorlage speichern" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Vorlagen-Name" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Gelesen: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Suche" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Suche Datei(en)" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Zeit des Scans:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Starte bei" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%s Byte von %s frei" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s Bytes frei" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum/Zeit des letzten Zugriffs" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attribute" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Kommentar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimierte Größe" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum/Zeit der Erstellung" #: ulng.rsfuncext msgid "Extension" msgstr "Endung" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Datum/Zeit ändern" #: ulng.rsfunclinkto msgid "Link to" msgstr "Vernüpfung mit" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum/Zeit der letzten Änderung" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Name" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Name ohne Endung" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Besitzer" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pfad" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Größe" #: ulng.rsfunctype msgid "Type" msgstr "Typ" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Fehler beim Erstellen des Hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "nichts;Name a-z;Name, z-a;Endung, a-z;Endung, z-a;Größe 9-0;Größe 0-9;Datum 9-0;Datum 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Sorry, nichts erkannt zum Importieren!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Warnung! Wenn ein BackUp einer \"Hotlist\" wird die existierende mit dem BackUp überschrieben\n" "Sicher, dass weiter gemacht werden soll?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopieren/Verschieben-Dialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Vergleichsprogramm" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Bearbeite Kommentar-Dialog" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Suche Datei(en)" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Haupt-Fenster" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Schnellansicht" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kann Bezug zur Standard Bar-Datei nicht finden" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Verschmelzer ist fertig" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maske abwählen" #: ulng.rsmarkplus msgid "Select mask" msgstr "Wähle Maske" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Eingabemaske:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Eine Spaltenansicht mit diesem Namen besteht bereits." #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "Um das aktuelle Bearbeiten der Spaltenansicht zu verändern, die aktuelle entweder SPEICHERN, KOPIEREN oder LÖSCHEN" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Bearbeite angepasste Spalten" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Neuen angepassten Namen für die Spaltenansicht angeben" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Bearbeite diese angepasste Spaltenansicht" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Aktionen" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Netzwerklaufwerk trennen" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Bea&rbeiten" #: ulng.rsmnueject msgid "Eject" msgstr "Auswerfen" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Archiv hierher entpacken..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Netzwerklaufwerk mappen..." #: ulng.rsmnumount msgid "Mount" msgstr "Einbinden" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Neu" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kein Datenträger verfügbar" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Öffnen" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "Öffnen mit..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andere..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Archiv hier erstellen..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortieren" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" msgid "Unmount" msgstr "Einbindung lösen" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Betrachten" #: ulng.rsmsgaccount msgid "Account:" msgstr "Zugang:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Zusätzliche Parameter für die Befehlszeile des Packers:" #: ulng.rsmsgbadcrc32 #, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Falscher CRC32-Wert für entstehende Datei:\n" "\"%s\"\n" "\n" "Soll die entstehende korrupte Datei trotzdem behalten werden?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Die Datei \"%s\" kann nicht über sich selbst kopiert/verschoben werden!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kann Verzeichnis %s nicht löschen." #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Verzeichniswechsel nach [%s] fehlgeschlagen" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Alle in-aktiven Tabs entfernen?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Dieser Tab (%s) ist gesperrt! Trotzdem schließen?" #: ulng.rsmsgcolumnsmodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding columns view have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen zu den Spaltenansichten wurden verändert.\n" "\n" "Sollen sie vor dem Beenden gespeichert werden?\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Soll DoubleCommander wirklich beendet werden?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Die Datei %s wurde verändert. Soll sie zurückkopiert werden?" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "Zurückkopieren nicht möglich - ssoll die veränderte Datei behalten werden?" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "%d markierte Datei(en)/Verzeichnis(se) kopieren?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Markierte \"%s\" kopieren?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Neuen Dateityp erstellen \"%s Dateien\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Speicherort und Namen unter dem die Toolbar-Datei gespeichert werden soll" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Angepasste Aktion" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Teilweise kopierte Datei löschen?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Löschen von %d ausgewählten Dateien/Verzeichnissen?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "%d markierte Dateien/Verzeichnisse in den Papierkorb löschen?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Markierte \"%s\" löschen?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Markierte \"%s\" in den Papierkorb löschen?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kann \"%s\" nicht in den Papierkorb löschen! Endgültig löschen?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Laufwerk steht nicht zur Verfügung" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Optionen für Drag && Drop wurden verändert. Soll gespeichert werden vor dem Beenden?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Namen für die angepasste Aktion angeben:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Dateiendung eingeben:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Namen eingeben:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "Bitte Namen für die neue Dateiendung \"%s\" angeben" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-Fehler in der Archivdatei" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datenfehler" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Kann nicht mit dem Server \"%s\" verbinden" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kann die Datei %s nicht zu %s kopieren" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ein Verzeichnis mit Namen \"%s\" besteht bereits." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s wird nicht nicht unterstützt" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Verzeichnis %s besteht bereits!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Abbruch durch Benutzer" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Kann Datei nicht schliessen" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kann Datei nicht erstellen" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Keine weiteren Dateien im Archiv" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kann bestehende Datei nicht öffnen" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Kann Datei nicht lesen" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Kann Datei nicht erstellen" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Verzeichnis %s kann nicht erstellt werden!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ungültige Verknüpfung" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Keine Dateien gefunden" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Nicht genügend Arbeitsspeicher" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funktion wird nicht unterstützt!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fehler im Befehl des Kontextmenü" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fehler beim Laden der Konfiguration" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntax-fehler im regulären Ausdruck!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Kann Datei %s nicht zu %s umbenennen" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kann Verknüpfung nicht festlegen" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kann Datei nicht speichern" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Kann Attribut für \"%s\" nicht setzen" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kann Datum/Zeit für \"%s\" nicht setzen" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kann Besitzer/Gruppe für \"%s\" nicht erstellen" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Berechtigungen für \"%s\" können nicht gesetzt werden" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Puffer zu klein" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Zuviel Dateien zum Packen" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Archivformat unbekannt" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "Wirklich alle Einträge vom Favoriten-Tab entfernen? (Es gibt keine Möglichkeit dies \"rückgängig\" zu machen!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Andere Einträge hierher ziehen" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(Ende des Untermenüs)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "Namen für diesen Favoriten-Tab-Eintrag eingeben" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Speichere einen Favoriten-Tab-Eintrag" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Fehler beim Laden von Favoriten-Tabs..." #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Fehler beim Speichern von Favoriten-Tabs..." #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Anzahl der exportierten Favoriten-Tabs erfolgreich: %d in %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "Standard extra Einstellung für Verzeichnisverlauf für neue Favoriten-Tabs:" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "Favoriten-Tabs wurden dem Speicher hinzugefügt!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Anzahl der erfolgreich importierten Datei(en): %d auf %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Veraltete importierte Tabs" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr ".tab-Datei(en) zum Importieren auswählen (kann mehr als eine gleichzeitig sein!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "Letzte Änderung der Favoriten-Tabs wurde noch nicht geändert. Vor dem Fortsetzen speichern?" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "Favoriten-Tabs wurden geändert. Vor dem Beenden speichern?" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Name" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "Dies wird die Favoriten-Tab-Einträge namens %s laden" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "In die Favoriten-Tabs-Liste oberhalb von (%s) speichern" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Name des Menüs" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Verlauf weiter speichern mit Favoriten-Tabs:" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(Unterteilung)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Dies wird die Favoriten-Tabs \"%s\" laden" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "Aktuellen Tab oberhalb des bestehenden Favoriten-Tabs speichern" #: ulng.rsmsgfileassociationsextramodifiedwanttosave #, fuzzy #| msgid "" #| "File extension associations extra options have been modified.\n" #| "\n" #| "Do you want to save before to exit?\n" msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Besondere Optionen für Dateiendungen wurden verändert.\n" "\n" "Sollen sie vor dem Beenden gespeichert werden?\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave #, fuzzy #| msgid "" #| "File extension associations have been modified.\n" #| "\n" #| "Do you want to save before to exit?\n" msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Verknüpfungen für Dateiendungen wurden verändert.\n" "\n" "Sollen sie vor dem Beenden gespeichert werden?\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Datei %s wurde geändert, speichern?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Überschreiben:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datei %s existiert bereits. Überschreiben?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Mit Datei:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Datei \"%s\" nicht gefunden." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive Datei-Operationen" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Es gibt Datei-Operationen, die noch nicht beendet sind. Das Schliessen von Double Commander kann deshalb zu Datenverlust führen!" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Optionen für Dateioperationen wurden verändert. Soll gespeichert werden vor dem Beenden?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding panel color have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen für die Panelfarbe wurden verändert.\n" "\n" "Sollen sie vor dem Beenden gespeichert werden?\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Datei %s ist als schreibgeschützt markiert. Soll sie gelöscht werden?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Die Größe der Datei \"%s\" ist zu groß für das Dateisystem des Ziel-Laufwerks!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Verzeichnis %s besteht bereits. Bitte eine Auswahl treffen:" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Sym-Link \"%s\" folgen?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Textformat zum Importieren auswählen" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Füge %d markierte Verzeichnisse hinzu" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Füge ausgewähltes Verzeichnis hinzu:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Füge aktuelles Verzeichnis hinzu" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Führe Befehl aus" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration der Verzeichnis-Hotlist" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Sicher, dass alle Einträge aus der Verzeichnis-Hotlist entfernt werden sollen? (Es gibt keine Möglichkeit dies \"rückgängig\" zu machen!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dies wird den folgenden Befehl ausführen:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "So wird das Verzeichnis benannt" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dies wird den aktiven Rahmen in den folgenden Pfad ändern:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Und der inaktive Rahmen wird in den folgenden Pfad geändert:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Fehler beim Sichern der Einträge" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Fehler beim Export der Einträge" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportiere alle" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportiere Verzeichnis-Hotlist - Wähle Einträge die exportiert werden sollen" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportiere ausgewählte" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Alle importieren!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importiere Verzeichnis-Hotlist - Wähle die Einträge die importiert werden sollen" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Ausgewählte importieren" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Pfad" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Finde \".hotlist\" Datei zum Importieren" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Verzeichnis-Hotlist wurde verändert. Soll sie gespeichert werden vor dem Schließen?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Name für HotDir" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Zahl neuer Einträge: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nichts zum Exportieren ausgewählt!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "HotDir-Pfad" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Gewähltes Verzeichnis erneut hinzufügen" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Aktuelles Verzeichnis erneut hinzufügen" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Speicherort und Dateinamen der Verzeichnis-Hotlist eigeben, die wiederhergestellt werden soll" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Befehl" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(Ende des Untermenüs)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Name des Menüs" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Name:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(Unterteilung)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Name des Untermenüs" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Ziel der HotDir" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Entscheidung ob der aktive Frame in einer bestimmten Weise sortiert werdensoll, nachdem das Verzeichnis gewechselt wurde" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Entscheide, ob der nicht-aktive Frame in einer bestimmten Art und Weise sortiert werden soll nach dem Wechsel des Verzeichnisses" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Einige Funktionen zum Wählen eines relativen Pfades, absoluten Pfades, spezieler Ordner, etc." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Anzahl aller gespeicherter Einträge: %d\n" "\n" "Name des Backups: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Gesamtzahl der exportierten Einträge" #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Sollen alle Elemente innerhalb der Untermenüs gelöscht werden [%s]?\n" "JA als Antwort löscht nur Unterteilungen innerhalb der Untermenüs, aber erhält die Elemente in den Untermenüs.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Speicherort und Dateiname zum Speichern der Verzeichnis-Hotlist" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Falsches Ergebnis der Dateilänge für: \"%s\"" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Bitte nächste Disk oder ähnliches einlegen.\n" "Damit diese Datei geschrieben werden kann:\n" "\"%s\"\n" "\n" "Anzahl der noch zu schreibenden Bytes: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fehler in der Befehlszeile" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ungültiger Dateiname" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ungültiges Format der Konfigurationsdatei" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ungültiger Pfad" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Pfad %s enthält ungültige Zeichen." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dies ist kein akzeptables Plugin" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dieses Plugin wurde für Double Commander für %s erstellt.%sEs kann nicht für %s verwendet werden!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ungültiges Zitat" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ungültige Auswahl" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Lade Dateiliste..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "TC-Konfigurationsdatei (wincmd.ini) finden" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "TC.exe (totalcmd.exe oder totalcmd64.exe) finden" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopiere Datei %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Lösche Datei %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fehler:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Externen laden" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Externes Ergebnis" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Entpacke Datei(en) %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Erstelle Verknüpfung %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Erstelle Verzeichnis %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Verschiebe Datei(en) %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen die Log-Datei betreffend wurden verändert.\n" "\n" "Soll vor dem Beenden gespeichert werden?\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Packe in Datei %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Verzeichnis %s entfernen" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fertig:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Erstelle symb. Link für %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Teste Dateiintegrität von %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Lösche Datei %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Lösche Verzeichnis %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Master-Passwort" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Bitte Master-Passwort eingeben" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Verschiedene Optionen wurden verändert. Soll vor dem Schließen gespeichert werden?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Neue Datei" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Nächster Teil wird entpackt" #: ulng.rsmsgnofiles msgid "No files" msgstr "Keine Dateien" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Keine Dateien ausgewählt." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Nicht genügend Speicherplatz auf dem Ziellaufwerk. Trotzdem fortfahren?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Nicht genügend Speicherplatz auf dem Ziellaufwerk. Erneut versuchen?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Kann Datei %s nicht löschen" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Nicht möglich." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "Unten ist eine Vorschau zu sehen. Der Cursor kann bewegt werden und Dateien markiert werden um einen Eindruck von den verschiedenen Einstellungen zu bekommen." #: ulng.rsmsgpassword msgid "Password:" msgstr "Passwort" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Die zwei Passwort-Eingaben stimmen nicht überein!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Bitte Passwort eingeben:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Passwort (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Bitte das Passwort zum Verifizieren erneut eingeben!" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Füge %s hinzu" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Konfigurieren" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Lösche %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Voreinstellung \"%s\" besteht bereits. Überschreiben?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Problem beim Ausführen des Befehls (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Dateiname für gezogenen Text:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Bitte diese Datei zur Verfügung stellen. Nochmal versuchen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Neuen guten Namen für diesen Favoriten-Tab eingeben" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Neuen Namen für dieses Menü eingeben" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "%d markierte Dateien/Verzeichnisse umbenennen/verschieben?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Datei/Verzeichnis \"%s\" kopieren/verschieben?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Bitte DoubleCommander neustarten um die Änderungen zu übernehmen" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Bitte angeben welcher Dateityp die Endung \"%s\" bekommen soll" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Ausgewählt: %s von %s, Dateien: %d von %d, Verzeichnisse: %d von %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Ausführbare Datei auswählen" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Bitte nur Prüfsummen-Dateien auswählen!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Speicherort des nächsten Teils angeben" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Laufwerksbezeichnung angeben" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Besondere Verzeichnisse" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Pfad aus dem aktiven Frame hinzufügen" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Pfad aus dem inaktiven Frame hinzufügen" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Durchsuche und benutze den gewählten Pfad" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Benutze Umgebungsvariable..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gehe zu besonderem Double Commander Pfad" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gehe zu Umgebungsvariable..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gehe zu anderem besonderen Windows-Pfad..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gehe zu besonderem Windows-Verzeichnis (TC)" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Relativ zum HotDir-Pfad machen" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Mache Pfad absolut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Mache Pfad relativ zu Double Commander" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Mache Pfad relativ zur Umgebungsvariable" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Mache Pfad relativ zum besonderen Windows-Verzeichnis (TC)" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Mache Pfda relativ zu anderem besonderen Windows-Verzeichnis..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Nutze besonderen Double Commander-Pfad" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Nutze HotDir-Pfad" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Nutze anderes besonderes Windows-Verzeichnis" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Nutze besonderes Windows-Verzeichnis (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "Dieser Tab (%s) ist gesperrt! Verzeichnis in anderem Tab öffnen?" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Reiter umbenennen" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Neuer Reiter-Name" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen veränderte Verzeichnis-Tabs extra betreffend.\n" "\n" "Vor dem Beenden speichern?\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen veränderte Verzeichnis-Tabs betreffend.\n" "\n" "Vor dem Beenden speichern?\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Zielpfad" #: ulng.rsmsgtcconfignotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fehler! Kann die TC-Konfigurationsdatei nicht finden:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "Fehler! Die ausführbare Datei für die TC-Konfiguration kann nicht gefunden werden:" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Fehler! TC läuft noch, sollte aber für diese Aktion geschlossen werden.\n" "Bitte schließen und OK klicken oder ABBRUCH zum abbrechen.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fehler Der gewünschte TC-Toolbar-Ordner kann nicht gefunden werden:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Speicherort und Datinamen angeben unter dem die TC-Toolbar-Datei gespeichert werden soll" #: ulng.rsmsgterminaloptionsmodifiedwanttosave #, fuzzy #| msgid "" #| "Options regarding terminal have been modified.\n" #| "\n" #| "Do you want to save them before to exit?\n" msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Optionen die das Terminal betreffen wurden verändert.\n" "\n" "Sollen sie vor dem Beenden gespeichert werden?\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" ist jetzt in der Zwischenablage" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "Endung der gewählten Datei gehört nicht zu den bekannten Dateitypen" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Fehler! Problem beim Speichern der Toolbar!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Speicherort der \".toolbar\"-Datei angeben" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Speicherort der \".Bar\"-Datei angeben" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Toolbar wurde verändert. Sollen die Veränderungen gespeichert werden?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Speicherort und Dateinamen der Toolbar angeben, die wiederhergestellt werden soll" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Gespeichert!\n" "Toolbar-Name: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Zuviele Dateien ausgewählt." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Unbestimmt" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nutzername:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nutzername (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Laufwerksbezeichnung:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Bitte Volume-Größe eingeben:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "%d markierte Dateien/Ordner sicher löschen?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Markierte \"%s\" sicher löschen?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "mit" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Keine Änderung;GROSSBUCHSTABEN;alles klein;Erster Buchstabe Groß;Erster Buchstabe In Jedem Wort Groß;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abgebrochen" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Berechne Prüfsumme" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Berechne Prüfsumme in \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Berechne Prüfsumme von \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Berechne" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Berechne \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Verschmelze" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Verschmelze Dateien in \"%s\" nach\"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiere" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiere von \"%s\" nach \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiere \"%s\" nach \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Erstelle Verzeichnis" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Erstelle Verzeichnis \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Lösche" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Lösche in \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Lösche \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Führe aus" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Führe \"%s\" aus" #: ulng.rsoperextracting msgid "Extracting" msgstr "Entpacke" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Entpacke von \"%s\" nach \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Beendet" #: ulng.rsoperlisting msgid "Listing" msgstr "Liste auf" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Liste \"%s\" auf" #: ulng.rsopermoving msgid "Moving" msgstr "Verschiebe" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Verschiebe von \"%s\" nach \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Verschiebe \"%s\" nach \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Nicht gestartet" #: ulng.rsoperpacking msgid "Packing" msgstr "Packe" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Packe von \"%s\" nach \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Packe \"%s\" nach \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausiert" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "In Warteschlange" #: ulng.rsoperrunning msgid "Running" msgstr "Wird ausgeführt" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Stelle Eigenschaften ein" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Setze Eigenschaften in \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Setze Eigenschaft von \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Teile" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Teile \"%s\" nach \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Wird gestartet" #: ulng.rsoperstopped msgid "Stopped" msgstr "Gestoppt" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stoppe" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Teste in \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Teste \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Verifiziere Prüfsumme" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Verifiziere Prüfsumme in \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verifiziere Prüfsumme von \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Warte auf Zugriff auf Datei-Quelle" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Warte auf Benutzereingabe" #: ulng.rsoperwiping msgid "Wiping" msgstr "Lösche sicher" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Lösche sicher in \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Lösche \"%s\" sicher" #: ulng.rsoperworking msgid "Working" msgstr "Führe aus" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Am Anfang anfügen;Am Ende anfügen;Smart hinzufügen" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Lösche:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Ohne gespeicherten Pfad entpacken:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Format Analyse-Modus:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "" #: ulng.rsoptarchiveidseekrange #, fuzzy #| msgid "ID Seek Range (optional):" msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID Such-Bereich (optional)" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Passwortabfrage:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Selbstentpackendes Archiv (Sfx) erstellen:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Teste:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Name des Archiv-Typs:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Wert" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Verknüpfe PlugIn \"%s\" mit:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Erste;Letzte;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassisch, Vermächtnis-Reihenfolge, Alphabetische Reihenfolge (aber Sprache immer zuerst)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktiver Frame-Panel links, inaktiver rechts (Vermächtnis);Linker Frame-Panel links, rechts auf der rechten Seite" #: ulng.rsoptdisable msgid "Disable" msgstr "Deaktivieren" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Aktivieren" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Endung eingeben" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Zeiger" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Einfügemarke" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Einfügemarke + Zeiger" #: ulng.rsoptexampletext msgid "Text" msgstr "" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Am Anfang hinzufügen;Am Ende hinzufügen;Alphabetisch sortieren" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "eigenes Fenster;minimiertes eigenes Fenster;Operationsfenster" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Tastaturkürzel %s für cm_delete wird registriert, damit die Änderung rückgängig gemacht werden kann." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Füge Tastaturkürzel für %s hinzu" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Tastaturkürzel erstellen" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kann die Verknüpfung nicht erstellen" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Verknüpfung ändern" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Befehle" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Verknüpfung %s für cm_Delete hat Parameter, die diese Einstellung überschreiben. Soll dieser Parameter geändert werden, um die globale Einstellung zu verwenden?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Verknüpfung %s für cm_Delete muss einen Parameter geändert bekommen, um der Verknüpfung %s zu entsprechen. Soll der Parameter geändert werden?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beschreibung" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Bearbeite Tastaturkürzel für %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Parameter wiederherstellen" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Tastaturkürzel" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Tastaturkürzel" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<leer>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parameter" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Verknüpfung festlegen um Dateien zu löschen" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Damit diese Einstellung mit Verknüpfung %s funktioniert, muss %s cm_Delete zugewiesen werden, aber ist %s zugewiesen. Soll dies geändert werden?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Verknüpfung %s für cm_Delete ist eine Sequenz-Verknüpfung, für die ein Tastaturkürzel mit umgekehrter Umschalt-Taste nicht verwendet werden kann. Die Einstellung funktioniert wahrscheinlich so nicht." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Tastaturkürzel in Gebrauch" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "Tastaturkürzel %s wird bereits verwendet." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Verändern zu %s?" #: ulng.rsopthotkeysusedby #, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "Benutzt für %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "für diesen Befehl genutzt, aber mit unterschiedlichen Parametern" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archivierer" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Automatisch auffrischen" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Verhalten" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Verkürzt" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farben" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Spalten" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Einstellungen" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Benutzerdefinierte Spalten" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Verzeichnisfavoriten" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag & Drop (ziehen und ablegen)" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Schalter für das Laufwerks-Drop-down-Menü" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Favoriten-Tabs" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Extra Optionen für Dateiverknüpfungen" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Dateiverknüpfungen" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Dateioperationen" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Dateifenster" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Datei-Ansicht" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Dateitypen" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Verzeichnisreiter" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Favoriten-Tabs extra" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Schriftart" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Hervorheber" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Tastaturkürzel" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ausschlussliste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasten" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Sprache" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Layout" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Log" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Verschiedenes" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Maus" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugins" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Schnelle Suche/Filter" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Befehlszeilen-Interpreter" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Werkzeugleiste" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Ergänzungen" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Tools" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Tooltips" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Kein;Befehlszeile;Schnellsuche;Schnellfilter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Linke Taste;Rechte Taste;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "an den Beginn der Dateiliste;hinter die Verzeichnisse (wenn Verzeichnisse vor Dateien sortiert werden sollen);an festgelegte Position;ans Ende der Dateiliste" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s ist bereits den folgenden Dateiendungen zugewiesen:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Dateiname" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Name" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registriert für" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Genaue &Schreibweise;unabhängig von der Schreibwe&ise" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Dateien;Ve&rzeichnisse;Dateien u&nd Verzeichnisse" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Verstecke Filterpanel wenn es nicht ausgewä&hlt ist;Halten Sie Einstellung zu speichern Änderungen für die nächste Sitzung" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "Nicht abhängig von der Schreibweise; abhängig von den lokalen Einstellungen (aAbBcC); erst Groß, dann klein (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Nach Namen sortieren und ersten anzeigen;wie Dateien sortieren und erste anzeigen;wie Dateien sortieren" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alphabetisch;Akzentuierungen beachten;Natürliche Sortierung: alphabetisch und numerisch" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Oben;Unten;" #: ulng.rsopttoolbarbuttontype #, fuzzy #| msgid "Separator;Internal command;External command;Menu" msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Tr&ennendes Element;&Interner Befehl;E&xterner Befehl;Men&ü" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "DC Vermächtnis - Kopiere (x) Dateiname.ext;Windows - Dateiname (x).ext;Andere - Dateiname(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "Position nicht verändern;die gleiche Einstellung wie für neue Dateien nutzen;an festgelegte Position" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Dateien: %d, Verzeichnisse: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kann die Zugriffsrechte für die Datei \"%s\" nicht ändern" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Kann den Besitzer für \"%s\" nicht ändern" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datei" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Verzeichnis" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Benannte Pipe" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nein" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Spezielles Block-device" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Spezielles Buchstaben-device" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolischer Link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Unbekannter Typ" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ja (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Suchergebnis" #: ulng.rssearchstatus msgid "SEARCH" msgstr "SUCHE" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<unbenannte Vorlage>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Wähle ein Verzeichnis" #: ulng.rsshowhelpfor #, fuzzy #| msgid "Show help for %s" msgid "&Show help for %s" msgstr "&Zeige Hilfe zu %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorie" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Spalte" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Befehle" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Dateiname" #: ulng.rssimplewordfiles msgid "files" msgstr "Dateien" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parameter" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Vorschau" #: ulng.rssimplewordresult msgid "Result" msgstr "Ergebnis" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Gespeichert!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Arbeitsverzeichnis" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Dateien: %d, Verzeichnis: %d, Grösse: %s (%s byte)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kann Zielverzeichnis nicht erstellen" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Falsches Dateigrössenformat!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kann Datei nicht teilen!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Die Anzahl der Teile ist grösser als 100! Fortfahren?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Wähle Verzeichnis:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Fehler beim Erstellen des symb. Link." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtext" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Reiner Text" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "Nichts tun;Tab schließen;Favoriten-Tabs;Tabs Popup-Menü" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Tag(e)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Stunde(n)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minute(n)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Monat(e)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekunde(n)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Woche(n)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Jahr(e)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Favoriten-Tabs umbenennen" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Untermenü der Favoriten-Tabs umbenennen" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Vergleichsprogramm" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Text-Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fehler beim Öffnen des Vergleichers" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fehler beim Öffnen des Editors" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fehler beim Starten des Befehlszeilen-Interpreters" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fehler beim Öffnen des Betrachters" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Befehlszeilen-Interpreter" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Schnellansicht" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Bitte diesen Fehler im Bug-Tracker melden, mit einer Beschreibung was Sie getan haben und der folgenden Datei:%s Klicken Sie auf %s zum Fortfahren oder %s zum Abbrechen." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Beide Panels, von aktiv zu inaktiv" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Beide Panels, von links nach rechts" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pfad des Panels" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Jeden Namen in Klammern schließen, oder nach Belieben" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Nur Dateinamen, keine Endung" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Kompletten Dateinamen (mit Pfad)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Hilfe mit \"%\" Variablen" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "Fordert Nutzer auf einen Parameter einzugeben, mit einem vorgeschlagenen Standardwert" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Linkes Panel" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Temporärer Dateiname aus Liste mit Dateinamen" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Temporärer Dateiname aus Liste mit kompletten Dateinamen (Pfad und Dateiname)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Temporärer Dateiname aus Liste mit Dateinamen mit relativem Pfad" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Nur Dateiendung" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Nur Dateiname" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Anderes Beispiel für Möglichkeiten" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Pfad, mit Trennzeichen am Ende" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "Von hier bis zum Ende der Zeile; die Prozent-Anzeige ist das \"#\" Zeichen" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Setze das Prozentzeichen zurück" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "Von hier bis zum Ende der Zeile; die Prozent-Anzeige ist hinter dem \"%\" Zeichen " #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Stelle jedem Namen \"-a\" voran, oder was auch immer" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "% [Frage den Nutzer nach Parameter;Standardwert wird vorgeschlagen" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Dateiname mit relativem Pfad" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Rechtes Panel" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Voller Pfad der zweiten gewählten Datei im rehten Panel" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Zeige Befehl vor der Ausführung" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "% [Einfache Nachricht]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Zeigt eine einfache Nachricht" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Aktives Panel (Quelle)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Inaktives Panel (Ziel)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Dateinamen werden von hier aus zitiert (Standard)." #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Befehle werden im Terminal ausgeführt. Dies bleibt am Ende geöffnet." #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Pfade werden ein trennendes Zeichen am Ende haben" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Dateinamen werden von hier aus nicht zitiert" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Befehl wird im Terminal ausgeführt. Dies wird anch der Ausführung geschlossen" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Pfade werden am Ende kein trennendes Zeichen haben (Standard)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Netzwerk" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Interner Betrachter des Double Commander" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Schlechte Qualität" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codierung" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Bildtyp" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Neue Grösse" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s nicht gefunden!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "Mit externem Betrachter" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "Mit internem Betrachter" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Anzahl der Ersetzungen: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Nichts wurde ersetzt." ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.el.po������������������������������������������������������������0000644�0001750�0000144�00001401563�12673236522�017217� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-03-15 23:50+0200\n" "Last-Translator: Anastasios Kazakis <orca.surfshark@gmail.com>\n" "Language-Team: Anastasios Kazakis <orca.surfshark@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: ελληνικά\n" "X-Generator: Poedit 1.5.4\n" "Language: el\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Σύγκριση... %d%% (ESC για ακύρωση)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Δεξιά: Διαγραφή %d αρχείο(α)" #: fsyncdirsdlg.rsfilesfound msgid "" "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique " "right: %d)" msgstr "" "Ευρεθέντα αρχεία: %d (Όμοιο: %d, : %d, Διαφορετικό: %d, Μοναδικό αριστερά: " "%d, Μοναδικό δεξιά: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Αριστερά προς Δεξιά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Δεξιά προς Αριστερά: Αντιγραφή %d αρχεία, συνολικό μέγεθος: %d bytes" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Όλα" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&ΟΚ" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Διαμόρφωση προσαρμοσμένης προβολής στηλών" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Παρασκήνιο:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Όρια κέρσορα" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Επιτρέψτε Επιχρωμάτωση" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Χρήση προσαρμοσμένης γραμματοσειράς και χρώματος" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Χρώμα Κειμένου:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Γραμματοσειρά:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Παρασκήνιο 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Ρύθμιση προβολής nr:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Χρώμα Κέρσορα:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Κείμενο Κέρσορα:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Χρώμα Επιλογέα:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Όνομα:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Προσθήκη στήλης" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Προσαρμογή στήλης:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Προεπισκόπηση" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Επιλογή προτύπου..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Έλεγχος ελεύθερου χώρου" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Αποθήκευση ιδιοτήτων" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Αντιγραφή ιδιοκτησίας" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Αντιγραφή αδειών" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Αντιγραφή ημερομηνίας/ώρας" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Διόρθωση δεσμών" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Κατέβασμα σημαίας μόνο για ανάγνωση" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Αποκλεισμός άδειων καταλόγων" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Ακολουθείστε τους δεσμούς" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Κράτηση Χώρου" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" "Τι να κάνετε όταν δεν μπορείτε να ορίσετε στα αρχεία χρόνο, ιδιότητες, κ.α" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Χρησιμοποιείστε πρότυπο αρχείου" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Όταν ο κατάλογος υπάρχει" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Όταν το &αρχείο υπάρχει" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Όταν υπάρχει αδυναμία καθορισμού ιδιότητας" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<Χωρίς πρότυπο>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Αντιγραφή στο πρόχειρο" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Εσωτερική έκδοση" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Ιστοσελίδα προγράμματος" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Αναθεωρημένη έκδοση" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Έκδοση" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "Επαναφορά" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Επιλογή ιδιοτήτων" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Αρχειοθήκη" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Συμπιεσμένο" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Κατάλογος" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Κρυπτογραφημένο" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Κρυφό" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Μόνο για Ανάγνωση" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Αραίωση" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένα" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Συμβολοδεσμός" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Σύστημα" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Προσωρινά Αρχεία" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS ιδιότητες" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Γενικές ιδιότητες" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Γκρουπ" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Άλλοι" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Ως Κείμενο:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Υπολογισμός αθροίσματος ελέγχου..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Άνοιγμα αρχείου αθροίσματος ελέγχου μετά την ολοκλήρωση της εργασίας" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Δημιουργία ξεχωριστού αρχείου αθροίσματος ελέγχου για κάθε αρχείο" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Αποθήκευση αρχείου(ων) αθροίσματος ελέγχου στο:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Επιβεβαίωση αθροίσματος ελέγχου..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "Σύνδεση" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Διαγραφή" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Διαχειριστής συνδέσεων" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Σύνδεση σε:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Προσθήκη στην Ουρά" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Επιλογές" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "αποθήκευση αυτών των ιδιοτήτων ως προκαθορισμένες" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Αντιγραφή αρχείου(ων)" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Νέα ουρά" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Ουρά 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Ουρά 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Ουρά 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Ουρά 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Ουρά 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Αποθήκευση Περιγραφής" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Σχόλιο αρχείου/φακέλου" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Επεξεργασία σχολίου για:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Κωδικοποίηση:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr ";;;" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Αυτόματη Σύγκριση" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Δυαδική Μορφή" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Ακύρωση" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Αντιγραφή Block Δεξιά" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Αντιγραφή Block Δεξιά" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Αντιγραφή Block Αριστερά" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Αντιγραφή Block Αριστερά" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Επανάληψη" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Επιλογή όλων" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Αναίρεση" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Πρώτη Διαφορά" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Πρώτη Διαφορά" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Αγνόηση Κεφαλαίων" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Αγνόηση Κενών" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Συνέχιση Κύλισης" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Τελευταία Διαφορά" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Τελευταία Διαφορά" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Διαφορές Γραμμής" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Επόμενη Διαφορά" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Επόμενη Διαφορά" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Άνοιγμα Αριστερά..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Άνοιγμα Δεξιά..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Σχεδιασμός Παρασκηνίου" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Προηγούμενη Διαφορά" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Προηγούμενη Διαφορά" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Επαναφόρτωση" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Επαναφόρτωση" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Αποθήκευση" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Αποθήκευση ως..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Αποθήκευση ως..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Αποθήκευση Αριστερά" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Αποθήκευση Αριστερά" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Αποθήκευση Αριστερά Ως..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Αποθήκευση Αριστερά Ως..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Αποθήκευση Δεξιά" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Αποθήκευση Δεξιά" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Αποθήκευση Δεξιά Ως..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Αποθήκευση Δεξιά Ως..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Σύγκριση" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Κωδικοποίηση" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Κωδικοποίηση" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Σύγκριση αρχείων" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Αριστερά" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Δεξιά" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "Ενέργειες" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Επιλογές" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Προσθήκη νέας συντόμευσης στην ακολουθία" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Αφαίρεση τελευταίας μικρογραφίας από την ακολουθία" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Μόνο για αυτά τα στοιχεία ελέγχου" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Παράμετροι (κάθε μια σε ξεχωριστή γραμμή):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Συντομεύσεις:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Σχετικά" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "Διαμόρφωση" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Διαμόρφωση" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Αντιγραφή" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Αποκοπή" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmeditor.acteditfind.caption #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Εύρεση" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Εύρεση" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Εύρεση επόμενου" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Μετάβαση στη Γραμμή..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Επικόλληση" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Επανάληψη" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Επανάληψη" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "Αντικατάσταση" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Αντικατάσταση" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Επιλογή Όλων" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Επιλογή Όλων" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Αναίρεση" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Αναίρεση" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Κλείσιμο" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Έξοδος" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "Νέο" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Νέο" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Άνοιγμα" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Άνοιγμα" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Αποθήκευση Ως.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Αποθήκευση Ως" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Αποθήκευση Όλων" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Αποθήκευση Όλων" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Επεξεργαστής" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmeditor.menuitem1.caption msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Άνοιγμα Ως" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Αποθήκευση ως" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Υπογράμμιση Σύνταξης" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Τέλος Γραμμής" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Διάκριση Πεζών-Κεφαλαίων" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Αναζήτηση από το σημείο εισαγωγής" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Συνήθεις Φράσεις" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Το Επιλεγμένο κείμενο μόνο" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Ολόκληρες λέξεις μόνο" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Ιδιότητα" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Αντικατάσταση με:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Αναζήτηση για:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Κατεύθυνση" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Ξεπακετάρισμα αρχείων" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Ξεπακετάρισμα ονόματα διαδρομών αν είναι αποθηκευμένα με τα αρχεία" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "" "Ξεπακετάρισμα κάθε αρχειοθήκης σε ένα ξεχωριστό υποκατάλογο (όνομα της " "αρχειοθήκης)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Αντικατάσταση υπάρχοντων αρχείων" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Στον κατάλογο:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Εξαγωγή αρχείων που ταιριάζουν στη μάσκα αρχείου:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Συνθηματικό για κρυπτογραφημένα αρχεία:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Προσθήκη" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Προσθήκη" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Κάτω" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Αφαίρεση" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Αφαίρεση" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Μετονομασία" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Πάνω" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Συσχετισμοί Αρχείου" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Ενέργειες" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Επεκτάσεις" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Τύπος αρχείων" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Εικονίδιο" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Ενέργεια:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "Εντολή:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Άνοιγμα στο Επεξεργαστή" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Όνομα αρχείου" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Διαδρομή αρχείου" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Πλήρης διαδρομή" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Λήξη αποτελέσματος από την εντολή" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Εκτέλεση σε τερματικό" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Άνοιγμα σε VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Προβολή" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Άνοιγμα με Προβολέα" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Αναμονή..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Όνομα αρχείου:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Από:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" "Κάντε κλικ στο Κλείσιμο όταν το προσωρινό αρχείο δε μπορεί να διαγραφεί!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Στο πάνελ" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Προβολή όλων" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Τρέχουσα Ενέργεια" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Από:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Σε:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Καθορισμός Ιδιοτήτων" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Καθορισμός σε όλα τα επιλεγμένα αρχεία" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Παράβλεψη αυτού του αρχείου" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Ιδιότητες" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένα" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Γκρουπ" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Άλλοι" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Κείμενο:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Περιεχόμενα:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Όνομα:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Όνομα Αρχείου" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Διαδρομή:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Γκρουπ" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Τελευταία προσπέλαση:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Τελευταία διαμόρφωση:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Τελευταία αλλαγή κατάστασης:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Ιδιοκτήτης" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Συμβολοδεσμός στο:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr ";;;" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Τύπος:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Ιδιότητες" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "ενεργΜαταίωση" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "ενεργΚλείσιμο" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "ενεργΔιαμόρφωση" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "ενεργΤροφοδοσίαΣτοΚουτίΛίστας" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "ενεργΜετάβασηΣτοΑρχείο" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "ενεργΈξυπνηΕπικέντρωση" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "ενεργΤελευταίαΑναζήτηση" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "ενεργΝέαΑναζήτηση" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "ενεργΣελίδαΠροχωρημένα" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "ενεργΣελίδαΦόρτωσηΑποθήκευση" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "ενεργΠρόσθεταΣελίδας" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "ενεργΑποτελέσματαΣελίδας" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "ενεργΠροκαθορισμέναΣελίδας" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "ενεργΕκκίνηση" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "ενεργΠροβολή" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Προσθήκη" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Μετάβαση στο αρχείο" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "Τελευταία Αναζήτηση" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Νέα Αναζήτηση" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Φόρτωση" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Αποθήκευση" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Αποθήκευση με \"Εκκίνηση στον κατάλογο\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "" "If saved then \"Start in directory\" will be restored when loading template. " "Use it if you want to fix searching to a certain directory" msgstr "" "Αν αποθηκεύτηκε τότε \"Εκκίνηση στον κατάλογο\" θα επανέλθει όταν φορτώνεται " "το πρότυπο. Χρησιμοποιείστε το αν επιθυμείτε να διορθώσετε την αναζήτηση σε " "ένα συγκεκριμένο κατάλογο" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "Εκκίνηση" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Ακύρωση" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Χρήση Προτύπου" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "Προβολή" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Τροφοδοσία στο listbox" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Εύρεση αρχείων" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Με Διάκριση Πεζών-Κεφαλαίων" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Ημερομηνία από:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Ημερομηνία στο:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Μέγεθος από:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Μέγεθος σε:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Αναζήτηση στις αρχειοθήκες" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Εύρεση κειμένου στο αρχείο" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Ακολουθείστε τους Συμβολοδεσμούς" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Εύρεση αρχείων που ΔΕΝ περιέχουν το κείμενο" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Όχι παλαιότερο από:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Αναζήτηση τμήματος του ονόματος αρχείου" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Συνήθης Φράση" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Αντικατάσταση από" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Επιλεγμένοι κατάλογοι και αρχεία" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Συνήθης Φράση" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Ώρα από:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Ώρα στο:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Χρήση προσθέτου αναζήτησης:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "" "Enter directories names that should be excluded from search separated with " "\";\"" msgstr "" "εισαγωγή ονομάτων καταλόγων που θα έπρεπε να αποκλειστούν από την αναζήτηση, " "διαχωρισμένων με \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "" "Enter files names that should be excluded from search separated with \";\"" msgstr "" "Εισαγωγή ονομάτων αρχείων τα οποία θα έπρεπε να εξαιρεθούν από αναζήτηση " "διαχωρισμένη με \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Εισαγωγή ονομάτων αρχείων διαχωρισμένα με \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Κατάλογοι" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Αρχεία" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Εύρεση Δεδομένων" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Ιδιότητες" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Κωδικοποίηση:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Αποκλεισμός υποκαταλόγων" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Εξαίρεση αρχείων" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Μάσκα Αρχείου" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Εκκίνηση στον κατάλογο" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Αναζήτηση υποκαταλόγων:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Προηγούμενες αναζητήσεις:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Άνοιγμα σε Νέα Καρτέλα(ες)" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Απομάκρυνση από τη λίστα" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Εμφάνιση όλων των ευρεθέντων αντικειμένων" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Εμφάνιση στον Επεξεργαστή" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Εμφάνιση στον Προβολέα" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Για προχωρημένους" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Φόρτωση/Αποθήκευση" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Αποτελέσματα" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Στάνταρ" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Εύρεση" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Εύρεση" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Με Διάκριση Πεζών-Κεφαλαίων" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Δημιουργία δεσμού τύπου hard link" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Προορισμός τον οποίο θα υποδείξει ο δεσμός" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Όνομα Δεσμού" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Εισαγωγή όλων!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Εισαγωγή επιλεγμένων" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Επιλέξτε τις καταχωρήσεις που επιθυμείτε να εισαγάγετε" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Όταν γίνεται κλικ σε ένα υπομενού, επιλέγεται ολόκληρο το μενού" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" "Κρατείστε πατημένο το CTRL και κάντε κλικ στις καταχωρήσεις για να επιλέξετε " "πολλές μαζί" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Αποθήκευση σε..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Αντικείμενο" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Όνομα Αρχείου" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Κάτω" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Κάτω" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Πάνω" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Πάνω" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Σχετικά" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Προσθήκη ονόματος αρχείου στη γραμμή εντολών" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Προσθήκη διαδρομής και ονόματος αρχείου στη γραμμή εντολών" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Αντιγραφή διαδρομής στη γραμμή εντολών" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Σύντομη προβολή" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Σύντομη Προβολή" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Υπολογισμός του Απασχολημένου Χώρου" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Αλλαγή Καταλόγου" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Αλλαγή Καταλόγου σε αρχικό κατάλογο" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Αλλαγή Καταλόγου σε γονικό κατάλογο" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Αλλαγή Καταλόγου στον κατάλογο του root" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Υπολογισμός αθροίσματος ελέγχου..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Επιβεβαίωση αθροίσματος ελέγχου..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Καθαρισμός αρχείου καταγραφών" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Καθαρισμός παραθύρου καταγραφής" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Κλείσιμο όλων των Καρτελών" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Κλείσιμο των διπλασιασμένων καταλόγων" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Κλείσιμο Καρτέλας" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Επόμενη Γραμμή Εντολών" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Ορισμός της γραμμής εντολών στην επόμενη εντολή στο ιστορικό" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Προηγούμενη Γραμμή Εντολών" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Ορισμός της γραμμής εντολών στην προηγούμενη εντολή στο ιστορικό" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Πλήρες" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Προβολή Στηλών" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Σύγκριση κατά Περιεχόμενα" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Σύγκριση Καταλόγων" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Σύγκριση Καταλόγων" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "Διαμόρφωση του καταλόγου Hotlist" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Διαμόρφωση των Αγαπημένων Καρτελών" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Διαμόρφωση των Καρτελών Φακέλων" #: tfrmmain.actconfigtoolbars.caption #| msgid "Configure toolbar" msgid "Toolbar..." msgstr "Γραμμή εργαλείων" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Εμφάνιση μενού περιεχομένων" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Αντιγραφή όλων των καρτελών στην απέναντι πλευρά" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Αντιγραφή όλων των εμφανισμένων στηλών" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Αντιγραφή Ονόματος Αρχείου(ων) με την Πλήρη Διαδρομή" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Αντιγραφή Ονόματος Αρχείου(ων) στο Πρόχειρο" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Αντιγραφή αρχείων χωρίς ερώτηση επιβεβαίωσης" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" "Αντιγραφή πλήρους διαδρομής του επιλεγμένου αρχείου(ων) χωρίς τελικό " "διαχωριστικό καταλόγου" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Αντιγραφή Πλήρους Διαδρομής του αρχείου(ων)" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Αντιγραφή στο ίδιο πάνελ" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Αντιγραφή" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Εμφάνιση Κατειλημμένου Χώρου" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Αποκοπή" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Εμφάνιση Παραμέτρων Εντολών" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Κατάλογος Ιστορικού" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Καταλογος &Hotlist" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Επιλογή κάποιας εντολής και εκτέλεσή της" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Επεξεργασία" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Επεξεργασία Σχολίου..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Επεξεργασία νέου αρχείου" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Επεξεργασία πεδίου διαδρομής πάνω από τη λίστα αρχείων" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Εναλλαγή Πάνελ" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Εξαγωγή Αρχείων..." #: tfrmmain.actfileassoc.caption #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Διαμόρφωση Συσχετισμών Αρχείων..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Συνδιασμός Αρχείων..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Εμφάνιση Ιδιοτήτων Αρχείων" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Διαμερισμός Αρχείου..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Επίπεδη Προβολή" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Συγκέντρωση της γραμμής εντολών" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Τοποθέτηση του κέρσορα στο πρώτο αρχείο της λίστας" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Τοποθέτηση του κέρσορα στο τελευταίο αρχείο της λίστας" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Δημιουργία δεσμού τύπου Hard Link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Περιεχόμενα" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Λειτουργία οριζοντίων πάνελ" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Πληκτρολόγιο" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Σύντομη προβολή στο αριστερό πάνελ" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Προβολή στηλών στο αριστερό πάνελ" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Αριστερά = Δεξιά" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "Επίπεδη Προβολή στο Αριστερό Πάνελ" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Άνοιγμα τη λίστα οδηγών στα αριστερά" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "Ανάποδη σειρά στο αριστερό πάνελ" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Ταξινόμηση αριστερού πάνελ κατά Ιδιότητες" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Ταξινόμηση αριστερού πάνελ κατά Ημερομηνία" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Ταξινόμηση αριστερού πάνελ κατά Επέκταση" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Ταξινόμηση αριστερού πάνελ κατά Όνομα" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Ταξινόμηση αριστερού πάνελ κατά Μέγεθος" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Προβολή μικρογραφιών στο αριστερό πάνελ" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Φόρτωση καρτελών από Αγαπημένες Καρτέλες" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Φόρτωση Επιλογής από το Πρόχειρο" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Φόρτωση Επιλογής από το Αρχείο..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Φόρτωση Καρτελών από το Αρχείο" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Δημιουργία Καταλόγου" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Επιλογή όλων με την Ίδια Επέκταση" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Αντιστροφή Επιλογής" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Επιλογή Όλων" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Αποεπιλογή ενός Γκρουπ..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Επιλογή Γκρουπ..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Αποεπιλογή Όλων" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Ελαχιστοποίηση παραθύρου" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Εργαλείο Μετονομασίας Πολλών" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Σύνδεση στο Δίκτυο..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Αποσύνδεση από το Δίκτυο" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Δίκτυο Ταχεία Σύνδεση..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Νέα Καρτέλα" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Φόρτωση της Επόμενης Αγαπημένης Καρτέλας στη λίστα" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Μετάβαση στην Επόμενη Καρτέλα" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Δοκιμή ανοίγματος αρχειοθήκης" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Άνοιγμα του αρχείου της σειράς εργαλείων" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Άνοιγμα Φακέλου σε Νέα Καρτέλα" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Άνοιγμα Λίστας VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Προβολέας Λειτουργιών" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Επιλογές..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Πακετάρισμα Αρχείων..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Καθορισμός θέσης Διαμεριστή" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Επικόλληση" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Φόρτωση της Προηγούμενης Αγαπημένης Καρτέλας στη λίστα" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Αλλαγή στην προηγούμενη Καρτέλα" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Γρήγορο Φίλτρο" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Ταχεία Αναζήτηση" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Πάνελ Ταχείας Προβολής" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "Ανανέωση" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Επαναφόρτωση της τελευταίας φορτωμένης Αγαπημένης Καρτέλας " #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Μετακίνηση" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Μετακίνηση/μετονομασία αρχείων χωρίς ερώτηση επιβεβαίωσης" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Μετονομασία" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Μετονομασία Καρτέλας" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Επαναποθήκευση στη τελευταία φορτωμένη Αγαπημένη Καρτέλα" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Επαναφορά Επιλογής" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "Ανάποδη Σειρά" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Σύντομη προβολή στο δεξιό πάνελ" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Προβολή στηλών στο δεξιό πάνελ" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Αριστερά = Δεξιά" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "Επίπεδη Προβολή στο Δεξιό Πάνελ" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Άνοιγμα της Λίστας Οδηγών στα δεξιά" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "Επαναφορά σειράς στο δεξιό πάνελ" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Ταξινόμηση δεξιού πάνελ κατά Ιδιότητες" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Ταξινόμηση δεξιού πάνελ κατά Ημερομηνία" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Ταξινόμηση δεξιού πάνελ κατά Επέκταση" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Ταξινόμηση δεξιού πάνελ κατά Όνομα" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Ταξινόμηση δεξιού πάνελ κατά Μέγεθος" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Προβολή μικρογραφιών στο δεξιό πάνελ" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Εκτέλεση Τερματικού" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Αποθήκευση τρέχουσας καρτέλας σε μία Νέα Αγαπημένη Καρτέλα" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Αποθήκευση Επιλογής" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Αποθήκευση επιλογής στο αρχείο..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Αποθήκευση Καρτελών στο Αρχείο" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Αναζήτηση..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Όλες οι καρτέλες κλειδωμένες με Κατάλογο ανοικτό σε Νέες Καρτέλες" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Ορισμός όλων των καρτελών σε Κανονικές" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Ορισμός όλων των καρτελών σε Κλειδωμένες" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "Όλες οι καρτέλες Κλειδωμένες με ελέυθερες τις Αλλαγές Καταλόγου" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Αλλαγή Ιδιοτήτων..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Κλειδωμένο με Καταλόγους Ανοικτούς σε νέες Καρτέλες" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "Κλειδωμένο" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Κλειδωμένο με Επιτρεπόμενες Αλλαγές Καταλόγων " #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Άνοιγμα με χρήση των συσχετισμών του συστήματος" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Εμφάνιση μενού κουμπιών" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Εμφάνιση ιστορικού γραμμής εντολών" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Μενού" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Εμφάνιση Κρυφών Αρχείων/Αρχείων Συστήματος " #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Κατάταξη κατά Ιδιότητες" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ταξινόμηση κατά Ημερομηνία" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ταξινόμηση κατά Επέκταση" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ταξινόμηση κατά Όνομα" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ταξινόμηση κατά Μέγεθος" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Άνοιγμα της Λίστας Οδηγών" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "" "Ενεργοποίηση/Απενεργοποίηση αρχείου λίστας αγνόησης για να μην φαίνονται " "ονόματα αρχείου" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Δημιουργία Συμβολοδεσμού..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Συγχρονισμός καταλόγων..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Στόχος = Πηγή" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Δοκιμή Αρχείου(ων)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Μικρογραφίες" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Προβολή Μικρογραφιών" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "εναλλαγή σε τερματικό πλήρους οθόνης" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Μεταφορά του καταλόγου κάτω από τον κέρσορα στο αριστερό παράθυρο" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Μεταφορά του καταλόγου κάτω από τον κέρσορα στο δεξιό παράθυρο" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "Πάνελ Προβολής Δέντρου" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Ταξινόμηση βάσει παραμέτρων" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Αποεπιλογή Όλων με τη ίδια Επέκταση" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Προβολή" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Εμφάνιση ιστορικού εμφανισμένων διαδρομών για ενεργή προβολή" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Μετάβαση στην επόμενη καταχώρηση στο ιστορικό" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Μετάβαση στην προηγούμενη καταχώρηση στο ιστορικό" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Προβολή αρχείου καταγραφών" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Επισκεφθείτε την Ιστοσελίδα του Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Ασφαλής Διαγραφή" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Εργασία με Κατάλογο Hotlist και παραμέτρους" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Έξοδος" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Κατάλογος" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Τερματικό" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Εμφάνιση τρέχοντος καταλόγου του δεξιού πάνελ στο αριστερό πάνελ" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Μετάβαση στον αρχικό κατάλογο" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Μετάβαση στον κατάλογο root" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Μετάβαση στον γονικό κατάλογο" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Εμφάνιση τρέχοντος καταλόγου του αριστερού πάνελ στο δεξιό πάνελ" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Διαδρομή" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Αντιγραφή..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Δημιουργία δεσμού..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Καθαρισμός" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Κρύψιμο" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Μετακίνηση..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Δημιουργία Συμβολοδεσμού..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Επιλογές Καρτελών" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Επαναφορά" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Εκκίνηση" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "Εντολές" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "Διαμόρφωση" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Αγαπημένα" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "Αρχεία" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Βοήθεια" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "Επιλογή" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Δίκτυο" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Εμφάνιση " #: tfrmmain.mnutaboptions.caption #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Επιλογές Καρτελών" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Καρτέλες" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Αντιγραφή" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Διαγραφή" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Επιλέξτε την εσωτερική σας εντολή" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Legacy ταξινόμηση" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Legacy ταξινόμηση" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Επιλογή όλων των κατηγοριών εξ' ορισμού" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Επιλογή:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "Κατηγορίες:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "Όνομα εντολής:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "Φίλτρο:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Συμβουλή:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Ειδικό Πλήκτρο:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_name" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "Κατηγορία" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "Βοήθεια" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Συμβουλή" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "Προσδιορισμός..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ή επιλέξτε τον προκαθορισμένο τύπο επιλογής:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Δημιουργία νέου καταλόγου" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Εισάγετε νέο όνομα καταλόγου:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Νέο Μέγεθος" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Ύψος:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Ποιότητα συμπίεσης του Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Πλάτος :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Ύψος" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Πλάτος" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Διαγραφή" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Φόρτωση" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Μετονομασία" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Επαναφορά όλων" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "Αποθήκευση" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Μετονομασία Πολλών" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Ενεργοποίηση" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Συνήθεις φράσεις" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Χρήση αντικατάστασης" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Επέκταση" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Μετρητής" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Αναζήτηση && Αντικατάσταση" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Αποτέλεσμα Καταγραφής" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Μάσκα" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Προρύθμιση" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Επέκταση" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Αναζήτηση..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "Διάστημα" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Όνομα Αρχείου" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Αντικατάσταση..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Αριθμός Εκκίνησης" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Πλάτος" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Μετρητής" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Ημερομηνία" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[ΗΗ] Ημέρα (2 ψηφία )" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[ΗΗΗ] Ημέρα της εβδομάδας (σύντομο, π.χ., \"δευτ\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[ΗΗΗΗ] Ημέρα της εβδομάδας (μακρύ, π.χ., \"δευτέρα\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Χαρακτήρας στη θέση x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Χαρακτήρες από την θέση x στη y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ώρα" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ώρα (2 ψηφία)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Λεπτό" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Λεπτό (2 ψηφία)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Μήνας" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Μήνας (2 ψηφία)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[ΜΜΜΜ] Όνομα Μηνός (σύντομο, π.χ., \"ιαν\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[ΜΜΜΜ] Όνομα Μηνός (μακρύ, π.χ., \"ιανουάριος\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Όνομα" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Χαρακτήρας στη θέση x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Χαρακτήρες από τη θέση x στη y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Χρόνος..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Επέκταση..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Όνομα..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Δευτερόλεπτο" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Δευτερόλεπτο (2 ψηφία)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Χρονιά (2 ψηφεία)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Χρονιά (4 ψηφεία)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Παλιό Όνομα Αρχείου" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Νέο Όνομα Αρχείου" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Διαδρομή Αρχείου" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Επιλέξτε μία εφαρμογή" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Προσαρμοσμένη εντολή" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Αποθήκευση συσχετισμού" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Αποθήκευση της επιλεγμένης εφαρμογής ως εξ' ορισμού ενέργια" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Τύπος αρχείου προς άνοιγμα: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Πολλαπλά ονόματα αρχείων" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Πολλαπλά URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Μονό όνομα αρχείου" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Μονό URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Εφαρμογή" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Επιλογές" #: tfrmoptions.lblemptyeditor.caption msgid "" "Please select one of the subpages, this page does not contain any settings." msgstr "" "Παρακαλώ επιλέξτε μία από τις υποσελίδες, αυτή η σελίδα δεν περιέχει κάποιες " "ρυθμίσεις" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Αυτόματη Διαμόρφωση" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Διαγραφή" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Μετονομασία" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "TFRMOPTIONSARCHIVERS.BTNRELATIVEARCHIVER.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Λειτουργία Αποσφαλμάτωσης" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Ενεργοποιημένο" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Εμφάνιση αποτελέσματος στο τερματικό" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Επιλογές" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Προσθήκη:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Επέκταση:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Εξαγωγή:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Λίστα:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Λίστα και τέλος (προαιρετικά):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Μορφή Λίστας:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Λίστα και εκκίνηση (προαιρετικά):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Πρόγραμμα Συμπίεσης:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Περιγραφή:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Επιπλέον:" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Γενικά" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Όταν μέγεθος, ημερομηνία ή ιδιότητες αλλάζουν" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Για τις ακόλουθες διαδρομές και τους υποκαταλόγους τους:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Όταν αρχεία δημιουργούνται, διαγράφονται ή μετονομάζονται" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Όταν η εφαρμογή είναι στο &παρασκήνιο" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Απενεργοποίηση αυτόματης ανανέωσης" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Ανανέωση λίστας αρχείων" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Εμφάνιση πάντα εικονιδίου στο πλαίσιο συστήματος" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Αυτόματη απόκρυψη μη προσαρτημένων οδηγών" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "" "Μετακίνηση εικονιδίου στο πλαίσιο συστήματος όταν γίνεται ελαχιστοποίηση" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Επιτρέψτε μόνο ένα αντίγραφο του DC κάθε φορά" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "" "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" "Εδώ μπορείτε να εισάγετε έναν ή περισσότερους οδηγούς ή σημεία προσάρτησης, " "διαχωρισμένα με \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Μαύρη Λίστα Οδηγών" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Μέγεθος Στηλών" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Εμφάνιση επεκτάσεων αρχείου" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Ευθυγραμμισμένο (με Καρτέλα)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "αμέσως μετά το όνομα αρχείου" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Αυτόματα" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Σταθερή Άθροιση Στηλών" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Σταθερό Πλάτος Στηλών" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Αποκοπή κειμένου στο πλάτος της στήλης" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Οριζόντιες γραμμές" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Κάθετες γραμμές" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Αυτόματη συμπλήρωση στηλών" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Εμφάνιση πλέγματος" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Αυτόματη Ρύθμιση Μεγέθους Στηλών" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Αυτόματη προσαρμογή μεγέθους στήλης:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Ιστορικό Γραμμής Εντολών" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Ιστορικό Καταλόγου" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Ιστορικό μάσκας αρχείου" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Αποθήκευση Διαμόρφωσης" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Αναζήτηση/Αντικατάσταση Ιστορικό" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Τοποθεσία των αρχείων επεξεργασίας" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Αποθήκευση κατά την έξοδο" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Καθορισμός σειράς της σειράς ρύθμισης στο αριστερό δέντρο" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Καθορισμός στη γραμμή εντολών" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Κατάλογος Προγράμματος (φορητή έκδοση)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Αρχικός Κατάλογος Χρήστη" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Όλα" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Εφαρμογή των αλλαγών σε όλες τις στήλες" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Μετάβαση στον ορισμό προκαθορισμένου" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Νέο" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Επόμενο" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Προηγούμενο" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Επαναφορά στη προεπιλογή" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Αποθήκευση ως" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Αποθήκευση" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Επιτρέψτε Επιχρωμάτωση" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" "Όταν γίνεται κλικ για κάποια αλλαγή, εφαρμογή της αλλαγής σε όλες τις στήλες" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Γενικά" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Όρια κέρσορα" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Χρήση Κέρσορα Πλαισίου" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Χρήση Ανενεργού Χρώματος Επιλογής" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Χρήση Ανάστροφης Επιλογής" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Χρήση προσαρμοσμένης γραμματοσειράς και χρώματος για αυτή την προβολή" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION" msgid "BackGround:" msgstr "Παρασκήνιο:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION" msgid "Background 2:" msgstr "Παρασκήνιο 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Ρυθμίστε την προβολή στηλών:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Όνομα Τρέχουσας Στήλης]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Χρώμα Κέρσορα" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Κείμενο Κέρσορα" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION" msgid "Font:" msgstr "Γραμματοσειρά:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Μέγεθος:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION" msgid "Text Color:" msgstr "Χρώμα Κειμένου:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Ανενεργό Χρώμα Κέρσορα:" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Χρώμα Ανενεργού Επιλογέα:" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Χρώμα Επιλογέα:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "" "Below is a preview. You may move cursor and select files to get immediately " "an actual look and feel of the various settings." msgstr "" "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και " "να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση " "των διαφόρων ρυθμίσεων." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Ρυθμίσεις για στήλη:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION" msgid "Add column" msgstr "Προσθήκη στήλης" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Θέση του πάνελ πλαισίου μετά την σύγκριση:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Προσθήκη..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Αντίγραφο Ασφαλείας..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Διαγραφή..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Βοήθεια" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Εισαγωγή..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Εισάγετε..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Διάφορα..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλου στόχου" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Ταξινόμηση..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Κατά την προσθήκη καταλόγου, προσθήκη επίσης στόχου" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Ανάπτυξη Δέντρου Πάντα" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Εμφάνιση μόνο έγκυρων μεταβλητών περιβάλλοντος" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "Στο αναδυόμενο παράθυρο, εμφάνιση [διαδρομής επίσης]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Όνομα, α-ω" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Όνομα, α-ω" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Κατάλογος Hotlist (αναδιάταξη με μεταφορά && απόθεση)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Άλλες Επιλογές" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Όνομα:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Διαδρομή:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Στόχος:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "κατάλογος του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "κατάλογοι ενεργών και ανενεργών πλαισίων" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "μία εντολή" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Προσθήκη Εντολής" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "ένα αντίγραφο της επιλεγμένης καταχώρησης" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Προσθήκη ενός αντιγράφου της επιλεγμένης καταχώρισης" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "ένα διαχωριστικό" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Προσθήκη ενός διαχωριστικού" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "υπομενού" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Προσθήκη υπο-μενού" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "κατάλογος στον οποίο θα κάνω περιήγηση" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Σύμπτυξη όλων" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...τρέχον επίπεδο του επιλεγμένου αρχείου(ων) μόνο" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" "τους τρέχοντες επιλεγμένους ή τους ενεργούς καταλόγους του ενεργού πλαισίου" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Αποκοπή" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "Διαγραφή Όλων!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "Υπομενού με όλα του τα στοιχεία" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "μόνο υπομενού αλλά διατήρηση των στοιχείων" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "επιλεγμένο αντικείμενο" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Διαγραφή επιλεγμένου αντικειμένου" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" "Σάρωση όλων των διαδρομών των hotdir για επικύρωση αυτών που πραγματικά " "υπάρχουν" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "" "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" "Σάρωση όλων των διαδρομών των hotdir και στόχων για επικύρωση αυτών που " "πραγματικά υπάρχουν" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "σε ένα αρχείου καταλόγου Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Μετάβαση σε διαμόρφωση πληροφοριών σχετικές με TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "Μετάβαση σε διαμόρφωση πληροφοριών σχετικές με TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "HotDirΜενούΔοκιμών" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "Από ένα αρχείο καταλόγου Hotlist (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "Από \"wincmd.ini\" του TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Άνοιγμα όλων των κλάδων" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Επικόλληση" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Επαναφορά ενός αντιγράφου ασφαλείας της Hotlist Καταλόγων" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Αποθήκευση ενός αντιγράφου ασφαλείας της τρέχουσας Hotlist Καταλόγων" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Αναζήτηση και αντικατάσταση..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "στη διαδρομή..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "στην διαδρομή στόχου..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "στη διαδρομή και διαδρομή στόχου..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...όλα, από το Α ως το Ω!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...μονό γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ταξινόμηση μονού γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" "...περιεχόμενα ενός ( ή πολλών) υπομενού επιλεγμένα, όχι δευτερεύοντα επίπεδα" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" "...περιεχόμενα του(των) υπομενού επιλεγμένα και όλων των δευτερευόντων " "επιπέδων" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Μενού αποτελεσμάτων Δοκιμών" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "κατάλογος που θα πληκτρολογήσω" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Προσθήκη καταλόγου που θα πληκτρολογήσω" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Εισαγωγή καταλόγου που θα πληκτρολογήσω" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Προσθήκη από το κύριο πάνελ:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" "Από όλες τις υποστηριζόμενες μορφές, ερώτηση για ποια θα χρησιμοποιηθεί κάθε " "φορά" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "" "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" "Κατά την αποθήκευση κειμένου Unicode, αποθήκευση σε μορφή UTF8 (αλλιώς θα " "είναι σε μορφή UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "" "When dropping text, generate filename automatically (otherwise will prompt " "the user)" msgstr "" "Όταν γίνεται εναπόθεση κειμένου, δημιουργία ονόματος κειμένου αυτόματα " "(αλλιώς θα ερωτηθεί ο χρήστης)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Εμφάνιση διαλόγου επιβεβαίωσης μετά την απόθεση" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Όταν μεταφέρεται και αποτίθεται κείμενο στα πάνελ:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" "Τοποθετείστε την πιο επιθυμητή μορφή στην κορυφή της λίστας (χρήση μεταφοράς " "και απόθεσης)" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" "(αν η πιο επιθυμητή δεν είναι παρούσα, θα χρησιμοποιηθεί η δεύτερη και ούτω " "καθεξής)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "" "(will not work with some source application, so try to uncheck if problem)" msgstr "" "(δεν θα λειτουργήσει με μερικές εφαρμογές, οπότε δοκιμάστε να το " "αποεπιλέξετε αν υπάρχει πρόβλημα)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Εμφάνιση συστήματος αρχείων" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Εμφάνιση Ελεύθερου διαστήματος" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Εμφάνιση ετικέτας" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Λίστα Οδηγών" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "Κέρσορας μετά το τέλος γραμμής" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Εμφάνιση ειδικών χαρακτήρων" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Ιδιότητες Εσωτερικού επεξεργαστή" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Παρασκήνιο" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "Παρασκήνιο" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Επαναφορά" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Αποθήκευση" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Ιδιότητες Στοιχείων" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Προσκήνιο" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Προσκήνιο" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Επιλογέας κειμένου" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Χρήση (και διαμόρφωση) ρυθμίσεων του ολικού σχήματος" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Χρήση τοπικών ρυθμίσεων σχήματος" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Έντονη Γραφή" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Πλάγια" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Μεσογράμμιση" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Υπογράμμιση" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Αναστροφή" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Κλειστό" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Ανοικτό" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Προσθήκη..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Διαγραφή..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Εισαγωγή/Εξαγωγή" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Εισάγετε..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Ταξινόμηση..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "Κανένα" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Ανάπτυξη Δέντρου Πάντα" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Όχι" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Αριστερά" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Δεξιά" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Λίστα Αγαπημένων Καρτελών (αναδιάταξη με μεταφορά && απόθεση)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Άλλες Επιλογές" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "Τι να αποκατασταθεί που για την επιλεγμένη καταχώρηση:" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Υπάρχουσες καρτέλες προς φύλαξη:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Αποθήκευση ιστορικού καταλόγου:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Καρτέλες αποθηκευμένες αριστερά να αποκατασταθούν σε :" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Καρτέλες αποθηκευμένες δεξιά να αποκατασταθούν σε :" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "ένα διαχωριστικό" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Προσθήκη διαχωριστικού" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "υπομενού" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Προσθήκη υπο-μενού" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Σύμπτυξη όλων" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...τρέχον επίπεδο του επιλεγμένου αρχείου(ων) μόνο" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Αποκοπή" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "Διαγραφή Όλων!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "Υπομενού με όλα του τα στοιχεία" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "μόνο υπομενού αλλά διατήρηση των στοιχείων" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "επιλεγμένο αντικείμενο" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Διαγραφή επιλεγμένου αντικειμένου" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Εξαγωγή επιλογής στο legacy .tab αρχείο(α)" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "ΑγαπημένεςΚαρτέλεςΤεστΜενού" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Εισαγωγή legacy .tab αρχείου(ων) βάσει της προκαθορισμένης ρύθμισης" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Εισαγωγή legacy .tab αρχείου(ων) στην επιλεγμένη θέση σε ένα υπομενού" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Εισαγωγή διαχωριστικού" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Εισαγωγή υπο-μενού" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Άνοιγμα όλων των κλάδων" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Επικόλληση" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Μετονομασία" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...όλα, από το Α ως το Ω!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...μονό γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ταξινόμηση μονού γκρουπ από αντικείμενο(α) μόνο" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" "...περιεχόμενα ενός ( ή πολλών) υπομενού επιλεγμένα, όχι δευτερεύοντα επίπεδα" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" "...περιεχόμενα του(των) υπομενού επιλεγμένα και όλων των δευτερευόντων " "επιπέδων" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Μενού αποτελεσμάτων Δοκιμών" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Κλωνοποίηση" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Κάτω" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Εισάγετε" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "Insert" msgstr "Εισάγετε" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Μετονομασία" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Πάνω" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" "Αρχική διαδρομή αυτής εντολής. Ποτέ μην βάζετε αυτή τη γραμμή σε εισαγωγικά." #: tfrmoptionsfileassoc.edbactionname.hint msgid "" "Name of the action. It is never passed to the system, it's just a mnemonic " "name chosen by you, for you" msgstr "" "Όνομα αυτής της ενέργειας. Ποτέ δεν μεταφέρεται στο σύστημα, είναι μόνο ένα " "όνομα απομνημόνευσης επιλεγμένο από εσάς, για σας" #: tfrmoptionsfileassoc.edtparams.hint msgid "" "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" "Παράμετρος που θα μεταφερθεί στην εντολή. Μακρύ όνομα αρχείου με κενά θα " "μπει σε εισαγωγικά." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" "Εντολή προς εκτέλεση. Μακρύ όνομα αρχείου με κενά θα μπουν σε εισαγωγικά." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Περιγραφή Ενέργειας:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Ενέργειες" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Επεκτάσεις" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Μπορεί να ταξινομηθεί με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Τύποι Αρχείων" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Εικονίδιο" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Οι Ενέργειες μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Οι Επεκτάσεις μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Ο τύποι αρχείων μπορούν να ταξινομηθούν με μεταφορά & απόθεση" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "Όνομα Ενέργειας:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "Εντολή:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Παράμετροι:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Αρχική Διαδρομή:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Αρχική Διαδρομή:" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "TFRMOPTIONSFILEASSOC.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Προσαρμογή με..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Προσαρμογή" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Επεξεργασία" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Άνοιγμα στον Επεξεργαστή" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Επεξεργασία με..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Εξαγωγή αποτελέσματος από την εντολή" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Άνοιγμα σε Εσωτερικό Επεξεργαστή" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Άνοιγμα με Εσωτερικό Προβολέα" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Άνοιγμα" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Άνοιγμα με..." #: tfrmoptionsfileassoc.miseparator.caption msgctxt "TFRMOPTIONSFILEASSOC.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "Εκτέλεση σε Τερματικό" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Προβολή" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr " Άνοιγμα με Προβολέα" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Προβολή με..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Επιλέξτε με για αλλαγή εικόνας!" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "Εκτέλεση μέσω κελύφους" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Μενού εκτεταμένων περιεχομένων" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT" msgid "" "When accessing file association, offer to add current selected file if not " "already included in a configured file type" msgstr "" "Όταν γίνεται πρόσβαση του συσχετισμού αρχείου, πρόταση για προσθήκη του " "τρέχοντος επιλεγμένου αρχείου αν δεν έχει ήδη συμπεριληφθεί σε ένα " "ρυθμισμένο τύπο αρχείου" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Ρυθμίσεις Συσχετισμού Αρχείων" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" "Πρόταση προσθήκης επιλογής στο συσχετισμό αρχείου όταν δεν συμπεριλαμβάνεται " "ήδη" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "" "When accessing file association, offer to add current selected file if not " "already included in a configured file type" msgstr "" "Όταν γίνεται πρόσβαση του συσχετισμού αρχείου, πρόταση για προσθήκη του " "τρέχοντος επιλεγμένου αρχείου αν δεν έχει ήδη συμπεριληφθεί σε ένα " "ρυθμισμένο τύπο αρχείου" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "Εκτέλεση με τερματικό και κλείσιμο" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "Εκτέλεση με τερματικό και παραμονή ανοικτό" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Αντικείμενα Εκτεταμένων Ρυθμίσεων:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION" msgid "Show confirmation window for:" msgstr "Εμφάνιση παραθύρου επιβεβαίωσης για:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Εργασία Αντιγραφής" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Λειτουργία διαγραφής" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "" "Διαγραφή στον κάδο ανακύκλωσης (Το Shift πλήκτρο αναιρεί αυτή τη ρύθμιση)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Λειτουργία Διαγραφής στον κάδο" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Κατέβασμα σημαίας μόνο για ανάγνωση" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Λειτουργία Μετακίνησης" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Αναζήτηση για τμήμα ονόματος αρχείου" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Επεξεργασία σχολίων για αρχεία/φακέλους" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Επιλογή ονόματος αρχείου χωρίς επέκταση κατά την μετονομασία" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Εμφάνιση καρτέλας επιλογής πάνελ στο διάλογο αντιγραφής/μετακίνησης" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "" "Παράβλεψη των λαθών εργασιών αρχείων και καταγραφή τους στο παράθυρο " "καταγραφής" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "Αναζήτηση Κειμένου στα αρχεία" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Εκτέλεση λειτουργιών" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Αναζήτηση Αρχείου" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Περιβάλλον Χρήστη" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Μέγεθος ενδιάμεσης μνήμης για εργασίες αρχείων (σε KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Μέγεθος ενδιάμεσης μνήμης για υπολογισμούς αθροιστικών ιχνών (σε KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Εμφάνιση προόδου εργασιών αρχικά σε" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Εξ'ορισμού πρότυπο αναζήτησης:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION" msgid "Duplicated name auto-rename style:" msgstr "Στυλ αυτόματης μετονομασίας διπλότυπων:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Αριθμός περασμάτων ασφαλούς διαγραφής:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Χρήση απεικόνισης στη μνήμη για αναζήτηση κειμένου στα αρχεία" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Χρήση stream για αναζήτηση κειμένου στα αρχεία" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Επαναφορά στα προκαθορισμένα του DC" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Επιτρέψτε Επιχρωμάτωση" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Χρήση Πλαισιακού Κέρσορα" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Χρήση Διαβαθμισμένου Σημαντή" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Χρήση Χρώματος Ανενεργούς Επιλογής" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Χρήση Ανάποδης Επιλογής" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Όρια Κέρσορα" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Σημαντής Ελεύθερου Χώρου Οδηγών" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Παρασκήνιο:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Παρασκήνιο 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Χρώμα Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Κείμενο Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Ανενεργό Χρώμα Κέρσορα:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Χρώμα Ανενεργού Επιλογέα:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Επίπεδο Φωτεινότητας του ανενεργού πάνελ" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Πισινό Χρώμα Σημαντή:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Μπροστινό Χρώμα Σημαντή:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Χρώμα Επιλογέα:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "" "Below is a preview. You may move cursor, select file and get immediately an " "actual look and feel of the various settings." msgstr "" "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και " "να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση " "των διαφόρων ρυθμίσεων." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Χρώμα Κειμένου:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Να μην γίνει φόρτωση αρχείου μέχρι να ενεργοποιηθεί η καρτέλα" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Εμφάνιση τετράγωνων αγκυλών([ ]) γύρω από τους καταλόγους" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Υπογράμμιση νέων και ενημερωμένων αρχείων" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" "Ενεργοποίηση εδώ και μετονομασία όταν γίνεται κλικ δύο φορές σε ένα όνομα" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Φόρτωση λίστας αρχείων σε ξεχωριστή γραμμή" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Φόρτωση εικονιδίων μετά τη λίστα αρχείων" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Εμφάνιση αρχείων συστήματος και κρυφών" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "" "&When selecting files with <SPACEBAR>, move down to next file (as with " "<INSERT>)" msgstr "" "Όταν επιλέγονται αρχεία με το <SPACEBAR>, μετακίνηση κάτω στο επόμενο αρχείο " "(όπως με το <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Μορφοποίηση" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ταξινόμηση" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Διάκριση πεζών-κεφαλαίων:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Μη Έγκυρος Τύπος" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Μορφοποίηση Ημερομηνίας και Χρόνου:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Μορφή μεγέθους Αρχείου:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Εισαγωγή νέων αρχείων" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Ταξινόμηση καταλόγων:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Μέθοδος Ταξινόμησης:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Μετακίνηση ενημερωμένων αρχείων" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Δ&ιαγραφή" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Πρότυπο..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Χρώματα Τύπων Αρχείων (ταξινόμηση κατά μεταφορά&&απόθεση)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Ιδιότητες Κατηγοριών:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Κατηγορία χρώματος:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Μάσκα Κατηγορίας:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Όνομα Κατηγορίας:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "Γραμματοσειρά Τερματικού" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Γραμματοσειρά Επεξεργαστή" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Γραμματοσειρά Καταγραφών" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Κύρια Γραμματοσειρά" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Γραμματοσειρά Προβολέα Βιβλίων" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Γραμματοσειρά Προβολέα" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Προσθήκη ειδικού πλήκτρου" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Διαγραφή ειδικού πλήκτρου" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Ρύθμιση ειδικού πλήκτρου" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Φίλτρο" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "Κατηγορίες:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Εντολες:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Αρχεία συντομεύσεων:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[0].TITLE.CAPTION" msgid "Command" msgstr "Εντολή:" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[1].TITLE.CAPTION" msgid "Hotkeys" msgstr "Ειδικά Πλήκτρα" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[2].TITLE.CAPTION" msgid "Description" msgstr "Περιγραφή" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Παράμετροι" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Στοιχεία Ελέγχου" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Για τις ακόλουθες διαδρομές και τους υποκαταλόγους τους:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Εμφάνιση εικονιδίων για ενέργειες στα μενού" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Εμφάνιση εικονιδίων επίστρωσης, π.χ. για δεσμούς" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Απενεργοποίηση ειδικών εικονιδίων" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Εικονίδια στα μενού" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Μέγεθος Εικονοδίου" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Εμφάνιση εικονιδίων αριστερά από το όνομα αρχείου" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "Όλα" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Όλα τα σχετιζόμενα + &EXE/LNK (αργό)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Χωρίς Εικονίδια" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Μόνο προκαθορισμένα εικονίδια" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Προσθήκη επιλεγμένων ονομάτων" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Προσθήκη επιλεγμένων ονομάτων με τη πλήρη διαδρομή" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "Αγνόηση (να μην γίνει εμφάνιση) των ακόλουθων αρχείων και φακέλων:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "Αποθήκευση στο:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Αριστερά, Δεξιά βέλη αλλάζουν κατάλογο (κίνηση όπως στο Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Πληκτρολόγηση" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Γράμματα" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Γράμματα" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "Γράμματα" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Επίπεδο Περιβάλλον" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Εμφάνιση ένδειξης ελεύθερου χώρου στην ετικέτα τόμου" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Εμφάνιση παραθύρου καταγραφών" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Εμφάνιση πάνελ που πραγματοποιείται η εργασία στο παρασκήνιο" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Εμφάνιση απλής προόδου στη μπάρα μενού" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Εμφάνιση γραμμής εντολών" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Εμφάνιση τρέχοντος καταλόγου" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Εμφάνιση κουμπιών οδηγών" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Εμφάνιση ετικέτας ελεύθερου χώρου" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Εμφάνιση κουμπιού λίστας οδηγών" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Εμφάνιση κουμπιών πλήκτρων λειτουργίας" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Εμφάνιση κυρίως μενού" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Εμφάνιση σειράς κουμπιών" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Εμφάνιση ταξινόμησης ετικέτας ελεύθερου χώρου" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Εμφάνιση μπάρας κατάστασης" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Εμφάνιση επικεφαλίδας του tabstop" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Εμφάνιση καρτελών φακέλων" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Εμφάνιση παραθύρου τερματικού" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "" "Εμφάνιση δύο σειρών κουμπιών οδηγών (σταθερό πλάτος, πάνω από το παράθυρο " "αρχείων)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Διάταξη Οθόνης" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Προβολή περιεχομένων αρχείου καταγραφής" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Να συμπεριληφθεί ημερομηνία στο αρχείο καταγραφής του ονόματος αρχείου" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Πακετάρισμα/Ξεπακετάρισμα" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Εκτέλεση εξωτερικής γραμμής εντολών" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Αντιγραφή/Μετακίνηση/Δημιουργία δεσμού/συμβολοδεσμού" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Διαγραφή" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Δημιουργία/Διαγραφή καταλόγων" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Καταγραφή λαθών" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Δημιουργία ενός αρχείου καταγραφής:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Καταγραφή των μηνυμάτων πληροφοριών" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Εκκίνηση/τερματισμός" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Καταγραφή των επιτυχημένων εργασιών" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Πρόσθετα Αρχείων Συστήματος" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Αρχείο καταγραφής εργασίας αρχείου" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Εργασίες Καταγραφής" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Κατάσταση Λειτουργίας" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Αφαίρεση μικρογραφιών για τα αρχεία που δεν υπάρχουν πλέον" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "Προβολή περιεχομένων αρχείου καταγραφής" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Πάντα μετάβαση στη ρίζα ενός οδηγού όταν γίνεται αλλαγή οδηγών" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Εμφάνιση προειδοποιητικών μηνυμάτων (\"OK\" κουμπί μόνο)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "Αποθήκευση μικρογραφιών στο κασέ" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Μικρογραφίες" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Όπως στον TC εισαγωγή/εξαγωγή:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Αρχείο Διαμόρφωσης:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Εκτελέσιμο του TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Διαδρομή εξόδου γραμμής εργαλείων:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "πίξελ" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Μέγεθος Μικρογραφίας:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Επιλογή με ποντίκι" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Κύλιση" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Επιλογή" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Λειτουργία:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Γραμμή προς Γραμμή" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Γραμμή προς Γραμμή με την κίνηση του κέρσορα" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Σελίδα προς Σελίδα" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Διαμορφώστε" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Ενεργοποίηση" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Τροποποίηση" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "" "Searc&h plugins allow to use alternative search algorithms or external tools " "(like \"locate\", etc.)" msgstr "" "Τα πρόσθετα αναζήτησης επιτρέπουν τη χρήση εναλλακτικών αλγορίθμων " "αναζήτησης ή εξωτερικά εργαλεία (όπως \"locate\", κ.λ.π.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "" "Πρόσθετα πακεταρίσματος χρησιμοποιούνται για εργασίες με τις αρχειοθήκες" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "" "Content plu&gins allow to display extended file details like mp3 tags or " "image attributes in file lists, or use them in search and multi-rename tool" msgstr "" "Τα πρόσθετα περιεχομένου επιτρέπουν την εμφάνιση επιπλέον λεπτομερειών του " "αρχείου όπως mp3 tags ή ιδιότητες εικόνας στις λίστες αρχείων, ή χρήση τους " "στην αναζήτηση και στο εργαλείο μετονομασίας πολλών" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "" "Fi&le system plugins allow access to disks inaccessible by operating system " "or to external devices like Palm/PocketPC." msgstr "" "Τα πρόσθετα αρχείων συστήματος επιτρέπουν την πρόσβαση σε δίσκους μη " "προσβάσιμους από το λειτουργικό σύστημα ή σε εξωτερικές συσκευές όπως το " "Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "" "Vie&wer plugins allow to display file formats like images, spreadsheets, " "databases etc. in Viewer (F3, Ctrl+Q)" msgstr "" "Τα πρόσθετα προβολέα επιτρέπουν την εμφάνιση τύπων αρχείων όπως εικόνες, " "υπολογιστικά φύλλα, βάσεις δεδομένων κ.λ.π στον Προβολέα (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Ενεργό" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Έχει καταχωρηθεί στους" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Ονομασία αρχείου" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Αναζήτηση προσθέτων (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Πρόσθετα Πακεταρίσματος (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Πρόσθετα περιεχομένου (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Πρόσθετα συστήματος Αρχείων (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Πρόσθετα Προβολέα (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "" "Αρχή (το όνομα πρέπει να αρχίζει με τον πρώτο πληκτρολογημένο χαρακτήρα)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "" "Κατάληξη (ο τελευταίος χαρακτήρας πριν από πληκτρολογημένη τελεία . πρέπει " "να ταιριάζει)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Επιλογές" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Ακριβής Ταύτιση Ονόματος" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Αναζήτηση Κεφαλαίων" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Αναζήτηση για αυτά τα αντικείμενα" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "Διατήρηση μετονομασμένου ονόματος όταν ξεκλειδώνεται μια καρτέλα" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "" "ενεργοποίηση πάνελ στόχου όταν γίνεται κλικ σε μία από τις Καρτέλες του" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Εμφάνιση επικεφαλίδας καρτέλας ακόμη και όταν υπάρχει μόνο μία καρτέλα" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "Κλείσιμο διπλασιασμένων καρτελών όταν κλείσει η εφαρμογή" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Επιβεβαίωση κλεισίματος όλων των καρτελών" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Επιβεβαίωση κλεισίματος κλειδωμένων καρτελών" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Ορισμός μήκους τίτλου καρτέλας σε" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Εμφάνιση κλειδωμένων καρτελών με έναν αστερίσκο *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Καρτέλες σε πολλαπλές γραμμές" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up ανοίγουν νέα καρτέλα στο προσκήνιο" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Άνοιγμα νέων καρτελών δίπλα στην τρέχουσα καρτέλα" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Επαναχρησιμοποίηση υπάρχουσας καρτέλας όταν αυτό είναι δυνατό" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Εμφάνιση κουμπιού κλεισίματος καρτελών" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "Εμφάνιση πάντοτε γράμματος οδηγού στον τίτλο καρτέλας" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Επικεφαλίδες Καρτελών Φακέλων" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "χαρακτήρες" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "Ενέργεια που θα εκτελεστεί όταν γίνει διπλό κλικ σε μια καρτέλα:" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Θέση Καρτελών" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "Κανένα" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Όχι" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "Αριστερά" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "Δεξιά" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "Μετάβαση στη Διαμόρφωση Αγαπημένων Καρτελών μετά την επαναποθήκευση" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" "Μετάβαση στη Διαμόρφωση Αγαπημένων Καρτελών μετά την αποθήκευση μίας νέας" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "" "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" "Ενεργοποίηση επιπλέον ιδιοτήτων Αγαπημένων Καρτελών (επιλογή πλευρά στόχου " "όταν γίνεται αποκατάσταση, κ.λ.π.)" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" "Προκαθορισμένες επιπλέον ιδιότητες όταν αποθηκεύεται νέα Αγαπημένη Καρτέλα:" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Extra Επικεφαλίδων Καρτελών Φακέλων" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "όταν αποκαθίσταται καρτέλα, υπάρχουσες καρτέλες προς φύλαξη:" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Καρτέλες αποθηκευμένες αριστερά να αποκατασταθούν σε :" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Καρτέλες αποθηκευμένες δεξιά να αποκατασταθούν σε :" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Διατήρηση αποθήκευσης ιστορικού καταλόγου με Αγαπημένες Καρτέλες:" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" "Προκαθορισμένη θέση στο μενού όταν αποθηκεύεται μια νέα Αγαπημένη Καρτέλα:" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Εντολή για εκτέλεση μόνο του τερματικού:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" "Εντολή για εκτέλεση μιας εντολής στο τερματικό και κλείσιμό του μετά απ'αυτό:" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" "Εντολή για εκτέλεση μιας εντολής στο τερματικό και παραμονή του ανοικτό :" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSECMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint #| msgid "" #| "{command} should normally present here to releft the command to be run in " #| "terminal" msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "" "{command} should normally be present here to reflect the command to be run " "in terminal" msgstr "" "{εντολή} θα έπρεπε να είναι παρούσα εδώ για να προσδιορίσει την εντολή που " "θα εκτελεστεί στο τερματικό" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint #| msgid "" #| "{command} should normally present here to releft the command to be run in " #| "terminal" msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.HINT" msgid "" "{command} should normally be present here to reflect the command to be run " "in terminal" msgstr "" "{εντολή} θα έπρεπε να είναι παρούσα εδώ για να προσδιορίσει την εντολή που " "θα εκτελεστεί στο τερματικό" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Εντολή:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Παράμετροι:" #: tfrmoptionsterminal.ledtruntermparams.hint #| msgid "" #| "{command} should normally present here to releft the command to be run in " #| "terminal" msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.HINT" msgid "" "{command} should normally be present here to reflect the command to be run " "in terminal" msgstr "" "{εντολή} θα έπρεπε να είναι παρούσα εδώ για να προσδιορίσει την εντολή που " "θα εκτελεστεί στο τερματικό" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Κουμπί κλωνοποίησης" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Διαγραφή" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Ρύθμιση ειδικού πλήκτρου" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "Εισαγωγή νέου κουμπιού" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Επιλέξτε" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "Άλλα..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Αφαίρεση ειδικού πλήκτρου" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Πρόταση" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "" "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" "Πρόταση από τον DC υπόδειξης βασισμένης στον τύπο κουμπιού, εντολής και " "παραμέτρων" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Επίπεδα Κουμπιά" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Αναφορά λαθών με εντολές" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "" "Enter command parameters, each in a separate line. Press F1 to see help on " "parameters." msgstr "" "Εισαγωγή παραμέτρων εντολής, καθεμία σε ξεχωριστή γραμμή. Πιέστε F1 για " "βοήθεια στις παραμέτρους." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Εμφάνιση" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Μέγεθος Μπάρας:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Εντολή:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Παράμετροι:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Βοήθεια" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Ειδικό Πλήκτρο:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Εικονίδιο:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Μέγεθος εικόνας:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Εντολή:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Παράμετροι:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Διαδρομή Εκκίνησης:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Υπόδειξη:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Προσθήκη γραμμής εργαλείων με ΟΛΕΣ τις DC εντολές" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "για μία εξωτερική εντολή" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "για μία εσωτερική εντολή" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "για ένα διαχωριστικό" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "για μια υπο-σειρά εργαλείων" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Αντίγραφο Ασφαλείας..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Εξαγωγή..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Τρέχουσα γραμμή εργαλείων..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Γραμμή Εργαλείων κορυφής..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Αποθήκευση ενός αντιγράφου ασφαλείας της Γραμμής Εργαλείων" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "σε ένα αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "σε ένα TC .BAR αρχείο (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "σε ένα TC .BAR αρχείο (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διατήρηση υπάρχοντος)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "σε ένα \"wincmd.ini\" του TC (διαγραφή υπάρχοντος)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Εισάγετε..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Επαναφορά ενός αντιγράφου ασφαλείας της Σειράς Εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "Από ένα Αρχείο Γραμμής Εργαλείων (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "Από ένα απλό TC .BAR αρχείο" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στη τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "Από \"wincmd.ini\" του TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "για προσθήκη στη τρέχουσα σειρά εργαλείων" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "προσθήκη νέας γραμμής εργαλείων στην τρέχουσα γραμμή εργαλείων" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "" "προσθήκη νέας γραμμής εργαλείων στη γραμμή εργαλείων που είναι στη κορυφή" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "για προσθήκη στη σειρά εργαλείων της κορυφής" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "για αντικατάσταση της σειράς εργαλείων της κορυφής" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Αναζήτηση και αντικατάσταση..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "σε όλα τα ανωτέρω..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "σε όλες τις εντολές..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "σε όλα τα ονόματα εικονιδίων..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "σε όλες τις παραμέτρους..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "σε όλες τις διαδρομές εκκίνησης...." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "αμέσως μετά την τρέχουσα επιλογή" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "ως πρώτο στοιχείο" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "ως τελευταίο στοιχείο" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "αμέσως πριν την τρέχουσα επιλογή" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Τύπος Κουμπιού" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "" "Διατήρηση παραθύρου τερματικού ανοικτό μετά την εκτέλεση του προγράμματος" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Εκτέλεση σε τερματικό" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Χρήση εξωτερικού προγράμματος" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Επιπρόσθετες παράμετροι" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Διαδρομή προγράμματος προς εκτέλεση" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Προσθήκη" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Εφαρμογή" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Διαγραφή" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Πρότυπο..." #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "TFRMOPTIONSTOOLTIPS.CHKSHOWTOOLTIP.CAPTION" msgid "&Show tooltip for files in the file panel" msgstr "Εμφάνιση υπόδειξης για αρχεία στο πάνελ αρχείων" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Εξατομικευμένα πεδία κατά τύπο αρχείου" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "συμβουλή Κατηγορίας:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Μάσκα Κατηγορίας:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Όνομα Κατηγορίας:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Λειτουργία Προβολέα Βιβλίων" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Παράδειγμα" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Χρώμα παρασκηνίου στον προβολέα βιβλίων" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Χρώμα Γραμματοσειράς στον προβολέα βιβλίων" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "Αριθμός στηλών στον προβολέα βιβλίων" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Διαμόρφωση" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Πακετάρισμα αρχείων" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "" "Δημιουργία ξεχωριστών αρχειοθηκών, μια για κάθε ξεχωριστό αρχείο/κατάλογο" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Δημιουργία αυτο-εξαγώμενης αρχειοθήκης" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Κρυπτογράφηση" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Μετακίνηση στην αρχειοθήκη" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Πολλαπλή αρχειοθήκη δίσκου" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Τοποθέτηση πρώτο στην TAR αρχειοθήκη" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Επίσης πακετάρισμα διαδρομών ονομάτων (μόνο των αναδρομικών)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Πακετάρισμα αρχείου(ων) στο αρχείο:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Εφαρμογή Πακεταρίσματος" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Ξεπακετάρισμα όλων και εκτέλεση" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Ξεπακετάρισμα και εκτέλεση" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Ιδιότητες πακεταρισμένου αρχείου" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Ιδιότητες:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Αναλογία Συμπίεσης:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Ημερομηνία:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Μέθοδος:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Αυθεντικό μέγεθος:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Αρχείο:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Μέγεθος πακεταρισμένου:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Εφαρμογή Πακεταρίσματος:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Χρόνος:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Κλείσιμο πάνελ φίλτρου" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Εισάγετε κείμενο για αναζήτηση ή εφαρμόστε φίλτρο για" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Αα" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Διάκριση Πεζών-Κεφαλαίων" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "Κ" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Κατάλογοι" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "Α" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Αρχεία" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Αντιστοίχηση που Αρχίζει" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Αντιστοίχηση που Τελειώνει" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Φίλτρο" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Εναλλαγή μεταξύ αναζήτησης και φίλτρου" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Περισσότεροι κανόνες" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Λιγότεροι κανόνες" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Χρήση προσθέτων περιεχομένου, συνδυασμός με:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Πρόσθετο" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Πεδίο" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Χειριστής" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Τιμή" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "ΚΑΙ (όσα ταιριάζουν)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "Ή (όποιο ταιριάζει)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "Κλείσιμο" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Βοήθεια" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Επιλέξτε τους χαρακτήρες για εισαγωγή:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Αλλαγή Ιδιοτήτων" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Κολημμένα" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Αρχειοθήκη" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Δημιουργήθηκε:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Κρυφό" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Προσπελάστηκε:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Τροποποιήθηκε:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Μόνο για Ανάγνωση" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Συμπεριβαλομένων των υποφακέλων" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Σύστημα" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Ιδιότητες χρόνου τελευταίας πρόσβασης" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ιδιότητες" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Γκρουπ" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(γκρι πεδίο σημαίνει τιμή χωρίς αλλαγή)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Άλλα" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ιδιοκτήτης" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Κείμενο:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Εκτέλεση" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(γκρι πεδίο σημαίνει τιμή χωρίς αλλαγή)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ανάγνωση" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Εγγραφή" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Κάποιες λειτουργίες για την επιλογή κατάλληλης διαδρομής" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Διαχωριστής" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Απαιτεί ένα αρχείο επιβεβαίωσης CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Ονομασία αρχείου" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Μέγεθος και αριθμητικό πλήθος των τμημάτων" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Στόχος Καταλόγου" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Πηγή Αρχείου" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Αριθμός τμημάτων" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bytes" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Εσωτερική Έκδοση" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Λειτουργικό Σύστημα" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Σύστημα" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Αναθεωρημένη Έκδοση" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Έκδοση" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "WidgetsetVer" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Δημιουργία συμβολοδεσμού" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Προορισμός τον οποίο θα υποδείξει ο δεσμός" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Όνομα Δεσμού" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Κλείσιμο" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Συγχρονισμός" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Συγχρονισμός καταλόγων" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "Ασύμμετρο" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "Ανά περιεχόμενο" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "αγνόηση ημερομηνίας" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "Μόνο το(α) επιλεγμένο(α)" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Υποκατάλογοι" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Εμφάνιση:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Όνομα" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Μέγεθος" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Ημερομηνία" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Ημερομηνία" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Μέγεθος" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Όνομα" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(στο κύριο παράθυρο)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Σύγκριση" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Προβολή Αριστερά" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Προβολή Δεξιά" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "Διπλότυπα" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "Μονά" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Παρακαλώ πιέστε \"Σύγκριση\" για εκκίνηση" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Συγχρονισμός" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Επιβεβαίωση αντικαταστημένων" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Προσθήκη νέου" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Ακύρωση" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Αλλαγή" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Προκαθορισμένα" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Αφαίρεση" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Επεξεργασία προσθέτου" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Εντοπισμός τύπου αρχειοθήκης από τα περιεχόμενα" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Δυνατότητα διαγραφής αρχείων" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Υποστηρίζει Κρυπτογράφηση" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "" "Εμφάνιση ως κανονικά αρχεία (κρύψιμο εικονιδίου εφαρμογής πακεταρίσματος)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Υποστήριξη πακεταρίσματος στη μνήμη" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Δυνατότητα τροποποίησης υπάρχοντων αρχείων" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Η Αρχειοθήκη μπορεί να περιλαμβάνει πολλαπλά αρχεία" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Δυνατότητα δημιουργίας νέων αρχείων" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Υποστηρίζει το πλαίσιο διαλόγου ρυθμίσεων" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Επιτρέψτε αναζήτηση κειμένου στα αρχεία" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Περιγραφή:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Εντοπισμός ακολουθίας:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Επέκταση:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Σημαίες:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Όνομα:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Πρόσθετο:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Πρόσθετο:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Σχετικά με τον Προβολέα..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Εμφανίζει το \"Σχετικά\" μήνυμα" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Αντιγραφή Αρχείου" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Αντιγραφή Αρχείου" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Διαγραφή Αρχείου" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Διαγραφή Αρχείου" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Επόμενο" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Φόρτωση Επόμενου Αρχείου" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "Προηγούμενο" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Φόρτωση Προηγούμενου Αρχείου" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Καθρεφτισμός" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Καθρεφτισμός" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Μετακίνηση Αρχείου" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Μετακίνηση Αρχείου" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Επαναφόρτωση" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Επαναφόρτωση τρέχοντος αρχείου" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Περιστροφή 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Περιστροφή 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Περιστροφή 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Περιστροφή 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Περιστροφή 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Περιστροφή 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Αποθήκευση Ως..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Αποθήκευση Αρχείου Ως..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Τέντωμα" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Τέντωμα Εικόνας" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Αντιγραφή" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Αντιγραφή" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Περικοπή" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Διαγραφή" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Πλήρης Οθόνη" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Υπογράμμιση" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Καθρεφτισμός" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Μετακίνηση" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Μετακίνηση" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Ζωγραφική" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Κόκκινα Μάτια" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Αλλαγή Μεγέθους" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Αναίρεση" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Μεγέθυνση" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Μίκρυνση" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Προβολέας" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slide Show" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Στυλό" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Υπογράμμιση" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Ζωγραφική" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slide Show" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Προβολή" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Σχετικά" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Εμφάνιση ως Δυαδικό" #: tfrmviewer.micenter.caption msgid "Center" msgstr "Κέντρο" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Αντιγραφή στο Πρόχειρο" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "Επεξεργασία" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Κωδικοποίηση" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Έξοδος" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "Αρχείο" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Πλήρης Οθόνη" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Γραφικά" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Εμφάνιση ως Δεκαεξαδικό" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Εικόνα" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Εμφάνιση ως Βιβλίο" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Καθρεφτισμός" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Πρόσθετα" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Προεπισκόπηση" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Εκτύπωση..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Περιστροφή" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Αποθήκευση" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Αποθήκευση Ως..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Στιγμιότυπο Οθόνης" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Αναζήτηση" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Αναζήτηση επόμενου" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Αναζήτηση προηγούμενου" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Τέντωμα" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "Τέντωμα μόνο Μεγάλων" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Εμφάνιση ως Κείμενο" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "Προβολή" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Εμφάνιση ως αναδιπλούμενο κείμενο" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Μεγέθυνση" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Μίκρυνση" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Αντιγραφή στο Πρόχειρο" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Επιλογή όλων" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "Εκκίνηση" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Στοπ" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Λειτουργίες Αρχείου" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Πάντα στην κορυφή" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Χρήση \"μεταφορά και απόθεση\" για εργασίες μετακίνησης μεταξύ ουρών" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Ακύρωση" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Νέα Ουρά" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Εμφάνιση σε αποπροσαρτημένο παράθυρο" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Τοποθέτηση πρώτο στην ουρά" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Τοποθέτηση τελευταίο στην ουρά" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Ουρά" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Εκτός Ουράς" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Ουρά 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Ουρά 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Ουρά 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Ουρά 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Ουρά 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Εμφάνιση σε αποπροσαρτημένο παράθυρο" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Παύση όλων" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Εργασία στο παρασκήνιο (ξεχωριστή σύνδεση)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Όταν το αρχείο υπάρχει" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of " "files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Αυτό το αρχείο δε μπορεί να βρεθεί και αυτό θα μπορούσε να βοηθήσει στην " "επικύρωση του τελικού συνδυασμού αρχείων:\n" "%s\n" "\n" "Θα μπορούσατε να το κάνετε διαθέσιμο πιέζοντας \"ΟΚ\"όταν είστε έτοιμοι,\n" "ή πιέστε \"Ακύρωση\" για να συνεχίσετε χωρίς αυτό;\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Ακύρωση Γρήγορου Φίλτρου" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Ακύρωση Τρέχουσας Λειτουργίας" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Εισαγωγή ονόματος αρχείου, με επέκταση, για το εναποθετημένο κείμενο" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Τύπος Κειμένου προς εισαγωγή" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Κατεστραμμένο:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Γενικά:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Λείπει:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Λάθος Ανάγνωσης: " #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Επιτυχία:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Εισαγωγή αθροίσματος ελέγχου και επιλογή αλγόριθμου:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Επιβεβαίωση αθροίσματος ελέγχου" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Συνολικά:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Το Πρόχειρο δεν περιέχει κάποια έγκυρα δεδομένα γραμμής εργαλείων." #: ulng.rscmdcategorylistinorder msgid "" "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;" "Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;" "Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" "Όλα;Ενεργό Πάνελ;Αριστερό Πάνελ;Δεξιό Πάνελ;Εργασίες Αρχείου;Ρύθμιση;Δίκτυο;" "Διάφορα;Παράλληλη Πόρτα;Εκτύπωση;Επιλογέας;Ασφάλεια;Πρόχειρο;FTP;Πλοήγηση;" "Βοήθεια;Παράθυρο;Γραμμή Εντολών;Εργαλεία;Προβολή;Χρήστης;Καρτέλες;Διάταξη;" "Καταγραφή" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Ταξινόμηση της Legacy ;Α-Ω ταξινόμηση" #: ulng.rscolattr msgid "Attr" msgstr "Ιδιότητα" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Ημερομηνία" #: ulng.rscolext msgid "Ext" msgstr "Εξωτερικό" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Όνομα" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Μέγεθος" #: ulng.rsconfcolalign msgid "Align" msgstr "Ευθυγράμμιση" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Σύλληψη" #: ulng.rsconfcolconfig msgid "Config" msgstr "Διαμόρφωση" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Διαγραφή" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Περιεχόμενα Πεδίου" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Μετακίνηση" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Πλάτος" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Προσαρμογή στήλης" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Διαμόρφωση συσχετισμού αρχείων" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Επιβεβαίωση της γραμμής εντολών και παραμέτρων" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Αντιγραφή (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Εισαγμένη σειρά Εργαλείων του DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Εισαγμένη σειρά Εργαλείων του TC" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_ΕναποθετημένοΚείμενο" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_ΕναποθετημένοHTMLκείμενο" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_ΕναποθετημένοΠλούσιοκείμενο" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_ΕναποθετημένοΑπλόΚείμενο" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_ΕναποθετημένοUnicodeUTF16κείμενο" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_ΕναποθετημένοUnicodeUTF8κείμενο" #: ulng.rsdiffadds msgid " Adds: " msgstr "Προσθέτει:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Διαγραφή:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Τα δύο αρχεία είναι όμοια!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Αντιστοιχίσεις:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Μεταβολές:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Όλες οι εργασίες ολοκληρώθηκαν" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Πρόοδος όλων των εργασιών %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Απόρριψη" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Όλα" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Επισύναψη" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "Αυτόματη ονομασία πηγαίων αρχείων" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Ακύρωση" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Συνέχιση" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Αντιγραφή Μέσα σε" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Αντιγραφή μέσα σε Όλα" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Έξοδος προγράμματος" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Αγνόηση όλων" #: ulng.rsdlgbuttonno msgid "&No" msgstr "Όχι" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Κανένα" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Άλλα" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Αντικατάσταση" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Αντικατάσταση Όλων" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Αντικατάσταση Όλων των Μεγαλύτερων" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Αντικατάσταση Όλων των Παλαιοτέρων" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Αντικατάσταση Όλων των Μικρότερων" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Μετονομασία" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Ολοκλήρωση" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Επαναπροσπάθεια" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Παράβλεψη" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Παράβλεψη Όλων" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "Ναι" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Υπολογισμός αρχείων και φακέλων" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Υπολογισμός αθροίσματος ελέγχου..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Επιβεβαίωση αθροίσματος ελέγχου..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Αντιγραφή αρχείου(ων)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Διαγραφή αρχείου(ων)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Μετακίνηση αρχείου(ων)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Παύση" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Εκκίνηση" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Ουρά" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Ταχύτητα %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Ταχύτητα %s/s, εναπομένων χρόνος %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Διαμοιρασμός" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Ασφαλής Διαγραφή αρχείου(ων)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<χωρίς ετικέτα>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<χωρίς μέσο>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Εσωτερικός επεξεργαστής του Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Μετάβαση στη γραμμή:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Μετάβαση στη γραμμή" #: ulng.rseditnewfile msgid "new.txt" msgstr "new.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Όνομα αρχείου:" #: ulng.rseditnewopen msgid "Open file" msgstr "Άνοιγμα Αρχείου" #: ulng.rseditsearchback msgid "&Backward" msgstr "Πίσω" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Αναζήτηση" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Μπροστά" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Αντικατάσταση" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "με εξωτερικό επεξεργαστή" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "με εσωτερικό επεξεργαστή" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Εκτέλεση μέσω κελύφους" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Εκτέλεση μέσω τερματικού και κλείσιμό του" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Εκτέλεση μέσω τερματικού και παραμονή αυτού ανοικτό" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "Αριστερά;Δεξιά;Ενεργό;Ανενεργό;Και τα δύο;Κανένα" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Όχι;Ναι" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Έχει_Εξαχθεί_από_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Ερώτηση;Αντικατάσταση;Αντιγραφή στο;Παράβλεψη" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Ερώτηση;Αντικατάσταση;Αντικατάσταση παλαιότερων;Παράβλεψη" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Ερώτηση;Όχι επιπλέον καθορισμός;Αγνόηση λαθών" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ΦΙΛΤΡΟ" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Καθορισμός προτύπου" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s επίπεδο(α)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "όλα (απεριόριστο εύρος)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "τρέχων κατάλογος μόνο" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Ο Κατάλογος %s δεν υπάρχει!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Βρέθηκαν: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Αποθήκευση αναζήτησης προτύπου" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Όνομα Προτύπου:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Έχουν Σαρωθεί: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Σάρωση" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Εύρεση αρχείων" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "Ώρα σάρωσης:" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Αρχή σε" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Ελεύθερα %s από %s bytes" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bytes ελεύθερα" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Πρόσβαση ημερομηνίας/ώρας" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Ιδιότητες" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Σχόλιο" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Συμπιεσμένο μέγεθος" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Δημιουργία ημερομηνίας/ώρας" #: ulng.rsfuncext msgid "Extension" msgstr "Επέκταση" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Γκρουπ" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Αλλαγή ημερομηνίας/ώρας" #: ulng.rsfunclinkto msgid "Link to" msgstr "Δεσμός σε" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Αλλαγή Ημερομηνίας/Ώρας" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Όνομα" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Όνομα χωρίς επέκταση" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Ιδιοκτήτης" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Διαδρομή" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Μέγεθος" #: ulng.rsfunctype msgid "Type" msgstr "Τύπος" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Λάθος στη δημιουργία δεσμού τύπου hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "" "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date " "0-9" msgstr "" "κανένα;Όνομα, α-ω;Όνομα, ω-α;Εξωτ, α-ω;Εξωτ, ω-α;Μέγεθος 9-0;Μέγεθος 0-9;" "Ημέρα 9-0;Ημέρα 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Λυπούμαστε, δεν βρέθηκε τίποτα προς εισαγωγή!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing " "list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Προσοχή! Κατά την αποκατάσταση ενός .hotlist αντιγράφου, θα διαγραφεί η " "υπάρχουσα λίστα για να αντικατασταθεί από την σημαντική.\n" "\n" "Είστε σίγουροι οτι επιθυμείτε να συνεχίσετε;\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Διάλογος Αντιγραφής/Μετακίνησης" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differ" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Επεξεργασία Διαλόγου Σχολίου" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Επεξεργαστής" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Εύρεση αρχείων" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Κυρίως" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Προβολέας" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Αδυναμία εύρεσης αναφοράς στο προκαθορισμένο αρχείο σειράς εργαλείων" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Ο Linker ολοκλήρωσε" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Αποεπιλογή Μάσκας" #: ulng.rsmarkplus msgid "Select mask" msgstr "Επιλογή μάσκας" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Εισαγωγή μάσκας:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Μία προβολή στηλών με αυτό το όνομα ήδη υπάρχει" #: ulng.rsmenuconfigurecolumnssavetochange msgid "" "To change current editing colmuns view, either SAVE, COPY or DELETE current " "editing one" msgstr "" "Για να αλλάξετε την τρέχουσα ρύθμιση προβολής στηλών, κάντε ΑΠΟΘΗΚΕΥΣΗ, " "ΑΝΤΙΓΡΑΦΗ ή ΔΙΑΓΡΑΦΗ τρέχουσας ρύθμισης" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Διαμόρφωση εξατομικευμένων στηλών" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Εισάγετε νέα προσαρμοσμένα χρώματα στηλών" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Διαμόρφωση αυτής της εξατομικευμένης προβολής στηλών" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ενέργειες" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Αποσύνδεση Δικτυακού Οδηγού..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Επεξεργασία" #: ulng.rsmnueject msgid "Eject" msgstr "Εξαγωγή" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Εξαγωγή εδώ..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Σχεδιασμός Δικτυακού Οδηγού..." #: ulng.rsmnumount msgid "Mount" msgstr "Προσάρτηση" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Νέο" #: ulng.rsmnunomedia msgid "No media available" msgstr "Δεν υπάρχει διαθέσιμο Μέσο" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Άνοιγμα" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Άνοιγμα με" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Άλλα..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Πακετάρισμα εδώ..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Ταξινόμηση κατά" #: ulng.rsmnuumount msgid "Unmount" msgstr "Αποπροσάρτηση" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Προβολή" #: ulng.rsmsgaccount msgid "Account:" msgstr "Λογαριασμός:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" "Επιπρόσθετες παράμετροι για τη γραμμή εντολών του προγράμματος συμπίεσης:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Κακό CRC32 για τελικό αρχείο:\n" "\"%s\"\n" "\n" "Επιθυμείτε να κρατήσετε το κατεστραμμένο τελικό αρχείο ως έχει;\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" "Δεν μπορείτε να αντιγράψετε/μετακινήσετε ένα αρχείο \"%s\" σε αυτό το ίδιο!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Αδυναμία διαγραφής καταλόγου %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "ChDir σε [%s] απέτυχε!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Αφαίρεση όλων των ανενεργών καρτελών;" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Αυτή η καρτέλα (%s) είναι κλειδωμένη! Κλείσιμο ως έχει;" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες που αφορούν την προβολή στηλών έχουν μεταβληθεί.\n" "\n" "Επιθυμείτε αποθήκευση πριν την έξοδο;\n" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Είστε σίγουροι οτι επιθυμείτε έξοδο;" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "Το αρχείο %s έχει αλλάξει. Επιθυμείτε να το αντιγράψετε αντίστροφα;" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" "Αδυναμία αντίστροφης αντιγραφής - επιθυμείτε να διατηρήσετε το αλλαγμένο " "αρχείο;" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Αντιγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Αντιγραφή επιλεγμένου \"%s\";" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Δημιουργία ενός νέου τύπου αρχείου \"%s αρχεία\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" "Εισάγετε τοποθεσία και όνομα αρχείου που θα αποθηκευθεί το αρχείο γραμμής " "εργαλείων του DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Προσαρμοσμένη ενέργεια" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Διαγραφή μερικώς αντιγραμμένου αρχείου ;" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Διαγραφή %d επιλεγμένων αρχείων/καταλόγων στο κάδο αχρήστων;" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Διαγραφή επιλεγμένων \"%s\" στο κάδο αχρήστων;" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Αδυναμία διαγραφής \"%s\" στα απορρίμματα! Διαγραφή άμεσα;" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Ο Δίσκος δεν είναι διαθέσιμος" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "" "Options regarding mouse drag && drop have been modified. Do you want to save " "before to exit?" msgstr "" "Οι ρυθμίσεις που αφορούν τη μεταφορά και απόθεση με ποντίκι έχουν " "μεταβληθεί. Επιθυμείτε αποθήκευση πριν την έξοδο;" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Εισάγετε νέο προσαρμοσμένο όνομα ενέργειας:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Εισάγετε την επέκταση αρχείου:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Εισαγωγή ονόματος:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" "Εισαγωγή ονόματος του νέου τύπου αρχείου που δημιουργείται για την επέκταση " "\"%s\"" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC λάθος στα δεδομένα αρχειοθήκης" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Άσχημα Δεδομένα" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Αδυναμία σύνδεσης στον διακομιστή: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Αδυναμία αντιγραφής αρχείου %s στο %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Εκεί υπάρχει ήδη ένας κατάλογος με το όνομα \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Ημερομηνία %s δεν υποστηρίζεται" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Ο Κατάλογος %s υπάρχει!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Λειτουργία που έχει απορριφθεί από το χρήστη" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Λάθος κλεισίματος αρχείου" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Αδυναμία δημιουργίας αρχείου" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Όχι άλλα αρχεία στην αρχειοθήκη" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Αδυναμία ανοίγματος υπάρχοντος αρχείου" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Λάθος ανάγνωσης από το αρχείο" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Λάθος εγγραφής στο αρχείο" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Αδυναμία δημιουργίας καταλόγου %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Μη Έγκυρος δεσμός" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Δεν βρέθηκαν αρχεία" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Όχι αρκετή μνήμη" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Η λειτουργία δεν υποστηρίζεται!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Λάθος στην εντολή μενού περιεχόμενου" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Λάθος κατά την φόρτωση των ρυθμίσεων" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Συντακτικό λάθος σε συνήθη φράση!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Αδυναμία μετονομασίας αρχείου %s σε %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Αδύνατη η αποθήκευση συσχετισμού!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Αδύνατη η αποθήκευση αρχείου" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Αδυναμία καθορισμού ιδιοτήτων για \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Αδυναμία ορισμού ημερομηνίας/ώρας για \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Αδυναμία ορισμού ιδιοκτήτη/γκρουπ για \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Αδυναμία ορισμού αδειών για \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Ενδιάμεση μνήμη πολύ μικρή" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Πάρα πολλά αρχεία για πακετάρισμα" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Άγνωστη μορφή Αρχειοθήκης" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "" "Are you sure you want to remove all entries of your Favorite Tabs? (There is " "no \"undo\" to this action!)" msgstr "" "Είστε βέβαιοι οτι επιθυμείτε να αφαιρέσετε όλες τις καταχωρήσεις των " "Αγαπημένων Καρτελών σας; (Δεν υπάρχει \"αναίρεση\" σε αυτή την ενέργεια!)" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "Μεταφορά με το ποντίκι εδώ άλλων καταχωρήσεων" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(τέλος του υπομενού)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "Εισαγωγή ενός ονόματος για αυτή τη καταχώρηση Αγαπημένης Καρτέλας" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "Αποθήκευση μίας νέας καταχώρησης Αγαπημένων Καρτελών" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Λάθος κατά τη φόρτωση Αγαπημένων Καρτελών..." #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Λάθος κατά την αποθήκευση Αγαπημένων Καρτελών..." #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "Αριθμός Αγαπημένων Καρτελών που έχουν εξαχθεί επιτυχώς: %d στις %d" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" "Προκαθορισμένη επιπλέον ρύθμιση για αποθήκευση ιστορικού καταλόγου για νέες " "Αγαπημένες Καρτέλες:" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "Αγαπημένες Καρτέλες έχουν προστεθεί στη μνήμη!" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "Αριθμός αρχείου(ων) που έχουν εισαχθεί επιτυχώς: %d στα %d" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "Εισήχθησαν καρτέλες Legacy" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" "Επιλέξτε .tab αρχείο(α) για εισαγωγή (μπορούν να είναι και περισσότερα από " "ένα κάθε φορά!)" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "" "Last Favorite Tabs modification have been saved yet. Do you want to save " "them prior to continue?" msgstr "" "Η τελευταία προσαρμογή Αγαπημένων Καρτελών δεν έχει αποθηκευθεί ακόμη. " "Επιθυμείτε να αποθηκεύσετε πριν να συνεχίσετε;" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" "Αγαπημένες Καρτέλες έχουν μεταβληθεί. Επιθυμείτε αποθήκευση πριν την έξοδο;" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Όνομα" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" "Αυτό θα φορτώσει την ρύθμιση καταχώρησης Αγαπημένων Καρτελών με την ονομασία " "%s" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" "Αποθήκευση σε Αγαπημένες Καρτέλες πάνω στην τελευταία φορτωμένη καταχώρηση " "(%s)" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Ονομασία Μενού:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "Διατήρηση αποθήκευσης ιστορικού καταλόγου με Αγαπημένες Καρτέλες:" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(διαχωριστικό)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ονομασία υπομενού" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Αυτό θα φορτώσει τις Αγαπημένες Καρτέλες: \"%s\"" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" "Αποθήκευση τρεχουσών καρτελών πάνω σε υπάρχουσα καταχώρηση Αγαπημένων " "Καρτελών" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Οι έξτρα ιδιότητες των συσχετισμών επεκτάσεων αρχείου έχουν αλλάξει.\n" "\n" "Επιθυμείτε να αποθηκεύσετε πριν την έξοδο;\n" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" "Οι συσχετισμοί επεκτάσεων αρχείου έχουν αλλάξει.\n" "\n" "Επιθυμείτε να αποθηκεύσετε πριν την έξοδο;\n" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Το αρχείο %s έχει αλλάξει, αποθήκευση;" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Αντικατάσταση:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Το Αρχείο %s υπάρχει, αντικατάσταση;" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Με το αρχείο:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Το Αρχείο \"%s\" δε βρέθηκε." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Εργασίες Αρχείου ενεργές" #: ulng.rsmsgfileoperationsactivelong msgid "" "Some file operations have not yet finished. Closing Double Commander may " "result in data loss." msgstr "" "Κάποιες εργασίες αρχείου δεν έχουν ακόμη τελειώσει. Κλείνοντας τον Double " "Commander ίσως προκληθεί απώλεια δεδομένων." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "" "Options regarding file operations have been modified. Do you want to save " "before to exit?" msgstr "" "Ιδιότητες που αφορούν εργασίες αρχείου έχουν μεταβληθεί. Επιθυμείτε " "αποθήκευση πριν την έξοδο;" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες που αφορούν το χρώμα του πάνελ έχουν μεταβληθεί.\n" "\n" "Επιθυμείτε να αποθηκεύσετε πριν την έξοδο;\n" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Το Αρχείο %s έχει σημανθεί για ανάγνωση μόνο. Διαγραφή;" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" "Το μέγεθος αρχείου του \"%s\" είναι πολύ μεγάλο για το προοριζόμενο σύστημα " "αρχείων!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Ο Φάκελος %s υπάρχει, αντικατάσταση;" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Ακολουθείστε Συμβολοδεσμό \"%s\";" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Επιλέξτε τον τύπο κειμένου προς εισαγωγή" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Προσθήκη %d επιλεγμένων καταλόγων" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Προσθήκη του επιλεγμένου καταλόγου:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Προσθήκη του τρέχοντος καταλόγου:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Εκτέλεση Εντολής" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_somthing" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Ρυθμίσεις του Καταλόγου Hotlist" #: ulng.rsmsghotdirdeleteallentries msgid "" "Are you sure you want to remove all entries of your Directory Hotlist? " "(There is no \"undo\" to this action!)" msgstr "" "Είστε σίγουροι οτι επιθυμείτε να αφαιρέσετε όλες τις καταχωρήσεις από τον " "κατάλογο Hotlist; (Δεν υπάρχει \"Αναίρεση\" σε αυτή την ενέργεια!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Αυτό θα εκτελέσει την ακόλουθη εντολή:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Αυτό είναι ονομασμένο hot dir" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Αυτό θα αλλάξει το ενεργό πλαίσιο στην ακόλουθη διαδρομή:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Και το ανενεργό πλαίσιο θα αλλάξει στην ακόλουθη διαδρομή:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Λάθος κατά τη λήψη αντιγράφου ασφαλείας των εισαγμένων εγγραφών..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Λάθος εξαγωγής εγγραφών..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Εξαγωγή Όλων!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" "Εξαγωγή Καταλόγου Hotlist - Επιλέξτε τις καταχωρήσεις που επιθυμείτε να " "εξαγάγετε" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Εξαγωγή Επιλεγμένων" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Εισαγωγή Όλων!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" "Εισαγωγή Καταλόγου Hotlist - Επιλέξτε τις καταχωρήσεις που επιθυμείτε να " "εισαγάγετε" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Εισαγωγή επιλεγμένων" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Διαδρομή" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Εντοπισμός \".hotlist\" αρχείου προς εισαγωγή" #: ulng.rsmsghotdirmodifiedwanttosave msgid "" "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" "Ο κατάλογος Hotlist έχει μεταβληθεί. Επιθυμείτε να αποθηκεύσετε πριν την " "έξοδο;" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Όνομα Hotdir" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Αριθμός νέων καταχωρήσεων: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Δεν έχει επιλεχθεί τίποτα προς εξαγωγή!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Διαδρομή Hotdir" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Επαναπροσθήκη του επιλεγμένου καταλόγου:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Επαναπροσθήκη του τρέχων καταλόγου:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" "Εισαγωγή τοποθεσίας και ονόματος αρχείου του καταλόγου Hotlist για επαναφορά" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Εντολή:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(τέλος του υπομενού)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Ονομασία Μενού:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Ονομασία:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(διαχωριστικό)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ονομασία υπομενού" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Στόχος Hotdir" #: ulng.rsmsghotdirtiporderpath msgid "" "Determine if you want the active frame to be sorted in a specified order " "after changing directory" msgstr "" "Προσδιορίστε αν επιθυμείτε το ενεργό πλαίσιο να ταξινομηθεί με μια ειδική " "σειρά μετά την αλλαγή καταλόγου" #: ulng.rsmsghotdirtipordertarget msgid "" "Determine if you want the not active frame to be sorted in a specified order " "after changing directory" msgstr "" "Προσδιορίστε αν επιθυμείτε το μη ενεργό πλαίσιο να ταξινομηθεί με μια ειδική " "σειρά μετά την αλλαγή καταλόγου" #: ulng.rsmsghotdirtipspecialdirbut msgid "" "Some functions to select appropriate path relative, absolute, windows " "special folders, etc." msgstr "" "Κάποιες λειτουργίες για την επιλογή κατάλληλης σχετικής διαδρομής, απόλυτης, " "ειδικούς φακέλους παραθύρων, κ.λ.π." #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Σύνολο καταχωρήσεων που έχουν αποθηκευθεί: %d\n" "\n" "Όνομα Αρχείου ασφαλείας: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Σύνολο καταχωρήσεων που έχουν εξαχθεί:" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside " "sub-menu.\n" msgstr "" "Επιθυμείτε να διαγράψετε όλα τα στοιχεία εντός του υπομενού [%s];\n" "Απαντώντας ΟΧΙ θα διαγράψετε μόνο τους οριοθέτες του μενού αλλά θα " "διατηρηθεί το στοιχείο μέσα στο υπομενού.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" "Εισαγωγή τοποθεσίας και ονόματος αρχείου όπου θα αποθηκευθεί ένα αρχείο " "καταλόγου Hotlist" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Μη Έγκυρο τελικό μήκος αρχείου για το αρχείο : \"%s\"" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Παρακαλώ εισάγετε τον επόμενο δίσκο ή κάτι παρόμοιο.\n" "\n" "Ώστε να επιτραπεί εγγραφή σε αυτό το αρχείο:\n" "\"%s\"\n" "\n" "Αριθμός bytes προς εγγραφή: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Λάθος στη γραμμή εντολών" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Μη Έγκυρο όνομα αρχείου" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Άκυρος τύπος αρχείου ρυθμίσεων" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Μη Έγκυρη διαδρομή" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Η Διαδρομή %s περιέχει απαγορευμένος χαρακτήρες." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Αυτό είναι ένα μη έγκυρο πρόσθετο!" #: ulng.rsmsginvalidpluginarchitecture msgid "" "This plugin is built for Double Commander for %s.%sIt can not work with " "Double Commander for %s!" msgstr "" "Αυτό το πρόσθετο έχει δημιουργηθεί για τον Double Commander για %s.%sΔεν " "μπορεί να λειτουργήσει στον Double Commander για %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Μη έγκυρη δημιουργία εισαγωγικών" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Μη Έγκυρη επιλογή." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Φόρτωση λίστας αρχείων..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Εντοπισμός αρχείου ρυθμίσεων του TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Εντοπισμός αρχείου εκτέλεσης του TC (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Αντιγραφή αρχείου %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Διαγραφή αρχείου %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Λάθος: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Φόρτωση Εξωτερικά" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Εξαγωγή Αποτελέσματος εξωτερικά" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Εξαγωγή Αρχείου %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Πληροφορίες:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Δημιουργία δεσμού %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Δημιουργία καταλόγου %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Μετακίνηση αρχείου %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες που αφορούν την καταγραφή έχουν μεταβληθεί.\n" "\n" "Επιθυμείτε να τις αποθηκεύσετε πριν την έξοδο;\n" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Πακετάρισμα στο αρχείο %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Αφαίρεση καταλόγου %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Έγινε:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Δημιουργία συμβολοδεσμού %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Δοκιμή ακεραιότητας αρχείου %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Ασφαλής Διαγραφή αρχείου %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Ασφαλής Διαγραφή καταλόγου %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Κύριο Συνθηματικό" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Παρακαλώ εισάγετε το κύριο συνθηματικό:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "" "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" "Διάφορες ρυθμίσεις έχουν αλλάξει. Επιθυμείτε να αποθηκεύσετε πριν την έξοδο;" #: ulng.rsmsgnewfile msgid "New file" msgstr "Νέο Αρχείο" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ο Επόμενος τόμος θα ξεπακεταριστεί" #: ulng.rsmsgnofiles msgid "No files" msgstr "Δεν υπάρχουν αρχεία" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Δεν έχουν επιλεχθεί αρχεία." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Όχι αρκετός ελεύθερος χώρος στον στοχευμένο οδηγό, Συνέχιση;" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Όχι αρκετός ελεύθερος χώρος στον στοχευμένο οδηγό, Δοκιμή Ξανά;" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Αδυναμία διαγραφής αρχείου %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Δεν έχει εφαρμοστεί." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "" "Below is a preview. You may move cursor and select files to get immediately " "an actual look and feel of the various settings." msgstr "" "Παρακάτω είναι μία προεπισκόπηση. Μπορείται να μετακινήσετε τον κέρσορα και " "να επιλέξετε αρχεία ώστε να έχετε άμεσα μία πραγματική εικόνα και αίσθηση " "των διαφόρων ρυθμίσεων." #: ulng.rsmsgpassword msgid "Password:" msgstr "Συνθηματικό:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Τα συνθηματικά διαφέρουν!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Παρακαλώ εισάγετε το συνθηματικό:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Συνθηματικό (Τείχος Προστασίας):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Παρακαλώ επανεισάγετε το συνθηματικό για ταυτοποίηση:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "Προσθήκη %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "Διαμόρφωση" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "%Διαγραφή %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Τα προκαθορισμένα \"%s\" ήδη υπάρχουν. Αντικατάσταση;" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Πρόβλημα κατά την εκτέλεση της εντολής (%s)" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Όνομα Αρχείου για εναποθετημένο κείμενο:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Παρακαλώ, κάντε αυτό το αρχείο διαθέσιμο. Δοκιμή ξανά;" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "Εισαγωγή νέου φιλικού ονόματος για αυτή την Αγαπημένη Καρτέλα" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Εισαγωγή νέου ονόματος για αυτό το μενού" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Μετονομασία/μετακίνηση %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Μετονομασία/μετακίνηση επιλεγμένων \"%s\";" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "" "Παρακαλώ επανεκκινείστε τον Double Commander ώστε να εφαρμοστούν οι αλλαγές" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "Επιλογή σε ποιους τύπους αρχείων να προστεθεί επέκταση \"%s\"" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Επιλεγμένα: %s από %s, αρχεία: %d από %d, φάκελοι: %d από %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Επιλογή εκτελέσιμου αρχείου για" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Παρακαλώ επιλέξτε μόνο αρχεία αθροίσματος ελέγχου!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Παρακαλώ επιλέξτε τοποθεσία του επόμενου τόμου" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Καθορισμός ετικέτας τόμου" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Ειδικοί Κατάλογοι" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Προσθήκη διαδρομής από το ενεργό πλαίσιο" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Προσθήκη διαδρομής από το ανενεργό πλαίσιο" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Εξερεύνηση και χρήση της επιλεγμένης διαδρομής" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Χρήση μεταβλητής περιβάλλοντος..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Μετάβαση στην ειδική διαδρομή του Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Μετάβαση στην μεταβλητή περιβάλλοντος..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Μετάβαση σε άλλο ειδικό φάκελο των Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Μετάβαση στον ειδικό φάκελο των Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "Δημιουργία σχετικής διαδρομής για την hotdir" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Ορίστε ως απόλυτη τη διαδρομή" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Ορίστε ως σχετική την ειδική διαδρομή του Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Ορίστε ως σχετική για την μεταβλητή περιβάλλοντος..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Ορίστε ως σχετική για τον ειδικό Windows φάκελο (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Ορίστε ως σχετική για άλλον ειδικό φάκελο των Windows... " #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Χρήση της ειδικής διαδρομής του Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "Χρήση διαδρομής hotdir" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Χρήση άλλου ειδικού φακέλου των Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Χρήση του ειδικού φακέλου των Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" "Αυτή η καρτέλα (%s) είναι κλειδωμένη! Άνοιγμα καταλόγου σε άλλη καρτέλα;" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Μετονομασία καρτέλας" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Όνομα νέας καρτέλας:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες σχετικά με τα extra καρτελών φακέλων έχουν αλλάξει.\n" "\n" "Επιθυμείτε αποθήκευση πριν την έξοδο;\n" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες σχετικά με τις καρτέλες φακέλων έχουν αλλάξει.\n" "\n" "Επιθυμείτε αποθήκευση πριν την έξοδο;\n" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Διαδρομή στόχου:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης αρχείου TC ρυθμίσεων:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης εκτελέσιμου TC ρυθμίσεων:\n" "%s\n" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Λάθος! Ο TC ακόμη λειτουργεί αλλά θα έπρεπε να είναι κλειστός για αυτή τη " "λειτουργία.\n" "Κλείστε τον και πιέστε ΟΚ ή πιέστε ΑΚΥΡΩΣΗ για απόρριψη.\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Λάθος! Αδυναμία εύρεσης επιθυμητού φακέλου εξαγωγής TC γραμμής εργαλείων:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" "Εισαγωγή τοποθεσίας και ονόματος αρχείου που θα αποθηκευθεί ένα αρχείο " "γραμμής εργαλείων του TC" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" "Ιδιότητες που αφορούν το τερματικό έχουν μεταβληθεί.\n" "\n" "Επιθυμείτε αποθήκευση πριν την έξοδο;\n" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" είναι τώρα στο πρόχειρο" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" "Η Επέκταση του επιλεγμένου αρχείου δεν είναι κάποιος γνωστός τύπος αρχείου" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Λάθος!Πρόβλημα αποθήκευσης γραμμής εργαλείων!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Εντοπισμός \".toolbar\" αρχείο για εισαγωγή" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Εντοπισμός \".BAR\" αρχείο για εισαγωγή" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" "Η Γραμμή Εργαλείων έχει αλλάξει. Επιθυμείτε την αποθήκευση πριν την έξοδο;" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" "Εισαγωγή τοποθεσίας και ονόματος αρχείου της Γραμμής Εργαλείων για επαναφορά" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Αποθηκεύτηκε!\n" "Όνομα Αρχείου Γραμμής Εργαλείων: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Έχουν επιλεχθεί πάρα πολλά αρχεία." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Απροσδιόριστο" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<ΟΧΙ ΕΞΩΤΕΡ>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<ΧΩΡΙΣ ΟΝΟΜΑ>" #: ulng.rsmsgusername msgid "User name:" msgstr "Όνομα Χρήστη:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Όνομα χρήστη (Τείχος Προστασίας):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Ετικέτα τόμου:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Παρακαλώ εισαγάγετε το μέγεθος τόμου:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Ασφαλής Διαγραφή %d επιλεγμένων αρχείων/καταλόγων;" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Ασφαλής Διαγραφή επιλεγμένων \"%s\";" #: ulng.rsmsgwithactionwith msgid "with" msgstr "με" #: ulng.rsmulrenfilenamestylelist msgid "" "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word " "Uppercase;" msgstr "" "Χωρίς αλλαγή;ΚΕΦΑΛΑΙΟ;μικρό;Πρώτο γράμμα κεφαλαίο;Πρώτο Γράμμα κάθε Λέξης " "Κεφαλαίο;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Έχει απορριφθεί" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Υπολογισμός αθροίσματος ελέγχου" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Υπολογισμός αθροίσματος ελέγχου του \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Υπολογισμός" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Υπολογισμός \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Ένωση" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Ένωση αρχείων από \"%s\" σε \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Αντιγραφή" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Αντιγραφή από \"%s\" σε \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Αντιγραφή \"%s\" σε \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Δημιουργία καταλόγου" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Δημιουργία καταλόγου \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Διαγραφή" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Διαγραφή σε \"%s\" " #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Διαγραφή \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Εκτέλεση" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Εκτέλεση \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Εξαγωγή" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Εξαγωγή από \"%s\" σε \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Τελείωσε" #: ulng.rsoperlisting msgid "Listing" msgstr "Προβολή Λίστας" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Προβολή Λίστας \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Μετακίνηση" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Μετακίνηση από \"%s\"σε \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Μετακίνηση \"%s\"σε \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Δεν έχει εκκινηθεί" #: ulng.rsoperpacking msgid "Packing" msgstr "Πακετάρισμα" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Πακετάρισμα από \"%s\" σε \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Πακετάρισμα \"%s\" σε \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Έχει παυθεί" #: ulng.rsoperpausing msgid "Pausing" msgstr "Παύση" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Στην Ουρά" #: ulng.rsoperrunning msgid "Running" msgstr "Εκτέλεση" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Καθορισμός ιδιότητας" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Καθορισμός ιδιότητας σε \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Καθορισμός ιδιότητας των" #: ulng.rsopersplitting msgid "Splitting" msgstr "Διαμερισμός" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Διαμερισμός \"%s\"σε \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Εκκίνηση" #: ulng.rsoperstopped msgid "Stopped" msgstr "Σταματημένο" #: ulng.rsoperstopping msgid "Stopping" msgstr "Σταμάτημα" #: ulng.rsopertesting msgid "Testing" msgstr "Δοκιμή" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Δοκιμή σε \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Δοκιμή \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Επιβεβαίωση αθροίσματος ελέγχου" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Επιβεβαίωση αθροίσματος ελέγχου σε \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Επιβεβαίωση αθροίσματος ελέγχου του \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Αναμονή για πρόσβαση στην πηγή αρχείων" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Αναμονή για απόκριση από τον χρήστη" #: ulng.rsoperwiping msgid "Wiping" msgstr "Ασφαλής Διαγραφή" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Ασφαλής Διαγραφή σε \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Ασφαλής Διαγραφή \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Επεξεργασία" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Προσθήκη στην αρχή;Προσθήκη στο τέλος;Έξυπνη προσθήκη" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Διαγραφή:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Εξαγωγή χωρίς διαδρομή:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Λειτουργία ανάλυσης μορφής:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Θέση ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Διάστημα Αναζήτησης ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Παράμετρος" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Γραμμή εισαγωγής συνθηματικού:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Δημιουργία αυτοεξαγώμενου αρχείου:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Όνομα τύπου αρχειοθήκης:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Τιμή" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Συσχετισμός του προσθέτου \"%s\" με:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Πρώτο;Τελευταίο;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Κλασική, σειρά legacy;Αλφαβητική σειρά (αλλά η γλώσσα ακόμη πρώτη)" #: ulng.rsoptdifferframeposition msgid "" "Active frame panel on left, inactive on right (legacy);Left frame panel on " "left, right on right" msgstr "" "Ενεργό πλαισιακό πάνελ στα αριστερά, ανενεργό στα δεξιά (legacy);Αριστερό " "πλαισιακό πάνελ στα αριστερά, δεξιό στα δεξιά" #: ulng.rsoptdisable msgid "Disable" msgstr "Απενεργοποίηση" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Ενεργοποίηση" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Εισάγετε επέκταση" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Κέρσορας" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Επιλογή" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Επιλογέας + Κέρσορας" #: ulng.rsoptexampletext msgid "Text" msgstr "Κείμενο" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "Προσθήκη στην αρχή;Προσθήκη στο τέλος;Με Αλφαβητική σειρά" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" "ξεχωριστό παράθυρο;ελαχιστοποιημένο ξεχωριστό παράθυρο;πάνελ λειτουργειών" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "float;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "" "Shortcut %s for cm_Delete will be registered, so it can be used to reverse " "this setting." msgstr "" "Η συντόμευση %s για το cm_Delete θα κατοχυρωθεί, ώστε να χρησιμοποιηθεί για " "να γίνει αντιστροφή αυτής της ρύθμισης.." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Προσθήκη ειδικού πλήκτρου για %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Προσθήκη συντόμευσης" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Αδυναμία καθορισμού συντόμευσης" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Αλλαγή συντόμευσης" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Εντολή" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "" "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do " "you want to change this parameter to use the global setting?" msgstr "" "Η συντόμευση %s για το cm_Delete έχει μία παράμετρο που αντικαθιστά αυτή τη " "ρύθμιση. Επιθυμείτε να αλλάξετε αυτή τη παράμετρο και να κάνετε χρήση των " "γενικών ρυθμίσεων;" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "" "Shortcut %s for cm_Delete needs to have a parameter changed to match " "shortcut %s. Do you want to change it?" msgstr "" "Η συντόμευση %s για το cm_Delete πρέπει να έχει μία παράμετρο που να " "ταιριάζει με τη συντόμευση %s. Επιθυμείτε να την αλλάξετε;" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Περιγραφή" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Ρύθμιση ειδικού πλήκτρου για %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Διόρθωση παραμέτρου" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Ειδικό Πλήκτρο" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Ειδικά Πλήκτρα" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<κανένα>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Παράμετροι" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Καθορισμός συντόμευσης για διαγραφή αρχείου" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "" "For this setting to work with shortcut %s, shortcut %s must be assigned to " "cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" "Για να λειτουργήσει αυτή η ρύθμιση με τη συντόμευση %s, η συντόμευση %s " "πρέπει να κατοχυρωθεί στο cm_Delete αλλά είναι ήδη εκχωρημένη στο %s. " "Επιθυμείτε να την αλλάξετε;" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "" "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with " "reversed Shift cannot be assigned. This setting might not work." msgstr "" "Η συντόμευση %s για το cm_Delete είναι μία ακολουθία συντόμευσης για την " "οποία ένα ειδικό πλήκτρο που να απασχολεί το Shift δεν μπορεί να οριστεί. " "Αυτή η ρύθμιση πιθανώς δε θα λειτουργήσει." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Συντόμευση σε χρήση" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Συντόμευση %s έχει ήδη χρησιμοποιηθεί." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Αλλαγή σε %s;" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "χρησιμοποιείται για %s σε %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "χρησιμοποιείται για αυτή την εντολή αλλά με διαφορετικές παραμέτρους" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Εφαρμογές Συμπίεσης" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Αυτόματη Ανανέωση" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Συμπεριφορές" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Σύντομα" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Χρώματα" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Στήλες" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Διαμόρφωση" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Προσαρμοσμένες στήλες" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Κατάλογος Hotlist" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Μεταφορά & απόθεση" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Κουμπιά Λίστας Οδηγών" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Αγαπημένες Καρτέλες" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Συσχετισμοί Αρχείου extra" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Συσχετισμοί Αρχείου" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Λειτουργίες Αρχείου" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Πάνελ Αρχείων" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Προβολές Αρχείων" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Τύποι Αρχείου" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Καρτέλες Φακέλων" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "Extra καρτελών φακέλων" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Γραμματοσειρές" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Μαρκαδόροι" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Ειδικά Πλήκτρα" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Εικονίδια" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Λίστα Αγνοημένων" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Πλήκτρα" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Γλώσσα" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Διάταξη" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Καταγραφή" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Διάφορα" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ποντίκι" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Πρόσθετα" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Φίλτρο ταχείας αναζήτησης" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Τερματικό" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Γραμμή εργαλείων" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Συμπληρώματα" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Εργαλεία" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Υποδείξεις" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Κανένα;Γραμμή Εντολών;Ταχεία αναζήτηση;Γρήγορο Φίλτρο" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Αριστερό Κουμπί;Δεξιό Κουμπί;" #: ulng.rsoptnewfilesposition msgid "" "at the top of the file list;after directories (if directories are sorted " "before files);at sorted position;at the bottom of the file list" msgstr "" "στην κορυφή της λίστας αρχείου;μετά τους καταλόγους (αν οι κατάλογοι είναι " "τοποθετημένοι πριν τα αρχεία);σε ταξινομημένη θέση;στο τέλος της λίστας " "αρχείου" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Το Πρόσθετο %s έχει ήδη εκχωρηθεί για τις ακόλουθες επεκτάσεις:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Ενεργό" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ονομασία αρχείου" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Όνομα" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Έχει καταχωρηθεί σε" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "Ενεργοποιημένο;Απενεργοποιημένο" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "Αρχεία;Κατάλογοι;Αρχεία και Κατάλογοι" #: ulng.rsoptsearchopt msgid "" "&Hide filter panel when not focused;Keep saving setting modifications for " "next session" msgstr "" "&Κρύψιμο του πάνελ φίλτρου όταν δεν είναι εστιασμένο;συνέχιση αποθήκευσης " "ρυθμίσεων μετατροπών για την επόμενη συνεδρία" #: ulng.rsoptsortcasesens msgid "" "not case sensitive;according to locale settings (aAbBcC);first upper then " "lower case (ABCabc)" msgstr "" "χωρίς διάκριση πεζών-κεφαλαίων;σύμφωνα με τις ρυθμίσεις εντοπιότητας " "(αΑβΒγΓ);το πρώτο πεζό μετά κεφαλαίο (ΑΒΓαβγ)" #: ulng.rsoptsortfoldermode msgid "" "sort by name and show first;sort like files and show first;sort like files" msgstr "" "ταξινόμηση κατά όνομα και εμφάνιση του πρώτου;ταξινόμηση σαν αρχεία και " "εμφάνιση του πρώτου;ταξινόμηση σαν αρχεία" #: ulng.rsoptsortmethod msgid "" "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "" "Αλφαβητικά, σε σχέση με τον τονισμό;φυσική κατάταξη: αλφαβητικά και " "αριθμητικά" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Κορυφή;Κάτω;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Διαχωριστικό;Εσωτερική εντολή;Εξωτερική εντολή;Μενού" #: ulng.rsopttypeofduplicatedrename msgid "" "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - " "filename(x).ext" msgstr "" "DC legacy - Αντιγραφή (x) όνομα_αρχείου.επέκταση;Windows - όνομα_αρχείου (x)." "επέκταση;Άλλα - όνομα_αρχείου(x).επέκταση" #: ulng.rsoptupdatedfilesposition msgid "" "don't change position;use the same setting as for new files;to sorted " "position" msgstr "" "χωρίς αλλαγή θέσης;χρήση της ίδιας ρύθμισης με τα νέα αρχεία;σε ταξινομημένη " "θέση" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Αρχεία: %d, Φάκελοι: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Αδυναμία αλλαγής δικαιωμάτων πρόσβασης για \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Αδυναμία αλλαγής ιδιοκτησίας για \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Αρχείο" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Κατάλογος" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Ονομασμένο pipe" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Όχι" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Ειδική block device" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Ειδική character device" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Συμβολoδεσμός" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Άγνωστος τύπος" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ναι (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Αναζήτηση αποτελέσματος" #: ulng.rssearchstatus msgid "SEARCH" msgstr "ΑΝΑΖΗΤΗΣΗ" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<πρότυπο χωρίς όνομα>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Επιλέξτε ένα κατάλογο" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Εμφάνιση βοήθειας για %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Όλα" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Κατηγορία" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Στήλη" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Εντολή" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Όνομα αρχείου" #: ulng.rssimplewordfiles msgid "files" msgstr "Αρχεία" #: ulng.rssimplewordparameter msgid "Param" msgstr "Παράμετρος" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Προεπισκόπηση" #: ulng.rssimplewordresult msgid "Result" msgstr "Αποτέλεσμα" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Αποθηκεύτηκε!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Κατάλογος Εργασίας" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Αρχεία: %d, Κατάλογοι: %d, Μέγεθος: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Αδυναμία δημιουργίας καταλόγου στόχου!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr " Μη Έγκυρος τύπος μεγέθους αρχείου!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Αδυναμία διαμερισμού του Αρχείου!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Ο αριθμός τμημάτων είναι παραπάνω από 100! Συνέχιση;" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Επιλογή καταλόγου:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Λάθος κατά τη δημιουργία συμβολοδεσμού." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Προκαθορισμένο Κείμενο" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Απλό Κείμενο" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" "Να μη γίνει τίποτα;Κλείσιμο καρτέλας;Πρόσβαση Αγαπημένων Καρτελών;Αναδυόμενο " "μενού Καρτελών" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Μέρα(ες)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Ώρα(ες)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Λεπτό(ά)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Μήνας(ες)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Δευτερόλεπτο(α)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Εβδομάδα(ες)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Χρόνος(ια)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Μετονομασία Αγαπημένων Καρτελών" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "Μετονομασία υπο-μενού Αγαπημένων Καρτελών" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differ" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Επεξεργαστής" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Λάθος ανοίγματος differ" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Λάθος ανοίγματος επεξεργαστή" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Λάθος ανοίγματος τερματικού" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Λάθος ανοίγματος προβολέα" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Τερματικό" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Προβολέας" #: ulng.rsunhandledexceptionmessage msgid "" "Please report this error to the bug tracker with a description of what you " "were doing and the following file:%sPress %s to continue or %s to abort the " "program." msgstr "" "Παρακαλώ αναφέρετε αυτό το πρόβλημα στον αποσφαλματωτή με μία περιγραφή του " "τι έχετε κάνει και το ακόλουθο αρχείο:%sΠιέστε %s για να συνεχίσετε ή %s για " "απόρριψη του προγράμματος." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Και τα δύο πάνελ, από το ενεργό στο ανενεργό" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Και τα δύο πάνελ, από τα αριστερά στα δεξιά" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Διαδρομή του πάνελ" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "Βάλτε κάθε όνομα σε παρένθεση ή οτιδήποτε επιθυμείτε" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Μόνο όνομα αρχείου, χωρίς επέκταση" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Πλήρες όνομα αρχείου (διαδρομή και όνομα αρχείου)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Βοήθεια για \"%\" μεταβλητές" #: ulng.rsvarinputparam msgid "" "Will request request user to enter a parameter with a default suggested value" msgstr "" "Θα ζητηθεί από το χρήστη να εισάγει μια παράμετρο με την προκαθορισμένη " "προτεινόμενη τιμή" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Αριστερό πάνελ" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Προσωρινό όνομα αρχείου τη λίστας με τα ονόματα αρχείων" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" "Προσωρινό όνομα αρχείου τη λίστας με τα ολοκληρωμένα ονόματα αρχείων " "(διαδρομή+όνομα αρχείου)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" "Προσωρινό όνομα αρχείου τη λίστας με τα ονόματα αρχείων με σχετική διαδρομή" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Μόνο επέκταση αρχείου" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Μόνο όνομα αρχείου" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Άλλο παράδειγμα για το τι είναι δυνατό" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Διαδρομή, με τελικό οριοθέτη" #: ulng.rsvarpercentchangetopound msgid "" "From here to the end of the line, the percent-variable indicator is the \"#" "\" sign" msgstr "" "Από εδώ ως το τέλος της γραμμής, ο δείκτης της μεταβλητής επί τοις εκατό " "είναι το \"#\" σύμβολο" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Επιστροφή του συμβόλου επί τοις εκατό" #: ulng.rsvarpoundchangetopercent msgid "" "From here to the end of the line, the percent-variable indicator is back the " "\"%\" sign" msgstr "" "Από εδώ ως το τέλος της γραμμής, ο δείκτης της μεταβλητής επί τοις εκατό " "είναι πάλι το \"%\" σύμβολο" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "Βάλτε ως πρόθυμα στα ονόματα ένα \"-α \" 'η ότι άλλο επιθυμείτε" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Ερώτηση χρήστη για παράμετρο;Πρόταση προκαθορισμένης τιμής]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Όνομα αρχείου με σχετική διαδρομή" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Δεξιό πάνελ" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "Πλήρης διαδρομή του δεύτερου επιλεγμένου αρχείου στο δεξιό πάνελ" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Εμφάνιση εντολής προ εκτέλεσης" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Απλό μήνυμα]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Θα εμφανίσει ένα απλό μήνυμα" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Ενεργό πάνελ (πηγή)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Ανενεργό πάνελ (στόχος)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "Τα ονόματα αρχείων θα μπουν σε εισαγωγικά από εδώ (προκαθορισμένο)" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Η Εντολή θα εκτελεστεί σε τερματικό που θα μείνει ανοικτό στο τέλος" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Οι Διαδρομές θα έχουν τελικό οριοθέτη" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "Τα ονόματα αρχείων δε θα μπουν σε εισαγωγικά από εδώ" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Η εντολή θα πραγματοποιηθεί σε τερματικό που θα κλείσει στο τέλος" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Οι Διαδρομές δε θα έχουν τελικό οριοθέτη (προκαθορισμένο)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Δίκτυο" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Εσωτερικός Προβολέας του Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Κακή Ποιότητα" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Κωδικοποίηση" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Τύπος Εικόνας" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Νέο Μέγεθος" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s δεν βρέθηκαν!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "με εξωτερικό προβολέα" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "με εσωτερικό προβολέα" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Αριθμός αντικατάστασης: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Δεν πραγματοποιήθηκε καμία αντικατάσταση." ���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.bg.po������������������������������������������������������������0000644�0001750�0000144�00001255716�12666540554�017223� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-05-01 10:42+0200\n" "Last-Translator: sstpr@narod.ru\n" "Language-Team: Language <sstpr@narod.ru>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "X-Native-Language: български\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Всички" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Настройка на изгледа на нагласените стълбове" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Подцветка:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Обрамчване на показалеца" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Позволяване на надцветка" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Използване на нагласени шрифт и цвят" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Цявят на текста:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Шрифт" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Размер:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Подцветка 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Настройка на изглед №" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Цвят на показалеца:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Текст на показалеца:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Цвят на отбелязване:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Име" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Добавяне на стълб" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Нагласяване на стълбове:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Преглед" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Презапис на &собствеността" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Презапис на &времето и датата" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Поправяне на в&ръзките" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Изоставяне на стяга „само за четене“" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Из&ключване на празните папки" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "&Следване на връзките" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Запазване на &място" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Действие, при невъзможност за задаване на време, принадлежности и т.н." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Когато &папката съществува" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Когато &файлът съществува" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Постройка" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Домашна страница:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Преработка" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Издание" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "О&чистване" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Изберете принадлежности" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Архив" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Уплътнен" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Папка" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Криптиран" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "С&крит" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Само за &четене" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лешкав" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Мека връзка" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Системен" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Временен" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Принадлежности по NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Об щи принадлежности" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Разряда:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго:" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изпълнение" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Запис" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Като текст:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Изчисляване на проверочен сбор..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Създаване на отделни проверчони сборове за всички файлове" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Запис на файла/овете с проверочните сборове в:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Сверяване на проверочен сбор..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "Закачане" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Изтриване" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "Обработка" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Управител на свързванията" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Закачане към:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Добавяне към опашка" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "Въз&можности" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Запис на настройките като подразбирани" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Презапис на файл(ове)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Нова опашка" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Опашка 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Опашка 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Опашка 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Опашка 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Опашка 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Запис на описанието" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Бележки за файл/папка" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Промяна на бележката за:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Знаков набор:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Отказ" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Връщане" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отмяна" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "Из&ход" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Пренебрегване на ГЛавноСТта" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Последна разлика" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "" #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "" #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "" #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "" #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "" #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Знаков набор" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Знаков набор" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Сравняване на файлове" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Обработка" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Знаков набор" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Файл" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "Въз&можности" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Отказ" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "За" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Настройка" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Настройка" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Запомняне" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Изрязване" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Изтриване" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Търсене" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Търсене" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Намиране на следващо:" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Намиране на следващо:" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Поставяне" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Връщане" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Връщане" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Замяна" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Замяна" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Избор на вси&чки" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Избор на всички" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Отмяна" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Отмяна" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Затваряне" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Нов" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Отваряне" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Отваряне" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Съхраняване" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Съхраняване &като..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Съ&храняване на всички" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Обработчик" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Обработка" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Знаков набор" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Отваряне като" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Съхраняване като" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Синтактично подчертаване" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Отчитане на &глаВноСТта" #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Търсене на&долу" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Обичайни изрази" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Само избрания &текст" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "&Само цели думи" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Възможност" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Замяна с:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Търсене от:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Подока" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Извличане на файлове" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Разгъване на имената на пътищата, ако са съхранени във файловете" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Разгъване на всяка сбивка в отделна папка (според името на сбивката)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Замяна на съществуващите файлове" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "Извличане на файл в:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "&Файлове за разгъване:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Парола за кодираните файлове" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Добавяне" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Добавяне" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Надолу" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Премахване" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Премахване" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Премахване" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Премахване" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Нагоре" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Файлови обвързвания" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Действия" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Разширения" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Видове файлове" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Значе" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Действие:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Заповед:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Обработка" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Отваряне в обработчика" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Файлов път" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Цял път" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Получаване на изхода от командата" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Отваряне" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Пускане в терминал" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Отваряне във VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Отваряне в прегледа" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "" #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "От:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "В &крилото" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Показване на вси&чки" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Текущо действие:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "От:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "В:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Затваряне" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лешкав" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Разряда:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго:" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Текст:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изпълнение" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Име" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Път:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Група" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Последно използване:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Последна промяна:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Последна промяна на състоянието:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Осмично:" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Собственик" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Запис" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Размер:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Мека връзка към:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Вид:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Свойства" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Добавяне" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Обработка" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Отиване до файл" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Ново търсене" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Съхраняване" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "За&реждане" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Съхраняване" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Начало" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Отказ" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Вкарване във файловия &списък" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Търсене на файлове" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Отчитане на глАВноСТта" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Дата от:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Дата до:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Файлов размер от:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Файлов размер до:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Търсене във файл" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Следване на меките връзки" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Намиране на файлове НЕсъдържащи текста" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "Не по- стар от:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Обичайни изрази" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Замяна на текст" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "Време от:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Време до:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Използване на приставка за търсене:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Търсене на данни" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Знаков набор:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Файл" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Папка" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Търсене на по&дпапки:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Пре&дишни търсения:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Показване в прегледа" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Разширени" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Зареждане/ Съхраняване" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Приставки" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Намерено" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Обичайно" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Търсене" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Търсене" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Отчитане на глаВНостТА" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Създаване на твърда връзка" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Съществуваща цел, към която да сочи връзката" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име на връзката" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Сглобяване на файл" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Съхраняване в..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Предмет" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Файлово име" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Надолу" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Надолу" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Премахване" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Изтриване" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Нагоре" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Нагоре" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&За" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Добавяне името на файла в командния ред" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Добавяне на пътя и файловото име в командния ред" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Преписване на пътя в реда управление" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Съкратен" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Съкратен изглед" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Изчисляване на &заетото място..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Смяна на папката" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Отиване в домашната папка" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Папка нагоре" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "В основната папка" #: tfrmmain.actchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Изчисляване на проверочен сбор..." #: tfrmmain.actchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Потвърждаване на проверочен сбор..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Изчистване на дневника" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Изчистване на прозореца на дневника" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Премахване на вси&чки подпрозорци" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Пре&махване на подпрозореца" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Пълен" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Стълбов изглед" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Сравняване по &съдържание" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Сравняване на папките" #: tfrmmain.actcomparedirectories.hint #, fuzzy msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Сравняване на папките" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Настройка на любимите папки" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Показване на изскачащ изборник" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Презапис" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Запомняне на всички из§брани стълбове" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Запомняне на файловото/ите име/на и пълния &път" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Запомняне на &файловото/ите име/на в кошницата" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Презапис на файловете без искане на потвърждение" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Презапис в същото крило" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Запомняне" #: tfrmmain.actcountdircontent.caption #, fuzzy #| msgid "Sho&w occupied space" msgid "Sho&w Occupied Space" msgstr "&Показване на заетото място" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Изрязване" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Итриване" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Дневник на папката" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "&Бързодостъпни папки" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Обработка" #: tfrmmain.acteditcomment.caption #, fuzzy #| msgid "Edit comment..." msgid "Edit Co&mment..." msgstr "Промяна на бележката..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Обработка на нов файл" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Обработка на полето за пътя над файловия списък" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Размяна на &крилата" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "Извличане на файлове..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Файлови об&вързвания..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Свързване на файлове" #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Показване на файловите свойства" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Раздробяване на файл" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Плосък изглед" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Сочене на реда за управление" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Създаване на връзка..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Съ&държание" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "&Водоравно подреждане на крилата" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Клавиатура" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Ляво &= дясно" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Първо се отваря лявото крило" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption #, fuzzy #| msgid "Load Selection From Clipboard" msgid "Load Selection from Clip&board" msgstr "Зареждане на отбелязване" #: tfrmmain.actloadselectionfromfile.caption #, fuzzy #| msgid "Load Selection From File" msgid "&Load Selection from File..." msgstr "Зареждане на отбелязване от файл" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Зареждане на подпрозорци от файл" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Нова папка" #: tfrmmain.actmarkcurrentextension.caption #, fuzzy #| msgid "Select all with same extension" msgid "Select All with the Same E&xtension" msgstr "Избор на всички със същото разширение" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "Обръщане на избора" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Избор на вси&чки" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Снемане на избора от група" #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Избор на група" #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "Снемане на избора от всички" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Смаляване на прозореца" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "Множествено преименуване" #: tfrmmain.actnetworkconnect.caption #, fuzzy #| msgid "Network Connect..." msgid "Network &Connect..." msgstr "Закачане към мрежа..." #: tfrmmain.actnetworkdisconnect.caption #, fuzzy #| msgid "Network Disconnect" msgid "Network &Disconnect" msgstr "Разкачане от мрежа" #: tfrmmain.actnetworkquickconnect.caption #, fuzzy #| msgid "Network Quick Connect..." msgid "Network &Quick Connect..." msgstr "Бързо закачане към мрежа..." #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "&Нов подпрозорец" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption #, fuzzy #| msgid "Switch to nex&t tab" msgid "Switch to Nex&t Tab" msgstr "Преминаване на следва&щия подпрозорец" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Отваряне" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Опит за отваряне на файл" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "" #: tfrmmain.actopendirinnewtab.caption #, fuzzy #| msgid "Open &folder in new tab" msgid "Open &Folder in a New Tab" msgstr "Отваряне на &папката в нов подпрозорец" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Отваряне на &VFS списък" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Преглед на &действията" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "Въз&можности..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Сбиване на файлове..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Задаване на положението на разделителя" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Поставяне" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption #, fuzzy #| msgid "Switch to &previous tab" msgid "Switch to &Previous Tab" msgstr "Преминаване на пред&ходния подпрозорец" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Бързо пресяване" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Бързо търсене" #: tfrmmain.actquickview.caption #, fuzzy #| msgid "Quick View Panel" msgid "&Quick View Panel" msgstr "Крило за бърз преглед" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "О&пресняване" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Местене" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Местене/ преименуване без искане на потвърждение" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Преименуване" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Пре&именуване на подпрозореца" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption #, fuzzy #| msgid "Restore Selection" msgid "&Restore Selection" msgstr "Възстановяване на отбелязването" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Обръщане на реда" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Десен &= Ляв" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Първо се отваря дясното крило" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Терминал" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption #, fuzzy #| msgid "Save Selection" msgid "Sa&ve Selection" msgstr "Съхраняване на отбелязването" #: tfrmmain.actsaveselectiontofile.caption #, fuzzy #| msgid "Save Selection To File" msgid "Save S&election to File..." msgstr "Съхраняване на отбелязването във файл" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Съхраняване на подпрозорците във файл" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Търсене" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption #, fuzzy #| msgid "Change attributes" msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Промяна на файловите свойства" #: tfrmmain.actsettaboptiondirsinnewtab.caption #, fuzzy #| msgid "Directories are opened in new &tabs" msgid "Locked with Directories Opened in New &Tabs" msgstr "Папките се отварят в нови подпрозор&ци" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Обикновен" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Заключен" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy #| msgid "Locked, but &directory changes allowed" msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Заключен, с разрешена смяна на &папката" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Отваряне" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Показване на изборници на копчетата" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Показване на дневник на реда управление" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Изборник" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Показване на скрити/ системни файлове" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Подреждане по принадлежности" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Подреждане по дата" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Подреждане по разширение" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Подреждане по име" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Подреждане по размер" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Включване/ изключване на пренебрегването" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Създаване на мека връзка..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Съгласуване на папки..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Цел &= източник" #: tfrmmain.acttestarchive.caption #, fuzzy #| msgid "Test Archive(s)" msgid "&Test Archive(s)" msgstr "Проверка на архив(и)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Миниатюри" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Изглед с миниатюри" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Прехвърляне на папката под показалеца в левия прозорец" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Прехвърляне на папката под показалеца в десния прозорец" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption #, fuzzy #| msgid "Unselect all with same extension" msgid "Unselect All with the Same Ex&tension" msgstr "Снемане на избора на всички със същото разширение" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Преглед" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Показване на списъка на посетените пътища в дейния преглед" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Към следващата точка от дневника" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Към предходната точка от дневника" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption #, fuzzy #| msgid "&Visit Double Commander Web Site" msgid "&Visit Double Commander Website" msgstr "&Посещаване на мрежовото място на Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Унищожаване" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Изход" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Папка" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Итриване" #: tfrmmain.btnf9.caption #, fuzzy #| msgid "Terminal" msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Терминал" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Отиване в домашната папка" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Отиване в основната папка" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Бързодостъпни папки" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Път" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Презапис..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Създаване на връзка..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Изчистване" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Скриване" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Преместване..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Създаване на мека взръзка..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Възможности за подпрозорците" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Показване" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Начало" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Отказ" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Заповеди" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Настройка" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Файлове" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Избор" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Мрежа" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Изглед" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Въз&можности" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Подпрозорци" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Запомняне" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Изрязване" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Изтриване" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Обработка" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Поставяне" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "Отказ" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Добре" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Помощ" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Клавишно съчетание" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "" #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Създаване на нова папка" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Напишете името на новата папка:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ширина" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "Из&триване" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "За&реждане" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Пре&именуване" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Очистване на вси&чки" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Съхраняване" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Множествено преименуване" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Дневник" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "&Обичайни изрази" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Използване на &заместване" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E] Разширение" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Брояч" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Търсене &и замяна" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Име на дневника" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Имена" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Предустановки" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Раз&ширение" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Търсене..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Промеждутък" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Файлово &име" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "За&мяна..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Начална стойност" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Ширина" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C] Брояч" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Ден" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex] Разширение" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x] Разширение" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[H] Час" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[Mi] Минута" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[Mo] Месец" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N] Име" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx] Име" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x] Име" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Време..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Разширение..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Име..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Приставка" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S] Секунда" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Секунда (2 цифри)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Година" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Година (4 цифри)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Сегашно име" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Бъдещо име" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Път" #: tfrmopenwith.caption msgid "Choose an application" msgstr "" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Прилагане" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Възможности" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Изберете някоя от подстраниците, тази не съдържа настройки." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "Прилагане" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Изтриване" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "Премахване" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Режим за проследяване на недъзи" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Включен" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Показване на изхода към конзолата" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Възможности" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Добавяне:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Разширение:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Извличане:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Списък:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "край на списъка (избираемо):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Изписване на списъка:" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Начало на списъка (избираемо):" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Архиватор:" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Описание:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Допълнителни" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Общи" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "При промяна на раз&мера, датата и принадлежностите" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следните &пътища и подпапките им:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "При съз&даване, изтриване или преименуване на файлове" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Когато приложението е на &заден план" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Без самоопресняване" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Опресняване на файловия списък" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Винаги да се показва значе в уведомителката" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Автоматично с&криване на разкачените устройства" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Смаляване в уведомителката" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Позволено е само едно пускане на DC наведнъж" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "&Черен списък на устройствата" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Показване на файловите разширения" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "под&равнени (с ТАБ)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "веднага &зад файловото име" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Подрязване на &текста до ширината на стълба" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Водоравни черти" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Отвесни черти" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Самопопълване на стълбовете" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Самооразмеряване на стълба:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "Прилагане" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "Обработка" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Дневник на реда управление" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Дневник на папката" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Дневник на търсените файловете" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "Запис на настройките" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "Дневник на търсенията/ замените" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Положение на настроечните файлове" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Запис при изход" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Папката на приложението (преносима версия)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Домашна папка на потребителя" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Всички" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Преименуване" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Съхраняване като" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Позволяване на надцветка" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Общи" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Обрамчване на показалеца" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Подцветка:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Подцветка 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Настройка на стълбовете за файлова уредба:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Цвят на показалеца:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Текст на показалеца:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Шрифт" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Размер:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Цявят на текста:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Цвят на отбелязване:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Добавяне на стълб" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Положение на крилото след сравнението" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Добавяне..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Запасяване..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Изтриване..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Помощ" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Вмъкване..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Разни..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Подреждане..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "При добавяне на папка, да се добавя и цел" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Дървото да се разгъва винаги" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Показване само на важащи променливи на средата" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "В изкачащия прозорец да се показва [и пътят]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Име, а-я" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Име, я-а" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Любими папки (пренареждат се чрез завлачване)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Други възможности" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Име" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Път:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Цел" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Добавяне на заповед" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Изрязване" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Поставяне" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Питащ прозорец при пускане" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "При завличане в &крилата:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Поставяне на предпочитания формат на върха на списъка" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Показване на &файловата уредба" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Показване на &свободното място" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Показване на &етикет" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Списък на устройствата" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&Подцветка" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&Подцветка" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Очистване" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Съхраняване" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Свосйтва на предметите" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Цвят на &шрифта" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&Подцветка" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Използване (и обработка) на &обща разцветка" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Използване на &местна разцветка" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Полу&чер" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Курсив" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Зачертан" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "&Вкл" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Под&чертан" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "&Обърнат" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "&Изкл" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Вкл" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Добавяне..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Изтриване..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Вмъкване..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Преименуване" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Подреждане..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Дървото да се разгъва винаги" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Други възможности" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Изрязване" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Поставяне" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Преименуване" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Добавяне" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Добавяне" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Добавяне" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Надолу" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Обработка" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Премахване" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Премахване" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Премахване" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Премахване" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Нагоре" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Действия" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Разширения" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Видове файлове" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Значе" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Действие:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Заповед:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Клю&чове:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Пусков път:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Обработка" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Отваряне в обработчика" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Получаване на изхода от командата" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Отваряне" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Пускане в терминал" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Преглед" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Отваряне в прегледа" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Изтриване в кошчето (Shift обръща настройката)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Изоставяне на стяга „само за четене“" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "Опработка на бележките заедно с файловете/папките" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Избор само на файловото име при преименуване (без разширението)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Поазване на крило за избор на подпрозорци в прозореца за презапис/местене" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Грешките при работа с файлове се прескачат и се записват дневниковия прозорец" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Файлово търсене" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "Брой на повторенията:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Разпределено в паметта търсене на текст във файловете" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "Поточно търсене на текст във файловете" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Позволяване на надцветка" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Използване на о&граждащ показалец" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Използване на &преливащ указател" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "Използване на обърнато избиране" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Обрамчване на показалеца" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Указател за свободното място" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "Подцветка:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Подцветка 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Цвят на показалеца:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Текст на показалеца:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Яркост на бездейното крило" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "&Подцветка на указателя" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "&Основен цвят на указателя" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Цвят на от&белязване:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Цвят на &текста:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "Файловият списък да не се зарежда до задействане на попрозореца" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Показване на средни скоби около папките" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Преименуване на място, при двойно цъкане върху файл" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Зареждане на файловите списъци в отделна нишка" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Зареждане на значетата след файловия списък" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Показване на скрити/ системни файлове" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "При избор на файлове с <Интервал> се преминава на следващия файл (като с <Insert>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Изписване" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Подреждане" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Отчитане на &гЛАВносТтА" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Неправилен начин на изписване" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Изписване на датата и времето:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Изписване на файловите &размери" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Вмъкване на нов файл" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Подреждане на &папките:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "Начин на под&реждане" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Преместване на об&новените файлове" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "Прилагане" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Изтриване" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Оцветяване на файловете според вида им" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Принадлежности на раздела:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Цвят на раздела:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Разширения на раздела:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "Име на раздела:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Шрифт на обработчика" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Шрифт на дневника" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "Основен шрифт" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Шрифт на прегледа" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Добавяне на клавишно &съчетание" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Из&триване на клавишно съчетание" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "Про&мяна на клавишно съчетание" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "Пресяване" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Раздели:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Заповеди:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Заповед" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Клавишни съчетания" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Описание" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption #, fuzzy msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Клавишно съчетание" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "За следните &пътища и подпапките им:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Показване на наслоени значета, например за връзки" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Забраняване на особени значета" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Значета в изборниците" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Раз&мер на значетата" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Всички" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Всички свързани + &EXE/LNK (бавно)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&Без значета" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Само обичайните значета" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Добавяне на избраните имена" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Добавяне на избраните имена с пълните пътища" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Пренебрегване (скриване) на следните файлове и папки:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Съхраняване в:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Лявата и дясната стрелка сменят папките (като в Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Набиране" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+букви" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+букви" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Букви" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Плоски бутони" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Плосък облик" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Плоски бутони" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Показване на указател за свободно място в етикета на устройството" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Прозорец на дневника" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Показване на крилото за действия на заден план" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Показване на общия ход в лентата на изборника" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Показване на &ред за управление" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Показване на &текущата папка" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Показване на &бутони за устройствата" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Показване на &служебни бутони" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Показване на лента с &бутони" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Показване на лента на &състоянието" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Заглавия на &подпрозорците" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Показване на &подстраници за папките" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Показване на терминален прозорец" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Показване на две ленти с устройствата (неизменна ширина, над файловите прозорци)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Екранна подредба" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Сгъване/ разгъване" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Презапис/Преместване/Създаване на връзка/мека връзка" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "Изтриване" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Създаване/ изтриване на папки" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Записване на &грешките" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Водене на дневник:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Записване на осведомяващите съобщения" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Записване на &успешните действия" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Приставки за файлови уредби" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Дневник на действията с файлове" #: tfrmoptionslog.gblogfileop.caption #, fuzzy #| msgid "Log operations:" msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Запис на действията:" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Ход на действието:" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Изтриване на миниатюрите за изчезнали файлове" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Преглед на дневника на файловото съдържание" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "При смяна на устройството, да се отива в &основната папка" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Показване на предупреждения (само с копче „Добре“)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "&Съхраняване на миниатюрите" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Миниатюри" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "точки" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Избиране с мишката" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Превъртане" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Избиране" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Режим" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Ред по ред" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Ред по ред с местене на &показалеца" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Страница по страница" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Настройка" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Разрешаване" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Премахване" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Настройка" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Приставките за търсене позволяват изполването на заместващ алгоритъм за търсене или на въшни пособия от рода на „locate“ и т.н." #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Уплътняващите приставки се използват за работа със сбивки (архиви)." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Приставките за съдържание позволяват показването на допълнителни подробности за файловете, от рода на mp3 означители или свосйтв ана изображения във файловите списъци. Могат да се използват и при търсене и в пособието за множествено преименуване." #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Приставките за файлови уредби позволяват достъп до дискове, недостъпни от работната уредба или до външи устройства като Palm и PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Приставките за преглед позволяват показването на файлови формати от рода на изображения, таблици, бази от данни и т.н. в прегеда (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Деен" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption #, fuzzy msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Приставка" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Записано на" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Приставки за търсене (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Приставки за сбиване (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Приставки за съдържание (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Приставки за файлови уредби (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Приставки за преглед (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Начало (името трябва да започва с първия набран знак)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "&Край (последният знак преди точката . трябва да съвпада)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Възможности" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Точно съвпадение на имената:" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Задействане на целевото &крило при цъкане на някой от подпрозорците му" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Показване на &заглавки на подпрозорците, дори когато има само един" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Искане на потвърждение при затваряне на всички подпрозорци" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Ширина на заглавията на подстранците:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Означаване на заключените подпрозорци със звездичка *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Многоредово разположение на &подстраниците" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up отваря нов подпрозорец на преден план" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Отваряне на &новите подпрозорци до текущия" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Заглавки на подстраниците на папките" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "знака" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Не" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Удвояване" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "Из&триване" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Обработка" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Добавяне на бутон" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Премахване на клавишно съ&четание" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Плоски бутони" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Докладване на грешки в заповедите" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Облик" #: tfrmoptionstoolbar.lblbarsize.caption msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "&Размер на лентата:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "&Заповед:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Клю&чове:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Помощ" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Клавишно съчетание:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "&Файл със значета:" #: tfrmoptionstoolbar.lbliconsize.caption msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Размер на &значетата:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Заповед" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Ключове" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Пусков път:" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Подсказка:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "за външна заповед" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "за вътрешна заповед" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "за разделител" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "за под-лента" #: tfrmoptionstoolbar.mibackup.caption #, fuzzy msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Запасяване..." #: tfrmoptionstoolbar.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Изнасяне..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Текущата лента..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "във файла .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "във файла .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "във „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "във „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "във файл за лента с пособия (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "във файла .BAR за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "във файла .BAR за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "във „wincmd.ini‟ за TC (запазване на съществуващия)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "във „wincmd.ini‟ за TC (изтриване на съществуващия)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Внасяне..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Вид на бутона" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "Прозорецът на терминал остава отворен след изпълнение на приложението" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "Изпълняване в терминал" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "Позлване на външно приложение" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Допълнителни ключове" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Път към приложението" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Добавяне" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Прилагане" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Изтриване" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Шаблон..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Показване на подсказки" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Нагласени полета според вида на файла" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Подсказки според раз&дела" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Разширения на раздела:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Име на раздела:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Книговиден изглед на прегледа" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Пример" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "&Подцветка на книговидния преглед" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Цвят на &шрифта на книговидния преглед" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "Брой на &стълбовете в книговидния преглед" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Настройка" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Сбиване на файлове" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Създаване на разделни сбивки, по &една на файл/папка" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Създаване на саморазгъващ се файл" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Криптиране" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Пре&местване в сбивка" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Многотомова сбивка" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "&Първо да се поставя в TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Сбиване и на имената на пътищата (само вложено)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Сбиване на фал(овете) във файл:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Сбивачка" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Затваряне" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Разгъване на вси&чки и изпълняване" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Разгъване и изпълняване" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Свойства на сбития файл" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Принадлежности:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Степен на уплътняване:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Дата:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Способ:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Първоначален размер:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Файл:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Размер след сбиване:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Сбивачка:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Време:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Пресяване" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text #, fuzzy msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Приставка" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Отказ" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Затваряне" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Помо&щ" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Добре" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmsetfileproperties.caption #, fuzzy #| msgid "Change file properties" msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Промяна на файловите свойства" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Лешкав" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Сбивка" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Саздаден:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Скрит" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Ползван:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Променен:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Само за четен" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Вложено" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Системен" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Принадлежности" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Разряда:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Група" #: tfrmsetfileproperties.lblattrinfo.caption #, fuzzy #| msgid "(gray = unchanged, checked=set attribute)" msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сиво = непроменено, отметнато = включено)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Друго:" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Собственик" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Словесно представяне:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Изпълнение" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy #| msgid "(gray = unchanged, checked=set attribute)" msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(сиво = непроменено, отметнато = включено)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Осмично:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Запис" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Четене" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Изход" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "Добре" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Разделител" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Файлово име" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Файлов размер" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Целева папка" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Файлов източник" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption #, fuzzy #| msgid "Gigabytes" msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "гигабайта" #: tfrmsplitter.rbtnkilob.caption #, fuzzy #| msgid "Kilobytes" msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "килобайта" #: tfrmsplitter.rbtnmegab.caption #, fuzzy #| msgid "Megabytes" msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "мегабайта" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Постройка" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Преработка" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Издание" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Добре" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Създаване на мека връзка" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Съществуваща цел, към която да сочи връзката" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Име на връзката" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Затваряне" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Дата" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Размер" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Име" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Добавяне на ново" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Отказ" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Промяна" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Подразбирано" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "Добре" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Премахване" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Настройка на приставката" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "Разпознаване на сбивките според съдържанието" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Възможно е изтриването на файлове" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Нарочно входно устройство:" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Показване като обичайни файлове (скриване на значето на сбивачката)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Поддръжка на сбиване в паметта" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Възможна промяната на съществуващи сбивки" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "Архивът може да съдържа много файлове" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Възможно е създаването на нови файлове" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Поддръжка на питащ прозорец с възможности" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Позволяване на търсене на текст в сбивки" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Описание:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "Разпознавателен низ:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Разширение:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Знамена:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Име" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Приставка:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Приставка:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "За прегледа..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "На&пред" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "На&зад" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "" #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "" #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Разпъване" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Запомняне" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Запомняне" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Орязване" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Изтриване" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Изтриване" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Цял екран" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Изтъкване" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Преместване" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Преместване" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Отмяна" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Преглед" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Изтъкване" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Преглед" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "За" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "&Двоично изобразяване" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Запомняне в кошницата" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Обработка" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Знаков набор" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "Из&ход" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Файл" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Цял екран" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Графики" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "&Шестнадесетично изобразяване" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "Из&ображение" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Приставки" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Преглед" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Разпечатване..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Завъртане" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Съхраняване" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Съхраняване като..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Снимка на екрана" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Търсене" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Търсене напред" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Търсене назад" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Разпъване" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "&Словесно изобразяване" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Преглед" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Иобразяване като &редоделен текст" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Увеличаване" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Намаляване" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Запомняне в кошницата" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Избор на всички" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Начало" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Спиране" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Действия с файлове" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Винаги над другите" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Можете да местите действията между опашките със завлачване" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Отказ" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Отказ" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Нова опашка" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Опашка" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Извън опашката" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Опашка 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Опашка 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Опашка 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Опашка 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Опашка 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Показване в отделен прозорец" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Задържане на вси&чки" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Когато файлът съществува" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Когато файлът съществува" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Когато файлът съществува" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Принад" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Дата" #: ulng.rscolext msgid "Ext" msgstr "Разш" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Име" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Размер" #: ulng.rsconfcolalign msgid "Align" msgstr "Подравняване" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Надпис" #: ulng.rsconfcolconfig msgid "Config" msgstr "Настр" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Изтриване" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Съдържание на полето" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Преместване" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ширина" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Нагласяване на стълбове:" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Всички" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Довършване" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Отказ" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Продължаване" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Из&ход от приложението" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Не" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Няма" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Добре" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Други" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Замяна" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Замяна &Всички" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Замяна на всички по-&големи" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Замяна на всички по-&стари" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Замяна на всички по-&малки" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Премахване" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Под&новяване" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Нов &опит" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Пропускане" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "П&ропускане на всички" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Да" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Изчисляване на файлове и папки" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Изчисляване на проверочен сбор..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Сверяване на проверочен сбор..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Презапис на на файл(ове)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Изтриване на файл(ове)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Преместване на на файл(ове)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Начало" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Опашка" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Скорост %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, remaining time %s" msgid "Speed %s/s, time remaining %s" msgstr "Скорост %s/s, оставащо време %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Раздробяване на файл" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Унищожаване на файл(ове)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<няма етикет>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<няма носител>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Вътрешният преглед на Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Отиване на ред:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Отиване на ред" #: ulng.rseditnewfile msgid "new.txt" msgstr "нов.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Файлово име:" #: ulng.rseditnewopen msgid "Open file" msgstr "Отваряне на файл" #: ulng.rseditsearchback msgid "&Backward" msgstr "На&зад" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Търсене" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "На&пред" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Замяна" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Питане;Замяна;Презапис в;Пропускане" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Питане;Замяна;Презапис на по-старите;Пропускане" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Питане;Да не се задава повече;Пренебрегване на грешките" #: ulng.rsfilterstatus msgid "FILTER" msgstr "ПРЕСЯВАНЕ" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s равнище/а" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "всички (неограничена дълбочина)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "само текущата папка" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Не съществува папка %s!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Намерени: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Обходени: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Претърсване" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Търсене на файлове" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Начало" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Свободни %s от %s байта" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s байта свободни" #: ulng.rsfuncatime msgid "Access date/time" msgstr "" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Принадлежности" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "" #: ulng.rsfuncext msgid "Extension" msgstr "" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Група" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Име" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Собственик" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Път" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Размер" #: ulng.rsfunctype msgid "Type" msgstr "" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Грешка при създаване на твърда връзка." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Прозорец за презапис и местене" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Сравнител" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Прозорец за промяна на забележки" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Обработчик" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Търсене на файлове" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Основен" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Преглед" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Сглобяването приключи" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Признак за смяна на избора" #: ulng.rsmarkplus msgid "Select mask" msgstr "Избор на маска" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Входна маска:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Настройка на нагласените стълбове" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn #, fuzzy #| msgid "Configure this c13:11 ч. 30.4.2015 г.umns view" msgid "Configure this custom columns view" msgstr "Настройка на нагласените стълбове на изгледа" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Действия" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Обработка" #: ulng.rsmnueject msgid "Eject" msgstr "Изваждане" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Прикачане" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "" #: ulng.rsmnunomedia msgid "No media available" msgstr "" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Отваряне" #: ulng.rsmnuopenwith msgid "Open with" msgstr "" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "" #: ulng.rsmnuumount #, fuzzy #| msgid "Umount" msgid "Unmount" msgstr "Разкачане" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Преглед" #: ulng.rsmsgaccount msgid "Account:" msgstr "" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Смяната на папката на [%s] бе неуспешно!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Премахване на бездейните подпрозорци?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Презапис на %d избраните папки/файлове?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Да бъде ли презаписан избраният файл „%s“?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Изтриване на %d избраните папки/файлове?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Изтриване на избрания \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Дискът не е на разположение" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Въведете разширение:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Въведете име:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Грешка CRC в данните на сбивката" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Данните са лоши" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "" #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Папка %s съществува!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Действието е прекъснато от потребителя" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Грешка при затваряне на файла" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Създаването на файла е невъзможно" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Файловете в сбивката свършиха" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Отварянето на съществуващия файл е невъзможно" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Грешка при четене оф файла" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Грешка при запис във файла" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Създаването на папка %s е невъзможно!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Не са намерени файлове" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Недостатъчно памет" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Действието не се поддържа!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Буферът е много малък" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Твърде много файлове за сбиване" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Форматът на сбивката е непознат" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Име" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Фаълът %s е променен. Да бъде ли съхранен?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Замяна на:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Съществува файл %s. Да бъде ли заменен?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "С файла" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "" #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Вече съществува %s, замяна?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Следване на мека връзка \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Добавяне на %dизбрани папки" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Добавяне на текущата папка: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Настройка на любимите папки" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Убеден ли сте, че искате да изтриете всички попълнения от списъка на любимите папки? Възстановяването на списъка е невъзможно! " #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Ще се изпълни следната заповед" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Грешка при запасяването..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Грешка при изнасянето..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Изнасяне на всички" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Изнасяне на списъка с любимите папки- изберете кои да се изнесат" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Изнасяне на избраните" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Внасяне на всички" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Внасяне на списъка с любимите папки- изберете кои да се внесат" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Внасяне на избраните" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Път" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Име" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Това не е поддържана приставка!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Неправилно цитиране" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Неправилно избиране" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Зареждане на списък с файлове..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Презапис на файл %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Изтриване на файл %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Грешка:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Извличане на файл %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Сведения:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Създаване на връзка %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Създаване на папка %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Преместване на файл %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Сбиване във файл %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Изтриване на папка %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Готово:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Създаване на мека връзка %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Нов файл" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Ще бъде разгънат следвашия том" #: ulng.rsmsgnofiles msgid "No files" msgstr "" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Недостатъчно място на целевата папка. Да продължа ли?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Недостатъчно място на целевата папка. Да опитам ли пак?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Невъзможно е изтриването на %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Добавяне на %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Настройка" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Изтриване на %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Преименуване/местене на %d избраните папки/файлове?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Преименуване/местене на избрания \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Презапуснете Double Commander, за да влязат промените в сила" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Избрани: %s от %s, файлове: %d of %d, папки: %d of %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Посочете местоположението на следващия том" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Слагане име на тома" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Особени папки" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Избрани са прекалено много файлове" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Етикет на тома:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Без промяна; ВИСША; низша; Първият знак главен; Първият Знак На Всяка Дума Главен;" #: ulng.rsoperaborted msgid "Aborted" msgstr "" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Изчисляване" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Изчисляване „%s‟" #: ulng.rsopercombining msgid "Joining" msgstr "Сглобяване" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Презаписване" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Презапис от „%s‟ в „%s‟" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Презапис на „%s‟ в „%s‟" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Създаване на папка" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Създаване на папка „%s‟" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Изтриване" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Изтриване в „%s‟" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Изтриване на „%s‟" #: ulng.rsoperexecuting msgid "Executing" msgstr "Изпълняване" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Изпълняване на „%s‟" #: ulng.rsoperextracting msgid "Extracting" msgstr "Извличане" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Извличане от „%s‟ в „%s‟" #: ulng.rsoperfinished msgid "Finished" msgstr "Приключено" #: ulng.rsoperlisting msgid "Listing" msgstr "" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "" #: ulng.rsopermoving msgid "Moving" msgstr "Преместване" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Преместване от „%s‟ в „%s‟" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Преместване на „%s‟ в „%s‟" #: ulng.rsopernotstarted msgid "Not started" msgstr "Незапочнато" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Задържано" #: ulng.rsoperpausing msgid "Pausing" msgstr "Задържане" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "На опашка" #: ulng.rsoperrunning msgid "Running" msgstr "Работещо" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Задаване на свойство" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Задаване на свойство в „%s‟" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Задаване на свойство на „%s‟" #: ulng.rsopersplitting msgid "Splitting" msgstr "Нацепване" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Нацепване на „%s‟ в „%s‟" #: ulng.rsoperstarting msgid "Starting" msgstr "Започване" #: ulng.rsoperstopped msgid "Stopped" msgstr "Спряно" #: ulng.rsoperstopping msgid "Stopping" msgstr "Спиране" #: ulng.rsopertesting msgid "Testing" msgstr "Проверка" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Проверка в „%s‟" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Проверка на „%s‟" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Изчакване на достъп до изходния файл" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Чакане на отговор от потребителя" #: ulng.rsoperwiping msgid "Wiping" msgstr "Унищожаване" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Унищожаване в „%s‟" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Унищожаване на „%s‟" #: ulng.rsoperworking msgid "Working" msgstr "Работи" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Добавяне в началото;Добавяне в края;Умно добавяне" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Изтриване:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Извличане без пътс" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Създаване на саморазгъващ се архив:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Проверка:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Име на вида архив:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Обвързване на приставка \"%s\" с:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Първи;Последен" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Забраняване" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Разрешаване" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Въведете разширение" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "" #: ulng.rsoptexamplemark msgid "Mark" msgstr "" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "" #: ulng.rsoptexampletext msgid "Text" msgstr "" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Промяна на съчетанието" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Заповед" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Описание" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Клавишно съчетание" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Клавишни съчетания" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<няма>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Ключове" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "" #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "" #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Архиватори" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Самоопресняване" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Поведения" #: ulng.rsoptionseditorbriefview #, fuzzy msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Съкратен" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Цветове" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Стълбове" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Настройка" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Нагласени стълбове" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Бързодостъпни папки" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Завлачване" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Копче със списък на устройствата" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Файлови обвързвания" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Действия с файлове" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Файлови крила" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Файлов изглед" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Видове файлове" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Папкови подпрозорци" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Шрифтове" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Оцветяване" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Клавишни съчетания" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Значета" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Пренебрегвания" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Клавиши" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Език" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Подредба" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Дневник" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Разни" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Мишка" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Приставки" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Бързо търсене/пресяване" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Лента с пособия" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Пособия" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Подсказки" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Няма;Ред за управление;Бързо търсене;Бързо пресяване" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Ляво цъкало;Дясно цъкало;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Приставката %s вече свързана със следното разширение:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Деен" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Файлово име" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Име" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Записано на" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "" #: ulng.rsoptsearchopt msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Азбучно, с отчитане на ударенията;Естествено: азбучно и числено" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Отгоре;Отдолу" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "Раз&делител;&Вътрешна заповед;Въ&ншна заповед;&Изборник" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Файлове: %d, папки: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Файл" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Папка" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Наименована тръба" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Не" #: ulng.rspropssocket msgid "Socket" msgstr "Гнездо" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Нарочно блоково устройство" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Нарочно знаково устройство" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Мека връзка" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Неизвестен вид" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Да (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Намерени" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "" #: ulng.rsselectdir msgid "Select a directory" msgstr "Избор на папка" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "" #: ulng.rssimplewordall #, fuzzy msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Всички" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Заповед" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Преглед" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "байта" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "гигабайта" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "килобайта" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "мегабайта" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "терабайта" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Файлове: %d, папки: %d, размер: %s (%s байта)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Създаването на целевата папка е невъзможно!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Неправилно изписване на файловия размер!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Неуспешно раздробяване на файла!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Изберете папка:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Грешка при създаване на мека връзка." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Ден/ дни" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "час(а)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "минута/и" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "месец(а)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "секунда/и" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "седмица/и" #: ulng.rstimeunityear msgid "Year(s)" msgstr "година/и" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Сравнител" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Обработчик" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Терминал" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Преглед" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Мрежа" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Вътрешен преглед на Double Commander" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Знаков набор" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s не е открит!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ��������������������������������������������������doublecmd-0.7.1/language/doublecmd.sl.po������������������������������������������������������������0000644�0001750�0000144�00001246565�12673236522�017246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Slovenian translations for double-commander. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. # This file is distributed under the same license as the double-commander package. # # Matej Urbančič <mateju@svn.gnome.org>, 2011-2015. # msgid "" msgstr "" "Project-Id-Version: double-commander master\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2016-03-15 21:41+0100\n" "Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n" "Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" "X-Poedit-SourceCharset: utf-8\n" "X-Generator: Poedit 1.8.4\n" "X-Native-Language: Slovenščina\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Poteka primerjava ... %d%% (S tipko ESC se opravilo prekliče)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "Desno: izbriši %d datotek" #: fsyncdirsdlg.rsfilesfound msgid "" "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: " "%d)" msgstr "" "Število najdenih datotek: %d (Enakih: %d, Različnih: %d, Različnih na levi: " "%d, Različnih na desni: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Z leve na desno: kopiraj %d datotek s skupno velikostjo %d bajtov" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Z desne na levo: kopiraj %d datotek s skupno velikostjo %d bajtov" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Vse" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Nastavitev pogleda stolpcev po meri" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Ozadje:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Okvir kazalke" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Dovoli nadbarvo" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Uporabi barvo in pisavo po meri" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Barva besedila:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Pisava:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Ozadje 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Nastavitev pogleda:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Barva kazalke:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Besedilo kazalke:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Barva oznake:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Ime:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Dodaj stolpec" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Prilagajanje stolpcev" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Predogled" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Izbor predloge ..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Preveri &zasedenost prostora" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "&Kopiraj atribute" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiraj &lastništvo" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "Kopiraj &dovoljenja" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopiraj &datum in čas" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Popravi &povezave" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Odstrani zastavico le za &branje" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Ne &upoštevaj praznih map" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Sledi &povezavam" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Zadrži prostor" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Kaj storiti, ko ni mogoče nastaviti časa datoteke, atributov ..." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Uporabi predlogo datotek" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Če mapa že obstaja" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Če datoteka že obstaj" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Ko &lastnosti ni mogoče nastaviti" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<brez predloge>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiraj v odložišče" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Izgradi" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Domača stran:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Predelava" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Različica" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Ponastavi" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Izbor atributov" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arhiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "&Stisnjeno" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mapa" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Šifrirano" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Skrito" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Le za &branje" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "&Redko" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Simbolna povezava" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Začasno" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributi NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Splošni atributi" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biti:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvajanje" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Branje" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Kot &besedilo:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmchecksumcalc.caption msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Izračunaj nadzorne vsote" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Odpri datoteko nadzorne vsote po koncu izračunavanja" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "&Ustvari ločeno datoteko nadzorne vsote za vsako datoteko" #: tfrmchecksumcalc.lblsaveto.caption msgid "&Save checksum file(s) to:" msgstr "Shrani datoteke z nadzornimi &vsotami v:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmchecksumverify.caption msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Preveri nadzo&rno vsoto ..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "&Povezava" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Upravljalnik povezav" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Povezava s strežnikom:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Dodaj v vrsto" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Možnosti" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Shrani trenutne možnosti kot privzete" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopiraj datoteke" #: tfrmcopydlg.mnunewqueue.caption msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova čakalna vrsta" #: tfrmcopydlg.mnuqueue1.caption msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Vrsta 1" #: tfrmcopydlg.mnuqueue2.caption msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Vrsta 2" #: tfrmcopydlg.mnuqueue3.caption msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Vrsta 3" #: tfrmcopydlg.mnuqueue4.caption msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Vrsta 4" #: tfrmcopydlg.mnuqueue5.caption msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Vrsta 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Shrani opis" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Opomba datoteke ali mape" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "&Uredi opombo za:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Kodiranje" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Samodejna primerjava" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Dvojiški način" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Prekliči" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopiraj blok na desno" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopiraj blok na desno" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopiraj blok na levo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopiraj blok na levo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovno uveljavi" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Izberi &vse" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Razveljavi" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prva razlika" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Prezri velikost črk" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Prezri prazne" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Nadaljuj drsenje" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Zadnja razlika" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Zadnja razlika" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Vrstične razlike" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Naslednja razlika" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Naslednja razlika" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Odpri levo ..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Odpri desno ..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Obarvaj ozadje" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Predhodna razlika" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Predhodna razlika" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Ponovno naloži" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ponovno naloži" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Shrani" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Shrani" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Shrani kot ..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Shrani kot ..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Shrani levo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Shrani levo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Shrani levo kot ..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Shrani levo kot ..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Shrani desno" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Shrani desno" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Shrani desno kot ..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Shrani desno kot ..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjava" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Primerjava" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Nabor znakov" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Nabor znakov" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Primerjava datotek" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Levo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Desno" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Dejanja" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&&Uredi" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Možnosti" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Dodaj novo tipkovno bližnjico v zaporedje" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Odstrani zadnjo tipkovno bližnjico iz zaporedja" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Le za navedene tipke" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (vsak ločeno v svoji vrstici):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Tipkovne bližnjice:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "O programu" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Nastavitve" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Nastavitve" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Kopiraj" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Izreži" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmeditor.acteditfind.caption msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Najdi" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Najdi" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Najdi naslednje" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Najdi naslednje" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Skoči v vrstico ..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Prilepi" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ponovi" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ponovno uveljavi" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Zamenjaj" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Zamenjaj" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Izberi &vse" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Izberi vse" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Razveljavi" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Razveljavi" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Zapri" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Končaj" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nov stolpec" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Odpri" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Odpri" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Shrani" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Shrani" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Shrani &kot ..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Shrani kot" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Shra&ni vse" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Shrani vse" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Urejevalnik" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmeditor.menuitem1.caption msgctxt "TFRMEDITOR.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Odpri kot" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Shrani kot …" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Poudarjanje skladnje" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Konec vrstice" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Upoštevanje &velikosti črk" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Išči od &kazalke naprej" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Logični izraz" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Le izbrano &besedilo" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Le &cele besede" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Možnost" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Zamenjaj &z:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Poišči:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Smer" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Odpakiraj datoteke" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Odpakiraj poti datotek, če to se shranjene v arhivu" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Odpakiraj vsak arhiv v &ločeno podrejeno mapo (z imenom vsakega arhiva)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Prepiši obstoječe datoteke" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "V &mapo:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Odpakiraj datoteke z masko:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Geslo šifriranih datotek:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Dodaj" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Dodaj" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Dol" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "O&dstrani" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "&Odstrani" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "&Preimenuj" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Gor" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Programske vezi" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Dejanja" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Razširitve" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Vrste datotek" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Dejanje:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Ukaz:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Odpri v urejevalniku" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Pot datoteke" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Polna pot" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Pridobi odvod ukaza" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Zaženi v terminalu" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Odpri v VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Odpri v pregledovalniku" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Počakaj ..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Ime datoteke:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Kliknite na gumb za zapiranje, ko se začasno datoteko lahko izbriše!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Na &okno" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "Poglej &vse" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Trenutno opravilo:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Iz:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "V:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Nastavi lastnosti" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Nastavi &vsem" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Pres&koči datoteko" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Lastnosti" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biti:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Ostalo" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Črkovno:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Vsebuje:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvajanje" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Pot:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Skupina" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Zadnji dostop:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Zadnja sprememba:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Zadnja sprememba stanja:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmiško:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Lastnik" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Branje" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Simbolna povezava na:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Vrsta:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Pisanje" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributi" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Lastnosti" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "dejanje Prekliči" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "dejanje Zapri" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "dejanje Uredi" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "dejanje Zapolni seznam" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "dejanje Pojdi na datoteko" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "dejanje Zadnje iskanje" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "dejanje Novo iskanje" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "dejanje Napredno" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "dejanje Vstavki" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "dejanje Rezultati" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "dejanje Začni" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "dejanje Pogled" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Dodaj" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Skoči na datoteko" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Zadnje iskanje" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Novo iskanje" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Shrani" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Naloži" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Shrani" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sh&rani z možnostjo \"Začni v mapi\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "" "If saved then \"Start in directory\" will be restored when loading template. " "Use it if you want to fix searching to a certain directory" msgstr "" "V kolikor je možnost \"Začni v mapi\" shranjena, bo mesto obnovljeno med " "nalaganjem predloge. Možnost je uporabna pri iskanju v določeni mapi." #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Začni" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Prekliči" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Uporabi predlogo" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Pogled" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Izpiši v &seznam" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Najdi datoteke" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Upoštevaj &velikost črk" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Od datuma:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "&Do datuma:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Od velikosti:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "&Do velikosti:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "Omogoči iskanje v &arhivih" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Najdi &besedilo" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Sledi &simbolnim povezavam" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Najdi datoteke, ki &ne vsebujejo besedila" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ni &starejše kot:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Poišči &del imena datoteke" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Logični izraz" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "&Zamenjaj besedilo z" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Izbrane &datoteke in mape" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Logični &izraz" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Od časa:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "&do časa:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Uporabi vstavek &iskanja:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "" "Enter directories names that should be excluded from search separated with \";\"" msgstr "" "Vpis imen map, ki naj ne bodo upoštevana v iskanju. Imena morajo biti ločena s " "podpičjem \";\"." #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "" "Vpis imen datotek, ki naj ne bodo upoštevana v iskanju. Imena morajo biti " "ločena s podpičjem \";\"." #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Vpis imen datotek, ločenih s podpičjem \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Mape" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Datoteke" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Najdi podatke" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "&Atributi" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "&Kodiranje:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Ne upoštevaj &podmap:" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Ne upoštevaj &datotek" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Poišči datoteke z &masko:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Začni v &mapi" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Poišči tudi po &podrejenih mapah:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Shranjena iskanja:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "Odpri v novem zavihku" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Odstrani s seznama" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Pokaži vse najdene predmete" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "Pokaži v urejevalniku" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Pokaži v pregledovalniku" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Napredno" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Naloži/Shrani" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Vstavki" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Rezultati" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Običajno" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Najdi" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Najdi" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "&Razlikovanje velikosti črk" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Ustvari trdo povezavo" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Cilj, do katerega vodi povezava:" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &povezave:" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Uvozi vse!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Uvozi izbrano" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Izberite vnose, ki jih želite uvoziti" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "S klikom na podrejeni meni bo izbran celoten meni" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" "S klikom ob sočasno pritisnjeti tipki CTRL je mogoče izbrati več poljubnih " "predmetov" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Povezovalnik" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Shrani v ..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Predmet" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Ime datoteke" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Dol" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Navzdol" #: tfrmlinker.spbtnrem.caption msgctxt "TFRMLINKER.SPBTNREM.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmlinker.spbtnrem.hint msgctxt "TFRMLINKER.SPBTNREM.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Gor" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Navzgor" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&O programu" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Doda ime datoteke v ukazno vrstico" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Doda pot in ime datoteke v ukazno vrstico" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopira pot v ukazno vrstico" #: tfrmmain.actbriefview.caption msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Datotečni pogled" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Datotečni pogled" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Preračunaj &zasedenost prostora" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Zamenjaj mapo" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Pojdi v osebno mapo" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Zamenjaj mapo v nadrejeno" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Zamenjaj mapo v korensko" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Izračunaj &nadzorno vsoto ..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Preveri nadzo&rne vsote ..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Počisti dnevniško datoteko" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Počisti dnevniško okno" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Zapri &vse zavihke" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "Zapri podvojene zavihke" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Zapri zavihek" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Naslednji ukaz" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Izberi naslednji ukaz v zgodovini izvedenih ukazov." #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Predhodni ukaz" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Izberi predhodni ukaz v zgodovini izvedenih ukazov." #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Podrobni pogled" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Stolpčni pogled" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Primerjaj po &vsebini" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Primerjava map" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Primerjava map" #: tfrmmain.actconfigdirhotlist.caption msgctxt "TFRMMAIN.ACTCONFIGDIRHOTLIST.CAPTION" msgid "Configuration of Directory Hotlist" msgstr "Nastavitev seznama &hitrih map" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "Nastavitev priljubljenih zavihkov" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "Nastavitev zavihkov map" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "Orodna vrstica ..." #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Pokaži vsebinski meni" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "Kopiraj vse zavihke na nasprotno okno" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiraj vse prikazane &stolpce" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Kopiraj imena datotek s polno &potjo" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Kopiraj i&mena datotek v odložišče" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopiraj datoteke brez zahteve po potrditvi" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "Kopiraj polno pot izbranih datotek brez ločilnika konca mape" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "Kopiraj imena datotek s polno &potjo" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopiraj v isto okno" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopiraj" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Pokaži &zasedenost prostora" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "I&zreži" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "Pokaži parametre ukaza" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Zgodovina mape" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Seznam &hitrih map" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "Izbor kateregakoli ukaza za izvajanje" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Uredi" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Uredi &opombe datotek ..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Uredi novo datoteko" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Uredi polje poti nad seznamom datotek" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Zamenjaj &okni" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "Odpa&kiraj datoteke ..." #: tfrmmain.actfileassoc.caption msgid "Configuration of File &Associations" msgstr "Nastavitev datotečnih &vezi" #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Zdr&uži razdeljeno datoteko ..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Pokaži &lastnosti datoteke" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Raz&deli datoteko ..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Ploski pogled" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Postavi ukazno vrstico v žarišče" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Postavi kazalko na prvo datoteko seznama" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Postavi kazalko na zadnjo datoteko seznama" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Ustvari &trdo povezavo ..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Vsebina" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Vodo&ravna postavitev oken" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tipkovnica" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "Datotečni pogled v levem oknu" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "Stolpčni pogled v levem oknu" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Levo &= Desno" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "&Ploski pogled v levem oknu" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Odpri seznam levega pogona" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "O&brnjen vrstni red v levem oknu" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "Razvrsti levo okno po &atributih" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "Razvrsti levo okno po &datumu" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "Razvrsti levo okno po &priponi" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "Razvrsti levo okno po &imenu" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "Razvrsti levo okno po &velikosti" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "Pogled sličic v levem oknu" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "Naloži zavihke iz seznama priljubljenih" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Naloži izbor iz o&dložišča" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Naloži izbor iz datoteke ..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Naloži seznam zavihkov iz datoteke" #: tfrmmain.actmakedir.caption msgid "Create &Directory" msgstr "Ustvari &mapo" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Izberi vse datoteke z &enako pripono" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "Obrni iz&bor" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Izberi &vse" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Počisti i&zbor po meri ..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Izberi po meri ..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Počisti &izbor" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Skrči okno" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Napredno &preimenovanje ..." #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Omrežna &povezava ..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Prekini omrežno povezavo" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "&Hitra povezava z omrežjem ..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "Nov &zavihek" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "Naloži naslednji priljubljen zavihek na seznamu" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Preklopi na &naslednji zavihek" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Poskusi odpreti arhiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Odpri datoteko orodne vrstice" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "O&dpri mapo v novem zavihku" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Odpri seznam &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "Pre&gledovalnik opravil" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Možnosti ..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "Zapakira&j datoteke ..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Določi položaj razdelilnika" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Prilepi" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "Naloži predhodni priljubljen zavihek na seznamu" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Preklopi na &predhodni zavihek" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hitri filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hitro iskanje" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Okno &hitrega pogleda" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Osveži" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "Ponovno naloži zadnji naložen priljubljen zavihek" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Premakni" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Premakni/Preimenuj datoteke brez zahteve po potrditvi" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Pr&eimenuj zavihek" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "Ponovno shrani zadnji naložen priljubljen zavihek" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "Pov&rni izbor" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&brnjen vrstni red" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "Datotečni pogled v desnem oknu" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "Stolpčni pogled v desnem oknu" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Desno &= Levo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "&Ploski pogled v desnem oknu" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Odpri seznam desnega pogona" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "O&brnjen vrstni red v desnem oknu" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "Razvrsti desno okno po &atributih" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "Razvrsti desno okno po &datumu" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "Razvrsti desno okno po &priponi" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "Razvrsti desno okno po &imenu" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "Razvrsti desno okno po &velikosti" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "Pogled sličic v desnem oknu" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Zaženi &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "Shrani trenutne zavihke v nove priljubljene zavihke" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Shrani izb&or" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Shrani &izbor v datoteko ..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "Shrani &zavihke v datoteko" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "I&skanje ..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption #, fuzzy msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "Zaklenjen zavihek z o&dpiranjem map v novih zavihkih" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "Nastavi vse zavihke kot običajne" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "Nastavi vse zavihke kot zaklenjene" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Spremeni &atribute ..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Zaklenjen zavihek z o&dpiranjem map v novih zavihkih" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Običajni zavihek" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Zaklenjen zavihek" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Zaklenjen zavihek z dovoljenimi &spremembami map" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Odpri z uporabo sistemskih programskih vezi" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Pokaži meni gumbov" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Pokaži zgodovino ukazne vrstice" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Meni" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Pokaži &skrite in sistemske datoteke" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Razvrsti po &atributih" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Razvrsti po &datumu" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Razvrsti po &priponi" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Razvrsti po &imenu" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Razvrsti po &velikost" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "Odpri seznam pogona" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Omogoči/Onemogoči seznam prezrtih datotek pri prikazovanju" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Ustvari &simbolno povezavo ..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Uskladi mape ..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Izenači z &dejavnim zavihkom" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Preizkusi &celovitost arhivov" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Pogled sličic" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Pogled sličic" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "Preklopi celozaslonski način konzole" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Odpri označeno mapo desnega okna v levem oknu" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Odpri označeno mapo levega okna v desnem oknu" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "&Drevesni pogled" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "Razvrsti glede na parametre" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Odstrani izbor vse&h datotek z enako pripono" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Pogled" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Pokaži zgodovino obiskanih poti dejavnega pogleda" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Pojdi na naslednji vnos zgodovine" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Pojdi na predhodni vnos zgodovine" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "Preglej vsebino datoteke dnevnika" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Obišči &spletno stran programa" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Neobnovljivo izbriši" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "Delo s seznamom hitrih map in parametri" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Končaj" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Mapa" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Pokaži trenutno mapo desnega okna v levem oknu" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Pojdi v osebno mapo" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Pojdi v korensko mapo" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Pojdi v mapo višje" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Pokaži trenutno mapo levega okna v desnem oknu" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Pot" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopiraj ..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Ustvari povezavo ..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption msgctxt "TFRMMAIN.MILINE10.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline11.caption msgctxt "TFRMMAIN.MILINE11.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption msgctxt "TFRMMAIN.MILINE21.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption msgctxt "TFRMMAIN.MILINE23.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption msgctxt "TFRMMAIN.MILINE26.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption msgctxt "TFRMMAIN.MILINE39.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption msgctxt "TFRMMAIN.MILINE40.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Počisti" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skrij" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Premakni ..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Ustvari simbolno povezavo ..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Možnosti zavihkov" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Obnovi" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Začni" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Ukazi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Nastavitve" #: tfrmmain.mnucontextline1.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "Priljubljeno" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Datoteke" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Izbor" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Omrežje" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Pokaži" #: tfrmmain.mnutaboptions.caption msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Možnosti &Tabulatorja" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Zavihki" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopiraj" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Izbriši" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmaincommandsdlg.btnok.caption msgctxt "TFRMMAINCOMMANDSDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "Izbor notranjega ukaza" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "Nerazvrščeno" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "TFRMMAINCOMMANDSDLG.CBCOMMANDSSORTORNOT.TEXT" msgid "Legacy sorted" msgstr "Nerazvrščeno" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "Privzeto izberi vse kategorije" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "Izbor:" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "&Kategorije:" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "&Ime ukaza:" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "&Filter:" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "Namig:" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "Hitra tipka:" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "cm_ime" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDCATEGORY.CAPTION" msgid "Category" msgstr "Kategorija" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHELP.CAPTION" msgid "Help" msgstr "Pomoč" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "Namig" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption msgctxt "TFRMMAINCOMMANDSDLG.LBLSELECTEDCOMMANDHOTKEY.CAPTION" msgid "Hotkey" msgstr "Hitra tipka" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Določi ..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ali pa izberi &shranjeno masko izbire:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Ustvari novo mapo" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Vpis imena &nove mape:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nova velikost" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Višina :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Kakovost stiskanja zapisa JPG" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Širina :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Višina" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Širina" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Naloži" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Preimenuj" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Ponastavi &vse" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Shrani" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Napredno preimenovanje" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "&Omogoči" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Logični &izrazi" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Uporabi &zamenjave" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Pripona" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Števec" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Najdi &in zamenjaj" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Rezultat beleženja" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Maska" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Shranjena preimenovanja" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Pripona" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Najdi ..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Razmik" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Ime &datoteke" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Zamenjaj ..." #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Začetna vrednost" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Širina" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Števec" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dan" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dan (2 številki)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dan v tednu (kratko, npr.: \"pon\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dan v tednu (dolgo, npr.: \"ponedeljek\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Znak pripone na mestu (x)" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex] Znaki pripone med mestoma (x) in (y)" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ure" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ure (2 številki)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minute" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minute (2 številki)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mesec" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mesec (2 številki)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Ime meseca (kratko, npr.: \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Ime meseca (dolgo, npr.: \"januar\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Ime" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Znak imena na mestu (x)" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Znaki imena med mestoma (x) in (y)" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Čas ..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Pripona ..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Ime ..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Vstavek" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekunde" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekunde (2 številki)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Leto (2 številki)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Leto (4 številke)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Staro ime datoteke" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo ime datoteke" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Pot datoteke" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Izbor programa" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Ukaz po meri" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Shrani programsko vez" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Nastavi izbrani program za privzeto dejanje" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Vrsta datoteke za odpiranje: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Imena več datotek" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Več naslovov URI" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Ime ene datoteke" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "En naslov URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Uveljavi" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptions.lblemptyeditor.caption msgid "" "Please select one of the subpages, this page does not contain any settings." msgstr "Nastavitve sklopa so urejene na straneh podrejenih kategorij." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "&Samodejno nastavi" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "&Izbriši" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Preimenuj" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "TFRMOPTIONSARCHIVERS.BTNRELATIVEARCHIVER.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere možnosti za izbor ustrezne poti" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Način &razhroščevanja" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "O&mogočeno" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Pokaži &odvod konzole" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Doda&janje:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "&Razširitev:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Raz&širi:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Seznam:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "&Konec seznama (izbirno):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "&Oblika seznama:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "&Začetek seznama (izbirno):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Ar&hivirnik:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "&Opis:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Dodatno" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Splošno" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "če se spremenijo &velikost, datum ali atributi" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "za navedene &poti in podrejene mape:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "ko je datoteka &ustvarjena, izbrisana ali preimenovana" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "če je program zagnan v &ozadju" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Onemogoči samodejno osveževanje:" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Osveži seznam datotek:" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Vedno &pokaži ikono v sistemski vrstici" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Samodejno &skrij odklopljene naprave" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Pri skrčenju okna programa pokaži ikono v sistemski vrstici" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Dovoli le &en zagnan primerek programa" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "" "Več pogonov ali priklopnih točk je mogoča vpisati ločeno s podpičjem \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Črni seznam &pogonov" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "Velikost stolpcev" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Izpis pripon datotek" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "&Poravnano (v stolpcu)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "&Neposredno za imenom datoteke" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "Samodejno" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "Določeno število stolpcev" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "Določena širina stolpcev" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Okrajšaj besedilo na širino stolpca" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Vodoravne črte" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Navpične črte" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Samodejno &zapolni stolpce" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Izris mreže okna" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Samodejno prilagajanje velikosti stolpcev" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Samodejno prilagodi &velikost:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "zgodovino &ukazne vrstice" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "zgodovino &map" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "zgodovino mask &imen datotek" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "&nastavitve" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "zgodovino iskanj in zamenjav" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Privzeto mesto nastavitvenih datotek je:" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Pred končanjem programa shrani:" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Razvrščanje pravil nastavitev v levem drevesnem pogledu je:" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Nastavi v ukazni vrstici" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "mapa &programa (prenosna različica)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "osebna mapa &uporabnika" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLALLOWOVERCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLBACKCOLOR2.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLCURSORTEXT.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFONT.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLFORECOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVECURSORCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLINACTIVEMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLMARKCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINACTIVESELCOLOR.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.CAPTION" msgid "All" msgstr "Vse" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNALLUSEINVERTEDSELECTION.HINT" msgid "Apply modification to all columns" msgstr "Uveljavi spremembo za vse stolpce" #: tfrmoptionscustomcolumns.btnbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELETECONFIGCOLUMNS.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFONT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "Nastavi kot privzeto" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNGOTOSETDEFAULT.HINT" msgid "Reset to default" msgstr "Povrni na privzete vrednosti" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCONFIG.CAPTION" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "Naslednja" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "Predhodna" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRENAMECONFIGCOLUMNS.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETALLOWOVERCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETBACKCOLOR2.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORBORDER.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETCURSORTEXT.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFONT.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFORECOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETFRAMECURSOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVECURSORCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETINACTIVEMARKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETMARKCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINACTIVESELCOLOR.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.CAPTION" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNRESETUSEINVERTEDSELECTION.HINT" msgid "Reset to default" msgstr "Počisti na privzeto vrednost" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVEASCONFIGCOLUMNS.CAPTION" msgid "Save as" msgstr "Shrani kot" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNSAVECONFIGCOLUMNS.CAPTION" msgid "Save" msgstr "Shrani" #: tfrmoptionscustomcolumns.cballowovercolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Dovoli nadbarvo" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "S klikanjem za spreminjanje česarkoli, se to odrazi na vseh stolpcih" #: tfrmoptionscustomcolumns.cbconfigcolumns.text msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCONFIGCOLUMNS.TEXT" msgid "General" msgstr "Splošno" #: tfrmoptionscustomcolumns.cbcursorborder.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBCURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Okvir kazalke" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "Uporabi kazalko z okvirjem" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "Barva izbranega besedila v nedejavnem oknu:" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "Uporabi &obrnjen izbor" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "Uporabi barvo in pisavo po meri za ta pogled" #: tfrmoptionscustomcolumns.lblbackcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR.CAPTION" msgid "BackGround:" msgstr "Ozadje:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLBACKCOLOR2.CAPTION" msgid "Background 2:" msgstr "Ozadje 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption msgid "Con&figure columns view:" msgstr "Nastavi &stolpce za datotečni sistem:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "[Trenutno ime stolpca]" #: tfrmoptionscustomcolumns.lblcursorcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Barva kazalke:" #: tfrmoptionscustomcolumns.lblcursortext.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Besedilo kazalke:" #: tfrmoptionscustomcolumns.lblfontname.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTNAME.CAPTION" msgid "Font:" msgstr "Pisava:" #: tfrmoptionscustomcolumns.lblfontsize.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFONTSIZE.CAPTION" msgid "Size:" msgstr "Velikost:" #: tfrmoptionscustomcolumns.lblforecolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLFORECOLOR.CAPTION" msgid "Text Color:" msgstr "Barva besedila:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "Barva nedejavne kazalke" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "Barva nedejavnega označevalnika" #: tfrmoptionscustomcolumns.lblmarkcolor.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Barva oznake:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLPREVIEWTOP.CAPTION" msgid "" "Below is a preview. You may move cursor and select files to get immediately an " "actual look and feel of the various settings." msgstr "" "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se " "pokažejo različne prilagoditve nastavitev." #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "Nastavitve stolpca:" #: tfrmoptionscustomcolumns.miaddcolumn.caption msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.MIADDCOLUMN.CAPTION" msgid "Add column" msgstr "Dodaj stolpec" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Položaj pladnja po primerjavi" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Dodaj ..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "_Varnostna kopija" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Izbriši ..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Pomoč" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Vstavi ..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Drugo ..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Nekatere funkcije za izbor ustreznega cilja" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Razvrsti ..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Med dodajanjem mape dodaj tudi cilj" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Vedno pokaži razširjeno" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Pokaži le veljavne spremenljivke okolja" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "V pojavnem oknu (pokaže tudi pot)" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Ime, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Ime, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Seznam hitrih map (razvrščanje z vlečenjem)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Druge možnosti" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Ime:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Pot:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Cilj:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "pot trenutno dejavnega okna" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "mapi dejavnega &in nedejavnega okna" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "samostojen ukaz" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Dodaj ukaz" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "kopijo izbranega vnosa" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Dodaj kopijo izbranega vnosa" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "ločilnik vnosov" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Dodaj ločilnik" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podrejeni meni" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Dodaj podrejeni meni" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "preko izbirnega okna" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Zloži vse veje" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "... le trenutno raven izbranih predmetov" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "trenutno izbrano mapo dejavnega okna" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "vse predmete!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podrejeni meni in vse njegove predmete" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "le podrejeni meni, vendar ohrani predmete" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "izbrane predmete" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Izbriši izbrane predmete" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Preveri vse poti hitrih map in potrdi tiste, ki zares obstajajo" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" "Preveri vse poti &in cilje hitrih map ter potrdi tiste, ki zares obstajajo" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "v datoteko seznama hitrih map (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (ohrani obstoječe)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (izbriši obstoječe)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Skoči na podrobnosti o nastavitvah programa TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "Skok na podrobnosti o nastavitvah programa TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Preizkusni meni hitrih map" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "iz datoteke seznama hitrih map (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "iz datoteke \"wincmd.ini\" programa TotalCommander." #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Odpri vse veje" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Obnovi varnostno kopijo seznama hitrih map" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Shrani varnostno kopijo seznama hitrih map" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "Poišči in zamenjaj ..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "na poti ..." #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "na ciljni poti ..." #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "v poti in ciljni poti ..." #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR12.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "... vse od A do Ž!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "... le eno skupino predmetov" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Razvrsti le eno skupino predmetov" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "... le vsebino izbranega podrejenega menija brez podravni" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "... vsebino izbranega podrejenega menija in vse podravni" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Preizkus menija" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "z vpisom poti v vnosno polje" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Dodaj mapo z vpisom imena" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Vstavi mapo z vpisom imena" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Dodajanje iz glavnega okna:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Vedno vprašaj, kateri zapis naj bo uporabljen" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" "Med shranjevanjem besedila v naboru Unikod, shrani kot UTF8 (sicer bo " "uporabljen UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "" "When dropping text, generate filename automatically (otherwise will prompt the " "user)" msgstr "" "Med vlečenjem besedila samodejno ustvari ime datoteke (sicer se bo pojavilo " "vnosno polje)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Pokaži &potrditveno okno po spuščanju datotek" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Med vlečenjem besedila v okna:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Najustreznejši zapis postavi na vrh seznama (razvrščanje z vlečenjem):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(Če najustreznejši ni na voljo, bo uporabljen zapis na drugem mestu)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(lahko ne deluje z nekaterimi izvornimi programi)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Pokaži &datotečni sistem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Pokaži &zasedenost prostora" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Pokaži &oznako" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Seznam pogonov" #: tfrmoptionseditor.chkscrollpastendline.caption #, fuzzy msgid "Caret past end of line" msgstr "Znaki konca vrstice" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "Pokaži posebne znake" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "Možnosti notranjega urejevalnika" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "O&zadje" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "O&zadje" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Ponastavi" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Shrani" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributi predmeta" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Pi&sava" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "Pi&sava" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Označba besedila" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Uporabi (in uredi) nastavitve &splošne sheme" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Uporabi nastavitve &krajevne sheme" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Krepko" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Ležeče" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Prečrtano" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Podčrtano" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "O&brni" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&nemogočeno" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "&Omogočeno" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNADD.CAPTION" msgid "Add..." msgstr "Dodaj ..." #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNDELETE.CAPTION" msgid "Delete..." msgstr "Izbriši ..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "Uvoz / Izvoz" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNINSERT.CAPTION" msgid "Insert..." msgstr "Vstavi ..." #: tfrmoptionsfavoritetabs.btnrename.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNRENAME.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "TFRMOPTIONSFAVORITETABS.BTNSORT.CAPTION" msgid "Sort..." msgstr "Razvrsti ..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "brez" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "TFRMOPTIONSFAVORITETABS.CBFULLEXPANDTREE.CAPTION" msgid "Always expand tree" msgstr "Vedno pokaži razširjeno" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text msgctxt "TFRMOPTIONSFAVORITETABS.CBSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Ne" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "Leva" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "Desna" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "Seznam priljubljenih zavihkov (razvrstitev je mogoča z miško)" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "TFRMOPTIONSFAVORITETABS.GBFAVORITETABSOTHEROPTIONS.CAPTION" msgid "Other options" msgstr "Druge možnosti" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "Ohrani zavihke:" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "Shrani zgodovino mape:" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "Zavihki, shranjeni na levi, bodo obnovljeni na:" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "Zavihki, shranjeni na desni, bodo obnovljeni na:" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "ločilnik vnosov" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "Dodaj ločilnik" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "podrejeni meni" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Dodaj podrejeni meni" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICOLLAPSEALL.CAPTION" msgid "Collapse all" msgstr "Zloži vse veje" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICURRENTLEVELOFITEMONLY.CAPTION" msgid "...current level of item(s) selected only" msgstr "... le trenutno raven izbranih predmetov" #: tfrmoptionsfavoritetabs.micutselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Izreži" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEALLFAVORITETABS.CAPTION" msgid "delete all!" msgstr "vse predmete!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "podrejeni meni in vse njegove predmete" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "le podrejeni meni, vendar ohrani predmete" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "izbrane predmete" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Izbriši izbrane predmete" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "Izvozi izbor v datoteko *.tab" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "Uvozi shranjeno datoteko *.tab glede na privzete nastavitve" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIIMPORTLEGACYTABFILESATPOS.CAPTION" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "Uvozi shranjeno datoteko *.tab na izbrano mesto v podrejenem meniju" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "Vstavi ločilnik" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "Vstavi podrejeni meni" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIOPENALLBRANCHES.CAPTION" msgid "Open all branches" msgstr "Odpri vse veje" #: tfrmoptionsfavoritetabs.mipasteselection.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Prilepi" #: tfrmoptionsfavoritetabs.mirename.caption msgctxt "TFRMOPTIONSFAVORITETABS.MIRENAME.CAPTION" msgid "Rename" msgstr "Preimenuj" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTEVERYTHING.CAPTION" msgid "...everything, from A to Z!" msgstr "... vse od A do Ž!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP.CAPTION" msgid "...single group of item(s) only" msgstr "... le eno skupino predmetov" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLEGROUP2.CAPTION" msgid "Sort single group of item(s) only" msgstr "Razvrsti le eno skupino predmetov" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSINGLESUBMENU.CAPTION" msgid "...content of submenu(s) selected, no sublevel" msgstr "... le vsebino izbranega podrejenega menija brez podravni" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "TFRMOPTIONSFAVORITETABS.MISORTSUBMENUANDSUBLEVEL.CAPTION" msgid "...content of submenu(s) selected and all sublevels" msgstr "... vsebino izbranega podrejenega menija in vse podravni" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "TFRMOPTIONSFAVORITETABS.MITESTRESULTINGFAVORITETABSMENU.CAPTION" msgid "Test resulting menu" msgstr "Preizkus menija" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Dodaj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "Kloniraj" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Dol" #: tfrmoptionsfileassoc.btneditext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNEDITEXT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "Vstavi" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNINSERTEXT.CAPTION" msgid "Insert" msgstr "Vstavi" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "O&dstrani" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "&Odstrani" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "&Preimenuj" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Gor" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "Začetna pot ukaza. Ta niz ne sme biti zapisan v navednicah." #: tfrmoptionsfileassoc.edbactionname.hint msgid "" "Name of the action. It is never passed to the system, it's just a mnemonic name " "chosen by you, for you" msgstr "Ime opravila. Niz ni sistemska vrednost, zato je lahko poljuben." #: tfrmoptionsfileassoc.edtparams.hint msgid "" "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" "Parametri za ukaz. Daljše ime datoteke, ki vključuje presledke, mora biti " "zapisan v navednicah." #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" "Ukaz za izvršitev. Daljše ime datoteke, ki vključuje presledke, mora biti " "zapisan v navednicah." #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "Opis dejanja:" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Dejanja" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Razširitve" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "Razvrščanje z vlečenjem" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Vrste datotek" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Ikona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "Opravila je mogoče razvrstiti z vlečenjem" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "Razširitve je mogoče razvrstiti z vlečenjem" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "Vrste datotek je mogoče razvrščati z vlečenjem" #: tfrmoptionsfileassoc.lblaction.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "Ime dejanja:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Ukaz:" #: tfrmoptionsfileassoc.lblexternalparameters.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "Začetna pot:" #: tfrmoptionsfileassoc.lblstartpath.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLSTARTPATH.CAPTION" msgid "Start pat&h:" msgstr "Začetna &pot:" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "TFRMOPTIONSFILEASSOC.MENUITEM1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "Po meri ..." #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "Po meri" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Uredi" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Odpri v urejevalniku" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "Uredi s programom ..." #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Pridobi odvod ukaza" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "Odpri v notranjem urejevalniku" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "Odpri v notranjem pregledovalniku" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Odpri" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "Odpri s programom …" #: tfrmoptionsfileassoc.miseparator.caption msgctxt "TFRMOPTIONSFILEASSOC.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "Zaženi v terminalu" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "Odpri v pregledovalniku" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "Poglej s programom ..." #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "Klik za zamenjavo ikone." #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXECUTEVIASHELL.CAPTION" msgid "Execute via shell" msgstr "Izvedi preko lupine" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "Razširjen vsebinski meni" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBEXTENDEDCONTEXTMENU.HINT" msgid "" "When accessing file association, offer to add current selected file if not " "already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "Nastavitve datotečnih vezi" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "" "When accessing file association, offer to add current selected file if not " "already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALCLOSE.CAPTION" msgid "Execute via terminal and close" msgstr "Izvedi v terminalu in končaj" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "TFRMOPTIONSFILEASSOCEXTRA.CBOPENSYSTEMWITHTERMINALSTAYOPEN.CAPTION" msgid "Execute via terminal and stay open" msgstr "Izvedi v terminalu in pusti terminal odprt" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "Predmeti razširjenih možnosti:" #: tfrmoptionsfileoperations.bvlconfirmations.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.BVLCONFIRMATIONS.CAPTION" msgid "Show confirmation window for:" msgstr "Potrditveno okno se pokaže za:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "opravila &kopiranja" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "opravila &brisanja" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Izbriši v &smeti (s sočasnim pritiskom dvigalke, se izbriše trajno)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "opravila brisanja v smeti" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Odstrani &zastavico le za branje" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "opravila &premikanja" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Poišči del imena datoteke" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Obravnavaj opombe skupaj z datotekami in mapami" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Med preimenovanjem izberi le &ime datoteke brez pripone" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Pokaži polje izbire &zavihka v pogovornem oknu kopiranja in premikanja" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "&Preskoči napake datotečnih opravil in jih zapiši v dnevnik" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "&Iskanje besedila v datotekah" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Izvajanje opravil" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Iskanje datotek" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Uporabniški vmesnik" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Velikost &medpomnilnika opravila (v KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "Velikost &medpomnilnika za izračun nadzorne vsote (v KB):" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Pokaži splošni napredek &dejavnosti v" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "Privzeta predloga iskanja:" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLTYPEOFDUPLICATEDRENAME.CAPTION" msgid "Duplicated name auto-rename style:" msgstr "Slog samodejnega preimenovanja podvojenih datotek:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "Število prehodov &neobnovljivega brisanja:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Uporabi preslikavo pomnilnika za iskanje &besedila v datotekah" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Uporabi pretok za iskanje besedila v datotekah" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVECURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINACTIVEMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "Ponastavi na privzete vrednosti" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBALLOWOVERCOLOR.CAPTION" msgid "Allow Overcolor" msgstr "Dovoli nadbarvo" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Uporabi kazalko z &okvirjem" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Uporabi kazalnik &preliva" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "Uporabi barvo in pisavo za nedejavno okno" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Uporabi &obrnjen izbor" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBUSECURSORBORDER.CAPTION" msgid "Cursor border" msgstr "Okvir kazalke" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Kazalnik zasedenosti prostora na pogonu" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "O&zadje:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "&Drugo o&zadje:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Barva &kazalke:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Besedilo ka&zalke:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVECURSORCOLOR.CAPTION" msgid "Inactive Cursor Color:" msgstr "Barva besedila pod kazalko v nedejavnem oknu:" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEMARKCOLOR.CAPTION" msgid "Inactive Mark Color:" msgstr "Barva označenega besedila v nedejavnem oknu:" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Raven &svetlosti nedejavnega okna" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Barva &ozadja v bralnem pregledovalniku" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Barva &pisave kazalnika:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Barva &oznake:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "" "Below is a preview. You may move cursor, select file and get immediately an " "actual look and feel of the various settings." msgstr "" "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se " "pokažejo različne prilagoditve nastavitev." #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Barva &besedila:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Ne naloži datoteke, dokler zavihek ni omogočen" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "&Izpiši oglate oklepaje okoli imena mape v seznamu okna" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "&Poudari nove in posodobljene datoteke" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Omogoči takojšnje &preimenovanje z dvoklikom na ime datoteke" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Naloži &seznam datotek v ločeni niti" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Naloži ikone &za seznamom datotek" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Pokaže skrite in &sistemske datoteke" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "" "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "" "&Med izbiranjem datotek s preslednico, se premakni na naslednjo datoteko v " "seznamu (kot z vstavljalko)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Oblikovanje" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Razvrščanje" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Razlikovanje velikosti &črk:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Napačen zapis" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Zapis datuma in časa:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Zapis velikosti datoteke:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Vstavi &nove datoteke:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Razvrščanje map:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Način razvrščanja:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Premakni posodobljene datoteke:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Izbriši" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Predloga ..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Obarvanje različnih skupin datotek (razvrščanje z vlečenjem)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "&Atributi kategorije:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "&Barva kategorije:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorije:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Ime kategorije:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELCONSOLEFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "&Pisava konzole" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Pisava &urejevalnika" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Pisava &dnevnika" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Glavna pisava" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Pisava &bralnega pregledovalnika" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Pisava &pregledovalnika" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "&Dodaj hitro tipko" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Izbriši hitro tipko" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Uredi &hitro tipko" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "&Kategorije:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "&Ukazi:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Datoteke &tipkovnih bližnjic:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[0].TITLE.CAPTION" msgid "Command" msgstr "Ukaz" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[1].TITLE.CAPTION" msgid "Hotkeys" msgstr "Hitre tipke" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGCOMMANDS.COLUMNS[2].TITLE.CAPTION" msgid "Description" msgstr "Opis" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Hitra tipka" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Tipke" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Za navedene &poti in podrejene mape:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Pokaži ikone za dejanja v &meniju" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Pokaži prekrivne i&kone za npr. povezave" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Onemogoči posebne ikone:" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikone v meniju" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Velikost ikon" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Pokaži ikone na levi strani imena datoteke" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Vse" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Vse programske vezi in &EXE/LNK (počasneje)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Brez &ikon" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Le &običajne ikone" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Dodaj izbrana imena" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Dodaj izbrana imena s polno &potjo." #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "TFRMOPTIONSIGNORELIST.BTNRELATIVESAVEIN.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Prezri in ne pokaži naslednjih datotek in map:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Shrani v:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "&Tipki levo in desno zamenjata mapo (način Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Dejanja pritiskov tipk na tipkovnici" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+Č&rke" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Čr&ke" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Črke" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "&Ploski gumbi" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "&Ploski vmesnik" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Ploski &gumbi" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Pokaži vrstico &zasedenosti prostora" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Pokaži okno &dnevniškega izpisa" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Pokaži okno opravil, zagnanih v ozadju" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Pokaži splošni napredek dejavnosti v menijski vrstici" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Pokaži &ukazno vrstico" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Pokaži &trenutno mapo" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Pokaže gumbe &pogonov" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Pokaži vrednost &zasedenosti prostora" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Pokaži gumb seznama &pogonov" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Pokaži &funkcijske gumbe" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Pokaži &glavni meni" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Pokaži vrstico &gumbov" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Pokaži kratko oznako &zasedenosti prostora" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Pokaži vrstico &stanja" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Pokaži glave &stolpcev" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Pokaži z&avihke map" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Pokaži okno &terminala" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Pokaži dve orodni vrstici gumbov pogonov (&določene širine nad okni)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Zaslonska razporeditev" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Preglej vsebino datoeke dnevnika" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Vključi datum v ime dnevniške datoteke" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Zapakiranje/Odpakiranje" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "Zunanje izvajanje ukazne vrstice" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Ko&piranje/Premikanje/Ustvarjanje navadnih in simbolnih povezav" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Brisanje" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Us&tvarnje/Brisanje map" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Beleži &napake opravil" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "Ustvari &dnevniško datoteko:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "&Beleži sporočila podrobnosti" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Zagon/Izklop programa" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Beleži &uspešno končana opravila" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "&Uporabo sistemsko-datotečnih vstavkov" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Dnevniška datoteka datotečnih opravil" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Beleži opravila" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stanje opravila" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Odstrani sličice neobstoječih datotek" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "Preglej vsebino datoteke dnevnika" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Med menjanjem pogonov vedno začni na &korenski mapi" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Pokaži &opozorila (Okna le z gumbom \"V redu\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Shrani sličice v predpomnilnik" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Sličice" #: tfrmoptionsmisc.gbtcexportimport.caption #, fuzzy msgid "Regarding TC export/import:" msgstr "Uvoz Izvoz" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Nastavitvena datoteka:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Izvedljiva datoteka TC." #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Odvodna pot orodne vrstice" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "točke" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Velikost sličic:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Izbiranje datotek z miško" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Drsenje" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Izbor" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Način:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Vrstica po vrstico" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Premik kazalke &vrstico po vrstico" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Stran po stran" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "&Nastavitve" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Omogoči" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "&Prilagodi" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "" "Searc&h plugins allow to use alternative search algorithms or external tools " "(like \"locate\", etc.)" msgstr "" "Vstavki &iskalnikov omogočajo uporabo dodatnih načinov iskanja oziroma uporabo " "zunanjih orodij (ukaz \"locate\" in podobno)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Vstavki &pakirnikov so uporabljeni za delo z arhivi." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "" "Content plu&gins allow to display extended file details like mp3 tags or image " "attributes in file lists, or use them in search and multi-rename tool" msgstr "" "Vsebinski vsta&vki omogočajo prikaz razširjenih podrobnosti datotek, kot so " "podatkovne oznake datotek mp3 ali pa podatki slik in jih je mogoče uporabiti " "pri iskanju in pri uporabi na primer naprednega preimenovanja." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "" "Fi&le system plugins allow access to disks inaccessible by operating system or " "to external devices like Palm/PocketPC." msgstr "" "Sistemsko-datotečni vstavki omogočajo dostop do naprav, kot so dlančniki in " "PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "" "Vie&wer plugins allow to display file formats like images, spreadsheets, " "databases etc. in Viewer (F3, Ctrl+Q)" msgstr "" "Vstavki &pregledovalnikov omogočajo prikaz različnih datotek dokumentov, kot so " "slike, preglednice, podatkovne zbirke in podobno (F3, Ctrl+Q)." #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Dejavno" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Vstavek" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Vpisano za" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Vstavki &iskanja (.dsx)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Vstavki &pakiranja (.wcx)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "&Vsebinski vstavki (.wdx)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Sistemsko-&datotečni vstavki (.wfx)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Vstavki &pregledovanja (.wlx)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "na &začetku (ime se mora začeti s prvim vpisanim znakom)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "" "na &koncu (ime se mora končati s prvim vpisanim znakom pred piko (.) in pripono)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Možnosti" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Natančno ujemanje imena datoteke:" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Upoštevanje velikosti črk med iskanjem je:" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Iskanje predmetov" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Postavi okno v &žarišče s klikom na izbran zavihek" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Pokaži &glavo zavihka tudi, ko je odprt le en zavihek" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Potrdi zapiranje vseh zavihkov" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "Potrdi zapiranje zaklenjenih zavihkov" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "Omeji dolžino naslova zavihka na" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Zaklenjene zavihke označi z zvezdico *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Zavihki so lahko v več vrsticah" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Tipki CTRL+↑ odpreta nov zavihek v ospredju" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Odpri &nov zavihek ob trenutnem" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "Uporabi obstoječi zavihek, ko je le mogoče" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Gumb za &zapiranje zavihka je vedno viden" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Glave zavihkov map" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "znakov" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Položaj &zavihkov" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTEXISTINGTABSTOKEEP.TEXT" msgid "None" msgstr "brez" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTSAVEDIRHISTORY.TEXT" msgid "No" msgstr "Ne" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELLEFTSAVED.TEXT" msgid "Left" msgstr "Leva" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "TFRMOPTIONSTABSEXTRA.CBDEFAULTTARGETPANELRIGHTSAVED.TEXT" msgid "Right" msgstr "Desna" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "Glave zavihkov map" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "Zavihki, shranjeni na levi, bodo obnovljeni na:" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "Zavihki, shranjeni na desni, bodo obnovljeni na:" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "TFRMOPTIONSTABSEXTRA.LBLFAVORITETABSSAVEDIRHISTORY.CAPTION" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "Ukaz za zagon terminala:" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "Ukaz za izvedbo zaključenega ukaza v terminalu" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "Ukaz za izvedbo ukaza v oknu terminala, ki naj ostane odprto" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMCLOSECMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "" "{command} should normally be present here to reflect the command to be run in " "terminal" msgstr "" "{command} bi moral biti izpisan na tem mestu za ukaz, ki bo zagnan v terminalu" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNINTERMSTAYOPENPARAMS.HINT" msgid "" "{command} should normally be present here to reflect the command to be run in " "terminal" msgstr "" "{command} bi moral biti izpisan na tem mestu za ukaz, ki bo zagnan v terminalu" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMCMD.EDITLABEL.CAPTION" msgid "Command:" msgstr "Ukaz:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.EDITLABEL.CAPTION" msgid "Parameters:" msgstr "Parametri:" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "TFRMOPTIONSTERMINAL.LEDTRUNTERMPARAMS.HINT" msgid "" "{command} should normally be present here to reflect the command to be run in " "terminal" msgstr "" "{command} bi moral biti izpisan na tem mestu za ukaz, ki bo zagnan v terminalu" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Gumb za &kloniranje" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Izbriši" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Uredi hitro &tipko" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Vstavi nov gumb" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "Izbor" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOTHER.CAPTION" msgid "Other..." msgstr "Drugo ..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Odstrani &hitre tipke" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "Predlagaj" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "&Ploski gumbi" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Pokaži napake ukazov" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "" "Enter command parameters, each in a separate line. Press F1 to see help on " "parameters." msgstr "" "Vnos parametrov ukaza, ki so podani vsak v svoji vrstici. Pritisnite tipko F1 " "za več pomoči o parametrih." #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Videz" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Velikost orodne &vrstice:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "&Ukaz:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLHELPONINTERNALCOMMAND.CAPTION" msgid "Help" msgstr "Pomoč" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Hitra tipka:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Iko&na:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Veli&kost ikone:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "&Ukaz:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Začetna &pot:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Orodni namig:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "Dodaj orodno vrstico z VSEMI ukazi DC" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "za zunanji ukaz" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "za notranji ukaz" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "za ločilnik" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "za podrejeno orodno vrstico" #: tfrmoptionstoolbar.mibackup.caption msgctxt "TFRMOPTIONSTOOLBAR.MIBACKUP.CAPTION" msgid "Backup..." msgstr "Varnostna kopija ..." #: tfrmoptionstoolbar.miexport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORT.CAPTION" msgid "Export..." msgstr "Izvozi ..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Trenutna orodna vrstica ..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Vrhnja orodna vrstica" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Shrani varnostno kopijo orodne vrstice" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "v datoteko orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "v datoteko TC.BAR (ohrani obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "v datoteko TC.BAR (izbriši obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "v datoteko \"wincmd.ini\" programa TotalCommander (ohrani obstoječe)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutno izbiro" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.miimport.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORT.CAPTION" msgid "Import..." msgstr "Uvozi ..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Obnovi varnostno kopijo orodne vrstice" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "iz datoteke orodne vrstice (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje na novo orodno vrstico na vrhnji orodni vrstici" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "iz ene datoteke TC.BAR" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "iz datoteke \"wincmd.ini\" programa TotalCommander ..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "za dodajanje na trenutno orodno vrstico" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "za dodajanje na novo orodno vrstico na trenutni orodni vrstici" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "za dodajanje nove orodne vrstice na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "za dodajanje na vrhnjo orodno vrstico" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "za zamenjavo vrhnje orodne vrstice" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEARCHANDREPLACE.CAPTION" msgid "Search and replace..." msgstr "Poišči in zamenjaj ..." #: tfrmoptionstoolbar.miseparator1.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "takoj pred trenutno izbiro" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "v vseh od vseh zgoraj ..." #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "TFRMOPTIONSTOOLBAR.MISRCRPLCLICKSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "v vseh ukazih ..." #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "v vseh imenih ikon ..." #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "v vseh parametrih ..." #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "v vseh začetnih poteh ..." #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "takoj za trenutnim izborom" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "kot prvi predmet" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "kot zadnji predmet" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "takoj pred trenutnim izborom" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Vrsta gumba" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "TFRMOPTIONSTOOLBASE.BTNRELATIVETOOLPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Po koncu izvajanja programa ohrani okno terminala &odprto" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Izvedi v &terminalu" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Uporabi &zunanji program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "&Dodatni parametri:" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Pot do programa za izvedbo:" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Dodaj" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "&Uveljavi" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Izbriši" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Predloga ..." #: tfrmoptionstooltips.chkshowtooltip.caption msgctxt "TFRMOPTIONSTOOLTIPS.CHKSHOWTOOLTIP.CAPTION" msgid "&Show tooltip for files in the file panel" msgstr "Pokaži orodne &namige za datoteke v oknu" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Polja po meri (glede na vrsto datoteke)" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "&Namig kategorije:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Maska kategorije:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Ime &kategorije:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Način bralnega pregledovalnika" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Primer" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Barva &ozadja v bralnem pregledovalniku" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "&Barva pisave v bralnem pregledovalniku" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Število stolpcev v bralnem pregledovalniku" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Nastavitve" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Zapakiraj datoteke" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Ustvari ločen arhiv za vsako izbrano datoteko oziroma mapo" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Ustvari arhiv za samodejno odpakiranje" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Šifriraj arhiv z geslom" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Pre&makni v arhiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Ustvari arhiv v več &delih" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Najprej &vstavi v arhiv TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Zapakiraj tudi imena &poti (le pri več ravneh map)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Zapakiraj datoteke v arhiv:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakirnik" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Odpakiraj &vse in izvedi" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Odpakiraj &in izvedi" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Lastnosti arhiva" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributi:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Raven stiskanja:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Datum:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Način:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Izvorna velikost:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Datoteka:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Arhivirana velikost:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakirnik:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Čas:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Zapri okno filtra" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Vnos besedila za iskanje ali filtriranje" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Razlikuj velikosti črk" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mape" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "D" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Datoteke" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Poišči na začetku imena" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Poišči na koncu imena" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filter" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Preklop med iskalnim in filtrirnim načinom" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Več pravil" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Man%j pravil" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Uporabi &vsebinske vstavke združeno z:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Vstavek" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Polje" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Operator" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Vrednost" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (vsi zadetki)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (vsi zadetki)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Zapri" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "Pomo&č" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Izbor znakov za &vstavljanje:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Spremeni atribute" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Lepljivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arhiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Ustvarjeno:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Skrita datoteka" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Zadnji dostop:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Spremenjeno:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Le za branje" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Vključi podrejene mape" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistemska datoteka" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Časovni podatki datotek in map" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributi" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributi" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Biti:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Skupina" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(sivo polje pomeni nespremenjeno vrednost)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Drugo" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Lastnik" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Besedilo:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Izvedi" #: tfrmsetfileproperties.lblmodeinfo.caption msgctxt "TFRMSETFILEPROPERTIES.LBLMODEINFO.CAPTION" msgid "(gray field means unchanged value)" msgstr "(sivo polje pomeni nespremenjeno vrednost)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Osmiško:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Preberi" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Zapiši" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Nekatere funkcije za izbor ustrezne poti" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Razdelilnik" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Zahtevaj overitveno datoteko CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Ime datoteke" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Velikost in število delov" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "&Ciljna mapa" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "&Vir datoteke" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Število delov" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "&Bajti" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabajti" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobajti" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabajti" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "Izgradi" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operacijski sistem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Okolje" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "Predelava" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "Različica" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&V redu" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Ustvarjanje simbolne povezave" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Pot do &ciljnega mesta za povezavo:" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Ime &povezave:" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "Zapri" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjaj" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Usklajevanje map" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "Nesimetrično" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "Po vsebini" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "Prezri datum" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "Le izbrano mapo" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "Upoštevaj podmape" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Pokaži:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "<=>" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Datum" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Velikost" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Ime" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(v glavnem oknu)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Primerjaj" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Poglej na levi" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Poglej na desni" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "podvojene" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "=" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "!=" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "posamezne" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Pritisnite gumb \"Primerjava\" za začetek" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Uskladi" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Potrdi prepisovanje" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Dodaj n&ovo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Prekliči" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "S&premeni" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Pri&vzeto" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "V &redu" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Odstrani" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Prilagodi vstavek" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Določi vrsto arhiva po &vsebini" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Dovoljeno je &izbrisati datoteke" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Podpira &šifriranje" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Pokaži kot &običajne datoteke (skrij ikono arhiva)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Podpira pakiranje datotek v &pomnilniku" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Dovoljeno je spreminjati &obstoječe arhive" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Arhiv lahko vsebuje &več datotek" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Dovoljeno je ustvariti nove ar&hive" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Podpira &pogovorno okno možnosti" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Dovoli iskanje &besedila v arhivih" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Opis:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Zaznava &nizov:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Ra&zširitev:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Zastavice:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Ime:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Vstavek:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Vstavek:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "O pregledovalniku ..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Prikaže pogovorno okno podrobnosti" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Kopiraj datoteko" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Kopiranje datoteke" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Izbriši datoteko" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Brisanje datoteke" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Naslednja" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Naloži naslednjo datoteko" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Predhodna" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Naloži predhodno datoteko" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Zrcaljenje" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Zrcaljenje" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Premakni datoteko" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Premakni datoteko" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Ponovno naloži" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ponovno naloži trenutno datoteko" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Zavrti 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Zavrti za 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Zavrti 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Zavrti za 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Zavrti 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Zavrti za 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Shrani kot ..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Shrani datoteko kot ..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Raztegni" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Raztegni sliko" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopiraj" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopiraj" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Obreži" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Izbriši" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Celozaslonski način" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Poudari" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Zrcaljenje" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Premakni" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Premakni" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Risanje" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Rdeče oči" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Spremeni velikost" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Razveljavi" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Približaj" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Oddalji" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Pregledovalnik" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Predstavitev" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Pisalo" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Poudari" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Risanje" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Predstavitev" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Pogled" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "O programu" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Pokaži &dvojiško" #: tfrmviewer.micenter.caption msgid "Center" msgstr "Sredina" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Kopiraj v odložišče" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Uredi" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "Nabor &znakov" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Končaj" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Datoteka" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Celozaslonski način" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafični prikaz" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Pokaži &šestnajstiško" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Slika" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Pokaži v &bralnem pogledu" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Zrcaljenje" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Vstavki" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Predogled" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Natisni ..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Zavrti" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Shrani" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Shrani kot ..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Zaslonski posnetek" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Iskanje" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Poišči naslednji niz" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Poišči predhodni niz" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Raztegni" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "Raztegni le velike" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Pokaži kot &besedilo" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Pogled" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Pokaži kot besedilo v &prelomu" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Približaj" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Oddalji" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopira v odložišče" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Izberi vse" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Začni" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "Za&ustavi" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Opravila datotek" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Vedno na vrhu" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Z vlečenjem se je mogoče premikati med opravili v vrsti" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Prekliči" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova čakalna vrsta" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Pokaži v odklopljenem oknu" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Postavi na začetek vrste" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Postavi na konec vrste" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "V vrsto" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Izven vrste" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Vrsta 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Vrsta 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Vrsta 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Vrsta 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Vrsta 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Pokaži v odklopljenem oknu" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Premor &vsega" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Če datoteka obstaja" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Če datoteka obstaja" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Pošlji v ozadje (ločena povezava)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Če datoteka že obstaja," #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of " "files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Datoteke ni mogoče najti, zato ni mogoče overiti končne kombinacije datotek:\n" "%s\n" "\n" "Omogočite dostop do datoteke in pritisnite gumb \"V redu\",\n" "ali pa pritisnite \"Prekliči\" in nadaljujte brez nje?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Prekliči hitri filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Prekliči trenutno opravilo" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Vpis imena datoteke s pripono za spuščeno besedilo." #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Vrsta zapisa za uvoz" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Okvarjeno:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Splošno:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Manjkajoče:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Napaka branj:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Uspešno zaključeno:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Vnos nadzorne vsote in izbira algoritma:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Preveri nadzorne vsote" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Skupaj:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "V odložišču ni veljavnih podatkov orodne vrstice." #: ulng.rscmdcategorylistinorder msgid "" "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;" "Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;" "Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" "Vse;Dejavno okno;Levo okno;Desno okno;Datotečna opravila;Nastavitve;Omrežje;" "Razno;Paralelna vrata;Tisk;Označevanje;Varnost;Odložišče;FTP;Navigcija;Pomoč;" "Okno;Ukazna vrstica;Orodja;Pogled;Uporabnik;Zavihki;Razvrščanje;Beleženje" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "Opuščeno razvrščanje;Abecedno razvrščanje" #: ulng.rscolattr msgid "Attr" msgstr "Atrib" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Datum" #: ulng.rscolext msgid "Ext" msgstr "Pri" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Ime" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Velikost" #: ulng.rsconfcolalign msgid "Align" msgstr "Poravnava" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Naslov" #: ulng.rsconfcolconfig msgid "Config" msgstr "Nastavitev" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Izbriši" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Vsebina stolpca" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Premakni" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Širina" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Prilagodi stolpec" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "Nastavi programsko vez" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "Potrjevanje ukazne vrstice in parametrov" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopiraj (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Uvožena orodna vrstica DC" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Uvožena orodna vrstica TC" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_Spuščeno besedilo" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_Spuščena koda HTML" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_Spuščeno oblikovano besedilo" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_Spuščeno neoblikovano besedilo" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_Spuščeno besedilo UTF16" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_Spuščeno besedilo UTF8" #: ulng.rsdiffadds msgid " Adds: " msgstr "Dodano:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Izbrisano:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "Datoteki sta enaki!" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Zadetki:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr " Spremeni:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Vsa opravila so končana." #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Napredek vseh opravil %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "&Prekini" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Vse" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Pripni" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "&Samodejno preimenuj izvorne datoteke" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Prekliči" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Nadaljuj" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopiraj &v" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopiraj v &vse" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&končaj program" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Izberi &vse" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Ne" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Brez" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&V redu" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "&Drugo" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Prepiši" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Prepiši &vse" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Prepiši vse &večje" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Prepiši vse &starejše" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Prepiši vse &manjše" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Preimenuj" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Nadaljuj" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Poskusi &znova" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Preskoči" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Pres&koči vse" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Da" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Preračunaj velikost datotek in map" #: ulng.rsdlgchecksumcalc msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Izračunaj nadzorno vsoto ..." #: ulng.rsdlgchecksumverify msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Preveri nadzorno vsoto" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopiraj datoteke" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Izbriši datoteke" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Premakni datoteke" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pre&mor" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Začni" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "V vrsto" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Hitrost %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Pri hitrosti %s/s bo opravilo trajalo še %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Razdeli" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Neobnovljivo izbriši datoteke" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<brez oznake>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<ni nosilca>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Urejevalnik besedila programa Double Commander" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Skoči v vrstico:" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Skoči v vrstico:" #: ulng.rseditnewfile msgid "new.txt" msgstr "nova_datoteka.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Ime datoteke:" #: ulng.rseditnewopen msgid "Open file" msgstr "Odpri datoteko" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Nazaj" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Poišči" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Naprej" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Zamenjaj" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "z zunanjim urejevalnikom" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "z notranjim urejevalnikom" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "Izvedi prek lupine" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "Izvedi v terminalu in zapri okno" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "Izvedi v terminalu in pusti okno odprto" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "levo;desno;dejavno;nedejavno;oboje;brez" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "Da;Ne" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Izvozi iz DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Vprašaj;Prepiši;Kopiraj v;Preskoči" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Vprašaj;Prepiši;Prepiši starejše;Preskoči" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Vprašaj;Ne nastavljaj več;Prezri napake" #: ulng.rsfilterstatus msgid "FILTER" msgstr "Filter" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Določitev predloge" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "do %s. ravni map" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "vse ravni (neomejena globina)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "le trenutno raven" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "Mapa %s ne obstaja!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Najdeno: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Shrani predlogo iskanja" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Ime predloge:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Preiskano: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Preiskovanje" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Najdi datoteke" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Začni pri" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Sprosti %s od %s bajtov" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%sB prostora" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Datum in čas zadnjega dostopa" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributi" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Opomba" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Stisnjena velikost" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Datum in čas ustvarjanja" #: ulng.rsfuncext msgid "Extension" msgstr "Pripona" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Skupina" #: ulng.rsfunchtime msgid "Change date/time" msgstr "Spremeni čas in datum" #: ulng.rsfunclinkto msgid "Link to" msgstr "Povezava do" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Datum in čas spremembe" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Ime" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Ime brez pripone" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Lastnik" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Pot" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Velikost" #: ulng.rsfunctype msgid "Type" msgstr "Vrsta" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Napaka med ustvarjanjem trde povezave." #: ulng.rshotdirforcesortingorderchoices msgid "" "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" "brez;ime, a-z;ime, z-a;pripona, a-z;pripona, z-a;velikost 9-0;velikost 0-9;" "datum 9-0;datum 0-9" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Ni navedenih predmetov za uvoz!" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list " "to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Pogovorno okno kopiranja in premikanja" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Primerjalnik" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Uredi pogovorno okno opombe" #: ulng.rshotkeycategoryeditor msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Urejevalnik" #: ulng.rshotkeycategoryfindfiles msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Najdi datoteke" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Glavno" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Pregledovalnik" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Ni mogoče najti sklica na privzeto datoteko orodne vrstice" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Povezovalnik je končan" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Maska odstranitve izbire" #: ulng.rsmarkplus msgid "Select mask" msgstr "Maska izbire" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Maska izbire:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "Stolpčni pogled s tem imenom že obstaja" #: ulng.rsmenuconfigurecolumnssavetochange msgid "" "To change current editing colmuns view, either SAVE, COPY or DELETE current " "editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Nastavitev stolpcev po meri" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "Vpis novega imena stolpca po meri" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Prilagodi pogled stolpcev po meri" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Dejanja" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "Odklopi omrežno pogon ..." #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Uredi" #: ulng.rsmnueject msgid "Eject" msgstr "Izvrzi" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "Odpakiraj v to mapo ..." #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "Preslikaj omrežni pogon ..." #: ulng.rsmnumount msgid "Mount" msgstr "Priklopi" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Novo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nosilec ni na voljo" #: ulng.rsmnuopen msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Odpri" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Odpri s programom" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Drugo ..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "Zapakiraj datoteke v to mapo ..." #: ulng.rsmnusortby msgid "Sort by" msgstr "Razvrsti po" #: ulng.rsmnuumount msgid "Unmount" msgstr "Odklopi" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Poglej" #: ulng.rsmsgaccount msgid "Account:" msgstr "Račun:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Dodatni parametri arhiva v ukazni vrstici:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Datoteke \"%s\" ni mogoče kopirati oziroma premakniti samo vase!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Ni mogoče izbrisati mape %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Ukaz chdir v [%s] je spodletel!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Ali naj se odstranijo vsi nedejavni zavihki?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Zavihek (%s) je zaklenjen! Ali naj se vseeno zapre?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Ali ste prepričani, da želite končati?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Ali naj se kopira %d izbranih datotek ali map?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Ali naj se \"%s\" kopira v:" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "< Ustvari novo vrsto datoteke \"%s datoteke\" >" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" "Vpis mesta in imena datoteke, kamor naj se shrani datoteka orodne vrstice DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "Dejanje po meri" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Ali naj se delno kopirana datoteka izbriše?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Ali naj se izbrani predmeti izbrišejo (%d predmetov)?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Ali naj se izbrani predmeti premaknejo v smeti (%d predmetov)?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Ali naj se \"%s\" izbriše?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Ali naj se \"%s\" premakne v smeti?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Predmeta \"%s\" ni mogoče premakniti v smeti. Ali naj se izbriše trajno?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disk ni na voljo" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "" "Options regarding mouse drag && drop have been modified. Do you want to save " "before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "Vpis imena dejanja po meri:" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Vpis pripone datoteke:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Vnos imena:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Napaka CRC v podatkih arhiva" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Slabi podatki" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Ni se mogoče povezati s strežnikom: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Ni mogoče kopirati datoteke %s v %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Mapa z imenom \"%s\" že obstaja." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datum %s ni podprt!" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Mapa %s že obstaja!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Ukaz je prekinjen na zahtevo uporabnika" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Napaka med zapiranjem datoteke" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Ni mogoče ustvariti datoteke" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "V arhivu ni več datotek" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Ni mogoče odpreti obstoječe datoteke" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Napaka med branjem iz datoteke" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Napaka med pisanjem v datoteko" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Ni mogoče ustvariti mape %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Neveljavna povezava" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ni najdenih datotek" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ni dovolj pomnilnika" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funkcija ni podprta!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Napaka v ukazu vsebinskega menija" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Napaka med nalaganjem nastavitev" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Napaka skladnje logičnega izraza!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Ni mogoče preimenovati datoteke %s v %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Vezi ni mogoče shraniti!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Ni mogoče shraniti datoteke" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Ni mogoče določiti atributov za \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Datuma in časa za datoteko \"%s\" ni mogoče določiti." #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Ni mogoče določiti lastništva in skupine za \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "Ni mogoče nastaviti dovoljenj za \"%s\"" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Medpomnilnik je premajhen" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Izbranih je preveč datotek za pakiranje" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Vrsta arhiva ni znana" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "" "Are you sure you want to remove all entries of your Favorite Tabs? (There is no " "\"undo\" to this action!)" msgstr "" "Ali ste prepričani, da želite odstraniti vse vnose priljubljenih zavihkov " "(dejanja ni mogoče povrniti)?" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(konec podrejenega menija)" #: ulng.rsmsgfavoritetabsentername #, fuzzy msgid "Enter a name this Favorite Tabs entry" msgstr "Vnos imena novega priljubljenega predmeta" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "Napaka nalaganja priljubljenih zavihkov ..." #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "Napaka shranjevanja priljubljenih zavihkov ..." #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname #, fuzzy msgid "Legacy tabs imported" msgstr "Opuščena tipkovnica " #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "" "Last Favorite Tabs modification have been saved yet. Do you want to save them " "prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Ime" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Ime menija:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(ločilnik)" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Ime podrejenega menija" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs #, fuzzy msgid "This will load the Favorite Tabs: \"%s\"" msgstr "Nastavitev priljubljenih zavihkov" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Datoteka %s je spremenjena. Ali naj se spremembe shranijo?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bajtov, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Prepiši:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Datoteka %s že obstaja. Ali naj bo prepisana?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Z datoteko:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Datoteke \"%s\" ni mogoče najti." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Zaznana so dejavna datotečna opravila" #: ulng.rsmsgfileoperationsactivelong msgid "" "Some file operations have not yet finished. Closing Double Commander may result " "in data loss." msgstr "" "Nekatera opravila datotek še niso končana. S predčasnim končanjem programa " "lahko pride do izgube podatkov." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "" "Options regarding file operations have been modified. Do you want to save " "before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Datoteka %s je označena kot le za branje. Ali naj se vseeno izbriše?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Datoteka velikosti \"%s\" je prevelika za ciljni datotečni sistem!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "Mapa %s že obstaja. Ali naj se prepiše?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Ali naj se sledi simbolni povezavi \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Izbor vrste zapisa za uvoz" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Dodaj %d izbranih map" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Dodaj izbrano mapo:" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Dodaj trenutno mapo:" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Izvedi ukaz" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_nek_ukaz" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Nastavitev seznama hitrih map" #: ulng.rsmsghotdirdeleteallentries msgid "" "Are you sure you want to remove all entries of your Directory Hotlist? (There " "is no \"undo\" to this action!)" msgstr "" "Ali ste prepričani, da želite odstraniti vse vnose seznama hitrih map (dejanja " "ni mogoče povrniti)?" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Izveden bo naslednji ukaz:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "To je hitra mapa z imenom " #: ulng.rsmsghotdirdemopath #, fuzzy msgid "This will change active frame to the following path:" msgstr "Dodaj pot iz dejavnega okna" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Napaka ustvarjanja varnostne kopije vnosov ..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Napaka med izvažanjem vnosov ..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Izvozi vse!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Izvozi seznam hitrih map - izbor vnosov za izvoz" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Izvozi izbrano" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Uvozi vse!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Uvoz seznama hitrih map - izbor vnosov za uvoz" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Uvozi izbrano" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Pot" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Najdi datoteko \".htlist\" za uvoz" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" "Seznam hitrih map je spremenjen. Ali želite seznam shraniti pred končanjem?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Ime vroče mape" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Število novih vnosov: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "In izbranih predmetov za izvoz!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Pot do vroče mape" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Ponovno dodaj izbrano mapo:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Ponovno dodaj trenutno mapo:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Vpis mesta in imena datoteke seznama hitrih map za obnovitev" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Ukaz:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(konec podrejenega menija)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Ime menija:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Ime:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(ločilnik)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Ime podrejenega menija" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Cilj vroče mape" #: ulng.rsmsghotdirtiporderpath msgid "" "Determine if you want the active frame to be sorted in a specified order after " "changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "" "Determine if you want the not active frame to be sorted in a specified order " "after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "" "Some functions to select appropriate path relative, absolute, windows special " "folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Število izvoženih vnosov:" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-" "menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani seznam hitrih map" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Napaka v ukazni vrstici" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Neveljavno ime datoteke" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Neveljaven zapis nastavitvene datoteke" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Neveljavna pot" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Pot %s vsebuje nedovoljene znake." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Ta vrsta vstavka ni podprta!" #: ulng.rsmsginvalidpluginarchitecture msgid "" "This plugin is built for Double Commander for %s.%sIt can not work with Double " "Commander for %s!" msgstr "Ta vstavek je izgrajen za različico %s. Z različico %s ne deluje" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Neveljavno navajanje" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Neveljaven izbor." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Nalaganje seznama datotek ..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Najdi nastavitveno datoteko programa TotalCommander (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Kopiraj datoteko %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Izbriši datoteko %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Napaka:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "Zaženi zunanji program" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "Zunanji rezultati" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Razširi datoteko %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Podrobnosti:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Ustvari povezavo %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Ustvari mapo %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Premakni datoteko %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Zapakiraj v datoteko %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Odstrani mapo %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Končano:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Ustvari simbolno povezavo %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Preizkusi celovitost datoteke %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Varno izbriši %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Neobnovljivo izbriši mapo %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Glavno geslo" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Vnesite glavno geslo:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "" "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nova datoteka" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Odpakiran bo naslednji del arhiva" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ni datotek" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ni izbranih datotek." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" "Ni dovolj prostora na ciljnem pogonu. Ali naj se opravilo vseeno nadaljuje?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ni dovolj prostora na ciljnem pogonu. Ali naj se prostor ponovno izračuna?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Ni mogoče izbrisati datoteke %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ni podprto." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "" "Below is a preview. You may move cursor and select files to get immediately an " "actual look and feel of the various settings." msgstr "" "Spodaj je okno predogleda. S premikanjem kazalnika in izborom datoteke se " "pokažejo različne prilagoditve nastavitev." #: ulng.rsmsgpassword msgid "Password:" msgstr "Geslo:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Gesli sta različni!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Vnesite geslo:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Geslo (požarni zid):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Ponovno vnesite geslo za overitev:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Dodaj %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Nastavitve" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Izbriši %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Shranjen predmet \"%s\" že obstaja. Ali naj se prepiše?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "Napaka izvajanja ukaza (%s)" #: ulng.rsmsgpromptaskingfilename #, fuzzy msgid "Filename for dropped text:" msgstr "Izpisano besedilo" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "Vnos imena tega meni" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "" "Ali naj se izbrani predmeti preimenujejo oziroma premaknejo (%d predmetov)?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Ali naj se predmet \"%s\" preimenuje oziroma premakne?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Za uveljavitev sprememb je treba program ponovno zagnati." #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Izbranih: %s od %s, datoteke: %d od %d, mape: %d od %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "Izbor izvedljive datoteke za" #: ulng.rsmsgselectonlychecksumfiles msgid "Please select only checksum files!" msgstr "Izbrati je treba le datoteko nadzorne vsote!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Izberite mesto za naslednji del arhiva" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Določi oznako dela arhiva" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Posebne mape" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Dodaj pot iz dejavnega okna" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Dodaj pot iz nedejavnega okna" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Prebrskaj in uporabi izbrano pot" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Uporabi okoljske spremenljivke" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Programska pot DC ..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Pot do okoljske spremenljivke ..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Uporabi pot kot absolutno pot" #: ulng.rsmsgspecialdirmkdcrel #, fuzzy msgid "Make relative to Double Commander special path..." msgstr "Programska pot DC ..." #: ulng.rsmsgspecialdirmkenvrel #, fuzzy msgid "Make relative to environment variable..." msgstr "Pot do okoljske spremenljivke ..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Uporabi posebno pot ..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Preimenuj zavihek" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novo ime zavihka:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ciljna pot:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Napaka: ni mogoče najti nastavitvene datoteke programa Total Commander:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Napaka: ni mogoče najti izvedbene datoteke programa Total Commander:\n" "%s\n" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Napaka: program Total Commander je zagnan, kar pa za to dejanje ne sme biti.\n" "Zaprite program ali prekličite opravilo\n" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave #, fuzzy msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Vpis mesta in imena datoteke, kamor naj se shrani seznam hitrih map" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "\"%s\" je kopirano v odložišče" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Prišlo je do napake med shranjevanjem orodne vrstice!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Najdi datoteko \"*.toolbar\" za uvoz" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Najdi datoteko \"*.bar\" za uvoz" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" "Orodna vrstica je spremenjena. Ali želite podatke shraniti pred končanjem?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Vpišite mesto in ime datoteke orodne vrstice za obnovitev" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Shranjeno.\n" "Ime orodne vrstice: %s'\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Izbranih je preveč datotek." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Nedoločeno" #: ulng.rsmsgurl msgid "URL:" msgstr "Naslov URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "<brez pripone>" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "<brez imena>" #: ulng.rsmsgusername msgid "User name:" msgstr "Uporabniško ime:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Uporabniško ime (požarni zid):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Oznaka dela arhiva:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Velikost dela arhiva:" # This should be multiple plural !!!! #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Ali naj se izbrane datoteke oziroma mape neobnovljivo izbrišejo (%d)?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Ali naj se \"%s\" neobnovljivo izbriše?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "z" #: ulng.rsmulrenfilenamestylelist msgid "" "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word " "Uppercase;" msgstr "" "Brez spremembe;VELIKE ČRKE;male črke;Prva črka je velika;Prva Črka Vsake Besede " "Je Velika;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Preklicano" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "Izračunavanje nadzorne vsote" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "Izračunavanje nadzorne vsote v \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "Izračunavanje nadzorne vsote \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Preračunavanje" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Preračunavanje \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Združevanje" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Združevanje datotek iz \"%s\" v \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopiranje" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopiranje iz \"%s\" v \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopiranje \"%s\" v \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Ustvarjanje mape" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Ustvarjanje mape \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Brisanje" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Brisanje v \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Brisanje \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Izvajanje" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Izvajanje \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Poteka odpakiranje" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Odpakitanje iz \"%s\" v \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Končano" #: ulng.rsoperlisting msgid "Listing" msgstr "Izpisovanje" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Izpisovanje seznama \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Premikanje" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Premikanje iz \"%s\" v \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Premikanje \"%s\" v \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ni začeto" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakiranje" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakiranje iz \"%s\" v \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Pakiranje \"%s\" v \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "V premoru" #: ulng.rsoperpausing msgid "Pausing" msgstr "V premoru" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "V vrsti" #: ulng.rsoperrunning msgid "Running" msgstr "Zagnano" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Nastavljanje lastnosti" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Nastavljanje lastnosti v \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Nastavljanje lastnosti \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Razdeljevanje" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Razdeljevanje \"%s\" v \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Začenjanje" #: ulng.rsoperstopped msgid "Stopped" msgstr "Zaustavljeno" #: ulng.rsoperstopping msgid "Stopping" msgstr "Zaustavljanje" #: ulng.rsopertesting msgid "Testing" msgstr "Preizkušanje" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Preizkušanje v \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Preizkušanje \"%s\"" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "Preverjanje nadzorne vsote" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "Preverjanje nadzorne vsote \"%s\"" #: ulng.rsoperverifyingchecksumof msgid "Verifying checksum of \"%s\"" msgstr "Preverjanje nadzorne vsote" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Čakanje na dostop do vira datoteke." #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Čakanje na odziv uporabnika" #: ulng.rsoperwiping msgid "Wiping" msgstr "Neobnovljivo brisanje" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Neobnovljivo brisanje v \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Neobnovljivo brisanje \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Izvajanje opravila" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "dodaj na začetek;dodaj na konec;pametno dodajanje" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Izbriši:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Odpakiraj brez navedbe poti:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Način razčlenjevanja oblike:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Položaj ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID obsega iskanja:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parameter" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Niz poizvedbe gesla:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Ustvari arhiv za samodejno odpakiranje:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Preizkus:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Ime vrste arhiva:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Vrednost" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Vzpostavi programsko vez vstavka \"%s\" z:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "prvega stolpca;zadnjega stolpca;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "običajno, privzet način;po abecedi (jezik je vedno na prvem mestu)" #: ulng.rsoptdifferframeposition msgid "" "Active frame panel on left, inactive on right (legacy);Left frame panel on " "left, right on right" msgstr "" "Dejavno okno na levi, nedejavno na desni (opuščeno);Levo okno na levi, desno na " "desni" #: ulng.rsoptdisable msgid "Disable" msgstr "Onemogoči" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Omogoči" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Vnos pripone" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Kazalka" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Označeno" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Označeno in v žarišču" #: ulng.rsoptexampletext msgid "Text" msgstr "Besedilo" #: ulng.rsoptfavoritetabswheretoaddinlist #, fuzzy msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "dodaj na začetek;dodaj na konec;pametno dodajanje" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "ločenem oknu;skrčenem ločenem oknu;oknu opravil" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "plavajoče;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "" "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this " "setting." msgstr "" "Bližnjica %s za ukaz cm_Delete bo vpisana, zato jo bo mogoče uporabiti za " "povrnitev te nastavitve." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Dodaj hitro tipko za %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Dodaj bližnjico" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Ni mogoče nastaviti tipkovne bližnjice" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Spremeni tipkovno bližnjico" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Ukaz" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "" "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you " "want to change this parameter to use the global setting?" msgstr "" "Tipkovna bližnjica %s za ukaz cm_Delete ima določen parametre, ki prekliče " "nastavitev. Ali želite spremeniti ta parameter za uporabo splošnih nastavitev?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "" "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut " "%s. Do you want to change it?" msgstr "" "Tipkovna bližnjica %s za cm_Delete mora imeti parameter spremenjen tako, da " "ustreza tipkovni bližnjici %s. Ali jo želite spremeniti?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Opis" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Uredi hitro tipko za %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Popravi parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Hitra tipka" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Hitre tipke" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<brez>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Dodaj bližnjico za brisanje datotek" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "" "For this setting to work with shortcut %s, shortcut %s must be assigned to " "cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "" "Za povezavo te možnosti s tipkovno bližnjico %s, mora biti ta določena za " "cm_Delete, vendar je povezana z možnostjo %s. Ali jo želite spremeniti." #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "" "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with " "reversed Shift cannot be assigned. This setting might not work." msgstr "" "Tipkovna bližnjica %s za cm_Delete je tipkovna bližnjica zaporedja ukazov za " "katerega obratnega ukaza ni mogoče določiti. Nastavitev najverjetneje ne bo " "delovala." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Tipkovna bližnjica v uporabi" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Tipkovna bližnjica %s je že v uporabi." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Ali naj se zamenja v %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "uporabljeno za %s v %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "uporabljeno za ta ukaz, vendar z drugačnimi parametri" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Pakirniki" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Samodejno osveževanje" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Obnašanje" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Datotečni pogled" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Barve" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Stolpci" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Nastavitve" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Stolpci po meri" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Seznam hitrih map" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Povleci in spusti" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Gumb seznama pogonov" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "Priljubljeni zavihki" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "Dodatne programske &vezi" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Programske vezi" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Opravila datotek" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Okna datotek" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Pogled datotek" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Vrste datotek" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Zavihki map" #: ulng.rsoptionseditorfoldertabsextra #, fuzzy msgid "Folder tabs extra" msgstr "Zavihki map" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Pisave" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Poudarjalniki" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Hitre tipke" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikone" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Seznam prezrtih datotek in map" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tipke" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Jezik" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Razporeditev" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Dnevnik" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Različne možnosti" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Miška" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Vstavki" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hitro iskanje/Filtriranje" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Orodna vrstica" #: ulng.rsoptionseditortoolbarcomplement #, fuzzy msgid "Complements" msgstr "Opomba" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Orodja" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Orodni namigi" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Brez;Ukazna vrstica;Hitro iskanje;Hitri filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "z desnim gumbom;z levim gumbom;" #: ulng.rsoptnewfilesposition msgid "" "at the top of the file list;after directories (if directories are sorted before " "files);at sorted position;at the bottom of the file list" msgstr "" "na vrhu seznama datotek;za mapami (če so mape razvrščene pred datotekami);na " "mestu razvrščanja;na dnu seznama datotek" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Vstavek %s je že vezan na naslednje pripone datotek:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Dejavno" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ime datoteke" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Ime" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Vpisano za" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&občutljivo;&neobčutljivo" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Datoteke;&Mape;Datoteke &in Mape" #: ulng.rsoptsearchopt msgid "" "&Hide filter panel when not focused;Keep saving setting modifications for next " "session" msgstr "" "&Skrij okno filtra, kadar ni v žarišču;Nadaljuj s shranjevanjem sprememb za " "naslednjo sejo" #: ulng.rsoptsortcasesens msgid "" "not case sensitive;according to locale settings (aAbBcC);first upper then lower " "case (ABCabc)" msgstr "" "ne upošteva velikosti črk;upošteva glede na jezikovno nastavitev sistema " "(aAbBcC);najprej velike, nato male črke (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "" "razvrsti po imenu in najprej pokaži; razvrsti kot datoteke in najprej pokaži; " "razvrsti kot datoteke" #: ulng.rsoptsortmethod msgid "" "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "abecedno, upoštevajoč znakovne naglase;naravno, številčno in abecedno" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "zgoraj;spodaj;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "&Ločilnik;&Notranji ukaz;&Zunanji ukaz;&Meni" #: ulng.rsopttypeofduplicatedrename msgid "" "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - " "filename(x).ext" msgstr "" "DC opuščen slog - Kopija (x) ime_datoteke.pri;Windows - ime_datoteke(x).pri;" "Skrčeno - ime_datoteke(x).pri" #: ulng.rsoptupdatedfilesposition msgid "" "don't change position;use the same setting as for new files;to sorted position" msgstr "" "ne spremeni mesta;uporabi enake nastavitve kot za nove datoteke;na razvrščeno " "mesto" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Datoteke: %d; Mape: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Ni mogoče spremeniti dovoljenj dostopa za \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Lastnika \"%s\" ni mogoče spremeniti." #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Datoteka" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mapa" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Imenovan cevovod" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Ne" #: ulng.rspropssocket msgid "Socket" msgstr "Vtič" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Posebna bločna naprava" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Posebna znakovna naprava" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Simbolna povezava" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "neznana vrsta" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Da (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Rezultati iskanja" #: ulng.rssearchstatus msgid "SEARCH" msgstr "Iskanje" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<neimenovana predloga>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Izbor mape" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Pokaži pomoč za %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Vse" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "Kategorija" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "Stolpec" #: ulng.rssimplewordcommand msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Ukaz" #: ulng.rssimplewordfilename msgid "Filename" msgstr "Ime datoteke" #: ulng.rssimplewordfiles msgid "files" msgstr "datoteke" #: ulng.rssimplewordparameter msgid "Param" msgstr "Parametri" #: ulng.rssimplewordpreview msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Predogled" #: ulng.rssimplewordresult msgid "Result" msgstr "Rezultat" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "Shranjeno!" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "Delovna mapa" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bajti" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabajti" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobajti" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabajti" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabajti" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Datoteke: %d, Mape: %d, Velikost: %s (%s bajtov)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Ciljne mape ni mogoče ustvariti!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Nepravilen zapis velikosti datoteke!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Ni mogoče razdeliti datoteke!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Število delov presega vrednost 100! Ali naj se opravilo veeno izvede?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Izbor mape:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Napaka med ustvarjanjem simbolne povezave." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Privzeto besedilo" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Običajno besedilo" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "dni" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "ure" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "minute" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "meseci" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "sekunde" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "tedni" #: ulng.rstimeunityear msgid "Year(s)" msgstr "leta" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "Preimenuj priljubljene zavihke" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Primerjalnik" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Urejevalnik" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Napaka med odpiranjem primerjalnika" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Napaka odpiranja urejevalnika" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Napaka odpiranja terminala" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Napaka odpiranja pregledovalnika" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Pregledovalnik" #: ulng.rsunhandledexceptionmessage msgid "" "Please report this error to the bug tracker with a description of what you were " "doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "" "Pošljite poročilo napake s podrobnim opisom in datoteko: %s. Pritisnite %s za " "nadaljevanje ali pa %s za končanje programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "Obe okni, od dejavne proti nedejavni" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "Obe okni, z leve proti desni" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "Pot okna" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "Le ime datoteke brez pripone" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "Polno ime datoteke (pot in ime)" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "Pomoč z uporabo \"%\" spremenljivk" #: ulng.rsvarinputparam msgid "" "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "Levo okno" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "Začasno ime datoteke seznama imen datotek" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "Začasno ime datoteke popolnega seznama imen datotek (pot in ime datoteke)" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "Začasno ime datoteke seznama imen datotek z relativno potjo" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "Le pripona datoteke" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "Le ime datoteke" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "Drug primer možnosti" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "Pot s končnim ločilnikom" #: ulng.rsvarpercentchangetopound msgid "" "From here to the end of the line, the percent-variable indicator is the \"#\" " "sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "Vrne znak za odstotek" #: ulng.rsvarpoundchangetopercent msgid "" "From here to the end of the line, the percent-variable indicator is back the \"%" "\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "%[Zahtevaj uporabniške parametre;Predlagaj privzete vrednosti]" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "Ime datoteke z relativno potjo" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "Desno okno" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "Pokaži ukaz pred izvedbo" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "%[Enostavno sporočilo]" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "Prikazano bo enostavno sporočilo" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "Dejavno okno (vir)" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "Nedejavno okno (cilj)" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "Ukazi bodo izvršeni v terminalu, ki bo po izvajanju ostal odprt" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "Poti bodo zapisane s končnim ločilnikom (privezeto)" #: ulng.rsvarwillnotbequoted #, fuzzy msgid "Filenames will not be quoted from here" msgstr "Ali %s iz %s pripada sem?" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "Ukazi bodo izvršeni v terminalu, ki bo po izvajanju končan" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "Poti bodo zapisane brez končnega ločilnika (privzeto)" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Omrežje" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Pregledovalnik programa Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "Slaba kakovost" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Nabor znakov" #: ulng.rsviewimagetype msgid "Image Type" msgstr "Vrsta slike" #: ulng.rsviewnewsize msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova velikost" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s ni mogoče najti!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "z zunanjim pregledovalnikom" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "z notranjim pregledovalnikom" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "Število zamenjav: %d" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "Zamenjava ni bila izvršena." #~ msgctxt "tfrmeditor.acteditfind.caption" #~ msgid "&Find" #~ msgstr "&Najdi" #~ msgid "Configure toolbar" #~ msgstr "Nastavi orodno vrstico" #~ msgid "File &Associations..." #~ msgstr "Programske &vezi ..." #~ msgctxt "TFRMMAIN.MNUCMDCONFIGDIRHOTLIST.CAPTION" #~ msgid "Directory Hotlist" #~ msgstr "Seznam hitrih map" #~ msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" #~ msgid "&Options" #~ msgstr "&Možnosti" #~ msgid "Pr" #~ msgstr "V razmerju" #~ msgid "Add..." #~ msgstr "Dodaj ..." #~ msgid "Delete..." #~ msgstr "Izbriši ..." #~ msgid "Insert..." #~ msgstr "Vstavi ..." #~ msgid "Sort..." #~ msgstr "Razvrsti ..." #~ msgid "Always expand tree" #~ msgstr "Vedno pokaži razširjeno" #~ msgid "Other options" #~ msgstr "Druge možnosti" #~ msgid "Collapse all" #~ msgstr "Zloži vse veje" #~ msgid "...current level of item(s) selected only" #~ msgstr "... le trenutno raven izbranih predmetov" #~ msgid "Open all branches" #~ msgstr "Odpri vse veje" #~ msgid "...everything, from A to Z!" #~ msgstr "... vse od A do Ž!" #~ msgid "...single group of item(s) only" #~ msgstr "... le eno skupino predmetov" #~ msgid "Sort single group of item(s) only" #~ msgstr "Razvrsti le eno skupino predmetov" #~ msgid "...content of submenu(s) selected, no sublevel" #~ msgstr "... le vsebino izbranega podrejenega menija brez podravni" #~ msgid "...content of submenu(s) selected and all sublevels" #~ msgstr "... vsebino izbranega podrejenega menija in vse podravni" #~ msgid "Run in &terminal:" #~ msgstr "Zaženi v &terminalu:" #~ msgid "Run t&erminal:" #~ msgstr "Odpri &terminal:" #~ msgctxt "TFRMOPTIONSTOOLTIPS.GBSHOWTOOLTIP.CAPTION" #~ msgid "Show tool tip" #~ msgstr "Prikaz orodnih namigov" #~ msgctxt "TFRMOPTIONSTOOLTIPS.RBTOOLTIPALLFILES.CAPTION" #~ msgid "Sho&w tool tip for all files in file panel" #~ msgstr "Pokaži &orodne namige za vse datoteke v oknu" #~ msgctxt "TFRMOPTIONSTOOLTIPS.RBTOOLTIPNONE.CAPTION" #~ msgid "Don't &show" #~ msgstr "&Ne pokaži" #~ msgctxt "TFRMOPTIONSTOOLTIPS.RBTOOLTIPONLYLARGE.CAPTION" #~ msgid "Show &tool tip for files in file panel if truncated" #~ msgstr "Pokaži orodne &namige za datoteke v oknu, če je vrednost prirezana" #~ msgid "Select location and filename of previously saved Directory Hotlist file" #~ msgstr "Izbor mesta in imena datoteka shranjene datoteke seznama hitrih map" #~ msgid "(end of sub menu)" #~ msgstr "(konec podrejenega menija)" #~ msgid "Menu name:" #~ msgstr "Ime menija:" #~ msgid "(separator)" #~ msgstr "(ločilnik)" #~ msgid "Submenu name" #~ msgstr "Ime podrejenega menija" #~ msgid "No" #~ msgstr "Ne" #~ msgctxt "TFRMEXTRACTDLG.BTNCANCEL.CAPTION" #~ msgid "&Cancel" #~ msgstr "&Prekliči" #~ msgctxt "TFRMEXTRACTDLG.BTNHELP.CAPTION" #~ msgid "&Help" #~ msgstr "Pomo&č" #~ msgctxt "TFRMEXTRACTDLG.BTNOK.CAPTION" #~ msgid "&OK" #~ msgstr "V &redu" #~ msgid "Cursor border" #~ msgstr "Okvir kazalke" #~ msgid "Allow Overcolor" #~ msgstr "Dovoli nadbarvo" #~ msgid "Font:" #~ msgstr "Pisava:" #~ msgid "Add column" #~ msgstr "Dodaj stolpec" #~ msgctxt "TFRMCHECKSUMCALC.BTNCANCEL.CAPTION" #~ msgid "&Cancel" #~ msgstr "&Prekliči" #~ msgctxt "TFRMCHECKSUMCALC.BTNOK.CAPTION" #~ msgid "&OK" #~ msgstr "&V redu" #~ msgctxt "TFRMCHECKSUMVERIFY.CAPTION" #~ msgid "Verify check sum..." #~ msgstr "Preveri nadzorne vsote ..." #~ msgid "Save as" #~ msgstr "Shrani kot" #~ msgctxt "tfrmhotdirexportimport.btnselectall.caption" #~ msgid "Import all!" #~ msgstr "Uvozi vse!" #~ msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" #~ msgid "Import selected" #~ msgstr "Uvozi izbrano" #~ msgctxt "tfrmhotdirexportimport.caption" #~ msgid "Select the entries your want to import" #~ msgstr "Izbor vnosov, ki jih želite uvoziti" #~ msgctxt "TFRMLINKER.BTNEXIT.CAPTION" #~ msgid "&Cancel" #~ msgstr "&Prekliči" #~ msgctxt "TFRMLINKER.BTNOK.CAPTION" #~ msgid "&OK" #~ msgstr "V &redu" #~ msgctxt "TFRMLINKER.SPBTNDEL.CAPTION" #~ msgid "&Delete" #~ msgstr "&Izbriši" #~ msgctxt "TFRMLINKER.SPBTNDEL.HINT" #~ msgid "Delete" #~ msgstr "Izbriši" #, fuzzy #~ msgctxt "tfrmmain.actbriefview.caption" #~ msgid "Brief" #~ msgstr "Datotečni pogled" #~ msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" #~ msgid "Directory hotlist" #~ msgstr "Seznam hitrih map" #~ msgctxt "tfrmmain.miline38.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNCOPYCOLUMNSSET.CAPTION" #~ msgid "C&opy" #~ msgstr "K&opiraj" #~ msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNDELCOLUMNSSET.CAPTION" #~ msgid "&Delete" #~ msgstr "&Izbriši" #~ msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNEDITCOLUMNSSET.CAPTION" #~ msgid "&Edit" #~ msgstr "&Uredi" #~ msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.BTNNEWCOLUMNSSET.CAPTION" #~ msgid "&New" #~ msgstr "&Novo" #~ msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.CBBFILESYSTEM.TEXT" #~ msgid "General" #~ msgstr "Splošno" #~ msgid "Con&figure columns for file system:" #~ msgstr "Nastavi &stolpce za datotečni sistem:" #~ msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" #~ msgid "Name, a-z" #~ msgstr "Ime, a-z" #~ msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" #~ msgid "Name, a-z" #~ msgstr "Ime, a-z" #~ msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" #~ msgid "Name:" #~ msgstr "Name:" #~ msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" #~ msgid "Path:" #~ msgstr "Path:" #~ msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" #~ msgid "Target:" #~ msgstr "Target:" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" #~ msgid "directory of the active frame" #~ msgstr "Splošni seznam naslovov (GAL) / Dejavni imenik (AD)" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" #~ msgid "a command" #~ msgstr "Ukaz" #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" #~ msgid "Add a command" #~ msgstr "Dodaj ukaz" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" #~ msgid "a copy of the selected entry" #~ msgstr "Povrni izbrane izbrisane vnose" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" #~ msgid "Add a copy of the selected entry" #~ msgstr "Preimenovanje izbranega vnosa ACL" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" #~ msgid "a separator" #~ msgstr "ločilnik" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" #~ msgid "Add a separator" #~ msgstr "Dodaj _ločilno črto" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" #~ msgid "sub-menu" #~ msgstr "Podrejeni &meni >>" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" #~ msgid "Add sub-menu" #~ msgstr "Dodaj iz menija" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" #~ msgid "directory I will browse to" #~ msgstr "Brskanje po mapi s profili ni mogoče" #~ msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" #~ msgid "Cut" #~ msgstr "Izreži" #~ msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" #~ msgid "delete all!" #~ msgstr "izbriši vse!" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" #~ msgid "selected item" #~ msgstr "%'d izbranih predmetov" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" #~ msgid "Delete selected item" #~ msgstr "Izbriše izbrane predmete" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" #~ msgid "Paste" #~ msgstr "Prilepi" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" #~ msgid "-" #~ msgstr "-" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" #~ msgid "Test resulting menu" #~ msgstr "" #~ "%s\n" #~ "\n" #~ "Izbrali ste predmet menija preizkusa." #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" #~ msgid "directory I will type" #~ msgstr "Vrsta _cilja:" #, fuzzy #~ msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" #~ msgid "Add directory I will type" #~ msgstr "Dodaj vrsto skoka" #~ msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" #~ msgid "Save" #~ msgstr "Shrani" #~ msgctxt "tfrmoptionsfileassoc.btnaddact.caption" #~ msgid "Add" #~ msgstr "Dodaj" #~ msgctxt "tfrmoptionsfileassoc.btnaddext.caption" #~ msgid "&Add" #~ msgstr "&Dodaj" #~ msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" #~ msgid "A&dd" #~ msgstr "D&odaj" #~ msgctxt "tfrmoptionsfileassoc.btndownact.caption" #~ msgid "&Down" #~ msgstr "&Navzdol" #~ msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" #~ msgid "Remo&ve" #~ msgstr "O&dstrani" #~ msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" #~ msgid "Re&move" #~ msgstr "&Odstrani" #~ msgctxt "tfrmoptionsfileassoc.btnremoveicon.caption" #~ msgid "X" #~ msgstr "X" #~ msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" #~ msgid "&Remove" #~ msgstr "&Odstrani" #~ msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" #~ msgid "R&ename" #~ msgstr "&Preimenuj" #~ msgctxt "tfrmoptionsfileassoc.btnupact.caption" #~ msgid "&Up" #~ msgstr "&Gor" #~ msgctxt "tfrmoptionsfileassoc.gbactions.caption" #~ msgid "Actions" #~ msgstr "Dejanja" #~ msgctxt "tfrmoptionsfileassoc.gbexts.caption" #~ msgid "Extensions" #~ msgstr "Razširitve" #~ msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" #~ msgid "File types" #~ msgstr "Vrste datotek" #~ msgctxt "tfrmoptionsfileassoc.gbicon.caption" #~ msgid "Icon" #~ msgstr "Ikona" #~ msgctxt "tfrmoptionsfileassoc.lblaction.caption" #~ msgid "Action:" #~ msgstr "Dejanje:" #~ msgctxt "tfrmoptionsfileassoc.lblcommand.caption" #~ msgid "&Command:" #~ msgstr "&Ukaz:" #~ msgctxt "tfrmoptionsfileassoc.miedit.caption" #~ msgid "Edit" #~ msgstr "Uredi" #~ msgctxt "tfrmoptionsfileassoc.mieditor.caption" #~ msgid "Open in Editor" #~ msgstr "Odpri v urejevalniku" #~ msgctxt "tfrmoptionsfileassoc.mifilename.caption" #~ msgid "File name" #~ msgstr "Ime datoteke" #~ msgctxt "tfrmoptionsfileassoc.mifilepath.caption" #~ msgid "File path" #~ msgstr "Pot datoteke" #~ msgctxt "tfrmoptionsfileassoc.mifullpath.caption" #~ msgid "Full path" #~ msgstr "Polna pot" #~ msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" #~ msgid "Get output from command" #~ msgstr "Pridobi odvod ukaza" #~ msgctxt "tfrmoptionsfileassoc.miopen.caption" #~ msgid "Open" #~ msgstr "Odpri" #~ msgctxt "tfrmoptionsfileassoc.mishell.caption" #~ msgid "Run in terminal" #~ msgstr "Zaženi v terminalu" #~ msgctxt "tfrmoptionsfileassoc.mivfs.caption" #~ msgid "Open in VFS" #~ msgstr "Odpri v VFS" #~ msgctxt "tfrmoptionsfileassoc.miview.caption" #~ msgid "View" #~ msgstr "Pogled" #~ msgctxt "tfrmoptionsfileassoc.miviewer.caption" #~ msgid "Open in Viewer" #~ msgstr "Odpri v pregledovalniku" #~ msgctxt "TFRMOPTIONSFILEPANELSCOLORS.GBEXAMPLE.CAPTION" #~ msgid "Example" #~ msgstr "Primer" #, fuzzy #~ msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" #~ msgid ">>" #~ msgstr ">>" #, fuzzy #~ msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" #~ msgid "View log file content" #~ msgstr "Pregled dnevnika za datoteke ali mape:" #~ msgctxt "tfrmoptionstoolbar.btnstartpath.caption" #~ msgid ">>" #~ msgstr ">>" #~ msgid "Start pat&h:" #~ msgstr "Začetna &pot:" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" #~ msgid "to a Toolbar File (.toolbar)" #~ msgstr "Prikaže orodno vrstico Datoteka" #~ msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" #~ msgid "-" #~ msgstr "-" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" #~ msgid "just after current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" #~ msgid "as first element" #~ msgstr "Postavi na začetek vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" #~ msgid "as last element" #~ msgstr "Postavi na konec vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" #~ msgid "just prior current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" #~ msgid "to add to current toolbar" #~ msgstr "Trenutni predmet za dodajanje projektu" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" #~ msgid "to add to a new toolbar to top toolbar" #~ msgstr "Dodaj novo mapo v projekt." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" #~ msgid "to add to top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" #~ msgid "to replace top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #~ msgctxt "tfrmoptionstoolbar.miimportseparator.caption" #~ msgid "-" #~ msgstr "-" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" #~ msgid "to add to current toolbar" #~ msgstr "Trenutni predmet za dodajanje projektu" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" #~ msgid "to add to a new toolbar to top toolbar" #~ msgstr "Dodaj novo mapo v projekt." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" #~ msgid "to add to top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" #~ msgid "to add to current toolbar" #~ msgstr "Trenutni predmet za dodajanje projektu" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" #~ msgid "to add to a new toolbar to top toolbar" #~ msgstr "Dodaj novo mapo v projekt." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" #~ msgid "to add to top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" #~ msgid "to replace top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" #~ msgid "just after current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" #~ msgid "as first element" #~ msgstr "Postavi na začetek vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" #~ msgid "as last element" #~ msgstr "Postavi na konec vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" #~ msgid "just prior current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #~ msgctxt "tfrmoptionstoolbar.miseparator10.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator11.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator13.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator14.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator6.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator7.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator8.caption" #~ msgid "-" #~ msgstr "-" #~ msgctxt "tfrmoptionstoolbar.miseparator9.caption" #~ msgid "-" #~ msgstr "-" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" #~ msgid "just after current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" #~ msgid "as first element" #~ msgstr "Postavi na začetek vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" #~ msgid "as last element" #~ msgstr "Postavi na konec vrste opravil" #, fuzzy #~ msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" #~ msgid "just prior current selection" #~ msgstr "Samodejno zapolni trenutni izbor" #~ msgctxt "TFRMPACKDLG.BTNCANCEL.CAPTION" #~ msgid "&Cancel" #~ msgstr "&Prekliči" #~ msgctxt "TFRMPACKDLG.BTNHELP.CAPTION" #~ msgid "&Help" #~ msgstr "Pomo&č" #~ msgctxt "TFRMPACKDLG.BTNOK.CAPTION" #~ msgid "&OK" #~ msgstr "V &redu" #~ msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" #~ msgid "Plugin" #~ msgstr "Vstavek" #, fuzzy #~ msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" #~ msgid "Value" #~ msgstr "Vrednost" #~ msgid "(gray field means unchanged value)" #~ msgstr "(sivo polje pomeni nespremenjeno vrednost)" #~ msgctxt "tfrmstartingsplash.caption" #~ msgid "Double Commander" #~ msgstr "Double Commander" #~ msgctxt "tfrmstartingsplash.lblbuild.caption" #~ msgid "Build" #~ msgstr "Izgradi" #~ msgctxt "tfrmstartingsplash.lblfreepascalver.caption" #~ msgid "Free Pascal" #~ msgstr "Free Pascal" #~ msgctxt "tfrmstartingsplash.lbllazarusver.caption" #~ msgid "Lazarus" #~ msgstr "Lazarus" #~ msgctxt "tfrmstartingsplash.lblrevision.caption" #~ msgid "Revision" #~ msgstr "Predelava" #, fuzzy #~ msgctxt "tfrmstartingsplash.lbltitle.caption" #~ msgid "Double Commander" #~ msgstr "Double Commander" #, fuzzy #~ msgctxt "tfrmstartingsplash.lblversion.caption" #~ msgid "Version" #~ msgstr "Različica" #, fuzzy #~ msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" #~ msgid "Compare" #~ msgstr "Primerjava" #, fuzzy #~ msgid "Configuration of Directory Hotlist" #~ msgstr "Določite mapo nastavitvenih datotek" #~ msgid "Command:" #~ msgstr "Ukaz:" #~ msgid "Description" #~ msgstr "Opis" #~ msgid "Hotkeys" #~ msgstr "Hitre tipke" #~ msgctxt "TFRMCOPYDLG.BTNCREATESPECIALQUEUE.CAPTION" #~ msgid "..." #~ msgstr "..." #~ msgid "Show confirmation window for:" #~ msgstr "Zahtevaj potrdila za:" #~ msgid "Duplicated name auto-rename style:" #~ msgstr "Slog samodejnega preimenovanja podvojenih datotek:" #~ msgid "New queue" #~ msgstr "Nova čakalna vrsta" #~ msgid "Queue 1" #~ msgstr "Vrsta 1" #~ msgid "Queue 2" #~ msgstr "Vrsta 2" #~ msgid "Queue 3" #~ msgstr "Vrsta 3" #~ msgid "Queue 4" #~ msgstr "Vrsta 4" #~ msgid "Queue 5" #~ msgstr "Vrsta 5" #, fuzzy #~ msgid "" #~ "Error! Cannot find the TC oncfiguration file:\n" #~ "%s\n" #~ msgstr "Privzeto mesto nastavitvenih datotek je:" #~ msgid "Command" #~ msgstr "Ukaz" #~ msgid "Help" #~ msgstr "Pomoč" #~ msgctxt "tfrmoptionstoolbar.btnbackup.caption" #~ msgid "Backup..." #~ msgstr "Varnostna kopija ..." #~ msgctxt "tfrmoptionstoolbar.btnexport.caption" #~ msgid "Export..." #~ msgstr "Izvozi ..." #~ msgctxt "tfrmoptionstoolbar.btnimport.caption" #~ msgid "Import..." #~ msgstr "Uvozi ..." #, fuzzy #~ msgctxt "tfrmoptionstoolbar.miimporttcbarrepacetop.caption" #~ msgid "to replace top toolbar" #~ msgstr "Ali naj bo prikazana orodna vrstica." #~ msgid "Other..." #~ msgstr "Drugo ..." #~ msgid "&Hide filter panel when not focused" #~ msgstr "&Skrij filter, ko okno ni v žarišču" #~ msgctxt "TFRMHOTDIR.BTNADD.CAPTION" #~ msgid "&Add" #~ msgstr "&Dodaj" #~ msgid "Add &manually" #~ msgstr "&Ročno dodajanje" #~ msgctxt "TFRMHOTDIR.BTNCANCEL.CAPTION" #~ msgid "&Cancel" #~ msgstr "&Prekliči" #~ msgctxt "TFRMHOTDIR.BTNDELETE.CAPTION" #~ msgid "&Delete" #~ msgstr "&Izbriši" #~ msgctxt "TFRMHOTDIR.BTNEDIT.CAPTION" #~ msgid "&Edit" #~ msgstr "&Uredi" #~ msgctxt "TFRMHOTDIR.BTNOK.CAPTION" #~ msgid "&OK" #~ msgstr "&V redu" #~ msgid "Manually add hot path" #~ msgstr "Ročno dodajanje hitre, pogosto uporabljene poti" #~ msgid "Manualy edit hot path" #~ msgstr "Ročno urejanje hitre, pogosto uporabljene poti" #~ msgid "Enter name and path (format name=path):" #~ msgstr "Vnos imena in poti (zapis v obliki ime=pot)" #~ msgid "New title for menu entry:" #~ msgstr "Nov naziv vnosa menija:" #~ msgid "MakeDir" #~ msgstr "Nova mapa" #~ msgctxt "tfrmoptionsmisc.dblthumbnails.caption" #~ msgid "Thumbnails" #~ msgstr "Sličice" #~ msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" #~ msgid "X" #~ msgstr "X" �������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.ca.po������������������������������������������������������������0000644�0001750�0000144�00001210155�12666540554�017202� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2012-08-14\n" "Last-Translator: Jordi Casas <jordi@refugi.com>\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Català\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Tot" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Cancel·la" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "" #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configura vista de columnes a mida" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Fons:" #: tfcolumnssetconf.cbcursorborder.caption #, fuzzy #| msgid "Cursor Límitr" msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Límit del cursor" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Permet sobreexposició" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Usar font i color personal" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Color de text:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Font:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Mida:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Fons 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configura vista no.:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Color de cursor:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Text de cursor:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Color de la selecció:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nom:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Afegeix columna" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Ajusta columna:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Vista prèvia" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Escull plantilla" #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Examina espai lliure" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Copia atributs" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copia propietat" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Copia Data/Hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Corregeix enllaços" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Treu marca de només-lectura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "Exclou carpetes buides" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Segueix enllaços" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "Reserva espai" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usa fitxer de plantilla" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "Quan la carpeta existeixi" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quan el fitxer existeixi" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sense plantilla>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Tanca" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copia al portapapers" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Fet" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Pàgina Web:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisió" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versió" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reinicia" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Escull atributs" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "Fitxer" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Comprimit" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "Carpeta" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Encriptat" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "Ocult" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Només lectura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Escàs" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adhesiu" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Enllaç Simbòlic" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sistema" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "Temporal" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributs NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributs generals" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecució" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Como a text:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriptura" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calcula suma de comprovació" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "Crea un fitxer por cada comprobació" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Desa fitxer de comprobació en:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifica comprobació..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Afegeix" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "C&onnecta" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Esborra" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Connexió" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Connecta a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "Afegeix a la cua" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pcions" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Desa opcions per defecte" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copia fitxer(s)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova cua" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Cua 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Cua 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Cua 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Cua 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Cua 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentari Fitxer/Carpeta" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "Edita comentari per:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codificant:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Autocomparació." #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Mode Binari" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancel·la" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancel·la" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copia bloc dret" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copia bloc dret" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copia bloc esquerra" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copia bloc esquerra" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refà" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecciona &tot" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfà" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Surt" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Primera diferència" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Primera diferència" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignora maj./min." #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignora espais blancs" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Manté desplaçament" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Última diferència" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Última diferència" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferències de línia" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Següent diferència" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Següent diferència" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Obre esquerra..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Obre dreta..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Dibuixa Fons" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Diferència prèvia" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Diferència prèvia" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Recarrega" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recarrega" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Desa" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Desa" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Amnomena i desa..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Anomena i desa..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Desa esquerra" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Desa esquerra" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Desa esquerra com..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Desa esquerra com..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Desa dreta" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Desa dreta" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Desa dreta com..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Desa dreta com..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Compara" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Compara" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificació" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificant" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Compara fitxers" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "esquerra" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "dreta" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Accions" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "Edita" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Codificació" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "Fitxer" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opcions" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&Accepta" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "" #: tfrmedithotkey.cghkcontrols.caption msgid "Only for these controls" msgstr "Només per a aquests controls" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "Paràmetres (Cadascun a una línia diferent)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Dreceres" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Quant a" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuració" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuració" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Retalla" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Esborra" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Cerca" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Cerca" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Cerca següent" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Cerca següent" #: tfrmeditor.acteditgotoline.caption msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Enganxa" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refà" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Refà" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Reemplaça" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Reemplaça" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecciona &tot" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Selecciona tot" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfà" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Desfà" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Tanca" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Surt" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nou" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nou" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Obre" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Obre" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Desa" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Desa" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Anomena i desa..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Anomena i desa" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "De&sa-ho Tot" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Desa-ho tot" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmeditor.menuitem1.caption msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificant" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Obre com" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Anomena i desa" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Fitxer" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "LLenguatge de codificació" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fi de línia" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n5.caption msgctxt "tfrmeditor.n5.caption" msgid "-" msgstr "" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensible a may./min." #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Cerca desde la posició actual" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expresions ®ulars" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Només Selecciona &text" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Només paraules completes" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opció" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Reemplaça amb:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Cerca:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direcció" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Descomprimeix Fitxers" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimeix carpetes si es guardaren" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimeix cada fitxer en una carpeta &separada" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Sobreescriu Fitxers existents" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "A la carpeta:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "Extreu Fitxers:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Contrasenya:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Afegeix" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Afegeix" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Afegeix" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Avall" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Elimina" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Elimina" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Elimina" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Reanomena" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Amunt" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Associacions de fitxers" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Accions" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Tipus de Fitxer" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Acció:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Comandament:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Edita" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Obre amb l'Editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nom del fitxer" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Ruta del fitxer" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Ruta completa" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obtenir sortida de comandament" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Obre" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executa en el terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Obre en VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Visualització" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Obre en el Visualitzador" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Espereu..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nom del fitxer:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "¡Clique a Tanca quan el fitxer temporal es pugui esborrar!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Al panell" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Visualitza tot" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operació actual" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Per:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Configura propietats" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Ajusta a tots els fitxers seleccionats" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Salta aquest fitxer" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Propietats" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Enganxós" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Conté:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executa" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nom" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nom:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nom" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ruta:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Grup" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Últim accès:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificació" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Últim canvi d'estat:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propietari" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Mida:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Enllaç simbòlic:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Tipus:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriu" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propietats" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Afegeix" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "Edita" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Va al fitxer" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "&Última cerca" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nova cerca" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "Desa" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Esborra" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Carrega" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Desa" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Desa amb \"Start in directory\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Si es desa amb \"Start in directory\" es restaurarà quan es carrega la plantilla. Feu-lo servir si voleu corregir la cerca a un determinat directori\"" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "Inicia" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "Cancel·la" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usa plantilla" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Visualització" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Inclou a la llista" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Cerca fitxers" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible a majúscules" #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Data inicial:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "Data final:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "Mida desde:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Mida fins:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Cerca &text en Fitxer" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Seguir l'enllaç simbòlic" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Cerca fitxers que NO continguin el text" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "No més de:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Cerca parts del nom del fitxer" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressions regulars" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Reemplaça text" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Carpetes i &fitxers seleccionats" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "&Hora inicial:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "Hora final:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Usa complement de cerca:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Entreu el nom de les carpetes a excloure de la cerca separats per \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Entreu el nom dels fitxers a excloure de la cerca separats per \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Entreu el nom dels fitxers separats per \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Carpetes" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Fitxers" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Cerca dades" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atributs" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codificació:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Exclou carpetes" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Exclou fitxers" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Màscara de fitxer" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Comença a la &Carpeta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Cerca subcarpetes:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Cerques prèvies:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Elimina de la lista" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostra Tots els ítems trobats" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostra en el Visualitzador" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avançat" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carrega/Desa" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Complements" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultats" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Estàndar" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Cerca" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Cerca" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Sensible majúscules/minúscules" #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Crea enllaç fort" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Ruta on s'enllaçarà" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom de l'enllaç" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "" #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Enllaçador" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Desa a..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nom &fitxer" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Avall" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Avall" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Elimina" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Esborra" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Amunt" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Amunt" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "Quant a" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Afegeix nom de fitxer a la linia d'ordres" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Afegeix ruta i nom de fitxer a la linia d'ordres" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copia ruta a linia d'ordres" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Reduïda" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Visualització reduïda" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Calcula espai &ocupat" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Canviar de Carpeta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Canvia a la carpeta superior" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Canvia a la carpeta arrel" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcula suma de comprovació" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Verifica suma de comprovació" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Esborra fitxer log" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Esborra finestra log" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Tanca tot&es les pestanyes" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "Tanca &pestanya" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Següent línia d'ordres" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Estableix línia d'ordres per al proper comandament a historial" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Línia de comandament prèvia" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Establir línia d'ordres per al mandat previ a la història" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completa" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Compara per &continguts" #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "Compara carpetes" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Compara carpetes" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostra menú contextual" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copia nom(s) de fitxer(s) amb ruta completa" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copia nom(s) de fitxer(s) al portapapers" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copia fitxers sense demanar confirmació" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copia al mateix panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "Copia" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostra espai ocupat" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Retalla" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Esborra" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Història de carpetes" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "Marcadors" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Edita" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Edita comentari..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Edita nou Fitxer" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Edita camp de ruta sobre la llista de fitxers" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Intercanvia panells" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "&Extreu fitxers..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Associacions de fitxers..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Com&bina fitxers..." #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Mostra propietats" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "Divideix fitxer..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Enfocament de linia d'ordres" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Col·locar el cursor sobre el primer fitxer" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Col·locar el cursor sobre l'últim fitxer" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Crea enllaç &fort..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "Continguts" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Panells en horitzontal" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "Teclat" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "esquerra &= dreta" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Obre llista d'unitats a l'esquerra" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carrega selecció del portapapers" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carrega se&lecció des de fitxer..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Crea Dir" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selecciona amb la mateixa extensió" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "&Inverteix selecció" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecciona tot" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Deselecciona gr&up..." #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Selecciona &grup..." #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "&Deselecciona tot" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimitzar finestra" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "&Reanomenat múltiple" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connectant xarxa..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Desconnectant xarxa..." #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connexió &ràpida de xarxa..." #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "&Nova pestanya" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Canvia a la pestanya següen&t" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Obre" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Intenta obrir fitxer" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Obre fitxer de barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Obre carpeta a nova pestanya" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Visualitza unitats de xarxa" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualitzador d'operacions" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "&Opcions..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Comprimeix fitxers..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Fixar posició de separació" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Enganxa" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Canvia a la pestanya &prèvia" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtre ràpid" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Cerca ràpida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panell de vista ràpida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Actualitza" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mou" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mou/Elimina sense confirmació" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Reanomena" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "Re&anomena pestanya" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaura selecció" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Ordre in&vers" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Dret &= Esquerra" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Obre llista d'unitats a la dreta" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Desa selecció" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Desa sel&ecció a fitxer..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Cerca" #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Canvia atributs..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueja carpetes obertes a pestanyes noves" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&loqueja" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueja amb canvis de carpeta permesos" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Obre" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Obre usant les associacions del sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostra menú de botons" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostra històrial de linia d'ordres" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menú" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostra Ocults/sistema" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Ordena per atributs" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Or&dena per data" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Ordena per extensió" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Ordena per nom" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Ordena per mida" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Habilita/deshabilita ignorar llista per no mostrar noms de Fitxer" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Crea e&nlaç simbòlic..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destinació = Origen" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Comprova fitxer(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniatures" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visualització en miniatures" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Carpeta sota el cursor a l'esquerra" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Carpeta sota el cursor a la dreta" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deselecciona tot amb la mateixa extensió" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Visualització" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostra hstòria de las direccions visitades per vista activa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Va a l'entrada següent" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Va a la entrada prèvia" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Visita el lloc web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Destrueix" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Surt" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Carpeta" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Esborra" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostra carpeta actual del panell dret al esquerra" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Va a la carpeta d'usuari" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Va a la carpeta arrel" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Va a la carpeta superior" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Carpetes freqüents" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostra la carpeta actual del panell esquerra al dret" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Ruta" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancel·la" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copia..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Crea enllaç" #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "" #: tfrmmain.miline37.caption msgctxt "tfrmmain.miline37.caption" msgid "-" msgstr "" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Neteja" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "oculta" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecciona tot" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mou..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Crea enllaç Simbòlic" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opcions de pestanya" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Restaura" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Inicia" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Ordres" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguració" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "&Fitxers" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Selecció" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Xarxa" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Visualització" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "Opcions" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Pestanyes" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Retalla" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Esborra" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Edita" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Enganxa" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Accepta" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Tecles ràpides" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "Defineix..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "O escull tipus de selecció predefinida:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nova carpeta" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "Nom de la nova carpeta:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "" #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Nova Mida" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Alt :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualitat de compresió jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ample:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "Alt" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ample" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Tanca" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Esborra" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Carrega" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Reanomena" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Restaura" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Desa" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Reanomenat múltiple" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Permet" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Expressions regulars" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Usa substitució" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E]xtensió" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Comptador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Cerca i Reemplaçar" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registre de resultat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Màscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Configuració" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "Extensió" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "Cerca..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "Interval" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "Nom" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Reemplaça..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "Número inicial" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Amplada" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C]omptador" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Dia" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex]xtensió" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:x]xtensió" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[H] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[Mi]nut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[Mo]->Mes" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mes (2 digits)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nom del mes (abreujat, e.g., \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nom del mes (llarg, e.g., \"january\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N]om" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx]om" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:x]om" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensió..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nom..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Complement" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[S]egon" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y]->Any" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Any (4 dígits)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Nom antic" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nou nom de fitxer" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Ruta" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Escull aplicació" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Personalitza comandament" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Desa associació" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Estableix aplicació seleccionada com a acció per defecte" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Tipus de fitxer a obrir: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Noms de fitxers múltiples" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption #, fuzzy #| msgid "Múltiple URIs" msgid "Multiple URIs" msgstr "Múltiples URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nom de fitxer simple" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Simple URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "Aplica" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opcions" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Seleccioneu si us plau una de les subpàgines. Aquesta no conté paràmetres configurables" #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "tfrmoptionsarchivers.btnautoconfig.caption" msgid "A&uto Configure" msgstr "Configuració automàtica" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsarchivers.btnmultiarcadd.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsarchivers.btnmultiarcapply.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsarchivers.btnmultiarcdelete.caption" msgid "D&elete" msgstr "Esborra" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsarchivers.btnmultiarcrename.caption" msgid "&Rename" msgstr "Reanomena" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "tfrmoptionsarchivers.chkmultiarcdebug.caption" msgid "De&bug mode" msgstr "Mode de depuració" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "tfrmoptionsarchivers.chkmultiarcenabled.caption" msgid "E&nabled" msgstr "Habilita" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "tfrmoptionsarchivers.chkmultiarcoutput.caption" msgid "S&how console output" msgstr "Mostra sortida de consola" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "tfrmoptionsarchivers.gbarchiveroptions.caption" msgid "Options" msgstr "Opcions" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "tfrmoptionsarchivers.lblarchiveadd.caption" msgid "Add&ing:" msgstr "Afegeix:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "tfrmoptionsarchivers.lblarchiveextension.caption" msgid "E&xtension:" msgstr "Extensió:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "tfrmoptionsarchivers.lblarchiveextract.caption" msgid "Ex&tract:" msgstr "Extreu:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "tfrmoptionsarchivers.lblarchivelist.caption" msgid "&List:" msgstr "Llista:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "tfrmoptionsarchivers.lblarchivelistend.caption" msgid "Listing &finish (optional):" msgstr "Acaba llistat (opcional):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "tfrmoptionsarchivers.lblarchivelistformat.caption" msgid "Listing for&mat:" msgstr "Format de llistat:" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "tfrmoptionsarchivers.lblarchiveliststart.caption" msgid "Listin&g start (optional):" msgstr "Inicia llistat (opcional):" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "tfrmoptionsarchivers.lblarchiver.caption" msgid "Arc&hiver:" msgstr "Arxivador:" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "tfrmoptionsarchivers.lbldescription.caption" msgid "De&scription:" msgstr "Descripció:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Addicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Quan canvia la mida, la data o els atributs" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "Per les rutes següents i les seves subcarpetes:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "tfrmoptionsautorefresh.cbwatchfilenamechange.caption" msgid "When &files are created, deleted or renamed" msgstr "Quan es creen fitxers, s'esborren o es reanomenen" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Quan l'aplicació està en segon pla" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Deshabilita actualizació automàtica" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Actualitza la lista de fitxers" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "tfrmoptionsbehavior.cbalwaysshowtrayicon.caption" msgid "Al&ways show tray icon" msgstr "Mostra sempre icona de la safata" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Oculta automàticament unitats no carregades" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Mou la icona a la safata del sistema quan es minimitza" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "tfrmoptionsbehavior.cbonlyonce.caption" msgid "A&llow only one copy of DC at a time" msgstr "Només una còpia de Double Commander oberta" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aquí podeu introduir una o més unitats o punts de muntatge, separats per \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Llista &negra d'unitats" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "tfrmoptionscolumnsview.cbcuttexttocolwidth.caption" msgid "Cut &text to column width" msgstr "Ajusta text a l'amplada de columna" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "tfrmoptionscolumnsview.cbgridhorzline.caption" msgid "&Horizontal lines" msgstr "Línies horitzontals" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "tfrmoptionscolumnsview.cbgridvertline.caption" msgid "&Vertical lines" msgstr "Línies verticals" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "tfrmoptionscolumnsview.chkautofillcolumns.caption" msgid "A&uto fill columns" msgstr "Omple automàticament les columnes" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostra la graella" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Mida automàtica de les columnes" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "tfrmoptionscolumnsview.lblautosizecolumn.caption" msgid "Auto si&ze column:" msgstr "Mida automàtica de columna:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "Edita" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "tfrmoptionsconfiguration.cbcmdlinehistory.caption" msgid "Co&mmand line history" msgstr "Historial d'ordres" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "tfrmoptionsconfiguration.cbdirhistory.caption" msgid "&Directory history" msgstr "Historial de carpetes" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "tfrmoptionsconfiguration.cbfilemaskhistory.caption" msgid "&File mask history" msgstr "Historial de màscares" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "tfrmoptionsconfiguration.chksaveconfiguration.caption" msgid "Sa&ve configuration" msgstr "Desa configuració" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "tfrmoptionsconfiguration.chksearchreplacehistory.caption" msgid "Searc&h/Replace history" msgstr "Història de Cerca/Reemplaçar" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "tfrmoptionsconfiguration.gblocconfigfiles.caption" msgid "Location of configuration files" msgstr "Situació dels fitxers de configuració" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "tfrmoptionsconfiguration.gbsaveonexit.caption" msgid "Save on exit" msgstr "Desa en Sortir" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "tfrmoptionsconfiguration.lblcmdlineconfigdir.caption" msgid "Set on command line" msgstr "Defineix linia d'ordres" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "tfrmoptionsconfiguration.rbprogramdir.caption" msgid "P&rogram directory (portable version)" msgstr "Carpeta del programa (versió portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "tfrmoptionsconfiguration.rbuserhomedir.caption" msgid "&User home directory" msgstr "Carpeta d'usuari" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tot" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Esborra" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "" #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nou" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Anomena i desa" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Desa" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permet sobreexposició" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "General" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy #| msgid "Cursor Límitr" msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Límit del cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fons:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fons 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "tfrmoptionscustomcolumns.lblconfigcolumns.caption" msgid "Con&figure columns view:" msgstr "Configura columnes per a sistema de fitxers:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Color de cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Text de cursor:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Mida:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Color de text:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Color de la selecció:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Afegeix columna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nom:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Ruta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Retalla" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Enganxa" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Demana confirmació després de deixar anar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostra fitxers del sistema" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostra espai lliure" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostra etiqueta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Llista d'unitats" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Segon pla" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Segon pla" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Desa" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributs d'element" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Primer pla" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Primer pla" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de text" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usa configuració d'esquema local" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "Negreta" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "Cursiva" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Treu barrat" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "Subratllat" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "Inverteix" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Retalla" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Enganxa" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Reanomena" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Afegeix" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "Afegeix" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Avall" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Edita" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Elimina" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Elimina" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "Elimina" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "Reanomena" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Amunt" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Accions" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensions" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipus de Fitxer" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Acció:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Comandament:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paràmetres" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ruta d'inici" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Edita" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Obre amb l'Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obtenir sortida de comandament" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Obre" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executa en el terminal" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Visualització" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Obre en el Visualitzador" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostra finestra de confirmació per a..." #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operació de còpia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operació d'esborrament" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "tfrmoptionsfileoperations.cbdeletetotrash.caption" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "S'envia a la paperera (la tecla majúscula inverteix aquesta selecció)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Esborra l'operació a la paperera" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "tfrmoptionsfileoperations.cbdropreadonlyflag.caption" msgid "D&rop readonly flag" msgstr "Treure marca de només lectura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "&Operació de moviment" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgctxt "tfrmoptionsfileoperations.cbpartialnamesearch.caption" msgid "&Search for part of file name" msgstr "Cerca part del nom del fitxer" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "tfrmoptionsfileoperations.cbprocesscomments.caption" msgid "&Process comments with files/folders" msgstr "Processar comentaris amb Fitxers/carpetes" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostra la pestanya del panell seleccionat en el diàleg de Copia/Mou" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "tfrmoptionsfileoperations.cbskipfileoperror.caption" msgid "S&kip file operations errors and write them to log window" msgstr "Omet errors d'operació amb Fitxers i els escriu en una finestra de registre" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Executant operacions" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Cerca de fitxers" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfície d'usuari" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamany de &buffer per a fitxer d'operacions (en KB)" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostra progrés d'operacions inicialment en" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de passos de neteja" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "tfrmoptionsfileoperations.rbusemmapinsearch.caption" msgid "Use memory mapping for search te&xt in files" msgstr "Usa mapatge en memòria per a cerca de text en fitxers" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "tfrmoptionsfileoperations.rbusestreaminsearch.caption" msgid "&Use stream for search text in files" msgstr "Usa disc per a cerca de text en fitxers" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permet sobreexposició" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "tfrmoptionsfilepanelscolors.cbbuseframecursor.caption" msgid "Use &Frame Cursor" msgstr "Usa cursor emmarcat" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa indicador de gradació" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption" msgid "U&se Inverted Selection" msgstr "Usar selecció invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy #| msgid "Cursor Límitr" msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Límit del cursor" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgid "Drive Free Space Indicator" msgstr "Indicador de l'espai lliure de la unitat" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Fons" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption" msgid "Backg&round 2:" msgstr "Fons 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "tfrmoptionsfilepanelscolors.lblcursorcolor.caption" msgid "C&ursor Color:" msgstr "Color de cursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "tfrmoptionsfilepanelscolors.lblcursortext.caption" msgid "Cursor Te&xt:" msgstr "Text de cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption" msgid "&Brightness level of inactive panel" msgstr "Nivell de brillantor del panell inactiu" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicador de color de fons" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indica color de primer pla" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "tfrmoptionsfilepanelscolors.lblmarkcolor.caption" msgid "&Mark Color:" msgstr "Color de la selecció:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "tfrmoptionsfilepanelscolors.lbltextcolor.caption" msgid "T&ext Color:" msgstr "Color de text:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "No carrega la llista de fitxers fins que s'activi la pestanya" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "tfrmoptionsfilesviews.cbdirbrackets.caption" msgid "S&how square brackets around directories" msgstr "Mostra claudàtors quadrats per a les carpetes" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Realça fitxers nous i actualitzats" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "tfrmoptionsfilesviews.cblistfilesinthread.caption" msgid "Load &file list in separate thread" msgstr "Carrega llista de fitxers en procesos separats" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "tfrmoptionsfilesviews.cbloadiconsseparately.caption" msgid "Load icons af&ter file list" msgstr "Carrega les icones després de la llista de fitxers" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "tfrmoptionsfilesviews.cbshowsystemfiles.caption" msgid "Show s&ystem and hidden files" msgstr "Mostra fitxers Ocults/sistema" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "tfrmoptionsfilesviews.cbspacemovesdown.caption" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Quan es seleccioni Fitxers amb la barra d'espai, pasar al següent Fitxer (com amb <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatant" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Ordenant" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Sensibilitat a les Majúscules" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Format incorrecte" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "tfrmoptionsfilesviews.lbldatetimeformat.caption" msgid "&Date and time format:" msgstr "Format de data i hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Format de mida de fitxer" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "Insereix nou fitxer" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "Ordena carpetes" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "tfrmoptionsfilesviews.lblsortmethod.caption" msgid "&Sort method:" msgstr "Mètode d'ordenament:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Mou fitxers actualitzats" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "Aplica" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Esborra" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Tipus de colors de fitxers (Ordena amb drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryattr.caption" msgid "Category a&ttributes:" msgstr "Atributs de la categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "tfrmoptionsfiletypescolors.lblcategorycolor.caption" msgid "Category co&lor:" msgstr "Color de la categoria:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Màscara de la categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Nom de la categoria:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "tfrmoptionsfonts.lbleditorfont.caption" msgid "&Editor font" msgstr "Font de l'Editor" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "tfrmoptionsfonts.lbllogfont.caption" msgid "&Log font" msgstr "Font de Registre" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "tfrmoptionsfonts.lblmainfont.caption" msgid "Main &font" msgstr "Font Principal" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "tfrmoptionsfonts.lblviewerbookfont.caption" msgid "Viewer&Book Font" msgstr "Font de Vista de Llibre" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "tfrmoptionsfonts.lblviewerfont.caption" msgid "&Viewer font" msgstr "Font de Visualització" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Afegeis drecera" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Esborra drecera" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "Edita drecera" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "tfrmoptionshotkeys.lbfilter.caption" msgid "&Filter" msgstr "Filtre" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "Categories:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Ordres:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "tfrmoptionshotkeys.lblscfiles.caption" msgid "&Shortcut files:" msgstr "Fitxers d'acció ràpida:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comandament" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Tecles ràpides" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descripció" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Tecles ràpides" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Paràmetres" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Controls" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per les rutes següents i les seves subcarpetes:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostra icones per a accions als menús" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "tfrmoptionsicons.cbiconsshowoverlay.caption" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostra icones superposades. Exemple: per enllaços" #: tfrmoptionsicons.cbiconssize.text msgctxt "tfrmoptionsicons.cbiconssize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Desactiva icones especials" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Icones als menús" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "tfrmoptionsicons.gbiconssize.caption" msgid " Icon size " msgstr "Mida d'Icona" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr " Mostra icones a l'esquerra del nom" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "&Tot" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "Totes les associacions + &EXE/LNK (lent)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Sense icones" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "tfrmoptionsicons.rbiconsshowstandard.caption" msgid "Only &standard icons" msgstr "Només icones estàndar" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "tfrmoptionsignorelist.btnaddsel.caption" msgid "A&dd selected names" msgstr "Afegeix noms seleccionats" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Afegeix noms seleccionats amb la ruta completa" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignora (no mostra) els següents fitxers i carpetes:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "Desa a:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Les fletxes esquerra/dreta canvien el directori (Com en Lynux)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Escrivint" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "tfrmoptionskeyboard.lblalt.caption" msgid "Alt+L&etters" msgstr "Al&t+Lletres" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "tfrmoptionskeyboard.lblctrlalt.caption" msgid "Ctrl+Alt+Le&tters" msgstr "&Ctrl+Alt+Lletres" #: tfrmoptionskeyboard.lblnomodifier.caption msgid "&Letters" msgstr "&Lletres" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Botons plans" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "tfrmoptionslayout.cbflatinterface.caption" msgid "Flat i&nterface" msgstr "Interfície plana" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Botons plans" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "tfrmoptionslayout.cbfreespaceind.caption" msgid "Show fr&ee space indicator on drive label" msgstr "Mostra l'espai lliure a l'etiqueta del disc" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "tfrmoptionslayout.cblogwindow.caption" msgid "Show lo&g window" msgstr "Finestra de registre" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Panell d'operació en segon pla" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Progrés en barra de menú" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "tfrmoptionslayout.cbshowcmdline.caption" msgid "Show command l&ine" msgstr "Mostra &línia d'ordres" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "tfrmoptionslayout.cbshowcurdir.caption" msgid "Show current director&y" msgstr "Mostra carpeta actual" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Mostra botons &d'unitats" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "tfrmoptionslayout.cbshowdrivefreespace.caption" msgid "Show free s&pace label" msgstr "Mostra la etiqueta de espai lliure" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostra botó amb llista d'unitats" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "tfrmoptionslayout.cbshowkeyspanel.caption" msgid "Show function &key buttons" msgstr "Mostra botons de tecla de &funció" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "tfrmoptionslayout.cbshowmainmenu.caption" msgid "Show &main menu" msgstr "Mostra menú principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show &button bar" msgstr "Mostra barra de &botons" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostra petita etiqueta d'espai lliure" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Mostra barra de e&stat" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "tfrmoptionslayout.cbshowtabheader.caption" msgid "S&how tabstop header" msgstr "Mostra salts de tabulació" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Mostra &pestanyes de carpetes" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "tfrmoptionslayout.cbtermwindow.caption" msgid "Show te&rminal window" msgstr "Mostra finestra de terminal" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "tfrmoptionslayout.cbtwodiskpanels.caption" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Barra de &botons d'unitats (amplada fixa, sobre llista de fitxers)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr " Aparença de pantalla" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "tfrmoptionslog.cblogarcop.caption" msgid "&Pack/Unpack" msgstr "Comprimeix/Descomprimeix" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "tfrmoptionslog.cblogcpmvln.caption" msgid "Cop&y/Move/Create link/symlink" msgstr "Copia/Mou/Crea enllaç/enllaç simbòlic" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "Esborra" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "tfrmoptionslog.cblogdirop.caption" msgid "Crea&te/Delete directories" msgstr "Crea/Esborra carpetes" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Registra &errors" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "tfrmoptionslog.cblogfile.caption" msgid "C&reate a log file:" msgstr "Crea un Fitxer de registre:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "tfrmoptionslog.cbloginfo.caption" msgid "Log &information messages" msgstr "Registra missatges d'informació" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Registra operacions exito&ses" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "tfrmoptionslog.cblogvfs.caption" msgid "&File system plugins" msgstr "Complements de sistema de fitxers" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Registre de les operacions amb Fitxers" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registre de les operacions" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estat de les operacions" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "Esborra miniatures de fitxers que ja no existeixen" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Sempre va a l'arrel de la unitat quan es canvia d'unitat" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostra missatges d'avís (només botó \"Accepta\")" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Desa miniatures en caché" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniatures" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "píxels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "Mida de les miniatures" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgctxt "tfrmoptionsmouse.cbselectionbymouse.caption" msgid "&Selection by mouse" msgstr "Selecció per ratolí" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Desplaçament" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selecció" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgctxt "tfrmoptionsmouse.lblmousemode.caption" msgid "&Mode:" msgstr "Mode:" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgctxt "tfrmoptionsmouse.rbscrolllinebyline.caption" msgid "&Line by line" msgstr "Número de línies" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgctxt "tfrmoptionsmouse.rbscrolllinebylinecursor.caption" msgid "Line by line &with cursor movement" msgstr "Linia a linia amb moviment de cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgctxt "tfrmoptionsmouse.rbscrollpagebypage.caption" msgid "&Page by page" msgstr "Pàgina a pàgina" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Configura" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Registre" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Elimina" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "&Ajusta" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Permet als complements de cerca l'us d'algoritmes de cerca alternatius o eines externes (com \"locate\", etc.)" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Els complements de compresors són utilitzats per treballar amb Fitxers." #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Permet als complements de contingut mostrar detalls extesos del fitxer com les etiquetes mp3 o en llista de fitxer els atributs d'imatge, o usar-los amb les eines de cerca o de reanomenat múltiple" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Permet als complements de sistema de fitxers accedir a discos inaccessibles pel sistema operatiu o a aparells externs com palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Permet als complements de visionat mostrar fomats de fitxer com imatges, fulles de càlcul, bases de dades, etc. en Visualitza (F3, Ctrl+A)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Actiu" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Complement" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Registrat per" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Nom de fitxer" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Complements de cerca (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Complements de compresors (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Complements de contingut(.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Complements del sistema de Fitxers (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Complements de visionat (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&Començament (el nom ha de començar amb el primer caràcter)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nal (ha de coincidir el últim caràcter abans d'un punt . )" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Opcions" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Coincidència de nom exacte" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Us de Majúscules" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Recerca d'aquests elements" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activa &panell cuando es clica en una de les seves pestanyes" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "&Mostra pestanyes també si n'hi ha només una" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "tfrmoptionstabs.cbtabsconfirmcloseall.caption" msgid "Con&firm close all tabs" msgstr "&Confirma tancament de totes les pestanyes" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgid "&Limit tab title length to" msgstr "&Limita títol pestanya a" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "Mostra les pestanyes bloquejades amb un asterisc *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "&Pestanyes en varies linies" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up obre una nova pestanya en primer pla" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Obre una &nova pestanya al costat de l'actual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "tfrmoptionstabs.cbtabsshowclosebutton.caption" msgid "Show ta&b close button" msgstr "Mostra pestanya de botó de tancament" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Capçaleres de les pestanyes de carpeta" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "caràcters" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgid "Ta&bs position" msgstr "Posició de pestanyes\"" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Botó de clonació" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Esborra" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Edita drecera" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insereix nou botó" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Un altre..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgid "Remove hotke&y" msgstr "Esborra drecera" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botons plans" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Entra paràmetres de comandament, cadascun en una línia separada. Premeu F1 per veure l'ajuda sobre paràmetres" #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Aparença" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Mida de Ba&rra" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Ordres:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Paràmetres" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Drecera" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Icona" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Mida ic&ones" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Comandaments" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "Paràmetres" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Ruta d'inici" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Indicador de funció" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipus de botons" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "tfrmoptionstoolbase.cbtoolskeepterminalopen.caption" msgid "&Keep terminal window open after executing program" msgstr "Manté oberta la finestra del terminal després d'executar el programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "tfrmoptionstoolbase.cbtoolsruninterminal.caption" msgid "&Execute in terminal" msgstr "Executa en el terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption" msgid "&Use external program" msgstr "Programa extern" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "tfrmoptionstoolbase.lbltoolsparameters.caption" msgid "A&dditional parameters" msgstr "Paràmetres addicionals" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "tfrmoptionstoolbase.lbltoolspath.caption" msgid "&Path to program to execute" msgstr "Ruta del programa a executar" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Afegeix" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Aplica" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Esborra" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostra informació emergent" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Camps d'usuari per tipus de fitxer" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Atributs de la categoria:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Màscara de la categoria:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Nom de la categoria:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Visualitza en mode llibre" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Exemple" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption" msgid "&Background color in book viewer" msgstr "Color de segon pla en vista de llibre" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "tfrmoptionsviewer.lblfontcolorviewerbook.caption" msgid "&Font color in book viewer" msgstr "Color de Font en vista de llibre" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "tfrmoptionsviewer.lblnumbercolumnsviewer.caption" msgid "&Number of columns in book viewer" msgstr "Número de columnes en vista de llibre" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configura" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Comprimeix fitxers" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "Crea fitxers separats, u&n per Fitxer/carpeta" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crea fitxer autoe&xtraible" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Encr&iptar" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Mou &original(s) a fitxer Comprimit" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Fitxer de disc &múltiple" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Insereix primer en un fitxer TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Incloure noms de car&petes (només recursiu)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimeix en el fitxer:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressor" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "Tanca" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimeix tot i executa" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimeix i executa" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Propietats del fitxer Comprimit" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributs:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Ratio de compressió:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Mètode:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Mida orginal:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fitxer:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Mida Comprimit:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Temps:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensibilitat a Majúscules" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Carpetes" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Fitxers" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Començament l'acció" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Final de l'acció" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filtre" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Canvi entre recerca i filtre" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Complement" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Tanca" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "A&juda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Accepta" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Canvia atributs" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adhesiu" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Fitxer" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creat:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Ocult" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accedit:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modificat:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Només lectura" #: tfrmsetfileproperties.chkrecursive.caption #, fuzzy #| msgid "Recursive" msgid "Including subfolders" msgstr "Incloent subcarpetes" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propietats de la data" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributs" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grup" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(camp gris significa valor sense canvi)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altres" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietari" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Text:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Execució" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(camp gris significa valor sense canvi)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escriptura" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Separador" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nom de Fitxer" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Mida" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Ruta de desti" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Fitxer orígen" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "Número de parts" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Fet" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisió" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versió" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Accepta" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Crea enllaç Simbòlic" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "Destí (on s'enllaçarà)" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nom de l'enllaç" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Tanca" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Compara" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Mida" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Mida" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nom" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Compara" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Afegeix nou" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancel·la" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Canvia" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Per defecte" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "Accepta" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Elimina" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Connecta complement" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "Detecta tipus de fitxer per contingut" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Podeu Esborrar Fitxers" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Suporta encriptació" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostra com Fitxers normals (oculta icona Comprimida)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Suporta compressió en memòria" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Podeu modificar els fitxers existents" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "El fitxer pot contenir múltiples fitxers" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Podeu crear nous fitxers" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "Suporta la finestra de diàleg amb opcions" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Permet Cerca de text dins dels fitxers" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Descripció:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "Detectar cadena:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Extensió:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Banderes:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Nom:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Complement:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Complement:" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Quant al Visualitzador..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra el missatge Quant a" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Copia fitxer" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "Copia fitxer" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Esborra fitxer" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "Esborra fitxer" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Següent" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Carrega següent fitxer" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Anterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carrega el fitxer previ" #: tfrmviewer.actmirror.caption msgctxt "tfrmviewer.actmirror.caption" msgid "Mirror" msgstr "Mirall" #: tfrmviewer.actmirror.hint msgctxt "tfrmviewer.actmirror.hint" msgid "Mirror" msgstr "Mirall" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Mou fitxer" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "Mou fitxer" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Recarrega" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recarrega fitxer actual" #: tfrmviewer.actrotate180.caption msgctxt "tfrmviewer.actrotate180.caption" msgid "Rotate 180" msgstr "Rotació de 180" #: tfrmviewer.actrotate180.hint msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180" msgstr "Rotació de 180" #: tfrmviewer.actrotate270.caption msgctxt "tfrmviewer.actrotate270.caption" msgid "Rotate 270" msgstr "Rotació de 270" #: tfrmviewer.actrotate270.hint msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate 270" msgstr "Rotació de 270" #: tfrmviewer.actrotate90.caption msgctxt "tfrmviewer.actrotate90.caption" msgid "Rotate 90" msgstr "Rotació de 90" #: tfrmviewer.actrotate90.hint msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate 90" msgstr "Rotació de 90" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Desa com..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Anomena i desa" #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Aprima" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copia" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copia" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Retalla" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Esborra" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Esborra" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realça" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Mirall" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Mou" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Mou" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibuixa" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ulls Vermells" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Canvia mida" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Desfà" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Apropar" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Allunya" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visualitzador" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositives" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Llapis" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Destaca" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pinta" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositives" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Visualització" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Quant a" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Mostra com &Binari" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copia al portapapers" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Edita" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificació" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Surt" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fitxer" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Gràfics" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Mostra com &Hex" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imatge" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Mostra com un llibre" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Mirall" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Complements" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Vista prèvia" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Imprimeix..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Rota" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Desa" #: tfrmviewer.misaveas.caption msgctxt "tfrmviewer.misaveas.caption" msgid "Save As..." msgstr "Anomena i desa..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Cerca" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Cerca següent" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Cerca previ" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Selecciona tot" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmviewer.mistretch.caption msgctxt "tfrmviewer.mistretch.caption" msgid "Stretch" msgstr "Aprima" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Mostra com &Text" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visualització" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Ajusta linies" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Apropa" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Allunyar" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copia al portapapers" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecciona tot" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "Inicia" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Operacions amb Fitxers" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Sempre visible" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Feu \"drag && drop\" per moure operacions entre cues" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmviewoperations.mnucancelqueue.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancel·la" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova cua" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Mostra en finestra destacada" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Posa'l primer a la cua" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Posa'l al darrera de la cua" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Cua" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fora de la cua" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Cua 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Cua 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Cua 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Cua 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Cua 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Mostra en finestra destacada" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Tot en pausa" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Quan el fitxer existeix" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Treballa al fons" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quan el fitxer existeix" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancel·la el filtre ràpid" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancel·la l'operació current" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "El portapapers no conté dades d'una barra d'eines vàlida" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nom" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Mida" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinia" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Text" #: ulng.rsconfcolconfig msgid "Config" msgstr "Config" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Esborra" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Continguts de camps" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mou" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Amplada" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Columna personalitzada" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "S'han completat totes les operacions" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progrès de totes les operacions %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Av&orta" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "Tots" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Afegeix" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancel·la" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continua" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Copia dins" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copia tot a dins" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Surt del programa" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "Ignora-ho tot" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Cap" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Accepta" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "Sobrescriu" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sobr. &Tot" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sobr. antics" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Reanomena" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "Reprèn" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Reintenta" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Omet" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Omet Tots" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Si" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calcula fitxers i carpetes" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calcula suma de comprovació" #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verifica suma de comprovació" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copia fitxer(s)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Esborra fitxer(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mou Fitxer(s)" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pausa" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "Inicia" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Cua" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Velocitat %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, time remaining s%" msgid "Speed %s/s, time remaining %s" msgstr "Velocitat %s/s, temps restant %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Divideix Fitxer" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Destrueix Fitxer(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor intern de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "nou.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nom de fitxer:" #: ulng.rseditnewopen msgid "Open file" msgstr "Obre Fitxer" #: ulng.rseditsearchback msgid "&Backward" msgstr "Enrera" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Cerca" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Endavant" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Reemplaçar" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Defineix plantilla" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s nivell(s)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Tot (profunditat sense límits)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "només carpeta actual" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "¡La carpeta %s no existeix!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Trobat: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Desa platilla de cerca" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nom de plantilla:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Trobats: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Cercant" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Cerca fitxers" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Inicia a" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr " %s de %s bytes lliures" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bytes lliures" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/temps d'acces" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributs" #: ulng.rsfunccomment msgid "Comment" msgstr "Comentari" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Mida comrpimida" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "data/temps de creació" #: ulng.rsfuncext msgid "Extension" msgstr "Extensió" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grup" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Enllaça a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/temps de modificació" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nom" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nom sense extensió" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propietari" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ruta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Mida" #: ulng.rsfunctype msgid "Type" msgstr "Tipus" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Error creant l'enllaç fort" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Copia/mou dialeg" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differ(comparador)" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Cerca fitxers" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualitzador" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Enllaçat complet" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Màscara a deselecció" #: ulng.rsmarkplus msgid "Select mask" msgstr "Màscara de Selecció" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Màscara d'entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configura columnes a mida" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configura aquesta vista de columnes a mida" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Accions" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Edita" #: ulng.rsmnueject msgid "Eject" msgstr "Expulsa" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Munta" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nou" #: ulng.rsmnunomedia msgid "No media available" msgstr "No hi ha cap medi disponible" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Obre" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "Obre amb ..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Un altre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordena" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmunta" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Visualització" #: ulng.rsmsgaccount msgid "Account:" msgstr "Compte:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Paràmetres addicionals per a la linia d'ordres de l'arxivador:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "No es pot copiar/moure un Fitxer \"%s\" dins d'ell mateix" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Impossible canviar a [%s]!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "¿Tanca totes les pestanyes inactives?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Aquesta pestanya (%s) està blocada! La tanco? " #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Copia %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Esborra %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Envia %d Fitxers/carpetes seleccionats a la paperera?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Esborra \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Envia \"%s\" a la paperera?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "No puc enviar \"%s\" a la paperera!¿Ho esborro directament?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disc no disponible" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduiu l'extensió del fitxer:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduiu el nom:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Error de CRC en les dades" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dades corruptes" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "No puc connectar amb el servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "No puc Copiar el fitxer %s a %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ja existeix una carpeta anomenada \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La data %s no es suporta" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "La carpeta %s ja existeix!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funció abortada per l'usuari" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Error tancant el fitxer" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossible Crea el fitxer" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "No hi ha més Fitxers a l'arxiu" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossible Obre el fitxer existent" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Error llegint del fitxer" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Error escrivint en el fitxer" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "No es pot crear la carpeta %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Enllaç no vàlid" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "No s'han trobat Fitxers" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memòria insuficient" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funció no suportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Error en el context del menú de comandament" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Error carregant configuració" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Error de sintaxi en expresió regular!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "No es pot reanomenar el fitxer %s a %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "No es pot desar l'associació" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "No es pot desar el fitxer" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "No es pot fixar atributs per \"%s" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "No es pot fixar data/temps per \"%s" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "No es pot establir el propietari/grup de \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer massa petit" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Massa fitxers per comprimir!" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Format de fitxer desconegut" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nom" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "%s ha canviat, Desa?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "%s existeix ¿sobreescriure" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operacions de fitxer actives" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algunes operacions de fitxer no han acabat encara. Si tanca Double Commander pot perdre dades." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "El fitxer %s s'ha marcat com de només lectura, l'esborro?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La Mida del fitxer de \"%s\" és massa gran per al seu destí!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "La carpeta %s existeix, la sobreescric?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "¿Segueis l'enllaç simbòlic \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Ruta" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nom:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Error a la línia d'ordres" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nom no vàlid" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Format invàlid de fitxer de configuració" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta invàlida" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "La ruta %s conté caràcters prohibits" #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Aquest no és un complement vàlid" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Cita invàlida" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selecció no vàlida" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Carregant la llista de fitxers ..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copia fitxer %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Esborra fitxer %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Error: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Extreu Fitxer %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informació: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crea enllaç %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crea carpeta %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mou Fitxer %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimeix en fitxer %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Elimina carpeta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fet: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crea enllaç Simbòlic %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Examinar la integritat del fitxer %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Contrasenya mestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Per favor, introduiu la contrasenya mestra:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nou Fitxer" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Es descomprimirà el següent volum" #: ulng.rsmsgnofiles msgid "No files" msgstr "No hi ha fitxers" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Cap fitxer seleccionat." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espai insuficient en disc de destí, Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espai insuficient en disc de destí, Reintentar?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Impossible Esborra %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "No implementat" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Contrasenya:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Passwords son diferents" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Per favor, introduiu la contrasenya:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Contrasenya (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Si us plau torneu a escriure el password de verificació" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Afegeix %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configura" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Esborra %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "La configuració \"%s\" ja exiteix.¿Sobreescriure?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Reanomena/Mou %d fitxers/carpetes seleccionats?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Reanomena/Mou \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Per favor, reinicieu Double Commander per aplicar els canvis" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Seleccionat: %s de %s, fitxers: %d de %d, carpetes: %d de %d\"" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Per favor, seleccioneu només fitxers de comprovació" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Escull localització del següent volum" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Posa etiqueta al volum" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Reanomena pestanya" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nom de la nova pestanya:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ruta destí:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Massa fitxers seleccionats." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nom d'usuari:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nom d'usuari (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etiqueta del Volum:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Si us plau, introduiu el nom del volum:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Destrueix %d Fitxers/carpetes seleccionats?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Destrueix \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sense canvis;MAJÚSCULES;minúscules;Primera Majúscula;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Interromput" #: ulng.rsopercalculatingchecksum msgid "Calculating checksum" msgstr "" #: ulng.rsopercalculatingchecksumin msgid "Calculating checksum in \"%s\"" msgstr "" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calculant" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calculant \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopying msgid "Copying" msgstr "Copiant" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copiant \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creant directori" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creant directori \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Esborrant" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Esborrant en \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Esborrant \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Executant" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Executant \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extreient" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Extraient de \"%s\" a \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Finalitzat" #: ulng.rsoperlisting msgid "Listing" msgstr "Llistant" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Llistant \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Movent" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Movent from \"%s\" to \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Movent \"%s\" to \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "No iniciat" #: ulng.rsoperpacking msgid "Packing" msgstr "" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausat" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausant" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "En cua" #: ulng.rsoperrunning msgid "Running" msgstr "Funcionant" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "" #: ulng.rsopersplitting msgid "Splitting" msgstr "" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "" #: ulng.rsoperstarting msgid "Starting" msgstr "Iniciant" #: ulng.rsoperstopped msgid "Stopped" msgstr "Parat" #: ulng.rsoperstopping msgid "Stopping" msgstr "Parant" #: ulng.rsopertesting msgid "Testing" msgstr "" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksum msgid "Verifying checksum" msgstr "" #: ulng.rsoperverifyingchecksumin msgid "Verifying checksum in \"%s\"" msgstr "" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verificació del checksum de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Esperant per accedir al fitxer" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Esperant per la resposta del usuario" #: ulng.rsoperwiping msgid "Wiping" msgstr "Netejant" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Netejant a \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Netejant \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Treballant" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Esborra" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Extreu sense ruta:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Format mode d'anàlisis" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Posició ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Rang de cerca ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Paràmetre" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Pregunta per la contrasenya:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Crea fitxer autoextraible:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Prova:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nom del tipus de fitxer:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valor" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Complement associat \"%s\" con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primer;Últim;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Deshabilita" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Registre" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduir extensió" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Marca" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Marca + Cursor" #: ulng.rsoptexampletext msgid "Text" msgstr "Text" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "finestra diferent; finestra diferent minimitzada; panell d'operacions" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "flotant;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Drecera %s per a cm_Delete es registrarà, així es podrà utilitzar per revertir aquest ajust." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Afegeix drecera per a %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Afegeix accés directe" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "No es pot establir l'accés directe" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Canvia l'accés directe" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comandament" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Drecera %s per a cm_Delete té un paràmetre que anul·la aquesta configuració. Voleu canviar aquest paràmetre per utilitzar la configuració global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Drecera %s per a cm_Delete necessita canviar un paràmetre perquè coincideixi amb l'accés directe %s. El voleu canviar?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descripció" #: ulng.rsopthotkeysedithotkey #, fuzzy,badformat msgid "Edit hotkey for %s" msgstr "Fixa Tecles ràpides" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fixa paràmetres" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Tecles ràpides" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Tecles ràpides" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<res>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Paràmetres" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Tria drecera per esborrar fitxer" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Perque aquesta configuració funcioni amb la drecera %s, la drecera %ss'ha d'assignar a cm_Delete però ja està assignada a %s. Ho voleu canviar?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "La drecera %s per a cm_Delete és una sequènciae de drecera per a la quals una tecla d'accés directe amb la tecla shift invertidat no es pot assignar. Aquesta configuració no funciona." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Drecera en us" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "La Drecera %s ja el fa servir " #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Canviar-lo a %s ?" #: ulng.rsopthotkeysusedby #, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "Usat per %s %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usat per aquest comandament, però amb diferents paràmetres" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Compressors" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Actualitza" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportament" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Reduïda" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Colors" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Columnes" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuració" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Personalitza columnes" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Carpetes freqüents" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag & drop (Arrossega i deixa anar)" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Butó llista d'unitats" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associacions de fitxers" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operacions amb fitxers" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Panells de fitxers" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visualitzadors de fitxers" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipus de fitxers" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Pestanyes de carpeta" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fonts" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Realçats" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Tecles ràpides" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icones" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignora llista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tecles" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Aparença" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Registre" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Varis" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ratolí" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Complements" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Cerca ràpida" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra d'eines" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Eines" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Informació emergent" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Res;Línia de comandaments;Cerca ràpida;Filtre ràpid" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botó esquerra; Botó dret;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "a la part superior de la llista de fitxers;després de directoris (si els directoris s'ordenen abans que els arxius);en la posició ordenada;a la part inferior de la llista de fitxers " #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "El complement %s s'ha assignat ja a la següent extensió:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Actiu" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Ruta del complement" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nom" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrat per a" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensitiu;&No sensitiu" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Fitxers;Di&rectoris;Fitxers &i Directoris" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&amaga el panell de filtre quan no se centra" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "No sensitiu majúscules/minúscules, d'acord amb les opcions locals (aAbBcC); primer majúscules, després minúscules (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "Ordena per nom i mostra primer; ordena com a fitxer i mostra primer; Ordena com a fitxer" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabèticament, considerant accents; Ordre natural: alfabètic i números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Amunt;Avall;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comandament inte&rn;Comandament e&xtern;Men&ú" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "No canvia posició; usa la mateixa configuració per a nous fitxers; a la posició ordenada " #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Fitxers: %d, Carpetes: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "No es pot canviar els drets d'accés per \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "No es pot canviar el Propietari per \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fitxer" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Carpeta" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Caanalització del nom" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "No" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Fitxer de blocs especial" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Fitxer de caràcter especial" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Enllaç simbòlic" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipus desconegut" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Si (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Cerca resultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<Plantilla sense nom" #: ulng.rsselectdir msgid "Select a directory" msgstr "Escull una carpeta" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Mo&stra Ajuda per a %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tot" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comandament" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Vista prèvia" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Fitxers: %d, Carpetas: %d, Mida: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "No s'ha pogut Crea carpeta al destí!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Format de Mida incorrecte!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossible dividir el fitxer!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "La quantitat de parts es superior a 100! ¿Voleu continuar?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Escull carpeta:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Error creant l'enllaç simbòlic." #: ulng.rssyndefaulttext msgid "Default text" msgstr "Text per defecte" #: ulng.rssynlangplaintext msgid "Plain text" msgstr "Text pla" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dia(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mes(es)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segon(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Setmana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Any(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differ(comparador)" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Error obrint comparador" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Error obrint l'Editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Error obrint Terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Error obrint el Visualitzador" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualitzador" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Si us plau, informeu d'aquest error al programador amb una descripcio del que estaveu fent: %sPremeu %s per continuar o %s per avortar el programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Xarxa" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualitzador intern de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificant" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nova Mida" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s no trobat!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.es.po������������������������������������������������������������0000644�0001750�0000144�00001266563�12666540554�017244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-04-01 12:32-0300\n" "Last-Translator: German\n" "Language-Team: German_de_ros\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "X-Native-Language: Español\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Comparando... %d%% (ESC para cancelar)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Archivos encontrados: %d (Idénticos: %d, Diferentes: %d, Unicos izquierda: %d, Unicos derecha: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Izquierda a Derecha: Copiar %d archivos, tamaño total: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Derecha a Izquierda: Copiar %d archivos, tamaño total: %d bytes" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Todo" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "" #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr "" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configurar vista de columnas personalizadas" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "2do Plano:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Borde del cursor" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir sobrecolor" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Usar fuente y color personalizado" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Color de texto:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Fuente:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Tamaño:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "2do Plano 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configurar vista número:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Color de cursor:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Texto en cursor:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Color de selección:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nombre:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Añadir columna" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Personalizar columna:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Vista previa" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Seleccionar plantilla..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption #, fuzzy #| msgid "Check free space" msgid "C&heck free space" msgstr "Co&mprobar espacio libre" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption #, fuzzy #| msgid "Copy attributes" msgid "Cop&y attributes" msgstr "Copiar a&tributos" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption #, fuzzy #| msgid "Copy ownership" msgid "Copy o&wnership" msgstr "Copiar &propietario" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption #, fuzzy #| msgid "Copy date/time" msgid "Copy d&ate/time" msgstr "Copiar fech&a/hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption #, fuzzy #| msgid "Correct links" msgid "Correct lin&ks" msgstr "Corre&gir enlaces" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Quitar marca de sólo lectura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption #, fuzzy #| msgid "Exclude empty directories" msgid "E&xclude empty directories" msgstr "E&xcluir directorios vacíos" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption #, fuzzy #| msgid "Follow links" msgid "Fo&llow links" msgstr "Seguir en&laces" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espacio" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Que hacer cuando no se puede configurar hora, atributos, etc." #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usar plantilla de archivo" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption #, fuzzy #| msgid "When directory exists" msgid "When dir&ectory exists" msgstr "Cuando el dir&ectorio existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption #, fuzzy #| msgid "When file exists" msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Cuando el archi&vo existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption #, fuzzy #| msgid "When cannot set property" msgid "When ca&nnot set property" msgstr "Cuando no se co&nfigura correctamente" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sin plantilla>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiar al portapapeles" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Hecho" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Página Web:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisión" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versión" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reiniciar" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Seleccionar atributos" #: tfrmattributesedit.cbarchive.caption #, fuzzy #| msgid "Archive" msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archivo comprimido" #: tfrmattributesedit.cbcompressed.caption #, fuzzy #| msgid "Compressed" msgid "Co&mpressed" msgstr "Co&mprimido" #: tfrmattributesedit.cbdirectory.caption #, fuzzy #| msgid "Directory" msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Directorio" #: tfrmattributesedit.cbencrypted.caption #, fuzzy #| msgid "Encrypted" msgid "&Encrypted" msgstr "Ci&frado" #: tfrmattributesedit.cbhidden.caption #, fuzzy #| msgid "Hidden" msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Oculto" #: tfrmattributesedit.cbreadonly.caption #, fuzzy #| msgid "Read only" msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Sólo &lectura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption #, fuzzy #| msgid "Sparse" msgid "S&parse" msgstr "Dis&perso" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption #, fuzzy #| msgid "Symlink" msgid "&Symlink" msgstr "Enlace &simbólico" #: tfrmattributesedit.cbsystem.caption #, fuzzy #| msgid "System" msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "Sis&tema" #: tfrmattributesedit.cbtemporary.caption #, fuzzy #| msgid "Temporary" msgid "&Temporary" msgstr "&Temporal" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributos NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributos generales" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Otros" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecución" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmattributesedit.lbltextattrs.caption #, fuzzy #| msgid "As text:" msgid "As te&xt:" msgstr "Como te&xto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Calcular suma de verificación..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Abrir suma de verificación luego de que el trabajo haya sido completado" #: tfrmchecksumcalc.cbseparatefile.caption #, fuzzy #| msgid "Create separate checksum file for each file" msgid "C&reate separate checksum file for each file" msgstr "C&rear suma de verificación por cada archivo" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Guardar archivo(s) de suma de verificación en:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Comprobar suma de verificación..." #: tfrmconnectionmanager.btnadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmconnectionmanager.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmconnectionmanager.btnconnect.caption #, fuzzy #| msgid "Connect" msgid "C&onnect" msgstr "C&onectar" #: tfrmconnectionmanager.btndelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmconnectionmanager.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestor de conexión" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Conectar a:" #: tfrmcopydlg.btnaddtoqueue.caption #, fuzzy #| msgid "Add To Queue" msgid "A&dd To Queue" msgstr "Aña&dir a la cola" #: tfrmcopydlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pciones" #: tfrmcopydlg.btnsaveoptions.caption #, fuzzy #| msgid "Save these options as default" msgid "Sa&ve these options as default" msgstr "Guardar estas opciones por defecto" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiar archivo(s)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nueva cola" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Cola 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Cola 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Cola 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Cola 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Cola 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Guardar Descripción" #: tfrmdescredit.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentario de archivo/carpeta" #: tfrmdescredit.lbleditcommentfor.caption #, fuzzy #| msgid "Edit comment for:" msgid "E&dit comment for:" msgstr "E&ditar comentario para:" #: tfrmdescredit.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Codi&ficación:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Autocomparación" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Modo Binario" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiar bloque derecho" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiar bloque derecho" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiar bloque izquierdo" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiar bloque izquierdo" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Rehacer" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Seleccion&ar todo" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Deshacer" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Salir" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "Primera diferencia" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Primera diferencia" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorar Min./May." #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorar espacios en blanco" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Mantener desplazamiento" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "Ultima diferencia" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Ultima diferencia" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferencias de línea" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "Siguiente diferencia" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Siguiente diferencia" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Abrir izquierda..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Abrir derecha..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pintar 2do. plano" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "Diferencia previa" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Diferencia previa" #: tfrmdiffer.actreload.caption #, fuzzy #| msgid "Reload" msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Recargar" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recargar" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Guardar" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Guardar" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Guardar como..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Guardar como..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Guardar izquierda" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Guardar izquierda" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Guardar izquierda como..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Guardar izquierda como..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Guardar derecha" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Guardar derecha" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Guardar derecha como..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Guardar derecha como..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificación" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificación" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparar archivos" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miencodingleft.caption #, fuzzy #| msgid "Left" msgid "&Left" msgstr "&Izquierda" #: tfrmdiffer.miencodingright.caption #, fuzzy #| msgid "Right" msgid "&Right" msgstr "De&recha" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Acciones" #: tfrmdiffer.mnuedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmdiffer.mnuencoding.caption #, fuzzy #| msgid "Encoding" msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificación" #: tfrmdiffer.mnufile.caption #, fuzzy #| msgid "File" msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Archivo" #: tfrmdiffer.mnuoptions.caption #, fuzzy #| msgid "Options" msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opciones" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Añadir un nuevo atajo a la secuencia" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Remover el último atajo de la secuencia" #: tfrmedithotkey.cghkcontrols.caption msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Sólo para estos controles" #: tfrmedithotkey.lblparameters.caption #, fuzzy #| msgid "Parameters (each in a separate line):" msgid "&Parameters (each in a separate line):" msgstr "&Parámetros (cada uno en línea separada):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Atajos:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "Acerca de" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuración" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Configuración" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Borrar" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Buscar" #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Buscar" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Buscar siguiente" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "Buscar siguiente" #: tfrmeditor.acteditgotoline.caption msgid "Goto Line..." msgstr "Ir a Línea..." #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Pegar" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Rehacer" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Rehacer" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Reemplazar" #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Reemplazar" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Seleccion&ar todo" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Seleccionar todo" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Deshacer" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Deshacer" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "Cerrar" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Salir" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nuevo" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Nuevo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Abrir" #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Abrir" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Guardar" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "Guardar" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Guardar &como..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Guardar como" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "G&uardar todo" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Guardar todo" #: tfrmeditor.caption msgctxt "tfrmeditor.caption" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmeditor.menuitem1.caption msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificación" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Abrir como" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Guardar como" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Archivo" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Resaltado de sintáxis" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fin de línea" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "" #: tfrmeditsearchreplace.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensible a Min./May." #: tfrmeditsearchreplace.cbsearchfromcursor.caption #, fuzzy #| msgid "Search from &caret" msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "Buscar d&esde posición actual" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expresiones ®ulares" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Sólo &texto seleccionado" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Sólo palabras completas" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opción" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Reemplazar con:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Buscar por:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Dirección" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Descomprimir archivos" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimir nombres de ruta si se almacenaron con archivos" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimir cada archivo en un directorio &separado (nombre del archivo)" #: tfrmextractdlg.cboverwrite.caption #, fuzzy #| msgid "&Overwrite existing files" msgid "O&verwrite existing files" msgstr "&Sobrescribir archivos existentes" #: tfrmextractdlg.lblextractto.caption #, fuzzy #| msgid "To the directory:" msgid "To the &directory:" msgstr "En el &directorio:" #: tfrmextractdlg.lblfilemask.caption #, fuzzy #| msgid "Extract files matching file mask:" msgid "&Extract files matching file mask:" msgstr "&Extraer archivos que coinciden con máscara de archivo:" #: tfrmextractdlg.lblpassword.caption #, fuzzy #| msgid "Password for encrypted files:" msgid "&Password for encrypted files:" msgstr "Contraseña para archivos ci&frados:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Añadir" #: tfrmfileassoc.btnaddext.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Añadir" #: tfrmfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmfileassoc.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Abajo" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Remo&ver" #: tfrmfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Re&mover" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "" #: tfrmfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "R&enombrar" #: tfrmfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Arriba" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Asociaciones de archivos" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Acciones" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensiones" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Tipos de archivo" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icono" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Acción:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Comando:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir en editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nombre de archivo" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Ruta del archivo" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Ruta completa" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obtener salida desde comando" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Ejecutar en terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Abrir en VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir en Visor" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Espere..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nombre de archivo:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Desde:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clic en Cerrar cuando el archivo temporal se pueda borrar!" #: tfrmfileop.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "Al &panel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Ver todo" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operación actual:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Desde:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Hacia:" #: tfrmfileproperties.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "De&finir propiedades" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Definir a todos los &archivos seleccionados" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Saltar este archivo" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propiedades" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Otros" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption #, fuzzy #| msgid "Representation in text:" msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecutar" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nombre de archivo" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nombre:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nombre de archivo" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Ruta:" #: tfrmfileproperties.lblgroupstr.caption #, fuzzy #| msgid "Group" msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccess.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Último acceso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificación:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ultimo cambio de estado:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "" #: tfrmfileproperties.lblownerstr.caption #, fuzzy #| msgid "Owner" msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Propietario" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamaño:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption #, fuzzy #| msgid "Symlink:" msgid "Symlink to:" msgstr "Enlace simbólico a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption #, fuzzy msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propiedades" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Añadir" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmfinddlg.btnedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "&Editar" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Ir al archivo" #: tfrmfinddlg.btnlastsearch.caption msgctxt "tfrmfinddlg.btnlastsearch.caption" msgid "&Last search" msgstr "U<ima búsqueda" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nueva búsqueda" #: tfrmfinddlg.btnsavetemplate.caption #, fuzzy #| msgid "Save" msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Guardar" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "Car&gar" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Gu&ardar" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption #, fuzzy #| msgid "Save with starting path" msgid "Sa&ve with \"Start in directory\"" msgstr "Guardar con \"Iniciar en directorio\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint #, fuzzy #| msgid "If starting path if saved then it will be restored when loading template. Use it if you want to fix searching to a certain directory." msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Si se guardo, entonces \"Iniciar en directorio\" será restablecido al cargar plantillas. Uselo si quiere reparar búsqueda a un cierto directorio" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Iniciar" #: tfrmfinddlg.btnstop.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "C&ancelar" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usar plantilla" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Incluir a &lista" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Buscar archivos" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sensible a Min./May." #: tfrmfinddlg.cbdatefrom.caption #, fuzzy #| msgid "Date From:" msgid "&Date from:" msgstr "Fecha &desde:" #: tfrmfinddlg.cbdateto.caption #, fuzzy #| msgid "Date To:" msgid "Dat&e to:" msgstr "F&echa hasta:" #: tfrmfinddlg.cbfilesizefrom.caption #, fuzzy #| msgid "Size from:" msgid "S&ize from:" msgstr "&Tamaño desde:" #: tfrmfinddlg.cbfilesizeto.caption #, fuzzy #| msgid "Size to:" msgid "Si&ze to:" msgstr "Tamaño &hasta:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Buscar &texto en archivo" #: tfrmfinddlg.cbfollowsymlinks.caption #, fuzzy #| msgid "Follow symlinks" msgctxt "tfrmfinddlg.cbfollowsymlinks.caption" msgid "Follow s&ymlinks" msgstr "Seguir enlaces simbólicos" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Buscar archivos que N&O contengan el texto" #: tfrmfinddlg.cbnotolderthan.caption #, fuzzy #| msgid "Not older than:" msgid "N&ot older than:" msgstr "N&o más antiguo que:" #: tfrmfinddlg.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name " msgid "Searc&h for part of file name" msgstr "Buscar partes del nombre del archivo" #: tfrmfinddlg.cbregexp.caption #, fuzzy #| msgid "&Regular expressions" msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expresiones ®ulares" #: tfrmfinddlg.cbreplacetext.caption #, fuzzy #| msgid "Re&place text" msgid "Re&place by" msgstr "Reem&plazar por" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Directorios y archivos seleccionados" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "&Expresiones regulares" #: tfrmfinddlg.cbtimefrom.caption #, fuzzy #| msgid "Time from:" msgid "&Time from:" msgstr "&Hora desde:" #: tfrmfinddlg.cbtimeto.caption #, fuzzy #| msgid "Time to:" msgid "Ti&me to:" msgstr "H&ora hasta:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Usar complemento de búsqueda:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Ingresar nombres de directorios que deberían ser excluídos de la búsqueda separados con \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Ingresar nombres de archivos que deberían ser excluídos de la búsqueda separados con \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Ingresar nombres de archivos con \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Directorios" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Archivos" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Buscar datos" #: tfrmfinddlg.lblattributes.caption msgid "Attri&butes" msgstr "Atri&butos" #: tfrmfinddlg.lblencoding.caption #, fuzzy #| msgid "Encoding:" msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codi&ficación:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xcluir subdirectorios" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excluir archivos" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Máscara de archivos" #: tfrmfinddlg.lblfindpathstart.caption #, fuzzy #| msgid "&Start in directory" msgid "Start in &directory" msgstr "Iniciar en &directorio" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Buscar en su&bdirectorios:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Búsquedas &previas:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Remover de la lista" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostrar todos los ítems encontrados" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostrar en Visor" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanzado" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Cargar/Guardar" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Complementos" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultados" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Estándar" #: tfrmfindview.btnclose.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfindview.btnfind.caption #, fuzzy #| msgid "Find" msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Buscar" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Buscar" #: tfrmfindview.cbcasesens.caption #, fuzzy #| msgid "Case sensitive" msgid "C&ase sensitive" msgstr "Sensible Min./M&ay." #: tfrmhardlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmhardlink.caption #, fuzzy #| msgid "Create hardlink" msgid "Create hard link" msgstr "Crear enlace duro" #: tfrmhardlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino en cual el enlace apuntará" #: tfrmhardlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nombre del en&lace" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "Importar todo!" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "Importar seleccionado" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "Seleccione las entradas que quiere importar" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Cuando cliquea un sub-menú, seleccionara el menú completo" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Mantenga CTRL y haga clic en entradas para seleccionar múltiples" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "" #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Enlazador" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Guardar a..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Item" #: tfrmlinker.lblfilename.caption #, fuzzy #| msgid "File name" msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Nombre de archivo" #: tfrmlinker.spbtndown.caption #, fuzzy #| msgid "Down" msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Aba&jo" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Abajo" #: tfrmlinker.spbtnrem.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Remover" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Borrar" #: tfrmlinker.spbtnup.caption #, fuzzy #| msgid "Up" msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "A&rriba" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Arriba" #: tfrmmain.actabout.caption #, fuzzy #| msgid "About" msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Acerca de" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Añadir nombre de archivo a la línea de comandos" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Añadir ruta y nombre de archivo a la línea de comandos" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiar ruta a la línea de comando" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vista Breve" #: tfrmmain.actcalculatespace.caption #, fuzzy #| msgid "Calculate &Occupied Space..." msgid "Calculate &Occupied Space" msgstr "Calcular espacio &ocupado" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Cambiar directorio" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Cambiar directorio a raiz" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Cambiar Directorio a superior" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Cambiar directorio al raíz" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcular &suma de verificación" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Comprobar suma de &verificación..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Borrar archivo registro" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Borrar ventana registro" #: tfrmmain.actclosealltabs.caption #, fuzzy #| msgid "Remove &All Tabs" msgctxt "tfrmmain.actclosealltabs.caption" msgid "Close &All Tabs" msgstr "Cerrar tod&as las pestañas" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption #, fuzzy #| msgid "&Remove Tab" msgctxt "tfrmmain.actclosetab.caption" msgid "&Close Tab" msgstr "&Cerrar pestaña" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Línea de comando siguiente" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Definir línea de comando a comando próximo en historial" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Línea de comando previa" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Definir línea de comando a comando previo en historial" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vista de columnas" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Comparar por &contenidos" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Comparar directorios" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparar directorios" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Configuración de Lista rápida de Directorios" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostrar menú contextual" #: tfrmmain.actcopy.caption #, fuzzy #| msgid "Copy" msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Copiar todas las &columnas mostradas" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copiar nombre(s) de archivo(s) con la ruta com&pleta" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiar nombre(s) de archivo(s) al p&ortapapeles" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiar archivos sin preguntar por confirmación" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiar en el mismo panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiar" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostrar &espacio ocupado" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Cor&tar" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Historial de directorios" #: tfrmmain.actdirhotlist.caption #, fuzzy #| msgid "Directory &hotlist" msgid "Directory &Hotlist" msgstr "Marcadores de directorios" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption #, fuzzy #| msgid "Edit" msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editar" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editar co&mentario..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editar nuevo archivo" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editar campo de ruta encima de la lista de archivos" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Intercambiar &paneles" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmmain.actextractfiles.caption #, fuzzy #| msgid "Extract files..." msgid "&Extract Files..." msgstr "&Extraer archivos..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "&Asociaciones de archivos..." #: tfrmmain.actfilelinker.caption #, fuzzy #| msgid "Link files" msgid "Com&bine Files..." msgstr "Com&binar archivos..." #: tfrmmain.actfileproperties.caption #, fuzzy #| msgid "Show file properties" msgid "Show &File Properties" msgstr "Mostrar &propiedades de archivo" #: tfrmmain.actfilespliter.caption #, fuzzy #| msgid "Split file" msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividir archivo..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "Vista &plana" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Foco en línea de comandos" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar el cursor sobre el primer archivo" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar el cursor sobre el último archivo" #: tfrmmain.acthardlink.caption #, fuzzy #| msgid "Create hard link..." msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Crear enlace &duro..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Contenidos" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Paneles en &horizontal" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Teclado" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Izquierda &= Derecha" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Abrir lista de unidades en izquierda" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Car&gar selección desde portapapeles" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Cargar se&lección desde archivo..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "&Cargar Pestañas desde Archivo" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Crear Directorio" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Seleccionar todo con la misma e&xtensión" #: tfrmmain.actmarkinvert.caption #, fuzzy #| msgid "Invert Selections" msgid "&Invert Selection" msgstr "&Invertir selección" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Seleccionar todo" #: tfrmmain.actmarkminus.caption #, fuzzy #| msgid "Unselect a group" msgid "Unselect a Gro&up..." msgstr "Deseleccionar gr&upo..." #: tfrmmain.actmarkplus.caption #, fuzzy #| msgid "Select a group" msgid "Select a &Group..." msgstr "Seleccionar &grupo..." #: tfrmmain.actmarkunmarkall.caption #, fuzzy #| msgid "Unselect All" msgid "&Unselect All" msgstr "&Deseleccionar todo" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizar ventana" #: tfrmmain.actmultirename.caption #, fuzzy #| msgid "Multi Rename Tool" msgid "Multi &Rename Tool" msgstr "&Renombrado múltiple" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Conectando a red..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Desconectando de red..." #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Conexión &rápida de red..." #: tfrmmain.actnewtab.caption #, fuzzy #| msgid "&New tab" msgid "&New Tab" msgstr "&Nueva pestaña" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Cambiar a la siguien&te pestaña" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Intentar abrir archivo comprimido" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Abrir barra de archivo" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "A&brir carpeta en nueva pestaña" #: tfrmmain.actopenvirtualfilesystemlist.caption #, fuzzy #| msgid "Open VFS List" msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Abrir lista de &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visor de operaciones" #: tfrmmain.actoptions.caption #, fuzzy #| msgid "Options..." msgid "&Options..." msgstr "&Opciones..." #: tfrmmain.actpackfiles.caption #, fuzzy #| msgid "Pack files..." msgid "&Pack Files..." msgstr "Com&primir archivos..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Fijar posición de separación" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "&Pegar" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Intercambiar a pestaña &previa" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rápido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Búsqueda rápida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Panel de vista rápida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "Actualiza&r" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption #, fuzzy #| msgid "Move" msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mover" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mover/Eliminar sin pedir confirmación" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renombrar" #: tfrmmain.actrenametab.caption #, fuzzy #| msgid "Re&name Tab" msgid "&Rename Tab" msgstr "&Renombrar pestaña" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Restaurar selección" #: tfrmmain.actreverseorder.caption #, fuzzy #| msgid "Reverse order" msgid "Re&verse Order" msgstr "Orden in&verso" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Derecho &= Izquierdo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Abrir lista derecha de unidades" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption #, fuzzy #| msgid "Run Term" msgid "Run &Terminal" msgstr "Ejecutar &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "&Guardar selección" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Guardar sel&ección en archivo..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Guardar Pestañas a Archivo" #: tfrmmain.actsearch.caption #, fuzzy #| msgid "&Search" msgid "&Search..." msgstr "&Buscar..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Cambiar &atributos..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueado con directorios abiertos en nuevas pes&tañas" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "B&loqueado" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueado con &directorios y cambios permitidos" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Abrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Abrir usando asociaciones del sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostrar menú de botones" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostrar historial de línea de comandos" #: tfrmmain.actshowmainmenu.caption #, fuzzy #| msgid "Menu" msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menú" #: tfrmmain.actshowsysfiles.caption #, fuzzy #| msgid "Show hidden/system files" msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostrar archivos oc&ultos/sistema" #: tfrmmain.actsortbyattr.caption #, fuzzy #| msgid "Sort by attrib" msgid "Sort by &Attributes" msgstr "Ordenar por &atributos" #: tfrmmain.actsortbydate.caption #, fuzzy #| msgid "Sort by date" msgid "Sort by &Date" msgstr "Or&denar por fecha" #: tfrmmain.actsortbyext.caption #, fuzzy #| msgid "Sort by extension" msgid "Sort by &Extension" msgstr "Ordenar por &extensión" #: tfrmmain.actsortbyname.caption #, fuzzy #| msgid "Sort by name" msgid "Sort by &Name" msgstr "Ordenar por &nombre" #: tfrmmain.actsortbysize.caption #, fuzzy #| msgid "Sort by size" msgid "Sort by &Size" msgstr "Ordenar por &tamaño" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Habilitar/deshabilitar archivo listado de ignorar para no mostrar nombres de archivo" #: tfrmmain.actsymlink.caption #, fuzzy #| msgid "Create symbolic link..." msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Crear en&lace simbólico..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Sincronizar directorios..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destino &= Origen" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Compro&bar archivo(s) comprimido(s)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vista Miniaturas" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferir directorio bajo cursor a la izquierda" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferir directorio bajo cursor a derecha" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deseleccionar todo con la misma extensión" #: tfrmmain.actview.caption #, fuzzy #| msgid "View" msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Ver" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostrar historial de las rutas visitadas por vista activa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ir a la próxima entrada en historial" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ir a la entrada anterior en historial" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visitar sitio web de Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Destruir" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption #, fuzzy #| msgid "Exit" msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Salir" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Directorio" #: tfrmmain.btnf8.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "tfrmmain.btnleftdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Marcadores de directorios" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostrar directorio actual del panel derecho en el panel izquierdo" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgid "Go to home directory" msgstr "Ir al directorio principal" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgid "Go to root directory" msgstr "Ir al directorio raíz" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgid "Go to parent directory" msgstr "Ir al directorio superior" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Carpetas frecuentes" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr "" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostrar directorio actual del panel izquierdo en el panel derecho" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Ruta" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiar..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Crear enlace..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline10.caption msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "" #: tfrmmain.miline11.caption msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline21.caption msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline23.caption msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline26.caption msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "" #: tfrmmain.miline39.caption msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline40.caption msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Limpiar" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ocultar" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mover..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Crear enlace simbólico..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opciones de pestaña" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Restaurar" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Iniciar" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandos" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguración" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption #, fuzzy #| msgid "Files" msgid "&Files" msgstr "&Archivos" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Seleccionar" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Red" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Mo&strar" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opciones" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "Pes&tañas" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Borrar" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Pegar" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Aceptar" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Ayuda" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Atajos" #: tfrmmaskinputdlg.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaskinputdlg.btndefinetemplate.caption #, fuzzy #| msgid "Define..." msgid "&Define..." msgstr "&Definir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmmaskinputdlg.lblsearchtemplate.caption #, fuzzy #| msgid "Or select predefined selection type:" msgid "O&r select predefined selection type:" msgstr "O seleccione tipo de selección predefinida:" #: tfrmmkdir.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crear directorio nuevo" #: tfrmmkdir.lblmakedir.caption #, fuzzy #| msgid "Input new directory name:" msgid "&Input new directory name:" msgstr "&Ingrese nuevo nombre de directorio:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "" #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "" #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nuevo tamaño" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altura :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Calidad de compresión Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Ancho:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "" #: tfrmmodview.teheight.text msgid "Height" msgstr "Altura" #: tfrmmodview.tequality.text msgid "80" msgstr "" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Ancho" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Cargar" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "" #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Renombrar" #: tfrmmultirename.btnrestore.caption #, fuzzy #| msgid "Reset all" msgid "Reset &all" msgstr "Reinici&ar todo" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Guardar" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Renombrado múltiple" #: tfrmmultirename.cblog.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "Acti&var" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Expresiones regulares" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usar sustitución" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "" #: tfrmmultirename.extension.caption #, fuzzy #| msgid "[E]xtension" msgid "[E] Extension" msgstr "[E] Extensión" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Buscar y Reemplazar" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registro de resultado" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Máscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Preajustes" #: tfrmmultirename.lbext.caption #, fuzzy #| msgid "Extension" msgid "&Extension" msgstr "&Extensión" #: tfrmmultirename.lbfind.caption #, fuzzy #| msgid "Find..." msgid "&Find..." msgstr "&Buscar..." #: tfrmmultirename.lbinterval.caption #, fuzzy #| msgid "Interval" msgid "&Interval" msgstr "&Intervalo" #: tfrmmultirename.lbname.caption #, fuzzy #| msgid "File Name" msgid "File &Name" msgstr "&Nombre de archivo" #: tfrmmultirename.lbreplace.caption #, fuzzy #| msgid "Replace..." msgid "Re&place..." msgstr "Reem&plazar..." #: tfrmmultirename.lbstnb.caption #, fuzzy #| msgid "Start Number" msgid "S&tart Number" msgstr "&Número inicial" #: tfrmmultirename.lbwidth.caption #, fuzzy #| msgid "Width" msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "Anc&ho" #: tfrmmultirename.micounter.caption #, fuzzy #| msgid "[C]ounter" msgid "[C] Counter" msgstr "[C] Contador" #: tfrmmultirename.miday.caption #, fuzzy #| msgid "[D]ay" msgid "[D] Day" msgstr "[D] Día" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Día (2 dígitos)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Día de la semana (corto, ejem., \"lu.\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Día de la semana (largo, ejem., \"lunes\")" #: tfrmmultirename.miextensionx.caption #, fuzzy #| msgid "[Ex]xtension" msgid "[Ex] Character at position x" msgstr "[Ex] Caracter en posición x" #: tfrmmultirename.miextensionxx.caption #, fuzzy #| msgid "[Ex:x]xtension" msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caracteres desde posición x a y" #: tfrmmultirename.mihour.caption #, fuzzy #| msgid "[h]our" msgid "[h] Hour" msgstr "[h] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hora (2 dígitos)" #: tfrmmultirename.miminute.caption #, fuzzy #| msgid "Mi[n]ute" msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minutos (2 dígitos)" #: tfrmmultirename.mimonth.caption #, fuzzy #| msgid "[M]onth" msgid "[M] Month" msgstr "[M] Mes" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mes (2 dígitos)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Mes (corto, ejem., \"Ene\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Mes (largo, ejem., \"Enero\")" #: tfrmmultirename.miname.caption #, fuzzy #| msgid "[N]ame" msgid "[N] Name" msgstr "[N] Nombre" #: tfrmmultirename.minamex.caption #, fuzzy #| msgid "[Nx]ame" msgid "[Nx] Character at position x" msgstr "[Nx] Caracter en posición x" #: tfrmmultirename.minamexx.caption #, fuzzy #| msgid "[Nx:x]ame" msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caracteres desde posición x a y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensión..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nombre..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Complemento" #: tfrmmultirename.misecond.caption #, fuzzy #| msgid "[s]econd" msgid "[s] Second" msgstr "[s] Segundo" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Segundos (2 dígitos)" #: tfrmmultirename.miyear.caption #, fuzzy #| msgid "[Y] Year" msgid "[Y] Year (2 digits)" msgstr "[Y] Año (2 dígitos)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Año (4 dígitos)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Nombre antiguo" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nombre nuevo" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Ruta" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Seleccione una aplicación" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personalizado" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Guardar asociación" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Definir aplicación seleccionada como acción predeterminada" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Tipo de archivo a ser abierto: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Múltiples nombres de archivos" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiple URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nombre de archivo simple" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Simple URI" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplicar" #: tfrmoptions.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Opciones" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Por favor, seleccione una de las subpáginas, esta página no contiene ningún ajuste." #: tfrmoptionsarchivers.btnautoconfig.caption #, fuzzy #| msgid "Auto Configure" msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "A&utoconfigurar" #: tfrmoptionsarchivers.btnmultiarcadd.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionsarchivers.btnmultiarcapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsarchivers.btnmultiarcdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "&Borrar" #: tfrmoptionsarchivers.btnmultiarcrename.caption #, fuzzy #| msgid "Rename" msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Renombrar" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsarchivers.chkmultiarcdebug.caption #, fuzzy #| msgid "Debug mode" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Modo de depuración" #: tfrmoptionsarchivers.chkmultiarcenabled.caption #, fuzzy #| msgid "Enabled" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Acti&vado" #: tfrmoptionsarchivers.chkmultiarcoutput.caption #, fuzzy #| msgid "Show console output" msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Mo&strar salida de consola" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opciones" #: tfrmoptionsarchivers.lblarchiveadd.caption #, fuzzy #| msgid "Add:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Añad&iendo:" #: tfrmoptionsarchivers.lblarchiveextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "E&xtensión:" #: tfrmoptionsarchivers.lblarchiveextract.caption #, fuzzy #| msgid "Extract:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Ex&traer:" #: tfrmoptionsarchivers.lblarchivelist.caption #, fuzzy #| msgid "List:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Listar:" #: tfrmoptionsarchivers.lblarchivelistend.caption #, fuzzy #| msgid "Listing finish (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "&Finalizar listado (opcional):" #: tfrmoptionsarchivers.lblarchivelistformat.caption #, fuzzy #| msgid "Listing format:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "For&mato de listado:" #: tfrmoptionsarchivers.lblarchiveliststart.caption #, fuzzy #| msgid "Listing start (optional):" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Inicio de lista&do (opcional):" #: tfrmoptionsarchivers.lblarchiver.caption #, fuzzy #| msgid "Archiver:" msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Com&presor:" #: tfrmoptionsarchivers.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "De&scripción:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "General" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Cuando tamaño, fecha o atributo&s cambian" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "&Para las siguientes rutas y sus subdirectorios:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption #, fuzzy #| msgid "When files are &created, deleted or renamed" msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Cuando los archi&vos son creados, borrados o renombrados" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Cuando la aplicación está en &2do. plano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Deshabilitar actualización automática" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Actualizar la lista de archivos" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption #, fuzzy #| msgid "Always show tray icon" msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mostrar siempre icono en bande&ja" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption #, fuzzy #| msgid "Automatically hide unmounted devices" msgid "Automatically &hide unmounted devices" msgstr "&Ocultar automáticamente los dispositivos sin montar" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mo&ver icono a bandeja de sistema al minimizar" #: tfrmoptionsbehavior.cbonlyonce.caption #, fuzzy #| msgid "Allow only one copy of DC at a time" msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Permitir só&lo una copia de Double Commander a la vez" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aquí puede ingresar una o más unidades o puntos de montaje, separados por \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Unidades &no permitidas" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Mostrar extensiones de archivos" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "alineado (con Pestaña)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "di&rectamente después de nombre de archivo" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption #, fuzzy #| msgid "Cut text to column width" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBCUTTEXTTOCOLWIDTH.CAPTION" msgid "Cut &text to column width" msgstr "Ajustar &texto al ancho de columna" #: tfrmoptionscolumnsview.cbgridhorzline.caption #, fuzzy #| msgid "Horizontal lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDHORZLINE.CAPTION" msgid "&Horizontal lines" msgstr "Líneas &horizontales" #: tfrmoptionscolumnsview.cbgridvertline.caption #, fuzzy #| msgid "Vertical lines" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CBGRIDVERTLINE.CAPTION" msgid "&Vertical lines" msgstr "Líneas &verticales" #: tfrmoptionscolumnsview.chkautofillcolumns.caption #, fuzzy #| msgid "Auto fill columns" msgctxt "TFRMOPTIONSCOLUMNSVIEW.CHKAUTOFILLCOLUMNS.CAPTION" msgid "A&uto fill columns" msgstr "Rellenar automáticamente columnas" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostrar grilla" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Autoajustar columnas" #: tfrmoptionscolumnsview.lblautosizecolumn.caption #, fuzzy #| msgid "Auto size column:" msgctxt "TFRMOPTIONSCOLUMNSVIEW.LBLAUTOSIZECOLUMN.CAPTION" msgid "Auto si&ze column:" msgstr "Autoa&justar columna:" #: tfrmoptionsconfiguration.btnconfigapply.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsconfiguration.btnconfigedit.caption #, fuzzy #| msgid "Edit" msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption #, fuzzy #| msgid "Command line history" msgctxt "TFRMOPTIONSCONFIGURATION.CBCMDLINEHISTORY.CAPTION" msgid "Co&mmand line history" msgstr "Historial de línea de co&mandos" #: tfrmoptionsconfiguration.cbdirhistory.caption #, fuzzy #| msgid "Directory history" msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Historial de &directorios" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption #, fuzzy #| msgid "File mask history" msgctxt "TFRMOPTIONSCONFIGURATION.CBFILEMASKHISTORY.CAPTION" msgid "&File mask history" msgstr "Historial de &máscaras de archivos" #: tfrmoptionsconfiguration.chksaveconfiguration.caption #, fuzzy #| msgid "Save configuration" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSAVECONFIGURATION.CAPTION" msgid "Sa&ve configuration" msgstr "&Guardar configuración" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption #, fuzzy #| msgid "Search/Replace history" msgctxt "TFRMOPTIONSCONFIGURATION.CHKSEARCHREPLACEHISTORY.CAPTION" msgid "Searc&h/Replace history" msgstr "&Historial de Buscar/Reemplazar" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBLOCCONFIGFILES.CAPTION" msgid "Location of configuration files" msgstr "Ubicación de los archivos de configuración" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgctxt "TFRMOPTIONSCONFIGURATION.GBSAVEONEXIT.CAPTION" msgid "Save on exit" msgstr "Guardar al salir" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Modo de ordenamiento en árbol de izquierda" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgctxt "TFRMOPTIONSCONFIGURATION.LBLCMDLINECONFIGDIR.CAPTION" msgid "Set on command line" msgstr "Fijar en línea de comandos" #: tfrmoptionsconfiguration.rbprogramdir.caption #, fuzzy #| msgid "Program directory (portable version)" msgctxt "TFRMOPTIONSCONFIGURATION.RBPROGRAMDIR.CAPTION" msgid "P&rogram directory (portable version)" msgstr "Di&rectorio del programa (versión portable)" #: tfrmoptionsconfiguration.rbuserhomedir.caption #, fuzzy #| msgid "User home directory" msgctxt "TFRMOPTIONSCONFIGURATION.RBUSERHOMEDIR.CAPTION" msgid "&User home directory" msgstr "Directorio de &usuario" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Todo" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionscustomcolumns.btnfont.caption msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "" #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nuevo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renombrar" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Guardar como" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Guardar" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir sobrecolor" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "General" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Borde del cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "2do Plano:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "2do Plano 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgctxt "TFRMOPTIONSCUSTOMCOLUMNS.LBLCONFIGCOLUMNS.CAPTION" msgid "Con&figure columns view:" msgstr "Con&figurar columnas para sistema de archivos:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Color de cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Texto en cursor:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Fuente:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Tamaño:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Color de texto:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Color de selección:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Añadir columna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Posición de cuadro de panel luego de comparación:" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Añadir..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Borrar..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Ayuda" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Insertar..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Miscelánea..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "Algunas funciones para seleccionar destino apropiado" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Ordenar..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Cuando añada directorio, agregue también destino" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Siempre expandir árbol" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Mostrar sólo variables de entorno válidas" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "En emergente, mostrar [también ruta] " #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "Nombre, a-z" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "Nombre, a-z" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Lista rápida de Directorios (reordenar con arrastrar y soltar)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Otras opciones" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nombre:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Ruta:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "Destino:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "directorio del cuadro activo" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "directorios de los cuadros activos y inactivos" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "un comando" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "Añadir un comando" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "una copia de la entrada seleccionada" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "Añadir una copia de la entrada seleccionada" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "un separador" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "Añadir un separador" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menú" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Añadir sub-menú" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "directorio en el cual se navegará" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Colapsar todo" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...nivel actual de ítem(s) seleccionados solamente" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "actual seleccionado o directorios activos del cuadro activo" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "eliminar todo!" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menú y todos sus elementos" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "solo sub-menú pero mantener elementos" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "ítem seleccionado" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Eliminar ítem seleccionado" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Escanear todas las rutas de directorios calientes para validar el mismo que existe actualmente" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Escanear todas las rutas y destinos de directorios calientes para validar el mismo que existe actualmente" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "a un archivo de Lista Rápida de Directorio (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "al \"wincmd.ini\" de TC (mantener existente)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "al \"wincmd.ini\" de TC (borrando existente)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Ir a info configurar TC" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "Ir a info configurar TC" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "MenúTestDirRápido" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "desde un archivo de Lista Rápida de Directorios (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "desde \"wincmd.ini\" de TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todas las ramificaciones" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Pegar" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Recuperar backup de Lista Rápida de Directorios" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Guardar un backup de Lista Rápida de Directorios actual" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...todo, desde A a la Z!" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...grupo simple de ítem(s) solamente" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ordenar grupo simple de ítem(s) solamente" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...contenido de submenú(s) seleccionado, sin subnivel" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...contenido de submenú(s) seleccionado y todos sus subniveles" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "Resultado del test de menú" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "directorio que escribiré" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "Añadir directorio que escribiré" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Insertar directorio que escribiré" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Agregado desde panel principal:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Desde todos los formatos soportados, preguntar cual se usará cada vez" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Cuando guarda texto Unicode, guardarlo en formato UTF8 (de todos modos será UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Cuando suelta texto, generar automáticamente nombre de archivo (de otra manera le preguntará al usuario)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption #, fuzzy #| msgid "Show confirmation dialog after drop" msgid "&Show confirmation dialog after drop" msgstr "Mo&strar diálogo de confirmación después de soltar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Cuando arrastre y suelte texto dentro de paneles:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Ponga el formato mas deseado en el tope de la lista (usar arrastrar y soltar):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(si el mas deseado no está presente, se tomará el segundo y así sucesivamente)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(no funcionará con alguna aplicación origen, intente destildar si hay problema)" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption #, fuzzy #| msgid "Show file system" msgid "Show &file system" msgstr "Mostrar &sistema de archivos" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption #, fuzzy #| msgid "Show free space" msgid "Show fr&ee space" msgstr "Mostrar &espacio libre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy #| msgid "Show label" msgid "Show &label" msgstr "Mostrar eti&queta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista de unidades" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "&2do. plano" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption #, fuzzy #| msgid "Background" msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "&2do. plano" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Reiniciar" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Guardar" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributos de elemento" #: tfrmoptionseditorcolors.foregroundlabel.caption #, fuzzy #| msgid "Foreground" msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "&1er. plano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption #, fuzzy #| msgid "Foreground" msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "&1er. plano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption #, fuzzy #| msgid "Text-mark" msgid "&Text-mark" msgstr "Marca de &texto" #: tfrmoptionseditorcolors.tbtnglobal.caption #, fuzzy #| msgid "Use (and edit) global scheme settings" msgid "Use (and edit) &global scheme settings" msgstr "Usar (y editar) esquema de ajustes &globales" #: tfrmoptionseditorcolors.tbtnlocal.caption #, fuzzy #| msgid "Use local scheme settings" msgid "Use &local scheme settings" msgstr "Usar esquema de ajuste &local" #: tfrmoptionseditorcolors.textboldcheckbox.caption #, fuzzy #| msgid "Bold" msgid "&Bold" msgstr "&Negrita" #: tfrmoptionseditorcolors.textboldradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption #, fuzzy #| msgid "Italic" msgid "&Italic" msgstr "&Itálica" #: tfrmoptionseditorcolors.textitalicradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption #, fuzzy #| msgid "Underline" msgid "&Underline" msgstr "S&ubrayado" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption #, fuzzy #| msgid "Invert" msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&vertir" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Añadir..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Borrar..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Insertar..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renombrar" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Ordenar..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Siempre expandir árbol" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Otras opciones" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.menuitem2.caption msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "un separador" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "sub-menú" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Añadir sub-menú" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Colapsar todo" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...nivel actual de ítem(s) seleccionados solamente" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "eliminar todo!" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "sub-menú y todos sus elementos" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "solo sub-menú pero mantener elementos" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "ítem seleccionado" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Eliminar ítem seleccionado" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Abrir todas las ramificaciones" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Pegar" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renombrar" #: tfrmoptionsfavoritetabs.miseparator1.caption msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator10.caption msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator11.caption msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator2.caption msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator3.caption msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator7.caption msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator8.caption msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.miseparator9.caption msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...todo, desde A a la Z!" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...grupo simple de ítem(s) solamente" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Ordenar grupo simple de ítem(s) solamente" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...contenido de submenú(s) seleccionado, sin subnivel" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...contenido de submenú(s) seleccionado y todos sus subniveles" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Resultado del test de menú" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Añadir" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Añadir" #: tfrmoptionsfileassoc.btnaddnewtype.caption #, fuzzy #| msgid "Add" msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "Añadir" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption #, fuzzy #| msgid "Down" msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "Abajo" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnremoveext.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnremovetype.caption #, fuzzy #| msgid "Remove" msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Eliminar" #: tfrmoptionsfileassoc.btnrenametype.caption #, fuzzy #| msgid "Rename" msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&enombrar" #: tfrmoptionsfileassoc.btnupact.caption #, fuzzy #| msgid "Up" msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "Arriba" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Acciones" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensiones" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipos de archivo" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icono" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Acción:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Comando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parámetro&s:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Ruta inicial:" #: tfrmoptionsfileassoc.menuitem1.caption msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir en Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obtener salida del comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Abrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Ejecutar en terminal" #: tfrmoptionsfileassoc.miview.caption #, fuzzy #| msgid "View" msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Vista" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir en Visor" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostrar ventana de confirmación para:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operac&ión de copia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operación de &borrado" #: tfrmoptionsfileoperations.cbdeletetotrash.caption #, fuzzy #| msgid "Delete to recycle bin (Shift key reverses this setting)" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDELETETOTRASH.CAPTION" msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Borrar hacia la papelera (la tecla mayúscula revierte este ajuste)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Op&eración de borrado a papelera" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption #, fuzzy #| msgid "Drop readonly flag" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Quitar ma&rca de sólo lectura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operacion de &mover" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption #, fuzzy #| msgid "Search for part of file name" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPARTIALNAMESEARCH.CAPTION" msgid "&Search for part of file name" msgstr "Bu&scar parte del nombre del archivo" #: tfrmoptionsfileoperations.cbprocesscomments.caption #, fuzzy #| msgid "Process comments with files/folders" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBPROCESSCOMMENTS.CAPTION" msgid "&Process comments with files/folders" msgstr "&Procesar comentarios con archivos/carpetas" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption #, fuzzy #| msgid "Select file name without extension when renaming" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBRENAMESELONLYNAME.CAPTION" msgid "Select &file name without extension when renaming" msgstr "Seleccionar nombre de archivo sin extensión al &renombrar" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption #, fuzzy #| msgid "Show tab select panel in copy/move dialog" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSHOWCOPYTABSELECTPANEL.CAPTION" msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostrar pestaña de panel seleccionado en diálogo de copiar/mover" #: tfrmoptionsfileoperations.cbskipfileoperror.caption #, fuzzy #| msgid "Skip file operations errors and write them to log window" msgctxt "TFRMOPTIONSFILEOPERATIONS.CBSKIPFILEOPERROR.CAPTION" msgid "S&kip file operations errors and write them to log window" msgstr "Sa<ar errores de operaciones de archivo y escribirlos en una ventana de registro" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Ejecutando operaciones" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.GBFILESEARCH.CAPTION" msgid "File search" msgstr "Búsqueda de archivos" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfaz de usuario" #: tfrmoptionsfileoperations.lblbuffersize.caption #, fuzzy #| msgid "Buffer size for file operations (in KB):" msgid "&Buffer size for file operations (in KB):" msgstr "Tamaño de &memoria para operaciones de archivo (en KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption #, fuzzy #| msgid "Show operations progress initially in" msgid "Show operations progress &initially in" msgstr "Mostrar progreso de operaciones &inicialmente en" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Nombre duplicado, estilo de autorenombramiento:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption #, fuzzy #| msgid "Number of wipe passes:" msgctxt "TFRMOPTIONSFILEOPERATIONS.LBLWIPEPASSNUMBER.CAPTION" msgid "&Number of wipe passes:" msgstr "&Número de pasadas para destruir:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption #, fuzzy #| msgid "Use memory mapping for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSEMMAPINSEARCH.CAPTION" msgid "Use memory mapping for search te&xt in files" msgstr "Usar mapeado de memoria para buscar te&xto en archivos" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption #, fuzzy #| msgid "Use stream for search text in files" msgctxt "TFRMOPTIONSFILEOPERATIONS.RBUSESTREAMINSEARCH.CAPTION" msgid "&Use stream for search text in files" msgstr "&Usar cadena para buscar texto en archivos" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir sobrecolor" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption #, fuzzy #| msgid "Use Frame Cursor" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEFRAMECURSOR.CAPTION" msgid "Use &Frame Cursor" msgstr "Usar cursor &enmarcado" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption #, fuzzy #| msgid "Use Gradient Indicator" msgid "Use &Gradient Indicator" msgstr "Usar indicador &gradiente" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption #, fuzzy #| msgid "Use Inverted Selection" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.CBBUSEINVERTEDSELECTION.CAPTION" msgid "U&se Inverted Selection" msgstr "U&sar selección invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Borde del cursor" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espacio libre de Unidad" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption #, fuzzy #| msgid "Background:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR.CAPTION" msgid "Bac&kground:" msgstr "&2do. plano:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption #, fuzzy #| msgid "Background 2:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "2&do. plano 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption #, fuzzy #| msgid "Cursor Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Color de c&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption #, fuzzy #| msgid "Cursor Text:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xto en cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption #, fuzzy #| msgid "Brightness level of inactive panel" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLINACTIVEPANELBRIGHTNESS.CAPTION" msgid "&Brightness level of inactive panel" msgstr "Nivel de &brillo del panel inactivo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption #, fuzzy #| msgid "Indicator Back Color:" msgid "In&dicator Back Color:" msgstr "In&dicador color negro:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption #, fuzzy #| msgid "Indicator Fore Color:" msgid "&Indicator Fore Color:" msgstr "&Indicador color 1er. plano:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption #, fuzzy #| msgid "Mark Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Color de &selección:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption #, fuzzy #| msgid "Text Color:" msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Color de t&exto:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption #, fuzzy #| msgid "Don't load file list until a tab is activated" msgid "Do&n't load file list until a tab is activated" msgstr "&No cargar lista de archivos hasta que la pestaña esté activada" #: tfrmoptionsfilesviews.cbdirbrackets.caption #, fuzzy #| msgid "Show square brackets around directories" msgctxt "TFRMOPTIONSFILESVIEWS.CBDIRBRACKETS.CAPTION" msgid "S&how square brackets around directories" msgstr "Mostrar corc&hetes encerrando directorios" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption #, fuzzy #| msgid "Highlight new and updated files" msgid "Hi&ghlight new and updated files" msgstr "&Resaltar archivos nuevos y actualizados" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Habilite en lugar y renombramiento cuando haga doble clic en el nombre" #: tfrmoptionsfilesviews.cblistfilesinthread.caption #, fuzzy #| msgid "Load file list in separate thread" msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Cargar &lista de archivos en procesos separados" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption #, fuzzy #| msgid "Load icons after file list" msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Cargar los &iconos después de la lista de archivos" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption #, fuzzy #| msgid "Show system and hidden files" msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Mostrar archivos ocultos &y de sistema" #: tfrmoptionsfilesviews.cbspacemovesdown.caption #, fuzzy #| msgid "When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgctxt "TFRMOPTIONSFILESVIEWS.CBSPACEMOVESDOWN.CAPTION" msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Cuando se seleccione archivos con la &barra espaciadora, pasar al siguiente archivo (como con <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formateando" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "TFRMOPTIONSFILESVIEWS.GBSORTING.CAPTION" msgid "Sorting" msgstr "Ordenando" #: tfrmoptionsfilesviews.lblcasesensitivity.caption #, fuzzy #| msgid "Case sensitivity:" msgid "Case s&ensitivity:" msgstr "S&ensible a Min./May.:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato incorrecto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption #, fuzzy #| msgid "Date and time format:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLDATETIMEFORMAT.CAPTION" msgid "&Date and time format:" msgstr "Formato &de fecha y hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato de &tamaño de archivo:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption #, fuzzy #| msgid "Insert new files" msgid "&Insert new files" msgstr "&Insertar nuevos archivos" #: tfrmoptionsfilesviews.lblsortfoldermode.caption #, fuzzy #| msgid "Sorting directories:" msgid "So&rting directories:" msgstr "O&rdenamiento de directorios:" #: tfrmoptionsfilesviews.lblsortmethod.caption #, fuzzy #| msgid "Sort &method:" msgctxt "TFRMOPTIONSFILESVIEWS.LBLSORTMETHOD.CAPTION" msgid "&Sort method:" msgstr "&Método de ordenamiento:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption #, fuzzy #| msgid "Move updated files" msgid "&Move updated files" msgstr "&Mover archivos actualizados" #: tfrmoptionsfiletypescolors.btnaddcategory.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionsfiletypescolors.btnapplycategory.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "Borrar" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption #, fuzzy #| msgid "File types colors" msgctxt "TFRMOPTIONSFILETYPESCOLORS.GBFILETYPESCOLORS.CAPTION" msgid "File types colors (sort by drag&&drop)" msgstr "Colores para tipos de archivos (or&denar con arrastrar y soltar)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption #, fuzzy #| msgid "Category attributes:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYATTR.CAPTION" msgid "Category a&ttributes:" msgstr "Categoría de a&tributos:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption #, fuzzy #| msgid "Category color:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYCOLOR.CAPTION" msgid "Category co&lor:" msgstr "Categoría de co&lor:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "Categoría de &máscara:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nombre categoría:" #: tfrmoptionsfonts.btnselconsolefnt.caption msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "" #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "" #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption #, fuzzy #| msgid "Editor font" msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Fuente del &editor" #: tfrmoptionsfonts.lbllogfont.caption #, fuzzy #| msgid "Log font" msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Fuente de re&gistro" #: tfrmoptionsfonts.lblmainfont.caption #, fuzzy #| msgid "Main font" msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fuente principal" #: tfrmoptionsfonts.lblviewerbookfont.caption #, fuzzy #| msgid "Viewer Book Font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Fuente de Vista de Li&bro" #: tfrmoptionsfonts.lblviewerfont.caption #, fuzzy #| msgid "Viewer font" msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Fuente del &visor" #: tfrmoptionshotkeys.btnaddhotkey.caption #, fuzzy #| msgid "Add hotkey" msgid "Add &hotkey" msgstr "Añadir ata&jo" #: tfrmoptionshotkeys.btndeletehotkey.caption #, fuzzy #| msgid "Delete hotkey" msgid "&Delete hotkey" msgstr "&Borrar atajo" #: tfrmoptionshotkeys.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionshotkeys.btnedithotkey.caption" msgid "&Edit hotkey" msgstr "&Editar atajo" #: tfrmoptionshotkeys.lbfilter.caption #, fuzzy #| msgid "Filter" msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption #, fuzzy #| msgid "Categories:" msgctxt "tfrmoptionshotkeys.lblcategories.caption" msgid "C&ategories:" msgstr "C&ategorías:" #: tfrmoptionshotkeys.lblcommands.caption #, fuzzy #| msgid "Commands:" msgctxt "tfrmoptionshotkeys.lblcommands.caption" msgid "Co&mmands:" msgstr "Co&mandos:" #: tfrmoptionshotkeys.lblscfiles.caption #, fuzzy #| msgid "Shortcut files:" msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Archivo&s de atajos:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comandos" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Atajos" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descripción" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Atajos" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parámetros" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgid "Controls" msgstr "Controles" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para las siguientes rutas y sus subdirectorios:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostrar iconos para acciones en &menú" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption #, fuzzy #| msgid "Show overlay i&cons, e.g. for links" msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostrar &iconos superpuestos; por ejemplo, para enlaces" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Deshabilitar iconos especiales" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Iconos en menús" #: tfrmoptionsicons.gbiconssize.caption #, fuzzy #| msgid " Icon &size " msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Tamaño de icono" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Mostrar iconos a la izquierda del nombre de archivo" #: tfrmoptionsicons.rbiconsshowall.caption #, fuzzy #| msgid "&All" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Todo" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Todo lo asociado + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Si&n iconos" #: tfrmoptionsicons.rbiconsshowstandard.caption #, fuzzy #| msgid "&Only standard icons" msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Sólo iconos e&stándar" #: tfrmoptionsignorelist.btnaddsel.caption #, fuzzy #| msgid "&Add selected names" msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Aña&dir nombres seleccionados" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Añadir nombres seleccionados con &ruta completa" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorar (no mostrar) los siguientes archivos y carpetas:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Guardar en:" #: tfrmoptionskeyboard.cblynxlike.caption #, fuzzy #| msgid "Left, Right arrows change directory (Lynx-like movement)" msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Las &flechas izquierda y derecha cambian directorio (como Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tecleado" #: tfrmoptionskeyboard.lblalt.caption #, fuzzy #| msgid "Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+L&etras" #: tfrmoptionskeyboard.lblctrlalt.caption #, fuzzy #| msgid "Ctrl+Alt+Letters" msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Le&tras" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Letras" #: tfrmoptionslayout.cbflatdiskpanel.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Botones &planos" #: tfrmoptionslayout.cbflatinterface.caption #, fuzzy #| msgid "Flat interface" msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "I&nterfaz plana" #: tfrmoptionslayout.cbflattoolbar.caption #, fuzzy #| msgid "Flat buttons" msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "Botones p&lanos" #: tfrmoptionslayout.cbfreespaceind.caption #, fuzzy #| msgid "Show free space indicator on drive label" msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostrar indicador de &espacio libre en etiqueta de unidad" #: tfrmoptionslayout.cblogwindow.caption #, fuzzy #| msgid "Show log window" msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostrar ventana de re&gistro" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostrar panel de operación en 2do. plano" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostrar progreso común en la barra de menú" #: tfrmoptionslayout.cbshowcmdline.caption #, fuzzy #| msgid "Show command &line" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostrar &línea de comandos" #: tfrmoptionslayout.cbshowcurdir.caption #, fuzzy #| msgid "Show ¤t directory" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostrar d&irectorio actual" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostrar botones de uni&dades" #: tfrmoptionslayout.cbshowdrivefreespace.caption #, fuzzy #| msgid "Show free space label" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostrar etiqueta de es&pacio libre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption #, fuzzy #| msgid "Show d&rives list button" msgid "Show drives list bu&tton" msgstr "Mostrar bo&tón de lista de unidades" #: tfrmoptionslayout.cbshowkeyspanel.caption #, fuzzy #| msgid "Show &function key buttons" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostrar botones de teclas de &función" #: tfrmoptionslayout.cbshowmainmenu.caption #, fuzzy #| msgid "Show main menu" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostrar &menú principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Mostrar barra de &botones" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption #, fuzzy #| msgid "Show short free space label" msgid "Show short free space &label" msgstr "Mostrar etiqueta corta de espacio &libre" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostrar barra de e&stado" #: tfrmoptionslayout.cbshowtabheader.caption #, fuzzy #| msgid "Show &tabstop header" msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostrar saltos de encabe&zamiento" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Mostrar &pestañas de carpetas" #: tfrmoptionslayout.cbtermwindow.caption #, fuzzy #| msgid "Show terminal window" msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostrar ventana de te&rminal" #: tfrmoptionslayout.cbtwodiskpanels.caption #, fuzzy #| msgid "Show two drive button bars (fixed width, above file windows)" msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostrar &dos barras de botones de unidad (ancho fijo, sobre lista de archivos)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr " Disposición de pantalla" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Ver contenido de archivo registro" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Incluir fecha en archivo de registro" #: tfrmoptionslog.cblogarcop.caption #, fuzzy #| msgid "Pack/Unpack" msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Com&primir/Descomprimir" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption #, fuzzy #| msgid "Copy/Move/Create link/symlink" msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&iar/Mover/Crear enlace/enlace simbólico" #: tfrmoptionslog.cblogdelete.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionslog.cblogdirop.caption #, fuzzy #| msgid "Create/Delete directories" msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Crear/Borrar direc&torios" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Registrar &errores" #: tfrmoptionslog.cblogfile.caption #, fuzzy #| msgid "&Create a log file:" msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&rear archivo de registro:" #: tfrmoptionslog.cbloginfo.caption #, fuzzy #| msgid "Log information messages" msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Registrar mensajes de &información" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Encendido/apagado" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Registrar operaciones exito&sas" #: tfrmoptionslog.cblogvfs.caption #, fuzzy #| msgid "File system plugins" msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Co&mplementos de sistema de archivos" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Archivo de registro de operaciones con archivos" #: tfrmoptionslog.gblogfileop.caption #, fuzzy #| msgid "Log operations:" msgctxt "TFRMOPTIONSLOG.GBLOGFILEOP.CAPTION" msgid "Log operations" msgstr "Registrar operaciones" #: tfrmoptionslog.gblogfilestatus.caption #, fuzzy #| msgid "Operation status:" msgctxt "TFRMOPTIONSLOG.GBLOGFILESTATUS.CAPTION" msgid "Operation status" msgstr "Estado de operación" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Remover miniaturas cuando no existen mas los archivos" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "Ver contenido de archivo registro" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ir siempre a directorio raíz de la unidad al cambiar la misma" #: tfrmoptionsmisc.chkshowwarningmessages.caption #, fuzzy #| msgid "Show warning messages (\"OK\" button only)" msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostrar mensa&jes de advertencia (sólo botón \"Aceptar\")" #: tfrmoptionsmisc.chkthumbsave.caption #, fuzzy #| msgid "Save thumbnails in cache" msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Guardar miniatura&s en caché" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Relacionado a TC exportar/importar:" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Archivo configuración:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "Ejecutable de TC:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Ruta de salida barra de herramientas:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixeles" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Tamaño de miniaturas:" #: tfrmoptionsmouse.cbselectionbymouse.caption #, fuzzy #| msgid "Selection by mouse" msgid "&Selection by mouse" msgstr "&Selección por ratón" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Desplazamiento" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selección" #: tfrmoptionsmouse.lblmousemode.caption #, fuzzy #| msgid "Mode:" msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbscrolllinebyline.caption #, fuzzy #| msgid "Line by line" msgid "&Line by line" msgstr "&Línea a línea" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption #, fuzzy #| msgid "Line by line with cursor movement" msgid "Line by line &with cursor movement" msgstr "Línea por línea con el &movimiento del cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption #, fuzzy #| msgid "Page by page" msgid "&Page by page" msgstr "&Página por página" #: tfrmoptionsplugins.btnaddplugin.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionsplugins.btnconfigplugin.caption #, fuzzy #| msgid "Configure" msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmoptionsplugins.btnenableplugin.caption #, fuzzy #| msgid "Enable" msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "&Habilitar" #: tfrmoptionsplugins.btnremoveplugin.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmoptionsplugins.btntweakplugin.caption #, fuzzy #| msgid "Tweak" msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Ajus&te avanzado" #: tfrmoptionsplugins.lbldsxdescription.caption #, fuzzy #| msgid "Search plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Complementos de búsqueda permiten el uso de algoritmos de búsqueda alternativos o herramientas externas (como \"locate\", etc.)" #: tfrmoptionsplugins.lblwcxdescription.caption #, fuzzy #| msgid "Packer plugins are used to work with archives." msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Compl&ementos de compresión son usados para trabajar con archivos comprimidos" #: tfrmoptionsplugins.lblwdxdescription.caption #, fuzzy #| msgid "Content plugins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Complementos de contenido permiten mostrar detalles extendidos de archivos: etiquetas mp3, atributos de imagen (en lista de archivo); o pueden usarse con las herramientas de búsqueda o de renombrado múltiple" #: tfrmoptionsplugins.lblwfxdescription.caption #, fuzzy #| msgid "File system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Los complementos 'Sistema de archivos' permiten acceder a discos inaccesibles por el sistema operativo o a aparatos externos como Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption #, fuzzy #| msgid "Viewer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Complementos de visualización permiten mostrar formatos de archivos como imágenes, base de datos, etc. en Visor (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Activo" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Complemento" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Registrado por" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nombre de archivo" #: tfrmoptionsplugins.tsdsx.caption #, fuzzy #| msgid "Search plugins (.DSX)" msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Complementos de bú&squeda (.DSX)" #: tfrmoptionsplugins.tswcx.caption #, fuzzy #| msgid "Packer plugins (.WCX)" msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Complementos de com&presión (.WCX)" #: tfrmoptionsplugins.tswdx.caption #, fuzzy #| msgid "Content plugins (.WDX)" msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Complementos de &contenido (.WDX)" #: tfrmoptionsplugins.tswfx.caption #, fuzzy #| msgid "File system plugins (.WFX)" msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Complementos de s&istema de archivos (.WFX)" #: tfrmoptionsplugins.tswlx.caption #, fuzzy #| msgid "Viewer plugins (.WLX)" msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Complementos de &visualización (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Comenzando (el nombre debe empezar con el primer carácter tipeado)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nalizando (último caracter antes de un punto debe coincidir)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opciones" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption #, fuzzy #| msgid "Exact name match:" msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.GBEXACTNAMEMATCH.CAPTION" msgid "Exact name match" msgstr "Coincidir nombre exacto" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Buscar Min./May." #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Buscar por estos ítems" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Activar &panel destino cuando se pulsa en una de sus pestañas" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Mo&strar encabezado de pestañas también cuando haya una sola" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption #, fuzzy #| msgid "&Confirm close all tabs" msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firmar cerrar todas las pestañas" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption #, fuzzy #| msgid "&Limit tab title length to:" msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitar longitud de título de pestaña a:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostrar pestañas &bloqueadas con un asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Pes&tañas en múltiples líneas" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up abre nueva pestaña en 1er. plano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Abrir &nuevas pestañas próxima a pestaña actual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption #, fuzzy #| msgid "Show tab close button" msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostrar &botón de cierre de pestaña" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Encabezamiento de pestañas de carpeta" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caracteres" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption #, fuzzy #| msgid "Tabs position" msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posición de pestañas" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Comando:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption #, fuzzy #| msgid "&Clone button" msgctxt "tfrmoptionstoolbar.btnclonebutton.caption" msgid "C&lone button" msgstr "Botón de c&lonar" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Borrar" #: tfrmoptionstoolbar.btnedithotkey.caption #, fuzzy #| msgid "Edit hotkey" msgctxt "tfrmoptionstoolbar.btnedithotkey.caption" msgid "Edit hot&key" msgstr "Editar tecla &rápida" #: tfrmoptionstoolbar.btninsertbutton.caption #, fuzzy #| msgid "&Insert new buttonX" msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Insertar botón nuevo" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Otro..." #: tfrmoptionstoolbar.btnremovehotkey.caption #, fuzzy #| msgid "Remove hotkey" msgctxt "tfrmoptionstoolbar.btnremovehotkey.caption" msgid "Remove hotke&y" msgstr "Remo&ver tecla rápida" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption #, fuzzy #| msgid "Flat b&uttons" msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botones &planos" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Reportar errores con comandos" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Ingresar parámetros de comando, cada uno en línea separada. Pulse F1 para ver ayuda sobre parámetros." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Apariencia" #: tfrmoptionstoolbar.lblbarsize.caption #, fuzzy #| msgid "Ba&r size:" msgctxt "tfrmoptionstoolbar.lblbarsize.caption" msgid "&Bar size:" msgstr "Tamaño de &barra:" #: tfrmoptionstoolbar.lblexternalcommand.caption #, fuzzy #| msgid "Command:" msgctxt "tfrmoptionstoolbar.lblexternalcommand.caption" msgid "Comman&d:" msgstr "Coman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionstoolbar.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parámetro&s:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Ayuda" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Tecla rápida:" #: tfrmoptionstoolbar.lbliconfile.caption #, fuzzy #| msgid "Icon:" msgctxt "tfrmoptionstoolbar.lbliconfile.caption" msgid "Ico&n:" msgstr "Ico&no:" #: tfrmoptionstoolbar.lbliconsize.caption #, fuzzy #| msgid "Ic&on size:" msgctxt "tfrmoptionstoolbar.lbliconsize.caption" msgid "Icon si&ze:" msgstr "Tamaño ic&ono:" #: tfrmoptionstoolbar.lblinternalcommand.caption #, fuzzy #| msgid "Command:" msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbar.lblinternalparameters.caption #, fuzzy #| msgid "Parameters:" msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parámetros:" #: tfrmoptionstoolbar.lblstartpath.caption #, fuzzy #| msgid "Start path:" msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Ruta inicial:" #: tfrmoptionstoolbar.lbltooltip.caption #, fuzzy #| msgid "Tooltip:" msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "A&yuda:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "para un comando externo" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "para un comando interno" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "para un separador" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "para barra de sub-herramientas" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "Backup..." #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Exportar..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Barra de herramientas actual..." #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "a un archivo Barra de herramientas (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a \"wincmd.ini\" de TC (mantener existente)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a \"wincmd.ini\" de TC (borrar existente)" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Barra de herramientas..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Guardar un backup de Barra de herramientas" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "a un Archivo de Barra de herramientas (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "a un archivo TC.BAR (mantener existente)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "a un archivo TC.BAR (borrar existente)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "a \"wincmd.ini\" de TC (mantener existente)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "a \"wincmd.ini\" de TC (borrar existente)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "solo después de la selección actual" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "solo previo a la selección actual" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importar..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Restablecer un backup de Barra de herramientas" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra de herramientas actual" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir a nueva barra de herramientas actual barra de herramientas" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir a nueva barra de herramientas, barra de herramientas superior" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "añadir a barra de herramientas superior" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar barra de herramientas superior" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "desde un Archivo de Barra de herramientas (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra de herramientas actual" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir a nueva barra de herramientas actual barra de herramientas" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir a nueva barra de herramientas, barra de herramientas superior" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "añadir a barra de herramientas superior" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar barra de herramientas superior" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "desde un archivo TC.BAR simple" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra de herramientas actual" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir a nueva barra de herramientas actual barra de herramientas" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir a nueva barra de herramientas, barra de herramientas superior" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "añadir a barra de herramientas superior" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar barra de herramientas superior" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "desde \"wincmd.ini\" de TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "añadir a la barra de herramientas actual" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "añadir a nueva barra de herramientas actual barra de herramientas" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "añadir a nueva barra de herramientas, barra de herramientas superior" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "para reemplazar barra de herramientas superior" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "para reemplazar barra de herramientas superior" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "solo después de la selección actual" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "solo previo a la selección actual" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "solo después de la selección actual" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "solo previo a la selección actual" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "solo después de la selección actual" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "como primer elemento" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "como último elemento" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "solo previo a la selección actual" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botón" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccionar ruta apropiada" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption #, fuzzy #| msgid "Keep terminal window open after executing program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSKEEPTERMINALOPEN.CAPTION" msgid "&Keep terminal window open after executing program" msgstr "&Mantener abierta la ventana del terminal después de ejecutar el programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption #, fuzzy #| msgid "Execute in terminal" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSRUNINTERMINAL.CAPTION" msgid "&Execute in terminal" msgstr "&Ejecutar en terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption #, fuzzy #| msgid "Use external program" msgctxt "TFRMOPTIONSTOOLBASE.CBTOOLSUSEEXTERNALPROGRAM.CAPTION" msgid "&Use external program" msgstr "&Usar programa externo" #: tfrmoptionstoolbase.lbltoolsparameters.caption #, fuzzy #| msgid "Additional parameters" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPARAMETERS.CAPTION" msgid "A&dditional parameters" msgstr "Parámetros a&dicionales" #: tfrmoptionstoolbase.lbltoolspath.caption #, fuzzy #| msgid "Path to program to execute" msgctxt "TFRMOPTIONSTOOLBASE.LBLTOOLSPATH.CAPTION" msgid "&Path to program to execute" msgstr "Ruta del &programa a ejecutar" #: tfrmoptionstooltips.btnaddfields.caption #, fuzzy #| msgid "Add" msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Aña&dir" #: tfrmoptionstooltips.btnapplyfields.caption #, fuzzy #| msgid "Apply" msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionstooltips.btndeletefields.caption #, fuzzy #| msgid "Delete" msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Borrar" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Plantilla..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostrar sugerencias de herramientas" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Campos personalizados por tipo de archivo" #: tfrmoptionstooltips.lblfieldslist.caption #, fuzzy #| msgid "Category hint:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Categoría de a&yuda:" #: tfrmoptionstooltips.lblfieldsmask.caption #, fuzzy #| msgid "Category mask:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Categoría de &máscara:" #: tfrmoptionstooltips.lblfieldsname.caption #, fuzzy #| msgid "Category name:" msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Categoría de &nombre:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWERBOOKMODE.CAPTION" msgid "Viewer Book Mode" msgstr "Visualizar en modo libro" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Ejemplo" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption #, fuzzy #| msgid "Background color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLBACKGROUNDCOLORVIEWERBOOK.CAPTION" msgid "&Background color in book viewer" msgstr "Color de &2do. plano vista de libro" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption #, fuzzy #| msgid "Font color in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLFONTCOLORVIEWERBOOK.CAPTION" msgid "&Font color in book viewer" msgstr "Color de &fuente en vista de libro" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption #, fuzzy #| msgid "Number of columns in book viewer" msgctxt "TFRMOPTIONSVIEWER.LBLNUMBERCOLUMNSVIEWER.CAPTION" msgid "&Number of columns in book viewer" msgstr "&Número de columnas en vista de libro" #: tfrmpackdlg.btnconfig.caption #, fuzzy #| msgid "&Configure" msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimir archivos" #: tfrmpackdlg.cbcreateseparatearchives.caption #, fuzzy #| msgid "Create separate archives, o&ne per selected file/dir" msgid "C&reate separate archives, one per selected file/dir" msgstr "C&rear archivos separados, uno por archivo/dir seleccionado" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crear archivo autoe&xtraíble" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Ci&frar" #: tfrmpackdlg.cbmovetoarchive.caption #, fuzzy #| msgid "M&ove to archive" msgid "Mo&ve to archive" msgstr "Mo&ver al archivo comprimido" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Archivo comprimido &múltiple de disco" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption #, fuzzy #| msgid "Put in the TAR archive first" msgid "P&ut in the TAR archive first" msgstr "Poner primero en archivo comprimido TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Incluir com&presión de nombres de rutas (sólo recursivo)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimir archivo(s) en el archivo:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compresor" #: tfrmpackinfodlg.btnclose.caption #, fuzzy #| msgid "Close" msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimir todo y ejecut&ar" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimir y ejec&utar" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propiedades del archivo comprimido" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributos:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tasa de compresión:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Fecha:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Método:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Tamaño original:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Archivo:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tamaño comprimido:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compresor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tiempo:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Cerrar panel de filtro" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Ingresar texto a buscar o filtro" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensible a Min./May." #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Directorios" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Archivos" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Comenzando coincidencia" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Finalizando coincidencia" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Conmutar entre búsqueda o filtro" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "&Más reglas" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "M&enos reglas" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Usar plugins de &contenido, combinado con:" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Complemento" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Campo" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "Operador" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (toda coincidencia)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (cualquier coincidencia)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Cerrar" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "A&yuda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&Aceptar" #: tfrmselecttextrange.lblselecttext.caption #, fuzzy #| msgid "Select the characters to insert:" msgid "&Select the characters to insert:" msgstr "&Seleccionar los caracteres a insertar:" #: tfrmsetfileproperties.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Cambiar atributos" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archivo" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creado:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accedido:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modificado:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Sólo lectura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Incluyendo subcarpetas" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propiedades de sello de tiempo" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo gris significa valor sin cambio)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Otros" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Propietario" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Ejecutar" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo gris significa valor sin cambio)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Lectura" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escritura" #: tfrmsplitter.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "Algunas funciones para seleccioanr ruta apropiada" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisor" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Requiere un archivo de verificación CRC32" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nombre de archivo" #: tfrmsplitter.grbxsize.caption #, fuzzy #| msgid "File size" msgid "Size and number of parts" msgstr "Tamaño y número de partes" #: tfrmsplitter.lbdirtarget.caption #, fuzzy #| msgid "Directory target" msgid "Directory &target" msgstr "Directorio des&tino" #: tfrmsplitter.lbfilesource.caption #, fuzzy #| msgid "File source" msgid "File &source" msgstr "Archivo ori&gen" #: tfrmsplitter.lblnumberparts.caption #, fuzzy #| msgid "Number of parts" msgid "&Number of parts" msgstr "&Número de partes" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Hecho" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Sistema Operativo" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "Plataforma" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisión" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versión" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmsymlink.caption #, fuzzy #| msgid "Create symlink" msgid "Create symbolic link" msgstr "Crear enlace simbólico" #: tfrmsymlink.lblexistingfile.caption #, fuzzy #| msgid "Destination that the link will point to" msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino donde el enlace apuntará" #: tfrmsymlink.lbllinktocreate.caption #, fuzzy #| msgid "Link name" msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nombre del en&lace" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Cerrar" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Sincronizar directorios" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "asimétrico" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "por contenido" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "ignorar fecha" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "solo seleccionado" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Mostrar:" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nombre" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Tamaño" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Fecha" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Fecha" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Tamaño" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nombre" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(en ventana principal)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Mostrar izquierdo" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Mostrar derecho" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr "" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "duplicados" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "simples" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Por favor, presione \"Comparar\" para iniciar" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "Sincronizar" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Confirmar sobrescritura" #: tfrmtweakplugin.btnadd.caption #, fuzzy #| msgid "Add new" msgid "A&dd new" msgstr "Aña&dir nuevo" #: tfrmtweakplugin.btncancel.caption #, fuzzy #| msgid "Cancel" msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmtweakplugin.btnchange.caption #, fuzzy #| msgid "Change" msgid "C&hange" msgstr "Cam&biar" #: tfrmtweakplugin.btndefault.caption #, fuzzy #| msgid "Default" msgid "De&fault" msgstr "Por de&fecto" #: tfrmtweakplugin.btnok.caption #, fuzzy #| msgid "OK" msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceptar" #: tfrmtweakplugin.btnremove.caption #, fuzzy #| msgid "Remove" msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Ajuste avanzado de complemento" #: tfrmtweakplugin.cbpk_caps_by_content.caption #, fuzzy #| msgid "Detect archive type by content" msgid "De&tect archive type by content" msgstr "De&tectar tipo de archivo comprimido por contenido" #: tfrmtweakplugin.cbpk_caps_delete.caption #, fuzzy #| msgid "Can delete files" msgid "Can de&lete files" msgstr "Puede &borrar archivos" #: tfrmtweakplugin.cbpk_caps_encrypt.caption #, fuzzy #| msgid "Supports encryption" msgid "Supports e&ncryption" msgstr "Soporta ci&frado" #: tfrmtweakplugin.cbpk_caps_hide.caption #, fuzzy #| msgid "Show as normal files (hide packer icon)" msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostrar como archivos normales (ocultar icono de compresión)" #: tfrmtweakplugin.cbpk_caps_mempack.caption #, fuzzy #| msgid "Supports packing in memory" msgid "Supports pac&king in memory" msgstr "Soporta com&presión en memoria" #: tfrmtweakplugin.cbpk_caps_modify.caption #, fuzzy #| msgid "Can modify exisiting archives" msgid "Can &modify exisiting archives" msgstr "Puede &modificar los archivos comprimidos existentes" #: tfrmtweakplugin.cbpk_caps_multiple.caption #, fuzzy #| msgid "Archive can contain multiple files" msgid "&Archive can contain multiple files" msgstr "El &archivo comprimido puede contener múltiples archivos" #: tfrmtweakplugin.cbpk_caps_new.caption #, fuzzy #| msgid "Can create new archives" msgid "Can create new archi&ves" msgstr "Puede crear nuevos archi&vos comprimidos" #: tfrmtweakplugin.cbpk_caps_options.caption #, fuzzy #| msgid "Supports the options dialogbox" msgid "S&upports the options dialogbox" msgstr "So&porta la ventana de diálogo con opciones" #: tfrmtweakplugin.cbpk_caps_searchtext.caption #, fuzzy #| msgid "Allow searching for text in archives" msgid "Allow searchin&g for text in archives" msgstr "Permitir búsqueda de texto en archivos comprimidos" #: tfrmtweakplugin.lbldescription.caption #, fuzzy #| msgid "Description:" msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descripción:" #: tfrmtweakplugin.lbldetectstr.caption #, fuzzy #| msgid "Detect string:" msgid "D&etect string:" msgstr "D&etectar cadena:" #: tfrmtweakplugin.lblextension.caption #, fuzzy #| msgid "Extension:" msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensión:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Opciones:" #: tfrmtweakplugin.lblname.caption #, fuzzy #| msgid "Name:" msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nombre:" #: tfrmtweakplugin.lblplugin.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Com&plemento:" #: tfrmtweakplugin.lblplugin1.caption #, fuzzy #| msgid "Plugin:" msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Com&plemento:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Acerca del Visor..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostrar el mensaje Acerca de" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiar archivo" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiar archivo" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Borrar archivo" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Borrar archivo" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Pró&ximo" #: tfrmviewer.actloadnextfile.hint msgid "Load Next File" msgstr "Cargar próximo archivo" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Anterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Cargar archivo anterior" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Espejo" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Espejo" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mover archivo" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mover archivo" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recargar" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recargar el archivo actual" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Rotar 180" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Rotar 180" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Rotar 270" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Rotar 270" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Rotar 90" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Rotar 90" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Guardar como..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Guardar archivo como..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Estrechar" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Estrechar imagen" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copiar" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copiar" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Recortar" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Borrar" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Borrar" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Pantalla completa" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Resaltar" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Espejo" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Mover" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Mover" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Dibujar" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Ojos Rojos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Deshacer" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Acercar" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Alejar" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Visor" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositivas" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Lápiz" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Resaltar" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pintar" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositivas" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Mostrar como &Binario" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copiar al portapapeles" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Salir" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Archivo" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Pantalla Completa" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Mostrar como &Hexadecimal" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagen" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Mostrar como Libr&o" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Espejo" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Complementos" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Vista previa" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Imprimir..." #: tfrmviewer.mirotate.caption msgid "Rotate" msgstr "Rotar" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Guardar" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Guardar como..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Buscar" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Buscar siguiente" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Buscar previo" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Estrechar" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Mostrar como &Texto" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Mostrar como texto a&justado de línea" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Acercar" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Alejar" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copiar al portapapeles" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Seleccionar todo" #: tfrmviewoperations.btnstartpause.caption #, fuzzy #| msgid "Start" msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Iniciar" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "De&tener" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Operaciones de archivos" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Siempre en 1er. plano" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Usar \"arrastrar y soltar\" para mover operaciones entre colas" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nueva cola" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Mostrar en ventana separada" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Poner primero en cola" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Poner último en cola" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Cola" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fuera de cola" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Cola 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Cola 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Cola 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Cola 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Cola 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Mostrar en ventana separada" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Pausar todo" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Cuando el archivo existe" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Cuando el archivo existe" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Trabajar en 2do. plano (conexión separada)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Cuando el archivo existe" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Este archivo no pudo ser encontrado y podría ayudar a validar combinación final de archivos:\n" "%s\n" "\n" "Puede hacerlo disponible y presionar \"Aceptar\" cuando esté listo,\n" "o presionar \"Cancelar\" para continuar sin él?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancelar filtro rápido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancelar operación actual" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Ingrese archivo, con extensión, para soltar texto" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Formato de texto a importar" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Dañado:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "General:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Perdidos:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Error de lectura:" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Satisfactorio:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Ingrese suma de verificación y seleccione algoritmo:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Comprobar suma de verificación" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "Total:" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Portapapeles no contiene ningún dato de herramienta válido" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atributos" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Fecha" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nombre" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Tamaño" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinear" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Texto" #: ulng.rsconfcolconfig msgid "Config" msgstr "Config" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Borrar" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenidos de campos" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mover" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Ancho" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Columna personalizada" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Barra de herramientas DC importadas" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Barra de herramientas TC importadas" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_TextoSoltado" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_TextoHTMLSoltado" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_TextoEnriquecidoSoltado" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_TextoSimpleSoltado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_TextoUnicodeUTF16Soltado" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "TextoUnicodeUTF8Soltado" #: ulng.rsdiffadds msgid " Adds: " msgstr "Añadidos:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Eliminados:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Coincidentes:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Modificados:" #: ulng.rsdlgallopcomplete #, fuzzy #| msgid "All operations is complete" msgid "All operations completed" msgstr "Se han completado todas las operaciones" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progreso de todas las operaciones %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "In&terrumpir" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Todos" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Ane&xar" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto-renombrar archivos origen" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancelar" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuar" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Copiar en" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copi&ar en todo" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Salir del programa" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorar todo" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "&Ninguno" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Aceptar" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Ot&ro" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "S&obrescribir" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sobrescribir &todo" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Sobrescribir Todos los mas &Grandes" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sobrescribir todo lo anti&guo" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Sobrescribir Todos los mas &Pequeños" #: ulng.rsdlgbuttonrename #, fuzzy #| msgid "Rename" msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Renombrar" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Resumir" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Rein&tentar" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Saltar" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Saltar &todos" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Si" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calcular archivos y carpetas" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calcular suma de verificación" #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Comprobar suma de verificación" #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiar archivo(s)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Borrar archivo(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mover archivo(s)" #: ulng.rsdlgoppause #, fuzzy #| msgid "Pause" msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart #, fuzzy #| msgid "Start" msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Iniciar" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "En cola" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Velocidad: %s/s" #: ulng.rsdlgspeedtime #, fuzzy #| msgid "Speed %s/s, time remaining s%" msgid "Speed %s/s, time remaining %s" msgstr "Velocidad: %s/s, restante: %s" #: ulng.rsdlgsplit #, fuzzy #| msgid "Split file" msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Dividir" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Destruir archivo(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sin etiqueta>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sin medio>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno de Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Ir a línea:" #: ulng.rseditgotolinetitle msgid "Goto Line" msgstr "Ir a línea:" #: ulng.rseditnewfile msgid "new.txt" msgstr "nuevo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nombre de archivo:" #: ulng.rseditnewopen msgid "Open file" msgstr "Abrir archivo" #: ulng.rseditsearchback msgid "&Backward" msgstr "Hacia &atrás" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Búsqueda" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "Hacia a&delante" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Reemplazar" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Exportado_desde_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Preguntar;Sobrescribir;Copiar en;Saltar" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Preguntar;Sobrescribir;Sobrescribir antiguo;Saltar" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Preguntar;No definir mas;Ignorar errores" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definir plantilla" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s nivel(es)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "todo (profundidad sin límites)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "sólo directorio actual" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "El directorio %s no existe!" #: ulng.rsfindfound msgid "Found: %d" msgstr "Encontrado: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Guardar platilla de búsqueda" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nombre de plantilla:" #: ulng.rsfindscanned msgid "Scanned: %d" msgstr "Escaneados: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Escaneando" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Buscar archivos" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Comienza en" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "[Libre: %s] [Total: %s bytes]" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bytes libres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Fecha/hora de acceso" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributos" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentario" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tamaño comprimido" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Fecha/hora de creación" #: ulng.rsfuncext msgid "Extension" msgstr "Extensión" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Enlazar a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Fecha/tiempo de modificación" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nombre" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nombre sin extensión" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Propietario" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Ruta" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Tamaño" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Error creando el enlace duro" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Lo siento, no hay nada detectado para importar!" #: ulng.rshotdirwarningabortrestorebackup #, fuzzy #| msgid "" #| "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" #| "\n" #| "Are you sure you want to proceed?\n" msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" "Advertencia! Cuando restablezca un archivo backup .hotlist, este borrará la lista existente y la reemplazará.\n" "\n" "Está seguro de proceder?\n" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Diálogo Copiar/Mover" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differ (comparar)" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Editar Comentario Diálogo" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Buscar archivos" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visor" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "No se pudo encontrar referencia al archivo predeterminado de barra" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Enlazado completo" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Deseleccionar máscara" #: ulng.rsmarkplus msgid "Select mask" msgstr "Seleccionar máscara" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Máscara de entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurar columnas a medida" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configurar esta vista de columnas personalizadas" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Acciones" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editar" #: ulng.rsmnueject msgid "Eject" msgstr "Expulsar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Montar" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nuevo" #: ulng.rsmnunomedia msgid "No media available" msgstr "No hay ningún medio disponible" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Abrir" #: ulng.rsmnuopenwith #, fuzzy #| msgid "Open with ..." msgid "Open with" msgstr "Abrir con" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Otro..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordenar por" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmontar" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Ver" #: ulng.rsmsgaccount msgid "Account:" msgstr "Cuenta:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parámetros adicionales para la línea de comandos:" #: ulng.rsmsgbadcrc32 #, fuzzy #| msgid "" #| "Bad CRC32 for resulting file:\n" #| "\"%s\"\n" #| "\n" #| "Do you want to keep the resulting corrupted file anyway?\n" msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" "Error CRC32 en archivo:\n" "\"%s\"\n" "\n" "Quiere mantener el archivo corrupto de todos modos?\n" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "No se puede copiar/mover un archivo \"%s\" dentro de sí mismo!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "No se puede borrar directorio %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "No se puede cambiar a [%s]!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Remover todas las pestañas inactivas?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Esta pestaña (%s) está bloqueada! Quiere cerrarla?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Está seguro de querer salir?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Copiar %d archivos/directorios seleccionados a:" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" a:" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Ingrese ubicación y nombre de archivo donde guardar archivo de Barra de herramientas DC" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Borrar el archivo parcialmente copiado?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Borrar %d archivos/directorios seleccionados?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Enviar %d archivos/directorios seleccionados a la papelera?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Borrar \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Borrar seleccionados \"%s\" a la papelera?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "No se puede enviar \"%s\" a la papelera! Quiere borrar directamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disco no está disponible" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Opciones sobre arrastrar y soltar con ratón han sido modificadas. Quiere guardarlas antes de salir?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduzca extensión de archivo:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduzca el nombre:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Error de CRC en los datos del archivo comprimido" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datos corrompidos" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "No se puede conectar al servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "No se puede copiar el archivo %s a %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Ya existe un directorio con nombre \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La fecha %s no está soportada" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Directorio %s ya existe!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Función interrumpida por usuario" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Error cerrando archivo" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Imposible crear el archivo" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "No hay más archivos en el archivo comprimido" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "No se puede abrir el archivo existente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Error leyendo desde archivo" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Error escribiendo al archivo" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "No se puede crear directorio %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Enlace no válido" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "No se encontraron archivos" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memoria insuficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Función no soportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Error en comando de menú contextual" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Error cuando se cargaba configuración" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Error de sintaxis en expresión regular!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "No se puede renombrar el archivo %s a %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "No se puede guardar asociación!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "No se puede guardar el archivo" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "No se puede poner atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "No se puede fijar fecha/hora para \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "No se puede fijar propietario/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer demasiado pequeño" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Demasiados archivos para comprimir" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato de archivo comprimido desconocido" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(fin de sub-menú)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nombre" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Nombre menú:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(separador)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Nombre sub-menú" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Archivo %s ha cambiado, quiere guardarlo?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s bytes, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sobrescribir:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Archivo %s existe, quiere sobrescribirlo?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con archivo:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Archivo \"%s\" no encontrado." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operaciones de archivo activas" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algunas operaciones de archivo no han finalizado. Si cierra Double Commander puede resultar en perdida de datos." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Opciones sobre operaciones de archivos han sido modificadas. Quiere guardarlas antes de salir?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "El archivo %s esta marcado como de sólo lectura. Quiere borrarlo?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "El tamaño del archivo de \"%s\" es demasiado grande para el sistema de archivo destino!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "La carpeta %s existe, quiere sobrescribirla?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Seguir enlace simbólico \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Seleccione el formato de texto a importar" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Añadir %d directorios seleccionados" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Añadir directorio seleccionado: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Añadir directorio actual: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Hacer comando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Configuración de Lista rápida de Directorios" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Está seguro de remover todas las entradas de su Lista rápida de Directorios? (No hay \"deshacer\" en esta acción!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Este ejecutará el comando siguiente:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Este es un Dir Rápido nombrado" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Esto cambiará cuadro activo a la siguiente ruta:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Y el cuadro inactivo cambiará a la siguiente ruta:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Error al hacer backup de entradas..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Error exportando entradas..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Exportar todo!" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Exportar Lista rápida de Directorios - Seleccione las entradas que quiere exportar" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Exportar seleccionados" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importar todo!" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importar Lista rápida de Directorios - Seleccione las entradas que quiere importar" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Importar seleccionados" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Ruta" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Ubicar archivo \".hotlist\" a importar" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Lista rápida de Directorios ha sido modificada. Quiere guardarla antes de salir?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Nombre Directorio rápido" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Número de nuevas entradas: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Nada seleccionado a exportar!" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Ruta Directorio rápido" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Reañadir dir seleccionado:" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Reañadir dir actual:" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Ingrese ubicación y el archivo de Lista rápida de Directorios a recuperar" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Comando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(fin de sub-menú)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Nombre menú:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nombre:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separador)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Nombre sub-menú" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Destino de Directorio rápido" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Determinar si quiere que el cuadro activo sea ordenado en un orden específico luego de cambiar directorio" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Determinar si quiere que el cuadro no activo sea ordenado en un orden específico luego de cambiar directorio" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Algunas funciones para seleccionar ruta apropiada relativa, absoluta, carpetas especiales de windows, etc." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Total de entradas guardadas: %d\n" "\n" "Archivo backup: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Total entradas exportadas:" #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Quiere borrar todos los elementos contenidos en el sub-menú [%s]?\n" "Si responde NO solo borrará delimitadores de menú, pero mantendrá elemento dentro del sub-menú.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Ingrese ubicación y archivo donde guardar archivo de Lista rápida de Directorios" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Longitud de archivo incorrecto en: \"%s\"" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Por favor, inserte próximo disco o algo similar.\n" "\n" "Permitirá escribir este archivo:\n" "\"%s\"\n" "\n" "Número de bytes restantes a escribir: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Error en línea de comando" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nombre no válido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato no válido de archivo de configuración" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ruta inválida" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Ruta %s contiene caracteres no permitidos." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Este no es un complemento válido!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Este complemento esta construído para Double Commander %s.%sNo funcionará con Double Commander %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Cita no válida" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selección no válida" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Cargando lista de archivos..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "Ubicar archivo de configuración de TC (wincmd.ini)" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Ubicar archivo ejecutable de TC (totalcmd.exe o totalcmd64.exe)" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copiar archivo %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Borrar archivo %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Error: " #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Extraer archivo %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Información: " #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crear enlace %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crear directorio %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mover archivo %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimir en archivo %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Eliminar directorio %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Hecho: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crear enlace simbólico %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Comprobar integridad del archivo %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "Destruir archivo %s" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "Destruir directorio %s" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Contraseña maestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Por favor, introduzca la contraseña maestra:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Opciones de miscelánea han sido modificadas. Quiere guardarlas antes de salir?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nuevo archivo" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Próximo volumen será descomprimido" #: ulng.rsmsgnofiles msgid "No files" msgstr "No hay archivos" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ningún archivo seleccionado." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Espacio insuficiente en unidad de destino, Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Espacio insuficiente en unidad de destino, Reintentar?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "No se puede borrar archivo %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "No implementado" #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Contraseña:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Contraseñas son diferentes!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Por favor, ingrese la contraseña:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Contraseña (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Por favor, reingrese la contraseña para verificación:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Añadir %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configurar" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Borrar %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preajuste \"%s\" ya existe. Quiere sobrescribirlo?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Achivo para texto soltado:" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Por favor, haga este archivo disponible. Reintentar?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Renombrar/mover %d archivos/directorios seleccionados a:" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Renombrar/mover \"%s\" a:" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Por favor, reinicie Double Commander para aplicar cambios" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Seleccionados: %s de %s, archivos: %d de %d, carpetas: %d de %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Por favor, seleccione solo archivos de suma de verificación" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Por favor, seleccione ubicación del siguiente volumen" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definir etiqueta de volumen" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Directorios Especiales" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Añadir ruta de cuadro activo" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Añadir ruta de cuadro inactivo" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Navegar y usar ruta seleccionada" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Usar variables de entorno..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Ir a ruta especial de Double Commander..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Ir a variable de entorno..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Ir a otras carpetas especiales de Windows..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Ir a carpeta especial de Windows (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Hacer ruta absoluta" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Hacer relativo a ruta especial de Double Commander..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Hacer relativo a variable de entorno..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Hacer relativo a carpeta especial de Windows (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Hacer relativo a otra carpeta especial de Windows..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Usar ruta especial de Double Commander..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Usar otra carpeta especial de Windows..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Usar carpeta especial de Windows (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renombrar pestaña" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nombre de la nueva pestaña:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Ruta destino:" #: ulng.rsmsgtcconfignotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Error! No se pudo encontrar archivo configuración de TC:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration executable:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Error! No se pudo encontrar archivo configuración de ejecutable de TC:\n" "%s\n" #: ulng.rsmsgtcisrunning #, fuzzy #| msgid "" #| "Error! TC is still running but it should be closed for this operation.\n" #| "Close it and press OK or press CANCEL to abort.\n" msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Error! TC está ejecutándose, pero debe cerrarse para esta operación.\n" "Ciérrelo y pulse Aceptar o Cancelar para interrumpir.\n" #: ulng.rsmsgtctoolbarnotfound #, fuzzy #| msgid "" #| "Error! Cannot find the desired wanted TC toolbar output folder:\n" #| "%s\n" msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Error! No se pudo encontrar la carpeta de salida de barra de herramientas TC:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "Ingrese ubicación y nombre de archivo donde guardar archivo de Barra de herramientas de TC" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Error! Problema al guardar barra de herramientas!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Ubicar archivo \".toolbar\" para importar" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Ubicar archivo \".BAR\" para importar" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Barra de herramientas ha sido modificada. Quiere guardarla antes de salir?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Ingrese ubicación y nombre de archivo de donde recuperar Barra de herramientas" #: ulng.rsmsgtoolbarsaved #, fuzzy #| msgid "" #| "Saved!\n" #| "Toolbar filename: %s\n" msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Guardada!\n" "Nombre de archivo de Barra de herramientas: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Demasiados archivos seleccionados." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "No determinado" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nombre de usuario:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nombre de usuario (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etiqueta del volumen:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Por favor, ingrese el tamaño de volumen:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Destruir %d archivos/directorios seleccionados?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Destruir \"%s\" seleccionados?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist #, fuzzy #| msgid "No change;UPPERCASE;lowercase;First Char Big;" msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sin cambios;MAYÚSCULAS;minúsculas;Primer caracter en Mayúsculas; Primero de cada palabra en Mayúsculas" #: ulng.rsoperaborted msgid "Aborted" msgstr "Interrumpido" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Calculando suma de verificación" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Calculando suma de verificación en \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Calculando suma de verificación de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calculando" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calculando \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Juntando" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Juntando archivos de \"%s\" a \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copiando" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copiando desde \"%s\" a \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copiando \"%s\" a \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creando directorio" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creando directorio \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Borrando" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Borrando en \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Borrando \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Ejecutando" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Ejecutando \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Extrayendo" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Extrayendo desde \"%s\" a \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Finalizado" #: ulng.rsoperlisting msgid "Listing" msgstr "Listando" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Listando \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Moviendo" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Moviendo desde \"%s\" a \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Moviendo \"%s\" a \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "No iniciado" #: ulng.rsoperpacking msgid "Packing" msgstr "Comprimiendo" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Comprimiendo desde \"%s\" a \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Comprimiendo \"%s\" a \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausado" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pausando" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "En cola" #: ulng.rsoperrunning msgid "Running" msgstr "Funcionando" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Configurando propiedad" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Configurando propiedad en \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Configurando propiedad de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Dividiendo" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Dividiendo \"%s\" a \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Iniciando" #: ulng.rsoperstopped msgid "Stopped" msgstr "Detenido" #: ulng.rsoperstopping msgid "Stopping" msgstr "Deteniendo" #: ulng.rsopertesting msgid "Testing" msgstr "Comprobando" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Comprobando en \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Comprobando \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Verificando suma de verificación" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Verificando suma de verificación en \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verificando suma de verificación de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Esperando para acceder al archivo origen" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Esperando por respuesta de usuario" #: ulng.rsoperwiping msgid "Wiping" msgstr "Destruyendo" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Destruyendo en \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Destruyendo \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Trabajando" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Añadir a principio;Añadir al final;Añadido inteligente" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Borrar:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Extraer sin ruta:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Formato modo de análisis:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Posición ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Rango de búsqueda ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parámetro" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Pregunta para la contraseña:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Crear archivo autoextraíble:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Comprobar:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nombre del tipo de archivo comprimido:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valor" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Complemento asociado \"%s\" con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primero;Último;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Clásico, orden heredado; Orden alfabético (pero lenguaje permanece primero)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Cuadro activo de panel en izquierda, inactivo en derecha (heredado); Cuadro izquierdo en izquierda, derecho en derecha" #: ulng.rsoptdisable msgid "Disable" msgstr "Deshabilitado" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Habilitado" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introducir extensión" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Marca" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Marca + Cursor" #: ulng.rsoptexampletext msgid "Text" msgstr "Texto" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "ventana separada;ventana separada minimizada;panel de operaciones" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "flotante;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "El atajo %s para cm_Delete será registrado, así puede ser usado para revertir esta configuración." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Añadir tecla rápida para %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Añadir atajo" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "No se puede configurar el atajo" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Cambiar atajo" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comandos" #: ulng.rsopthotkeysdeletetrashcanoverrides msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "El atajo %s para cm_Delete tiene un parámetro que sobrescribe su configuración ¿Quiere cambiar este parámetro para usar la configuración global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "El atajo %s para cm_Delete necesita cambiar un parámetro para coincidir con el atajo %s ¿Quiere cambiarlo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descripción" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Editar atajo para %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Corregir parámetro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Atajos" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Atajos" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ninguno>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parámetros" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Definir atajo para borrar archivo" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Para que este ajuste funcione con el atajo %s, el atajo %s se puede asignar a cm_Delete pero ya está asignado a %s. Quiere cambiarlo?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "El atajo %s para cm_Delete es una secuencia para la que no se puede asignar una tecla con Shift. Este ajuste podría no funcionar." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Atajo en uso" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy #| msgid "Shortcut %s is already used for %s." msgid "Shortcut %s is already used." msgstr "El atajo %s ya esta usado." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Cambiarlo a %s?" #: ulng.rsopthotkeysusedby #, fuzzy #| msgid "used by" msgid "used for %s in %s" msgstr "usado por %s en %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usado para este comando pero con parámetros diferentes" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Compresores" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Actualizar automáticamente" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamiento" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Colores" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Columnas" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuración" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Columnas personalizadas" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Carpetas frecuentes" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Arrastrar y soltar" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Botón de lista de unidades" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Asociaciones de archivos" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operaciones de archivos" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Paneles de archivos" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vista de archivos" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipos de archivos" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Pestañas de carpeta" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Fuentes" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Resaltadores" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Atajos" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Iconos" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Lista de ignorar" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Teclas" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposición" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Registro" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Miscelánea" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Ratón" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Complementos" #: ulng.rsoptionseditorquicksearch #, fuzzy #| msgid "Quick search" msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Búsqueda/filtro rápida/o" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra de herramientas" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Complementos" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Herramientas" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Sugerencias de herramientas" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nada;Línea de Comando;Búsqueda Rápida;Filtro Rápido" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botón izquierdo; Botón derecho;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "al principio de la lista de archivos; después de los directorios (si los directorios están ordenados antes que los archivos); en posición ordenada; en el fondo de la lista de archivos" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "El complemento %s ya está asignado para las siguientes extensiónes:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Activo" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nombre de archivo" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nombre" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrado por" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensible;&Insensible" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Archivos;Di&rectorios;Archivos &y Directorios" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Ocultar panel de filtro cuando no es focalizado" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "no sensible a min./may.; de acuerdo a los ajustes locales (aAbBcC); primero mayúsculas luego minúsculas (ABabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordenar por nombre y mostrar primero;ordenar como archivos y mostrar primeros;ordenar como archivos" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabéticamente, considerando acentos;Orden natural: alfabético y números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Arriba;Abajo;" #: ulng.rsopttoolbarbuttontype #, fuzzy #| msgid "Separator;Internal command;External command;Menu" msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comando inte&rno;Comando e&xterno;&Menú" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Heredado DC - Copia (x) nombre.ext; Windows - nombre (x).ext; Otro - nombre (x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "no cambiar posición; usar el mismo ajuste para nuevos archivos; para posición ordenada" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Archivos: %d, carpetas: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "No se puede cambiar los derechos de acceso para \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "No se puede cambiar el propietario para \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Archivo" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Directorio" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Pipe con nombre" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "No" #: ulng.rspropssocket msgid "Socket" msgstr "Zócalo" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo especial de bloque" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Caracter especial de dispositivo" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Enlace simbólico" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo desconocido" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Si (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Resultado de búsqueda" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<plantilla sin nombre>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleccione un directorio" #: ulng.rsshowhelpfor #, fuzzy #| msgid "Show help for %s" msgid "&Show help for %s" msgstr "Mo&strar ayuda para %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Todo" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comandos" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Vista previa" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Archivos: %d, Dirs: %d, Tamaño: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "No se pudo crear el directorio destino!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formato incorrecto de tamaño de archivo!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "No se puede dividir el archivo!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "El número de partes es mayor de 100! Continuar?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Seleccionar directorio:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Error creando el enlace simbólico." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texto por defecto" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texto normal" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Día(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mes(es)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segundo(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Año(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differ (comparación)" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Error abriendo el comparador" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Error abriendo el editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Error abriendo el terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Error abriendo el visor" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visor" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Por favor, informe de este error al bug tracker con una descripción de lo que estaba haciendo y el archivo siguiente:%sPulse %s para continuar o %s para interrumpir el programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Red" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visor interno de Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codificación" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nuevo tamaño" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s no encontrado!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.it.po������������������������������������������������������������0000644�0001750�0000144�00001161645�12666540554�017244� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-02-07 21:08+0300\n" "PO-Revision-Date: 2013-11-03 13:34+0100\n" "Last-Translator: Krypton <krypton873@gmail.com>\n" "Language-Team: Krypton <krypton873@gmail.com>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Italiano\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Tutto" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configura colonne personalizzate" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Sfondo:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordo cursore" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Consentire sovrapposizione colori" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Utilizza font e colori personalizzati" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Colore testo:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Font:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Dimensione:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Sfondo 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configura vista nr:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Colore cursore:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Colore testo:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Colore selezione:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nome:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Aggiungi colonna" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Personalizza colonna:" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Anteprima" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Scegli modello..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Contro&lla spazio libero" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Cop&ia attributi" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copia p&roprietà" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Copia d&ata/ora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Lin&k valido" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Elimina attri&buto di sola lettura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&scludi cartelle vuote" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Se&gui i link" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Riserva spazio" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Cosa fare quando non è possibile impostare data, attributi, etc. del file?" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usa il modello del file" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Quando le cartelle esistono" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quando i file esistono" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quando &non è possibile impostare proprietà" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<nessun modello>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copia negli appunti" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Home Page:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisione" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versione" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Reset" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Seleziona gli attributi" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Archivio" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mpresso" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Cartella" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Codificato" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Nascosto" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Sola le&ttura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "S&parse" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Link simbolico" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporaneo" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Attributi NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Attributi generali" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Come te&sto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calcola Checksum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&rea un file di Checksum separato per ogni file" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "&Salva file di Checksum in:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verifica Checksum..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Ag&giungi" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "C&onnetti" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestore connessioni" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Connetti a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&ggiungi alla coda" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pzioni" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Sa&lva opzioni come predefinite" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copia il(i) file" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nuova coda" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Coda 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Coda 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Coda 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Coda 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Coda 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Commenta file/cartella" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "M&odifica commento per:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "&Codifica:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Confronto Automatico" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Modalità binaria" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Annulla" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copia blocco a destra" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copia blocco a destra" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copia blocco a sinistra" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copia blocco a sinistra" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ripristina" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selezion&a Tutto" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annulla" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Es&ci" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Prima differenza" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Prima differenza" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignora maiusc./minusc." #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignora Spazi" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Mantenere scorrimento" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Ultima differenza" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Ultima differenza" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Differenze della linea" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Prossima differenza" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Prossima differenza" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Apri sinistra..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Apri destra..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Colora sfondo" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Differenza precedente" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Differenza precedente" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Ricarica" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Ricarica" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Salva" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Salva" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Salva come..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Salva come..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Salva a sinistra" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Salva a sinistra" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Salva a sinistra come..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Salva a sinistra come..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Salva a destra" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Salva a destra" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Salva a destra come..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Salva a destra come..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Confronta" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Confronta" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codifica" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codifica" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Confronta file" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Sinistra" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Destra" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Azioni" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "Co&difica" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opzioni" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Aggiungi nuovo collegamento alla sequenza" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Rimuovi l'ultimo collegamento dalla sequenza" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Solo per questi controlli" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametri (ognuno in una linea separata):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Collegamenti:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Info" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configurazione" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configurazione" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copia" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Taglia" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Elimina" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Trova" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Cerca" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Trova prossimo" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Trova prossimo" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Incolla" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Ripristina" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Ripristina" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Sostituisci" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Sostituisci" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selezion&a Tutto" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Seleziona Tutto" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Annulla" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Annulla" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Chiudi" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Esci" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Exit" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Nuovo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Nuovo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Apri" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Apri" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Salva" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Sal&va Come.." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Salva come" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Sal&va Tutto" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Salva tutto" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Modifica" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "Ai&uto" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codifica" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Apri come" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Salva come" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Evidenziazione sintassi" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fine linea" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Distringui m&aiusc./minusc." #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Cerca da ^" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Espressioni &Regolari" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Seleziona solo &testo" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Solo parole in&tere" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opzione" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "&Sostituisci con:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Ri&cerca per:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direzione" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Decomprimi file" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Estrai i nomi di percorso se salvati con i file" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Estrai ogni archivio in una cartella &separata (nome dell'archivio)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "S&ovrascrivi file esistenti" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Alla &cartella:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Estrai file corrispondenti al filtro file:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Password per il file codificato:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Aggiungi" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Aggiungi" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "A&ggiungi" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "&Giù" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "&Elimina" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "&Elimina" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Elimina" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "&Rinomina" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "&Su" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Associazioni file" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Azioni" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Estensioni" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Tipi di file" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Azione:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Comando:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Modifica" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Apri nell'Editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Percorso file" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Percorso Completo" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Prendi l'output dal comando" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Apri" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Esegui in nel terminale" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Apri in VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Visualizza" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Apri nel visualizzatore" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Attendere..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nome file:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Da:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clicca su chiudi quando il file temporaneo può essere cancellato!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Al pannello" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Visualizza tutto" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operazione corrente" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Da:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "A:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Imposta proprietà" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Imposta su &tutti i file selezionati" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "&Salta questo file" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietà" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Testo:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contiene:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nome:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Percorso:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Gruppo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Ultimo accesso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ultima modifica:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Ultimo cambio di stato:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ottale:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "&Proprietario" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Dimensione:" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Link simbolico a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Proprietà" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Aggiungi" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Vai al file" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "&Ultima ricerca" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nuova ricerca" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "C&arica" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "S&alva" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Sa&lva con \"Start in directory\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Se salvato allora \"Start in directory\" sarà ripristinato al caricamento del modello. Usalo se vuoi effettuare una ricerca su una cartella specifica" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Avvia" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "A&nnulla" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usa modello" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Mostra" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Feed to &listbox" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Trova file" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Dist&ingui maiusc./minusc." #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data da:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Dat&a a:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "D&imensione da:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Di&mensione a:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Cerca &testo in file" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Segui link s&imbolico" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Trova file che N&ON contengono il testo" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Non &più vecchio di:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "&Cerca usando parte del nome del file" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Espressioni &Regolari" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "So&stituisci con" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Cartelle e &file selezionati" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Data/&Ora da:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Data/O&ra a:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Utilizza plugin per le ricerche:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Inserisci i nomi delle cartelle che devono essere escluse dalla ricerca, separati con \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Inserisci i nomi di file che devono essere esclusi dalla ricerca, separati con \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Inserisci i nomi di file separati con \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Cartelle" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "File" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Cerca Data" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Attri&buti" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Codi&fica:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&scludi sottocartelle" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Escludi file" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "&Filtro file" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Avvio nella &cartella" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Trova so&ttocartelle:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Ricerche &precedenti:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Rimuovi dalla lista" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Visualizza tutti gli elementi trovati" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostra nel visualizzatore" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanzate" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carica/Salva" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugin" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Risultati" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Standard" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Cerca" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Cerca" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "D&istingui maiusc./minusc." #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Crea un Hard Link" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinazione a cui punta il collegamento" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome del co&llegamento" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Linker" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Salva in..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Elemento" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "&Nome file" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "&Giù" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Giù" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Elimina" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Elimina" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "&Su" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Su" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Info" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Aggiungi nome file nella linea di comando" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Aggiungi percorso e nome file nella linea di comando" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copia percorso completo nella linea di comando" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Visualizzazione breve" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcola spazio &occupato" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Cambia cartella" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Vai alla cartella superiore" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Vai alla cartella radice" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcola Check&sum..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Verifica Chec&ksum..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Pulisci il file di registro operazioni" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Pulisci la finestra di registro operazioni" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Chiudi &tutte le schede" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "&Chiudi la scheda" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Prossima riga di comando" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Scrivi nella riga di comando il prossimo comando della cronologia" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Riga di comando precedente" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Scrivi nella riga di comando il precedente comando della cronologia" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "VIsta colonne" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Confronta per &contenuto" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Confronta cartelle" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Confronta cartelle" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostra menu contestuale" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copia" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copia il nome del file con il &percorso completo" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copia nome(i) di file negli appunti" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copia file senza chiedere conferme" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copia nello stesso pannello" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copia" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Most&ra spazio occupato" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "&Taglia" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Cronologia cartelle" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Cartelle pre&ferite" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Modifica" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Modifica co&mmento..." #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Modifica nuovo file" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Modifica campo percorso precedente nella lista file" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Scambia &pannelli" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Es&ci" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Estrai file..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "&Associazioni file..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Unisci file..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostra proprietà &file" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividi file..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Attiva linea di comando" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Posiziona cursore sul primo file in lista" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Posiziona cursore sull'ultimo file in lista" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Crea &Hard Link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Contenuti" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Modalità &pannelli &orizzontali" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastiera" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Sinistra &= Destra" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Apri lista unità di sinistra" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carica selezione dagli a&ppunti" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carica selezione da &file..." #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "Create directory" msgid "Create &Directory" msgstr "Crea cartella" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Seleziona tutti i file con la stessa e&stensione" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverti selezione" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Seleziona tutto" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Deseleziona un gr&uppo..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Seleziona un &gruppo..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Deseleziona tutto" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizza finestra" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Strumento Multi-&Rinomina" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "&Connetti alla Rete..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "&Disconnetti dalla Rete" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Connessione &rapida alla rete..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Nuova scheda" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Vai alla scheda &successiva" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Apri" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tenta di aprire l'archivio" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Apri barra file" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Apri car&tella in una nuova scheda" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Apri lista &VFS" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualizzatore operazioni" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opzioni..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Comprimi file..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Imposta la posizione del divisore" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Inc&olla" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Vai alla scheda &precedente" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rapido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Ricerca rapida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Pannello di visualizzazione &rapida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Aggiorna" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Sposta" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Sposta/rinomina i file senza chiedere conferma" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Rinomina" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "Ri&nomina scheda" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Ripristina selezione" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "In&verti ordine" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Destra &= Sinistra" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Apri lista unità di destra" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Avvia &terminale" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Sal&va selezione" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Salva s&elezione su file..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Ricerca..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Cambia &attributi..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloccato con cartelle aperte in &nuove schede" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normale" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Bloccato" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloccato con modifiche alla &cartella consentite" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Apri" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Apri usando le associazioni di file di sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Visualizza pulsante menu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Visualizza cronologia della linea di comando" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostra file &nascosti/di sistema" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordina per &attributi" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ordina per da&ta" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordina per &estensione" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordina per &nome" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordina per &dimensione" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Attiva/disattiva la lista dei file da ignorare" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Crea &Link Simbolico..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destinazione &= Sorgente" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "&Verifica archivio(i)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Anteprime" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visualizza anteprime" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Trasferisci cartella evidenziata dal cursore nella finestra di sinistra" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Trasferisci cartella evidenziata dal cursore nella finestra di destra" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Deseleziona i file con la stessa estensione" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Visualizza" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostra cronologia dei percorsi visitati per la vista attiva" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Vai alla prossima voce nella cronologia" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Vai alla voce precedente nella cronologia" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visita il sito di Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Cancellazione sicura" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Esci" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Cartella" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminale" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Cartelle preferite" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostra la cartella corrente del pannello di destra in quello di sinistra" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Vai alla cartella home" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Vai alla cartella radice" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Vai alla cartella superiore" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Cartelle Preferite" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostra la cartella corrente del pannello di sinistra nel pannello di destra" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Percorso" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copia..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Crea collegamento..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Pulisci" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Nascondi" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Seleziona tutto" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Sposta..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Crea un collegamento simbolico (simlink)" #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Pannello Opzioni" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Esci" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Ripristina" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Avvio" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandi" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfigurazione" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&File" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Selezione" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rete" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Visualizza" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opzioni" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Pannelli" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copia" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Taglia" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Elimina" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Modifica" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Incolla" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Annulla" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Scorciatoia" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definire..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "&O seleziona il tipo predefinito:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Crea nuova cartella" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Inserisci un nuovo nome di cartella:" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Nuova Dimensione" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altezza :" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualità compressione Jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Larghezza :" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Altezza" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Larghezza" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Carica" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Rinomina" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Reimposta &tutto" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Salva" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Strumento Multi-Rinomina" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "A&bilita" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&spressioni Regolari" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usa la sostituzione" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Estensione" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contatore" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Trova && Sostituisci" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Registra risultati" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Filtro" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Preset" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Estensione" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Trova..." #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervallo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nome file" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "&Sostituisci" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Numero di p&artenza" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Larghezza" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Contatore" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Giorno" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Giorno (2 cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Giorno della settimana(corto, es: \"lun\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Giorno della settimana(lungo, es: \"lunedì\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Carattere alla posizione x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caratteri dalla posizione x a y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Ora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Ora (2 cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuto (2 cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mese" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mese (2 cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nome mese(corto, es : \"gen\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nome del mese(lungo, es : \"gennaio\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nome" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Carattere alla posizione x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Carattere dalla posizione x a y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Ora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Estensione..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nome..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Secondi" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Secondi (2 cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Anni (2 cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Anni (4 cifre)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Vecchio nome del file" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Nuovo nome del file" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Percorso del file" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Scegli un'applicazione" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personalizzato" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Salva associazione" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Setta l'applicazione selezionata come azione predefinita" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Tipo di file da aprire: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Nomi di file multipli" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "URI multipli" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome di file singolo" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI singolo" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Applica" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opzioni" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Si prega si selezionare una delle sotto pagine, questa pagina non contiene alcuna impostazione" #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Config.a&utomatica" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "E&limina" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Rinomina" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "De&bug mode" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "A&bilita" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "M&ostra output della console" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opzioni" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Agg&iungi:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "tfrmoptionsarchivers.lblarchiveextension.caption" msgid "E&xtension:" msgstr "E&stensione:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Es&trai:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Lista" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Elencazione &finita (opzionale):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "For&mato lista:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Avvio elencazione (opzionale):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Arc&hiviatore:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "De&scrizione:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Addizionale" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Generale" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quando dimen&sione, data o attributi cambiano" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per i seguenti &percorsi e relative sottocartelle:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quando i file sono &creati, eliminati o rinominati" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quando l'applicazione è in secondo &piano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Disabilita auto-aggiornamento" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Aggiorna lista file" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Tray icon sempre &visibile " #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Nascondi automaticamente i dispositivi smontati" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Sposta icone nella s&ystem tray quando minimizzato" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "C&onsenti solo una copia di DC in esecuzione" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Qui puoi inserire una o più unità o punti di mount, separati da \";\"" #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Lista &nera delle unità" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Taglia &testo alla larghezza colonna" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linee &orizzontali" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linee &verticali" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&uto-riempimento colonna" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostra griglia" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Auto-ridimensionamento colonne" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Dimen&sione automatica colonna" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Cronologia linea di co&mando" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Cronologia &cartelle" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "&Cronologia filtri file" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Sal&va configurazione" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Cronologia Trov&a/Sostituisci" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Posizione file di configurazione" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Salva all'uscita" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Imposta sulla linea di comando" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Cartella p&rogramma (versione portabile)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Cartella home dell'&utente" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tutto" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Nuovo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Salva come" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Salva" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Consentire sovrapposizione colori" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generale" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Bordo cursore" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Sfondo:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Sfondo 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Con&figura colone per file system:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Colore cursore:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Colore testo:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Font:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Dimensione:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Colore testo:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Colore selezione:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Aggiungi colonna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nome:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Percorso:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Taglia" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Incolla" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "&Mostra finestra di conferma dopo il rilascio dell'oggetto" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostra &file system" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostra spazio lib&ero" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostra &etichetta" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista unità" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "S&fondo" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "S&fondo" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Salva" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Attributi degli elementi" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "P&rimo piano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "P&rimo piano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Selezione-testo" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usa (e modifica) schemi di impostazione &globale" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usa schemi di impostazione &locale" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Grassetto" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Corsivo" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Cancellare" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "O&n" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Sottolinea" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verti" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "O&ff" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "O&n" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Taglia" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Incolla" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Rinomina" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Aggiungi" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Aggiungi" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "&Giù" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Modifica" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Elimina" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "&Rinomina" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "&Su" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Azioni" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Estensioni" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipi di file" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Icona" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Azione:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Comando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Percor&so di avvio" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Modifica" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Apri nell'Editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Prendi l'output dal comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Apri" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Esegui in nel terminale" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Visualizza" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Apri nel visualizzatore" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostra finestra di conferma per:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operazione di cop&ia" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operazione di &eliminazione" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "Elimina dal cestino (il tasto shift inverte questa impostazione)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operazione di e&liminazione dal cestino" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "&Rimuovi proprietà sola lettura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operazione di s&postamento" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Cerca parte del nome del file" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Processa commenti con file/cartelle" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Seleziona solo il nome del &file quando si rinomina (non l'estensione)" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mostr&a pannello di selezione nella finestra di dialogo copia/sposta" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "S&alta operazioni sui file con errori e riportali nella finestra di registro operazioni" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Esecuzione di operazioni" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Cerca file" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Interfaccia utente" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Dimensione del &Buffer per operazioni sui file (in kB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostra &inizialmente il progresso delle operazioni in:" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Numero passaggi di cancellazione sicura" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Usa mappatura della memoria per la ricerca di te&sto nei file" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Usa stream per la ricerca di testo nei file" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Consentire sovrapposizione colori" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Usa il cursore &Frame" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usa &indicatore gradiente" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sa selezione invertita" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Bordo cursore" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicatore di spazio libero sull'unità" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "Sfo&ndo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Sfon&do 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "C&olore Cursore:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&sto Cursore:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Livello di &luminosità del pannello inattivo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Indicat.color.s&fondo:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Indicat.color.Primo&Piano:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Selezione colore:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Colore t&esto:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "No&n caricare la lista di file finché una scheda viene attivata" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "&Mostra parentesi quadre attorno alle cartelle" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Evi&denzia i file nuovi/aggiornati" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Carica lista &file in un processo separato" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Carica le icone &dopo la lista file" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Mostra file nascosti/di s&istema" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "&Quando si selezionano file con <SPAZIO>, il cursore viene spostato sul file successivo (come <INS>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formattazione" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordinamento" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "Di&stingui maiusc./minusc.:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato non corretto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato &data e ora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato della dimen&sione file" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Inserisci nuovi file" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "O&rdinamento cartelle:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "&Metodo di ordinamento:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Sposta file aggiornati" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Elimina" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modello..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Colore dei tipi di file (ordina con drag&&drop)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "&Attributi categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Co&lore categoria:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Filtro categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nome categoria:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Font &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Registra font" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Font principale" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Visualizzatore &Book Font" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "&Visualizzatore font" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "&Aggiungi scorciatoia" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Elimina scorciatoia" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Modifica scorciatoia" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorie:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&mandi:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "&Scorciatoia file:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Comando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Scorciatoie" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descrizione" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Scorciatoie" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parametri" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Controlli" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Per i seguenti &percorsi e le relative sottocartelle:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostra icone per le azioni nei &menu" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostra i&cone sostitutive, ad es. per i collegamenti" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Disabilita icone speciali" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Icone nei menu" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr " Dimen&sione Icona " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr " Mostra icone alla sinistra del nome file " #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "&Tutto" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Tutti gli associati + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "&No icone" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "S&olo icone predefinite" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "&Aggiungi nomi selezionati" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Aggiungi nomi selezionati con percorso co&mpleto" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignora (non mostrare) i seguenti file e cartelle:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Salva in:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Le frecce sinistra e destra cambiano cartella (movimenti stile Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Digitazione" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+L&ettere" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Le&ttere" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Lettere" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Pulsanti &piatti" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "I&nterfaccia piatta" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "P&ulsanti piatti" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostra indicatore spazio lib&ero sull'etichetta unità" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostra finestra di registro operazioni" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostra pannello di registro operazioni in secondo piano" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostra progressi comuni nella barra menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostra &linea di comando" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostra &cartella corrente" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostra pulsanti uni&tà" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostra etichetta s&pazio libero" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostra pulsan&te lista unità" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostra i tasti &funzione" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostra &menu principale" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Mostra barra &pulsanti" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostra &etichetta breve di spazio libero" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostra barra di &stato" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostra le intestazioni delle schede" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "Mostra le schede" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostra finestra te&rminale" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostra due barre pulsanti di unità (larghezza fi&ssa, sopra le finestre file)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Disposizione schermo" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Comprimi/decomprimi" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&ia/Sposta/Crea collegamento/simlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Cre&a/Elimina cartelle" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Registra &errori" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Crea file di registro:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Registra messaggi di &informazione" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Registra &operazioni eseguite con successo" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Plugin del &File system" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "File di registro operazioni" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Registro operazioni" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Stato operazioni" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Rimuovi anteprime per file non più esistenti" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "&Vai sempre alla radice quando si cambia unità" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostra messaggi di avvertimento (solo pulsante \"OK\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Salva anteprime in cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Anteprime" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Dimensione anteprime:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Selezione da mouse" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Scorrimento" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Selezione" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linea per linea" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linea per linea &con movimento del cursore" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Pagina per pagina" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "A&ggiungi" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Con&figura" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "A&bilita" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Elimina" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Tweak" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "I plugin di ricer&ca consentono di usare algoritmi di ricerca alternativi o strumenti esterni (come \"locate\", ecc.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "I plugin dei compr&essori sono usati per aprire archivi non supportati internamente da Double Commander." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "I plu&gin di contenuto permettono di visualizzare dettagli estesi sui file come tag mp3 o attributi di immagine nella lista file, o di usarli negli strumenti di ricerca e nello strumento Multi-Rinomina." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "I plugin del Fi&le system permettono l'accesso a dischi altrimenti inaccessibili dal sistema operativo o a dispositivi esterni come Palm/PockePC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "I plugin del visualizzatore consentono di aprire formati di file come immagini, fogli elettronici, database ecc. in Visualizza/Mostra (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Attiva" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Registrato per" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "&Plugin ricerca (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Plugin &compressori (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Pl&ugin contenuto (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Plugin F&ile system (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Plugin &visualizzatore (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Iniziale (il nome deve iniziare con il primo carattere digitato)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Fi&nale (l'ultimo carattere digitato prima del punto . deve corrispondere)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opzioni" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Corrispondenza esatta del nome" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Ricerca maiusc./minusc." #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Cerca questi elementi" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Attiva &pannello destinazione quando clicchi su una delle sue schede" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "&Mostra l'intestazione della scheda anche quando ce n'è una sola" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "&Conferma chiusura di tutte le schede" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limita lunghezza titolo della scheda a" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostra schede bloccate con asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "&Schede su più linee" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Su apre nuova scheda in secondo piano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Apri &nuove schede accanto alla corrente" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostra tasto di chiusura sulle s&chede" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Intestazioni delle schede" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caratteri " #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posizione sche&de" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "No" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "Clo&na pulsante" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Elimina" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Modifica scorciato&ia" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserisci nuovo tasto" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Altro" #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Rimuovi scorciato&ia" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Pulsanti &piatti" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Inserisci parametri di comando, ognuno in una linea separata. Premi F1 per visualizzare l'aiuto sui parametri" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aspetto" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Dimensione ba&rra" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&do" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametr&i:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Scorciatoia:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Ico&na:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Dimensione ic&ona:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametri:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Percor&so di avvio" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "&Tooltip:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo di pulsante" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "&Lascia la finestra del terminale aperta dopo l'esecuzione di un programma" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Esegui nel terminale" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usa programma esterno" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parametri &addizionali" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "&Percorso del programma da eseguire" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "&Aggiungi" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "A&pplica" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Elimina" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modello..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostra Tooltip" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Campi personalizzati per tipo di file" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Suggerimento categoria:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Filtro categoria:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Nome categoria:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Visualizzatore modo book" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Esempio" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Colore di &sfondo del visualizzatore book" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Colore del &font del visualizzatore book" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Numero di colonne del visualizzatore book" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Configura" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimi file" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "&Crea archivi separati, uno per ogni file/cartella" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Crea archivio &autoestraente" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "C&ripta" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Sp&osta nell'archivio" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Multiple disk archive" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "In&serisci prima in archivio TAR" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "&Comprimi anche i nomi di percorso (solo ricorsivamente)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimi i file nell'archivio:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressore" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "&Decomprimi tutto ed esegui" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Estrai ed esegui" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Proprietà dell'archivio" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributi:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Tasso di compressione:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metodo:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Dimensione originale:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "File:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Dimensione dell'archivio:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressore:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Data/ora:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Chiudi il pannello filtro" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Inserisci il testo da cercare o filtra per" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Distingui maiusc./minusc." #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "D" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Cartelle" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "File" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Corrispondenza all'inizio" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Corrispondenza alla fine" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Passare alla ricerca o al filtro" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valore" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Chiudi" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "&Aiuto" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Seleziona caratteri da inserire:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Cambia attributi" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Adesivo" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Archivio" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Creato:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Nascosto" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Accesso:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modificato:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Sola lettura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Inclusione sottocartelle" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Proprietà timestamp" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributi" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(un campo grigio significa valore immutato)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Altro" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietario" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Testo:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Esegui" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(un campo grigio significa valore immutato)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Ottale:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Leggi" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Scrivi" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisore" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nome file" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Dimensione e numero parti" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Cartella &destinazione" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "File &sorgente" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Numero parti" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabyte" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobyte" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabyte" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Build" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisione" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versione" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Crea link simbolico" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destinazione alla quale punterà il collegamento" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome co&llegamento" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Chiudi" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Confronta" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Dimensione" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Dimensione" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Confronta" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&ggiungi nuovo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annulla" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "C&ambia" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Prede&finito" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Elimina" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "&Tweak plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Indivi&dua il tipo di archivio dal contenuto" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Possibilità di e&liminare i file" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Supporta la c&odifica" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mostr&a come file normali (nascondi icona archivi)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Supporta la gestione di arc&hivi in memoria" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Puoi &modificare l'archivio esistente" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "L'&archivio può contenere file multipli" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Puoi creare nuovi archi&vi" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&upporta finestre di dialogo con opzioni" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Consenti ricer&ca testi negli archivi" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descrizione:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Ril&eva stringa:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Estensione:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flag:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nome:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "&Plugin:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Info visualizzatore..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra il messagio Info" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copia File" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copia File" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Elimina File" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Elimina File" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "&Successivo" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Carica File Successivo" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "&Precedente" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carica file Precedente" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Specchia" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Specchia" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Sposta File" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Sposta File" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Ricarica" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Ricarica file corrente" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Ruota 180°" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Ruota 180°" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Ruota 270°" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Ruota 270°" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Ruota 90°" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Ruota 90°" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Salva come..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Salva file come..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Stira" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Stira immagine" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90°" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90°" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copia" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copia" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Ritaglia" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Elimina" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Elimina" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Schermo intero" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Evidenzia" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Specchia" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Sposta" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Sposta" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Colora" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Occhi Rossi" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Ridimensiona" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Annulla" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Zoom -" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizzatore" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositive" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Penna" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Evidenzia" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Colora" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diapositive" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Mostra" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180°" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90°" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90°" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Info" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Mostra come file &binario" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copia negli appunti" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Modifica" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codifica" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "E&sci" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&File" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Schermo intero" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Grafica" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Mostra in &esadecimale" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Immagine" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Mostra come \"&Book\"" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Specchia" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugin" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Anteprima" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Stampa..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Ruota" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Salva" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Salva come..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Cattura schermata" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Cerca" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Cerca successivo" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Cerca precedente" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Seleziona tutto" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Stira" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Mostra come &testo" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Visualizza" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Mostra con &ritorno a capo" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Zoom +" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Zoom -" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copia negli appunti" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Seleziona Tutto" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Avvia" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "F&erma" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Operazioni sui file" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Sempre in primo piano" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Usa \"drag && drop\" per spostare le operazioni fra le code" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Annulla" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nuova coda" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Visualizza in finestra separata" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Metti il primo in coda" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Metti l'ultimo in coda" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Coda" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fuori dalla coda" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Coda 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Coda 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Coda 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Coda 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Coda 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Mostra in finestra separata" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "&Ferma tutti" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando i file esistono" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando il file esiste" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Lavora in secondo piano (connesione separata)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando il file esiste" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annulla filtro rapido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cannulla operazione corrente" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Inserisci il CheckSum e seleziona l'algoritmo" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Verifica CheckSum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Gli appunti non contengono nessuna barra strumenti valida" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Attr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Estensione" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nome" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Dimensione" #: ulng.rsconfcolalign msgid "Align" msgstr "Allinea" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Etichetta" #: ulng.rsconfcolconfig msgid "Config" msgstr "Configura" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Elimina" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Contenuto campi" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Sposta" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Larghezza" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizza colonna" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copia (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Tutte le operazioni sono state completate" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progresso di tutte le operazioni %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Abband&ona" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Tutto" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "A&ggiungi" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Annulla" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continua" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Copia &in" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copia in &tutto" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "E&sci dal programma" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnora tutti" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&No" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "N&essuno" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Alt&ro" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Sovrascrivi" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Sovrascrivi &tutti" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Sovrascrivi tutti i più &grandi" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Sovrascrivi tutti i &vecchi" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Sovrascrivi tutti i più &piccoli" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "&Rinomina" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Riprendi" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Ri&tenta" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "Sa<a" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Salta t&utti" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Si" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calcola file e cartelle" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calcola Checksum..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verifica Checksum..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copia file" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Elimina file" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Sposta file" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Avvio" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Coda" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Velocità %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Velocità %s/s, tempo rimanente %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Dividi" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Cancellazione sicura file" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<nessuna etichetta>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<nessun media>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno di Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "nuovo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nome file:" #: ulng.rseditnewopen msgid "Open file" msgstr "Apri file" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Indietro" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Ricerca" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Avanti" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Sostituisci" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Chiedi;Sovrascrivi;Copia su;Salta" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Chiedi;Sovrascrivi vecchi;Copia su;Salta" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Chiedi;Non impostare più;Ignora errori" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definisci modello" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s livello(i)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "tutto (profondità illimitata)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "solo cartella corrente" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "La cartella %s non esiste!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Trovato: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Salva modello di ricerca" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nome modello:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Analizzato: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Analisi in corso" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Trova file" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Inizio a" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "%s liberi su %s byte" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s byte liberi" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Data/ora accesso" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributi" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Commento" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Dimensione compressa" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/ora creazione" #: ulng.rsfuncext msgid "Extension" msgstr "Estensione" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Collegamento a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/ora modifica" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nome" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nome senza estensione" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietario" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Percorso" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Dimensione" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Errore nella creazione dell'hardlink." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Dialogo copia/sposta" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Differenze" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Modifica" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Trova file" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principale" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualizzatore" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Linker completo" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Filtro di deselezione" #: ulng.rsmarkplus msgid "Select mask" msgstr "Filtro di selezione" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Filtro di input:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configura colonne personalizzate" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configura vista colonne personalizzate" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Azioni" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Modifica" #: ulng.rsmnueject msgid "Eject" msgstr "Espelli" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Monta" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Nuovo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Nessuna unità disponibile" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Apri" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Apri con..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Altro" #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordina per" #: ulng.rsmnuumount msgid "Unmount" msgstr "Smonta" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vista" #: ulng.rsmsgaccount msgid "Account:" msgstr "Account:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parametri addizionali per compressore da linea di comando:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Non è possibile copiare/spostare il file \"%s\" su sé stesso!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Impossibile eliminare cartella %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "ChDir a [%s] fallito!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Rimuovere tutte le schede inattive?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Questa scheda (%s) è bloccata! Chiudere ugualmente?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Sei sicuro di voler uscire?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Copia %d file/cartelle selezionati?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copia \"%s\"?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Eliminanare il file parzialmente copiato ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Elimina %d file/cartelle selezionati?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Spostare %d file/cartelle selezionati nel cestino?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Eliminare \"%s\"?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Spostare \"%s\" nel cestino?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossibile spostare \"%s\" nel cestino! Eliminare definitivamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Disco non disponibile" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Inserire estensione file:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Inserire nome:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Errore CRC nell'archivio" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Dati corrotti" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Impossibile connettersi al server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossibile copiare il file %s verso %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "La cartella col nome \"%s\" è già presente." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "La data %s non è supportata" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "La cartella %s esiste già!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funzione annullata dall'utente" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Errore nella chiusura del file" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossibile creare file" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Non ci sono più file nell'archivio" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossibile aprire il file esistente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Errore nella lettura file" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Errore di scrittura su file" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Impossibile creare cartella %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Collegamento non valido" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "File non trovato" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memoria insufficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funzione non supportata!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Errore nel comando del menu contestuale" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Errore durante il caricamento della configurazione" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Errore sintattico nell'espressione regolare!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Impossibile rinominare il file %s in %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Non posso salvare l'associazione!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossibile salvare il file" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Impossibile impostare gli attributi per \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossibile impostare data/ora per \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Impossibile impostare proprietario/gruppo per \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer troppo piccolo" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Troppi file da comprimere" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato dell'archivio sconosciuto" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nome" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "Il file %s è stato modificato, salvarlo?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "%s byte, %s" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Sovrascrivi:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "Il file %s esiste, sovrascriverlo?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Con il file:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "File \"%s\" non trovato." #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operazioni sul file in corso" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Alcune operazioni sui file non sono terminate. Chiudendo Double Commander alcuni dati potrebbero andare perduti." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Il file %s è in sola lettura. Eliminarlo ugualmente?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "La dimensione del file \"%s\" è eccessiva per il file system di destinazione!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "La cartella %s esiste, sovrascriverla?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Segui collegamento simbolico \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Percorso" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nome:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Errore nella linea di comando" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nome file non valido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato non valido del file di configurazione" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Percorso non valido" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Il percorso %s contiene caratteri non consentiti." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Non c'è un plugin valido!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Questo plugin è stato fatto per Double Commander: %s.%s. Non può funzionare con Double Commander per %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Quoting non valido" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Selezione non valida." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Carica lista..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copia file %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Elimina file %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Errore:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Estrai file %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Crea collegamento %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Crea cartella %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Sposta file %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimi file %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Rimuovere cartella %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Fatto:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Crea link simbolico %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Test integrità file %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Password principale" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Prego inserire password principale:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Nuovo file" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Il prossimo volume verrà decompresso" #: ulng.rsmsgnofiles msgid "No files" msgstr "Nessun file" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Nessun file selezionato." #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Non c'è abbastanza spazio sull'unità di destinazione. Continuare?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Non c'è abbastanza spazio sull'unità di destinazione. Riprovare?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Non è possibile eliminare il file %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Non implementato." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Password:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Le password sono differenti!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Si prega di inserire la password:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Password (Firewall) :" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Prego reinserire la password per verifica:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Aggiungi %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configura" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Elimina %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Preset \"%s\" già presente. Sovrascrivere?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Rinominare/spostare %d file/cartelle selezionati?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Rinomina/sposta selezione \"%s\"?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Prego, riavviare Double Commander per applicare le modifiche" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selezione: %s di %s, file: %d di %d, cartelle: %d di %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Prego, selezionare solo i file per il Checksum!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Prego selezionare la posizione del prossimo volume" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Imposta etichetta volume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Rinomina scheda" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nuovo nome di scheda:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Percorso destinazione:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Troppi file selezionati." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nome utente:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nome utente (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Etichetta volume:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Prego inserire la dimensione del volume:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Avviare la cancellazione sicura per i file/cartelle %d selezionati?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Eseguire la cancellazione sicura per la selezione \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Nessuna modifica;MAIUSCOLE;minuscole;Primo carattere maiusc.;Primo caratt. di ogni parola maiusc.;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Annullato" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Calcolo del Checksum" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Calcolo del Checksum in \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "Calcolo del Checksum di \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Calcolo in corso..." #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Calcolo di \"%s\" in corso " #: ulng.rsopercombining msgid "Joining" msgstr "Unione" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Unisci file in \"%s\" su \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Copia" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Copia da \"%s\" to \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Creazione cartella" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Creazione cartella \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Eliminazione" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Eliminazione in \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Eliminazione di \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Esecuzione" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Esecuzione di \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Estrazione" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Estrazione da \"%s\" a \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminato" #: ulng.rsoperlisting msgid "Listing" msgstr "Elencazione" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Elencazione di \"%s\" in corso" #: ulng.rsopermoving msgid "Moving" msgstr "Spostamento" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Spostamento da \"%s\" a \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Spostamento di \"%s\" a \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Non avviato" #: ulng.rsoperpacking msgid "Packing" msgstr "Compressione" #: ulng.rsoperpackingfromto #, fuzzy #| msgid "Compressione da \"%s\" a \"%s\"" msgid "Packing from \"%s\" to \"%s\"" msgstr "Compressione da \"%s\" a \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Compressione da \"%s\" a \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "In attesa" #: ulng.rsoperpausing msgid "Pausing" msgstr "Metti in attesa" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "In coda" #: ulng.rsoperrunning msgid "Running" msgstr "Caricamento in corso" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Imposta proprietà" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Imposta proprietà in \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Imposta proprietà di \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Divisione" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Divisione da \"%s\" a \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Avviamento" #: ulng.rsoperstopped msgid "Stopped" msgstr "Fermato" #: ulng.rsoperstopping msgid "Stopping" msgstr "Annulla" #: ulng.rsopertesting msgid "Testing" msgstr "Test" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Test in \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Verifica del Checksum" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Verifica del Checksum in \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Verifica del Checksum di \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Attendere per accesso al file sorgente" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Attendi per risposta utente" #: ulng.rsoperwiping msgid "Wiping" msgstr "Cancellazione sicura" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Cancellazione sicura in \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Cancellazione sicura \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Funzionamento" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Elimina:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Estrai senza percorso:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Modalità di Format parsing:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Posizione ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID Seek Range:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parametro" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Password query string" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Crea archivio autoestraente:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Test:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Tipo archivio:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valore" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associa plugin \"%s\" con:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primo;Ultimo;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Disabilita" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Abilita" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Inserire estensione" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursore" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Evidenzia" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Evidenzia + Cursore" #: ulng.rsoptexampletext msgid "Text" msgstr "Testo" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "finestra separata;minimizza finestra separata;pannello operazioni" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "Dinamico (decimale);B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "La scorciatoia %s per cm_Delete verrà registrata, può essere usata per invertire questo settaggio." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Aggiungi scorciatoia per %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Aggiungi scorciatoia" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossibile impostare scorciatoia" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Cambia scorciatoia" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Comando" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "La scorciatoia %s per cm_Delete ha un parametro che scavalca questa impostazione. Vuoi cambiare questo parametro per usare l'impostazione globale?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "La scorciatoia %s per cm_Delete necessita di avere un parametro modificato che corrisponda alla scorciatoia %s. Vuoi modificarlo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descrizione" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Modifica la scorciatoia per %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fissa parametro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Scorciatoia" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Scorciatoie" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<nessuno>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametri" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Setta scorciatoie per cancellare file" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Perché questo settaggio funzioni con la scorciatoia %s, la scorciatoia %s deve essere assegnata a cm_Delete ma è già assegnata a %s. Vuoi modificare ciò?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "La scorciatoia %s per cm_Delete è una scorciatoia sequenziale per cui una scorciatoia con lo Shift premuto non può essere assegnata. Questa impostazione potrebbe non funzionare." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Scorciatoia in uso" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "La scorciatoia %s è già usata." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Modificare esso in %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "usato per %s in %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "Usato per questo comando ma con differenti parametri" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Archiviatori" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Auto-aggiornamento" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamenti" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Colori" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Colonne" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configurazione" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Colonne personalizzate" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Cartelle Preferite" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Drag && drop" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Pulsante lista unità" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associazioni file" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operazioni sui file" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Pannello file" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visualizzazioni file" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipi di file" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Schede" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Font" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Evidenziazioni" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Scorciatoie" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Icone" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignora lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Tasti" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Lingua" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposizione" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Registro operazioni" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Altro" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mouse" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugin" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Ricerca Rapida/Filtro" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminale" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra strumenti" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Strumenti" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Tooltip" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nessuno;Linea di comando;Ricerca veloce;Filtro veloce" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Tasto sinistro;Tasto destro;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "In alto alla lista file;dopo le cartelle (se le cartelle sono ordinate prima dei file);in posizione ordinata;In fondo alla lista file" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Il plugin %s è già assegnato alle seguenti estensioni:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Attiva" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nome file" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nome" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registrato per" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Distingui maiusc./minusc.;&Nessuna distinzione maiusc./minusc." #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&File;Cartelle;File &e cartelle" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "&Nascondi pannello filtro quando selezionato" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "nessuna distinzione maiusc./minusc.;in accordo alle impostazioni locali (aAbBcC);prima maiuscole poi minuscole (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordina per nome e mostra prima;ordina come i file e mostra prima;ordina come file" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetico, considera accenti;Ordinamento naturale: alfabetico e numeri" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Inizio;Fine;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparatore;comando inte&rno;comando e&sterno;Men&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "non cambiare posizione;usa le stesse impostazioni per i nuovi file; alla posizione ordinata" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "File: %d, cartelle %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossibile modificare i permessi per \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Impossibile modificare il proprietario per \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "File" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Cartella" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nome pipe" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "No" #: ulng.rspropssocket msgid "Socket" msgstr "Socket" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo speciale a blocchi" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispositivo speciale a caratteri" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Collegamento simbolico" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo sconosciuto" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Si (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Risultati di ricerca" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modello senza nome>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Seleziona cartella" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "&Mostra aiuto per %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tutto" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Comando" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Anteprima" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Byte" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabyte" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobyte" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabyte" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabyte" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "File: %d, Cartella: %d, Dimensione: %s (%s byte)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossibile creare la cartella destinazione!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Errore nel formato della dimensione!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossibile dividere il file!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Il numero di parti è superiore a 100! Continuare?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Seleziona cartella:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Errore nella creazione del collegamento simbolico." #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Testo predefinito" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Testo non formattato" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Giorno(i)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Ora(e)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(i)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mese(i)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Secondo(i)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Settimana(e)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Anno(i)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Differenze" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Modifica" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Errore nell'apertura" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Errore apertura editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Errore apertura terminale" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Errore apertura visualizzatore" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminale" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualizza" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Si prega di riportare questo errore sul bug tracker con una descrizione di cosa è stato fatto e allegando il seguente file:%sPremere %s per continuare ad usare il programma oppure %s per chiuderlo." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rete" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualizzatore interno di Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Codifica" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Nuova Dimensione" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s non trovato!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" �������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.pt.po������������������������������������������������������������0000644�0001750�0000144�00001162436�12666540554�017252� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.5.5 alpha\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2014-07-19 08:56+0100\n" "Last-Translator: Pedro Albuquerque <palbuquerque73@gmail.com>\n" "Language-Team: Pedro Albuquerque\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.5.4\n" "X-Native-Language: Português\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Tudo" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Configurar colunas personalizadas" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "Fundo:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Usar letra e cor personalizadas" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "Cor do texto:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Letra:" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Tamanho:" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Fundo 2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "Configurar nº. de vista:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "Cor do cursor:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Texto do cursor:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "Cor de marca:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Nome:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Adicionar coluna" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Personalizar coluna" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Pré-visualizar" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Escolher modelo..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "&Verificar espaço livre" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Cop&iar atributos" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Copiar &propriedade" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Copiar d&ata/hora" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Corrigir li&gações" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Largar atributo Só de leit&ura" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption msgid "E&xclude empty directories" msgstr "E&xcuir pastas vazias" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "S&eguir ligações" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservar espaço" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "O que fazer quando não conseguir definir hora, atributos, etc. do ficheiro" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Usar modelo de ficheiro" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Quando a pa&sta existe" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Quando o &ficheiro existe" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Quando não conseguir definir propriedade" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<sem modelos>" #: tfrmabout.btnclose.caption msgctxt "TFRMABOUT.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Copiar para a área de transferência" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "Construção" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Página Web:" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "http://doublecmd.sourceforge.net" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "Revisão" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Repor" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Escolher atributos" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arquivo" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "Co&mprimido" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Pasta" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "&Encriptado" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "&Oculto" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Só de &leitura" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Es&parso" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "Ligação &simbólica" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&istema" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "&Temporário" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "Atributos NTFS" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Atributos gerais" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Como te&xto:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "TFRMCHECKSUMCALC.CAPTION" msgid "Calculate checksum..." msgstr "Calcular check sum..." #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "C&riar ficheiro checksum separado para cada ficheiro" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Gra&var ficheiros check sum em:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Verificar check sum..." #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "L&igar" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "&Apagar" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Gestor de ligações" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Ligar a:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "A&dicionar à fila" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "O&pções" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "Gra&var estas opções como predefinição" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Copiar ficheiro(s)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Comentário do ficheiro/pasta" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "E&ditar comentário de:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "A co&dificar:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca" #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Comparar automaticamente" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "Modo binário" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "Cancelar" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Copiar bloco à direita" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Copiar bloco à esquerda" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Apagar" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Selecion&ar tudo" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmdiffer.actexit.caption msgctxt "TFRMDIFFER.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmdiffer.actfirstdifference.caption msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.CAPTION" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actfirstdifference.hint msgctxt "TFRMDIFFER.ACTFIRSTDIFFERENCE.HINT" msgid "First Difference" msgstr "Primeira diferença" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorar maiúsculas" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorar espaços" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Continuar deslocamento" #: tfrmdiffer.actlastdifference.caption msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.CAPTION" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlastdifference.hint msgctxt "TFRMDIFFER.ACTLASTDIFFERENCE.HINT" msgid "Last Difference" msgstr "Última diferença" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Diferenças de linha" #: tfrmdiffer.actnextdifference.caption msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.CAPTION" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actnextdifference.hint msgctxt "TFRMDIFFER.ACTNEXTDIFFERENCE.HINT" msgid "Next Difference" msgstr "Diferença seguinte" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Abrir esquerdo..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Abrir direito..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Pintar fundo" #: tfrmdiffer.actprevdifference.caption msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.CAPTION" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actprevdifference.hint msgctxt "TFRMDIFFER.ACTPREVDIFFERENCE.HINT" msgid "Previous Difference" msgstr "Diferença anterior" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "&Recarregar" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Recarregar" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "Gravar" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "Gravar" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Gravar como..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Gravar como..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Gravar esquerdo" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Gravar esquerdo" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Gravar esquerdo como..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Gravar esquerdo como..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Gravar direito" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Gravar direito" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Gravar direito como...Gravar direito" #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Gravar direito como...." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Comparar" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Codificar" #: tfrmdiffer.caption msgctxt "TFRMDIFFER.CAPTION" msgid "Compare files" msgstr "Comparar ficheiros" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "&Esquerdo" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "&Direito" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "&Ações" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Opções" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Adicionar novo atalho à sequência" #: tfrmedithotkey.btncancel.caption msgctxt "TFRMEDITHOTKEY.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmedithotkey.btnok.caption msgctxt "TFRMEDITHOTKEY.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Remover último atalho da sequência" #: tfrmedithotkey.cghkcontrols.caption msgctxt "TFRMEDITHOTKEY.CGHKCONTROLS.CAPTION" msgid "Only for these controls" msgstr "Só para estes controlos" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parâmetros (cada um numa linha separada)" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Atalhos:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "Acerca" #: tfrmeditor.actabout.hint msgctxt "TFRMEDITOR.ACTABOUT.HINT" msgid "About" msgstr "Acerca" #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Configuração" #: tfrmeditor.actconfhigh.hint msgctxt "TFRMEDITOR.ACTCONFHIGH.HINT" msgid "Configuration" msgstr "Configuração" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcopy.hint msgctxt "TFRMEDITOR.ACTEDITCOPY.HINT" msgid "Copy" msgstr "Copiar" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditcut.hint msgctxt "TFRMEDITOR.ACTEDITCUT.HINT" msgid "Cut" msgstr "Cortar" #: tfrmeditor.acteditdelete.caption msgctxt "TFRMEDITOR.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Apagar" #: tfrmeditor.acteditdelete.hint msgctxt "TFRMEDITOR.ACTEDITDELETE.HINT" msgid "Delete" msgstr "Apagar" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "&Localizar" #: tfrmeditor.acteditfind.hint msgctxt "TFRMEDITOR.ACTEDITFIND.HINT" msgid "Find" msgstr "Localizar" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "Localizar seguinte" #: tfrmeditor.acteditfindnext.hint msgctxt "TFRMEDITOR.ACTEDITFINDNEXT.HINT" msgid "Find next" msgstr "Localizar seguinte" #: tfrmeditor.acteditgotoline.caption msgid "Goto Line..." msgstr "" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcr.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCR.HINT" msgid "Mac (CR)" msgstr "Mac (CR)" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDCRLF.HINT" msgid "Windows (CRLF)" msgstr "Windows (CRLF)" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditlineendlf.hint msgctxt "TFRMEDITOR.ACTEDITLINEENDLF.HINT" msgid "Unix (LF)" msgstr "Unix (LF)" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditpaste.hint msgctxt "TFRMEDITOR.ACTEDITPASTE.HINT" msgid "Paste" msgstr "Colar" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditredo.hint msgctxt "TFRMEDITOR.ACTEDITREDO.HINT" msgid "Redo" msgstr "Refazer" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "Substitui&r" #: tfrmeditor.acteditrplc.hint msgctxt "TFRMEDITOR.ACTEDITRPLC.HINT" msgid "Replace" msgstr "Substituir" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "Selecion&ar tudo" #: tfrmeditor.acteditselectall.hint msgctxt "TFRMEDITOR.ACTEDITSELECTALL.HINT" msgid "Select All" msgstr "Selecionar tudo" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.acteditundo.hint msgctxt "TFRMEDITOR.ACTEDITUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmeditor.actfileclose.hint msgctxt "TFRMEDITOR.ACTFILECLOSE.HINT" msgid "Close" msgstr "Fechar" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Sair" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Novo" #: tfrmeditor.actfilenew.hint msgctxt "TFRMEDITOR.ACTFILENEW.HINT" msgid "New" msgstr "Novo" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "&Abrir" #: tfrmeditor.actfileopen.hint msgctxt "TFRMEDITOR.ACTFILEOPEN.HINT" msgid "Open" msgstr "Abrir" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmeditor.actfilesave.hint msgctxt "TFRMEDITOR.ACTFILESAVE.HINT" msgid "Save" msgstr "Gravar" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Gra&var como..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Gravar como" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Gravar &tudo" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Gravar tudo" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Abrir como" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Gravar como" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Realçar sintaxe" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Fim de linha" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "TFRMEDITOR.N5.CAPTION" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "Sensível a maiúsculas" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "&Localizar a partir do cursor" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "Expressões ®ulares" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Só &texto selecionado" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Só &palavras completas" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Opção" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "Substitui&r com" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "Proc&urar por:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Direção" #: tfrmextractdlg.caption msgctxt "TFRMEXTRACTDLG.CAPTION" msgid "Unpack files" msgstr "Descomprimir ficheiros" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Descomprimir nomes de caminho se armazenados com os ficheiros" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Descomprimir cada arquivo para pastas &separadas (nome do arquivo)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "Subs&tituir ficheiros existentes" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Para a &pasta:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "&Extrair ficheiros com esta máscara:" #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "&Palavra passe de ficheiros encriptados:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Adicionar" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "&Adicionar" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "A&baixo" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Remo&ver" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Re&mover" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "R&enomear" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "A&cima" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Associações de ficheiros" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Ações" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensões" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Tipos de ficheiro" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ícone" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Ação:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Comando" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir no editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Caminho de ficheiro" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Caminho completo" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obter saída do comando" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executar no terminal" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Abrir no SVF" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir no visualizador" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmfileexecuteyourself.caption msgctxt "TFRMFILEEXECUTEYOURSELF.CAPTION" msgid "Wait..." msgstr "Aguarde..." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Nome de ficheiro:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Clique em Fechar quando o ficheiro temporário puder ser apagado!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Para o painel" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Ver tudo" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Operação atual" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "De:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Para:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "&Definir propriedades" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Definir p&ara todos os selecionados" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "Sa<ar este ficheiro" #: tfrmfileproperties.caption msgctxt "TFRMFILEPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmfileproperties.lblcontains.caption msgctxt "TFRMFILEPROPERTIES.LBLCONTAINS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Contém:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Nome:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmfileproperties.lblfolder.caption msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Caminho:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "&Grupo" #: tfrmfileproperties.lbllastaccess.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Último acesso:" #: tfrmfileproperties.lbllastmodif.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Última modificação:" #: tfrmfileproperties.lbllaststchange.caption msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Última alteração de estado:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Propr&ietário" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmfileproperties.lblsize.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Tamanho" #: tfrmfileproperties.lblsymlink.caption msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Ligação simbólica a:" #: tfrmfileproperties.lbltype.caption msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Tipo:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Propriedades" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmfinddlg.btnedit.caption msgctxt "TFRMFINDDLG.BTNEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "&Ir para ficheiro" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "Ú<ima procura" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "&Nova procura" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "&Apagar" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Carregar" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "Gra&var" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "G&ravar com \"Iniciar na pasta\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Se gravado então \"Iniciar na pasta\" será restaurado ao carregar o modelo. Use se quer fixar a procura numa determinada pasta" #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&I&niciar" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "C&ancelar" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Usar modelo" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Feed da caixa de lista" #: tfrmfinddlg.caption msgctxt "TFRMFINDDLG.CAPTION" msgid "Find files" msgstr "Localizar ficheiros" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "Sen&sível a maiúsculas" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "&Data desde:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Da&ta até:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "Ta&manho desde:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "Tam&anho até:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "Localizar &texto num ficheiro" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Seguir s&imbólicas" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Localizar ficheiros S&EM o texto" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Mais recentes q&ue:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Procurar parte do nome de ficheiro" #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "Expressão ®ular" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Su&bstituir por" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Pastas e &ficheiros selecionados" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "&Hora desde:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "H&ora até:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "&Usar suplemento de procura" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Introduza os nomes das pastas a excluir da procura separados por \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Introduza os nomes dos ficheiros a excluir da procura separados por \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Introduza os nomes de ficheiros separados por \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*" #: tfrmfinddlg.gbdirectories.caption msgctxt "TFRMFINDDLG.GBDIRECTORIES.CAPTION" msgid "Directories" msgstr "Pastas" #: tfrmfinddlg.gbfiles.caption msgctxt "TFRMFINDDLG.GBFILES.CAPTION" msgid "Files" msgstr "Ficheiros" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Localizar dados" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "Atri&butos" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Co&dificar" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "E&xcluir subpastas" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "&Excluir ficheiros" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Máscara de &ficheiro" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Iniciar na &pasta" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Procurar em su&bpastas" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "Procuras &prévias" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Remover da lista" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Mostrar todos os itens encontrados" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Mostrar no visualizador" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avançado" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Carregar/Gravar" #: tfrmfinddlg.tsplugins.caption msgctxt "TFRMFINDDLG.TSPLUGINS.CAPTION" msgid "Plugins" msgstr "Suplementos" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultados" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Padrão" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "&Localizar" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Localizar" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "Sensível a m&aiúsculas" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Criar ligação física" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para onde a ligação aponta" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome da &ligação" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "tfrmhotdirexportimport.btnselectall.caption" msgid "Import all!" msgstr "" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "tfrmhotdirexportimport.btnselectiondone.caption" msgid "Import selected" msgstr "" #: tfrmhotdirexportimport.caption msgctxt "tfrmhotdirexportimport.caption" msgid "Select the entries your want to import" msgstr "" #: tfrmhotdirexportimport.lbhint.caption msgctxt "tfrmhotdirexportimport.lbhint.caption" msgid "When clicking a sub-menu, it will select the whole menu" msgstr "" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "TFRMLINKER.CAPTION" msgid "Linker" msgstr "Ligador " #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Gravar em..." #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Item" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "Nome de &ficheiro" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "A&baixo" #: tfrmlinker.spbtndown.hint msgctxt "TFRMLINKER.SPBTNDOWN.HINT" msgid "Down" msgstr "Abaixo" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "&Remover" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Apagar" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "A&cima" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Acima" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Acerca" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Adicionar nome de ficheiro à linha de comandos" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Adicionar caminho e nome de ficheiro à linha de comandos" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Copiar caminho para a linha de comandos" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "Breve" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Vista breve" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "Calcular espaço &ocupado" #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Alterar pasta" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Alterar pasta para pasta-mãe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Alterar pasta para raíz" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "Calcular check&sum" #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "&Verificar checksum" #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Limpar ficheiro de diário" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Limpar janela de diário" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Fech&ar todos os separadores" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Fe&char separador" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Linha de comandos seguinte" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Definir linha de comandos para o comando seguinte do histórico" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Linha de comandos anterior" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Definir linha de comandos para o comando anterior do histórico" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "Completo" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Vista de colunas" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "&Compara por conteúdos" #: tfrmmain.actcomparedirectories.caption msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.CAPTION" msgid "Compare Directories" msgstr "Comparar pastas" #: tfrmmain.actcomparedirectories.hint msgctxt "TFRMMAIN.ACTCOMPAREDIRECTORIES.HINT" msgid "Compare Directories" msgstr "Comparar pastas" #: tfrmmain.actconfigdirhotlist.caption msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Mostrar menu contextual" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Copiar" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "Copiar nomes de ficheiros com caminho com&pleto" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "Copiar nomes de &ficheiros para a área de transferência" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Copiar ficheiros sem pedir confirmação" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Copiar para o mesmo painel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Copiar" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Mostrar espaço oc&upado" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Cor&tar" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption msgctxt "TFRMMAIN.ACTDELETE.CAPTION" msgid "Delete" msgstr "Apagar" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Histórico da pasta" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "&Lista da pasta" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Editar" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Editar c&omentário" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Editar novo ficheiro" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Editar campo de caminho acima da lista de ficheiros" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Trocar &painéis" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Extrair ficheiros..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "&Associações de ficheiros..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "Com&binar ficheiros..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "Mostrar propriedades de &ficheiro" #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "D&ividir ficheiro" #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Foco na linha de comandos" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Colocar cursor no primeiro ficheiro da lista" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Colocar cursor no último ficheiro da lista" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Criar li&gação física" #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Conteúdo" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Modo Painéis &horizontais" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Teclado" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Esquerdo &= Direito" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Abrir lista esquerda de unidades" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "Carregar seleção da área de transferência" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "Carregar se&leção de ficheiro" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Nova pasta" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Selecionar todos com a mesma e&xtensão" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverter seleção" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "&Selecionar tudo" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "Remover seleção de um grupo" #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "Selecionar um &grupo" #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "Rem&over todas as seleções" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimizar janela" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Ferramenta Multirenomear" #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Li&gar a rede" #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Desl&igar de rede" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Ligação &rápida a rede" #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Novo separador" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Mudar para o separador seguinte" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Tentar abrir arquivo" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Abrir ficheiro barra" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Abrir &pasta em novo separador" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Abrir lista do SVF" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Visualizador de operações" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Opções..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Comprimir ficheiros" #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Definir posição do divisor" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Co&lar" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Mudar para o se¶dor anterior" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Filtro rápido" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Procura rápida" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "Painel &Vista rápida" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Atualizar" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Mover" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Mover/Renomear ficheiros sem pedir confirmação" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Renomear" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Renomear separador" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "R&estaurar seleção" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "&Inverter ordem" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Direito &= Esquerdo" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Abrir lista direita de unidades" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Executar &terminal" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "Gra&var seleção" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Gravar s&eleção para ficheiro..." #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "&Localizar..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "Alterar &atributos" #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Bloqueado com pastas abertas em novos separadores" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "&Bloqueado" #: tfrmmain.actsettaboptionpathresets.caption msgctxt "TFRMMAIN.ACTSETTABOPTIONPATHRESETS.CAPTION" msgid "Locked with &Directory Changes Allowed" msgstr "Bloqueado com alterações de &pastas permitidas" #: tfrmmain.actshellexecute.caption msgctxt "TFRMMAIN.ACTSHELLEXECUTE.CAPTION" msgid "Open" msgstr "Abrir" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Abrir usando associações do sistema" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Mostrar menu de botões" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Mostrar histórico da linha de comandos" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Mostrar ficheiros &ocultos/de sistema" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Ordenar por &atributos" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Ordenar por &data" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Ordenar por &extensão" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Ordenar por &nome" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Ordenar por &tamanho" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Ativar/Desativar mostrar nomes de ficheiros na lista de ignorados" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Criar &ligação simbólica..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "" #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Destino &= Origem" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Arquivo(s) de &teste" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Vista Miniaturas" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Transferir a pasta sob o cursor para a janela esquerda" #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Transferir a pasta sob o cursor para a janela direita" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "Remover seleção de todos com a mesma extensão" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Ver" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Mostrar histórico de caminhos visitados na vista ativa" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Ir para a entrada seguinte no histórico" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Ir para a entrada anterior no histórico" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "&Visitar o website do Double Commander" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Limpar" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Sair" #: tfrmmain.btnf7.caption msgctxt "tfrmmain.btnf7.caption" msgid "Directory" msgstr "Pasta" #: tfrmmain.btnf8.caption msgctxt "TFRMMAIN.BTNF8.CAPTION" msgid "Delete" msgstr "Apagar" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Lista quente de pastas" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Mostrar a pasta atual do painel direito no painel esquerdo" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Ir para a pasta home" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Ir para a pasta raíz" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Ir para a pasta mãe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Lista de pastas" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Mostrar a pasta atual do painel esquerdo no painel direito" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "TFRMMAIN.CAPTION" msgid "Double Commander" msgstr "Double Commander" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Caminho" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "&20/80" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "&30/70" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "&40/60" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "&50/50" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "&60/40" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "&70/30" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "&80/20" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Copiar..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Criar ligação..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "TFRMMAIN.MILINE33.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline37.caption msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "tfrmmain.miline38.caption" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption msgctxt "tfrmmain.miline50.caption" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Limpar" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Ocultar" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Selecionar tudo" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Mover..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Criar ligação simbólica..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Opções do separador" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Restaurar" #: tfrmmain.mnualloperpause.caption msgctxt "TFRMMAIN.MNUALLOPERPAUSE.CAPTION" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "TFRMMAIN.MNUALLOPERSTART.CAPTION" msgid "Start" msgstr "Iniciar" #: tfrmmain.mnualloperstop.caption msgctxt "TFRMMAIN.MNUALLOPERSTOP.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Comandos" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "C&onfiguração" #: tfrmmain.mnucontextline1.caption msgctxt "tfrmmain.mnucontextline1.caption" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption msgctxt "tfrmmain.mnucontextline2.caption" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Ficheiros" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Marcar" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Rede" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "Mos&trar" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Opções" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "&Separadores" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Copiar" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Cortar" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Apagar" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "Editar" #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Colar" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&Aceitar" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Atalho" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definir..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Ou seleciona&r tipo de seleção predefinido" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Criar nova pasta" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "&Introduza o nome da nova pasta" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "TFRMMODVIEW.CAPTION" msgid "New Size" msgstr "Novo tamanho" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Altura:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "Qualidade de compressão jpg" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Largura:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Altura" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Largura" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Apagar" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "Ca&rregar" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "Ren&omear" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Re&por tudo" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Gravar" #: tfrmmultirename.caption msgctxt "TFRMMULTIRENAME.CAPTION" msgid "MultiRename" msgstr "Multirenomear" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "A&tivar" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "E&xpressões regulares" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "&Usar substituição" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] Extensão" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Contador" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Localizar && substituir" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Resultado do diário" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Máscara" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Predefinições" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "&Extensão" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "&Localizar" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "&Intervalo" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "&Nome de ficheiro" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Su&bstituir" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "&Número Inicial" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Largura" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] Contador" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dia" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dia (2 dígitos)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Dia da semana (curto, ex. \"seg\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Dia da semana (longo, ex. \"segunda\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Carácter na posição x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Caracteres desde a posição x até y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Hora" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Hora (2 dígitos)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minuto" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minuto (2 dígitos)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Mês" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Mês (2 dígitos)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Nome do mês (curto, ex. \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Nome do mês (longo, ex. \"janeiro\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Nome" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Carácter na posição x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Caracteres desde a posição x até y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Hora..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Extensão..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Nome..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Suplemento" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Segundo" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Segundo (2 dígitos)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] Ano (2 dígitos)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] Ano (4 dígitos)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[0].TITLE.CAPTION" msgid "Old File Name" msgstr "Nome de ficheiro antigo" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[1].TITLE.CAPTION" msgid "New File Name" msgstr "Novo nome de ficheiro" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "TFRMMULTIRENAME.STRINGGRID.COLUMNS[2].TITLE.CAPTION" msgid "File Path" msgstr "Caminho de ficheiro" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Escolha uma aplicação" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Comando personlizado" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Gravar associação" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Definir aplicação selecionada como ação predefinida" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Tipo de ficheiro a abrir: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Múltiplos nomes de ficheiro" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "%F" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Múltiplos URIs" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "%U" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Nome de ficheiro único" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "%f" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "URI único" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "%u" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Aplicar" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmoptions.caption msgctxt "TFRMOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Por favor selecione uma das subpáginas, esta página não contém definições." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "Autoconfigurar" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCADD.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCDELETE.CAPTION" msgid "D&elete" msgstr "Apa&gar" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNMULTIARCRENAME.CAPTION" msgid "&Rename" msgstr "&Renomear" #: tfrmoptionsarchivers.btnrelativearchiver.hint msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Modo Dep&uração" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "A&tivo" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Mostrar saída da co&nsola" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "TFRMOPTIONSARCHIVERS.GBARCHIVEROPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "A ad&icionar" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "E&xtensão:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Ex&trair:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "&Lista:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "&Final da lista (opcional):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "For&mato da lista:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Iní&cio da lista (opcional):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Ar&quivador:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "De&scrição:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERADDITIONAL.CAPTION" msgid "Additional" msgstr "Adicional" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "TFRMOPTIONSARCHIVERS.TBARCHIVERGENERAL.CAPTION" msgid "General" msgstr "Geral" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHATTRIBUTESCHANGE.CAPTION" msgid "When &size, date or attributes change" msgstr "Quando tamanho, data ou atributo&s mudem" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHEXCLUDEDIRS.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e suas sub&pastas:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "Quando &ficheiros sejam criados, apagados ou renomeados" #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHONLYFOREGROUND.CAPTION" msgid "When application is in the &background" msgstr "Quando a aplicação está em 2º &plano" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHDISABLE.CAPTION" msgid "Disable auto-refresh" msgstr "Desativar atualização automática" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "TFRMOPTIONSAUTOREFRESH.GBAUTOREFRESHENABLE.CAPTION" msgid "Refresh file list" msgstr "Atualizar lista de ficheiros" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "Mos&trar sempre ícone de tabuleiro" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "&Ocultar automaticamente dispositivos não montados" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBMINIMIZETOTRAY.CAPTION" msgid "Mo&ve icon to system tray when minimized" msgstr "Mo&ver ícone para o tabuleiro de sistema ao minimizar" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "Permitir só uma instância do DC de cada vez" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Aqui pode introduzir um ou mais dispositivos ou pontos de montagem, separados por \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Lista &negra de dispositivos" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "Cortar &texto pela largura da coluna" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "Linhas &horizontais" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "Linhas &verticais" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "Preencher automaticamente colunas" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Mostrar grelha" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Tamanho de coluna automático" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Tamanho de c&oluna automático:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGAPPLY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "TFRMOPTIONSCONFIGURATION.BTNCONFIGEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "Histórico da linha de co&mandos" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Histórico de &pastas" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Histórico de máscaras de &ficheiros" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Gra&var configuração" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Histórico de Locali&zar/Substituir" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Localização dos ficheiros de configuração" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Gravar ao sair" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Definir na linha de comandos" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "Pasta do p&rograma (versão portátil)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Pasta home do &utilizador" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Tudo" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Apagar" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Novo" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Gravar como" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "Gravar" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Geral" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "Fundo:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Fundo 2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Con&figurar colunas para o sistema de ficheiros:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "Cor do cursor:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Texto do cursor:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Letra:" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Tamanho:" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "Cor do texto:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "Cor de marca:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Adicionar coluna" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "" #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativepath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "tfrmoptionsdirectoryhotlist.btnrelativetarget.hint" msgid "Some functions to select appropriate target" msgstr "" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text" msgid "Name, a-z" msgstr "" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption" msgid "Name:" msgstr "Nome:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption" msgid "Path:" msgstr "Caminho:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption" msgid "Target:" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption" msgid "directory of the active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption" msgid "directories of the active && inactive frames" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand.caption" msgid "a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcommand2.caption" msgid "Add a command" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption" msgid "a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption" msgid "Add a copy of the selected entry" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddseparator2.caption" msgid "Add a separator" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption" msgid "directory I will browse to" msgstr "" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "tfrmoptionsdirectoryhotlist.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathexist.caption" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption" msgid "Go to configure TC related info" msgstr "" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "tfrmoptionsdirectoryhotlist.mipasteselection.caption" msgid "Paste" msgstr "Colar" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator5.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption msgctxt "tfrmoptionsdirectoryhotlist.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory.caption" msgid "directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption" msgid "Add directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Mo&strar diálogo de confirmação após largar" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Mostrar sistema de &ficheiros" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Mostrar &espaço livre" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption msgid "Show &label" msgstr "Mostrar rótu&lo" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Lista de unidades" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.BACKGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Bac&kground" msgstr "F&undo" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "tfrmoptionseditorcolors.btnsavemask.hint" msgid "Save" msgstr "Gravar" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Atributos de elemento" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "TFRMOPTIONSEDITORCOLORS.FOREGROUNDUSEDEFAULTCHECKBOX.CAPTION" msgid "Fo®round" msgstr "1º p&lano" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "Marca de &texto" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Usar (e editar) definições de esquema &globais" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Usar definições de esquema &locais" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgid "&Bold" msgstr "&Negrito" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTBOLDRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgid "&Italic" msgstr "&Itálico" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTITALICRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "&Rasurado" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOINVERT.CAPTION" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOOFF.CAPTION" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "TFRMOPTIONSEDITORCOLORS.TEXTSTRIKEOUTRADIOON.CAPTION" msgid "O&n" msgstr "Li&gar" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgid "&Underline" msgstr "&Sublinhado" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verter" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "Desl&igar" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "Li&gar" #: tfrmoptionsfavoritetabs.btnadd.caption msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "" #: tfrmoptionsfavoritetabs.btndelete.caption msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "" #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "" #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.btnsort.caption msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "" #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.micollapseall.caption msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Cortar" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Colar" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Renomear" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "tfrmoptionsfileassoc.btnaddact.caption" msgid "Add" msgstr "Adicionar" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "tfrmoptionsfileassoc.btnaddext.caption" msgid "&Add" msgstr "&Adicionar" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "tfrmoptionsfileassoc.btnaddnewtype.caption" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "tfrmoptionsfileassoc.btndownact.caption" msgid "&Down" msgstr "A&baixo" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "tfrmoptionsfileassoc.btnremoveact.caption" msgid "Remo&ve" msgstr "Remo&ver" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "tfrmoptionsfileassoc.btnremoveext.caption" msgid "Re&move" msgstr "Re&mover" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "tfrmoptionsfileassoc.btnremovetype.caption" msgid "&Remove" msgstr "&Remover" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "tfrmoptionsfileassoc.btnrenametype.caption" msgid "R&ename" msgstr "R&enomear" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "tfrmoptionsfileassoc.btnupact.caption" msgid "&Up" msgstr "A&cima" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "tfrmoptionsfileassoc.gbactions.caption" msgid "Actions" msgstr "Ações" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "tfrmoptionsfileassoc.gbexts.caption" msgid "Extensions" msgstr "Extensões" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "tfrmoptionsfileassoc.gbfiletypes.caption" msgid "File types" msgstr "Tipos de ficheiro" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "tfrmoptionsfileassoc.gbicon.caption" msgid "Icon" msgstr "Ícone" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "tfrmoptionsfileassoc.lblaction.caption" msgid "Action name:" msgstr "Ação:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "tfrmoptionsfileassoc.lblcommand.caption" msgid "&Command:" msgstr "&Comando" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "tfrmoptionsfileassoc.miedit.caption" msgid "Edit" msgstr "Editar" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "tfrmoptionsfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Abrir no editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "tfrmoptionsfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Obter saída do comando" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "tfrmoptionsfileassoc.miopen.caption" msgid "Open" msgstr "Abrir" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "tfrmoptionsfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Executar no terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "tfrmoptionsfileassoc.miview.caption" msgid "View" msgstr "Ver" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "tfrmoptionsfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Abrir no visualizador" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Mostrar diálogo de confirmação para:" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Operação Cop&iar" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Operação &Apagar" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "A&pagar para a reciclagem (a tecla Shift reverte esta definição)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Operação Apa&gar para o lixo" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Largar marca Só de leitura" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Operação &Mover" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "&Procurar parte do nome do ficheiro" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "&Comentários do processo com ficheiros/pastas" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Selecionar nome de &ficheiro sem extensão ao renomear" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Mos&trar painel de seleção de separador no diálogo Copiar/Mover" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Saltar erros de &operações de ficheiros e escrevê-los no diário" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "A executar as operações" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Localizar ficheiro" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Ambiente do utilizador" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "Tamanho do buffer para operações de ficheiros (em KB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Mostrar progresso da operação &inicialmente em" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "&Número de passagens de limpeza" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Usar mapa de memória para procura de te&xto em ficheiros" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "&Usar corrente para procurar texto em ficheiros" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNINDCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Permitir cor sobreposta" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Use &Frame Cursor" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Usar indicador &gradiente" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "U&sar seleção invertida" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Contorno do cursor" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Indicador de espaço livre na unidade" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "F&undo:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Fu&ndo 2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "Cor do c&ursor:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Te&xto do cursor:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Nível de &brilho do painel inativo" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Cor de fundo do in&dicador:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Cor de 1º plano do &indicador:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "Cor da &marca:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "Cor do t&exto" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "&Não carregar lista de ficheiros até um separador estar ativo" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Mostrar pastas entre parênteses retos" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Rea&lçar ficheiros novos e atualizados" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Carregar lista de &ficheiros em linha separada" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Carregar ícones depois da lis&ta de ficheiros" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Mostrar ficheiros ocultos e de s&istema" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Ao selecionar ficheiros com a <BARRA DE ESPAÇO>, mover para o próximo ficheiro (tal como com <INSERT>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formatação" #: tfrmoptionsfilesviews.gbsorting.caption msgid "Sorting" msgstr "Ordem" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "S&ensibilidade a maiúsculas:" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Formato incorrecto" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "Formato de &data e hora:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Formato do ta&manho de ficheiro:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Inserir novos ficheiros" #: tfrmoptionsfilesviews.lblsortfoldermode.caption msgid "So&rting directories:" msgstr "A o&rdenar pastas:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Método de &ordenação" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "&Mover ficheiros atualizados" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNADDCATEGORY.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNAPPLYCATEGORY.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNCATEGORYCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNDELETECATEGORY.CAPTION" msgid "D&elete" msgstr "&Apagar" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "TFRMOPTIONSFILETYPESCOLORS.BTNSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Cores de tipos de ficheiros (ordenar com arrastar && largar)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "A&tributos de categoria:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Cor de cate&goria" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara de categoria:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "TFRMOPTIONSFILETYPESCOLORS.LBLCATEGORYNAME.CAPTION" msgid "Category &name:" msgstr "&Nome de categoria:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELEDITFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELLOGFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELMAINFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWERBOOKFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "TFRMOPTIONSFONTS.BTNSELVIEWFNT.CAPTION" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Letra do &editor" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "Letra do &diário" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Letra do programa" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "Letra do vis&ualizador de livro" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Letra do visuali&zador" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Adicionar atal&ho" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "&Apagar atalho" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "&Editar atalho" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filtro" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "C&ategorias:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Co&mandos:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Ficheiro&s de atalho:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Commando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Atalhos" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Descrição" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[0].TITLE.CAPTION" msgid "Hotkey" msgstr "Atalho" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[1].TITLE.CAPTION" msgid "Parameters" msgstr "Parâmetros" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Controlos" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "TFRMOPTIONSICONS.CBICONSEXCLUDE.CAPTION" msgid "For the following &paths and their subdirectories:" msgstr "Para os seguintes caminhos e sub&pastas:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Mostrar ícones para ações nos &menus" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "TFRMOPTIONSICONS.CBICONSINMENUSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Mostrar ícones sobrepostos, i.e. para ligações" #: tfrmoptionsicons.cbiconssize.text msgctxt "TFRMOPTIONSICONS.CBICONSSIZE.TEXT" msgid "16x16" msgstr "16x16" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Desativar ícones especiais" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ícones nos menus" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Tamanho do ícone" #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "TFRMOPTIONSICONS.GBSHOWICONSMODE.CAPTION" msgid " Show icons to the left of the filename " msgstr "Mostrar ícones à esquerda do nome de ficheiro" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALL.CAPTION" msgid "A&ll" msgstr "T&udo" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWALLANDEXE.CAPTION" msgid "All associated + &EXE/LNK (slow)" msgstr "Todos os associados + &EXE/LNK (lento)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWNONE.CAPTION" msgid "&No icons" msgstr "Sem íco&nes" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "Só ícone&s padrão" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "A&dicionar nomes selecionados" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSELWITHPATH.CAPTION" msgid "Add selected names with &full path" msgstr "Adicionar nomes selecionados com caminho completo" #: tfrmoptionsignorelist.btnrelativesavein.hint msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "TFRMOPTIONSIGNORELIST.CHKIGNOREENABLE.CAPTION" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorar /não mostrar) os ficheiros e pastas seguintes:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "TFRMOPTIONSIGNORELIST.LBLSAVEIN.CAPTION" msgid "&Save in:" msgstr "&Gravar em:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Setas es&querda e direita mudam a pasta (movimento tipo Lynx)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Dactilografia" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+L&etras" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+Le&tras" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "&Letras" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATDISKPANEL.CAPTION" msgid "&Flat buttons" msgstr "Botões p&lanos" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Ambiente pla&no" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATTOOLBAR.CAPTION" msgid "Flat b&uttons" msgstr "B&otões planos" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Mostrar &espaço livre no rótulo da unidade" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Mostrar &janela de diário" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "TFRMOPTIONSLAYOUT.CBPANELOFOPERATIONS.CAPTION" msgid "Show panel of operation in background" msgstr "Mostrar painel de operações em 2º plano" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "TFRMOPTIONSLAYOUT.CBPROGINMENUBAR.CAPTION" msgid "Show common progress in menu bar" msgstr "Mostrar progresso comum na barra de menu" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Mostrar l&inha de comandos" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Mostrar pasta at&ual" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDISKPANEL.CAPTION" msgid "Show &drive buttons" msgstr "Mostrar botões de uni&dade" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Mostrar rótulo de es&paço livre" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Mostrar bo&tão da lista de unidades" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Mostrar botões de teclas de função" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Mostrar &menu principal" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINTOOLBAR.CAPTION" msgid "Show &button bar" msgstr "Mostrar barra de &botões" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Mostrar rótulo curto de espaço &livre" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWSTATUSBAR.CAPTION" msgid "Show &status bar" msgstr "Mostrar barra de e&stado" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Mostrar cabeçalho de tabulação" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABS.CAPTION" msgid "Sho&w folder tabs" msgstr "M&ostrar separadores de pasta" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Mostrar janela de te&rminal" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "Mostrar duas barras de botões de unidade (largura fi&xa, acima das janelas de ficheiros)" #: tfrmoptionslayout.gbscreenlayout.caption msgctxt "TFRMOPTIONSLAYOUT.GBSCREENLAYOUT.CAPTION" msgid " Screen layout " msgstr "Disposição do ecrã" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "tfrmoptionslog.btnrelativelogfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "Com&primir/Descomprimir" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "Cop&iar/Mover/Criar ligação/Ligação simbólica" #: tfrmoptionslog.cblogdelete.caption msgctxt "TFRMOPTIONSLOG.CBLOGDELETE.CAPTION" msgid "&Delete" msgstr "&Apagar" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Criar/Apagar pas&tas" #: tfrmoptionslog.cblogerrors.caption msgctxt "TFRMOPTIONSLOG.CBLOGERRORS.CAPTION" msgid "Log &errors" msgstr "Diário de &erros" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "C&riar um ficheiro de diário:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Diário de mensagens &informativas" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "" #: tfrmoptionslog.cblogsuccess.caption msgctxt "TFRMOPTIONSLOG.CBLOGSUCCESS.CAPTION" msgid "Log &successful operations" msgstr "Diário de operações com &sucesso" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Suplementos do sistema de &ficheiros" #: tfrmoptionslog.gblogfile.caption msgctxt "TFRMOPTIONSLOG.GBLOGFILE.CAPTION" msgid "File operation log file" msgstr "Ficheiro diário de operações de ficheiros" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Diário de operações" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Estado da operação" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption msgctxt "tfrmoptionsmisc.btnoutputpathfortoolbar.caption" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "tfrmoptionsmisc.btnrelativetcconfigfile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "tfrmoptionsmisc.btnrelativetcexecutablefile.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Remover miniaturas de ficheiros que já não existem" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "tfrmoptionsmisc.btnviewconfigfile.hint" msgid "View log file content" msgstr "" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Ir sempre para a raíz da unidade ao mudar de unidades" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "TFRMOPTIONSMISC.CHKSHOWWARNINGMESSAGES.CAPTION" msgid "Show &warning messages (\"OK\" button only)" msgstr "Mostrar mensagens de a&viso (Só botão \"Aceitar\")" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "TFRMOPTIONSMISC.CHKTHUMBSAVE.CAPTION" msgid "&Save thumbnails in cache" msgstr "&Gravar miniaturas em memória" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "TFRMOPTIONSMISC.DBLTHUMBNAILS.CAPTION" msgid "Thumbnails" msgstr "Miniaturas" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixels" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "TFRMOPTIONSMISC.LBLTHUMBSEPARATOR.CAPTION" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Tamanho da miniatura:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "&Seleção com o rato" #: tfrmoptionsmouse.gbscrolling.caption msgid "Scrolling" msgstr "Deslocar" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Seleção" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "&Modo:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "&Linha a linha" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Linha a linha com movimento do cursor" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "&Página a página" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "A&tivar" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "A&finar" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Suplementos de procura permitem usar algoritmos alternativos ou ferramentas externas (Como \"locate\", etc.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Supl&ementos de compressão são usados para trabalhar com arquivos" #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Suplementos de conteúdo permitem mostrar detalhes do ficheiro, como etiquetas mp3 ou atributos de imagens na lista de ficheiros ou usá-los nas ferramentas Procura e Multirenomear" #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Suplementos do sistema de ficheiros permitem o acesso a unidades inacessíveis pelo sistema operativo ou a dispositivos externos como o Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Suplementos de &visualização permitem mostrar formatos de ficheiros como imagens, folhas de cálculo, bases de dados, etc. no visualizador (F3, Ctrl+Q)" #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[0].TITLE.CAPTION" msgid "Active" msgstr "Ativo" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[1].TITLE.CAPTION" msgid "Plugin" msgstr "Suplemento" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[2].TITLE.CAPTION" msgid "Registered for" msgstr "Registado para" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "TFRMOPTIONSPLUGINS.STGPLUGINS.COLUMNS[3].TITLE.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Suplementos de procura (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Suplementos de compressão (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Suplementos de conteúdo (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Suplementos do sistema de ficheiros (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Suplementos de visualização (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTBEGINNING.CAPTION" msgid "&Beginning (name must start with first typed character)" msgstr "&Iniciar (o nome tem de começar com o primeiro carácter digitado)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CBEXACTENDING.CAPTION" msgid "En&ding (last character before a typed dot . must match)" msgstr "Final (o último carácter antes do ponto tem de coinci&dir)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "TFRMOPTIONSQUICKSEARCHFILTER.CGPOPTIONS.CAPTION" msgid "Options" msgstr "Opções" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Correspondência exata do nome" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "Sensibilidade a maiúsculas" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Procurar por estes itens" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "TFRMOPTIONSTABS.CBTABSACTIVATEONCLICK.CAPTION" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Ativar &painel destino ao clicar num dos seus separadores" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "TFRMOPTIONSTABS.CBTABSALWAYSVISIBLE.CAPTION" msgid "&Show tab header also when there is only one tab" msgstr "Mo&strar cabeçalho do separador mesmo que só haja um" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Con&firmar fecho de todos os separadores" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Limitar comprimento do título do separador a " #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "TFRMOPTIONSTABS.CBTABSLOCKEDASTERISK.CAPTION" msgid "Show locked tabs &with an asterisk *" msgstr "Mostrar separadores blo&queados com um asterisco *" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "TFRMOPTIONSTABS.CBTABSMULTILINES.CAPTION" msgid "&Tabs on multiple lines" msgstr "Separadores em múl&tiplas linhas" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENFOREGROUND.CAPTION" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+&Up abre o novo separador em 1º plano" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "TFRMOPTIONSTABS.CBTABSOPENNEARCURRENT.CAPTION" msgid "Open &new tabs near current tab" msgstr "Abrir &novos separadores ao lado do separador atual" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Mostrar &botão para fechar o separador" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "TFRMOPTIONSTABS.GBTABS.CAPTION" msgid "Folder tabs headers" msgstr "Cabeçalhos dos separadores de pastas" #: tfrmoptionstabs.lblchar.caption msgctxt "TFRMOPTIONSTABS.LBLCHAR.CAPTION" msgid "characters" msgstr "caracteres" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Posição dos s&eparadores" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Não" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "C&lonar botão" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNDELETEBUTTON.CAPTION" msgid "&Delete" msgstr "&Apagar" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Editar atal&ho" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNINSERTBUTTON.CAPTION" msgid "&Insert new button" msgstr "&Inserir novo botão" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENFILE.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNOPENICON.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Outro..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Remo&ver atalho" #: tfrmoptionstoolbar.btnstartpath.caption msgctxt "tfrmoptionstoolbar.btnstartpath.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Botões p&lanos" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Introduzir parâmetros de comandos, cada um em sua linha. Prima F1 para ajuda dos parâmetros" #: tfrmoptionstoolbar.gbgroupbox.caption msgid "Appearance" msgstr "Aparência" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "Tamanho da &barra:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Coman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parâmetro&s:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Atalho:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Íco&ne" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Tamanho do í&cone:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Co&mando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parâmetros:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "Camin&ho inicial:" #: tfrmoptionstoolbar.lbltooltip.caption msgid "&Tooltip:" msgstr "Su&gestão:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "" #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexportseparator1.caption msgctxt "tfrmoptionstoolbar.miexportseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption msgctxt "tfrmoptionstoolbar.miexportseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption msgctxt "tfrmoptionstoolbar.miexportseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption msgctxt "tfrmoptionstoolbar.miexportseparator4.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "" #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcinikeep.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcininokeep.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miexternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.miimport.caption msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "" #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "tfrmoptionstoolbar.miimportbackupaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportbackupreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimportseparator.caption msgctxt "tfrmoptionstoolbar.miimportseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimporttcbaraddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "" #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddcurrent.caption" msgid "to add to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "tfrmoptionstoolbar.miimporttciniaddtop.caption" msgid "to add to top toolbar" msgstr "" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "tfrmoptionstoolbar.miimporttcinireplacetop.caption" msgid "to replace top toolbar" msgstr "" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandaftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "tfrmoptionstoolbar.miinternalcommandlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption msgctxt "tfrmoptionstoolbar.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption msgctxt "tfrmoptionstoolbar.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption msgctxt "tfrmoptionstoolbar.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption msgctxt "tfrmoptionstoolbar.miseparator14.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption msgctxt "tfrmoptionstoolbar.miseparator6.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption msgctxt "tfrmoptionstoolbar.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption msgctxt "tfrmoptionstoolbar.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption msgctxt "tfrmoptionstoolbar.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbaraftercurrent.caption" msgid "just after current selection" msgstr "" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarfirstelement.caption" msgid "as first element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "tfrmoptionstoolbar.misubtoolbarlastelement.caption" msgid "as last element" msgstr "" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption" msgid "just prior current selection" msgstr "" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Tipo de botão" #: tfrmoptionstoolbase.btnrelativetoolpath.hint msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Manter a janela do terminal aberta após executar um programa" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "&Executar no terminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "&Usar programa externo" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Parâmetros a&dicionais" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Caminho do &programa a executar" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "A&dicionar" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "A&plicar" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "&Apagar" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Modelo..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Mostrar sugestão" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Campos personalizados por tipo de ficheiro" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Palpite da cate&goria:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "&Máscara da categoria:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "&Nome da categoria:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNBACKVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "TFRMOPTIONSVIEWER.BTNFONTVIEWERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgid "Viewer Book Mode" msgstr "Modo Livro de visualização" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "TFRMOPTIONSVIEWER.GBVIEWEREXAMPLE.CAPTION" msgid "Example" msgstr "Exemplo" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "Cor de &fundo do livro" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Cor de te&xto do livro" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "&Número de colunas do livro" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "Con&figurar" #: tfrmpackdlg.caption msgctxt "TFRMPACKDLG.CAPTION" msgid "Pack files" msgstr "Comprimir ficheiros" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Criar arquivos separados, um por cada ficheiro/pasta selecionado" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "Criar arquivo de extração automática" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "Encr&iptar" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Mo&ver para arquivo" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "Arquivo de discos &múltiplos" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "=>" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Pôr no arq&uivo TAR primeiro" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Com&primir também nomes de caminhos (só recursivo)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Comprimir ficheiro(s) para o ficheiro:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Compressor" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Descomprimir todos e execut&ar" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "Descomprimir e exec&utar" #: tfrmpackinfodlg.caption msgctxt "TFRMPACKINFODLG.CAPTION" msgid "Properties of packed file" msgstr "Propriedades do ficheiro comprimido" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Atributos:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Taxa de compressão:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Data:" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Método:" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Tamanho original:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Ficheiro:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Tamanho comprimido:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Compressor:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Hora:" #: tfrmquicksearch.btncancel.caption msgctxt "TFRMQUICKSEARCH.BTNCANCEL.CAPTION" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Fechar painel de filtragem" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Introduza o texto de filtragem ou filtre por" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "Aa" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Sensível a maiúsculas" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "P" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Pastas" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "F" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Ficheiros" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "{" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Comparar início" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "}" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Comparar final" #: tfrmquicksearch.tglfilter.caption msgctxt "TFRMQUICKSEARCH.TGLFILTER.CAPTION" msgid "Filter" msgstr "Filtro" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Alternar entre localizar e procurar" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "" #: tfrmsearchplugin.headercontrol.sections[0].text msgctxt "tfrmsearchplugin.headercontrol.sections[0].text" msgid "Plugin" msgstr "Suplemento" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "tfrmsearchplugin.headercontrol.sections[3].text" msgid "Value" msgstr "Valor" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CANCELBUTTON.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.CLOSEBUTTON.CAPTION" msgid "&Close" msgstr "&Fechar" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.HELPBUTTON.CAPTION" msgid "&Help" msgstr "A&juda" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "TFRMSELECTTEXTRANGE.BTPPANEL.OKBUTTON.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "&Selecionar os caracteres a inserir:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmsetfileproperties.caption msgctxt "TFRMSETFILEPROPERTIES.CAPTION" msgid "Change attributes" msgstr "Alterar atributos" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Pegajoso" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "Arquivo" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Criado:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "Oculto" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Acedido:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Modificado:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "Só de leitura" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Incluindo subpastas" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "Sistema" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Propriedades de selo temporal" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Atributos" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bits:" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Grupo" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Outro" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Proprietário" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "-----------" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Texto:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Executar" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(campo cinzento significa valor inalterado)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Octal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Ler" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Escrever" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "tfrmsplitter.btnrelativeftchoice.hint" msgid "Some functions to select appropriate path" msgstr "" #: tfrmsplitter.caption msgctxt "TFRMSPLITTER.CAPTION" msgid "Splitter" msgstr "Divisor" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1457664B - 3.5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Nome de ficheiro" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Tamanho e nº. de partes" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Pas&ta destino" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Ficheiro &origem" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "&Número de partes" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "&Gigabytes" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "&Kilobytes" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "&Megabytes" #: tfrmstartingsplash.caption msgctxt "tfrmstartingsplash.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblbuild.caption msgctxt "tfrmstartingsplash.lblbuild.caption" msgid "Build" msgstr "Construção" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "tfrmstartingsplash.lblfreepascalver.caption" msgid "Free Pascal" msgstr "Free Pascal" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "tfrmstartingsplash.lbllazarusver.caption" msgid "Lazarus" msgstr "Lazarus" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "tfrmstartingsplash.lblrevision.caption" msgid "Revision" msgstr "Revisão" #: tfrmstartingsplash.lbltitle.caption msgctxt "tfrmstartingsplash.lbltitle.caption" msgid "Double Commander" msgstr "Double Commander" #: tfrmstartingsplash.lblversion.caption msgctxt "tfrmstartingsplash.lblversion.caption" msgid "Version" msgstr "Versão" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Criar ligação simbólica" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destino para o qual a ligação aponta" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Nome da &ligação" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "tfrmsyncdirsdlg.btnclose.caption" msgid "Close" msgstr "Fechar" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "tfrmsyncdirsdlg.btncompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.btnseldir1.caption msgctxt "tfrmsyncdirsdlg.btnseldir1.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption msgctxt "tfrmsyncdirsdlg.btnseldir2.caption" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "" #: tfrmsyncdirsdlg.cbextfilter.text msgctxt "tfrmsyncdirsdlg.cbextfilter.text" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[0].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[1].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[2].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[4].title.caption" msgid "Date" msgstr "Data" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[5].title.caption" msgid "Size" msgstr "Tamanho" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "tfrmsyncdirsdlg.headerdg.columns[6].title.caption" msgid "Name" msgstr "Nome" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "tfrmsyncdirsdlg.menuitemcompare.caption" msgid "Compare" msgstr "Comparar" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "" #: tfrmsyncdirsdlg.sbcopyleft.caption msgctxt "tfrmsyncdirsdlg.sbcopyleft.caption" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption msgctxt "tfrmsyncdirsdlg.sbcopyright.caption" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "" #: tfrmsyncdirsperformdlg.caption msgctxt "tfrmsyncdirsperformdlg.caption" msgid "Synchronize" msgstr "" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "A&dicionar novo" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Cancelar" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Al&terar" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Prede&finição" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&Aceitar" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "&Remover" #: tfrmtweakplugin.caption msgctxt "TFRMTWEAKPLUGIN.CAPTION" msgid "Tweak plugin" msgstr "Suplemento de afinação" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "De&tetar tipo de arquivo por conteúdo" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Pode apagar fi&cheiros" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Suporta e&ncriptação" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Mo&strar como ficheiros normais (ocultar ícone do compressor)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Suporta co&mpressão em memória" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Pode modificar arquivos existentes" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "O &arquivo pode conter múltiplos ficheiros" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Pode criar novos arqui&vos" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "S&uporta diálogo de opções" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Permitir procurar texto nos ar&quivos" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "&Descrição:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "D&etetar cadeia:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "&Extensão:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Bandeiras:" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "&Nome:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "Su&plemento:" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "Su&plemento:" #: tfrmviewer.actabout.caption msgctxt "TFRMVIEWER.ACTABOUT.CAPTION" msgid "About Viewer..." msgstr "Acerca do visualizador..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Mostra a mensagem Acerca de" #: tfrmviewer.actcopyfile.caption msgctxt "TFRMVIEWER.ACTCOPYFILE.CAPTION" msgid "Copy File" msgstr "Copiar ficheiro" #: tfrmviewer.actcopyfile.hint msgctxt "TFRMVIEWER.ACTCOPYFILE.HINT" msgid "Copy File" msgstr "Copiar ficheiro" #: tfrmviewer.actdeletefile.caption msgctxt "TFRMVIEWER.ACTDELETEFILE.CAPTION" msgid "Delete File" msgstr "Apagar ficheiro" #: tfrmviewer.actdeletefile.hint msgctxt "TFRMVIEWER.ACTDELETEFILE.HINT" msgid "Delete File" msgstr "Apagar ficheiro" #: tfrmviewer.actloadnextfile.caption msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.CAPTION" msgid "&Next" msgstr "Se&guinte" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Carregar o ficheiro seguinte" #: tfrmviewer.actloadprevfile.caption msgctxt "TFRMVIEWER.ACTLOADPREVFILE.CAPTION" msgid "&Previous" msgstr "A&nterior" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Carregar o ficheiro anterior" #: tfrmviewer.actmirror.caption msgctxt "TFRMVIEWER.ACTMIRROR.CAPTION" msgid "Mirror" msgstr "Espelho" #: tfrmviewer.actmirror.hint msgctxt "TFRMVIEWER.ACTMIRROR.HINT" msgid "Mirror" msgstr "Espelho" #: tfrmviewer.actmovefile.caption msgctxt "TFRMVIEWER.ACTMOVEFILE.CAPTION" msgid "Move File" msgstr "Mover ficheiro" #: tfrmviewer.actmovefile.hint msgctxt "TFRMVIEWER.ACTMOVEFILE.HINT" msgid "Move File" msgstr "Mover ficheiro" #: tfrmviewer.actreload.caption msgctxt "TFRMVIEWER.ACTRELOAD.CAPTION" msgid "Reload" msgstr "Recarregar" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Recarregar o ficheiro atual" #: tfrmviewer.actrotate180.caption msgctxt "TFRMVIEWER.ACTROTATE180.CAPTION" msgid "Rotate 180" msgstr "Rodar 180º" #: tfrmviewer.actrotate180.hint msgctxt "TFRMVIEWER.ACTROTATE180.HINT" msgid "Rotate 180" msgstr "Rodar 180º" #: tfrmviewer.actrotate270.caption msgctxt "TFRMVIEWER.ACTROTATE270.CAPTION" msgid "Rotate 270" msgstr "Rodar 270º" #: tfrmviewer.actrotate270.hint msgctxt "TFRMVIEWER.ACTROTATE270.HINT" msgid "Rotate 270" msgstr "Rodar 270º" #: tfrmviewer.actrotate90.caption msgctxt "TFRMVIEWER.ACTROTATE90.CAPTION" msgid "Rotate 90" msgstr "Rodar 90º" #: tfrmviewer.actrotate90.hint msgctxt "TFRMVIEWER.ACTROTATE90.HINT" msgid "Rotate 90" msgstr "Rodar 90º" #: tfrmviewer.actsaveas.caption msgctxt "TFRMVIEWER.ACTSAVEAS.CAPTION" msgid "Save As..." msgstr "Gravar como..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Gravar ficheiro como..." #: tfrmviewer.actstretchimage.caption msgctxt "TFRMVIEWER.ACTSTRETCHIMAGE.CAPTION" msgid "Stretch" msgstr "Esticar" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Esticar a imagem" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "- 90" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Copiar" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Copiar" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Cortar" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Apagar" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Apagar" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Ecrã completo" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "S" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Espelho" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Mover" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Mover" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "||>" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Pintar" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "<||" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Olhos vermelhos" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Redimensionar" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Desfazer" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Reduzir" #: tfrmviewer.caption msgctxt "TFRMVIEWER.CAPTION" msgid "Viewer" msgstr "Visualizador" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Caneta" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Realçar" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Pintar" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Diaporama" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Ver" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "0x0" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "+ 180" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "- 90" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "+ 90" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "Acerca de" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Mostrar com &binário" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "Copiar para a área de tranferência" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Editar" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Codificar" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Sair" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Ficheiro" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Ecrã completo" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Gráficos" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Mostrar com &hexadecimal" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "&Imagem" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "Mostrar como &livro" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Espelho" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Suplementos" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Pré-visualizar" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "Imprimir..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rodar" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "Gravar" #: tfrmviewer.misaveas.caption msgctxt "TFRMVIEWER.MISAVEAS.CAPTION" msgid "Save As..." msgstr "Gravar como..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Captura de ecrã" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "Localizar" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Localizar seguinte" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Localizar anterior" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Selecionar tudo" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "TFRMVIEWER.MISTRETCH.CAPTION" msgid "Stretch" msgstr "Esticar" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Mostrar como &texto" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Ver" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Mostrar como texto aj&ustado" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Ampliar" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Reduzir" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Copiar para a área de transferência" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Selecionar tudo" #: tfrmviewoperations.btnstartpause.caption msgctxt "TFRMVIEWOPERATIONS.BTNSTARTPAUSE.CAPTION" msgid "&Start" msgstr "&Iniciar" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "&Parar" #: tfrmviewoperations.caption msgctxt "TFRMVIEWOPERATIONS.CAPTION" msgid "File operations" msgstr "Operações de ficheiros" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "Sempre ao cimo" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Usar \"Arrastar && Largar\" para mover operações entre filas" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELOPERATION.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUCANCELQUEUE.CAPTION" msgid "Cancel" msgstr "Cancelar" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Nova fila" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUOPERATIONSHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Mostrar em janela livre" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Pôr o primeiro na fila" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Pôr o último na fila" #: tfrmviewoperations.mnuqueue.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUE.CAPTION" msgid "Queue" msgstr "Fila" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fora da fila" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Fila 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Fila 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Fila 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Fila 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Fila 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "TFRMVIEWOPERATIONS.MNUQUEUESHOWDETACHED.CAPTION" msgid "Show in detached window" msgstr "Mostrar em janela livre" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Pa&usar tudo" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TMULTIARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "TWCXARCHIVECOPYOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Trabalhar em 2º plano (ligação separada)" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Quando o ficheiro existir" #: ulng.msgtrytolocatecrcfile msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Cancelar filtro rápido" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Cancelar operação atual" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "A área de transferência não contém dados de barra de ferrramentas válidos" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Atr" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Data" #: ulng.rscolext msgid "Ext" msgstr "Ext" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Nome" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Tamanho" #: ulng.rsconfcolalign msgid "Align" msgstr "Alinhar" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Legenda" #: ulng.rsconfcolconfig msgid "Config" msgstr "Configurar" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Apagar" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Conteúdo do campo" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Mover" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Largura" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Personalizar coluna" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Copiar (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "" #: ulng.rsdiffadds msgid " Adds: " msgstr "" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Todas as operações completadas" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Progresso de todas as operações %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Ab&ortar" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "T&udo" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "Jun&tar" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "&Cancelar" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "&Continuar" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Cop&iar para" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Copi&ar todos para" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "&Sair do programa" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorar todos" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Não" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "N&enhum" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&Aceitar" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "S&ubstituir" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Su&bstituir todos" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Subs&tituir mais antigos" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "R&enomear" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Recomeçar" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Repe&tir" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Saltar" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "Sa<ar todos" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "S&im" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Calcular ficheiros e pastas" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Calcular checksum..." #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Verificar checksum..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Copiar ficheiro(s)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Apagar ficheiro(s)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Mover ficheiro(s)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&sa" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&Iniciar" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Fila" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Velocidade %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Velocidade %s/s, falta %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Dividir" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Limpar ficheiro(s)" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<sem rótulo>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<sem suporte>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Editor interno do Double Commander." #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "" #: ulng.rseditgotolinetitle msgid "Goto Line" msgstr "" #: ulng.rseditnewfile msgid "new.txt" msgstr "novo.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Nome de ficheiro:" #: ulng.rseditnewopen msgid "Open file" msgstr "Abrir ficheiro" #: ulng.rseditsearchback msgid "&Backward" msgstr "&Recuar" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Localizar" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Avançar" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Substituir" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Perguntar;Substituir;Copiar para;Saltar" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Perguntar;Substituir;Substituir mais antigos;Saltar" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Perguntar;Não definir mais;Ignorar erros" #: ulng.rsfilterstatus msgid "FILTER" msgstr "FILTRO" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definir modelo" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s níveis" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "todos (profundidade ilimitada)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "só pasta atual" #: ulng.rsfinddirnoex msgid "Directory %s does not exist!" msgstr "A pasta %s não existe!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Encontrados: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Gravar modelo de procura" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Nome do modelo:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Pesquisado: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "A pesquisar" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Localizar ficheiros" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Iniciar em" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Livres %s de %s bytes" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%s bytes livres" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Aceder a data/hora" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Atributos" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Comentário" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Tamanho comprimido" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Data/hora de criação" #: ulng.rsfuncext msgid "Extension" msgstr "Extensão" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Grupo" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Ligar a" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Data/hora de modificação" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Nome" #: ulng.rsfuncnamenoext msgid "Name without extension" msgstr "Nome sem extensão" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Proprietário" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Caminho" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Tamanho" #: ulng.rsfunctype msgid "Type" msgstr "Tipo" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Erro ao criar ligação física" #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Copiar/Mover diálogo" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Localizar ficheiros" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Principal" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Ligador completo" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Remover seleção da máscara" #: ulng.rsmarkplus msgid "Select mask" msgstr "Selecionar máscara" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Máscara de entrada:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Configurar colunas personalizadas" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Configurar esta vista de colunas personalizadas" #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Ações" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Editar" #: ulng.rsmnueject msgid "Eject" msgstr "Ejetar" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Montar" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Novo" #: ulng.rsmnunomedia msgid "No media available" msgstr "Sem suporte disponível" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Abrir" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Abrir com" #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Outro..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Ordenar por" #: ulng.rsmnuumount msgid "Unmount" msgstr "Desmontar" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Ver" #: ulng.rsmsgaccount msgid "Account:" msgstr "Conta:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Parâmetros adicionais da linha de comandos do arquivador:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Não pode copiar/mover um ficheiro \"%s\" para si próprio!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Impossível apagar a pasta %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "ChDir para [%s] falhou!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Remover os separadores inativos?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Este separador (%s) está bloqueado! Fechar mesmo assim?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Tem a certeza que quer desistir?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Copiar %d ficheiros/pastas selecionados?" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Copiar \"%s\" selecionados?" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Apagar o ficheiro parcialmente copiado?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Apagar %d ficheiros/pastas selecionados?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Apagar %d ficheiros/pastas selecionados para a lata de lixo?" #: ulng.rsmsgdelsel #, fuzzy,badformat msgid "Delete selected \"%s\"?" msgstr "Apagar %d ficheiros/pastas selecionados?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Apagar \"%s\" selecionados para a lata de lixo?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Impossível apagar \"%s\" para o lixo! Apagar diretamente?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "O disco não está disponível" #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Introduza a extensão do ficheiro:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Introduza o nome" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "Erro CRC nos dados arquivados" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Os dados estão mal" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Impossível ligar ao servidor: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Impossível copiar o ficheiro %s para %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Já existe uma pasta chamada \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Data %s não é suportada" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "A pasta %s já existe!" #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Funçção abortada pelo utilizador" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Erro ao fechar o ficheiro" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Impossível criar o ficheiro" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Não há mais ficheiros no arquivo" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Impossível abrir ficheiro existente" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Erro ao ler o ficheiro" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Erro ao escrever o ficheiro" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Impossível criar a pasta %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ligação inválida" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ficheiros não encontrados" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Memória insuficiente" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Função não suportada!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Erro no comando do menu contextual" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Erro ao carregar a configuração" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Erro de sintaxe na expressão regular!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Impossível renomear o ficheiro %s para %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Impossível gravar associação!" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Impossível gravar o ficheiro" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Impossível definir atributos para \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Impossível definir data/hora para \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Impossível definir proprietário/grupo para \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Buffer demasiado pequeno" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "Demasiados ficheiros para empacotar" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Formato de arquivo desconhecido" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Nome" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsgfavoritetabssubmenuname msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "O ficheiro %s foi alterado! Gravar?" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "O ficheiro %s já existe! Substituir?" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Ficheiro \"%s\" não encontrado" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Operações de ficheiro ativas" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Algumas operações de ficheiro por terminar. Fechar o Double Commander pode resultar em perda de dados." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "O ficheiro %s é só de leitura. Quer apagá-lo?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "O tamanho de \"%s\" é demasiado grande para o sistema de ficheiros destino!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "A pasta %s já existe! Substituir?" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Seguir ligação simbólica \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "" #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "" #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "" #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "" #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "" #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Caminho" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "" #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "" #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Nome:" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "" #: ulng.rsmsghotdirtotalbackuped msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "" #: ulng.rsmsghotdirwhattodelete msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "" #: ulng.rsmsginsertnextdisk msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Erro na linha de comandos" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Nome de ficheiro inválido" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Formato do ficheiro de configuração inválido" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Caminho inválido" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "O caminho %s contém caracteres proibidos." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Este não é um suplemento válido!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Este suplemento é feito para o Double Commander para %s. %s não pode trabalhar com o Double Commander para %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Aspas inválidas" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Seleção inválida." #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "A carregar a lista de ficheiros..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "" #: ulng.rsmsglogcopy msgid "Copy file %s" msgstr "Copiar ficheiro %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Apagar ficheiro %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Erro:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Extrair ficheiro %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Informação:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Criar ligação %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Criar pasta %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Mover ficheiro %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Comprimir para ficheiro %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Remover pasta %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Feito:" #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Criar ligação simbólica %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Testar integridade do ficheiro %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Palavra passe mestra" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Por favor introduza a palavra passe mestra:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgnewfile msgid "New file" msgstr "Novo ficheiro" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "O próximo volume será descomprimido" #: ulng.rsmsgnofiles msgid "No files" msgstr "Sem ficheiros" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Sem ficheiros selecionados" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "Não há espaço suficiente no destino! Continuar?" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "Não há espaço suficiente no destino! Tentar novamente?" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Impossível apagar o ficheiro %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Não implementado." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Palavra passe:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "As palavras passe são diferentes!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Por favor introduza a palavra passe:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Palavra passe (Firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "Por favor reintroduza a palavra passe para verificação:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Adicionar %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Configurar" #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Apagar %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "Predefinição \"%s\" já existe! Substituir?" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Renomear/Mover %d ficheiros/pastas selecionados?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Renomear/Mover \"%s\" selecionados?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Por favor reinicie o Double Commander para aplicar as alterações" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Selecionados: %s de %s, ficheiros: %d de %d, pastas: %d de %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Por favor, selecione só ficheiros checksum" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Por favor, selecione a localização do próximo volume" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Definir rótulo do volume" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "" #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "" #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "" #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "" #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "" #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "" #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Renomear separador" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Novo nome do separador:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Caminho destino:" #: ulng.rsmsgtcconfignotfound msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" #: ulng.rsmsgtcexecutablenotfound msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" #: ulng.rsmsgtcisrunning msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" #: ulng.rsmsgtctoolbarnotfound msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "" #: ulng.rsmsgtoolbarsaved msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Demasiados ficheiros selecionados." #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "" #: ulng.rsmsgurl msgid "URL:" msgstr "URL:" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Nome de utilizador" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Nome de utilizador (Firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Rótulo do volume:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Por favor, introduza o tamanho do volume:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Limpar %d ficheiros/pastas selecionados?" #: ulng.rsmsgwipesel #, fuzzy,badformat msgid "Wipe selected \"%s\"?" msgstr "Limpar \"s\" selecionados?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Sem alteração;MAIÚSCULAS;minúsculas;Primeira maiúscula;Primeira De Todas As Palavras Maiúscula;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Abortado" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "A calcular a checksum" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "A calcular a checksum em \"%s\"" #: ulng.rsopercalculatingchecksumof #, fuzzy #| msgid "Calculating check sum of \"%s\"" msgid "Calculating checksum of \"%s\"" msgstr "A calcular a checksum de \"%s\"" #: ulng.rsopercalculatingstatictics msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "A calcular" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "A calcular \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "A juntar" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "A juntar ficheiros em \"%s\" para \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "A copiar" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "A copiar de \"%s\" para \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "copiar \"%s\" para \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "A criar pasta" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "A criar pasta \"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "A apagar" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "A apagar em \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Apagar \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "A executar" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "A executar \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "A extrair" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "A extrair de \"%s\" para \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Terminado" #: ulng.rsoperlisting msgid "Listing" msgstr "A listar" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "A listar \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "A mover" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "A mover de \"%s\" para \"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "A mover \"%s\" para \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Não iniciado" #: ulng.rsoperpacking msgid "Packing" msgstr "A comprimir" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "A comprimir de \"%s\" para \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "A comprimir \"%s\" para \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Pausado" #: ulng.rsoperpausing msgid "Pausing" msgstr "A pausar" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Em fila" #: ulng.rsoperrunning msgid "Running" msgstr "A executar" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Definir propriedade" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Definir propriedade em \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Definir propriedade de \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "A dividir" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "A dividir \"%s\" para \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "A iniciar" #: ulng.rsoperstopped msgid "Stopped" msgstr "Parado" #: ulng.rsoperstopping msgid "Stopping" msgstr "A parar" #: ulng.rsopertesting msgid "Testing" msgstr "A testar" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "A testar em \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "A testar \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "A verificar a checksum" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "A verificar a checksum em \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "A verificar a checksum de \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "A aguardar acesso à origem do ficheiro" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "A aguardar resposta do utilizador" #: ulng.rsoperwiping msgid "Wiping" msgstr "A limpar" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "A limpar em \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "A limpar \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "A trabalhar" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Apagar:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Extrair sem caminho:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Formatar modo de análise:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "ID:" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "Posição da ID:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "Intervalo de procura de ID:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "Parâmetro" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Cadeia de consulta da palavra passe:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Criar arquivo de extração automática:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "Teste:" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Nome do tipo de arquivo:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Valor" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associar suplemento \"%s\" com:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Primeiro;Último;" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "" #: ulng.rsoptdisable msgid "Disable" msgstr "Desativar" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Ativar" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Introduza extensão" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Cursor" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Marca" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Marca + Cursor" #: ulng.rsoptexampletext msgid "Text" msgstr "Texto" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "janela separada;janela separada minimizada;painel de operações" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "flutuante;B;K;M;G" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Atalho %s para cm_Delete será registado, pelo que poderá ser usado para reverter esta definição." #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Adicionar atalho para %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Adicionar atalho" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Impossível definir atalho" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Alterar atalho" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Commando" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Atalho %s para cm_Delete tem um parâmetro que se sobrepõe a esta definição. Quer alterar o parâmetro para usar a definição global?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Atalho %s para cm_Delete tem de ter um parâmetro alterado para corresponder ao atalho %s. Quer alterá-lo?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Descrição" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Editar atalho para %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Fixar parâmetro" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Atalho" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Atalhos" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<nenhum>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parâmetros" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Definir atalho para apagar ficheiro" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "Para esta definição funcionar com o atalho %s, o atalho %s tem de ser atribuído a cm_Delete, mas já está atribuído a %s. Quer alterá-lo?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Atalho %s para cm_Delete é uma sequência para a qual uma tecla de atalho com Shift revertido não pode ser atribuída. Esta definição pode não funcionar." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Atalho em uso" #: ulng.rsopthotkeysshortcutusedtext1 msgid "Shortcut %s is already used." msgstr "Atalho %s já está em uso." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Alterar para %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "usado para %s em %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "usado por este comando mas com parâmetros diferentes" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Arquivadores" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Atualizar automaticamente" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Comportamentos" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Breve" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Cores" #: ulng.rsoptionseditorcolumnsview msgid "Columns" msgstr "Colunas" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Configuração" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Personalizar colunas" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Lista de pastas" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Arrastar & Largar" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Botão da lista de unidades" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Associações de ficheiros" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Operações de ficheiros" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Painéis de ficheiros" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Vistas de ficheiros" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Tipos de ficheiros" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Separadores de pastas" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Tipos de letra" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Realces" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Atalhos" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ícones" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorar lista" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Teclas" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Idioma" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "Disposição" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Diário" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Vários" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Rato" #: ulng.rsoptionseditorplugins msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Suplementos" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Procura/Filtragem rápida" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Barra de ferramentas" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Ferramentas" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Sugestões" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Nenhuma;Linha de comandos;Procura rápida;Filtragem rápida" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Botão esquerdo;Botão direito;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "no cimo da lista de ficheiros;após as pastas (se as pastas estão ordenadas antes dos ficheiros);na posiçõ ordenada;no final da lista de ficheiros" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "O suplemento %s já está atribuído às seguintes extensões:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Ativo" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Nome de ficheiro" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Nome" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registado para" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Sensível;&Insensível" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Ficheiros;Pa&stas;Ficheiros e &pastas" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Ocultar painel de filtra&gem quando não estiver em foco" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "não sensível a maiúsculas;de acordo com definições regionais (aAbBcC);primeiro maiśculas, depois minúsculas (ABCabc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "ordenar por nome e mostrar primeiro;ordenar como ficheiros e mostrar primeiro;ordenar como ficheiros" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabétca, considerando acentos;Ordem natural;alfabética e números" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Cimo;Fundo;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparador;Comando inte&rno;Comando e&xterno;Men&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "não alterar posição;usar a definição para novos ficheiros;para a posição ordenada" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Ficheiros: %d, pastas: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Impossível alterar direitos de acesso a \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Impossível alterar proprietário de \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Ficheiro" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Pasta" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Linha nomeada" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Não" #: ulng.rspropssocket msgid "Socket" msgstr "Tomada" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Dispositivo de bloqueio especial" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Dispositivo de carácter especial" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Ligação simbólica" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Tipo desconhecido" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Sim (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Resultado da procura" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<modelo sem nome>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Selecione uma pasta" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Mo&strar ajuda para %s" #: ulng.rssimplewordall msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Tudo" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Commando" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Pré-visualizar" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "Bytes" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "Gigabytes" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "Kilobytes" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "Megabytes" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "Terabytes" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "Ficheiros: %d, pastas: %d, tamanho: %s (%s bytes)" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Impossível criar pasta destino!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Formato de tamanho de ficheiro incorreto!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Impossível dividir o ficheiro!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "O número de partes é superior a 100! Continuar?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Pasta selecionada:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Erro ao criar ligação simbólica" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Texto predefinido" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Texto simples" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dia(s)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Hora(s)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minuto(s)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Mês(Meses)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Segundo(s)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Semana(s)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "Ano(s)" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Diferenciar" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Erro ao abrir Diferenciar" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Erro ao abrir o editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Erro ao abrir o terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Erro ao abrir o visualizador" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Visualizador" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Por favor reporte este erro no rastreio de erros com uma descrição do que estava a fazer e o ficheiro seguinte: %sPrima %s para continuar ou %s para abortar o programa." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Rede" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Visualizador interno do Double Commander." #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "A codificar" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Novo tamanho" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s não encontrado!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/language/doublecmd.da.po������������������������������������������������������������0000644�0001750�0000144�00001207050�12666540554�017203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������msgid "" msgstr "" "Project-Id-Version: Double Commander 0.6.5 beta\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-01-17 23:08+0300\n" "PO-Revision-Date: 2015-09-13 11:52+ZONE\n" "Last-Translator: Full Name <Bolle_Barnewitz@sol.dk>\n" "Language-Team: Language <email@address>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Native-Language: Dansk\n" #: fsyncdirsdlg.rscomparingpercent msgid "Comparing... %d%% (ESC to cancel)" msgstr "Læser mapper: %d%% (ESC for at afbryde)" #: fsyncdirsdlg.rsdeleteright msgid "Right: Delete %d file(s)" msgstr "" #: fsyncdirsdlg.rsfilesfound msgid "Files found: %d (Identical: %d, Different: %d, Unique left: %d, Unique right: %d)" msgstr "Filer fundet: %d (Identiske: %d, Forskellige: %d, Unikke venstre: %d, Unikke højre: %d)" #: fsyncdirsdlg.rslefttorightcopy msgid "Left to Right: Copy %d files, total size: %d bytes" msgstr "Venstre til højre: Kopiér %d fil(er), totalt: %d bytes" #: fsyncdirsdlg.rsrighttoleftcopy msgid "Right to Left: Copy %d files, total size: %d bytes" msgstr "Højre til venstre: Kopiér %d fil(er), totalt: %d bytes" #: tfcolumnssetconf.btnallback.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallback2.caption msgctxt "TFCOLUMNSSETCONF.BTNALLBACK2.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallcurcol.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURCOL.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallcurtext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLCURTEXT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallfont.caption msgctxt "TFCOLUMNSSETCONF.BTNALLFONT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnallmarc.caption msgctxt "TFCOLUMNSSETCONF.BTNALLMARC.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnalltext.caption msgctxt "TFCOLUMNSSETCONF.BTNALLTEXT.CAPTION" msgid "All" msgstr "Alle" #: tfcolumnssetconf.btnbackcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnbackcolor2.caption msgctxt "TFCOLUMNSSETCONF.BTNBACKCOLOR2.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncancel.caption msgctxt "TFCOLUMNSSETCONF.BTNCANCEL.CAPTION" msgid "Cancel" msgstr "&Annuller" #: tfcolumnssetconf.btncursorbordercolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORBORDERCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursorcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btncursortext.caption msgctxt "TFCOLUMNSSETCONF.BTNCURSORTEXT.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnfontselect.caption msgctxt "TFCOLUMNSSETCONF.BTNFONTSELECT.CAPTION" msgid "..." msgstr "..." #: tfcolumnssetconf.btnforecolor.caption msgctxt "TFCOLUMNSSETCONF.BTNFORECOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.BTNMARKCOLOR.CAPTION" msgid ">>" msgstr ">>" #: tfcolumnssetconf.btnnext.caption msgid "->" msgstr "->" #: tfcolumnssetconf.btnok.caption msgctxt "TFCOLUMNSSETCONF.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfcolumnssetconf.btnprev.caption msgid "<-" msgstr "<-" #: tfcolumnssetconf.caption msgid "Configure custom columns view" msgstr "Brugerbestemt visning" #: tfcolumnssetconf.cbackgrndlabel.caption msgctxt "TFCOLUMNSSETCONF.CBACKGRNDLABEL.CAPTION" msgid "BackGround:" msgstr "&Baggrund:" #: tfcolumnssetconf.cbcursorborder.caption msgctxt "tfcolumnssetconf.cbcursorborder.caption" msgid "Cursor border" msgstr "Markør-grænser" #: tfcolumnssetconf.cbovercolor.caption msgctxt "tfcolumnssetconf.cbovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" #: tfcolumnssetconf.chkusecustomview.caption msgid "Use custom font and color" msgstr "Brug brugerdefinerede skrifttyper og farver" #: tfcolumnssetconf.ctextlabel.caption msgctxt "TFCOLUMNSSETCONF.CTEXTLABEL.CAPTION" msgid "Text Color:" msgstr "&Skriftfarve:" #: tfcolumnssetconf.label3.caption msgctxt "tfcolumnssetconf.label3.caption" msgid "Font:" msgstr "Skrifttype" #: tfcolumnssetconf.label4.caption msgctxt "TFCOLUMNSSETCONF.LABEL4.CAPTION" msgid "Size:" msgstr "Størrelse" #: tfcolumnssetconf.lblbackground2.caption msgctxt "TFCOLUMNSSETCONF.LBLBACKGROUND2.CAPTION" msgid "Background 2:" msgstr "Baggrund &2:" #: tfcolumnssetconf.lblconfigviewnr.caption msgid "Configure view nr:" msgstr "&Konfigurér visning nummer:" #: tfcolumnssetconf.lblcursorcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORCOLOR.CAPTION" msgid "Cursor Color:" msgstr "&Markørfarve:" #: tfcolumnssetconf.lblcursortext.caption msgctxt "TFCOLUMNSSETCONF.LBLCURSORTEXT.CAPTION" msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfcolumnssetconf.lblmarkcolor.caption msgctxt "TFCOLUMNSSETCONF.LBLMARKCOLOR.CAPTION" msgid "Mark Color:" msgstr "&Valgt farve:" #: tfcolumnssetconf.lblname.caption msgctxt "TFCOLUMNSSETCONF.LBLNAME.CAPTION" msgid "Name:" msgstr "Navn:" #: tfcolumnssetconf.lbnrofcolumnsset.caption msgctxt "TFCOLUMNSSETCONF.LBNROFCOLUMNSSET.CAPTION" msgid "0" msgstr "0" #: tfcolumnssetconf.miaddcolumn.caption msgctxt "tfcolumnssetconf.miaddcolumn.caption" msgid "Add column" msgstr "Tilføj kolonne" #: tfcolumnssetconf.pnlcusthead.caption msgid "Customize column:" msgstr "Tilpas kolonne" #: tfcolumnssetconf.pnlpreviewhead.caption msgctxt "TFCOLUMNSSETCONF.PNLPREVIEWHEAD.CAPTION" msgid "Preview" msgstr "Preview" #: tfcolumnssetconf.resback.caption msgctxt "TFCOLUMNSSETCONF.RESBACK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resback2.caption msgctxt "TFCOLUMNSSETCONF.RESBACK2.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurcol.caption msgctxt "TFCOLUMNSSETCONF.RESCURCOL.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.rescurtext.caption msgctxt "TFCOLUMNSSETCONF.RESCURTEXT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resfont.caption msgctxt "TFCOLUMNSSETCONF.RESFONT.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.resmark.caption msgctxt "TFCOLUMNSSETCONF.RESMARK.CAPTION" msgid "R" msgstr "R" #: tfcolumnssetconf.restext.caption msgctxt "TFCOLUMNSSETCONF.RESTEXT.CAPTION" msgid "R" msgstr "R" #: tfilesystemcopymoveoperationoptionsui.btnsearchtemplate.hint msgid "Choose template..." msgstr "Vælg skabelon..." #: tfilesystemcopymoveoperationoptionsui.cbcheckfreespace.caption msgid "C&heck free space" msgstr "Kontrollér ledig &plads" #: tfilesystemcopymoveoperationoptionsui.cbcopyattributes.caption msgid "Cop&y attributes" msgstr "Kopiér a&ttributter" #: tfilesystemcopymoveoperationoptionsui.cbcopyownership.caption msgid "Copy o&wnership" msgstr "Kopiér ejerskab" #: tfilesystemcopymoveoperationoptionsui.cbcopypermissions.caption msgid "Copy &permissions" msgstr "" #: tfilesystemcopymoveoperationoptionsui.cbcopytime.caption msgid "Copy d&ate/time" msgstr "Kopiér &dato/tid" #: tfilesystemcopymoveoperationoptionsui.cbcorrectlinks.caption msgid "Correct lin&ks" msgstr "Korrigér lin&ks" #: tfilesystemcopymoveoperationoptionsui.cbdropreadonlyflag.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.CBDROPREADONLYFLAG.CAPTION" msgid "Drop readonly fla&g" msgstr "Fjern skri&vebeskyttet attribut" #: tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption #, fuzzy msgctxt "tfilesystemcopymoveoperationoptionsui.cbexcludeemptydirectories.caption" msgid "E&xclude empty directories" msgstr "&Udelad tomme mapper" #: tfilesystemcopymoveoperationoptionsui.cbfollowlinks.caption msgid "Fo&llow links" msgstr "Fø&lg links" #: tfilesystemcopymoveoperationoptionsui.cbreservespace.caption msgid "&Reserve space" msgstr "&Reservér plads" #: tfilesystemcopymoveoperationoptionsui.cmbsetpropertyerror.hint msgid "What to do when cannot set file time, attributes, etc." msgstr "Hvad skal gøres, når filens tid, attributter, etc. ikke kan indstilles" #: tfilesystemcopymoveoperationoptionsui.gbfiletemplate.caption msgid "Use file template" msgstr "Brug filskabelon" #: tfilesystemcopymoveoperationoptionsui.lbldirectoryexists.caption msgid "When dir&ectory exists" msgstr "Hvis mappen findes:" #: tfilesystemcopymoveoperationoptionsui.lblfileexists.caption msgctxt "TFILESYSTEMCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When &file exists" msgstr "Hvis filen findes:" #: tfilesystemcopymoveoperationoptionsui.lblsetpropertyerror.caption msgid "When ca&nnot set property" msgstr "Hvis egenskaber ikke kan indstilles:" #: tfilesystemcopymoveoperationoptionsui.lbltemplatename.caption msgid "<no template>" msgstr "<ingen skabelon>" #: tfrmabout.btnclose.caption msgctxt "tfrmabout.btnclose.caption" msgid "&Close" msgstr "&Luk" #: tfrmabout.btncopytoclipboard.caption msgid "Copy to clipboard" msgstr "Kopiér til Udklipsholder" #: tfrmabout.caption msgctxt "TFRMABOUT.CAPTION" msgid "About" msgstr "Om" #: tfrmabout.lblbuild.caption msgctxt "tfrmabout.lblbuild.caption" msgid "Build" msgstr "" #: tfrmabout.lblfreepascalver.caption msgctxt "tfrmabout.lblfreepascalver.caption" msgid "Free Pascal" msgstr "" #: tfrmabout.lblhomepage.caption msgid "Home Page:" msgstr "Hjemmeside" #: tfrmabout.lblhomepageaddress.caption msgid "http://doublecmd.sourceforge.net" msgstr "" #: tfrmabout.lbllazarusver.caption msgctxt "tfrmabout.lbllazarusver.caption" msgid "Lazarus" msgstr "" #: tfrmabout.lblrevision.caption msgctxt "TFRMABOUT.LBLREVISION.CAPTION" msgid "Revision" msgstr "" #: tfrmabout.lbltitle.caption msgctxt "TFRMABOUT.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "" #: tfrmabout.lblversion.caption msgctxt "tfrmabout.lblversion.caption" msgid "Version" msgstr "" #: tfrmattributesedit.btncancel.caption msgctxt "TFRMATTRIBUTESEDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "Annu&ller" #: tfrmattributesedit.btnok.caption msgctxt "TFRMATTRIBUTESEDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmattributesedit.btnreset.caption msgid "&Reset" msgstr "&Nulstil" #: tfrmattributesedit.caption msgid "Choose attributes" msgstr "Vælg attributter" #: tfrmattributesedit.cbarchive.caption msgctxt "TFRMATTRIBUTESEDIT.CBARCHIVE.CAPTION" msgid "&Archive" msgstr "&Arkiv" #: tfrmattributesedit.cbcompressed.caption msgid "Co&mpressed" msgstr "K&omprimeret" #: tfrmattributesedit.cbdirectory.caption msgctxt "TFRMATTRIBUTESEDIT.CBDIRECTORY.CAPTION" msgid "&Directory" msgstr "&Mappe" #: tfrmattributesedit.cbencrypted.caption msgid "&Encrypted" msgstr "Krypt&eret" #: tfrmattributesedit.cbhidden.caption msgctxt "TFRMATTRIBUTESEDIT.CBHIDDEN.CAPTION" msgid "&Hidden" msgstr "S&kjult" #: tfrmattributesedit.cbreadonly.caption msgctxt "TFRMATTRIBUTESEDIT.CBREADONLY.CAPTION" msgid "Read o&nly" msgstr "Sk&rivebeskyttet" #: tfrmattributesedit.cbsgid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmattributesedit.cbsparse.caption msgid "S&parse" msgstr "Tyn&d" #: tfrmattributesedit.cbsticky.caption msgctxt "TFRMATTRIBUTESEDIT.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Klæbrig" #: tfrmattributesedit.cbsuid.caption msgctxt "TFRMATTRIBUTESEDIT.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmattributesedit.cbsymlink.caption msgid "&Symlink" msgstr "&Symbolsk link" #: tfrmattributesedit.cbsystem.caption msgctxt "TFRMATTRIBUTESEDIT.CBSYSTEM.CAPTION" msgid "S&ystem" msgstr "S&ystem" #: tfrmattributesedit.cbtemporary.caption msgid "&Temporary" msgstr "Midler&tidig" #: tfrmattributesedit.gbntfsattributes.caption msgid "NTFS attributes" msgstr "NTFS-attributter" #: tfrmattributesedit.gbwingeneral.caption msgid "General attributes" msgstr "Generelle attributter" #: tfrmattributesedit.lblattrbitsstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmattributesedit.lblattrgroupstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmattributesedit.lblattrotherstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre" #: tfrmattributesedit.lblattrownerstr.caption msgctxt "TFRMATTRIBUTESEDIT.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ejer" #: tfrmattributesedit.lblexec.caption msgctxt "TFRMATTRIBUTESEDIT.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmattributesedit.lblread.caption msgctxt "TFRMATTRIBUTESEDIT.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmattributesedit.lbltextattrs.caption msgid "As te&xt:" msgstr "Som tekst:" #: tfrmattributesedit.lblwrite.caption msgctxt "TFRMATTRIBUTESEDIT.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmchecksumcalc.caption #, fuzzy #| msgid "Calculate check sum..." msgctxt "tfrmchecksumcalc.caption" msgid "Calculate checksum..." msgstr "Dan CRC-kontrolsumfil" #: tfrmchecksumcalc.cbopenafterjobiscomplete.caption msgid "Open checksum file after job is completed" msgstr "Åbn kontrolsumfil efter opgaven er færdig" #: tfrmchecksumcalc.cbseparatefile.caption msgid "C&reate separate checksum file for each file" msgstr "Dan en &separat kontrolsumfil for hver fil" #: tfrmchecksumcalc.lblsaveto.caption #, fuzzy #| msgid "&Save check sum file(s) to:" msgid "&Save checksum file(s) to:" msgstr "Gem kontrol&sum-fil(er) som:" #: tfrmchecksumverify.btnclose.caption msgctxt "TFRMCHECKSUMVERIFY.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmchecksumverify.caption #, fuzzy #| msgid "Verify check sum..." msgctxt "TFRMCHECKSUMVERIFY.CAPTION" msgid "Verify checksum..." msgstr "Kontroller kontrolsum" #: tfrmconnectionmanager.btnadd.caption msgctxt "TFRMCONNECTIONMANAGER.BTNADD.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmconnectionmanager.btncancel.caption msgctxt "TFRMCONNECTIONMANAGER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmconnectionmanager.btnconnect.caption msgid "C&onnect" msgstr "F&orbind" #: tfrmconnectionmanager.btndelete.caption msgctxt "TFRMCONNECTIONMANAGER.BTNDELETE.CAPTION" msgid "&Delete" msgstr "Slet" #: tfrmconnectionmanager.btnedit.caption msgctxt "TFRMCONNECTIONMANAGER.BTNEDIT.CAPTION" msgid "&Edit" msgstr "R&ediger" #: tfrmconnectionmanager.caption msgid "Connection manager" msgstr "Forbindelsesmanager" #: tfrmconnectionmanager.gbconnectto.caption msgid "Connect to:" msgstr "Forbind til:" #: tfrmcopydlg.btnaddtoqueue.caption msgid "A&dd To Queue" msgstr "&Føj til køen" #: tfrmcopydlg.btncancel.caption msgctxt "TFRMCOPYDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmcopydlg.btnoptions.caption msgid "O&ptions" msgstr "&Indstillinger" #: tfrmcopydlg.btnsaveoptions.caption msgid "Sa&ve these options as default" msgstr "&Gem indstillingerne som standard" #: tfrmcopydlg.caption msgctxt "TFRMCOPYDLG.CAPTION" msgid "Copy file(s)" msgstr "Kopier fil(er)" #: tfrmcopydlg.mnunewqueue.caption #, fuzzy msgctxt "tfrmcopydlg.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmcopydlg.mnuqueue1.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmcopydlg.mnuqueue2.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmcopydlg.mnuqueue3.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmcopydlg.mnuqueue4.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmcopydlg.mnuqueue5.caption #, fuzzy msgctxt "tfrmcopydlg.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmdescredit.actsavedescription.caption msgid "Save Description" msgstr "Gem beskrivelse" #: tfrmdescredit.btncancel.caption msgctxt "TFRMDESCREDIT.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmdescredit.btnok.caption msgctxt "TFRMDESCREDIT.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmdescredit.caption msgid "File/folder comment" msgstr "Filkommmentar" #: tfrmdescredit.lbleditcommentfor.caption msgid "E&dit comment for:" msgstr "Re&diger kommentar for:" #: tfrmdescredit.lblencoding.caption msgctxt "TFRMDESCREDIT.LBLENCODING.CAPTION" msgid "&Encoding:" msgstr "Kod&er:" #: tfrmdescredit.lblfilename.caption msgctxt "TFRMDESCREDIT.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmdiffer.actabout.caption msgctxt "TFRMDIFFER.ACTABOUT.CAPTION" msgid "About" msgstr "&Om sammenligneren..." #: tfrmdiffer.actautocompare.caption msgid "Auto Compare" msgstr "Sammenlign automatisk" #: tfrmdiffer.actbinarycompare.caption msgid "Binary Mode" msgstr "&Binær tilstand" #: tfrmdiffer.actcancelcompare.caption msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.CAPTION" msgid "Cancel" msgstr "&Annuller" #: tfrmdiffer.actcancelcompare.hint msgctxt "TFRMDIFFER.ACTCANCELCOMPARE.HINT" msgid "Cancel" msgstr "&Annuller" #: tfrmdiffer.actcopylefttoright.caption msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.CAPTION" msgid "Copy Block Right" msgstr "Kopier blok til &højre" #: tfrmdiffer.actcopylefttoright.hint msgctxt "TFRMDIFFER.ACTCOPYLEFTTORIGHT.HINT" msgid "Copy Block Right" msgstr "Kopier blok til højre" #: tfrmdiffer.actcopyrighttoleft.caption msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.CAPTION" msgid "Copy Block Left" msgstr "Kopier blok til &venstre" #: tfrmdiffer.actcopyrighttoleft.hint msgctxt "TFRMDIFFER.ACTCOPYRIGHTTOLEFT.HINT" msgid "Copy Block Left" msgstr "Kopier blok til venstre" #: tfrmdiffer.acteditcopy.caption msgctxt "TFRMDIFFER.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "Kopier" #: tfrmdiffer.acteditcut.caption msgctxt "TFRMDIFFER.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "Klip" #: tfrmdiffer.acteditdelete.caption msgctxt "TFRMDIFFER.ACTEDITDELETE.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmdiffer.acteditpaste.caption msgctxt "TFRMDIFFER.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Sæt ind" #: tfrmdiffer.acteditredo.caption msgctxt "TFRMDIFFER.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Gentag" #: tfrmdiffer.acteditselectall.caption msgid "Select &All" msgstr "Vælg &alle" #: tfrmdiffer.acteditundo.caption msgctxt "TFRMDIFFER.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Fortryd" #: tfrmdiffer.actexit.caption msgctxt "tfrmdiffer.actexit.caption" msgid "E&xit" msgstr "&Afslut" #: tfrmdiffer.actfirstdifference.caption msgctxt "tfrmdiffer.actfirstdifference.caption" msgid "First Difference" msgstr "F&ørste forskel" #: tfrmdiffer.actfirstdifference.hint msgctxt "tfrmdiffer.actfirstdifference.hint" msgid "First Difference" msgstr "Første forskel" #: tfrmdiffer.actignorecase.caption msgid "Ignore Case" msgstr "Ignorer forskel på STORE og små bogstaver" #: tfrmdiffer.actignorewhitespace.caption msgid "Ignore Blanks" msgstr "Ignorer tomme felter" #: tfrmdiffer.actkeepscrolling.caption msgid "Keep Scrolling" msgstr "Fortsæt rulning" #: tfrmdiffer.actlastdifference.caption msgctxt "tfrmdiffer.actlastdifference.caption" msgid "Last Difference" msgstr "S&idste forskel" #: tfrmdiffer.actlastdifference.hint msgctxt "tfrmdiffer.actlastdifference.hint" msgid "Last Difference" msgstr "Sidste forskel" #: tfrmdiffer.actlinedifferences.caption msgid "Line Differences" msgstr "Linjeforskel" #: tfrmdiffer.actnextdifference.caption msgctxt "tfrmdiffer.actnextdifference.caption" msgid "Next Difference" msgstr "&Næste forskel" #: tfrmdiffer.actnextdifference.hint msgctxt "tfrmdiffer.actnextdifference.hint" msgid "Next Difference" msgstr "Næste forskel" #: tfrmdiffer.actopenleft.caption msgid "Open Left..." msgstr "Åbn venstre..." #: tfrmdiffer.actopenright.caption msgid "Open Right..." msgstr "Åbn højre..." #: tfrmdiffer.actpaintbackground.caption msgid "Paint Background" msgstr "Farvet baggrund" #: tfrmdiffer.actprevdifference.caption msgctxt "tfrmdiffer.actprevdifference.caption" msgid "Previous Difference" msgstr "&Forrige forskel" #: tfrmdiffer.actprevdifference.hint msgctxt "tfrmdiffer.actprevdifference.hint" msgid "Previous Difference" msgstr "Forrige forskel" #: tfrmdiffer.actreload.caption msgctxt "TFRMDIFFER.ACTRELOAD.CAPTION" msgid "&Reload" msgstr "Genindlæs" #: tfrmdiffer.actreload.hint msgctxt "TFRMDIFFER.ACTRELOAD.HINT" msgid "Reload" msgstr "Genindlæs" #: tfrmdiffer.actsave.caption msgctxt "TFRMDIFFER.ACTSAVE.CAPTION" msgid "Save" msgstr "&Gem" #: tfrmdiffer.actsave.hint msgctxt "TFRMDIFFER.ACTSAVE.HINT" msgid "Save" msgstr "&Gem" #: tfrmdiffer.actsaveas.caption msgctxt "TFRMDIFFER.ACTSAVEAS.CAPTION" msgid "Save as..." msgstr "Gem som..." #: tfrmdiffer.actsaveas.hint msgctxt "TFRMDIFFER.ACTSAVEAS.HINT" msgid "Save as..." msgstr "Gem som..." #: tfrmdiffer.actsaveleft.caption msgctxt "TFRMDIFFER.ACTSAVELEFT.CAPTION" msgid "Save Left" msgstr "Gem venstre" #: tfrmdiffer.actsaveleft.hint msgctxt "TFRMDIFFER.ACTSAVELEFT.HINT" msgid "Save Left" msgstr "Gem venstre" #: tfrmdiffer.actsaveleftas.caption msgctxt "TFRMDIFFER.ACTSAVELEFTAS.CAPTION" msgid "Save Left As..." msgstr "Gem venstre som..." #: tfrmdiffer.actsaveleftas.hint msgctxt "TFRMDIFFER.ACTSAVELEFTAS.HINT" msgid "Save Left As..." msgstr "Gem venstre som..." #: tfrmdiffer.actsaveright.caption msgctxt "TFRMDIFFER.ACTSAVERIGHT.CAPTION" msgid "Save Right" msgstr "Gem højre" #: tfrmdiffer.actsaveright.hint msgctxt "TFRMDIFFER.ACTSAVERIGHT.HINT" msgid "Save Right" msgstr "Gem højre" #: tfrmdiffer.actsaverightas.caption msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.CAPTION" msgid "Save Right As..." msgstr "Gem højre som..." #: tfrmdiffer.actsaverightas.hint msgctxt "TFRMDIFFER.ACTSAVERIGHTAS.HINT" msgid "Save Right As..." msgstr "Gem højre som..." #: tfrmdiffer.actstartcompare.caption msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.CAPTION" msgid "Compare" msgstr "&Sammenlign" #: tfrmdiffer.actstartcompare.hint msgctxt "TFRMDIFFER.ACTSTARTCOMPARE.HINT" msgid "Compare" msgstr "Sammenlign" #: tfrmdiffer.btnleftencoding.hint msgctxt "TFRMDIFFER.BTNLEFTENCODING.HINT" msgid "Encoding" msgstr "Koder" #: tfrmdiffer.btnrightencoding.hint msgctxt "TFRMDIFFER.BTNRIGHTENCODING.HINT" msgid "Encoding" msgstr "Koder" #: tfrmdiffer.caption msgctxt "tfrmdiffer.caption" msgid "Compare files" msgstr "Sammenlign indhold" #: tfrmdiffer.midivider1.caption msgctxt "TFRMDIFFER.MIDIVIDER1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider10.caption msgctxt "TFRMDIFFER.MIDIVIDER10.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider2.caption msgctxt "TFRMDIFFER.MIDIVIDER2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider3.caption msgctxt "TFRMDIFFER.MIDIVIDER3.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider4.caption msgctxt "TFRMDIFFER.MIDIVIDER4.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider5.caption msgctxt "TFRMDIFFER.MIDIVIDER5.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider6.caption msgctxt "TFRMDIFFER.MIDIVIDER6.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider7.caption msgctxt "TFRMDIFFER.MIDIVIDER7.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider8.caption msgctxt "TFRMDIFFER.MIDIVIDER8.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.midivider9.caption msgctxt "TFRMDIFFER.MIDIVIDER9.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miencodingleft.caption msgid "&Left" msgstr "Venstre" #: tfrmdiffer.miencodingright.caption msgid "&Right" msgstr "Højre" #: tfrmdiffer.miseparator1.caption msgctxt "TFRMDIFFER.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.miseparator2.caption msgctxt "TFRMDIFFER.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmdiffer.mnuactions.caption msgid "&Actions" msgstr "H&andlinger" #: tfrmdiffer.mnuedit.caption msgctxt "TFRMDIFFER.MNUEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmdiffer.mnuencoding.caption msgctxt "TFRMDIFFER.MNUENCODING.CAPTION" msgid "En&coding" msgstr "&Koder" #: tfrmdiffer.mnufile.caption msgctxt "TFRMDIFFER.MNUFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmdiffer.mnuoptions.caption msgctxt "TFRMDIFFER.MNUOPTIONS.CAPTION" msgid "&Options" msgstr "&Indstillinger" #: tfrmedithotkey.btnaddshortcut.hint msgid "Add new shortcut to sequence" msgstr "Tilføj ny genvej til sekvens" #: tfrmedithotkey.btncancel.caption msgctxt "tfrmedithotkey.btncancel.caption" msgid "&Cancel" msgstr "Af&bryd" #: tfrmedithotkey.btnok.caption msgctxt "tfrmedithotkey.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmedithotkey.btnremoveshortcut.hint msgid "Remove last shortcut from sequence" msgstr "Fjern sidste genvej fra sekvens" #: tfrmedithotkey.cghkcontrols.caption #, fuzzy msgctxt "tfrmedithotkey.cghkcontrols.caption" msgid "Only for these controls" msgstr "Kun for disse kontrolelementer" #: tfrmedithotkey.lblparameters.caption msgid "&Parameters (each in a separate line):" msgstr "&Parametre (hver i egen linje):" #: tfrmedithotkey.lblshortcuts.caption msgid "Shortcuts:" msgstr "Genveje:" #: tfrmeditor.actabout.caption msgctxt "TFRMEDITOR.ACTABOUT.CAPTION" msgid "About" msgstr "&Om" #: tfrmeditor.actabout.hint msgctxt "tfrmeditor.actabout.hint" msgid "About" msgstr "&Om sammenligneren..." #: tfrmeditor.actconfhigh.caption msgid "&Configuration" msgstr "&Indstillinger" #: tfrmeditor.actconfhigh.hint msgctxt "tfrmeditor.actconfhigh.hint" msgid "Configuration" msgstr "Indstillinger" #: tfrmeditor.acteditcopy.caption msgctxt "TFRMEDITOR.ACTEDITCOPY.CAPTION" msgid "Copy" msgstr "K&opier" #: tfrmeditor.acteditcopy.hint msgctxt "tfrmeditor.acteditcopy.hint" msgid "Copy" msgstr "Kopier" #: tfrmeditor.acteditcut.caption msgctxt "TFRMEDITOR.ACTEDITCUT.CAPTION" msgid "Cut" msgstr "&Klip" #: tfrmeditor.acteditcut.hint msgctxt "tfrmeditor.acteditcut.hint" msgid "Cut" msgstr "Klip" #: tfrmeditor.acteditdelete.caption #, fuzzy msgctxt "tfrmeditor.acteditdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditdelete.hint msgctxt "tfrmeditor.acteditdelete.hint" msgid "Delete" msgstr "Slet" #: tfrmeditor.acteditfind.caption #, fuzzy #| msgid "&Find" msgctxt "tfrmeditor.acteditfind.caption" msgid "&Find " msgstr "S&øg..." #: tfrmeditor.acteditfind.hint msgctxt "tfrmeditor.acteditfind.hint" msgid "Find" msgstr "Find" #: tfrmeditor.acteditfindnext.caption msgctxt "tfrmeditor.acteditfindnext.caption" msgid "Find next" msgstr "&Find næste" #: tfrmeditor.acteditfindnext.hint msgctxt "tfrmeditor.acteditfindnext.hint" msgid "Find next" msgstr "&Find næste" #: tfrmeditor.acteditgotoline.caption msgctxt "tfrmeditor.acteditgotoline.caption" msgid "Goto Line..." msgstr "Gå til linje" #: tfrmeditor.acteditlineendcr.caption msgctxt "tfrmeditor.acteditlineendcr.caption" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcr.hint msgctxt "tfrmeditor.acteditlineendcr.hint" msgid "Mac (CR)" msgstr "" #: tfrmeditor.acteditlineendcrlf.caption msgctxt "tfrmeditor.acteditlineendcrlf.caption" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendcrlf.hint msgctxt "tfrmeditor.acteditlineendcrlf.hint" msgid "Windows (CRLF)" msgstr "" #: tfrmeditor.acteditlineendlf.caption msgctxt "tfrmeditor.acteditlineendlf.caption" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditlineendlf.hint msgctxt "tfrmeditor.acteditlineendlf.hint" msgid "Unix (LF)" msgstr "" #: tfrmeditor.acteditpaste.caption msgctxt "TFRMEDITOR.ACTEDITPASTE.CAPTION" msgid "Paste" msgstr "Sæt i&nd" #: tfrmeditor.acteditpaste.hint msgctxt "tfrmeditor.acteditpaste.hint" msgid "Paste" msgstr "Sæt ind" #: tfrmeditor.acteditredo.caption msgctxt "TFRMEDITOR.ACTEDITREDO.CAPTION" msgid "Redo" msgstr "Annuller fortryd" #: tfrmeditor.acteditredo.hint msgctxt "tfrmeditor.acteditredo.hint" msgid "Redo" msgstr "Annuller fortryd" #: tfrmeditor.acteditrplc.caption msgid "&Replace" msgstr "&Erstat..." #: tfrmeditor.acteditrplc.hint msgctxt "tfrmeditor.acteditrplc.hint" msgid "Replace" msgstr "Erstat" #: tfrmeditor.acteditselectall.caption msgid "Select&All" msgstr "&Markér alt" #: tfrmeditor.acteditselectall.hint msgctxt "tfrmeditor.acteditselectall.hint" msgid "Select All" msgstr "Vælg alle" #: tfrmeditor.acteditundo.caption msgctxt "TFRMEDITOR.ACTEDITUNDO.CAPTION" msgid "Undo" msgstr "Fo&rtryd" #: tfrmeditor.acteditundo.hint msgctxt "tfrmeditor.acteditundo.hint" msgid "Undo" msgstr "Fortryd" #: tfrmeditor.actfileclose.caption msgctxt "TFRMEDITOR.ACTFILECLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmeditor.actfileclose.hint msgctxt "tfrmeditor.actfileclose.hint" msgid "Close" msgstr "&Luk" #: tfrmeditor.actfileexit.caption msgctxt "TFRMEDITOR.ACTFILEEXIT.CAPTION" msgid "E&xit" msgstr "&Afslut" #: tfrmeditor.actfileexit.hint msgctxt "tfrmeditor.actfileexit.hint" msgid "Exit" msgstr "Afslut" #: tfrmeditor.actfilenew.caption msgctxt "TFRMEDITOR.ACTFILENEW.CAPTION" msgid "&New" msgstr "&Ny" #: tfrmeditor.actfilenew.hint msgctxt "tfrmeditor.actfilenew.hint" msgid "New" msgstr "Ny" #: tfrmeditor.actfileopen.caption msgid "&Open" msgstr "Å&bn..." #: tfrmeditor.actfileopen.hint msgctxt "tfrmeditor.actfileopen.hint" msgid "Open" msgstr "Åbn" #: tfrmeditor.actfilesave.caption msgctxt "TFRMEDITOR.ACTFILESAVE.CAPTION" msgid "&Save" msgstr "&Gem" #: tfrmeditor.actfilesave.hint msgctxt "tfrmeditor.actfilesave.hint" msgid "Save" msgstr "&Gem" #: tfrmeditor.actfilesaveas.caption msgid "Save &As.." msgstr "Gem &som..." #: tfrmeditor.actfilesaveas.hint msgid "Save As" msgstr "Gem som" #: tfrmeditor.actsaveall.caption msgid "Sa&ve All" msgstr "Gem alle" #: tfrmeditor.actsaveall.hint msgid "Save All" msgstr "Gem alle" #: tfrmeditor.caption msgctxt "TFRMEDITOR.CAPTION" msgid "Editor" msgstr "Editor" #: tfrmeditor.help1.caption msgctxt "TFRMEDITOR.HELP1.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmeditor.menuitem1.caption #, fuzzy msgctxt "tfrmeditor.menuitem1.caption" msgid "-" msgstr "-" #: tfrmeditor.midiv.caption msgctxt "TFRMEDITOR.MIDIV.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miedit.caption msgctxt "TFRMEDITOR.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmeditor.miencoding.caption msgctxt "TFRMEDITOR.MIENCODING.CAPTION" msgid "En&coding" msgstr "Koder" #: tfrmeditor.miencodingin.caption msgid "Open as" msgstr "Åbn som" #: tfrmeditor.miencodingout.caption msgctxt "tfrmeditor.miencodingout.caption" msgid "Save as" msgstr "Gem som" #: tfrmeditor.mifile.caption msgctxt "TFRMEDITOR.MIFILE.CAPTION" msgid "&File" msgstr "&Filer" #: tfrmeditor.mihighlight.caption msgid "Syntax highlight" msgstr "Fremhæv syntaks" #: tfrmeditor.milineendtype.caption msgid "End Of Line" msgstr "Linjeafslutning" #: tfrmeditor.miseparator1.caption msgctxt "TFRMEDITOR.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.miseparator2.caption msgctxt "TFRMEDITOR.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n1.caption msgctxt "TFRMEDITOR.N1.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n3.caption msgctxt "TFRMEDITOR.N3.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n4.caption msgctxt "TFRMEDITOR.N4.CAPTION" msgid "-" msgstr "-" #: tfrmeditor.n5.caption msgctxt "tfrmeditor.n5.caption" msgid "-" msgstr "-" #: tfrmeditsearchreplace.btncancel.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmeditsearchreplace.btnok.caption msgctxt "TFRMEDITSEARCHREPLACE.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmeditsearchreplace.cbsearchcasesensitive.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHCASESENSITIVE.CAPTION" msgid "C&ase sensitivity" msgstr "" "Forskel på STORE\n" "og små &bogstaver\n" #: tfrmeditsearchreplace.cbsearchfromcursor.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHFROMCURSOR.CAPTION" msgid "S&earch from caret" msgstr "" "Søg fra &lodret tegn\n" "(pipe)\n" #: tfrmeditsearchreplace.cbsearchregexp.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHREGEXP.CAPTION" msgid "&Regular expressions" msgstr "&Regulære udtryk" #: tfrmeditsearchreplace.cbsearchselectedonly.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHSELECTEDONLY.CAPTION" msgid "Selected &text only" msgstr "Kun den valgt &tekst" #: tfrmeditsearchreplace.cbsearchwholewords.caption msgctxt "TFRMEDITSEARCHREPLACE.CBSEARCHWHOLEWORDS.CAPTION" msgid "&Whole words only" msgstr "Kun hele ord" #: tfrmeditsearchreplace.gbsearchoptions.caption msgctxt "TFRMEDITSEARCHREPLACE.GBSEARCHOPTIONS.CAPTION" msgid "Option" msgstr "Indstillinger" #: tfrmeditsearchreplace.lblreplacewith.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLREPLACEWITH.CAPTION" msgid "&Replace with:" msgstr "E&rstat med:" #: tfrmeditsearchreplace.lblsearchfor.caption msgctxt "TFRMEDITSEARCHREPLACE.LBLSEARCHFOR.CAPTION" msgid "&Search for:" msgstr "&Søg efter:" #: tfrmeditsearchreplace.rgsearchdirection.caption msgctxt "TFRMEDITSEARCHREPLACE.RGSEARCHDIRECTION.CAPTION" msgid "Direction" msgstr "Retning" #: tfrmextractdlg.caption msgctxt "tfrmextractdlg.caption" msgid "Unpack files" msgstr "Udpak filer" #: tfrmextractdlg.cbextractpath.caption msgid "&Unpack path names if stored with files" msgstr "&Udpak stinavn, hvis gemt med fil(er)" #: tfrmextractdlg.cbfilemask.text msgctxt "tfrmextractdlg.cbfilemask.text" msgid "*.*" msgstr "*.*" #: tfrmextractdlg.cbinseparatefolder.caption msgid "Unpack each archive to a &separate subdir (name of the archive)" msgstr "Udpak hvert arkiv til en &separate mapper (med navn som arkiv)" #: tfrmextractdlg.cboverwrite.caption msgid "O&verwrite existing files" msgstr "&Overskriv eksisterende filer" #: tfrmextractdlg.lblextractto.caption msgid "To the &directory:" msgstr "Udpak filer fra arkivet til:" #: tfrmextractdlg.lblfilemask.caption msgid "&Extract files matching file mask:" msgstr "Fil(er), der skal &pakkes ud: " #: tfrmextractdlg.lblpassword.caption msgid "&Password for encrypted files:" msgstr "Adgangskode for krypterede filer:" #: tfrmfileassoc.btnaddact.caption msgctxt "TFRMFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Tilføj" #: tfrmfileassoc.btnaddext.caption msgctxt "TFRMFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Tilføj" #: tfrmfileassoc.btnaddnewtype.caption msgctxt "TFRMFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmfileassoc.btncancel.caption msgctxt "TFRMFILEASSOC.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmfileassoc.btndownact.caption msgctxt "TFRMFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Ned" #: tfrmfileassoc.btnok.caption msgctxt "TFRMFILEASSOC.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmfileassoc.btnremoveact.caption msgctxt "TFRMFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Fjern" #: tfrmfileassoc.btnremoveext.caption msgctxt "TFRMFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Fjern" #: tfrmfileassoc.btnremoveicon.caption msgctxt "TFRMFILEASSOC.BTNREMOVEICON.CAPTION" msgid "X" msgstr "X" #: tfrmfileassoc.btnremovetype.caption msgctxt "TFRMFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Fjern" #: tfrmfileassoc.btnrenametype.caption msgctxt "TFRMFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Omdøb" #: tfrmfileassoc.btnupact.caption msgctxt "TFRMFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Op" #: tfrmfileassoc.caption msgctxt "tfrmfileassoc.caption" msgid "File associations" msgstr "Filassociationer" #: tfrmfileassoc.gbactions.caption msgctxt "TFRMFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Handlinger" #: tfrmfileassoc.gbexts.caption msgctxt "tfrmfileassoc.gbexts.caption" msgid "Extensions" msgstr "Filendelser" #: tfrmfileassoc.gbfiletypes.caption msgctxt "TFRMFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Filtyper" #: tfrmfileassoc.gbicon.caption msgctxt "tfrmfileassoc.gbicon.caption" msgid "Icon" msgstr "Ikon" #: tfrmfileassoc.lblaction.caption msgctxt "tfrmfileassoc.lblaction.caption" msgid "Action:" msgstr "Handling:" #: tfrmfileassoc.lblcommand.caption msgctxt "TFRMFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "&Kommando:" #: tfrmfileassoc.miedit.caption msgctxt "TFRMFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Rediger" #: tfrmfileassoc.mieditor.caption msgctxt "tfrmfileassoc.mieditor.caption" msgid "Open in Editor" msgstr "Åbn i editor" #: tfrmfileassoc.mifilename.caption msgctxt "TFRMFILEASSOC.MIFILENAME.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmfileassoc.mifilepath.caption msgctxt "tfrmfileassoc.mifilepath.caption" msgid "File path" msgstr "Filens sti" #: tfrmfileassoc.mifullpath.caption msgctxt "tfrmfileassoc.mifullpath.caption" msgid "Full path" msgstr "Hele sti" #: tfrmfileassoc.migetoutputfromcommand.caption msgctxt "tfrmfileassoc.migetoutputfromcommand.caption" msgid "Get output from command" msgstr "Få output fra kommandovindue" #: tfrmfileassoc.miopen.caption msgctxt "TFRMFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmfileassoc.mishell.caption msgctxt "tfrmfileassoc.mishell.caption" msgid "Run in terminal" msgstr "Kør i terminalvindue" #: tfrmfileassoc.mivfs.caption msgctxt "tfrmfileassoc.mivfs.caption" msgid "Open in VFS" msgstr "Åbn i VFS" #: tfrmfileassoc.miview.caption msgctxt "TFRMFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vis" #: tfrmfileassoc.miviewer.caption msgctxt "tfrmfileassoc.miviewer.caption" msgid "Open in Viewer" msgstr "Åbn i fremviser" #: tfrmfileexecuteyourself.btnclose.caption msgctxt "TFRMFILEEXECUTEYOURSELF.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfileexecuteyourself.caption msgctxt "tfrmfileexecuteyourself.caption" msgid "Wait..." msgstr "Vent.." #: tfrmfileexecuteyourself.lblfilename.caption msgid "File name:" msgstr "Filnavn:" #: tfrmfileexecuteyourself.lblfrompath.caption msgctxt "TFRMFILEEXECUTEYOURSELF.LBLFROMPATH.CAPTION" msgid "From:" msgstr "Fra:" #: tfrmfileexecuteyourself.lblprompt.caption msgid "Click on Close when the temporary file can be deleted!" msgstr "Klik på Luk, når den midlertidige fil kan slettes!" #: tfrmfileop.btncancel.caption msgctxt "TFRMFILEOP.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmfileop.btnminimizetopanel.caption msgid "&To panel" msgstr "&Til handlingsvindue" #: tfrmfileop.btnviewoperations.caption msgid "&View all" msgstr "&Vis alle" #: tfrmfileop.lblcurrentoperation.caption msgid "Current operation:" msgstr "Aktuel handling:" #: tfrmfileop.lblfrom.caption msgctxt "TFRMFILEOP.LBLFROM.CAPTION" msgid "From:" msgstr "Fra:" #: tfrmfileop.lblto.caption msgid "To:" msgstr "Til:" #: tfrmfileproperties.btnclose.caption msgctxt "TFRMFILEPROPERTIES.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfileproperties.btnsetproperties.caption msgid "&Set properties" msgstr "Ind&stil egenskaber" #: tfrmfileproperties.btnsetpropertiestoallfiles.caption msgid "Set to &all selected files" msgstr "Indstil &alle valgte filer" #: tfrmfileproperties.btnskipfile.caption msgid "Ski&p this file" msgstr "S&pring filen over" #: tfrmfileproperties.caption msgctxt "tfrmfileproperties.caption" msgid "Properties" msgstr "Egenskaber" #: tfrmfileproperties.cbsgid.caption msgctxt "TFRMFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "SGID" #: tfrmfileproperties.cbsticky.caption msgctxt "TFRMFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Klæbrig" #: tfrmfileproperties.cbsuid.caption msgctxt "TFRMFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "SUID" #: tfrmfileproperties.gbowner.caption msgctxt "TFRMFILEPROPERTIES.GBOWNER.CAPTION" msgid "Owner" msgstr "Ejer" #: tfrmfileproperties.lblattrbitsstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit:" #: tfrmfileproperties.lblattrgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe:" #: tfrmfileproperties.lblattrotherstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre:" #: tfrmfileproperties.lblattrownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ejer:" #: tfrmfileproperties.lblattrtext.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmfileproperties.lblattrtextstr.caption msgctxt "TFRMFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmfileproperties.lblcontains.caption msgctxt "tfrmfileproperties.lblcontains.caption" msgid "???" msgstr "???" #: tfrmfileproperties.lblcontainsstr.caption msgid "Contains:" msgstr "Indeholder:" #: tfrmfileproperties.lblexec.caption msgctxt "TFRMFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmfileproperties.lblfile.caption msgctxt "TFRMFILEPROPERTIES.LBLFILE.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmfileproperties.lblfilename.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAME.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfilenamestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILENAMESTR.CAPTION" msgid "Name:" msgstr "Navn:" #: tfrmfileproperties.lblfilestr.caption msgctxt "TFRMFILEPROPERTIES.LBLFILESTR.CAPTION" msgid "File name" msgstr "Navn:" #: tfrmfileproperties.lblfolder.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLFOLDER.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblfolderstr.caption msgctxt "tfrmfileproperties.lblfolderstr.caption" msgid "Path:" msgstr "Placering:" #: tfrmfileproperties.lblgroupstr.caption msgctxt "TFRMFILEPROPERTIES.LBLGROUPSTR.CAPTION" msgid "&Group" msgstr "Gruppe:" #: tfrmfileproperties.lbllastaccess.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTACCESS.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastaccessstr.caption msgid "Last access:" msgstr "Åbnet:" #: tfrmfileproperties.lbllastmodif.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTMODIF.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllastmodifstr.caption msgid "Last modification:" msgstr "Ændret:" #: tfrmfileproperties.lbllaststchange.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLLASTSTCHANGE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbllaststchangestr.caption msgid "Last status change:" msgstr "Attributter ændret:" #: tfrmfileproperties.lbloctal.caption msgctxt "TFRMFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmfileproperties.lblownerstr.caption msgctxt "TFRMFILEPROPERTIES.LBLOWNERSTR.CAPTION" msgid "O&wner" msgstr "Ejer:" #: tfrmfileproperties.lblread.caption msgctxt "TFRMFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmfileproperties.lblsize.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLSIZE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsizestr.caption msgctxt "TFRMFILEPROPERTIES.LBLSIZESTR.CAPTION" msgid "Size:" msgstr "Størrelse:" #: tfrmfileproperties.lblsymlink.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLSYMLINK.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lblsymlinkstr.caption msgid "Symlink to:" msgstr "Symlink til:" #: tfrmfileproperties.lbltype.caption #, fuzzy msgctxt "TFRMFILEPROPERTIES.LBLTYPE.CAPTION" msgid "???" msgstr "???" #: tfrmfileproperties.lbltypestr.caption msgid "Type:" msgstr "Filtype:" #: tfrmfileproperties.lblwrite.caption msgctxt "TFRMFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmfileproperties.tsattributes.caption msgctxt "TFRMFILEPROPERTIES.TSATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributter" #: tfrmfileproperties.tsproperties.caption msgctxt "TFRMFILEPROPERTIES.TSPROPERTIES.CAPTION" msgid "Properties" msgstr "Egenskaber" #: tfrmfinddlg.actcancel.caption msgid "actCancel" msgstr "" #: tfrmfinddlg.actclose.caption msgid "actClose" msgstr "" #: tfrmfinddlg.actedit.caption msgid "actEdit" msgstr "" #: tfrmfinddlg.actfeedtolistbox.caption msgid "actFeedToListbox" msgstr "" #: tfrmfinddlg.actgotofile.caption msgid "actGoToFile" msgstr "" #: tfrmfinddlg.actintellifocus.caption msgid "actIntelliFocus" msgstr "" #: tfrmfinddlg.actlastsearch.caption msgid "actLastSearch" msgstr "" #: tfrmfinddlg.actnewsearch.caption msgid "actNewSearch" msgstr "" #: tfrmfinddlg.actpageadvanced.caption msgid "actPageAdvanced" msgstr "" #: tfrmfinddlg.actpageloadsave.caption msgid "actPageLoadSave" msgstr "" #: tfrmfinddlg.actpageplugins.caption msgid "actPagePlugins" msgstr "" #: tfrmfinddlg.actpageresults.caption msgid "actPageResults" msgstr "" #: tfrmfinddlg.actpagestandard.caption msgid "actPageStandard" msgstr "" #: tfrmfinddlg.actstart.caption msgid "actStart" msgstr "" #: tfrmfinddlg.actview.caption msgid "actView" msgstr "" #: tfrmfinddlg.btnaddattribute.caption msgctxt "tfrmfinddlg.btnaddattribute.caption" msgid "&Add" msgstr "Tilfø&j" #: tfrmfinddlg.btnattrshelp.caption msgctxt "TFRMFINDDLG.BTNATTRSHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmfinddlg.btnclose.caption msgctxt "TFRMFINDDLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmfinddlg.btnedit.caption msgctxt "tfrmfinddlg.btnedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmfinddlg.btngotopath.caption msgid "&Go to file" msgstr "G&å til fil" #: tfrmfinddlg.btnlastsearch.caption msgctxt "TFRMFINDDLG.BTNLASTSEARCH.CAPTION" msgid "&Last search" msgstr "Sidste søg&ning" #: tfrmfinddlg.btnnewsearch.caption msgid "&New search" msgstr "Ny s&øgning" #: tfrmfinddlg.btnsavetemplate.caption msgctxt "TFRMFINDDLG.BTNSAVETEMPLATE.CAPTION" msgid "&Save" msgstr "&Gem" #: tfrmfinddlg.btnsearchdelete.caption msgctxt "TFRMFINDDLG.BTNSEARCHDELETE.CAPTION" msgid "&Delete" msgstr "Sl&et" #: tfrmfinddlg.btnsearchload.caption msgid "L&oad" msgstr "&Hent" #: tfrmfinddlg.btnsearchsave.caption msgid "S&ave" msgstr "&Gem" #: tfrmfinddlg.btnsearchsavewithstartingpath.caption msgid "Sa&ve with \"Start in directory\"" msgstr "Gem &med \"Start i mappe\"" #: tfrmfinddlg.btnsearchsavewithstartingpath.hint msgid "If saved then \"Start in directory\" will be restored when loading template. Use it if you want to fix searching to a certain directory" msgstr "Når der gemmes med \"Start i mappe\" vil afgrænsningen blive gendannet ved indlæsing af skabelon. Brug den, hvis du vil afgrænse søgningen til en bestemt mappe " #: tfrmfinddlg.btnstart.caption msgctxt "tfrmfinddlg.btnstart.caption" msgid "&Start" msgstr "&Start" #: tfrmfinddlg.btnstop.caption msgctxt "TFRMFINDDLG.BTNSTOP.CAPTION" msgid "C&ancel" msgstr "&Annuller" #: tfrmfinddlg.btnusetemplate.caption msgid "Use template" msgstr "Anvend skabelon" #: tfrmfinddlg.btnview.caption msgctxt "TFRMFINDDLG.BTNVIEW.CAPTION" msgid "&View" msgstr "&Vis" #: tfrmfinddlg.btnworkwithfound.caption msgid "Feed to &listbox" msgstr "Ko&pier til listboks" #: tfrmfinddlg.caption msgctxt "tfrmfinddlg.caption" msgid "Find files" msgstr "Find filer" #: tfrmfinddlg.cbcasesens.caption msgid "Case sens&itive" msgstr "" "Forskel på STORE \n" "og små &bogstaver\n" #: tfrmfinddlg.cbdatefrom.caption msgid "&Date from:" msgstr "Fra dato:" #: tfrmfinddlg.cbdateto.caption msgid "Dat&e to:" msgstr "Til dato:" #: tfrmfinddlg.cbfilesizefrom.caption msgid "S&ize from:" msgstr "&Filstørrelse fra:" #: tfrmfinddlg.cbfilesizeto.caption msgid "Si&ze to:" msgstr "F&ilstørrelse til:" #: tfrmfinddlg.cbfindinarchive.caption msgid "Search in &archives" msgstr "" #: tfrmfinddlg.cbfindtext.caption msgctxt "TFRMFINDDLG.CBFINDTEXT.CAPTION" msgid "Find &text in file" msgstr "&Find tekst:" #: tfrmfinddlg.cbfollowsymlinks.caption msgctxt "TFRMFINDDLG.CBFOLLOWSYMLINKS.CAPTION" msgid "Follow s&ymlinks" msgstr "Følg s&ymbolske links" #: tfrmfinddlg.cbnotcontainingtext.caption msgctxt "TFRMFINDDLG.CBNOTCONTAININGTEXT.CAPTION" msgid "Find files N&OT containing the text" msgstr "Find filer, der IKKE indeholder &teksten" #: tfrmfinddlg.cbnotolderthan.caption msgid "N&ot older than:" msgstr "Ikke &ældre end:" #: tfrmfinddlg.cbpartialnamesearch.caption msgid "Searc&h for part of file name" msgstr "Søg efter en del af fi&lnavnet " #: tfrmfinddlg.cbregexp.caption msgctxt "TFRMFINDDLG.CBREGEXP.CAPTION" msgid "&Regular expression" msgstr "&Regulære udtryk" #: tfrmfinddlg.cbreplacetext.caption msgid "Re&place by" msgstr "Erst&at med:" #: tfrmfinddlg.cbselectedfiles.caption msgid "Selected directories and &files" msgstr "Søg kun i &valgte mapper/filer" #: tfrmfinddlg.cbtextregexp.caption msgid "Regular &expression" msgstr "Regulære &udtryk" #: tfrmfinddlg.cbtimefrom.caption msgid "&Time from:" msgstr "Fra tid:" #: tfrmfinddlg.cbtimeto.caption msgid "Ti&me to:" msgstr "Til tid:" #: tfrmfinddlg.cbuseplugin.caption msgid "&Use search plugin:" msgstr "Anvend søge-plug&in:" #: tfrmfinddlg.cmbexcludedirectories.hint msgid "Enter directories names that should be excluded from search separated with \";\"" msgstr "Indtast mappenavnene, som skal udelades i søgningen adskilt med \";\"" #: tfrmfinddlg.cmbexcludefiles.hint msgid "Enter files names that should be excluded from search separated with \";\"" msgstr "Indtast filnavnene, som skal udelades i søgningen adskilt med \";\"" #: tfrmfinddlg.cmbfindfilemask.hint msgid "Enter files names separated with \";\"" msgstr "Indtast filnavne adskilt med \";\"" #: tfrmfinddlg.cmbfindfilemask.text msgctxt "TFRMFINDDLG.CMBFINDFILEMASK.TEXT" msgid "*" msgstr "*.*" #: tfrmfinddlg.gbdirectories.caption msgctxt "tfrmfinddlg.gbdirectories.caption" msgid "Directories" msgstr "Mapper" #: tfrmfinddlg.gbfiles.caption msgctxt "tfrmfinddlg.gbfiles.caption" msgid "Files" msgstr "Filer" #: tfrmfinddlg.gbfinddata.caption msgid "Find Data" msgstr "Find data" #: tfrmfinddlg.lblattributes.caption msgctxt "TFRMFINDDLG.LBLATTRIBUTES.CAPTION" msgid "Attri&butes" msgstr "A&ttributter" #: tfrmfinddlg.lblencoding.caption msgctxt "TFRMFINDDLG.LBLENCODING.CAPTION" msgid "Encodin&g:" msgstr "Ko&der:" #: tfrmfinddlg.lblexcludedirectories.caption msgid "E&xclude subdirectories" msgstr "Udelad undermapper" #: tfrmfinddlg.lblexcludefiles.caption msgid "&Exclude files" msgstr "Ud&elad filer" #: tfrmfinddlg.lblfindfilemask.caption msgid "&File mask" msgstr "Søg &efter:" #: tfrmfinddlg.lblfindpathstart.caption msgid "Start in &directory" msgstr "Søg &i mappe:" #: tfrmfinddlg.lblsearchdepth.caption msgid "Search su&bdirectories:" msgstr "Søg i under&mapper:" #: tfrmfinddlg.lbltemplateheader.caption msgid "&Previous searches:" msgstr "&Tidligere søgninger:" #: tfrmfinddlg.miopeninnewtab.caption msgid "Open In New Tab(s)" msgstr "" #: tfrmfinddlg.miremovefromllist.caption msgid "Remove from list" msgstr "Fjern fra liste" #: tfrmfinddlg.mishowallfound.caption msgid "Show all found items" msgstr "Vis alle fundne elementer" #: tfrmfinddlg.mishowineditor.caption msgid "Show In Editor" msgstr "" #: tfrmfinddlg.mishowinviewer.caption msgid "Show In Viewer" msgstr "Vis i fremviser" #: tfrmfinddlg.tsadvanced.caption msgid "Advanced" msgstr "Avanceret" #: tfrmfinddlg.tsloadsave.caption msgid "Load/Save" msgstr "Hent/gem" #: tfrmfinddlg.tsplugins.caption msgctxt "tfrmfinddlg.tsplugins.caption" msgid "Plugins" msgstr "Plugins" #: tfrmfinddlg.tsresults.caption msgid "Results" msgstr "Resultater" #: tfrmfinddlg.tsstandard.caption msgid "Standard" msgstr "Generelt" #: tfrmfindview.btnclose.caption msgctxt "TFRMFINDVIEW.BTNCLOSE.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmfindview.btnfind.caption msgctxt "TFRMFINDVIEW.BTNFIND.CAPTION" msgid "&Find" msgstr "Find" #: tfrmfindview.caption msgctxt "TFRMFINDVIEW.CAPTION" msgid "Find" msgstr "Find" #: tfrmfindview.cbcasesens.caption msgid "C&ase sensitive" msgstr "STORE og små bogstaver" #: tfrmhardlink.btncancel.caption msgctxt "TFRMHARDLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmhardlink.btnok.caption msgctxt "TFRMHARDLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmhardlink.caption msgid "Create hard link" msgstr "Dan hårdt link" #: tfrmhardlink.lblexistingfile.caption msgctxt "TFRMHARDLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destination, som linket skal pege på:" #: tfrmhardlink.lbllinktocreate.caption msgctxt "TFRMHARDLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "" #: tfrmhotdirexportimport.btnselectall.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTALL.CAPTION" msgid "Import all!" msgstr "Importér alle" #: tfrmhotdirexportimport.btnselectiondone.caption msgctxt "TFRMHOTDIREXPORTIMPORT.BTNSELECTIONDONE.CAPTION" msgid "Import selected" msgstr "Importér valgte" #: tfrmhotdirexportimport.caption msgid "Select the entries your want to import" msgstr "Vælg de poster, du vil importere" #: tfrmhotdirexportimport.lbhint.caption msgid "When clicking a sub-menu, it will select the whole menu" msgstr "Hvis du klikker på en undermenu, vælges hele menuen" #: tfrmhotdirexportimport.lblhintholdcontrol.caption msgid "Hold CTRL and click entries to select multiple ones" msgstr "Hold CTRL nede og klik på posterne for at vælge dem enkeltvist" #: tfrmlinker.btnsave.caption msgctxt "TFRMLINKER.BTNSAVE.CAPTION" msgid "..." msgstr "..." #: tfrmlinker.caption msgctxt "tfrmlinker.caption" msgid "Linker" msgstr "Saml filer" #: tfrmlinker.gbsaveto.caption msgid "Save to..." msgstr "Saml ovenstående filer til" #: tfrmlinker.grbxcontrol.caption msgid "Item" msgstr "Element" #: tfrmlinker.lblfilename.caption msgctxt "TFRMLINKER.LBLFILENAME.CAPTION" msgid "&File name" msgstr "filnavnet:" #: tfrmlinker.spbtndown.caption msgctxt "TFRMLINKER.SPBTNDOWN.CAPTION" msgid "Do&wn" msgstr "Ned" #: tfrmlinker.spbtndown.hint #, fuzzy msgctxt "tfrmlinker.spbtndown.hint" msgid "Down" msgstr "Ned" #: tfrmlinker.spbtnrem.caption #, fuzzy msgctxt "tfrmlinker.spbtnrem.caption" msgid "&Remove" msgstr "Fjern" #: tfrmlinker.spbtnrem.hint #, fuzzy msgctxt "tfrmlinker.spbtnrem.hint" msgid "Delete" msgstr "Slet" #: tfrmlinker.spbtnup.caption msgctxt "TFRMLINKER.SPBTNUP.CAPTION" msgid "&Up" msgstr "Op" #: tfrmlinker.spbtnup.hint msgctxt "TFRMLINKER.SPBTNUP.HINT" msgid "Up" msgstr "Op" #: tfrmmain.actabout.caption msgctxt "TFRMMAIN.ACTABOUT.CAPTION" msgid "&About" msgstr "&Om Double Commander" #: tfrmmain.actaddfilenametocmdline.caption msgid "Add file name to command line" msgstr "Tilføj filnavn til kommandolinje" #: tfrmmain.actaddpathandfilenametocmdline.caption msgid "Add path and file name to command line" msgstr "Tilføj sti og filnavn til kommandolinje" #: tfrmmain.actaddpathtocmdline.caption msgid "Copy path to command line" msgstr "Kopier sti til kommandolinje" #: tfrmmain.actbriefview.caption #, fuzzy #| msgid "Brief" msgctxt "tfrmmain.actbriefview.caption" msgid "Brief view" msgstr "&Kort visning" #: tfrmmain.actbriefview.hint msgid "Brief View" msgstr "Kort visning" #: tfrmmain.actcalculatespace.caption msgid "Calculate &Occupied Space" msgstr "B&eregn brugt plads..." #: tfrmmain.actchangedir.caption msgid "Change directory" msgstr "Skift mappe" #: tfrmmain.actchangedirtohome.caption msgid "Change directory to home" msgstr "Gå til home-mappen" #: tfrmmain.actchangedirtoparent.caption msgid "Change Directory To Parent" msgstr "Gå til overmappe" #: tfrmmain.actchangedirtoroot.caption msgid "Change directory to root" msgstr "Gå til rod-mappe" #: tfrmmain.actchecksumcalc.caption msgctxt "TFRMMAIN.ACTCHECKSUMCALC.CAPTION" msgid "Calculate Check&sum..." msgstr "&Dan CRC-kontrolsumfil(er)..." #: tfrmmain.actchecksumverify.caption msgctxt "TFRMMAIN.ACTCHECKSUMVERIFY.CAPTION" msgid "&Verify Checksum..." msgstr "Kontroller CRC-kontrolsu&m (fra kontrolsum-filer)..." #: tfrmmain.actclearlogfile.caption msgid "Clear log file" msgstr "Tøm logfil" #: tfrmmain.actclearlogwindow.caption msgid "Clear log window" msgstr "Tøm logvindue" #: tfrmmain.actclosealltabs.caption msgctxt "TFRMMAIN.ACTCLOSEALLTABS.CAPTION" msgid "Close &All Tabs" msgstr "Luk &alle faneblade" #: tfrmmain.actcloseduplicatetabs.caption msgid "Close Duplicate Tabs" msgstr "" #: tfrmmain.actclosetab.caption msgctxt "TFRMMAIN.ACTCLOSETAB.CAPTION" msgid "&Close Tab" msgstr "Luk faneblad" #: tfrmmain.actcmdlinenext.caption msgid "Next Command Line" msgstr "Næste kommandolinje" #: tfrmmain.actcmdlinenext.hint msgid "Set command line to next command in history" msgstr "Indstil kommandolinje til næste kommando i historikken" #: tfrmmain.actcmdlineprev.caption msgid "Previous Command Line" msgstr "Forrige kommandolinje" #: tfrmmain.actcmdlineprev.hint msgid "Set command line to previous command in history" msgstr "Indstil kommandolinje til forrige kommando i historikken" #: tfrmmain.actcolumnsview.caption msgid "Full" msgstr "&Lang visning" #: tfrmmain.actcolumnsview.hint msgid "Columns View" msgstr "Kolonnevisning" #: tfrmmain.actcomparecontents.caption msgid "Compare by &Contents" msgstr "Sammenlign &indhold..." #: tfrmmain.actcomparedirectories.caption msgctxt "tfrmmain.actcomparedirectories.caption" msgid "Compare Directories" msgstr "&Sammenlign vinduer" #: tfrmmain.actcomparedirectories.hint msgctxt "tfrmmain.actcomparedirectories.hint" msgid "Compare Directories" msgstr "Sammenligner vinduerne" #: tfrmmain.actconfigdirhotlist.caption #, fuzzy msgctxt "tfrmmain.actconfigdirhotlist.caption" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration af Favoritmapper" #: tfrmmain.actconfigfavoritetabs.caption msgid "Configuration of Favorite Tabs" msgstr "" #: tfrmmain.actconfigfoldertabs.caption msgid "Configuration of folder tabs" msgstr "" #: tfrmmain.actconfigtoolbars.caption msgid "Toolbar..." msgstr "" #: tfrmmain.actcontextmenu.caption msgid "Show context menu" msgstr "Vis kontekstmenu" #: tfrmmain.actcopy.caption msgctxt "tfrmmain.actcopy.caption" msgid "Copy" msgstr "Kopier" #: tfrmmain.actcopyalltabstoopposite.caption msgid "Copy all tabs to opposite side" msgstr "" #: tfrmmain.actcopyfiledetailstoclip.caption msgid "Copy all shown &columns" msgstr "Kopiér alle viste &kolonner" #: tfrmmain.actcopyfullnamestoclip.caption msgid "Copy Filename(s) with Full &Path" msgstr "K&opier filnavn + sti til Udklipsholder" #: tfrmmain.actcopynamestoclip.caption msgid "Copy &Filename(s) to Clipboard" msgstr "&Kopier filnavn til Udklipsholder" #: tfrmmain.actcopynoask.caption msgid "Copy files without asking for confirmation" msgstr "Kopier filer uden bekræftelse" #: tfrmmain.actcopypathnosepoffilestoclip.caption msgid "Copy Full Path of selected file(s) with no ending dir separator" msgstr "" #: tfrmmain.actcopypathoffilestoclip.caption msgid "Copy Full Path of selected file(s)" msgstr "" #: tfrmmain.actcopysamepanel.caption msgid "Copy to same panel" msgstr "Kopier til samme panel" #: tfrmmain.actcopytoclipboard.caption msgid "&Copy" msgstr "&Kopier" #: tfrmmain.actcountdircontent.caption msgid "Sho&w Occupied Space" msgstr "Vis &brugt plads" #: tfrmmain.actcuttoclipboard.caption msgid "Cu&t" msgstr "Klip" #: tfrmmain.actdebugshowcommandparameters.caption msgid "Show Command Parameters" msgstr "" #: tfrmmain.actdelete.caption #, fuzzy msgctxt "tfrmmain.actdelete.caption" msgid "Delete" msgstr "Slet" #: tfrmmain.actdirhistory.caption msgctxt "TFRMMAIN.ACTDIRHISTORY.CAPTION" msgid "Directory history" msgstr "Mappehistorik" #: tfrmmain.actdirhotlist.caption msgid "Directory &Hotlist" msgstr "Favorit&mapper" #: tfrmmain.actdoanycmcommand.caption msgid "Select any command and execute it" msgstr "" #: tfrmmain.actedit.caption msgctxt "tfrmmain.actedit.caption" msgid "Edit" msgstr "Rediger" #: tfrmmain.acteditcomment.caption msgid "Edit Co&mment..." msgstr "Rediger &filkommentar" #: tfrmmain.acteditnew.caption msgid "Edit new file" msgstr "Rediger ny fil" #: tfrmmain.acteditpath.caption msgid "Edit path field above file list" msgstr "Rediger stifeltet over fillisten" #: tfrmmain.actexchange.caption msgid "Swap &Panels" msgstr "Ombyt vind&uer" #: tfrmmain.actexit.caption msgctxt "TFRMMAIN.ACTEXIT.CAPTION" msgid "E&xit" msgstr "Afslu&t" #: tfrmmain.actextractfiles.caption msgid "&Extract Files..." msgstr "&Udpak filer..." #: tfrmmain.actfileassoc.caption #, fuzzy #| msgid "File &Associations..." msgid "Configuration of File &Associations" msgstr "Asso&ciering..." #: tfrmmain.actfilelinker.caption msgid "Com&bine Files..." msgstr "&Saml filer..." #: tfrmmain.actfileproperties.caption msgid "Show &File Properties" msgstr "E&genskaber..." #: tfrmmain.actfilespliter.caption msgctxt "TFRMMAIN.ACTFILESPLITER.CAPTION" msgid "Spl&it File..." msgstr "&Opdel fil..." #: tfrmmain.actflatview.caption msgid "&Flat view" msgstr "&Flad visning" #: tfrmmain.actfocuscmdline.caption msgid "Focus command line" msgstr "Fokus på kommandolinjen" #: tfrmmain.actgotofirstfile.caption msgid "Place cursor on first file in list" msgstr "Placer markøren på første fil på listen" #: tfrmmain.actgotolastfile.caption msgid "Place cursor on last file in list" msgstr "Placer markøren på sidste fil på listen" #: tfrmmain.acthardlink.caption msgctxt "TFRMMAIN.ACTHARDLINK.CAPTION" msgid "Create &Hard Link..." msgstr "Dan et &hårdt link..." #: tfrmmain.acthelpindex.caption msgid "&Contents" msgstr "&Indeks" #: tfrmmain.acthorizontalfilepanels.caption msgid "&Horizontal Panels Mode" msgstr "Horisontal visnin&g" #: tfrmmain.actkeyboard.caption msgid "&Keyboard" msgstr "&Tastatur" #: tfrmmain.actleftbriefview.caption msgid "Brief view on left panel" msgstr "" #: tfrmmain.actleftcolumnsview.caption msgid "Columns view on left panel" msgstr "" #: tfrmmain.actleftequalright.caption msgid "Left &= Right" msgstr "Venstre &= Højre" #: tfrmmain.actleftflatview.caption msgid "&Flat view on left panel" msgstr "" #: tfrmmain.actleftopendrives.caption msgid "Open left drive list" msgstr "Åbn venstre drevliste" #: tfrmmain.actleftreverseorder.caption msgid "Re&verse order on left panel" msgstr "" #: tfrmmain.actleftsortbyattr.caption msgid "Sort left panel by &Attributes" msgstr "" #: tfrmmain.actleftsortbydate.caption msgid "Sort left panel by &Date" msgstr "" #: tfrmmain.actleftsortbyext.caption msgid "Sort left panel by &Extension" msgstr "" #: tfrmmain.actleftsortbyname.caption msgid "Sort left panel by &Name" msgstr "" #: tfrmmain.actleftsortbysize.caption msgid "Sort left panel by &Size" msgstr "" #: tfrmmain.actleftthumbview.caption msgid "Thumbnails view on left panel" msgstr "" #: tfrmmain.actloadfavoritetabs.caption msgid "Load tabs from Favorite Tabs" msgstr "" #: tfrmmain.actloadselectionfromclip.caption msgid "Load Selection from Clip&board" msgstr "He&nt valg fra Udklipsholder" #: tfrmmain.actloadselectionfromfile.caption msgid "&Load Selection from File..." msgstr "&Hent valg fra fil" #: tfrmmain.actloadtabs.caption msgid "&Load Tabs from File" msgstr "Ind&læs faneblade fra fil" #: tfrmmain.actmakedir.caption #, fuzzy #| msgid "MakeDir" msgid "Create &Directory" msgstr "Ny mappe" #: tfrmmain.actmarkcurrentextension.caption msgid "Select All with the Same E&xtension" msgstr "Vælg alle af samme &type" #: tfrmmain.actmarkinvert.caption msgid "&Invert Selection" msgstr "&Inverter valg" #: tfrmmain.actmarkmarkall.caption msgid "&Select All" msgstr "Vælg &alle" #: tfrmmain.actmarkminus.caption msgid "Unselect a Gro&up..." msgstr "In&dskrænk valg..." #: tfrmmain.actmarkplus.caption msgid "Select a &Group..." msgstr "&Udvid valg..." #: tfrmmain.actmarkunmarkall.caption msgid "&Unselect All" msgstr "&Fravælg alle" #: tfrmmain.actminimize.caption msgid "Minimize window" msgstr "Minimer vindue" #: tfrmmain.actmultirename.caption msgid "Multi &Rename Tool" msgstr "Multi-omd&øbning..." #: tfrmmain.actnetworkconnect.caption msgid "Network &Connect..." msgstr "Forbind til netværk..." #: tfrmmain.actnetworkdisconnect.caption msgid "Network &Disconnect" msgstr "Afbryd til netværk" #: tfrmmain.actnetworkquickconnect.caption msgid "Network &Quick Connect..." msgstr "Hurtig netværksforbindelse..." #: tfrmmain.actnewtab.caption msgid "&New Tab" msgstr "&Dublér faneblad" #: tfrmmain.actnextfavoritetabs.caption msgid "Load the Next Favorite Tabs in the list" msgstr "" #: tfrmmain.actnexttab.caption msgid "Switch to Nex&t Tab" msgstr "Skift til næs&te faneblad" #: tfrmmain.actopen.caption msgctxt "TFRMMAIN.ACTOPEN.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmmain.actopenarchive.caption msgid "Try open archive" msgstr "Prøv at åbne arkiv" #: tfrmmain.actopenbar.caption msgid "Open bar file" msgstr "Åbn panelfil" #: tfrmmain.actopendirinnewtab.caption msgid "Open &Folder in a New Tab" msgstr "Åbn mappe i et nyt faneblad" #: tfrmmain.actopenvirtualfilesystemlist.caption msgctxt "TFRMMAIN.ACTOPENVIRTUALFILESYSTEMLIST.CAPTION" msgid "Open &VFS List" msgstr "Andre Computere" #: tfrmmain.actoperationsviewer.caption msgid "Operations &Viewer" msgstr "&Vis handlinger" #: tfrmmain.actoptions.caption msgid "&Options..." msgstr "&Indstillinger..." #: tfrmmain.actpackfiles.caption msgid "&Pack Files..." msgstr "&Pak filer..." #: tfrmmain.actpanelssplitterperpos.caption msgid "Set splitter position" msgstr "Indstil vidueopdelerens position" #: tfrmmain.actpastefromclipboard.caption msgid "&Paste" msgstr "Sæt ind" #: tfrmmain.actpreviousfavoritetabs.caption msgid "Load the Previous Favorite Tabs in the list" msgstr "" #: tfrmmain.actprevtab.caption msgid "Switch to &Previous Tab" msgstr "Skift til forrige faneblad" #: tfrmmain.actquickfilter.caption msgid "Quick filter" msgstr "Hurtigt filter" #: tfrmmain.actquicksearch.caption msgctxt "TFRMMAIN.ACTQUICKSEARCH.CAPTION" msgid "Quick search" msgstr "Hurtig søgning" #: tfrmmain.actquickview.caption msgid "&Quick View Panel" msgstr "&Hurtig visning" #: tfrmmain.actrefresh.caption msgid "&Refresh" msgstr "&Opdatér vindue" #: tfrmmain.actreloadfavoritetabs.caption msgid "Reload the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrename.caption msgctxt "tfrmmain.actrename.caption" msgid "Move" msgstr "Flyt" #: tfrmmain.actrenamenoask.caption msgid "Move/Rename files without asking for confirmation" msgstr "Flyt/omdøb filer uden at spørge" #: tfrmmain.actrenameonly.caption msgctxt "TFRMMAIN.ACTRENAMEONLY.CAPTION" msgid "Rename" msgstr "Omdøb" #: tfrmmain.actrenametab.caption msgid "&Rename Tab" msgstr "&Omdøb fane" #: tfrmmain.actresavefavoritetabs.caption msgid "Resave on the last Favorite Tabs loaded" msgstr "" #: tfrmmain.actrestoreselection.caption msgid "&Restore Selection" msgstr "&Gendan valg" #: tfrmmain.actreverseorder.caption msgid "Re&verse Order" msgstr "O&mvendt sortering" #: tfrmmain.actrightbriefview.caption msgid "Brief view on right panel" msgstr "" #: tfrmmain.actrightcolumnsview.caption msgid "Columns view on right panel" msgstr "" #: tfrmmain.actrightequalleft.caption msgid "Right &= Left" msgstr "Højre &= venstre" #: tfrmmain.actrightflatview.caption msgid "&Flat view on right panel" msgstr "" #: tfrmmain.actrightopendrives.caption msgid "Open right drive list" msgstr "Åbn højre drevliste" #: tfrmmain.actrightreverseorder.caption msgid "Re&verse order on right panel" msgstr "" #: tfrmmain.actrightsortbyattr.caption msgid "Sort right panel by &Attributes" msgstr "" #: tfrmmain.actrightsortbydate.caption msgid "Sort right panel by &Date" msgstr "" #: tfrmmain.actrightsortbyext.caption msgid "Sort right panel by &Extension" msgstr "" #: tfrmmain.actrightsortbyname.caption msgid "Sort right panel by &Name" msgstr "" #: tfrmmain.actrightsortbysize.caption msgid "Sort right panel by &Size" msgstr "" #: tfrmmain.actrightthumbview.caption msgid "Thumbnails view on right panel" msgstr "" #: tfrmmain.actrunterm.caption msgid "Run &Terminal" msgstr "Åbn terminal (komman&do-prompt)" #: tfrmmain.actsavefavoritetabs.caption msgid "Save current tabs to a New Favorite Tabs" msgstr "" #: tfrmmain.actsaveselection.caption msgid "Sa&ve Selection" msgstr "G&em valg" #: tfrmmain.actsaveselectiontofile.caption msgid "Save S&election to File..." msgstr "Gem &valg i fil" #: tfrmmain.actsavetabs.caption msgid "&Save Tabs to File" msgstr "&Gem faneblad som fil" #: tfrmmain.actsearch.caption msgid "&Search..." msgstr "Find fi&ler..." #: tfrmmain.actsetalltabsoptiondirsinnewtab.caption msgid "All tabs Locked with Dir Opened in New Tabs" msgstr "" #: tfrmmain.actsetalltabsoptionnormal.caption msgid "Set all tabs to Normal" msgstr "" #: tfrmmain.actsetalltabsoptionpathlocked.caption msgid "Set all tabs to Locked" msgstr "" #: tfrmmain.actsetalltabsoptionpathresets.caption msgid "All tabs Locked with Dir Changes Allowed" msgstr "" #: tfrmmain.actsetfileproperties.caption msgctxt "TFRMMAIN.ACTSETFILEPROPERTIES.CAPTION" msgid "Change &Attributes..." msgstr "&Ændre attributter..." #: tfrmmain.actsettaboptiondirsinnewtab.caption msgid "Locked with Directories Opened in New &Tabs" msgstr "Lås faneblad med mapper åbnet i nyt faneblad" #: tfrmmain.actsettaboptionnormal.caption msgid "&Normal" msgstr "&Normal" #: tfrmmain.actsettaboptionpathlocked.caption msgid "&Locked" msgstr "L&ås faneblad" #: tfrmmain.actsettaboptionpathresets.caption #, fuzzy msgctxt "tfrmmain.actsettaboptionpathresets.caption" msgid "Locked with &Directory Changes Allowed" msgstr "Lås faneblad, men &tillad mappeskift" #: tfrmmain.actshellexecute.caption msgctxt "tfrmmain.actshellexecute.caption" msgid "Open" msgstr "Åbn" #: tfrmmain.actshellexecute.hint msgid "Open using system associations" msgstr "Åbner ved brug af systemassociationer (eksterne programmer)" #: tfrmmain.actshowbuttonmenu.caption msgid "Show button menu" msgstr "Vis knappemenu" #: tfrmmain.actshowcmdlinehistory.caption msgid "Show command line history" msgstr "Vis kommandolinjehistorik" #: tfrmmain.actshowmainmenu.caption msgctxt "TFRMMAIN.ACTSHOWMAINMENU.CAPTION" msgid "Menu" msgstr "Menu" #: tfrmmain.actshowsysfiles.caption msgctxt "TFRMMAIN.ACTSHOWSYSFILES.CAPTION" msgid "Show &Hidden/System Files" msgstr "Vis skj&ulte/system-filer" #: tfrmmain.actsortbyattr.caption msgid "Sort by &Attributes" msgstr "Sortering efter &attributter" #: tfrmmain.actsortbydate.caption msgid "Sort by &Date" msgstr "Sorter&ing efter dato" #: tfrmmain.actsortbyext.caption msgid "Sort by &Extension" msgstr "Sortering efter t&ype" #: tfrmmain.actsortbyname.caption msgid "Sort by &Name" msgstr "Sortering efter &navn" #: tfrmmain.actsortbysize.caption msgid "Sort by &Size" msgstr "Sortering efter &størrelse" #: tfrmmain.actsrcopendrives.caption msgid "Open drive list" msgstr "" #: tfrmmain.actswitchignorelist.caption msgid "Enable/disable ignore list file to not show file names" msgstr "Aktiver/deaktiver filliste for ikke at vist filnavne" #: tfrmmain.actsymlink.caption msgctxt "TFRMMAIN.ACTSYMLINK.CAPTION" msgid "Create Symbolic &Link..." msgstr "Dan symbolsk &link..." #: tfrmmain.actsyncdirs.caption msgid "Synchronize dirs..." msgstr "Synkronisér mapper..." #: tfrmmain.acttargetequalsource.caption msgid "Target &= Source" msgstr "Mål &= kilde" #: tfrmmain.acttestarchive.caption msgid "&Test Archive(s)" msgstr "Ko&ntroller arkiv(er)" #: tfrmmain.actthumbnailsview.caption msgctxt "tfrmmain.actthumbnailsview.caption" msgid "Thumbnails" msgstr "Miniaturebilleder" #: tfrmmain.actthumbnailsview.hint msgid "Thumbnails View" msgstr "Visning af miniaturebilleder" #: tfrmmain.acttogglefullscreenconsole.caption msgid "Toggle fullscreen mode console" msgstr "" #: tfrmmain.acttransferleft.caption msgid "Transfer dir under cursor to left window" msgstr "Overfør " #: tfrmmain.acttransferright.caption msgid "Transfer dir under cursor to right window" msgstr "Flyt mappe under markøren til højre vindue" #: tfrmmain.acttreeview.caption msgid "&Tree View Panel" msgstr "" #: tfrmmain.actuniversalsingledirectsort.caption msgid "Sort according to parameters" msgstr "" #: tfrmmain.actunmarkcurrentextension.caption msgid "Unselect All with the Same Ex&tension" msgstr "F&ravælg alle af samme type" #: tfrmmain.actview.caption msgctxt "tfrmmain.actview.caption" msgid "View" msgstr "Vis" #: tfrmmain.actviewhistory.caption msgid "Show history of visited paths for active view" msgstr "Vis historikken for brugte stier i aktivt vindue" #: tfrmmain.actviewhistorynext.caption msgid "Go to next entry in history" msgstr "Gå til næste postering i historik" #: tfrmmain.actviewhistoryprev.caption msgid "Go to previous entry in history" msgstr "Gå til forrige postering i historik" #: tfrmmain.actviewlogfile.caption msgid "View log file" msgstr "" #: tfrmmain.actvisithomepage.caption msgid "&Visit Double Commander Website" msgstr "Double Commander på &WWW" #: tfrmmain.actwipe.caption msgid "Wipe" msgstr "Sikker sletning" #: tfrmmain.actworkwithdirectoryhotlist.caption msgid "Work with Directory Hotlist and paramters" msgstr "" #: tfrmmain.btnf10.caption msgctxt "tfrmmain.btnf10.caption" msgid "Exit" msgstr "Afslut" #: tfrmmain.btnf7.caption msgctxt "TFRMMAIN.BTNF7.CAPTION" msgid "Directory" msgstr "Mappe" #: tfrmmain.btnf8.caption msgctxt "tfrmmain.btnf8.caption" msgid "Delete" msgstr "Slet" #: tfrmmain.btnf9.caption msgctxt "tfrmmain.btnf9.caption" msgid "Terminal" msgstr "Terminal" #: tfrmmain.btnleftdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*.*" #: tfrmmain.btnleftdirectoryhotlist.hint #, fuzzy #| msgid "Directory hotlist" msgctxt "TFRMMAIN.BTNLEFTDIRECTORYHOTLIST.HINT" msgid "Directory Hotlist" msgstr "Favoritmapper" #: tfrmmain.btnleftequalright.caption msgctxt "tfrmmain.btnleftequalright.caption" msgid "<" msgstr "<" #: tfrmmain.btnleftequalright.hint msgid "Show current directory of the right panel in the left panel" msgstr "Vis mappen fra det højre vindue i dette vindue" #: tfrmmain.btnlefthome.caption msgctxt "TFRMMAIN.BTNLEFTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnlefthome.hint msgctxt "TFRMMAIN.BTNLEFTHOME.HINT" msgid "Go to home directory" msgstr "Gå til home-mappen" #: tfrmmain.btnleftroot.caption msgctxt "TFRMMAIN.BTNLEFTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnleftroot.hint msgctxt "TFRMMAIN.BTNLEFTROOT.HINT" msgid "Go to root directory" msgstr "Gå til roden" #: tfrmmain.btnleftup.caption msgctxt "TFRMMAIN.BTNLEFTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.btnleftup.hint msgctxt "TFRMMAIN.BTNLEFTUP.HINT" msgid "Go to parent directory" msgstr "Gå til overordnet mappe" #: tfrmmain.btnrightdirectoryhotlist.caption msgctxt "TFRMMAIN.BTNRIGHTDIRECTORYHOTLIST.CAPTION" msgid "*" msgstr "*.*" #: tfrmmain.btnrightdirectoryhotlist.hint #, fuzzy msgctxt "tfrmmain.btnrightdirectoryhotlist.hint" msgid "Directory Hotlist" msgstr "Favoritmappe" #: tfrmmain.btnrightequalleft.caption msgctxt "tfrmmain.btnrightequalleft.caption" msgid ">" msgstr ">" #: tfrmmain.btnrightequalleft.hint msgid "Show current directory of the left panel in the right panel" msgstr "Vis mappen fra det venstre vindue i dette vindue" #: tfrmmain.btnrighthome.caption msgctxt "TFRMMAIN.BTNRIGHTHOME.CAPTION" msgid "~" msgstr "~" #: tfrmmain.btnrightroot.caption msgctxt "TFRMMAIN.BTNRIGHTROOT.CAPTION" msgid "/" msgstr "/" #: tfrmmain.btnrightup.caption msgctxt "TFRMMAIN.BTNRIGHTUP.CAPTION" msgid ".." msgstr ".." #: tfrmmain.caption msgctxt "tfrmmain.caption" msgid "Double Commander" msgstr "" #: tfrmmain.lblcommandpath.caption msgctxt "TFRMMAIN.LBLCOMMANDPATH.CAPTION" msgid "Path" msgstr "Sti:" #: tfrmmain.menuitem2.caption msgctxt "TFRMMAIN.MENUITEM2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mi2080.caption msgid "&20/80" msgstr "" #: tfrmmain.mi3070.caption msgid "&30/70" msgstr "" #: tfrmmain.mi4060.caption msgid "&40/60" msgstr "" #: tfrmmain.mi5050.caption msgid "&50/50" msgstr "" #: tfrmmain.mi6040.caption msgid "&60/40" msgstr "" #: tfrmmain.mi7030.caption msgid "&70/30" msgstr "" #: tfrmmain.mi8020.caption msgid "&80/20" msgstr "" #: tfrmmain.micancel.caption msgctxt "TFRMMAIN.MICANCEL.CAPTION" msgid "Cancel" msgstr "&Annuller" #: tfrmmain.micopy.caption msgid "Copy..." msgstr "Kopier..." #: tfrmmain.mihardlink.caption msgctxt "TFRMMAIN.MIHARDLINK.CAPTION" msgid "Create link..." msgstr "Dan link..." #: tfrmmain.miline1.caption msgctxt "TFRMMAIN.MILINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline10.caption #, fuzzy msgctxt "tfrmmain.miline10.caption" msgid "-" msgstr "-" #: tfrmmain.miline11.caption #, fuzzy msgctxt "tfrmmain.miline11.caption" msgid "-" msgstr "-" #: tfrmmain.miline12.caption msgctxt "TFRMMAIN.MILINE12.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline13.caption msgctxt "TFRMMAIN.MILINE13.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline14.caption msgctxt "TFRMMAIN.MILINE14.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline15.caption msgctxt "TFRMMAIN.MILINE15.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline16.caption msgctxt "TFRMMAIN.MILINE16.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline17.caption msgctxt "TFRMMAIN.MILINE17.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline18.caption msgctxt "TFRMMAIN.MILINE18.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline19.caption msgctxt "TFRMMAIN.MILINE19.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline2.caption msgctxt "TFRMMAIN.MILINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline20.caption msgctxt "TFRMMAIN.MILINE20.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline21.caption #, fuzzy msgctxt "tfrmmain.miline21.caption" msgid "-" msgstr "-" #: tfrmmain.miline22.caption msgctxt "TFRMMAIN.MILINE22.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline23.caption #, fuzzy msgctxt "tfrmmain.miline23.caption" msgid "-" msgstr "-" #: tfrmmain.miline24.caption msgctxt "TFRMMAIN.MILINE24.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline25.caption msgctxt "TFRMMAIN.MILINE25.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline26.caption #, fuzzy msgctxt "tfrmmain.miline26.caption" msgid "-" msgstr "-" #: tfrmmain.miline3.caption msgctxt "TFRMMAIN.MILINE3.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline32.caption msgctxt "TFRMMAIN.MILINE32.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline33.caption msgctxt "tfrmmain.miline33.caption" msgid "-" msgstr "-" #: tfrmmain.miline37.caption #, fuzzy msgctxt "TFRMMAIN.MILINE37.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline38.caption msgctxt "TFRMMAIN.MILINE38.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline39.caption #, fuzzy msgctxt "tfrmmain.miline39.caption" msgid "-" msgstr "-" #: tfrmmain.miline4.caption msgctxt "TFRMMAIN.MILINE4.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline40.caption #, fuzzy msgctxt "tfrmmain.miline40.caption" msgid "-" msgstr "-" #: tfrmmain.miline47.caption msgctxt "TFRMMAIN.MILINE47.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline5.caption msgctxt "TFRMMAIN.MILINE5.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline50.caption #, fuzzy msgctxt "TFRMMAIN.MILINE50.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline6.caption msgctxt "TFRMMAIN.MILINE6.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline7.caption msgctxt "TFRMMAIN.MILINE7.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline8.caption msgctxt "TFRMMAIN.MILINE8.CAPTION" msgid "-" msgstr "-" #: tfrmmain.miline9.caption msgctxt "TFRMMAIN.MILINE9.CAPTION" msgid "-" msgstr "-" #: tfrmmain.milogclear.caption msgid "Clear" msgstr "Tøm" #: tfrmmain.milogcopy.caption msgctxt "TFRMMAIN.MILOGCOPY.CAPTION" msgid "Copy" msgstr "Kopi" #: tfrmmain.miloghide.caption msgid "Hide" msgstr "Skjul" #: tfrmmain.milogselectall.caption msgctxt "TFRMMAIN.MILOGSELECTALL.CAPTION" msgid "Select All" msgstr "Vælg alle" #: tfrmmain.mimove.caption msgid "Move..." msgstr "Flyt..." #: tfrmmain.misymlink.caption msgctxt "TFRMMAIN.MISYMLINK.CAPTION" msgid "Create symlink..." msgstr "Dan symlink..." #: tfrmmain.mitaboptions.caption msgid "Tab options" msgstr "Faneindstillinger" #: tfrmmain.mitrayiconexit.caption msgctxt "TFRMMAIN.MITRAYICONEXIT.CAPTION" msgid "E&xit" msgstr "Afslut" #: tfrmmain.mitrayiconrestore.caption msgid "Restore" msgstr "Gendan" #: tfrmmain.mnualloperpause.caption msgctxt "tfrmmain.mnualloperpause.caption" msgid "||" msgstr "||" #: tfrmmain.mnualloperstart.caption msgctxt "tfrmmain.mnualloperstart.caption" msgid "Start" msgstr "Start" #: tfrmmain.mnualloperstop.caption msgctxt "tfrmmain.mnualloperstop.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmmain.mnucmd.caption msgid "&Commands" msgstr "&Kommandoer" #: tfrmmain.mnuconfig.caption msgid "C&onfiguration" msgstr "&Opsætning" #: tfrmmain.mnucontextline1.caption #, fuzzy msgctxt "TFRMMAIN.MNUCONTEXTLINE1.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnucontextline2.caption #, fuzzy msgctxt "TFRMMAIN.MNUCONTEXTLINE2.CAPTION" msgid "-" msgstr "-" #: tfrmmain.mnufavoritetabs.caption msgid "Favorites" msgstr "" #: tfrmmain.mnufiles.caption msgid "&Files" msgstr "&Filer" #: tfrmmain.mnuhelp.caption msgctxt "TFRMMAIN.MNUHELP.CAPTION" msgid "&Help" msgstr "&Hjælp" #: tfrmmain.mnumark.caption msgid "&Mark" msgstr "&Markér" #: tfrmmain.mnunetwork.caption msgctxt "TFRMMAIN.MNUNETWORK.CAPTION" msgid "Network" msgstr "Netværk" #: tfrmmain.mnushow.caption msgid "&Show" msgstr "&Vis" #: tfrmmain.mnutaboptions.caption #, fuzzy #| msgid "&Options" msgctxt "TFRMMAIN.MNUTABOPTIONS.CAPTION" msgid "Tab &Options" msgstr "&Indstillinger" #: tfrmmain.mnutabs.caption msgid "&Tabs" msgstr "F&aner" #: tfrmmain.tbchangedir.caption msgid "CD" msgstr "CD" #: tfrmmain.tbcopy.caption msgctxt "TFRMMAIN.TBCOPY.CAPTION" msgid "Copy" msgstr "Kopier" #: tfrmmain.tbcut.caption msgctxt "TFRMMAIN.TBCUT.CAPTION" msgid "Cut" msgstr "Klip" #: tfrmmain.tbdelete.caption msgctxt "TFRMMAIN.TBDELETE.CAPTION" msgid "Delete" msgstr "Slet" #: tfrmmain.tbedit.caption msgctxt "TFRMMAIN.TBEDIT.CAPTION" msgid "Edit" msgstr "&Rediger..." #: tfrmmain.tbpaste.caption msgctxt "TFRMMAIN.TBPASTE.CAPTION" msgid "Paste" msgstr "Sæt ind" #: tfrmmain.tbseparator.caption msgctxt "TFRMMAIN.TBSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmmaincommandsdlg.btncancel.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btncancel.caption" msgid "&Cancel" msgstr "&Annuller" #: tfrmmaincommandsdlg.btnok.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.btnok.caption" msgid "&OK" msgstr "&OK" #: tfrmmaincommandsdlg.caption msgid "Select your internal command" msgstr "" #: tfrmmaincommandsdlg.cbcategorysortornot.text msgctxt "tfrmmaincommandsdlg.cbcategorysortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbcommandssortornot.text msgctxt "tfrmmaincommandsdlg.cbcommandssortornot.text" msgid "Legacy sorted" msgstr "" #: tfrmmaincommandsdlg.cbselectallcategorydefault.caption msgid "Select all categories by default" msgstr "" #: tfrmmaincommandsdlg.gbselection.caption msgid "Selection:" msgstr "" #: tfrmmaincommandsdlg.lblcategory.caption msgid "&Categories:" msgstr "" #: tfrmmaincommandsdlg.lblcommandname.caption msgid "Command &name:" msgstr "" #: tfrmmaincommandsdlg.lbledtfilter.editlabel.caption msgid "&Filter:" msgstr "" #: tfrmmaincommandsdlg.lblhint.caption msgid "Hint:" msgstr "" #: tfrmmaincommandsdlg.lblhotkey.caption msgid "Hotkey:" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommand.caption msgid "cm_name" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandcategory.caption msgctxt "tfrmmaincommandsdlg.lblselectedcommandcategory.caption" msgid "Category" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhelp.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhelp.caption" msgid "Help" msgstr "Hjælp" #: tfrmmaincommandsdlg.lblselectedcommandhint.caption msgid "Hint" msgstr "" #: tfrmmaincommandsdlg.lblselectedcommandhotkey.caption #, fuzzy msgctxt "tfrmmaincommandsdlg.lblselectedcommandhotkey.caption" msgid "Hotkey" msgstr "Genvejstast" #: tfrmmaskinputdlg.btncancel.caption msgctxt "TFRMMASKINPUTDLG.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmmaskinputdlg.btndefinetemplate.caption msgid "&Define..." msgstr "&Definer..." #: tfrmmaskinputdlg.btnok.caption msgctxt "TFRMMASKINPUTDLG.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmaskinputdlg.lblsearchtemplate.caption msgid "O&r select predefined selection type:" msgstr "Eller vælg fast definition:" #: tfrmmkdir.btncancel.caption msgctxt "TFRMMKDIR.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmmkdir.btnok.caption msgctxt "TFRMMKDIR.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmmkdir.caption msgid "Create new directory" msgstr "Opret ny mappe" #: tfrmmkdir.lblmakedir.caption msgid "&Input new directory name:" msgstr "Ny mappe (directory):" #: tfrmmodview.btnpath1.caption msgctxt "TFRMMODVIEW.BTNPATH1.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath2.caption msgctxt "TFRMMODVIEW.BTNPATH2.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath3.caption msgctxt "TFRMMODVIEW.BTNPATH3.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath4.caption msgctxt "TFRMMODVIEW.BTNPATH4.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.btnpath5.caption msgctxt "TFRMMODVIEW.BTNPATH5.CAPTION" msgid "..." msgstr "..." #: tfrmmodview.caption msgctxt "tfrmmodview.caption" msgid "New Size" msgstr "Ny størrelse" #: tfrmmodview.lblheight.caption msgid "Height :" msgstr "Højde:" #: tfrmmodview.lblpath1.caption msgctxt "TFRMMODVIEW.LBLPATH1.CAPTION" msgid "1" msgstr "1" #: tfrmmodview.lblpath2.caption msgctxt "tfrmmodview.lblpath2.caption" msgid "2" msgstr "2" #: tfrmmodview.lblpath3.caption msgctxt "tfrmmodview.lblpath3.caption" msgid "3" msgstr "3" #: tfrmmodview.lblpath4.caption msgid "4" msgstr "4" #: tfrmmodview.lblpath5.caption msgid "5" msgstr "5" #: tfrmmodview.lblquality.caption msgid "Quality of compress to Jpg" msgstr "JPG-komprimering" #: tfrmmodview.lblwidth.caption msgid "Width :" msgstr "Bredde:" #: tfrmmodview.rbbmp.caption msgid "BMP" msgstr "BMP" #: tfrmmodview.rbico.caption msgid "ICO" msgstr "ICO" #: tfrmmodview.rbjpg.caption msgid "JPG" msgstr "JPG" #: tfrmmodview.rbpng.caption msgid "PNG" msgstr "PNG" #: tfrmmodview.rbpnm.caption msgid "PNM" msgstr "PNM" #: tfrmmodview.teheight.text msgid "Height" msgstr "Højde" #: tfrmmodview.tequality.text msgid "80" msgstr "80" #: tfrmmodview.tewidth.text msgctxt "TFRMMODVIEW.TEWIDTH.TEXT" msgid "Width" msgstr "Bredde" #: tfrmmultirename.btnclose.caption msgctxt "TFRMMULTIRENAME.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmmultirename.btndeletepreset.caption msgctxt "TFRMMULTIRENAME.BTNDELETEPRESET.CAPTION" msgid "&Delete" msgstr "&Slet maske" #: tfrmmultirename.btnextmenu.caption msgctxt "TFRMMULTIRENAME.BTNEXTMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnloadpreset.caption msgid "&Load" msgstr "&Indlæs maske" #: tfrmmultirename.btnnamemenu.caption msgctxt "TFRMMULTIRENAME.BTNNAMEMENU.CAPTION" msgid "..." msgstr "..." #: tfrmmultirename.btnrename.caption msgctxt "tfrmmultirename.btnrename.caption" msgid "&Rename" msgstr "&Start!" #: tfrmmultirename.btnrestore.caption msgid "Reset &all" msgstr "Nulstil alle" #: tfrmmultirename.btnsavepreset.caption msgctxt "TFRMMULTIRENAME.BTNSAVEPRESET.CAPTION" msgid "&Save" msgstr "&Gem maske" #: tfrmmultirename.caption msgctxt "tfrmmultirename.caption" msgid "MultiRename" msgstr "Multi-omdøbning" #: tfrmmultirename.cblog.caption msgctxt "TFRMMULTIRENAME.CBLOG.CAPTION" msgid "Ena&ble" msgstr "&Aktiver logning" #: tfrmmultirename.cbregexp.caption msgctxt "TFRMMULTIRENAME.CBREGEXP.CAPTION" msgid "Regular e&xpressions" msgstr "Regulære &udtryk" #: tfrmmultirename.cbusesubs.caption msgid "&Use substitution" msgstr "Brug su&bstituter" #: tfrmmultirename.cmbxwidth.text msgid "01" msgstr "01" #: tfrmmultirename.edinterval.text msgctxt "TFRMMULTIRENAME.EDINTERVAL.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.edpoc.text msgctxt "TFRMMULTIRENAME.EDPOC.TEXT" msgid "1" msgstr "1" #: tfrmmultirename.extension.caption msgid "[E] Extension" msgstr "[E] &Type" #: tfrmmultirename.gbcounter.caption msgid "Counter" msgstr "Definer tæller [C]" #: tfrmmultirename.gbfindreplace.caption msgid "Find && Replace" msgstr "Søg && erstat" #: tfrmmultirename.gblog.caption msgid "Log Result" msgstr "Log-resultat" #: tfrmmultirename.gbmaska.caption msgid "Mask" msgstr "Omdøb maske" #: tfrmmultirename.gbpresets.caption msgid "Presets" msgstr "Forvalg" #: tfrmmultirename.lbext.caption msgid "&Extension" msgstr "Fil&type" #: tfrmmultirename.lbfind.caption msgid "&Find..." msgstr "Sø&g efter:" #: tfrmmultirename.lbinterval.caption msgid "&Interval" msgstr "St&ep:" #: tfrmmultirename.lbname.caption msgid "File &Name" msgstr "Fil&navn" #: tfrmmultirename.lbreplace.caption msgid "Re&place..." msgstr "Erstat &med:" #: tfrmmultirename.lbstnb.caption msgid "S&tart Number" msgstr "Start &ved:" #: tfrmmultirename.lbwidth.caption msgctxt "TFRMMULTIRENAME.LBWIDTH.CAPTION" msgid "&Width" msgstr "&Cifre:" #: tfrmmultirename.micounter.caption msgid "[C] Counter" msgstr "[C] T&æller" #: tfrmmultirename.miday.caption msgid "[D] Day" msgstr "[D] Dag" #: tfrmmultirename.miday1.caption msgid "[DD] Day (2 digits)" msgstr "[DD] Dag (to cifre)" #: tfrmmultirename.miday2.caption msgid "[DDD] Day of the week (short, e.g., \"mon\")" msgstr "[DDD] Ugedag (kort, f.eks. \"man\")" #: tfrmmultirename.miday3.caption msgid "[DDDD] Day of the week (long, e.g., \"monday\")" msgstr "[DDDD] Ugedag (lang, f.eks. mandag\")" #: tfrmmultirename.miextensionx.caption msgid "[Ex] Character at position x" msgstr "[Ex] Tegn ved position x" #: tfrmmultirename.miextensionxx.caption msgid "[Ex:y] Characters from position x to y" msgstr "[Ex:y] Tegn fra position x til y" #: tfrmmultirename.mihour.caption msgid "[h] Hour" msgstr "[h] Time" #: tfrmmultirename.mihour1.caption msgid "[hh] Hour (2 digits)" msgstr "[hh] Time (to cifre)" #: tfrmmultirename.miminute.caption msgid "[n] Minute" msgstr "[n] Minut" #: tfrmmultirename.miminute1.caption msgid "[nn] Minute (2 digits)" msgstr "[nn] Minut (to cifre)" #: tfrmmultirename.mimonth.caption msgid "[M] Month" msgstr "[M] Måned" #: tfrmmultirename.mimonth1.caption msgid "[MM] Month (2 digits)" msgstr "[MM] Måned (to cifre)" #: tfrmmultirename.mimonth2.caption msgid "[MMM] Month name (short, e.g., \"jan\")" msgstr "[MMM] Månedsnavn (kort, f.eks. \"jan\")" #: tfrmmultirename.mimonth3.caption msgid "[MMMM] Month name (long, e.g., \"january\")" msgstr "[MMMM] Månedsnavn (langt, f.eks. januar\")" #: tfrmmultirename.miname.caption msgid "[N] Name" msgstr "[N] Navn" #: tfrmmultirename.minamex.caption msgid "[Nx] Character at position x" msgstr "[Nx] Tegn ved position x" #: tfrmmultirename.minamexx.caption msgid "[Nx:y] Characters from position x to y" msgstr "[Nx:y] Tegn fra position x til y" #: tfrmmultirename.minext.caption msgid "Time..." msgstr "Tid..." #: tfrmmultirename.minextextension.caption msgid "Extension..." msgstr "Type..." #: tfrmmultirename.minextname.caption msgid "Name..." msgstr "Navn..." #: tfrmmultirename.miplugin.caption msgctxt "TFRMMULTIRENAME.MIPLUGIN.CAPTION" msgid "Plugin" msgstr "Plugin" #: tfrmmultirename.misecond.caption msgid "[s] Second" msgstr "[s] Sekund" #: tfrmmultirename.misecond1.caption msgid "[ss] Second (2 digits)" msgstr "[ss] Sekund (to cifre)" #: tfrmmultirename.miyear.caption msgid "[Y] Year (2 digits)" msgstr "[Y] År (to cifre)" #: tfrmmultirename.miyear1.caption msgid "[YYYY] Year (4 digits)" msgstr "[YYYY] År (fire cifre)" #: tfrmmultirename.n1.caption msgctxt "TFRMMULTIRENAME.N1.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n2.caption msgctxt "TFRMMULTIRENAME.N2.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n3.caption msgctxt "TFRMMULTIRENAME.N3.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n4.caption msgctxt "TFRMMULTIRENAME.N4.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.n5.caption msgctxt "TFRMMULTIRENAME.N5.CAPTION" msgid "-" msgstr "-" #: tfrmmultirename.stringgrid.columns[0].title.caption msgctxt "tfrmmultirename.stringgrid.columns[0].title.caption" msgid "Old File Name" msgstr "Gammelt navn" #: tfrmmultirename.stringgrid.columns[1].title.caption msgctxt "tfrmmultirename.stringgrid.columns[1].title.caption" msgid "New File Name" msgstr "Nyt navn" #: tfrmmultirename.stringgrid.columns[2].title.caption msgctxt "tfrmmultirename.stringgrid.columns[2].title.caption" msgid "File Path" msgstr "Placering" #: tfrmopenwith.caption msgid "Choose an application" msgstr "Åbn med" #: tfrmopenwith.chkcustomcommand.caption msgid "Custom command" msgstr "Brugerdefineret kommando" #: tfrmopenwith.chksaveassociation.caption msgid "Save association" msgstr "Gem association" #: tfrmopenwith.chkuseasdefault.caption msgid "Set selected application as default action" msgstr "Brug altid det valgte program til at åbne denne type fil" #: tfrmopenwith.lblmimetype.caption msgid "File type to be opened: %s" msgstr "Filtype som skal åbnes: %s" #: tfrmopenwith.milistoffiles.caption msgid "Multiple file names" msgstr "Flere filnavne" #: tfrmopenwith.milistoffiles.hint msgid "%F" msgstr "" #: tfrmopenwith.milistofurls.caption msgid "Multiple URIs" msgstr "Flere URL'er" #: tfrmopenwith.milistofurls.hint msgid "%U" msgstr "" #: tfrmopenwith.misinglefilename.caption msgid "Single file name" msgstr "Enkelt filnavn" #: tfrmopenwith.misinglefilename.hint msgid "%f" msgstr "" #: tfrmopenwith.misingleurl.caption msgid "Single URI" msgstr "Enkelt URL" #: tfrmopenwith.misingleurl.hint msgid "%u" msgstr "" #: tfrmoptions.btnapply.caption msgctxt "TFRMOPTIONS.BTNAPPLY.CAPTION" msgid "&Apply" msgstr "&Udfør" #: tfrmoptions.btncancel.caption msgctxt "TFRMOPTIONS.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmoptions.btnok.caption msgctxt "TFRMOPTIONS.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmoptions.caption msgctxt "tfrmoptions.caption" msgid "Options" msgstr "Indstillinger" #: tfrmoptions.lblemptyeditor.caption msgid "Please select one of the subpages, this page does not contain any settings." msgstr "Vælg venligst en af undersiderne. Denne side indeholder ingen indstillinger." #: tfrmoptionsarchivers.btnautoconfig.caption msgctxt "TFRMOPTIONSARCHIVERS.BTNAUTOCONFIG.CAPTION" msgid "A&uto Configure" msgstr "A&uto-konfiguration" #: tfrmoptionsarchivers.btnmultiarcadd.caption msgctxt "tfrmoptionsarchivers.btnmultiarcadd.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsarchivers.btnmultiarcapply.caption msgctxt "tfrmoptionsarchivers.btnmultiarcapply.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsarchivers.btnmultiarcdelete.caption msgctxt "tfrmoptionsarchivers.btnmultiarcdelete.caption" msgid "D&elete" msgstr "Sl&et" #: tfrmoptionsarchivers.btnmultiarcrename.caption msgctxt "tfrmoptionsarchivers.btnmultiarcrename.caption" msgid "&Rename" msgstr "&Start!" #: tfrmoptionsarchivers.btnrelativearchiver.hint #, fuzzy msgctxt "tfrmoptionsarchivers.btnrelativearchiver.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsarchivers.chkmultiarcdebug.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCDEBUG.CAPTION" msgid "De&bug mode" msgstr "Fejlretningstilstand" #: tfrmoptionsarchivers.chkmultiarcenabled.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCENABLED.CAPTION" msgid "E&nabled" msgstr "Aktiveret" #: tfrmoptionsarchivers.chkmultiarcoutput.caption msgctxt "TFRMOPTIONSARCHIVERS.CHKMULTIARCOUTPUT.CAPTION" msgid "S&how console output" msgstr "Vi&s konsollens output" #: tfrmoptionsarchivers.gbarchiveroptions.caption msgctxt "tfrmoptionsarchivers.gbarchiveroptions.caption" msgid "Options" msgstr "Indstillinger" #: tfrmoptionsarchivers.lblarchiveadd.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEADD.CAPTION" msgid "Add&ing:" msgstr "Tilføjer:" #: tfrmoptionsarchivers.lblarchiveextension.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTENSION.CAPTION" msgid "E&xtension:" msgstr "Type:" #: tfrmoptionsarchivers.lblarchiveextract.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVEEXTRACT.CAPTION" msgid "Ex&tract:" msgstr "Udpak:" #: tfrmoptionsarchivers.lblarchivelist.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELIST.CAPTION" msgid "&List:" msgstr "Op&liste:" #: tfrmoptionsarchivers.lblarchivelistend.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTEND.CAPTION" msgid "Listing &finish (optional):" msgstr "Oplistnings-afslutning (valgfrit):" #: tfrmoptionsarchivers.lblarchivelistformat.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTFORMAT.CAPTION" msgid "Listing for&mat:" msgstr "Oplistnings-format:" #: tfrmoptionsarchivers.lblarchiveliststart.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVELISTSTART.CAPTION" msgid "Listin&g start (optional):" msgstr "Oplistnings-begyndelse (valgfrit):" #: tfrmoptionsarchivers.lblarchiver.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLARCHIVER.CAPTION" msgid "Arc&hiver:" msgstr "Pakkeprogram:" #: tfrmoptionsarchivers.lbldescription.caption msgctxt "TFRMOPTIONSARCHIVERS.LBLDESCRIPTION.CAPTION" msgid "De&scription:" msgstr "Be&skrivelse:" #: tfrmoptionsarchivers.tbarchiveradditional.caption msgctxt "tfrmoptionsarchivers.tbarchiveradditional.caption" msgid "Additional" msgstr "Ekstra" #: tfrmoptionsarchivers.tbarchivergeneral.caption msgctxt "tfrmoptionsarchivers.tbarchivergeneral.caption" msgid "General" msgstr "Generelt" #: tfrmoptionsautorefresh.cbwatchattributeschange.caption msgctxt "tfrmoptionsautorefresh.cbwatchattributeschange.caption" msgid "When &size, date or attributes change" msgstr "Når størrelse, dato/tid eller attributter &ændres" #: tfrmoptionsautorefresh.cbwatchexcludedirs.caption msgctxt "tfrmoptionsautorefresh.cbwatchexcludedirs.caption" msgid "For the following &paths and their subdirectories:" msgstr "For de følgende &stier og deres undermapper:" #: tfrmoptionsautorefresh.cbwatchfilenamechange.caption msgctxt "TFRMOPTIONSAUTOREFRESH.CBWATCHFILENAMECHANGE.CAPTION" msgid "When &files are created, deleted or renamed" msgstr "N&år filer oprettes, slettes eller omdøbes " #: tfrmoptionsautorefresh.cbwatchonlyforeground.caption msgctxt "tfrmoptionsautorefresh.cbwatchonlyforeground.caption" msgid "When application is in the &background" msgstr "Når &Double Commander er i baggrunden" #: tfrmoptionsautorefresh.gbautorefreshdisable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshdisable.caption" msgid "Disable auto-refresh" msgstr "Slå automatisk opdatering fra" #: tfrmoptionsautorefresh.gbautorefreshenable.caption msgctxt "tfrmoptionsautorefresh.gbautorefreshenable.caption" msgid "Refresh file list" msgstr "Automatisk opdatering ved ændringer i filsystemet" #: tfrmoptionsbehavior.cbalwaysshowtrayicon.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBALWAYSSHOWTRAYICON.CAPTION" msgid "Al&ways show tray icon" msgstr "&Vis altid ikon i systembakke" #: tfrmoptionsbehavior.cbblacklistunmounteddevices.caption msgid "Automatically &hide unmounted devices" msgstr "Skjul automatisk enheder, der ikke længere er monteret (Linux: Unmounted)" #: tfrmoptionsbehavior.cbminimizetotray.caption msgctxt "tfrmoptionsbehavior.cbminimizetotray.caption" msgid "Mo&ve icon to system tray when minimized" msgstr "Flyt iko&n til systembakke, når minimeret" #: tfrmoptionsbehavior.cbonlyonce.caption msgctxt "TFRMOPTIONSBEHAVIOR.CBONLYONCE.CAPTION" msgid "A&llow only one copy of DC at a time" msgstr "&Tillad kun en kopi af Double Commander ad gangen" #: tfrmoptionsbehavior.edtdrivesblacklist.hint msgid "Here you can enter one or more drives or mount points, separated by \";\"." msgstr "Her kan du indtaste et eller flere drev eller mount-points, adskilt med \";\"." #: tfrmoptionsbehavior.lbldrivesblacklist.caption msgid "Drives &blacklist" msgstr "Sortlist følgende drev:" #: tfrmoptionsbriefview.gbcolumns.caption msgid "Columns size" msgstr "" #: tfrmoptionsbriefview.gbshowfileext.caption msgid "Show file extensions" msgstr "Vis filendelser" #: tfrmoptionsbriefview.rbaligned.caption msgid "ali&gned (with Tab)" msgstr "Justeret (med Tab)" #: tfrmoptionsbriefview.rbdirectly.caption msgid "di&rectly after filename" msgstr "Umiddelbart efter filnavn" #: tfrmoptionsbriefview.rbuseautosize.caption msgid "Auto" msgstr "" #: tfrmoptionsbriefview.rbusefixedcount.caption msgid "Fixed columns count" msgstr "" #: tfrmoptionsbriefview.rbusefixedwidth.caption msgid "Fixed columns width" msgstr "" #: tfrmoptionscolumnsview.cbcuttexttocolwidth.caption msgid "Cut &text to column width" msgstr "&Tilpas tekst til kolonnebredde" #: tfrmoptionscolumnsview.cbgridhorzline.caption msgid "&Horizontal lines" msgstr "&Horisontale linjer" #: tfrmoptionscolumnsview.cbgridvertline.caption msgid "&Vertical lines" msgstr "&Vertikale linjer" #: tfrmoptionscolumnsview.chkautofillcolumns.caption msgid "A&uto fill columns" msgstr "A&uto-fyld kolonner" #: tfrmoptionscolumnsview.gbshowgrid.caption msgid "Show grid" msgstr "Vis gitter i panel" #: tfrmoptionscolumnsview.grpautosizecolumns.caption msgid "Auto-size columns" msgstr "Indstil kolonnestørrelsen automatisk" #: tfrmoptionscolumnsview.lblautosizecolumn.caption msgid "Auto si&ze column:" msgstr "Indstil kolonnestørrelsen automatisk:" #: tfrmoptionsconfiguration.btnconfigapply.caption msgctxt "tfrmoptionsconfiguration.btnconfigapply.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsconfiguration.btnconfigedit.caption msgctxt "tfrmoptionsconfiguration.btnconfigedit.caption" msgid "&Edit" msgstr "&Rediger" #: tfrmoptionsconfiguration.cbcmdlinehistory.caption msgid "Co&mmand line history" msgstr "&Gamle kommandolinjer" #: tfrmoptionsconfiguration.cbdirhistory.caption msgctxt "TFRMOPTIONSCONFIGURATION.CBDIRHISTORY.CAPTION" msgid "&Directory history" msgstr "Mappehistorik" #: tfrmoptionsconfiguration.cbfilemaskhistory.caption msgid "&File mask history" msgstr "Søge&filterets historik" #: tfrmoptionsconfiguration.chksaveconfiguration.caption msgid "Sa&ve configuration" msgstr "Indstillinger" #: tfrmoptionsconfiguration.chksearchreplacehistory.caption msgid "Searc&h/Replace history" msgstr "Søg/erstat historik" #: tfrmoptionsconfiguration.gblocconfigfiles.caption msgid "Location of configuration files" msgstr "Placering af konfigurationsfiler" #: tfrmoptionsconfiguration.gbsaveonexit.caption msgid "Save on exit" msgstr "Gem ved afslut" #: tfrmoptionsconfiguration.gbsortorderconfigurationoption.caption msgid "Sort order of configuration order in left tree" msgstr "Sorteringsrækkefølge af konfigurationsrækkefølgen i venstre træ" #: tfrmoptionsconfiguration.lblcmdlineconfigdir.caption msgid "Set on command line" msgstr "Angiv i kommandolinje" #: tfrmoptionsconfiguration.rbprogramdir.caption msgid "P&rogram directory (portable version)" msgstr "P&rogrammappe (transportabel version)" #: tfrmoptionsconfiguration.rbuserhomedir.caption msgid "&User home directory" msgstr "Br&ugermappe" #: tfrmoptionscustomcolumns.btnallallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnallallowovercolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnallbackcolor2.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallcursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallcursortext.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnallcursortext.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallfont.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallfont.hint msgctxt "tfrmoptionscustomcolumns.btnallfont.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallforecolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnallforecolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivecursorcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallinactivemarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnallmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnallmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnallmarkcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinactiveselcolor.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.caption" msgid "All" msgstr "Alle" #: tfrmoptionscustomcolumns.btnalluseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnalluseinvertedselection.hint" msgid "Apply modification to all columns" msgstr "" #: tfrmoptionscustomcolumns.btnbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btncursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btndeleteconfigcolumns.caption" msgid "&Delete" msgstr "&Slet" #: tfrmoptionscustomcolumns.btnfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnfont.caption" msgid "..." msgstr "..." #: tfrmoptionscustomcolumns.btnforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btngotosetdefault.caption msgid "Go to set default" msgstr "" #: tfrmoptionscustomcolumns.btngotosetdefault.hint msgctxt "tfrmoptionscustomcolumns.btngotosetdefault.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionscustomcolumns.btnnewconfig.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnnewconfig.caption" msgid "New" msgstr "Ny" #: tfrmoptionscustomcolumns.btnnext.caption msgid "Next" msgstr "" #: tfrmoptionscustomcolumns.btnprev.caption msgid "Previous" msgstr "" #: tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnrenameconfigcolumns.caption" msgid "Rename" msgstr "Omdøb" #: tfrmoptionscustomcolumns.btnresetallowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetallowovercolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetallowovercolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetbackcolor2.hint msgctxt "tfrmoptionscustomcolumns.btnresetbackcolor2.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorborder.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorborder.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetcursortext.hint msgctxt "tfrmoptionscustomcolumns.btnresetcursortext.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetfont.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetfont.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetfont.hint msgctxt "tfrmoptionscustomcolumns.btnresetfont.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetforecolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetforecolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetframecursor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetframecursor.hint msgctxt "tfrmoptionscustomcolumns.btnresetframecursor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivecursorcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetinactivemarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetmarkcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetmarkcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinactiveselcolor.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.caption" msgid "R" msgstr "R" #: tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint msgctxt "tfrmoptionscustomcolumns.btnresetuseinvertedselection.hint" msgid "Reset to default" msgstr "" #: tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveasconfigcolumns.caption" msgid "Save as" msgstr "Gem som" #: tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.btnsaveconfigcolumns.caption" msgid "Save" msgstr "&Gem" #: tfrmoptionscustomcolumns.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" #: tfrmoptionscustomcolumns.cbapplychangeforallcolumns.caption msgid "When clicking to change something, change for all columns" msgstr "" #: tfrmoptionscustomcolumns.cbconfigcolumns.text #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbconfigcolumns.text" msgid "General" msgstr "Generelt" #: tfrmoptionscustomcolumns.cbcursorborder.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.cbcursorborder.caption" msgid "Cursor border" msgstr "Markør-grænser" #: tfrmoptionscustomcolumns.cbuseframecursor.caption msgid "Use Frame Cursor" msgstr "" #: tfrmoptionscustomcolumns.cbuseinactiveselcolor.caption msgid "Use Inactive Selection Color" msgstr "" #: tfrmoptionscustomcolumns.cbuseinvertedselection.caption msgid "Use Inverted Selection" msgstr "" #: tfrmoptionscustomcolumns.chkusecustomview.caption msgid "Use custom font and color for this view" msgstr "" #: tfrmoptionscustomcolumns.lblbackcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor.caption" msgid "BackGround:" msgstr "&Baggrund:" #: tfrmoptionscustomcolumns.lblbackcolor2.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblbackcolor2.caption" msgid "Background 2:" msgstr "Baggrund &2:" #: tfrmoptionscustomcolumns.lblconfigcolumns.caption #, fuzzy #| msgid "Con&figure columns for file system:" msgid "Con&figure columns view:" msgstr "Konfigurer visninger for &filsystem:" #: tfrmoptionscustomcolumns.lblcurrentcolumn.caption msgid "[Current Column Name]" msgstr "" #: tfrmoptionscustomcolumns.lblcursorcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursorcolor.caption" msgid "Cursor Color:" msgstr "&Markørfarve:" #: tfrmoptionscustomcolumns.lblcursortext.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblcursortext.caption" msgid "Cursor Text:" msgstr "Mar&kørskrift:" #: tfrmoptionscustomcolumns.lblfontname.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontname.caption" msgid "Font:" msgstr "Skrifttype" #: tfrmoptionscustomcolumns.lblfontsize.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblfontsize.caption" msgid "Size:" msgstr "Størrelse" #: tfrmoptionscustomcolumns.lblforecolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblforecolor.caption" msgid "Text Color:" msgstr "&Skriftfarve:" #: tfrmoptionscustomcolumns.lblinactivecursorcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionscustomcolumns.lblinactivemarkcolor.caption msgctxt "tfrmoptionscustomcolumns.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionscustomcolumns.lblmarkcolor.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.lblmarkcolor.caption" msgid "Mark Color:" msgstr "&Valgt farve:" #: tfrmoptionscustomcolumns.lblpreviewtop.caption msgctxt "tfrmoptionscustomcolumns.lblpreviewtop.caption" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionscustomcolumns.lblworkingcolumn.caption msgid "Settings for column:" msgstr "" #: tfrmoptionscustomcolumns.miaddcolumn.caption #, fuzzy msgctxt "tfrmoptionscustomcolumns.miaddcolumn.caption" msgid "Add column" msgstr "Tilføj kolonne" #: tfrmoptionsdiffer.rgresultingframepositionaftercompare.caption msgid "Position of frame panel after the comparison:" msgstr "Vinduets position efter sammenligning" #: tfrmoptionsdirectoryhotlist.btnadd.caption msgctxt "tfrmoptionsdirectoryhotlist.btnadd.caption" msgid "Add..." msgstr "Tilføj..." #: tfrmoptionsdirectoryhotlist.btnbackup.caption msgctxt "tfrmoptionsdirectoryhotlist.btnbackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionsdirectoryhotlist.btndelete.caption msgctxt "tfrmoptionsdirectoryhotlist.btndelete.caption" msgid "Delete..." msgstr "Slet..." #: tfrmoptionsdirectoryhotlist.btnexport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionsdirectoryhotlist.btnhelp.caption msgctxt "tfrmoptionsdirectoryhotlist.btnhelp.caption" msgid "Help" msgstr "Hjælp" #: tfrmoptionsdirectoryhotlist.btnimport.caption msgctxt "tfrmoptionsdirectoryhotlist.btnimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionsdirectoryhotlist.btninsert.caption msgctxt "tfrmoptionsdirectoryhotlist.btninsert.caption" msgid "Insert..." msgstr "Sæt ind..." #: tfrmoptionsdirectoryhotlist.btnmiscellaneous.caption msgid "Miscellaneous..." msgstr "Forskelligt..." #: tfrmoptionsdirectoryhotlist.btnrelativepath.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVEPATH.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsdirectoryhotlist.btnrelativetarget.hint msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.BTNRELATIVETARGET.HINT" msgid "Some functions to select appropriate target" msgstr "Nogle funktioner til at vælge egnet destination" #: tfrmoptionsdirectoryhotlist.btnsort.caption msgctxt "tfrmoptionsdirectoryhotlist.btnsort.caption" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsdirectoryhotlist.cbaddtarget.caption msgid "When adding directory, add also target" msgstr "Tilføj også destination, når mappe tilføjes" #: tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption msgctxt "tfrmoptionsdirectoryhotlist.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Udvid altid træ" #: tfrmoptionsdirectoryhotlist.cbshowonlyvalidenv.caption msgid "Show only valid environment variables" msgstr "Vis kun gyldige miljøvariabler" #: tfrmoptionsdirectoryhotlist.cbshowpathinpopup.caption msgid "In popup, show [path also]" msgstr "I popup vis [også sti]" #: tfrmoptionsdirectoryhotlist.cbsorthotdirpath.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRPATH.TEXT" msgid "Name, a-z" msgstr "Navn, a-å" #: tfrmoptionsdirectoryhotlist.cbsorthotdirtarget.text msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.CBSORTHOTDIRTARGET.TEXT" msgid "Name, a-z" msgstr "Navn, a-å" #: tfrmoptionsdirectoryhotlist.gbdirectoryhotlist.caption msgid "Directory Hotlist (reorder by drag && drop)" msgstr "Favoritmappe (omsorteret med træk && slip)" #: tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption msgctxt "tfrmoptionsdirectoryhotlist.gbhotlistotheroptions.caption" msgid "Other options" msgstr "Andre indstillinger" #: tfrmoptionsdirectoryhotlist.lbledithotdirname.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRNAME.EDITLABEL.CAPTION" msgid "Name:" msgstr "Navn:" #: tfrmoptionsdirectoryhotlist.lbledithotdirpath.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRPATH.EDITLABEL.CAPTION" msgid "Path:" msgstr "Sti:" #: tfrmoptionsdirectoryhotlist.lbledithotdirtarget.editlabel.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.LBLEDITHOTDIRTARGET.EDITLABEL.CAPTION" msgid "Target:" msgstr "Destination:" #: tfrmoptionsdirectoryhotlist.miactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEFRAMEDIRECTORY.CAPTION" msgid "directory of the active frame" msgstr "det aktive vindues mappe" #: tfrmoptionsdirectoryhotlist.miactiveinactiveframedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIACTIVEINACTIVEFRAMEDIRECTORY.CAPTION" msgid "directories of the active && inactive frames" msgstr "det aktive && inaktive vindues mapper" #: tfrmoptionsdirectoryhotlist.miaddcommand.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND.CAPTION" msgid "a command" msgstr "en kommando" #: tfrmoptionsdirectoryhotlist.miaddcommand2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOMMAND2.CAPTION" msgid "Add a command" msgstr "Tilføj en kommando" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED.CAPTION" msgid "a copy of the selected entry" msgstr "en kopi af den valgte postering" #: tfrmoptionsdirectoryhotlist.miaddcopyofselected2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDCOPYOFSELECTED2.CAPTION" msgid "Add a copy of the selected entry" msgstr "Tilføj en kopi af den valgte postering" #: tfrmoptionsdirectoryhotlist.miaddseparator.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR.CAPTION" msgid "a separator" msgstr "en separator" #: tfrmoptionsdirectoryhotlist.miaddseparator2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSEPARATOR2.CAPTION" msgid "Add a separator" msgstr "Tilføj en separator" #: tfrmoptionsdirectoryhotlist.miaddsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU.CAPTION" msgid "sub-menu" msgstr "en undermenu" #: tfrmoptionsdirectoryhotlist.miaddsubmenu2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIADDSUBMENU2.CAPTION" msgid "Add sub-menu" msgstr "Tilføj en undermenu" #: tfrmoptionsdirectoryhotlist.mibrowsetodirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIBROWSETODIRECTORY.CAPTION" msgid "directory I will browse to" msgstr "en mappe, som jeg browser til" #: tfrmoptionsdirectoryhotlist.micollapseall.caption msgctxt "tfrmoptionsdirectoryhotlist.micollapseall.caption" msgid "Collapse all" msgstr "Sammenfold alle" #: tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption msgctxt "tfrmoptionsdirectoryhotlist.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...kun det aktuelle niveau af valgte element(er)" #: tfrmoptionsdirectoryhotlist.micurrentselectedoractivedirectories.caption msgid "current selected or active directories of active frame" msgstr "aktuelt valgte eller aktive mapper af aktivt vindue" #: tfrmoptionsdirectoryhotlist.micutselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MICUTSELECTION.CAPTION" msgid "Cut" msgstr "Klip" #: tfrmoptionsdirectoryhotlist.mideleteallhotdirs.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEALLHOTDIRS.CAPTION" msgid "delete all!" msgstr "slet alle" #: tfrmoptionsdirectoryhotlist.mideletecompletesubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETECOMPLETESUBMENU.CAPTION" msgid "sub-menu and all its elements" msgstr "undermenu og alle dets elementer" #: tfrmoptionsdirectoryhotlist.mideletejustsubmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETEJUSTSUBMENU.CAPTION" msgid "just sub-menu but keep elements" msgstr "kun undermenu men behold element(er)" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY.CAPTION" msgid "selected item" msgstr "valgte element" #: tfrmoptionsdirectoryhotlist.mideleteselectedentry2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDELETESELECTEDENTRY2.CAPTION" msgid "Delete selected item" msgstr "Slet valgte elementer" #: tfrmoptionsdirectoryhotlist.midetectifpathexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHEXIST.CAPTION" msgid "Scan all hotdir's path to validate the ones that actually exist" msgstr "Skan alle favoritmappers sti for at validere, dem som reelt findes" #: tfrmoptionsdirectoryhotlist.midetectifpathtargetexist.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIDETECTIFPATHTARGETEXIST.CAPTION" msgid "Scan all hotdir's path && target to validate the ones that actually exist" msgstr "Skan alle favoritmappers sti && destination for at validere, dem som reelt findes" #: tfrmoptionsdirectoryhotlist.miexporttohotlistfile.caption msgid "to a Directory Hotlist file (.hotlist)" msgstr "til en favoritmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommanderk.caption" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini\" i TC (beholder eksisterende)" #: tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption msgctxt "tfrmoptionsdirectoryhotlist.miexporttototalcommandernk.caption" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption msgctxt "tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo1.caption" msgid "Go to configure TC related info" msgstr "Gå til konfigurer TC-relateret information" #: tfrmoptionsdirectoryhotlist.migotoconfiguretcinfo2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIGOTOCONFIGURETCINFO2.CAPTION" msgid "Go to configure TC related info" msgstr "Gå til konfigurer TC-relateret information" #: tfrmoptionsdirectoryhotlist.mihotdirtestmenu.caption msgid "HotDirTestMenu" msgstr "Favoritmappe-testmenu" #: tfrmoptionsdirectoryhotlist.miimportfromhotlistfile.caption msgid "from a Directory Hotlist file (.hotlist)" msgstr "fra en favoritmappe-fil (.hotlist)" #: tfrmoptionsdirectoryhotlist.miimporttotalcommander.caption msgid "from \"wincmd.ini\" of TC" msgstr "fra \"wincmd.ini\" i TC" #: tfrmoptionsdirectoryhotlist.miopenallbranches.caption msgctxt "tfrmoptionsdirectoryhotlist.miopenallbranches.caption" msgid "Open all branches" msgstr "Åbn alle grene" #: tfrmoptionsdirectoryhotlist.mipasteselection.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MIPASTESELECTION.CAPTION" msgid "Paste" msgstr "Sæt ind" #: tfrmoptionsdirectoryhotlist.mirestorebackuphotlist.caption msgid "Restore a backup of Directory Hotlist" msgstr "Gendan en backup af en favoritmappe" #: tfrmoptionsdirectoryhotlist.misavebackuphotlist.caption msgid "Save a backup of current Directory Hotlist" msgstr "Gem en backup af den aktuelle favoritmappe" #: tfrmoptionsdirectoryhotlist.misearchandreplace.caption msgctxt "tfrmoptionsdirectoryhotlist.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceinpath.caption msgid "in path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchandreplaceintargetpath.caption msgid "in target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.misearchinreplaceinbothpaths.caption msgid "in path and target path..." msgstr "" #: tfrmoptionsdirectoryhotlist.miseparator1.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator10.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator11.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator12.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator12.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator13.caption #, fuzzy msgctxt "tfrmoptionsdirectoryhotlist.miseparator13.caption" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator2.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator3.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator4.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator5.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR5.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator6.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator7.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator8.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.miseparator9.caption #, fuzzy msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionsdirectoryhotlist.misorteverything.caption msgctxt "tfrmoptionsdirectoryhotlist.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...alt, fra A til Å" #: tfrmoptionsdirectoryhotlist.misortsinglegroup.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...kun en gruppe af element(er)" #: tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sorter kun en gruppe af elemet(er)" #: tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" #: tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption msgctxt "tfrmoptionsdirectoryhotlist.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...indhold af undermenu(er) valgt og alle underniveauer" #: tfrmoptionsdirectoryhotlist.mitestresultinghotlistmenu.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITESTRESULTINGHOTLISTMENU.CAPTION" msgid "Test resulting menu" msgstr "Menu af testresultat" #: tfrmoptionsdirectoryhotlist.mitypethedirectory.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY.CAPTION" msgid "directory I will type" msgstr "en mappe jeg vil indtaste" #: tfrmoptionsdirectoryhotlist.mitypethedirectory2.caption msgctxt "TFRMOPTIONSDIRECTORYHOTLIST.MITYPETHEDIRECTORY2.CAPTION" msgid "Add directory I will type" msgstr "Tilføj mappe, som jeg indtaster" #: tfrmoptionsdirectoryhotlist.mitypethedirectory3.caption msgid "Insert directory I will type" msgstr "Indsæt mappe, som jeg indtaster" #: tfrmoptionsdirectoryhotlist.rgwheretoadd.caption msgid "Addition from main panel:" msgstr "Tilføjelse fra hovedvindue:" #: tfrmoptionsdragdrop.cbdraganddropaskformateachtime.caption msgid "From all the supported formats, ask which one to use every time" msgstr "Fra alle understøttede formater. Spørg altid, hvilket der skal anvendes" #: tfrmoptionsdragdrop.cbdraganddropsaveunicodetextinuft8.caption msgid "When saving Unicode text, save it in UTF8 format (will be UTF16 otherwise)" msgstr "Når Unicode-tekst skal gemmes, gem i UTF8-format (ellers bliver det som UTF16)" #: tfrmoptionsdragdrop.cbdraganddroptextautofilename.caption msgid "When dropping text, generate filename automatically (otherwise will prompt the user)" msgstr "Når tekst slippes, generer automatisk filnavn (ellers bliver brugeren sprugt)" #: tfrmoptionsdragdrop.cbshowconfirmationdialog.caption msgid "&Show confirmation dialog after drop" msgstr "Vi&s bekræftelse efter træk && slip" #: tfrmoptionsdragdrop.gbtextdraganddroprelatedoptions.caption msgid "When drag && dropping text into panels:" msgstr "Når træk && slip bruges:" #: tfrmoptionsdragdrop.lblmostdesiredtextformat1.caption msgid "Place the most desired format on top of list (use dag && drop):" msgstr "Placér det mest sandsynlige format i toppen af listen (brug træk && slip):" #: tfrmoptionsdragdrop.lblmostdesiredtextformat2.caption msgid "(if the most desired is not present, we'll take second one and so on)" msgstr "(hvis det mest sandsynlige ikke er til stede, tages det næstmestsandsynlige osv.)" #: tfrmoptionsdragdrop.lblwarningforaskformat.caption msgid "(will not work with some source application, so try to uncheck if problem)" msgstr "(virker ikke med alle kildeprogrammer. Prøv at løse problemet ved at fjerne markering" #: tfrmoptionsdriveslistbutton.cbshowfilesystem.caption msgid "Show &file system" msgstr "Vis &filsystem" #: tfrmoptionsdriveslistbutton.cbshowfreespace.caption msgid "Show fr&ee space" msgstr "Vis l&edig plads" #: tfrmoptionsdriveslistbutton.cbshowlabel.caption #, fuzzy msgctxt "tfrmoptionsdriveslistbutton.cbshowlabel.caption" msgid "Show &label" msgstr "Vis drevnavn" #: tfrmoptionsdriveslistbutton.gbdriveslist.caption msgid "Drives list" msgstr "Drev-valgboks" #: tfrmoptionseditor.chkscrollpastendline.caption msgid "Caret past end of line" msgstr "" #: tfrmoptionseditor.chkshowspecialchars.caption msgid "Show special characters" msgstr "" #: tfrmoptionseditor.gbinternaleditor.caption msgid "Internal editor options" msgstr "" #: tfrmoptionseditorcolors.backgroundlabel.caption msgctxt "tfrmoptionseditorcolors.backgroundlabel.caption" msgid "Bac&kground" msgstr "Baggrund:" #: tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.backgroundusedefaultcheckbox.caption" msgid "Bac&kground" msgstr "Bag&grund:" #: tfrmoptionseditorcolors.btnresetmask.hint msgid "Reset" msgstr "Nulstil" #: tfrmoptionseditorcolors.btnsavemask.hint msgctxt "TFRMOPTIONSEDITORCOLORS.BTNSAVEMASK.HINT" msgid "Save" msgstr "Gem" #: tfrmoptionseditorcolors.bvlattributesection.caption msgid "Element Attributes" msgstr "Elementets attributter" #: tfrmoptionseditorcolors.foregroundlabel.caption msgctxt "tfrmoptionseditorcolors.foregroundlabel.caption" msgid "Fo®round" msgstr "Fo&rgrund" #: tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption msgctxt "tfrmoptionseditorcolors.foregroundusedefaultcheckbox.caption" msgid "Fo®round" msgstr "Fo&rgrund:" #: tfrmoptionseditorcolors.framecolorusedefaultcheckbox.caption msgid "&Text-mark" msgstr "&Tekstmarkering" #: tfrmoptionseditorcolors.tbtnglobal.caption msgid "Use (and edit) &global scheme settings" msgstr "Brug (og rediger) &globale skemaindstillinger" #: tfrmoptionseditorcolors.tbtnlocal.caption msgid "Use &local scheme settings" msgstr "Brug &lokale skemaindstillinger" #: tfrmoptionseditorcolors.textboldcheckbox.caption msgctxt "tfrmoptionseditorcolors.textboldcheckbox.caption" msgid "&Bold" msgstr "Fed" #: tfrmoptionseditorcolors.textboldradioinvert.caption msgctxt "tfrmoptionseditorcolors.textboldradioinvert.caption" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textboldradiooff.caption msgctxt "tfrmoptionseditorcolors.textboldradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textboldradioon.caption msgctxt "tfrmoptionseditorcolors.textboldradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textitaliccheckbox.caption msgctxt "tfrmoptionseditorcolors.textitaliccheckbox.caption" msgid "&Italic" msgstr "Kurs&iv" #: tfrmoptionseditorcolors.textitalicradioinvert.caption msgctxt "tfrmoptionseditorcolors.textitalicradioinvert.caption" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textitalicradiooff.caption msgctxt "tfrmoptionseditorcolors.textitalicradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textitalicradioon.caption msgctxt "tfrmoptionseditorcolors.textitalicradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutcheckbox.caption msgid "&Strike Out" msgstr "Gennem&streget" #: tfrmoptionseditorcolors.textstrikeoutradioinvert.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioinvert.caption" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textstrikeoutradiooff.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textstrikeoutradioon.caption msgctxt "tfrmoptionseditorcolors.textstrikeoutradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionseditorcolors.textunderlinecheckbox.caption msgctxt "tfrmoptionseditorcolors.textunderlinecheckbox.caption" msgid "&Underline" msgstr "Understreget" #: tfrmoptionseditorcolors.textunderlineradioinvert.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioinvert.caption" msgid "In&vert" msgstr "In&verteret" #: tfrmoptionseditorcolors.textunderlineradiooff.caption msgctxt "tfrmoptionseditorcolors.textunderlineradiooff.caption" msgid "O&ff" msgstr "" #: tfrmoptionseditorcolors.textunderlineradioon.caption msgctxt "tfrmoptionseditorcolors.textunderlineradioon.caption" msgid "O&n" msgstr "" #: tfrmoptionsfavoritetabs.btnadd.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnadd.caption" msgid "Add..." msgstr "Tilføj..." #: tfrmoptionsfavoritetabs.btndelete.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btndelete.caption" msgid "Delete..." msgstr "Slet..." #: tfrmoptionsfavoritetabs.btnimportexport.caption msgid "Import/Export" msgstr "" #: tfrmoptionsfavoritetabs.btninsert.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btninsert.caption" msgid "Insert..." msgstr "Sæt ind..." #: tfrmoptionsfavoritetabs.btnrename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnrename.caption" msgid "Rename" msgstr "Omdøb" #: tfrmoptionsfavoritetabs.btnsort.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.btnsort.caption" msgid "Sort..." msgstr "Sortering..." #: tfrmoptionsfavoritetabs.cbexistingtabstokeep.text msgctxt "tfrmoptionsfavoritetabs.cbexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionsfavoritetabs.cbfullexpandtree.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbfullexpandtree.caption" msgid "Always expand tree" msgstr "Udvid altid træ" #: tfrmoptionsfavoritetabs.cbsavedirhistory.text #, fuzzy msgctxt "tfrmoptionsfavoritetabs.cbsavedirhistory.text" msgid "No" msgstr "Nej" #: tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelleftsavedtabs.text" msgid "Left" msgstr "" #: tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text msgctxt "tfrmoptionsfavoritetabs.cbtargetpanelrightsavedtabs.text" msgid "Right" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabs.caption msgid "Favorite Tabs list (reorder by drag && drop)" msgstr "" #: tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.gbfavoritetabsotheroptions.caption" msgid "Other options" msgstr "Andre indstillinger" #: tfrmoptionsfavoritetabs.gpsavedtabsrestorationaction.caption msgid "What to restore where for the selected entry:" msgstr "" #: tfrmoptionsfavoritetabs.lblexistingtabstokeep.caption msgid "Existing tabs to keep:" msgstr "" #: tfrmoptionsfavoritetabs.lblsavedirhistory.caption msgid "Save dir history:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelleftsavedtabs.caption msgid "Tabs saved on left to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.lbltargetpanelrightsavedtabs.caption msgid "Tabs saved on right to be restored to:" msgstr "" #: tfrmoptionsfavoritetabs.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.menuitem2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.menuitem2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miaddseparator.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddseparator.caption" msgid "a separator" msgstr "en separator" #: tfrmoptionsfavoritetabs.miaddseparator2.caption msgid "Add separator" msgstr "" #: tfrmoptionsfavoritetabs.miaddsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu.caption" msgid "sub-menu" msgstr "en undermenu" #: tfrmoptionsfavoritetabs.miaddsubmenu2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miaddsubmenu2.caption" msgid "Add sub-menu" msgstr "Tilføj en undermenu" #: tfrmoptionsfavoritetabs.micollapseall.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micollapseall.caption" msgid "Collapse all" msgstr "Sammenfold alle" #: tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micurrentlevelofitemonly.caption" msgid "...current level of item(s) selected only" msgstr "...kun det aktuelle niveau af valgte element(er)" #: tfrmoptionsfavoritetabs.micutselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.micutselection.caption" msgid "Cut" msgstr "Klip" #: tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteallfavoritetabs.caption" msgid "delete all!" msgstr "slet alle" #: tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletecompletesubmenu.caption" msgid "sub-menu and all its elements" msgstr "undermenu og alle dets elementer" #: tfrmoptionsfavoritetabs.mideletejustsubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideletejustsubmenu.caption" msgid "just sub-menu but keep elements" msgstr "kun undermenu men behold element(er)" #: tfrmoptionsfavoritetabs.mideleteselectedentry.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry.caption" msgid "selected item" msgstr "valgte element" #: tfrmoptionsfavoritetabs.mideleteselectedentry2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mideleteselectedentry2.caption" msgid "Delete selected item" msgstr "Slet valgte elementer" #: tfrmoptionsfavoritetabs.miexporttolegacytabsfile.caption msgid "Export selection to legacy .tab file(s)" msgstr "" #: tfrmoptionsfavoritetabs.mifavoritetabstestmenu.caption msgid "FavoriteTabsTestMenu" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesaccsetting.caption msgid "Import legacy .tab file(s) according to default setting" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption msgctxt "tfrmoptionsfavoritetabs.miimportlegacytabfilesatpos1.caption" msgid "Import legacy .tab file(s) at selected position" msgstr "" #: tfrmoptionsfavoritetabs.miimportlegacytabfilesinsubatpos.caption msgid "Import legacy .tab file(s) at selected position in a sub menu" msgstr "" #: tfrmoptionsfavoritetabs.miinsertseparator.caption msgid "Insert separator" msgstr "" #: tfrmoptionsfavoritetabs.miinsertsubmenu.caption msgid "Insert sub-menu" msgstr "" #: tfrmoptionsfavoritetabs.miopenallbranches.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miopenallbranches.caption" msgid "Open all branches" msgstr "Åbn alle grene" #: tfrmoptionsfavoritetabs.mipasteselection.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mipasteselection.caption" msgid "Paste" msgstr "Sæt ind" #: tfrmoptionsfavoritetabs.mirename.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mirename.caption" msgid "Rename" msgstr "Omdøb" #: tfrmoptionsfavoritetabs.miseparator1.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator10.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator10.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator11.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator11.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator3.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator3.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator7.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator7.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator8.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator8.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.miseparator9.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.miseparator9.caption" msgid "-" msgstr "-" #: tfrmoptionsfavoritetabs.misorteverything.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misorteverything.caption" msgid "...everything, from A to Z!" msgstr "...alt, fra A til Å" #: tfrmoptionsfavoritetabs.misortsinglegroup.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup.caption" msgid "...single group of item(s) only" msgstr "...kun en gruppe af element(er)" #: tfrmoptionsfavoritetabs.misortsinglegroup2.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglegroup2.caption" msgid "Sort single group of item(s) only" msgstr "Sorter kun en gruppe af elemet(er)" #: tfrmoptionsfavoritetabs.misortsinglesubmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsinglesubmenu.caption" msgid "...content of submenu(s) selected, no sublevel" msgstr "...indhold af undermenu(er) valgt, ingen underniveauer" #: tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.misortsubmenuandsublevel.caption" msgid "...content of submenu(s) selected and all sublevels" msgstr "...indhold af undermenu(er) valgt og alle underniveauer" #: tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption #, fuzzy msgctxt "tfrmoptionsfavoritetabs.mitestresultingfavoritetabsmenu.caption" msgid "Test resulting menu" msgstr "Menu af testresultat" #: tfrmoptionsfileassoc.btnaddact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDACT.CAPTION" msgid "Add" msgstr "Tilføj" #: tfrmoptionsfileassoc.btnaddext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDEXT.CAPTION" msgid "&Add" msgstr "Tilføj" #: tfrmoptionsfileassoc.btnaddnewtype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNADDNEWTYPE.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsfileassoc.btncloneact.caption msgid "Clone" msgstr "" #: tfrmoptionsfileassoc.btndownact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNDOWNACT.CAPTION" msgid "&Down" msgstr "Ne&d" #: tfrmoptionsfileassoc.btneditext.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.btneditext.caption" msgid "Edit" msgstr "Rediger" #: tfrmoptionsfileassoc.btninsertact.caption msgctxt "tfrmoptionsfileassoc.btninsertact.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btninsertext.caption msgctxt "tfrmoptionsfileassoc.btninsertext.caption" msgid "Insert" msgstr "" #: tfrmoptionsfileassoc.btnremoveact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEACT.CAPTION" msgid "Remo&ve" msgstr "Fjern" #: tfrmoptionsfileassoc.btnremoveext.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVEEXT.CAPTION" msgid "Re&move" msgstr "Fjern" #: tfrmoptionsfileassoc.btnremovetype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNREMOVETYPE.CAPTION" msgid "&Remove" msgstr "Fjern" #: tfrmoptionsfileassoc.btnrenametype.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNRENAMETYPE.CAPTION" msgid "R&ename" msgstr "Omdøb" #: tfrmoptionsfileassoc.btnupact.caption msgctxt "TFRMOPTIONSFILEASSOC.BTNUPACT.CAPTION" msgid "&Up" msgstr "Op" #: tfrmoptionsfileassoc.destartpath.hint msgid "Starting path of the command. Never quote this string." msgstr "" #: tfrmoptionsfileassoc.edbactionname.hint msgid "Name of the action. It is never passed to the system, it's just a mnemonic name chosen by you, for you" msgstr "" #: tfrmoptionsfileassoc.edtparams.hint msgid "Parameter to pass to the command. Long filename with spaces should be quoted." msgstr "" #: tfrmoptionsfileassoc.fnecommand.hint msgid "Command to execute. Long filename with space should be quoted." msgstr "" #: tfrmoptionsfileassoc.gbactiondescription.caption msgid "Action description:" msgstr "" #: tfrmoptionsfileassoc.gbactions.caption msgctxt "TFRMOPTIONSFILEASSOC.GBACTIONS.CAPTION" msgid "Actions" msgstr "Handlinger" #: tfrmoptionsfileassoc.gbexts.caption msgctxt "TFRMOPTIONSFILEASSOC.GBEXTS.CAPTION" msgid "Extensions" msgstr "Filendelser" #: tfrmoptionsfileassoc.gbexts.hint msgid "Can be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.gbfiletypes.caption msgctxt "TFRMOPTIONSFILEASSOC.GBFILETYPES.CAPTION" msgid "File types" msgstr "Filtyper" #: tfrmoptionsfileassoc.gbicon.caption msgctxt "TFRMOPTIONSFILEASSOC.GBICON.CAPTION" msgid "Icon" msgstr "Ikon" #: tfrmoptionsfileassoc.lbactions.hint msgid "Actions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbexts.hint msgid "Extensions may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lbfiletypes.hint msgid "File types may be sorted by drag & drop" msgstr "" #: tfrmoptionsfileassoc.lblaction.caption #, fuzzy #| msgid "Action:" msgctxt "TFRMOPTIONSFILEASSOC.LBLACTION.CAPTION" msgid "Action name:" msgstr "Handling:" #: tfrmoptionsfileassoc.lblcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.LBLCOMMAND.CAPTION" msgid "&Command:" msgstr "Kommando:" #: tfrmoptionsfileassoc.lblexternalparameters.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblexternalparameters.caption" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionsfileassoc.lblexternalparameters1.caption msgid "Start path:" msgstr "" #: tfrmoptionsfileassoc.lblstartpath.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionsfileassoc.menuitem1.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.menuitem1.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.menuitem3.caption msgid "Custom with..." msgstr "" #: tfrmoptionsfileassoc.micustom.caption msgid "Custom" msgstr "" #: tfrmoptionsfileassoc.miedit.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDIT.CAPTION" msgid "Edit" msgstr "Redigér" #: tfrmoptionsfileassoc.mieditor.caption msgctxt "TFRMOPTIONSFILEASSOC.MIEDITOR.CAPTION" msgid "Open in Editor" msgstr "Åben i editor" #: tfrmoptionsfileassoc.mieditwith.caption msgid "Edit with..." msgstr "" #: tfrmoptionsfileassoc.migetoutputfromcommand.caption msgctxt "TFRMOPTIONSFILEASSOC.MIGETOUTPUTFROMCOMMAND.CAPTION" msgid "Get output from command" msgstr "Tag output fra kommando-prompt" #: tfrmoptionsfileassoc.miinternaleditor.caption msgid "Open in Internal Editor" msgstr "" #: tfrmoptionsfileassoc.miinternalviewer.caption msgid "Open in Internal Viewer" msgstr "" #: tfrmoptionsfileassoc.miopen.caption msgctxt "TFRMOPTIONSFILEASSOC.MIOPEN.CAPTION" msgid "Open" msgstr "Åbn" #: tfrmoptionsfileassoc.miopenwith.caption msgid "Open with..." msgstr "" #: tfrmoptionsfileassoc.miseparator.caption #, fuzzy msgctxt "tfrmoptionsfileassoc.miseparator.caption" msgid "-" msgstr "-" #: tfrmoptionsfileassoc.mishell.caption msgctxt "TFRMOPTIONSFILEASSOC.MISHELL.CAPTION" msgid "Run in terminal" msgstr "Kør i terminal" #: tfrmoptionsfileassoc.miview.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEW.CAPTION" msgid "View" msgstr "Vis" #: tfrmoptionsfileassoc.miviewer.caption msgctxt "TFRMOPTIONSFILEASSOC.MIVIEWER.CAPTION" msgid "Open in Viewer" msgstr "Åbn i fremviser" #: tfrmoptionsfileassoc.miviewwith.caption msgid "View with..." msgstr "" #: tfrmoptionsfileassoc.sbtnicon.hint msgid "Click me to change icon!" msgstr "" #: tfrmoptionsfileassocextra.cbexecuteviashell.caption msgctxt "tfrmoptionsfileassocextra.cbexecuteviashell.caption" msgid "Execute via shell" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.caption msgid "Extended context menu" msgstr "" #: tfrmoptionsfileassocextra.cbextendedcontextmenu.hint msgctxt "tfrmoptionsfileassocextra.cbextendedcontextmenu.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbincludeconfigfileassoc.caption msgid "File association configuration" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.caption msgid "Offer to add selection to file association when not included already" msgstr "" #: tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint msgctxt "tfrmoptionsfileassocextra.cboffertoaddtofileassociations.hint" msgid "When accessing file association, offer to add current selected file if not already included in a configured file type" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalclose.caption" msgid "Execute via terminal and close" msgstr "" #: tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption msgctxt "tfrmoptionsfileassocextra.cbopensystemwithterminalstayopen.caption" msgid "Execute via terminal and stay open" msgstr "" #: tfrmoptionsfileassocextra.gbextendedcontextmenuoptions.caption msgid "Extended options items:" msgstr "" #: tfrmoptionsfileoperations.bvlconfirmations.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.bvlconfirmations.caption" msgid "Show confirmation window for:" msgstr "Bed om bekræftelse ved" #: tfrmoptionsfileoperations.cbcopyconfirmation.caption msgid "Cop&y operation" msgstr "Kopiering" #: tfrmoptionsfileoperations.cbdeleteconfirmation.caption msgid "&Delete operation" msgstr "Sletning" #: tfrmoptionsfileoperations.cbdeletetotrash.caption msgid "Dele&te to recycle bin (Shift key reverses this setting)" msgstr "F8/Delete sletter til &Papirkurv (Shift+F8/Skift+Delete =sletter direkte)" #: tfrmoptionsfileoperations.cbdeletetotrashconfirmation.caption msgid "D&elete to trash operation" msgstr "Sl&et til Papirkurv" #: tfrmoptionsfileoperations.cbdropreadonlyflag.caption msgctxt "TFRMOPTIONSFILEOPERATIONS.CBDROPREADONLYFLAG.CAPTION" msgid "D&rop readonly flag" msgstr "Fjern skrivebeskyttelse-attribut" #: tfrmoptionsfileoperations.cbmoveconfirmation.caption msgid "&Move operation" msgstr "Flytning" #: tfrmoptionsfileoperations.cbpartialnamesearch.caption msgid "&Search for part of file name" msgstr "Sø&g efter en del af filnavnet" #: tfrmoptionsfileoperations.cbprocesscomments.caption msgid "&Process comments with files/folders" msgstr "Kopier kommentarer sammen med filer/mapper" #: tfrmoptionsfileoperations.cbrenameselonlyname.caption msgid "Select &file name without extension when renaming" msgstr "Vælg &filnavn uden endelse ved omdøbning" #: tfrmoptionsfileoperations.cbshowcopytabselectpanel.caption msgid "Sho&w tab select panel in copy/move dialog" msgstr "Vis &valgboks for faner i kopier/flyt-dialog" #: tfrmoptionsfileoperations.cbskipfileoperror.caption msgid "S&kip file operations errors and write them to log window" msgstr "Ignorer fejl ved operationer og s&kriv dem i log-vindue" #: tfrmoptionsfileoperations.dbtextsearch.caption msgid "Text search in files" msgstr "" #: tfrmoptionsfileoperations.gbexecutingoperations.caption msgid "Executing operations" msgstr "Udfør handlinger" #: tfrmoptionsfileoperations.gbfilesearch.caption msgctxt "tfrmoptionsfileoperations.gbfilesearch.caption" msgid "File search" msgstr "Find filer" #: tfrmoptionsfileoperations.gbuserinterface.caption msgid "User interface" msgstr "Brugergrænseflade" #: tfrmoptionsfileoperations.lblbuffersize.caption msgid "&Buffer size for file operations (in KB):" msgstr "&Bufferstørrelse for filhandlinger (i kB):" #: tfrmoptionsfileoperations.lblhashbuffersize.caption msgid "Buffer size for &hash calculation (in KB):" msgstr "" #: tfrmoptionsfileoperations.lblprogresskind.caption msgid "Show operations progress &initially in" msgstr "Vis handlingernes fremskridt i:" #: tfrmoptionsfileoperations.lblsearchdefaulttemplate.caption msgid "Default search template:" msgstr "" #: tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption #, fuzzy msgctxt "tfrmoptionsfileoperations.lbltypeofduplicatedrename.caption" msgid "Duplicated name auto-rename style:" msgstr "Stil for auto-omdøbning af dubletter:" #: tfrmoptionsfileoperations.lblwipepassnumber.caption msgid "&Number of wipe passes:" msgstr "A&ntal overskrivninger ved sikker sletning:" #: tfrmoptionsfileoperations.rbusemmapinsearch.caption msgid "Use memory mapping for search te&xt in files" msgstr "Brug hukommelses-mapping ved tekstsøgning i filer" #: tfrmoptionsfileoperations.rbusestreaminsearch.caption msgid "&Use stream for search text in files" msgstr "Br&ug Stream til tekstsøgning i filer" #: tfrmoptionsfilepanelscolors.btnbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnbackcolor2.caption msgctxt "tfrmoptionsfilepanelscolors.btnbackcolor2.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorbordercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btncursorbordercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btncursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btncursortext.caption msgctxt "tfrmoptionsfilepanelscolors.btncursortext.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnforecolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnforecolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivecursorcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.btninactivemarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindbackcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindbackcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnindcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnindcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnmarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.btnmarkcolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfilepanelscolors.btnresettodcdefault.caption msgid "Reset to DC default" msgstr "" #: tfrmoptionsfilepanelscolors.cballowovercolor.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cballowovercolor.caption" msgid "Allow Overcolor" msgstr "Tillad farveoverlapning" #: tfrmoptionsfilepanelscolors.cbbuseframecursor.caption msgid "Use &Frame Cursor" msgstr "Vis markeret kun som ramme" #: tfrmoptionsfilepanelscolors.cbbusegradientind.caption msgid "Use &Gradient Indicator" msgstr "Anvend flydende farveovergange (grøn - gul - rød)" #: tfrmoptionsfilepanelscolors.cbbuseinactiveselcolor.caption msgid "Use Inactive Sel Color" msgstr "" #: tfrmoptionsfilepanelscolors.cbbuseinvertedselection.caption msgid "U&se Inverted Selection" msgstr "Brug inverteret v&alg" #: tfrmoptionsfilepanelscolors.cbusecursorborder.caption #, fuzzy msgctxt "tfrmoptionsfilepanelscolors.cbusecursorborder.caption" msgid "Cursor border" msgstr "Markør-grænser" #: tfrmoptionsfilepanelscolors.dbfreespaceindicator.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.DBFREESPACEINDICATOR.CAPTION" msgid "Drive Free Space Indicator" msgstr "Bar for brugt/ledig plads" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor.caption msgid "Bac&kground:" msgstr "&Baggrund:" #: tfrmoptionsfilepanelscolors.lblbackgroundcolor2.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLBACKGROUNDCOLOR2.CAPTION" msgid "Backg&round 2:" msgstr "Baggrund &2:" #: tfrmoptionsfilepanelscolors.lblcursorcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORCOLOR.CAPTION" msgid "C&ursor Color:" msgstr "&Markørfarve:" #: tfrmoptionsfilepanelscolors.lblcursortext.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLCURSORTEXT.CAPTION" msgid "Cursor Te&xt:" msgstr "Mar&kørskrift:" #: tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivecursorcolor.caption" msgid "Inactive Cursor Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption msgctxt "tfrmoptionsfilepanelscolors.lblinactivemarkcolor.caption" msgid "Inactive Mark Color:" msgstr "" #: tfrmoptionsfilepanelscolors.lblinactivepanelbrightness.caption msgid "&Brightness level of inactive panel" msgstr "Lysstyrke i det inaktive vindue" #: tfrmoptionsfilepanelscolors.lblindbackcolor.caption msgid "In&dicator Back Color:" msgstr "Farve for le&dig plads:" #: tfrmoptionsfilepanelscolors.lblindcolor.caption msgid "&Indicator Fore Color:" msgstr "Farve for brugt plads:" #: tfrmoptionsfilepanelscolors.lblmarkcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLMARKCOLOR.CAPTION" msgid "&Mark Color:" msgstr "&Valgt farve:" #: tfrmoptionsfilepanelscolors.lblpreview.caption msgid "Below is a preview. You may move cursor, select file and get immediately an actual look and feel of the various settings." msgstr "" #: tfrmoptionsfilepanelscolors.lbltextcolor.caption msgctxt "TFRMOPTIONSFILEPANELSCOLORS.LBLTEXTCOLOR.CAPTION" msgid "T&ext Color:" msgstr "&Skriftfarve:" #: tfrmoptionsfilesviews.cbdelayloadingtabs.caption msgid "Do&n't load file list until a tab is activated" msgstr "I&ndlæs ikke filliste førend et faneblad er aktiveret" #: tfrmoptionsfilesviews.cbdirbrackets.caption msgid "S&how square brackets around directories" msgstr "Vis firkantede parenteser [ ] &omkring mappenavne" #: tfrmoptionsfilesviews.cbhighlightupdatedfiles.caption msgid "Hi&ghlight new and updated files" msgstr "Fremhæv nye og ændrede filer" #: tfrmoptionsfilesviews.cbinplacerename.caption msgid "Enable inplace &renaming when clicking twice on a name" msgstr "Tillad øjeblikkelig omdøbning ved dobbeltklik på navn" #: tfrmoptionsfilesviews.cblistfilesinthread.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLISTFILESINTHREAD.CAPTION" msgid "Load &file list in separate thread" msgstr "Indlæs &filliste i separat tråd" #: tfrmoptionsfilesviews.cbloadiconsseparately.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBLOADICONSSEPARATELY.CAPTION" msgid "Load icons af&ter file list" msgstr "Indlæs ikoner ef&ter filliste" #: tfrmoptionsfilesviews.cbshowsystemfiles.caption msgctxt "TFRMOPTIONSFILESVIEWS.CBSHOWSYSTEMFILES.CAPTION" msgid "Show s&ystem and hidden files" msgstr "Vis &skjulte/system-filer (kun for eksperter!)" #: tfrmoptionsfilesviews.cbspacemovesdown.caption msgid "&When selecting files with <SPACEBAR>, move down to next file (as with <INSERT>)" msgstr "Når valgt med <mellemrum>, flyt ned til næste fil (som med <insert>)" #: tfrmoptionsfilesviews.gbformatting.caption msgid "Formatting" msgstr "Formater" #: tfrmoptionsfilesviews.gbsorting.caption msgctxt "tfrmoptionsfilesviews.gbsorting.caption" msgid "Sorting" msgstr "Sortering" #: tfrmoptionsfilesviews.lblcasesensitivity.caption msgid "Case s&ensitivity:" msgstr "" "Forskel på STORE \n" "og små &bogstaver:\n" #: tfrmoptionsfilesviews.lbldatetimeexample.caption msgid "Incorrect format" msgstr "Forkert format" #: tfrmoptionsfilesviews.lbldatetimeformat.caption msgid "&Date and time format:" msgstr "&Dato- og tidsformat:" #: tfrmoptionsfilesviews.lblfilesizeformat.caption msgid "File si&ze format:" msgstr "Vis &filstørrelse i:" #: tfrmoptionsfilesviews.lblnewfilesposition.caption msgid "&Insert new files" msgstr "&Indsæt nye filer:" #: tfrmoptionsfilesviews.lblsortfoldermode.caption #, fuzzy msgctxt "tfrmoptionsfilesviews.lblsortfoldermode.caption" msgid "So&rting directories:" msgstr "So&rter mapper:" #: tfrmoptionsfilesviews.lblsortmethod.caption msgid "&Sort method:" msgstr "Sorteringsme&tode:" #: tfrmoptionsfilesviews.lblupdatedfilesposition.caption msgid "&Move updated files" msgstr "Flyt ændrede filer:" #: tfrmoptionsfiletypescolors.btnaddcategory.caption msgctxt "tfrmoptionsfiletypescolors.btnaddcategory.caption" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsfiletypescolors.btnapplycategory.caption msgctxt "tfrmoptionsfiletypescolors.btnapplycategory.caption" msgid "A&pply" msgstr "Udfør" #: tfrmoptionsfiletypescolors.btncategorycolor.caption msgctxt "tfrmoptionsfiletypescolors.btncategorycolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsfiletypescolors.btndeletecategory.caption msgctxt "tfrmoptionsfiletypescolors.btndeletecategory.caption" msgid "D&elete" msgstr "Sl&et" #: tfrmoptionsfiletypescolors.btnsearchtemplate.hint msgctxt "tfrmoptionsfiletypescolors.btnsearchtemplate.hint" msgid "Template..." msgstr "Skabelon..." #: tfrmoptionsfiletypescolors.gbfiletypescolors.caption msgid "File types colors (sort by drag&&drop)" msgstr "Filtypers farver (sortér med træk && slip)" #: tfrmoptionsfiletypescolors.lblcategoryattr.caption msgid "Category a&ttributes:" msgstr "Kategori-&attributter:" #: tfrmoptionsfiletypescolors.lblcategorycolor.caption msgid "Category co&lor:" msgstr "Katergori-farve:" #: tfrmoptionsfiletypescolors.lblcategorymask.caption msgctxt "tfrmoptionsfiletypescolors.lblcategorymask.caption" msgid "Category &mask:" msgstr "Katergori-filter:" #: tfrmoptionsfiletypescolors.lblcategoryname.caption msgctxt "tfrmoptionsfiletypescolors.lblcategoryname.caption" msgid "Category &name:" msgstr "Kategori-&navn:" #: tfrmoptionsfonts.btnselconsolefnt.caption #, fuzzy msgctxt "tfrmoptionsfonts.btnselconsolefnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnseleditfnt.caption msgctxt "tfrmoptionsfonts.btnseleditfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnsellogfnt.caption msgctxt "tfrmoptionsfonts.btnsellogfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselmainfnt.caption msgctxt "tfrmoptionsfonts.btnselmainfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewerbookfnt.caption msgctxt "tfrmoptionsfonts.btnselviewerbookfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.btnselviewfnt.caption msgctxt "tfrmoptionsfonts.btnselviewfnt.caption" msgid "..." msgstr "..." #: tfrmoptionsfonts.lblconsolefont.caption msgid "&Console font" msgstr "" #: tfrmoptionsfonts.lbleditorfont.caption msgctxt "TFRMOPTIONSFONTS.LBLEDITORFONT.CAPTION" msgid "&Editor font" msgstr "Intern &editors (F4) skrifttype:" #: tfrmoptionsfonts.lbllogfont.caption msgctxt "TFRMOPTIONSFONTS.LBLLOGFONT.CAPTION" msgid "&Log font" msgstr "&Log-skrifttype:" #: tfrmoptionsfonts.lblmainfont.caption msgctxt "TFRMOPTIONSFONTS.LBLMAINFONT.CAPTION" msgid "Main &font" msgstr "&Fillister:" #: tfrmoptionsfonts.lblviewerbookfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERBOOKFONT.CAPTION" msgid "Viewer&Book Font" msgstr "&Bogviserens skrifttype:" #: tfrmoptionsfonts.lblviewerfont.caption msgctxt "TFRMOPTIONSFONTS.LBLVIEWERFONT.CAPTION" msgid "&Viewer font" msgstr "Frem&viserens (F3) skrifttype:" #: tfrmoptionshotkeys.btnaddhotkey.caption msgid "Add &hotkey" msgstr "Tilføj genvejstast" #: tfrmoptionshotkeys.btndeletehotkey.caption msgid "&Delete hotkey" msgstr "Slet genvejstast" #: tfrmoptionshotkeys.btnedithotkey.caption msgctxt "TFRMOPTIONSHOTKEYS.BTNEDITHOTKEY.CAPTION" msgid "&Edit hotkey" msgstr "Rediger genvejstast" #: tfrmoptionshotkeys.lbfilter.caption msgctxt "TFRMOPTIONSHOTKEYS.LBFILTER.CAPTION" msgid "&Filter" msgstr "&Filter:" #: tfrmoptionshotkeys.lblcategories.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCATEGORIES.CAPTION" msgid "C&ategories:" msgstr "K&ategorier:" #: tfrmoptionshotkeys.lblcommands.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLCOMMANDS.CAPTION" msgid "Co&mmands:" msgstr "Ko&mmandoer:" #: tfrmoptionshotkeys.lblscfiles.caption msgctxt "TFRMOPTIONSHOTKEYS.LBLSCFILES.CAPTION" msgid "&Shortcut files:" msgstr "Fil for genvej&staster:" #: tfrmoptionshotkeys.stgcommands.columns[0].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[0].title.caption" msgid "Command" msgstr "Kommando" #: tfrmoptionshotkeys.stgcommands.columns[1].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[1].title.caption" msgid "Hotkeys" msgstr "Genvejstaster" #: tfrmoptionshotkeys.stgcommands.columns[2].title.caption #, fuzzy msgctxt "tfrmoptionshotkeys.stgcommands.columns[2].title.caption" msgid "Description" msgstr "Beskrivelse" #: tfrmoptionshotkeys.stghotkeys.columns[0].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[0].title.caption" msgid "Hotkey" msgstr "Genvejstaster" #: tfrmoptionshotkeys.stghotkeys.columns[1].title.caption msgctxt "tfrmoptionshotkeys.stghotkeys.columns[1].title.caption" msgid "Parameters" msgstr "Parametre" #: tfrmoptionshotkeys.stghotkeys.columns[2].title.caption msgctxt "TFRMOPTIONSHOTKEYS.STGHOTKEYS.COLUMNS[2].TITLE.CAPTION" msgid "Controls" msgstr "Kontrol-elementer" #: tfrmoptionsicons.cbiconsexclude.caption msgctxt "tfrmoptionsicons.cbiconsexclude.caption" msgid "For the following &paths and their subdirectories:" msgstr "For de følgende &stier og deres undermapper:" #: tfrmoptionsicons.cbiconsinmenus.caption msgid "Show icons for actions in &menus" msgstr "Vis ikoner ud for punkter i &hovedmenuen" #: tfrmoptionsicons.cbiconsinmenussize.text msgctxt "tfrmoptionsicons.cbiconsinmenussize.text" msgid "16x16" msgstr "" #: tfrmoptionsicons.cbiconsshowoverlay.caption msgctxt "TFRMOPTIONSICONS.CBICONSSHOWOVERLAY.CAPTION" msgid "Show o&verlay icons, e.g. for links" msgstr "Vis overlæg til ikoner, (f.eks. &pile ved links)" #: tfrmoptionsicons.cbiconssize.text msgctxt "tfrmoptionsicons.cbiconssize.text" msgid "16x16" msgstr "" #: tfrmoptionsicons.gbdisablespecialicons.caption msgid "Disable special icons" msgstr "Slå specielle ikoner fra" #: tfrmoptionsicons.gbiconsinmenus.caption msgid "Icons in menus" msgstr "Ikoner i hovedmenu" #: tfrmoptionsicons.gbiconssize.caption msgctxt "TFRMOPTIONSICONS.GBICONSSIZE.CAPTION" msgid " Icon size " msgstr "Ikonstørrelse " #: tfrmoptionsicons.gbshowiconsmode.caption msgctxt "tfrmoptionsicons.gbshowiconsmode.caption" msgid " Show icons to the left of the filename " msgstr "Vis ikoner til venstre for filnavnet" #: tfrmoptionsicons.rbiconsshowall.caption msgctxt "tfrmoptionsicons.rbiconsshowall.caption" msgid "A&ll" msgstr "A&lle" #: tfrmoptionsicons.rbiconsshowallandexe.caption msgctxt "tfrmoptionsicons.rbiconsshowallandexe.caption" msgid "All associated + &EXE/LNK (slow)" msgstr "&Alle associerede filer inkl. EXE/LNK (langsomt)" #: tfrmoptionsicons.rbiconsshownone.caption msgctxt "tfrmoptionsicons.rbiconsshownone.caption" msgid "&No icons" msgstr "Ingen ik&oner" #: tfrmoptionsicons.rbiconsshowstandard.caption msgctxt "TFRMOPTIONSICONS.RBICONSSHOWSTANDARD.CAPTION" msgid "Only &standard icons" msgstr "&Kun standardikoner" #: tfrmoptionsignorelist.btnaddsel.caption msgctxt "TFRMOPTIONSIGNORELIST.BTNADDSEL.CAPTION" msgid "A&dd selected names" msgstr "Tilføj valgte navne" #: tfrmoptionsignorelist.btnaddselwithpath.caption msgctxt "tfrmoptionsignorelist.btnaddselwithpath.caption" msgid "Add selected names with &full path" msgstr "Tilføj valgte navne med hele stien" #: tfrmoptionsignorelist.btnrelativesavein.hint #, fuzzy msgctxt "tfrmoptionsignorelist.btnrelativesavein.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsignorelist.chkignoreenable.caption msgctxt "tfrmoptionsignorelist.chkignoreenable.caption" msgid "&Ignore (don't show) the following files and folders:" msgstr "&Ignorer (vis ikke) følgende filer og mapper:" #: tfrmoptionsignorelist.lblsavein.caption msgctxt "tfrmoptionsignorelist.lblsavein.caption" msgid "&Save in:" msgstr "&Gem i:" #: tfrmoptionskeyboard.cblynxlike.caption msgid "Le&ft, Right arrows change directory (Lynx-like movement)" msgstr "Venstre- hhv. højrepil skifter mellem mapper (Linux-agtig navigation)" #: tfrmoptionskeyboard.gbtyping.caption msgid "Typing" msgstr "Tastning" #: tfrmoptionskeyboard.lblalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLALT.CAPTION" msgid "Alt+L&etters" msgstr "Alt+bogstav&er:" #: tfrmoptionskeyboard.lblctrlalt.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLCTRLALT.CAPTION" msgid "Ctrl+Alt+Le&tters" msgstr "Ctrl+Alt+bogs&taver:" #: tfrmoptionskeyboard.lblnomodifier.caption msgctxt "TFRMOPTIONSKEYBOARD.LBLNOMODIFIER.CAPTION" msgid "&Letters" msgstr "Bogstaver:" #: tfrmoptionslayout.cbflatdiskpanel.caption msgctxt "tfrmoptionslayout.cbflatdiskpanel.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" #: tfrmoptionslayout.cbflatinterface.caption msgctxt "TFRMOPTIONSLAYOUT.CBFLATINTERFACE.CAPTION" msgid "Flat i&nterface" msgstr "Flad &brugerflade" #: tfrmoptionslayout.cbflattoolbar.caption msgctxt "tfrmoptionslayout.cbflattoolbar.caption" msgid "Flat b&uttons" msgstr "Flade iko&ner" #: tfrmoptionslayout.cbfreespaceind.caption msgctxt "TFRMOPTIONSLAYOUT.CBFREESPACEIND.CAPTION" msgid "Show fr&ee space indicator on drive label" msgstr "Vis bar for ledig plads på drevknap" #: tfrmoptionslayout.cblogwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBLOGWINDOW.CAPTION" msgid "Show lo&g window" msgstr "Vis lo&g-vindue" #: tfrmoptionslayout.cbpanelofoperations.caption msgctxt "tfrmoptionslayout.cbpanelofoperations.caption" msgid "Show panel of operation in background" msgstr "Vis &handlingsvindue i baggrund" #: tfrmoptionslayout.cbproginmenubar.caption msgctxt "tfrmoptionslayout.cbproginmenubar.caption" msgid "Show common progress in menu bar" msgstr "Vis fremskridt i menulin&je" #: tfrmoptionslayout.cbshowcmdline.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCMDLINE.CAPTION" msgid "Show command l&ine" msgstr "Vis k&ommandolinje" #: tfrmoptionslayout.cbshowcurdir.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWCURDIR.CAPTION" msgid "Show current director&y" msgstr "Vis &aktuel mappe" #: tfrmoptionslayout.cbshowdiskpanel.caption msgctxt "tfrmoptionslayout.cbshowdiskpanel.caption" msgid "Show &drive buttons" msgstr "Vis dr&ev-knapper" #: tfrmoptionslayout.cbshowdrivefreespace.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWDRIVEFREESPACE.CAPTION" msgid "Show free s&pace label" msgstr "Vis tal for ledig &plads på drevknap" #: tfrmoptionslayout.cbshowdriveslistbutton.caption msgid "Show drives list bu&tton" msgstr "Vis drev-&valgboks" #: tfrmoptionslayout.cbshowkeyspanel.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWKEYSPANEL.CAPTION" msgid "Show function &key buttons" msgstr "Vis knappanel for &funktionstaster" #: tfrmoptionslayout.cbshowmainmenu.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWMAINMENU.CAPTION" msgid "Show &main menu" msgstr "Vis &menulinje" #: tfrmoptionslayout.cbshowmaintoolbar.caption msgctxt "tfrmoptionslayout.cbshowmaintoolbar.caption" msgid "Show &button bar" msgstr "Vis &knappanel" #: tfrmoptionslayout.cbshowshortdrivefreespace.caption msgid "Show short free space &label" msgstr "Vis tal for ledig plads p&å drevknap (kort visning)" #: tfrmoptionslayout.cbshowstatusbar.caption msgctxt "tfrmoptionslayout.cbshowstatusbar.caption" msgid "Show &status bar" msgstr "Vis &statuslinje" #: tfrmoptionslayout.cbshowtabheader.caption msgctxt "TFRMOPTIONSLAYOUT.CBSHOWTABHEADER.CAPTION" msgid "S&how tabstop header" msgstr "Vis &tabulatorlinje" #: tfrmoptionslayout.cbshowtabs.caption msgctxt "tfrmoptionslayout.cbshowtabs.caption" msgid "Sho&w folder tabs" msgstr "Vis faneb&lade" #: tfrmoptionslayout.cbtermwindow.caption msgctxt "TFRMOPTIONSLAYOUT.CBTERMWINDOW.CAPTION" msgid "Show te&rminal window" msgstr "Vis te&rminalvindue" #: tfrmoptionslayout.cbtwodiskpanels.caption msgctxt "TFRMOPTIONSLAYOUT.CBTWODISKPANELS.CAPTION" msgid "Show two drive button bars (fi&xed width, above file windows)" msgstr "V&is to knappaneler for drev (fast bredde, over filvindue)" #: tfrmoptionslayout.gbscreenlayout.caption #, fuzzy msgctxt "tfrmoptionslayout.gbscreenlayout.caption" msgid " Screen layout " msgstr "Skærmlayout" #: tfrmoptionslog.btnrelativelogfile.hint msgctxt "TFRMOPTIONSLOG.BTNRELATIVELOGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionslog.btnviewlogfile.hint msgctxt "tfrmoptionslog.btnviewlogfile.hint" msgid "View log file content" msgstr "Se indholdet af logfilen" #: tfrmoptionslog.cbincludedateinlogfilename.caption msgid "Include date in log filename" msgstr "Medtag dato i logfilens navn" #: tfrmoptionslog.cblogarcop.caption msgctxt "TFRMOPTIONSLOG.CBLOGARCOP.CAPTION" msgid "&Pack/Unpack" msgstr "&Pakning/Udpakning/Test af pakkede filer" #: tfrmoptionslog.cblogcommandlineexecution.caption msgid "External command line execution" msgstr "" #: tfrmoptionslog.cblogcpmvln.caption msgctxt "TFRMOPTIONSLOG.CBLOGCPMVLN.CAPTION" msgid "Cop&y/Move/Create link/symlink" msgstr "&Kopiering/Flytning/Oprettelse af link && symlink" #: tfrmoptionslog.cblogdelete.caption msgctxt "tfrmoptionslog.cblogdelete.caption" msgid "&Delete" msgstr "&Slet" #: tfrmoptionslog.cblogdirop.caption msgctxt "TFRMOPTIONSLOG.CBLOGDIROP.CAPTION" msgid "Crea&te/Delete directories" msgstr "Oprettelse/Sletning af &mapper" #: tfrmoptionslog.cblogerrors.caption msgctxt "tfrmoptionslog.cblogerrors.caption" msgid "Log &errors" msgstr "Log &fejl" #: tfrmoptionslog.cblogfile.caption msgctxt "TFRMOPTIONSLOG.CBLOGFILE.CAPTION" msgid "C&reate a log file:" msgstr "&Opret en logfil i:" #: tfrmoptionslog.cbloginfo.caption msgctxt "TFRMOPTIONSLOG.CBLOGINFO.CAPTION" msgid "Log &information messages" msgstr "Log informationsmeddelelser" #: tfrmoptionslog.cblogstartshutdown.caption msgid "Start/shutdown" msgstr "Start/luk ned" #: tfrmoptionslog.cblogsuccess.caption msgctxt "tfrmoptionslog.cblogsuccess.caption" msgid "Log &successful operations" msgstr "Log su&ccesfulde operationer" #: tfrmoptionslog.cblogvfs.caption msgctxt "TFRMOPTIONSLOG.CBLOGVFS.CAPTION" msgid "&File system plugins" msgstr "Fils&ystem-plugins" #: tfrmoptionslog.gblogfile.caption msgctxt "tfrmoptionslog.gblogfile.caption" msgid "File operation log file" msgstr "Logfil for filoperationer" #: tfrmoptionslog.gblogfileop.caption msgid "Log operations" msgstr "Log følgende operationer" #: tfrmoptionslog.gblogfilestatus.caption msgid "Operation status" msgstr "Log følgende udfald" #: tfrmoptionsmisc.btnoutputpathfortoolbar.caption #, fuzzy msgctxt "TFRMOPTIONSMISC.BTNOUTPUTPATHFORTOOLBAR.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionsmisc.btnrelativeoutputpathfortoolbar.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVEOUTPUTPATHFORTOOLBAR.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmisc.btnrelativetcconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCCONFIGFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmisc.btnrelativetcexecutablefile.hint msgctxt "TFRMOPTIONSMISC.BTNRELATIVETCEXECUTABLEFILE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionsmisc.btnthumbcompactcache.caption msgid "&Remove thumbnails for no longer existing files" msgstr "&Fjern miniaturebilleder for slettede filer" #: tfrmoptionsmisc.btnviewconfigfile.hint msgctxt "TFRMOPTIONSMISC.BTNVIEWCONFIGFILE.HINT" msgid "View log file content" msgstr "Vis logfilens indhold" #: tfrmoptionsmisc.chkgotoroot.caption msgid "Always &go to the root of a drive when changing drives" msgstr "Gå &altid til drevets rod ved skift af drev" #: tfrmoptionsmisc.chkshowwarningmessages.caption msgctxt "tfrmoptionsmisc.chkshowwarningmessages.caption" msgid "Show &warning messages (\"OK\" button only)" msgstr "Vis advarsler (kun med \"OK\"-knappen)" #: tfrmoptionsmisc.chkthumbsave.caption msgctxt "tfrmoptionsmisc.chkthumbsave.caption" msgid "&Save thumbnails in cache" msgstr "Gem miniaturebilleder i cache" #: tfrmoptionsmisc.dblthumbnails.caption msgctxt "tfrmoptionsmisc.dblthumbnails.caption" msgid "Thumbnails" msgstr "Miniaturebilleder" #: tfrmoptionsmisc.gbtcexportimport.caption msgid "Regarding TC export/import:" msgstr "Angående TC-eksport/-import" #: tfrmoptionsmisc.lbltcconfig.caption msgid "Configuration file:" msgstr "Konfigurationsfil:" #: tfrmoptionsmisc.lbltcexecutable.caption msgid "TC executable:" msgstr "TC exe-fil:" #: tfrmoptionsmisc.lbltcpathfortool.caption msgid "Toolbar output path:" msgstr "Sti til værktøjslinjens output:" #: tfrmoptionsmisc.lblthumbpixels.caption msgid "pixels" msgstr "pixel" #: tfrmoptionsmisc.lblthumbseparator.caption msgctxt "tfrmoptionsmisc.lblthumbseparator.caption" msgid "X" msgstr "X" #: tfrmoptionsmisc.lblthumbsize.caption msgid "&Thumbnail size:" msgstr "&Bredde x højde:" #: tfrmoptionsmouse.cbselectionbymouse.caption msgid "&Selection by mouse" msgstr "Valg med mus" #: tfrmoptionsmouse.gbscrolling.caption msgctxt "tfrmoptionsmouse.gbscrolling.caption" msgid "Scrolling" msgstr "Rulning med musehjul" #: tfrmoptionsmouse.gbselection.caption msgid "Selection" msgstr "Valg" #: tfrmoptionsmouse.lblmousemode.caption msgid "&Mode:" msgstr "Tilstand:" #: tfrmoptionsmouse.rbscrolllinebyline.caption msgid "&Line by line" msgstr "Antal linje(r) ad gangen:" #: tfrmoptionsmouse.rbscrolllinebylinecursor.caption msgid "Line by line &with cursor movement" msgstr "Én linje ad gangen, markøren følger med" #: tfrmoptionsmouse.rbscrollpagebypage.caption msgid "&Page by page" msgstr "Én side ad gangen" #: tfrmoptionsplugins.btnaddplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNADDPLUGIN.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionsplugins.btnconfigplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNCONFIGPLUGIN.CAPTION" msgid "Con&figure" msgstr "Konfigurer" #: tfrmoptionsplugins.btnenableplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNENABLEPLUGIN.CAPTION" msgid "E&nable" msgstr "Aktiver" #: tfrmoptionsplugins.btnremoveplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNREMOVEPLUGIN.CAPTION" msgid "&Remove" msgstr "Fjern" #: tfrmoptionsplugins.btntweakplugin.caption msgctxt "TFRMOPTIONSPLUGINS.BTNTWEAKPLUGIN.CAPTION" msgid "&Tweak" msgstr "Tilpas" #: tfrmoptionsplugins.lbldsxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLDSXDESCRIPTION.CAPTION" msgid "Searc&h plugins allow to use alternative search algorithms or external tools (like \"locate\", etc.)" msgstr "Søge-plugins giver mulighed for alternative søgealgoritmer eller eksterne værktøjer (som \"locate\", etc.)" #: tfrmoptionsplugins.lblwcxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWCXDESCRIPTION.CAPTION" msgid "Pack&er plugins are used to work with archives" msgstr "Pakke-plugins bruges til at åbne arkivtyper, som ikke er understøttet af Double Commander internt." #: tfrmoptionsplugins.lblwdxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWDXDESCRIPTION.CAPTION" msgid "Content plu&gins allow to display extended file details like mp3 tags or image attributes in file lists, or use them in search and multi-rename tool" msgstr "Indholds-plugins tillader at vise udvidede fildetaljer f.eks. mp3-tags eller fotooplysninger i fillister. Kan bruges i søgning og multi-omdøbning." #: tfrmoptionsplugins.lblwfxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWFXDESCRIPTION.CAPTION" msgid "Fi&le system plugins allow access to disks inaccessible by operating system or to external devices like Palm/PocketPC." msgstr "Filsystem-plugins giver adgang til diske, som er utilgængelige for operativsystemet eller til eksterne enheder som Palm/PocketPC." #: tfrmoptionsplugins.lblwlxdescription.caption msgctxt "TFRMOPTIONSPLUGINS.LBLWLXDESCRIPTION.CAPTION" msgid "Vie&wer plugins allow to display file formats like images, spreadsheets, databases etc. in Viewer (F3, Ctrl+Q)" msgstr "Lister-pluins giver mulighed for at vise dataformater som f.eks. billeder, regneark, databaser etc. i Vis (F3, Ctrl+Q)." #: tfrmoptionsplugins.stgplugins.columns[0].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[0].title.caption" msgid "Active" msgstr "Aktiv" #: tfrmoptionsplugins.stgplugins.columns[1].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[1].title.caption" msgid "Plugin" msgstr "Plugin" #: tfrmoptionsplugins.stgplugins.columns[2].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[2].title.caption" msgid "Registered for" msgstr "Associer med" #: tfrmoptionsplugins.stgplugins.columns[3].title.caption msgctxt "tfrmoptionsplugins.stgplugins.columns[3].title.caption" msgid "File name" msgstr "Navn:" #: tfrmoptionsplugins.tsdsx.caption msgctxt "TFRMOPTIONSPLUGINS.TSDSX.CAPTION" msgid "&Search plugins (.DSX)" msgstr "Søge-plugins (.DSX)" #: tfrmoptionsplugins.tswcx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWCX.CAPTION" msgid "Pac&ker plugins (.WCX)" msgstr "Pakke-plugins (.WCX)" #: tfrmoptionsplugins.tswdx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWDX.CAPTION" msgid "Content pl&ugins (.WDX)" msgstr "Indholds-plugins (.WDX)" #: tfrmoptionsplugins.tswfx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWFX.CAPTION" msgid "F&ile system plugins (.WFX)" msgstr "Filsystem-plugins (.WFX)" #: tfrmoptionsplugins.tswlx.caption msgctxt "TFRMOPTIONSPLUGINS.TSWLX.CAPTION" msgid "&Viewer plugins (.WLX)" msgstr "Liste-plugins (.WLX)" #: tfrmoptionsquicksearchfilter.cbexactbeginning.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactbeginning.caption" msgid "&Beginning (name must start with first typed character)" msgstr "&I starten (navnet skal starte med første indtastede tegn)" #: tfrmoptionsquicksearchfilter.cbexactending.caption msgctxt "tfrmoptionsquicksearchfilter.cbexactending.caption" msgid "En&ding (last character before a typed dot . must match)" msgstr "I slut&ningen (sidste tegn før et punktum . skal matche)" #: tfrmoptionsquicksearchfilter.cgpoptions.caption msgctxt "tfrmoptionsquicksearchfilter.cgpoptions.caption" msgid "Options" msgstr "Indstillinger" #: tfrmoptionsquicksearchfilter.gbexactnamematch.caption msgid "Exact name match" msgstr "Præcis navne-match" #: tfrmoptionsquicksearchfilter.rgpsearchcase.caption msgid "Search case" msgstr "STORE og små bogstaver" #: tfrmoptionsquicksearchfilter.rgpsearchitems.caption msgid "Search for these items" msgstr "Søg efter disse elementer" #: tfrmoptionstabs.cbkeeprenamednamebacktonormal.caption msgid "Keep renamed name when unlocking a tab" msgstr "" #: tfrmoptionstabs.cbtabsactivateonclick.caption msgctxt "tfrmoptionstabs.cbtabsactivateonclick.caption" msgid "Activate target &panel when clicking on one of its Tabs" msgstr "Aktiver fil&panel ved klik på fane" #: tfrmoptionstabs.cbtabsalwaysvisible.caption msgctxt "tfrmoptionstabs.cbtabsalwaysvisible.caption" msgid "&Show tab header also when there is only one tab" msgstr "Vis fane, selv om der kun er &et enkelt faneblad" #: tfrmoptionstabs.cbtabscloseduplicatewhenclosing.caption msgid "Close duplicate tabs when closing application" msgstr "" #: tfrmoptionstabs.cbtabsconfirmcloseall.caption msgctxt "TFRMOPTIONSTABS.CBTABSCONFIRMCLOSEALL.CAPTION" msgid "Con&firm close all tabs" msgstr "Bekræft lukning af &alle faner" #: tfrmoptionstabs.cbtabsconfirmcloselocked.caption msgid "Confirm close locked tabs" msgstr "" #: tfrmoptionstabs.cbtabslimitoption.caption msgctxt "TFRMOPTIONSTABS.CBTABSLIMITOPTION.CAPTION" msgid "&Limit tab title length to" msgstr "&Begræns tekst på faner til:" #: tfrmoptionstabs.cbtabslockedasterisk.caption msgctxt "tfrmoptionstabs.cbtabslockedasterisk.caption" msgid "Show locked tabs &with an asterisk *" msgstr "&Markér låste faneblade med stjerne (*) på fanen" #: tfrmoptionstabs.cbtabsmultilines.caption msgctxt "tfrmoptionstabs.cbtabsmultilines.caption" msgid "&Tabs on multiple lines" msgstr "Tillad visning af faner på flere &linjer" #: tfrmoptionstabs.cbtabsopenforeground.caption msgctxt "tfrmoptionstabs.cbtabsopenforeground.caption" msgid "Ctrl+&Up opens new tab in foreground" msgstr "Ctrl+Op åbner nyt faneblad i &forgrunden" #: tfrmoptionstabs.cbtabsopennearcurrent.caption msgctxt "tfrmoptionstabs.cbtabsopennearcurrent.caption" msgid "Open &new tabs near current tab" msgstr "Åbn &nye faneblade ved siden af aktive fane" #: tfrmoptionstabs.cbtabsreusetabwhenpossible.caption msgid "Reuse existing tab when possible" msgstr "" #: tfrmoptionstabs.cbtabsshowclosebutton.caption msgctxt "TFRMOPTIONSTABS.CBTABSSHOWCLOSEBUTTON.CAPTION" msgid "Show ta&b close button" msgstr "Vis luk-knap på fane" #: tfrmoptionstabs.cbtabsshowdriveletter.caption msgid "Always show drive letter in tab title" msgstr "" #: tfrmoptionstabs.gbtabs.caption msgctxt "tfrmoptionstabs.gbtabs.caption" msgid "Folder tabs headers" msgstr "Faner" #: tfrmoptionstabs.lblchar.caption msgctxt "tfrmoptionstabs.lblchar.caption" msgid "characters" msgstr "tegn" #: tfrmoptionstabs.lbltabsactionondoubleclick.caption msgid "Action to do when double click on a tab:" msgstr "" #: tfrmoptionstabs.lbltabsposition.caption msgctxt "TFRMOPTIONSTABS.LBLTABSPOSITION.CAPTION" msgid "Ta&bs position" msgstr "Tabulatorposition:" #: tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text msgctxt "tfrmoptionstabsextra.cbdefaultexistingtabstokeep.text" msgid "None" msgstr "" #: tfrmoptionstabsextra.cbdefaultsavedirhistory.text #, fuzzy msgctxt "tfrmoptionstabsextra.cbdefaultsavedirhistory.text" msgid "No" msgstr "Nej" #: tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelleftsaved.text" msgid "Left" msgstr "" #: tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text msgctxt "tfrmoptionstabsextra.cbdefaulttargetpanelrightsaved.text" msgid "Right" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigafterresave.caption msgid "Goto to Favorite Tabs Configuration after resaving" msgstr "" #: tfrmoptionstabsextra.cbgotoconfigaftersave.caption msgid "Goto to Favorite Tabs Configuration after saving a new one" msgstr "" #: tfrmoptionstabsextra.cbusefavoritetabsextraoptions.caption msgid "Enable Favorite Tabs extra options (select target side when restore, etc.)" msgstr "" #: tfrmoptionstabsextra.gbdefaulttabsavedrestoration.caption msgid "Default extra settings when saving new Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.gbtabs.caption msgid "Folder tabs headers extra" msgstr "" #: tfrmoptionstabsextra.lbldefaultexistingtabstokeep.caption msgid "When restoring tab, existing tabs to keep:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelleftsaved.caption msgid "Tabs saved on left will be restored to:" msgstr "" #: tfrmoptionstabsextra.lbldefaulttargetpanelrightsaved.caption msgid "Tabs saved on right will be restored to:" msgstr "" #: tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption msgctxt "tfrmoptionstabsextra.lblfavoritetabssavedirhistory.caption" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: tfrmoptionstabsextra.rgwheretoadd.caption msgid "Default position in menu when saving a new Favorite Tabs:" msgstr "" #: tfrmoptionsterminal.gbjustrunterminal.caption msgid "Command for just running terminal:" msgstr "" #: tfrmoptionsterminal.gbruninterminalclose.caption msgid "Command for running a command in terminal and close after:" msgstr "" #: tfrmoptionsterminal.gbruninterminalstayopen.caption msgid "Command for running a command in terminal and stay open:" msgstr "" #: tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtrunintermclosecmd.editlabel.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermcloseparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermcloseparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopencmd.editlabel.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtrunintermstayopenparams.hint msgctxt "tfrmoptionsterminal.ledtrunintermstayopenparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionsterminal.ledtruntermcmd.editlabel.caption #, fuzzy msgctxt "tfrmoptionsterminal.ledtruntermcmd.editlabel.caption" msgid "Command:" msgstr "Kommando:" #: tfrmoptionsterminal.ledtruntermparams.editlabel.caption msgctxt "tfrmoptionsterminal.ledtruntermparams.editlabel.caption" msgid "Parameters:" msgstr "" #: tfrmoptionsterminal.ledtruntermparams.hint msgctxt "tfrmoptionsterminal.ledtruntermparams.hint" msgid "{command} should normally be present here to reflect the command to be run in terminal" msgstr "" #: tfrmoptionstoolbar.btnclonebutton.caption msgid "C&lone button" msgstr "K&lon knap" #: tfrmoptionstoolbar.btndeletebutton.caption msgctxt "tfrmoptionstoolbar.btndeletebutton.caption" msgid "&Delete" msgstr "&Slet" #: tfrmoptionstoolbar.btnedithotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNEDITHOTKEY.CAPTION" msgid "Edit hot&key" msgstr "Rediger genvejstast" #: tfrmoptionstoolbar.btninsertbutton.caption msgctxt "tfrmoptionstoolbar.btninsertbutton.caption" msgid "&Insert new button" msgstr "&Indsæt ny knap" #: tfrmoptionstoolbar.btnopencmddlg.caption msgid "Select" msgstr "" #: tfrmoptionstoolbar.btnopenfile.caption msgctxt "tfrmoptionstoolbar.btnopenfile.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnopenicon.caption msgctxt "tfrmoptionstoolbar.btnopenicon.caption" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnother.caption #, fuzzy msgctxt "tfrmoptionstoolbar.btnother.caption" msgid "Other..." msgstr "Andre..." #: tfrmoptionstoolbar.btnremovehotkey.caption msgctxt "TFRMOPTIONSTOOLBAR.BTNREMOVEHOTKEY.CAPTION" msgid "Remove hotke&y" msgstr "Fjern genvejstast" #: tfrmoptionstoolbar.btnstartpath.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.BTNSTARTPATH.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstoolbar.btnsuggestiontooltip.caption msgid "Suggest" msgstr "" #: tfrmoptionstoolbar.btnsuggestiontooltip.hint msgid "Have DC suggest the tooltip based on button type, command and parameters" msgstr "" #: tfrmoptionstoolbar.cbflatbuttons.caption msgctxt "tfrmoptionstoolbar.cbflatbuttons.caption" msgid "&Flat buttons" msgstr "Fla&de ikoner" #: tfrmoptionstoolbar.cbreporterrorwithcommands.caption msgid "Report errors with commands" msgstr "Rapportér fejl med kommandolinje" #: tfrmoptionstoolbar.edtinternalparameters.hint msgid "Enter command parameters, each in a separate line. Press F1 to see help on parameters." msgstr "Indtast kommandoparamertre, kun én pr. linje. Tryk F1 for mere hjælp til prametre." #: tfrmoptionstoolbar.gbgroupbox.caption msgctxt "tfrmoptionstoolbar.gbgroupbox.caption" msgid "Appearance" msgstr "Udseende" #: tfrmoptionstoolbar.lblbarsize.caption msgid "&Bar size:" msgstr "St&ørrelse på panelet:" #: tfrmoptionstoolbar.lblexternalcommand.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALCOMMAND.CAPTION" msgid "Comman&d:" msgstr "Komman&do:" #: tfrmoptionstoolbar.lblexternalparameters.caption msgctxt "TFRMOPTIONSTOOLBAR.LBLEXTERNALPARAMETERS.CAPTION" msgid "Parameter&s:" msgstr "Parametre:" #: tfrmoptionstoolbar.lblhelponinternalcommand.caption #, fuzzy msgctxt "tfrmoptionstoolbar.lblhelponinternalcommand.caption" msgid "Help" msgstr "Hjælp" #: tfrmoptionstoolbar.lblhotkey.caption msgid "Hot key:" msgstr "Genvejstast:" #: tfrmoptionstoolbar.lbliconfile.caption msgid "Ico&n:" msgstr "Iko&n:" #: tfrmoptionstoolbar.lbliconsize.caption msgid "Icon si&ze:" msgstr "Størrelse på ik&on:" #: tfrmoptionstoolbar.lblinternalcommand.caption msgctxt "tfrmoptionstoolbar.lblinternalcommand.caption" msgid "Co&mmand:" msgstr "Ko&mmando:" #: tfrmoptionstoolbar.lblinternalparameters.caption msgctxt "tfrmoptionstoolbar.lblinternalparameters.caption" msgid "&Parameters:" msgstr "&Parametre:" #: tfrmoptionstoolbar.lblstartpath.caption msgctxt "tfrmoptionstoolbar.lblstartpath.caption" msgid "Start pat&h:" msgstr "&Start-mappe:" #: tfrmoptionstoolbar.lbltooltip.caption msgctxt "tfrmoptionstoolbar.lbltooltip.caption" msgid "&Tooltip:" msgstr "&Ballon-hjælp:" #: tfrmoptionstoolbar.miaddallcmds.caption msgid "Add toolbar with ALL DC commands" msgstr "" #: tfrmoptionstoolbar.miaddexternalcommandsubmenu.caption msgid "for an external command" msgstr "for en ekstern kommando" #: tfrmoptionstoolbar.miaddinternalcommandsubmenu.caption msgid "for an internal command" msgstr "for en intern kommando" #: tfrmoptionstoolbar.miaddseparatorsubmenu.caption msgid "for a separator" msgstr "for en separator" #: tfrmoptionstoolbar.miaddsubtoolbarsubmenu.caption msgid "for a sub-tool bar" msgstr "for en under-værktøjslinje" #: tfrmoptionstoolbar.mibackup.caption msgctxt "tfrmoptionstoolbar.mibackup.caption" msgid "Backup..." msgstr "" #: tfrmoptionstoolbar.miexport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miexport.caption" msgid "Export..." msgstr "Eksportér..." #: tfrmoptionstoolbar.miexportcurrent.caption msgid "Current toolbar..." msgstr "Aktuel værktøjslinje" #: tfrmoptionstoolbar.miexportcurrenttodcbar.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTODCBAR.CAPTION" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miexportcurrenttotcbarkeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARKEEP.CAPTION" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcbarnokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCBARNOKEEP.CAPTION" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini i TC (beholder eksisterende)" #: tfrmoptionstoolbar.miexportcurrenttotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTCURRENTTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbar.miexportseparator1.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR1.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator2.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR2.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator3.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR3.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexportseparator4.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTSEPARATOR4.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miexporttop.caption msgid "Top toolbar..." msgstr "Øverste værktøjslinje..." #: tfrmoptionstoolbar.miexporttoptobackup.caption msgid "Save a backup of Toolbar" msgstr "Gem en backup af værktøjslinjen" #: tfrmoptionstoolbar.miexporttoptodcbar.caption msgctxt "tfrmoptionstoolbar.miexporttoptodcbar.caption" msgid "to a Toolbar File (.toolbar)" msgstr "til en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miexporttoptotcbarkeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarkeep.caption" msgid "to a TC .BAR file (keep existing)" msgstr "til en TC .BAR-fil (beholder eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption msgctxt "tfrmoptionstoolbar.miexporttoptotcbarnokeep.caption" msgid "to a TC .BAR file (erase existing)" msgstr "til en TC .BAR-fil (sletter eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcinikeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCINIKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (keep existing)" msgstr "til en \"wincmd.ini\" i TC (beholder eksisterende)" #: tfrmoptionstoolbar.miexporttoptotcininokeep.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXPORTTOPTOTCININOKEEP.CAPTION" msgid "to a \"wincmd.ini\" of TC (erase existing)" msgstr "til en \"wincmd.ini\" i TC (sletter eksisterende)" #: tfrmoptionstoolbar.miexternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miexternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miexternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miexternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIEXTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.miimport.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimport.caption" msgid "Import..." msgstr "Importér..." #: tfrmoptionstoolbar.miimportbackup.caption msgid "Restore a backup of Toolbar" msgstr "Gendan en backup af værktøjslinjen" #: tfrmoptionstoolbar.miimportbackupaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportbackupaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportbackupaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportbackupaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportbackupreplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTBACKUPREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimportdcbar.caption msgid "from a Toolbar File (.toolbar)" msgstr "fra en værktøjslinjefil (.toolbar)" #: tfrmoptionstoolbar.miimportdcbaraddcurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddcurrent.caption" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenucurrent.caption" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimportdcbaraddmenutop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddmenutop.caption" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportdcbaraddtop.caption msgctxt "tfrmoptionstoolbar.miimportdcbaraddtop.caption" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimportdcbarreplacetop.caption msgctxt "tfrmoptionstoolbar.miimportdcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimportseparator.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTSEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miimporttcbar.caption msgid "from a single TC .BAR file" msgstr "fra en enkelt TC .BAR-fil" #: tfrmoptionstoolbar.miimporttcbaraddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttcbaraddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttcbaraddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcbaraddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCBARADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcbarreplacetop.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miimporttcbarreplacetop.caption" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcini.caption msgid "from \"wincmd.ini\" of TC..." msgstr "fra \"wincmd.ini\" i TC..." #: tfrmoptionstoolbar.miimporttciniaddcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDCURRENT.CAPTION" msgid "to add to current toolbar" msgstr "for at tilføje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttciniaddmenucurrent.caption #, fuzzy #| msgid "to add to a new toobar to current toolbar" msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUCURRENT.CAPTION" msgid "to add to a new toolbar to current toolbar" msgstr "for at tilføje en ny værktøjslinje til aktuelle værktøjslinje" #: tfrmoptionstoolbar.miimporttciniaddmenutop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDMENUTOP.CAPTION" msgid "to add to a new toolbar to top toolbar" msgstr "for at tilføje en ny værktøjslinje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttciniaddtop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIADDTOP.CAPTION" msgid "to add to top toolbar" msgstr "for at tilføje til øverste værktøjslinje" #: tfrmoptionstoolbar.miimporttcinireplacetop.caption msgctxt "TFRMOPTIONSTOOLBAR.MIIMPORTTCINIREPLACETOP.CAPTION" msgid "to replace top toolbar" msgstr "for at erstatte øverste værktøjslinje" #: tfrmoptionstoolbar.miinternalcommandaftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miinternalcommandfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miinternalcommandlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miinternalcommandpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MIINTERNALCOMMANDPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.misearchandreplace.caption msgctxt "tfrmoptionstoolbar.misearchandreplace.caption" msgid "Search and replace..." msgstr "" #: tfrmoptionstoolbar.miseparator1.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator1.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator10.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR10.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator11.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR11.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator13.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR13.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator14.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR14.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator2.caption #, fuzzy msgctxt "tfrmoptionstoolbar.miseparator2.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator6.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR6.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator7.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR7.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator8.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR8.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparator9.caption #, fuzzy msgctxt "TFRMOPTIONSTOOLBAR.MISEPARATOR9.CAPTION" msgid "-" msgstr "-" #: tfrmoptionstoolbar.miseparatoraftercurrent.caption msgctxt "tfrmoptionstoolbar.miseparatoraftercurrent.caption" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.miseparatorfirstitem.caption msgctxt "tfrmoptionstoolbar.miseparatorfirstitem.caption" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.miseparatorlastelement.caption msgctxt "tfrmoptionstoolbar.miseparatorlastelement.caption" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.miseparatorpriorcurrent.caption msgctxt "tfrmoptionstoolbar.miseparatorpriorcurrent.caption" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.misrcrplallofall.caption msgid "in all of all the above..." msgstr "" #: tfrmoptionstoolbar.misrcrplclickseparator.caption #, fuzzy msgctxt "tfrmoptionstoolbar.misrcrplclickseparator.caption" msgid "-" msgstr "-" #: tfrmoptionstoolbar.misrcrplcommands.caption msgid "in all commands..." msgstr "" #: tfrmoptionstoolbar.misrcrpliconnames.caption msgid "in all icon names..." msgstr "" #: tfrmoptionstoolbar.misrcrplparameters.caption msgid "in all parameters..." msgstr "" #: tfrmoptionstoolbar.misrcrplstartpath.caption msgid "in all start path..." msgstr "" #: tfrmoptionstoolbar.misubtoolbaraftercurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARAFTERCURRENT.CAPTION" msgid "just after current selection" msgstr "lige efter aktuelle valg" #: tfrmoptionstoolbar.misubtoolbarfirstelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARFIRSTELEMENT.CAPTION" msgid "as first element" msgstr "som første element" #: tfrmoptionstoolbar.misubtoolbarlastelement.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARLASTELEMENT.CAPTION" msgid "as last element" msgstr "som sidste element" #: tfrmoptionstoolbar.misubtoolbarpriorcurrent.caption msgctxt "TFRMOPTIONSTOOLBAR.MISUBTOOLBARPRIORCURRENT.CAPTION" msgid "just prior current selection" msgstr "lige før aktuelle valg" #: tfrmoptionstoolbar.rgtoolitemtype.caption msgid "Button type" msgstr "Knaptype" #: tfrmoptionstoolbase.btnrelativetoolpath.hint #, fuzzy msgctxt "tfrmoptionstoolbase.btnrelativetoolpath.hint" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmoptionstoolbase.cbtoolskeepterminalopen.caption msgid "&Keep terminal window open after executing program" msgstr "Bevar terminalvindue åbent efter udførelse af program" #: tfrmoptionstoolbase.cbtoolsruninterminal.caption msgid "&Execute in terminal" msgstr "Udfør i t&erminal" #: tfrmoptionstoolbase.cbtoolsuseexternalprogram.caption msgid "&Use external program" msgstr "Brug &eksternt program" #: tfrmoptionstoolbase.lbltoolsparameters.caption msgid "A&dditional parameters" msgstr "Ekstra parametre:" #: tfrmoptionstoolbase.lbltoolspath.caption msgid "&Path to program to execute" msgstr "Sti til det eksterne program:" #: tfrmoptionstooltips.btnaddfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNADDFIELDS.CAPTION" msgid "A&dd" msgstr "Tilføj" #: tfrmoptionstooltips.btnapplyfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNAPPLYFIELDS.CAPTION" msgid "A&pply" msgstr "Udfør" #: tfrmoptionstooltips.btndeletefields.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNDELETEFIELDS.CAPTION" msgid "D&elete" msgstr "Slet" #: tfrmoptionstooltips.btnfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSLIST.CAPTION" msgid ">>" msgstr ">>" #: tfrmoptionstooltips.btnfieldssearchtemplate.hint msgctxt "TFRMOPTIONSTOOLTIPS.BTNFIELDSSEARCHTEMPLATE.HINT" msgid "Template..." msgstr "Skabelon..." #: tfrmoptionstooltips.chkshowtooltip.caption #, fuzzy #| msgid "Show tool tip" msgctxt "tfrmoptionstooltips.chkshowtooltip.caption" msgid "&Show tooltip for files in the file panel" msgstr "Værktøjshjælp" #: tfrmoptionstooltips.gbcustomfields.caption msgctxt "TFRMOPTIONSTOOLTIPS.GBCUSTOMFIELDS.CAPTION" msgid "Custom fields by file type" msgstr "Tilpas felter efter filtype" #: tfrmoptionstooltips.lblfieldslist.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSLIST.CAPTION" msgid "Category &hint:" msgstr "Kategori-tip:" #: tfrmoptionstooltips.lblfieldsmask.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSMASK.CAPTION" msgid "Category &mask:" msgstr "Kategori-filter:" #: tfrmoptionstooltips.lblfieldsname.caption msgctxt "TFRMOPTIONSTOOLTIPS.LBLFIELDSNAME.CAPTION" msgid "Category &name:" msgstr "Kategori-navn:" #: tfrmoptionsviewer.btnbackviewercolor.caption msgctxt "tfrmoptionsviewer.btnbackviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.btnfontviewercolor.caption msgctxt "tfrmoptionsviewer.btnfontviewercolor.caption" msgid ">>" msgstr ">>" #: tfrmoptionsviewer.gbviewerbookmode.caption msgctxt "tfrmoptionsviewer.gbviewerbookmode.caption" msgid "Viewer Book Mode" msgstr "Bogvisning" #: tfrmoptionsviewer.gbviewerexample.caption msgctxt "tfrmoptionsviewer.gbviewerexample.caption" msgid "Example" msgstr "Eksempel" #: tfrmoptionsviewer.lblbackgroundcolorviewerbook.caption msgid "&Background color in book viewer" msgstr "&Baggrundsfarve for bogvisning:" #: tfrmoptionsviewer.lblfontcolorviewerbook.caption msgid "&Font color in book viewer" msgstr "Skriftfarve i bogvisning:" #: tfrmoptionsviewer.lblnumbercolumnsviewer.caption msgid "&Number of columns in book viewer" msgstr "A&ntal kolonner i bogvisning:" #: tfrmpackdlg.btnconfig.caption msgctxt "TFRMPACKDLG.BTNCONFIG.CAPTION" msgid "Con&figure" msgstr "&Indstillinger" #: tfrmpackdlg.caption msgctxt "tfrmpackdlg.caption" msgid "Pack files" msgstr "Pak filer" #: tfrmpackdlg.cbcreateseparatearchives.caption msgid "C&reate separate archives, one per selected file/dir" msgstr "Dan &separate arkiver, ét for hver valgt fil/mappe" #: tfrmpackdlg.cbcreatesfx.caption msgid "Create self e&xtracting archive" msgstr "&Dan selvudpakkende arkiv" #: tfrmpackdlg.cbencrypt.caption msgid "Encr&ypt" msgstr "&Kryptér" #: tfrmpackdlg.cbmovetoarchive.caption msgid "Mo&ve to archive" msgstr "Fl&yt til arkiv" #: tfrmpackdlg.cbmultivolume.caption msgid "&Multiple disk archive" msgstr "&Fordel arkiv over flere diske" #: tfrmpackdlg.cbotherplugins.caption msgid "=>" msgstr "" #: tfrmpackdlg.cbputintarfirst.caption msgid "P&ut in the TAR archive first" msgstr "Ko&m i TAR-arkivet først" #: tfrmpackdlg.cbstoredir.caption msgid "Also &pack path names (only recursed)" msgstr "Gem &også sti (kun rekursivt)" #: tfrmpackdlg.lblprompt.caption msgid "Pack file(s) to the file:" msgstr "Pak fil(er) i arkivet:" #: tfrmpackdlg.rgpacker.caption msgid "Packer" msgstr "Pakkeprogram" #: tfrmpackinfodlg.btnclose.caption msgctxt "TFRMPACKINFODLG.BTNCLOSE.CAPTION" msgid "&Close" msgstr "&Luk" #: tfrmpackinfodlg.btnunpackallandexec.caption msgid "Unpack &all and execute" msgstr "Udpak &alle og udfør" #: tfrmpackinfodlg.btnunpackandexec.caption msgid "&Unpack and execute" msgstr "&Udpak og udfør" #: tfrmpackinfodlg.caption msgctxt "tfrmpackinfodlg.caption" msgid "Properties of packed file" msgstr "Egenskaber for pakket fil" #: tfrmpackinfodlg.lblattributes.caption msgid "Attributes:" msgstr "Attributter:" #: tfrmpackinfodlg.lblcompressionratio.caption msgid "Compression ratio:" msgstr "Komprimering:" #: tfrmpackinfodlg.lbldate.caption msgid "Date:" msgstr "Dato" #: tfrmpackinfodlg.lblmethod.caption msgid "Method:" msgstr "Metode" #: tfrmpackinfodlg.lbloriginalsize.caption msgid "Original size:" msgstr "Oprindelig størrelse:" #: tfrmpackinfodlg.lblpackedfile.caption msgid "File:" msgstr "Fil:" #: tfrmpackinfodlg.lblpackedsize.caption msgid "Packed size:" msgstr "Pakket størrelse:" #: tfrmpackinfodlg.lblpacker.caption msgid "Packer:" msgstr "Pakkeprogram:" #: tfrmpackinfodlg.lbltime.caption msgid "Time:" msgstr "Tid:" #: tfrmquicksearch.btncancel.caption msgctxt "tfrmquicksearch.btncancel.caption" msgid "X" msgstr "X" #: tfrmquicksearch.btncancel.hint msgid "Close filter panel" msgstr "Luk filtervindue" #: tfrmquicksearch.edtsearch.hint msgid "Enter text to search for or filter by" msgstr "Indtast teksten, som der søges eller filteres efter" #: tfrmquicksearch.sbcasesensitive.caption msgid "Aa" msgstr "" #: tfrmquicksearch.sbcasesensitive.hint msgid "Case Sensitive" msgstr "Forskel på STORE og små bogstaver" #: tfrmquicksearch.sbdirectories.caption msgid "D" msgstr "M" #: tfrmquicksearch.sbdirectories.hint msgctxt "tfrmquicksearch.sbdirectories.hint" msgid "Directories" msgstr "Mapper" #: tfrmquicksearch.sbfiles.caption msgid "F" msgstr "" #: tfrmquicksearch.sbfiles.hint msgctxt "tfrmquicksearch.sbfiles.hint" msgid "Files" msgstr "Filer" #: tfrmquicksearch.sbmatchbeginning.caption msgid "{" msgstr "" #: tfrmquicksearch.sbmatchbeginning.hint msgid "Match Beginning" msgstr "Matcher begyndelsen" #: tfrmquicksearch.sbmatchending.caption msgid "}" msgstr "" #: tfrmquicksearch.sbmatchending.hint msgid "Match Ending" msgstr "Match slutningen" #: tfrmquicksearch.tglfilter.caption msgctxt "tfrmquicksearch.tglfilter.caption" msgid "Filter" msgstr "Filter:" #: tfrmquicksearch.tglfilter.hint msgid "Toggle between search or filter" msgstr "Skift mellem søgning eller filtrering" #: tfrmsearchplugin.btnadd.caption msgid "&More rules" msgstr "Flere regler" #: tfrmsearchplugin.btndelete.caption msgid "L&ess rules" msgstr "Færre regler" #: tfrmsearchplugin.chkuseplugins.caption msgid "Use &content plugins, combine with:" msgstr "Anvend indholds-plugin. Kombinér med:" #: tfrmsearchplugin.headercontrol.sections[0].text #, fuzzy msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[0].TEXT" msgid "Plugin" msgstr "Plugin" #: tfrmsearchplugin.headercontrol.sections[1].text msgid "Field" msgstr "Felt" #: tfrmsearchplugin.headercontrol.sections[2].text msgid "Operator" msgstr "" #: tfrmsearchplugin.headercontrol.sections[3].text msgctxt "TFRMSEARCHPLUGIN.HEADERCONTROL.SECTIONS[3].TEXT" msgid "Value" msgstr "Værdi" #: tfrmsearchplugin.rband.caption msgid "&AND (all match)" msgstr "&AND (alle operatorer er sande el. falske)" #: tfrmsearchplugin.rbor.caption msgid "&OR (any match)" msgstr "&OR (mindst én operator er sand el. falsk)" #: tfrmselecttextrange.btppanel.cancelbutton.caption msgctxt "tfrmselecttextrange.btppanel.cancelbutton.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmselecttextrange.btppanel.closebutton.caption msgctxt "tfrmselecttextrange.btppanel.closebutton.caption" msgid "&Close" msgstr "&Luk" #: tfrmselecttextrange.btppanel.helpbutton.caption msgctxt "tfrmselecttextrange.btppanel.helpbutton.caption" msgid "&Help" msgstr "&Hjælp" #: tfrmselecttextrange.btppanel.okbutton.caption msgctxt "tfrmselecttextrange.btppanel.okbutton.caption" msgid "&OK" msgstr "&OK" #: tfrmselecttextrange.lblselecttext.caption msgid "&Select the characters to insert:" msgstr "Vælg bog&staverne, som skal indsættes:" #: tfrmsetfileproperties.btncancel.caption msgctxt "TFRMSETFILEPROPERTIES.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmsetfileproperties.btnok.caption msgctxt "TFRMSETFILEPROPERTIES.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsetfileproperties.caption msgctxt "tfrmsetfileproperties.caption" msgid "Change attributes" msgstr "Ændre attributter" #: tfrmsetfileproperties.cbsgid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSGID.CAPTION" msgid "SGID" msgstr "" "S&GID\n" "(Set group id)\n" #: tfrmsetfileproperties.cbsticky.caption msgctxt "TFRMSETFILEPROPERTIES.CBSTICKY.CAPTION" msgid "Sticky" msgstr "Stic&ky" #: tfrmsetfileproperties.cbsuid.caption msgctxt "TFRMSETFILEPROPERTIES.CBSUID.CAPTION" msgid "SUID" msgstr "" "&SUID\n" "(Set user id)\n" #: tfrmsetfileproperties.chkarchive.caption msgctxt "TFRMSETFILEPROPERTIES.CHKARCHIVE.CAPTION" msgid "Archive" msgstr "&a Arkiv" #: tfrmsetfileproperties.chkcreationtime.caption msgctxt "TFRMSETFILEPROPERTIES.CHKCREATIONTIME.CAPTION" msgid "Created:" msgstr "Oprettet:" #: tfrmsetfileproperties.chkhidden.caption msgctxt "TFRMSETFILEPROPERTIES.CHKHIDDEN.CAPTION" msgid "Hidden" msgstr "&h Skjult" #: tfrmsetfileproperties.chklastaccesstime.caption msgid "Accessed:" msgstr "Åbnet:" #: tfrmsetfileproperties.chklastwritetime.caption msgid "Modified:" msgstr "Ændret:" #: tfrmsetfileproperties.chkreadonly.caption msgctxt "TFRMSETFILEPROPERTIES.CHKREADONLY.CAPTION" msgid "Read only" msgstr "&r Skrivebeskyttet" #: tfrmsetfileproperties.chkrecursive.caption msgid "Including subfolders" msgstr "Medtag filer i &undermapper" #: tfrmsetfileproperties.chksystem.caption msgctxt "TFRMSETFILEPROPERTIES.CHKSYSTEM.CAPTION" msgid "System" msgstr "&s System" #: tfrmsetfileproperties.gbtimesamp.caption msgid "Timestamp properties" msgstr "Ændre dato/tid" #: tfrmsetfileproperties.gbunixattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBUNIXATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Ændre attributter " #: tfrmsetfileproperties.gbwinattributes.caption msgctxt "TFRMSETFILEPROPERTIES.GBWINATTRIBUTES.CAPTION" msgid "Attributes" msgstr "Attributter" #: tfrmsetfileproperties.lblattrbitsstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRBITSSTR.CAPTION" msgid "Bits:" msgstr "Bit" #: tfrmsetfileproperties.lblattrgroupstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRGROUPSTR.CAPTION" msgid "Group" msgstr "Gruppe" #: tfrmsetfileproperties.lblattrinfo.caption msgctxt "tfrmsetfileproperties.lblattrinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gråt=uændret, markeret=sæt attribut)" #: tfrmsetfileproperties.lblattrotherstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROTHERSTR.CAPTION" msgid "Other" msgstr "Andre" #: tfrmsetfileproperties.lblattrownerstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTROWNERSTR.CAPTION" msgid "Owner" msgstr "Ejer" #: tfrmsetfileproperties.lblattrtext.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXT.CAPTION" msgid "-----------" msgstr "" #: tfrmsetfileproperties.lblattrtextstr.caption msgctxt "TFRMSETFILEPROPERTIES.LBLATTRTEXTSTR.CAPTION" msgid "Text:" msgstr "Tekst:" #: tfrmsetfileproperties.lblexec.caption msgctxt "TFRMSETFILEPROPERTIES.LBLEXEC.CAPTION" msgid "Execute" msgstr "Udfør" #: tfrmsetfileproperties.lblmodeinfo.caption #, fuzzy msgctxt "tfrmsetfileproperties.lblmodeinfo.caption" msgid "(gray field means unchanged value)" msgstr "(gråt=uændret, markeret=sæt attribut)" #: tfrmsetfileproperties.lbloctal.caption msgctxt "TFRMSETFILEPROPERTIES.LBLOCTAL.CAPTION" msgid "Octal:" msgstr "Oktal:" #: tfrmsetfileproperties.lblread.caption msgctxt "TFRMSETFILEPROPERTIES.LBLREAD.CAPTION" msgid "Read" msgstr "Læs" #: tfrmsetfileproperties.lblwrite.caption msgctxt "TFRMSETFILEPROPERTIES.LBLWRITE.CAPTION" msgid "Write" msgstr "Skriv" #: tfrmsplitter.btncancel.caption msgctxt "TFRMSPLITTER.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmsplitter.btnftchoice.caption msgctxt "TFRMSPLITTER.BTNFTCHOICE.CAPTION" msgid "..." msgstr "..." #: tfrmsplitter.btnok.caption msgctxt "TFRMSPLITTER.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsplitter.btnrelativeftchoice.hint msgctxt "TFRMSPLITTER.BTNRELATIVEFTCHOICE.HINT" msgid "Some functions to select appropriate path" msgstr "Nogle funktioner til at vælge egnet sti" #: tfrmsplitter.caption msgctxt "tfrmsplitter.caption" msgid "Splitter" msgstr "Opdel fil" #: tfrmsplitter.cbrequireacrc32verificationfile.caption msgid "Require a CRC32 verification file" msgstr "Der behøves en CRC32 verifikationsfil" #: tfrmsplitter.cmbxsize.text msgid "1457664B - 3.5\"" msgstr "1,44 MB - 3,5\"" #: tfrmsplitter.grbxfile.caption msgctxt "TFRMSPLITTER.GRBXFILE.CAPTION" msgid "File name" msgstr "Filnavn" #: tfrmsplitter.grbxsize.caption msgid "Size and number of parts" msgstr "Størrelse og antal dele" #: tfrmsplitter.lbdirtarget.caption msgid "Directory &target" msgstr "Opdel filen til mappen:" #: tfrmsplitter.lbfilesource.caption msgid "File &source" msgstr "Kildefil:" #: tfrmsplitter.lblnumberparts.caption msgid "&Number of parts" msgstr "Antal dele:" #: tfrmsplitter.rbtnbyte.caption msgid "&Bytes" msgstr "" #: tfrmsplitter.rbtngigab.caption msgctxt "TFRMSPLITTER.RBTNGIGAB.CAPTION" msgid "&Gigabytes" msgstr "" #: tfrmsplitter.rbtnkilob.caption msgctxt "TFRMSPLITTER.RBTNKILOB.CAPTION" msgid "&Kilobytes" msgstr "" #: tfrmsplitter.rbtnmegab.caption msgctxt "TFRMSPLITTER.RBTNMEGAB.CAPTION" msgid "&Megabytes" msgstr "" #: tfrmstartingsplash.caption msgctxt "TFRMSTARTINGSPLASH.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblbuild.caption msgctxt "TFRMSTARTINGSPLASH.LBLBUILD.CAPTION" msgid "Build" msgstr "" #: tfrmstartingsplash.lblfreepascalver.caption msgctxt "TFRMSTARTINGSPLASH.LBLFREEPASCALVER.CAPTION" msgid "Free Pascal" msgstr "" #: tfrmstartingsplash.lbllazarusver.caption msgctxt "TFRMSTARTINGSPLASH.LBLLAZARUSVER.CAPTION" msgid "Lazarus" msgstr "" #: tfrmstartingsplash.lbloperatingsystem.caption msgid "Operating System" msgstr "Operativsystem" #: tfrmstartingsplash.lblplatform.caption msgid "Platform" msgstr "" #: tfrmstartingsplash.lblrevision.caption msgctxt "TFRMSTARTINGSPLASH.LBLREVISION.CAPTION" msgid "Revision" msgstr "" #: tfrmstartingsplash.lbltitle.caption msgctxt "TFRMSTARTINGSPLASH.LBLTITLE.CAPTION" msgid "Double Commander" msgstr "" #: tfrmstartingsplash.lblversion.caption msgctxt "TFRMSTARTINGSPLASH.LBLVERSION.CAPTION" msgid "Version" msgstr "" #: tfrmstartingsplash.lblwidgetsetver.caption msgid "WidgetsetVer" msgstr "" #: tfrmsymlink.btncancel.caption msgctxt "TFRMSYMLINK.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmsymlink.btnok.caption msgctxt "TFRMSYMLINK.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmsymlink.caption msgid "Create symbolic link" msgstr "Dan symbolsk link" #: tfrmsymlink.lblexistingfile.caption msgctxt "TFRMSYMLINK.LBLEXISTINGFILE.CAPTION" msgid "&Destination that the link will point to" msgstr "&Destination, som linket skal pege på:" #: tfrmsymlink.lbllinktocreate.caption msgctxt "TFRMSYMLINK.LBLLINKTOCREATE.CAPTION" msgid "&Link name" msgstr "Navn på linket:" #: tfrmsyncdirsdlg.btnclose.caption msgctxt "TFRMSYNCDIRSDLG.BTNCLOSE.CAPTION" msgid "Close" msgstr "&Luk" #: tfrmsyncdirsdlg.btncompare.caption msgctxt "TFRMSYNCDIRSDLG.BTNCOMPARE.CAPTION" msgid "Compare" msgstr "&Sammenlign..." #: tfrmsyncdirsdlg.btnseldir1.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR1.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnseldir2.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.BTNSELDIR2.CAPTION" msgid ">>" msgstr ">>" #: tfrmsyncdirsdlg.btnsynchronize.caption msgctxt "tfrmsyncdirsdlg.btnsynchronize.caption" msgid "Synchronize" msgstr "S&ynkroniser..." #: tfrmsyncdirsdlg.caption msgid "Synchronize directories" msgstr "Synkroniser mapper" #: tfrmsyncdirsdlg.cbextfilter.text #, fuzzy msgctxt "TFRMSYNCDIRSDLG.CBEXTFILTER.TEXT" msgid "*.*" msgstr "*.*" #: tfrmsyncdirsdlg.chkasymmetric.caption msgid "asymmetric" msgstr "&Asymetrisk" #: tfrmsyncdirsdlg.chkbycontent.caption msgid "by content" msgstr "&Efter indhold" #: tfrmsyncdirsdlg.chkignoredate.caption msgid "ignore date" msgstr "&Ignorer dato" #: tfrmsyncdirsdlg.chkonlyselected.caption msgid "only selected" msgstr "&Kun valgte" #: tfrmsyncdirsdlg.chksubdirs.caption msgid "Subdirs" msgstr "&Undermapper" #: tfrmsyncdirsdlg.groupbox1.caption msgid "Show:" msgstr "Vis" #: tfrmsyncdirsdlg.headerdg.columns[0].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[0].TITLE.CAPTION" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.headerdg.columns[1].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[1].TITLE.CAPTION" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[2].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[2].TITLE.CAPTION" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[3].title.caption msgid "<=>" msgstr "" #: tfrmsyncdirsdlg.headerdg.columns[4].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[4].TITLE.CAPTION" msgid "Date" msgstr "Dato" #: tfrmsyncdirsdlg.headerdg.columns[5].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[5].TITLE.CAPTION" msgid "Size" msgstr "Størrelse" #: tfrmsyncdirsdlg.headerdg.columns[6].title.caption msgctxt "TFRMSYNCDIRSDLG.HEADERDG.COLUMNS[6].TITLE.CAPTION" msgid "Name" msgstr "Navn" #: tfrmsyncdirsdlg.label1.caption msgid "(in main window)" msgstr "(i hovedvindue)" #: tfrmsyncdirsdlg.menuitemcompare.caption msgctxt "TFRMSYNCDIRSDLG.MENUITEMCOMPARE.CAPTION" msgid "Compare" msgstr "Sammenlign" #: tfrmsyncdirsdlg.menuitemviewleft.caption msgid "View left" msgstr "Vis venstre" #: tfrmsyncdirsdlg.menuitemviewright.caption msgid "View right" msgstr "Vis højre" #: tfrmsyncdirsdlg.sbcopyleft.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.SBCOPYLEFT.CAPTION" msgid "<" msgstr "<" #: tfrmsyncdirsdlg.sbcopyright.caption #, fuzzy msgctxt "TFRMSYNCDIRSDLG.SBCOPYRIGHT.CAPTION" msgid ">" msgstr ">" #: tfrmsyncdirsdlg.sbduplicates.caption msgid "duplicates" msgstr "Dubletter" #: tfrmsyncdirsdlg.sbequal.caption msgid "=" msgstr "" #: tfrmsyncdirsdlg.sbnotequal.caption msgid "!=" msgstr "≠" #: tfrmsyncdirsdlg.sbsingles.caption msgid "singles" msgstr "Unikke" #: tfrmsyncdirsdlg.statusbar1.panels[0].text msgid "Please press \"Compare\" to start" msgstr "Klik venligst \"Sammenlign\" for at starte" #: tfrmsyncdirsperformdlg.caption msgctxt "TFRMSYNCDIRSPERFORMDLG.CAPTION" msgid "Synchronize" msgstr "Synkronisering" #: tfrmsyncdirsperformdlg.chkconfirmoverwrites.caption msgid "Confirm overwrites" msgstr "Bekræft overskrivning" #: tfrmtweakplugin.btnadd.caption msgid "A&dd new" msgstr "Tilføj nyt" #: tfrmtweakplugin.btncancel.caption msgctxt "TFRMTWEAKPLUGIN.BTNCANCEL.CAPTION" msgid "&Cancel" msgstr "&Annuller" #: tfrmtweakplugin.btnchange.caption msgid "C&hange" msgstr "Ændr" #: tfrmtweakplugin.btndefault.caption msgid "De&fault" msgstr "Standard" #: tfrmtweakplugin.btnok.caption msgctxt "TFRMTWEAKPLUGIN.BTNOK.CAPTION" msgid "&OK" msgstr "&OK" #: tfrmtweakplugin.btnremove.caption msgctxt "TFRMTWEAKPLUGIN.BTNREMOVE.CAPTION" msgid "&Remove" msgstr "Fjern" #: tfrmtweakplugin.caption msgctxt "tfrmtweakplugin.caption" msgid "Tweak plugin" msgstr "Tilpas-plugin" #: tfrmtweakplugin.cbpk_caps_by_content.caption msgid "De&tect archive type by content" msgstr "Bestem arkivtype efter indhold" #: tfrmtweakplugin.cbpk_caps_delete.caption msgid "Can de&lete files" msgstr "Kunne ikke slette filer" #: tfrmtweakplugin.cbpk_caps_encrypt.caption msgid "Supports e&ncryption" msgstr "Understøtter kryptering" #: tfrmtweakplugin.cbpk_caps_hide.caption msgid "Sho&w as normal files (hide packer icon)" msgstr "Vis som normale filer (skjul pakke-ikon)" #: tfrmtweakplugin.cbpk_caps_mempack.caption msgid "Supports pac&king in memory" msgstr "Understøtter komprimering i hukommelsen" #: tfrmtweakplugin.cbpk_caps_modify.caption msgid "Can &modify exisiting archives" msgstr "Kan ændre eksisterende arkiver" #: tfrmtweakplugin.cbpk_caps_multiple.caption msgid "&Archive can contain multiple files" msgstr "Arkiv kan indeholde flere filer" #: tfrmtweakplugin.cbpk_caps_new.caption msgid "Can create new archi&ves" msgstr "Kan oprette nye arkiver" #: tfrmtweakplugin.cbpk_caps_options.caption msgid "S&upports the options dialogbox" msgstr "Understøtter indstillings-dialogboks" #: tfrmtweakplugin.cbpk_caps_searchtext.caption msgid "Allow searchin&g for text in archives" msgstr "Tillad tekstsøgning i arkiver" #: tfrmtweakplugin.lbldescription.caption msgctxt "TFRMTWEAKPLUGIN.LBLDESCRIPTION.CAPTION" msgid "&Description:" msgstr "Beskrivelse:" #: tfrmtweakplugin.lbldetectstr.caption msgid "D&etect string:" msgstr "Registrer streng:" #: tfrmtweakplugin.lblextension.caption msgctxt "TFRMTWEAKPLUGIN.LBLEXTENSION.CAPTION" msgid "&Extension:" msgstr "Type:" #: tfrmtweakplugin.lblflags.caption msgid "Flags:" msgstr "Flag" #: tfrmtweakplugin.lblname.caption msgctxt "TFRMTWEAKPLUGIN.LBLNAME.CAPTION" msgid "&Name:" msgstr "Navn:" #: tfrmtweakplugin.lblplugin.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmtweakplugin.lblplugin1.caption msgctxt "TFRMTWEAKPLUGIN.LBLPLUGIN1.CAPTION" msgid "&Plugin:" msgstr "" #: tfrmviewer.actabout.caption msgctxt "tfrmviewer.actabout.caption" msgid "About Viewer..." msgstr "Om fremviseren..." #: tfrmviewer.actabout.hint msgid "Displays the About message" msgstr "Vis \"Om\" dialogen" #: tfrmviewer.actcopyfile.caption msgctxt "tfrmviewer.actcopyfile.caption" msgid "Copy File" msgstr "Kopier fil" #: tfrmviewer.actcopyfile.hint msgctxt "tfrmviewer.actcopyfile.hint" msgid "Copy File" msgstr "Kopier fil" #: tfrmviewer.actdeletefile.caption msgctxt "tfrmviewer.actdeletefile.caption" msgid "Delete File" msgstr "Slet fil" #: tfrmviewer.actdeletefile.hint msgctxt "tfrmviewer.actdeletefile.hint" msgid "Delete File" msgstr "Slet fil" #: tfrmviewer.actloadnextfile.caption msgctxt "tfrmviewer.actloadnextfile.caption" msgid "&Next" msgstr "&Næste" #: tfrmviewer.actloadnextfile.hint msgctxt "TFRMVIEWER.ACTLOADNEXTFILE.HINT" msgid "Load Next File" msgstr "Indlæs næste fil" #: tfrmviewer.actloadprevfile.caption msgctxt "tfrmviewer.actloadprevfile.caption" msgid "&Previous" msgstr "&Forrige" #: tfrmviewer.actloadprevfile.hint msgid "Load Previous File" msgstr "Indlæs forrige fil" #: tfrmviewer.actmirror.caption msgctxt "tfrmviewer.actmirror.caption" msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.actmirror.hint msgctxt "tfrmviewer.actmirror.hint" msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.actmovefile.caption msgctxt "tfrmviewer.actmovefile.caption" msgid "Move File" msgstr "Flyt fil" #: tfrmviewer.actmovefile.hint msgctxt "tfrmviewer.actmovefile.hint" msgid "Move File" msgstr "Flyt fil" #: tfrmviewer.actreload.caption msgctxt "tfrmviewer.actreload.caption" msgid "Reload" msgstr "Genindlæs" #: tfrmviewer.actreload.hint msgid "Reload current file" msgstr "Genindlæs aktuel fil" #: tfrmviewer.actrotate180.caption msgctxt "tfrmviewer.actrotate180.caption" msgid "Rotate 180" msgstr "Rotér 180°" #: tfrmviewer.actrotate180.hint msgctxt "tfrmviewer.actrotate180.hint" msgid "Rotate 180" msgstr "Rotér 180°" #: tfrmviewer.actrotate270.caption msgctxt "tfrmviewer.actrotate270.caption" msgid "Rotate 270" msgstr "Rotér 270°" #: tfrmviewer.actrotate270.hint msgctxt "tfrmviewer.actrotate270.hint" msgid "Rotate 270" msgstr "Rotér 270°" #: tfrmviewer.actrotate90.caption msgctxt "tfrmviewer.actrotate90.caption" msgid "Rotate 90" msgstr "Rotér 90°" #: tfrmviewer.actrotate90.hint msgctxt "tfrmviewer.actrotate90.hint" msgid "Rotate 90" msgstr "Rotér 90°" #: tfrmviewer.actsaveas.caption msgctxt "tfrmviewer.actsaveas.caption" msgid "Save As..." msgstr "Gem &som..." #: tfrmviewer.actsaveas.hint msgid "Save File As..." msgstr "Gemmer filen som..." #: tfrmviewer.actstretchimage.caption msgctxt "tfrmviewer.actstretchimage.caption" msgid "Stretch" msgstr "Stræk" #: tfrmviewer.actstretchimage.hint msgid "Stretch Image" msgstr "Strækker billedet" #: tfrmviewer.btn270.hint msgctxt "TFRMVIEWER.BTN270.HINT" msgid "- 90" msgstr "" #: tfrmviewer.btn90.hint msgctxt "TFRMVIEWER.BTN90.HINT" msgid "+ 90" msgstr "" #: tfrmviewer.btncopyfile.hint msgctxt "TFRMVIEWER.BTNCOPYFILE.HINT" msgid "Copy" msgstr "Kopier" #: tfrmviewer.btncopyfile1.hint msgctxt "TFRMVIEWER.BTNCOPYFILE1.HINT" msgid "Copy" msgstr "Kopier" #: tfrmviewer.btncuttuimage.hint msgctxt "TFRMVIEWER.BTNCUTTUIMAGE.HINT" msgid "Crop" msgstr "Beskær" #: tfrmviewer.btndeletefile.hint msgctxt "TFRMVIEWER.BTNDELETEFILE.HINT" msgid "Delete" msgstr "Slet" #: tfrmviewer.btndeletefile1.hint msgctxt "TFRMVIEWER.BTNDELETEFILE1.HINT" msgid "Delete" msgstr "Slet" #: tfrmviewer.btnfullscreen.hint msgctxt "TFRMVIEWER.BTNFULLSCREEN.HINT" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.btngifmove.caption msgctxt "TFRMVIEWER.BTNGIFMOVE.CAPTION" msgid "||" msgstr "||" #: tfrmviewer.btngiftobmp.caption msgid "S" msgstr "" #: tfrmviewer.btnhightlight.hint msgctxt "TFRMVIEWER.BTNHIGHTLIGHT.HINT" msgid "Highlight" msgstr "Markér" #: tfrmviewer.btnmirror.hint msgctxt "TFRMVIEWER.BTNMIRROR.HINT" msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.btnmovefile.hint msgctxt "TFRMVIEWER.BTNMOVEFILE.HINT" msgid "Move" msgstr "Flyt" #: tfrmviewer.btnmovefile1.hint msgctxt "TFRMVIEWER.BTNMOVEFILE1.HINT" msgid "Move" msgstr "Flyt" #: tfrmviewer.btnnextgifframe.caption msgid "||>" msgstr "" #: tfrmviewer.btnpaint.hint msgctxt "TFRMVIEWER.BTNPAINT.HINT" msgid "Paint" msgstr "Male" #: tfrmviewer.btnprevgifframe.caption msgid "<||" msgstr "" #: tfrmviewer.btnredeye.hint msgid "Red Eyes" msgstr "Røde øjne" #: tfrmviewer.btnresize.hint msgctxt "TFRMVIEWER.BTNRESIZE.HINT" msgid "Resize" msgstr "Tilpas størrelse" #: tfrmviewer.btnundo.hint msgctxt "TFRMVIEWER.BTNUNDO.HINT" msgid "Undo" msgstr "Fortryd" #: tfrmviewer.btnzoomin.hint msgctxt "TFRMVIEWER.BTNZOOMIN.HINT" msgid "Zoom In" msgstr "Zoom ind" #: tfrmviewer.btnzoomout.hint msgctxt "TFRMVIEWER.BTNZOOMOUT.HINT" msgid "Zoom Out" msgstr "Zoom ud" #: tfrmviewer.caption msgctxt "tfrmviewer.caption" msgid "Viewer" msgstr "Fremviser" #: tfrmviewer.cbslideshow.caption msgctxt "TFRMVIEWER.CBSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slideshow" #: tfrmviewer.comboboxpaint.text msgid "Pen" msgstr "Stift" #: tfrmviewer.comboboxwidth.text msgctxt "TFRMVIEWER.COMBOBOXWIDTH.TEXT" msgid "1" msgstr "1" #: tfrmviewer.gboxhightlight.caption msgctxt "TFRMVIEWER.GBOXHIGHTLIGHT.CAPTION" msgid "Highlight" msgstr "Markér" #: tfrmviewer.gboxpaint.caption msgctxt "TFRMVIEWER.GBOXPAINT.CAPTION" msgid "Paint" msgstr "Male" #: tfrmviewer.gboxslideshow.caption msgctxt "TFRMVIEWER.GBOXSLIDESHOW.CAPTION" msgid "Slide Show" msgstr "Slideshow" #: tfrmviewer.gboxview.caption msgctxt "TFRMVIEWER.GBOXVIEW.CAPTION" msgid "View" msgstr "Visning" #: tfrmviewer.lblhightlight.caption msgid "0x0" msgstr "" #: tfrmviewer.mi180.caption msgid "+ 180" msgstr "" #: tfrmviewer.mi270.caption msgctxt "TFRMVIEWER.MI270.CAPTION" msgid "- 90" msgstr "" #: tfrmviewer.mi90.caption msgctxt "TFRMVIEWER.MI90.CAPTION" msgid "+ 90" msgstr "" #: tfrmviewer.miabout.caption msgctxt "TFRMVIEWER.MIABOUT.CAPTION" msgid "About" msgstr "&Om" #: tfrmviewer.mibin.caption msgid "Show as &Bin" msgstr "Binær (fast linjelængde)" #: tfrmviewer.micenter.caption msgid "Center" msgstr "" #: tfrmviewer.micopytoclipboard.caption msgctxt "TFRMVIEWER.MICOPYTOCLIPBOARD.CAPTION" msgid "Copy To Clipboard" msgstr "&Kopier som tekst" #: tfrmviewer.midiv1.caption msgctxt "TFRMVIEWER.MIDIV1.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv2.caption msgctxt "TFRMVIEWER.MIDIV2.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv3.caption msgctxt "TFRMVIEWER.MIDIV3.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv4.caption msgctxt "TFRMVIEWER.MIDIV4.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.midiv5.caption msgctxt "TFRMVIEWER.MIDIV5.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.miedit.caption msgctxt "TFRMVIEWER.MIEDIT.CAPTION" msgid "&Edit" msgstr "&Rediger" #: tfrmviewer.miencoding.caption msgctxt "TFRMVIEWER.MIENCODING.CAPTION" msgid "En&coding" msgstr "&Kodning" #: tfrmviewer.miexit.caption msgctxt "TFRMVIEWER.MIEXIT.CAPTION" msgid "E&xit" msgstr "&Luk" #: tfrmviewer.mifile.caption msgctxt "TFRMVIEWER.MIFILE.CAPTION" msgid "&File" msgstr "&Fil" #: tfrmviewer.mifullscreen.caption msgctxt "TFRMVIEWER.MIFULLSCREEN.CAPTION" msgid "Full Screen" msgstr "Fuldskærm" #: tfrmviewer.migraphics.caption msgid "Graphics" msgstr "Billede/multimedie" #: tfrmviewer.mihex.caption msgid "Show as &Hex" msgstr "Hex" #: tfrmviewer.miimage.caption msgid "&Image" msgstr "B&illede" #: tfrmviewer.milookbook.caption msgid "Show as B&ook" msgstr "B&og" #: tfrmviewer.mimirror.caption msgctxt "TFRMVIEWER.MIMIRROR.CAPTION" msgid "Mirror" msgstr "Spejlvend" #: tfrmviewer.miplugins.caption msgctxt "TFRMVIEWER.MIPLUGINS.CAPTION" msgid "Plugins" msgstr "Plugin" #: tfrmviewer.mipreview.caption msgctxt "TFRMVIEWER.MIPREVIEW.CAPTION" msgid "Preview" msgstr "Preview" #: tfrmviewer.miprint.caption msgid "Print..." msgstr "&Udskriv..." #: tfrmviewer.mirotate.caption msgctxt "TFRMVIEWER.MIROTATE.CAPTION" msgid "Rotate" msgstr "Rotér" #: tfrmviewer.misave.caption msgctxt "TFRMVIEWER.MISAVE.CAPTION" msgid "Save" msgstr "&Gem" #: tfrmviewer.misaveas.caption msgctxt "tfrmviewer.misaveas.caption" msgid "Save As..." msgstr "Gem &som..." #: tfrmviewer.miscreenshot.caption msgctxt "TFRMVIEWER.MISCREENSHOT.CAPTION" msgid "Screenshot" msgstr "Tag et skærmbillede" #: tfrmviewer.misearch.caption msgctxt "TFRMVIEWER.MISEARCH.CAPTION" msgid "Search" msgstr "&Find" #: tfrmviewer.misearchnext.caption msgid "Search next" msgstr "Find &næste" #: tfrmviewer.misearchprev.caption msgid "Search prev" msgstr "Søg &forrige" #: tfrmviewer.miselectall.caption msgctxt "TFRMVIEWER.MISELECTALL.CAPTION" msgid "Select All" msgstr "Vælg &alt" #: tfrmviewer.miseparator.caption msgctxt "TFRMVIEWER.MISEPARATOR.CAPTION" msgid "-" msgstr "-" #: tfrmviewer.mistretch.caption msgctxt "tfrmviewer.mistretch.caption" msgid "Stretch" msgstr "Stræk" #: tfrmviewer.mistretchonlylarge.caption msgid "Stretch only large" msgstr "" #: tfrmviewer.mitext.caption msgid "Show as &Text" msgstr "Kun tekst" #: tfrmviewer.miview.caption msgctxt "TFRMVIEWER.MIVIEW.CAPTION" msgid "&View" msgstr "&Vis" #: tfrmviewer.miwraptext.caption msgid "Show as &Wrap text" msgstr "Ombryd tekst" #: tfrmviewer.mizoomin.caption msgctxt "TFRMVIEWER.MIZOOMIN.CAPTION" msgid "Zoom In" msgstr "Zomm ind" #: tfrmviewer.mizoomout.caption msgctxt "TFRMVIEWER.MIZOOMOUT.CAPTION" msgid "Zoom Out" msgstr "Zomm ud" #: tfrmviewer.pmicopy.caption msgctxt "TFRMVIEWER.PMICOPY.CAPTION" msgid "Copy To Clipboard" msgstr "Kopier til Udklipsholder" #: tfrmviewer.pmiselectall.caption msgctxt "TFRMVIEWER.PMISELECTALL.CAPTION" msgid "Select All" msgstr "Vælg alle" #: tfrmviewoperations.btnstartpause.caption msgctxt "tfrmviewoperations.btnstartpause.caption" msgid "&Start" msgstr "&Start" #: tfrmviewoperations.btnstop.caption msgid "S&top" msgstr "" #: tfrmviewoperations.caption msgctxt "tfrmviewoperations.caption" msgid "File operations" msgstr "Filhandlinger" #: tfrmviewoperations.cbalwaysontop.caption msgid "Always on top" msgstr "&Altid øverst" #: tfrmviewoperations.lblusedragdrop.caption msgid "Use \"drag && drop\" to move operations between queues" msgstr "Brug \"træk && slip\" for at flytte handlinger mellem køerne" #: tfrmviewoperations.mnucanceloperation.caption msgctxt "tfrmviewoperations.mnucanceloperation.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmviewoperations.mnucancelqueue.caption msgctxt "tfrmviewoperations.mnucancelqueue.caption" msgid "Cancel" msgstr "&Annuller" #: tfrmviewoperations.mnunewqueue.caption msgctxt "tfrmviewoperations.mnunewqueue.caption" msgid "New queue" msgstr "Ny kø" #: tfrmviewoperations.mnuoperationshowdetached.caption msgctxt "tfrmviewoperations.mnuoperationshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eget vindue" #: tfrmviewoperations.mnuputfirstinqueue.caption msgid "Put first in queue" msgstr "Sæt først i køen" #: tfrmviewoperations.mnuputlastinqueue.caption msgid "Put last in queue" msgstr "Sæt sidst i køen" #: tfrmviewoperations.mnuqueue.caption msgctxt "tfrmviewoperations.mnuqueue.caption" msgid "Queue" msgstr "Kø" #: tfrmviewoperations.mnuqueue0.caption msgid "Out of queue" msgstr "Fjern fra køen" #: tfrmviewoperations.mnuqueue1.caption msgctxt "tfrmviewoperations.mnuqueue1.caption" msgid "Queue 1" msgstr "Kø 1" #: tfrmviewoperations.mnuqueue2.caption msgctxt "tfrmviewoperations.mnuqueue2.caption" msgid "Queue 2" msgstr "Kø 2" #: tfrmviewoperations.mnuqueue3.caption msgctxt "tfrmviewoperations.mnuqueue3.caption" msgid "Queue 3" msgstr "Kø 3" #: tfrmviewoperations.mnuqueue4.caption msgctxt "tfrmviewoperations.mnuqueue4.caption" msgid "Queue 4" msgstr "Kø 4" #: tfrmviewoperations.mnuqueue5.caption msgctxt "tfrmviewoperations.mnuqueue5.caption" msgid "Queue 5" msgstr "Kø 5" #: tfrmviewoperations.mnuqueueshowdetached.caption msgctxt "tfrmviewoperations.mnuqueueshowdetached.caption" msgid "Show in detached window" msgstr "Vis i eget vindue" #: tfrmviewoperations.tbpauseall.caption msgid "&Pause all" msgstr "Sæt alt på &pause" #: tmultiarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "tmultiarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: twcxarchivecopyoperationoptionsui.lblfileexists.caption msgctxt "twcxarchivecopyoperationoptionsui.lblfileexists.caption" msgid "When file exists" msgstr "Hvis filen findes:" #: twfxplugincopymoveoperationoptionsui.cbworkinbackground.caption msgid "Work in background (separate connection)" msgstr "Til &baggrund" #: twfxplugincopymoveoperationoptionsui.lblfileexists.caption msgctxt "TWFXPLUGINCOPYMOVEOPERATIONOPTIONSUI.LBLFILEEXISTS.CAPTION" msgid "When file exists" msgstr "Hvis fil findes" #: ulng.msgtrytolocatecrcfile #, fuzzy #| msgid "" #| "This file cannot be found and could help to validate final combination of files:\n" #| "%s\n" #| "\n" #| "Could you make it available and press \"OK\" when ready,\n" #| "or press \"CANCEL\" to continue without it?\n" msgid "" "This file cannot be found and could help to validate final combination of files:\n" "%s\n" "\n" "Could you make it available and press \"OK\" when ready,\n" "or press \"CANCEL\" to continue without it?\n" msgstr "" "Filen kan ikke findes men den kunne hjælpe med at validere den endelige kombination af filer:\n" "%s\n" "\n" "Find den venligst og klik \"OK\" når du er klar,\n" "eller klik \"Annuller\" for at fortsætte uden filen?\n" #: ulng.rscancelfilter msgid "Cancel Quick Filter" msgstr "Annullér Hurtigt filter" #: ulng.rscanceloperation msgid "Cancel Current Operation" msgstr "Annuller aktuel handling" #: ulng.rscaptionforaskingfilename msgid "Enter filename, with extension, for dropped text" msgstr "Indtast filnavn med filendelse for den 'sluppede' tekst" #: ulng.rscaptionfortextformattoimport msgid "Text format to import" msgstr "Tekstformat, som skal importeres" #: ulng.rschecksumverifybroken msgid "Broken:" msgstr "Brudt:" #: ulng.rschecksumverifygeneral msgid "General:" msgstr "Generelt:" #: ulng.rschecksumverifymissing msgid "Missing:" msgstr "Mangler:" #: ulng.rschecksumverifyreaderror msgid "Read error:" msgstr "Læsefejl" #: ulng.rschecksumverifysuccess msgid "Success:" msgstr "Lykkedes:" #: ulng.rschecksumverifytext msgid "Enter checksum and select algorithm:" msgstr "Indtast kontrolsum og vælg algoritme:" #: ulng.rschecksumverifytitle msgid "Verify checksum" msgstr "Kontroller kontrolsum" #: ulng.rschecksumverifytotal msgid "Total:" msgstr "" #: ulng.rsclipboardcontainsinvalidtoolbardata msgid "Clipboard doesn't contain any valid toolbar data." msgstr "Udklipsholderen indeholder ingen gyldige data for værktøjslinjen" #: ulng.rscmdcategorylistinorder msgid "All;Active Panel;Left Panel;Right Panel;File Operations;Configuration;Network;Miscellaneous;Parallel Port;Print;Mark;Security;Clipboard;FTP;Navigation;Help;Window;Command Line;Tools;View;User;Tabs;Sorting;Log" msgstr "" #: ulng.rscmdkindofsort msgid "Legacy sorted;A-Z sorted" msgstr "" #: ulng.rscolattr msgid "Attr" msgstr "Attribut" #: ulng.rscoldate msgctxt "ulng.rscoldate" msgid "Date" msgstr "Dato" #: ulng.rscolext msgid "Ext" msgstr "Type" #: ulng.rscolname msgctxt "ulng.rscolname" msgid "Name" msgstr "Navn" #: ulng.rscolsize msgctxt "ulng.rscolsize" msgid "Size" msgstr "Størrelse" #: ulng.rsconfcolalign msgid "Align" msgstr "Justering" #: ulng.rsconfcolcaption msgid "Caption" msgstr "Titel" #: ulng.rsconfcolconfig msgid "Config" msgstr "Indstilling" #: ulng.rsconfcoldelete msgctxt "ulng.rsconfcoldelete" msgid "Delete" msgstr "Slet" #: ulng.rsconfcolfieldcont msgid "Field contents" msgstr "Feltindhold" #: ulng.rsconfcolmove msgctxt "ulng.rsconfcolmove" msgid "Move" msgstr "Flyt" #: ulng.rsconfcolwidth msgctxt "ulng.rsconfcolwidth" msgid "Width" msgstr "Bredde" #: ulng.rsconfcustheader msgid "Customize column" msgstr "Tilføj kolonne" #: ulng.rsconfigurationfileassociation msgid "Configure file association" msgstr "" #: ulng.rsconfirmexecution msgid "Confirming command line and parameters" msgstr "" #: ulng.rscopynametemplate msgid "Copy (%d) %s" msgstr "Kopier (%d) %s" #: ulng.rsdefaultimporteddctoolbarhint msgid "Imported DC toolbar" msgstr "Importeret DC-værktøjslinje" #: ulng.rsdefaultimportedtctoolbarhint msgid "Imported TC toolbar" msgstr "Importeret DC-værktøjslinje" #: ulng.rsdefaultsuffixdroppedtext msgid "_DroppedText" msgstr "_'Sluppet' tekst" #: ulng.rsdefaultsuffixdroppedtexthtmlfilename msgid "_DroppedHTMLtext" msgstr "_'Sluppet' HTML-tekst" #: ulng.rsdefaultsuffixdroppedtextrichtextfilename msgid "_DroppedRichtext" msgstr "_'Sluppet' RTF" #: ulng.rsdefaultsuffixdroppedtextsimplefilename msgid "_DroppedSimpleText" msgstr "_'Sluppet' simpel tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf16filename msgid "_DroppedUnicodeUTF16text" msgstr "_'Sluppet' UnicodeUTF16-tekst" #: ulng.rsdefaultsuffixdroppedtextunicodeutf8filename msgid "_DroppedUnicodeUTF8text" msgstr "_'Sluppet' UnicodeUTF8-tekst" #: ulng.rsdiffadds msgid " Adds: " msgstr "Føj til:" #: ulng.rsdiffdeletes msgid " Deletes: " msgstr "Sletter:" #: ulng.rsdifffilesidentical msgid "The two files are identical!" msgstr "" #: ulng.rsdiffmatches msgid " Matches: " msgstr "Matcher:" #: ulng.rsdiffmodifies msgid " Modifies: " msgstr "Ændret:" #: ulng.rsdlgallopcomplete msgid "All operations completed" msgstr "Alle handlinger afsluttet" #: ulng.rsdlgallopprogress msgid "Progress of all operations %d %%" msgstr "Samlet status for alle handlinger %d %%" #: ulng.rsdlgbuttonabort msgid "Ab&ort" msgstr "Afbryd" #: ulng.rsdlgbuttonall msgctxt "ulng.rsdlgbuttonall" msgid "A&ll" msgstr "&Alle" #: ulng.rsdlgbuttonappend msgid "A&ppend" msgstr "&Tilføj" #: ulng.rsdlgbuttonautorenamesource msgid "A&uto-rename source files" msgstr "A&uto-omdøb kildefiler" #: ulng.rsdlgbuttoncancel msgctxt "ulng.rsdlgbuttoncancel" msgid "&Cancel" msgstr "Af&bryd" #: ulng.rsdlgbuttoncontinue msgid "&Continue" msgstr "Fortsæt" #: ulng.rsdlgbuttoncopyinto msgid "Copy &Into" msgstr "Kopier ind i" #: ulng.rsdlgbuttoncopyintoall msgid "Copy Into &All" msgstr "Kopier ind i alle" #: ulng.rsdlgbuttonexitprogram msgid "E&xit program" msgstr "Afslut program" #: ulng.rsdlgbuttonignoreall msgid "I&gnore All" msgstr "I&gnorér alle" #: ulng.rsdlgbuttonno msgid "&No" msgstr "&Nej" #: ulng.rsdlgbuttonnone msgid "Non&e" msgstr "Ing&en" #: ulng.rsdlgbuttonok msgctxt "ulng.rsdlgbuttonok" msgid "&OK" msgstr "&OK" #: ulng.rsdlgbuttonother msgid "Ot&her" msgstr "Flere &valg >>" #: ulng.rsdlgbuttonoverwrite msgid "&Overwrite" msgstr "&Overskriv" #: ulng.rsdlgbuttonoverwriteall msgid "Overwrite &All" msgstr "Overskriv &alle" #: ulng.rsdlgbuttonoverwritelarger msgid "Overwrite All &Larger" msgstr "Overskriv alle større" #: ulng.rsdlgbuttonoverwriteolder msgid "Overwrite All Ol&der" msgstr "Overskriv &ældre" #: ulng.rsdlgbuttonoverwritesmaller msgid "Overwrite All S&maller" msgstr "Overskriv alle mindre" #: ulng.rsdlgbuttonrename msgctxt "ulng.rsdlgbuttonrename" msgid "R&ename" msgstr "Omd&øb" #: ulng.rsdlgbuttonresume msgid "&Resume" msgstr "&Tilføj" #: ulng.rsdlgbuttonretry msgid "Re&try" msgstr "Forsøg igen" #: ulng.rsdlgbuttonskip msgid "&Skip" msgstr "&Spring over" #: ulng.rsdlgbuttonskipall msgid "S&kip All" msgstr "S&pring alle over" #: ulng.rsdlgbuttonyes msgid "&Yes" msgstr "&Ja" #: ulng.rsdlgcalcstatistics msgid "Calculate files and folders" msgstr "Beregn filer og mapper" #: ulng.rsdlgchecksumcalc #, fuzzy #| msgid "Calculate check sum..." msgctxt "ulng.rsdlgchecksumcalc" msgid "Calculate checksum..." msgstr "Dan kontrolsumfil" #: ulng.rsdlgchecksumverify #, fuzzy #| msgid "Verify check sum..." msgctxt "ulng.rsdlgchecksumverify" msgid "Verify checksum..." msgstr "Kontroller kontrolsum..." #: ulng.rsdlgcp msgctxt "ulng.rsdlgcp" msgid "Copy file(s)" msgstr "Kopier fil(er)" #: ulng.rsdlgdel msgid "Delete file(s)" msgstr "Slet fil(er)" #: ulng.rsdlgmv msgid "Move file(s)" msgstr "Flyt fil(er)" #: ulng.rsdlgoppause msgctxt "ulng.rsdlgoppause" msgid "Pau&se" msgstr "Pau&se" #: ulng.rsdlgopstart msgctxt "ulng.rsdlgopstart" msgid "&Start" msgstr "&OK" #: ulng.rsdlgqueue msgctxt "ulng.rsdlgqueue" msgid "Queue" msgstr "Kø" #: ulng.rsdlgspeed msgid "Speed %s/s" msgstr "Hastighed %s/s" #: ulng.rsdlgspeedtime msgid "Speed %s/s, time remaining %s" msgstr "Hastighed %s/s, resterende tid %s" #: ulng.rsdlgsplit msgctxt "ulng.rsdlgsplit" msgid "Split" msgstr "Opdel" #: ulng.rsdlgwipe msgid "Wipe file(s)" msgstr "Slet fil(er) sikkert" #: ulng.rsdrivenolabel msgid "<no label>" msgstr "<ingen drev-etiket>" #: ulng.rsdrivenomedia msgid "<no media>" msgstr "<intet medie>" #: ulng.rseditabouttext msgid "Internal Editor of Double Commander." msgstr "Double Commaders interne editor" #: ulng.rseditgotolinequery msgid "Goto line:" msgstr "Gå til linje" #: ulng.rseditgotolinetitle msgctxt "ulng.rseditgotolinetitle" msgid "Goto Line" msgstr "Gå til linje" #: ulng.rseditnewfile msgid "new.txt" msgstr "ny.txt" #: ulng.rseditnewfilename msgid "Filename:" msgstr "Filnavn:" #: ulng.rseditnewopen msgid "Open file" msgstr "Åbn fil" #: ulng.rseditsearchback msgid "&Backward" msgstr "Til&bage" #: ulng.rseditsearchcaption msgctxt "ulng.rseditsearchcaption" msgid "Search" msgstr "Søg" #: ulng.rseditsearchfrw msgid "&Forward" msgstr "&Fremad" #: ulng.rseditsearchreplace msgctxt "ulng.rseditsearchreplace" msgid "Replace" msgstr "Erstat" #: ulng.rseditwithexternaleditor msgid "with external editor" msgstr "" #: ulng.rseditwithinternaleditor msgid "with internal editor" msgstr "" #: ulng.rsexecuteviashell msgctxt "ulng.rsexecuteviashell" msgid "Execute via shell" msgstr "" #: ulng.rsexecuteviaterminalclose msgctxt "ulng.rsexecuteviaterminalclose" msgid "Execute via terminal and close" msgstr "" #: ulng.rsexecuteviaterminalstayopen msgctxt "ulng.rsexecuteviaterminalstayopen" msgid "Execute via terminal and stay open" msgstr "" #: ulng.rsfavtabspanelsideselection msgid "Left;Right;Active;Inactive;Both;None" msgstr "" #: ulng.rsfavtabssavedirhistory msgid "No;Yes" msgstr "" #: ulng.rsfilenameexportedtcbarprefix msgid "Exported_from_DC" msgstr "Eksporteret_fra_DC" #: ulng.rsfileopdirectoryexistsoptions msgid "Ask;Overwrite;Copy into;Skip" msgstr "Spørg bruger;Overskriv alle filer;Kopier alle filer;Spring alle filer over" #: ulng.rsfileopfileexistsoptions msgid "Ask;Overwrite;Overwrite Older;Skip" msgstr "Spørg bruger;Overskriv alle filer;Overskriv alle ældre filer;Spring alle filer over" #: ulng.rsfileopsetpropertyerroroptions msgctxt "ulng.rsfileopsetpropertyerroroptions" msgid "Ask;Don't set anymore;Ignore errors" msgstr "Spørg bruger;Undlad indstilling;Ignorér fejl" #: ulng.rsfilterstatus msgid "FILTER" msgstr "" #: ulng.rsfinddefinetemplate msgid "Define template" msgstr "Definer valg" #: ulng.rsfinddepth msgid "%s level(s)" msgstr "%s niveau(er)" #: ulng.rsfinddepthall msgid "all (unlimited depth)" msgstr "Alle (ubegrænset dybde)" #: ulng.rsfinddepthcurdir msgid "current dir only" msgstr "Kun aktuelle mappe" #: ulng.rsfinddirnoex msgctxt "ulng.rsfinddirnoex" msgid "Directory %s does not exist!" msgstr "Mappen %s findes ikke!" #: ulng.rsfindfound msgctxt "ulng.rsfindfound" msgid "Found: %d" msgstr "Fundet: %d" #: ulng.rsfindsavetemplatecaption msgid "Save search template" msgstr "Gem søgningen som skabelon" #: ulng.rsfindsavetemplatetitle msgid "Template name:" msgstr "Navn på skabelon:" #: ulng.rsfindscanned msgctxt "ulng.rsfindscanned" msgid "Scanned: %d" msgstr "Skannet: %d" #: ulng.rsfindscanning msgid "Scanning" msgstr "Skanner" #: ulng.rsfindsearchfiles msgctxt "ulng.rsfindsearchfiles" msgid "Find files" msgstr "Find filer" #: ulng.rsfindtimeofscan msgid "Time of scan: " msgstr "" #: ulng.rsfindwherebeg msgid "Begin at" msgstr "Start ved" #: ulng.rsfreemsg msgid "Free %s from %s bytes" msgstr "Ledig plads: %sB. Kapacitet: %sB" #: ulng.rsfreemsgshort msgid "%s bytes free" msgstr "%sB ledige" #: ulng.rsfuncatime msgid "Access date/time" msgstr "Åbnet dato/tid" #: ulng.rsfuncattr msgctxt "ulng.rsfuncattr" msgid "Attributes" msgstr "Attributter" #: ulng.rsfunccomment msgctxt "ulng.rsfunccomment" msgid "Comment" msgstr "Kommentar" #: ulng.rsfunccompressedsize msgid "Compressed size" msgstr "Komprimeret størrelse" #: ulng.rsfuncctime msgid "Creation date/time" msgstr "Oprettet dato/tid" #: ulng.rsfuncext msgid "Extension" msgstr "Type" #: ulng.rsfuncgroup msgctxt "ulng.rsfuncgroup" msgid "Group" msgstr "Gruppe" #: ulng.rsfunchtime msgid "Change date/time" msgstr "" #: ulng.rsfunclinkto msgid "Link to" msgstr "Link til" #: ulng.rsfuncmtime msgid "Modification date/time" msgstr "Ændret dato/tid" #: ulng.rsfuncname msgctxt "ulng.rsfuncname" msgid "Name" msgstr "Navn" #: ulng.rsfuncnamenoext msgctxt "ulng.rsfuncnamenoext" msgid "Name without extension" msgstr "Navn uden filendelse" #: ulng.rsfuncowner msgctxt "ulng.rsfuncowner" msgid "Owner" msgstr "Ejer" #: ulng.rsfuncpath msgctxt "ulng.rsfuncpath" msgid "Path" msgstr "Sti:" #: ulng.rsfuncsize msgctxt "ulng.rsfuncsize" msgid "Size" msgstr "Størrelse" #: ulng.rsfunctype msgid "Type" msgstr "Type" #: ulng.rsharderrcreate msgid "Error creating hardlink." msgstr "Kunne ikke danne hårdt link." #: ulng.rshotdirforcesortingorderchoices msgid "none;Name, a-z;Name, z-a;Ext, a-z;Ext, z-a;Size 9-0;Size 0-9;Date 9-0;Date 0-9" msgstr "" #: ulng.rshotdirnothingtoimport msgid "Sorry, nothing detected to import!" msgstr "Beklager, men der er ikke noget at importere" #: ulng.rshotdirwarningabortrestorebackup msgid "" "Warning! When restoring a .hotlist backup file, this will erase existing list to replace by the imported one.\n" "\n" "Are you sure you want to proceed?\n" msgstr "" #: ulng.rshotkeycategorycopymovedialog msgid "Copy/Move Dialog" msgstr "Kopierings-/flytningsdialog" #: ulng.rshotkeycategorydiffer msgctxt "ulng.rshotkeycategorydiffer" msgid "Differ" msgstr "Sammenligningsprogram" #: ulng.rshotkeycategoryeditcommentdialog msgid "Edit Comment Dialog" msgstr "Rediger kommentar dialog" #: ulng.rshotkeycategoryeditor #, fuzzy msgctxt "ulng.rshotkeycategoryeditor" msgid "Editor" msgstr "Editor" #: ulng.rshotkeycategoryfindfiles #, fuzzy msgctxt "ulng.rshotkeycategoryfindfiles" msgid "Find files" msgstr "Find filer" #: ulng.rshotkeycategorymain msgid "Main" msgstr "Hovedvindue" #: ulng.rshotkeycategoryviewer msgctxt "ulng.rshotkeycategoryviewer" msgid "Viewer" msgstr "Fremviser" #: ulng.rsimporttoolbarproblem msgid "Cannot find reference to default bar file" msgstr "Kan ikke finde reference til standard-panelfil" #: ulng.rslinkmsgok msgid "Linker complete" msgstr "Samler færdig" #: ulng.rsmarkminus msgid "Unselect mask" msgstr "Indskrænk valg" #: ulng.rsmarkplus msgid "Select mask" msgstr "Udvid valg" #: ulng.rsmaskinput msgid "Input mask:" msgstr "Angiv filtype:" #: ulng.rsmenuconfigurecolumnsalreadyexists msgid "A columns view with that name already exists." msgstr "" #: ulng.rsmenuconfigurecolumnssavetochange msgid "To change current editing colmuns view, either SAVE, COPY or DELETE current editing one" msgstr "" #: ulng.rsmenuconfigurecustomcolumns msgid "Configure custom columns" msgstr "Indstillinger for kolonner" #: ulng.rsmenuconfigureentercustomcolumnname msgid "Enter new custom columns name" msgstr "" #: ulng.rsmenuconfigurethiscustomcolumn msgid "Configure this custom columns view" msgstr "Opsætning af brugerbestemt visning..." #: ulng.rsmnuactions msgctxt "ulng.rsmnuactions" msgid "Actions" msgstr "Handlinger" #: ulng.rsmnudisconnectnetworkdrive msgid "Disconnect Network Drive..." msgstr "" #: ulng.rsmnuedit msgctxt "ulng.rsmnuedit" msgid "Edit" msgstr "Rediger" #: ulng.rsmnueject msgid "Eject" msgstr "Skub ud" #: ulng.rsmnuextracthere msgid "Extract here..." msgstr "" #: ulng.rsmnumapnetworkdrive msgid "Map Network Drive..." msgstr "" #: ulng.rsmnumount msgid "Mount" msgstr "Mount" #: ulng.rsmnunew msgctxt "ulng.rsmnunew" msgid "New" msgstr "Ny" #: ulng.rsmnunomedia msgid "No media available" msgstr "Kan ikke finde medie" #: ulng.rsmnuopen #, fuzzy msgctxt "ulng.rsmnuopen" msgid "Open" msgstr "Åbn" #: ulng.rsmnuopenwith msgid "Open with" msgstr "Åbn med..." #: ulng.rsmnuopenwithother msgctxt "ulng.rsmnuopenwithother" msgid "Other..." msgstr "Andre..." #: ulng.rsmnupackhere msgid "Pack here..." msgstr "" #: ulng.rsmnusortby msgid "Sort by" msgstr "Sortér efter" #: ulng.rsmnuumount msgid "Unmount" msgstr "Skub eksternt medie ud" #: ulng.rsmnuview msgctxt "ulng.rsmnuview" msgid "View" msgstr "Vis" #: ulng.rsmsgaccount msgid "Account:" msgstr "Konto:" #: ulng.rsmsgarchivercustomparams msgid "Additional parameters for archiver command-line:" msgstr "Ekstra parametre til pakkeprograms kommandolinje:" #: ulng.rsmsgbadcrc32 msgid "" "Bad CRC32 for resulting file:\n" "\"%s\"\n" "\n" "Do you want to keep the resulting corrupted file anyway?\n" msgstr "" #: ulng.rsmsgcannotcopymoveitself msgid "You can not copy/move a file \"%s\" to itself!" msgstr "Du kan ikke kopiere/flytte filen \"%s\" til sig selv!" #: ulng.rsmsgcannotdeletedirectory msgid "Cannot delete directory %s" msgstr "Kan ikke slette mappen %s" #: ulng.rsmsgchdirfailed msgid "ChDir to [%s] failed!" msgstr "Ændre arbejdsmappe [ChDir] til [%s] mislykkedes!" #: ulng.rsmsgcloseallinactivetabs msgid "Remove all inactive tabs?" msgstr "Luk alle inaktive faneblade?" #: ulng.rsmsgcloselockedtab msgid "This tab (%s) is locked! Close anyway?" msgstr "Fanebladet (%s) er låst! Luk alligevel?" #: ulng.rsmsgcolumnsmodifiedwanttosave msgid "" "Options regarding columns view have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgconfirmquit msgid "Are you sure you want to quit?" msgstr "Er du sikker på at ville afslutte?" #: ulng.rsmsgcopybackward msgid "The file %s has changed. Do you want to copy it backward?" msgstr "" #: ulng.rsmsgcouldnotcopybackward msgid "Could not copy backward - do you want to keep the changed file?" msgstr "" #: ulng.rsmsgcpfldr msgid "Copy %d selected files/directories?" msgstr "Kopier %d valgte filer/mapper til:" #: ulng.rsmsgcpsel msgid "Copy selected \"%s\"?" msgstr "Kopier \"%s\" til:" #: ulng.rsmsgcreateanewfiletype msgid "< Create a new file type \"%s files\" >" msgstr "" #: ulng.rsmsgdctoolbarwheretosave msgid "Enter location and filename where to save a DC Toolbar file" msgstr "Indtast placering og filnavn, for hvor DC værktøjslinjefilen skal gemmes" #: ulng.rsmsgdefaultcustomactionname msgid "Custom action" msgstr "" #: ulng.rsmsgdeletepartiallycopied msgid "Delete the partially copied file ?" msgstr "Slet den delvist kopierede fil ?" #: ulng.rsmsgdelfldr msgid "Delete %d selected files/directories?" msgstr "Er du sikker på, at du vil slette de %d valgte filer/mapper?" #: ulng.rsmsgdelfldrt msgid "Delete %d selected files/directories into trash can?" msgstr "Vil du flytte disse %d elementer til Papirkurv?" #: ulng.rsmsgdelsel msgid "Delete selected \"%s\"?" msgstr "Er du sikker på, at du vil slette den valgte fil \"%s\" ?" #: ulng.rsmsgdelselt msgid "Delete selected \"%s\" into trash can?" msgstr "Vil du flytte \"%s\" til Papirkurv?" #: ulng.rsmsgdeltotrashforce msgid "Can not delete \"%s\" to trash! Delete directly?" msgstr "Kan ikke flytte \"%s\" til Papirkurv! Slet direkte?" #: ulng.rsmsgdisknotavail msgid "Disk is not available" msgstr "Drevet er ikke tilgængeligt." #: ulng.rsmsgdraganddropmodifiedwanttosave msgid "Options regarding mouse drag && drop have been modified. Do you want to save before to exit?" msgstr "Indstillingerne for træk && slip er ændret. Vil du gemme de nye indstillinger, før der afsluttes?" #: ulng.rsmsgentercustomaction msgid "Enter custom action name:" msgstr "" #: ulng.rsmsgenterfileext msgid "Enter file extension:" msgstr "Indtast filendelse:" #: ulng.rsmsgentername msgid "Enter name:" msgstr "Indtast navn:" #: ulng.rsmsgenternewfiletypename msgid "Enter name of new file type to create for extension \"%s\"" msgstr "" #: ulng.rsmsgerrbadarchive msgid "CRC error in archive data" msgstr "CRC-fejl i arkivdata" #: ulng.rsmsgerrbaddata msgid "Data is bad" msgstr "Datafejl" #: ulng.rsmsgerrcannotconnect msgid "Can not connect to server: \"%s\"" msgstr "Kan ikke forbinde til server: \"%s\"" #: ulng.rsmsgerrcannotcopyfile msgid "Cannot copy file %s to %s" msgstr "Kan ikke kopiere fil %s til %s" #: ulng.rsmsgerrcreatefiledirectoryexists msgid "There already exists a directory named \"%s\"." msgstr "Der findes allerede en mappe med navnet \"%s\"." #: ulng.rsmsgerrdatenotsupported msgid "Date %s is not supported" msgstr "Datoen %s understøttes ikke" #: ulng.rsmsgerrdirexists msgid "Directory %s exists!" msgstr "Fejl: Mappen \"%s\" eksisterer allerede! Angiv et andet navn." #: ulng.rsmsgerreaborted msgid "Function aborted by user" msgstr "Brugerafbrydelse" #: ulng.rsmsgerreclose msgid "Error closing file" msgstr "Kunne ikke lukke filen" #: ulng.rsmsgerrecreate msgid "Cannot create file" msgstr "Kan ikke danne fil" #: ulng.rsmsgerrendarchive msgid "No more files in archive" msgstr "Ikke flere filer i arkivet" #: ulng.rsmsgerreopen msgid "Cannot open existing file" msgstr "Kan ikke åbne eksisterende fil" #: ulng.rsmsgerreread msgid "Error reading from file" msgstr "Kunne ikke læse fil" #: ulng.rsmsgerrewrite msgid "Error writing to file" msgstr "Kunne ikke skrive til fil" #: ulng.rsmsgerrforcedir msgid "Can not create directory %s!" msgstr "Kan ikke oprette mappe %s!" #: ulng.rsmsgerrinvalidlink msgid "Invalid link" msgstr "Ugyldigt link" #: ulng.rsmsgerrnofiles msgid "No files found" msgstr "Ingen filer fundet" #: ulng.rsmsgerrnomemory msgid "Not enough memory" msgstr "Ikke nok hukommelse" #: ulng.rsmsgerrnotsupported msgid "Function not supported!" msgstr "Funktionen understøttes ikke!" #: ulng.rsmsgerrorincontextmenucommand msgid "Error in context menu command" msgstr "Fejl i kontekstmenuens kommando" #: ulng.rsmsgerrorloadingconfiguration msgid "Error when loading configuration" msgstr "Fejl ved indlæsning af konfigurationen" #: ulng.rsmsgerrregexpsyntax msgid "Syntax error in regular expression!" msgstr "Syntaksfejl i regulære udtryk!" #: ulng.rsmsgerrrename msgid "Cannot rename file %s to %s" msgstr "Kan ikke omdøbe fil %s til %s" #: ulng.rsmsgerrsaveassociation msgid "Can not save association!" msgstr "Kan ikke gemme associationen" #: ulng.rsmsgerrsavefile msgid "Cannot save file" msgstr "Kan ikke gemme fil" #: ulng.rsmsgerrsetattribute msgid "Can not set attributes for \"%s\"" msgstr "Kan ikke indstille attributter for \"%s\"" #: ulng.rsmsgerrsetdatetime msgid "Can not set date/time for \"%s\"" msgstr "Kan ikke indstille dato/tid for \"%s\"" #: ulng.rsmsgerrsetownership msgid "Can not set owner/group for \"%s\"" msgstr "Kan ikke oprette ejer/gruppe for \"%s\"" #: ulng.rsmsgerrsetpermissions msgid "Can not set permissions for \"%s\"" msgstr "" #: ulng.rsmsgerrsmallbuf msgid "Buffer too small" msgstr "Bufferen er for lille" #: ulng.rsmsgerrtoomanyfiles msgid "Too many files to pack" msgstr "For mange filer at pakke" #: ulng.rsmsgerrunknownformat msgid "Archive format unknown" msgstr "Arkivformat ukendt" #: ulng.rsmsgfavoritetabsdeleteallentries msgid "Are you sure you want to remove all entries of your Favorite Tabs? (There is no \"undo\" to this action!)" msgstr "" #: ulng.rsmsgfavoritetabsdraghereentry msgid "Drag here other entries" msgstr "" #: ulng.rsmsgfavoritetabsendofmenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabsendofmenu" msgid "(end of sub menu)" msgstr "(enden af undermenu)" #: ulng.rsmsgfavoritetabsentername msgid "Enter a name this Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabsenternametitle msgid "Saving a new Favorite Tabs entry" msgstr "" #: ulng.rsmsgfavoritetabserrorloading msgid "Error loading Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabserrorsaving msgid "Error saving Favorite Tabs..." msgstr "" #: ulng.rsmsgfavoritetabsexportedsuccessfully msgid "Number of Favorite Tabs exported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsextramode msgid "Default extra setting for save dir history for new Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabshasbeenadded msgid "Favorite Tabs have been added in memory!" msgstr "" #: ulng.rsmsgfavoritetabsimportedsuccessfully msgid "Number of file(s) imported successfully: %d on %d" msgstr "" #: ulng.rsmsgfavoritetabsimportsubmenuname msgid "Legacy tabs imported" msgstr "" #: ulng.rsmsgfavoritetabsimporttitle msgid "Select .tab file(s) to import (could be more than one at the time!)" msgstr "" #: ulng.rsmsgfavoritetabsmodifiednoimport msgid "Last Favorite Tabs modification have been saved yet. Do you want to save them prior to continue?" msgstr "" #: ulng.rsmsgfavoritetabsmodifiedwanttosave msgid "Favorite Tabs have been modified. Do you want to save before to exit?" msgstr "" #: ulng.rsmsgfavoritetabsname #, fuzzy msgctxt "ulng.rsmsgfavoritetabsname" msgid "Name" msgstr "Navn" #: ulng.rsmsgfavoritetabsnamesample msgid "This will load your Favorites Tabs entry setup called %s" msgstr "" #: ulng.rsmsgfavoritetabssavelastloadover msgid "Save to Favorite Tabs over last loaded entry (%s)" msgstr "" #: ulng.rsmsgfavoritetabssimplemenu #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimplemenu" msgid "Menu name:" msgstr "Menunavn:" #: ulng.rsmsgfavoritetabssimplemode msgctxt "ulng.rsmsgfavoritetabssimplemode" msgid "Keep saving dir history with Favorite Tabs:" msgstr "" #: ulng.rsmsgfavoritetabssimpleseparator #, fuzzy msgctxt "ulng.rsmsgfavoritetabssimpleseparator" msgid "(separator)" msgstr "(separator)" #: ulng.rsmsgfavoritetabssubmenuname #, fuzzy msgctxt "ulng.rsmsgfavoritetabssubmenuname" msgid "Submenu name" msgstr "Undermenus navn" #: ulng.rsmsgfavoritetabsthiswillloadfavtabs msgid "This will load the Favorite Tabs: \"%s\"" msgstr "" #: ulng.rsmsgfavortietabssaveoverexisting msgid "Save current tabs over existing Favorite Tabs entry" msgstr "" #: ulng.rsmsgfileassociationsextramodifiedwanttosave msgid "" "File extension associations extra options have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfileassociationsmodifiedwanttosave msgid "" "File extension associations have been modified.\n" "\n" "Do you want to save before to exit?\n" msgstr "" #: ulng.rsmsgfilechangedsave msgid "File %s changed, save?" msgstr "" "Filen \"%s\" er ændret.\n" "Vil du gemme?\n" #: ulng.rsmsgfileexistsfileinfo msgid "%s bytes, %s" msgstr "" #: ulng.rsmsgfileexistsoverwrite msgid "Overwrite:" msgstr "Overskriv:" #: ulng.rsmsgfileexistsrwrt msgid "File %s exists, overwrite?" msgstr "" "Filen \"%s\" findes allerede.\n" "Vil du overskrive?\n" #: ulng.rsmsgfileexistswithfile msgid "With file:" msgstr "Med fil:" #: ulng.rsmsgfilenotfound msgid "File \"%s\" not found." msgstr "Filen \"\"%s\" ikke funde" #: ulng.rsmsgfileoperationsactive msgid "File operations active" msgstr "Aktive filhandlinger" #: ulng.rsmsgfileoperationsactivelong msgid "Some file operations have not yet finished. Closing Double Commander may result in data loss." msgstr "Der er uafsluttede filhandlinger. Lukkes Double Commander kan det medføre tab af data." #: ulng.rsmsgfileoperationsmodifiedwanttosave msgid "Options regarding file operations have been modified. Do you want to save before to exit?" msgstr "Indstillingerne for filhandlinger er ændret. Vil du gemme de nye indstillinger, før der afsluttes?" #: ulng.rsmsgfilepanelcolormodifiedwanttosave msgid "" "Options regarding panel color have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgfilereadonly msgid "File %s is marked as read-only. Delete it?" msgstr "Filen %s er markeret som skrivebeskyttet. Vil du slette den?" #: ulng.rsmsgfilesizetoobig msgid "The file size of \"%s\" is too big for destination file system!" msgstr "Størrelsen på filen \"%s\" er for stor til destinationens filsystem!" #: ulng.rsmsgfolderexistsrwrt msgid "Folder %s exists, overwrite?" msgstr "" "Mappen %s eksisterer.\n" "Vil du overskrive?\n" #: ulng.rsmsgfollowsymlink msgid "Follow symlink \"%s\"?" msgstr "Følg symlink \"%s\"?" #: ulng.rsmsgfortextformattoimport msgid "Select the text format to import" msgstr "Vælg tekstformatet som skal importeres" #: ulng.rsmsghotdiraddselecteddirectories msgid "Add %d selected dirs" msgstr "Tilføj %d valgte mapper" #: ulng.rsmsghotdiraddselecteddirectory msgid "Add selected dir: " msgstr "Tilføj valgte mapper: " #: ulng.rsmsghotdiraddthisdirectory msgid "Add current dir: " msgstr "Tilføj aktuel mappe: " #: ulng.rsmsghotdircommandname msgid "Do command" msgstr "Udfør kommando" #: ulng.rsmsghotdircommandsample msgid "cm_somthing" msgstr "cm_noget" #: ulng.rsmsghotdirconfighotlist msgctxt "ulng.rsmsghotdirconfighotlist" msgid "Configuration of Directory Hotlist" msgstr "Konfiguration af Favoritmapper" #: ulng.rsmsghotdirdeleteallentries msgid "Are you sure you want to remove all entries of your Directory Hotlist? (There is no \"undo\" to this action!)" msgstr "Er du sikker på, at du vil fjerne alle poster i din Favoritmappe? (Handlingen kan ikke fortrydes!)" #: ulng.rsmsghotdirdemocommand msgid "This will execute the following command:" msgstr "Dette udfører følgende kommando:" #: ulng.rsmsghotdirdemoname msgid "This is hot dir named " msgstr "Det er navnet på Favoritmappen " #: ulng.rsmsghotdirdemopath msgid "This will change active frame to the following path:" msgstr "Dette ændrer det aktive vindue til følgende sti:" #: ulng.rsmsghotdirdemotarget msgid "And inactive frame would change to the following path:" msgstr "Og det inaktive vindue ændres til følgende sti:" #: ulng.rsmsghotdirerrorbackuping msgid "Error backuping entries..." msgstr "Backup af posteringerne mislykkedes..." #: ulng.rsmsghotdirerrorexporting msgid "Error exporting entries..." msgstr "Eksport af posteringerne mislykkedes..." #: ulng.rsmsghotdirexportall msgid "Export all!" msgstr "Eksportér alle" #: ulng.rsmsghotdirexporthotlist msgid "Export Directory Hotlist - Select the entries you want to export" msgstr "Eksportér Favoritmappe - Vælg de posteringer, som du vil eksportere" #: ulng.rsmsghotdirexportsel msgid "Export selected" msgstr "Eksport udvalgt" #: ulng.rsmsghotdirimportall msgctxt "ulng.rsmsghotdirimportall" msgid "Import all!" msgstr "Importér alle" #: ulng.rsmsghotdirimporthotlist msgid "Import Directory Hotlist - Select the entries you want to import" msgstr "Importér Favoritmappe - Vælg de posteringer, som du vil importere" #: ulng.rsmsghotdirimportsel msgctxt "ulng.rsmsghotdirimportsel" msgid "Import selected" msgstr "Import udvalgt" #: ulng.rsmsghotdirjustpath msgctxt "ulng.rsmsghotdirjustpath" msgid "Path" msgstr "Sti" #: ulng.rsmsghotdirlocatehotlistfile msgid "Locate \".hotlist\" file to import" msgstr "Find \".hotlist\" filen, der skal importeres" #: ulng.rsmsghotdirmodifiedwanttosave msgid "Directory Hotlist has been modified. Do you want to save before to exit?" msgstr "Favoritmappen er ændret. Vil du gemme, før der afsluttes?" #: ulng.rsmsghotdirname msgid "Hotdir name" msgstr "Favoritmappens navn" #: ulng.rsmsghotdirnbnewentries msgid "Number of new entries: %d" msgstr "Antal nye poster: %d" #: ulng.rsmsghotdirnothingtoexport msgid "Nothing selected to export!" msgstr "Ikke valgt noget at eksportere" #: ulng.rsmsghotdirpath msgid "Hotdir path" msgstr "Favoritmappens sti" #: ulng.rsmsghotdirreaddselecteddirectory msgid "Re-Add selected dir: " msgstr "Tilføj valgte mappe igen: " #: ulng.rsmsghotdirreaddthisdirectory msgid "Re-Add current dir: " msgstr "Tilføj aktuel mappe igen: " #: ulng.rsmsghotdirrestorewhat msgid "Enter location and filename of Directory Hotlist to restore" msgstr "Indtast placering og filnavn på Favoritmappen, der skal gendannes" #: ulng.rsmsghotdirsimplecommand msgctxt "ulng.rsmsghotdirsimplecommand" msgid "Command:" msgstr "Kommando:" #: ulng.rsmsghotdirsimpleendofmenu msgctxt "ulng.rsmsghotdirsimpleendofmenu" msgid "(end of sub menu)" msgstr "(enden af undermenu)" #: ulng.rsmsghotdirsimplemenu msgctxt "ulng.rsmsghotdirsimplemenu" msgid "Menu name:" msgstr "Menunavn:" #: ulng.rsmsghotdirsimplename msgctxt "ulng.rsmsghotdirsimplename" msgid "Name:" msgstr "Navn" #: ulng.rsmsghotdirsimpleseparator msgctxt "ulng.rsmsghotdirsimpleseparator" msgid "(separator)" msgstr "(separator)" #: ulng.rsmsghotdirsubmenuname msgctxt "ulng.rsmsghotdirsubmenuname" msgid "Submenu name" msgstr "Undermenus navn" #: ulng.rsmsghotdirtarget msgid "Hotdir target" msgstr "Favoritmappens destination" #: ulng.rsmsghotdirtiporderpath msgid "Determine if you want the active frame to be sorted in a specified order after changing directory" msgstr "Undersøg, om du vil have det aktive vindue sorteret i en bestemt rækkefølge efter ændring af mappe" #: ulng.rsmsghotdirtipordertarget msgid "Determine if you want the not active frame to be sorted in a specified order after changing directory" msgstr "Undersøg, om du vil have det inaktive vindue sorteret i en bestemt rækkefølge efter ændring af mappe" #: ulng.rsmsghotdirtipspecialdirbut msgid "Some functions to select appropriate path relative, absolute, windows special folders, etc." msgstr "Nogle funktioner til at vælge egnet sti - relative, absolutte, særlige windowsmapper etc." #: ulng.rsmsghotdirtotalbackuped #, fuzzy #| msgid "" #| "Total entries saved: %d\n" #| "\n" #| "Backup filename: %s\n" msgid "" "Total entries saved: %d\n" "\n" "Backup filename: %s\n" msgstr "" "Samlede antal gemte posteringer: %d\n" "Backuppens filnavn: %s\n" #: ulng.rsmsghotdirtotalexported msgid "Total entries exported: " msgstr "Samlede antal eksportede posteringer: " #: ulng.rsmsghotdirwhattodelete #, fuzzy #| msgid "" #| "Do you want to delete all elements inside the sub-menu [%s]?\n" #| "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgid "" "Do you want to delete all elements inside the sub-menu [%s]?\n" "Answering NO will delete only menu delimiters but will keep element inside sub-menu.\n" msgstr "" "Vil du slette alle elemeter i undermenu [%s]?\n" "Svarer du NEJ, slettes kun menuskilletegn, mens elementer inde i undermenuen bevares.\n" #: ulng.rsmsghotdirwheretosave msgid "Enter location and filename where to save a Directory Hotlist file" msgstr "Indtast placering og filnavn, for hvor Favoritmappe skal gemmes" #: ulng.rsmsgincorrectfilelength msgid "Incorrect resulting filelength for file : \"%s\"" msgstr "Ugyldig fillængde for fil : \"%s\"" #: ulng.rsmsginsertnextdisk #, fuzzy #| msgid "" #| "Please insert next disk or something similar.\n" #| "\n" #| "It is to allow writing this file:\n" #| "\"%s\"\n" #| "\n" #| "Number of bytes still to write: %d\n" msgid "" "Please insert next disk or something similar.\n" "\n" "It is to allow writing this file:\n" "\"%s\"\n" "\n" "Number of bytes still to write: %d\n" msgstr "" "Indsæt venligst næste disk eller noget lignende.\n" "\n" "Således det er muligt at skrive denne fil:\n" "\"%s\"\n" "\n" "Antal bytes som mangler at blive skrevet: %d\n" #: ulng.rsmsginvalidcommandline msgid "Error in command line" msgstr "Fejl i kommandolinje" #: ulng.rsmsginvalidfilename msgid "Invalid filename" msgstr "Ugyldigt filnavn" #: ulng.rsmsginvalidformatofconfigurationfile msgid "Invalid format of configuration file" msgstr "Ugyldigt format af konfigurationsfilen" #: ulng.rsmsginvalidpath msgid "Invalid path" msgstr "Ugyldig sti" #: ulng.rsmsginvalidpathlong msgid "Path %s contains forbidden characters." msgstr "Stien %s indeholder ugyldige tegn." #: ulng.rsmsginvalidplugin msgid "This is not a valid plugin!" msgstr "Dette er ikke et gyldigt plugin!" #: ulng.rsmsginvalidpluginarchitecture msgid "This plugin is built for Double Commander for %s.%sIt can not work with Double Commander for %s!" msgstr "Dette plugin er lavet til Double Commander for %s.%sDet virker ikke sammen med Double Commander for %s!" #: ulng.rsmsginvalidquoting msgid "Invalid quoting" msgstr "Ugyldig citering" #: ulng.rsmsginvalidselection msgid "Invalid selection." msgstr "Ugyldigt valg" #: ulng.rsmsgloadingfilelist msgid "Loading file list..." msgstr "Indlæser filliste..." #: ulng.rsmsglocatetcconfiguation msgid "Locate TC configuration file (wincmd.ini)" msgstr "" #: ulng.rsmsglocatetcexecutable msgid "Locate TC executable file (totalcmd.exe or totalcmd64.exe)" msgstr "Find TC-exe filen (totalcmd.exe or totalcmd64.exe)" #: ulng.rsmsglogcopy msgctxt "ulng.rsmsglogcopy" msgid "Copy file %s" msgstr "Kopiér fil %s" #: ulng.rsmsglogdelete msgid "Delete file %s" msgstr "Slet fil %s" #: ulng.rsmsglogerror msgid "Error: " msgstr "Fejl:" #: ulng.rsmsglogextcmdlaunch msgid "Launch external" msgstr "" #: ulng.rsmsglogextcmdresult msgid "Result external" msgstr "" #: ulng.rsmsglogextract msgid "Extract file %s" msgstr "Udpak fil %s" #: ulng.rsmsgloginfo msgid "Info: " msgstr "Info:" #: ulng.rsmsgloglink msgid "Create link %s" msgstr "Dan link %s" #: ulng.rsmsglogmkdir msgid "Create directory %s" msgstr "Opret mappe %s" #: ulng.rsmsglogmove msgid "Move file %s" msgstr "Flyt fil %s" #: ulng.rsmsglogoptionsmodifiedwanttosave msgid "" "Options regarding log have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsglogpack msgid "Pack to file %s" msgstr "Pak til fil %s" #: ulng.rsmsglogrmdir msgid "Remove directory %s" msgstr "Fjern mappe %s" #: ulng.rsmsglogsuccess msgid "Done: " msgstr "Færdig: " #: ulng.rsmsglogsymlink msgid "Create symlink %s" msgstr "Dan symlink %s" #: ulng.rsmsglogtest msgid "Test file integrity %s" msgstr "Kontroller filintegritet %s" #: ulng.rsmsglogwipe msgid "Wipe file %s" msgstr "" #: ulng.rsmsglogwipedir msgid "Wipe directory %s" msgstr "" #: ulng.rsmsgmasterpassword msgid "Master Password" msgstr "Hovedadgangskode" #: ulng.rsmsgmasterpasswordenter msgid "Please enter the master password:" msgstr "Indtast venligst hovedadgangskoden:" #: ulng.rsmsgmiscellaneousmodifiedwanttosave msgid "Miscellaneous options have been modified. Do you want to save before to exit?" msgstr "Forskellige indstillinger er ændret. Vil du gemme, før der afsluttes?" #: ulng.rsmsgnewfile msgid "New file" msgstr "Ny fil" #: ulng.rsmsgnextvolunpack msgid "Next volume will be unpacked" msgstr "Næste volumen bliver pakket ud" #: ulng.rsmsgnofiles msgid "No files" msgstr "Ingen filer" #: ulng.rsmsgnofilesselected msgid "No files selected." msgstr "Ingen filer valgt" #: ulng.rsmsgnofreespacecont msgid "No enough free space on target drive, Continue?" msgstr "" "Ikke nok ledig plads på måldrevet.\n" "Vil du fortsætte?\n" #: ulng.rsmsgnofreespaceretry msgid "No enough free space on target drive, Retry?" msgstr "" "Ikke nok ledig plads på måldrevet.\n" "\"Vil du forsøge igen?\n" #: ulng.rsmsgnotdelete msgid "Can not delete file %s" msgstr "Kan ikke slette fil %s" #: ulng.rsmsgnotimplemented msgid "Not implemented." msgstr "Ikke muligt." #: ulng.rsmsgpanelpreview msgctxt "ulng.rsmsgpanelpreview" msgid "Below is a preview. You may move cursor and select files to get immediately an actual look and feel of the various settings." msgstr "" #: ulng.rsmsgpassword msgid "Password:" msgstr "Adgangskode:" #: ulng.rsmsgpassworddiff msgid "Passwords are different!" msgstr "Adgangskoderne er ikke ens!" #: ulng.rsmsgpasswordenter msgid "Please enter the password:" msgstr "Indtast venligst adgangskoden:" #: ulng.rsmsgpasswordfirewall msgid "Password (Firewall):" msgstr "Adgangskode (firewall):" #: ulng.rsmsgpasswordverify msgid "Please re-enter the password for verification:" msgstr "For kontrol af adgangskoden, indtast den venligst igen:" #: ulng.rsmsgpopuphotadd msgid "&Add %s" msgstr "&Tilføj %s" #: ulng.rsmsgpopuphotcnf msgctxt "ulng.rsmsgpopuphotcnf" msgid "&Configure" msgstr "&Rediger favoritmapper..." #: ulng.rsmsgpopuphotdelete msgid "&Delete %s" msgstr "&Fjern %s" #: ulng.rsmsgpresetalreadyexists msgid "Preset \"%s\" already exists. Overwrite?" msgstr "" "Forudindstilling \"%s\" findes allerede.\n" "Vil du overskrive?\n" #: ulng.rsmsgproblemexecutingcommand msgid "Problem executing command (%s)" msgstr "" #: ulng.rsmsgpromptaskingfilename msgid "Filename for dropped text:" msgstr "Filnavn for den 'sluppede' tekst" #: ulng.rsmsgprovidethisfile msgid "Please, make this file available. Retry?" msgstr "Gør venligst denne fil tilgængelig. Vil du prøve igen?" #: ulng.rsmsgrenamefavtabs msgid "Enter new friendly name for this Favorite Tabs" msgstr "" #: ulng.rsmsgrenamefavtabsmenu msgid "Enter new name for this menu" msgstr "" #: ulng.rsmsgrenfldr msgid "Rename/move %d selected files/directories?" msgstr "Omdøbe/flytte %d valgte filer/mapper?" #: ulng.rsmsgrensel msgid "Rename/move selected \"%s\"?" msgstr "Omdøb/flyt \"%s\" til?" #: ulng.rsmsgrestartforapplychanges msgid "Please, restart Double Commander in order to apply changes" msgstr "Genstart venligst Double Commander for at udføre ændringerne" #: ulng.rsmsgsekectfiletype msgid "Select to which file type to add extension \"%s\"" msgstr "" #: ulng.rsmsgselectedinfo msgid "Selected: %s of %s, files: %d of %d, folders: %d of %d" msgstr "Valgte: %s af %s, filer: %d af %d, mapper: %d af %d" #: ulng.rsmsgselectexecutablefile msgid "Select executable file for" msgstr "" #: ulng.rsmsgselectonlychecksumfiles #, fuzzy #| msgid "Please select only check sum files!" msgid "Please select only checksum files!" msgstr "Vælg venligst kun kontrolsumfiler!" #: ulng.rsmsgsellocnextvol msgid "Please select location of next volume" msgstr "Vælg venligst placering af næste volumen" #: ulng.rsmsgsetvolumelabel msgid "Set volume label" msgstr "Angiv volumen-etiket" #: ulng.rsmsgspecialdir msgid "Special Dirs" msgstr "Særlige mapper" #: ulng.rsmsgspecialdiraddacti msgid "Add path from active frame" msgstr "Tilføj sti fra det aktive vindue" #: ulng.rsmsgspecialdiraddnonacti msgid "Add path from inactive frame" msgstr "Tilføj sti fra det inaktive vindue" #: ulng.rsmsgspecialdirbrowssel msgid "Browse and use selected path" msgstr "Gennemse og anvend valgte sti" #: ulng.rsmsgspecialdirenvvar msgid "Use environment variable..." msgstr "Anvend miljøvariabel..." #: ulng.rsmsgspecialdirgotodc msgid "Go to Double Commander special path..." msgstr "Gå til særlig Double Commander sti..." #: ulng.rsmsgspecialdirgotoenvvar msgid "Go to environment variable..." msgstr "Gå til miljøvariabel..." #: ulng.rsmsgspecialdirgotoother msgid "Go to other Windows special folder..." msgstr "Gå til en anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirgototc msgid "Go to Windows special folder (TC)..." msgstr "Gå til særlig Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmakereltohotdir msgid "Make relative to hotdir path" msgstr "" #: ulng.rsmsgspecialdirmkabso msgid "Make path absolute" msgstr "Gør stien absolut" #: ulng.rsmsgspecialdirmkdcrel msgid "Make relative to Double Commander special path..." msgstr "Gør relativ til særlig Double Commander sti..." #: ulng.rsmsgspecialdirmkenvrel msgid "Make relative to environment variable..." msgstr "Gør relativ til miljøvariabel..." #: ulng.rsmsgspecialdirmktctel msgid "Make relative to Windows special folder (TC)..." msgstr "Gør relativ til særlig Windowsmappe (TC)..." #: ulng.rsmsgspecialdirmkwnrel msgid "Make relative to other Windows special folder..." msgstr "Gør relativ til anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirusedc msgid "Use Double Commander special path..." msgstr "Anvend særlig Double Commander sti..." #: ulng.rsmsgspecialdirusehotdir msgid "Use hotdir path" msgstr "" #: ulng.rsmsgspecialdiruseother msgid "Use other Windows special folder..." msgstr "Anvend anden særlig Windowsmappe..." #: ulng.rsmsgspecialdirusetc msgid "Use Windows special folder (TC)..." msgstr "Anvend særlig Windowsmappe (TC)..." #: ulng.rsmsgtabforopeninginnewtab msgid "This tab (%s) is locked! Open directory in another tab?" msgstr "" #: ulng.rsmsgtabrenamecaption msgid "Rename tab" msgstr "Omdøb fane" #: ulng.rsmsgtabrenameprompt msgid "New tab name:" msgstr "Nyt navn:" #: ulng.rsmsgtabsextraoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs extra have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtabsoptionsmodifiedwanttosave msgid "" "Options regarding folder tabs have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgtargetdir msgid "Target path:" msgstr "Sti:" #: ulng.rsmsgtcconfignotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration file:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration file:\n" "%s\n" msgstr "" "Fejl! Kan ikke finde TC-konfigurationsfilen:\n" "%s\n" #: ulng.rsmsgtcexecutablenotfound #, fuzzy #| msgid "" #| "Error! Cannot find the TC configuration executable:\n" #| "%s\n" msgid "" "Error! Cannot find the TC configuration executable:\n" "%s\n" msgstr "" "Fejl! Kan ikek finde TC-konfigurations EXE-fil:\n" "%s\n" #: ulng.rsmsgtcisrunning #, fuzzy #| msgid "" #| "Error! TC is still running but it should be closed for this operation.\n" #| "Close it and press OK or press CANCEL to abort.\n" msgid "" "Error! TC is still running but it should be closed for this operation.\n" "Close it and press OK or press CANCEL to abort.\n" msgstr "" "Fejl! TC kører stadigvæk men burde være lukket i fm. denne handling.\n" "Luk TC og tryk OK eller tryk Annuller for at afbryde.\n" #: ulng.rsmsgtctoolbarnotfound #, fuzzy #| msgid "" #| "Error! Cannot find the desired wanted TC toolbar output folder:\n" #| "%s\n" msgid "" "Error! Cannot find the desired wanted TC toolbar output folder:\n" "%s\n" msgstr "" "Fejl! Kan ikek finde den ønskede TC-værktøjslinje outputmappe:\n" "%s\n" #: ulng.rsmsgtctoolbarwheretosave msgid "Enter location and filename where to save a TC Toolbar file" msgstr "" #: ulng.rsmsgterminaloptionsmodifiedwanttosave msgid "" "Options regarding terminal have been modified.\n" "\n" "Do you want to save them before to exit?\n" msgstr "" #: ulng.rsmsgthisisnowinclipboard msgid "\"%s\" is now in the clipboard" msgstr "" #: ulng.rsmsgtitleextnotinfiletype msgid "Extension of selected file is not in any recognized file types" msgstr "" #: ulng.rsmsgtoolbarerrornotsaved msgid "Error! Problem saving toolbar!" msgstr "Fejl! Problem med at gemme værktøjslinje!" #: ulng.rsmsgtoolbarlocatedctoolbarfile msgid "Locate \".toolbar\" file to import" msgstr "Find \".toolbar\" fil, der skal importeres" #: ulng.rsmsgtoolbarlocatetctoolbarfile msgid "Locate \".BAR\" file to import" msgstr "Find \".BAR\" fil, der skal importeres" #: ulng.rsmsgtoolbarmodifiedwanttosave msgid "Toolbar has been modified. Do you want to save before to exit?" msgstr "Værktøjslinjen er ændret. Vil du gemme, før der afsluttes?" #: ulng.rsmsgtoolbarrestorewhat msgid "Enter location and filename of Toolbar to restore" msgstr "Indtast placering og filnavn på værktøjslinjen, der skal gendannes" #: ulng.rsmsgtoolbarsaved #, fuzzy #| msgid "" #| "Saved!\n" #| "Toolbar filename: %s\n" msgid "" "Saved!\n" "Toolbar filename: %s\n" msgstr "" "Gem!\n" "Værktøjslinjens filnavn: %s\n" #: ulng.rsmsgtoomanyfilesselected msgid "Too many files selected." msgstr "Du har valgt for mange filer" #: ulng.rsmsgundeterminednumberoffile msgid "Undetermined" msgstr "Ikke fastslået" #: ulng.rsmsgurl msgid "URL:" msgstr "" #: ulng.rsmsguserdidnotsetextension msgid "<NO EXT>" msgstr "" #: ulng.rsmsguserdidnotsetname msgid "<NO NAME>" msgstr "" #: ulng.rsmsgusername msgid "User name:" msgstr "Brugernavn:" #: ulng.rsmsgusernamefirewall msgid "User name (Firewall):" msgstr "Brugernavn (firewall):" #: ulng.rsmsgvolumelabel msgid "Volume label:" msgstr "Volumen-etiket:" #: ulng.rsmsgvolumesizeenter msgid "Please enter the volume size:" msgstr "Indtast venligst volumen-størrelse:" #: ulng.rsmsgwipefldr msgid "Wipe %d selected files/directories?" msgstr "Sikker sletning af %d valgte filer/mapper?" #: ulng.rsmsgwipesel msgid "Wipe selected \"%s\"?" msgstr "Sikker sletning af \"%s\"?" #: ulng.rsmsgwithactionwith msgid "with" msgstr "" #: ulng.rsmulrenfilenamestylelist msgid "No change;UPPERCASE;lowercase;First char uppercase;First Char Of Every Word Uppercase;" msgstr "Uændret;STORE BOGSTAVER;små bogstaver;Første bogstav stort;Første Bogstav Stort I hvert Ord;" #: ulng.rsoperaborted msgid "Aborted" msgstr "Afbrudt" #: ulng.rsopercalculatingchecksum #, fuzzy #| msgid "Calculating check sum" msgid "Calculating checksum" msgstr "Danner kontrolsumfil" #: ulng.rsopercalculatingchecksumin #, fuzzy #| msgid "Calculating check sum in \"%s\"" msgid "Calculating checksum in \"%s\"" msgstr "Danner kontrolsumfil i \"%s\"" #: ulng.rsopercalculatingchecksumof msgid "Calculating checksum of \"%s\"" msgstr "" #: ulng.rsopercalculatingstatictics #, fuzzy msgctxt "ulng.rsopercalculatingstatictics" msgid "Calculating" msgstr "Beregner" #: ulng.rsopercalculatingstatisticsin msgid "Calculating \"%s\"" msgstr "Beregner \"%s\"" #: ulng.rsopercombining msgid "Joining" msgstr "Samler" #: ulng.rsopercombiningfromto msgid "Joining files in \"%s\" to \"%s\"" msgstr "Samler filer i \"%s\" til \"%s\"" #: ulng.rsopercopying msgid "Copying" msgstr "Kopierer" #: ulng.rsopercopyingfromto msgid "Copying from \"%s\" to \"%s\"" msgstr "Kopierer fra \"%s\" til \"%s\"" #: ulng.rsopercopyingsomethingto msgid "Copying \"%s\" to \"%s\"" msgstr "Kopierer \"%s\" til \"%s\"" #: ulng.rsopercreatingdirectory msgid "Creating directory" msgstr "Danner mappe" #: ulng.rsopercreatingsomedirectory msgid "Creating directory \"%s\"" msgstr "Danner mappe \"\"%s\"" #: ulng.rsoperdeleting msgctxt "ulng.rsoperdeleting" msgid "Deleting" msgstr "Sletter" #: ulng.rsoperdeletingin msgid "Deleting in \"%s\"" msgstr "Sletter i \"%s\"" #: ulng.rsoperdeletingsomething msgid "Deleting \"%s\"" msgstr "Sletter \"%s\"" #: ulng.rsoperexecuting msgid "Executing" msgstr "Udfører" #: ulng.rsoperexecutingsomething msgid "Executing \"%s\"" msgstr "Udfører \"%s\"" #: ulng.rsoperextracting msgid "Extracting" msgstr "Pakker ud" #: ulng.rsoperextractingfromto msgid "Extracting from \"%s\" to \"%s\"" msgstr "Pakker ud fra \"%s\" til \"%s\"" #: ulng.rsoperfinished msgid "Finished" msgstr "Afsluttet" #: ulng.rsoperlisting msgid "Listing" msgstr "Oplister" #: ulng.rsoperlistingin msgid "Listing \"%s\"" msgstr "Oplister \"%s\"" #: ulng.rsopermoving msgid "Moving" msgstr "Flytter" #: ulng.rsopermovingfromto msgid "Moving from \"%s\" to \"%s\"" msgstr "Flytter fra \"%s\" til\"%s\"" #: ulng.rsopermovingsomethingto msgid "Moving \"%s\" to \"%s\"" msgstr "Flytter \"%s\" til \"%s\"" #: ulng.rsopernotstarted msgid "Not started" msgstr "Ikke startet" #: ulng.rsoperpacking msgid "Packing" msgstr "Pakker" #: ulng.rsoperpackingfromto msgid "Packing from \"%s\" to \"%s\"" msgstr "Pakker fra \"%s\" til \"%s\"" #: ulng.rsoperpackingsomethingto msgid "Packing \"%s\" to \"%s\"" msgstr "Pakker \"%s\" til \"%s\"" #: ulng.rsoperpaused msgid "Paused" msgstr "Sat på pause" #: ulng.rsoperpausing msgid "Pausing" msgstr "Pause" #: ulng.rsoperqueued msgctxt "ulng.rsoperqueued" msgid "Queued" msgstr "Sat i kø" #: ulng.rsoperrunning msgid "Running" msgstr "Kører" #: ulng.rsopersettingproperty msgid "Setting property" msgstr "Indstiller egenskab" #: ulng.rsopersettingpropertyin msgid "Setting property in \"%s\"" msgstr "Indstiller egenskab i \"%s\"" #: ulng.rsopersettingpropertyof msgid "Setting property of \"%s\"" msgstr "Indstiller egenskab af \"%s\"" #: ulng.rsopersplitting msgid "Splitting" msgstr "Opdeler" #: ulng.rsopersplittingfromto msgid "Splitting \"%s\" to \"%s\"" msgstr "Opdeler \"%s\" til \"%s\"" #: ulng.rsoperstarting msgid "Starting" msgstr "Starter" #: ulng.rsoperstopped msgid "Stopped" msgstr "Stoppet" #: ulng.rsoperstopping msgid "Stopping" msgstr "Stopper" #: ulng.rsopertesting msgid "Testing" msgstr "Kontrollerer" #: ulng.rsopertestingin msgid "Testing in \"%s\"" msgstr "Kontrollerer i \"%s\"" #: ulng.rsopertestingsomething msgid "Testing \"%s\"" msgstr "Kontrollerer \"%s\"" #: ulng.rsoperverifyingchecksum #, fuzzy #| msgid "Verifying check sum" msgid "Verifying checksum" msgstr "Kontrollerer kontrolsum" #: ulng.rsoperverifyingchecksumin #, fuzzy #| msgid "Verifying check sum in \"%s\"" msgid "Verifying checksum in \"%s\"" msgstr "Kontrollerer kontrolsum i \"%s\"" #: ulng.rsoperverifyingchecksumof #, fuzzy #| msgid "Verifying check sum of \"%s\"" msgid "Verifying checksum of \"%s\"" msgstr "Kontrollerer kontrolsum af \"%s\"" #: ulng.rsoperwaitingforconnection msgid "Waiting for access to file source" msgstr "Venter på adgang til filkilde" #: ulng.rsoperwaitingforfeedback msgid "Waiting for user response" msgstr "Venter på brugerrespons" #: ulng.rsoperwiping msgid "Wiping" msgstr "Sletter (fuldstændigt)" #: ulng.rsoperwipingin msgid "Wiping in \"%s\"" msgstr "Sletter (fuldstændigt) i \"%s\"" #: ulng.rsoperwipingsomething msgid "Wiping \"%s\"" msgstr "Sletter (fuldstændigt) \"%s\"" #: ulng.rsoperworking msgid "Working" msgstr "Behandler" #: ulng.rsoptaddfrommainpanel msgid "Add at beginning;Add at the end;Smart add" msgstr "Tilføj starten;Tilføj enden;Tilføj smart" #: ulng.rsoptarchivedelete msgctxt "ulng.rsoptarchivedelete" msgid "Delete:" msgstr "Slet:" #: ulng.rsoptarchiveextractwithoutpath msgid "Extract without path:" msgstr "Pak ud uden sti:" #: ulng.rsoptarchiveformmode msgid "Format parsing mode:" msgstr "Format analyse-tilstand:" #: ulng.rsoptarchiveid msgctxt "ulng.rsoptarchiveid" msgid "ID:" msgstr "" #: ulng.rsoptarchiveidpos msgctxt "ulng.rsoptarchiveidpos" msgid "ID Position:" msgstr "ID-position:" #: ulng.rsoptarchiveidseekrange msgctxt "ulng.rsoptarchiveidseekrange" msgid "ID Seek Range:" msgstr "ID søge-interval:" #: ulng.rsoptarchiveparam msgid "Parameter" msgstr "" #: ulng.rsoptarchivepasswordquery msgid "Password query string:" msgstr "Password forespørgsel:" #: ulng.rsoptarchiveselfextract msgctxt "ulng.rsoptarchiveselfextract" msgid "Create self extracting archive:" msgstr "Dan selvudpakkende arkiv:" #: ulng.rsoptarchivetest msgctxt "ulng.rsoptarchivetest" msgid "Test:" msgstr "" #: ulng.rsoptarchivetypename msgid "Archive type name:" msgstr "Arkivtype-navn:" #: ulng.rsoptarchivevalue msgctxt "ulng.rsoptarchivevalue" msgid "Value" msgstr "Værdi" #: ulng.rsoptassocpluginwith msgid "Associate plugin \"%s\" with:" msgstr "Associer plugin \"%s\" med:" #: ulng.rsoptautosizecolumn msgid "First;Last;" msgstr "Først;Sidst" #: ulng.rsoptconfigsortorder msgid "Classic, legacy order;Alphabetic order (but language still first)" msgstr "Klassisk, ældre måde;Alfabetisk (men stadig med sprog først)" #: ulng.rsoptdifferframeposition msgid "Active frame panel on left, inactive on right (legacy);Left frame panel on left, right on right" msgstr "Aktivt vindue til venstre, inaktive vindue til højre (ældre visning); Venstre vindue til venstre, højre til højre" #: ulng.rsoptdisable msgid "Disable" msgstr "Deaktiver" #: ulng.rsoptenable msgctxt "ulng.rsoptenable" msgid "Enable" msgstr "Aktiver" #: ulng.rsoptenterext msgid "Enter extension" msgstr "Indtast filendelse" #: ulng.rsoptexamplecursor msgid "Cursor" msgstr "Markør" #: ulng.rsoptexamplemark msgid "Mark" msgstr "Mærke" #: ulng.rsoptexamplemarkcursor msgid "Mark + Cursor" msgstr "Mærke + markør" #: ulng.rsoptexampletext msgid "Text" msgstr "Tekst" #: ulng.rsoptfavoritetabswheretoaddinlist msgid "Add at beginning;Add at the end;Alphabetical sort" msgstr "" #: ulng.rsoptfileoperationsprogresskind msgid "separate window;minimized separate window;operations panel" msgstr "Nyt vindue;Minimeret til proceslinjen;Handlingsvindue" #: ulng.rsoptfilesizeformat msgid "float;B;K;M;G" msgstr "Dynamisk (x B/k/M/G);bytes (B);kilobytes (kB);Megabytes (MB);Gigabytes (GB)" #: ulng.rsopthotkeysadddeleteshortcutlong msgid "Shortcut %s for cm_Delete will be registered, so it can be used to reverse this setting." msgstr "Genvejen %s for cm_Delete vil blive registreret, så den kan bruges til at fortryde denne indstilling" #: ulng.rsopthotkeysaddhotkey msgid "Add hotkey for %s" msgstr "Tilføj genvejstast for %s" #: ulng.rsopthotkeysaddshortcutbutton msgid "Add shortcut" msgstr "Tilføj genvejstast" #: ulng.rsopthotkeyscannotsetshortcut msgid "Cannot set shortcut" msgstr "Kan ikke tilføje genvejstast" #: ulng.rsopthotkeyschangeshortcut msgid "Change shortcut" msgstr "Ændr genvejstast" #: ulng.rsopthotkeyscommand msgctxt "ulng.rsopthotkeyscommand" msgid "Command" msgstr "Kommando" #: ulng.rsopthotkeysdeletetrashcanoverrides msgctxt "ulng.rsopthotkeysdeletetrashcanoverrides" msgid "Shortcut %s for cm_Delete has a parameter that overrides this setting. Do you want to change this parameter to use the global setting?" msgstr "Genvejen %s for cm_Delete har en parameter som tilsidesætter denne indstilling. Vil du ændre den indstilling for at anvende de globale indstillinger?" #: ulng.rsopthotkeysdeletetrashcanparameterexists msgctxt "ulng.rsopthotkeysdeletetrashcanparameterexists" msgid "Shortcut %s for cm_Delete needs to have a parameter changed to match shortcut %s. Do you want to change it?" msgstr "Genvejen %s for cm_Delete skal have en parameter ændret for at matche genvejen %s. Vil du ændre parameteren?" #: ulng.rsopthotkeysdescription msgctxt "ulng.rsopthotkeysdescription" msgid "Description" msgstr "Beskrivelse" #: ulng.rsopthotkeysedithotkey msgid "Edit hotkey for %s" msgstr "Rediger genvejstast for %s" #: ulng.rsopthotkeysfixparameter msgid "Fix parameter" msgstr "Ret parameter" #: ulng.rsopthotkeyshotkey msgctxt "ulng.rsopthotkeyshotkey" msgid "Hotkey" msgstr "Genvejstast" #: ulng.rsopthotkeyshotkeys msgctxt "ulng.rsopthotkeyshotkeys" msgid "Hotkeys" msgstr "Genvejstaster" #: ulng.rsopthotkeysnohotkey msgid "<none>" msgstr "<ingen>" #: ulng.rsopthotkeysparameters msgctxt "ulng.rsopthotkeysparameters" msgid "Parameters" msgstr "Parametre" #: ulng.rsopthotkeyssetdeleteshortcut msgid "Set shortcut to delete file" msgstr "Indstil genvej for at slette fil" #: ulng.rsopthotkeysshortcutfordeletealreadyassigned msgid "For this setting to work with shortcut %s, shortcut %s must be assigned to cm_Delete but it is already assigned to %s. Do you want to change it?" msgstr "For at denne indstilling skal kunne virke med genvejen %s, skal genvejen %s tildeles til cm_Delete. Men den er allerede tildelt til %s. Vil du ændre det?" #: ulng.rsopthotkeysshortcutfordeleteissequence msgid "Shortcut %s for cm_Delete is a sequence shortcut for which a hotkey with reversed Shift cannot be assigned. This setting might not work." msgstr "Genvejen %s for cm_Delete er en sekventiel genvej for hvilken en genvej med omvendt Shift ikke kan tildeles. Denne indstilling vil derfor måske ikke virke." #: ulng.rsopthotkeysshortcutused msgid "Shortcut in use" msgstr "Genvejstast anvendes" #: ulng.rsopthotkeysshortcutusedtext1 #, fuzzy,badformat msgid "Shortcut %s is already used." msgstr "Genvejstast %s anvendes allerede til %s." #: ulng.rsopthotkeysshortcutusedtext2 msgid "Change it to %s?" msgstr "Ændre den til %s?" #: ulng.rsopthotkeysusedby msgid "used for %s in %s" msgstr "bruges af %s i %s" #: ulng.rsopthotkeysusedwithdifferentparams msgid "used for this command but with different parameters" msgstr "bruges til denne kommando men med andre parametre" #: ulng.rsoptionseditorarchivers msgctxt "ulng.rsoptionseditorarchivers" msgid "Archivers" msgstr "Pakkeprogrammer" #: ulng.rsoptionseditorautorefresh msgctxt "ulng.rsoptionseditorautorefresh" msgid "Auto refresh" msgstr "Opdater automatisk" #: ulng.rsoptionseditorbehavior msgctxt "ulng.rsoptionseditorbehavior" msgid "Behaviors" msgstr "Egenskab" #: ulng.rsoptionseditorbriefview msgctxt "ulng.rsoptionseditorbriefview" msgid "Brief" msgstr "Kort" #: ulng.rsoptionseditorcolors msgctxt "ulng.rsoptionseditorcolors" msgid "Colors" msgstr "Farver" #: ulng.rsoptionseditorcolumnsview msgctxt "ulng.rsoptionseditorcolumnsview" msgid "Columns" msgstr "Kolonner" #: ulng.rsoptionseditorconfiguration msgctxt "ulng.rsoptionseditorconfiguration" msgid "Configuration" msgstr "Konfiguration" #: ulng.rsoptionseditorcustomcolumns msgid "Custom columns" msgstr "Brugertilpassede kolonner" #: ulng.rsoptionseditordirectoryhotlist msgctxt "ulng.rsoptionseditordirectoryhotlist" msgid "Directory Hotlist" msgstr "Favoritmappe" #: ulng.rsoptionseditordraganddrop msgid "Drag & drop" msgstr "Træk & slip" #: ulng.rsoptionseditordriveslistbutton msgid "Drives list button" msgstr "Drev-valgknap" #: ulng.rsoptionseditorfavoritetabs msgid "Favorite Tabs" msgstr "" #: ulng.rsoptionseditorfileassicextra msgid "File associations extra" msgstr "" #: ulng.rsoptionseditorfileassoc msgctxt "ulng.rsoptionseditorfileassoc" msgid "File associations" msgstr "Filassociationer" #: ulng.rsoptionseditorfileoperations msgctxt "ulng.rsoptionseditorfileoperations" msgid "File operations" msgstr "Filhandlinger" #: ulng.rsoptionseditorfilepanels msgctxt "ulng.rsoptionseditorfilepanels" msgid "File panels" msgstr "Filvindue" #: ulng.rsoptionseditorfilesviews msgid "Files views" msgstr "Visning" #: ulng.rsoptionseditorfiletypes msgctxt "ulng.rsoptionseditorfiletypes" msgid "File types" msgstr "Filtyper" #: ulng.rsoptionseditorfoldertabs msgctxt "ulng.rsoptionseditorfoldertabs" msgid "Folder tabs" msgstr "Faneblade" #: ulng.rsoptionseditorfoldertabsextra msgid "Folder tabs extra" msgstr "" #: ulng.rsoptionseditorfonts msgctxt "ulng.rsoptionseditorfonts" msgid "Fonts" msgstr "Skrifttype" #: ulng.rsoptionseditorhighlighters msgid "Highlighters" msgstr "Fremhævere" #: ulng.rsoptionseditorhotkeys msgctxt "ulng.rsoptionseditorhotkeys" msgid "Hot keys" msgstr "Genvejstaster" #: ulng.rsoptionseditoricons msgctxt "ulng.rsoptionseditoricons" msgid "Icons" msgstr "Ikoner" #: ulng.rsoptionseditorignorelist msgctxt "ulng.rsoptionseditorignorelist" msgid "Ignore list" msgstr "Ignorer-liste" #: ulng.rsoptionseditorkeyboard msgid "Keys" msgstr "Taster" #: ulng.rsoptionseditorlanguage msgctxt "ulng.rsoptionseditorlanguage" msgid "Language" msgstr "Sprog" #: ulng.rsoptionseditorlayout msgctxt "ulng.rsoptionseditorlayout" msgid "Layout" msgstr "" #: ulng.rsoptionseditorlog msgctxt "ulng.rsoptionseditorlog" msgid "Log" msgstr "Logfil" #: ulng.rsoptionseditormiscellaneous msgctxt "ulng.rsoptionseditormiscellaneous" msgid "Miscellaneous" msgstr "Diverse" #: ulng.rsoptionseditormouse msgid "Mouse" msgstr "Mus" #: ulng.rsoptionseditorplugins #, fuzzy msgctxt "ulng.rsoptionseditorplugins" msgid "Plugins" msgstr "Plugin" #: ulng.rsoptionseditorquicksearch msgctxt "ulng.rsoptionseditorquicksearch" msgid "Quick search/filter" msgstr "Hurtig søgning/filtrering" #: ulng.rsoptionseditorterminal msgctxt "ulng.rsoptionseditorterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rsoptionseditortoolbar msgid "Toolbar" msgstr "Værktøjslinje" #: ulng.rsoptionseditortoolbarcomplement msgid "Complements" msgstr "Supplement" #: ulng.rsoptionseditortools msgctxt "ulng.rsoptionseditortools" msgid "Tools" msgstr "Værktøjer" #: ulng.rsoptionseditortooltips msgctxt "ulng.rsoptionseditortooltips" msgid "Tooltips" msgstr "Værktøjshjælp" #: ulng.rsoptletters msgid "None;Command Line;Quick Search;Quick Filter" msgstr "Ingen;Kommandolinje;Hurtig søgning;Hurtigt filter" #: ulng.rsoptmouseselectionbutton msgid "Left button;Right button;" msgstr "Brug venstre knap;Brug højre knap;" #: ulng.rsoptnewfilesposition msgid "at the top of the file list;after directories (if directories are sorted before files);at sorted position;at the bottom of the file list" msgstr "øverst i fillisten;efter mapper (hvis mapper sorteres før filer);på sorteret plads ;nederst i fillisten" #: ulng.rsoptpluginalreadyassigned msgid "Plugin %s is already assigned for the following extensions:" msgstr "Plugin %s er allerede tildelt følgende filtyper:" #: ulng.rsoptpluginsactive msgctxt "ulng.rsoptpluginsactive" msgid "Active" msgstr "Aktiv" #: ulng.rsoptpluginsfilename msgctxt "ulng.rsoptpluginsfilename" msgid "File name" msgstr "Filnavn" #: ulng.rsoptpluginsname msgctxt "ulng.rsoptpluginsname" msgid "Name" msgstr "Navn" #: ulng.rsoptpluginsregisteredfor msgctxt "ulng.rsoptpluginsregisteredfor" msgid "Registered for" msgstr "Registreret til" #: ulng.rsoptsearchcase msgid "&Sensitive;&Insensitive" msgstr "&Søg med forskel på STORE og små bogstaver; Søg &uden forskel på STORE og små bogstaver" #: ulng.rsoptsearchitems msgid "&Files;Di&rectories;Files a&nd Directories" msgstr "&Filer;Mapper;Filer og mapper" #: ulng.rsoptsearchopt #, fuzzy #| msgid "&Hide filter panel when not focused" msgid "&Hide filter panel when not focused;Keep saving setting modifications for next session" msgstr "Skjul filterpanelet, når det ikke er valgt" #: ulng.rsoptsortcasesens msgid "not case sensitive;according to locale settings (aAbBcC);first upper then lower case (ABCabc)" msgstr "ingen forskel;brug lokale indstillinger (aA-bB-cC);først STORE så små bogstaver (ABC-abc)" #: ulng.rsoptsortfoldermode msgid "sort by name and show first;sort like files and show first;sort like files" msgstr "sortér efter navn og vis først;sortér som filer og vis først;sortér som filer" #: ulng.rsoptsortmethod msgid "Alphabetical, considering accents;Natural sorting: alphabetical and numbers" msgstr "Alfabetiske, inklusive tegn med accenter;Naturlig sortering: Alfabetisk og numerisk" #: ulng.rsopttabsposition msgid "Top;Bottom;" msgstr "Top;Bund;" #: ulng.rsopttoolbarbuttontype msgid "S&eparator;Inte&rnal command;E&xternal command;Men&u" msgstr "S&eparator;Inte&rn kommando;E&kster kommando;Men&u" #: ulng.rsopttypeofduplicatedrename msgid "DC legacy - Copy (x) filename.ext;Windows - filename (x).ext;Other - filename(x).ext" msgstr "Ældre DC - Kopier (x) filnavn.ext;Windows - filnavn (x).ext;Andre - filnavn(x).ext" #: ulng.rsoptupdatedfilesposition msgid "don't change position;use the same setting as for new files;to sorted position" msgstr "bevar positionen;brug samme indstilling som for nye filer;til sorteret plads" #: ulng.rspropscontains msgid "Files: %d, folders: %d" msgstr "Filer: %d, mapper: %d" #: ulng.rspropserrchmod msgid "Can not change access rights for \"%s\"" msgstr "Kan ikke ændre adgangsrettigheder for \"%s\"" #: ulng.rspropserrchown msgid "Can not change owner for \"%s\"" msgstr "Kan ikke ændre ejer for \"%s\"" #: ulng.rspropsfile msgctxt "ulng.rspropsfile" msgid "File" msgstr "Fil" #: ulng.rspropsfolder msgctxt "ulng.rspropsfolder" msgid "Directory" msgstr "Mappe" #: ulng.rspropsnmdpipe msgid "Named pipe" msgstr "Nævnte pipe" #: ulng.rspropsno msgctxt "ulng.rspropsno" msgid "No" msgstr "Nej" #: ulng.rspropssocket msgid "Socket" msgstr "" #: ulng.rspropsspblkdev msgid "Special block device" msgstr "Speciel blok-enhed" #: ulng.rspropsspchrdev msgid "Special character device" msgstr "Speciel tegn-enhed" #: ulng.rspropssymlink msgid "Symbolic link" msgstr "Symbolsk link" #: ulng.rspropsunknowntype msgid "Unknown type" msgstr "Ukendt type" #: ulng.rspropsyes msgid "Yes (%s)" msgstr "Ja (%s)" #: ulng.rssearchresult msgid "Search result" msgstr "Søgeresultat" #: ulng.rssearchstatus msgid "SEARCH" msgstr "" #: ulng.rssearchtemplateunnamed msgid "<unnamed template>" msgstr "<unavngivet skabelon>" #: ulng.rsselectdir msgid "Select a directory" msgstr "Vælg en mappe" #: ulng.rsshowhelpfor msgid "&Show help for %s" msgstr "Vi&s hjælp for %s" #: ulng.rssimplewordall #, fuzzy msgctxt "ulng.rssimplewordall" msgid "All" msgstr "Alle" #: ulng.rssimplewordcategory msgctxt "ulng.rssimplewordcategory" msgid "Category" msgstr "" #: ulng.rssimplewordcolumnsingular msgid "Column" msgstr "" #: ulng.rssimplewordcommand #, fuzzy msgctxt "ulng.rssimplewordcommand" msgid "Command" msgstr "Kommando" #: ulng.rssimplewordfilename msgid "Filename" msgstr "" #: ulng.rssimplewordfiles msgid "files" msgstr "" #: ulng.rssimplewordparameter msgid "Param" msgstr "" #: ulng.rssimplewordpreview #, fuzzy msgctxt "ulng.rssimplewordpreview" msgid "Preview" msgstr "Preview" #: ulng.rssimplewordresult msgid "Result" msgstr "" #: ulng.rssimplewordsaved msgid "Saved!" msgstr "" #: ulng.rssimplewordworkdir msgid "WorkDir" msgstr "" #: ulng.rssizeunitbytes msgid "Bytes" msgstr "" #: ulng.rssizeunitgbytes msgctxt "ulng.rssizeunitgbytes" msgid "Gigabytes" msgstr "" #: ulng.rssizeunitkbytes msgctxt "ulng.rssizeunitkbytes" msgid "Kilobytes" msgstr "" #: ulng.rssizeunitmbytes msgctxt "ulng.rssizeunitmbytes" msgid "Megabytes" msgstr "" #: ulng.rssizeunittbytes msgid "Terabytes" msgstr "" #: ulng.rsspacemsg msgid "Files: %d, Dirs: %d, Size: %s (%s bytes)" msgstr "" "Total brugt plads i fil(er): %d og mappe(r): %d\n" "Størrelse: %s (= %s bytes)\n" #: ulng.rsspliterrdirectory msgid "Unable to create target directory!" msgstr "Kunne ikke danne mål-mappe!" #: ulng.rsspliterrfilesize msgid "Incorrect file size format!" msgstr "Forkert filstørrelse-format!" #: ulng.rsspliterrsplitfile msgid "Unable to split the file!" msgstr "Kan ikke opdele fil!" #: ulng.rssplitmsgmanyparts msgid "The number of parts is more than 100! Continue?" msgstr "Der er mere end 100 dele! Vil du fortsætte?" #: ulng.rssplitseldir msgid "Select directory:" msgstr "Vælg mappe:" #: ulng.rssymerrcreate msgid "Error creating symlink." msgstr "Kunne ikke danne symlink!" #: ulng.rssyndefaulttext msgctxt "ulng.rssyndefaulttext" msgid "Default text" msgstr "Standardtekst" #: ulng.rssynlangplaintext msgctxt "ulng.rssynlangplaintext" msgid "Plain text" msgstr "Ren tekst" #: ulng.rstabsactionondoubleclickchoices msgid "Do nothing;Close tab;Access Favorite Tabs;Tabs popup menu" msgstr "" #: ulng.rstimeunitday msgctxt "ulng.rstimeunitday" msgid "Day(s)" msgstr "Dag(e)" #: ulng.rstimeunithour msgid "Hour(s)" msgstr "Time(r)" #: ulng.rstimeunitminute msgid "Minute(s)" msgstr "Minut(ter)" #: ulng.rstimeunitmonth msgid "Month(s)" msgstr "Måned(er)" #: ulng.rstimeunitsecond msgid "Second(s)" msgstr "Sekund(er)" #: ulng.rstimeunitweek msgid "Week(s)" msgstr "Uge(r)" #: ulng.rstimeunityear msgid "Year(s)" msgstr "År" #: ulng.rstitlerenamefavtabs msgid "Rename Favorite Tabs" msgstr "" #: ulng.rstitlerenamefavtabsmenu msgid "Rename Favorite Tabs sub-menu" msgstr "" #: ulng.rstooldiffer msgctxt "ulng.rstooldiffer" msgid "Differ" msgstr "Sammenligningsprogram" #: ulng.rstooleditor msgctxt "ulng.rstooleditor" msgid "Editor" msgstr "Editor" #: ulng.rstoolerroropeningdiffer msgid "Error opening differ" msgstr "Fejl ved åbning af sammenligningsprogram" #: ulng.rstoolerroropeningeditor msgid "Error opening editor" msgstr "Fejl ved åbning af editor" #: ulng.rstoolerroropeningterminal msgid "Error opening terminal" msgstr "Fejl ved åbning af terminal" #: ulng.rstoolerroropeningviewer msgid "Error opening viewer" msgstr "Fejl ved åbning af fremviser" #: ulng.rstoolterminal msgctxt "ulng.rstoolterminal" msgid "Terminal" msgstr "Terminal F9" #: ulng.rstoolviewer msgctxt "ulng.rstoolviewer" msgid "Viewer" msgstr "Fremviser" #: ulng.rsunhandledexceptionmessage msgid "Please report this error to the bug tracker with a description of what you were doing and the following file:%sPress %s to continue or %s to abort the program." msgstr "Rapportér venligst denne fejl i bug-tracker med en beskrivelse af, hvad du gjorde og følgende fil: %s Tryk %s for at fortsætte eller %s at afbryde programmet." #: ulng.rsvarbothpanelactivetoinactive msgid "Both panels, from active to inactive" msgstr "" #: ulng.rsvarbothpanellefttoright msgid "Both panels, from left to right" msgstr "" #: ulng.rsvarcurrentpath msgid "Path of panel" msgstr "" #: ulng.rsvarencloseelement msgid "Enclose each name in brackets or what you want" msgstr "" #: ulng.rsvarfilenamenoext msgid "Just filename, no extension" msgstr "" #: ulng.rsvarfullpath msgid "Complete filename (path+filename)" msgstr "" #: ulng.rsvarhelpwith msgid "Help with \"%\" variables" msgstr "" #: ulng.rsvarinputparam msgid "Will request request user to enter a parameter with a default suggested value" msgstr "" #: ulng.rsvarleftpanel msgid "Left panel" msgstr "" #: ulng.rsvarlistfilename msgid "Temporary filename of list of filenames" msgstr "" #: ulng.rsvarlistfullfilename msgid "Temporary filename of list of complete filenames (path+filename)" msgstr "" #: ulng.rsvarlistrelativefilename msgid "Temporary filename of list of filenames with relative path" msgstr "" #: ulng.rsvaronlyextension msgid "Only file extension" msgstr "" #: ulng.rsvaronlyfilename msgid "Only filename" msgstr "" #: ulng.rsvarotherexamples msgid "Other example of what's possible" msgstr "" #: ulng.rsvarpath msgid "Path, with ending delimiter" msgstr "" #: ulng.rsvarpercentchangetopound msgid "From here to the end of the line, the percent-variable indicator is the \"#\" sign" msgstr "" #: ulng.rsvarpercentsign msgid "Return the percent sign" msgstr "" #: ulng.rsvarpoundchangetopercent msgid "From here to the end of the line, the percent-variable indicator is back the \"%\" sign" msgstr "" #: ulng.rsvarprependelement msgid "Prepend each name with \"-a \" or what you want" msgstr "" #: ulng.rsvarpromptuserforparam msgid "%[Prompt user for param;Default value proposed]" msgstr "" #: ulng.rsvarrelativepathandfilename msgid "Filename with relative path" msgstr "" #: ulng.rsvarrightpanel msgid "Right panel" msgstr "" #: ulng.rsvarsecondelementrightpanel msgid "Full path of second selected file in right panel" msgstr "" #: ulng.rsvarshowcommandprior msgid "Show command prior execute" msgstr "" #: ulng.rsvarsimplemessage msgid "%[Simple message]" msgstr "" #: ulng.rsvarsimpleshowmessage msgid "Will show a simple message" msgstr "" #: ulng.rsvarsourcepanel msgid "Active panel (source)" msgstr "" #: ulng.rsvartargetpanel msgid "Inactive panel (target)" msgstr "" #: ulng.rsvarwillbequoted msgid "Filenames will be quoted from here (default)" msgstr "" #: ulng.rsvarwilldointerminal msgid "Command will be done in terminal, remaining opened at the end" msgstr "" #: ulng.rsvarwillhaveendingdelimiter msgid "Paths will have ending delimiter" msgstr "" #: ulng.rsvarwillnotbequoted msgid "Filenames will not be quoted from here" msgstr "" #: ulng.rsvarwillnotdointerminal msgid "Command will be done in terminal, closed at the end" msgstr "" #: ulng.rsvarwillnothaveendingdelimiter msgid "Paths will not have ending delimiter (default)" msgstr "" #: ulng.rsvfsnetwork msgctxt "ulng.rsvfsnetwork" msgid "Network" msgstr "Netværk" #: ulng.rsviewabouttext msgid "Internal Viewer of Double Commander." msgstr "Double Commanders interne fremviser" #: ulng.rsviewbadquality msgid "Bad Quality" msgstr "" #: ulng.rsviewencoding msgctxt "ulng.rsviewencoding" msgid "Encoding" msgstr "Koder" #: ulng.rsviewimagetype msgid "Image Type" msgstr "" #: ulng.rsviewnewsize #, fuzzy msgctxt "ulng.rsviewnewsize" msgid "New Size" msgstr "Ny størrelse" #: ulng.rsviewnotfound msgid "%s not found!" msgstr "%s ikke fundet!" #: ulng.rsviewwithexternalviewer msgid "with external viewer" msgstr "" #: ulng.rsviewwithinternalviewer msgid "with internal viewer" msgstr "" #: ulng.rsxreplacements msgid "Number of replacement: %d" msgstr "" #: ulng.rszeroreplacement msgid "No replacement took place." msgstr "" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/��������������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717724�013304� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/COPYING.modifiedLGPL.txt��������������������������������������������������������0000644�0001750�0000144�00000002353�12014201074�017363� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is the file COPYING.modifiedLGPL, it applies to several units in the Lazarus sources distributed by members of the Lazarus Development Team. All files contains headers showing the appropriate license. See there if this modification can be applied. These files are distributed under the Library GNU General Public License (see the file COPYING.LGPL) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you didn't receive a copy of the file COPYING.LGPL, contact: Free Software Foundation, Inc., 675 Mass Ave Cambridge, MA 02139 USA �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/changelog.txt�������������������������������������������������������������������0000644�0001750�0000144�00000024351�12014201074�015746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-------------------------------------------------------------------------------- 08.10.2011 Release Double Commander 0.5.1 beta -------------------------------------------------------------------------------- 08.10.2011 FIX: Access violation when open archive with symbolic links 05.10.2011 FIX: Bug [3417849] Typo in options section: thubnails->thumbnails. 01.10.2011 FIX: Bug [3402974] Problems with SAMBA resources with authorization 30.09.2011 FIX: Bug [3416235] Incorrect default path to Lua library 30.09.2011 FIX: Bug [3411184] Can not extract empty folder from archive 30.09.2011 FIX: Bug [3415942] Editor->Search&Replace field order is bad... 28.09.2011 FIX: List index out of bounds on deleting separator from toolbar (bug [3415074]). 27.09.2011 FIX: Copying full paths of filenames from search result. 22.09.2011 UPD: Czech language file from Martin Štrobl. 10.09.2011 UPD: Russian language file 09.09.2011 FIX: [Zip plugin] Slow opening of big archives; speed up test operation. 09.09.2011 FIX: Force date, time separators to /, : in case they are UTF-8 characters in current locale (Unix). 08.09.2011 FIX: Try to fix access violation when accessing empty DVD drive (bug [3404533]) 07.09.2011 UPD: Traditional Chinese language file by mlance_2 07.09.2011 FIX: Build libmime with large file support (bug [3403818]). 06.09.2011 FIX: Multi rename files with not ASCII names and using range 04.09.2011 FIX: Move files when can not copy attributes (e.g. move files from NTFS to EXT3 file system under Linux) 03.09.2011 FIX: Delete HotDir with item index = 0 02.09.2011 FIX: Access violation error with some wcx and wfx plugins -------------------------------------------------------------------------------- 28.08.2011 Release Double Commander 0.5.0 beta -------------------------------------------------------------------------------- 21.08.2010 Release Double Commander 0.4.5.2 beta -------------------------------------------------------------------------------- 15.08.2010 FIX: Use case insensitive compare for verify checksum operation 20.04.2010 FIX: Bug [2989234] Does not work with icloud 10.04.2010 ADD: Korean language file by Lee, Cheon-Pung 02.03.2010 UPD: Use Escape key to leave editing command line and focus files panel when command line is empty [2961106]. 01.03.2010 UPD: Ukrainian language file by Ma$terok 01.03.2010 UPD: Polish language file by Krzysztof Modelski 01.03.2010 FIX: Sorting files by size if size > 4GB (bug [2960850]). 25.02.2010 FIX: Bug [2957145] Directory hotlist hotkey issue 25.02.2010 FIX: Bug [2957145] Directory hotlist hotkey issue 25.02.2010 FIX: Bug [2957159] File type color dialog color selection 24.02.2010 ADD: Polish language file by Krzysztof Modelski 24.02.2010 FIX: Get content plugin name 24.02.2010 FIX: ContentGetDetectString function 23.02.2010 FIX: Cross compiling unrar plugin from Linux 32 to 64 -------------------------------------------------------------------------------- 22.02.2010 Release Double Commander 0.4.5.1 beta -------------------------------------------------------------------------------- 22.02.2010 UPD: Better error message when error in CopyFile. 22.02.2010 FIX: Crash in CopyFile when cannot read file. 21.02.2010 FIX: Bug [2955066] Split file 19.02.2010 FIX: Unneeded separator in Actions submenu if no actions were added. 19.02.2010 FIX: Some fixes for bug [2954358] error with write permissions 17.02.2010 UPD: Ukrainian language file by Ma$terok 17.02.2010 UPD: English help files by Rod J 14.02.2010 ADD: File search in multiply directories 13.02.2010 FIX: Hangs on load string from incorrect language file 13.02.2010 UPD: Czech language from Petr Stasiak 12.02.2010 FIX: Bug [2947859] "terminal window size+Apply in preferences". 11.02.2010 FIX: "Open with" under Windows 11.02.2010 UPD: Language files. 11.02.2010 FIX: Changed '=' TargetEqualSource to '>' RightEqualLeft and '<' LeftEqualRight (bug [2947845]). 10.02.2010 FIX: Bug [2947846] '..' item always becomes current if going up inside an archive 10.02.2010 FIX: Crash in drag&drop on Windows Vista/7. 07.02.2010 FIX: Create directory on empty disk 02.02.2010 FIX: Bug [2944649] Copy files 02.02.2010 FIX: Check if application is active instead of checking main form's focus if FileWatcher should not work when application is in the background. This fixes the issue where refreshing file list is not working even when DC is active. 29.01.2010 FIX: Don't execute hotkeys that coincide with quick search combination 27.01.2010 FIX: Drive panel alignment 27.01.2010 FIX: Encoding in Zip archives 27.01.2010 FIX: Rar stores file name in OEM encoding (from RAR documentation) 26.01.2010 FIX: Find files in hidden directories 26.01.2010 FIX: Find hidden folders 25.01.2010 FIX: Don't copy last LineEnding when copy file names to clipboard 24.01.2010 FIX: Bug [2938523] Console 23.01.2010 FIX: Case insensitive file search for non ACSII file names 23.01.2010 FIX: Debian package: Section name 23.01.2010 FIX: Debian package: add "Maintainer" and "Depends" fields 22.01.2010 FIX: Debian package architecture for Linux 64 bit 21.01.2010 FIX: Add Wfx plugins from options dialog 20.01.2010 FIX: Stretch bitmaps from file associations manager 19.01.2010 UPD: File properties dialog interface alignment 19.01.2010 UPD: Options dialog interface alignment 19.01.2010 FIX: Unpack multivolume archives 16.01.2010 FIX: Show only actions names in "Actions submenu" 16.01.2010 FIX: Incorrect save/load search/replace history 16.01.2010 UPD: Use new icon in About window. 15.01.2010 FIX: Case insensitive quick search for non ASCII symbols 15.01.2010 FIX: Viewer/editor window getting bigger every time it is opened (bug [2924166]). 15.01.2010 FIX: Error when can not read/write file description 15.01.2010 FIX: Delete to trash with file paths containing spaces. Fix reading error from gvfs-trash. 13.01.2010 FIX: Skip all files in move operation 13.01.2010 FIX: Bug [2930960] doublecmd.sh -------------------------------------------------------------------------------- 10.01.2009 Release Double Commander 0.4.5 beta -------------------------------------------------------------------------------- 17.05.2009 ADD: Feature Request [2777123] Show occupied space 14.03.2009 FIX: Bug [ 2650798 ] WCX plugins not work property... -------------------------------------------------------------------------------- 28.02.2009 Release Double Commander 0.4 beta -------------------------------------------------------------------------------- 31.01.2009 FIX: Bug [ 2513089 ] panel 18.01.2009 ADD: Drag&Drop to external applications under Windows 18.01.2009 FIX: Bug [ 2513084 ] tabs 12.01.2009 ADD: Pause/Start file operations 11.01.2009 FIX: Bug [ 2496645 ] sort files 05.01.2009 FIX: Bug [ 2403796 ] removing tabs 25.12.2008 FIX: Bug [ 2434007 ] translate mistakes 23.12.2008 FIX: Bug [ 2433957 ] hidden column 13.12.2008 FIX: Bug [ 2421650 ] colors submenu 13.12.2008 FIX: Bug [ 2423750 ] scrollbar in about window 12.12.2008 FIX: Bug [ 2421607 ] different fonts 12.12.2008 FIX: Bug [ 2421601 ] border 09.12.2008 FIX: Bug [ 2403863 ] rubbish after copying 07.12.2008 ADD: Feature Request [ 2404017 ] context menu for Drive button menu 05.12.2008 FIX: Bug [ 2383944 ] drive buttons 03.12.2008 FIX: Bug [ 2379193 ] font at first line 16.11.2008 FIX: Bug [ 1696012 ] Copying in Linux 26.10.2008 FIX: Bug [ 1989488 ] Don't change interface language 15.10.2008 FIX: Bug [ 1741043 ] Copying 13.10.2008 FIX: Bug [ 1874281 ] "No enough free space" instead "Permition denied" 07.09.2009 FIX: Bug [ 1971187 ] Don't work with user rights 07.09.2008 FIX: Bug [ 1934572 ] Zip plugin is down on open read only archive 21.08.2008 ADD: Feature Request [ 1938593 ] More suitable and powerful plugin configuration 18.08.2008 ADD: Feature Request [ 1870517 ] Don't show not critical error messages 09.07.2008 ADD: Feature Request [ 2014247 ] Drive context menu 06.07.2008 ADD: Feature Request [ 1996336 ] Drag&Drop support 06.07.2008 FIX: Bug [ 1947579 ] Quick search by letter and non-alpha characters 03.07.2008 FIX: Bug [ 1945378 ] Crash on changing icon size 17.05.2008 ADD: Feature Request [ 1951507 ] Wipe file 02.05.2008 ADD: Feature Request [ 1880894 ] Open in tab directory under cursor (Ctrl+Up) 28.04.2008 FIX: Bug [ 1953396 ] Error if "Directory hotlist" (Ctrl+D) is empty -------------------------------------------------------------------------------- 15.04.2008 Release Double Commander 0.3.5 alpha -------------------------------------------------------------------------------- 12.04.2008 FIX: Bug [ 1938948 ] Drive chooser shortcuts missing 08.04.2008 FIX: Bug [ 1870771 ] Remove plugin. 04.04.2008 FIX: Bug [ 1934290 ] It is impossible reassign icons for some types. 23.03.2008 FIX: Bug [ 1870551 ] F3 on directory. 23.03.2008 FIX: Bug [ 1921004 ] Error with display drive name on drive menu button. 12.03.2008 FIX: Bug [ 1888653 ] file panel and copy/move 06.03.2008 FIX: Bug [ 1860836 ] "Show" does not refresh 05.03.2008 FIX: Bug [ 1860660 ] Non-translatable strings 28.02.2008 FIX: The filedate of the copied file is <> to original file date (Windows) unlike TotalCmd. 17.02.2008 FIX: Bug [ 1880539 ] Context menu for directory. 04.02.2008 FIX: Bug [ 1886005 ] Быстрый поиск - завешивает. 03.02.2008 FIX: Bug [ 1869787 ] Options -> Colors -> File types and attributes 03.02.2008 ADD: Feature Request [1880515] Enhanced quick search 03.02.2008 FIX: Bug [ 1870552 ] Alt quick search 30.01.2008 FIX: Bug [ 1870808 ] Execute files under Linux 27.01.2008 ADD: Options page "Configuration storage" 26.01.2008 ADD: UnRAR plugin (now it working under Windows and Linux) 26.01.2008 ADD: Feature Request [ 1869250 ] Try to open archive by Ctrl+PageDown 18.01.2008 FIX: Bug [ 1869790 ] Options -> File types colors - illogical 17.01.2007 FIX: Bug [ 1869784 ] Directories and diff 17.01.2007 FIX: Bug [ 1870772 ] lynx navigation, "right" for "up level" 13.01.2007 FIX: Bug [ 1869757 ] External editor 13.01.2007 FIX: Bug [ 1869786 ] External diff - DC not send file. 11.01.2008 FIX: Bug [ 1869243 ] lynx navigation and enter in arhives. 11.01.2008 FIX: Bug [ 1860652 ] "Run Term" Opens terminal in last accessed directory, not in current panel's directory 11.01.2008 FIX: Bug [ 1861911 ] must add version.inc 10.01.2008 FIX: Bug [ 1860271 ] lynx navigation and archives -------------------------------------------------------------------------------- 26.12.2007 Release Double Commander 0.3 alpha ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/COPYING.LGPL.txt����������������������������������������������������������������0000644�0001750�0000144�00000061447�12137141242�015701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LIBRARY GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 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. [This is the first released version of the library GPL. It is numbered 2 because it goes with version 2 of the ordinary GPL.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, 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 library, or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, 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 companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Library 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/INSTALL.txt���������������������������������������������������������������������0000644�0001750�0000144�00000004376�12667513743�015161� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Compiling Double Commander 1) What you need? Double Commander is developed with Free Pascal and Lazarus. Current version requires at least FPC 2.6.4 and Lazarus 1.4.2. 2) Using the IDE to develop and build DC. If you want to use Lazarus IDE to develop Double Commander, first you have to install a few additional components all of which reside in components directory of DC sources. You must open each .lpk package file: - chsdet/chsdet.lpk - CmdLine/cmdbox.lpk - multithreadprocs/multithreadprocslaz.lpk - dcpcrypt/dcpcrypt.lpk - doublecmd/doublecmd_common.lpk - KASToolBar/kascomp.lpk - gifanim/pkg_gifanim.lpk - viewer/viewerpackage.lpk and install it into Lazarus (menu: Package -> Open package file (.lpk) -> Browse to needed .lpk file -> Press "Install", if "Install" disabled then press "Compile" instead). Choose "No" when asked for rebuilding Lazarus after each package then rebuild Lazarus when you have installed all of them. After rebuilding Lazarus open the project file src/doublecmd.lpi. Compile. 3) Building DC from command line. From command line (Windows) Use build.bat script to build DC on Windows. First you need the lazbuild utility of Lazarus to be somewhere in your PATH or you need to edit the build script and change the lazpath variable to point to it. Execute the script to start the build process. Make sure you use all parameter if you're building for the first time, so that also components and plugins are built: > build.bat all or alternatively without plugins > build.bat components > build.bat From command line (Linux) Use build.sh script to build DC on Windows. First you need the lazbuild utility of Lazarus to be somewhere in your PATH and if you installed a Lazarus package it should already be there. Otherwise you need to edit the build script and change the lazbuild variable to point to it. On Linux two widgetsets are supported: GTK2 or QT4. You can choose one by setting lcl environment variable before executing the script to either gtk2 or qt, for example: $ lcl=qt ./build.sh Execute the script to start the build process. Make sure you use all parameter if you're building for the first time, so that also components and plugins are built: $ ./build.sh all or alternatively without plugins $ ./build.sh components $ ./build.sh ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/COPYING.txt���������������������������������������������������������������������0000644�0001750�0000144�00000043254�12137141242�015140� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/COPYING.FPC.txt�����������������������������������������������������������������0000644�0001750�0000144�00000002275�12606472177�015564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is the file COPYING.FPC, it applies to the Free Pascal Run-Time Library (RTL) and packages (packages) distributed by members of the Free Pascal Development Team. The source code of the Free Pascal Runtime Libraries and packages are distributed under the Library GNU General Public License (see the file COPYING) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. If you didn't receive a copy of the file COPYING, contact: Free Software Foundation 675 Mass Ave Cambridge, MA 02139 USA �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/doc/changelog.htm�������������������������������������������������������������������0000644�0001750�0000144�00000517613�12675713752�015757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="http://doublecmd.sourceforge.net/mantisbt/css/default.css" /> <script type="text/javascript"><!-- if(document.layers) {document.write("<style>td{padding:0px;}<\/style>")} // --></script> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta http-equiv="Pragma" content="no-cache" /> <meta http-equiv="Cache-Control" content="no-cache" /> <meta http-equiv="Pragma-directive" content="no-cache" /> <meta http-equiv="Cache-Directive" content="no-cache" /> <meta http-equiv="Expires" content="Sat, 13 Jun 2015 07:55:31 GMT" /> <link rel="shortcut icon" href="/mantisbt/../favicon.ico" type="image/x-icon" /> <link rel="search" type="application/opensearchdescription+xml" title="MantisBT: Text Search" href="http://doublecmd.sourceforge.net/mantisbt/browser_search_plugin.php?type=text" /> <link rel="search" type="application/opensearchdescription+xml" title="MantisBT: Issue Id" href="http://doublecmd.sourceforge.net/mantisbt/browser_search_plugin.php?type=id" /> <title>Change Log - Double Commander Bug Tracker Double Commander - Change Log

    Double Commander - 0.7.1 (Released 2016-03-27) View Issues ]
    ===========================================
    - 0001335: [File operations] Random crashes when searching (Alt-F7). 'Can't focus' error (Alexx2000) - resolved.
    - 0000407: [Language translation] Updated Slovenian translation (Alexx2000) - resolved.
    - 0001322: [File operations] Error while Search Text in files (ALT+F7) if using UCS (Alexx2000) - resolved.
    - 0001332: [Graphical user interface] Ukrainian translation of selected files count (Alexx2000) - resolved.
    - 0001323: [Graphical user interface] GUI stops responding to mouse input after overriding file over ftp (Alexx2000) - resolved.
    - 0001324: [Language translation] Translating the pop-up comment on the shortcut (Alexx2000) - resolved.
    - 0001316: [Default] doublecmd.desktop "Categories" in group "Desktop Entry" contains a deprecated value "Application" (Alexx2000) - resolved.
    - 0001320: [Language translation] updates greek translation, DC .7.0 beta compatibility (Alexx2000) - resolved.
    - 0001321: [Language translation] german translation against 0.70 latest beta (Alexx2000) - resolved.
    - 0001315: [Default] doublecmd FTBFS on arm64 (Alexx2000) - resolved.
    - 0001325: [File operations] Clicking on "Go to file" button when search in progress causes doublecmd crash (Alexx2000) - resolved.

    [11 issues]

    Double Commander - 0.7.0 (Released 2016-03-13) View Issues ]
    ===========================================
    - 0001306: [Graphical user interface] GUI: problem with the controls positions in "Custom columns" (Alexx2000) - resolved.
    - 0001291: [Default] Scrolling through files with long names is slow (Alexx2000) - resolved.
    - 0001296: [Graphical user interface] Sorting by file type cannot be reversed (Alexx2000) - resolved.
    - 0001280: [Default] Отсутствуют GetFileComment (комментарии) в панели после "Поиск Файлов" - "Файлы на панель" (Alexx2000) - resolved.
    - 0001274: [Graphical user interface] Icons in main menu disappear after hitting Save/Apply in Options (Alexx2000) - resolved.
    - 0001051: [Graphical user interface] Show MessageBox if compared files are identical (Alexx2000) - resolved.
    - 0001220: [File operations] Swapping the panels (ctrl+U) loses the file selection (Alexx2000) - resolved.
    - 0000636: [Logic] Undetermined result in function TWFXModule.WfxFindNext (Alexx2000) - resolved.
    - 0001279: [Default] Не обновляются GetFileComment (комментарии) в панели после редактирования(Ctrl+Z) (Alexx2000) - resolved.
    - 0001277: [Default] Not all disconnected network drives listed in drive list (Alexx2000) - resolved.
    - 0001144: [Viewer] Add option in the viewer to center images (Alexx2000) - resolved.
    - 0000883: [Plugins] SFTP plugin: "Error reading from file" during copy or view (Alexx2000) - resolved.
    - 0000860: [Plugins] WFX plugin error (Alexx2000) - resolved.
    - 0000962: [Default] Cannot disable tool tips / Не отключаются всплывающие подсказки (Alexx2000) - resolved.
    - 0001190: [Graphical user interface] Drive buttons behave wrong when one drive's label is a substring of other drive's label (Alexx2000) - resolved.
    - 0001116: [Language translation] Cannot change language of column names in panel (Alexx2000) - resolved.
    - 0001206: [Default] Network location "\\" lost after restart (Alexx2000) - resolved.
    - 0001214: [File operations] Drag & Drop a file to the same source (Alexx2000) - resolved.
    - 0000828: [Default] Drap and Drop URL short cuts - resolved.
    - 0000912: [File operations] drag and drop the url from Chrome browser does not create the .url file (Alexx2000) - resolved.
    - 0001265: [Graphical user interface] .cur icons not cached correctly (Alexx2000) - resolved.
    - 0001251: [File operations] FTP - some characters with diacritics in filenames generates errors. (Alexx2000) - resolved.
    - 0001177: [Plugins] Additional characters not displayed (Alexx2000) - resolved.
    - 0000939: [Plugins] wfx ftp plugin does not support unicode filenames (Alexx2000) - resolved.
    - 0001269: [File operations] Access violation when trying to open certain zip file (Alexx2000) - resolved.
    - 0001209: [Graphical user interface] Choosing a drive using the keyboard doesn't work if the active language is not English or CAPS LOCK is off (Alexx2000) - resolved.
    - 0001222: [File operations] Cannot unzip file, if I type folder "nnn" or "./nnn" (Alexx2000) - resolved.
    - 0000221: [Default] I need a separate tree in the double command (Alexx2000) - resolved.
    - 0000584: [Graphical user interface] Ошибка при открытии файла (Alexx2000) - resolved.
    - 0001189: [File operations] Add option to find files/text in files inside archives (Alexx2000) - resolved.
    - 0000489: [Plugins] Реализовать правку файла по F4 прямо в архиве (с поддержкой сторонних плагинов) (Alexx2000) - resolved.
    - 0001026: [Graphical user interface] cm_QuickFilter, filter=toggle does not toggle - resolved.
    - 0001025: [Graphical user interface] Added command cm_CurrentOpenDrives which behaves like cm_LeftOpenDrives but for the currently active panel. - resolved.
    - 0001170: [Editor] Editor should support Unicode (Alexx2000) - closed.

    [34 issues]

    Double Commander - 0.6.6 (Released 2015-10-11) View Issues ]
    ==============================================
    - 0001174: [Language translation] Japanese Translation (Alexx2000) - resolved.
    - 0001188: [Default] Infinite thumbnails creation when switching to thumbnails view at %LOCALAPPDATA%\doublecmd\thumbnails (Alexx2000) - resolved.
    - 0001186: [Logic] CRC-file not found due to case sensitivity error (Alexx2000) - resolved.
    - 0001183: [Plugins] 'Test Archive', don't show an error message (Alexx2000) - resolved.
    - 0001179: [Plugins] Archiv Test raises error (wrong extension) (Alexx2000) - resolved.
    - 0001180: [Plugins] sevenzip configure don't work as expected (Alexx2000) - resolved.
    - 0001142: [Graphical user interface] Directory color highlight (Alexx2000) - resolved.
    - 0000934: [Graphical user interface] no refresh the file/directory-list (Alexx2000) - resolved.
    - 0001157: [File operations] 'overwrite all' user interaction dialog keep requesting permission (sync folder) (Alexx2000) - resolved.
    - 0000644: [File operations] Panel of operations doesn't signal messages (questions) to the user / Не всплывает окно подтверждения - resolved.
    - 0001155: [Graphical user interface] Time not displayed in datetime column (Alexx2000) - resolved.
    - 0001158: [File operations] No feedback about missing access right (Alexx2000) - resolved.
    - 0001151: [Graphical user interface] Column width settings are not preserved when restarted (Alexx2000) - resolved.
    [13 issues]

    Double Commander - 0.6.5 (Released 2015-08-16) View Issues ]
    ==============================================
    - 0001153: [Default] Empty variables %Dl and %Dr for the root directory (Alexx2000) - resolved.
    - 0000455: [Plugins] Copying a directory to FTP and it already exists displays "Unknown error" message (Alexx2000) - resolved.
    - 0001145: [Graphical user interface] Add support for PSD (Photoshop) files when viewing files as thumbnails in the file view panels (Alexx2000) - resolved.
    - 0001147: [Plugins] Samba: Copying error (Alexx2000) - resolved.
    [4 issues]

    Double Commander - 0.6.4 (Released 2015-07-12) View Issues ]
    ==============================================
    - 0001134: [Graphical user interface] Invalid encoding in message dialogs (Alexx2000) - resolved.
    - 0001075: [Viewer] Second image is not resized to fit windows (Alexx2000) - resolved.
    - 0001118: [Graphical user interface] do not reset column-width after "Mark / Compare Directories" (Alexx2000) - resolved.
    - 0001115: [File operations] Cannot open file with space, [ or ] characters in directory name (Alexx2000) - resolved.
    - 0001129: [File operations] Cannot change owner/group under root user (Alexx2000) - resolved.
    [5 issues]

    Double Commander - 0.6.3 (Released 2015-06-13) View Issues ]
    ==============================================
    - 0001103: [Default] Select newly created directory automatically. (Alexx2000) - resolved.
    - 0001068: [Graphical user interface] Зависание на выборе атрибутов при создании шаблона (Alexx2000) - resolved.
    - 0001104: [Graphical user interface] After renaming, selection moves one position down (or up) (Alexx2000) - resolved.
    [3 issues]

    Double Commander - 0.6.2 (Released 2015-05-10) View Issues ]
    ==============================================
    - 0000693: [Plugins] FTP plugin: incorrect implementation UFT8 charset under Windows (Alexx2000) - resolved.
    - 0000965: [File operations] ftp: password is always requested though the connection is marked "anonymous" (Alexx2000) - resolved.
    - 0001063: [Language translation] Орфографические ошибки в русском переводе (Alexx2000) - resolved.
    - 0000906: [Plugins] progress bar not showing progress of ftp transfer (Alexx2000) - resolved.
    - 0000812: [File operations] Stuck & crash when trying to transfer large file from FTP (Alexx2000) - resolved.
    - 0001038: [Graphical user interface] Deleting a file does not update the flat view (Alexx2000) - resolved.
    - 0001040: [File operations] Synchronize Directory give a blocking error of "Access Violation" when try to Synchronize with network folder (Alexx2000) - resolved.
    - 0000583: [Default] Toolbar hotkeys didn't work (Alexx2000) - resolved.
    - 0000704: [Graphical user interface] кнопки дисков наезжают друг на друга (Alexx2000) - resolved.
    - 0001083: [Graphical user interface] Flat control panel buttons checkbox (Alexx2000) - resolved.
    - 0001081: [Plugins] DC падает при попытке настроить плагин FTP (Alexx2000) - resolved.
    [11 issues]

    Double Commander - 0.6.1 (Released 2015-03-28) View Issues ]
    ==============================================
    - 0000749: [Default] FTP white screen after timeout (Alexx2000) - resolved.
    - 0001057: [Plugins] FTP connection cannot be deleted (Alexx2000) - resolved.
    - 0001053: [Default] Fix build under FreeBSD (Alexx2000) - resolved.
    - 0000921: [Default] Do not remember the folder on the disk / Не запоминает папку на диске (Alexx2000) - resolved.
    - 0001041: [Graphical user interface] Hot Key Configuration freezes GUI and crashed app (Alexx2000) - resolved.
    - 0001047: [File operations] Crash during file copying (Alexx2000) - resolved.
    - 0001046: [Default] Access Violation Error (Alexx2000) - resolved.
    - 0001034: [Language translation] Language Russian error (Alexx2000) - resolved.
    - 0000567: [Plugins] Don't close log window after ftp disconnect / Не убирается консоль после выхода с ftp (Alexx2000) - resolved.
    - 0001003: [Logic] Open terminal (F9) does not go to the current directory (but to home) (Alexx2000) - resolved.
    - 0000891: [Graphical user interface] Crash in file compare while scrolling (Alexx2000) - resolved.
    - 0000905: [Plugins] FTP reconnecting problem (Alexx2000) - resolved.
    - 0000971: [Default] Listing of hidden files (Alexx2000) - resolved.
    - 0001011: [Language translation] Please optimize PNG images (doublecmd-help) (Alexx2000) - resolved.
    - 0001010: [Language translation] Please convert CR/LF to LF in HTML files (doublecmd-help) (Alexx2000) - resolved.
    - 0001020: [Plugins] WCX plugins exception (Alexx2000) - resolved.
    - 0001027: [Plugins] Ошибка при копировании из сети (Alexx2000) - resolved.
    - 0001030: [Language translation] german translation for DC-beta 2015-Feb-08 (Alexx2000) - resolved.
    - 0000826: [Language translation] Languaje Spanish error (Alexx2000) - resolved.
    - 0001007: [Default] Incorrect FSF address in doublecmd-kde.py file (Alexx2000) - resolved.
    - 0001012: [Default] Please clean static libs from plugins (Alexx2000) - resolved.
    - 0000857: [Editor] More features for text viewer - closed.
    [22 issues]

    Double Commander - 0.6.0 (Released 2015-02-08) View Issues ]
    ==============================================
    - 0000932: [Plugins] zipx support (Alexx2000) - resolved.
    - 0000989: [Graphical user interface] View files in syncdirs (Alexx2000) - resolved.
    - 0000929: [Default] Unhandled exception: EInvalidPointer: Invalid pointer operation (Alexx2000) - resolved.
    - 0000680: [File operations] Button bar functions does not expand file/directory parameters into archives (Alexx2000) - resolved.
    - 0000147: [File operations] меню копирования\перемещения файлов / Auto rename when file exists on copying (Alexx2000) - resolved.
    - 0000497: [Plugins] не распаковываются файлы из архива (Alexx2000) - resolved.
    - 0000760: [File operations] incorrect running parameters for program "Compare by Contents" (Alexx2000) - resolved.
    - 0000986: [Graphical user interface] Page up/down does not work in cm_LeftOpenDrives and cm_RightOpenDrives (Alexx2000) - resolved.
    - 0000982: [Graphical user interface] options do not accept external editor Path (Alexx2000) - resolved.
    - 0000950: [Graphical user interface] cm_makedir icon is missing (Alexx2000) - resolved.
    - 0000977: [Graphical user interface] Coloring by file types fails when ".com" string exists in filename (Alexx2000) - resolved.
    - 0000748: [Graphical user interface] Files in panels have wrong coloring (Alexx2000) - resolved.
    - 0000972: [File operations] Setting a default program for opening files doesn't work (Alexx2000) - resolved.
    - 0000920: [File operations] cm_CopySamePanel acts like cm_Copy when a zip is open on the other panel (Alexx2000) - resolved.
    - 0000954: [Viewer] The intrernal viewer doesn't focus or scroll properly (Alexx2000) - resolved.
    - 0000691: [Graphical user interface] [Patch] Rename file (as pressing F2 key) with left mouse button (Alexx2000) - resolved.
    - 0000098: [File operations] Панель файлов: Ctrl+B - показать все файлы как в TC (Alexx2000) - resolved.
    - 0000144: [Graphical user interface] CTRL+B - show the content of all nested directories (Alexx2000) - resolved.
    - 0000716: [Graphical user interface] Overlay icons are not updated when pressing Ctrl+R (Alexx2000) - resolved.
    - 0000923: [Plugins] Uncorrect work of build in zip.wcx plugin (Alexx2000) - resolved.
    - 0000101: [Plugins] a synchronization tool (like freecommander) - resolved.
    - 0000643: [File operations] [PATCH] add a hotkey to change dir to home (Alexx2000) - resolved.
    - 0000145: [Graphical user interface] Regular Expressions in file content search is really needed (Alexx2000) - resolved.
    - 0000173: [Graphical user interface] Display more details than just filename if file exists when copying/moving / Диалог Копирования файлов если файл уже существует (Alexx2000) - resolved.
    - 0000711: [Default] Crash displaying tooltip after display change - closed.
    - 0000994: [File operations] Not all files extracted from archive (Alexx2000) - closed.
    - 0000918: [Default] External Diff request (Alexx2000) - closed.
    - 0000534: [Plugins] При выходе из архива открывается не та папка - closed.
    - 0000830: [Editor] Additional file extensions for syntax highlighters (Alexx2000) - closed.
    [29 issues]

    Double Commander - 0.6.0 (trunk) (Released 2015-02-08) View Issues ]
    ======================================================
    - 0000593: [Default] не могу собрать dc - closed.
    - 0000551: [Default] Build failure: Can't find unit DCFileAttributes used by uFileProperty - closed.
    [2 issues]

    Double Commander - 0.5.11 (Released 2014-09-27) View Issues ]
    ===============================================
    - 0000919: [Viewer] Can't build wlxMplayer with qt4pas (Alexx2000) - resolved.
    - 0000889: [Default] Build scripts should exit on error (Alexx2000) - resolved.
    - 0000656: [Graphical user interface] Panel switcher does not honor locked tabs (Alexx2000) - resolved.
    - 0000895: [Graphical user interface] Tab 'locked with directories opened in new tabs' can be switched to another directory via 'Target=Source' (Alt+Z) command (Alexx2000) - resolved.
    - 0000916: [Default] Ошибка при компиляции (PPU Source: viewercontrol.pas not found) (Alexx2000) - resolved.
    - 0000882: [File operations] Потеря содержимого файлов при копировании (Alexx2000) - resolved.
    - 0000212: [File operations] В найденных файлах (alt+f7) не работает меню / Context menu does not work in search results panel (Alexx2000) - resolved.
    - 0000850: [File operations] CTRL-right on ZIP archive doesn't set parent directory correctly (Alexx2000) - resolved.
    - 0000913: [Graphical user interface] Sorting works even with disabled column headers (Alexx2000) - resolved.
    - 0000888: [Default] Don't rebuild widget dependent packages for Lazarus 1.2 (Alexx2000) - resolved.
    - 0000881: [Default] Buttons at toolbar will disappear when button bar is hidden (Alexx2000) - resolved.
    - 0000869: [File operations] Multi Rename Tool doesn't correctly handle filename containing colon character (Alexx2000) - resolved.
    - 0000587: [Graphical user interface] cm_TargetEqualSource changes tabs with "Locked with Directories Opened in New Tabs" and "Locked" tab flags (Alexx2000) - closed.
    [13 issues]

    Double Commander - 0.5.10 (Released 2014-05-12) View Issues ]
    ===============================================
    - 0000844: [Logic] "parent" directory for deleted directories (Alexx2000) - resolved.
    - 0000737: [Default] List index (3) out of bounds (Alexx2000) - resolved.
    - 0000862: [File operations] empty zip.ini (Alexx2000) - resolved.
    - 0000847: [File operations] Unhandled exception: ERangeError: Range check error on copying large number of files/directories (Alexx2000) - resolved.
    - 0000855: [Graphical user interface] & (ampersand) sign appears double in tab names (Alexx2000) - resolved.
    - 0000853: [Graphical user interface] Tab disappears from the GUI after Switch tab action (Alexx2000) - resolved.
    - 0000854: [Graphical user interface] New tab action does not create new tab (Alexx2000) - resolved.
    [7 issues]

    Double Commander - 0.5.9 (Released 2014-03-23) View Issues ]
    ==============================================
    - 0000806: [File operations] Error when opening files with aposhtrophes (') in name (Alexx2000) - resolved.
    - 0000810: [Default] Can't update to the latest version via software updater or apt-get (Alexx2000) - resolved.
    - 0000838: [File operations] Compare Files -> crashes (when works!) (Alexx2000) - resolved.
    - 0000463: [Graphical user interface] Navigation by clicking on the path does not work for archives / Переход по щелчку на папку в пути не работает для архивов (Alexx2000) - resolved.
    - 0000730: [File operations] Copy files expects user response but there's no dialogue box (Alexx2000) - resolved.
    - 0000814: [Default] Move /tmp/doublecmd to user's XDG_CACHE_DIR (Alexx2000) - resolved.
    - 0000803: [File operations] Compare by contents does not work (Alexx2000) - resolved.
    - 0000835: [Language translation] german translation against 0.58 (28.12.2013) revision from 14. February 2014 (Alexx2000) - resolved.
    - 0000823: [Language translation] translations (Alexx2000) - resolved.
    - 0000800: [Graphical user interface] File panels: file names columns shorter than avilable space in the file pane - in BRIEF mode (Alexx2000) - resolved.
    - 0000820: [Default] Please link with --as-needed (Alexx2000) - resolved.
    - 0000821: [Default] Please add keywords to desktop file (Alexx2000) - resolved.
    - 0000804: [Logic] Search by date from doesn't work (Alexx2000) - closed.
    - 0000846: [Default] Unable to open file pixmaps.txt (Alexx2000) - closed.
    [14 issues]

    Double Commander - 0.5.8 (Released 2013-12-28) View Issues ]
    ==============================================
    - 0000770: [File operations] error when 'executing(opening)' files with special chars (Alexx2000) - resolved.
    - 0000650: [Graphical user interface] Quickview error when resizing panel or minimizing program (Alexx2000) - resolved.
    - 0000767: [Default] If Quick View Panel is open, when resizing the window an error occurs (Alexx2000) - resolved.
    - 0000728: [File operations] App error after copy or move (Alexx2000) - resolved.
    - 0000759: [File operations] copy or Drag&Drop unhandled exception (Alexx2000) - resolved.
    - 0000801: [Graphical user interface] Preset (and wrong) text & background colours instead of sys defaults for file panels. (Alexx2000) - resolved.
    - 0000788: [File operations] Software does not make use of drag n drop (Alexx2000) - resolved.
    - 0000784: [Graphical user interface] Create many tabs by unysual way. (Alexx2000) - resolved.
    - 0000769: [Graphical user interface] Search results list is only partially visible (Alexx2000) - resolved.
    - 0000700: [Graphical user interface] Tabstop header blinks on mouse over / панель колонок мигает при наведении курсора. (Alexx2000) - resolved.
    - 0000768: [Default] If Quick View Panel is open, when deleting a file an error occurs (Alexx2000) - resolved.
    - 0000766: [File operations] Crash if search template using for file coloring has invalid regular expression (Alexx2000) - resolved.
    - 0000733: [File operations] 'Open With' command and applicarions with spaces (Alexx2000) - resolved.
    - 0000560: [File operations] descript.ion file when delete - closed.
    - 0000752: [Graphical user interface] Selection by shift+arrows (Alexx2000) - closed.
    [15 issues]

    Double Commander - 0.5.7 (Released 2013-09-22) View Issues ]
    ==============================================
    - 0000729: [File operations] when I move directory, after <enter> pressed, doublecmd loose focus (Alexx2000) - resolved.
    - 0000710: [Default] arm-linux build patch (Alexx2000) - resolved.
    - 0000718: [Graphical user interface] [PATCH] Fixed rename inactive tab (cobines) - resolved.
    - 0000715: [Graphical user interface] Language change does not update toolbar buttons text (cobines) - resolved.
    - 0000684: [Default] Drag&drop part of a file name when renaming file leads to ERR FILE NOT FOUND (cobines) - resolved.
    - 0000676: [File operations] when copying a directory to its own soft-link, all files deleted (cobines) - resolved.
    - 0000722: [Plugins] Unhandled Exception when adding wdx plugin (Alexx2000) - closed.
    - 0000712: [Graphical user interface] Main form shortcuts are triggered when other non-modal dialogs are active (Alexx2000) - closed.
    [8 issues]

    Double Commander - 0.5.6 (Released 2013-07-20) View Issues ]
    ==============================================
    - 0000696: [Default] Ошибка при одновременном выполнении операций "показать размеры всех папок" и "вид - подробный" (Alexx2000) - resolved.
    - 0000450: [Default] Drag&Drop image to MS Word / Перенос фото в Word (Alexx2000) - resolved.
    - 0000692: [File operations] Problematic Drag & Drop (Alexx2000) - resolved.
    - 0000689: [Default] Fix build under FreeBSD (Alexx2000) - resolved.
    - 0000491: [Default] DC crashes after sleep or display change - closed.
    - 0000544: [Graphical user interface] Files copy progress - closed.
    [6 issues]

    Double Commander - 0.5.5 (Released 2013-06-29) View Issues ]
    ==============================================
    - 0000632: [Default] Drives list do not show all mounted drives (Alexx2000) - resolved.
    - 0000682: [Default] Error when starting doublecmd (Alexx2000) - resolved.
    - 0000407: [Language translation] Updated Slovenian translation (cobines) - resolved.
    - 0000453: [Plugins] Cannot create tar.bz2 archive (Alexx2000) - resolved.
    - 0000659: [Default] All tabs are lost after restart (Alexx2000) - resolved.
    - 0000575: [Graphical user interface] Unable to reopen viewer when it was closed in minimized state (Alexx2000) - resolved.
    - 0000665: [Language translation] german translation against 0.5.5 r5195 (Alexx2000) - resolved.
    - 0000273: [Default] При запуске программы и при изменении конфигурации выскакивает ошибка (Alexx2000) - resolved.
    - 0000664: [Logic] Не выводится диалог просмотра/изменения свойств у файлов, в панели "Результаты поиска" (Alexx2000) - resolved.
    - 0000073: [Graphical user interface] OSX: Freeze when resizing (Alexx2000) - resolved.
    - 0000624: [Default] Некорретная работа поиска (Alexx2000) - resolved.
    - 0000519: [Logic] quick filter is not cleaned after directory changing (Alexx2000) - resolved.
    - 0000662: [Graphical user interface] Не работает добавление команды (Alexx2000) - resolved.
    - 0000658: [Default] Frozen forever on Ctrl+Shift+F1 (Alexx2000) - resolved.
    - 0000655: [Graphical user interface] Folder tabs crash (Alexx2000) - resolved.
    - 0000653: [File operations] copying(unpacking) files from inside archive to .. (above) does not work (Alexx2000) - resolved.
    - 0000631: [Editor] F4 opens external editor but not load edit file (Alexx2000) - resolved.
    - 0000605: [Language translation] Modify Language doublecmd.cht.po (055.4961) (cobines) - resolved.
    - 0000062: [Logic] When quickly doubleclicking to move through directories some doubleclicks don't work / Задержка при перемещениях в папках (cobines) - resolved.
    - 0000414: [Language translation] Modify Language doublecmd.cht.po (cobines) - resolved.
    - 0000604: [Language translation] german lang-file against r.5003 (hopefully...) (cobines) - resolved.
    - 0000548: [Default] Error occurs when delete only one element in search templates (cobines) - resolved.
    - 0000515: [Graphical user interface] Change translation "Remove Tab" and "Remove All Tabs" to "Close Tab", resp. "Remove All Tabs" (cobines) - resolved.
    - 0000549: [Default] Crash when starting Double Command from a write protected device (cobines) - resolved.
    - 0000127: [Graphical user interface] Select unit for file size (b, kB, MB, ..., dynamic) (cobines) - resolved.
    - 0000563: [Language translation] german lang-file against r.4956 (cobines) - resolved.
    - 0000255: [Graphical user interface] Панель файлов: По команде 'сортировать по имени файлы' так же отображаются значки сортировки расширения - resolved.
    - 0000387: [Graphical user interface] Missing 256x256 icon on Windows Vista/7/8 (cobines) - resolved.
    - 0000478: [Graphical user interface] Hot key for Show Hidden/System files (cobines) - resolved.
    - 0000474: [Language translation] german lang-file against r.4822 from 13-May-2012 (cobines) - resolved.
    - 0000219: [Graphical user interface] Красивый прогресс Свободного места (SOLON7) - resolved.
    - 0000282: [Graphical user interface] Blinking of file list panel while browsing FTP (cobines) - resolved.
    - 0000135: [Graphical user interface] Add options to enable/disable confirmations of file operations / Подтверждение операций (cobines) - resolved.
    - 0000027: [Graphical user interface] Не правильно организованы предупреждения (cobines) - resolved.
    - 0000183: [Graphical user interface] Close All TAB except locked TAB (cobines) - resolved.
    - 0000471: [Language translation] german lang-file against r.4782 from 08-May-2012 (cobines) - resolved.
    - 0000077: [Default] Change buttons on set file properties dialog (Unix) to be more informative (was: Атрибуты) (cobines) - resolved.
    - 0000291: [File operations] When unpacking from an archive progress goes beyond 100% / Проценты зашкаливают (cobines) - resolved.
    - 0000466: [File operations] file selection with mouse doesn't scroll (cobines) - resolved.
    - 0000322: [File operations] The ability to unpack in the parent directory with drag-and-drop (cobines) - resolved.
    - 0000432: [Graphical user interface] Bug: Configuration > Options > Colors > File panels > Cannot move selected node up (using up arrow) (cobines) - resolved.
    - 0000445: [Default] Hangs on archive opening / Крэш при работе с zip-файлами (cobines) - resolved.
    - 0000451: [Default] Command "cd" produces error "ChDir failed" (cobines) - resolved.
    - 0000159: [Default] Directory exists dialog on copy / move (cobines) - resolved.
    - 0000292: [Graphical user interface] Can't sort on extension if extensions column is not in the current column setup (cobines) - resolved.
    - 0000444: [Graphical user interface] Crash when closing "Configure custom columns view" dialog via OK-button. (cobines) - resolved.
    - 0000443: [Default] Annoying bug in "Configure custom columns view" dialog. (cobines) - resolved.
    - 0000438: [Language translation] german lang-file against r.4641 from 20-April-2012 (cobines) - resolved.
    - 0000025: [Logic] Error while copying files (cobines) - resolved.
    - 0000130: [Logic] Exclude dir\file in Find Files (cobines) - resolved.
    - 0000067: [File operations] Add option to queue all operation (cobines) - resolved.
    - 0000416: [File operations] Folder Name Not Properly Displayed (cobines) - resolved.
    - 0000409: [Language translation] german lang-file against r.4547 from 5-April-2012 (cobines) - resolved.
    - 0000403: [File operations] Не снимается выделение с файлов. (cobines) - resolved.
    - 0000406: [Language translation] german lang-file against r.4534 from 3-April-2012 (cobines) - resolved.
    - 0000400: [Language translation] german lang-file against r.4515 (cobines) - resolved.
    - 0000393: [Language translation] german against version r.4499 (cobines) - resolved.
    - 0000362: [Plugins] Crash при попытке закрыть файл из архива (cobines) - resolved.
    - 0000339: [Graphical user interface] crashes then remove column in column customizer (only in portable mode) (cobines) - resolved.
    - 0000357: [Default] При переименовании по F2 пропадает файл (cobines) - resolved.
    - 0000298: [Graphical user interface] При вызове Alt+Enter перерисовывается список файлов на панели. раздражает. (cobines) - resolved.
    - 0000241: [Logic] Не удаляет файлы через Shift+Del (cobines) - resolved.
    - 0000133: [Graphical user interface] tabbed dialogs little imporvement (cobines) - resolved.
    - 0000250: [Graphical user interface] [patch] Make trasfer path feature bidirectional (cobines) - resolved.
    - 0000232: [Default] [patch] - Remove explicit OnClick events for menu items (cobines) - resolved.
    - 0000249: [Graphical user interface] Диалог создания каталога (windows) (cobines) - resolved.
    - 0000237: [Graphical user interface] Кнопки дисков, непонятное визуальное отображение. (cobines) - resolved.
    - 0000215: [File operations] Диалог копирования и тд не закрывается по кнопке ESC / Cannot close copy/move dialog after drag&drop (cobines) - resolved.
    - 0000235: [Graphical user interface] Строка свободного места на диске - не до конца заполнена (cobines) - resolved.
    - 0000231: [Graphical user interface] Auto-size columns not working correctly (cobines) - resolved.
    - 0000015: [Graphical user interface] Add missing features to quick search/filter (bbt) - resolved.
    - 0000037: [Logic] Cyrillic filenames with non-UTF8 codepage FS looks like ???? (cobines) - resolved.
    - 0000125: [Graphical user interface] Продолжать поиск/фильтрацию при нажатой клавише ALT как в TC (cobines) - resolved.
    - 0000595: [Graphical user interface] Closing application with CMD+Q does not save current configuration (Alexx2000) - closed.
    - 0000143: [Graphical user interface] Thumbnail view for folders (Alexx2000) - closed.
    - 0000540: [Graphical user interface] List index (-1) out of bounds in search results tab (Alexx2000) - closed.
    - 0000620: [File operations] Incorrect last file selection / Некорректное выделение последнего файла (Alexx2000) - closed.
    - 0000623: [Default] Multiarc reset after saving configuration options (Alexx2000) - closed.
    - 0000626: [Graphical user interface] В окне очереди кнопка "Work in background" отличается от соседей (Alexx2000) - closed.
    - 0000627: [Logic] [PATCH] Open current dir in new tab if unable to open focused dir (Alexx2000) - closed.
    - 0000630: [Viewer] Не отображаются иконки на некоторых кнопках (Alexx2000) - closed.
    - 0000542: [Logic] [PATCH] Don't create new tab when there is already opened (Alexx2000) - closed.
    - 0000622: [File operations] Disable request to choose default application for opening "exe" files (Alexx2000) - closed.
    - 0000619: [Plugins] Negative file size in archive / Размер файла в архиве с минусом (Alexx2000) - closed.
    - 0000607: [Graphical user interface] Error: file not found (Alexx2000) - closed.
    - 0000610: [Graphical user interface] Error: Unable to open file [...]/.directory (Alexx2000) - closed.
    - 0000392: [Graphical user interface] REQUEST: "Open with" custom application option (for right click or windows right click key) (Alexx2000) - closed.
    - 0000020: [Default] not run on wine-1.1.18 (Alexx2000) - closed.
    - 0000573: [Graphical user interface] Layout и полоса (Alexx2000) - closed.
    - 0000597: [File operations] Overwrite if older (Alexx2000) - closed.
    - 0000579: [Default] Can not disable wfx-plugins / Не отключаются плагины (Alexx2000) - closed.
    - 0000590: [File operations] Drag&Drop in one DC panel doesn't work correctly for network shares (Alexx2000) - closed.
    - 0000574: [Default] [PATCH] build.bat updates (Alexx2000) - closed.
    - 0000514: [Default] Doublecmd fails to build several extensions: "recompile with -fPIC" (Alexx2000) - closed.
    - 0000226: [Logic] Нельзя уйти с панели с результатами поиска ALT+F7 (Alexx2000) - closed.
    - 0000557: [Logic] AV when click drive button from search results tab (Alexx2000) - closed.
    - 0000376: [Graphical user interface] Improvement to the "short file size" option (Alexx2000) - closed.
    - 0000555: [Graphical user interface] Missing acceleration keys and bad Tab order in find and other dialogs (Alexx2000) - closed.
    - 0000553: [Graphical user interface] Improper execution of the command in the terminal / Неправильное выполнение команды терминала в windows (Alexx2000) - closed.
    - 0000552: [Graphical user interface] Missing acceleration keys and bad Tab order in dialog "Configuration/Options" (Alexx2000) - closed.
    - 0000539: [Viewer] Viewer does not search for the text specified in file find dialog (Alexx2000) - closed.
    - 0000538: [Graphical user interface] File color is not refreshed after detection of file modification (Alexx2000) - closed.
    - 0000507: [Logic] Сломалась смена буквы диска при переключении таба (Alexx2000) - closed.
    - 0000532: [Default] Access Violation on entering invalid DC command in column customization (Alexx2000) - closed.
    - 0000511: [File operations] авто дополнение при rename не работает (Alexx2000) - closed.
    - 0000522: [File operations] Copying a folder to it’s current folder (copy into active view) does not work (Alexx2000) - closed.
    - 0000434: [Plugins] Hangs when open encrypted RAR archive / Зашифрованные RAR архивы - падает DC. (Alexx2000) - closed.
    - 0000521: [Logic] Using forward slash in paths in windows breaks navigational feature(s) (Alexx2000) - closed.
    - 0000502: [Logic] Опция или принудительно не получать значки .exe/.lnk на сетевых дисках (Alexx2000) - closed.
    - 0000384: [Editor] Excess line break at file end / В конце файла создаётся завершающий перевод строки (Alexx2000) - closed.
    - 0000510: [Editor] Garbage if saving file with BOM / Мусор при сохрании файла в UTF8 (с BOM и без) (Alexx2000) - closed.
    - 0000499: [File operations] Removable disks locked until the application is closed (Alexx2000) - closed.
    - 0000198: [Plugins] ssl support for ftps (Alexx2000) - closed.
    - 0000488: [Plugins] Incorrect tab order / Не последовательное перемещение по полям с помощю TAB. (Alexx2000) - closed.
    - 0000503: [File operations] Снижение дефрагментации (и возможно, увеличение скорости копирования/переноса) через ранее резервирование места (Alexx2000) - closed.
    - 0000129: [Graphical user interface] Brief mode (CTRL-F1 in TC) (Alexx2000) - closed.
    - 0000501: [File operations] "Drop readonly flag" should be unselected by default for file copy in new install. (Alexx2000) - closed.
    - 0000504: [Editor] When editing file and press Esc and then Esc changes will be lost (Alexx2000) - closed.
    - 0000032: [File operations] rename doesn't work if I copy files out of an archive (Alexx2000) - closed.
    - 0000486: [Graphical user interface] Button bar icon - access violation (Alexx2000) - closed.
    - 0000124: [Graphical user interface] Close tab at double click (Alexx2000) - closed.
    - 0000269: [Graphical user interface] Настройки: Шрифты: при изменении имени шрифта, то он не меняется (Alexx2000) - closed.
    - 0000397: [Graphical user interface] Feature request: Ctrl+L: Open directory in default file manager (Alexx2000) - closed.
    - 0000156: [Graphical user interface] CMD Line arguments to specify directory which DC should open (Alexx2000) - closed.
    - 0000048: [Viewer] internal viewer issues (Alexx2000) - closed.
    - 0000436: [Default] Курсор "прыгает" после копирования в туже папку и открытии файла (Alexx2000) - closed.
    - 0000355: [Logic] Не отображает каталог "etc". (Alexx2000) - closed.
    - 0000420: [Plugins] Progress bar works incorrectly when copy big file via samba plugin / при передаче файла по сети (Samba) глюки с прогресс-баром (Alexx2000) - closed.
    - 0000278: [Plugins] SFTP плагин соединяется, но не отображает список папок, пустая панель и всё (Alexx2000) - closed.
    - 0000172: [Graphical user interface] filename/dir completition (Alexx2000) - closed.
    - 0000325: [File operations] Внесите патч для uam (Alexx2000) - closed.
    - 0000320: [File operations] Overwrite all older option (Alexx2000) - closed.
    - 0000169: [Viewer] Horizontal Scrollbar in Viewer (Alexx2000) - closed.
    - 0000248: [Editor] Нет прокрутки в просмотрщике F3 (windows) (Alexx2000) - closed.
    - 0000034: [Viewer] Длинные строки в просмотровщике (Alexx2000) - closed.
    - 0000259: [Graphical user interface] Неправильно отображается командная строка для windows OS, должно быть C:\что-то> (Alexx2000) - closed.
    - 0000233: [Graphical user interface] Новый графический стиль Фонового копирования (Alexx2000) - closed.
    - 0000196: [Logic] Sorting folders differently (Alexx2000) - closed.
    - 0000541: [Graphical user interface] Show full tab path in hint (Alexx2000) - closed.
    - 0000496: [Graphical user interface] Заголовки табуляторов, дублирующаяся стрелка направления сортировки. (Alexx2000) - closed.
    - 0000556: [Language translation] german lang-file against r.4951 (Alexx2000) - closed.
    - 0000559: [Logic] Search in the selected files and directories (Alexx2000) - closed.
    - 0000306: [Logic] Проблема с шаблонами поиска (Alexx2000) - closed.
    - 0000456: [Graphical user interface] Shift+arrow_keys selection does not work (cobines) - closed.
    - 0000529: [Graphical user interface] Folder size in archive doesn't works - closed.
    - 0000311: [File operations] Ошибочное копирование файлов в себя (Alexx2000) - closed.
    - 0000527: [File operations] External Viewer for archive (Alexx2000) - closed.
    - 0000594: [Default] Last tabs/position is not saved (cobines) - closed.
    - 0000578: [Logic] Search does not returns folders (Alexx2000) - closed.
    - 0000569: [Graphical user interface] Displaying tab with folder name containing ampersand (cobines) - closed.
    - 0000570: [File operations] Double Commander locks folder and they cannot be deleted (cobines) - closed.
    - 0000670: [Graphical user interface] File groups coloring broken (Alexx2000) - closed.
    - 0000568: [File operations] Поиск файлов при нажатии Enter открывает файл во встроенном просмотрщике (Alexx2000) - closed.
    - 0000617: [File operations] opening a directory with permissions "drwxr-x---" (should not be opened, but is.) (Alexx2000) - closed.
    - 0000334: [File operations] при попытке открыть зашифрованный файл, появилась ошибка - closed.
    - 0000591: [Plugins] Hangs when viewing file from archive while unpacking operation / Зависает при распаковке файлов, если просмотреть файл из архива (Alexx2000) - closed.
    - 0000565: [Default] Ошибка при выделении всех найденных файлов (Alexx2000) - closed.
    - 0000493: [Plugins] Ошибка при переходе из меню VirtualFileSystem (Alexx2000) - closed.
    - 0000531: [File operations] Don't copy files from WIM image/Не копирует файлы из образа DISM (Alexx2000) - closed.
    - 0000516: [Plugins] Authorization on network resources / Авторизация на сетевых ресурсах (Alexx2000) - closed.
    - 0000528: [Viewer] Incorrect scroll by mouse wheel in Viewer / Прокрутка колесом мыши во встроенном вьювере (Alexx2000) - closed.
    - 0000518: [Default] Вылетает при копировании / перемещении - closed.
    - 0000283: [File operations] Ошибка при копировании и удалении файлов (Alexx2000) - closed.
    - 0000517: [File operations] В отфильтрованном списке криво срабатывает переименование файлов (Alexx2000) - closed.
    - 0000148: [Logic] additional button on file copy (Alexx2000) - closed.
    - 0000477: [Default] Crash. List index (0) out of bounds (cobines) - closed.
    - 0000473: [Default] Crash в настройках.. (cobines) - closed.
    - 0000482: [File operations] При удалении файла/каталога курсор перескакивает на [..] (cobines) - closed.
    - 0000475: [Plugins] Zip plugin doesn't handle symlinks in TAR archives / Не правильно обрабатываются ссылки в архивах tar (cobines) - closed.
    - 0000470: [Default] При подключении к FTP выдает "List out bounds" (cobines) - closed.
    - 0000055: [Default] Ошибка при клике правой кнопкой мыши на сетевой папке (Alexx2000) - closed.
    - 0000218: [Language translation] german lang-file against r.4040 (Alexx2000) - closed.
    - 0000337: [Graphical user interface] Crash (Alexx2000) - closed.
    - 0000427: [Default] опять не собирается по linux (Alexx2000) - closed.
    - 0000440: [Graphical user interface] Выделение не убирается по Esc - closed.
    - 0000462: [Plugins] Зависает при выходе из любого (zip, tar, rar) архива. - closed.
    - 0000168: [Graphical user interface] Сортировка в истории командой строки (cobines) - closed.
    - 0000165: [Graphical user interface] Удаление строк из истории ввода по Shift-D (cobines) - closed.
    - 0000174: [Graphical user interface] Сравнить по содержимому файлы с одинаковыми именами (cobines) - closed.
    - 0000383: [Default] Два разделителя в контекстном меню у каталога (cobines) - closed.
    - 0000457: [Default] Неправильное отображение в всплывающем окне - closed.
    - 0000458: [Editor] Не работает выход из редактора по Ctrl+x (cobines) - closed.
    - 0000315: [File operations] After changing attributes (like hidden) files do not appear/disappear from view / После изменения атрибутов не делается refresh (cobines) - closed.
    - 0000299: [Editor] При редактировании файла с его сохранением по F2, его размер не обновляется в окне файлов, приходиться обновлять вручную. (cobines) - closed.
    - 0000449: [Default] crash при разных файловых операциях (cobines) - closed.
    - 0000295: [Plugins] FTP plugin crash - closed.
    - 0000303: [Plugins] Зависает при выходе из любого (rar, bz2) архива. - closed.
    - 0000301: [Viewer] Viewer CP852 support (Alexx2000) - closed.
    - 0000302: [Editor] Garbage in Editor when open zero size file / При создании нового файла по Shift+F4 в файле появляется мусор (Alexx2000) - closed.
    - 0000266: [Viewer] [patch] Reload file using keyboard shortcut (Alexx2000) - closed.
    - 0000421: [Default] Crash при изменении горячей кнопки (cobines) - closed.
    - 0000389: [Default] Crash при перезаписи файла (cobines) - closed.
    - 0000398: [File operations] Overwrite confirmation on file rename sometimes closes automatically / автоповтор при переименовании (cobines) - closed.
    - 0000354: [Editor] Redesign internal editor configuration dialog (Alexx2000) - closed.
    - 0000076: [Default] Error in rename/move directory / Переименование каталога (cobines) - closed.
    - 0000224: [Default] Crashed when going to parent directory (cobines) - closed.
    - 0000085: [Graphical user interface] Case-sensitive sorting does not work (cobines) - closed.
    - 0000024: [Graphical user interface] Quick search case sensitivity (cobines) - closed.
    - 0000146: [Default] Copy Queue hotkey(s) (cobines) - closed.
    - 0000084: [Default] Folder alt+drag&drop to .. / Перетягивание папок с alt (cobines) - closed.
    - 0000386: [Default] 4436 не компилится под linux (Alexx2000) - closed.
    - 0000379: [Viewer] Неправильное определение кодировки CP1251 (Alexx2000) - closed.
    - 0000385: [Default] в 4403 сломали сортировку файлов. (cobines) - closed.
    - 0000382: [Default] Поломали подсветку файлов (Alexx2000) - closed.
    - 0000378: [Plugins] Crash при доступе к FTP и Windows Network (cobines) - closed.
    - 0000380: [Default] Crash в редакторе при нажатии на иконку Конфигурация (cobines) - closed.
    - 0000360: [Default] сразу при загрузке не появляется иконка списка дисков на неактивной панели. и тройной Crash при открытии новой вкладки. (cobines) - closed.
    - 0000294: [Graphical user interface] System icons support under Mac OS X (Alexx2000) - closed.
    - 0000280: [Editor] End of line (EOL) conversion (Alexx2000) - closed.
    - 0000180: [Graphical user interface] Длинное имя файла в колонке - closed.
    - 0000297: [Editor] Кодировку файла по F4 не определяет правильно. (Alexx2000) - closed.
    - 0000247: [Default] [patch] small updates to wfxplugin (Alexx2000) - closed.
    - 0000275: [Graphical user interface] Настройки цвета файлов / папок (Alexx2000) - closed.
    - 0000272: [Graphical user interface] Only one instance of Options dialog (Alexx2000) - closed.
    - 0000263: [Graphical user interface] В форме 'Удалить файл' убрать свернуть и сделать форму в виде диалога (Alexx2000) - closed.
    [215 issues]

    Double Commander - 0.5.4 (Released 2012-04-01) View Issues ]
    ==============================================
    - 0000401: [Language translation] german lang-file against 0.5.4 02-April 2012 (cobines) - resolved.
    - 0000343: [Graphical user interface] Directory Hotlist window is not closed by Esc button. (cobines) - resolved.
    - 0000345: [Viewer] Copying text from the viewer adds a 00 character to the end of the copied text (cobines) - resolved.
    - 0000352: [Plugins] Fail in build (cobines) - resolved.
    - 0000254: [Graphical user interface] Убрать кнопку 'свернуть' с формы настроек и других форм (Alexx2000) - closed.
    - 0000391: [File operations] File Operation > Archiver > Cannot create a ZIP archive (via Alt + F5) (after check / uncheck rar) (Alexx2000) - closed.
    - 0000225: [Plugins] Critical errors with FTP plugin / Критические ошибки при работе с FTP плагином (Alexx2000) - closed.
    - 0000356: [Plugins] "Неправильный вход" в архивы по CTRL+PAGEDOWN (Alexx2000) - closed.
    - 0000348: [Editor] Incorrect hint text in Editor / Неправильный текст в всплавающих подсказках в редакторе (Alexx2000) - closed.
    - 0000260: [Graphical user interface] В форме 'О программе' убрать свернуть, сделать диалог (Alexx2000) - closed.
    - 0000262: [Graphical user interface] В форме 'Задать шаблон' убрать свернуть (Alexx2000) - closed.
    - 0000349: [Default] Don't work command 'cd <directory>' from command line / Не правильный переход по команде cd, выполненной в коммандной строке (Alexx2000) - closed.
    - 0000338: [Logic] Не работает %commander_drive% в панели инструментов (Alexx2000) - closed.
    - 0000060: [Default] "One Instance" option not working in Ubuntu (Alexx2000) - closed.
    - 0000300: [Graphical user interface] В редакторе и в просмотрщике одинаковые клавиши вызова меню. (Alexx2000) - closed.
    - 0000240: [Plugins] Не тестирует архивы, вылетает с ошибкой. (Alexx2000) - closed.
    - 0000264: [Graphical user interface] В форме 'Посчитать контрольные суммы' убрать свернуть, изменять размер, сделать диалог (Alexx2000) - closed.
    - 0000261: [Graphical user interface] В форме 'Разбиение файлов' убрать свернуть, развернуть, выбор каталога, кнопки (Alexx2000) - closed.
    - 0000312: [File operations] Remove junction in recycle bin / Удаление Junction (Alexx2000) - closed.
    - 0000359: [Plugins] Zip archive deletes file instead of overwriting (Alexx2000) - closed.
    - 0000308: [File operations] Don't open archives by Ctrl+PgDn if plugin has PK_CAPS_HIDE flag / Не во все архивы входит по Ctrl+PgDn (Alexx2000) - closed.
    - 0000333: [Graphical user interface] Problems with tab scrolling / Проблема со вкладками (Alexx2000) - closed.
    - 0000285: [Plugins] Zip/tar plugin - Colons in source filenames corrupt the zip structure (Alexx2000) - closed.
    - 0000350: [Default] Don't shows offline network drives / Сетевой диск не показывается (Alexx2000) - closed.
    - 0000353: [Default] Hang on exit if some archive was opened / Зависает при закрытии программы, если был вход в любой архив (Alexx2000) - closed.
    - 0000323: [File operations] Неправильно отображаются содержимое панели (Alexx2000) - closed.
    [26 issues]

    Double Commander - 0.5.3 (Released 2012-01-14) View Issues ]
    ==============================================
    - 0000033: [Logic] DC cancels shutdown in KDE (Alexx2000) - closed.
    - 0000238: [Plugins] Don't running from archive (incorrect encoding) / Не запускается из архива. Ошибка. Иероглифы. (Alexx2000) - closed.
    - 0000390: [Default] "Documents" folder contents not displaying - closed.
    - 0000289: [Graphical user interface] Double-click on file does not open file (Alexx2000) - closed.
    - 0000290: [Default] Неправильное отображение и работа элементов на панели (Alexx2000) - closed.
    - 0000082: [Default] Не работает редактор файла конфигурации (Alexx2000) - closed.
    - 0000293: [File operations] Auto copy into command (Alexx2000) - closed.
    [7 issues]

    Double Commander - 0.5.2 (Released 2011-12-17) View Issues ]
    ==============================================
    - 0000216: [Graphical user interface] Не корректное поведение при попытке удалении не удаляемых файлов (cobines) - resolved.
    - 0000214: [Logic] some file associations do not work (cobines) - resolved.
    - 0000065: [Default] Network drive icon right click (Alexx2000) - closed.
    - 0000223: [Graphical user interface] Do not show dialogs in taskbar (Alexx2000) - closed.
    - 0000045: [Logic] Cannot use Ctrl-Right when 'Feed to listbox' (Alexx2000) - closed.
    - 0000068: [Default] Annoying msg about "Control-C hit" (Alexx2000) - closed.
    - 0000258: [Graphical user interface] В форме 'Проверка контрольной суммы' неправильная иконка и убрать свернуть (Alexx2000) - closed.
    - 0000208: [File operations] Несовпадение сумм MD5 длинных файлов (Alexx2000) - closed.
    - 0000228: [Graphical user interface] crashes when trying to access "Properties" of a file on the LAN - closed.
    - 0000288: [Graphical user interface] Hotkey of additional editor don't work correct (Alexx2000) - closed.
    - 0000053: [Default] Окно конфигурации не позволяет работать.(win7) (Alexx2000) - closed.
    - 0000061: [File operations] Переход в каталог \\192.168.1.10\ не удался (Alexx2000) - closed.
    - 0000066: [Default] Unable to chdir to network share root (Alexx2000) - closed.
    - 0000160: [Logic] Support adresse start with \\ (Alexx2000) - closed.
    - 0000104: [Default] Browse local LAN (Alexx2000) - closed.
    - 0000213: [Graphical user interface] Multiline Folder Tabs (cobines) - closed.
    - 0000050: [Default] Ошибка Control-C hit (Alexx2000) - closed.
    - 0000251: [Viewer] Не печатает (windows) (Alexx2000) - closed.
    - 0000211: [Default] Падает при щелчке правой кнопкой по папке находящейся в сети (Alexx2000) - closed.
    [19 issues]

    Double Commander - 0.5.1 (Released 2011-10-08) View Issues ]
    ==============================================
    - 0000210: [File operations] невозможно сохранить полные пути выделенных файлов в текстовый файл из вкладки результатов поиска (Alexx2000) - closed.
    [1 issue]

    Tasks - Change Log

    Tasks - 0.5.4 (Released 2012-04-01) View Issues ]
    ===================================
    - 0000016: [- none -] FreeBSD port of Double Commander (bbt) - resolved.
    [1 issue]
    Get Double Commander at SourceForge.net. Fast, secure and Free Open Source software downloads


    Copyright © 2000 - 2011 MantisBT Group
    Powered by Mantis Bugtracker
    doublecmd-0.7.1/doc/README.txt0000644000175000001440000000373212667513743015003 0ustar alexxusers******************************************************************************** Double Commander ******************************************************************************** Double Commander is a cross platform open source file manager with two panels side by side. It is inspired by Total Commander and features some new ideas. ******************************************************************************** For details of compiling see the file INSTALL.txt. ******************************************************************************** ** 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 ** ******************************************************************************** ** ** ** For more details about license see the file COPYING.txt. ** ** ** ********************************************************************************doublecmd-0.7.1/doublecmd.app/0000755000175000001440000000000012675717724015254 5ustar alexxusersdoublecmd-0.7.1/doublecmd.app/Contents/0000755000175000001440000000000012675717724017051 5ustar alexxusersdoublecmd-0.7.1/doublecmd.app/Contents/MacOS/0000755000175000001440000000000012675717724020013 5ustar alexxusersdoublecmd-0.7.1/doublecmd.app/Contents/MacOS/doublecmd0000777000175000001440000000000012675717724024413 2../../../doublecmdustar alexxusersdoublecmd-0.7.1/doublecmd.app/Contents/Info.plist0000644000175000001440000000303312453761213021002 0ustar alexxusers CFBundleDevelopmentRegion English CFBundleExecutable doublecmd CFBundleIconFile doublecmd CFBundleLocalizations en de es bg cs hu nl ru ua CFBundleName Double Commander CFBundleIdentifier com.company.doublecmd CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature doub CFBundleShortVersionString 0.1 CFBundleVersion 1 CSResourcesFileMapped CFBundleDocumentTypes CFBundleTypeRole Viewer CFBundleTypeExtensions * CFBundleTypeOSTypes fold disk **** NSHighResolutionCapable doublecmd-0.7.1/doublecmd.app/Contents/Resources/0000755000175000001440000000000012675717724021023 5ustar alexxusersdoublecmd-0.7.1/doublecmd.app/Contents/Resources/doublecmd.icns0000644000175000001440000133602412452226616023634 0ustar alexxusersicnsTOC `ic10Ɲic09dic08it32~~ih32il32 Bis32t8mk@h8mk l8mks8mkic10ƝPNG  IHDR+IDATx %YU"Νr9gV<$(UPSQ8O}lnQQ'oo}<0,v5ŷ`{jמkvUliSMYT}=,6YVF}# |YH ͦZtyÂfBK:%9%k dXrQ6d"ke)K';;.ޥ5ul]`W&pE%WR® J,;@i:r0yb.NNb(9۷^w w>_oא}i9mfc9䒇l{+Z>:Zkz6Pz˺ݥ۞9w_izfg.&bfC5k< U;|ׂOoyz gNIrx~u/\8L.Yͭ/WW(Ltor`vPfm+;{[KľL/fB>sCS?7>%~OY u fm+PFS ϷOK>}ԗh> th `knk%?~7_N]CWI* 06 ^ٯ @z3Έ}x,73̀ ph_6a)MFz*[l fm+Pn۹I}{:~o! hH ͒.'Ӕ6G?-6fsA P6_\.wdN&u'4" ` S7ٟeϰ6M}^j3 Yop ԯH[nOC̈́.'TJn&+Q_[7@vNҿvNq@ Tk`@Ad~ .-xI33tt|߱i zZ mY %K}c<_Ny?6:rk f#*  p2 oP?>e?}c$hIB}ӹw:H/^f__8V֯_O7l5Wk T b#*  p2 oP?>e7_@C b.3)K~-g?H@d}Kz}kS=kƍh:~MD tP!^ r-P?=ہGΝy2Fso^;=Fu" nn3=+;;j~]1W 6t Zގ* 1@tzM@2o x 899(7%{)^yӅoT>H@$~_ʒDc VҦMhƍGy ~D tP!^ r-P5?y?uTtFn>?sS@A?񱩙I)yr0?_oʹ\lJB:\ @&[Auԏn {}ĉ)zr&# Чn^J(~i-iZZ,1@`KGU@e"7 ~|uˬP2Iֱc4?R̲v 'V1/syq(mݺ6nYԯ9\)f#40 Dn2T@Yy/Sͣhbf&ȭȵ@4Rn:?#^_vٺWK I(]ڰ~@ M1D tP!^ r-PGNy@@X~m}ߪ):W1)~ާ$HJb_,O߶umٲEE zqez W"HoC-Ԇ^)Dz*W%1EJCB`P.j,TܥB.^t|QL\pW&"ꋀV2HHmi|>w؅VS8V=!@m<ȓ__ :(ֱG; ԋE={,{H[~b+N l׭۷w7b$M(}Ű4a݄?4tEvxg$tů`Ϣj=>~^2ddN ҇%(eXB$, E@ܡ;TMs~,оZmg Bwn7\7%[.ٛ.җ9sF,_]ɤM_؂%yÁ`}&cvlAk׮u(h'i@v$1~0% tXT{A @5@7@]l7.3g ( ѹ3nF4f&g?Q+F~׶/nI)\DH۱|| *).wp,q|7Lo}utpmp}8t[@K4fobKV,}X~ ֭ۦ[k&)e?~5K\;88k&7>n>@ J:@ULÿ&:o cgΪ+QFMV)+A;o8m'L}κ7oLUTtF[-'wzqI4;+`Pqws0 P 4CA+C'NtX:,coyjwkl 3^;4?-ymgG022BwUVUI>+o/0Y_M@T\3 q5{`FH]7NICD֝fk?}꙱^uiΝjjb! h:vW,= ` 1@U-_QGم#vdza'B4Y3e# |1߮ nM4 -~?,a\_M@T\3 q5w>9c}d;<&:nO/["@Խ}PjnXVyՙޔc=AK&(ݶm p1bp *XnT;%`"\[n jݷLt0ں+}U@jO7ՓOOډ?YwXN}Wq;88k&7>nbY'K2ƺIe̺sKý[تn[؛:9#7v'Oyeδ&R;&;,toʾuJK{A @5@7@]cjLycmԗ{syZNIC. hp׍~Ew,\z%uV"ALN7PwXN}Wq;88k&7>nb;7g Ǧ4Gqk^z;Iiu/w^ZzbS<ɧ'tT|['B @5@7@]cjִ s#whf~WYFӔ]so o)hE;jsLtv><}~^z߿`ro@2< j'B @5@7@]cj7rR͵ɹ9̌7Go0"KZ+yN(3wUw>44D@vӨ$͗ b؟ P?v8ԏ:@XnT9+!@'HQggc9&0^}c.N`>M>N|z~>?66f1nN) j0c㻹f|k P-f@ʷhNOMGs ¡/#keًnB3-^u/FFCãzi:l ^u4@^2բdx]ԏ N,cP+8k&7>nbxPƌ:ڎ?z^:597urךk R~HӔFFF+dhC-/{Wdc @lԊ ` 1@/>ȵoutw`ff9Ds =FT6IJ,[?/bBs`׮ݴ~%icp *XnT}q\ڙQ:M}a{ Q,-+_*<ƍi}=|Ͽ'2ĉ~jws0 PZZ+ xy[p]2-SlO N|ҔM6(=h&)4_?Ww{;@X` V,q|7Lo}už@+>rtzjbی f|:lo Fh?=}jyQ.{#c @lԊ ` 1@ֵ3${fz>r^2aS;:5s`,]7\"J1عsgFuO pU P?v8ԏ:@XnT}\Z@N{ybfv2v-kGג!6X> ذaܵlRKCvܡĉ~jws0 PZJڶA&}GS-,˾gz{h^iVKuISEZ-+:JGY;+`Pqws0 PZԝ Pwz~>}@29gJZΗ쿤)?tmc&[!@]c;+`Pqws0 PZZE#/'|G-v|+X=Ӝ4,ס`ժUl6%iJ)?#vW,= ` 1@?ȵ.a՗0=ub 725;LsZ}݄5vHYmJ\\;88k&7>nb_ _`Cpjrh@X8 0ך{lwђkGvشy3m߾ikRq`11cp *XnT}i\®y/>8}ĉ* [kӌ$WO?N7|@kh.rq?Nik ,a 0\;88k&7>nb_: jgA}f6M $'¡К=f{($3%ɟ|]:3!,i 0\;88k&7>nb_Z W> `سIM -1-9WZ5=1p6~Xf ۿ^C{4|XT{A @5@7@]cj/=0Y@?o6PetܾM5Kq]7$-yC .LS;+`Pqws0 PZK G'g6Чp?25R\-)r[a.(.CCCtW-S~^n1W_#'>NTj=`Pqws0 Px@~ ؟ŰYj _ҽG{ ߢ~IߏBrŻggpjT-sKaJn"lMtɥۃHKE - c$ڷ}@t?lqb;-tZ\3 q5n.vVwXeg6Wa)P؏sBǞC'Nh{B{y e B}9?u§EؾhllUpґ/H{jy{A7@X` V,q|7Lo}uŮ0vb/X:0ÇۦӤ *vnj%蚫"ldd^~yxӡΣz)roHuw/i8tRwX8}T]S] *XnWݷAV㳢7]W-6%B?ow ~ɾy6}18Wqlb%±OxzG1֭h˶]j Q2T>o(3 o;cM,](/^`0,toʾuJK{A @5@7@]cY}`bo3ܱ}7 mCO=J3F?鹿 h @Uk~Iʹ. 蚴_"MshPKk@o[1"R {O[T}Wq;88k&7>nƮ^g~@ *E߬f( ̜KwLͿUjo[e7?IiZY"RctAvE}Iz3<:3| ."A5T}Wq;88k&7>nƮDFBP7L$ݧc˘Cr \yEGK&@FwN_f P I}v׾c# --uWN:4Vik@8h¨;/`帓 TMOoʾuJK{A @5@7@ucquLJ^3۪a}iVl _"~c+/Oo8ٴpJ B^x6@Su?vio4O~ڳ׎{wCnI;ǚ .{$D |闐j] *XnS}!s3M>KŃ! z r@_>^ϝO?;?\Bɹg\fl'aۆ5‰. J 4iQ:nͱ*}8a-0NFj!~ WnWh ȿd/ % ݡRkZv1BP|_?<:C[o/P 2C/Ev}s|y^[]k;}\8B{A @5@J9'vs 8|1 .`A]o~6=;d/b]@KNELLН>h͖=|M C_UF>vޛZigs'i]Yo;ix?z(_ ˺ 1gOT] cb<[hdfyeօ񡃉޾{ <<]l\og= ` {%o_gjί\SޭIzY~)BaµPfG}KF'r>.2o|g:#;5KChK8x]Pe >zOQ^-իiϾ >Is;Z CbwcȬ ݷWo;)"D{cǮ]4>wL\ŃܻfCst]Vϥ7>1vٻ8 OGqg?mkIu)(6;{>#^ds{ivWFV:b*#ʾ^j!6~[!sj(wwjk~K&JFDklfBb;:-ρn޷vZgFQ/03`Pqws0ǽwRܡ?\DO1f+A7K5|F7YџCFi ,N^kunz>zR^7x.n?\>اoSW=/#_ϽZ~ ʏnc9<޴]}>?aù.}۞`-fzp Hed7^M][aG~nLU}Wq;88k&7>Ϲ9ڻ.ؙw"mOt[f?t B{=bB>W4 ,y_ofdNM\Mm I{?^J` A4hdtߧp">&@\L7&הq:VLKܵP.w/n-(ڽ)Kɮ~ =<og= ` {V79FVW3䦭}i^s]%_R$80#P`j[ ~r? 5ُ %~p{''"[fZڱ{:e8 ݑ[vtx}'mOK"ED6Q|mu}iof0K:n<[XT{A @5@baoGBiEt˶6X 0SO.܏z3l%] 5 `"=0=qnB?h~s?EG!6h Toڧ//4-Mh-M ԓ,OR/g:>waF> ]p69間tyD?I̟ݬ W>k?UoʾuJK{A @5@bۖ#7lx\)+`߽}t9h,[r-K[Ur&y:ꨢA`B`fv_}:tdi P{ Lɿ/0kNXvϞH>6_|@3~{ymt;[wL`N4?/ч#ΐ[l3cg*ښ}K ;D 2h6k{Mm4 XP;v[b㻹f|^L d6^-ɼ>GzW/Py|9Zp]&nw١M;WQ{+2YS)OP_F4)( NK/{ΦUR|JdVak[5omV?Ħ'v>9+KBjsn{ɷed:fۈ~"3 C5L >cz?>p!me@>0@Iv@E%ǽ>WXT{A @5@V򝹬)`NH3x5Mv73Gf7v⍙m)LjI}{SbX/'@w=<Xl?1ϞIMCA8_ﯾKwz7O^a }BNf@2Xgн40/+L/7o|hf=*M7}Fݯ8u[ |sdtv'd%Sy\:<~;M3LL.co=~lwtqsMcZuˀ.ٿr DUUzc[31}oszf!Ϣ.8P;v[b㻹f|B3Cܺ#3&}eސˍ~n('G[5hL>53Ҕ9b|2m*~V*~`Y@[zCբwxMO\?,;߻mvf*?U@cb)wK3Vюݻ]1Q 'S=S.sngگQ·l#|mͷhHp 3ᰜ\JJҥя {*=\?+}O;HcP+8k&7>&yڸ-W!++7_{ W(~ܥ܂f$6YuՀK 4"ЗA`^k}<70So޾b3,{m3 o"1ϤmSo7dtqgp[ɘa'5z5m߹wٟ9!Z#'Xj긯wʸ+m9m,>yj4#躄'{d\ƀx{hOf7 _H1#"}[k߹)@:%zܥ= ` `&:,;=ٶJ/S7_#T3.OmgA[z4}5=rۆK|1!+ }~:~b,f~1%&~dRLi}έ%j` V,q|7Lo}ܱӷ%d\C d2شkhr| 1qXg*#]"Q}= ӥwK uLAЩgut4|鉉s^<xnD1l3Μ' Pn$-|F>)hls/aէ:)=*3|^|wNwi0c㻹f| mylug;P`H\C28KL'?B~ ~Yv{vf%`$ۊۇd3~VL d}:7_=.-#G3g;;㺼w`fHBf@IۍH-o_ѴC1L @ _l&$Zٮ._ ?Lۛ4oh5=NoYF  WZoS|.N _F : y_]s=E,N{~vjws0]51b{ߎztWׂ;MW3-vSLfJBizv6%Ibnc9P'Rgv|*0?uӰ2ZD]S] *Xn}0o\a^HTZVhSat36%q4e2C/'LG+5M?_bvg#:3mVf.{w$,d/'5j;*LW]wZI)}[h|z%/f iҢdht@HDbT-ơV0J4lJcmBPVO Fvɋ@# bs,.h{l>3oj5Vg~q|Wq;88k&7>n}Y&&Bh5^3Cy43#46`2<9Wˈ33`\~c~ t(  H}6Zys^j 76ۈ8uy5e>#v ב9w ' ~7lk8MSq ^6ICٙ&]$)qتU422MYLl ~D7I8"$Yf &Q6;KlnLt_{t -LOS'~cPiZKnu}5W[]0bOlUytuIfy.ѝւV{b3`Pqws0r_ۥ2][HOk{Vwg/5'cW~Px\lsm_ gH. v 8цWگQjkfoM["(h'-S'ىWzep\kkr'DeI - nYԹo/MS*^WَöTXֽ!cs`lc4yQzZt9a$k}>fM d^DspA?5Ya3&(2_:[,‹F"8uJK{A @5@7 z8MiiG?;JgPoG`zϠb,9W AWGo|$~ӕWѦ=hͶmJ2? h Ҽa/?{Æ ,M`nN3'iltቇi(G `~#ń^WyBBZ@yo .\ @}ܡ /XdH:"+(@:%zܥ= ` kJcZߦlEkXΧFۖ3n>Wgu lg7# =n(*M_w%mػIknU6544o @z,͜~.;¦|?|<ַ+ k L]K$t}=߾V>ҮLuku<@A5B7M;H3:¬ob3`Pqws0f!_44h> }i'N̅uw`RDxF[P3}sͼ0 &[mn&kmU7ڵH+h"1w%~=&O`Fm&lI>ut @F/$<(Ai}\'^ǜB?Cw} 6( B NCia5Ojkʾ ?),WW. Ќ+=8be_Eh!<6{AI_@73&>C^Fh'u[Z0PxknfϞO>?MM:С/ ϸ.5%yL񾭷XGIe辰:3O |{ع><@Cw.:Ԏ;4v8 kP{?}Bf1'(Q]N73x]H2`/'}/mt$߷fWǕ:ҴE[]t鳟K[Ck6m1Et I3.4lCt٧uƵ iFy]8O0_l)Pf_?_N6ɷ nP/lǘ92ڻ!;88k&J̲4J%fd\.#^/ee^sm#~3~b3}@fC `RiZYدݾ.}Ѷg<6O\BckRIe2l޴iPtoS_Mzc*(791聀zO>kg XF0?{@5(vn_(naTC.YtUԎ;4v8 kP{?E58s'W+Mg qD_7^|K{0q?rb83v;ϸ9ϣ=W_C<:돌TSyի^/xQ<5la&OsN+tkLb( +_BW_IoÄV"ijvMʬCBoL>f M+ T\3 Wp~2EHϗ*x_lHbT_M50K4zI9Wg/gŎ w-Z^b}O[.Ʒl/z-o:@Ԥa?(:uv_fԍKE}v%&m-2K  A3S@:`|o(W~,;88k&J۾hMɹ̰ɾqP r$_| ] ɽ%(kw}/i}j:KPP_uA+_dpētة |ˊQz')FOY?%E, 4, n~A"CF^V^ 5-93b3`Pqws0^KUttS쉿SM{{uŋg_.FV[o <[!I;s۾--q@׶BcaZG/=iQz}+l0oɷ~9aue0\@Kg@M(F3LP@G; W$Nv1b0c㻹f|/W| sSnݢ/~4%oy{<گ+>~0Ѷ՗l+^y/Pkh% {}Q@4}~NvKЩA"~F+|m0 ņ.Fip*U|P(W/% #Y !;88k&rמKmm1㈿\M$LL62WϷ16E{2v_iӞA׭#hk"1ZZXX ǎЉo|bzͭJ{I&ЍfG2ŞQ HcǃʺD?eY~8!؋)!t]t)k h^P;`Pqws0^.UT7ƒL~$/4os?gb/GuY!gr!Wq) W;w?rӆEV 脭G g@KE3әӉ/}+b `ht{A'¾qzD nO}@su HHES蒖/ wi0c㻹f|/u[®F+^ IY~9/$H.0'"\]3 G 3I?_g,I2#7/hqw ZZb૤Ox[~Zjʲp(=ͯw>N7V&hp*{9QW_]ҹ}At6r\Bf d$vFd13W]vܥ= `@_] etX~l dDIl3,u3U'^ غ{1 ۷|N8Wզ@15y4/#wp>9soK S(o_cۿe@Z3H_ ^ oxt-f9~;Cwp,q|7Liڿyeu@ğ?R~N2ɧ.g\B[Om-0p%R{#=kw즧i}?ݴ̈́V Ȫӧ׾41z|ߗNjt~"i?ɣx%%uL 5>d21#9O/ P!;88k&RV90yT:36'E".~[ 6P=گ˘mڑ]svzګ^C{^B߼B O]8?#w}N3a1A9/O{$:- 2%lwi0c㻹f|//׋WYƛ'z +..t8,S5)mv:H 7 ɏ0.=omCe#Lp$Hw2ηKIu `Pqws0^L ,fNqK-%\o8'E|g#zD[ (mywӎnj Uz WԸ ]Of4 z#"\rO* qe:vͮ]'3"Sn@>-_>[W)fM5 *Xnߋ>1ۘUY.7.{qqɉ<߅ b{xjzO,]vK>h)[XSG>^v;^I/  XbvNYoY($<1`|{ X}YW+ft7 *Xnɪ|}L1r>fȣ׮ğz<+=3~er6ȅL=}>׼.iZ]MO'9GMs&YIo!FT&j>vWs AAh43ycy͞9I4}'{IMu  7JHC[߫R8 ?-ׁ6{A @5{BgJb%̖',}VMK4}(h[y+}Ͽ[M &<%dO ;]@Le<`b6@Qk0b "#2/)6XLwp,q|7LAWq]+]$Oyԟ?}Q}LL˘E#|;3[;iϠgoХW>CXuzN|3YY0O$^r]{=L}(IB}`2IfXwp,q|7LAb|N͗%gLL~=eI}-4Pf0]]= ҟ޽H?Ov} E#G |&Zg~"@Fg(  _Lv~Ipb=C|6m. `4)'>~ߙG>lqTN{4t?ߖ.8ziYG~V_&B"-)Б/~=|erHMM Ȕe}6^^^c"4^`c k hNĸmr_^=`Pqws0n$k y>qv@rO?@ Oƕ3/|eyv6/h3:>N˿A^b h zпyMy_n[0 ]O BQzqM֟1`Z@!hlqx^DZ k&w;e}-Q]/KI6ї?w>_ӷAHqtKߤ,J[-7  hI+8|_A8zo$%Ur;O}%"m@-\5;s^K}Q!~+yWF!dK53X1{.}{i˾v h©OǏ;At{FÂ-ed_W rAn )6.I}[DZ k&wY>QyٖIUb~mO3#W2f')߲ %"ZvpؑO}P5WWr ր?=1@/i6qS.pMj5<DZ k&wa}L/[G6ʏÀ"9WĿ,CrA~^j[%&Z>?A|]g>(6o/5-WH3$ŽzmFE C"Fʷ ؒt]9CP6ws0~3g9]jI-BRĽ{YFL| qFYeb_F5v+~'_sj|AKT5u [CM2&`:҂Έ~ߎ6=c1ӏXZP~@i4;I'aN@}ߡ e ໹f|W}?\֏:ero_ؗ#)f/a{ٰ%.Z1<}{S_ 0m@L<&d r7bfczlfY P-`P :@XnUOwS08ŧ Q҇i= 4/>y,{ Jk7o hVΟrBg=-)ʴϽf Q$E( uߊu]ç"\`@.k\ѕ $3&D&V[9sOjoz}^-#xv_hPWh>DQɺAaL<{_"1 #% x'I!'`0ڒZ@~4hՇ ^Ԓ{黳3la;7L}{I}m_0Zum>⟮)r2r}~= >` @n8/?$l J, .<Itڲj0YpMwzL'ҿ<<]_{? t>O5k@>ٰq'B___/`͛,^4"/ W^h^OJ "'6hmJ^lȾ|q,Lg-[X GߖW@"$f!<_/W ܦ3p}EY5fL/`QZ ObG,!IA#Z +h#jh)nº;w D/tڲj0Yp-J",0 jLpyzԶ_׋Kwxe7uO` ,0nF_}ضfSCurNE !% 鉝=V@d$qc @I,Mg-[X GߘSmm|zdAMz]^L%ii_'?Hg ةs3۟g $xmVjHf{ b+@1X )B7=Um7qQ/܁z-K@5}wn,XWAc{5*_{;FDJB%z?t?5 ;vG 0c,`0*Ds6x*?қ@\{"]0!lE͂~y7Dշagp ݲ-,Tw -ɼ؀ C{蓽! !Jy>N5!#5> ^SĈ` ,0`|Ylz-XKx:,H$RROZ ̻UKk(:nڶ,T3Pm_@8h9*!W}wȿyw3/Թ\^S\Hgt o:B4sV `0J Fw⹟^ KnQث_$u` "g#%@BF.T4@G]u ڶ,T3Pm#_kGFMCk gZ$9^C\pw> `al\bGh82 H0".0EauU40C@.^: ݲ-,Tw9lO@^ ׽gi.Y@{x9w,2  ndKKȻZ&ȿY_D}KQ .]^9mD x !`yUP/h q-8n!Xy7.ڷj@''Iq9Un>7M3Ǚ|_ePCM!aԤ)pW.ɻV3A ,0a֭u+#Dyɔ8ROPE9"@2@x9OwB" m]v( P-1׊D!fn?x΄#G ' X_oI۷y {Lͺ& BHd@` ܹ" m]v( ?7_ʌ@P@Yh}0?d8?EqA군NIv|0n]\`1ܶ {J01~@ ]S !`,mFtsXhv( VZF'Ht.>Y|yB;.Mp싖ȿv9nOA.,",_xX``4{uߎoZ近oH?ۂIvܭ//d("8]w:ڷj@k 3 3mHIw>9XOCZǚ?wؙ^'  ,0!K^zhn|u tȹ^}]$ExE:- hFa}Yf,۾@xZS/W;nB@. O]Mۜr`,`00 Es-xwU/dbPBk X bhrkx/ @5e y^}O_\cɿ /,FCԖ"u?;y_FWB2ZW+Vha OCkO=ZTLm>;"@L/P,T3Pm9@$'PD8~Wo !{?r`%Pd ,06/wǯJH \% ?\@UH@"" @5e ~/Dz>YM9_VCpx<nY1ڣ@Q,`0*+V_=Wl}yk$M 62@f@5m>O`}Yf,۾5 A XF|B4&fȼ:^/j"D&Ǐ: rѷaN]81$.7J`Qm]qXȽd?U@X>@')f *XDۼ>@۶P@Yh}y H ({{"eٷ]_Ff(8ÈQ]41dP?AV P7<& IJ0P5``F L :f G{Xݥma;7̞|{?Zpٴ~Z;"}r&y.gs.`0/$n6#,`0z뮈U m}@ YpP@@(*wBkwi[X '[!ىbEȿn_mw>C}~Sϼ ƐyiX`` VgEF ~~5"j}e;z? Yݥma;7Ac99v# ٗ Dx?`o"bo0} V%n&݊+ ,0~ًpgWSfH?ZoLRFD]Rje$H@mC T{,tҶPMߝ "o#?"?Bo?)"I*K `-)c ] f*w FO @,`0=~JlYbyw1 (@ B Lm@=C}wEkwi[X sByC}gz% ڤB)*] GD9N 3qb `0UstB / ,0. !.?+"8@$~;DAz,tҶPMߝ<8 ,&!=:|W?ѣ;@7X``ta ^{Xv1T\όP"Z. @g/uwdvj0.EȿjLC4OR2~ǵ\_.9mp>r`T&y2 `D7g{xg,?\"Ȏ7 b 5 € /@w.m ݹavU;4,D5w<eﳹiY`` ,o})W_C )&A= ݳ-,Tw5 0L]CRD_ Igmv}.2(:|A˦DX`` .^}l!mױy) K!hd?9am1;@w.m ݹavE(B]l/ػ!"#Q 2]Qp߅))w FPv&X`0k%YcR#@OH )$}`!@8f0D,"]K@5}wn.hy-%'ɿF{\_Nq%qr` S 'W7 u&KgM/-LAH<"$"* W,zD'}K@5}wnt7G=Ga} D&+`Ԙ.,1Qg-gQcl۲C"jX]D,(ϭgp]s _?DIEBGhEȿfhI{r1Qg?ضwۛߪzO9唇 bmpߥ O=[!lI#p!A#"@f #d5`@.m ݹavLkz / Ph~cQ L;dG(ɽACd$=/#]Pl_WB2=:^^m˗/gkn֏bٟt@ D="$S jz | {Nڇ:#P@PMߝf˲ȿ%"Blss]K*۳`?Uԅ(*,P Gݤ_қ˪௉Og@%|"ٯƈmK\?͠n@о-؂^MAVH_Fn/kɿ|}=:i;;)%,`0jF=~SH)$zz@=[͙d|O}Zvg ~/`Yhߖ""h[v_\/g 1wl.DζUw*r F on}RЫC"@/G@QE;) ]sìDp QG h_2ݖM қO+d?E|G`wr(:ޫv!xY`` 3<O_K T'.@bh@_4V ke}K@5}wnm >zzSmȿj)Iz "BO>Z1z%bi3ͯȳXt׭≫/D@%hDT1,*&mˀ la;7̶m `/u$_'*G D[b15H@h],b{Veˎ:X`0K_ѭ8(.$̻DE@'mˀ la;7̖\GQn(Bf'*@F DGk/wC*bgBX|9 ,0GeTu/wY*j0 "rڻ"_nȿB17~t\>)."cPЫ$n(^;`7ͮyX`0boC{J0" EM5Q@ɮy ڷ-,TwY@h|-!:m~5wr{\#us8m" c#??7)4#:F"]nC"A l Wz.`k]Vmp7F;LUCo?Ӈ=l0H\/.v5kk+X`` D7r쎛",z)c\"@ڽ%z=j>,T` ݹa"<}/f>g$u>BAV&2(Ŀ#>I~ Lb{]We`ydڶlٲ#> ,`0_X6O: 6} N!"@+dkH[KϾ;. @5}wn^['?cOV BXSvfo<g0F{3umo*M_kO+GWE,rLtإP !- @5}wn V;>V/@|#P/@ao+wц9ıl{aoU(`ܾb*?GE2 GHH  jQ>k]Y:` ݹaZȿva"_ t6X(H#"\_7rp]GIP쯋l{&-_nɓ'` +ۛ:'DI(`f ` MHtBn O0a [X SExMCtt.>=_nG5ᤫ;(wzÉl{]PZ)jժ#N;ǠGx 7p( >V=$M\6*2q\YQ@b" @5}wnWFX16OI9NySO[$UsCGo;0}ה8&Bl'{R@F`0;o_}1ēHe ,^@ X< la;7,D߽_XH1.{'$_"D>ݧ>s9܅ l{oboG0JЫ2 Q1翉}Eyf <ߘWPqDu|eݥma;7̶/I)+AE~)k}ZRH bPmmw@0E( ]@~`0B˕#͙)) QY\"@V#@[PMߝ&t"? CeU>km UN#tޭzH %b';yQȶ+V3Πj@Omr0yjʹb3bn dEBī/>Sb'yuwڲj0%Qmwdy^/_1t? I]_ B 40i-^}e^kQɶݬjGвr>",0 Fmf_>,^axP,(93(,'N la;4L{o yH$WCܿ0ӦI=w2D.v:ފ%P@0=8C&Mg zlZn;"ܼd~_Q@'f*~cWwejGƯ'HmZ{Z!?ɿ)Q?"1pU?qv,<:.NPg@iW>SO}I`0]ƺԵ􀎙#(t_=L ݙYhm}WAӴ$"bBЀu 8{2WgPT;lж ~JyBj~`t{3B#ю@W k(Y0n zxG|f[X?KGPZUOWy~/* =Q_ :ԅNwoCA=cl1 `t_FؾYPmCۣ,@㢀#!g@Qɇ.G`ܻ3 m ie9"! ׎蟝L,05SCE'`̕(zL %;YQ -w\0) [g`0GJ,/B.TۡuoQxHo`Nj`,:jG |Z@z)h_sy;eR%u2Q7;AmM[( _жU!ছn:d„ w`0Gl]_>GIzj@Gy3XsJ}" @5}W4LPkDK-|=߮o"&+AU*]ՓH l;?m/c`[y{(O cepW6Z\ I)q?鏢"uUͮAV,8`>°8tUeH~=?MC8ǎ7=~|+D|CH"l?ζw \P馛e`0K^;?aU0/ ^w@"@R/7S @+=rpQ(``Xp0}j?9&fJHy8 tZ";-}>u^dmg뀺 ;;I3"G|#:lٲl6l۶-9oL}3*03hEM)`<0e5vt}'B2xUZ؃.V! G|#F>rĠ83F}#;0 Ƃ[oV@=-+ ); / @ XXhm}1L߱Bv°OkyV \F8䣟=?SP;^<7۾e lۼ m[_}lxnX[_ͭ[QdysK9Y߼G֡ʞsn9P>G,g IS#Gq>lW@}#>9RD8#ρÁesG\rswy64Sc_%LFcc<@8)u6}Cd؛z3R Ω@^C00dN_vcvQw;LS˜`̴IS` 0b1Ct{{woCJ }_=dз9D9  .G,T6 ]~w/CD?fws\A6}8i۶D~ӺK/%a+a0r;K07HO .{" /A[FO7m9Ҁ,)m`swU0Ǘ'byLD F' ͘Ə@h{+(7vs+vCqz?aeO3kT 95i2#Yn ܾKaG2W 4@F =5/B" mlq|}%_'aJEGy2M@:YEq'~7bD1ԙlپuFxu_^YlXֽ<,l^'/ 9ASdAF=[5f`a49Qb}K ?˾@|:;HȂ?ȽF͘O0t9#N/bJ 桑80a߃`]c#Mk$0bupguoEWHp3`9 XhayM[\$]'Ue /_EdQjIW4iu&kum۷5k`KKa͂a'`CZ;%ѧbm m6- c( K= @(  @Xߴe@}P 5BEx~C"xL* @~R LP90?6}~$xO(gwP|~0>u+T|cwv<ρaq]q<ų?Y0֯_"kJ0CTtW& 8jG%}3?ݖtc#p ;UJn{tkšw k<Ǔ˄?|ڴqdF F̶)gGW0K֯Kz>G^Ո׀uOgZ77IY@>ܛI>cg7aBv(FP. /P?iPuDY]D`~]LڑSCw|_1 #d A` R8 z' F`waK[<]*OA-ث/3,e?x♋]_&ll}0j|93҃m\}OGb-Rx6 t9WcjjY8`΂b&$Kߴe_hoN0h~]H `F77)Y?c.;e~0hgU{r}9}[cmMͱZ;a(}I~ Lk`I`|S#Xv k,S }ڜ@|H9;@9̳{4렇З}I^9eտlO?y晐Fӎ<|D0a<1xUpgĪ*a2?@xV̩}#xDhg'Z#[aH+!Gm-W*Z!+yAy߽O۩ac^=̿g`w94^h7RЊMБ? D+Zcjk-.S$[ ZCGO6my"=YvE9OPL#)G!%Яe < TlWoW27<=bFȳ^ ӎ<&s`0fd`0e= Iz@` L-d; yv.@GeFע@yvlmyfQb`()̼  ܅0חX]G/6붇`#[{$g~Luz &B-"QuP @f{VT ŋ}*QBL7m-#cO ~N |KSPT*y"L0QRLL r*'UqQJ΀,g`M0<^Bw 0a7L1p!h^X򻛴i@z3@T|y DjGeFg 9zTU|*z:RKb tүfPsp,s:^'ll{.g&~9Xx۟j]=s빘K-Dmv|Q* {[|D}K|[g ID N P$@\.`m<;$х( 8}L0AN%#}u7-@! i1szYQ`N;sdADnGĦf[@)KG`R4@TD)Y7 Bb,8.3~&y{?^z e3gÉ]5jԽ~BB]'ak.꿠iS"@,:@?AGТd]h}$շvLPQHfy%q݂` ~s v߈+6F0uo Mbz%v Tjj@E(sjPl{2%=e `GeFԩ& W/iE0vh]AYkae.R^6luQjE`џoI zZd  L(فެZ{PFQN"@ w-rW$Pg=. x_8yG(`Zyρg$fPå8>5 M)w#r2#tOGOt?! ն`;*7eZ`0r?|BOz#M $QT+1/F`wQe{>҇i@H?rqe.q}AA]lo΁c-]MexsE#>u} ,K9bȒ>| o+*Ll;-FɦsM!gˮmm <t7gA,`f%IUUWп$>5 v=5Sp2j`7шS6eFEsƌ̛Ԁ*U0Pj`G H ]LAk K m2#Ž3p$Id/Hq FS=yv}W/x/auLeZLCrv#28N4 `"f3Լ$zAʼn}nG#>vWڵp"j#cxZ}ݦ]UzUu=o RWkO%+3f"k}~g=@8]Ru< Ċ*ĶlYGѼ(QSwo}7L?`1e>Hpߗ>)p`Tٺ"Y?V& `*07񈢶@G%Fck5(8_!TbGۏ߁F]PNw;v=lZ<^hbjnүsdrN{}fh v:+gt1t8P)f;Wߔ/#_*vWE]ۜ[>f, d˄{;u9꾨`rU/(=]^}Tl]'3PaS./)] r3툷0kW `0Jџ\#F-Eex&xRI- $c6F`w: s9hI? Ȕu 3|)x旿Eɢ&Ȉ60"R r::v@iftIE:8/xjamwQ:\/9iDW`g+@1)+4 >3ߑs|kNJRX1_d"=rpDDp+6Q;̈́9z0u∦3-ENq=)h)$jW$o)$XE @_E+@GG"ъ_vLԥ6Cws3o\ }#7ls֭䞻kmǩh.@ A"~LeQ?;2 4% HHvrЈg(_0.Љv}'ŠfTp{(>0k(j D!qƘq;Ooxs0bT^VxeU25 d^0^zM] T-_#*{ }0xF{7_Bt;?'!LsUc{n CWA!^~Nn'Ԍ\Qq"=ۗ__U C=GX# XTxޅV_1ʐVɿwU "?^Is@ZgGN3Yy_Z^)Iي)i3j L& Ķ[&m|EOYL04 gd48L0mvKPECO ~=g׽* ӓ7 q`0`1NcPsplr`c뒀!ryt4j,d>(Ϩf > GۦVљ+)Gt/\#q km @5Jh_*U.=&(=vIs5ڗvPF |]q^"4:w6=[i1,4Z)Yh0GE77`žKcbœ_>GKSOI=rA_A@*@ B{PL$,`~ʉBV)3hb@X>eCK}UN}>+/)"t[X=flmX`ж)EMښn%ݷLJ}߂kV$D{w3o$:!#" p $֦,r̵ :h|;Q;(;3>1@f[ox˔@~F?=><} cXo}Mv%g RV ~((h@ܲbtn?PS1@y\b̍m \G>V$PT)0h}G3AeacH`WO}od D *>))О$>@+>X X֏OQ7e(_FUS#t*y 0w~L@ؾuFY7`a 0뎉IMϽ.&)m` ])IxHz=@.x56nQpm,+#h"@ET5{= +כ5}FP] *Ma%A+ uNӯ\0P^+=}6ƌN?v>Pf0!QeݛLj$fA@ RqA #@R, YE 2l˛ WA=ݎ~s[$n(^;j{$T[/W_MW^f n/ [ <' y*QH U (ւz-g]ȿfSh7% Ncy`(&;YqIzDo]k/F퉶iQǘ/Gr["fE`/%uLL7fxvk/1GV/0(r{ f*@tZduݐuh"+z5+6ica+r@ٚjIt;#XXd\QK cm!@VRQS_>ظv r1PK⯢ vMrHc ,P -h)d!</4 0cpŏ`ܔPWԅΡnVƒ\/})AϐJ'#Pk׈ɇ<65%$F6^;N_ -}[%e0ѾP2T(ߔKk/M[Ck@Ex@Di~LqP+]i lO -%0mަBn8 v?mA_/ ?V<$i `@DP0:6"c1`]%(tm|X ,#|e}l/ ei3 0B)0oJ]@]h]o߼0g>p?I8u ?a "B -ڏ2Ik9ȿϙ7{Uz V~<\z! O0 5kօ &^JZ3nO ( 'F#P=G{ zW ^zԪ^_gv͗/ifԁ=FDfl{CE1Dn;bFむA5"d(s:^`ThWY"iLPlxF`3M ZˮpE߉:ԅN]a٣ý^[֭q=Ojf% ^甃k$8Zθsyx+pQNƲN@̔*;k?NJ\8`R(|}#{fxÛ-B@0+"F4@xst )FrBACU/ѴJ"CTkZ@TZ%- ..(S0׫ĵE?KP9 dU]u1W0#"@z^:"D&DSf ^;n}кɶez5W攱dd4(QR}~ kmq{<ݶ:D$T$Q[,4 XÍ[wjpJ fcP#$B査չcٵ/e@/v۹J<06I/\Pk`~U[(n,ο'bM[!8?q@(2 G{sD88R,T .zȿO|dxq Ԣ;8R׻Cn?߹ 6&Z'/I7:@G~|L u;w>WDA 6c@kg+"jEK)tRV:(=g Ta^(³BlQB@"BYN-PW+ ՘v8>7``,6o[>H@}y F(oA@^ / ,[)z^z^GF/_ ғ^ZL/G,ukTZ;jۗGDE"^?!E\}T2ާ ou_@o! W/D+D{r@Gt0k]">B"#S@(B8mN`@ 0V}2Oy'`4pOcb0|ŗ>wq+B.TWA@ N IBM,To 6$G8T_KDG?G Kaޯ)xzR7;!ܾw5Wᡪ`".CD4I;=~^@A'О=;I?>E u ~!*::@P2е?S[kuíNpEBms#Jqb򄏡fB^& iᘡ`h.>p%;ir/1K/[#^wQ}dU0Ғ U@/^yQ,8M|&CE! 6a:Ӱɶw./_N% iMQ~VF>\ğS3\WEI'\>B_&-,(zAhiaJr0\B}SeD1X\b㏈~nc݌0j$_p|C<3@_zYi4@1:lj͛?!۬T/eTNQAŢS;+߮//4{:60䟖U~"?yWFpYl{!<ƒ߻"7?m9 ʪ:'_v H4--!"78ޮfئ0=Fn9yWcJ,ٮ?J LwG?yP;JE ό \RUZF)!mԋߎ`1PFϣ/\ھkIBOA@DqRHsX,DS F _(p=;>sO85뽯0߼nsŰuޯe (_-?M=á]l-Tt@`y:S[_jFD:(l)a&Lk6!@=V}\>%v^_CI_hRiK>=!hy~0yTƠ/[=l6s?(\fӏOP5^вG/x=]A A,tz 8%X]I}ߟ _=[? mi;}q;)_zүBsF׿y AU@=0W)cnO8@ OWOk8S`J wնCF@XVP%jۂ)ZB~Ys/}z_DhXٞI@ xng%>O$Dmg[o1~:l }SVAxZ@s@- il~|~k'Jm!GЎ7?hKy3%FUM@<{Q`,u}]'-[kuɿ F==v? >Bf;?[~E )~pY}- J*Nv L@tBP Nt-W}S0=:ɋpdSq4{N࠳.O{A_zȦ{qX}z(pOGM kNKaR E  ? *`QH=kil G-OՋr k-rl\LϱyzUע8<О%m@ԷZkj3 v:ǭ@ݪWG@`Q}f~!{L# o3S2rmwv Xя*hS!{P{qs Q/ܸf53/'LiKD(N(>*= gJIFZ/q`Z?MPk|0~9m=tz لKx3H5 /PԘEU_9Vh!8E^C&=]]7Va,Oҩy/Ύ?+\XA zaף0mr KÝ{)! 4 m'@yv&rOg#GB9Uۋ9?~uz<5-`&Z@[WM@CuWnj7)I9Ŭ9_r<󶿃:w_~`?5o=1$?4!sChdXgE_-326݄-Zh-jT\+``"ζMw>L8e+;U4ܝ ӷ^LoZ/bV4 /GN`)徔!:l*ܶe3SE8).ӯ(Q˜R[EPE%'}l_cR ?,&}F W^#ƌ-u]u 5{_;?6JOT0]uy3!OPk3և g(t#kg\W_վ˂`-z"DN>B+ tl E" ԲF60H~N4QPyPM Ƌ^c4`}!~!^{Yww&m ' _(s@X`jZCWI+ *}P^N},RRlᅱ. A$zqi7PP6cooE F [hW0.XTȜD0Sv_~qAr?6ƹ3U= .  E(;μ7mւ<Q5 pD@V}d}pytmD]Jz/M^5 . ^5_)UkhN1I헢?. Pn0  p͌zkS`@ ( |5 ƞT|1:^)~qq@)<4V])ߺtcS]hG?O Q ~S;L]Yo}ݢ>ˠ@ 㟁?yaF/=tBل {%?99[K P?OnY'!oXW;(?p#Ю⏓HQ&Swך@ ]Qb[O &cQ<ƕ ҳ^n>Kl%(s([@$cT s?o::a sbQ/}3F~ (ZpF%91{w^||]bA-0hyWP\Dz8?p` ߃bn:~+Q<`}ta,6ըS?~\x>y6 _ǒwGW&8S Pn5v;fv4fxt*!sof]}Qxp@@ ;]0E!}eUX,ۼyb&y[61춄<=o-^ sf ˞^|V`57v(_$(dXK;0Hk"J$r@ޮ}l҇1až E 1hq_%bay?*<4n"_ &´/OX 2Hz{z5ͧV zs_.ǹ%qa/.F`}SX#0.|8R@ 5cn']MlK/Jz/5\wX}L_!$Pύ L[ʽ8xEMG?mU8`^kWBWIPtz푇`Y3!^2ܪ@ y`|ud5ϩK8?.5_-ŘNf#Жޮ}y@mw`wڅ'UX4ǤpP  " `Ҿ-C2FNGm4uنh&{7V6 Zv #@I@bES@ y?M&Wa&\ :/c2ez>s/$lC\4cٵ3mEH<y+7-'^m7  .̣nx8V[AqKh{cyAӄcA Dj>u(l ަ >tp%gjpHx(Y|- 4 ;]0M6pܙ= 6vEhɐp{wɰ{y|)p^Ikُᱟ(K\$c B={x?XOqRxЊ)UyߌU E9䀏O})j4o{5yދN7FQ C[@%"Ua+p?J?=Z?Rݏ= 6}O4&+Г5pwgnah}?~YcP*tVmM…'w?Ikz(fNqNL Bޟ- )aoHu1?n`ـ~P*ҽ:19-xsC' 0Gp|D(?]/Q OCMm)҈.W:cH<~`󯀨胹eu丹Upj\Ys1d7{m?uP:φ<]@T۵o=\fjz>~ d^Sb L2zqC a)`A ?uݤ_FjP*ҽʣb`! wFdQs:_`gsk2>k< pn^cM a~ ]~ӳryy=SjYVr>7'49r%Gt)3OB-]&C!@KomrcpHh- jno{ :j+%CsgëYλ7m\U=4,އK D7Ծ5-,\~G@7`B :uۻbhlgLVFB_3RT2b r`:Sv]:55zߗkB-x:BCQ' 8k -"i}՛og2?M ~`*cb6yK/~rEڷaD+v2]&C!@ pQ_Č`0K} wF  I[f V5z;~Yc cX݇{ lٓKQykj@x9  mѿn=\iǀ_OfX) Ϸ?Svxxy<ׯvϙ-c9BҳmW.[ s8>NU||Lm׿? a?_׿8Ce_oe-\, nAt>ۤ;sl*gIװB?Hc@W/q,Ư| 3@o ӎ?75FYw.gHQ|ACIQ k`2ʢsu] VeτWo m`[y>LX{(z֥k矓4o*P,4m?? ͔d6m  }֣MwԖi8LKh# { b%]k@^eZxցR{ul$CG}1] uy?Qj0^YfG\`U|Ux>wZbaY!/Խ?gI酅ſ..hne_K K~]?bGt_@]tgֶ8,v2c]jH)b4@P-Cu&v̎,G?͚GyrEk@b`.Q2HAhUP}k O 8z9g]ܗϧ7 W/ n=S/P-q1`Y)MH6i7PLݔ.ukz( p/e} FOF`(̰AxxxvCMIE|#q;E Z/<բ2@#IeZV @_WZТHN)g{Q$%=IVs;#[_V)bJjM9Ŀ$0yo\g}0 ׉@=BB :u;6m}3LE>?^C1D 43&QQ Eס'>0Ҥ_KQ!@y7^UB ۦw1֙fwtڿ%>y0iʎ^cI en EtoZ.<^._xMS9u_coگg%.1<ȇ81z\R]o׾ P4{ +eK4^TMk  A utע{ߌ!пӾΖ|+)\OP@HJE$w0U[nz0EFڔ.>zӃq6z!+Ҫ*z<<~Ma) en EϐW.zm5,yd-}ۋ1:-JV;L@}{& }֣@ /Oa2}-zp2TfoSd'_π$#kPS l/q@[ /-P Јx XwmrOs?1 1 PRTjQ'{5>~c{l½W]rb|=-[}Et_Fs01M?4"_Eo@ץo~x߶łI2qF {)v`Fⶁr~Lf.(~wZ{~uW3MuYSIǢ_uJM4LeQ~FIT_Gt_'@E➿E86]@2A#!|0V/?ccjDE4H[Q,ۦ'_{^̝;($h^M\S>rx>EOџ?Қ+ K5.yfs0_G_frtc(|r}݀ }֣e}3Yއ(ETP=IR(2};yH3EB}?UXdrQLQT@m~ϓ]Aq R۟Ww,p]n@q^ 5*qce5;oElW2>HȺI_ˋBChdErC! Kzn k/c\y?>I/nJ(s i_ya{I{Ř_,M )ſM?`9Ƕ M]!ЩGo_ݽƤ'k Mf:_V YKϯA9DUGJ1`:7uE4~?$ YPt%cȤE?(8 ЖKe sóB@41%V|snQ :|Ѯxg?̲ Ww߾c>姜L+E 3%3 P܋oMMj!,G L1~FO<[Ѩq0|+˷?7/q@ٖjD0&BH*[:#IDAT:?Mv?"b}t"HhaÎڐPҽ擎^<eſHJHZ\f0E:M]!ЩGo_ݽvT:zӦ =UzPi'L@=m1Xk`鳢үo m=<=k(Q< @%`byhi<*OroR?0_X-mIqJm v ]h]?x ]ݷm0Ng=z^+x *E<: +L.@^ֱ <v‘}J(VȺ/^~mOS@;D-S/S ]KR XX*I!Po]U%|à6?^r{tx-T YM sќP!?[sA/dв?r?$R?&PEw.@B@?[aҦԬp | 2A*Dj=ը- l<hcpy'0U:(J}Lx[@3@V%rRU:``;[=gsTa/,u)hſ-GAiT.կ[G)N%QgPz`uRT  PF h?'Ec6~ihUf~-YC l[o ؊O6Y*+JRߪ͘0Y_H B?mU?ƛ{νFc0e7W]Y3XŚſ-+R6nB#PEw.@B@Ugwܨ~٘mJ jŬWw`8h 7vehß8n hJD&UߕEFLi:?kMЄ3V|`=bz$#anGS 9hz2)4ſ!r|Mo]K1{7MfN%Q+t)g$T Oű|iqA{̼$=n<ZguW[2[tyK@`(Cay 4h'z8KyC?QGwɵ=頌eu_u4lՍ /荋AYeU?@aj)TѝK P (|0A\_hj]!4U V`J* Wq݄.BYYB1CѳW?}o؂P 0e_R r) ƮnpXwmg @̏cfl+ELA ϙy4?.U{A_@/ yn ]^7Ŵ~PO%_Yg^g5P??AK҄2;K@F!@ 4 3 JuΘbԞe+:jb?7`;lO6. *oXn= b-U%% ʋ}[1@@-7Z`J_@'/3>~]c'x-{*_a'Զ~ɤ4Ma?o Ut'`(_VXv+\Fı=?; Pƫƣvbkv>zV4i#T] Yt懲٫w=]@p`n`X @M?_ ןnIpmpϥ <҈A44E H"7}NoB,]P@Ĥڂ C&R+drd +{EѨ!vƕǵbh hp'!BQ@y1/buqeF4'\ xʹmcm{)ŠR>G,N2@yeډg¤@i'{ݗ>,9Ն ))o[+ {D]jC ݷm0Ng=ziҢ^i~r:g<Rn? ^-(`^,pnN05fahHѝ j"y(5 % Rt1GF??|Tʼx[@c:{Xt,,e9_WR4*F%@@J%)%a ӝH$5vOum7 bo&?7r/j*o q#!C+=M?eO}`DY1\+DUQ@U2vsuJL {Ȁ)V?CuP~s?e<4[ ΁WROpbҜ((^ @iχjTA\=Hj3V-<۷ѷ۵o=U=@{]sTqD+ ժa{@ v|4l<"1\c0t}Œ0g!Lӯ(H1}Z`*4'~h }^Ruػdzm/[&}][C <^k8 J./.%J-vPK?2Nh[,]A>"t b! @!:Zy*}[{h|M W?Oy6 ʵLSqK `l}Vj D&_Ev~Q2غ/y魐B޿= 5/g̡6 t]@}u0/!6e@ ? ]~n[ǝ5FNk>^|% C~bًro) @ pۼOϪ/b*=f̄w |ݓp3s(Dhkh.)\L[F{iT6 t]@}u%XX Z |?_:c#ϓ_Zn0.<'ON\wJ*t jF"H?!c(r#E Ќei=,5 y.ǟMj;wП7Gȫ/YmП\ PMs ЅcP/yZ*|3GKOҽ{z=5Պ? ?+2]&C!@`PzDj<^@ay~h!v@#& d@MZ{cѨq}Go$ptwWc؈M=GiܖuI(۾O[HiQ:>pqsb>\kl}>Ir`KJj @KtQ7-[oX~]zCBſҼ|aBmt j&MZle_# (1\{`CyeCuC{.=}P45_l(E[c 999K ,uw ӎ; # yn Ez_7soޥ ^=u cryoeuo;o>|^ho$uCA\bi:oņq?'c”C6ݾ#XbWlvR *h38MۤsV1 X[W*Fsnzï8$pw}]Pt;xګNy(sF-fR0}dįC}. BSY޾|QI}1t-l]E[jQ@+GSQC0oG&;~CA8hիaΌ/[oJ w7E@r? GPdS~D;l@?3ƍ}/G}PoWVB  0es_yuƐ@ X5 # E1U<쨺/z]08B]{]G鼡^1HwOS~9*N%Qieq?8V .t5= d86H.rqцa!+/xuз&8Ceq[n2*`KFQґ 8%ϖB}8BP?9QKr^]kn;IXfw,P_ڔΗn\e^P @@n|@{%Pkz(еeØ> Knƙ +,t;-l+02a8oGc\+P%dQ;: _ST +K` _,4־ K}11 :rA @a6 .ڽWezMBH.?+FEWx@Ϗ(1lJ^/2`X^`yg$=Ϳc kZRX+^4amKpylqLD>n&SOMVڷO>}Tro#$=K/o WSS6mM N8.;"ʾ u!P^ 7 #]K@Ad!s= ZY*@3{:hvюHFbP sO*S\Sx40.O `l}UƯof`y?RJ_>;\ƹ%={=:/gXo1i*o[-u*JLo׾ Pv_PLzL@DpcYN3`aA Na&{~i44fV9B5]@ϼ_4p! uLi}1?7g{SSl۶wߠPBWBѳz 帣`Q1R9%xS%xi(*kW+~?si!P^ 7 #\ V=_?Ƥ9 zC㛾#>[|s=JiR,Zs i[HJ3^\9(FNp|G/TO~g~ags~x=-) o&] g` E +Ǥ!M6+2]&C!@j>55) T C91bҊB@{%Pkz(omSek{ @J0}~+]0oNf5JpAPty7Oeo@rLH|N/`c~LSgP?l\;luHp*9He Է۵o=n @#]*Z/lƌ=v4j# P ]:\d1=+i%@MsyckUC' TW#T?G fyY;K@F!@O. @6ӣT H~ۊ6֔ˑD7l,{rpqZ\lnN?c"(W5( E c]ok~.I>u,^qӍYQ9 $←qfڼI pۖ ߷m0Ng=z> =/uX[*@^0g N&n?5C==MwYlc62^ oOܳ&F5dAgX+B sXGq0HgXיL; nCB6CN⼹pksZP_w&],-ym@o? kz(G~M. fH˞~S*@5eod ƴ czaS/Gm({(zVys/phlj,yp[b[,ePAr@@*Jez[$L;"XݤG¦7Х:fKoXuXx?C@/ͅCEby4LYI۶wHo@ׅAt>WAgfh'2TjH')R謹 `3ɠfLml?E/46x i@rKHU"ܨC2 eoI!j 콟 T۩ ΍h~ޜ r 1qxH8ϸ<?QC1CsǺ/سvpO(Jh9t `X>~~ܦ\=ԭ矅N>֡/+WF*e2n(VS@zMBM NCmQylĦ(\Ps>:iag9I]1Ϻ/Ywiy<]4ewF(G s @o2];֛;i C7u᥻By<)gCqTC[5:6v@tg.Q =Q[5%@ E81$G~%7ZpuWێWi۬ !M-)M =[D?X_K6a1~,]fKy y|ܣ_`Z{E~3[OP{2Q;K@F!@@uݙ}I@u`/ynDc/X[ 2s-k $;#}R=sfvY@ڔ@6"Q/  إO[k\0Δ0c'g3t]{.=^֍!0 fxPG%>Btt|7|~Cʽ(۵o=TםY xcm[f8@j@30ԋ56Ќ[{gc_.mؒtEw/_eM?pMҿ7 3O<j w2zOxJtfh"+2]&C!@@{3Y[*c@ⶀ6:n;uONsS߯/_*;HV,i"R #p:Nx(c7G/x =Sԃjf` sقS~hSo׾ P оrV0? GeϚ- )mP*@ڻ?Om/GT&#Ř71Ɵ~bfM`✚E?{02OQ AK·WGs G#x͡D oh:6v@)!i()|6SR0 pn3.Ʈ?ad̆'/:]lܺ4!?ԈE:i-:4>?iAҬ)_GE2tXo~)#'˞zsSU}?3d&o/bJGRWc TӝK P @>]T1 ŖE1^B luu ٘ YW3aov(Z@*(- `.Dq.nYtA6E`Kok?>C]5pM28Tk( ym ZHa6mKFYsc TӝK P @>]@KZryn-8_(X1C߉F0d};C_ooo:7&Qt x&{8D+5X]`YTzxY;K@F!@@Zɞ|X(Clc
t5`ڙߎƌGBwV ?(ƍhW[6`SJz`@y2'{ιM [KBx>Cݦgs[p˱GB֛y ^@@\)x%0߂e Ps~hSo׾ P PeQ?PKlQJwj\5I{JQ@>D}|PAӝ?l/}5`P3\1KARM&q.&Z;o#xO%~ z=JH/_,|@M}NM]&C!@@gtAmP- ɽty-3F0Ǭ~ʅJ[銄`e/'Oeiy;:E?0)m?dE%6a7A~>Eԓ50焣ak(sROks SxN=ۮ1jt jtNw1 & 67*ŋaϚ) ɽw(81ZwToV Ř%݅,zxUh R}o| Lsڷ 0|qZw>8i~ZQF9z4o.K m@_)ȣ]2 {;" 8:6v@tEBkW0X0qXVoߘ*ctwK^y'y@K6` {:S/wmD=#A;fo;#q}7o0HBz>CUpÀ\YH‘D&yv9&T6o? kz(+M/xE|l/Հ'2=8;A2pU|=g`bnOd/A_"l|@.?n}#(xӃxus b `M6.ˠ<,>p۟oBuTPB&5:6v@ѽ 6O#eQxۦQֶN_;o-؅$ގ,SCS >2# d}c@Bcao] QێRf˞zRo-XyȋnI Pݗ1  =݋^~(QͬQ0ԋqo %d[b& `(W`g@aB۴ "}׼i9 V#b׬7uW 3|ݗ=49Dk?.2‡e PS~hSo׾ P =]h#~K ~llkןA(lO>wl/|߰~oۦ:Ez~R0]GǮ R`*gxX?qt[>qltdsJx1Qt%t& \:Bj֝@=BB :u;};b1Q8g_xY%`W> >ʨ1jT$M% ?_t: 38ti|,}o\r}v@w;&}{W?J(z{s u/ZϹ`]/?uS@zMB^$=rnxym~.zM@bS2#Zo]-c_F{(zb91ȥX ڝ `.h;QͨC+h >=Cs߻XO-$jl# 0i?<4{|i?!ЩGo_ %=:6Ж?S@,!b͸h׋l l}3J(n(z~ų ((R 5Q FڿQ$jZv"a5v?`~Csug?Z |]+[R?\{.mپ*jл=K@F!@@u |8/z(w?h|I(n(zS7$^@f0h@Cd ^U 9QL?|ا2R~27ģ~@t'P0Ng=zNwNZgVKe7(Qqi[hwM.)=|?Ww澫|) o& d`~[O:+sX(n(zBK]ɬ9ymCQ^4~mln-e|α!"-f~>a{{Yw=A?z>IOeO/4K^ @zHH;z@At>Ww澙\у bn0:iκ,;=7=QN[J B]B@[[J595c&N=Ͼo/!͗_;O9&z8=6PaXOZKD*HG 'P!ЩGo_ vő4R<޹, )F95, l/EwGײZp(* )@'@aWV^/Laп{wOǹ')/Kfh7?Au'P0Ng=zNw7g5+Db[n S1+2K װBP b`+yEW`iߒrPL)r)3CR׶l"!fo>L޶!`.'@'#+"о!ЩGo_  s1P+\6 `%јu' j%cvuų Hs(#l4PO o7=ϐu/3r_+?uu'P0Ng=zN* mR¹8/p~6y{:l̆-'5V z? -h MT!t"#|m<xQsKaZ `$sPu׿~qw.QE}{Ԭ;z@At>Wwn} C okq [@3.4f׸S\6l(R=?Hz \ Oi 1G|~[ 577x5JHO}.y/ĻE}ㇺk۲> #/ BSY޾p4 יl9dWiֵ8hԑhtlX Fy9< z2.3MȨ4c{vvc*` gL 6C5&;+w3x/p" =S""|*3-*]N%Q }ZGV i@}?qH9|Ϗ7@è;(ܚ w\||s`Ͷ,7!;#.9>lo7! OFWk{'PS~hSo׾ P }MB;;M@l(HXԻ4>ϓr\4aT1;A\TPx]}ypv@\r> J Z@a`X A^? it*K@@ݺGt_@}u'ো1 mi=b]\ws`ᅦ>qpPA*)bؿu'%W$ NG?h#-7v;\뒄\NG^VRտPZ?/h(r'?+}ƣE律W٘@5 X5 {@h\0q@. k7me½Zl=ԭ_~=y7 F0F 䞻H,v stqހtS{~a~Wгmo;hT3HE}=Mse-*]N%Q }mB"} p#ݔi"W| 7`/{x~\K!@Xw +Hs #|o*=ap9isA- Ÿw OFCq,mQu6&PMw.@Bc1+7|I U@}ц5fIz'G8G@Ǻ3E`@Yo1! :~g3OIӿxnPj//N!}!`z՝.U?nw|./WRral=+,{N;*QR { wH! 2Cav0v݉c߿ۤ{gτO>ͷ"Sx /;K@F!@@u/E=]gHMos@ Ea18ڨɺ}loPT4u^aao:ȧ|;fa.(Ư {^GEߐ$dQo,9(Yr sU?]eǀ@M}NM]&C!@@udMEp4+ں 3y'AAK70o/?Lwq*mQu6&PMw.@BgЃu A1 )Up@pt0vӷϬ}n ŠD;w *VPho#@DEJEC[b~P]s`/$l$u@-XZΔq.^]gct'`(U@z+SL: Yv?hhx# toO.|t O@պ;  -X*gv0as-ۏ= |n hIY6;z@At>Wwu|^M5~` [uhJmQJ#Nf0jIɊE}gLg8Pٛ;d?ߵ@%%*0 \+)^qT-Oۃ|CW^"*/vayg(vUΔ.^]gct'`(0 Cxٻxq1=Vӗ~+!ΚaތC_u' xDP-ɍb:@}%B4lA!Oz>s6h}f)[!?Ye}.^]gct'`(-t uxQ/:<7εdSaʗM?cezwֱl嫯8S!Ԡ=zy8n+@~ ;۶` ]&2g!^0佚В<Ӭ,_6&PMw.@B^ך @9ȍ| iM ~w;(H(nȺWճz5@E`j' t3狲-G 3y(47pчB\-C23h/?+}ƣE律W٘@5 X5 *Ep~:V@ï;3;Zc-n ɟ2&m+@;0@)sH{ t߀uQFs/' g[6iȗ :6v@׽6^6uiy@ȡ>hw7ֱ En%{W78h[$ -+b 9l XO=hDFa>`g6&PMw.@BIܐWn/\~kag#Y ~x%s 25%8S-dD0(a{ XEAг[?xŰR?+-4# v;K@F!@@uoכ!7n f=5ׁ]f^=UCPtEe ×.l|+@_eP@ap{GhL>μU;=}g>|Cٷ6I[1'Lͅn_ۖ=? kz( VV@x:SOV4zun$#==Mz}w&NW{PÃ[2F4e`@= <`3.'yW(Ϻᮙ3JΛe /(T3۵o=t_n\qhV Uo?hmw.Ig[>pc~HNuȮ  JĐ DkWD}w#W_V woTs54&PMw.@Bi?@11x[|!&k~7rCӳ?p l+/9u'ȍ~V vb,N[n|˱~ Z4T ]u~#f/_ϋA赁'@ TӝK P @\@n3+x~w𹖬{aO\(Fn(zv[Ǿ{![胒/:L&Ğ:{{Zמ#x~Ag/7t9"+'? "qS@zMB=b(ɠgyW@! uÆo;N<S7mMr>@A@}@5{|~զl{Ue`JA dpn2۵o=t_nؗBluZ~538a/7 `H`dcT Y@/An >7XN_#E%^|gk( |"\0jjL,]׽@yE P>pY6W:u{$ww/ G:s1Rl`w7X=wC>;E z;K@F!@@uH|ُ}fKF:6♽9?wd(̓ȥ\ Ԛ&*z`J?f @t;~X{;&!='`|zò+AzTiL,]׽ m#ȍX<:a\1Z?c:+@w4қ=)ng\c֛wȺ 7V@ Rj?"qS@zMBi~fh p]3î_TvuM:^7pa/H[G# &9] Ǻ ːK·%= $fct'`( Ž{!&M;4֞8[u!䤻Y9pXn|+ ";9T@, @s 4ƌw^p@uPB~.Uw$4--@ s@ Pkct'`(`3 aN2cANW9|e'Ј"HPLZvy@ !?#IV {D!X؏9"06&PMw.@BQy?7M>7+9+ѦZ}Cҽ~y؛O `o XK? zm9`܁-rMW[N(owYB\TJ`Y?/TmL,]׽.ŤsGmy@9Kӣu&y%ߗ/՝j0qԂ1.0 t_an+̃G  v0 4O,N!}!`z՝@=&65 ^<2oyz „->hһKȋA}Oc͟@nlT!޹lg$s5,L 2+}"qS@zMB ~%u'vm+ هw!/&F- @@9m]?V~}I:' ~iw ʞu4&PMw.@B Σ_iQ/di/(<[4 B^L/x70j3dWN ]`/L`l(#^q!,~0 #ҫlL,]׽ ?ύ} m(mho=ʃw Op3h >n,<rpYwO~6|~E2b3N^|i <D z;K@F!@@u +PKl[! )G]g_U:߅P]^{/߿D6 m;\̣6voHF/[oDBP`RR`*=? kz(*Chi"n6~KQk-ҿ<tu@ `r!OP8׊.o3`; ɈK^y'ztx`O:6v@׽S%qM/k)_?=7ׅ֋tws~|r?D>\,ާENǝkl<@]Yp֑9/2ʽazo bјo~dDŸ'<ٷll]0WD:6v@׽Qт x!f̼z?{oGQgM/H%!$#"t) D. "RJ @zO-9{{s9[f;d<_5:6֮:g4x:ue.j@aas]÷z瞪/KU@mu'a(4e/ k||fGr+.dK>KPemTзr`c`έAjqo`믘'K @G P|a՝@I P #k5sSgVQwo-[kV qYTVM@.WHoO\5,7aXjvA|Xd#Gi@'hhHa՝@I P 7  _0痦M(JzkټW| l9 :Q4s`myg@ J #Pca՝@I P TR 18ߗ)`P_e`'-M[\wz~plKro>?Xw5@큟׃@O~Q[1[ڇkHmgN;%w? ; _8ћj@?ަ  72H9o9kM׮(U)wf?Ty/$x(}O8|maAG%!X &7Zx@9&P[ dͯ{oyzs~t lyyϰw8ʽͨGf=~+Rǔ Vf5GH 3!F N_]da՝@I P 7e㏁@ةsJXtq{s{w  @4ECt`w{TwԺZ0j=`$o|0_"@Y@mu'a(4]tsK3k{&[Zt-soguk*QϞH~JKB`UwC">~~x "GוJ' >}x펎j߲# +vOd;XƱ@9NhhDQYLmN |yd5X}ÝMצ]F pǴ`aկRҚr#2I yG+bW>.+]#wÁm j??6@?ަ  a(! ΰ-vg;RϞ̧@AqLY`ͽX]uĎ=W,>z|PÀ>PVho?i?]wň@E@#bm[wԥ ^@!~V}gfyӽy-,cg=o[@0"Xq(5B@Rkn"*g,_+T?I`A8HP5YQ YWY@mu'a(4Fv@_|>ƺP@\= n+FPc: V˵}AH-ɷDn0 ,蛀G#vU'PgMmA @u/ :k~V[0bK.u[s^yqp(S8\3@~vvw nWWSvsOׅN~!V;&WjȆQ4|@{\oJ~/L~1o^rmj@ͯ{v;hz*5?^M C=w; >AWgW{/Ev6E2M )W{wR3""0`AP}կjHfۮꬷm=(4MQO?T ߹5ΰ7ijכ\w[5x+dWCS]uOkYxzȡ,A>¹oS7zG@k<+ oԼޥ{.vU'PgMmA @uo70l+͎ro{Z$  ; "f˖E!aOhBW.GZFmy_R +/)E@weml170*@GǩTjcަ  zV(Xa`=͎ro{w`5&,՟ct)v`4~} W nRwzz:l)ÀO! '&(,s{,ꬷm=(4m62v7;ʽeТ)W@L"ߍsq9T9GR`__ Oذ/ 4 `]YBJ*HT:2m7=u6_q`iڽZD~cDN9CSeUףʔ PI'ȹ,a2s ~m}t  4"[ؐErt;ǣy{$(@Ε-t6=O7\Nz&Ѓ"@@n`6_Uo)=r˥V] 5, *\4N?@*R @Ε-QBJhJE׽i;ϯSؙ.K0|]`lZGN~Ѽ_xu}p?{n7/ޡ W{w# t6,JU> A! HG .6_v+[{䷆UJco&cm?5_C6`6ZlD@2pP _Иz'a(4F3|۝39Y>ֺ@0 }~G]Wuѹ 3a.߮KBjYmuW]IpG9)~% ܘz'a(4=;EWטּW,oc0oljw[g߭:'TB0_{A@ c.3;Vmo/_ c]p粪8diѨw)@`Q'9!BS޸J"V*4  } > 6_wu`wuV"-FJO$t<}0t)DZ'e}{H]rݕJ\} >3ppJ!u'a(4 u <<:XmoayӤvg9}}dq]]W E"1iHmO}^$<mk¶6pP!?@!k4_4"Ш,޶u'PL] \ξq6iR;a? t-hξ8 O|`kHmy^:\ ]C8lW#8+HDE׽yQ?94gq7MjMn6ϖ-:ϒyS/:@_¸#gHmٯϞr r 4˶}0"6޶"|Ј@z֝@1ui4ya>KsnO:H˛&FCs9N;` G@ P?X[c~`HmONNzE5]G~T*񔁾g mE"Fg1;bR` @s}%gG"ɚ|%l#'uH(?h5xxC":́G_,lkwgPG@q@A"@@@Pcn^U*@"z_?zc9?e`׾ rC"l@xm[k},CJ~vLLmA @uo6 ӎy_0L0&7iHۗ_f瑠:`go?Y * SDj=נ{$s 8h@I >Fp \4e>hJ&@@^/Pveĝ}K/I4>V_6T.ulsO$uH@_خ3a*@[HM| 244a4(TyJ ( ZgC}ȉiH+gÖ|:ӯp@Q~0dܺe7=$RsN>l?& N/ `k@O |3L׽ @Գ$Q`xh+X}KʥN؟u͜n /qO%W [pC"&g0swR9kdOwNV@nŨ4a4E >̝s<@3ö>iH3 s90Іz@p Kʀݏ=$Rk/SM@8'T@}e;20t([nrttf۴zPh~{ /9_e8+m A^W'<{ wu§HkM|mc$޾J*q@('Z՗!o?C!=(4\'sF[09{&pO@x{ӟ>?/RW. zoH|5OlgW0 C Ј@z֝@1u\bGh0r ZG \c-&Oy^9H 7^Ҳl}ͮ5ABs|=X Wd`[t Ok@C >ֲmlߏ<.|0ȏp ME׽Q qn X_:},gyävм^7.8U!060ےp /7ABfςGFmZ ^}'u'Pm[l T6_z@fێGGGWaޯJޑʥYO?oL# * iIosymnہl;\ \Dzxu]>ֲmk_Y6 _.H&اmc@ͯ{3@yKb> V ^i;R4. /wa Wߛ(q7.gͽm>vJ ;c'LZ˶}~4@7`}/&_"%@2$4n}Jޑʥ>F+8!|k090怉v6zǧ>m5p"PȴOlگŶП,Do_az+W82 ׮0#Kt=`:R 3W"_@<W}k_)v6z_8,r", 'o@kٶ_m?:' zPh~{"~5G|}OgnyvW\f?4gW;G@ uX=(Ro];{<2h-۶ ]СҰa0tĂ&@"@@ u3@2b9 M4[`v7KjqI $_ =H/T 83uIn76>2EjM{Qx!\ eJ,Jz m[|E3d]aE03  _Z@V?yɿ}%}m#g5-o.zcؒNw1P'8_v|H rDLJ[6FEj{- KUte fu]>ֲmkcРT:g &4Ey?>@0Y&u1h0H*pkt+BTs3 )ݖT6IP_:x "n <W [p݃":σYa Ld ԀvՋT"su'Pm[dOC@"@@ a8 _4&ҴuCwalR#bGy@ 9/z1`lwvVzx]kޜ<ү_ @}e~OJ~w>}e'` 4 N>@|D?;!$H4YpZ˜#N)M[G*NxiW :*[N}A,,k{ :q$Jϝ~"zXV@BN~7. OliNu*_#< @uo4]4o v-wUw۷4m\Z63x0oWa'xn3_v^Ej{ ȉ :@^?}e>bTN1_Zl8ǣW?hY Gy¦X(]4WτN>sM*P3K:RYVA>ѹM. VpEj}%f+8y +'Zm(F4"Ш,޶u'PL]Lc/~^+p :,gі7Jjx!xjHJg^.$m%#w"&Ãm}"@&% D,)""3u'Pm[T7.\n'h}Soۺ(.׭ӷ卒ES>&+ dg3@@*: .3c: x"evۃkDh-۶{3;-˺FmD@#bm[wԥVqgx?+ ?giHӻW|1i๾@Vg6y/_&wvVz}`'eQ0WSm.h-۶ t  Ѩ@ Nŝ||m kpLi9Ry'o"vq@'8 ``  85Cp 7M/aJ/,H(DY = E m[Qi:h~뭋vSp$UvY+$ Ӆ|KQ>g>z*#a{Xһ޽:J<=e&!hYGWOl'PhDQYLmN1uI? `Y?;+kx3t=MR.<{N8Z^vOP ۉCCy> xz p*PtH?832Vs<) EpOȢO*Z˶}ňFu۶SH@L8y@S0~J Z4x{0Q P8Exi=0RhS +@V"@y *  m[4>m _0n ~'e `Y8q 6$i/P]8I_^^W_ǝyng ~ї}Tsϝ{|M"g*\4njh-۶   $,0 8T0KƑʧ0_K>Y@^_-HV tnVywFj+=0㹧4 / 1}KKu'Pm[Qi:h~ Ĭ" DOHU?K Fgv=lR[iʟods o>`"uwޝ_ pޙ$/}dz$I@>ֲmk@1"Fg1;R =_ `>_x Zs&٬Sا@E@t^@os*\X嫻kHmٯϞrL <)<h-۶ #h}Soۺ.,=N'N?ʋ@@ :_!8X:waJ~r[$i# 8@`+@tf mCro_uuC%=gBV$9@TF hdnh@kٶOЈ@z֝@}u@迯, c`2_9_ c{zi7R993݂N:v zBU׫@K?z<" Y a{`.$E` <j>ם@m(F  @u"P;1p`6_ST>.x34BD$1[TKVyy)|CT;o/kHm7|p+~,qMp` y~ ;{]>ֲmk@1*Mͯ{#: P8xg脍4tTxSK~a'ꭺۓx:lq0hvV's&ytSD zDZ˶}ňFu۶jK`)[,NtxT@=?PۖnY8=hR[iޤ OK-|20ZVO]wuܙxĨtn ~ 6J{}]h;w=d;~1>yDDh~ o>bD@#bm[wE5Y@5xW#`ZTN}Ͽ{ CLT&//|^? ?7{hE(ieAu'Pm[Qi:h~&T@7?p= dj,>KӶʩ}]L:h L,6lKzQs/.:N.>w)@p_cT{+'Zm(F$ @u/$q';ԇĩA34kp΃GW24'c~MX~wO[ZOSۍ<`zEKcW~~NLP8:q{߶}ňFu۶j|y,uNT}Z]݋A'nt jIw#vcޒE*9@> @ }/ J} /P!Z0k0y< @gvl>B7ם@m(FWͯ{V]T +;&eܠS{JӮʩe3Ë'Nģ`fW- ];eC!T&s)@_[ʪvvIG¼7_Gn@z?= u6@>{]>ֲmk@1*MGͯ{#ag9⎽wUt[uAy.[XK{%k3X;;#<Ns^l޾LV )ۄl cr->9݃#޽Isp= )0}߶}ňFu۶twR6Xy3eiPu/s{тu㵽w3hLj;MV7(Wt@0h):\ rx^ @wn!GØ{pܷހ71VpA~qE~&e{+'Zm(F4"Ш,޶u'`WS W$v\KN??\E 4-   ]uCyIyz؜O:Lf?(b1N?:8Waó.{p#{Deϛ6IO Dh~ o>bT2_C' Cϯ:{bi.:2"+l#u٥iHK'–MX /eEd@j1\D $+b[^s݃#^O`c)  d]ϥ5l'PJY&@@ _z*'uAχN"O7oVvIfعG|i`0alpIm';졻2y`/3otY@ @jOR,o?N_Jvv_44L$ 5-@ ϰ\outEZ˶}ňFu۶R HIQ]P\;4 o8}[N { &Xu oxDρbD@#bm[w K =-] ]sfByՆ.f^/ZC/#?b_XbD@#bm[wzz_/\~o8Ie!Q]M΀UװkT!V0I@L1r=[D8HH@Baa[nIm}O_>Nܶ@F,}1W* b m[4>m mʻn8_uY2 FNԇ$2Jg_jk?Ci0ROᥓ̜@2?AɵDjK5ҟ-p7 9!VO~@X{v4G{̦අ@sN~۶ t  nΙ?%{5LHĥ&`ۿM5»Wְmk@1"Fg1;=sp fYcw5~0˛#WKTx(~ ')[,ȶ@ @p]xC$M?|)_v2 QL~0YCg"Eם@m(F4"Ш,޶u'.Խ`nޒ‰<; GGK{J~ʯO;-x$ _A6x<i;ۊdPaxAW!ZO}o"`[7%.hc I0n/? 02G\Zö}Ũ4h4U/۝ ^Wgʶjd?/r$ɟ鉡9Wѻ5<7mJ6U#wgU77`㌅!& `0?(۴3Ϗn; /BC$m]z<ۆd, g<"d (-;m'PhDQYLmuuή@n\x(jJ2OtE;Nr*Hm/? L~?O#:£w6yԔ#`Qg( Iws/w lkIj[u/Y ,1dR@|<; @sN~۶ #h}Soۺ+`NI0<Sf,9r}x ~$* sI<coWv5'4m٧#$8r@d~ol %:8 Xs`=HR[ko~oFC[ #$H~vLe|.a>bTN4{.^/ʬj@7@A:,3$[+Ac'Hm;-|Q']O#u@ iH'АE_e Imo9qbj<|LsԞwe|.a>bD@#bm[̟?fֵ̨qǚgN8/;2ab<ϒrhzA/G>&\x]i-Rnxt-5_7?%q̷ s0M N0*WpO{֓G ߟlS@<X</Ww۶O#Mκ;3츙6LFCδxF8$gX ' ~|< s9L d!S7]~ ?nro0Im %di?# ( / @2ve|.a>bD@#bm[Vlْ ]0W(d iw5@F^şBR?%> Wt $sM-W w?q=y M zLvuY Hz!U\:>&յp<]S@zA4K, ]w۶OЈ@zֽ(߿x})?8gǡCpw]d%[q`̱g"ulsOƙM7& @ .7 I`_/"Ij{|#f&}'vG(?pYY\Zö}Ũ4idρ93u.ɾ0_/9B[TÏGKṷ<]N7ǿq_z=YwݩDjkt eX& NEq$˷?Ij{͞2bT5Py {5grSbR; GxiG$]lFCgUHmO<ţj5aI|>-g&qx_<6?$?$zF Jj{}a%s("] ( :@;m'PhDQYLm[YU`υe㙍Q7_^&N~8в\$[Mlam@.@Rͯ kPImޒ%i(PdG0&7(&{M``U,hU۶ #h}Soۺ xK {.yο/OQo*53-@*I@_ V?ҴSޣO~'L8(yN %6G m[n$j<L%~47aͽ{$RUo\u)|xqb@1H%'E@b@t1x.a>bT5|k-^bGZfˆ\ μ6VJh+ILl^GjYeXj@q Q,Ĉ)߾y苰EW=Tӧu; F$IEyXIEch7Szv~ְmk@1"Fg1{Ow|pM&'uةGޔj #YI@2–_N84m]?/Vwj-/?,o6?g@m/+= AHZta(3gG{mG dx.a>bT5sP?_-0;3m~uy8wGֲFr̺?3hxۿoxJW+Lk:Olor@t~ó/HU{Mxgݗ8?ܐV @L:J'L(@z-HGO]`;p5ǘgEpa)FEj;m'PJ&@w̪?ۦLSid)$<0js[Ϻ&vDu/sRuCT^B#xIm zxB7<T2Good>+Cϥ5l'PhDQYLm^(:hYշUo>`xKq;Ț<6^{tB. I/Lc $҇CT^=?LEΧ @3ƍ ZT9xʋw[^/ HqU@LV*;&@_@Ѷ˷m[Qi:twAΛok70MbD@#bm[@wwҞY#iYc`g_7$;x se>x`Q6e<m[ #|ŀZ ^=wa eG^`IBRۧHY,Gh[ö}Ũ4mJ9~G϶dNsst`pH$$y?_0ЇCnf#e/4/$իoO01s?1'4Pq]Hޤ,@˷m[4>mݭl3/;,z_;ʣ^T p~_veMy?7t`S.,M{DꝒs2@n#m |<M^0 XSa3O۪(8K&bT7=⼙\ok V&,k/򈙰V|. @7_크;G{0$_O^/IŌyP-W0U@P&v4y9@KO`R$ډ$իy >0K9Iޟ]+$&U#@7V8Rzq~*~kضOЈ@z=۶Ϯ:،㎲ ph,7Zx?^0p7iͶ;4mwӿSt-S:@q(!2vbTN7=s{t`]=&/'r> 'h8P&DLx,NG>N#װ{($Wt,[R=;Ϡ;,zLF29"2%Ot`n{$O':0H0 ӕR)(m'H:;R@˷m[4>m¹߹$ rV]%'iI? 8Z'OXia/M;DZ٧I1y>*(v-wm Fy0oou_`QvD՗CL/,>d' HJ,9SL]ӈjm(Fx -^:Kf;]1@@zwUGQ2_'E  eW ]-NvD_/4ҏGd (a?le.(~0M"IZu^=wn/섀r2蘣.ySL]ӈjm(F4"Ш,޶uw/w4pǿq􍰭XN` x@3E98sKGи58Ыg|-2Yц ?߉:_S,\m{}16i" vLQƎ-AH M^x_4 *8 ݏiTRsL@˷m[4>iٲpA{0aF(Zz[;rZ`v`#*͵aϮqR RK} /|6_LpY8VTv'? /_,'sX?1;ajk=lIcbD@#b꭫;Z,ΟSmVwN9|cg]pxN8eH +MdK~ #d&I: /#|"(a;mdڑ$r =6M"iOτO>w3N/(,JyjFv.Em'Pm[Qi:㤳񟭼<:c;Q8rNhgNMHF\t}z[kS !=Ҧ  FeslvAr2΁. &2,H~W 'ZbT8V\9yjUB|t>+w}ҹU  X< FncʰE7:.?8-d10 dݶ>eOO~4 X}4luvDҨ{bx}s `۞tT"ةςdAE/m(F4"Ш~=3`nCIMϥ@2ؙ7px;6WCH{rlm`I$Oy^=0->dCXJ[:O!< @spLPm~aȘ:g?Q(&6}4 . uv zS.Z췆m[4>kѿ{Ƨ:[(\Ǥ>Gb~af¼d+{_1\~`)M{Cr {@zcYQI4]nF=N"eD6H5@W64p蝄|1!Pְmk@1*M]:ޒE5׽7Q^WʣBjߏ]%x'YvqYH媟ࡰ78}[HzCXIB?:N2l69|F|E9 @n9ԾF[]gN"ehٜTw`_vJTJpG@8fQ嚶-6su Z췆m[4>/=sx ]+/gK|xG:?֚G ~WJ"ehч¤3fȽjp13 ; 'm; U[< _(k1 nokcI }I\(ȫdA^K!Pְmk@1"Fg~Af9gVU@ޯ@r=Q 984:=xM`.M;Cj M:}-@0:jLGNKPaqO{$R9x !LWONzESx :!c6sb"Լ_nxb5l'PJ1'@U{ZY,XޯH'+qb 1c?!aIG˄49??w.?b5I"襓dOK++qF?:;j;˦wmN 4*S;D A@2 /vDѢ=e~" X )@^2milֵmk@1"FݧZ~Ӏu.36@N}|>q՝e/*G<ɡ~ai?V(g{$Rc57 8 2J@'٣i0mZ%_qD,r< oCtu >w o^wb.Sಀ hA6D i@h[ö}ňFu[NzϷuv~ag >?ar z`;/ U!7mU@jӨ< #v ?lO"刹.?$Q~Fe+} H9ԉ; qUR`/Z=@&N@`Y4Zն}ňFsIAWcm^&޵*A`r*? E/T9sG8#}$ q>҇ѯ1Equ:;QLhȟ4- OHtm l9ᇰn{H$sMצS0,6"Pְmk@1"9=JW_m^eS,_(2#q@HFpđ7o;7ST&u4[qg$_O(Ң8F'-ۮm9 @!j;u@l9x:7H$_Qq|'aȄ2'8'AQ!F[@ڶOЈ@q-A۶= X >8?N'tvc._H:TB`s4HZ;ڏa3OFQcꪷlL4pQn~0t?dӧGES9dC@rr;1& -OUm'PhD. -^PxmޓevSQV%T]x+b"dn:A`Yq=8PR6\!?ޖFp(m^?% i 8v$2 upҙvPS~^TԎ~h*oAm&F~ m[q]A?w۶eyο/~p]E/ aO-Wa̱?.M{Bj-y˖ ؒW`$b,9?GKTQjv@i4t0~0A" ρO}H4 K14z's!@r^ E ۲b5l'PJa'v fۍm{ &YE\&HI8_r ut1ƼԼy?9:)61{_#cyrҏOzl~)5 (aUh?Q_D2TעQϦ}J"@DE?-D:lTͅX@ڶOЈMY;k:~OQ,뗜9S h;C˓IXO/~g_qg] ^ vDkgO~3 cţ[#^#qG9AIƶMOC%m?< Өr0h~>l~vB& Ϝr\Ŗ-Ud@ξ !h@\`WV'mk@1"%O-[zo6Ⱥk{c+tt!qm Yqg:(_ X HMp#g[y`>KӎZO?z&~T/ wNģ_b)U@Ozl Q]@@vey{+o!kcHzû(: #dg>bdC HPA 3dC*(m[Qi:zp{tzoO5yG5gM]W8#F%Pmǭ%: T޿ 6{9,Oǡ"H9N876ۄf@p\s4/A|(V62CW>q1H$ 1ׅ|4yeR D@6 &H~g)AP mH;e+ ڶ}ňFy$=Vo[9*k‘tz~c^K/AeaݟpE"Y\/7-F /?<&*_ @Kk%Pwlg|>+ OʊtӠ@ |)o*AH$ -5<3;/;r?( &F*|(LI #$Pj۶ #P]> r¨?K5-\Ry:? ,U^v/}Ưi?C0Yz>GjAu.ep: CSdXzV7 $| 2c`ܡOv sxʑ&Rm(F4"Ϝ$kttm[ *p`;BiyG8Oj謴wT^?$0V4wN %K9=iYm+tʩTix!@v2@OpB[Y\nK3 j^%n?lʧDA_@O0hWbv r۶OЈ@(wLpg}7.ֶFfLkGWg1at@#OqqNjXN*_;r?ǖz'}i7H%LWO=\Xh/I']<۵-eR"ac($R zsa?HVS@'^@ȭ"HyQi(@x,@ꯛԧUr۶O#O\ ?_Z"mk*-tP+}^x?K:˕@γm POpy;b KQ}{X瘓TeDǝI˥p^ P!. ߩW4`m>bD@AvO[0x~ѶYfyuòrc*< iVX gPX缫~+"ŋeޒBY?jO: "Pm;Xˏ`zDu@7M2`l{}g? TOo:< 0*fc;|kضOШ@':B8ih0q; tU?aeyu?l1^{Le? @zs^ c+̹@z܎&RMhZj#e50 8'YratCuzU]3;z~~gzULJ ?B]Q%TPGB3e>fS8Ֆ\@[@k{ `p*k3YUo&M✲ ?>ImۥX- EN=mO0><B@aEe@*xm|Tݞm)4adM/:*@$ cT> +~sMk2_-5M gߴiW6Og`t}g5h= #H"GIuk@c_~?T>oFA1*QE1/cbЊh@JrVWCE\q1y(}w?%_eTun qߙ F6e ɗ)~-~0 .x'l2P2l*Z(Ă)?,_@Gd wZ,@s;ԓ}-=ݬ%ʫW_Z?& c&ɿ"H;(=?k`4 ^}5 ^^ي~4|,4[UuZplWfd\>+> 3?%0͠V;;?cH >wB.OhTtU*@MHp?|־C`XtzRo÷WH<+Xm.&e~1V9r`Bi`^)w`]y?@_DxdqA*1da>D8OYX~s``fZZӧ | ہem,P,,X0f$Zo\ =];uWAdC2_(SL~ 'ȿRJ^HO,cEG\*H?Б~,DFA@ۢzauJUtU5@-( j0iP'}0e!Ahz:,h\p(D%@*"PH}' :"t-} !C`X۠v%ݕ}|-vU0(IT@z,J@ہIKrF@U98n<}h:c0Z7\)6̛d[2;d4_1TuT( @ |QA]KYT%g=o / / F+?_bKD#@}] I7^y.f: R|V!C`A' @Ǫ *6S0(bSc[r' ~xs4%1-@5p{U@=,\r~Upd ;/%vKr^20 S# wഛg 7 F+䛷#_A2p?+ 5W-~}obȾdžP,,XЩ@}:l tlV@Y PSUA' Jȥ? =%0Mس>+V;`K-K`Y{dF [`@fS53\Ybk`v?~{ *@x~? Q)@"@lWB}od1dcwZ}`p]Hz އKr 8^`ih0Z`!2ߋS=|ׇFtd 0s坯]#b@Z/B@7D(X'XhŵBCef:s,hx- ݓ&:}E#6@h*xzmSpK`ع>Ņ*Фj;?  t` ky}a.$]w쿴wT@9Eȿ( >`#4g:/IG {yaՏ|tWCi?@ZG@*[?(q XhïZȬ2ı/i@YW8@,hAoz'*k+y8:hAbزP0C`A'P_@= zJ~uɿE2 ]9H/uu,}bxȳ`WGqa_"$˓׈MJҶ@"TLg6*Sgf.*z1-_eVqlgBpW{` >wn# Q%[ٴ+ǀSʧ@Rʪ &ErT.o *={^a_blO]&dZG<nˊVGFAu_ =mfv@ "CAmYʒZ@!ޢ]`}7oVfBD͟ PseU(M}g5`v P߰|{ leaocRA-$%W;Wj"T:ǫg`z0-he]FѷrYޟFr +_+s?=m]C;@[ iZz@X(Ņ4 yp Q hbuv\A~MZ0 sM/2BB>U]۹,4;?   wKŻvxo>ft_X]?kޏLڄ B=mfgVؗ` vxWУ:连`/+KYhï]pN}s22[[J,4wn ӛ㸿?_*": |K1\ؽ~-y;Ԛ&$T* ݖ}E|;I2JvZ`0BY0Yht@~[6x^Kȵ=@/o=D 1/u$8_fB?D%{a_1LHs@c54`lE++дv[E,,Tg#c g };P g poFw͏, 15Q'=5%@} 0tKehC]m?6|g5`[nE:8k;p>2cGy샶ÃE(K"<6@U@ p{` '%= yPeMN1_Bue:=0"m;?  .ne*%>ݜ.v 4/!/QevTTA P,6?a9WDq¾cýW1iHzPD  *?ay,Xҟ8#Dğ.YH;}~t஝w4s @v``3,m;?   P߲1M^CHpVA8Vۀ6gK 8ga (Fv]`E)9`;.jn>1X_߆_,'*~* U)0<~CME]!Y=0 o p}nn7-ѯvа7~KCߡYh X`>XĮۜo]_Uz@[yT_K.uqZ;ElF` 3p{^#lVsW?i7<d ,4.}wu(^,eVFgh ={ft-F{!?]~1,"Pre@E !s( Ly9M;>E ,7 1/$uP߸D,<+IZ7+ƒQ,.$_@EcU Pb߶(/u~gE0UMx[_F}>*wU,Dm), ۄ 0a/e z1T7  A /鏈~R#Ed_QO;3AP{!`JY0YhƲ vz=4mF[[Xiȿ Ͳ{ U:Y/y7*E0Ņ<3^52#pϻ_#۷YrN&TGqhe?u-O \JkN{Mt@RP >Y,)S/'N  H[~Z~L_ `d(ɿ?#Æz~hk"Dp&$aL ۰),gVveh Gyp_?&PDMP?6~xާ%2#߽+d E&0G#ݞo`$SWVROVE@Daw" UXJ{ZQXD.^VD=m/~N;j9._%경$TE* GAh$M ui4c¾@c1cWΝdDsm5K|* 0 kz.Rg}= @,I,S!1X_۷@yE@q]$i$5]iDl} %4+|Wه&C`4[' >ocF[8~Ac[4 ڹ yWH~lDpf@]/`O‚s7/c0FE(|*O ?Ng, 'дv!}G-YH`,â3 Hcҧ஋ WH}N "rQ @MPB.g ',7 >Yo!iwԠOhٱP7@N۟bD<D9@WDS\cѿq=wDW/kTWVG`!J@~@fM?/b,XkwȧHYAmx8 3#1۴z{acEP{A1Ǒ)_-7GݏZQD M롾aoX]6)?2*| b_Wh-h)H*&ʁ:@O>Z︰/<ޡ/(>+RA,4>Yz*; @5f=pt@}nZ%H1UDz\slŔtl [@"= %XEt ӨsgkuSHqA˪"@-עjJE|'!A\O <@ aο=Re0/-_\(-UX'NTmYhïO,y 5 Yx@#Ʒsǿ{vTнd0F2Ix;THzM6.([+C[kⰦ bO]ho& P,m&:Qn7/og iᾫ)G"8^C(mlQ*/IPSׯ's<7}Q h;x̜Ek qGfFdEcW7XhҦL_=י GzV8|ɇ'_%`)X~ត^ݖt~نp[Hudhyx*uwT\.gۜP,mD(>kع~C7[X| 2\~%;3 TBW;G}u1{`;/Y%1mO5'g_6tMtO+? J)PPcŜ 6۶%IΑI=J4ր _ -x?߮ MW} "f~8,PL(u_QQ|.]@ᗘbxzNdteNYi5)D~=s@< _w Xny1Rt^ b+x%6_8荼, E~k7ã_)e?)zkHz e.IUw١ nn^,``ر.OS}C|W^poڞho)U&4P_a.m0/|w r)?5 =kܷ?|a_ [ tLWGdE) 9UE4&d^r&,JP`P>7j=pM„Ww. lJN (I}HqHBO[3P׏3 J!@0:  X+)-[7N_ @ і@\O[7B+~yGV.ϳ;p]shyLe`I}:4x`VW|.p`ٗD B6c]"P^Ɋrnh,/ }Q@~@vV7%P"NgPf($ߑf__t_v+6/~Ԙzce]8 >_ y>h離;;Q 7 v۠v '/۞/{b||(S(SiClqj <i)ʷFQOߗ`>tk^/V+ܖUKؔ_(b 'AQ_ι{o:?[ݐ*v/{|9zgEt_*:6BO>P,4>4 ;ҳuz"mYxZ~VPY(`fLZNj5`0:k~'M A{ٟ" v dh `@6~ܩ.=uleƴ@}g.@5@ k~;m3!rX|iGMy_u߯@9hvޠON[ݰS7_'jr>e.Ʉ ,32@+PtZ*h~"_ڏ5 %~ sMx˃/nk{>r뷅 cI?m;Ne5mQgnKc4?HkP2תGN\?߇Je$Qk ޴~cA0}÷-@Ĵj_nǩNo5z/H#0TԿ$f 욄_ _h^2p﹯m[9@}=_D ˇO?7-,4]lo<J<&f@>4r&ϘOԽݓ&c ~z4A7Ah;E3v)PO t;x}2|;uJ 5nAaD߮,߿[=Qu]o̻=N9=؈|cu 5"@xqB6ӷ|Fw9j}?\d{e"e_S+$'ZдNgCH#n<(g&Pli;eC~N=f0۞~bغdSH#bV@%°'T zߴ3tqC!>[PQEk q-ě֒.8 :2([K'-8֢~` uNc[=BM:u}Nk`/'{wh^ ћD2X/PRm: DGe@3~ os /`ПEM۳e\(ElWkѨ~USnL˂2cl xo$}UFlK{\@Ue@D?W"dNg ~],`  %;ă"^H 8ݽi{5"ۚ/b(owISoJT(3̈.ıK {ao!3U }f7M:/hs<|ybChs嶶_!DEĿ~GEBh'tt@gmu_ ƕV?HEGǭc*K v p57gݱ| صz%)(b` ÷o()SlK}WهT$xpbJԓcV cvp!62*ހ,Lo;ϓۢ8N0I|U#lG$"Jd_#xE%hyNaΌjƇ} FcF?]H`[OהK',}dP@q e#leQYs._Ahw |sw A(-T6=K\zv*NI Pz}Cpp`$Ps0zDC6"U aoCqLۦI=h.Qm\-C*/?k!p 9hz|[ Fga`&7Q/*' TRL8mYhïy R* Odj!@Z6PYqɓ/ {O F'`#=^[X\߹Zr;R=]3LroN/9mbr}{W!* '_@쇮m+3Y-v] e.3w"Po#B}ь.XK?Z>/((Z*A2?H[oS,/ k 0 3<8WoSߺ!O۰?+6P>@+{3qMiNS V$%]iϽ <<%M6@(5EH ]OVU3&aqG$OE̿m0y p Q\Ys*SOw␭dFIDATO\,W(^OH3W$2B ItCVܗ2Oվi@, @hzj^իDdK>'3˖KgH>Xڭ5*;I裲U`pEha ޷O}`$} { 54`Mb8P/Z193`p3ڡ4D\6{AlR ʶ JϒЗGt~)IB5c߅0}#?ф0^ 5]G}N3yOh5ʏ ?]@+K#h/Vܗ2oվmYsDk]W@i7} 'N FGGԏx= nvUP-(ф,2A61@O뷥Gυ>|>0ƪZ?wypMeH_t ,y@nkA<r=:M8k6}K $^/HelǤ^_^C,󵨿2lza+us/cO|XwǏ5oco+GӁZ:Nw? j߶,TULQuY@)@=@/G8 F'bò_,#pe(}UG? +2H1bgk%!ط~T@HZ /ړh⇴J.I0`oX  δ6CUoem [W4B/iOa?Ao\@~$67aa0_Ί&,<=V/'+J(YXM 09R6Њ9@7`< RڲFhv\[yFßx'|FvԱATl|M?SB|V`r>sa]B[?.߯A&]Sl`<"nIC*..}qY=;G‡."b @M|T)$QhK QeTgznwSԿr`d*致¯.WҜ5k{:c{_,D] I_VrХGS =Vb.(ϝVKg 6u3NkP FǢ?o4ZVL*i'@vǾ~U36fK-0hCI0)]gEE 8BpcSv$e1>G>xѢRPieT7ʷl۹7IPD ){AoaEr esek4i/i)zza ^3_6n<0{f_G<}CТ8ߕmR@bVDSy'њ0,-2վ,]=Йh %cS*}@e}_}&tYAt UXr@ϙ- Z@t#[8O Qi>X`g'@4J S9U=ؐhFhD#63&[xE?*HXUPi^I 5_j"zpU!S!r_{[2c;>];!4H(% @r AI ų.D5\ s{|6>:} t!@PS&.~1@'V10|C|G{CxmFK1@z }}c\1 @UD_=&CmYjCۢ5I?E襭ƯG]Ԉ?u;gzǞ ƞmxKR/k? d!*Z "_ڲwaCx_nbQ;FT, ıo0 ~˻a?k`5#7.Y\BFҁ&d;zYS H:a=szy;My<5*8\W7T!`f"U\_pei餒w vk$ ! ҭST*lH?>'5¯}8/?'F`i r`ߗ.r.ѷv٩-Ezt0v;Qx {lSs`.u][ j ۿx•5}|%LEr7]{3q{o_̜u-TQ?m~y.*W?P1bJd%zf \& F#\(?"VL?N/7HAG/{շ)ސ в}jv^O:zv @|>7 ڶ|XLѮkL#q,OF(+:J褝۟'G/Uh^.x/1udJq2 %bHI)ԗ #0!+"a M#`Iz /{) 8OϠh{,_u Fs$ 5?>,%_8_ éx?X%_ˌ, {J<{R;2ofHr3̥rNL$u.{٫c,#Oѯ|vZQl [e ؃?UqE}3ݷ.Fur:\SYS3`.q8D;1Ԩ~MO] |ձv&FDuԈ5 {n=hS\Wsc%Ƅ_s9 g#؏g̗:;c0Z$GeZnμn;3 l_x(l3-H/?G?tL UrÝ`?,8}{,sZ<98EsDELh O}jA ' X 5ЃE58|t]E\{ g e)۷ϩD] }ZLGX G~GoV4^py >H'٭ F9ѓ"{ټzeTEva+aڠ m}tUW}Ϭ _cN ? cS_XNDž(H|Y?P  8O|3b վ+GXՇMP jF `k~x+ళ^= `o/#6FN`:2}uB>,me.\Wa.pNܟ]A"8/^]>wnDh?-\&"",?/>U*Df j<3Fj`RHߎ3/Ouf#6үDBB sd H{q?E1Q-tʿ$™/CP/Wä G`OYh7 վ}l)&){(EbSd֝nEc/s!7#mRXr7`~ q__nM'ScH^9Iͻl[>6؞?IN*h5*+!zưk}ԉC =w+?{K35;L3]Upj"~~gt5hA@e؅jҏ?JlJ(jm){4ScMEo6ěZ/-'ζ<_?KY.h!hUd?fsH{-Ÿeҕsqj?9㩞7~zM) -O~пySю h&b^?y3S um+|+Cy[PV2{@|8D >dNM5JJ_ijWDvm&)Wо]<ӳ { WԽew!Y]o@|L]`%Ȉ0?ori~q4@e٧G0+ ) z?^kD_ lm7%.Vda Uפt0 b)qd^MfbPA Ez5OJ >Eڞeӧt;jk'gQ7 {&:%\ԜVh”S_Q~s`r?Wڅ3w>x0EKܩXh7 C]US$ W K2C֧X@iABCV#}uwӳV@e:8s:2!V8>"@jBh'?~' Ppy2wA7Qr5pF H[>ڨl+w~則F's:Dݼ1T$K=tB ;gjr K-eb aclv_~P_= nQo//Ҁ F`a ԧDڽO괒Jvv*|a){HMt܈I[zMLhgmp0Ф?4+v2Z%TF?zPL)5C0X@8sT UsVo[мWzv mu|t AG0kaѧ^'u4L`0|,өeF. vt? w\X ߡqz#ALU,2 zqWҀ p ɶ[}ם_; ;wԪ3t3O;Er!ݕЧ-Sz ko8F}lMm?|ŵkNO zĪUAb `w;PۢeTU}WU*}vK3b  JIG SOxN4Y'Cwd0AغD}l> ޖw5%'RN/_Z'~ H[t04߶g͎zZ@~ hթo$Ko@o` wê&VtUzjB-BwDgW';z3uMpuv)*XXྨ*)T6h0+_o7~~yEQm&~⇘LЋ*vhWIzU$ͷr2&>0mXĤǧ1Bm&h}b۽H{ZA3KQs?Z -gawU햏e2+?ߪО;ZEYٟԨ~4.J+ 4^t''2!cpδxPKۍ??9i]}cOEPw=B#yE~](CH~@{ `Q_{1윉?M\<E?Ō.k;a /#0HeO 7y>sa'”#O&|T;C Hb~%!I7&z:?Q~9@~Z<E# p@qaf} w߱ME3VFuAZ*0'U,8gWr FH2t ۖ>mXU`kmڏ*0&p#{<_*Y ?pT ^]֛=1}G *T҉3P ׺ !"\@AE#hSSh5?Xrĉ#O`7,"qY?:)_L90Y?3KQP,`9xlRe' UŤ_ާE(ί 5SZ*P|Cc0{ܕN a رj%`5w1H@jI{kIz$`v!,4\ImF B;5(®twÉ~>`0 ԁ-Ow}$LgKj<\.ncV-QF{E%۽/`- l~x` ~ҷ"v(DTD*Ig3| |Jf?N/ O@b_fLNW`td0ɊxvX;V&?+a{j",TO(@q\F.`Mc> W71@D=jz{k" ?P2yZ}~5@h(qWۆƍڤ)5i*tMg4Q,& ƞQG俴/,`ݧ,6K!S>r @u=,R(zS|t)F2F͹2c}[@}N\W>`BUp]K"PSlR0S<."FYm雁l[%ǎ8v]i`ZWWW]8H_3V(cA?j_4CTײ"_`HEvd%Owk&Aϔ)Q4As_Cx7udѿZTFyJ2@ @{PS9zRZj$'SEmdM0WȊb Wa8?F21x`nI) 5^ӟп} WO_zڟf}YXVe8Ir#z/h\!=mS_PD'q3yj7tӚ~xGl k񹯾y,4?x3Ҷ 1᷿'oF $P ,SFA!],(/{)"LYtH e0D >z~֬`,0 ap6xCgu}3Rb?npl>rS`gsۊe@Oʒ*H aP|mgU Fg[hѣ,0 BcSg}ae?*Ss9Do!YvvBYhï̓o} ~zȖ⏧ Ě.EGE:`0ÌK)׮Bޒtr 2/%I^zh N;oċr @TzW?gأĨ*zP@~{y˹%I5E?!e"a8!7`0F* m*[) ,0 Fs`__ӖSYjwѿ~Q`#$+>sI: _ww>un_fH;#d$(jQ@u @OTc/({Cn`:LZpt}C?Y`0aS+o7"B~J ?PetۑQ$*ɿ5f:u_?U"LŞ@9_Aƹcse` p?S>,&1 ƈSGy+j@X`0-lD~@Je /a{ ;Bi߉$;ǎwja*@M/c@ ĿJ{̀?ߜ`0X`0QGuV+?^"2i0+P &+FB@X5.E釪|?k?8`>,V`*lG|_E#Dr>gQ Elo+!⸾#PJYhï}l /#PtM80E< Vx<8㟇iCn` X``0F ۷cW+v/{R!sȿ N˚Ԁ%1"4qqJYhï} Q?T mUQe!)B0Um ILr cX 1* ]scZѾ(l(_@'ʿK/E6FN\zN%,4>6Ͽ)5qW=\3-h5.9S9N3=qRȍc0 ck/{$~u?#gDѿ+(R(@ O@3{=^m֦"@,*PE{@X @SGgQ W ƍy R`(<~b5cN~O^/B\|zN%,4>vޯS=R"\5 >`f2'r e`1z|R/#u>L-5=$\E|K Z 1wIg'i>|.>N:O kmyF9O0gq\ QWWMd0 cd̟Ub$ R/LSI#Tb?۫UU?T@~A҇ݷ"_v? vOKa"@\E870 H cȟņy6O俆ȷN#$h?(E0/?aGb`|g,C@=SqSS}! ;[@ ` :C`0#X`0aAy_#2_?+lWĄكݰڅu_{a V(_K{,Ȧ$h@q]n "@>^G°`0M cX/?5ӟ4^2& c"^n`=T@~C҇[7U;&!^kҮ:D:%D=EQw`y;n` ,`0Æ?:W$za>5c+*?&td ߙ= uې3}q[-dZ(2JPt`kv c`"$"Ee0W;fQIL@"tٳ@X I) ;Ϸ 5^P%hIM@"9` -a7`0 r,MbO]z>%iQ%bA-*?O/ٳ@X IoG@m.!".0# |kз'f1 FX``0ZFW>%6ϏMr./S)?BTha@Ӿ3{!#)d}Wx~K{I}PLҩp߽|xu1,`h D~kŦaY?J_._ȷ~+Z@;f,zRٳ@X Ii %}"* J@dK"~gu%*h,`0MC BloI5 8_E)ʋJ/ /ɮeUºmHh'6@2`U*D`]Ȝ"\8+v X`0/N~jtF zF S}OSszPZu_X ۆyM0c/m)y{`6gvSqpܥqn `X 1dw?~__Eva'}E?( J?Y ۆw, +)&d|D() Ӟuu=abMd0 ,`0Cm]O=l[%5Y?[e [uJBJ zOZu_X ۆyg``@~Fu FEDr*~ϩ'^)25F2 X`0` n ]˞"gd^TM9Q>]z: $>=' /,mCG[ȼ&qL"("Z% |DI. 6=f2  ,0 F7\ ,/Rȿ$7 Dټ?3Jӏya 2cЪa6$smPlJ%V@"@ s,9+2 FX`0 oY'21GʊZEEBiZ &[Fwfa6$]@$y Б2uׅۜnp9ݠ|uܾS`T`0ص)X֍Dg&5^Tu5D%Wc@ !,꾰@X Io'@F}Da#@ѧsH|-b>DB,ȏN'^{L9pQ؍e0{&6y˨>X?:/_DEYB(YfN,̞ºmHz YKo 6YDݶJ0jPBU,bxC'f3= ,`0 ;/; 5Iea?& >(}?!j 0;ksG@YYߙ= uېv0ߴ j &l,<ٗ2<>> =pǀ @U})U)G]_FWQI2_E%*`'ٳ@X Iow ;T/m\"2ٚԉDsW]v X`0;x|C"޾ͥWɿPɿ.zq@0 G3[-{ O͉ǂWd`d}g,mC;AȎVEl/M(V%jQ }цm]H'\ n<`wGGs}*W2 O"n+ A w P#03{!"daڒ^6Q)ETїxZ@?^8v Ƙ ,0=kzK"BZ$H_iߌ俆$ujA5OQ\ {u03{!$dVa?Mr_Q"*8Fqv]U Ƙ ,0=>{pK\t:=wsDD!iPr EqJxы$ *Ad ! !y;>jvZ÷VUή|_rzzUߞ}׷V]쉫?O't44W(% |iR@7O&s<Nd ƈ ҏ[0ݧ&cY$U@ U-|sNA2XNOo^/Km/'\}^z@;YC܂ r'x2tcDz -]Lw#ڝgdH '[^x:< V 2Xfqw{W&忤k_/Oa@Yc~l8dt/XBN@Uy!A7Fypx8&)=ݨ_DժT/ p  qV/i 2XFׯLMcςaI?Ŀ$>hA[?+miȀc0^OnHogn_dDv  0l&CMk9x>3GAAщ  {? aXޟqY8ȁ?v=W(29}@<1"@g1 oEu@WL)=  3oM/ @A 2(((:GÝl&n7/OZh4w'A7FwHXpn[[0@v%Rq 0!0+WX^^P0? |@؟K*Ek 2(((:;|6su8lHxMu/ 7@&MG@<1"k@„&(Ul$},¯f1`QGLxI79@vLl?}_r)((d@AAсx彌-.J>)OA>OֳLc^}_]'"/+_W~fx ` U aKb< F7ٟ.?fCeΌlE|>!W7ak/2hqD3pbselR?xӤ~\'}: /`u¿APx ` e au{֋M;G8|@ 0* Zo_/ 2hiLq+Ǝ=|&!]fa `gڝR/3\1װT֯KIN@Uy!A7Fw2{8 n00MC{l͇zBҮwSMAAѸ   ĥп_y|gZ[&왛;ܩHn߆  Fs'x2tcDr0@LYtn0(04pɜxdHħ;/@@AA  c]lظT 7ަҧa^@~yZ`jl3Ӟd4;#җ#*b 疰f:$ 00\KwPuʐqHg=ê%A-^ ]lqz&0/)_@ԏI?&@/+|Cn   LԻpMZEySo=MmC!!Է>l?OAAQ{@Ecq(wC_:ΚH{ĒQ_c6e\y+WkW|dt;#җq6`3"&!r/!؜z\egabZ  |sP?#lezɿ=`P LL{M%h@hH׼2:ŝ@Ѝ׺s3/T b!]V+?Gæ<% >!y ˓K&rRi{F7]c^dt;#җo㖫tY@ T ]fP厔vۃ }y8 APPP5 aqி'6@A{,Ky}Ӓ,Ah0Ȫбv!m"[  |71&y-&]X)U֩ܠXg'z.blA ?p9tV}y\?ևAbfR/Au fX}3_d9ٷE:U Nf¿QdR֥խbWBCYѐy_&ћZ߆]K@Eb!¿dOx-*~NǴ^ _;@I"^D{_Žv/cdT2tcD:*ʏ[P3Ǽ03 _2T<0a#<7~N|+_ % 2)}_ߺ믖Vo6 ͓&TĿVү<+*%FdT2tcD:xD$JKM&R/CĻD 0HAH 0Wl~CXu{2)(($ b=veG/dlX^돏WJ!')euEq?^@E@Ґf~x}ʝ@Ѝd)x ! s>[qup:A`^h%\X O_=?:w ' b1{pEqk6)&~Ce/M'ܪ-W @JՅ~y(x [ Nx!Q"/`dV 8ȰK@; Nq'x2tcD:pn W 0쥏 h(@]PX ~%''LAA1r@Ǒ|z%11r\ 'ܸOI@ Kbm2Fo+w'A7Fmm4 >[ƌkŀ`Rn'cHPWݷ=#dPPP,Q,N>).ċz!0 JJےe&<,-sCD|&ұo$2Fo+w'A7F΍nJSa15|O1@7d W3~7abZdSPP 2X8t_hԻd3s載IK_j,ryo"2K<1" n,;Xᥙ zR} IqnTLn ߃mg=AKڵz/2>?{gŽh, žEg<)^6/#_)~fŀ/2ŝ@Ѝdf3n]ݠ_2 o2}PnZ `2$\uK΂g`ŖOAAd@AAQAxʏC-NO?Y"^P oW~^ w6v)} N@ynޕ bxK2S1L .V} T{+Wɿ&AA#S_NCA3D {!/JA`*׾ Xj U\ x?l" BnH'`4nV;b*D60mH: f0I^,0爆Ħw6|S`=Q  1{pǎU?Lڦ ?Gu?}β} w 8AZfBqTC %*/Nd ƈt2*hw n $:jmɚEf` 7Ċ [Ep0 4 3<^v𳟀 t9,D|8'Crs,kR/>Yſ;t2ŝ@ЍdTf?O4VvU#x@U8S5fR>]?7L[8 ) 18OnH'z]1n.dLQ5P͂"q1dX@XwgoQPPdPPPX8#7) ·%}٭^7Xq IVBI?w@8lڄd]./Nd ƈt2۶[G_?mź@GB zgC b,Pr|ߋuM>Ų2@/g`_)6)gW{tLQf(x\H1P,uLg) X } Nq(E.#Urr ݦWV a*cB4?EA@||ldD~$}0郒E$nOEz6Sj{ur~td~/HM.d]./Nd ƈt2ruf⿂Hw1D'̶8)W GF@nb:x_Zd@AAt}*x㗰GKx~1ᏖC> *Y;l΀h{)>Y!o\^ǝ@Ѝd[BJ/o7T <LSmeqG _` d@A#9t|?D=6?.T$I<\\Ѕ͇(Y=^u=Cپ- pP\^ǝ@Ѝd[V-`=6aX+CKc%jd_ckv솓W`#@RP,  S7^ ]v M^wK/,É>a`]gC@17t*]z]M\^ǝ@Ѝdy`Enn2U V(RYl`WX:۾v~x dP,  eX_f`9*|6D}' qA"]A0e܅N@<1" sG#pc=jX5^GV@ W؍ ?픁@XA&r#v?+z|dNfJ9^qh@K/ x_8,;?|_[Yu5&mMdt;#h7C\u"7&A).Rj pč틷[8aO_ dPP:*xnW(nb]cbS\>׾k=Sn7D-OnH'Rnj[#v5.V 6#em*ou?;a'&JA  V5]qab}&R}UKv/V hY.4/zf$υpC'Ӿxme"aX~"W1HyU# ?3?o? {}5Vt}((d@Aјvx f|D3Gd@G_.O`W+G#@O&Hs[*D]amdt;#h'2@@~@uyE C&# 喸έ?qXhc 258_6yBg\Wz,b0HXx?y`b?3 Q45|N-bWhct9Z*w'A7Fnn؉_`fT1`J *HGbQo4m;Ů?噰_ U\LAA߆c J<2 P.8}9.Ags _&)w'1kHtEt2ŝ@Ѝd[jP0PX dV HFQ !_~vt]MAdAcţ?O6G_i_*gvb!Of H\fE>˧" nq'x2tcD:`0Q>y[ľuS5,U+0> ~y@SmӚaϏvxL[t J 2((6۾9(?/[&K#/?lM2 @' ޮ/;n q L0+LnɆ#Wk|v^r} N@Ǹ8w#h/jW(|.Omw-| 8| 2(($C^O|lM݉>Բx^0ԣ/I1BЅ4Ǎ? .,/;VN@<1" nqx[m3XdXaVz&0d>f 1x _oqjN]?bf׋l@Eeȷ]Ɏ~+<](jT=Y/(ܳ!n_2CcROhZ1 0nH'[ N@E}bn`%* 0|0 ڻ/?G:Vj :Iz=/]xl= MNEA#/?rWeGq`Vezo>  0e9P?L.CogŲK9T/mίgKE:Nd ƈt2ōݸ꤁`7ʄH&ɊA6#v;BX,y k /9l}!UdPPx[\| 9ԍ_63-MxK0r6?S3y;(] >7 RA$11HD}`h`ZcӋ[?WL^ۖt2ŝ@Ѝdtۄg5ܢ4 1f6N}G__( 5?8Ow{((  Go}ȍ_hp"^t@z~yY?WH"=g} HۦtD&3i(TO3U~ryiw'A7F-"ǸMb6#vLS"3 !ELL1'fB ش%/_"\UX.A@y睷O6C5{wMn`w}gPN`g-'eۉID`R ?怌?~q!Oi6@i6f>qAXs|>OnH'[x6n@yA*B<;FpƤ!eHuƝsq뀍>Ƨ?ýׁn{/4;oM#O[:?z IJM\gY/"Zw_a;CZ` ašr6 6GܿK}m/w\^ǝ@Ѝdts­V ^v,g\܎ HabVm1rsAFMn8:O_NE {f#(z`3sw7gG}:lJџrK%v`>fm mM`#m|=9ʰbBEk8K+X ʼ]./Nd ƈt2펷s(\/24@ݮlņ `b#>0pR'b.bܦT֟L8!xƩ4w2L-@LEOUx-_LH/0~q}3Nꗋh|?so}P/-kARՊc^}:/w\^ǝ@ЍdtƭNnm0.CM*WQS_T|-:fͼ6?׉uaCVl ݋ ҩWa{=r?~ l{7%tIUc vӋZ}>X] rĐPo q谅>F?ω-D' r} N@ܪ$Fl`w ;\&n4  VڌqA/kv~lykvG GG5G2(laa0q7Ñf"Vz"^ uLaж! L1TKmѶə̂tm4F_Md;]./Nd ƈt2/nOnyYjZqK"_7 ^t3*mf-~Ná"^2``3~lx5rs H]`*Xr^D~^w&TSdp 2˝.q'x2tcD:vǗv*l &ڍXw3 :4!4VeN)!63Z]`:~NN M1\(0\?bک1dPT>0,7Cf߰z3y@ 0Y)c_\`F [2CafjGUu&`χi бK fs} N@sw-60"sALb:a`pqr1V \ֱF fs_ݳwP!kvfEG "j<;ᅰ [Dfaa;aرq`|Bٸڻ7?q7"_?W?7 ^記O2` cBۥv 칊MnδjhC c6EsK<1" nqww7=6@SbX ؄HW &q+ԟUSnn`Iq_(ꉶ~)o l=߸>\{'{.8vߝ؃y~ X Vɣa(S8fJ2{zVg/=P>g-Wc.=vQ2l_?w;#;ZnfX͋I K4z&1l=W3yն&0T"猿YKMV֟t2Rf޾nC8PUm;]d,X<=pg,d\{ncFʸZ r9(WQc!1d[OX_8eR?= O<jm!t2K>OnH'[f^x36 l `L) `6Lss.bXkvbmP=j|;h j;ŗ{r(Oȭ -v"G̋I_UǶak0CGRXd;]./Nd ƈt2o)mE.b>:I4La3DsK?X68έd^S\P\!$ؘ\zNNB؟OBAIb_5x] k6ȈO t?+#\DAo*`E$Аħ, «t/u.d1E(o˿C!.iL7&xP3$m^, Ew>i<-<scj\a K@۹s|>OnH'[z 4<+Dܸq`ɣ `(KonDZϣ։?-6"[̼q C>ou_H&&!g@8fbP]0ϙÚ¶[  u քL*!27x 1q&?hK֓[T+^tע/mhN4r"Z"藎(f.nλqa `{NWut2K>OnH'[z YFcj] 'a0 nfK/[6+22L,xƅ-L (\۠Y~'Aǥź`po,_t͟nŗ\ṺG }P >7ٌCgx/ NE<\Mk։bpIcR_v͋$ח{ Ҿ P2c>@:i=.{dAG}j9+^ϢhC)f?WU{ nq} N@0=F1̨$y7$rӶ؍:Z 7Mjݷ,H&C–sy)4iLM/w Q*X14?]VuoǢ]cf[r@=?Zpə. 23rW $+ `M0zp`r𭶤&?nX"Q[KAwtL?[ ca6}~6y@2}LKۅg܆]󄽞}^zuDs2Ν.q'x2tcD:v7HW[ehʍ$y tq(= Ӑ+-S{Mm`l7N M:{[0d`EPs5 c5xG`3wo**;36Djo@ V@1ݪ}Tb0wW_q6Zf"9ztfnE^ǯ])K 3"':! afRy邞Y7l2Pdt;]./Nd ƈt2o3༾ܶ}IJ 0wmm2{a֫k 1<"̸߶XB%!_¾~Ad/.JFj|*Uu)Kx)Uo~a_b_>`L΄hxWm%zIA~.C}U6?24 L yԶY"'9w\^ǝ@Ѝdtl@gBJpȜp&jTAf$ E~Ep č*Khc@7͈apsЃ_YG-tя-y%2 C3Xw;߹rK鏘4 ` lE2TjX2n0vyQԶBwDި ص|=ݩ B[d DV (0@Û?^wŒv_?w;#;m6nv-ŰʱnA63t7aE:)bmJ^n\b'7>W9BeS5?LoI? r-}, !#o)mp39;+\\H͔ľnUȱP9L*3V x;Dn뮻6e1' /'`9~ryiw'A7F-nw| scˬjﶽטYq6!]T1`@]ڮ]vpbx~&k[\b)lj 6Q炗W<\l:]Af肿@6@ن#V .\tη.`xyܪTdoȜ cRT5|߼@cVP4q?E k5 zq&-=im_#j`&#œGZ# W[0/sK<1" nqksk7nfFLrmpkH#tS^}3ؐ_Oi`6im̹W ׿~Ǵ%VSm|]_,J؃Ce<>Kcџ^vliC ek3Tdd/oyFH|>@~1D'Jun qڂkట !؛\m`7 0ȪvLDvC[ K$S^F.E{ _yiw\^ǝ@Ѝdt~Uqĥf߱&hC[7]'s_7Q`sD73,9U]XӺ{t3m%10]a D]Hg6bx,]@w2ֹ.wƎ2xFQ`g΃KE?J8b  a\%w5Voù-}EnKEֈAmr1XM50zpn9eb.vq} N@1p3')B\P+LftłY.EX,fDQ+Q\a;Vǹ:g^=i($'ۆq#r^pذd{>bMn?ƫ䏥mDϣo\trn rǒ]>/sK<1" nqgp!:XQ!NoYli&O܈1|Eު3dEܶR_} UjK(xUa_i|ݑ|> 9|`ۊ "hN:m륲#4Ĝ0d6/p/?{HoZ;<^`oc``ݦ X:V6 jRb^OAe!=MtOnH'[nUs nP(HH132:4”w%˅U&Iѵ j$xHE[{sW !麃ua7A 셟[X~fc7 ^FkLEDFELdz քv)k0LDY U@ցamg6.2z}OnH'[g,sxn1'ئ(kNd6qv^d2UXf"$s"{[ f%Cyk, B+4AA. //2GOև$bg*r%975Lj>pzMhǂvcDF-VV˘~ [,Ma!_Gm@AcM"r 2F.vq} N@047Gd\u ˵}>X9CyT=jo1XM2l? nT$C{ Nje.)0sۣyaF5L%YEm"wXϒ$ C w`TC524ih7V.ndwXxx,ŪlF m'ÊZ4^WQJ s} N@dzV]}ikn EwM?SVAvYx-CxF`waMN:B҈CK0u&@g{R.؛/\&ZJ~cr2q.%*Ǜo#|:enjCj*o>~ .n9(/p1鷇6D*&9~ryiw'A7F-nw<6/I^rOa0Qldufwt.k.`%$BO wŋو#.Eח16[m+{W.FU_W?&`^C' Reo^cvC 7q!ϸA^zqAĻ.6aK 2d<sK<1" nqpv=(F]DE^J`f30KlKm1_xqA~*/ ]:oEmn_qwH9=4" YV `H =DKU2Ο1km1XowQ}ч.KZҟ`MP|QnsMDKdx2.q'x2tcD:vǓ+FYhF:p("Y2Ds`K ؇:'x(ŽG5|l~f1a9~۝F汭L%B/UL\Ћ`C(|A-.L(D1mu ]+ ^w`}:wh`ybEW;>/ ~n2Ν.q'x2tcD:vǓP$F m`0G@~وmgF 9FI,Lj0x Lw0E/96Ch/+P׹i'{u'<ԑCNg*~uNX̖LR+m.^erw6Dz>g^6d^MZ$?scly1-zz7 s} N@dT͜r lzݱy ݅\pR0xz^>RЃ'+xavailOF>RU|{{agf=_{r!zL\g0 +)]vQ4 +@^d*Ŷ`wڦW#cIѭ]*v]{[d;]./Nd ƈt2'*_$G.hg[܈{tTzyccVW@o N7- ΙF>7) 1-1ElV$̐|tO-P&~+V2ɏE,3{oɸp eY0AjN)3[݄n6ErYd;]./Nd ƈt2'*n oq缸DQ̰kOK[ D^{ʋIfn ` U<k }d>by鱅"}n[_Ju9O;aj[Lh9 0U_0 Orwrt;sOqa:~`A]2]>/sK<1" nq ҥ0Tkjټ݌(.k*F\<7 qS@< Vrq0aOwg, ENm2`Nߔg>d]awoL_ [t.pXc|kOEm ѹ]9~ryiw'A7F-nw<Uq/EMť~yє1!bˋ&}M91WAr @,O="%#M`*7L8O碉 i&E!pGAorBAc2KwnY~WfYv.s0%hy!`9~ryiw'A7F-nw<Uqo;sIJR#5]76ƿ|Sʺ;- i"}pfW.gUU`뒉 *Y:tR~>,%%n} \r^rB7p“B8s|>OnH'[x27a]z2/"K.8bA_R>*oñJ3~؍~C74UWw kǞm+&+IH+"ؒ'aKj8.I43~mf+Ũ,r#7' qp} N@dTKy@Uح?/5To.~&ʛb{WN+(|G558V } BmUؙPa)Y, n=צٹ]vNԗ,voGoNF sK<1" nqۗ wX[`Qmó%?*Wo`O'"`w_OnH'[x2寂ٖjK^z-]&'<"n_Q ^}|)btWby!oOF]c%6Aor2kP?_bsg0έ]dd0_?w;#; }2`r3R *#߀ٞ/y̟PS/1W?޷U/S?bEwq(L4| toJT@Ub qB?ՁㅪONN]a{ '#nn2Ν.q'x2tcD:vǓP/ y}c_{}KڊX|9K{3<~BR#W!d)0B5V N PuJ>`P4݁hy!`9~ryiw'A7F-nw<Uq0]fKahFq}Ѓ qOӾA؛?w~Y+8c\@Oܴ7 3(l}D+@[Xqqm: ߜ2.q'x2tcD:vǓP/W ="l&- &@Jvϟxax/kM$m:{YW0^Cq.[N`z=|;+= P77msK<1" nqۗ lKdhܼ8i"f^.leQ܎+9' 1.1NL^oC[,!o} s} N@dT˿ "n`"3zf,o}FS k.:kԎC 0^k P;X>o2\dd0_?w;#; }Kn;r7 i7'g}XIM5{!WLM &WЩ_]O@d;]./Nd ƈt2'*n_~2z /]Ul1y3k/ n-U6_A#޼A!{"}]OoNF sK<1" nqۗ nqCpE: @ϰnم/eh'<[lt*^s"q^z (֠ "tu<9-/d;]./Nd ƈt2'*n_~2½)|X5a44 mM/>5Fk W__al_}b?U*" nn_~2&9~ryiw'A7F-nw<Uq-n_"}K x8ڠoIM_U 6qhT+; UE:&$)ܾdM@۹s|>OnH'[x2'[ܾ6ls|؇ǹ46ؽ0UX}"3m 0dۗ h;w\^ǝ@ЍdtO@Uܾdtۗ߆]k5(%¾0܀K8/Y,3}펕/w1ߎT)aB@ rP77msK<1" nqۗ nq\ouGzMmS<5;#3~Y7Zg? sqck?\:% CMM2O@d;]./Nd ƈt2'*n_~2onaU{nzfk?E+ /['ؐs5L,Bo.3  `ܾdM@۹s|>OnH'[x2'[ܾZV '`l)'a ~?ZiwĭtO7׋Nq WH0Vn_~2&9~ryiw'A7F-nw<Uq-n_~o)p 0 zpG:jA™eZן;>|k"=&8'nn2Ν.q'x2tcD:vǓP/?+X˅N;O2a\8:ߛ}ax/;͈OnH'[x2'[ܾ"O9?\,//_f6|ޭ0 !\k82x+/?usv_?w;#; }/c׺#O B0']pLsk.c߭Lcppojj0'nn2Ν.q'x2tcD:vǓP/?X>r91H&3ޅ J5gg|=V<-k|S'dO@d;]./Nd ƈt2'*n_~2%am9*Eͻfw>_V7x\u΄0\ .df1pC pK'sP77msK<1" nqۗ nqsɾ)oo ( bg]8y4/:a{? G7< ;'a2RIܾۗ h;w\^ǝ@ЍdtO@UܾdtەXq?!Qck>,Dˢ/Yx_61>sξc `19+|:dO@d;]./Nd ƈt2'*n_~2ʿ1(C-2HK=#~hftq+F|=m8{׃pr'`dn_~2&9~ryiw'A7F-nw<Uq-n / ½a7Bo0SZƢ7_8~hnt8<_zݞ~౵ &t NLIۗ h;w\^ǝ@ЍdtO@Uܾdt.Zepk}ȸctvLϽ2x\ʽ/ :y< "L8e7"7z>#sP77msK<1" nqۗ nqk⿵ǵX^ 7]Ɗ?Y/ ͎<:gAZ10яc6x dO@d;]./Nd ƈt2'*n_~2mզ=uxwgc]aܯeI{pct`m> S `tn_~2&9~ryiw'A7F-nw<Uq-nxwB.]F91<2# a8Yͽ6Y(6x-ۗ h;w\^ǝ@ЍdtO@Uܾdt[$i:֠Egt?<<ﷂ^h<nLN nsP77msK<1" nqۗ nqxO)Ep٣ZuYLj"}_y{+~uFlG5 \' R\'7' qp} N@dTO@ypu˵΃/Lc0};vE /jٹar'iD+ '&pݫ"}]OoNF sK<1" nqۗ nq֑bROW/<AnWtqٻ_c]ߘ;&4FWo=\'7' qp} N@dTO@w,k]+-OŒ W6`Egof:3n_, Ǖn8!(-azhGP 4ҡ\'7' qp} N@dTO@|?6j#ha]?edsZulG!^9 #C*2w a\'7' qp} N@dTO@=ܓvj o z쏙w3اcm^W %9ƙ |H VC*6>c2 s} N@dTOyo?+]G1%P_pso<`i]2`|Ns8;[C@6$` 1x5zlp+Aäd,Ehy!`9~ryiw'A7F-nw<Uqܼby*aYN^`|JԳfLdX{X%O@ 8A߳-e 1°, C6_@A;pB8s|>OnH'[x2'znIxd`% g[0 "NϽ̩,  .?{ CQkoM6 0n7.x2|s2Z^w\^ǝ@ЍdtO@Uܾd ~P'k~NJ;J@̻F, !OWiLK * !dx2|s2Z^w\^ǝ@ЍdtO@UܾdqmLc07c#x{>U,M9gϋtgfq(@a;oy50`$ ᤂ2: ߜ2.q'x2tcD:vǓP/?2wD'%?.`&nMAFh ~A/z{/|, #.?{3b!uU<a(ַ_\U9vw)ۢA)%BĆHbB4%&jx1!jb*QZhAA5D ZiwgvwݝΝ}ܹ%39{gٙP nYT}MgAߐj_kbTǚ_LCUPG\vv]_(/+-a *(1Jz!w> Oeնpж(4Q>0'Cdfٱ_R4M\Y1Mµ3e8}1eOei}$f:Jݽeڮo,= y3J+IɡxrK=ֽv&zF)J9w(2LvCҎzN.tOxB^]X"yhr) ]W4(LJ:l]zj҉@ҠI:_9]u}?˅qu>vœJ̼ 9}7 F#zf'~5R/@#@ P>@<,@  @;qzV~*X*t75Č[  ;6}&N8㮯[,# دR!9"hsDC!"*GET5A$S(>V/YK ~-)}=1փ{N<;k|=1crac#@_6G8@1,2}xXwy瑧 [J@ 羰Fݞxby`n3+ 5?@e2?4XYrDG(]D&mO͔d0,뉩WT2GoJfwII\xl0.&`Ű!9"ġa#"i 5-xy?^lj@w5;5-B p-Ffov7\R\} :C HP00 8@֧aW80thNtM{֭yTVM:0h!rkE  :C HP00 8@֧aW(ngR#I;??W2 lZ^r!{fo [@4L|w]`#kܕ}/YЮu;߮x@\nµfME_u@Q}XQc!)5/w;Ss'giO2`x֭cuv㜻~@U/X2wbCEsW՟h&O"7nɖoz\&HϱPm'j'= I _W)єEz4ۥ5'vJڶP*yil;I}s7̙N@+:]hxnh?_TOkL'.Ƭ)>#o澌w{vbu=O7- lk!|8.^ztI?j.V 8ѼT;Ѽ' Hޛw%dfr ]w͚\9(FN%'I@s*͸rQw܏bW=em-]P=i(7nIFj.^PC,Žuo Ƭ8I^˓.MBW qOu?jYŦA^7Z9̭D.  U46 !6@{# $:@]3@ I7'a'̢_e8ӌL~XwSY;@{Y5Kc#b#[!8K#5#q`O9pY+q=ه\ٗA"MՌ(h2.@dU,ȏ)b{%CC Vw\{ιu>"c!jF$FcϷB40p@5DGkFh_hԬO?ySQ&,Uơ6ms> ~'>PȪY = `lM\t7 cF;y%Ei V)ŗ/l_2Ύ^ H[D4U3ɸW]# ?rw\0sf~%nt؈?{S6c@hf@y@q 3fYG@~%q4μ'g~~|(V Kn}ٵob3x1/ !6`&"@f\uͲ``gϛ`z?4fV:p82jn 6w>[ۯ- !6`&"@f\uͲ3>:ks/=fLG*2-n'73asn# !6`&"@f\uͲޜ4.K^u&<6c"5X `;jZӽzp1n:ܺm kF߉(h2.@dU,[Ǎ`kٙ{O~O\ ` vwfٍaM?1l`dš0.ƛx7o ];4&(N:rRNYҐC{,Leeu.~ք}_LUn}^~#td4Zu_:)8ݷi#YDhTv2kOⵝ4N'm~O&}8=yd?VhhhhhhhhhhhhhhhhhhP<`i+`IENDB`ic09d jP ftypjp2 jp2 Ojp2hihdrcolr"cdefdjjp2cOQ2R \@@HHPHHPHHPHHPHHP dS ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHP} y€X W%QIߙxQM H8&M2/\9D9!,ψ5U`Eh ,AQ܋G\qNU_8s;-"i \~hV|*3z#ĜWLpt,Y g,AҒ.l?¯t>\q-~WJmεm'16 ]ZȒi#mG"p DkH&^qGZ`eQ e8^qu#0'P)r 8/ Pyˮu :6HJ(5 {XRT4: qCk2ӕd{`cmd7jF(HF k܅izjx2fz=wBK,*ł}j PY?TƅX1ݲDG@'_W9!F**<#1~{sco ]"qQ)\d;v0{[ޛGz 洶 yOEۧ7bڲJϩ9%[Ǫ.†N%MEɞl.4"/>A!/w[wn34cъD6c"O1f '`!7aKXaT}/_RЍ,^!gs)EM,Sijo% ֚W5B|nU yo>|bɓ "Ddf&/M(nb#6޿7S[&O#kK>>l,`B|fωA%aKP[:Ϊu 3 8+4&_|zR Jے ֥N\i+| ]9()oHI$C*D i:C 2Kal{Riu#{)S*joTݒH Gwȶ%LO V+^{e`n5zGJ(<+ 7%rv61Te2FUX5Yʗ܍4G?[J3AϮ?Z030~x[p18BnXr*.?JឌEd\(@Gl9k"/[zmjD<-z 3!Ў 'lFe 3CXQxێl+=E.Z.67k-s=y0DDm*Byߟ)xsp2QK8wrt> uuXʅ}`opv(g?¸FAc! m Mֶ&ݠ t6S,|P QaT7) p4倪|nP_(G6@=أ?yٹw%/\9J#P.j{<ӘMQmsx bDVEXk1Am!DVxY|~[N;87K[r`$_¶Նg qPi P\ixF& u{f[BzcH5` ,z7.K%J7G3AŸTYvɻBBa3@vQTbM#sUfnG+CiVw;u'_Iλ>jKFS#_nf,G)ƐU򦤩"ſQ 6T!=)NN\٬ RE{4$q jnڿ$4ak "&25'Tje~HL1ވQ~]@0Qhr yItNכG@C6q^/m&Dٳ={N;)6辡@/-V DU,L| }X^c(`sMbt#A1ְV̑?` ̥R Y=G-4a0׿ Ca֞_F$3P4ǭF_p,BkmEMyۗ]4ʅYc4i*(3-C| Isi,W`VØɔZ"C=3du1-6ȦCMb Ć d#a*2xc ys:A?8+BXMM~,r>LI-oKdb}}-۠~Iʌ,9sD5sx[gn Z+"oFpg=k#ښQ0GHxac!w`R.AH/aD(;{,e,ROxystxCRM1> V"AtǒR< ʦNX wƕV ~e?,m%< n43uhYL`)r#Sxy≧C3C6b]Ӹ=elҩ̓?.XyZ_u*0Мg?*^ z7c-|۲ʶMEwO:5{.]qŪdY3(ɱ006KiXDUgS*e=-s6Q tCچ B2g~5m@wCcy"֞*}ꖟGA!%؀IlrtV$sڅ+\6hm=g%<xj*A0Av0[ɓ~+|LR۸߽}wڵIȣ:+L.";)fYѠTɏD[ne-z[[<]]kU@grG=°GRdy ؂rA4[x鈍yIXNKc9 ϵZ>Wf2GF !9{՛9Z4t:\l%=;D9R-O^wC2f='1=߼Θq}08Po;%i?"[9$yRh_@$V~cy45.3!Ymc Oο<{R[Y6|/;^P$>'lK >Cqx=&%Mo@ȮVlEܺmܹo 9m8Eb5r6mXwj".QbNEf "9=iued~\d4^5ղ}3 eŧ-?V*fhGdzY{0LN~H25v8-J(Wnq '<41[+F fyL~<[U`Uŗ[mTC\wZ`%oGُQ%L(L.b& XllTey XOOTNY-N(k1 ^Piۍ529"pkQ_ߝu? ? a1g]m:#lE;To\~ 3IJ=6*ٳ%" +_VbHQ/C)`T4`E3x12qW< [)`5d##BdST'73 YFyMO;4>'z/Ѫ~w(X+\ 3zOJwh"7\jоNfCXg\@1%#=eJgvj#>qr}um鷋1—0 =tyM `< XjcjX㇑2g`@Fv&!H%^C XY:IDo#dVhk\X+6o0 S:v˶oW}3@˽:pZ"%?EVѫ 'gg0Z4}ټOw)@mGHmHp2 y[ TDqo# "2 _!JTf'v{C7BR}y , ˕B&S8#|"]{F\(x^sF.Q7 P/6KbCS>;xY"\+RzQHR*_vqn9l 98mI-v"ঘŸ?pr]R̔ĕ8HSd PKx*l_5ڽ]B&!,T1wd1*'Ij)YAW # "em;~…ڴ2w'vTAն+m_-}yWΚe9tZkxI6@3ۉ̭X]SwR=hqQ*ji1X#ĐMH[)tFBNzQ,ff8Z{W& 6&1%+,h UuލD]p6,AON~>q9M>bf]oi]@'f]")M}ν#…#hěø~k?≯MuzVp=ʘ +ʍI5[NMv:`Bhan^jwib"M1Z *D< e< ^vbKJf34rE;4 HUm>L6#?Cе#['h/CjB3ӭo B\Xd_!IF?[ FqVD#YeZV+dI{nh rwq>iôn[}$7Ό)ڃN6/I4p ;E?琢0[x~5I8A#7Dxk;6Ԙvʨף IlD%:b5*:*:bﮢwςu {3>q9Z;Xea g;Xi^8h|5abCª\5#: #+-!(2詈zB[$m"}j2V(?*a[z VQ]eGu3՚(,oIAx ś<{iZd0%,y\< ,u ͉q7yšrNHT/CkB`msnc3jC&*?bn:Cb[*N!)Wr',@D .l4~qMJG9< =PA88̔[޶^&_)E,֫^FZV'zZŎQ_to ~$AUN\b=_\?^'',^ r";zB#7e͏ Pe2x2늸'=M}.lofUF̴C 2ܩL8A3COʋ~C X+U I{rc4@/Uxܩ\?aAo̳}肿 I|%mw|+)_olZg Bo֑ۛ/.Bx8ӮvѨ 1AXX|i\˅ m2AE߲'FH[Ph :T`vY>/g/u%;1@C&=j פZwaf&;cQhƠPÜlJx}벢 ?g(ݑx J27&TW"'u"c䆒ŠkKpJ /N) [mѼS8H)bж؟[_lŽ^L/ujAci[4F#Zmn UÈQ13r X=rblgрWFXb /eƲ {~6cQ4@tvB }"c֬fvD U*W56+Q -,A;{ŊZjFRS;R@?2)hf epMedJZ)J f ,NҘG,(IEwSi^̐7NODQ_s0gаBx>~w3G!(ԖreJ\y EQDC4H;¼\Z31Az2\_3νZqU)!NGr{;b]8n_@?j߷rQW}0Xͥ wm-BaDx4Z00WNuv%b^g3JUT2 ЩQ%Pa˷DAT^M7\0B?8N}z0"s4LtU*W rJ4Jk)<鯈`2ӧk X[qE̼dVs:/KU6gWڴ*Tu?sߜ#Ef#l!ȗ!`'7c&c%1!9.';Y(ћi/( ՜cuE' E\j"ڦ"G]N4Wz/O\_)K=f0C|QIo* %{՗AQS5v,%ii}-7iTS!|9Ĭђ~+{$楸OB ~[(nۘ+NwhЃ2ⓗj$eّ w6NJ=lx[ɎlճJf+ryd F0ݩ0L,Z 32b1IrY}֎wOJ*5aQ..d# סL;v,6_lξk3ZgF5Ek FΊ]DNR Xw-;\YnT8A,ŭ{͌u-Y&dk~麓 J$FtA sf0ޱ )t(@EuDQ. G>= R8˖GO̴h ;Mĉi ߨL\~EDm%MakfGh$y4SoHO΋T+x4X]:P䚗t@GAjAq[ɵ>(]$CufRT. OFpVdh Dmeo6 |Jjq"/W0,b@MAn[SU1b{@l]̌.Uѷ N?@xRiՏ3nўtQy`X+rҭop]ZSZE&>V=̮RGFCC~t #H:Ju]\n%͏45Ul=ad~u\Z57H^vZo`?gjh`sVVe4rJFkѥT1(D1HdgāiNjYyűD1gc\?],8?6~ 4wjVSg@zUxK(N]I}Ә'/ewF.wIHi}:0F55 -78O,M"?v+[gj~seKKJk ^"!_MyS5Ίq6&+{$L<'PK =ew8(&L}Gi!()^rJM&3/J]>EJΦXG,a&K0*nOZȥhҶ:Z_j gJ逸A4ZZc}/]8L >G?S2_F5wM]̘4h):tZQIphM{^CcC56[F /ݺ!CQ{o@f[;B >PxtcJ FBEziŇZlc[KU)xF]Lu3UcBw\z2ȵ^Bj$X6hme|AD2c"2FiE?mт_ ' mFG'V,72F}M 3CPO=# bϜm=؅+xƿѪ~Qw2Bk-VsRk0atWjW8Sxo3VP̗.a騘pC"L()4K;\Nv9u(4!TiΞ&\]8g$Zd> -(B7O ZO57pŃ䊥͗{ю!SlbVƢ f/~Iҿb*??I?3?y%{hXVmȩoMBv\=E3 N^Hs m-A_&z+.Y(ѧq# #4Jfپfr8G*7VT.cOMQfH!R G?vu f,k/al#XVRRm{:oFbKۜ405-LlnM.1gc6S*Xx\n m;Eɦ t>|(ĥ$23~\̄cz9 G9jȜ@:69?;=aep$>umV mS{T՜<HKބvlnoZT~=t]dձe?w梢0^ j neS%QN} eCWrC/ǁC{W={%Mull8zc˙/Y}:7MvŽ:~i}̭HUs˨X@=h}?&@hZz: 3YTzr#ƐLJX<,pÍ=,YY#n$Gɩ(  oy< ʆ*)#xF.fltgDE"8Ԓ+Gof腃+ZO-u$? l#C& i[;cDrk"MDff2~ W8bprj=/.)L 9lf"w Iz^tr¥_kdv& DE?ܩTx!ͣsdȬ|srK](Ŗ2Adt,!7Klu/Vnqgr2}[GWw !c3Fщ:ε$5^zԒMSƢ^U*(j;wlA|^ř*eeq1N$LoHQD6[>ޤoIllZ͆b|}xR{~)y [6LrKYm-/m)-иyμƹBt¦O0]B X7Ab# !O*>aU{Wo,\8qvbV?#oy6-C xu*`D("*<^ɋF=𸗽[~|Kw'zcء~5o6D9ɡRk~[^s\c;60|lH{mwZ**(gj# Yؠ(|!qBiip8Cne)n0.f'0oA܅T(8>]ȞEgTyGt@ODDz'imqLkty pa&]frf 3?Xg]5 ԎNԛ3kʺ& 1?iFЭ,~Jmou&=ڰ^~k:|9Ss8uh[1\BHݼY-ԟ~1c߷ ;wC6. g,PKyP ?QI, K@ָÃMbeHwHjف{ @H$)σf'BQҼ& VJ ۩k X 8fAeWmh("IJw"5&zcaE0rl!8Υ9>FkR"0K^SG?I?W.xH;ATEYBdːF(7:=3R|(b2ydTS 0 W DZ=xg,=>pxvk)N3"x^(V "[R nb{Bo$%grXTjkoudۀi&ȾuvNF Cڀ ߼5o#~Ɨ.!^U-?OFuaSw&>zAi3-Y u٥ ӣBg_K2+VKx_%w4$d%25\I$I$I$I$INy\g5X bvNiﱞV- я.klxx^v} 5i ݳwT!k j\UДHˡ̇ EƹLQWkϞ[㔫p\Us43?R~Y8MF%w2H2TbmHdIP<6Ohl=I u]T;x[zQ޴rz޻Ck[âWtW}\ .?$HI BJgJ L7;͍ b]A;irE7wq;rAl ʅcdyi-ƞAKJ8~{.+}Gb5dž":362Q>)MmeרZhK:RC)a‚$ȧr?Lm=[UC:w-$JI$,(Ls,k-xr5ں~75Us'Xd|ۗ [Ke^"B{7w>7$`{7c^a>o"nޮ`>+2g=MZ0xԅj (RA-Á.433!C,I;MP\2BG6vмO9I . *и/mjf_0q|hO[᜖TC )K8.Ÿx`VUKzeϹѼX3OY! l@Lo< jW'0x鿸yZf䎤Phg{EwkRI2'Jt9AVVeoVwL0=GŹq W/CD U>T*[;9 $eH/#яiTa7UK~AVd︾!4ѰmزTs(oGu:lq;׺bO 0zM@=(eb*Dga+YZ"Qꉿ$PcEP]Ïeo+ֆֵөj>I鋿yKL&_MvQ@ -eʖi6 /B#+?[^ŏX-йD{$sF  ';f1`>N'\'a`05X{O.(b؁;H-il,gԏw{zH ᙡ4|~e";-{NM;EǎI0|Q?ۭ,b htUzsy)&]k@6H4ChDÅH'jl# O83ypA{Rs[ɕJ(ZЇӭ}?u"qL} Ys_qPr@MRLqB]]'zOkb&1# ^L~vΓ T ,b@NGZj4PROHAUR4tNCSs@'3#DI\ګ(݄VMIеZ>|n3Kxl9d47RK}@1N5xDץ&!;= 9{m|+f\>P :gGJko.hga A)<4yGiB\oR K4t._Ch1G)nI/ Z}:YȡciJ#84o 7Hr3p[Yub ޢ\b`:fy;K\<_c>oJTI$*(77jva?ulY# v&1oC4}uj?SfcE-yd4asҥ[|9ͩY}7oSYd8e1 +dvu!,oDR- M.e\ƣTSC$7 T^vquRfh$H3GU&^xfڒ% Wjy|HwWxY1O0@.=bI)چM"(ȄwXOBnЍS3ޅ$,/=7=IKh, p,ӇEoLqi|s.FQNʘ<αe[`BI&=RhۃʃaL4 lZX?Jrihp>s! J&Č^_.mrJf++Fyf7eymrpgL ܺ" O2rĊԍ 5qh [l4XYqf/Vr ׯ֙ mYtо2/x҅UW5K˧Z]i${z[8Xm]G]<$݈svNdEMq+|\bY0We5n}iJ{c\ bc3 G=`s][Q)爣XbjKA-^1M9'i h !ŊX*%[VUf'PV=`{rϿ; 3zqʯ?u+zL)@q:+!⳷ɃԔv(Ĺ 9ލo1j47N%`sc1vk/a\ +1*M];Yl}Ru V!n x>N@i yioMep6ާ?eZpl#GnX渆~CM 0 ; cW|ZC*q}:Mkq9Y[ĬT8TDy> =Y\oT%scTOqgʼdoKG3L|fƙ4cwbIMe x I$ 8Z)*{Tfp:5c&@C/STM3-{=&,c=mUhձئ:+Qw暂 liaKp?xh%ϮR3{Piz\M*\ޖ&ZQI}k8U }߮Z[]SJP-Vb\bVx>۱^/#h=~IrQڂA}GaQSGL \Ayk a:qSޖS3μ= |* ls ! cdo,NnUZveq8٣$п ^|*m[ ;wyGPRō TC3P *l{ Loe[1lXw}Y$Y^C`v|D@,Y-~GexM-ux/ꊧ/orO"M%;[ŶyXqv95ȟIdp(= l 9-}Ɇë6X7>N E]٣ ` S>I; iKppɞ4Z`Iv F{ 4㘃\jPxuzṷ 6.`: 6 z~i֬C1xWD/>JexͶOW'Gdx @ezhI˂$;umJ0Q6KZ\ )Z[{LJ.=JfҥԑF%Cp9h/7J=@a3^cNZo ?%Aiϭq&Fl߶brYaaMU`$LejSD=`P-x@JId-A.zA~/&1X{ABh9P":s}\ǡ<Єs#OCy{L"G櫳Q g2,Β5 yBt!\^q"qRHr[˽PMF08<^kQ[{~悔]l,)>݃dvo#lDŻC<ƣN/fv:Gz^?4?-3wf[<`DTL*sCsAm =L W6 qQ^{~JrA.X%+>{>I2qجǔH ڮP7|ڧ0`#7(!m2\c_z{7S,- Nf"Hd2/ x݇guHĴ}ɕĵK]?ijqծ>VOvF0Ӿ1#][J`cA NbL: `!`1jaTqaLj.pvDfw&->4rJQ;}o5-OyZKE  0PI }4Ày1n & }$ s=B/bbz`^~^͆xjm"Wu\k|ǷH9]sBJs?mʅ IIO+};b<aewR9xB{#1l>mG=rQPKJ"/c%]]HdAЀSeȍdzaFُ,jF1g/okDS\ƢnjS $x,fÄ-ی 3 TMNPj ۍqÎ9dع5j uVĩ*7͓%QǴ{T|*?KI:7o=OxGeUY|IXEf/hq~ܵ5>j 4ͫU4y_4 m1@_Gʢ݈ B-c =N 5O%e#Yr\^E~"3oXFؿU TOb^`*Dma$߯w$ ;I%F_[f&o};elJJm>PsCxi3e hs`,k~u*Z*ORLuɠ;ق/=ox~:&su*WCWKbq 7@~YTSY_`[,/ߞJ$xEUodhOiOҾkSl&v- 1.ZOpyM II_g}̔=%tvI[U+c`2f35~DhoET}*{PΗ_&͜qrTr/Ң}^l\/L!&BwV"lxg3qB (cY'=Ӈ :r*=o?2c&A,c {6\QbZUY&HFM< a~ [$dLvg8qow%23XԌ{6=@ aӱe7XW 0m4$jo 0ڀC欄QLljuz/ޞ⛠pv.aIb / fU Mp6v}bE(C0Eq1q~0.ivuϛրkǡ ly)vYV.zrޖzY~ޡ7|_oDã_W {B6S^Q}r!aΡC/]$,e En A &\: ? ăl0NIM "NrX!%@4r+ccT{~W|#Vn#>nu цۙB4Ivp!?w"fQ ee˜zMS_V"cOr.e!! Io:6[@xJ O%!Vq! mTy,~vfNcN{@OcJsyLS E*z_R ̷C` H|ZO/p8aθVcFR#{"*O1Omr-ݗ 'xY&́icg\,;~!| B;iWy[d{#Qn Q5CL>H5qv&d>OJt*h&7%O.MAJ$V0qSѧ+zTO N,_72+r;?83kib\ z1G HeqS!Ȼew=h;VM/?kp@ Pa&qs'<^F()tgHHwb?K,[MN(wt,./:E-a֐ߦA@Ro): û00cJd_$.Qf}FV9.6xIt2 ^Z"_Eή Crv AtS(QS@FT8g<̣+9KPjyz"3>R ,_bM4:)4 딺)7QG+95V{2}ޖx0p4H0{3+UזY:)%.G:&%%+z8 -qs;Մ%ٺH_ldL+~a5afѿe؉ܧwb$2eji7AI{{j=odo&IԽ_(ClWt&|,.vd QA&٪egeXLp]1忇e\Rl R \I*e^3yη.F6i2AF߱a",CwZQ20BZ#2ZRVBh[vHngrdQ7R&6?qn{iGxl tގ?Dyys2vJǏۛAMAjیqbZjp_ldFUU: D~\-bu.b7v̏ܒ +93Ԅv\MuqŰE|市`S鳃ƶ@@Mz[lYM1Q1Xϯ 5blGpLD i(o !{9ed |dyϳ\&.ݽZx`2ƵjaPW 5h p77^E<Y ]u]{t.d`Nm_b3r"I/6xoUr`JG6:٭]U{YꦜB^i&_\aib-#NaFLR OC%c'kbY:Tu*u (4ɶ#\l ̝K[+) Քp7+K]v$/lSa BekN3y ~d"Ovh] z7*ٜE?ͫ`xr.a uzB8r.55s8MT>TԂ04$֩78GɩGsWkLٿDa-Lp,nan 6%~dے5 -Vhs{;z%:̓"2B2U%%5‹G ISPQ:yb )4 ^+# ULU+I32v7 L2YEWMq1D8Z/='&FpRe!95fbyěN=ݧ#D풼I~]N ?{i(c\Oz8}1rhE;'?[]"<-*8 #81X׋|~ЩՐ61rԦ/u/z*Z}yw8#ZQJm$ؗaBbԕp7/o>(x&,`{n)pDJqTpp1]XӁ" 9'QU{ "ivi)O,s.~^LAIwvd6߅5ar4.`B2ˣ:?w/kIOQwݐ.wW (Xƨ6`zg0|Q8J; _xxAᘰy+"JfUAOy,~ 9ĉV`2pzR5sw?ь%%s:̞pnf` ~nF:ghz M"ؤg &[uK |xۥj6LؤR~ >fԕ40Ly=kkzo9%k2^+Hy#~ ŀv=λyx}k<recCc)F(Zܽ%j2V\Cf0<T_ &*^ >nēűMVmIzX rxndTVB M5(t# [{i6]Fqל;۴\Gf.eXaCGJ瓅/smP3cdTBP‡.O]t6q J< zh)jBR6 NA/b$sq|O>nNAQ./jW%"|N7.>vkb's%B>L6Uyq\+`I "ػM7ߚŘr=w5fYG\clCCDG ^X=ȇua''<.KeBfN{!Q*'̕z"FW[аwKStK+|@qsU8tTbnќ13_3jQ%}M/@e L7f;4Ak~,|9"[9$+'8ĕB{ _iP |nȏbHn:uL\!]ۧ8V[)'ـ`śPGlS)mtr!55Lp!!8o&!4L@\ՙxT Q AȨWAXxuX*XBz^Tvr$fNd g@`gCvG^McFеj1i{ >[ij.^۠ Ū0 =TÛCZ}O;xjxX&%>oUG =M׵zD)V7qsݥ`1wtגCz?%-@3f7y0"v} \G`$0>Ҥ) oM_qؾ}m$g|P℠DY/]N$OSL*>++2T\3 1%O4i{-SE){Rb!"']Cдr`QI{Pt2gCF)]،(]9Ģr]mLew;Վ3. y`m{ݨ_ȼ;TepV!'HcNL a"? ٱG{kɹߦb",c-'5CIt 6H%me;p&XݛKmI,Aѳq(*U-fjRC.6UT*,qOxż{ O#EӔ-4Te-YG4Q U }[Kuճ%r1*jC@', c 1I \u9! -^lWl*$F;K]?Ց}H-?-[<$ -NPA " S$m˝ "ȕAb]<{s@BE_?gH̥7' ?~HŠ)B 4{Ķ`kx&őȚY_z]ъBt6؍ء9 vOv娲mNDRߛx$`S4l?+_ݗ\!q's!SS'|06ZH(y)2?2ÅXE LTS܍1!Wpq9,^k$XŇc"aVd`L~L##1ov Me-m7)aߝCalb@۰\$+g&rb*vU,k.1JApLc8C+cMT_ܯj/2{al?yiL13Nu(PU~7~K hqc/ U, S 6y?5mPboCDYŰoy7 IGL*w!uťrflth^^Zrqn+Tt6״#-RഺqX9{xUe;D.*&+岩GJbsB\%.7lKF-]|eЄkYz\L1OvX=ּyFuQzHImk$QۖS )WF*M/G_XhhP7H/&z5Ƭ#~s~ǧ>)^'qdR^gYt dUdžd@ȷ*9ogزA^2?s=D?{ 4<nOz͊aQקd_ Ùzl.t})%΁olL`qhNL*6o1o0QzR~ފqzP~ޞ?o@Da@ݬ?yQ~2]ҥ l?'z T/ےx^mҹO&% O MEȰ/zrW%Ѻ~C̖eF;]zp$VD8u 엮2p&}ºŧje`8$m_Q[,#YWkL䜪6(j=#~L^x2CycktY#sZE ¾Tm:\xGRi`Z*ʟmSFαcj|$`W = msn4ؔ4}v;l+Yw$S;2DL e+nK#TzRo|jK l* n)%XEG L%x !]ZɷwA* )Ʊp5yLirsp [*f8&k Ơ2 Gd9$/l}4hv{_`FJqqkgxb @MbGcX`fO d/'.an0q .[ ;DQMAv4xnG?/e.+Op~[K.<V&s%ft*ZZw \Mf P^A/}sN*'fmzJ)QLZh{!ڻ7);ff$sϊ\xIРNq #:C۞i}Ug S++o[3e3N)وOHʘ!Rtȋ vYG|:xc"fM> ,ϒ&߹ '[[ Geb=XQ[d_K-\KNHJv~&Ium^Q}i3~1)qZL-gS}[g`*VAr c1wRq7peOOl}tpb ˼iDzV<218q]J=mߚNeH =WAgi?qYڳE ˎ6Ԩ[R`0) (u 22 9L'=i9=gM 0I߹~LJrt:DKl@ɆBf2I:xʱ!!5hH+hzX-,p zI ONp U_o.~ Au5Ρ}AIdA8ZWF0kCɊpTާ d1ʓM~{Dס`OȊ_Qڶ8ڪA`WL`fQICyw⻗`gvOk]hn ٛ޻@H|NN$A(] SS3^4 kTx {(<5 3n%*~s>+sOCG<~s:e4z ϴ6 s/D< Ah vl> ZhE2 ؗ+EMDfHi&?bI<֖^b/ E 4Dl=K`%FQK)ҾeÇ̈sݥ_#T2!BVԓ!HV̵1BN`kuz[|-Wq| D7S^$4{&TTt-2{ux }3txθLBDwRC:}xFۉF [y5{GfՑLbv:V"k2r7^}>D|}?iǡ C($mۯCCwUX1S$5V=l-FsQ <ȡ!,ǵ:y5y9ź U{tܯsr͂&p6Yd]mJ6B}BUC|DRnLDZqQUQ$Θ3ٽUٳ*\w-x %xNB N#^ܨgj/QF,ֈFU(//tO[$v-zMI޿%홁6ᵛ"Oj019d' }Ւ_)ꥯUܜ3 ;vnHM/Tp, n2=SU(|(Reu^xlvxF)4hvDO.LQ9Zs-I])-)l-KAdxKy=*&#,0,})37F &Oa>fqgx:緢 AݖLr!2k^ ۆFUpm"H>bjgIf{m9j%:hn|q+1+}-0JL|D[] e j9'jee "\ʣH׎sAc] ź9m Vmd[G## gEq,iM9CnrL^2I/f+̘k@_mݷз+כ]RJawb'$M KVJ =~ͧtYFJˆZX wfN{!Q*'>Z-tTew k>y4qڙ=au?pQ,2dXז:x!TK|0΄_ϯyxTmľa.jzS8罢a<̶Z!>Mgz]^Pz{yl }-ʼt7ޱǚ$-δ߹Zt糉 D㏕9W_@̦ y֚B^2d80u!C>v,Z?˨kr0 ׀> ]i C ;?aƛ>jc/d#bܾ0PA!9;̜'UwOWj|S,U cuҦ>$͢M?QϩU^O7tJGOQHY@^@}sȮGEܤ1̣'US&PdreøQC#'qNߏD.2MJPD0rV>ZoXYpΎ bi_Ʀm^jX۔ArOѻ')+q;lsP*]<ּE_ygcĝ_,䘣w Mށ}b!<8I*C8TUߔA͆B /& !<]8WqbE< c,XB[}לּ=5-J_}s?e1Նi@ ըA{JhPe&IV,˴mǠrɅkp(,MLGSJZQLbR3&ոu.Qq5o9@ߜ1 Iea8%dǭē+>LҞj;ib_ &-ɃAD~?p6S҉lLX=Je>$)fh Bwy{Ilʍ;ﺴǰ~ϲI*bxV௎E{dx2j"lB_H`T"=G˫;[8Ev,?.ᘅVov)>5:0c3NAHC_bԡV\_c6:Dӱ<:;| b6\3*Y҅UŽŵ1%冀 %S8^ʹLzQGu. 3V}rţ#`yj5+Cu^\煐\(lI!&q9Ry9~Du6GІ#zTx;ѻ7Xޅs2\va%|PMCM8LߋNJETK}[Y|‰)^?>ϘcĠ}Diu0 >e{+-**U$Ĵ~!FLJ[>O"AE{>ude<ۛL=2O"]""[e"!ʬ5Ĉ:!!WQWMxS2{ۥaؾɚ,nRCWďsKs6JoW-$6 ';4zɩ5 1Vu޲dRu';NaisXy!rGSKAÁcWl9UlD*+>ޔX)!9QRc0 UA q Z>7 +L*]jFgZwV2 ^7]3]6XɕTx䭋0]،2P43]2K9l)-T͓x+~E 2F<\|:c7p&hxɲkcFY|_ªs_ߕ7WL._  E|.J'w?3 ́^C'# .ͮ,_1S-%PJ•T=;ArRGTL Gq`%Df]BJz:9;1^H31oV°̗p/R} `ŴZ-b:^-rGL9ruX9I3vdd2`6YF,~9VJ H ǩ7oO_OQj,xXdGA$=ɪ&W.C}K/dw|k ŧDD $zOUmhGTH8 sd(v)-5_|+D1jf<(p3bK'cdkP5?ynJ =_o9FgvycY"h6iP%Ծ#fR!M, r#v wmji+)I11 򨾝֒/^*=칤PWR~=ZVLj3"\ٶ+c ͲO^ѐ^(s[yS@cD'#I?v:2T苋 @C{tz،Xk( ̃b'I4?Eٔc'OG~]ޏSc{,kTwLgl.WE}wv<%mk?Ud߬\͏z:{*{*  TpPtviSE&ϲ7k7R/}۲չ羭1vZ>M&G?Wr7t>Ns_۵߷C?n5V}ULmUn_>~kϨϨnh/҈pF=iMRR): "sri-{B 'y z"bfkS),-UsuWSc/RQ] {.o ʭ+|O!M<>.u~}S8Q(=.KC)[}L{)n<6RKdgGp%0pJFɪҲ'=+i_Z !cmGe' kmk$@yE|*' >.HRRwt%m׃}5U1SK~n,ξg$0 $h]&ŷp?P&>d\ljFuOO⠃ԦR> qA೺l |Dޫ;܍ DKVA m!6~\u$ǣ-/0)Rsc^938BP/n/*_Vʼm὏{$:6prEfYL啘+W?p9uf|WEmSefɽ-Y[T&\܂ Y&[KuNa,}6ce䩺=a[Ֆ\Vɤ:VZ]mWY\g,Je6bs:~ jŝ0sdRieO. #Tug&^ g^B~Lpj8 uяz?ў9B1M ̗tߍڎ"ѡ;-q͡TN{|EBoF6ҚQp͒QGBG-~s\{5%H(kϗ5X)0 H xruOtUΎ*$GA-$Np]!4lmE0=JoVr5Շ-- ȕRjP uɥc;2]gzT{֦ܥ&qG~%e.؎ ,F #.e`BaM1ӫsUVj+ o!h)ݠz Lb0bbwo<#dKv mfw%?_gх <[L5#(t={>ӑg3NxG,?dB Ki9w S-K~&?Q`SP2}V5,tH&^pHOÊH=ÊH H6 -sa|a Uǵp5`oF) V$p!Th!xxi 2OiVyG׫8lnaq.p aWEHc4W>9X `LѤUE2-|d,?YY꿥- >$>ey\Љ:/\A\-OSvڃ*h.PWBQ^B{<^^^^]F>7~# )b {D1g8Z<0 j_ikSĉE?Oτ //t,zuM݈IquGض긂rF@wZdnMbG׉vK$FjQvC/`SNU1͙פNSq(cY݄4.r&ZDcH pJ7 K[ L;ioЊGIhf;Bo*[>㷹(;ܮ=a? wz-Im{;4ȃ+k5X?'j/Dȷd&n茫+ }{,Pg.F4~?~7U^ansi}hu %}̝umlKȦLWWKxGœE+ޖ̉c2?-i%wquy yM,@A26 EWDp.e)L<9vJ/ۮS2qqCcQh-UEM -o3OqA ϫmEOg) )B5y {3o@Õ؇.wx5O6L5'\+yWJZ/}4H$Chp'fA@h 5+pTzB~n|7s4#̾ 郬wKYyyyyyyyyyzD#X`:#~7EhSȒ*ʽl%|`ZTٰ#zU4%0G*_=$'UH,@$kSa=~ RC\tw?B I챵'\;"|sp4Ej]6ppWH/Ce>d`.۹ԧe&\0'H+̈W1?kð0uYP*4)&l⷗V][Kium.մ,Zwɠs7l>IY>/Y}qI6${n砕mHA\gFNHϔU"AOЪM"}iBc-;?V8ap_@w m 8%Ip>,AsNgº -`@y9{@lrE M?U̮_צ-̲yBRXUK(@`uYQj$Ŭۆ2ȟ5& TJY|&rb7 (M{ZPc\(۠Gu}[p; Gym%q|ZcGx1d-5󈨯{,RvxX=6薹D䅕u K/qc9J9qvC# F 4#|TP=Alūb.[?Y\2uLoKMP.4k]J.YY=OƦycRBJDe2ӓ ; s9 TN:HU:r$G$yȅg~GƉ8ֲ9ycSa,ZK6ًGy3Ӱ;Qf''ߥcd' (i_Cӷ6l yi^?&Ÿiq+jEo~k1gO~9TčvjYTu wz-`=F,fO/jrtO-|NH(B(z>C"_eQK^k+ oDhVf wQkN@:4UԌZRNKq\-#f}<evVp++yv_lJj[1Vj{m$i)R8-Ȩb8,H,ecPV:(>>Mlm^"t ,(Ckr(CIt?ȫ"DTϿk 7~6xtx=/6Z7>IMkgO>af]' ,zE\'~B@ ]Z (cymt+7M&-ڈZ_O }KزK-*0LfͨMO(ۓku>C,̚rhw-_p# b؟4v0G"߇ĐT-m QႵS0bHICuH;( E#7|:7U!1$:v612S̹knȻ}t+H}D/_0ݯۮ~F_2.;$EyS pM”e;4m![ӄl?_]in)X648N6l>fW!ы}i*܅q)ԅnƇ̂TMnEED:qVs3ȴ+m,s8L$Ai8sڌY/_/C[1rwjC#Mta̗!-wMAT(]0u|r}03rלd 1j4W' oW.4=s A#~njqS%z O[@E#sz-LO kGCgfa]95/:ATSp]>导2j^5JRQ aEK'r$ԾNvUS 4J7Tөn^`)IiNpWkxG!Ib$ϋ ڨJ>[(zZ[n"tjыkd q8DhW赗'Wʣm6sGMd}7/RDz:cIALɚF5.Z2F i.*_َGlZK]Y绵ڈ١ $4."̫zT`0[*Ӛ͟#ߌsW0bA;pHV3֍BJ@!L'-օu|(脅˦XOL0u$틁I|Ƶ30d 'dw0h")1-̢#^d< w&z|vkw_G9"6x$BS1]<шdٱ j![oi}ۿJ¡_R(!|fe{xu<! 7Nm4#S$M C߻H ye0,<GDk2 tSU<"}=1G}%gW.!?8D%0%}d4e .JF#`t2M/b|cTH  t^O|ק}7k4+7kDtw+LG<perdPz1 .5BW?r?+N αcj=@A'@DӐGkymi'd p'0#I5aeMP N1٘DP|jٛ8%6:a}DzӠHU`|N2a]8iiKZmUs'+2S[,8+3>V9]MF0Xz4$^&i-5U3Pfb$>UCv8SI#%^61HK1OrBm9B&)fLk DGQT$ęκǤ4ܾ߳Gv/èy :# A&(r{`n?[TLF`!ڞx<<߲U  J55f}@،4mQŒ%5VsdS к%}׺Oo b$#վވ#:8zN7IL~V8S1RU| e,d.*/3ā*1O` H \IdEuԜ!gγ& t ̍eyp[qE0oq;{3󩸲l: apSD:@!Hnx,$*?ZfJ :_~ؙ&/ޏШ49:bhMG01Q3 NfI)xTyj' XјLkGmTS^^饘 />h=8&b-գ\\8z0U99)E% MJ[,*YGJ H^-RIH!0R,X9ʖaܰ`ȅO%Фs0{YM,I RFm3+Ui[GIrAY$ څ@ ՖĪp, TW2m($Ga n% eoؔv>ԶLF{nkK-}W{A䞩nO.%m k'逺^hVpO2nxʏP&)-F,^jHF h # U2FID.=XQ濹)L+rb*XVy;&g2g°8q&p:뭝zqUtu =xwy,6Qx%Ъ !~'J?ygJyj%S#9(G|4a%Y/%"K c}0";TxױAƥDfU jgÜȡR͛AUoVgn>d 5ϒs}, v@>aol_ՠ 1#;yImtY7LpVȏNÔ v'3FC.ur~ @щaQsXcɰ 7*zڻQQ0Vn ߂p&#=ޤ&"lN8Hob"@,祏V? (Rp*BEf&~-߰)˥1ԫ%8HrV +t 8cBf5JpS)kV^-"/#O`4BwtЗ_cT{6(tp(Ci*{+KqФK֕mZ#PN2O:9$џ2Ϋ9R{P@l'N$Zn Ot Jl$8>EB0gf(%{PfC T}Ӕo+`&=0JWA?RDk0i?tWju }bZjnU8ܻaˊG*  !Jj!F(q<ďbncyMx! wA RtӔH,&}?iȸ*>!7\e|sET0\QWPo4H_Ja4 (kS2A.I{Qa(R/h6S]1d*!zQ{ti[A"7' Рirߍ!9{& odnW}bk1Ῐ3XS '~st_}v@3Vx# ^*džW>,k 2w'}Mi҃tomX:{H_C"6LȜR;y%cS=IȠ(JipwmH0[GN],3ruW1!BfP*LZT,:zI7n3`l4"D8Y|,oĶڝ] dôx)$a+l Pi&$-nԋNM~h6϶*۟2񵐌O Awf&(~,"˝I&'iR0R(:]xPNm,H0D{+7FDZ+On s`6U=_3y$צ/v! ؛r\@fr74O~9'7 ["ԁ$F A:jǖ#`mhW9.<*jpKkh5v[ +C78 LXz?[IM>s9a w&rwP7{8,Z;"K|6 ,hХ,̗#8 11D W|(#a6=]YJd\y-K|O>'VȕBFG[RwxoZ8 n_)抵ḌJ$rY^2쵲}s/CB!a3 gJϳ7 ?rzïݫ4,#6IYV'lЉC"8&lӇ ۆZ =--vxحCAXSmށ[S`ZX?^32+Iϯc5ZÃ"D#Ɯ-}8WAhw0JZڴ'6-c؂il_d4p, S R[1||ZC@Wढ??@Q!z=ܷO!VSz 7+ S$ 2Js=@2+o r ,[m8 aP&XoW6D%O9L&*ұLa < _еW:kbjL5`\a4IZ||;ͮ4{Qc!3r0C!6{ 5'DFעҩޜoIS/tn7`/wS2:y5Ԙ0cq=1 ['u | (~yyhx޳.=Y:D3P,[ `YwuϽt60~d+G Ap&!Zaf21I& 5*cu;ɦO9lUdtrK(P.2)q ` %*E0sAA]Bp+a!H.ަ./԰^Rzlp!4e (+?U6)Y؉7w)OW"[BW6e%z΃sQ #;a9eSK]׾h)2Db*hH<\#]>d )`)(;Xv*]Ȳ'1.|7c> S)I2jo][783t B0[8?*YIRCi<#HF|niq%5"ˌt$"J]"Elem\ * iMd`/Ճ`PzrtOeiJU D9U~t}eDž"^/ 7TԸa{T'FxAӺQ2Ӌϝ!(9`*@'1{qL0kM_,% ,E ^EU( 7>D]zc/d 8'׉= Y>xū3bh<W@G 9iaX_T&GL.1 Y@ǒ0aKUY\)^CA=c"#xC1կ."λ#~pMn5 ({WףU/UH+Uc1&Hs0t LHf@?dy,md:Iz1JEsCCEJ>KD2c(EjSچ༔7O8@M4@L%)=GAWiFڭSl2QKt;^ JzE#g$taJÀ= Acxt"EU'F$ -sEVEؗr'/[)~lv>ވI\tlU@(Z#3a%W^1};|ERT{Jv;W+ak=ʙKJpMieN[LUw!O++Ӳ!D9j>u,e5ۋk}%fXZ'I&ԗ߹n;\/ zn{Ei3|/׎dA K-:DA ]+)'@hKFB_!S⁹33l'4&r]DH볦ўa;gL<}/ƩL#\  "u] zG$АOH,{ˋ)/u2u x9g^[Fu竁􍏛ѷ 9Vsk*ʳoyjvJ%/D$fOe!^IYe?)`!?c{/\uDnoq 1i{7)_L (Yܥ)_? ?x!X9HϾ}PS5ϭZ[S,MδU6G oCGcIUء 1#^$WN:H+Yp:XejX s>.lkiv2akk7~eFx[6>*;h [5J1&fKDPotEϡAڟGK}|=g nuNoeÊJRf!GEd[BPQT,F[Wk m2<ǩ +,]TKTcEp#^h+j|*=PBRƹ=Ɗ !ɭ$۲EeD]"זA@k>dc;3_ =_]:'ai-#Ěu咀 P_2IO8iIRYGԔVKx.gU)cP;BXn6]rk<$v"J/]R~Kzg X4ֻGxLHto1S]"< ESe|Hh]]r {D$MX֑Y1Hz'&n#{-,NV(^;cŬ"=S޽Cr-E{YRg$DMruNJ]o-Ч|}!/8؝;S˶x/-os%PQnQ3͚)rގ;uHw€*$XA+%4-)#M*bm"ܢ ߨ4'TC'/ճyZFYf0-U=nVWyYwSˡÈ%|:s!9(78|S]+4GqߺRA(OtHx 򗤫fMu ΎOV3I-;6j%:nz'瀂{N-vS/? #64$$ASIi1O%CKc,óplibl_%//cHpT-j3PhIxMK+GK%L-ӲK- EЪ\,kkej#'$TKO2 %*RM\HCy~$%j! ˆ)L=:ޒ42d8˅#VIDȶZX^GOI+~Ir86]va!VYCgGiu^G/lK6)A(}Q΄cWH3$îŕpb/=Bq/#<2/;ϡDCZ=tуpWb0*Y}Vg}UvOӿЗgvkWv{tmW_vnۭ쾭ξnRY{ۡ[/W/T g۶[?۬dVw7d䣑F׆:׬r郎Lp.K22ϕ)YOIlұ邁 ,*z*@w[h.,6Pa8ATJez r(PB)Iui340+=dF/ixe[CUY9$gC)޽d4F BW3j +wd &vD! zzyR1HF GE 怺<>5/&ԣ ƨ&& eRy`QajÎ{wY D| C}r nSߕj0 Gosj MIv=eW_eíi|(`(aҿxA!#^T؅^ IAJd`qqRh? 0,j tG4[u.`(@EHzFC!t(zfp1ִAi$0Z#q{{^o MjŊ">:. _{J ޼c LsE 2tͺ-O /MW'9ӸLAw_ZcL*-z*УmW04rK>Qc,i*Z0\?]D=Yr*cK-~F5 ަ}AlC_R H"ǏV({r{ܗPLu0yh(qƪjg,lG!'(&3!U3ދ[`;b_!l czp>N%PQNH_Xh5_w09;##1fZƦJf^M^_[62'U 01,a4ba^kL4=0%C2CWi7*1}SktfP McE.y-[[7J_ybj[& A=dr0( yaYąek#VL]KO5='gҶk5k(Ĥm6`lɹwyDKݍrJ9&a,`vTW43zIAQ9cU?ux(l9%Љ J35I@=娫f+J-4=dxGzBf:snr:w9C$W?Vwq2$~€+~M-3Ve3rC B'- GbYSdpo(ZG#r4TV# N˯BbKRn" E%c/}gWg?a(%T?|'`}gM^J[ |g!m'{;Z3-^P)xӇԴTTb$/X|*A췭{:.ﯫ ?~{҆IGG`z$L(E///0bkϕ'pCrc&0ʈ/4C>1:[g3O > 6^Oww,SS'^S+OW~mW n3}XS ð X(:>tL ҂G/6q-Q DԢ=cCf&/ngMjExw=s9.? bL * Dl҄~R{%NJ*ݮm",S|1 ;Alfq2mAiN RC"]}4E.5$9 -P{w/ Wi,ZqEھ,`@ Upgtc$oP\1N+.\:Nt2~-̑d܎R>Sr8^gfHZ-տ{10gP'qAhaEtM>˞~ugq3 sT pcUh{$UWgʟ3>)bcDe!y }"q·gYdW[q;E z\q)52S&ЕCSjA]t3hˤb6.f7{< dFyV .|Tm-1rys)ރ9N$&EȞQFKBm];n/T:j*7ViIp $ >\G-OOE,Їi*tx`!0`_#1׸F*X l}\sLjփEU_i]-̱^!BaǾM 9Im|j7  &nA5e2'xOf-E#ͳ֋:xTWߌoA܋rn[ dy$mpbpK%Y{1@Y$%FY4NeA09 g o_2#/;~*xr"*4hOs4@-0v3 L ,wG \wP1~sriՅ1=8'ӧG[2m}vSf6Ewu[t{2'P* 5ƅS.Sv^GxtF^]|^Pt Pfdڽ,Ux ȃ{pTT-G~@C#>Nv ,qաڣ aN«Y1ʸcKe"$աpmyԂGCPc6hZYIYYnhrBՠ|P}D4Y$SF'b`@}I^~. /"dM22U+ V0=9;($fLh4^sV9e%|0}/<#U,'O䩭*O,?4n+ MN" H 9*x̂a? |ujZ\{o'nS1QcG9n°W$jqM .)_^=>UtkO8V$t?1WEF$ |vs: 94ERmi-#5zBq&"K}76\a| :Ȫ+ar(PU5渪;k؈Tc(<\s]]Եk~9eԨUb̆h^&@Eū/|Iex|! 0!j=ɴc#Tđ/Л$Z ؠ쩀tҘhUo?p'$.ZSy1z?B͵LQЃKF.Rc޾jB%*h'FƅM dfC)O4B]`J.'ِ$}TXPjV@&6ʶVUHX:*dl?lGL %I~ȎMQ61Ƅ֘q k`Zb03pi)MnK%B)>9B%.F>iѢPݖscK爵n:X8;g[`ͦt1Pϝ0=2WuA҉\a5Jr{EW$J[(3b"߳5*] hK*P">;C0gz ;/D:,7"R%o¬aE8o]?ĴWx >2:Tڅ7 z')UMO/ɓr>$g"D^/sģ ) hpl|i!+y GsK!: 1 "8҈B cY]D.6QzxeJ}K H&~OoVmzn[]Ӹt7%wl(Urkǥgx{X:"{nƿ@&rxhyj]qKpm-&5=lz-VV[֟_PP ȨJK̾*ˍ)0A#!eK=V_}uWnlɘšIuUYp6hLTb込VꃉTB7tWpvlu#@xLT%%⋖E'm8tFݑϑ{w^oo֐9[$aú[u?NsC(|7%T3) B\uER(|<ȋ=6#܅Nc ZpXmˁ,$;U׈ -߷-m?) ־"\+Ikf:R-E; i"fG>BO J&]d>@Aq\uD~5 س`%]ZquG6 s';Ө W\fHfejP^UZX"Aϵg&nlų+@J?g|{K8J?yW.: _$%nB^ qtA+B7!0!$pT*G|,@k&LAӝ`pXB9ؚ2hFejpڔZZx`}@oeӑ1"2`#=q||G7R*j1ℱQ|1X˜P3n",?}̰p0.c7fewkWM奃X~ju(5)0 oyWhBBi}u~-i[:SԎ"tG:ij [?JFpD8C8ņOA^TEߗax |[O)yO ]){B^,!<]H>X0uE }ZdR9ӫFLS&#S&}D}ax3$$ăάl;gPDFϵ V[Rw١Ǘr-9͋p |CjBԋ"6fz oa>ö́ٞ@ !X-[d(O0C栦}@AOw# V7UNo@*70{Ãf S9AFYuȡQU[OEfadNSD`kMFL/hti#$1d=<-NjSLPs2?qkCv!OFڷDWqUL^s+ZE\:=L/RP+䢗Td1@hgћ49QM{ҷ!=uBߝbzw$"Ө qcvYX:^ࡈ~Bt' rDmr]L)6r;KwSn 8ſAƅ}utn쑆Ǔ{ `~WOBF Tn21 3 %ٰ+5 t,1[(xV6sFw<ᢳBvk#hg|+Ľ;r-l$90I!ڶn{K<^~DATKᶾu},VN.kT([3fLAkEfgLK,̖W_Z jr_xy*B;TpqYC>ZFh^o+GNS‰>HXhHąlz?$~,~q9!xU~jA0_.t#m]ͷ`["\1{+;MuEd'Yms^Ab s(5fС4@Bb˦'@ y{-n|6fէlAk9X]0!=nء[ tSQO48䙛9D  ]L5/f,2BUVhNSރ *־V l&U8I.G %-d*=4֡1G.C.ÙHsz ZSo#bwr7nΫ4\܋MZ.\/<ɶ\& Gj`%K" f0 my##f◞@5{0N.g~Q-TM,ؽgkaZînGD"ZN xLiBN'ˆ8;L\cwCc}9J[g}zwt*\pi+ ZBӁ $I'R瀗֪ xW $*L6s}g&N`r<{t RWHqzRA @+2||ѢQka-/')>O+Vzduwez-&V{ac9zy3V3OKcma/sI4SRXNb((gdI >4Ov˙1j`_9 {g#A"oIx{1)#[>`⼇gImKiϞWU5Ljl_,kX.pn)pLsZ;>", .ݩ'|9 'hE#r?G3!)-SR1 95Ǫ dP ^9 ]B r^XIfI;Ugpgld2ȥBΊN].VtxYʹX⏺y//z9 yke( =kY\rG7Xfw‘>K}@moz2|~{Taяp_KҴg C@? ko#f/UZ~겙 4r8VMEhq$F@7⁲U|ʈ+2&~Q=vQs_ / qm\~_Į0¯"lyC6& ո8'1(sr4 ٤ ؛¡QB܁/ʦ;'j}JAhAsٙ<ͬ4)ݚ+y`HmXjVH otGk32Uk,Ά,1# -/GaQd2{}I%BWqׇGAUVez>~5H!r::ݷgu2itd*Ei,"PK]|Z~n]i<N?LvqD1,3YRk);'A'Ѹ̶proGX( z5Mi# i5Kr*H¼y85tsԪ-xHNkFxw /M' S+^Uy-nB1>,uZw7ok*IRL2?[wT?C [/A~/dcY Dt{{${v8^-+aD{*к&li71 qHg།5kJP}5{zDfs iٓC[Yw&Q\ D{V1ѭ?% '/[1*Z*_߱8i1tT5InC JyDH)UO[ ^ۭ֯B2Fcr䯓Z% SxSK2VD6t̖]*wAJh2 @g L3rrco;,5dZw!HM^:"$[ (6? BƝlRcM[S{-络I`cB<8a)ú@2҈+^WA*X/;6թRo!Nq[=k%D׽Yڃ ]2N{D`WBՃ3;uFYpCw|1F$[1 9i%Lde{YqMD7K zތ<{tZ~dTkZwru.-/e5Qyr0 x2݃ FY|\~3RZxtSJ_U+[!qxDrZ_q\Qm-#/py[6I1ƢL7,'zye2H6(_?նQtدfl ( ꌍa (|/)0m@ ^v(Gk d=ew΄jՐaOwNr'x=^8?YT,-]:OC "Q(^HûYxh￾Axk?эGkVv;{Vs7];|>X[qkiIu:QmELͰ 9ӭ`Vl..*5DK*4DRu<|.C`yxJ. +~̺h/b g<+yqFnę5d{(AF'2,ENSS(! 6*ܮ0fջ*={{S% Y+s+A*&LmiY%!p}0p@x㬧ޜ2E5J(FݐWPIFlY¤2,C-⃿U k#p&0s ͜hgJ_Bܕ*._E:]lO 6vZ{غteAAL ۻzA㊇.;L){֎?&1hi֗crzM>rI#TR?))+31qq'lbp֥&;Ϊ@nF.b`9uR]$N.we3Ǣ/O3H`\,L=VIktb/ 9O\ ̼ވ/r=, }LxE,f|&KhH!MdרRqHn | `ӊ/ Evox} 2IRtMUB7٦GyjU[FYgSF)4}=ʇsz@3^^ba+#AZ^%=o >ALu+֔ i $Ϟ լ9Eg.[\~DuMQˮ2-2Fp(ŲU sd/Cop\غ F4X%,/C_:ƵKXH߸rG @F427d=$bwy=rմN!fu^o ' WsUA xCxG ȉ΃sQ si Yb^OF(e"`!BYR@"[roBI\'3Sy@>^LM'==ʼ75+<(^\!ݶOROHNWd!0rˁvgrLf^tu`2(fQSc?!\Q'e\" _PЋ˄wH"|w+tB| Kڐ44z?Tԥg~<iZUAg C̃vX? d>|$ f|nicţ3kW?b qmSPNϩtlvsD\G+t[J4 OšY.G_2j2~B̿3MILQY9ItހrQ2c=^?]pGEBꘇΆU؀Ϭ<z)SJ CU=k0Mc񂯲֓ =xN*ф2ʒSj%a=tZFZÆ :-S2,)W" ruu)PDTlj=QG4U]kf R9UNC+14B4YG,fbJL"]jJ $#!Rx bӜSuGy.%tPS ;Y_78k$ :qլ6'2CW`I;ȀDm:YiFHY50c=eƦ}U L>|{%@θӷiH#+^%R lquBRsK !a8}+5YI!./o/\xUORra_~EYʶo3FNc#V nZq ~6.tA-J.` ~Io=BKlo@@B#>xզ&gާPGy4W2#_{ !МLWK:daES^(1*@GȯGjPVHk݆[-L >@SX:1KbA@gb&6t:-F_HF(l3bGWlax |Tx$'[G~Ru\9C@>$˅j@v<ͻM/o OFIp;Gg<܏ fFeΊy;D]}g9:w)>.&6N@aDV01߽ .ҩ i"f} v6C@by1*H_ e8(%,u{EsqƙFm3QI`+H0R($}ISaoAJ$`zk4ὂI.lZoXkK;n-Jvۗ; IK!KESf@P޼W%δtD4{ nqmol8k~jwעcI}I6Nd@yztb}VY| |d,:-kV# :-kXz_~+p04oW-GkW?OEbALfpqȔH1O//(:<U!Ty. B_8$v>cp|EIA+ډbwM.= X)5/-ntѥ@X4ڭ?9u"u2}:&35U[%K0T2WRN/!k;"0WB, 0,49hvh5+hdk ᔣ Ukmp0rD׬rM<QܰVQқF,Ji)ugQ8gn}co;UAPP4GĨNAA<6仓DI풪=)GMKٙh"6AU1WIoa'c˚ER"^?SgO՛%eWxZ~1V3cwD|<,怦%M!~yNxq阐B2px{E~jſ|+V7# e$$pC/gTED\HmYQ\B&^Js!9(7$m w}m6V6SGhպ4,ؒT@() 9eK9)&L BQۧˆe.Jڌ~-eV ӊI[*6 ,'Z`:!<֥wf t%p&/743$ [ Go󾓊!ӭ&tP&O$=Lgc@ƉAtIn>ﺽ;g)E'EWrH֖#TEs̆#pD?2O;N: ޠeuJD`^QG9Q|n:b4"Lr՜zt'_B/HEvcXrsk _}$G Y@w8fv{&VTZ,D69Ǿ4 {zqf|9Nj\WPK4RHѮ+Ge J }U}UүۥznB7cn[q}UQ߶vS7X?m}[}];7YoS{tW_?m}ZciwաGvv߶ Z}UkuñTqOl4p.Ndu+]cAkڬ-}b^TGJkt[N#MDB nzip US >TvSf)iVΙkq܉:cǪΐ/%Owf- Ko p3h)zWНEFKѣt zcjx{q\:N?*"olzukw91"o779Q!I$'҅ %i'H?%'f\~[tI@o˕'ͩgL~ Q+z"kye7VHmq@Le9_xT 8c?aҿxA!#^T؅^ IAnޥH'"8ώMgggMo ˆ)pmϰ&fKJK( Wo?e ~ LF6,T?uIx7geLN)`y~,*e7 -A(,䝥`T)9>e<\*MmbYx]58I5|豧f@4_fK7[57A!N.vNa !uhA^~n$;D0ݎP:^h/x(A@ꕒ9PτE4&[װ<4]X٢*?Ii2Q]@g(Cs]Yxr@*F,daTSUWHb\j(4gIJW/A1sv'SncEZZ =xF">#R-+erůl`@LǕkhKF2.%nͫ W#[~nU?]PSG愮ʊAa^*`n S5Cuwᡂ=bTya7۝iE.!SI* f.p\]f_ ]a!]O5c-Z%Bq"~Zy/ʀ؆J !}.lU0ΆDnM-\cLnm6Bߚ.,6g0_ۑ2BG|i@# w]&y/ag[If[띇E0HUj^bR[ǙJ,b c2BNկ}yzfuX#aJ4zEo:)r<e3cïygL`L;zXF[lQ{om."Zj2Sqz /\4;D]+iOo<~ɩDU lzB/OKGn*-a)SyqPtx$D+ 9#t)Ӛ@-lOOa!50MKFs,:CE{s1 ezJ/U )8CDPgwʹye>=[tɚV 9Yn'53I}E@v7VZ0q>3&-<54U4q5~r_xR1mU2X' $H%)Q$jo*T~mjM=ȱMm ؞l؈CG]A?⊗pI)OJ<* ď>.eɡd)AmA4p.k&RL:DG$CnBUtOtyxu`MBD,sDE_T;_Lš.UWc!2=X.0pD0F&Ud@yI[Jnj5h3$-@ek.)vt7*wR,\ʠ6sR5UPMW'#3˛G3*{ILcfS[v&wXEk轲j̩^ ϥ%ssp ,>ڣf3oV~NΎj2e6n>1F?A\'ǹ%9șP=:8#OoS8sp{riX[С<-kk©%Tb\ qoBlKPK'|?%a{<QHrP-ټu aξ*_0w_WsXѸ~us4:_ ZZjK_?aL(bt ;D&C]GolTI4OŽ/c_bi #V\:iD `_`.W HZӸ0e)Sl2VPm!q gT 6HFa[)0b49r)JZwԴLC(8J+Ʀ+%R^.ݧ uۓ>:(g9n;^"h%8Oԫ {ʺPV96hYpt(?&hgIa=n_;زʡѵ(}g7&q(YXFFܣ6Y]2ͽ4HNegh9t--'{Gk |)ky7rɌA zF[gha٩t"4R(ༀ=Ccqc j0%!g4@/1`ݨ{NIb&'.%7KXc jg1aծKqv=W'OΟ~"zddl6D7MzG(( hpI ܽiq,(Ӿ|d.Hͅ [=;"*ha&3 Omo1KBsBƂ BnoˆY7I^c)eض@ SlT _b{E=>ЩApۻ7o|ʻ@3C f`%=HtOegS]%X40L9k E?P6tg#GC8̷" T% :ەgHvX$]X@M3R/쬹| w tb-ţ&#6 Է:5T!.33E_j *m>ǚB 'f*eR8*`7FؒrX9A5WjȎeǡc3Ljq˅}TVlw$_L\(,ߕ`^"afr4I.4MV]t8Pk}+VOUx>^G64cUP:7+zbhHmn^J`.*VC=: ?z`Ā~|8(xtز!: 1 "8҈B cFR9N˃ϑξa=Zm%e7xXRF%GSE]MQ`(NWR8 {UOʗ{jn`FasR};$I3F?rPLR-T Z;gH䙴Cf)g2v:0- S̛qr?lɗR,|1Yz%vur;PS !f׮urs6fdrU?jx,BqT گ:F]Nkw;j! Tfw)у%*IdGrbFZNµGw΢3B{hϭ#2XtqTD]z.hYP0="Y[]~[> ?0YtI!S Vb'+OΘjx0= QMhP ēSzP&͏(h@1,6&]k>boLE}II@$ϯNBآ}k;|\h=)0gϚUiYdVV#_P^).oٿRiI"}(Di:>|*>9]1!/K2F&27Zd !<0w4mdMp,3<؁f"P}$$dGq0(Uth̋B R$ٔfXK7C% (QVC,aRRP#=nX~jDgW'kEO@!!2FmCO&mߌq[L]KshP!m0(g`K _(%0P7c+H[}kO "uCNSpS|'[P ;&I8x#>!(g.SpXƊ›ji/T ygi01h9)v)E8܆dDwsI۝ׄ+V?F IKnW67 8XU|Gb"ћ1DڈjBxA]S|лy6)bhOG!BM= nLh免meeiz Hɾ@kIZ=غ$l໬tIs0>9])/_" /n| s`$zErO`qՁ'JeWkJo* wɥNA{Q3,Ms VJWr(tV7D7x H{tHDi;X>\䤢>h!W+/z }\3K20Qlщ65ZDC(/ҐCbU87'G7 ٥FT9r$$TMLgcuh#S N:>ܘ"ie/2`$[)ܾzOj/:>3F̵ USzxggciDcyD;(x5 aMC/8Y9?8iR:tWW Ǝ-v{_<tGW xUB1y~eN<[J1gp6AJ?rgt笾cub+@٧@ckz$u*=H~冐yKd<d?P_a~˾U$0ow@uyV+m<4>o0׎E:tHpY*5pm֢[x}7PXUgnFdp1& 9Kb]?6NE-?0gU3ҜMfٞ(sZ[(L١(O%3]EZeM>y:C'9wׁl=דVUah] \"iv! F+=6@4B\B#1gFo.X5ݛp.|0JQ-`kʼny;NmK-Y @nhݟ#FqڮNńmR߀gmaϳ9'`@luR.dS?tS2ov)c ~|B/jyєv"_۷ Q%' k=6J8NihWBpapT6F$[N\,`KdΌ/~vĊuJ%צ kH~ 5i$K4  iRhrY <ڐ\T ‚b"Ks[d\&xW9 kʒ1 Vk3C;̧T}L­n8X5Pv1;XkX0RY Wܜ |4#B$iA-ϲe\vvݢrӭ͘P9"daS};ݻZo=,G;C._C'eD;1M)4O:ST*3:5$uCLΟL'y7@8ɵ8`mx(]E("sm`=r~1#jLgM1eO=:ax~(щ,$J"%2PJ$x|i%Ce QN?#1%>~b%, {0n^8ܓa_8i=-=v[p2rfV?$qCt*[2כEQtm3iTs&8-޹4N2ektp-pư Y \w,`==1)om+V0;!ٓWz?Fxlkܙ{UPewKVpqypGx\=١-~Ed9rN߯zNel2/cqM6QY5_gٲ\:,3dN*ٶ h V~_>]S iٓC[Yw&Q\!UY,"骩ՙCDfTǷ6>4=.0=n.Ōp]})x>5:@BܦXJcd sf4#`r޷;xl#z}Dm w|1ҞzL=5. 6N`8 {n5U'ߘ}edSt)b}$y~9We;Y5c ^L2/1O(Rc-I"ep+<|A'M=S g[ϾT,Pz3n>Iǂ@zx+ff izT>CJagk:?U: LO%^[n+5Rib^RhfR?|\^Wr:Kz!lˊA6ZY #L6zIn IA9V8Wy]c=BdXoܟ-UӃ֪ykzEך]o`+BX>{N*g6ņ'IÜǩ#Ʋa͸pxFWΫPgěp)]ӁaeIZł&Le҇ B4Η?AQ̜6tJxZդ#Ts)@ 8Hw͑VUrߘPMc+r+A4v/bb,׳nt͠+qHdde ]O`TǠx*S1ejؿzHI9uQۧ5t0јcvuV,-.5+UqTsH_~/pf$GO,ݜ@8suh]n-I_`/C|OhO ,h5^\GY벶]l3iٿ_89<M~" >]j:1?㬧ޜ2E5J(FݐWPIFlY¤2,Ai8 dq)/1ꝙr.R $ñƋpMs%>^jZ6)h2sv& ~ŧA{WU09E#Y@x`=0og=A]7o=VwJ6Mry9:}}Xѝo)$L9L>x4A@h^Mh=Wm:D}oB^ j:$k|rb ϥj,]vPV!{(֣g7|ǍW{Oje ^n#%aH䦥$'Ch83܁Qv w] mnb; bZv0?. o_G,ksl:U u6K?w rKqI,Lev[RN@u2kp'͜ms 4_9?, Q!gCߌsxBEbhX , 2*PH(-4X;̩QA?~:gW6 }yˡ$.H!E-,~4llj||AytYel90[tSOMWa6"[9\[9 LJnOXд%, (V7>>WVǘpH|nг> <" \ĻMdosC?7u=Z^t,{$nV3r7݄HDDy-<b3z0*'\4ZV%IO.䩝>/Θ${N2ݜ"|Q5&4s&0_XsAX?j~ߡr[!SRsH-bO+~4;xS!91Aq(ojO0.6yGa|+6.! $,"Xh\pvz6#v {UK4?0=ěݯZP|Mj91ɬL~; WtB`l_HeR ?dKP2zЀ fh. ų0%~a Oz{%]PxeoؐqY#g$K]Yz?A_K@/)lN<_@ M g8DTϋc9Kxu\:/) f=Dun*vLO@"'e D k!{Wr1§^NY ۧpUx kjrL,r׭=H+eXZ>G ?X7naZP$kAdKo[-\ 'C҈P#K pTr/;O.uF:=ܶ}B~4vX.k@[Vܟ /1 eH`hdRuVY6'S3 D6a¹'ǸH**tIO䩯&٫WJԤFC1[?\i-nX?Hʅ ?~5*7A~4EZ"d | |fώtOni;,Su=, n9y\*v!c% lV̗8 %lҘw{!Ӛ ߉ $^~\xJ8syaZ)3dzo$;|I$ 5}>9r8U~cU)Ue:4G-;H:,"UONR$U/ZgRu.#βI1o@ߣmI]U5*S3{1w[3:.ȶshpA˔w9"L-+k|NjP}R+ Zyj!KjxEl193>Һތ 8l(It -/Ns ꝶ s@*$1D>K`Hrh_b/4lAx}l0"X@ `+K#9QFNzVZf_ %onhpH8N$A_IPAR cdl|CgIGBƫ4.Uf;#[24T99kq\1f`U%I}ﻕ)_L LS;XP{o#eGhZv]c)r{"hUH)v mX!''Z˜u[5~8m<d I"ɟ.zCi1iݥ>uAA\]aX%)Xb/T"35-hJqz` f]I -Z.)KԜEvk% Q*\yxk Uώ^Et%~7alA+cG{ (;'UѱAYbBdV7fw-0T}n;RI7QSʥ6&ae DŽ1?X)5/-nH>׋{zovTF:+ YR i/J& 6XC>%XuCLhcVR7'C( 3@B !2]KSpuO` ?wL̛Hc|3"g ELj/sP W}`$C1/ޡSccp\;8m:j8J+F@k7r)˔fC,-A=$ SYs_t-VXGOJ|HxZ(36oH/ X\Q3{{\9+AooRJYCOº[׮fGm)YrK1'lTҼ/0BV>p&KS,v)o'G] tqs!9(78|B½q3j*`S<ry=aЀV;<7zs`PXn4nx(Oއм"W'է(-\f x76VmIh4WqM3|c8'p>KjxH_@|Oۻ+ٯ<\.蟈gC穀ܹ SEz')+mx,y"'`^QG9Q'`;75L>[>f*F0{ðvcp#H4G}\r>IuLVi87衇F0_h ǡ%Wf K`1HIS+f6ǎ[zӾvwl=ɫ GE sn]Mit(d\j]Y|«aCK<_M('D F'- nuu7By v3Oq> G6KA )l[TP%xkIwRg~ /#Լ \˚.^^ J&Lr<ڨA&<Sq TI9#FrJN% \gr0͡SUrs~_tNG6)!b1H݈̫zkx6Nkvjnxһ̫zkx6N̫zB^Bz̀%O>uE Ҳ%{V{w{>5<;.w r=g]GiH p< Z~ZNdt^1Szg>Exd3)3'c1>g;=i!?ZMn^@)0eܾGM .Pд諄jϓ6 ۯZ7P'v[BoԈ:ֽ-RjO!GЬ0ʖVB(*;$s hWpWSB(5L^75Ԍh*eZhYFP6ظ1_sս(Jƞ#67ee,A˦#ܧ[ oa}c,쬪&R@(@߅4P Ly^a,FwXy#N`8<,@g>Ƴ2?U}Z( Y-R@`*Ⱦ~$*4'-X޺dʉW{^%*|ȏ#o]cYWЛi^>X:_>dKs0 :seb&f>4j?_>dKs0 :sqM8pmZNAHV3m߄N ʓ <*iw&rYL;zǡ;wow:ezQWB'GZ xE4:_U_]v}Cs^gDDnSNic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdef[jp2cOQ2R \@@HHPHHPHHPHHPHHP S ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHPS ]@@HHPHHPHHPHHPHHPyp?(HdC<%O{''ʶM+'~,9-^Ղ-Ka͵Gz@B"_tTYpPnӥ,F+rh.xp}cZq,1xzPyq+ cmJx@ W\Ӓ]bv1ShC6bRP~GN*сE-b4Gz0ݲ4rη3C5|,x#$g"y 8@0QY1 7+xeGϼ}FikWmHC!dkfp, H # qdPߩa4/W6n[KԺU ɳBt+?ݠlJ^P<+_Jh=|и]HXO(r-p L\j9%nOWϼ} |p ;1[榵/敚x *8L4u?md "U;aro?kLD/]våU nLd[g1`WfkTl Sb>YcyQ\Owj|x=D7EtM1~2/QfZ'Ѷ?yvᷛ@ir+1%*|=Z;a\i7$#j JbE%CkV`QyL&cc ϵϼz}+vJI`G#jų? 7Z%R%:G]osiEb6%w_0ɈVy~@HW;Ͼ*eb$&,.Qݮn^%KCl*B pL s`NLESB^FkWbmr*6,qIzfH6e3V%tQ[ !h<7Ir*޳+aZ@rdhAwyg;!*y?W(& 8f-P?z >VR(iïMj3+.UtZf[) 9¶2XZ/e]4 7aO K zbѦU|}߆ewg4;)U<_z:C?#iW({*Emd <ǐ+?sL4̿A3Z\ 8E4Ks$`y9nP8t/Ri6] ƆAfo"Yf:(,sl\y o!cɷA)WkEV3ӥ~*$Xza, 7¾̏.B BUXDk{SG|"UoDu)?i ݼA0VNr6.̭Ja:cĞa۽w%o1B/Tuk?]ic yڑ"UNAN'sA7^t¬A' ʫܹ%s•D~"Oi\/% ẗ4e ^)Cmq gtg!?OS^̧/4@Kۖ[otIƃt B[8Fw\BϩHa_x ~JVOE/4SrE3v;LQN\߫,m5H dU}=dm ,VO*xR]oNܐk%(;{{ɾX%?M~XdEHܘo'1sXA t)O%+4u x0$K4 'ӤoAG:p +IJAmo{(ٳq!xDwGQ.c8pS'c[y92Jck|C5RMaD׽.Fa"h+k 04o?¿-P-^v</!3>OjO%C_bӫ~V^ 13wɳFMSgA \LPhrh >`ZZW ,y5TVFIFJU=WPN/*l4)rmc6Dk[&Py1*^xO G_uݘ6Hy$L+J{$=/񂐼K/J# P;ҳ#}{kX絖]ξA)*o&!)>hYkú Ce9Ae.GqW2ԫOUn:Yx$<1gw3-؁ {uGCNRwI;\*7@8jNJ9(+$!e Q7]O @RΖn#plJ1jÖ'v CրղxvWleNAM3\8| pa3FyT쒿 _3"x1j]6B9(J&jc5 ]cR|[zOUBcwKJżaWHn- 72eoM9ݷ~F 6m/#T)thp2]~9 VfNIB ?%eB͎_@*4JGKU3;9\AF'[Ibci֚rWPt/ xt'z_o8ͅ4I{h ^P[63o6B|t4*\?-w8:`;gRd_;Sl:rB#v13C B\x*Axܿ{}c(E@od10s+#@XH-o$)Y o BfU[YHK sR V2 TTu.D} uV wu<Q*cR)vk^v{9zVgi| Hl ht-in8UcBvXne7& Гkp`u^-&d#͎:U0ף R^G9 4'oglR\4+]yձfQ  'OVDByJ@6DvszBh~) ~G f$'^.yfiF O OCuuw=Vxa!5؉~@g_dPUՇ4~4/r%yސPY/ɒ0?%2`[า4>0FiOGۖvwm:`mR;<+v%:}Ayx3buA߼my$L$>=]Nb|B.Y UGh@.g+GQ?Bx$;m_z2lFJy&h"u!"v"z8s;gCpy$xR%oxuni5ם,-gOyTFTU1邕T 7ʹ8}5d.kvcmn{z-:uWc]Љ}쬗ʏQx[;@+%ּV\4Bxg`H&y-]G>~E,4]S@Nfrrmd(@^J)V~YX"S؜ŖVuB_+! S`)MsgV8uKt:ht:TYU<7w#jBIi.5vgKn󷖅`f6 (hm7MFqy(&Cm-$d3='G ܕ}Ԅj^9K S6}NtE|oȶpF9-Ehemd.9`"jfM>9{ (Pog*CCy5 !DTۿQHjnNLbjmT~(cjsʪ> љCL ~S*$;hkׂ'g2-@^/gBBvE3XdžȥߵK 'U>>dlYˆi}8GctO +e 'm@ `Ds-RQ/K!$<|2E+,y_.IIaY"w\>]66RhV6?!ibۻhr/F|QOC1!̲ #NY[`VGUeW|[|WbPKK_kRen^Tik_e#&+7|}rO 򘕗'5(}La'dVHn~KnĆ˓MtB]כI>̵N %74.[ˁQe"@{Q=W"~ )R-zS͉{'# \SZj: !}#\2a@YrOib?D\pp!Qdm_yM-DJawO 4&+IqۜRZ ̪Yzkl2:RՊke9˜)g|lNn!7N=2:7ܡ9[g[c4%ݲW2tBV?/ =}Lr6|\]+"pe֤MvOq4C 6Sݡع>v-[ ́oj_LIàIL~nxVs6iy&IDWqF&U@\ɕ e4oJdyo8%6h dNi٨JًT$ ňE1"|CooZ@`N KfTP|7ÁCg(7- d#&tE޹hrh$"HO\ ,O hZOhE1RuXj1Vvԥ_EP x)}@-|c[t³@Ubũ-jinssYx\*-st鯯Zﮛ/!`_(Ի1v΀HW;i?"n;GɴDM-y̽A}۶=Cb 5(uU;{qJxhN1Ewh+?a& ZiҚlK '^DŽhvYɕݴ+DdCP-Z<够u&9lA6>_MG,д7o9+ϵ{!ݐ)b{I7zɴc^; A-=qtFwp r4[.O+s2L} n]R n 8ya`Xv^jA؎$*$#m;4 + zk v‚Ls+\.`$6W(.H̫9HY˫H68m~Ξȼ<ʋ9CSK `&YWY; v|+}Y**{ܶfQ%)Gy6%&AݒӀl )?Zz<ŘM_ߝc? ?a1C7K+=_iF-Y~ ZP1Zs sYQBߜz IuA91/{ AY '6u,VQVoʹ]a7V!xЏ-h+<gR<+Zã:"PO9%4 w% zU4EP!1\CbB]ĐA `fTBwFw)Xv{8do$fLf8o*^H#O (^'r@<KWúwx㐙E*T?kFLgi)fq $C 3]_эqO}sGM+ (YBOkW/1ak@KyZ5Ne3=؂jk%1HtKft2~[*4*uqZٓ#1`S%?-ObNbdIі>E;#߷B9RZJ[W`࿮X0hM-a{~t=V̦b#jHQ+KV}:lc\R2V/+ d}싒&>$S1G'~l|%!aXNP_ ˶=Zܻqqr>tOo|[OߚN,9y'X^[خΙՇ!(B8oBZ83 g޺^tAD:o =H̥Oq"+YiQ"A_JJt^e7m;tck)P<$(ix`upfȮV S9f&8 (w2s$֔A I1Rk86ic x8R)/cerm{6!ldN@{X*VHb$vnG#}BX;ʲrD?gv();fk`KmKxƸ`br(VhKPraBS!|zܞBY e=[Z 'n;a[q6w7K|597LY嚱~= ؟'Y>#,L+ IiTqPR#%4}1[!tAWA#E7Ms{EJDu9dIElmFUҘw4*7P*MDi!G ~ 38l޷?#Pv*+YN3-#Y2ʓUjGU$Ⱦ\LjOqJmF!}JXՒewInAjsѸsXHZ<'JWyxw?YƱ#~]>KAa?^tk+|wjN t,-ꎪdžC1y #HlwUc[}/6_%GJ/f'wsŒq9 4^V&1E%9!F T'zVs Umߨ̕3V>r,k*TJgρt+n %ֹ`rw/Kx74) \B?i)y!X:E"㥤җܐoG$1QC+a%^*} 6c`${"\#2@F=EHD4zy>OVDžOټM2^j'9~1(7Rn_9F@Ύ4kiB¼i_%29+8!"3~-SzF,#34< 2TU'ېdJexqmr k؍ěA}X SL|JԼcOg,CvxczZ}"&PS[\MU)Q %ts /wؓXOkX?CUa!mE8^db=̔""/4yT$l /[L{ȶ o/C,KSCےgwz%J٘]hs*Td>ؓ7a54-:2\$f Ԝc$b}(؋Љ<;ݵLC b?YWnrJc ī0w78%ubiSTV\!ݥQ6z)h㛅7EhAw@O*ax`pFⵓ' Q34dX-/ =!o3wk]VBJD b]n&tFy\Sðh 斫V|z*0c(T#MPI*ZӢ[PU;_n(ٽ_JRbgĘ%N&-?yÃ~^&BuQJ dkoLt쫘Ɇ..Bp|@v~.K0`*eHx>u姳뚝$SM|A&&0Iu~}UIljs5:z2&5Q/:3کb֔'c2+DGx@#4`[VYF91̧4zz9>Oؒ3CF_X&{ScLKkk6TANP, %ؚMzs|1.9}Jź, T韰ɷS'ۥ:Y t2R2DO|*P`g>˟U} Id䦺&k]W5A4t..ݧ /JXru(ÃNBbIFn8/6,6ɽ3ΈL|W<27P %AUy^5(22"/0v]6m:y*lR9kC bMlmhwygW&i(&n̑5(`ܑ7ۀv0ü fgnfb'/-[\0:_3.i@ ~r܅x^ꢍvw#A0::25ݮP U14'ȴ9ř>i=J;{:AdA >( N>O;i|%,blKMz1gv*AoST*eiٝ8]fմ2"ktty'X<ɞ[v~׷Gq5YI%Lǯ!N܆@_%\>H%LΥ;!d\Sm2*fU>'H\)Ïj燍*oH^SsXq-֜nYMkEoɲґD7gÆ9'LlSRo~~YGwo5.Ik%X`o k0 Q+!fu%f%bb̆.Լ;Y&ҖyV9Fْ7}J||qk`I C;\@sDpI( ADd8c !`=ؒpԌ.4f` OD瓸!Pf/<KyN`Rk T}!.I<#xNlճqS .KTv@{ԃ[pd1{E$vzXx_Zb9 Wz(dUtL4ls_D<7z  ] h͉!5ޘyKζo]1JP_7 OZlhrdZ[I>*G/@L1Tm{}U4钓#2C0"u?FE"_'aD_j߼%*uL wTCVu*{ * }& M\ɲb՗1XVL{Fޯ?Uˁ5<+{&mUN;!4" 1:&tA\òݹK0JKG'ݵ,g x4k;-<%őqN(Bӥ˵ :`;qF g"UM] I8ixlu1A}YYa R6b1ڽ+VJՁrkpiI wcT8_e~_:M1Lqሎ̠/]h D_lici+uCˣԳS R*&=p#X:>jۼQ23 6d3|iކ_ov՞?T̳28xBirQb'<%1*y[01'K4/@"pA7,J,b?Z||8MXdl$@ ε`OAfJ}0vLnvg2zy P5sw\nT ~iT_f # ^lƱ7A}UT i<2 rg* #%xa5i[Tҏ>薫i1('^OY,{Ռ0 .Kl8T# :7Xd/mO\ ujd '.'jQ݆oܨ&S}|fΓttIF!tUXp)flsx~ &M!$j6:{H.F'q ƈ 2b2?iPZFECUj:Q"CrǪz!&kMųU!G63c H!Z>m`mhV e rOq_^Z3HqHOl⡽,9Dz {wEny%ɡ< !?,'O2b077 ˟+a񤸢)oþomFb~,oP&Ϻ/)0rt>}m,]~II5!,8:Xi`C8 B{;ǩ@J$'8j& rg<Kui{#iʵQ/u}M5/sF,Z1% cp/27?7C2(_`Zo@҉pQlTSU\%ѡk2"ԇnIW,MzS\n!N8MyBOϒ3O.2^"]tuM fRbKbY=oZ!B-$#-( >zºRפ#fQcc>]gR/wHC- tDLzQ3U&en׽-f9kpJ7kųQ#]o) a c8<<]=;܂:5񐂒‡2E9"YU%WCŹӥOؚk+O H.5H'"L[G^'75ʽʥD+WA*Tzmgx)KA|3v$ߝo~}Iu 8tSX8I?е;V2,6:[](#l|t!oWqoTYw}p9|Z4s#eأOisrOq'j_b;"aLj&D4f2%jnԌ8njL\ rQ~u*TxS|7Jnc \t+>K0гC&rd^OVsTk-+"aeP;9%8ǼG_ FʭA >l3 ;K(nO 4Qqk1'nJ TC_R-DY ʢb}E!w{QzFƺ91{<}LqTʦD!%zSr_9AmIs2nV)J4vKiFw &nQ "w"sR&3޾١#rĠ' @ܱ5}9/fzoxCy/;S/SUrF'CwZ6~x;񥄔n άbv[u5QVzz1:?w 2X㥬Һb_oцƓXfDOS #zBSHݖ~!֏0DaV"B'~!l/놾GVRدҼr]ۚj~ .P6 n!R ט!0Ϲw%R/'UO@$š< TD>!ꏼ-%cكC M=+n#K~@b;2_&c7kYl:gi Py%Th3{MXg8BG&fVM|Z+& a s Z21nnَfT6AHUQ3d(Ȼ2hiL,ϻ| [Mq!t2EqL?LލqIltЋ Vh3G-^|`@8?NQ9E[Zi.=Yε`OAfJýFz@.4!x]I}cy`dǰZ\v4]FQO1 W~JpcuHA#n<1~嶊¸CQTb@^= - vkΧktsEe#7ֈpw\VѫʂGEWX(}HRsoY|^vjKO+Xt$7c4c:B<{"DJY!_N十?AY|Zd]:"wgoԺ#Ҵho GHT9 ?S :.M&wfڤGnVofɍZ.A5"?kN/YC]XR9 7'k4rᴒS{x$5d~& ’D&EبH{mfU3ZCQBS9~<6TPG6FO.S (pq PWe()^gb3#8j6(فW7_klDGQ5 ڟ~A3yX!moR> 6:N c d؅;KX~D\ȥc~- ϲ+"Q]~t,Ul۹p4D2@ n`wCT wNp{ocT)у<S=ߨ8`M4lMk՛wkn"-\_dʳY#X޲u-Y.D5w%].Pe~o{=re@oQӏ5\"]Zj; h5g4H5sp?N`<&QB'πy+H Mm"pd4n ~ՃAJ[A&+ /stVNBy.iu]>pQQC՘,_7@W=!T#QN/( ٫.ÑS+տPR)/="s"l.3\vPD[s#Xwৈʄ黍:3`~ňZYbx UD͒FV# ^c'Sѯ,je:ѧ: ґnxȉEpȻ\WCaFv\LvhSkdsL0:`DKE \@a'-קo@--DcdZy&Hܷj#^T\{h:5~꨸BL_0E+|jw83ԇp]3AV2H2-L3 ;nxBǛ1,v"1W>fu}*E6Poނ! ̓='5<~krRiZ3&/e:+H'O9r M#'wLV]7R''SrJmr챩*[ Ġ|.+)b`f) ufH揘Mjg֞Јt'L?,:,d#K@:g8up^XԬX,䥱sb)ih/[;^I'/(sm9+z>ާqz[RޏoJ}n뀹YǴ^.ֹ5}Vxcgߙw١p oű82䜡9_KJ RRrK;z> ēe{e>cG6lιb7Au(OUt]LiFr%j0i6'ItAqpݭ6$=[&[DIYN7nz c)A6ֽR}D YD>hmqrHv(ܘT3{<Znua/uݳIE7|tt%ۍ`!ۭGpεEo-ujʡPbTd6~1v8Q0Q83gvPcLӃrJ@%z#'!%Bvt;m0s J{Umi`s\J*%ܗd}KP:.nkk/P~Ɋ; Iګ"?WER狿 8wE񻛅Ϫo'bC6mK]EYmqb#cbE4F#Nes*$E^+t.Ud6+="k0jmu.Hĥs{aIΰ~wo dˆ>=wb5q*[D0{A#"Uf&5aQ/gIx/,܄z+O" ze03USsbdݼpMGXgr<Y7 3;>l\F] ;>pfiqAR%j~Cfif6ʔQ{dN"*Ppy6Qp#;fuNhҼpFeP!#%'D2t8) _!8[cmz.b ĔF/*How*Mj1#L1SR_!8N tb8YV ѵZzAYO4qIjzJ,dGǁg0}1FPK r 8{hEZo 1DJ{$l 4b&7[ 1tX@Gʊ`_n{U%_h&ިoOikq$s,'XO/AN:c? 'B'$p}*p{@N&/F8܃ti5`"~܊O!nWBM,aS  fzHGy|COL:P~AlKj(J?$cM?%Jх(U{a!s7y~I*cvJeҖf:+$bH[XXdr`@7(#0'I Q:O{^ʆo&N7$tBM)ŵ͂@<[&Pt0-u<bl鶴C&n M5ri4\0b|x@W1<9xe.dTbN9s,Jzrs tk.%N+Yl@aR6D?Bg6Ibvk"w}dh  7{1Ulj# W$ٿfM ΓKOv@E +Z!vTʏ\|Bd_m[Gܗ@#,N :A>l9ˉ>= *PspXUNW2"~7FoO-(њʠؔ6=T^*V[Ÿr*cň7NmfJas=PqKϾ}agt|1j}en]Lt88}~V\e f:ZZD<|SrU@)g *MĀǧNzwK"-J0oCy6gtQDRyߺBҍFV#tJ.>(G)p5s i2Kllީi:jiF0+] %fmc"] d%E˒-ipCl,ݣsH==LxV%"٘9"녟 2<AfWYlN1Ǝz,&&.~9iOY =֥ؓj!2砚.5GIL.2tw'ivui_Ghh-e~}*P(p 9A[;Bh:SL#3H75H'ۑ{ۉֳn(!߿6=A 9BQx[`vC|Q!(܌ /em'Z: :sXdsggzb%5I _~aQ+B"N¾wu`̕Гixd :&LRN|Xˬ xHչP˦t_X9dX= Y?<Ƹ;2ps;ԙBvhnL=Tɰs)Z *y18v_z1_< qܗ K;$L^Y@{dN8ʈ0<,?@Ȧ0Cˈ|DOHWbĘ+}v h@ei:JM"9dWx9+-v>ZP&Ag7ݗû=bCM4W a܏,L#DZoRi6!w7}=؞]G{8, 6dubmaޞr)}[qvNt0Ҙ\'{$n Eŝ7e(~>E#/t_c=4 \i$}!+<buy$ڔeYCb8"$zLRVpPMrAWxOM$t [07$ˁN|AfDvfnS+Ng|*UJ>r󟐑#?..#:*^^GAø\q=dqjWD9aĩo4pL2<=0-As6 W+Ep/Zї~ڹtd9@ ɺGUمj]")]WkD:8LD@n-Bo @\) 5Rm`d= C[0qc@cf}:ܰ_(]$9W `]c%xma h,kVii[{;c͸|<ŭa-爣㸇nC i-˛|D!=4]2 QG]];BlύaEa_W@lmU"Jd3t+˔S}6#amZ"8^k$~sO}+0= ( ~f+58ܘFnja _ߓm<Ju(Z|~<#I$ 1mҨߥww'H6ۏ>GØ+Y@lJ, -@CzZ߲;N2s $)6K^,WX/7.{H|F-:F/lL./(rY:(i=DCi=zf;aĚ&!a@[z[4( :zLZv+hKzٶKquz*JΨj<pǖ~ THufƪ(7EJdw4!k>H*z~ (HhNU O Ϙջ -*S+6:ҋ*+s?J9L uj*մN0yyPv3 ,J~cB#T7$29Qye=~B7#%)TchU‘ IF{@R}!|k}ʴ5S#fYwzrԓ 2%:{]E섶H-0"gC^4i;ne9@ !.8vP&u^1LW9$iJx1-aS2&ZdAiY]>WZ˽1s'j_9Uļ~+q@b`jHɿ :GQf btOYN W_.8GWq&wؐ0e#ޘǧKb:yhyzwЭ18? %DK$GW~dc] <`fjS̀Y@; GQ6`C! m'$1%XY1g?SK6qhP `6г=gcT'h)jA>7>^Uf>G~6Mz/>ᰃ_;B\a)~vv:OPf"$OhGNwoQ0|k͚;=0I^ 3gueEZb󂛹\Q.AIsBXvߤ2-Ny ;0pO7`74MԶ3mUX]]|c.3BHL&#>\'6gKqy~d#aP=> >pewZ2|<[pin[ ͯ}uNwj-: 8_k>]n BBjnJUrR1М$;S:tFmjS!]ß]b&dAX B/  v\tl<;32v/UvZn9o!F5Lr=v=7KW3[]3|ylcX?3"w?w%toyu<ߙGQfgňàKa-M.aS郡[ ZI"ܶkk5X` f}YS8jN"~NXϠHBRGݞNά> HNBBc~hLq IzPdAgHP %>$ mI˔ 8e=-jjt 0j S; ǷJ'q\;(*co`@@AfwzS@G/󠘾.:$E\h$EݎOa DZt?Jݥ J `*yKzT~ޑ1zU:~ޓ7wG 0BH!v 9zb9C&Ƙ-Y:깺PBG pg֚M2nL8߫,F }5%nu]VNҺtg.U>qbF=>ԝT31X~֥)6R$Oɞ0X!L1O{d$0|(WF4 y}/Qp[M z[xR&X'eEisc &s&&&x4N5rl2PVSQ+Ƃ($Ha|- Ĭ$g9?#ۈEIw J[5^PCT,RG<  ć ϳU wV\7]t/c6uD M !@wmgX>}lxIֵ;2 CPXHk00#p 8+L@ X48K*c#TXW?[<l+_JjcLrIŮJ~9'b3qwpDj @FUGt?xZԲ'(6=+:2È!i 83N> sR i^KIKҺ~gLP%S 8V]FӶhqt}-#{#!k zFjAn+TSO+Hf*&!nr߸1sodge$,< ֹ'`\j`ԱXiVdn`r= .j,c Fyj"[QN t+,sBK!@8O{=uZG߾;){|V)+D!D HO!C}Wնvт% \C/}3#PUL 7rn1,5BّكI;$g9[grYbB%{ޔ15tFalkկEC -+&&# (<*_ƟCΥ*T*Id~@WXW~OfXͳO ~a` 6H Ԕ.^DBӾHS=D7K t4Ν@zi̖ 3E& GQe|y;-[zrF' >mB5u@X.._3Dq 7J>~W"v[nR&^UҜYuƱ)wvcPKf6uLr;HsAk)j.xZŰ.vO$4(fpz`-&`.@1FW8.͵⼳ iwM \~͖ev ʞ^;$FzMܒHp ҽ$Iv gLn NV}PI9;);#6:Zib'{(o_eF@07PK^kD#k8_bҌA)moۂyN#gFDoaNTiJѾ{6 4|,Ծ{b7j m ~Uό3_?jny G7h}fDQ;eHJy^]`!! JF4f@͌ypNZby%02/n΢Nd7T |@HPXe,CdyzqݞF܆;3:fи ):&S3)rGu!w*6cK HIRVt?@ioz\.cŗɹdT[6\20;/x2ob>3Z)$n;`lȄ_McSԠ~|:Qegi2_G`)Li%)q*E쎽٣\>W\\2 Zpi2/աBgb=E$L]-xkQ_W>s ,TSӋE<ղf))êכgu&0D/S u AWdqbn&(2?Uqj`V :I)'n:ks 2k姆/;&u?Tʂ|u dp% :*%*k"ofӡ0oiz慄̪DC tKai/ qg97_*sU Aؙ(NӒqcrp})C93)p&?` gOhRɫF85paDSLOS,ں40`|NKVIy&` EܗҞ!P%FཊWM'3e{hTí" ġǽwz&7U"NRybOyY R-n/Y {8dm( g*eB(G@M`6zIOL!M8>V:6*z1tO{o=A]}'6<Ԃ~u 9OT`)uf}ٱ*ԣCw!/q/Cv;Y/Ă}?鐀Z7eFV*վ6b f"pRv1M$n ڜ լm"e# n-ӱҼ:Q|c {lfjsbעLk Фäj/GchBg&ub΂DEdF%L^r&oS?~ '.pszgh͞97Qx"h({J1@JGg/DdTMC9_oU=rIC֑ʾ֟URm ~s{rjiiCuUaZ#WjPG913 a$0-h9wt5\Ah" "5᥶Ȩ2r+ @a7(/y -c6e%~ 1c Y'r*b,yKn͛urծj댠4%\FW[r^h(eĚA6lǰ msIR4T ' w! m^Ơ ӜEwyd0w6y\J虐HPGE,GXϣ=#9ύsCW>fx3}TV ]ҡ.1PugbDҋE|ɟryro4Xقa7;2DGPlA~t Jkm/f!Yy6\%3102,ѣR_d =HڠedeN Ha6%"hG用Ds]"ho:o~I1*YZuUkhJkv>kj`6(-E>%KODCkaeJ)YŨ{XAgr/JZw#D4RXÙz>Ga>JT!0bM-m] drE7L;%XOH#G.NX}{a|>VRV*s0]໪&]{ɱY`oEuӮv?(ppӵu[.8eqRŤ%JA$bԖejrH?ӑLDh%UP`4:S~t-FK^jwxoU}~)*QtLrk7ؔ`OJBPgh&tB2PcUJ~7j&Dָ1~3MJ݈+.E@=yQ}sv{f%OyFsWW&DzIv?I)eNSčyt'ʜXyk4Nżc0VX_&;SX8"Ydz@`&ky˹\އbS}(׊O c"Fq== "_ /e|D%<[in 6$}.0copxW͡ZmIǠICw ]fp/?~']}I{S ɚe׸Oh9o拪gLq+NXO THyVN0Uf_vYw)P<Su3D+R-WjA͍U!IJbv^_ IUNEeBŽzVڹ3LP'W9850>>Kr NGϸ' ?kl~`e3qV]BQ#p-#D]blfduDd =,h||D @33IMƄ혯 z z"W>MHzxZg^DYYwO 8d+`a~`ThX *ϰT6CI3iNL@wL:cE̗v(4I4bp W Ŕ]5i{{hU[ qH>23фQ{O&$EHiv&'ƤT۠tV>);/ujWۆ_8ݺ(Xy HMf,-R'*`5X^I~"BVq4(kAi5޵J_߭)VEOugNgd^g]O[7D\G(-6ᮞ0BG*Z iTGR -l}nȆxl@@~1.H]hP_vߦYI1e2m&PO嶑gʩ~Z8C';/%q%gYeuy*E 񔦂ӡ+AV?$"ЦVSWC`$ Îh{@ۺ9tr}c|ojy]xDX8UĕO?ÓDqnz*?F2Iq.{m['ݳ=Gzc> hoJwXqA IcbsэnzCU^I/~ۀyQ*XӐ l`6@ҿp-Ug6qz|?D)mokbsnΙ6RL,h-aGFЈy39Qb)TYWhsO:D*"{" ?Fr,~a=h츭lw9Oޗf?jZzN {7{?rq~Mkv1hL͜S`͑rtM+̼XX$_Z S`{'_5 otq%m#vA-ylaS: +0lpaI}WPsy$G,S A7ba7e!;< |;ŭ0x7l[&Eꁂw *e'U,Yx")_άd<>8ⓍVEY#}S.$/Lӥ=~Bt1:,vB]xa'uSP5v@A5t =+~KzIܯ۽rn Hr HfmH"l=̧FJ@Ns0P:ir/H07bRkDF; ҭ5#GOQgᰅ?ߏw茝}Aĉ`p^I~{8<։`]zgWW")4 :1K1D <lvv  oRU:`~;(X|]:78V4F=ZU4 - 7S9z9\<wZ!F~|g̎MO#:gkqR@`l02+Cnf#+xoAXo>,E‘0nfH/mi/Z+?['509\_~u1a&3b'zV7ҌCvN~y.<ر|aj=df+ [uitX2i"$s\N'tXngVg̍٩߷,M)&&Cڧ9G0U/d~\n}Ą3>Y7[f[!j/I=4ڛv'{jc2}IR6 [eo+5`$dEC ]+X_h"j! [--T!}aX<.,w"rc2CEXsm7&0LSJw/~l-)M 1ǝn?9$<"$.|6ɴW hϔOsL r;3i~1@By-7~ i'W"YC&F-%͹;H/*}DFG* yd [ 6p9#yVTbIԊ`zSaDɖpD&=:h&1"P|^ې^nC9ur&\zTOXwg<BC,,ٱ$ 9B+]r<ݘ=TeG(lQy~NH`* x2A6KJH$%>Ϻi-SE@GnAS Ƨ bK uT&yAjd}U&_#\rw\\~*TɨLLFQE' G+Qn+FAᱲCY ME&Q*ĠF k3m }keETE{łGߧIV,MзUeU4Bi4| z/Lطk*5Q?Y-dQ( %=+r'>ϳC4|-@#t{w(/lq(MTNa?^K]y9l=jd],`Hj䶂Gy raáӅILyPo_vr72*x(^g4ߓHLi `0чB5y۩:IL,!9#kQH|?0U"Q4\U#ꀁ^3얊0 [!GKaqz\Kh^ [5F/RݱƳ&8皾ďUMӯђ7.8cXS5E}KZ΄@5|d%\̸NG 3ewˆ1lzfIMP>HMT]} KXfy^ /"?:F.~<@bsdn1 -&z(V_{o=A]}'6 q XHNsVkcj0/t?Mʨ@ТAEKEQ۵Ab.8qoz9gxQm 3G:@n[=*ĬSl5<yU:Z3fkKjE 6^yoUq{~(|CT9Y~s>Rߤε" >eYujXac"0%K(pK z*kH@ o7Vj&APO[eۢDTN|%@lu"(|Rb͒Y5Ѩ1z֡olypSS[&cYJft]Z7 ~sSZO)Z=/d<]Xa1V+c0sxcZ ~oMP4aMcb5S5{ +R ^߹XTt'Sfsh83E$xyqG}圤[O UZ3YdV#z,* fך\ndn"q!등͇ ʺKl[3%b,JH% Yu\W%<xb56`?SR n^<@2sf> J`Bh9*wQ}Zbz\/8b"QS9#XA:fi. NrCKL*+vOf'l9q-VzHH}nr8Ap/9`=~to-l63##Nx;Qy o7v1 H |rP4@CHI@Gٰ^3޷뷒^{ N!Ǯӧ.+.3 ۣ/x'XN~qt  =Hz"mgGHpN !Na,aPn+m٥^qLn^#XiߤUJs2mM5J`Qx0j*lG~%)㮖l٥D6GNP2bmĬh#`V Am:;/4q )6NH*z Z,xdŵ]]lp_՚hV[i5}eJ¢žN)rOTb&3aww@wj#r KGo*@ء 3H(W%ӻgH広-)*gХSmr L2PE/LRIN UGT&1!TB%Ko$LF&%OՌ~tXye{u~ >z)GMSG4'%rR҉ tA- vl%#/"QV,.殴;X /{~~  AO\a(%~ Me JCI2Tjj05xŒ5ػ8' AU üﲁ!H>K[:(!Z2kQcdJLȜ]k*$ ˺h𿘢 .8ϊP22"0kv P.|"qΤebL"%O=ptsIᎬfN>h~K*xkoSr:zhu)(ݍuB?^4Vſ+8~(Vd>nQˁ.sxÕ .3c>\yЦ d"8^J8#Vq:cΎ+*jӦ"jxk)SBZ5ab?z7I!}|)|dݟy NT'|;WTl"y ҆zY|$˞=մ8cw?"g&gժ4MKG m)«]-E&a> RBk@ۧ㒄> ݤL/T ZwK7^UB5vxWbxݚ*+{F%+)ԗ :fV]rBeڢΦuV%YJIEtF1jA7/ aЬ7\'W,?'cԥ pV #{(coqpux*QunK&ٱi"N+no۴onMgg3<3Z|7Ϻ0PNo DV.e맟&wQKrRyo0hp}qI:Ul9v4)_f);;۰\.wL+W*%+c_sM)lj^]*;ڲ`I׉C"v +sT=׼[_*BW}Dky)(maҍ+Zdtk!nGrsJ )mBw) gExn='#L`]6O:@kV^^^]eR%JY9»dGY^l6 ~L=t>ipZ0|8J Y7 'J 9xKlT91#du[jO4qD7> 4|qA?$ D2ܵ+@9.j)@@.IW!DYT| OHlCP!LW|gةuR_hnI 3::aՀ-V"e _8+c`0I%Ls4 &; U0%`JTVv_C{lM h䴡E s]hK.I<07+#hC}ƑQÆVOa -T.d\G x: >(¯\p3l&ŪEt(Wu'?{ku "dٶ89ixyQo YtR1q58[k?%;nkHHa:66|qi>aZ(^:,<y_Xrq +jLVAAIy7m.nNsy 3a[RkWe=.{WNM!3PR@>ϭ =y "RvN抷]/Pv~J}Q!l*_o{&ޞSK*ջiY4k#@M$H)k`$8꿸/mBFl@)øWQǾɩ  WZ:X~["^Ժ @  V7cJGUoqX @dy½H\-Эxx> R*DSj":xݍ>1?c26/l9(\rtSڈ`7e2rZV|%e) ݻ8sP|'_4HEk>mv(Yɐ j'O|d q,eF3Yteo&#-}'}P6юg:32Nl7MdrJe[pchwN(n~0a&x5Acx0Ԕ][4fit32~~*6}|{{zyxxwvuttsrqpponmmlkjikii_ @yojihgi߀݂܀ڀق׀րՂӀтЀ΂̀̀ʂɀƷxggf؁ހ܀ۀׂӁπ΀ʁȀƀÁ ơqfdU ހۀ׀ӀЀ΀ʀƀÀ ſ~ebU ހۀ׀ӀЀ΀ʀƀÀ ćdc ހۀ׀ӀЀ΀ʀƀÀzdbހۀ׀ӀЀ΀ʀƀÀżjeހۀ׀ӀЀ΀ʀƀÀŕcb ހۀ׀ӀЀ΀ʀƀÀkc ހۀ׀ӀЀ΀ʀƀÀ `W܀݁߀ހۀ׀ӀЀ΀ʀƀÀ^]Ҁހۀ׀ӀЀ΀ʀƀÀZ`ڀۀ׀ӀЀ΀ʀƀÀ"VYހ؀ۀۀ׀ӀЀ΀ʀƀÀـѽځۀ׀ӀЀ΀ʀƀÀ Ծրف׀ӀЀ΀ʀƀÀö׀ӀЀ΀ʀƀõ׀ӀЀ΀ʀƀ ⼶׀׀ӀЀ΀ʀƀ ߔݸր׀ӀЀ΀ʀƀ ٖصՂӀЀ΀ʀƀ 쿵рӀЀ΀ʀɲӀЀ΀ʀ ذӀЀ΀ʀ ӜⱷҁӀЀ΀ʀ ¿ 鷵ӀЀ΀ʀ  ӀЀ΀ʀ þӀЀ΀ʀʿ请сЀ΀ʀ»Ⱦ ୸Ѐ΀½݁ǽ үЀ΀ ľ΁Ĺ ıЀ΀ ΰ^^¾ЀЀ΀ ý ̩ba ꮷЀ΀ Ѡfc ͰЀ΀ üǀ ֧ heƾ 뮴Ѐ΀ 丗ieúӭЀ΀ üߪihż걲͂΀ ءih Ƽ׬ʂ΀ ļ њih Ƽ赲΀΀؜ihƻ ڬ΀Ľԃܢih ĸ 汴΀¹ުihȁ Ű΀޶ih ɽ ج΀ŽӁ߃љih Ź ⫴΀úހ߃ރ ܫih؂ ΀ރ݃ ɜihǹ Ѭ΀Ǿ݃܃ ٤ih ̿ݩ̀ Ƽ܃ۂځĜih Ŷ߁̀ Ĺۂڃقih ʼނ߃ނǯ·ƒك؁ ՜ih ҁރ̬݃ǂ؃ׂ ĝih Ķ݃܃ϫˁ׃ւ ԯih Ⱥ܃ۂڀөƾ΀ւՃ ӟih ʽ؃ڂف֧ƾՃԅ Λih ̿҂ك؂żԋ ȝih ́؃׃Ļ ih óǀ׃ւԱú ih ĴւՃԀú ih ĴՂԇ»ih Ĵih óÍ#ih Ǎ#ih ̿ˍŏih ʽЌўь#͍ec Ⱥ˟ʍ"e_ Ķšč"e_ ̽ōe_ э"яe_ Ƚ !e_ ķР ύe_ȿ!җe_øĎ e_ȽҡҎe_¶ȎĢŒe_źe_Ƚҏљe_ȿϏ£̒e_ɿʏҦҏČe_ɿŐe_ǾɐѤА e_ļΑ˕e_ґΣ͑П e_»Ɠd_ĔʤȓҴb\ҔШϔ Э^[Η"ҖɯZUЙ#ͽssТ%ǽСȤÁġǽР)ΨˠǽП+ά̟ǽО-ɩŞǽНèǁ$ǽМ1ǽК5ѲКǽЙͮǂ+ʙǽЗѼˀ/ϗǽЕˁ2ҕǽДĮ́4ǽВEȲǽЏK˿ŏǽЌ ɻ̀DҋǽЇǻсĠǽǀþЃPՀXUS͂mZW ׁi^[߀l|`Wހ]gbucbufbstdbqdcqyebUԁ ؀Ӏ̀ nfdU݀ۀـ؀րԀҀЀ΀̀ˀɀǀŀÀuggf_~wnjihgi*6}|{{zyxxwvuttsrqpponmmlkjikii_?CAB?>?I>>==<<;;::9988766554433221100//..-,,++((''&&%%$$##"!!   KDACBCIMNMMLKJJIHHGFEEDDCBAA@??>=<<;::98776554332110//.--,+**)(('&&%$$#"!!  DL^jnmmlkkjiihggffeddcbba`__^^]\\[ZZYXXWWVUUTSSRQQPPONMMLKKJIIHHGFFEDDCBBA;* UDEJcponppqpoonmlkkjihhgffedcbba`__^]]\\[ZZYXWWVUTTSRQQPONMLLKKJIHHGFEEDC BBAA@?/ UFESopqtutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?< EFXpptvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@? FFSpqwwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>?= ?GJpqvxwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>: GGartxxwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>=' JLprwvvutsrrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFEEDCBBA@?>>==<AFYptvuttsrqrqpoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHG FEEDCBBAA@?>==<;< GDdlqrqpqpqpopopoonmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHG FDDCBAA@@?=<;;:9:, IAdflkjklmnmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIHHGFFECCA@??>=<:9776672  F>``dccdccdeefghijklmlkkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJIGGFEECA@>=<;:9875432232 ƿҀǵyb^^_`abefgiijklkji hhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLLKJJIHGFDCB@>=:8876<:8T}Z\^`cefhiihiihhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONMLKJIHFDA?=;:dĈY\_bcfgghihhgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOON MKKIGEC@=;vY[^acdfgghgffeeddcbba`__^]\\[ZYXXWVUUTSSRQPOONNMLJIFCA?XɖbX]_cddeddcbba`__^]\\[ZYXXWVUUTSSR QPNNLJHD@LWZ_acddeddcbba`__^]\\[ZYXXWVUUTSSR QONMIGD@wUZ]`bcdcbba`__^]\\[ZYXXWVUUTSSRPNLJFC@ UX[_accdcbba`__^]\\[ZYXXWVUUTSSRRQOMIGCA ^VZ^abccbba`__^]\\[ZYXXWV UUTSSRQPNJFCLט¿qVY^`ba`__^]\\[ZYXXWV UUTSSQPOKGBbUZ]`aaba`__^]\\[ZYXXWV UUTSRQOMHCxlVY^``ba`__^]\\[ZYXXWV UUTSROMIE^ʿZUZ^_a`__^]\\[ZYXXWV UUTRQMJFKȾ QVZ]``aa`__^]\\[ZYXXWVUUSQOKGCсǽ RVZ^_`a`__^]\\[ZYXXWVUTROLGCƵyuttus[eHCdehggfecca_a RV[^_a`__^]\\[ZYXXWVUTQMIDy954454 KFjlon lkjhfdc`\ {SX[^``__^]\\[ZYXXWVTSOKFmj68898788 NIoqts rppomkigca]uӔTUY]_^]\\[ZY XXWVVUTQMHGU89:<<==<;:;:MJrtxvuttrqpomigd`\ݒQV[^_^]\\[ZY XXWVVUSPKE d9;<=>??@?>==<;<;NKsuyxwvutssrpnmifb_Z \SX\^^_^]\\[ZY XXWVUTQMHP:;=??@A@?>>=<=<NKsuyxwvvut rqpmkhe`\PV[]^_^]\\[ZY XXWVUSOKFk;>?@BA@?>>=<=<NKsuyxwvvut srqpnljfa\rfRX[]^]\\[ZY XXWUTRMH\R<>ABCDCBCCBBA@?>>=<=<NKsuyxwvvut srrqonmjga\`؃OUY\^]\\[ZY XXWUSPKFB=?BDCBBA@?>>=<=<NKsuyxwvvut srrqppolkfa\b tRW[]]^^]\\[ZYXXWTRNHjE=@BDEDCBBA@?>>=<=<NKsuyxwvvutsrrqp nmjea\s PUY\]^^]\\[ZYXXVTQLFăV>@CDFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqponlieaZ hRW[]^^]\\[ZYXXVSOJ^ k>ACEFFGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoomkhd^X QUZ\]^]\\[ZYXWURNHއ=ACEGFGGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqp oonljgb\V OTY[]^]\\[ZYXWUQLFÁ߃;@CEFGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqp oonmljf`Z ZRWZ]^]\\[ZYXWTOJQ݀߃ރk>BFGGHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqp oonmmkhc]Vɂ PVZ\^]\\[ZYXVSNIރ݃۳=@DGHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqp oonmmlie`Yv NTX[]]\\[ZYWVRLG݃܃\?CFHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmjgc\U QRW[]]\\[ZYWUQKI܃ۂځ>ADGIIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmkhe_X߁ QVZ]]\\[ZYWUOIvۂڃقr?CFHIIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmligaZ\݂߃ނPUZ\ [ZYYXVTNHك؁ DAEGIJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmljhc\Vރ݃OTY\ [ZYYXVSMG؃ׂ >CFHIJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmljie^X݃܃ڿNSX\ [ZYYXVSMF׃ւ z?DGIIJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkif`Yd܃ۂڀMRX[\ [ZYYXVRLFĀւՃ LAEHIJJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkjga[TӃڂفLRW[\ [ZYYXURLEՃԅ >BFIIJJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkjgb\Ułك؂VQW[\ [ZYYXUQKNԋ ?BGIIJJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkjgc]V؃׃dPVZ\[ZYYXUQJ\ ?CHIIJJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkjgc]V׃ւpPVZ\[ZYYXTPJj ?DHIIJJIHHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonm lkkhc^WւՃԀ}PUZ\[ZYYXTPJy ~'*-./39>DHGFEEDCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkkhd^WՂԇPUZ\WQLG@81)ph %,28?DCBBA@?>>=<=<NKsuyxwvvutsrrqpoonmlkkhc^W}PUPH>4/.--+)'$bw%.>=<=<NKsuyxwvvutsrrqpoonmlkjgc]Vb5/0/.--+)'$P#0=?>>=<=<NKsuyxwvvutsrrqpoonmlkjgc]VF,.0/.--+)'$> $2<<=<NKsuyxwvvutsrrqpoonmlkjgb\U5,.0/.--+)($- '5NKsuyxwvvutsrrqpoonmlkjga[Tʌ*,.0 /.--+*(%!͌   NKsuyxwvvutsrrqpoonmlkif`Y`*-/1100/.--,*(%!)   NKsuyxwvvutsrrqpoonmljie^X+-/1100/.--,*(%""b   NKsuyxwvvutsrrqpoonmljh`M<+-/1100/.--,*)%"   NKsuyxwvvutsrrqpoonmj\L=8;΍,.01100/.--,*)&""   NKsuyxwvvutsrrqp oonml[GA?;6fY,/01100/.--,*)&#SR   NKsuyxwvvutsrrqp oom]JECA>95.-/01100/.--,**'$%ʍ!   NKsuyxwvvutsrrqp n_KFFDB?<8Oҍ+.012100/.--,+*'$"!7   NKsuyxwvvutsrrqpp`LHGFFDA>:6f,/112100/.--,+*(%#_   NKsuyxwvvutsrrpaNIHHGFEC@<8[4-0112100/.--,+*(&#+ώC   NKsuyxwvvutsqcPJJIHHGEDA>:6+.12100/.--,++)&$!   NKsuyxwvvuttsdQLKJJIHHFEC@;7rq,/12100/.--,++)'%"j^   NKsuyxwvvuthSMLLKJJIHGFCA=9YϏ>-02100/.--,++)'&"3?   NKsuyxwvvq[NNMLLKJJIGGDA>:Iŏ,/13322100/.--,++*(&# *   NKsuyxwvfRONNMLLKJJHGEB>;>G.023322100/.--,++*('$!=я   NKsuyxoXQPONNMLLKIIGEC?;=,/123322100/.--,++*)(%"    NKsuyxvcRQQPONNMLKJIGEB?:nΑ5/14322100/.--,++*))'%#!'ÑT   MJmXTSRRQPONMKKIGEB?=Tr/1354322100/.--,++*))(&%"i2   NFLMRQPPNMMLJHGEBA>Lғ01245544322100/.--,++*))(&%# !щ%    DAGJNMLLKIIGFDB@>ZΔ!H/2456544322100/.--,++*))('&$!:ɔ{4  ??CEIHGGEDDB@Ad#^/14556544322100/.--,++*))('&%"!QҖ~@  facehffhuəz0236544322100/.--,++*))(''%#"pƢyfQ>;:9:9:AТ/24576544322100/.--,++*))(''&$#!ǽС'424667766544322100/.--,++*))(''&%$" !ǽР)@246778766544322100/.--,++*))(''&%$#!,ǽПP3468"766544322100/.--,++*))(''&%%#"!=ŸǽО-C35789988766544322100/.--,++*))(''&%%$"" /ǽН/846889:988766544322100/.--,++*))(''&%%$#"! ǽЛ҃4579:)988766544322100/.--,++*))(''&%%$##! vқǽКh4689;,::988766544322100/.--,++*))(''&%%$##" V̚ǽЙ7R579:;<<;::988766544322100/.--,++*))(''&%%$##"!;ǽЗ˃<78:<2=<;::988766544322100/.--,++*))(''&%%$##"!  tʗǽЕБD78:;<>=3<;::988766544322100/.--,++*))(''&%%$##"! &ЕǽДM79:;=>6==<;::988766544322100/.--,++*))(''&%%$##"! 0ǽВY8:;=>>?9>==<;::988766544322100/.--,++*))(''&%%$##"! <ǽЏW9;<>>@>??>==<;::988766544322100/.--,++*))(''&%%$##"! 9tǽЋSүP:<==?@AABA@A@??>==<;::988766544322100/.--,++*))(''&%%$##"! ,hыǽІǷxJ<>>?@AABCBJAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  [҆ǽ}n_PB?@@ABCCDEDCQBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  "5H]q<>AAFEDDEDEFEUDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   AAFDLKJIJIIHIHG^FFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   BDJHNONONMLKJKJIYHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   wAFKKORQQPOPONMMLKLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   GFKLSRhQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   nGGLLOSSRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   n?EEMKQSRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   sFFIKKRRQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  kEFIJJNQQPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!  iUFEHKIKOPONNMLLKJJIHHGFFEDCCBAA@??>==<;::988766544322100/.--,++*))(''&%%$##"!   nUDEDIIHGIIKJIIHHGFFEEDCCBAA@??>==<;;:9887665443321100/..-,,+**)(('&&%$$#""!  DhEHHGFFEDDCCBAA@@?>>==<;;::98877665443321100/..--,++**)((''&%%$$#""!!   KDACBAC`BBAA@@??>==<;;::9887766554433221100/..--,++*))((''&&%$$##""!!  ?CAB?>?I>>==<<;;::9988766554433221100//..-,,++((''&&%%$$##"!!      ! #'+,+*)('&%$#"!  !*;HMLKJIHGFEDCBA@?>=<;:982# *"!'ANMMNOPONMLKJIHHGFEDCBBA@?>=<;:98( ""0LNOSRQPONMLKJJIHGFEDCBA@?>==<;:986!"5NNQTTSRQPONMLKJJIHGFEDCBA@?>==<;:98#"/MNTSRQPONMLKJJIHGFEDCBA@?>==<;:986?"&LNSUTSRQPONMLKJJIHGFEDCBA@?>==<;:9874 ""=NRUUTSRQPONMLKJJIHGFEDCBA@?>==<;:9877"%'LNTSRQPONMLKJJIHGFEDCBA@?>==<;:9876 "5LQSRRSRQPONMLKJJIHGFEDCBA@?>==<;:8766&"AJOPPQPQPQQPQQPONMLKJJIHGFEDCBA@?>==<:99876544'* DFMLKLMMNOPOPPOPPONMLKJJIHGFEDCBA@?>==<; 99876655433211- &ACGFFGFFGHIIJJKMNNOONONMLKJJIHGFEDCBA@?>==;:997654331/.ƿπeICDEEFHIJKLMNNOONMLKJJIHGFEDCBA@?><<:9987643200/5TsˀǼا^CDEGGIKKLMNMLKJJIHGFEDCBA@?>==;:8764320N kBBDFHIKMNMLKJJIHGFEDCBA@? >=<;975321_ zBCEHIKLLMLKJJIHGFEDCBA@? >>=;:8541q~@CEHIKLMLKJJIHGFEDCBA@ ??>=<;8652uߒlACEGIJKLKJJIHGFEDCBA@ >>=;:853aՔ [@CFHJKKLLKJJIHGFEDCBA @@?><;864QNBDGIJKJJIHGFEDCBA ??><:85Dx@CFHJKJKJJIHGFEDCB AA@?><974q?BEGIJJKJJIHGFEDCB A@@=<:64@ADGHJJKJJIHGFEDCB@@>;975 J@CFHJJKKJJIHGFEDC BBA@><96@՘¿ `@BFHJJKJJIHGFEDCBAA><:6Xv?CFHJIHGFEDCAA@=:7p[?CFIJIHGFEDCA@>:7UʿG@DGIIJIHGFEDCB@><8?Ⱦ=ADGHIHGFEDCBA?<95ρǽ|u=AEGIHIIHGFEDCCBB@=96ŴwrqqYe)$DGJIIHGGFEDH>BEGHIIHGFEDCCBA>:7߶v3./0//0 *%HLON LLKJIHGEC{m?BFGHIHGFEDCBA?<8e e/0112323233,'KOSRP NNMKJHECcДB@DFHGFEDBB@=::N1224565565 ,(MQUTSSRQQPONMJHFCsے=BDGHGFEDBA?<8_124567876 ,(NRVUTTSR QPNMKGEB K?BFHGHHGFE DDCB@=:E 13567889989987 ,(NRVUTS RRPONKIFB|=@DGGHHGFE DDCA?;7 e246889:9::987 ,(NRVUTS QQPNMJFC_X>BFGGHGFEDCC@=9PK2579:;:987 ,(NRVUTS RRQPOMJGCJփ<@DFGHGFEDCB?;7:3589:;:987 ,(NRVUTSRQPOMJGCK߁f>BEGFEDCA=9_ <458:;;<;:987 ,(NRVUTSR QQPNMJFC`<@CFGFECB@;7ƒM368:;<;:987 ,(NRVUTSRQONMIFBzW?BEGFECA>:Re469:;<;:987 ,(NRVUTSRQPONLIEA=ADGFGFEEDCA=8ނ368:;<;:987 ,(NRVUTSRQ PPOMKHD?<@CFFGFEEDB@<7߃258:<;:987 ,(NRVUTSRQPNMJGByH>BEFGFEEDA?;C݀߃ރc47:;<;:987 ,(NRVUTSRQPONLIE@ł=AEFGFEEDA=9ރ݃۱369<<=<;:987 ,(NRVUTSRQPONMKGBf;@CEFGFEDC@<8݃܃U58;=<;:987 ,(NRVUTSRQP OONLID?@>CDFGFEDC?;<܃ۂځ379<=<;:987 ,(NRVUTSRQPOONMKFA߁t=BDFGFEDB>:mۂڃقk59;=>==<;:987 ,(NRVUTSRQPONLHCG܂߃ނ==<;:987 ,(NRVUTSRQPONMID@ރ݃<@CEFGFDCA=8؃ׂ47;<=>==<;:987 ,(NRVUTSRQPONMJFA݃܃ڼ;@CEFGFDCA<8׃ւ t59<=>>==<;:987 ,(NRVUTSRQPONKGBQ܃ۂڀ:?BEFGFDC@;7ÀւՃ B6:==>>==<;:987 ,(NRVUTSRQPONLHD>҃ڂف:?BEFGFDC@;7Ճԅ 37:==>>==<;:987 ,(NRVUTSRQPONLID>‚ك؂E>ADFGFDC@;@ԋ37;=>==<;:987 ,(NRVUTSRQPONLIE?؃׃U>ADFGFDB?:P48;>==<;:987 ,(NRVUTSRQPONLJE?׃ւc=ADFGFDB?:`48<>==<;:987 ,(NRVUTSRQPOLJF@ւՃԀr=ADFGFDB?:p w $,29<;:987 ,(NRVUTSRQPOLJF@Ղԇ}=ADFGGB<61)#f`  '.4:;:987 ,(NRVUTSRQPOLJF@r=A:1%Wp  &39987 ,(NRVUTSRQPONLJE?TC   (687 ,(NRVUTSRQPONLIE?3/  +7 ,(NRVUTSRQPONLID>   / ,(NRVUTSRQPONLHD>Ȍ͌ŀ   ,(NRVUTSRQPONKGBL  ,(NRVUTSRQPONMJFAuZ  ,(NRVUTSRQPONME2!  ,(NRVUTSRQPOOM=+ ͍}{  ,(NRVUTSRQPN;$SIFI ,(NRVUTSRQ PO<% ɍ ,(NRVUTSR QQP<&! 8ҍ,  ,(NRVUTSRP>'! WS  ,(NRVUTSRQ?'""! Fώ: ,(NRVUTSR?)#"! ,(NRVUTSR@*#"!! ad`W  ,(NRVUTSSE*$$#"! CϏ)$6,(NRVUTN4%$#" /Ï ,(NRVUTT@'%%$#""! "3.я,(NRVUK/&%$#!! !,(NRVUS;&%$ ##"! -' ː,(NRVL.'&%$""! Au q1,(NQ@(''&%#!! [͑‘N,(G-(&%$""! ;d _),%!"&%$ ##"! 0ғх!! %$ #""!! @͔4 ,Ȕw-"! !LL Gі{:QJGJMLLO_qǙm hŠvbM:657@Т ǽС ǽР) ǽП :  1ǽО , !ǽН ǽЛv oқǽК V  L˚ǽЙ= 1ǽЗ v!  nɗǽЕЅ*  ЕǽД4  %ǽВA  3ǽЏ y?  /oǽЋ ҩn5  #cыǽІıd-  W҆ǽ {iWD2"     0DYm~!  ! !! !    $#""#"!""!!"!   "!$%$#""#"!   ""#&%$%%$#"!   "" '&%$#"!   ""##''&%$#"!   ? " %'&%$#"!   #"#&%$#"!   !"""&&%$#"!   " $%$#"!    *"!"! !  !"!  ! !    ih32'zr*q+o1|Tȁ[_wwȘȘȘȔĶĊƺ)ųk ǶӀ+sI֩vԿؾɶ٣vÁ Ůݮv ݀*vպο˺ۀZգvַɳƬvزǮ!ӷvѼ׀ղƮvҸԀɽvѹvҨ҂lƂ̭˂gͳтЕggɵ҂ ҩ҂Ҝg̷˃ ǔgʷǃ ҫ҃gф ϥfȅ ʮDž ^bΈЭΈºbiȉѱщȰiiȈͰʈȰiiȇȲȰiiȅ̶ƅȰiiȂĸ΂7ȰiE¾EՀVRuT+h*m'ÿ~tm'FJJKJHFEEA?><;;:88653/.-+*))(&%#")L[qrqpomljiheebba_^\ZYXVUSRQPNMKJIGFDCA?"+Oduutsqpnmljigedca`^][ZYWVTRRPNMKJIGFDCA@?+,TRvwutsqpnmljigedca`^][ZYWVTRRPNMKJIGFDCA@?>LZpponYonmljigedca`^][ZYWVTRRPNMKJIGEB@><;9#wɸffhjkjigedca`^][ZYWVTRRPNMKIGC@A}žwբcegigedca`^][ZYWVTRRPNMIEEȘ]dfedca`^][ZYWVTRRPMIBȘs`cdca`^][ZYWVTRROIaȘ]bca`^][ZYWVTRPJzȔ]ba`^][ZYWVTQLĊz]``^][ZYWVSMoϿQakit)c^`^][ZYWVQVӦ|H87,Xivtqole X_^][ZYWUL>?> <0Xkxwutsnh~q\^][ZYWRgI\ABCA@?=1XkxwutsqohdW]][ZYVNECEDCA@?=1Xkxwutsqpmg _[][ZYTUjEFFDCA@?=1Xkxwutsqpnkb Y][ZYR݀*CHGFDCA@?=1Xkxwutsqpnmh`߹V\[ZXPۀ[EGIGFDCA@?=1Xkxwutsqpnmj_S[[ZWMֳCIIGFDCA@?=1XkxwutsqpnmlcRZ[ZWLӀ!ӐFJIGFDCA@?=1Xkxwutsqpnmle׀[Z[ZVUrGJIGFDCA@?=1XkxwutsqpnmleqԀdVNG>J@%*/49@@?=1Xkxwutsqpnmle?//.*2Z*61Xkxwutsqpnmlc-0/.+%Ђ XkxwutsqpnmhR-0/.+%  XkxwutsqpkXD=̂/1/.,'  Xkxwutso\ID>f01/.,(`~  XkxwuraMIFA[т 711/.,)-Ђ?  XkxwlTMKHC@ 021/.,*$  XkvaPOMIDP C331/.,*&7Ѓ-  XbVPMLHCz̄ 2431/.,*(#a  DGKHNh 95531/.,*(%) jA bH67531/.,*(&"8Ȉbiȉ\687531/.,*(&$ M͉ȰiiȈS7997531/.,*(&$">ȰiiȇF:;:97531/.,*(&$# +Ȱiiȅh:=><:97531/.,*(&$#!QȰiiȂʜl>@><:97531/.,*(&$#!QȂ ȰiEqaCBCNB@><:97531/.,*(&$#!:NcuzwEAENMLKJIHGEDB@><:97531/.,*(&$#! .TGQRPOMKIGEDB@><:97531/.,*(&$#! +GKPPOMKIGEDB@><:97531/.,*(&$#! )HIKLKIHEDB@?<;886420.-+)'%$"! $DFBA??><<:653210/.,+'%$#""&'*)(''&$## '7OPQPOONMLLKJJIIHGFFEDCCBA@ ?>==<<::97 +>STSSRQPOONMLKJIHGGFEDCCBAA@??>=<<;:988&0SUTSSRQPOONMLKJIHGGFEDCCBAA@??>=<<;:9887-9OPOPOONMLK,JIHGGFEDCCBAA@??>=<;976543wðMJLMNNMLKJIHGGFEDCCBAA@??>;97:yĽwҘJJLMLKJIHGGFEDCCBAA@?>::ȘEIKJIHGGFEDCCBAA?<8ȘaGJKKJIHGGFEDCCBA@eϿ1?MK[)RGIHGGFEDCAJҤxC11(6ETSQONJ CHHGGFEDB=+667676+7FVUTSSPKkcFHGGFED@[!U8::9887,7FVUTSSRPLLBG$FEC=;9;;:9887,7FVUTSSRQOJz MFGGFEBGc9<<;:9887,7FVUTSSRQPNH DGGFE@݀8<%;:9887,7FVUTSSRQPOLJߵBFGFD>ۀ[;<=<<;:9887,7FVUTSSRQPONF@FGFD<ְ9==<<;:9887,7FVUTSSRQPOOI?EGFC;Ӏ!Ӌ;>=<<;:9887,7FVUTSSRQPOOJz׀KDGFCFk<>=<<;:9887,7FVUTSSRQPOOK^ԀTA81(;5#*087,7FVUTSSRQPOOJr* Q "0,7FVUTSSRQPOOIЀЂz  7FVUTSSRQPOK6 7FVUTSSRQM7!˂ 7FVUTSSO9$WTy 7FVUTQ<&"!Cт Ђ67FVUH+$#"! 7FS:&%$"4 .'σ#6;,&%#" h˄ }\$$",Os ! f;b2)LjbiȉI ẢȰiiȈ= 3Ȱiiȇ, ȰiiȅT HȰiiȂɑW Iǂ ȰiEnZG!)  3I^rwuE $%$#"S!   %'&%$#"!  +% %&%$#"!  "!!"!   !   il32 Bׁ;½u¿̀׀'½þĿϻθҼmĵʿϾǽɶ̻ȱ¸͵Ѻһѷū˺ѽ+пλҀƽс ʾƁȿ҂Ђ¬ҁ[¬Ͽ؁Ww}muNQXWXTSQMMLGFBA@=<:6510/-*($_Wappmkigeca^\YXVURPNLJHECA?;+ ldtsqpomkigeb`]\YXUSQOMKHFC@??0?}pjigeb`]\YXUSQOMJO\fkt|AӼzhgeb`]\YXUSQOM`滈ldb`]\YXUSQWwМob`]\YXUS_ޔg`]\YXUY{`]\YXUoʘqcVv`cstqwk]\YWbޯsL@?;(#`ctvspp^\YXv߰eGCB?;(#`ctvsqonޒb[Y]wJFDB?;(#`ctvsqomnۤe[Y`֟OHFDB?;(#`ctvsqomhشh[XcɇHGFDB?;(#`ctvsqomjտhVRaӼo;>??>=;(#`ctvsqomjҺV;4IӺ`#*1##`ctvsqoldРE0->p`ctvspj_V·>0-8Љ# `ctuoeVJlo80-1jӯQ `crl]OJ[\ҹW30-,OД8 ``dWMOhɁ@20-*4yǍE shilvѡO520-+(AϨoP;//H΀ Ҷe<520-+()WҀͻ҂ͧmC8520-+(%-]̂¬\A;8520-+(%"%C¬ɸpO@>;8520-+(%".V{̼vwoe[RGB@>;8520-+(%"%/9DNSsUNPNLJIFC@>;8520-+(%" @?ILNKIGDA?=:741/,*(%" :GHFCB@<;7621,+'&%! :266854332/..-,*)''$#""!?6@ONNMLJIHGFECB@@>=<;99864"MESSPQQPNMLKJIGGFECCA@?><<:88:,7voeUMMLKJIGGFECCA@?=DT_eo|xϴcNLKJIGGFECCA@AWwTJJIGGFECCAIn̐XJIGGFECCQ݆PIGGFECJoyiIGGFECbɕ{m`Uq>AQSP[XGGFDRެmE886#>BRTSQSqpIGFFk߭]?;986#>BRTSRQRo݈OGFLo?<;986#>BRTSRQOUڞSFEQ֚E<<;986#>BRTSRQPMׯWFETȁ<;<;986#>BRTSRQPNԽW@>Qӻg.1565#>BRTSRQPN{ҶC"6ӸW"*>BRTSRQNHК.+h >BRTSQK@9}&$|Ѓ>BRSMB2'Va^ӭG i>BOG7($@ҵD?ϐ. 7;>/%,Ns' pƉ=_IFN]xј71ϦjI6)*H̀ ұQKҀͺ҂̟Z&R̂¬ѽB"7{¬dz[1  Nv̼ya^UG<1% &2?JQo3'(&$#"! 4 !#$$"!  ' !! is32ýUĿľմϸֵӬoөӿ¿Ӿл¿Ӻҹ¿ϡ¿ӣ¿ĿUU[`]ZSPKID@:60"rnjea]YTPKGEibea]YTPwa]YTbs|]Ypf>$dwsl]YGC?$dwsn\XkGC?$dwsnpND=05;$ndwslrӼ1,K dveKӘ1,Ӣ [W^I1,<Ә/ m71,&_̊ͪW<71,&!9ӎc^LGB<71,&!)4UJHA=84-*% *6?@;985531/,)qwSPNKJGECA?<URPGE<:8>URPyFDd<:8>URPY8/2#,4n>URM^ӹ@>UA%Ӑӟ 40?2+ӕ(\Ụ̇;-ӍG=%! "/*"! t8mk@KKhhPPhh##rr vv8r1  #TT#ssttttttttttttttttttttttttttttttMM pp##hhPPhhKKh8mk WW CCzvvvvvvw|  >> ||VVl8mk QҶP ON! ONum;8%$%$%$%$%$%$%$%#%#%#%#%#31YWnlnllj?>LK OϱN s8mkdoublecmd-0.7.1/doublecmd.app/Contents/PkgInfo0000644000175000001440000000001111324120113020263 0ustar alexxusersAPPL???? doublecmd-0.7.1/doublecmd.ext.example0000644000175000001440000001456511606362170016644 0ustar alexxusers# Double Commander extension file # Based on Midnight Commander 3.0 extension file # # All lines starting with # or empty lines are thrown away. # All actions for file is showed in "Actions" submenu of file context popup menu # # File format: # # [extension1|extension2|...|extensionX] # Name=Category name # Icon=Path to icon # action1=command1 # action2=command2 # actionX=commandX # # Where: # # [extension] or [extension1|extension2 ...] - list of extensions (case insensitive !!no regular expression!!) # Also you can use "default" keyword as extension. In this case, if command had not found for sought file type, # then will be used command from this section. # # Name - Name of this category (showed in file association manager) # # Icon - Path to icon that displays for this file types in file panel # # Action can be: # Open - used with tap on Enter or DblClick # View - used with tap on F3 # Edit - used with tap on F4 # other actions only is showed in "Actions" submenu of file context popup menu # # Command is any one-line shell command, with the simple macro substitution. # # Macros should be (case sensitive): # {!VFS} - for archives - use virtual file system # {!EDITOR} - call editor (internal or external by configuration} # {!VIEWER} - call viewer (the same) # {!SHELL} - use shell from configuration to execute program (see mplayer) # - execute 'command' in system shell and save stdout output to file and transfer it as parameter to previous command (see rpm for example...) # %f - filename # %d - directory # %p - path(directory+filename) # Default commands [default] Open=xdg-open %p ### Sources ### # C [c] Open={!EDITOR} %p Compile={!SHELL} cc -O -c %f #Link={!SHELL} cc -O -o %d/`basename %f .c` %f # Fortran [f] Open={!EDITOR} %p Compile={!SHELL} f77 -O -c %f Compile and Link={!SHELL} f77 -O %f # Pascal and Object Pascal :) [dpr|pas|pp] Open={!EDITOR} %p #Compile={!SHELL} fpc %p # Asm [s] Open={!EDITOR} %p Assemble={!SHELL} cc -O -c %f #Link={!SHELL} cc -O -o %d/`basename %f .s` %f # C++ [C|c|cc] Open={!EDITOR} %p Compile={!SHELL} c++ -O -c %f #Link={!SHELL} c++ -O -o %d/`basename %f .c` %f ### Documentation ### # GNU Info page [info] Open={!SHELL} info -f %f # Manual page [man] Open={!SHELL} nroff -Tlatin2 -mandoc %f | less View={!SHELL} nroff -Tlatin2 -mandoc %f ### Sound files ### [wav|WAV|Wav|snd|SND|Snd|voc|VOC|Voc|au|AU|Au] Open={!SHELL} play %f [mod|s3m|xm] Open=xmms %f #Open=mikmod %f #Open=tracker %f [mp3] Open=xmms %p View=mpg123 -tn1 %f 2>&1|grep -E '^(Title|Album|Comment|MPEG|$)' ### Multimedia ### [mpg|mpeg|avi|asf|mov] Open=totem %p #Open=xanim %f #Open=aviplay %f #Open=mtv %f 2>/dev/null& #Open=gtv %f 2>/dev/null& #Open=plaympeg %f 2>/dev/null& #Open=mpeg_play %f & #Open(big)=mpeg_play -dither 2x2 %f & #Open(gray)=mpeg_play -dither gray %f & [rm|ram] Open={!SHELL} mplayer %f #Open=realplay %f& ### Documents ### # Postscript [ps] Open=gv %f View=ps2ascii %f View with GhostView=gv %f # PDF [pdf] Open=xpdf %f #Open=acroread %f #Open=ghostview %f View=pdftotext %f # html [html|htm|mht] Open=opera %p #Open=mozilla %p View=lynx -dump -force_html %p #txt [txt] Open={!EDITOR} %p # StarOffice and OpenOffice [sdw] Open=soffice %f # Open Document Format [odt|ods|odp] Name=Open Document Format View={!VIEWER} # AbiWord [abw] Open=abiword %f # Microsoft Word Document [doc|dot|wri] Open=soffice %f #Open=koffice %f View={!SHELL} catdoc -w %f || word2x -f text %f - || strings %f # Microsoft Excel Worksheet [xls|xlw] Open=soffice %f #Open=koffice %f View=xls2csv %f || strings %f # DVI [dvi] Open=xdvi %f & View=dvi2tty %f Convert file to Postscript=dvips %f # TeX [tex] Open={!EDITOR} %p TeX this file={!SHELL} tex %f LaTeX this file={!SHELL} latex %f csTeX this file={!SHELL} csplain %f csLaTeX this file={!SHELL} cslatex %f ### Miscellaneous ### # dbf [dbf] #Open={!VIEWER} View=dbview -b %f # BitTorrent [torrent] View={!VIEWER} ### Archives ### [tar] Open={!VFS} View={!VIEWER} Extract={!SHELL} tar xf %f [tgz] Open={!VFS} View={!VIEWER} /dev/null | tar tvvf -?> Extract={!SHELL} gzip -dc %f 2>/dev/null | tar xzf - [bz] Open={!VFS} View={!VIEWER} /dev/null?> Extract={!SHELL} bzip -dc %f 2>/dev/null [bz2] Open={!VFS} View={!VIEWER} /dev/null?> Extract={!SHELL} bzip2 -dc %f 2>/dev/null # zip [zip|jar] Open={!VFS} View={!VIEWER} Extract={!SHELL} unzip %f #Extract (with flags)=I=%{Enter any Unzip flags:}; if test -n "$I"; then unzip $I %f; fi Unzip={!SHELL} unzip %f '*' # zoo [zoo] Open={!VFS} View={!VIEWER} Extract={!SHELL} zoo x %f '*' # lha [lha] Open={!VFS} View={!VIEWER} Extract={!SHELL} lharc x %f '*' #Extract (with flags)=I=%{Enter any LHarc flags:}; if test -n "$I"; then lharc x $I %f; fi # arj [arj] Open={!VFS} View={!VIEWER} Extract={!SHELL} unarj x %f '*' #Extract (with flags)=I=%{Enter any Unarj flags:}; if test -n "$I"; then unarj x $I %f; fi # ha [ha] Open={!VFS} View={!VIEWER} Extract={!SHELL} ha xy %f '*' # Extract (with flags)=I=%{Enter any HA flags:}; if test -n "$I"; then ha xy $I %f; fi # rar [rar|r00|r02|r02|r03|r04|r05|r06|r07|r08|r09] Open={!VFS} View={!VIEWER} Extract={!SHELL} rar x -c- %f '*' # Extract (with flags)=I=%{Enter any RAR flags:}; if test -n "$I";then rar x $I %f; fi #compress [Z] Open={!VFS} View={!SHELL} compress -dc %f Extract={!SHELL} compress -dc %f # cpio [cpio] Open={!VFS} View={!SHELL} cat %f | cpio -ictv Extract={!SHELL} cat %f | cpio -ic # gzip [gz] Open={!VFS} View={!VIEWER} /dev/null?> Uncompress={!SHELL} gunzip %f # bzip2 [bz2|bzip2] Open={!VFS} View={!VIEWER} /dev/null?> Uncompress={!SHELL} bunzip2 %f # bzip [bz|bzip] Open={!VFS} View={!VIEWER} /dev/null?> Uncompress={!SHELL} bunzip %f # ace [ace] Open={!VFS} Uncompress={!SHELL} unace e %p # Source RPMs (SuSE uses *.spm, others use *.src.rpm) [spm|srcm] Open={!VFS} View={!VIEWER} Install this RPM={!SHELL} rpm -i %f Rebuild this RPM={!SHELL} rpm --rebuild %f Check signature={!SHELL} rpm --checksig %f # Compiled RPMs [rpm] Open={!VFS} View={!VIEWER} Install this RPM={!SHELL} rpm -i %p Upgrade this RPM={!SHELL} rpm -U %p Check signature={!SHELL} rpm --checksig %f # deb [deb] Open={!VFS} View={!VIEWER} doublecmd-0.7.1/plugins/0000755000175000001440000000000012675717732014217 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/0000755000175000001440000000000012675717732015023 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/sample/0000755000175000001440000000000012675717732016304 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/sample/src/0000755000175000001440000000000012675717732017073 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/sample/src/sample.lpr0000644000175000001440000000335412014201074021046 0ustar alexxuserslibrary Sample; {$mode objfpc}{$H+} {$include calling.inc} uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF unix} baseunix, {$ENDIF} Classes, WfxPlugin, SysUtils; {$E wfx} {$R *.res} var gPluginNr: integer; gProgressProc: tProgressProc; gLogProc: tLogProc; gRequestProc: tRequestProc; function FsInit(PluginNr:integer;pProgressProc:tProgressProc;pLogProc:tLogProc; pRequestProc:tRequestProc):integer; dcpcall; begin gPluginNr:= PluginNr; gProgressProc:= pProgressProc; gLogProc:= pLogProc; gRequestProc:= pRequestProc; Result:= 0; end; function FsFindFirst(path :pchar;var FindData:tWIN32FINDDATA):thandle; dcpcall; begin FillChar(FindData, SizeOf(FindData), 0); FindData.dwFileAttributes :=0; //0 - обычный файл без каких-либо атрибутов StrPCopy(FindData.cFileName,'Hello, world.txt'); //имя файла Result:= 1985; //функция нормально отработала} end; function FsFindNext(Hdl:thandle;var FindData:tWIN32FINDDATA): BOOL; dcpcall; begin // gRequestProc(gPluginNr, RT_URL, nil, nil, nil, 0); Result:= False; end; function FsFindClose(Hdl:thandle):integer; dcpcall; begin Result:= 0; end; function FsRenMovFile(OldName,NewName:pchar;Move,OverWrite:bool; RemoteInfo:pRemoteInfo):integer; dcpcall; begin gRequestProc(gPluginNr, RT_MsgOK, OldName, NewName, nil, 0); Result:= FS_FILE_OK; end; function FsExecuteFile(MainWin:thandle;RemoteName,Verb:pchar):integer; dcpcall; begin gRequestProc(gPluginNr, RT_MsgOK, RemoteName, Verb, nil, 0); Result:= FS_EXEC_OK; end; exports // mandatory FsInit, FsFindFirst, FsFindNext, FsFindClose, // optional FsRenMovFile, FsExecuteFile; begin end. doublecmd-0.7.1/plugins/wfx/sample/src/sample.lpi0000644000175000001440000000424412201667623021052 0ustar alexxusers doublecmd-0.7.1/plugins/wfx/sample/lib/0000755000175000001440000000000012675717732017052 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/gvfs/0000755000175000001440000000000012675717732015770 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/gvfs/src/0000755000175000001440000000000012675717732016557 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/gvfs/src/gvfs.c0000644000175000001440000016242312467651404017670 0ustar alexxusers/* Double Commander ------------------------------------------------------------------------- WFX plugin for working with GVFS Copyright (C) 2009-2010 Koblov Alexander (Alexx2000@mail.ru) Based on: GVFS plugin for Tux Commander Copyright (C) 2008-2009 Tomas Bzatek 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 #include #include #include #include #include #include #include #include #include "wfxplugin.h" #define CONST_DEFAULT_QUERY_INFO_ATTRIBUTES G_FILE_ATTRIBUTE_STANDARD_TYPE "," G_FILE_ATTRIBUTE_STANDARD_NAME "," \ G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "," G_FILE_ATTRIBUTE_STANDARD_SIZE "," \ G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET "," G_FILE_ATTRIBUTE_TIME_MODIFIED "," \ G_FILE_ATTRIBUTE_TIME_ACCESS "," G_FILE_ATTRIBUTE_TIME_CREATED "," \ G_FILE_ATTRIBUTE_UNIX_MODE "," G_FILE_ATTRIBUTE_UNIX_UID "," \ G_FILE_ATTRIBUTE_UNIX_GID #define TUXCMD_DEFAULT_COPY_FLAGS G_FILE_COPY_OVERWRITE | G_FILE_COPY_NOFOLLOW_SYMLINKS #define GROUP_NAME "gvfs" #define PathDelim "/" #define cAddConnection "" #define cQuickConnection "" #define cAnonymous "anonymous" #define cDefaultIniName "gvfs.ini" #define IS_DIR_SEP(ch) ((ch) == '/') #define Int32x32To64(a,b) ((gint64)(a)*(gint64)(b)) typedef int TVFSResult; typedef struct _Connection { gchar *Name; gchar *Type; gchar *Host; gchar *UserName; gchar *Password; gchar *Path; } TConnection, *PConnection; struct TVFSGlobs { PConnection Connection; gchar *RemotePath; GFile *file; GFileEnumerator *enumerator; GFile *enumerated_file; GMainLoop *mount_main_loop; TVFSResult mount_result; int mount_try; gboolean ftp_anonymous; }; typedef struct { gchar *Path; gint Index; GList *list; struct TVFSGlobs *globs; } TListRec, *PListRec; typedef struct _ProgressInfo { gchar SourceName[MAX_PATH]; gchar TargetName[MAX_PATH]; GCancellable *cancellable; } TProgressInfo, *PProgressInfo; //--------------------------------------------------------------------- // global variables //--------------------------------------------------------------------- int gPluginNumber; tProgressProc gProgressProc; tLogProc gLogProc; tRequestProc gRequestProc; gchar gDefaultIniName[MAX_PATH]; GList *ActiveConnectionList; GList *ConnectionList; PConnection gConnection; //--------------------------------------------------------------------- unsigned long FileTimeToUnixTime(LPFILETIME ft) { gint64 ll = ft->dwHighDateTime; ll = (ll << 32) | ft->dwLowDateTime; ll = (ll - 116444736000000000) / 10000000; return (unsigned long)ll; } gboolean UnixTimeToFileTime(unsigned long mtime, LPFILETIME ft) { gint64 ll = Int32x32To64(mtime, 10000000) + 116444736000000000; ft->dwLowDateTime = (DWORD)ll; ft->dwHighDateTime = ll >> 32; return TRUE; } static TVFSResult g_error_to_TVFSResult (GError *error) { g_print ("g_error_to_TVFSResult: code = %d\n", error->code); switch (error->code) { case G_IO_ERROR_FAILED: case G_IO_ERROR_NOT_FOUND: case G_IO_ERROR_PERMISSION_DENIED: return FS_FILE_NOTFOUND; break; case G_IO_ERROR_CANCELLED: return FS_FILE_USERABORT; break; case G_IO_ERROR_NOT_SUPPORTED: case G_IO_ERROR_FILENAME_TOO_LONG: return FS_FILE_NOTSUPPORTED; break; case G_IO_ERROR_IS_DIRECTORY: case G_IO_ERROR_NOT_REGULAR_FILE: case G_IO_ERROR_NOT_SYMBOLIC_LINK: case G_IO_ERROR_NOT_MOUNTABLE_FILE: case G_IO_ERROR_INVALID_FILENAME: case G_IO_ERROR_TOO_MANY_LINKS: case G_IO_ERROR_INVALID_ARGUMENT: case G_IO_ERROR_NOT_DIRECTORY: case G_IO_ERROR_NOT_MOUNTED: case G_IO_ERROR_ALREADY_MOUNTED: case G_IO_ERROR_WRONG_ETAG: case G_IO_ERROR_TIMED_OUT: case G_IO_ERROR_WOULD_RECURSE: case G_IO_ERROR_HOST_NOT_FOUND: return FS_FILE_READERROR; break; case G_IO_ERROR_NO_SPACE: case G_IO_ERROR_EXISTS: case G_IO_ERROR_NOT_EMPTY: case G_IO_ERROR_CLOSED: case G_IO_ERROR_PENDING: case G_IO_ERROR_READ_ONLY: case G_IO_ERROR_CANT_CREATE_BACKUP: case G_IO_ERROR_BUSY: case G_IO_ERROR_WOULD_BLOCK: case G_IO_ERROR_WOULD_MERGE: return FS_FILE_WRITEERROR; break; case G_IO_ERROR_FAILED_HANDLED: default: return FS_FILE_NOTSUPPORTED; } } static void ask_password_cb (GMountOperation *op, const char *message, const char *default_user, const char *default_domain, GAskPasswordFlags flags, gpointer user_data) { struct TVFSGlobs *globs; char username[MAX_PATH]; char password[MAX_PATH]; int anonymous; char domain[MAX_PATH]; GPasswordSave password_save; gboolean mount_handled = FALSE; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); globs->mount_try++; /* First pass, look if we have a password to supply */ if (globs->mount_try == 1) { if ((flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED) && globs->ftp_anonymous) { printf ("(WW) ask_password_cb: mount_try = %d, trying FTP anonymous login...\n", globs->mount_try); g_mount_operation_set_anonymous (op, TRUE); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } if ((flags & G_ASK_PASSWORD_NEED_USERNAME) && (globs->Connection->UserName != NULL)) { printf ("(WW) ask_password_cb: mount_try = %d, trying login with saved username...\n", globs->mount_try); g_mount_operation_set_username (op, globs->Connection->UserName); mount_handled = TRUE; } if ((flags & G_ASK_PASSWORD_NEED_PASSWORD) && (globs->Connection->Password != NULL)) { printf ("(WW) ask_password_cb: mount_try = %d, trying login with saved password...\n", globs->mount_try); g_mount_operation_set_password (op, globs->Connection->Password); mount_handled = TRUE; } if (mount_handled) { g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } } /* Ask user for password */ g_print ("(WW) ask_password_cb: mount_try = %d, message = '%s'\n", globs->mount_try, message); /* Handle abort message from certain backends properly */ /* - e.g. SMB backends use this to mask multiple auth callbacks from smbclient */ if (default_user && strcmp (default_user, "ABORT") == 0) { g_print ("(WW) default_user == \"ABORT\", aborting\n"); g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } username[0] = 0; domain[0] = 0; password[0] = 0; anonymous = FALSE; password_save = G_PASSWORD_SAVE_NEVER; if (gRequestProc) { fprintf (stderr, " (II) Spawning callback_ask_password (%p)...\n", gRequestProc); g_strlcpy(username, default_user, MAX_PATH); g_strlcpy(domain, default_domain, MAX_PATH); if (flags & G_ASK_PASSWORD_NEED_USERNAME) { if (gRequestProc(gPluginNumber, RT_UserName, (char *)message, NULL, username, MAX_PATH)) { g_mount_operation_set_username (op, username); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_NEED_DOMAIN) { if (gRequestProc(gPluginNumber, RT_Other, (char *)message, "Domain:", domain, MAX_PATH)) { g_mount_operation_set_domain (op, domain); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_NEED_PASSWORD) { if (gRequestProc(gPluginNumber, RT_Password, (char *)message, NULL, password, MAX_PATH)) { g_mount_operation_set_password (op, password); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); return; } } if (flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED) g_mount_operation_set_anonymous (op, anonymous); if (flags & G_ASK_PASSWORD_SAVING_SUPPORTED) g_mount_operation_set_password_save (op, password_save); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); return; } /* Unhandled, abort */ g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); } static void ask_question_cb (GMountOperation *op, const gchar *message, const gchar *choices[], gpointer user_data) { struct TVFSGlobs *globs; int len; int choice; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); g_print ("(WW) ask_question_cb: message = '%s'\n", message); len = 0; while (choices[len] != NULL) { g_print ("(WW) ask_question_cb: choice[%d] = '%s'\n", len, choices[len]); len++; } choice = -1; /* if (globs->callback_ask_question) { fprintf (stderr, " (II) Spawning callback_ask_question (%p)...\n", globs->callback_ask_question); // At this moment, only SFTP uses ask_question and the second button is cancellation globs->callback_ask_question (message, choices, &choice, 1, globs->callback_data); fprintf (stderr, " (II) Received choice = %d\n", choice); if (choice >= 0) { g_mount_operation_set_choice (op, choice); g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED); } else { g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED); } return; } */ g_mount_operation_reply (op, G_MOUNT_OPERATION_UNHANDLED); } static void mount_done_cb (GObject *object, GAsyncResult *res, gpointer user_data) { struct TVFSGlobs *globs; gboolean succeeded; GError *error = NULL; globs = (struct TVFSGlobs*) user_data; g_assert (globs != NULL); succeeded = g_file_mount_enclosing_volume_finish (G_FILE (object), res, &error); if (! succeeded) { g_print ("(EE) Error mounting location: %s\n", error->message); globs->mount_result = g_error_to_TVFSResult (error); g_error_free (error); } else { globs->mount_result = FS_FILE_OK; g_print ("(II) Mount successful.\n"); } g_main_loop_quit (globs->mount_main_loop); } static TVFSResult vfs_handle_mount (struct TVFSGlobs *globs, GFile *file) { GMountOperation *op; g_print ("(II) Mounting location...\n"); op = g_mount_operation_new (); g_signal_connect (op, "ask-password", (GCallback)ask_password_cb, globs); g_signal_connect (op, "ask-question", (GCallback)ask_question_cb, globs); globs->mount_result = FS_FILE_NOTFOUND; globs->mount_try = 0; /* Inspiration taken from Bastien Nocera's http://svn.gnome.org/viewvc/totem-pl-parser/trunk/plparse/totem-disc.c?view=markup */ globs->mount_main_loop = g_main_loop_new (NULL, FALSE); g_file_mount_enclosing_volume (file, G_MOUNT_MOUNT_NONE, op, NULL, mount_done_cb, globs); g_main_loop_run (globs->mount_main_loop); g_main_loop_unref (globs->mount_main_loop); globs->mount_main_loop = NULL; g_object_unref (op); return globs->mount_result; } struct TVFSGlobs * VFSNew () { struct TVFSGlobs *globs; globs = (struct TVFSGlobs *) malloc (sizeof (struct TVFSGlobs)); memset (globs, 0, sizeof (struct TVFSGlobs)); globs->file = NULL; globs->enumerator = NULL; globs->enumerated_file = NULL; return globs; } char * VFSGetServices () { GVfs *gvfs; const gchar* const * schemes; char *l = NULL; char *s; gvfs = g_vfs_get_default (); g_print ("(II) GVFS: is_active = %d\n", g_vfs_is_active (gvfs)); schemes = g_vfs_get_supported_uri_schemes (gvfs); for (; *schemes; schemes++) { if (l) { s = g_strdup_printf ("%s;%s", l, *schemes); g_free (l); l = s; } else l = g_strdup (*schemes); } g_print ("(II) GVFS: supported schemes: %s\n", l); return l; } char * VFSGetPrefix (struct TVFSGlobs *globs) { GFile *f; char *s; if (globs->file) { f = g_file_resolve_relative_path (globs->file, "/"); s = g_file_get_uri (f); g_object_unref (f); return s; } else return NULL; } char * VFSGetPath (struct TVFSGlobs *globs) { GFile *root; char *path, *s; if (globs->file) { root = g_file_resolve_relative_path (globs->file, "/"); if (root == NULL) return NULL; path = g_file_get_relative_path (root, globs->file); if (path == NULL) { g_object_unref (root); return NULL; } if (! g_path_is_absolute (path)) s = g_strdup_printf ("/%s", path); else s = g_strdup (path); g_print ("(II) VFSGetPath: '%s'\n", s); g_free (path); g_object_unref (root); return s; } else return NULL; } char * VFSGetPathURI (struct TVFSGlobs *globs) { if (globs->file) return g_file_get_uri (globs->file); else return NULL; } guint64 VFSGetFileSystemFree (struct TVFSGlobs *globs, char *APath) { GFileInfo *info; GError *error; guint64 res; if (globs->file == NULL) return 0; error = NULL; info = g_file_query_filesystem_info (globs->file, G_FILE_ATTRIBUTE_FILESYSTEM_FREE, NULL, &error); if (error) { g_print ("(EE) VFSGetFileSystemFree: %s\n", error->message); g_error_free (error); return 0; } res = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE); g_object_unref (info); return res; } guint64 VFSGetFileSystemSize (struct TVFSGlobs *globs, char *APath) { GFileInfo *info; GError *error; guint64 res; if (globs->file == NULL) return 0; error = NULL; info = g_file_query_filesystem_info (globs->file, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE, NULL, &error); if (error) { g_print ("(EE) VFSGetFileSystemSize: %s\n", error->message); g_error_free (error); return 0; } res = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_SIZE); g_object_unref (info); return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ TVFSResult VFSChangeDir (struct TVFSGlobs *globs, char *NewPath) { GFile *f; GFileEnumerator *en; GError *error, *error_shortcut; TVFSResult res; GFileInfo *info; gchar *target_uri; g_print ("VFSChangeDir: Enter\n"); if (globs->file == NULL) { g_print ("(EE) VFSChangeDir: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } g_print ("(II) VFSChangeDir: changing dir to '%s'\n", NewPath); f = g_file_resolve_relative_path (globs->file, NewPath); if (f == NULL) { g_print ("(EE) VFSChangeDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } res = FS_FILE_OK; while (1) { error = NULL; en = g_file_enumerate_children (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); /* if the target is shortcut, change the URI */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_DIRECTORY)) { error_shortcut = NULL; info = g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error_shortcut); if (info) { target_uri = g_strdup (g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI)); g_object_unref (info); if (target_uri) { g_print ("(WW) VFSChangeDir: following shortcut, changing URI to '%s'\n", target_uri); g_object_unref (f); f = g_file_new_for_uri (target_uri); g_free (target_uri); g_error_free (error); continue; } } if (error_shortcut) g_error_free (error_shortcut); } /* Mount the target */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) { g_error_free (error); res = vfs_handle_mount (globs, f); if (res != FS_FILE_OK) { g_object_unref (f); return res; } else continue; } /* Any other errors --> report */ if (error) { g_print ("(EE) VFSChangeDir: g_file_enumerate_children() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } /* everything ok? */ break; } globs->enumerator = en; globs->enumerated_file = g_file_dup (f); g_object_unref (globs->file); globs->file = f; return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ static void GFileInfoToWin32FindData (GFile *reference_file, GFileInfo *info, WIN32_FIND_DATAA *FindData) { GFileInfo *symlink_info = NULL; GError *error = NULL; g_assert (info != NULL); g_assert (FindData != NULL); g_strlcpy(FindData->cFileName, g_file_info_get_name (info), MAX_PATH); // File size goffset filesize = g_file_info_get_size (info); FindData->nFileSizeLow = (DWORD)filesize; FindData->nFileSizeHigh = filesize >> 32; // File attributes FindData->dwFileAttributes |= FILE_ATTRIBUTE_UNIX_MODE; FindData->dwReserved0 = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE); // File date/time if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED), &FindData->ftLastWriteTime)) { FindData->ftLastWriteTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftLastWriteTime.dwLowDateTime = 0xFFFFFFFE; } if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS), &FindData->ftLastAccessTime)) { FindData->ftLastAccessTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftLastAccessTime.dwLowDateTime = 0xFFFFFFFE; } if (!UnixTimeToFileTime(g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_CREATED), &FindData->ftCreationTime)) { FindData->ftCreationTime.dwHighDateTime = 0xFFFFFFFF; FindData->ftCreationTime.dwLowDateTime = 0xFFFFFFFE; } // g_print ("(II) GFileInfoToWin32FindData: type = %d\n", g_file_info_get_file_type (info)); // g_print ("(II) GFileInfoToWin32FindData: UNIX_MODE = %d\n", FindData->dwReserved0); switch (g_file_info_get_file_type (info)) { case G_FILE_TYPE_DIRECTORY: case G_FILE_TYPE_SHORTCUT: /* Used in network:/// */ case G_FILE_TYPE_MOUNTABLE: FindData->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY; break; case G_FILE_TYPE_SYMBOLIC_LINK: FindData->dwReserved0 |= S_IFLNK; // Check: file is symlink to directory symlink_info = g_file_query_info (reference_file, G_FILE_ATTRIBUTE_UNIX_MODE, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) GFileInfoToWin32FindData: g_file_query_info() error: %s\n", error->message); g_error_free (error); } if (symlink_info) { if (g_file_info_get_file_type (symlink_info) == G_FILE_TYPE_DIRECTORY) { FindData->dwFileAttributes |= FILE_ATTRIBUTE_REPARSE_POINT; } g_object_unref (symlink_info); } break; case G_FILE_TYPE_UNKNOWN: case G_FILE_TYPE_REGULAR: case G_FILE_TYPE_SPECIAL: break; } /* fallback to default file mode if read fails */ if (FindData->dwReserved0 == 0) { if ((FindData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) FindData->dwReserved0 = S_IFDIR + S_IRWXU + S_IRGRP + S_IXGRP + S_IROTH + S_IXOTH; else FindData->dwReserved0 = S_IRUSR + S_IWUSR + S_IRGRP + S_IROTH; } } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ long VFSFileExists (struct TVFSGlobs *globs, const char *FileName, const long Use_lstat) { GFile *f; GError *error; GFileInfo *info; if (globs->file == NULL) { g_print ("(EE) VFSFileExists: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSMkDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; info = g_file_query_info (f, G_FILE_ATTRIBUTE_STANDARD_NAME, Use_lstat ? G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS : G_FILE_QUERY_INFO_NONE, NULL, &error); g_object_unref (f); if (error) { // g_print ("(EE) VFSFileExists: g_file_query_info() error: %s\n", error->message); g_error_free (error); return FALSE; } g_object_unref (info); return TRUE; } TVFSResult VFSFileInfo (struct TVFSGlobs *globs, char *AFileName, WIN32_FIND_DATAA *FindData) { GFile *f; GError *error; GFileInfo *info; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSFileInfo: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, AFileName); if (f == NULL) { g_print ("(EE) VFSMkDir: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; info = g_file_query_info (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSFileInfo: g_file_query_info() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } GFileInfoToWin32FindData (f, info, FindData); g_object_unref (info); g_object_unref (f); return FS_FILE_OK; } TVFSResult VFSRemove (struct TVFSGlobs *globs, const char *APath) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSRemove: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, APath); if (f == NULL) { g_print ("(EE) VFSRemove: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_delete (f, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSRemove: g_file_delete() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSMakeSymLink (struct TVFSGlobs *globs, const char *NewFileName, const char *PointTo) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSMakeSymLink: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, NewFileName); if (f == NULL) { g_print ("(EE) VFSMakeSymLink: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_make_symbolic_link (f, PointTo, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSMakeSymLink: g_file_make_symbolic_link() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSChmod (struct TVFSGlobs *globs, const char *FileName, const uint Mode) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSChmod: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSChmod: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } // g_print ("(II) VFSChmod (%s, %d): Going to set permissions on '%s'\n", FileName, Mode, g_file_get_uri (f)); error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_MODE, Mode, G_FILE_QUERY_INFO_NONE, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) VFSChmod: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } TVFSResult VFSChown (struct TVFSGlobs *globs, const char *FileName, const uint UID, const uint GID) { GFile *f; GError *error; TVFSResult res; if (globs->file == NULL) { g_print ("(EE) VFSChown: globs->file == NULL !\n"); return FS_FILE_NOTFOUND; } f = g_file_resolve_relative_path (globs->file, FileName); if (f == NULL) { g_print ("(EE) VFSChown: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_UID, UID, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) VFSChown: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } error = NULL; g_file_set_attribute_uint32 (f, G_FILE_ATTRIBUTE_UNIX_GID, GID, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) VFSChown: g_file_set_attribute_uint32() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return res; } g_object_unref (f); return FS_FILE_OK; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ gboolean VFSIsOnSameFS (struct TVFSGlobs *globs, const char *Path1, const char *Path2) { GFile *file1, *file2; GFileInfo *info1, *info2; GError *error; gboolean res; if (globs->file == NULL) { g_print ("(EE) VFSIsOnSameFS: globs->file == NULL !\n"); return FALSE; } file1 = g_file_resolve_relative_path (globs->file, Path1); file2 = g_file_resolve_relative_path (globs->file, Path2); if (file1 == NULL) { g_print ("(EE) VFSIsOnSameFS: g_file_resolve_relative_path() failed.\n"); return FALSE; } if (file2 == NULL) { g_print ("(EE) VFSIsOnSameFS: g_file_resolve_relative_path() failed.\n"); return FALSE; } error = NULL; info1 = g_file_query_info (file1, G_FILE_ATTRIBUTE_ID_FILESYSTEM, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) { g_print ("(EE) VFSIsOnSameFS: g_file_query_info() error: %s\n", error->message); g_error_free (error); g_object_unref (file1); g_object_unref (file2); return FALSE; } info2 = g_file_query_info (file2, G_FILE_ATTRIBUTE_ID_FILESYSTEM, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); if (error) { g_print ("(EE) VFSIsOnSameFS: g_file_query_info() error: %s\n", error->message); g_error_free (error); g_object_unref (info1); g_object_unref (file1); g_object_unref (file2); return FALSE; } g_print ("(II) VFSIsOnSameFS: '%s' vs. '%s'\n", g_file_info_get_attribute_string (info1, G_FILE_ATTRIBUTE_ID_FILESYSTEM), g_file_info_get_attribute_string (info2, G_FILE_ATTRIBUTE_ID_FILESYSTEM)); res = strcmp (g_file_info_get_attribute_string (info1, G_FILE_ATTRIBUTE_ID_FILESYSTEM), g_file_info_get_attribute_string (info2, G_FILE_ATTRIBUTE_ID_FILESYSTEM)) == 0; g_object_unref (file1); g_object_unref (file2); g_object_unref (info1); g_object_unref (info2); return res; } gboolean VFSTwoSameFiles (struct TVFSGlobs *globs, const char *Path1, const char *Path2) { GFile *file1, *file2; gboolean res; if (globs->file == NULL) { g_print ("(EE) VFSTwoSameFiles: globs->file == NULL !\n"); return FALSE; } file1 = g_file_resolve_relative_path (globs->file, Path1); file2 = g_file_resolve_relative_path (globs->file, Path2); if (file1 == NULL) { g_print ("(EE) VFSTwoSameFiles: g_file_resolve_relative_path() failed.\n"); return FALSE; } if (file2 == NULL) { g_print ("(EE) VFSTwoSameFiles: g_file_resolve_relative_path() failed.\n"); return FALSE; } /* FIXME: we should do some I/O test, we're esentially comparing strings at the moment */ res = g_file_equal (file1, file2); g_object_unref (file1); g_object_unref (file2); return res; } /**************************************************************************************************************************************/ /**************************************************************************************************************************************/ static void vfs_copy_progress_callback (goffset current_num_bytes, goffset total_num_bytes, gpointer user_data) { PProgressInfo ProgressInfo; int Percent; // g_print ("(II) vfs_copy_progress_callback spawned: current_num_bytes = %lu, total_num_bytes = %lu\n", current_num_bytes, total_num_bytes); if (! user_data) return; ProgressInfo = (PProgressInfo)user_data; if (gProgressProc) { if (total_num_bytes == 0) { Percent = 0; } else { Percent = (current_num_bytes * 100) / total_num_bytes; } if (gProgressProc(gPluginNumber, ProgressInfo->SourceName, ProgressInfo->TargetName, Percent) == 1) { g_cancellable_cancel (ProgressInfo->cancellable); } } } //-------------------------------------------------------------------------------------------- PConnection g_list_lookup(GList *list, gchar *value) { GList* l; PConnection Connection; for( l = g_list_first(list); l != NULL; l = l->next ) { Connection = (PConnection) l->data; // g_print("g_list_lookup: Item = %s\n", Connection->Name); if (strcmp(value, Connection->Name) == 0) { return Connection; } } return NULL; } struct TVFSGlobs * g_list_lookup_globs(GList *list, gchar *value) { GList* l; struct TVFSGlobs *globs; for( l = g_list_first(list); l != NULL; l = l->next ) { globs = (struct TVFSGlobs *) l->data; // g_print("g_list_lookup: Item = %s\n", Connection->Name); if (strcmp(value, globs->Connection->Name) == 0) { return globs; } } return NULL; } gboolean g_key_file_save_to_file(GKeyFile *key_file, const gchar *file, GError **error) { gchar *data = NULL; gsize length = 0; gboolean Result = FALSE; data = g_key_file_to_data(key_file, &length, error); if (data) { Result = g_file_set_contents(file, data, length, error); g_free(data); } return Result; } PConnection NewConnection() { PConnection Connection = (PConnection) malloc(sizeof(TConnection)); memset (Connection, 0, sizeof (TConnection)); return Connection; } void FreeConnection(PConnection Connection) { if (Connection == NULL) { return; } if (Connection->Name != NULL) { free(Connection->Name); } if (Connection->Type != NULL) { free(Connection->Type); } if (Connection->Host != NULL) { free(Connection->Host); } if (Connection->UserName != NULL) { free(Connection->UserName); } if (Connection->Password != NULL) { free(Connection->Password); } if (Connection->Path != NULL) { free(Connection->Path); } free(Connection); Connection = NULL; } void ReadConnectionList() { GKeyFile *KeyFile; GError *error = NULL; TConnection *Connection; gchar key[MAX_PATH]; KeyFile = g_key_file_new(); if (!g_key_file_load_from_file(KeyFile, gDefaultIniName, G_KEY_FILE_KEEP_COMMENTS, &error)) { g_print(error->message); g_error_free(error); } else { int i; int Count = g_key_file_get_integer(KeyFile, GROUP_NAME, "ConnectionCount", NULL); for (i = 1; i <= Count; i++) { Connection = NewConnection(); sprintf(key, "Connection%dName", i); Connection->Name = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dType", i); Connection->Type = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dHost", i); Connection->Host = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dUserName", i); Connection->UserName = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dPassword", i); Connection->Password = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); sprintf(key, "Connection%dPath", i); Connection->Path = g_key_file_get_string(KeyFile, GROUP_NAME, key, NULL); ConnectionList = g_list_append(ConnectionList, Connection); } } g_key_file_free(KeyFile); } void WriteConnectionList() { GKeyFile *KeyFile; GError *error = NULL; GList* l; PConnection Connection; gchar key[MAX_PATH]; int i = 0; KeyFile = g_key_file_new(); for( l = g_list_first(ConnectionList); l != NULL; l = l->next ) { i++; Connection = (PConnection) l->data; if (Connection->Name != NULL) { sprintf(key, "Connection%dName", i); g_print("WriteConnectionList: %s = %s\n", key, Connection->Name); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Name); } if (Connection->Type != NULL) { sprintf(key, "Connection%dType", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Type); } if (Connection->Host != NULL) { sprintf(key, "Connection%dHost", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Host); } if (Connection->UserName != NULL) { sprintf(key, "Connection%dUserName", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->UserName); } if (Connection->Password != NULL) { sprintf(key, "Connection%dPassword", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Password); } if (Connection->Path != NULL) { sprintf(key, "Connection%dPath", i); g_key_file_set_string(KeyFile, GROUP_NAME, key, Connection->Path); } } // save connection count g_key_file_set_integer(KeyFile, GROUP_NAME, "ConnectionCount", i); // save data to file if (!g_key_file_save_to_file(KeyFile, gDefaultIniName, &error)) { if (error) { g_print ("(EE) Impossible to write config file: %s\n", error->message); g_error_free (error); } } g_key_file_free(KeyFile); } struct TVFSGlobs * NetworkConnect(gchar *ConnectionName) { struct TVFSGlobs *globs; g_print("NetworkConnect: Enter\n"); // find in active connection list globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, ConnectionName); if (globs == NULL) { // find in exists connection list PConnection Connection = (PConnection) g_list_lookup(ConnectionList, ConnectionName); if (Connection != NULL) { GFile *f, *f2; GFileInfo *info; GError *error; TVFSResult res; globs = VFSNew(NULL); globs->file = NULL; globs->ftp_anonymous = FALSE; globs->Connection = Connection; g_print("NetworkConnect: Host = %s\n", Connection->Host); gchar *Host = Connection->Host; if (strcmp (Connection->UserName, cAnonymous) == 0) { globs->ftp_anonymous = TRUE; } g_print ("(II) NetworkConnect: opening URI '%s'\n", Host); f = g_file_new_for_commandline_arg (Host); while (1) { error = NULL; g_print ("(II) NetworkConnect: Before - g_file_query_info\n"); info = g_file_query_info (f, CONST_DEFAULT_QUERY_INFO_ATTRIBUTES, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, NULL, &error); g_print ("(II) NetworkConnect: After - g_file_query_info\n"); /* Fallback to parent directory if specified path doesn't exist */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND)) { g_print ("(II) NetworkConnect: Fallback to parent directory\n"); f2 = g_file_get_parent (f); if (f2) { g_object_unref (f); f = f2; g_error_free (error); continue; } } g_print ("(II) NetworkConnect: Before - Mount the target\n"); /* Mount the target */ if (error && g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) { g_print ("(II) NetworkConnect: Mount the target\n"); g_error_free (error); error = NULL; res = vfs_handle_mount (globs, f); if (res != FS_FILE_OK) return NULL; else continue; } /* Any other errors --> report */ if (error) { g_print ("(EE) NetworkConnect: g_file_query_info() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (f); return NULL; } /* everything ok? */ break; } // while globs->file = f; ActiveConnectionList = g_list_append(ActiveConnectionList, globs); g_print("NetworkConnect: Exit = True\n"); return globs; } } return globs; } gboolean AddQuickConnection(PConnection Connection) { char host[MAX_PATH], home_dir[MAX_PATH], user[MAX_PATH], pwd[MAX_PATH]; host[0] = 0; user[0] = 0; pwd[0] = 0; home_dir[0] = '/'; home_dir[1] = 0; if (gRequestProc(gPluginNumber, RT_URL, NULL, NULL, host, MAX_PATH)) { Connection->Host = strdup(host); if (gRequestProc(gPluginNumber, RT_TargetDir, NULL, NULL, home_dir, MAX_PATH)) { Connection->Path = strdup(home_dir); /* test for FTP protocol (we only enable anonymous here) */ if (strcasestr (host, "ftp://") == host) { if (gRequestProc(gPluginNumber, RT_MsgYesNo, NULL, "Use anonymous login?", NULL, MAX_PATH)) { Connection->UserName = strdup(cAnonymous); return TRUE; } } if (gRequestProc(gPluginNumber, RT_UserName, NULL, NULL, user, MAX_PATH)) { Connection->UserName = strdup(user); if (gRequestProc(gPluginNumber, RT_Password, NULL, NULL, pwd, MAX_PATH)) { Connection->Password = strdup(pwd); return TRUE; } } } } return FALSE; } gboolean QuickConnection() { g_print("QuickConnection: Enter\n"); gboolean Result = FALSE; PConnection Connection = NewConnection(); if (AddQuickConnection(Connection)) { Connection->Name = strdup(cQuickConnection); ConnectionList = g_list_append(ConnectionList, Connection); Result = (NetworkConnect(Connection->Name) != NULL); ConnectionList = g_list_remove(ConnectionList, Connection); } if (!Result) { FreeConnection(Connection); } g_print("QuickConnection: Exit\n"); return Result; } void AddConnection() { g_print("AddConnection: Enter\n"); gchar name[MAX_PATH]; gboolean bCancel = TRUE; name[0] = 0; gConnection = NewConnection(); if (gRequestProc(gPluginNumber, RT_Other, "Network", "Connection name:", name, MAX_PATH)) { unsigned int i; for(i = 0; i < strlen(name); i++) { if (name[i] == '/') name[i] = '_'; } gConnection->Name = strdup(name); if (AddQuickConnection(gConnection)) { ConnectionList = g_list_append(ConnectionList, gConnection); bCancel = FALSE; } } if (bCancel) { FreeConnection(gConnection); } else { WriteConnectionList(); } g_print("AddConnection: Exit\n"); } gchar *ExtractConnectionName(gchar *Path) { if (Path == NULL) return NULL; char *tmp; if (IS_DIR_SEP(*Path)) tmp = strdup(Path + 1); else tmp = strdup(Path); char *connection_part = strchr(tmp, 0x2f); if (connection_part == NULL) { return tmp; } char *connection_name = (char*)malloc(connection_part - tmp + 1); snprintf(connection_name, connection_part - tmp + 1, "%s", tmp); free(tmp); return connection_name; } gchar *ExtractRemoteFileName(gchar *FileName) { if (FileName == NULL) return NULL; char *tmp; if (IS_DIR_SEP(*FileName)) tmp = strdup(FileName + 1); else tmp = strdup(FileName); char *file_name_part = strchr(tmp, 0x2f); if (file_name_part == NULL) { free(tmp); return PathDelim; } char *file_name = strdup(file_name_part); free(tmp); return file_name; } struct TVFSGlobs * GetConnectionByPath(gchar *Path) { struct TVFSGlobs *globs; gchar *ConnectionName = ExtractConnectionName(Path); g_print("GetConnectionByPath: ConnectionName = %s\n", ConnectionName); globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, ConnectionName); if (globs == NULL) { globs = NetworkConnect(ConnectionName); free(ConnectionName); return globs; } free(ConnectionName); /* if (globs->RemotePath != NULL) { free(globs->RemotePath); } */ globs->RemotePath = ExtractRemoteFileName(Path); g_print("GetConnectionByPath: RemotePath = %s\n", globs->RemotePath); return globs; } BOOL LocalFindNext(HANDLE Hdl, WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) Hdl; if (ListRec == NULL) { g_print("LocalFindNext: ListRec == NULL !\n"); return FALSE; } g_print("LocalFindNext: Path == %s\n", ListRec->Path); switch (ListRec->Index) { case 0: { g_print("LocalFindNext: Item == %s\n", cAddConnection); strcpy(FindData->cFileName, cAddConnection); break; } case 1: { g_print("LocalFindNext: Item == %s\n", cQuickConnection); strcpy(FindData->cFileName, cQuickConnection); break; } default: { if (ListRec->list == NULL) { return FALSE; } PConnection Connection = (PConnection) ListRec->list->data; g_strlcpy(FindData->cFileName, Connection->Name, MAX_PATH); ListRec->list = g_list_next(ListRec->list); return TRUE; } } g_print("LocalFindNext: Exit\n"); ListRec->Index++; return TRUE; } BOOL RemoteFindNext(HANDLE Hdl, WIN32_FIND_DATAA *FindData) { PListRec ListRec; struct TVFSGlobs *globs; char *sDir; GError *error; GFileInfo *info; GFile *f; g_print ("(EE) RemoteFindNext: Enter\n"); ListRec = (PListRec) Hdl; globs = ListRec->globs; sDir = ExtractRemoteFileName(ListRec->Path); if (globs->file == NULL) { g_print ("(EE) RemoteFindNext: globs->file == NULL !\n"); return FALSE; } if (globs->enumerator == NULL) { g_print ("(EE) RemoteFindNext: globs->enumerator == NULL !\n"); return FALSE; } error = NULL; info = g_file_enumerator_next_file (globs->enumerator, NULL, &error); if (error) { g_print ("(EE) RemoteFindNext: g_file_enumerator_next_file() error: %s\n", error->message); g_error_free (error); return FALSE; } if (! error && ! info) return FALSE; f = g_file_get_child (globs->enumerated_file, g_file_info_get_name (info)); GFileInfoToWin32FindData(f, info, FindData); g_object_unref (f); g_object_unref (info); return TRUE; } // Export functions-------------------------------------------------------------------------------------- int DCPCALL FsInit(int PluginNr,tProgressProc pProgressProc, tLogProc pLogProc,tRequestProc pRequestProc) { gProgressProc = pProgressProc; gLogProc = pLogProc; gRequestProc = pRequestProc; gPluginNumber = PluginNr; ActiveConnectionList = NULL; ConnectionList = NULL; g_type_init(); return 0; } HANDLE DCPCALL FsFindFirst(char* Path,WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) malloc(sizeof(TListRec)); memset(ListRec, 0, sizeof(TListRec)); ListRec->Path = Path; ListRec->Index = 0; HANDLE Handle = (HANDLE) ListRec; memset(FindData, 0, sizeof(WIN32_FIND_DATAA)); if (strcmp(Path, PathDelim) == 0) { ListRec->list = g_list_first(ConnectionList); LocalFindNext(Handle, FindData); return Handle; } else { ListRec->globs = GetConnectionByPath(Path); if (ListRec->globs == NULL) { free(ListRec); return (HANDLE)(-1); } VFSChangeDir(ListRec->globs, ListRec->globs->RemotePath); g_print("Call RemoteFindNext = %s\n", ListRec->globs->RemotePath); if (!RemoteFindNext(Handle, FindData)) { free(ListRec); return (HANDLE)(-1); } return Handle; } } BOOL DCPCALL FsFindNext(HANDLE Hdl,WIN32_FIND_DATAA *FindData) { PListRec ListRec = (PListRec) Hdl; memset(FindData, 0, sizeof(WIN32_FIND_DATAA)); if (strcmp(ListRec->Path, PathDelim) == 0) { return LocalFindNext(Hdl, FindData); } else { return RemoteFindNext(Hdl, FindData); } } int DCPCALL FsFindClose(HANDLE Hdl) { PListRec ListRec; GError *error; TVFSResult res; ListRec = (PListRec) Hdl; if (ListRec->globs == NULL) { g_print ("(EE) FsFindClose: ListRec->globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (ListRec->globs->file == NULL) { g_print ("(EE) FsFindClose: ListRec->globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (ListRec->globs->enumerator == NULL) { g_print ("(EE) FsFindClose: ListRec->globs->enumerator == NULL !\n"); return FS_FILE_NOTSUPPORTED; } g_print ("(II) FsFindClose\n"); error = NULL; g_file_enumerator_close (ListRec->globs->enumerator, NULL, &error); g_object_unref (ListRec->globs->enumerator); ListRec->globs->enumerator = NULL; g_object_unref (ListRec->globs->enumerated_file); ListRec->globs->enumerated_file = NULL; if (error) { g_print ("(EE) FsFindClose: g_file_enumerator_close() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); return res; } return FS_FILE_OK; } BOOL DCPCALL FsMkDir(char* Path) { struct TVFSGlobs *globs; GFile *f; GError *error; globs = GetConnectionByPath(Path); if (globs == NULL) { g_print ("(EE) FsMkDir: globs == NULL !\n"); return FALSE; } if (globs->file == NULL) { g_print ("(EE) FsMkDir: globs->file == NULL !\n"); return FALSE; } f = g_file_resolve_relative_path (globs->file, globs->RemotePath); if (f == NULL) { g_print ("(EE) FsMkDir: g_file_resolve_relative_path() failed.\n"); return FALSE; } error = NULL; g_file_make_directory (f, NULL, &error); g_object_unref (f); if (error) { g_print ("(EE) FsMkDir: g_file_make_directory() error: %s\n", error->message); g_error_free (error); return FALSE; } return TRUE; } BOOL DCPCALL FsRemoveDir(char* RemoteName) { struct TVFSGlobs *globs; globs = GetConnectionByPath(RemoteName); return (VFSRemove(globs, globs->RemotePath) == FS_FILE_OK); } int DCPCALL FsRenMovFile(char* OldName,char* NewName,BOOL Move, BOOL OverWrite,RemoteInfoStruct* ri) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; char *sSrcName; char *sDstName; globs = GetConnectionByPath(OldName); if (globs == NULL) { g_print ("(EE) FsRenMovFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsRenMovFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } sSrcName = globs->RemotePath; sDstName = ExtractRemoteFileName(NewName); src = g_file_resolve_relative_path (globs->file, sSrcName); if (src == NULL) { g_print ("(EE) FsRenMovFile: g_file_resolve_relative_path() failed.\n"); return FS_FILE_NOTFOUND; } g_print ("FsRenMovFile: '%s' --> '%s'\n", sSrcName, sDstName); error = NULL; g_file_set_display_name (src, sDstName, NULL, &error); if (error) { g_print ("(WW) FsRenMovFile: g_file_set_display_name() failed (\"%s\"), using fallback g_file_move()\n", error->message); g_error_free (error); dst = g_file_resolve_relative_path (src, sDstName); if (dst == NULL) { g_print ("(EE) FsRenMovFile: g_file_resolve_relative_path() failed.\n"); g_object_unref (src); return FS_FILE_NOTFOUND; } error = NULL; g_file_move (src, dst, G_FILE_COPY_NO_FALLBACK_FOR_MOVE, NULL, NULL, NULL, &error); if (error) { g_print ("(EE) FsRenMovFile: g_file_move() error: %s\n", error->message); res = g_error_to_TVFSResult (error); g_error_free (error); g_object_unref (src); g_object_unref (dst); return res; } g_object_unref (dst); } g_object_unref (src); return FS_FILE_OK; } int DCPCALL FsGetFile(char* RemoteName,char* LocalName,int CopyFlags, RemoteInfoStruct* ri) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; PProgressInfo ProgressInfo; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsGetFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsGetFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } ProgressInfo = (PProgressInfo) g_malloc(sizeof(TProgressInfo)); g_strlcpy(ProgressInfo->SourceName, globs->RemotePath, MAX_PATH); g_strlcpy(ProgressInfo->TargetName, LocalName, MAX_PATH); g_print ("(II) FsGetFile: '%s' --> '%s'\n", ProgressInfo->SourceName, ProgressInfo->TargetName); src = g_file_resolve_relative_path (globs->file, ProgressInfo->SourceName); if (src == NULL) { g_print ("(EE) FsGetFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } dst = g_file_new_for_path (ProgressInfo->TargetName); if (dst == NULL) { g_print ("(EE) FsGetFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } ProgressInfo->cancellable = g_cancellable_new (); res = FS_FILE_OK; error = NULL; g_file_copy (src, dst, TUXCMD_DEFAULT_COPY_FLAGS, ProgressInfo->cancellable, vfs_copy_progress_callback, ProgressInfo, &error); if (error) { g_print ("(EE) FsGetFile: g_file_copy() error: %s\n", error->message); // res = g_error_to_TVFSResult (error); if (error->code == G_IO_ERROR_CANCELLED) res = FS_FILE_USERABORT; else res = FS_FILE_READERROR; g_error_free (error); } g_object_unref (ProgressInfo->cancellable); g_free(ProgressInfo); g_object_unref (src); g_object_unref (dst); return res; } int DCPCALL FsPutFile(char* LocalName,char* RemoteName,int CopyFlags) { struct TVFSGlobs *globs; GFile *src, *dst; GError *error; TVFSResult res; PProgressInfo ProgressInfo; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsPutFile: globs == NULL !\n"); return FS_FILE_NOTSUPPORTED; } if (globs->file == NULL) { g_print ("(EE) FsPutFile: globs->file == NULL !\n"); return FS_FILE_NOTSUPPORTED; } ProgressInfo = (PProgressInfo) g_malloc(sizeof(TProgressInfo)); g_strlcpy(ProgressInfo->SourceName, LocalName, MAX_PATH); g_strlcpy(ProgressInfo->TargetName, globs->RemotePath, MAX_PATH); g_print ("(II) FsPutFile: '%s' --> '%s'\n", ProgressInfo->SourceName, ProgressInfo->TargetName); src = g_file_new_for_path (ProgressInfo->SourceName); if (src == NULL) { g_print ("(EE) FsPutFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } dst = g_file_resolve_relative_path (globs->file, ProgressInfo->TargetName); if (dst == NULL) { g_print ("(EE) FsPutFile: g_file_resolve_relative_path() failed.\n"); g_free(ProgressInfo); return FS_FILE_NOTFOUND; } ProgressInfo->cancellable = g_cancellable_new (); res = FS_FILE_OK; error = NULL; /* FIXME: Appending not supported */ g_file_copy (src, dst, TUXCMD_DEFAULT_COPY_FLAGS, ProgressInfo->cancellable, vfs_copy_progress_callback, ProgressInfo, &error); if (error) { g_print ("(EE) FsPutFile: g_file_copy() error: %s\n", error->message); // res = g_error_to_TVFSResult (error); if (error->code == G_IO_ERROR_CANCELLED) res = FS_FILE_USERABORT; else res = FS_FILE_WRITEERROR; g_error_free (error); } g_object_unref (ProgressInfo->cancellable); g_free(ProgressInfo); g_object_unref (src); g_object_unref (dst); return res; } int DCPCALL FsExecuteFile(HWND MainWin,char* RemoteName,char* Verb) { g_print("FsExecuteFile: Item = %s, Verb = %s\n", RemoteName + 1, Verb); if (strcmp(Verb,"open") == 0) { if (strrchr(RemoteName, 0x2f) == RemoteName) // root path { if (strchr(RemoteName, 0x3c) == NULL) // connection { struct TVFSGlobs *globs = NetworkConnect(RemoteName + 1); if (globs != NULL) { // go to Connection->Path g_strlcat(RemoteName, globs->Connection->Path, MAX_PATH); return FS_EXEC_SYMLINK; } return FS_EXEC_ERROR; } else // special item { if (strcmp(RemoteName + 1, cAddConnection) == 0) { AddConnection(); } else if (strcmp(RemoteName + 1, cQuickConnection) == 0) { if (QuickConnection()) return FS_EXEC_SYMLINK; else return FS_EXEC_ERROR; } } } // root path return FS_EXEC_OK; } else if (strcmp(Verb,"properties") == 0) { return FS_EXEC_OK; } else if (strstr(Verb, "chmod ") != NULL) { struct TVFSGlobs *globs; uint Mode = (uint) strtol(strchr(Verb, 0x20) + 1, NULL, 8); globs = GetConnectionByPath(RemoteName); if (VFSChmod(globs, globs->RemotePath, Mode) != FS_FILE_OK) { return FS_EXEC_ERROR; } } return FS_EXEC_OK; } BOOL DCPCALL FsDeleteFile(char* RemoteName) { if (strrchr(RemoteName, 0x2f) == RemoteName) // root path { if (strchr(RemoteName, 0x3c) == NULL) // connection { // find in exists connection list PConnection Connection = (PConnection) g_list_lookup(ConnectionList, RemoteName + 1); if (Connection != NULL) { ConnectionList = g_list_remove(ConnectionList, Connection); WriteConnectionList(); return TRUE; } } return FALSE; } struct TVFSGlobs *globs = GetConnectionByPath(RemoteName); return (VFSRemove(globs, globs->RemotePath) == FS_FILE_OK); } BOOL DCPCALL FsSetTime(char* RemoteName,FILETIME *CreationTime, FILETIME *LastAccessTime,FILETIME *LastWriteTime) { struct TVFSGlobs *globs; GFile *f; GError *error; long mtime; long atime; long ctime; globs = GetConnectionByPath(RemoteName); if (globs == NULL) { g_print ("(EE) FsSetTime: globs == NULL !\n"); return FALSE; } if (globs->file == NULL) { g_print ("(EE) FsSetTime: globs->file == NULL !\n"); return FALSE; } f = g_file_resolve_relative_path (globs->file, globs->RemotePath); if (f == NULL) { g_print ("(EE) FsSetTime: g_file_resolve_relative_path() failed.\n"); return FALSE; } ctime = FileTimeToUnixTime(CreationTime); atime = FileTimeToUnixTime(LastAccessTime); mtime = FileTimeToUnixTime(LastWriteTime); error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_MODIFIED, mtime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); g_object_unref (f); return FALSE; } error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_ACCESS, atime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); /* Silently drop the error, atime is not commonly supported on most systems */ } error = NULL; g_file_set_attribute_uint64 (f, G_FILE_ATTRIBUTE_TIME_CREATED, ctime, G_FILE_QUERY_INFO_NONE, NULL, &error); if (error) { g_print ("(EE) FsSetTime: g_file_set_attribute_uint64() error: %s\n", error->message); g_error_free (error); /* Silently drop the error, ctime is not commonly supported on most systems */ } g_object_unref (f); return TRUE; } BOOL DCPCALL FsDisconnect(char *DisconnectRoot) { struct TVFSGlobs *globs; g_print("FsDisconnect: DisconnectRoot == %s\n", DisconnectRoot); globs = (struct TVFSGlobs *) g_list_lookup_globs(ActiveConnectionList, DisconnectRoot); if (globs != NULL) { if (globs->file) g_object_unref (globs->file); globs->file = NULL; ActiveConnectionList = g_list_remove(ActiveConnectionList, globs); free (globs); return TRUE; } return FALSE; } void DCPCALL FsSetDefaultParams(FsDefaultParamStruct* dps) { // use default location, but our own ini file name g_strlcpy(gDefaultIniName, dps->DefaultIniName, MAX_PATH - 1); gchar* tmp = strrchr(gDefaultIniName, 0x2f); if (tmp) { tmp[1] = 0; g_strlcat(gDefaultIniName, cDefaultIniName, sizeof(gDefaultIniName) - 1); } g_print ("gDefaultIniName: %s\n", gDefaultIniName); ReadConnectionList(); } void DCPCALL FsGetDefRootName(char* DefRootName,int maxlen) { g_strlcpy(DefRootName, "Network", maxlen); } //-------------------------------------------------- doublecmd-0.7.1/plugins/wfx/gvfs/src/Makefile0000644000175000001440000000104311610507422020172 0ustar alexxusers# compiler options CC = gcc CFLAGS =-I. -I/usr/include -I../../../../sdk \ -Wall -fPIC -O2 -g \ -DG_DISABLE_DEPRECATED -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_GNU_SOURCE LIB_SUFFIX=`if test \`uname -m\` = x86_64; then echo 64; fi` VFS_OBJECTS=gvfs.o .SUFFIXES: .c .c.o: $(CC) $(CFLAGS) `pkg-config glib-2.0 gio-2.0 --cflags` -c $< all shared static: gvfs.wfx gvfs.wfx: $(VFS_OBJECTS) $(CC) -shared -o ../lib/gvfs.wfx $(VFS_OBJECTS) $(CFLAGS) `pkg-config glib-2.0 gio-2.0 --libs` clean: rm -f *.o *.d *.gch rm -f ../lib/gvfs.wfx doublecmd-0.7.1/plugins/wfx/gvfs/lib/0000755000175000001440000000000012675717732016536 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/gvfs/COPYING.txt0000644000175000001440000004310312014201074017610 0ustar alexxusers 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. Copyright (C) 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. , 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. doublecmd-0.7.1/plugins/wfx/gvfs/README.txt0000644000175000001440000000210012014201074017425 0ustar alexxusersDouble Commander -------------------------------------------------------------------------------- WFX plugin for working with GVFS Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) Based on: GVFS plugin for Tux Commander Copyright (C) 2008 Tomas Bzatek http://tuxcmd.sourceforge.net Requirements: - glib2 library at least version 2.16.0 - gvfs daemon and backends available in the system (check your distribution for gvfs packages) This is the GVFS plugin for Double Commander file manager. It's built on top of the GVFS daemon, which is an integral part of Gnome Desktop since version 2.22. It provides access to many type of resources such as network shares (FTP, SSH/SFTP, SMB, WebDAV), bluetooth devices (ObexFTP), cameras and portable players (gphoto2) and others. Feature highlights: * read/write access to network resources (FTP, SSH/SFTP, SMB, WebDAV) For successful compilation you will need working gcc compiler and glib2 library installed with development files. Compilation has been tested with gcc compiler v4.3.1 doublecmd-0.7.1/plugins/wfx/ftp/0000755000175000001440000000000012675717732015614 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/ftp/synapse/0000755000175000001440000000000012675717732017276 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/ftp/synapse/license.txt0000644000175000001440000000415412166066407021454 0ustar alexxusersCopyright (c)1999-2002, Lukas Gebauer All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Lukas Gebauer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. doublecmd-0.7.1/plugins/wfx/ftp/synapse/synacode.pas0000644000175000001440000014265612014201074021574 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 002.002.001 | |==============================================================================| | Content: Coding and decoding support | |==============================================================================| | Copyright (c)1999-2012, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2000-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(Various encoding and decoding support)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} {$TYPEDADDRESS OFF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synacode; interface uses SysUtils; type TSpecials = set of AnsiChar; const SpecialChar: TSpecials = ['=', '(', ')', '[', ']', '<', '>', ':', ';', ',', '@', '/', '?', '\', '"', '_']; NonAsciiChar: TSpecials = [#0..#31, #127..#255]; URLFullSpecialChar: TSpecials = [';', '/', '?', ':', '@', '=', '&', '#', '+']; URLSpecialChar: TSpecials = [#$00..#$20, '_', '<', '>', '"', '%', '{', '}', '|', '\', '^', '~', '[', ']', '`', #$7F..#$FF]; TableBase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; TableBase64mod = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,='; TableUU = '`!"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_'; TableXX = '+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; ReTablebase64 = #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$3E +#$40 +#$40 +#$40 +#$3F +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$01 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; ReTableUU = #$01 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$3E +#$3F +#$00 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; ReTableXX = #$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$00 +#$40 +#$01 +#$40 +#$40 +#$02 +#$03 +#$04 +#$05 +#$06 +#$07 +#$08 +#$09 +#$0A +#$0B +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$0C +#$0D +#$0E +#$0F +#$10 +#$11 +#$12 +#$13 +#$14 +#$15 +#$16 +#$17 +#$18 +#$19 +#$1A +#$1B +#$1C +#$1D +#$1E +#$1F +#$20 +#$21 +#$22 +#$23 +#$24 +#$25 +#$40 +#$40 +#$40 +#$40 +#$40 +#$40 +#$26 +#$27 +#$28 +#$29 +#$2A +#$2B +#$2C +#$2D +#$2E +#$2F +#$30 +#$31 +#$32 +#$33 +#$34 +#$35 +#$36 +#$37 +#$38 +#$39 +#$3A +#$3B +#$3C +#$3D +#$3E +#$3F +#$40 +#$40 +#$40 +#$40 +#$40 +#$40; {:Decodes triplet encoding with a given character delimiter. It is used for decoding quoted-printable or URL encoding.} function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; {:Decodes a string from quoted printable form. (also decodes triplet sequences like '=7F')} function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; {:Decodes a string of URL encoding. (also decodes triplet sequences like '%7F')} function DecodeURL(const Value: AnsiString): AnsiString; {:Performs triplet encoding with a given character delimiter. Used for encoding quoted-printable or URL encoding.} function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; Specials: TSpecials): AnsiString; {:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) are encoded.} function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; {:Encodes a string to triplet quoted printable form. All @link(NonAsciiChar) and @link(SpecialChar) are encoded.} function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; {:Encodes a string to URL format. Used for encoding data from a form field in HTTP, etc. (Encodes all critical characters including characters used as URL delimiters ('/',':', etc.)} function EncodeURLElement(const Value: AnsiString): AnsiString; {:Encodes a string to URL format. Used to encode critical characters in all URLs.} function EncodeURL(const Value: AnsiString): AnsiString; {:Decode 4to3 encoding with given table. If some element is not found in table, first item from table is used. This is good for buggy coded items by Microsoft Outlook. This software sometimes using wrong table for UUcode, where is used ' ' instead '`'.} function Decode4to3(const Value, Table: AnsiString): AnsiString; {:Decode 4to3 encoding with given REVERSE table. Using this function with reverse table is much faster then @link(Decode4to3). This function is used internally for Base64, UU or XX decoding.} function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; {:Encode by system 3to4 (used by Base64, UU coding, etc) by given table.} function Encode3to4(const Value, Table: AnsiString): AnsiString; {:Decode string from base64 format.} function DecodeBase64(const Value: AnsiString): AnsiString; {:Encodes a string to base64 format.} function EncodeBase64(const Value: AnsiString): AnsiString; {:Decode string from modified base64 format. (used in IMAP, for example.)} function DecodeBase64mod(const Value: AnsiString): AnsiString; {:Encodes a string to modified base64 format. (used in IMAP, for example.)} function EncodeBase64mod(const Value: AnsiString): AnsiString; {:Decodes a string from UUcode format.} function DecodeUU(const Value: AnsiString): AnsiString; {:encode UUcode. it encode only datas, you must also add header and footer for proper encode.} function EncodeUU(const Value: AnsiString): AnsiString; {:Decodes a string from XXcode format.} function DecodeXX(const Value: AnsiString): AnsiString; {:decode line with Yenc code. This code is sometimes used in newsgroups.} function DecodeYEnc(const Value: AnsiString): AnsiString; {:Returns a new CRC32 value after adding a new byte of data.} function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; {:return CRC32 from a value string.} function Crc32(const Value: AnsiString): Integer; {:Returns a new CRC16 value after adding a new byte of data.} function UpdateCrc16(Value: Byte; Crc16: Word): Word; {:return CRC16 from a value string.} function Crc16(const Value: AnsiString): Word; {:Returns a binary string with a RSA-MD5 hashing of "Value" string.} function MD5(const Value: AnsiString): AnsiString; {:Returns a binary string with HMAC-MD5 hash.} function HMAC_MD5(Text, Key: AnsiString): AnsiString; {:Returns a binary string with a RSA-MD5 hashing of string what is constructed by repeating "value" until length is "Len".} function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; {:Returns a binary string with a SHA-1 hashing of "Value" string.} function SHA1(const Value: AnsiString): AnsiString; {:Returns a binary string with HMAC-SHA1 hash.} function HMAC_SHA1(Text, Key: AnsiString): AnsiString; {:Returns a binary string with a SHA-1 hashing of string what is constructed by repeating "value" until length is "Len".} function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; {:Returns a binary string with a RSA-MD4 hashing of "Value" string.} function MD4(const Value: AnsiString): AnsiString; implementation const Crc32Tab: array[0..255] of Integer = ( Integer($00000000), Integer($77073096), Integer($EE0E612C), Integer($990951BA), Integer($076DC419), Integer($706AF48F), Integer($E963A535), Integer($9E6495A3), Integer($0EDB8832), Integer($79DCB8A4), Integer($E0D5E91E), Integer($97D2D988), Integer($09B64C2B), Integer($7EB17CBD), Integer($E7B82D07), Integer($90BF1D91), Integer($1DB71064), Integer($6AB020F2), Integer($F3B97148), Integer($84BE41DE), Integer($1ADAD47D), Integer($6DDDE4EB), Integer($F4D4B551), Integer($83D385C7), Integer($136C9856), Integer($646BA8C0), Integer($FD62F97A), Integer($8A65C9EC), Integer($14015C4F), Integer($63066CD9), Integer($FA0F3D63), Integer($8D080DF5), Integer($3B6E20C8), Integer($4C69105E), Integer($D56041E4), Integer($A2677172), Integer($3C03E4D1), Integer($4B04D447), Integer($D20D85FD), Integer($A50AB56B), Integer($35B5A8FA), Integer($42B2986C), Integer($DBBBC9D6), Integer($ACBCF940), Integer($32D86CE3), Integer($45DF5C75), Integer($DCD60DCF), Integer($ABD13D59), Integer($26D930AC), Integer($51DE003A), Integer($C8D75180), Integer($BFD06116), Integer($21B4F4B5), Integer($56B3C423), Integer($CFBA9599), Integer($B8BDA50F), Integer($2802B89E), Integer($5F058808), Integer($C60CD9B2), Integer($B10BE924), Integer($2F6F7C87), Integer($58684C11), Integer($C1611DAB), Integer($B6662D3D), Integer($76DC4190), Integer($01DB7106), Integer($98D220BC), Integer($EFD5102A), Integer($71B18589), Integer($06B6B51F), Integer($9FBFE4A5), Integer($E8B8D433), Integer($7807C9A2), Integer($0F00F934), Integer($9609A88E), Integer($E10E9818), Integer($7F6A0DBB), Integer($086D3D2D), Integer($91646C97), Integer($E6635C01), Integer($6B6B51F4), Integer($1C6C6162), Integer($856530D8), Integer($F262004E), Integer($6C0695ED), Integer($1B01A57B), Integer($8208F4C1), Integer($F50FC457), Integer($65B0D9C6), Integer($12B7E950), Integer($8BBEB8EA), Integer($FCB9887C), Integer($62DD1DDF), Integer($15DA2D49), Integer($8CD37CF3), Integer($FBD44C65), Integer($4DB26158), Integer($3AB551CE), Integer($A3BC0074), Integer($D4BB30E2), Integer($4ADFA541), Integer($3DD895D7), Integer($A4D1C46D), Integer($D3D6F4FB), Integer($4369E96A), Integer($346ED9FC), Integer($AD678846), Integer($DA60B8D0), Integer($44042D73), Integer($33031DE5), Integer($AA0A4C5F), Integer($DD0D7CC9), Integer($5005713C), Integer($270241AA), Integer($BE0B1010), Integer($C90C2086), Integer($5768B525), Integer($206F85B3), Integer($B966D409), Integer($CE61E49F), Integer($5EDEF90E), Integer($29D9C998), Integer($B0D09822), Integer($C7D7A8B4), Integer($59B33D17), Integer($2EB40D81), Integer($B7BD5C3B), Integer($C0BA6CAD), Integer($EDB88320), Integer($9ABFB3B6), Integer($03B6E20C), Integer($74B1D29A), Integer($EAD54739), Integer($9DD277AF), Integer($04DB2615), Integer($73DC1683), Integer($E3630B12), Integer($94643B84), Integer($0D6D6A3E), Integer($7A6A5AA8), Integer($E40ECF0B), Integer($9309FF9D), Integer($0A00AE27), Integer($7D079EB1), Integer($F00F9344), Integer($8708A3D2), Integer($1E01F268), Integer($6906C2FE), Integer($F762575D), Integer($806567CB), Integer($196C3671), Integer($6E6B06E7), Integer($FED41B76), Integer($89D32BE0), Integer($10DA7A5A), Integer($67DD4ACC), Integer($F9B9DF6F), Integer($8EBEEFF9), Integer($17B7BE43), Integer($60B08ED5), Integer($D6D6A3E8), Integer($A1D1937E), Integer($38D8C2C4), Integer($4FDFF252), Integer($D1BB67F1), Integer($A6BC5767), Integer($3FB506DD), Integer($48B2364B), Integer($D80D2BDA), Integer($AF0A1B4C), Integer($36034AF6), Integer($41047A60), Integer($DF60EFC3), Integer($A867DF55), Integer($316E8EEF), Integer($4669BE79), Integer($CB61B38C), Integer($BC66831A), Integer($256FD2A0), Integer($5268E236), Integer($CC0C7795), Integer($BB0B4703), Integer($220216B9), Integer($5505262F), Integer($C5BA3BBE), Integer($B2BD0B28), Integer($2BB45A92), Integer($5CB36A04), Integer($C2D7FFA7), Integer($B5D0CF31), Integer($2CD99E8B), Integer($5BDEAE1D), Integer($9B64C2B0), Integer($EC63F226), Integer($756AA39C), Integer($026D930A), Integer($9C0906A9), Integer($EB0E363F), Integer($72076785), Integer($05005713), Integer($95BF4A82), Integer($E2B87A14), Integer($7BB12BAE), Integer($0CB61B38), Integer($92D28E9B), Integer($E5D5BE0D), Integer($7CDCEFB7), Integer($0BDBDF21), Integer($86D3D2D4), Integer($F1D4E242), Integer($68DDB3F8), Integer($1FDA836E), Integer($81BE16CD), Integer($F6B9265B), Integer($6FB077E1), Integer($18B74777), Integer($88085AE6), Integer($FF0F6A70), Integer($66063BCA), Integer($11010B5C), Integer($8F659EFF), Integer($F862AE69), Integer($616BFFD3), Integer($166CCF45), Integer($A00AE278), Integer($D70DD2EE), Integer($4E048354), Integer($3903B3C2), Integer($A7672661), Integer($D06016F7), Integer($4969474D), Integer($3E6E77DB), Integer($AED16A4A), Integer($D9D65ADC), Integer($40DF0B66), Integer($37D83BF0), Integer($A9BCAE53), Integer($DEBB9EC5), Integer($47B2CF7F), Integer($30B5FFE9), Integer($BDBDF21C), Integer($CABAC28A), Integer($53B39330), Integer($24B4A3A6), Integer($BAD03605), Integer($CDD70693), Integer($54DE5729), Integer($23D967BF), Integer($B3667A2E), Integer($C4614AB8), Integer($5D681B02), Integer($2A6F2B94), Integer($B40BBE37), Integer($C30C8EA1), Integer($5A05DF1B), Integer($2D02EF8D) ); Crc16Tab: array[0..255] of Word = ( $0000, $1189, $2312, $329B, $4624, $57AD, $6536, $74BF, $8C48, $9DC1, $AF5A, $BED3, $CA6C, $DBE5, $E97E, $F8F7, $1081, $0108, $3393, $221A, $56A5, $472C, $75B7, $643E, $9CC9, $8D40, $BFDB, $AE52, $DAED, $CB64, $F9FF, $E876, $2102, $308B, $0210, $1399, $6726, $76AF, $4434, $55BD, $AD4A, $BCC3, $8E58, $9FD1, $EB6E, $FAE7, $C87C, $D9F5, $3183, $200A, $1291, $0318, $77A7, $662E, $54B5, $453C, $BDCB, $AC42, $9ED9, $8F50, $FBEF, $EA66, $D8FD, $C974, $4204, $538D, $6116, $709F, $0420, $15A9, $2732, $36BB, $CE4C, $DFC5, $ED5E, $FCD7, $8868, $99E1, $AB7A, $BAF3, $5285, $430C, $7197, $601E, $14A1, $0528, $37B3, $263A, $DECD, $CF44, $FDDF, $EC56, $98E9, $8960, $BBFB, $AA72, $6306, $728F, $4014, $519D, $2522, $34AB, $0630, $17B9, $EF4E, $FEC7, $CC5C, $DDD5, $A96A, $B8E3, $8A78, $9BF1, $7387, $620E, $5095, $411C, $35A3, $242A, $16B1, $0738, $FFCF, $EE46, $DCDD, $CD54, $B9EB, $A862, $9AF9, $8B70, $8408, $9581, $A71A, $B693, $C22C, $D3A5, $E13E, $F0B7, $0840, $19C9, $2B52, $3ADB, $4E64, $5FED, $6D76, $7CFF, $9489, $8500, $B79B, $A612, $D2AD, $C324, $F1BF, $E036, $18C1, $0948, $3BD3, $2A5A, $5EE5, $4F6C, $7DF7, $6C7E, $A50A, $B483, $8618, $9791, $E32E, $F2A7, $C03C, $D1B5, $2942, $38CB, $0A50, $1BD9, $6F66, $7EEF, $4C74, $5DFD, $B58B, $A402, $9699, $8710, $F3AF, $E226, $D0BD, $C134, $39C3, $284A, $1AD1, $0B58, $7FE7, $6E6E, $5CF5, $4D7C, $C60C, $D785, $E51E, $F497, $8028, $91A1, $A33A, $B2B3, $4A44, $5BCD, $6956, $78DF, $0C60, $1DE9, $2F72, $3EFB, $D68D, $C704, $F59F, $E416, $90A9, $8120, $B3BB, $A232, $5AC5, $4B4C, $79D7, $685E, $1CE1, $0D68, $3FF3, $2E7A, $E70E, $F687, $C41C, $D595, $A12A, $B0A3, $8238, $93B1, $6B46, $7ACF, $4854, $59DD, $2D62, $3CEB, $0E70, $1FF9, $F78F, $E606, $D49D, $C514, $B1AB, $A022, $92B9, $8330, $7BC7, $6A4E, $58D5, $495C, $3DE3, $2C6A, $1EF1, $0F78 ); procedure ArrByteToLong(var ArByte: Array of byte; var ArLong: Array of Integer); {$IFDEF CIL} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) > ((High(ArLong) + 1) * 4) then Exit; {$IFDEF CIL} for n := 0 to ((high(ArByte) + 1) div 4) - 1 do ArLong[n] := ArByte[n * 4 + 0] + (ArByte[n * 4 + 1] shl 8) + (ArByte[n * 4 + 2] shl 16) + (ArByte[n * 4 + 3] shl 24); {$ELSE} Move(ArByte[0], ArLong[0], High(ArByte) + 1); {$ENDIF} end; procedure ArrLongToByte(var ArLong: Array of Integer; var ArByte: Array of byte); {$IFDEF CIL} var n: integer; {$ENDIF} begin if (High(ArByte) + 1) < ((High(ArLong) + 1) * 4) then Exit; {$IFDEF CIL} for n := 0 to high(ArLong) do begin ArByte[n * 4 + 0] := ArLong[n] and $000000FF; ArByte[n * 4 + 1] := (ArLong[n] shr 8) and $000000FF; ArByte[n * 4 + 2] := (ArLong[n] shr 16) and $000000FF; ArByte[n * 4 + 3] := (ArLong[n] shr 24) and $000000FF; end; {$ELSE} Move(ArLong[0], ArByte[0], High(ArByte) + 1); {$ENDIF} end; type TMDCtx = record State: array[0..3] of Integer; Count: array[0..1] of Integer; BufAnsiChar: array[0..63] of Byte; BufLong: array[0..15] of Integer; end; TSHA1Ctx= record Hi, Lo: integer; Buffer: array[0..63] of byte; Index: integer; Hash: array[0..4] of Integer; HashByte: array[0..19] of byte; end; TMDTransform = procedure(var Buf: array of LongInt; const Data: array of LongInt); {==============================================================================} function DecodeTriplet(const Value: AnsiString; Delimiter: AnsiChar): AnsiString; var x, l, lv: Integer; c: AnsiChar; b: Byte; bad: Boolean; begin lv := Length(Value); SetLength(Result, lv); x := 1; l := 1; while x <= lv do begin c := Value[x]; Inc(x); if c <> Delimiter then begin Result[l] := c; Inc(l); end else if x < lv then begin Case Value[x] Of #13: if (Value[x + 1] = #10) then Inc(x, 2) else Inc(x); #10: if (Value[x + 1] = #13) then Inc(x, 2) else Inc(x); else begin bad := False; Case Value[x] Of '0'..'9': b := (Byte(Value[x]) - 48) Shl 4; 'a'..'f', 'A'..'F': b := ((Byte(Value[x]) And 7) + 9) shl 4; else begin b := 0; bad := True; end; end; Case Value[x + 1] Of '0'..'9': b := b Or (Byte(Value[x + 1]) - 48); 'a'..'f', 'A'..'F': b := b Or ((Byte(Value[x + 1]) And 7) + 9); else bad := True; end; if bad then begin Result[l] := c; Inc(l); end else begin Inc(x, 2); Result[l] := AnsiChar(b); Inc(l); end; end; end; end else break; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function DecodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := DecodeTriplet(Value, '='); end; {==============================================================================} function DecodeURL(const Value: AnsiString): AnsiString; begin Result := DecodeTriplet(Value, '%'); end; {==============================================================================} function EncodeTriplet(const Value: AnsiString; Delimiter: AnsiChar; Specials: TSpecials): AnsiString; var n, l: Integer; s: AnsiString; c: AnsiChar; begin SetLength(Result, Length(Value) * 3); l := 1; for n := 1 to Length(Value) do begin c := Value[n]; if c in Specials then begin Result[l] := Delimiter; Inc(l); s := IntToHex(Ord(c), 2); Result[l] := s[1]; Inc(l); Result[l] := s[2]; Inc(l); end else begin Result[l] := c; Inc(l); end; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function EncodeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', ['='] + NonAsciiChar); end; {==============================================================================} function EncodeSafeQuotedPrintable(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '=', SpecialChar + NonAsciiChar); end; {==============================================================================} function EncodeURLElement(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '%', URLSpecialChar + URLFullSpecialChar); end; {==============================================================================} function EncodeURL(const Value: AnsiString): AnsiString; begin Result := EncodeTriplet(Value, '%', URLSpecialChar); end; {==============================================================================} function Decode4to3(const Value, Table: AnsiString): AnsiString; var x, y, n, l: Integer; d: array[0..3] of Byte; begin SetLength(Result, Length(Value)); x := 1; l := 1; while x <= Length(Value) do begin for n := 0 to 3 do begin if x > Length(Value) then d[n] := 64 else begin y := Pos(Value[x], Table); if y < 1 then y := 1; d[n] := y - 1; end; Inc(x); end; Result[l] := AnsiChar((D[0] and $3F) shl 2 + (D[1] and $30) shr 4); Inc(l); if d[2] <> 64 then begin Result[l] := AnsiChar((D[1] and $0F) shl 4 + (D[2] and $3C) shr 2); Inc(l); if d[3] <> 64 then begin Result[l] := AnsiChar((D[2] and $03) shl 6 + (D[3] and $3F)); Inc(l); end; end; end; Dec(l); SetLength(Result, l); end; {==============================================================================} function Decode4to3Ex(const Value, Table: AnsiString): AnsiString; var x, y, lv: Integer; d: integer; dl: integer; c: byte; p: integer; begin lv := Length(Value); SetLength(Result, lv); x := 1; dl := 4; d := 0; p := 1; while x <= lv do begin y := Ord(Value[x]); if y in [33..127] then c := Ord(Table[y - 32]) else c := 64; Inc(x); if c > 63 then continue; d := (d shl 6) or c; dec(dl); if dl <> 0 then continue; Result[p] := AnsiChar((d shr 16) and $ff); inc(p); Result[p] := AnsiChar((d shr 8) and $ff); inc(p); Result[p] := AnsiChar(d and $ff); inc(p); d := 0; dl := 4; end; case dl of 1: begin d := d shr 2; Result[p] := AnsiChar((d shr 8) and $ff); inc(p); Result[p] := AnsiChar(d and $ff); inc(p); end; 2: begin d := d shr 4; Result[p] := AnsiChar(d and $ff); inc(p); end; end; SetLength(Result, p - 1); end; {==============================================================================} function Encode3to4(const Value, Table: AnsiString): AnsiString; var c: Byte; n, l: Integer; Count: Integer; DOut: array[0..3] of Byte; begin setlength(Result, ((Length(Value) + 2) div 3) * 4); l := 1; Count := 1; while Count <= Length(Value) do begin c := Ord(Value[Count]); Inc(Count); DOut[0] := (c and $FC) shr 2; DOut[1] := (c and $03) shl 4; if Count <= Length(Value) then begin c := Ord(Value[Count]); Inc(Count); DOut[1] := DOut[1] + (c and $F0) shr 4; DOut[2] := (c and $0F) shl 2; if Count <= Length(Value) then begin c := Ord(Value[Count]); Inc(Count); DOut[2] := DOut[2] + (c and $C0) shr 6; DOut[3] := (c and $3F); end else begin DOut[3] := $40; end; end else begin DOut[2] := $40; DOut[3] := $40; end; for n := 0 to 3 do begin if (DOut[n] + 1) <= Length(Table) then begin Result[l] := Table[DOut[n] + 1]; Inc(l); end; end; end; SetLength(Result, l - 1); end; {==============================================================================} function DecodeBase64(const Value: AnsiString): AnsiString; begin Result := Decode4to3Ex(Value, ReTableBase64); end; {==============================================================================} function EncodeBase64(const Value: AnsiString): AnsiString; begin Result := Encode3to4(Value, TableBase64); end; {==============================================================================} function DecodeBase64mod(const Value: AnsiString): AnsiString; begin Result := Decode4to3(Value, TableBase64mod); end; {==============================================================================} function EncodeBase64mod(const Value: AnsiString): AnsiString; begin Result := Encode3to4(Value, TableBase64mod); end; {==============================================================================} function DecodeUU(const Value: AnsiString): AnsiString; var s: AnsiString; uut: AnsiString; x: Integer; begin Result := ''; uut := TableUU; s := trim(UpperCase(Value)); if s = '' then Exit; if Pos('BEGIN', s) = 1 then Exit; if Pos('END', s) = 1 then Exit; if Pos('TABLE', s) = 1 then Exit; //ignore Table yet (set custom UUT) //begin decoding x := Pos(Value[1], uut) - 1; case (x mod 3) of 0: x :=(x div 3)* 4; 1: x :=((x div 3) * 4) + 2; 2: x :=((x div 3) * 4) + 3; end; //x - lenght UU line s := Copy(Value, 2, x); if s = '' then Exit; s := s + StringOfChar(' ', x - length(s)); Result := Decode4to3(s, uut); end; {==============================================================================} function EncodeUU(const Value: AnsiString): AnsiString; begin Result := ''; if Length(Value) < Length(TableUU) then Result := TableUU[Length(Value) + 1] + Encode3to4(Value, TableUU); end; {==============================================================================} function DecodeXX(const Value: AnsiString): AnsiString; var s: AnsiString; x: Integer; begin Result := ''; s := trim(UpperCase(Value)); if s = '' then Exit; if Pos('BEGIN', s) = 1 then Exit; if Pos('END', s) = 1 then Exit; //begin decoding x := Pos(Value[1], TableXX) - 1; case (x mod 3) of 0: x :=(x div 3)* 4; 1: x :=((x div 3) * 4) + 2; 2: x :=((x div 3) * 4) + 3; end; //x - lenght XX line s := Copy(Value, 2, x); if s = '' then Exit; s := s + StringOfChar(' ', x - length(s)); Result := Decode4to3(s, TableXX); end; {==============================================================================} function DecodeYEnc(const Value: AnsiString): AnsiString; var C : Byte; i: integer; begin Result := ''; i := 1; while i <= Length(Value) do begin c := Ord(Value[i]); Inc(i); if c = Ord('=') then begin c := Ord(Value[i]); Inc(i); Dec(c, 64); end; Dec(C, 42); Result := Result + AnsiChar(C); end; end; {==============================================================================} function UpdateCrc32(Value: Byte; Crc32: Integer): Integer; begin Result := (Crc32 shr 8) xor crc32tab[Byte(Value xor (Crc32 and Integer($000000FF)))]; end; {==============================================================================} function Crc32(const Value: AnsiString): Integer; var n: Integer; begin Result := Integer($FFFFFFFF); for n := 1 to Length(Value) do Result := UpdateCrc32(Ord(Value[n]), Result); Result := not Result; end; {==============================================================================} function UpdateCrc16(Value: Byte; Crc16: Word): Word; begin Result := ((Crc16 shr 8) and $00FF) xor crc16tab[Byte(Crc16 xor (Word(Value)) and $00FF)]; end; {==============================================================================} function Crc16(const Value: AnsiString): Word; var n: Integer; begin Result := $FFFF; for n := 1 to Length(Value) do Result := UpdateCrc16(Ord(Value[n]), Result); end; {==============================================================================} procedure MDInit(var MDContext: TMDCtx); var n: integer; begin MDContext.Count[0] := 0; MDContext.Count[1] := 0; for n := 0 to high(MDContext.BufAnsiChar) do MDContext.BufAnsiChar[n] := 0; for n := 0 to high(MDContext.BufLong) do MDContext.BufLong[n] := 0; MDContext.State[0] := Integer($67452301); MDContext.State[1] := Integer($EFCDAB89); MDContext.State[2] := Integer($98BADCFE); MDContext.State[3] := Integer($10325476); end; procedure MD5Transform(var Buf: array of LongInt; const Data: array of LongInt); var A, B, C, D: LongInt; procedure Round1(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Z xor (X and (Y xor Z))) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round2(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Y xor (Z and (X xor Y))) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round3(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (X xor Y xor Z) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; procedure Round4(var W: LongInt; X, Y, Z, Data: LongInt; S: Byte); begin Inc(W, (Y xor (X or not Z)) + Data); W := (W shl S) or (W shr (32 - S)); Inc(W, X); end; begin A := Buf[0]; B := Buf[1]; C := Buf[2]; D := Buf[3]; Round1(A, B, C, D, Data[0] + Longint($D76AA478), 7); Round1(D, A, B, C, Data[1] + Longint($E8C7B756), 12); Round1(C, D, A, B, Data[2] + Longint($242070DB), 17); Round1(B, C, D, A, Data[3] + Longint($C1BDCEEE), 22); Round1(A, B, C, D, Data[4] + Longint($F57C0FAF), 7); Round1(D, A, B, C, Data[5] + Longint($4787C62A), 12); Round1(C, D, A, B, Data[6] + Longint($A8304613), 17); Round1(B, C, D, A, Data[7] + Longint($FD469501), 22); Round1(A, B, C, D, Data[8] + Longint($698098D8), 7); Round1(D, A, B, C, Data[9] + Longint($8B44F7AF), 12); Round1(C, D, A, B, Data[10] + Longint($FFFF5BB1), 17); Round1(B, C, D, A, Data[11] + Longint($895CD7BE), 22); Round1(A, B, C, D, Data[12] + Longint($6B901122), 7); Round1(D, A, B, C, Data[13] + Longint($FD987193), 12); Round1(C, D, A, B, Data[14] + Longint($A679438E), 17); Round1(B, C, D, A, Data[15] + Longint($49B40821), 22); Round2(A, B, C, D, Data[1] + Longint($F61E2562), 5); Round2(D, A, B, C, Data[6] + Longint($C040B340), 9); Round2(C, D, A, B, Data[11] + Longint($265E5A51), 14); Round2(B, C, D, A, Data[0] + Longint($E9B6C7AA), 20); Round2(A, B, C, D, Data[5] + Longint($D62F105D), 5); Round2(D, A, B, C, Data[10] + Longint($02441453), 9); Round2(C, D, A, B, Data[15] + Longint($D8A1E681), 14); Round2(B, C, D, A, Data[4] + Longint($E7D3FBC8), 20); Round2(A, B, C, D, Data[9] + Longint($21E1CDE6), 5); Round2(D, A, B, C, Data[14] + Longint($C33707D6), 9); Round2(C, D, A, B, Data[3] + Longint($F4D50D87), 14); Round2(B, C, D, A, Data[8] + Longint($455A14ED), 20); Round2(A, B, C, D, Data[13] + Longint($A9E3E905), 5); Round2(D, A, B, C, Data[2] + Longint($FCEFA3F8), 9); Round2(C, D, A, B, Data[7] + Longint($676F02D9), 14); Round2(B, C, D, A, Data[12] + Longint($8D2A4C8A), 20); Round3(A, B, C, D, Data[5] + Longint($FFFA3942), 4); Round3(D, A, B, C, Data[8] + Longint($8771F681), 11); Round3(C, D, A, B, Data[11] + Longint($6D9D6122), 16); Round3(B, C, D, A, Data[14] + Longint($FDE5380C), 23); Round3(A, B, C, D, Data[1] + Longint($A4BEEA44), 4); Round3(D, A, B, C, Data[4] + Longint($4BDECFA9), 11); Round3(C, D, A, B, Data[7] + Longint($F6BB4B60), 16); Round3(B, C, D, A, Data[10] + Longint($BEBFBC70), 23); Round3(A, B, C, D, Data[13] + Longint($289B7EC6), 4); Round3(D, A, B, C, Data[0] + Longint($EAA127FA), 11); Round3(C, D, A, B, Data[3] + Longint($D4EF3085), 16); Round3(B, C, D, A, Data[6] + Longint($04881D05), 23); Round3(A, B, C, D, Data[9] + Longint($D9D4D039), 4); Round3(D, A, B, C, Data[12] + Longint($E6DB99E5), 11); Round3(C, D, A, B, Data[15] + Longint($1FA27CF8), 16); Round3(B, C, D, A, Data[2] + Longint($C4AC5665), 23); Round4(A, B, C, D, Data[0] + Longint($F4292244), 6); Round4(D, A, B, C, Data[7] + Longint($432AFF97), 10); Round4(C, D, A, B, Data[14] + Longint($AB9423A7), 15); Round4(B, C, D, A, Data[5] + Longint($FC93A039), 21); Round4(A, B, C, D, Data[12] + Longint($655B59C3), 6); Round4(D, A, B, C, Data[3] + Longint($8F0CCC92), 10); Round4(C, D, A, B, Data[10] + Longint($FFEFF47D), 15); Round4(B, C, D, A, Data[1] + Longint($85845DD1), 21); Round4(A, B, C, D, Data[8] + Longint($6FA87E4F), 6); Round4(D, A, B, C, Data[15] + Longint($FE2CE6E0), 10); Round4(C, D, A, B, Data[6] + Longint($A3014314), 15); Round4(B, C, D, A, Data[13] + Longint($4E0811A1), 21); Round4(A, B, C, D, Data[4] + Longint($F7537E82), 6); Round4(D, A, B, C, Data[11] + Longint($BD3AF235), 10); Round4(C, D, A, B, Data[2] + Longint($2AD7D2BB), 15); Round4(B, C, D, A, Data[9] + Longint($EB86D391), 21); Inc(Buf[0], A); Inc(Buf[1], B); Inc(Buf[2], C); Inc(Buf[3], D); end; //fixed by James McAdams procedure MDUpdate(var MDContext: TMDCtx; const Data: AnsiString; transform: TMDTransform); var Index, partLen, InputLen, I: integer; {$IFDEF CIL} n: integer; {$ENDIF} begin InputLen := Length(Data); with MDContext do begin Index := (Count[0] shr 3) and $3F; Inc(Count[0], InputLen shl 3); if Count[0] < (InputLen shl 3) then Inc(Count[1]); Inc(Count[1], InputLen shr 29); partLen := 64 - Index; if InputLen >= partLen then begin ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF CIL} for n := 1 to partLen do BufAnsiChar[index - 1 + n] := Ord(Data[n]); {$ELSE} Move(Data[1], BufAnsiChar[Index], partLen); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); Transform(State, Buflong); I := partLen; while I + 63 < InputLen do begin ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF CIL} for n := 1 to 64 do BufAnsiChar[n - 1] := Ord(Data[i + n]); {$ELSE} Move(Data[I+1], BufAnsiChar, 64); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); Transform(State, Buflong); inc(I, 64); end; Index := 0; end else I := 0; ArrLongToByte(BufLong, BufAnsiChar); {$IFDEF CIL} for n := 1 to InputLen-I do BufAnsiChar[Index + n - 1] := Ord(Data[i + n]); {$ELSE} Move(Data[I+1], BufAnsiChar[Index], InputLen-I); {$ENDIF} ArrByteToLong(BufAnsiChar, BufLong); end end; function MDFinal(var MDContext: TMDCtx; transform: TMDTransform): AnsiString; var Cnt: Word; P: Byte; digest: array[0..15] of Byte; i: Integer; n: integer; begin for I := 0 to 15 do Digest[I] := I + 1; with MDContext do begin Cnt := (Count[0] shr 3) and $3F; P := Cnt; BufAnsiChar[P] := $80; Inc(P); Cnt := 64 - 1 - Cnt; if Cnt < 8 then begin for n := 0 to cnt - 1 do BufAnsiChar[P + n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar[P], Cnt, #0); Transform(State, BufLong); ArrLongToByte(BufLong, BufAnsiChar); for n := 0 to 55 do BufAnsiChar[n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar, 56, #0); end else begin for n := 0 to Cnt - 8 - 1 do BufAnsiChar[p + n] := 0; ArrByteToLong(BufAnsiChar, BufLong); // FillChar(BufAnsiChar[P], Cnt - 8, #0); end; BufLong[14] := Count[0]; BufLong[15] := Count[1]; Transform(State, BufLong); ArrLongToByte(State, Digest); // Move(State, Digest, 16); Result := ''; for i := 0 to 15 do Result := Result + AnsiChar(digest[i]); end; // FillChar(MD5Context, SizeOf(TMD5Ctx), #0) end; {==============================================================================} function MD5(const Value: AnsiString): AnsiString; var MDContext: TMDCtx; begin MDInit(MDContext); MDUpdate(MDContext, Value, @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} function HMAC_MD5(Text, Key: AnsiString): AnsiString; var ipad, opad, s: AnsiString; n: Integer; MDContext: TMDCtx; begin if Length(Key) > 64 then Key := md5(Key); ipad := StringOfChar(#$36, 64); opad := StringOfChar(#$5C, 64); for n := 1 to Length(Key) do begin ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); end; MDInit(MDContext); MDUpdate(MDContext, ipad, @MD5Transform); MDUpdate(MDContext, Text, @MD5Transform); s := MDFinal(MDContext, @MD5Transform); MDInit(MDContext); MDUpdate(MDContext, opad, @MD5Transform); MDUpdate(MDContext, s, @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} function MD5LongHash(const Value: AnsiString; Len: integer): AnsiString; var cnt, rest: integer; l: integer; n: integer; MDContext: TMDCtx; begin l := length(Value); cnt := Len div l; rest := Len mod l; MDInit(MDContext); for n := 1 to cnt do MDUpdate(MDContext, Value, @MD5Transform); if rest > 0 then MDUpdate(MDContext, Copy(Value, 1, rest), @MD5Transform); Result := MDFinal(MDContext, @MD5Transform); end; {==============================================================================} // SHA1 is based on sources by Dave Barton (davebarton@bigfoot.com) procedure SHA1init( var SHA1Context: TSHA1Ctx ); var n: integer; begin SHA1Context.Hi := 0; SHA1Context.Lo := 0; SHA1Context.Index := 0; for n := 0 to High(SHA1Context.Buffer) do SHA1Context.Buffer[n] := 0; for n := 0 to High(SHA1Context.HashByte) do SHA1Context.HashByte[n] := 0; // FillChar(SHA1Context, SizeOf(TSHA1Ctx), #0); SHA1Context.Hash[0] := integer($67452301); SHA1Context.Hash[1] := integer($EFCDAB89); SHA1Context.Hash[2] := integer($98BADCFE); SHA1Context.Hash[3] := integer($10325476); SHA1Context.Hash[4] := integer($C3D2E1F0); end; //****************************************************************************** function RB(A: integer): integer; begin Result := (A shr 24) or ((A shr 8) and $FF00) or ((A shl 8) and $FF0000) or (A shl 24); end; procedure SHA1Compress(var Data: TSHA1Ctx); var A, B, C, D, E, T: integer; W: array[0..79] of integer; i: integer; n: integer; function F1(x, y, z: integer): integer; begin Result := z xor (x and (y xor z)); end; function F2(x, y, z: integer): integer; begin Result := x xor y xor z; end; function F3(x, y, z: integer): integer; begin Result := (x and y) or (z and (x or y)); end; function LRot32(X: integer; c: integer): integer; begin result := (x shl c) or (x shr (32 - c)); end; begin ArrByteToLong(Data.Buffer, W); // Move(Data.Buffer, W, Sizeof(Data.Buffer)); for i := 0 to 15 do W[i] := RB(W[i]); for i := 16 to 79 do W[i] := LRot32(W[i-3] xor W[i-8] xor W[i-14] xor W[i-16], 1); A := Data.Hash[0]; B := Data.Hash[1]; C := Data.Hash[2]; D := Data.Hash[3]; E := Data.Hash[4]; for i := 0 to 19 do begin T := LRot32(A, 5) + F1(B, C, D) + E + W[i] + integer($5A827999); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 20 to 39 do begin T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($6ED9EBA1); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 40 to 59 do begin T := LRot32(A, 5) + F3(B, C, D) + E + W[i] + integer($8F1BBCDC); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; for i := 60 to 79 do begin T := LRot32(A, 5) + F2(B, C, D) + E + W[i] + integer($CA62C1D6); E := D; D := C; C := LRot32(B, 30); B := A; A := T; end; Data.Hash[0] := Data.Hash[0] + A; Data.Hash[1] := Data.Hash[1] + B; Data.Hash[2] := Data.Hash[2] + C; Data.Hash[3] := Data.Hash[3] + D; Data.Hash[4] := Data.Hash[4] + E; for n := 0 to high(w) do w[n] := 0; // FillChar(W, Sizeof(W), 0); for n := 0 to high(Data.Buffer) do Data.Buffer[n] := 0; // FillChar(Data.Buffer, Sizeof(Data.Buffer), 0); end; //****************************************************************************** procedure SHA1Update(var Context: TSHA1Ctx; const Data: AnsiString); var Len: integer; n: integer; i, k: integer; begin Len := Length(data); for k := 0 to 7 do begin i := Context.Lo; Inc(Context.Lo, Len); if Context.Lo < i then Inc(Context.Hi); end; for n := 1 to len do begin Context.Buffer[Context.Index] := byte(Data[n]); Inc(Context.Index); if Context.Index = 64 then begin Context.Index := 0; SHA1Compress(Context); end; end; end; //****************************************************************************** function SHA1Final(var Context: TSHA1Ctx): AnsiString; type Pinteger = ^integer; var i: integer; procedure ItoArr(var Ar: Array of byte; I, value: Integer); begin Ar[i + 0] := Value and $000000FF; Ar[i + 1] := (Value shr 8) and $000000FF; Ar[i + 2] := (Value shr 16) and $000000FF; Ar[i + 3] := (Value shr 24) and $000000FF; end; begin Context.Buffer[Context.Index] := $80; if Context.Index >= 56 then SHA1Compress(Context); ItoArr(Context.Buffer, 56, RB(Context.Hi)); ItoArr(Context.Buffer, 60, RB(Context.Lo)); // Pinteger(@Context.Buffer[56])^ := RB(Context.Hi); // Pinteger(@Context.Buffer[60])^ := RB(Context.Lo); SHA1Compress(Context); Context.Hash[0] := RB(Context.Hash[0]); Context.Hash[1] := RB(Context.Hash[1]); Context.Hash[2] := RB(Context.Hash[2]); Context.Hash[3] := RB(Context.Hash[3]); Context.Hash[4] := RB(Context.Hash[4]); ArrLongToByte(Context.Hash, Context.HashByte); Result := ''; for i := 0 to 19 do Result := Result + AnsiChar(Context.HashByte[i]); end; function SHA1(const Value: AnsiString): AnsiString; var SHA1Context: TSHA1Ctx; begin SHA1Init(SHA1Context); SHA1Update(SHA1Context, Value); Result := SHA1Final(SHA1Context); end; {==============================================================================} function HMAC_SHA1(Text, Key: AnsiString): AnsiString; var ipad, opad, s: AnsiString; n: Integer; SHA1Context: TSHA1Ctx; begin if Length(Key) > 64 then Key := SHA1(Key); ipad := StringOfChar(#$36, 64); opad := StringOfChar(#$5C, 64); for n := 1 to Length(Key) do begin ipad[n] := AnsiChar(Byte(ipad[n]) xor Byte(Key[n])); opad[n] := AnsiChar(Byte(opad[n]) xor Byte(Key[n])); end; SHA1Init(SHA1Context); SHA1Update(SHA1Context, ipad); SHA1Update(SHA1Context, Text); s := SHA1Final(SHA1Context); SHA1Init(SHA1Context); SHA1Update(SHA1Context, opad); SHA1Update(SHA1Context, s); Result := SHA1Final(SHA1Context); end; {==============================================================================} function SHA1LongHash(const Value: AnsiString; Len: integer): AnsiString; var cnt, rest: integer; l: integer; n: integer; SHA1Context: TSHA1Ctx; begin l := length(Value); cnt := Len div l; rest := Len mod l; SHA1Init(SHA1Context); for n := 1 to cnt do SHA1Update(SHA1Context, Value); if rest > 0 then SHA1Update(SHA1Context, Copy(Value, 1, rest)); Result := SHA1Final(SHA1Context); end; {==============================================================================} procedure MD4Transform(var Buf: array of LongInt; const Data: array of LongInt); var A, B, C, D: LongInt; function LRot32(a, b: longint): longint; begin Result:= (a shl b) or (a shr (32 - b)); end; begin A := Buf[0]; B := Buf[1]; C := Buf[2]; D := Buf[3]; A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 0], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 1], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 2], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 3], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 4], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 5], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 6], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 7], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 8], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 9], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[10], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[11], 19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[12], 3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[13], 7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[14], 11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[15], 19); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 0] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 4] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 8] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[12] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 1] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 5] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 9] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[13] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 2] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 6] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[10] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[14] + longint($5a827999), 13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 3] + longint($5a827999), 3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 7] + longint($5a827999), 5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[11] + longint($5a827999), 9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[15] + longint($5a827999), 13); A:= LRot32(A + (B xor C xor D) + Data[ 0] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[ 8] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 4] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[12] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 2] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[10] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 6] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[14] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 1] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[ 9] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 5] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[13] + longint($6ed9eba1), 15); A:= LRot32(A + (B xor C xor D) + Data[ 3] + longint($6ed9eba1), 3); D:= LRot32(D + (A xor B xor C) + Data[11] + longint($6ed9eba1), 9); C:= LRot32(C + (D xor A xor B) + Data[ 7] + longint($6ed9eba1), 11); B:= LRot32(B + (C xor D xor A) + Data[15] + longint($6ed9eba1), 15); Inc(Buf[0], A); Inc(Buf[1], B); Inc(Buf[2], C); Inc(Buf[3], D); end; {==============================================================================} function MD4(const Value: AnsiString): AnsiString; var MDContext: TMDCtx; begin MDInit(MDContext); MDUpdate(MDContext, Value, @MD4Transform); Result := MDFinal(MDContext, @MD4Transform); end; {==============================================================================} end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/synafpc.pas0000644000175000001440000001215312014201074021416 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 001.002.000 | |==============================================================================| | Content: Utils for FreePascal compatibility | |==============================================================================| | Copyright (c)1999-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2003-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} unit synafpc; interface uses {$IFDEF FPC} dynlibs, sysutils; {$ELSE} {$IFDEF MSWINDOWS} Windows; {$ELSE} SysUtils; {$ENDIF} {$ENDIF} {$IFDEF FPC} type TLibHandle = dynlibs.TLibHandle; function LoadLibrary(ModuleName: PChar): TLibHandle; function FreeLibrary(Module: TLibHandle): LongBool; function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; {$ELSE} type {$IFDEF CIL} TLibHandle = Integer; PtrInt = Integer; {$ELSE} TLibHandle = HModule; {$IFNDEF WIN64} PtrInt = Integer; {$ENDIF} {$ENDIF} {$IFDEF VER100} LongWord = DWord; {$ENDIF} {$ENDIF} procedure Sleep(milliseconds: Cardinal); implementation {==============================================================================} {$IFDEF FPC} function LoadLibrary(ModuleName: PChar): TLibHandle; begin Result := dynlibs.LoadLibrary(Modulename); end; function FreeLibrary(Module: TLibHandle): LongBool; begin Result := dynlibs.UnloadLibrary(Module); end; function GetProcAddress(Module: TLibHandle; Proc: PChar): Pointer; begin Result := dynlibs.GetProcedureAddress(Module, Proc); end; function GetModuleFileName(Module: TLibHandle; Buffer: PChar; BufLen: Integer): Integer; begin Result := 0; end; {$ELSE} {$ENDIF} procedure Sleep(milliseconds: Cardinal); begin {$IFDEF MSWINDOWS} {$IFDEF FPC} sysutils.sleep(milliseconds); {$ELSE} windows.sleep(milliseconds); {$ENDIF} {$ELSE} sysutils.sleep(milliseconds); {$ENDIF} end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_gnutls_lib.pas0000644000175000001440000004460012561610546023017 0ustar alexxusers{ GnuTLS to OpenSSL wrapper (based on GNUTLS-EXTRA) Copyright (c) 2013-2015 Alexander Koblov Copyright (c) 2004, 2005, 2006 Free Software Foundation Copyright (c) 2002 Andrew McDonald GNUTLS-EXTRA 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. GNUTLS-EXTRA 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 GNUTLS-EXTRA; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. } unit ssl_gnutls_lib; {$mode delphi} interface uses CTypes; type gnutls_protocol_t = ( GNUTLS_SSL3 = 1, GNUTLS_TLS1_0, GNUTLS_TLS1_1, GNUTLS_TLS1_2, GNUTLS_VERSION_UNKNOWN = $ff ) ; gnutls_cipher_algorithm_t = ( GNUTLS_CIPHER_NULL = 1, GNUTLS_CIPHER_ARCFOUR_128, GNUTLS_CIPHER_3DES_CBC, GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_AES_256_CBC, GNUTLS_CIPHER_ARCFOUR_40, GNUTLS_CIPHER_CAMELLIA_128_CBC, GNUTLS_CIPHER_CAMELLIA_256_CBC, GNUTLS_CIPHER_RC2_40_CBC = 90, GNUTLS_CIPHER_DES_CBC ); gnutls_kx_algorithm_t = ( GNUTLS_KX_RSA = 1, GNUTLS_KX_DHE_DSS, GNUTLS_KX_DHE_RSA, GNUTLS_KX_ANON_DH, GNUTLS_KX_SRP, GNUTLS_KX_RSA_EXPORT, GNUTLS_KX_SRP_RSA, GNUTLS_KX_SRP_DSS, GNUTLS_KX_PSK, GNUTLS_KX_DHE_PSK ); gnutls_mac_algorithm_t = ( GNUTLS_MAC_UNKNOWN = 0, GNUTLS_MAC_NULL = 1, GNUTLS_MAC_MD5, GNUTLS_MAC_SHA1, GNUTLS_MAC_RMD160, GNUTLS_MAC_MD2, GNUTLS_MAC_SHA256, GNUTLS_MAC_SHA384, GNUTLS_MAC_SHA512 ); gnutls_compression_method_t = ( GNUTLS_COMP_NULL = 1, GNUTLS_COMP_DEFLATE, GNUTLS_COMP_LZO ); gnutls_certificate_type_t = ( GNUTLS_CRT_X509 = 1, GNUTLS_CRT_OPENPGP ); gnutls_connection_end_t = ( GNUTLS_SERVER = 1, GNUTLS_CLIENT ); gnutls_credentials_type_t = ( GNUTLS_CRD_CERTIFICATE = 1, GNUTLS_CRD_ANON, GNUTLS_CRD_SRP, GNUTLS_CRD_PSK, GNUTLS_CRD_IA ); gnutls_x509_crt_fmt_t = ( GNUTLS_X509_FMT_DER, GNUTLS_X509_FMT_PEM ); gnutls_close_request_t = ( GNUTLS_SHUT_RDWR = 0, GNUTLS_SHUT_WR = 1 ); type gnutls_session_t = type Pointer; gnutls_transport_ptr_t = type Pointer; gnutls_certificate_credentials_t = type Pointer; PSSL_METHOD = ^SSL_METHOD; SSL_METHOD = record connend: gnutls_connection_end_t; priorities: array[0..High(Byte)] of AnsiChar; end; PSSL_CIPHER = ^SSL_CIPHER; SSL_CIPHER = record version: gnutls_protocol_t; cipher: gnutls_cipher_algorithm_t; kx: gnutls_kx_algorithm_t; mac: gnutls_mac_algorithm_t; compression: gnutls_compression_method_t; cert: gnutls_certificate_type_t; end; PSSL_CTX = ^SSL_CTX; SSL_CTX = record method: PSSL_METHOD; certfile: AnsiString; certfile_type: gnutls_x509_crt_fmt_t; keyfile: AnsiString; keyfile_type: gnutls_x509_crt_fmt_t; verify_callback: Pointer; verify_mode: cint; end; PSSL = ^SSL; SSL = record gnutls_state: gnutls_session_t; gnutls_cred: gnutls_certificate_credentials_t; ctx: PSSL_CTX; ciphersuite: SSL_CIPHER; last_error: cint; shutdown: cint; state: cint; verify_callback: Pointer; verify_mode: cint; end; function SSL_library_init (): cint; cdecl; function SSL_CTX_new (method: PSSL_METHOD): PSSL_CTX; cdecl; procedure SSL_CTX_free (ctx: PSSL_CTX); cdecl; function SSL_CTX_use_certificate_file (ctx: PSSL_CTX; const certfile: PAnsiChar; certtype: gnutls_x509_crt_fmt_t): cint; cdecl; function SSL_CTX_use_PrivateKey_file (ctx: PSSL_CTX; const keyfile: PAnsiChar; keytype: gnutls_x509_crt_fmt_t): cint; cdecl; procedure SSL_CTX_set_verify (ctx: PSSL_CTX; verify_mode: cint; verify_callback: pointer); cdecl; function SSL_new (ctx: PSSL_CTX): PSSL; cdecl; procedure SSL_free (ssl: PSSL); cdecl; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; function SSL_set_fd (ssl: PSSL; fd: cint): cint; cdecl; function SSL_pending (ssl: PSSL): cint; cdecl; function SSL_connect (ssl: PSSL): cint; cdecl; function SSL_shutdown (ssl: PSSL): cint; cdecl; function SSL_read (ssl: PSSL; buf: PByte; len: cint): cint; cdecl; function SSL_write (ssl: PSSL; const buf: PByte; len: cint): cint; cdecl; function SSLv23_method(): PSSL_METHOD; cdecl; function SSLv2_method(): PSSL_METHOD; cdecl; function SSLv3_method(): PSSL_METHOD; cdecl; function TLSv1_method(): PSSL_METHOD; cdecl; function TLSv1_1_method(): PSSL_METHOD; cdecl; function TLSv1_2_method(): PSSL_METHOD; cdecl; function SSL_get_current_cipher (ssl: PSSL): PSSL_CIPHER; cdecl; function SSL_CIPHER_get_name (cipher: PSSL_CIPHER): PAnsiChar; cdecl; function SSL_CIPHER_get_bits (cipher: PSSL_CIPHER; bits: pcint): cint; cdecl; function ERR_get_error (): culong; cdecl; function ERR_error_string (e: culong; buf: PAnsiChar): PAnsiChar; cdecl; implementation uses SysUtils, DynLibs, ssl_openssl_lib, ssl_openssl, blcksock, dl; threadvar last_error: cint; var gnutls_global_init: function(): cint; cdecl; gnutls_init: function(out session: gnutls_session_t; con_end: gnutls_connection_end_t): cint; cdecl; gnutls_deinit: procedure(session: gnutls_session_t); cdecl; gnutls_priority_set_direct: function(session: gnutls_session_t; const priorities: PAnsiChar; const err_pos: PPAnsiChar): cint; cdecl; gnutls_credentials_set: function(session: gnutls_session_t; cred_type: gnutls_credentials_type_t; cred: Pointer): cint; cdecl; gnutls_certificate_set_x509_trust_file: function(res: gnutls_certificate_credentials_t; const CAFILE: PAnsiChar; crt_type: gnutls_x509_crt_fmt_t): cint; cdecl; gnutls_certificate_set_x509_key_file: function(res: gnutls_certificate_credentials_t; const CERTFILE: PAnsiChar; const KEYFILE: PAnsiChar; crt_type: gnutls_x509_crt_fmt_t): cint; cdecl; gnutls_certificate_allocate_credentials: function(out res: gnutls_certificate_credentials_t): cint; cdecl; gnutls_certificate_free_credentials: procedure(sc: gnutls_certificate_credentials_t); cdecl; gnutls_transport_set_ptr: procedure(session: gnutls_session_t; ptr: gnutls_transport_ptr_t); cdecl; gnutls_record_check_pending: function(session: gnutls_session_t): csize_t; cdecl; gnutls_handshake: function(session: gnutls_session_t): cint; cdecl; gnutls_bye: function(session: gnutls_session_t; how: gnutls_close_request_t): cint; cdecl; gnutls_record_send: function(session: gnutls_session_t; const data: Pointer; sizeofdata: csize_t): PtrInt; cdecl; gnutls_record_recv: function(session: gnutls_session_t; data: Pointer; sizeofdata: csize_t): PtrInt; cdecl; gnutls_protocol_get_version: function(session: gnutls_session_t): gnutls_protocol_t; cdecl; gnutls_cipher_get: function(session: gnutls_session_t): gnutls_cipher_algorithm_t; cdecl; gnutls_kx_get: function(session: gnutls_session_t): gnutls_kx_algorithm_t; cdecl; gnutls_mac_get: function(session: gnutls_session_t): gnutls_mac_algorithm_t; cdecl; gnutls_compression_get: function(session: gnutls_session_t): gnutls_compression_method_t; cdecl; gnutls_certificate_type_get: function(session: gnutls_session_t): gnutls_certificate_type_t; cdecl; gnutls_cipher_suite_get_name: function(kx_algorithm: gnutls_kx_algorithm_t; cipher_algorithm: gnutls_cipher_algorithm_t; mac_algorithm: gnutls_mac_algorithm_t): PAnsiChar; cdecl; gnutls_cipher_get_key_size: function(algorithm: gnutls_cipher_algorithm_t): csize_t; cdecl; gnutls_strerror: function(error: cint): PAnsiChar; cdecl; gnutls_check_version: function(const req_version: PAnsiChar): PAnsiChar; cdecl; (* Library initialisation functions *) function SSL_library_init (): cint; cdecl; begin gnutls_global_init (); (* NB: we haven't got anywhere to call gnutls_global_deinit() *) Result := 1; end; (* SSL_CTX structure handling *) function SSL_CTX_new (method: PSSL_METHOD): PSSL_CTX; cdecl; begin Result := GetMem(SizeOf(SSL_CTX)); if Assigned(Result) then begin FillChar(Result^, SizeOf(SSL_CTX), 0); Result^.method := method; end; end; procedure SSL_CTX_free (ctx: PSSL_CTX); cdecl; begin FreeMem(ctx^.method); FreeMem(ctx); end; function SSL_CTX_use_certificate_file (ctx: PSSL_CTX; const certfile: PAnsiChar; certtype: gnutls_x509_crt_fmt_t): cint; cdecl; begin ctx^.certfile := StrPas(certfile); ctx^.certfile_type := certtype; Result := 1; end; function SSL_CTX_use_PrivateKey_file (ctx: PSSL_CTX; const keyfile: PAnsiChar; keytype: gnutls_x509_crt_fmt_t): cint; cdecl; begin ctx^.keyfile := StrPas(keyfile); ctx^.keyfile_type := keytype; Result := 1; end; procedure SSL_CTX_set_verify (ctx: PSSL_CTX; verify_mode: cint; verify_callback: pointer); cdecl; begin ctx^.verify_mode := verify_mode; ctx^.verify_callback := verify_callback; end; (* SSL structure handling *) function SSL_new (ctx: PSSL_CTX): PSSL; cdecl; var err: cint; begin Result := GetMem(SizeOf(SSL)); if not Assigned(Result) then Exit; FillChar(Result^, SizeOf(SSL), 0); err := gnutls_certificate_allocate_credentials (Result^.gnutls_cred); if (err < 0) then begin last_error := err; FreeMem (Result); Exit(nil); end; gnutls_init (Result^.gnutls_state, ctx^.method^.connend); gnutls_priority_set_direct (Result^.gnutls_state, ctx^.method^.priorities, nil); gnutls_credentials_set (Result^.gnutls_state, GNUTLS_CRD_CERTIFICATE, Result^.gnutls_cred); if Length(ctx^.certfile) > 0 then gnutls_certificate_set_x509_trust_file (Result^.gnutls_cred, PAnsiChar(ctx^.certfile), ctx^.certfile_type); if Length(ctx^.keyfile) > 0 then gnutls_certificate_set_x509_key_file (Result^.gnutls_cred, PAnsiChar(ctx^.certfile), PAnsiChar(ctx^.keyfile), ctx^.keyfile_type); Result^.ctx := ctx; Result^.verify_mode := ctx^.verify_mode; Result^.verify_callback := ctx^.verify_callback; end; procedure SSL_free (ssl: PSSL); cdecl; begin gnutls_certificate_free_credentials (ssl^.gnutls_cred); gnutls_deinit (ssl^.gnutls_state); FreeMem(ssl); end; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; begin if (ret > 0) then Result := SSL_ERROR_NONE else Result := SSL_ERROR_ZERO_RETURN; end; function SSL_set_fd (ssl: PSSL; fd: cint): cint; cdecl; begin {$PUSH}{$HINTS OFF}{$WARNINGS OFF} gnutls_transport_set_ptr (ssl^.gnutls_state, Pointer(fd)); {$POP} Result := 1; end; function SSL_pending (ssl: PSSL): cint; cdecl; begin Result := gnutls_record_check_pending (ssl^.gnutls_state); end; (* SSL connection open/close/read/write functions *) function SSL_connect (ssl: PSSL): cint; cdecl; var err: cint; begin err := gnutls_handshake (ssl^.gnutls_state); ssl^.last_error := err; if (err < 0) then begin last_error := err; Exit(0); end; Result := 1; end; function SSL_shutdown (ssl: PSSL): cint; cdecl; begin if (ssl^.shutdown <> 0) then begin gnutls_bye (ssl^.gnutls_state, GNUTLS_SHUT_WR); Inc(ssl^.shutdown); end else begin gnutls_bye (ssl^.gnutls_state, GNUTLS_SHUT_RDWR); Inc(ssl^.shutdown); end; (* FIXME *) Result := 1; end; function SSL_read (ssl: PSSL; buf: PByte; len: cint): cint; cdecl; begin Result := gnutls_record_recv (ssl^.gnutls_state, buf, len); ssl^.last_error := Result; if (Result < 0) then begin last_error := Result; Result := 0; end; end; function SSL_write (ssl: PSSL; const buf: PByte; len: cint): cint; cdecl; begin Result := gnutls_record_send (ssl^.gnutls_state, buf, len); ssl^.last_error := Result; if (Result < 0) then begin last_error := Result; Result := 0; end; end; (* SSL_METHOD functions *) function SSLv23_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.0:+VERS-SSL3.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function SSLv2_method(): PSSL_METHOD; cdecl; begin Result := nil; end; function SSLv3_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-SSL3.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_method(): PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.0:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_1_method: PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.1:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; function TLSv1_2_method: PSSL_METHOD; cdecl; begin Result := GetMem(SizeOf(SSL_METHOD)); if Assigned(Result) then begin Result^.connend := GNUTLS_CLIENT; Result^.priorities := 'NONE:+VERS-TLS1.2:+CIPHER-ALL:+COMP-ALL:+RSA:+DHE-RSA:+DHE-DSS:+MAC-ALL'; end; end; (* SSL_CIPHER functions *) function SSL_get_current_cipher (ssl: PSSL): PSSL_CIPHER; cdecl; begin if not Assigned(ssl) then Exit(nil); ssl^.ciphersuite.version := gnutls_protocol_get_version (ssl^.gnutls_state); ssl^.ciphersuite.cipher := gnutls_cipher_get (ssl^.gnutls_state); ssl^.ciphersuite.kx := gnutls_kx_get (ssl^.gnutls_state); ssl^.ciphersuite.mac := gnutls_mac_get (ssl^.gnutls_state); ssl^.ciphersuite.compression := gnutls_compression_get (ssl^.gnutls_state); ssl^.ciphersuite.cert := gnutls_certificate_type_get (ssl^.gnutls_state); Result := @ssl^.ciphersuite; end; function SSL_CIPHER_get_name (cipher: PSSL_CIPHER): PAnsiChar; cdecl; begin if not Assigned(cipher) then Exit('NONE'); Result := gnutls_cipher_suite_get_name (cipher^.kx, cipher^.cipher, cipher^.mac); end; function SSL_CIPHER_get_bits (cipher: PSSL_CIPHER; bits: pcint): cint; cdecl; begin if not Assigned(cipher) then Exit(0); Result := (8 * gnutls_cipher_get_key_size (cipher^.cipher)); if Assigned(bits) then bits^ := Result; end; (* error handling *) function ERR_get_error (): culong; cdecl; begin Result := -1 * last_error; last_error := 0; end; function ERR_error_string (e: culong; buf: PAnsiChar): PAnsiChar; cdecl; begin Result := gnutls_strerror (-1 * cint(e)); end; function SafeGetProcAddress(Lib : TlibHandle; const ProcName : AnsiString) : Pointer; begin Result:= GetProcedureAddress(Lib, ProcName); if (Result = nil) then raise Exception.Create(EmptyStr); end; const libgnutls: array[0..2] of String = ('30', '28', '26'); var index: Integer; dlinfo: dl_info; gnutls: TLibHandle = NilHandle; begin if (IsSSLloaded = False) then begin for index:= Low(libgnutls) to High(libgnutls) do begin gnutls:= LoadLibrary('libgnutls.so.' + libgnutls[index]); if gnutls <> NilHandle then Break; end; if (gnutls <> NilHandle) then try @gnutls_check_version:= SafeGetProcAddress(gnutls, 'gnutls_check_version'); if (gnutls_check_version('3.0.0') = nil) then raise Exception.Create(EmptyStr); @gnutls_global_init:= SafeGetProcAddress(gnutls, 'gnutls_global_init'); @gnutls_init:= SafeGetProcAddress(gnutls, 'gnutls_init'); @gnutls_deinit:= SafeGetProcAddress(gnutls, 'gnutls_deinit'); @gnutls_priority_set_direct:= SafeGetProcAddress(gnutls, 'gnutls_priority_set_direct'); @gnutls_credentials_set:= SafeGetProcAddress(gnutls, 'gnutls_credentials_set'); @gnutls_certificate_set_x509_trust_file:= SafeGetProcAddress(gnutls, 'gnutls_certificate_set_x509_trust_file'); @gnutls_certificate_set_x509_key_file:= SafeGetProcAddress(gnutls, 'gnutls_certificate_set_x509_key_file'); @gnutls_certificate_allocate_credentials:= SafeGetProcAddress(gnutls, 'gnutls_certificate_allocate_credentials'); @gnutls_certificate_free_credentials:= SafeGetProcAddress(gnutls, 'gnutls_certificate_free_credentials'); @gnutls_transport_set_ptr:= SafeGetProcAddress(gnutls, 'gnutls_transport_set_ptr'); @gnutls_record_check_pending:= SafeGetProcAddress(gnutls, 'gnutls_record_check_pending'); @gnutls_handshake:= SafeGetProcAddress(gnutls, 'gnutls_handshake'); @gnutls_bye:= SafeGetProcAddress(gnutls, 'gnutls_bye'); @gnutls_record_send:= SafeGetProcAddress(gnutls, 'gnutls_record_send'); @gnutls_record_recv:= SafeGetProcAddress(gnutls, 'gnutls_record_recv'); @gnutls_protocol_get_version:= SafeGetProcAddress(gnutls, 'gnutls_protocol_get_version'); @gnutls_cipher_get:= SafeGetProcAddress(gnutls, 'gnutls_cipher_get'); @gnutls_kx_get:= SafeGetProcAddress(gnutls, 'gnutls_kx_get'); @gnutls_mac_get:= SafeGetProcAddress(gnutls, 'gnutls_mac_get'); @gnutls_compression_get:= SafeGetProcAddress(gnutls, 'gnutls_compression_get'); @gnutls_certificate_type_get:= SafeGetProcAddress(gnutls, 'gnutls_certificate_type_get'); @gnutls_cipher_suite_get_name:= SafeGetProcAddress(gnutls, 'gnutls_cipher_suite_get_name'); @gnutls_cipher_get_key_size:= SafeGetProcAddress(gnutls, 'gnutls_cipher_get_key_size'); @gnutls_strerror:= SafeGetProcAddress(gnutls, 'gnutls_strerror'); FillChar(dlinfo, SizeOf(dlinfo), 0); if dladdr(@dlinfo, @dlinfo) <> 0 then begin DLLSSLName:= dlinfo.dli_fname; DLLUtilName:= DLLSSLName; if InitSSLInterface then SSLImplementation:= TSSLOpenSSL; end; except FreeLibrary(gnutls); end; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/synautil.pas0000644000175000001440000015400012014201074021621 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 004.015.000 | |==============================================================================| | Content: support procedures and functions | |==============================================================================| | Copyright (c)1999-2012, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 1999-2012. | | Portions created by Hernan Sanchez are Copyright (c) 2000. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Hernan Sanchez (hernan.sanchez@iname.com) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(Support procedures and functions)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synautil; interface uses {$IFDEF MSWINDOWS} Windows, {$ELSE} {$IFDEF FPC} UnixUtil, Unix, BaseUnix, {$ELSE} Libc, {$ENDIF} {$ENDIF} {$IFDEF CIL} System.IO, {$ENDIF} SysUtils, Classes, SynaFpc; {$IFDEF VER100} type int64 = integer; {$ENDIF} {:Return your timezone bias from UTC time in minutes.} function TimeZoneBias: integer; {:Return your timezone bias from UTC time in string representation like "+0200".} function TimeZone: string; {:Returns current time in format defined in RFC-822. Useful for SMTP messages, but other protocols use this time format as well. Results contains the timezone specification. Four digit year is used to break any Y2K concerns. (Example 'Fri, 15 Oct 1999 21:14:56 +0200')} function Rfc822DateTime(t: TDateTime): string; {:Returns date and time in format defined in C compilers in format "mmm dd hh:nn:ss"} function CDateTime(t: TDateTime): string; {:Returns date and time in format defined in format 'yymmdd hhnnss'} function SimpleDateTime(t: TDateTime): string; {:Returns date and time in format defined in ANSI C compilers in format "ddd mmm d hh:nn:ss yyyy" } function AnsiCDateTime(t: TDateTime): string; {:Decode three-letter string with name of month to their month number. If string not match any month name, then is returned 0. For parsing are used predefined names for English, French and German and names from system locale too.} function GetMonthNumber(Value: String): integer; {:Return decoded time from given string. Time must be witch separator ':'. You can use "hh:mm" or "hh:mm:ss".} function GetTimeFromStr(Value: string): TDateTime; {:Decode string in format "m-d-y" to TDateTime type.} function GetDateMDYFromStr(Value: string): TDateTime; {:Decode various string representations of date and time to Tdatetime type. This function do all timezone corrections too! This function can decode lot of formats like: @longcode(# ddd, d mmm yyyy hh:mm:ss ddd, d mmm yy hh:mm:ss ddd, mmm d yyyy hh:mm:ss ddd mmm dd hh:mm:ss yyyy #) and more with lot of modifications, include: @longcode(# Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format #) Timezone corrections known lot of symbolic timezone names (like CEST, EDT, etc.) or numeric representation (like +0200). By convention defined in RFC timezone +0000 is GMT and -0000 is current your system timezone.} function DecodeRfcDateTime(Value: string): TDateTime; {:Return current system date and time in UTC timezone.} function GetUTTime: TDateTime; {:Set Newdt as current system date and time in UTC timezone. This function work only if you have administrator rights!} function SetUTTime(Newdt: TDateTime): Boolean; {:Return current value of system timer with precizion 1 millisecond. Good for measure time difference.} function GetTick: LongWord; {:Return difference between two timestamps. It working fine only for differences smaller then maxint. (difference must be smaller then 24 days.)} function TickDelta(TickOld, TickNew: LongWord): LongWord; {:Return two characters, which ordinal values represents the value in byte format. (High-endian)} function CodeInt(Value: Word): Ansistring; {:Decodes two characters located at "Index" offset position of the "Value" string to Word values.} function DecodeInt(const Value: Ansistring; Index: Integer): Word; {:Return four characters, which ordinal values represents the value in byte format. (High-endian)} function CodeLongInt(Value: LongInt): Ansistring; {:Decodes four characters located at "Index" offset position of the "Value" string to LongInt values.} function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; {:Dump binary buffer stored in a string to a result string.} function DumpStr(const Buffer: Ansistring): string; {:Dump binary buffer stored in a string to a result string. All bytes with code of character is written as character, not as hexadecimal value.} function DumpExStr(const Buffer: Ansistring): string; {:Dump binary buffer stored in a string to a file with DumpFile filename.} procedure Dump(const Buffer: AnsiString; DumpFile: string); {:Dump binary buffer stored in a string to a file with DumpFile filename. All bytes with code of character is written as character, not as hexadecimal value.} procedure DumpEx(const Buffer: AnsiString; DumpFile: string); {:Like TrimLeft, but remove only spaces, not control characters!} function TrimSPLeft(const S: string): string; {:Like TrimRight, but remove only spaces, not control characters!} function TrimSPRight(const S: string): string; {:Like Trim, but remove only spaces, not control characters!} function TrimSP(const S: string): string; {:Returns a portion of the "Value" string located to the left of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateLeft(const Value, Delimiter: string): string; {:Returns the portion of the "Value" string located to the right of the "Delimiter" string. If a delimiter is not found, results is original string.} function SeparateRight(const Value, Delimiter: string): string; {:Returns parameter value from string in format: parameter1="value1"; parameter2=value2} function GetParameter(const Value, Parameter: string): string; {:parse value string with elements differed by Delimiter into stringlist.} procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); {:parse value string with elements differed by ';' into stringlist.} procedure ParseParameters(Value: string; const Parameters: TStrings); {:Index of string in stringlist with same beginning as Value is returned.} function IndexByBegin(Value: string; const List: TStrings): integer; {:Returns only the e-mail portion of an address from the full address format. i.e. returns 'nobody@@somewhere.com' from '"someone" '} function GetEmailAddr(const Value: string): string; {:Returns only the description part from a full address format. i.e. returns 'someone' from '"someone" '} function GetEmailDesc(Value: string): string; {:Returns a string with hexadecimal digits representing the corresponding values of the bytes found in "Value" string.} function StrToHex(const Value: Ansistring): string; {:Returns a string of binary "Digits" representing "Value".} function IntToBin(Value: Integer; Digits: Byte): string; {:Returns an integer equivalent of the binary string in "Value". (i.e. ('10001010') returns 138)} function BinToInt(const Value: string): Integer; {:Parses a URL to its various components.} function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, Para: string): string; {:Replaces all "Search" string values found within "Value" string, with the "Replace" string value.} function ReplaceString(Value, Search, Replace: AnsiString): AnsiString; {:It is like RPos, but search is from specified possition.} function RPosEx(const Sub, Value: string; From: integer): Integer; {:It is like POS function, but from right side of Value string.} function RPos(const Sub, Value: String): Integer; {:Like @link(fetch), but working with binary strings, not with text.} function FetchBin(var Value: string; const Delimiter: string): string; {:Fetch string from left of Value string.} function Fetch(var Value: string; const Delimiter: string): string; {:Fetch string from left of Value string. This function ignore delimitesr inside quotations.} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; {:If string is binary string (contains non-printable characters), then is returned true.} function IsBinaryString(const Value: AnsiString): Boolean; {:return position of string terminator in string. If terminator found, then is returned in terminator parameter. Possible line terminators are: CRLF, LFCR, CR, LF} function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; {:Delete empty strings from end of stringlist.} Procedure StringsTrim(const value: TStrings); {:Like Pos function, buf from given string possition.} function PosFrom(const SubStr, Value: String; From: integer): integer; {$IFNDEF CIL} {:Increase pointer by value.} function IncPoint(const p: pointer; Value: integer): pointer; {$ENDIF} {:Get string between PairBegin and PairEnd. This function respect nesting. For example: @longcode(# Value is: 'Hi! (hello(yes!))' pairbegin is: '(' pairend is: ')' In this case result is: 'hello(yes!)'#)} function GetBetween(const PairBegin, PairEnd, Value: string): string; {:Return count of Chr in Value string.} function CountOfChar(const Value: string; Chr: char): integer; {:Remove quotation from Value string. If Value is not quoted, then return same string without any modification. } function UnquoteStr(const Value: string; Quote: Char): string; {:Quote Value string. If Value contains some Quote chars, then it is doubled.} function QuoteStr(const Value: string; Quote: Char): string; {:Convert lines in stringlist from 'name: value' form to 'name=value' form.} procedure HeadersToList(const Value: TStrings); {:Convert lines in stringlist from 'name=value' form to 'name: value' form.} procedure ListToHeaders(const Value: TStrings); {:swap bytes in integer.} function SwapBytes(Value: integer): integer; {:read string with requested length form stream.} function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; {:write string to stream.} procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); {:Return filename of new temporary file in Dir (if empty, then default temporary directory is used) and with optional filename prefix.} function GetTempFile(const Dir, prefix: AnsiString): AnsiString; {:Return padded string. If length is greater, string is truncated. If length is smaller, string is padded by Pad character.} function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; {:XOR each byte in the strings} function XorString(Indata1, Indata2: AnsiString): AnsiString; {:Read header from "Value" stringlist beginning at "Index" position. If header is Splitted into multiple lines, then this procedure de-split it into one line.} function NormalizeHeader(Value: TStrings; var Index: Integer): string; {pf} {:Search for one of line terminators CR, LF or NUL. Return position of the line beginning and length of text.} procedure SearchForLineBreak(var APtr:PANSIChar; AEtx:PANSIChar; out ABol:PANSIChar; out ALength:integer); {:Skip both line terminators CR LF (if any). Move APtr position forward.} procedure SkipLineBreak(var APtr:PANSIChar; AEtx:PANSIChar); {:Skip all blank lines in a buffer starting at APtr and move APtr position forward.} procedure SkipNullLines (var APtr:PANSIChar; AEtx:PANSIChar); {:Copy all lines from a buffer starting at APtr to ALines until empty line or end of the buffer is reached. Move APtr position forward).} procedure CopyLinesFromStreamUntilNullLine(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings); {:Copy all lines from a buffer starting at APtr to ALines until ABoundary or end of the buffer is reached. Move APtr position forward).} procedure CopyLinesFromStreamUntilBoundary(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings; const ABoundary:ANSIString); {:Search ABoundary in a buffer starting at APtr. Return beginning of the ABoundary. Move APtr forward behind a trailing CRLF if any).} function SearchForBoundary (var APtr:PANSIChar; AEtx:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Compare a text at position ABOL with ABoundary and return position behind the match (including a trailing CRLF if any).} function MatchBoundary (ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Compare a text at position ABOL with ABoundary + the last boundary suffix and return position behind the match (including a trailing CRLF if any).} function MatchLastBoundary (ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; {:Copy data from a buffer starting at position APtr and delimited by AEtx position into ANSIString.} function BuildStringFromBuffer (AStx,AEtx:PANSIChar): ANSIString; {/pf} var {:can be used for your own months strings for @link(getmonthnumber)} CustomMonthNames: array[1..12] of string; implementation {==============================================================================} const MyDayNames: array[1..7] of AnsiString = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); var MyMonthNames: array[0..6, 1..12] of String = ( ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //rewrited by system locales 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', //English 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), ('jan', 'fv', 'mar', 'avr', 'mai', 'jun', //French 'jul', 'ao', 'sep', 'oct', 'nov', 'dc'), ('jan', 'fev', 'mar', 'avr', 'mai', 'jun', //French#2 'jul', 'aou', 'sep', 'oct', 'nov', 'dec'), ('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', //German 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), ('Jan', 'Feb', 'Mr', 'Apr', 'Mai', 'Jun', //German#2 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'), ('Led', 'no', 'Be', 'Dub', 'Kv', 'en', //Czech 'ec', 'Srp', 'Z', 'j', 'Lis', 'Pro') ); {==============================================================================} function TimeZoneBias: integer; {$IFNDEF MSWINDOWS} {$IFNDEF FPC} var t: TTime_T; UT: TUnixTime; begin __time(@T); localtime_r(@T, UT); Result := ut.__tm_gmtoff div 60; {$ELSE} begin Result := TZSeconds div 60; {$ENDIF} {$ELSE} var zoneinfo: TTimeZoneInformation; bias: Integer; begin case GetTimeZoneInformation(Zoneinfo) of 2: bias := zoneinfo.Bias + zoneinfo.DaylightBias; 1: bias := zoneinfo.Bias + zoneinfo.StandardBias; else bias := zoneinfo.Bias; end; Result := bias * (-1); {$ENDIF} end; {==============================================================================} function TimeZone: string; var bias: Integer; h, m: Integer; begin bias := TimeZoneBias; if bias >= 0 then Result := '+' else Result := '-'; bias := Abs(bias); h := bias div 60; m := bias mod 60; Result := Result + Format('%.2d%.2d', [h, m]); end; {==============================================================================} function Rfc822DateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result := Format('%s, %d %s %s %s', [MyDayNames[DayOfWeek(t)], wDay, MyMonthNames[1, wMonth], FormatDateTime('yyyy hh":"nn":"ss', t), TimeZone]); end; {==============================================================================} function CDateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result:= Format('%s %2d %s', [MyMonthNames[1, wMonth], wDay, FormatDateTime('hh":"nn":"ss', t)]); end; {==============================================================================} function SimpleDateTime(t: TDateTime): string; begin Result := FormatDateTime('yymmdd hhnnss', t); end; {==============================================================================} function AnsiCDateTime(t: TDateTime): string; var wYear, wMonth, wDay: word; begin DecodeDate(t, wYear, wMonth, wDay); Result := Format('%s %s %d %s', [MyDayNames[DayOfWeek(t)], MyMonthNames[1, wMonth], wDay, FormatDateTime('hh":"nn":"ss yyyy ', t)]); end; {==============================================================================} function DecodeTimeZone(Value: string; var Zone: integer): Boolean; var x: integer; zh, zm: integer; s: string; begin Result := false; s := Value; if (Pos('+', s) = 1) or (Pos('-',s) = 1) then begin if s = '-0000' then Zone := TimeZoneBias else if Length(s) > 4 then begin zh := StrToIntdef(s[2] + s[3], 0); zm := StrToIntdef(s[4] + s[5], 0); zone := zh * 60 + zm; if s[1] = '-' then zone := zone * (-1); end; Result := True; end else begin x := 32767; if s = 'NZDT' then x := 13; if s = 'IDLE' then x := 12; if s = 'NZST' then x := 12; if s = 'NZT' then x := 12; if s = 'EADT' then x := 11; if s = 'GST' then x := 10; if s = 'JST' then x := 9; if s = 'CCT' then x := 8; if s = 'WADT' then x := 8; if s = 'WAST' then x := 7; if s = 'ZP6' then x := 6; if s = 'ZP5' then x := 5; if s = 'ZP4' then x := 4; if s = 'BT' then x := 3; if s = 'EET' then x := 2; if s = 'MEST' then x := 2; if s = 'MESZ' then x := 2; if s = 'SST' then x := 2; if s = 'FST' then x := 2; if s = 'CEST' then x := 2; if s = 'CET' then x := 1; if s = 'FWT' then x := 1; if s = 'MET' then x := 1; if s = 'MEWT' then x := 1; if s = 'SWT' then x := 1; if s = 'UT' then x := 0; if s = 'UTC' then x := 0; if s = 'GMT' then x := 0; if s = 'WET' then x := 0; if s = 'WAT' then x := -1; if s = 'BST' then x := -1; if s = 'AT' then x := -2; if s = 'ADT' then x := -3; if s = 'AST' then x := -4; if s = 'EDT' then x := -4; if s = 'EST' then x := -5; if s = 'CDT' then x := -5; if s = 'CST' then x := -6; if s = 'MDT' then x := -6; if s = 'MST' then x := -7; if s = 'PDT' then x := -7; if s = 'PST' then x := -8; if s = 'YDT' then x := -8; if s = 'YST' then x := -9; if s = 'HDT' then x := -9; if s = 'AHST' then x := -10; if s = 'CAT' then x := -10; if s = 'HST' then x := -10; if s = 'EAST' then x := -10; if s = 'NT' then x := -11; if s = 'IDLW' then x := -12; if x <> 32767 then begin zone := x * 60; Result := True; end; end; end; {==============================================================================} function GetMonthNumber(Value: String): integer; var n: integer; function TestMonth(Value: String; Index: Integer): Boolean; var n: integer; begin Result := False; for n := 0 to 6 do if Value = AnsiUppercase(MyMonthNames[n, Index]) then begin Result := True; Break; end; end; begin Result := 0; Value := AnsiUppercase(Value); for n := 1 to 12 do if TestMonth(Value, n) or (Value = AnsiUppercase(CustomMonthNames[n])) then begin Result := n; Break; end; end; {==============================================================================} function GetTimeFromStr(Value: string): TDateTime; var x: integer; begin x := rpos(':', Value); if (x > 0) and ((Length(Value) - x) > 2) then Value := Copy(Value, 1, x + 2); Value := ReplaceString(Value, ':', TimeSeparator); Result := -1; try Result := StrToTime(Value); except on Exception do ; end; end; {==============================================================================} function GetDateMDYFromStr(Value: string): TDateTime; var wYear, wMonth, wDay: word; s: string; begin Result := 0; s := Fetch(Value, '-'); wMonth := StrToIntDef(s, 12); s := Fetch(Value, '-'); wDay := StrToIntDef(s, 30); wYear := StrToIntDef(Value, 1899); if wYear < 1000 then if (wYear > 99) then wYear := wYear + 1900 else if wYear > 50 then wYear := wYear + 1900 else wYear := wYear + 2000; try Result := EncodeDate(wYear, wMonth, wDay); except on Exception do ; end; end; {==============================================================================} function DecodeRfcDateTime(Value: string): TDateTime; var day, month, year: Word; zone: integer; x, y: integer; s: string; t: TDateTime; begin // ddd, d mmm yyyy hh:mm:ss // ddd, d mmm yy hh:mm:ss // ddd, mmm d yyyy hh:mm:ss // ddd mmm dd hh:mm:ss yyyy // Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 // Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 // Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() Format Result := 0; if Value = '' then Exit; day := 0; month := 0; year := 0; zone := 0; Value := ReplaceString(Value, ' -', ' #'); Value := ReplaceString(Value, '-', ' '); Value := ReplaceString(Value, ' #', ' -'); while Value <> '' do begin s := Fetch(Value, ' '); s := uppercase(s); // timezone if DecodetimeZone(s, x) then begin zone := x; continue; end; x := StrToIntDef(s, 0); // day or year if x > 0 then if (x < 32) and (day = 0) then begin day := x; continue; end else begin if (year = 0) and ((month > 0) or (x > 12)) then begin year := x; if year < 32 then year := year + 2000; if year < 1000 then year := year + 1900; continue; end; end; // time if rpos(':', s) > Pos(':', s) then begin t := GetTimeFromStr(s); if t <> -1 then Result := t; continue; end; //timezone daylight saving time if s = 'DST' then begin zone := zone + 60; continue; end; // month y := GetMonthNumber(s); if (y > 0) and (month = 0) then month := y; end; if year = 0 then year := 1980; if month < 1 then month := 1; if month > 12 then month := 12; if day < 1 then day := 1; x := MonthDays[IsLeapYear(year), month]; if day > x then day := x; Result := Result + Encodedate(year, month, day); zone := zone - TimeZoneBias; x := zone div 1440; Result := Result - x; zone := zone mod 1440; t := EncodeTime(Abs(zone) div 60, Abs(zone) mod 60, 0, 0); if zone < 0 then t := 0 - t; Result := Result - t; end; {==============================================================================} function GetUTTime: TDateTime; {$IFDEF MSWINDOWS} {$IFNDEF FPC} var st: TSystemTime; begin GetSystemTime(st); result := SystemTimeToDateTime(st); {$ELSE} var st: SysUtils.TSystemTime; stw: Windows.TSystemTime; begin GetSystemTime(stw); st.Year := stw.wYear; st.Month := stw.wMonth; st.Day := stw.wDay; st.Hour := stw.wHour; st.Minute := stw.wMinute; st.Second := stw.wSecond; st.Millisecond := stw.wMilliseconds; result := SystemTimeToDateTime(st); {$ENDIF} {$ELSE} {$IFNDEF FPC} var TV: TTimeVal; begin gettimeofday(TV, nil); Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; {$ELSE} var TV: TimeVal; begin fpgettimeofday(@TV, nil); Result := UnixDateDelta + (TV.tv_sec + TV.tv_usec / 1000000) / 86400; {$ENDIF} {$ENDIF} end; {==============================================================================} function SetUTTime(Newdt: TDateTime): Boolean; {$IFDEF MSWINDOWS} {$IFNDEF FPC} var st: TSystemTime; begin DateTimeToSystemTime(newdt,st); Result := SetSystemTime(st); {$ELSE} var st: SysUtils.TSystemTime; stw: Windows.TSystemTime; begin DateTimeToSystemTime(newdt,st); stw.wYear := st.Year; stw.wMonth := st.Month; stw.wDay := st.Day; stw.wHour := st.Hour; stw.wMinute := st.Minute; stw.wSecond := st.Second; stw.wMilliseconds := st.Millisecond; Result := SetSystemTime(stw); {$ENDIF} {$ELSE} {$IFNDEF FPC} var TV: TTimeVal; d: double; TZ: Ttimezone; PZ: PTimeZone; begin TZ.tz_minuteswest := 0; TZ.tz_dsttime := 0; PZ := @TZ; gettimeofday(TV, PZ); d := (newdt - UnixDateDelta) * 86400; TV.tv_sec := trunc(d); TV.tv_usec := trunc(frac(d) * 1000000); Result := settimeofday(TV, TZ) <> -1; {$ELSE} var TV: TimeVal; d: double; begin d := (newdt - UnixDateDelta) * 86400; TV.tv_sec := trunc(d); TV.tv_usec := trunc(frac(d) * 1000000); Result := fpsettimeofday(@TV, nil) <> -1; {$ENDIF} {$ENDIF} end; {==============================================================================} {$IFNDEF MSWINDOWS} function GetTick: LongWord; var Stamp: TTimeStamp; begin Stamp := DateTimeToTimeStamp(Now); Result := Stamp.Time; end; {$ELSE} function GetTick: LongWord; var tick, freq: TLargeInteger; {$IFDEF VER100} x: TLargeInteger; {$ENDIF} begin if Windows.QueryPerformanceFrequency(freq) then begin Windows.QueryPerformanceCounter(tick); {$IFDEF VER100} x.QuadPart := (tick.QuadPart / freq.QuadPart) * 1000; Result := x.LowPart; {$ELSE} Result := Trunc((tick / freq) * 1000) and High(LongWord) {$ENDIF} end else Result := Windows.GetTickCount; end; {$ENDIF} {==============================================================================} function TickDelta(TickOld, TickNew: LongWord): LongWord; begin //if DWord is signed type (older Deplhi), // then it not work properly on differencies larger then maxint! Result := 0; if TickOld <> TickNew then begin if TickNew < TickOld then begin TickNew := TickNew + LongWord(MaxInt) + 1; TickOld := TickOld + LongWord(MaxInt) + 1; end; Result := TickNew - TickOld; if TickNew < TickOld then if Result > 0 then Result := 0 - Result; end; end; {==============================================================================} function CodeInt(Value: Word): Ansistring; begin setlength(result, 2); result[1] := AnsiChar(Value div 256); result[2] := AnsiChar(Value mod 256); // Result := AnsiChar(Value div 256) + AnsiChar(Value mod 256) end; {==============================================================================} function DecodeInt(const Value: Ansistring; Index: Integer): Word; var x, y: Byte; begin if Length(Value) > Index then x := Ord(Value[Index]) else x := 0; if Length(Value) >= (Index + 1) then y := Ord(Value[Index + 1]) else y := 0; Result := x * 256 + y; end; {==============================================================================} function CodeLongInt(Value: Longint): Ansistring; var x, y: word; begin // this is fix for negative numbers on systems where longint = integer x := (Value shr 16) and integer($ffff); y := Value and integer($ffff); setlength(result, 4); result[1] := AnsiChar(x div 256); result[2] := AnsiChar(x mod 256); result[3] := AnsiChar(y div 256); result[4] := AnsiChar(y mod 256); end; {==============================================================================} function DecodeLongInt(const Value: Ansistring; Index: Integer): LongInt; var x, y: Byte; xl, yl: Byte; begin if Length(Value) > Index then x := Ord(Value[Index]) else x := 0; if Length(Value) >= (Index + 1) then y := Ord(Value[Index + 1]) else y := 0; if Length(Value) >= (Index + 2) then xl := Ord(Value[Index + 2]) else xl := 0; if Length(Value) >= (Index + 3) then yl := Ord(Value[Index + 3]) else yl := 0; Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); end; {==============================================================================} function DumpStr(const Buffer: Ansistring): string; var n: Integer; begin Result := ''; for n := 1 to Length(Buffer) do Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); end; {==============================================================================} function DumpExStr(const Buffer: Ansistring): string; var n: Integer; x: Byte; begin Result := ''; for n := 1 to Length(Buffer) do begin x := Ord(Buffer[n]); if x in [65..90, 97..122] then Result := Result + ' +''' + char(x) + '''' else Result := Result + ' +#$' + IntToHex(Ord(Buffer[n]), 2); end; end; {==============================================================================} procedure Dump(const Buffer: AnsiString; DumpFile: string); var f: Text; begin AssignFile(f, DumpFile); if FileExists(DumpFile) then DeleteFile(DumpFile); Rewrite(f); try Writeln(f, DumpStr(Buffer)); finally CloseFile(f); end; end; {==============================================================================} procedure DumpEx(const Buffer: AnsiString; DumpFile: string); var f: Text; begin AssignFile(f, DumpFile); if FileExists(DumpFile) then DeleteFile(DumpFile); Rewrite(f); try Writeln(f, DumpExStr(Buffer)); finally CloseFile(f); end; end; {==============================================================================} function TrimSPLeft(const S: string): string; var I, L: Integer; begin Result := ''; if S = '' then Exit; L := Length(S); I := 1; while (I <= L) and (S[I] = ' ') do Inc(I); Result := Copy(S, I, Maxint); end; {==============================================================================} function TrimSPRight(const S: string): string; var I: Integer; begin Result := ''; if S = '' then Exit; I := Length(S); while (I > 0) and (S[I] = ' ') do Dec(I); Result := Copy(S, 1, I); end; {==============================================================================} function TrimSP(const S: string): string; begin Result := TrimSPLeft(s); Result := TrimSPRight(Result); end; {==============================================================================} function SeparateLeft(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x < 1 then Result := Value else Result := Copy(Value, 1, x - 1); end; {==============================================================================} function SeparateRight(const Value, Delimiter: string): string; var x: Integer; begin x := Pos(Delimiter, Value); if x > 0 then x := x + Length(Delimiter) - 1; Result := Copy(Value, x + 1, Length(Value) - x); end; {==============================================================================} function GetParameter(const Value, Parameter: string): string; var s: string; v: string; begin Result := ''; v := Value; while v <> '' do begin s := Trim(FetchEx(v, ';', '"')); if Pos(Uppercase(parameter), Uppercase(s)) = 1 then begin Delete(s, 1, Length(Parameter)); s := Trim(s); if s = '' then Break; if s[1] = '=' then begin Result := Trim(SeparateRight(s, '=')); Result := UnquoteStr(Result, '"'); break; end; end; end; end; {==============================================================================} procedure ParseParametersEx(Value, Delimiter: string; const Parameters: TStrings); var s: string; begin Parameters.Clear; while Value <> '' do begin s := Trim(FetchEx(Value, Delimiter, '"')); Parameters.Add(s); end; end; {==============================================================================} procedure ParseParameters(Value: string; const Parameters: TStrings); begin ParseParametersEx(Value, ';', Parameters); end; {==============================================================================} function IndexByBegin(Value: string; const List: TStrings): integer; var n: integer; s: string; begin Result := -1; Value := uppercase(Value); for n := 0 to List.Count -1 do begin s := UpperCase(List[n]); if Pos(Value, s) = 1 then begin Result := n; Break; end; end; end; {==============================================================================} function GetEmailAddr(const Value: string): string; var s: string; begin s := SeparateRight(Value, '<'); s := SeparateLeft(s, '>'); Result := Trim(s); end; {==============================================================================} function GetEmailDesc(Value: string): string; var s: string; begin Value := Trim(Value); s := SeparateRight(Value, '"'); if s <> Value then s := SeparateLeft(s, '"') else begin s := SeparateLeft(Value, '<'); if s = Value then begin s := SeparateRight(Value, '('); if s <> Value then s := SeparateLeft(s, ')') else s := ''; end; end; Result := Trim(s); end; {==============================================================================} function StrToHex(const Value: Ansistring): string; var n: Integer; begin Result := ''; for n := 1 to Length(Value) do Result := Result + IntToHex(Byte(Value[n]), 2); Result := LowerCase(Result); end; {==============================================================================} function IntToBin(Value: Integer; Digits: Byte): string; var x, y, n: Integer; begin Result := ''; x := Value; repeat y := x mod 2; x := x div 2; if y > 0 then Result := '1' + Result else Result := '0' + Result; until x = 0; x := Length(Result); for n := x to Digits - 1 do Result := '0' + Result; end; {==============================================================================} function BinToInt(const Value: string): Integer; var n: Integer; begin Result := 0; for n := 1 to Length(Value) do begin if Value[n] = '0' then Result := Result * 2 else if Value[n] = '1' then Result := Result * 2 + 1 else Break; end; end; {==============================================================================} function ParseURL(URL: string; var Prot, User, Pass, Host, Port, Path, Para: string): string; var x, y: Integer; sURL: string; s: string; s1, s2: string; begin Prot := 'http'; User := ''; Pass := ''; Port := '80'; Para := ''; x := Pos('://', URL); if x > 0 then begin Prot := SeparateLeft(URL, '://'); sURL := SeparateRight(URL, '://'); end else sURL := URL; if UpperCase(Prot) = 'HTTPS' then Port := '443'; if UpperCase(Prot) = 'FTP' then Port := '21'; x := Pos('@', sURL); y := Pos('/', sURL); if (x > 0) and ((x < y) or (y < 1))then begin s := SeparateLeft(sURL, '@'); sURL := SeparateRight(sURL, '@'); x := Pos(':', s); if x > 0 then begin User := SeparateLeft(s, ':'); Pass := SeparateRight(s, ':'); end else User := s; end; x := Pos('/', sURL); if x > 0 then begin s1 := SeparateLeft(sURL, '/'); s2 := SeparateRight(sURL, '/'); end else begin s1 := sURL; s2 := ''; end; if Pos('[', s1) = 1 then begin Host := Separateleft(s1, ']'); Delete(Host, 1, 1); s1 := SeparateRight(s1, ']'); if Pos(':', s1) = 1 then Port := SeparateRight(s1, ':'); end else begin x := Pos(':', s1); if x > 0 then begin Host := SeparateLeft(s1, ':'); Port := SeparateRight(s1, ':'); end else Host := s1; end; Result := '/' + s2; x := Pos('?', s2); if x > 0 then begin Path := '/' + SeparateLeft(s2, '?'); Para := SeparateRight(s2, '?'); end else Path := '/' + s2; if Host = '' then Host := 'localhost'; end; {==============================================================================} function ReplaceString(Value, Search, Replace: AnsiString): AnsiString; var x, l, ls, lr: Integer; begin if (Value = '') or (Search = '') then begin Result := Value; Exit; end; ls := Length(Search); lr := Length(Replace); Result := ''; x := Pos(Search, Value); while x > 0 do begin {$IFNDEF CIL} l := Length(Result); SetLength(Result, l + x - 1); Move(Pointer(Value)^, Pointer(@Result[l + 1])^, x - 1); {$ELSE} Result:=Result+Copy(Value,1,x-1); {$ENDIF} {$IFNDEF CIL} l := Length(Result); SetLength(Result, l + lr); Move(Pointer(Replace)^, Pointer(@Result[l + 1])^, lr); {$ELSE} Result:=Result+Replace; {$ENDIF} Delete(Value, 1, x - 1 + ls); x := Pos(Search, Value); end; Result := Result + Value; end; {==============================================================================} function RPosEx(const Sub, Value: string; From: integer): Integer; var n: Integer; l: Integer; begin result := 0; l := Length(Sub); for n := From - l + 1 downto 1 do begin if Copy(Value, n, l) = Sub then begin result := n; break; end; end; end; {==============================================================================} function RPos(const Sub, Value: String): Integer; begin Result := RPosEx(Sub, Value, Length(Value)); end; {==============================================================================} function FetchBin(var Value: string; const Delimiter: string): string; var s: string; begin Result := SeparateLeft(Value, Delimiter); s := SeparateRight(Value, Delimiter); if s = Value then Value := '' else Value := s; end; {==============================================================================} function Fetch(var Value: string; const Delimiter: string): string; begin Result := FetchBin(Value, Delimiter); Result := TrimSP(Result); Value := TrimSP(Value); end; {==============================================================================} function FetchEx(var Value: string; const Delimiter, Quotation: string): string; var b: Boolean; begin Result := ''; b := False; while Length(Value) > 0 do begin if b then begin if Pos(Quotation, Value) = 1 then b := False; Result := Result + Value[1]; Delete(Value, 1, 1); end else begin if Pos(Delimiter, Value) = 1 then begin Delete(Value, 1, Length(delimiter)); break; end; b := Pos(Quotation, Value) = 1; Result := Result + Value[1]; Delete(Value, 1, 1); end; end; end; {==============================================================================} function IsBinaryString(const Value: AnsiString): Boolean; var n: integer; begin Result := False; for n := 1 to Length(Value) do if Value[n] in [#0..#8, #10..#31] then //ignore null-terminated strings if not ((n = Length(value)) and (Value[n] = AnsiChar(#0))) then begin Result := True; Break; end; end; {==============================================================================} function PosCRLF(const Value: AnsiString; var Terminator: AnsiString): integer; var n, l: integer; begin Result := -1; Terminator := ''; l := length(value); for n := 1 to l do if value[n] in [#$0d, #$0a] then begin Result := n; Terminator := Value[n]; if n <> l then case value[n] of #$0d: if value[n + 1] = #$0a then Terminator := #$0d + #$0a; #$0a: if value[n + 1] = #$0d then Terminator := #$0a + #$0d; end; Break; end; end; {==============================================================================} Procedure StringsTrim(const Value: TStrings); var n: integer; begin for n := Value.Count - 1 downto 0 do if Value[n] = '' then Value.Delete(n) else Break; end; {==============================================================================} function PosFrom(const SubStr, Value: String; From: integer): integer; var ls,lv: integer; begin Result := 0; ls := Length(SubStr); lv := Length(Value); if (ls = 0) or (lv = 0) then Exit; if From < 1 then From := 1; while (ls + from - 1) <= (lv) do begin {$IFNDEF CIL} if CompareMem(@SubStr[1],@Value[from],ls) then {$ELSE} if SubStr = copy(Value, from, ls) then {$ENDIF} begin result := from; break; end else inc(from); end; end; {==============================================================================} {$IFNDEF CIL} function IncPoint(const p: pointer; Value: integer): pointer; begin Result := PAnsiChar(p) + Value; end; {$ENDIF} {==============================================================================} //improved by 'DoggyDawg' function GetBetween(const PairBegin, PairEnd, Value: string): string; var n: integer; x: integer; s: string; lenBegin: integer; lenEnd: integer; str: string; max: integer; begin lenBegin := Length(PairBegin); lenEnd := Length(PairEnd); n := Length(Value); if (Value = PairBegin + PairEnd) then begin Result := '';//nothing between exit; end; if (n < lenBegin + lenEnd) then begin Result := Value; exit; end; s := SeparateRight(Value, PairBegin); if (s = Value) then begin Result := Value; exit; end; n := Pos(PairEnd, s); if (n = 0) then begin Result := Value; exit; end; Result := ''; x := 1; max := Length(s) - lenEnd + 1; for n := 1 to max do begin str := copy(s, n, lenEnd); if (str = PairEnd) then begin Dec(x); if (x <= 0) then Break; end; str := copy(s, n, lenBegin); if (str = PairBegin) then Inc(x); Result := Result + s[n]; end; end; {==============================================================================} function CountOfChar(const Value: string; Chr: char): integer; var n: integer; begin Result := 0; for n := 1 to Length(Value) do if Value[n] = chr then Inc(Result); end; {==============================================================================} // ! do not use AnsiExtractQuotedStr, it's very buggy and can crash application! function UnquoteStr(const Value: string; Quote: Char): string; var n: integer; inq, dq: Boolean; c, cn: char; begin Result := ''; if Value = '' then Exit; if Value = Quote + Quote then Exit; inq := False; dq := False; for n := 1 to Length(Value) do begin c := Value[n]; if n <> Length(Value) then cn := Value[n + 1] else cn := #0; if c = quote then if dq then dq := False else if not inq then inq := True else if cn = quote then begin Result := Result + Quote; dq := True; end else inq := False else Result := Result + c; end; end; {==============================================================================} function QuoteStr(const Value: string; Quote: Char): string; var n: integer; begin Result := ''; for n := 1 to length(value) do begin Result := result + Value[n]; if value[n] = Quote then Result := Result + Quote; end; Result := Quote + Result + Quote; end; {==============================================================================} procedure HeadersToList(const Value: TStrings); var n, x, y: integer; s: string; begin for n := 0 to Value.Count -1 do begin s := Value[n]; x := Pos(':', s); if x > 0 then begin y:= Pos('=',s); if not ((y > 0) and (y < x)) then begin s[x] := '='; Value[n] := s; end; end; end; end; {==============================================================================} procedure ListToHeaders(const Value: TStrings); var n, x: integer; s: string; begin for n := 0 to Value.Count -1 do begin s := Value[n]; x := Pos('=', s); if x > 0 then begin s[x] := ':'; Value[n] := s; end; end; end; {==============================================================================} function SwapBytes(Value: integer): integer; var s: AnsiString; x, y, xl, yl: Byte; begin s := CodeLongInt(Value); x := Ord(s[4]); y := Ord(s[3]); xl := Ord(s[2]); yl := Ord(s[1]); Result := ((x * 256 + y) * 65536) + (xl * 256 + yl); end; {==============================================================================} function ReadStrFromStream(const Stream: TStream; len: integer): AnsiString; var x: integer; {$IFDEF CIL} buf: Array of Byte; {$ENDIF} begin {$IFDEF CIL} Setlength(buf, Len); x := Stream.read(buf, Len); SetLength(buf, x); Result := StringOf(Buf); {$ELSE} Setlength(Result, Len); x := Stream.read(PAnsiChar(Result)^, Len); SetLength(Result, x); {$ENDIF} end; {==============================================================================} procedure WriteStrToStream(const Stream: TStream; Value: AnsiString); {$IFDEF CIL} var buf: Array of Byte; {$ENDIF} begin {$IFDEF CIL} buf := BytesOf(Value); Stream.Write(buf,length(Value)); {$ELSE} Stream.Write(PAnsiChar(Value)^, Length(Value)); {$ENDIF} end; {==============================================================================} function GetTempFile(const Dir, prefix: AnsiString): AnsiString; {$IFNDEF FPC} {$IFDEF MSWINDOWS} var Path: AnsiString; x: integer; {$ENDIF} {$ENDIF} begin {$IFDEF FPC} Result := GetTempFileName(Dir, Prefix); {$ELSE} {$IFNDEF MSWINDOWS} Result := tempnam(Pointer(Dir), Pointer(prefix)); {$ELSE} {$IFDEF CIL} Result := System.IO.Path.GetTempFileName; {$ELSE} if Dir = '' then begin SetLength(Path, MAX_PATH); x := GetTempPath(Length(Path), PChar(Path)); SetLength(Path, x); end else Path := Dir; x := Length(Path); if Path[x] <> '\' then Path := Path + '\'; SetLength(Result, MAX_PATH + 1); GetTempFileName(PChar(Path), PChar(Prefix), 0, PChar(Result)); Result := PChar(Result); SetFileattributes(PChar(Result), GetFileAttributes(PChar(Result)) or FILE_ATTRIBUTE_TEMPORARY); {$ENDIF} {$ENDIF} {$ENDIF} end; {==============================================================================} function PadString(const Value: AnsiString; len: integer; Pad: AnsiChar): AnsiString; begin if length(value) >= len then Result := Copy(value, 1, len) else Result := Value + StringOfChar(Pad, len - length(value)); end; {==============================================================================} function XorString(Indata1, Indata2: AnsiString): AnsiString; var i: integer; begin Indata2 := PadString(Indata2, length(Indata1), #0); Result := ''; for i := 1 to length(Indata1) do Result := Result + AnsiChar(ord(Indata1[i]) xor ord(Indata2[i])); end; {==============================================================================} function NormalizeHeader(Value: TStrings; var Index: Integer): string; var s, t: string; n: Integer; begin s := Value[Index]; Inc(Index); if s <> '' then while (Value.Count - 1) > Index do begin t := Value[Index]; if t = '' then Break; for n := 1 to Length(t) do if t[n] = #9 then t[n] := ' '; if not(AnsiChar(t[1]) in [' ', '"', ':', '=']) then Break else begin s := s + ' ' + Trim(t); Inc(Index); end; end; Result := TrimRight(s); end; {==============================================================================} {pf} procedure SearchForLineBreak(var APtr:PANSIChar; AEtx:PANSIChar; out ABol:PANSIChar; out ALength:integer); begin ABol := APtr; while (APtr0 then begin APtr := bol; Break; end; end; end; {/pf} {pf} procedure CopyLinesFromStreamUntilNullLine(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings); var bol: PANSIChar; lng: integer; s: ANSIString; begin // Copying until body separator will be reached while (APtr#0) do begin SearchForLineBreak(APtr,AEtx,bol,lng); SkipLineBreak(APtr,AEtx); if lng=0 then Break; SetString(s,bol,lng); ALines.Add(s); end; end; {/pf} {pf} procedure CopyLinesFromStreamUntilBoundary(var APtr:PANSIChar; AEtx:PANSIChar; ALines:TStrings; const ABoundary:ANSIString); var bol: PANSIChar; lng: integer; s: ANSIString; BackStop: ANSIString; eob1: PANSIChar; eob2: PANSIChar; begin BackStop := '--'+ABoundary; eob2 := nil; // Copying until Boundary will be reached while (APtrAETX then exit; if strlcomp(MatchPos,#13#10,2)=0 then inc(MatchPos,2); if (MatchPos+2+Lng)>AETX then exit; if strlcomp(MatchPos,'--',2)<>0 then exit; inc(MatchPos,2); if strlcomp(MatchPos,PANSIChar(ABoundary),Lng)<>0 then exit; inc(MatchPos,Lng); if ((MatchPos+2)<=AEtx) and (strlcomp(MatchPos,#13#10,2)=0) then inc(MatchPos,2); Result := MatchPos; end; {/pf} {pf} function MatchLastBoundary(ABOL,AETX:PANSIChar; const ABoundary:ANSIString): PANSIChar; var MatchPos: PANSIChar; begin Result := nil; MatchPos := MatchBoundary(ABOL,AETX,ABoundary); if not Assigned(MatchPos) then exit; if strlcomp(MatchPos,'--',2)<>0 then exit; inc(MatchPos,2); if (MatchPos+2<=AEtx) and (strlcomp(MatchPos,#13#10,2)=0) then inc(MatchPos,2); Result := MatchPos; end; {/pf} {pf} function BuildStringFromBuffer(AStx,AEtx:PANSIChar): ANSIString; var lng: integer; begin Lng := 0; if Assigned(AStx) and Assigned(AEtx) then begin Lng := AEtx-AStx; if Lng<0 then Lng := 0; end; SetString(Result,AStx,lng); end; {/pf} {==============================================================================} var n: integer; begin for n := 1 to 12 do begin CustomMonthNames[n] := ShortMonthNames[n]; MyMonthNames[0, n] := ShortMonthNames[n]; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/synsock.pas0000644000175000001440000000757112014201074021454 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 005.002.001 | |==============================================================================| | Content: Socket Independent Platform Layer | |==============================================================================| | Copyright (c)1999-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2001-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} unit synsock; {$MINENUMSIZE 4} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF CIL} {$I ssdotnet.inc} {$ELSE} {$IFDEF MSWINDOWS} {$I sswin32.inc} {$ELSE} {$IFDEF WINCE} {$I sswin32.inc} //not complete yet! {$ELSE} {$IFDEF FPC} {$I ssfpc.inc} {$ELSE} {$I sslinux.inc} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/sswin32.inc0000644000175000001440000015216312014201074021257 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 002.003.000 | |==============================================================================| | Content: Socket Independent Platform Layer - Win32/64 definition include | |==============================================================================| | Copyright (c)1999-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2003-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} //{$DEFINE WINSOCK1} {Note about define WINSOCK1: If you activate this compiler directive, then socket interface level 1.1 is used instead default level 2.2. Level 2.2 is not available on old W95, however you can install update. } //{$DEFINE FORCEOLDAPI} {Note about define FORCEOLDAPI: If you activate this compiler directive, then is allways used old socket API for name resolution. If you leave this directive inactive, then the new API is used, when running system allows it. For IPv6 support you must have new API! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} (*$HPPEMIT '/* EDE 2003-02-19 */' *) (*$HPPEMIT 'namespace Synsock { using System::Shortint; }' *) (*$HPPEMIT '#undef h_addr' *) (*$HPPEMIT '#undef IOCPARM_MASK' *) (*$HPPEMIT '#undef FD_SETSIZE' *) (*$HPPEMIT '#undef IOC_VOID' *) (*$HPPEMIT '#undef IOC_OUT' *) (*$HPPEMIT '#undef IOC_IN' *) (*$HPPEMIT '#undef IOC_INOUT' *) (*$HPPEMIT '#undef FIONREAD' *) (*$HPPEMIT '#undef FIONBIO' *) (*$HPPEMIT '#undef FIOASYNC' *) (*$HPPEMIT '#undef IPPROTO_IP' *) (*$HPPEMIT '#undef IPPROTO_ICMP' *) (*$HPPEMIT '#undef IPPROTO_IGMP' *) (*$HPPEMIT '#undef IPPROTO_TCP' *) (*$HPPEMIT '#undef IPPROTO_UDP' *) (*$HPPEMIT '#undef IPPROTO_RAW' *) (*$HPPEMIT '#undef IPPROTO_MAX' *) (*$HPPEMIT '#undef INADDR_ANY' *) (*$HPPEMIT '#undef INADDR_LOOPBACK' *) (*$HPPEMIT '#undef INADDR_BROADCAST' *) (*$HPPEMIT '#undef INADDR_NONE' *) (*$HPPEMIT '#undef INVALID_SOCKET' *) (*$HPPEMIT '#undef SOCKET_ERROR' *) (*$HPPEMIT '#undef WSADESCRIPTION_LEN' *) (*$HPPEMIT '#undef WSASYS_STATUS_LEN' *) (*$HPPEMIT '#undef IP_OPTIONS' *) (*$HPPEMIT '#undef IP_TOS' *) (*$HPPEMIT '#undef IP_TTL' *) (*$HPPEMIT '#undef IP_MULTICAST_IF' *) (*$HPPEMIT '#undef IP_MULTICAST_TTL' *) (*$HPPEMIT '#undef IP_MULTICAST_LOOP' *) (*$HPPEMIT '#undef IP_ADD_MEMBERSHIP' *) (*$HPPEMIT '#undef IP_DROP_MEMBERSHIP' *) (*$HPPEMIT '#undef IP_DONTFRAGMENT' *) (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_TTL' *) (*$HPPEMIT '#undef IP_DEFAULT_MULTICAST_LOOP' *) (*$HPPEMIT '#undef IP_MAX_MEMBERSHIPS' *) (*$HPPEMIT '#undef SOL_SOCKET' *) (*$HPPEMIT '#undef SO_DEBUG' *) (*$HPPEMIT '#undef SO_ACCEPTCONN' *) (*$HPPEMIT '#undef SO_REUSEADDR' *) (*$HPPEMIT '#undef SO_KEEPALIVE' *) (*$HPPEMIT '#undef SO_DONTROUTE' *) (*$HPPEMIT '#undef SO_BROADCAST' *) (*$HPPEMIT '#undef SO_USELOOPBACK' *) (*$HPPEMIT '#undef SO_LINGER' *) (*$HPPEMIT '#undef SO_OOBINLINE' *) (*$HPPEMIT '#undef SO_DONTLINGER' *) (*$HPPEMIT '#undef SO_SNDBUF' *) (*$HPPEMIT '#undef SO_RCVBUF' *) (*$HPPEMIT '#undef SO_SNDLOWAT' *) (*$HPPEMIT '#undef SO_RCVLOWAT' *) (*$HPPEMIT '#undef SO_SNDTIMEO' *) (*$HPPEMIT '#undef SO_RCVTIMEO' *) (*$HPPEMIT '#undef SO_ERROR' *) (*$HPPEMIT '#undef SO_OPENTYPE' *) (*$HPPEMIT '#undef SO_SYNCHRONOUS_ALERT' *) (*$HPPEMIT '#undef SO_SYNCHRONOUS_NONALERT' *) (*$HPPEMIT '#undef SO_MAXDG' *) (*$HPPEMIT '#undef SO_MAXPATHDG' *) (*$HPPEMIT '#undef SO_UPDATE_ACCEPT_CONTEXT' *) (*$HPPEMIT '#undef SO_CONNECT_TIME' *) (*$HPPEMIT '#undef SO_TYPE' *) (*$HPPEMIT '#undef SOCK_STREAM' *) (*$HPPEMIT '#undef SOCK_DGRAM' *) (*$HPPEMIT '#undef SOCK_RAW' *) (*$HPPEMIT '#undef SOCK_RDM' *) (*$HPPEMIT '#undef SOCK_SEQPACKET' *) (*$HPPEMIT '#undef TCP_NODELAY' *) (*$HPPEMIT '#undef AF_UNSPEC' *) (*$HPPEMIT '#undef SOMAXCONN' *) (*$HPPEMIT '#undef AF_INET' *) (*$HPPEMIT '#undef AF_MAX' *) (*$HPPEMIT '#undef PF_UNSPEC' *) (*$HPPEMIT '#undef PF_INET' *) (*$HPPEMIT '#undef PF_MAX' *) (*$HPPEMIT '#undef MSG_OOB' *) (*$HPPEMIT '#undef MSG_PEEK' *) (*$HPPEMIT '#undef WSABASEERR' *) (*$HPPEMIT '#undef WSAEINTR' *) (*$HPPEMIT '#undef WSAEBADF' *) (*$HPPEMIT '#undef WSAEACCES' *) (*$HPPEMIT '#undef WSAEFAULT' *) (*$HPPEMIT '#undef WSAEINVAL' *) (*$HPPEMIT '#undef WSAEMFILE' *) (*$HPPEMIT '#undef WSAEWOULDBLOCK' *) (*$HPPEMIT '#undef WSAEINPROGRESS' *) (*$HPPEMIT '#undef WSAEALREADY' *) (*$HPPEMIT '#undef WSAENOTSOCK' *) (*$HPPEMIT '#undef WSAEDESTADDRREQ' *) (*$HPPEMIT '#undef WSAEMSGSIZE' *) (*$HPPEMIT '#undef WSAEPROTOTYPE' *) (*$HPPEMIT '#undef WSAENOPROTOOPT' *) (*$HPPEMIT '#undef WSAEPROTONOSUPPORT' *) (*$HPPEMIT '#undef WSAESOCKTNOSUPPORT' *) (*$HPPEMIT '#undef WSAEOPNOTSUPP' *) (*$HPPEMIT '#undef WSAEPFNOSUPPORT' *) (*$HPPEMIT '#undef WSAEAFNOSUPPORT' *) (*$HPPEMIT '#undef WSAEADDRINUSE' *) (*$HPPEMIT '#undef WSAEADDRNOTAVAIL' *) (*$HPPEMIT '#undef WSAENETDOWN' *) (*$HPPEMIT '#undef WSAENETUNREACH' *) (*$HPPEMIT '#undef WSAENETRESET' *) (*$HPPEMIT '#undef WSAECONNABORTED' *) (*$HPPEMIT '#undef WSAECONNRESET' *) (*$HPPEMIT '#undef WSAENOBUFS' *) (*$HPPEMIT '#undef WSAEISCONN' *) (*$HPPEMIT '#undef WSAENOTCONN' *) (*$HPPEMIT '#undef WSAESHUTDOWN' *) (*$HPPEMIT '#undef WSAETOOMANYREFS' *) (*$HPPEMIT '#undef WSAETIMEDOUT' *) (*$HPPEMIT '#undef WSAECONNREFUSED' *) (*$HPPEMIT '#undef WSAELOOP' *) (*$HPPEMIT '#undef WSAENAMETOOLONG' *) (*$HPPEMIT '#undef WSAEHOSTDOWN' *) (*$HPPEMIT '#undef WSAEHOSTUNREACH' *) (*$HPPEMIT '#undef WSAENOTEMPTY' *) (*$HPPEMIT '#undef WSAEPROCLIM' *) (*$HPPEMIT '#undef WSAEUSERS' *) (*$HPPEMIT '#undef WSAEDQUOT' *) (*$HPPEMIT '#undef WSAESTALE' *) (*$HPPEMIT '#undef WSAEREMOTE' *) (*$HPPEMIT '#undef WSASYSNOTREADY' *) (*$HPPEMIT '#undef WSAVERNOTSUPPORTED' *) (*$HPPEMIT '#undef WSANOTINITIALISED' *) (*$HPPEMIT '#undef WSAEDISCON' *) (*$HPPEMIT '#undef WSAENOMORE' *) (*$HPPEMIT '#undef WSAECANCELLED' *) (*$HPPEMIT '#undef WSAEEINVALIDPROCTABLE' *) (*$HPPEMIT '#undef WSAEINVALIDPROVIDER' *) (*$HPPEMIT '#undef WSAEPROVIDERFAILEDINIT' *) (*$HPPEMIT '#undef WSASYSCALLFAILURE' *) (*$HPPEMIT '#undef WSASERVICE_NOT_FOUND' *) (*$HPPEMIT '#undef WSATYPE_NOT_FOUND' *) (*$HPPEMIT '#undef WSA_E_NO_MORE' *) (*$HPPEMIT '#undef WSA_E_CANCELLED' *) (*$HPPEMIT '#undef WSAEREFUSED' *) (*$HPPEMIT '#undef WSAHOST_NOT_FOUND' *) (*$HPPEMIT '#undef HOST_NOT_FOUND' *) (*$HPPEMIT '#undef WSATRY_AGAIN' *) (*$HPPEMIT '#undef TRY_AGAIN' *) (*$HPPEMIT '#undef WSANO_RECOVERY' *) (*$HPPEMIT '#undef NO_RECOVERY' *) (*$HPPEMIT '#undef WSANO_DATA' *) (*$HPPEMIT '#undef NO_DATA' *) (*$HPPEMIT '#undef WSANO_ADDRESS' *) (*$HPPEMIT '#undef ENAMETOOLONG' *) (*$HPPEMIT '#undef ENOTEMPTY' *) (*$HPPEMIT '#undef FD_CLR' *) (*$HPPEMIT '#undef FD_ISSET' *) (*$HPPEMIT '#undef FD_SET' *) (*$HPPEMIT '#undef FD_ZERO' *) (*$HPPEMIT '#undef NO_ADDRESS' *) (*$HPPEMIT '#undef ADDR_ANY' *) (*$HPPEMIT '#undef SO_GROUP_ID' *) (*$HPPEMIT '#undef SO_GROUP_PRIORITY' *) (*$HPPEMIT '#undef SO_MAX_MSG_SIZE' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFOA' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFOW' *) (*$HPPEMIT '#undef SO_PROTOCOL_INFO' *) (*$HPPEMIT '#undef PVD_CONFIG' *) (*$HPPEMIT '#undef AF_INET6' *) (*$HPPEMIT '#undef PF_INET6' *) {$ENDIF} {$IFDEF FPC} {$IFDEF WIN32} {$ALIGN OFF} {$ELSE} {$PACKRECORDS C} {$ENDIF} {$ENDIF} interface uses SyncObjs, SysUtils, Classes, Windows; function InitSocketInterface(stack: String): Boolean; function DestroySocketInterface: Boolean; const {$IFDEF WINSOCK1} WinsockLevel = $0101; {$ELSE} WinsockLevel = $0202; {$ENDIF} type u_short = Word; u_int = Integer; u_long = Longint; pu_long = ^u_long; pu_short = ^u_short; {$IFDEF FPC} TSocket = ptruint; {$ELSE} {$IFDEF WIN64} TSocket = UINT_PTR; {$ELSE} TSocket = u_int; {$ENDIF} {$ENDIF} TAddrFamily = integer; TMemory = pointer; const {$IFDEF WINCE} DLLStackName = 'ws2.dll'; {$ELSE} {$IFDEF WINSOCK1} DLLStackName = 'wsock32.dll'; {$ELSE} DLLStackName = 'ws2_32.dll'; {$ENDIF} {$ENDIF} DLLwship6 = 'wship6.dll'; cLocalhost = '127.0.0.1'; cAnyHost = '0.0.0.0'; cBroadcast = '255.255.255.255'; c6Localhost = '::1'; c6AnyHost = '::0'; c6Broadcast = 'ffff::1'; cAnyPort = '0'; const FD_SETSIZE = 64; type PFDSet = ^TFDSet; TFDSet = record fd_count: u_int; fd_array: array[0..FD_SETSIZE-1] of TSocket; end; const FIONREAD = $4004667f; FIONBIO = $8004667e; FIOASYNC = $8004667d; type PTimeVal = ^TTimeVal; TTimeVal = record tv_sec: Longint; tv_usec: Longint; end; const IPPROTO_IP = 0; { Dummy } IPPROTO_ICMP = 1; { Internet Control Message Protocol } IPPROTO_IGMP = 2; { Internet Group Management Protocol} IPPROTO_TCP = 6; { TCP } IPPROTO_UDP = 17; { User Datagram Protocol } IPPROTO_IPV6 = 41; IPPROTO_ICMPV6 = 58; IPPROTO_RM = 113; IPPROTO_RAW = 255; IPPROTO_MAX = 256; type PInAddr = ^TInAddr; TInAddr = record case integer of 0: (S_bytes: packed array [0..3] of byte); 1: (S_addr: u_long); end; PSockAddrIn = ^TSockAddrIn; TSockAddrIn = record case Integer of 0: (sin_family: u_short; sin_port: u_short; sin_addr: TInAddr; sin_zero: array[0..7] of byte); 1: (sa_family: u_short; sa_data: array[0..13] of byte) end; TIP_mreq = record imr_multiaddr: TInAddr; { IP multicast address of group } imr_interface: TInAddr; { local IP address of interface } end; PInAddr6 = ^TInAddr6; TInAddr6 = record case integer of 0: (S6_addr: packed array [0..15] of byte); 1: (u6_addr8: packed array [0..15] of byte); 2: (u6_addr16: packed array [0..7] of word); 3: (u6_addr32: packed array [0..3] of integer); end; PSockAddrIn6 = ^TSockAddrIn6; TSockAddrIn6 = record sin6_family: u_short; // AF_INET6 sin6_port: u_short; // Transport level port number sin6_flowinfo: u_long; // IPv6 flow information sin6_addr: TInAddr6; // IPv6 address sin6_scope_id: u_long; // Scope Id: IF number for link-local // SITE id for site-local end; TIPv6_mreq = record ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. ipv6mr_interface: integer; // Interface index. padding: integer; end; PHostEnt = ^THostEnt; THostEnt = record h_name: PAnsiChar; h_aliases: ^PAnsiChar; h_addrtype: Smallint; h_length: Smallint; case integer of 0: (h_addr_list: ^PAnsiChar); 1: (h_addr: ^PInAddr); end; PNetEnt = ^TNetEnt; TNetEnt = record n_name: PAnsiChar; n_aliases: ^PAnsiChar; n_addrtype: Smallint; n_net: u_long; end; PServEnt = ^TServEnt; TServEnt = record s_name: PAnsiChar; s_aliases: ^PAnsiChar; {$ifdef WIN64} s_proto: PAnsiChar; s_port: Smallint; {$else} s_port: Smallint; s_proto: PAnsiChar; {$endif} end; PProtoEnt = ^TProtoEnt; TProtoEnt = record p_name: PAnsiChar; p_aliases: ^PAnsichar; p_proto: Smallint; end; const INADDR_ANY = $00000000; INADDR_LOOPBACK = $7F000001; INADDR_BROADCAST = $FFFFFFFF; INADDR_NONE = $FFFFFFFF; ADDR_ANY = INADDR_ANY; INVALID_SOCKET = TSocket(NOT(0)); SOCKET_ERROR = -1; Const {$IFDEF WINSOCK1} IP_OPTIONS = 1; IP_MULTICAST_IF = 2; { set/get IP multicast interface } IP_MULTICAST_TTL = 3; { set/get IP multicast timetolive } IP_MULTICAST_LOOP = 4; { set/get IP multicast loopback } IP_ADD_MEMBERSHIP = 5; { add an IP group membership } IP_DROP_MEMBERSHIP = 6; { drop an IP group membership } IP_TTL = 7; { set/get IP Time To Live } IP_TOS = 8; { set/get IP Type Of Service } IP_DONTFRAGMENT = 9; { set/get IP Don't Fragment flag } {$ELSE} IP_OPTIONS = 1; IP_HDRINCL = 2; IP_TOS = 3; { set/get IP Type Of Service } IP_TTL = 4; { set/get IP Time To Live } IP_MULTICAST_IF = 9; { set/get IP multicast interface } IP_MULTICAST_TTL = 10; { set/get IP multicast timetolive } IP_MULTICAST_LOOP = 11; { set/get IP multicast loopback } IP_ADD_MEMBERSHIP = 12; { add an IP group membership } IP_DROP_MEMBERSHIP = 13; { drop an IP group membership } IP_DONTFRAGMENT = 14; { set/get IP Don't Fragment flag } {$ENDIF} IP_DEFAULT_MULTICAST_TTL = 1; { normally limit m'casts to 1 hop } IP_DEFAULT_MULTICAST_LOOP = 1; { normally hear sends if a member } IP_MAX_MEMBERSHIPS = 20; { per socket; must fit in one mbuf } SOL_SOCKET = $ffff; {options for socket level } { Option flags per-socket. } SO_DEBUG = $0001; { turn on debugging info recording } SO_ACCEPTCONN = $0002; { socket has had listen() } SO_REUSEADDR = $0004; { allow local address reuse } SO_KEEPALIVE = $0008; { keep connections alive } SO_DONTROUTE = $0010; { just use interface addresses } SO_BROADCAST = $0020; { permit sending of broadcast msgs } SO_USELOOPBACK = $0040; { bypass hardware when possible } SO_LINGER = $0080; { linger on close if data present } SO_OOBINLINE = $0100; { leave received OOB data in line } SO_DONTLINGER = $ff7f; { Additional options. } SO_SNDBUF = $1001; { send buffer size } SO_RCVBUF = $1002; { receive buffer size } SO_SNDLOWAT = $1003; { send low-water mark } SO_RCVLOWAT = $1004; { receive low-water mark } SO_SNDTIMEO = $1005; { send timeout } SO_RCVTIMEO = $1006; { receive timeout } SO_ERROR = $1007; { get error status and clear } SO_TYPE = $1008; { get socket type } { WinSock 2 extension -- new options } SO_GROUP_ID = $2001; { ID of a socket group} SO_GROUP_PRIORITY = $2002; { the relative priority within a group} SO_MAX_MSG_SIZE = $2003; { maximum message size } SO_PROTOCOL_INFOA = $2004; { WSAPROTOCOL_INFOA structure } SO_PROTOCOL_INFOW = $2005; { WSAPROTOCOL_INFOW structure } SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA; PVD_CONFIG = $3001; {configuration info for service provider } { Option for opening sockets for synchronous access. } SO_OPENTYPE = $7008; SO_SYNCHRONOUS_ALERT = $10; SO_SYNCHRONOUS_NONALERT = $20; { Other NT-specific options. } SO_MAXDG = $7009; SO_MAXPATHDG = $700A; SO_UPDATE_ACCEPT_CONTEXT = $700B; SO_CONNECT_TIME = $700C; SOMAXCONN = $7fffffff; IPV6_UNICAST_HOPS = 8; // ??? IPV6_MULTICAST_IF = 9; // set/get IP multicast i/f IPV6_MULTICAST_HOPS = 10; // set/get IP multicast ttl IPV6_MULTICAST_LOOP = 11; // set/get IP multicast loopback IPV6_JOIN_GROUP = 12; // add an IP group membership IPV6_LEAVE_GROUP = 13; // drop an IP group membership MSG_NOSIGNAL = 0; // getnameinfo constants NI_MAXHOST = 1025; NI_MAXSERV = 32; NI_NOFQDN = $1; NI_NUMERICHOST = $2; NI_NAMEREQD = $4; NI_NUMERICSERV = $8; NI_DGRAM = $10; const SOCK_STREAM = 1; { stream socket } SOCK_DGRAM = 2; { datagram socket } SOCK_RAW = 3; { raw-protocol interface } SOCK_RDM = 4; { reliably-delivered message } SOCK_SEQPACKET = 5; { sequenced packet stream } { TCP options. } TCP_NODELAY = $0001; { Address families. } AF_UNSPEC = 0; { unspecified } AF_INET = 2; { internetwork: UDP, TCP, etc. } AF_INET6 = 23; { Internetwork Version 6 } AF_MAX = 24; { Protocol families, same as address families for now. } PF_UNSPEC = AF_UNSPEC; PF_INET = AF_INET; PF_INET6 = AF_INET6; PF_MAX = AF_MAX; type { Structure used by kernel to store most addresses. } PSockAddr = ^TSockAddr; TSockAddr = TSockAddrIn; { Structure used by kernel to pass protocol information in raw sockets. } PSockProto = ^TSockProto; TSockProto = record sp_family: u_short; sp_protocol: u_short; end; type PAddrInfo = ^TAddrInfo; TAddrInfo = record ai_flags: integer; // AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST. ai_family: integer; // PF_xxx. ai_socktype: integer; // SOCK_xxx. ai_protocol: integer; // 0 or IPPROTO_xxx for IPv4 and IPv6. ai_addrlen: u_int; // Length of ai_addr. ai_canonname: PAnsiChar; // Canonical name for nodename. ai_addr: PSockAddr; // Binary address. ai_next: PAddrInfo; // Next structure in linked list. end; const // Flags used in "hints" argument to getaddrinfo(). AI_PASSIVE = $1; // Socket address will be used in bind() call. AI_CANONNAME = $2; // Return canonical name in first ai_canonname. AI_NUMERICHOST = $4; // Nodename must be a numeric address string. type { Structure used for manipulating linger option. } PLinger = ^TLinger; TLinger = record l_onoff: u_short; l_linger: u_short; end; const MSG_OOB = $01; // Process out-of-band data. MSG_PEEK = $02; // Peek at incoming messages. const { All Windows Sockets error constants are biased by WSABASEERR from the "normal" } WSABASEERR = 10000; { Windows Sockets definitions of regular Microsoft C error constants } WSAEINTR = (WSABASEERR+4); WSAEBADF = (WSABASEERR+9); WSAEACCES = (WSABASEERR+13); WSAEFAULT = (WSABASEERR+14); WSAEINVAL = (WSABASEERR+22); WSAEMFILE = (WSABASEERR+24); { Windows Sockets definitions of regular Berkeley error constants } WSAEWOULDBLOCK = (WSABASEERR+35); WSAEINPROGRESS = (WSABASEERR+36); WSAEALREADY = (WSABASEERR+37); WSAENOTSOCK = (WSABASEERR+38); WSAEDESTADDRREQ = (WSABASEERR+39); WSAEMSGSIZE = (WSABASEERR+40); WSAEPROTOTYPE = (WSABASEERR+41); WSAENOPROTOOPT = (WSABASEERR+42); WSAEPROTONOSUPPORT = (WSABASEERR+43); WSAESOCKTNOSUPPORT = (WSABASEERR+44); WSAEOPNOTSUPP = (WSABASEERR+45); WSAEPFNOSUPPORT = (WSABASEERR+46); WSAEAFNOSUPPORT = (WSABASEERR+47); WSAEADDRINUSE = (WSABASEERR+48); WSAEADDRNOTAVAIL = (WSABASEERR+49); WSAENETDOWN = (WSABASEERR+50); WSAENETUNREACH = (WSABASEERR+51); WSAENETRESET = (WSABASEERR+52); WSAECONNABORTED = (WSABASEERR+53); WSAECONNRESET = (WSABASEERR+54); WSAENOBUFS = (WSABASEERR+55); WSAEISCONN = (WSABASEERR+56); WSAENOTCONN = (WSABASEERR+57); WSAESHUTDOWN = (WSABASEERR+58); WSAETOOMANYREFS = (WSABASEERR+59); WSAETIMEDOUT = (WSABASEERR+60); WSAECONNREFUSED = (WSABASEERR+61); WSAELOOP = (WSABASEERR+62); WSAENAMETOOLONG = (WSABASEERR+63); WSAEHOSTDOWN = (WSABASEERR+64); WSAEHOSTUNREACH = (WSABASEERR+65); WSAENOTEMPTY = (WSABASEERR+66); WSAEPROCLIM = (WSABASEERR+67); WSAEUSERS = (WSABASEERR+68); WSAEDQUOT = (WSABASEERR+69); WSAESTALE = (WSABASEERR+70); WSAEREMOTE = (WSABASEERR+71); { Extended Windows Sockets error constant definitions } WSASYSNOTREADY = (WSABASEERR+91); WSAVERNOTSUPPORTED = (WSABASEERR+92); WSANOTINITIALISED = (WSABASEERR+93); WSAEDISCON = (WSABASEERR+101); WSAENOMORE = (WSABASEERR+102); WSAECANCELLED = (WSABASEERR+103); WSAEEINVALIDPROCTABLE = (WSABASEERR+104); WSAEINVALIDPROVIDER = (WSABASEERR+105); WSAEPROVIDERFAILEDINIT = (WSABASEERR+106); WSASYSCALLFAILURE = (WSABASEERR+107); WSASERVICE_NOT_FOUND = (WSABASEERR+108); WSATYPE_NOT_FOUND = (WSABASEERR+109); WSA_E_NO_MORE = (WSABASEERR+110); WSA_E_CANCELLED = (WSABASEERR+111); WSAEREFUSED = (WSABASEERR+112); { Error return codes from gethostbyname() and gethostbyaddr() (when using the resolver). Note that these errors are retrieved via WSAGetLastError() and must therefore follow the rules for avoiding clashes with error numbers from specific implementations or language run-time systems. For this reason the codes are based at WSABASEERR+1001. Note also that [WSA]NO_ADDRESS is defined only for compatibility purposes. } { Authoritative Answer: Host not found } WSAHOST_NOT_FOUND = (WSABASEERR+1001); HOST_NOT_FOUND = WSAHOST_NOT_FOUND; { Non-Authoritative: Host not found, or SERVERFAIL } WSATRY_AGAIN = (WSABASEERR+1002); TRY_AGAIN = WSATRY_AGAIN; { Non recoverable errors, FORMERR, REFUSED, NOTIMP } WSANO_RECOVERY = (WSABASEERR+1003); NO_RECOVERY = WSANO_RECOVERY; { Valid name, no data record of requested type } WSANO_DATA = (WSABASEERR+1004); NO_DATA = WSANO_DATA; { no address, look for MX record } WSANO_ADDRESS = WSANO_DATA; NO_ADDRESS = WSANO_ADDRESS; EWOULDBLOCK = WSAEWOULDBLOCK; EINPROGRESS = WSAEINPROGRESS; EALREADY = WSAEALREADY; ENOTSOCK = WSAENOTSOCK; EDESTADDRREQ = WSAEDESTADDRREQ; EMSGSIZE = WSAEMSGSIZE; EPROTOTYPE = WSAEPROTOTYPE; ENOPROTOOPT = WSAENOPROTOOPT; EPROTONOSUPPORT = WSAEPROTONOSUPPORT; ESOCKTNOSUPPORT = WSAESOCKTNOSUPPORT; EOPNOTSUPP = WSAEOPNOTSUPP; EPFNOSUPPORT = WSAEPFNOSUPPORT; EAFNOSUPPORT = WSAEAFNOSUPPORT; EADDRINUSE = WSAEADDRINUSE; EADDRNOTAVAIL = WSAEADDRNOTAVAIL; ENETDOWN = WSAENETDOWN; ENETUNREACH = WSAENETUNREACH; ENETRESET = WSAENETRESET; ECONNABORTED = WSAECONNABORTED; ECONNRESET = WSAECONNRESET; ENOBUFS = WSAENOBUFS; EISCONN = WSAEISCONN; ENOTCONN = WSAENOTCONN; ESHUTDOWN = WSAESHUTDOWN; ETOOMANYREFS = WSAETOOMANYREFS; ETIMEDOUT = WSAETIMEDOUT; ECONNREFUSED = WSAECONNREFUSED; ELOOP = WSAELOOP; ENAMETOOLONG = WSAENAMETOOLONG; EHOSTDOWN = WSAEHOSTDOWN; EHOSTUNREACH = WSAEHOSTUNREACH; ENOTEMPTY = WSAENOTEMPTY; EPROCLIM = WSAEPROCLIM; EUSERS = WSAEUSERS; EDQUOT = WSAEDQUOT; ESTALE = WSAESTALE; EREMOTE = WSAEREMOTE; EAI_ADDRFAMILY = 1; // Address family for nodename not supported. EAI_AGAIN = 2; // Temporary failure in name resolution. EAI_BADFLAGS = 3; // Invalid value for ai_flags. EAI_FAIL = 4; // Non-recoverable failure in name resolution. EAI_FAMILY = 5; // Address family ai_family not supported. EAI_MEMORY = 6; // Memory allocation failure. EAI_NODATA = 7; // No address associated with nodename. EAI_NONAME = 8; // Nodename nor servname provided, or not known. EAI_SERVICE = 9; // Servname not supported for ai_socktype. EAI_SOCKTYPE = 10; // Socket type ai_socktype not supported. EAI_SYSTEM = 11; // System error returned in errno. const WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128; type PWSAData = ^TWSAData; TWSAData = record wVersion: Word; wHighVersion: Word; {$ifdef win64} iMaxSockets : Word; iMaxUdpDg : Word; lpVendorInfo : PAnsiChar; szDescription : array[0..WSADESCRIPTION_LEN] of AnsiChar; szSystemStatus : array[0..WSASYS_STATUS_LEN] of AnsiChar; {$else} szDescription: array[0..WSADESCRIPTION_LEN] of AnsiChar; szSystemStatus: array[0..WSASYS_STATUS_LEN] of AnsiChar; iMaxSockets: Word; iMaxUdpDg: Word; lpVendorInfo: PAnsiChar; {$endif} end; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); var in6addr_any, in6addr_loopback : TInAddr6; procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); procedure FD_ZERO(var FDSet: TFDSet); {=============================================================================} type TWSAStartup = function(wVersionRequired: Word; var WSData: TWSAData): Integer; stdcall; TWSACleanup = function: Integer; stdcall; TWSAGetLastError = function: Integer; stdcall; TGetServByName = function(name, proto: PAnsiChar): PServEnt; stdcall; TGetServByPort = function(port: Integer; proto: PAnsiChar): PServEnt; stdcall; TGetProtoByName = function(name: PAnsiChar): PProtoEnt; stdcall; TGetProtoByNumber = function(proto: Integer): PProtoEnt; stdcall; TGetHostByName = function(name: PAnsiChar): PHostEnt; stdcall; TGetHostByAddr = function(addr: Pointer; len, Struc: Integer): PHostEnt; stdcall; TGetHostName = function(name: PAnsiChar; len: Integer): Integer; stdcall; TShutdown = function(s: TSocket; how: Integer): Integer; stdcall; TSetSockOpt = function(s: TSocket; level, optname: Integer; optval: PAnsiChar; optlen: Integer): Integer; stdcall; TGetSockOpt = function(s: TSocket; level, optname: Integer; optval: PAnsiChar; var optlen: Integer): Integer; stdcall; TSendTo = function(s: TSocket; const Buf; len, flags: Integer; addrto: PSockAddr; tolen: Integer): Integer; stdcall; TSend = function(s: TSocket; const Buf; len, flags: Integer): Integer; stdcall; TRecv = function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall; TRecvFrom = function(s: TSocket; var Buf; len, flags: Integer; from: PSockAddr; var fromlen: Integer): Integer; stdcall; Tntohs = function(netshort: u_short): u_short; stdcall; Tntohl = function(netlong: u_long): u_long; stdcall; TListen = function(s: TSocket; backlog: Integer): Integer; stdcall; TIoctlSocket = function(s: TSocket; cmd: DWORD; var arg: Integer): Integer; stdcall; TInet_ntoa = function(inaddr: TInAddr): PAnsiChar; stdcall; TInet_addr = function(cp: PAnsiChar): u_long; stdcall; Thtons = function(hostshort: u_short): u_short; stdcall; Thtonl = function(hostlong: u_long): u_long; stdcall; TGetSockName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall; TGetPeerName = function(s: TSocket; name: PSockAddr; var namelen: Integer): Integer; stdcall; TConnect = function(s: TSocket; name: PSockAddr; namelen: Integer): Integer; stdcall; TCloseSocket = function(s: TSocket): Integer; stdcall; TBind = function(s: TSocket; addr: PSockAddr; namelen: Integer): Integer; stdcall; TAccept = function(s: TSocket; addr: PSockAddr; var addrlen: Integer): TSocket; stdcall; TTSocket = function(af, Struc, Protocol: Integer): TSocket; stdcall; TSelect = function(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; stdcall; TGetAddrInfo = function(NodeName: PAnsiChar; ServName: PAnsiChar; Hints: PAddrInfo; var Addrinfo: PAddrInfo): integer; stdcall; TFreeAddrInfo = procedure(ai: PAddrInfo); stdcall; TGetNameInfo = function( addr: PSockAddr; namelen: Integer; host: PAnsiChar; hostlen: DWORD; serv: PAnsiChar; servlen: DWORD; flags: integer): integer; stdcall; T__WSAFDIsSet = function (s: TSocket; var FDSet: TFDSet): Bool; stdcall; TWSAIoctl = function (s: TSocket; dwIoControlCode: DWORD; lpvInBuffer: Pointer; cbInBuffer: DWORD; lpvOutBuffer: Pointer; cbOutBuffer: DWORD; lpcbBytesReturned: PDWORD; lpOverlapped: Pointer; lpCompletionRoutine: pointer): u_int; stdcall; var WSAStartup: TWSAStartup = nil; WSACleanup: TWSACleanup = nil; WSAGetLastError: TWSAGetLastError = nil; GetServByName: TGetServByName = nil; GetServByPort: TGetServByPort = nil; GetProtoByName: TGetProtoByName = nil; GetProtoByNumber: TGetProtoByNumber = nil; GetHostByName: TGetHostByName = nil; GetHostByAddr: TGetHostByAddr = nil; ssGetHostName: TGetHostName = nil; Shutdown: TShutdown = nil; SetSockOpt: TSetSockOpt = nil; GetSockOpt: TGetSockOpt = nil; ssSendTo: TSendTo = nil; ssSend: TSend = nil; ssRecv: TRecv = nil; ssRecvFrom: TRecvFrom = nil; ntohs: Tntohs = nil; ntohl: Tntohl = nil; Listen: TListen = nil; IoctlSocket: TIoctlSocket = nil; Inet_ntoa: TInet_ntoa = nil; Inet_addr: TInet_addr = nil; htons: Thtons = nil; htonl: Thtonl = nil; ssGetSockName: TGetSockName = nil; ssGetPeerName: TGetPeerName = nil; ssConnect: TConnect = nil; CloseSocket: TCloseSocket = nil; ssBind: TBind = nil; ssAccept: TAccept = nil; Socket: TTSocket = nil; Select: TSelect = nil; GetAddrInfo: TGetAddrInfo = nil; FreeAddrInfo: TFreeAddrInfo = nil; GetNameInfo: TGetNameInfo = nil; __WSAFDIsSet: T__WSAFDIsSet = nil; WSAIoctl: TWSAIoctl = nil; var SynSockCS: SyncObjs.TCriticalSection; SockEnhancedApi: Boolean; SockWship6Api: Boolean; type TVarSin = packed record case integer of 0: (AddressFamily: u_short); 1: ( case sin_family: u_short of AF_INET: (sin_port: u_short; sin_addr: TInAddr; sin_zero: array[0..7] of byte); AF_INET6: (sin6_port: u_short; sin6_flowinfo: u_long; sin6_addr: TInAddr6; sin6_scope_id: u_long); ); end; function SizeOfVarSin(sin: TVarSin): integer; function Bind(s: TSocket; const addr: TVarSin): Integer; function Connect(s: TSocket; const name: TVarSin): Integer; function GetSockName(s: TSocket; var name: TVarSin): Integer; function GetPeerName(s: TSocket; var name: TVarSin): Integer; function GetHostName: AnsiString; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; function Accept(s: TSocket; var addr: TVarSin): TSocket; function IsNewApi(Family: integer): Boolean; function SetVarSin(var Sin: TVarSin; IP, Port: AnsiString; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; function GetSinIP(Sin: TVarSin): AnsiString; function GetSinPort(Sin: TVarSin): Integer; procedure ResolveNameToIP(Name: AnsiString; Family, SockProtocol, SockType: integer; const IPList: TStrings); function ResolveIPToName(IP: AnsiString; Family, SockProtocol, SockType: integer): AnsiString; function ResolvePort(Port: AnsiString; Family, SockProtocol, SockType: integer): Word; {==============================================================================} implementation var SynSockCount: Integer = 0; LibHandle: THandle = 0; Libwship6Handle: THandle = 0; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); end; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); end; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); end; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); end; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; begin Result := (a^.u6_addr8[0] = $FF); end; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; begin Result := (CompareMem( a, b, sizeof(TInAddr6))); end; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); end; procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); a^.u6_addr8[15] := 1; end; {=============================================================================} procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); var I: Integer; begin I := 0; while I < FDSet.fd_count do begin if FDSet.fd_array[I] = Socket then begin while I < FDSet.fd_count - 1 do begin FDSet.fd_array[I] := FDSet.fd_array[I + 1]; Inc(I); end; Dec(FDSet.fd_count); Break; end; Inc(I); end; end; function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; begin Result := __WSAFDIsSet(Socket, FDSet); end; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); begin if FDSet.fd_count < FD_SETSIZE then begin FDSet.fd_array[FDSet.fd_count] := Socket; Inc(FDSet.fd_count); end; end; procedure FD_ZERO(var FDSet: TFDSet); begin FDSet.fd_count := 0; end; {=============================================================================} function SizeOfVarSin(sin: TVarSin): integer; begin case sin.sin_family of AF_INET: Result := SizeOf(TSockAddrIn); AF_INET6: Result := SizeOf(TSockAddrIn6); else Result := 0; end; end; {=============================================================================} function Bind(s: TSocket; const addr: TVarSin): Integer; begin Result := ssBind(s, @addr, SizeOfVarSin(addr)); end; function Connect(s: TSocket; const name: TVarSin): Integer; begin Result := ssConnect(s, @name, SizeOfVarSin(name)); end; function GetSockName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := ssGetSockName(s, @name, Len); end; function GetPeerName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := ssGetPeerName(s, @name, Len); end; function GetHostName: AnsiString; var s: AnsiString; begin Result := ''; setlength(s, 255); ssGetHostName(pAnsichar(s), Length(s) - 1); Result := PAnsichar(s); end; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := ssSend(s, Buf^, len, flags); end; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := ssRecv(s, Buf^, len, flags); end; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; begin Result := ssSendTo(s, Buf^, len, flags, @addrto, SizeOfVarSin(addrto)); end; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; var x: integer; begin x := SizeOf(from); Result := ssRecvFrom(s, Buf^, len, flags, @from, x); end; function Accept(s: TSocket; var addr: TVarSin): TSocket; var x: integer; begin x := SizeOf(addr); Result := ssAccept(s, @addr, x); end; {=============================================================================} function IsNewApi(Family: integer): Boolean; begin Result := SockEnhancedApi; if not Result then Result := (Family = AF_INET6) and SockWship6Api; end; function SetVarSin(var Sin: TVarSin; IP, Port: AnsiString; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; type pu_long = ^u_long; var ProtoEnt: PProtoEnt; ServEnt: PServEnt; HostEnt: PHostEnt; r: integer; Hints1, Hints2: TAddrInfo; Sin1, Sin2: TVarSin; TwoPass: boolean; function GetAddr(const IP, port: AnsiString; Hints: TAddrInfo; var Sin: TVarSin): integer; var Addr: PAddrInfo; begin Addr := nil; try FillChar(Sin, Sizeof(Sin), 0); if Hints.ai_socktype = SOCK_RAW then begin Hints.ai_socktype := 0; Hints.ai_protocol := 0; Result := synsock.GetAddrInfo(PAnsiChar(IP), nil, @Hints, Addr); end else begin if (IP = cAnyHost) or (IP = c6AnyHost) then begin Hints.ai_flags := AI_PASSIVE; Result := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); end else if (IP = cLocalhost) or (IP = c6Localhost) then begin Result := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); end else begin Result := synsock.GetAddrInfo(PAnsiChar(IP), PAnsiChar(Port), @Hints, Addr); end; end; if Result = 0 then if (Addr <> nil) then Move(Addr^.ai_addr^, Sin, Addr^.ai_addrlen); finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; begin Result := 0; FillChar(Sin, Sizeof(Sin), 0); if not IsNewApi(family) then begin SynSockCS.Enter; try Sin.sin_family := AF_INET; ProtoEnt := synsock.GetProtoByNumber(SockProtocol); ServEnt := nil; if (ProtoEnt <> nil) and (StrToIntDef(string(Port),-1) =-1) then ServEnt := synsock.GetServByName(PAnsiChar(Port), ProtoEnt^.p_name); if ServEnt = nil then Sin.sin_port := synsock.htons(StrToIntDef(string(Port), 0)) else Sin.sin_port := ServEnt^.s_port; if IP = cBroadcast then Sin.sin_addr.s_addr := u_long(INADDR_BROADCAST) else begin Sin.sin_addr.s_addr := synsock.inet_addr(PAnsiChar(IP)); if Sin.sin_addr.s_addr = u_long(INADDR_NONE) then begin HostEnt := synsock.GetHostByName(PAnsiChar(IP)); Result := synsock.WSAGetLastError; if HostEnt <> nil then Sin.sin_addr.S_addr := u_long(Pu_long(HostEnt^.h_addr_list^)^); end; end; finally SynSockCS.Leave; end; end else begin FillChar(Hints1, Sizeof(Hints1), 0); FillChar(Hints2, Sizeof(Hints2), 0); TwoPass := False; if Family = AF_UNSPEC then begin if PreferIP4 then begin Hints1.ai_family := AF_INET; Hints2.ai_family := AF_INET6; TwoPass := True; end else begin Hints2.ai_family := AF_INET; Hints1.ai_family := AF_INET6; TwoPass := True; end; end else Hints1.ai_family := Family; Hints1.ai_socktype := SockType; Hints1.ai_protocol := SockProtocol; Hints2.ai_socktype := Hints1.ai_socktype; Hints2.ai_protocol := Hints1.ai_protocol; r := GetAddr(IP, Port, Hints1, Sin1); Result := r; sin := sin1; if r <> 0 then if TwoPass then begin r := GetAddr(IP, Port, Hints2, Sin2); Result := r; if r = 0 then sin := sin2; end; end; end; function GetSinIP(Sin: TVarSin): AnsiString; var p: PAnsiChar; host, serv: AnsiString; hostlen, servlen: integer; r: integer; begin Result := ''; if not IsNewApi(Sin.AddressFamily) then begin p := synsock.inet_ntoa(Sin.sin_addr); if p <> nil then Result := p; end else begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(@sin, SizeOfVarSin(sin), PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); if r = 0 then Result := PAnsiChar(host); end; end; function GetSinPort(Sin: TVarSin): Integer; begin if (Sin.sin_family = AF_INET6) then Result := synsock.ntohs(Sin.sin6_port) else Result := synsock.ntohs(Sin.sin_port); end; procedure ResolveNameToIP(Name: AnsiString; Family, SockProtocol, SockType: integer; const IPList: TStrings); type TaPInAddr = array[0..250] of PInAddr; PaPInAddr = ^TaPInAddr; var Hints: TAddrInfo; Addr: PAddrInfo; AddrNext: PAddrInfo; r: integer; host, serv: AnsiString; hostlen, servlen: integer; RemoteHost: PHostEnt; IP: u_long; PAdrPtr: PaPInAddr; i: Integer; s: String; InAddr: TInAddr; begin IPList.Clear; if not IsNewApi(Family) then begin IP := synsock.inet_addr(PAnsiChar(Name)); if IP = u_long(INADDR_NONE) then begin SynSockCS.Enter; try RemoteHost := synsock.GetHostByName(PAnsiChar(Name)); if RemoteHost <> nil then begin PAdrPtr := PAPInAddr(RemoteHost^.h_addr_list); i := 0; while PAdrPtr^[i] <> nil do begin InAddr := PAdrPtr^[i]^; s := Format('%d.%d.%d.%d', [InAddr.S_bytes[0], InAddr.S_bytes[1], InAddr.S_bytes[2], InAddr.S_bytes[3]]); IPList.Add(s); Inc(i); end; end; finally SynSockCS.Leave; end; end else IPList.Add(string(Name)); end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := SockProtocol; Hints.ai_flags := 0; r := synsock.GetAddrInfo(PAnsiChar(Name), nil, @Hints, Addr); if r = 0 then begin AddrNext := Addr; while not(AddrNext = nil) do begin if not(((Family = AF_INET6) and (AddrNext^.ai_family = AF_INET)) or ((Family = AF_INET) and (AddrNext^.ai_family = AF_INET6))) then begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(AddrNext^.ai_addr, AddrNext^.ai_addrlen, PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICHOST + NI_NUMERICSERV); if r = 0 then begin host := PAnsiChar(host); IPList.Add(string(host)); end; end; AddrNext := AddrNext^.ai_next; end; end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; if IPList.Count = 0 then IPList.Add(cAnyHost); end; function ResolvePort(Port: AnsiString; Family, SockProtocol, SockType: integer): Word; var ProtoEnt: PProtoEnt; ServEnt: PServEnt; Hints: TAddrInfo; Addr: PAddrInfo; r: integer; begin Result := 0; if not IsNewApi(Family) then begin SynSockCS.Enter; try ProtoEnt := synsock.GetProtoByNumber(SockProtocol); ServEnt := nil; if ProtoEnt <> nil then ServEnt := synsock.GetServByName(PAnsiChar(Port), ProtoEnt^.p_name); if ServEnt = nil then Result := StrToIntDef(string(Port), 0) else Result := synsock.htons(ServEnt^.s_port); finally SynSockCS.Leave; end; end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := Sockprotocol; Hints.ai_flags := AI_PASSIVE; r := synsock.GetAddrInfo(nil, PAnsiChar(Port), @Hints, Addr); if (r = 0) and Assigned(Addr) then begin if Addr^.ai_family = AF_INET then Result := synsock.htons(Addr^.ai_addr^.sin_port); if Addr^.ai_family = AF_INET6 then Result := synsock.htons(PSockAddrIn6(Addr^.ai_addr)^.sin6_port); end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; end; function ResolveIPToName(IP: AnsiString; Family, SockProtocol, SockType: integer): AnsiString; var Hints: TAddrInfo; Addr: PAddrInfo; r: integer; host, serv: AnsiString; hostlen, servlen: integer; RemoteHost: PHostEnt; IPn: u_long; begin Result := IP; if not IsNewApi(Family) then begin IPn := synsock.inet_addr(PAnsiChar(IP)); if IPn <> u_long(INADDR_NONE) then begin SynSockCS.Enter; try RemoteHost := GetHostByAddr(@IPn, SizeOf(IPn), AF_INET); if RemoteHost <> nil then Result := RemoteHost^.h_name; finally SynSockCS.Leave; end; end; end else begin Addr := nil; try FillChar(Hints, Sizeof(Hints), 0); Hints.ai_family := AF_UNSPEC; Hints.ai_socktype := SockType; Hints.ai_protocol := SockProtocol; Hints.ai_flags := 0; r := synsock.GetAddrInfo(PAnsiChar(IP), nil, @Hints, Addr); if (r = 0) and Assigned(Addr)then begin hostlen := NI_MAXHOST; servlen := NI_MAXSERV; setlength(host, hostlen); setlength(serv, servlen); r := getnameinfo(Addr^.ai_addr, Addr^.ai_addrlen, PAnsiChar(host), hostlen, PAnsiChar(serv), servlen, NI_NUMERICSERV); if r = 0 then Result := PAnsiChar(host); end; finally if Assigned(Addr) then synsock.FreeAddrInfo(Addr); end; end; end; {=============================================================================} function InitSocketInterface(stack: String): Boolean; begin Result := False; SockEnhancedApi := False; if stack = '' then stack := DLLStackName; SynSockCS.Enter; try if SynSockCount = 0 then begin SockEnhancedApi := False; SockWship6Api := False; LibHandle := LoadLibrary(PChar(Stack)); if LibHandle <> 0 then begin WSAIoctl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAIoctl'))); __WSAFDIsSet := GetProcAddress(LibHandle, PAnsiChar(AnsiString('__WSAFDIsSet'))); CloseSocket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('closesocket'))); IoctlSocket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ioctlsocket'))); WSAGetLastError := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAGetLastError'))); WSAStartup := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSAStartup'))); WSACleanup := GetProcAddress(LibHandle, PAnsiChar(AnsiString('WSACleanup'))); ssAccept := GetProcAddress(LibHandle, PAnsiChar(AnsiString('accept'))); ssBind := GetProcAddress(LibHandle, PAnsiChar(AnsiString('bind'))); ssConnect := GetProcAddress(LibHandle, PAnsiChar(AnsiString('connect'))); ssGetPeerName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getpeername'))); ssGetSockName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getsockname'))); GetSockOpt := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getsockopt'))); Htonl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('htonl'))); Htons := GetProcAddress(LibHandle, PAnsiChar(AnsiString('htons'))); Inet_Addr := GetProcAddress(LibHandle, PAnsiChar(AnsiString('inet_addr'))); Inet_Ntoa := GetProcAddress(LibHandle, PAnsiChar(AnsiString('inet_ntoa'))); Listen := GetProcAddress(LibHandle, PAnsiChar(AnsiString('listen'))); Ntohl := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ntohl'))); Ntohs := GetProcAddress(LibHandle, PAnsiChar(AnsiString('ntohs'))); ssRecv := GetProcAddress(LibHandle, PAnsiChar(AnsiString('recv'))); ssRecvFrom := GetProcAddress(LibHandle, PAnsiChar(AnsiString('recvfrom'))); Select := GetProcAddress(LibHandle, PAnsiChar(AnsiString('select'))); ssSend := GetProcAddress(LibHandle, PAnsiChar(AnsiString('send'))); ssSendTo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('sendto'))); SetSockOpt := GetProcAddress(LibHandle, PAnsiChar(AnsiString('setsockopt'))); ShutDown := GetProcAddress(LibHandle, PAnsiChar(AnsiString('shutdown'))); Socket := GetProcAddress(LibHandle, PAnsiChar(AnsiString('socket'))); GetHostByAddr := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostbyaddr'))); GetHostByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostbyname'))); GetProtoByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getprotobyname'))); GetProtoByNumber := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getprotobynumber'))); GetServByName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getservbyname'))); GetServByPort := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getservbyport'))); ssGetHostName := GetProcAddress(LibHandle, PAnsiChar(AnsiString('gethostname'))); {$IFNDEF FORCEOLDAPI} GetAddrInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getaddrinfo'))); FreeAddrInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('freeaddrinfo'))); GetNameInfo := GetProcAddress(LibHandle, PAnsiChar(AnsiString('getnameinfo'))); SockEnhancedApi := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) and Assigned(GetNameInfo); if not SockEnhancedApi then begin LibWship6Handle := LoadLibrary(PChar(DLLWship6)); if LibWship6Handle <> 0 then begin GetAddrInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('getaddrinfo'))); FreeAddrInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('freeaddrinfo'))); GetNameInfo := GetProcAddress(LibWship6Handle, PAnsiChar(AnsiString('getnameinfo'))); SockWship6Api := Assigned(GetAddrInfo) and Assigned(FreeAddrInfo) and Assigned(GetNameInfo); end; end; {$ENDIF} Result := True; end; end else Result := True; if Result then Inc(SynSockCount); finally SynSockCS.Leave; end; end; function DestroySocketInterface: Boolean; begin SynSockCS.Enter; try Dec(SynSockCount); if SynSockCount < 0 then SynSockCount := 0; if SynSockCount = 0 then begin if LibHandle <> 0 then begin FreeLibrary(libHandle); LibHandle := 0; end; if LibWship6Handle <> 0 then begin FreeLibrary(LibWship6Handle); LibWship6Handle := 0; end; end; finally SynSockCS.Leave; end; Result := True; end; initialization begin SynSockCS := SyncObjs.TCriticalSection.Create; SET_IN6_IF_ADDR_ANY (@in6addr_any); SET_LOOPBACK_ADDR6 (@in6addr_loopback); end; finalization begin SynSockCS.Free; end;doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssfpc.inc0000644000175000001440000006621712014201074021071 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 001.001.004 | |==============================================================================| | Content: Socket Independent Platform Layer - FreePascal definition include | |==============================================================================| | Copyright (c)2006-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2006-2011. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@exclude} {$IFDEF FPC} {For FreePascal 2.x.x} //{$DEFINE FORCEOLDAPI} {Note about define FORCEOLDAPI: If you activate this compiler directive, then is allways used old socket API for name resolution. If you leave this directive inactive, then the new API is used, when running system allows it. For IPv6 support you must have new API! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$ifdef FreeBSD} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} {$ifdef darwin} {$DEFINE SOCK_HAS_SINLEN} // BSD definition of scoketaddr {$endif} interface uses SyncObjs, SysUtils, Classes, synafpc, BaseUnix, Unix, termio, sockets, netdb; function InitSocketInterface(stack: string): Boolean; function DestroySocketInterface: Boolean; const DLLStackName = ''; WinsockLevel = $0202; cLocalHost = '127.0.0.1'; cAnyHost = '0.0.0.0'; c6AnyHost = '::0'; c6Localhost = '::1'; cLocalHostStr = 'localhost'; type TSocket = longint; TAddrFamily = integer; TMemory = pointer; type TFDSet = Baseunix.TFDSet; PFDSet = ^TFDSet; Ptimeval = Baseunix.ptimeval; Ttimeval = Baseunix.ttimeval; const FIONREAD = termio.FIONREAD; FIONBIO = termio.FIONBIO; FIOASYNC = termio.FIOASYNC; const IPPROTO_IP = 0; { Dummy } IPPROTO_ICMP = 1; { Internet Control Message Protocol } IPPROTO_IGMP = 2; { Internet Group Management Protocol} IPPROTO_TCP = 6; { TCP } IPPROTO_UDP = 17; { User Datagram Protocol } IPPROTO_IPV6 = 41; IPPROTO_ICMPV6 = 58; IPPROTO_RM = 113; IPPROTO_RAW = 255; IPPROTO_MAX = 256; type PInAddr = ^TInAddr; TInAddr = sockets.in_addr; PSockAddrIn = ^TSockAddrIn; TSockAddrIn = sockets.TInetSockAddr; TIP_mreq = record imr_multiaddr: TInAddr; // IP multicast address of group imr_interface: TInAddr; // local IP address of interface end; PInAddr6 = ^TInAddr6; TInAddr6 = sockets.Tin6_addr; PSockAddrIn6 = ^TSockAddrIn6; TSockAddrIn6 = sockets.TInetSockAddr6; TIPv6_mreq = record ipv6mr_multiaddr: TInAddr6; // IPv6 multicast address. ipv6mr_interface: integer; // Interface index. end; const INADDR_ANY = $00000000; INADDR_LOOPBACK = $7F000001; INADDR_BROADCAST = $FFFFFFFF; INADDR_NONE = $FFFFFFFF; ADDR_ANY = INADDR_ANY; INVALID_SOCKET = TSocket(NOT(0)); SOCKET_ERROR = -1; Const IP_TOS = sockets.IP_TOS; { int; IP type of service and precedence. } IP_TTL = sockets.IP_TTL; { int; IP time to live. } IP_HDRINCL = sockets.IP_HDRINCL; { int; Header is included with data. } IP_OPTIONS = sockets.IP_OPTIONS; { ip_opts; IP per-packet options. } // IP_ROUTER_ALERT = sockets.IP_ROUTER_ALERT; { bool } IP_RECVOPTS = sockets.IP_RECVOPTS; { bool } IP_RETOPTS = sockets.IP_RETOPTS; { bool } // IP_PKTINFO = sockets.IP_PKTINFO; { bool } // IP_PKTOPTIONS = sockets.IP_PKTOPTIONS; // IP_PMTUDISC = sockets.IP_PMTUDISC; { obsolete name? } // IP_MTU_DISCOVER = sockets.IP_MTU_DISCOVER; { int; see below } // IP_RECVERR = sockets.IP_RECVERR; { bool } // IP_RECVTTL = sockets.IP_RECVTTL; { bool } // IP_RECVTOS = sockets.IP_RECVTOS; { bool } IP_MULTICAST_IF = sockets.IP_MULTICAST_IF; { in_addr; set/get IP multicast i/f } IP_MULTICAST_TTL = sockets.IP_MULTICAST_TTL; { u_char; set/get IP multicast ttl } IP_MULTICAST_LOOP = sockets.IP_MULTICAST_LOOP; { i_char; set/get IP multicast loopback } IP_ADD_MEMBERSHIP = sockets.IP_ADD_MEMBERSHIP; { ip_mreq; add an IP group membership } IP_DROP_MEMBERSHIP = sockets.IP_DROP_MEMBERSHIP; { ip_mreq; drop an IP group membership } SOL_SOCKET = sockets.SOL_SOCKET; SO_DEBUG = sockets.SO_DEBUG; SO_REUSEADDR = sockets.SO_REUSEADDR; SO_TYPE = sockets.SO_TYPE; SO_ERROR = sockets.SO_ERROR; SO_DONTROUTE = sockets.SO_DONTROUTE; SO_BROADCAST = sockets.SO_BROADCAST; SO_SNDBUF = sockets.SO_SNDBUF; SO_RCVBUF = sockets.SO_RCVBUF; SO_KEEPALIVE = sockets.SO_KEEPALIVE; SO_OOBINLINE = sockets.SO_OOBINLINE; // SO_NO_CHECK = sockets.SO_NO_CHECK; // SO_PRIORITY = sockets.SO_PRIORITY; SO_LINGER = sockets.SO_LINGER; // SO_BSDCOMPAT = sockets.SO_BSDCOMPAT; // SO_REUSEPORT = sockets.SO_REUSEPORT; // SO_PASSCRED = sockets.SO_PASSCRED; // SO_PEERCRED = sockets.SO_PEERCRED; SO_RCVLOWAT = sockets.SO_RCVLOWAT; SO_SNDLOWAT = sockets.SO_SNDLOWAT; SO_RCVTIMEO = sockets.SO_RCVTIMEO; SO_SNDTIMEO = sockets.SO_SNDTIMEO; { Security levels - as per NRL IPv6 - don't actually do anything } // SO_SECURITY_AUTHENTICATION = sockets.SO_SECURITY_AUTHENTICATION; // SO_SECURITY_ENCRYPTION_TRANSPORT = sockets.SO_SECURITY_ENCRYPTION_TRANSPORT; // SO_SECURITY_ENCRYPTION_NETWORK = sockets.SO_SECURITY_ENCRYPTION_NETWORK; // SO_BINDTODEVICE = sockets.SO_BINDTODEVICE; { Socket filtering } // SO_ATTACH_FILTER = sockets.SO_ATTACH_FILTER; // SO_DETACH_FILTER = sockets.SO_DETACH_FILTER; SOMAXCONN = 1024; IPV6_UNICAST_HOPS = sockets.IPV6_UNICAST_HOPS; IPV6_MULTICAST_IF = sockets.IPV6_MULTICAST_IF; IPV6_MULTICAST_HOPS = sockets.IPV6_MULTICAST_HOPS; IPV6_MULTICAST_LOOP = sockets.IPV6_MULTICAST_LOOP; IPV6_JOIN_GROUP = sockets.IPV6_JOIN_GROUP; IPV6_LEAVE_GROUP = sockets.IPV6_LEAVE_GROUP; const SOCK_STREAM = 1; { stream socket } SOCK_DGRAM = 2; { datagram socket } SOCK_RAW = 3; { raw-protocol interface } SOCK_RDM = 4; { reliably-delivered message } SOCK_SEQPACKET = 5; { sequenced packet stream } { TCP options. } TCP_NODELAY = $0001; { Address families. } AF_UNSPEC = 0; { unspecified } AF_INET = 2; { internetwork: UDP, TCP, etc. } AF_INET6 = 10; { Internetwork Version 6 } AF_MAX = 24; { Protocol families, same as address families for now. } PF_UNSPEC = AF_UNSPEC; PF_INET = AF_INET; PF_INET6 = AF_INET6; PF_MAX = AF_MAX; type { Structure used for manipulating linger option. } PLinger = ^TLinger; TLinger = packed record l_onoff: integer; l_linger: integer; end; const MSG_OOB = sockets.MSG_OOB; // Process out-of-band data. MSG_PEEK = sockets.MSG_PEEK; // Peek at incoming messages. {$ifdef DARWIN} MSG_NOSIGNAL = $20000; // Do not generate SIGPIPE. // Works under MAC OS X, but is undocumented, // So FPC doesn't include it {$else} MSG_NOSIGNAL = sockets.MSG_NOSIGNAL; // Do not generate SIGPIPE. {$endif} const WSAEINTR = ESysEINTR; WSAEBADF = ESysEBADF; WSAEACCES = ESysEACCES; WSAEFAULT = ESysEFAULT; WSAEINVAL = ESysEINVAL; WSAEMFILE = ESysEMFILE; WSAEWOULDBLOCK = ESysEWOULDBLOCK; WSAEINPROGRESS = ESysEINPROGRESS; WSAEALREADY = ESysEALREADY; WSAENOTSOCK = ESysENOTSOCK; WSAEDESTADDRREQ = ESysEDESTADDRREQ; WSAEMSGSIZE = ESysEMSGSIZE; WSAEPROTOTYPE = ESysEPROTOTYPE; WSAENOPROTOOPT = ESysENOPROTOOPT; WSAEPROTONOSUPPORT = ESysEPROTONOSUPPORT; WSAESOCKTNOSUPPORT = ESysESOCKTNOSUPPORT; WSAEOPNOTSUPP = ESysEOPNOTSUPP; WSAEPFNOSUPPORT = ESysEPFNOSUPPORT; WSAEAFNOSUPPORT = ESysEAFNOSUPPORT; WSAEADDRINUSE = ESysEADDRINUSE; WSAEADDRNOTAVAIL = ESysEADDRNOTAVAIL; WSAENETDOWN = ESysENETDOWN; WSAENETUNREACH = ESysENETUNREACH; WSAENETRESET = ESysENETRESET; WSAECONNABORTED = ESysECONNABORTED; WSAECONNRESET = ESysECONNRESET; WSAENOBUFS = ESysENOBUFS; WSAEISCONN = ESysEISCONN; WSAENOTCONN = ESysENOTCONN; WSAESHUTDOWN = ESysESHUTDOWN; WSAETOOMANYREFS = ESysETOOMANYREFS; WSAETIMEDOUT = ESysETIMEDOUT; WSAECONNREFUSED = ESysECONNREFUSED; WSAELOOP = ESysELOOP; WSAENAMETOOLONG = ESysENAMETOOLONG; WSAEHOSTDOWN = ESysEHOSTDOWN; WSAEHOSTUNREACH = ESysEHOSTUNREACH; WSAENOTEMPTY = ESysENOTEMPTY; WSAEPROCLIM = -1; WSAEUSERS = ESysEUSERS; WSAEDQUOT = ESysEDQUOT; WSAESTALE = ESysESTALE; WSAEREMOTE = ESysEREMOTE; WSASYSNOTREADY = -2; WSAVERNOTSUPPORTED = -3; WSANOTINITIALISED = -4; WSAEDISCON = -5; WSAHOST_NOT_FOUND = 1; WSATRY_AGAIN = 2; WSANO_RECOVERY = 3; WSANO_DATA = -6; const WSADESCRIPTION_LEN = 256; WSASYS_STATUS_LEN = 128; type PWSAData = ^TWSAData; TWSAData = packed record wVersion: Word; wHighVersion: Word; szDescription: array[0..WSADESCRIPTION_LEN] of Char; szSystemStatus: array[0..WSASYS_STATUS_LEN] of Char; iMaxSockets: Word; iMaxUdpDg: Word; lpVendorInfo: PChar; end; function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6):boolean; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); var in6addr_any, in6addr_loopback : TInAddr6; procedure FD_CLR(Socket: TSocket; var FDSet: TFDSet); function FD_ISSET(Socket: TSocket; var FDSet: TFDSet): Boolean; procedure FD_SET(Socket: TSocket; var FDSet: TFDSet); procedure FD_ZERO(var FDSet: TFDSet); {=============================================================================} var SynSockCS: SyncObjs.TCriticalSection; SockEnhancedApi: Boolean; SockWship6Api: Boolean; type TVarSin = packed record {$ifdef SOCK_HAS_SINLEN} sin_len : cuchar; {$endif} case integer of 0: (AddressFamily: sa_family_t); 1: ( case sin_family: sa_family_t of AF_INET: (sin_port: word; sin_addr: TInAddr; sin_zero: array[0..7] of Char); AF_INET6: (sin6_port: word; sin6_flowinfo: longword; sin6_addr: TInAddr6; sin6_scope_id: longword); ); end; function SizeOfVarSin(sin: TVarSin): integer; function WSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; function WSACleanup: Integer; function WSAGetLastError: Integer; function GetHostName: string; function Shutdown(s: TSocket; how: Integer): Integer; function SetSockOpt(s: TSocket; level, optname: Integer; optval: TMemory; optlen: Integer): Integer; function GetSockOpt(s: TSocket; level, optname: Integer; optval: TMemory; var optlen: Integer): Integer; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; function ntohs(netshort: word): word; function ntohl(netlong: longword): longword; function Listen(s: TSocket; backlog: Integer): Integer; function IoctlSocket(s: TSocket; cmd: DWORD; var arg: integer): Integer; function htons(hostshort: word): word; function htonl(hostlong: longword): longword; function GetSockName(s: TSocket; var name: TVarSin): Integer; function GetPeerName(s: TSocket; var name: TVarSin): Integer; function Connect(s: TSocket; const name: TVarSin): Integer; function CloseSocket(s: TSocket): Integer; function Bind(s: TSocket; const addr: TVarSin): Integer; function Accept(s: TSocket; var addr: TVarSin): TSocket; function Socket(af, Struc, Protocol: Integer): TSocket; function Select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; function IsNewApi(Family: integer): Boolean; function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; function GetSinIP(Sin: TVarSin): string; function GetSinPort(Sin: TVarSin): Integer; procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; {==============================================================================} implementation function IN6_IS_ADDR_UNSPECIFIED(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr32[3] = 0)); end; function IN6_IS_ADDR_LOOPBACK(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr32[0] = 0) and (a^.u6_addr32[1] = 0) and (a^.u6_addr32[2] = 0) and (a^.u6_addr8[12] = 0) and (a^.u6_addr8[13] = 0) and (a^.u6_addr8[14] = 0) and (a^.u6_addr8[15] = 1)); end; function IN6_IS_ADDR_LINKLOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $80)); end; function IN6_IS_ADDR_SITELOCAL(const a: PInAddr6): boolean; begin Result := ((a^.u6_addr8[0] = $FE) and (a^.u6_addr8[1] = $C0)); end; function IN6_IS_ADDR_MULTICAST(const a: PInAddr6): boolean; begin Result := (a^.u6_addr8[0] = $FF); end; function IN6_ADDR_EQUAL(const a: PInAddr6; const b: PInAddr6): boolean; begin Result := (CompareMem( a, b, sizeof(TInAddr6))); end; procedure SET_IN6_IF_ADDR_ANY (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); end; procedure SET_LOOPBACK_ADDR6 (const a: PInAddr6); begin FillChar(a^, sizeof(TInAddr6), 0); a^.u6_addr8[15] := 1; end; {=============================================================================} function WSAStartup(wVersionRequired: Word; var WSData: TWSAData): Integer; begin with WSData do begin wVersion := wVersionRequired; wHighVersion := $202; szDescription := 'Synsock - Synapse Platform Independent Socket Layer'; szSystemStatus := 'Running on Unix/Linux by FreePascal'; iMaxSockets := 32768; iMaxUdpDg := 8192; end; Result := 0; end; function WSACleanup: Integer; begin Result := 0; end; function WSAGetLastError: Integer; begin Result := fpGetErrno; end; function FD_ISSET(Socket: TSocket; var fdset: TFDSet): Boolean; begin Result := fpFD_ISSET(socket, fdset) <> 0; end; procedure FD_SET(Socket: TSocket; var fdset: TFDSet); begin fpFD_SET(Socket, fdset); end; procedure FD_CLR(Socket: TSocket; var fdset: TFDSet); begin fpFD_CLR(Socket, fdset); end; procedure FD_ZERO(var fdset: TFDSet); begin fpFD_ZERO(fdset); end; {=============================================================================} function SizeOfVarSin(sin: TVarSin): integer; begin case sin.sin_family of AF_INET: Result := SizeOf(TSockAddrIn); AF_INET6: Result := SizeOf(TSockAddrIn6); else Result := 0; end; end; {=============================================================================} function Bind(s: TSocket; const addr: TVarSin): Integer; begin if fpBind(s, @addr, SizeOfVarSin(addr)) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function Connect(s: TSocket; const name: TVarSin): Integer; begin if fpConnect(s, @name, SizeOfVarSin(name)) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function GetSockName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := fpGetSockName(s, @name, @Len); end; function GetPeerName(s: TSocket; var name: TVarSin): Integer; var len: integer; begin len := SizeOf(name); FillChar(name, len, 0); Result := fpGetPeerName(s, @name, @Len); end; function GetHostName: string; begin Result := unix.GetHostName; end; function Send(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := fpSend(s, pointer(Buf), len, flags); end; function Recv(s: TSocket; Buf: TMemory; len, flags: Integer): Integer; begin Result := fpRecv(s, pointer(Buf), len, flags); end; function SendTo(s: TSocket; Buf: TMemory; len, flags: Integer; addrto: TVarSin): Integer; begin Result := fpSendTo(s, pointer(Buf), len, flags, @addrto, SizeOfVarSin(addrto)); end; function RecvFrom(s: TSocket; Buf: TMemory; len, flags: Integer; var from: TVarSin): Integer; var x: integer; begin x := SizeOf(from); Result := fpRecvFrom(s, pointer(Buf), len, flags, @from, @x); end; function Accept(s: TSocket; var addr: TVarSin): TSocket; var x: integer; begin x := SizeOf(addr); Result := fpAccept(s, @addr, @x); end; function Shutdown(s: TSocket; how: Integer): Integer; begin Result := fpShutdown(s, how); end; function SetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory; optlen: Integer): Integer; begin Result := fpsetsockopt(s, level, optname, pointer(optval), optlen); end; function GetSockOpt(s: TSocket; level, optname: Integer; optval: Tmemory; var optlen: Integer): Integer; begin Result := fpgetsockopt(s, level, optname, pointer(optval), @optlen); end; function ntohs(netshort: word): word; begin Result := sockets.ntohs(NetShort); end; function ntohl(netlong: longword): longword; begin Result := sockets.ntohl(NetLong); end; function Listen(s: TSocket; backlog: Integer): Integer; begin if fpListen(s, backlog) = 0 then Result := 0 else Result := SOCKET_ERROR; end; function IoctlSocket(s: TSocket; cmd: DWORD; var arg: integer): Integer; begin Result := fpIoctl(s, cmd, @arg); end; function htons(hostshort: word): word; begin Result := sockets.htons(Hostshort); end; function htonl(hostlong: longword): longword; begin Result := sockets.htonl(HostLong); end; function CloseSocket(s: TSocket): Integer; begin Result := sockets.CloseSocket(s); end; function Socket(af, Struc, Protocol: Integer): TSocket; begin Result := fpSocket(af, struc, protocol); end; function Select(nfds: Integer; readfds, writefds, exceptfds: PFDSet; timeout: PTimeVal): Longint; begin Result := fpSelect(nfds, readfds, writefds, exceptfds, timeout); end; {=============================================================================} function IsNewApi(Family: integer): Boolean; begin Result := SockEnhancedApi; if not Result then Result := (Family = AF_INET6) and SockWship6Api; end; function SetVarSin(var Sin: TVarSin; IP, Port: string; Family, SockProtocol, SockType: integer; PreferIP4: Boolean): integer; var TwoPass: boolean; f1, f2: integer; function GetAddr(f:integer): integer; var a4: array [1..1] of in_addr; a6: array [1..1] of Tin6_addr; he: THostEntry; begin Result := WSAEPROTONOSUPPORT; case f of AF_INET: begin if IP = cAnyHost then begin Sin.sin_family := AF_INET; Result := 0; end else begin if lowercase(IP) = cLocalHostStr then a4[1].s_addr := htonl(INADDR_LOOPBACK) else begin a4[1].s_addr := 0; Result := WSAHOST_NOT_FOUND; a4[1] := StrTonetAddr(IP); if a4[1].s_addr = INADDR_ANY then if GetHostByName(ip, he) then a4[1]:=HostToNet(he.Addr) else Resolvename(ip, a4); end; if a4[1].s_addr <> INADDR_ANY then begin Sin.sin_family := AF_INET; sin.sin_addr := a4[1]; Result := 0; end; end; end; AF_INET6: begin if IP = c6AnyHost then begin Sin.sin_family := AF_INET6; Result := 0; end else begin if lowercase(IP) = cLocalHostStr then SET_LOOPBACK_ADDR6(@a6[1]) else begin Result := WSAHOST_NOT_FOUND; SET_IN6_IF_ADDR_ANY(@a6[1]); a6[1] := StrTonetAddr6(IP); if IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then Resolvename6(ip, a6); end; if not IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then begin Sin.sin_family := AF_INET6; sin.sin6_addr := a6[1]; Result := 0; end; end; end; end; end; begin Result := 0; FillChar(Sin, Sizeof(Sin), 0); Sin.sin_port := Resolveport(port, family, SockProtocol, SockType); TwoPass := False; if Family = AF_UNSPEC then begin if PreferIP4 then begin f1 := AF_INET; f2 := AF_INET6; TwoPass := True; end else begin f2 := AF_INET; f1 := AF_INET6; TwoPass := True; end; end else f1 := Family; Result := GetAddr(f1); if Result <> 0 then if TwoPass then Result := GetAddr(f2); end; function GetSinIP(Sin: TVarSin): string; begin Result := ''; case sin.AddressFamily of AF_INET: begin result := NetAddrToStr(sin.sin_addr); end; AF_INET6: begin result := NetAddrToStr6(sin.sin6_addr); end; end; end; function GetSinPort(Sin: TVarSin): Integer; begin if (Sin.sin_family = AF_INET6) then Result := synsock.ntohs(Sin.sin6_port) else Result := synsock.ntohs(Sin.sin_port); end; procedure ResolveNameToIP(Name: string; Family, SockProtocol, SockType: integer; const IPList: TStrings); var x, n: integer; a4: array [1..255] of in_addr; a6: array [1..255] of Tin6_addr; he: THostEntry; begin IPList.Clear; if (family = AF_INET) or (family = AF_UNSPEC) then begin if lowercase(name) = cLocalHostStr then IpList.Add(cLocalHost) else begin a4[1] := StrTonetAddr(name); if a4[1].s_addr = INADDR_ANY then if GetHostByName(name, he) then begin a4[1]:=HostToNet(he.Addr); x := 1; end else x := Resolvename(name, a4) else x := 1; for n := 1 to x do IpList.Add(netaddrToStr(a4[n])); end; end; if (family = AF_INET6) or (family = AF_UNSPEC) then begin if lowercase(name) = cLocalHostStr then IpList.Add(c6LocalHost) else begin a6[1] := StrTonetAddr6(name); if IN6_IS_ADDR_UNSPECIFIED(@a6[1]) then x := Resolvename6(name, a6) else x := 1; for n := 1 to x do IpList.Add(netaddrToStr6(a6[n])); end; end; if IPList.Count = 0 then IPList.Add(cLocalHost); end; function ResolvePort(Port: string; Family, SockProtocol, SockType: integer): Word; var ProtoEnt: TProtocolEntry; ServEnt: TServiceEntry; begin Result := synsock.htons(StrToIntDef(Port, 0)); if Result = 0 then begin ProtoEnt.Name := ''; GetProtocolByNumber(SockProtocol, ProtoEnt); ServEnt.port := 0; GetServiceByName(Port, ProtoEnt.Name, ServEnt); Result := ServEnt.port; end; end; function ResolveIPToName(IP: string; Family, SockProtocol, SockType: integer): string; var n: integer; a4: array [1..1] of in_addr; a6: array [1..1] of Tin6_addr; a: array [1..1] of string; begin Result := IP; a4[1] := StrToNetAddr(IP); if a4[1].s_addr <> INADDR_ANY then begin //why ResolveAddress need address in HOST order? :-O n := ResolveAddress(nettohost(a4[1]), a); if n > 0 then Result := a[1]; end else begin a6[1] := StrToNetAddr6(IP); n := ResolveAddress6(a6[1], a); if n > 0 then Result := a[1]; end; end; {=============================================================================} function InitSocketInterface(stack: string): Boolean; begin SockEnhancedApi := False; SockWship6Api := False; // Libc.Signal(Libc.SIGPIPE, TSignalHandler(Libc.SIG_IGN)); Result := True; end; function DestroySocketInterface: Boolean; begin Result := True; end; initialization begin SynSockCS := SyncObjs.TCriticalSection.Create; SET_IN6_IF_ADDR_ANY (@in6addr_any); SET_LOOPBACK_ADDR6 (@in6addr_loopback); end; finalization begin SynSockCS.Free; end; {$ENDIF} doublecmd-0.7.1/plugins/wfx/ftp/synapse/blcksock.pas0000644000175000001440000037554612560221450021576 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 009.009.001 | |==============================================================================| | Content: Library base | |==============================================================================| | Copyright (c)1999-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)1999-2013. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} { Special thanks to Gregor Ibic (Intelicom d.o.o., http://www.intelicom.si) for good inspiration about SSL programming. } {$DEFINE ONCEWINSOCK} {Note about define ONCEWINSOCK: If you remove this compiler directive, then socket interface is loaded and initialized on constructor of TBlockSocket class for each socket separately. Socket interface is used only if your need it. If you leave this directive here, then socket interface is loaded and initialized only once at start of your program! It boost performace on high count of created and destroyed sockets. It eliminate possible small resource leak on Windows systems too. } //{$DEFINE RAISEEXCEPT} {When you enable this define, then is Raiseexcept property is on by default } {:@abstract(Synapse's library core) Core with implementation basic socket classes. } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} {$ENDIF} {$Q-} {$H+} {$M+} {$TYPEDADDRESS OFF} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit blcksock; interface uses SysUtils, Classes, synafpc, synsock, synautil, synacode, synaip {$IFDEF CIL} ,System.Net ,System.Net.Sockets ,System.Text {$ENDIF} ; const SynapseRelease = '40'; cLocalhost = '127.0.0.1'; cAnyHost = '0.0.0.0'; cBroadcast = '255.255.255.255'; c6Localhost = '::1'; c6AnyHost = '::0'; c6Broadcast = 'ffff::1'; cAnyPort = '0'; CR = #$0d; LF = #$0a; CRLF = CR + LF; c64k = 65536; type {:@abstract(Exception clas used by Synapse) When you enable generating of exceptions, this exception is raised by Synapse's units.} ESynapseError = class(Exception) private FErrorCode: Integer; FErrorMessage: string; published {:Code of error. Value depending on used operating system} property ErrorCode: Integer read FErrorCode Write FErrorCode; {:Human readable description of error.} property ErrorMessage: string read FErrorMessage Write FErrorMessage; end; {:Types of OnStatus events} THookSocketReason = ( {:Resolving is begin. Resolved IP and port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_ResolvingBegin, {:Resolving is done. Resolved IP and port is in parameter in format like: 'localhost.somewhere.com:25'. It is always same as in HR_ResolvingBegin!} HR_ResolvingEnd, {:Socket created by CreateSocket method. It reporting Family of created socket too!} HR_SocketCreate, {:Socket closed by CloseSocket method.} HR_SocketClose, {:Socket binded to IP and Port. Binded IP and Port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_Bind, {:Socket connected to IP and Port. Connected IP and Port is in parameter in format like: 'localhost.somewhere.com:25'.} HR_Connect, {:Called when CanRead method is used with @True result.} HR_CanRead, {:Called when CanWrite method is used with @True result.} HR_CanWrite, {:Socket is swithed to Listen mode. (TCP socket only)} HR_Listen, {:Socket Accepting client connection. (TCP socket only)} HR_Accept, {:report count of bytes readed from socket. Number is in parameter string. If you need is in integer, you must use StrToInt function!} HR_ReadCount, {:report count of bytes writed to socket. Number is in parameter string. If you need is in integer, you must use StrToInt function!} HR_WriteCount, {:If is limiting of bandwidth on, then this reason is called when sending or receiving is stopped for satisfy bandwidth limit. Parameter is count of waiting milliseconds.} HR_Wait, {:report situation where communication error occured. When raiseexcept is @true, then exception is called after this Hook reason.} HR_Error ); {:Procedural type for OnStatus event. Sender is calling TBlockSocket object, Reason is one of set Status events and value is optional data.} THookSocketStatus = procedure(Sender: TObject; Reason: THookSocketReason; const Value: String) of object; {:This procedural type is used for DataFilter hooks.} THookDataFilter = procedure(Sender: TObject; var Value: AnsiString) of object; {:This procedural type is used for hook OnCreateSocket. By this hook you can insert your code after initialisation of socket. (you can set special socket options, etc.)} THookCreateSocket = procedure(Sender: TObject) of object; {:This procedural type is used for monitoring of communication.} THookMonitor = procedure(Sender: TObject; Writing: Boolean; const Buffer: TMemory; Len: Integer) of object; {:This procedural type is used for hook OnAfterConnect. By this hook you can insert your code after TCP socket has been sucessfully connected.} THookAfterConnect = procedure(Sender: TObject) of object; {:This procedural type is used for hook OnVerifyCert. By this hook you can insert your additional certificate verification code. Usefull to verify server CN against URL. } THookVerifyCert = function(Sender: TObject):boolean of object; {:This procedural type is used for hook OnHeartbeat. By this hook you can call your code repeately during long socket operations. You must enable heartbeats by @Link(HeartbeatRate) property!} THookHeartbeat = procedure(Sender: TObject) of object; {:Specify family of socket.} TSocketFamily = ( {:Default mode. Socket family is defined by target address for connection. It allows instant access to IPv4 and IPv6 nodes. When you need IPv6 address as destination, then is used IPv6 mode. othervise is used IPv4 mode. However this mode not working properly with preliminary IPv6 supports!} SF_Any, {:Turn this class to pure IPv4 mode. This mode is totally compatible with previous Synapse releases.} SF_IP4, {:Turn to only IPv6 mode.} SF_IP6 ); {:specify possible values of SOCKS modes.} TSocksType = ( ST_Socks5, ST_Socks4 ); {:Specify requested SSL/TLS version for secure connection.} TSSLType = ( LT_all, LT_SSLv2, LT_SSLv3, LT_TLSv1, LT_TLSv1_1, LT_TLSv1_2, LT_SSHv2 ); {:Specify type of socket delayed option.} TSynaOptionType = ( SOT_Linger, SOT_RecvBuff, SOT_SendBuff, SOT_NonBlock, SOT_RecvTimeout, SOT_SendTimeout, SOT_Reuse, SOT_TTL, SOT_Broadcast, SOT_MulticastTTL, SOT_MulticastLoop ); {:@abstract(this object is used for remember delayed socket option set.)} TSynaOption = class(TObject) public Option: TSynaOptionType; Enabled: Boolean; Value: Integer; end; TCustomSSL = class; TSSLClass = class of TCustomSSL; {:@abstract(Basic IP object.) This is parent class for other class with protocol implementations. Do not use this class directly! Use @link(TICMPBlockSocket), @link(TRAWBlockSocket), @link(TTCPBlockSocket) or @link(TUDPBlockSocket) instead.} TBlockSocket = class(TObject) private FOnStatus: THookSocketStatus; FOnReadFilter: THookDataFilter; FOnCreateSocket: THookCreateSocket; FOnMonitor: THookMonitor; FOnHeartbeat: THookHeartbeat; FLocalSin: TVarSin; FRemoteSin: TVarSin; FTag: integer; FBuffer: AnsiString; FRaiseExcept: Boolean; FNonBlockMode: Boolean; FMaxLineLength: Integer; FMaxSendBandwidth: Integer; FNextSend: LongWord; FMaxRecvBandwidth: Integer; FNextRecv: LongWord; FConvertLineEnd: Boolean; FLastCR: Boolean; FLastLF: Boolean; FBinded: Boolean; FFamily: TSocketFamily; FFamilySave: TSocketFamily; FIP6used: Boolean; FPreferIP4: Boolean; FDelayedOptions: TList; FInterPacketTimeout: Boolean; {$IFNDEF CIL} FFDSet: TFDSet; {$ENDIF} FRecvCounter: Integer; FSendCounter: Integer; FSendMaxChunk: Integer; FStopFlag: Boolean; FNonblockSendTimeout: Integer; FHeartbeatRate: integer; FConnectionTimeout: integer; {$IFNDEF ONCEWINSOCK} FWsaDataOnce: TWSADATA; {$ENDIF} function GetSizeRecvBuffer: Integer; procedure SetSizeRecvBuffer(Size: Integer); function GetSizeSendBuffer: Integer; procedure SetSizeSendBuffer(Size: Integer); procedure SetNonBlockMode(Value: Boolean); procedure SetTTL(TTL: integer); function GetTTL:integer; procedure SetFamily(Value: TSocketFamily); virtual; procedure SetSocket(Value: TSocket); virtual; function GetWsaData: TWSAData; function FamilyToAF(f: TSocketFamily): TAddrFamily; protected FSocket: TSocket; FLastError: Integer; FLastErrorDesc: string; FOwner: TObject; procedure SetDelayedOption(const Value: TSynaOption); procedure DelayedOption(const Value: TSynaOption); procedure ProcessDelayedOptions; procedure InternalCreateSocket(Sin: TVarSin); procedure SetSin(var Sin: TVarSin; IP, Port: string); function GetSinIP(Sin: TVarSin): string; function GetSinPort(Sin: TVarSin): Integer; procedure DoStatus(Reason: THookSocketReason; const Value: string); procedure DoReadFilter(Buffer: TMemory; var Len: Integer); procedure DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); procedure DoCreateSocket; procedure DoHeartbeat; procedure LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); procedure SetBandwidth(Value: Integer); function TestStopFlag: Boolean; procedure InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); virtual; function InternalCanRead(Timeout: Integer): Boolean; virtual; public constructor Create; {:Create object and load all necessary socket library. What library is loaded is described by STUB parameter. If STUB is empty string, then is loaded default libraries.} constructor CreateAlternate(Stub: string); destructor Destroy; override; {:If @link(family) is not SF_Any, then create socket with type defined in @link(Family) property. If family is SF_Any, then do nothing! (socket is created automaticly when you know what type of socket you need to create. (i.e. inside @link(Connect) or @link(Bind) call.) When socket is created, then is aplyed all stored delayed socket options.} procedure CreateSocket; {:It create socket. Address resolving of Value tells what type of socket is created. If Value is resolved as IPv4 IP, then is created IPv4 socket. If value is resolved as IPv6 address, then is created IPv6 socket.} procedure CreateSocketByName(const Value: String); {:Destroy socket in use. This method is also automatically called from object destructor.} procedure CloseSocket; virtual; {:Abort any work on Socket and destroy them.} procedure AbortSocket; virtual; {:Connects socket to local IP address and PORT. IP address may be numeric or symbolic ('192.168.74.50', 'cosi.nekde.cz', 'ff08::1'). The same for PORT - it may be number or mnemonic port ('23', 'telnet'). If port value is '0', system chooses itself and conects unused port in the range 1024 to 4096 (this depending by operating system!). Structure LocalSin is filled after calling this method. Note: If you call this on non-created socket, then socket is created automaticly. Warning: when you call : Bind('0.0.0.0','0'); then is nothing done! In this case is used implicit system bind instead.} procedure Bind(IP, Port: string); {:Connects socket to remote IP address and PORT. The same rules as with @link(BIND) method are valid. The only exception is that PORT with 0 value will not be connected! Structures LocalSin and RemoteSin will be filled with valid values. When you call this on non-created socket, then socket is created automaticly. Type of created socket is by @link(Family) property. If is used SF_IP4, then is created socket for IPv4. If is used SF_IP6, then is created socket for IPv6. When you have family on SF_Any (default!), then type of created socket is determined by address resolving of destination address. (Not work properly on prilimitary winsock IPv6 support!)} procedure Connect(IP, Port: string); virtual; {:Sets socket to receive mode for new incoming connections. It is necessary to use @link(TBlockSocket.BIND) function call before this method to select receiving port!} procedure Listen; virtual; {:Waits until new incoming connection comes. After it comes a new socket is automatically created (socket handler is returned by this function as result).} function Accept: TSocket; virtual; {:Sends data of LENGTH from BUFFER address via connected socket. System automatically splits data to packets.} function SendBuffer(Buffer: Tmemory; Length: Integer): Integer; virtual; {:One data BYTE is sent via connected socket.} procedure SendByte(Data: Byte); virtual; {:Send data string via connected socket. Any terminator is not added! If you need send true string with CR-LF termination, you must add CR-LF characters to sended string! Because any termination is not added automaticly, you can use this function for sending any binary data in binary string.} procedure SendString(Data: AnsiString); virtual; {:Send integer as four bytes to socket.} procedure SendInteger(Data: integer); virtual; {:Send data as one block to socket. Each block begin with 4 bytes with length of data in block. This 4 bytes is added automaticly by this function.} procedure SendBlock(const Data: AnsiString); virtual; {:Send data from stream to socket.} procedure SendStreamRaw(const Stream: TStream); virtual; {:Send content of stream to socket. It using @link(SendBlock) method} procedure SendStream(const Stream: TStream); virtual; {:Send content of stream to socket. It using @link(SendBlock) method and this is compatible with streams in Indy library.} procedure SendStreamIndy(const Stream: TStream); virtual; {:Note: This is low-level receive function. You must be sure if data is waiting for read before call this function for avoid deadlock! Waits until allocated buffer is filled by received data. Returns number of data received, which equals to LENGTH value under normal operation. If it is not equal the communication channel is possibly broken. On stream oriented sockets if is received 0 bytes, it mean 'socket is closed!" On datagram socket is readed first waiting datagram.} function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions! Method waits until data is received. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. Methods serves for reading any size of data (i.e. one megabyte...). This method is preffered for reading from stream sockets (like TCP).} function RecvBufferEx(Buffer: Tmemory; Len: Integer; Timeout: Integer): Integer; virtual; {:Similar to @link(RecvBufferEx), but readed data is stored in binary string, not in memory buffer.} function RecvBufferStr(Len: Integer; Timeout: Integer): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Waits until one data byte is received which is also returned as function result. If no data is received within TIMEOUT (in milliseconds)period, @link(LastError) is set to WSAETIMEDOUT and result have value 0.} function RecvByte(Timeout: Integer): Byte; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Waits until one four bytes are received and return it as one Ineger Value. If no data is received within TIMEOUT (in milliseconds)period, @link(LastError) is set to WSAETIMEDOUT and result have value 0.} function RecvInteger(Timeout: Integer): Integer; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method waits until data string is received. This string is terminated by CR-LF characters. The resulting string is returned without this termination (CR-LF)! If @link(ConvertLineEnd) is used, then CR-LF sequence may not be exactly CR-LF. See @link(ConvertLineEnd) description. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. You may also specify maximum length of reading data by @link(MaxLineLength) property.} function RecvString(Timeout: Integer): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method waits until data string is received. This string is terminated by Terminator string. The resulting string is returned without this termination. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. You may also specify maximum length of reading data by @link(MaxLineLength) property.} function RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; virtual; {:Note: This is high-level receive function. It using internal @link(LineBuffer) and you can combine this function freely with other high-level functions. Method reads all data waiting for read. If no data is received within TIMEOUT (in milliseconds) period, @link(LastError) is set to WSAETIMEDOUT. Methods serves for reading unknown size of data. Because before call this function you don't know size of received data, returned data is stored in dynamic size binary string. This method is preffered for reading from stream sockets (like TCP). It is very goot for receiving datagrams too! (UDP protocol)} function RecvPacket(Timeout: Integer): AnsiString; virtual; {:Read one block of data from socket. Each block begin with 4 bytes with length of data in block. This function read first 4 bytes for get lenght, then it wait for reported count of bytes.} function RecvBlock(Timeout: Integer): AnsiString; virtual; {:Read all data from socket to stream until socket is closed (or any error occured.)} procedure RecvStreamRaw(const Stream: TStream; Timeout: Integer); virtual; {:Read requested count of bytes from socket to stream.} procedure RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: Integer); {:Receive data to stream. It using @link(RecvBlock) method.} procedure RecvStream(const Stream: TStream; Timeout: Integer); virtual; {:Receive data to stream. This function is compatible with similar function in Indy library. It using @link(RecvBlock) method.} procedure RecvStreamIndy(const Stream: TStream; Timeout: Integer); virtual; {:Same as @link(RecvBuffer), but readed data stays in system input buffer. Warning: this function not respect data in @link(LineBuffer)! Is not recommended to use this function!} function PeekBuffer(Buffer: TMemory; Length: Integer): Integer; virtual; {:Same as @link(RecvByte), but readed data stays in input system buffer. Warning: this function not respect data in @link(LineBuffer)! Is not recommended to use this function!} function PeekByte(Timeout: Integer): Byte; virtual; {:On stream sockets it returns number of received bytes waiting for picking. 0 is returned when there is no such data. On datagram socket it returns length of the first waiting datagram. Returns 0 if no datagram is waiting.} function WaitingData: Integer; virtual; {:Same as @link(WaitingData), but if exists some of data in @link(Linebuffer), return their length instead.} function WaitingDataEx: Integer; {:Clear all waiting data for read from buffers.} procedure Purge; {:Sets linger. Enabled linger means that the system waits another LINGER (in milliseconds) time for delivery of sent data. This function is only for stream type of socket! (TCP)} procedure SetLinger(Enable: Boolean; Linger: Integer); {:Actualize values in @link(LocalSin).} procedure GetSinLocal; {:Actualize values in @link(RemoteSin).} procedure GetSinRemote; {:Actualize values in @link(LocalSin) and @link(RemoteSin).} procedure GetSins; {:Reset @link(LastError) and @link(LastErrorDesc) to non-error state.} procedure ResetLastError; {:If you "manually" call Socket API functions, forward their return code as parameter to this function, which evaluates it, eventually calls GetLastError and found error code returns and stores to @link(LastError).} function SockCheck(SockResult: Integer): Integer; virtual; {:If @link(LastError) contains some error code and @link(RaiseExcept) property is @true, raise adequate exception.} procedure ExceptCheck; {:Returns local computer name as numerical or symbolic value. It try get fully qualified domain name. Name is returned in the format acceptable by functions demanding IP as input parameter.} function LocalName: string; {:Try resolve name to all possible IP address. i.e. If you pass as name result of @link(LocalName) method, you get all IP addresses used by local system.} procedure ResolveNameToIP(Name: string; const IPList: TStrings); {:Try resolve name to primary IP address. i.e. If you pass as name result of @link(LocalName) method, you get primary IP addresses used by local system.} function ResolveName(Name: string): string; {:Try resolve IP to their primary domain name. If IP not have domain name, then is returned original IP.} function ResolveIPToName(IP: string): string; {:Try resolve symbolic port name to port number. (i.e. 'Echo' to 8)} function ResolvePort(Port: string): Word; {:Set information about remote side socket. It is good for seting remote side for sending UDP packet, etc.} procedure SetRemoteSin(IP, Port: string); {:Picks IP socket address from @link(LocalSin).} function GetLocalSinIP: string; virtual; {:Picks IP socket address from @link(RemoteSin).} function GetRemoteSinIP: string; virtual; {:Picks socket PORT number from @link(LocalSin).} function GetLocalSinPort: Integer; virtual; {:Picks socket PORT number from @link(RemoteSin).} function GetRemoteSinPort: Integer; virtual; {:Return @TRUE, if you can read any data from socket or is incoming connection on TCP based socket. Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for read data maybe forever. This function is need only on special cases, when you need use @link(RecvBuffer) function directly! read functioms what have timeout as calling parameter, calling this function internally.} function CanRead(Timeout: Integer): Boolean; virtual; {:Same as @link(CanRead), but additionally return @TRUE if is some data in @link(LineBuffer).} function CanReadEx(Timeout: Integer): Boolean; virtual; {:Return @TRUE, if you can to socket write any data (not full sending buffer). Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for write data maybe forever. This function is need only on special cases!} function CanWrite(Timeout: Integer): Boolean; virtual; {:Same as @link(SendBuffer), but send datagram to address from @link(RemoteSin). Usefull for sending reply to datagram received by function @link(RecvBufferFrom).} function SendBufferTo(Buffer: TMemory; Length: Integer): Integer; virtual; {:Note: This is low-lever receive function. You must be sure if data is waiting for read before call this function for avoid deadlock! Receives first waiting datagram to allocated buffer. If there is no waiting one, then waits until one comes. Returns length of datagram stored in BUFFER. If length exceeds buffer datagram is truncated. After this @link(RemoteSin) structure contains information about sender of UDP packet.} function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; virtual; {$IFNDEF CIL} {:This function is for check for incoming data on set of sockets. Whitch sockets is checked is decribed by SocketList Tlist with TBlockSocket objects. TList may have maximal number of objects defined by FD_SETSIZE constant. Return @TRUE, if you can from some socket read any data or is incoming connection on TCP based socket. Status is tested for time Timeout (in milliseconds). If value in Timeout is 0, status is only tested and continue. If value in Timeout is -1, run is breaked and waiting for read data maybe forever. If is returned @TRUE, CanReadList TList is filled by all TBlockSocket objects what waiting for read.} function GroupCanRead(const SocketList: TList; Timeout: Integer; const CanReadList: TList): Boolean; {$ENDIF} {:By this method you may turn address reuse mode for local @link(bind). It is good specially for UDP protocol. Using this with TCP protocol is hazardous!} procedure EnableReuse(Value: Boolean); {:Try set timeout for all sending and receiving operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetTimeout(Timeout: Integer); {:Try set timeout for all sending operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetSendTimeout(Timeout: Integer); {:Try set timeout for all receiving operations, if socket provider can do it. (It not supported by all socket providers!)} procedure SetRecvTimeout(Timeout: Integer); {:Return value of socket type.} function GetSocketType: integer; Virtual; {:Return value of protocol type for socket creation.} function GetSocketProtocol: integer; Virtual; {:WSA structure with information about socket provider. On non-windows platforms this structure is simulated!} property WSAData: TWSADATA read GetWsaData; {:FDset structure prepared for usage with this socket.} property FDset: TFDSet read FFDset; {:Structure describing local socket side.} property LocalSin: TVarSin read FLocalSin write FLocalSin; {:Structure describing remote socket side.} property RemoteSin: TVarSin read FRemoteSin write FRemoteSin; {:Socket handler. Suitable for "manual" calls to socket API or manual connection of socket to a previously created socket (i.e by Accept method on TCP socket)} property Socket: TSocket read FSocket write SetSocket; {:Last socket operation error code. Error codes are described in socket documentation. Human readable error description is stored in @link(LastErrorDesc) property.} property LastError: Integer read FLastError; {:Human readable error description of @link(LastError) code.} property LastErrorDesc: string read FLastErrorDesc; {:Buffer used by all high-level receiving functions. This buffer is used for optimized reading of data from socket. In normal cases you not need access to this buffer directly!} property LineBuffer: AnsiString read FBuffer write FBuffer; {:Size of Winsock receive buffer. If it is not supported by socket provider, it return as size one kilobyte.} property SizeRecvBuffer: Integer read GetSizeRecvBuffer write SetSizeRecvBuffer; {:Size of Winsock send buffer. If it is not supported by socket provider, it return as size one kilobyte.} property SizeSendBuffer: Integer read GetSizeSendBuffer write SetSizeSendBuffer; {:If @True, turn class to non-blocking mode. Not all functions are working properly in this mode, you must know exactly what you are doing! However when you have big experience with non-blocking programming, then you can optimise your program by non-block mode!} property NonBlockMode: Boolean read FNonBlockMode Write SetNonBlockMode; {:Set Time-to-live value. (if system supporting it!)} property TTL: Integer read GetTTL Write SetTTL; {:If is @true, then class in in IPv6 mode.} property IP6used: Boolean read FIP6used; {:Return count of received bytes on this socket from begin of current connection.} property RecvCounter: Integer read FRecvCounter; {:Return count of sended bytes on this socket from begin of current connection.} property SendCounter: Integer read FSendCounter; published {:Return descriptive string for given error code. This is class function. You may call it without created object!} class function GetErrorDesc(ErrorCode: Integer): string; {:Return descriptive string for @link(LastError).} function GetErrorDescEx: string; virtual; {:this value is for free use.} property Tag: Integer read FTag write FTag; {:If @true, winsock errors raises exception. Otherwise is setted @link(LastError) value only and you must check it from your program! Default value is @false.} property RaiseExcept: Boolean read FRaiseExcept write FRaiseExcept; {:Define maximum length in bytes of @link(LineBuffer) for high-level receiving functions. If this functions try to read more data then this limit, error is returned! If value is 0 (default), no limitation is used. This is very good protection for stupid attacks to your server by sending lot of data without proper terminator... until all your memory is allocated by LineBuffer! Note: This maximum length is checked only in functions, what read unknown number of bytes! (like @link(RecvString) or @link(RecvTerminated))} property MaxLineLength: Integer read FMaxLineLength Write FMaxLineLength; {:Define maximal bandwidth for all sending operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxSendBandwidth: Integer read FMaxSendBandwidth Write FMaxSendBandwidth; {:Define maximal bandwidth for all receiving operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxRecvBandwidth: Integer read FMaxRecvBandwidth Write FMaxRecvBandwidth; {:Define maximal bandwidth for all sending and receiving operations in bytes per second. If value is 0 (default), bandwidth limitation is not used.} property MaxBandwidth: Integer Write SetBandwidth; {:Do a conversion of non-standard line terminators to CRLF. (Off by default) If @True, then terminators like sigle CR, single LF or LFCR are converted to CRLF internally. This have effect only in @link(RecvString) method!} property ConvertLineEnd: Boolean read FConvertLineEnd Write FConvertLineEnd; {:Specified Family of this socket. When you are using Windows preliminary support for IPv6, then I recommend to set this property!} property Family: TSocketFamily read FFamily Write SetFamily; {:When resolving of domain name return both IPv4 and IPv6 addresses, then specify if is used IPv4 (dafault - @true) or IPv6.} property PreferIP4: Boolean read FPreferIP4 Write FPreferIP4; {:By default (@true) is all timeouts used as timeout between two packets in reading operations. If you set this to @false, then Timeouts is for overall reading operation!} property InterPacketTimeout: Boolean read FInterPacketTimeout Write FInterPacketTimeout; {:All sended datas was splitted by this value.} property SendMaxChunk: Integer read FSendMaxChunk Write FSendMaxChunk; {:By setting this property to @true you can stop any communication. You can use this property for soft abort of communication.} property StopFlag: Boolean read FStopFlag Write FStopFlag; {:Timeout for data sending by non-blocking socket mode.} property NonblockSendTimeout: Integer read FNonblockSendTimeout Write FNonblockSendTimeout; {:Timeout for @link(Connect) call. Default value 0 means default system timeout. Non-zero value means timeout in millisecond.} property ConnectionTimeout: Integer read FConnectionTimeout write FConnectionTimeout; {:This event is called by various reasons. It is good for monitoring socket, create gauges for data transfers, etc.} property OnStatus: THookSocketStatus read FOnStatus write FOnStatus; {:this event is good for some internal thinks about filtering readed datas. It is used by telnet client by example.} property OnReadFilter: THookDataFilter read FOnReadFilter write FOnReadFilter; {:This event is called after real socket creation for setting special socket options, because you not know when socket is created. (it is depended on Ipv4, IPv6 or automatic mode)} property OnCreateSocket: THookCreateSocket read FOnCreateSocket write FOnCreateSocket; {:This event is good for monitoring content of readed or writed datas.} property OnMonitor: THookMonitor read FOnMonitor write FOnMonitor; {:This event is good for calling your code during long socket operations. (Example, for refresing UI if class in not called within the thread.) Rate of heartbeats can be modified by @link(HeartbeatRate) property.} property OnHeartbeat: THookHeartbeat read FOnHeartbeat write FOnHeartbeat; {:Specify typical rate of @link(OnHeartbeat) event and @link(StopFlag) testing. Default value 0 disabling heartbeats! Value is in milliseconds. Real rate can be higher or smaller then this value, because it depending on real socket operations too! Note: Each heartbeat slowing socket processing.} property HeartbeatRate: integer read FHeartbeatRate Write FHeartbeatRate; {:What class own this socket? Used by protocol implementation classes.} property Owner: TObject read FOwner Write FOwner; end; {:@abstract(Support for SOCKS4 and SOCKS5 proxy) Layer with definition all necessary properties and functions for implementation SOCKS proxy client. Do not use this class directly.} TSocksBlockSocket = class(TBlockSocket) protected FSocksIP: string; FSocksPort: string; FSocksTimeout: integer; FSocksUsername: string; FSocksPassword: string; FUsingSocks: Boolean; FSocksResolver: Boolean; FSocksLastError: integer; FSocksResponseIP: string; FSocksResponsePort: string; FSocksLocalIP: string; FSocksLocalPort: string; FSocksRemoteIP: string; FSocksRemotePort: string; FBypassFlag: Boolean; FSocksType: TSocksType; function SocksCode(IP, Port: string): Ansistring; function SocksDecode(Value: Ansistring): integer; public constructor Create; {:Open connection to SOCKS proxy and if @link(SocksUsername) is set, do authorisation to proxy. This is needed only in special cases! (it is called internally!)} function SocksOpen: Boolean; {:Send specified request to SOCKS proxy. This is needed only in special cases! (it is called internally!)} function SocksRequest(Cmd: Byte; const IP, Port: string): Boolean; {:Receive response to previosly sended request. This is needed only in special cases! (it is called internally!)} function SocksResponse: Boolean; {:Is @True when class is using SOCKS proxy.} property UsingSocks: Boolean read FUsingSocks; {:If SOCKS proxy failed, here is error code returned from SOCKS proxy.} property SocksLastError: integer read FSocksLastError; published {:Address of SOCKS server. If value is empty string, SOCKS support is disabled. Assingning any value to this property enable SOCKS mode. Warning: You cannot combine this mode with HTTP-tunneling mode!} property SocksIP: string read FSocksIP write FSocksIP; {:Port of SOCKS server. Default value is '1080'.} property SocksPort: string read FSocksPort write FSocksPort; {:If you need authorisation on SOCKS server, set username here.} property SocksUsername: string read FSocksUsername write FSocksUsername; {:If you need authorisation on SOCKS server, set password here.} property SocksPassword: string read FSocksPassword write FSocksPassword; {:Specify timeout for communicatin with SOCKS server. Default is one minute.} property SocksTimeout: integer read FSocksTimeout write FSocksTimeout; {:If @True, all symbolic names of target hosts is not translated to IP's locally, but resolving is by SOCKS proxy. Default is @True.} property SocksResolver: Boolean read FSocksResolver write FSocksResolver; {:Specify SOCKS type. By default is used SOCKS5, but you can use SOCKS4 too. When you select SOCKS4, then if @link(SOCKSResolver) is enabled, then is used SOCKS4a. Othervise is used pure SOCKS4.} property SocksType: TSocksType read FSocksType write FSocksType; end; {:@abstract(Implementation of TCP socket.) Supported features: IPv4, IPv6, SSL/TLS or SSH (depending on used plugin), SOCKS5 proxy (outgoing connections and limited incomming), SOCKS4/4a proxy (outgoing connections and limited incomming), TCP through HTTP proxy tunnel.} TTCPBlockSocket = class(TSocksBlockSocket) protected FOnAfterConnect: THookAfterConnect; FSSL: TCustomSSL; FHTTPTunnelIP: string; FHTTPTunnelPort: string; FHTTPTunnel: Boolean; FHTTPTunnelRemoteIP: string; FHTTPTunnelRemotePort: string; FHTTPTunnelUser: string; FHTTPTunnelPass: string; FHTTPTunnelTimeout: integer; procedure SocksDoConnect(IP, Port: string); procedure HTTPTunnelDoConnect(IP, Port: string); procedure DoAfterConnect; public {:Create TCP socket class with default plugin for SSL/TSL/SSH implementation (see @link(SSLImplementation))} constructor Create; {:Create TCP socket class with desired plugin for SSL/TSL/SSH implementation} constructor CreateWithSSL(SSLPlugin: TSSLClass); destructor Destroy; override; {:See @link(TBlockSocket.CloseSocket)} procedure CloseSocket; override; {:See @link(TBlockSocket.WaitingData)} function WaitingData: Integer; override; {:Sets socket to receive mode for new incoming connections. It is necessary to use @link(TBlockSocket.BIND) function call before this method to select receiving port! If you use SOCKS, activate incoming TCP connection by this proxy. (By BIND method of SOCKS.)} procedure Listen; override; {:Waits until new incoming connection comes. After it comes a new socket is automatically created (socket handler is returned by this function as result). If you use SOCKS, new socket is not created! In this case is used same socket as socket for listening! So, you can accept only one connection in SOCKS mode.} function Accept: TSocket; override; {:Connects socket to remote IP address and PORT. The same rules as with @link(TBlockSocket.BIND) method are valid. The only exception is that PORT with 0 value will not be connected. After call to this method a communication channel between local and remote socket is created. Local socket is assigned automatically if not controlled by previous call to @link(TBlockSocket.BIND) method. Structures @link(TBlockSocket.LocalSin) and @link(TBlockSocket.RemoteSin) will be filled with valid values. If you use SOCKS, activate outgoing TCP connection by SOCKS proxy specified in @link(TSocksBlockSocket.SocksIP). (By CONNECT method of SOCKS.) If you use HTTP-tunnel mode, activate outgoing TCP connection by HTTP tunnel specified in @link(HTTPTunnelIP). (By CONNECT method of HTTP protocol.) Note: If you call this on non-created socket, then socket is created automaticly.} procedure Connect(IP, Port: string); override; {:If you need upgrade existing TCP connection to SSL/TLS (or SSH2, if plugin allows it) mode, then call this method. This method switch this class to SSL mode and do SSL/TSL handshake.} procedure SSLDoConnect; {:By this method you can downgrade existing SSL/TLS connection to normal TCP connection.} procedure SSLDoShutdown; {:If you need use this component as SSL/TLS TCP server, then after accepting of inbound connection you need start SSL/TLS session by this method. Before call this function, you must have assigned all neeeded certificates and keys!} function SSLAcceptConnection: Boolean; {:See @link(TBlockSocket.GetLocalSinIP)} function GetLocalSinIP: string; override; {:See @link(TBlockSocket.GetRemoteSinIP)} function GetRemoteSinIP: string; override; {:See @link(TBlockSocket.GetLocalSinPort)} function GetLocalSinPort: Integer; override; {:See @link(TBlockSocket.GetRemoteSinPort)} function GetRemoteSinPort: Integer; override; {:See @link(TBlockSocket.SendBuffer)} function SendBuffer(Buffer: TMemory; Length: Integer): Integer; override; {:See @link(TBlockSocket.RecvBuffer)} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:Return value of socket type. For TCP return SOCK_STREAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For TCP return IPPROTO_TCP.} function GetSocketProtocol: integer; override; {:Class implementing SSL/TLS support. It is allways some descendant of @link(TCustomSSL) class. When programmer not select some SSL plugin class, then is used @link(TSSLNone)} property SSL: TCustomSSL read FSSL; {:@True if is used HTTP tunnel mode.} property HTTPTunnel: Boolean read FHTTPTunnel; published {:Return descriptive string for @link(LastError). On case of error in SSL/TLS subsystem, it returns right error description.} function GetErrorDescEx: string; override; {:Specify IP address of HTTP proxy. Assingning non-empty value to this property enable HTTP-tunnel mode. This mode is for tunnelling any outgoing TCP connection through HTTP proxy server. (If policy on HTTP proxy server allow this!) Warning: You cannot combine this mode with SOCK5 mode!} property HTTPTunnelIP: string read FHTTPTunnelIP Write FHTTPTunnelIP; {:Specify port of HTTP proxy for HTTP-tunneling.} property HTTPTunnelPort: string read FHTTPTunnelPort Write FHTTPTunnelPort; {:Specify authorisation username for access to HTTP proxy in HTTP-tunnel mode. If you not need authorisation, then let this property empty.} property HTTPTunnelUser: string read FHTTPTunnelUser Write FHTTPTunnelUser; {:Specify authorisation password for access to HTTP proxy in HTTP-tunnel mode.} property HTTPTunnelPass: string read FHTTPTunnelPass Write FHTTPTunnelPass; {:Specify timeout for communication with HTTP proxy in HTTPtunnel mode.} property HTTPTunnelTimeout: integer read FHTTPTunnelTimeout Write FHTTPTunnelTimeout; {:This event is called after sucessful TCP socket connection.} property OnAfterConnect: THookAfterConnect read FOnAfterConnect write FOnAfterConnect; end; {:@abstract(Datagram based communication) This class implementing datagram based communication instead default stream based communication style.} TDgramBlockSocket = class(TSocksBlockSocket) public {:Fill @link(TBlockSocket.RemoteSin) structure. This address is used for sending data.} procedure Connect(IP, Port: string); override; {:Silently redirected to @link(TBlockSocket.SendBufferTo).} function SendBuffer(Buffer: TMemory; Length: Integer): Integer; override; {:Silently redirected to @link(TBlockSocket.RecvBufferFrom).} function RecvBuffer(Buffer: TMemory; Length: Integer): Integer; override; end; {:@abstract(Implementation of UDP socket.) NOTE: in this class is all receiving redirected to RecvBufferFrom. You can use for reading any receive function. Preffered is RecvPacket! Similary all sending is redirected to SendbufferTo. You can use for sending UDP packet any sending function, like SendString. Supported features: IPv4, IPv6, unicasts, broadcasts, multicasts, SOCKS5 proxy (only unicasts! Outgoing and incomming.)} TUDPBlockSocket = class(TDgramBlockSocket) protected FSocksControlSock: TTCPBlockSocket; function UdpAssociation: Boolean; procedure SetMulticastTTL(TTL: integer); function GetMulticastTTL:integer; public destructor Destroy; override; {:Enable or disable sending of broadcasts. If seting OK, result is @true. This method is not supported in SOCKS5 mode! IPv6 does not support broadcasts! In this case you must use Multicasts instead.} procedure EnableBroadcast(Value: Boolean); {:See @link(TBlockSocket.SendBufferTo)} function SendBufferTo(Buffer: TMemory; Length: Integer): Integer; override; {:See @link(TBlockSocket.RecvBufferFrom)} function RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; override; {$IFNDEF CIL} {:Add this socket to given multicast group. You cannot use Multicasts in SOCKS mode!} procedure AddMulticast(MCastIP:string); {:Remove this socket from given multicast group.} procedure DropMulticast(MCastIP:string); {$ENDIF} {:All sended multicast datagrams is loopbacked to your interface too. (you can read your sended datas.) You can disable this feature by this function. This function not working on some Windows systems!} procedure EnableMulticastLoop(Value: Boolean); {:Return value of socket type. For UDP return SOCK_DGRAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For UDP return IPPROTO_UDP.} function GetSocketProtocol: integer; override; {:Set Time-to-live value for multicasts packets. It define number of routers for transfer of datas. If you set this to 1 (dafault system value), then multicasts packet goes only to you local network. If you need transport multicast packet to worldwide, then increase this value, but be carefull, lot of routers on internet does not transport multicasts packets!} property MulticastTTL: Integer read GetMulticastTTL Write SetMulticastTTL; end; {:@abstract(Implementation of RAW ICMP socket.) For this object you must have rights for creating RAW sockets!} TICMPBlockSocket = class(TDgramBlockSocket) public {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For ICMP returns IPPROTO_ICMP or IPPROTO_ICMPV6} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of RAW socket.) For this object you must have rights for creating RAW sockets!} TRAWBlockSocket = class(TBlockSocket) public {:Return value of socket type. For RAW and ICMP return SOCK_RAW.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For RAW returns IPPROTO_RAW.} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of PGM-message socket.) Not all systems supports this protocol!} TPGMMessageBlockSocket = class(TBlockSocket) public {:Return value of socket type. For PGM-message return SOCK_RDM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For PGM-message returns IPPROTO_RM.} function GetSocketProtocol: integer; override; end; {:@abstract(Implementation of PGM-stream socket.) Not all systems supports this protocol!} TPGMStreamBlockSocket = class(TBlockSocket) public {:Return value of socket type. For PGM-stream return SOCK_STREAM.} function GetSocketType: integer; override; {:Return value of protocol type for socket creation. For PGM-stream returns IPPROTO_RM.} function GetSocketProtocol: integer; override; end; {:@abstract(Parent class for all SSL plugins.) This is abstract class defining interface for other SSL plugins. Instance of this class will be created for each @link(TTCPBlockSocket). Warning: not all methods and propertis can work in all existing SSL plugins! Please, read documentation of used SSL plugin.} TCustomSSL = class(TObject) private protected FOnVerifyCert: THookVerifyCert; FSocket: TTCPBlockSocket; FSSLEnabled: Boolean; FLastError: integer; FLastErrorDesc: string; FSSLType: TSSLType; FKeyPassword: string; FCiphers: string; FCertificateFile: string; FPrivateKeyFile: string; FCertificate: Ansistring; FPrivateKey: Ansistring; FPFX: Ansistring; FPFXfile: string; FCertCA: Ansistring; FCertCAFile: string; FTrustCertificate: Ansistring; FTrustCertificateFile: string; FVerifyCert: Boolean; FUsername: string; FPassword: string; FSSHChannelType: string; FSSHChannelArg1: string; FSSHChannelArg2: string; FCertComplianceLevel: integer; FSNIHost: string; procedure ReturnError; procedure SetCertCAFile(const Value: string); virtual; function DoVerifyCert:boolean; function CreateSelfSignedCert(Host: string): Boolean; virtual; public {: Create plugin class. it is called internally from @link(TTCPBlockSocket)} constructor Create(const Value: TTCPBlockSocket); virtual; {: Assign settings (certificates and configuration) from another SSL plugin class.} procedure Assign(const Value: TCustomSSL); virtual; {: return description of used plugin. It usually return name and version of used SSL library.} function LibVersion: String; virtual; {: return name of used plugin.} function LibName: String; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for start SSL connection.} function Connect: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for acept new SSL connection.} function Accept: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for hard shutdown of SSL connection. (for example, before socket is closed)} function Shutdown: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for soft shutdown of SSL connection. (for example, when you need to continue with unprotected connection.)} function BiShutdown: boolean; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for sending some datas by SSL connection.} function SendBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for receiving some datas by SSL connection.} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; virtual; {: Do not call this directly. It is used internally by @link(TTCPBlockSocket)! Here is needed code for getting count of datas what waiting for read. If SSL plugin not allows this, then it should return 0.} function WaitingData: Integer; virtual; {:Return string with identificator of SSL/TLS version of existing connection.} function GetSSLVersion: string; virtual; {:Return subject of remote SSL peer.} function GetPeerSubject: string; virtual; {:Return Serial number if remote X509 certificate.} function GetPeerSerialNo: integer; virtual; {:Return issuer certificate of remote SSL peer.} function GetPeerIssuer: string; virtual; {:Return peer name from remote side certificate. This is good for verify, if certificate is generated for remote side IP name.} function GetPeerName: string; virtual; {:Returns has of peer name from remote side certificate. This is good for fast remote side authentication.} function GetPeerNameHash: cardinal; virtual; {:Return fingerprint of remote SSL peer.} function GetPeerFingerprint: string; virtual; {:Return all detailed information about certificate from remote side of SSL/TLS connection. Result string can be multilined! Each plugin can return this informations in different format!} function GetCertInfo: string; virtual; {:Return currently used Cipher.} function GetCipherName: string; virtual; {:Return currently used number of bits in current Cipher algorythm.} function GetCipherBits: integer; virtual; {:Return number of bits in current Cipher algorythm.} function GetCipherAlgBits: integer; virtual; {:Return result value of verify remote side certificate. Look to OpenSSL documentation for possible values. For example 0 is successfuly verified certificate, or 18 is self-signed certificate.} function GetVerifyCert: integer; virtual; {: Resurn @true if SSL mode is enabled on existing cvonnection.} property SSLEnabled: Boolean read FSSLEnabled; {:Return error code of last SSL operation. 0 is OK.} property LastError: integer read FLastError; {:Return error description of last SSL operation.} property LastErrorDesc: string read FLastErrorDesc; published {:Here you can specify requested SSL/TLS mode. Default is autodetection, but on some servers autodetection not working properly. In this case you must specify requested SSL/TLS mode by your hand!} property SSLType: TSSLType read FSSLType write FSSLType; {:Password for decrypting of encoded certificate or key.} property KeyPassword: string read FKeyPassword write FKeyPassword; {:Username for possible credentials.} property Username: string read FUsername write FUsername; {:password for possible credentials.} property Password: string read FPassword write FPassword; {:By this property you can modify default set of SSL/TLS ciphers.} property Ciphers: string read FCiphers write FCiphers; {:Used for loading certificate from disk file. See to plugin documentation if this method is supported and how!} property CertificateFile: string read FCertificateFile write FCertificateFile; {:Used for loading private key from disk file. See to plugin documentation if this method is supported and how!} property PrivateKeyFile: string read FPrivateKeyFile write FPrivateKeyFile; {:Used for loading certificate from binary string. See to plugin documentation if this method is supported and how!} property Certificate: Ansistring read FCertificate write FCertificate; {:Used for loading private key from binary string. See to plugin documentation if this method is supported and how!} property PrivateKey: Ansistring read FPrivateKey write FPrivateKey; {:Used for loading PFX from binary string. See to plugin documentation if this method is supported and how!} property PFX: Ansistring read FPFX write FPFX; {:Used for loading PFX from disk file. See to plugin documentation if this method is supported and how!} property PFXfile: string read FPFXfile write FPFXfile; {:Used for loading trusted certificates from disk file. See to plugin documentation if this method is supported and how!} property TrustCertificateFile: string read FTrustCertificateFile write FTrustCertificateFile; {:Used for loading trusted certificates from binary string. See to plugin documentation if this method is supported and how!} property TrustCertificate: Ansistring read FTrustCertificate write FTrustCertificate; {:Used for loading CA certificates from binary string. See to plugin documentation if this method is supported and how!} property CertCA: Ansistring read FCertCA write FCertCA; {:Used for loading CA certificates from disk file. See to plugin documentation if this method is supported and how!} property CertCAFile: string read FCertCAFile write SetCertCAFile; {:If @true, then is verified client certificate. (it is good for writing SSL/TLS servers.) When you are not server, but you are client, then if this property is @true, verify servers certificate.} property VerifyCert: Boolean read FVerifyCert write FVerifyCert; {:channel type for possible SSH connections} property SSHChannelType: string read FSSHChannelType write FSSHChannelType; {:First argument of channel type for possible SSH connections} property SSHChannelArg1: string read FSSHChannelArg1 write FSSHChannelArg1; {:Second argument of channel type for possible SSH connections} property SSHChannelArg2: string read FSSHChannelArg2 write FSSHChannelArg2; {: Level of standards compliance level (CryptLib: values in cryptlib.pas, -1: use default value ) } property CertComplianceLevel:integer read FCertComplianceLevel write FCertComplianceLevel; {:This event is called when verifying the server certificate immediatally after a successfull verification in the ssl library.} property OnVerifyCert: THookVerifyCert read FOnVerifyCert write FOnVerifyCert; {: Server Name Identification. Host name to send to server. If empty the host name found in URL will be used, which should be the normal use (http Header Host = SNI Host). The value is cleared after the connection is established. (SNI support requires OpenSSL 0.9.8k or later. Cryptlib not supported, yet ) } property SNIHost:string read FSNIHost write FSNIHost; end; {:@abstract(Default SSL plugin with no SSL support.) Dummy SSL plugin implementation for applications without SSL/TLS support.} TSSLNone = class (TCustomSSL) public {:See @inherited} function LibVersion: String; override; {:See @inherited} function LibName: String; override; end; {:@abstract(Record with definition of IP packet header.) For reading data from ICMP or RAW sockets.} TIPHeader = record VerLen: Byte; TOS: Byte; TotalLen: Word; Identifer: Word; FragOffsets: Word; TTL: Byte; Protocol: Byte; CheckSum: Word; SourceIp: LongWord; DestIp: LongWord; Options: LongWord; end; {:@abstract(Parent class of application protocol implementations.) By this class is defined common properties.} TSynaClient = Class(TObject) protected FTargetHost: string; FTargetPort: string; FIPInterface: string; FTimeout: integer; FUserName: string; FPassword: string; public constructor Create; published {:Specify terget server IP (or symbolic name). Default is 'localhost'.} property TargetHost: string read FTargetHost Write FTargetHost; {:Specify terget server port (or symbolic name).} property TargetPort: string read FTargetPort Write FTargetPort; {:Defined local socket address. (outgoing IP address). By default is used '0.0.0.0' as wildcard for default IP.} property IPInterface: string read FIPInterface Write FIPInterface; {:Specify default timeout for socket operations.} property Timeout: integer read FTimeout Write FTimeout; {:If protocol need user authorization, then fill here username.} property UserName: string read FUserName Write FUserName; {:If protocol need user authorization, then fill here password.} property Password: string read FPassword Write FPassword; end; var {:Selected SSL plugin. Default is @link(TSSLNone). Do not change this value directly!!! Just add your plugin unit to your project uses instead. Each plugin unit have initialization code what modify this variable.} SSLImplementation: TSSLClass = TSSLNone; implementation {$IFDEF ONCEWINSOCK} var WsaDataOnce: TWSADATA; e: ESynapseError; {$ENDIF} constructor TBlockSocket.Create; begin CreateAlternate(''); end; constructor TBlockSocket.CreateAlternate(Stub: string); {$IFNDEF ONCEWINSOCK} var e: ESynapseError; {$ENDIF} begin inherited Create; FDelayedOptions := TList.Create; FRaiseExcept := False; {$IFDEF RAISEEXCEPT} FRaiseExcept := True; {$ENDIF} FSocket := INVALID_SOCKET; FBuffer := ''; FLastCR := False; FLastLF := False; FBinded := False; FNonBlockMode := False; FMaxLineLength := 0; FMaxSendBandwidth := 0; FNextSend := 0; FMaxRecvBandwidth := 0; FNextRecv := 0; FConvertLineEnd := False; FFamily := SF_Any; FFamilySave := SF_Any; FIP6used := False; FPreferIP4 := True; FInterPacketTimeout := True; FRecvCounter := 0; FSendCounter := 0; FSendMaxChunk := c64k; FStopFlag := False; FNonblockSendTimeout := 15000; FHeartbeatRate := 0; FConnectionTimeout := 0; FOwner := nil; {$IFNDEF ONCEWINSOCK} if Stub = '' then Stub := DLLStackName; if not InitSocketInterface(Stub) then begin e := ESynapseError.Create('Error loading Socket interface (' + Stub + ')!'); e.ErrorCode := 0; e.ErrorMessage := 'Error loading Socket interface (' + Stub + ')!'; raise e; end; SockCheck(synsock.WSAStartup(WinsockLevel, FWsaDataOnce)); ExceptCheck; {$ENDIF} end; destructor TBlockSocket.Destroy; var n: integer; p: TSynaOption; begin CloseSocket; {$IFNDEF ONCEWINSOCK} synsock.WSACleanup; DestroySocketInterface; {$ENDIF} for n := FDelayedOptions.Count - 1 downto 0 do begin p := TSynaOption(FDelayedOptions[n]); p.Free; end; FDelayedOptions.Free; inherited Destroy; end; function TBlockSocket.FamilyToAF(f: TSocketFamily): TAddrFamily; begin case f of SF_ip4: Result := AF_INET; SF_ip6: Result := AF_INET6; else Result := AF_UNSPEC; end; end; procedure TBlockSocket.SetDelayedOption(const Value: TSynaOption); var li: TLinger; x: integer; buf: TMemory; {$IFNDEF MSWINDOWS} timeval: TTimeval; {$ENDIF} begin case value.Option of SOT_Linger: begin {$IFDEF CIL} li := TLinger.Create(Value.Enabled, Value.Value div 1000); synsock.SetSockOptObj(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), li); {$ELSE} li.l_onoff := Ord(Value.Enabled); li.l_linger := Value.Value div 1000; buf := @li; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_LINGER), buf, SizeOf(li)); {$ENDIF} end; SOT_RecvBuff: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), buf, SizeOf(Value.Value)); end; SOT_SendBuff: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), buf, SizeOf(Value.Value)); end; SOT_NonBlock: begin FNonBlockMode := Value.Enabled; x := Ord(FNonBlockMode); synsock.IoctlSocket(FSocket, FIONBIO, x); end; SOT_RecvTimeout: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), buf, SizeOf(Value.Value)); {$ELSE} {$IFDEF MSWINDOWS} buf := @Value.Value; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), buf, SizeOf(Value.Value)); {$ELSE} timeval.tv_sec:=Value.Value div 1000; timeval.tv_usec:=(Value.Value mod 1000) * 1000; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVTIMEO), @timeval, SizeOf(timeval)); {$ENDIF} {$ENDIF} end; SOT_SendTimeout: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} {$IFDEF MSWINDOWS} buf := @Value.Value; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDTIMEO), buf, SizeOf(Value.Value)); {$ELSE} timeval.tv_sec:=Value.Value div 1000; timeval.tv_usec:=(Value.Value mod 1000) * 1000; synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDTIMEO), @timeval, SizeOf(timeval)); {$ENDIF} {$ENDIF} end; SOT_Reuse: begin x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_REUSEADDR), buf, SizeOf(x)); end; SOT_TTL: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_UNICAST_HOPS), buf, SizeOf(Value.Value)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_TTL), buf, SizeOf(Value.Value)); end; SOT_Broadcast: begin //#todo1 broadcasty na IP6 x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} synsock.SetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_BROADCAST), buf, SizeOf(x)); end; SOT_MulticastTTL: begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(value.Value); {$ELSE} buf := @Value.Value; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_HOPS), buf, SizeOf(Value.Value)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_TTL), buf, SizeOf(Value.Value)); end; SOT_MulticastLoop: begin x := Ord(Value.Enabled); {$IFDEF CIL} buf := System.BitConverter.GetBytes(x); {$ELSE} buf := @x; {$ENDIF} if FIP6Used then synsock.SetSockOpt(FSocket, integer(IPPROTO_IPV6), integer(IPV6_MULTICAST_LOOP), buf, SizeOf(x)) else synsock.SetSockOpt(FSocket, integer(IPPROTO_IP), integer(IP_MULTICAST_LOOP), buf, SizeOf(x)); end; end; Value.free; end; procedure TBlockSocket.DelayedOption(const Value: TSynaOption); begin if FSocket = INVALID_SOCKET then begin FDelayedOptions.Insert(0, Value); end else SetDelayedOption(Value); end; procedure TBlockSocket.ProcessDelayedOptions; var n: integer; d: TSynaOption; begin for n := FDelayedOptions.Count - 1 downto 0 do begin d := TSynaOption(FDelayedOptions[n]); SetDelayedOption(d); end; FDelayedOptions.Clear; end; procedure TBlockSocket.SetSin(var Sin: TVarSin; IP, Port: string); var f: TSocketFamily; begin DoStatus(HR_ResolvingBegin, IP + ':' + Port); ResetLastError; //if socket exists, then use their type, else use users selection f := SF_Any; if (FSocket = INVALID_SOCKET) and (FFamily = SF_any) then begin if IsIP(IP) then f := SF_IP4 else if IsIP6(IP) then f := SF_IP6; end else f := FFamily; FLastError := synsock.SetVarSin(sin, ip, port, FamilyToAF(f), GetSocketprotocol, GetSocketType, FPreferIP4); DoStatus(HR_ResolvingEnd, GetSinIP(sin) + ':' + IntTostr(GetSinPort(sin))); end; function TBlockSocket.GetSinIP(Sin: TVarSin): string; begin Result := synsock.GetSinIP(sin); end; function TBlockSocket.GetSinPort(Sin: TVarSin): Integer; begin Result := synsock.GetSinPort(sin); end; procedure TBlockSocket.CreateSocket; var sin: TVarSin; begin //dummy for SF_Any Family mode ResetLastError; if (FFamily <> SF_Any) and (FSocket = INVALID_SOCKET) then begin {$IFDEF CIL} if FFamily = SF_IP6 then sin := TVarSin.Create(IPAddress.Parse('::0'), 0) else sin := TVarSin.Create(IPAddress.Parse('0.0.0.0'), 0); {$ELSE} FillChar(Sin, Sizeof(Sin), 0); if FFamily = SF_IP6 then sin.sin_family := AF_INET6 else sin.sin_family := AF_INET; {$ENDIF} InternalCreateSocket(Sin); end; end; procedure TBlockSocket.CreateSocketByName(const Value: String); var sin: TVarSin; begin ResetLastError; if FSocket = INVALID_SOCKET then begin SetSin(sin, value, '0'); if FLastError = 0 then InternalCreateSocket(Sin); end; end; procedure TBlockSocket.InternalCreateSocket(Sin: TVarSin); begin FStopFlag := False; FRecvCounter := 0; FSendCounter := 0; ResetLastError; if FSocket = INVALID_SOCKET then begin FBuffer := ''; FBinded := False; FIP6Used := Sin.AddressFamily = AF_INET6; FSocket := synsock.Socket(integer(Sin.AddressFamily), GetSocketType, GetSocketProtocol); if FSocket = INVALID_SOCKET then FLastError := synsock.WSAGetLastError; {$IFNDEF CIL} FD_ZERO(FFDSet); FD_SET(FSocket, FFDSet); {$ENDIF} ExceptCheck; if FIP6used then DoStatus(HR_SocketCreate, 'IPv6') else DoStatus(HR_SocketCreate, 'IPv4'); ProcessDelayedOptions; DoCreateSocket; end; end; procedure TBlockSocket.CloseSocket; begin AbortSocket; end; procedure TBlockSocket.AbortSocket; var n: integer; p: TSynaOption; begin if FSocket <> INVALID_SOCKET then synsock.CloseSocket(FSocket); FSocket := INVALID_SOCKET; for n := FDelayedOptions.Count - 1 downto 0 do begin p := TSynaOption(FDelayedOptions[n]); p.Free; end; FDelayedOptions.Clear; FFamily := FFamilySave; DoStatus(HR_SocketClose, ''); end; procedure TBlockSocket.Bind(IP, Port: string); var Sin: TVarSin; begin ResetLastError; if (FSocket <> INVALID_SOCKET) or not((FFamily = SF_ANY) and (IP = cAnyHost) and (Port = cAnyPort)) then begin SetSin(Sin, IP, Port); if FLastError = 0 then begin if FSocket = INVALID_SOCKET then InternalCreateSocket(Sin); SockCheck(synsock.Bind(FSocket, Sin)); GetSinLocal; FBuffer := ''; FBinded := True; end; ExceptCheck; DoStatus(HR_Bind, IP + ':' + Port); end; end; procedure TBlockSocket.Connect(IP, Port: string); var Sin: TVarSin; b: boolean; begin SetSin(Sin, IP, Port); if FLastError = 0 then begin if FSocket = INVALID_SOCKET then InternalCreateSocket(Sin); if FConnectionTimeout > 0 then begin // connect in non-blocking mode b := NonBlockMode; NonBlockMode := true; SockCheck(synsock.Connect(FSocket, Sin)); if (FLastError = WSAEINPROGRESS) OR (FLastError = WSAEWOULDBLOCK) then if not CanWrite(FConnectionTimeout) then FLastError := WSAETIMEDOUT; NonBlockMode := b; end else SockCheck(synsock.Connect(FSocket, Sin)); if FLastError = 0 then GetSins; FBuffer := ''; FLastCR := False; FLastLF := False; end; ExceptCheck; DoStatus(HR_Connect, IP + ':' + Port); end; procedure TBlockSocket.Listen; begin SockCheck(synsock.Listen(FSocket, SOMAXCONN)); GetSins; ExceptCheck; DoStatus(HR_Listen, ''); end; function TBlockSocket.Accept: TSocket; begin Result := synsock.Accept(FSocket, FRemoteSin); /// SockCheck(Result); ExceptCheck; DoStatus(HR_Accept, ''); end; procedure TBlockSocket.GetSinLocal; begin synsock.GetSockName(FSocket, FLocalSin); end; procedure TBlockSocket.GetSinRemote; begin synsock.GetPeerName(FSocket, FRemoteSin); end; procedure TBlockSocket.GetSins; begin GetSinLocal; GetSinRemote; end; procedure TBlockSocket.SetBandwidth(Value: Integer); begin MaxSendBandwidth := Value; MaxRecvBandwidth := Value; end; procedure TBlockSocket.LimitBandwidth(Length: Integer; MaxB: integer; var Next: LongWord); var x: LongWord; y: LongWord; n: integer; begin if FStopFlag then exit; if MaxB > 0 then begin y := GetTick; if Next > y then begin x := Next - y; if x > 0 then begin DoStatus(HR_Wait, IntToStr(x)); sleep(x mod 250); for n := 1 to x div 250 do if FStopFlag then Break else sleep(250); end; end; Next := GetTick + Trunc((Length / MaxB) * 1000); end; end; function TBlockSocket.TestStopFlag: Boolean; begin DoHeartbeat; Result := FStopFlag; if Result then begin FStopFlag := False; FLastError := WSAECONNABORTED; ExceptCheck; end; end; function TBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; {$IFNDEF CIL} var x, y: integer; l, r: integer; p: Pointer; {$ENDIF} begin Result := 0; if TestStopFlag then Exit; DoMonitor(True, Buffer, Length); {$IFDEF CIL} Result := synsock.Send(FSocket, Buffer, Length, 0); {$ELSE} l := Length; x := 0; while x < l do begin y := l - x; if y > FSendMaxChunk then y := FSendMaxChunk; if y > 0 then begin LimitBandwidth(y, FMaxSendBandwidth, FNextsend); p := IncPoint(Buffer, x); r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); SockCheck(r); if FLastError = WSAEWOULDBLOCK then begin if CanWrite(FNonblockSendTimeout) then begin r := synsock.Send(FSocket, p, y, MSG_NOSIGNAL); SockCheck(r); end else FLastError := WSAETIMEDOUT; end; if FLastError <> 0 then Break; Inc(x, r); Inc(Result, r); Inc(FSendCounter, r); DoStatus(HR_WriteCount, IntToStr(r)); end else break; end; {$ENDIF} ExceptCheck; end; procedure TBlockSocket.SendByte(Data: Byte); {$IFDEF CIL} var buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 1); buf[0] := Data; SendBuffer(buf, 1); {$ELSE} SendBuffer(@Data, 1); {$ENDIF} end; procedure TBlockSocket.SendString(Data: AnsiString); var buf: TMemory; begin {$IFDEF CIL} buf := BytesOf(Data); {$ELSE} buf := Pointer(data); {$ENDIF} SendBuffer(buf, Length(Data)); end; procedure TBlockSocket.SendInteger(Data: integer); var buf: TMemory; begin {$IFDEF CIL} buf := System.BitConverter.GetBytes(Data); {$ELSE} buf := @Data; {$ENDIF} SendBuffer(buf, SizeOf(Data)); end; procedure TBlockSocket.SendBlock(const Data: AnsiString); var i: integer; begin i := SwapBytes(Length(data)); SendString(Codelongint(i) + Data); end; procedure TBlockSocket.InternalSendStream(const Stream: TStream; WithSize, Indy: boolean); var l: integer; yr: integer; s: AnsiString; b: boolean; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin b := true; l := 0; if WithSize then begin l := Stream.Size - Stream.Position;; if not Indy then l := synsock.HToNL(l); end; repeat {$IFDEF CIL} Setlength(buf, FSendMaxChunk); yr := Stream.read(buf, FSendMaxChunk); if yr > 0 then begin if WithSize and b then begin b := false; SendString(CodeLongInt(l)); end; SendBuffer(buf, yr); if FLastError <> 0 then break; end {$ELSE} Setlength(s, FSendMaxChunk); yr := Stream.read(Pointer(s)^, FSendMaxChunk); if yr > 0 then begin SetLength(s, yr); if WithSize and b then begin b := false; SendString(CodeLongInt(l) + s); end else SendString(s); if FLastError <> 0 then break; end {$ENDIF} until yr <= 0; end; procedure TBlockSocket.SendStreamRaw(const Stream: TStream); begin InternalSendStream(Stream, false, false); end; procedure TBlockSocket.SendStreamIndy(const Stream: TStream); begin InternalSendStream(Stream, true, true); end; procedure TBlockSocket.SendStream(const Stream: TStream); begin InternalSendStream(Stream, true, false); end; function TBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); // Result := synsock.Recv(FSocket, Buffer^, Length, MSG_NOSIGNAL); Result := synsock.Recv(FSocket, Buffer, Length, MSG_NOSIGNAL); if Result = 0 then FLastError := WSAECONNRESET else SockCheck(Result); ExceptCheck; if Result > 0 then begin Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); DoReadFilter(Buffer, Result); end; end; function TBlockSocket.RecvBufferEx(Buffer: TMemory; Len: Integer; Timeout: Integer): Integer; var s: AnsiString; rl, l: integer; ti: LongWord; {$IFDEF CIL} n: integer; b: TMemory; {$ENDIF} begin ResetLastError; Result := 0; if Len > 0 then begin rl := 0; repeat ti := GetTick; s := RecvPacket(Timeout); l := Length(s); if (rl + l) > Len then l := Len - rl; {$IFDEF CIL} b := BytesOf(s); for n := 0 to l do Buffer[rl + n] := b[n]; {$ELSE} Move(Pointer(s)^, IncPoint(Buffer, rl)^, l); {$ENDIF} rl := rl + l; if FLastError <> 0 then Break; if rl >= Len then Break; if not FInterPacketTimeout then begin Timeout := Timeout - integer(TickDelta(ti, GetTick)); if Timeout <= 0 then begin FLastError := WSAETIMEDOUT; Break; end; end; until False; delete(s, 1, l); FBuffer := s; Result := rl; end; end; function TBlockSocket.RecvBufferStr(Len: Integer; Timeout: Integer): AnsiString; var x: integer; {$IFDEF CIL} buf: Tmemory; {$ENDIF} begin Result := ''; if Len > 0 then begin {$IFDEF CIL} Setlength(Buf, Len); x := RecvBufferEx(buf, Len , Timeout); if FLastError = 0 then begin SetLength(Buf, x); Result := StringOf(buf); end else Result := ''; {$ELSE} Setlength(Result, Len); x := RecvBufferEx(Pointer(Result), Len , Timeout); if FLastError = 0 then SetLength(Result, x) else Result := ''; {$ENDIF} end; end; function TBlockSocket.RecvPacket(Timeout: Integer): AnsiString; var x: integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin Result := ''; ResetLastError; if FBuffer <> '' then begin Result := FBuffer; FBuffer := ''; end else begin {$IFDEF MSWINDOWS} //not drain CPU on large downloads... Sleep(0); {$ENDIF} x := WaitingData; if x > 0 then begin {$IFDEF CIL} SetLength(Buf, x); x := RecvBuffer(Buf, x); if x >= 0 then begin SetLength(Buf, x); Result := StringOf(Buf); end; {$ELSE} SetLength(Result, x); x := RecvBuffer(Pointer(Result), x); if x >= 0 then SetLength(Result, x); {$ENDIF} end else begin if CanRead(Timeout) then begin x := WaitingData; if x = 0 then FLastError := WSAECONNRESET; if x > 0 then begin {$IFDEF CIL} SetLength(Buf, x); x := RecvBuffer(Buf, x); if x >= 0 then begin SetLength(Buf, x); result := StringOf(Buf); end; {$ELSE} SetLength(Result, x); x := RecvBuffer(Pointer(Result), x); if x >= 0 then SetLength(Result, x); {$ENDIF} end; end else FLastError := WSAETIMEDOUT; end; end; if FConvertLineEnd and (Result <> '') then begin if FLastCR and (Result[1] = LF) then Delete(Result, 1, 1); if FLastLF and (Result[1] = CR) then Delete(Result, 1, 1); FLastCR := False; FLastLF := False; end; ExceptCheck; end; function TBlockSocket.RecvByte(Timeout: Integer): Byte; begin Result := 0; ResetLastError; if FBuffer = '' then FBuffer := RecvPacket(Timeout); if (FLastError = 0) and (FBuffer <> '') then begin Result := Ord(FBuffer[1]); Delete(FBuffer, 1, 1); end; ExceptCheck; end; function TBlockSocket.RecvInteger(Timeout: Integer): Integer; var s: AnsiString; begin Result := 0; s := RecvBufferStr(4, Timeout); if FLastError = 0 then Result := (ord(s[1]) + ord(s[2]) * 256) + (ord(s[3]) + ord(s[4]) * 256) * 65536; end; function TBlockSocket.RecvTerminated(Timeout: Integer; const Terminator: AnsiString): AnsiString; var x: Integer; s: AnsiString; l: Integer; CorCRLF: Boolean; t: AnsiString; tl: integer; ti: LongWord; begin ResetLastError; Result := ''; l := Length(Terminator); if l = 0 then Exit; tl := l; CorCRLF := FConvertLineEnd and (Terminator = CRLF); s := ''; x := 0; repeat //get rest of FBuffer or incomming new data... ti := GetTick; s := s + RecvPacket(Timeout); if FLastError <> 0 then Break; x := 0; if Length(s) > 0 then if CorCRLF then begin t := ''; x := PosCRLF(s, t); tl := Length(t); if t = CR then FLastCR := True; if t = LF then FLastLF := True; end else begin x := pos(Terminator, s); tl := l; end; if (FMaxLineLength <> 0) and (Length(s) > FMaxLineLength) then begin FLastError := WSAENOBUFS; Break; end; if x > 0 then Break; if not FInterPacketTimeout then begin Timeout := Timeout - integer(TickDelta(ti, GetTick)); if Timeout <= 0 then begin FLastError := WSAETIMEDOUT; Break; end; end; until False; if x > 0 then begin Result := Copy(s, 1, x - 1); Delete(s, 1, x + tl - 1); end; FBuffer := s; ExceptCheck; end; function TBlockSocket.RecvString(Timeout: Integer): AnsiString; var s: AnsiString; begin Result := ''; s := RecvTerminated(Timeout, CRLF); if FLastError = 0 then Result := s; end; function TBlockSocket.RecvBlock(Timeout: Integer): AnsiString; var x: integer; begin Result := ''; x := RecvInteger(Timeout); if FLastError = 0 then Result := RecvBufferStr(x, Timeout); end; procedure TBlockSocket.RecvStreamRaw(const Stream: TStream; Timeout: Integer); var s: AnsiString; begin repeat s := RecvPacket(Timeout); if FLastError = 0 then WriteStrToStream(Stream, s); until FLastError <> 0; end; procedure TBlockSocket.RecvStreamSize(const Stream: TStream; Timeout: Integer; Size: Integer); var s: AnsiString; n: integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin for n := 1 to (Size div FSendMaxChunk) do begin {$IFDEF CIL} SetLength(buf, FSendMaxChunk); RecvBufferEx(buf, FSendMaxChunk, Timeout); if FLastError <> 0 then Exit; Stream.Write(buf, FSendMaxChunk); {$ELSE} s := RecvBufferStr(FSendMaxChunk, Timeout); if FLastError <> 0 then Exit; WriteStrToStream(Stream, s); {$ENDIF} end; n := Size mod FSendMaxChunk; if n > 0 then begin {$IFDEF CIL} SetLength(buf, n); RecvBufferEx(buf, n, Timeout); if FLastError <> 0 then Exit; Stream.Write(buf, n); {$ELSE} s := RecvBufferStr(n, Timeout); if FLastError <> 0 then Exit; WriteStrToStream(Stream, s); {$ENDIF} end; end; procedure TBlockSocket.RecvStreamIndy(const Stream: TStream; Timeout: Integer); var x: integer; begin x := RecvInteger(Timeout); x := synsock.NToHL(x); if FLastError = 0 then RecvStreamSize(Stream, Timeout, x); end; procedure TBlockSocket.RecvStream(const Stream: TStream; Timeout: Integer); var x: integer; begin x := RecvInteger(Timeout); if FLastError = 0 then RecvStreamSize(Stream, Timeout, x); end; function TBlockSocket.PeekBuffer(Buffer: TMemory; Length: Integer): Integer; begin {$IFNDEF CIL} // Result := synsock.Recv(FSocket, Buffer^, Length, MSG_PEEK + MSG_NOSIGNAL); Result := synsock.Recv(FSocket, Buffer, Length, MSG_PEEK + MSG_NOSIGNAL); SockCheck(Result); ExceptCheck; {$ENDIF} end; function TBlockSocket.PeekByte(Timeout: Integer): Byte; var s: string; begin {$IFNDEF CIL} Result := 0; if CanRead(Timeout) then begin SetLength(s, 1); PeekBuffer(Pointer(s), 1); if s <> '' then Result := Ord(s[1]); end else FLastError := WSAETIMEDOUT; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.ResetLastError; begin FLastError := 0; FLastErrorDesc := ''; end; function TBlockSocket.SockCheck(SockResult: Integer): Integer; begin ResetLastError; if SockResult = integer(SOCKET_ERROR) then begin FLastError := synsock.WSAGetLastError; FLastErrorDesc := GetErrorDescEx; end; Result := FLastError; end; procedure TBlockSocket.ExceptCheck; var e: ESynapseError; begin FLastErrorDesc := GetErrorDescEx; if (LastError <> 0) and (LastError <> WSAEINPROGRESS) and (LastError <> WSAEWOULDBLOCK) then begin DoStatus(HR_Error, IntToStr(FLastError) + ',' + FLastErrorDesc); if FRaiseExcept then begin e := ESynapseError.Create(Format('Synapse TCP/IP Socket error %d: %s', [FLastError, FLastErrorDesc])); e.ErrorCode := FLastError; e.ErrorMessage := FLastErrorDesc; raise e; end; end; end; function TBlockSocket.WaitingData: Integer; var x: Integer; begin Result := 0; if synsock.IoctlSocket(FSocket, FIONREAD, x) = 0 then Result := x; if Result > c64k then Result := c64k; end; function TBlockSocket.WaitingDataEx: Integer; begin if FBuffer <> '' then Result := Length(FBuffer) else Result := WaitingData; end; procedure TBlockSocket.Purge; begin Sleep(1); try while (Length(FBuffer) > 0) or (WaitingData > 0) do begin RecvPacket(0); if FLastError <> 0 then break; end; except on exception do; end; ResetLastError; end; procedure TBlockSocket.SetLinger(Enable: Boolean; Linger: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_Linger; d.Enabled := Enable; d.Value := Linger; DelayedOption(d); end; function TBlockSocket.LocalName: string; begin Result := synsock.GetHostName; if Result = '' then Result := '127.0.0.1'; end; procedure TBlockSocket.ResolveNameToIP(Name: string; const IPList: TStrings); begin IPList.Clear; synsock.ResolveNameToIP(Name, FamilyToAF(FFamily), GetSocketprotocol, GetSocketType, IPList); if IPList.Count = 0 then IPList.Add(cAnyHost); end; function TBlockSocket.ResolveName(Name: string): string; var l: TStringList; begin l := TStringList.Create; try ResolveNameToIP(Name, l); Result := l[0]; finally l.Free; end; end; function TBlockSocket.ResolvePort(Port: string): Word; begin Result := synsock.ResolvePort(Port, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); end; function TBlockSocket.ResolveIPToName(IP: string): string; begin if not IsIP(IP) and not IsIp6(IP) then IP := ResolveName(IP); Result := synsock.ResolveIPToName(IP, FamilyToAF(FFamily), GetSocketProtocol, GetSocketType); end; procedure TBlockSocket.SetRemoteSin(IP, Port: string); begin SetSin(FRemoteSin, IP, Port); end; function TBlockSocket.GetLocalSinIP: string; begin Result := GetSinIP(FLocalSin); end; function TBlockSocket.GetRemoteSinIP: string; begin Result := GetSinIP(FRemoteSin); end; function TBlockSocket.GetLocalSinPort: Integer; begin Result := GetSinPort(FLocalSin); end; function TBlockSocket.GetRemoteSinPort: Integer; begin Result := GetSinPort(FRemoteSin); end; function TBlockSocket.InternalCanRead(Timeout: Integer): Boolean; {$IFDEF CIL} begin Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectRead); {$ELSE} var TimeVal: PTimeVal; TimeV: TTimeVal; x: Integer; FDSet: TFDSet; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FDSet := FFdSet; x := synsock.Select(FSocket + 1, @FDSet, nil, nil, TimeVal); SockCheck(x); if FLastError <> 0 then x := 0; Result := x > 0; {$ENDIF} end; function TBlockSocket.CanRead(Timeout: Integer): Boolean; var ti, tr: Integer; n: integer; begin if (FHeartbeatRate <> 0) and (Timeout <> -1) then begin ti := Timeout div FHeartbeatRate; tr := Timeout mod FHeartbeatRate; end else begin ti := 0; tr := Timeout; end; Result := InternalCanRead(tr); if not Result then for n := 0 to ti do begin DoHeartbeat; if FStopFlag then begin Result := False; FStopFlag := False; Break; end; Result := InternalCanRead(FHeartbeatRate); if Result then break; end; ExceptCheck; if Result then DoStatus(HR_CanRead, ''); end; function TBlockSocket.CanWrite(Timeout: Integer): Boolean; {$IFDEF CIL} begin Result := FSocket.Poll(Timeout * 1000, SelectMode.SelectWrite); {$ELSE} var TimeVal: PTimeVal; TimeV: TTimeVal; x: Integer; FDSet: TFDSet; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FDSet := FFdSet; x := synsock.Select(FSocket + 1, nil, @FDSet, nil, TimeVal); SockCheck(x); if FLastError <> 0 then x := 0; Result := x > 0; {$ENDIF} ExceptCheck; if Result then DoStatus(HR_CanWrite, ''); end; function TBlockSocket.CanReadEx(Timeout: Integer): Boolean; begin if FBuffer <> '' then Result := True else Result := CanRead(Timeout); end; function TBlockSocket.SendBufferTo(Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; DoMonitor(True, Buffer, Length); LimitBandwidth(Length, FMaxSendBandwidth, FNextsend); Result := synsock.SendTo(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); SockCheck(Result); ExceptCheck; Inc(FSendCounter, Result); DoStatus(HR_WriteCount, IntToStr(Result)); end; function TBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; begin Result := 0; if TestStopFlag then Exit; LimitBandwidth(Length, FMaxRecvBandwidth, FNextRecv); Result := synsock.RecvFrom(FSocket, Buffer, Length, MSG_NOSIGNAL, FRemoteSin); SockCheck(Result); ExceptCheck; Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); end; function TBlockSocket.GetSizeRecvBuffer: Integer; var l: Integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 4); SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_RCVBUF), buf, l)); Result := System.BitConverter.ToInt32(buf,0); {$ELSE} l := SizeOf(Result); SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_RCVBUF, @Result, l)); if FLastError <> 0 then Result := 1024; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.SetSizeRecvBuffer(Size: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_RecvBuff; d.Value := Size; DelayedOption(d); end; function TBlockSocket.GetSizeSendBuffer: Integer; var l: Integer; {$IFDEF CIL} buf: TMemory; {$ENDIF} begin {$IFDEF CIL} setlength(buf, 4); SockCheck(synsock.GetSockOpt(FSocket, integer(SOL_SOCKET), integer(SO_SNDBUF), buf, l)); Result := System.BitConverter.ToInt32(buf,0); {$ELSE} l := SizeOf(Result); SockCheck(synsock.GetSockOpt(FSocket, SOL_SOCKET, SO_SNDBUF, @Result, l)); if FLastError <> 0 then Result := 1024; ExceptCheck; {$ENDIF} end; procedure TBlockSocket.SetSizeSendBuffer(Size: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_SendBuff; d.Value := Size; DelayedOption(d); end; procedure TBlockSocket.SetNonBlockMode(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_nonblock; d.Enabled := Value; DelayedOption(d); end; procedure TBlockSocket.SetTimeout(Timeout: Integer); begin SetSendTimeout(Timeout); SetRecvTimeout(Timeout); end; procedure TBlockSocket.SetSendTimeout(Timeout: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_sendtimeout; d.Value := Timeout; DelayedOption(d); end; procedure TBlockSocket.SetRecvTimeout(Timeout: Integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_recvtimeout; d.Value := Timeout; DelayedOption(d); end; {$IFNDEF CIL} function TBlockSocket.GroupCanRead(const SocketList: TList; Timeout: Integer; const CanReadList: TList): boolean; var FDSet: TFDSet; TimeVal: PTimeVal; TimeV: TTimeVal; x, n: Integer; Max: Integer; begin TimeV.tv_usec := (Timeout mod 1000) * 1000; TimeV.tv_sec := Timeout div 1000; TimeVal := @TimeV; if Timeout = -1 then TimeVal := nil; FD_ZERO(FDSet); Max := 0; for n := 0 to SocketList.Count - 1 do if TObject(SocketList.Items[n]) is TBlockSocket then begin if TBlockSocket(SocketList.Items[n]).Socket > Max then Max := TBlockSocket(SocketList.Items[n]).Socket; FD_SET(TBlockSocket(SocketList.Items[n]).Socket, FDSet); end; x := synsock.Select(Max + 1, @FDSet, nil, nil, TimeVal); SockCheck(x); ExceptCheck; if FLastError <> 0 then x := 0; Result := x > 0; CanReadList.Clear; if Result then for n := 0 to SocketList.Count - 1 do if TObject(SocketList.Items[n]) is TBlockSocket then if FD_ISSET(TBlockSocket(SocketList.Items[n]).Socket, FDSet) then CanReadList.Add(TBlockSocket(SocketList.Items[n])); end; {$ENDIF} procedure TBlockSocket.EnableReuse(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_reuse; d.Enabled := Value; DelayedOption(d); end; procedure TBlockSocket.SetTTL(TTL: integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_TTL; d.Value := TTL; DelayedOption(d); end; function TBlockSocket.GetTTL:integer; var l: Integer; begin {$IFNDEF CIL} l := SizeOf(Result); if FIP6Used then synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_UNICAST_HOPS, @Result, l) else synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_TTL, @Result, l); {$ENDIF} end; procedure TBlockSocket.SetFamily(Value: TSocketFamily); begin FFamily := Value; FFamilySave := Value; end; procedure TBlockSocket.SetSocket(Value: TSocket); begin FRecvCounter := 0; FSendCounter := 0; FSocket := Value; {$IFNDEF CIL} FD_ZERO(FFDSet); FD_SET(FSocket, FFDSet); {$ENDIF} GetSins; FIP6Used := FRemoteSin.AddressFamily = AF_INET6; end; function TBlockSocket.GetWsaData: TWSAData; begin {$IFDEF ONCEWINSOCK} Result := WsaDataOnce; {$ELSE} Result := FWsaDataOnce; {$ENDIF} end; function TBlockSocket.GetSocketType: integer; begin Result := 0; end; function TBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_IP); end; procedure TBlockSocket.DoStatus(Reason: THookSocketReason; const Value: string); begin if assigned(OnStatus) then OnStatus(Self, Reason, Value); end; procedure TBlockSocket.DoReadFilter(Buffer: TMemory; var Len: Integer); var s: AnsiString; begin if assigned(OnReadFilter) then if Len > 0 then begin {$IFDEF CIL} s := StringOf(Buffer); {$ELSE} SetLength(s, Len); Move(Buffer^, Pointer(s)^, Len); {$ENDIF} OnReadFilter(Self, s); if Length(s) > Len then SetLength(s, Len); Len := Length(s); {$IFDEF CIL} Buffer := BytesOf(s); {$ELSE} Move(Pointer(s)^, Buffer^, Len); {$ENDIF} end; end; procedure TBlockSocket.DoCreateSocket; begin if assigned(OnCreateSocket) then OnCreateSocket(Self); end; procedure TBlockSocket.DoMonitor(Writing: Boolean; const Buffer: TMemory; Len: Integer); begin if assigned(OnMonitor) then begin OnMonitor(Self, Writing, Buffer, Len); end; end; procedure TBlockSocket.DoHeartbeat; begin if assigned(OnHeartbeat) and (FHeartbeatRate <> 0) then begin OnHeartbeat(Self); end; end; function TBlockSocket.GetErrorDescEx: string; begin Result := GetErrorDesc(FLastError); end; class function TBlockSocket.GetErrorDesc(ErrorCode: Integer): string; begin {$IFDEF CIL} if ErrorCode = 0 then Result := '' else begin Result := WSAGetLastErrorDesc; if Result = '' then Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; end; {$ELSE} case ErrorCode of 0: Result := ''; WSAEINTR: {10004} Result := 'Interrupted system call'; WSAEBADF: {10009} Result := 'Bad file number'; WSAEACCES: {10013} Result := 'Permission denied'; WSAEFAULT: {10014} Result := 'Bad address'; WSAEINVAL: {10022} Result := 'Invalid argument'; WSAEMFILE: {10024} Result := 'Too many open files'; WSAEWOULDBLOCK: {10035} Result := 'Operation would block'; WSAEINPROGRESS: {10036} Result := 'Operation now in progress'; WSAEALREADY: {10037} Result := 'Operation already in progress'; WSAENOTSOCK: {10038} Result := 'Socket operation on nonsocket'; WSAEDESTADDRREQ: {10039} Result := 'Destination address required'; WSAEMSGSIZE: {10040} Result := 'Message too long'; WSAEPROTOTYPE: {10041} Result := 'Protocol wrong type for Socket'; WSAENOPROTOOPT: {10042} Result := 'Protocol not available'; WSAEPROTONOSUPPORT: {10043} Result := 'Protocol not supported'; WSAESOCKTNOSUPPORT: {10044} Result := 'Socket not supported'; WSAEOPNOTSUPP: {10045} Result := 'Operation not supported on Socket'; WSAEPFNOSUPPORT: {10046} Result := 'Protocol family not supported'; WSAEAFNOSUPPORT: {10047} Result := 'Address family not supported'; WSAEADDRINUSE: {10048} Result := 'Address already in use'; WSAEADDRNOTAVAIL: {10049} Result := 'Can''t assign requested address'; WSAENETDOWN: {10050} Result := 'Network is down'; WSAENETUNREACH: {10051} Result := 'Network is unreachable'; WSAENETRESET: {10052} Result := 'Network dropped connection on reset'; WSAECONNABORTED: {10053} Result := 'Software caused connection abort'; WSAECONNRESET: {10054} Result := 'Connection reset by peer'; WSAENOBUFS: {10055} Result := 'No Buffer space available'; WSAEISCONN: {10056} Result := 'Socket is already connected'; WSAENOTCONN: {10057} Result := 'Socket is not connected'; WSAESHUTDOWN: {10058} Result := 'Can''t send after Socket shutdown'; WSAETOOMANYREFS: {10059} Result := 'Too many references:can''t splice'; WSAETIMEDOUT: {10060} Result := 'Connection timed out'; WSAECONNREFUSED: {10061} Result := 'Connection refused'; WSAELOOP: {10062} Result := 'Too many levels of symbolic links'; WSAENAMETOOLONG: {10063} Result := 'File name is too long'; WSAEHOSTDOWN: {10064} Result := 'Host is down'; WSAEHOSTUNREACH: {10065} Result := 'No route to host'; WSAENOTEMPTY: {10066} Result := 'Directory is not empty'; WSAEPROCLIM: {10067} Result := 'Too many processes'; WSAEUSERS: {10068} Result := 'Too many users'; WSAEDQUOT: {10069} Result := 'Disk quota exceeded'; WSAESTALE: {10070} Result := 'Stale NFS file handle'; WSAEREMOTE: {10071} Result := 'Too many levels of remote in path'; WSASYSNOTREADY: {10091} Result := 'Network subsystem is unusable'; WSAVERNOTSUPPORTED: {10092} Result := 'Winsock DLL cannot support this application'; WSANOTINITIALISED: {10093} Result := 'Winsock not initialized'; WSAEDISCON: {10101} Result := 'Disconnect'; WSAHOST_NOT_FOUND: {11001} Result := 'Host not found'; WSATRY_AGAIN: {11002} Result := 'Non authoritative - host not found'; WSANO_RECOVERY: {11003} Result := 'Non recoverable error'; WSANO_DATA: {11004} Result := 'Valid name, no data record of requested type' else Result := 'Other Winsock error (' + IntToStr(ErrorCode) + ')'; end; {$ENDIF} end; {======================================================================} constructor TSocksBlockSocket.Create; begin inherited Create; FSocksIP:= ''; FSocksPort:= '1080'; FSocksTimeout:= 60000; FSocksUsername:= ''; FSocksPassword:= ''; FUsingSocks := False; FSocksResolver := True; FSocksLastError := 0; FSocksResponseIP := ''; FSocksResponsePort := ''; FSocksLocalIP := ''; FSocksLocalPort := ''; FSocksRemoteIP := ''; FSocksRemotePort := ''; FBypassFlag := False; FSocksType := ST_Socks5; end; function TSocksBlockSocket.SocksOpen: boolean; var Buf: AnsiString; n: integer; begin Result := False; FUsingSocks := False; if FSocksType <> ST_Socks5 then begin FUsingSocks := True; Result := True; end else begin FBypassFlag := True; try if FSocksUsername = '' then Buf := #5 + #1 + #0 else Buf := #5 + #2 + #2 +#0; SendString(Buf); Buf := RecvBufferStr(2, FSocksTimeout); if Length(Buf) < 2 then Exit; if Buf[1] <> #5 then Exit; n := Ord(Buf[2]); case n of 0: //not need authorisation ; 2: begin Buf := #1 + AnsiChar(Length(FSocksUsername)) + FSocksUsername + AnsiChar(Length(FSocksPassword)) + FSocksPassword; SendString(Buf); Buf := RecvBufferStr(2, FSocksTimeout); if Length(Buf) < 2 then Exit; if Buf[2] <> #0 then Exit; end; else //other authorisation is not supported! Exit; end; FUsingSocks := True; Result := True; finally FBypassFlag := False; end; end; end; function TSocksBlockSocket.SocksRequest(Cmd: Byte; const IP, Port: string): Boolean; var Buf: AnsiString; begin FBypassFlag := True; try if FSocksType <> ST_Socks5 then Buf := #4 + AnsiChar(Cmd) + SocksCode(IP, Port) else Buf := #5 + AnsiChar(Cmd) + #0 + SocksCode(IP, Port); SendString(Buf); Result := FLastError = 0; finally FBypassFlag := False; end; end; function TSocksBlockSocket.SocksResponse: Boolean; var Buf, s: AnsiString; x: integer; begin Result := False; FBypassFlag := True; try FSocksResponseIP := ''; FSocksResponsePort := ''; FSocksLastError := -1; if FSocksType <> ST_Socks5 then begin Buf := RecvBufferStr(8, FSocksTimeout); if FLastError <> 0 then Exit; if Buf[1] <> #0 then Exit; FSocksLastError := Ord(Buf[2]); end else begin Buf := RecvBufferStr(4, FSocksTimeout); if FLastError <> 0 then Exit; if Buf[1] <> #5 then Exit; case Ord(Buf[4]) of 1: s := RecvBufferStr(4, FSocksTimeout); 3: begin x := RecvByte(FSocksTimeout); if FLastError <> 0 then Exit; s := AnsiChar(x) + RecvBufferStr(x, FSocksTimeout); end; 4: s := RecvBufferStr(16, FSocksTimeout); else Exit; end; Buf := Buf + s + RecvBufferStr(2, FSocksTimeout); if FLastError <> 0 then Exit; FSocksLastError := Ord(Buf[2]); end; if ((FSocksLastError <> 0) and (FSocksLastError <> 90)) then Exit; SocksDecode(Buf); Result := True; finally FBypassFlag := False; end; end; function TSocksBlockSocket.SocksCode(IP, Port: string): Ansistring; var ip6: TIp6Bytes; n: integer; begin if FSocksType <> ST_Socks5 then begin Result := CodeInt(ResolvePort(Port)); if not FSocksResolver then IP := ResolveName(IP); if IsIP(IP) then begin Result := Result + IPToID(IP); Result := Result + FSocksUsername + #0; end else begin Result := Result + IPToID('0.0.0.1'); Result := Result + FSocksUsername + #0; Result := Result + IP + #0; end; end else begin if not FSocksResolver then IP := ResolveName(IP); if IsIP(IP) then Result := #1 + IPToID(IP) else if IsIP6(IP) then begin ip6 := StrToIP6(IP); Result := #4; for n := 0 to 15 do Result := Result + AnsiChar(ip6[n]); end else Result := #3 + AnsiChar(Length(IP)) + IP; Result := Result + CodeInt(ResolvePort(Port)); end; end; function TSocksBlockSocket.SocksDecode(Value: Ansistring): integer; var Atyp: Byte; y, n: integer; w: Word; ip6: TIp6Bytes; begin FSocksResponsePort := '0'; Result := 0; if FSocksType <> ST_Socks5 then begin if Length(Value) < 8 then Exit; Result := 3; w := DecodeInt(Value, Result); FSocksResponsePort := IntToStr(w); FSocksResponseIP := Format('%d.%d.%d.%d', [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); Result := 9; end else begin if Length(Value) < 4 then Exit; Atyp := Ord(Value[4]); Result := 5; case Atyp of 1: begin if Length(Value) < 10 then Exit; FSocksResponseIP := Format('%d.%d.%d.%d', [Ord(Value[5]), Ord(Value[6]), Ord(Value[7]), Ord(Value[8])]); Result := 9; end; 3: begin y := Ord(Value[5]); if Length(Value) < (5 + y + 2) then Exit; for n := 6 to 6 + y - 1 do FSocksResponseIP := FSocksResponseIP + Value[n]; Result := 5 + y + 1; end; 4: begin if Length(Value) < 22 then Exit; for n := 0 to 15 do ip6[n] := ord(Value[n + 5]); FSocksResponseIP := IP6ToStr(ip6); Result := 21; end; else Exit; end; w := DecodeInt(Value, Result); FSocksResponsePort := IntToStr(w); Result := Result + 2; end; end; {======================================================================} procedure TDgramBlockSocket.Connect(IP, Port: string); begin SetRemoteSin(IP, Port); InternalCreateSocket(FRemoteSin); FBuffer := ''; DoStatus(HR_Connect, IP + ':' + Port); end; function TDgramBlockSocket.RecvBuffer(Buffer: TMemory; Length: Integer): Integer; begin Result := RecvBufferFrom(Buffer, Length); end; function TDgramBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; begin Result := SendBufferTo(Buffer, Length); end; {======================================================================} destructor TUDPBlockSocket.Destroy; begin if Assigned(FSocksControlSock) then FSocksControlSock.Free; inherited; end; procedure TUDPBlockSocket.EnableBroadcast(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_Broadcast; d.Enabled := Value; DelayedOption(d); end; function TUDPBlockSocket.UdpAssociation: Boolean; var b: Boolean; begin Result := True; FUsingSocks := False; if FSocksIP <> '' then begin Result := False; if not Assigned(FSocksControlSock) then FSocksControlSock := TTCPBlockSocket.Create; FSocksControlSock.CloseSocket; FSocksControlSock.CreateSocketByName(FSocksIP); FSocksControlSock.Connect(FSocksIP, FSocksPort); if FSocksControlSock.LastError <> 0 then Exit; // if not assigned local port, assign it! if not FBinded then Bind(cAnyHost, cAnyPort); //open control TCP connection to SOCKS FSocksControlSock.FSocksUsername := FSocksUsername; FSocksControlSock.FSocksPassword := FSocksPassword; b := FSocksControlSock.SocksOpen; if b then b := FSocksControlSock.SocksRequest(3, GetLocalSinIP, IntToStr(GetLocalSinPort)); if b then b := FSocksControlSock.SocksResponse; if not b and (FLastError = 0) then FLastError := WSANO_RECOVERY; FUsingSocks :=FSocksControlSock.UsingSocks; FSocksRemoteIP := FSocksControlSock.FSocksResponseIP; FSocksRemotePort := FSocksControlSock.FSocksResponsePort; Result := b and (FLastError = 0); end; end; function TUDPBlockSocket.SendBufferTo(Buffer: TMemory; Length: Integer): Integer; var SIp: string; SPort: integer; Buf: Ansistring; begin Result := 0; FUsingSocks := False; if (FSocksIP <> '') and (not UdpAssociation) then FLastError := WSANO_RECOVERY else begin if FUsingSocks then begin {$IFNDEF CIL} Sip := GetRemoteSinIp; SPort := GetRemoteSinPort; SetRemoteSin(FSocksRemoteIP, FSocksRemotePort); SetLength(Buf,Length); Move(Buffer^, Pointer(Buf)^, Length); Buf := #0 + #0 + #0 + SocksCode(Sip, IntToStr(SPort)) + Buf; Result := inherited SendBufferTo(Pointer(Buf), System.Length(buf)); SetRemoteSin(Sip, IntToStr(SPort)); {$ENDIF} end else Result := inherited SendBufferTo(Buffer, Length); end; end; function TUDPBlockSocket.RecvBufferFrom(Buffer: TMemory; Length: Integer): Integer; var Buf: Ansistring; x: integer; begin Result := inherited RecvBufferFrom(Buffer, Length); if FUsingSocks then begin {$IFNDEF CIL} SetLength(Buf, Result); Move(Buffer^, Pointer(Buf)^, Result); x := SocksDecode(Buf); Result := Result - x + 1; Buf := Copy(Buf, x, Result); Move(Pointer(Buf)^, Buffer^, Result); SetRemoteSin(FSocksResponseIP, FSocksResponsePort); {$ENDIF} end; end; {$IFNDEF CIL} procedure TUDPBlockSocket.AddMulticast(MCastIP: string); var Multicast: TIP_mreq; Multicast6: TIPv6_mreq; n: integer; ip6: Tip6bytes; begin if FIP6Used then begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_JOIN_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); end else begin Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); // Multicast.imr_interface.S_addr := INADDR_ANY; Multicast.imr_interface.S_addr := FLocalSin.sin_addr.S_addr; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, PAnsiChar(@Multicast), SizeOf(Multicast))); end; ExceptCheck; end; procedure TUDPBlockSocket.DropMulticast(MCastIP: string); var Multicast: TIP_mreq; Multicast6: TIPv6_mreq; n: integer; ip6: Tip6bytes; begin if FIP6Used then begin ip6 := StrToIp6(MCastIP); for n := 0 to 15 do Multicast6.ipv6mr_multiaddr.u6_addr8[n] := Ip6[n]; Multicast6.ipv6mr_interface := 0; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IPV6, IPV6_LEAVE_GROUP, PAnsiChar(@Multicast6), SizeOf(Multicast6))); end else begin Multicast.imr_multiaddr.S_addr := swapbytes(strtoip(MCastIP)); // Multicast.imr_interface.S_addr := INADDR_ANY; Multicast.imr_interface.S_addr := FLocalSin.sin_addr.S_addr; SockCheck(synsock.SetSockOpt(FSocket, IPPROTO_IP, IP_DROP_MEMBERSHIP, PAnsiChar(@Multicast), SizeOf(Multicast))); end; ExceptCheck; end; {$ENDIF} procedure TUDPBlockSocket.SetMulticastTTL(TTL: integer); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_MulticastTTL; d.Value := TTL; DelayedOption(d); end; function TUDPBlockSocket.GetMulticastTTL:integer; var l: Integer; begin {$IFNDEF CIL} l := SizeOf(Result); if FIP6Used then synsock.GetSockOpt(FSocket, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, @Result, l) else synsock.GetSockOpt(FSocket, IPPROTO_IP, IP_MULTICAST_TTL, @Result, l); {$ENDIF} end; procedure TUDPBlockSocket.EnableMulticastLoop(Value: Boolean); var d: TSynaOption; begin d := TSynaOption.Create; d.Option := SOT_MulticastLoop; d.Enabled := Value; DelayedOption(d); end; function TUDPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_DGRAM); end; function TUDPBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_UDP); end; {======================================================================} constructor TTCPBlockSocket.CreateWithSSL(SSLPlugin: TSSLClass); begin inherited Create; FSSL := SSLPlugin.Create(self); FHTTPTunnelIP := ''; FHTTPTunnelPort := ''; FHTTPTunnel := False; FHTTPTunnelRemoteIP := ''; FHTTPTunnelRemotePort := ''; FHTTPTunnelUser := ''; FHTTPTunnelPass := ''; FHTTPTunnelTimeout := 30000; end; constructor TTCPBlockSocket.Create; begin CreateWithSSL(SSLImplementation); end; destructor TTCPBlockSocket.Destroy; begin inherited Destroy; FSSL.Free; end; function TTCPBlockSocket.GetErrorDescEx: string; begin Result := inherited GetErrorDescEx; if (FLastError = WSASYSNOTREADY) and (self.SSL.LastError <> 0) then begin Result := self.SSL.LastErrorDesc; end; end; procedure TTCPBlockSocket.CloseSocket; begin if FSSL.SSLEnabled then FSSL.Shutdown; if (FSocket <> INVALID_SOCKET) and (FLastError = 0) then begin Synsock.Shutdown(FSocket, 1); Purge; end; inherited CloseSocket; end; procedure TTCPBlockSocket.DoAfterConnect; begin if assigned(OnAfterConnect) then begin OnAfterConnect(Self); end; end; function TTCPBlockSocket.WaitingData: Integer; begin Result := 0; if FSSL.SSLEnabled and (FSocket <> INVALID_SOCKET) then Result := FSSL.WaitingData; if Result = 0 then Result := inherited WaitingData; end; procedure TTCPBlockSocket.Listen; var b: Boolean; Sip,SPort: string; begin if FSocksIP = '' then begin inherited Listen; end else begin Sip := GetLocalSinIP; if Sip = cAnyHost then Sip := LocalName; SPort := IntToStr(GetLocalSinPort); inherited Connect(FSocksIP, FSocksPort); b := SocksOpen; if b then b := SocksRequest(2, Sip, SPort); if b then b := SocksResponse; if not b and (FLastError = 0) then FLastError := WSANO_RECOVERY; FSocksLocalIP := FSocksResponseIP; if FSocksLocalIP = cAnyHost then FSocksLocalIP := FSocksIP; FSocksLocalPort := FSocksResponsePort; FSocksRemoteIP := ''; FSocksRemotePort := ''; ExceptCheck; DoStatus(HR_Listen, ''); end; end; function TTCPBlockSocket.Accept: TSocket; begin if FUsingSocks then begin if not SocksResponse and (FLastError = 0) then FLastError := WSANO_RECOVERY; FSocksRemoteIP := FSocksResponseIP; FSocksRemotePort := FSocksResponsePort; Result := FSocket; ExceptCheck; DoStatus(HR_Accept, ''); end else begin result := inherited Accept; end; end; procedure TTCPBlockSocket.Connect(IP, Port: string); begin if FSocksIP <> '' then SocksDoConnect(IP, Port) else if FHTTPTunnelIP <> '' then HTTPTunnelDoConnect(IP, Port) else inherited Connect(IP, Port); if FLasterror = 0 then DoAfterConnect; end; procedure TTCPBlockSocket.SocksDoConnect(IP, Port: string); var b: Boolean; begin inherited Connect(FSocksIP, FSocksPort); if FLastError = 0 then begin b := SocksOpen; if b then b := SocksRequest(1, IP, Port); if b then b := SocksResponse; if not b and (FLastError = 0) then FLastError := WSASYSNOTREADY; FSocksLocalIP := FSocksResponseIP; FSocksLocalPort := FSocksResponsePort; FSocksRemoteIP := IP; FSocksRemotePort := Port; end; ExceptCheck; DoStatus(HR_Connect, IP + ':' + Port); end; procedure TTCPBlockSocket.HTTPTunnelDoConnect(IP, Port: string); //bugfixed by Mike Green (mgreen@emixode.com) var s: string; begin Port := IntToStr(ResolvePort(Port)); inherited Connect(FHTTPTunnelIP, FHTTPTunnelPort); if FLastError <> 0 then Exit; FHTTPTunnel := False; if IsIP6(IP) then IP := '[' + IP + ']'; SendString('CONNECT ' + IP + ':' + Port + ' HTTP/1.0' + CRLF); if FHTTPTunnelUser <> '' then Sendstring('Proxy-Authorization: Basic ' + EncodeBase64(FHTTPTunnelUser + ':' + FHTTPTunnelPass) + CRLF); SendString(CRLF); repeat s := RecvTerminated(FHTTPTunnelTimeout, #$0a); if FLastError <> 0 then Break; if (Pos('HTTP/', s) = 1) and (Length(s) > 11) then FHTTPTunnel := s[10] = '2'; until (s = '') or (s = #$0d); if (FLasterror = 0) and not FHTTPTunnel then FLastError := WSAECONNREFUSED; FHTTPTunnelRemoteIP := IP; FHTTPTunnelRemotePort := Port; ExceptCheck; end; procedure TTCPBlockSocket.SSLDoConnect; begin ResetLastError; if not FSSL.Connect then FLastError := WSASYSNOTREADY; ExceptCheck; end; procedure TTCPBlockSocket.SSLDoShutdown; begin ResetLastError; FSSL.BiShutdown; end; function TTCPBlockSocket.GetLocalSinIP: string; begin if FUsingSocks then Result := FSocksLocalIP else Result := inherited GetLocalSinIP; end; function TTCPBlockSocket.GetRemoteSinIP: string; begin if FUsingSocks then Result := FSocksRemoteIP else if FHTTPTunnel then Result := FHTTPTunnelRemoteIP else Result := inherited GetRemoteSinIP; end; function TTCPBlockSocket.GetLocalSinPort: Integer; begin if FUsingSocks then Result := StrToIntDef(FSocksLocalPort, 0) else Result := inherited GetLocalSinPort; end; function TTCPBlockSocket.GetRemoteSinPort: Integer; begin if FUsingSocks then Result := ResolvePort(FSocksRemotePort) else if FHTTPTunnel then Result := StrToIntDef(FHTTPTunnelRemotePort, 0) else Result := inherited GetRemoteSinPort; end; function TTCPBlockSocket.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; begin if FSSL.SSLEnabled then begin Result := 0; if TestStopFlag then Exit; ResetLastError; LimitBandwidth(Len, FMaxRecvBandwidth, FNextRecv); Result := FSSL.RecvBuffer(Buffer, Len); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; ExceptCheck; Inc(FRecvCounter, Result); DoStatus(HR_ReadCount, IntToStr(Result)); DoMonitor(False, Buffer, Result); DoReadFilter(Buffer, Result); end else Result := inherited RecvBuffer(Buffer, Len); end; function TTCPBlockSocket.SendBuffer(Buffer: TMemory; Length: Integer): Integer; var x, y: integer; l, r: integer; {$IFNDEF CIL} p: Pointer; {$ENDIF} begin if FSSL.SSLEnabled then begin Result := 0; if TestStopFlag then Exit; ResetLastError; DoMonitor(True, Buffer, Length); {$IFDEF CIL} Result := FSSL.SendBuffer(Buffer, Length); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; Inc(FSendCounter, Result); DoStatus(HR_WriteCount, IntToStr(Result)); {$ELSE} l := Length; x := 0; while x < l do begin y := l - x; if y > FSendMaxChunk then y := FSendMaxChunk; if y > 0 then begin LimitBandwidth(y, FMaxSendBandwidth, FNextsend); p := IncPoint(Buffer, x); r := FSSL.SendBuffer(p, y); if FSSL.LastError <> 0 then FLastError := WSASYSNOTREADY; if Flasterror <> 0 then Break; Inc(x, r); Inc(Result, r); Inc(FSendCounter, r); DoStatus(HR_WriteCount, IntToStr(r)); end else break; end; {$ENDIF} ExceptCheck; end else Result := inherited SendBuffer(Buffer, Length); end; function TTCPBlockSocket.SSLAcceptConnection: Boolean; begin ResetLastError; if not FSSL.Accept then FLastError := WSASYSNOTREADY; ExceptCheck; Result := FLastError = 0; end; function TTCPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_STREAM); end; function TTCPBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_TCP); end; {======================================================================} function TICMPBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RAW); end; function TICMPBlockSocket.GetSocketProtocol: integer; begin if FIP6Used then Result := integer(IPPROTO_ICMPV6) else Result := integer(IPPROTO_ICMP); end; {======================================================================} function TRAWBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RAW); end; function TRAWBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RAW); end; {======================================================================} function TPGMmessageBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_RDM); end; function TPGMmessageBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RM); end; {======================================================================} function TPGMstreamBlockSocket.GetSocketType: integer; begin Result := integer(SOCK_STREAM); end; function TPGMstreamBlockSocket.GetSocketProtocol: integer; begin Result := integer(IPPROTO_RM); end; {======================================================================} constructor TSynaClient.Create; begin inherited Create; FIPInterface := cAnyHost; FTargetHost := cLocalhost; FTargetPort := cAnyPort; FTimeout := 5000; FUsername := ''; FPassword := ''; end; {======================================================================} constructor TCustomSSL.Create(const Value: TTCPBlockSocket); begin inherited Create; FSocket := Value; FSSLEnabled := False; FUsername := ''; FPassword := ''; FLastError := 0; FLastErrorDesc := ''; FVerifyCert := False; FSSLType := LT_all; FKeyPassword := ''; FCiphers := ''; FCertificateFile := ''; FPrivateKeyFile := ''; FCertCAFile := ''; FCertCA := ''; FTrustCertificate := ''; FTrustCertificateFile := ''; FCertificate := ''; FPrivateKey := ''; FPFX := ''; FPFXfile := ''; FSSHChannelType := ''; FSSHChannelArg1 := ''; FSSHChannelArg2 := ''; FCertComplianceLevel := -1; //default FSNIHost := ''; end; procedure TCustomSSL.Assign(const Value: TCustomSSL); begin FUsername := Value.Username; FPassword := Value.Password; FVerifyCert := Value.VerifyCert; FSSLType := Value.SSLType; FKeyPassword := Value.KeyPassword; FCiphers := Value.Ciphers; FCertificateFile := Value.CertificateFile; FPrivateKeyFile := Value.PrivateKeyFile; FCertCAFile := Value.CertCAFile; FCertCA := Value.CertCA; FTrustCertificate := Value.TrustCertificate; FTrustCertificateFile := Value.TrustCertificateFile; FCertificate := Value.Certificate; FPrivateKey := Value.PrivateKey; FPFX := Value.PFX; FPFXfile := Value.PFXfile; FCertComplianceLevel := Value.CertComplianceLevel; FSNIHost := Value.FSNIHost; end; procedure TCustomSSL.ReturnError; begin FLastError := -1; FLastErrorDesc := 'SSL/TLS support is not compiled!'; end; function TCustomSSL.LibVersion: String; begin Result := ''; end; function TCustomSSL.LibName: String; begin Result := ''; end; function TCustomSSL.CreateSelfSignedCert(Host: string): Boolean; begin Result := False; end; function TCustomSSL.Connect: boolean; begin ReturnError; Result := False; end; function TCustomSSL.Accept: boolean; begin ReturnError; Result := False; end; function TCustomSSL.Shutdown: boolean; begin ReturnError; Result := False; end; function TCustomSSL.BiShutdown: boolean; begin ReturnError; Result := False; end; function TCustomSSL.SendBuffer(Buffer: TMemory; Len: Integer): Integer; begin ReturnError; Result := integer(SOCKET_ERROR); end; procedure TCustomSSL.SetCertCAFile(const Value: string); begin FCertCAFile := Value; end; function TCustomSSL.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; begin ReturnError; Result := integer(SOCKET_ERROR); end; function TCustomSSL.WaitingData: Integer; begin ReturnError; Result := 0; end; function TCustomSSL.GetSSLVersion: string; begin Result := ''; end; function TCustomSSL.GetPeerSubject: string; begin Result := ''; end; function TCustomSSL.GetPeerSerialNo: integer; begin Result := -1; end; function TCustomSSL.GetPeerName: string; begin Result := ''; end; function TCustomSSL.GetPeerNameHash: cardinal; begin Result := 0; end; function TCustomSSL.GetPeerIssuer: string; begin Result := ''; end; function TCustomSSL.GetPeerFingerprint: string; begin Result := ''; end; function TCustomSSL.GetCertInfo: string; begin Result := ''; end; function TCustomSSL.GetCipherName: string; begin Result := ''; end; function TCustomSSL.GetCipherBits: integer; begin Result := 0; end; function TCustomSSL.GetCipherAlgBits: integer; begin Result := 0; end; function TCustomSSL.GetVerifyCert: integer; begin Result := 1; end; function TCustomSSL.DoVerifyCert:boolean; begin if assigned(OnVerifyCert) then begin result:=OnVerifyCert(Self); end else result:=true; end; {======================================================================} function TSSLNone.LibVersion: String; begin Result := 'Without SSL support'; end; function TSSLNone.LibName: String; begin Result := 'ssl_none'; end; {======================================================================} initialization begin {$IFDEF ONCEWINSOCK} if not InitSocketInterface(DLLStackName) then begin e := ESynapseError.Create('Error loading Socket interface (' + DLLStackName + ')!'); e.ErrorCode := 0; e.ErrorMessage := 'Error loading Socket interface (' + DLLStackName + ')!'; raise e; end; synsock.WSAStartup(WinsockLevel, WsaDataOnce); {$ENDIF} end; finalization begin {$IFDEF ONCEWINSOCK} synsock.WSACleanup; DestroySocketInterface; {$ENDIF} end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_openssl_ver.pas0000755000175000001440000001157212561623013023212 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 003.004.001 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2005, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2002-2005. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Alexander Koblov | | Ales Katona (Try to load all library versions until you find or run out) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} unit ssl_openssl_ver; {$mode delphi} interface implementation uses blcksock, ssl_openssl, ssl_openssl_lib; const LibSSLName = 'libssl'; LibUtilName = 'libcrypto'; { ADD NEW ONES WHEN THEY APPEAR! Always make .so/dylib first, then versions, in descending order! Add "." .before the version, first is always just "" } LibVersions: array[1..16] of String = ('', '.1.0.6', '.1.0.5', '.1.0.4', '.1.0.3', '.1.0.2', '.1.0.1','.1.0.0','.0.9.8', '.0.9.7', '.0.9.6', '.0.9.5', '.0.9.4', '.0.9.3', '.0.9.2', '.0.9.1'); function GetLibraryName(const Value: String; Index: Integer): String; begin {$IFDEF DARWIN} Result := Value + LibVersions[Index] + '.dylib'; {$ELSE} Result := Value + '.so' + LibVersions[Index]; {$ENDIF} end; var Index: Integer; begin if not IsSSLloaded then begin for Index := Low(LibVersions) to High(LibVersions) do begin DLLSSLName := GetLibraryName(LibSSLName, Index); DLLUtilName := GetLibraryName(LibUtilName, Index); if InitSSLInterface then begin SSLImplementation:= TSSLOpenSSL; Break; end; end; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_openssl.pas0000644000175000001440000005637512560221450022343 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 001.002.001 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2012, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2005-2012. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} //requires OpenSSL libraries! {:@abstract(SSL plugin for OpenSSL) You need OpenSSL libraries version 0.9.7. It can work with 0.9.6 too, but application mysteriously crashing when you are using freePascal on Linux. Use Kylix on Linux is OK! If you have version 0.9.7 on Linux, then I not see any problems with FreePascal. OpenSSL libraries are loaded dynamicly - you not need OpenSSl librares even you compile your application with this unit. SSL just not working when you not have OpenSSL libraries. This plugin have limited support for .NET too! Because is not possible to use callbacks with CDECL calling convention under .NET, is not supported key/certificate passwords and multithread locking. :-( For handling keys and certificates you can use this properties: @link(TCustomSSL.CertificateFile) for PEM or ASN1 DER (cer) format. @br @link(TCustomSSL.Certificate) for ASN1 DER format only. @br @link(TCustomSSL.PrivateKeyFile) for PEM or ASN1 DER (key) format. @br @link(TCustomSSL.PrivateKey) for ASN1 DER format only. @br @link(TCustomSSL.CertCAFile) for PEM CA certificate bundle. @br @link(TCustomSSL.PFXFile) for PFX format. @br @link(TCustomSSL.PFX) for PFX format from binary string. @br This plugin is capable to create Ad-Hoc certificates. When you start SSL/TLS server without explicitly assigned key and certificate, then this plugin create Ad-Hoc key and certificate for each incomming connection by self. It slowdown accepting of new connections! } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit ssl_openssl; interface uses SysUtils, Classes, blcksock, synsock, synautil, {$IFDEF CIL} System.Text, {$ENDIF} ssl_openssl_lib; type {:@abstract(class implementing OpenSSL SSL plugin.) Instance of this class will be created for each @link(TTCPBlockSocket). You not need to create instance of this class, all is done by Synapse itself!} TSSLOpenSSL = class(TCustomSSL) protected FSsl: PSSL; Fctx: PSSL_CTX; function SSLCheck: Boolean; function SetSslKeys: boolean; function Init(server:Boolean): Boolean; function DeInit: Boolean; function Prepare(server:Boolean): Boolean; function LoadPFX(pfxdata: ansistring): Boolean; function CreateSelfSignedCert(Host: string): Boolean; override; public {:See @inherited} constructor Create(const Value: TTCPBlockSocket); override; destructor Destroy; override; {:See @inherited} function LibVersion: String; override; {:See @inherited} function LibName: String; override; {:See @inherited and @link(ssl_cryptlib) for more details.} function Connect: boolean; override; {:See @inherited and @link(ssl_cryptlib) for more details.} function Accept: boolean; override; {:See @inherited} function Shutdown: boolean; override; {:See @inherited} function BiShutdown: boolean; override; {:See @inherited} function SendBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function RecvBuffer(Buffer: TMemory; Len: Integer): Integer; override; {:See @inherited} function WaitingData: Integer; override; {:See @inherited} function GetSSLVersion: string; override; {:See @inherited} function GetPeerSubject: string; override; {:See @inherited} function GetPeerSerialNo: integer; override; {pf} {:See @inherited} function GetPeerIssuer: string; override; {:See @inherited} function GetPeerName: string; override; {:See @inherited} function GetPeerNameHash: cardinal; override; {pf} {:See @inherited} function GetPeerFingerprint: string; override; {:See @inherited} function GetCertInfo: string; override; {:See @inherited} function GetCipherName: string; override; {:See @inherited} function GetCipherBits: integer; override; {:See @inherited} function GetCipherAlgBits: integer; override; {:See @inherited} function GetVerifyCert: integer; override; end; implementation {==============================================================================} {$IFNDEF CIL} function PasswordCallback(buf:PAnsiChar; size:Integer; rwflag:Integer; userdata: Pointer):Integer; cdecl; var Password: AnsiString; begin Password := ''; if TCustomSSL(userdata) is TCustomSSL then Password := TCustomSSL(userdata).KeyPassword; if Length(Password) > (Size - 1) then SetLength(Password, Size - 1); Result := Length(Password); StrLCopy(buf, PAnsiChar(Password + #0), Result + 1); end; {$ENDIF} {==============================================================================} constructor TSSLOpenSSL.Create(const Value: TTCPBlockSocket); begin inherited Create(Value); FCiphers := 'DEFAULT'; FSsl := nil; Fctx := nil; end; destructor TSSLOpenSSL.Destroy; begin DeInit; inherited Destroy; end; function TSSLOpenSSL.LibVersion: String; begin Result := SSLeayversion(0); end; function TSSLOpenSSL.LibName: String; begin Result := 'ssl_openssl'; end; function TSSLOpenSSL.SSLCheck: Boolean; var {$IFDEF CIL} sb: StringBuilder; {$ENDIF} s : AnsiString; begin Result := true; FLastErrorDesc := ''; FLastError := ErrGetError; ErrClearError; if FLastError <> 0 then begin Result := False; {$IFDEF CIL} sb := StringBuilder.Create(256); ErrErrorString(FLastError, sb, 256); FLastErrorDesc := Trim(sb.ToString); {$ELSE} s := StringOfChar(#0, 256); ErrErrorString(FLastError, s, Length(s)); FLastErrorDesc := s; {$ENDIF} end; end; function TSSLOpenSSL.CreateSelfSignedCert(Host: string): Boolean; var pk: EVP_PKEY; x: PX509; rsa: PRSA; t: PASN1_UTCTIME; name: PX509_NAME; b: PBIO; xn, y: integer; s: AnsiString; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin Result := True; pk := EvpPkeynew; x := X509New; try rsa := RsaGenerateKey(1024, $10001, nil, nil); EvpPkeyAssign(pk, EVP_PKEY_RSA, rsa); X509SetVersion(x, 2); Asn1IntegerSet(X509getSerialNumber(x), 0); t := Asn1UtctimeNew; try X509GmtimeAdj(t, -60 * 60 *24); X509SetNotBefore(x, t); X509GmtimeAdj(t, 60 * 60 * 60 *24); X509SetNotAfter(x, t); finally Asn1UtctimeFree(t); end; X509SetPubkey(x, pk); Name := X509GetSubjectName(x); X509NameAddEntryByTxt(Name, 'C', $1001, 'CZ', -1, -1, 0); X509NameAddEntryByTxt(Name, 'CN', $1001, host, -1, -1, 0); x509SetIssuerName(x, Name); x509Sign(x, pk, EvpGetDigestByName('SHA1')); b := BioNew(BioSMem); try i2dX509Bio(b, x); xn := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(xn); y := bioread(b, sb, xn); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s, xn); y := bioread(b, s, xn); if y > 0 then setlength(s, y); {$ENDIF} finally BioFreeAll(b); end; FCertificate := s; b := BioNew(BioSMem); try i2dPrivatekeyBio(b, pk); xn := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(xn); y := bioread(b, sb, xn); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s, xn); y := bioread(b, s, xn); if y > 0 then setlength(s, y); {$ENDIF} finally BioFreeAll(b); end; FPrivatekey := s; finally X509free(x); EvpPkeyFree(pk); end; end; function TSSLOpenSSL.LoadPFX(pfxdata: Ansistring): Boolean; var cert, pkey, ca: SslPtr; b: PBIO; p12: SslPtr; begin Result := False; b := BioNew(BioSMem); try BioWrite(b, pfxdata, Length(PfxData)); p12 := d2iPKCS12bio(b, nil); if not Assigned(p12) then Exit; try cert := nil; pkey := nil; ca := nil; try {pf} if PKCS12parse(p12, FKeyPassword, pkey, cert, ca) > 0 then if SSLCTXusecertificate(Fctx, cert) > 0 then if SSLCTXusePrivateKey(Fctx, pkey) > 0 then Result := True; {pf} finally EvpPkeyFree(pkey); X509free(cert); SkX509PopFree(ca,_X509Free); // for ca=nil a new STACK was allocated... end; {/pf} finally PKCS12free(p12); end; finally BioFreeAll(b); end; end; function TSSLOpenSSL.SetSslKeys: boolean; var st: TFileStream; s: string; begin Result := False; if not assigned(FCtx) then Exit; try if FCertificateFile <> '' then if SslCtxUseCertificateChainFile(FCtx, FCertificateFile) <> 1 then if SslCtxUseCertificateFile(FCtx, FCertificateFile, SSL_FILETYPE_PEM) <> 1 then if SslCtxUseCertificateFile(FCtx, FCertificateFile, SSL_FILETYPE_ASN1) <> 1 then Exit; if FCertificate <> '' then if SslCtxUseCertificateASN1(FCtx, length(FCertificate), FCertificate) <> 1 then Exit; SSLCheck; if FPrivateKeyFile <> '' then if SslCtxUsePrivateKeyFile(FCtx, FPrivateKeyFile, SSL_FILETYPE_PEM) <> 1 then if SslCtxUsePrivateKeyFile(FCtx, FPrivateKeyFile, SSL_FILETYPE_ASN1) <> 1 then Exit; if FPrivateKey <> '' then if SslCtxUsePrivateKeyASN1(EVP_PKEY_RSA, FCtx, FPrivateKey, length(FPrivateKey)) <> 1 then Exit; SSLCheck; if FCertCAFile <> '' then if SslCtxLoadVerifyLocations(FCtx, FCertCAFile, '') <> 1 then Exit; if FPFXfile <> '' then begin try st := TFileStream.Create(FPFXfile, fmOpenRead or fmShareDenyNone); try s := ReadStrFromStream(st, st.Size); finally st.Free; end; if not LoadPFX(s) then Exit; except on Exception do Exit; end; end; if FPFX <> '' then if not LoadPFX(FPfx) then Exit; SSLCheck; Result := True; finally SSLCheck; end; end; function TSSLOpenSSL.Init(server:Boolean): Boolean; var s: AnsiString; begin Result := False; FLastErrorDesc := ''; FLastError := 0; Fctx := nil; case FSSLType of LT_SSLv2: Fctx := SslCtxNew(SslMethodV2); LT_SSLv3: Fctx := SslCtxNew(SslMethodV3); LT_TLSv1: Fctx := SslCtxNew(SslMethodTLSV1); LT_TLSv1_1: Fctx := SslCtxNew(SslMethodTLSV11); LT_TLSv1_2: Fctx := SslCtxNew(SslMethodTLSV12); LT_all: Fctx := SslCtxNew(SslMethodV23); else Exit; end; if Fctx = nil then begin SSLCheck; Exit; end else begin s := FCiphers; SslCtxSetCipherList(Fctx, s); if FVerifyCert then SslCtxSetVerify(FCtx, SSL_VERIFY_PEER, nil) else SslCtxSetVerify(FCtx, SSL_VERIFY_NONE, nil); {$IFNDEF CIL} SslCtxSetDefaultPasswdCb(FCtx, @PasswordCallback); SslCtxSetDefaultPasswdCbUserdata(FCtx, self); {$ENDIF} if server and (FCertificateFile = '') and (FCertificate = '') and (FPFXfile = '') and (FPFX = '') then begin CreateSelfSignedcert(FSocket.ResolveIPToName(FSocket.GetRemoteSinIP)); end; if not SetSSLKeys then Exit else begin Fssl := nil; Fssl := SslNew(Fctx); if Fssl = nil then begin SSLCheck; exit; end; end; end; Result := true; end; function TSSLOpenSSL.DeInit: Boolean; begin Result := True; if assigned (Fssl) then sslfree(Fssl); Fssl := nil; if assigned (Fctx) then begin SslCtxFree(Fctx); Fctx := nil; ErrRemoveState(0); end; FSSLEnabled := False; end; function TSSLOpenSSL.Prepare(server:Boolean): Boolean; begin Result := false; DeInit; if Init(server) then Result := true else DeInit; end; function TSSLOpenSSL.Connect: boolean; var x: integer; b: boolean; err: integer; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; if Prepare(False) then begin {$IFDEF CIL} if sslsetfd(FSsl, FSocket.Socket.Handle.ToInt32) < 1 then {$ELSE} if sslsetfd(FSsl, FSocket.Socket) < 1 then {$ENDIF} begin SSLCheck; Exit; end; if SNIHost<>'' then SSLCtrl(Fssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, PAnsiChar(AnsiString(SNIHost))); if FSocket.ConnectionTimeout <= 0 then //do blocking call of SSL_Connect begin x := sslconnect(FSsl); if x < 1 then begin SSLcheck; Exit; end; end else //do non-blocking call of SSL_Connect begin b := Fsocket.NonBlockMode; Fsocket.NonBlockMode := true; repeat x := sslconnect(FSsl); err := SslGetError(FSsl, x); if err = SSL_ERROR_WANT_READ then if not FSocket.CanRead(FSocket.ConnectionTimeout) then break; if err = SSL_ERROR_WANT_WRITE then if not FSocket.CanWrite(FSocket.ConnectionTimeout) then break; until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); Fsocket.NonBlockMode := b; if err <> SSL_ERROR_NONE then begin SSLcheck; Exit; end; end; if FverifyCert then if (GetVerifyCert <> 0) or (not DoVerifyCert) then Exit; FSSLEnabled := True; Result := True; end; end; function TSSLOpenSSL.Accept: boolean; var x: integer; begin Result := False; if FSocket.Socket = INVALID_SOCKET then Exit; if Prepare(True) then begin {$IFDEF CIL} if sslsetfd(FSsl, FSocket.Socket.Handle.ToInt32) < 1 then {$ELSE} if sslsetfd(FSsl, FSocket.Socket) < 1 then {$ENDIF} begin SSLCheck; Exit; end; x := sslAccept(FSsl); if x < 1 then begin SSLcheck; Exit; end; FSSLEnabled := True; Result := True; end; end; function TSSLOpenSSL.Shutdown: boolean; begin if assigned(FSsl) then sslshutdown(FSsl); DeInit; Result := True; end; function TSSLOpenSSL.BiShutdown: boolean; var x: integer; begin if assigned(FSsl) then begin x := sslshutdown(FSsl); if x = 0 then begin Synsock.Shutdown(FSocket.Socket, 1); sslshutdown(FSsl); end; end; DeInit; Result := True; end; function TSSLOpenSSL.SendBuffer(Buffer: TMemory; Len: Integer): Integer; var err: integer; {$IFDEF CIL} s: ansistring; {$ENDIF} begin FLastError := 0; FLastErrorDesc := ''; repeat {$IFDEF CIL} s := StringOf(Buffer); Result := SslWrite(FSsl, s, Len); {$ELSE} Result := SslWrite(FSsl, Buffer , Len); {$ENDIF} err := SslGetError(FSsl, Result); until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); if err = SSL_ERROR_ZERO_RETURN then Result := 0 else if (err <> 0) then FLastError := err; end; function TSSLOpenSSL.RecvBuffer(Buffer: TMemory; Len: Integer): Integer; var err: integer; {$IFDEF CIL} sb: stringbuilder; s: ansistring; {$ENDIF} begin FLastError := 0; FLastErrorDesc := ''; repeat {$IFDEF CIL} sb := StringBuilder.Create(Len); Result := SslRead(FSsl, sb, Len); if Result > 0 then begin sb.Length := Result; s := sb.ToString; System.Array.Copy(BytesOf(s), Buffer, length(s)); end; {$ELSE} Result := SslRead(FSsl, Buffer , Len); {$ENDIF} err := SslGetError(FSsl, Result); until (err <> SSL_ERROR_WANT_READ) and (err <> SSL_ERROR_WANT_WRITE); if err = SSL_ERROR_ZERO_RETURN then Result := 0 {pf}// Verze 1.1.0 byla s else tak jak to ted mam, // ve verzi 1.1.1 bylo ELSE zruseno, ale pak je SSL_ERROR_ZERO_RETURN // propagovano jako Chyba. {pf} else {/pf} if (err <> 0) then FLastError := err; end; function TSSLOpenSSL.WaitingData: Integer; begin Result := sslpending(Fssl); end; function TSSLOpenSSL.GetSSLVersion: string; begin if not assigned(FSsl) then Result := '' else Result := SSlGetVersion(FSsl); end; function TSSLOpenSSL.GetPeerSubject: string; var cert: PX509; s: ansistring; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(4096); Result := X509NameOneline(X509GetSubjectName(cert), sb, 4096); {$ELSE} setlength(s, 4096); Result := X509NameOneline(X509GetSubjectName(cert), s, Length(s)); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetPeerSerialNo: integer; {pf} var cert: PX509; SN: PASN1_INTEGER; begin if not assigned(FSsl) then begin Result := -1; Exit; end; cert := SSLGetPeerCertificate(Fssl); try if not assigned(cert) then begin Result := -1; Exit; end; SN := X509GetSerialNumber(cert); Result := Asn1IntegerGet(SN); finally X509Free(cert); end; end; function TSSLOpenSSL.GetPeerName: string; var s: ansistring; begin s := GetPeerSubject; s := SeparateRight(s, '/CN='); Result := Trim(SeparateLeft(s, '/')); end; function TSSLOpenSSL.GetPeerNameHash: cardinal; {pf} var cert: PX509; begin if not assigned(FSsl) then begin Result := 0; Exit; end; cert := SSLGetPeerCertificate(Fssl); try if not assigned(cert) then begin Result := 0; Exit; end; Result := X509NameHash(X509GetSubjectName(cert)); finally X509Free(cert); end; end; function TSSLOpenSSL.GetPeerIssuer: string; var cert: PX509; s: ansistring; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(4096); Result := X509NameOneline(X509GetIssuerName(cert), sb, 4096); {$ELSE} setlength(s, 4096); Result := X509NameOneline(X509GetIssuerName(cert), s, Length(s)); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetPeerFingerprint: string; var cert: PX509; x: integer; {$IFDEF CIL} sb: StringBuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; {$IFDEF CIL} sb := StringBuilder.Create(EVP_MAX_MD_SIZE); X509Digest(cert, EvpGetDigestByName('MD5'), sb, x); sb.Length := x; Result := sb.ToString; {$ELSE} setlength(Result, EVP_MAX_MD_SIZE); X509Digest(cert, EvpGetDigestByName('MD5'), Result, x); SetLength(Result, x); {$ENDIF} X509Free(cert); end; function TSSLOpenSSL.GetCertInfo: string; var cert: PX509; x, y: integer; b: PBIO; s: AnsiString; {$IFDEF CIL} sb: stringbuilder; {$ENDIF} begin if not assigned(FSsl) then begin Result := ''; Exit; end; cert := SSLGetPeerCertificate(Fssl); if not assigned(cert) then begin Result := ''; Exit; end; try {pf} b := BioNew(BioSMem); try X509Print(b, cert); x := bioctrlpending(b); {$IFDEF CIL} sb := StringBuilder.Create(x); y := bioread(b, sb, x); if y > 0 then begin sb.Length := y; s := sb.ToString; end; {$ELSE} setlength(s,x); y := bioread(b,s,x); if y > 0 then setlength(s, y); {$ENDIF} Result := ReplaceString(s, LF, CRLF); finally BioFreeAll(b); end; {pf} finally X509Free(cert); end; {/pf} end; function TSSLOpenSSL.GetCipherName: string; begin if not assigned(FSsl) then Result := '' else Result := SslCipherGetName(SslGetCurrentCipher(FSsl)); end; function TSSLOpenSSL.GetCipherBits: integer; var x: integer; begin if not assigned(FSsl) then Result := 0 else Result := SSLCipherGetBits(SslGetCurrentCipher(FSsl), x); end; function TSSLOpenSSL.GetCipherAlgBits: integer; begin if not assigned(FSsl) then Result := 0 else SSLCipherGetBits(SslGetCurrentCipher(FSsl), Result); end; function TSSLOpenSSL.GetVerifyCert: integer; begin if not assigned(FSsl) then Result := 1 else Result := SslGetVerifyResult(FSsl); end; {==============================================================================} initialization if InitSSLInterface then SSLImplementation := TSSLOpenSSL; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_gnutls_lib.inc0000644000175000001440000000073712561610546023010 0ustar alexxusersexports SSL_library_init, SSL_set_fd, SSL_CTX_new, SSL_CTX_free, SSL_new, SSL_free, SSL_connect, SSL_shutdown, SSL_read, SSL_write, SSL_pending, SSLv23_method, SSLv2_method, SSLv3_method, TLSv1_method, TLSv1_1_method, TLSv1_2_method, SSL_CTX_set_verify, SSL_CTX_use_certificate_file, SSL_CTX_use_PrivateKey_file, SSL_get_error, SSL_get_current_cipher, SSL_CIPHER_get_name, SSL_CIPHER_get_bits, ERR_get_error, ERR_error_string; doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_winssl_lib.pas0000644000175000001440000006415412561613237023030 0ustar alexxusers{ SChannel to OpenSSL wrapper Copyright (c) 2008 Boris Krasnovskiy Copyright (c) 2013-2015 Alexander Koblov (pascal port) 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. 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, see . } unit ssl_winssl_lib; {$mode delphi} interface uses Windows, SynSock, JwaSspi, CTypes; type PSSL_CTX = ^SSL_CTX; SSL_CTX = record dwProtocol: DWORD; bVerify: BOOL; end; PSSL_METHOD = ^SSL_METHOD; SSL_METHOD = record dummy: DWORD; end; PSSL = ^SSL; SSL = record s: TSocket; ctx: PSSL_CTX; hContext: CtxtHandle; hCreds: CredHandle; pbRecDataBuf: PByte; cbRecDataBuf: LONG; sbRecDataBuf: LONG; pbIoBuffer: PByte; cbIoBuffer: LONG; sbIoBuffer: LONG; exIoBuffer: BOOL; rmshtdn: BOOL; end; function SSL_library_init(): cint; cdecl; function SSL_set_fd(ssl: PSSL; fd: cint): cint; cdecl; function SSL_CTX_new(method: PSSL_METHOD): PSSL_CTX; cdecl; procedure SSL_CTX_free(ctx: PSSL_CTX); cdecl; function SSL_new(ctx: PSSL_CTX): PSSL; cdecl; procedure SSL_free(ssl: PSSL); cdecl; function SSL_connect(ssl: PSSL): cint; cdecl; function SSL_shutdown(ssl: PSSL): cint; cdecl; function SSL_read(ssl: PSSL; buf: PByte; num: cint): cint; cdecl; function SSL_write(ssl: PSSL; const buf: PByte; num: cint): cint; cdecl; function SSL_pending(ssl: PSSL): cint; cdecl; function SSLv23_method(): PSSL_METHOD; cdecl; function SSLv2_method(): PSSL_METHOD; cdecl; function SSLv3_method(): PSSL_METHOD; cdecl; function TLSv1_method(): PSSL_METHOD; cdecl; function TLSv1_1_method(): PSSL_METHOD; cdecl; function TLSv1_2_method(): PSSL_METHOD; cdecl; procedure SSL_CTX_set_verify(ctx: PSSL_CTX; mode: cint; func: Pointer); cdecl; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; implementation uses JwaWinError, ssl_openssl_lib, blcksock, ssl_openssl; const SCHANNEL_CRED_VERSION = $00000004; const SCH_CRED_MANUAL_CRED_VALIDATION = $00000008; SCH_CRED_NO_DEFAULT_CREDS = $00000010; const SCHANNEL_SHUTDOWN = 1; // gracefully close down a connection const SP_PROT_SSL2_SERVER = $00000004; SP_PROT_SSL2_CLIENT = $00000008; SP_PROT_SSL2 = (SP_PROT_SSL2_SERVER or SP_PROT_SSL2_CLIENT); SP_PROT_SSL3_SERVER = $00000010; SP_PROT_SSL3_CLIENT = $00000020; SP_PROT_SSL3 = (SP_PROT_SSL3_SERVER or SP_PROT_SSL3_CLIENT); SP_PROT_TLS1_SERVER = $00000040; SP_PROT_TLS1_CLIENT = $00000080; SP_PROT_TLS1 = (SP_PROT_TLS1_SERVER or SP_PROT_TLS1_CLIENT); SP_PROT_TLS1_1_SERVER = $00000100; SP_PROT_TLS1_1_CLIENT = $00000200; SP_PROT_TLS1_1 = (SP_PROT_TLS1_1_SERVER or SP_PROT_TLS1_1_CLIENT); SP_PROT_TLS1_2_SERVER = $00000400; SP_PROT_TLS1_2_CLIENT = $00000800; SP_PROT_TLS1_2 = (SP_PROT_TLS1_2_SERVER or SP_PROT_TLS1_2_CLIENT); const UNISP_NAME_A = AnsiString('Microsoft Unified Security Protocol Provider'); UNISP_NAME_W = WideString('Microsoft Unified Security Protocol Provider'); type ALG_ID = type cuint; HCERTSTORE = type HANDLE; PCCERT_CONTEXT = type Pointer; type SCHANNEL_CRED = record dwVersion: DWORD; cCreds: DWORD; paCred: PCCERT_CONTEXT; hRootStore: HCERTSTORE; cMappers: DWORD; aphMappers: Pointer; cSupportedAlgs: DWORD; palgSupportedAlgs: ^ALG_ID; grbitEnabledProtocols: DWORD; dwMinimumCipherStrength: DWORD; dwMaximumCipherStrength: DWORD; dwSessionLifespan: DWORD; dwFlags: DWORD; dwCredFormat: DWORD; end; var g_hSecurity: HMODULE; g_pSSPI: PSecurityFunctionTableA; function SSL_library_init(): cint; cdecl; var pInitSecurityInterface: INIT_SECURITY_INTERFACE_A; begin if (g_hSecurity <> 0) then Exit(1); g_hSecurity:= LoadLibraryA('schannel.dll'); if (g_hSecurity = 0) then Exit(0); pInitSecurityInterface := INIT_SECURITY_INTERFACE_A(GetProcAddress(g_hSecurity, SECURITY_ENTRYPOINT_ANSIA)); if (pInitSecurityInterface <> nil) then g_pSSPI := pInitSecurityInterface(); if (g_pSSPI = nil) then begin FreeLibrary(g_hSecurity); g_hSecurity := 0; Exit(0); end; Result := 1; end; function SSL_set_fd(ssl: PSSL; fd: cint): cint; cdecl; begin if (ssl = nil) then Exit(0); ssl^.s := TSocket(fd); Result := 1; end; function SSL_CTX_new(method: PSSL_METHOD): PSSL_CTX; cdecl; begin if (g_hSecurity = 0) then Exit(nil); Result := GetMem(SizeOf(SSL_CTX)); Result^.dwProtocol := DWORD(method); end; procedure SSL_CTX_free(ctx: PSSL_CTX); cdecl; begin FreeMem(ctx); end; function SSL_new(ctx: PSSL_CTX): PSSL; cdecl; var SchannelCred: SCHANNEL_CRED; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; begin if (ctx = nil) then Exit(nil); Result := GetMem(SizeOf(SSL)); ZeroMemory(Result, SizeOf(SSL)); Result^.ctx := ctx; ZeroMemory(@SchannelCred, SizeOf(SchannelCred)); SchannelCred.dwVersion := SCHANNEL_CRED_VERSION; SchannelCred.grbitEnabledProtocols := ctx^.dwProtocol; SchannelCred.dwFlags := SchannelCred.dwFlags or SCH_CRED_NO_DEFAULT_CREDS; if (not ctx^.bVerify) then SchannelCred.dwFlags := SchannelCred.dwFlags or SCH_CRED_MANUAL_CRED_VALIDATION; // Create an SSPI credential. scRet := g_pSSPI^.AcquireCredentialsHandleA( nil, // Name of principal UNISP_NAME_A, // Name of package SECPKG_CRED_OUTBOUND, // Flags indicating use nil, // Pointer to logon ID @SchannelCred, // Package specific data nil, // Pointer to GetKey() func nil, // Value to pass to GetKey() @Result^.hCreds, // (out) Cred Handle @tsExpiry); // (out) Lifetime (optional) if (scRet <> SEC_E_OK) then begin FreeMem(Result); Result := nil; end; end; procedure SSL_free(ssl: PSSL); cdecl; begin if (ssl = nil) then Exit; g_pSSPI^.FreeCredentialHandle(@ssl^.hCreds); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); FreeMem(ssl^.pbRecDataBuf); FreeMem(ssl^.pbIoBuffer); FreeMem(ssl); end; function ClientHandshakeLoop(ssl: PSSL; fDoInitialRead: BOOL): SECURITY_STATUS; var InBuffer: SecBufferDesc; InBuffers: array [0..1] of SecBuffer; OutBuffer: SecBufferDesc; OutBuffers: array [0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; cbData: LONG; fDoRead: BOOL; tv: TTimeVal = (tv_sec: 10; tv_usec: 0); fd: TFDSet; begin dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; ssl^.cbIoBuffer := 0; fDoRead := fDoInitialRead; scRet := SEC_I_CONTINUE_NEEDED; // Loop until the handshake is finished or an error occurs. while (scRet = SEC_I_CONTINUE_NEEDED) or (scRet = SEC_E_INCOMPLETE_MESSAGE) or (scRet = SEC_I_INCOMPLETE_CREDENTIALS) do begin // Read server data if (0 = ssl^.cbIoBuffer) or (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin if (fDoRead) then begin // If buffer not large enough reallocate buffer if (ssl^.sbIoBuffer <= ssl^.cbIoBuffer) then begin ssl^.sbIoBuffer += 2048; ssl^.pbIoBuffer := PUCHAR(ReAllocMem(ssl^.pbIoBuffer, ssl^.sbIoBuffer)); end; FD_ZERO(fd); FD_SET(ssl^.s, fd); if (select(1, @fd, nil, nil, @tv) <> 1) then begin scRet := SEC_E_INTERNAL_ERROR; break; end; cbData := recv(ssl^.s, ssl^.pbIoBuffer + ssl^.cbIoBuffer, ssl^.sbIoBuffer - ssl^.cbIoBuffer, 0); if (cbData = SOCKET_ERROR) then begin scRet := SEC_E_INTERNAL_ERROR; break; end else if (cbData = 0) then begin scRet := SEC_E_INTERNAL_ERROR; break; end; ssl^.cbIoBuffer += cbData; end else begin fDoRead := TRUE; end; end; // Set up the input buffers. Buffer 0 is used to pass in data // received from the server. Schannel will consume some or all // of this. Leftover data (if any) will be placed in buffer 1 and // given a buffer type of SECBUFFER_EXTRA. InBuffers[0].pvBuffer := ssl^.pbIoBuffer; InBuffers[0].cbBuffer := ssl^.cbIoBuffer; InBuffers[0].BufferType := SECBUFFER_TOKEN; InBuffers[1].pvBuffer := nil; InBuffers[1].cbBuffer := 0; InBuffers[1].BufferType := SECBUFFER_EMPTY; InBuffer.cBuffers := 2; InBuffer.pBuffers := InBuffers; InBuffer.ulVersion := SECBUFFER_VERSION; // Set up the output buffers. These are initialized to NULL // so as to make it less likely we'll attempt to free random // garbage later. OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType:= SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; scRet := g_pSSPI^.InitializeSecurityContextA(@ssl^.hCreds, @ssl^.hContext, nil, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, @InBuffer, 0, nil, @OutBuffer, dwSSPIOutFlags, @tsExpiry); // If success (or if the error was one of the special extended ones), // send the contents of the output buffer to the server. if (scRet = SEC_E_OK) or (scRet = SEC_I_CONTINUE_NEEDED) or (FAILED(scRet) and (dwSSPIOutFlags and ISC_RET_EXTENDED_ERROR <> 0)) then begin if (OutBuffers[0].cbBuffer <> 0) and (OutBuffers[0].pvBuffer <> nil) then begin cbData := send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Exit(SEC_E_INTERNAL_ERROR); end; // Free output buffer. g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); OutBuffers[0].pvBuffer := nil; end; end; // we need to read more data from the server and try again. if (scRet = SEC_E_INCOMPLETE_MESSAGE) then continue; // handshake completed successfully. if (scRet = SEC_E_OK) then begin // Store remaining data for further use if (InBuffers[1].BufferType = SECBUFFER_EXTRA) then begin ssl^.exIoBuffer := True; MoveMemory(ssl^.pbIoBuffer, ssl^.pbIoBuffer + (ssl^.cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); ssl^.cbIoBuffer := InBuffers[1].cbBuffer; end else ssl^.cbIoBuffer := 0; break; end; // Check for fatal error. if (FAILED(scRet)) then break; // server just requested client authentication. if (scRet = SEC_I_INCOMPLETE_CREDENTIALS) then begin // Server has requested client authentication and // GetNewClientCredentials(ssl); // Go around again. fDoRead := FALSE; scRet := SEC_I_CONTINUE_NEEDED; continue; end; // Copy any leftover data from the buffer, and go around again. if ( InBuffers[1].BufferType = SECBUFFER_EXTRA ) then begin ssl^.exIoBuffer := True; MoveMemory(ssl^.pbIoBuffer, ssl^.pbIoBuffer + (ssl^.cbIoBuffer - InBuffers[1].cbBuffer), InBuffers[1].cbBuffer); ssl^.cbIoBuffer := InBuffers[1].cbBuffer; end else ssl^.cbIoBuffer := 0; end; // Delete the security context in the case of a fatal error. if (FAILED(scRet)) then begin g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); end; if (ssl^.cbIoBuffer = 0) then begin FreeMem(ssl^.pbIoBuffer); ssl^.pbIoBuffer := nil; ssl^.sbIoBuffer := 0; end; Result := scRet; end; function SSL_connect(ssl: PSSL): cint; cdecl; var OutBuffer: SecBufferDesc; OutBuffers: array[0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; scRet: SECURITY_STATUS; cbData: LONG; sock: TVarSin; begin if (ssl = nil) then Exit(0); dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; // Initiate a ClientHello message and generate a token. OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; GetPeerName(ssl^.s, sock); scRet := g_pSSPI^.InitializeSecurityContextA( @ssl^.hCreds, nil, inet_ntoa(sock.sin_addr), dwSSPIFlags, 0, SECURITY_NATIVE_DREP, nil, 0, @ssl^.hContext, @OutBuffer, dwSSPIOutFlags, @tsExpiry); if (scRet <> SEC_I_CONTINUE_NEEDED) then begin Exit(0); end; // Send response to server if there is one. if (OutBuffers[0].cbBuffer <> 0) and (OutBuffers[0].pvBuffer <> nil) then begin cbData := send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Exit(0); end; // Free output buffer. g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); OutBuffers[0].pvBuffer := nil; end; Result := cint(ClientHandshakeLoop(ssl, TRUE) = SEC_E_OK); end; function SSL_shutdown(ssl: PSSL): cint; cdecl; var dwType: DWORD; OutBuffer: SecBufferDesc; OutBuffers: array[0..0] of SecBuffer; dwSSPIFlags: DWORD; dwSSPIOutFlags: DWORD = 0; tsExpiry: TimeStamp; Status: DWORD; begin if (ssl = nil) then Exit(SOCKET_ERROR); dwType := SCHANNEL_SHUTDOWN; OutBuffers[0].pvBuffer := @dwType; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := SizeOf(dwType); OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; Status := g_pSSPI^.ApplyControlToken(@ssl^.hContext, @OutBuffer); if (FAILED(Status)) then Exit(cint(ssl^.rmshtdn)); // // Build an SSL close notify message. // dwSSPIFlags := ISC_REQ_SEQUENCE_DETECT or ISC_REQ_REPLAY_DETECT or ISC_REQ_CONFIDENTIALITY or ISC_RET_EXTENDED_ERROR or ISC_REQ_ALLOCATE_MEMORY or ISC_REQ_STREAM; OutBuffers[0].pvBuffer := nil; OutBuffers[0].BufferType := SECBUFFER_TOKEN; OutBuffers[0].cbBuffer := 0; OutBuffer.cBuffers := 1; OutBuffer.pBuffers := OutBuffers; OutBuffer.ulVersion := SECBUFFER_VERSION; Status := g_pSSPI^.InitializeSecurityContextA( @ssl^.hCreds, @ssl^.hContext, nil, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, nil, 0, @ssl^.hContext, @OutBuffer, dwSSPIOutFlags, @tsExpiry); if (FAILED(Status)) then Exit(cint(ssl^.rmshtdn)); // Send the close notify message to the server. if (OutBuffers[0].pvBuffer <> nil) and (OutBuffers[0].cbBuffer <> 0) then begin send(ssl^.s, OutBuffers[0].pvBuffer, OutBuffers[0].cbBuffer, 0); g_pSSPI^.FreeContextBuffer(OutBuffers[0].pvBuffer); end; // Free the security context. g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); Result := cint(ssl^.rmshtdn); end; function SSL_read(ssl: PSSL; buf: PByte; num: cint): cint; cdecl; var scRet: SECURITY_STATUS; cbData: LONG; i: cint; Message: SecBufferDesc; Buffers: array [0..3] of SecBuffer; pDataBuffer: PSecBuffer; pExtraBuffer: PSecBuffer; bytes, rbytes: LONG; fQOP: ULONG = 0; begin if (ssl = nil) then Exit(SOCKET_ERROR); if (num = 0) then Exit(0); if (ssl^.cbRecDataBuf <> 0) then begin bytes := Min(num, ssl^.cbRecDataBuf); CopyMemory(buf, ssl^.pbRecDataBuf, bytes); rbytes := ssl^.cbRecDataBuf - bytes; MoveMemory(ssl^.pbRecDataBuf, ssl^.pbRecDataBuf + bytes, rbytes); ssl^.cbRecDataBuf := rbytes; Exit(bytes); end; scRet := SEC_E_OK; while (True) do begin if (0 = ssl^.cbIoBuffer) or (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin if (ssl^.sbIoBuffer <= ssl^.cbIoBuffer) then begin ssl^.sbIoBuffer += 2048; ssl^.pbIoBuffer := PUCHAR(ReAllocMem(ssl^.pbIoBuffer, ssl^.sbIoBuffer)); end; cbData := recv(ssl^.s, ssl^.pbIoBuffer + ssl^.cbIoBuffer, ssl^.sbIoBuffer - ssl^.cbIoBuffer, 0); if (cbData = SOCKET_ERROR) then begin Exit(SOCKET_ERROR); end else if (cbData = 0) then begin // Server disconnected. if (ssl^.cbIoBuffer <> 0) then begin scRet := SEC_E_INTERNAL_ERROR; Exit(SOCKET_ERROR); end else Exit(0); end else ssl^.cbIoBuffer += cbData; end; // Attempt to decrypt the received data. Buffers[0].pvBuffer := ssl^.pbIoBuffer; Buffers[0].cbBuffer := ssl^.cbIoBuffer; Buffers[0].BufferType := SECBUFFER_DATA; Buffers[1].BufferType := SECBUFFER_EMPTY; Buffers[2].BufferType := SECBUFFER_EMPTY; Buffers[3].BufferType := SECBUFFER_EMPTY; Message.ulVersion := SECBUFFER_VERSION; Message.cBuffers := 4; Message.pBuffers := Buffers; if (@g_pSSPI^.DecryptMessage <> nil) then scRet := g_pSSPI^.DecryptMessage(@ssl^.hContext, @Message, 0, fQOP) else scRet := DECRYPT_MESSAGE_FN(g_pSSPI^.Reserved4)(@ssl^.hContext, @Message, 0, fQOP); if (scRet = SEC_E_INCOMPLETE_MESSAGE) then begin // The input buffer contains only a fragment of an // encrypted record. Loop around and read some more // data. continue; end; // Server signaled end of session if (scRet = SEC_I_CONTEXT_EXPIRED) then begin ssl^.rmshtdn := TRUE; SSL_shutdown(ssl); Exit(0); end; if (scRet <> SEC_E_OK) and (scRet <> SEC_I_RENEGOTIATE) and (scRet <> SEC_I_CONTEXT_EXPIRED) then begin Exit(SOCKET_ERROR); end; // Locate data and (optional) extra buffers. pDataBuffer := nil; pExtraBuffer := nil; for i := 1 to 3 do begin if (pDataBuffer = nil) and (Buffers[i].BufferType = SECBUFFER_DATA) then begin pDataBuffer := @Buffers[i]; end; if (pExtraBuffer = nil) and (Buffers[i].BufferType = SECBUFFER_EXTRA) then begin pExtraBuffer := @Buffers[i]; end; end; // Return decrypted data. if Assigned(pDataBuffer) then begin bytes := Min(num, pDataBuffer^.cbBuffer); CopyMemory(buf, pDataBuffer^.pvBuffer, bytes); rbytes := pDataBuffer^.cbBuffer - bytes; if (rbytes > 0) then begin if (ssl^.sbRecDataBuf < rbytes) then begin ssl^.sbRecDataBuf := rbytes; ssl^.pbRecDataBuf := PUCHAR(ReAllocMem(ssl^.pbRecDataBuf, rbytes)); end; CopyMemory(ssl^.pbRecDataBuf, pDataBuffer^.pvBuffer + bytes, rbytes); ssl^.cbRecDataBuf := rbytes; end; end; // Move any "extra" data to the input buffer. if Assigned(pExtraBuffer) then begin MoveMemory(ssl^.pbIoBuffer, pExtraBuffer^.pvBuffer, pExtraBuffer^.cbBuffer); ssl^.cbIoBuffer := pExtraBuffer^.cbBuffer; end else ssl^.cbIoBuffer := 0; if (pDataBuffer <> nil) and (bytes <> 0) then Exit(bytes); if (scRet = SEC_I_RENEGOTIATE) then begin // The server wants to perform another handshake // sequence. scRet := ClientHandshakeLoop(ssl, FALSE); if (scRet <> SEC_E_OK) then Exit(SOCKET_ERROR); end; end; end; function SSL_write(ssl: PSSL; const buf: PByte; num: cint): cint; cdecl; var Sizes: SecPkgContext_StreamSizes; scRet: SECURITY_STATUS; cbData: LONG; Message: SecBufferDesc; Buffers: array[0..3] of SecBuffer; pbDataBuffer: PUCHAR; pbMessage: PUCHAR; cbMessage: DWORD; sendOff: DWORD = 0; begin if (ssl = nil) then Exit(SOCKET_ERROR); FillChar(Buffers, SizeOf(Buffers), 0); scRet := g_pSSPI^.QueryContextAttributesA(@ssl^.hContext, SECPKG_ATTR_STREAM_SIZES, @Sizes); if (scRet <> SEC_E_OK) then Exit(scRet); pbDataBuffer := PUCHAR(GetMem(Sizes.cbMaximumMessage + Sizes.cbHeader + Sizes.cbTrailer)); pbMessage := pbDataBuffer + Sizes.cbHeader; while (sendOff < DWORD(num)) do begin cbMessage := Min(Sizes.cbMaximumMessage, DWORD(num) - sendOff); CopyMemory(pbMessage, buf + sendOff, cbMessage); Buffers[0].pvBuffer := pbDataBuffer; Buffers[0].cbBuffer := Sizes.cbHeader; Buffers[0].BufferType := SECBUFFER_STREAM_HEADER; Buffers[1].pvBuffer := pbMessage; Buffers[1].cbBuffer := cbMessage; Buffers[1].BufferType := SECBUFFER_DATA; Buffers[2].pvBuffer := pbMessage + cbMessage; Buffers[2].cbBuffer := Sizes.cbTrailer; Buffers[2].BufferType := SECBUFFER_STREAM_TRAILER; Buffers[3].BufferType := SECBUFFER_EMPTY; Message.ulVersion := SECBUFFER_VERSION; Message.cBuffers := 4; Message.pBuffers := Buffers; if (@g_pSSPI^.EncryptMessage <> nil) then scRet := g_pSSPI^.EncryptMessage(@ssl^.hContext, 0, @Message, 0) else scRet := ENCRYPT_MESSAGE_FN(g_pSSPI^.Reserved3)(@ssl^.hContext, 0, @Message, 0); if (FAILED(scRet)) then break; // Calculate encrypted packet size cbData := Buffers[0].cbBuffer + Buffers[1].cbBuffer + Buffers[2].cbBuffer; // Send the encrypted data to the server. cbData := send(ssl^.s, pbDataBuffer, cbData, 0); if (cbData = SOCKET_ERROR) or (cbData = 0) then begin g_pSSPI^.DeleteSecurityContext(@ssl^.hContext); scRet := SEC_E_INTERNAL_ERROR; break; end; sendOff += cbMessage; end; FreeMem(pbDataBuffer); if scRet = SEC_E_OK then Result := num else Result := SOCKET_ERROR; end; function SSL_pending(ssl: PSSL): cint; cdecl; begin if (ssl = nil) then Exit(0); if ssl^.cbRecDataBuf > 0 then Result := ssl^.cbRecDataBuf else if ssl^.exIoBuffer then begin ssl^.exIoBuffer := False; Result := ssl^.cbIoBuffer end else Result := 0; end; function SSLv23_method(): PSSL_METHOD; cdecl; begin Result:= PSSL_METHOD(SP_PROT_SSL2 or SP_PROT_SSL3 or SP_PROT_TLS1); end; function SSLv2_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_SSL2); end; function SSLv3_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_SSL3); end; function TLSv1_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1); end; function TLSv1_1_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1_1); end; function TLSv1_2_method(): PSSL_METHOD; cdecl; begin Result := PSSL_METHOD(SP_PROT_TLS1_2); end; procedure SSL_CTX_set_verify(ctx: PSSL_CTX; mode: cint; func: Pointer); cdecl; begin if (ctx <> nil) then ctx^.bVerify := mode <> 0; end; function SSL_get_error (ssl: PSSL; ret: cint): cint; cdecl; begin if (ret > 0) then Result := SSL_ERROR_NONE else Result := SSL_ERROR_ZERO_RETURN; end; var lpBuffer: TMemoryBasicInformation; begin if (IsSSLloaded = False) then begin if VirtualQuery(@lpBuffer, @lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer) then begin SetLength(DLLSSLName, MAX_PATH); SetLength(DLLSSLName, GetModuleFileName(THandle(lpBuffer.AllocationBase), PAnsiChar(DLLSSLName), MAX_PATH)); DLLUtilName := DLLSSLName; if InitSSLInterface then SSLImplementation := TSSLOpenSSL; end; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ftpsend.pas0000644000175000001440000015401312014201074021420 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 004.000.000 | |==============================================================================| | Content: FTP client | |==============================================================================| | Copyright (c)1999-2011, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 1999-2010. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Petr Esner | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {: @abstract(FTP client protocol) Used RFC: RFC-959, RFC-2228, RFC-2428 } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$TYPEINFO ON}// Borland changed defualt Visibility from Public to Published // and it requires RTTI to be generated $M+ {$M+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} unit ftpsend; interface uses SysUtils, Classes, blcksock, synautil, synaip, synsock; const cFtpProtocol = '21'; cFtpDataProtocol = '20'; {:Terminating value for TLogonActions} FTP_OK = 255; {:Terminating value for TLogonActions} FTP_ERR = 254; type {:Array for holding definition of logon sequence.} TLogonActions = array [0..17] of byte; {:Procedural type for OnStatus event. Sender is calling @link(TFTPSend) object. Value is FTP command or reply to this comand. (if it is reply, Response is @True).} TFTPStatus = procedure(Sender: TObject; Response: Boolean; const Value: string) of object; {: @abstract(Object for holding file information) parsed from directory listing of FTP server.} TFTPListRec = class(TObject) private FFileName: String; FDirectory: Boolean; FReadable: Boolean; FFileSize: int64; FFileTime: TDateTime; FOriginalLine: string; FMask: string; FPermission: String; public {: You can assign another TFTPListRec to this object.} procedure Assign(Value: TFTPListRec); virtual; {:name of file} property FileName: string read FFileName write FFileName; {:if name is subdirectory not file.} property Directory: Boolean read FDirectory write FDirectory; {:if you have rights to read} property Readable: Boolean read FReadable write FReadable; {:size of file in bytes} property FileSize: int64 read FFileSize write FFileSize; {:date and time of file. Local server timezone is used. Any timezone conversions was not done!} property FileTime: TDateTime read FFileTime write FFileTime; {:original unparsed line} property OriginalLine: string read FOriginalLine write FOriginalLine; {:mask what was used for parsing} property Mask: string read FMask write FMask; {:permission string (depending on used mask!)} property Permission: string read FPermission write FPermission; end; {:@abstract(This is TList of TFTPListRec objects.) This object is used for holding lististing of all files information in listed directory on FTP server.} TFTPList = class(TObject) protected FList: TList; FLines: TStringList; FMasks: TStringList; FUnparsedLines: TStringList; Monthnames: string; BlockSize: string; DirFlagValue: string; FileName: string; VMSFileName: string; Day: string; Month: string; ThreeMonth: string; YearTime: string; Year: string; Hours: string; HoursModif: Ansistring; Minutes: string; Seconds: string; Size: Ansistring; Permissions: Ansistring; DirFlag: string; function GetListItem(Index: integer): TFTPListRec; virtual; function ParseEPLF(Value: string): Boolean; virtual; procedure ClearStore; virtual; function ParseByMask(Value, NextValue, Mask: ansistring): Integer; virtual; function CheckValues: Boolean; virtual; procedure FillRecord(const Value: TFTPListRec); virtual; public {:Constructor. You not need create this object, it is created by TFTPSend class as their property.} constructor Create; destructor Destroy; override; {:Clear list.} procedure Clear; virtual; {:count of holded @link(TFTPListRec) objects} function Count: integer; virtual; {:Assigns one list to another} procedure Assign(Value: TFTPList); virtual; {:try to parse raw directory listing in @link(lines) to list of @link(TFTPListRec).} procedure ParseLines; virtual; {:By this property you have access to list of @link(TFTPListRec). This is for compatibility only. Please, use @link(Items) instead.} property List: TList read FList; {:By this property you have access to list of @link(TFTPListRec).} property Items[Index: Integer]: TFTPListRec read GetListItem; default; {:Set of lines with RAW directory listing for @link(parseLines)} property Lines: TStringList read FLines; {:Set of masks for directory listing parser. It is predefined by default, however you can modify it as you need. (for example, you can add your own definition mask.) Mask is same as mask used in TotalCommander.} property Masks: TStringList read FMasks; {:After @link(ParseLines) it holding lines what was not sucessfully parsed.} property UnparsedLines: TStringList read FUnparsedLines; end; {:@abstract(Implementation of FTP protocol.) Note: Are you missing properties for setting Username and Password? Look to parent @link(TSynaClient) object! (Username and Password have default values for "anonymous" FTP login) Are you missing properties for specify server address and port? Look to parent @link(TSynaClient) too!} TFTPSend = class(TSynaClient) protected FOnStatus: TFTPStatus; FSock: TTCPBlockSocket; FDSock: TTCPBlockSocket; FResultCode: Integer; FResultString: string; FFullResult: TStringList; FAccount: string; FFWHost: string; FFWPort: string; FFWUsername: string; FFWPassword: string; FFWMode: integer; FDataStream: TMemoryStream; FDataIP: string; FDataPort: string; FDirectFile: Boolean; FDirectFileName: string; FCanResume: Boolean; FPassiveMode: Boolean; FForceDefaultPort: Boolean; FForceOldPort: Boolean; FFtpList: TFTPList; FBinaryMode: Boolean; FAutoTLS: Boolean; FIsTLS: Boolean; FIsDataTLS: Boolean; FTLSonData: Boolean; FFullSSL: Boolean; function Auth(Mode: integer): Boolean; virtual; function Connect: Boolean; virtual; function InternalStor(const Command: string; RestoreAt: int64): Boolean; virtual; function DataSocket: Boolean; virtual; function AcceptDataSocket: Boolean; virtual; procedure DoStatus(Response: Boolean; const Value: string); virtual; public {:Custom definition of login sequence. You can use this when you set @link(FWMode) to value -1.} CustomLogon: TLogonActions; constructor Create; destructor Destroy; override; {:Waits and read FTP server response. You need this only in special cases!} function ReadResult: Integer; virtual; {:Parse remote side information of data channel from value string (returned by PASV command). This function you need only in special cases!} procedure ParseRemote(Value: string); virtual; {:Parse remote side information of data channel from value string (returned by EPSV command). This function you need only in special cases!} procedure ParseRemoteEPSV(Value: string); virtual; {:Send Value as FTP command to FTP server. Returned result code is result of this function. This command is good for sending site specific command, or non-standard commands.} function FTPCommand(const Value: string): integer; virtual; {:Connect and logon to FTP server. If you specify any FireWall, connect to firewall and throw them connect to FTP server. Login sequence depending on @link(FWMode).} function Login: Boolean; virtual; {:Logoff and disconnect from FTP server.} function Logout: Boolean; virtual; {:Break current transmission of data. (You can call this method from Sock.OnStatus event, or from another thread.)} procedure Abort; virtual; {:Break current transmission of data. It is same as Abort, but it send abort telnet commands prior ABOR FTP command. Some servers need it. (You can call this method from Sock.OnStatus event, or from another thread.)} procedure TelnetAbort; virtual; {:Download directory listing of Directory on FTP server. If Directory is empty string, download listing of current working directory. If NameList is @true, download only names of files in directory. (internally use NLST command instead LIST command) If NameList is @false, returned list is also parsed to @link(FTPList) property.} function List(Directory: string; NameList: Boolean): Boolean; virtual; {:Read data from FileName on FTP server. If Restore is @true and server supports resume dowloads, download is resumed. (received is only rest of file)} function RetrieveFile(const FileName: string; Restore: Boolean): Boolean; virtual; {:Send data to FileName on FTP server. If Restore is @true and server supports resume upload, upload is resumed. (send only rest of file) In this case if remote file is same length as local file, nothing will be done. If remote file is larger then local, resume is disabled and file is transfered from begin!} function StoreFile(const FileName: string; Restore: Boolean): Boolean; virtual; {:Send data to FTP server and assing unique name for this file.} function StoreUniqueFile: Boolean; virtual; {:Append data to FileName on FTP server.} function AppendFile(const FileName: string): Boolean; virtual; {:Rename on FTP server file with OldName to NewName.} function RenameFile(const OldName, NewName: string): Boolean; virtual; {:Delete file FileName on FTP server.} function DeleteFile(const FileName: string): Boolean; virtual; {:Return size of Filename file on FTP server. If command failed (i.e. not implemented), return -1.} function FileSize(const FileName: string): int64; virtual; {:Send NOOP command to FTP server for preserve of disconnect by inactivity timeout.} function NoOp: Boolean; virtual; {:Change currect working directory to Directory on FTP server.} function ChangeWorkingDir(const Directory: string): Boolean; virtual; {:walk to upper directory on FTP server.} function ChangeToParentDir: Boolean; virtual; {:walk to root directory on FTP server. (May not work with all servers properly!)} function ChangeToRootDir: Boolean; virtual; {:Delete Directory on FTP server.} function DeleteDir(const Directory: string): Boolean; virtual; {:Create Directory on FTP server.} function CreateDir(const Directory: string): Boolean; virtual; {:Return current working directory on FTP server.} function GetCurrentDir: String; virtual; {:Establish data channel to FTP server and retrieve data. This function you need only in special cases, i.e. when you need to implement some special unsupported FTP command!} function DataRead(const DestStream: TStream): Boolean; virtual; {:Establish data channel to FTP server and send data. This function you need only in special cases, i.e. when you need to implement some special unsupported FTP command.} function DataWrite(const SourceStream: TStream): Boolean; virtual; published {:After FTP command contains result number of this operation.} property ResultCode: Integer read FResultCode; {:After FTP command contains main line of result.} property ResultString: string read FResultString; {:After any FTP command it contains all lines of FTP server reply.} property FullResult: TStringList read FFullResult; {:Account information used in some cases inside login sequence.} property Account: string read FAccount Write FAccount; {:Address of firewall. If empty string (default), firewall not used.} property FWHost: string read FFWHost Write FFWHost; {:port of firewall. standard value is same port as ftp server used. (21)} property FWPort: string read FFWPort Write FFWPort; {:Username for login to firewall. (if needed)} property FWUsername: string read FFWUsername Write FFWUsername; {:password for login to firewall. (if needed)} property FWPassword: string read FFWPassword Write FFWPassword; {:Type of Firewall. Used only if you set some firewall address. Supported predefined firewall login sequences are described by comments in source file where you can see pseudocode decribing each sequence.} property FWMode: integer read FFWMode Write FFWMode; {:Socket object used for TCP/IP operation on control channel. Good for seting OnStatus hook, etc.} property Sock: TTCPBlockSocket read FSock; {:Socket object used for TCP/IP operation on data channel. Good for seting OnStatus hook, etc.} property DSock: TTCPBlockSocket read FDSock; {:If you not use @link(DirectFile) mode, all data transfers is made to or from this stream.} property DataStream: TMemoryStream read FDataStream; {:After data connection is established, contains remote side IP of this connection.} property DataIP: string read FDataIP; {:After data connection is established, contains remote side port of this connection.} property DataPort: string read FDataPort; {:Mode of data handling by data connection. If @False, all data operations are made to or from @link(DataStream) TMemoryStream. If @true, data operations is made directly to file in your disk. (filename is specified by @link(DirectFileName) property.) Dafault is @False!} property DirectFile: Boolean read FDirectFile Write FDirectFile; {:Filename for direct disk data operations.} property DirectFileName: string read FDirectFileName Write FDirectFileName; {:Indicate after @link(Login) if remote server support resume downloads and uploads.} property CanResume: Boolean read FCanResume; {:If true (default value), all transfers is made by passive method. It is safer method for various firewalls.} property PassiveMode: Boolean read FPassiveMode Write FPassiveMode; {:Force to listen for dataconnection on standard port (20). Default is @false, dataconnections will be made to any non-standard port reported by PORT FTP command. This setting is not used, if you use passive mode.} property ForceDefaultPort: Boolean read FForceDefaultPort Write FForceDefaultPort; {:When is @true, then is disabled EPSV and EPRT support. However without this commands you cannot use IPv6! (Disabling of this commands is needed only when you are behind some crap firewall/NAT.} property ForceOldPort: Boolean read FForceOldPort Write FForceOldPort; {:You may set this hook for monitoring FTP commands and replies.} property OnStatus: TFTPStatus read FOnStatus write FOnStatus; {:After LIST command is here parsed list of files in given directory.} property FtpList: TFTPList read FFtpList; {:if @true (default), then data transfers is in binary mode. If this is set to @false, then ASCII mode is used.} property BinaryMode: Boolean read FBinaryMode Write FBinaryMode; {:if is true, then if server support upgrade to SSL/TLS mode, then use them.} property AutoTLS: Boolean read FAutoTLS Write FAutoTLS; {:if server listen on SSL/TLS port, then you set this to true.} property FullSSL: Boolean read FFullSSL Write FFullSSL; {:Signalise, if control channel is in SSL/TLS mode.} property IsTLS: Boolean read FIsTLS; {:Signalise, if data transfers is in SSL/TLS mode.} property IsDataTLS: Boolean read FIsDataTLS; {:If @true (default), then try to use SSL/TLS on data transfers too. If @false, then SSL/TLS is used only for control connection.} property TLSonData: Boolean read FTLSonData write FTLSonData; end; {:A very useful function, and example of use can be found in the TFtpSend object. Dowload specified file from FTP server to LocalFile.} function FtpGetFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; {:A very useful function, and example of use can be found in the TFtpSend object. Upload specified LocalFile to FTP server.} function FtpPutFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; {:A very useful function, and example of use can be found in the TFtpSend object. Initiate transfer of file between two FTP servers.} function FtpInterServerTransfer( const FromIP, FromPort, FromFile, FromUser, FromPass: string; const ToIP, ToPort, ToFile, ToUser, ToPass: string): Boolean; implementation constructor TFTPSend.Create; begin inherited Create; FFullResult := TStringList.Create; FDataStream := TMemoryStream.Create; FSock := TTCPBlockSocket.Create; FSock.Owner := self; FSock.ConvertLineEnd := True; FDSock := TTCPBlockSocket.Create; FDSock.Owner := self; FFtpList := TFTPList.Create; FTimeout := 300000; FTargetPort := cFtpProtocol; FUsername := 'anonymous'; FPassword := 'anonymous@' + FSock.LocalName; FDirectFile := False; FPassiveMode := True; FForceDefaultPort := False; FForceOldPort := false; FAccount := ''; FFWHost := ''; FFWPort := cFtpProtocol; FFWUsername := ''; FFWPassword := ''; FFWMode := 0; FBinaryMode := True; FAutoTLS := False; FFullSSL := False; FIsTLS := False; FIsDataTLS := False; FTLSonData := True; end; destructor TFTPSend.Destroy; begin FDSock.Free; FSock.Free; FFTPList.Free; FDataStream.Free; FFullResult.Free; inherited Destroy; end; procedure TFTPSend.DoStatus(Response: Boolean; const Value: string); begin if assigned(OnStatus) then OnStatus(Self, Response, Value); end; function TFTPSend.ReadResult: Integer; var s, c: AnsiString; begin FFullResult.Clear; c := ''; repeat s := FSock.RecvString(FTimeout); if c = '' then if length(s) > 3 then if s[4] in [' ', '-'] then c :=Copy(s, 1, 3); FResultString := s; FFullResult.Add(s); DoStatus(True, s); if FSock.LastError <> 0 then Break; until (c <> '') and (Pos(c + ' ', s) = 1); Result := StrToIntDef(c, 0); FResultCode := Result; end; function TFTPSend.FTPCommand(const Value: string): integer; begin FSock.Purge; FSock.SendString(Value + CRLF); DoStatus(False, Value); Result := ReadResult; end; // based on idea by Petr Esner function TFTPSend.Auth(Mode: integer): Boolean; const //if not USER then // if not PASS then // if not ACCT then ERROR! //OK! Action0: TLogonActions = (0, FTP_OK, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER then // if not PASS then ERROR! //if SITE then ERROR! //if not USER then // if not PASS then // if not ACCT then ERROR! //OK! Action1: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 5, FTP_ERR, 9, 0, FTP_OK, 12, 1, FTP_OK, 15, 2, FTP_OK, FTP_ERR); //if not USER then // if not PASS then ERROR! //if USER '@' then OK! //if not PASS then // if not ACCT then ERROR! //OK! Action2: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 6, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //if not USER then // if not PASS then ERROR! //if not USER then // if not PASS then // if not ACCT then ERROR! //OK! Action3: TLogonActions = (3, 6, 3, 4, 6, FTP_ERR, 0, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //OPEN //if not USER then // if not PASS then // if not ACCT then ERROR! //OK! Action4: TLogonActions = (7, 3, 3, 0, FTP_OK, 6, 1, FTP_OK, 9, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0); //if USER '@' then OK! //if not PASS then // if not ACCT then ERROR! //OK! Action5: TLogonActions = (6, FTP_OK, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER @ then // if not PASS then ERROR! //if not USER then // if not PASS then // if not ACCT then ERROR! //OK! Action6: TLogonActions = (8, 6, 3, 4, 6, FTP_ERR, 0, FTP_OK, 9, 1, FTP_OK, 12, 2, FTP_OK, FTP_ERR, 0, 0, 0); //if USER @ then ERROR! //if not PASS then // if not ACCT then ERROR! //OK! Action7: TLogonActions = (9, FTP_ERR, 3, 1, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); //if not USER @@ then // if not PASS @ then // if not ACCT then ERROR! //OK! Action8: TLogonActions = (10, FTP_OK, 3, 11, FTP_OK, 6, 2, FTP_OK, FTP_ERR, 0, 0, 0, 0, 0, 0, 0, 0, 0); var FTPServer: string; LogonActions: TLogonActions; i: integer; s: string; x: integer; begin Result := False; if FFWHost = '' then Mode := 0; if (FTargetPort = cFtpProtocol) or (FTargetPort = '21') then FTPServer := FTargetHost else FTPServer := FTargetHost + ':' + FTargetPort; case Mode of -1: LogonActions := CustomLogon; 1: LogonActions := Action1; 2: LogonActions := Action2; 3: LogonActions := Action3; 4: LogonActions := Action4; 5: LogonActions := Action5; 6: LogonActions := Action6; 7: LogonActions := Action7; 8: LogonActions := Action8; else LogonActions := Action0; end; i := 0; repeat case LogonActions[i] of 0: s := 'USER ' + FUserName; 1: s := 'PASS ' + FPassword; 2: s := 'ACCT ' + FAccount; 3: s := 'USER ' + FFWUserName; 4: s := 'PASS ' + FFWPassword; 5: s := 'SITE ' + FTPServer; 6: s := 'USER ' + FUserName + '@' + FTPServer; 7: s := 'OPEN ' + FTPServer; 8: s := 'USER ' + FFWUserName + '@' + FTPServer; 9: s := 'USER ' + FUserName + '@' + FTPServer + ' ' + FFWUserName; 10: s := 'USER ' + FUserName + '@' + FFWUserName + '@' + FTPServer; 11: s := 'PASS ' + FPassword + '@' + FFWPassword; end; x := FTPCommand(s); x := x div 100; if (x <> 2) and (x <> 3) then Exit; i := LogonActions[i + x - 1]; case i of FTP_ERR: Exit; FTP_OK: begin Result := True; Exit; end; end; until False; end; function TFTPSend.Connect: Boolean; begin FSock.CloseSocket; FSock.Bind(FIPInterface, cAnyPort); if FSock.LastError = 0 then if FFWHost = '' then FSock.Connect(FTargetHost, FTargetPort) else FSock.Connect(FFWHost, FFWPort); if FSock.LastError = 0 then if FFullSSL then FSock.SSLDoConnect; Result := FSock.LastError = 0; end; function TFTPSend.Login: Boolean; var x: integer; begin Result := False; FCanResume := False; if not Connect then Exit; FIsTLS := FFullSSL; FIsDataTLS := False; repeat x := ReadResult div 100; until x <> 1; if x <> 2 then Exit; if FAutoTLS and not(FIsTLS) then if (FTPCommand('AUTH TLS') div 100) = 2 then begin FSock.SSLDoConnect; FIsTLS := FSock.LastError = 0; if not FIsTLS then begin Result := False; Exit; end; end; if not Auth(FFWMode) then Exit; if FIsTLS then begin FTPCommand('PBSZ 0'); if FTLSonData then FIsDataTLS := (FTPCommand('PROT P') div 100) = 2; if not FIsDataTLS then FTPCommand('PROT C'); end; FTPCommand('TYPE I'); FTPCommand('STRU F'); FTPCommand('MODE S'); if FTPCommand('REST 0') = 350 then if FTPCommand('REST 1') = 350 then begin FTPCommand('REST 0'); FCanResume := True; end; Result := True; end; function TFTPSend.Logout: Boolean; begin Result := (FTPCommand('QUIT') div 100) = 2; FSock.CloseSocket; end; procedure TFTPSend.ParseRemote(Value: string); var n: integer; nb, ne: integer; s: string; x: integer; begin Value := trim(Value); nb := Pos('(',Value); ne := Pos(')',Value); if (nb = 0) or (ne = 0) then begin nb:=RPos(' ',Value); s:=Copy(Value, nb + 1, Length(Value) - nb); end else begin s:=Copy(Value,nb+1,ne-nb-1); end; for n := 1 to 4 do if n = 1 then FDataIP := Fetch(s, ',') else FDataIP := FDataIP + '.' + Fetch(s, ','); x := StrToIntDef(Fetch(s, ','), 0) * 256; x := x + StrToIntDef(Fetch(s, ','), 0); FDataPort := IntToStr(x); end; procedure TFTPSend.ParseRemoteEPSV(Value: string); var n: integer; s, v: AnsiString; begin s := SeparateRight(Value, '('); s := Trim(SeparateLeft(s, ')')); Delete(s, Length(s), 1); v := ''; for n := Length(s) downto 1 do if s[n] in ['0'..'9'] then v := s[n] + v else Break; FDataPort := v; FDataIP := FTargetHost; end; function TFTPSend.DataSocket: boolean; var s: string; begin Result := False; if FIsDataTLS then FPassiveMode := True; if FPassiveMode then begin if FSock.IP6used then s := '2' else s := '1'; if FSock.IP6used and not(FForceOldPort) and ((FTPCommand('EPSV ' + s) div 100) = 2) then begin ParseRemoteEPSV(FResultString); end else if FSock.IP6used then Exit else begin if (FTPCommand('PASV') div 100) <> 2 then Exit; ParseRemote(FResultString); end; FDSock.CloseSocket; FDSock.Bind(FIPInterface, cAnyPort); FDSock.Connect(FDataIP, FDataPort); Result := FDSock.LastError = 0; end else begin FDSock.CloseSocket; if FForceDefaultPort then s := cFtpDataProtocol else s := '0'; //data conection from same interface as command connection FDSock.Bind(FSock.GetLocalSinIP, s); if FDSock.LastError <> 0 then Exit; FDSock.SetLinger(True, 10000); FDSock.Listen; FDSock.GetSins; FDataIP := FDSock.GetLocalSinIP; FDataIP := FDSock.ResolveName(FDataIP); FDataPort := IntToStr(FDSock.GetLocalSinPort); if FSock.IP6used and (not FForceOldPort) then begin if IsIp6(FDataIP) then s := '2' else s := '1'; s := 'EPRT |' + s +'|' + FDataIP + '|' + FDataPort + '|'; Result := (FTPCommand(s) div 100) = 2; end; if not Result and IsIP(FDataIP) then begin s := ReplaceString(FDataIP, '.', ','); s := 'PORT ' + s + ',' + IntToStr(FDSock.GetLocalSinPort div 256) + ',' + IntToStr(FDSock.GetLocalSinPort mod 256); Result := (FTPCommand(s) div 100) = 2; end; end; end; function TFTPSend.AcceptDataSocket: Boolean; var x: TSocket; begin if FPassiveMode then Result := True else begin Result := False; if FDSock.CanRead(FTimeout) then begin x := FDSock.Accept; if not FDSock.UsingSocks then FDSock.CloseSocket; FDSock.Socket := x; Result := True; end; end; if Result and FIsDataTLS then begin FDSock.SSL.Assign(FSock.SSL); FDSock.SSLDoConnect; Result := FDSock.LastError = 0; end; end; function TFTPSend.DataRead(const DestStream: TStream): Boolean; var x: integer; begin Result := False; try if not AcceptDataSocket then Exit; FDSock.RecvStreamRaw(DestStream, FTimeout); FDSock.CloseSocket; x := ReadResult; Result := (x div 100) = 2; finally FDSock.CloseSocket; end; end; function TFTPSend.DataWrite(const SourceStream: TStream): Boolean; var x: integer; b: Boolean; begin Result := False; try if not AcceptDataSocket then Exit; FDSock.SendStreamRaw(SourceStream); b := FDSock.LastError = 0; FDSock.CloseSocket; x := ReadResult; Result := b and ((x div 100) = 2); finally FDSock.CloseSocket; end; end; function TFTPSend.List(Directory: string; NameList: Boolean): Boolean; var x: integer; begin Result := False; FDataStream.Clear; FFTPList.Clear; if Directory <> '' then Directory := ' ' + Directory; FTPCommand('TYPE A'); if not DataSocket then Exit; if NameList then x := FTPCommand('NLST' + Directory) else x := FTPCommand('LIST' + Directory); if (x div 100) <> 1 then Exit; Result := DataRead(FDataStream); if (not NameList) and Result then begin FDataStream.Position := 0; FFTPList.Lines.LoadFromStream(FDataStream); FFTPList.ParseLines; end; FDataStream.Position := 0; end; function TFTPSend.RetrieveFile(const FileName: string; Restore: Boolean): Boolean; var RetrStream: TStream; begin Result := False; if FileName = '' then Exit; if not DataSocket then Exit; Restore := Restore and FCanResume; if FDirectFile then if Restore and FileExists(FDirectFileName) then RetrStream := TFileStream.Create(FDirectFileName, fmOpenReadWrite or fmShareExclusive) else RetrStream := TFileStream.Create(FDirectFileName, fmCreate or fmShareDenyWrite) else RetrStream := FDataStream; try if FBinaryMode then FTPCommand('TYPE I') else FTPCommand('TYPE A'); if Restore then begin RetrStream.Position := RetrStream.Size; if (FTPCommand('REST ' + IntToStr(RetrStream.Size)) div 100) <> 3 then Exit; end else if RetrStream is TMemoryStream then TMemoryStream(RetrStream).Clear; if (FTPCommand('RETR ' + FileName) div 100) <> 1 then Exit; Result := DataRead(RetrStream); if not FDirectFile then RetrStream.Position := 0; finally if FDirectFile then RetrStream.Free; end; end; function TFTPSend.InternalStor(const Command: string; RestoreAt: int64): Boolean; var SendStream: TStream; StorSize: int64; begin Result := False; if FDirectFile then if not FileExists(FDirectFileName) then Exit else SendStream := TFileStream.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite) else SendStream := FDataStream; try if not DataSocket then Exit; if FBinaryMode then FTPCommand('TYPE I') else FTPCommand('TYPE A'); StorSize := SendStream.Size; if not FCanResume then RestoreAt := 0; if (StorSize > 0) and (RestoreAt = StorSize) then begin Result := True; Exit; end; if RestoreAt > StorSize then RestoreAt := 0; FTPCommand('ALLO ' + IntToStr(StorSize - RestoreAt)); if FCanResume then if (FTPCommand('REST ' + IntToStr(RestoreAt)) div 100) <> 3 then Exit; SendStream.Position := RestoreAt; if (FTPCommand(Command) div 100) <> 1 then Exit; Result := DataWrite(SendStream); finally if FDirectFile then SendStream.Free; end; end; function TFTPSend.StoreFile(const FileName: string; Restore: Boolean): Boolean; var RestoreAt: int64; begin Result := False; if FileName = '' then Exit; RestoreAt := 0; Restore := Restore and FCanResume; if Restore then begin RestoreAt := Self.FileSize(FileName); if RestoreAt < 0 then RestoreAt := 0; end; Result := InternalStor('STOR ' + FileName, RestoreAt); end; function TFTPSend.StoreUniqueFile: Boolean; begin Result := InternalStor('STOU', 0); end; function TFTPSend.AppendFile(const FileName: string): Boolean; begin Result := False; if FileName = '' then Exit; Result := InternalStor('APPE ' + FileName, 0); end; function TFTPSend.NoOp: Boolean; begin Result := (FTPCommand('NOOP') div 100) = 2; end; function TFTPSend.RenameFile(const OldName, NewName: string): Boolean; begin Result := False; if (FTPCommand('RNFR ' + OldName) div 100) <> 3 then Exit; Result := (FTPCommand('RNTO ' + NewName) div 100) = 2; end; function TFTPSend.DeleteFile(const FileName: string): Boolean; begin Result := (FTPCommand('DELE ' + FileName) div 100) = 2; end; function TFTPSend.FileSize(const FileName: string): int64; var s: string; begin Result := -1; if (FTPCommand('SIZE ' + FileName) div 100) = 2 then begin s := Trim(SeparateRight(ResultString, ' ')); s := Trim(SeparateLeft(s, ' ')); {$IFDEF VER100} Result := StrToIntDef(s, -1); {$ELSE} Result := StrToInt64Def(s, -1); {$ENDIF} end; end; function TFTPSend.ChangeWorkingDir(const Directory: string): Boolean; begin Result := (FTPCommand('CWD ' + Directory) div 100) = 2; end; function TFTPSend.ChangeToParentDir: Boolean; begin Result := (FTPCommand('CDUP') div 100) = 2; end; function TFTPSend.ChangeToRootDir: Boolean; begin Result := ChangeWorkingDir('/'); end; function TFTPSend.DeleteDir(const Directory: string): Boolean; begin Result := (FTPCommand('RMD ' + Directory) div 100) = 2; end; function TFTPSend.CreateDir(const Directory: string): Boolean; begin Result := (FTPCommand('MKD ' + Directory) div 100) = 2; end; function TFTPSend.GetCurrentDir: String; begin Result := ''; if (FTPCommand('PWD') div 100) = 2 then begin Result := SeparateRight(FResultString, '"'); Result := Trim(Separateleft(Result, '"')); end; end; procedure TFTPSend.Abort; begin FSock.SendString('ABOR' + CRLF); FDSock.StopFlag := True; end; procedure TFTPSend.TelnetAbort; begin FSock.SendString(#$FF + #$F4 + #$FF + #$F2); Abort; end; {==============================================================================} procedure TFTPListRec.Assign(Value: TFTPListRec); begin FFileName := Value.FileName; FDirectory := Value.Directory; FReadable := Value.Readable; FFileSize := Value.FileSize; FFileTime := Value.FileTime; FOriginalLine := Value.OriginalLine; FMask := Value.Mask; end; constructor TFTPList.Create; begin inherited Create; FList := TList.Create; FLines := TStringList.Create; FMasks := TStringList.Create; FUnparsedLines := TStringList.Create; //various UNIX FMasks.add('pppppppppp $!!!S*$TTT$DD$hh mm ss$YYYY$n*'); FMasks.add('pppppppppp $!!!S*$DD$TTT$hh mm ss$YYYY$n*'); FMasks.add('pppppppppp $!!!S*$TTT$DD$UUUUU$n*'); //mostly used UNIX format FMasks.add('pppppppppp $!!!S*$DD$TTT$UUUUU$n*'); //MacOS FMasks.add('pppppppppp $!!S*$TTT$DD$UUUUU$n*'); FMasks.add('pppppppppp $!S*$TTT$DD$UUUUU$n*'); //Novell FMasks.add('d $!S*$TTT$DD$UUUUU$n*'); //Windows FMasks.add('MM DD YY hh mmH !S* n*'); FMasks.add('MM DD YY hh mmH $ d!n*'); FMasks.add('MM DD YYYY hh mmH !S* n*'); FMasks.add('MM DD YYYY hh mmH $ d!n*'); FMasks.add('DD MM YYYY hh mmH !S* n*'); FMasks.add('DD MM YYYY hh mmH $ d!n*'); //VMS FMasks.add('v*$ DD TTT YYYY hh mm'); FMasks.add('v*$!DD TTT YYYY hh mm'); FMasks.add('n*$ YYYY MM DD hh mm$S*'); //AS400 FMasks.add('!S*$MM DD YY hh mm ss !n*'); FMasks.add('!S*$DD MM YY hh mm ss !n*'); FMasks.add('n*!S*$MM DD YY hh mm ss d'); FMasks.add('n*!S*$DD MM YY hh mm ss d'); //VxWorks FMasks.add('$S* TTT DD YYYY hh mm ss $n* $ d'); FMasks.add('$S* TTT DD YYYY hh mm ss $n*'); //Distinct FMasks.add('d $S*$TTT DD YYYY hh mm$n*'); FMasks.add('d $S*$TTT DD$hh mm$n*'); //PC-NFSD FMasks.add('nnnnnnnn.nnn dSSSSSSSSSSS MM DD YY hh mmH'); //VOS FMasks.add('- SSSSS YY MM DD hh mm ss n*'); FMasks.add('- d= SSSSS YY MM DD hh mm ss n*'); //Unissys ClearPath FMasks.add('nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn SSSSSSSSS MM DD YYYY hh mm'); FMasks.add('n*\x SSSSSSSSS MM DD YYYY hh mm'); //IBM FMasks.add('- SSSSSSSSSSSS d MM DD YYYY hh mm n*'); //OS9 FMasks.add('- YY MM DD hhmm d SSSSSSSSS n*'); //tandem FMasks.add('nnnnnnnn SSSSSSS DD TTT YY hh mm ss'); //MVS FMasks.add('- YYYY MM DD SSSSS d=O n*'); //BullGCOS8 FMasks.add(' $S* MM DD YY hh mm ss !n*'); FMasks.add('d $S* MM DD YY !n*'); //BullGCOS7 FMasks.add(' TTT DD YYYY n*'); FMasks.add(' d n*'); end; destructor TFTPList.Destroy; begin Clear; FList.Free; FLines.Free; FMasks.Free; FUnparsedLines.Free; inherited Destroy; end; procedure TFTPList.Clear; var n:integer; begin for n := 0 to FList.Count - 1 do if Assigned(FList[n]) then TFTPListRec(FList[n]).Free; FList.Clear; FLines.Clear; FUnparsedLines.Clear; end; function TFTPList.Count: integer; begin Result := FList.Count; end; function TFTPList.GetListItem(Index: integer): TFTPListRec; begin Result := nil; if Index < Count then Result := TFTPListRec(FList[Index]); end; procedure TFTPList.Assign(Value: TFTPList); var flr: TFTPListRec; n: integer; begin Clear; for n := 0 to Value.Count - 1 do begin flr := TFTPListRec.Create; flr.Assign(Value[n]); Flist.Add(flr); end; Lines.Assign(Value.Lines); Masks.Assign(Value.Masks); UnparsedLines.Assign(Value.UnparsedLines); end; procedure TFTPList.ClearStore; begin Monthnames := ''; BlockSize := ''; DirFlagValue := ''; FileName := ''; VMSFileName := ''; Day := ''; Month := ''; ThreeMonth := ''; YearTime := ''; Year := ''; Hours := ''; HoursModif := ''; Minutes := ''; Seconds := ''; Size := ''; Permissions := ''; DirFlag := ''; end; function TFTPList.ParseByMask(Value, NextValue, Mask: AnsiString): Integer; var Ivalue, IMask: integer; MaskC, LastMaskC: AnsiChar; c: AnsiChar; s: string; begin ClearStore; Result := 0; if Value = '' then Exit; if Mask = '' then Exit; Ivalue := 1; IMask := 1; Result := 1; LastMaskC := ' '; while Imask <= Length(mask) do begin if (Mask[Imask] <> '*') and (Ivalue > Length(Value)) then begin Result := 0; Exit; end; MaskC := Mask[Imask]; if Ivalue > Length(Value) then Exit; c := Value[Ivalue]; case MaskC of 'n': FileName := FileName + c; 'v': VMSFileName := VMSFileName + c; '.': begin if c in ['.', ' '] then FileName := TrimSP(FileName) + '.' else begin Result := 0; Exit; end; end; 'D': Day := Day + c; 'M': Month := Month + c; 'T': ThreeMonth := ThreeMonth + c; 'U': YearTime := YearTime + c; 'Y': Year := Year + c; 'h': Hours := Hours + c; 'H': HoursModif := HoursModif + c; 'm': Minutes := Minutes + c; 's': Seconds := Seconds + c; 'S': Size := Size + c; 'p': Permissions := Permissions + c; 'd': DirFlag := DirFlag + c; 'x': if c <> ' ' then begin Result := 0; Exit; end; '*': begin s := ''; if LastMaskC in ['n', 'v'] then begin if Imask = Length(Mask) then s := Copy(Value, IValue, Maxint) else while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; s := s + Value[Ivalue]; Inc(Ivalue); end; if LastMaskC = 'n' then FileName := FileName + s else VMSFileName := VMSFileName + s; end else begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in ['0'..'9']) then break; s := s + Value[Ivalue]; Inc(Ivalue); end; case LastMaskC of 'S': Size := Size + s; end; end; Dec(IValue); end; '!': begin while IValue <= Length(Value) do begin if Value[Ivalue] = ' ' then break; Inc(Ivalue); end; while IValue <= Length(Value) do begin if Value[Ivalue] <> ' ' then break; Inc(Ivalue); end; Dec(IValue); end; '$': begin while IValue <= Length(Value) do begin if not(Value[Ivalue] in [' ', #9]) then break; Inc(Ivalue); end; Dec(IValue); end; '=': begin s := ''; case LastmaskC of 'S': begin while Imask <= Length(Mask) do begin if not(Mask[Imask] in ['0'..'9']) then break; s := s + Mask[Imask]; Inc(Imask); end; Dec(Imask); BlockSize := s; end; 'T': begin Monthnames := Copy(Mask, IMask, 12 * 3); Inc(IMask, 12 * 3); end; 'd': begin Inc(Imask); DirFlagValue := Mask[Imask]; end; end; end; '\': begin Value := NextValue; IValue := 0; Result := 2; end; end; Inc(Ivalue); Inc(Imask); LastMaskC := MaskC; end; end; function TFTPList.CheckValues: Boolean; var x, n: integer; begin Result := false; if FileName <> '' then begin if pos('?', VMSFilename) > 0 then Exit; if pos('*', VMSFilename) > 0 then Exit; end; if VMSFileName <> '' then if pos(';', VMSFilename) <= 0 then Exit; if (FileName = '') and (VMSFileName = '') then Exit; if Permissions <> '' then begin if length(Permissions) <> 10 then Exit; for n := 1 to 10 do if not(Permissions[n] in ['a', 'b', 'c', 'd', 'h', 'l', 'p', 'r', 's', 't', 'w', 'x', 'y', '-']) then Exit; end; if Day <> '' then begin Day := TrimSP(Day); x := StrToIntDef(day, -1); if (x < 1) or (x > 31) then Exit; end; if Month <> '' then begin Month := TrimSP(Month); x := StrToIntDef(Month, -1); if (x < 1) or (x > 12) then Exit; end; if Hours <> '' then begin Hours := TrimSP(Hours); x := StrToIntDef(Hours, -1); if (x < 0) or (x > 24) then Exit; end; if HoursModif <> '' then begin if not (HoursModif[1] in ['a', 'A', 'p', 'P']) then Exit; end; if Minutes <> '' then begin Minutes := TrimSP(Minutes); x := StrToIntDef(Minutes, -1); if (x < 0) or (x > 59) then Exit; end; if Seconds <> '' then begin Seconds := TrimSP(Seconds); x := StrToIntDef(Seconds, -1); if (x < 0) or (x > 59) then Exit; end; if Size <> '' then begin Size := TrimSP(Size); for n := 1 to Length(Size) do if not (Size[n] in ['0'..'9']) then Exit; end; if length(Monthnames) = (12 * 3) then for n := 1 to 12 do CustomMonthNames[n] := Copy(Monthnames, ((n - 1) * 3) + 1, 3); if ThreeMonth <> '' then begin x := GetMonthNumber(ThreeMonth); if (x = 0) then Exit; end; if YearTime <> '' then begin YearTime := ReplaceString(YearTime, '-', ':'); if pos(':', YearTime) > 0 then begin if (GetTimeFromstr(YearTime) = -1) then Exit; end else begin YearTime := TrimSP(YearTime); x := StrToIntDef(YearTime, -1); if (x = -1) then Exit; if (x < 1900) or (x > 2100) then Exit; end; end; if Year <> '' then begin Year := TrimSP(Year); x := StrToIntDef(Year, -1); if (x = -1) then Exit; if Length(Year) = 4 then begin if not((x > 1900) and (x < 2100)) then Exit; end else if Length(Year) = 2 then begin if not((x >= 0) and (x <= 99)) then Exit; end else if Length(Year) = 3 then begin if not((x >= 100) and (x <= 110)) then Exit; end else Exit; end; Result := True; end; procedure TFTPList.FillRecord(const Value: TFTPListRec); var s: string; x: integer; myear: Word; mmonth: Word; mday: Word; mhours, mminutes, mseconds: word; n: integer; begin s := DirFlagValue; if s = '' then s := 'D'; s := Uppercase(s); Value.Directory := s = Uppercase(DirFlag); if FileName <> '' then Value.FileName := SeparateLeft(Filename, ' -> '); if VMSFileName <> '' then begin Value.FileName := VMSFilename; Value.Directory := Pos('.DIR;',VMSFilename) > 0; end; Value.FileName := TrimSPRight(Value.FileName); Value.Readable := not Value.Directory; if BlockSize <> '' then x := StrToIntDef(BlockSize, 1) else x := 1; {$IFDEF VER100} Value.FileSize := x * StrToIntDef(Size, 0); {$ELSE} Value.FileSize := x * StrToInt64Def(Size, 0); {$ENDIF} DecodeDate(Date,myear,mmonth,mday); mhours := 0; mminutes := 0; mseconds := 0; if Day <> '' then mday := StrToIntDef(day, 1); if Month <> '' then mmonth := StrToIntDef(Month, 1); if length(Monthnames) = (12 * 3) then for n := 1 to 12 do CustomMonthNames[n] := Copy(Monthnames, ((n - 1) * 3) + 1, 3); if ThreeMonth <> '' then mmonth := GetMonthNumber(ThreeMonth); if Year <> '' then begin myear := StrToIntDef(Year, 0); if (myear <= 99) and (myear > 50) then myear := myear + 1900; if myear <= 50 then myear := myear + 2000; end; if YearTime <> '' then begin if pos(':', YearTime) > 0 then begin YearTime := TrimSP(YearTime); mhours := StrToIntDef(Separateleft(YearTime, ':'), 0); mminutes := StrToIntDef(SeparateRight(YearTime, ':'), 0); if (Encodedate(myear, mmonth, mday) + EncodeTime(mHours, mminutes, 0, 0)) > now then Dec(mYear); end else myear := StrToIntDef(YearTime, 0); end; if Minutes <> '' then mminutes := StrToIntDef(Minutes, 0); if Seconds <> '' then mseconds := StrToIntDef(Seconds, 0); if Hours <> '' then begin mHours := StrToIntDef(Hours, 0); if HoursModif <> '' then if Uppercase(HoursModif[1]) = 'P' then if mHours <> 12 then mHours := MHours + 12; end; Value.FileTime := Encodedate(myear, mmonth, mday) + EncodeTime(mHours, mminutes, mseconds, 0); if Permissions <> '' then begin Value.Permission := Permissions; Value.Readable := Uppercase(permissions)[2] = 'R'; if Uppercase(permissions)[1] = 'D' then begin Value.Directory := True; Value.Readable := false; end else if Uppercase(permissions)[1] = 'L' then Value.Directory := True; end; end; function TFTPList.ParseEPLF(Value: string): Boolean; var s, os: string; flr: TFTPListRec; begin Result := False; if Value <> '' then if Value[1] = '+' then begin os := Value; Delete(Value, 1, 1); flr := TFTPListRec.create; flr.FileName := SeparateRight(Value, #9); s := Fetch(Value, ','); while s <> '' do begin if s[1] = #9 then Break; case s[1] of '/': flr.Directory := true; 'r': flr.Readable := true; 's': {$IFDEF VER100} flr.FileSize := StrToIntDef(Copy(s, 2, Length(s) - 1), 0); {$ELSE} flr.FileSize := StrToInt64Def(Copy(s, 2, Length(s) - 1), 0); {$ENDIF} 'm': flr.FileTime := (StrToIntDef(Copy(s, 2, Length(s) - 1), 0) / 86400) + 25569; end; s := Fetch(Value, ','); end; if flr.FileName <> '' then if (flr.Directory and ((flr.FileName = '.') or (flr.FileName = '..'))) or (flr.FileName = '') then flr.free else begin flr.OriginalLine := os; flr.Mask := 'EPLF'; Flist.Add(flr); Result := True; end; end; end; procedure TFTPList.ParseLines; var flr: TFTPListRec; n, m: Integer; S: string; x: integer; b: Boolean; begin n := 0; while n < Lines.Count do begin if n = Lines.Count - 1 then s := '' else s := Lines[n + 1]; b := False; x := 0; if ParseEPLF(Lines[n]) then begin b := True; x := 1; end else for m := 0 to Masks.Count - 1 do begin x := ParseByMask(Lines[n], s, Masks[m]); if x > 0 then if CheckValues then begin flr := TFTPListRec.create; FillRecord(flr); flr.OriginalLine := Lines[n]; flr.Mask := Masks[m]; if flr.Directory and ((flr.FileName = '.') or (flr.FileName = '..')) then flr.free else Flist.Add(flr); b := True; Break; end; end; if not b then FUnparsedLines.Add(Lines[n]); Inc(n); if x > 1 then Inc(n, x - 1); end; end; {==============================================================================} function FtpGetFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; begin Result := False; with TFTPSend.Create do try if User <> '' then begin Username := User; Password := Pass; end; TargetHost := IP; TargetPort := Port; if not Login then Exit; DirectFileName := LocalFile; DirectFile:=True; Result := RetrieveFile(FileName, False); Logout; finally Free; end; end; function FtpPutFile(const IP, Port, FileName, LocalFile, User, Pass: string): Boolean; begin Result := False; with TFTPSend.Create do try if User <> '' then begin Username := User; Password := Pass; end; TargetHost := IP; TargetPort := Port; if not Login then Exit; DirectFileName := LocalFile; DirectFile:=True; Result := StoreFile(FileName, False); Logout; finally Free; end; end; function FtpInterServerTransfer( const FromIP, FromPort, FromFile, FromUser, FromPass: string; const ToIP, ToPort, ToFile, ToUser, ToPass: string): Boolean; var FromFTP, ToFTP: TFTPSend; s: string; x: integer; begin Result := False; FromFTP := TFTPSend.Create; toFTP := TFTPSend.Create; try if FromUser <> '' then begin FromFTP.Username := FromUser; FromFTP.Password := FromPass; end; if ToUser <> '' then begin ToFTP.Username := ToUser; ToFTP.Password := ToPass; end; FromFTP.TargetHost := FromIP; FromFTP.TargetPort := FromPort; ToFTP.TargetHost := ToIP; ToFTP.TargetPort := ToPort; if not FromFTP.Login then Exit; if not ToFTP.Login then Exit; if (FromFTP.FTPCommand('PASV') div 100) <> 2 then Exit; FromFTP.ParseRemote(FromFTP.ResultString); s := ReplaceString(FromFTP.DataIP, '.', ','); s := 'PORT ' + s + ',' + IntToStr(StrToIntDef(FromFTP.DataPort, 0) div 256) + ',' + IntToStr(StrToIntDef(FromFTP.DataPort, 0) mod 256); if (ToFTP.FTPCommand(s) div 100) <> 2 then Exit; x := ToFTP.FTPCommand('RETR ' + FromFile); if (x div 100) <> 1 then Exit; x := FromFTP.FTPCommand('STOR ' + ToFile); if (x div 100) <> 1 then Exit; FromFTP.Timeout := 21600000; x := FromFTP.ReadResult; if (x div 100) <> 2 then Exit; ToFTP.Timeout := 21600000; x := ToFTP.ReadResult; if (x div 100) <> 2 then Exit; Result := True; finally ToFTP.Free; FromFTP.Free; end; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/synaip.pas0000644000175000001440000002717712014201074021272 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 001.002.001 | |==============================================================================| | Content: IP address support procedures and functions | |==============================================================================| | Copyright (c)2006-2010, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c) 2006-2010. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} {:@abstract(IP adress support procedures and functions)} {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$Q-} {$R-} {$H+} {$IFDEF UNICODE} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$WARN SUSPICIOUS_TYPECAST OFF} {$ENDIF} unit synaip; interface uses SysUtils, SynaUtil; type {:binary form of IPv6 adress (for string conversion routines)} TIp6Bytes = array [0..15] of Byte; {:binary form of IPv6 adress (for string conversion routines)} TIp6Words = array [0..7] of Word; {:Returns @TRUE, if "Value" is a valid IPv4 address. Cannot be a symbolic Name!} function IsIP(const Value: string): Boolean; {:Returns @TRUE, if "Value" is a valid IPv6 address. Cannot be a symbolic Name!} function IsIP6(const Value: string): Boolean; {:Returns a string with the "Host" ip address converted to binary form.} function IPToID(Host: string): Ansistring; {:Convert IPv6 address from their string form to binary byte array.} function StrToIp6(value: string): TIp6Bytes; {:Convert IPv6 address from binary byte array to string form.} function Ip6ToStr(value: TIp6Bytes): string; {:Convert IPv4 address from their string form to binary.} function StrToIp(value: string): integer; {:Convert IPv4 address from binary to string form.} function IpToStr(value: integer): string; {:Convert IPv4 address to reverse form.} function ReverseIP(Value: AnsiString): AnsiString; {:Convert IPv6 address to reverse form.} function ReverseIP6(Value: AnsiString): AnsiString; {:Expand short form of IPv6 address to long form.} function ExpandIP6(Value: AnsiString): AnsiString; implementation {==============================================================================} function IsIP(const Value: string): Boolean; var TempIP: string; function ByteIsOk(const Value: string): Boolean; var x, n: integer; begin x := StrToIntDef(Value, -1); Result := (x >= 0) and (x < 256); // X may be in correct range, but value still may not be correct value! // i.e. "$80" if Result then for n := 1 to length(Value) do if not (AnsiChar(Value[n]) in ['0'..'9']) then begin Result := False; Break; end; end; begin TempIP := Value; Result := False; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if not ByteIsOk(Fetch(TempIP, '.')) then Exit; if ByteIsOk(TempIP) then Result := True; end; {==============================================================================} function IsIP6(const Value: string): Boolean; var TempIP: string; s,t: string; x: integer; partcount: integer; zerocount: integer; First: Boolean; begin TempIP := Value; Result := False; if Value = '::' then begin Result := True; Exit; end; partcount := 0; zerocount := 0; First := True; while tempIP <> '' do begin s := fetch(TempIP, ':'); if not(First) and (s = '') then Inc(zerocount); First := False; if zerocount > 1 then break; Inc(partCount); if s = '' then Continue; if partCount > 8 then break; if tempIP = '' then begin t := SeparateRight(s, '%'); s := SeparateLeft(s, '%'); x := StrToIntDef('$' + t, -1); if (x < 0) or (x > $ffff) then break; end; x := StrToIntDef('$' + s, -1); if (x < 0) or (x > $ffff) then break; if tempIP = '' then if not((PartCount = 1) and (ZeroCount = 0)) then Result := True; end; end; {==============================================================================} function IPToID(Host: string): Ansistring; var s: string; i, x: Integer; begin Result := ''; for x := 0 to 3 do begin s := Fetch(Host, '.'); i := StrToIntDef(s, 0); Result := Result + AnsiChar(i); end; end; {==============================================================================} function StrToIp(value: string): integer; var s: string; i, x: Integer; begin Result := 0; for x := 0 to 3 do begin s := Fetch(value, '.'); i := StrToIntDef(s, 0); Result := (256 * Result) + i; end; end; {==============================================================================} function IpToStr(value: integer): string; var x1, x2: word; y1, y2: byte; begin Result := ''; x1 := value shr 16; x2 := value and $FFFF; y1 := x1 div $100; y2 := x1 mod $100; Result := inttostr(y1) + '.' + inttostr(y2) + '.'; y1 := x2 div $100; y2 := x2 mod $100; Result := Result + inttostr(y1) + '.' + inttostr(y2); end; {==============================================================================} function ExpandIP6(Value: AnsiString): AnsiString; var n: integer; s: ansistring; x: integer; begin Result := ''; if value = '' then exit; x := countofchar(value, ':'); if x > 7 then exit; if value[1] = ':' then value := '0' + value; if value[length(value)] = ':' then value := value + '0'; x := 8 - x; s := ''; for n := 1 to x do s := s + ':0'; s := s + ':'; Result := replacestring(value, '::', s); end; {==============================================================================} function StrToIp6(Value: string): TIp6Bytes; var IPv6: TIp6Words; Index: Integer; n: integer; b1, b2: byte; s: string; x: integer; begin for n := 0 to 15 do Result[n] := 0; for n := 0 to 7 do Ipv6[n] := 0; Index := 0; Value := ExpandIP6(value); if value = '' then exit; while Value <> '' do begin if Index > 7 then Exit; s := fetch(value, ':'); if s = '@' then break; if s = '' then begin IPv6[Index] := 0; end else begin x := StrToIntDef('$' + s, -1); if (x > 65535) or (x < 0) then Exit; IPv6[Index] := x; end; Inc(Index); end; for n := 0 to 7 do begin b1 := ipv6[n] div 256; b2 := ipv6[n] mod 256; Result[n * 2] := b1; Result[(n * 2) + 1] := b2; end; end; {==============================================================================} //based on routine by the Free Pascal development team function Ip6ToStr(value: TIp6Bytes): string; var i, x: byte; zr1,zr2: set of byte; zc1,zc2: byte; have_skipped: boolean; ip6w: TIp6words; begin zr1 := []; zr2 := []; zc1 := 0; zc2 := 0; for i := 0 to 7 do begin x := i * 2; ip6w[i] := value[x] * 256 + value[x + 1]; if ip6w[i] = 0 then begin include(zr2, i); inc(zc2); end else begin if zc1 < zc2 then begin zc1 := zc2; zr1 := zr2; zc2 := 0; zr2 := []; end; end; end; if zc1 < zc2 then begin zr1 := zr2; end; SetLength(Result, 8*5-1); SetLength(Result, 0); have_skipped := false; for i := 0 to 7 do begin if not(i in zr1) then begin if have_skipped then begin if Result = '' then Result := '::' else Result := Result + ':'; have_skipped := false; end; Result := Result + IntToHex(Ip6w[i], 1) + ':'; end else begin have_skipped := true; end; end; if have_skipped then if Result = '' then Result := '::0' else Result := Result + ':'; if Result = '' then Result := '::0'; if not (7 in zr1) then SetLength(Result, Length(Result)-1); Result := LowerCase(result); end; {==============================================================================} function ReverseIP(Value: AnsiString): AnsiString; var x: Integer; begin Result := ''; repeat x := LastDelimiter('.', Value); Result := Result + '.' + Copy(Value, x + 1, Length(Value) - x); Delete(Value, x, Length(Value) - x + 1); until x < 1; if Length(Result) > 0 then if Result[1] = '.' then Delete(Result, 1, 1); end; {==============================================================================} function ReverseIP6(Value: AnsiString): AnsiString; var ip6: TIp6bytes; n: integer; x, y: integer; begin ip6 := StrToIP6(Value); x := ip6[15] div 16; y := ip6[15] mod 16; Result := IntToHex(y, 1) + '.' + IntToHex(x, 1); for n := 14 downto 0 do begin x := ip6[n] div 16; y := ip6[n] mod 16; Result := Result + '.' + IntToHex(y, 1) + '.' + IntToHex(x, 1); end; end; {==============================================================================} end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_openssl_lib.pas0000644000175000001440000023365112560221450023163 0ustar alexxusers{==============================================================================| | Project : Ararat Synapse | 003.007.002 | |==============================================================================| | Content: SSL support by OpenSSL | |==============================================================================| | Copyright (c)1999-2013, Lukas Gebauer | | All rights reserved. | | | | Redistribution and use in source and binary forms, with or without | | modification, are permitted provided that the following conditions are met: | | | | Redistributions of source code must retain the above copyright notice, this | | list of conditions and the following disclaimer. | | | | Redistributions in binary form must reproduce the above copyright notice, | | this list of conditions and the following disclaimer in the documentation | | and/or other materials provided with the distribution. | | | | Neither the name of Lukas Gebauer nor the names of its contributors may | | be used to endorse or promote products derived from this software without | | specific prior written permission. | | | | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | | ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR | | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH | | DAMAGE. | |==============================================================================| | The Initial Developer of the Original Code is Lukas Gebauer (Czech Republic).| | Portions created by Lukas Gebauer are Copyright (c)2002-2013. | | Portions created by Petr Fejfar are Copyright (c)2011-2012. | | All Rights Reserved. | |==============================================================================| | Contributor(s): | | Tomas Hajny (OS2 support) | |==============================================================================| | History: see HISTORY.HTM from distribution package | | (Found at URL: http://www.ararat.cz/synapse/) | |==============================================================================} { Special thanks to Gregor Ibic (Intelicom d.o.o., http://www.intelicom.si) for good inspiration about begin with SSL programming. } {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} {$H+} {$IFDEF VER125} {$DEFINE BCB} {$ENDIF} {$IFDEF BCB} {$ObjExportAll On} (*$HPPEMIT 'namespace ssl_openssl_lib { using System::Shortint; }' *) {$ENDIF} //old Delphi does not have MSWINDOWS define. {$IFDEF WIN32} {$IFNDEF MSWINDOWS} {$DEFINE MSWINDOWS} {$ENDIF} {$ENDIF} {:@abstract(OpenSSL support) This unit is Pascal interface to OpenSSL library (used by @link(ssl_openssl) unit). OpenSSL is loaded dynamicly on-demand. If this library is not found in system, requested OpenSSL function just return errorcode. } unit ssl_openssl_lib; interface uses {$IFDEF CIL} System.Runtime.InteropServices, System.Text, {$ENDIF} Classes, synafpc, {$IFNDEF MSWINDOWS} {$IFDEF FPC} {$IFDEF UNIX} BaseUnix, {$ENDIF UNIX} {$ELSE} Libc, {$ENDIF} SysUtils; {$ELSE} Windows; {$ENDIF} {$IFDEF CIL} const {$IFDEF LINUX} DLLSSLName = 'libssl.so'; DLLUtilName = 'libcrypto.so'; {$ELSE} DLLSSLName = 'ssleay32.dll'; DLLUtilName = 'libeay32.dll'; {$ENDIF} {$ELSE} var {$IFNDEF MSWINDOWS} {$IFDEF DARWIN} DLLSSLName: string = 'libssl.dylib'; DLLUtilName: string = 'libcrypto.dylib'; {$ELSE} {$IFDEF OS2} {$IFDEF OS2GCC} DLLSSLName: string = 'kssl.dll'; DLLUtilName: string = 'kcrypto.dll'; {$ELSE OS2GCC} DLLSSLName: string = 'ssl.dll'; DLLUtilName: string = 'crypto.dll'; {$ENDIF OS2GCC} {$ELSE OS2} DLLSSLName: string = 'libssl.so'; DLLUtilName: string = 'libcrypto.so'; {$ENDIF OS2} {$ENDIF} {$ELSE} DLLSSLName: string = 'ssleay32.dll'; DLLSSLName2: string = 'libssl32.dll'; DLLUtilName: string = 'libeay32.dll'; {$ENDIF} {$ENDIF} type {$IFDEF CIL} SslPtr = IntPtr; {$ELSE} SslPtr = Pointer; {$ENDIF} PSslPtr = ^SslPtr; PSSL_CTX = SslPtr; PSSL = SslPtr; PSSL_METHOD = SslPtr; PX509 = SslPtr; PX509_NAME = SslPtr; PEVP_MD = SslPtr; PInteger = ^Integer; PBIO_METHOD = SslPtr; PBIO = SslPtr; EVP_PKEY = SslPtr; PRSA = SslPtr; PASN1_UTCTIME = SslPtr; PASN1_INTEGER = SslPtr; PPasswdCb = SslPtr; PFunction = procedure; PSTACK = SslPtr; {pf} TSkPopFreeFunc = procedure(p:SslPtr); cdecl; {pf} TX509Free = procedure(x: PX509); cdecl; {pf} DES_cblock = array[0..7] of Byte; PDES_cblock = ^DES_cblock; des_ks_struct = packed record ks: DES_cblock; weak_key: Integer; end; des_key_schedule = array[1..16] of des_ks_struct; const EVP_MAX_MD_SIZE = 16 + 20; SSL_ERROR_NONE = 0; SSL_ERROR_SSL = 1; SSL_ERROR_WANT_READ = 2; SSL_ERROR_WANT_WRITE = 3; SSL_ERROR_WANT_X509_LOOKUP = 4; SSL_ERROR_SYSCALL = 5; //look at error stack/return value/errno SSL_ERROR_ZERO_RETURN = 6; SSL_ERROR_WANT_CONNECT = 7; SSL_ERROR_WANT_ACCEPT = 8; SSL_OP_NO_SSLv2 = $01000000; SSL_OP_NO_SSLv3 = $02000000; SSL_OP_NO_TLSv1 = $04000000; SSL_OP_ALL = $000FFFFF; SSL_VERIFY_NONE = $00; SSL_VERIFY_PEER = $01; OPENSSL_DES_DECRYPT = 0; OPENSSL_DES_ENCRYPT = 1; X509_V_OK = 0; X509_V_ILLEGAL = 1; X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 2; X509_V_ERR_UNABLE_TO_GET_CRL = 3; X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = 4; X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = 5; X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = 6; X509_V_ERR_CERT_SIGNATURE_FAILURE = 7; X509_V_ERR_CRL_SIGNATURE_FAILURE = 8; X509_V_ERR_CERT_NOT_YET_VALID = 9; X509_V_ERR_CERT_HAS_EXPIRED = 10; X509_V_ERR_CRL_NOT_YET_VALID = 11; X509_V_ERR_CRL_HAS_EXPIRED = 12; X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 13; X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 14; X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = 15; X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 16; X509_V_ERR_OUT_OF_MEM = 17; X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 18; X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 19; X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 20; X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 21; X509_V_ERR_CERT_CHAIN_TOO_LONG = 22; X509_V_ERR_CERT_REVOKED = 23; X509_V_ERR_INVALID_CA = 24; X509_V_ERR_PATH_LENGTH_EXCEEDED = 25; X509_V_ERR_INVALID_PURPOSE = 26; X509_V_ERR_CERT_UNTRUSTED = 27; X509_V_ERR_CERT_REJECTED = 28; //These are 'informational' when looking for issuer cert X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29; X509_V_ERR_AKID_SKID_MISMATCH = 30; X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH = 31; X509_V_ERR_KEYUSAGE_NO_CERTSIGN = 32; X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER = 33; X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION = 34; //The application is not happy X509_V_ERR_APPLICATION_VERIFICATION = 50; SSL_FILETYPE_ASN1 = 2; SSL_FILETYPE_PEM = 1; EVP_PKEY_RSA = 6; SSL_CTRL_SET_TLSEXT_HOSTNAME = 55; TLSEXT_NAMETYPE_host_name = 0; var SSLLibHandle: TLibHandle = 0; SSLUtilHandle: TLibHandle = 0; SSLLibFile: string = ''; SSLUtilFile: string = ''; {$IFDEF CIL} [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_error')] function SslGetError(s: PSSL; ret_code: Integer): Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_library_init')] function SslLibraryInit: Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_load_error_strings')] procedure SslLoadErrorStrings; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_cipher_list')] function SslCtxSetCipherList(arg0: PSSL_CTX; var str: String): Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_new')] function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_free')] procedure SslCtxFree (arg0: PSSL_CTX); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_set_fd')] function SslSetFd(s: PSSL; fd: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv2_method')] function SslMethodV2 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv3_method')] function SslMethodV3 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_method')] function SslMethodTLSV1:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_1_method')] function SslMethodTLSV11:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'TLSv1_2_method')] function SslMethodTLSV12:PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLv23_method')] function SslMethodV23 : PSSL_METHOD; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_PrivateKey')] function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_PrivateKey_ASN1')] function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: String; len: integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_RSAPrivateKey_file')] function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: String; _type: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate')] function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_ASN1')] function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: String):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_file')] function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: String; _type: Integer):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_use_certificate_chain_file')] function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: String):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_check_private_key')] function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_default_passwd_cb')] procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_default_passwd_cb_userdata')] procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: IntPtr); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_load_verify_locations')] function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; CAfile: string; CApath: String):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_ctrl')] function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: IntPtr): integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_new')] function SslNew(ctx: PSSL_CTX):PSSL; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_free')] procedure SslFree(ssl: PSSL); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_accept')] function SslAccept(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_connect')] function SslConnect(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_shutdown')] function SslShutdown(s: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_read')] function SslRead(ssl: PSSL; buf: StringBuilder; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_peek')] function SslPeek(ssl: PSSL; buf: StringBuilder; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_write')] function SslWrite(ssl: PSSL; buf: String; num: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_pending')] function SslPending(ssl: PSSL):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_version')] function SslGetVersion(ssl: PSSL):String; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_peer_certificate')] function SslGetPeerCertificate(s: PSSL):PX509; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CTX_set_verify')] procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_current_cipher')] function SSLGetCurrentCipher(s: PSSL): SslPtr; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CIPHER_get_name')] function SSLCipherGetName(c: SslPtr):String; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_CIPHER_get_bits')] function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_get_verify_result')] function SSLGetVerifyResult(ssl: PSSL):Integer;external; [DllImport(DLLSSLName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSL_ctrl')] function SslCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: IntPtr): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_new')] function X509New: PX509; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_free')] procedure X509Free(x: PX509); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_oneline')] function X509NameOneline(a: PX509_NAME; buf: StringBuilder; size: Integer): String; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_subject_name')] function X509GetSubjectName(a: PX509):PX509_NAME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_issuer_name')] function X509GetIssuerName(a: PX509):PX509_NAME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_hash')] function X509NameHash(x: PX509_NAME):Cardinal; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_digest')] function X509Digest (data: PX509; _type: PEVP_MD; md: StringBuilder; var len: Integer):Integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_version')] function X509SetVersion(x: PX509; version: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_pubkey')] function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_issuer_name')] function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_NAME_add_entry_by_txt')] function X509NameAddEntryByTxt(name: PX509_NAME; field: string; _type: integer; bytes: string; len, loc, _set: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_sign')] function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_print')] function X509print(b: PBIO; a: PX509): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_gmtime_adj')] function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_notBefore')] function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_set_notAfter')] function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'X509_get_serialNumber')] function X509GetSerialNumber(x: PX509): PASN1_INTEGER; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_new')] function EvpPkeyNew: EVP_PKEY; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_free')] procedure EvpPkeyFree(pk: EVP_PKEY); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_PKEY_assign')] function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_get_digestbyname')] function EvpGetDigestByName(Name: String): PEVP_MD; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'EVP_cleanup')] procedure EVPcleanup; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'SSLeay_version')] function SSLeayversion(t: integer): String; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_error_string_n')] procedure ErrErrorString(e: integer; buf: StringBuilder; len: integer); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_get_error')] function ErrGetError: integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_clear_error')] procedure ErrClearError; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_free_strings')] procedure ErrFreeStrings; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ERR_remove_state')] procedure ErrRemoveState(pid: integer); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'OPENSSL_add_all_algorithms_noconf')] procedure OPENSSLaddallalgorithms; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'CRYPTO_cleanup_all_ex_data')] procedure CRYPTOcleanupAllExData; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'RAND_screen')] procedure RandScreen; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_new')] function BioNew(b: PBIO_METHOD): PBIO; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_free_all')] procedure BioFreeAll(b: PBIO); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_s_mem')] function BioSMem: PBIO_METHOD; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_ctrl_pending')] function BioCtrlPending(b: PBIO): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_read')] function BioRead(b: PBIO; Buf: StringBuilder; Len: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'BIO_write')] function BioWrite(b: PBIO; var Buf: String; Len: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'd2i_PKCS12_bio')] function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'PKCS12_parse')] function PKCS12parse(p12: SslPtr; pass: string; var pkey, cert, ca: SslPtr): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'PKCS12_free')] procedure PKCS12free(p12: SslPtr); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'RSA_generate_key')] function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_UTCTIME_new')] function Asn1UtctimeNew: PASN1_UTCTIME; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_UTCTIME_free')] procedure Asn1UtctimeFree(a: PASN1_UTCTIME); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'ASN1_INTEGER_set')] function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'i2d_X509_bio')] function i2dX509bio(b: PBIO; x: PX509): integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'i2d_PrivateKey_bio')] function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; external; // 3DES functions [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_set_odd_parity')] procedure DESsetoddparity(Key: des_cblock); external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_set_key_checked')] function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; external; [DllImport(DLLUtilName, CharSet = CharSet.Ansi, SetLastError = False, CallingConvention= CallingConvention.cdecl, EntryPoint = 'DES_ecb_encrypt')] procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); external; {$ELSE} // libssl.dll function SslGetError(s: PSSL; ret_code: Integer):Integer; function SslLibraryInit:Integer; procedure SslLoadErrorStrings; // function SslCtxSetCipherList(arg0: PSSL_CTX; str: PChar):Integer; function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer; function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; procedure SslCtxFree(arg0: PSSL_CTX); function SslSetFd(s: PSSL; fd: Integer):Integer; function SslMethodV2:PSSL_METHOD; function SslMethodV3:PSSL_METHOD; function SslMethodTLSV1:PSSL_METHOD; function SslMethodTLSV11:PSSL_METHOD; function SslMethodTLSV12:PSSL_METHOD; function SslMethodV23:PSSL_METHOD; function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer; // function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: PChar; _type: Integer):Integer; function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer; function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; // function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: PChar):Integer; function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer; function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr); // function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: PChar; const CApath: PChar):Integer; function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer; function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; function SslNew(ctx: PSSL_CTX):PSSL; procedure SslFree(ssl: PSSL); function SslAccept(ssl: PSSL):Integer; function SslConnect(ssl: PSSL):Integer; function SslShutdown(ssl: PSSL):Integer; function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer; function SslPending(ssl: PSSL):Integer; function SslGetVersion(ssl: PSSL):AnsiString; function SslGetPeerCertificate(ssl: PSSL):PX509; procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); function SSLGetCurrentCipher(s: PSSL):SslPtr; function SSLCipherGetName(c: SslPtr): AnsiString; function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; function SSLGetVerifyResult(ssl: PSSL):Integer; function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; // libeay.dll function X509New: PX509; procedure X509Free(x: PX509); function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString; function X509GetSubjectName(a: PX509):PX509_NAME; function X509GetIssuerName(a: PX509):PX509_NAME; function X509NameHash(x: PX509_NAME):Cardinal; // function SslX509Digest(data: PX509; _type: PEVP_MD; md: PChar; len: PInteger):Integer; function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer; function X509print(b: PBIO; a: PX509): integer; function X509SetVersion(x: PX509; version: integer): integer; function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer; function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; function X509GetSerialNumber(x: PX509): PASN1_INTEGER; function EvpPkeyNew: EVP_PKEY; procedure EvpPkeyFree(pk: EVP_PKEY); function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; function EvpGetDigestByName(Name: AnsiString): PEVP_MD; procedure EVPcleanup; // function ErrErrorString(e: integer; buf: PChar): PChar; function SSLeayversion(t: integer): Ansistring; procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer); function ErrGetError: integer; procedure ErrClearError; procedure ErrFreeStrings; procedure ErrRemoveState(pid: integer); procedure OPENSSLaddallalgorithms; procedure CRYPTOcleanupAllExData; procedure RandScreen; function BioNew(b: PBIO_METHOD): PBIO; procedure BioFreeAll(b: PBIO); function BioSMem: PBIO_METHOD; function BioCtrlPending(b: PBIO): integer; function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer; function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer; function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer; procedure PKCS12free(p12: SslPtr); function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; function Asn1UtctimeNew: PASN1_UTCTIME; procedure Asn1UtctimeFree(a: PASN1_UTCTIME); function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; function Asn1IntegerGet(a: PASN1_INTEGER): integer; {pf} function i2dX509bio(b: PBIO; x: PX509): integer; function d2iX509bio(b:PBIO; x:PX509): PX509; {pf} function PEMReadBioX509(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509; {pf} procedure SkX509PopFree(st: PSTACK; func: TSkPopFreeFunc); {pf} function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; // 3DES functions procedure DESsetoddparity(Key: des_cblock); function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); {$ENDIF} function IsSSLloaded: Boolean; function InitSSLInterface: Boolean; function DestroySSLInterface: Boolean; var _X509Free: TX509Free = nil; {pf} implementation uses {$IFDEF OS2} Sockets, {$ENDIF OS2} SyncObjs; {$IFNDEF CIL} type // libssl.dll TSslGetError = function(s: PSSL; ret_code: Integer):Integer; cdecl; TSslLibraryInit = function:Integer; cdecl; TSslLoadErrorStrings = procedure; cdecl; TSslCtxSetCipherList = function(arg0: PSSL_CTX; str: PAnsiChar):Integer; cdecl; TSslCtxNew = function(meth: PSSL_METHOD):PSSL_CTX; cdecl; TSslCtxFree = procedure(arg0: PSSL_CTX); cdecl; TSslSetFd = function(s: PSSL; fd: Integer):Integer; cdecl; TSslMethodV2 = function:PSSL_METHOD; cdecl; TSslMethodV3 = function:PSSL_METHOD; cdecl; TSslMethodTLSV1 = function:PSSL_METHOD; cdecl; TSslMethodTLSV11 = function:PSSL_METHOD; cdecl; TSslMethodTLSV12 = function:PSSL_METHOD; cdecl; TSslMethodV23 = function:PSSL_METHOD; cdecl; TSslCtxUsePrivateKey = function(ctx: PSSL_CTX; pkey: sslptr):Integer; cdecl; TSslCtxUsePrivateKeyASN1 = function(pk: integer; ctx: PSSL_CTX; d: sslptr; len: integer):Integer; cdecl; TSslCtxUsePrivateKeyFile = function(ctx: PSSL_CTX; const _file: PAnsiChar; _type: Integer):Integer; cdecl; TSslCtxUseCertificate = function(ctx: PSSL_CTX; x: SslPtr):Integer; cdecl; TSslCtxUseCertificateASN1 = function(ctx: PSSL_CTX; len: Integer; d: SslPtr):Integer; cdecl; TSslCtxUseCertificateFile = function(ctx: PSSL_CTX; const _file: PAnsiChar; _type: Integer):Integer; cdecl; TSslCtxUseCertificateChainFile = function(ctx: PSSL_CTX; const _file: PAnsiChar):Integer; cdecl; TSslCtxCheckPrivateKeyFile = function(ctx: PSSL_CTX):Integer; cdecl; TSslCtxSetDefaultPasswdCb = procedure(ctx: PSSL_CTX; cb: SslPtr); cdecl; TSslCtxSetDefaultPasswdCbUserdata = procedure(ctx: PSSL_CTX; u: SslPtr); cdecl; TSslCtxLoadVerifyLocations = function(ctx: PSSL_CTX; const CAfile: PAnsiChar; const CApath: PAnsiChar):Integer; cdecl; TSslCtxCtrl = function(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; cdecl; TSslNew = function(ctx: PSSL_CTX):PSSL; cdecl; TSslFree = procedure(ssl: PSSL); cdecl; TSslAccept = function(ssl: PSSL):Integer; cdecl; TSslConnect = function(ssl: PSSL):Integer; cdecl; TSslShutdown = function(ssl: PSSL):Integer; cdecl; TSslRead = function(ssl: PSSL; buf: PAnsiChar; num: Integer):Integer; cdecl; TSslPeek = function(ssl: PSSL; buf: PAnsiChar; num: Integer):Integer; cdecl; TSslWrite = function(ssl: PSSL; const buf: PAnsiChar; num: Integer):Integer; cdecl; TSslPending = function(ssl: PSSL):Integer; cdecl; TSslGetVersion = function(ssl: PSSL):PAnsiChar; cdecl; TSslGetPeerCertificate = function(ssl: PSSL):PX509; cdecl; TSslCtxSetVerify = procedure(ctx: PSSL_CTX; mode: Integer; arg2: SslPtr); cdecl; TSSLGetCurrentCipher = function(s: PSSL):SslPtr; cdecl; TSSLCipherGetName = function(c: Sslptr):PAnsiChar; cdecl; TSSLCipherGetBits = function(c: SslPtr; alg_bits: PInteger):Integer; cdecl; TSSLGetVerifyResult = function(ssl: PSSL):Integer; cdecl; TSSLCtrl = function(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; cdecl; TSSLSetTlsextHostName = function(ssl: PSSL; buf: PAnsiChar):Integer; cdecl; // libeay.dll TX509New = function: PX509; cdecl; TX509NameOneline = function(a: PX509_NAME; buf: PAnsiChar; size: Integer):PAnsiChar; cdecl; TX509GetSubjectName = function(a: PX509):PX509_NAME; cdecl; TX509GetIssuerName = function(a: PX509):PX509_NAME; cdecl; TX509NameHash = function(x: PX509_NAME):Cardinal; cdecl; TX509Digest = function(data: PX509; _type: PEVP_MD; md: PAnsiChar; len: PInteger):Integer; cdecl; TX509print = function(b: PBIO; a: PX509): integer; cdecl; TX509SetVersion = function(x: PX509; version: integer): integer; cdecl; TX509SetPubkey = function(x: PX509; pkey: EVP_PKEY): integer; cdecl; TX509SetIssuerName = function(x: PX509; name: PX509_NAME): integer; cdecl; TX509NameAddEntryByTxt = function(name: PX509_NAME; field: PAnsiChar; _type: integer; bytes: PAnsiChar; len, loc, _set: integer): integer; cdecl; TX509Sign = function(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; cdecl; TX509GmtimeAdj = function(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; cdecl; TX509SetNotBefore = function(x: PX509; tm: PASN1_UTCTIME): integer; cdecl; TX509SetNotAfter = function(x: PX509; tm: PASN1_UTCTIME): integer; cdecl; TX509GetSerialNumber = function(x: PX509): PASN1_INTEGER; cdecl; TEvpPkeyNew = function: EVP_PKEY; cdecl; TEvpPkeyFree = procedure(pk: EVP_PKEY); cdecl; TEvpPkeyAssign = function(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; cdecl; TEvpGetDigestByName = function(Name: PAnsiChar): PEVP_MD; cdecl; TEVPcleanup = procedure; cdecl; TSSLeayversion = function(t: integer): PAnsiChar; cdecl; TErrErrorString = procedure(e: integer; buf: PAnsiChar; len: integer); cdecl; TErrGetError = function: integer; cdecl; TErrClearError = procedure; cdecl; TErrFreeStrings = procedure; cdecl; TErrRemoveState = procedure(pid: integer); cdecl; TOPENSSLaddallalgorithms = procedure; cdecl; TCRYPTOcleanupAllExData = procedure; cdecl; TRandScreen = procedure; cdecl; TBioNew = function(b: PBIO_METHOD): PBIO; cdecl; TBioFreeAll = procedure(b: PBIO); cdecl; TBioSMem = function: PBIO_METHOD; cdecl; TBioCtrlPending = function(b: PBIO): integer; cdecl; TBioRead = function(b: PBIO; Buf: PAnsiChar; Len: integer): integer; cdecl; TBioWrite = function(b: PBIO; Buf: PAnsiChar; Len: integer): integer; cdecl; Td2iPKCS12bio = function(b:PBIO; Pkcs12: SslPtr): SslPtr; cdecl; TPKCS12parse = function(p12: SslPtr; pass: PAnsiChar; var pkey, cert, ca: SslPtr): integer; cdecl; TPKCS12free = procedure(p12: SslPtr); cdecl; TRsaGenerateKey = function(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; cdecl; TAsn1UtctimeNew = function: PASN1_UTCTIME; cdecl; TAsn1UtctimeFree = procedure(a: PASN1_UTCTIME); cdecl; TAsn1IntegerSet = function(a: PASN1_INTEGER; v: integer): integer; cdecl; TAsn1IntegerGet = function(a: PASN1_INTEGER): integer; cdecl; {pf} Ti2dX509bio = function(b: PBIO; x: PX509): integer; cdecl; Td2iX509bio = function(b:PBIO; x:PX509): PX509; cdecl; {pf} TPEMReadBioX509 = function(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg:SslPtr): PX509; cdecl; {pf} TSkX509PopFree = procedure(st: PSTACK; func: TSkPopFreeFunc); cdecl; {pf} Ti2dPrivateKeyBio= function(b: PBIO; pkey: EVP_PKEY): integer; cdecl; // 3DES functions TDESsetoddparity = procedure(Key: des_cblock); cdecl; TDESsetkeychecked = function(key: des_cblock; schedule: des_key_schedule): Integer; cdecl; TDESecbencrypt = procedure(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); cdecl; //thread lock functions TCRYPTOnumlocks = function: integer; cdecl; TCRYPTOSetLockingCallback = procedure(cb: Sslptr); cdecl; var // libssl.dll _SslGetError: TSslGetError = nil; _SslLibraryInit: TSslLibraryInit = nil; _SslLoadErrorStrings: TSslLoadErrorStrings = nil; _SslCtxSetCipherList: TSslCtxSetCipherList = nil; _SslCtxNew: TSslCtxNew = nil; _SslCtxFree: TSslCtxFree = nil; _SslSetFd: TSslSetFd = nil; _SslMethodV2: TSslMethodV2 = nil; _SslMethodV3: TSslMethodV3 = nil; _SslMethodTLSV1: TSslMethodTLSV1 = nil; _SslMethodTLSV11: TSslMethodTLSV11 = nil; _SslMethodTLSV12: TSslMethodTLSV12 = nil; _SslMethodV23: TSslMethodV23 = nil; _SslCtxUsePrivateKey: TSslCtxUsePrivateKey = nil; _SslCtxUsePrivateKeyASN1: TSslCtxUsePrivateKeyASN1 = nil; _SslCtxUsePrivateKeyFile: TSslCtxUsePrivateKeyFile = nil; _SslCtxUseCertificate: TSslCtxUseCertificate = nil; _SslCtxUseCertificateASN1: TSslCtxUseCertificateASN1 = nil; _SslCtxUseCertificateFile: TSslCtxUseCertificateFile = nil; _SslCtxUseCertificateChainFile: TSslCtxUseCertificateChainFile = nil; _SslCtxCheckPrivateKeyFile: TSslCtxCheckPrivateKeyFile = nil; _SslCtxSetDefaultPasswdCb: TSslCtxSetDefaultPasswdCb = nil; _SslCtxSetDefaultPasswdCbUserdata: TSslCtxSetDefaultPasswdCbUserdata = nil; _SslCtxLoadVerifyLocations: TSslCtxLoadVerifyLocations = nil; _SslCtxCtrl: TSslCtxCtrl = nil; _SslNew: TSslNew = nil; _SslFree: TSslFree = nil; _SslAccept: TSslAccept = nil; _SslConnect: TSslConnect = nil; _SslShutdown: TSslShutdown = nil; _SslRead: TSslRead = nil; _SslPeek: TSslPeek = nil; _SslWrite: TSslWrite = nil; _SslPending: TSslPending = nil; _SslGetVersion: TSslGetVersion = nil; _SslGetPeerCertificate: TSslGetPeerCertificate = nil; _SslCtxSetVerify: TSslCtxSetVerify = nil; _SSLGetCurrentCipher: TSSLGetCurrentCipher = nil; _SSLCipherGetName: TSSLCipherGetName = nil; _SSLCipherGetBits: TSSLCipherGetBits = nil; _SSLGetVerifyResult: TSSLGetVerifyResult = nil; _SSLCtrl: TSSLCtrl = nil; // libeay.dll _X509New: TX509New = nil; _X509NameOneline: TX509NameOneline = nil; _X509GetSubjectName: TX509GetSubjectName = nil; _X509GetIssuerName: TX509GetIssuerName = nil; _X509NameHash: TX509NameHash = nil; _X509Digest: TX509Digest = nil; _X509print: TX509print = nil; _X509SetVersion: TX509SetVersion = nil; _X509SetPubkey: TX509SetPubkey = nil; _X509SetIssuerName: TX509SetIssuerName = nil; _X509NameAddEntryByTxt: TX509NameAddEntryByTxt = nil; _X509Sign: TX509Sign = nil; _X509GmtimeAdj: TX509GmtimeAdj = nil; _X509SetNotBefore: TX509SetNotBefore = nil; _X509SetNotAfter: TX509SetNotAfter = nil; _X509GetSerialNumber: TX509GetSerialNumber = nil; _EvpPkeyNew: TEvpPkeyNew = nil; _EvpPkeyFree: TEvpPkeyFree = nil; _EvpPkeyAssign: TEvpPkeyAssign = nil; _EvpGetDigestByName: TEvpGetDigestByName = nil; _EVPcleanup: TEVPcleanup = nil; _SSLeayversion: TSSLeayversion = nil; _ErrErrorString: TErrErrorString = nil; _ErrGetError: TErrGetError = nil; _ErrClearError: TErrClearError = nil; _ErrFreeStrings: TErrFreeStrings = nil; _ErrRemoveState: TErrRemoveState = nil; _OPENSSLaddallalgorithms: TOPENSSLaddallalgorithms = nil; _CRYPTOcleanupAllExData: TCRYPTOcleanupAllExData = nil; _RandScreen: TRandScreen = nil; _BioNew: TBioNew = nil; _BioFreeAll: TBioFreeAll = nil; _BioSMem: TBioSMem = nil; _BioCtrlPending: TBioCtrlPending = nil; _BioRead: TBioRead = nil; _BioWrite: TBioWrite = nil; _d2iPKCS12bio: Td2iPKCS12bio = nil; _PKCS12parse: TPKCS12parse = nil; _PKCS12free: TPKCS12free = nil; _RsaGenerateKey: TRsaGenerateKey = nil; _Asn1UtctimeNew: TAsn1UtctimeNew = nil; _Asn1UtctimeFree: TAsn1UtctimeFree = nil; _Asn1IntegerSet: TAsn1IntegerSet = nil; _Asn1IntegerGet: TAsn1IntegerGet = nil; {pf} _i2dX509bio: Ti2dX509bio = nil; _d2iX509bio: Td2iX509bio = nil; {pf} _PEMReadBioX509: TPEMReadBioX509 = nil; {pf} _SkX509PopFree: TSkX509PopFree = nil; {pf} _i2dPrivateKeyBio: Ti2dPrivateKeyBio = nil; // 3DES functions _DESsetoddparity: TDESsetoddparity = nil; _DESsetkeychecked: TDESsetkeychecked = nil; _DESecbencrypt: TDESecbencrypt = nil; //thread lock functions _CRYPTOnumlocks: TCRYPTOnumlocks = nil; _CRYPTOSetLockingCallback: TCRYPTOSetLockingCallback = nil; {$ENDIF} var SSLCS: TCriticalSection; SSLloaded: boolean = false; {$IFNDEF CIL} Locks: TList; {$ENDIF} {$IFNDEF CIL} // libssl.dll function SslGetError(s: PSSL; ret_code: Integer):Integer; begin if InitSSLInterface and Assigned(_SslGetError) then Result := _SslGetError(s, ret_code) else Result := SSL_ERROR_SSL; end; function SslLibraryInit:Integer; begin if InitSSLInterface and Assigned(_SslLibraryInit) then Result := _SslLibraryInit else Result := 1; end; procedure SslLoadErrorStrings; begin if InitSSLInterface and Assigned(_SslLoadErrorStrings) then _SslLoadErrorStrings; end; //function SslCtxSetCipherList(arg0: PSSL_CTX; str: PChar):Integer; function SslCtxSetCipherList(arg0: PSSL_CTX; var str: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxSetCipherList) then Result := _SslCtxSetCipherList(arg0, PAnsiChar(str)) else Result := 0; end; function SslCtxNew(meth: PSSL_METHOD):PSSL_CTX; begin if InitSSLInterface and Assigned(_SslCtxNew) then Result := _SslCtxNew(meth) else Result := nil; end; procedure SslCtxFree(arg0: PSSL_CTX); begin if InitSSLInterface and Assigned(_SslCtxFree) then _SslCtxFree(arg0); end; function SslSetFd(s: PSSL; fd: Integer):Integer; begin if InitSSLInterface and Assigned(_SslSetFd) then Result := _SslSetFd(s, fd) else Result := 0; end; function SslMethodV2:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV2) then Result := _SslMethodV2 else Result := nil; end; function SslMethodV3:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV3) then Result := _SslMethodV3 else Result := nil; end; function SslMethodTLSV1:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV1) then Result := _SslMethodTLSV1 else Result := nil; end; function SslMethodTLSV11:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV11) then Result := _SslMethodTLSV11 else Result := nil; end; function SslMethodTLSV12:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodTLSV12) then Result := _SslMethodTLSV12 else Result := nil; end; function SslMethodV23:PSSL_METHOD; begin if InitSSLInterface and Assigned(_SslMethodV23) then Result := _SslMethodV23 else Result := nil; end; function SslCtxUsePrivateKey(ctx: PSSL_CTX; pkey: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKey) then Result := _SslCtxUsePrivateKey(ctx, pkey) else Result := 0; end; function SslCtxUsePrivateKeyASN1(pk: integer; ctx: PSSL_CTX; d: AnsiString; len: integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKeyASN1) then Result := _SslCtxUsePrivateKeyASN1(pk, ctx, Sslptr(d), len) else Result := 0; end; //function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: PChar; _type: Integer):Integer; function SslCtxUsePrivateKeyFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUsePrivateKeyFile) then Result := _SslCtxUsePrivateKeyFile(ctx, PAnsiChar(_file), _type) else Result := 0; end; function SslCtxUseCertificate(ctx: PSSL_CTX; x: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificate) then Result := _SslCtxUseCertificate(ctx, x) else Result := 0; end; function SslCtxUseCertificateASN1(ctx: PSSL_CTX; len: integer; d: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateASN1) then Result := _SslCtxUseCertificateASN1(ctx, len, SslPtr(d)) else Result := 0; end; function SslCtxUseCertificateFile(ctx: PSSL_CTX; const _file: AnsiString; _type: Integer):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateFile) then Result := _SslCtxUseCertificateFile(ctx, PAnsiChar(_file), _type) else Result := 0; end; //function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: PChar):Integer; function SslCtxUseCertificateChainFile(ctx: PSSL_CTX; const _file: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxUseCertificateChainFile) then Result := _SslCtxUseCertificateChainFile(ctx, PAnsiChar(_file)) else Result := 0; end; function SslCtxCheckPrivateKeyFile(ctx: PSSL_CTX):Integer; begin if InitSSLInterface and Assigned(_SslCtxCheckPrivateKeyFile) then Result := _SslCtxCheckPrivateKeyFile(ctx) else Result := 0; end; procedure SslCtxSetDefaultPasswdCb(ctx: PSSL_CTX; cb: PPasswdCb); begin if InitSSLInterface and Assigned(_SslCtxSetDefaultPasswdCb) then _SslCtxSetDefaultPasswdCb(ctx, cb); end; procedure SslCtxSetDefaultPasswdCbUserdata(ctx: PSSL_CTX; u: SslPtr); begin if InitSSLInterface and Assigned(_SslCtxSetDefaultPasswdCbUserdata) then _SslCtxSetDefaultPasswdCbUserdata(ctx, u); end; //function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: PChar; const CApath: PChar):Integer; function SslCtxLoadVerifyLocations(ctx: PSSL_CTX; const CAfile: AnsiString; const CApath: AnsiString):Integer; begin if InitSSLInterface and Assigned(_SslCtxLoadVerifyLocations) then Result := _SslCtxLoadVerifyLocations(ctx, SslPtr(CAfile), SslPtr(CApath)) else Result := 0; end; function SslCtxCtrl(ctx: PSSL_CTX; cmd: integer; larg: integer; parg: SslPtr): integer; begin if InitSSLInterface and Assigned(_SslCtxCtrl) then Result := _SslCtxCtrl(ctx, cmd, larg, parg) else Result := 0; end; function SslNew(ctx: PSSL_CTX):PSSL; begin if InitSSLInterface and Assigned(_SslNew) then Result := _SslNew(ctx) else Result := nil; end; procedure SslFree(ssl: PSSL); begin if InitSSLInterface and Assigned(_SslFree) then _SslFree(ssl); end; function SslAccept(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslAccept) then Result := _SslAccept(ssl) else Result := -1; end; function SslConnect(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslConnect) then Result := _SslConnect(ssl) else Result := -1; end; function SslShutdown(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslShutdown) then Result := _SslShutdown(ssl) else Result := -1; end; //function SslRead(ssl: PSSL; buf: PChar; num: Integer):Integer; function SslRead(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslRead) then Result := _SslRead(ssl, PAnsiChar(buf), num) else Result := -1; end; //function SslPeek(ssl: PSSL; buf: PChar; num: Integer):Integer; function SslPeek(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslPeek) then Result := _SslPeek(ssl, PAnsiChar(buf), num) else Result := -1; end; //function SslWrite(ssl: PSSL; const buf: PChar; num: Integer):Integer; function SslWrite(ssl: PSSL; buf: SslPtr; num: Integer):Integer; begin if InitSSLInterface and Assigned(_SslWrite) then Result := _SslWrite(ssl, PAnsiChar(buf), num) else Result := -1; end; function SslPending(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SslPending) then Result := _SslPending(ssl) else Result := 0; end; //function SslGetVersion(ssl: PSSL):PChar; function SslGetVersion(ssl: PSSL):AnsiString; begin if InitSSLInterface and Assigned(_SslGetVersion) then Result := _SslGetVersion(ssl) else Result := ''; end; function SslGetPeerCertificate(ssl: PSSL):PX509; begin if InitSSLInterface and Assigned(_SslGetPeerCertificate) then Result := _SslGetPeerCertificate(ssl) else Result := nil; end; //procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: SslPtr); procedure SslCtxSetVerify(ctx: PSSL_CTX; mode: Integer; arg2: PFunction); begin if InitSSLInterface and Assigned(_SslCtxSetVerify) then _SslCtxSetVerify(ctx, mode, @arg2); end; function SSLGetCurrentCipher(s: PSSL):SslPtr; begin if InitSSLInterface and Assigned(_SSLGetCurrentCipher) then {$IFDEF CIL} {$ELSE} Result := _SSLGetCurrentCipher(s) {$ENDIF} else Result := nil; end; //function SSLCipherGetName(c: SslPtr):PChar; function SSLCipherGetName(c: SslPtr):AnsiString; begin if InitSSLInterface and Assigned(_SSLCipherGetName) then Result := _SSLCipherGetName(c) else Result := ''; end; //function SSLCipherGetBits(c: SslPtr; alg_bits: PInteger):Integer; function SSLCipherGetBits(c: SslPtr; var alg_bits: Integer):Integer; begin if InitSSLInterface and Assigned(_SSLCipherGetBits) then Result := _SSLCipherGetBits(c, @alg_bits) else Result := 0; end; function SSLGetVerifyResult(ssl: PSSL):Integer; begin if InitSSLInterface and Assigned(_SSLGetVerifyResult) then Result := _SSLGetVerifyResult(ssl) else Result := X509_V_ERR_APPLICATION_VERIFICATION; end; function SSLCtrl(ssl: PSSL; cmd: integer; larg: integer; parg: SslPtr):Integer; begin if InitSSLInterface and Assigned(_SSLCtrl) then Result := _SSLCtrl(ssl, cmd, larg, parg) else Result := X509_V_ERR_APPLICATION_VERIFICATION; end; // libeay.dll function X509New: PX509; begin if InitSSLInterface and Assigned(_X509New) then Result := _X509New else Result := nil; end; procedure X509Free(x: PX509); begin if InitSSLInterface and Assigned(_X509Free) then _X509Free(x); end; //function SslX509NameOneline(a: PX509_NAME; buf: PChar; size: Integer):PChar; function X509NameOneline(a: PX509_NAME; var buf: AnsiString; size: Integer):AnsiString; begin if InitSSLInterface and Assigned(_X509NameOneline) then Result := _X509NameOneline(a, PAnsiChar(buf),size) else Result := ''; end; function X509GetSubjectName(a: PX509):PX509_NAME; begin if InitSSLInterface and Assigned(_X509GetSubjectName) then Result := _X509GetSubjectName(a) else Result := nil; end; function X509GetIssuerName(a: PX509):PX509_NAME; begin if InitSSLInterface and Assigned(_X509GetIssuerName) then Result := _X509GetIssuerName(a) else Result := nil; end; function X509NameHash(x: PX509_NAME):Cardinal; begin if InitSSLInterface and Assigned(_X509NameHash) then Result := _X509NameHash(x) else Result := 0; end; //function SslX509Digest(data: PX509; _type: PEVP_MD; md: PChar; len: PInteger):Integer; function X509Digest(data: PX509; _type: PEVP_MD; md: AnsiString; var len: Integer):Integer; begin if InitSSLInterface and Assigned(_X509Digest) then Result := _X509Digest(data, _type, PAnsiChar(md), @len) else Result := 0; end; function EvpPkeyNew: EVP_PKEY; begin if InitSSLInterface and Assigned(_EvpPkeyNew) then Result := _EvpPkeyNew else Result := nil; end; procedure EvpPkeyFree(pk: EVP_PKEY); begin if InitSSLInterface and Assigned(_EvpPkeyFree) then _EvpPkeyFree(pk); end; function SSLeayversion(t: integer): Ansistring; begin if InitSSLInterface and Assigned(_SSLeayversion) then Result := PAnsiChar(_SSLeayversion(t)) else Result := ''; end; procedure ErrErrorString(e: integer; var buf: Ansistring; len: integer); begin if InitSSLInterface and Assigned(_ErrErrorString) then _ErrErrorString(e, Pointer(buf), len); buf := PAnsiChar(Buf); end; function ErrGetError: integer; begin if InitSSLInterface and Assigned(_ErrGetError) then Result := _ErrGetError else Result := SSL_ERROR_SSL; end; procedure ErrClearError; begin if InitSSLInterface and Assigned(_ErrClearError) then _ErrClearError; end; procedure ErrFreeStrings; begin if InitSSLInterface and Assigned(_ErrFreeStrings) then _ErrFreeStrings; end; procedure ErrRemoveState(pid: integer); begin if InitSSLInterface and Assigned(_ErrRemoveState) then _ErrRemoveState(pid); end; procedure OPENSSLaddallalgorithms; begin if InitSSLInterface and Assigned(_OPENSSLaddallalgorithms) then _OPENSSLaddallalgorithms; end; procedure EVPcleanup; begin if InitSSLInterface and Assigned(_EVPcleanup) then _EVPcleanup; end; procedure CRYPTOcleanupAllExData; begin if InitSSLInterface and Assigned(_CRYPTOcleanupAllExData) then _CRYPTOcleanupAllExData; end; procedure RandScreen; begin if InitSSLInterface and Assigned(_RandScreen) then _RandScreen; end; function BioNew(b: PBIO_METHOD): PBIO; begin if InitSSLInterface and Assigned(_BioNew) then Result := _BioNew(b) else Result := nil; end; procedure BioFreeAll(b: PBIO); begin if InitSSLInterface and Assigned(_BioFreeAll) then _BioFreeAll(b); end; function BioSMem: PBIO_METHOD; begin if InitSSLInterface and Assigned(_BioSMem) then Result := _BioSMem else Result := nil; end; function BioCtrlPending(b: PBIO): integer; begin if InitSSLInterface and Assigned(_BioCtrlPending) then Result := _BioCtrlPending(b) else Result := 0; end; //function BioRead(b: PBIO; Buf: PChar; Len: integer): integer; function BioRead(b: PBIO; var Buf: AnsiString; Len: integer): integer; begin if InitSSLInterface and Assigned(_BioRead) then Result := _BioRead(b, PAnsiChar(Buf), Len) else Result := -2; end; //function BioWrite(b: PBIO; Buf: PChar; Len: integer): integer; function BioWrite(b: PBIO; Buf: AnsiString; Len: integer): integer; begin if InitSSLInterface and Assigned(_BioWrite) then Result := _BioWrite(b, PAnsiChar(Buf), Len) else Result := -2; end; function X509print(b: PBIO; a: PX509): integer; begin if InitSSLInterface and Assigned(_X509print) then Result := _X509print(b, a) else Result := 0; end; function d2iPKCS12bio(b:PBIO; Pkcs12: SslPtr): SslPtr; begin if InitSSLInterface and Assigned(_d2iPKCS12bio) then Result := _d2iPKCS12bio(b, Pkcs12) else Result := nil; end; function PKCS12parse(p12: SslPtr; pass: Ansistring; var pkey, cert, ca: SslPtr): integer; begin if InitSSLInterface and Assigned(_PKCS12parse) then Result := _PKCS12parse(p12, SslPtr(pass), pkey, cert, ca) else Result := 0; end; procedure PKCS12free(p12: SslPtr); begin if InitSSLInterface and Assigned(_PKCS12free) then _PKCS12free(p12); end; function RsaGenerateKey(bits, e: integer; callback: PFunction; cb_arg: SslPtr): PRSA; begin if InitSSLInterface and Assigned(_RsaGenerateKey) then Result := _RsaGenerateKey(bits, e, callback, cb_arg) else Result := nil; end; function EvpPkeyAssign(pkey: EVP_PKEY; _type: integer; key: Prsa): integer; begin if InitSSLInterface and Assigned(_EvpPkeyAssign) then Result := _EvpPkeyAssign(pkey, _type, key) else Result := 0; end; function X509SetVersion(x: PX509; version: integer): integer; begin if InitSSLInterface and Assigned(_X509SetVersion) then Result := _X509SetVersion(x, version) else Result := 0; end; function X509SetPubkey(x: PX509; pkey: EVP_PKEY): integer; begin if InitSSLInterface and Assigned(_X509SetPubkey) then Result := _X509SetPubkey(x, pkey) else Result := 0; end; function X509SetIssuerName(x: PX509; name: PX509_NAME): integer; begin if InitSSLInterface and Assigned(_X509SetIssuerName) then Result := _X509SetIssuerName(x, name) else Result := 0; end; function X509NameAddEntryByTxt(name: PX509_NAME; field: Ansistring; _type: integer; bytes: Ansistring; len, loc, _set: integer): integer; begin if InitSSLInterface and Assigned(_X509NameAddEntryByTxt) then Result := _X509NameAddEntryByTxt(name, PAnsiChar(field), _type, PAnsiChar(Bytes), len, loc, _set) else Result := 0; end; function X509Sign(x: PX509; pkey: EVP_PKEY; const md: PEVP_MD): integer; begin if InitSSLInterface and Assigned(_X509Sign) then Result := _X509Sign(x, pkey, md) else Result := 0; end; function Asn1UtctimeNew: PASN1_UTCTIME; begin if InitSSLInterface and Assigned(_Asn1UtctimeNew) then Result := _Asn1UtctimeNew else Result := nil; end; procedure Asn1UtctimeFree(a: PASN1_UTCTIME); begin if InitSSLInterface and Assigned(_Asn1UtctimeFree) then _Asn1UtctimeFree(a); end; function X509GmtimeAdj(s: PASN1_UTCTIME; adj: integer): PASN1_UTCTIME; begin if InitSSLInterface and Assigned(_X509GmtimeAdj) then Result := _X509GmtimeAdj(s, adj) else Result := nil; end; function X509SetNotBefore(x: PX509; tm: PASN1_UTCTIME): integer; begin if InitSSLInterface and Assigned(_X509SetNotBefore) then Result := _X509SetNotBefore(x, tm) else Result := 0; end; function X509SetNotAfter(x: PX509; tm: PASN1_UTCTIME): integer; begin if InitSSLInterface and Assigned(_X509SetNotAfter) then Result := _X509SetNotAfter(x, tm) else Result := 0; end; function i2dX509bio(b: PBIO; x: PX509): integer; begin if InitSSLInterface and Assigned(_i2dX509bio) then Result := _i2dX509bio(b, x) else Result := 0; end; function d2iX509bio(b: PBIO; x: PX509): PX509; {pf} begin if InitSSLInterface and Assigned(_d2iX509bio) then Result := _d2iX509bio(x,b) else Result := nil; end; function PEMReadBioX509(b:PBIO; {var x:PX509;}x:PSslPtr; callback:PFunction; cb_arg: SslPtr): PX509; {pf} begin if InitSSLInterface and Assigned(_PEMReadBioX509) then Result := _PEMReadBioX509(b,x,callback,cb_arg) else Result := nil; end; procedure SkX509PopFree(st: PSTACK; func:TSkPopFreeFunc); {pf} begin if InitSSLInterface and Assigned(_SkX509PopFree) then _SkX509PopFree(st,func); end; function i2dPrivateKeyBio(b: PBIO; pkey: EVP_PKEY): integer; begin if InitSSLInterface and Assigned(_i2dPrivateKeyBio) then Result := _i2dPrivateKeyBio(b, pkey) else Result := 0; end; function EvpGetDigestByName(Name: AnsiString): PEVP_MD; begin if InitSSLInterface and Assigned(_EvpGetDigestByName) then Result := _EvpGetDigestByName(PAnsiChar(Name)) else Result := nil; end; function Asn1IntegerSet(a: PASN1_INTEGER; v: integer): integer; begin if InitSSLInterface and Assigned(_Asn1IntegerSet) then Result := _Asn1IntegerSet(a, v) else Result := 0; end; function Asn1IntegerGet(a: PASN1_INTEGER): integer; {pf} begin if InitSSLInterface and Assigned(_Asn1IntegerGet) then Result := _Asn1IntegerGet(a) else Result := 0; end; function X509GetSerialNumber(x: PX509): PASN1_INTEGER; begin if InitSSLInterface and Assigned(_X509GetSerialNumber) then Result := _X509GetSerialNumber(x) else Result := nil; end; // 3DES functions procedure DESsetoddparity(Key: des_cblock); begin if InitSSLInterface and Assigned(_DESsetoddparity) then _DESsetoddparity(Key); end; function DESsetkeychecked(key: des_cblock; schedule: des_key_schedule): Integer; begin if InitSSLInterface and Assigned(_DESsetkeychecked) then Result := _DESsetkeychecked(key, schedule) else Result := -1; end; procedure DESecbencrypt(Input: des_cblock; output: des_cblock; ks: des_key_schedule; enc: Integer); begin if InitSSLInterface and Assigned(_DESecbencrypt) then _DESecbencrypt(Input, output, ks, enc); end; procedure locking_callback(mode, ltype: integer; lfile: PChar; line: integer); cdecl; begin if (mode and 1) > 0 then TCriticalSection(Locks[ltype]).Enter else TCriticalSection(Locks[ltype]).Leave; end; procedure InitLocks; var n: integer; max: integer; begin Locks := TList.Create; max := _CRYPTOnumlocks; for n := 1 to max do Locks.Add(TCriticalSection.Create); _CRYPTOsetlockingcallback(@locking_callback); end; procedure FreeLocks; var n: integer; begin _CRYPTOsetlockingcallback(nil); for n := 0 to Locks.Count - 1 do TCriticalSection(Locks[n]).Free; Locks.Free; end; {$ENDIF} function LoadLib(const Value: String): HModule; begin {$IFDEF CIL} Result := LoadLibrary(Value); {$ELSE} Result := LoadLibrary(PChar(Value)); {$ENDIF} end; function GetProcAddr(module: HModule; const ProcName: string): SslPtr; begin {$IFDEF CIL} Result := GetProcAddress(module, ProcName); {$ELSE} Result := GetProcAddress(module, PChar(ProcName)); {$ENDIF} end; function InitSSLInterface: Boolean; var s: string; x: integer; begin {pf} if SSLLoaded then begin Result := TRUE; exit; end; {/pf} SSLCS.Enter; try if not IsSSLloaded then begin {$IFDEF CIL} SSLLibHandle := 1; SSLUtilHandle := 1; {$ELSE} SSLUtilHandle := LoadLib(DLLUtilName); SSLLibHandle := LoadLib(DLLSSLName); {$IFDEF MSWINDOWS} if (SSLLibHandle = 0) then SSLLibHandle := LoadLib(DLLSSLName2); {$ENDIF} {$ENDIF} if (SSLLibHandle <> 0) and (SSLUtilHandle <> 0) then begin {$IFNDEF CIL} _SslGetError := GetProcAddr(SSLLibHandle, 'SSL_get_error'); _SslLibraryInit := GetProcAddr(SSLLibHandle, 'SSL_library_init'); _SslLoadErrorStrings := GetProcAddr(SSLLibHandle, 'SSL_load_error_strings'); _SslCtxSetCipherList := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_cipher_list'); _SslCtxNew := GetProcAddr(SSLLibHandle, 'SSL_CTX_new'); _SslCtxFree := GetProcAddr(SSLLibHandle, 'SSL_CTX_free'); _SslSetFd := GetProcAddr(SSLLibHandle, 'SSL_set_fd'); _SslMethodV2 := GetProcAddr(SSLLibHandle, 'SSLv2_method'); _SslMethodV3 := GetProcAddr(SSLLibHandle, 'SSLv3_method'); _SslMethodTLSV1 := GetProcAddr(SSLLibHandle, 'TLSv1_method'); _SslMethodTLSV11 := GetProcAddr(SSLLibHandle, 'TLSv1_1_method'); _SslMethodTLSV12 := GetProcAddr(SSLLibHandle, 'TLSv1_2_method'); _SslMethodV23 := GetProcAddr(SSLLibHandle, 'SSLv23_method'); _SslCtxUsePrivateKey := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_PrivateKey'); _SslCtxUsePrivateKeyASN1 := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_PrivateKey_ASN1'); //use SSL_CTX_use_RSAPrivateKey_file instead SSL_CTX_use_PrivateKey_file, //because SSL_CTX_use_PrivateKey_file not support DER format. :-O _SslCtxUsePrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_RSAPrivateKey_file'); _SslCtxUseCertificate := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate'); _SslCtxUseCertificateASN1 := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_ASN1'); _SslCtxUseCertificateFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_file'); _SslCtxUseCertificateChainFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_use_certificate_chain_file'); _SslCtxCheckPrivateKeyFile := GetProcAddr(SSLLibHandle, 'SSL_CTX_check_private_key'); _SslCtxSetDefaultPasswdCb := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb'); _SslCtxSetDefaultPasswdCbUserdata := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_default_passwd_cb_userdata'); _SslCtxLoadVerifyLocations := GetProcAddr(SSLLibHandle, 'SSL_CTX_load_verify_locations'); _SslCtxCtrl := GetProcAddr(SSLLibHandle, 'SSL_CTX_ctrl'); _SslNew := GetProcAddr(SSLLibHandle, 'SSL_new'); _SslFree := GetProcAddr(SSLLibHandle, 'SSL_free'); _SslAccept := GetProcAddr(SSLLibHandle, 'SSL_accept'); _SslConnect := GetProcAddr(SSLLibHandle, 'SSL_connect'); _SslShutdown := GetProcAddr(SSLLibHandle, 'SSL_shutdown'); _SslRead := GetProcAddr(SSLLibHandle, 'SSL_read'); _SslPeek := GetProcAddr(SSLLibHandle, 'SSL_peek'); _SslWrite := GetProcAddr(SSLLibHandle, 'SSL_write'); _SslPending := GetProcAddr(SSLLibHandle, 'SSL_pending'); _SslGetPeerCertificate := GetProcAddr(SSLLibHandle, 'SSL_get_peer_certificate'); _SslGetVersion := GetProcAddr(SSLLibHandle, 'SSL_get_version'); _SslCtxSetVerify := GetProcAddr(SSLLibHandle, 'SSL_CTX_set_verify'); _SslGetCurrentCipher := GetProcAddr(SSLLibHandle, 'SSL_get_current_cipher'); _SslCipherGetName := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_name'); _SslCipherGetBits := GetProcAddr(SSLLibHandle, 'SSL_CIPHER_get_bits'); _SslGetVerifyResult := GetProcAddr(SSLLibHandle, 'SSL_get_verify_result'); _SslCtrl := GetProcAddr(SSLLibHandle, 'SSL_ctrl'); _X509New := GetProcAddr(SSLUtilHandle, 'X509_new'); _X509Free := GetProcAddr(SSLUtilHandle, 'X509_free'); _X509NameOneline := GetProcAddr(SSLUtilHandle, 'X509_NAME_oneline'); _X509GetSubjectName := GetProcAddr(SSLUtilHandle, 'X509_get_subject_name'); _X509GetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_get_issuer_name'); _X509NameHash := GetProcAddr(SSLUtilHandle, 'X509_NAME_hash'); _X509Digest := GetProcAddr(SSLUtilHandle, 'X509_digest'); _X509print := GetProcAddr(SSLUtilHandle, 'X509_print'); _X509SetVersion := GetProcAddr(SSLUtilHandle, 'X509_set_version'); _X509SetPubkey := GetProcAddr(SSLUtilHandle, 'X509_set_pubkey'); _X509SetIssuerName := GetProcAddr(SSLUtilHandle, 'X509_set_issuer_name'); _X509NameAddEntryByTxt := GetProcAddr(SSLUtilHandle, 'X509_NAME_add_entry_by_txt'); _X509Sign := GetProcAddr(SSLUtilHandle, 'X509_sign'); _X509GmtimeAdj := GetProcAddr(SSLUtilHandle, 'X509_gmtime_adj'); _X509SetNotBefore := GetProcAddr(SSLUtilHandle, 'X509_set_notBefore'); _X509SetNotAfter := GetProcAddr(SSLUtilHandle, 'X509_set_notAfter'); _X509GetSerialNumber := GetProcAddr(SSLUtilHandle, 'X509_get_serialNumber'); _EvpPkeyNew := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_new'); _EvpPkeyFree := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_free'); _EvpPkeyAssign := GetProcAddr(SSLUtilHandle, 'EVP_PKEY_assign'); _EVPCleanup := GetProcAddr(SSLUtilHandle, 'EVP_cleanup'); _EvpGetDigestByName := GetProcAddr(SSLUtilHandle, 'EVP_get_digestbyname'); _SSLeayversion := GetProcAddr(SSLUtilHandle, 'SSLeay_version'); _ErrErrorString := GetProcAddr(SSLUtilHandle, 'ERR_error_string_n'); _ErrGetError := GetProcAddr(SSLUtilHandle, 'ERR_get_error'); _ErrClearError := GetProcAddr(SSLUtilHandle, 'ERR_clear_error'); _ErrFreeStrings := GetProcAddr(SSLUtilHandle, 'ERR_free_strings'); _ErrRemoveState := GetProcAddr(SSLUtilHandle, 'ERR_remove_state'); _OPENSSLaddallalgorithms := GetProcAddr(SSLUtilHandle, 'OPENSSL_add_all_algorithms_noconf'); _CRYPTOcleanupAllExData := GetProcAddr(SSLUtilHandle, 'CRYPTO_cleanup_all_ex_data'); _RandScreen := GetProcAddr(SSLUtilHandle, 'RAND_screen'); _BioNew := GetProcAddr(SSLUtilHandle, 'BIO_new'); _BioFreeAll := GetProcAddr(SSLUtilHandle, 'BIO_free_all'); _BioSMem := GetProcAddr(SSLUtilHandle, 'BIO_s_mem'); _BioCtrlPending := GetProcAddr(SSLUtilHandle, 'BIO_ctrl_pending'); _BioRead := GetProcAddr(SSLUtilHandle, 'BIO_read'); _BioWrite := GetProcAddr(SSLUtilHandle, 'BIO_write'); _d2iPKCS12bio := GetProcAddr(SSLUtilHandle, 'd2i_PKCS12_bio'); _PKCS12parse := GetProcAddr(SSLUtilHandle, 'PKCS12_parse'); _PKCS12free := GetProcAddr(SSLUtilHandle, 'PKCS12_free'); _RsaGenerateKey := GetProcAddr(SSLUtilHandle, 'RSA_generate_key'); _Asn1UtctimeNew := GetProcAddr(SSLUtilHandle, 'ASN1_UTCTIME_new'); _Asn1UtctimeFree := GetProcAddr(SSLUtilHandle, 'ASN1_UTCTIME_free'); _Asn1IntegerSet := GetProcAddr(SSLUtilHandle, 'ASN1_INTEGER_set'); _Asn1IntegerGet := GetProcAddr(SSLUtilHandle, 'ASN1_INTEGER_get'); {pf} _i2dX509bio := GetProcAddr(SSLUtilHandle, 'i2d_X509_bio'); _d2iX509bio := GetProcAddr(SSLUtilHandle, 'd2i_X509_bio'); {pf} _PEMReadBioX509 := GetProcAddr(SSLUtilHandle, 'PEM_read_bio_X509'); {pf} _SkX509PopFree := GetProcAddr(SSLUtilHandle, 'SK_X509_POP_FREE'); {pf} _i2dPrivateKeyBio := GetProcAddr(SSLUtilHandle, 'i2d_PrivateKey_bio'); // 3DES functions _DESsetoddparity := GetProcAddr(SSLUtilHandle, 'DES_set_odd_parity'); _DESsetkeychecked := GetProcAddr(SSLUtilHandle, 'DES_set_key_checked'); _DESecbencrypt := GetProcAddr(SSLUtilHandle, 'DES_ecb_encrypt'); // _CRYPTOnumlocks := GetProcAddr(SSLUtilHandle, 'CRYPTO_num_locks'); _CRYPTOsetlockingcallback := GetProcAddr(SSLUtilHandle, 'CRYPTO_set_locking_callback'); {$ENDIF} {$IFDEF CIL} SslLibraryInit; SslLoadErrorStrings; OPENSSLaddallalgorithms; RandScreen; {$ELSE} SetLength(s, 1024); x := GetModuleFilename(SSLLibHandle,PChar(s),Length(s)); SetLength(s, x); SSLLibFile := s; SetLength(s, 1024); x := GetModuleFilename(SSLUtilHandle,PChar(s),Length(s)); SetLength(s, x); SSLUtilFile := s; //init library if assigned(_SslLibraryInit) then _SslLibraryInit; if assigned(_SslLoadErrorStrings) then _SslLoadErrorStrings; if assigned(_OPENSSLaddallalgorithms) then _OPENSSLaddallalgorithms; if assigned(_RandScreen) then _RandScreen; if assigned(_CRYPTOnumlocks) and assigned(_CRYPTOsetlockingcallback) then InitLocks; {$ENDIF} SSLloaded := True; {$IFDEF OS2} Result := InitEMXHandles; {$ELSE OS2} Result := True; {$ENDIF OS2} end else begin //load failed! if SSLLibHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLLibHandle); {$ENDIF} SSLLibHandle := 0; end; if SSLUtilHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLUtilHandle); {$ENDIF} SSLLibHandle := 0; end; Result := False; end; end else //loaded before... Result := true; finally SSLCS.Leave; end; end; function DestroySSLInterface: Boolean; begin SSLCS.Enter; try if IsSSLLoaded then begin //deinit library {$IFNDEF CIL} if assigned(_CRYPTOnumlocks) and assigned(_CRYPTOsetlockingcallback) then FreeLocks; {$ENDIF} EVPCleanup; CRYPTOcleanupAllExData; ErrRemoveState(0); end; SSLloaded := false; if SSLLibHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLLibHandle); {$ENDIF} SSLLibHandle := 0; end; if SSLUtilHandle <> 0 then begin {$IFNDEF CIL} FreeLibrary(SSLUtilHandle); {$ENDIF} SSLLibHandle := 0; end; {$IFNDEF CIL} _SslGetError := nil; _SslLibraryInit := nil; _SslLoadErrorStrings := nil; _SslCtxSetCipherList := nil; _SslCtxNew := nil; _SslCtxFree := nil; _SslSetFd := nil; _SslMethodV2 := nil; _SslMethodV3 := nil; _SslMethodTLSV1 := nil; _SslMethodTLSV11 := nil; _SslMethodTLSV12 := nil; _SslMethodV23 := nil; _SslCtxUsePrivateKey := nil; _SslCtxUsePrivateKeyASN1 := nil; _SslCtxUsePrivateKeyFile := nil; _SslCtxUseCertificate := nil; _SslCtxUseCertificateASN1 := nil; _SslCtxUseCertificateFile := nil; _SslCtxUseCertificateChainFile := nil; _SslCtxCheckPrivateKeyFile := nil; _SslCtxSetDefaultPasswdCb := nil; _SslCtxSetDefaultPasswdCbUserdata := nil; _SslCtxLoadVerifyLocations := nil; _SslCtxCtrl := nil; _SslNew := nil; _SslFree := nil; _SslAccept := nil; _SslConnect := nil; _SslShutdown := nil; _SslRead := nil; _SslPeek := nil; _SslWrite := nil; _SslPending := nil; _SslGetPeerCertificate := nil; _SslGetVersion := nil; _SslCtxSetVerify := nil; _SslGetCurrentCipher := nil; _SslCipherGetName := nil; _SslCipherGetBits := nil; _SslGetVerifyResult := nil; _SslCtrl := nil; _X509New := nil; _X509Free := nil; _X509NameOneline := nil; _X509GetSubjectName := nil; _X509GetIssuerName := nil; _X509NameHash := nil; _X509Digest := nil; _X509print := nil; _X509SetVersion := nil; _X509SetPubkey := nil; _X509SetIssuerName := nil; _X509NameAddEntryByTxt := nil; _X509Sign := nil; _X509GmtimeAdj := nil; _X509SetNotBefore := nil; _X509SetNotAfter := nil; _X509GetSerialNumber := nil; _EvpPkeyNew := nil; _EvpPkeyFree := nil; _EvpPkeyAssign := nil; _EVPCleanup := nil; _EvpGetDigestByName := nil; _SSLeayversion := nil; _ErrErrorString := nil; _ErrGetError := nil; _ErrClearError := nil; _ErrFreeStrings := nil; _ErrRemoveState := nil; _OPENSSLaddallalgorithms := nil; _CRYPTOcleanupAllExData := nil; _RandScreen := nil; _BioNew := nil; _BioFreeAll := nil; _BioSMem := nil; _BioCtrlPending := nil; _BioRead := nil; _BioWrite := nil; _d2iPKCS12bio := nil; _PKCS12parse := nil; _PKCS12free := nil; _RsaGenerateKey := nil; _Asn1UtctimeNew := nil; _Asn1UtctimeFree := nil; _Asn1IntegerSet := nil; _Asn1IntegerGet := nil; {pf} _SkX509PopFree := nil; {pf} _i2dX509bio := nil; _i2dPrivateKeyBio := nil; // 3DES functions _DESsetoddparity := nil; _DESsetkeychecked := nil; _DESecbencrypt := nil; // _CRYPTOnumlocks := nil; _CRYPTOsetlockingcallback := nil; {$ENDIF} finally SSLCS.Leave; end; Result := True; end; function IsSSLloaded: Boolean; begin Result := SSLLoaded; end; initialization begin SSLCS:= TCriticalSection.Create; end; finalization begin {$IFNDEF CIL} DestroySSLInterface; {$ENDIF} SSLCS.Free; end; end. doublecmd-0.7.1/plugins/wfx/ftp/synapse/ssl_winssl_lib.inc0000644000175000001440000000050512561613237023004 0ustar alexxusersexports SSL_library_init, SSL_set_fd, SSL_CTX_new, SSL_CTX_free, SSL_new, SSL_free, SSL_connect, SSL_shutdown, SSL_read, SSL_write, SSL_pending, SSLv23_method, SSLv2_method, SSLv3_method, TLSv1_method, TLSv1_1_method, TLSv1_2_method, SSL_CTX_set_verify, SSL_get_error;doublecmd-0.7.1/plugins/wfx/ftp/src/0000755000175000001440000000000012675717732016403 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/ftp/src/ftp.lpi0000644000175000001440000001207012645255131017665 0ustar alexxusers doublecmd-0.7.1/plugins/wfx/ftp/src/ftpfunc.pas0000644000175000001440000007514512645520662020560 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpFunc; {$mode delphi}{$H+} {$include calling.inc} interface uses SysUtils, Classes, WfxPlugin, Extension; type TConnection = class public ConnectionName, Path, Host: AnsiString; Port: AnsiString; UserName: AnsiString; Password: AnsiString; MasterPassword: Boolean; PassiveMode: Boolean; AutoTLS: Boolean; Encoding: AnsiString; InitCommands: AnsiString; PasswordChanged: Boolean; end; function FsInitW(PluginNr: Integer; pProgressProc: TProgressProcW; pLogProc: TLogProcW; pRequestProc: TRequestProcW): Integer; dcpcall; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; function FsFindNextW(Hdl: THandle; var FindData: TWin32FindDataW): BOOL; dcpcall; function FsFindClose(Hdl: THandle): Integer; dcpcall; function FsExecuteFileW(MainWin: THandle; RemoteName, Verb: PWideChar): Integer; dcpcall; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; function FsGetFileW(RemoteName, LocalName: PWideChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; dcpcall; function FsPutFileW(LocalName, RemoteName: PWideChar; CopyFlags: Integer) : Integer; dcpcall; function FsDeleteFileW(RemoteName: PWideChar): BOOL; dcpcall; function FsMkDirW(RemoteDir: PWideChar): BOOL; dcpcall; function FsRemoveDirW(RemoteName: PWideChar): BOOL; dcpcall; function FsDisconnectW(DisconnectRoot: PWideChar): BOOL; dcpcall; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; { Network API } { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; function FsNetworkManageConnection(MainWin: HWND; Connection: PAnsiChar; Action: LongInt; MaxLen: LongInt): LongBool; dcpcall; function FsNetworkOpenConnection(Connection: PAnsiChar; RootDir, RemotePath: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; } { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; function ReadPassword(ConnectionName: AnsiString): AnsiString; function DeletePassword(ConnectionName: AnsiString): Boolean; var gStartupInfo: TExtensionStartupInfo; gConnection: TConnection; var LogProc: TLogProcW; CryptProc: TCryptProcW; PluginNumber: Integer; CryptoNumber: Integer; RequestProc: TRequestProcW; ProgressProc: TProgressProcW; implementation uses IniFiles, StrUtils, FtpAdv, FtpUtils, FtpConfDlg, syncobjs, LazFileUtils, LazUTF8; var ActiveConnectionList, ConnectionList: TStringList; IniFile: TIniFile; HasDialogAPI: Boolean = False; ListLock: TCriticalSection; const cAddConnection = ''; cQuickConnection = ''; FS_COPYFLAGS_FORCE = FS_COPYFLAGS_OVERWRITE or FS_COPYFLAGS_RESUME; RootList: array [0 .. 1] of AnsiString = (cAddConnection, cQuickConnection); type TListRec = record Path: AnsiString; Index: Integer; FtpSend: TFTPSendEx; FtpList: TFTPListEx; end; PListRec = ^TListRec; procedure ReadConnectionList; var I, Count: Integer; sIndex: AnsiString; Connection: TConnection; begin Count := IniFile.ReadInteger('FTP', 'ConnectionCount', 0); for I := 1 to Count do begin sIndex := IntToStr(I); Connection := TConnection.Create; Connection.ConnectionName := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Name', EmptyStr); Connection.Path := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Path', EmptyStr); Connection.Host := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Host', EmptyStr); Connection.Port := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Port', EmptyStr); Connection.UserName := IniFile.ReadString('FTP', 'Connection' + sIndex + 'UserName', EmptyStr); Connection.MasterPassword := IniFile.ReadBool('FTP', 'Connection' + sIndex + 'MasterPassword', False); if Connection.MasterPassword then Connection.Password := EmptyStr else Connection.Password := DecodeBase64(IniFile.ReadString('FTP', 'Connection' + sIndex + 'Password', EmptyStr)); Connection.Encoding := IniFile.ReadString('FTP', 'Connection' + sIndex + 'Encoding', EmptyStr); Connection.PassiveMode:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'PassiveMode', True); Connection.AutoTLS:= IniFile.ReadBool('FTP', 'Connection' + sIndex + 'AutoTLS', False); Connection.InitCommands := IniFile.ReadString('FTP', 'Connection' + sIndex + 'InitCommands', EmptyStr); // add connection to connection list ConnectionList.AddObject(Connection.ConnectionName, Connection); end; end; procedure WriteConnectionList; var I, Count: Integer; sIndex: AnsiString; Connection: TConnection; begin IniFile.EraseSection('FTP'); Count := ConnectionList.Count; IniFile.WriteInteger('FTP', 'ConnectionCount', Count); for I := 0 to Count - 1 do begin sIndex := IntToStr(I + 1); Connection := TConnection(ConnectionList.Objects[I]); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Name', Connection.ConnectionName); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Path', Connection.Path); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Host', Connection.Host); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Port', Connection.Port); IniFile.WriteString('FTP', 'Connection' + sIndex + 'UserName', Connection.UserName); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'MasterPassword', Connection.MasterPassword); if Connection.MasterPassword then IniFile.DeleteKey('FTP', 'Connection' + sIndex + 'Password') else IniFile.WriteString('FTP', 'Connection' + sIndex + 'Password', EncodeBase64(Connection.Password)); IniFile.WriteString('FTP', 'Connection' + sIndex + 'Encoding', Connection.Encoding); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'PassiveMode', Connection.PassiveMode); IniFile.WriteBool('FTP', 'Connection' + sIndex + 'AutoTLS', Connection.AutoTLS); IniFile.WriteString('FTP', 'Connection' + sIndex + 'InitCommands', Connection.InitCommands); end; end; procedure FreeConnectionList; var I, Count: Integer; Connection: TConnection; begin Count := ConnectionList.Count; for I := Count - 1 downto 0 do begin Connection := TConnection(ConnectionList.Objects[I]); Connection.Free; ConnectionList.Delete(I); end; end; function CryptFunc(Mode: LongInt; ConnectionName: String; var Password: String): LongInt; var APassword: UnicodeString; AConnection: UnicodeString; begin APassword:= UTF8Decode(Password); AConnection:= UTF8Decode(ConnectionName); if (Mode = FS_CRYPT_LOAD_PASSWORD) or (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) then begin SetLength(APassword, MAX_PATH); FillChar(APassword[1], MAX_PATH * SizeOf(WideChar), #0); end; Result:= CryptProc(PluginNumber, CryptoNumber, Mode, PWideChar(AConnection), PWideChar(APassword), MAX_PATH); if (Mode = FS_CRYPT_LOAD_PASSWORD) or (Mode = FS_CRYPT_LOAD_PASSWORD_NO_UI) then begin Password:= UTF16ToUTF8(APassword); end; end; function ShowPasswordDialog(out Password: String): Boolean; var APassword: UnicodeString; begin SetLength(APassword, MAX_PATH); APassword[1] := #0; Result := RequestProc(PluginNumber, RT_Password, nil, nil, PWideChar(APassword), MAX_PATH); if Result then Password := UTF16ToUTF8(PWideChar(APassword)) // truncate to #0 else Password := EmptyStr; end; function FtpLogin(const Connection: TConnection; const FtpSend: TFTPSendEx): Boolean; var sTemp: AnsiString; begin Result := False; if FtpSend.Login then begin sTemp:= Connection.InitCommands; while sTemp <> EmptyStr do FtpSend.FTPCommand(Copy2SymbDel(sTemp, ';')); if Length(Connection.Path) > 0 then FtpSend.ChangeWorkingDir(FtpSend.ClientToServer(UTF8Decode(Connection.Path))); Result := True; end; end; function FtpConnect(const ConnectionName: AnsiString; out FtpSend: TFTPSendEx): Boolean; var I: Integer; Connection: TConnection; begin Result:= False; I:= ActiveConnectionList.IndexOf(ConnectionName); // If find active connection then use it if I >= 0 then begin FtpSend:= TFTPSendEx(ActiveConnectionList.Objects[I]); if FtpSend.NetworkError then //Server closed the connection, or network error occurred, or whatever else. //Attempt to reconnect and execute login sequence begin LogProc(PluginNumber, msgtype_details, PWideChar('Network error detected, attempting to reconnect...')); I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection := TConnection(ConnectionList.Objects[I]); if not FtpLogin(Connection, FtpSend) then begin RequestProc(PluginNumber, RT_MsgOK, nil, 'Connection lost, unable to reconnect!', nil, MAX_PATH); Exit; end; end; end; Result:= True; end else begin // find in exists connection list I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection := TConnection(ConnectionList.Objects[I]); FtpSend := TFTPSendEx.Create(Connection.Encoding); FtpSend.TargetHost := Connection.Host; FtpSend.PassiveMode:= Connection.PassiveMode; FtpSend.AutoTLS:= Connection.AutoTLS; if Connection.Port <> EmptyStr then FtpSend.TargetPort := Connection.Port; if Connection.UserName <> EmptyStr then FtpSend.UserName := Connection.UserName; if Connection.MasterPassword then begin if CryptFunc(FS_CRYPT_LOAD_PASSWORD, Connection.ConnectionName, Connection.Password) <> FS_FILE_OK then Connection.Password:= EmptyStr; end; if Connection.Password = EmptyStr then // if no saved password then ask it begin if not ShowPasswordDialog(Connection.Password) then begin FreeAndNil(FtpSend); Exit; end; end; FtpSend.Password := Connection.Password; // try to connect if FtpLogin(Connection, FtpSend) then begin LogProc(PluginNumber, MSGTYPE_CONNECT, PWideChar('CONNECT ' + PathDelim + UTF8Decode(ConnectionName))); ActiveConnectionList.AddObject(ConnectionName, FtpSend); Result:= True; end else begin RequestProc(PluginNumber, RT_MsgOK, nil, 'Can not connect to the server!', nil, MAX_PATH); FreeAndNil(FtpSend); Exit; end; end; end; end; function AddQuickConnection(const Connection: TConnection): Boolean; var Text: PWideChar; Temp: UnicodeString; begin Result:= False; SetLength(Temp, MAX_PATH); Text:= PWideChar(Temp); Text[0]:= #0; if RequestProc(PluginNumber, RT_URL, nil, nil, Text, MAX_PATH) then begin Connection.Host := Text; Text[0]:= #0; if RequestProc(PluginNumber, RT_TargetDir, nil, nil, Text, MAX_PATH) then begin Connection.Path := Text; Text[0]:= #0; if RequestProc(PluginNumber, RT_UserName, nil, nil, Text, MAX_PATH) then begin Connection.UserName := Text; Result:= True; end; end; end; end; function QuickConnection: Boolean; var Index: Integer; FtpSend: TFTPSendEx; Connection: TConnection; begin Result:= ActiveConnectionList.IndexOf(cQuickConnection) >= 0; if not Result then begin Connection := TConnection.Create; if AddQuickConnection(Connection) then begin if ShowPasswordDialog(Connection.Password) then begin Connection.PassiveMode:= True; Connection.ConnectionName:= cQuickConnection; Index:= ConnectionList.AddObject(Connection.ConnectionName, Connection); Result:= FtpConnect(Connection.ConnectionName, FtpSend); ConnectionList.Delete(Index); end; end; Connection.Free; end; end; function AddConnection: Integer; var Temp: AnsiString; bCancel: Boolean; begin Result := -1; bCancel := True; gConnection := TConnection.Create; gConnection.PassiveMode := True; if HasDialogAPI then begin if ShowFtpConfDlg then with gConnection do begin if MasterPassword then begin if CryptFunc(FS_CRYPT_SAVE_PASSWORD, ConnectionName, Password) = FS_FILE_OK then Password:= EmptyStr; end; Result:= ConnectionList.AddObject(ConnectionName, gConnection); bCancel := False; end; end else begin SetLength(Temp, MAX_PATH); Temp[1]:= #0; if RequestProc(PluginNumber, RT_Other, nil, nil, PWideChar(Temp), MAX_PATH) then begin gConnection.ConnectionName := PAnsiChar(Temp); if AddQuickConnection(gConnection) then begin Result:= ConnectionList.AddObject(gConnection.ConnectionName, gConnection); bCancel := False; end; end; end; if bCancel then FreeAndNil(gConnection) else WriteConnectionList; end; function EditConnection(ConnectionName: AnsiString): Boolean; var I: Integer; begin Result:= False; if HasDialogAPI then begin I := ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin gConnection:= TConnection(ConnectionList.Objects[I]); if ShowFtpConfDlg then begin with gConnection do if MasterPassword and PasswordChanged then begin if CryptFunc(FS_CRYPT_SAVE_PASSWORD, ConnectionName, Password) = FS_FILE_OK then Password:= EmptyStr; end; WriteConnectionList; Result:= True; end; gConnection:= nil; end; end; end; function DeleteConnection(ConnectionName: AnsiString): Boolean; var I: Integer; Connection: TConnection; begin Result:= False; I:= ConnectionList.IndexOf(ConnectionName); if I >= 0 then begin Connection:= TConnection(ConnectionList.Objects[I]); Connection.Free; ConnectionList.Delete(I); WriteConnectionList; Result:= True; end; end; function ExtractConnectionName(const sPath: AnsiString): AnsiString; var Index: Integer; begin Result:= sPath; if sPath[1] = PathDelim then Result := Copy(sPath, 2, Length(sPath)); Index := Pos(PathDelim, Result); if Index = 0 then Index := MaxInt; Result := Copy(Result, 1, Index - 1); end; function ExtractRemoteFileName(const FileName: AnsiString): AnsiString; var I: Integer; begin Result := FileName; System.Delete(Result, 1, 1); I := Pos(PathDelim, Result); if I = 0 then Result := '/' else begin System.Delete(Result, 1, I - 1); Result := StringReplace(Result, '\', '/', [rfReplaceAll]); end; end; function GetConnectionByPath(const sPath: UnicodeString; out FtpSend: TFTPSendEx; out RemotePath: AnsiString): Boolean; var sConnName: AnsiString; begin Result := False; if (ExtractFileDir(sPath) = PathDelim) then Exit; sConnName := ExtractConnectionName(UTF16ToUTF8(sPath)); Result:= FtpConnect(sConnName, FtpSend); if Result then begin RemotePath:= FtpSend.ClientToServer(sPath); RemotePath:= ExtractRemoteFileName(RemotePath); end; end; function LocalFindNext(Hdl: THandle; var FindData: TWin32FindDataW): Boolean; var ListRec: PListRec absolute Hdl; I, RootCount: Integer; Connection: TConnection; begin Result := False; I := ListRec^.Index; RootCount := High(RootList) + 1; FillChar(FindData, SizeOf(FindData), 0); if I < RootCount then begin StrPCopy(FindData.cFileName, UTF8Decode(RootList[I])); FindData.dwFileAttributes := 0; Inc(ListRec^.Index); Result := True; end else if I - RootCount < ConnectionList.Count then begin Connection := TConnection(ConnectionList.Objects[I - RootCount]); StrPCopy(FindData.cFileName, UTF8Decode(Connection.ConnectionName)); FindData.dwFileAttributes := FILE_ATTRIBUTE_NORMAL; Inc(ListRec^.Index); Result := True; end; end; function RemoteFindNext(Hdl: THandle; var FindData: TWin32FindDataW): Boolean; var ListRec: PListRec absolute Hdl; I: Integer; begin Result := False; if Assigned(ListRec^.FtpList) then with ListRec^ do begin I := Index; if I < FtpList.Count then begin FillChar(FindData, SizeOf(FindData), 0); StrPCopy(FindData.cFileName, FtpSend.ServerToClient(FtpList.Items[I].FileName)); FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_UNIX_MODE; if FtpList.Items[I].Directory then FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_DIRECTORY else begin FindData.nFileSizeLow := (FtpList.Items[I].FileSize and MAXDWORD); FindData.nFileSizeHigh := (FtpList.Items[I].FileSize shr $20); end; // set Unix permissions FindData.dwReserved0 := ModeStr2Mode(FtpList.Items[I].Permission); FindData.ftLastWriteTime := DateTimeToFileTime(FtpList.Items[I].FileTime); Inc(ListRec^.Index); Result := True; end; end; end; function FsInitW(PluginNr: Integer; pProgressProc: TProgressProcW; pLogProc: TLogProcW; pRequestProc: TRequestProcW): Integer; dcpcall; begin ProgressProc := pProgressProc; LogProc := pLogProc; RequestProc := pRequestProc; PluginNumber := PluginNr; Result := 0; end; function FsFindFirstW(Path: PWideChar; var FindData: TWin32FindDataW): THandle; dcpcall; var ListRec: PListRec; sPath: AnsiString; FtpSend: TFTPSendEx; begin New(ListRec); ListRec.Path := Path; ListRec.Index := 0; ListRec.FtpList:= nil; Result := wfxInvalidHandle; if Path = PathDelim then begin Result := THandle(ListRec); LocalFindNext(Result, FindData); end else begin ListLock.Acquire; try if GetConnectionByPath(Path + PathDelim, FtpSend, sPath) then begin ListRec.FtpSend := FtpSend; // Get directory listing if FtpSend.List(sPath, False) then begin if FtpSend.FtpList.Count > 0 then begin // Save file list ListRec.FtpList:= TFTPListEx.Create; ListRec.FtpList.Assign(FtpSend.FtpList); Result := THandle(ListRec); RemoteFindNext(Result, FindData); end; end; end; finally ListLock.Release; if Result = wfxInvalidHandle then Dispose(ListRec); end; end; end; function FsFindNextW(Hdl: THandle; var FindData: TWin32FindDataW): BOOL; dcpcall; var ListRec: PListRec absolute Hdl; begin if ListRec.Path = PathDelim then Result := LocalFindNext(Hdl, FindData) else Result := RemoteFindNext(Hdl, FindData); end; function FsFindClose(Hdl: THandle): Integer; dcpcall; var ListRec: PListRec absolute Hdl; begin if Assigned(ListRec) then begin if Assigned(ListRec^.FtpList) then FreeAndNil(ListRec^.FtpList); Dispose(ListRec); end; Result:= 0; end; function FsExecuteFileW(MainWin: THandle; RemoteName, Verb: PWideChar): Integer; dcpcall; var FtpSend: TFTPSendEx; asFileName: AnsiString; wsFileName: UnicodeString; begin Result:= FS_EXEC_YOURSELF; if (RemoteName = '') then Exit; if Verb = 'open' then begin if (ExtractFileDir(RemoteName) = PathDelim) then // root path begin asFileName:= UTF16ToUTF8(RemoteName + 1); if RemoteName[1] <> '<' then // connection begin if not FtpConnect(asFileName, FtpSend) then Result := FS_EXEC_OK else begin wsFileName := FtpSend.ServerToClient(FtpSend.GetCurrentDir); wsFileName := SetDirSeparators(RemoteName + wsFileName); StrPLCopy(RemoteName, wsFileName, MAX_PATH); Result := FS_EXEC_SYMLINK; end; end else // special item begin if asFileName = cAddConnection then begin AddConnection; Result:= FS_EXEC_OK; end else if asFileName = cQuickConnection then begin if QuickConnection then Result := FS_EXEC_SYMLINK else Result := FS_EXEC_OK; end; end; end; // root path end // Verb = open else if Pos('chmod', UnicodeString(Verb)) = 1 then begin if GetConnectionByPath(RemoteName, FtpSend, asFileName) then begin if (FtpSend.FTPCommand('SITE' + #32 + AnsiString(UnicodeString(Verb)) + #32 + asFileName) div 100) = 2 then Result:= FS_EXEC_OK else Result := FS_EXEC_ERROR; end; end else if Pos('quote', UnicodeString(Verb)) = 1 then begin if GetConnectionByPath(RemoteName, FtpSend, asFileName) then begin if (FtpSend.FTPCommand(AnsiString(Copy(Verb, 7, MaxInt))) div 100) = 2 then Result:= FS_EXEC_OK else Result := FS_EXEC_ERROR; end; end else if Verb = 'properties' then begin if (ExtractFileDir(RemoteName) = PathDelim) and not (RemoteName[1] in [#0, '<']) then // connection begin EditConnection(UTF16ToUTF8(RemoteName + 1)); end; Result:= FS_EXEC_OK; end; end; function FsRenMovFileW(OldName, NewName: PWideChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; dcpcall; var I: Integer; FtpSend: TFTPSendEx; sOldName: AnsiString; sNewName: AnsiString; begin Result := FS_FILE_NOTSUPPORTED; if not Move then Exit; if (ExtractFileDir(OldName) = PathDelim) and (WideChar(OldName[1]) <> '<') then begin I:= ConnectionList.IndexOf(OldName + 1); if I < 0 then Result:= FS_FILE_NOTFOUND else begin ConnectionList[I]:= RepairConnectionName(UTF16ToUTF8(UnicodeString(NewName + 1))); TConnection(ConnectionList.Objects[I]).ConnectionName:= ConnectionList[I]; WriteConnectionList; Result:= FS_FILE_OK; end; end else if GetConnectionByPath(OldName, FtpSend, sOldName) then begin sNewName := FtpSend.ClientToServer(NewName); sNewName := ExtractRemoteFileName(sNewName); ProgressProc(PluginNumber, OldName, NewName, 0); if FtpSend.RenameFile(sOldName, sNewName) then begin ProgressProc(PluginNumber, OldName, NewName, 100); Result := FS_FILE_OK; end; end; end; function FsGetFileW(RemoteName, LocalName: PWideChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; dcpcall; var FileSize: Int64; FtpSend: TFTPSendEx; sFileName: AnsiString; FileName: AnsiString; begin Result := FS_FILE_READERROR; if GetConnectionByPath(RemoteName, FtpSend, sFileName) then try FileName:= UTF16ToUTF8(UnicodeString(LocalName)); if FileExistsUTF8(FileName) and (CopyFlags and FS_COPYFLAGS_FORCE = 0) then begin if not FtpSend.CanResume then Exit(FS_FILE_EXISTS); Exit(FS_FILE_EXISTSRESUMEALLOWED); end; FtpSend.DataStream.Clear; FtpSend.DirectFileName := FileName; Int64Rec(FileSize).Lo := RemoteInfo^.SizeLow; Int64Rec(FileSize).Hi := RemoteInfo^.SizeHigh; ProgressProc(PluginNumber, RemoteName, LocalName, 0); if FtpSend.RetrieveFile(sFileName, FileSize, (CopyFlags and FS_COPYFLAGS_RESUME) <> 0) then begin ProgressProc(PluginNumber, RemoteName, LocalName, 100); Result := FS_FILE_OK; end; except on EUserAbort do Result := FS_FILE_USERABORT; on EFOpenError do Result := FS_FILE_READERROR; else Result := FS_FILE_WRITEERROR; end; end; function FsPutFileW(LocalName, RemoteName: PWideChar; CopyFlags: Integer): Integer; dcpcall; var FtpSend: TFTPSendEx; sFileName: AnsiString; FileName: AnsiString; begin Result := FS_FILE_WRITEERROR; if GetConnectionByPath(RemoteName, FtpSend, sFileName) then try FileName:= UTF16ToUTF8(UnicodeString(LocalName)); if (CopyFlags and FS_COPYFLAGS_FORCE = 0) and (FtpSend.FileSize(sFileName) >= 0) then begin if not FtpSend.CanResume then Exit(FS_FILE_EXISTS); Exit(FS_FILE_EXISTSRESUMEALLOWED); end; FtpSend.DataStream.Clear; FtpSend.DirectFileName := FileName; ProgressProc(PluginNumber, LocalName, RemoteName, 0); if FtpSend.StoreFile(sFileName, (CopyFlags and FS_COPYFLAGS_RESUME) <> 0) then begin ProgressProc(PluginNumber, LocalName, RemoteName, 100); Result := FS_FILE_OK; end; except on EReadError do Result := FS_FILE_READERROR; on EUserAbort do Result := FS_FILE_USERABORT; else Result := FS_FILE_WRITEERROR; end; end; function FsDeleteFileW(RemoteName: PWideChar): BOOL; dcpcall; var FtpSend: TFTPSendEx; sFileName: AnsiString; begin Result := False; // if root path then delete connection if (ExtractFileDir(RemoteName) = PathDelim) and (RemoteName[1] <> '<') then Result:= DeleteConnection(ExtractConnectionName(UTF16ToUTF8(RemoteName))) else if GetConnectionByPath(RemoteName, FtpSend, sFileName) then Result := FtpSend.DeleteFile(sFileName); end; function FsMkDirW(RemoteDir: PWideChar): BOOL; dcpcall; var sPath: AnsiString; FtpSend: TFTPSendEx; sOldPath: AnsiString; begin Result := False; if GetConnectionByPath(RemoteDir, FtpSend, sPath) then begin sOldPath := FtpSend.GetCurrentDir; if FtpSend.ChangeWorkingDir(sPath) then Result := FtpSend.ChangeWorkingDir(sOldPath) else begin Result := FtpSend.CreateDir(sPath); end; end; end; function FsRemoveDirW(RemoteName: PWideChar): BOOL; dcpcall; var sPath: AnsiString; FtpSend: TFTPSendEx; begin Result := False; if GetConnectionByPath(RemoteName, FtpSend, sPath) then Result := FtpSend.DeleteDir(sPath); end; function FsDisconnectW(DisconnectRoot: PWideChar): BOOL; dcpcall; var asTemp: AnsiString; wsTemp: UnicodeString; FtpSend: TFTPSendEx; begin Result := False; wsTemp := ExcludeLeadingPathDelimiter(DisconnectRoot); if GetConnectionByPath(wsTemp, FtpSend, asTemp) then begin Result := FtpSend.Logout; LogProc(PluginNumber, MSGTYPE_DISCONNECT, PWideChar('DISCONNECT ' + DisconnectRoot)); ActiveConnectionList.Delete(ActiveConnectionList.IndexOfObject(FtpSend)); FreeAndNil(FtpSend); end; end; procedure FsSetCryptCallbackW(pCryptProc: TCryptProcW; CryptoNr, Flags: Integer); dcpcall; begin CryptProc:= pCryptProc; CryptoNumber:= CryptoNr; end; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DefRootName, 'FTP', MaxLen); end; procedure FsSetDefaultParams(dps: pFsDefaultParamStruct); dcpcall; begin ConnectionList := TStringList.Create; ActiveConnectionList := TStringList.Create; IniFile := TIniFile.Create(dps.DefaultIniName); // IniFile.WriteDateTime('FTP', 'Test', Now); ReadConnectionList; end; { procedure FsNetworkGetSupportedProtocols(Protocols: PAnsiChar; MaxLen: LongInt); dcpcall; begin StrPLCopy(Protocols, ftpProtocol, MaxLen); end; function FsNetworkGetConnection(Index: LongInt; Connection: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; begin Result:= False; if Index >= ConnectionList.Count then Exit; StrPLCopy(Connection, TConnection(ConnectionList.Objects[Index]).ConnectionName, MaxLen); Result:= True; end; function FsNetworkManageConnection(MainWin: HWND; Connection: PAnsiChar; Action: LongInt; MaxLen: LongInt): LongBool; dcpcall; var I: Integer; begin Result:= False; case Action of FS_NM_ACTION_ADD: begin I:= AddConnection; if I >= 0 then begin StrPLCopy(Connection, ConnectionList[I], MaxLen); Result:= True; end; end; FS_NM_ACTION_EDIT: begin I:= ConnectionList.IndexOf(Connection); if I >= 0 then begin if EditConnection(Connection) then begin StrPLCopy(Connection, ConnectionList[I], MaxLen); Result:= True; end; end; end; FS_NM_ACTION_DELETE: Result:= DeleteConnection(Connection); end; end; function FsNetworkOpenConnection(Connection: PAnsiChar; RootDir, RemotePath: PAnsiChar; MaxLen: LongInt): LongBool; dcpcall; var I: Integer; FtpSend: TFTPSendEx; Con: TConnection; begin Result:= False; if Connection = #0 then begin if QuickConnection then begin I:= ActiveConnectionList.IndexOf(cQuickConnection); if I >= 0 then begin Con:= TConnection(ActiveConnectionList.Objects[I]); StrPLCopy(Connection, ftpProtocol + Con.Host, MaxLen); StrPLCopy(RootDir, PathDelim + Con.ConnectionName, MaxLen); StrPLCopy(RemotePath, Con.Path, MaxLen); Result:= True; end; end; end else if FtpConnect(Connection, FtpSend) then begin I:= ConnectionList.IndexOf(Connection); if I >= 0 then begin Con:= TConnection(ConnectionList.Objects[I]); StrPLCopy(Connection, ftpProtocol + Con.Host, MaxLen); StrPLCopy(RootDir, PathDelim + Con.ConnectionName, MaxLen); StrPLCopy(RemotePath, Con.Path, MaxLen); Result:= True; end; end; end; } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); begin gStartupInfo:= StartupInfo^; HasDialogAPI:= True; end; function ReadPassword(ConnectionName: AnsiString): String; begin Result:= EmptyStr; if CryptFunc(FS_CRYPT_LOAD_PASSWORD, ConnectionName, Result) <> FS_FILE_OK then Result:= EmptyStr; end; function DeletePassword(ConnectionName: AnsiString): Boolean; var Password: String; begin Password:= EmptyStr; Result:= CryptFunc(FS_CRYPT_DELETE_PASSWORD, ConnectionName, Password) = FS_FILE_OK; end; initialization ListLock := syncobjs.TCriticalSection.Create; finalization FreeAndNil(ListLock); end. doublecmd-0.7.1/plugins/wfx/ftp/src/FtpConfDlg.lfm0000644000175000001440000002051112646436047021063 0ustar alexxusersobject DialogBox: TDialogBox Left = 431 Height = 345 Top = 141 Width = 420 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'FTP' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 345 ClientWidth = 420 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '1.6.0.3' object lblName: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtName AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 16 Width = 98 BorderSpacing.Left = 12 Caption = 'Connection name:' ParentColor = False end object edtName: TEdit AnchorSideLeft.Control = lblName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 12 Width = 260 BorderSpacing.Left = 18 BorderSpacing.Top = 12 BorderSpacing.Right = 12 TabOrder = 0 end object lblHost: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtHost AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 45 Width = 61 BorderSpacing.Left = 12 Caption = 'Host[:Port]:' ParentColor = False end object edtHost: TEdit AnchorSideLeft.Control = edtName AnchorSideTop.Control = edtName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtName AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 41 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblUserName: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 105 Width = 59 BorderSpacing.Left = 12 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = btnAnonymous AnchorSideTop.Control = btnAnonymous AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnAnonymous AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 101 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 4 end object btnAnonymous: TButton AnchorSideLeft.Control = edtHost AnchorSideTop.Control = edtHost AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtHost AnchorSideRight.Side = asrBottom Left = 128 Height = 25 Top = 70 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Anonymous' OnClick = ButtonClick TabOrder = 3 end object edtRemoteDir: TEdit AnchorSideLeft.Control = edtPassword AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 215 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 8 end object lblRemoteDir: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtRemoteDir AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 219 Width = 61 BorderSpacing.Left = 12 Caption = 'Remote dir:' ParentColor = False end object chkPassiveMode: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtInitCommands AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 285 Width = 294 BorderSpacing.Left = 12 BorderSpacing.Top = 18 Caption = 'Use passive mode for transfers (like a WWW brower)' Checked = True State = cbChecked TabOrder = 10 end object btnCancel: TButton AnchorSideTop.Control = chkPassiveMode AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtRemoteDir AnchorSideRight.Side = asrBottom AnchorSideBottom.Side = asrBottom Left = 313 Height = 25 Top = 316 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Caption = 'Cancel' ModalResult = 2 OnClick = ButtonClick TabOrder = 12 end object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel AnchorSideBottom.Side = asrBottom Left = 226 Height = 25 Top = 316 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Right = 12 Caption = '&OK' ModalResult = 1 OnClick = ButtonClick TabOrder = 11 end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 130 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 5 end object lblPassword: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 134 Width = 53 BorderSpacing.Left = 12 Caption = 'Password:' ParentColor = False end object chkMasterPassword: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = lblPassword AnchorSideTop.Side = asrBottom Left = 12 Height = 19 Top = 161 Width = 259 BorderSpacing.Left = 12 BorderSpacing.Top = 12 Caption = 'Use master password to protect the password' OnChange = CheckBoxChange TabOrder = 7 end object btnChangePassword: TButton AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 128 Height = 25 Top = 130 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Change password...' OnClick = ButtonClick TabOrder = 6 Visible = False end object edtInitCommands: TEdit AnchorSideLeft.Control = edtRemoteDir AnchorSideTop.Control = edtRemoteDir AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtRemoteDir AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 244 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 9 end object lblInitCommands: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = edtInitCommands AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 248 Width = 83 BorderSpacing.Left = 12 Caption = 'Init commands:' ParentColor = False end object chkAutoTLS: TCheckBox AnchorSideLeft.Control = Owner AnchorSideTop.Control = btnAnonymous AnchorSideTop.Side = asrCenter Left = 12 Height = 19 Top = 73 Width = 62 BorderSpacing.Left = 12 Caption = 'SSL/TLS' OnChange = CheckBoxChange TabOrder = 2 end object cmbEncoding: TComboBox AnchorSideLeft.Control = edtPassword AnchorSideTop.Control = chkMasterPassword AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 128 Height = 23 Top = 186 Width = 260 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 ItemHeight = 15 ItemIndex = 0 Items.Strings = ( 'Auto' 'UTF-8' 'CP1250' 'CP1251' 'CP1252' 'CP1253' 'CP1254' 'CP1255' 'CP1256' 'CP1257' 'CP1258' 'CP437' 'CP850' 'CP852' 'CP866' 'CP874' 'CP932' 'CP936' 'CP949' 'CP950' 'KOI-8' 'ISO-8859-1' 'ISO-8859-2' 'ISO-8859-15' ) Style = csDropDownList TabOrder = 13 Text = 'Auto' end object lblEncoding: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = cmbEncoding AnchorSideTop.Side = asrCenter Left = 12 Height = 15 Top = 190 Width = 53 BorderSpacing.Left = 12 Caption = 'Encoding:' ParentColor = False end end doublecmd-0.7.1/plugins/wfx/ftp/src/FtpConfDlg.pas0000644000175000001440000002004412645262211021056 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Wfx plugin for working with File Transfer Protocol Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpConfDlg; {$mode objfpc}{$H+} {$include calling.inc} {$R FtpConfDlg.lfm} interface uses SysUtils, Extension; function ShowFtpConfDlg: Boolean; implementation uses LazUTF8, FtpFunc, FtpUtils, blcksock, ssl_openssl_lib; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var Data: PtrInt; Text: String; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin Text:= gConnection.Encoding; Data:= PtrInt(PAnsiChar(Text)); Data:= SendDlgMsg(pDlg, 'cmbEncoding', DM_LISTINDEXOF, 0, Data); if Data >= 0 then SendDlgMsg(pDlg, 'cmbEncoding', DM_LISTSETITEMINDEX, Data, 0); Text:= gConnection.ConnectionName; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtName', DM_SETTEXT, Data, 0); Text:= gConnection.Host; if gConnection.Port <> EmptyStr then Text:= Text + ':' + gConnection.Port; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtHost', DM_SETTEXT, Data, 0); Text:= gConnection.UserName; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); if gConnection.MasterPassword then begin SendDlgMsg(pDlg, 'chkMasterPassword', DM_SETCHECK, 1, 0); SendDlgMsg(pDlg, 'chkMasterPassword', DM_ENABLE, 0, 0); //SendDlgMsg(pDlg, 'edtPassword', DM_SHOWITEM, 0, 0); SendDlgMsg(pDlg, 'btnChangePassword', DM_SHOWITEM, 1, 0); end else begin Text:= gConnection.Password; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end; Text:= SysToUTF8(gConnection.Path); Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtRemoteDir', DM_SETTEXT, Data, 0); Text:= gConnection.InitCommands; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtInitCommands', DM_SETTEXT, Data, 0); Data:= PtrInt(gConnection.PassiveMode); SendDlgMsg(pDlg, 'chkPassiveMode', DM_SETCHECK, Data, 0); Data:= PtrInt(gConnection.AutoTLS); SendDlgMsg(pDlg, 'chkAutoTLS', DM_SETCHECK, Data, 0); end; DN_CHANGE: begin if DlgItemName = 'chkMasterPassword' then begin Data:= SendDlgMsg(pDlg, 'chkMasterPassword', DM_GETCHECK, 0, 0); gConnection.MasterPassword:= Boolean(Data); if not gConnection.MasterPassword then DeletePassword(gConnection.ConnectionName); end; if DlgItemName = 'chkAutoTLS' then begin Data:= SendDlgMsg(pDlg, 'chkAutoTLS', DM_GETCHECK, 0, 0); gConnection.AutoTLS:= Boolean(Data); if gConnection.AutoTLS then begin if not InitSSLInterface then begin MessageBox(PAnsiChar('OpenSSL library not found!' + LineEnding + 'To use SSL connections, please install the OpenSSL ' + 'libraries (' + DLLSSLName + ' and ' + DLLUtilName + ')!'), 'OpenSSL', MB_OK or MB_ICONERROR ); gConnection.AutoTLS:= False; Data:= PtrInt(gConnection.AutoTLS); SendDlgMsg(pDlg, 'chkAutoTLS', DM_SETCHECK, Data, 0); end; end; end; end; DN_CLICK: if DlgItemName = 'btnAnonymous' then begin Text:= 'anonymous'; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); Text:= 'anonymous@example.org'; Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end else if DlgItemName = 'btnChangePassword' then begin Text:= ReadPassword(gConnection.ConnectionName); if Text <> EmptyStr then begin Data:= PtrInt(PAnsiChar(Text)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); SendDlgMsg(pDlg, 'edtPassword', DM_SHOWITEM, 1, 0); SendDlgMsg(pDlg, 'btnChangePassword', DM_SHOWITEM, 0, 0); SendDlgMsg(pDlg, 'chkMasterPassword', DM_ENABLE, 1, 0); gConnection.PasswordChanged:= True; end; end else if DlgItemName = 'btnOK' then begin Data:= SendDlgMsg(pDlg, 'cmbEncoding', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Encoding:= Text; Data:= SendDlgMsg(pDlg, 'edtName', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.ConnectionName:= RepairConnectionName(Text); Data:= SendDlgMsg(pDlg, 'edtHost', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Host:= ExtractConnectionHost(Text); gConnection.Port:= ExtractConnectionPort(Text); Data:= SendDlgMsg(pDlg, 'edtUserName', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.UserName:= Text; Data:= SendDlgMsg(pDlg, 'edtPassword', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Password:= Text; Data:= SendDlgMsg(pDlg, 'chkMasterPassword', DM_GETCHECK, 0, 0); gConnection.MasterPassword:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'edtRemoteDir', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.Path:= UTF8ToSys(Text); Data:= SendDlgMsg(pDlg, 'edtInitCommands', DM_GETTEXT, 0, 0); Text:= PAnsiChar(Data); gConnection.InitCommands:= Text; Data:= SendDlgMsg(pDlg, 'chkPassiveMode', DM_GETCHECK, 0, 0); gConnection.PassiveMode:= Boolean(Data); Data:= SendDlgMsg(pDlg, 'chkAutoTLS', DM_GETCHECK, 0, 0); gConnection.AutoTLS:= Boolean(Data); // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then begin // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end; end;// case end; // with end; function ShowFtpConfDlg: Boolean; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin Result := False; try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin Result := DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. doublecmd-0.7.1/plugins/wfx/ftp/src/ftpadv.pas0000644000175000001440000003334312671245667020401 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-2016 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpAdv; {$mode delphi} interface uses Classes, SysUtils, WfxPlugin, FtpSend, LazUTF8Classes, LConvEncoding, DCConvertEncoding; type TConvertUTF8ToEncodingFunc = function(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; type { EUserAbort } EUserAbort = class(Exception); { TFTPListRecEx } TFTPListRecEx = class(TFTPListRec) public procedure Assign(Value: TFTPListRec); override; end; { TFTPListEx } TFTPListEx = class(TFTPList) public procedure Assign(Value: TFTPList); override; end; { TProgressStream } TProgressStream = class(TFileStreamUTF8) public DoneSize: Int64; FileSize: Int64; PluginNumber: Integer; ProgressProc: TProgressProcW; RemoteName, LocalName: PWideChar; private procedure DoProgress(Result: Integer); public function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; end; { TFTPSendEx } TFTPSendEx = class(TFTPSend) private FAuto: Boolean; FUnicode: Boolean; FSetTime: Boolean; private ConvertToUtf8: TConvertEncodingFunction; ConvertFromUtf8: TConvertUTF8ToEncodingFunc; protected function Connect: Boolean; override; function DataSocket: Boolean; override; procedure DoStatus(Response: Boolean; const Value: string); override; public function ClientToServer(const Value: UnicodeString): AnsiString; function ServerToClient(const Value: AnsiString): UnicodeString; public constructor Create(const Encoding: String); reintroduce; function Login: Boolean; override; procedure ParseRemote(Value: string); override; function List(Directory: String; NameList: Boolean): Boolean; override; function SetTime(const FileName: String; FileTime: TDateTime): Boolean; function StoreFile(const FileName: string; Restore: Boolean): Boolean; override; function RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; overload; function NetworkError(): Boolean; end; implementation uses LazUTF8, LazFileUtils, FtpFunc, FtpUtils; {$IF NOT DECLARED(EncodingCP1250)} const EncodingCP1250 = 'cp1250'; EncodingCP1251 = 'cp1251'; EncodingCP1252 = 'cp1252'; EncodingCP1253 = 'cp1253'; EncodingCP1254 = 'cp1254'; EncodingCP1255 = 'cp1255'; EncodingCP1256 = 'cp1256'; EncodingCP1257 = 'cp1257'; EncodingCP1258 = 'cp1258'; EncodingCP437 = 'cp437'; EncodingCP850 = 'cp850'; EncodingCP852 = 'cp852'; EncodingCP866 = 'cp866'; EncodingCP874 = 'cp874'; EncodingCP932 = 'cp932'; EncodingCP936 = 'cp936'; EncodingCP949 = 'cp949'; EncodingCP950 = 'cp950'; EncodingCPKOI8 = 'koi8'; EncodingCPIso1 = 'iso88591'; EncodingCPIso2 = 'iso88592'; EncodingCPIso15 = 'iso885915'; {$ENDIF} function Dummy(const S: String): String; begin Result:= S; end; function Ymmud(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; begin Result:= S; end; function Utf8ToSys(const S: String {$IFDEF FPC_HAS_CPSTRING}; SetTargetCodePage: Boolean = False{$ENDIF}): RawByteString; begin Result:= CeUtf8ToSys(S); end; { TFTPListRecEx } procedure TFTPListRecEx.Assign(Value: TFTPListRec); begin inherited Assign(Value); Permission:= Value.Permission; end; { TFTPListEx } procedure TFTPListEx.Assign(Value: TFTPList); var flr: TFTPListRecEx; n: integer; begin Clear; for n := 0 to Value.Count - 1 do begin flr := TFTPListRecEx.Create; flr.Assign(Value[n]); Flist.Add(flr); end; Lines.Assign(Value.Lines); Masks.Assign(Value.Masks); UnparsedLines.Assign(Value.UnparsedLines); end; { TProgressStream } procedure TProgressStream.DoProgress(Result: Integer); var Percent: Int64; begin DoneSize += Result; Percent:= DoneSize * 100 div FileSize; if ProgressProc(PluginNumber, LocalName, RemoteName, Percent) = 1 then raise EUserAbort.Create(EmptyStr); end; function TProgressStream.Read(var Buffer; Count: Longint): Longint; begin Result:= inherited Read(Buffer, Count); if FileSize > 0 then DoProgress(Result); end; function TProgressStream.Write(const Buffer; Count: Longint): Longint; begin Result:= inherited Write(Buffer, Count); if FileSize > 0 then DoProgress(Result); end; { TFTPSendEx } function TFTPSendEx.Connect: Boolean; begin Result:= inherited Connect; if Result then LogProc(PluginNumber, MSGTYPE_CONNECT, nil); end; function TFTPSendEx.DataSocket: Boolean; var Message: UnicodeString; begin Result:= inherited DataSocket; if FDSock.LastError <> 0 then begin Message:= UTF8ToUTF16(CeSysToUtf8(FDSock.LastErrorDesc)); LogProc(PluginNumber, msgtype_importanterror, PWideChar('DSOCK ERROR ' + Message)); end; end; procedure TFTPSendEx.DoStatus(Response: Boolean; const Value: string); var Index: Integer; Message: UnicodeString; begin Index:= Pos('PASS ', Value); if Index = 0 then Message:= ServerToClient(Value) else begin Message:= ServerToClient(Copy(Value, 1, Index + 4)) + '********'; end; LogProc(PluginNumber, msgtype_details, PWideChar(Message)); if FSock.LastError <> 0 then begin Message:= UTF8ToUTF16(CeSysToUtf8(FSock.LastErrorDesc)); LogProc(PluginNumber, msgtype_importanterror, PWideChar('CSOCK ERROR ' + Message)); end; end; function TFTPSendEx.ClientToServer(const Value: UnicodeString): AnsiString; begin Result:= ConvertFromUtf8(UTF16ToUTF8(Value)); end; function TFTPSendEx.ServerToClient(const Value: AnsiString): UnicodeString; begin Result:= UTF8ToUTF16(ConvertToUtf8(Value)); end; constructor TFTPSendEx.Create(const Encoding: String); var AEncoding: String; begin inherited Create; FTimeout:= 15000; FDirectFile:= True; ConvertToUtf8:= @CeSysToUtf8; ConvertFromUtf8:= @Utf8ToSys; AEncoding:= NormalizeEncoding(Encoding); FAuto:= (AEncoding = '') or (AEncoding = 'auto'); if AEncoding = EncodingUTF8 then begin ConvertToUtf8:= @Dummy; ConvertFromUtf8:= @Ymmud; end else if AEncoding = EncodingCPIso1 then begin ConvertToUtf8:= @ISO_8859_1ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_1; end else if AEncoding = EncodingCPIso2 then begin ConvertToUtf8:= @ISO_8859_2ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_2; end else if AEncoding = EncodingCPIso15 then begin ConvertToUtf8:= @ISO_8859_15ToUTF8; ConvertFromUtf8:= @UTF8ToISO_8859_15; end else if AEncoding = EncodingCP1250 then begin ConvertToUtf8:= @CP1250ToUTF8; ConvertFromUtf8:= @UTF8ToCP1250; end else if AEncoding = EncodingCP1251 then begin ConvertToUtf8:= @CP1251ToUTF8; ConvertFromUtf8:= @UTF8ToCP1251; end else if AEncoding = EncodingCP1252 then begin ConvertToUtf8:= @CP1252ToUTF8; ConvertFromUtf8:= @UTF8ToCP1252; end else if AEncoding = EncodingCP1253 then begin ConvertToUtf8:= @CP1253ToUTF8; ConvertFromUtf8:= @UTF8ToCP1253; end else if AEncoding = EncodingCP1254 then begin ConvertToUtf8:= @CP1254ToUTF8; ConvertFromUtf8:= @UTF8ToCP1254; end else if AEncoding = EncodingCP1255 then begin ConvertToUtf8:= @CP1255ToUTF8; ConvertFromUtf8:= @UTF8ToCP1255; end else if AEncoding = EncodingCP1256 then begin ConvertToUtf8:= @CP1256ToUTF8; ConvertFromUtf8:= @UTF8ToCP1256; end else if AEncoding = EncodingCP1257 then begin ConvertToUtf8:= @CP1257ToUTF8; ConvertFromUtf8:= @UTF8ToCP1257; end else if AEncoding = EncodingCP1258 then begin ConvertToUtf8:= @CP1258ToUTF8; ConvertFromUtf8:= @UTF8ToCP1258; end else if AEncoding = EncodingCP437 then begin ConvertToUtf8:= @CP437ToUTF8; ConvertFromUtf8:= @UTF8ToCP437; end else if AEncoding = EncodingCP850 then begin ConvertToUtf8:= @CP850ToUTF8; ConvertFromUtf8:= @UTF8ToCP850; end else if AEncoding = EncodingCP852 then begin ConvertToUtf8:= @CP852ToUTF8; ConvertFromUtf8:= @UTF8ToCP852; end else if AEncoding = EncodingCP866 then begin ConvertToUtf8:= @CP866ToUTF8; ConvertFromUtf8:= @UTF8ToCP866; end else if AEncoding = EncodingCP874 then begin ConvertToUtf8:= @CP874ToUTF8; ConvertFromUtf8:= @UTF8ToCP874; end else if AEncoding = EncodingCP932 then begin ConvertToUtf8:= @CP932ToUTF8; ConvertFromUtf8:= @UTF8ToCP932; end else if AEncoding = EncodingCP936 then begin ConvertToUtf8:= @CP936ToUTF8; ConvertFromUtf8:= @UTF8ToCP936; end else if AEncoding = EncodingCP949 then begin ConvertToUtf8:= @CP949ToUTF8; ConvertFromUtf8:= @UTF8ToCP949; end else if AEncoding = EncodingCP950 then begin ConvertToUtf8:= @CP950ToUTF8; ConvertFromUtf8:= @UTF8ToCP950; end else if AEncoding = EncodingCPKOI8 then begin ConvertToUtf8:= @KOI8ToUTF8; ConvertFromUtf8:= @UTF8ToKOI8; end; end; function TFTPSendEx.Login: Boolean; var Index: Integer; begin Result:= inherited Login; if Result then begin if (FTPCommand('FEAT') div 100) = 2 then begin for Index:= 0 to FFullResult.Count - 1 do begin if not FUnicode then FUnicode:= Pos('UTF8', FFullResult[Index]) > 0; if not FSetTime then FSetTime:= Pos('MFMT', FFullResult[Index]) > 0; end; if FUnicode and FAuto then begin ConvertToUtf8:= @Dummy; ConvertFromUtf8:= @Ymmud; FTPCommand('OPTS UTF8 ON'); end; end; end; end; procedure TFTPSendEx.ParseRemote(Value: string); var RemoteIP: String; begin inherited ParseRemote(Value); RemoteIP:= FSock.GetRemoteSinIP; if FDataIP = '0.0.0.0' then FDataIP:= RemoteIP else if IsIpPrivate(FDataIP) and (IsIpPrivate(RemoteIP) = False) then begin FDataIP:= RemoteIP; DoStatus(False, 'Server reports local IP -> Redirect to: ' + FDataIP); end; end; function TFTPSendEx.List(Directory: String; NameList: Boolean): Boolean; var Message: UnicodeString; begin Result:= inherited List(Directory, NameList); if (Result = False) and (FSock.WaitingData > 0) then begin Message:= UnicodeString(FSock.RecvPacket(1000)); LogProc(PluginNumber, msgtype_importanterror, PWideChar(Message)); end; end; function TFTPSendEx.SetTime(const FileName: String; FileTime: TDateTime): Boolean; var Time: String; begin if not FSetTime then Exit(False); Time:= FormatDateTime('yyyymmddhhnnss', FileTime); Result:= FTPCommand('MFMT ' + Time + ' ' + FileName) = 213; end; function TFTPSendEx.StoreFile(const FileName: string; Restore: Boolean): Boolean; var StorSize: Int64; RestoreAt: Int64 = 0; SendStream: TProgressStream; begin Result := False; Restore := Restore and FCanResume; if Restore then begin RestoreAt := Self.FileSize(FileName); if RestoreAt < 0 then RestoreAt := 0; end; SendStream := TProgressStream.Create(FDirectFileName, fmOpenRead or fmShareDenyWrite); SendStream.PluginNumber:= PluginNumber; SendStream.ProgressProc:= ProgressProc; SendStream.LocalName:= PWideChar(UTF8Decode(FDirectFileName)); SendStream.RemoteName:= PWideChar(ServerToClient(FileName)); try if not DataSocket then Exit; FTPCommand('TYPE I'); StorSize := SendStream.Size; if not FCanResume then RestoreAt := 0; if RestoreAt > StorSize then RestoreAt := 0; if (StorSize > 0) and (RestoreAt = StorSize) then begin Result := True; Exit; end; SendStream.FileSize := StorSize; SendStream.DoneSize := RestoreAt; FTPCommand('ALLO ' + IntToStr(StorSize - RestoreAt)); if FCanResume then begin if (FTPCommand('REST ' + IntToStr(RestoreAt)) div 100) <> 3 then Exit; end; SendStream.Position := RestoreAt; if (FTPCommand('STOR ' + FileName) div 100) <> 1 then Exit; Result := DataWrite(SendStream); finally SendStream.Free; end; end; function TFTPSendEx.RetrieveFile(const FileName: string; FileSize: Int64; Restore: Boolean): Boolean; var RetrStream: TProgressStream; begin Result := False; if not DataSocket then Exit; Restore := Restore and FCanResume; if Restore and FileExistsUTF8(FDirectFileName) then RetrStream := TProgressStream.Create(FDirectFileName, fmOpenWrite or fmShareExclusive) else begin RetrStream := TProgressStream.Create(FDirectFileName, fmCreate or fmShareDenyWrite) end; RetrStream.FileSize := FileSize; RetrStream.PluginNumber := PluginNumber; RetrStream.ProgressProc := ProgressProc; RetrStream.LocalName := PWideChar(UTF8Decode(FDirectFileName)); RetrStream.RemoteName := PWideChar(ServerToClient(FileName)); try FTPCommand('TYPE I'); if Restore then begin RetrStream.DoneSize := RetrStream.Size; RetrStream.Position := RetrStream.DoneSize; if (FTPCommand('REST ' + IntToStr(RetrStream.DoneSize)) div 100) <> 3 then Exit; end; if (FTPCommand('RETR ' + FileName) div 100) <> 1 then Exit; Result := DataRead(RetrStream); finally RetrStream.Free; end; end; function TFTPSendEx.NetworkError: Boolean; begin Result := FSock.CanRead(0); end; end. doublecmd-0.7.1/plugins/wfx/ftp/src/ftputils.pas0000644000175000001440000002036412573245343020756 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WFX plugin for working with File Transfer Protocol Copyright (C) 2009-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit FtpUtils; {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} interface uses Classes, SysUtils, WfxPlugin; const S_IFMT = $F000; { first-in/first-out (FIFO/pipe) } S_IFIFO = $1000; { character-special file (tty/console) } S_IFCHR = $2000; { directory } S_IFDIR = $4000; { blocking device (unused) } S_IFBLK = $6000; { regular } S_IFREG = $8000; { symbolic link (unused) } S_IFLNK = $A000; { Berkeley socket } S_IFSOCK = $C000; S_IRWXU = $01C0; S_IRUSR = $0100; S_IWUSR = $0080; S_IXUSR = $0040; S_IREAD = S_IRUSR; S_IWRITE = S_IWUSR; S_IEXEC = S_IXUSR; { POSIX file modes: group permission... } S_IRWXG = $0038; S_IRGRP = $0020; S_IWGRP = $0010; S_IXGRP = $0008; { POSIX file modes: other permission... } S_IRWXO = $0007; S_IROTH = $0004; S_IWOTH = $0002; S_IXOTH = $0001; { POSIX setuid(), setgid(), and sticky... } S_ISUID = $0800; S_ISGID = $0400; S_ISVTX = $0200; const ftpProtocol = 'ftp://'; function IsIpPrivate(Value: String): Boolean; function ModeStr2Mode(const sMode: String): Integer; function EncodeBase64(Data: AnsiString): AnsiString; function DecodeBase64(Data: AnsiString): AnsiString; function RepairConnectionName(Connection: AnsiString): AnsiString; function ExtractConnectionHost(Connection: AnsiString): AnsiString; function ExtractConnectionPort(Connection: AnsiString): AnsiString; function FileTimeToLocalFileTimeEx(const lpFileTime: TFileTime; var lpLocalFileTime: TFileTime): LongBool; function LocalFileTimeToFileTimeEx(const lpLocalFileTime: TFileTime; var lpFileTime: TFileTime): LongBool; function FileTimeToDateTime(ft : TFileTime) : TDateTime; function DateTimeToFileTime(dt : TDateTime) : TFileTime; implementation uses Base64, synautil {$IFDEF MSWINDOWS} , Windows {$ELSE} , UnixUtil {$ENDIF} ; function StrToIp(Value: String): LongWord; var S: String; I, X: LongWord; begin Result := 0; for X := 0 to 3 do begin S := Fetch(Value, '.'); I := StrToIntDef(S, 0); Result := (256 * Result) + I; end; end; function IsIpPrivate(Value: String): Boolean; var Index: Integer; Binary: LongWord; const PrivAddr: array [0..4, 0..1] of LongWord = ( // 10.0.0.0 - 10.255.255.255 (167772160, 184549375), // Single Class A network // 172.16.0.0 - 172.31.255.255 (2886729728, 2887778303), // Contiguous range of 16 Class B blocks // 192.168.0.0 - 192.168.255.255 (3232235520, 3232301055), // Contiguous range of 256 Class C blocks // 169.254.0.0 - 169.254.255.255 (2851995648, 2852061183), // Link-local address // 127.0.0.0 - 127.255.255.255 (2130706432, 2147483647) // Loopback (localhost) ); begin Binary:= StrToIp(Value); for Index:= 0 to 4 do begin if (Binary >= PrivAddr[Index][0]) and (Binary <= PrivAddr[Index][1]) then Exit(True) end; Result:= False; end; function ModeStr2Mode(const sMode: String): Integer; begin Result:= 0; if Length(sMode) < 10 then Exit; if sMode[1] = 'd' then Result:= Result or S_IFDIR; if sMode[1] = 'l' then Result:= Result or S_IFLNK; if sMode[1] = 's' then Result:= Result or S_IFSOCK; if sMode[1] = 'f' then Result:= Result or S_IFIFO; if sMode[1] = 'b' then Result:= Result or S_IFBLK; if sMode[1] = 'c' then Result:= Result or S_IFCHR; if sMode[2] = 'r' then Result:= Result or S_IRUSR; if sMode[3] = 'w' then Result:= Result or S_IWUSR; if sMode[4] = 'x' then Result:= Result or S_IXUSR; if sMode[5] = 'r' then Result:= Result or S_IRGRP; if sMode[6] = 'w' then Result:= Result or S_IWGRP; if sMode[7] = 'x' then Result:= Result or S_IXGRP; if sMode[8] = 'r' then Result:= Result or S_IROTH; if sMode[9] = 'w' then Result:= Result or S_IWOTH; if sMode[10] = 'x' then Result:= Result or S_IXOTH; if sMode[4] = 's' then Result:= Result or S_ISUID; if sMode[7] = 's' then Result:= Result or S_ISGID; end; function EncodeBase64(Data: AnsiString): AnsiString; var StringStream1, StringStream2: TStringStream; begin Result:= EmptyStr; if Data = EmptyStr then Exit; StringStream1:= TStringStream.Create(Data); try StringStream1.Position:= 0; StringStream2:= TStringStream.Create(EmptyStr); try with TBase64EncodingStream.Create(StringStream2) do try CopyFrom(StringStream1, StringStream1.Size); finally Free; end; Result:= StringStream2.DataString; finally StringStream2.Free; end; finally StringStream1.Free; end; end; function DecodeBase64(Data: AnsiString): AnsiString; var StringStream1, StringStream2: TStringStream; Base64DecodingStream: TBase64DecodingStream; begin Result:= EmptyStr; if Data = EmptyStr then Exit; StringStream1:= TStringStream.Create(Data); try StringStream1.Position:= 0; StringStream2:= TStringStream.Create(EmptyStr); try Base64DecodingStream:= TBase64DecodingStream.Create(StringStream1); with StringStream2 do try CopyFrom(Base64DecodingStream, Base64DecodingStream.Size); finally Base64DecodingStream.Free; end; Result:= StringStream2.DataString; finally StringStream2.Free; end; finally StringStream1.Free; end; end; function RepairConnectionName(Connection: AnsiString): AnsiString; var Index: Integer; DenySym: set of AnsiChar; begin Result:= Connection; DenySym:= AllowDirectorySeparators + AllowDriveSeparators + ['<']; for Index:= 1 to Length(Result) do begin if Result[Index] in DenySym then begin Result[Index]:= '_'; end; end; end; function ExtractConnectionHost(Connection: AnsiString): AnsiString; var I: Integer; begin if Pos(ftpProtocol, LowerCase(Connection)) <> 0 then Delete(Connection, 1, 6); I:= Pos(':', Connection); if I > 0 then Result:= Copy(Connection, 1, I - 1) else Result:= Connection; end; function ExtractConnectionPort(Connection: AnsiString): AnsiString; var I, J: Integer; begin Result:= EmptyStr; if Pos(ftpProtocol, LowerCase(Connection)) <> 0 then Delete(Connection, 1, 6); I:= Pos(':', Connection); if I > 0 then begin J:= Pos('/', Connection); if J = 0 then J:= MaxInt; Result:= Trim(Copy(Connection, I + 1, J)); end; end; function FileTimeToLocalFileTimeEx(const lpFileTime: TFileTime; var lpLocalFileTime: TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := FileTimeToLocalFileTime(lpFileTime, lpLocalFileTime); end; {$ELSE} begin Int64(lpLocalFileTime) := Int64(lpFileTime) + 10000000 * Int64(TZSeconds); Result := True; end; {$ENDIF} function LocalFileTimeToFileTimeEx(const lpLocalFileTime: TFileTime; var lpFileTime: TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := LocalFileTimeToFileTime(lpLocalFileTime, lpFileTime); end; {$ELSE} begin Int64(lpFileTime) := Int64(lpLocalFileTime) - 10000000 * Int64(TZSeconds); Result := True; end; {$ENDIF} function FileTimeToDateTime(ft : TFileTime) : TDateTime; begin FileTimeToLocalFileTimeEx(ft,ft); Result := (Int64(ft) / 864000000000.0) - 109205.0; end; function DateTimeToFileTime(dt : TDateTime) : TFileTime; begin Int64(Result) := Round((dt + 109205.0) * 864000000000.0); LocalFileTimeToFileTimeEx(Result, Result); end; end. doublecmd-0.7.1/plugins/wfx/ftp/src/ftp.dpr0000644000175000001440000000145612645520662017700 0ustar alexxuserslibrary ftp; {$IFDEF FPC} {$mode delphi}{$H+} {$ENDIF} uses FPCAdds, Classes, FtpFunc, FtpUtils, FtpConfDlg , ssl_openssl {$IF DEFINED(UNIX)} , ssl_openssl_ver {$ENDIF} {$IF DEFINED(LINUX)} , ssl_gnutls_lib {$ELSEIF DEFINED(MSWINDOWS)} , ssl_winssl_lib {$ENDIF} ; {$IF DEFINED(LINUX)} {$I ssl_gnutls_lib.inc} {$ELSEIF DEFINED(MSWINDOWS)} {$I ssl_winssl_lib.inc} {$ENDIF} exports FsInitW, FsFindFirstW, FsFindNextW, FsFindClose, FsExecuteFileW, FsRenMovFileW, FsGetFileW, FsPutFileW, FsDeleteFileW, FsMkDirW, FsRemoveDirW, FsDisconnectW, FsSetCryptCallbackW, FsGetDefRootName, FsSetDefaultParams, { FsNetworkGetSupportedProtocols, FsNetworkGetConnection, FsNetworkManageConnection, FsNetworkOpenConnection, } ExtensionInitialize; {$R *.res} begin end. doublecmd-0.7.1/plugins/wfx/ftp/lib/0000755000175000001440000000000012675717732016362 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/ftp/COPYING.GPL.txt0000644000175000001440000004325412521100560020065 0ustar alexxusers 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. Copyright (C) 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. , 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. doublecmd-0.7.1/plugins/wfx/ftp/COPYING.LESSER.txt0000644000175000001440000006364212521100560020443 0ustar alexxusers GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! doublecmd-0.7.1/plugins/wfx/samba/0000755000175000001440000000000012675717732016106 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/samba/src/0000755000175000001440000000000012675717732016675 5ustar alexxusersdoublecmd-0.7.1/plugins/wfx/samba/src/smbfunc.pas0000644000175000001440000004117412555114306021027 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WFX plugin for working with Common Internet File System (CIFS) Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SmbFunc; {$mode objfpc}{$H+} interface uses InitC, Classes, SysUtils, WfxPlugin, Extension; function FsInit(PluginNr: Integer; pProgressProc: TProgressProc; pLogProc: TLogProc; pRequestProc: TRequestProc): Integer; cdecl; function FsFindFirst(Path: PAnsiChar; var FindData: TWin32FindData): THandle; cdecl; function FsFindNext(Hdl: THandle; var FindData: TWin32FindData): BOOL; cdecl; function FsFindClose(Hdl: THandle): Integer; cdecl; function FsRenMovFile(OldName, NewName: PAnsiChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; cdecl; function FsGetFile(RemoteName, LocalName: PAnsiChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; cdecl; function FsPutFile(LocalName, RemoteName: PAnsiChar; CopyFlags: Integer): Integer; cdecl; function FsDeleteFile(RemoteName: PAnsiChar): BOOL; cdecl; function FsMkDir(RemoteDir: PAnsiChar): BOOL; cdecl; function FsRemoveDir(RemoteName: PAnsiChar): BOOL; cdecl; function FsSetAttr(RemoteName: PAnsiChar; NewAttr: Integer): BOOL; cdecl; function FsSetTime(RemoteName: PAnsiChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; cdecl; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); cdecl; { Extension API } procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); cdecl; var Message: AnsiString; WorkGroup: array[0..MAX_PATH-1] of AnsiChar; UserName: array[0..MAX_PATH-1] of AnsiChar; Password: array[0..MAX_PATH-1] of AnsiChar; ExtensionStartupInfo: TExtensionStartupInfo; implementation uses Math, Unix, BaseUnix, UnixType, StrUtils, URIParser, SmbAuthDlg, libsmbclient; const SMB_BUFFER_SIZE = 524288; type PSambaHandle = ^TSambaHandle; TSambaHandle = record Path: String; Handle: LongInt; end; var ProgressProc: TProgressProc; LogProc: TLogProc; RequestProc: TRequestProc; PluginNumber: Integer; Auth: Boolean = False; Abort: Boolean = False; NeedAuth: Boolean = False; function FileTimeToUnixTime(ft: TFileTime): time_t; var UnixTime: Int64; begin UnixTime:= ft.dwHighDateTime; UnixTime:= (UnixTime shl 32) or ft.dwLowDateTime; UnixTime:= (UnixTime - 116444736000000000) div 10000000; Result:= time_t(UnixTime); end; function UnixTimeToFileTime(mtime: time_t): TFileTime; var FileTime: Int64; begin FileTime:= Int64(mtime) * 10000000 + 116444736000000000; Result.dwLowDateTime:= (FileTime and $FFFF); Result.dwHighDateTime:= (FileTime shr $20); end; function URIEncode(Path: String): String; begin Result:= FileNameToURI(Path); Result:= 'smb:/' + Copy(Result, 8, MaxInt); end; procedure WriteError(const FuncName: String); begin WriteLn(FuncName + ': ', SysErrorMessage(fpgetCerrno)); end; procedure smbc_get_auth_data(server, share: PAnsiChar; wg: PAnsiChar; wglen: LongInt; un: PAnsiChar; unlen: LongInt; pw: PAnsiChar; pwlen: LongInt); cdecl; begin Auth:= True; if NeedAuth then begin Abort:= True; // Set query resource if (server = nil) then Message:= StrPas(share) else Message:= StrPas(server) + PathDelim + StrPas(share); // Set authentication data StrLCopy(WorkGroup, wg, wglen); StrLCopy(UserName, un, unlen); StrLCopy(Password, pw, pwlen); // Query authentication data if ShowSmbAuthDlg then begin Abort:= False; // Get authentication data StrLCopy(wg, WorkGroup, wglen); StrLCopy(un, UserName, unlen); StrLCopy(pw, Password, pwlen); end; end else begin // If has saved workgroup then use it if StrLen(WorkGroup) <> 0 then StrLCopy(wg, WorkGroup, wglen); // If has saved user name then use it if StrLen(UserName) <> 0 then StrLCopy(un, UserName, unlen); // If has saved password then use it if StrLen(Password) <> 0 then StrLCopy(pw, Password, pwlen); end; end; function BuildNetworkPath(const Path: String): String; var I, C: Integer; begin C:= 0; if Path = PathDelim then Exit('smb://'); Result := Path; // Don't check last symbol for I := 1 to Length(Result) - 1 do begin if (Result[I] = PathDelim) then Inc(C); end; if (C < 2) then Result:= URIEncode(Result) else begin I:= PosEx(PathDelim, Result, 2); Result:= URIEncode(Copy(Result, I, MaxInt)); end; end; function ForceAuth(Path: PAnsiChar): String; var un: array[0..MAX_PATH-1] of AnsiChar; pw: array[0..MAX_PATH-1] of AnsiChar; begin Result:= BuildNetworkPath(Path); // Use by default saved user name and password StrLCopy(un, UserName, MAX_PATH); StrLCopy(pw, Password, MAX_PATH); // Query auth data smbc_get_auth_data(nil, PAnsiChar(Result), WorkGroup, MAX_PATH, un, MAX_PATH, pw, MAX_PATH); if (Abort = False) and (un <> '') then begin if StrLen(WorkGroup) = 0 then Result:= 'smb://' + un + ':' + pw + '@' + Copy(Result, 7, MAX_PATH) else Result:= 'smb://' + WorkGroup + ';' + un + ':' + pw + '@' + Copy(Result, 7, MAX_PATH); end; end; function FsInit(PluginNr: Integer; pProgressProc: tProgressProc; pLogProc: tLogProc; pRequestProc: tRequestProc): Integer; cdecl; begin if not LoadSambaLibrary then begin pRequestProc(PluginNr, RT_MsgOK, nil, 'Can not load "libsmbclient" library!', nil, 0); Exit(-1); end; ProgressProc := pProgressProc; LogProc := pLogProc; RequestProc := pRequestProc; PluginNumber := PluginNr; FillChar(WorkGroup, SizeOf(WorkGroup), #0); FillChar(UserName, SizeOf(UserName), #0); FillChar(Password, SizeOf(Password), #0); Result := smbc_init(@smbc_get_auth_data, 0); if Result < 0 then WriteError('smbc_init'); end; function FsFindFirst(Path: PAnsiChar; var FindData: TWin32FindData): THandle; cdecl; var NetworkPath: String; SambaHandle: PSambaHandle; Handle: LongInt; begin Abort:= False; NetworkPath:= BuildNetworkPath(Path); repeat Auth:= False; Handle:= smbc_opendir(PChar(NetworkPath)); NeedAuth:= (Handle = -1); // Sometimes smbc_get_auth_data don't called automatically // so we call it manually if NeedAuth and (Auth = False) then begin NetworkPath:= ForceAuth(Path); end; until not NeedAuth or Abort; if Handle < 0 then begin WriteError('smbc_opendir'); Result:= wfxInvalidHandle; end else begin New(SambaHandle); SambaHandle^.Path:= IncludeTrailingPathDelimiter(NetworkPath); SambaHandle^.Handle:= Handle; Result:= THandle(SambaHandle); FsFindNext(Result, FindData); end; end; function FsFindNext(Hdl: THandle; var FindData: TWin32FindData): BOOL; cdecl; var dirent: psmbc_dirent; FileInfo: BaseUnix.Stat; Mode: array[0..10] of AnsiChar; SambaHandle: PSambaHandle absolute Hdl; begin Result:= True; dirent := smbc_readdir(SambaHandle^.Handle); if (dirent = nil) then Exit(False); FillByte(FindData, SizeOf(TWin32FindData), 0); StrLCopy(FindData.cFileName, dirent^.name, dirent^.namelen); if dirent^.smbc_type in [SMBC_WORKGROUP, SMBC_SERVER, SMBC_FILE_SHARE] then FindData.dwFileAttributes:= FILE_ATTRIBUTE_DIRECTORY; if dirent^.smbc_type in [SMBC_DIR, SMBC_FILE, SMBC_LINK] then begin if smbc_stat(PChar(SambaHandle^.Path + FindData.cFileName), @FileInfo) = 0 then begin FindData.nFileSizeLow := (FileInfo.st_size and MAXDWORD); FindData.nFileSizeHigh := (FileInfo.st_size shr $20); FindData.ftLastAccessTime:= UnixTimeToFileTime(FileInfo.st_atime); FindData.ftCreationTime:= UnixTimeToFileTime(FileInfo.st_ctime); FindData.ftLastWriteTime:= UnixTimeToFileTime(FileInfo.st_mtime); FindData.dwFileAttributes:= IfThen(fpS_ISDIR(FileInfo.st_mode), FILE_ATTRIBUTE_DIRECTORY, 0); end; if smbc_getxattr(PChar(SambaHandle^.Path + FindData.cFileName), 'system.dos_attr.mode', @Mode, SizeOf(Mode)) >= 0 then begin // smbc_getxattr returns attributes as hex string (like 0x00000000) FindData.dwFileAttributes:= StrToIntDef(Mode, FindData.dwFileAttributes); end; end; end; function FsFindClose(Hdl: THandle): Integer; cdecl; var SambaHandle: PSambaHandle absolute Hdl; begin Result:= smbc_closedir(SambaHandle^.Handle); if Result < 0 then WriteError('smbc_closedir'); Dispose(SambaHandle); end; function FsRenMovFile(OldName, NewName: PAnsiChar; Move, OverWrite: BOOL; RemoteInfo: pRemoteInfo): Integer; cdecl; var OldFileName, NewFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: ssize_t; Written: Int64; FileSize: Int64; Percent: LongInt; begin OldFileName:= BuildNetworkPath(OldName); NewFileName:= BuildNetworkPath(NewName); if Move then begin if smbc_rename(PChar(OldFileName), PChar(NewFileName)) < 0 then Exit(-1); end else begin BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= smbc_open(PChar(OldFileName), O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= smbc_open(PChar(NewFileName), O_CREAT or O_RDWR or O_TRUNC, RemoteInfo^.Attr); if (fdNewFile < 0) then Exit(FS_FILE_WRITEERROR); // Get source file size FileSize:= smbc_lseek(fdOldFile, 0, SEEK_END); smbc_lseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= smbc_read(fdOldFile, Buffer, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if smbc_write(fdNewFile, Buffer, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, PChar(OldFileName), PChar(NewFileName), Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then smbc_close(fdOldFile); if not (fdNewFile < 0) then smbc_close(fdNewFile); end; end; Result:= FS_FILE_OK; end; function FsGetFile(RemoteName, LocalName: PAnsiChar; CopyFlags: Integer; RemoteInfo: pRemoteInfo): Integer; cdecl; var OldFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: ssize_t; Written: Int64; FileSize: Int64; Percent: LongInt; begin OldFileName:= BuildNetworkPath(RemoteName); BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= smbc_open(PChar(OldFileName), O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= fpOpen(PChar(LocalName), O_CREAT or O_RDWR or O_TRUNC, $1A4); // $1A4 = &644 if (fdNewFile < 0) then Exit(FS_FILE_WRITEERROR); // Get source file size FileSize:= smbc_lseek(fdOldFile, 0, SEEK_END); smbc_lseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= smbc_read(fdOldFile, Buffer, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if fpWrite(fdNewFile, Buffer^, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, PChar(OldFileName), LocalName, Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then smbc_close(fdOldFile); if not (fdNewFile < 0) then fpClose(fdNewFile); end; Result:= FS_FILE_OK; end; function FsPutFile(LocalName, RemoteName: PAnsiChar; CopyFlags: Integer): Integer; cdecl; var NewFileName: String; Buffer: Pointer = nil; BufferSize: LongWord; fdOldFile: LongInt; fdNewFile: LongInt; dwRead: TSsize; Written: Int64; FileSize: Int64; Percent: LongInt; begin NewFileName:= BuildNetworkPath(RemoteName); begin BufferSize:= SMB_BUFFER_SIZE; Buffer:= GetMem(BufferSize); try // Open source file fdOldFile:= fpOpen(LocalName, O_RDONLY, 0); if (fdOldFile < 0) then Exit(FS_FILE_READERROR); // Open target file fdNewFile:= smbc_open(PChar(NewFileName), O_CREAT or O_RDWR or O_TRUNC, 0); if (fdNewFile < 0) then Exit(FS_FILE_WRITEERROR); // Get source file size FileSize:= fpLseek(fdOldFile, 0, SEEK_END); fpLseek(fdOldFile, 0, SEEK_SET); Written:= 0; // Copy data repeat dwRead:= fpRead(fdOldFile, Buffer^, BufferSize); if (dwRead < 0) then Exit(FS_FILE_READERROR); if (dwRead > 0) then begin if smbc_write(fdNewFile, Buffer, dwRead) <> dwRead then Exit(FS_FILE_WRITEERROR); Written:= Written + dwRead; // Calculate percent Percent:= (Written * 100) div FileSize; // Update statistics if ProgressProc(PluginNumber, LocalName, PChar(NewFileName), Percent) = 1 then Exit(FS_FILE_USERABORT); end; until (dwRead = 0); finally if Assigned(Buffer) then FreeMem(Buffer); if not (fdOldFile < 0) then fpClose(fdOldFile); if not (fdNewFile < 0) then smbc_close(fdNewFile); end; end; Result:= FS_FILE_OK; end; function FsDeleteFile(RemoteName: PAnsiChar): BOOL; cdecl; var FileName: String; begin FileName:= BuildNetworkPath(RemoteName); Result:= smbc_unlink(PChar(FileName)) = 0; end; function FsMkDir(RemoteDir: PAnsiChar): BOOL; cdecl; var NewDir: String; begin NewDir:= BuildNetworkPath(RemoteDir); Result:= smbc_mkdir(PChar(NewDir), $1FF) = 0; // $1FF = &0777 end; function FsRemoveDir(RemoteName: PAnsiChar): BOOL; cdecl; var RemDir: String; begin RemDir:= BuildNetworkPath(RemoteName); Result:= smbc_rmdir(PChar(RemDir)) = 0; end; function FsSetAttr(RemoteName: PAnsiChar; NewAttr: Integer): BOOL; cdecl; var FileName: String; Mode: array[0..10] of AnsiChar; begin Mode:= '0x' + HexStr(NewAttr, 8) + #0; FileName:= BuildNetworkPath(RemoteName); // smbc_setxattr takes attributes as hex string (like 0x00000000) Result:= (smbc_setxattr(PChar(FileName), 'system.dos_attr.mode', @Mode, SizeOf(Mode), 0) >= 0); end; function FsSetTime(RemoteName: PAnsiChar; CreationTime, LastAccessTime, LastWriteTime: PFileTime): BOOL; cdecl; var FileName: String; tbuf: array[0..1] of timeval; FileInfo: BaseUnix.Stat; begin FileName:= BuildNetworkPath(RemoteName); if (LastAccessTime = nil) or (LastWriteTime = nil) then begin if smbc_stat(PChar(FileName), @FileInfo) < 0 then Exit(False); if (LastAccessTime = nil) then tbuf[0].tv_sec:= FileInfo.st_atime else tbuf[0].tv_sec:= FileTimeToUnixTime(LastAccessTime^); if (LastWriteTime = nil) then tbuf[1].tv_sec:= FileInfo.st_mtime else tbuf[1].tv_sec:= FileTimeToUnixTime(LastWriteTime^); end else begin tbuf[0].tv_sec:= FileTimeToUnixTime(LastAccessTime^); tbuf[1].tv_sec:= FileTimeToUnixTime(LastWriteTime^); end; Result:= (smbc_utimes(PChar(FileName), @tbuf) = 0); end; procedure FsGetDefRootName(DefRootName: PAnsiChar; MaxLen: Integer); cdecl; begin StrPLCopy(DefRootName, 'Windows Network', MaxLen); end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); cdecl; begin ExtensionStartupInfo:= StartupInfo^; end; end. doublecmd-0.7.1/plugins/wfx/samba/src/libsmbclient.pas0000644000175000001440000001151112014201074022016 0ustar alexxusersunit libsmbclient; {$mode delphi} interface uses Classes, SysUtils, Unix, BaseUnix, UnixType; const SMBC_WORKGROUP = 1; SMBC_SERVER = 2; SMBC_FILE_SHARE = 3; SMBC_PRINTER_SHARE = 4; SMBC_COMMS_SHARE = 5; SMBC_IPC_SHARE = 6; SMBC_DIR = 7; SMBC_FILE = 8; SMBC_LINK = 9; const SMBC_DOS_MODE_READONLY = $01; SMBC_DOS_MODE_HIDDEN = $02; SMBC_DOS_MODE_SYSTEM = $04; SMBC_DOS_MODE_VOLUME_ID = $08; SMBC_DOS_MODE_DIRECTORY = $10; SMBC_DOS_MODE_ARCHIVE = $20; type (**@ingroup structure * Structure that represents a directory entry. * *) psmbc_dirent = ^smbc_dirent; smbc_dirent = record (** Type of entity. SMBC_WORKGROUP=1, SMBC_SERVER=2, SMBC_FILE_SHARE=3, SMBC_PRINTER_SHARE=4, SMBC_COMMS_SHARE=5, SMBC_IPC_SHARE=6, SMBC_DIR=7, SMBC_FILE=8, SMBC_LINK=9,*) smbc_type: LongWord; (** Length of this smbc_dirent in bytes *) dirlen: LongWord; (** The length of the comment string in bytes (does not include * null terminator) *) commentlen: LongWord; (** Points to the null terminated comment string *) comment: PAnsiChar; (** The length of the name string in bytes (does not include * null terminator) *) namelen: LongWord; (** Points to the null terminated name string *) name: array[0..0] of AnsiChar; end; smbc_get_auth_data_fn = procedure(server, share: PAnsiChar; wg: PAnsiChar; wglen: LongInt; un: PAnsiChar; unlen: LongInt; pw: PAnsiChar; pwlen: LongInt); cdecl; smbc_init_fn = function (fn: smbc_get_auth_data_fn; debug: LongInt): LongInt; cdecl; smbc_open_fn = function(furl: PAnsiChar; flags: LongInt; mode: mode_t): LongInt; cdecl; smbc_read_fn = function(fd: LongInt; buf: Pointer; bufsize: size_t): ssize_t; cdecl; smbc_write_fn = function(fd: LongInt; buf: Pointer; bufsize: size_t): ssize_t; cdecl; smbc_lseek_fn = function(fd: LongInt; offset: off_t; whence: LongInt): off_t; cdecl; smbc_close_fn = function(fd: LongInt): LongInt; cdecl; smbc_unlink_fn = function(furl: PAnsiChar): LongInt; cdecl; smbc_rename_fn = function(ourl: PAnsiChar; nurl: PAnsiChar): LongInt; cdecl; smbc_opendir_fn = function(durl: PAnsiChar): LongInt; cdecl; smbc_closedir_fn = function(dh: LongInt): LongInt; cdecl; smbc_readdir_fn = function(dh: LongInt): psmbc_dirent; cdecl; smbc_mkdir_fn = function(durl: PAnsiChar; mode: mode_t): LongInt; cdecl; smbc_rmdir_fn = function(durl: PAnsiChar): LongInt; cdecl; smbc_stat_fn = function(url: PAnsiChar; st: PStat): LongInt; cdecl; smbc_getxattr_fn = function(url, name: PAnsiChar; value: Pointer; size: size_t): LongInt; cdecl; smbc_setxattr_fn = function(url, name: PAnsiChar; value: Pointer; size: size_t; flags: LongInt): LongInt; cdecl; smbc_utimes_fn = function(url: PAnsiChar; tbuf: ptimeval): LongInt; cdecl; var smbc_init: smbc_init_fn; smbc_open: smbc_open_fn; smbc_read: smbc_read_fn; smbc_write: smbc_write_fn; smbc_lseek: smbc_lseek_fn; smbc_close: smbc_close_fn; smbc_unlink: smbc_unlink_fn; smbc_rename: smbc_rename_fn; smbc_opendir: smbc_opendir_fn; smbc_closedir: smbc_closedir_fn; smbc_readdir: smbc_readdir_fn; smbc_mkdir: smbc_mkdir_fn; smbc_rmdir: smbc_rmdir_fn; smbc_stat: smbc_stat_fn; smbc_getxattr: smbc_getxattr_fn; smbc_setxattr: smbc_setxattr_fn; smbc_utimes: smbc_utimes_fn; function LoadSambaLibrary: Boolean; implementation uses dynlibs; var hSamba: TLibHandle = 0; function LoadSambaLibrary: Boolean; begin if (hSamba = 0) then begin hSamba:= LoadLibrary('libsmbclient.so.0'); if (hSamba <> 0) then begin @smbc_init:= GetProcAddress(hSamba, 'smbc_init'); @smbc_opendir:= GetProcAddress(hSamba, 'smbc_opendir'); @smbc_readdir:= GetProcAddress(hSamba, 'smbc_readdir'); @smbc_closedir:= GetProcAddress(hSamba, 'smbc_closedir'); @smbc_mkdir:= GetProcAddress(hSamba, 'smbc_mkdir'); @smbc_rmdir:= GetProcAddress(hSamba, 'smbc_rmdir'); @smbc_open:= GetProcAddress(hSamba, 'smbc_open'); @smbc_read:= GetProcAddress(hSamba, 'smbc_read'); @smbc_write:= GetProcAddress(hSamba, 'smbc_write'); @smbc_lseek:= GetProcAddress(hSamba, 'smbc_lseek'); @smbc_close:= GetProcAddress(hSamba, 'smbc_close'); @smbc_unlink:= GetProcAddress(hSamba, 'smbc_unlink'); @smbc_rename:= GetProcAddress(hSamba, 'smbc_rename'); @smbc_stat:= GetProcAddress(hSamba, 'smbc_stat'); @smbc_getxattr:= GetProcAddress(hSamba, 'smbc_getxattr'); @smbc_setxattr:= GetProcAddress(hSamba, 'smbc_setxattr'); @smbc_utimes:= GetProcAddress(hSamba, 'smbc_utimes'); end; end; Result:= (hSamba <> 0); end; end. doublecmd-0.7.1/plugins/wfx/samba/src/samba.lpi0000644000175000001440000001106612504341721020450 0ustar alexxusers <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="2"/> <StringTable FileDescription="Samba WFX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2015 Alexander Koblov" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/samba.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="/usr/bin/doublecmd"/> <LaunchingApplication PathPlusParams="/usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="2"> <Unit0> <Filename Value="samba.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="samba"/> </Unit0> <Unit1> <Filename Value="smbauthdlg.pas"/> <IsPartOfProject Value="True"/> <ComponentName Value="DialogBox"/> <HasResources Value="True"/> <ResourceBaseClass Value="Form"/> <UnitName Value="SmbAuthDlg"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/samba.wfx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wfx/samba/src/smbauthdlg.pas������������������������������������������������0000755�0001750�0000144�00000004746�12633246730�021537� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit SmbAuthDlg; {$mode objfpc}{$H+} {$R smbauthdlg.lfm} interface uses SysUtils, Extension; function ShowSmbAuthDlg: Boolean; implementation uses SmbFunc; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; cdecl; var Data: PtrInt; Text: String; begin Result:= 0; with ExtensionStartupInfo do begin case Msg of DN_INITDIALOG: begin Text:= PAnsiChar(SendDlgMsg(pDlg, 'lblMessage', DM_GETTEXT, 0, 0)); Data:= PtrInt(PAnsiChar(Format(Text, [Message]))); SendDlgMsg(pDlg, 'lblMessage', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(UserName)); SendDlgMsg(pDlg, 'edtUserName', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(WorkGroup)); SendDlgMsg(pDlg, 'edtDomain', DM_SETTEXT, Data, 0); Data:= PtrInt(PAnsiChar(Password)); SendDlgMsg(pDlg, 'edtPassword', DM_SETTEXT, Data, 0); end; DN_CLICK: if DlgItemName = 'btnOK' then begin Data:= SendDlgMsg(pDlg, 'edtUserName', DM_GETTEXT, 0, 0); StrLCopy(UserName, PAnsiChar(Data), MAX_PATH); Data:= SendDlgMsg(pDlg, 'edtDomain', DM_GETTEXT, 0, 0); StrLCopy(WorkGroup, PAnsiChar(Data), MAX_PATH); Data:= SendDlgMsg(pDlg, 'edtPassword', DM_GETTEXT, 0, 0); StrLCopy(Password, PAnsiChar(Data), MAX_PATH); // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, ID_OK, 0); end else if DlgItemName = 'btnCancel' then begin // close dialog SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, ID_CANCEL, 0); end; end;// case end; // with end; function ShowSmbAuthDlg: Boolean; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin Result := False; try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with ExtensionStartupInfo do begin Result := DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. ��������������������������doublecmd-0.7.1/plugins/wfx/samba/src/samba.lpr�����������������������������������������������������0000644�0001750�0000144�00000000536�12014201074�020451� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library samba; {$mode objfpc}{$H+} uses Classes, SmbFunc, SmbAuthDlg { you can add units after this }; exports FsInit, FsFindFirst, FsFindNext, FsFindClose, FsRenMovFile, FsGetFile, FsPutFile, FsDeleteFile, FsMkDir, FsRemoveDir, FsSetAttr, FsSetTime, FsGetDefRootName, ExtensionInitialize; {$R *.res} begin end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wfx/samba/src/smbauthdlg.lfm������������������������������������������������0000755�0001750�0000144�00000024744�11622223034�021517� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object DialogBox: TDialogBox Left = 369 Height = 185 Top = 214 Width = 354 AutoSize = True BorderStyle = bsDialog Caption = 'Authentication' ChildSizing.LeftRightSpacing = 8 ChildSizing.TopBottomSpacing = 8 ClientHeight = 185 ClientWidth = 354 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '0.9.30' object lblUserName: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 54 Width = 69 Caption = 'User name:' ParentColor = False end object edtUserName: TEdit AnchorSideLeft.Control = lblUserName AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblMessage AnchorSideTop.Side = asrBottom Left = 153 Height = 27 Top = 50 Width = 200 BorderSpacing.Left = 18 BorderSpacing.Top = 24 TabOrder = 0 end object lblPassword: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 120 Width = 63 Caption = 'Password:' ParentColor = False end object edtPassword: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtUserName AnchorSideRight.Side = asrBottom Left = 153 Height = 27 Top = 116 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 EchoMode = emPassword PasswordChar = '*' TabOrder = 2 end object btnCancel: TBitBtn AnchorSideTop.Control = edtPassword AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 263 Height = 30 Top = 155 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Cancel = True Caption = 'Cancel' Kind = bkCancel ModalResult = 2 OnClick = ButtonClick TabOrder = 4 end object btnOK: TBitBtn AnchorSideTop.Control = btnCancel AnchorSideRight.Control = btnCancel Left = 167 Height = 30 Top = 155 Width = 90 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = '&OK' Default = True Kind = bkOK ModalResult = 1 OnClick = ButtonClick TabOrder = 3 end object lblMessage: TLabel AnchorSideLeft.Control = imgAuth AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = imgAuth Left = 66 Height = 18 Top = 8 Width = 153 BorderSpacing.Left = 10 Caption = 'Password required for %s' ParentColor = False end object edtDomain: TEdit AnchorSideLeft.Control = edtUserName AnchorSideTop.Control = edtUserName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = edtPassword AnchorSideRight.Side = asrBottom Left = 153 Height = 27 Top = 83 Width = 200 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 1 end object lblDomain: TLabel AnchorSideLeft.Control = lblMessage AnchorSideTop.Control = edtDomain AnchorSideTop.Side = asrCenter Left = 66 Height = 18 Top = 87 Width = 52 Caption = 'Domain:' ParentColor = False end object imgAuth: TImage AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 8 Height = 48 Top = 8 Width = 48 AutoSize = True Picture.Data = { 1754506F727461626C654E6574776F726B477261706869639E0C000089504E47 0D0A1A0A0000000D49484452000000300000003008060000005702F987000000 017352474200AECE1CE900000006624B474400FF00FF00FFA0BDA79300000009 7048597300000DD700000DD70142289B780000000774494D4507DB080F071810 46DD836300000C1E4944415468DEED99696C5CD775C7FFF7BE75567286FB4E4A 946451FB92C892BA08B12CD5B69C1510827C285023C856A4881D470E69B4982F 7165C9551314719AB641F3A51FE43A4E1D25B2C5489614CB5A182D96646DDCB7 216786E4BCD9E76DF7DE7E9811CB2869E02816ED02BDC0C50CDE9CF3707FE79C 7BCEB97780FFE383FC6F3F9C3C79D2AF7AA4373CBAE7615DD36555D50A9515A1 F16231F72BCBB2DF4CA5B2C7366FDE5CF8C8029C38D57BA3BEB6BEABA9B119B2 A2429115A8AA0AC77190CEA45028E4529665FFB8E09A3F58BF727DFF470EA0F7 ADA37CD3BA8F93A9E94930E62210A8444B730B2CCB86AA2A2084229FCFC148CD 8942A1D06B99C57D9B363D7C6DB101E8EF2163966DC1B48A30D2C6778D64AA66 70F0CEA3F178F4603C3E356EA4E62049148D0DCDA4AEB661B7C7E7BBDC77F9C2 BF9EEC3B59FF9100101CE763F1289A1A9B0190AF1AC6CCEAAEAEB5C73B3B1FDA D7D27271492697FED4ECDCEC9BF1C4342714686FED901A6AEBBFE8A7DAC0E9B7 4FFEF5871E42478F1E0DCA3A195CD1B9A2C6A37B71EBF60DC7B2EDAFEFDAF9D8 0F17CADD18B8B18A30719052F258385405894A181D1F412693FE0FDBE45FDEBD 7B77FE43010080DEDE23CBA8A2FCAA6BC5AA7A55D5717BE0268AF9DCCB3E6FFE D96DDBF61617CABE7BFDE22EEEF2433E5F60556D4D2DA663D3181E1932870747 662DCBC901483026AE13224E158B9EDE48E46F320F1C00008E1D3BD64264F67A 5B6BFB86CA8A10C627C661A4674708A4AF3FFA89BFF8C55DB9175E7AA14B97E4 7FEA5CD6F9677575F5726B4B3B72B90C46C68621530D54926099261289193B11 9F7518633F1682753FF7DC73D9070A0000478E1CF16A5EF9DF7D5EEFDEF6B60E 388E83F1C93198A6F95330F6DCBBEFBEB79DCAF4E5952BBBB4D87482FA033ED4 D5D56049C712148B266289692C695F0ADBB2E03206C7B171FBCE803D32343AE3 38D8D5D3F3ECCD070A00004208F2CB136F7E89CAE4859AAADAF0D28E6548A753 38DF775644A7A6F8C73FB645BA72F92AEAEBEBB17EFD5A080023A3837868D94A 4CC7A730376BA0ABAB0B9665C2765CC812453C9E1017CE5F4A3A8EB5B9BBBB7B F403CD42BF454A88D8B5F3B11FC29597C713B17FBE72EDD73C9E886162224AB6 6DDD2E0DF40FA1A6BA06EBD7AF43201044DA48636C64323B363186C6FA26B8CC 16972F5D81AAE9A004B01D1BB575B564C3C6B52145D17E1E8944E80305B83B76 EEDC39B7EB91C7BF5AB48A5BCEF59D8B3FF4D00AE40B7918C934D66F5C8B5C3E 034A292E5EBC84C6E6FA002040A90C5991AD3B7706012E402905A5121CC7466B 6B330D87431D5EAFFF8B8B02309F757E7D63B2982F56B4B4B462B07F18EBD6AD 06E70C9C7364B319D8B68BBAEA3A04FD15181A1940A150B846482962A9248152 0A42081CD7C5EAB52BBD94D26F2D2A0083B3A7B5A58D73C66024D3686E6982EB B890CA96ED58D28E4B97DF15935313666236716AF0CEE8FAA6A606C88A0C4208 2452F282E00C55E12AA8AADA78E0C081A57FE83AE4FB059065795B5575D89B4E 67E1F379A1280A6CDB02A5148EEB60E5CAE5B06D8B5CBF7A471742EC686F6FC3 B6ED5B21B88044244002280400094270545787D9D858612380A14501A0200DAA AA2197CB4255D5D2334A21840000D8B68575EBD660C38675E09CC3EBF54140C0 751C104A4041200909800040E0F3F9144250BD681E0050E442409452ECFCC604 0444F9B96599701C079C73A4520602C10AE89A064A693935030214945230CE04 40DC45DB035CB09BB94C96852A2A90C96421D1D24238E7C8E5F2309249CCCECE 219BCBC1B26D702150C8E5C05C0610024A4AF2129520491272D9BC0DB0F14503 70B97B2A3A1D2D042B2B000264B279082E70EBD66DC46271E4727970CE41CAD5 92828250A050CC838094C2A8EC3521041289844708D1B768004BDB569C4C1B29 DB344D842A2B30D03F009FDF875028044A040821A5C513024228082D7D7221E0 D81608290148928CA9A99820845CE8EEEE36160D60EFDEBDCCE5ACE7CAE5CB85 CE651DB8736700F97C014B3ADA21ABDA6F742B64BE6B21902885CBDCB2F54B21 77E9E295A265B9DD8B5A0700C02A38FF964A1B971389B8D3D45C8F13C7DF02A5 0A562C5F01BFCF575AB3004048C9E28494810884E02020E8EBBB683A8EFD9F3D 3DFBDE5974804824C2298A4F0E8F8E4E575404A0A80A7E71F40D70C6D0D1B114 ADAD6D08852AA1EB1EE89A024DD7A1697A290B09829B376FB1B1D1F16B994CFA 2B1FF891F2FD8EA79F8EA408A0D4D7376069673B344DC14F7EF23AAE5DBB0E89 4AA8AAAA4175751582C14A783C1EC89204C761E04240D3344A08FA23918879DF 05F58F053874E890C7E5569522CBA80A57419224787D31F40F0CE0EAD5EBF0FB FDF8DCE73E09084040802A145CE4C05C070D0D0D8473EC7E2087FAF73B9E79E6 992221F8FB2BD7AF145455452010404B4B33EA1BAAB17CC51214CD8298994942 966548B4D4C4C9928CA269A2A232084D537DF7D3037D6000A5AAC65F8B4E44F5 4C26035996C1184355388C254B97A0582C3867CF9E2B663219288A024996A069 2A0AF90220085A5A9AC19878F44301884422F41FBF77E0652AAB7D1B366C2415 C10A101098A6054551C0980BCBCE8B4462F61BAFBEFA5FC69933E74C4A283C1E 0F2CCB826D5B686B6BF1EABAFE990F05C0EB55D6CBB2FA977B9E7852EBECEC24 5C7030C6619945783C5E1849033E9FFF4277F7BE7F9124F967B222498CB1524D 20402A9D467D431D1CC7FD93575E79455A74004678D0716C52340BF3876BD32C 82730E8FD783583C6672CE7FBA7FFFFE559462EFDA35AB15D775C13883A66A30 92B3D0351DC1A09F0D0D8D6F5C7480EE6FFDED29DB743E7BE2C4F1ECCCCCAC90 6505D96C0E9AAA419664C462319711F4027447737353B95B2D75AF5EAF8E39C3 80E338686D6D5125E9FEB2D11FBD89BFFDEDE78FB9AEFD77232343454A095269 03814000C54211B66DBB3DCFF6DCE49C9E181E1EC1E1C3AFE64F9D7E3B373D15 13FE4010AEE3209D4EA1A1A1419365F9338B5A07BE73F03BAB3DB2FA82107CB3 00426D6DEDBA6DDB706C1BA1501813D14948941C07809E9E676F0B217CFBF7EF 5F3A3A52FC6C3693ED79FCF1DD153E9F17B3C939B4B6B4C175DDD59148C41B89 440A8BE201954A7FD5D6DEF6C49E3D9F6CF8C2E7BFA037373523954E43D33CF0 FA7C88C5A6338ECD7EB6F05A261C0E8FC9B2FC312A490AE70CC1400552460A12 95100E878BBAAEFFE9A28510A5D4234BB253110CE2EEC92C9BC92014AA84E01C B1585C755571FCAEFC8B2FBE18C8E70B6FD737D4EDD9B163BBD7652EFC8100F2 851C6CDB465373634051D43D8B06609BECF9FE8101DB4819A52B1200D96C06D5 55D5481A491082D8F34F3F3FBDC0033ED7659BB66CD9A40380EB32E8BA064228 32D934EAEA6A28409F583400429C660891E8EFEF679450148A45702E50595981 582CCE39134717CAEFDBB72F46A974A6B7F7547E2E999A3F3BFBFD3E18461295 9595E09C351E3C78B0F68103BC74E8408FAAEBE7B73EBCB5EDE12D5B25102093 CE201008824A0AA2D1C92C13EED17BF5BEF9CD6F7C229FCB7CEDD45B6F174647 26C08580DFE7472A950221404D4D95EDBAE291070E40089EFED4939FF6AE5CB9 4AA612052514D95C06E1AA305CC7C15C72CE63E69DD3BFEB7E9531761610B4AA 3A0CC65CF87DFEF9B6A2A1A12EA069CAA71F14000120B7B7B7EB103C1E9D8ABA 840094500801E47239842B4388CF24204BF2ED728F7FEFED379165E507CB972F 95155502671CB22243D554188681503804D7658F00D0CA299E7C1075800290CA B2D2E8E8A8D477E1CAE705C8D9DA9ADA406D6D1DF2F92C0821F0FB03B8FEDE7B 762E9FFB39001D0003E0960F9614800C821ADDA3CB9CF3BB775A08F883300C03 9AEA018028004F59F7AEBE0B80DF8F074879F14A79AA00B4C3870F272727A3DD BDC77F59304D1373C924828120F2F93C868787D87474EA4C59765EA7FC5D9E9D 99FBFEB5AB37F217CE5D2CCC2593E09C83CA14F1C40C060606AD6432F94A595E 2D1B4DFE7DDE90DE07C05D0FD085F3FCB90B835BB76E69BC71EB46576226614A 9244CEF79DB70C23F5BD7F78E9BBAF952DC6CBD69F37D83BEF9CE99F9818FF51 5D5D5D3A39975E3D31314526C6A2C865F3C9542AF3C6E9D3277F343E3E9E5FA0 BF70DED73F34BF1142F74CB266CD1AFF23BB766C095586FE3C9F2D5C3870E0A5 D717B8FFB7436881BECFE7939F7AEAA9EDA3A3D1D123475E8B2E58287BBF2144 FEC04D7CAF27EED517F7588CDDE301B20080CE5F16FDCF058C58F00EF63BF4FF 7F7CE4C67F0326A2B675DDA7D6BA0000000049454E44AE426082 } end end ����������������������������doublecmd-0.7.1/plugins/wfx/samba/lib/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�016654� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wfx/samba/COPYING.GPL.txt���������������������������������������������������0000644�0001750�0000144�00000043254�12504341721�020366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 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. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wfx/samba/COPYING.LESSER.txt������������������������������������������������0000644�0001750�0000144�00000063642�12504341721�020744� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ����������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/build.bat�������������������������������������������������������������������0000644�0001750�0000144�00000001401�12660674103�015766� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem Build all plugins rem Do not execute this script directly. rem This script is called from ..\build.bat. rem CD to plugins directory pushd plugins rem WCX plugins lazbuild wcx\deb\src\deb.lpi %DC_ARCH% lazbuild wcx\rpm\src\rpm.lpi %DC_ARCH% lazbuild wcx\sevenzip\src\sevenzipwcx.lpi %DC_ARCH% lazbuild wcx\unrar\src\unrar.lpi %DC_ARCH% lazbuild wcx\zip\src\zip.lpi %DC_ARCH% rem WDX plugins lazbuild wdx\rpm_wdx\src\rpm_wdx.lpi %DC_ARCH% lazbuild wdx\deb_wdx\src\deb_wdx.lpi %DC_ARCH% lazbuild wdx\svn_wdx\src\svn_wdx.lpi %DC_ARCH% lazbuild wdx\xpi_wdx\src\xpi_wdx.lpi %DC_ARCH% rem WFX plugins lazbuild wfx\ftp\src\ftp.lpi %DC_ARCH% rem Return from plugins directory popd ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�015031� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/�������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017135� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/src/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017724� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/src/fpc-extra.cfg��������������������������������������������0000644�0001750�0000144�00000000157�11673054716�022272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/src/qt4.pas��������������������������������������������������0000644�0001750�0000144�00005002047�12650004434�021126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//****************************************************************************** // Copyright (c) 2005-2011 by Jan Van hijfte // // See the included file COPYING.TXT for details about the copyright. // // 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. //****************************************************************************** unit qt4; { Version : 2.5 } {$mode objfpc}{$H+} interface uses Types; {$MINENUMSIZE 4} const QT_VERSION = 4 shl 16 + 5 shl 8 + 3; {$IFDEF MSWINDOWS} Qt4PasLib = 'Qt4Pas5.dll'; {$ENDIF} {$IFDEF HAIKU} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} // Set qtopia yourself if using QTOPIA with QVFB on i386 // ppc386 -dQTOPIA //{$IFDEF CPUARM} // {$DEFINE QTOPIA} //{$ENDIF} {$IFDEF QTOPIA} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} {$IFNDEF QTOPIA} {$IF DEFINED(LINUX) or DEFINED(FREEBSD) or DEFINED(NETBSD)} {$DEFINE BINUX} Qt4PasLib = 'libQt4Pas.so.5'; {$ENDIF} {$ENDIF} {$IFDEF DARWIN} Qt4PasLib = ''; {$LINKFRAMEWORK Qt4Pas} {$ENDIF} type PLong = ^Long; {$if defined(CPU64) and not defined(WIN64)} Long = Int64; {$else} Long = LongInt; {$endif} QHookH = TMethod; PQSizePolicy = ^TQSizePolicy; TQSizePolicy = packed record Data: Word; end; PQColor = ^TQColor; TQColor = packed record ColorSpec : LongInt; Alpha : word; r,g,b : word; Pad : word; end; QtHandle = integer; PQReal = ^QReal; {$ifdef CPUARM} QReal = single; {$else} QReal = double; {$endif} PQRgb = ^QRgb; QRgb = longword; PPtrIntArray = ^TPtrIntArray; TPtrIntArray = array of PtrInt; PQRealArray = ^TQRealArray; TQRealArray = array of QReal; const NilMethod : TMethod = (Code: nil; Data: nil); type PQtPoint = ^TQtPoint; {$IFDEF DARWIN} TQtPoint = packed record y : LongInt; x : LongInt; end; {$ELSE} TQtPoint = packed record x : LongInt; y : LongInt; end; {$ENDIF} PQtPointF = ^TQtPointF; TQtPointF = packed record x : QReal; y : QReal; end; {$IFDEF DARWIN} EventHandlerRef = ^LongInt; EventRef = ^LongInt; RgnHandle = ^LongInt; MenuHandle = ^LongInt; MenuRef = MenuHandle; EventHandlerCallRef = ^LongInt; CGImageRef = Pointer; {$ENDIF} {$IFDEF MSWINDOWS} { Message structure } PMsg = ^tagMSG; tagMSG = packed record hwnd: LongWord; message: Cardinal; wParam: Longint; lParam: Longint; time: DWORD; pt: TPoint; end; // Extra Q to avoid name clash with other Pascal Units WINHANDLE = System.THandle; QHCURSOR = type WINHANDLE; QHPALETTE = type WINHANDLE; QHFONT = type WINHANDLE; QHDC = type WINHANDLE; QHBITMAP = type WINHANDLE; QHBRUSH = type WINHANDLE; QHPEN = type WINHANDLE; QHRGN = type WINHANDLE; QHICON = type WINHANDLE; {$ENDIF} {$IFDEF WIN32} Q_PID = type pointer; {$ELSE} Q_PID = type int64; {$ENDIF} QAbstractFileEngineH = class(TObject) end; QAuthenticatorH = class(TObject) end; QBitArrayH = class(TObject) end; QBrushH = class(TObject) end; QByteArrayH = class(TObject) end; QCharH = class(TObject) end; QColorH = class(TObject) end; QCursorH = class(TObject) end; QDataStreamH = class(TObject) end; QDateH = class(TObject) end; QDateTimeH = class(TObject) end; QDecorationH = class(TObject) end; QDesktopServicesH = class(TObject) end; QDirH = class(TObject) end; QEventH = class(TObject) end; QLCLMessageEventH = class(QEventH) end; QActionEventH = class(QEventH) end; QChildEventH = class(QEventH) end; QCloseEventH = class(QEventH) end; QDragLeaveEventH = class(QEventH) end; QDropEventH = class(QEventH) end; QDragMoveEventH = class(QDropEventH) end; QDragEnterEventH = class(QDragMoveEventH) end; QDynamicPropertyChangeEventH = class(QEventH) end; QFileOpenEventH = class(QEventH) end; QFocusEventH = class(QEventH) end; QHelpEventH = class(QEventH) end; QHideEventH = class(QEventH) end; QHoverEventH = class(QEventH) end; QIconDragEventH = class(QEventH) end; QInputEventH = class(QEventH) end; QContextMenuEventH = class(QInputEventH) end; QKeyEventH = class(QInputEventH) end; QMouseEventH = class(QInputEventH) end; QTabletEventH = class(QInputEventH) end; QWheelEventH = class(QInputEventH) end; QInputMethodEventH = class(QEventH) end; QMoveEventH = class(QEventH) end; QPaintEventH = class(QEventH) end; QResizeEventH = class(QEventH) end; QShortcutEventH = class(QEventH) end; QShowEventH = class(QEventH) end; QStatusTipEventH = class(QEventH) end; QTimerEventH = class(QEventH) end; QWhatsThisClickedEventH = class(QEventH) end; QWindowStateChangeEventH = class(QEventH) end; QFileIconProviderH = class(TObject) end; QFileInfoH = class(TObject) end; QFlagH = class(TObject) end; QFlagsH = class(TObject) end; QFontH = class(TObject) end; QFontDatabaseH = class(TObject) end; QFontInfoH = class(TObject) end; QFontMetricsH = class(TObject) end; QFontMetricsFH = class(TObject) end; QGradientH = class(TObject) end; QConicalGradientH = class(QGradientH) end; QLinearGradientH = class(QGradientH) end; QRadialGradientH = class(QGradientH) end; QGraphicsItemH = class(TObject) end; QAbstractGraphicsShapeItemH = class(QGraphicsItemH) end; QGraphicsEllipseItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsPathItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsPolygonItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsRectItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsSimpleTextItemH = class(QAbstractGraphicsShapeItemH) end; QGraphicsItemGroupH = class(QGraphicsItemH) end; QGraphicsLineItemH = class(QGraphicsItemH) end; QGraphicsObjectH = class(QGraphicsItemH) end; QGraphicsTextItemH = class(QGraphicsObjectH) end; QGraphicsWidgetH = class(QGraphicsObjectH) end; QGraphicsProxyWidgetH = class(QGraphicsWidgetH) end; QGraphicsPixmapItemH = class(QGraphicsItemH) end; QGraphicsLayoutItemH = class(TObject) end; QHostAddressH = class(TObject) end; QIconH = class(TObject) end; QIconEngineH = class(TObject) end; QIconEngineV2H = class(QIconEngineH) end; QImageIOHandlerH = class(TObject) end; QImageReaderH = class(TObject) end; QImageWriterH = class(TObject) end; QItemEditorCreatorBaseH = class(TObject) end; QItemEditorFactoryH = class(TObject) end; QItemSelectionRangeH = class(TObject) end; QKeySequenceH = class(TObject) end; QLatin1StringH = class(TObject) end; QLayoutItemH = class(TObject) end; QLayoutH = class(QLayoutItemH) end; QBoxLayoutH = class(QLayoutH) end; QHBoxLayoutH = class(QBoxLayoutH) end; QVBoxLayoutH = class(QBoxLayoutH) end; QGridLayoutH = class(QLayoutH) end; QStackedLayoutH = class(QLayoutH) end; QSpacerItemH = class(QLayoutItemH) end; QWidgetItemH = class(QLayoutItemH) end; QLineH = class(TObject) end; QLineFH = class(TObject) end; QListH = class(TObject) end; QStringListH = class(QListH) end; QListWidgetItemH = class(TObject) end; QLocaleH = class(TObject) end; QMetaClassInfoH = class(TObject) end; QMetaEnumH = class(TObject) end; QMetaMethodH = class(TObject) end; QMetaObjectH = class(TObject) end; QMetaPropertyH = class(TObject) end; QModelIndexH = class(TObject) end; QNetworkCookieH = class(TObject) end; QNetworkProxyH = class(TObject) end; QNetworkProxyFactoryH = class(TObject) end; QNetworkProxyQueryH = class(TObject) end; QNetworkRequestH = class(TObject) end; QObjectH = class(TObject) end; QAbstractEventDispatcherH = class(QObjectH) end; QAbstractItemDelegateH = class(QObjectH) end; QItemDelegateH = class(QAbstractItemDelegateH) end; QLCLItemDelegateH = class(QItemDelegateH) end; QStyledItemDelegateH = class(QAbstractItemDelegateH) end; QAbstractItemModelH = class(QObjectH) end; QAbstractListModelH = class(QAbstractItemModelH) end; QAbstractProxyModelH = class(QAbstractItemModelH) end; QAbstractTableModelH = class(QAbstractItemModelH) end; QStandardItemModelH = class(QAbstractItemModelH) end; QAbstractNetworkCacheH = class(QObjectH) end; QAbstractTextDocumentLayoutH = class(QObjectH) end; QPlainTextDocumentLayoutH = class(QAbstractTextDocumentLayoutH) end; QActionH = class(QObjectH) end; QActionGroupH = class(QObjectH) end; QButtonGroupH = class(QObjectH) end; QClipboardH = class(QObjectH) end; QCompleterH = class(QObjectH) end; QCoreApplicationH = class(QObjectH) end; QApplicationH = class(QCoreApplicationH) end; QDragH = class(QObjectH) end; QEventLoopH = class(QObjectH) end; QFileSystemWatcherH = class(QObjectH) end; QGraphicsSceneH = class(QObjectH) end; QIODeviceH = class(QObjectH) end; QAbstractSocketH = class(QIODeviceH) end; QTcpSocketH = class(QAbstractSocketH) end; QSslSocketH = class(QTcpSocketH) end; QUdpSocketH = class(QAbstractSocketH) end; QFileH = class(QIODeviceH) end; QNetworkReplyH = class(QIODeviceH) end; QProcessH = class(QIODeviceH) end; QInputContextH = class(QObjectH) end; QItemSelectionModelH = class(QObjectH) end; QMimeDataH = class(QObjectH) end; QMovieH = class(QObjectH) end; QNetworkAccessManagerH = class(QObjectH) end; QNetworkCookieJarH = class(QObjectH) end; QLCLNetworkCookieJarH = class(QNetworkCookieJarH) end; QSessionManagerH = class(QObjectH) end; QShortcutH = class(QObjectH) end; QSocketNotifierH = class(QObjectH) end; QStyleH = class(QObjectH) end; QSystemTrayIconH = class(QObjectH) end; QTcpServerH = class(QObjectH) end; QTextDocumentH = class(QObjectH) end; QTextObjectH = class(QObjectH) end; QTextBlockGroupH = class(QTextObjectH) end; QTextListH = class(QTextBlockGroupH) end; QTextFrameH = class(QTextObjectH) end; QTextTableH = class(QTextFrameH) end; QThreadH = class(QObjectH) end; QLCLThreadH = class(QThreadH) end; QTimerH = class(QObjectH) end; QTranslatorH = class(QObjectH) end; QUndoStackH = class(QObjectH) end; QValidatorH = class(QObjectH) end; QDoubleValidatorH = class(QValidatorH) end; QIntValidatorH = class(QValidatorH) end; QRegExpValidatorH = class(QValidatorH) end; QWebFrameH = class(QObjectH) end; QWebHistoryInterfaceH = class(QObjectH) end; QWebPageH = class(QObjectH) end; QLCLWebPageH = class(QWebPageH) end; QWebPluginFactoryH = class(QObjectH) end; QWidgetH = class(QObjectH) end; QAbstractButtonH = class(QWidgetH) end; QCheckBoxH = class(QAbstractButtonH) end; QPushButtonH = class(QAbstractButtonH) end; QRadioButtonH = class(QAbstractButtonH) end; QToolButtonH = class(QAbstractButtonH) end; QAbstractSliderH = class(QWidgetH) end; QScrollBarH = class(QAbstractSliderH) end; QSliderH = class(QAbstractSliderH) end; QAbstractSpinBoxH = class(QWidgetH) end; QLCLAbstractSpinBoxH = class(QAbstractSpinBoxH) end; QDoubleSpinBoxH = class(QAbstractSpinBoxH) end; QSpinBoxH = class(QAbstractSpinBoxH) end; QCalendarWidgetH = class(QWidgetH) end; QComboBoxH = class(QWidgetH) end; QDesktopWidgetH = class(QWidgetH) end; QDialogH = class(QWidgetH) end; QAbstractPrintDialogH = class(QDialogH) end; QPrintDialogH = class(QAbstractPrintDialogH) end; QColorDialogH = class(QDialogH) end; QFileDialogH = class(QDialogH) end; QFontDialogH = class(QDialogH) end; QInputDialogH = class(QDialogH) end; QMessageBoxH = class(QDialogH) end; QPageSetupDialogH = class(QDialogH) end; QPrintPreviewDialogH = class(QDialogH) end; QProgressDialogH = class(QDialogH) end; QDockWidgetH = class(QWidgetH) end; QFrameH = class(QWidgetH) end; QAbstractScrollAreaH = class(QFrameH) end; QLCLAbstractScrollAreaH = class(QAbstractScrollAreaH) end; QAbstractItemViewH = class(QAbstractScrollAreaH) end; QHeaderViewH = class(QAbstractItemViewH) end; QListViewH = class(QAbstractItemViewH) end; QListWidgetH = class(QListViewH) end; QTableViewH = class(QAbstractItemViewH) end; QTableWidgetH = class(QTableViewH) end; QTreeViewH = class(QAbstractItemViewH) end; QTreeWidgetH = class(QTreeViewH) end; QGraphicsViewH = class(QAbstractScrollAreaH) end; QMdiAreaH = class(QAbstractScrollAreaH) end; QPlainTextEditH = class(QAbstractScrollAreaH) end; QScrollAreaH = class(QAbstractScrollAreaH) end; QTextEditH = class(QAbstractScrollAreaH) end; QTextBrowserH = class(QTextEditH) end; QLCDNumberH = class(QFrameH) end; QLabelH = class(QFrameH) end; QSplitterH = class(QFrameH) end; QStackedWidgetH = class(QFrameH) end; QToolBoxH = class(QFrameH) end; QGroupBoxH = class(QWidgetH) end; QLineEditH = class(QWidgetH) end; QMainWindowH = class(QWidgetH) end; QMdiSubWindowH = class(QWidgetH) end; QMenuH = class(QWidgetH) end; QMenuBarH = class(QWidgetH) end; QPrintPreviewWidgetH = class(QWidgetH) end; QProgressBarH = class(QWidgetH) end; QRubberBandH = class(QWidgetH) end; QSizeGripH = class(QWidgetH) end; QSplitterHandleH = class(QWidgetH) end; QStatusBarH = class(QWidgetH) end; QTabBarH = class(QWidgetH) end; QTabWidgetH = class(QWidgetH) end; QLCLTabWidgetH = class(QTabWidgetH) end; QToolBarH = class(QWidgetH) end; QWebViewH = class(QWidgetH) end; QLCLWebViewH = class(QWebViewH) end; QPaintDeviceH = class(TObject) end; QImageH = class(QPaintDeviceH) end; QPictureH = class(QPaintDeviceH) end; QPixmapH = class(QPaintDeviceH) end; QBitmapH = class(QPixmapH) end; QPrinterH = class(QPaintDeviceH) end; QPaintEngineH = class(TObject) end; QPainterH = class(TObject) end; QPainterPathH = class(TObject) end; QPainterPathStrokerH = class(TObject) end; QPaletteH = class(TObject) end; QPenH = class(TObject) end; QPersistentModelIndexH = class(TObject) end; QPointH = class(TObject) end; QPointFH = class(TObject) end; QPrintEngineH = class(TObject) end; QPrinterInfoH = class(TObject) end; QRectH = class(TObject) end; QRectFH = class(TObject) end; QRegExpH = class(TObject) end; QRegionH = class(TObject) end; QSizeH = class(TObject) end; QSizeFH = class(TObject) end; QSizePolicyH = class(TObject) end; QSslCertificateH = class(TObject) end; QSslCipherH = class(TObject) end; QSslConfigurationH = class(TObject) end; QSslErrorH = class(TObject) end; QSslKeyH = class(TObject) end; QStandardItemH = class(TObject) end; QStringH = class(TObject) end; QStyleFactoryH = class(TObject) end; QStyleHintReturnH = class(TObject) end; QStyleHintReturnMaskH = class(QStyleHintReturnH) end; QStyleHintReturnVariantH = class(QStyleHintReturnH) end; QStyleOptionH = class(TObject) end; QStyleOptionButtonH = class(QStyleOptionH) end; QStyleOptionComplexH = class(QStyleOptionH) end; QStyleOptionComboBoxH = class(QStyleOptionComplexH) end; QStyleOptionGroupBoxH = class(QStyleOptionComplexH) end; QStyleOptionQ3ListViewH = class(QStyleOptionComplexH) end; QStyleOptionSizeGripH = class(QStyleOptionComplexH) end; QStyleOptionSliderH = class(QStyleOptionComplexH) end; QStyleOptionSpinBoxH = class(QStyleOptionComplexH) end; QStyleOptionTitleBarH = class(QStyleOptionComplexH) end; QStyleOptionToolButtonH = class(QStyleOptionComplexH) end; QStyleOptionDockWidgetH = class(QStyleOptionH) end; QStyleOptionFocusRectH = class(QStyleOptionH) end; QStyleOptionFrameH = class(QStyleOptionH) end; QStyleOptionFrameV2H = class(QStyleOptionFrameH) end; QStyleOptionFrameV3H = class(QStyleOptionFrameV2H) end; QStyleOptionGraphicsItemH = class(QStyleOptionH) end; QStyleOptionHeaderH = class(QStyleOptionH) end; QStyleOptionMenuItemH = class(QStyleOptionH) end; QStyleOptionProgressBarH = class(QStyleOptionH) end; QStyleOptionProgressBarV2H = class(QStyleOptionProgressBarH) end; QStyleOptionQ3DockWindowH = class(QStyleOptionH) end; QStyleOptionQ3ListViewItemH = class(QStyleOptionH) end; QStyleOptionRubberBandH = class(QStyleOptionH) end; QStyleOptionTabH = class(QStyleOptionH) end; QStyleOptionTabV2H = class(QStyleOptionTabH) end; QStyleOptionTabV3H = class(QStyleOptionTabV2H) end; QStyleOptionTabBarBaseH = class(QStyleOptionH) end; QStyleOptionTabBarBaseV2H = class(QStyleOptionTabBarBaseH) end; QStyleOptionTabWidgetFrameH = class(QStyleOptionH) end; QStyleOptionToolBarH = class(QStyleOptionH) end; QStyleOptionToolBoxH = class(QStyleOptionH) end; QStyleOptionToolBoxV2H = class(QStyleOptionToolBoxH) end; QStyleOptionViewItemH = class(QStyleOptionH) end; QStyleOptionViewItemV2H = class(QStyleOptionViewItemH) end; QStyleOptionViewItemV3H = class(QStyleOptionViewItemV2H) end; QStyleOptionViewItemV4H = class(QStyleOptionViewItemV3H) end; QSysInfoH = class(TObject) end; QSystemLocaleH = class(TObject) end; QTableWidgetItemH = class(TObject) end; QTableWidgetSelectionRangeH = class(TObject) end; QTextBlockH = class(TObject) end; QTextBlockUserDataH = class(TObject) end; QTextCursorH = class(TObject) end; QTextDocumentFragmentH = class(TObject) end; QTextFormatH = class(TObject) end; QTextBlockFormatH = class(QTextFormatH) end; QTextCharFormatH = class(QTextFormatH) end; QTextImageFormatH = class(QTextCharFormatH) end; QTextFrameFormatH = class(QTextFormatH) end; QTextTableFormatH = class(QTextFrameFormatH) end; QTextFragmentH = class(TObject) end; QTextInlineObjectH = class(TObject) end; QTextLayoutH = class(TObject) end; QTextLineH = class(TObject) end; QTextObjectInterfaceH = class(TObject) end; QTextOptionH = class(TObject) end; QTimeH = class(TObject) end; QToolTipH = class(TObject) end; QTransformH = class(TObject) end; QTreeWidgetItemH = class(TObject) end; QUrlH = class(TObject) end; QVariantH = class(TObject) end; QVectorH = class(TObject) end; QPolygonH = class(QVectorH) end; QPolygonFH = class(QVectorH) end; QWSEventH = class(TObject) end; QWebDatabaseH = class(TObject) end; QWebHistoryH = class(TObject) end; QWebHistoryItemH = class(TObject) end; QWebHitTestResultH = class(TObject) end; QWebSecurityOriginH = class(TObject) end; QWebSettingsH = class(TObject) end; QWhatsThisH = class(TObject) end; QX11InfoH = class(TObject) end; QMatrixH = class(TObject) end; QPainterPathElementH = class(TObject) end; QObject_hookH = class(TObject) end; QCoreApplication_hookH = class(QObject_hookH) end; QTimer_hookH = class(QObject_hookH) end; QModelIndex_hookH = class(QObject_hookH) end; QPersistentModelIndex_hookH = class(QObject_hookH) end; QAbstractItemModel_hookH = class(QObject_hookH) end; QAbstractTableModel_hookH = class(QAbstractItemModel_hookH) end; QAbstractListModel_hookH = class(QAbstractItemModel_hookH) end; QSocketNotifier_hookH = class(QObject_hookH) end; QThread_hookH = class(QObject_hookH) end; QIODevice_hookH = class(QObject_hookH) end; QProcess_hookH = class(QIODevice_hookH) end; QFileSystemWatcher_hookH = class(QObject_hookH) end; QApplication_hookH = class(QCoreApplication_hookH) end; QWidget_hookH = class(QObject_hookH) end; QLayout_hookH = class(QObject_hookH) end; QStackedLayout_hookH = class(QLayout_hookH) end; QAction_hookH = class(QObject_hookH) end; QActionGroup_hookH = class(QObject_hookH) end; QClipboard_hookH = class(QObject_hookH) end; QDesktopWidget_hookH = class(QWidget_hookH) end; QDrag_hookH = class(QObject_hookH) end; QShortcut_hookH = class(QObject_hookH) end; QAbstractTextDocumentLayout_hookH = class(QObject_hookH) end; QTextObjectInterface_hookH = class(QObject_hookH) end; QFrame_hookH = class(QWidget_hookH) end; QStackedWidget_hookH = class(QFrame_hookH) end; QAbstractScrollArea_hookH = class(QFrame_hookH) end; QAbstractSlider_hookH = class(QWidget_hookH) end; QScrollBar_hookH = class(QAbstractSlider_hookH) end; QMenu_hookH = class(QWidget_hookH) end; QMenuBar_hookH = class(QWidget_hookH) end; QButtonGroup_hookH = class(QObject_hookH) end; QAbstractButton_hookH = class(QWidget_hookH) end; QPushButton_hookH = class(QAbstractButton_hookH) end; QLineEdit_hookH = class(QWidget_hookH) end; QPlainTextEdit_hookH = class(QAbstractScrollArea_hookH) end; QPlainTextDocumentLayout_hookH = class(QAbstractTextDocumentLayout_hookH) end; QTextEdit_hookH = class(QAbstractScrollArea_hookH) end; QTabWidget_hookH = class(QWidget_hookH) end; QMainWindow_hookH = class(QWidget_hookH) end; QToolBar_hookH = class(QWidget_hookH) end; QLCDNumber_hookH = class(QFrame_hookH) end; QAbstractSpinBox_hookH = class(QWidget_hookH) end; QSpinBox_hookH = class(QAbstractSpinBox_hookH) end; QDoubleSpinBox_hookH = class(QAbstractSpinBox_hookH) end; QSplitter_hookH = class(QFrame_hookH) end; QSplitterHandle_hookH = class(QWidget_hookH) end; QComboBox_hookH = class(QWidget_hookH) end; QCheckBox_hookH = class(QAbstractButton_hookH) end; QSlider_hookH = class(QAbstractSlider_hookH) end; QTextBrowser_hookH = class(QTextEdit_hookH) end; QLabel_hookH = class(QFrame_hookH) end; QGroupBox_hookH = class(QWidget_hookH) end; QDockWidget_hookH = class(QWidget_hookH) end; QTabBar_hookH = class(QWidget_hookH) end; QProgressBar_hookH = class(QWidget_hookH) end; QStatusBar_hookH = class(QWidget_hookH) end; QToolBox_hookH = class(QFrame_hookH) end; QToolButton_hookH = class(QAbstractButton_hookH) end; QMdiArea_hookH = class(QAbstractScrollArea_hookH) end; QMdiSubWindow_hookH = class(QWidget_hookH) end; QCalendarWidget_hookH = class(QWidget_hookH) end; QPrintPreviewWidget_hookH = class(QWidget_hookH) end; QAbstractItemView_hookH = class(QAbstractScrollArea_hookH) end; QListView_hookH = class(QAbstractItemView_hookH) end; QItemSelectionRange_hookH = class(QObject_hookH) end; QItemSelectionModel_hookH = class(QObject_hookH) end; QListWidgetItem_hookH = class(QObject_hookH) end; QListWidget_hookH = class(QListView_hookH) end; QTreeView_hookH = class(QAbstractItemView_hookH) end; QTreeWidgetItem_hookH = class(QObject_hookH) end; QTreeWidget_hookH = class(QTreeView_hookH) end; QHeaderView_hookH = class(QAbstractItemView_hookH) end; QStandardItem_hookH = class(QObject_hookH) end; QStandardItemModel_hookH = class(QAbstractItemModel_hookH) end; QAbstractItemDelegate_hookH = class(QObject_hookH) end; QTableView_hookH = class(QAbstractItemView_hookH) end; QTableWidgetSelectionRange_hookH = class(QObject_hookH) end; QTableWidgetItem_hookH = class(QObject_hookH) end; QTableWidget_hookH = class(QTableView_hookH) end; QDialog_hookH = class(QWidget_hookH) end; QFileDialog_hookH = class(QDialog_hookH) end; QProgressDialog_hookH = class(QDialog_hookH) end; QAbstractPrintDialog_hookH = class(QDialog_hookH) end; QPrintDialog_hookH = class(QAbstractPrintDialog_hookH) end; QPrintPreviewDialog_hookH = class(QDialog_hookH) end; QSystemTrayIcon_hookH = class(QObject_hookH) end; QGraphicsScene_hookH = class(QObject_hookH) end; QAbstractSocket_hookH = class(QIODevice_hookH) end; QUdpSocket_hookH = class(QAbstractSocket_hookH) end; QTcpSocket_hookH = class(QAbstractSocket_hookH) end; QTcpServer_hookH = class(QObject_hookH) end; QNetworkAccessManager_hookH = class(QObject_hookH) end; QNetworkReply_hookH = class(QIODevice_hookH) end; QWebHitTestResult_hookH = class(QObject_hookH) end; QWebFrame_hookH = class(QObject_hookH) end; QWebSecurityOrigin_hookH = class(QObject_hookH) end; QWebDatabase_hookH = class(QObject_hookH) end; QWebHistoryItem_hookH = class(QObject_hookH) end; QWebHistory_hookH = class(QObject_hookH) end; QWebHistoryInterface_hookH = class(QObject_hookH) end; QWebPage_hookH = class(QObject_hookH) end; QWebSettings_hookH = class(QObject_hookH) end; QWebView_hookH = class(QWidget_hookH) end; QCoreApplicationEventFilter = function(Msg:PChar;Res:PLong):boolean cdecl; QAbstractEventDispatcherEventFilter = function(Msg:PChar):boolean cdecl; QLCLItemDelegate_sizeHint_Override = procedure (option: QStyleOptionViewItemH; index: QModelIndexH; Size: PSize) of object cdecl; QLCLItemDelegate_paint_Override = procedure (painter : QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_createEditor_Override = procedure (parent : QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH; out editor: QWidgetH) of object cdecl; QLCLItemDelegate_setEditorData_Override = procedure (editor : QWidgetH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_setModelData_Override = procedure (editor : QWidgetH; model: QAbstractItemModelH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_updateEditorGeometry_Override = procedure (editor : QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH) of object cdecl; QLCLItemDelegate_editorEvent_Override = procedure (event : QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH; retval: PBoolean) of object cdecl; QLCLAbstractScrollArea_viewportEvent_Override = procedure (event: QEventH; retval: PBoolean) of object cdecl; QLCLWebPage_userAgentForUrl_Override = procedure(url : QUrlH;userAgent:PWideString) of object; cdecl; QLCLWebView_createWindow_Override = function (WebWindowType : integer):QWebViewH of object cdecl; QLCLThread_run_Override = procedure of object cdecl; type QObjectEventFilter = function (Sender:QObjectH; Event: QEventH):boolean of object cdecl; QObject_destroyed_Event = procedure of object; cdecl; function QtPoint(X,Y:integer): TQtPoint; function QtPointF(X,Y:QReal): TQtPointF; function QObject_hook_create(handle : QObjectH) : QObject_hookH; cdecl; external Qt4PasLib name 'QObject_hook_create'; procedure QObject_hook_destroy(handle : QObject_hookH ); cdecl; external Qt4PasLib name 'QObject_hook_destroy'; procedure QObject_hook_hook_events(handle : QObject_hookH; hook : QObjectEventFilter); cdecl; external Qt4PasLib name 'QObject_hook_hook_events'; procedure QObject_hook_hook_destroyed(handle : QObject_hookH; hook : QObject_destroyed_Event); cdecl; external Qt4PasLib name 'QObject_hook_hook_destroyed'; type QtGlobalColor = ( // Qt::GlobalColor (1) Qtcolor0, Qtcolor1, Qtblack, Qtwhite, QtdarkGray, Qtgray, QtlightGray, Qtred, Qtgreen, Qtblue, Qtcyan, Qtmagenta, Qtyellow, QtdarkRed, QtdarkGreen, QtdarkBlue, QtdarkCyan, QtdarkMagenta, QtdarkYellow, Qttransparent ); QtSortOrder = ( // Qt::SortOrder (1) QtAscendingOrder, QtDescendingOrder ); QtTextElideMode = ( // Qt::TextElideMode (1) QtElideLeft, QtElideRight, QtElideMiddle, QtElideNone ); QtBGMode = ( // Qt::BGMode (1) QtTransparentMode, QtOpaqueMode ); QtArrowType = ( // Qt::ArrowType (1) QtNoArrow, QtUpArrow, QtDownArrow, QtLeftArrow, QtRightArrow ); QtPenStyle = ( // Qt::PenStyle (1) QtNoPen, QtSolidLine, QtDashLine, QtDotLine, QtDashDotLine, QtDashDotDotLine, QtCustomDashLine ); QtSizeMode = ( // Qt::SizeMode (1) QtAbsoluteSize, QtRelativeSize ); QtUIEffect = ( // Qt::UIEffect (1) QtUI_General, QtUI_AnimateMenu, QtUI_FadeMenu, QtUI_AnimateCombo, QtUI_AnimateTooltip, QtUI_FadeTooltip, QtUI_AnimateToolBox ); QtTextFormat = ( // Qt::TextFormat (1) QtPlainText, QtRichText, QtAutoText, QtLogText ); QtAspectRatioMode = ( // Qt::AspectRatioMode (1) QtIgnoreAspectRatio, QtKeepAspectRatio, QtKeepAspectRatioByExpanding ); QtAnchorAttribute = ( // Qt::AnchorAttribute (1) QtAnchorName, QtAnchorHref ); QtTimeSpec = ( // Qt::TimeSpec (1) QtLocalTime, QtUTC, QtOffsetFromUTC ); QtScrollBarPolicy = ( // Qt::ScrollBarPolicy (1) QtScrollBarAsNeeded, QtScrollBarAlwaysOff, QtScrollBarAlwaysOn ); QtCaseSensitivity = ( // Qt::CaseSensitivity (1) QtCaseInsensitive, QtCaseSensitive ); QtConnectionType = ( // Qt::ConnectionType (1) QtAutoConnection, QtDirectConnection, QtQueuedConnection, QtAutoCompatConnection, QtBlockingQueuedConnection ); QtShortcutContext = ( // Qt::ShortcutContext (1) QtWidgetShortcut, QtWindowShortcut, QtApplicationShortcut, QtWidgetWithChildrenShortcut ); QtFillRule = ( // Qt::FillRule (1) QtOddEvenFill, QtWindingFill ); QtMaskMode = ( // Qt::MaskMode (1) QtMaskInColor, QtMaskOutColor ); QtClipOperation = ( // Qt::ClipOperation (1) QtNoClip, QtReplaceClip, QtIntersectClip, QtUniteClip ); QtTransformationMode = ( // Qt::TransformationMode (1) QtFastTransformation, QtSmoothTransformation ); QtAxis = ( // Qt::Axis (1) QtXAxis, QtYAxis, QtZAxis ); QtFocusReason = ( // Qt::FocusReason (1) QtMouseFocusReason, QtTabFocusReason, QtBacktabFocusReason, QtActiveWindowFocusReason, QtPopupFocusReason, QtShortcutFocusReason, QtMenuBarFocusReason, QtOtherFocusReason, QtNoFocusReason ); QtContextMenuPolicy = ( // Qt::ContextMenuPolicy (1) QtNoContextMenu, QtDefaultContextMenu, QtActionsContextMenu, QtCustomContextMenu, QtPreventContextMenu ); QtInputMethodQuery = ( // Qt::InputMethodQuery (1) QtImMicroFocus, QtImFont, QtImCursorPosition, QtImSurroundingText, QtImCurrentSelection ); QtToolButtonStyle = ( // Qt::ToolButtonStyle (1) QtToolButtonIconOnly, QtToolButtonTextOnly, QtToolButtonTextBesideIcon, QtToolButtonTextUnderIcon ); QtLayoutDirection = ( // Qt::LayoutDirection (1) QtLeftToRight, QtRightToLeft, QtLayoutDirectionAuto); QtCheckState = ( // Qt::CheckState (1) QtUnchecked, QtPartiallyChecked, QtChecked ); QtWindowModality = ( // Qt::WindowModality (1) QtNonModal, QtWindowModal, QtApplicationModal ); QtSizeHint = ( // Qt::SizeHint (1) QtMinimumSize, QtPreferredSize, QtMaximumSize, QtMinimumDescent, QtNSizeHints ); QtWindowFrameSection = ( // Qt::WindowFrameSection (1) QtNoSection, QtLeftSection, QtTopLeftSection, QtTopSection, QtTopRightSection, QtRightSection, QtBottomRightSection, QtBottomSection, QtBottomLeftSection, QtTitleBarArea ); QtHitTestAccuracy = ( // Qt::HitTestAccuracy (1) QtHitTestAccuracy_dummy ); type QtKeyboardModifier = cardinal; // Qt::KeyboardModifier QtKeyboardModifiers = QtKeyboardModifier; //QFlags<> (3) const QtNoModifier = $00000000; QtShiftModifier = $02000000; QtControlModifier = $04000000; QtAltModifier = $08000000; QtMetaModifier = $10000000; QtKeypadModifier = $20000000; QtGroupSwitchModifier = $40000000; QtKeyboardModifierMask = $fe000000; type QtMouseButton = cardinal; // Qt::MouseButton QtMouseButtons = QtMouseButton; //QFlags<> (3) const QtNoButton = $00000000; QtLeftButton = $00000001; QtRightButton = $00000002; QtMidButton = $00000004; QtXButton1 = $00000008; QtXButton2 = $00000010; QtMouseButtonMask = $000000ff; type QtOrientation = cardinal; // Qt::Orientation QtOrientations = QtOrientation; //QFlags<> (3) const QtHorizontal = $1; QtVertical = $2; type QtWindowState = cardinal; // Qt::WindowState QtWindowStates = QtWindowState; //QFlags<> (3) const QtWindowNoState = $00000000; QtWindowMinimized = $00000001; QtWindowMaximized = $00000002; QtWindowFullScreen = $00000004; QtWindowActive = $00000008; type QtApplicationAttribute = ( //Qt::ApplicationAttribute (2) QtAA_ImmediateWidgetCreation = 0, QtAA_MSWindowsUseDirect3DByDefault = 1, QtAA_DontShowIconsInMenus = 2, QtAA_NativeWindows = 3, QtAA_DontCreateNativeWidgetSiblings = 4, QtAA_MacPluginApplication = 5, {$IFDEF DARWIN} QtAA_DontUseNativeMenuBar = 6, {$note QtAA_DontUseNativeMenuBar added for darwin and wince qt >=4.6 compat issue #20897} QtAA_MacDontSwapCtrlAndMeta = 7, {$note QtAA_MacDontSwapCtrlAndMeta added for darwin qt >=4.6 compat issue #20897} {$ENDIF} QtAA_AttributeCount ); type QtImageConversionFlag = cardinal; // Qt::ImageConversionFlag QtImageConversionFlags = QtImageConversionFlag; //QFlags<> (3) const QtColorMode_Mask = $00000003; QtAutoColor = $00000000; QtColorOnly = $00000003; QtMonoOnly = $00000002; QtAlphaDither_Mask = $0000000c; QtThresholdAlphaDither = $00000000; QtOrderedAlphaDither = $00000004; QtDiffuseAlphaDither = $00000008; QtNoAlpha = $0000000c; QtDither_Mask = $00000030; QtDiffuseDither = $00000000; QtOrderedDither = $00000010; QtThresholdDither = $00000020; QtDitherMode_Mask = $000000c0; QtAutoDither = $00000000; QtPreferDither = $00000040; QtAvoidDither = $00000080; QtNoOpaqueDetection = $00000100; type QtPenCapStyle = ( //Qt::PenCapStyle (2) QtFlatCap = $00, QtSquareCap = $10, QtRoundCap = $20, QtMPenCapStyle = $30 ); QtPenJoinStyle = ( //Qt::PenJoinStyle (2) QtMiterJoin = $00, QtBevelJoin = $40, QtRoundJoin = $80, QtSvgMiterJoin = $100, QtMPenJoinStyle = $1c0 ); QtBrushStyle = ( //Qt::BrushStyle (2) QtNoBrush, QtSolidPattern, QtDense1Pattern, QtDense2Pattern, QtDense3Pattern, QtDense4Pattern, QtDense5Pattern, QtDense6Pattern, QtDense7Pattern, QtHorPattern, QtVerPattern, QtCrossPattern, QtBDiagPattern, QtFDiagPattern, QtDiagCrossPattern, QtLinearGradientPattern, QtRadialGradientPattern, QtConicalGradientPattern, QtTexturePattern = 24 ); QtDockWidgetAreaSizes = ( //Qt::DockWidgetAreaSizes (2) QtNDockWidgetAreas = 4 ); QtToolBarAreaSizes = ( //Qt::ToolBarAreaSizes (2) QtNToolBarAreas = 4 ); QtDayOfWeek = ( //Qt::DayOfWeek (2) QtMonday = 1, QtTuesday = 2, QtWednesday = 3, QtThursday = 4, QtFriday = 5, QtSaturday = 6, QtSunday = 7 ); QtCorner = ( //Qt::Corner (2) QtTopLeftCorner = $00000, QtTopRightCorner = $00001, QtBottomLeftCorner = $00002, QtBottomRightCorner = $00003 ); QtItemSelectionMode = ( //Qt::ItemSelectionMode (2) QtContainsItemShape = $0, QtIntersectsItemShape = $1, QtContainsItemBoundingRect = $2, QtIntersectsItemBoundingRect = $3 ); type QtDropAction = cardinal; // Qt::DropAction QtDropActions = QtDropAction; //QFlags<> (3) const QtCopyAction = $1; QtMoveAction = $2; QtLinkAction = $4; QtActionMask = $ff; QtTargetMoveAction = $8002; QtIgnoreAction = $0; type QtItemDataRole = ( //Qt::ItemDataRole (2) QtDisplayRole = 0, QtDecorationRole = 1, QtEditRole = 2, QtToolTipRole = 3, QtStatusTipRole = 4, QtWhatsThisRole = 5, QtFontRole = 6, QtTextAlignmentRole = 7, QtBackgroundColorRole = 8, // QtBackgroundRole = 8 {duplicate}, QtForegroundRole = 9, // QtTextColorRole = 9 {duplicate}, QtCheckStateRole = 10, QtAccessibleTextRole = 11, QtAccessibleDescriptionRole = 12, QtSizeHintRole = 13, QtDisplayPropertyRole = 27, QtDecorationPropertyRole = 28, QtToolTipPropertyRole = 29, QtStatusTipPropertyRole = 30, QtWhatsThisPropertyRole = 31, QtUserRole = 32 ); type QtItemFlag = cardinal; // Qt::ItemFlag QtItemFlags = QtItemFlag; //QFlags<> (3) const QtNoItemFlags = 0; QtItemIsSelectable = 1; QtItemIsEditable = 2; QtItemIsDragEnabled = 4; QtItemIsDropEnabled = 8; QtItemIsUserCheckable = 16; QtItemIsEnabled = 32; QtItemIsTristate = 64; type QtMatchFlag = cardinal; // Qt::MatchFlag QtMatchFlags = QtMatchFlag; //QFlags<> (3) const QtMatchExactly = 0; QtMatchContains = 1; QtMatchStartsWith = 2; QtMatchEndsWith = 3; QtMatchRegExp = 4; QtMatchWildcard = 5; QtMatchFixedString = 8; QtMatchCaseSensitive = 16; QtMatchWrap = 32; QtMatchRecursive = 64; type QtEventPriority = ( //Qt::EventPriority (2) QtLowEventPriority = -1, QtNormalEventPriority = 0, QtHighEventPriority = 1 ); type QInternalRelayoutType = ( // QInternal::RelayoutType (1) QInternalRelayoutNormal, QInternalRelayoutDragging, QInternalRelayoutDropped ); QInternalCallback = ( // QInternal::Callback (1) QInternalConnectCallback, QInternalDisconnectCallback, QInternalAdoptCurrentThread, QInternalEventNotifyCallback, QInternalLastCallback ); QInternalInternalFunction = ( // QInternal::InternalFunction (1) QInternalCreateThreadForAdoption, QInternalRefAdoptedThread, QInternalDerefAdoptedThread, QInternalSetCurrentThreadToMainThread, QInternalSetQObjectSender, QInternalGetQObjectSender, QInternalResetQObjectSender, QInternalLastInternalFunction ); QInternalDockPosition = ( // QInternal::DockPosition (1) QInternalLeftDock, QInternalRightDock, QInternalTopDock, QInternalBottomDock, QInternalDockCount ); QInternalPaintDeviceFlags = ( //QInternal::PaintDeviceFlags (2) QInternalUnknownDevice = $00, QInternalWidget = $01, QInternalPixmap = $02, QInternalImage = $03, QInternalPrinter = $04, QInternalPicture = $05, QInternalPbuffer = $06, QInternalFramebufferObject = $07, QInternalCustomRaster = $08, QInternalMacQuartz = $09 ); type QtModifier = cardinal; // Qt::Modifier (4) const QtMETA = 268435456 { $10000000 }; QtSHIFT = 33554432 { $2000000 }; QtCTRL = 67108864 { $4000000 }; QtALT = 134217728 { $8000000 }; QtMODIFIER_MASK = 4261412864 { $fe000000 }; QtUNICODE_ACCEL = 0 { $0 }; type QtFocusPolicy = cardinal; // Qt::FocusPolicy (4) const QtNoFocus = 0 { $0 }; QtTabFocus = 1 { $1 }; QtClickFocus = 2 { $2 }; QtStrongFocus = 11 { $b }; QtWheelFocus = 15 { $f }; type QtAlignmentFlag = cardinal; // Qt::AlignmentFlag (4) QtAlignment = QtAlignmentFlag; // QFlags<> const QtAlignLeft = 1 { $1 }; QtAlignLeading = 1 { $1 }; QtAlignRight = 2 { $2 }; QtAlignTrailing = 2 { $2 }; QtAlignHCenter = 4 { $4 }; QtAlignJustify = 8 { $8 }; QtAlignAbsolute = 16 { $10 }; QtAlignHorizontal_Mask = 31 { $1f }; QtAlignTop = 32 { $20 }; QtAlignBottom = 64 { $40 }; QtAlignVCenter = 128 { $80 }; QtAlignVertical_Mask = 224 { $e0 }; QtAlignCenter = 132 { $84 }; type QtWindowType = cardinal; // Qt::WindowType (4) QtWindowFlags = QtWindowType; // QFlags<> const QtWidget = 0 { $0 }; QtWindow = 1 { $1 }; QtDialog = 3 { $3 }; QtSheet = 5 { $5 }; QtDrawer = 7 { $7 }; QtPopup = 9 { $9 }; QtTool = 11 { $b }; QtToolTip = 13 { $d }; QtSplashScreen = 15 { $f }; QtDesktop = 17 { $11 }; QtSubWindow = 18 { $12 }; QtWindowType_Mask = 255 { $ff }; QtMSWindowsFixedSizeDialogHint = 256 { $100 }; QtMSWindowsOwnDC = 512 { $200 }; QtX11BypassWindowManagerHint = 1024 { $400 }; QtFramelessWindowHint = 2048 { $800 }; QtWindowTitleHint = 4096 { $1000 }; QtWindowSystemMenuHint = 8192 { $2000 }; QtWindowMinimizeButtonHint = 16384 { $4000 }; QtWindowMaximizeButtonHint = 32768 { $8000 }; QtWindowMinMaxButtonsHint = 49152 { $c000 }; QtWindowContextHelpButtonHint = 65536 { $10000 }; QtWindowShadeButtonHint = 131072 { $20000 }; QtWindowStaysOnTopHint = 262144 { $40000 }; QtCustomizeWindowHint = 33554432 { $2000000 }; QtWindowStaysOnBottomHint = 67108864 { $4000000 }; QtWindowCloseButtonHint = 134217728 { $8000000 }; QtMacWindowToolBarButtonHint = 268435456 { $10000000 }; QtBypassGraphicsProxyWidget = 536870912 { $20000000 }; QtWindowOkButtonHint = 524288 { $80000 }; QtWindowCancelButtonHint = 1048576 { $100000 }; type QtWidgetAttribute = cardinal; // Qt::WidgetAttribute (4) const QtWA_Disabled = 0 { $0 }; QtWA_UnderMouse = 1 { $1 }; QtWA_MouseTracking = 2 { $2 }; QtWA_ContentsPropagated = 3 { $3 }; QtWA_OpaquePaintEvent = 4 { $4 }; QtWA_NoBackground = 4 { $4 }; QtWA_StaticContents = 5 { $5 }; QtWA_LaidOut = 7 { $7 }; QtWA_PaintOnScreen = 8 { $8 }; QtWA_NoSystemBackground = 9 { $9 }; QtWA_UpdatesDisabled = 10 { $a }; QtWA_Mapped = 11 { $b }; QtWA_MacNoClickThrough = 12 { $c }; QtWA_PaintOutsidePaintEvent = 13 { $d }; QtWA_InputMethodEnabled = 14 { $e }; QtWA_WState_Visible = 15 { $f }; QtWA_WState_Hidden = 16 { $10 }; QtWA_ForceDisabled = 32 { $20 }; QtWA_KeyCompression = 33 { $21 }; QtWA_PendingMoveEvent = 34 { $22 }; QtWA_PendingResizeEvent = 35 { $23 }; QtWA_SetPalette = 36 { $24 }; QtWA_SetFont = 37 { $25 }; QtWA_SetCursor = 38 { $26 }; QtWA_NoChildEventsFromChildren = 39 { $27 }; QtWA_WindowModified = 41 { $29 }; QtWA_Resized = 42 { $2a }; QtWA_Moved = 43 { $2b }; QtWA_PendingUpdate = 44 { $2c }; QtWA_InvalidSize = 45 { $2d }; QtWA_MacBrushedMetal = 46 { $2e }; QtWA_MacMetalStyle = 46 { $2e }; QtWA_CustomWhatsThis = 47 { $2f }; QtWA_LayoutOnEntireRect = 48 { $30 }; QtWA_OutsideWSRange = 49 { $31 }; QtWA_GrabbedShortcut = 50 { $32 }; QtWA_TransparentForMouseEvents = 51 { $33 }; QtWA_PaintUnclipped = 52 { $34 }; QtWA_SetWindowIcon = 53 { $35 }; QtWA_NoMouseReplay = 54 { $36 }; QtWA_DeleteOnClose = 55 { $37 }; QtWA_RightToLeft = 56 { $38 }; QtWA_SetLayoutDirection = 57 { $39 }; QtWA_NoChildEventsForParent = 58 { $3a }; QtWA_ForceUpdatesDisabled = 59 { $3b }; QtWA_WState_Created = 60 { $3c }; QtWA_WState_CompressKeys = 61 { $3d }; QtWA_WState_InPaintEvent = 62 { $3e }; QtWA_WState_Reparented = 63 { $3f }; QtWA_WState_ConfigPending = 64 { $40 }; QtWA_WState_Polished = 66 { $42 }; QtWA_WState_DND = 67 { $43 }; QtWA_WState_OwnSizePolicy = 68 { $44 }; QtWA_WState_ExplicitShowHide = 69 { $45 }; QtWA_ShowModal = 70 { $46 }; QtWA_MouseNoMask = 71 { $47 }; QtWA_GroupLeader = 72 { $48 }; QtWA_NoMousePropagation = 73 { $49 }; QtWA_Hover = 74 { $4a }; QtWA_InputMethodTransparent = 75 { $4b }; QtWA_QuitOnClose = 76 { $4c }; QtWA_KeyboardFocusChange = 77 { $4d }; QtWA_AcceptDrops = 78 { $4e }; QtWA_DropSiteRegistered = 79 { $4f }; QtWA_ForceAcceptDrops = 79 { $4f }; QtWA_WindowPropagation = 80 { $50 }; QtWA_NoX11EventCompression = 81 { $51 }; QtWA_TintedBackground = 82 { $52 }; QtWA_X11OpenGLOverlay = 83 { $53 }; QtWA_AlwaysShowToolTips = 84 { $54 }; QtWA_MacOpaqueSizeGrip = 85 { $55 }; QtWA_SetStyle = 86 { $56 }; QtWA_SetLocale = 87 { $57 }; QtWA_MacShowFocusRect = 88 { $58 }; QtWA_MacNormalSize = 89 { $59 }; QtWA_MacSmallSize = 90 { $5a }; QtWA_MacMiniSize = 91 { $5b }; QtWA_LayoutUsesWidgetRect = 92 { $5c }; QtWA_StyledBackground = 93 { $5d }; QtWA_MSWindowsUseDirect3D = 94 { $5e }; QtWA_CanHostQMdiSubWindowTitleBar = 95 { $5f }; QtWA_MacAlwaysShowToolWindow = 96 { $60 }; QtWA_StyleSheet = 97 { $61 }; QtWA_ShowWithoutActivating = 98 { $62 }; QtWA_X11BypassTransientForHint = 99 { $63 }; QtWA_NativeWindow = 100 { $64 }; QtWA_DontCreateNativeAncestors = 101 { $65 }; QtWA_MacVariableSize = 102 { $66 }; QtWA_DontShowOnScreen = 103 { $67 }; QtWA_X11NetWmWindowTypeDesktop = 104 { $68 }; QtWA_X11NetWmWindowTypeDock = 105 { $69 }; QtWA_X11NetWmWindowTypeToolBar = 106 { $6a }; QtWA_X11NetWmWindowTypeMenu = 107 { $6b }; QtWA_X11NetWmWindowTypeUtility = 108 { $6c }; QtWA_X11NetWmWindowTypeSplash = 109 { $6d }; QtWA_X11NetWmWindowTypeDialog = 110 { $6e }; QtWA_X11NetWmWindowTypeDropDownMenu = 111 { $6f }; QtWA_X11NetWmWindowTypePopupMenu = 112 { $70 }; QtWA_X11NetWmWindowTypeToolTip = 113 { $71 }; QtWA_X11NetWmWindowTypeNotification = 114 { $72 }; QtWA_X11NetWmWindowTypeCombo = 115 { $73 }; QtWA_X11NetWmWindowTypeDND = 116 { $74 }; QtWA_MacFrameworkScaled = 117 { $75 }; QtWA_SetWindowModality = 118 { $76 }; QtWA_WState_WindowOpacitySet = 119 { $77 }; QtWA_TranslucentBackground = 120 { $78 }; QtWA_AttributeCount = 121 { $79 }; type QtKey = cardinal; // Qt::Key (4) const QtKey_Escape = 16777216 { $1000000 }; QtKey_Tab = 16777217 { $1000001 }; QtKey_Backtab = 16777218 { $1000002 }; QtKey_Backspace = 16777219 { $1000003 }; QtKey_Return = 16777220 { $1000004 }; QtKey_Enter = 16777221 { $1000005 }; QtKey_Insert = 16777222 { $1000006 }; QtKey_Delete = 16777223 { $1000007 }; QtKey_Pause = 16777224 { $1000008 }; QtKey_Print = 16777225 { $1000009 }; QtKey_SysReq = 16777226 { $100000a }; QtKey_Clear = 16777227 { $100000b }; QtKey_Home = 16777232 { $1000010 }; QtKey_End = 16777233 { $1000011 }; QtKey_Left = 16777234 { $1000012 }; QtKey_Up = 16777235 { $1000013 }; QtKey_Right = 16777236 { $1000014 }; QtKey_Down = 16777237 { $1000015 }; QtKey_PageUp = 16777238 { $1000016 }; QtKey_PageDown = 16777239 { $1000017 }; QtKey_Shift = 16777248 { $1000020 }; QtKey_Control = 16777249 { $1000021 }; QtKey_Meta = 16777250 { $1000022 }; QtKey_Alt = 16777251 { $1000023 }; QtKey_CapsLock = 16777252 { $1000024 }; QtKey_NumLock = 16777253 { $1000025 }; QtKey_ScrollLock = 16777254 { $1000026 }; QtKey_F1 = 16777264 { $1000030 }; QtKey_F2 = 16777265 { $1000031 }; QtKey_F3 = 16777266 { $1000032 }; QtKey_F4 = 16777267 { $1000033 }; QtKey_F5 = 16777268 { $1000034 }; QtKey_F6 = 16777269 { $1000035 }; QtKey_F7 = 16777270 { $1000036 }; QtKey_F8 = 16777271 { $1000037 }; QtKey_F9 = 16777272 { $1000038 }; QtKey_F10 = 16777273 { $1000039 }; QtKey_F11 = 16777274 { $100003a }; QtKey_F12 = 16777275 { $100003b }; QtKey_F13 = 16777276 { $100003c }; QtKey_F14 = 16777277 { $100003d }; QtKey_F15 = 16777278 { $100003e }; QtKey_F16 = 16777279 { $100003f }; QtKey_F17 = 16777280 { $1000040 }; QtKey_F18 = 16777281 { $1000041 }; QtKey_F19 = 16777282 { $1000042 }; QtKey_F20 = 16777283 { $1000043 }; QtKey_F21 = 16777284 { $1000044 }; QtKey_F22 = 16777285 { $1000045 }; QtKey_F23 = 16777286 { $1000046 }; QtKey_F24 = 16777287 { $1000047 }; QtKey_F25 = 16777288 { $1000048 }; QtKey_F26 = 16777289 { $1000049 }; QtKey_F27 = 16777290 { $100004a }; QtKey_F28 = 16777291 { $100004b }; QtKey_F29 = 16777292 { $100004c }; QtKey_F30 = 16777293 { $100004d }; QtKey_F31 = 16777294 { $100004e }; QtKey_F32 = 16777295 { $100004f }; QtKey_F33 = 16777296 { $1000050 }; QtKey_F34 = 16777297 { $1000051 }; QtKey_F35 = 16777298 { $1000052 }; QtKey_Super_L = 16777299 { $1000053 }; QtKey_Super_R = 16777300 { $1000054 }; QtKey_Menu = 16777301 { $1000055 }; QtKey_Hyper_L = 16777302 { $1000056 }; QtKey_Hyper_R = 16777303 { $1000057 }; QtKey_Help = 16777304 { $1000058 }; QtKey_Direction_L = 16777305 { $1000059 }; QtKey_Direction_R = 16777312 { $1000060 }; QtKey_Space = 32 { $20 }; QtKey_Any = 32 { $20 }; QtKey_Exclam = 33 { $21 }; QtKey_QuoteDbl = 34 { $22 }; QtKey_NumberSign = 35 { $23 }; QtKey_Dollar = 36 { $24 }; QtKey_Percent = 37 { $25 }; QtKey_Ampersand = 38 { $26 }; QtKey_Apostrophe = 39 { $27 }; QtKey_ParenLeft = 40 { $28 }; QtKey_ParenRight = 41 { $29 }; QtKey_Asterisk = 42 { $2a }; QtKey_Plus = 43 { $2b }; QtKey_Comma = 44 { $2c }; QtKey_Minus = 45 { $2d }; QtKey_Period = 46 { $2e }; QtKey_Slash = 47 { $2f }; QtKey_0 = 48 { $30 }; QtKey_1 = 49 { $31 }; QtKey_2 = 50 { $32 }; QtKey_3 = 51 { $33 }; QtKey_4 = 52 { $34 }; QtKey_5 = 53 { $35 }; QtKey_6 = 54 { $36 }; QtKey_7 = 55 { $37 }; QtKey_8 = 56 { $38 }; QtKey_9 = 57 { $39 }; QtKey_Colon = 58 { $3a }; QtKey_Semicolon = 59 { $3b }; QtKey_Less = 60 { $3c }; QtKey_Equal = 61 { $3d }; QtKey_Greater = 62 { $3e }; QtKey_Question = 63 { $3f }; QtKey_At = 64 { $40 }; QtKey_A = 65 { $41 }; QtKey_B = 66 { $42 }; QtKey_C = 67 { $43 }; QtKey_D = 68 { $44 }; QtKey_E = 69 { $45 }; QtKey_F = 70 { $46 }; QtKey_G = 71 { $47 }; QtKey_H = 72 { $48 }; QtKey_I = 73 { $49 }; QtKey_J = 74 { $4a }; QtKey_K = 75 { $4b }; QtKey_L = 76 { $4c }; QtKey_M = 77 { $4d }; QtKey_N = 78 { $4e }; QtKey_O = 79 { $4f }; QtKey_P = 80 { $50 }; QtKey_Q = 81 { $51 }; QtKey_R = 82 { $52 }; QtKey_S = 83 { $53 }; QtKey_T = 84 { $54 }; QtKey_U = 85 { $55 }; QtKey_V = 86 { $56 }; QtKey_W = 87 { $57 }; QtKey_X = 88 { $58 }; QtKey_Y = 89 { $59 }; QtKey_Z = 90 { $5a }; QtKey_BracketLeft = 91 { $5b }; QtKey_Backslash = 92 { $5c }; QtKey_BracketRight = 93 { $5d }; QtKey_AsciiCircum = 94 { $5e }; QtKey_Underscore = 95 { $5f }; QtKey_QuoteLeft = 96 { $60 }; QtKey_BraceLeft = 123 { $7b }; QtKey_Bar = 124 { $7c }; QtKey_BraceRight = 125 { $7d }; QtKey_AsciiTilde = 126 { $7e }; QtKey_nobreakspace = 160 { $a0 }; QtKey_exclamdown = 161 { $a1 }; QtKey_cent = 162 { $a2 }; QtKey_sterling = 163 { $a3 }; QtKey_currency = 164 { $a4 }; QtKey_yen = 165 { $a5 }; QtKey_brokenbar = 166 { $a6 }; QtKey_section = 167 { $a7 }; QtKey_diaeresis = 168 { $a8 }; QtKey_copyright = 169 { $a9 }; QtKey_ordfeminine = 170 { $aa }; QtKey_guillemotleft = 171 { $ab }; QtKey_notsign = 172 { $ac }; QtKey_hyphen = 173 { $ad }; QtKey_registered = 174 { $ae }; QtKey_macron = 175 { $af }; QtKey_degree = 176 { $b0 }; QtKey_plusminus = 177 { $b1 }; QtKey_twosuperior = 178 { $b2 }; QtKey_threesuperior = 179 { $b3 }; QtKey_acute = 180 { $b4 }; QtKey_mu = 181 { $b5 }; QtKey_paragraph = 182 { $b6 }; QtKey_periodcentered = 183 { $b7 }; QtKey_cedilla = 184 { $b8 }; QtKey_onesuperior = 185 { $b9 }; QtKey_masculine = 186 { $ba }; QtKey_guillemotright = 187 { $bb }; QtKey_onequarter = 188 { $bc }; QtKey_onehalf = 189 { $bd }; QtKey_threequarters = 190 { $be }; QtKey_questiondown = 191 { $bf }; QtKey_Agrave = 192 { $c0 }; QtKey_Aacute = 193 { $c1 }; QtKey_Acircumflex = 194 { $c2 }; QtKey_Atilde = 195 { $c3 }; QtKey_Adiaeresis = 196 { $c4 }; QtKey_Aring = 197 { $c5 }; QtKey_AE = 198 { $c6 }; QtKey_Ccedilla = 199 { $c7 }; QtKey_Egrave = 200 { $c8 }; QtKey_Eacute = 201 { $c9 }; QtKey_Ecircumflex = 202 { $ca }; QtKey_Ediaeresis = 203 { $cb }; QtKey_Igrave = 204 { $cc }; QtKey_Iacute = 205 { $cd }; QtKey_Icircumflex = 206 { $ce }; QtKey_Idiaeresis = 207 { $cf }; QtKey_ETH = 208 { $d0 }; QtKey_Ntilde = 209 { $d1 }; QtKey_Ograve = 210 { $d2 }; QtKey_Oacute = 211 { $d3 }; QtKey_Ocircumflex = 212 { $d4 }; QtKey_Otilde = 213 { $d5 }; QtKey_Odiaeresis = 214 { $d6 }; QtKey_multiply = 215 { $d7 }; QtKey_Ooblique = 216 { $d8 }; QtKey_Ugrave = 217 { $d9 }; QtKey_Uacute = 218 { $da }; QtKey_Ucircumflex = 219 { $db }; QtKey_Udiaeresis = 220 { $dc }; QtKey_Yacute = 221 { $dd }; QtKey_THORN = 222 { $de }; QtKey_ssharp = 223 { $df }; QtKey_division = 247 { $f7 }; QtKey_ydiaeresis = 255 { $ff }; QtKey_AltGr = 16781571 { $1001103 }; QtKey_Multi_key = 16781600 { $1001120 }; QtKey_Codeinput = 16781623 { $1001137 }; QtKey_SingleCandidate = 16781628 { $100113c }; QtKey_MultipleCandidate = 16781629 { $100113d }; QtKey_PreviousCandidate = 16781630 { $100113e }; QtKey_Mode_switch = 16781694 { $100117e }; QtKey_Kanji = 16781601 { $1001121 }; QtKey_Muhenkan = 16781602 { $1001122 }; QtKey_Henkan = 16781603 { $1001123 }; QtKey_Romaji = 16781604 { $1001124 }; QtKey_Hiragana = 16781605 { $1001125 }; QtKey_Katakana = 16781606 { $1001126 }; QtKey_Hiragana_Katakana = 16781607 { $1001127 }; QtKey_Zenkaku = 16781608 { $1001128 }; QtKey_Hankaku = 16781609 { $1001129 }; QtKey_Zenkaku_Hankaku = 16781610 { $100112a }; QtKey_Touroku = 16781611 { $100112b }; QtKey_Massyo = 16781612 { $100112c }; QtKey_Kana_Lock = 16781613 { $100112d }; QtKey_Kana_Shift = 16781614 { $100112e }; QtKey_Eisu_Shift = 16781615 { $100112f }; QtKey_Eisu_toggle = 16781616 { $1001130 }; QtKey_Hangul = 16781617 { $1001131 }; QtKey_Hangul_Start = 16781618 { $1001132 }; QtKey_Hangul_End = 16781619 { $1001133 }; QtKey_Hangul_Hanja = 16781620 { $1001134 }; QtKey_Hangul_Jamo = 16781621 { $1001135 }; QtKey_Hangul_Romaja = 16781622 { $1001136 }; QtKey_Hangul_Jeonja = 16781624 { $1001138 }; QtKey_Hangul_Banja = 16781625 { $1001139 }; QtKey_Hangul_PreHanja = 16781626 { $100113a }; QtKey_Hangul_PostHanja = 16781627 { $100113b }; QtKey_Hangul_Special = 16781631 { $100113f }; QtKey_Dead_Grave = 16781904 { $1001250 }; QtKey_Dead_Acute = 16781905 { $1001251 }; QtKey_Dead_Circumflex = 16781906 { $1001252 }; QtKey_Dead_Tilde = 16781907 { $1001253 }; QtKey_Dead_Macron = 16781908 { $1001254 }; QtKey_Dead_Breve = 16781909 { $1001255 }; QtKey_Dead_Abovedot = 16781910 { $1001256 }; QtKey_Dead_Diaeresis = 16781911 { $1001257 }; QtKey_Dead_Abovering = 16781912 { $1001258 }; QtKey_Dead_Doubleacute = 16781913 { $1001259 }; QtKey_Dead_Caron = 16781914 { $100125a }; QtKey_Dead_Cedilla = 16781915 { $100125b }; QtKey_Dead_Ogonek = 16781916 { $100125c }; QtKey_Dead_Iota = 16781917 { $100125d }; QtKey_Dead_Voiced_Sound = 16781918 { $100125e }; QtKey_Dead_Semivoiced_Sound = 16781919 { $100125f }; QtKey_Dead_Belowdot = 16781920 { $1001260 }; QtKey_Dead_Hook = 16781921 { $1001261 }; QtKey_Dead_Horn = 16781922 { $1001262 }; QtKey_Back = 16777313 { $1000061 }; QtKey_Forward = 16777314 { $1000062 }; QtKey_Stop = 16777315 { $1000063 }; QtKey_Refresh = 16777316 { $1000064 }; QtKey_VolumeDown = 16777328 { $1000070 }; QtKey_VolumeMute = 16777329 { $1000071 }; QtKey_VolumeUp = 16777330 { $1000072 }; QtKey_BassBoost = 16777331 { $1000073 }; QtKey_BassUp = 16777332 { $1000074 }; QtKey_BassDown = 16777333 { $1000075 }; QtKey_TrebleUp = 16777334 { $1000076 }; QtKey_TrebleDown = 16777335 { $1000077 }; QtKey_MediaPlay = 16777344 { $1000080 }; QtKey_MediaStop = 16777345 { $1000081 }; QtKey_MediaPrevious = 16777346 { $1000082 }; QtKey_MediaNext = 16777347 { $1000083 }; QtKey_MediaRecord = 16777348 { $1000084 }; QtKey_HomePage = 16777360 { $1000090 }; QtKey_Favorites = 16777361 { $1000091 }; QtKey_Search = 16777362 { $1000092 }; QtKey_Standby = 16777363 { $1000093 }; QtKey_OpenUrl = 16777364 { $1000094 }; QtKey_LaunchMail = 16777376 { $10000a0 }; QtKey_LaunchMedia = 16777377 { $10000a1 }; QtKey_Launch0 = 16777378 { $10000a2 }; QtKey_Launch1 = 16777379 { $10000a3 }; QtKey_Launch2 = 16777380 { $10000a4 }; QtKey_Launch3 = 16777381 { $10000a5 }; QtKey_Launch4 = 16777382 { $10000a6 }; QtKey_Launch5 = 16777383 { $10000a7 }; QtKey_Launch6 = 16777384 { $10000a8 }; QtKey_Launch7 = 16777385 { $10000a9 }; QtKey_Launch8 = 16777386 { $10000aa }; QtKey_Launch9 = 16777387 { $10000ab }; QtKey_LaunchA = 16777388 { $10000ac }; QtKey_LaunchB = 16777389 { $10000ad }; QtKey_LaunchC = 16777390 { $10000ae }; QtKey_LaunchD = 16777391 { $10000af }; QtKey_LaunchE = 16777392 { $10000b0 }; QtKey_LaunchF = 16777393 { $10000b1 }; QtKey_MediaLast = 16842751 { $100ffff }; QtKey_Select = 16842752 { $1010000 }; QtKey_Yes = 16842753 { $1010001 }; QtKey_No = 16842754 { $1010002 }; QtKey_Cancel = 16908289 { $1020001 }; QtKey_Printer = 16908290 { $1020002 }; QtKey_Execute = 16908291 { $1020003 }; QtKey_Sleep = 16908292 { $1020004 }; QtKey_Play = 16908293 { $1020005 }; QtKey_Zoom = 16908294 { $1020006 }; QtKey_Context1 = 17825792 { $1100000 }; QtKey_Context2 = 17825793 { $1100001 }; QtKey_Context3 = 17825794 { $1100002 }; QtKey_Context4 = 17825795 { $1100003 }; QtKey_Call = 17825796 { $1100004 }; QtKey_Hangup = 17825797 { $1100005 }; QtKey_Flip = 17825798 { $1100006 }; QtKey_unknown = 33554431 { $1ffffff }; type QtCursorShape = cardinal; // Qt::CursorShape (4) const QtArrowCursor = 0 { $0 }; QtUpArrowCursor = 1 { $1 }; QtCrossCursor = 2 { $2 }; QtWaitCursor = 3 { $3 }; QtIBeamCursor = 4 { $4 }; QtSizeVerCursor = 5 { $5 }; QtSizeHorCursor = 6 { $6 }; QtSizeBDiagCursor = 7 { $7 }; QtSizeFDiagCursor = 8 { $8 }; QtSizeAllCursor = 9 { $9 }; QtBlankCursor = 10 { $a }; QtSplitVCursor = 11 { $b }; QtSplitHCursor = 12 { $c }; QtPointingHandCursor = 13 { $d }; QtForbiddenCursor = 14 { $e }; QtWhatsThisCursor = 15 { $f }; QtBusyCursor = 16 { $10 }; QtOpenHandCursor = 17 { $11 }; QtClosedHandCursor = 18 { $12 }; QtLastCursor = 18 { $12 }; QtBitmapCursor = 24 { $18 }; QtCustomCursor = 25 { $19 }; type QtDockWidgetArea = cardinal; // Qt::DockWidgetArea (4) QtDockWidgetAreas = QtDockWidgetArea; // QFlags<> const QtLeftDockWidgetArea = 1 { $1 }; QtRightDockWidgetArea = 2 { $2 }; QtTopDockWidgetArea = 4 { $4 }; QtBottomDockWidgetArea = 8 { $8 }; QtDockWidgetArea_Mask = 15 { $f }; QtAllDockWidgetAreas = 15 { $f }; QtNoDockWidgetArea = 0 { $0 }; type QtToolBarArea = cardinal; // Qt::ToolBarArea (4) QtToolBarAreas = QtToolBarArea; // QFlags<> const QtLeftToolBarArea = 1 { $1 }; QtRightToolBarArea = 2 { $2 }; QtTopToolBarArea = 4 { $4 }; QtBottomToolBarArea = 8 { $8 }; QtToolBarArea_Mask = 15 { $f }; QtAllToolBarAreas = 15 { $f }; QtNoToolBarArea = 0 { $0 }; type QtDateFormat = cardinal; // Qt::DateFormat (4) const QtTextDate = 0 { $0 }; QtISODate = 1 { $1 }; QtSystemLocaleDate = 2 { $2 }; QtLocalDate = 2 { $2 }; QtLocaleDate = 3 { $3 }; QtSystemLocaleShortDate = 4 { $4 }; QtSystemLocaleLongDate = 5 { $5 }; QtDefaultLocaleShortDate = 6 { $6 }; QtDefaultLocaleLongDate = 7 { $7 }; type QtTextInteractionFlag = cardinal; // Qt::TextInteractionFlag (4) QtTextInteractionFlags = QtTextInteractionFlag; // QFlags<> const QtNoTextInteraction = 0 { $0 }; QtTextSelectableByMouse = 1 { $1 }; QtTextSelectableByKeyboard = 2 { $2 }; QtLinksAccessibleByMouse = 4 { $4 }; QtLinksAccessibleByKeyboard = 8 { $8 }; QtTextEditable = 16 { $10 }; QtTextEditorInteraction = 19 { $13 }; QtTextBrowserInteraction = 13 { $d }; function QObject_create(parent: QObjectH = nil): QObjectH; cdecl; external Qt4PasLib name 'QObject_create'; procedure QObject_destroy(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_destroy'; function QObject_event(handle: QObjectH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QObject_event'; function QObject_eventFilter(handle: QObjectH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QObject_eventFilter'; procedure QObject_tr(retval: PWideString; sourceText: PAnsiChar; comment: PAnsiChar = nil; n: Integer = -1); cdecl; external Qt4PasLib name 'QObject_tr'; procedure QObject_trUtf8(retval: PWideString; sourceText: PAnsiChar; comment: PAnsiChar = nil; n: Integer = -1); cdecl; external Qt4PasLib name 'QObject_trUtf8'; function QObject_metaObject(handle: QObjectH): QMetaObjectH; cdecl; external Qt4PasLib name 'QObject_metaObject'; procedure QObject_objectName(handle: QObjectH; retval: PWideString); cdecl; external Qt4PasLib name 'QObject_objectName'; procedure QObject_setObjectName(handle: QObjectH; name: PWideString); cdecl; external Qt4PasLib name 'QObject_setObjectName'; function QObject_isWidgetType(handle: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QObject_isWidgetType'; function QObject_signalsBlocked(handle: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QObject_signalsBlocked'; function QObject_blockSignals(handle: QObjectH; b: Boolean): Boolean; cdecl; external Qt4PasLib name 'QObject_blockSignals'; function QObject_thread(handle: QObjectH): QThreadH; cdecl; external Qt4PasLib name 'QObject_thread'; procedure QObject_moveToThread(handle: QObjectH; thread: QThreadH); cdecl; external Qt4PasLib name 'QObject_moveToThread'; function QObject_startTimer(handle: QObjectH; interval: Integer): Integer; cdecl; external Qt4PasLib name 'QObject_startTimer'; procedure QObject_killTimer(handle: QObjectH; id: Integer); cdecl; external Qt4PasLib name 'QObject_killTimer'; procedure QObject_children(handle: QObjectH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QObject_children'; procedure QObject_setParent(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_setParent'; procedure QObject_installEventFilter(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_installEventFilter'; procedure QObject_removeEventFilter(handle: QObjectH; AnonParam1: QObjectH); cdecl; external Qt4PasLib name 'QObject_removeEventFilter'; function QObject_connect(sender: QObjectH; signal: PAnsiChar; receiver: QObjectH; member: PAnsiChar; AnonParam5: QtConnectionType = QtAutoConnection): Boolean; cdecl; external Qt4PasLib name 'QObject_connect'; function QObject_connect(handle: QObjectH; sender: QObjectH; signal: PAnsiChar; member: PAnsiChar; _type: QtConnectionType = QtAutoConnection): Boolean; cdecl; external Qt4PasLib name 'QObject_connect2'; function QObject_disconnect(sender: QObjectH; signal: PAnsiChar; receiver: QObjectH; member: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QObject_disconnect'; function QObject_disconnect(handle: QObjectH; receiver: QObjectH; member: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QObject_disconnect3'; procedure QObject_dumpObjectTree(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_dumpObjectTree'; procedure QObject_dumpObjectInfo(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_dumpObjectInfo'; function QObject_setProperty(handle: QObjectH; name: PAnsiChar; value: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QObject_setProperty'; procedure QObject_property(handle: QObjectH; retval: QVariantH; name: PAnsiChar); cdecl; external Qt4PasLib name 'QObject_property'; function QObject_registerUserData(): LongWord; cdecl; external Qt4PasLib name 'QObject_registerUserData'; function QObject_parent(handle: QObjectH): QObjectH; cdecl; external Qt4PasLib name 'QObject_parent'; function QObject_inherits(handle: QObjectH; classname: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QObject_inherits'; procedure QObject_deleteLater(handle: QObjectH); cdecl; external Qt4PasLib name 'QObject_deleteLater'; type QEventType = cardinal; // QEvent::Type (4) const QEventNone = 0 { $0 }; QEventTimer = 1 { $1 }; QEventMouseButtonPress = 2 { $2 }; QEventMouseButtonRelease = 3 { $3 }; QEventMouseButtonDblClick = 4 { $4 }; QEventMouseMove = 5 { $5 }; QEventKeyPress = 6 { $6 }; QEventKeyRelease = 7 { $7 }; QEventFocusIn = 8 { $8 }; QEventFocusOut = 9 { $9 }; QEventEnter = 10 { $a }; QEventLeave = 11 { $b }; QEventPaint = 12 { $c }; QEventMove = 13 { $d }; QEventResize = 14 { $e }; QEventCreate = 15 { $f }; QEventDestroy = 16 { $10 }; QEventShow = 17 { $11 }; QEventHide = 18 { $12 }; QEventClose = 19 { $13 }; QEventQuit = 20 { $14 }; QEventParentChange = 21 { $15 }; QEventParentAboutToChange = 131 { $83 }; QEventThreadChange = 22 { $16 }; QEventWindowActivate = 24 { $18 }; QEventWindowDeactivate = 25 { $19 }; QEventShowToParent = 26 { $1a }; QEventHideToParent = 27 { $1b }; QEventWheel = 31 { $1f }; QEventWindowTitleChange = 33 { $21 }; QEventWindowIconChange = 34 { $22 }; QEventApplicationWindowIconChange = 35 { $23 }; QEventApplicationFontChange = 36 { $24 }; QEventApplicationLayoutDirectionChange = 37 { $25 }; QEventApplicationPaletteChange = 38 { $26 }; QEventPaletteChange = 39 { $27 }; QEventClipboard = 40 { $28 }; QEventSpeech = 42 { $2a }; QEventMetaCall = 43 { $2b }; QEventSockAct = 50 { $32 }; QEventWinEventAct = 132 { $84 }; QEventDeferredDelete = 52 { $34 }; QEventDragEnter = 60 { $3c }; QEventDragMove = 61 { $3d }; QEventDragLeave = 62 { $3e }; QEventDrop = 63 { $3f }; QEventDragResponse = 64 { $40 }; QEventChildAdded = 68 { $44 }; QEventChildPolished = 69 { $45 }; QEventChildRemoved = 71 { $47 }; QEventShowWindowRequest = 73 { $49 }; QEventPolishRequest = 74 { $4a }; QEventPolish = 75 { $4b }; QEventLayoutRequest = 76 { $4c }; QEventUpdateRequest = 77 { $4d }; QEventUpdateLater = 78 { $4e }; QEventEmbeddingControl = 79 { $4f }; QEventActivateControl = 80 { $50 }; QEventDeactivateControl = 81 { $51 }; QEventContextMenu = 82 { $52 }; QEventInputMethod = 83 { $53 }; QEventAccessibilityPrepare = 86 { $56 }; QEventTabletMove = 87 { $57 }; QEventLocaleChange = 88 { $58 }; QEventLanguageChange = 89 { $59 }; QEventLayoutDirectionChange = 90 { $5a }; QEventStyle = 91 { $5b }; QEventTabletPress = 92 { $5c }; QEventTabletRelease = 93 { $5d }; QEventOkRequest = 94 { $5e }; QEventHelpRequest = 95 { $5f }; QEventIconDrag = 96 { $60 }; QEventFontChange = 97 { $61 }; QEventEnabledChange = 98 { $62 }; QEventActivationChange = 99 { $63 }; QEventStyleChange = 100 { $64 }; QEventIconTextChange = 101 { $65 }; QEventModifiedChange = 102 { $66 }; QEventMouseTrackingChange = 109 { $6d }; QEventWindowBlocked = 103 { $67 }; QEventWindowUnblocked = 104 { $68 }; QEventWindowStateChange = 105 { $69 }; QEventToolTip = 110 { $6e }; QEventWhatsThis = 111 { $6f }; QEventStatusTip = 112 { $70 }; QEventActionChanged = 113 { $71 }; QEventActionAdded = 114 { $72 }; QEventActionRemoved = 115 { $73 }; QEventFileOpen = 116 { $74 }; QEventShortcut = 117 { $75 }; QEventShortcutOverride = 51 { $33 }; QEventWhatsThisClicked = 118 { $76 }; QEventToolBarChange = 120 { $78 }; QEventApplicationActivate = 121 { $79 }; QEventApplicationActivated = 121 { $79 }; QEventApplicationDeactivate = 122 { $7a }; QEventApplicationDeactivated = 122 { $7a }; QEventQueryWhatsThis = 123 { $7b }; QEventEnterWhatsThisMode = 124 { $7c }; QEventLeaveWhatsThisMode = 125 { $7d }; QEventZOrderChange = 126 { $7e }; QEventHoverEnter = 127 { $7f }; QEventHoverLeave = 128 { $80 }; QEventHoverMove = 129 { $81 }; QEventAccessibilityHelp = 119 { $77 }; QEventAccessibilityDescription = 130 { $82 }; QEventAcceptDropsChange = 152 { $98 }; QEventMenubarUpdated = 153 { $99 }; QEventZeroTimerEvent = 154 { $9a }; QEventGraphicsSceneMouseMove = 155 { $9b }; QEventGraphicsSceneMousePress = 156 { $9c }; QEventGraphicsSceneMouseRelease = 157 { $9d }; QEventGraphicsSceneMouseDoubleClick = 158 { $9e }; QEventGraphicsSceneContextMenu = 159 { $9f }; QEventGraphicsSceneHoverEnter = 160 { $a0 }; QEventGraphicsSceneHoverMove = 161 { $a1 }; QEventGraphicsSceneHoverLeave = 162 { $a2 }; QEventGraphicsSceneHelp = 163 { $a3 }; QEventGraphicsSceneDragEnter = 164 { $a4 }; QEventGraphicsSceneDragMove = 165 { $a5 }; QEventGraphicsSceneDragLeave = 166 { $a6 }; QEventGraphicsSceneDrop = 167 { $a7 }; QEventGraphicsSceneWheel = 168 { $a8 }; QEventKeyboardLayoutChange = 169 { $a9 }; QEventDynamicPropertyChange = 170 { $aa }; QEventTabletEnterProximity = 171 { $ab }; QEventTabletLeaveProximity = 172 { $ac }; QEventNonClientAreaMouseMove = 173 { $ad }; QEventNonClientAreaMouseButtonPress = 174 { $ae }; QEventNonClientAreaMouseButtonRelease = 175 { $af }; QEventNonClientAreaMouseButtonDblClick = 176 { $b0 }; QEventMacSizeChange = 177 { $b1 }; QEventContentsRectChange = 178 { $b2 }; QEventMacGLWindowChange = 179 { $b3 }; QEventFutureCallOut = 180 { $b4 }; QEventGraphicsSceneResize = 181 { $b5 }; QEventGraphicsSceneMove = 182 { $b6 }; QEventCursorChange = 183 { $b7 }; QEventToolTipChange = 184 { $b8 }; QEventNetworkReplyUpdated = 185 { $b9 }; QEventGrabMouse = 186 { $ba }; QEventUngrabMouse = 187 { $bb }; QEventGrabKeyboard = 188 { $bc }; QEventUngrabKeyboard = 189 { $bd }; QEventCocoaRequestModal = 190 { $be }; QEventMacGLClearDrawable = 191 { $bf }; QEventUser = 1000 { $3e8 }; QEventMaxUser = 65535 { $ffff }; function QEvent_create(_type: QEventType): QEventH; cdecl; external Qt4PasLib name 'QEvent_create'; procedure QEvent_destroy(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_destroy'; function QEvent_type(handle: QEventH): QEventType; cdecl; external Qt4PasLib name 'QEvent_type'; function QEvent_spontaneous(handle: QEventH): Boolean; cdecl; external Qt4PasLib name 'QEvent_spontaneous'; procedure QEvent_setAccepted(handle: QEventH; accepted: Boolean); cdecl; external Qt4PasLib name 'QEvent_setAccepted'; function QEvent_isAccepted(handle: QEventH): Boolean; cdecl; external Qt4PasLib name 'QEvent_isAccepted'; procedure QEvent_accept(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_accept'; procedure QEvent_ignore(handle: QEventH); cdecl; external Qt4PasLib name 'QEvent_ignore'; function QEvent_registerEventType(hint: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QEvent_registerEventType'; function QTimerEvent_create(timerId: Integer): QTimerEventH; cdecl; external Qt4PasLib name 'QTimerEvent_create'; procedure QTimerEvent_destroy(handle: QTimerEventH); cdecl; external Qt4PasLib name 'QTimerEvent_destroy'; function QTimerEvent_timerId(handle: QTimerEventH): Integer; cdecl; external Qt4PasLib name 'QTimerEvent_timerId'; function QChildEvent_create(_type: QEventType; child: QObjectH): QChildEventH; cdecl; external Qt4PasLib name 'QChildEvent_create'; procedure QChildEvent_destroy(handle: QChildEventH); cdecl; external Qt4PasLib name 'QChildEvent_destroy'; function QChildEvent_child(handle: QChildEventH): QObjectH; cdecl; external Qt4PasLib name 'QChildEvent_child'; function QChildEvent_added(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_added'; function QChildEvent_polished(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_polished'; function QChildEvent_removed(handle: QChildEventH): Boolean; cdecl; external Qt4PasLib name 'QChildEvent_removed'; function QDynamicPropertyChangeEvent_create(name: QByteArrayH): QDynamicPropertyChangeEventH; cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_create'; procedure QDynamicPropertyChangeEvent_destroy(handle: QDynamicPropertyChangeEventH); cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_destroy'; procedure QDynamicPropertyChangeEvent_propertyName(handle: QDynamicPropertyChangeEventH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QDynamicPropertyChangeEvent_propertyName'; type QEventLoopProcessEventsFlag = cardinal; // QEventLoop::ProcessEventsFlag QEventLoopProcessEventsFlags = QEventLoopProcessEventsFlag; //QFlags<> (3) const QEventLoopAllEvents = $00; QEventLoopExcludeUserInputEvents = $01; QEventLoopExcludeSocketNotifiers = $02; QEventLoopWaitForMoreEvents = $04; QEventLoopX11ExcludeTimers = $08; QEventLoopEventLoopExec = $20; QEventLoopDialogExec = $40; function QEventLoop_create(parent: QObjectH = nil): QEventLoopH; cdecl; external Qt4PasLib name 'QEventLoop_create'; procedure QEventLoop_destroy(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_destroy'; function QEventLoop_processEvents(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents): Boolean; cdecl; external Qt4PasLib name 'QEventLoop_processEvents'; procedure QEventLoop_processEvents(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags; maximumTime: Integer); cdecl; external Qt4PasLib name 'QEventLoop_processEvents2'; function QEventLoop_exec(handle: QEventLoopH; flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents): Integer; cdecl; external Qt4PasLib name 'QEventLoop_exec'; procedure QEventLoop_exit(handle: QEventLoopH; returnCode: Integer = 0); cdecl; external Qt4PasLib name 'QEventLoop_exit'; function QEventLoop_isRunning(handle: QEventLoopH): Boolean; cdecl; external Qt4PasLib name 'QEventLoop_isRunning'; procedure QEventLoop_wakeUp(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_wakeUp'; procedure QEventLoop_quit(handle: QEventLoopH); cdecl; external Qt4PasLib name 'QEventLoop_quit'; type QCoreApplicationEncoding = cardinal; // QCoreApplication::Encoding (4) const QCoreApplicationCodecForTr = 0 { $0 }; QCoreApplicationUnicodeUTF8 = 1 { $1 }; QCoreApplicationDefaultCodec = 0 { $0 }; function QCoreApplication_create(argc: PInteger; argv: PPAnsiChar): QCoreApplicationH; cdecl; external Qt4PasLib name 'QCoreApplication_create'; procedure QCoreApplication_destroy(handle: QCoreApplicationH); cdecl; external Qt4PasLib name 'QCoreApplication_destroy'; procedure QCoreApplication_arguments(retval: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_arguments'; procedure QCoreApplication_setAttribute(attribute: QtApplicationAttribute; _on: Boolean = True); cdecl; external Qt4PasLib name 'QCoreApplication_setAttribute'; function QCoreApplication_testAttribute(attribute: QtApplicationAttribute): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_testAttribute'; procedure QCoreApplication_setOrganizationDomain(orgDomain: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setOrganizationDomain'; procedure QCoreApplication_organizationDomain(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_organizationDomain'; procedure QCoreApplication_setOrganizationName(orgName: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setOrganizationName'; procedure QCoreApplication_organizationName(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_organizationName'; procedure QCoreApplication_setApplicationName(application: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setApplicationName'; procedure QCoreApplication_applicationName(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationName'; procedure QCoreApplication_setApplicationVersion(version: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_setApplicationVersion'; procedure QCoreApplication_applicationVersion(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationVersion'; function QCoreApplication_instance(): QCoreApplicationH; cdecl; external Qt4PasLib name 'QCoreApplication_instance'; function QCoreApplication_exec(): Integer; cdecl; external Qt4PasLib name 'QCoreApplication_exec'; procedure QCoreApplication_processEvents(flags: QEventLoopProcessEventsFlags = QEventLoopAllEvents); cdecl; external Qt4PasLib name 'QCoreApplication_processEvents'; procedure QCoreApplication_processEvents(flags: QEventLoopProcessEventsFlags; maxtime: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_processEvents2'; procedure QCoreApplication_exit(retcode: Integer = 0); cdecl; external Qt4PasLib name 'QCoreApplication_exit'; function QCoreApplication_sendEvent(receiver: QObjectH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_sendEvent'; procedure QCoreApplication_postEvent(receiver: QObjectH; event: QEventH); cdecl; external Qt4PasLib name 'QCoreApplication_postEvent'; procedure QCoreApplication_postEvent(receiver: QObjectH; event: QEventH; priority: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_postEvent2'; procedure QCoreApplication_sendPostedEvents(receiver: QObjectH; event_type: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_sendPostedEvents'; procedure QCoreApplication_sendPostedEvents(); cdecl; external Qt4PasLib name 'QCoreApplication_sendPostedEvents2'; procedure QCoreApplication_removePostedEvents(receiver: QObjectH); cdecl; external Qt4PasLib name 'QCoreApplication_removePostedEvents'; procedure QCoreApplication_removePostedEvents(receiver: QObjectH; eventType: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_removePostedEvents2'; function QCoreApplication_hasPendingEvents(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_hasPendingEvents'; function QCoreApplication_notify(handle: QCoreApplicationH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_notify'; function QCoreApplication_startingUp(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_startingUp'; function QCoreApplication_closingDown(): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_closingDown'; procedure QCoreApplication_applicationDirPath(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationDirPath'; procedure QCoreApplication_applicationFilePath(retval: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_applicationFilePath'; function QCoreApplication_applicationPid(): int64; cdecl; external Qt4PasLib name 'QCoreApplication_applicationPid'; procedure QCoreApplication_setLibraryPaths(AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_setLibraryPaths'; procedure QCoreApplication_libraryPaths(retval: QStringListH); cdecl; external Qt4PasLib name 'QCoreApplication_libraryPaths'; procedure QCoreApplication_addLibraryPath(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_addLibraryPath'; procedure QCoreApplication_removeLibraryPath(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QCoreApplication_removeLibraryPath'; procedure QCoreApplication_installTranslator(messageFile: QTranslatorH); cdecl; external Qt4PasLib name 'QCoreApplication_installTranslator'; procedure QCoreApplication_removeTranslator(messageFile: QTranslatorH); cdecl; external Qt4PasLib name 'QCoreApplication_removeTranslator'; procedure QCoreApplication_translate(retval: PWideString; context: PAnsiChar; key: PAnsiChar; disambiguation: PAnsiChar = nil; encoding: QCoreApplicationEncoding = QCoreApplicationCodecForTr); cdecl; external Qt4PasLib name 'QCoreApplication_translate'; procedure QCoreApplication_translate(retval: PWideString; context: PAnsiChar; key: PAnsiChar; disambiguation: PAnsiChar; encoding: QCoreApplicationEncoding; n: Integer); cdecl; external Qt4PasLib name 'QCoreApplication_translate2'; procedure QCoreApplication_flush(); cdecl; external Qt4PasLib name 'QCoreApplication_flush'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QCoreApplication_watchUnixSignal(signal: Integer; watch: Boolean); cdecl; external Qt4PasLib name 'QCoreApplication_watchUnixSignal'; {$endif} function QCoreApplication_setEventFilter(handle: QCoreApplicationH; filter: QCoreApplicationEventFilter): QCoreApplicationEventFilter; cdecl; external Qt4PasLib name 'QCoreApplication_setEventFilter'; function QCoreApplication_filterEvent(handle: QCoreApplicationH; message: Pointer; result: PLong): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_filterEvent'; procedure QCoreApplication_quit(); cdecl; external Qt4PasLib name 'QCoreApplication_quit'; {$ifdef MSWINDOWS } function QCoreApplication_winEventFilter(handle: QCoreApplicationH; message: PMsg; result: PLong): Boolean; cdecl; external Qt4PasLib name 'QCoreApplication_winEventFilter'; {$endif} type QCoreApplication_aboutToQuit_Event = procedure () of object cdecl; QCoreApplication_unixSignal_Event = procedure (AnonParam1: Integer) of object cdecl; function QTranslator_create(parent: QObjectH = nil): QTranslatorH; cdecl; external Qt4PasLib name 'QTranslator_create'; procedure QTranslator_destroy(handle: QTranslatorH); cdecl; external Qt4PasLib name 'QTranslator_destroy'; procedure QTranslator_translate(handle: QTranslatorH; retval: PWideString; context: PAnsiChar; sourceText: PAnsiChar; disambiguation: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QTranslator_translate'; procedure QTranslator_translate(handle: QTranslatorH; retval: PWideString; context: PAnsiChar; sourceText: PAnsiChar; disambiguation: PAnsiChar; n: Integer); cdecl; external Qt4PasLib name 'QTranslator_translate2'; function QTranslator_isEmpty(handle: QTranslatorH): Boolean; cdecl; external Qt4PasLib name 'QTranslator_isEmpty'; function QTranslator_load(handle: QTranslatorH; filename: PWideString; directory: PWideString = nil; search_delimiters: PWideString = nil; suffix: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QTranslator_load'; function QTranslator_load(handle: QTranslatorH; data: PByte; len: Integer): Boolean; cdecl; external Qt4PasLib name 'QTranslator_load2'; function QTimer_create(parent: QObjectH = nil): QTimerH; cdecl; external Qt4PasLib name 'QTimer_create'; procedure QTimer_destroy(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_destroy'; function QTimer_isActive(handle: QTimerH): Boolean; cdecl; external Qt4PasLib name 'QTimer_isActive'; function QTimer_timerId(handle: QTimerH): Integer; cdecl; external Qt4PasLib name 'QTimer_timerId'; procedure QTimer_setInterval(handle: QTimerH; msec: Integer); cdecl; external Qt4PasLib name 'QTimer_setInterval'; function QTimer_interval(handle: QTimerH): Integer; cdecl; external Qt4PasLib name 'QTimer_interval'; procedure QTimer_setSingleShot(handle: QTimerH; singleShot: Boolean); cdecl; external Qt4PasLib name 'QTimer_setSingleShot'; function QTimer_isSingleShot(handle: QTimerH): Boolean; cdecl; external Qt4PasLib name 'QTimer_isSingleShot'; procedure QTimer_singleShot(msec: Integer; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QTimer_singleShot'; procedure QTimer_start(handle: QTimerH; msec: Integer); cdecl; external Qt4PasLib name 'QTimer_start'; procedure QTimer_start(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_start2'; procedure QTimer_stop(handle: QTimerH); cdecl; external Qt4PasLib name 'QTimer_stop'; type QTimer_timeout_Event = procedure () of object cdecl; type QVariantType = cardinal; // QVariant::Type (4) const QVariantInvalid = 0 { $0 }; QVariantBool = 1 { $1 }; QVariantInt = 2 { $2 }; QVariantUInt = 3 { $3 }; QVariantLongLong = 4 { $4 }; QVariantULongLong = 5 { $5 }; QVariantDouble = 6 { $6 }; QVariantChar = 7 { $7 }; QVariantMap = 8 { $8 }; QVariantList = 9 { $9 }; QVariantString = 10 { $a }; QVariantStringList = 11 { $b }; QVariantByteArray = 12 { $c }; QVariantBitArray = 13 { $d }; QVariantDate = 14 { $e }; QVariantTime = 15 { $f }; QVariantDateTime = 16 { $10 }; QVariantUrl = 17 { $11 }; QVariantLocale = 18 { $12 }; QVariantRect = 19 { $13 }; QVariantRectF = 20 { $14 }; QVariantSize = 21 { $15 }; QVariantSizeF = 22 { $16 }; QVariantLine = 23 { $17 }; QVariantLineF = 24 { $18 }; QVariantPoint = 25 { $19 }; QVariantPointF = 26 { $1a }; QVariantRegExp = 27 { $1b }; QVariantHash = 28 { $1c }; QVariantLastCoreType = 28 { $1c }; QVariantFont = 64 { $40 }; QVariantPixmap = 65 { $41 }; QVariantBrush = 66 { $42 }; QVariantColor = 67 { $43 }; QVariantPalette = 68 { $44 }; QVariantIcon = 69 { $45 }; QVariantImage = 70 { $46 }; QVariantPolygon = 71 { $47 }; QVariantRegion = 72 { $48 }; QVariantBitmap = 73 { $49 }; QVariantCursor = 74 { $4a }; QVariantSizePolicy = 75 { $4b }; QVariantKeySequence = 76 { $4c }; QVariantPen = 77 { $4d }; QVariantTextLength = 78 { $4e }; QVariantTextFormat = 79 { $4f }; QVariantMatrix = 80 { $50 }; QVariantTransform = 81 { $51 }; QVariantLastGuiType = 81 { $51 }; QVariantUserType = 127 { $7f }; QVariantLastType = 4294967295 { $ffffffff }; function QVariant_create(): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create'; procedure QVariant_destroy(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_destroy'; function QVariant_create(typeOrUserType: Integer; copy: Pointer): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create3'; function QVariant_create(other: QVariantH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create4'; function QVariant_create(s: QDataStreamH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create5'; function QVariant_create(i: Integer): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create6'; function QVariant_create(ll: int64): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create8'; function QVariant_create(ull: qword): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create9'; function QVariant_create(b: Boolean): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create10'; function QVariant_create(d: Double): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create11'; function QVariant_create(str: PAnsiChar): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create12'; function QVariant_create(bytearray: QByteArrayH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create13'; function QVariant_create(bitarray: QBitArrayH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create14'; function QVariant_create(_string: PWideString): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create15'; function QVariant_create(_string: QLatin1StringH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create16'; function QVariant_create(stringlist: QStringListH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create17'; function QVariant_create(qchar: PWideChar): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create18'; function QVariant_create(date: QDateH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create19'; function QVariant_create(time: QTimeH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create20'; function QVariant_create(datetime: QDateTimeH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create21'; function QVariant_create(pt: PQtPointF): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create25'; function QVariant_create(line: QLineH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create26'; function QVariant_create(line: QLineFH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create27'; function QVariant_create(rect: PRect): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create28'; function QVariant_create(rect: QRectFH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create29'; function QVariant_create(url: QUrlH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create30'; function QVariant_create(locale: QLocaleH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create31'; function QVariant_create(regExp: QRegExpH): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create32'; function QVariant_create(color: QtGlobalColor): QVariantH; cdecl; external Qt4PasLib name 'QVariant_create33'; function QVariant_type(handle: QVariantH): QVariantType; cdecl; external Qt4PasLib name 'QVariant_type'; function QVariant_userType(handle: QVariantH): Integer; cdecl; external Qt4PasLib name 'QVariant_userType'; function QVariant_typeName(handle: QVariantH): PAnsiChar; cdecl; external Qt4PasLib name 'QVariant_typeName'; function QVariant_canConvert(handle: QVariantH; t: QVariantType): Boolean; cdecl; external Qt4PasLib name 'QVariant_canConvert'; function QVariant_convert(handle: QVariantH; t: QVariantType): Boolean; cdecl; external Qt4PasLib name 'QVariant_convert'; function QVariant_isValid(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isValid'; function QVariant_isNull(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isNull'; procedure QVariant_clear(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_clear'; procedure QVariant_detach(handle: QVariantH); cdecl; external Qt4PasLib name 'QVariant_detach'; function QVariant_isDetached(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_isDetached'; function QVariant_toInt(handle: QVariantH; ok: PBoolean = nil): Integer; cdecl; external Qt4PasLib name 'QVariant_toInt'; function QVariant_toUInt(handle: QVariantH; ok: PBoolean = nil): LongWord; cdecl; external Qt4PasLib name 'QVariant_toUInt'; function QVariant_toLongLong(handle: QVariantH; ok: PBoolean = nil): int64; cdecl; external Qt4PasLib name 'QVariant_toLongLong'; function QVariant_toULongLong(handle: QVariantH; ok: PBoolean = nil): qword; cdecl; external Qt4PasLib name 'QVariant_toULongLong'; function QVariant_toBool(handle: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QVariant_toBool'; function QVariant_toDouble(handle: QVariantH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QVariant_toDouble'; procedure QVariant_toByteArray(handle: QVariantH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QVariant_toByteArray'; procedure QVariant_toBitArray(handle: QVariantH; retval: QBitArrayH); cdecl; external Qt4PasLib name 'QVariant_toBitArray'; procedure QVariant_toString(handle: QVariantH; retval: PWideString); cdecl; external Qt4PasLib name 'QVariant_toString'; procedure QVariant_toStringList(handle: QVariantH; retval: QStringListH); cdecl; external Qt4PasLib name 'QVariant_toStringList'; procedure QVariant_toChar(handle: QVariantH; retval: PWideChar); cdecl; external Qt4PasLib name 'QVariant_toChar'; procedure QVariant_toDate(handle: QVariantH; retval: QDateH); cdecl; external Qt4PasLib name 'QVariant_toDate'; procedure QVariant_toTime(handle: QVariantH; retval: QTimeH); cdecl; external Qt4PasLib name 'QVariant_toTime'; procedure QVariant_toDateTime(handle: QVariantH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QVariant_toDateTime'; procedure QVariant_toPoint(handle: QVariantH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QVariant_toPoint'; procedure QVariant_toPointF(handle: QVariantH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QVariant_toPointF'; procedure QVariant_toRect(handle: QVariantH; retval: PRect); cdecl; external Qt4PasLib name 'QVariant_toRect'; procedure QVariant_toSize(handle: QVariantH; retval: PSize); cdecl; external Qt4PasLib name 'QVariant_toSize'; procedure QVariant_toSizeF(handle: QVariantH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QVariant_toSizeF'; procedure QVariant_toLine(handle: QVariantH; retval: QLineH); cdecl; external Qt4PasLib name 'QVariant_toLine'; procedure QVariant_toLineF(handle: QVariantH; retval: QLineFH); cdecl; external Qt4PasLib name 'QVariant_toLineF'; procedure QVariant_toRectF(handle: QVariantH; retval: QRectFH); cdecl; external Qt4PasLib name 'QVariant_toRectF'; procedure QVariant_toUrl(handle: QVariantH; retval: QUrlH); cdecl; external Qt4PasLib name 'QVariant_toUrl'; procedure QVariant_toLocale(handle: QVariantH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QVariant_toLocale'; procedure QVariant_toRegExp(handle: QVariantH; retval: QRegExpH); cdecl; external Qt4PasLib name 'QVariant_toRegExp'; procedure QVariant_load(handle: QVariantH; ds: QDataStreamH); cdecl; external Qt4PasLib name 'QVariant_load'; procedure QVariant_save(handle: QVariantH; ds: QDataStreamH); cdecl; external Qt4PasLib name 'QVariant_save'; function QVariant_typeToName(_type: QVariantType): PAnsiChar; cdecl; external Qt4PasLib name 'QVariant_typeToName'; function QVariant_nameToType(name: PAnsiChar): QVariantType; cdecl; external Qt4PasLib name 'QVariant_nameToType'; function QVariant_constData(handle: QVariantH): Pointer; cdecl; external Qt4PasLib name 'QVariant_constData'; type QMetaMethodAccess = ( // QMetaMethod::Access (1) QMetaMethodPrivate, QMetaMethodProtected, QMetaMethodPublic ); QMetaMethodMethodType = ( // QMetaMethod::MethodType (1) QMetaMethodMethod, QMetaMethodSignal, QMetaMethodSlot, QMetaMethodConstructor ); QMetaMethodAttributes = ( //QMetaMethod::Attributes (2) QMetaMethodCompatibility = $1, QMetaMethodCloned = $2, QMetaMethodScriptable = $4 ); function QMetaMethod_create(): QMetaMethodH; cdecl; external Qt4PasLib name 'QMetaMethod_create'; procedure QMetaMethod_destroy(handle: QMetaMethodH); cdecl; external Qt4PasLib name 'QMetaMethod_destroy'; function QMetaMethod_signature(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_signature'; function QMetaMethod_typeName(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_typeName'; function QMetaMethod_tag(handle: QMetaMethodH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaMethod_tag'; function QMetaMethod_access(handle: QMetaMethodH): QMetaMethodAccess; cdecl; external Qt4PasLib name 'QMetaMethod_access'; function QMetaMethod_methodType(handle: QMetaMethodH): QMetaMethodMethodType; cdecl; external Qt4PasLib name 'QMetaMethod_methodType'; function QMetaMethod_attributes(handle: QMetaMethodH): Integer; cdecl; external Qt4PasLib name 'QMetaMethod_attributes'; function QMetaMethod_enclosingMetaObject(handle: QMetaMethodH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaMethod_enclosingMetaObject'; function QMetaEnum_create(): QMetaEnumH; cdecl; external Qt4PasLib name 'QMetaEnum_create'; procedure QMetaEnum_destroy(handle: QMetaEnumH); cdecl; external Qt4PasLib name 'QMetaEnum_destroy'; function QMetaEnum_name(handle: QMetaEnumH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_name'; function QMetaEnum_isFlag(handle: QMetaEnumH): Boolean; cdecl; external Qt4PasLib name 'QMetaEnum_isFlag'; function QMetaEnum_keyCount(handle: QMetaEnumH): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keyCount'; function QMetaEnum_key(handle: QMetaEnumH; index: Integer): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_key'; function QMetaEnum_value(handle: QMetaEnumH; index: Integer): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_value'; function QMetaEnum_scope(handle: QMetaEnumH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_scope'; function QMetaEnum_keyToValue(handle: QMetaEnumH; key: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keyToValue'; function QMetaEnum_valueToKey(handle: QMetaEnumH; value: Integer): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaEnum_valueToKey'; function QMetaEnum_keysToValue(handle: QMetaEnumH; keys: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QMetaEnum_keysToValue'; procedure QMetaEnum_valueToKeys(handle: QMetaEnumH; retval: QByteArrayH; value: Integer); cdecl; external Qt4PasLib name 'QMetaEnum_valueToKeys'; function QMetaEnum_enclosingMetaObject(handle: QMetaEnumH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaEnum_enclosingMetaObject'; function QMetaEnum_isValid(handle: QMetaEnumH): Boolean; cdecl; external Qt4PasLib name 'QMetaEnum_isValid'; function QMetaProperty_create(): QMetaPropertyH; cdecl; external Qt4PasLib name 'QMetaProperty_create'; procedure QMetaProperty_destroy(handle: QMetaPropertyH); cdecl; external Qt4PasLib name 'QMetaProperty_destroy'; function QMetaProperty_name(handle: QMetaPropertyH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaProperty_name'; function QMetaProperty_typeName(handle: QMetaPropertyH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaProperty_typeName'; function QMetaProperty_type(handle: QMetaPropertyH): QVariantType; cdecl; external Qt4PasLib name 'QMetaProperty_type'; function QMetaProperty_userType(handle: QMetaPropertyH): Integer; cdecl; external Qt4PasLib name 'QMetaProperty_userType'; function QMetaProperty_isReadable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isReadable'; function QMetaProperty_isWritable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isWritable'; function QMetaProperty_isResettable(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isResettable'; function QMetaProperty_isDesignable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isDesignable'; function QMetaProperty_isScriptable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isScriptable'; function QMetaProperty_isStored(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isStored'; function QMetaProperty_isEditable(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isEditable'; function QMetaProperty_isUser(handle: QMetaPropertyH; obj: QObjectH = nil): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isUser'; function QMetaProperty_isFlagType(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isFlagType'; function QMetaProperty_isEnumType(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isEnumType'; procedure QMetaProperty_enumerator(handle: QMetaPropertyH; retval: QMetaEnumH); cdecl; external Qt4PasLib name 'QMetaProperty_enumerator'; function QMetaProperty_hasNotifySignal(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_hasNotifySignal'; procedure QMetaProperty_notifySignal(handle: QMetaPropertyH; retval: QMetaMethodH); cdecl; external Qt4PasLib name 'QMetaProperty_notifySignal'; function QMetaProperty_notifySignalIndex(handle: QMetaPropertyH): Integer; cdecl; external Qt4PasLib name 'QMetaProperty_notifySignalIndex'; procedure QMetaProperty_read(handle: QMetaPropertyH; retval: QVariantH; obj: QObjectH); cdecl; external Qt4PasLib name 'QMetaProperty_read'; function QMetaProperty_write(handle: QMetaPropertyH; obj: QObjectH; value: QVariantH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_write'; function QMetaProperty_reset(handle: QMetaPropertyH; obj: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_reset'; function QMetaProperty_hasStdCppSet(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_hasStdCppSet'; function QMetaProperty_isValid(handle: QMetaPropertyH): Boolean; cdecl; external Qt4PasLib name 'QMetaProperty_isValid'; function QMetaProperty_enclosingMetaObject(handle: QMetaPropertyH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaProperty_enclosingMetaObject'; function QMetaClassInfo_create(): QMetaClassInfoH; cdecl; external Qt4PasLib name 'QMetaClassInfo_create'; procedure QMetaClassInfo_destroy(handle: QMetaClassInfoH); cdecl; external Qt4PasLib name 'QMetaClassInfo_destroy'; function QMetaClassInfo_name(handle: QMetaClassInfoH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaClassInfo_name'; function QMetaClassInfo_value(handle: QMetaClassInfoH): PAnsiChar; cdecl; external Qt4PasLib name 'QMetaClassInfo_value'; function QMetaClassInfo_enclosingMetaObject(handle: QMetaClassInfoH): QMetaObjectH; cdecl; external Qt4PasLib name 'QMetaClassInfo_enclosingMetaObject'; function QModelIndex_create(): QModelIndexH; cdecl; external Qt4PasLib name 'QModelIndex_create'; procedure QModelIndex_destroy(handle: QModelIndexH); cdecl; external Qt4PasLib name 'QModelIndex_destroy'; function QModelIndex_create(other: QModelIndexH): QModelIndexH; cdecl; external Qt4PasLib name 'QModelIndex_create2'; function QModelIndex_row(handle: QModelIndexH): Integer; cdecl; external Qt4PasLib name 'QModelIndex_row'; function QModelIndex_column(handle: QModelIndexH): Integer; cdecl; external Qt4PasLib name 'QModelIndex_column'; function QModelIndex_internalPointer(handle: QModelIndexH): Pointer; cdecl; external Qt4PasLib name 'QModelIndex_internalPointer'; function QModelIndex_internalId(handle: QModelIndexH): int64; cdecl; external Qt4PasLib name 'QModelIndex_internalId'; procedure QModelIndex_parent(handle: QModelIndexH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QModelIndex_parent'; procedure QModelIndex_sibling(handle: QModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QModelIndex_sibling'; procedure QModelIndex_child(handle: QModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QModelIndex_child'; procedure QModelIndex_data(handle: QModelIndexH; retval: QVariantH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QModelIndex_data'; function QModelIndex_flags(handle: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QModelIndex_flags'; function QModelIndex_model(handle: QModelIndexH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QModelIndex_model'; function QModelIndex_isValid(handle: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QModelIndex_isValid'; function QPersistentModelIndex_create(): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create'; procedure QPersistentModelIndex_destroy(handle: QPersistentModelIndexH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_destroy'; function QPersistentModelIndex_create(index: QModelIndexH): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create2'; function QPersistentModelIndex_create(other: QPersistentModelIndexH): QPersistentModelIndexH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_create3'; function QPersistentModelIndex_row(handle: QPersistentModelIndexH): Integer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_row'; function QPersistentModelIndex_column(handle: QPersistentModelIndexH): Integer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_column'; function QPersistentModelIndex_internalPointer(handle: QPersistentModelIndexH): Pointer; cdecl; external Qt4PasLib name 'QPersistentModelIndex_internalPointer'; function QPersistentModelIndex_internalId(handle: QPersistentModelIndexH): int64; cdecl; external Qt4PasLib name 'QPersistentModelIndex_internalId'; procedure QPersistentModelIndex_parent(handle: QPersistentModelIndexH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_parent'; procedure QPersistentModelIndex_sibling(handle: QPersistentModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QPersistentModelIndex_sibling'; procedure QPersistentModelIndex_child(handle: QPersistentModelIndexH; retval: QModelIndexH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QPersistentModelIndex_child'; procedure QPersistentModelIndex_data(handle: QPersistentModelIndexH; retval: QVariantH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QPersistentModelIndex_data'; function QPersistentModelIndex_flags(handle: QPersistentModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QPersistentModelIndex_flags'; function QPersistentModelIndex_model(handle: QPersistentModelIndexH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_model'; function QPersistentModelIndex_isValid(handle: QPersistentModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QPersistentModelIndex_isValid'; function QAbstractItemModel_hasIndex(handle: QAbstractItemModelH; row: Integer; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_hasIndex'; procedure QAbstractItemModel_index(handle: QAbstractItemModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractItemModel_index'; procedure QAbstractItemModel_parent(handle: QAbstractItemModelH; retval: QModelIndexH; child: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_parent'; procedure QAbstractItemModel_sibling(handle: QAbstractItemModelH; retval: QModelIndexH; row: Integer; column: Integer; idx: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_sibling'; function QAbstractItemModel_rowCount(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QAbstractItemModel_rowCount'; function QAbstractItemModel_columnCount(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QAbstractItemModel_columnCount'; function QAbstractItemModel_hasChildren(handle: QAbstractItemModelH; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_hasChildren'; procedure QAbstractItemModel_data(handle: QAbstractItemModelH; retval: QVariantH; index: QModelIndexH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QAbstractItemModel_data'; function QAbstractItemModel_setData(handle: QAbstractItemModelH; index: QModelIndexH; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_setData'; procedure QAbstractItemModel_headerData(handle: QAbstractItemModelH; retval: QVariantH; section: Integer; orientation: QtOrientation; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QAbstractItemModel_headerData'; function QAbstractItemModel_setHeaderData(handle: QAbstractItemModelH; section: Integer; orientation: QtOrientation; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_setHeaderData'; procedure QAbstractItemModel_mimeTypes(handle: QAbstractItemModelH; retval: QStringListH); cdecl; external Qt4PasLib name 'QAbstractItemModel_mimeTypes'; function QAbstractItemModel_dropMimeData(handle: QAbstractItemModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_dropMimeData'; function QAbstractItemModel_supportedDropActions(handle: QAbstractItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QAbstractItemModel_supportedDropActions'; function QAbstractItemModel_supportedDragActions(handle: QAbstractItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QAbstractItemModel_supportedDragActions'; procedure QAbstractItemModel_setSupportedDragActions(handle: QAbstractItemModelH; AnonParam1: QtDropActions); cdecl; external Qt4PasLib name 'QAbstractItemModel_setSupportedDragActions'; function QAbstractItemModel_insertRows(handle: QAbstractItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertRows'; function QAbstractItemModel_insertColumns(handle: QAbstractItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertColumns'; function QAbstractItemModel_removeRows(handle: QAbstractItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeRows'; function QAbstractItemModel_removeColumns(handle: QAbstractItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeColumns'; function QAbstractItemModel_insertRow(handle: QAbstractItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertRow'; function QAbstractItemModel_insertColumn(handle: QAbstractItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_insertColumn'; function QAbstractItemModel_removeRow(handle: QAbstractItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeRow'; function QAbstractItemModel_removeColumn(handle: QAbstractItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_removeColumn'; procedure QAbstractItemModel_fetchMore(handle: QAbstractItemModelH; parent: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_fetchMore'; function QAbstractItemModel_canFetchMore(handle: QAbstractItemModelH; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_canFetchMore'; function QAbstractItemModel_flags(handle: QAbstractItemModelH; index: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QAbstractItemModel_flags'; procedure QAbstractItemModel_sort(handle: QAbstractItemModelH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QAbstractItemModel_sort'; procedure QAbstractItemModel_buddy(handle: QAbstractItemModelH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_buddy'; procedure QAbstractItemModel_match(handle: QAbstractItemModelH; retval: PPtrIntArray; start: QModelIndexH; role: Integer; value: QVariantH; hits: Integer; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QAbstractItemModel_match'; procedure QAbstractItemModel_span(handle: QAbstractItemModelH; retval: PSize; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemModel_span'; function QAbstractItemModel_submit(handle: QAbstractItemModelH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemModel_submit'; procedure QAbstractItemModel_revert(handle: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QAbstractItemModel_revert'; procedure QAbstractTableModel_index(handle: QAbstractTableModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractTableModel_index'; function QAbstractTableModel_dropMimeData(handle: QAbstractTableModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractTableModel_dropMimeData'; procedure QAbstractListModel_index(handle: QAbstractListModelH; retval: QModelIndexH; row: Integer; column: Integer = 0; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QAbstractListModel_index'; function QAbstractListModel_dropMimeData(handle: QAbstractListModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractListModel_dropMimeData'; type QAbstractItemModel_dataChanged_Event = procedure (topLeft: QModelIndexH; bottomRight: QModelIndexH) of object cdecl; QAbstractItemModel_headerDataChanged_Event = procedure (orientation: QtOrientation; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_layoutChanged_Event = procedure () of object cdecl; QAbstractItemModel_layoutAboutToBeChanged_Event = procedure () of object cdecl; QAbstractItemModel_rowsAboutToBeInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsAboutToBeRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_rowsRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsAboutToBeInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsInserted_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsAboutToBeRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_columnsRemoved_Event = procedure (parent: QModelIndexH; first: Integer; last: Integer) of object cdecl; QAbstractItemModel_modelAboutToBeReset_Event = procedure () of object cdecl; QAbstractItemModel_modelReset_Event = procedure () of object cdecl; function QAbstractEventDispatcher_instance(thread: QThreadH = nil): QAbstractEventDispatcherH; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_instance'; function QAbstractEventDispatcher_processEvents(handle: QAbstractEventDispatcherH; flags: QEventLoopProcessEventsFlags): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_processEvents'; function QAbstractEventDispatcher_hasPendingEvents(handle: QAbstractEventDispatcherH): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_hasPendingEvents'; procedure QAbstractEventDispatcher_registerSocketNotifier(handle: QAbstractEventDispatcherH; notifier: QSocketNotifierH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerSocketNotifier'; procedure QAbstractEventDispatcher_unregisterSocketNotifier(handle: QAbstractEventDispatcherH; notifier: QSocketNotifierH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterSocketNotifier'; function QAbstractEventDispatcher_registerTimer(handle: QAbstractEventDispatcherH; interval: Integer; _object: QObjectH): Integer; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerTimer'; procedure QAbstractEventDispatcher_registerTimer(handle: QAbstractEventDispatcherH; timerId: Integer; interval: Integer; _object: QObjectH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_registerTimer2'; function QAbstractEventDispatcher_unregisterTimer(handle: QAbstractEventDispatcherH; timerId: Integer): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterTimer'; function QAbstractEventDispatcher_unregisterTimers(handle: QAbstractEventDispatcherH; _object: QObjectH): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_unregisterTimers'; procedure QAbstractEventDispatcher_wakeUp(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_wakeUp'; procedure QAbstractEventDispatcher_interrupt(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_interrupt'; procedure QAbstractEventDispatcher_flush(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_flush'; procedure QAbstractEventDispatcher_startingUp(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_startingUp'; procedure QAbstractEventDispatcher_closingDown(handle: QAbstractEventDispatcherH); cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_closingDown'; function QAbstractEventDispatcher_setEventFilter(handle: QAbstractEventDispatcherH; filter: QAbstractEventDispatcherEventFilter): QAbstractEventDispatcherEventFilter; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_setEventFilter'; function QAbstractEventDispatcher_filterEvent(handle: QAbstractEventDispatcherH; message: Pointer): Boolean; cdecl; external Qt4PasLib name 'QAbstractEventDispatcher_filterEvent'; function QMimeData_create(): QMimeDataH; cdecl; external Qt4PasLib name 'QMimeData_create'; procedure QMimeData_destroy(handle: QMimeDataH); cdecl; external Qt4PasLib name 'QMimeData_destroy'; function QMimeData_hasUrls(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasUrls'; procedure QMimeData_text(handle: QMimeDataH; retval: PWideString); cdecl; external Qt4PasLib name 'QMimeData_text'; procedure QMimeData_setText(handle: QMimeDataH; text: PWideString); cdecl; external Qt4PasLib name 'QMimeData_setText'; function QMimeData_hasText(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasText'; procedure QMimeData_html(handle: QMimeDataH; retval: PWideString); cdecl; external Qt4PasLib name 'QMimeData_html'; procedure QMimeData_setHtml(handle: QMimeDataH; html: PWideString); cdecl; external Qt4PasLib name 'QMimeData_setHtml'; function QMimeData_hasHtml(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasHtml'; procedure QMimeData_imageData(handle: QMimeDataH; retval: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_imageData'; procedure QMimeData_setImageData(handle: QMimeDataH; image: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_setImageData'; function QMimeData_hasImage(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasImage'; procedure QMimeData_colorData(handle: QMimeDataH; retval: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_colorData'; procedure QMimeData_setColorData(handle: QMimeDataH; color: QVariantH); cdecl; external Qt4PasLib name 'QMimeData_setColorData'; function QMimeData_hasColor(handle: QMimeDataH): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasColor'; procedure QMimeData_data(handle: QMimeDataH; retval: QByteArrayH; mimetype: PWideString); cdecl; external Qt4PasLib name 'QMimeData_data'; procedure QMimeData_setData(handle: QMimeDataH; mimetype: PWideString; data: QByteArrayH); cdecl; external Qt4PasLib name 'QMimeData_setData'; procedure QMimeData_removeFormat(handle: QMimeDataH; mimetype: PWideString); cdecl; external Qt4PasLib name 'QMimeData_removeFormat'; function QMimeData_hasFormat(handle: QMimeDataH; mimetype: PWideString): Boolean; cdecl; external Qt4PasLib name 'QMimeData_hasFormat'; procedure QMimeData_formats(handle: QMimeDataH; retval: QStringListH); cdecl; external Qt4PasLib name 'QMimeData_formats'; procedure QMimeData_clear(handle: QMimeDataH); cdecl; external Qt4PasLib name 'QMimeData_clear'; type QSocketNotifierType = ( // QSocketNotifier::Type (1) QSocketNotifierRead, QSocketNotifierWrite, QSocketNotifierException ); function QSocketNotifier_create(socket: Integer; AnonParam2: QSocketNotifierType; parent: QObjectH = nil): QSocketNotifierH; cdecl; external Qt4PasLib name 'QSocketNotifier_create'; procedure QSocketNotifier_destroy(handle: QSocketNotifierH); cdecl; external Qt4PasLib name 'QSocketNotifier_destroy'; function QSocketNotifier_socket(handle: QSocketNotifierH): Integer; cdecl; external Qt4PasLib name 'QSocketNotifier_socket'; function QSocketNotifier_type(handle: QSocketNotifierH): QSocketNotifierType; cdecl; external Qt4PasLib name 'QSocketNotifier_type'; function QSocketNotifier_isEnabled(handle: QSocketNotifierH): Boolean; cdecl; external Qt4PasLib name 'QSocketNotifier_isEnabled'; procedure QSocketNotifier_setEnabled(handle: QSocketNotifierH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSocketNotifier_setEnabled'; type QSocketNotifier_activated_Event = procedure (socket: Integer) of object cdecl; type QThreadPriority = ( // QThread::Priority (1) QThreadIdlePriority, QThreadLowestPriority, QThreadLowPriority, QThreadNormalPriority, QThreadHighPriority, QThreadHighestPriority, QThreadTimeCriticalPriority, QThreadInheritPriority ); function QThread_currentThreadId(): QtHANDLE; cdecl; external Qt4PasLib name 'QThread_currentThreadId'; function QThread_currentThread(): QThreadH; cdecl; external Qt4PasLib name 'QThread_currentThread'; function QThread_idealThreadCount(): Integer; cdecl; external Qt4PasLib name 'QThread_idealThreadCount'; procedure QThread_yieldCurrentThread(); cdecl; external Qt4PasLib name 'QThread_yieldCurrentThread'; function QThread_create(parent: QObjectH = nil): QThreadH; cdecl; external Qt4PasLib name 'QThread_create'; procedure QThread_destroy(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_destroy'; procedure QThread_setPriority(handle: QThreadH; priority: QThreadPriority); cdecl; external Qt4PasLib name 'QThread_setPriority'; function QThread_priority(handle: QThreadH): QThreadPriority; cdecl; external Qt4PasLib name 'QThread_priority'; function QThread_isFinished(handle: QThreadH): Boolean; cdecl; external Qt4PasLib name 'QThread_isFinished'; function QThread_isRunning(handle: QThreadH): Boolean; cdecl; external Qt4PasLib name 'QThread_isRunning'; procedure QThread_setStackSize(handle: QThreadH; stackSize: LongWord); cdecl; external Qt4PasLib name 'QThread_setStackSize'; function QThread_stackSize(handle: QThreadH): LongWord; cdecl; external Qt4PasLib name 'QThread_stackSize'; procedure QThread_exit(handle: QThreadH; retcode: Integer = 0); cdecl; external Qt4PasLib name 'QThread_exit'; procedure QThread_start(handle: QThreadH; AnonParam1: QThreadPriority = QThreadInheritPriority); cdecl; external Qt4PasLib name 'QThread_start'; procedure QThread_terminate(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_terminate'; procedure QThread_quit(handle: QThreadH); cdecl; external Qt4PasLib name 'QThread_quit'; function QThread_wait(handle: QThreadH; time: Longword): Boolean; cdecl; external Qt4PasLib name 'QThread_wait'; type QThread_started_Event = procedure () of object cdecl; QThread_finished_Event = procedure () of object cdecl; QThread_terminated_Event = procedure () of object cdecl; function QLCLThread_create(parent: QObjectH = nil): QLCLThreadH; cdecl; external Qt4PasLib name 'QLCLThread_create'; procedure QLCLThread_destroy(handle: QLCLThreadH); cdecl; external Qt4PasLib name 'QLCLThread_destroy'; procedure QLCLThread_override_run(handle: QLCLThreadH; hook: QLCLThread_run_Override); cdecl; external Qt4PasLib name 'QLCLThread_override_run'; function QLCLThread_exec(handle: QLCLThreadH): Integer; cdecl; external Qt4PasLib name 'QLCLThread_exec'; type QCharDirection = ( // QChar::Direction (1) QCharDirL, QCharDirR, QCharDirEN, QCharDirES, QCharDirET, QCharDirAN, QCharDirCS, QCharDirB, QCharDirS, QCharDirWS, QCharDirON, QCharDirLRE, QCharDirLRO, QCharDirAL, QCharDirRLE, QCharDirRLO, QCharDirPDF, QCharDirNSM, QCharDirBN ); QCharDecomposition = ( // QChar::Decomposition (1) QCharNoDecomposition, QCharCanonical, QCharFont, QCharNoBreak, QCharInitial, QCharMedial, QCharFinal, QCharIsolated, QCharCircle, QCharSuper, QCharSub, QCharVertical, QCharWide, QCharNarrow, QCharSmall, QCharSquare, QCharCompat, QCharFraction ); QCharJoining = ( // QChar::Joining (1) QCharOtherJoining, QCharDual, QCharRight, QCharCenter ); QCharUnicodeVersion = ( // QChar::UnicodeVersion (1) QCharUnicode_Unassigned, QCharUnicode_1_1, QCharUnicode_2_0, QCharUnicode_2_1_2, QCharUnicode_3_0, QCharUnicode_3_1, QCharUnicode_3_2, QCharUnicode_4_0, QCharUnicode_4_1, QCharUnicode_5_0 ); QCharSpecialCharacter = ( //QChar::SpecialCharacter (2) QCharNull = $0000, QCharNbsp = $00a0, QCharLineSeparator = $2028, QCharParagraphSeparator = $2029, QCharByteOrderMark = $feff, QCharObjectReplacementCharacter = $fffc, QCharReplacementCharacter = $fffd, QCharByteOrderSwapped = $fffe ); QCharCombiningClass = ( //QChar::CombiningClass (2) QCharCombining_BelowLeftAttached = 200, QCharCombining_BelowAttached = 202, QCharCombining_BelowRightAttached = 204, QCharCombining_LeftAttached = 208, QCharCombining_RightAttached = 210, QCharCombining_AboveLeftAttached = 212, QCharCombining_AboveAttached = 214, QCharCombining_AboveRightAttached = 216, QCharCombining_BelowLeft = 218, QCharCombining_Below = 220, QCharCombining_BelowRight = 222, QCharCombining_Left = 224, QCharCombining_Right = 226, QCharCombining_AboveLeft = 228, QCharCombining_Above = 230, QCharCombining_AboveRight = 232, QCharCombining_DoubleBelow = 233, QCharCombining_DoubleAbove = 234, QCharCombining_IotaSubscript = 240 ); type QCharCategory = cardinal; // QChar::Category (4) const QCharNoCategory = 0 { $0 }; QCharMark_NonSpacing = 1 { $1 }; QCharMark_SpacingCombining = 2 { $2 }; QCharMark_Enclosing = 3 { $3 }; QCharNumber_DecimalDigit = 4 { $4 }; QCharNumber_Letter = 5 { $5 }; QCharNumber_Other = 6 { $6 }; QCharSeparator_Space = 7 { $7 }; QCharSeparator_Line = 8 { $8 }; QCharSeparator_Paragraph = 9 { $9 }; QCharOther_Control = 10 { $a }; QCharOther_Format = 11 { $b }; QCharOther_Surrogate = 12 { $c }; QCharOther_PrivateUse = 13 { $d }; QCharOther_NotAssigned = 14 { $e }; QCharLetter_Uppercase = 15 { $f }; QCharLetter_Lowercase = 16 { $10 }; QCharLetter_Titlecase = 17 { $11 }; QCharLetter_Modifier = 18 { $12 }; QCharLetter_Other = 19 { $13 }; QCharPunctuation_Connector = 20 { $14 }; QCharPunctuation_Dash = 21 { $15 }; QCharPunctuation_Open = 22 { $16 }; QCharPunctuation_Close = 23 { $17 }; QCharPunctuation_InitialQuote = 24 { $18 }; QCharPunctuation_FinalQuote = 25 { $19 }; QCharPunctuation_Other = 26 { $1a }; QCharSymbol_Math = 27 { $1b }; QCharSymbol_Currency = 28 { $1c }; QCharSymbol_Modifier = 29 { $1d }; QCharSymbol_Other = 30 { $1e }; QCharPunctuation_Dask = 21 { $15 }; function QChar_create(): QCharH; cdecl; external Qt4PasLib name 'QChar_create'; procedure QChar_destroy(handle: QCharH); cdecl; external Qt4PasLib name 'QChar_destroy'; function QChar_create(c: char): QCharH; cdecl; external Qt4PasLib name 'QChar_create2'; function QChar_create(c: char; r: char): QCharH; cdecl; external Qt4PasLib name 'QChar_create4'; function QChar_create(rc: Word): QCharH; cdecl; external Qt4PasLib name 'QChar_create5'; function QChar_create(rc: ShortInt): QCharH; cdecl; external Qt4PasLib name 'QChar_create6'; function QChar_create(rc: LongWord): QCharH; cdecl; external Qt4PasLib name 'QChar_create7'; function QChar_create(rc: Integer): QCharH; cdecl; external Qt4PasLib name 'QChar_create8'; function QChar_create(sc: QCharSpecialCharacter): QCharH; cdecl; external Qt4PasLib name 'QChar_create9'; function QChar_category(handle: QCharH): QCharCategory; cdecl; external Qt4PasLib name 'QChar_category'; function QChar_direction(handle: QCharH): QCharDirection; cdecl; external Qt4PasLib name 'QChar_direction'; function QChar_joining(handle: QCharH): QCharJoining; cdecl; external Qt4PasLib name 'QChar_joining'; function QChar_hasMirrored(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_hasMirrored'; function QChar_combiningClass(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_combiningClass'; procedure QChar_mirroredChar(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_mirroredChar'; procedure QChar_decomposition(handle: QCharH; retval: PWideString); cdecl; external Qt4PasLib name 'QChar_decomposition'; function QChar_decompositionTag(handle: QCharH): QCharDecomposition; cdecl; external Qt4PasLib name 'QChar_decompositionTag'; function QChar_digitValue(handle: QCharH): Integer; cdecl; external Qt4PasLib name 'QChar_digitValue'; procedure QChar_toLower(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toLower'; procedure QChar_toUpper(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toUpper'; procedure QChar_toTitleCase(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toTitleCase'; procedure QChar_toCaseFolded(handle: QCharH; retval: PWideChar); cdecl; external Qt4PasLib name 'QChar_toCaseFolded'; function QChar_unicodeVersion(handle: QCharH): QCharUnicodeVersion; cdecl; external Qt4PasLib name 'QChar_unicodeVersion'; function QChar_toAscii(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_toAscii'; function QChar_toLatin1(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_toLatin1'; function QChar_unicode(handle: QCharH): Word; cdecl; external Qt4PasLib name 'QChar_unicode'; procedure QChar_fromAscii(retval: PWideChar; c: char); cdecl; external Qt4PasLib name 'QChar_fromAscii'; procedure QChar_fromLatin1(retval: PWideChar; c: char); cdecl; external Qt4PasLib name 'QChar_fromLatin1'; function QChar_isNull(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isNull'; function QChar_isPrint(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isPrint'; function QChar_isPunct(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isPunct'; function QChar_isSpace(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isSpace'; function QChar_isMark(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isMark'; function QChar_isLetter(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLetter'; function QChar_isNumber(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isNumber'; function QChar_isLetterOrNumber(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLetterOrNumber'; function QChar_isDigit(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isDigit'; function QChar_isSymbol(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isSymbol'; function QChar_isLower(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLower'; function QChar_isUpper(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isUpper'; function QChar_isTitleCase(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isTitleCase'; function QChar_isHighSurrogate(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isHighSurrogate'; function QChar_isLowSurrogate(handle: QCharH): Boolean; cdecl; external Qt4PasLib name 'QChar_isLowSurrogate'; function QChar_cell(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_cell'; function QChar_row(handle: QCharH): char; cdecl; external Qt4PasLib name 'QChar_row'; procedure QChar_setCell(handle: QCharH; cell: char); cdecl; external Qt4PasLib name 'QChar_setCell'; procedure QChar_setRow(handle: QCharH; row: char); cdecl; external Qt4PasLib name 'QChar_setRow'; function QChar_surrogateToUcs4(high: Word; low: Word): LongWord; cdecl; external Qt4PasLib name 'QChar_surrogateToUcs4'; function QChar_surrogateToUcs4(high: PWideChar; low: PWideChar): LongWord; cdecl; external Qt4PasLib name 'QChar_surrogateToUcs42'; function QChar_highSurrogate(ucs4: LongWord): Word; cdecl; external Qt4PasLib name 'QChar_highSurrogate'; function QChar_lowSurrogate(ucs4: LongWord): Word; cdecl; external Qt4PasLib name 'QChar_lowSurrogate'; function QSize_create(): QSizeH; cdecl; external Qt4PasLib name 'QSize_create'; procedure QSize_destroy(handle: QSizeH); cdecl; external Qt4PasLib name 'QSize_destroy'; function QSize_create(w: Integer; h: Integer): QSizeH; cdecl; external Qt4PasLib name 'QSize_create2'; function QSize_isNull(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isNull'; function QSize_isEmpty(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isEmpty'; function QSize_isValid(handle: QSizeH): Boolean; cdecl; external Qt4PasLib name 'QSize_isValid'; function QSize_width(handle: QSizeH): Integer; cdecl; external Qt4PasLib name 'QSize_width'; function QSize_height(handle: QSizeH): Integer; cdecl; external Qt4PasLib name 'QSize_height'; procedure QSize_setWidth(handle: QSizeH; w: Integer); cdecl; external Qt4PasLib name 'QSize_setWidth'; procedure QSize_setHeight(handle: QSizeH; h: Integer); cdecl; external Qt4PasLib name 'QSize_setHeight'; procedure QSize_transpose(handle: QSizeH); cdecl; external Qt4PasLib name 'QSize_transpose'; procedure QSize_scale(handle: QSizeH; w: Integer; h: Integer; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSize_scale'; procedure QSize_scale(handle: QSizeH; s: PSize; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSize_scale2'; procedure QSize_expandedTo(handle: QSizeH; retval: PSize; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QSize_expandedTo'; procedure QSize_boundedTo(handle: QSizeH; retval: PSize; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QSize_boundedTo'; function QSize_rwidth(handle: QSizeH): PInteger; cdecl; external Qt4PasLib name 'QSize_rwidth'; function QSize_rheight(handle: QSizeH): PInteger; cdecl; external Qt4PasLib name 'QSize_rheight'; function QSizeF_create(): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create'; procedure QSizeF_destroy(handle: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_destroy'; function QSizeF_create(sz: PSize): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create2'; function QSizeF_create(w: qreal; h: qreal): QSizeFH; cdecl; external Qt4PasLib name 'QSizeF_create3'; function QSizeF_isNull(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isNull'; function QSizeF_isEmpty(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isEmpty'; function QSizeF_isValid(handle: QSizeFH): Boolean; cdecl; external Qt4PasLib name 'QSizeF_isValid'; function QSizeF_width(handle: QSizeFH): qreal; cdecl; external Qt4PasLib name 'QSizeF_width'; function QSizeF_height(handle: QSizeFH): qreal; cdecl; external Qt4PasLib name 'QSizeF_height'; procedure QSizeF_setWidth(handle: QSizeFH; w: qreal); cdecl; external Qt4PasLib name 'QSizeF_setWidth'; procedure QSizeF_setHeight(handle: QSizeFH; h: qreal); cdecl; external Qt4PasLib name 'QSizeF_setHeight'; procedure QSizeF_transpose(handle: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_transpose'; procedure QSizeF_scale(handle: QSizeFH; w: qreal; h: qreal; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSizeF_scale'; procedure QSizeF_scale(handle: QSizeFH; s: QSizeFH; mode: QtAspectRatioMode); cdecl; external Qt4PasLib name 'QSizeF_scale2'; procedure QSizeF_expandedTo(handle: QSizeFH; retval: QSizeFH; AnonParam1: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_expandedTo'; procedure QSizeF_boundedTo(handle: QSizeFH; retval: QSizeFH; AnonParam1: QSizeFH); cdecl; external Qt4PasLib name 'QSizeF_boundedTo'; function QSizeF_rwidth(handle: QSizeFH): PQReal; cdecl; external Qt4PasLib name 'QSizeF_rwidth'; function QSizeF_rheight(handle: QSizeFH): PQReal; cdecl; external Qt4PasLib name 'QSizeF_rheight'; procedure QSizeF_toSize(handle: QSizeFH; retval: PSize); cdecl; external Qt4PasLib name 'QSizeF_toSize'; type QStringSplitBehavior = ( // QString::SplitBehavior (1) QStringKeepEmptyParts, QStringSkipEmptyParts ); QStringNormalizationForm = ( // QString::NormalizationForm (1) QStringNormalizationForm_D, QStringNormalizationForm_C, QStringNormalizationForm_KD, QStringNormalizationForm_KC ); type QStringSectionFlag = cardinal; // QString::SectionFlag QStringSectionFlags = QStringSectionFlag; //QFlags<> (3) const QStringSectionDefault = $00; QStringSectionSkipEmpty = $01; QStringSectionIncludeLeadingSep = $02; QStringSectionIncludeTrailingSep = $04; QStringSectionCaseInsensitiveSeps = $08; function QString_create(): QStringH; cdecl; external Qt4PasLib name 'QString_create'; procedure QString_destroy(handle: QStringH); cdecl; external Qt4PasLib name 'QString_destroy'; function QString_create(unicode: PWideChar; size: Integer): QStringH; cdecl; external Qt4PasLib name 'QString_create2'; function QString_create(c: PWideChar): QStringH; cdecl; external Qt4PasLib name 'QString_create3'; function QString_create(latin1: QLatin1StringH): QStringH; cdecl; external Qt4PasLib name 'QString_create5'; function QString_create(AnonParam1: PWideString): QStringH; cdecl; external Qt4PasLib name 'QString_create6'; function QString_size(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_size'; function QString_count(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_count'; function QString_length(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_length'; function QString_isEmpty(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isEmpty'; procedure QString_resize(handle: QStringH; size: Integer); cdecl; external Qt4PasLib name 'QString_resize'; procedure QString_fill(handle: QStringH; retval: PWideString; c: PWideChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fill'; procedure QString_truncate(handle: QStringH; pos: Integer); cdecl; external Qt4PasLib name 'QString_truncate'; procedure QString_chop(handle: QStringH; n: Integer); cdecl; external Qt4PasLib name 'QString_chop'; function QString_capacity(handle: QStringH): Integer; cdecl; external Qt4PasLib name 'QString_capacity'; procedure QString_reserve(handle: QStringH; size: Integer); cdecl; external Qt4PasLib name 'QString_reserve'; procedure QString_squeeze(handle: QStringH); cdecl; external Qt4PasLib name 'QString_squeeze'; function QString_unicode(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_unicode'; function QString_data(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_data'; function QString_constData(handle: QStringH): PWideChar; cdecl; external Qt4PasLib name 'QString_constData'; procedure QString_detach(handle: QStringH); cdecl; external Qt4PasLib name 'QString_detach'; function QString_isDetached(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isDetached'; procedure QString_clear(handle: QStringH); cdecl; external Qt4PasLib name 'QString_clear'; procedure QString_at(handle: QStringH; retval: PWideChar; i: Integer); cdecl; external Qt4PasLib name 'QString_at'; procedure QString_arg(handle: QStringH; retval: PWideString; a: int64; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg'; procedure QString_arg(handle: QStringH; retval: PWideString; a: qword; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg2'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Longword; fieldwidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg4'; procedure QString_arg(handle: QStringH; retval: PWideString; a: ShortInt; fieldWidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg7'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Word; fieldWidth: Integer; base: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg8'; procedure QString_arg(handle: QStringH; retval: PWideString; a: Double; fieldWidth: Integer; fmt: char; prec: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg9'; procedure QString_arg(handle: QStringH; retval: PWideString; a: char; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg10'; procedure QString_arg(handle: QStringH; retval: PWideString; a: PWideChar; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg11'; procedure QString_arg(handle: QStringH; retval: PWideString; a: PWideString; fieldWidth: Integer; fillChar: PWideChar); cdecl; external Qt4PasLib name 'QString_arg12'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString); cdecl; external Qt4PasLib name 'QString_arg13'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString); cdecl; external Qt4PasLib name 'QString_arg14'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString); cdecl; external Qt4PasLib name 'QString_arg15'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString); cdecl; external Qt4PasLib name 'QString_arg16'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString); cdecl; external Qt4PasLib name 'QString_arg17'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString); cdecl; external Qt4PasLib name 'QString_arg18'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString; a8: PWideString); cdecl; external Qt4PasLib name 'QString_arg19'; procedure QString_arg(handle: QStringH; retval: PWideString; a1: PWideString; a2: PWideString; a3: PWideString; a4: PWideString; a5: PWideString; a6: PWideString; a7: PWideString; a8: PWideString; a9: PWideString); cdecl; external Qt4PasLib name 'QString_arg20'; function QString_indexOf(handle: QStringH; c: PWideChar; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf'; function QString_indexOf(handle: QStringH; s: PWideString; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf2'; function QString_indexOf(handle: QStringH; s: QLatin1StringH; from: Integer = 0; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_indexOf3'; function QString_lastIndexOf(handle: QStringH; c: PWideChar; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf'; function QString_lastIndexOf(handle: QStringH; s: PWideString; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf2'; function QString_lastIndexOf(handle: QStringH; s: QLatin1StringH; from: Integer = -1; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf3'; function QString_contains(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QString_contains'; function QString_contains(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QString_contains2'; function QString_count(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_count2'; function QString_count(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_count3'; function QString_indexOf(handle: QStringH; AnonParam1: QRegExpH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QString_indexOf4'; function QString_lastIndexOf(handle: QStringH; AnonParam1: QRegExpH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QString_lastIndexOf4'; function QString_contains(handle: QStringH; rx: QRegExpH): boolean; cdecl; external Qt4PasLib name 'QString_contains3'; function QString_count(handle: QStringH; AnonParam1: QRegExpH): Integer; cdecl; external Qt4PasLib name 'QString_count4'; procedure QString_section(handle: QStringH; retval: PWideString; sep: PWideChar; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section'; procedure QString_section(handle: QStringH; retval: PWideString; in_sep: PWideString; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section2'; procedure QString_section(handle: QStringH; retval: PWideString; reg: QRegExpH; start: Integer; _end: Integer = -1; flags: QStringSectionFlags = QStringSectionDefault); cdecl; external Qt4PasLib name 'QString_section3'; procedure QString_left(handle: QStringH; retval: PWideString; n: Integer); cdecl; external Qt4PasLib name 'QString_left'; procedure QString_right(handle: QStringH; retval: PWideString; n: Integer); cdecl; external Qt4PasLib name 'QString_right'; procedure QString_mid(handle: QStringH; retval: PWideString; position: Integer; n: Integer = -1); cdecl; external Qt4PasLib name 'QString_mid'; function QString_startsWith(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith'; function QString_startsWith(handle: QStringH; s: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith2'; function QString_startsWith(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_startsWith3'; function QString_endsWith(handle: QStringH; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith'; function QString_endsWith(handle: QStringH; s: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith2'; function QString_endsWith(handle: QStringH; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive): Boolean; cdecl; external Qt4PasLib name 'QString_endsWith3'; procedure QString_leftJustified(handle: QStringH; retval: PWideString; width: Integer; fill: PWideChar; trunc: Boolean = False); cdecl; external Qt4PasLib name 'QString_leftJustified'; procedure QString_rightJustified(handle: QStringH; retval: PWideString; width: Integer; fill: PWideChar; trunc: Boolean = False); cdecl; external Qt4PasLib name 'QString_rightJustified'; procedure QString_toLower(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toLower'; procedure QString_toUpper(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toUpper'; procedure QString_toCaseFolded(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_toCaseFolded'; procedure QString_trimmed(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_trimmed'; procedure QString_simplified(handle: QStringH; retval: PWideString); cdecl; external Qt4PasLib name 'QString_simplified'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; c: PWideChar); cdecl; external Qt4PasLib name 'QString_insert'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; uc: PWideChar; len: Integer); cdecl; external Qt4PasLib name 'QString_insert2'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QString_insert3'; procedure QString_insert(handle: QStringH; retval: PWideString; i: Integer; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_insert4'; procedure QString_append(handle: QStringH; retval: PWideString; c: PWideChar); cdecl; external Qt4PasLib name 'QString_append'; procedure QString_append(handle: QStringH; retval: PWideString; s: PWideString); cdecl; external Qt4PasLib name 'QString_append2'; procedure QString_append(handle: QStringH; retval: PWideString; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_append3'; procedure QString_prepend(handle: QStringH; retval: PWideString; c: PWideChar); cdecl; external Qt4PasLib name 'QString_prepend'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: PWideString); cdecl; external Qt4PasLib name 'QString_prepend2'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: QLatin1StringH); cdecl; external Qt4PasLib name 'QString_prepend3'; procedure QString_remove(handle: QStringH; retval: PWideString; i: Integer; len: Integer); cdecl; external Qt4PasLib name 'QString_remove'; procedure QString_remove(handle: QStringH; retval: PWideString; c: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_remove2'; procedure QString_remove(handle: QStringH; retval: PWideString; s: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_remove3'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; after: PWideChar); cdecl; external Qt4PasLib name 'QString_replace'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; s: PWideChar; slen: Integer); cdecl; external Qt4PasLib name 'QString_replace2'; procedure QString_replace(handle: QStringH; retval: PWideString; i: Integer; len: Integer; after: PWideString); cdecl; external Qt4PasLib name 'QString_replace3'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideChar; after: PWideChar; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace4'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideChar; blen: Integer; after: PWideChar; alen: Integer; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace5'; procedure QString_replace(handle: QStringH; retval: PWideString; before: QLatin1StringH; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace6'; procedure QString_replace(handle: QStringH; retval: PWideString; before: QLatin1StringH; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace7'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideString; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace8'; procedure QString_replace(handle: QStringH; retval: PWideString; before: PWideString; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace9'; procedure QString_replace(handle: QStringH; retval: PWideString; c: PWideChar; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace10'; procedure QString_replace(handle: QStringH; retval: PWideString; c: PWideChar; after: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_replace11'; procedure QString_replace(handle: QStringH; retval: PWideString; rx: QRegExpH; after: PWideString); cdecl; external Qt4PasLib name 'QString_replace12'; procedure QString_remove(handle: QStringH; retval: PWideString; rx: QRegExpH); cdecl; external Qt4PasLib name 'QString_remove4'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: PWideString; behavior: QStringSplitBehavior = QStringKeepEmptyParts; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_split'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: PWideChar; behavior: QStringSplitBehavior = QStringKeepEmptyParts; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QString_split2'; procedure QString_split(handle: QStringH; retval: QStringListH; sep: QRegExpH; behavior: QStringSplitBehavior = QStringKeepEmptyParts); cdecl; external Qt4PasLib name 'QString_split3'; procedure QString_normalized(handle: QStringH; retval: PWideString; mode: QStringNormalizationForm); cdecl; external Qt4PasLib name 'QString_normalized'; procedure QString_normalized(handle: QStringH; retval: PWideString; mode: QStringNormalizationForm; version: QCharUnicodeVersion); cdecl; external Qt4PasLib name 'QString_normalized2'; procedure QString_repeated(handle: QStringH; retval: PWideString; times: Integer); cdecl; external Qt4PasLib name 'QString_repeated'; function QString_utf16(handle: QStringH): PWord; cdecl; external Qt4PasLib name 'QString_utf16'; procedure QString_toAscii(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toAscii'; procedure QString_toLatin1(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toLatin1'; procedure QString_toUtf8(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toUtf8'; procedure QString_toLocal8Bit(handle: QStringH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QString_toLocal8Bit'; procedure QString_fromAscii(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromAscii'; procedure QString_fromLatin1(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromLatin1'; procedure QString_fromUtf8(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUtf8'; procedure QString_fromLocal8Bit(retval: PWideString; AnonParam1: PAnsiChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromLocal8Bit'; procedure QString_fromUtf16(retval: PWideString; AnonParam1: PWord; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUtf16'; procedure QString_fromUcs4(retval: PWideString; AnonParam1: PLongWord; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromUcs4'; procedure QString_fromRawData(retval: PWideString; AnonParam1: PWideChar; size: Integer); cdecl; external Qt4PasLib name 'QString_fromRawData'; function QString_toWCharArray(handle: QStringH; _array: PWideChar): Integer; cdecl; external Qt4PasLib name 'QString_toWCharArray'; procedure QString_fromWCharArray(retval: PWideString; AnonParam1: PWideChar; size: Integer = -1); cdecl; external Qt4PasLib name 'QString_fromWCharArray'; procedure QString_setUnicode(handle: QStringH; retval: PWideString; unicode: PWideChar; size: Integer); cdecl; external Qt4PasLib name 'QString_setUnicode'; procedure QString_setUtf16(handle: QStringH; retval: PWideString; utf16: PWord; size: Integer); cdecl; external Qt4PasLib name 'QString_setUtf16'; function QString_compare(handle: QStringH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_compare'; function QString_compare(handle: QStringH; s: PWideString; cs: QtCaseSensitivity): Integer; cdecl; external Qt4PasLib name 'QString_compare2'; function QString_compare(handle: QStringH; other: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare3'; function QString_compare(s1: PWideString; s2: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_compare4'; function QString_compare(s1: PWideString; s2: PWideString; cs: QtCaseSensitivity): Integer; cdecl; external Qt4PasLib name 'QString_compare5'; function QString_compare(s1: PWideString; s2: QLatin1StringH; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare6'; function QString_compare(s1: QLatin1StringH; s2: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QString_compare7'; function QString_localeAwareCompare(handle: QStringH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_localeAwareCompare'; function QString_localeAwareCompare(s1: PWideString; s2: PWideString): Integer; cdecl; external Qt4PasLib name 'QString_localeAwareCompare2'; function QString_toShort(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): ShortInt; cdecl; external Qt4PasLib name 'QString_toShort'; function QString_toUShort(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Word; cdecl; external Qt4PasLib name 'QString_toUShort'; function QString_toInt(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Integer; cdecl; external Qt4PasLib name 'QString_toInt'; function QString_toUInt(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): LongWord; cdecl; external Qt4PasLib name 'QString_toUInt'; function QString_toLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Long; cdecl; external Qt4PasLib name 'QString_toLong'; function QString_toULong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): Longword; cdecl; external Qt4PasLib name 'QString_toULong'; function QString_toLongLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): int64; cdecl; external Qt4PasLib name 'QString_toLongLong'; function QString_toULongLong(handle: QStringH; ok: PBoolean = nil; base: Integer = 10): qword; cdecl; external Qt4PasLib name 'QString_toULongLong'; function QString_toFloat(handle: QStringH; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QString_toFloat'; function QString_toDouble(handle: QStringH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QString_toDouble'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: ShortInt; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Word; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum2'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum3'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum4'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum7'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_setNum8'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Single; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_setNum9'; procedure QString_setNum(handle: QStringH; retval: PWideString; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_setNum10'; procedure QString_number(retval: PWideString; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number'; procedure QString_number(retval: PWideString; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number2'; procedure QString_number(retval: PWideString; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number5'; procedure QString_number(retval: PWideString; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QString_number6'; procedure QString_number(retval: PWideString; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QString_number7'; function QString_create(ch: PAnsiChar): QStringH; cdecl; external Qt4PasLib name 'QString_create7'; function QString_create(a: QByteArrayH): QStringH; cdecl; external Qt4PasLib name 'QString_create8'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: PAnsiChar); cdecl; external Qt4PasLib name 'QString_prepend4'; procedure QString_prepend(handle: QStringH; retval: PWideString; s: QByteArrayH); cdecl; external Qt4PasLib name 'QString_prepend5'; procedure QString_append(handle: QStringH; retval: PWideString; s: PAnsiChar); cdecl; external Qt4PasLib name 'QString_append4'; procedure QString_append(handle: QStringH; retval: PWideString; s: QByteArrayH); cdecl; external Qt4PasLib name 'QString_append5'; procedure QString_push_back(handle: QStringH; c: PWideChar); cdecl; external Qt4PasLib name 'QString_push_back'; procedure QString_push_back(handle: QStringH; s: PWideString); cdecl; external Qt4PasLib name 'QString_push_back2'; procedure QString_push_front(handle: QStringH; c: PWideChar); cdecl; external Qt4PasLib name 'QString_push_front'; procedure QString_push_front(handle: QStringH; s: PWideString); cdecl; external Qt4PasLib name 'QString_push_front2'; function QString_isNull(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isNull'; function QString_isSimpleText(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isSimpleText'; function QString_isRightToLeft(handle: QStringH): Boolean; cdecl; external Qt4PasLib name 'QString_isRightToLeft'; function QLatin1String_create(s: PAnsiChar): QLatin1StringH; cdecl; external Qt4PasLib name 'QLatin1String_create'; procedure QLatin1String_destroy(handle: QLatin1StringH); cdecl; external Qt4PasLib name 'QLatin1String_destroy'; function QLatin1String_latin1(handle: QLatin1StringH): PAnsiChar; cdecl; external Qt4PasLib name 'QLatin1String_latin1'; function QStringList_create(): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create'; procedure QStringList_destroy(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_destroy'; function QStringList_create(i: PWideString): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create2'; function QStringList_create(l: QStringListH): QStringListH; cdecl; external Qt4PasLib name 'QStringList_create3'; procedure QStringList_sort(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_sort'; function QStringList_removeDuplicates(handle: QStringListH): Integer; cdecl; external Qt4PasLib name 'QStringList_removeDuplicates'; procedure QStringList_join(handle: QStringListH; retval: PWideString; sep: PWideString); cdecl; external Qt4PasLib name 'QStringList_join'; procedure QStringList_filter(handle: QStringListH; retval: QStringListH; str: PWideString; cs: QtCaseSensitivity = QtCaseSensitive); cdecl; external Qt4PasLib name 'QStringList_filter'; function QStringList_contains(handle: QStringListH; str: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): boolean; cdecl; external Qt4PasLib name 'QStringList_contains'; function QStringList_replaceInStrings(handle: QStringListH; before: PWideString; after: PWideString; cs: QtCaseSensitivity = QtCaseSensitive): QStringListH; cdecl; external Qt4PasLib name 'QStringList_replaceInStrings'; procedure QStringList_filter(handle: QStringListH; retval: QStringListH; rx: QRegExpH); cdecl; external Qt4PasLib name 'QStringList_filter2'; function QStringList_replaceInStrings(handle: QStringListH; rx: QRegExpH; after: PWideString): QStringListH; cdecl; external Qt4PasLib name 'QStringList_replaceInStrings2'; function QStringList_indexOf(handle: QStringListH; rx: QRegExpH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStringList_indexOf'; function QStringList_lastIndexOf(handle: QStringListH; rx: QRegExpH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QStringList_lastIndexOf'; function QStringList_size(handle: QStringListH): Integer; cdecl; external Qt4PasLib name 'QStringList_size'; function QStringList_isEmpty(handle: QStringListH): Boolean; cdecl; external Qt4PasLib name 'QStringList_isEmpty'; procedure QStringList_clear(handle: QStringListH); cdecl; external Qt4PasLib name 'QStringList_clear'; procedure QStringList_at(handle: QStringListH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QStringList_at'; procedure QStringList_append(handle: QStringListH; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_append'; procedure QStringList_prepend(handle: QStringListH; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_prepend'; procedure QStringList_insert(handle: QStringListH; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_insert'; procedure QStringList_replace(handle: QStringListH; i: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QStringList_replace'; procedure QStringList_removeAt(handle: QStringListH; i: Integer); cdecl; external Qt4PasLib name 'QStringList_removeAt'; function QStringList_removeAll(handle: QStringListH; s: PWideString): Integer; cdecl; external Qt4PasLib name 'QStringList_removeAll'; procedure QStringList_takeAt(handle: QStringListH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QStringList_takeAt'; procedure QStringList_takeFirst(handle: QStringListH; retval: PWideString); cdecl; external Qt4PasLib name 'QStringList_takeFirst'; procedure QStringList_takeLast(handle: QStringListH; retval: PWideString); cdecl; external Qt4PasLib name 'QStringList_takeLast'; procedure QStringList_move(handle: QStringListH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QStringList_move'; procedure QStringList_swap(handle: QStringListH; i: Integer; j: Integer); cdecl; external Qt4PasLib name 'QStringList_swap'; function QRect_create(): QRectH; cdecl; external Qt4PasLib name 'QRect_create'; procedure QRect_destroy(handle: QRectH); cdecl; external Qt4PasLib name 'QRect_destroy'; function QRect_create(topleft: PQtPoint; bottomright: PQtPoint): QRectH; cdecl; external Qt4PasLib name 'QRect_create2'; function QRect_create(topleft: PQtPoint; size: PSize): QRectH; cdecl; external Qt4PasLib name 'QRect_create3'; function QRect_create(left: Integer; top: Integer; width: Integer; height: Integer): QRectH; cdecl; external Qt4PasLib name 'QRect_create4'; function QRect_isNull(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isNull'; function QRect_isEmpty(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isEmpty'; function QRect_isValid(handle: QRectH): Boolean; cdecl; external Qt4PasLib name 'QRect_isValid'; function QRect_left(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_left'; function QRect_top(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_top'; function QRect_right(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_right'; function QRect_bottom(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_bottom'; procedure QRect_normalized(handle: QRectH; retval: PRect); cdecl; external Qt4PasLib name 'QRect_normalized'; function QRect_x(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_x'; function QRect_y(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_y'; procedure QRect_setLeft(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setLeft'; procedure QRect_setTop(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setTop'; procedure QRect_setRight(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setRight'; procedure QRect_setBottom(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_setBottom'; procedure QRect_setX(handle: QRectH; x: Integer); cdecl; external Qt4PasLib name 'QRect_setX'; procedure QRect_setY(handle: QRectH; y: Integer); cdecl; external Qt4PasLib name 'QRect_setY'; procedure QRect_setTopLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setTopLeft'; procedure QRect_setBottomRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setBottomRight'; procedure QRect_setTopRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setTopRight'; procedure QRect_setBottomLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_setBottomLeft'; procedure QRect_topLeft(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_topLeft'; procedure QRect_bottomRight(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_bottomRight'; procedure QRect_topRight(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_topRight'; procedure QRect_bottomLeft(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_bottomLeft'; procedure QRect_center(handle: QRectH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QRect_center'; procedure QRect_moveLeft(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveLeft'; procedure QRect_moveTop(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveTop'; procedure QRect_moveRight(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveRight'; procedure QRect_moveBottom(handle: QRectH; pos: Integer); cdecl; external Qt4PasLib name 'QRect_moveBottom'; procedure QRect_moveTopLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTopLeft'; procedure QRect_moveBottomRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveBottomRight'; procedure QRect_moveTopRight(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTopRight'; procedure QRect_moveBottomLeft(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveBottomLeft'; procedure QRect_moveCenter(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveCenter'; procedure QRect_translate(handle: QRectH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRect_translate'; procedure QRect_translate(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_translate2'; procedure QRect_translated(handle: QRectH; retval: PRect; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRect_translated'; procedure QRect_translated(handle: QRectH; retval: PRect; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_translated2'; procedure QRect_moveTo(handle: QRectH; x: Integer; t: Integer); cdecl; external Qt4PasLib name 'QRect_moveTo'; procedure QRect_moveTo(handle: QRectH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRect_moveTo2'; procedure QRect_setRect(handle: QRectH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRect_setRect'; procedure QRect_getRect(handle: QRectH; x: PInteger; y: PInteger; w: PInteger; h: PInteger); cdecl; external Qt4PasLib name 'QRect_getRect'; procedure QRect_setCoords(handle: QRectH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_setCoords'; procedure QRect_getCoords(handle: QRectH; x1: PInteger; y1: PInteger; x2: PInteger; y2: PInteger); cdecl; external Qt4PasLib name 'QRect_getCoords'; procedure QRect_adjust(handle: QRectH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_adjust'; procedure QRect_adjusted(handle: QRectH; retval: PRect; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QRect_adjusted'; procedure QRect_size(handle: QRectH; retval: PSize); cdecl; external Qt4PasLib name 'QRect_size'; function QRect_width(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_width'; function QRect_height(handle: QRectH): Integer; cdecl; external Qt4PasLib name 'QRect_height'; procedure QRect_setWidth(handle: QRectH; w: Integer); cdecl; external Qt4PasLib name 'QRect_setWidth'; procedure QRect_setHeight(handle: QRectH; h: Integer); cdecl; external Qt4PasLib name 'QRect_setHeight'; procedure QRect_setSize(handle: QRectH; s: PSize); cdecl; external Qt4PasLib name 'QRect_setSize'; function QRect_contains(handle: QRectH; p: PQtPoint; proper: Boolean = False): Boolean; cdecl; external Qt4PasLib name 'QRect_contains'; function QRect_contains(handle: QRectH; x: Integer; y: Integer): Boolean; cdecl; external Qt4PasLib name 'QRect_contains2'; function QRect_contains(handle: QRectH; x: Integer; y: Integer; proper: Boolean): Boolean; cdecl; external Qt4PasLib name 'QRect_contains3'; function QRect_contains(handle: QRectH; r: PRect; proper: Boolean = False): Boolean; cdecl; external Qt4PasLib name 'QRect_contains4'; procedure QRect_unite(handle: QRectH; retval: PRect; r: PRect); cdecl; external Qt4PasLib name 'QRect_unite'; procedure QRect_united(handle: QRectH; retval: PRect; other: PRect); cdecl; external Qt4PasLib name 'QRect_united'; procedure QRect_intersect(handle: QRectH; retval: PRect; r: PRect); cdecl; external Qt4PasLib name 'QRect_intersect'; procedure QRect_intersected(handle: QRectH; retval: PRect; other: PRect); cdecl; external Qt4PasLib name 'QRect_intersected'; function QRect_intersects(handle: QRectH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRect_intersects'; function QRectF_create(): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create'; procedure QRectF_destroy(handle: QRectFH); cdecl; external Qt4PasLib name 'QRectF_destroy'; function QRectF_create(topleft: PQtPointF; size: QSizeFH): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create2'; function QRectF_create(topleft: PQtPointF; bottomRight: PQtPointF): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create3'; function QRectF_create(left: qreal; top: qreal; width: qreal; height: qreal): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create4'; function QRectF_create(rect: PRect): QRectFH; cdecl; external Qt4PasLib name 'QRectF_create5'; function QRectF_isNull(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isNull'; function QRectF_isEmpty(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isEmpty'; function QRectF_isValid(handle: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_isValid'; procedure QRectF_normalized(handle: QRectFH; retval: QRectFH); cdecl; external Qt4PasLib name 'QRectF_normalized'; function QRectF_left(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_left'; function QRectF_top(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_top'; function QRectF_right(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_right'; function QRectF_bottom(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_bottom'; function QRectF_x(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_x'; function QRectF_y(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_y'; procedure QRectF_setLeft(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setLeft'; procedure QRectF_setTop(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setTop'; procedure QRectF_setRight(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setRight'; procedure QRectF_setBottom(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setBottom'; procedure QRectF_setX(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setX'; procedure QRectF_setY(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_setY'; procedure QRectF_topLeft(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_topLeft'; procedure QRectF_bottomRight(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_bottomRight'; procedure QRectF_topRight(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_topRight'; procedure QRectF_bottomLeft(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_bottomLeft'; procedure QRectF_center(handle: QRectFH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_center'; procedure QRectF_setTopLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setTopLeft'; procedure QRectF_setBottomRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setBottomRight'; procedure QRectF_setTopRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setTopRight'; procedure QRectF_setBottomLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_setBottomLeft'; procedure QRectF_moveLeft(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveLeft'; procedure QRectF_moveTop(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveTop'; procedure QRectF_moveRight(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveRight'; procedure QRectF_moveBottom(handle: QRectFH; pos: qreal); cdecl; external Qt4PasLib name 'QRectF_moveBottom'; procedure QRectF_moveTopLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTopLeft'; procedure QRectF_moveBottomRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveBottomRight'; procedure QRectF_moveTopRight(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTopRight'; procedure QRectF_moveBottomLeft(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveBottomLeft'; procedure QRectF_moveCenter(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveCenter'; procedure QRectF_translate(handle: QRectFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QRectF_translate'; procedure QRectF_translate(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_translate2'; procedure QRectF_translated(handle: QRectFH; retval: QRectFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QRectF_translated'; procedure QRectF_translated(handle: QRectFH; retval: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_translated2'; procedure QRectF_moveTo(handle: QRectFH; x: qreal; t: qreal); cdecl; external Qt4PasLib name 'QRectF_moveTo'; procedure QRectF_moveTo(handle: QRectFH; p: PQtPointF); cdecl; external Qt4PasLib name 'QRectF_moveTo2'; procedure QRectF_setRect(handle: QRectFH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QRectF_setRect'; procedure QRectF_getRect(handle: QRectFH; x: PQReal; y: PQReal; w: PQReal; h: PQReal); cdecl; external Qt4PasLib name 'QRectF_getRect'; procedure QRectF_setCoords(handle: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_setCoords'; procedure QRectF_getCoords(handle: QRectFH; x1: PQReal; y1: PQReal; x2: PQReal; y2: PQReal); cdecl; external Qt4PasLib name 'QRectF_getCoords'; procedure QRectF_adjust(handle: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_adjust'; procedure QRectF_adjusted(handle: QRectFH; retval: QRectFH; x1: qreal; y1: qreal; x2: qreal; y2: qreal); cdecl; external Qt4PasLib name 'QRectF_adjusted'; procedure QRectF_size(handle: QRectFH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QRectF_size'; function QRectF_width(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_width'; function QRectF_height(handle: QRectFH): qreal; cdecl; external Qt4PasLib name 'QRectF_height'; procedure QRectF_setWidth(handle: QRectFH; w: qreal); cdecl; external Qt4PasLib name 'QRectF_setWidth'; procedure QRectF_setHeight(handle: QRectFH; h: qreal); cdecl; external Qt4PasLib name 'QRectF_setHeight'; procedure QRectF_setSize(handle: QRectFH; s: QSizeFH); cdecl; external Qt4PasLib name 'QRectF_setSize'; function QRectF_contains(handle: QRectFH; p: PQtPointF): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains'; function QRectF_contains(handle: QRectFH; x: qreal; y: qreal): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains2'; function QRectF_contains(handle: QRectFH; r: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_contains3'; procedure QRectF_unite(handle: QRectFH; retval: QRectFH; r: QRectFH); cdecl; external Qt4PasLib name 'QRectF_unite'; procedure QRectF_united(handle: QRectFH; retval: QRectFH; other: QRectFH); cdecl; external Qt4PasLib name 'QRectF_united'; procedure QRectF_intersect(handle: QRectFH; retval: QRectFH; r: QRectFH); cdecl; external Qt4PasLib name 'QRectF_intersect'; procedure QRectF_intersected(handle: QRectFH; retval: QRectFH; other: QRectFH); cdecl; external Qt4PasLib name 'QRectF_intersected'; function QRectF_intersects(handle: QRectFH; r: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QRectF_intersects'; procedure QRectF_toRect(handle: QRectFH; retval: PRect); cdecl; external Qt4PasLib name 'QRectF_toRect'; procedure QRectF_toAlignedRect(handle: QRectFH; retval: PRect); cdecl; external Qt4PasLib name 'QRectF_toAlignedRect'; type QDateMonthNameType = ( //QDate::MonthNameType (2) QDateDateFormat = 0, QDateStandaloneFormat ); function QDate_create(): QDateH; cdecl; external Qt4PasLib name 'QDate_create'; procedure QDate_destroy(handle: QDateH); cdecl; external Qt4PasLib name 'QDate_destroy'; function QDate_create(y: Integer; m: Integer; d: Integer): QDateH; cdecl; external Qt4PasLib name 'QDate_create2'; function QDate_isNull(handle: QDateH): Boolean; cdecl; external Qt4PasLib name 'QDate_isNull'; function QDate_isValid(handle: QDateH): Boolean; cdecl; external Qt4PasLib name 'QDate_isValid'; function QDate_year(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_year'; function QDate_month(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_month'; function QDate_day(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_day'; function QDate_dayOfWeek(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_dayOfWeek'; function QDate_dayOfYear(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_dayOfYear'; function QDate_daysInMonth(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysInMonth'; function QDate_daysInYear(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysInYear'; function QDate_weekNumber(handle: QDateH; yearNum: PInteger = nil): Integer; cdecl; external Qt4PasLib name 'QDate_weekNumber'; procedure QDate_shortMonthName(retval: PWideString; month: Integer); cdecl; external Qt4PasLib name 'QDate_shortMonthName'; procedure QDate_shortMonthName(retval: PWideString; month: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_shortMonthName2'; procedure QDate_shortDayName(retval: PWideString; weekday: Integer); cdecl; external Qt4PasLib name 'QDate_shortDayName'; procedure QDate_shortDayName(retval: PWideString; weekday: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_shortDayName2'; procedure QDate_longMonthName(retval: PWideString; month: Integer); cdecl; external Qt4PasLib name 'QDate_longMonthName'; procedure QDate_longMonthName(retval: PWideString; month: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_longMonthName2'; procedure QDate_longDayName(retval: PWideString; weekday: Integer); cdecl; external Qt4PasLib name 'QDate_longDayName'; procedure QDate_longDayName(retval: PWideString; weekday: Integer; _type: QDateMonthNameType); cdecl; external Qt4PasLib name 'QDate_longDayName2'; procedure QDate_toString(handle: QDateH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDate_toString'; procedure QDate_toString(handle: QDateH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDate_toString2'; function QDate_setYMD(handle: QDateH; y: Integer; m: Integer; d: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_setYMD'; function QDate_setDate(handle: QDateH; year: Integer; month: Integer; day: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_setDate'; procedure QDate_getDate(handle: QDateH; year: PInteger; month: PInteger; day: PInteger); cdecl; external Qt4PasLib name 'QDate_getDate'; procedure QDate_addDays(handle: QDateH; retval: QDateH; days: Integer); cdecl; external Qt4PasLib name 'QDate_addDays'; procedure QDate_addMonths(handle: QDateH; retval: QDateH; months: Integer); cdecl; external Qt4PasLib name 'QDate_addMonths'; procedure QDate_addYears(handle: QDateH; retval: QDateH; years: Integer); cdecl; external Qt4PasLib name 'QDate_addYears'; function QDate_daysTo(handle: QDateH; AnonParam1: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_daysTo'; procedure QDate_currentDate(retval: QDateH); cdecl; external Qt4PasLib name 'QDate_currentDate'; procedure QDate_fromString(retval: QDateH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDate_fromString'; procedure QDate_fromString(retval: QDateH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDate_fromString2'; function QDate_isValid(y: Integer; m: Integer; d: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_isValid2'; function QDate_isLeapYear(year: Integer): Boolean; cdecl; external Qt4PasLib name 'QDate_isLeapYear'; function QDate_gregorianToJulian(y: Integer; m: Integer; d: Integer): LongWord; cdecl; external Qt4PasLib name 'QDate_gregorianToJulian'; procedure QDate_julianToGregorian(jd: LongWord; y: PInteger; m: PInteger; d: PInteger); cdecl; external Qt4PasLib name 'QDate_julianToGregorian'; procedure QDate_fromJulianDay(retval: QDateH; jd: Integer); cdecl; external Qt4PasLib name 'QDate_fromJulianDay'; function QDate_toJulianDay(handle: QDateH): Integer; cdecl; external Qt4PasLib name 'QDate_toJulianDay'; function QTime_create(): QTimeH; cdecl; external Qt4PasLib name 'QTime_create'; procedure QTime_destroy(handle: QTimeH); cdecl; external Qt4PasLib name 'QTime_destroy'; function QTime_create(h: Integer; m: Integer; s: Integer = 0; ms: Integer = 0): QTimeH; cdecl; external Qt4PasLib name 'QTime_create2'; function QTime_isNull(handle: QTimeH): Boolean; cdecl; external Qt4PasLib name 'QTime_isNull'; function QTime_isValid(handle: QTimeH): Boolean; cdecl; external Qt4PasLib name 'QTime_isValid'; function QTime_hour(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_hour'; function QTime_minute(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_minute'; function QTime_second(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_second'; function QTime_msec(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_msec'; procedure QTime_toString(handle: QTimeH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QTime_toString'; procedure QTime_toString(handle: QTimeH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QTime_toString2'; function QTime_setHMS(handle: QTimeH; h: Integer; m: Integer; s: Integer; ms: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QTime_setHMS'; procedure QTime_addSecs(handle: QTimeH; retval: QTimeH; secs: Integer); cdecl; external Qt4PasLib name 'QTime_addSecs'; function QTime_secsTo(handle: QTimeH; AnonParam1: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_secsTo'; procedure QTime_addMSecs(handle: QTimeH; retval: QTimeH; ms: Integer); cdecl; external Qt4PasLib name 'QTime_addMSecs'; function QTime_msecsTo(handle: QTimeH; AnonParam1: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_msecsTo'; procedure QTime_currentTime(retval: QTimeH); cdecl; external Qt4PasLib name 'QTime_currentTime'; procedure QTime_fromString(retval: QTimeH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QTime_fromString'; procedure QTime_fromString(retval: QTimeH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QTime_fromString2'; function QTime_isValid(h: Integer; m: Integer; s: Integer; ms: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QTime_isValid2'; procedure QTime_start(handle: QTimeH); cdecl; external Qt4PasLib name 'QTime_start'; function QTime_restart(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_restart'; function QTime_elapsed(handle: QTimeH): Integer; cdecl; external Qt4PasLib name 'QTime_elapsed'; function QDateTime_create(): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create'; procedure QDateTime_destroy(handle: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_destroy'; function QDateTime_create(AnonParam1: QDateH): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create2'; function QDateTime_create(AnonParam1: QDateH; AnonParam2: QTimeH; spec: QtTimeSpec = QtLocalTime): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create3'; function QDateTime_create(other: QDateTimeH): QDateTimeH; cdecl; external Qt4PasLib name 'QDateTime_create4'; function QDateTime_isNull(handle: QDateTimeH): Boolean; cdecl; external Qt4PasLib name 'QDateTime_isNull'; function QDateTime_isValid(handle: QDateTimeH): Boolean; cdecl; external Qt4PasLib name 'QDateTime_isValid'; procedure QDateTime_date(handle: QDateTimeH; retval: QDateH); cdecl; external Qt4PasLib name 'QDateTime_date'; procedure QDateTime_time(handle: QDateTimeH; retval: QTimeH); cdecl; external Qt4PasLib name 'QDateTime_time'; function QDateTime_timeSpec(handle: QDateTimeH): QtTimeSpec; cdecl; external Qt4PasLib name 'QDateTime_timeSpec'; function QDateTime_toTime_t(handle: QDateTimeH): LongWord; cdecl; external Qt4PasLib name 'QDateTime_toTime_t'; procedure QDateTime_setDate(handle: QDateTimeH; date: QDateH); cdecl; external Qt4PasLib name 'QDateTime_setDate'; procedure QDateTime_setTime(handle: QDateTimeH; time: QTimeH); cdecl; external Qt4PasLib name 'QDateTime_setTime'; procedure QDateTime_setTimeSpec(handle: QDateTimeH; spec: QtTimeSpec); cdecl; external Qt4PasLib name 'QDateTime_setTimeSpec'; procedure QDateTime_setTime_t(handle: QDateTimeH; secsSince1Jan1970UTC: LongWord); cdecl; external Qt4PasLib name 'QDateTime_setTime_t'; procedure QDateTime_toString(handle: QDateTimeH; retval: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDateTime_toString'; procedure QDateTime_toString(handle: QDateTimeH; retval: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDateTime_toString2'; procedure QDateTime_addDays(handle: QDateTimeH; retval: QDateTimeH; days: Integer); cdecl; external Qt4PasLib name 'QDateTime_addDays'; procedure QDateTime_addMonths(handle: QDateTimeH; retval: QDateTimeH; months: Integer); cdecl; external Qt4PasLib name 'QDateTime_addMonths'; procedure QDateTime_addYears(handle: QDateTimeH; retval: QDateTimeH; years: Integer); cdecl; external Qt4PasLib name 'QDateTime_addYears'; procedure QDateTime_addSecs(handle: QDateTimeH; retval: QDateTimeH; secs: Integer); cdecl; external Qt4PasLib name 'QDateTime_addSecs'; procedure QDateTime_addMSecs(handle: QDateTimeH; retval: QDateTimeH; msecs: int64); cdecl; external Qt4PasLib name 'QDateTime_addMSecs'; procedure QDateTime_toTimeSpec(handle: QDateTimeH; retval: QDateTimeH; spec: QtTimeSpec); cdecl; external Qt4PasLib name 'QDateTime_toTimeSpec'; procedure QDateTime_toLocalTime(handle: QDateTimeH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_toLocalTime'; procedure QDateTime_toUTC(handle: QDateTimeH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_toUTC'; function QDateTime_daysTo(handle: QDateTimeH; AnonParam1: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_daysTo'; function QDateTime_secsTo(handle: QDateTimeH; AnonParam1: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_secsTo'; procedure QDateTime_setUtcOffset(handle: QDateTimeH; seconds: Integer); cdecl; external Qt4PasLib name 'QDateTime_setUtcOffset'; function QDateTime_utcOffset(handle: QDateTimeH): Integer; cdecl; external Qt4PasLib name 'QDateTime_utcOffset'; procedure QDateTime_currentDateTime(retval: QDateTimeH); cdecl; external Qt4PasLib name 'QDateTime_currentDateTime'; procedure QDateTime_fromString(retval: QDateTimeH; s: PWideString; f: QtDateFormat = QtTextDate); cdecl; external Qt4PasLib name 'QDateTime_fromString'; procedure QDateTime_fromString(retval: QDateTimeH; s: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QDateTime_fromString2'; procedure QDateTime_fromTime_t(retval: QDateTimeH; secsSince1Jan1970UTC: LongWord); cdecl; external Qt4PasLib name 'QDateTime_fromTime_t'; function QByteArray_create(): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create'; procedure QByteArray_destroy(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_destroy'; function QByteArray_create(AnonParam1: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create2'; function QByteArray_create(AnonParam1: PAnsiChar; size: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create3'; function QByteArray_create(size: Integer; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create4'; function QByteArray_create(AnonParam1: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_create5'; function QByteArray_size(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_size'; function QByteArray_isEmpty(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isEmpty'; procedure QByteArray_resize(handle: QByteArrayH; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_resize'; function QByteArray_fill(handle: QByteArrayH; c: char; size: Integer = -1): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_fill'; function QByteArray_capacity(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_capacity'; procedure QByteArray_reserve(handle: QByteArrayH; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_reserve'; procedure QByteArray_squeeze(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_squeeze'; function QByteArray_data(handle: QByteArrayH): PAnsiChar; cdecl; external Qt4PasLib name 'QByteArray_data'; function QByteArray_constData(handle: QByteArrayH): PAnsiChar; cdecl; external Qt4PasLib name 'QByteArray_constData'; procedure QByteArray_detach(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_detach'; function QByteArray_isDetached(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isDetached'; procedure QByteArray_clear(handle: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_clear'; function QByteArray_at(handle: QByteArrayH; i: Integer): char; cdecl; external Qt4PasLib name 'QByteArray_at'; function QByteArray_indexOf(handle: QByteArrayH; c: char; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf'; function QByteArray_indexOf(handle: QByteArrayH; c: PAnsiChar; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf2'; function QByteArray_indexOf(handle: QByteArrayH; a: QByteArrayH; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf3'; function QByteArray_lastIndexOf(handle: QByteArrayH; c: char; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf'; function QByteArray_lastIndexOf(handle: QByteArrayH; c: PAnsiChar; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf2'; function QByteArray_lastIndexOf(handle: QByteArrayH; a: QByteArrayH; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf3'; function QByteArray_contains(handle: QByteArrayH; c: char): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains'; function QByteArray_contains(handle: QByteArrayH; a: PAnsiChar): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains2'; function QByteArray_contains(handle: QByteArrayH; a: QByteArrayH): boolean; cdecl; external Qt4PasLib name 'QByteArray_contains3'; function QByteArray_count(handle: QByteArrayH; c: char): Integer; cdecl; external Qt4PasLib name 'QByteArray_count'; function QByteArray_count(handle: QByteArrayH; a: PAnsiChar): Integer; cdecl; external Qt4PasLib name 'QByteArray_count2'; function QByteArray_count(handle: QByteArrayH; a: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_count3'; procedure QByteArray_left(handle: QByteArrayH; retval: QByteArrayH; len: Integer); cdecl; external Qt4PasLib name 'QByteArray_left'; procedure QByteArray_right(handle: QByteArrayH; retval: QByteArrayH; len: Integer); cdecl; external Qt4PasLib name 'QByteArray_right'; procedure QByteArray_mid(handle: QByteArrayH; retval: QByteArrayH; index: Integer; len: Integer = -1); cdecl; external Qt4PasLib name 'QByteArray_mid'; function QByteArray_startsWith(handle: QByteArrayH; a: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith'; function QByteArray_startsWith(handle: QByteArrayH; c: char): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith2'; function QByteArray_startsWith(handle: QByteArrayH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QByteArray_startsWith3'; function QByteArray_endsWith(handle: QByteArrayH; a: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith'; function QByteArray_endsWith(handle: QByteArrayH; c: char): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith2'; function QByteArray_endsWith(handle: QByteArrayH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QByteArray_endsWith3'; procedure QByteArray_truncate(handle: QByteArrayH; pos: Integer); cdecl; external Qt4PasLib name 'QByteArray_truncate'; procedure QByteArray_chop(handle: QByteArrayH; n: Integer); cdecl; external Qt4PasLib name 'QByteArray_chop'; procedure QByteArray_toLower(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toLower'; procedure QByteArray_toUpper(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toUpper'; procedure QByteArray_trimmed(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_trimmed'; procedure QByteArray_simplified(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_simplified'; procedure QByteArray_leftJustified(handle: QByteArrayH; retval: QByteArrayH; width: Integer; fill: char; truncate: Boolean = False); cdecl; external Qt4PasLib name 'QByteArray_leftJustified'; procedure QByteArray_rightJustified(handle: QByteArrayH; retval: QByteArrayH; width: Integer; fill: char; truncate: Boolean = False); cdecl; external Qt4PasLib name 'QByteArray_rightJustified'; function QByteArray_prepend(handle: QByteArrayH; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend'; function QByteArray_prepend(handle: QByteArrayH; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend2'; function QByteArray_prepend(handle: QByteArrayH; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_prepend3'; function QByteArray_append(handle: QByteArrayH; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append'; function QByteArray_append(handle: QByteArrayH; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append2'; function QByteArray_append(handle: QByteArrayH; s: PAnsiChar; len: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append3'; function QByteArray_append(handle: QByteArrayH; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append4'; function QByteArray_insert(handle: QByteArrayH; i: Integer; c: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert'; function QByteArray_insert(handle: QByteArrayH; i: Integer; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert2'; function QByteArray_insert(handle: QByteArrayH; i: Integer; a: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert3'; function QByteArray_remove(handle: QByteArrayH; index: Integer; len: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_remove'; function QByteArray_replace(handle: QByteArrayH; index: Integer; len: Integer; s: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace'; function QByteArray_replace(handle: QByteArrayH; index: Integer; len: Integer; s: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace2'; function QByteArray_replace(handle: QByteArrayH; before: char; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace3'; function QByteArray_replace(handle: QByteArrayH; before: char; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace4'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace5'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; bsize: Integer; after: PAnsiChar; asize: Integer): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace6'; function QByteArray_replace(handle: QByteArrayH; before: QByteArrayH; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace7'; function QByteArray_replace(handle: QByteArrayH; before: QByteArrayH; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace8'; function QByteArray_replace(handle: QByteArrayH; before: PAnsiChar; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace9'; function QByteArray_replace(handle: QByteArrayH; before: char; after: char): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace10'; procedure QByteArray_repeated(handle: QByteArrayH; retval: QByteArrayH; times: Integer); cdecl; external Qt4PasLib name 'QByteArray_repeated'; function QByteArray_append(handle: QByteArrayH; s: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_append5'; function QByteArray_insert(handle: QByteArrayH; i: Integer; s: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_insert4'; function QByteArray_replace(handle: QByteArrayH; before: PWideString; after: PAnsiChar): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace11'; function QByteArray_replace(handle: QByteArrayH; c: char; after: PWideString): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace12'; function QByteArray_replace(handle: QByteArrayH; before: PWideString; after: QByteArrayH): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_replace13'; function QByteArray_indexOf(handle: QByteArrayH; s: PWideString; from: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QByteArray_indexOf4'; function QByteArray_lastIndexOf(handle: QByteArrayH; s: PWideString; from: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QByteArray_lastIndexOf4'; function QByteArray_toShort(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): ShortInt; cdecl; external Qt4PasLib name 'QByteArray_toShort'; function QByteArray_toUShort(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Word; cdecl; external Qt4PasLib name 'QByteArray_toUShort'; function QByteArray_toInt(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Integer; cdecl; external Qt4PasLib name 'QByteArray_toInt'; function QByteArray_toUInt(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): LongWord; cdecl; external Qt4PasLib name 'QByteArray_toUInt'; function QByteArray_toLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Long; cdecl; external Qt4PasLib name 'QByteArray_toLong'; function QByteArray_toULong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): Longword; cdecl; external Qt4PasLib name 'QByteArray_toULong'; function QByteArray_toLongLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): int64; cdecl; external Qt4PasLib name 'QByteArray_toLongLong'; function QByteArray_toULongLong(handle: QByteArrayH; ok: PBoolean = nil; base: Integer = 10): qword; cdecl; external Qt4PasLib name 'QByteArray_toULongLong'; function QByteArray_toFloat(handle: QByteArrayH; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QByteArray_toFloat'; function QByteArray_toDouble(handle: QByteArrayH; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QByteArray_toDouble'; procedure QByteArray_toBase64(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toBase64'; procedure QByteArray_toHex(handle: QByteArrayH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_toHex'; procedure QByteArray_toPercentEncoding(handle: QByteArrayH; retval: QByteArrayH; exclude: QByteArrayH; include: QByteArrayH; percent: char); cdecl; external Qt4PasLib name 'QByteArray_toPercentEncoding'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: ShortInt; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Word; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum2'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Integer; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum3'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: LongWord; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum4'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: int64; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum5'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: qword; base: Integer = 10): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum6'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Single; f: char; prec: Integer = 6): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum7'; function QByteArray_setNum(handle: QByteArrayH; AnonParam1: Double; f: char; prec: Integer = 6): QByteArrayH; cdecl; external Qt4PasLib name 'QByteArray_setNum8'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: Integer; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: LongWord; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number2'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: int64; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number3'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: qword; base: Integer = 10); cdecl; external Qt4PasLib name 'QByteArray_number4'; procedure QByteArray_number(retval: QByteArrayH; AnonParam1: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QByteArray_number5'; procedure QByteArray_fromRawData(retval: QByteArrayH; AnonParam1: PAnsiChar; size: Integer); cdecl; external Qt4PasLib name 'QByteArray_fromRawData'; procedure QByteArray_fromBase64(retval: QByteArrayH; base64: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_fromBase64'; procedure QByteArray_fromHex(retval: QByteArrayH; hexEncoded: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_fromHex'; procedure QByteArray_fromPercentEncoding(retval: QByteArrayH; pctEncoded: QByteArrayH; percent: char); cdecl; external Qt4PasLib name 'QByteArray_fromPercentEncoding'; procedure QByteArray_push_back(handle: QByteArrayH; c: char); cdecl; external Qt4PasLib name 'QByteArray_push_back'; procedure QByteArray_push_back(handle: QByteArrayH; c: PAnsiChar); cdecl; external Qt4PasLib name 'QByteArray_push_back2'; procedure QByteArray_push_back(handle: QByteArrayH; a: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_push_back3'; procedure QByteArray_push_front(handle: QByteArrayH; c: char); cdecl; external Qt4PasLib name 'QByteArray_push_front'; procedure QByteArray_push_front(handle: QByteArrayH; c: PAnsiChar); cdecl; external Qt4PasLib name 'QByteArray_push_front2'; procedure QByteArray_push_front(handle: QByteArrayH; a: QByteArrayH); cdecl; external Qt4PasLib name 'QByteArray_push_front3'; function QByteArray_count(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_count4'; function QByteArray_length(handle: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QByteArray_length'; function QByteArray_isNull(handle: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QByteArray_isNull'; type QSystemLocaleQueryType = ( // QSystemLocale::QueryType (1) QSystemLocaleLanguageId, QSystemLocaleCountryId, QSystemLocaleDecimalPoint, QSystemLocaleGroupSeparator, QSystemLocaleZeroDigit, QSystemLocaleNegativeSign, QSystemLocaleDateFormatLong, QSystemLocaleDateFormatShort, QSystemLocaleTimeFormatLong, QSystemLocaleTimeFormatShort, QSystemLocaleDayNameLong, QSystemLocaleDayNameShort, QSystemLocaleMonthNameLong, QSystemLocaleMonthNameShort, QSystemLocaleDateToStringLong, QSystemLocaleDateToStringShort, QSystemLocaleTimeToStringLong, QSystemLocaleTimeToStringShort, QSystemLocaleDateTimeFormatLong, QSystemLocaleDateTimeFormatShort, QSystemLocaleDateTimeToStringLong, QSystemLocaleDateTimeToStringShort, QSystemLocaleMeasurementSystem, QSystemLocalePositiveSign, QSystemLocaleAMText, QSystemLocalePMText ); type QLocaleMeasurementSystem = ( // QLocale::MeasurementSystem (1) QLocaleMetricSystem, QLocaleImperialSystem ); QLocaleFormatType = ( // QLocale::FormatType (1) QLocaleLongFormat, QLocaleShortFormat, QLocaleNarrowFormat ); type QLocaleNumberOption = cardinal; // QLocale::NumberOption QLocaleNumberOptions = QLocaleNumberOption; //QFlags<> (3) const QLocaleOmitGroupSeparator = $01; QLocaleRejectGroupSeparator = $02; type QLocaleLanguage = cardinal; // QLocale::Language (4) const QLocaleC = 1 { $1 }; QLocaleAbkhazian = 2 { $2 }; QLocaleAfan = 3 { $3 }; QLocaleAfar = 4 { $4 }; QLocaleAfrikaans = 5 { $5 }; QLocaleAlbanian = 6 { $6 }; QLocaleAmharic = 7 { $7 }; QLocaleArabic = 8 { $8 }; QLocaleArmenian = 9 { $9 }; QLocaleAssamese = 10 { $a }; QLocaleAymara = 11 { $b }; QLocaleAzerbaijani = 12 { $c }; QLocaleBashkir = 13 { $d }; QLocaleBasque = 14 { $e }; QLocaleBengali = 15 { $f }; QLocaleBhutani = 16 { $10 }; QLocaleBihari = 17 { $11 }; QLocaleBislama = 18 { $12 }; QLocaleBreton = 19 { $13 }; QLocaleBulgarian = 20 { $14 }; QLocaleBurmese = 21 { $15 }; QLocaleByelorussian = 22 { $16 }; QLocaleCambodian = 23 { $17 }; QLocaleCatalan = 24 { $18 }; QLocaleChinese = 25 { $19 }; QLocaleCorsican = 26 { $1a }; QLocaleCroatian = 27 { $1b }; QLocaleCzech = 28 { $1c }; QLocaleDanish = 29 { $1d }; QLocaleDutch = 30 { $1e }; QLocaleEnglish = 31 { $1f }; QLocaleEsperanto = 32 { $20 }; QLocaleEstonian = 33 { $21 }; QLocaleFaroese = 34 { $22 }; QLocaleFijiLanguage = 35 { $23 }; QLocaleFinnish = 36 { $24 }; QLocaleFrench = 37 { $25 }; QLocaleFrisian = 38 { $26 }; QLocaleGaelic = 39 { $27 }; QLocaleGalician = 40 { $28 }; QLocaleGeorgian = 41 { $29 }; QLocaleGerman = 42 { $2a }; QLocaleGreek = 43 { $2b }; QLocaleGreenlandic = 44 { $2c }; QLocaleGuarani = 45 { $2d }; QLocaleGujarati = 46 { $2e }; QLocaleHausa = 47 { $2f }; QLocaleHebrew = 48 { $30 }; QLocaleHindi = 49 { $31 }; QLocaleHungarian = 50 { $32 }; QLocaleIcelandic = 51 { $33 }; QLocaleIndonesian = 52 { $34 }; QLocaleInterlingua = 53 { $35 }; QLocaleInterlingue = 54 { $36 }; QLocaleInuktitut = 55 { $37 }; QLocaleInupiak = 56 { $38 }; QLocaleIrish = 57 { $39 }; QLocaleItalian = 58 { $3a }; QLocaleJapanese = 59 { $3b }; QLocaleJavanese = 60 { $3c }; QLocaleKannada = 61 { $3d }; QLocaleKashmiri = 62 { $3e }; QLocaleKazakh = 63 { $3f }; QLocaleKinyarwanda = 64 { $40 }; QLocaleKirghiz = 65 { $41 }; QLocaleKorean = 66 { $42 }; QLocaleKurdish = 67 { $43 }; QLocaleKurundi = 68 { $44 }; QLocaleLaothian = 69 { $45 }; QLocaleLatin = 70 { $46 }; QLocaleLatvian = 71 { $47 }; QLocaleLingala = 72 { $48 }; QLocaleLithuanian = 73 { $49 }; QLocaleMacedonian = 74 { $4a }; QLocaleMalagasy = 75 { $4b }; QLocaleMalay = 76 { $4c }; QLocaleMalayalam = 77 { $4d }; QLocaleMaltese = 78 { $4e }; QLocaleMaori = 79 { $4f }; QLocaleMarathi = 80 { $50 }; QLocaleMoldavian = 81 { $51 }; QLocaleMongolian = 82 { $52 }; QLocaleNauruLanguage = 83 { $53 }; QLocaleNepali = 84 { $54 }; QLocaleNorwegian = 85 { $55 }; QLocaleNorwegianBokmal = 85 { $55 }; QLocaleOccitan = 86 { $56 }; QLocaleOriya = 87 { $57 }; QLocalePashto = 88 { $58 }; QLocalePersian = 89 { $59 }; QLocalePolish = 90 { $5a }; QLocalePortuguese = 91 { $5b }; QLocalePunjabi = 92 { $5c }; QLocaleQuechua = 93 { $5d }; QLocaleRhaetoRomance = 94 { $5e }; QLocaleRomanian = 95 { $5f }; QLocaleRussian = 96 { $60 }; QLocaleSamoan = 97 { $61 }; QLocaleSangho = 98 { $62 }; QLocaleSanskrit = 99 { $63 }; QLocaleSerbian = 100 { $64 }; QLocaleSerboCroatian = 101 { $65 }; QLocaleSesotho = 102 { $66 }; QLocaleSetswana = 103 { $67 }; QLocaleShona = 104 { $68 }; QLocaleSindhi = 105 { $69 }; QLocaleSinghalese = 106 { $6a }; QLocaleSiswati = 107 { $6b }; QLocaleSlovak = 108 { $6c }; QLocaleSlovenian = 109 { $6d }; QLocaleSomali = 110 { $6e }; QLocaleSpanish = 111 { $6f }; QLocaleSundanese = 112 { $70 }; QLocaleSwahili = 113 { $71 }; QLocaleSwedish = 114 { $72 }; QLocaleTagalog = 115 { $73 }; QLocaleTajik = 116 { $74 }; QLocaleTamil = 117 { $75 }; QLocaleTatar = 118 { $76 }; QLocaleTelugu = 119 { $77 }; QLocaleThai = 120 { $78 }; QLocaleTibetan = 121 { $79 }; QLocaleTigrinya = 122 { $7a }; QLocaleTongaLanguage = 123 { $7b }; QLocaleTsonga = 124 { $7c }; QLocaleTurkish = 125 { $7d }; QLocaleTurkmen = 126 { $7e }; QLocaleTwi = 127 { $7f }; QLocaleUigur = 128 { $80 }; QLocaleUkrainian = 129 { $81 }; QLocaleUrdu = 130 { $82 }; QLocaleUzbek = 131 { $83 }; QLocaleVietnamese = 132 { $84 }; QLocaleVolapuk = 133 { $85 }; QLocaleWelsh = 134 { $86 }; QLocaleWolof = 135 { $87 }; QLocaleXhosa = 136 { $88 }; QLocaleYiddish = 137 { $89 }; QLocaleYoruba = 138 { $8a }; QLocaleZhuang = 139 { $8b }; QLocaleZulu = 140 { $8c }; QLocaleNorwegianNynorsk = 141 { $8d }; QLocaleNynorsk = 141 { $8d }; QLocaleBosnian = 142 { $8e }; QLocaleDivehi = 143 { $8f }; QLocaleManx = 144 { $90 }; QLocaleCornish = 145 { $91 }; QLocaleAkan = 146 { $92 }; QLocaleKonkani = 147 { $93 }; QLocaleGa = 148 { $94 }; QLocaleIgbo = 149 { $95 }; QLocaleKamba = 150 { $96 }; QLocaleSyriac = 151 { $97 }; QLocaleBlin = 152 { $98 }; QLocaleGeez = 153 { $99 }; QLocaleKoro = 154 { $9a }; QLocaleSidamo = 155 { $9b }; QLocaleAtsam = 156 { $9c }; QLocaleTigre = 157 { $9d }; QLocaleJju = 158 { $9e }; QLocaleFriulian = 159 { $9f }; QLocaleVenda = 160 { $a0 }; QLocaleEwe = 161 { $a1 }; QLocaleWalamo = 162 { $a2 }; QLocaleHawaiian = 163 { $a3 }; QLocaleTyap = 164 { $a4 }; QLocaleChewa = 165 { $a5 }; QLocaleLastLanguage = 165 { $a5 }; type QLocaleCountry = cardinal; // QLocale::Country (4) const QLocaleAnyCountry = 0 { $0 }; QLocaleAfghanistan = 1 { $1 }; QLocaleAlbania = 2 { $2 }; QLocaleAlgeria = 3 { $3 }; QLocaleAmericanSamoa = 4 { $4 }; QLocaleAndorra = 5 { $5 }; QLocaleAngola = 6 { $6 }; QLocaleAnguilla = 7 { $7 }; QLocaleAntarctica = 8 { $8 }; QLocaleAntiguaAndBarbuda = 9 { $9 }; QLocaleArgentina = 10 { $a }; QLocaleArmenia = 11 { $b }; QLocaleAruba = 12 { $c }; QLocaleAustralia = 13 { $d }; QLocaleAustria = 14 { $e }; QLocaleAzerbaijan = 15 { $f }; QLocaleBahamas = 16 { $10 }; QLocaleBahrain = 17 { $11 }; QLocaleBangladesh = 18 { $12 }; QLocaleBarbados = 19 { $13 }; QLocaleBelarus = 20 { $14 }; QLocaleBelgium = 21 { $15 }; QLocaleBelize = 22 { $16 }; QLocaleBenin = 23 { $17 }; QLocaleBermuda = 24 { $18 }; QLocaleBhutan = 25 { $19 }; QLocaleBolivia = 26 { $1a }; QLocaleBosniaAndHerzegowina = 27 { $1b }; QLocaleBotswana = 28 { $1c }; QLocaleBouvetIsland = 29 { $1d }; QLocaleBrazil = 30 { $1e }; QLocaleBritishIndianOceanTerritory = 31 { $1f }; QLocaleBruneiDarussalam = 32 { $20 }; QLocaleBulgaria = 33 { $21 }; QLocaleBurkinaFaso = 34 { $22 }; QLocaleBurundi = 35 { $23 }; QLocaleCambodia = 36 { $24 }; QLocaleCameroon = 37 { $25 }; QLocaleCanada = 38 { $26 }; QLocaleCapeVerde = 39 { $27 }; QLocaleCaymanIslands = 40 { $28 }; QLocaleCentralAfricanRepublic = 41 { $29 }; QLocaleChad = 42 { $2a }; QLocaleChile = 43 { $2b }; QLocaleChina = 44 { $2c }; QLocaleChristmasIsland = 45 { $2d }; QLocaleCocosIslands = 46 { $2e }; QLocaleColombia = 47 { $2f }; QLocaleComoros = 48 { $30 }; QLocaleDemocraticRepublicOfCongo = 49 { $31 }; QLocalePeoplesRepublicOfCongo = 50 { $32 }; QLocaleCookIslands = 51 { $33 }; QLocaleCostaRica = 52 { $34 }; QLocaleIvoryCoast = 53 { $35 }; QLocaleCroatia = 54 { $36 }; QLocaleCuba = 55 { $37 }; QLocaleCyprus = 56 { $38 }; QLocaleCzechRepublic = 57 { $39 }; QLocaleDenmark = 58 { $3a }; QLocaleDjibouti = 59 { $3b }; QLocaleDominica = 60 { $3c }; QLocaleDominicanRepublic = 61 { $3d }; QLocaleEastTimor = 62 { $3e }; QLocaleEcuador = 63 { $3f }; QLocaleEgypt = 64 { $40 }; QLocaleElSalvador = 65 { $41 }; QLocaleEquatorialGuinea = 66 { $42 }; QLocaleEritrea = 67 { $43 }; QLocaleEstonia = 68 { $44 }; QLocaleEthiopia = 69 { $45 }; QLocaleFalklandIslands = 70 { $46 }; QLocaleFaroeIslands = 71 { $47 }; QLocaleFijiCountry = 72 { $48 }; QLocaleFinland = 73 { $49 }; QLocaleFrance = 74 { $4a }; QLocaleMetropolitanFrance = 75 { $4b }; QLocaleFrenchGuiana = 76 { $4c }; QLocaleFrenchPolynesia = 77 { $4d }; QLocaleFrenchSouthernTerritories = 78 { $4e }; QLocaleGabon = 79 { $4f }; QLocaleGambia = 80 { $50 }; QLocaleGeorgia = 81 { $51 }; QLocaleGermany = 82 { $52 }; QLocaleGhana = 83 { $53 }; QLocaleGibraltar = 84 { $54 }; QLocaleGreece = 85 { $55 }; QLocaleGreenland = 86 { $56 }; QLocaleGrenada = 87 { $57 }; QLocaleGuadeloupe = 88 { $58 }; QLocaleGuam = 89 { $59 }; QLocaleGuatemala = 90 { $5a }; QLocaleGuinea = 91 { $5b }; QLocaleGuineaBissau = 92 { $5c }; QLocaleGuyana = 93 { $5d }; QLocaleHaiti = 94 { $5e }; QLocaleHeardAndMcDonaldIslands = 95 { $5f }; QLocaleHonduras = 96 { $60 }; QLocaleHongKong = 97 { $61 }; QLocaleHungary = 98 { $62 }; QLocaleIceland = 99 { $63 }; QLocaleIndia = 100 { $64 }; QLocaleIndonesia = 101 { $65 }; QLocaleIran = 102 { $66 }; QLocaleIraq = 103 { $67 }; QLocaleIreland = 104 { $68 }; QLocaleIsrael = 105 { $69 }; QLocaleItaly = 106 { $6a }; QLocaleJamaica = 107 { $6b }; QLocaleJapan = 108 { $6c }; QLocaleJordan = 109 { $6d }; QLocaleKazakhstan = 110 { $6e }; QLocaleKenya = 111 { $6f }; QLocaleKiribati = 112 { $70 }; QLocaleDemocraticRepublicOfKorea = 113 { $71 }; QLocaleRepublicOfKorea = 114 { $72 }; QLocaleKuwait = 115 { $73 }; QLocaleKyrgyzstan = 116 { $74 }; QLocaleLao = 117 { $75 }; QLocaleLatvia = 118 { $76 }; QLocaleLebanon = 119 { $77 }; QLocaleLesotho = 120 { $78 }; QLocaleLiberia = 121 { $79 }; QLocaleLibyanArabJamahiriya = 122 { $7a }; QLocaleLiechtenstein = 123 { $7b }; QLocaleLithuania = 124 { $7c }; QLocaleLuxembourg = 125 { $7d }; QLocaleMacau = 126 { $7e }; QLocaleMacedonia = 127 { $7f }; QLocaleMadagascar = 128 { $80 }; QLocaleMalawi = 129 { $81 }; QLocaleMalaysia = 130 { $82 }; QLocaleMaldives = 131 { $83 }; QLocaleMali = 132 { $84 }; QLocaleMalta = 133 { $85 }; QLocaleMarshallIslands = 134 { $86 }; QLocaleMartinique = 135 { $87 }; QLocaleMauritania = 136 { $88 }; QLocaleMauritius = 137 { $89 }; QLocaleMayotte = 138 { $8a }; QLocaleMexico = 139 { $8b }; QLocaleMicronesia = 140 { $8c }; QLocaleMoldova = 141 { $8d }; QLocaleMonaco = 142 { $8e }; QLocaleMongolia = 143 { $8f }; QLocaleMontserrat = 144 { $90 }; QLocaleMorocco = 145 { $91 }; QLocaleMozambique = 146 { $92 }; QLocaleMyanmar = 147 { $93 }; QLocaleNamibia = 148 { $94 }; QLocaleNauruCountry = 149 { $95 }; QLocaleNepal = 150 { $96 }; QLocaleNetherlands = 151 { $97 }; QLocaleNetherlandsAntilles = 152 { $98 }; QLocaleNewCaledonia = 153 { $99 }; QLocaleNewZealand = 154 { $9a }; QLocaleNicaragua = 155 { $9b }; QLocaleNiger = 156 { $9c }; QLocaleNigeria = 157 { $9d }; QLocaleNiue = 158 { $9e }; QLocaleNorfolkIsland = 159 { $9f }; QLocaleNorthernMarianaIslands = 160 { $a0 }; QLocaleNorway = 161 { $a1 }; QLocaleOman = 162 { $a2 }; QLocalePakistan = 163 { $a3 }; QLocalePalau = 164 { $a4 }; QLocalePalestinianTerritory = 165 { $a5 }; QLocalePanama = 166 { $a6 }; QLocalePapuaNewGuinea = 167 { $a7 }; QLocaleParaguay = 168 { $a8 }; QLocalePeru = 169 { $a9 }; QLocalePhilippines = 170 { $aa }; QLocalePitcairn = 171 { $ab }; QLocalePoland = 172 { $ac }; QLocalePortugal = 173 { $ad }; QLocalePuertoRico = 174 { $ae }; QLocaleQatar = 175 { $af }; QLocaleReunion = 176 { $b0 }; QLocaleRomania = 177 { $b1 }; QLocaleRussianFederation = 178 { $b2 }; QLocaleRwanda = 179 { $b3 }; QLocaleSaintKittsAndNevis = 180 { $b4 }; QLocaleStLucia = 181 { $b5 }; QLocaleStVincentAndTheGrenadines = 182 { $b6 }; QLocaleSamoa = 183 { $b7 }; QLocaleSanMarino = 184 { $b8 }; QLocaleSaoTomeAndPrincipe = 185 { $b9 }; QLocaleSaudiArabia = 186 { $ba }; QLocaleSenegal = 187 { $bb }; QLocaleSeychelles = 188 { $bc }; QLocaleSierraLeone = 189 { $bd }; QLocaleSingapore = 190 { $be }; QLocaleSlovakia = 191 { $bf }; QLocaleSlovenia = 192 { $c0 }; QLocaleSolomonIslands = 193 { $c1 }; QLocaleSomalia = 194 { $c2 }; QLocaleSouthAfrica = 195 { $c3 }; QLocaleSouthGeorgiaAndTheSouthSandwichIslands = 196 { $c4 }; QLocaleSpain = 197 { $c5 }; QLocaleSriLanka = 198 { $c6 }; QLocaleStHelena = 199 { $c7 }; QLocaleStPierreAndMiquelon = 200 { $c8 }; QLocaleSudan = 201 { $c9 }; QLocaleSuriname = 202 { $ca }; QLocaleSvalbardAndJanMayenIslands = 203 { $cb }; QLocaleSwaziland = 204 { $cc }; QLocaleSweden = 205 { $cd }; QLocaleSwitzerland = 206 { $ce }; QLocaleSyrianArabRepublic = 207 { $cf }; QLocaleTaiwan = 208 { $d0 }; QLocaleTajikistan = 209 { $d1 }; QLocaleTanzania = 210 { $d2 }; QLocaleThailand = 211 { $d3 }; QLocaleTogo = 212 { $d4 }; QLocaleTokelau = 213 { $d5 }; QLocaleTongaCountry = 214 { $d6 }; QLocaleTrinidadAndTobago = 215 { $d7 }; QLocaleTunisia = 216 { $d8 }; QLocaleTurkey = 217 { $d9 }; QLocaleTurkmenistan = 218 { $da }; QLocaleTurksAndCaicosIslands = 219 { $db }; QLocaleTuvalu = 220 { $dc }; QLocaleUganda = 221 { $dd }; QLocaleUkraine = 222 { $de }; QLocaleUnitedArabEmirates = 223 { $df }; QLocaleUnitedKingdom = 224 { $e0 }; QLocaleUnitedStates = 225 { $e1 }; QLocaleUnitedStatesMinorOutlyingIslands = 226 { $e2 }; QLocaleUruguay = 227 { $e3 }; QLocaleUzbekistan = 228 { $e4 }; QLocaleVanuatu = 229 { $e5 }; QLocaleVaticanCityState = 230 { $e6 }; QLocaleVenezuela = 231 { $e7 }; QLocaleVietNam = 232 { $e8 }; QLocaleBritishVirginIslands = 233 { $e9 }; QLocaleUSVirginIslands = 234 { $ea }; QLocaleWallisAndFutunaIslands = 235 { $eb }; QLocaleWesternSahara = 236 { $ec }; QLocaleYemen = 237 { $ed }; QLocaleYugoslavia = 238 { $ee }; QLocaleZambia = 239 { $ef }; QLocaleZimbabwe = 240 { $f0 }; QLocaleSerbiaAndMontenegro = 241 { $f1 }; QLocaleLastCountry = 241 { $f1 }; function QSystemLocale_create(): QSystemLocaleH; cdecl; external Qt4PasLib name 'QSystemLocale_create'; procedure QSystemLocale_destroy(handle: QSystemLocaleH); cdecl; external Qt4PasLib name 'QSystemLocale_destroy'; procedure QSystemLocale_fallbackLocale(handle: QSystemLocaleH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QSystemLocale_fallbackLocale'; function QLocale_create(): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create'; procedure QLocale_destroy(handle: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_destroy'; function QLocale_create(name: PWideString): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create2'; function QLocale_create(language: QLocaleLanguage; country: QLocaleCountry = QLocaleAnyCountry): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create3'; function QLocale_create(other: QLocaleH): QLocaleH; cdecl; external Qt4PasLib name 'QLocale_create4'; function QLocale_language(handle: QLocaleH): QLocaleLanguage; cdecl; external Qt4PasLib name 'QLocale_language'; function QLocale_country(handle: QLocaleH): QLocaleCountry; cdecl; external Qt4PasLib name 'QLocale_country'; procedure QLocale_name(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_name'; function QLocale_toShort(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): ShortInt; cdecl; external Qt4PasLib name 'QLocale_toShort'; function QLocale_toUShort(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): Word; cdecl; external Qt4PasLib name 'QLocale_toUShort'; function QLocale_toInt(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QLocale_toInt'; function QLocale_toUInt(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): LongWord; cdecl; external Qt4PasLib name 'QLocale_toUInt'; function QLocale_toLongLong(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): int64; cdecl; external Qt4PasLib name 'QLocale_toLongLong'; function QLocale_toULongLong(handle: QLocaleH; s: PWideString; ok: PBoolean = nil; base: Integer = 0): int64; cdecl; external Qt4PasLib name 'QLocale_toULongLong'; function QLocale_toFloat(handle: QLocaleH; s: PWideString; ok: PBoolean = nil): Single; cdecl; external Qt4PasLib name 'QLocale_toFloat'; function QLocale_toDouble(handle: QLocaleH; s: PWideString; ok: PBoolean = nil): Double; cdecl; external Qt4PasLib name 'QLocale_toDouble'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: int64); cdecl; external Qt4PasLib name 'QLocale_toString'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: qword); cdecl; external Qt4PasLib name 'QLocale_toString2'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: ShortInt); cdecl; external Qt4PasLib name 'QLocale_toString3'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Word); cdecl; external Qt4PasLib name 'QLocale_toString4'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Integer); cdecl; external Qt4PasLib name 'QLocale_toString5'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: LongWord); cdecl; external Qt4PasLib name 'QLocale_toString6'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Double; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QLocale_toString7'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; i: Single; f: char; prec: Integer = 6); cdecl; external Qt4PasLib name 'QLocale_toString8'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; date: QDateH; formatStr: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString9'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; date: QDateH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString10'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; time: QTimeH; formatStr: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString11'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; time: QTimeH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString12'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; dateTime: QDateTimeH; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toString13'; procedure QLocale_toString(handle: QLocaleH; retval: PWideString; dateTime: QDateTimeH; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toString14'; procedure QLocale_dateFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dateFormat'; procedure QLocale_timeFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_timeFormat'; procedure QLocale_dateTimeFormat(handle: QLocaleH; retval: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dateTimeFormat'; procedure QLocale_toDate(handle: QLocaleH; retval: QDateH; _string: PWideString; AnonParam2: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toDate'; procedure QLocale_toTime(handle: QLocaleH; retval: QTimeH; _string: PWideString; AnonParam2: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toTime'; procedure QLocale_toDateTime(handle: QLocaleH; retval: QDateTimeH; _string: PWideString; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_toDateTime'; procedure QLocale_toDate(handle: QLocaleH; retval: QDateH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toDate2'; procedure QLocale_toTime(handle: QLocaleH; retval: QTimeH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toTime2'; procedure QLocale_toDateTime(handle: QLocaleH; retval: QDateTimeH; _string: PWideString; format: PWideString); cdecl; external Qt4PasLib name 'QLocale_toDateTime2'; procedure QLocale_decimalPoint(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_decimalPoint'; procedure QLocale_groupSeparator(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_groupSeparator'; procedure QLocale_percent(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_percent'; procedure QLocale_zeroDigit(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_zeroDigit'; procedure QLocale_negativeSign(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_negativeSign'; procedure QLocale_positiveSign(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_positiveSign'; procedure QLocale_exponential(handle: QLocaleH; retval: PWideChar); cdecl; external Qt4PasLib name 'QLocale_exponential'; procedure QLocale_monthName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_monthName'; procedure QLocale_standaloneMonthName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_standaloneMonthName'; procedure QLocale_dayName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_dayName'; procedure QLocale_standaloneDayName(handle: QLocaleH; retval: PWideString; AnonParam1: Integer; format: QLocaleFormatType = QLocaleLongFormat); cdecl; external Qt4PasLib name 'QLocale_standaloneDayName'; procedure QLocale_amText(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_amText'; procedure QLocale_pmText(handle: QLocaleH; retval: PWideString); cdecl; external Qt4PasLib name 'QLocale_pmText'; function QLocale_measurementSystem(handle: QLocaleH): QLocaleMeasurementSystem; cdecl; external Qt4PasLib name 'QLocale_measurementSystem'; procedure QLocale_languageToString(retval: PWideString; language: QLocaleLanguage); cdecl; external Qt4PasLib name 'QLocale_languageToString'; procedure QLocale_countryToString(retval: PWideString; country: QLocaleCountry); cdecl; external Qt4PasLib name 'QLocale_countryToString'; procedure QLocale_setDefault(locale: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_setDefault'; procedure QLocale_c(retval: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_c'; procedure QLocale_system(retval: QLocaleH); cdecl; external Qt4PasLib name 'QLocale_system'; procedure QLocale_setNumberOptions(handle: QLocaleH; options: QLocaleNumberOptions); cdecl; external Qt4PasLib name 'QLocale_setNumberOptions'; function QLocale_numberOptions(handle: QLocaleH): QLocaleNumberOptions; cdecl; external Qt4PasLib name 'QLocale_numberOptions'; type QIODeviceOpenModeFlag = cardinal; // QIODevice::OpenModeFlag (4) QIODeviceOpenMode = QIODeviceOpenModeFlag; // QFlags<> const QIODeviceNotOpen = 0 { $0 }; QIODeviceReadOnly = 1 { $1 }; QIODeviceWriteOnly = 2 { $2 }; QIODeviceReadWrite = 3 { $3 }; QIODeviceAppend = 4 { $4 }; QIODeviceTruncate = 8 { $8 }; QIODeviceText = 16 { $10 }; QIODeviceUnbuffered = 32 { $20 }; function QIODevice_openMode(handle: QIODeviceH): QIODeviceOpenMode; cdecl; external Qt4PasLib name 'QIODevice_openMode'; procedure QIODevice_setTextModeEnabled(handle: QIODeviceH; enabled: Boolean); cdecl; external Qt4PasLib name 'QIODevice_setTextModeEnabled'; function QIODevice_isTextModeEnabled(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isTextModeEnabled'; function QIODevice_isOpen(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isOpen'; function QIODevice_isReadable(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isReadable'; function QIODevice_isWritable(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isWritable'; function QIODevice_isSequential(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_isSequential'; function QIODevice_open(handle: QIODeviceH; mode: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QIODevice_open'; procedure QIODevice_close(handle: QIODeviceH); cdecl; external Qt4PasLib name 'QIODevice_close'; function QIODevice_pos(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_pos'; function QIODevice_size(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_size'; function QIODevice_seek(handle: QIODeviceH; pos: int64): Boolean; cdecl; external Qt4PasLib name 'QIODevice_seek'; function QIODevice_atEnd(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_atEnd'; function QIODevice_reset(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_reset'; function QIODevice_bytesAvailable(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_bytesAvailable'; function QIODevice_bytesToWrite(handle: QIODeviceH): int64; cdecl; external Qt4PasLib name 'QIODevice_bytesToWrite'; function QIODevice_read(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_read'; procedure QIODevice_read(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64); cdecl; external Qt4PasLib name 'QIODevice_read2'; procedure QIODevice_readAll(handle: QIODeviceH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QIODevice_readAll'; function QIODevice_readLine(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_readLine'; procedure QIODevice_readLine(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64 = 0); cdecl; external Qt4PasLib name 'QIODevice_readLine2'; function QIODevice_canReadLine(handle: QIODeviceH): Boolean; cdecl; external Qt4PasLib name 'QIODevice_canReadLine'; function QIODevice_write(handle: QIODeviceH; data: PAnsiChar; len: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_write'; function QIODevice_write(handle: QIODeviceH; data: PAnsiChar): int64; cdecl; external Qt4PasLib name 'QIODevice_write2'; function QIODevice_write(handle: QIODeviceH; data: QByteArrayH): int64; cdecl; external Qt4PasLib name 'QIODevice_write3'; function QIODevice_peek(handle: QIODeviceH; data: PAnsiChar; maxlen: int64): int64; cdecl; external Qt4PasLib name 'QIODevice_peek'; procedure QIODevice_peek(handle: QIODeviceH; retval: QByteArrayH; maxlen: int64); cdecl; external Qt4PasLib name 'QIODevice_peek2'; function QIODevice_waitForReadyRead(handle: QIODeviceH; msecs: Integer): Boolean; cdecl; external Qt4PasLib name 'QIODevice_waitForReadyRead'; function QIODevice_waitForBytesWritten(handle: QIODeviceH; msecs: Integer): Boolean; cdecl; external Qt4PasLib name 'QIODevice_waitForBytesWritten'; procedure QIODevice_ungetChar(handle: QIODeviceH; c: char); cdecl; external Qt4PasLib name 'QIODevice_ungetChar'; function QIODevice_putChar(handle: QIODeviceH; c: char): Boolean; cdecl; external Qt4PasLib name 'QIODevice_putChar'; function QIODevice_getChar(handle: QIODeviceH; c: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QIODevice_getChar'; procedure QIODevice_errorString(handle: QIODeviceH; retval: PWideString); cdecl; external Qt4PasLib name 'QIODevice_errorString'; type QIODevice_readyRead_Event = procedure () of object cdecl; QIODevice_bytesWritten_Event = procedure (bytes: int64) of object cdecl; QIODevice_aboutToClose_Event = procedure () of object cdecl; QIODevice_readChannelFinished_Event = procedure () of object cdecl; type QProcessProcessError = ( // QProcess::ProcessError (1) QProcessFailedToStart, QProcessCrashed, QProcessTimedout, QProcessReadError, QProcessWriteError, QProcessUnknownError ); QProcessProcessState = ( // QProcess::ProcessState (1) QProcessNotRunning, QProcessStarting, QProcessRunning ); QProcessProcessChannel = ( // QProcess::ProcessChannel (1) QProcessStandardOutput, QProcessStandardError ); QProcessProcessChannelMode = ( // QProcess::ProcessChannelMode (1) QProcessSeparateChannels, QProcessMergedChannels, QProcessForwardedChannels ); QProcessExitStatus = ( // QProcess::ExitStatus (1) QProcessNormalExit, QProcessCrashExit ); function QProcess_create(parent: QObjectH = nil): QProcessH; cdecl; external Qt4PasLib name 'QProcess_create'; procedure QProcess_destroy(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_destroy'; procedure QProcess_start(handle: QProcessH; _program: PWideString; arguments: QStringListH; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_start'; procedure QProcess_start(handle: QProcessH; _program: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_start2'; function QProcess_readChannelMode(handle: QProcessH): QProcessProcessChannelMode; cdecl; external Qt4PasLib name 'QProcess_readChannelMode'; procedure QProcess_setReadChannelMode(handle: QProcessH; mode: QProcessProcessChannelMode); cdecl; external Qt4PasLib name 'QProcess_setReadChannelMode'; function QProcess_processChannelMode(handle: QProcessH): QProcessProcessChannelMode; cdecl; external Qt4PasLib name 'QProcess_processChannelMode'; procedure QProcess_setProcessChannelMode(handle: QProcessH; mode: QProcessProcessChannelMode); cdecl; external Qt4PasLib name 'QProcess_setProcessChannelMode'; function QProcess_readChannel(handle: QProcessH): QProcessProcessChannel; cdecl; external Qt4PasLib name 'QProcess_readChannel'; procedure QProcess_setReadChannel(handle: QProcessH; channel: QProcessProcessChannel); cdecl; external Qt4PasLib name 'QProcess_setReadChannel'; procedure QProcess_closeReadChannel(handle: QProcessH; channel: QProcessProcessChannel); cdecl; external Qt4PasLib name 'QProcess_closeReadChannel'; procedure QProcess_closeWriteChannel(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_closeWriteChannel'; procedure QProcess_setStandardInputFile(handle: QProcessH; fileName: PWideString); cdecl; external Qt4PasLib name 'QProcess_setStandardInputFile'; procedure QProcess_setStandardOutputFile(handle: QProcessH; fileName: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_setStandardOutputFile'; procedure QProcess_setStandardErrorFile(handle: QProcessH; fileName: PWideString; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QProcess_setStandardErrorFile'; procedure QProcess_setStandardOutputProcess(handle: QProcessH; destination: QProcessH); cdecl; external Qt4PasLib name 'QProcess_setStandardOutputProcess'; procedure QProcess_workingDirectory(handle: QProcessH; retval: PWideString); cdecl; external Qt4PasLib name 'QProcess_workingDirectory'; procedure QProcess_setWorkingDirectory(handle: QProcessH; dir: PWideString); cdecl; external Qt4PasLib name 'QProcess_setWorkingDirectory'; procedure QProcess_setEnvironment(handle: QProcessH; environment: QStringListH); cdecl; external Qt4PasLib name 'QProcess_setEnvironment'; procedure QProcess_environment(handle: QProcessH; retval: QStringListH); cdecl; external Qt4PasLib name 'QProcess_environment'; function QProcess_error(handle: QProcessH): QProcessProcessError; cdecl; external Qt4PasLib name 'QProcess_error'; function QProcess_state(handle: QProcessH): QProcessProcessState; cdecl; external Qt4PasLib name 'QProcess_state'; function QProcess_pid(handle: QProcessH): Q_PID; cdecl; external Qt4PasLib name 'QProcess_pid'; function QProcess_waitForStarted(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForStarted'; function QProcess_waitForReadyRead(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForReadyRead'; function QProcess_waitForBytesWritten(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForBytesWritten'; function QProcess_waitForFinished(handle: QProcessH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QProcess_waitForFinished'; procedure QProcess_readAllStandardOutput(handle: QProcessH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QProcess_readAllStandardOutput'; procedure QProcess_readAllStandardError(handle: QProcessH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QProcess_readAllStandardError'; function QProcess_exitCode(handle: QProcessH): Integer; cdecl; external Qt4PasLib name 'QProcess_exitCode'; function QProcess_exitStatus(handle: QProcessH): QProcessExitStatus; cdecl; external Qt4PasLib name 'QProcess_exitStatus'; function QProcess_bytesAvailable(handle: QProcessH): int64; cdecl; external Qt4PasLib name 'QProcess_bytesAvailable'; function QProcess_bytesToWrite(handle: QProcessH): int64; cdecl; external Qt4PasLib name 'QProcess_bytesToWrite'; function QProcess_isSequential(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_isSequential'; function QProcess_canReadLine(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_canReadLine'; procedure QProcess_close(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_close'; function QProcess_atEnd(handle: QProcessH): Boolean; cdecl; external Qt4PasLib name 'QProcess_atEnd'; function QProcess_execute(_program: PWideString; arguments: QStringListH): Integer; cdecl; external Qt4PasLib name 'QProcess_execute'; function QProcess_execute(_program: PWideString): Integer; cdecl; external Qt4PasLib name 'QProcess_execute2'; function QProcess_startDetached(_program: PWideString; arguments: QStringListH; workingDirectory: PWideString; pid: pint64 = nil): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached'; function QProcess_startDetached(_program: PWideString; arguments: QStringListH): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached2'; function QProcess_startDetached(_program: PWideString): Boolean; cdecl; external Qt4PasLib name 'QProcess_startDetached3'; procedure QProcess_systemEnvironment(retval: QStringListH); cdecl; external Qt4PasLib name 'QProcess_systemEnvironment'; procedure QProcess_terminate(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_terminate'; procedure QProcess_kill(handle: QProcessH); cdecl; external Qt4PasLib name 'QProcess_kill'; type QProcess_started_Event = procedure () of object cdecl; QProcess_finished_Event = procedure (exitCode: Integer) of object cdecl; QProcess_finished2_Event = procedure (exitCode: Integer; exitStatus: QProcessExitStatus) of object cdecl; QProcess_error_Event = procedure (error: QProcessProcessError) of object cdecl; QProcess_stateChanged_Event = procedure (state: QProcessProcessState) of object cdecl; QProcess_readyReadStandardOutput_Event = procedure () of object cdecl; QProcess_readyReadStandardError_Event = procedure () of object cdecl; type QFileFileError = ( //QFile::FileError (2) QFileNoError = 0, QFileReadError = 1, QFileWriteError = 2, QFileFatalError = 3, QFileResourceError = 4, QFileOpenError = 5, QFileAbortError = 6, QFileTimeOutError = 7, QFileUnspecifiedError = 8, QFileRemoveError = 9, QFileRenameError = 10, QFilePositionError = 11, QFileResizeError = 12, QFilePermissionsError = 13, QFileCopyError = 14 ); type QFilePermission = cardinal; // QFile::Permission QFilePermissions = QFilePermission; //QFlags<> (3) const QFileReadOwner = $4000; QFileWriteOwner = $2000; QFileExeOwner = $1000; QFileReadUser = $0400; QFileWriteUser = $0200; QFileExeUser = $0100; QFileReadGroup = $0040; QFileWriteGroup = $0020; QFileExeGroup = $0010; QFileReadOther = $0004; QFileWriteOther = $0002; QFileExeOther = $0001; type QFileMemoryMapFlags = ( //QFile::MemoryMapFlags (2) QFileNoOptions = 0 ); function QFile_create(): QFileH; cdecl; external Qt4PasLib name 'QFile_create'; procedure QFile_destroy(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_destroy'; function QFile_create(name: PWideString): QFileH; cdecl; external Qt4PasLib name 'QFile_create2'; function QFile_create(parent: QObjectH): QFileH; cdecl; external Qt4PasLib name 'QFile_create3'; function QFile_create(name: PWideString; parent: QObjectH): QFileH; cdecl; external Qt4PasLib name 'QFile_create4'; function QFile_error(handle: QFileH): QFileFileError; cdecl; external Qt4PasLib name 'QFile_error'; procedure QFile_unsetError(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_unsetError'; procedure QFile_fileName(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_fileName'; procedure QFile_setFileName(handle: QFileH; name: PWideString); cdecl; external Qt4PasLib name 'QFile_setFileName'; procedure QFile_encodeName(retval: QByteArrayH; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_encodeName'; procedure QFile_decodeName(retval: PWideString; localFileName: QByteArrayH); cdecl; external Qt4PasLib name 'QFile_decodeName'; procedure QFile_decodeName(retval: PWideString; localFileName: PAnsiChar); cdecl; external Qt4PasLib name 'QFile_decodeName2'; function QFile_exists(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_exists'; function QFile_exists(fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_exists2'; procedure QFile_readLink(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_readLink'; procedure QFile_readLink(retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_readLink2'; procedure QFile_symLinkTarget(handle: QFileH; retval: PWideString); cdecl; external Qt4PasLib name 'QFile_symLinkTarget'; procedure QFile_symLinkTarget(retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QFile_symLinkTarget2'; function QFile_remove(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_remove'; function QFile_remove(fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_remove2'; function QFile_rename(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_rename'; function QFile_rename(oldName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_rename2'; function QFile_link(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_link'; function QFile_link(oldname: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_link2'; function QFile_copy(handle: QFileH; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_copy'; function QFile_copy(fileName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFile_copy2'; function QFile_isSequential(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_isSequential'; function QFile_open(handle: QFileH; flags: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QFile_open'; function QFile_open(handle: QFileH; fd: Integer; flags: QIODeviceOpenMode): Boolean; cdecl; external Qt4PasLib name 'QFile_open2'; procedure QFile_close(handle: QFileH); cdecl; external Qt4PasLib name 'QFile_close'; function QFile_size(handle: QFileH): int64; cdecl; external Qt4PasLib name 'QFile_size'; function QFile_pos(handle: QFileH): int64; cdecl; external Qt4PasLib name 'QFile_pos'; function QFile_seek(handle: QFileH; offset: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_seek'; function QFile_atEnd(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_atEnd'; function QFile_flush(handle: QFileH): Boolean; cdecl; external Qt4PasLib name 'QFile_flush'; function QFile_resize(handle: QFileH; sz: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_resize'; function QFile_resize(filename: PWideString; sz: int64): Boolean; cdecl; external Qt4PasLib name 'QFile_resize2'; function QFile_permissions(handle: QFileH): QFilePermissions; cdecl; external Qt4PasLib name 'QFile_permissions'; function QFile_permissions(filename: PWideString): QFilePermissions; cdecl; external Qt4PasLib name 'QFile_permissions2'; function QFile_setPermissions(handle: QFileH; permissionSpec: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFile_setPermissions'; function QFile_setPermissions(filename: PWideString; permissionSpec: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFile_setPermissions2'; function QFile_handle(handle: QFileH): Integer; cdecl; external Qt4PasLib name 'QFile_handle'; function QFile_map(handle: QFileH; offset: int64; size: int64; flags: QFileMemoryMapFlags = QFileNoOptions): PByte; cdecl; external Qt4PasLib name 'QFile_map'; function QFile_unmap(handle: QFileH; address: PByte): Boolean; cdecl; external Qt4PasLib name 'QFile_unmap'; function QFile_fileEngine(handle: QFileH): QAbstractFileEngineH; cdecl; external Qt4PasLib name 'QFile_fileEngine'; function QFileInfo_create(): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create'; procedure QFileInfo_destroy(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_destroy'; function QFileInfo_create(_file: PWideString): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create2'; function QFileInfo_create(_file: QFileH): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create3'; function QFileInfo_create(dir: QDirH; _file: PWideString): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create4'; function QFileInfo_create(fileinfo: QFileInfoH): QFileInfoH; cdecl; external Qt4PasLib name 'QFileInfo_create5'; procedure QFileInfo_setFile(handle: QFileInfoH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_setFile'; procedure QFileInfo_setFile(handle: QFileInfoH; _file: QFileH); cdecl; external Qt4PasLib name 'QFileInfo_setFile2'; procedure QFileInfo_setFile(handle: QFileInfoH; dir: QDirH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_setFile3'; function QFileInfo_exists(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_exists'; procedure QFileInfo_refresh(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_refresh'; procedure QFileInfo_filePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_filePath'; procedure QFileInfo_absoluteFilePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_absoluteFilePath'; procedure QFileInfo_canonicalFilePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_canonicalFilePath'; procedure QFileInfo_fileName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_fileName'; procedure QFileInfo_baseName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_baseName'; procedure QFileInfo_completeBaseName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_completeBaseName'; procedure QFileInfo_suffix(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_suffix'; procedure QFileInfo_bundleName(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_bundleName'; procedure QFileInfo_completeSuffix(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_completeSuffix'; procedure QFileInfo_path(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_path'; procedure QFileInfo_absolutePath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_absolutePath'; procedure QFileInfo_canonicalPath(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_canonicalPath'; procedure QFileInfo_dir(handle: QFileInfoH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileInfo_dir'; procedure QFileInfo_absoluteDir(handle: QFileInfoH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileInfo_absoluteDir'; function QFileInfo_isReadable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isReadable'; function QFileInfo_isWritable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isWritable'; function QFileInfo_isExecutable(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isExecutable'; function QFileInfo_isHidden(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isHidden'; function QFileInfo_isRelative(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isRelative'; function QFileInfo_isAbsolute(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isAbsolute'; function QFileInfo_makeAbsolute(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_makeAbsolute'; function QFileInfo_isFile(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isFile'; function QFileInfo_isDir(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isDir'; function QFileInfo_isSymLink(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isSymLink'; function QFileInfo_isRoot(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isRoot'; function QFileInfo_isBundle(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_isBundle'; procedure QFileInfo_readLink(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_readLink'; procedure QFileInfo_symLinkTarget(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_symLinkTarget'; procedure QFileInfo_owner(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_owner'; function QFileInfo_ownerId(handle: QFileInfoH): LongWord; cdecl; external Qt4PasLib name 'QFileInfo_ownerId'; procedure QFileInfo_group(handle: QFileInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileInfo_group'; function QFileInfo_groupId(handle: QFileInfoH): LongWord; cdecl; external Qt4PasLib name 'QFileInfo_groupId'; function QFileInfo_permission(handle: QFileInfoH; permissions: QFilePermissions): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_permission'; function QFileInfo_permissions(handle: QFileInfoH): QFilePermissions; cdecl; external Qt4PasLib name 'QFileInfo_permissions'; function QFileInfo_size(handle: QFileInfoH): int64; cdecl; external Qt4PasLib name 'QFileInfo_size'; procedure QFileInfo_created(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_created'; procedure QFileInfo_lastModified(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_lastModified'; procedure QFileInfo_lastRead(handle: QFileInfoH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QFileInfo_lastRead'; procedure QFileInfo_detach(handle: QFileInfoH); cdecl; external Qt4PasLib name 'QFileInfo_detach'; function QFileInfo_caching(handle: QFileInfoH): Boolean; cdecl; external Qt4PasLib name 'QFileInfo_caching'; procedure QFileInfo_setCaching(handle: QFileInfoH; _on: Boolean); cdecl; external Qt4PasLib name 'QFileInfo_setCaching'; type QDirSortFlag = cardinal; // QDir::SortFlag QDirSortFlags = QDirSortFlag; //QFlags<> (3) const QDirName = $00; QDirTime = $01; QDirSize = $02; QDirUnsorted = $03; QDirSortByMask = $03; QDirDirsFirst = $04; QDirReversed = $08; QDirIgnoreCase = $10; QDirDirsLast = $20; QDirLocaleAware = $40; QDirType = $80; QDirNoSort = -1; type QDirFilter = cardinal; // QDir::Filter (4) QDirFilters = QDirFilter; // QFlags<> const QDirDirs = 1 { $1 }; QDirFiles = 2 { $2 }; QDirDrives = 4 { $4 }; QDirNoSymLinks = 8 { $8 }; QDirAllEntries = 7 { $7 }; QDirTypeMask = 15 { $f }; QDirReadable = 16 { $10 }; QDirWritable = 32 { $20 }; QDirExecutable = 64 { $40 }; QDirPermissionMask = 112 { $70 }; QDirModified = 128 { $80 }; QDirHidden = 256 { $100 }; QDirSystem = 512 { $200 }; QDirAccessMask = 1008 { $3f0 }; QDirAllDirs = 1024 { $400 }; QDirCaseSensitive = 2048 { $800 }; QDirNoDotAndDotDot = 4096 { $1000 }; QDirNoFilter = 4294967295 { $ffffffff }; function QDir_create(AnonParam1: QDirH): QDirH; cdecl; external Qt4PasLib name 'QDir_create'; procedure QDir_destroy(handle: QDirH); cdecl; external Qt4PasLib name 'QDir_destroy'; function QDir_create(path: PWideString = nil): QDirH; cdecl; external Qt4PasLib name 'QDir_create2'; function QDir_create(path: PWideString; nameFilter: PWideString; sort: QDirSortFlags; filter: QDirFilters = QDirAllEntries): QDirH; cdecl; external Qt4PasLib name 'QDir_create3'; procedure QDir_setPath(handle: QDirH; path: PWideString); cdecl; external Qt4PasLib name 'QDir_setPath'; procedure QDir_path(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_path'; procedure QDir_absolutePath(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_absolutePath'; procedure QDir_canonicalPath(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_canonicalPath'; procedure QDir_addResourceSearchPath(path: PWideString); cdecl; external Qt4PasLib name 'QDir_addResourceSearchPath'; procedure QDir_setSearchPaths(prefix: PWideString; searchPaths: QStringListH); cdecl; external Qt4PasLib name 'QDir_setSearchPaths'; procedure QDir_addSearchPath(prefix: PWideString; path: PWideString); cdecl; external Qt4PasLib name 'QDir_addSearchPath'; procedure QDir_searchPaths(retval: QStringListH; prefix: PWideString); cdecl; external Qt4PasLib name 'QDir_searchPaths'; procedure QDir_dirName(handle: QDirH; retval: PWideString); cdecl; external Qt4PasLib name 'QDir_dirName'; procedure QDir_filePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_filePath'; procedure QDir_absoluteFilePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_absoluteFilePath'; procedure QDir_relativeFilePath(handle: QDirH; retval: PWideString; fileName: PWideString); cdecl; external Qt4PasLib name 'QDir_relativeFilePath'; procedure QDir_toNativeSeparators(retval: PWideString; pathName: PWideString); cdecl; external Qt4PasLib name 'QDir_toNativeSeparators'; procedure QDir_fromNativeSeparators(retval: PWideString; pathName: PWideString); cdecl; external Qt4PasLib name 'QDir_fromNativeSeparators'; function QDir_cd(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_cd'; function QDir_cdUp(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_cdUp'; procedure QDir_nameFilters(handle: QDirH; retval: QStringListH); cdecl; external Qt4PasLib name 'QDir_nameFilters'; procedure QDir_setNameFilters(handle: QDirH; nameFilters: QStringListH); cdecl; external Qt4PasLib name 'QDir_setNameFilters'; function QDir_filter(handle: QDirH): QDirFilters; cdecl; external Qt4PasLib name 'QDir_filter'; procedure QDir_setFilter(handle: QDirH; filter: QDirFilters); cdecl; external Qt4PasLib name 'QDir_setFilter'; function QDir_sorting(handle: QDirH): QDirSortFlags; cdecl; external Qt4PasLib name 'QDir_sorting'; procedure QDir_setSorting(handle: QDirH; sort: QDirSortFlags); cdecl; external Qt4PasLib name 'QDir_setSorting'; function QDir_count(handle: QDirH): LongWord; cdecl; external Qt4PasLib name 'QDir_count'; procedure QDir_nameFiltersFromString(retval: QStringListH; nameFilter: PWideString); cdecl; external Qt4PasLib name 'QDir_nameFiltersFromString'; procedure QDir_entryList(handle: QDirH; retval: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryList'; procedure QDir_entryList(handle: QDirH; retval: QStringListH; nameFilters: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryList2'; procedure QDir_entryInfoList(handle: QDirH; retval: PPtrIntArray; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryInfoList'; procedure QDir_entryInfoList(handle: QDirH; retval: PPtrIntArray; nameFilters: QStringListH; filters: QDirFilters = QDirNoFilter; sort: QDirSortFlags = QDirNoSort); cdecl; external Qt4PasLib name 'QDir_entryInfoList2'; function QDir_mkdir(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_mkdir'; function QDir_rmdir(handle: QDirH; dirName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rmdir'; function QDir_mkpath(handle: QDirH; dirPath: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_mkpath'; function QDir_rmpath(handle: QDirH; dirPath: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rmpath'; function QDir_isReadable(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isReadable'; function QDir_exists(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_exists'; function QDir_isRoot(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isRoot'; function QDir_isRelativePath(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_isRelativePath'; function QDir_isAbsolutePath(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_isAbsolutePath'; function QDir_isRelative(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isRelative'; function QDir_isAbsolute(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_isAbsolute'; function QDir_makeAbsolute(handle: QDirH): Boolean; cdecl; external Qt4PasLib name 'QDir_makeAbsolute'; function QDir_remove(handle: QDirH; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_remove'; function QDir_rename(handle: QDirH; oldName: PWideString; newName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_rename'; function QDir_exists(handle: QDirH; name: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_exists2'; procedure QDir_drives(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QDir_drives'; procedure QDir_separator(retval: PWideChar); cdecl; external Qt4PasLib name 'QDir_separator'; function QDir_setCurrent(path: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_setCurrent'; procedure QDir_current(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_current'; procedure QDir_currentPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_currentPath'; procedure QDir_home(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_home'; procedure QDir_homePath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_homePath'; procedure QDir_root(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_root'; procedure QDir_rootPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_rootPath'; procedure QDir_temp(retval: QDirH); cdecl; external Qt4PasLib name 'QDir_temp'; procedure QDir_tempPath(retval: PWideString); cdecl; external Qt4PasLib name 'QDir_tempPath'; function QDir_match(filters: QStringListH; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_match'; function QDir_match(filter: PWideString; fileName: PWideString): Boolean; cdecl; external Qt4PasLib name 'QDir_match2'; procedure QDir_cleanPath(retval: PWideString; path: PWideString); cdecl; external Qt4PasLib name 'QDir_cleanPath'; procedure QDir_refresh(handle: QDirH); cdecl; external Qt4PasLib name 'QDir_refresh'; type QUrlParsingMode = ( // QUrl::ParsingMode (1) QUrlTolerantMode, QUrlStrictMode ); type QUrlFormattingOption = cardinal; // QUrl::FormattingOption (4) QUrlFormattingOptions = QUrlFormattingOption; // QFlags<> const QUrlNone = 0 { $0 }; QUrlRemoveScheme = 1 { $1 }; QUrlRemovePassword = 2 { $2 }; QUrlRemoveUserInfo = 6 { $6 }; QUrlRemovePort = 8 { $8 }; QUrlRemoveAuthority = 30 { $1e }; QUrlRemovePath = 32 { $20 }; QUrlRemoveQuery = 64 { $40 }; QUrlRemoveFragment = 128 { $80 }; QUrlStripTrailingSlash = 65536 { $10000 }; function QUrl_create(): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create'; procedure QUrl_destroy(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_destroy'; function QUrl_create(url: PWideString): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create2'; function QUrl_create(url: PWideString; mode: QUrlParsingMode): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create3'; function QUrl_create(copy: QUrlH): QUrlH; cdecl; external Qt4PasLib name 'QUrl_create4'; procedure QUrl_setUrl(handle: QUrlH; url: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUrl'; procedure QUrl_setUrl(handle: QUrlH; url: PWideString; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_setUrl2'; procedure QUrl_setEncodedUrl(handle: QUrlH; url: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedUrl'; procedure QUrl_setEncodedUrl(handle: QUrlH; url: QByteArrayH; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_setEncodedUrl2'; function QUrl_isValid(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isValid'; function QUrl_isEmpty(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isEmpty'; procedure QUrl_clear(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_clear'; procedure QUrl_setScheme(handle: QUrlH; scheme: PWideString); cdecl; external Qt4PasLib name 'QUrl_setScheme'; procedure QUrl_scheme(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_scheme'; procedure QUrl_setAuthority(handle: QUrlH; authority: PWideString); cdecl; external Qt4PasLib name 'QUrl_setAuthority'; procedure QUrl_authority(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_authority'; procedure QUrl_setUserInfo(handle: QUrlH; userInfo: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUserInfo'; procedure QUrl_userInfo(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_userInfo'; procedure QUrl_setUserName(handle: QUrlH; userName: PWideString); cdecl; external Qt4PasLib name 'QUrl_setUserName'; procedure QUrl_userName(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_userName'; procedure QUrl_setEncodedUserName(handle: QUrlH; userName: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedUserName'; procedure QUrl_encodedUserName(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedUserName'; procedure QUrl_setPassword(handle: QUrlH; password: PWideString); cdecl; external Qt4PasLib name 'QUrl_setPassword'; procedure QUrl_password(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_password'; procedure QUrl_setEncodedPassword(handle: QUrlH; password: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedPassword'; procedure QUrl_encodedPassword(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedPassword'; procedure QUrl_setHost(handle: QUrlH; host: PWideString); cdecl; external Qt4PasLib name 'QUrl_setHost'; procedure QUrl_host(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_host'; procedure QUrl_setEncodedHost(handle: QUrlH; host: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedHost'; procedure QUrl_encodedHost(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedHost'; procedure QUrl_setPort(handle: QUrlH; port: Integer); cdecl; external Qt4PasLib name 'QUrl_setPort'; function QUrl_port(handle: QUrlH): Integer; cdecl; external Qt4PasLib name 'QUrl_port'; function QUrl_port(handle: QUrlH; defaultPort: Integer): Integer; cdecl; external Qt4PasLib name 'QUrl_port2'; procedure QUrl_setPath(handle: QUrlH; path: PWideString); cdecl; external Qt4PasLib name 'QUrl_setPath'; procedure QUrl_path(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_path'; procedure QUrl_setEncodedPath(handle: QUrlH; path: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedPath'; procedure QUrl_encodedPath(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedPath'; function QUrl_hasQuery(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasQuery'; procedure QUrl_setEncodedQuery(handle: QUrlH; query: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedQuery'; procedure QUrl_encodedQuery(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedQuery'; procedure QUrl_setQueryDelimiters(handle: QUrlH; valueDelimiter: char; pairDelimiter: char); cdecl; external Qt4PasLib name 'QUrl_setQueryDelimiters'; function QUrl_queryValueDelimiter(handle: QUrlH): char; cdecl; external Qt4PasLib name 'QUrl_queryValueDelimiter'; function QUrl_queryPairDelimiter(handle: QUrlH): char; cdecl; external Qt4PasLib name 'QUrl_queryPairDelimiter'; procedure QUrl_addQueryItem(handle: QUrlH; key: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QUrl_addQueryItem'; function QUrl_hasQueryItem(handle: QUrlH; key: PWideString): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasQueryItem'; procedure QUrl_queryItemValue(handle: QUrlH; retval: PWideString; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_queryItemValue'; procedure QUrl_allQueryItemValues(handle: QUrlH; retval: QStringListH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_allQueryItemValues'; procedure QUrl_removeQueryItem(handle: QUrlH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_removeQueryItem'; procedure QUrl_removeAllQueryItems(handle: QUrlH; key: PWideString); cdecl; external Qt4PasLib name 'QUrl_removeAllQueryItems'; procedure QUrl_addEncodedQueryItem(handle: QUrlH; key: QByteArrayH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_addEncodedQueryItem'; function QUrl_hasEncodedQueryItem(handle: QUrlH; key: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasEncodedQueryItem'; procedure QUrl_encodedQueryItemValue(handle: QUrlH; retval: QByteArrayH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedQueryItemValue'; procedure QUrl_removeEncodedQueryItem(handle: QUrlH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_removeEncodedQueryItem'; procedure QUrl_removeAllEncodedQueryItems(handle: QUrlH; key: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_removeAllEncodedQueryItems'; procedure QUrl_setFragment(handle: QUrlH; fragment: PWideString); cdecl; external Qt4PasLib name 'QUrl_setFragment'; procedure QUrl_fragment(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_fragment'; procedure QUrl_setEncodedFragment(handle: QUrlH; fragment: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_setEncodedFragment'; procedure QUrl_encodedFragment(handle: QUrlH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_encodedFragment'; function QUrl_hasFragment(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_hasFragment'; procedure QUrl_resolved(handle: QUrlH; retval: QUrlH; relative: QUrlH); cdecl; external Qt4PasLib name 'QUrl_resolved'; function QUrl_isRelative(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isRelative'; function QUrl_isParentOf(handle: QUrlH; url: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isParentOf'; procedure QUrl_fromLocalFile(retval: QUrlH; localfile: PWideString); cdecl; external Qt4PasLib name 'QUrl_fromLocalFile'; procedure QUrl_toLocalFile(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_toLocalFile'; procedure QUrl_toString(handle: QUrlH; retval: PWideString; options: QUrlFormattingOptions = QUrlNone); cdecl; external Qt4PasLib name 'QUrl_toString'; procedure QUrl_toEncoded(handle: QUrlH; retval: QByteArrayH; options: QUrlFormattingOptions = QUrlNone); cdecl; external Qt4PasLib name 'QUrl_toEncoded'; procedure QUrl_fromEncoded(retval: QUrlH; url: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromEncoded'; procedure QUrl_fromEncoded(retval: QUrlH; url: QByteArrayH; mode: QUrlParsingMode); cdecl; external Qt4PasLib name 'QUrl_fromEncoded2'; procedure QUrl_detach(handle: QUrlH); cdecl; external Qt4PasLib name 'QUrl_detach'; function QUrl_isDetached(handle: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QUrl_isDetached'; procedure QUrl_fromPercentEncoding(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromPercentEncoding'; procedure QUrl_toPercentEncoding(retval: QByteArrayH; AnonParam1: PWideString; exclude: QByteArrayH = nil; include: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QUrl_toPercentEncoding'; procedure QUrl_fromPunycode(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromPunycode'; procedure QUrl_toPunycode(retval: QByteArrayH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QUrl_toPunycode'; procedure QUrl_fromAce(retval: PWideString; AnonParam1: QByteArrayH); cdecl; external Qt4PasLib name 'QUrl_fromAce'; procedure QUrl_toAce(retval: QByteArrayH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QUrl_toAce'; procedure QUrl_idnWhitelist(retval: QStringListH); cdecl; external Qt4PasLib name 'QUrl_idnWhitelist'; procedure QUrl_setIdnWhitelist(AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QUrl_setIdnWhitelist'; procedure QUrl_errorString(handle: QUrlH; retval: PWideString); cdecl; external Qt4PasLib name 'QUrl_errorString'; function QFileSystemWatcher_create(parent: QObjectH = nil): QFileSystemWatcherH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_create'; procedure QFileSystemWatcher_destroy(handle: QFileSystemWatcherH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_destroy'; function QFileSystemWatcher_create(paths: QStringListH; parent: QObjectH = nil): QFileSystemWatcherH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_create2'; procedure QFileSystemWatcher_addPath(handle: QFileSystemWatcherH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileSystemWatcher_addPath'; procedure QFileSystemWatcher_addPaths(handle: QFileSystemWatcherH; files: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_addPaths'; procedure QFileSystemWatcher_removePath(handle: QFileSystemWatcherH; _file: PWideString); cdecl; external Qt4PasLib name 'QFileSystemWatcher_removePath'; procedure QFileSystemWatcher_removePaths(handle: QFileSystemWatcherH; files: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_removePaths'; procedure QFileSystemWatcher_files(handle: QFileSystemWatcherH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_files'; procedure QFileSystemWatcher_directories(handle: QFileSystemWatcherH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_directories'; type QFileSystemWatcher_fileChanged_Event = procedure (path: PWideString) of object cdecl; QFileSystemWatcher_directoryChanged_Event = procedure (path: PWideString) of object cdecl; type QApplicationType = ( // QApplication::Type (1) QApplicationTty, QApplicationGuiClient, QApplicationGuiServer ); QApplicationColorSpec = ( //QApplication::ColorSpec (2) QApplicationNormalColor = 0, QApplicationCustomColor = 1, QApplicationManyColor = 2 ); function QApplication_create(argc: PInteger; argv: PPAnsiChar; AnonParam3: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create'; procedure QApplication_destroy(handle: QApplicationH); cdecl; external Qt4PasLib name 'QApplication_destroy'; function QApplication_create(argc: PInteger; argv: PPAnsiChar; GUIenabled: Boolean; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create2'; function QApplication_create(argc: PInteger; argv: PPAnsiChar; AnonParam3: QApplicationType; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create3'; {$ifdef BINUX } function QApplication_create(dpy: PDisplay; visual: QtHANDLE = 0; cmap: QtHANDLE = 0; AnonParam4: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create4'; function QApplication_create(dpy: PDisplay; argc: PInteger; argv: PPAnsiChar; visual: QtHANDLE = 0; cmap: QtHANDLE = 0; AnonParam6: Integer = QT_VERSION): QApplicationH; cdecl; external Qt4PasLib name 'QApplication_create5'; {$endif} function QApplication_type(): QApplicationType; cdecl; external Qt4PasLib name 'QApplication_type'; function QApplication_style(): QStyleH; cdecl; external Qt4PasLib name 'QApplication_style'; procedure QApplication_setStyle(AnonParam1: QStyleH); cdecl; external Qt4PasLib name 'QApplication_setStyle'; function QApplication_setStyle(AnonParam1: PWideString): QStyleH; cdecl; external Qt4PasLib name 'QApplication_setStyle2'; function QApplication_colorSpec(): Integer; cdecl; external Qt4PasLib name 'QApplication_colorSpec'; procedure QApplication_setColorSpec(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setColorSpec'; procedure QApplication_setGraphicsSystem(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QApplication_setGraphicsSystem'; function QApplication_overrideCursor(): QCursorH; cdecl; external Qt4PasLib name 'QApplication_overrideCursor'; procedure QApplication_setOverrideCursor(AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QApplication_setOverrideCursor'; procedure QApplication_changeOverrideCursor(AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QApplication_changeOverrideCursor'; procedure QApplication_restoreOverrideCursor(); cdecl; external Qt4PasLib name 'QApplication_restoreOverrideCursor'; procedure QApplication_palette(retval: QPaletteH); cdecl; external Qt4PasLib name 'QApplication_palette'; procedure QApplication_palette(retval: QPaletteH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_palette2'; procedure QApplication_palette(retval: QPaletteH; className: PAnsiChar); cdecl; external Qt4PasLib name 'QApplication_palette3'; procedure QApplication_setPalette(AnonParam1: QPaletteH; className: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QApplication_setPalette'; procedure QApplication_font(retval: QFontH); cdecl; external Qt4PasLib name 'QApplication_font'; procedure QApplication_font(retval: QFontH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_font2'; procedure QApplication_font(retval: QFontH; className: PAnsiChar); cdecl; external Qt4PasLib name 'QApplication_font3'; procedure QApplication_setFont(AnonParam1: QFontH; className: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QApplication_setFont'; procedure QApplication_fontMetrics(retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QApplication_fontMetrics'; procedure QApplication_setWindowIcon(icon: QIconH); cdecl; external Qt4PasLib name 'QApplication_setWindowIcon'; procedure QApplication_windowIcon(retval: QIconH); cdecl; external Qt4PasLib name 'QApplication_windowIcon'; function QApplication_desktop(): QDesktopWidgetH; cdecl; external Qt4PasLib name 'QApplication_desktop'; function QApplication_activePopupWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activePopupWidget'; function QApplication_activeModalWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activeModalWidget'; function QApplication_clipboard(): QClipboardH; cdecl; external Qt4PasLib name 'QApplication_clipboard'; function QApplication_focusWidget(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_focusWidget'; function QApplication_activeWindow(): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_activeWindow'; procedure QApplication_setActiveWindow(act: QWidgetH); cdecl; external Qt4PasLib name 'QApplication_setActiveWindow'; function QApplication_widgetAt(p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_widgetAt'; function QApplication_widgetAt(x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_widgetAt2'; function QApplication_topLevelAt(p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_topLevelAt'; function QApplication_topLevelAt(x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QApplication_topLevelAt2'; procedure QApplication_syncX(); cdecl; external Qt4PasLib name 'QApplication_syncX'; procedure QApplication_beep(); cdecl; external Qt4PasLib name 'QApplication_beep'; procedure QApplication_alert(widget: QWidgetH; duration: Integer = 0); cdecl; external Qt4PasLib name 'QApplication_alert'; function QApplication_keyboardModifiers(): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QApplication_keyboardModifiers'; function QApplication_mouseButtons(): QtMouseButtons; cdecl; external Qt4PasLib name 'QApplication_mouseButtons'; procedure QApplication_setDesktopSettingsAware(AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QApplication_setDesktopSettingsAware'; function QApplication_desktopSettingsAware(): Boolean; cdecl; external Qt4PasLib name 'QApplication_desktopSettingsAware'; procedure QApplication_setCursorFlashTime(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setCursorFlashTime'; function QApplication_cursorFlashTime(): Integer; cdecl; external Qt4PasLib name 'QApplication_cursorFlashTime'; procedure QApplication_setDoubleClickInterval(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setDoubleClickInterval'; function QApplication_doubleClickInterval(): Integer; cdecl; external Qt4PasLib name 'QApplication_doubleClickInterval'; procedure QApplication_setKeyboardInputInterval(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setKeyboardInputInterval'; function QApplication_keyboardInputInterval(): Integer; cdecl; external Qt4PasLib name 'QApplication_keyboardInputInterval'; procedure QApplication_setWheelScrollLines(AnonParam1: Integer); cdecl; external Qt4PasLib name 'QApplication_setWheelScrollLines'; function QApplication_wheelScrollLines(): Integer; cdecl; external Qt4PasLib name 'QApplication_wheelScrollLines'; procedure QApplication_setGlobalStrut(AnonParam1: PSize); cdecl; external Qt4PasLib name 'QApplication_setGlobalStrut'; procedure QApplication_globalStrut(retval: PSize); cdecl; external Qt4PasLib name 'QApplication_globalStrut'; procedure QApplication_setStartDragTime(ms: Integer); cdecl; external Qt4PasLib name 'QApplication_setStartDragTime'; function QApplication_startDragTime(): Integer; cdecl; external Qt4PasLib name 'QApplication_startDragTime'; procedure QApplication_setStartDragDistance(l: Integer); cdecl; external Qt4PasLib name 'QApplication_setStartDragDistance'; function QApplication_startDragDistance(): Integer; cdecl; external Qt4PasLib name 'QApplication_startDragDistance'; procedure QApplication_setLayoutDirection(direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QApplication_setLayoutDirection'; function QApplication_layoutDirection(): QtLayoutDirection; cdecl; external Qt4PasLib name 'QApplication_layoutDirection'; function QApplication_isRightToLeft(): Boolean; cdecl; external Qt4PasLib name 'QApplication_isRightToLeft'; function QApplication_isLeftToRight(): Boolean; cdecl; external Qt4PasLib name 'QApplication_isLeftToRight'; function QApplication_isEffectEnabled(AnonParam1: QtUIEffect): Boolean; cdecl; external Qt4PasLib name 'QApplication_isEffectEnabled'; procedure QApplication_setEffectEnabled(AnonParam1: QtUIEffect; enable: Boolean = True); cdecl; external Qt4PasLib name 'QApplication_setEffectEnabled'; {$ifdef BINUX } function QApplication_x11EventFilter(handle: QApplicationH; AnonParam1: PEvent): Boolean; cdecl; external Qt4PasLib name 'QApplication_x11EventFilter'; function QApplication_x11ClientMessage(handle: QApplicationH; AnonParam1: QWidgetH; AnonParam2: PEvent; passive_only: Boolean): Integer; cdecl; external Qt4PasLib name 'QApplication_x11ClientMessage'; function QApplication_x11ProcessEvent(handle: QApplicationH; AnonParam1: PEvent): Integer; cdecl; external Qt4PasLib name 'QApplication_x11ProcessEvent'; {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} function QApplication_isSessionRestored(handle: QApplicationH): Boolean; cdecl; external Qt4PasLib name 'QApplication_isSessionRestored'; procedure QApplication_sessionId(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_sessionId'; procedure QApplication_sessionKey(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_sessionKey'; procedure QApplication_commitData(handle: QApplicationH; sm: QSessionManagerH); cdecl; external Qt4PasLib name 'QApplication_commitData'; procedure QApplication_saveState(handle: QApplicationH; sm: QSessionManagerH); cdecl; external Qt4PasLib name 'QApplication_saveState'; {$endif} procedure QApplication_setInputContext(handle: QApplicationH; AnonParam1: QInputContextH); cdecl; external Qt4PasLib name 'QApplication_setInputContext'; function QApplication_inputContext(handle: QApplicationH): QInputContextH; cdecl; external Qt4PasLib name 'QApplication_inputContext'; procedure QApplication_keyboardInputLocale(retval: QLocaleH); cdecl; external Qt4PasLib name 'QApplication_keyboardInputLocale'; function QApplication_keyboardInputDirection(): QtLayoutDirection; cdecl; external Qt4PasLib name 'QApplication_keyboardInputDirection'; function QApplication_exec(): Integer; cdecl; external Qt4PasLib name 'QApplication_exec'; function QApplication_notify(handle: QApplicationH; AnonParam1: QObjectH; AnonParam2: QEventH): Boolean; cdecl; external Qt4PasLib name 'QApplication_notify'; procedure QApplication_setQuitOnLastWindowClosed(quit: Boolean); cdecl; external Qt4PasLib name 'QApplication_setQuitOnLastWindowClosed'; function QApplication_quitOnLastWindowClosed(): Boolean; cdecl; external Qt4PasLib name 'QApplication_quitOnLastWindowClosed'; procedure QApplication_styleSheet(handle: QApplicationH; retval: PWideString); cdecl; external Qt4PasLib name 'QApplication_styleSheet'; procedure QApplication_setStyleSheet(handle: QApplicationH; sheet: PWideString); cdecl; external Qt4PasLib name 'QApplication_setStyleSheet'; procedure QApplication_closeAllWindows(); cdecl; external Qt4PasLib name 'QApplication_closeAllWindows'; procedure QApplication_aboutQt(); cdecl; external Qt4PasLib name 'QApplication_aboutQt'; {$ifdef MSWINDOWS } procedure QApplication_winFocus(handle: QApplicationH; AnonParam1: QWidgetH; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QApplication_winFocus'; procedure QApplication_winMouseButtonUp(); cdecl; external Qt4PasLib name 'QApplication_winMouseButtonUp'; {$endif} {$ifdef DARWIN } function QApplication_macEventFilter(handle: QApplicationH; AnonParam1: EventHandlerCallRef; AnonParam2: EventRef): Boolean; cdecl; external Qt4PasLib name 'QApplication_macEventFilter'; {$endif} {$ifdef QTOPIA } function QApplication_qwsEventFilter(handle: QApplicationH; AnonParam1: QWSEventH): Boolean; cdecl; external Qt4PasLib name 'QApplication_qwsEventFilter'; function QApplication_qwsProcessEvent(handle: QApplicationH; AnonParam1: QWSEventH): Integer; cdecl; external Qt4PasLib name 'QApplication_qwsProcessEvent'; procedure QApplication_qwsSetCustomColors(handle: QApplicationH; colortable: PQRgb; start: Integer; numColors: Integer); cdecl; external Qt4PasLib name 'QApplication_qwsSetCustomColors'; function QApplication_qwsDecoration(): QDecorationH; cdecl; external Qt4PasLib name 'QApplication_qwsDecoration'; procedure QApplication_qwsSetDecoration(AnonParam1: QDecorationH); cdecl; external Qt4PasLib name 'QApplication_qwsSetDecoration'; function QApplication_qwsSetDecoration(decoration: PWideString): QDecorationH; cdecl; external Qt4PasLib name 'QApplication_qwsSetDecoration2'; {$endif} type QApplication_lastWindowClosed_Event = procedure () of object cdecl; QApplication_focusChanged_Event = procedure (old: QWidgetH; now: QWidgetH) of object cdecl; QApplication_fontDatabaseChanged_Event = procedure () of object cdecl; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN) } QApplication_commitDataRequest_Event = procedure (sessionManager: QSessionManagerH) of object cdecl; QApplication_saveStateRequest_Event = procedure (sessionManager: QSessionManagerH) of object cdecl; {$endif} procedure QWhatsThis_enterWhatsThisMode(); cdecl; external Qt4PasLib name 'QWhatsThis_enterWhatsThisMode'; function QWhatsThis_inWhatsThisMode(): Boolean; cdecl; external Qt4PasLib name 'QWhatsThis_inWhatsThisMode'; procedure QWhatsThis_leaveWhatsThisMode(); cdecl; external Qt4PasLib name 'QWhatsThis_leaveWhatsThisMode'; procedure QWhatsThis_showText(pos: PQtPoint; text: PWideString; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QWhatsThis_showText'; procedure QWhatsThis_hideText(); cdecl; external Qt4PasLib name 'QWhatsThis_hideText'; function QWhatsThis_createAction(parent: QObjectH = nil): QActionH; cdecl; external Qt4PasLib name 'QWhatsThis_createAction'; type QPaletteColorGroup = cardinal; // QPalette::ColorGroup (4) const QPaletteActive = 0 { $0 }; QPaletteDisabled = 1 { $1 }; QPaletteInactive = 2 { $2 }; QPaletteNColorGroups = 3 { $3 }; QPaletteCurrent = 4 { $4 }; QPaletteAll = 5 { $5 }; QPaletteNormal = 0 { $0 }; type QPaletteColorRole = cardinal; // QPalette::ColorRole (4) const QPaletteWindowText = 0 { $0 }; QPaletteButton = 1 { $1 }; QPaletteLight = 2 { $2 }; QPaletteMidlight = 3 { $3 }; QPaletteDark = 4 { $4 }; QPaletteMid = 5 { $5 }; QPaletteText = 6 { $6 }; QPaletteBrightText = 7 { $7 }; QPaletteButtonText = 8 { $8 }; QPaletteBase = 9 { $9 }; QPaletteWindow = 10 { $a }; QPaletteShadow = 11 { $b }; QPaletteHighlight = 12 { $c }; QPaletteHighlightedText = 13 { $d }; QPaletteLink = 14 { $e }; QPaletteLinkVisited = 15 { $f }; QPaletteAlternateBase = 16 { $10 }; QPaletteNoRole = 17 { $11 }; QPaletteToolTipBase = 18 { $12 }; QPaletteToolTipText = 19 { $13 }; QPaletteNColorRoles = 20 { $14 }; QPaletteForeground = 0 { $0 }; QPaletteBackground = 10 { $a }; function QPalette_create(): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create'; procedure QPalette_destroy(handle: QPaletteH); cdecl; external Qt4PasLib name 'QPalette_destroy'; function QPalette_create(button: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create2'; function QPalette_create(button: QtGlobalColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create3'; function QPalette_create(button: PQColor; window: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create4'; function QPalette_create(windowText: QBrushH; button: QBrushH; light: QBrushH; dark: QBrushH; mid: QBrushH; text: QBrushH; bright_text: QBrushH; base: QBrushH; window: QBrushH): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create5'; function QPalette_create(windowText: PQColor; window: PQColor; light: PQColor; dark: PQColor; mid: PQColor; text: PQColor; base: PQColor): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create6'; function QPalette_create(palette: QPaletteH): QPaletteH; cdecl; external Qt4PasLib name 'QPalette_create7'; function QPalette_currentColorGroup(handle: QPaletteH): QPaletteColorGroup; cdecl; external Qt4PasLib name 'QPalette_currentColorGroup'; procedure QPalette_setCurrentColorGroup(handle: QPaletteH; cg: QPaletteColorGroup); cdecl; external Qt4PasLib name 'QPalette_setCurrentColorGroup'; function QPalette_color(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): PQColor; cdecl; external Qt4PasLib name 'QPalette_color'; function QPalette_brush(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brush'; procedure QPalette_setColor(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole; color: PQColor); cdecl; external Qt4PasLib name 'QPalette_setColor'; procedure QPalette_setColor(handle: QPaletteH; cr: QPaletteColorRole; color: PQColor); cdecl; external Qt4PasLib name 'QPalette_setColor2'; procedure QPalette_setBrush(handle: QPaletteH; cr: QPaletteColorRole; brush: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setBrush'; function QPalette_isBrushSet(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole): Boolean; cdecl; external Qt4PasLib name 'QPalette_isBrushSet'; procedure QPalette_setBrush(handle: QPaletteH; cg: QPaletteColorGroup; cr: QPaletteColorRole; brush: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setBrush2'; procedure QPalette_setColorGroup(handle: QPaletteH; cr: QPaletteColorGroup; windowText: QBrushH; button: QBrushH; light: QBrushH; dark: QBrushH; mid: QBrushH; text: QBrushH; bright_text: QBrushH; base: QBrushH; window: QBrushH); cdecl; external Qt4PasLib name 'QPalette_setColorGroup'; function QPalette_isEqual(handle: QPaletteH; cr1: QPaletteColorGroup; cr2: QPaletteColorGroup): Boolean; cdecl; external Qt4PasLib name 'QPalette_isEqual'; function QPalette_color(handle: QPaletteH; cr: QPaletteColorRole): PQColor; cdecl; external Qt4PasLib name 'QPalette_color2'; function QPalette_brush(handle: QPaletteH; cr: QPaletteColorRole): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brush2'; function QPalette_foreground(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_foreground'; function QPalette_windowText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_windowText'; function QPalette_button(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_button'; function QPalette_light(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_light'; function QPalette_dark(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_dark'; function QPalette_mid(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_mid'; function QPalette_text(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_text'; function QPalette_base(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_base'; function QPalette_alternateBase(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_alternateBase'; function QPalette_toolTipBase(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_toolTipBase'; function QPalette_toolTipText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_toolTipText'; function QPalette_background(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_background'; function QPalette_window(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_window'; function QPalette_midlight(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_midlight'; function QPalette_brightText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_brightText'; function QPalette_buttonText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_buttonText'; function QPalette_shadow(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_shadow'; function QPalette_highlight(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_highlight'; function QPalette_highlightedText(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_highlightedText'; function QPalette_link(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_link'; function QPalette_linkVisited(handle: QPaletteH): QBrushH; cdecl; external Qt4PasLib name 'QPalette_linkVisited'; function QPalette_isCopyOf(handle: QPaletteH; p: QPaletteH): Boolean; cdecl; external Qt4PasLib name 'QPalette_isCopyOf'; function QPalette_serialNumber(handle: QPaletteH): Integer; cdecl; external Qt4PasLib name 'QPalette_serialNumber'; function QPalette_cacheKey(handle: QPaletteH): int64; cdecl; external Qt4PasLib name 'QPalette_cacheKey'; procedure QPalette_resolve(handle: QPaletteH; retval: QPaletteH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QPalette_resolve'; function QPalette_resolve(handle: QPaletteH): LongWord; cdecl; external Qt4PasLib name 'QPalette_resolve2'; procedure QPalette_resolve(handle: QPaletteH; mask: LongWord); cdecl; external Qt4PasLib name 'QPalette_resolve3'; type QSizePolicyPolicyFlag = ( //QSizePolicy::PolicyFlag (2) QSizePolicyGrowFlag = 1, QSizePolicyExpandFlag = 2, QSizePolicyShrinkFlag = 4, QSizePolicyIgnoreFlag = 8 ); type QSizePolicyControlType = cardinal; // QSizePolicy::ControlType QSizePolicyControlTypes = QSizePolicyControlType; //QFlags<> (3) const QSizePolicyDefaultType = $00000001; QSizePolicyButtonBox = $00000002; QSizePolicyCheckBox = $00000004; QSizePolicyComboBox = $00000008; QSizePolicyFrame = $00000010; QSizePolicyGroupBox = $00000020; QSizePolicyLabel = $00000040; QSizePolicyLine = $00000080; QSizePolicyLineEdit = $00000100; QSizePolicyPushButton = $00000200; QSizePolicyRadioButton = $00000400; QSizePolicySlider = $00000800; QSizePolicySpinBox = $00001000; QSizePolicyTabWidget = $00002000; QSizePolicyToolButton = $00004000; type QSizePolicyPolicy = cardinal; // QSizePolicy::Policy (4) const QSizePolicyFixed = 0 { $0 }; QSizePolicyMinimum = 1 { $1 }; QSizePolicyMaximum = 4 { $4 }; QSizePolicyPreferred = 5 { $5 }; QSizePolicyMinimumExpanding = 3 { $3 }; QSizePolicyExpanding = 7 { $7 }; QSizePolicyIgnored = 13 { $d }; function QSizePolicy_create(): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create'; procedure QSizePolicy_destroy(handle: QSizePolicyH); cdecl; external Qt4PasLib name 'QSizePolicy_destroy'; function QSizePolicy_create(horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create2'; function QSizePolicy_create(horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy; _type: QSizePolicyControlType): QSizePolicyH; cdecl; external Qt4PasLib name 'QSizePolicy_create3'; function QSizePolicy_horizontalPolicy(handle: QSizePolicyH): QSizePolicyPolicy; cdecl; external Qt4PasLib name 'QSizePolicy_horizontalPolicy'; function QSizePolicy_verticalPolicy(handle: QSizePolicyH): QSizePolicyPolicy; cdecl; external Qt4PasLib name 'QSizePolicy_verticalPolicy'; function QSizePolicy_controlType(handle: QSizePolicyH): QSizePolicyControlType; cdecl; external Qt4PasLib name 'QSizePolicy_controlType'; procedure QSizePolicy_setHorizontalPolicy(handle: QSizePolicyH; d: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QSizePolicy_setHorizontalPolicy'; procedure QSizePolicy_setVerticalPolicy(handle: QSizePolicyH; d: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QSizePolicy_setVerticalPolicy'; procedure QSizePolicy_setControlType(handle: QSizePolicyH; _type: QSizePolicyControlType); cdecl; external Qt4PasLib name 'QSizePolicy_setControlType'; function QSizePolicy_expandingDirections(handle: QSizePolicyH): QtOrientations; cdecl; external Qt4PasLib name 'QSizePolicy_expandingDirections'; procedure QSizePolicy_setHeightForWidth(handle: QSizePolicyH; b: Boolean); cdecl; external Qt4PasLib name 'QSizePolicy_setHeightForWidth'; function QSizePolicy_hasHeightForWidth(handle: QSizePolicyH): Boolean; cdecl; external Qt4PasLib name 'QSizePolicy_hasHeightForWidth'; function QSizePolicy_horizontalStretch(handle: QSizePolicyH): Integer; cdecl; external Qt4PasLib name 'QSizePolicy_horizontalStretch'; function QSizePolicy_verticalStretch(handle: QSizePolicyH): Integer; cdecl; external Qt4PasLib name 'QSizePolicy_verticalStretch'; procedure QSizePolicy_setHorizontalStretch(handle: QSizePolicyH; stretchFactor: char); cdecl; external Qt4PasLib name 'QSizePolicy_setHorizontalStretch'; procedure QSizePolicy_setVerticalStretch(handle: QSizePolicyH; stretchFactor: char); cdecl; external Qt4PasLib name 'QSizePolicy_setVerticalStretch'; procedure QSizePolicy_transpose(handle: QSizePolicyH); cdecl; external Qt4PasLib name 'QSizePolicy_transpose'; type QKeySequenceStandardKey = ( // QKeySequence::StandardKey (1) QKeySequenceUnknownKey, QKeySequenceHelpContents, QKeySequenceWhatsThis, QKeySequenceOpen, QKeySequenceClose, QKeySequenceSave, QKeySequenceNew, QKeySequenceDelete, QKeySequenceCut, QKeySequenceCopy, QKeySequencePaste, QKeySequenceUndo, QKeySequenceRedo, QKeySequenceBack, QKeySequenceForward, QKeySequenceRefresh, QKeySequenceZoomIn, QKeySequenceZoomOut, QKeySequencePrint, QKeySequenceAddTab, QKeySequenceNextChild, QKeySequencePreviousChild, QKeySequenceFind, QKeySequenceFindNext, QKeySequenceFindPrevious, QKeySequenceReplace, QKeySequenceSelectAll, QKeySequenceBold, QKeySequenceItalic, QKeySequenceUnderline, QKeySequenceMoveToNextChar, QKeySequenceMoveToPreviousChar, QKeySequenceMoveToNextWord, QKeySequenceMoveToPreviousWord, QKeySequenceMoveToNextLine, QKeySequenceMoveToPreviousLine, QKeySequenceMoveToNextPage, QKeySequenceMoveToPreviousPage, QKeySequenceMoveToStartOfLine, QKeySequenceMoveToEndOfLine, QKeySequenceMoveToStartOfBlock, QKeySequenceMoveToEndOfBlock, QKeySequenceMoveToStartOfDocument, QKeySequenceMoveToEndOfDocument, QKeySequenceSelectNextChar, QKeySequenceSelectPreviousChar, QKeySequenceSelectNextWord, QKeySequenceSelectPreviousWord, QKeySequenceSelectNextLine, QKeySequenceSelectPreviousLine, QKeySequenceSelectNextPage, QKeySequenceSelectPreviousPage, QKeySequenceSelectStartOfLine, QKeySequenceSelectEndOfLine, QKeySequenceSelectStartOfBlock, QKeySequenceSelectEndOfBlock, QKeySequenceSelectStartOfDocument, QKeySequenceSelectEndOfDocument, QKeySequenceDeleteStartOfWord, QKeySequenceDeleteEndOfWord, QKeySequenceDeleteEndOfLine, QKeySequenceInsertParagraphSeparator, QKeySequenceInsertLineSeparator, QKeySequenceSaveAs ); QKeySequenceSequenceMatch = ( // QKeySequence::SequenceMatch (1) QKeySequenceNoMatch, QKeySequencePartialMatch, QKeySequenceExactMatch ); QKeySequenceSequenceFormat = ( // QKeySequence::SequenceFormat (1) QKeySequenceNativeText, QKeySequencePortableText ); function QKeySequence_create(): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create'; procedure QKeySequence_destroy(handle: QKeySequenceH); cdecl; external Qt4PasLib name 'QKeySequence_destroy'; function QKeySequence_create(key: PWideString): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create2'; function QKeySequence_create(k1: Integer; k2: Integer = 0; k3: Integer = 0; k4: Integer = 0): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create3'; function QKeySequence_create(ks: QKeySequenceH): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create4'; function QKeySequence_create(key: QKeySequenceStandardKey): QKeySequenceH; cdecl; external Qt4PasLib name 'QKeySequence_create5'; function QKeySequence_count(handle: QKeySequenceH): LongWord; cdecl; external Qt4PasLib name 'QKeySequence_count'; function QKeySequence_isEmpty(handle: QKeySequenceH): Boolean; cdecl; external Qt4PasLib name 'QKeySequence_isEmpty'; procedure QKeySequence_toString(handle: QKeySequenceH; retval: PWideString; format: QKeySequenceSequenceFormat = QKeySequencePortableText); cdecl; external Qt4PasLib name 'QKeySequence_toString'; procedure QKeySequence_fromString(retval: QKeySequenceH; str: PWideString; format: QKeySequenceSequenceFormat = QKeySequencePortableText); cdecl; external Qt4PasLib name 'QKeySequence_fromString'; function QKeySequence_matches(handle: QKeySequenceH; seq: QKeySequenceH): QKeySequenceSequenceMatch; cdecl; external Qt4PasLib name 'QKeySequence_matches'; procedure QKeySequence_mnemonic(retval: QKeySequenceH; text: PWideString); cdecl; external Qt4PasLib name 'QKeySequence_mnemonic'; function QKeySequence_isDetached(handle: QKeySequenceH): Boolean; cdecl; external Qt4PasLib name 'QKeySequence_isDetached'; type QWidgetRenderFlag = cardinal; // QWidget::RenderFlag QWidgetRenderFlags = QWidgetRenderFlag; //QFlags<> (3) const QWidgetDrawWindowBackground = $1; QWidgetDrawChildren = $2; QWidgetIgnoreMask = $4; function QWidget_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_create'; procedure QWidget_destroy(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_destroy'; function QWidget_devType(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_devType'; function QWidget_winId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_winId'; procedure QWidget_createWinId(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_createWinId'; function QWidget_internalWinId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_internalWinId'; function QWidget_effectiveWinId(handle: QWidgetH): LongWord; cdecl; external Qt4PasLib name 'QWidget_effectiveWinId'; function QWidget_style(handle: QWidgetH): QStyleH; cdecl; external Qt4PasLib name 'QWidget_style'; procedure QWidget_setStyle(handle: QWidgetH; AnonParam1: QStyleH); cdecl; external Qt4PasLib name 'QWidget_setStyle'; function QWidget_isTopLevel(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isTopLevel'; function QWidget_isWindow(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isWindow'; function QWidget_isModal(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isModal'; function QWidget_windowModality(handle: QWidgetH): QtWindowModality; cdecl; external Qt4PasLib name 'QWidget_windowModality'; procedure QWidget_setWindowModality(handle: QWidgetH; windowModality: QtWindowModality); cdecl; external Qt4PasLib name 'QWidget_setWindowModality'; function QWidget_isEnabled(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabled'; function QWidget_isEnabledTo(handle: QWidgetH; AnonParam1: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabledTo'; function QWidget_isEnabledToTLW(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isEnabledToTLW'; procedure QWidget_setEnabled(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setEnabled'; procedure QWidget_setDisabled(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setDisabled'; procedure QWidget_setWindowModified(handle: QWidgetH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QWidget_setWindowModified'; procedure QWidget_frameGeometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_frameGeometry'; procedure QWidget_geometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_geometry'; procedure QWidget_normalGeometry(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_normalGeometry'; function QWidget_x(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_x'; function QWidget_y(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_y'; procedure QWidget_pos(handle: QWidgetH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_pos'; procedure QWidget_frameSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_frameSize'; procedure QWidget_size(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_size'; function QWidget_width(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_width'; function QWidget_height(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_height'; procedure QWidget_rect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_rect'; procedure QWidget_childrenRect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_childrenRect'; procedure QWidget_childrenRegion(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_childrenRegion'; procedure QWidget_minimumSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_minimumSize'; procedure QWidget_maximumSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_maximumSize'; function QWidget_minimumWidth(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_minimumWidth'; function QWidget_minimumHeight(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_minimumHeight'; function QWidget_maximumWidth(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_maximumWidth'; function QWidget_maximumHeight(handle: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QWidget_maximumHeight'; procedure QWidget_setMinimumSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setMinimumSize'; procedure QWidget_setMinimumSize(handle: QWidgetH; minw: Integer; minh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumSize2'; procedure QWidget_setMaximumSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setMaximumSize'; procedure QWidget_setMaximumSize(handle: QWidgetH; maxw: Integer; maxh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumSize2'; procedure QWidget_setMinimumWidth(handle: QWidgetH; minw: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumWidth'; procedure QWidget_setMinimumHeight(handle: QWidgetH; minh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMinimumHeight'; procedure QWidget_setMaximumWidth(handle: QWidgetH; maxw: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumWidth'; procedure QWidget_setMaximumHeight(handle: QWidgetH; maxh: Integer); cdecl; external Qt4PasLib name 'QWidget_setMaximumHeight'; procedure QWidget_sizeIncrement(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_sizeIncrement'; procedure QWidget_setSizeIncrement(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setSizeIncrement'; procedure QWidget_setSizeIncrement(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setSizeIncrement2'; procedure QWidget_baseSize(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_baseSize'; procedure QWidget_setBaseSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setBaseSize'; procedure QWidget_setBaseSize(handle: QWidgetH; basew: Integer; baseh: Integer); cdecl; external Qt4PasLib name 'QWidget_setBaseSize2'; procedure QWidget_setFixedSize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_setFixedSize'; procedure QWidget_setFixedSize(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedSize2'; procedure QWidget_setFixedWidth(handle: QWidgetH; w: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedWidth'; procedure QWidget_setFixedHeight(handle: QWidgetH; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setFixedHeight'; procedure QWidget_mapToGlobal(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapToGlobal'; procedure QWidget_mapFromGlobal(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFromGlobal'; procedure QWidget_mapToParent(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapToParent'; procedure QWidget_mapFromParent(handle: QWidgetH; retval: PQtPoint; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFromParent'; procedure QWidget_mapTo(handle: QWidgetH; retval: PQtPoint; AnonParam1: QWidgetH; AnonParam2: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapTo'; procedure QWidget_mapFrom(handle: QWidgetH; retval: PQtPoint; AnonParam1: QWidgetH; AnonParam2: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_mapFrom'; function QWidget_window(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_window'; function QWidget_nativeParentWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_nativeParentWidget'; function QWidget_topLevelWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_topLevelWidget'; function QWidget_palette(handle: QWidgetH): QPaletteH; cdecl; external Qt4PasLib name 'QWidget_palette'; procedure QWidget_setPalette(handle: QWidgetH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QWidget_setPalette'; procedure QWidget_setBackgroundRole(handle: QWidgetH; AnonParam1: QPaletteColorRole); cdecl; external Qt4PasLib name 'QWidget_setBackgroundRole'; function QWidget_backgroundRole(handle: QWidgetH): QPaletteColorRole; cdecl; external Qt4PasLib name 'QWidget_backgroundRole'; procedure QWidget_setForegroundRole(handle: QWidgetH; AnonParam1: QPaletteColorRole); cdecl; external Qt4PasLib name 'QWidget_setForegroundRole'; function QWidget_foregroundRole(handle: QWidgetH): QPaletteColorRole; cdecl; external Qt4PasLib name 'QWidget_foregroundRole'; function QWidget_font(handle: QWidgetH): QFontH; cdecl; external Qt4PasLib name 'QWidget_font'; procedure QWidget_setFont(handle: QWidgetH; AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QWidget_setFont'; procedure QWidget_fontMetrics(handle: QWidgetH; retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QWidget_fontMetrics'; procedure QWidget_fontInfo(handle: QWidgetH; retval: QFontInfoH); cdecl; external Qt4PasLib name 'QWidget_fontInfo'; procedure QWidget_cursor(handle: QWidgetH; retval: QCursorH); cdecl; external Qt4PasLib name 'QWidget_cursor'; procedure QWidget_setCursor(handle: QWidgetH; AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QWidget_setCursor'; procedure QWidget_unsetCursor(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetCursor'; procedure QWidget_setMouseTracking(handle: QWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QWidget_setMouseTracking'; function QWidget_hasMouseTracking(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_hasMouseTracking'; function QWidget_underMouse(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_underMouse'; procedure QWidget_setMask(handle: QWidgetH; AnonParam1: QBitmapH); cdecl; external Qt4PasLib name 'QWidget_setMask'; procedure QWidget_setMask(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_setMask2'; procedure QWidget_mask(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_mask'; procedure QWidget_clearMask(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_clearMask'; procedure QWidget_render(handle: QWidgetH; target: QPaintDeviceH; targetOffset: PQtPoint; sourceRegion: QRegionH; renderFlags: QWidgetRenderFlags); cdecl; external Qt4PasLib name 'QWidget_render'; procedure QWidget_render(handle: QWidgetH; painter: QPainterH; targetOffset: PQtPoint; sourceRegion: QRegionH; renderFlags: QWidgetRenderFlags); cdecl; external Qt4PasLib name 'QWidget_render2'; procedure QWidget_setWindowTitle(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowTitle'; procedure QWidget_setStyleSheet(handle: QWidgetH; styleSheet: PWideString); cdecl; external Qt4PasLib name 'QWidget_setStyleSheet'; procedure QWidget_styleSheet(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_styleSheet'; procedure QWidget_windowTitle(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowTitle'; procedure QWidget_setWindowIcon(handle: QWidgetH; icon: QIconH); cdecl; external Qt4PasLib name 'QWidget_setWindowIcon'; procedure QWidget_windowIcon(handle: QWidgetH; retval: QIconH); cdecl; external Qt4PasLib name 'QWidget_windowIcon'; procedure QWidget_setWindowIconText(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowIconText'; procedure QWidget_windowIconText(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowIconText'; procedure QWidget_setWindowRole(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowRole'; procedure QWidget_windowRole(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowRole'; procedure QWidget_setWindowFilePath(handle: QWidgetH; filePath: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWindowFilePath'; procedure QWidget_windowFilePath(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_windowFilePath'; procedure QWidget_setWindowOpacity(handle: QWidgetH; level: qreal); cdecl; external Qt4PasLib name 'QWidget_setWindowOpacity'; function QWidget_windowOpacity(handle: QWidgetH): qreal; cdecl; external Qt4PasLib name 'QWidget_windowOpacity'; function QWidget_isWindowModified(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isWindowModified'; procedure QWidget_setToolTip(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setToolTip'; procedure QWidget_toolTip(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_toolTip'; procedure QWidget_setStatusTip(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setStatusTip'; procedure QWidget_statusTip(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_statusTip'; procedure QWidget_setWhatsThis(handle: QWidgetH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QWidget_setWhatsThis'; procedure QWidget_whatsThis(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_whatsThis'; procedure QWidget_accessibleName(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_accessibleName'; procedure QWidget_setAccessibleName(handle: QWidgetH; name: PWideString); cdecl; external Qt4PasLib name 'QWidget_setAccessibleName'; procedure QWidget_accessibleDescription(handle: QWidgetH; retval: PWideString); cdecl; external Qt4PasLib name 'QWidget_accessibleDescription'; procedure QWidget_setAccessibleDescription(handle: QWidgetH; description: PWideString); cdecl; external Qt4PasLib name 'QWidget_setAccessibleDescription'; procedure QWidget_setLayoutDirection(handle: QWidgetH; direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QWidget_setLayoutDirection'; function QWidget_layoutDirection(handle: QWidgetH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QWidget_layoutDirection'; procedure QWidget_unsetLayoutDirection(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetLayoutDirection'; procedure QWidget_setLocale(handle: QWidgetH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QWidget_setLocale'; procedure QWidget_locale(handle: QWidgetH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QWidget_locale'; procedure QWidget_unsetLocale(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_unsetLocale'; function QWidget_isRightToLeft(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isRightToLeft'; function QWidget_isLeftToRight(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isLeftToRight'; procedure QWidget_setFocus(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setFocus'; function QWidget_isActiveWindow(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isActiveWindow'; procedure QWidget_activateWindow(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_activateWindow'; procedure QWidget_clearFocus(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_clearFocus'; procedure QWidget_setFocus(handle: QWidgetH; reason: QtFocusReason); cdecl; external Qt4PasLib name 'QWidget_setFocus2'; function QWidget_focusPolicy(handle: QWidgetH): QtFocusPolicy; cdecl; external Qt4PasLib name 'QWidget_focusPolicy'; procedure QWidget_setFocusPolicy(handle: QWidgetH; policy: QtFocusPolicy); cdecl; external Qt4PasLib name 'QWidget_setFocusPolicy'; function QWidget_hasFocus(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_hasFocus'; procedure QWidget_setTabOrder(AnonParam1: QWidgetH; AnonParam2: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setTabOrder'; procedure QWidget_setFocusProxy(handle: QWidgetH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setFocusProxy'; function QWidget_focusProxy(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_focusProxy'; function QWidget_contextMenuPolicy(handle: QWidgetH): QtContextMenuPolicy; cdecl; external Qt4PasLib name 'QWidget_contextMenuPolicy'; procedure QWidget_setContextMenuPolicy(handle: QWidgetH; policy: QtContextMenuPolicy); cdecl; external Qt4PasLib name 'QWidget_setContextMenuPolicy'; procedure QWidget_grabMouse(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_grabMouse'; procedure QWidget_grabMouse(handle: QWidgetH; AnonParam1: QCursorH); cdecl; external Qt4PasLib name 'QWidget_grabMouse2'; procedure QWidget_releaseMouse(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_releaseMouse'; procedure QWidget_grabKeyboard(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_grabKeyboard'; procedure QWidget_releaseKeyboard(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_releaseKeyboard'; function QWidget_grabShortcut(handle: QWidgetH; key: QKeySequenceH; context: QtShortcutContext = QtWindowShortcut): Integer; cdecl; external Qt4PasLib name 'QWidget_grabShortcut'; procedure QWidget_releaseShortcut(handle: QWidgetH; id: Integer); cdecl; external Qt4PasLib name 'QWidget_releaseShortcut'; procedure QWidget_setShortcutEnabled(handle: QWidgetH; id: Integer; enable: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setShortcutEnabled'; procedure QWidget_setShortcutAutoRepeat(handle: QWidgetH; id: Integer; enable: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setShortcutAutoRepeat'; function QWidget_mouseGrabber(): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_mouseGrabber'; function QWidget_keyboardGrabber(): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_keyboardGrabber'; function QWidget_updatesEnabled(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_updatesEnabled'; procedure QWidget_setUpdatesEnabled(handle: QWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QWidget_setUpdatesEnabled'; function QWidget_graphicsProxyWidget(handle: QWidgetH): QGraphicsProxyWidgetH; cdecl; external Qt4PasLib name 'QWidget_graphicsProxyWidget'; procedure QWidget_update(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_update'; procedure QWidget_repaint(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_repaint'; procedure QWidget_update(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_update2'; procedure QWidget_update(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_update3'; procedure QWidget_update(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_update4'; procedure QWidget_repaint(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_repaint2'; procedure QWidget_repaint(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_repaint3'; procedure QWidget_repaint(handle: QWidgetH; AnonParam1: QRegionH); cdecl; external Qt4PasLib name 'QWidget_repaint4'; procedure QWidget_setVisible(handle: QWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QWidget_setVisible'; procedure QWidget_setHidden(handle: QWidgetH; hidden: Boolean); cdecl; external Qt4PasLib name 'QWidget_setHidden'; procedure QWidget_show(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_show'; procedure QWidget_hide(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_hide'; procedure QWidget_setShown(handle: QWidgetH; shown: Boolean); cdecl; external Qt4PasLib name 'QWidget_setShown'; procedure QWidget_showMinimized(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showMinimized'; procedure QWidget_showMaximized(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showMaximized'; procedure QWidget_showFullScreen(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showFullScreen'; procedure QWidget_showNormal(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_showNormal'; function QWidget_close(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_close'; procedure QWidget_raise(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_raise'; procedure QWidget_lower(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_lower'; procedure QWidget_stackUnder(handle: QWidgetH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_stackUnder'; procedure QWidget_move(handle: QWidgetH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QWidget_move'; procedure QWidget_move(handle: QWidgetH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QWidget_move2'; procedure QWidget_resize(handle: QWidgetH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_resize'; procedure QWidget_resize(handle: QWidgetH; AnonParam1: PSize); cdecl; external Qt4PasLib name 'QWidget_resize2'; procedure QWidget_setGeometry(handle: QWidgetH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QWidget_setGeometry'; procedure QWidget_setGeometry(handle: QWidgetH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidget_setGeometry2'; procedure QWidget_saveGeometry(handle: QWidgetH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QWidget_saveGeometry'; function QWidget_restoreGeometry(handle: QWidgetH; geometry: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QWidget_restoreGeometry'; procedure QWidget_adjustSize(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_adjustSize'; function QWidget_isVisible(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isVisible'; function QWidget_isVisibleTo(handle: QWidgetH; AnonParam1: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isVisibleTo'; function QWidget_isHidden(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isHidden'; function QWidget_isMinimized(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isMinimized'; function QWidget_isMaximized(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isMaximized'; function QWidget_isFullScreen(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isFullScreen'; function QWidget_windowState(handle: QWidgetH): QtWindowStates; cdecl; external Qt4PasLib name 'QWidget_windowState'; procedure QWidget_setWindowState(handle: QWidgetH; state: QtWindowStates); cdecl; external Qt4PasLib name 'QWidget_setWindowState'; procedure QWidget_overrideWindowState(handle: QWidgetH; state: QtWindowStates); cdecl; external Qt4PasLib name 'QWidget_overrideWindowState'; procedure QWidget_sizeHint(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_sizeHint'; procedure QWidget_minimumSizeHint(handle: QWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QWidget_minimumSizeHint'; procedure QWidget_sizePolicy(handle: QWidgetH; retval: PQSizePolicy); cdecl; external Qt4PasLib name 'QWidget_sizePolicy'; procedure QWidget_setSizePolicy(handle: QWidgetH; AnonParam1: PQSizePolicy); cdecl; external Qt4PasLib name 'QWidget_setSizePolicy'; procedure QWidget_setSizePolicy(handle: QWidgetH; horizontal: QSizePolicyPolicy; vertical: QSizePolicyPolicy); cdecl; external Qt4PasLib name 'QWidget_setSizePolicy2'; function QWidget_heightForWidth(handle: QWidgetH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QWidget_heightForWidth'; procedure QWidget_visibleRegion(handle: QWidgetH; retval: QRegionH); cdecl; external Qt4PasLib name 'QWidget_visibleRegion'; procedure QWidget_setContentsMargins(handle: QWidgetH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QWidget_setContentsMargins'; procedure QWidget_getContentsMargins(handle: QWidgetH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QWidget_getContentsMargins'; procedure QWidget_contentsRect(handle: QWidgetH; retval: PRect); cdecl; external Qt4PasLib name 'QWidget_contentsRect'; function QWidget_layout(handle: QWidgetH): QLayoutH; cdecl; external Qt4PasLib name 'QWidget_layout'; procedure QWidget_setLayout(handle: QWidgetH; AnonParam1: QLayoutH); cdecl; external Qt4PasLib name 'QWidget_setLayout'; procedure QWidget_updateGeometry(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_updateGeometry'; procedure QWidget_setParent(handle: QWidgetH; parent: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_setParent'; procedure QWidget_setParent(handle: QWidgetH; parent: QWidgetH; f: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_setParent2'; procedure QWidget_scroll(handle: QWidgetH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QWidget_scroll'; procedure QWidget_scroll(handle: QWidgetH; dx: Integer; dy: Integer; AnonParam3: PRect); cdecl; external Qt4PasLib name 'QWidget_scroll2'; function QWidget_focusWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_focusWidget'; function QWidget_nextInFocusChain(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_nextInFocusChain'; function QWidget_acceptDrops(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_acceptDrops'; procedure QWidget_setAcceptDrops(handle: QWidgetH; _on: Boolean); cdecl; external Qt4PasLib name 'QWidget_setAcceptDrops'; procedure QWidget_addAction(handle: QWidgetH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_addAction'; procedure QWidget_addActions(handle: QWidgetH; actions: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_addActions'; procedure QWidget_insertAction(handle: QWidgetH; before: QActionH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_insertAction'; procedure QWidget_insertActions(handle: QWidgetH; before: QActionH; actions: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_insertActions'; procedure QWidget_removeAction(handle: QWidgetH; action: QActionH); cdecl; external Qt4PasLib name 'QWidget_removeAction'; procedure QWidget_actions(handle: QWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWidget_actions'; function QWidget_parentWidget(handle: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_parentWidget'; procedure QWidget_setWindowFlags(handle: QWidgetH; _type: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_setWindowFlags'; function QWidget_windowFlags(handle: QWidgetH): QtWindowFlags; cdecl; external Qt4PasLib name 'QWidget_windowFlags'; procedure QWidget_overrideWindowFlags(handle: QWidgetH; _type: QtWindowFlags); cdecl; external Qt4PasLib name 'QWidget_overrideWindowFlags'; function QWidget_windowType(handle: QWidgetH): QtWindowType; cdecl; external Qt4PasLib name 'QWidget_windowType'; function QWidget_find(AnonParam1: LongWord): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_find'; function QWidget_childAt(handle: QWidgetH; x: Integer; y: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_childAt'; function QWidget_childAt(handle: QWidgetH; p: PQtPoint): QWidgetH; cdecl; external Qt4PasLib name 'QWidget_childAt2'; {$ifdef BINUX } function QWidget_x11Info(handle: QWidgetH): QX11InfoH; cdecl; external Qt4PasLib name 'QWidget_x11Info'; function QWidget_x11PictureHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_x11PictureHandle'; {$endif} {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} function QWidget_handle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_handle'; {$endif} procedure QWidget_setAttribute(handle: QWidgetH; AnonParam1: QtWidgetAttribute; _on: Boolean = True); cdecl; external Qt4PasLib name 'QWidget_setAttribute'; function QWidget_testAttribute(handle: QWidgetH; AnonParam1: QtWidgetAttribute): Boolean; cdecl; external Qt4PasLib name 'QWidget_testAttribute'; function QWidget_paintEngine(handle: QWidgetH): QPaintEngineH; cdecl; external Qt4PasLib name 'QWidget_paintEngine'; procedure QWidget_ensurePolished(handle: QWidgetH); cdecl; external Qt4PasLib name 'QWidget_ensurePolished'; function QWidget_inputContext(handle: QWidgetH): QInputContextH; cdecl; external Qt4PasLib name 'QWidget_inputContext'; procedure QWidget_setInputContext(handle: QWidgetH; AnonParam1: QInputContextH); cdecl; external Qt4PasLib name 'QWidget_setInputContext'; function QWidget_isAncestorOf(handle: QWidgetH; child: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_isAncestorOf'; function QWidget_autoFillBackground(handle: QWidgetH): Boolean; cdecl; external Qt4PasLib name 'QWidget_autoFillBackground'; procedure QWidget_setAutoFillBackground(handle: QWidgetH; enabled: Boolean); cdecl; external Qt4PasLib name 'QWidget_setAutoFillBackground'; procedure QWidget_inputMethodQuery(handle: QWidgetH; retval: QVariantH; AnonParam1: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWidget_inputMethodQuery'; {$ifdef MSWINDOWS } function QWidget_getDC(handle: QWidgetH): QHDC; cdecl; external Qt4PasLib name 'QWidget_getDC'; procedure QWidget_releaseDC(handle: QWidgetH; AnonParam1: QHDC); cdecl; external Qt4PasLib name 'QWidget_releaseDC'; {$endif} {$ifdef DARWIN } function QWidget_macQDHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_macQDHandle'; function QWidget_macCGHandle(handle: QWidgetH): QtHANDLE; cdecl; external Qt4PasLib name 'QWidget_macCGHandle'; {$endif} function QWidget_to_QPaintDevice(handle: QWidgetH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QWidget_to_QPaintDevice'; type QWidget_customContextMenuRequested_Event = procedure (pos: PQtPoint) of object cdecl; procedure QLayoutItem_sizeHint(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_sizeHint'; procedure QLayoutItem_minimumSize(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_minimumSize'; procedure QLayoutItem_maximumSize(handle: QLayoutItemH; retval: PSize); cdecl; external Qt4PasLib name 'QLayoutItem_maximumSize'; function QLayoutItem_expandingDirections(handle: QLayoutItemH): QtOrientations; cdecl; external Qt4PasLib name 'QLayoutItem_expandingDirections'; procedure QLayoutItem_setGeometry(handle: QLayoutItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QLayoutItem_setGeometry'; procedure QLayoutItem_geometry(handle: QLayoutItemH; retval: PRect); cdecl; external Qt4PasLib name 'QLayoutItem_geometry'; function QLayoutItem_isEmpty(handle: QLayoutItemH): Boolean; cdecl; external Qt4PasLib name 'QLayoutItem_isEmpty'; function QLayoutItem_hasHeightForWidth(handle: QLayoutItemH): Boolean; cdecl; external Qt4PasLib name 'QLayoutItem_hasHeightForWidth'; function QLayoutItem_heightForWidth(handle: QLayoutItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLayoutItem_heightForWidth'; function QLayoutItem_minimumHeightForWidth(handle: QLayoutItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLayoutItem_minimumHeightForWidth'; procedure QLayoutItem_invalidate(handle: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayoutItem_invalidate'; function QLayoutItem_widget(handle: QLayoutItemH): QWidgetH; cdecl; external Qt4PasLib name 'QLayoutItem_widget'; function QLayoutItem_layout(handle: QLayoutItemH): QLayoutH; cdecl; external Qt4PasLib name 'QLayoutItem_layout'; function QLayoutItem_spacerItem(handle: QLayoutItemH): QSpacerItemH; cdecl; external Qt4PasLib name 'QLayoutItem_spacerItem'; function QLayoutItem_alignment(handle: QLayoutItemH): QtAlignment; cdecl; external Qt4PasLib name 'QLayoutItem_alignment'; procedure QLayoutItem_setAlignment(handle: QLayoutItemH; a: QtAlignment); cdecl; external Qt4PasLib name 'QLayoutItem_setAlignment'; function QLayoutItem_controlTypes(handle: QLayoutItemH): QSizePolicyControlTypes; cdecl; external Qt4PasLib name 'QLayoutItem_controlTypes'; function QSpacerItem_create(w: Integer; h: Integer; hData: QSizePolicyPolicy = QSizePolicyMinimum; vData: QSizePolicyPolicy = QSizePolicyMinimum): QSpacerItemH; cdecl; external Qt4PasLib name 'QSpacerItem_create'; procedure QSpacerItem_destroy(handle: QSpacerItemH); cdecl; external Qt4PasLib name 'QSpacerItem_destroy'; procedure QSpacerItem_changeSize(handle: QSpacerItemH; w: Integer; h: Integer; hData: QSizePolicyPolicy = QSizePolicyMinimum; vData: QSizePolicyPolicy = QSizePolicyMinimum); cdecl; external Qt4PasLib name 'QSpacerItem_changeSize'; procedure QSpacerItem_sizeHint(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_sizeHint'; procedure QSpacerItem_minimumSize(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_minimumSize'; procedure QSpacerItem_maximumSize(handle: QSpacerItemH; retval: PSize); cdecl; external Qt4PasLib name 'QSpacerItem_maximumSize'; function QSpacerItem_expandingDirections(handle: QSpacerItemH): QtOrientations; cdecl; external Qt4PasLib name 'QSpacerItem_expandingDirections'; function QSpacerItem_isEmpty(handle: QSpacerItemH): Boolean; cdecl; external Qt4PasLib name 'QSpacerItem_isEmpty'; procedure QSpacerItem_setGeometry(handle: QSpacerItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QSpacerItem_setGeometry'; procedure QSpacerItem_geometry(handle: QSpacerItemH; retval: PRect); cdecl; external Qt4PasLib name 'QSpacerItem_geometry'; function QSpacerItem_spacerItem(handle: QSpacerItemH): QSpacerItemH; cdecl; external Qt4PasLib name 'QSpacerItem_spacerItem'; function QWidgetItem_create(w: QWidgetH): QWidgetItemH; cdecl; external Qt4PasLib name 'QWidgetItem_create'; procedure QWidgetItem_destroy(handle: QWidgetItemH); cdecl; external Qt4PasLib name 'QWidgetItem_destroy'; procedure QWidgetItem_sizeHint(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_sizeHint'; procedure QWidgetItem_minimumSize(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_minimumSize'; procedure QWidgetItem_maximumSize(handle: QWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QWidgetItem_maximumSize'; function QWidgetItem_expandingDirections(handle: QWidgetItemH): QtOrientations; cdecl; external Qt4PasLib name 'QWidgetItem_expandingDirections'; function QWidgetItem_isEmpty(handle: QWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QWidgetItem_isEmpty'; procedure QWidgetItem_setGeometry(handle: QWidgetItemH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QWidgetItem_setGeometry'; procedure QWidgetItem_geometry(handle: QWidgetItemH; retval: PRect); cdecl; external Qt4PasLib name 'QWidgetItem_geometry'; function QWidgetItem_widget(handle: QWidgetItemH): QWidgetH; cdecl; external Qt4PasLib name 'QWidgetItem_widget'; function QWidgetItem_hasHeightForWidth(handle: QWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QWidgetItem_hasHeightForWidth'; function QWidgetItem_heightForWidth(handle: QWidgetItemH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QWidgetItem_heightForWidth'; type QLayoutSizeConstraint = ( // QLayout::SizeConstraint (1) QLayoutSetDefaultConstraint, QLayoutSetNoConstraint, QLayoutSetMinimumSize, QLayoutSetFixedSize, QLayoutSetMaximumSize, QLayoutSetMinAndMaxSize ); function QLayout_margin(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_margin'; function QLayout_spacing(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_spacing'; procedure QLayout_setMargin(handle: QLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLayout_setMargin'; procedure QLayout_setSpacing(handle: QLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLayout_setSpacing'; procedure QLayout_setContentsMargins(handle: QLayoutH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QLayout_setContentsMargins'; procedure QLayout_getContentsMargins(handle: QLayoutH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QLayout_getContentsMargins'; procedure QLayout_contentsRect(handle: QLayoutH; retval: PRect); cdecl; external Qt4PasLib name 'QLayout_contentsRect'; function QLayout_setAlignment(handle: QLayoutH; w: QWidgetH; alignment: QtAlignment): Boolean; cdecl; external Qt4PasLib name 'QLayout_setAlignment'; function QLayout_setAlignment(handle: QLayoutH; l: QLayoutH; alignment: QtAlignment): Boolean; cdecl; external Qt4PasLib name 'QLayout_setAlignment2'; procedure QLayout_setSizeConstraint(handle: QLayoutH; AnonParam1: QLayoutSizeConstraint); cdecl; external Qt4PasLib name 'QLayout_setSizeConstraint'; function QLayout_sizeConstraint(handle: QLayoutH): QLayoutSizeConstraint; cdecl; external Qt4PasLib name 'QLayout_sizeConstraint'; procedure QLayout_setMenuBar(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_setMenuBar'; function QLayout_menuBar(handle: QLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QLayout_menuBar'; function QLayout_parentWidget(handle: QLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QLayout_parentWidget'; procedure QLayout_invalidate(handle: QLayoutH); cdecl; external Qt4PasLib name 'QLayout_invalidate'; procedure QLayout_geometry(handle: QLayoutH; retval: PRect); cdecl; external Qt4PasLib name 'QLayout_geometry'; function QLayout_activate(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_activate'; procedure QLayout_update(handle: QLayoutH); cdecl; external Qt4PasLib name 'QLayout_update'; procedure QLayout_addWidget(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_addWidget'; procedure QLayout_addItem(handle: QLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayout_addItem'; procedure QLayout_removeWidget(handle: QLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QLayout_removeWidget'; procedure QLayout_removeItem(handle: QLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QLayout_removeItem'; function QLayout_expandingDirections(handle: QLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QLayout_expandingDirections'; procedure QLayout_minimumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_minimumSize'; procedure QLayout_maximumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_maximumSize'; procedure QLayout_setGeometry(handle: QLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QLayout_setGeometry'; function QLayout_itemAt(handle: QLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_itemAt'; function QLayout_takeAt(handle: QLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_takeAt'; function QLayout_indexOf(handle: QLayoutH; AnonParam1: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QLayout_indexOf'; function QLayout_count(handle: QLayoutH): Integer; cdecl; external Qt4PasLib name 'QLayout_count'; function QLayout_isEmpty(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_isEmpty'; function QLayout_totalHeightForWidth(handle: QLayoutH; w: Integer): Integer; cdecl; external Qt4PasLib name 'QLayout_totalHeightForWidth'; procedure QLayout_totalMinimumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalMinimumSize'; procedure QLayout_totalMaximumSize(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalMaximumSize'; procedure QLayout_totalSizeHint(handle: QLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QLayout_totalSizeHint'; function QLayout_layout(handle: QLayoutH): QLayoutH; cdecl; external Qt4PasLib name 'QLayout_layout'; procedure QLayout_setEnabled(handle: QLayoutH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLayout_setEnabled'; function QLayout_isEnabled(handle: QLayoutH): Boolean; cdecl; external Qt4PasLib name 'QLayout_isEnabled'; procedure QLayout_closestAcceptableSize(retval: PSize; w: QWidgetH; s: PSize); cdecl; external Qt4PasLib name 'QLayout_closestAcceptableSize'; function QLayout_to_QLayoutItem(handle: QLayoutH): QLayoutItemH; cdecl; external Qt4PasLib name 'QLayout_to_QLayoutItem'; type QBoxLayoutDirection = cardinal; // QBoxLayout::Direction (4) const QBoxLayoutLeftToRight = 0 { $0 }; QBoxLayoutRightToLeft = 1 { $1 }; QBoxLayoutTopToBottom = 2 { $2 }; QBoxLayoutBottomToTop = 3 { $3 }; QBoxLayoutDown = 2 { $2 }; QBoxLayoutUp = 3 { $3 }; function QBoxLayout_create(AnonParam1: QBoxLayoutDirection; parent: QWidgetH = nil): QBoxLayoutH; cdecl; external Qt4PasLib name 'QBoxLayout_create'; procedure QBoxLayout_destroy(handle: QBoxLayoutH); cdecl; external Qt4PasLib name 'QBoxLayout_destroy'; function QBoxLayout_direction(handle: QBoxLayoutH): QBoxLayoutDirection; cdecl; external Qt4PasLib name 'QBoxLayout_direction'; procedure QBoxLayout_setDirection(handle: QBoxLayoutH; AnonParam1: QBoxLayoutDirection); cdecl; external Qt4PasLib name 'QBoxLayout_setDirection'; procedure QBoxLayout_addSpacing(handle: QBoxLayoutH; size: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_addSpacing'; procedure QBoxLayout_addStretch(handle: QBoxLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addStretch'; procedure QBoxLayout_addSpacerItem(handle: QBoxLayoutH; spacerItem: QSpacerItemH); cdecl; external Qt4PasLib name 'QBoxLayout_addSpacerItem'; procedure QBoxLayout_addWidget(handle: QBoxLayoutH; AnonParam1: QWidgetH; stretch: Integer = 0; alignment: QtAlignment = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addWidget'; procedure QBoxLayout_addLayout(handle: QBoxLayoutH; layout: QLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_addLayout'; procedure QBoxLayout_addStrut(handle: QBoxLayoutH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_addStrut'; procedure QBoxLayout_addItem(handle: QBoxLayoutH; AnonParam1: QLayoutItemH); cdecl; external Qt4PasLib name 'QBoxLayout_addItem'; procedure QBoxLayout_insertSpacing(handle: QBoxLayoutH; index: Integer; size: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_insertSpacing'; procedure QBoxLayout_insertStretch(handle: QBoxLayoutH; index: Integer; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertStretch'; procedure QBoxLayout_insertSpacerItem(handle: QBoxLayoutH; index: Integer; spacerItem: QSpacerItemH); cdecl; external Qt4PasLib name 'QBoxLayout_insertSpacerItem'; procedure QBoxLayout_insertWidget(handle: QBoxLayoutH; index: Integer; widget: QWidgetH; stretch: Integer = 0; alignment: QtAlignment = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertWidget'; procedure QBoxLayout_insertLayout(handle: QBoxLayoutH; index: Integer; layout: QLayoutH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QBoxLayout_insertLayout'; function QBoxLayout_spacing(handle: QBoxLayoutH): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_spacing'; procedure QBoxLayout_setSpacing(handle: QBoxLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_setSpacing'; function QBoxLayout_setStretchFactor(handle: QBoxLayoutH; w: QWidgetH; stretch: Integer): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_setStretchFactor'; function QBoxLayout_setStretchFactor(handle: QBoxLayoutH; l: QLayoutH; stretch: Integer): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_setStretchFactor2'; procedure QBoxLayout_setStretch(handle: QBoxLayoutH; index: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QBoxLayout_setStretch'; function QBoxLayout_stretch(handle: QBoxLayoutH; index: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_stretch'; procedure QBoxLayout_sizeHint(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_sizeHint'; procedure QBoxLayout_minimumSize(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_minimumSize'; procedure QBoxLayout_maximumSize(handle: QBoxLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QBoxLayout_maximumSize'; function QBoxLayout_hasHeightForWidth(handle: QBoxLayoutH): Boolean; cdecl; external Qt4PasLib name 'QBoxLayout_hasHeightForWidth'; function QBoxLayout_heightForWidth(handle: QBoxLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_heightForWidth'; function QBoxLayout_minimumHeightForWidth(handle: QBoxLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_minimumHeightForWidth'; function QBoxLayout_expandingDirections(handle: QBoxLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QBoxLayout_expandingDirections'; procedure QBoxLayout_invalidate(handle: QBoxLayoutH); cdecl; external Qt4PasLib name 'QBoxLayout_invalidate'; function QBoxLayout_itemAt(handle: QBoxLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QBoxLayout_itemAt'; function QBoxLayout_takeAt(handle: QBoxLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QBoxLayout_takeAt'; function QBoxLayout_count(handle: QBoxLayoutH): Integer; cdecl; external Qt4PasLib name 'QBoxLayout_count'; procedure QBoxLayout_setGeometry(handle: QBoxLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QBoxLayout_setGeometry'; function QHBoxLayout_create(): QHBoxLayoutH; cdecl; external Qt4PasLib name 'QHBoxLayout_create'; procedure QHBoxLayout_destroy(handle: QHBoxLayoutH); cdecl; external Qt4PasLib name 'QHBoxLayout_destroy'; function QHBoxLayout_create(parent: QWidgetH): QHBoxLayoutH; cdecl; external Qt4PasLib name 'QHBoxLayout_create2'; function QVBoxLayout_create(): QVBoxLayoutH; cdecl; external Qt4PasLib name 'QVBoxLayout_create'; procedure QVBoxLayout_destroy(handle: QVBoxLayoutH); cdecl; external Qt4PasLib name 'QVBoxLayout_destroy'; function QVBoxLayout_create(parent: QWidgetH): QVBoxLayoutH; cdecl; external Qt4PasLib name 'QVBoxLayout_create2'; type QStackedLayoutStackingMode = ( // QStackedLayout::StackingMode (1) QStackedLayoutStackOne, QStackedLayoutStackAll ); function QStackedLayout_create(): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create'; procedure QStackedLayout_destroy(handle: QStackedLayoutH); cdecl; external Qt4PasLib name 'QStackedLayout_destroy'; function QStackedLayout_create(parent: QWidgetH): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create2'; function QStackedLayout_create(parentLayout: QLayoutH): QStackedLayoutH; cdecl; external Qt4PasLib name 'QStackedLayout_create3'; function QStackedLayout_addWidget(handle: QStackedLayoutH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_addWidget'; function QStackedLayout_insertWidget(handle: QStackedLayoutH; index: Integer; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_insertWidget'; function QStackedLayout_currentWidget(handle: QStackedLayoutH): QWidgetH; cdecl; external Qt4PasLib name 'QStackedLayout_currentWidget'; function QStackedLayout_currentIndex(handle: QStackedLayoutH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_currentIndex'; function QStackedLayout_widget(handle: QStackedLayoutH; AnonParam1: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QStackedLayout_widget'; function QStackedLayout_count(handle: QStackedLayoutH): Integer; cdecl; external Qt4PasLib name 'QStackedLayout_count'; function QStackedLayout_stackingMode(handle: QStackedLayoutH): QStackedLayoutStackingMode; cdecl; external Qt4PasLib name 'QStackedLayout_stackingMode'; procedure QStackedLayout_setStackingMode(handle: QStackedLayoutH; stackingMode: QStackedLayoutStackingMode); cdecl; external Qt4PasLib name 'QStackedLayout_setStackingMode'; procedure QStackedLayout_addItem(handle: QStackedLayoutH; item: QLayoutItemH); cdecl; external Qt4PasLib name 'QStackedLayout_addItem'; procedure QStackedLayout_sizeHint(handle: QStackedLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QStackedLayout_sizeHint'; procedure QStackedLayout_minimumSize(handle: QStackedLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QStackedLayout_minimumSize'; function QStackedLayout_itemAt(handle: QStackedLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QStackedLayout_itemAt'; function QStackedLayout_takeAt(handle: QStackedLayoutH; AnonParam1: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QStackedLayout_takeAt'; procedure QStackedLayout_setGeometry(handle: QStackedLayoutH; rect: PRect); cdecl; external Qt4PasLib name 'QStackedLayout_setGeometry'; procedure QStackedLayout_setCurrentIndex(handle: QStackedLayoutH; index: Integer); cdecl; external Qt4PasLib name 'QStackedLayout_setCurrentIndex'; procedure QStackedLayout_setCurrentWidget(handle: QStackedLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedLayout_setCurrentWidget'; type QStackedLayout_widgetRemoved_Event = procedure (index: Integer) of object cdecl; QStackedLayout_currentChanged_Event = procedure (index: Integer) of object cdecl; type QActionMenuRole = ( // QAction::MenuRole (1) QActionNoRole, QActionTextHeuristicRole, QActionApplicationSpecificRole, QActionAboutQtRole, QActionAboutRole, QActionPreferencesRole, QActionQuitRole ); QActionActionEvent = ( // QAction::ActionEvent (1) QActionTrigger, QActionHover ); function QAction_create(parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create'; procedure QAction_destroy(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_destroy'; function QAction_create(text: PWideString; parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create2'; function QAction_create(icon: QIconH; text: PWideString; parent: QObjectH): QActionH; cdecl; external Qt4PasLib name 'QAction_create3'; procedure QAction_setActionGroup(handle: QActionH; group: QActionGroupH); cdecl; external Qt4PasLib name 'QAction_setActionGroup'; function QAction_actionGroup(handle: QActionH): QActionGroupH; cdecl; external Qt4PasLib name 'QAction_actionGroup'; procedure QAction_setIcon(handle: QActionH; icon: QIconH); cdecl; external Qt4PasLib name 'QAction_setIcon'; procedure QAction_icon(handle: QActionH; retval: QIconH); cdecl; external Qt4PasLib name 'QAction_icon'; procedure QAction_setText(handle: QActionH; text: PWideString); cdecl; external Qt4PasLib name 'QAction_setText'; procedure QAction_text(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_text'; procedure QAction_setIconText(handle: QActionH; text: PWideString); cdecl; external Qt4PasLib name 'QAction_setIconText'; procedure QAction_iconText(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_iconText'; procedure QAction_setToolTip(handle: QActionH; tip: PWideString); cdecl; external Qt4PasLib name 'QAction_setToolTip'; procedure QAction_toolTip(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_toolTip'; procedure QAction_setStatusTip(handle: QActionH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QAction_setStatusTip'; procedure QAction_statusTip(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_statusTip'; procedure QAction_setWhatsThis(handle: QActionH; what: PWideString); cdecl; external Qt4PasLib name 'QAction_setWhatsThis'; procedure QAction_whatsThis(handle: QActionH; retval: PWideString); cdecl; external Qt4PasLib name 'QAction_whatsThis'; function QAction_menu(handle: QActionH): QMenuH; cdecl; external Qt4PasLib name 'QAction_menu'; procedure QAction_setMenu(handle: QActionH; menu: QMenuH); cdecl; external Qt4PasLib name 'QAction_setMenu'; procedure QAction_setSeparator(handle: QActionH; b: Boolean); cdecl; external Qt4PasLib name 'QAction_setSeparator'; function QAction_isSeparator(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isSeparator'; procedure QAction_setShortcut(handle: QActionH; shortcut: QKeySequenceH); cdecl; external Qt4PasLib name 'QAction_setShortcut'; procedure QAction_shortcut(handle: QActionH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QAction_shortcut'; procedure QAction_setShortcuts(handle: QActionH; AnonParam1: QKeySequenceStandardKey); cdecl; external Qt4PasLib name 'QAction_setShortcuts2'; procedure QAction_setShortcutContext(handle: QActionH; context: QtShortcutContext); cdecl; external Qt4PasLib name 'QAction_setShortcutContext'; function QAction_shortcutContext(handle: QActionH): QtShortcutContext; cdecl; external Qt4PasLib name 'QAction_shortcutContext'; procedure QAction_setAutoRepeat(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setAutoRepeat'; function QAction_autoRepeat(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_autoRepeat'; procedure QAction_setFont(handle: QActionH; font: QFontH); cdecl; external Qt4PasLib name 'QAction_setFont'; procedure QAction_font(handle: QActionH; retval: QFontH); cdecl; external Qt4PasLib name 'QAction_font'; procedure QAction_setCheckable(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setCheckable'; function QAction_isCheckable(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isCheckable'; procedure QAction_data(handle: QActionH; retval: QVariantH); cdecl; external Qt4PasLib name 'QAction_data'; procedure QAction_setData(handle: QActionH; _var: QVariantH); cdecl; external Qt4PasLib name 'QAction_setData'; function QAction_isChecked(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isChecked'; function QAction_isEnabled(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isEnabled'; function QAction_isVisible(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isVisible'; procedure QAction_activate(handle: QActionH; event: QActionActionEvent); cdecl; external Qt4PasLib name 'QAction_activate'; function QAction_showStatusText(handle: QActionH; widget: QWidgetH = nil): Boolean; cdecl; external Qt4PasLib name 'QAction_showStatusText'; procedure QAction_setMenuRole(handle: QActionH; menuRole: QActionMenuRole); cdecl; external Qt4PasLib name 'QAction_setMenuRole'; function QAction_menuRole(handle: QActionH): QActionMenuRole; cdecl; external Qt4PasLib name 'QAction_menuRole'; procedure QAction_setIconVisibleInMenu(handle: QActionH; visible: Boolean); cdecl; external Qt4PasLib name 'QAction_setIconVisibleInMenu'; function QAction_isIconVisibleInMenu(handle: QActionH): Boolean; cdecl; external Qt4PasLib name 'QAction_isIconVisibleInMenu'; function QAction_parentWidget(handle: QActionH): QWidgetH; cdecl; external Qt4PasLib name 'QAction_parentWidget'; procedure QAction_associatedWidgets(handle: QActionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QAction_associatedWidgets'; procedure QAction_associatedGraphicsWidgets(handle: QActionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QAction_associatedGraphicsWidgets'; procedure QAction_trigger(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_trigger'; procedure QAction_hover(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_hover'; procedure QAction_setChecked(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setChecked'; procedure QAction_toggle(handle: QActionH); cdecl; external Qt4PasLib name 'QAction_toggle'; procedure QAction_setEnabled(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setEnabled'; procedure QAction_setDisabled(handle: QActionH; b: Boolean); cdecl; external Qt4PasLib name 'QAction_setDisabled'; procedure QAction_setVisible(handle: QActionH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAction_setVisible'; type QAction_changed_Event = procedure () of object cdecl; QAction_triggered_Event = procedure (checked: Boolean = False) of object cdecl; QAction_triggered2_Event = procedure () of object cdecl; QAction_hovered_Event = procedure () of object cdecl; QAction_toggled_Event = procedure (AnonParam1: Boolean) of object cdecl; function QActionGroup_create(parent: QObjectH): QActionGroupH; cdecl; external Qt4PasLib name 'QActionGroup_create'; procedure QActionGroup_destroy(handle: QActionGroupH); cdecl; external Qt4PasLib name 'QActionGroup_destroy'; function QActionGroup_addAction(handle: QActionGroupH; a: QActionH): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction'; function QActionGroup_addAction(handle: QActionGroupH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction2'; function QActionGroup_addAction(handle: QActionGroupH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_addAction3'; procedure QActionGroup_removeAction(handle: QActionGroupH; a: QActionH); cdecl; external Qt4PasLib name 'QActionGroup_removeAction'; procedure QActionGroup_actions(handle: QActionGroupH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QActionGroup_actions'; function QActionGroup_checkedAction(handle: QActionGroupH): QActionH; cdecl; external Qt4PasLib name 'QActionGroup_checkedAction'; function QActionGroup_isExclusive(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isExclusive'; function QActionGroup_isEnabled(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isEnabled'; function QActionGroup_isVisible(handle: QActionGroupH): Boolean; cdecl; external Qt4PasLib name 'QActionGroup_isVisible'; procedure QActionGroup_setEnabled(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setEnabled'; procedure QActionGroup_setDisabled(handle: QActionGroupH; b: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setDisabled'; procedure QActionGroup_setVisible(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setVisible'; procedure QActionGroup_setExclusive(handle: QActionGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QActionGroup_setExclusive'; type QActionGroup_triggered_Event = procedure (AnonParam1: QActionH) of object cdecl; QActionGroup_selected_Event = procedure (AnonParam1: QActionH) of object cdecl; QActionGroup_hovered_Event = procedure (AnonParam1: QActionH) of object cdecl; type QTabletEventTabletDevice = ( // QTabletEvent::TabletDevice (1) QTabletEventNoDevice, QTabletEventPuck, QTabletEventStylus, QTabletEventAirbrush, QTabletEventFourDMouse, QTabletEventXFreeEraser, QTabletEventRotationStylus ); QTabletEventPointerType = ( // QTabletEvent::PointerType (1) QTabletEventUnknownPointer, QTabletEventPen, QTabletEventCursor, QTabletEventEraser ); type QContextMenuEventReason = ( // QContextMenuEvent::Reason (1) QContextMenuEventMouse, QContextMenuEventKeyboard, QContextMenuEventOther ); type QInputMethodEventAttributeType = ( // QInputMethodEvent::AttributeType (1) QInputMethodEventTextFormat, QInputMethodEventCursor, QInputMethodEventLanguage, QInputMethodEventRuby ); function QInputEvent_create(_type: QEventType; modifiers: QtKeyboardModifiers = QtNoModifier): QInputEventH; cdecl; external Qt4PasLib name 'QInputEvent_create'; procedure QInputEvent_destroy(handle: QInputEventH); cdecl; external Qt4PasLib name 'QInputEvent_destroy'; function QInputEvent_modifiers(handle: QInputEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QInputEvent_modifiers'; function QMouseEvent_create(_type: QEventType; pos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_create'; procedure QMouseEvent_destroy(handle: QMouseEventH); cdecl; external Qt4PasLib name 'QMouseEvent_destroy'; function QMouseEvent_create(_type: QEventType; pos: PQtPoint; globalPos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_create2'; function QMouseEvent_pos(handle: QMouseEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMouseEvent_pos'; function QMouseEvent_globalPos(handle: QMouseEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMouseEvent_globalPos'; function QMouseEvent_x(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_x'; function QMouseEvent_y(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_y'; function QMouseEvent_globalX(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_globalX'; function QMouseEvent_globalY(handle: QMouseEventH): Integer; cdecl; external Qt4PasLib name 'QMouseEvent_globalY'; function QMouseEvent_button(handle: QMouseEventH): QtMouseButton; cdecl; external Qt4PasLib name 'QMouseEvent_button'; function QMouseEvent_buttons(handle: QMouseEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QMouseEvent_buttons'; function QMouseEvent_createExtendedMouseEvent(_type: QEventType; pos: PQtPointF; globalPos: PQtPoint; button: QtMouseButton; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QMouseEventH; cdecl; external Qt4PasLib name 'QMouseEvent_createExtendedMouseEvent'; function QMouseEvent_hasExtendedInfo(handle: QMouseEventH): Boolean; cdecl; external Qt4PasLib name 'QMouseEvent_hasExtendedInfo'; procedure QMouseEvent_posF(handle: QMouseEventH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QMouseEvent_posF'; function QHoverEvent_create(_type: QEventType; pos: PQtPoint; oldPos: PQtPoint): QHoverEventH; cdecl; external Qt4PasLib name 'QHoverEvent_create'; procedure QHoverEvent_destroy(handle: QHoverEventH); cdecl; external Qt4PasLib name 'QHoverEvent_destroy'; function QHoverEvent_pos(handle: QHoverEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHoverEvent_pos'; function QHoverEvent_oldPos(handle: QHoverEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHoverEvent_oldPos'; function QWheelEvent_create(pos: PQtPoint; delta: Integer; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; orient: QtOrientation = QtVertical): QWheelEventH; cdecl; external Qt4PasLib name 'QWheelEvent_create'; procedure QWheelEvent_destroy(handle: QWheelEventH); cdecl; external Qt4PasLib name 'QWheelEvent_destroy'; function QWheelEvent_create(pos: PQtPoint; globalPos: PQtPoint; delta: Integer; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; orient: QtOrientation = QtVertical): QWheelEventH; cdecl; external Qt4PasLib name 'QWheelEvent_create2'; function QWheelEvent_delta(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_delta'; function QWheelEvent_pos(handle: QWheelEventH): PQtPoint; cdecl; external Qt4PasLib name 'QWheelEvent_pos'; function QWheelEvent_globalPos(handle: QWheelEventH): PQtPoint; cdecl; external Qt4PasLib name 'QWheelEvent_globalPos'; function QWheelEvent_x(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_x'; function QWheelEvent_y(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_y'; function QWheelEvent_globalX(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_globalX'; function QWheelEvent_globalY(handle: QWheelEventH): Integer; cdecl; external Qt4PasLib name 'QWheelEvent_globalY'; function QWheelEvent_buttons(handle: QWheelEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QWheelEvent_buttons'; function QWheelEvent_orientation(handle: QWheelEventH): QtOrientation; cdecl; external Qt4PasLib name 'QWheelEvent_orientation'; function QTabletEvent_create(t: QEventType; pos: PQtPoint; globalPos: PQtPoint; hiResGlobalPos: PQtPointF; device: Integer; pointerType: Integer; pressure: qreal; xTilt: Integer; yTilt: Integer; tangentialPressure: qreal; rotation: qreal; z: Integer; keyState: QtKeyboardModifiers; uniqueID: int64): QTabletEventH; cdecl; external Qt4PasLib name 'QTabletEvent_create'; procedure QTabletEvent_destroy(handle: QTabletEventH); cdecl; external Qt4PasLib name 'QTabletEvent_destroy'; function QTabletEvent_pos(handle: QTabletEventH): PQtPoint; cdecl; external Qt4PasLib name 'QTabletEvent_pos'; function QTabletEvent_globalPos(handle: QTabletEventH): PQtPoint; cdecl; external Qt4PasLib name 'QTabletEvent_globalPos'; function QTabletEvent_hiResGlobalPos(handle: QTabletEventH): PQtPointF; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalPos'; function QTabletEvent_x(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_x'; function QTabletEvent_y(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_y'; function QTabletEvent_globalX(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_globalX'; function QTabletEvent_globalY(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_globalY'; function QTabletEvent_hiResGlobalX(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalX'; function QTabletEvent_hiResGlobalY(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_hiResGlobalY'; function QTabletEvent_device(handle: QTabletEventH): QTabletEventTabletDevice; cdecl; external Qt4PasLib name 'QTabletEvent_device'; function QTabletEvent_pointerType(handle: QTabletEventH): QTabletEventPointerType; cdecl; external Qt4PasLib name 'QTabletEvent_pointerType'; function QTabletEvent_uniqueId(handle: QTabletEventH): int64; cdecl; external Qt4PasLib name 'QTabletEvent_uniqueId'; function QTabletEvent_pressure(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_pressure'; function QTabletEvent_z(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_z'; function QTabletEvent_tangentialPressure(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_tangentialPressure'; function QTabletEvent_rotation(handle: QTabletEventH): qreal; cdecl; external Qt4PasLib name 'QTabletEvent_rotation'; function QTabletEvent_xTilt(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_xTilt'; function QTabletEvent_yTilt(handle: QTabletEventH): Integer; cdecl; external Qt4PasLib name 'QTabletEvent_yTilt'; function QKeyEvent_create(_type: QEventType; key: Integer; modifiers: QtKeyboardModifiers; text: PWideString = nil; autorep: Boolean = False; count: Word = 1): QKeyEventH; cdecl; external Qt4PasLib name 'QKeyEvent_create'; procedure QKeyEvent_destroy(handle: QKeyEventH); cdecl; external Qt4PasLib name 'QKeyEvent_destroy'; function QKeyEvent_key(handle: QKeyEventH): Integer; cdecl; external Qt4PasLib name 'QKeyEvent_key'; function QKeyEvent_matches(handle: QKeyEventH; key: QKeySequenceStandardKey): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_matches'; function QKeyEvent_modifiers(handle: QKeyEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QKeyEvent_modifiers'; procedure QKeyEvent_text(handle: QKeyEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QKeyEvent_text'; function QKeyEvent_isAutoRepeat(handle: QKeyEventH): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_isAutoRepeat'; function QKeyEvent_count(handle: QKeyEventH): Integer; cdecl; external Qt4PasLib name 'QKeyEvent_count'; function QKeyEvent_createExtendedKeyEvent(_type: QEventType; key: Integer; modifiers: QtKeyboardModifiers; nativeScanCode: LongWord; nativeVirtualKey: LongWord; nativeModifiers: LongWord; text: PWideString = nil; autorep: Boolean = False; count: Word = 1): QKeyEventH; cdecl; external Qt4PasLib name 'QKeyEvent_createExtendedKeyEvent'; function QKeyEvent_hasExtendedInfo(handle: QKeyEventH): Boolean; cdecl; external Qt4PasLib name 'QKeyEvent_hasExtendedInfo'; function QKeyEvent_nativeScanCode(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeScanCode'; function QKeyEvent_nativeVirtualKey(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeVirtualKey'; function QKeyEvent_nativeModifiers(handle: QKeyEventH): LongWord; cdecl; external Qt4PasLib name 'QKeyEvent_nativeModifiers'; function QFocusEvent_create(_type: QEventType; reason: QtFocusReason = QtOtherFocusReason): QFocusEventH; cdecl; external Qt4PasLib name 'QFocusEvent_create'; procedure QFocusEvent_destroy(handle: QFocusEventH); cdecl; external Qt4PasLib name 'QFocusEvent_destroy'; function QFocusEvent_gotFocus(handle: QFocusEventH): Boolean; cdecl; external Qt4PasLib name 'QFocusEvent_gotFocus'; function QFocusEvent_lostFocus(handle: QFocusEventH): Boolean; cdecl; external Qt4PasLib name 'QFocusEvent_lostFocus'; function QFocusEvent_reason(handle: QFocusEventH): QtFocusReason; cdecl; external Qt4PasLib name 'QFocusEvent_reason'; function QPaintEvent_create(paintRegion: QRegionH): QPaintEventH; cdecl; external Qt4PasLib name 'QPaintEvent_create'; procedure QPaintEvent_destroy(handle: QPaintEventH); cdecl; external Qt4PasLib name 'QPaintEvent_destroy'; function QPaintEvent_create(paintRect: PRect): QPaintEventH; cdecl; external Qt4PasLib name 'QPaintEvent_create2'; procedure QPaintEvent_rect(handle: QPaintEventH; retval: PRect); cdecl; external Qt4PasLib name 'QPaintEvent_rect'; function QPaintEvent_region(handle: QPaintEventH): QRegionH; cdecl; external Qt4PasLib name 'QPaintEvent_region'; function QMoveEvent_create(pos: PQtPoint; oldPos: PQtPoint): QMoveEventH; cdecl; external Qt4PasLib name 'QMoveEvent_create'; procedure QMoveEvent_destroy(handle: QMoveEventH); cdecl; external Qt4PasLib name 'QMoveEvent_destroy'; function QMoveEvent_pos(handle: QMoveEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMoveEvent_pos'; function QMoveEvent_oldPos(handle: QMoveEventH): PQtPoint; cdecl; external Qt4PasLib name 'QMoveEvent_oldPos'; function QResizeEvent_create(size: PSize; oldSize: PSize): QResizeEventH; cdecl; external Qt4PasLib name 'QResizeEvent_create'; procedure QResizeEvent_destroy(handle: QResizeEventH); cdecl; external Qt4PasLib name 'QResizeEvent_destroy'; function QResizeEvent_size(handle: QResizeEventH): PSize; cdecl; external Qt4PasLib name 'QResizeEvent_size'; function QResizeEvent_oldSize(handle: QResizeEventH): PSize; cdecl; external Qt4PasLib name 'QResizeEvent_oldSize'; function QCloseEvent_create(): QCloseEventH; cdecl; external Qt4PasLib name 'QCloseEvent_create'; procedure QCloseEvent_destroy(handle: QCloseEventH); cdecl; external Qt4PasLib name 'QCloseEvent_destroy'; function QIconDragEvent_create(): QIconDragEventH; cdecl; external Qt4PasLib name 'QIconDragEvent_create'; procedure QIconDragEvent_destroy(handle: QIconDragEventH); cdecl; external Qt4PasLib name 'QIconDragEvent_destroy'; function QShowEvent_create(): QShowEventH; cdecl; external Qt4PasLib name 'QShowEvent_create'; procedure QShowEvent_destroy(handle: QShowEventH); cdecl; external Qt4PasLib name 'QShowEvent_destroy'; function QHideEvent_create(): QHideEventH; cdecl; external Qt4PasLib name 'QHideEvent_create'; procedure QHideEvent_destroy(handle: QHideEventH); cdecl; external Qt4PasLib name 'QHideEvent_destroy'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint; globalPos: PQtPoint; modifiers: QtKeyboardModifiers): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create'; procedure QContextMenuEvent_destroy(handle: QContextMenuEventH); cdecl; external Qt4PasLib name 'QContextMenuEvent_destroy'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint; globalPos: PQtPoint): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create2'; function QContextMenuEvent_create(reason: QContextMenuEventReason; pos: PQtPoint): QContextMenuEventH; cdecl; external Qt4PasLib name 'QContextMenuEvent_create3'; function QContextMenuEvent_x(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_x'; function QContextMenuEvent_y(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_y'; function QContextMenuEvent_globalX(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalX'; function QContextMenuEvent_globalY(handle: QContextMenuEventH): Integer; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalY'; function QContextMenuEvent_pos(handle: QContextMenuEventH): PQtPoint; cdecl; external Qt4PasLib name 'QContextMenuEvent_pos'; function QContextMenuEvent_globalPos(handle: QContextMenuEventH): PQtPoint; cdecl; external Qt4PasLib name 'QContextMenuEvent_globalPos'; function QContextMenuEvent_reason(handle: QContextMenuEventH): QContextMenuEventReason; cdecl; external Qt4PasLib name 'QContextMenuEvent_reason'; function QInputMethodEvent_create(): QInputMethodEventH; cdecl; external Qt4PasLib name 'QInputMethodEvent_create'; procedure QInputMethodEvent_destroy(handle: QInputMethodEventH); cdecl; external Qt4PasLib name 'QInputMethodEvent_destroy'; procedure QInputMethodEvent_setCommitString(handle: QInputMethodEventH; commitString: PWideString; replaceFrom: Integer = 0; replaceLength: Integer = 0); cdecl; external Qt4PasLib name 'QInputMethodEvent_setCommitString'; procedure QInputMethodEvent_preeditString(handle: QInputMethodEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputMethodEvent_preeditString'; procedure QInputMethodEvent_commitString(handle: QInputMethodEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputMethodEvent_commitString'; function QInputMethodEvent_replacementStart(handle: QInputMethodEventH): Integer; cdecl; external Qt4PasLib name 'QInputMethodEvent_replacementStart'; function QInputMethodEvent_replacementLength(handle: QInputMethodEventH): Integer; cdecl; external Qt4PasLib name 'QInputMethodEvent_replacementLength'; function QInputMethodEvent_create(other: QInputMethodEventH): QInputMethodEventH; cdecl; external Qt4PasLib name 'QInputMethodEvent_create3'; function QDropEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; _type: QEventType): QDropEventH; cdecl; external Qt4PasLib name 'QDropEvent_create'; procedure QDropEvent_destroy(handle: QDropEventH); cdecl; external Qt4PasLib name 'QDropEvent_destroy'; function QDropEvent_pos(handle: QDropEventH): PQtPoint; cdecl; external Qt4PasLib name 'QDropEvent_pos'; function QDropEvent_mouseButtons(handle: QDropEventH): QtMouseButtons; cdecl; external Qt4PasLib name 'QDropEvent_mouseButtons'; function QDropEvent_keyboardModifiers(handle: QDropEventH): QtKeyboardModifiers; cdecl; external Qt4PasLib name 'QDropEvent_keyboardModifiers'; function QDropEvent_possibleActions(handle: QDropEventH): QtDropActions; cdecl; external Qt4PasLib name 'QDropEvent_possibleActions'; function QDropEvent_proposedAction(handle: QDropEventH): QtDropAction; cdecl; external Qt4PasLib name 'QDropEvent_proposedAction'; procedure QDropEvent_acceptProposedAction(handle: QDropEventH); cdecl; external Qt4PasLib name 'QDropEvent_acceptProposedAction'; function QDropEvent_dropAction(handle: QDropEventH): QtDropAction; cdecl; external Qt4PasLib name 'QDropEvent_dropAction'; procedure QDropEvent_setDropAction(handle: QDropEventH; action: QtDropAction); cdecl; external Qt4PasLib name 'QDropEvent_setDropAction'; function QDropEvent_source(handle: QDropEventH): QWidgetH; cdecl; external Qt4PasLib name 'QDropEvent_source'; function QDropEvent_mimeData(handle: QDropEventH): QMimeDataH; cdecl; external Qt4PasLib name 'QDropEvent_mimeData'; function QDropEvent_format(handle: QDropEventH; n: Integer = 0): PAnsiChar; cdecl; external Qt4PasLib name 'QDropEvent_format'; procedure QDropEvent_encodedData(handle: QDropEventH; retval: QByteArrayH; AnonParam1: PAnsiChar); cdecl; external Qt4PasLib name 'QDropEvent_encodedData'; function QDropEvent_provides(handle: QDropEventH; AnonParam1: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QDropEvent_provides'; function QDragMoveEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers; _type: QEventType): QDragMoveEventH; cdecl; external Qt4PasLib name 'QDragMoveEvent_create'; procedure QDragMoveEvent_destroy(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_destroy'; procedure QDragMoveEvent_answerRect(handle: QDragMoveEventH; retval: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_answerRect'; procedure QDragMoveEvent_accept(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_accept'; procedure QDragMoveEvent_ignore(handle: QDragMoveEventH); cdecl; external Qt4PasLib name 'QDragMoveEvent_ignore'; procedure QDragMoveEvent_accept(handle: QDragMoveEventH; r: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_accept2'; procedure QDragMoveEvent_ignore(handle: QDragMoveEventH; r: PRect); cdecl; external Qt4PasLib name 'QDragMoveEvent_ignore2'; function QDragEnterEvent_create(pos: PQtPoint; actions: QtDropActions; data: QMimeDataH; buttons: QtMouseButtons; modifiers: QtKeyboardModifiers): QDragEnterEventH; cdecl; external Qt4PasLib name 'QDragEnterEvent_create'; procedure QDragEnterEvent_destroy(handle: QDragEnterEventH); cdecl; external Qt4PasLib name 'QDragEnterEvent_destroy'; function QDragLeaveEvent_create(): QDragLeaveEventH; cdecl; external Qt4PasLib name 'QDragLeaveEvent_create'; procedure QDragLeaveEvent_destroy(handle: QDragLeaveEventH); cdecl; external Qt4PasLib name 'QDragLeaveEvent_destroy'; function QHelpEvent_create(_type: QEventType; pos: PQtPoint; globalPos: PQtPoint): QHelpEventH; cdecl; external Qt4PasLib name 'QHelpEvent_create'; procedure QHelpEvent_destroy(handle: QHelpEventH); cdecl; external Qt4PasLib name 'QHelpEvent_destroy'; function QHelpEvent_x(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_x'; function QHelpEvent_y(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_y'; function QHelpEvent_globalX(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_globalX'; function QHelpEvent_globalY(handle: QHelpEventH): Integer; cdecl; external Qt4PasLib name 'QHelpEvent_globalY'; function QHelpEvent_pos(handle: QHelpEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHelpEvent_pos'; function QHelpEvent_globalPos(handle: QHelpEventH): PQtPoint; cdecl; external Qt4PasLib name 'QHelpEvent_globalPos'; function QStatusTipEvent_create(tip: PWideString): QStatusTipEventH; cdecl; external Qt4PasLib name 'QStatusTipEvent_create'; procedure QStatusTipEvent_destroy(handle: QStatusTipEventH); cdecl; external Qt4PasLib name 'QStatusTipEvent_destroy'; procedure QStatusTipEvent_tip(handle: QStatusTipEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QStatusTipEvent_tip'; function QWhatsThisClickedEvent_create(href: PWideString): QWhatsThisClickedEventH; cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_create'; procedure QWhatsThisClickedEvent_destroy(handle: QWhatsThisClickedEventH); cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_destroy'; procedure QWhatsThisClickedEvent_href(handle: QWhatsThisClickedEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QWhatsThisClickedEvent_href'; function QActionEvent_create(_type: Integer; action: QActionH; before: QActionH = nil): QActionEventH; cdecl; external Qt4PasLib name 'QActionEvent_create'; procedure QActionEvent_destroy(handle: QActionEventH); cdecl; external Qt4PasLib name 'QActionEvent_destroy'; function QActionEvent_action(handle: QActionEventH): QActionH; cdecl; external Qt4PasLib name 'QActionEvent_action'; function QActionEvent_before(handle: QActionEventH): QActionH; cdecl; external Qt4PasLib name 'QActionEvent_before'; function QFileOpenEvent_create(_file: PWideString): QFileOpenEventH; cdecl; external Qt4PasLib name 'QFileOpenEvent_create'; procedure QFileOpenEvent_destroy(handle: QFileOpenEventH); cdecl; external Qt4PasLib name 'QFileOpenEvent_destroy'; procedure QFileOpenEvent_file(handle: QFileOpenEventH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileOpenEvent_file'; function QShortcutEvent_create(key: QKeySequenceH; id: Integer; ambiguous: Boolean = False): QShortcutEventH; cdecl; external Qt4PasLib name 'QShortcutEvent_create'; procedure QShortcutEvent_destroy(handle: QShortcutEventH); cdecl; external Qt4PasLib name 'QShortcutEvent_destroy'; function QShortcutEvent_key(handle: QShortcutEventH): QKeySequenceH; cdecl; external Qt4PasLib name 'QShortcutEvent_key'; function QShortcutEvent_shortcutId(handle: QShortcutEventH): Integer; cdecl; external Qt4PasLib name 'QShortcutEvent_shortcutId'; function QShortcutEvent_isAmbiguous(handle: QShortcutEventH): Boolean; cdecl; external Qt4PasLib name 'QShortcutEvent_isAmbiguous'; function QWindowStateChangeEvent_create(aOldState: QtWindowStates): QWindowStateChangeEventH; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_create'; procedure QWindowStateChangeEvent_destroy(handle: QWindowStateChangeEventH); cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_destroy'; function QWindowStateChangeEvent_create(aOldState: QtWindowStates; isOverride: Boolean): QWindowStateChangeEventH; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_create2'; function QWindowStateChangeEvent_oldState(handle: QWindowStateChangeEventH): QtWindowStates; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_oldState'; function QWindowStateChangeEvent_isOverride(handle: QWindowStateChangeEventH): Boolean; cdecl; external Qt4PasLib name 'QWindowStateChangeEvent_isOverride'; function QLCLMessageEvent_create(aType: QEventType): QLCLMessageEventH; cdecl; external Qt4PasLib name 'QLCLMessageEvent_create'; procedure QLCLMessageEvent_destroy(handle: QLCLMessageEventH); cdecl; external Qt4PasLib name 'QLCLMessageEvent_destroy'; function QLCLMessageEvent_create(aType: QEventType; aMsg: PTRUINT; aWParam: PTRUINT; aLParam: PTRUINT; aMsgResult: PTRUINT): QLCLMessageEventH; cdecl; external Qt4PasLib name 'QLCLMessageEvent_create2'; function QLCLMessageEvent_getMsg(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getMsg'; function QLCLMessageEvent_getWParam(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getWParam'; function QLCLMessageEvent_getLParam(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getLParam'; function QLCLMessageEvent_getMsgResult(handle: QLCLMessageEventH): PTRUINT; cdecl; external Qt4PasLib name 'QLCLMessageEvent_getMsgResult'; procedure QLCLMessageEvent_setMsg(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setMsg'; procedure QLCLMessageEvent_setWParam(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setWParam'; procedure QLCLMessageEvent_setLParam(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setLParam'; procedure QLCLMessageEvent_setMsgResult(handle: QLCLMessageEventH; Value: PTRUINT); cdecl; external Qt4PasLib name 'QLCLMessageEvent_setMsgResult'; function QCursor_create(): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create'; procedure QCursor_destroy(handle: QCursorH); cdecl; external Qt4PasLib name 'QCursor_destroy'; function QCursor_create(shape: QtCursorShape): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create2'; function QCursor_create(bitmap: QBitmapH; mask: QBitmapH; hotX: Integer = -1; hotY: Integer = -1): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create3'; function QCursor_create(pixmap: QPixmapH; hotX: Integer = -1; hotY: Integer = -1): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create4'; function QCursor_create(cursor: QCursorH): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create5'; function QCursor_shape(handle: QCursorH): QtCursorShape; cdecl; external Qt4PasLib name 'QCursor_shape'; procedure QCursor_setShape(handle: QCursorH; newShape: QtCursorShape); cdecl; external Qt4PasLib name 'QCursor_setShape'; function QCursor_bitmap(handle: QCursorH): QBitmapH; cdecl; external Qt4PasLib name 'QCursor_bitmap'; function QCursor_mask(handle: QCursorH): QBitmapH; cdecl; external Qt4PasLib name 'QCursor_mask'; procedure QCursor_pixmap(handle: QCursorH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QCursor_pixmap'; procedure QCursor_hotSpot(handle: QCursorH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_hotSpot'; procedure QCursor_pos(retval: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_pos'; procedure QCursor_setPos(x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QCursor_setPos'; procedure QCursor_setPos(p: PQtPoint); cdecl; external Qt4PasLib name 'QCursor_setPos2'; {$if defined(BINUX) or defined(DARWIN)} function QCursor_handle(handle: QCursorH): QtHANDLE; cdecl; external Qt4PasLib name 'QCursor_handle'; {$endif} {$ifdef BINUX } function QCursor_create(cursor: QtHANDLE): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create6'; function QCursor_x11Screen(): Integer; cdecl; external Qt4PasLib name 'QCursor_x11Screen'; {$endif} {$ifdef MSWINDOWS } function QCursor_handle(handle: QCursorH): QHCURSOR; cdecl; external Qt4PasLib name 'QCursor_handle2'; function QCursor_create(cursor: QHCURSOR): QCursorH; cdecl; external Qt4PasLib name 'QCursor_create7'; {$endif} {$ifdef QTOPIA } function QCursor_handle(handle: QCursorH): Integer; cdecl; external Qt4PasLib name 'QCursor_handle3'; {$endif} function QGridLayout_create(parent: QWidgetH): QGridLayoutH; cdecl; external Qt4PasLib name 'QGridLayout_create'; procedure QGridLayout_destroy(handle: QGridLayoutH); cdecl; external Qt4PasLib name 'QGridLayout_destroy'; function QGridLayout_create(): QGridLayoutH; cdecl; external Qt4PasLib name 'QGridLayout_create2'; procedure QGridLayout_sizeHint(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_sizeHint'; procedure QGridLayout_minimumSize(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_minimumSize'; procedure QGridLayout_maximumSize(handle: QGridLayoutH; retval: PSize); cdecl; external Qt4PasLib name 'QGridLayout_maximumSize'; procedure QGridLayout_setHorizontalSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setHorizontalSpacing'; function QGridLayout_horizontalSpacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_horizontalSpacing'; procedure QGridLayout_setVerticalSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setVerticalSpacing'; function QGridLayout_verticalSpacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_verticalSpacing'; procedure QGridLayout_setSpacing(handle: QGridLayoutH; spacing: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setSpacing'; function QGridLayout_spacing(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_spacing'; procedure QGridLayout_setRowStretch(handle: QGridLayoutH; row: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setRowStretch'; procedure QGridLayout_setColumnStretch(handle: QGridLayoutH; column: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setColumnStretch'; function QGridLayout_rowStretch(handle: QGridLayoutH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowStretch'; function QGridLayout_columnStretch(handle: QGridLayoutH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnStretch'; procedure QGridLayout_setRowMinimumHeight(handle: QGridLayoutH; row: Integer; minSize: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setRowMinimumHeight'; procedure QGridLayout_setColumnMinimumWidth(handle: QGridLayoutH; column: Integer; minSize: Integer); cdecl; external Qt4PasLib name 'QGridLayout_setColumnMinimumWidth'; function QGridLayout_rowMinimumHeight(handle: QGridLayoutH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowMinimumHeight'; function QGridLayout_columnMinimumWidth(handle: QGridLayoutH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnMinimumWidth'; function QGridLayout_columnCount(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_columnCount'; function QGridLayout_rowCount(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_rowCount'; procedure QGridLayout_cellRect(handle: QGridLayoutH; retval: PRect; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QGridLayout_cellRect'; function QGridLayout_hasHeightForWidth(handle: QGridLayoutH): Boolean; cdecl; external Qt4PasLib name 'QGridLayout_hasHeightForWidth'; function QGridLayout_heightForWidth(handle: QGridLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_heightForWidth'; function QGridLayout_minimumHeightForWidth(handle: QGridLayoutH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QGridLayout_minimumHeightForWidth'; function QGridLayout_expandingDirections(handle: QGridLayoutH): QtOrientations; cdecl; external Qt4PasLib name 'QGridLayout_expandingDirections'; procedure QGridLayout_invalidate(handle: QGridLayoutH); cdecl; external Qt4PasLib name 'QGridLayout_invalidate'; procedure QGridLayout_addWidget(handle: QGridLayoutH; w: QWidgetH); cdecl; external Qt4PasLib name 'QGridLayout_addWidget'; procedure QGridLayout_addWidget(handle: QGridLayoutH; AnonParam1: QWidgetH; row: Integer; column: Integer; AnonParam4: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addWidget2'; procedure QGridLayout_addWidget(handle: QGridLayoutH; AnonParam1: QWidgetH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addWidget3'; procedure QGridLayout_addLayout(handle: QGridLayoutH; AnonParam1: QLayoutH; row: Integer; column: Integer; AnonParam4: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addLayout'; procedure QGridLayout_addLayout(handle: QGridLayoutH; AnonParam1: QLayoutH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addLayout2'; procedure QGridLayout_setOriginCorner(handle: QGridLayoutH; AnonParam1: QtCorner); cdecl; external Qt4PasLib name 'QGridLayout_setOriginCorner'; function QGridLayout_originCorner(handle: QGridLayoutH): QtCorner; cdecl; external Qt4PasLib name 'QGridLayout_originCorner'; function QGridLayout_itemAt(handle: QGridLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_itemAt'; function QGridLayout_itemAtPosition(handle: QGridLayoutH; row: Integer; column: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_itemAtPosition'; function QGridLayout_takeAt(handle: QGridLayoutH; index: Integer): QLayoutItemH; cdecl; external Qt4PasLib name 'QGridLayout_takeAt'; function QGridLayout_count(handle: QGridLayoutH): Integer; cdecl; external Qt4PasLib name 'QGridLayout_count'; procedure QGridLayout_setGeometry(handle: QGridLayoutH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QGridLayout_setGeometry'; procedure QGridLayout_addItem(handle: QGridLayoutH; item: QLayoutItemH; row: Integer; column: Integer; rowSpan: Integer = 1; columnSpan: Integer = 1; AnonParam6: QtAlignment = 0); cdecl; external Qt4PasLib name 'QGridLayout_addItem'; procedure QGridLayout_setDefaultPositioning(handle: QGridLayoutH; n: Integer; orient: QtOrientation); cdecl; external Qt4PasLib name 'QGridLayout_setDefaultPositioning'; procedure QGridLayout_getItemPosition(handle: QGridLayoutH; idx: Integer; row: PInteger; column: PInteger; rowSpan: PInteger; columnSpan: PInteger); cdecl; external Qt4PasLib name 'QGridLayout_getItemPosition'; type QClipboardMode = cardinal; // QClipboard::Mode (4) const QClipboardClipboard = 0 { $0 }; QClipboardSelection = 1 { $1 }; QClipboardFindBuffer = 2 { $2 }; QClipboardLastMode = 2 { $2 }; procedure QClipboard_clear(handle: QClipboardH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_clear'; function QClipboard_supportsSelection(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_supportsSelection'; function QClipboard_supportsFindBuffer(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_supportsFindBuffer'; function QClipboard_ownsSelection(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsSelection'; function QClipboard_ownsClipboard(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsClipboard'; function QClipboard_ownsFindBuffer(handle: QClipboardH): Boolean; cdecl; external Qt4PasLib name 'QClipboard_ownsFindBuffer'; procedure QClipboard_text(handle: QClipboardH; retval: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_text'; procedure QClipboard_text(handle: QClipboardH; retval: PWideString; subtype: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_text2'; procedure QClipboard_setText(handle: QClipboardH; AnonParam1: PWideString; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setText'; function QClipboard_mimeData(handle: QClipboardH; mode: QClipboardMode = QClipboardClipboard): QMimeDataH; cdecl; external Qt4PasLib name 'QClipboard_mimeData'; procedure QClipboard_setMimeData(handle: QClipboardH; data: QMimeDataH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setMimeData'; procedure QClipboard_image(handle: QClipboardH; retval: QImageH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_image'; procedure QClipboard_pixmap(handle: QClipboardH; retval: QPixmapH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_pixmap'; procedure QClipboard_setImage(handle: QClipboardH; AnonParam1: QImageH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setImage'; procedure QClipboard_setPixmap(handle: QClipboardH; AnonParam1: QPixmapH; mode: QClipboardMode = QClipboardClipboard); cdecl; external Qt4PasLib name 'QClipboard_setPixmap'; type QClipboard_changed_Event = procedure (mode: QClipboardMode) of object cdecl; QClipboard_selectionChanged_Event = procedure () of object cdecl; QClipboard_findBufferChanged_Event = procedure () of object cdecl; QClipboard_dataChanged_Event = procedure () of object cdecl; function QDesktopWidget_create(): QDesktopWidgetH; cdecl; external Qt4PasLib name 'QDesktopWidget_create'; procedure QDesktopWidget_destroy(handle: QDesktopWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_destroy'; function QDesktopWidget_isVirtualDesktop(handle: QDesktopWidgetH): Boolean; cdecl; external Qt4PasLib name 'QDesktopWidget_isVirtualDesktop'; function QDesktopWidget_numScreens(handle: QDesktopWidgetH): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_numScreens'; function QDesktopWidget_primaryScreen(handle: QDesktopWidgetH): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_primaryScreen'; function QDesktopWidget_screenNumber(handle: QDesktopWidgetH; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_screenNumber'; function QDesktopWidget_screenNumber(handle: QDesktopWidgetH; AnonParam1: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QDesktopWidget_screenNumber2'; function QDesktopWidget_screen(handle: QDesktopWidgetH; screen: Integer = -1): QWidgetH; cdecl; external Qt4PasLib name 'QDesktopWidget_screen'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; screen: Integer = -1); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry2'; procedure QDesktopWidget_screenGeometry(handle: QDesktopWidgetH; retval: PRect; point: PQtPoint); cdecl; external Qt4PasLib name 'QDesktopWidget_screenGeometry3'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; screen: Integer = -1); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry2'; procedure QDesktopWidget_availableGeometry(handle: QDesktopWidgetH; retval: PRect; point: PQtPoint); cdecl; external Qt4PasLib name 'QDesktopWidget_availableGeometry3'; type QDesktopWidget_resized_Event = procedure (AnonParam1: Integer) of object cdecl; QDesktopWidget_workAreaResized_Event = procedure (AnonParam1: Integer) of object cdecl; procedure QToolTip_showText(pos: PQtPoint; text: PWideString; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QToolTip_showText'; procedure QToolTip_showText(pos: PQtPoint; text: PWideString; w: QWidgetH; rect: PRect); cdecl; external Qt4PasLib name 'QToolTip_showText2'; procedure QToolTip_hideText(); cdecl; external Qt4PasLib name 'QToolTip_hideText'; function QToolTip_isVisible(): Boolean; cdecl; external Qt4PasLib name 'QToolTip_isVisible'; procedure QToolTip_text(retval: PWideString); cdecl; external Qt4PasLib name 'QToolTip_text'; procedure QToolTip_palette(retval: QPaletteH); cdecl; external Qt4PasLib name 'QToolTip_palette'; procedure QToolTip_setPalette(AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QToolTip_setPalette'; procedure QToolTip_font(retval: QFontH); cdecl; external Qt4PasLib name 'QToolTip_font'; procedure QToolTip_setFont(AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QToolTip_setFont'; {$ifdef BINUX } function QX11Info_create(): QX11InfoH; cdecl; external Qt4PasLib name 'QX11Info_create'; procedure QX11Info_destroy(handle: QX11InfoH); cdecl; external Qt4PasLib name 'QX11Info_destroy'; function QX11Info_create(other: QX11InfoH): QX11InfoH; cdecl; external Qt4PasLib name 'QX11Info_create2'; function QX11Info_display(): PDisplay; cdecl; external Qt4PasLib name 'QX11Info_display'; function QX11Info_appClass(): PAnsiChar; cdecl; external Qt4PasLib name 'QX11Info_appClass'; function QX11Info_screen(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_screen'; function QX11Info_depth(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_depth'; function QX11Info_cells(handle: QX11InfoH): Integer; cdecl; external Qt4PasLib name 'QX11Info_cells'; function QX11Info_colormap(handle: QX11InfoH): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_colormap'; function QX11Info_defaultColormap(handle: QX11InfoH): Boolean; cdecl; external Qt4PasLib name 'QX11Info_defaultColormap'; function QX11Info_visual(handle: QX11InfoH): Pointer; cdecl; external Qt4PasLib name 'QX11Info_visual'; function QX11Info_defaultVisual(handle: QX11InfoH): Boolean; cdecl; external Qt4PasLib name 'QX11Info_defaultVisual'; function QX11Info_appScreen(): Integer; cdecl; external Qt4PasLib name 'QX11Info_appScreen'; function QX11Info_appDepth(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDepth'; function QX11Info_appCells(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appCells'; function QX11Info_appColormap(screen: Integer = -1): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_appColormap'; function QX11Info_appVisual(screen: Integer = -1): Pointer; cdecl; external Qt4PasLib name 'QX11Info_appVisual'; function QX11Info_appRootWindow(screen: Integer = -1): QtHANDLE; cdecl; external Qt4PasLib name 'QX11Info_appRootWindow'; function QX11Info_appDefaultColormap(screen: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QX11Info_appDefaultColormap'; function QX11Info_appDefaultVisual(screen: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QX11Info_appDefaultVisual'; function QX11Info_appDpiX(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDpiX'; function QX11Info_appDpiY(screen: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QX11Info_appDpiY'; procedure QX11Info_setAppDpiX(screen: Integer; dpi: Integer); cdecl; external Qt4PasLib name 'QX11Info_setAppDpiX'; procedure QX11Info_setAppDpiY(screen: Integer; dpi: Integer); cdecl; external Qt4PasLib name 'QX11Info_setAppDpiY'; function QX11Info_appTime(): Longword; cdecl; external Qt4PasLib name 'QX11Info_appTime'; function QX11Info_appUserTime(): Longword; cdecl; external Qt4PasLib name 'QX11Info_appUserTime'; procedure QX11Info_setAppTime(time: Longword); cdecl; external Qt4PasLib name 'QX11Info_setAppTime'; procedure QX11Info_setAppUserTime(time: Longword); cdecl; external Qt4PasLib name 'QX11Info_setAppUserTime'; function QX11Info_isCompositingManagerRunning(): Boolean; cdecl; external Qt4PasLib name 'QX11Info_isCompositingManagerRunning'; {$endif} function QDrag_create(dragSource: QWidgetH): QDragH; cdecl; external Qt4PasLib name 'QDrag_create'; procedure QDrag_destroy(handle: QDragH); cdecl; external Qt4PasLib name 'QDrag_destroy'; procedure QDrag_setMimeData(handle: QDragH; data: QMimeDataH); cdecl; external Qt4PasLib name 'QDrag_setMimeData'; function QDrag_mimeData(handle: QDragH): QMimeDataH; cdecl; external Qt4PasLib name 'QDrag_mimeData'; procedure QDrag_setPixmap(handle: QDragH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QDrag_setPixmap'; procedure QDrag_pixmap(handle: QDragH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QDrag_pixmap'; procedure QDrag_setHotSpot(handle: QDragH; hotspot: PQtPoint); cdecl; external Qt4PasLib name 'QDrag_setHotSpot'; procedure QDrag_hotSpot(handle: QDragH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QDrag_hotSpot'; function QDrag_source(handle: QDragH): QWidgetH; cdecl; external Qt4PasLib name 'QDrag_source'; function QDrag_target(handle: QDragH): QWidgetH; cdecl; external Qt4PasLib name 'QDrag_target'; function QDrag_start(handle: QDragH; supportedActions: QtDropActions = QtCopyAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_start'; function QDrag_exec(handle: QDragH; supportedActions: QtDropActions = QtMoveAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_exec'; function QDrag_exec(handle: QDragH; supportedActions: QtDropActions; defaultAction: QtDropAction): QtDropAction; cdecl; external Qt4PasLib name 'QDrag_exec2'; procedure QDrag_setDragCursor(handle: QDragH; cursor: QPixmapH; action: QtDropAction); cdecl; external Qt4PasLib name 'QDrag_setDragCursor'; type QDrag_actionChanged_Event = procedure (action: QtDropAction) of object cdecl; QDrag_targetChanged_Event = procedure (newTarget: QWidgetH) of object cdecl; function QShortcut_create(parent: QWidgetH): QShortcutH; cdecl; external Qt4PasLib name 'QShortcut_create'; procedure QShortcut_destroy(handle: QShortcutH); cdecl; external Qt4PasLib name 'QShortcut_destroy'; function QShortcut_create(key: QKeySequenceH; parent: QWidgetH; member: PAnsiChar = nil; ambiguousMember: PAnsiChar = nil; context: QtShortcutContext = QtWindowShortcut): QShortcutH; cdecl; external Qt4PasLib name 'QShortcut_create2'; procedure QShortcut_setKey(handle: QShortcutH; key: QKeySequenceH); cdecl; external Qt4PasLib name 'QShortcut_setKey'; procedure QShortcut_key(handle: QShortcutH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QShortcut_key'; procedure QShortcut_setEnabled(handle: QShortcutH; enable: Boolean); cdecl; external Qt4PasLib name 'QShortcut_setEnabled'; function QShortcut_isEnabled(handle: QShortcutH): Boolean; cdecl; external Qt4PasLib name 'QShortcut_isEnabled'; procedure QShortcut_setContext(handle: QShortcutH; context: QtShortcutContext); cdecl; external Qt4PasLib name 'QShortcut_setContext'; function QShortcut_context(handle: QShortcutH): QtShortcutContext; cdecl; external Qt4PasLib name 'QShortcut_context'; procedure QShortcut_setWhatsThis(handle: QShortcutH; text: PWideString); cdecl; external Qt4PasLib name 'QShortcut_setWhatsThis'; procedure QShortcut_whatsThis(handle: QShortcutH; retval: PWideString); cdecl; external Qt4PasLib name 'QShortcut_whatsThis'; procedure QShortcut_setAutoRepeat(handle: QShortcutH; _on: Boolean); cdecl; external Qt4PasLib name 'QShortcut_setAutoRepeat'; function QShortcut_autoRepeat(handle: QShortcutH): Boolean; cdecl; external Qt4PasLib name 'QShortcut_autoRepeat'; function QShortcut_id(handle: QShortcutH): Integer; cdecl; external Qt4PasLib name 'QShortcut_id'; function QShortcut_parentWidget(handle: QShortcutH): QWidgetH; cdecl; external Qt4PasLib name 'QShortcut_parentWidget'; type QShortcut_activated_Event = procedure () of object cdecl; QShortcut_activatedAmbiguously_Event = procedure () of object cdecl; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} type QSessionManagerRestartHint = ( // QSessionManager::RestartHint (1) QSessionManagerRestartIfRunning, QSessionManagerRestartAnyway, QSessionManagerRestartImmediately, QSessionManagerRestartNever ); {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QSessionManager_sessionId(handle: QSessionManagerH; retval: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_sessionId'; procedure QSessionManager_sessionKey(handle: QSessionManagerH; retval: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_sessionKey'; {$endif} {$if defined(BINUX) or defined(DARWIN)} function QSessionManager_handle(handle: QSessionManagerH): Pointer; cdecl; external Qt4PasLib name 'QSessionManager_handle'; {$endif} {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} function QSessionManager_allowsInteraction(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_allowsInteraction'; function QSessionManager_allowsErrorInteraction(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_allowsErrorInteraction'; procedure QSessionManager_release(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_release'; procedure QSessionManager_cancel(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_cancel'; procedure QSessionManager_setRestartHint(handle: QSessionManagerH; AnonParam1: QSessionManagerRestartHint); cdecl; external Qt4PasLib name 'QSessionManager_setRestartHint'; function QSessionManager_restartHint(handle: QSessionManagerH): QSessionManagerRestartHint; cdecl; external Qt4PasLib name 'QSessionManager_restartHint'; procedure QSessionManager_setRestartCommand(handle: QSessionManagerH; AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setRestartCommand'; procedure QSessionManager_restartCommand(handle: QSessionManagerH; retval: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_restartCommand'; procedure QSessionManager_setDiscardCommand(handle: QSessionManagerH; AnonParam1: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setDiscardCommand'; procedure QSessionManager_discardCommand(handle: QSessionManagerH; retval: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_discardCommand'; procedure QSessionManager_setManagerProperty(handle: QSessionManagerH; name: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QSessionManager_setManagerProperty'; procedure QSessionManager_setManagerProperty(handle: QSessionManagerH; name: PWideString; value: QStringListH); cdecl; external Qt4PasLib name 'QSessionManager_setManagerProperty2'; function QSessionManager_isPhase2(handle: QSessionManagerH): Boolean; cdecl; external Qt4PasLib name 'QSessionManager_isPhase2'; procedure QSessionManager_requestPhase2(handle: QSessionManagerH); cdecl; external Qt4PasLib name 'QSessionManager_requestPhase2'; {$endif} type QColorSpec = ( // QColor::Spec (1) QColorInvalid, QColorRgb, QColorHsv, QColorCmyk ); function QColor_create(): QColorH; cdecl; external Qt4PasLib name 'QColor_create'; procedure QColor_destroy(handle: QColorH); cdecl; external Qt4PasLib name 'QColor_destroy'; function QColor_create(color: QtGlobalColor): QColorH; cdecl; external Qt4PasLib name 'QColor_create2'; function QColor_create(r: Integer; g: Integer; b: Integer; a: Integer = 255): QColorH; cdecl; external Qt4PasLib name 'QColor_create3'; function QColor_create(rgb: QRgb): QColorH; cdecl; external Qt4PasLib name 'QColor_create4'; function QColor_create(name: PWideString): QColorH; cdecl; external Qt4PasLib name 'QColor_create5'; function QColor_create(name: PAnsiChar): QColorH; cdecl; external Qt4PasLib name 'QColor_create6'; function QColor_create(color: PQColor): QColorH; cdecl; external Qt4PasLib name 'QColor_create7'; function QColor_create(spec: QColorSpec): QColorH; cdecl; external Qt4PasLib name 'QColor_create8'; function QColor_isValid(handle: QColorH): Boolean; cdecl; external Qt4PasLib name 'QColor_isValid'; procedure QColor_name(handle: QColorH; retval: PWideString); cdecl; external Qt4PasLib name 'QColor_name'; procedure QColor_setNamedColor(handle: QColorH; name: PWideString); cdecl; external Qt4PasLib name 'QColor_setNamedColor'; procedure QColor_colorNames(retval: QStringListH); cdecl; external Qt4PasLib name 'QColor_colorNames'; function QColor_spec(handle: QColorH): QColorSpec; cdecl; external Qt4PasLib name 'QColor_spec'; function QColor_alpha(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_alpha'; procedure QColor_setAlpha(handle: QColorH; alpha: Integer); cdecl; external Qt4PasLib name 'QColor_setAlpha'; function QColor_alphaF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_alphaF'; procedure QColor_setAlphaF(handle: QColorH; alpha: qreal); cdecl; external Qt4PasLib name 'QColor_setAlphaF'; function QColor_red(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_red'; function QColor_green(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_green'; function QColor_blue(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_blue'; procedure QColor_setRed(handle: QColorH; red: Integer); cdecl; external Qt4PasLib name 'QColor_setRed'; procedure QColor_setGreen(handle: QColorH; green: Integer); cdecl; external Qt4PasLib name 'QColor_setGreen'; procedure QColor_setBlue(handle: QColorH; blue: Integer); cdecl; external Qt4PasLib name 'QColor_setBlue'; function QColor_redF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_redF'; function QColor_greenF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_greenF'; function QColor_blueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_blueF'; procedure QColor_setRedF(handle: QColorH; red: qreal); cdecl; external Qt4PasLib name 'QColor_setRedF'; procedure QColor_setGreenF(handle: QColorH; green: qreal); cdecl; external Qt4PasLib name 'QColor_setGreenF'; procedure QColor_setBlueF(handle: QColorH; blue: qreal); cdecl; external Qt4PasLib name 'QColor_setBlueF'; procedure QColor_getRgb(handle: QColorH; r: PInteger; g: PInteger; b: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getRgb'; procedure QColor_setRgb(handle: QColorH; r: Integer; g: Integer; b: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setRgb'; procedure QColor_getRgbF(handle: QColorH; r: PQReal; g: PQReal; b: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getRgbF'; procedure QColor_setRgbF(handle: QColorH; r: qreal; g: qreal; b: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setRgbF'; function QColor_rgba(handle: QColorH): QRgb; cdecl; external Qt4PasLib name 'QColor_rgba'; procedure QColor_setRgba(handle: QColorH; rgba: QRgb); cdecl; external Qt4PasLib name 'QColor_setRgba'; function QColor_rgb(handle: QColorH): QRgb; cdecl; external Qt4PasLib name 'QColor_rgb'; procedure QColor_setRgb(handle: QColorH; rgb: QRgb); cdecl; external Qt4PasLib name 'QColor_setRgb2'; function QColor_hue(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_hue'; function QColor_saturation(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_saturation'; function QColor_value(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_value'; function QColor_hueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_hueF'; function QColor_saturationF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_saturationF'; function QColor_valueF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_valueF'; procedure QColor_getHsv(handle: QColorH; h: PInteger; s: PInteger; v: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getHsv'; procedure QColor_setHsv(handle: QColorH; h: Integer; s: Integer; v: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setHsv'; procedure QColor_getHsvF(handle: QColorH; h: PQReal; s: PQReal; v: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getHsvF'; procedure QColor_setHsvF(handle: QColorH; h: qreal; s: qreal; v: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setHsvF'; function QColor_cyan(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_cyan'; function QColor_magenta(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_magenta'; function QColor_yellow(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_yellow'; function QColor_black(handle: QColorH): Integer; cdecl; external Qt4PasLib name 'QColor_black'; function QColor_cyanF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_cyanF'; function QColor_magentaF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_magentaF'; function QColor_yellowF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_yellowF'; function QColor_blackF(handle: QColorH): qreal; cdecl; external Qt4PasLib name 'QColor_blackF'; procedure QColor_getCmyk(handle: QColorH; c: PInteger; m: PInteger; y: PInteger; k: PInteger; a: PInteger = nil); cdecl; external Qt4PasLib name 'QColor_getCmyk'; procedure QColor_setCmyk(handle: QColorH; c: Integer; m: Integer; y: Integer; k: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_setCmyk'; procedure QColor_getCmykF(handle: QColorH; c: PQReal; m: PQReal; y: PQReal; k: PQReal; a: PQReal = nil); cdecl; external Qt4PasLib name 'QColor_getCmykF'; procedure QColor_setCmykF(handle: QColorH; c: qreal; m: qreal; y: qreal; k: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_setCmykF'; procedure QColor_toRgb(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toRgb'; procedure QColor_toHsv(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toHsv'; procedure QColor_toCmyk(handle: QColorH; retval: PQColor); cdecl; external Qt4PasLib name 'QColor_toCmyk'; procedure QColor_convertTo(handle: QColorH; retval: PQColor; colorSpec: QColorSpec); cdecl; external Qt4PasLib name 'QColor_convertTo'; procedure QColor_fromRgb(retval: PQColor; rgb: QRgb); cdecl; external Qt4PasLib name 'QColor_fromRgb'; procedure QColor_fromRgba(retval: PQColor; rgba: QRgb); cdecl; external Qt4PasLib name 'QColor_fromRgba'; procedure QColor_fromRgb(retval: PQColor; r: Integer; g: Integer; b: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromRgb2'; procedure QColor_fromRgbF(retval: PQColor; r: qreal; g: qreal; b: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromRgbF'; procedure QColor_fromHsv(retval: PQColor; h: Integer; s: Integer; v: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromHsv'; procedure QColor_fromHsvF(retval: PQColor; h: qreal; s: qreal; v: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromHsvF'; procedure QColor_fromCmyk(retval: PQColor; c: Integer; m: Integer; y: Integer; k: Integer; a: Integer = 255); cdecl; external Qt4PasLib name 'QColor_fromCmyk'; procedure QColor_fromCmykF(retval: PQColor; c: qreal; m: qreal; y: qreal; k: qreal; a: qreal = 1.0); cdecl; external Qt4PasLib name 'QColor_fromCmykF'; procedure QColor_light(handle: QColorH; retval: PQColor; f: Integer = 150); cdecl; external Qt4PasLib name 'QColor_light'; procedure QColor_lighter(handle: QColorH; retval: PQColor; f: Integer = 150); cdecl; external Qt4PasLib name 'QColor_lighter'; procedure QColor_dark(handle: QColorH; retval: PQColor; f: Integer = 200); cdecl; external Qt4PasLib name 'QColor_dark'; procedure QColor_darker(handle: QColorH; retval: PQColor; f: Integer = 200); cdecl; external Qt4PasLib name 'QColor_darker'; {$ifdef BINUX } function QColor_allowX11ColorNames(): Boolean; cdecl; external Qt4PasLib name 'QColor_allowX11ColorNames'; procedure QColor_setAllowX11ColorNames(enabled: Boolean); cdecl; external Qt4PasLib name 'QColor_setAllowX11ColorNames'; {$endif} function QMatrix_create(): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create'; procedure QMatrix_destroy(handle: QMatrixH); cdecl; external Qt4PasLib name 'QMatrix_destroy'; function QMatrix_create(m11: qreal; m12: qreal; m21: qreal; m22: qreal; dx: qreal; dy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create2'; function QMatrix_create(matrix: QMatrixH): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_create3'; procedure QMatrix_setMatrix(handle: QMatrixH; m11: qreal; m12: qreal; m21: qreal; m22: qreal; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QMatrix_setMatrix'; function QMatrix_m11(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m11'; function QMatrix_m12(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m12'; function QMatrix_m21(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m21'; function QMatrix_m22(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_m22'; function QMatrix_dx(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_dx'; function QMatrix_dy(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_dy'; procedure QMatrix_map(handle: QMatrixH; x: Integer; y: Integer; tx: PInteger; ty: PInteger); cdecl; external Qt4PasLib name 'QMatrix_map'; procedure QMatrix_map(handle: QMatrixH; x: qreal; y: qreal; tx: PQReal; ty: PQReal); cdecl; external Qt4PasLib name 'QMatrix_map2'; procedure QMatrix_mapRect(handle: QMatrixH; retval: PRect; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QMatrix_mapRect'; procedure QMatrix_mapRect(handle: QMatrixH; retval: QRectFH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QMatrix_mapRect2'; procedure QMatrix_map(handle: QMatrixH; retval: PQtPoint; p: PQtPoint); cdecl; external Qt4PasLib name 'QMatrix_map3'; procedure QMatrix_map(handle: QMatrixH; retval: PQtPointF; p: PQtPointF); cdecl; external Qt4PasLib name 'QMatrix_map4'; procedure QMatrix_map(handle: QMatrixH; retval: QLineH; l: QLineH); cdecl; external Qt4PasLib name 'QMatrix_map5'; procedure QMatrix_map(handle: QMatrixH; retval: QLineFH; l: QLineFH); cdecl; external Qt4PasLib name 'QMatrix_map6'; procedure QMatrix_map(handle: QMatrixH; retval: QPolygonFH; a: QPolygonFH); cdecl; external Qt4PasLib name 'QMatrix_map7'; procedure QMatrix_map(handle: QMatrixH; retval: QPolygonH; a: QPolygonH); cdecl; external Qt4PasLib name 'QMatrix_map8'; procedure QMatrix_map(handle: QMatrixH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QMatrix_map9'; procedure QMatrix_map(handle: QMatrixH; retval: QPainterPathH; p: QPainterPathH); cdecl; external Qt4PasLib name 'QMatrix_map10'; procedure QMatrix_mapToPolygon(handle: QMatrixH; retval: QPolygonH; r: PRect); cdecl; external Qt4PasLib name 'QMatrix_mapToPolygon'; procedure QMatrix_reset(handle: QMatrixH); cdecl; external Qt4PasLib name 'QMatrix_reset'; function QMatrix_isIdentity(handle: QMatrixH): Boolean; cdecl; external Qt4PasLib name 'QMatrix_isIdentity'; function QMatrix_translate(handle: QMatrixH; dx: qreal; dy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_translate'; function QMatrix_scale(handle: QMatrixH; sx: qreal; sy: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_scale'; function QMatrix_shear(handle: QMatrixH; sh: qreal; sv: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_shear'; function QMatrix_rotate(handle: QMatrixH; a: qreal): QMatrixH; cdecl; external Qt4PasLib name 'QMatrix_rotate'; function QMatrix_isInvertible(handle: QMatrixH): Boolean; cdecl; external Qt4PasLib name 'QMatrix_isInvertible'; function QMatrix_det(handle: QMatrixH): qreal; cdecl; external Qt4PasLib name 'QMatrix_det'; procedure QMatrix_inverted(handle: QMatrixH; retval: QMatrixH; invertible: PBoolean = nil); cdecl; external Qt4PasLib name 'QMatrix_inverted'; type QGradientType = ( // QGradient::Type (1) QGradientLinearGradient, QGradientRadialGradient, QGradientConicalGradient, QGradientNoGradient ); QGradientSpread = ( // QGradient::Spread (1) QGradientPadSpread, QGradientReflectSpread, QGradientRepeatSpread ); QGradientCoordinateMode = ( // QGradient::CoordinateMode (1) QGradientLogicalMode, QGradientStretchToDeviceMode, QGradientObjectBoundingMode ); QGradientInterpolationMode = ( // QGradient::InterpolationMode (1) QGradientColorInterpolation, QGradientComponentInterpolation ); function QBrush_create(): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create'; procedure QBrush_destroy(handle: QBrushH); cdecl; external Qt4PasLib name 'QBrush_destroy'; function QBrush_create(bs: QtBrushStyle): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create2'; function QBrush_create(color: PQColor; bs: QtBrushStyle = QtSolidPattern): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create3'; function QBrush_create(color: QtGlobalColor; bs: QtBrushStyle = QtSolidPattern): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create4'; function QBrush_create(color: PQColor; pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create5'; function QBrush_create(color: QtGlobalColor; pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create6'; function QBrush_create(pixmap: QPixmapH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create7'; function QBrush_create(image: QImageH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create8'; function QBrush_create(brush: QBrushH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create9'; function QBrush_create(gradient: QGradientH): QBrushH; cdecl; external Qt4PasLib name 'QBrush_create10'; function QBrush_style(handle: QBrushH): QtBrushStyle; cdecl; external Qt4PasLib name 'QBrush_style'; procedure QBrush_setStyle(handle: QBrushH; AnonParam1: QtBrushStyle); cdecl; external Qt4PasLib name 'QBrush_setStyle'; function QBrush_matrix(handle: QBrushH): QMatrixH; cdecl; external Qt4PasLib name 'QBrush_matrix'; procedure QBrush_setMatrix(handle: QBrushH; mat: QMatrixH); cdecl; external Qt4PasLib name 'QBrush_setMatrix'; procedure QBrush_transform(handle: QBrushH; retval: QTransformH); cdecl; external Qt4PasLib name 'QBrush_transform'; procedure QBrush_setTransform(handle: QBrushH; AnonParam1: QTransformH); cdecl; external Qt4PasLib name 'QBrush_setTransform'; procedure QBrush_texture(handle: QBrushH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QBrush_texture'; procedure QBrush_setTexture(handle: QBrushH; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QBrush_setTexture'; procedure QBrush_textureImage(handle: QBrushH; retval: QImageH); cdecl; external Qt4PasLib name 'QBrush_textureImage'; procedure QBrush_setTextureImage(handle: QBrushH; image: QImageH); cdecl; external Qt4PasLib name 'QBrush_setTextureImage'; function QBrush_color(handle: QBrushH): PQColor; cdecl; external Qt4PasLib name 'QBrush_color'; procedure QBrush_setColor(handle: QBrushH; color: PQColor); cdecl; external Qt4PasLib name 'QBrush_setColor'; procedure QBrush_setColor(handle: QBrushH; color: QtGlobalColor); cdecl; external Qt4PasLib name 'QBrush_setColor2'; function QBrush_gradient(handle: QBrushH): QGradientH; cdecl; external Qt4PasLib name 'QBrush_gradient'; function QBrush_isOpaque(handle: QBrushH): Boolean; cdecl; external Qt4PasLib name 'QBrush_isOpaque'; function QBrush_isDetached(handle: QBrushH): Boolean; cdecl; external Qt4PasLib name 'QBrush_isDetached'; function QGradient_create(): QGradientH; cdecl; external Qt4PasLib name 'QGradient_create'; procedure QGradient_destroy(handle: QGradientH); cdecl; external Qt4PasLib name 'QGradient_destroy'; function QGradient_type(handle: QGradientH): QGradientType; cdecl; external Qt4PasLib name 'QGradient_type'; procedure QGradient_setSpread(handle: QGradientH; spread: QGradientSpread); cdecl; external Qt4PasLib name 'QGradient_setSpread'; function QGradient_spread(handle: QGradientH): QGradientSpread; cdecl; external Qt4PasLib name 'QGradient_spread'; procedure QGradient_setColorAt(handle: QGradientH; pos: qreal; color: PQColor); cdecl; external Qt4PasLib name 'QGradient_setColorAt'; function QGradient_coordinateMode(handle: QGradientH): QGradientCoordinateMode; cdecl; external Qt4PasLib name 'QGradient_coordinateMode'; procedure QGradient_setCoordinateMode(handle: QGradientH; mode: QGradientCoordinateMode); cdecl; external Qt4PasLib name 'QGradient_setCoordinateMode'; function QGradient_interpolationMode(handle: QGradientH): QGradientInterpolationMode; cdecl; external Qt4PasLib name 'QGradient_interpolationMode'; procedure QGradient_setInterpolationMode(handle: QGradientH; mode: QGradientInterpolationMode); cdecl; external Qt4PasLib name 'QGradient_setInterpolationMode'; function QLinearGradient_create(): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create'; procedure QLinearGradient_destroy(handle: QLinearGradientH); cdecl; external Qt4PasLib name 'QLinearGradient_destroy'; function QLinearGradient_create(start: PQtPointF; finalStop: PQtPointF): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create2'; function QLinearGradient_create(xStart: qreal; yStart: qreal; xFinalStop: qreal; yFinalStop: qreal): QLinearGradientH; cdecl; external Qt4PasLib name 'QLinearGradient_create3'; procedure QLinearGradient_start(handle: QLinearGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_start'; procedure QLinearGradient_setStart(handle: QLinearGradientH; start: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_setStart'; procedure QLinearGradient_setStart(handle: QLinearGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QLinearGradient_setStart2'; procedure QLinearGradient_finalStop(handle: QLinearGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_finalStop'; procedure QLinearGradient_setFinalStop(handle: QLinearGradientH; stop: PQtPointF); cdecl; external Qt4PasLib name 'QLinearGradient_setFinalStop'; procedure QLinearGradient_setFinalStop(handle: QLinearGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QLinearGradient_setFinalStop2'; function QRadialGradient_create(): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create'; procedure QRadialGradient_destroy(handle: QRadialGradientH); cdecl; external Qt4PasLib name 'QRadialGradient_destroy'; function QRadialGradient_create(center: PQtPointF; radius: qreal; focalPoint: PQtPointF): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create2'; function QRadialGradient_create(cx: qreal; cy: qreal; radius: qreal; fx: qreal; fy: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create3'; function QRadialGradient_create(center: PQtPointF; radius: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create4'; function QRadialGradient_create(cx: qreal; cy: qreal; radius: qreal): QRadialGradientH; cdecl; external Qt4PasLib name 'QRadialGradient_create5'; procedure QRadialGradient_center(handle: QRadialGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_center'; procedure QRadialGradient_setCenter(handle: QRadialGradientH; center: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_setCenter'; procedure QRadialGradient_setCenter(handle: QRadialGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setCenter2'; procedure QRadialGradient_focalPoint(handle: QRadialGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_focalPoint'; procedure QRadialGradient_setFocalPoint(handle: QRadialGradientH; focalPoint: PQtPointF); cdecl; external Qt4PasLib name 'QRadialGradient_setFocalPoint'; procedure QRadialGradient_setFocalPoint(handle: QRadialGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setFocalPoint2'; function QRadialGradient_radius(handle: QRadialGradientH): qreal; cdecl; external Qt4PasLib name 'QRadialGradient_radius'; procedure QRadialGradient_setRadius(handle: QRadialGradientH; radius: qreal); cdecl; external Qt4PasLib name 'QRadialGradient_setRadius'; function QConicalGradient_create(): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create'; procedure QConicalGradient_destroy(handle: QConicalGradientH); cdecl; external Qt4PasLib name 'QConicalGradient_destroy'; function QConicalGradient_create(center: PQtPointF; startAngle: qreal): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create2'; function QConicalGradient_create(cx: qreal; cy: qreal; startAngle: qreal): QConicalGradientH; cdecl; external Qt4PasLib name 'QConicalGradient_create3'; procedure QConicalGradient_center(handle: QConicalGradientH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QConicalGradient_center'; procedure QConicalGradient_setCenter(handle: QConicalGradientH; center: PQtPointF); cdecl; external Qt4PasLib name 'QConicalGradient_setCenter'; procedure QConicalGradient_setCenter(handle: QConicalGradientH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QConicalGradient_setCenter2'; function QConicalGradient_angle(handle: QConicalGradientH): qreal; cdecl; external Qt4PasLib name 'QConicalGradient_angle'; procedure QConicalGradient_setAngle(handle: QConicalGradientH; angle: qreal); cdecl; external Qt4PasLib name 'QConicalGradient_setAngle'; function QPen_create(): QPenH; cdecl; external Qt4PasLib name 'QPen_create'; procedure QPen_destroy(handle: QPenH); cdecl; external Qt4PasLib name 'QPen_destroy'; function QPen_create(AnonParam1: QtPenStyle): QPenH; cdecl; external Qt4PasLib name 'QPen_create2'; function QPen_create(color: PQColor): QPenH; cdecl; external Qt4PasLib name 'QPen_create3'; function QPen_create(brush: QBrushH; width: qreal; s: QtPenStyle = QtSolidLine; c: QtPenCapStyle = QtSquareCap; j: QtPenJoinStyle = QtBevelJoin): QPenH; cdecl; external Qt4PasLib name 'QPen_create4'; function QPen_create(pen: QPenH): QPenH; cdecl; external Qt4PasLib name 'QPen_create5'; function QPen_style(handle: QPenH): QtPenStyle; cdecl; external Qt4PasLib name 'QPen_style'; procedure QPen_setStyle(handle: QPenH; AnonParam1: QtPenStyle); cdecl; external Qt4PasLib name 'QPen_setStyle'; procedure QPen_dashPattern(handle: QPenH; retval: PQRealArray); cdecl; external Qt4PasLib name 'QPen_dashPattern'; procedure QPen_setDashPattern(handle: QPenH; pattern: PQRealArray); cdecl; external Qt4PasLib name 'QPen_setDashPattern'; function QPen_dashOffset(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_dashOffset'; procedure QPen_setDashOffset(handle: QPenH; doffset: qreal); cdecl; external Qt4PasLib name 'QPen_setDashOffset'; function QPen_miterLimit(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_miterLimit'; procedure QPen_setMiterLimit(handle: QPenH; limit: qreal); cdecl; external Qt4PasLib name 'QPen_setMiterLimit'; function QPen_widthF(handle: QPenH): qreal; cdecl; external Qt4PasLib name 'QPen_widthF'; procedure QPen_setWidthF(handle: QPenH; width: qreal); cdecl; external Qt4PasLib name 'QPen_setWidthF'; function QPen_width(handle: QPenH): Integer; cdecl; external Qt4PasLib name 'QPen_width'; procedure QPen_setWidth(handle: QPenH; width: Integer); cdecl; external Qt4PasLib name 'QPen_setWidth'; procedure QPen_color(handle: QPenH; retval: PQColor); cdecl; external Qt4PasLib name 'QPen_color'; procedure QPen_setColor(handle: QPenH; color: PQColor); cdecl; external Qt4PasLib name 'QPen_setColor'; procedure QPen_brush(handle: QPenH; retval: QBrushH); cdecl; external Qt4PasLib name 'QPen_brush'; procedure QPen_setBrush(handle: QPenH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPen_setBrush'; function QPen_isSolid(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isSolid'; function QPen_capStyle(handle: QPenH): QtPenCapStyle; cdecl; external Qt4PasLib name 'QPen_capStyle'; procedure QPen_setCapStyle(handle: QPenH; pcs: QtPenCapStyle); cdecl; external Qt4PasLib name 'QPen_setCapStyle'; function QPen_joinStyle(handle: QPenH): QtPenJoinStyle; cdecl; external Qt4PasLib name 'QPen_joinStyle'; procedure QPen_setJoinStyle(handle: QPenH; pcs: QtPenJoinStyle); cdecl; external Qt4PasLib name 'QPen_setJoinStyle'; function QPen_isCosmetic(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isCosmetic'; procedure QPen_setCosmetic(handle: QPenH; cosmetic: Boolean); cdecl; external Qt4PasLib name 'QPen_setCosmetic'; function QPen_isDetached(handle: QPenH): Boolean; cdecl; external Qt4PasLib name 'QPen_isDetached'; function QPolygon_create(): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create'; procedure QPolygon_destroy(handle: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_destroy'; function QPolygon_create(size: Integer): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create2'; function QPolygon_create(a: QPolygonH): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create3'; function QPolygon_create(r: PRect; closed: Boolean = False): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create4'; function QPolygon_create(nPoints: Integer; points: PInteger): QPolygonH; cdecl; external Qt4PasLib name 'QPolygon_create5'; procedure QPolygon_translate(handle: QPolygonH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QPolygon_translate'; procedure QPolygon_translate(handle: QPolygonH; offset: PQtPoint); cdecl; external Qt4PasLib name 'QPolygon_translate2'; procedure QPolygon_boundingRect(handle: QPolygonH; retval: PRect); cdecl; external Qt4PasLib name 'QPolygon_boundingRect'; procedure QPolygon_point(handle: QPolygonH; i: Integer; x: PInteger; y: PInteger); cdecl; external Qt4PasLib name 'QPolygon_point'; procedure QPolygon_point(handle: QPolygonH; retval: PQtPoint; i: Integer); cdecl; external Qt4PasLib name 'QPolygon_point2'; procedure QPolygon_setPoint(handle: QPolygonH; index: Integer; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPolygon_setPoint'; procedure QPolygon_setPoint(handle: QPolygonH; index: Integer; p: PQtPoint); cdecl; external Qt4PasLib name 'QPolygon_setPoint2'; procedure QPolygon_setPoints(handle: QPolygonH; nPoints: Integer; points: PInteger); cdecl; external Qt4PasLib name 'QPolygon_setPoints'; procedure QPolygon_putPoints(handle: QPolygonH; index: Integer; nPoints: Integer; points: PInteger); cdecl; external Qt4PasLib name 'QPolygon_putPoints'; procedure QPolygon_putPoints(handle: QPolygonH; index: Integer; nPoints: Integer; from: QPolygonH; fromIndex: Integer = 0); cdecl; external Qt4PasLib name 'QPolygon_putPoints3'; function QPolygon_containsPoint(handle: QPolygonH; pt: PQtPoint; fillRule: QtFillRule): Boolean; cdecl; external Qt4PasLib name 'QPolygon_containsPoint'; procedure QPolygon_united(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_united'; procedure QPolygon_intersected(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_intersected'; procedure QPolygon_subtracted(handle: QPolygonH; retval: QPolygonH; r: QPolygonH); cdecl; external Qt4PasLib name 'QPolygon_subtracted'; function QPolygonF_create(): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create'; procedure QPolygonF_destroy(handle: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_destroy'; function QPolygonF_create(size: Integer): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create2'; function QPolygonF_create(a: QPolygonFH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create3'; function QPolygonF_create(r: QRectFH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create4'; function QPolygonF_create(a: QPolygonH): QPolygonFH; cdecl; external Qt4PasLib name 'QPolygonF_create5'; procedure QPolygonF_translate(handle: QPolygonFH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QPolygonF_translate'; procedure QPolygonF_translate(handle: QPolygonFH; offset: PQtPointF); cdecl; external Qt4PasLib name 'QPolygonF_translate2'; procedure QPolygonF_toPolygon(handle: QPolygonFH; retval: QPolygonH); cdecl; external Qt4PasLib name 'QPolygonF_toPolygon'; function QPolygonF_isClosed(handle: QPolygonFH): Boolean; cdecl; external Qt4PasLib name 'QPolygonF_isClosed'; procedure QPolygonF_boundingRect(handle: QPolygonFH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPolygonF_boundingRect'; function QPolygonF_containsPoint(handle: QPolygonFH; pt: PQtPointF; fillRule: QtFillRule): Boolean; cdecl; external Qt4PasLib name 'QPolygonF_containsPoint'; procedure QPolygonF_united(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_united'; procedure QPolygonF_intersected(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_intersected'; procedure QPolygonF_subtracted(handle: QPolygonFH; retval: QPolygonFH; r: QPolygonFH); cdecl; external Qt4PasLib name 'QPolygonF_subtracted'; type QPainterCompositionMode = ( // QPainter::CompositionMode (1) QPainterCompositionMode_SourceOver, QPainterCompositionMode_DestinationOver, QPainterCompositionMode_Clear, QPainterCompositionMode_Source, QPainterCompositionMode_Destination, QPainterCompositionMode_SourceIn, QPainterCompositionMode_DestinationIn, QPainterCompositionMode_SourceOut, QPainterCompositionMode_DestinationOut, QPainterCompositionMode_SourceAtop, QPainterCompositionMode_DestinationAtop, QPainterCompositionMode_Xor, QPainterCompositionMode_Plus, QPainterCompositionMode_Multiply, QPainterCompositionMode_Screen, QPainterCompositionMode_Overlay, QPainterCompositionMode_Darken, QPainterCompositionMode_Lighten, QPainterCompositionMode_ColorDodge, QPainterCompositionMode_ColorBurn, QPainterCompositionMode_HardLight, QPainterCompositionMode_SoftLight, QPainterCompositionMode_Difference, QPainterCompositionMode_Exclusion, QPainterRasterOp_SourceOrDestination, QPainterRasterOp_SourceAndDestination, QPainterRasterOp_SourceXorDestination, QPainterRasterOp_NotSourceAndNotDestination, QPainterRasterOp_NotSourceOrNotDestination, QPainterRasterOp_NotSourceXorDestination, QPainterRasterOp_NotSource, QPainterRasterOp_NotSourceAndDestination, QPainterRasterOp_SourceAndNotDestination ); type QPainterRenderHint = cardinal; // QPainter::RenderHint QPainterRenderHints = QPainterRenderHint; //QFlags<> (3) const QPainterAntialiasing = $01; QPainterTextAntialiasing = $02; QPainterSmoothPixmapTransform = $04; QPainterHighQualityAntialiasing = $08; QPainterNonCosmeticDefaultPen = $10; function QPainter_create(): QPainterH; cdecl; external Qt4PasLib name 'QPainter_create'; procedure QPainter_destroy(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_destroy'; function QPainter_create(AnonParam1: QPaintDeviceH): QPainterH; cdecl; external Qt4PasLib name 'QPainter_create2'; function QPainter_device(handle: QPainterH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPainter_device'; function QPainter_begin(handle: QPainterH; AnonParam1: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPainter_begin'; function QPainter_end(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_end'; function QPainter_isActive(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_isActive'; procedure QPainter_initFrom(handle: QPainterH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QPainter_initFrom'; procedure QPainter_setCompositionMode(handle: QPainterH; mode: QPainterCompositionMode); cdecl; external Qt4PasLib name 'QPainter_setCompositionMode'; function QPainter_compositionMode(handle: QPainterH): QPainterCompositionMode; cdecl; external Qt4PasLib name 'QPainter_compositionMode'; function QPainter_font(handle: QPainterH): QFontH; cdecl; external Qt4PasLib name 'QPainter_font'; procedure QPainter_setFont(handle: QPainterH; f: QFontH); cdecl; external Qt4PasLib name 'QPainter_setFont'; procedure QPainter_fontMetrics(handle: QPainterH; retval: QFontMetricsH); cdecl; external Qt4PasLib name 'QPainter_fontMetrics'; procedure QPainter_fontInfo(handle: QPainterH; retval: QFontInfoH); cdecl; external Qt4PasLib name 'QPainter_fontInfo'; procedure QPainter_setPen(handle: QPainterH; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_setPen'; procedure QPainter_setPen(handle: QPainterH; pen: QPenH); cdecl; external Qt4PasLib name 'QPainter_setPen2'; procedure QPainter_setPen(handle: QPainterH; style: QtPenStyle); cdecl; external Qt4PasLib name 'QPainter_setPen3'; function QPainter_pen(handle: QPainterH): QPenH; cdecl; external Qt4PasLib name 'QPainter_pen'; procedure QPainter_setBrush(handle: QPainterH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPainter_setBrush'; procedure QPainter_setBrush(handle: QPainterH; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_setBrush2'; function QPainter_brush(handle: QPainterH): QBrushH; cdecl; external Qt4PasLib name 'QPainter_brush'; procedure QPainter_setBackgroundMode(handle: QPainterH; mode: QtBGMode); cdecl; external Qt4PasLib name 'QPainter_setBackgroundMode'; function QPainter_backgroundMode(handle: QPainterH): QtBGMode; cdecl; external Qt4PasLib name 'QPainter_backgroundMode'; procedure QPainter_brushOrigin(handle: QPainterH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_brushOrigin'; procedure QPainter_setBrushOrigin(handle: QPainterH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin'; procedure QPainter_setBrushOrigin(handle: QPainterH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin2'; procedure QPainter_setBrushOrigin(handle: QPainterH; AnonParam1: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_setBrushOrigin3'; procedure QPainter_setBackground(handle: QPainterH; bg: QBrushH); cdecl; external Qt4PasLib name 'QPainter_setBackground'; function QPainter_background(handle: QPainterH): QBrushH; cdecl; external Qt4PasLib name 'QPainter_background'; function QPainter_opacity(handle: QPainterH): qreal; cdecl; external Qt4PasLib name 'QPainter_opacity'; procedure QPainter_setOpacity(handle: QPainterH; opacity: qreal); cdecl; external Qt4PasLib name 'QPainter_setOpacity'; procedure QPainter_clipRegion(handle: QPainterH; retval: QRegionH); cdecl; external Qt4PasLib name 'QPainter_clipRegion'; procedure QPainter_clipPath(handle: QPainterH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainter_clipPath'; procedure QPainter_setClipRect(handle: QPainterH; AnonParam1: QRectFH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect'; procedure QPainter_setClipRect(handle: QPainterH; AnonParam1: PRect; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect2'; procedure QPainter_setClipRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRect3'; procedure QPainter_setClipRegion(handle: QPainterH; AnonParam1: QRegionH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipRegion'; procedure QPainter_setClipPath(handle: QPainterH; path: QPainterPathH; op: QtClipOperation = QtReplaceClip); cdecl; external Qt4PasLib name 'QPainter_setClipPath'; procedure QPainter_setClipping(handle: QPainterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPainter_setClipping'; function QPainter_hasClipping(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_hasClipping'; procedure QPainter_save(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_save'; procedure QPainter_restore(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_restore'; procedure QPainter_setMatrix(handle: QPainterH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setMatrix'; function QPainter_matrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_matrix'; function QPainter_deviceMatrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_deviceMatrix'; procedure QPainter_resetMatrix(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_resetMatrix'; procedure QPainter_setTransform(handle: QPainterH; transform: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setTransform'; function QPainter_transform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_transform'; function QPainter_deviceTransform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_deviceTransform'; procedure QPainter_resetTransform(handle: QPainterH); cdecl; external Qt4PasLib name 'QPainter_resetTransform'; procedure QPainter_setWorldMatrix(handle: QPainterH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setWorldMatrix'; function QPainter_worldMatrix(handle: QPainterH): QMatrixH; cdecl; external Qt4PasLib name 'QPainter_worldMatrix'; procedure QPainter_setWorldTransform(handle: QPainterH; matrix: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QPainter_setWorldTransform'; function QPainter_worldTransform(handle: QPainterH): QTransformH; cdecl; external Qt4PasLib name 'QPainter_worldTransform'; procedure QPainter_combinedMatrix(handle: QPainterH; retval: QMatrixH); cdecl; external Qt4PasLib name 'QPainter_combinedMatrix'; procedure QPainter_combinedTransform(handle: QPainterH; retval: QTransformH); cdecl; external Qt4PasLib name 'QPainter_combinedTransform'; procedure QPainter_setMatrixEnabled(handle: QPainterH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPainter_setMatrixEnabled'; function QPainter_matrixEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_matrixEnabled'; procedure QPainter_setWorldMatrixEnabled(handle: QPainterH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPainter_setWorldMatrixEnabled'; function QPainter_worldMatrixEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_worldMatrixEnabled'; procedure QPainter_scale(handle: QPainterH; sx: qreal; sy: qreal); cdecl; external Qt4PasLib name 'QPainter_scale'; procedure QPainter_shear(handle: QPainterH; sh: qreal; sv: qreal); cdecl; external Qt4PasLib name 'QPainter_shear'; procedure QPainter_rotate(handle: QPainterH; a: qreal); cdecl; external Qt4PasLib name 'QPainter_rotate'; procedure QPainter_translate(handle: QPainterH; offset: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_translate'; procedure QPainter_translate(handle: QPainterH; offset: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_translate2'; procedure QPainter_translate(handle: QPainterH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QPainter_translate3'; procedure QPainter_window(handle: QPainterH; retval: PRect); cdecl; external Qt4PasLib name 'QPainter_window'; procedure QPainter_setWindow(handle: QPainterH; window: PRect); cdecl; external Qt4PasLib name 'QPainter_setWindow'; procedure QPainter_setWindow(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_setWindow2'; procedure QPainter_viewport(handle: QPainterH; retval: PRect); cdecl; external Qt4PasLib name 'QPainter_viewport'; procedure QPainter_setViewport(handle: QPainterH; viewport: PRect); cdecl; external Qt4PasLib name 'QPainter_setViewport'; procedure QPainter_setViewport(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_setViewport2'; procedure QPainter_setViewTransformEnabled(handle: QPainterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPainter_setViewTransformEnabled'; function QPainter_viewTransformEnabled(handle: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPainter_viewTransformEnabled'; procedure QPainter_strokePath(handle: QPainterH; path: QPainterPathH; pen: QPenH); cdecl; external Qt4PasLib name 'QPainter_strokePath'; procedure QPainter_fillPath(handle: QPainterH; path: QPainterPathH; brush: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillPath'; procedure QPainter_drawPath(handle: QPainterH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainter_drawPath'; procedure QPainter_drawPoint(handle: QPainterH; pt: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_drawPoint'; procedure QPainter_drawPoint(handle: QPainterH; p: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_drawPoint2'; procedure QPainter_drawPoint(handle: QPainterH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoint3'; procedure QPainter_drawPoints(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoints'; procedure QPainter_drawPoints(handle: QPainterH; points: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawPoints2'; procedure QPainter_drawPoints(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPoints3'; procedure QPainter_drawPoints(handle: QPainterH; points: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawPoints4'; procedure QPainter_drawLine(handle: QPainterH; line: QLineFH); cdecl; external Qt4PasLib name 'QPainter_drawLine'; procedure QPainter_drawLine(handle: QPainterH; line: QLineH); cdecl; external Qt4PasLib name 'QPainter_drawLine2'; procedure QPainter_drawLine(handle: QPainterH; x1: Integer; y1: Integer; x2: Integer; y2: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLine3'; procedure QPainter_drawLine(handle: QPainterH; p1: PQtPoint; p2: PQtPoint); cdecl; external Qt4PasLib name 'QPainter_drawLine4'; procedure QPainter_drawLine(handle: QPainterH; p1: PQtPointF; p2: PQtPointF); cdecl; external Qt4PasLib name 'QPainter_drawLine5'; procedure QPainter_drawLines(handle: QPainterH; lines: QLineFH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines'; procedure QPainter_drawLines(handle: QPainterH; pointPairs: PQtPointF; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines2'; procedure QPainter_drawLines(handle: QPainterH; lines: QLineH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines3'; procedure QPainter_drawLines(handle: QPainterH; pointPairs: PQtPoint; lineCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawLines4'; procedure QPainter_drawRect(handle: QPainterH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawRect'; procedure QPainter_drawRect(handle: QPainterH; x1: Integer; y1: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRect2'; procedure QPainter_drawRect(handle: QPainterH; rect: PRect); cdecl; external Qt4PasLib name 'QPainter_drawRect3'; procedure QPainter_drawRects(handle: QPainterH; rects: QRectFH; rectCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRects'; procedure QPainter_drawRects(handle: QPainterH; rects: PRect; rectCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawRects2'; procedure QPainter_drawEllipse(handle: QPainterH; r: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawEllipse'; procedure QPainter_drawEllipse(handle: QPainterH; r: PRect); cdecl; external Qt4PasLib name 'QPainter_drawEllipse2'; procedure QPainter_drawEllipse(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_drawEllipse3'; procedure QPainter_drawEllipse(handle: QPainterH; center: PQtPointF; rx: qreal; ry: qreal); cdecl; external Qt4PasLib name 'QPainter_drawEllipse4'; procedure QPainter_drawEllipse(handle: QPainterH; center: PQtPoint; rx: Integer; ry: Integer); cdecl; external Qt4PasLib name 'QPainter_drawEllipse5'; procedure QPainter_drawPolyline(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPolyline'; procedure QPainter_drawPolyline(handle: QPainterH; polyline: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawPolyline2'; procedure QPainter_drawPolyline(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPolyline3'; procedure QPainter_drawPolyline(handle: QPainterH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawPolyline4'; procedure QPainter_drawPolygon(handle: QPainterH; points: PQtPointF; pointCount: Integer; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon'; procedure QPainter_drawPolygon(handle: QPainterH; polygon: QPolygonFH; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon2'; procedure QPainter_drawPolygon(handle: QPainterH; points: PQtPoint; pointCount: Integer; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon3'; procedure QPainter_drawPolygon(handle: QPainterH; polygon: QPolygonH; fillRule: QtFillRule = QtOddEvenFill); cdecl; external Qt4PasLib name 'QPainter_drawPolygon4'; procedure QPainter_drawConvexPolygon(handle: QPainterH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon'; procedure QPainter_drawConvexPolygon(handle: QPainterH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon2'; procedure QPainter_drawConvexPolygon(handle: QPainterH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon3'; procedure QPainter_drawConvexPolygon(handle: QPainterH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QPainter_drawConvexPolygon4'; procedure QPainter_drawArc(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc'; procedure QPainter_drawArc(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc2'; procedure QPainter_drawArc(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawArc3'; procedure QPainter_drawPie(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie'; procedure QPainter_drawPie(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie2'; procedure QPainter_drawPie(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPie3'; procedure QPainter_drawChord(handle: QPainterH; rect: QRectFH; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord'; procedure QPainter_drawChord(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord2'; procedure QPainter_drawChord(handle: QPainterH; AnonParam1: PRect; a: Integer; alen: Integer); cdecl; external Qt4PasLib name 'QPainter_drawChord3'; procedure QPainter_drawRoundedRect(handle: QPainterH; rect: QRectFH; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect'; procedure QPainter_drawRoundedRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect2'; procedure QPainter_drawRoundedRect(handle: QPainterH; rect: PRect; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainter_drawRoundedRect3'; procedure QPainter_drawRoundRect(handle: QPainterH; r: QRectFH; xround: Integer = 25; yround: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect'; procedure QPainter_drawRoundRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: Integer = 25; AnonParam6: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect2'; procedure QPainter_drawRoundRect(handle: QPainterH; r: PRect; xround: Integer = 25; yround: Integer = 25); cdecl; external Qt4PasLib name 'QPainter_drawRoundRect3'; procedure QPainter_drawTiledPixmap(handle: QPainterH; rect: QRectFH; pm: QPixmapH; offset: PQtPointF = nil); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap'; procedure QPainter_drawTiledPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: QPixmapH; sx: Integer = 0; sy: Integer = 0); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap2'; procedure QPainter_drawTiledPixmap(handle: QPainterH; AnonParam1: PRect; AnonParam2: QPixmapH; AnonParam3: PQtPoint = nil); cdecl; external Qt4PasLib name 'QPainter_drawTiledPixmap3'; procedure QPainter_drawPicture(handle: QPainterH; p: PQtPointF; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture'; procedure QPainter_drawPicture(handle: QPainterH; x: Integer; y: Integer; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture2'; procedure QPainter_drawPicture(handle: QPainterH; p: PQtPoint; picture: QPictureH); cdecl; external Qt4PasLib name 'QPainter_drawPicture3'; procedure QPainter_drawPixmap(handle: QPainterH; targetRect: QRectFH; pixmap: QPixmapH; sourceRect: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap'; procedure QPainter_drawPixmap(handle: QPainterH; targetRect: PRect; pixmap: QPixmapH; sourceRect: PRect); cdecl; external Qt4PasLib name 'QPainter_drawPixmap2'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pm: QPixmapH; sx: Integer; sy: Integer; sw: Integer; sh: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPixmap3'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; pm: QPixmapH; sx: Integer; sy: Integer; sw: Integer; sh: Integer); cdecl; external Qt4PasLib name 'QPainter_drawPixmap4'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPointF; pm: QPixmapH; sr: QRectFH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap5'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPoint; pm: QPixmapH; sr: PRect); cdecl; external Qt4PasLib name 'QPainter_drawPixmap6'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPointF; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap7'; procedure QPainter_drawPixmap(handle: QPainterH; p: PQtPoint; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap8'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap9'; procedure QPainter_drawPixmap(handle: QPainterH; r: PRect; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap10'; procedure QPainter_drawPixmap(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pm: QPixmapH); cdecl; external Qt4PasLib name 'QPainter_drawPixmap11'; procedure QPainter_drawImage(handle: QPainterH; targetRect: QRectFH; image: QImageH; sourceRect: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage'; procedure QPainter_drawImage(handle: QPainterH; targetRect: PRect; image: QImageH; sourceRect: PRect; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage2'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPointF; image: QImageH; sr: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage3'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPoint; image: QImageH; sr: PRect; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage4'; procedure QPainter_drawImage(handle: QPainterH; r: QRectFH; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage5'; procedure QPainter_drawImage(handle: QPainterH; r: PRect; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage6'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPointF; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage7'; procedure QPainter_drawImage(handle: QPainterH; p: PQtPoint; image: QImageH); cdecl; external Qt4PasLib name 'QPainter_drawImage8'; procedure QPainter_drawImage(handle: QPainterH; x: Integer; y: Integer; image: QImageH; sx: Integer = 0; sy: Integer = 0; sw: Integer = -1; sh: Integer = -1; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPainter_drawImage9'; procedure QPainter_setLayoutDirection(handle: QPainterH; direction: QtLayoutDirection); cdecl; external Qt4PasLib name 'QPainter_setLayoutDirection'; function QPainter_layoutDirection(handle: QPainterH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QPainter_layoutDirection'; procedure QPainter_drawText(handle: QPainterH; p: PQtPointF; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText'; procedure QPainter_drawText(handle: QPainterH; p: PQtPoint; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText2'; procedure QPainter_drawText(handle: QPainterH; x: Integer; y: Integer; s: PWideString); cdecl; external Qt4PasLib name 'QPainter_drawText3'; procedure QPainter_drawText(handle: QPainterH; p: PQtPointF; str: PWideString; tf: Integer; justificationPadding: Integer); cdecl; external Qt4PasLib name 'QPainter_drawText4'; procedure QPainter_drawText(handle: QPainterH; r: QRectFH; flags: Integer; text: PWideString; br: QRectFH = nil); cdecl; external Qt4PasLib name 'QPainter_drawText5'; procedure QPainter_drawText(handle: QPainterH; r: PRect; flags: Integer; text: PWideString; br: PRect = nil); cdecl; external Qt4PasLib name 'QPainter_drawText6'; procedure QPainter_drawText(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString; br: PRect = nil); cdecl; external Qt4PasLib name 'QPainter_drawText7'; procedure QPainter_drawText(handle: QPainterH; r: QRectFH; text: PWideString; o: QTextOptionH = nil); cdecl; external Qt4PasLib name 'QPainter_drawText8'; procedure QPainter_boundingRect(handle: QPainterH; retval: QRectFH; rect: QRectFH; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect'; procedure QPainter_boundingRect(handle: QPainterH; retval: PRect; rect: PRect; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect2'; procedure QPainter_boundingRect(handle: QPainterH; retval: PRect; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QPainter_boundingRect3'; procedure QPainter_boundingRect(handle: QPainterH; retval: QRectFH; rect: QRectFH; text: PWideString; o: QTextOptionH = nil); cdecl; external Qt4PasLib name 'QPainter_boundingRect4'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: QRectFH; AnonParam2: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; AnonParam5: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect2'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: PRect; AnonParam2: QBrushH); cdecl; external Qt4PasLib name 'QPainter_fillRect3'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: QRectFH; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect4'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect5'; procedure QPainter_fillRect(handle: QPainterH; AnonParam1: PRect; color: PQColor); cdecl; external Qt4PasLib name 'QPainter_fillRect6'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect7'; procedure QPainter_fillRect(handle: QPainterH; r: PRect; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect8'; procedure QPainter_fillRect(handle: QPainterH; r: QRectFH; c: QtGlobalColor); cdecl; external Qt4PasLib name 'QPainter_fillRect9'; procedure QPainter_fillRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect10'; procedure QPainter_fillRect(handle: QPainterH; r: PRect; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect11'; procedure QPainter_fillRect(handle: QPainterH; r: QRectFH; style: QtBrushStyle); cdecl; external Qt4PasLib name 'QPainter_fillRect12'; procedure QPainter_eraseRect(handle: QPainterH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QPainter_eraseRect'; procedure QPainter_eraseRect(handle: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPainter_eraseRect2'; procedure QPainter_eraseRect(handle: QPainterH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QPainter_eraseRect3'; procedure QPainter_setRenderHint(handle: QPainterH; hint: QPainterRenderHint; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPainter_setRenderHint'; procedure QPainter_setRenderHints(handle: QPainterH; hints: QPainterRenderHints; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPainter_setRenderHints'; function QPainter_renderHints(handle: QPainterH): QPainterRenderHints; cdecl; external Qt4PasLib name 'QPainter_renderHints'; function QPainter_testRenderHint(handle: QPainterH; hint: QPainterRenderHint): Boolean; cdecl; external Qt4PasLib name 'QPainter_testRenderHint'; function QPainter_paintEngine(handle: QPainterH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPainter_paintEngine'; procedure QPainter_setRedirected(device: QPaintDeviceH; replacement: QPaintDeviceH; offset: PQtPoint = nil); cdecl; external Qt4PasLib name 'QPainter_setRedirected'; function QPainter_redirected(device: QPaintDeviceH; offset: PQtPoint = nil): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPainter_redirected'; procedure QPainter_restoreRedirected(device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QPainter_restoreRedirected'; type QPaintEnginePolygonDrawMode = ( // QPaintEngine::PolygonDrawMode (1) QPaintEngineOddEvenMode, QPaintEngineWindingMode, QPaintEngineConvexMode, QPaintEnginePolylineMode ); type QPaintEnginePaintEngineFeature = cardinal; // QPaintEngine::PaintEngineFeature QPaintEnginePaintEngineFeatures = QPaintEnginePaintEngineFeature; //QFlags<> (3) const QPaintEnginePrimitiveTransform = $00000001; QPaintEnginePatternTransform = $00000002; QPaintEnginePixmapTransform = $00000004; QPaintEnginePatternBrush = $00000008; QPaintEngineLinearGradientFill = $00000010; QPaintEngineRadialGradientFill = $00000020; QPaintEngineConicalGradientFill = $00000040; QPaintEngineAlphaBlend = $00000080; QPaintEnginePorterDuff = $00000100; QPaintEnginePainterPaths = $00000200; QPaintEngineAntialiasing = $00000400; QPaintEngineBrushStroke = $00000800; QPaintEngineConstantOpacity = $00001000; QPaintEngineMaskedBrush = $00002000; QPaintEnginePerspectiveTransform = $00004000; QPaintEngineBlendModes = $00008000; QPaintEngineObjectBoundingModeGradients = $00010000; QPaintEngineRasterOpModes = $00020000; QPaintEnginePaintOutsidePaintEvent = $20000000; QPaintEngineAllFeatures = $ffffffff; type QPaintEngineDirtyFlag = cardinal; // QPaintEngine::DirtyFlag QPaintEngineDirtyFlags = QPaintEngineDirtyFlag; //QFlags<> (3) const QPaintEngineDirtyPen = $0001; QPaintEngineDirtyBrush = $0002; QPaintEngineDirtyBrushOrigin = $0004; QPaintEngineDirtyFont = $0008; QPaintEngineDirtyBackground = $0010; QPaintEngineDirtyBackgroundMode = $0020; QPaintEngineDirtyTransform = $0040; QPaintEngineDirtyClipRegion = $0080; QPaintEngineDirtyClipPath = $0100; QPaintEngineDirtyHints = $0200; QPaintEngineDirtyCompositionMode = $0400; QPaintEngineDirtyClipEnabled = $0800; QPaintEngineDirtyOpacity = $1000; QPaintEngineAllDirty = $ffff; type QPaintEngineType = ( //QPaintEngine::Type (2) QPaintEngineX11, QPaintEngineWindows, QPaintEngineQuickDraw, QPaintEngineCoreGraphics, QPaintEngineMacPrinter, QPaintEngineQWindowSystem, QPaintEnginePostScript, QPaintEngineOpenGL, QPaintEnginePicture, QPaintEngineSVG, QPaintEngineRaster, QPaintEngineDirect3D, QPaintEnginePdf, QPaintEngineOpenVG, QPaintEngineUser = 50, QPaintEngineMaxUser = 100 ); function QPaintEngine_isActive(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_isActive'; procedure QPaintEngine_setActive(handle: QPaintEngineH; newState: Boolean); cdecl; external Qt4PasLib name 'QPaintEngine_setActive'; function QPaintEngine_begin(handle: QPaintEngineH; pdev: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_begin'; function QPaintEngine_end(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_end'; procedure QPaintEngine_drawRects(handle: QPaintEngineH; rects: PRect; rectCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawRects'; procedure QPaintEngine_drawRects(handle: QPaintEngineH; rects: QRectFH; rectCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawRects2'; procedure QPaintEngine_drawLines(handle: QPaintEngineH; lines: QLineH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawLines'; procedure QPaintEngine_drawLines(handle: QPaintEngineH; lines: QLineFH; lineCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawLines2'; procedure QPaintEngine_drawEllipse(handle: QPaintEngineH; r: QRectFH); cdecl; external Qt4PasLib name 'QPaintEngine_drawEllipse'; procedure QPaintEngine_drawEllipse(handle: QPaintEngineH; r: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_drawEllipse2'; procedure QPaintEngine_drawPath(handle: QPaintEngineH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPaintEngine_drawPath'; procedure QPaintEngine_drawPoints(handle: QPaintEngineH; points: PQtPointF; pointCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawPoints'; procedure QPaintEngine_drawPoints(handle: QPaintEngineH; points: PQtPoint; pointCount: Integer); cdecl; external Qt4PasLib name 'QPaintEngine_drawPoints2'; procedure QPaintEngine_drawPolygon(handle: QPaintEngineH; points: PQtPointF; pointCount: Integer; mode: QPaintEnginePolygonDrawMode); cdecl; external Qt4PasLib name 'QPaintEngine_drawPolygon'; procedure QPaintEngine_drawPolygon(handle: QPaintEngineH; points: PQtPoint; pointCount: Integer; mode: QPaintEnginePolygonDrawMode); cdecl; external Qt4PasLib name 'QPaintEngine_drawPolygon2'; procedure QPaintEngine_drawPixmap(handle: QPaintEngineH; r: QRectFH; pm: QPixmapH; sr: QRectFH); cdecl; external Qt4PasLib name 'QPaintEngine_drawPixmap'; procedure QPaintEngine_drawTiledPixmap(handle: QPaintEngineH; r: QRectFH; pixmap: QPixmapH; s: PQtPointF); cdecl; external Qt4PasLib name 'QPaintEngine_drawTiledPixmap'; procedure QPaintEngine_drawImage(handle: QPaintEngineH; r: QRectFH; pm: QImageH; sr: QRectFH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPaintEngine_drawImage'; procedure QPaintEngine_setPaintDevice(handle: QPaintEngineH; device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QPaintEngine_setPaintDevice'; function QPaintEngine_paintDevice(handle: QPaintEngineH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QPaintEngine_paintDevice'; procedure QPaintEngine_setSystemClip(handle: QPaintEngineH; baseClip: QRegionH); cdecl; external Qt4PasLib name 'QPaintEngine_setSystemClip'; procedure QPaintEngine_systemClip(handle: QPaintEngineH; retval: QRegionH); cdecl; external Qt4PasLib name 'QPaintEngine_systemClip'; procedure QPaintEngine_setSystemRect(handle: QPaintEngineH; rect: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_setSystemRect'; procedure QPaintEngine_systemRect(handle: QPaintEngineH; retval: PRect); cdecl; external Qt4PasLib name 'QPaintEngine_systemRect'; procedure QPaintEngine_coordinateOffset(handle: QPaintEngineH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QPaintEngine_coordinateOffset'; function QPaintEngine_type(handle: QPaintEngineH): QPaintEngineType; cdecl; external Qt4PasLib name 'QPaintEngine_type'; procedure QPaintEngine_fix_neg_rect(handle: QPaintEngineH; x: PInteger; y: PInteger; w: PInteger; h: PInteger); cdecl; external Qt4PasLib name 'QPaintEngine_fix_neg_rect'; function QPaintEngine_testDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_testDirty'; procedure QPaintEngine_setDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags); cdecl; external Qt4PasLib name 'QPaintEngine_setDirty'; procedure QPaintEngine_clearDirty(handle: QPaintEngineH; df: QPaintEngineDirtyFlags); cdecl; external Qt4PasLib name 'QPaintEngine_clearDirty'; function QPaintEngine_hasFeature(handle: QPaintEngineH; feature: QPaintEnginePaintEngineFeatures): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_hasFeature'; function QPaintEngine_painter(handle: QPaintEngineH): QPainterH; cdecl; external Qt4PasLib name 'QPaintEngine_painter'; procedure QPaintEngine_syncState(handle: QPaintEngineH); cdecl; external Qt4PasLib name 'QPaintEngine_syncState'; function QPaintEngine_isExtended(handle: QPaintEngineH): Boolean; cdecl; external Qt4PasLib name 'QPaintEngine_isExtended'; {$ifdef MSWINDOWS } function QPaintEngine_getDC(handle: QPaintEngineH): QHDC; cdecl; external Qt4PasLib name 'QPaintEngine_getDC'; procedure QPaintEngine_releaseDC(handle: QPaintEngineH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPaintEngine_releaseDC'; {$endif} type QPaintDevicePaintDeviceMetric = ( //QPaintDevice::PaintDeviceMetric (2) QPaintDevicePdmWidth = 1, QPaintDevicePdmHeight, QPaintDevicePdmWidthMM, QPaintDevicePdmHeightMM, QPaintDevicePdmNumColors, QPaintDevicePdmDepth, QPaintDevicePdmDpiX, QPaintDevicePdmDpiY, QPaintDevicePdmPhysicalDpiX, QPaintDevicePdmPhysicalDpiY ); function QPaintDevice_devType(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_devType'; function QPaintDevice_paintingActive(handle: QPaintDeviceH): Boolean; cdecl; external Qt4PasLib name 'QPaintDevice_paintingActive'; function QPaintDevice_paintEngine(handle: QPaintDeviceH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPaintDevice_paintEngine'; function QPaintDevice_width(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_width'; function QPaintDevice_height(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_height'; function QPaintDevice_widthMM(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_widthMM'; function QPaintDevice_heightMM(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_heightMM'; function QPaintDevice_logicalDpiX(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_logicalDpiX'; function QPaintDevice_logicalDpiY(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_logicalDpiY'; function QPaintDevice_physicalDpiX(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_physicalDpiX'; function QPaintDevice_physicalDpiY(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_physicalDpiY'; function QPaintDevice_numColors(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_numColors'; function QPaintDevice_depth(handle: QPaintDeviceH): Integer; cdecl; external Qt4PasLib name 'QPaintDevice_depth'; {$ifdef MSWINDOWS } function QPaintDevice_getDC(handle: QPaintDeviceH): QHDC; cdecl; external Qt4PasLib name 'QPaintDevice_getDC'; procedure QPaintDevice_releaseDC(handle: QPaintDeviceH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPaintDevice_releaseDC'; {$endif} type QRegionRegionType = ( // QRegion::RegionType (1) QRegionRectangle, QRegionEllipse ); function QRegion_create(): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create'; procedure QRegion_destroy(handle: QRegionH); cdecl; external Qt4PasLib name 'QRegion_destroy'; function QRegion_create(x: Integer; y: Integer; w: Integer; h: Integer; t: QRegionRegionType = QRegionRectangle): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create2'; function QRegion_create(r: PRect; t: QRegionRegionType = QRegionRectangle): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create3'; function QRegion_create(pa: QPolygonH; fillRule: QtFillRule = QtOddEvenFill): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create4'; function QRegion_create(region: QRegionH): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create5'; function QRegion_create(bitmap: QBitmapH): QRegionH; cdecl; external Qt4PasLib name 'QRegion_create6'; function QRegion_isEmpty(handle: QRegionH): Boolean; cdecl; external Qt4PasLib name 'QRegion_isEmpty'; function QRegion_contains(handle: QRegionH; p: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QRegion_contains'; function QRegion_contains(handle: QRegionH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRegion_contains2'; procedure QRegion_translate(handle: QRegionH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRegion_translate'; procedure QRegion_translate(handle: QRegionH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRegion_translate2'; procedure QRegion_translated(handle: QRegionH; retval: QRegionH; dx: Integer; dy: Integer); cdecl; external Qt4PasLib name 'QRegion_translated'; procedure QRegion_translated(handle: QRegionH; retval: QRegionH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRegion_translated2'; procedure QRegion_unite(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_unite'; procedure QRegion_unite(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_unite2'; procedure QRegion_intersect(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_intersect'; procedure QRegion_intersect(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_intersect2'; procedure QRegion_subtract(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_subtract'; procedure QRegion_eor(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_eor'; procedure QRegion_united(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_united'; procedure QRegion_united(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_united2'; procedure QRegion_intersected(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_intersected'; procedure QRegion_intersected(handle: QRegionH; retval: QRegionH; r: PRect); cdecl; external Qt4PasLib name 'QRegion_intersected2'; procedure QRegion_subtracted(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_subtracted'; procedure QRegion_xored(handle: QRegionH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QRegion_xored'; function QRegion_intersects(handle: QRegionH; r: QRegionH): Boolean; cdecl; external Qt4PasLib name 'QRegion_intersects'; function QRegion_intersects(handle: QRegionH; r: PRect): Boolean; cdecl; external Qt4PasLib name 'QRegion_intersects2'; procedure QRegion_boundingRect(handle: QRegionH; retval: PRect); cdecl; external Qt4PasLib name 'QRegion_boundingRect'; procedure QRegion_setRects(handle: QRegionH; rect: PRect; num: Integer); cdecl; external Qt4PasLib name 'QRegion_setRects'; function QRegion_numRects(handle: QRegionH): Integer; cdecl; external Qt4PasLib name 'QRegion_numRects'; {$ifdef BINUX } function QRegion_handle(handle: QRegionH): Region; cdecl; external Qt4PasLib name 'QRegion_handle'; {$endif} {$ifdef MSWINDOWS } function QRegion_handle(handle: QRegionH): QHRGN; cdecl; external Qt4PasLib name 'QRegion_handle2'; {$endif} {$ifdef DARWIN } function QRegion_handle(handle: QRegionH): RgnHandle; cdecl; external Qt4PasLib name 'QRegion_handle3'; function QRegion_handle(handle: QRegionH; AnonParam1: Boolean): RgnHandle; cdecl; external Qt4PasLib name 'QRegion_handle4'; function QRegion_toHIMutableShape(handle: QRegionH): Pointer; cdecl; external Qt4PasLib name 'QRegion_toHIMutableShape'; procedure QRegion_fromHIShapeRef(retval: QRegionH; shape: Pointer); cdecl; external Qt4PasLib name 'QRegion_fromHIShapeRef'; {$endif} {$ifdef QTOPIA } function QRegion_handle(handle: QRegionH): Pointer; cdecl; external Qt4PasLib name 'QRegion_handle5'; {$endif} type QPrinterPrinterMode = ( // QPrinter::PrinterMode (1) QPrinterScreenResolution, QPrinterPrinterResolution, QPrinterHighResolution ); QPrinterOrientation = ( // QPrinter::Orientation (1) QPrinterPortrait, QPrinterLandscape ); QPrinterPageOrder = ( // QPrinter::PageOrder (1) QPrinterFirstPageFirst, QPrinterLastPageFirst ); QPrinterColorMode = ( // QPrinter::ColorMode (1) QPrinterGrayScale, QPrinterColor ); QPrinterPaperSource = ( // QPrinter::PaperSource (1) QPrinterOnlyOne, QPrinterLower, QPrinterMiddle, QPrinterManual, QPrinterEnvelope, QPrinterEnvelopeManual, QPrinterAuto, QPrinterTractor, QPrinterSmallFormat, QPrinterLargeFormat, QPrinterLargeCapacity, QPrinterCassette, QPrinterFormSource, QPrinterMaxPageSource ); QPrinterPrinterState = ( // QPrinter::PrinterState (1) QPrinterIdle, QPrinterActive, QPrinterAborted, QPrinterError ); QPrinterOutputFormat = ( // QPrinter::OutputFormat (1) QPrinterNativeFormat, QPrinterPdfFormat, QPrinterPostScriptFormat ); QPrinterPrintRange = ( // QPrinter::PrintRange (1) QPrinterAllPages, QPrinterSelection, QPrinterPageRange ); QPrinterUnit = ( // QPrinter::Unit (1) QPrinterMillimeter, QPrinterPoint, QPrinterInch, QPrinterPica, QPrinterDidot, QPrinterCicero, QPrinterDevicePixel ); QPrinterDuplexMode = ( //QPrinter::DuplexMode (2) QPrinterDuplexNone = 0, QPrinterDuplexAuto, QPrinterDuplexLongSide, QPrinterDuplexShortSide ); type QPrinterPageSize = cardinal; // QPrinter::PageSize (4) const QPrinterA4 = 0 { $0 }; QPrinterB5 = 1 { $1 }; QPrinterLetter = 2 { $2 }; QPrinterLegal = 3 { $3 }; QPrinterExecutive = 4 { $4 }; QPrinterA0 = 5 { $5 }; QPrinterA1 = 6 { $6 }; QPrinterA2 = 7 { $7 }; QPrinterA3 = 8 { $8 }; QPrinterA5 = 9 { $9 }; QPrinterA6 = 10 { $a }; QPrinterA7 = 11 { $b }; QPrinterA8 = 12 { $c }; QPrinterA9 = 13 { $d }; QPrinterB0 = 14 { $e }; QPrinterB1 = 15 { $f }; QPrinterB10 = 16 { $10 }; QPrinterB2 = 17 { $11 }; QPrinterB3 = 18 { $12 }; QPrinterB4 = 19 { $13 }; QPrinterB6 = 20 { $14 }; QPrinterB7 = 21 { $15 }; QPrinterB8 = 22 { $16 }; QPrinterB9 = 23 { $17 }; QPrinterC5E = 24 { $18 }; QPrinterComm10E = 25 { $19 }; QPrinterDLE = 26 { $1a }; QPrinterFolio = 27 { $1b }; QPrinterLedger = 28 { $1c }; QPrinterTabloid = 29 { $1d }; QPrinterCustom = 30 { $1e }; QPrinterNPageSize = 30 { $1e }; QPrinterNPaperSize = 30 { $1e }; function QPrinter_create(mode: QPrinterPrinterMode = QPrinterScreenResolution): QPrinterH; cdecl; external Qt4PasLib name 'QPrinter_create'; procedure QPrinter_destroy(handle: QPrinterH); cdecl; external Qt4PasLib name 'QPrinter_destroy'; function QPrinter_create(printer: QPrinterInfoH; mode: QPrinterPrinterMode = QPrinterScreenResolution): QPrinterH; cdecl; external Qt4PasLib name 'QPrinter_create2'; function QPrinter_devType(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_devType'; procedure QPrinter_setOutputFormat(handle: QPrinterH; format: QPrinterOutputFormat); cdecl; external Qt4PasLib name 'QPrinter_setOutputFormat'; function QPrinter_outputFormat(handle: QPrinterH): QPrinterOutputFormat; cdecl; external Qt4PasLib name 'QPrinter_outputFormat'; procedure QPrinter_setPrinterName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrinterName'; procedure QPrinter_printerName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printerName'; function QPrinter_isValid(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_isValid'; procedure QPrinter_setOutputFileName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setOutputFileName'; procedure QPrinter_outputFileName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_outputFileName'; procedure QPrinter_setPrintProgram(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrintProgram'; procedure QPrinter_printProgram(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printProgram'; procedure QPrinter_setDocName(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setDocName'; procedure QPrinter_docName(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_docName'; procedure QPrinter_setCreator(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setCreator'; procedure QPrinter_creator(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_creator'; procedure QPrinter_setOrientation(handle: QPrinterH; AnonParam1: QPrinterOrientation); cdecl; external Qt4PasLib name 'QPrinter_setOrientation'; function QPrinter_orientation(handle: QPrinterH): QPrinterOrientation; cdecl; external Qt4PasLib name 'QPrinter_orientation'; procedure QPrinter_setPageSize(handle: QPrinterH; AnonParam1: QPrinterPageSize); cdecl; external Qt4PasLib name 'QPrinter_setPageSize'; function QPrinter_pageSize(handle: QPrinterH): QPrinterPageSize; cdecl; external Qt4PasLib name 'QPrinter_pageSize'; procedure QPrinter_setPaperSize(handle: QPrinterH; AnonParam1: QPrinterPageSize); cdecl; external Qt4PasLib name 'QPrinter_setPaperSize'; function QPrinter_paperSize(handle: QPrinterH): QPrinterPageSize; cdecl; external Qt4PasLib name 'QPrinter_paperSize'; procedure QPrinter_setPaperSize(handle: QPrinterH; paperSize: QSizeFH; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_setPaperSize2'; procedure QPrinter_paperSize(handle: QPrinterH; retval: QSizeFH; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_paperSize2'; procedure QPrinter_setPageOrder(handle: QPrinterH; AnonParam1: QPrinterPageOrder); cdecl; external Qt4PasLib name 'QPrinter_setPageOrder'; function QPrinter_pageOrder(handle: QPrinterH): QPrinterPageOrder; cdecl; external Qt4PasLib name 'QPrinter_pageOrder'; procedure QPrinter_setResolution(handle: QPrinterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QPrinter_setResolution'; function QPrinter_resolution(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_resolution'; procedure QPrinter_setColorMode(handle: QPrinterH; AnonParam1: QPrinterColorMode); cdecl; external Qt4PasLib name 'QPrinter_setColorMode'; function QPrinter_colorMode(handle: QPrinterH): QPrinterColorMode; cdecl; external Qt4PasLib name 'QPrinter_colorMode'; procedure QPrinter_setCollateCopies(handle: QPrinterH; collate: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setCollateCopies'; function QPrinter_collateCopies(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_collateCopies'; procedure QPrinter_setFullPage(handle: QPrinterH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setFullPage'; function QPrinter_fullPage(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_fullPage'; procedure QPrinter_setNumCopies(handle: QPrinterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QPrinter_setNumCopies'; function QPrinter_numCopies(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_numCopies'; procedure QPrinter_setPaperSource(handle: QPrinterH; AnonParam1: QPrinterPaperSource); cdecl; external Qt4PasLib name 'QPrinter_setPaperSource'; function QPrinter_paperSource(handle: QPrinterH): QPrinterPaperSource; cdecl; external Qt4PasLib name 'QPrinter_paperSource'; procedure QPrinter_setDuplex(handle: QPrinterH; duplex: QPrinterDuplexMode); cdecl; external Qt4PasLib name 'QPrinter_setDuplex'; function QPrinter_duplex(handle: QPrinterH): QPrinterDuplexMode; cdecl; external Qt4PasLib name 'QPrinter_duplex'; procedure QPrinter_supportedResolutions(handle: QPrinterH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinter_supportedResolutions'; procedure QPrinter_setFontEmbeddingEnabled(handle: QPrinterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setFontEmbeddingEnabled'; function QPrinter_fontEmbeddingEnabled(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_fontEmbeddingEnabled'; procedure QPrinter_setDoubleSidedPrinting(handle: QPrinterH; enable: Boolean); cdecl; external Qt4PasLib name 'QPrinter_setDoubleSidedPrinting'; function QPrinter_doubleSidedPrinting(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_doubleSidedPrinting'; procedure QPrinter_paperRect(handle: QPrinterH; retval: PRect); cdecl; external Qt4PasLib name 'QPrinter_paperRect'; procedure QPrinter_pageRect(handle: QPrinterH; retval: PRect); cdecl; external Qt4PasLib name 'QPrinter_pageRect'; procedure QPrinter_paperRect(handle: QPrinterH; retval: QRectFH; AnonParam1: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_paperRect2'; procedure QPrinter_pageRect(handle: QPrinterH; retval: QRectFH; AnonParam1: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_pageRect2'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QPrinter_printerSelectionOption(handle: QPrinterH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinter_printerSelectionOption'; procedure QPrinter_setPrinterSelectionOption(handle: QPrinterH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QPrinter_setPrinterSelectionOption'; {$endif} function QPrinter_newPage(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_newPage'; function QPrinter_abort(handle: QPrinterH): Boolean; cdecl; external Qt4PasLib name 'QPrinter_abort'; function QPrinter_printerState(handle: QPrinterH): QPrinterPrinterState; cdecl; external Qt4PasLib name 'QPrinter_printerState'; function QPrinter_paintEngine(handle: QPrinterH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPrinter_paintEngine'; function QPrinter_printEngine(handle: QPrinterH): QPrintEngineH; cdecl; external Qt4PasLib name 'QPrinter_printEngine'; procedure QPrinter_setFromTo(handle: QPrinterH; fromPage: Integer; toPage: Integer); cdecl; external Qt4PasLib name 'QPrinter_setFromTo'; function QPrinter_fromPage(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_fromPage'; function QPrinter_toPage(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_toPage'; procedure QPrinter_setPrintRange(handle: QPrinterH; range: QPrinterPrintRange); cdecl; external Qt4PasLib name 'QPrinter_setPrintRange'; function QPrinter_printRange(handle: QPrinterH): QPrinterPrintRange; cdecl; external Qt4PasLib name 'QPrinter_printRange'; procedure QPrinter_setPageMargins(handle: QPrinterH; left: qreal; top: qreal; right: qreal; bottom: qreal; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_setPageMargins'; procedure QPrinter_getPageMargins(handle: QPrinterH; left: PQReal; top: PQReal; right: PQReal; bottom: PQReal; _unit: QPrinterUnit); cdecl; external Qt4PasLib name 'QPrinter_getPageMargins'; {$ifdef MSWINDOWS } procedure QPrinter_setWinPageSize(handle: QPrinterH; winPageSize: Integer); cdecl; external Qt4PasLib name 'QPrinter_setWinPageSize'; function QPrinter_winPageSize(handle: QPrinterH): Integer; cdecl; external Qt4PasLib name 'QPrinter_winPageSize'; function QPrinter_getDC(handle: QPrinterH): QHDC; cdecl; external Qt4PasLib name 'QPrinter_getDC'; procedure QPrinter_releaseDC(handle: QPrinterH; hdc: QHDC); cdecl; external Qt4PasLib name 'QPrinter_releaseDC'; {$endif} type QPainterPathElementType = ( // QPainterPath::ElementType (1) QPainterPathMoveToElement, QPainterPathLineToElement, QPainterPathCurveToElement, QPainterPathCurveToDataElement ); function QPainterPath_create(): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create'; procedure QPainterPath_destroy(handle: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_destroy'; function QPainterPath_create(startPoint: PQtPointF): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create2'; function QPainterPath_create(other: QPainterPathH): QPainterPathH; cdecl; external Qt4PasLib name 'QPainterPath_create3'; procedure QPainterPath_closeSubpath(handle: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_closeSubpath'; procedure QPainterPath_moveTo(handle: QPainterPathH; p: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_moveTo'; procedure QPainterPath_moveTo(handle: QPainterPathH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_moveTo2'; procedure QPainterPath_lineTo(handle: QPainterPathH; p: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_lineTo'; procedure QPainterPath_lineTo(handle: QPainterPathH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_lineTo2'; procedure QPainterPath_arcMoveTo(handle: QPainterPathH; rect: QRectFH; angle: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcMoveTo'; procedure QPainterPath_arcMoveTo(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; angle: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcMoveTo2'; procedure QPainterPath_arcTo(handle: QPainterPathH; rect: QRectFH; startAngle: qreal; arcLength: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcTo'; procedure QPainterPath_arcTo(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; startAngle: qreal; arcLength: qreal); cdecl; external Qt4PasLib name 'QPainterPath_arcTo2'; procedure QPainterPath_cubicTo(handle: QPainterPathH; ctrlPt1: PQtPointF; ctrlPt2: PQtPointF; endPt: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_cubicTo'; procedure QPainterPath_cubicTo(handle: QPainterPathH; ctrlPt1x: qreal; ctrlPt1y: qreal; ctrlPt2x: qreal; ctrlPt2y: qreal; endPtx: qreal; endPty: qreal); cdecl; external Qt4PasLib name 'QPainterPath_cubicTo2'; procedure QPainterPath_quadTo(handle: QPainterPathH; ctrlPt: PQtPointF; endPt: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_quadTo'; procedure QPainterPath_quadTo(handle: QPainterPathH; ctrlPtx: qreal; ctrlPty: qreal; endPtx: qreal; endPty: qreal); cdecl; external Qt4PasLib name 'QPainterPath_quadTo2'; procedure QPainterPath_currentPosition(handle: QPainterPathH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QPainterPath_currentPosition'; procedure QPainterPath_addRect(handle: QPainterPathH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_addRect'; procedure QPainterPath_addRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addRect2'; procedure QPainterPath_addEllipse(handle: QPainterPathH; rect: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse'; procedure QPainterPath_addEllipse(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse2'; procedure QPainterPath_addEllipse(handle: QPainterPathH; center: PQtPointF; rx: qreal; ry: qreal); cdecl; external Qt4PasLib name 'QPainterPath_addEllipse3'; procedure QPainterPath_addPolygon(handle: QPainterPathH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QPainterPath_addPolygon'; procedure QPainterPath_addText(handle: QPainterPathH; point: PQtPointF; f: QFontH; text: PWideString); cdecl; external Qt4PasLib name 'QPainterPath_addText'; procedure QPainterPath_addText(handle: QPainterPathH; x: qreal; y: qreal; f: QFontH; text: PWideString); cdecl; external Qt4PasLib name 'QPainterPath_addText2'; procedure QPainterPath_addPath(handle: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_addPath'; procedure QPainterPath_addRegion(handle: QPainterPathH; region: QRegionH); cdecl; external Qt4PasLib name 'QPainterPath_addRegion'; procedure QPainterPath_addRoundedRect(handle: QPainterPathH; rect: QRectFH; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainterPath_addRoundedRect'; procedure QPainterPath_addRoundedRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; xRadius: qreal; yRadius: qreal; mode: QtSizeMode = QtAbsoluteSize); cdecl; external Qt4PasLib name 'QPainterPath_addRoundedRect2'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; rect: QRectFH; xRnd: Integer; yRnd: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; xRnd: Integer; yRnd: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect2'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; rect: QRectFH; roundness: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect3'; procedure QPainterPath_addRoundRect(handle: QPainterPathH; x: qreal; y: qreal; w: qreal; h: qreal; roundness: Integer); cdecl; external Qt4PasLib name 'QPainterPath_addRoundRect4'; procedure QPainterPath_connectPath(handle: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_connectPath'; function QPainterPath_contains(handle: QPainterPathH; pt: PQtPointF): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains'; function QPainterPath_contains(handle: QPainterPathH; rect: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains2'; function QPainterPath_intersects(handle: QPainterPathH; rect: QRectFH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_intersects'; procedure QPainterPath_boundingRect(handle: QPainterPathH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_boundingRect'; procedure QPainterPath_controlPointRect(handle: QPainterPathH; retval: QRectFH); cdecl; external Qt4PasLib name 'QPainterPath_controlPointRect'; function QPainterPath_fillRule(handle: QPainterPathH): QtFillRule; cdecl; external Qt4PasLib name 'QPainterPath_fillRule'; procedure QPainterPath_setFillRule(handle: QPainterPathH; fillRule: QtFillRule); cdecl; external Qt4PasLib name 'QPainterPath_setFillRule'; function QPainterPath_isEmpty(handle: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_isEmpty'; procedure QPainterPath_toReversed(handle: QPainterPathH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_toReversed'; procedure QPainterPath_toFillPolygon(handle: QPainterPathH; retval: QPolygonFH; matrix: QMatrixH = nil); cdecl; external Qt4PasLib name 'QPainterPath_toFillPolygon'; procedure QPainterPath_toFillPolygon(handle: QPainterPathH; retval: QPolygonFH; matrix: QTransformH); cdecl; external Qt4PasLib name 'QPainterPath_toFillPolygon2'; function QPainterPath_elementCount(handle: QPainterPathH): Integer; cdecl; external Qt4PasLib name 'QPainterPath_elementCount'; function QPainterPath_elementAt(handle: QPainterPathH; i: Integer): QPainterPathElementH; cdecl; external Qt4PasLib name 'QPainterPath_elementAt'; procedure QPainterPath_setElementPositionAt(handle: QPainterPathH; i: Integer; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QPainterPath_setElementPositionAt'; function QPainterPath_length(handle: QPainterPathH): qreal; cdecl; external Qt4PasLib name 'QPainterPath_length'; function QPainterPath_percentAtLength(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_percentAtLength'; procedure QPainterPath_pointAtPercent(handle: QPainterPathH; retval: PQtPointF; t: qreal); cdecl; external Qt4PasLib name 'QPainterPath_pointAtPercent'; function QPainterPath_angleAtPercent(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_angleAtPercent'; function QPainterPath_slopeAtPercent(handle: QPainterPathH; t: qreal): qreal; cdecl; external Qt4PasLib name 'QPainterPath_slopeAtPercent'; function QPainterPath_intersects(handle: QPainterPathH; p: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_intersects2'; function QPainterPath_contains(handle: QPainterPathH; p: QPainterPathH): Boolean; cdecl; external Qt4PasLib name 'QPainterPath_contains3'; procedure QPainterPath_united(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_united'; procedure QPainterPath_intersected(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_intersected'; procedure QPainterPath_subtracted(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_subtracted'; procedure QPainterPath_subtractedInverted(handle: QPainterPathH; retval: QPainterPathH; r: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_subtractedInverted'; procedure QPainterPath_simplified(handle: QPainterPathH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPath_simplified'; function QPainterPathStroker_create(): QPainterPathStrokerH; cdecl; external Qt4PasLib name 'QPainterPathStroker_create'; procedure QPainterPathStroker_destroy(handle: QPainterPathStrokerH); cdecl; external Qt4PasLib name 'QPainterPathStroker_destroy'; procedure QPainterPathStroker_setWidth(handle: QPainterPathStrokerH; width: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setWidth'; function QPainterPathStroker_width(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_width'; procedure QPainterPathStroker_setCapStyle(handle: QPainterPathStrokerH; style: QtPenCapStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setCapStyle'; function QPainterPathStroker_capStyle(handle: QPainterPathStrokerH): QtPenCapStyle; cdecl; external Qt4PasLib name 'QPainterPathStroker_capStyle'; procedure QPainterPathStroker_setJoinStyle(handle: QPainterPathStrokerH; style: QtPenJoinStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setJoinStyle'; function QPainterPathStroker_joinStyle(handle: QPainterPathStrokerH): QtPenJoinStyle; cdecl; external Qt4PasLib name 'QPainterPathStroker_joinStyle'; procedure QPainterPathStroker_setMiterLimit(handle: QPainterPathStrokerH; length: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setMiterLimit'; function QPainterPathStroker_miterLimit(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_miterLimit'; procedure QPainterPathStroker_setCurveThreshold(handle: QPainterPathStrokerH; threshold: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setCurveThreshold'; function QPainterPathStroker_curveThreshold(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_curveThreshold'; procedure QPainterPathStroker_setDashPattern(handle: QPainterPathStrokerH; AnonParam1: QtPenStyle); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashPattern'; procedure QPainterPathStroker_setDashPattern(handle: QPainterPathStrokerH; dashPattern: PQRealArray); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashPattern2'; procedure QPainterPathStroker_dashPattern(handle: QPainterPathStrokerH; retval: PQRealArray); cdecl; external Qt4PasLib name 'QPainterPathStroker_dashPattern'; procedure QPainterPathStroker_setDashOffset(handle: QPainterPathStrokerH; offset: qreal); cdecl; external Qt4PasLib name 'QPainterPathStroker_setDashOffset'; function QPainterPathStroker_dashOffset(handle: QPainterPathStrokerH): qreal; cdecl; external Qt4PasLib name 'QPainterPathStroker_dashOffset'; procedure QPainterPathStroker_createStroke(handle: QPainterPathStrokerH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QPainterPathStroker_createStroke'; type QTransformTransformationType = ( //QTransform::TransformationType (2) QTransformTxNone = $00, QTransformTxTranslate = $01, QTransformTxScale = $02, QTransformTxRotate = $04, QTransformTxShear = $08, QTransformTxProject = $10 ); function QTransform_create(): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create'; procedure QTransform_destroy(handle: QTransformH); cdecl; external Qt4PasLib name 'QTransform_destroy'; function QTransform_create(h11: qreal; h12: qreal; h13: qreal; h21: qreal; h22: qreal; h23: qreal; h31: qreal; h32: qreal; h33: qreal = 1.0): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create2'; function QTransform_create(h11: qreal; h12: qreal; h21: qreal; h22: qreal; dx: qreal; dy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create3'; function QTransform_create(mtx: QMatrixH): QTransformH; cdecl; external Qt4PasLib name 'QTransform_create4'; function QTransform_isAffine(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isAffine'; function QTransform_isIdentity(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isIdentity'; function QTransform_isInvertible(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isInvertible'; function QTransform_isScaling(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isScaling'; function QTransform_isRotating(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isRotating'; function QTransform_isTranslating(handle: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_isTranslating'; function QTransform_type(handle: QTransformH): QTransformTransformationType; cdecl; external Qt4PasLib name 'QTransform_type'; function QTransform_determinant(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_determinant'; function QTransform_det(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_det'; function QTransform_m11(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m11'; function QTransform_m12(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m12'; function QTransform_m13(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m13'; function QTransform_m21(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m21'; function QTransform_m22(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m22'; function QTransform_m23(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m23'; function QTransform_m31(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m31'; function QTransform_m32(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m32'; function QTransform_m33(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_m33'; function QTransform_dx(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_dx'; function QTransform_dy(handle: QTransformH): qreal; cdecl; external Qt4PasLib name 'QTransform_dy'; procedure QTransform_setMatrix(handle: QTransformH; m11: qreal; m12: qreal; m13: qreal; m21: qreal; m22: qreal; m23: qreal; m31: qreal; m32: qreal; m33: qreal); cdecl; external Qt4PasLib name 'QTransform_setMatrix'; procedure QTransform_inverted(handle: QTransformH; retval: QTransformH; invertible: PBoolean = nil); cdecl; external Qt4PasLib name 'QTransform_inverted'; procedure QTransform_adjoint(handle: QTransformH; retval: QTransformH); cdecl; external Qt4PasLib name 'QTransform_adjoint'; procedure QTransform_transposed(handle: QTransformH; retval: QTransformH); cdecl; external Qt4PasLib name 'QTransform_transposed'; function QTransform_translate(handle: QTransformH; dx: qreal; dy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_translate'; function QTransform_scale(handle: QTransformH; sx: qreal; sy: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_scale'; function QTransform_shear(handle: QTransformH; sh: qreal; sv: qreal): QTransformH; cdecl; external Qt4PasLib name 'QTransform_shear'; function QTransform_rotate(handle: QTransformH; a: qreal; axis: QtAxis = QtZAxis): QTransformH; cdecl; external Qt4PasLib name 'QTransform_rotate'; function QTransform_rotateRadians(handle: QTransformH; a: qreal; axis: QtAxis = QtZAxis): QTransformH; cdecl; external Qt4PasLib name 'QTransform_rotateRadians'; function QTransform_squareToQuad(square: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_squareToQuad'; function QTransform_quadToSquare(quad: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_quadToSquare'; function QTransform_quadToQuad(one: QPolygonFH; two: QPolygonFH; result: QTransformH): Boolean; cdecl; external Qt4PasLib name 'QTransform_quadToQuad'; procedure QTransform_reset(handle: QTransformH); cdecl; external Qt4PasLib name 'QTransform_reset'; procedure QTransform_map(handle: QTransformH; retval: PQtPoint; p: PQtPoint); cdecl; external Qt4PasLib name 'QTransform_map'; procedure QTransform_map(handle: QTransformH; retval: PQtPointF; p: PQtPointF); cdecl; external Qt4PasLib name 'QTransform_map2'; procedure QTransform_map(handle: QTransformH; retval: QLineH; l: QLineH); cdecl; external Qt4PasLib name 'QTransform_map3'; procedure QTransform_map(handle: QTransformH; retval: QLineFH; l: QLineFH); cdecl; external Qt4PasLib name 'QTransform_map4'; procedure QTransform_map(handle: QTransformH; retval: QPolygonFH; a: QPolygonFH); cdecl; external Qt4PasLib name 'QTransform_map5'; procedure QTransform_map(handle: QTransformH; retval: QPolygonH; a: QPolygonH); cdecl; external Qt4PasLib name 'QTransform_map6'; procedure QTransform_map(handle: QTransformH; retval: QRegionH; r: QRegionH); cdecl; external Qt4PasLib name 'QTransform_map7'; procedure QTransform_map(handle: QTransformH; retval: QPainterPathH; p: QPainterPathH); cdecl; external Qt4PasLib name 'QTransform_map8'; procedure QTransform_mapToPolygon(handle: QTransformH; retval: QPolygonH; r: PRect); cdecl; external Qt4PasLib name 'QTransform_mapToPolygon'; procedure QTransform_mapRect(handle: QTransformH; retval: PRect; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QTransform_mapRect'; procedure QTransform_mapRect(handle: QTransformH; retval: QRectFH; AnonParam1: QRectFH); cdecl; external Qt4PasLib name 'QTransform_mapRect2'; procedure QTransform_map(handle: QTransformH; x: Integer; y: Integer; tx: PInteger; ty: PInteger); cdecl; external Qt4PasLib name 'QTransform_map9'; procedure QTransform_map(handle: QTransformH; x: qreal; y: qreal; tx: PQReal; ty: PQReal); cdecl; external Qt4PasLib name 'QTransform_map10'; function QTransform_toAffine(handle: QTransformH): QMatrixH; cdecl; external Qt4PasLib name 'QTransform_toAffine'; procedure QTransform_fromTranslate(retval: QTransformH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QTransform_fromTranslate'; procedure QTransform_fromScale(retval: QTransformH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QTransform_fromScale'; function QPrinterInfo_create(): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create'; procedure QPrinterInfo_destroy(handle: QPrinterInfoH); cdecl; external Qt4PasLib name 'QPrinterInfo_destroy'; function QPrinterInfo_create(src: QPrinterInfoH): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create2'; function QPrinterInfo_create(printer: QPrinterH): QPrinterInfoH; cdecl; external Qt4PasLib name 'QPrinterInfo_create3'; procedure QPrinterInfo_printerName(handle: QPrinterInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QPrinterInfo_printerName'; function QPrinterInfo_isNull(handle: QPrinterInfoH): Boolean; cdecl; external Qt4PasLib name 'QPrinterInfo_isNull'; function QPrinterInfo_isDefault(handle: QPrinterInfoH): Boolean; cdecl; external Qt4PasLib name 'QPrinterInfo_isDefault'; procedure QPrinterInfo_supportedPaperSizes(handle: QPrinterInfoH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinterInfo_supportedPaperSizes'; procedure QPrinterInfo_availablePrinters(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QPrinterInfo_availablePrinters'; procedure QPrinterInfo_defaultPrinter(retval: QPrinterInfoH); cdecl; external Qt4PasLib name 'QPrinterInfo_defaultPrinter'; type QFontStyle = ( // QFont::Style (1) QFontStyleNormal, QFontStyleItalic, QFontStyleOblique ); QFontCapitalization = ( // QFont::Capitalization (1) QFontMixedCase, QFontAllUppercase, QFontAllLowercase, QFontSmallCaps, QFontCapitalize ); QFontSpacingType = ( // QFont::SpacingType (1) QFontPercentageSpacing, QFontAbsoluteSpacing ); QFontStyleStrategy = ( //QFont::StyleStrategy (2) QFontPreferDefault = $0001, QFontPreferBitmap = $0002, QFontPreferDevice = $0004, QFontPreferOutline = $0008, QFontForceOutline = $0010, QFontPreferMatch = $0020, QFontPreferQuality = $0040, QFontPreferAntialias = $0080, QFontNoAntialias = $0100, QFontOpenGLCompatible = $0200, QFontNoFontMerging = $8000 ); QFontWeight = ( //QFont::Weight (2) QFontLight = 25, QFontNormal = 50, QFontDemiBold = 63, QFontBold = 75, QFontBlack = 87 ); QFontStretch = ( //QFont::Stretch (2) QFontUltraCondensed = 50, QFontExtraCondensed = 62, QFontCondensed = 75, QFontSemiCondensed = 87, QFontUnstretched = 100, QFontSemiExpanded = 112, QFontExpanded = 125, QFontExtraExpanded = 150, QFontUltraExpanded = 200 ); QFontResolveProperties = ( //QFont::ResolveProperties (2) QFontFamilyResolved = $0001, QFontSizeResolved = $0002, QFontStyleHintResolved = $0004, QFontStyleStrategyResolved = $0008, QFontWeightResolved = $0010, QFontStyleResolved = $0020, QFontUnderlineResolved = $0040, QFontOverlineResolved = $0080, QFontStrikeOutResolved = $0100, QFontFixedPitchResolved = $0200, QFontStretchResolved = $0400, QFontKerningResolved = $0800, QFontCapitalizationResolved = $1000, QFontLetterSpacingResolved = $2000, QFontWordSpacingResolved = $4000, QFontAllPropertiesResolved = $7fff ); type QFontStyleHint = cardinal; // QFont::StyleHint (4) const QFontHelvetica = 0 { $0 }; QFontSansSerif = 0 { $0 }; QFontTimes = 1 { $1 }; QFontSerif = 1 { $1 }; QFontCourier = 2 { $2 }; QFontTypeWriter = 2 { $2 }; QFontOldEnglish = 3 { $3 }; QFontDecorative = 3 { $3 }; QFontSystem = 4 { $4 }; QFontAnyStyle = 5 { $5 }; function QFont_create(): QFontH; cdecl; external Qt4PasLib name 'QFont_create'; procedure QFont_destroy(handle: QFontH); cdecl; external Qt4PasLib name 'QFont_destroy'; function QFont_create(family: PWideString; pointSize: Integer = -1; weight: Integer = -1; italic: Boolean = False): QFontH; cdecl; external Qt4PasLib name 'QFont_create2'; function QFont_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontH; cdecl; external Qt4PasLib name 'QFont_create3'; function QFont_create(AnonParam1: QFontH): QFontH; cdecl; external Qt4PasLib name 'QFont_create4'; procedure QFont_family(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_family'; procedure QFont_setFamily(handle: QFontH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_setFamily'; function QFont_pointSize(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_pointSize'; procedure QFont_setPointSize(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setPointSize'; function QFont_pointSizeF(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_pointSizeF'; procedure QFont_setPointSizeF(handle: QFontH; AnonParam1: qreal); cdecl; external Qt4PasLib name 'QFont_setPointSizeF'; function QFont_pixelSize(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_pixelSize'; procedure QFont_setPixelSize(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setPixelSize'; function QFont_weight(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_weight'; procedure QFont_setWeight(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setWeight'; function QFont_bold(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_bold'; procedure QFont_setBold(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setBold'; procedure QFont_setStyle(handle: QFontH; style: QFontStyle); cdecl; external Qt4PasLib name 'QFont_setStyle'; function QFont_style(handle: QFontH): QFontStyle; cdecl; external Qt4PasLib name 'QFont_style'; function QFont_italic(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_italic'; procedure QFont_setItalic(handle: QFontH; b: Boolean); cdecl; external Qt4PasLib name 'QFont_setItalic'; function QFont_underline(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_underline'; procedure QFont_setUnderline(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setUnderline'; function QFont_overline(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_overline'; procedure QFont_setOverline(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setOverline'; function QFont_strikeOut(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_strikeOut'; procedure QFont_setStrikeOut(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setStrikeOut'; function QFont_fixedPitch(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_fixedPitch'; procedure QFont_setFixedPitch(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setFixedPitch'; function QFont_kerning(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_kerning'; procedure QFont_setKerning(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setKerning'; function QFont_styleHint(handle: QFontH): QFontStyleHint; cdecl; external Qt4PasLib name 'QFont_styleHint'; function QFont_styleStrategy(handle: QFontH): QFontStyleStrategy; cdecl; external Qt4PasLib name 'QFont_styleStrategy'; procedure QFont_setStyleHint(handle: QFontH; AnonParam1: QFontStyleHint; AnonParam2: QFontStyleStrategy = QFontPreferDefault); cdecl; external Qt4PasLib name 'QFont_setStyleHint'; procedure QFont_setStyleStrategy(handle: QFontH; s: QFontStyleStrategy); cdecl; external Qt4PasLib name 'QFont_setStyleStrategy'; function QFont_stretch(handle: QFontH): Integer; cdecl; external Qt4PasLib name 'QFont_stretch'; procedure QFont_setStretch(handle: QFontH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFont_setStretch'; function QFont_letterSpacing(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_letterSpacing'; function QFont_letterSpacingType(handle: QFontH): QFontSpacingType; cdecl; external Qt4PasLib name 'QFont_letterSpacingType'; procedure QFont_setLetterSpacing(handle: QFontH; _type: QFontSpacingType; spacing: qreal); cdecl; external Qt4PasLib name 'QFont_setLetterSpacing'; function QFont_wordSpacing(handle: QFontH): qreal; cdecl; external Qt4PasLib name 'QFont_wordSpacing'; procedure QFont_setWordSpacing(handle: QFontH; spacing: qreal); cdecl; external Qt4PasLib name 'QFont_setWordSpacing'; procedure QFont_setCapitalization(handle: QFontH; AnonParam1: QFontCapitalization); cdecl; external Qt4PasLib name 'QFont_setCapitalization'; function QFont_capitalization(handle: QFontH): QFontCapitalization; cdecl; external Qt4PasLib name 'QFont_capitalization'; function QFont_rawMode(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_rawMode'; procedure QFont_setRawMode(handle: QFontH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QFont_setRawMode'; function QFont_exactMatch(handle: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_exactMatch'; function QFont_isCopyOf(handle: QFontH; AnonParam1: QFontH): Boolean; cdecl; external Qt4PasLib name 'QFont_isCopyOf'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} function QFont_handle(handle: QFontH): QtHANDLE; cdecl; external Qt4PasLib name 'QFont_handle'; {$endif} procedure QFont_setRawName(handle: QFontH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_setRawName'; procedure QFont_rawName(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_rawName'; procedure QFont_key(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_key'; procedure QFont_toString(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_toString'; function QFont_fromString(handle: QFontH; AnonParam1: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFont_fromString'; procedure QFont_substitute(retval: PWideString; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_substitute'; procedure QFont_substitutes(retval: QStringListH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_substitutes'; procedure QFont_substitutions(retval: QStringListH); cdecl; external Qt4PasLib name 'QFont_substitutions'; procedure QFont_insertSubstitution(AnonParam1: PWideString; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QFont_insertSubstitution'; procedure QFont_insertSubstitutions(AnonParam1: PWideString; AnonParam2: QStringListH); cdecl; external Qt4PasLib name 'QFont_insertSubstitutions'; procedure QFont_removeSubstitution(AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QFont_removeSubstitution'; procedure QFont_initialize(); cdecl; external Qt4PasLib name 'QFont_initialize'; procedure QFont_cleanup(); cdecl; external Qt4PasLib name 'QFont_cleanup'; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QFont_cacheStatistics(); cdecl; external Qt4PasLib name 'QFont_cacheStatistics'; {$endif} procedure QFont_defaultFamily(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_defaultFamily'; procedure QFont_lastResortFamily(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_lastResortFamily'; procedure QFont_lastResortFont(handle: QFontH; retval: PWideString); cdecl; external Qt4PasLib name 'QFont_lastResortFont'; procedure QFont_resolve(handle: QFontH; retval: QFontH; AnonParam1: QFontH); cdecl; external Qt4PasLib name 'QFont_resolve'; function QFont_resolve(handle: QFontH): LongWord; cdecl; external Qt4PasLib name 'QFont_resolve2'; procedure QFont_resolve(handle: QFontH; mask: LongWord); cdecl; external Qt4PasLib name 'QFont_resolve3'; {$ifdef MSWINDOWS } function QFont_handle(handle: QFontH): QHFONT; cdecl; external Qt4PasLib name 'QFont_handle2'; {$endif} {$ifdef DARWIN } function QFont_macFontID(handle: QFontH): LongWord; cdecl; external Qt4PasLib name 'QFont_macFontID'; {$endif} type QFontDatabaseWritingSystem = cardinal; // QFontDatabase::WritingSystem (4) const QFontDatabaseAny = 0 { $0 }; QFontDatabaseLatin = 1 { $1 }; QFontDatabaseGreek = 2 { $2 }; QFontDatabaseCyrillic = 3 { $3 }; QFontDatabaseArmenian = 4 { $4 }; QFontDatabaseHebrew = 5 { $5 }; QFontDatabaseArabic = 6 { $6 }; QFontDatabaseSyriac = 7 { $7 }; QFontDatabaseThaana = 8 { $8 }; QFontDatabaseDevanagari = 9 { $9 }; QFontDatabaseBengali = 10 { $a }; QFontDatabaseGurmukhi = 11 { $b }; QFontDatabaseGujarati = 12 { $c }; QFontDatabaseOriya = 13 { $d }; QFontDatabaseTamil = 14 { $e }; QFontDatabaseTelugu = 15 { $f }; QFontDatabaseKannada = 16 { $10 }; QFontDatabaseMalayalam = 17 { $11 }; QFontDatabaseSinhala = 18 { $12 }; QFontDatabaseThai = 19 { $13 }; QFontDatabaseLao = 20 { $14 }; QFontDatabaseTibetan = 21 { $15 }; QFontDatabaseMyanmar = 22 { $16 }; QFontDatabaseGeorgian = 23 { $17 }; QFontDatabaseKhmer = 24 { $18 }; QFontDatabaseSimplifiedChinese = 25 { $19 }; QFontDatabaseTraditionalChinese = 26 { $1a }; QFontDatabaseJapanese = 27 { $1b }; QFontDatabaseKorean = 28 { $1c }; QFontDatabaseVietnamese = 29 { $1d }; QFontDatabaseSymbol = 30 { $1e }; QFontDatabaseOther = 30 { $1e }; QFontDatabaseOgham = 31 { $1f }; QFontDatabaseRunic = 32 { $20 }; QFontDatabaseWritingSystemsCount = 33 { $21 }; procedure QFontDatabase_standardSizes(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QFontDatabase_standardSizes'; function QFontDatabase_create(): QFontDatabaseH; cdecl; external Qt4PasLib name 'QFontDatabase_create'; procedure QFontDatabase_destroy(handle: QFontDatabaseH); cdecl; external Qt4PasLib name 'QFontDatabase_destroy'; procedure QFontDatabase_writingSystems(handle: QFontDatabaseH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystems'; procedure QFontDatabase_writingSystems(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystems2'; procedure QFontDatabase_families(handle: QFontDatabaseH; retval: QStringListH; writingSystem: QFontDatabaseWritingSystem = QFontDatabaseAny); cdecl; external Qt4PasLib name 'QFontDatabase_families'; procedure QFontDatabase_styles(handle: QFontDatabaseH; retval: QStringListH; family: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_styles'; procedure QFontDatabase_pointSizes(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString; style: PWideString = nil); cdecl; external Qt4PasLib name 'QFontDatabase_pointSizes'; procedure QFontDatabase_smoothSizes(handle: QFontDatabaseH; retval: PPtrIntArray; family: PWideString; style: PWideString); cdecl; external Qt4PasLib name 'QFontDatabase_smoothSizes'; procedure QFontDatabase_styleString(handle: QFontDatabaseH; retval: PWideString; font: QFontH); cdecl; external Qt4PasLib name 'QFontDatabase_styleString'; procedure QFontDatabase_styleString(handle: QFontDatabaseH; retval: PWideString; fontInfo: QFontInfoH); cdecl; external Qt4PasLib name 'QFontDatabase_styleString2'; procedure QFontDatabase_font(handle: QFontDatabaseH; retval: QFontH; family: PWideString; style: PWideString; pointSize: Integer); cdecl; external Qt4PasLib name 'QFontDatabase_font'; function QFontDatabase_isBitmapScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isBitmapScalable'; function QFontDatabase_isSmoothlyScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isSmoothlyScalable'; function QFontDatabase_isScalable(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isScalable'; function QFontDatabase_isFixedPitch(handle: QFontDatabaseH; family: PWideString; style: PWideString = nil): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_isFixedPitch'; function QFontDatabase_italic(handle: QFontDatabaseH; family: PWideString; style: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_italic'; function QFontDatabase_bold(handle: QFontDatabaseH; family: PWideString; style: PWideString): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_bold'; function QFontDatabase_weight(handle: QFontDatabaseH; family: PWideString; style: PWideString): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_weight'; procedure QFontDatabase_writingSystemName(retval: PWideString; writingSystem: QFontDatabaseWritingSystem); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystemName'; procedure QFontDatabase_writingSystemSample(retval: PWideString; writingSystem: QFontDatabaseWritingSystem); cdecl; external Qt4PasLib name 'QFontDatabase_writingSystemSample'; function QFontDatabase_addApplicationFont(fileName: PWideString): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_addApplicationFont'; function QFontDatabase_addApplicationFontFromData(fontData: QByteArrayH): Integer; cdecl; external Qt4PasLib name 'QFontDatabase_addApplicationFontFromData'; procedure QFontDatabase_applicationFontFamilies(retval: QStringListH; id: Integer); cdecl; external Qt4PasLib name 'QFontDatabase_applicationFontFamilies'; function QFontDatabase_removeApplicationFont(id: Integer): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_removeApplicationFont'; function QFontDatabase_removeAllApplicationFonts(): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_removeAllApplicationFonts'; function QFontDatabase_supportsThreadedFontRendering(): Boolean; cdecl; external Qt4PasLib name 'QFontDatabase_supportsThreadedFontRendering'; type QTextCursorMoveMode = ( // QTextCursor::MoveMode (1) QTextCursorMoveAnchor, QTextCursorKeepAnchor ); QTextCursorMoveOperation = ( // QTextCursor::MoveOperation (1) QTextCursorNoMove, QTextCursorStart, QTextCursorUp, QTextCursorStartOfLine, QTextCursorStartOfBlock, QTextCursorStartOfWord, QTextCursorPreviousBlock, QTextCursorPreviousCharacter, QTextCursorPreviousWord, QTextCursorLeft, QTextCursorWordLeft, QTextCursorEnd, QTextCursorDown, QTextCursorEndOfLine, QTextCursorEndOfWord, QTextCursorEndOfBlock, QTextCursorNextBlock, QTextCursorNextCharacter, QTextCursorNextWord, QTextCursorRight, QTextCursorWordRight, QTextCursorNextCell, QTextCursorPreviousCell, QTextCursorNextRow, QTextCursorPreviousRow ); QTextCursorSelectionType = ( // QTextCursor::SelectionType (1) QTextCursorWordUnderCursor, QTextCursorLineUnderCursor, QTextCursorBlockUnderCursor, QTextCursorDocument ); function QTextCursor_create(): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create'; procedure QTextCursor_destroy(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_destroy'; function QTextCursor_create(document: QTextDocumentH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create2'; function QTextCursor_create(frame: QTextFrameH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create3'; function QTextCursor_create(block: QTextBlockH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create4'; function QTextCursor_create(cursor: QTextCursorH): QTextCursorH; cdecl; external Qt4PasLib name 'QTextCursor_create6'; function QTextCursor_isNull(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_isNull'; procedure QTextCursor_setPosition(handle: QTextCursorH; pos: Integer; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QTextCursor_setPosition'; function QTextCursor_position(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_position'; function QTextCursor_anchor(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_anchor'; procedure QTextCursor_insertText(handle: QTextCursorH; text: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertText'; procedure QTextCursor_insertText(handle: QTextCursorH; text: PWideString; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertText2'; function QTextCursor_movePosition(handle: QTextCursorH; op: QTextCursorMoveOperation; AnonParam2: QTextCursorMoveMode = QTextCursorMoveAnchor; n: Integer = 1): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_movePosition'; function QTextCursor_visualNavigation(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_visualNavigation'; procedure QTextCursor_setVisualNavigation(handle: QTextCursorH; b: Boolean); cdecl; external Qt4PasLib name 'QTextCursor_setVisualNavigation'; procedure QTextCursor_deleteChar(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_deleteChar'; procedure QTextCursor_deletePreviousChar(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_deletePreviousChar'; procedure QTextCursor_select(handle: QTextCursorH; selection: QTextCursorSelectionType); cdecl; external Qt4PasLib name 'QTextCursor_select'; function QTextCursor_hasSelection(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_hasSelection'; function QTextCursor_hasComplexSelection(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_hasComplexSelection'; procedure QTextCursor_removeSelectedText(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_removeSelectedText'; procedure QTextCursor_clearSelection(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_clearSelection'; function QTextCursor_selectionStart(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_selectionStart'; function QTextCursor_selectionEnd(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_selectionEnd'; procedure QTextCursor_selectedText(handle: QTextCursorH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_selectedText'; procedure QTextCursor_selection(handle: QTextCursorH; retval: QTextDocumentFragmentH); cdecl; external Qt4PasLib name 'QTextCursor_selection'; procedure QTextCursor_selectedTableCells(handle: QTextCursorH; firstRow: PInteger; numRows: PInteger; firstColumn: PInteger; numColumns: PInteger); cdecl; external Qt4PasLib name 'QTextCursor_selectedTableCells'; procedure QTextCursor_block(handle: QTextCursorH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextCursor_block'; procedure QTextCursor_charFormat(handle: QTextCursorH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_charFormat'; procedure QTextCursor_setCharFormat(handle: QTextCursorH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setCharFormat'; procedure QTextCursor_mergeCharFormat(handle: QTextCursorH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeCharFormat'; procedure QTextCursor_blockFormat(handle: QTextCursorH; retval: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_blockFormat'; procedure QTextCursor_setBlockFormat(handle: QTextCursorH; format: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setBlockFormat'; procedure QTextCursor_mergeBlockFormat(handle: QTextCursorH; modifier: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeBlockFormat'; procedure QTextCursor_blockCharFormat(handle: QTextCursorH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_blockCharFormat'; procedure QTextCursor_setBlockCharFormat(handle: QTextCursorH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_setBlockCharFormat'; procedure QTextCursor_mergeBlockCharFormat(handle: QTextCursorH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_mergeBlockCharFormat'; function QTextCursor_atBlockStart(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atBlockStart'; function QTextCursor_atBlockEnd(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atBlockEnd'; function QTextCursor_atStart(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atStart'; function QTextCursor_atEnd(handle: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_atEnd'; procedure QTextCursor_insertBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock'; procedure QTextCursor_insertBlock(handle: QTextCursorH; format: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock2'; procedure QTextCursor_insertBlock(handle: QTextCursorH; format: QTextBlockFormatH; charFormat: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertBlock3'; function QTextCursor_currentList(handle: QTextCursorH): QTextListH; cdecl; external Qt4PasLib name 'QTextCursor_currentList'; function QTextCursor_insertTable(handle: QTextCursorH; rows: Integer; cols: Integer; format: QTextTableFormatH): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_insertTable'; function QTextCursor_insertTable(handle: QTextCursorH; rows: Integer; cols: Integer): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_insertTable2'; function QTextCursor_currentTable(handle: QTextCursorH): QTextTableH; cdecl; external Qt4PasLib name 'QTextCursor_currentTable'; function QTextCursor_insertFrame(handle: QTextCursorH; format: QTextFrameFormatH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextCursor_insertFrame'; function QTextCursor_currentFrame(handle: QTextCursorH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextCursor_currentFrame'; procedure QTextCursor_insertFragment(handle: QTextCursorH; fragment: QTextDocumentFragmentH); cdecl; external Qt4PasLib name 'QTextCursor_insertFragment'; procedure QTextCursor_insertHtml(handle: QTextCursorH; html: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertHtml'; procedure QTextCursor_insertImage(handle: QTextCursorH; format: QTextImageFormatH); cdecl; external Qt4PasLib name 'QTextCursor_insertImage2'; procedure QTextCursor_insertImage(handle: QTextCursorH; name: PWideString); cdecl; external Qt4PasLib name 'QTextCursor_insertImage3'; procedure QTextCursor_insertImage(handle: QTextCursorH; image: QImageH; name: PWideString = nil); cdecl; external Qt4PasLib name 'QTextCursor_insertImage4'; procedure QTextCursor_beginEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_beginEditBlock'; procedure QTextCursor_joinPreviousEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_joinPreviousEditBlock'; procedure QTextCursor_endEditBlock(handle: QTextCursorH); cdecl; external Qt4PasLib name 'QTextCursor_endEditBlock'; function QTextCursor_isCopyOf(handle: QTextCursorH; other: QTextCursorH): Boolean; cdecl; external Qt4PasLib name 'QTextCursor_isCopyOf'; function QTextCursor_blockNumber(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_blockNumber'; function QTextCursor_columnNumber(handle: QTextCursorH): Integer; cdecl; external Qt4PasLib name 'QTextCursor_columnNumber'; function QTextCursor_document(handle: QTextCursorH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextCursor_document'; type QTextOptionTabType = ( // QTextOption::TabType (1) QTextOptionLeftTab, QTextOptionRightTab, QTextOptionCenterTab, QTextOptionDelimiterTab ); QTextOptionWrapMode = ( // QTextOption::WrapMode (1) QTextOptionNoWrap, QTextOptionWordWrap, QTextOptionManualWrap, QTextOptionWrapAnywhere, QTextOptionWrapAtWordBoundaryOrAnywhere ); type QTextOptionFlag = cardinal; // QTextOption::Flag QTextOptionFlags = QTextOptionFlag; //QFlags<> (3) const QTextOptionShowTabsAndSpaces = $1; QTextOptionShowLineAndParagraphSeparators = $2; QTextOptionAddSpaceForLineAndParagraphSeparators = $4; QTextOptionSuppressColors = $8; QTextOptionIncludeTrailingSpaces = $80000000; function QTextOption_create(): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create'; procedure QTextOption_destroy(handle: QTextOptionH); cdecl; external Qt4PasLib name 'QTextOption_destroy'; function QTextOption_create(alignment: QtAlignment): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create2'; function QTextOption_create(o: QTextOptionH): QTextOptionH; cdecl; external Qt4PasLib name 'QTextOption_create3'; procedure QTextOption_setAlignment(handle: QTextOptionH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QTextOption_setAlignment'; function QTextOption_alignment(handle: QTextOptionH): QtAlignment; cdecl; external Qt4PasLib name 'QTextOption_alignment'; procedure QTextOption_setTextDirection(handle: QTextOptionH; aDirection: QtLayoutDirection); cdecl; external Qt4PasLib name 'QTextOption_setTextDirection'; function QTextOption_textDirection(handle: QTextOptionH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QTextOption_textDirection'; procedure QTextOption_setWrapMode(handle: QTextOptionH; wrap: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QTextOption_setWrapMode'; function QTextOption_wrapMode(handle: QTextOptionH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QTextOption_wrapMode'; procedure QTextOption_setFlags(handle: QTextOptionH; flags: QTextOptionFlags); cdecl; external Qt4PasLib name 'QTextOption_setFlags'; function QTextOption_flags(handle: QTextOptionH): QTextOptionFlags; cdecl; external Qt4PasLib name 'QTextOption_flags'; procedure QTextOption_setTabStop(handle: QTextOptionH; tabStop: qreal); cdecl; external Qt4PasLib name 'QTextOption_setTabStop'; function QTextOption_tabStop(handle: QTextOptionH): qreal; cdecl; external Qt4PasLib name 'QTextOption_tabStop'; procedure QTextOption_setTabArray(handle: QTextOptionH; tabStops: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextOption_setTabArray'; procedure QTextOption_tabArray(handle: QTextOptionH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextOption_tabArray'; procedure QTextOption_setUseDesignMetrics(handle: QTextOptionH; b: Boolean); cdecl; external Qt4PasLib name 'QTextOption_setUseDesignMetrics'; function QTextOption_useDesignMetrics(handle: QTextOptionH): Boolean; cdecl; external Qt4PasLib name 'QTextOption_useDesignMetrics'; function QFontMetrics_create(AnonParam1: QFontH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create'; procedure QFontMetrics_destroy(handle: QFontMetricsH); cdecl; external Qt4PasLib name 'QFontMetrics_destroy'; function QFontMetrics_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create2'; function QFontMetrics_create(AnonParam1: QFontMetricsH): QFontMetricsH; cdecl; external Qt4PasLib name 'QFontMetrics_create3'; function QFontMetrics_ascent(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_ascent'; function QFontMetrics_descent(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_descent'; function QFontMetrics_height(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_height'; function QFontMetrics_leading(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_leading'; function QFontMetrics_lineSpacing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_lineSpacing'; function QFontMetrics_minLeftBearing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_minLeftBearing'; function QFontMetrics_minRightBearing(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_minRightBearing'; function QFontMetrics_maxWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_maxWidth'; function QFontMetrics_xHeight(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_xHeight'; function QFontMetrics_averageCharWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_averageCharWidth'; function QFontMetrics_inFont(handle: QFontMetricsH; AnonParam1: PWideChar): Boolean; cdecl; external Qt4PasLib name 'QFontMetrics_inFont'; function QFontMetrics_leftBearing(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_leftBearing'; function QFontMetrics_rightBearing(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_rightBearing'; function QFontMetrics_width(handle: QFontMetricsH; AnonParam1: PWideString; len: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_width'; function QFontMetrics_width(handle: QFontMetricsH; AnonParam1: PWideChar): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_width2'; function QFontMetrics_charWidth(handle: QFontMetricsH; str: PWideString; pos: Integer): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_charWidth'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; AnonParam1: PWideChar); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect2'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; r: PRect; flags: Integer; text: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect3'; procedure QFontMetrics_boundingRect(handle: QFontMetricsH; retval: PRect; x: Integer; y: Integer; w: Integer; h: Integer; flags: Integer; text: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_boundingRect4'; procedure QFontMetrics_size(handle: QFontMetricsH; retval: PSize; flags: Integer; str: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetrics_size'; procedure QFontMetrics_tightBoundingRect(handle: QFontMetricsH; retval: PRect; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetrics_tightBoundingRect'; procedure QFontMetrics_elidedText(handle: QFontMetricsH; retval: PWideString; text: PWideString; mode: QtTextElideMode; width: Integer; flags: Integer = 0); cdecl; external Qt4PasLib name 'QFontMetrics_elidedText'; function QFontMetrics_underlinePos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_underlinePos'; function QFontMetrics_overlinePos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_overlinePos'; function QFontMetrics_strikeOutPos(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_strikeOutPos'; function QFontMetrics_lineWidth(handle: QFontMetricsH): Integer; cdecl; external Qt4PasLib name 'QFontMetrics_lineWidth'; function QFontMetricsF_create(AnonParam1: QFontH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create'; procedure QFontMetricsF_destroy(handle: QFontMetricsFH); cdecl; external Qt4PasLib name 'QFontMetricsF_destroy'; function QFontMetricsF_create(AnonParam1: QFontH; pd: QPaintDeviceH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create2'; function QFontMetricsF_create(AnonParam1: QFontMetricsFH): QFontMetricsFH; cdecl; external Qt4PasLib name 'QFontMetricsF_create4'; function QFontMetricsF_ascent(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_ascent'; function QFontMetricsF_descent(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_descent'; function QFontMetricsF_height(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_height'; function QFontMetricsF_leading(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_leading'; function QFontMetricsF_lineSpacing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_lineSpacing'; function QFontMetricsF_minLeftBearing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_minLeftBearing'; function QFontMetricsF_minRightBearing(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_minRightBearing'; function QFontMetricsF_maxWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_maxWidth'; function QFontMetricsF_xHeight(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_xHeight'; function QFontMetricsF_averageCharWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_averageCharWidth'; function QFontMetricsF_inFont(handle: QFontMetricsFH; AnonParam1: PWideChar): Boolean; cdecl; external Qt4PasLib name 'QFontMetricsF_inFont'; function QFontMetricsF_leftBearing(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_leftBearing'; function QFontMetricsF_rightBearing(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_rightBearing'; function QFontMetricsF_width(handle: QFontMetricsFH; _string: PWideString): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_width'; function QFontMetricsF_width(handle: QFontMetricsFH; AnonParam1: PWideChar): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_width2'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; _string: PWideString); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; AnonParam1: PWideChar); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect2'; procedure QFontMetricsF_boundingRect(handle: QFontMetricsFH; retval: QRectFH; r: QRectFH; flags: Integer; _string: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetricsF_boundingRect3'; procedure QFontMetricsF_size(handle: QFontMetricsFH; retval: QSizeFH; flags: Integer; str: PWideString; tabstops: Integer = 0; tabarray: PInteger = nil); cdecl; external Qt4PasLib name 'QFontMetricsF_size'; procedure QFontMetricsF_tightBoundingRect(handle: QFontMetricsFH; retval: QRectFH; text: PWideString); cdecl; external Qt4PasLib name 'QFontMetricsF_tightBoundingRect'; procedure QFontMetricsF_elidedText(handle: QFontMetricsFH; retval: PWideString; text: PWideString; mode: QtTextElideMode; width: qreal; flags: Integer = 0); cdecl; external Qt4PasLib name 'QFontMetricsF_elidedText'; function QFontMetricsF_underlinePos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_underlinePos'; function QFontMetricsF_overlinePos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_overlinePos'; function QFontMetricsF_strikeOutPos(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_strikeOutPos'; function QFontMetricsF_lineWidth(handle: QFontMetricsFH): qreal; cdecl; external Qt4PasLib name 'QFontMetricsF_lineWidth'; function QFontInfo_create(AnonParam1: QFontH): QFontInfoH; cdecl; external Qt4PasLib name 'QFontInfo_create'; procedure QFontInfo_destroy(handle: QFontInfoH); cdecl; external Qt4PasLib name 'QFontInfo_destroy'; function QFontInfo_create(AnonParam1: QFontInfoH): QFontInfoH; cdecl; external Qt4PasLib name 'QFontInfo_create2'; procedure QFontInfo_family(handle: QFontInfoH; retval: PWideString); cdecl; external Qt4PasLib name 'QFontInfo_family'; function QFontInfo_pixelSize(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_pixelSize'; function QFontInfo_pointSize(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_pointSize'; function QFontInfo_pointSizeF(handle: QFontInfoH): qreal; cdecl; external Qt4PasLib name 'QFontInfo_pointSizeF'; function QFontInfo_italic(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_italic'; function QFontInfo_style(handle: QFontInfoH): QFontStyle; cdecl; external Qt4PasLib name 'QFontInfo_style'; function QFontInfo_weight(handle: QFontInfoH): Integer; cdecl; external Qt4PasLib name 'QFontInfo_weight'; function QFontInfo_bold(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_bold'; function QFontInfo_underline(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_underline'; function QFontInfo_overline(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_overline'; function QFontInfo_strikeOut(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_strikeOut'; function QFontInfo_fixedPitch(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_fixedPitch'; function QFontInfo_styleHint(handle: QFontInfoH): QFontStyleHint; cdecl; external Qt4PasLib name 'QFontInfo_styleHint'; function QFontInfo_rawMode(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_rawMode'; function QFontInfo_exactMatch(handle: QFontInfoH): Boolean; cdecl; external Qt4PasLib name 'QFontInfo_exactMatch'; type QTextDocumentMetaInformation = ( // QTextDocument::MetaInformation (1) QTextDocumentDocumentTitle, QTextDocumentDocumentUrl ); type QTextDocumentFindFlag = cardinal; // QTextDocument::FindFlag QTextDocumentFindFlags = QTextDocumentFindFlag; //QFlags<> (3) const QTextDocumentFindBackward = $00001; QTextDocumentFindCaseSensitively = $00002; QTextDocumentFindWholeWords = $00004; type QTextDocumentResourceType = ( //QTextDocument::ResourceType (2) QTextDocumentHtmlResource = 1, QTextDocumentImageResource = 2, QTextDocumentStyleSheetResource = 3, QTextDocumentUserResource = 100 ); function QTextDocument_create(parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_create'; procedure QTextDocument_destroy(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_destroy'; function QTextDocument_create(text: PWideString; parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_create2'; function QTextDocument_clone(handle: QTextDocumentH; parent: QObjectH = nil): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextDocument_clone'; function QTextDocument_isEmpty(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isEmpty'; procedure QTextDocument_clear(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_clear'; procedure QTextDocument_setUndoRedoEnabled(handle: QTextDocumentH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextDocument_setUndoRedoEnabled'; function QTextDocument_isUndoRedoEnabled(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isUndoRedoEnabled'; function QTextDocument_isUndoAvailable(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isUndoAvailable'; function QTextDocument_isRedoAvailable(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isRedoAvailable'; function QTextDocument_revision(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_revision'; procedure QTextDocument_setDocumentLayout(handle: QTextDocumentH; layout: QAbstractTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QTextDocument_setDocumentLayout'; function QTextDocument_documentLayout(handle: QTextDocumentH): QAbstractTextDocumentLayoutH; cdecl; external Qt4PasLib name 'QTextDocument_documentLayout'; procedure QTextDocument_setMetaInformation(handle: QTextDocumentH; info: QTextDocumentMetaInformation; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setMetaInformation'; procedure QTextDocument_metaInformation(handle: QTextDocumentH; retval: PWideString; info: QTextDocumentMetaInformation); cdecl; external Qt4PasLib name 'QTextDocument_metaInformation'; procedure QTextDocument_toHtml(handle: QTextDocumentH; retval: PWideString; encoding: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QTextDocument_toHtml'; procedure QTextDocument_setHtml(handle: QTextDocumentH; html: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setHtml'; procedure QTextDocument_toPlainText(handle: QTextDocumentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_toPlainText'; procedure QTextDocument_setPlainText(handle: QTextDocumentH; text: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setPlainText'; procedure QTextDocument_characterAt(handle: QTextDocumentH; retval: PWideChar; pos: Integer); cdecl; external Qt4PasLib name 'QTextDocument_characterAt'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; subString: PWideString; from: Integer = 0; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; subString: PWideString; from: QTextCursorH; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find2'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; expr: QRegExpH; from: Integer = 0; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find3'; procedure QTextDocument_find(handle: QTextDocumentH; retval: QTextCursorH; expr: QRegExpH; from: QTextCursorH; options: QTextDocumentFindFlags = 0); cdecl; external Qt4PasLib name 'QTextDocument_find4'; function QTextDocument_frameAt(handle: QTextDocumentH; pos: Integer): QTextFrameH; cdecl; external Qt4PasLib name 'QTextDocument_frameAt'; function QTextDocument_rootFrame(handle: QTextDocumentH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextDocument_rootFrame'; function QTextDocument_object(handle: QTextDocumentH; objectIndex: Integer): QTextObjectH; cdecl; external Qt4PasLib name 'QTextDocument_object'; function QTextDocument_objectForFormat(handle: QTextDocumentH; AnonParam1: QTextFormatH): QTextObjectH; cdecl; external Qt4PasLib name 'QTextDocument_objectForFormat'; procedure QTextDocument_findBlock(handle: QTextDocumentH; retval: QTextBlockH; pos: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlock'; procedure QTextDocument_findBlockByNumber(handle: QTextDocumentH; retval: QTextBlockH; blockNumber: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlockByNumber'; procedure QTextDocument_findBlockByLineNumber(handle: QTextDocumentH; retval: QTextBlockH; blockNumber: Integer); cdecl; external Qt4PasLib name 'QTextDocument_findBlockByLineNumber'; procedure QTextDocument_begin(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_begin'; procedure QTextDocument_end(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_end'; procedure QTextDocument_firstBlock(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_firstBlock'; procedure QTextDocument_lastBlock(handle: QTextDocumentH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextDocument_lastBlock'; procedure QTextDocument_setPageSize(handle: QTextDocumentH; size: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_setPageSize'; procedure QTextDocument_pageSize(handle: QTextDocumentH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_pageSize'; procedure QTextDocument_setDefaultFont(handle: QTextDocumentH; font: QFontH); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultFont'; procedure QTextDocument_defaultFont(handle: QTextDocumentH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextDocument_defaultFont'; function QTextDocument_pageCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_pageCount'; function QTextDocument_isModified(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_isModified'; procedure QTextDocument_print(handle: QTextDocumentH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QTextDocument_print'; procedure QTextDocument_resource(handle: QTextDocumentH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextDocument_resource'; procedure QTextDocument_addResource(handle: QTextDocumentH; _type: Integer; name: QUrlH; resource: QVariantH); cdecl; external Qt4PasLib name 'QTextDocument_addResource'; procedure QTextDocument_markContentsDirty(handle: QTextDocumentH; from: Integer; length: Integer); cdecl; external Qt4PasLib name 'QTextDocument_markContentsDirty'; procedure QTextDocument_setUseDesignMetrics(handle: QTextDocumentH; b: Boolean); cdecl; external Qt4PasLib name 'QTextDocument_setUseDesignMetrics'; function QTextDocument_useDesignMetrics(handle: QTextDocumentH): Boolean; cdecl; external Qt4PasLib name 'QTextDocument_useDesignMetrics'; procedure QTextDocument_drawContents(handle: QTextDocumentH; painter: QPainterH; rect: QRectFH = nil); cdecl; external Qt4PasLib name 'QTextDocument_drawContents'; procedure QTextDocument_setTextWidth(handle: QTextDocumentH; width: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setTextWidth'; function QTextDocument_textWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_textWidth'; function QTextDocument_idealWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_idealWidth'; function QTextDocument_indentWidth(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_indentWidth'; procedure QTextDocument_setIndentWidth(handle: QTextDocumentH; width: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setIndentWidth'; function QTextDocument_documentMargin(handle: QTextDocumentH): qreal; cdecl; external Qt4PasLib name 'QTextDocument_documentMargin'; procedure QTextDocument_setDocumentMargin(handle: QTextDocumentH; margin: qreal); cdecl; external Qt4PasLib name 'QTextDocument_setDocumentMargin'; procedure QTextDocument_adjustSize(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_adjustSize'; procedure QTextDocument_size(handle: QTextDocumentH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QTextDocument_size'; function QTextDocument_blockCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_blockCount'; function QTextDocument_lineCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_lineCount'; function QTextDocument_characterCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_characterCount'; procedure QTextDocument_setDefaultStyleSheet(handle: QTextDocumentH; sheet: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultStyleSheet'; procedure QTextDocument_defaultStyleSheet(handle: QTextDocumentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextDocument_defaultStyleSheet'; procedure QTextDocument_undo(handle: QTextDocumentH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextDocument_undo'; procedure QTextDocument_redo(handle: QTextDocumentH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextDocument_redo'; function QTextDocument_maximumBlockCount(handle: QTextDocumentH): Integer; cdecl; external Qt4PasLib name 'QTextDocument_maximumBlockCount'; procedure QTextDocument_setMaximumBlockCount(handle: QTextDocumentH; maximum: Integer); cdecl; external Qt4PasLib name 'QTextDocument_setMaximumBlockCount'; procedure QTextDocument_defaultTextOption(handle: QTextDocumentH; retval: QTextOptionH); cdecl; external Qt4PasLib name 'QTextDocument_defaultTextOption'; procedure QTextDocument_setDefaultTextOption(handle: QTextDocumentH; option: QTextOptionH); cdecl; external Qt4PasLib name 'QTextDocument_setDefaultTextOption'; procedure QTextDocument_undo(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_undo2'; procedure QTextDocument_redo(handle: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextDocument_redo2'; procedure QTextDocument_setModified(handle: QTextDocumentH; m: Boolean = True); cdecl; external Qt4PasLib name 'QTextDocument_setModified'; function QAbstractTextDocumentLayout_hitTest(handle: QAbstractTextDocumentLayoutH; point: PQtPointF; accuracy: QtHitTestAccuracy): Integer; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hitTest'; procedure QAbstractTextDocumentLayout_anchorAt(handle: QAbstractTextDocumentLayoutH; retval: PWideString; pos: PQtPointF); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_anchorAt'; function QAbstractTextDocumentLayout_pageCount(handle: QAbstractTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_pageCount'; procedure QAbstractTextDocumentLayout_documentSize(handle: QAbstractTextDocumentLayoutH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_documentSize'; procedure QAbstractTextDocumentLayout_frameBoundingRect(handle: QAbstractTextDocumentLayoutH; retval: QRectFH; frame: QTextFrameH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_frameBoundingRect'; procedure QAbstractTextDocumentLayout_blockBoundingRect(handle: QAbstractTextDocumentLayoutH; retval: QRectFH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_blockBoundingRect'; procedure QAbstractTextDocumentLayout_setPaintDevice(handle: QAbstractTextDocumentLayoutH; device: QPaintDeviceH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_setPaintDevice'; function QAbstractTextDocumentLayout_paintDevice(handle: QAbstractTextDocumentLayoutH): QPaintDeviceH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_paintDevice'; function QAbstractTextDocumentLayout_document(handle: QAbstractTextDocumentLayoutH): QTextDocumentH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_document'; procedure QAbstractTextDocumentLayout_registerHandler(handle: QAbstractTextDocumentLayoutH; objectType: Integer; component: QObjectH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_registerHandler'; function QAbstractTextDocumentLayout_handlerForObject(handle: QAbstractTextDocumentLayoutH; objectType: Integer): QTextObjectInterfaceH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_handlerForObject'; procedure QTextObjectInterface_intrinsicSize(handle: QTextObjectInterfaceH; retval: QSizeFH; doc: QTextDocumentH; posInDocument: Integer; format: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObjectInterface_intrinsicSize'; procedure QTextObjectInterface_drawObject(handle: QTextObjectInterfaceH; painter: QPainterH; rect: QRectFH; doc: QTextDocumentH; posInDocument: Integer; format: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObjectInterface_drawObject'; type QAbstractTextDocumentLayout_update_Event = procedure (AnonParam1: QRectFH) of object cdecl; QAbstractTextDocumentLayout_update2_Event = procedure () of object cdecl; QAbstractTextDocumentLayout_updateBlock_Event = procedure (block: QTextBlockH) of object cdecl; QAbstractTextDocumentLayout_documentSizeChanged_Event = procedure (newSize: QSizeFH) of object cdecl; QAbstractTextDocumentLayout_pageCountChanged_Event = procedure (newPages: Integer) of object cdecl; type QTextLayoutCursorMode = ( // QTextLayout::CursorMode (1) QTextLayoutSkipCharacters, QTextLayoutSkipWords ); type QTextLineEdge = ( // QTextLine::Edge (1) QTextLineLeading, QTextLineTrailing ); QTextLineCursorPosition = ( // QTextLine::CursorPosition (1) QTextLineCursorBetweenCharacters, QTextLineCursorOnCharacter ); function QTextInlineObject_create(): QTextInlineObjectH; cdecl; external Qt4PasLib name 'QTextInlineObject_create'; procedure QTextInlineObject_destroy(handle: QTextInlineObjectH); cdecl; external Qt4PasLib name 'QTextInlineObject_destroy'; function QTextInlineObject_isValid(handle: QTextInlineObjectH): Boolean; cdecl; external Qt4PasLib name 'QTextInlineObject_isValid'; procedure QTextInlineObject_rect(handle: QTextInlineObjectH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextInlineObject_rect'; function QTextInlineObject_width(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_width'; function QTextInlineObject_ascent(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_ascent'; function QTextInlineObject_descent(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_descent'; function QTextInlineObject_height(handle: QTextInlineObjectH): qreal; cdecl; external Qt4PasLib name 'QTextInlineObject_height'; function QTextInlineObject_textDirection(handle: QTextInlineObjectH): QtLayoutDirection; cdecl; external Qt4PasLib name 'QTextInlineObject_textDirection'; procedure QTextInlineObject_setWidth(handle: QTextInlineObjectH; w: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setWidth'; procedure QTextInlineObject_setAscent(handle: QTextInlineObjectH; a: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setAscent'; procedure QTextInlineObject_setDescent(handle: QTextInlineObjectH; d: qreal); cdecl; external Qt4PasLib name 'QTextInlineObject_setDescent'; function QTextInlineObject_textPosition(handle: QTextInlineObjectH): Integer; cdecl; external Qt4PasLib name 'QTextInlineObject_textPosition'; function QTextInlineObject_formatIndex(handle: QTextInlineObjectH): Integer; cdecl; external Qt4PasLib name 'QTextInlineObject_formatIndex'; procedure QTextInlineObject_format(handle: QTextInlineObjectH; retval: QTextFormatH); cdecl; external Qt4PasLib name 'QTextInlineObject_format'; function QTextLayout_create(): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create'; procedure QTextLayout_destroy(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_destroy'; function QTextLayout_create(text: PWideString): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create2'; function QTextLayout_create(text: PWideString; font: QFontH; paintdevice: QPaintDeviceH = nil): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create3'; function QTextLayout_create(b: QTextBlockH): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextLayout_create4'; procedure QTextLayout_setFont(handle: QTextLayoutH; f: QFontH); cdecl; external Qt4PasLib name 'QTextLayout_setFont'; procedure QTextLayout_font(handle: QTextLayoutH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextLayout_font'; procedure QTextLayout_setText(handle: QTextLayoutH; _string: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_setText'; procedure QTextLayout_text(handle: QTextLayoutH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_text'; procedure QTextLayout_setTextOption(handle: QTextLayoutH; option: QTextOptionH); cdecl; external Qt4PasLib name 'QTextLayout_setTextOption'; procedure QTextLayout_textOption(handle: QTextLayoutH; retval: QTextOptionH); cdecl; external Qt4PasLib name 'QTextLayout_textOption'; procedure QTextLayout_setPreeditArea(handle: QTextLayoutH; position: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_setPreeditArea'; function QTextLayout_preeditAreaPosition(handle: QTextLayoutH): Integer; cdecl; external Qt4PasLib name 'QTextLayout_preeditAreaPosition'; procedure QTextLayout_preeditAreaText(handle: QTextLayoutH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextLayout_preeditAreaText'; procedure QTextLayout_clearAdditionalFormats(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_clearAdditionalFormats'; procedure QTextLayout_setCacheEnabled(handle: QTextLayoutH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextLayout_setCacheEnabled'; function QTextLayout_cacheEnabled(handle: QTextLayoutH): Boolean; cdecl; external Qt4PasLib name 'QTextLayout_cacheEnabled'; procedure QTextLayout_beginLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_beginLayout'; procedure QTextLayout_endLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_endLayout'; procedure QTextLayout_clearLayout(handle: QTextLayoutH); cdecl; external Qt4PasLib name 'QTextLayout_clearLayout'; procedure QTextLayout_createLine(handle: QTextLayoutH; retval: QTextLineH); cdecl; external Qt4PasLib name 'QTextLayout_createLine'; function QTextLayout_lineCount(handle: QTextLayoutH): Integer; cdecl; external Qt4PasLib name 'QTextLayout_lineCount'; procedure QTextLayout_lineAt(handle: QTextLayoutH; retval: QTextLineH; i: Integer); cdecl; external Qt4PasLib name 'QTextLayout_lineAt'; procedure QTextLayout_lineForTextPosition(handle: QTextLayoutH; retval: QTextLineH; pos: Integer); cdecl; external Qt4PasLib name 'QTextLayout_lineForTextPosition'; function QTextLayout_isValidCursorPosition(handle: QTextLayoutH; pos: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextLayout_isValidCursorPosition'; function QTextLayout_nextCursorPosition(handle: QTextLayoutH; oldPos: Integer; mode: QTextLayoutCursorMode = QTextLayoutSkipCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLayout_nextCursorPosition'; function QTextLayout_previousCursorPosition(handle: QTextLayoutH; oldPos: Integer; mode: QTextLayoutCursorMode = QTextLayoutSkipCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLayout_previousCursorPosition'; procedure QTextLayout_drawCursor(handle: QTextLayoutH; p: QPainterH; pos: PQtPointF; cursorPosition: Integer); cdecl; external Qt4PasLib name 'QTextLayout_drawCursor'; procedure QTextLayout_drawCursor(handle: QTextLayoutH; p: QPainterH; pos: PQtPointF; cursorPosition: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTextLayout_drawCursor2'; procedure QTextLayout_position(handle: QTextLayoutH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QTextLayout_position'; procedure QTextLayout_setPosition(handle: QTextLayoutH; p: PQtPointF); cdecl; external Qt4PasLib name 'QTextLayout_setPosition'; procedure QTextLayout_boundingRect(handle: QTextLayoutH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLayout_boundingRect'; function QTextLayout_minimumWidth(handle: QTextLayoutH): qreal; cdecl; external Qt4PasLib name 'QTextLayout_minimumWidth'; function QTextLayout_maximumWidth(handle: QTextLayoutH): qreal; cdecl; external Qt4PasLib name 'QTextLayout_maximumWidth'; procedure QTextLayout_setFlags(handle: QTextLayoutH; flags: Integer); cdecl; external Qt4PasLib name 'QTextLayout_setFlags'; function QTextLine_create(): QTextLineH; cdecl; external Qt4PasLib name 'QTextLine_create'; procedure QTextLine_destroy(handle: QTextLineH); cdecl; external Qt4PasLib name 'QTextLine_destroy'; function QTextLine_isValid(handle: QTextLineH): Boolean; cdecl; external Qt4PasLib name 'QTextLine_isValid'; procedure QTextLine_rect(handle: QTextLineH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLine_rect'; function QTextLine_x(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_x'; function QTextLine_y(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_y'; function QTextLine_width(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_width'; function QTextLine_ascent(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_ascent'; function QTextLine_descent(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_descent'; function QTextLine_height(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_height'; function QTextLine_naturalTextWidth(handle: QTextLineH): qreal; cdecl; external Qt4PasLib name 'QTextLine_naturalTextWidth'; procedure QTextLine_naturalTextRect(handle: QTextLineH; retval: QRectFH); cdecl; external Qt4PasLib name 'QTextLine_naturalTextRect'; function QTextLine_cursorToX(handle: QTextLineH; cursorPos: PInteger; edge: QTextLineEdge = QTextLineLeading): qreal; cdecl; external Qt4PasLib name 'QTextLine_cursorToX'; function QTextLine_cursorToX(handle: QTextLineH; cursorPos: Integer; edge: QTextLineEdge = QTextLineLeading): qreal; cdecl; external Qt4PasLib name 'QTextLine_cursorToX2'; function QTextLine_xToCursor(handle: QTextLineH; x: qreal; AnonParam2: QTextLineCursorPosition = QTextLineCursorBetweenCharacters): Integer; cdecl; external Qt4PasLib name 'QTextLine_xToCursor'; procedure QTextLine_setLineWidth(handle: QTextLineH; width: qreal); cdecl; external Qt4PasLib name 'QTextLine_setLineWidth'; procedure QTextLine_setNumColumns(handle: QTextLineH; columns: Integer); cdecl; external Qt4PasLib name 'QTextLine_setNumColumns'; procedure QTextLine_setNumColumns(handle: QTextLineH; columns: Integer; alignmentWidth: qreal); cdecl; external Qt4PasLib name 'QTextLine_setNumColumns2'; procedure QTextLine_setPosition(handle: QTextLineH; pos: PQtPointF); cdecl; external Qt4PasLib name 'QTextLine_setPosition'; procedure QTextLine_position(handle: QTextLineH; retval: PQtPointF); cdecl; external Qt4PasLib name 'QTextLine_position'; function QTextLine_textStart(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_textStart'; function QTextLine_textLength(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_textLength'; function QTextLine_lineNumber(handle: QTextLineH): Integer; cdecl; external Qt4PasLib name 'QTextLine_lineNumber'; procedure QTextObject_format(handle: QTextObjectH; retval: QTextFormatH); cdecl; external Qt4PasLib name 'QTextObject_format'; function QTextObject_formatIndex(handle: QTextObjectH): Integer; cdecl; external Qt4PasLib name 'QTextObject_formatIndex'; function QTextObject_document(handle: QTextObjectH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextObject_document'; function QTextObject_objectIndex(handle: QTextObjectH): Integer; cdecl; external Qt4PasLib name 'QTextObject_objectIndex'; function QTextFrame_create(doc: QTextDocumentH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextFrame_create'; procedure QTextFrame_destroy(handle: QTextFrameH); cdecl; external Qt4PasLib name 'QTextFrame_destroy'; procedure QTextFrame_setFrameFormat(handle: QTextFrameH; format: QTextFrameFormatH); cdecl; external Qt4PasLib name 'QTextFrame_setFrameFormat'; procedure QTextFrame_frameFormat(handle: QTextFrameH; retval: QTextFrameFormatH); cdecl; external Qt4PasLib name 'QTextFrame_frameFormat'; procedure QTextFrame_firstCursorPosition(handle: QTextFrameH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextFrame_firstCursorPosition'; procedure QTextFrame_lastCursorPosition(handle: QTextFrameH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextFrame_lastCursorPosition'; function QTextFrame_firstPosition(handle: QTextFrameH): Integer; cdecl; external Qt4PasLib name 'QTextFrame_firstPosition'; function QTextFrame_lastPosition(handle: QTextFrameH): Integer; cdecl; external Qt4PasLib name 'QTextFrame_lastPosition'; procedure QTextFrame_childFrames(handle: QTextFrameH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTextFrame_childFrames'; function QTextFrame_parentFrame(handle: QTextFrameH): QTextFrameH; cdecl; external Qt4PasLib name 'QTextFrame_parentFrame'; function QTextBlock_create(): QTextBlockH; cdecl; external Qt4PasLib name 'QTextBlock_create'; procedure QTextBlock_destroy(handle: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_destroy'; function QTextBlock_create(o: QTextBlockH): QTextBlockH; cdecl; external Qt4PasLib name 'QTextBlock_create2'; function QTextBlock_isValid(handle: QTextBlockH): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_isValid'; function QTextBlock_position(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_position'; function QTextBlock_length(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_length'; function QTextBlock_contains(handle: QTextBlockH; position: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_contains'; function QTextBlock_layout(handle: QTextBlockH): QTextLayoutH; cdecl; external Qt4PasLib name 'QTextBlock_layout'; procedure QTextBlock_clearLayout(handle: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_clearLayout'; procedure QTextBlock_blockFormat(handle: QTextBlockH; retval: QTextBlockFormatH); cdecl; external Qt4PasLib name 'QTextBlock_blockFormat'; function QTextBlock_blockFormatIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_blockFormatIndex'; procedure QTextBlock_charFormat(handle: QTextBlockH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextBlock_charFormat'; function QTextBlock_charFormatIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_charFormatIndex'; procedure QTextBlock_text(handle: QTextBlockH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextBlock_text'; function QTextBlock_document(handle: QTextBlockH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextBlock_document'; function QTextBlock_textList(handle: QTextBlockH): QTextListH; cdecl; external Qt4PasLib name 'QTextBlock_textList'; function QTextBlock_userData(handle: QTextBlockH): QTextBlockUserDataH; cdecl; external Qt4PasLib name 'QTextBlock_userData'; procedure QTextBlock_setUserData(handle: QTextBlockH; data: QTextBlockUserDataH); cdecl; external Qt4PasLib name 'QTextBlock_setUserData'; function QTextBlock_userState(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_userState'; procedure QTextBlock_setUserState(handle: QTextBlockH; state: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setUserState'; function QTextBlock_revision(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_revision'; procedure QTextBlock_setRevision(handle: QTextBlockH; rev: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setRevision'; function QTextBlock_isVisible(handle: QTextBlockH): Boolean; cdecl; external Qt4PasLib name 'QTextBlock_isVisible'; procedure QTextBlock_setVisible(handle: QTextBlockH; visible: Boolean); cdecl; external Qt4PasLib name 'QTextBlock_setVisible'; function QTextBlock_blockNumber(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_blockNumber'; function QTextBlock_firstLineNumber(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_firstLineNumber'; procedure QTextBlock_setLineCount(handle: QTextBlockH; count: Integer); cdecl; external Qt4PasLib name 'QTextBlock_setLineCount'; function QTextBlock_lineCount(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_lineCount'; procedure QTextBlock_next(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_next'; procedure QTextBlock_previous(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt4PasLib name 'QTextBlock_previous'; function QTextBlock_fragmentIndex(handle: QTextBlockH): Integer; cdecl; external Qt4PasLib name 'QTextBlock_fragmentIndex'; function QTextFragment_create(): QTextFragmentH; cdecl; external Qt4PasLib name 'QTextFragment_create'; procedure QTextFragment_destroy(handle: QTextFragmentH); cdecl; external Qt4PasLib name 'QTextFragment_destroy'; function QTextFragment_create(o: QTextFragmentH): QTextFragmentH; cdecl; external Qt4PasLib name 'QTextFragment_create2'; function QTextFragment_isValid(handle: QTextFragmentH): Boolean; cdecl; external Qt4PasLib name 'QTextFragment_isValid'; function QTextFragment_position(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_position'; function QTextFragment_length(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_length'; function QTextFragment_contains(handle: QTextFragmentH; position: Integer): Boolean; cdecl; external Qt4PasLib name 'QTextFragment_contains'; procedure QTextFragment_charFormat(handle: QTextFragmentH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextFragment_charFormat'; function QTextFragment_charFormatIndex(handle: QTextFragmentH): Integer; cdecl; external Qt4PasLib name 'QTextFragment_charFormatIndex'; procedure QTextFragment_text(handle: QTextFragmentH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextFragment_text'; type QIconMode = ( // QIcon::Mode (1) QIconNormal, QIconDisabled, QIconActive, QIconSelected ); QIconState = ( // QIcon::State (1) QIconOn, QIconOff ); function QIcon_create(): QIconH; cdecl; external Qt4PasLib name 'QIcon_create'; procedure QIcon_destroy(handle: QIconH); cdecl; external Qt4PasLib name 'QIcon_destroy'; function QIcon_create(pixmap: QPixmapH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create2'; function QIcon_create(other: QIconH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create3'; function QIcon_create(fileName: PWideString): QIconH; cdecl; external Qt4PasLib name 'QIcon_create4'; function QIcon_create(engine: QIconEngineH): QIconH; cdecl; external Qt4PasLib name 'QIcon_create5'; function QIcon_create(engine: QIconEngineV2H): QIconH; cdecl; external Qt4PasLib name 'QIcon_create6'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; size: PSize; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; w: Integer; h: Integer; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap2'; procedure QIcon_pixmap(handle: QIconH; retval: QPixmapH; extent: Integer; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_pixmap3'; procedure QIcon_actualSize(handle: QIconH; retval: PSize; size: PSize; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_actualSize'; procedure QIcon_paint(handle: QIconH; painter: QPainterH; rect: PRect; alignment: QtAlignment = QtAlignCenter; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_paint'; procedure QIcon_paint(handle: QIconH; painter: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; alignment: QtAlignment = QtAlignCenter; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_paint2'; function QIcon_isNull(handle: QIconH): Boolean; cdecl; external Qt4PasLib name 'QIcon_isNull'; function QIcon_isDetached(handle: QIconH): Boolean; cdecl; external Qt4PasLib name 'QIcon_isDetached'; procedure QIcon_detach(handle: QIconH); cdecl; external Qt4PasLib name 'QIcon_detach'; function QIcon_serialNumber(handle: QIconH): Integer; cdecl; external Qt4PasLib name 'QIcon_serialNumber'; function QIcon_cacheKey(handle: QIconH): int64; cdecl; external Qt4PasLib name 'QIcon_cacheKey'; procedure QIcon_addPixmap(handle: QIconH; pixmap: QPixmapH; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_addPixmap'; procedure QIcon_addFile(handle: QIconH; fileName: PWideString; size: PSize = nil; mode: QIconMode = QIconNormal; state: QIconState = QIconOff); cdecl; external Qt4PasLib name 'QIcon_addFile'; {$ifdef BINUX } type QPixmapShareMode = ( // QPixmap::ShareMode (1) QPixmapImplicitlyShared, QPixmapExplicitlyShared ); {$endif} {$ifdef MSWINDOWS } type QPixmapHBitmapFormat = ( // QPixmap::HBitmapFormat (1) QPixmapNoAlpha, QPixmapPremultipliedAlpha, QPixmapAlpha ); {$endif} function QPixmap_create(): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create'; procedure QPixmap_destroy(handle: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_destroy'; function QPixmap_create(w: Integer; h: Integer): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create2'; function QPixmap_create(AnonParam1: PSize): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create3'; function QPixmap_create(fileName: PWideString; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create4'; function QPixmap_create(xpm: PAnsiChar): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create5'; function QPixmap_create(AnonParam1: QPixmapH): QPixmapH; cdecl; external Qt4PasLib name 'QPixmap_create6'; function QPixmap_isNull(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isNull'; function QPixmap_devType(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_devType'; function QPixmap_width(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_width'; function QPixmap_height(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_height'; procedure QPixmap_size(handle: QPixmapH; retval: PSize); cdecl; external Qt4PasLib name 'QPixmap_size'; procedure QPixmap_rect(handle: QPixmapH; retval: PRect); cdecl; external Qt4PasLib name 'QPixmap_rect'; function QPixmap_depth(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_depth'; function QPixmap_defaultDepth(): Integer; cdecl; external Qt4PasLib name 'QPixmap_defaultDepth'; procedure QPixmap_fill(handle: QPixmapH; fillColor: PQColor); cdecl; external Qt4PasLib name 'QPixmap_fill'; procedure QPixmap_fill(handle: QPixmapH; widget: QWidgetH; ofs: PQtPoint); cdecl; external Qt4PasLib name 'QPixmap_fill2'; procedure QPixmap_fill(handle: QPixmapH; widget: QWidgetH; xofs: Integer; yofs: Integer); cdecl; external Qt4PasLib name 'QPixmap_fill3'; procedure QPixmap_mask(handle: QPixmapH; retval: QBitmapH); cdecl; external Qt4PasLib name 'QPixmap_mask'; procedure QPixmap_setMask(handle: QPixmapH; AnonParam1: QBitmapH); cdecl; external Qt4PasLib name 'QPixmap_setMask'; procedure QPixmap_alphaChannel(handle: QPixmapH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_alphaChannel'; procedure QPixmap_setAlphaChannel(handle: QPixmapH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_setAlphaChannel'; function QPixmap_hasAlpha(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_hasAlpha'; function QPixmap_hasAlphaChannel(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_hasAlphaChannel'; procedure QPixmap_createHeuristicMask(handle: QPixmapH; retval: QBitmapH; clipTight: Boolean = True); cdecl; external Qt4PasLib name 'QPixmap_createHeuristicMask'; procedure QPixmap_createMaskFromColor(handle: QPixmapH; retval: QBitmapH; maskColor: PQColor); cdecl; external Qt4PasLib name 'QPixmap_createMaskFromColor'; procedure QPixmap_createMaskFromColor(handle: QPixmapH; retval: QBitmapH; maskColor: PQColor; mode: QtMaskMode); cdecl; external Qt4PasLib name 'QPixmap_createMaskFromColor2'; procedure QPixmap_grabWindow(retval: QPixmapH; AnonParam1: LongWord; x: Integer = 0; y: Integer = 0; w: Integer = -1; h: Integer = -1); cdecl; external Qt4PasLib name 'QPixmap_grabWindow'; procedure QPixmap_grabWidget(retval: QPixmapH; widget: QWidgetH; rect: PRect); cdecl; external Qt4PasLib name 'QPixmap_grabWidget'; procedure QPixmap_grabWidget(retval: QPixmapH; widget: QWidgetH; x: Integer = 0; y: Integer = 0; w: Integer = -1; h: Integer = -1); cdecl; external Qt4PasLib name 'QPixmap_grabWidget2'; procedure QPixmap_scaled(handle: QPixmapH; retval: QPixmapH; w: Integer; h: Integer; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaled'; procedure QPixmap_scaled(handle: QPixmapH; retval: QPixmapH; s: PSize; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaled2'; procedure QPixmap_scaledToWidth(handle: QPixmapH; retval: QPixmapH; w: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaledToWidth'; procedure QPixmap_scaledToHeight(handle: QPixmapH; retval: QPixmapH; h: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_scaledToHeight'; procedure QPixmap_transformed(handle: QPixmapH; retval: QPixmapH; AnonParam1: QMatrixH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_transformed'; procedure QPixmap_trueMatrix(retval: QMatrixH; m: QMatrixH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPixmap_trueMatrix'; procedure QPixmap_transformed(handle: QPixmapH; retval: QPixmapH; AnonParam1: QTransformH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QPixmap_transformed2'; procedure QPixmap_trueMatrix(retval: QTransformH; m: QTransformH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QPixmap_trueMatrix2'; procedure QPixmap_toImage(handle: QPixmapH; retval: QImageH); cdecl; external Qt4PasLib name 'QPixmap_toImage'; procedure QPixmap_fromImage(retval: QPixmapH; image: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QPixmap_fromImage'; function QPixmap_load(handle: QPixmapH; fileName: PWideString; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_load'; function QPixmap_loadFromData(handle: QPixmapH; buf: PByte; len: LongWord; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_loadFromData'; function QPixmap_loadFromData(handle: QPixmapH; data: QByteArrayH; format: PAnsiChar = nil; flags: QtImageConversionFlags = QtAutoColor): Boolean; cdecl; external Qt4PasLib name 'QPixmap_loadFromData2'; function QPixmap_save(handle: QPixmapH; fileName: PWideString; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QPixmap_save'; function QPixmap_save(handle: QPixmapH; device: QIODeviceH; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QPixmap_save2'; procedure QPixmap_copy(handle: QPixmapH; retval: QPixmapH; x: Integer; y: Integer; width: Integer; height: Integer); cdecl; external Qt4PasLib name 'QPixmap_copy'; procedure QPixmap_copy(handle: QPixmapH; retval: QPixmapH; rect: PRect = nil); cdecl; external Qt4PasLib name 'QPixmap_copy2'; function QPixmap_serialNumber(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_serialNumber'; function QPixmap_cacheKey(handle: QPixmapH): int64; cdecl; external Qt4PasLib name 'QPixmap_cacheKey'; function QPixmap_isDetached(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isDetached'; procedure QPixmap_detach(handle: QPixmapH); cdecl; external Qt4PasLib name 'QPixmap_detach'; function QPixmap_isQBitmap(handle: QPixmapH): Boolean; cdecl; external Qt4PasLib name 'QPixmap_isQBitmap'; {$ifdef BINUX } procedure QPixmap_fromX11Pixmap(retval: QPixmapH; pixmap: QtHANDLE; mode: QPixmapShareMode = QPixmapImplicitlyShared); cdecl; external Qt4PasLib name 'QPixmap_fromX11Pixmap'; function QPixmap_x11SetDefaultScreen(screen: Integer): Integer; cdecl; external Qt4PasLib name 'QPixmap_x11SetDefaultScreen'; procedure QPixmap_x11SetScreen(handle: QPixmapH; screen: Integer); cdecl; external Qt4PasLib name 'QPixmap_x11SetScreen'; function QPixmap_x11Info(handle: QPixmapH): QX11InfoH; cdecl; external Qt4PasLib name 'QPixmap_x11Info'; function QPixmap_x11PictureHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_x11PictureHandle'; {$endif} {$if defined(BINUX) or defined(QTOPIA)} function QPixmap_handle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_handle'; {$endif} function QPixmap_paintEngine(handle: QPixmapH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPixmap_paintEngine'; {$ifdef MSWINDOWS } function QPixmap_toWinHBITMAP(handle: QPixmapH; format: QPixmapHBitmapFormat = QPixmapNoAlpha): QHBITMAP; cdecl; external Qt4PasLib name 'QPixmap_toWinHBITMAP'; procedure QPixmap_fromWinHBITMAP(retval: QPixmapH; hbitmap: QHBITMAP; format: QPixmapHBitmapFormat = QPixmapNoAlpha); cdecl; external Qt4PasLib name 'QPixmap_fromWinHBITMAP'; {$endif} {$ifdef DARWIN } function QPixmap_toMacCGImageRef(handle: QPixmapH): CGImageRef; cdecl; external Qt4PasLib name 'QPixmap_toMacCGImageRef'; procedure QPixmap_fromMacCGImageRef(retval: QPixmapH; image: CGImageRef); cdecl; external Qt4PasLib name 'QPixmap_fromMacCGImageRef'; function QPixmap_macQDHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macQDHandle'; function QPixmap_macQDAlphaHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macQDAlphaHandle'; function QPixmap_macCGHandle(handle: QPixmapH): QtHANDLE; cdecl; external Qt4PasLib name 'QPixmap_macCGHandle'; {$endif} {$ifdef QTOPIA } function QPixmap_qwsBits(handle: QPixmapH): PByte; cdecl; external Qt4PasLib name 'QPixmap_qwsBits'; function QPixmap_qwsBytesPerLine(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_qwsBytesPerLine'; function QPixmap_clut(handle: QPixmapH): PQRgb; cdecl; external Qt4PasLib name 'QPixmap_clut'; function QPixmap_numCols(handle: QPixmapH): Integer; cdecl; external Qt4PasLib name 'QPixmap_numCols'; {$endif} type QImageInvertMode = ( // QImage::InvertMode (1) QImageInvertRgb, QImageInvertRgba ); QImageFormat = ( // QImage::Format (1) QImageFormat_Invalid, QImageFormat_Mono, QImageFormat_MonoLSB, QImageFormat_Indexed8, QImageFormat_RGB32, QImageFormat_ARGB32, QImageFormat_ARGB32_Premultiplied, QImageFormat_RGB16, QImageFormat_ARGB8565_Premultiplied, QImageFormat_RGB666, QImageFormat_ARGB6666_Premultiplied, QImageFormat_RGB555, QImageFormat_ARGB8555_Premultiplied, QImageFormat_RGB888, QImageFormat_RGB444, QImageFormat_ARGB4444_Premultiplied, QImageNImageFormats ); function QImage_create(): QImageH; cdecl; external Qt4PasLib name 'QImage_create'; procedure QImage_destroy(handle: QImageH); cdecl; external Qt4PasLib name 'QImage_destroy'; function QImage_create(size: PSize; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create2'; function QImage_create(width: Integer; height: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create3'; function QImage_create(data: PByte; width: Integer; height: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create4'; function QImage_create(data: PByte; width: Integer; height: Integer; bytesPerLine: Integer; format: QImageFormat): QImageH; cdecl; external Qt4PasLib name 'QImage_create6'; function QImage_create(xpm: PAnsiChar): QImageH; cdecl; external Qt4PasLib name 'QImage_create8'; function QImage_create(fileName: PWideString; format: PAnsiChar = nil): QImageH; cdecl; external Qt4PasLib name 'QImage_create9'; function QImage_create(fileName: PAnsiChar; format: PAnsiChar = nil): QImageH; cdecl; external Qt4PasLib name 'QImage_create10'; function QImage_create(AnonParam1: QImageH): QImageH; cdecl; external Qt4PasLib name 'QImage_create11'; function QImage_isNull(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isNull'; function QImage_devType(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_devType'; procedure QImage_detach(handle: QImageH); cdecl; external Qt4PasLib name 'QImage_detach'; function QImage_isDetached(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isDetached'; procedure QImage_copy(handle: QImageH; retval: QImageH; rect: PRect = nil); cdecl; external Qt4PasLib name 'QImage_copy'; procedure QImage_copy(handle: QImageH; retval: QImageH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_copy2'; function QImage_format(handle: QImageH): QImageFormat; cdecl; external Qt4PasLib name 'QImage_format'; procedure QImage_convertToFormat(handle: QImageH; retval: QImageH; f: QImageFormat; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QImage_convertToFormat'; function QImage_width(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_width'; function QImage_height(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_height'; procedure QImage_size(handle: QImageH; retval: PSize); cdecl; external Qt4PasLib name 'QImage_size'; procedure QImage_rect(handle: QImageH; retval: PRect); cdecl; external Qt4PasLib name 'QImage_rect'; function QImage_depth(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_depth'; function QImage_numColors(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_numColors'; function QImage_color(handle: QImageH; i: Integer): QRgb; cdecl; external Qt4PasLib name 'QImage_color'; procedure QImage_setColor(handle: QImageH; i: Integer; c: QRgb); cdecl; external Qt4PasLib name 'QImage_setColor'; procedure QImage_setNumColors(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setNumColors'; function QImage_allGray(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_allGray'; function QImage_isGrayscale(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_isGrayscale'; function QImage_bits(handle: QImageH): PByte; cdecl; external Qt4PasLib name 'QImage_bits'; function QImage_numBytes(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_numBytes'; function QImage_scanLine(handle: QImageH; AnonParam1: Integer): PByte; cdecl; external Qt4PasLib name 'QImage_scanLine'; function QImage_bytesPerLine(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_bytesPerLine'; function QImage_valid(handle: QImageH; x: Integer; y: Integer): Boolean; cdecl; external Qt4PasLib name 'QImage_valid'; function QImage_valid(handle: QImageH; pt: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QImage_valid2'; function QImage_pixelIndex(handle: QImageH; x: Integer; y: Integer): Integer; cdecl; external Qt4PasLib name 'QImage_pixelIndex'; function QImage_pixelIndex(handle: QImageH; pt: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QImage_pixelIndex2'; function QImage_pixel(handle: QImageH; x: Integer; y: Integer): QRgb; cdecl; external Qt4PasLib name 'QImage_pixel'; function QImage_pixel(handle: QImageH; pt: PQtPoint): QRgb; cdecl; external Qt4PasLib name 'QImage_pixel2'; procedure QImage_setPixel(handle: QImageH; x: Integer; y: Integer; index_or_rgb: LongWord); cdecl; external Qt4PasLib name 'QImage_setPixel'; procedure QImage_setPixel(handle: QImageH; pt: PQtPoint; index_or_rgb: LongWord); cdecl; external Qt4PasLib name 'QImage_setPixel2'; procedure QImage_fill(handle: QImageH; pixel: LongWord); cdecl; external Qt4PasLib name 'QImage_fill'; function QImage_hasAlphaChannel(handle: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImage_hasAlphaChannel'; procedure QImage_setAlphaChannel(handle: QImageH; alphaChannel: QImageH); cdecl; external Qt4PasLib name 'QImage_setAlphaChannel'; procedure QImage_alphaChannel(handle: QImageH; retval: QImageH); cdecl; external Qt4PasLib name 'QImage_alphaChannel'; procedure QImage_createAlphaMask(handle: QImageH; retval: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QImage_createAlphaMask'; procedure QImage_createHeuristicMask(handle: QImageH; retval: QImageH; clipTight: Boolean = True); cdecl; external Qt4PasLib name 'QImage_createHeuristicMask'; procedure QImage_createMaskFromColor(handle: QImageH; retval: QImageH; color: QRgb; mode: QtMaskMode = QtMaskInColor); cdecl; external Qt4PasLib name 'QImage_createMaskFromColor'; procedure QImage_scaled(handle: QImageH; retval: QImageH; w: Integer; h: Integer; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaled'; procedure QImage_scaled(handle: QImageH; retval: QImageH; s: PSize; aspectMode: QtAspectRatioMode = QtIgnoreAspectRatio; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaled2'; procedure QImage_scaledToWidth(handle: QImageH; retval: QImageH; w: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaledToWidth'; procedure QImage_scaledToHeight(handle: QImageH; retval: QImageH; h: Integer; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_scaledToHeight'; procedure QImage_transformed(handle: QImageH; retval: QImageH; matrix: QMatrixH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_transformed'; procedure QImage_trueMatrix(retval: QMatrixH; AnonParam1: QMatrixH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_trueMatrix'; procedure QImage_transformed(handle: QImageH; retval: QImageH; matrix: QTransformH; mode: QtTransformationMode = QtFastTransformation); cdecl; external Qt4PasLib name 'QImage_transformed2'; procedure QImage_trueMatrix(retval: QTransformH; AnonParam1: QTransformH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QImage_trueMatrix2'; procedure QImage_mirrored(handle: QImageH; retval: QImageH; horizontally: Boolean = False; vertically: Boolean = True); cdecl; external Qt4PasLib name 'QImage_mirrored'; procedure QImage_rgbSwapped(handle: QImageH; retval: QImageH); cdecl; external Qt4PasLib name 'QImage_rgbSwapped'; procedure QImage_invertPixels(handle: QImageH; AnonParam1: QImageInvertMode = QImageInvertRgb); cdecl; external Qt4PasLib name 'QImage_invertPixels'; function QImage_load(handle: QImageH; device: QIODeviceH; format: PAnsiChar): Boolean; cdecl; external Qt4PasLib name 'QImage_load'; function QImage_load(handle: QImageH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_load2'; function QImage_loadFromData(handle: QImageH; buf: PByte; len: Integer; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_loadFromData'; function QImage_loadFromData(handle: QImageH; data: QByteArrayH; aformat: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QImage_loadFromData2'; function QImage_save(handle: QImageH; fileName: PWideString; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QImage_save'; function QImage_save(handle: QImageH; device: QIODeviceH; format: PAnsiChar = nil; quality: Integer = -1): Boolean; cdecl; external Qt4PasLib name 'QImage_save2'; procedure QImage_fromData(retval: QImageH; data: PByte; size: Integer; format: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_fromData'; procedure QImage_fromData(retval: QImageH; data: QByteArrayH; format: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_fromData2'; function QImage_serialNumber(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_serialNumber'; function QImage_cacheKey(handle: QImageH): int64; cdecl; external Qt4PasLib name 'QImage_cacheKey'; function QImage_paintEngine(handle: QImageH): QPaintEngineH; cdecl; external Qt4PasLib name 'QImage_paintEngine'; function QImage_dotsPerMeterX(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_dotsPerMeterX'; function QImage_dotsPerMeterY(handle: QImageH): Integer; cdecl; external Qt4PasLib name 'QImage_dotsPerMeterY'; procedure QImage_setDotsPerMeterX(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setDotsPerMeterX'; procedure QImage_setDotsPerMeterY(handle: QImageH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QImage_setDotsPerMeterY'; procedure QImage_offset(handle: QImageH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QImage_offset'; procedure QImage_setOffset(handle: QImageH; AnonParam1: PQtPoint); cdecl; external Qt4PasLib name 'QImage_setOffset'; procedure QImage_textKeys(handle: QImageH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImage_textKeys'; procedure QImage_text(handle: QImageH; retval: PWideString; key: PWideString = nil); cdecl; external Qt4PasLib name 'QImage_text'; procedure QImage_setText(handle: QImageH; key: PWideString; value: PWideString); cdecl; external Qt4PasLib name 'QImage_setText'; procedure QImage_text(handle: QImageH; retval: PWideString; key: PAnsiChar; lang: PAnsiChar = nil); cdecl; external Qt4PasLib name 'QImage_text2'; procedure QImage_textLanguages(handle: QImageH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImage_textLanguages'; procedure QImage_setText(handle: QImageH; key: PAnsiChar; lang: PAnsiChar; AnonParam3: PWideString); cdecl; external Qt4PasLib name 'QImage_setText2'; function QBitmap_create(): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create'; procedure QBitmap_destroy(handle: QBitmapH); cdecl; external Qt4PasLib name 'QBitmap_destroy'; function QBitmap_create(AnonParam1: QPixmapH): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create2'; function QBitmap_create(w: Integer; h: Integer): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create3'; function QBitmap_create(AnonParam1: PSize): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create4'; function QBitmap_create(fileName: PWideString; format: PAnsiChar = nil): QBitmapH; cdecl; external Qt4PasLib name 'QBitmap_create5'; procedure QBitmap_clear(handle: QBitmapH); cdecl; external Qt4PasLib name 'QBitmap_clear'; procedure QBitmap_fromImage(retval: QBitmapH; image: QImageH; flags: QtImageConversionFlags = QtAutoColor); cdecl; external Qt4PasLib name 'QBitmap_fromImage'; procedure QBitmap_fromData(retval: QBitmapH; size: PSize; bits: PByte; monoFormat: QImageFormat = QImageFormat_MonoLSB); cdecl; external Qt4PasLib name 'QBitmap_fromData'; procedure QBitmap_transformed(handle: QBitmapH; retval: QBitmapH; AnonParam1: QMatrixH); cdecl; external Qt4PasLib name 'QBitmap_transformed'; procedure QBitmap_transformed(handle: QBitmapH; retval: QBitmapH; matrix: QTransformH); cdecl; external Qt4PasLib name 'QBitmap_transformed2'; function QPicture_create(formatVersion: Integer = -1): QPictureH; cdecl; external Qt4PasLib name 'QPicture_create'; procedure QPicture_destroy(handle: QPictureH); cdecl; external Qt4PasLib name 'QPicture_destroy'; function QPicture_create(AnonParam1: QPictureH): QPictureH; cdecl; external Qt4PasLib name 'QPicture_create2'; function QPicture_isNull(handle: QPictureH): Boolean; cdecl; external Qt4PasLib name 'QPicture_isNull'; function QPicture_devType(handle: QPictureH): Integer; cdecl; external Qt4PasLib name 'QPicture_devType'; function QPicture_size(handle: QPictureH): LongWord; cdecl; external Qt4PasLib name 'QPicture_size'; function QPicture_data(handle: QPictureH): PAnsiChar; cdecl; external Qt4PasLib name 'QPicture_data'; procedure QPicture_setData(handle: QPictureH; data: PAnsiChar; size: LongWord); cdecl; external Qt4PasLib name 'QPicture_setData'; function QPicture_play(handle: QPictureH; p: QPainterH): Boolean; cdecl; external Qt4PasLib name 'QPicture_play'; function QPicture_load(handle: QPictureH; dev: QIODeviceH; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_load'; function QPicture_load(handle: QPictureH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_load2'; function QPicture_save(handle: QPictureH; dev: QIODeviceH; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_save'; function QPicture_save(handle: QPictureH; fileName: PWideString; format: PAnsiChar = nil): Boolean; cdecl; external Qt4PasLib name 'QPicture_save2'; procedure QPicture_boundingRect(handle: QPictureH; retval: PRect); cdecl; external Qt4PasLib name 'QPicture_boundingRect'; procedure QPicture_setBoundingRect(handle: QPictureH; r: PRect); cdecl; external Qt4PasLib name 'QPicture_setBoundingRect'; procedure QPicture_detach(handle: QPictureH); cdecl; external Qt4PasLib name 'QPicture_detach'; function QPicture_isDetached(handle: QPictureH): Boolean; cdecl; external Qt4PasLib name 'QPicture_isDetached'; function QPicture_pictureFormat(fileName: PWideString): PAnsiChar; cdecl; external Qt4PasLib name 'QPicture_pictureFormat'; procedure QPicture_inputFormatList(retval: QStringListH); cdecl; external Qt4PasLib name 'QPicture_inputFormatList'; procedure QPicture_outputFormatList(retval: QStringListH); cdecl; external Qt4PasLib name 'QPicture_outputFormatList'; function QPicture_paintEngine(handle: QPictureH): QPaintEngineH; cdecl; external Qt4PasLib name 'QPicture_paintEngine'; type QImageIOHandlerImageOption = ( // QImageIOHandler::ImageOption (1) QImageIOHandlerSize, QImageIOHandlerClipRect, QImageIOHandlerDescription, QImageIOHandlerScaledClipRect, QImageIOHandlerScaledSize, QImageIOHandlerCompressionRatio, QImageIOHandlerGamma, QImageIOHandlerQuality, QImageIOHandlerName, QImageIOHandlerSubType, QImageIOHandlerIncrementalReading, QImageIOHandlerEndianness, QImageIOHandlerAnimation, QImageIOHandlerBackgroundColor, QImageIOHandlerImageFormat ); procedure QImageIOHandler_setDevice(handle: QImageIOHandlerH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageIOHandler_setDevice'; function QImageIOHandler_device(handle: QImageIOHandlerH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageIOHandler_device'; procedure QImageIOHandler_setFormat(handle: QImageIOHandlerH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_setFormat'; procedure QImageIOHandler_format(handle: QImageIOHandlerH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_format'; procedure QImageIOHandler_name(handle: QImageIOHandlerH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageIOHandler_name'; function QImageIOHandler_canRead(handle: QImageIOHandlerH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_canRead'; function QImageIOHandler_read(handle: QImageIOHandlerH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_read'; function QImageIOHandler_write(handle: QImageIOHandlerH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_write'; procedure QImageIOHandler_option(handle: QImageIOHandlerH; retval: QVariantH; option: QImageIOHandlerImageOption); cdecl; external Qt4PasLib name 'QImageIOHandler_option'; procedure QImageIOHandler_setOption(handle: QImageIOHandlerH; option: QImageIOHandlerImageOption; value: QVariantH); cdecl; external Qt4PasLib name 'QImageIOHandler_setOption'; function QImageIOHandler_supportsOption(handle: QImageIOHandlerH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_supportsOption'; function QImageIOHandler_jumpToNextImage(handle: QImageIOHandlerH): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_jumpToNextImage'; function QImageIOHandler_jumpToImage(handle: QImageIOHandlerH; imageNumber: Integer): Boolean; cdecl; external Qt4PasLib name 'QImageIOHandler_jumpToImage'; function QImageIOHandler_loopCount(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_loopCount'; function QImageIOHandler_imageCount(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_imageCount'; function QImageIOHandler_nextImageDelay(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_nextImageDelay'; function QImageIOHandler_currentImageNumber(handle: QImageIOHandlerH): Integer; cdecl; external Qt4PasLib name 'QImageIOHandler_currentImageNumber'; procedure QImageIOHandler_currentImageRect(handle: QImageIOHandlerH; retval: PRect); cdecl; external Qt4PasLib name 'QImageIOHandler_currentImageRect'; type QImageReaderImageReaderError = ( // QImageReader::ImageReaderError (1) QImageReaderUnknownError, QImageReaderFileNotFoundError, QImageReaderDeviceError, QImageReaderUnsupportedFormatError, QImageReaderInvalidDataError ); function QImageReader_create(): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create'; procedure QImageReader_destroy(handle: QImageReaderH); cdecl; external Qt4PasLib name 'QImageReader_destroy'; function QImageReader_create(device: QIODeviceH; format: QByteArrayH = nil): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create2'; function QImageReader_create(fileName: PWideString; format: QByteArrayH = nil): QImageReaderH; cdecl; external Qt4PasLib name 'QImageReader_create3'; procedure QImageReader_setFormat(handle: QImageReaderH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageReader_setFormat'; procedure QImageReader_format(handle: QImageReaderH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageReader_format'; procedure QImageReader_setAutoDetectImageFormat(handle: QImageReaderH; enabled: Boolean); cdecl; external Qt4PasLib name 'QImageReader_setAutoDetectImageFormat'; function QImageReader_autoDetectImageFormat(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_autoDetectImageFormat'; procedure QImageReader_setDevice(handle: QImageReaderH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageReader_setDevice'; function QImageReader_device(handle: QImageReaderH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageReader_device'; procedure QImageReader_setFileName(handle: QImageReaderH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageReader_setFileName'; procedure QImageReader_fileName(handle: QImageReaderH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageReader_fileName'; procedure QImageReader_size(handle: QImageReaderH; retval: PSize); cdecl; external Qt4PasLib name 'QImageReader_size'; function QImageReader_imageFormat(handle: QImageReaderH): QImageFormat; cdecl; external Qt4PasLib name 'QImageReader_imageFormat'; procedure QImageReader_textKeys(handle: QImageReaderH; retval: QStringListH); cdecl; external Qt4PasLib name 'QImageReader_textKeys'; procedure QImageReader_text(handle: QImageReaderH; retval: PWideString; key: PWideString); cdecl; external Qt4PasLib name 'QImageReader_text'; procedure QImageReader_setClipRect(handle: QImageReaderH; rect: PRect); cdecl; external Qt4PasLib name 'QImageReader_setClipRect'; procedure QImageReader_clipRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_clipRect'; procedure QImageReader_setScaledSize(handle: QImageReaderH; size: PSize); cdecl; external Qt4PasLib name 'QImageReader_setScaledSize'; procedure QImageReader_scaledSize(handle: QImageReaderH; retval: PSize); cdecl; external Qt4PasLib name 'QImageReader_scaledSize'; procedure QImageReader_setQuality(handle: QImageReaderH; quality: Integer); cdecl; external Qt4PasLib name 'QImageReader_setQuality'; function QImageReader_quality(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_quality'; procedure QImageReader_setScaledClipRect(handle: QImageReaderH; rect: PRect); cdecl; external Qt4PasLib name 'QImageReader_setScaledClipRect'; procedure QImageReader_scaledClipRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_scaledClipRect'; procedure QImageReader_setBackgroundColor(handle: QImageReaderH; color: PQColor); cdecl; external Qt4PasLib name 'QImageReader_setBackgroundColor'; procedure QImageReader_backgroundColor(handle: QImageReaderH; retval: PQColor); cdecl; external Qt4PasLib name 'QImageReader_backgroundColor'; function QImageReader_supportsAnimation(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_supportsAnimation'; function QImageReader_canRead(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_canRead'; procedure QImageReader_read(handle: QImageReaderH; retval: QImageH); cdecl; external Qt4PasLib name 'QImageReader_read'; function QImageReader_jumpToNextImage(handle: QImageReaderH): Boolean; cdecl; external Qt4PasLib name 'QImageReader_jumpToNextImage'; function QImageReader_jumpToImage(handle: QImageReaderH; imageNumber: Integer): Boolean; cdecl; external Qt4PasLib name 'QImageReader_jumpToImage'; function QImageReader_loopCount(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_loopCount'; function QImageReader_imageCount(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_imageCount'; function QImageReader_nextImageDelay(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_nextImageDelay'; function QImageReader_currentImageNumber(handle: QImageReaderH): Integer; cdecl; external Qt4PasLib name 'QImageReader_currentImageNumber'; procedure QImageReader_currentImageRect(handle: QImageReaderH; retval: PRect); cdecl; external Qt4PasLib name 'QImageReader_currentImageRect'; function QImageReader_error(handle: QImageReaderH): QImageReaderImageReaderError; cdecl; external Qt4PasLib name 'QImageReader_error'; procedure QImageReader_errorString(handle: QImageReaderH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageReader_errorString'; function QImageReader_supportsOption(handle: QImageReaderH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageReader_supportsOption'; procedure QImageReader_imageFormat(retval: QByteArrayH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageReader_imageFormat2'; procedure QImageReader_imageFormat(retval: QByteArrayH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageReader_imageFormat3'; type QImageWriterImageWriterError = ( // QImageWriter::ImageWriterError (1) QImageWriterUnknownError, QImageWriterDeviceError, QImageWriterUnsupportedFormatError ); function QImageWriter_create(): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create'; procedure QImageWriter_destroy(handle: QImageWriterH); cdecl; external Qt4PasLib name 'QImageWriter_destroy'; function QImageWriter_create(device: QIODeviceH; format: QByteArrayH): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create2'; function QImageWriter_create(fileName: PWideString; format: QByteArrayH = nil): QImageWriterH; cdecl; external Qt4PasLib name 'QImageWriter_create3'; procedure QImageWriter_setFormat(handle: QImageWriterH; format: QByteArrayH); cdecl; external Qt4PasLib name 'QImageWriter_setFormat'; procedure QImageWriter_format(handle: QImageWriterH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QImageWriter_format'; procedure QImageWriter_setDevice(handle: QImageWriterH; device: QIODeviceH); cdecl; external Qt4PasLib name 'QImageWriter_setDevice'; function QImageWriter_device(handle: QImageWriterH): QIODeviceH; cdecl; external Qt4PasLib name 'QImageWriter_device'; procedure QImageWriter_setFileName(handle: QImageWriterH; fileName: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setFileName'; procedure QImageWriter_fileName(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_fileName'; procedure QImageWriter_setQuality(handle: QImageWriterH; quality: Integer); cdecl; external Qt4PasLib name 'QImageWriter_setQuality'; function QImageWriter_quality(handle: QImageWriterH): Integer; cdecl; external Qt4PasLib name 'QImageWriter_quality'; procedure QImageWriter_setCompression(handle: QImageWriterH; compression: Integer); cdecl; external Qt4PasLib name 'QImageWriter_setCompression'; function QImageWriter_compression(handle: QImageWriterH): Integer; cdecl; external Qt4PasLib name 'QImageWriter_compression'; procedure QImageWriter_setGamma(handle: QImageWriterH; gamma: Single); cdecl; external Qt4PasLib name 'QImageWriter_setGamma'; function QImageWriter_gamma(handle: QImageWriterH): Single; cdecl; external Qt4PasLib name 'QImageWriter_gamma'; procedure QImageWriter_setDescription(handle: QImageWriterH; description: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setDescription'; procedure QImageWriter_description(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_description'; procedure QImageWriter_setText(handle: QImageWriterH; key: PWideString; text: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_setText'; function QImageWriter_canWrite(handle: QImageWriterH): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_canWrite'; function QImageWriter_write(handle: QImageWriterH; image: QImageH): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_write'; function QImageWriter_error(handle: QImageWriterH): QImageWriterImageWriterError; cdecl; external Qt4PasLib name 'QImageWriter_error'; procedure QImageWriter_errorString(handle: QImageWriterH; retval: PWideString); cdecl; external Qt4PasLib name 'QImageWriter_errorString'; function QImageWriter_supportsOption(handle: QImageWriterH; option: QImageIOHandlerImageOption): Boolean; cdecl; external Qt4PasLib name 'QImageWriter_supportsOption'; type QValidatorState = ( // QValidator::State (1) QValidatorInvalid, QValidatorIntermediate, QValidatorAcceptable ); type QDoubleValidatorNotation = ( // QDoubleValidator::Notation (1) QDoubleValidatorStandardNotation, QDoubleValidatorScientificNotation ); procedure QValidator_setLocale(handle: QValidatorH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QValidator_setLocale'; procedure QValidator_locale(handle: QValidatorH; retval: QLocaleH); cdecl; external Qt4PasLib name 'QValidator_locale'; function QValidator_validate(handle: QValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QValidator_validate'; procedure QValidator_fixup(handle: QValidatorH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QValidator_fixup'; function QIntValidator_create(parent: QObjectH): QIntValidatorH; cdecl; external Qt4PasLib name 'QIntValidator_create'; procedure QIntValidator_destroy(handle: QIntValidatorH); cdecl; external Qt4PasLib name 'QIntValidator_destroy'; function QIntValidator_create(bottom: Integer; top: Integer; parent: QObjectH): QIntValidatorH; cdecl; external Qt4PasLib name 'QIntValidator_create2'; function QIntValidator_validate(handle: QIntValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QIntValidator_validate'; procedure QIntValidator_setBottom(handle: QIntValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setBottom'; procedure QIntValidator_setTop(handle: QIntValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setTop'; procedure QIntValidator_setRange(handle: QIntValidatorH; bottom: Integer; top: Integer); cdecl; external Qt4PasLib name 'QIntValidator_setRange'; function QIntValidator_bottom(handle: QIntValidatorH): Integer; cdecl; external Qt4PasLib name 'QIntValidator_bottom'; function QIntValidator_top(handle: QIntValidatorH): Integer; cdecl; external Qt4PasLib name 'QIntValidator_top'; function QDoubleValidator_create(parent: QObjectH): QDoubleValidatorH; cdecl; external Qt4PasLib name 'QDoubleValidator_create'; procedure QDoubleValidator_destroy(handle: QDoubleValidatorH); cdecl; external Qt4PasLib name 'QDoubleValidator_destroy'; function QDoubleValidator_create(bottom: Double; top: Double; decimals: Integer; parent: QObjectH): QDoubleValidatorH; cdecl; external Qt4PasLib name 'QDoubleValidator_create2'; function QDoubleValidator_validate(handle: QDoubleValidatorH; AnonParam1: PWideString; AnonParam2: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QDoubleValidator_validate'; procedure QDoubleValidator_setRange(handle: QDoubleValidatorH; bottom: Double; top: Double; decimals: Integer = 0); cdecl; external Qt4PasLib name 'QDoubleValidator_setRange'; procedure QDoubleValidator_setBottom(handle: QDoubleValidatorH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QDoubleValidator_setBottom'; procedure QDoubleValidator_setTop(handle: QDoubleValidatorH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QDoubleValidator_setTop'; procedure QDoubleValidator_setDecimals(handle: QDoubleValidatorH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QDoubleValidator_setDecimals'; procedure QDoubleValidator_setNotation(handle: QDoubleValidatorH; AnonParam1: QDoubleValidatorNotation); cdecl; external Qt4PasLib name 'QDoubleValidator_setNotation'; function QDoubleValidator_bottom(handle: QDoubleValidatorH): Double; cdecl; external Qt4PasLib name 'QDoubleValidator_bottom'; function QDoubleValidator_top(handle: QDoubleValidatorH): Double; cdecl; external Qt4PasLib name 'QDoubleValidator_top'; function QDoubleValidator_decimals(handle: QDoubleValidatorH): Integer; cdecl; external Qt4PasLib name 'QDoubleValidator_decimals'; function QDoubleValidator_notation(handle: QDoubleValidatorH): QDoubleValidatorNotation; cdecl; external Qt4PasLib name 'QDoubleValidator_notation'; function QRegExpValidator_create(parent: QObjectH): QRegExpValidatorH; cdecl; external Qt4PasLib name 'QRegExpValidator_create'; procedure QRegExpValidator_destroy(handle: QRegExpValidatorH); cdecl; external Qt4PasLib name 'QRegExpValidator_destroy'; function QRegExpValidator_create(rx: QRegExpH; parent: QObjectH): QRegExpValidatorH; cdecl; external Qt4PasLib name 'QRegExpValidator_create2'; function QRegExpValidator_validate(handle: QRegExpValidatorH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QRegExpValidator_validate'; procedure QRegExpValidator_setRegExp(handle: QRegExpValidatorH; rx: QRegExpH); cdecl; external Qt4PasLib name 'QRegExpValidator_setRegExp'; function QRegExpValidator_regExp(handle: QRegExpValidatorH): QRegExpH; cdecl; external Qt4PasLib name 'QRegExpValidator_regExp'; type QFrameShape = ( //QFrame::Shape (2) QFrameNoFrame = 0, QFrameBox = $0001, QFramePanel = $0002, QFrameWinPanel = $0003, QFrameHLine = $0004, QFrameVLine = $0005, QFrameStyledPanel = $0006 ); QFrameShadow = ( //QFrame::Shadow (2) QFramePlain = $0010, QFrameRaised = $0020, QFrameSunken = $0030 ); QFrameStyleMask = ( //QFrame::StyleMask (2) QFrameShape_Mask = $000f, QFrameShadow_Mask = $00f0 ); function QFrame_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QFrameH; cdecl; external Qt4PasLib name 'QFrame_create'; procedure QFrame_destroy(handle: QFrameH); cdecl; external Qt4PasLib name 'QFrame_destroy'; function QFrame_frameStyle(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_frameStyle'; procedure QFrame_setFrameStyle(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setFrameStyle'; function QFrame_frameWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_frameWidth'; procedure QFrame_sizeHint(handle: QFrameH; retval: PSize); cdecl; external Qt4PasLib name 'QFrame_sizeHint'; function QFrame_frameShape(handle: QFrameH): QFrameShape; cdecl; external Qt4PasLib name 'QFrame_frameShape'; procedure QFrame_setFrameShape(handle: QFrameH; AnonParam1: QFrameShape); cdecl; external Qt4PasLib name 'QFrame_setFrameShape'; function QFrame_frameShadow(handle: QFrameH): QFrameShadow; cdecl; external Qt4PasLib name 'QFrame_frameShadow'; procedure QFrame_setFrameShadow(handle: QFrameH; AnonParam1: QFrameShadow); cdecl; external Qt4PasLib name 'QFrame_setFrameShadow'; function QFrame_lineWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_lineWidth'; procedure QFrame_setLineWidth(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setLineWidth'; function QFrame_midLineWidth(handle: QFrameH): Integer; cdecl; external Qt4PasLib name 'QFrame_midLineWidth'; procedure QFrame_setMidLineWidth(handle: QFrameH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QFrame_setMidLineWidth'; procedure QFrame_frameRect(handle: QFrameH; retval: PRect); cdecl; external Qt4PasLib name 'QFrame_frameRect'; procedure QFrame_setFrameRect(handle: QFrameH; AnonParam1: PRect); cdecl; external Qt4PasLib name 'QFrame_setFrameRect'; function QStackedWidget_create(parent: QWidgetH = nil): QStackedWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_create'; procedure QStackedWidget_destroy(handle: QStackedWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_destroy'; function QStackedWidget_addWidget(handle: QStackedWidgetH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_addWidget'; function QStackedWidget_insertWidget(handle: QStackedWidgetH; index: Integer; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_insertWidget'; procedure QStackedWidget_removeWidget(handle: QStackedWidgetH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_removeWidget'; function QStackedWidget_currentWidget(handle: QStackedWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_currentWidget'; function QStackedWidget_currentIndex(handle: QStackedWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_currentIndex'; function QStackedWidget_indexOf(handle: QStackedWidgetH; AnonParam1: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_indexOf'; function QStackedWidget_widget(handle: QStackedWidgetH; AnonParam1: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QStackedWidget_widget'; function QStackedWidget_count(handle: QStackedWidgetH): Integer; cdecl; external Qt4PasLib name 'QStackedWidget_count'; procedure QStackedWidget_setCurrentIndex(handle: QStackedWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QStackedWidget_setCurrentIndex'; procedure QStackedWidget_setCurrentWidget(handle: QStackedWidgetH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStackedWidget_setCurrentWidget'; type QStackedWidget_currentChanged_Event = procedure (AnonParam1: Integer) of object cdecl; QStackedWidget_widgetRemoved_Event = procedure (index: Integer) of object cdecl; function QAbstractScrollArea_create(parent: QWidgetH = nil): QAbstractScrollAreaH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_create'; procedure QAbstractScrollArea_destroy(handle: QAbstractScrollAreaH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_destroy'; function QAbstractScrollArea_verticalScrollBarPolicy(handle: QAbstractScrollAreaH): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QAbstractScrollArea_verticalScrollBarPolicy'; procedure QAbstractScrollArea_setVerticalScrollBarPolicy(handle: QAbstractScrollAreaH; AnonParam1: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setVerticalScrollBarPolicy'; function QAbstractScrollArea_verticalScrollBar(handle: QAbstractScrollAreaH): QScrollBarH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_verticalScrollBar'; procedure QAbstractScrollArea_setVerticalScrollBar(handle: QAbstractScrollAreaH; scrollbar: QScrollBarH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setVerticalScrollBar'; function QAbstractScrollArea_horizontalScrollBarPolicy(handle: QAbstractScrollAreaH): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QAbstractScrollArea_horizontalScrollBarPolicy'; procedure QAbstractScrollArea_setHorizontalScrollBarPolicy(handle: QAbstractScrollAreaH; AnonParam1: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setHorizontalScrollBarPolicy'; function QAbstractScrollArea_horizontalScrollBar(handle: QAbstractScrollAreaH): QScrollBarH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_horizontalScrollBar'; procedure QAbstractScrollArea_setHorizontalScrollBar(handle: QAbstractScrollAreaH; scrollbar: QScrollBarH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setHorizontalScrollBar'; function QAbstractScrollArea_cornerWidget(handle: QAbstractScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_cornerWidget'; procedure QAbstractScrollArea_setCornerWidget(handle: QAbstractScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setCornerWidget'; procedure QAbstractScrollArea_addScrollBarWidget(handle: QAbstractScrollAreaH; widget: QWidgetH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractScrollArea_addScrollBarWidget'; procedure QAbstractScrollArea_scrollBarWidgets(handle: QAbstractScrollAreaH; retval: PPtrIntArray; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractScrollArea_scrollBarWidgets'; function QAbstractScrollArea_viewport(handle: QAbstractScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_viewport'; procedure QAbstractScrollArea_setViewport(handle: QAbstractScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_setViewport'; procedure QAbstractScrollArea_maximumViewportSize(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_maximumViewportSize'; procedure QAbstractScrollArea_minimumSizeHint(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_minimumSizeHint'; procedure QAbstractScrollArea_sizeHint(handle: QAbstractScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractScrollArea_sizeHint'; function QLCLAbstractScrollArea_create(parent: QWidgetH = nil): QLCLAbstractScrollAreaH; cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_create'; procedure QLCLAbstractScrollArea_destroy(handle: QLCLAbstractScrollAreaH); cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_destroy'; procedure QLCLAbstractScrollArea_override_viewportEvent(handle: QLCLAbstractScrollAreaH; hook: QLCLAbstractScrollArea_viewportEvent_Override); cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_override_viewportEvent'; function QLCLAbstractScrollArea_InheritedViewportEvent(handle: QLCLAbstractScrollAreaH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QLCLAbstractScrollArea_InheritedViewportEvent'; type QAbstractSliderSliderAction = ( // QAbstractSlider::SliderAction (1) QAbstractSliderSliderNoAction, QAbstractSliderSliderSingleStepAdd, QAbstractSliderSliderSingleStepSub, QAbstractSliderSliderPageStepAdd, QAbstractSliderSliderPageStepSub, QAbstractSliderSliderToMinimum, QAbstractSliderSliderToMaximum, QAbstractSliderSliderMove ); function QAbstractSlider_create(parent: QWidgetH = nil): QAbstractSliderH; cdecl; external Qt4PasLib name 'QAbstractSlider_create'; procedure QAbstractSlider_destroy(handle: QAbstractSliderH); cdecl; external Qt4PasLib name 'QAbstractSlider_destroy'; function QAbstractSlider_orientation(handle: QAbstractSliderH): QtOrientation; cdecl; external Qt4PasLib name 'QAbstractSlider_orientation'; procedure QAbstractSlider_setMinimum(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setMinimum'; function QAbstractSlider_minimum(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_minimum'; procedure QAbstractSlider_setMaximum(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setMaximum'; function QAbstractSlider_maximum(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_maximum'; procedure QAbstractSlider_setRange(handle: QAbstractSliderH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setRange'; procedure QAbstractSlider_setSingleStep(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setSingleStep'; function QAbstractSlider_singleStep(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_singleStep'; procedure QAbstractSlider_setPageStep(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setPageStep'; function QAbstractSlider_pageStep(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_pageStep'; procedure QAbstractSlider_setTracking(handle: QAbstractSliderH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setTracking'; function QAbstractSlider_hasTracking(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_hasTracking'; procedure QAbstractSlider_setSliderDown(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setSliderDown'; function QAbstractSlider_isSliderDown(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_isSliderDown'; procedure QAbstractSlider_setSliderPosition(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setSliderPosition'; function QAbstractSlider_sliderPosition(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_sliderPosition'; procedure QAbstractSlider_setInvertedAppearance(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setInvertedAppearance'; function QAbstractSlider_invertedAppearance(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_invertedAppearance'; procedure QAbstractSlider_setInvertedControls(handle: QAbstractSliderH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSlider_setInvertedControls'; function QAbstractSlider_invertedControls(handle: QAbstractSliderH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSlider_invertedControls'; function QAbstractSlider_value(handle: QAbstractSliderH): Integer; cdecl; external Qt4PasLib name 'QAbstractSlider_value'; procedure QAbstractSlider_triggerAction(handle: QAbstractSliderH; action: QAbstractSliderSliderAction); cdecl; external Qt4PasLib name 'QAbstractSlider_triggerAction'; procedure QAbstractSlider_setValue(handle: QAbstractSliderH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractSlider_setValue'; procedure QAbstractSlider_setOrientation(handle: QAbstractSliderH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QAbstractSlider_setOrientation'; type QAbstractSlider_valueChanged_Event = procedure (value: Integer) of object cdecl; QAbstractSlider_sliderPressed_Event = procedure () of object cdecl; QAbstractSlider_sliderMoved_Event = procedure (position: Integer) of object cdecl; QAbstractSlider_sliderReleased_Event = procedure () of object cdecl; QAbstractSlider_rangeChanged_Event = procedure (min: Integer; max: Integer) of object cdecl; QAbstractSlider_actionTriggered_Event = procedure (action: Integer) of object cdecl; function QScrollBar_create(parent: QWidgetH = nil): QScrollBarH; cdecl; external Qt4PasLib name 'QScrollBar_create'; procedure QScrollBar_destroy(handle: QScrollBarH); cdecl; external Qt4PasLib name 'QScrollBar_destroy'; function QScrollBar_create(AnonParam1: QtOrientation; parent: QWidgetH = nil): QScrollBarH; cdecl; external Qt4PasLib name 'QScrollBar_create2'; procedure QScrollBar_sizeHint(handle: QScrollBarH; retval: PSize); cdecl; external Qt4PasLib name 'QScrollBar_sizeHint'; function QScrollBar_event(handle: QScrollBarH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QScrollBar_event'; function QMenu_create(parent: QWidgetH = nil): QMenuH; cdecl; external Qt4PasLib name 'QMenu_create'; procedure QMenu_destroy(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_destroy'; function QMenu_create(title: PWideString; parent: QWidgetH = nil): QMenuH; cdecl; external Qt4PasLib name 'QMenu_create2'; function QMenu_addAction(handle: QMenuH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction'; function QMenu_addAction(handle: QMenuH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction2'; function QMenu_addAction(handle: QMenuH; text: PWideString; receiver: QObjectH; member: PAnsiChar; shortcut: QKeySequenceH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction3'; function QMenu_addAction(handle: QMenuH; icon: QIconH; text: PWideString; receiver: QObjectH; member: PAnsiChar; shortcut: QKeySequenceH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_addAction4'; function QMenu_addMenu(handle: QMenuH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_addMenu'; function QMenu_addMenu(handle: QMenuH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenu_addMenu2'; function QMenu_addMenu(handle: QMenuH; icon: QIconH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenu_addMenu3'; function QMenu_addSeparator(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_addSeparator'; function QMenu_insertMenu(handle: QMenuH; before: QActionH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_insertMenu'; function QMenu_insertSeparator(handle: QMenuH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QMenu_insertSeparator'; function QMenu_isEmpty(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isEmpty'; procedure QMenu_clear(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_clear'; procedure QMenu_setTearOffEnabled(handle: QMenuH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QMenu_setTearOffEnabled'; function QMenu_isTearOffEnabled(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isTearOffEnabled'; function QMenu_isTearOffMenuVisible(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_isTearOffMenuVisible'; procedure QMenu_hideTearOffMenu(handle: QMenuH); cdecl; external Qt4PasLib name 'QMenu_hideTearOffMenu'; procedure QMenu_setDefaultAction(handle: QMenuH; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenu_setDefaultAction'; function QMenu_defaultAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_defaultAction'; procedure QMenu_setActiveAction(handle: QMenuH; act: QActionH); cdecl; external Qt4PasLib name 'QMenu_setActiveAction'; function QMenu_activeAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_activeAction'; procedure QMenu_popup(handle: QMenuH; pos: PQtPoint; at: QActionH = nil); cdecl; external Qt4PasLib name 'QMenu_popup'; function QMenu_exec(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec'; function QMenu_exec(handle: QMenuH; pos: PQtPoint; at: QActionH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec2'; function QMenu_exec(actions: PPtrIntArray; pos: PQtPoint; at: QActionH = nil): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec3'; function QMenu_exec(actions: PPtrIntArray; pos: PQtPoint; at: QActionH; parent: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QMenu_exec4'; procedure QMenu_sizeHint(handle: QMenuH; retval: PSize); cdecl; external Qt4PasLib name 'QMenu_sizeHint'; procedure QMenu_actionGeometry(handle: QMenuH; retval: PRect; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenu_actionGeometry'; function QMenu_actionAt(handle: QMenuH; AnonParam1: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QMenu_actionAt'; function QMenu_menuAction(handle: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenu_menuAction'; procedure QMenu_title(handle: QMenuH; retval: PWideString); cdecl; external Qt4PasLib name 'QMenu_title'; procedure QMenu_setTitle(handle: QMenuH; title: PWideString); cdecl; external Qt4PasLib name 'QMenu_setTitle'; procedure QMenu_icon(handle: QMenuH; retval: QIconH); cdecl; external Qt4PasLib name 'QMenu_icon'; procedure QMenu_setIcon(handle: QMenuH; icon: QIconH); cdecl; external Qt4PasLib name 'QMenu_setIcon'; procedure QMenu_setNoReplayFor(handle: QMenuH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMenu_setNoReplayFor'; function QMenu_separatorsCollapsible(handle: QMenuH): Boolean; cdecl; external Qt4PasLib name 'QMenu_separatorsCollapsible'; procedure QMenu_setSeparatorsCollapsible(handle: QMenuH; collapse: Boolean); cdecl; external Qt4PasLib name 'QMenu_setSeparatorsCollapsible'; type QMenu_aboutToShow_Event = procedure () of object cdecl; QMenu_aboutToHide_Event = procedure () of object cdecl; QMenu_triggered_Event = procedure (action: QActionH) of object cdecl; QMenu_hovered_Event = procedure (action: QActionH) of object cdecl; function QMenuBar_create(parent: QWidgetH = nil): QMenuBarH; cdecl; external Qt4PasLib name 'QMenuBar_create'; procedure QMenuBar_destroy(handle: QMenuBarH); cdecl; external Qt4PasLib name 'QMenuBar_destroy'; function QMenuBar_addAction(handle: QMenuBarH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addAction'; function QMenuBar_addAction(handle: QMenuBarH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addAction2'; function QMenuBar_addMenu(handle: QMenuBarH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu'; function QMenuBar_addMenu(handle: QMenuBarH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu2'; function QMenuBar_addMenu(handle: QMenuBarH; icon: QIconH; title: PWideString): QMenuH; cdecl; external Qt4PasLib name 'QMenuBar_addMenu3'; function QMenuBar_addSeparator(handle: QMenuBarH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_addSeparator'; function QMenuBar_insertSeparator(handle: QMenuBarH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_insertSeparator'; function QMenuBar_insertMenu(handle: QMenuBarH; before: QActionH; menu: QMenuH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_insertMenu'; procedure QMenuBar_clear(handle: QMenuBarH); cdecl; external Qt4PasLib name 'QMenuBar_clear'; function QMenuBar_activeAction(handle: QMenuBarH): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_activeAction'; procedure QMenuBar_setActiveAction(handle: QMenuBarH; action: QActionH); cdecl; external Qt4PasLib name 'QMenuBar_setActiveAction'; procedure QMenuBar_setDefaultUp(handle: QMenuBarH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QMenuBar_setDefaultUp'; function QMenuBar_isDefaultUp(handle: QMenuBarH): Boolean; cdecl; external Qt4PasLib name 'QMenuBar_isDefaultUp'; procedure QMenuBar_sizeHint(handle: QMenuBarH; retval: PSize); cdecl; external Qt4PasLib name 'QMenuBar_sizeHint'; procedure QMenuBar_minimumSizeHint(handle: QMenuBarH; retval: PSize); cdecl; external Qt4PasLib name 'QMenuBar_minimumSizeHint'; function QMenuBar_heightForWidth(handle: QMenuBarH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QMenuBar_heightForWidth'; procedure QMenuBar_actionGeometry(handle: QMenuBarH; retval: PRect; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QMenuBar_actionGeometry'; function QMenuBar_actionAt(handle: QMenuBarH; AnonParam1: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QMenuBar_actionAt'; procedure QMenuBar_setCornerWidget(handle: QMenuBarH; w: QWidgetH; corner: QtCorner = QtTopRightCorner); cdecl; external Qt4PasLib name 'QMenuBar_setCornerWidget'; function QMenuBar_cornerWidget(handle: QMenuBarH; corner: QtCorner = QtTopRightCorner): QWidgetH; cdecl; external Qt4PasLib name 'QMenuBar_cornerWidget'; procedure QMenuBar_setVisible(handle: QMenuBarH; visible: Boolean); cdecl; external Qt4PasLib name 'QMenuBar_setVisible'; {$ifdef DARWIN } function QMenuBar_macMenu(handle: QMenuBarH): Pointer; cdecl; external Qt4PasLib name 'QMenuBar_macMenu'; function QMenuBar_macUpdateMenuBar(): Boolean; cdecl; external Qt4PasLib name 'QMenuBar_macUpdateMenuBar'; {$endif} type QMenuBar_triggered_Event = procedure (action: QActionH) of object cdecl; QMenuBar_hovered_Event = procedure (action: QActionH) of object cdecl; function QButtonGroup_create(parent: QObjectH = nil): QButtonGroupH; cdecl; external Qt4PasLib name 'QButtonGroup_create'; procedure QButtonGroup_destroy(handle: QButtonGroupH); cdecl; external Qt4PasLib name 'QButtonGroup_destroy'; procedure QButtonGroup_setExclusive(handle: QButtonGroupH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QButtonGroup_setExclusive'; function QButtonGroup_exclusive(handle: QButtonGroupH): Boolean; cdecl; external Qt4PasLib name 'QButtonGroup_exclusive'; procedure QButtonGroup_addButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH); cdecl; external Qt4PasLib name 'QButtonGroup_addButton'; procedure QButtonGroup_addButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH; id: Integer); cdecl; external Qt4PasLib name 'QButtonGroup_addButton2'; procedure QButtonGroup_removeButton(handle: QButtonGroupH; AnonParam1: QAbstractButtonH); cdecl; external Qt4PasLib name 'QButtonGroup_removeButton'; procedure QButtonGroup_buttons(handle: QButtonGroupH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QButtonGroup_buttons'; function QButtonGroup_checkedButton(handle: QButtonGroupH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QButtonGroup_checkedButton'; function QButtonGroup_button(handle: QButtonGroupH; id: Integer): QAbstractButtonH; cdecl; external Qt4PasLib name 'QButtonGroup_button'; procedure QButtonGroup_setId(handle: QButtonGroupH; button: QAbstractButtonH; id: Integer); cdecl; external Qt4PasLib name 'QButtonGroup_setId'; function QButtonGroup_id(handle: QButtonGroupH; button: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QButtonGroup_id'; function QButtonGroup_checkedId(handle: QButtonGroupH): Integer; cdecl; external Qt4PasLib name 'QButtonGroup_checkedId'; type QButtonGroup_buttonClicked_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonClicked2_Event = procedure (AnonParam1: Integer) of object cdecl; QButtonGroup_buttonPressed_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonPressed2_Event = procedure (AnonParam1: Integer) of object cdecl; QButtonGroup_buttonReleased_Event = procedure (AnonParam1: QAbstractButtonH) of object cdecl; QButtonGroup_buttonReleased2_Event = procedure (AnonParam1: Integer) of object cdecl; procedure QAbstractButton_setText(handle: QAbstractButtonH; text: PWideString); cdecl; external Qt4PasLib name 'QAbstractButton_setText'; procedure QAbstractButton_text(handle: QAbstractButtonH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractButton_text'; procedure QAbstractButton_setIcon(handle: QAbstractButtonH; icon: QIconH); cdecl; external Qt4PasLib name 'QAbstractButton_setIcon'; procedure QAbstractButton_icon(handle: QAbstractButtonH; retval: QIconH); cdecl; external Qt4PasLib name 'QAbstractButton_icon'; procedure QAbstractButton_iconSize(handle: QAbstractButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractButton_iconSize'; procedure QAbstractButton_setShortcut(handle: QAbstractButtonH; key: QKeySequenceH); cdecl; external Qt4PasLib name 'QAbstractButton_setShortcut'; procedure QAbstractButton_shortcut(handle: QAbstractButtonH; retval: QKeySequenceH); cdecl; external Qt4PasLib name 'QAbstractButton_shortcut'; procedure QAbstractButton_setCheckable(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setCheckable'; function QAbstractButton_isCheckable(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isCheckable'; function QAbstractButton_isChecked(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isChecked'; procedure QAbstractButton_setDown(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setDown'; function QAbstractButton_isDown(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_isDown'; procedure QAbstractButton_setAutoRepeat(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeat'; function QAbstractButton_autoRepeat(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeat'; procedure QAbstractButton_setAutoRepeatDelay(handle: QAbstractButtonH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeatDelay'; function QAbstractButton_autoRepeatDelay(handle: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeatDelay'; procedure QAbstractButton_setAutoRepeatInterval(handle: QAbstractButtonH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoRepeatInterval'; function QAbstractButton_autoRepeatInterval(handle: QAbstractButtonH): Integer; cdecl; external Qt4PasLib name 'QAbstractButton_autoRepeatInterval'; procedure QAbstractButton_setAutoExclusive(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setAutoExclusive'; function QAbstractButton_autoExclusive(handle: QAbstractButtonH): Boolean; cdecl; external Qt4PasLib name 'QAbstractButton_autoExclusive'; function QAbstractButton_group(handle: QAbstractButtonH): QButtonGroupH; cdecl; external Qt4PasLib name 'QAbstractButton_group'; procedure QAbstractButton_setIconSize(handle: QAbstractButtonH; size: PSize); cdecl; external Qt4PasLib name 'QAbstractButton_setIconSize'; procedure QAbstractButton_animateClick(handle: QAbstractButtonH; msec: Integer = 100); cdecl; external Qt4PasLib name 'QAbstractButton_animateClick'; procedure QAbstractButton_click(handle: QAbstractButtonH); cdecl; external Qt4PasLib name 'QAbstractButton_click'; procedure QAbstractButton_toggle(handle: QAbstractButtonH); cdecl; external Qt4PasLib name 'QAbstractButton_toggle'; procedure QAbstractButton_setChecked(handle: QAbstractButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractButton_setChecked'; type QAbstractButton_pressed_Event = procedure () of object cdecl; QAbstractButton_released_Event = procedure () of object cdecl; QAbstractButton_clicked_Event = procedure (checked: Boolean = False) of object cdecl; QAbstractButton_clicked2_Event = procedure () of object cdecl; QAbstractButton_toggled_Event = procedure (checked: Boolean) of object cdecl; function QPushButton_create(parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create'; procedure QPushButton_destroy(handle: QPushButtonH); cdecl; external Qt4PasLib name 'QPushButton_destroy'; function QPushButton_create(text: PWideString; parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create2'; function QPushButton_create(icon: QIconH; text: PWideString; parent: QWidgetH = nil): QPushButtonH; cdecl; external Qt4PasLib name 'QPushButton_create3'; procedure QPushButton_sizeHint(handle: QPushButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QPushButton_sizeHint'; procedure QPushButton_minimumSizeHint(handle: QPushButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QPushButton_minimumSizeHint'; function QPushButton_autoDefault(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_autoDefault'; procedure QPushButton_setAutoDefault(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setAutoDefault'; function QPushButton_isDefault(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_isDefault'; procedure QPushButton_setDefault(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setDefault'; procedure QPushButton_setMenu(handle: QPushButtonH; menu: QMenuH); cdecl; external Qt4PasLib name 'QPushButton_setMenu'; function QPushButton_menu(handle: QPushButtonH): QMenuH; cdecl; external Qt4PasLib name 'QPushButton_menu'; procedure QPushButton_setFlat(handle: QPushButtonH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QPushButton_setFlat'; function QPushButton_isFlat(handle: QPushButtonH): Boolean; cdecl; external Qt4PasLib name 'QPushButton_isFlat'; procedure QPushButton_showMenu(handle: QPushButtonH); cdecl; external Qt4PasLib name 'QPushButton_showMenu'; function QRadioButton_create(parent: QWidgetH = nil): QRadioButtonH; cdecl; external Qt4PasLib name 'QRadioButton_create'; procedure QRadioButton_destroy(handle: QRadioButtonH); cdecl; external Qt4PasLib name 'QRadioButton_destroy'; function QRadioButton_create(text: PWideString; parent: QWidgetH = nil): QRadioButtonH; cdecl; external Qt4PasLib name 'QRadioButton_create2'; procedure QRadioButton_sizeHint(handle: QRadioButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QRadioButton_sizeHint'; type QLineEditEchoMode = ( // QLineEdit::EchoMode (1) QLineEditNormal, QLineEditNoEcho, QLineEditPassword, QLineEditPasswordEchoOnEdit ); function QLineEdit_create(parent: QWidgetH = nil): QLineEditH; cdecl; external Qt4PasLib name 'QLineEdit_create'; procedure QLineEdit_destroy(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_destroy'; function QLineEdit_create(AnonParam1: PWideString; parent: QWidgetH = nil): QLineEditH; cdecl; external Qt4PasLib name 'QLineEdit_create2'; procedure QLineEdit_text(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_text'; procedure QLineEdit_displayText(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_displayText'; function QLineEdit_maxLength(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_maxLength'; procedure QLineEdit_setMaxLength(handle: QLineEditH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setMaxLength'; procedure QLineEdit_setFrame(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setFrame'; function QLineEdit_hasFrame(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasFrame'; function QLineEdit_echoMode(handle: QLineEditH): QLineEditEchoMode; cdecl; external Qt4PasLib name 'QLineEdit_echoMode'; procedure QLineEdit_setEchoMode(handle: QLineEditH; AnonParam1: QLineEditEchoMode); cdecl; external Qt4PasLib name 'QLineEdit_setEchoMode'; function QLineEdit_isReadOnly(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isReadOnly'; procedure QLineEdit_setReadOnly(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setReadOnly'; procedure QLineEdit_setValidator(handle: QLineEditH; AnonParam1: QValidatorH); cdecl; external Qt4PasLib name 'QLineEdit_setValidator'; function QLineEdit_validator(handle: QLineEditH): QValidatorH; cdecl; external Qt4PasLib name 'QLineEdit_validator'; procedure QLineEdit_setCompleter(handle: QLineEditH; completer: QCompleterH); cdecl; external Qt4PasLib name 'QLineEdit_setCompleter'; function QLineEdit_completer(handle: QLineEditH): QCompleterH; cdecl; external Qt4PasLib name 'QLineEdit_completer'; procedure QLineEdit_sizeHint(handle: QLineEditH; retval: PSize); cdecl; external Qt4PasLib name 'QLineEdit_sizeHint'; procedure QLineEdit_minimumSizeHint(handle: QLineEditH; retval: PSize); cdecl; external Qt4PasLib name 'QLineEdit_minimumSizeHint'; function QLineEdit_cursorPosition(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_cursorPosition'; procedure QLineEdit_setCursorPosition(handle: QLineEditH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setCursorPosition'; function QLineEdit_cursorPositionAt(handle: QLineEditH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QLineEdit_cursorPositionAt'; procedure QLineEdit_setAlignment(handle: QLineEditH; flag: QtAlignment); cdecl; external Qt4PasLib name 'QLineEdit_setAlignment'; function QLineEdit_alignment(handle: QLineEditH): QtAlignment; cdecl; external Qt4PasLib name 'QLineEdit_alignment'; procedure QLineEdit_cursorForward(handle: QLineEditH; mark: Boolean; steps: Integer = 1); cdecl; external Qt4PasLib name 'QLineEdit_cursorForward'; procedure QLineEdit_cursorBackward(handle: QLineEditH; mark: Boolean; steps: Integer = 1); cdecl; external Qt4PasLib name 'QLineEdit_cursorBackward'; procedure QLineEdit_cursorWordForward(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_cursorWordForward'; procedure QLineEdit_cursorWordBackward(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_cursorWordBackward'; procedure QLineEdit_backspace(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_backspace'; procedure QLineEdit_del(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_del'; procedure QLineEdit_home(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_home'; procedure QLineEdit_end(handle: QLineEditH; mark: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_end'; function QLineEdit_isModified(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isModified'; procedure QLineEdit_setModified(handle: QLineEditH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setModified'; procedure QLineEdit_setSelection(handle: QLineEditH; AnonParam1: Integer; AnonParam2: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setSelection'; function QLineEdit_hasSelectedText(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasSelectedText'; procedure QLineEdit_selectedText(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_selectedText'; function QLineEdit_selectionStart(handle: QLineEditH): Integer; cdecl; external Qt4PasLib name 'QLineEdit_selectionStart'; function QLineEdit_isUndoAvailable(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isUndoAvailable'; function QLineEdit_isRedoAvailable(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_isRedoAvailable'; procedure QLineEdit_setDragEnabled(handle: QLineEditH; b: Boolean); cdecl; external Qt4PasLib name 'QLineEdit_setDragEnabled'; function QLineEdit_dragEnabled(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_dragEnabled'; procedure QLineEdit_inputMask(handle: QLineEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_inputMask'; procedure QLineEdit_setInputMask(handle: QLineEditH; inputMask: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_setInputMask'; function QLineEdit_hasAcceptableInput(handle: QLineEditH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_hasAcceptableInput'; procedure QLineEdit_setTextMargins(handle: QLineEditH; left: Integer; top: Integer; right: Integer; bottom: Integer); cdecl; external Qt4PasLib name 'QLineEdit_setTextMargins'; procedure QLineEdit_getTextMargins(handle: QLineEditH; left: PInteger; top: PInteger; right: PInteger; bottom: PInteger); cdecl; external Qt4PasLib name 'QLineEdit_getTextMargins'; procedure QLineEdit_setText(handle: QLineEditH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_setText'; procedure QLineEdit_clear(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_clear'; procedure QLineEdit_selectAll(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_selectAll'; procedure QLineEdit_undo(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_undo'; procedure QLineEdit_redo(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_redo'; procedure QLineEdit_cut(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_cut'; procedure QLineEdit_copy(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_copy'; procedure QLineEdit_paste(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_paste'; procedure QLineEdit_deselect(handle: QLineEditH); cdecl; external Qt4PasLib name 'QLineEdit_deselect'; procedure QLineEdit_insert(handle: QLineEditH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLineEdit_insert'; function QLineEdit_createStandardContextMenu(handle: QLineEditH): QMenuH; cdecl; external Qt4PasLib name 'QLineEdit_createStandardContextMenu'; procedure QLineEdit_inputMethodQuery(handle: QLineEditH; retval: QVariantH; AnonParam1: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QLineEdit_inputMethodQuery'; function QLineEdit_event(handle: QLineEditH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QLineEdit_event'; type QLineEdit_textChanged_Event = procedure (AnonParam1: PWideString) of object cdecl; QLineEdit_textEdited_Event = procedure (AnonParam1: PWideString) of object cdecl; QLineEdit_cursorPositionChanged_Event = procedure (AnonParam1: Integer; AnonParam2: Integer) of object cdecl; QLineEdit_returnPressed_Event = procedure () of object cdecl; QLineEdit_editingFinished_Event = procedure () of object cdecl; QLineEdit_selectionChanged_Event = procedure () of object cdecl; type QPlainTextEditLineWrapMode = ( // QPlainTextEdit::LineWrapMode (1) QPlainTextEditNoWrap, QPlainTextEditWidgetWidth ); function QPlainTextEdit_create(parent: QWidgetH = nil): QPlainTextEditH; cdecl; external Qt4PasLib name 'QPlainTextEdit_create'; procedure QPlainTextEdit_destroy(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_destroy'; function QPlainTextEdit_create(text: PWideString; parent: QWidgetH = nil): QPlainTextEditH; cdecl; external Qt4PasLib name 'QPlainTextEdit_create2'; procedure QPlainTextEdit_setDocument(handle: QPlainTextEditH; document: QTextDocumentH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setDocument'; function QPlainTextEdit_document(handle: QPlainTextEditH): QTextDocumentH; cdecl; external Qt4PasLib name 'QPlainTextEdit_document'; procedure QPlainTextEdit_setTextCursor(handle: QPlainTextEditH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTextCursor'; procedure QPlainTextEdit_textCursor(handle: QPlainTextEditH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_textCursor'; function QPlainTextEdit_isReadOnly(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_isReadOnly'; procedure QPlainTextEdit_setReadOnly(handle: QPlainTextEditH; ro: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setReadOnly'; procedure QPlainTextEdit_setTextInteractionFlags(handle: QPlainTextEditH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTextInteractionFlags'; function QPlainTextEdit_textInteractionFlags(handle: QPlainTextEditH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QPlainTextEdit_textInteractionFlags'; procedure QPlainTextEdit_mergeCurrentCharFormat(handle: QPlainTextEditH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_mergeCurrentCharFormat'; procedure QPlainTextEdit_setCurrentCharFormat(handle: QPlainTextEditH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCurrentCharFormat'; procedure QPlainTextEdit_currentCharFormat(handle: QPlainTextEditH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QPlainTextEdit_currentCharFormat'; function QPlainTextEdit_tabChangesFocus(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_tabChangesFocus'; procedure QPlainTextEdit_setTabChangesFocus(handle: QPlainTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTabChangesFocus'; procedure QPlainTextEdit_setDocumentTitle(handle: QPlainTextEditH; title: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_setDocumentTitle'; procedure QPlainTextEdit_documentTitle(handle: QPlainTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_documentTitle'; function QPlainTextEdit_isUndoRedoEnabled(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_isUndoRedoEnabled'; procedure QPlainTextEdit_setUndoRedoEnabled(handle: QPlainTextEditH; enable: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setUndoRedoEnabled'; procedure QPlainTextEdit_setMaximumBlockCount(handle: QPlainTextEditH; maximum: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setMaximumBlockCount'; function QPlainTextEdit_maximumBlockCount(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_maximumBlockCount'; function QPlainTextEdit_lineWrapMode(handle: QPlainTextEditH): QPlainTextEditLineWrapMode; cdecl; external Qt4PasLib name 'QPlainTextEdit_lineWrapMode'; procedure QPlainTextEdit_setLineWrapMode(handle: QPlainTextEditH; mode: QPlainTextEditLineWrapMode); cdecl; external Qt4PasLib name 'QPlainTextEdit_setLineWrapMode'; function QPlainTextEdit_wordWrapMode(handle: QPlainTextEditH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QPlainTextEdit_wordWrapMode'; procedure QPlainTextEdit_setWordWrapMode(handle: QPlainTextEditH; policy: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QPlainTextEdit_setWordWrapMode'; procedure QPlainTextEdit_setBackgroundVisible(handle: QPlainTextEditH; visible: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setBackgroundVisible'; function QPlainTextEdit_backgroundVisible(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_backgroundVisible'; procedure QPlainTextEdit_setCenterOnScroll(handle: QPlainTextEditH; enabled: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCenterOnScroll'; function QPlainTextEdit_centerOnScroll(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_centerOnScroll'; function QPlainTextEdit_find(handle: QPlainTextEditH; exp: PWideString; options: QTextDocumentFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_find'; procedure QPlainTextEdit_toPlainText(handle: QPlainTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_toPlainText'; procedure QPlainTextEdit_ensureCursorVisible(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_ensureCursorVisible'; procedure QPlainTextEdit_loadResource(handle: QPlainTextEditH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QPlainTextEdit_loadResource'; function QPlainTextEdit_createStandardContextMenu(handle: QPlainTextEditH): QMenuH; cdecl; external Qt4PasLib name 'QPlainTextEdit_createStandardContextMenu'; procedure QPlainTextEdit_cursorForPosition(handle: QPlainTextEditH; retval: QTextCursorH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorForPosition'; procedure QPlainTextEdit_cursorRect(handle: QPlainTextEditH; retval: PRect; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorRect'; procedure QPlainTextEdit_cursorRect(handle: QPlainTextEditH; retval: PRect); cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorRect2'; function QPlainTextEdit_overwriteMode(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_overwriteMode'; procedure QPlainTextEdit_setOverwriteMode(handle: QPlainTextEditH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QPlainTextEdit_setOverwriteMode'; function QPlainTextEdit_tabStopWidth(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_tabStopWidth'; procedure QPlainTextEdit_setTabStopWidth(handle: QPlainTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setTabStopWidth'; function QPlainTextEdit_cursorWidth(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_cursorWidth'; procedure QPlainTextEdit_setCursorWidth(handle: QPlainTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextEdit_setCursorWidth'; procedure QPlainTextEdit_moveCursor(handle: QPlainTextEditH; operation: QTextCursorMoveOperation; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QPlainTextEdit_moveCursor'; function QPlainTextEdit_canPaste(handle: QPlainTextEditH): Boolean; cdecl; external Qt4PasLib name 'QPlainTextEdit_canPaste'; procedure QPlainTextEdit_print(handle: QPlainTextEditH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QPlainTextEdit_print'; function QPlainTextEdit_blockCount(handle: QPlainTextEditH): Integer; cdecl; external Qt4PasLib name 'QPlainTextEdit_blockCount'; procedure QPlainTextEdit_setPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_setPlainText'; procedure QPlainTextEdit_cut(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_cut'; procedure QPlainTextEdit_copy(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_copy'; procedure QPlainTextEdit_paste(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_paste'; procedure QPlainTextEdit_undo(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_undo'; procedure QPlainTextEdit_redo(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_redo'; procedure QPlainTextEdit_clear(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_clear'; procedure QPlainTextEdit_selectAll(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_selectAll'; procedure QPlainTextEdit_insertPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_insertPlainText'; procedure QPlainTextEdit_appendPlainText(handle: QPlainTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_appendPlainText'; procedure QPlainTextEdit_appendHtml(handle: QPlainTextEditH; html: PWideString); cdecl; external Qt4PasLib name 'QPlainTextEdit_appendHtml'; procedure QPlainTextEdit_centerCursor(handle: QPlainTextEditH); cdecl; external Qt4PasLib name 'QPlainTextEdit_centerCursor'; function QPlainTextDocumentLayout_create(document: QTextDocumentH): QPlainTextDocumentLayoutH; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_create'; procedure QPlainTextDocumentLayout_destroy(handle: QPlainTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_destroy'; function QPlainTextDocumentLayout_hitTest(handle: QPlainTextDocumentLayoutH; AnonParam1: PQtPointF; AnonParam2: QtHitTestAccuracy): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hitTest'; function QPlainTextDocumentLayout_pageCount(handle: QPlainTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_pageCount'; procedure QPlainTextDocumentLayout_documentSize(handle: QPlainTextDocumentLayoutH; retval: QSizeFH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_documentSize'; procedure QPlainTextDocumentLayout_frameBoundingRect(handle: QPlainTextDocumentLayoutH; retval: QRectFH; AnonParam1: QTextFrameH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_frameBoundingRect'; procedure QPlainTextDocumentLayout_blockBoundingRect(handle: QPlainTextDocumentLayoutH; retval: QRectFH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_blockBoundingRect'; procedure QPlainTextDocumentLayout_ensureBlockLayout(handle: QPlainTextDocumentLayoutH; block: QTextBlockH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_ensureBlockLayout'; procedure QPlainTextDocumentLayout_setCursorWidth(handle: QPlainTextDocumentLayoutH; width: Integer); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_setCursorWidth'; function QPlainTextDocumentLayout_cursorWidth(handle: QPlainTextDocumentLayoutH): Integer; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_cursorWidth'; procedure QPlainTextDocumentLayout_requestUpdate(handle: QPlainTextDocumentLayoutH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_requestUpdate'; type QPlainTextEdit_textChanged_Event = procedure () of object cdecl; QPlainTextEdit_undoAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_redoAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_copyAvailable_Event = procedure (b: Boolean) of object cdecl; QPlainTextEdit_selectionChanged_Event = procedure () of object cdecl; QPlainTextEdit_cursorPositionChanged_Event = procedure () of object cdecl; QPlainTextEdit_updateRequest_Event = procedure (rect: PRect; dy: Integer) of object cdecl; QPlainTextEdit_blockCountChanged_Event = procedure (newBlockCount: Integer) of object cdecl; QPlainTextEdit_modificationChanged_Event = procedure (AnonParam1: Boolean) of object cdecl; type QTextEditLineWrapMode = ( // QTextEdit::LineWrapMode (1) QTextEditNoWrap, QTextEditWidgetWidth, QTextEditFixedPixelWidth, QTextEditFixedColumnWidth ); type QTextEditAutoFormattingFlag = cardinal; // QTextEdit::AutoFormattingFlag QTextEditAutoFormatting = QTextEditAutoFormattingFlag; //QFlags<> (3) const QTextEditAutoNone = 0; QTextEditAutoBulletList = $00000001; QTextEditAutoAll = $ffffffff; function QTextEdit_create(parent: QWidgetH = nil): QTextEditH; cdecl; external Qt4PasLib name 'QTextEdit_create'; procedure QTextEdit_destroy(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_destroy'; function QTextEdit_create(text: PWideString; parent: QWidgetH = nil): QTextEditH; cdecl; external Qt4PasLib name 'QTextEdit_create2'; procedure QTextEdit_setDocument(handle: QTextEditH; document: QTextDocumentH); cdecl; external Qt4PasLib name 'QTextEdit_setDocument'; function QTextEdit_document(handle: QTextEditH): QTextDocumentH; cdecl; external Qt4PasLib name 'QTextEdit_document'; procedure QTextEdit_setTextCursor(handle: QTextEditH; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_setTextCursor'; procedure QTextEdit_textCursor(handle: QTextEditH; retval: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_textCursor'; function QTextEdit_isReadOnly(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_isReadOnly'; procedure QTextEdit_setReadOnly(handle: QTextEditH; ro: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setReadOnly'; procedure QTextEdit_setTextInteractionFlags(handle: QTextEditH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QTextEdit_setTextInteractionFlags'; function QTextEdit_textInteractionFlags(handle: QTextEditH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QTextEdit_textInteractionFlags'; function QTextEdit_fontPointSize(handle: QTextEditH): qreal; cdecl; external Qt4PasLib name 'QTextEdit_fontPointSize'; procedure QTextEdit_fontFamily(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_fontFamily'; function QTextEdit_fontWeight(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_fontWeight'; function QTextEdit_fontUnderline(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_fontUnderline'; function QTextEdit_fontItalic(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_fontItalic'; procedure QTextEdit_textColor(handle: QTextEditH; retval: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_textColor'; procedure QTextEdit_textBackgroundColor(handle: QTextEditH; retval: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_textBackgroundColor'; procedure QTextEdit_currentFont(handle: QTextEditH; retval: QFontH); cdecl; external Qt4PasLib name 'QTextEdit_currentFont'; function QTextEdit_alignment(handle: QTextEditH): QtAlignment; cdecl; external Qt4PasLib name 'QTextEdit_alignment'; procedure QTextEdit_mergeCurrentCharFormat(handle: QTextEditH; modifier: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_mergeCurrentCharFormat'; procedure QTextEdit_setCurrentCharFormat(handle: QTextEditH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_setCurrentCharFormat'; procedure QTextEdit_currentCharFormat(handle: QTextEditH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QTextEdit_currentCharFormat'; function QTextEdit_autoFormatting(handle: QTextEditH): QTextEditAutoFormatting; cdecl; external Qt4PasLib name 'QTextEdit_autoFormatting'; procedure QTextEdit_setAutoFormatting(handle: QTextEditH; features: QTextEditAutoFormatting); cdecl; external Qt4PasLib name 'QTextEdit_setAutoFormatting'; function QTextEdit_tabChangesFocus(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_tabChangesFocus'; procedure QTextEdit_setTabChangesFocus(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setTabChangesFocus'; procedure QTextEdit_setDocumentTitle(handle: QTextEditH; title: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setDocumentTitle'; procedure QTextEdit_documentTitle(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_documentTitle'; function QTextEdit_isUndoRedoEnabled(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_isUndoRedoEnabled'; procedure QTextEdit_setUndoRedoEnabled(handle: QTextEditH; enable: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setUndoRedoEnabled'; function QTextEdit_lineWrapMode(handle: QTextEditH): QTextEditLineWrapMode; cdecl; external Qt4PasLib name 'QTextEdit_lineWrapMode'; procedure QTextEdit_setLineWrapMode(handle: QTextEditH; mode: QTextEditLineWrapMode); cdecl; external Qt4PasLib name 'QTextEdit_setLineWrapMode'; function QTextEdit_lineWrapColumnOrWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_lineWrapColumnOrWidth'; procedure QTextEdit_setLineWrapColumnOrWidth(handle: QTextEditH; w: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setLineWrapColumnOrWidth'; function QTextEdit_wordWrapMode(handle: QTextEditH): QTextOptionWrapMode; cdecl; external Qt4PasLib name 'QTextEdit_wordWrapMode'; procedure QTextEdit_setWordWrapMode(handle: QTextEditH; policy: QTextOptionWrapMode); cdecl; external Qt4PasLib name 'QTextEdit_setWordWrapMode'; function QTextEdit_find(handle: QTextEditH; exp: PWideString; options: QTextDocumentFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_find'; procedure QTextEdit_toPlainText(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_toPlainText'; procedure QTextEdit_toHtml(handle: QTextEditH; retval: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_toHtml'; procedure QTextEdit_ensureCursorVisible(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_ensureCursorVisible'; procedure QTextEdit_loadResource(handle: QTextEditH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextEdit_loadResource'; function QTextEdit_createStandardContextMenu(handle: QTextEditH): QMenuH; cdecl; external Qt4PasLib name 'QTextEdit_createStandardContextMenu'; function QTextEdit_createStandardContextMenu(handle: QTextEditH; position: PQtPoint): QMenuH; cdecl; external Qt4PasLib name 'QTextEdit_createStandardContextMenu2'; procedure QTextEdit_cursorForPosition(handle: QTextEditH; retval: QTextCursorH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QTextEdit_cursorForPosition'; procedure QTextEdit_cursorRect(handle: QTextEditH; retval: PRect; cursor: QTextCursorH); cdecl; external Qt4PasLib name 'QTextEdit_cursorRect'; procedure QTextEdit_cursorRect(handle: QTextEditH; retval: PRect); cdecl; external Qt4PasLib name 'QTextEdit_cursorRect2'; procedure QTextEdit_anchorAt(handle: QTextEditH; retval: PWideString; pos: PQtPoint); cdecl; external Qt4PasLib name 'QTextEdit_anchorAt'; function QTextEdit_overwriteMode(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_overwriteMode'; procedure QTextEdit_setOverwriteMode(handle: QTextEditH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setOverwriteMode'; function QTextEdit_tabStopWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_tabStopWidth'; procedure QTextEdit_setTabStopWidth(handle: QTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setTabStopWidth'; function QTextEdit_cursorWidth(handle: QTextEditH): Integer; cdecl; external Qt4PasLib name 'QTextEdit_cursorWidth'; procedure QTextEdit_setCursorWidth(handle: QTextEditH; width: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setCursorWidth'; function QTextEdit_acceptRichText(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_acceptRichText'; procedure QTextEdit_setAcceptRichText(handle: QTextEditH; accept: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setAcceptRichText'; procedure QTextEdit_moveCursor(handle: QTextEditH; operation: QTextCursorMoveOperation; mode: QTextCursorMoveMode = QTextCursorMoveAnchor); cdecl; external Qt4PasLib name 'QTextEdit_moveCursor'; function QTextEdit_canPaste(handle: QTextEditH): Boolean; cdecl; external Qt4PasLib name 'QTextEdit_canPaste'; procedure QTextEdit_print(handle: QTextEditH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QTextEdit_print'; procedure QTextEdit_setFontPointSize(handle: QTextEditH; s: qreal); cdecl; external Qt4PasLib name 'QTextEdit_setFontPointSize'; procedure QTextEdit_setFontFamily(handle: QTextEditH; fontFamily: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setFontFamily'; procedure QTextEdit_setFontWeight(handle: QTextEditH; w: Integer); cdecl; external Qt4PasLib name 'QTextEdit_setFontWeight'; procedure QTextEdit_setFontUnderline(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setFontUnderline'; procedure QTextEdit_setFontItalic(handle: QTextEditH; b: Boolean); cdecl; external Qt4PasLib name 'QTextEdit_setFontItalic'; procedure QTextEdit_setTextColor(handle: QTextEditH; c: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_setTextColor'; procedure QTextEdit_setTextBackgroundColor(handle: QTextEditH; c: PQColor); cdecl; external Qt4PasLib name 'QTextEdit_setTextBackgroundColor'; procedure QTextEdit_setCurrentFont(handle: QTextEditH; f: QFontH); cdecl; external Qt4PasLib name 'QTextEdit_setCurrentFont'; procedure QTextEdit_setAlignment(handle: QTextEditH; a: QtAlignment); cdecl; external Qt4PasLib name 'QTextEdit_setAlignment'; procedure QTextEdit_setPlainText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setPlainText'; procedure QTextEdit_setHtml(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setHtml'; procedure QTextEdit_setText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_setText'; procedure QTextEdit_cut(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_cut'; procedure QTextEdit_copy(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_copy'; procedure QTextEdit_paste(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_paste'; procedure QTextEdit_undo(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_undo'; procedure QTextEdit_redo(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_redo'; procedure QTextEdit_clear(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_clear'; procedure QTextEdit_selectAll(handle: QTextEditH); cdecl; external Qt4PasLib name 'QTextEdit_selectAll'; procedure QTextEdit_insertPlainText(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_insertPlainText'; procedure QTextEdit_insertHtml(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_insertHtml'; procedure QTextEdit_append(handle: QTextEditH; text: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_append'; procedure QTextEdit_scrollToAnchor(handle: QTextEditH; name: PWideString); cdecl; external Qt4PasLib name 'QTextEdit_scrollToAnchor'; procedure QTextEdit_zoomIn(handle: QTextEditH; range: Integer = 1); cdecl; external Qt4PasLib name 'QTextEdit_zoomIn'; procedure QTextEdit_zoomOut(handle: QTextEditH; range: Integer = 1); cdecl; external Qt4PasLib name 'QTextEdit_zoomOut'; type QTextEdit_textChanged_Event = procedure () of object cdecl; QTextEdit_undoAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_redoAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_currentCharFormatChanged_Event = procedure (format: QTextCharFormatH) of object cdecl; QTextEdit_copyAvailable_Event = procedure (b: Boolean) of object cdecl; QTextEdit_selectionChanged_Event = procedure () of object cdecl; QTextEdit_cursorPositionChanged_Event = procedure () of object cdecl; type QTabWidgetTabPosition = ( // QTabWidget::TabPosition (1) QTabWidgetNorth, QTabWidgetSouth, QTabWidgetWest, QTabWidgetEast ); QTabWidgetTabShape = ( // QTabWidget::TabShape (1) QTabWidgetRounded, QTabWidgetTriangular ); function QTabWidget_create(parent: QWidgetH = nil): QTabWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_create'; procedure QTabWidget_destroy(handle: QTabWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_destroy'; function QTabWidget_addTab(handle: QTabWidgetH; widget: QWidgetH; AnonParam2: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_addTab'; function QTabWidget_addTab(handle: QTabWidgetH; widget: QWidgetH; icon: QIconH; _label: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_addTab2'; function QTabWidget_insertTab(handle: QTabWidgetH; index: Integer; widget: QWidgetH; AnonParam3: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_insertTab'; function QTabWidget_insertTab(handle: QTabWidgetH; index: Integer; widget: QWidgetH; icon: QIconH; _label: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabWidget_insertTab2'; procedure QTabWidget_removeTab(handle: QTabWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_removeTab'; function QTabWidget_isTabEnabled(handle: QTabWidgetH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_isTabEnabled'; procedure QTabWidget_setTabEnabled(handle: QTabWidgetH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setTabEnabled'; procedure QTabWidget_tabText(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabText'; procedure QTabWidget_setTabText(handle: QTabWidgetH; index: Integer; AnonParam2: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabText'; procedure QTabWidget_tabIcon(handle: QTabWidgetH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabIcon'; procedure QTabWidget_setTabIcon(handle: QTabWidgetH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTabWidget_setTabIcon'; procedure QTabWidget_setTabToolTip(handle: QTabWidgetH; index: Integer; tip: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabToolTip'; procedure QTabWidget_tabToolTip(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabToolTip'; procedure QTabWidget_setTabWhatsThis(handle: QTabWidgetH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabWidget_setTabWhatsThis'; procedure QTabWidget_tabWhatsThis(handle: QTabWidgetH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_tabWhatsThis'; function QTabWidget_currentIndex(handle: QTabWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_currentIndex'; function QTabWidget_currentWidget(handle: QTabWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_currentWidget'; function QTabWidget_widget(handle: QTabWidgetH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_widget'; function QTabWidget_indexOf(handle: QTabWidgetH; widget: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_indexOf'; function QTabWidget_count(handle: QTabWidgetH): Integer; cdecl; external Qt4PasLib name 'QTabWidget_count'; function QTabWidget_tabPosition(handle: QTabWidgetH): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QTabWidget_tabPosition'; procedure QTabWidget_setTabPosition(handle: QTabWidgetH; AnonParam1: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QTabWidget_setTabPosition'; function QTabWidget_tabsClosable(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_tabsClosable'; procedure QTabWidget_setTabsClosable(handle: QTabWidgetH; closeable: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setTabsClosable'; function QTabWidget_isMovable(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_isMovable'; procedure QTabWidget_setMovable(handle: QTabWidgetH; movable: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setMovable'; function QTabWidget_tabShape(handle: QTabWidgetH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QTabWidget_tabShape'; procedure QTabWidget_setTabShape(handle: QTabWidgetH; s: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QTabWidget_setTabShape'; procedure QTabWidget_sizeHint(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_sizeHint'; procedure QTabWidget_minimumSizeHint(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_minimumSizeHint'; procedure QTabWidget_setCornerWidget(handle: QTabWidgetH; w: QWidgetH; corner: QtCorner = QtTopRightCorner); cdecl; external Qt4PasLib name 'QTabWidget_setCornerWidget'; function QTabWidget_cornerWidget(handle: QTabWidgetH; corner: QtCorner = QtTopRightCorner): QWidgetH; cdecl; external Qt4PasLib name 'QTabWidget_cornerWidget'; function QTabWidget_elideMode(handle: QTabWidgetH): QtTextElideMode; cdecl; external Qt4PasLib name 'QTabWidget_elideMode'; procedure QTabWidget_setElideMode(handle: QTabWidgetH; AnonParam1: QtTextElideMode); cdecl; external Qt4PasLib name 'QTabWidget_setElideMode'; procedure QTabWidget_iconSize(handle: QTabWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QTabWidget_iconSize'; procedure QTabWidget_setIconSize(handle: QTabWidgetH; size: PSize); cdecl; external Qt4PasLib name 'QTabWidget_setIconSize'; function QTabWidget_usesScrollButtons(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_usesScrollButtons'; procedure QTabWidget_setUsesScrollButtons(handle: QTabWidgetH; useButtons: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setUsesScrollButtons'; function QTabWidget_documentMode(handle: QTabWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTabWidget_documentMode'; procedure QTabWidget_setDocumentMode(handle: QTabWidgetH; _set: Boolean); cdecl; external Qt4PasLib name 'QTabWidget_setDocumentMode'; procedure QTabWidget_clear(handle: QTabWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_clear'; procedure QTabWidget_setCurrentIndex(handle: QTabWidgetH; index: Integer); cdecl; external Qt4PasLib name 'QTabWidget_setCurrentIndex'; procedure QTabWidget_setCurrentWidget(handle: QTabWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTabWidget_setCurrentWidget'; type QTabWidget_currentChanged_Event = procedure (index: Integer) of object cdecl; QTabWidget_tabCloseRequested_Event = procedure (index: Integer) of object cdecl; function QLCLTabWidget_tabBarHandle(protectedhandle: QTabWidgetH): QTabBarH; cdecl; external Qt4PasLib name 'QLCLTabWidget_tabBarHandle'; type QMainWindowDockOption = cardinal; // QMainWindow::DockOption QMainWindowDockOptions = QMainWindowDockOption; //QFlags<> (3) const QMainWindowAnimatedDocks = $01; QMainWindowAllowNestedDocks = $02; QMainWindowAllowTabbedDocks = $04; QMainWindowForceTabbedDocks = $08; QMainWindowVerticalTabs = $10; function QMainWindow_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QMainWindowH; cdecl; external Qt4PasLib name 'QMainWindow_create'; procedure QMainWindow_destroy(handle: QMainWindowH); cdecl; external Qt4PasLib name 'QMainWindow_destroy'; procedure QMainWindow_iconSize(handle: QMainWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMainWindow_iconSize'; procedure QMainWindow_setIconSize(handle: QMainWindowH; iconSize: PSize); cdecl; external Qt4PasLib name 'QMainWindow_setIconSize'; function QMainWindow_toolButtonStyle(handle: QMainWindowH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QMainWindow_toolButtonStyle'; procedure QMainWindow_setToolButtonStyle(handle: QMainWindowH; toolButtonStyle: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QMainWindow_setToolButtonStyle'; function QMainWindow_isAnimated(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isAnimated'; function QMainWindow_isDockNestingEnabled(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isDockNestingEnabled'; function QMainWindow_documentMode(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_documentMode'; procedure QMainWindow_setDocumentMode(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setDocumentMode'; function QMainWindow_tabShape(handle: QMainWindowH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QMainWindow_tabShape'; procedure QMainWindow_setTabShape(handle: QMainWindowH; tabShape: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QMainWindow_setTabShape'; function QMainWindow_tabPosition(handle: QMainWindowH; area: QtDockWidgetArea): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QMainWindow_tabPosition'; procedure QMainWindow_setTabPosition(handle: QMainWindowH; areas: QtDockWidgetAreas; tabPosition: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QMainWindow_setTabPosition'; procedure QMainWindow_setDockOptions(handle: QMainWindowH; options: QMainWindowDockOptions); cdecl; external Qt4PasLib name 'QMainWindow_setDockOptions'; function QMainWindow_dockOptions(handle: QMainWindowH): QMainWindowDockOptions; cdecl; external Qt4PasLib name 'QMainWindow_dockOptions'; function QMainWindow_isSeparator(handle: QMainWindowH; pos: PQtPoint): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_isSeparator'; function QMainWindow_menuBar(handle: QMainWindowH): QMenuBarH; cdecl; external Qt4PasLib name 'QMainWindow_menuBar'; procedure QMainWindow_setMenuBar(handle: QMainWindowH; menubar: QMenuBarH); cdecl; external Qt4PasLib name 'QMainWindow_setMenuBar'; function QMainWindow_menuWidget(handle: QMainWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMainWindow_menuWidget'; procedure QMainWindow_setMenuWidget(handle: QMainWindowH; menubar: QWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_setMenuWidget'; function QMainWindow_statusBar(handle: QMainWindowH): QStatusBarH; cdecl; external Qt4PasLib name 'QMainWindow_statusBar'; procedure QMainWindow_setStatusBar(handle: QMainWindowH; statusbar: QStatusBarH); cdecl; external Qt4PasLib name 'QMainWindow_setStatusBar'; function QMainWindow_centralWidget(handle: QMainWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMainWindow_centralWidget'; procedure QMainWindow_setCentralWidget(handle: QMainWindowH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_setCentralWidget'; procedure QMainWindow_setCorner(handle: QMainWindowH; corner: QtCorner; area: QtDockWidgetArea); cdecl; external Qt4PasLib name 'QMainWindow_setCorner'; function QMainWindow_corner(handle: QMainWindowH; corner: QtCorner): QtDockWidgetArea; cdecl; external Qt4PasLib name 'QMainWindow_corner'; procedure QMainWindow_addToolBarBreak(handle: QMainWindowH; area: QtToolBarArea = QtTopToolBarArea); cdecl; external Qt4PasLib name 'QMainWindow_addToolBarBreak'; procedure QMainWindow_insertToolBarBreak(handle: QMainWindowH; before: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_insertToolBarBreak'; procedure QMainWindow_addToolBar(handle: QMainWindowH; area: QtToolBarArea; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_addToolBar'; procedure QMainWindow_addToolBar(handle: QMainWindowH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_addToolBar2'; function QMainWindow_addToolBar(handle: QMainWindowH; title: PWideString): QToolBarH; cdecl; external Qt4PasLib name 'QMainWindow_addToolBar3'; procedure QMainWindow_insertToolBar(handle: QMainWindowH; before: QToolBarH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_insertToolBar'; procedure QMainWindow_removeToolBar(handle: QMainWindowH; toolbar: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_removeToolBar'; procedure QMainWindow_removeToolBarBreak(handle: QMainWindowH; before: QToolBarH); cdecl; external Qt4PasLib name 'QMainWindow_removeToolBarBreak'; procedure QMainWindow_setUnifiedTitleAndToolBarOnMac(handle: QMainWindowH; _set: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setUnifiedTitleAndToolBarOnMac'; function QMainWindow_unifiedTitleAndToolBarOnMac(handle: QMainWindowH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_unifiedTitleAndToolBarOnMac'; function QMainWindow_toolBarArea(handle: QMainWindowH; toolbar: QToolBarH): QtToolBarArea; cdecl; external Qt4PasLib name 'QMainWindow_toolBarArea'; function QMainWindow_toolBarBreak(handle: QMainWindowH; toolbar: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_toolBarBreak'; procedure QMainWindow_addDockWidget(handle: QMainWindowH; area: QtDockWidgetArea; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_addDockWidget'; procedure QMainWindow_addDockWidget(handle: QMainWindowH; area: QtDockWidgetArea; dockwidget: QDockWidgetH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QMainWindow_addDockWidget2'; procedure QMainWindow_splitDockWidget(handle: QMainWindowH; after: QDockWidgetH; dockwidget: QDockWidgetH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QMainWindow_splitDockWidget'; procedure QMainWindow_tabifyDockWidget(handle: QMainWindowH; first: QDockWidgetH; second: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_tabifyDockWidget'; procedure QMainWindow_tabifiedDockWidgets(handle: QMainWindowH; retval: PPtrIntArray; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_tabifiedDockWidgets'; procedure QMainWindow_removeDockWidget(handle: QMainWindowH; dockwidget: QDockWidgetH); cdecl; external Qt4PasLib name 'QMainWindow_removeDockWidget'; function QMainWindow_restoreDockWidget(handle: QMainWindowH; dockwidget: QDockWidgetH): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_restoreDockWidget'; function QMainWindow_dockWidgetArea(handle: QMainWindowH; dockwidget: QDockWidgetH): QtDockWidgetArea; cdecl; external Qt4PasLib name 'QMainWindow_dockWidgetArea'; procedure QMainWindow_saveState(handle: QMainWindowH; retval: QByteArrayH; version: Integer = 0); cdecl; external Qt4PasLib name 'QMainWindow_saveState'; function QMainWindow_restoreState(handle: QMainWindowH; state: QByteArrayH; version: Integer = 0): Boolean; cdecl; external Qt4PasLib name 'QMainWindow_restoreState'; function QMainWindow_createPopupMenu(handle: QMainWindowH): QMenuH; cdecl; external Qt4PasLib name 'QMainWindow_createPopupMenu'; procedure QMainWindow_setAnimated(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setAnimated'; procedure QMainWindow_setDockNestingEnabled(handle: QMainWindowH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMainWindow_setDockNestingEnabled'; type QMainWindow_iconSizeChanged_Event = procedure (iconSize: PSize) of object cdecl; QMainWindow_toolButtonStyleChanged_Event = procedure (toolButtonStyle: QtToolButtonStyle) of object cdecl; function QToolBar_create(title: PWideString; parent: QWidgetH = nil): QToolBarH; cdecl; external Qt4PasLib name 'QToolBar_create'; procedure QToolBar_destroy(handle: QToolBarH); cdecl; external Qt4PasLib name 'QToolBar_destroy'; function QToolBar_create(parent: QWidgetH = nil): QToolBarH; cdecl; external Qt4PasLib name 'QToolBar_create2'; procedure QToolBar_setMovable(handle: QToolBarH; movable: Boolean); cdecl; external Qt4PasLib name 'QToolBar_setMovable'; function QToolBar_isMovable(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isMovable'; procedure QToolBar_setAllowedAreas(handle: QToolBarH; areas: QtToolBarAreas); cdecl; external Qt4PasLib name 'QToolBar_setAllowedAreas'; function QToolBar_allowedAreas(handle: QToolBarH): QtToolBarAreas; cdecl; external Qt4PasLib name 'QToolBar_allowedAreas'; function QToolBar_isAreaAllowed(handle: QToolBarH; area: QtToolBarArea): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isAreaAllowed'; procedure QToolBar_setOrientation(handle: QToolBarH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QToolBar_setOrientation'; function QToolBar_orientation(handle: QToolBarH): QtOrientation; cdecl; external Qt4PasLib name 'QToolBar_orientation'; procedure QToolBar_clear(handle: QToolBarH); cdecl; external Qt4PasLib name 'QToolBar_clear'; function QToolBar_addAction(handle: QToolBarH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction'; function QToolBar_addAction(handle: QToolBarH; icon: QIconH; text: PWideString): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction2'; function QToolBar_addAction(handle: QToolBarH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction3'; function QToolBar_addAction(handle: QToolBarH; icon: QIconH; text: PWideString; receiver: QObjectH; member: PAnsiChar): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addAction4'; function QToolBar_addSeparator(handle: QToolBarH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addSeparator'; function QToolBar_insertSeparator(handle: QToolBarH; before: QActionH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_insertSeparator'; function QToolBar_addWidget(handle: QToolBarH; widget: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_addWidget'; function QToolBar_insertWidget(handle: QToolBarH; before: QActionH; widget: QWidgetH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_insertWidget'; procedure QToolBar_actionGeometry(handle: QToolBarH; retval: PRect; action: QActionH); cdecl; external Qt4PasLib name 'QToolBar_actionGeometry'; function QToolBar_actionAt(handle: QToolBarH; p: PQtPoint): QActionH; cdecl; external Qt4PasLib name 'QToolBar_actionAt'; function QToolBar_actionAt(handle: QToolBarH; x: Integer; y: Integer): QActionH; cdecl; external Qt4PasLib name 'QToolBar_actionAt2'; function QToolBar_toggleViewAction(handle: QToolBarH): QActionH; cdecl; external Qt4PasLib name 'QToolBar_toggleViewAction'; procedure QToolBar_iconSize(handle: QToolBarH; retval: PSize); cdecl; external Qt4PasLib name 'QToolBar_iconSize'; function QToolBar_toolButtonStyle(handle: QToolBarH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QToolBar_toolButtonStyle'; function QToolBar_widgetForAction(handle: QToolBarH; action: QActionH): QWidgetH; cdecl; external Qt4PasLib name 'QToolBar_widgetForAction'; function QToolBar_isFloatable(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isFloatable'; procedure QToolBar_setFloatable(handle: QToolBarH; floatable: Boolean); cdecl; external Qt4PasLib name 'QToolBar_setFloatable'; function QToolBar_isFloating(handle: QToolBarH): Boolean; cdecl; external Qt4PasLib name 'QToolBar_isFloating'; procedure QToolBar_setIconSize(handle: QToolBarH; iconSize: PSize); cdecl; external Qt4PasLib name 'QToolBar_setIconSize'; procedure QToolBar_setToolButtonStyle(handle: QToolBarH; toolButtonStyle: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QToolBar_setToolButtonStyle'; type QToolBar_actionTriggered_Event = procedure (action: QActionH) of object cdecl; QToolBar_movableChanged_Event = procedure (movable: Boolean) of object cdecl; QToolBar_allowedAreasChanged_Event = procedure (allowedAreas: QtToolBarAreas) of object cdecl; QToolBar_orientationChanged_Event = procedure (orientation: QtOrientation) of object cdecl; QToolBar_iconSizeChanged_Event = procedure (iconSize: PSize) of object cdecl; QToolBar_toolButtonStyleChanged_Event = procedure (toolButtonStyle: QtToolButtonStyle) of object cdecl; function QSizeGrip_create(parent: QWidgetH): QSizeGripH; cdecl; external Qt4PasLib name 'QSizeGrip_create'; procedure QSizeGrip_destroy(handle: QSizeGripH); cdecl; external Qt4PasLib name 'QSizeGrip_destroy'; procedure QSizeGrip_sizeHint(handle: QSizeGripH; retval: PSize); cdecl; external Qt4PasLib name 'QSizeGrip_sizeHint'; procedure QSizeGrip_setVisible(handle: QSizeGripH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSizeGrip_setVisible'; type QLCDNumberMode = ( // QLCDNumber::Mode (1) QLCDNumberHex, QLCDNumberDec, QLCDNumberOct, QLCDNumberBin ); QLCDNumberSegmentStyle = ( // QLCDNumber::SegmentStyle (1) QLCDNumberOutline, QLCDNumberFilled, QLCDNumberFlat ); function QLCDNumber_create(parent: QWidgetH = nil): QLCDNumberH; cdecl; external Qt4PasLib name 'QLCDNumber_create'; procedure QLCDNumber_destroy(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_destroy'; function QLCDNumber_create(numDigits: LongWord; parent: QWidgetH = nil): QLCDNumberH; cdecl; external Qt4PasLib name 'QLCDNumber_create2'; function QLCDNumber_smallDecimalPoint(handle: QLCDNumberH): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_smallDecimalPoint'; function QLCDNumber_numDigits(handle: QLCDNumberH): Integer; cdecl; external Qt4PasLib name 'QLCDNumber_numDigits'; procedure QLCDNumber_setNumDigits(handle: QLCDNumberH; nDigits: Integer); cdecl; external Qt4PasLib name 'QLCDNumber_setNumDigits'; function QLCDNumber_checkOverflow(handle: QLCDNumberH; num: Double): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_checkOverflow'; function QLCDNumber_checkOverflow(handle: QLCDNumberH; num: Integer): Boolean; cdecl; external Qt4PasLib name 'QLCDNumber_checkOverflow2'; function QLCDNumber_mode(handle: QLCDNumberH): QLCDNumberMode; cdecl; external Qt4PasLib name 'QLCDNumber_mode'; procedure QLCDNumber_setMode(handle: QLCDNumberH; AnonParam1: QLCDNumberMode); cdecl; external Qt4PasLib name 'QLCDNumber_setMode'; function QLCDNumber_segmentStyle(handle: QLCDNumberH): QLCDNumberSegmentStyle; cdecl; external Qt4PasLib name 'QLCDNumber_segmentStyle'; procedure QLCDNumber_setSegmentStyle(handle: QLCDNumberH; AnonParam1: QLCDNumberSegmentStyle); cdecl; external Qt4PasLib name 'QLCDNumber_setSegmentStyle'; function QLCDNumber_value(handle: QLCDNumberH): Double; cdecl; external Qt4PasLib name 'QLCDNumber_value'; function QLCDNumber_intValue(handle: QLCDNumberH): Integer; cdecl; external Qt4PasLib name 'QLCDNumber_intValue'; procedure QLCDNumber_sizeHint(handle: QLCDNumberH; retval: PSize); cdecl; external Qt4PasLib name 'QLCDNumber_sizeHint'; procedure QLCDNumber_display(handle: QLCDNumberH; str: PWideString); cdecl; external Qt4PasLib name 'QLCDNumber_display'; procedure QLCDNumber_display(handle: QLCDNumberH; num: Integer); cdecl; external Qt4PasLib name 'QLCDNumber_display2'; procedure QLCDNumber_display(handle: QLCDNumberH; num: Double); cdecl; external Qt4PasLib name 'QLCDNumber_display3'; procedure QLCDNumber_setHexMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setHexMode'; procedure QLCDNumber_setDecMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setDecMode'; procedure QLCDNumber_setOctMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setOctMode'; procedure QLCDNumber_setBinMode(handle: QLCDNumberH); cdecl; external Qt4PasLib name 'QLCDNumber_setBinMode'; procedure QLCDNumber_setSmallDecimalPoint(handle: QLCDNumberH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLCDNumber_setSmallDecimalPoint'; type QLCDNumber_overflow_Event = procedure () of object cdecl; type QAbstractSpinBoxButtonSymbols = ( // QAbstractSpinBox::ButtonSymbols (1) QAbstractSpinBoxUpDownArrows, QAbstractSpinBoxPlusMinus, QAbstractSpinBoxNoButtons ); QAbstractSpinBoxCorrectionMode = ( // QAbstractSpinBox::CorrectionMode (1) QAbstractSpinBoxCorrectToPreviousValue, QAbstractSpinBoxCorrectToNearestValue ); type QAbstractSpinBoxStepEnabledFlag = cardinal; // QAbstractSpinBox::StepEnabledFlag QAbstractSpinBoxStepEnabled = QAbstractSpinBoxStepEnabledFlag; //QFlags<> (3) const QAbstractSpinBoxStepNone = $00; QAbstractSpinBoxStepUpEnabled = $01; QAbstractSpinBoxStepDownEnabled = $02; function QAbstractSpinBox_create(parent: QWidgetH = nil): QAbstractSpinBoxH; cdecl; external Qt4PasLib name 'QAbstractSpinBox_create'; procedure QAbstractSpinBox_destroy(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_destroy'; function QAbstractSpinBox_buttonSymbols(handle: QAbstractSpinBoxH): QAbstractSpinBoxButtonSymbols; cdecl; external Qt4PasLib name 'QAbstractSpinBox_buttonSymbols'; procedure QAbstractSpinBox_setButtonSymbols(handle: QAbstractSpinBoxH; bs: QAbstractSpinBoxButtonSymbols); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setButtonSymbols'; procedure QAbstractSpinBox_setCorrectionMode(handle: QAbstractSpinBoxH; cm: QAbstractSpinBoxCorrectionMode); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setCorrectionMode'; function QAbstractSpinBox_correctionMode(handle: QAbstractSpinBoxH): QAbstractSpinBoxCorrectionMode; cdecl; external Qt4PasLib name 'QAbstractSpinBox_correctionMode'; function QAbstractSpinBox_hasAcceptableInput(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hasAcceptableInput'; procedure QAbstractSpinBox_text(handle: QAbstractSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_text'; procedure QAbstractSpinBox_specialValueText(handle: QAbstractSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_specialValueText'; procedure QAbstractSpinBox_setSpecialValueText(handle: QAbstractSpinBoxH; txt: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setSpecialValueText'; function QAbstractSpinBox_wrapping(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_wrapping'; procedure QAbstractSpinBox_setWrapping(handle: QAbstractSpinBoxH; w: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setWrapping'; procedure QAbstractSpinBox_setReadOnly(handle: QAbstractSpinBoxH; r: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setReadOnly'; function QAbstractSpinBox_isReadOnly(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_isReadOnly'; procedure QAbstractSpinBox_setKeyboardTracking(handle: QAbstractSpinBoxH; kt: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setKeyboardTracking'; function QAbstractSpinBox_keyboardTracking(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_keyboardTracking'; procedure QAbstractSpinBox_setAlignment(handle: QAbstractSpinBoxH; flag: QtAlignment); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setAlignment'; function QAbstractSpinBox_alignment(handle: QAbstractSpinBoxH): QtAlignment; cdecl; external Qt4PasLib name 'QAbstractSpinBox_alignment'; procedure QAbstractSpinBox_setFrame(handle: QAbstractSpinBoxH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setFrame'; function QAbstractSpinBox_hasFrame(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hasFrame'; procedure QAbstractSpinBox_setAccelerated(handle: QAbstractSpinBoxH; _on: Boolean); cdecl; external Qt4PasLib name 'QAbstractSpinBox_setAccelerated'; function QAbstractSpinBox_isAccelerated(handle: QAbstractSpinBoxH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_isAccelerated'; procedure QAbstractSpinBox_sizeHint(handle: QAbstractSpinBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractSpinBox_sizeHint'; procedure QAbstractSpinBox_minimumSizeHint(handle: QAbstractSpinBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractSpinBox_minimumSizeHint'; procedure QAbstractSpinBox_interpretText(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_interpretText'; function QAbstractSpinBox_event(handle: QAbstractSpinBoxH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSpinBox_event'; function QAbstractSpinBox_validate(handle: QAbstractSpinBoxH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QAbstractSpinBox_validate'; procedure QAbstractSpinBox_fixup(handle: QAbstractSpinBoxH; input: PWideString); cdecl; external Qt4PasLib name 'QAbstractSpinBox_fixup'; procedure QAbstractSpinBox_stepBy(handle: QAbstractSpinBoxH; steps: Integer); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepBy'; procedure QAbstractSpinBox_stepUp(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepUp'; procedure QAbstractSpinBox_stepDown(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_stepDown'; procedure QAbstractSpinBox_selectAll(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_selectAll'; procedure QAbstractSpinBox_clear(handle: QAbstractSpinBoxH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_clear'; type QAbstractSpinBox_editingFinished_Event = procedure () of object cdecl; function QLCLAbstractSpinBox_lineEditHandle(protectedhandle: QAbstractSpinBoxH): QLineEditH; cdecl; external Qt4PasLib name 'QLCLAbstractSpinBox_lineEditHandle'; function QSpinBox_create(parent: QWidgetH = nil): QSpinBoxH; cdecl; external Qt4PasLib name 'QSpinBox_create'; procedure QSpinBox_destroy(handle: QSpinBoxH); cdecl; external Qt4PasLib name 'QSpinBox_destroy'; function QSpinBox_value(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_value'; procedure QSpinBox_prefix(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_prefix'; procedure QSpinBox_setPrefix(handle: QSpinBoxH; prefix: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_setPrefix'; procedure QSpinBox_suffix(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_suffix'; procedure QSpinBox_setSuffix(handle: QSpinBoxH; suffix: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_setSuffix'; procedure QSpinBox_cleanText(handle: QSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QSpinBox_cleanText'; function QSpinBox_singleStep(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_singleStep'; procedure QSpinBox_setSingleStep(handle: QSpinBoxH; val: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setSingleStep'; function QSpinBox_minimum(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_minimum'; procedure QSpinBox_setMinimum(handle: QSpinBoxH; min: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setMinimum'; function QSpinBox_maximum(handle: QSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QSpinBox_maximum'; procedure QSpinBox_setMaximum(handle: QSpinBoxH; max: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setMaximum'; procedure QSpinBox_setRange(handle: QSpinBoxH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setRange'; procedure QSpinBox_setValue(handle: QSpinBoxH; val: Integer); cdecl; external Qt4PasLib name 'QSpinBox_setValue'; function QDoubleSpinBox_create(parent: QWidgetH = nil): QDoubleSpinBoxH; cdecl; external Qt4PasLib name 'QDoubleSpinBox_create'; procedure QDoubleSpinBox_destroy(handle: QDoubleSpinBoxH); cdecl; external Qt4PasLib name 'QDoubleSpinBox_destroy'; function QDoubleSpinBox_value(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_value'; procedure QDoubleSpinBox_prefix(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_prefix'; procedure QDoubleSpinBox_setPrefix(handle: QDoubleSpinBoxH; prefix: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setPrefix'; procedure QDoubleSpinBox_suffix(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_suffix'; procedure QDoubleSpinBox_setSuffix(handle: QDoubleSpinBoxH; suffix: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setSuffix'; procedure QDoubleSpinBox_cleanText(handle: QDoubleSpinBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_cleanText'; function QDoubleSpinBox_singleStep(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_singleStep'; procedure QDoubleSpinBox_setSingleStep(handle: QDoubleSpinBoxH; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setSingleStep'; function QDoubleSpinBox_minimum(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_minimum'; procedure QDoubleSpinBox_setMinimum(handle: QDoubleSpinBoxH; min: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setMinimum'; function QDoubleSpinBox_maximum(handle: QDoubleSpinBoxH): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_maximum'; procedure QDoubleSpinBox_setMaximum(handle: QDoubleSpinBoxH; max: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setMaximum'; procedure QDoubleSpinBox_setRange(handle: QDoubleSpinBoxH; min: Double; max: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setRange'; function QDoubleSpinBox_decimals(handle: QDoubleSpinBoxH): Integer; cdecl; external Qt4PasLib name 'QDoubleSpinBox_decimals'; procedure QDoubleSpinBox_setDecimals(handle: QDoubleSpinBoxH; prec: Integer); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setDecimals'; function QDoubleSpinBox_validate(handle: QDoubleSpinBoxH; input: PWideString; pos: PInteger): QValidatorState; cdecl; external Qt4PasLib name 'QDoubleSpinBox_validate'; function QDoubleSpinBox_valueFromText(handle: QDoubleSpinBoxH; text: PWideString): Double; cdecl; external Qt4PasLib name 'QDoubleSpinBox_valueFromText'; procedure QDoubleSpinBox_textFromValue(handle: QDoubleSpinBoxH; retval: PWideString; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_textFromValue'; procedure QDoubleSpinBox_fixup(handle: QDoubleSpinBoxH; str: PWideString); cdecl; external Qt4PasLib name 'QDoubleSpinBox_fixup'; procedure QDoubleSpinBox_setValue(handle: QDoubleSpinBoxH; val: Double); cdecl; external Qt4PasLib name 'QDoubleSpinBox_setValue'; type QSpinBox_valueChanged_Event = procedure (AnonParam1: Integer) of object cdecl; QSpinBox_valueChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; type QDoubleSpinBox_valueChanged_Event = procedure (AnonParam1: Double) of object cdecl; QDoubleSpinBox_valueChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; function QSplitter_create(parent: QWidgetH = nil): QSplitterH; cdecl; external Qt4PasLib name 'QSplitter_create'; procedure QSplitter_destroy(handle: QSplitterH); cdecl; external Qt4PasLib name 'QSplitter_destroy'; function QSplitter_create(AnonParam1: QtOrientation; parent: QWidgetH = nil): QSplitterH; cdecl; external Qt4PasLib name 'QSplitter_create2'; procedure QSplitter_addWidget(handle: QSplitterH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QSplitter_addWidget'; procedure QSplitter_insertWidget(handle: QSplitterH; index: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QSplitter_insertWidget'; procedure QSplitter_setOrientation(handle: QSplitterH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QSplitter_setOrientation'; function QSplitter_orientation(handle: QSplitterH): QtOrientation; cdecl; external Qt4PasLib name 'QSplitter_orientation'; procedure QSplitter_setChildrenCollapsible(handle: QSplitterH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QSplitter_setChildrenCollapsible'; function QSplitter_childrenCollapsible(handle: QSplitterH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_childrenCollapsible'; procedure QSplitter_setCollapsible(handle: QSplitterH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QSplitter_setCollapsible'; function QSplitter_isCollapsible(handle: QSplitterH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QSplitter_isCollapsible'; procedure QSplitter_setOpaqueResize(handle: QSplitterH; opaque: Boolean = True); cdecl; external Qt4PasLib name 'QSplitter_setOpaqueResize'; function QSplitter_opaqueResize(handle: QSplitterH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_opaqueResize'; procedure QSplitter_refresh(handle: QSplitterH); cdecl; external Qt4PasLib name 'QSplitter_refresh'; procedure QSplitter_sizeHint(handle: QSplitterH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitter_sizeHint'; procedure QSplitter_minimumSizeHint(handle: QSplitterH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitter_minimumSizeHint'; procedure QSplitter_sizes(handle: QSplitterH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QSplitter_sizes'; procedure QSplitter_setSizes(handle: QSplitterH; list: PPtrIntArray); cdecl; external Qt4PasLib name 'QSplitter_setSizes'; procedure QSplitter_saveState(handle: QSplitterH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QSplitter_saveState'; function QSplitter_restoreState(handle: QSplitterH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QSplitter_restoreState'; function QSplitter_handleWidth(handle: QSplitterH): Integer; cdecl; external Qt4PasLib name 'QSplitter_handleWidth'; procedure QSplitter_setHandleWidth(handle: QSplitterH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QSplitter_setHandleWidth'; function QSplitter_indexOf(handle: QSplitterH; w: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QSplitter_indexOf'; function QSplitter_widget(handle: QSplitterH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QSplitter_widget'; function QSplitter_count(handle: QSplitterH): Integer; cdecl; external Qt4PasLib name 'QSplitter_count'; procedure QSplitter_getRange(handle: QSplitterH; index: Integer; AnonParam2: PInteger; AnonParam3: PInteger); cdecl; external Qt4PasLib name 'QSplitter_getRange'; function QSplitter_handle(handle: QSplitterH; index: Integer): QSplitterHandleH; cdecl; external Qt4PasLib name 'QSplitter_handle'; procedure QSplitter_setStretchFactor(handle: QSplitterH; index: Integer; stretch: Integer); cdecl; external Qt4PasLib name 'QSplitter_setStretchFactor'; function QSplitterHandle_create(o: QtOrientation; parent: QSplitterH): QSplitterHandleH; cdecl; external Qt4PasLib name 'QSplitterHandle_create'; procedure QSplitterHandle_destroy(handle: QSplitterHandleH); cdecl; external Qt4PasLib name 'QSplitterHandle_destroy'; procedure QSplitterHandle_setOrientation(handle: QSplitterHandleH; o: QtOrientation); cdecl; external Qt4PasLib name 'QSplitterHandle_setOrientation'; function QSplitterHandle_orientation(handle: QSplitterHandleH): QtOrientation; cdecl; external Qt4PasLib name 'QSplitterHandle_orientation'; function QSplitterHandle_opaqueResize(handle: QSplitterHandleH): Boolean; cdecl; external Qt4PasLib name 'QSplitterHandle_opaqueResize'; function QSplitterHandle_splitter(handle: QSplitterHandleH): QSplitterH; cdecl; external Qt4PasLib name 'QSplitterHandle_splitter'; procedure QSplitterHandle_sizeHint(handle: QSplitterHandleH; retval: PSize); cdecl; external Qt4PasLib name 'QSplitterHandle_sizeHint'; type QSplitter_splitterMoved_Event = procedure (pos: Integer; index: Integer) of object cdecl; type QComboBoxInsertPolicy = ( // QComboBox::InsertPolicy (1) QComboBoxNoInsert, QComboBoxInsertAtTop, QComboBoxInsertAtCurrent, QComboBoxInsertAtBottom, QComboBoxInsertAfterCurrent, QComboBoxInsertBeforeCurrent, QComboBoxInsertAlphabetically ); QComboBoxSizeAdjustPolicy = ( // QComboBox::SizeAdjustPolicy (1) QComboBoxAdjustToContents, QComboBoxAdjustToContentsOnFirstShow, QComboBoxAdjustToMinimumContentsLength, QComboBoxAdjustToMinimumContentsLengthWithIcon ); function QComboBox_create(parent: QWidgetH = nil): QComboBoxH; cdecl; external Qt4PasLib name 'QComboBox_create'; procedure QComboBox_destroy(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_destroy'; function QComboBox_maxVisibleItems(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_maxVisibleItems'; procedure QComboBox_setMaxVisibleItems(handle: QComboBoxH; maxItems: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMaxVisibleItems'; function QComboBox_count(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_count'; procedure QComboBox_setMaxCount(handle: QComboBoxH; max: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMaxCount'; function QComboBox_maxCount(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_maxCount'; function QComboBox_autoCompletion(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_autoCompletion'; procedure QComboBox_setAutoCompletion(handle: QComboBoxH; enable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setAutoCompletion'; function QComboBox_autoCompletionCaseSensitivity(handle: QComboBoxH): QtCaseSensitivity; cdecl; external Qt4PasLib name 'QComboBox_autoCompletionCaseSensitivity'; procedure QComboBox_setAutoCompletionCaseSensitivity(handle: QComboBoxH; sensitivity: QtCaseSensitivity); cdecl; external Qt4PasLib name 'QComboBox_setAutoCompletionCaseSensitivity'; function QComboBox_duplicatesEnabled(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_duplicatesEnabled'; procedure QComboBox_setDuplicatesEnabled(handle: QComboBoxH; enable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setDuplicatesEnabled'; procedure QComboBox_setFrame(handle: QComboBoxH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setFrame'; function QComboBox_hasFrame(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_hasFrame'; function QComboBox_findText(handle: QComboBoxH; text: PWideString; flags: QtMatchFlags = QtMatchExactly or QtMatchCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QComboBox_findText'; function QComboBox_findData(handle: QComboBoxH; data: QVariantH; role: QtItemDataRole = QtUserRole; flags: QtMatchFlags = QtMatchExactly or QtMatchCaseSensitive): Integer; cdecl; external Qt4PasLib name 'QComboBox_findData'; function QComboBox_insertPolicy(handle: QComboBoxH): QComboBoxInsertPolicy; cdecl; external Qt4PasLib name 'QComboBox_insertPolicy'; procedure QComboBox_setInsertPolicy(handle: QComboBoxH; policy: QComboBoxInsertPolicy); cdecl; external Qt4PasLib name 'QComboBox_setInsertPolicy'; function QComboBox_sizeAdjustPolicy(handle: QComboBoxH): QComboBoxSizeAdjustPolicy; cdecl; external Qt4PasLib name 'QComboBox_sizeAdjustPolicy'; procedure QComboBox_setSizeAdjustPolicy(handle: QComboBoxH; policy: QComboBoxSizeAdjustPolicy); cdecl; external Qt4PasLib name 'QComboBox_setSizeAdjustPolicy'; function QComboBox_minimumContentsLength(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_minimumContentsLength'; procedure QComboBox_setMinimumContentsLength(handle: QComboBoxH; characters: Integer); cdecl; external Qt4PasLib name 'QComboBox_setMinimumContentsLength'; procedure QComboBox_iconSize(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_iconSize'; procedure QComboBox_setIconSize(handle: QComboBoxH; size: PSize); cdecl; external Qt4PasLib name 'QComboBox_setIconSize'; function QComboBox_isEditable(handle: QComboBoxH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_isEditable'; procedure QComboBox_setEditable(handle: QComboBoxH; editable: Boolean); cdecl; external Qt4PasLib name 'QComboBox_setEditable'; procedure QComboBox_setLineEdit(handle: QComboBoxH; edit: QLineEditH); cdecl; external Qt4PasLib name 'QComboBox_setLineEdit'; function QComboBox_lineEdit(handle: QComboBoxH): QLineEditH; cdecl; external Qt4PasLib name 'QComboBox_lineEdit'; procedure QComboBox_setValidator(handle: QComboBoxH; v: QValidatorH); cdecl; external Qt4PasLib name 'QComboBox_setValidator'; function QComboBox_validator(handle: QComboBoxH): QValidatorH; cdecl; external Qt4PasLib name 'QComboBox_validator'; procedure QComboBox_setCompleter(handle: QComboBoxH; c: QCompleterH); cdecl; external Qt4PasLib name 'QComboBox_setCompleter'; function QComboBox_completer(handle: QComboBoxH): QCompleterH; cdecl; external Qt4PasLib name 'QComboBox_completer'; function QComboBox_itemDelegate(handle: QComboBoxH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QComboBox_itemDelegate'; procedure QComboBox_setItemDelegate(handle: QComboBoxH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QComboBox_setItemDelegate'; function QComboBox_model(handle: QComboBoxH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QComboBox_model'; procedure QComboBox_setModel(handle: QComboBoxH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QComboBox_setModel'; procedure QComboBox_rootModelIndex(handle: QComboBoxH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QComboBox_rootModelIndex'; procedure QComboBox_setRootModelIndex(handle: QComboBoxH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QComboBox_setRootModelIndex'; function QComboBox_modelColumn(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_modelColumn'; procedure QComboBox_setModelColumn(handle: QComboBoxH; visibleColumn: Integer); cdecl; external Qt4PasLib name 'QComboBox_setModelColumn'; function QComboBox_currentIndex(handle: QComboBoxH): Integer; cdecl; external Qt4PasLib name 'QComboBox_currentIndex'; procedure QComboBox_currentText(handle: QComboBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QComboBox_currentText'; procedure QComboBox_itemText(handle: QComboBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_itemText'; procedure QComboBox_itemIcon(handle: QComboBoxH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_itemIcon'; procedure QComboBox_itemData(handle: QComboBoxH; retval: QVariantH; index: Integer; role: QtItemDataRole = QtUserRole); cdecl; external Qt4PasLib name 'QComboBox_itemData'; procedure QComboBox_addItem(handle: QComboBoxH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_addItem'; procedure QComboBox_addItem(handle: QComboBoxH; icon: QIconH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_addItem2'; procedure QComboBox_addItems(handle: QComboBoxH; texts: QStringListH); cdecl; external Qt4PasLib name 'QComboBox_addItems'; procedure QComboBox_insertItem(handle: QComboBoxH; index: Integer; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_insertItem'; procedure QComboBox_insertItem(handle: QComboBoxH; index: Integer; icon: QIconH; text: PWideString; userData: QVariantH = nil); cdecl; external Qt4PasLib name 'QComboBox_insertItem2'; procedure QComboBox_insertItems(handle: QComboBoxH; index: Integer; texts: QStringListH); cdecl; external Qt4PasLib name 'QComboBox_insertItems'; procedure QComboBox_insertSeparator(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_insertSeparator'; procedure QComboBox_removeItem(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_removeItem'; procedure QComboBox_setItemText(handle: QComboBoxH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QComboBox_setItemText'; procedure QComboBox_setItemIcon(handle: QComboBoxH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QComboBox_setItemIcon'; procedure QComboBox_setItemData(handle: QComboBoxH; index: Integer; value: QVariantH; role: QtItemDataRole = QtUserRole); cdecl; external Qt4PasLib name 'QComboBox_setItemData'; function QComboBox_view(handle: QComboBoxH): QAbstractItemViewH; cdecl; external Qt4PasLib name 'QComboBox_view'; procedure QComboBox_setView(handle: QComboBoxH; itemView: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QComboBox_setView'; procedure QComboBox_sizeHint(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_sizeHint'; procedure QComboBox_minimumSizeHint(handle: QComboBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QComboBox_minimumSizeHint'; procedure QComboBox_showPopup(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_showPopup'; procedure QComboBox_hidePopup(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_hidePopup'; function QComboBox_event(handle: QComboBoxH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QComboBox_event'; procedure QComboBox_clear(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_clear'; procedure QComboBox_clearEditText(handle: QComboBoxH); cdecl; external Qt4PasLib name 'QComboBox_clearEditText'; procedure QComboBox_setEditText(handle: QComboBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QComboBox_setEditText'; procedure QComboBox_setCurrentIndex(handle: QComboBoxH; index: Integer); cdecl; external Qt4PasLib name 'QComboBox_setCurrentIndex'; type QComboBox_editTextChanged_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_activated_Event = procedure (index: Integer) of object cdecl; QComboBox_activated2_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_highlighted_Event = procedure (index: Integer) of object cdecl; QComboBox_highlighted2_Event = procedure (AnonParam1: PWideString) of object cdecl; QComboBox_currentIndexChanged_Event = procedure (index: Integer) of object cdecl; QComboBox_currentIndexChanged2_Event = procedure (AnonParam1: PWideString) of object cdecl; function QCheckBox_create(parent: QWidgetH = nil): QCheckBoxH; cdecl; external Qt4PasLib name 'QCheckBox_create'; procedure QCheckBox_destroy(handle: QCheckBoxH); cdecl; external Qt4PasLib name 'QCheckBox_destroy'; function QCheckBox_create(text: PWideString; parent: QWidgetH = nil): QCheckBoxH; cdecl; external Qt4PasLib name 'QCheckBox_create2'; procedure QCheckBox_sizeHint(handle: QCheckBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QCheckBox_sizeHint'; procedure QCheckBox_setTristate(handle: QCheckBoxH; y: Boolean = True); cdecl; external Qt4PasLib name 'QCheckBox_setTristate'; function QCheckBox_isTristate(handle: QCheckBoxH): Boolean; cdecl; external Qt4PasLib name 'QCheckBox_isTristate'; function QCheckBox_checkState(handle: QCheckBoxH): QtCheckState; cdecl; external Qt4PasLib name 'QCheckBox_checkState'; procedure QCheckBox_setCheckState(handle: QCheckBoxH; state: QtCheckState); cdecl; external Qt4PasLib name 'QCheckBox_setCheckState'; type QCheckBox_stateChanged_Event = procedure (AnonParam1: Integer) of object cdecl; type QSliderTickPosition = cardinal; // QSlider::TickPosition (4) const QSliderNoTicks = 0 { $0 }; QSliderTicksAbove = 1 { $1 }; QSliderTicksLeft = 1 { $1 }; QSliderTicksBelow = 2 { $2 }; QSliderTicksRight = 2 { $2 }; QSliderTicksBothSides = 3 { $3 }; function QSlider_create(parent: QWidgetH = nil): QSliderH; cdecl; external Qt4PasLib name 'QSlider_create'; procedure QSlider_destroy(handle: QSliderH); cdecl; external Qt4PasLib name 'QSlider_destroy'; function QSlider_create(orientation: QtOrientation; parent: QWidgetH = nil): QSliderH; cdecl; external Qt4PasLib name 'QSlider_create2'; procedure QSlider_sizeHint(handle: QSliderH; retval: PSize); cdecl; external Qt4PasLib name 'QSlider_sizeHint'; procedure QSlider_minimumSizeHint(handle: QSliderH; retval: PSize); cdecl; external Qt4PasLib name 'QSlider_minimumSizeHint'; procedure QSlider_setTickPosition(handle: QSliderH; position: QSliderTickPosition); cdecl; external Qt4PasLib name 'QSlider_setTickPosition'; function QSlider_tickPosition(handle: QSliderH): QSliderTickPosition; cdecl; external Qt4PasLib name 'QSlider_tickPosition'; procedure QSlider_setTickInterval(handle: QSliderH; ti: Integer); cdecl; external Qt4PasLib name 'QSlider_setTickInterval'; function QSlider_tickInterval(handle: QSliderH): Integer; cdecl; external Qt4PasLib name 'QSlider_tickInterval'; function QSlider_event(handle: QSliderH; event: QEventH): Boolean; cdecl; external Qt4PasLib name 'QSlider_event'; function QTextBrowser_create(parent: QWidgetH = nil): QTextBrowserH; cdecl; external Qt4PasLib name 'QTextBrowser_create'; procedure QTextBrowser_destroy(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_destroy'; procedure QTextBrowser_source(handle: QTextBrowserH; retval: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_source'; procedure QTextBrowser_searchPaths(handle: QTextBrowserH; retval: QStringListH); cdecl; external Qt4PasLib name 'QTextBrowser_searchPaths'; procedure QTextBrowser_setSearchPaths(handle: QTextBrowserH; paths: QStringListH); cdecl; external Qt4PasLib name 'QTextBrowser_setSearchPaths'; procedure QTextBrowser_loadResource(handle: QTextBrowserH; retval: QVariantH; _type: Integer; name: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_loadResource'; function QTextBrowser_isBackwardAvailable(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_isBackwardAvailable'; function QTextBrowser_isForwardAvailable(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_isForwardAvailable'; procedure QTextBrowser_clearHistory(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_clearHistory'; procedure QTextBrowser_historyTitle(handle: QTextBrowserH; retval: PWideString; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QTextBrowser_historyTitle'; procedure QTextBrowser_historyUrl(handle: QTextBrowserH; retval: QUrlH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QTextBrowser_historyUrl'; function QTextBrowser_backwardHistoryCount(handle: QTextBrowserH): Integer; cdecl; external Qt4PasLib name 'QTextBrowser_backwardHistoryCount'; function QTextBrowser_forwardHistoryCount(handle: QTextBrowserH): Integer; cdecl; external Qt4PasLib name 'QTextBrowser_forwardHistoryCount'; function QTextBrowser_openExternalLinks(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_openExternalLinks'; procedure QTextBrowser_setOpenExternalLinks(handle: QTextBrowserH; open: Boolean); cdecl; external Qt4PasLib name 'QTextBrowser_setOpenExternalLinks'; function QTextBrowser_openLinks(handle: QTextBrowserH): Boolean; cdecl; external Qt4PasLib name 'QTextBrowser_openLinks'; procedure QTextBrowser_setOpenLinks(handle: QTextBrowserH; open: Boolean); cdecl; external Qt4PasLib name 'QTextBrowser_setOpenLinks'; procedure QTextBrowser_setSource(handle: QTextBrowserH; name: QUrlH); cdecl; external Qt4PasLib name 'QTextBrowser_setSource'; procedure QTextBrowser_backward(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_backward'; procedure QTextBrowser_forward(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_forward'; procedure QTextBrowser_home(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_home'; procedure QTextBrowser_reload(handle: QTextBrowserH); cdecl; external Qt4PasLib name 'QTextBrowser_reload'; type QTextBrowser_backwardAvailable_Event = procedure (AnonParam1: Boolean) of object cdecl; QTextBrowser_forwardAvailable_Event = procedure (AnonParam1: Boolean) of object cdecl; QTextBrowser_historyChanged_Event = procedure () of object cdecl; QTextBrowser_sourceChanged_Event = procedure (AnonParam1: QUrlH) of object cdecl; QTextBrowser_highlighted_Event = procedure (AnonParam1: QUrlH) of object cdecl; QTextBrowser_highlighted2_Event = procedure (AnonParam1: PWideString) of object cdecl; QTextBrowser_anchorClicked_Event = procedure (AnonParam1: QUrlH) of object cdecl; function QLabel_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QLabelH; cdecl; external Qt4PasLib name 'QLabel_create'; procedure QLabel_destroy(handle: QLabelH); cdecl; external Qt4PasLib name 'QLabel_destroy'; function QLabel_create(text: PWideString; parent: QWidgetH = nil; f: QtWindowFlags = 0): QLabelH; cdecl; external Qt4PasLib name 'QLabel_create2'; procedure QLabel_text(handle: QLabelH; retval: PWideString); cdecl; external Qt4PasLib name 'QLabel_text'; function QLabel_pixmap(handle: QLabelH): QPixmapH; cdecl; external Qt4PasLib name 'QLabel_pixmap'; function QLabel_picture(handle: QLabelH): QPictureH; cdecl; external Qt4PasLib name 'QLabel_picture'; function QLabel_movie(handle: QLabelH): QMovieH; cdecl; external Qt4PasLib name 'QLabel_movie'; function QLabel_textFormat(handle: QLabelH): QtTextFormat; cdecl; external Qt4PasLib name 'QLabel_textFormat'; procedure QLabel_setTextFormat(handle: QLabelH; AnonParam1: QtTextFormat); cdecl; external Qt4PasLib name 'QLabel_setTextFormat'; function QLabel_alignment(handle: QLabelH): QtAlignment; cdecl; external Qt4PasLib name 'QLabel_alignment'; procedure QLabel_setAlignment(handle: QLabelH; AnonParam1: QtAlignment); cdecl; external Qt4PasLib name 'QLabel_setAlignment'; procedure QLabel_setWordWrap(handle: QLabelH; _on: Boolean); cdecl; external Qt4PasLib name 'QLabel_setWordWrap'; function QLabel_wordWrap(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_wordWrap'; function QLabel_indent(handle: QLabelH): Integer; cdecl; external Qt4PasLib name 'QLabel_indent'; procedure QLabel_setIndent(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setIndent'; function QLabel_margin(handle: QLabelH): Integer; cdecl; external Qt4PasLib name 'QLabel_margin'; procedure QLabel_setMargin(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setMargin'; function QLabel_hasScaledContents(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_hasScaledContents'; procedure QLabel_setScaledContents(handle: QLabelH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QLabel_setScaledContents'; procedure QLabel_sizeHint(handle: QLabelH; retval: PSize); cdecl; external Qt4PasLib name 'QLabel_sizeHint'; procedure QLabel_minimumSizeHint(handle: QLabelH; retval: PSize); cdecl; external Qt4PasLib name 'QLabel_minimumSizeHint'; procedure QLabel_setBuddy(handle: QLabelH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QLabel_setBuddy'; function QLabel_buddy(handle: QLabelH): QWidgetH; cdecl; external Qt4PasLib name 'QLabel_buddy'; function QLabel_heightForWidth(handle: QLabelH; AnonParam1: Integer): Integer; cdecl; external Qt4PasLib name 'QLabel_heightForWidth'; function QLabel_openExternalLinks(handle: QLabelH): Boolean; cdecl; external Qt4PasLib name 'QLabel_openExternalLinks'; procedure QLabel_setOpenExternalLinks(handle: QLabelH; open: Boolean); cdecl; external Qt4PasLib name 'QLabel_setOpenExternalLinks'; procedure QLabel_setTextInteractionFlags(handle: QLabelH; flags: QtTextInteractionFlags); cdecl; external Qt4PasLib name 'QLabel_setTextInteractionFlags'; function QLabel_textInteractionFlags(handle: QLabelH): QtTextInteractionFlags; cdecl; external Qt4PasLib name 'QLabel_textInteractionFlags'; procedure QLabel_setText(handle: QLabelH; AnonParam1: PWideString); cdecl; external Qt4PasLib name 'QLabel_setText'; procedure QLabel_setPixmap(handle: QLabelH; AnonParam1: QPixmapH); cdecl; external Qt4PasLib name 'QLabel_setPixmap'; procedure QLabel_setPicture(handle: QLabelH; AnonParam1: QPictureH); cdecl; external Qt4PasLib name 'QLabel_setPicture'; procedure QLabel_setMovie(handle: QLabelH; movie: QMovieH); cdecl; external Qt4PasLib name 'QLabel_setMovie'; procedure QLabel_setNum(handle: QLabelH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QLabel_setNum'; procedure QLabel_setNum(handle: QLabelH; AnonParam1: Double); cdecl; external Qt4PasLib name 'QLabel_setNum2'; procedure QLabel_clear(handle: QLabelH); cdecl; external Qt4PasLib name 'QLabel_clear'; type QLabel_linkActivated_Event = procedure (link: PWideString) of object cdecl; QLabel_linkHovered_Event = procedure (link: PWideString) of object cdecl; function QGroupBox_create(parent: QWidgetH = nil): QGroupBoxH; cdecl; external Qt4PasLib name 'QGroupBox_create'; procedure QGroupBox_destroy(handle: QGroupBoxH); cdecl; external Qt4PasLib name 'QGroupBox_destroy'; function QGroupBox_create(title: PWideString; parent: QWidgetH = nil): QGroupBoxH; cdecl; external Qt4PasLib name 'QGroupBox_create2'; procedure QGroupBox_title(handle: QGroupBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QGroupBox_title'; procedure QGroupBox_setTitle(handle: QGroupBoxH; title: PWideString); cdecl; external Qt4PasLib name 'QGroupBox_setTitle'; function QGroupBox_alignment(handle: QGroupBoxH): QtAlignment; cdecl; external Qt4PasLib name 'QGroupBox_alignment'; procedure QGroupBox_setAlignment(handle: QGroupBoxH; alignment: Integer); cdecl; external Qt4PasLib name 'QGroupBox_setAlignment'; procedure QGroupBox_minimumSizeHint(handle: QGroupBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QGroupBox_minimumSizeHint'; function QGroupBox_isFlat(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isFlat'; procedure QGroupBox_setFlat(handle: QGroupBoxH; flat: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setFlat'; function QGroupBox_isCheckable(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isCheckable'; procedure QGroupBox_setCheckable(handle: QGroupBoxH; checkable: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setCheckable'; function QGroupBox_isChecked(handle: QGroupBoxH): Boolean; cdecl; external Qt4PasLib name 'QGroupBox_isChecked'; procedure QGroupBox_setChecked(handle: QGroupBoxH; checked: Boolean); cdecl; external Qt4PasLib name 'QGroupBox_setChecked'; type QGroupBox_clicked_Event = procedure (checked: Boolean = False) of object cdecl; QGroupBox_clicked2_Event = procedure () of object cdecl; QGroupBox_toggled_Event = procedure (AnonParam1: Boolean) of object cdecl; type QDockWidgetDockWidgetFeature = cardinal; // QDockWidget::DockWidgetFeature (4) QDockWidgetDockWidgetFeatures = QDockWidgetDockWidgetFeature; // QFlags<> const QDockWidgetDockWidgetClosable = 1 { $1 }; QDockWidgetDockWidgetMovable = 2 { $2 }; QDockWidgetDockWidgetFloatable = 4 { $4 }; QDockWidgetDockWidgetVerticalTitleBar = 8 { $8 }; QDockWidgetDockWidgetFeatureMask = 15 { $f }; QDockWidgetAllDockWidgetFeatures = 7 { $7 }; QDockWidgetNoDockWidgetFeatures = 0 { $0 }; QDockWidgetReserved = 255 { $ff }; function QDockWidget_create(title: PWideString; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QDockWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_create'; procedure QDockWidget_destroy(handle: QDockWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_destroy'; function QDockWidget_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QDockWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_create2'; function QDockWidget_widget(handle: QDockWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_widget'; procedure QDockWidget_setWidget(handle: QDockWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_setWidget'; procedure QDockWidget_setFeatures(handle: QDockWidgetH; features: QDockWidgetDockWidgetFeatures); cdecl; external Qt4PasLib name 'QDockWidget_setFeatures'; function QDockWidget_features(handle: QDockWidgetH): QDockWidgetDockWidgetFeatures; cdecl; external Qt4PasLib name 'QDockWidget_features'; procedure QDockWidget_setFloating(handle: QDockWidgetH; floating: Boolean); cdecl; external Qt4PasLib name 'QDockWidget_setFloating'; function QDockWidget_isFloating(handle: QDockWidgetH): Boolean; cdecl; external Qt4PasLib name 'QDockWidget_isFloating'; procedure QDockWidget_setAllowedAreas(handle: QDockWidgetH; areas: QtDockWidgetAreas); cdecl; external Qt4PasLib name 'QDockWidget_setAllowedAreas'; function QDockWidget_allowedAreas(handle: QDockWidgetH): QtDockWidgetAreas; cdecl; external Qt4PasLib name 'QDockWidget_allowedAreas'; procedure QDockWidget_setTitleBarWidget(handle: QDockWidgetH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QDockWidget_setTitleBarWidget'; function QDockWidget_titleBarWidget(handle: QDockWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QDockWidget_titleBarWidget'; function QDockWidget_isAreaAllowed(handle: QDockWidgetH; area: QtDockWidgetArea): Boolean; cdecl; external Qt4PasLib name 'QDockWidget_isAreaAllowed'; function QDockWidget_toggleViewAction(handle: QDockWidgetH): QActionH; cdecl; external Qt4PasLib name 'QDockWidget_toggleViewAction'; type QDockWidget_featuresChanged_Event = procedure (features: QDockWidgetDockWidgetFeatures) of object cdecl; QDockWidget_topLevelChanged_Event = procedure (topLevel: Boolean) of object cdecl; QDockWidget_allowedAreasChanged_Event = procedure (allowedAreas: QtDockWidgetAreas) of object cdecl; QDockWidget_visibilityChanged_Event = procedure (visible: Boolean) of object cdecl; QDockWidget_dockLocationChanged_Event = procedure (area: QtDockWidgetArea) of object cdecl; type QTabBarShape = ( // QTabBar::Shape (1) QTabBarRoundedNorth, QTabBarRoundedSouth, QTabBarRoundedWest, QTabBarRoundedEast, QTabBarTriangularNorth, QTabBarTriangularSouth, QTabBarTriangularWest, QTabBarTriangularEast ); QTabBarButtonPosition = ( // QTabBar::ButtonPosition (1) QTabBarLeftSide, QTabBarRightSide ); QTabBarSelectionBehavior = ( // QTabBar::SelectionBehavior (1) QTabBarSelectLeftTab, QTabBarSelectRightTab, QTabBarSelectPreviousTab ); function QTabBar_create(parent: QWidgetH = nil): QTabBarH; cdecl; external Qt4PasLib name 'QTabBar_create'; procedure QTabBar_destroy(handle: QTabBarH); cdecl; external Qt4PasLib name 'QTabBar_destroy'; function QTabBar_shape(handle: QTabBarH): QTabBarShape; cdecl; external Qt4PasLib name 'QTabBar_shape'; procedure QTabBar_setShape(handle: QTabBarH; shape: QTabBarShape); cdecl; external Qt4PasLib name 'QTabBar_setShape'; function QTabBar_addTab(handle: QTabBarH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_addTab'; function QTabBar_addTab(handle: QTabBarH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_addTab2'; function QTabBar_insertTab(handle: QTabBarH; index: Integer; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_insertTab'; function QTabBar_insertTab(handle: QTabBarH; index: Integer; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QTabBar_insertTab2'; procedure QTabBar_removeTab(handle: QTabBarH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_removeTab'; procedure QTabBar_moveTab(handle: QTabBarH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QTabBar_moveTab'; function QTabBar_isTabEnabled(handle: QTabBarH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QTabBar_isTabEnabled'; procedure QTabBar_setTabEnabled(handle: QTabBarH; index: Integer; AnonParam2: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setTabEnabled'; procedure QTabBar_tabText(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabText'; procedure QTabBar_setTabText(handle: QTabBarH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabText'; procedure QTabBar_tabTextColor(handle: QTabBarH; retval: PQColor; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabTextColor'; procedure QTabBar_setTabTextColor(handle: QTabBarH; index: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTabBar_setTabTextColor'; procedure QTabBar_tabIcon(handle: QTabBarH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabIcon'; procedure QTabBar_setTabIcon(handle: QTabBarH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTabBar_setTabIcon'; function QTabBar_elideMode(handle: QTabBarH): QtTextElideMode; cdecl; external Qt4PasLib name 'QTabBar_elideMode'; procedure QTabBar_setElideMode(handle: QTabBarH; AnonParam1: QtTextElideMode); cdecl; external Qt4PasLib name 'QTabBar_setElideMode'; procedure QTabBar_setTabToolTip(handle: QTabBarH; index: Integer; tip: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabToolTip'; procedure QTabBar_tabToolTip(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabToolTip'; procedure QTabBar_setTabWhatsThis(handle: QTabBarH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTabBar_setTabWhatsThis'; procedure QTabBar_tabWhatsThis(handle: QTabBarH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabWhatsThis'; procedure QTabBar_setTabData(handle: QTabBarH; index: Integer; data: QVariantH); cdecl; external Qt4PasLib name 'QTabBar_setTabData'; procedure QTabBar_tabData(handle: QTabBarH; retval: QVariantH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabData'; procedure QTabBar_tabRect(handle: QTabBarH; retval: PRect; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_tabRect'; function QTabBar_tabAt(handle: QTabBarH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QTabBar_tabAt'; function QTabBar_currentIndex(handle: QTabBarH): Integer; cdecl; external Qt4PasLib name 'QTabBar_currentIndex'; function QTabBar_count(handle: QTabBarH): Integer; cdecl; external Qt4PasLib name 'QTabBar_count'; procedure QTabBar_sizeHint(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_sizeHint'; procedure QTabBar_minimumSizeHint(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_minimumSizeHint'; procedure QTabBar_setDrawBase(handle: QTabBarH; drawTheBase: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setDrawBase'; function QTabBar_drawBase(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_drawBase'; procedure QTabBar_iconSize(handle: QTabBarH; retval: PSize); cdecl; external Qt4PasLib name 'QTabBar_iconSize'; procedure QTabBar_setIconSize(handle: QTabBarH; size: PSize); cdecl; external Qt4PasLib name 'QTabBar_setIconSize'; function QTabBar_usesScrollButtons(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_usesScrollButtons'; procedure QTabBar_setUsesScrollButtons(handle: QTabBarH; useButtons: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setUsesScrollButtons'; function QTabBar_tabsClosable(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_tabsClosable'; procedure QTabBar_setTabsClosable(handle: QTabBarH; closable: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setTabsClosable'; procedure QTabBar_setTabButton(handle: QTabBarH; index: Integer; position: QTabBarButtonPosition; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTabBar_setTabButton'; function QTabBar_tabButton(handle: QTabBarH; index: Integer; position: QTabBarButtonPosition): QWidgetH; cdecl; external Qt4PasLib name 'QTabBar_tabButton'; function QTabBar_selectionBehaviorOnRemove(handle: QTabBarH): QTabBarSelectionBehavior; cdecl; external Qt4PasLib name 'QTabBar_selectionBehaviorOnRemove'; procedure QTabBar_setSelectionBehaviorOnRemove(handle: QTabBarH; behavior: QTabBarSelectionBehavior); cdecl; external Qt4PasLib name 'QTabBar_setSelectionBehaviorOnRemove'; function QTabBar_expanding(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_expanding'; procedure QTabBar_setExpanding(handle: QTabBarH; enabled: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setExpanding'; function QTabBar_isMovable(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_isMovable'; procedure QTabBar_setMovable(handle: QTabBarH; movable: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setMovable'; function QTabBar_documentMode(handle: QTabBarH): Boolean; cdecl; external Qt4PasLib name 'QTabBar_documentMode'; procedure QTabBar_setDocumentMode(handle: QTabBarH; _set: Boolean); cdecl; external Qt4PasLib name 'QTabBar_setDocumentMode'; procedure QTabBar_setCurrentIndex(handle: QTabBarH; index: Integer); cdecl; external Qt4PasLib name 'QTabBar_setCurrentIndex'; type QTabBar_currentChanged_Event = procedure (index: Integer) of object cdecl; QTabBar_tabCloseRequested_Event = procedure (index: Integer) of object cdecl; QTabBar_tabMoved_Event = procedure (from: Integer; _to: Integer) of object cdecl; type QProgressBarDirection = ( // QProgressBar::Direction (1) QProgressBarTopToBottom, QProgressBarBottomToTop ); function QProgressBar_create(parent: QWidgetH = nil): QProgressBarH; cdecl; external Qt4PasLib name 'QProgressBar_create'; procedure QProgressBar_destroy(handle: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressBar_destroy'; function QProgressBar_minimum(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_minimum'; function QProgressBar_maximum(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_maximum'; function QProgressBar_value(handle: QProgressBarH): Integer; cdecl; external Qt4PasLib name 'QProgressBar_value'; procedure QProgressBar_text(handle: QProgressBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_text'; procedure QProgressBar_setTextVisible(handle: QProgressBarH; visible: Boolean); cdecl; external Qt4PasLib name 'QProgressBar_setTextVisible'; function QProgressBar_isTextVisible(handle: QProgressBarH): Boolean; cdecl; external Qt4PasLib name 'QProgressBar_isTextVisible'; function QProgressBar_alignment(handle: QProgressBarH): QtAlignment; cdecl; external Qt4PasLib name 'QProgressBar_alignment'; procedure QProgressBar_setAlignment(handle: QProgressBarH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QProgressBar_setAlignment'; procedure QProgressBar_sizeHint(handle: QProgressBarH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressBar_sizeHint'; procedure QProgressBar_minimumSizeHint(handle: QProgressBarH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressBar_minimumSizeHint'; function QProgressBar_orientation(handle: QProgressBarH): QtOrientation; cdecl; external Qt4PasLib name 'QProgressBar_orientation'; procedure QProgressBar_setInvertedAppearance(handle: QProgressBarH; invert: Boolean); cdecl; external Qt4PasLib name 'QProgressBar_setInvertedAppearance'; function QProgressBar_invertedAppearance(handle: QProgressBarH): Boolean; cdecl; external Qt4PasLib name 'QProgressBar_invertedAppearance'; procedure QProgressBar_setTextDirection(handle: QProgressBarH; textDirection: QProgressBarDirection); cdecl; external Qt4PasLib name 'QProgressBar_setTextDirection'; function QProgressBar_textDirection(handle: QProgressBarH): QProgressBarDirection; cdecl; external Qt4PasLib name 'QProgressBar_textDirection'; procedure QProgressBar_setFormat(handle: QProgressBarH; format: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_setFormat'; procedure QProgressBar_format(handle: QProgressBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressBar_format'; procedure QProgressBar_reset(handle: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressBar_reset'; procedure QProgressBar_setRange(handle: QProgressBarH; minimum: Integer; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setRange'; procedure QProgressBar_setMinimum(handle: QProgressBarH; minimum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setMinimum'; procedure QProgressBar_setMaximum(handle: QProgressBarH; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setMaximum'; procedure QProgressBar_setValue(handle: QProgressBarH; value: Integer); cdecl; external Qt4PasLib name 'QProgressBar_setValue'; procedure QProgressBar_setOrientation(handle: QProgressBarH; AnonParam1: QtOrientation); cdecl; external Qt4PasLib name 'QProgressBar_setOrientation'; type QProgressBar_valueChanged_Event = procedure (value: Integer) of object cdecl; function QStatusBar_create(parent: QWidgetH = nil): QStatusBarH; cdecl; external Qt4PasLib name 'QStatusBar_create'; procedure QStatusBar_destroy(handle: QStatusBarH); cdecl; external Qt4PasLib name 'QStatusBar_destroy'; procedure QStatusBar_addWidget(handle: QStatusBarH; widget: QWidgetH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_addWidget'; function QStatusBar_insertWidget(handle: QStatusBarH; index: Integer; widget: QWidgetH; stretch: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStatusBar_insertWidget'; procedure QStatusBar_addPermanentWidget(handle: QStatusBarH; widget: QWidgetH; stretch: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_addPermanentWidget'; function QStatusBar_insertPermanentWidget(handle: QStatusBarH; index: Integer; widget: QWidgetH; stretch: Integer = 0): Integer; cdecl; external Qt4PasLib name 'QStatusBar_insertPermanentWidget'; procedure QStatusBar_removeWidget(handle: QStatusBarH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QStatusBar_removeWidget'; procedure QStatusBar_setSizeGripEnabled(handle: QStatusBarH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QStatusBar_setSizeGripEnabled'; function QStatusBar_isSizeGripEnabled(handle: QStatusBarH): Boolean; cdecl; external Qt4PasLib name 'QStatusBar_isSizeGripEnabled'; procedure QStatusBar_currentMessage(handle: QStatusBarH; retval: PWideString); cdecl; external Qt4PasLib name 'QStatusBar_currentMessage'; procedure QStatusBar_showMessage(handle: QStatusBarH; text: PWideString; timeout: Integer = 0); cdecl; external Qt4PasLib name 'QStatusBar_showMessage'; procedure QStatusBar_clearMessage(handle: QStatusBarH); cdecl; external Qt4PasLib name 'QStatusBar_clearMessage'; type QStatusBar_messageChanged_Event = procedure (text: PWideString) of object cdecl; function QToolBox_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QToolBoxH; cdecl; external Qt4PasLib name 'QToolBox_create'; procedure QToolBox_destroy(handle: QToolBoxH); cdecl; external Qt4PasLib name 'QToolBox_destroy'; function QToolBox_addItem(handle: QToolBoxH; widget: QWidgetH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_addItem'; function QToolBox_addItem(handle: QToolBoxH; widget: QWidgetH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_addItem2'; function QToolBox_insertItem(handle: QToolBoxH; index: Integer; widget: QWidgetH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_insertItem'; function QToolBox_insertItem(handle: QToolBoxH; index: Integer; widget: QWidgetH; icon: QIconH; text: PWideString): Integer; cdecl; external Qt4PasLib name 'QToolBox_insertItem2'; procedure QToolBox_removeItem(handle: QToolBoxH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_removeItem'; procedure QToolBox_setItemEnabled(handle: QToolBoxH; index: Integer; enabled: Boolean); cdecl; external Qt4PasLib name 'QToolBox_setItemEnabled'; function QToolBox_isItemEnabled(handle: QToolBoxH; index: Integer): Boolean; cdecl; external Qt4PasLib name 'QToolBox_isItemEnabled'; procedure QToolBox_setItemText(handle: QToolBoxH; index: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QToolBox_setItemText'; procedure QToolBox_itemText(handle: QToolBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemText'; procedure QToolBox_setItemIcon(handle: QToolBoxH; index: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QToolBox_setItemIcon'; procedure QToolBox_itemIcon(handle: QToolBoxH; retval: QIconH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemIcon'; procedure QToolBox_setItemToolTip(handle: QToolBoxH; index: Integer; toolTip: PWideString); cdecl; external Qt4PasLib name 'QToolBox_setItemToolTip'; procedure QToolBox_itemToolTip(handle: QToolBoxH; retval: PWideString; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_itemToolTip'; function QToolBox_currentIndex(handle: QToolBoxH): Integer; cdecl; external Qt4PasLib name 'QToolBox_currentIndex'; function QToolBox_currentWidget(handle: QToolBoxH): QWidgetH; cdecl; external Qt4PasLib name 'QToolBox_currentWidget'; function QToolBox_widget(handle: QToolBoxH; index: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QToolBox_widget'; function QToolBox_indexOf(handle: QToolBoxH; widget: QWidgetH): Integer; cdecl; external Qt4PasLib name 'QToolBox_indexOf'; function QToolBox_count(handle: QToolBoxH): Integer; cdecl; external Qt4PasLib name 'QToolBox_count'; procedure QToolBox_setCurrentIndex(handle: QToolBoxH; index: Integer); cdecl; external Qt4PasLib name 'QToolBox_setCurrentIndex'; procedure QToolBox_setCurrentWidget(handle: QToolBoxH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QToolBox_setCurrentWidget'; type QToolBox_currentChanged_Event = procedure (index: Integer) of object cdecl; type QToolButtonToolButtonPopupMode = ( // QToolButton::ToolButtonPopupMode (1) QToolButtonDelayedPopup, QToolButtonMenuButtonPopup, QToolButtonInstantPopup ); function QToolButton_create(parent: QWidgetH = nil): QToolButtonH; cdecl; external Qt4PasLib name 'QToolButton_create'; procedure QToolButton_destroy(handle: QToolButtonH); cdecl; external Qt4PasLib name 'QToolButton_destroy'; procedure QToolButton_sizeHint(handle: QToolButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QToolButton_sizeHint'; procedure QToolButton_minimumSizeHint(handle: QToolButtonH; retval: PSize); cdecl; external Qt4PasLib name 'QToolButton_minimumSizeHint'; function QToolButton_toolButtonStyle(handle: QToolButtonH): QtToolButtonStyle; cdecl; external Qt4PasLib name 'QToolButton_toolButtonStyle'; function QToolButton_arrowType(handle: QToolButtonH): QtArrowType; cdecl; external Qt4PasLib name 'QToolButton_arrowType'; procedure QToolButton_setArrowType(handle: QToolButtonH; _type: QtArrowType); cdecl; external Qt4PasLib name 'QToolButton_setArrowType'; procedure QToolButton_setMenu(handle: QToolButtonH; menu: QMenuH); cdecl; external Qt4PasLib name 'QToolButton_setMenu'; function QToolButton_menu(handle: QToolButtonH): QMenuH; cdecl; external Qt4PasLib name 'QToolButton_menu'; procedure QToolButton_setPopupMode(handle: QToolButtonH; mode: QToolButtonToolButtonPopupMode); cdecl; external Qt4PasLib name 'QToolButton_setPopupMode'; function QToolButton_popupMode(handle: QToolButtonH): QToolButtonToolButtonPopupMode; cdecl; external Qt4PasLib name 'QToolButton_popupMode'; function QToolButton_defaultAction(handle: QToolButtonH): QActionH; cdecl; external Qt4PasLib name 'QToolButton_defaultAction'; procedure QToolButton_setAutoRaise(handle: QToolButtonH; enable: Boolean); cdecl; external Qt4PasLib name 'QToolButton_setAutoRaise'; function QToolButton_autoRaise(handle: QToolButtonH): Boolean; cdecl; external Qt4PasLib name 'QToolButton_autoRaise'; procedure QToolButton_showMenu(handle: QToolButtonH); cdecl; external Qt4PasLib name 'QToolButton_showMenu'; procedure QToolButton_setToolButtonStyle(handle: QToolButtonH; style: QtToolButtonStyle); cdecl; external Qt4PasLib name 'QToolButton_setToolButtonStyle'; procedure QToolButton_setDefaultAction(handle: QToolButtonH; AnonParam1: QActionH); cdecl; external Qt4PasLib name 'QToolButton_setDefaultAction'; type QToolButton_triggered_Event = procedure (AnonParam1: QActionH) of object cdecl; function QScrollArea_create(parent: QWidgetH = nil): QScrollAreaH; cdecl; external Qt4PasLib name 'QScrollArea_create'; procedure QScrollArea_destroy(handle: QScrollAreaH); cdecl; external Qt4PasLib name 'QScrollArea_destroy'; function QScrollArea_widget(handle: QScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QScrollArea_widget'; procedure QScrollArea_setWidget(handle: QScrollAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QScrollArea_setWidget'; function QScrollArea_takeWidget(handle: QScrollAreaH): QWidgetH; cdecl; external Qt4PasLib name 'QScrollArea_takeWidget'; function QScrollArea_widgetResizable(handle: QScrollAreaH): Boolean; cdecl; external Qt4PasLib name 'QScrollArea_widgetResizable'; procedure QScrollArea_setWidgetResizable(handle: QScrollAreaH; resizable: Boolean); cdecl; external Qt4PasLib name 'QScrollArea_setWidgetResizable'; procedure QScrollArea_sizeHint(handle: QScrollAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QScrollArea_sizeHint'; function QScrollArea_focusNextPrevChild(handle: QScrollAreaH; next: Boolean): Boolean; cdecl; external Qt4PasLib name 'QScrollArea_focusNextPrevChild'; function QScrollArea_alignment(handle: QScrollAreaH): QtAlignment; cdecl; external Qt4PasLib name 'QScrollArea_alignment'; procedure QScrollArea_setAlignment(handle: QScrollAreaH; AnonParam1: QtAlignment); cdecl; external Qt4PasLib name 'QScrollArea_setAlignment'; procedure QScrollArea_ensureVisible(handle: QScrollAreaH; x: Integer; y: Integer; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QScrollArea_ensureVisible'; procedure QScrollArea_ensureWidgetVisible(handle: QScrollAreaH; childWidget: QWidgetH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QScrollArea_ensureWidgetVisible'; type QMdiAreaWindowOrder = ( // QMdiArea::WindowOrder (1) QMdiAreaCreationOrder, QMdiAreaStackingOrder, QMdiAreaActivationHistoryOrder ); QMdiAreaViewMode = ( // QMdiArea::ViewMode (1) QMdiAreaSubWindowView, QMdiAreaTabbedView ); type QMdiAreaAreaOption = cardinal; // QMdiArea::AreaOption QMdiAreaAreaOptions = QMdiAreaAreaOption; //QFlags<> (3) const QMdiAreaDontMaximizeSubWindowOnActivation = $1; function QMdiArea_create(parent: QWidgetH = nil): QMdiAreaH; cdecl; external Qt4PasLib name 'QMdiArea_create'; procedure QMdiArea_destroy(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_destroy'; procedure QMdiArea_sizeHint(handle: QMdiAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiArea_sizeHint'; procedure QMdiArea_minimumSizeHint(handle: QMdiAreaH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiArea_minimumSizeHint'; function QMdiArea_currentSubWindow(handle: QMdiAreaH): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_currentSubWindow'; function QMdiArea_activeSubWindow(handle: QMdiAreaH): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_activeSubWindow'; procedure QMdiArea_subWindowList(handle: QMdiAreaH; retval: PPtrIntArray; order: QMdiAreaWindowOrder = QMdiAreaCreationOrder); cdecl; external Qt4PasLib name 'QMdiArea_subWindowList'; function QMdiArea_addSubWindow(handle: QMdiAreaH; widget: QWidgetH; flags: QtWindowFlags = 0): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiArea_addSubWindow'; procedure QMdiArea_removeSubWindow(handle: QMdiAreaH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMdiArea_removeSubWindow'; procedure QMdiArea_background(handle: QMdiAreaH; retval: QBrushH); cdecl; external Qt4PasLib name 'QMdiArea_background'; procedure QMdiArea_setBackground(handle: QMdiAreaH; background: QBrushH); cdecl; external Qt4PasLib name 'QMdiArea_setBackground'; function QMdiArea_activationOrder(handle: QMdiAreaH): QMdiAreaWindowOrder; cdecl; external Qt4PasLib name 'QMdiArea_activationOrder'; procedure QMdiArea_setActivationOrder(handle: QMdiAreaH; order: QMdiAreaWindowOrder); cdecl; external Qt4PasLib name 'QMdiArea_setActivationOrder'; procedure QMdiArea_setOption(handle: QMdiAreaH; option: QMdiAreaAreaOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QMdiArea_setOption'; function QMdiArea_testOption(handle: QMdiAreaH; opton: QMdiAreaAreaOption): Boolean; cdecl; external Qt4PasLib name 'QMdiArea_testOption'; procedure QMdiArea_setViewMode(handle: QMdiAreaH; mode: QMdiAreaViewMode); cdecl; external Qt4PasLib name 'QMdiArea_setViewMode'; function QMdiArea_viewMode(handle: QMdiAreaH): QMdiAreaViewMode; cdecl; external Qt4PasLib name 'QMdiArea_viewMode'; function QMdiArea_documentMode(handle: QMdiAreaH): Boolean; cdecl; external Qt4PasLib name 'QMdiArea_documentMode'; procedure QMdiArea_setDocumentMode(handle: QMdiAreaH; enabled: Boolean); cdecl; external Qt4PasLib name 'QMdiArea_setDocumentMode'; procedure QMdiArea_setTabShape(handle: QMdiAreaH; shape: QTabWidgetTabShape); cdecl; external Qt4PasLib name 'QMdiArea_setTabShape'; function QMdiArea_tabShape(handle: QMdiAreaH): QTabWidgetTabShape; cdecl; external Qt4PasLib name 'QMdiArea_tabShape'; procedure QMdiArea_setTabPosition(handle: QMdiAreaH; position: QTabWidgetTabPosition); cdecl; external Qt4PasLib name 'QMdiArea_setTabPosition'; function QMdiArea_tabPosition(handle: QMdiAreaH): QTabWidgetTabPosition; cdecl; external Qt4PasLib name 'QMdiArea_tabPosition'; procedure QMdiArea_setActiveSubWindow(handle: QMdiAreaH; window: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiArea_setActiveSubWindow'; procedure QMdiArea_tileSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_tileSubWindows'; procedure QMdiArea_cascadeSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_cascadeSubWindows'; procedure QMdiArea_closeActiveSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_closeActiveSubWindow'; procedure QMdiArea_closeAllSubWindows(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_closeAllSubWindows'; procedure QMdiArea_activateNextSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_activateNextSubWindow'; procedure QMdiArea_activatePreviousSubWindow(handle: QMdiAreaH); cdecl; external Qt4PasLib name 'QMdiArea_activatePreviousSubWindow'; type QMdiArea_subWindowActivated_Event = procedure (AnonParam1: QMdiSubWindowH) of object cdecl; type QMdiSubWindowSubWindowOption = cardinal; // QMdiSubWindow::SubWindowOption QMdiSubWindowSubWindowOptions = QMdiSubWindowSubWindowOption; //QFlags<> (3) const QMdiSubWindowAllowOutsideAreaHorizontally = $1; QMdiSubWindowAllowOutsideAreaVertically = $2; QMdiSubWindowRubberBandResize = $4; QMdiSubWindowRubberBandMove = $8; function QMdiSubWindow_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QMdiSubWindowH; cdecl; external Qt4PasLib name 'QMdiSubWindow_create'; procedure QMdiSubWindow_destroy(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_destroy'; procedure QMdiSubWindow_sizeHint(handle: QMdiSubWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiSubWindow_sizeHint'; procedure QMdiSubWindow_minimumSizeHint(handle: QMdiSubWindowH; retval: PSize); cdecl; external Qt4PasLib name 'QMdiSubWindow_minimumSizeHint'; procedure QMdiSubWindow_setWidget(handle: QMdiSubWindowH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QMdiSubWindow_setWidget'; function QMdiSubWindow_widget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_widget'; function QMdiSubWindow_maximizedButtonsWidget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_maximizedButtonsWidget'; function QMdiSubWindow_maximizedSystemMenuIconWidget(handle: QMdiSubWindowH): QWidgetH; cdecl; external Qt4PasLib name 'QMdiSubWindow_maximizedSystemMenuIconWidget'; function QMdiSubWindow_isShaded(handle: QMdiSubWindowH): Boolean; cdecl; external Qt4PasLib name 'QMdiSubWindow_isShaded'; procedure QMdiSubWindow_setOption(handle: QMdiSubWindowH; option: QMdiSubWindowSubWindowOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QMdiSubWindow_setOption'; function QMdiSubWindow_testOption(handle: QMdiSubWindowH; AnonParam1: QMdiSubWindowSubWindowOption): Boolean; cdecl; external Qt4PasLib name 'QMdiSubWindow_testOption'; procedure QMdiSubWindow_setKeyboardSingleStep(handle: QMdiSubWindowH; step: Integer); cdecl; external Qt4PasLib name 'QMdiSubWindow_setKeyboardSingleStep'; function QMdiSubWindow_keyboardSingleStep(handle: QMdiSubWindowH): Integer; cdecl; external Qt4PasLib name 'QMdiSubWindow_keyboardSingleStep'; procedure QMdiSubWindow_setKeyboardPageStep(handle: QMdiSubWindowH; step: Integer); cdecl; external Qt4PasLib name 'QMdiSubWindow_setKeyboardPageStep'; function QMdiSubWindow_keyboardPageStep(handle: QMdiSubWindowH): Integer; cdecl; external Qt4PasLib name 'QMdiSubWindow_keyboardPageStep'; procedure QMdiSubWindow_setSystemMenu(handle: QMdiSubWindowH; systemMenu: QMenuH); cdecl; external Qt4PasLib name 'QMdiSubWindow_setSystemMenu'; function QMdiSubWindow_systemMenu(handle: QMdiSubWindowH): QMenuH; cdecl; external Qt4PasLib name 'QMdiSubWindow_systemMenu'; function QMdiSubWindow_mdiArea(handle: QMdiSubWindowH): QMdiAreaH; cdecl; external Qt4PasLib name 'QMdiSubWindow_mdiArea'; procedure QMdiSubWindow_showSystemMenu(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_showSystemMenu'; procedure QMdiSubWindow_showShaded(handle: QMdiSubWindowH); cdecl; external Qt4PasLib name 'QMdiSubWindow_showShaded'; type QMdiSubWindow_windowStateChanged_Event = procedure (oldState: QtWindowStates; newState: QtWindowStates) of object cdecl; QMdiSubWindow_aboutToActivate_Event = procedure () of object cdecl; type QCalendarWidgetHorizontalHeaderFormat = ( // QCalendarWidget::HorizontalHeaderFormat (1) QCalendarWidgetNoHorizontalHeader, QCalendarWidgetSingleLetterDayNames, QCalendarWidgetShortDayNames, QCalendarWidgetLongDayNames ); QCalendarWidgetVerticalHeaderFormat = ( // QCalendarWidget::VerticalHeaderFormat (1) QCalendarWidgetNoVerticalHeader, QCalendarWidgetISOWeekNumbers ); QCalendarWidgetSelectionMode = ( // QCalendarWidget::SelectionMode (1) QCalendarWidgetNoSelection, QCalendarWidgetSingleSelection ); function QCalendarWidget_create(parent: QWidgetH = nil): QCalendarWidgetH; cdecl; external Qt4PasLib name 'QCalendarWidget_create'; procedure QCalendarWidget_destroy(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_destroy'; procedure QCalendarWidget_sizeHint(handle: QCalendarWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QCalendarWidget_sizeHint'; procedure QCalendarWidget_minimumSizeHint(handle: QCalendarWidgetH; retval: PSize); cdecl; external Qt4PasLib name 'QCalendarWidget_minimumSizeHint'; procedure QCalendarWidget_selectedDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_selectedDate'; function QCalendarWidget_yearShown(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_yearShown'; function QCalendarWidget_monthShown(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_monthShown'; procedure QCalendarWidget_minimumDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_minimumDate'; procedure QCalendarWidget_setMinimumDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setMinimumDate'; procedure QCalendarWidget_maximumDate(handle: QCalendarWidgetH; retval: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_maximumDate'; procedure QCalendarWidget_setMaximumDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setMaximumDate'; function QCalendarWidget_firstDayOfWeek(handle: QCalendarWidgetH): QtDayOfWeek; cdecl; external Qt4PasLib name 'QCalendarWidget_firstDayOfWeek'; procedure QCalendarWidget_setFirstDayOfWeek(handle: QCalendarWidgetH; dayOfWeek: QtDayOfWeek); cdecl; external Qt4PasLib name 'QCalendarWidget_setFirstDayOfWeek'; function QCalendarWidget_isHeaderVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isHeaderVisible'; procedure QCalendarWidget_setHeaderVisible(handle: QCalendarWidgetH; show: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setHeaderVisible'; function QCalendarWidget_isNavigationBarVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isNavigationBarVisible'; function QCalendarWidget_isGridVisible(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isGridVisible'; function QCalendarWidget_selectionMode(handle: QCalendarWidgetH): QCalendarWidgetSelectionMode; cdecl; external Qt4PasLib name 'QCalendarWidget_selectionMode'; procedure QCalendarWidget_setSelectionMode(handle: QCalendarWidgetH; mode: QCalendarWidgetSelectionMode); cdecl; external Qt4PasLib name 'QCalendarWidget_setSelectionMode'; function QCalendarWidget_horizontalHeaderFormat(handle: QCalendarWidgetH): QCalendarWidgetHorizontalHeaderFormat; cdecl; external Qt4PasLib name 'QCalendarWidget_horizontalHeaderFormat'; procedure QCalendarWidget_setHorizontalHeaderFormat(handle: QCalendarWidgetH; format: QCalendarWidgetHorizontalHeaderFormat); cdecl; external Qt4PasLib name 'QCalendarWidget_setHorizontalHeaderFormat'; function QCalendarWidget_verticalHeaderFormat(handle: QCalendarWidgetH): QCalendarWidgetVerticalHeaderFormat; cdecl; external Qt4PasLib name 'QCalendarWidget_verticalHeaderFormat'; procedure QCalendarWidget_setVerticalHeaderFormat(handle: QCalendarWidgetH; format: QCalendarWidgetVerticalHeaderFormat); cdecl; external Qt4PasLib name 'QCalendarWidget_setVerticalHeaderFormat'; procedure QCalendarWidget_headerTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_headerTextFormat'; procedure QCalendarWidget_setHeaderTextFormat(handle: QCalendarWidgetH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setHeaderTextFormat'; procedure QCalendarWidget_weekdayTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH; dayOfWeek: QtDayOfWeek); cdecl; external Qt4PasLib name 'QCalendarWidget_weekdayTextFormat'; procedure QCalendarWidget_setWeekdayTextFormat(handle: QCalendarWidgetH; dayOfWeek: QtDayOfWeek; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setWeekdayTextFormat'; procedure QCalendarWidget_dateTextFormat(handle: QCalendarWidgetH; retval: QTextCharFormatH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_dateTextFormat2'; procedure QCalendarWidget_setDateTextFormat(handle: QCalendarWidgetH; date: QDateH; format: QTextCharFormatH); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateTextFormat'; function QCalendarWidget_isDateEditEnabled(handle: QCalendarWidgetH): Boolean; cdecl; external Qt4PasLib name 'QCalendarWidget_isDateEditEnabled'; procedure QCalendarWidget_setDateEditEnabled(handle: QCalendarWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateEditEnabled'; function QCalendarWidget_dateEditAcceptDelay(handle: QCalendarWidgetH): Integer; cdecl; external Qt4PasLib name 'QCalendarWidget_dateEditAcceptDelay'; procedure QCalendarWidget_setDateEditAcceptDelay(handle: QCalendarWidgetH; delay: Integer); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateEditAcceptDelay'; procedure QCalendarWidget_setSelectedDate(handle: QCalendarWidgetH; date: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setSelectedDate'; procedure QCalendarWidget_setDateRange(handle: QCalendarWidgetH; min: QDateH; max: QDateH); cdecl; external Qt4PasLib name 'QCalendarWidget_setDateRange'; procedure QCalendarWidget_setCurrentPage(handle: QCalendarWidgetH; year: Integer; month: Integer); cdecl; external Qt4PasLib name 'QCalendarWidget_setCurrentPage'; procedure QCalendarWidget_setGridVisible(handle: QCalendarWidgetH; show: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setGridVisible'; procedure QCalendarWidget_setNavigationBarVisible(handle: QCalendarWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QCalendarWidget_setNavigationBarVisible'; procedure QCalendarWidget_showNextMonth(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showNextMonth'; procedure QCalendarWidget_showPreviousMonth(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showPreviousMonth'; procedure QCalendarWidget_showNextYear(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showNextYear'; procedure QCalendarWidget_showPreviousYear(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showPreviousYear'; procedure QCalendarWidget_showSelectedDate(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showSelectedDate'; procedure QCalendarWidget_showToday(handle: QCalendarWidgetH); cdecl; external Qt4PasLib name 'QCalendarWidget_showToday'; type QCalendarWidget_selectionChanged_Event = procedure () of object cdecl; QCalendarWidget_clicked_Event = procedure (date: QDateH) of object cdecl; QCalendarWidget_activated_Event = procedure (date: QDateH) of object cdecl; QCalendarWidget_currentPageChanged_Event = procedure (year: Integer; month: Integer) of object cdecl; type QRubberBandShape = ( // QRubberBand::Shape (1) QRubberBandLine, QRubberBandRectangle ); function QRubberBand_create(AnonParam1: QRubberBandShape; AnonParam2: QWidgetH = nil): QRubberBandH; cdecl; external Qt4PasLib name 'QRubberBand_create'; procedure QRubberBand_destroy(handle: QRubberBandH); cdecl; external Qt4PasLib name 'QRubberBand_destroy'; function QRubberBand_shape(handle: QRubberBandH): QRubberBandShape; cdecl; external Qt4PasLib name 'QRubberBand_shape'; procedure QRubberBand_setGeometry(handle: QRubberBandH; r: PRect); cdecl; external Qt4PasLib name 'QRubberBand_setGeometry'; procedure QRubberBand_setGeometry(handle: QRubberBandH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRubberBand_setGeometry2'; procedure QRubberBand_move(handle: QRubberBandH; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QRubberBand_move'; procedure QRubberBand_move(handle: QRubberBandH; p: PQtPoint); cdecl; external Qt4PasLib name 'QRubberBand_move2'; procedure QRubberBand_resize(handle: QRubberBandH; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QRubberBand_resize'; procedure QRubberBand_resize(handle: QRubberBandH; s: PSize); cdecl; external Qt4PasLib name 'QRubberBand_resize2'; type QPrintPreviewWidgetViewMode = ( // QPrintPreviewWidget::ViewMode (1) QPrintPreviewWidgetSinglePageView, QPrintPreviewWidgetFacingPagesView, QPrintPreviewWidgetAllPagesView ); QPrintPreviewWidgetZoomMode = ( // QPrintPreviewWidget::ZoomMode (1) QPrintPreviewWidgetCustomZoom, QPrintPreviewWidgetFitToWidth, QPrintPreviewWidgetFitInView ); function QPrintPreviewWidget_create(printer: QPrinterH; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewWidgetH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_create'; procedure QPrintPreviewWidget_destroy(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_destroy'; function QPrintPreviewWidget_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewWidgetH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_create2'; function QPrintPreviewWidget_zoomFactor(handle: QPrintPreviewWidgetH): qreal; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomFactor'; function QPrintPreviewWidget_orientation(handle: QPrintPreviewWidgetH): QPrinterOrientation; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_orientation'; function QPrintPreviewWidget_viewMode(handle: QPrintPreviewWidgetH): QPrintPreviewWidgetViewMode; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_viewMode'; function QPrintPreviewWidget_zoomMode(handle: QPrintPreviewWidgetH): QPrintPreviewWidgetZoomMode; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomMode'; function QPrintPreviewWidget_currentPage(handle: QPrintPreviewWidgetH): Integer; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_currentPage'; function QPrintPreviewWidget_numPages(handle: QPrintPreviewWidgetH): Integer; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_numPages'; procedure QPrintPreviewWidget_setVisible(handle: QPrintPreviewWidgetH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setVisible'; procedure QPrintPreviewWidget_print(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_print'; procedure QPrintPreviewWidget_zoomIn(handle: QPrintPreviewWidgetH; zoom: qreal = 1.1); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomIn'; procedure QPrintPreviewWidget_zoomOut(handle: QPrintPreviewWidgetH; zoom: qreal = 1.1); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_zoomOut'; procedure QPrintPreviewWidget_setZoomFactor(handle: QPrintPreviewWidgetH; zoomFactor: qreal); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setZoomFactor'; procedure QPrintPreviewWidget_setOrientation(handle: QPrintPreviewWidgetH; orientation: QPrinterOrientation); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setOrientation'; procedure QPrintPreviewWidget_setViewMode(handle: QPrintPreviewWidgetH; viewMode: QPrintPreviewWidgetViewMode); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setViewMode'; procedure QPrintPreviewWidget_setZoomMode(handle: QPrintPreviewWidgetH; zoomMode: QPrintPreviewWidgetZoomMode); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setZoomMode'; procedure QPrintPreviewWidget_setCurrentPage(handle: QPrintPreviewWidgetH; pageNumber: Integer); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setCurrentPage'; procedure QPrintPreviewWidget_fitToWidth(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_fitToWidth'; procedure QPrintPreviewWidget_fitInView(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_fitInView'; procedure QPrintPreviewWidget_setLandscapeOrientation(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setLandscapeOrientation'; procedure QPrintPreviewWidget_setPortraitOrientation(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setPortraitOrientation'; procedure QPrintPreviewWidget_setSinglePageViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setSinglePageViewMode'; procedure QPrintPreviewWidget_setFacingPagesViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setFacingPagesViewMode'; procedure QPrintPreviewWidget_setAllPagesViewMode(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_setAllPagesViewMode'; procedure QPrintPreviewWidget_updatePreview(handle: QPrintPreviewWidgetH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_updatePreview'; type QPrintPreviewWidget_paintRequested_Event = procedure (printer: QPrinterH) of object cdecl; QPrintPreviewWidget_previewChanged_Event = procedure () of object cdecl; type QAbstractItemViewSelectionMode = ( // QAbstractItemView::SelectionMode (1) QAbstractItemViewNoSelection, QAbstractItemViewSingleSelection, QAbstractItemViewMultiSelection, QAbstractItemViewExtendedSelection, QAbstractItemViewContiguousSelection ); QAbstractItemViewSelectionBehavior = ( // QAbstractItemView::SelectionBehavior (1) QAbstractItemViewSelectItems, QAbstractItemViewSelectRows, QAbstractItemViewSelectColumns ); QAbstractItemViewScrollHint = ( // QAbstractItemView::ScrollHint (1) QAbstractItemViewEnsureVisible, QAbstractItemViewPositionAtTop, QAbstractItemViewPositionAtBottom, QAbstractItemViewPositionAtCenter ); QAbstractItemViewScrollMode = ( // QAbstractItemView::ScrollMode (1) QAbstractItemViewScrollPerItem, QAbstractItemViewScrollPerPixel ); QAbstractItemViewDragDropMode = ( // QAbstractItemView::DragDropMode (1) QAbstractItemViewNoDragDrop, QAbstractItemViewDragOnly, QAbstractItemViewDropOnly, QAbstractItemViewDragDrop, QAbstractItemViewInternalMove ); type QAbstractItemViewEditTrigger = cardinal; // QAbstractItemView::EditTrigger QAbstractItemViewEditTriggers = QAbstractItemViewEditTrigger; //QFlags<> (3) const QAbstractItemViewNoEditTriggers = 0; QAbstractItemViewCurrentChanged = 1; QAbstractItemViewDoubleClicked = 2; QAbstractItemViewSelectedClicked = 4; QAbstractItemViewEditKeyPressed = 8; QAbstractItemViewAnyKeyPressed = 16; QAbstractItemViewAllEditTriggers = 31; procedure QAbstractItemView_setModel(handle: QAbstractItemViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QAbstractItemView_setModel'; function QAbstractItemView_model(handle: QAbstractItemViewH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QAbstractItemView_model'; procedure QAbstractItemView_setSelectionModel(handle: QAbstractItemViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionModel'; function QAbstractItemView_selectionModel(handle: QAbstractItemViewH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionModel'; procedure QAbstractItemView_setItemDelegate(handle: QAbstractItemViewH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegate'; function QAbstractItemView_itemDelegate(handle: QAbstractItemViewH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegate'; procedure QAbstractItemView_setSelectionMode(handle: QAbstractItemViewH; mode: QAbstractItemViewSelectionMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionMode'; function QAbstractItemView_selectionMode(handle: QAbstractItemViewH): QAbstractItemViewSelectionMode; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionMode'; procedure QAbstractItemView_setSelectionBehavior(handle: QAbstractItemViewH; behavior: QAbstractItemViewSelectionBehavior); cdecl; external Qt4PasLib name 'QAbstractItemView_setSelectionBehavior'; function QAbstractItemView_selectionBehavior(handle: QAbstractItemViewH): QAbstractItemViewSelectionBehavior; cdecl; external Qt4PasLib name 'QAbstractItemView_selectionBehavior'; procedure QAbstractItemView_currentIndex(handle: QAbstractItemViewH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_currentIndex'; procedure QAbstractItemView_rootIndex(handle: QAbstractItemViewH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_rootIndex'; procedure QAbstractItemView_setEditTriggers(handle: QAbstractItemViewH; triggers: QAbstractItemViewEditTriggers); cdecl; external Qt4PasLib name 'QAbstractItemView_setEditTriggers'; function QAbstractItemView_editTriggers(handle: QAbstractItemViewH): QAbstractItemViewEditTriggers; cdecl; external Qt4PasLib name 'QAbstractItemView_editTriggers'; procedure QAbstractItemView_setVerticalScrollMode(handle: QAbstractItemViewH; mode: QAbstractItemViewScrollMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setVerticalScrollMode'; function QAbstractItemView_verticalScrollMode(handle: QAbstractItemViewH): QAbstractItemViewScrollMode; cdecl; external Qt4PasLib name 'QAbstractItemView_verticalScrollMode'; procedure QAbstractItemView_setHorizontalScrollMode(handle: QAbstractItemViewH; mode: QAbstractItemViewScrollMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setHorizontalScrollMode'; function QAbstractItemView_horizontalScrollMode(handle: QAbstractItemViewH): QAbstractItemViewScrollMode; cdecl; external Qt4PasLib name 'QAbstractItemView_horizontalScrollMode'; procedure QAbstractItemView_setAutoScroll(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setAutoScroll'; function QAbstractItemView_hasAutoScroll(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_hasAutoScroll'; procedure QAbstractItemView_setAutoScrollMargin(handle: QAbstractItemViewH; margin: Integer); cdecl; external Qt4PasLib name 'QAbstractItemView_setAutoScrollMargin'; function QAbstractItemView_autoScrollMargin(handle: QAbstractItemViewH): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_autoScrollMargin'; procedure QAbstractItemView_setTabKeyNavigation(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setTabKeyNavigation'; function QAbstractItemView_tabKeyNavigation(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_tabKeyNavigation'; procedure QAbstractItemView_setDropIndicatorShown(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDropIndicatorShown'; function QAbstractItemView_showDropIndicator(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_showDropIndicator'; procedure QAbstractItemView_setDragEnabled(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragEnabled'; function QAbstractItemView_dragEnabled(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_dragEnabled'; procedure QAbstractItemView_setDragDropOverwriteMode(handle: QAbstractItemViewH; overwrite: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragDropOverwriteMode'; function QAbstractItemView_dragDropOverwriteMode(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_dragDropOverwriteMode'; procedure QAbstractItemView_setDragDropMode(handle: QAbstractItemViewH; behavior: QAbstractItemViewDragDropMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setDragDropMode'; function QAbstractItemView_dragDropMode(handle: QAbstractItemViewH): QAbstractItemViewDragDropMode; cdecl; external Qt4PasLib name 'QAbstractItemView_dragDropMode'; procedure QAbstractItemView_setAlternatingRowColors(handle: QAbstractItemViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QAbstractItemView_setAlternatingRowColors'; function QAbstractItemView_alternatingRowColors(handle: QAbstractItemViewH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemView_alternatingRowColors'; procedure QAbstractItemView_setIconSize(handle: QAbstractItemViewH; size: PSize); cdecl; external Qt4PasLib name 'QAbstractItemView_setIconSize'; procedure QAbstractItemView_iconSize(handle: QAbstractItemViewH; retval: PSize); cdecl; external Qt4PasLib name 'QAbstractItemView_iconSize'; procedure QAbstractItemView_setTextElideMode(handle: QAbstractItemViewH; mode: QtTextElideMode); cdecl; external Qt4PasLib name 'QAbstractItemView_setTextElideMode'; function QAbstractItemView_textElideMode(handle: QAbstractItemViewH): QtTextElideMode; cdecl; external Qt4PasLib name 'QAbstractItemView_textElideMode'; procedure QAbstractItemView_keyboardSearch(handle: QAbstractItemViewH; search: PWideString); cdecl; external Qt4PasLib name 'QAbstractItemView_keyboardSearch'; procedure QAbstractItemView_visualRect(handle: QAbstractItemViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_visualRect'; procedure QAbstractItemView_scrollTo(handle: QAbstractItemViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint = QAbstractItemViewEnsureVisible); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollTo'; procedure QAbstractItemView_indexAt(handle: QAbstractItemViewH; retval: QModelIndexH; point: PQtPoint); cdecl; external Qt4PasLib name 'QAbstractItemView_indexAt'; procedure QAbstractItemView_sizeHintForIndex(handle: QAbstractItemViewH; retval: PSize; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForIndex'; function QAbstractItemView_sizeHintForRow(handle: QAbstractItemViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForRow'; function QAbstractItemView_sizeHintForColumn(handle: QAbstractItemViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QAbstractItemView_sizeHintForColumn'; procedure QAbstractItemView_openPersistentEditor(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_openPersistentEditor'; procedure QAbstractItemView_closePersistentEditor(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_closePersistentEditor'; procedure QAbstractItemView_setIndexWidget(handle: QAbstractItemViewH; index: QModelIndexH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QAbstractItemView_setIndexWidget'; function QAbstractItemView_indexWidget(handle: QAbstractItemViewH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractItemView_indexWidget'; procedure QAbstractItemView_setItemDelegateForRow(handle: QAbstractItemViewH; row: Integer; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegateForRow'; function QAbstractItemView_itemDelegateForRow(handle: QAbstractItemViewH; row: Integer): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegateForRow'; procedure QAbstractItemView_setItemDelegateForColumn(handle: QAbstractItemViewH; column: Integer; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QAbstractItemView_setItemDelegateForColumn'; function QAbstractItemView_itemDelegateForColumn(handle: QAbstractItemViewH; column: Integer): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegateForColumn'; function QAbstractItemView_itemDelegate(handle: QAbstractItemViewH; index: QModelIndexH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QAbstractItemView_itemDelegate2'; procedure QAbstractItemView_inputMethodQuery(handle: QAbstractItemViewH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QAbstractItemView_inputMethodQuery'; procedure QAbstractItemView_reset(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_reset'; procedure QAbstractItemView_setRootIndex(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_setRootIndex'; procedure QAbstractItemView_doItemsLayout(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_doItemsLayout'; procedure QAbstractItemView_selectAll(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_selectAll'; procedure QAbstractItemView_edit(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_edit'; procedure QAbstractItemView_clearSelection(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_clearSelection'; procedure QAbstractItemView_setCurrentIndex(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_setCurrentIndex'; procedure QAbstractItemView_scrollToTop(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollToTop'; procedure QAbstractItemView_scrollToBottom(handle: QAbstractItemViewH); cdecl; external Qt4PasLib name 'QAbstractItemView_scrollToBottom'; procedure QAbstractItemView_update(handle: QAbstractItemViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemView_update'; type QAbstractItemView_pressed_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_clicked_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_doubleClicked_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_activated_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_entered_Event = procedure (index: QModelIndexH) of object cdecl; QAbstractItemView_viewportEntered_Event = procedure () of object cdecl; type QListViewMovement = ( // QListView::Movement (1) QListViewStatic, QListViewFree, QListViewSnap ); QListViewFlow = ( // QListView::Flow (1) QListViewLeftToRight, QListViewTopToBottom ); QListViewResizeMode = ( // QListView::ResizeMode (1) QListViewFixed, QListViewAdjust ); QListViewLayoutMode = ( // QListView::LayoutMode (1) QListViewSinglePass, QListViewBatched ); QListViewViewMode = ( // QListView::ViewMode (1) QListViewListMode, QListViewIconMode ); function QListView_create(parent: QWidgetH = nil): QListViewH; cdecl; external Qt4PasLib name 'QListView_create'; procedure QListView_destroy(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_destroy'; procedure QListView_setMovement(handle: QListViewH; movement: QListViewMovement); cdecl; external Qt4PasLib name 'QListView_setMovement'; function QListView_movement(handle: QListViewH): QListViewMovement; cdecl; external Qt4PasLib name 'QListView_movement'; procedure QListView_setFlow(handle: QListViewH; flow: QListViewFlow); cdecl; external Qt4PasLib name 'QListView_setFlow'; function QListView_flow(handle: QListViewH): QListViewFlow; cdecl; external Qt4PasLib name 'QListView_flow'; procedure QListView_setWrapping(handle: QListViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QListView_setWrapping'; function QListView_isWrapping(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_isWrapping'; procedure QListView_setResizeMode(handle: QListViewH; mode: QListViewResizeMode); cdecl; external Qt4PasLib name 'QListView_setResizeMode'; function QListView_resizeMode(handle: QListViewH): QListViewResizeMode; cdecl; external Qt4PasLib name 'QListView_resizeMode'; procedure QListView_setLayoutMode(handle: QListViewH; mode: QListViewLayoutMode); cdecl; external Qt4PasLib name 'QListView_setLayoutMode'; function QListView_layoutMode(handle: QListViewH): QListViewLayoutMode; cdecl; external Qt4PasLib name 'QListView_layoutMode'; procedure QListView_setSpacing(handle: QListViewH; space: Integer); cdecl; external Qt4PasLib name 'QListView_setSpacing'; function QListView_spacing(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_spacing'; procedure QListView_setBatchSize(handle: QListViewH; batchSize: Integer); cdecl; external Qt4PasLib name 'QListView_setBatchSize'; function QListView_batchSize(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_batchSize'; procedure QListView_setGridSize(handle: QListViewH; size: PSize); cdecl; external Qt4PasLib name 'QListView_setGridSize'; procedure QListView_gridSize(handle: QListViewH; retval: PSize); cdecl; external Qt4PasLib name 'QListView_gridSize'; procedure QListView_setViewMode(handle: QListViewH; mode: QListViewViewMode); cdecl; external Qt4PasLib name 'QListView_setViewMode'; function QListView_viewMode(handle: QListViewH): QListViewViewMode; cdecl; external Qt4PasLib name 'QListView_viewMode'; procedure QListView_clearPropertyFlags(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_clearPropertyFlags'; function QListView_isRowHidden(handle: QListViewH; row: Integer): Boolean; cdecl; external Qt4PasLib name 'QListView_isRowHidden'; procedure QListView_setRowHidden(handle: QListViewH; row: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QListView_setRowHidden'; procedure QListView_setModelColumn(handle: QListViewH; column: Integer); cdecl; external Qt4PasLib name 'QListView_setModelColumn'; function QListView_modelColumn(handle: QListViewH): Integer; cdecl; external Qt4PasLib name 'QListView_modelColumn'; procedure QListView_setUniformItemSizes(handle: QListViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QListView_setUniformItemSizes'; function QListView_uniformItemSizes(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_uniformItemSizes'; procedure QListView_setWordWrap(handle: QListViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QListView_setWordWrap'; function QListView_wordWrap(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_wordWrap'; procedure QListView_setSelectionRectVisible(handle: QListViewH; show: Boolean); cdecl; external Qt4PasLib name 'QListView_setSelectionRectVisible'; function QListView_isSelectionRectVisible(handle: QListViewH): Boolean; cdecl; external Qt4PasLib name 'QListView_isSelectionRectVisible'; procedure QListView_visualRect(handle: QListViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QListView_visualRect'; procedure QListView_scrollTo(handle: QListViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QListView_scrollTo'; procedure QListView_indexAt(handle: QListViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QListView_indexAt'; procedure QListView_doItemsLayout(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_doItemsLayout'; procedure QListView_reset(handle: QListViewH); cdecl; external Qt4PasLib name 'QListView_reset'; procedure QListView_setRootIndex(handle: QListViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QListView_setRootIndex'; type QItemSelectionModelSelectionFlag = cardinal; // QItemSelectionModel::SelectionFlag (4) QItemSelectionModelSelectionFlags = QItemSelectionModelSelectionFlag; // QFlags<> const QItemSelectionModelNoUpdate = 0 { $0 }; QItemSelectionModelClear = 1 { $1 }; QItemSelectionModelSelect = 2 { $2 }; QItemSelectionModelDeselect = 4 { $4 }; QItemSelectionModelToggle = 8 { $8 }; QItemSelectionModelCurrent = 16 { $10 }; QItemSelectionModelRows = 32 { $20 }; QItemSelectionModelColumns = 64 { $40 }; QItemSelectionModelSelectCurrent = 18 { $12 }; QItemSelectionModelToggleCurrent = 24 { $18 }; QItemSelectionModelClearAndSelect = 3 { $3 }; function QItemSelectionRange_create(): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create'; procedure QItemSelectionRange_destroy(handle: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_destroy'; function QItemSelectionRange_create(other: QItemSelectionRangeH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create2'; function QItemSelectionRange_create(topLeft: QModelIndexH; bottomRight: QModelIndexH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create3'; function QItemSelectionRange_create(index: QModelIndexH): QItemSelectionRangeH; cdecl; external Qt4PasLib name 'QItemSelectionRange_create4'; function QItemSelectionRange_top(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_top'; function QItemSelectionRange_left(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_left'; function QItemSelectionRange_bottom(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_bottom'; function QItemSelectionRange_right(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_right'; function QItemSelectionRange_width(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_width'; function QItemSelectionRange_height(handle: QItemSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QItemSelectionRange_height'; procedure QItemSelectionRange_topLeft(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_topLeft'; procedure QItemSelectionRange_bottomRight(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_bottomRight'; procedure QItemSelectionRange_parent(handle: QItemSelectionRangeH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionRange_parent'; function QItemSelectionRange_model(handle: QItemSelectionRangeH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QItemSelectionRange_model'; function QItemSelectionRange_contains(handle: QItemSelectionRangeH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_contains'; function QItemSelectionRange_contains(handle: QItemSelectionRangeH; row: Integer; column: Integer; parentIndex: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_contains2'; function QItemSelectionRange_intersects(handle: QItemSelectionRangeH; other: QItemSelectionRangeH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_intersects'; procedure QItemSelectionRange_intersect(handle: QItemSelectionRangeH; retval: QItemSelectionRangeH; other: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_intersect'; procedure QItemSelectionRange_intersected(handle: QItemSelectionRangeH; retval: QItemSelectionRangeH; other: QItemSelectionRangeH); cdecl; external Qt4PasLib name 'QItemSelectionRange_intersected'; function QItemSelectionRange_isValid(handle: QItemSelectionRangeH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionRange_isValid'; procedure QItemSelectionRange_indexes(handle: QItemSelectionRangeH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QItemSelectionRange_indexes'; function QItemSelectionModel_create(model: QAbstractItemModelH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_create'; procedure QItemSelectionModel_destroy(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_destroy'; function QItemSelectionModel_create(model: QAbstractItemModelH; parent: QObjectH): QItemSelectionModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_create2'; procedure QItemSelectionModel_currentIndex(handle: QItemSelectionModelH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QItemSelectionModel_currentIndex'; function QItemSelectionModel_isSelected(handle: QItemSelectionModelH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isSelected'; function QItemSelectionModel_isRowSelected(handle: QItemSelectionModelH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isRowSelected'; function QItemSelectionModel_isColumnSelected(handle: QItemSelectionModelH; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_isColumnSelected'; function QItemSelectionModel_rowIntersectsSelection(handle: QItemSelectionModelH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_rowIntersectsSelection'; function QItemSelectionModel_columnIntersectsSelection(handle: QItemSelectionModelH; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_columnIntersectsSelection'; function QItemSelectionModel_hasSelection(handle: QItemSelectionModelH): Boolean; cdecl; external Qt4PasLib name 'QItemSelectionModel_hasSelection'; procedure QItemSelectionModel_selectedIndexes(handle: QItemSelectionModelH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedIndexes'; procedure QItemSelectionModel_selectedRows(handle: QItemSelectionModelH; retval: PPtrIntArray; column: Integer = 0); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedRows'; procedure QItemSelectionModel_selectedColumns(handle: QItemSelectionModelH; retval: PPtrIntArray; row: Integer = 0); cdecl; external Qt4PasLib name 'QItemSelectionModel_selectedColumns'; function QItemSelectionModel_model(handle: QItemSelectionModelH): QAbstractItemModelH; cdecl; external Qt4PasLib name 'QItemSelectionModel_model'; procedure QItemSelectionModel_setCurrentIndex(handle: QItemSelectionModelH; index: QModelIndexH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QItemSelectionModel_setCurrentIndex'; procedure QItemSelectionModel_select(handle: QItemSelectionModelH; index: QModelIndexH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QItemSelectionModel_select'; procedure QItemSelectionModel_clear(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_clear'; procedure QItemSelectionModel_reset(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_reset'; procedure QItemSelectionModel_clearSelection(handle: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QItemSelectionModel_clearSelection'; type QItemSelectionModel_currentChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; QItemSelectionModel_currentRowChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; QItemSelectionModel_currentColumnChanged_Event = procedure (current: QModelIndexH; previous: QModelIndexH) of object cdecl; type QListWidgetItemItemType = ( //QListWidgetItem::ItemType (2) QListWidgetItemType = 0, QListWidgetItemUserType = 1000 ); function QListWidgetItem_create(view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create'; procedure QListWidgetItem_destroy(handle: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidgetItem_destroy'; function QListWidgetItem_create(text: PWideString; view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create2'; function QListWidgetItem_create(icon: QIconH; text: PWideString; view: QListWidgetH = nil; _type: QListWidgetItemItemType = QListWidgetItemType): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create3'; function QListWidgetItem_create(other: QListWidgetItemH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_create4'; function QListWidgetItem_clone(handle: QListWidgetItemH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidgetItem_clone'; function QListWidgetItem_listWidget(handle: QListWidgetItemH): QListWidgetH; cdecl; external Qt4PasLib name 'QListWidgetItem_listWidget'; procedure QListWidgetItem_setSelected(handle: QListWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QListWidgetItem_setSelected'; function QListWidgetItem_isSelected(handle: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidgetItem_isSelected'; procedure QListWidgetItem_setHidden(handle: QListWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QListWidgetItem_setHidden'; function QListWidgetItem_isHidden(handle: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidgetItem_isHidden'; function QListWidgetItem_flags(handle: QListWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QListWidgetItem_flags'; procedure QListWidgetItem_setFlags(handle: QListWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QListWidgetItem_setFlags'; procedure QListWidgetItem_text(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_text'; procedure QListWidgetItem_setText(handle: QListWidgetItemH; text: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setText'; procedure QListWidgetItem_icon(handle: QListWidgetItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QListWidgetItem_icon'; procedure QListWidgetItem_setIcon(handle: QListWidgetItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QListWidgetItem_setIcon'; procedure QListWidgetItem_statusTip(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_statusTip'; procedure QListWidgetItem_setStatusTip(handle: QListWidgetItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setStatusTip'; procedure QListWidgetItem_toolTip(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_toolTip'; procedure QListWidgetItem_setToolTip(handle: QListWidgetItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setToolTip'; procedure QListWidgetItem_whatsThis(handle: QListWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_whatsThis'; procedure QListWidgetItem_setWhatsThis(handle: QListWidgetItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QListWidgetItem_setWhatsThis'; procedure QListWidgetItem_font(handle: QListWidgetItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QListWidgetItem_font'; procedure QListWidgetItem_setFont(handle: QListWidgetItemH; font: QFontH); cdecl; external Qt4PasLib name 'QListWidgetItem_setFont'; function QListWidgetItem_textAlignment(handle: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidgetItem_textAlignment'; procedure QListWidgetItem_setTextAlignment(handle: QListWidgetItemH; alignment: Integer); cdecl; external Qt4PasLib name 'QListWidgetItem_setTextAlignment'; procedure QListWidgetItem_backgroundColor(handle: QListWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_backgroundColor'; procedure QListWidgetItem_setBackgroundColor(handle: QListWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_setBackgroundColor'; procedure QListWidgetItem_background(handle: QListWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_background'; procedure QListWidgetItem_setBackground(handle: QListWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_setBackground'; procedure QListWidgetItem_textColor(handle: QListWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_textColor'; procedure QListWidgetItem_setTextColor(handle: QListWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QListWidgetItem_setTextColor'; procedure QListWidgetItem_foreground(handle: QListWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_foreground'; procedure QListWidgetItem_setForeground(handle: QListWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QListWidgetItem_setForeground'; function QListWidgetItem_checkState(handle: QListWidgetItemH): QtCheckState; cdecl; external Qt4PasLib name 'QListWidgetItem_checkState'; procedure QListWidgetItem_setCheckState(handle: QListWidgetItemH; state: QtCheckState); cdecl; external Qt4PasLib name 'QListWidgetItem_setCheckState'; procedure QListWidgetItem_sizeHint(handle: QListWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QListWidgetItem_sizeHint'; procedure QListWidgetItem_setSizeHint(handle: QListWidgetItemH; size: PSize); cdecl; external Qt4PasLib name 'QListWidgetItem_setSizeHint'; procedure QListWidgetItem_data(handle: QListWidgetItemH; retval: QVariantH; role: Integer); cdecl; external Qt4PasLib name 'QListWidgetItem_data'; procedure QListWidgetItem_setData(handle: QListWidgetItemH; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QListWidgetItem_setData'; procedure QListWidgetItem_read(handle: QListWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QListWidgetItem_read'; procedure QListWidgetItem_write(handle: QListWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QListWidgetItem_write'; function QListWidgetItem_type(handle: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidgetItem_type'; function QListWidget_create(parent: QWidgetH = nil): QListWidgetH; cdecl; external Qt4PasLib name 'QListWidget_create'; procedure QListWidget_destroy(handle: QListWidgetH); cdecl; external Qt4PasLib name 'QListWidget_destroy'; function QListWidget_item(handle: QListWidgetH; row: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_item'; function QListWidget_row(handle: QListWidgetH; item: QListWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QListWidget_row'; procedure QListWidget_insertItem(handle: QListWidgetH; row: Integer; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_insertItem'; procedure QListWidget_insertItem(handle: QListWidgetH; row: Integer; _label: PWideString); cdecl; external Qt4PasLib name 'QListWidget_insertItem2'; procedure QListWidget_insertItems(handle: QListWidgetH; row: Integer; labels: QStringListH); cdecl; external Qt4PasLib name 'QListWidget_insertItems'; procedure QListWidget_addItem(handle: QListWidgetH; _label: PWideString); cdecl; external Qt4PasLib name 'QListWidget_addItem'; procedure QListWidget_addItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_addItem2'; procedure QListWidget_addItems(handle: QListWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QListWidget_addItems'; function QListWidget_takeItem(handle: QListWidgetH; row: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_takeItem'; function QListWidget_count(handle: QListWidgetH): Integer; cdecl; external Qt4PasLib name 'QListWidget_count'; function QListWidget_currentItem(handle: QListWidgetH): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_currentItem'; procedure QListWidget_setCurrentItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_setCurrentItem'; procedure QListWidget_setCurrentItem(handle: QListWidgetH; item: QListWidgetItemH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QListWidget_setCurrentItem2'; function QListWidget_currentRow(handle: QListWidgetH): Integer; cdecl; external Qt4PasLib name 'QListWidget_currentRow'; procedure QListWidget_setCurrentRow(handle: QListWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QListWidget_setCurrentRow'; procedure QListWidget_setCurrentRow(handle: QListWidgetH; row: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QListWidget_setCurrentRow2'; function QListWidget_itemAt(handle: QListWidgetH; p: PQtPoint): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_itemAt'; function QListWidget_itemAt(handle: QListWidgetH; x: Integer; y: Integer): QListWidgetItemH; cdecl; external Qt4PasLib name 'QListWidget_itemAt2'; procedure QListWidget_visualItemRect(handle: QListWidgetH; retval: PRect; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_visualItemRect'; procedure QListWidget_sortItems(handle: QListWidgetH; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QListWidget_sortItems'; procedure QListWidget_setSortingEnabled(handle: QListWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setSortingEnabled'; function QListWidget_isSortingEnabled(handle: QListWidgetH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isSortingEnabled'; procedure QListWidget_editItem(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_editItem'; procedure QListWidget_openPersistentEditor(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_openPersistentEditor'; procedure QListWidget_closePersistentEditor(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_closePersistentEditor'; function QListWidget_itemWidget(handle: QListWidgetH; item: QListWidgetItemH): QWidgetH; cdecl; external Qt4PasLib name 'QListWidget_itemWidget'; procedure QListWidget_setItemWidget(handle: QListWidgetH; item: QListWidgetItemH; widget: QWidgetH); cdecl; external Qt4PasLib name 'QListWidget_setItemWidget'; procedure QListWidget_removeItemWidget(handle: QListWidgetH; item: QListWidgetItemH); cdecl; external Qt4PasLib name 'QListWidget_removeItemWidget'; function QListWidget_isItemSelected(handle: QListWidgetH; item: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isItemSelected'; procedure QListWidget_setItemSelected(handle: QListWidgetH; item: QListWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setItemSelected'; procedure QListWidget_selectedItems(handle: QListWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QListWidget_selectedItems'; procedure QListWidget_findItems(handle: QListWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QListWidget_findItems'; function QListWidget_isItemHidden(handle: QListWidgetH; item: QListWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QListWidget_isItemHidden'; procedure QListWidget_setItemHidden(handle: QListWidgetH; item: QListWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QListWidget_setItemHidden'; procedure QListWidget_dropEvent(handle: QListWidgetH; event: QDropEventH); cdecl; external Qt4PasLib name 'QListWidget_dropEvent'; procedure QListWidget_scrollToItem(handle: QListWidgetH; item: QListWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QListWidget_scrollToItem'; procedure QListWidget_clear(handle: QListWidgetH); cdecl; external Qt4PasLib name 'QListWidget_clear'; type QListWidget_itemPressed_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemClicked_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemDoubleClicked_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemActivated_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemEntered_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_itemChanged_Event = procedure (item: QListWidgetItemH) of object cdecl; QListWidget_currentItemChanged_Event = procedure (current: QListWidgetItemH; previous: QListWidgetItemH) of object cdecl; QListWidget_currentTextChanged_Event = procedure (currentText: PWideString) of object cdecl; QListWidget_currentRowChanged_Event = procedure (currentRow: Integer) of object cdecl; QListWidget_itemSelectionChanged_Event = procedure () of object cdecl; function QTreeView_create(parent: QWidgetH = nil): QTreeViewH; cdecl; external Qt4PasLib name 'QTreeView_create'; procedure QTreeView_destroy(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_destroy'; procedure QTreeView_setModel(handle: QTreeViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QTreeView_setModel'; procedure QTreeView_setRootIndex(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_setRootIndex'; procedure QTreeView_setSelectionModel(handle: QTreeViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTreeView_setSelectionModel'; function QTreeView_header(handle: QTreeViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTreeView_header'; procedure QTreeView_setHeader(handle: QTreeViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTreeView_setHeader'; function QTreeView_autoExpandDelay(handle: QTreeViewH): Integer; cdecl; external Qt4PasLib name 'QTreeView_autoExpandDelay'; procedure QTreeView_setAutoExpandDelay(handle: QTreeViewH; delay: Integer); cdecl; external Qt4PasLib name 'QTreeView_setAutoExpandDelay'; function QTreeView_indentation(handle: QTreeViewH): Integer; cdecl; external Qt4PasLib name 'QTreeView_indentation'; procedure QTreeView_setIndentation(handle: QTreeViewH; i: Integer); cdecl; external Qt4PasLib name 'QTreeView_setIndentation'; function QTreeView_rootIsDecorated(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_rootIsDecorated'; procedure QTreeView_setRootIsDecorated(handle: QTreeViewH; show: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setRootIsDecorated'; function QTreeView_uniformRowHeights(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_uniformRowHeights'; procedure QTreeView_setUniformRowHeights(handle: QTreeViewH; uniform: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setUniformRowHeights'; function QTreeView_itemsExpandable(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_itemsExpandable'; procedure QTreeView_setItemsExpandable(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setItemsExpandable'; function QTreeView_expandsOnDoubleClick(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_expandsOnDoubleClick'; procedure QTreeView_setExpandsOnDoubleClick(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setExpandsOnDoubleClick'; function QTreeView_columnViewportPosition(handle: QTreeViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnViewportPosition'; function QTreeView_columnWidth(handle: QTreeViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnWidth'; procedure QTreeView_setColumnWidth(handle: QTreeViewH; column: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTreeView_setColumnWidth'; function QTreeView_columnAt(handle: QTreeViewH; x: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeView_columnAt'; function QTreeView_isColumnHidden(handle: QTreeViewH; column: Integer): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isColumnHidden'; procedure QTreeView_setColumnHidden(handle: QTreeViewH; column: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setColumnHidden'; function QTreeView_isHeaderHidden(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isHeaderHidden'; procedure QTreeView_setHeaderHidden(handle: QTreeViewH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setHeaderHidden'; function QTreeView_isRowHidden(handle: QTreeViewH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isRowHidden'; procedure QTreeView_setRowHidden(handle: QTreeViewH; row: Integer; parent: QModelIndexH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setRowHidden'; function QTreeView_isFirstColumnSpanned(handle: QTreeViewH; row: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isFirstColumnSpanned'; procedure QTreeView_setFirstColumnSpanned(handle: QTreeViewH; row: Integer; parent: QModelIndexH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setFirstColumnSpanned'; function QTreeView_isExpanded(handle: QTreeViewH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isExpanded'; procedure QTreeView_setExpanded(handle: QTreeViewH; index: QModelIndexH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setExpanded'; procedure QTreeView_setSortingEnabled(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setSortingEnabled'; function QTreeView_isSortingEnabled(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isSortingEnabled'; procedure QTreeView_setAnimated(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setAnimated'; function QTreeView_isAnimated(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_isAnimated'; procedure QTreeView_setAllColumnsShowFocus(handle: QTreeViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setAllColumnsShowFocus'; function QTreeView_allColumnsShowFocus(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_allColumnsShowFocus'; procedure QTreeView_setWordWrap(handle: QTreeViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QTreeView_setWordWrap'; function QTreeView_wordWrap(handle: QTreeViewH): Boolean; cdecl; external Qt4PasLib name 'QTreeView_wordWrap'; procedure QTreeView_keyboardSearch(handle: QTreeViewH; search: PWideString); cdecl; external Qt4PasLib name 'QTreeView_keyboardSearch'; procedure QTreeView_visualRect(handle: QTreeViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_visualRect'; procedure QTreeView_scrollTo(handle: QTreeViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTreeView_scrollTo'; procedure QTreeView_indexAt(handle: QTreeViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QTreeView_indexAt'; procedure QTreeView_indexAbove(handle: QTreeViewH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_indexAbove'; procedure QTreeView_indexBelow(handle: QTreeViewH; retval: QModelIndexH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_indexBelow'; procedure QTreeView_doItemsLayout(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_doItemsLayout'; procedure QTreeView_reset(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_reset'; procedure QTreeView_sortByColumn(handle: QTreeViewH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeView_sortByColumn'; procedure QTreeView_dataChanged(handle: QTreeViewH; topLeft: QModelIndexH; bottomRight: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_dataChanged'; procedure QTreeView_hideColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_hideColumn'; procedure QTreeView_showColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_showColumn'; procedure QTreeView_expand(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_expand'; procedure QTreeView_collapse(handle: QTreeViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTreeView_collapse'; procedure QTreeView_resizeColumnToContents(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_resizeColumnToContents'; procedure QTreeView_sortByColumn(handle: QTreeViewH; column: Integer); cdecl; external Qt4PasLib name 'QTreeView_sortByColumn2'; procedure QTreeView_selectAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_selectAll'; procedure QTreeView_expandAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_expandAll'; procedure QTreeView_collapseAll(handle: QTreeViewH); cdecl; external Qt4PasLib name 'QTreeView_collapseAll'; procedure QTreeView_expandToDepth(handle: QTreeViewH; depth: Integer); cdecl; external Qt4PasLib name 'QTreeView_expandToDepth'; type QTreeView_expanded_Event = procedure (index: QModelIndexH) of object cdecl; QTreeView_collapsed_Event = procedure (index: QModelIndexH) of object cdecl; type QTreeWidgetItemChildIndicatorPolicy = ( // QTreeWidgetItem::ChildIndicatorPolicy (1) QTreeWidgetItemShowIndicator, QTreeWidgetItemDontShowIndicator, QTreeWidgetItemDontShowIndicatorWhenChildless ); QTreeWidgetItemItemType = ( //QTreeWidgetItem::ItemType (2) QTreeWidgetItemType = 0, QTreeWidgetItemUserType = 1000 ); function QTreeWidgetItem_create(_type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create'; procedure QTreeWidgetItem_destroy(handle: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_destroy'; function QTreeWidgetItem_create(strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create2'; function QTreeWidgetItem_create(view: QTreeWidgetH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create3'; function QTreeWidgetItem_create(view: QTreeWidgetH; strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create4'; function QTreeWidgetItem_create(view: QTreeWidgetH; after: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create5'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create6'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; strings: QStringListH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create7'; function QTreeWidgetItem_create(parent: QTreeWidgetItemH; after: QTreeWidgetItemH; _type: QTreeWidgetItemItemType = QTreeWidgetItemType): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create8'; function QTreeWidgetItem_create(other: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_create9'; function QTreeWidgetItem_clone(handle: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_clone'; function QTreeWidgetItem_treeWidget(handle: QTreeWidgetItemH): QTreeWidgetH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_treeWidget'; procedure QTreeWidgetItem_setSelected(handle: QTreeWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setSelected'; function QTreeWidgetItem_isSelected(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isSelected'; procedure QTreeWidgetItem_setHidden(handle: QTreeWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setHidden'; function QTreeWidgetItem_isHidden(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isHidden'; procedure QTreeWidgetItem_setExpanded(handle: QTreeWidgetItemH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setExpanded'; function QTreeWidgetItem_isExpanded(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isExpanded'; procedure QTreeWidgetItem_setFirstColumnSpanned(handle: QTreeWidgetItemH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFirstColumnSpanned'; function QTreeWidgetItem_isFirstColumnSpanned(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isFirstColumnSpanned'; procedure QTreeWidgetItem_setDisabled(handle: QTreeWidgetItemH; disabled: Boolean); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setDisabled'; function QTreeWidgetItem_isDisabled(handle: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidgetItem_isDisabled'; procedure QTreeWidgetItem_setChildIndicatorPolicy(handle: QTreeWidgetItemH; policy: QTreeWidgetItemChildIndicatorPolicy); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setChildIndicatorPolicy'; function QTreeWidgetItem_childIndicatorPolicy(handle: QTreeWidgetItemH): QTreeWidgetItemChildIndicatorPolicy; cdecl; external Qt4PasLib name 'QTreeWidgetItem_childIndicatorPolicy'; function QTreeWidgetItem_flags(handle: QTreeWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QTreeWidgetItem_flags'; procedure QTreeWidgetItem_setFlags(handle: QTreeWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFlags'; procedure QTreeWidgetItem_text(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_text'; procedure QTreeWidgetItem_setText(handle: QTreeWidgetItemH; column: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setText'; procedure QTreeWidgetItem_icon(handle: QTreeWidgetItemH; retval: QIconH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_icon'; procedure QTreeWidgetItem_setIcon(handle: QTreeWidgetItemH; column: Integer; icon: QIconH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setIcon'; procedure QTreeWidgetItem_statusTip(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_statusTip'; procedure QTreeWidgetItem_setStatusTip(handle: QTreeWidgetItemH; column: Integer; statusTip: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setStatusTip'; procedure QTreeWidgetItem_toolTip(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_toolTip'; procedure QTreeWidgetItem_setToolTip(handle: QTreeWidgetItemH; column: Integer; toolTip: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setToolTip'; procedure QTreeWidgetItem_whatsThis(handle: QTreeWidgetItemH; retval: PWideString; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_whatsThis'; procedure QTreeWidgetItem_setWhatsThis(handle: QTreeWidgetItemH; column: Integer; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setWhatsThis'; procedure QTreeWidgetItem_font(handle: QTreeWidgetItemH; retval: QFontH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_font'; procedure QTreeWidgetItem_setFont(handle: QTreeWidgetItemH; column: Integer; font: QFontH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setFont'; function QTreeWidgetItem_textAlignment(handle: QTreeWidgetItemH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_textAlignment'; procedure QTreeWidgetItem_setTextAlignment(handle: QTreeWidgetItemH; column: Integer; alignment: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setTextAlignment'; procedure QTreeWidgetItem_backgroundColor(handle: QTreeWidgetItemH; retval: PQColor; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_backgroundColor'; procedure QTreeWidgetItem_setBackgroundColor(handle: QTreeWidgetItemH; column: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setBackgroundColor'; procedure QTreeWidgetItem_background(handle: QTreeWidgetItemH; retval: QBrushH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_background'; procedure QTreeWidgetItem_setBackground(handle: QTreeWidgetItemH; column: Integer; brush: QBrushH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setBackground'; procedure QTreeWidgetItem_textColor(handle: QTreeWidgetItemH; retval: PQColor; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_textColor'; procedure QTreeWidgetItem_setTextColor(handle: QTreeWidgetItemH; column: Integer; color: PQColor); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setTextColor'; procedure QTreeWidgetItem_foreground(handle: QTreeWidgetItemH; retval: QBrushH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_foreground'; procedure QTreeWidgetItem_setForeground(handle: QTreeWidgetItemH; column: Integer; brush: QBrushH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setForeground'; function QTreeWidgetItem_checkState(handle: QTreeWidgetItemH; column: Integer): QtCheckState; cdecl; external Qt4PasLib name 'QTreeWidgetItem_checkState'; procedure QTreeWidgetItem_setCheckState(handle: QTreeWidgetItemH; column: Integer; state: QtCheckState); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setCheckState'; procedure QTreeWidgetItem_sizeHint(handle: QTreeWidgetItemH; retval: PSize; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_sizeHint'; procedure QTreeWidgetItem_setSizeHint(handle: QTreeWidgetItemH; column: Integer; size: PSize); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setSizeHint'; procedure QTreeWidgetItem_data(handle: QTreeWidgetItemH; retval: QVariantH; column: Integer; role: Integer); cdecl; external Qt4PasLib name 'QTreeWidgetItem_data'; procedure QTreeWidgetItem_setData(handle: QTreeWidgetItemH; column: Integer; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_setData'; procedure QTreeWidgetItem_read(handle: QTreeWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_read'; procedure QTreeWidgetItem_write(handle: QTreeWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_write'; function QTreeWidgetItem_parent(handle: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_parent'; function QTreeWidgetItem_child(handle: QTreeWidgetItemH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_child'; function QTreeWidgetItem_childCount(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_childCount'; function QTreeWidgetItem_columnCount(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_columnCount'; function QTreeWidgetItem_indexOfChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_indexOfChild'; procedure QTreeWidgetItem_addChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_addChild'; procedure QTreeWidgetItem_insertChild(handle: QTreeWidgetItemH; index: Integer; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_insertChild'; procedure QTreeWidgetItem_removeChild(handle: QTreeWidgetItemH; child: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_removeChild'; function QTreeWidgetItem_takeChild(handle: QTreeWidgetItemH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_takeChild'; procedure QTreeWidgetItem_addChildren(handle: QTreeWidgetItemH; children: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_addChildren'; procedure QTreeWidgetItem_insertChildren(handle: QTreeWidgetItemH; index: Integer; children: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_insertChildren'; procedure QTreeWidgetItem_takeChildren(handle: QTreeWidgetItemH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidgetItem_takeChildren'; function QTreeWidgetItem_type(handle: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidgetItem_type'; procedure QTreeWidgetItem_sortChildren(handle: QTreeWidgetItemH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeWidgetItem_sortChildren'; function QTreeWidget_create(parent: QWidgetH = nil): QTreeWidgetH; cdecl; external Qt4PasLib name 'QTreeWidget_create'; procedure QTreeWidget_destroy(handle: QTreeWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_destroy'; function QTreeWidget_columnCount(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_columnCount'; procedure QTreeWidget_setColumnCount(handle: QTreeWidgetH; columns: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_setColumnCount'; function QTreeWidget_invisibleRootItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_invisibleRootItem'; function QTreeWidget_topLevelItem(handle: QTreeWidgetH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_topLevelItem'; function QTreeWidget_topLevelItemCount(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_topLevelItemCount'; procedure QTreeWidget_insertTopLevelItem(handle: QTreeWidgetH; index: Integer; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_insertTopLevelItem'; procedure QTreeWidget_addTopLevelItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_addTopLevelItem'; function QTreeWidget_takeTopLevelItem(handle: QTreeWidgetH; index: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_takeTopLevelItem'; function QTreeWidget_indexOfTopLevelItem(handle: QTreeWidgetH; item: QTreeWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_indexOfTopLevelItem'; procedure QTreeWidget_insertTopLevelItems(handle: QTreeWidgetH; index: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_insertTopLevelItems'; procedure QTreeWidget_addTopLevelItems(handle: QTreeWidgetH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_addTopLevelItems'; function QTreeWidget_headerItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_headerItem'; procedure QTreeWidget_setHeaderItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderItem'; procedure QTreeWidget_setHeaderLabels(handle: QTreeWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderLabels'; procedure QTreeWidget_setHeaderLabel(handle: QTreeWidgetH; _label: PWideString); cdecl; external Qt4PasLib name 'QTreeWidget_setHeaderLabel'; function QTreeWidget_currentItem(handle: QTreeWidgetH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_currentItem'; function QTreeWidget_currentColumn(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_currentColumn'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem2'; procedure QTreeWidget_setCurrentItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTreeWidget_setCurrentItem3'; function QTreeWidget_itemAt(handle: QTreeWidgetH; p: PQtPoint): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAt'; function QTreeWidget_itemAt(handle: QTreeWidgetH; x: Integer; y: Integer): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAt2'; procedure QTreeWidget_visualItemRect(handle: QTreeWidgetH; retval: PRect; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_visualItemRect'; function QTreeWidget_sortColumn(handle: QTreeWidgetH): Integer; cdecl; external Qt4PasLib name 'QTreeWidget_sortColumn'; procedure QTreeWidget_sortItems(handle: QTreeWidgetH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTreeWidget_sortItems'; procedure QTreeWidget_setSortingEnabled(handle: QTreeWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setSortingEnabled'; function QTreeWidget_isSortingEnabled(handle: QTreeWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isSortingEnabled'; procedure QTreeWidget_editItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_editItem'; procedure QTreeWidget_openPersistentEditor(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_openPersistentEditor'; procedure QTreeWidget_closePersistentEditor(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_closePersistentEditor'; function QTreeWidget_itemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTreeWidget_itemWidget'; procedure QTreeWidget_setItemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_setItemWidget'; procedure QTreeWidget_removeItemWidget(handle: QTreeWidgetH; item: QTreeWidgetItemH; column: Integer); cdecl; external Qt4PasLib name 'QTreeWidget_removeItemWidget'; function QTreeWidget_isItemSelected(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemSelected'; procedure QTreeWidget_setItemSelected(handle: QTreeWidgetH; item: QTreeWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemSelected'; procedure QTreeWidget_selectedItems(handle: QTreeWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTreeWidget_selectedItems'; procedure QTreeWidget_findItems(handle: QTreeWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags; column: Integer = 0); cdecl; external Qt4PasLib name 'QTreeWidget_findItems'; function QTreeWidget_isItemHidden(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemHidden'; procedure QTreeWidget_setItemHidden(handle: QTreeWidgetH; item: QTreeWidgetItemH; hide: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemHidden'; function QTreeWidget_isItemExpanded(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isItemExpanded'; procedure QTreeWidget_setItemExpanded(handle: QTreeWidgetH; item: QTreeWidgetItemH; expand: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setItemExpanded'; function QTreeWidget_isFirstItemColumnSpanned(handle: QTreeWidgetH; item: QTreeWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTreeWidget_isFirstItemColumnSpanned'; procedure QTreeWidget_setFirstItemColumnSpanned(handle: QTreeWidgetH; item: QTreeWidgetItemH; span: Boolean); cdecl; external Qt4PasLib name 'QTreeWidget_setFirstItemColumnSpanned'; function QTreeWidget_itemAbove(handle: QTreeWidgetH; item: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemAbove'; function QTreeWidget_itemBelow(handle: QTreeWidgetH; item: QTreeWidgetItemH): QTreeWidgetItemH; cdecl; external Qt4PasLib name 'QTreeWidget_itemBelow'; procedure QTreeWidget_setSelectionModel(handle: QTreeWidgetH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTreeWidget_setSelectionModel'; procedure QTreeWidget_scrollToItem(handle: QTreeWidgetH; item: QTreeWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTreeWidget_scrollToItem'; procedure QTreeWidget_expandItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_expandItem'; procedure QTreeWidget_collapseItem(handle: QTreeWidgetH; item: QTreeWidgetItemH); cdecl; external Qt4PasLib name 'QTreeWidget_collapseItem'; procedure QTreeWidget_clear(handle: QTreeWidgetH); cdecl; external Qt4PasLib name 'QTreeWidget_clear'; type QTreeWidget_itemPressed_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemClicked_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemDoubleClicked_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemActivated_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemEntered_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemChanged_Event = procedure (item: QTreeWidgetItemH; column: Integer) of object cdecl; QTreeWidget_itemExpanded_Event = procedure (item: QTreeWidgetItemH) of object cdecl; QTreeWidget_itemCollapsed_Event = procedure (item: QTreeWidgetItemH) of object cdecl; QTreeWidget_currentItemChanged_Event = procedure (current: QTreeWidgetItemH; previous: QTreeWidgetItemH) of object cdecl; QTreeWidget_itemSelectionChanged_Event = procedure () of object cdecl; type QHeaderViewResizeMode = cardinal; // QHeaderView::ResizeMode (4) const QHeaderViewInteractive = 0 { $0 }; QHeaderViewStretch = 1 { $1 }; QHeaderViewFixed = 2 { $2 }; QHeaderViewResizeToContents = 3 { $3 }; QHeaderViewCustom = 2 { $2 }; function QHeaderView_create(orientation: QtOrientation; parent: QWidgetH = nil): QHeaderViewH; cdecl; external Qt4PasLib name 'QHeaderView_create'; procedure QHeaderView_destroy(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_destroy'; procedure QHeaderView_setModel(handle: QHeaderViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QHeaderView_setModel'; function QHeaderView_orientation(handle: QHeaderViewH): QtOrientation; cdecl; external Qt4PasLib name 'QHeaderView_orientation'; function QHeaderView_offset(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_offset'; function QHeaderView_length(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_length'; procedure QHeaderView_sizeHint(handle: QHeaderViewH; retval: PSize); cdecl; external Qt4PasLib name 'QHeaderView_sizeHint'; function QHeaderView_sectionSizeHint(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionSizeHint'; function QHeaderView_visualIndexAt(handle: QHeaderViewH; position: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_visualIndexAt'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; position: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; x: Integer; y: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt2'; function QHeaderView_logicalIndexAt(handle: QHeaderViewH; pos: PQtPoint): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndexAt3'; function QHeaderView_sectionSize(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionSize'; function QHeaderView_sectionPosition(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionPosition'; function QHeaderView_sectionViewportPosition(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sectionViewportPosition'; procedure QHeaderView_moveSection(handle: QHeaderViewH; from: Integer; _to: Integer); cdecl; external Qt4PasLib name 'QHeaderView_moveSection'; procedure QHeaderView_swapSections(handle: QHeaderViewH; first: Integer; second: Integer); cdecl; external Qt4PasLib name 'QHeaderView_swapSections'; procedure QHeaderView_resizeSection(handle: QHeaderViewH; logicalIndex: Integer; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_resizeSection'; procedure QHeaderView_resizeSections(handle: QHeaderViewH; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_resizeSections'; function QHeaderView_isSectionHidden(handle: QHeaderViewH; logicalIndex: Integer): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isSectionHidden'; procedure QHeaderView_setSectionHidden(handle: QHeaderViewH; logicalIndex: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setSectionHidden'; function QHeaderView_hiddenSectionCount(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_hiddenSectionCount'; procedure QHeaderView_hideSection(handle: QHeaderViewH; logicalIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_hideSection'; procedure QHeaderView_showSection(handle: QHeaderViewH; logicalIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_showSection'; function QHeaderView_count(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_count'; function QHeaderView_visualIndex(handle: QHeaderViewH; logicalIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_visualIndex'; function QHeaderView_logicalIndex(handle: QHeaderViewH; visualIndex: Integer): Integer; cdecl; external Qt4PasLib name 'QHeaderView_logicalIndex'; procedure QHeaderView_setMovable(handle: QHeaderViewH; movable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setMovable'; function QHeaderView_isMovable(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isMovable'; procedure QHeaderView_setClickable(handle: QHeaderViewH; clickable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setClickable'; function QHeaderView_isClickable(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isClickable'; procedure QHeaderView_setHighlightSections(handle: QHeaderViewH; highlight: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setHighlightSections'; function QHeaderView_highlightSections(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_highlightSections'; procedure QHeaderView_setResizeMode(handle: QHeaderViewH; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_setResizeMode'; procedure QHeaderView_setResizeMode(handle: QHeaderViewH; logicalIndex: Integer; mode: QHeaderViewResizeMode); cdecl; external Qt4PasLib name 'QHeaderView_setResizeMode2'; function QHeaderView_resizeMode(handle: QHeaderViewH; logicalIndex: Integer): QHeaderViewResizeMode; cdecl; external Qt4PasLib name 'QHeaderView_resizeMode'; function QHeaderView_stretchSectionCount(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_stretchSectionCount'; procedure QHeaderView_setSortIndicatorShown(handle: QHeaderViewH; show: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setSortIndicatorShown'; function QHeaderView_isSortIndicatorShown(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_isSortIndicatorShown'; procedure QHeaderView_setSortIndicator(handle: QHeaderViewH; logicalIndex: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QHeaderView_setSortIndicator'; function QHeaderView_sortIndicatorSection(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_sortIndicatorSection'; function QHeaderView_sortIndicatorOrder(handle: QHeaderViewH): QtSortOrder; cdecl; external Qt4PasLib name 'QHeaderView_sortIndicatorOrder'; function QHeaderView_stretchLastSection(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_stretchLastSection'; procedure QHeaderView_setStretchLastSection(handle: QHeaderViewH; stretch: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setStretchLastSection'; function QHeaderView_cascadingSectionResizes(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_cascadingSectionResizes'; procedure QHeaderView_setCascadingSectionResizes(handle: QHeaderViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QHeaderView_setCascadingSectionResizes'; function QHeaderView_defaultSectionSize(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_defaultSectionSize'; procedure QHeaderView_setDefaultSectionSize(handle: QHeaderViewH; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setDefaultSectionSize'; function QHeaderView_minimumSectionSize(handle: QHeaderViewH): Integer; cdecl; external Qt4PasLib name 'QHeaderView_minimumSectionSize'; procedure QHeaderView_setMinimumSectionSize(handle: QHeaderViewH; size: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setMinimumSectionSize'; function QHeaderView_defaultAlignment(handle: QHeaderViewH): QtAlignment; cdecl; external Qt4PasLib name 'QHeaderView_defaultAlignment'; procedure QHeaderView_setDefaultAlignment(handle: QHeaderViewH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QHeaderView_setDefaultAlignment'; procedure QHeaderView_doItemsLayout(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_doItemsLayout'; function QHeaderView_sectionsMoved(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_sectionsMoved'; function QHeaderView_sectionsHidden(handle: QHeaderViewH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_sectionsHidden'; procedure QHeaderView_saveState(handle: QHeaderViewH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QHeaderView_saveState'; function QHeaderView_restoreState(handle: QHeaderViewH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QHeaderView_restoreState'; procedure QHeaderView_reset(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_reset'; procedure QHeaderView_setOffset(handle: QHeaderViewH; offset: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setOffset'; procedure QHeaderView_setOffsetToSectionPosition(handle: QHeaderViewH; visualIndex: Integer); cdecl; external Qt4PasLib name 'QHeaderView_setOffsetToSectionPosition'; procedure QHeaderView_setOffsetToLastSection(handle: QHeaderViewH); cdecl; external Qt4PasLib name 'QHeaderView_setOffsetToLastSection'; procedure QHeaderView_headerDataChanged(handle: QHeaderViewH; orientation: QtOrientation; logicalFirst: Integer; logicalLast: Integer); cdecl; external Qt4PasLib name 'QHeaderView_headerDataChanged'; type QHeaderView_sectionMoved_Event = procedure (logicalIndex: Integer; oldVisualIndex: Integer; newVisualIndex: Integer) of object cdecl; QHeaderView_sectionResized_Event = procedure (logicalIndex: Integer; oldSize: Integer; newSize: Integer) of object cdecl; QHeaderView_sectionPressed_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionEntered_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionDoubleClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionCountChanged_Event = procedure (oldCount: Integer; newCount: Integer) of object cdecl; QHeaderView_sectionHandleDoubleClicked_Event = procedure (logicalIndex: Integer) of object cdecl; QHeaderView_sectionAutoResize_Event = procedure (logicalIndex: Integer; mode: QHeaderViewResizeMode) of object cdecl; QHeaderView_geometriesChanged_Event = procedure () of object cdecl; QHeaderView_sortIndicatorChanged_Event = procedure (logicalIndex: Integer; order: QtSortOrder) of object cdecl; type QStandardItemItemType = ( //QStandardItem::ItemType (2) QStandardItemType = 0, QStandardItemUserType = 1000 ); function QStandardItem_create(): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create'; procedure QStandardItem_destroy(handle: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_destroy'; function QStandardItem_create(text: PWideString): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create2'; function QStandardItem_create(icon: QIconH; text: PWideString): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create3'; function QStandardItem_create(rows: Integer; columns: Integer = 1): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_create4'; procedure QStandardItem_data(handle: QStandardItemH; retval: QVariantH; role: QtItemDataRole); cdecl; external Qt4PasLib name 'QStandardItem_data'; procedure QStandardItem_setData(handle: QStandardItemH; value: QVariantH; role: QtItemDataRole); cdecl; external Qt4PasLib name 'QStandardItem_setData'; procedure QStandardItem_text(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_text'; procedure QStandardItem_setText(handle: QStandardItemH; text: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setText'; procedure QStandardItem_icon(handle: QStandardItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QStandardItem_icon'; procedure QStandardItem_setIcon(handle: QStandardItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QStandardItem_setIcon'; procedure QStandardItem_toolTip(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_toolTip'; procedure QStandardItem_setToolTip(handle: QStandardItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setToolTip'; procedure QStandardItem_statusTip(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_statusTip'; procedure QStandardItem_setStatusTip(handle: QStandardItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setStatusTip'; procedure QStandardItem_whatsThis(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_whatsThis'; procedure QStandardItem_setWhatsThis(handle: QStandardItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setWhatsThis'; procedure QStandardItem_sizeHint(handle: QStandardItemH; retval: PSize); cdecl; external Qt4PasLib name 'QStandardItem_sizeHint'; procedure QStandardItem_setSizeHint(handle: QStandardItemH; sizeHint: PSize); cdecl; external Qt4PasLib name 'QStandardItem_setSizeHint'; procedure QStandardItem_font(handle: QStandardItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QStandardItem_font'; procedure QStandardItem_setFont(handle: QStandardItemH; font: QFontH); cdecl; external Qt4PasLib name 'QStandardItem_setFont'; function QStandardItem_textAlignment(handle: QStandardItemH): QtAlignment; cdecl; external Qt4PasLib name 'QStandardItem_textAlignment'; procedure QStandardItem_setTextAlignment(handle: QStandardItemH; textAlignment: QtAlignment); cdecl; external Qt4PasLib name 'QStandardItem_setTextAlignment'; procedure QStandardItem_background(handle: QStandardItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_background'; procedure QStandardItem_setBackground(handle: QStandardItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_setBackground'; procedure QStandardItem_foreground(handle: QStandardItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_foreground'; procedure QStandardItem_setForeground(handle: QStandardItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QStandardItem_setForeground'; function QStandardItem_checkState(handle: QStandardItemH): QtCheckState; cdecl; external Qt4PasLib name 'QStandardItem_checkState'; procedure QStandardItem_setCheckState(handle: QStandardItemH; checkState: QtCheckState); cdecl; external Qt4PasLib name 'QStandardItem_setCheckState'; procedure QStandardItem_accessibleText(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_accessibleText'; procedure QStandardItem_setAccessibleText(handle: QStandardItemH; accessibleText: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setAccessibleText'; procedure QStandardItem_accessibleDescription(handle: QStandardItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_accessibleDescription'; procedure QStandardItem_setAccessibleDescription(handle: QStandardItemH; accessibleDescription: PWideString); cdecl; external Qt4PasLib name 'QStandardItem_setAccessibleDescription'; function QStandardItem_flags(handle: QStandardItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QStandardItem_flags'; procedure QStandardItem_setFlags(handle: QStandardItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QStandardItem_setFlags'; function QStandardItem_isEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isEnabled'; procedure QStandardItem_setEnabled(handle: QStandardItemH; enabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setEnabled'; function QStandardItem_isEditable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isEditable'; procedure QStandardItem_setEditable(handle: QStandardItemH; editable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setEditable'; function QStandardItem_isSelectable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isSelectable'; procedure QStandardItem_setSelectable(handle: QStandardItemH; selectable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setSelectable'; function QStandardItem_isCheckable(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isCheckable'; procedure QStandardItem_setCheckable(handle: QStandardItemH; checkable: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setCheckable'; function QStandardItem_isTristate(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isTristate'; procedure QStandardItem_setTristate(handle: QStandardItemH; tristate: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setTristate'; function QStandardItem_isDragEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isDragEnabled'; procedure QStandardItem_setDragEnabled(handle: QStandardItemH; dragEnabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setDragEnabled'; function QStandardItem_isDropEnabled(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_isDropEnabled'; procedure QStandardItem_setDropEnabled(handle: QStandardItemH; dropEnabled: Boolean); cdecl; external Qt4PasLib name 'QStandardItem_setDropEnabled'; function QStandardItem_parent(handle: QStandardItemH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_parent'; function QStandardItem_row(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_row'; function QStandardItem_column(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_column'; procedure QStandardItem_index(handle: QStandardItemH; retval: QModelIndexH); cdecl; external Qt4PasLib name 'QStandardItem_index'; function QStandardItem_model(handle: QStandardItemH): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItem_model'; function QStandardItem_rowCount(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_rowCount'; procedure QStandardItem_setRowCount(handle: QStandardItemH; rows: Integer); cdecl; external Qt4PasLib name 'QStandardItem_setRowCount'; function QStandardItem_columnCount(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_columnCount'; procedure QStandardItem_setColumnCount(handle: QStandardItemH; columns: Integer); cdecl; external Qt4PasLib name 'QStandardItem_setColumnCount'; function QStandardItem_hasChildren(handle: QStandardItemH): Boolean; cdecl; external Qt4PasLib name 'QStandardItem_hasChildren'; function QStandardItem_child(handle: QStandardItemH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_child'; procedure QStandardItem_setChild(handle: QStandardItemH; row: Integer; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_setChild'; procedure QStandardItem_setChild(handle: QStandardItemH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_setChild2'; procedure QStandardItem_insertRow(handle: QStandardItemH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertRow'; procedure QStandardItem_insertColumn(handle: QStandardItemH; column: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertColumn'; procedure QStandardItem_insertRows(handle: QStandardItemH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_insertRows'; procedure QStandardItem_insertRows(handle: QStandardItemH; row: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_insertRows2'; procedure QStandardItem_insertColumns(handle: QStandardItemH; column: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_insertColumns'; procedure QStandardItem_removeRow(handle: QStandardItemH; row: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeRow'; procedure QStandardItem_removeColumn(handle: QStandardItemH; column: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeColumn'; procedure QStandardItem_removeRows(handle: QStandardItemH; row: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeRows'; procedure QStandardItem_removeColumns(handle: QStandardItemH; column: Integer; count: Integer); cdecl; external Qt4PasLib name 'QStandardItem_removeColumns'; procedure QStandardItem_appendRow(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendRow'; procedure QStandardItem_appendRows(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendRows'; procedure QStandardItem_appendColumn(handle: QStandardItemH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItem_appendColumn'; procedure QStandardItem_insertRow(handle: QStandardItemH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_insertRow2'; procedure QStandardItem_appendRow(handle: QStandardItemH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItem_appendRow2'; function QStandardItem_takeChild(handle: QStandardItemH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_takeChild'; procedure QStandardItem_takeRow(handle: QStandardItemH; retval: PPtrIntArray; row: Integer); cdecl; external Qt4PasLib name 'QStandardItem_takeRow'; procedure QStandardItem_takeColumn(handle: QStandardItemH; retval: PPtrIntArray; column: Integer); cdecl; external Qt4PasLib name 'QStandardItem_takeColumn'; procedure QStandardItem_sortChildren(handle: QStandardItemH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QStandardItem_sortChildren'; function QStandardItem_clone(handle: QStandardItemH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItem_clone'; function QStandardItem_type(handle: QStandardItemH): Integer; cdecl; external Qt4PasLib name 'QStandardItem_type'; procedure QStandardItem_read(handle: QStandardItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QStandardItem_read'; procedure QStandardItem_write(handle: QStandardItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QStandardItem_write'; function QStandardItemModel_create(parent: QObjectH = nil): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItemModel_create'; procedure QStandardItemModel_destroy(handle: QStandardItemModelH); cdecl; external Qt4PasLib name 'QStandardItemModel_destroy'; function QStandardItemModel_create(rows: Integer; columns: Integer; parent: QObjectH = nil): QStandardItemModelH; cdecl; external Qt4PasLib name 'QStandardItemModel_create2'; procedure QStandardItemModel_index(handle: QStandardItemModelH; retval: QModelIndexH; row: Integer; column: Integer; parent: QModelIndexH = nil); cdecl; external Qt4PasLib name 'QStandardItemModel_index'; procedure QStandardItemModel_parent(handle: QStandardItemModelH; retval: QModelIndexH; child: QModelIndexH); cdecl; external Qt4PasLib name 'QStandardItemModel_parent'; function QStandardItemModel_rowCount(handle: QStandardItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_rowCount'; function QStandardItemModel_columnCount(handle: QStandardItemModelH; parent: QModelIndexH = nil): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_columnCount'; function QStandardItemModel_hasChildren(handle: QStandardItemModelH; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_hasChildren'; procedure QStandardItemModel_data(handle: QStandardItemModelH; retval: QVariantH; index: QModelIndexH; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QStandardItemModel_data'; function QStandardItemModel_setData(handle: QStandardItemModelH; index: QModelIndexH; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_setData'; procedure QStandardItemModel_headerData(handle: QStandardItemModelH; retval: QVariantH; section: Integer; orientation: QtOrientation; role: QtItemDataRole = QtDisplayRole); cdecl; external Qt4PasLib name 'QStandardItemModel_headerData'; function QStandardItemModel_setHeaderData(handle: QStandardItemModelH; section: Integer; orientation: QtOrientation; value: QVariantH; role: QtItemDataRole = QtEditRole): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_setHeaderData'; function QStandardItemModel_insertRows(handle: QStandardItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertRows'; function QStandardItemModel_insertColumns(handle: QStandardItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumns'; function QStandardItemModel_removeRows(handle: QStandardItemModelH; row: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_removeRows'; function QStandardItemModel_removeColumns(handle: QStandardItemModelH; column: Integer; count: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_removeColumns'; function QStandardItemModel_flags(handle: QStandardItemModelH; index: QModelIndexH): QtItemFlags; cdecl; external Qt4PasLib name 'QStandardItemModel_flags'; function QStandardItemModel_supportedDropActions(handle: QStandardItemModelH): QtDropActions; cdecl; external Qt4PasLib name 'QStandardItemModel_supportedDropActions'; procedure QStandardItemModel_clear(handle: QStandardItemModelH); cdecl; external Qt4PasLib name 'QStandardItemModel_clear'; procedure QStandardItemModel_sort(handle: QStandardItemModelH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QStandardItemModel_sort'; function QStandardItemModel_itemFromIndex(handle: QStandardItemModelH; index: QModelIndexH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_itemFromIndex'; procedure QStandardItemModel_indexFromItem(handle: QStandardItemModelH; retval: QModelIndexH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_indexFromItem'; function QStandardItemModel_item(handle: QStandardItemModelH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_item'; procedure QStandardItemModel_setItem(handle: QStandardItemModelH; row: Integer; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItem'; procedure QStandardItemModel_setItem(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItem2'; function QStandardItemModel_invisibleRootItem(handle: QStandardItemModelH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_invisibleRootItem'; function QStandardItemModel_horizontalHeaderItem(handle: QStandardItemModelH; column: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_horizontalHeaderItem'; procedure QStandardItemModel_setHorizontalHeaderItem(handle: QStandardItemModelH; column: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setHorizontalHeaderItem'; function QStandardItemModel_verticalHeaderItem(handle: QStandardItemModelH; row: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_verticalHeaderItem'; procedure QStandardItemModel_setVerticalHeaderItem(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setVerticalHeaderItem'; procedure QStandardItemModel_setHorizontalHeaderLabels(handle: QStandardItemModelH; labels: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_setHorizontalHeaderLabels'; procedure QStandardItemModel_setVerticalHeaderLabels(handle: QStandardItemModelH; labels: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_setVerticalHeaderLabels'; procedure QStandardItemModel_setRowCount(handle: QStandardItemModelH; rows: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setRowCount'; procedure QStandardItemModel_setColumnCount(handle: QStandardItemModelH; columns: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setColumnCount'; procedure QStandardItemModel_appendRow(handle: QStandardItemModelH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_appendRow'; procedure QStandardItemModel_appendColumn(handle: QStandardItemModelH; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_appendColumn'; procedure QStandardItemModel_appendRow(handle: QStandardItemModelH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_appendRow2'; procedure QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow'; procedure QStandardItemModel_insertColumn(handle: QStandardItemModelH; column: Integer; items: PPtrIntArray); cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumn'; procedure QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow2'; function QStandardItemModel_insertRow(handle: QStandardItemModelH; row: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertRow3'; function QStandardItemModel_insertColumn(handle: QStandardItemModelH; column: Integer; parent: QModelIndexH = nil): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_insertColumn2'; function QStandardItemModel_takeItem(handle: QStandardItemModelH; row: Integer; column: Integer = 0): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeItem'; procedure QStandardItemModel_takeRow(handle: QStandardItemModelH; retval: PPtrIntArray; row: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_takeRow'; procedure QStandardItemModel_takeColumn(handle: QStandardItemModelH; retval: PPtrIntArray; column: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_takeColumn'; function QStandardItemModel_takeHorizontalHeaderItem(handle: QStandardItemModelH; column: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeHorizontalHeaderItem'; function QStandardItemModel_takeVerticalHeaderItem(handle: QStandardItemModelH; row: Integer): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_takeVerticalHeaderItem'; function QStandardItemModel_itemPrototype(handle: QStandardItemModelH): QStandardItemH; cdecl; external Qt4PasLib name 'QStandardItemModel_itemPrototype'; procedure QStandardItemModel_setItemPrototype(handle: QStandardItemModelH; item: QStandardItemH); cdecl; external Qt4PasLib name 'QStandardItemModel_setItemPrototype'; procedure QStandardItemModel_findItems(handle: QStandardItemModelH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags = QtMatchExactly; column: Integer = 0); cdecl; external Qt4PasLib name 'QStandardItemModel_findItems'; function QStandardItemModel_sortRole(handle: QStandardItemModelH): Integer; cdecl; external Qt4PasLib name 'QStandardItemModel_sortRole'; procedure QStandardItemModel_setSortRole(handle: QStandardItemModelH; role: Integer); cdecl; external Qt4PasLib name 'QStandardItemModel_setSortRole'; procedure QStandardItemModel_mimeTypes(handle: QStandardItemModelH; retval: QStringListH); cdecl; external Qt4PasLib name 'QStandardItemModel_mimeTypes'; function QStandardItemModel_dropMimeData(handle: QStandardItemModelH; data: QMimeDataH; action: QtDropAction; row: Integer; column: Integer; parent: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QStandardItemModel_dropMimeData'; type QStandardItemModel_itemChanged_Event = procedure (item: QStandardItemH) of object cdecl; type QAbstractItemDelegateEndEditHint = ( // QAbstractItemDelegate::EndEditHint (1) QAbstractItemDelegateNoHint, QAbstractItemDelegateEditNextItem, QAbstractItemDelegateEditPreviousItem, QAbstractItemDelegateSubmitModelCache, QAbstractItemDelegateRevertModelCache ); procedure QAbstractItemDelegate_paint(handle: QAbstractItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_paint'; procedure QAbstractItemDelegate_sizeHint(handle: QAbstractItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_sizeHint'; function QAbstractItemDelegate_createEditor(handle: QAbstractItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_createEditor'; procedure QAbstractItemDelegate_setEditorData(handle: QAbstractItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_setEditorData'; procedure QAbstractItemDelegate_setModelData(handle: QAbstractItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_setModelData'; procedure QAbstractItemDelegate_updateEditorGeometry(handle: QAbstractItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_updateEditorGeometry'; function QAbstractItemDelegate_editorEvent(handle: QAbstractItemDelegateH; event: QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_editorEvent'; procedure QAbstractItemDelegate_elidedText(retval: PWideString; fontMetrics: QFontMetricsH; width: Integer; mode: QtTextElideMode; text: PWideString); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_elidedText'; function QAbstractItemDelegate_helpEvent(handle: QAbstractItemDelegateH; event: QHelpEventH; view: QAbstractItemViewH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_helpEvent'; type QAbstractItemDelegate_commitData_Event = procedure (editor: QWidgetH) of object cdecl; QAbstractItemDelegate_closeEditor_Event = procedure (editor: QWidgetH; hint: QAbstractItemDelegateEndEditHint = QAbstractItemDelegateNoHint) of object cdecl; QAbstractItemDelegate_closeEditor2_Event = procedure (editor: QWidgetH) of object cdecl; QAbstractItemDelegate_sizeHintChanged_Event = procedure (AnonParam1: QModelIndexH) of object cdecl; function QItemDelegate_create(parent: QObjectH = nil): QItemDelegateH; cdecl; external Qt4PasLib name 'QItemDelegate_create'; procedure QItemDelegate_destroy(handle: QItemDelegateH); cdecl; external Qt4PasLib name 'QItemDelegate_destroy'; function QItemDelegate_hasClipping(handle: QItemDelegateH): Boolean; cdecl; external Qt4PasLib name 'QItemDelegate_hasClipping'; procedure QItemDelegate_setClipping(handle: QItemDelegateH; clip: Boolean); cdecl; external Qt4PasLib name 'QItemDelegate_setClipping'; procedure QItemDelegate_paint(handle: QItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_paint'; procedure QItemDelegate_sizeHint(handle: QItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_sizeHint'; function QItemDelegate_createEditor(handle: QItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QItemDelegate_createEditor'; procedure QItemDelegate_setEditorData(handle: QItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_setEditorData'; procedure QItemDelegate_setModelData(handle: QItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_setModelData'; procedure QItemDelegate_updateEditorGeometry(handle: QItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QItemDelegate_updateEditorGeometry'; function QItemDelegate_itemEditorFactory(handle: QItemDelegateH): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemDelegate_itemEditorFactory'; procedure QItemDelegate_setItemEditorFactory(handle: QItemDelegateH; factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemDelegate_setItemEditorFactory'; function QLCLItemDelegate_create(parent: QObjectH = nil): QLCLItemDelegateH; cdecl; external Qt4PasLib name 'QLCLItemDelegate_create'; procedure QLCLItemDelegate_destroy(handle: QLCLItemDelegateH); cdecl; external Qt4PasLib name 'QLCLItemDelegate_destroy'; procedure QLCLItemDelegate_override_sizeHint(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_sizeHint_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_sizeHint'; procedure QLCLItemDelegate_override_paint(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_paint_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_paint'; procedure QLCLItemDelegate_override_createEditor(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_createEditor_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_createEditor'; procedure QLCLItemDelegate_override_setEditorData(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_setEditorData_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_setEditorData'; procedure QLCLItemDelegate_override_setModelData(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_setModelData_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_setModelData'; procedure QLCLItemDelegate_override_updateEditorGeometry(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_updateEditorGeometry_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_updateEditorGeometry'; procedure QLCLItemDelegate_override_editorEvent(handle: QLCLItemDelegateH; hook: QLCLItemDelegate_editorEvent_Override); cdecl; external Qt4PasLib name 'QLCLItemDelegate_override_editorEvent'; function QLCLItemDelegate_InheritedEditorEvent(handle: QLCLItemDelegateH; event: QEventH; model: QAbstractItemModelH; option: QStyleOptionViewItemH; index: QModelIndexH): Boolean; cdecl; external Qt4PasLib name 'QLCLItemDelegate_InheritedEditorEvent'; function QTableView_create(parent: QWidgetH = nil): QTableViewH; cdecl; external Qt4PasLib name 'QTableView_create'; procedure QTableView_destroy(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_destroy'; procedure QTableView_setModel(handle: QTableViewH; model: QAbstractItemModelH); cdecl; external Qt4PasLib name 'QTableView_setModel'; procedure QTableView_setRootIndex(handle: QTableViewH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTableView_setRootIndex'; procedure QTableView_setSelectionModel(handle: QTableViewH; selectionModel: QItemSelectionModelH); cdecl; external Qt4PasLib name 'QTableView_setSelectionModel'; function QTableView_horizontalHeader(handle: QTableViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTableView_horizontalHeader'; function QTableView_verticalHeader(handle: QTableViewH): QHeaderViewH; cdecl; external Qt4PasLib name 'QTableView_verticalHeader'; procedure QTableView_setHorizontalHeader(handle: QTableViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTableView_setHorizontalHeader'; procedure QTableView_setVerticalHeader(handle: QTableViewH; header: QHeaderViewH); cdecl; external Qt4PasLib name 'QTableView_setVerticalHeader'; function QTableView_rowViewportPosition(handle: QTableViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowViewportPosition'; function QTableView_rowAt(handle: QTableViewH; y: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowAt'; procedure QTableView_setRowHeight(handle: QTableViewH; row: Integer; height: Integer); cdecl; external Qt4PasLib name 'QTableView_setRowHeight'; function QTableView_rowHeight(handle: QTableViewH; row: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowHeight'; function QTableView_columnViewportPosition(handle: QTableViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnViewportPosition'; function QTableView_columnAt(handle: QTableViewH; x: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnAt'; procedure QTableView_setColumnWidth(handle: QTableViewH; column: Integer; width: Integer); cdecl; external Qt4PasLib name 'QTableView_setColumnWidth'; function QTableView_columnWidth(handle: QTableViewH; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnWidth'; function QTableView_isRowHidden(handle: QTableViewH; row: Integer): Boolean; cdecl; external Qt4PasLib name 'QTableView_isRowHidden'; procedure QTableView_setRowHidden(handle: QTableViewH; row: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTableView_setRowHidden'; function QTableView_isColumnHidden(handle: QTableViewH; column: Integer): Boolean; cdecl; external Qt4PasLib name 'QTableView_isColumnHidden'; procedure QTableView_setColumnHidden(handle: QTableViewH; column: Integer; hide: Boolean); cdecl; external Qt4PasLib name 'QTableView_setColumnHidden'; procedure QTableView_setSortingEnabled(handle: QTableViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableView_setSortingEnabled'; function QTableView_isSortingEnabled(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_isSortingEnabled'; function QTableView_showGrid(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_showGrid'; function QTableView_gridStyle(handle: QTableViewH): QtPenStyle; cdecl; external Qt4PasLib name 'QTableView_gridStyle'; procedure QTableView_setGridStyle(handle: QTableViewH; style: QtPenStyle); cdecl; external Qt4PasLib name 'QTableView_setGridStyle'; procedure QTableView_setWordWrap(handle: QTableViewH; _on: Boolean); cdecl; external Qt4PasLib name 'QTableView_setWordWrap'; function QTableView_wordWrap(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_wordWrap'; procedure QTableView_setCornerButtonEnabled(handle: QTableViewH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableView_setCornerButtonEnabled'; function QTableView_isCornerButtonEnabled(handle: QTableViewH): Boolean; cdecl; external Qt4PasLib name 'QTableView_isCornerButtonEnabled'; procedure QTableView_visualRect(handle: QTableViewH; retval: PRect; index: QModelIndexH); cdecl; external Qt4PasLib name 'QTableView_visualRect'; procedure QTableView_scrollTo(handle: QTableViewH; index: QModelIndexH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTableView_scrollTo'; procedure QTableView_indexAt(handle: QTableViewH; retval: QModelIndexH; p: PQtPoint); cdecl; external Qt4PasLib name 'QTableView_indexAt'; procedure QTableView_setSpan(handle: QTableViewH; row: Integer; column: Integer; rowSpan: Integer; columnSpan: Integer); cdecl; external Qt4PasLib name 'QTableView_setSpan'; function QTableView_rowSpan(handle: QTableViewH; row: Integer; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_rowSpan'; function QTableView_columnSpan(handle: QTableViewH; row: Integer; column: Integer): Integer; cdecl; external Qt4PasLib name 'QTableView_columnSpan'; procedure QTableView_clearSpans(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_clearSpans'; procedure QTableView_sortByColumn(handle: QTableViewH; column: Integer; order: QtSortOrder); cdecl; external Qt4PasLib name 'QTableView_sortByColumn'; procedure QTableView_selectRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_selectRow'; procedure QTableView_selectColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_selectColumn'; procedure QTableView_hideRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_hideRow'; procedure QTableView_hideColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_hideColumn'; procedure QTableView_showRow(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_showRow'; procedure QTableView_showColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_showColumn'; procedure QTableView_resizeRowToContents(handle: QTableViewH; row: Integer); cdecl; external Qt4PasLib name 'QTableView_resizeRowToContents'; procedure QTableView_resizeRowsToContents(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_resizeRowsToContents'; procedure QTableView_resizeColumnToContents(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_resizeColumnToContents'; procedure QTableView_resizeColumnsToContents(handle: QTableViewH); cdecl; external Qt4PasLib name 'QTableView_resizeColumnsToContents'; procedure QTableView_sortByColumn(handle: QTableViewH; column: Integer); cdecl; external Qt4PasLib name 'QTableView_sortByColumn2'; procedure QTableView_setShowGrid(handle: QTableViewH; show: Boolean); cdecl; external Qt4PasLib name 'QTableView_setShowGrid'; type QTableWidgetItemItemType = ( //QTableWidgetItem::ItemType (2) QTableWidgetItemType = 0, QTableWidgetItemUserType = 1000 ); function QTableWidgetSelectionRange_create(): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create'; procedure QTableWidgetSelectionRange_destroy(handle: QTableWidgetSelectionRangeH); cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_destroy'; function QTableWidgetSelectionRange_create(top: Integer; left: Integer; bottom: Integer; right: Integer): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create2'; function QTableWidgetSelectionRange_create(other: QTableWidgetSelectionRangeH): QTableWidgetSelectionRangeH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_create3'; function QTableWidgetSelectionRange_topRow(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_topRow'; function QTableWidgetSelectionRange_bottomRow(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_bottomRow'; function QTableWidgetSelectionRange_leftColumn(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_leftColumn'; function QTableWidgetSelectionRange_rightColumn(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_rightColumn'; function QTableWidgetSelectionRange_rowCount(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_rowCount'; function QTableWidgetSelectionRange_columnCount(handle: QTableWidgetSelectionRangeH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_columnCount'; function QTableWidgetItem_create(_type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create'; procedure QTableWidgetItem_destroy(handle: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidgetItem_destroy'; function QTableWidgetItem_create(text: PWideString; _type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create2'; function QTableWidgetItem_create(icon: QIconH; text: PWideString; _type: QTableWidgetItemItemType = QTableWidgetItemType): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create3'; function QTableWidgetItem_create(other: QTableWidgetItemH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_create4'; function QTableWidgetItem_clone(handle: QTableWidgetItemH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidgetItem_clone'; function QTableWidgetItem_tableWidget(handle: QTableWidgetItemH): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidgetItem_tableWidget'; function QTableWidgetItem_row(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_row'; function QTableWidgetItem_column(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_column'; procedure QTableWidgetItem_setSelected(handle: QTableWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidgetItem_setSelected'; function QTableWidgetItem_isSelected(handle: QTableWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTableWidgetItem_isSelected'; function QTableWidgetItem_flags(handle: QTableWidgetItemH): QtItemFlags; cdecl; external Qt4PasLib name 'QTableWidgetItem_flags'; procedure QTableWidgetItem_setFlags(handle: QTableWidgetItemH; flags: QtItemFlags); cdecl; external Qt4PasLib name 'QTableWidgetItem_setFlags'; procedure QTableWidgetItem_text(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_text'; procedure QTableWidgetItem_setText(handle: QTableWidgetItemH; text: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setText'; procedure QTableWidgetItem_icon(handle: QTableWidgetItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QTableWidgetItem_icon'; procedure QTableWidgetItem_setIcon(handle: QTableWidgetItemH; icon: QIconH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setIcon'; procedure QTableWidgetItem_statusTip(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_statusTip'; procedure QTableWidgetItem_setStatusTip(handle: QTableWidgetItemH; statusTip: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setStatusTip'; procedure QTableWidgetItem_toolTip(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_toolTip'; procedure QTableWidgetItem_setToolTip(handle: QTableWidgetItemH; toolTip: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setToolTip'; procedure QTableWidgetItem_whatsThis(handle: QTableWidgetItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_whatsThis'; procedure QTableWidgetItem_setWhatsThis(handle: QTableWidgetItemH; whatsThis: PWideString); cdecl; external Qt4PasLib name 'QTableWidgetItem_setWhatsThis'; procedure QTableWidgetItem_font(handle: QTableWidgetItemH; retval: QFontH); cdecl; external Qt4PasLib name 'QTableWidgetItem_font'; procedure QTableWidgetItem_setFont(handle: QTableWidgetItemH; font: QFontH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setFont'; function QTableWidgetItem_textAlignment(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_textAlignment'; procedure QTableWidgetItem_setTextAlignment(handle: QTableWidgetItemH; alignment: Integer); cdecl; external Qt4PasLib name 'QTableWidgetItem_setTextAlignment'; procedure QTableWidgetItem_backgroundColor(handle: QTableWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_backgroundColor'; procedure QTableWidgetItem_setBackgroundColor(handle: QTableWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_setBackgroundColor'; procedure QTableWidgetItem_background(handle: QTableWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_background'; procedure QTableWidgetItem_setBackground(handle: QTableWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setBackground'; procedure QTableWidgetItem_textColor(handle: QTableWidgetItemH; retval: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_textColor'; procedure QTableWidgetItem_setTextColor(handle: QTableWidgetItemH; color: PQColor); cdecl; external Qt4PasLib name 'QTableWidgetItem_setTextColor'; procedure QTableWidgetItem_foreground(handle: QTableWidgetItemH; retval: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_foreground'; procedure QTableWidgetItem_setForeground(handle: QTableWidgetItemH; brush: QBrushH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setForeground'; function QTableWidgetItem_checkState(handle: QTableWidgetItemH): QtCheckState; cdecl; external Qt4PasLib name 'QTableWidgetItem_checkState'; procedure QTableWidgetItem_setCheckState(handle: QTableWidgetItemH; state: QtCheckState); cdecl; external Qt4PasLib name 'QTableWidgetItem_setCheckState'; procedure QTableWidgetItem_sizeHint(handle: QTableWidgetItemH; retval: PSize); cdecl; external Qt4PasLib name 'QTableWidgetItem_sizeHint'; procedure QTableWidgetItem_setSizeHint(handle: QTableWidgetItemH; size: PSize); cdecl; external Qt4PasLib name 'QTableWidgetItem_setSizeHint'; procedure QTableWidgetItem_data(handle: QTableWidgetItemH; retval: QVariantH; role: Integer); cdecl; external Qt4PasLib name 'QTableWidgetItem_data'; procedure QTableWidgetItem_setData(handle: QTableWidgetItemH; role: Integer; value: QVariantH); cdecl; external Qt4PasLib name 'QTableWidgetItem_setData'; procedure QTableWidgetItem_read(handle: QTableWidgetItemH; _in: QDataStreamH); cdecl; external Qt4PasLib name 'QTableWidgetItem_read'; procedure QTableWidgetItem_write(handle: QTableWidgetItemH; _out: QDataStreamH); cdecl; external Qt4PasLib name 'QTableWidgetItem_write'; function QTableWidgetItem_type(handle: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidgetItem_type'; function QTableWidget_create(parent: QWidgetH = nil): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_create'; procedure QTableWidget_destroy(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_destroy'; function QTableWidget_create(rows: Integer; columns: Integer; parent: QWidgetH = nil): QTableWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_create2'; procedure QTableWidget_setRowCount(handle: QTableWidgetH; rows: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setRowCount'; function QTableWidget_rowCount(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_rowCount'; procedure QTableWidget_setColumnCount(handle: QTableWidgetH; columns: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setColumnCount'; function QTableWidget_columnCount(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_columnCount'; function QTableWidget_row(handle: QTableWidgetH; item: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_row'; function QTableWidget_column(handle: QTableWidgetH; item: QTableWidgetItemH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_column'; function QTableWidget_item(handle: QTableWidgetH; row: Integer; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_item'; procedure QTableWidget_setItem(handle: QTableWidgetH; row: Integer; column: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setItem'; function QTableWidget_takeItem(handle: QTableWidgetH; row: Integer; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeItem'; function QTableWidget_verticalHeaderItem(handle: QTableWidgetH; row: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_verticalHeaderItem'; procedure QTableWidget_setVerticalHeaderItem(handle: QTableWidgetH; row: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setVerticalHeaderItem'; function QTableWidget_takeVerticalHeaderItem(handle: QTableWidgetH; row: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeVerticalHeaderItem'; function QTableWidget_horizontalHeaderItem(handle: QTableWidgetH; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_horizontalHeaderItem'; procedure QTableWidget_setHorizontalHeaderItem(handle: QTableWidgetH; column: Integer; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setHorizontalHeaderItem'; function QTableWidget_takeHorizontalHeaderItem(handle: QTableWidgetH; column: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_takeHorizontalHeaderItem'; procedure QTableWidget_setVerticalHeaderLabels(handle: QTableWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTableWidget_setVerticalHeaderLabels'; procedure QTableWidget_setHorizontalHeaderLabels(handle: QTableWidgetH; labels: QStringListH); cdecl; external Qt4PasLib name 'QTableWidget_setHorizontalHeaderLabels'; function QTableWidget_currentRow(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_currentRow'; function QTableWidget_currentColumn(handle: QTableWidgetH): Integer; cdecl; external Qt4PasLib name 'QTableWidget_currentColumn'; function QTableWidget_currentItem(handle: QTableWidgetH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_currentItem'; procedure QTableWidget_setCurrentItem(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentItem'; procedure QTableWidget_setCurrentItem(handle: QTableWidgetH; item: QTableWidgetItemH; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentItem2'; procedure QTableWidget_setCurrentCell(handle: QTableWidgetH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentCell'; procedure QTableWidget_setCurrentCell(handle: QTableWidgetH; row: Integer; column: Integer; command: QItemSelectionModelSelectionFlags); cdecl; external Qt4PasLib name 'QTableWidget_setCurrentCell2'; procedure QTableWidget_sortItems(handle: QTableWidgetH; column: Integer; order: QtSortOrder = QtAscendingOrder); cdecl; external Qt4PasLib name 'QTableWidget_sortItems'; procedure QTableWidget_setSortingEnabled(handle: QTableWidgetH; enable: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setSortingEnabled'; function QTableWidget_isSortingEnabled(handle: QTableWidgetH): Boolean; cdecl; external Qt4PasLib name 'QTableWidget_isSortingEnabled'; procedure QTableWidget_editItem(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_editItem'; procedure QTableWidget_openPersistentEditor(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_openPersistentEditor'; procedure QTableWidget_closePersistentEditor(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_closePersistentEditor'; function QTableWidget_cellWidget(handle: QTableWidgetH; row: Integer; column: Integer): QWidgetH; cdecl; external Qt4PasLib name 'QTableWidget_cellWidget'; procedure QTableWidget_setCellWidget(handle: QTableWidgetH; row: Integer; column: Integer; widget: QWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_setCellWidget'; procedure QTableWidget_removeCellWidget(handle: QTableWidgetH; row: Integer; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeCellWidget'; function QTableWidget_isItemSelected(handle: QTableWidgetH; item: QTableWidgetItemH): Boolean; cdecl; external Qt4PasLib name 'QTableWidget_isItemSelected'; procedure QTableWidget_setItemSelected(handle: QTableWidgetH; item: QTableWidgetItemH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setItemSelected'; procedure QTableWidget_setRangeSelected(handle: QTableWidgetH; range: QTableWidgetSelectionRangeH; select: Boolean); cdecl; external Qt4PasLib name 'QTableWidget_setRangeSelected'; procedure QTableWidget_selectedItems(handle: QTableWidgetH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QTableWidget_selectedItems'; procedure QTableWidget_findItems(handle: QTableWidgetH; retval: PPtrIntArray; text: PWideString; flags: QtMatchFlags); cdecl; external Qt4PasLib name 'QTableWidget_findItems'; function QTableWidget_visualRow(handle: QTableWidgetH; logicalRow: Integer): Integer; cdecl; external Qt4PasLib name 'QTableWidget_visualRow'; function QTableWidget_visualColumn(handle: QTableWidgetH; logicalColumn: Integer): Integer; cdecl; external Qt4PasLib name 'QTableWidget_visualColumn'; function QTableWidget_itemAt(handle: QTableWidgetH; p: PQtPoint): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemAt'; function QTableWidget_itemAt(handle: QTableWidgetH; x: Integer; y: Integer): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemAt2'; procedure QTableWidget_visualItemRect(handle: QTableWidgetH; retval: PRect; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_visualItemRect'; function QTableWidget_itemPrototype(handle: QTableWidgetH): QTableWidgetItemH; cdecl; external Qt4PasLib name 'QTableWidget_itemPrototype'; procedure QTableWidget_setItemPrototype(handle: QTableWidgetH; item: QTableWidgetItemH); cdecl; external Qt4PasLib name 'QTableWidget_setItemPrototype'; procedure QTableWidget_scrollToItem(handle: QTableWidgetH; item: QTableWidgetItemH; hint: QAbstractItemViewScrollHint); cdecl; external Qt4PasLib name 'QTableWidget_scrollToItem'; procedure QTableWidget_insertRow(handle: QTableWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QTableWidget_insertRow'; procedure QTableWidget_insertColumn(handle: QTableWidgetH; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_insertColumn'; procedure QTableWidget_removeRow(handle: QTableWidgetH; row: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeRow'; procedure QTableWidget_removeColumn(handle: QTableWidgetH; column: Integer); cdecl; external Qt4PasLib name 'QTableWidget_removeColumn'; procedure QTableWidget_clear(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_clear'; procedure QTableWidget_clearContents(handle: QTableWidgetH); cdecl; external Qt4PasLib name 'QTableWidget_clearContents'; type QTableWidget_itemPressed_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemClicked_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemDoubleClicked_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemActivated_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemEntered_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_itemChanged_Event = procedure (item: QTableWidgetItemH) of object cdecl; QTableWidget_currentItemChanged_Event = procedure (current: QTableWidgetItemH; previous: QTableWidgetItemH) of object cdecl; QTableWidget_itemSelectionChanged_Event = procedure () of object cdecl; QTableWidget_cellPressed_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellClicked_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellDoubleClicked_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellActivated_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellEntered_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_cellChanged_Event = procedure (row: Integer; column: Integer) of object cdecl; QTableWidget_currentCellChanged_Event = procedure (currentRow: Integer; currentColumn: Integer; previousRow: Integer; previousColumn: Integer) of object cdecl; function QItemEditorCreatorBase_createWidget(handle: QItemEditorCreatorBaseH; parent: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QItemEditorCreatorBase_createWidget'; procedure QItemEditorCreatorBase_valuePropertyName(handle: QItemEditorCreatorBaseH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QItemEditorCreatorBase_valuePropertyName'; function QItemEditorFactory_create(): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemEditorFactory_create'; procedure QItemEditorFactory_destroy(handle: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemEditorFactory_destroy'; function QItemEditorFactory_createEditor(handle: QItemEditorFactoryH; _type: QVariantType; parent: QWidgetH): QWidgetH; cdecl; external Qt4PasLib name 'QItemEditorFactory_createEditor'; procedure QItemEditorFactory_valuePropertyName(handle: QItemEditorFactoryH; retval: QByteArrayH; _type: QVariantType); cdecl; external Qt4PasLib name 'QItemEditorFactory_valuePropertyName'; procedure QItemEditorFactory_registerEditor(handle: QItemEditorFactoryH; _type: QVariantType; creator: QItemEditorCreatorBaseH); cdecl; external Qt4PasLib name 'QItemEditorFactory_registerEditor'; function QItemEditorFactory_defaultFactory(): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QItemEditorFactory_defaultFactory'; procedure QItemEditorFactory_setDefaultFactory(factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QItemEditorFactory_setDefaultFactory'; function QStyledItemDelegate_create(parent: QObjectH = nil): QStyledItemDelegateH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_create'; procedure QStyledItemDelegate_destroy(handle: QStyledItemDelegateH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_destroy'; procedure QStyledItemDelegate_paint(handle: QStyledItemDelegateH; painter: QPainterH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_paint'; procedure QStyledItemDelegate_sizeHint(handle: QStyledItemDelegateH; retval: PSize; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_sizeHint'; function QStyledItemDelegate_createEditor(handle: QStyledItemDelegateH; parent: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH): QWidgetH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_createEditor'; procedure QStyledItemDelegate_setEditorData(handle: QStyledItemDelegateH; editor: QWidgetH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setEditorData'; procedure QStyledItemDelegate_setModelData(handle: QStyledItemDelegateH; editor: QWidgetH; model: QAbstractItemModelH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setModelData'; procedure QStyledItemDelegate_updateEditorGeometry(handle: QStyledItemDelegateH; editor: QWidgetH; option: QStyleOptionViewItemH; index: QModelIndexH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_updateEditorGeometry'; function QStyledItemDelegate_itemEditorFactory(handle: QStyledItemDelegateH): QItemEditorFactoryH; cdecl; external Qt4PasLib name 'QStyledItemDelegate_itemEditorFactory'; procedure QStyledItemDelegate_setItemEditorFactory(handle: QStyledItemDelegateH; factory: QItemEditorFactoryH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_setItemEditorFactory'; procedure QStyledItemDelegate_displayText(handle: QStyledItemDelegateH; retval: PWideString; value: QVariantH; locale: QLocaleH); cdecl; external Qt4PasLib name 'QStyledItemDelegate_displayText'; type QDialogDialogCode = ( // QDialog::DialogCode (1) QDialogRejected, QDialogAccepted ); function QDialog_create(parent: QWidgetH = nil; f: QtWindowFlags = 0): QDialogH; cdecl; external Qt4PasLib name 'QDialog_create'; procedure QDialog_destroy(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_destroy'; function QDialog_result(handle: QDialogH): Integer; cdecl; external Qt4PasLib name 'QDialog_result'; procedure QDialog_setVisible(handle: QDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QDialog_setVisible'; procedure QDialog_setOrientation(handle: QDialogH; orientation: QtOrientation); cdecl; external Qt4PasLib name 'QDialog_setOrientation'; function QDialog_orientation(handle: QDialogH): QtOrientation; cdecl; external Qt4PasLib name 'QDialog_orientation'; procedure QDialog_setExtension(handle: QDialogH; extension: QWidgetH); cdecl; external Qt4PasLib name 'QDialog_setExtension'; function QDialog_extension(handle: QDialogH): QWidgetH; cdecl; external Qt4PasLib name 'QDialog_extension'; procedure QDialog_sizeHint(handle: QDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QDialog_sizeHint'; procedure QDialog_minimumSizeHint(handle: QDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QDialog_minimumSizeHint'; procedure QDialog_setSizeGripEnabled(handle: QDialogH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QDialog_setSizeGripEnabled'; function QDialog_isSizeGripEnabled(handle: QDialogH): Boolean; cdecl; external Qt4PasLib name 'QDialog_isSizeGripEnabled'; procedure QDialog_setModal(handle: QDialogH; modal: Boolean); cdecl; external Qt4PasLib name 'QDialog_setModal'; procedure QDialog_setResult(handle: QDialogH; r: Integer); cdecl; external Qt4PasLib name 'QDialog_setResult'; procedure QDialog_open(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_open'; function QDialog_exec(handle: QDialogH): Integer; cdecl; external Qt4PasLib name 'QDialog_exec'; procedure QDialog_done(handle: QDialogH; AnonParam1: Integer); cdecl; external Qt4PasLib name 'QDialog_done'; procedure QDialog_accept(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_accept'; procedure QDialog_reject(handle: QDialogH); cdecl; external Qt4PasLib name 'QDialog_reject'; procedure QDialog_showExtension(handle: QDialogH; AnonParam1: Boolean); cdecl; external Qt4PasLib name 'QDialog_showExtension'; type QDialog_finished_Event = procedure (result: Integer) of object cdecl; QDialog_accepted_Event = procedure () of object cdecl; QDialog_rejected_Event = procedure () of object cdecl; type QFontDialogFontDialogOption = cardinal; // QFontDialog::FontDialogOption QFontDialogFontDialogOptions = QFontDialogFontDialogOption; //QFlags<> (3) const QFontDialogNoButtons = $00000001; QFontDialogDontUseNativeDialog = $00000002; function QFontDialog_create(parent: QWidgetH = nil): QFontDialogH; cdecl; external Qt4PasLib name 'QFontDialog_create'; procedure QFontDialog_destroy(handle: QFontDialogH); cdecl; external Qt4PasLib name 'QFontDialog_destroy'; function QFontDialog_create(initial: QFontH; parent: QWidgetH = nil): QFontDialogH; cdecl; external Qt4PasLib name 'QFontDialog_create2'; procedure QFontDialog_setCurrentFont(handle: QFontDialogH; font: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_setCurrentFont'; procedure QFontDialog_currentFont(handle: QFontDialogH; retval: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_currentFont'; procedure QFontDialog_selectedFont(handle: QFontDialogH; retval: QFontH); cdecl; external Qt4PasLib name 'QFontDialog_selectedFont'; procedure QFontDialog_setOption(handle: QFontDialogH; option: QFontDialogFontDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QFontDialog_setOption'; function QFontDialog_testOption(handle: QFontDialogH; option: QFontDialogFontDialogOption): Boolean; cdecl; external Qt4PasLib name 'QFontDialog_testOption'; procedure QFontDialog_setOptions(handle: QFontDialogH; options: QFontDialogFontDialogOptions); cdecl; external Qt4PasLib name 'QFontDialog_setOptions'; function QFontDialog_options(handle: QFontDialogH): QFontDialogFontDialogOptions; cdecl; external Qt4PasLib name 'QFontDialog_options'; procedure QFontDialog_open(handle: QFontDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QFontDialog_open'; procedure QFontDialog_setVisible(handle: QFontDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QFontDialog_setVisible'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH; title: PWideString; options: QFontDialogFontDialogOptions); cdecl; external Qt4PasLib name 'QFontDialog_getFont'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH; title: PWideString); cdecl; external Qt4PasLib name 'QFontDialog_getFont2'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; initial: QFontH; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QFontDialog_getFont3'; procedure QFontDialog_getFont(retval: QFontH; ok: PBoolean; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QFontDialog_getFont4'; type QMessageBoxIcon = ( //QMessageBox::Icon (2) QMessageBoxNoIcon = 0, QMessageBoxInformation = 1, QMessageBoxWarning = 2, QMessageBoxCritical = 3, QMessageBoxQuestion = 4 ); QMessageBoxButtonRole = ( //QMessageBox::ButtonRole (2) QMessageBoxInvalidRole = -1, QMessageBoxAcceptRole, QMessageBoxRejectRole, QMessageBoxDestructiveRole, QMessageBoxActionRole, QMessageBoxHelpRole, QMessageBoxYesRole, QMessageBoxNoRole, QMessageBoxResetRole, QMessageBoxApplyRole, QMessageBoxNRoles ); type QMessageBoxStandardButton = cardinal; // QMessageBox::StandardButton (4) QMessageBoxStandardButtons = QMessageBoxStandardButton; // QFlags<> const QMessageBoxNoButton = 0 { $0 }; QMessageBoxOk = 1024 { $400 }; QMessageBoxSave = 2048 { $800 }; QMessageBoxSaveAll = 4096 { $1000 }; QMessageBoxOpen = 8192 { $2000 }; QMessageBoxYes = 16384 { $4000 }; QMessageBoxYesToAll = 32768 { $8000 }; QMessageBoxNo = 65536 { $10000 }; QMessageBoxNoToAll = 131072 { $20000 }; QMessageBoxAbort = 262144 { $40000 }; QMessageBoxRetry = 524288 { $80000 }; QMessageBoxIgnore = 1048576 { $100000 }; QMessageBoxClose = 2097152 { $200000 }; QMessageBoxCancel = 4194304 { $400000 }; QMessageBoxDiscard = 8388608 { $800000 }; QMessageBoxHelp = 16777216 { $1000000 }; QMessageBoxApply = 33554432 { $2000000 }; QMessageBoxReset = 67108864 { $4000000 }; QMessageBoxRestoreDefaults = 134217728 { $8000000 }; QMessageBoxFirstButton = 1024 { $400 }; QMessageBoxLastButton = 134217728 { $8000000 }; QMessageBoxYesAll = 32768 { $8000 }; QMessageBoxNoAll = 131072 { $20000 }; QMessageBoxDefault = 256 { $100 }; QMessageBoxEscape = 512 { $200 }; QMessageBoxFlagMask = 768 { $300 }; QMessageBoxButtonMask = 4294966527 { $fffffcff }; function QMessageBox_create(parent: QWidgetH = nil): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create'; procedure QMessageBox_destroy(handle: QMessageBoxH); cdecl; external Qt4PasLib name 'QMessageBox_destroy'; function QMessageBox_create(icon: QMessageBoxIcon; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxNoButton; parent: QWidgetH = nil; flags: QtWindowFlags = QtDialog or QtMSWindowsFixedSizeDialogHint): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create2'; procedure QMessageBox_addButton(handle: QMessageBoxH; button: QAbstractButtonH; role: QMessageBoxButtonRole); cdecl; external Qt4PasLib name 'QMessageBox_addButton'; function QMessageBox_addButton(handle: QMessageBoxH; text: PWideString; role: QMessageBoxButtonRole): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_addButton2'; function QMessageBox_addButton(handle: QMessageBoxH; button: QMessageBoxStandardButton): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_addButton3'; procedure QMessageBox_removeButton(handle: QMessageBoxH; button: QAbstractButtonH); cdecl; external Qt4PasLib name 'QMessageBox_removeButton'; procedure QMessageBox_open(handle: QMessageBoxH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QMessageBox_open'; procedure QMessageBox_buttons(handle: QMessageBoxH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QMessageBox_buttons'; function QMessageBox_buttonRole(handle: QMessageBoxH; button: QAbstractButtonH): QMessageBoxButtonRole; cdecl; external Qt4PasLib name 'QMessageBox_buttonRole'; procedure QMessageBox_setStandardButtons(handle: QMessageBoxH; buttons: QMessageBoxStandardButtons); cdecl; external Qt4PasLib name 'QMessageBox_setStandardButtons'; function QMessageBox_standardButtons(handle: QMessageBoxH): QMessageBoxStandardButtons; cdecl; external Qt4PasLib name 'QMessageBox_standardButtons'; function QMessageBox_standardButton(handle: QMessageBoxH; button: QAbstractButtonH): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_standardButton'; function QMessageBox_button(handle: QMessageBoxH; which: QMessageBoxStandardButton): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_button'; function QMessageBox_defaultButton(handle: QMessageBoxH): QPushButtonH; cdecl; external Qt4PasLib name 'QMessageBox_defaultButton'; procedure QMessageBox_setDefaultButton(handle: QMessageBoxH; button: QPushButtonH); cdecl; external Qt4PasLib name 'QMessageBox_setDefaultButton'; procedure QMessageBox_setDefaultButton(handle: QMessageBoxH; button: QMessageBoxStandardButton); cdecl; external Qt4PasLib name 'QMessageBox_setDefaultButton2'; function QMessageBox_escapeButton(handle: QMessageBoxH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_escapeButton'; procedure QMessageBox_setEscapeButton(handle: QMessageBoxH; button: QAbstractButtonH); cdecl; external Qt4PasLib name 'QMessageBox_setEscapeButton'; procedure QMessageBox_setEscapeButton(handle: QMessageBoxH; button: QMessageBoxStandardButton); cdecl; external Qt4PasLib name 'QMessageBox_setEscapeButton2'; function QMessageBox_clickedButton(handle: QMessageBoxH): QAbstractButtonH; cdecl; external Qt4PasLib name 'QMessageBox_clickedButton'; procedure QMessageBox_text(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_text'; procedure QMessageBox_setText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setText'; function QMessageBox_icon(handle: QMessageBoxH): QMessageBoxIcon; cdecl; external Qt4PasLib name 'QMessageBox_icon'; procedure QMessageBox_setIcon(handle: QMessageBoxH; AnonParam1: QMessageBoxIcon); cdecl; external Qt4PasLib name 'QMessageBox_setIcon'; procedure QMessageBox_iconPixmap(handle: QMessageBoxH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QMessageBox_iconPixmap'; procedure QMessageBox_setIconPixmap(handle: QMessageBoxH; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QMessageBox_setIconPixmap'; function QMessageBox_textFormat(handle: QMessageBoxH): QtTextFormat; cdecl; external Qt4PasLib name 'QMessageBox_textFormat'; procedure QMessageBox_setTextFormat(handle: QMessageBoxH; format: QtTextFormat); cdecl; external Qt4PasLib name 'QMessageBox_setTextFormat'; function QMessageBox_information(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_information'; function QMessageBox_question(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_question'; function QMessageBox_warning(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_warning'; function QMessageBox_critical(parent: QWidgetH; title: PWideString; text: PWideString; buttons: QMessageBoxStandardButtons = QMessageBoxOk; defaultButton: QMessageBoxStandardButton = QMessageBoxNoButton): QMessageBoxStandardButton; cdecl; external Qt4PasLib name 'QMessageBox_critical'; procedure QMessageBox_about(parent: QWidgetH; title: PWideString; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_about'; procedure QMessageBox_aboutQt(parent: QWidgetH; title: PWideString = nil); cdecl; external Qt4PasLib name 'QMessageBox_aboutQt'; procedure QMessageBox_sizeHint(handle: QMessageBoxH; retval: PSize); cdecl; external Qt4PasLib name 'QMessageBox_sizeHint'; function QMessageBox_create(title: PWideString; text: PWideString; icon: QMessageBoxIcon; button0: Integer; button1: Integer; button2: Integer; parent: QWidgetH = nil; f: QtWindowFlags = QtDialog or QtMSWindowsFixedSizeDialogHint): QMessageBoxH; cdecl; external Qt4PasLib name 'QMessageBox_create3'; function QMessageBox_information(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_information3'; function QMessageBox_question(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_question3'; function QMessageBox_warning(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_warning3'; function QMessageBox_critical(parent: QWidgetH; title: PWideString; text: PWideString; button0Text: PWideString; button1Text: PWideString = nil; button2Text: PWideString = nil; defaultButtonNumber: Integer = 0; escapeButtonNumber: Integer = -1): Integer; cdecl; external Qt4PasLib name 'QMessageBox_critical3'; procedure QMessageBox_buttonText(handle: QMessageBoxH; retval: PWideString; button: Integer); cdecl; external Qt4PasLib name 'QMessageBox_buttonText'; procedure QMessageBox_setButtonText(handle: QMessageBoxH; button: Integer; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setButtonText'; procedure QMessageBox_informativeText(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_informativeText'; procedure QMessageBox_setInformativeText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setInformativeText'; procedure QMessageBox_detailedText(handle: QMessageBoxH; retval: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_detailedText'; procedure QMessageBox_setDetailedText(handle: QMessageBoxH; text: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setDetailedText'; procedure QMessageBox_setWindowTitle(handle: QMessageBoxH; title: PWideString); cdecl; external Qt4PasLib name 'QMessageBox_setWindowTitle'; procedure QMessageBox_setWindowModality(handle: QMessageBoxH; windowModality: QtWindowModality); cdecl; external Qt4PasLib name 'QMessageBox_setWindowModality'; procedure QMessageBox_standardIcon(retval: QPixmapH; icon: QMessageBoxIcon); cdecl; external Qt4PasLib name 'QMessageBox_standardIcon'; type QInputDialogInputMode = ( // QInputDialog::InputMode (1) QInputDialogTextInput, QInputDialogIntInput, QInputDialogDoubleInput ); type QInputDialogInputDialogOption = cardinal; // QInputDialog::InputDialogOption QInputDialogInputDialogOptions = QInputDialogInputDialogOption; //QFlags<> (3) const QInputDialogNoButtons = $00000001; QInputDialogUseListViewForComboBoxItems = $00000002; function QInputDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QInputDialogH; cdecl; external Qt4PasLib name 'QInputDialog_create'; procedure QInputDialog_destroy(handle: QInputDialogH); cdecl; external Qt4PasLib name 'QInputDialog_destroy'; procedure QInputDialog_setInputMode(handle: QInputDialogH; mode: QInputDialogInputMode); cdecl; external Qt4PasLib name 'QInputDialog_setInputMode'; function QInputDialog_inputMode(handle: QInputDialogH): QInputDialogInputMode; cdecl; external Qt4PasLib name 'QInputDialog_inputMode'; procedure QInputDialog_setLabelText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setLabelText'; procedure QInputDialog_labelText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_labelText'; procedure QInputDialog_setOption(handle: QInputDialogH; option: QInputDialogInputDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QInputDialog_setOption'; function QInputDialog_testOption(handle: QInputDialogH; option: QInputDialogInputDialogOption): Boolean; cdecl; external Qt4PasLib name 'QInputDialog_testOption'; procedure QInputDialog_setOptions(handle: QInputDialogH; options: QInputDialogInputDialogOptions); cdecl; external Qt4PasLib name 'QInputDialog_setOptions'; function QInputDialog_options(handle: QInputDialogH): QInputDialogInputDialogOptions; cdecl; external Qt4PasLib name 'QInputDialog_options'; procedure QInputDialog_setTextValue(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setTextValue'; procedure QInputDialog_textValue(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_textValue'; procedure QInputDialog_setTextEchoMode(handle: QInputDialogH; mode: QLineEditEchoMode); cdecl; external Qt4PasLib name 'QInputDialog_setTextEchoMode'; function QInputDialog_textEchoMode(handle: QInputDialogH): QLineEditEchoMode; cdecl; external Qt4PasLib name 'QInputDialog_textEchoMode'; procedure QInputDialog_setComboBoxEditable(handle: QInputDialogH; editable: Boolean); cdecl; external Qt4PasLib name 'QInputDialog_setComboBoxEditable'; function QInputDialog_isComboBoxEditable(handle: QInputDialogH): Boolean; cdecl; external Qt4PasLib name 'QInputDialog_isComboBoxEditable'; procedure QInputDialog_setComboBoxItems(handle: QInputDialogH; items: QStringListH); cdecl; external Qt4PasLib name 'QInputDialog_setComboBoxItems'; procedure QInputDialog_comboBoxItems(handle: QInputDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QInputDialog_comboBoxItems'; procedure QInputDialog_setIntValue(handle: QInputDialogH; value: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntValue'; function QInputDialog_intValue(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intValue'; procedure QInputDialog_setIntMinimum(handle: QInputDialogH; min: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntMinimum'; function QInputDialog_intMinimum(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intMinimum'; procedure QInputDialog_setIntMaximum(handle: QInputDialogH; max: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntMaximum'; function QInputDialog_intMaximum(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intMaximum'; procedure QInputDialog_setIntRange(handle: QInputDialogH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntRange'; procedure QInputDialog_setIntStep(handle: QInputDialogH; step: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setIntStep'; function QInputDialog_intStep(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_intStep'; procedure QInputDialog_setDoubleValue(handle: QInputDialogH; value: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleValue'; function QInputDialog_doubleValue(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleValue'; procedure QInputDialog_setDoubleMinimum(handle: QInputDialogH; min: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleMinimum'; function QInputDialog_doubleMinimum(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleMinimum'; procedure QInputDialog_setDoubleMaximum(handle: QInputDialogH; max: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleMaximum'; function QInputDialog_doubleMaximum(handle: QInputDialogH): Double; cdecl; external Qt4PasLib name 'QInputDialog_doubleMaximum'; procedure QInputDialog_setDoubleRange(handle: QInputDialogH; min: Double; max: Double); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleRange'; procedure QInputDialog_setDoubleDecimals(handle: QInputDialogH; decimals: Integer); cdecl; external Qt4PasLib name 'QInputDialog_setDoubleDecimals'; function QInputDialog_doubleDecimals(handle: QInputDialogH): Integer; cdecl; external Qt4PasLib name 'QInputDialog_doubleDecimals'; procedure QInputDialog_setOkButtonText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setOkButtonText'; procedure QInputDialog_okButtonText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_okButtonText'; procedure QInputDialog_setCancelButtonText(handle: QInputDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_setCancelButtonText'; procedure QInputDialog_cancelButtonText(handle: QInputDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QInputDialog_cancelButtonText'; procedure QInputDialog_open(handle: QInputDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QInputDialog_open'; procedure QInputDialog_minimumSizeHint(handle: QInputDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QInputDialog_minimumSizeHint'; procedure QInputDialog_sizeHint(handle: QInputDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QInputDialog_sizeHint'; procedure QInputDialog_setVisible(handle: QInputDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QInputDialog_setVisible'; procedure QInputDialog_getText(retval: PWideString; parent: QWidgetH; title: PWideString; _label: PWideString; echo: QLineEditEchoMode = QLineEditNormal; text: PWideString = nil; ok: PBoolean = nil; flags: QtWindowFlags = 0); cdecl; external Qt4PasLib name 'QInputDialog_getText'; function QInputDialog_getInt(parent: QWidgetH; title: PWideString; _label: PWideString; value: Integer = 0; minValue: Integer = -2147483647; maxValue: Integer = 2147483647; step: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Integer; cdecl; external Qt4PasLib name 'QInputDialog_getInt'; function QInputDialog_getDouble(parent: QWidgetH; title: PWideString; _label: PWideString; value: Double = 0; minValue: Double = -2147483647; maxValue: Double = 2147483647; decimals: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Double; cdecl; external Qt4PasLib name 'QInputDialog_getDouble'; procedure QInputDialog_getItem(retval: PWideString; parent: QWidgetH; title: PWideString; _label: PWideString; items: QStringListH; current: Integer = 0; editable: Boolean = True; ok: PBoolean = nil; flags: QtWindowFlags = 0); cdecl; external Qt4PasLib name 'QInputDialog_getItem'; function QInputDialog_getInteger(parent: QWidgetH; title: PWideString; _label: PWideString; value: Integer = 0; minValue: Integer = -2147483647; maxValue: Integer = 2147483647; step: Integer = 1; ok: PBoolean = nil; flags: QtWindowFlags = 0): Integer; cdecl; external Qt4PasLib name 'QInputDialog_getInteger'; procedure QInputDialog_done(handle: QInputDialogH; result: Integer); cdecl; external Qt4PasLib name 'QInputDialog_done'; type QColorDialogColorDialogOption = cardinal; // QColorDialog::ColorDialogOption QColorDialogColorDialogOptions = QColorDialogColorDialogOption; //QFlags<> (3) const QColorDialogShowAlphaChannel = $00000001; QColorDialogNoButtons = $00000002; QColorDialogDontUseNativeDialog = $00000004; function QColorDialog_create(parent: QWidgetH = nil): QColorDialogH; cdecl; external Qt4PasLib name 'QColorDialog_create'; procedure QColorDialog_destroy(handle: QColorDialogH); cdecl; external Qt4PasLib name 'QColorDialog_destroy'; function QColorDialog_create(initial: PQColor; parent: QWidgetH = nil): QColorDialogH; cdecl; external Qt4PasLib name 'QColorDialog_create2'; procedure QColorDialog_setCurrentColor(handle: QColorDialogH; color: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_setCurrentColor'; procedure QColorDialog_currentColor(handle: QColorDialogH; retval: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_currentColor'; procedure QColorDialog_selectedColor(handle: QColorDialogH; retval: PQColor); cdecl; external Qt4PasLib name 'QColorDialog_selectedColor'; procedure QColorDialog_setOption(handle: QColorDialogH; option: QColorDialogColorDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QColorDialog_setOption'; function QColorDialog_testOption(handle: QColorDialogH; option: QColorDialogColorDialogOption): Boolean; cdecl; external Qt4PasLib name 'QColorDialog_testOption'; procedure QColorDialog_setOptions(handle: QColorDialogH; options: QColorDialogColorDialogOptions); cdecl; external Qt4PasLib name 'QColorDialog_setOptions'; function QColorDialog_options(handle: QColorDialogH): QColorDialogColorDialogOptions; cdecl; external Qt4PasLib name 'QColorDialog_options'; procedure QColorDialog_open(handle: QColorDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QColorDialog_open'; procedure QColorDialog_setVisible(handle: QColorDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QColorDialog_setVisible'; procedure QColorDialog_getColor(retval: PQColor; initial: PQColor; parent: QWidgetH; title: PWideString; options: QColorDialogColorDialogOptions = 0); cdecl; external Qt4PasLib name 'QColorDialog_getColor'; procedure QColorDialog_getColor(retval: PQColor; initial: PQColor; parent: QWidgetH = nil); cdecl; external Qt4PasLib name 'QColorDialog_getColor2'; function QColorDialog_getRgba(rgba: QRgb = 4294967295; ok: PBoolean = nil; parent: QWidgetH = nil): QRgb; cdecl; external Qt4PasLib name 'QColorDialog_getRgba'; function QColorDialog_customCount(): Integer; cdecl; external Qt4PasLib name 'QColorDialog_customCount'; function QColorDialog_customColor(index: Integer): QRgb; cdecl; external Qt4PasLib name 'QColorDialog_customColor'; procedure QColorDialog_setCustomColor(index: Integer; color: QRgb); cdecl; external Qt4PasLib name 'QColorDialog_setCustomColor'; procedure QColorDialog_setStandardColor(index: Integer; color: QRgb); cdecl; external Qt4PasLib name 'QColorDialog_setStandardColor'; type QFileDialogViewMode = ( // QFileDialog::ViewMode (1) QFileDialogDetail, QFileDialogList ); QFileDialogFileMode = ( // QFileDialog::FileMode (1) QFileDialogAnyFile, QFileDialogExistingFile, QFileDialogDirectory, QFileDialogExistingFiles, QFileDialogDirectoryOnly ); QFileDialogAcceptMode = ( // QFileDialog::AcceptMode (1) QFileDialogAcceptOpen, QFileDialogAcceptSave ); QFileDialogDialogLabel = ( // QFileDialog::DialogLabel (1) QFileDialogLookIn, QFileDialogFileName, QFileDialogFileType, QFileDialogAccept, QFileDialogReject ); type QFileDialogOption = cardinal; // QFileDialog::Option QFileDialogOptions = QFileDialogOption; //QFlags<> (3) const QFileDialogShowDirsOnly = $00000001; QFileDialogDontResolveSymlinks = $00000002; QFileDialogDontConfirmOverwrite = $00000004; QFileDialogDontUseSheet = $00000008; QFileDialogDontUseNativeDialog = $00000010; QFileDialogReadOnly = $00000020; QFileDialogHideNameFilterDetails = $00000040; function QFileDialog_create(parent: QWidgetH; f: QtWindowFlags): QFileDialogH; cdecl; external Qt4PasLib name 'QFileDialog_create'; procedure QFileDialog_destroy(handle: QFileDialogH); cdecl; external Qt4PasLib name 'QFileDialog_destroy'; function QFileDialog_create(parent: QWidgetH = nil; caption: PWideString = nil; directory: PWideString = nil; filter: PWideString = nil): QFileDialogH; cdecl; external Qt4PasLib name 'QFileDialog_create2'; procedure QFileDialog_setDirectory(handle: QFileDialogH; directory: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setDirectory'; procedure QFileDialog_setDirectory(handle: QFileDialogH; directory: QDirH); cdecl; external Qt4PasLib name 'QFileDialog_setDirectory2'; procedure QFileDialog_directory(handle: QFileDialogH; retval: QDirH); cdecl; external Qt4PasLib name 'QFileDialog_directory'; procedure QFileDialog_selectFile(handle: QFileDialogH; filename: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectFile'; procedure QFileDialog_selectedFiles(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_selectedFiles'; procedure QFileDialog_setNameFilterDetailsVisible(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilterDetailsVisible'; function QFileDialog_isNameFilterDetailsVisible(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_isNameFilterDetailsVisible'; procedure QFileDialog_setNameFilter(handle: QFileDialogH; filter: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilter'; procedure QFileDialog_setNameFilters(handle: QFileDialogH; filters: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_setNameFilters'; procedure QFileDialog_nameFilters(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_nameFilters'; procedure QFileDialog_selectNameFilter(handle: QFileDialogH; filter: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectNameFilter'; procedure QFileDialog_selectedNameFilter(handle: QFileDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_selectedNameFilter'; function QFileDialog_filter(handle: QFileDialogH): QDirFilters; cdecl; external Qt4PasLib name 'QFileDialog_filter'; procedure QFileDialog_setFilter(handle: QFileDialogH; filters: QDirFilters); cdecl; external Qt4PasLib name 'QFileDialog_setFilter'; procedure QFileDialog_setViewMode(handle: QFileDialogH; mode: QFileDialogViewMode); cdecl; external Qt4PasLib name 'QFileDialog_setViewMode'; function QFileDialog_viewMode(handle: QFileDialogH): QFileDialogViewMode; cdecl; external Qt4PasLib name 'QFileDialog_viewMode'; procedure QFileDialog_setFileMode(handle: QFileDialogH; mode: QFileDialogFileMode); cdecl; external Qt4PasLib name 'QFileDialog_setFileMode'; function QFileDialog_fileMode(handle: QFileDialogH): QFileDialogFileMode; cdecl; external Qt4PasLib name 'QFileDialog_fileMode'; procedure QFileDialog_setAcceptMode(handle: QFileDialogH; mode: QFileDialogAcceptMode); cdecl; external Qt4PasLib name 'QFileDialog_setAcceptMode'; function QFileDialog_acceptMode(handle: QFileDialogH): QFileDialogAcceptMode; cdecl; external Qt4PasLib name 'QFileDialog_acceptMode'; procedure QFileDialog_setReadOnly(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setReadOnly'; function QFileDialog_isReadOnly(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_isReadOnly'; procedure QFileDialog_setResolveSymlinks(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setResolveSymlinks'; function QFileDialog_resolveSymlinks(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_resolveSymlinks'; procedure QFileDialog_saveState(handle: QFileDialogH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QFileDialog_saveState'; function QFileDialog_restoreState(handle: QFileDialogH; state: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_restoreState'; procedure QFileDialog_setConfirmOverwrite(handle: QFileDialogH; enabled: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setConfirmOverwrite'; function QFileDialog_confirmOverwrite(handle: QFileDialogH): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_confirmOverwrite'; procedure QFileDialog_setDefaultSuffix(handle: QFileDialogH; suffix: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setDefaultSuffix'; procedure QFileDialog_defaultSuffix(handle: QFileDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_defaultSuffix'; procedure QFileDialog_setHistory(handle: QFileDialogH; paths: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_setHistory'; procedure QFileDialog_history(handle: QFileDialogH; retval: QStringListH); cdecl; external Qt4PasLib name 'QFileDialog_history'; procedure QFileDialog_setItemDelegate(handle: QFileDialogH; delegate: QAbstractItemDelegateH); cdecl; external Qt4PasLib name 'QFileDialog_setItemDelegate'; function QFileDialog_itemDelegate(handle: QFileDialogH): QAbstractItemDelegateH; cdecl; external Qt4PasLib name 'QFileDialog_itemDelegate'; procedure QFileDialog_setIconProvider(handle: QFileDialogH; provider: QFileIconProviderH); cdecl; external Qt4PasLib name 'QFileDialog_setIconProvider'; function QFileDialog_iconProvider(handle: QFileDialogH): QFileIconProviderH; cdecl; external Qt4PasLib name 'QFileDialog_iconProvider'; procedure QFileDialog_setLabelText(handle: QFileDialogH; _label: QFileDialogDialogLabel; text: PWideString); cdecl; external Qt4PasLib name 'QFileDialog_setLabelText'; procedure QFileDialog_labelText(handle: QFileDialogH; retval: PWideString; _label: QFileDialogDialogLabel); cdecl; external Qt4PasLib name 'QFileDialog_labelText'; procedure QFileDialog_setProxyModel(handle: QFileDialogH; model: QAbstractProxyModelH); cdecl; external Qt4PasLib name 'QFileDialog_setProxyModel'; function QFileDialog_proxyModel(handle: QFileDialogH): QAbstractProxyModelH; cdecl; external Qt4PasLib name 'QFileDialog_proxyModel'; procedure QFileDialog_setOption(handle: QFileDialogH; option: QFileDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QFileDialog_setOption'; function QFileDialog_testOption(handle: QFileDialogH; option: QFileDialogOption): Boolean; cdecl; external Qt4PasLib name 'QFileDialog_testOption'; procedure QFileDialog_setOptions(handle: QFileDialogH; options: QFileDialogOptions); cdecl; external Qt4PasLib name 'QFileDialog_setOptions'; function QFileDialog_options(handle: QFileDialogH): QFileDialogOptions; cdecl; external Qt4PasLib name 'QFileDialog_options'; procedure QFileDialog_open(handle: QFileDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QFileDialog_open'; procedure QFileDialog_setVisible(handle: QFileDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QFileDialog_setVisible'; procedure QFileDialog_getOpenFileName(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getOpenFileName'; procedure QFileDialog_getSaveFileName(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getSaveFileName'; procedure QFileDialog_getExistingDirectory(retval: PWideString; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; options: QFileDialogOptions = QFileDialogShowDirsOnly); cdecl; external Qt4PasLib name 'QFileDialog_getExistingDirectory'; procedure QFileDialog_getOpenFileNames(retval: QStringListH; parent: QWidgetH = nil; caption: PWideString = nil; dir: PWideString = nil; filter: PWideString = nil; selectedFilter: PWideString = nil; options: QFileDialogOptions = 0); cdecl; external Qt4PasLib name 'QFileDialog_getOpenFileNames'; type QFileDialog_fileSelected_Event = procedure (_file: PWideString) of object cdecl; QFileDialog_filesSelected_Event = procedure (files: QStringListH) of object cdecl; QFileDialog_currentChanged_Event = procedure (path: PWideString) of object cdecl; QFileDialog_directoryEntered_Event = procedure (directory: PWideString) of object cdecl; QFileDialog_filterSelected_Event = procedure (filter: PWideString) of object cdecl; function QProgressDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QProgressDialogH; cdecl; external Qt4PasLib name 'QProgressDialog_create'; procedure QProgressDialog_destroy(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_destroy'; function QProgressDialog_create(labelText: PWideString; cancelButtonText: PWideString; minimum: Integer; maximum: Integer; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QProgressDialogH; cdecl; external Qt4PasLib name 'QProgressDialog_create2'; procedure QProgressDialog_setLabel(handle: QProgressDialogH; _label: QLabelH); cdecl; external Qt4PasLib name 'QProgressDialog_setLabel'; procedure QProgressDialog_setCancelButton(handle: QProgressDialogH; button: QPushButtonH); cdecl; external Qt4PasLib name 'QProgressDialog_setCancelButton'; procedure QProgressDialog_setBar(handle: QProgressDialogH; bar: QProgressBarH); cdecl; external Qt4PasLib name 'QProgressDialog_setBar'; function QProgressDialog_wasCanceled(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_wasCanceled'; function QProgressDialog_minimum(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_minimum'; function QProgressDialog_maximum(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_maximum'; function QProgressDialog_value(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_value'; procedure QProgressDialog_sizeHint(handle: QProgressDialogH; retval: PSize); cdecl; external Qt4PasLib name 'QProgressDialog_sizeHint'; procedure QProgressDialog_labelText(handle: QProgressDialogH; retval: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_labelText'; function QProgressDialog_minimumDuration(handle: QProgressDialogH): Integer; cdecl; external Qt4PasLib name 'QProgressDialog_minimumDuration'; procedure QProgressDialog_setAutoReset(handle: QProgressDialogH; reset: Boolean); cdecl; external Qt4PasLib name 'QProgressDialog_setAutoReset'; function QProgressDialog_autoReset(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_autoReset'; procedure QProgressDialog_setAutoClose(handle: QProgressDialogH; close: Boolean); cdecl; external Qt4PasLib name 'QProgressDialog_setAutoClose'; function QProgressDialog_autoClose(handle: QProgressDialogH): Boolean; cdecl; external Qt4PasLib name 'QProgressDialog_autoClose'; procedure QProgressDialog_open(handle: QProgressDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QProgressDialog_open'; procedure QProgressDialog_cancel(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_cancel'; procedure QProgressDialog_reset(handle: QProgressDialogH); cdecl; external Qt4PasLib name 'QProgressDialog_reset'; procedure QProgressDialog_setMaximum(handle: QProgressDialogH; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMaximum'; procedure QProgressDialog_setMinimum(handle: QProgressDialogH; minimum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMinimum'; procedure QProgressDialog_setRange(handle: QProgressDialogH; minimum: Integer; maximum: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setRange'; procedure QProgressDialog_setValue(handle: QProgressDialogH; progress: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setValue'; procedure QProgressDialog_setLabelText(handle: QProgressDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_setLabelText'; procedure QProgressDialog_setCancelButtonText(handle: QProgressDialogH; text: PWideString); cdecl; external Qt4PasLib name 'QProgressDialog_setCancelButtonText'; procedure QProgressDialog_setMinimumDuration(handle: QProgressDialogH; ms: Integer); cdecl; external Qt4PasLib name 'QProgressDialog_setMinimumDuration'; type QProgressDialog_canceled_Event = procedure () of object cdecl; type QAbstractPrintDialogPrintRange = ( // QAbstractPrintDialog::PrintRange (1) QAbstractPrintDialogAllPages, QAbstractPrintDialogSelection, QAbstractPrintDialogPageRange ); type QAbstractPrintDialogPrintDialogOption = cardinal; // QAbstractPrintDialog::PrintDialogOption QAbstractPrintDialogPrintDialogOptions = QAbstractPrintDialogPrintDialogOption; //QFlags<> (3) const QAbstractPrintDialogNone = $0000; QAbstractPrintDialogPrintToFile = $0001; QAbstractPrintDialogPrintSelection = $0002; QAbstractPrintDialogPrintPageRange = $0004; QAbstractPrintDialogPrintShowPageSize = $0008; QAbstractPrintDialogPrintCollateCopies = $0010; QAbstractPrintDialogDontUseSheet = $0020; function QAbstractPrintDialog_exec(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_exec'; procedure QAbstractPrintDialog_addEnabledOption(handle: QAbstractPrintDialogH; option: QAbstractPrintDialogPrintDialogOption); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_addEnabledOption'; procedure QAbstractPrintDialog_setEnabledOptions(handle: QAbstractPrintDialogH; options: QAbstractPrintDialogPrintDialogOptions); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setEnabledOptions'; function QAbstractPrintDialog_enabledOptions(handle: QAbstractPrintDialogH): QAbstractPrintDialogPrintDialogOptions; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_enabledOptions'; function QAbstractPrintDialog_isOptionEnabled(handle: QAbstractPrintDialogH; option: QAbstractPrintDialogPrintDialogOption): Boolean; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_isOptionEnabled'; procedure QAbstractPrintDialog_setPrintRange(handle: QAbstractPrintDialogH; range: QAbstractPrintDialogPrintRange); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setPrintRange'; function QAbstractPrintDialog_printRange(handle: QAbstractPrintDialogH): QAbstractPrintDialogPrintRange; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_printRange'; procedure QAbstractPrintDialog_setMinMax(handle: QAbstractPrintDialogH; min: Integer; max: Integer); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setMinMax'; function QAbstractPrintDialog_minPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_minPage'; function QAbstractPrintDialog_maxPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_maxPage'; procedure QAbstractPrintDialog_setFromTo(handle: QAbstractPrintDialogH; fromPage: Integer; toPage: Integer); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_setFromTo'; function QAbstractPrintDialog_fromPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_fromPage'; function QAbstractPrintDialog_toPage(handle: QAbstractPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_toPage'; function QAbstractPrintDialog_printer(handle: QAbstractPrintDialogH): QPrinterH; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_printer'; function QPrintDialog_create(printer: QPrinterH; parent: QWidgetH = nil): QPrintDialogH; cdecl; external Qt4PasLib name 'QPrintDialog_create'; procedure QPrintDialog_destroy(handle: QPrintDialogH); cdecl; external Qt4PasLib name 'QPrintDialog_destroy'; function QPrintDialog_create(parent: QWidgetH = nil): QPrintDialogH; cdecl; external Qt4PasLib name 'QPrintDialog_create2'; function QPrintDialog_exec(handle: QPrintDialogH): Integer; cdecl; external Qt4PasLib name 'QPrintDialog_exec'; {$if defined(BINUX) or defined(QTOPIA)} procedure QPrintDialog_accept(handle: QPrintDialogH); cdecl; external Qt4PasLib name 'QPrintDialog_accept'; {$endif} procedure QPrintDialog_done(handle: QPrintDialogH; result: Integer); cdecl; external Qt4PasLib name 'QPrintDialog_done'; procedure QPrintDialog_setOption(handle: QPrintDialogH; option: QAbstractPrintDialogPrintDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPrintDialog_setOption'; function QPrintDialog_testOption(handle: QPrintDialogH; option: QAbstractPrintDialogPrintDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPrintDialog_testOption'; procedure QPrintDialog_setOptions(handle: QPrintDialogH; options: QAbstractPrintDialogPrintDialogOptions); cdecl; external Qt4PasLib name 'QPrintDialog_setOptions'; function QPrintDialog_options(handle: QPrintDialogH): QAbstractPrintDialogPrintDialogOptions; cdecl; external Qt4PasLib name 'QPrintDialog_options'; {$if defined(BINUX) or defined(DARWIN) or defined(QTOPIA)} procedure QPrintDialog_setVisible(handle: QPrintDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintDialog_setVisible'; {$endif} procedure QPrintDialog_open(handle: QPrintDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPrintDialog_open'; type QPrintDialog_accepted_Event = procedure (printer: QPrinterH) of object cdecl; type QPageSetupDialogPageSetupDialogOption = cardinal; // QPageSetupDialog::PageSetupDialogOption QPageSetupDialogPageSetupDialogOptions = QPageSetupDialogPageSetupDialogOption; //QFlags<> (3) const QPageSetupDialogNone = $00000000; QPageSetupDialogDontUseSheet = $00000001; QPageSetupDialogOwnsPrinter = $80000000; function QPageSetupDialog_create(printer: QPrinterH; parent: QWidgetH = nil): QPageSetupDialogH; cdecl; external Qt4PasLib name 'QPageSetupDialog_create'; procedure QPageSetupDialog_destroy(handle: QPageSetupDialogH); cdecl; external Qt4PasLib name 'QPageSetupDialog_destroy'; function QPageSetupDialog_create(parent: QWidgetH = nil): QPageSetupDialogH; cdecl; external Qt4PasLib name 'QPageSetupDialog_create2'; procedure QPageSetupDialog_addEnabledOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption); cdecl; external Qt4PasLib name 'QPageSetupDialog_addEnabledOption'; procedure QPageSetupDialog_setEnabledOptions(handle: QPageSetupDialogH; options: QPageSetupDialogPageSetupDialogOptions); cdecl; external Qt4PasLib name 'QPageSetupDialog_setEnabledOptions'; function QPageSetupDialog_enabledOptions(handle: QPageSetupDialogH): QPageSetupDialogPageSetupDialogOptions; cdecl; external Qt4PasLib name 'QPageSetupDialog_enabledOptions'; function QPageSetupDialog_isOptionEnabled(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPageSetupDialog_isOptionEnabled'; procedure QPageSetupDialog_setOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption; _on: Boolean = True); cdecl; external Qt4PasLib name 'QPageSetupDialog_setOption'; function QPageSetupDialog_testOption(handle: QPageSetupDialogH; option: QPageSetupDialogPageSetupDialogOption): Boolean; cdecl; external Qt4PasLib name 'QPageSetupDialog_testOption'; procedure QPageSetupDialog_setOptions(handle: QPageSetupDialogH; options: QPageSetupDialogPageSetupDialogOptions); cdecl; external Qt4PasLib name 'QPageSetupDialog_setOptions'; function QPageSetupDialog_options(handle: QPageSetupDialogH): QPageSetupDialogPageSetupDialogOptions; cdecl; external Qt4PasLib name 'QPageSetupDialog_options'; function QPageSetupDialog_exec(handle: QPageSetupDialogH): Integer; cdecl; external Qt4PasLib name 'QPageSetupDialog_exec'; procedure QPageSetupDialog_open(handle: QPageSetupDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPageSetupDialog_open'; {$ifdef DARWIN } procedure QPageSetupDialog_setVisible(handle: QPageSetupDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPageSetupDialog_setVisible'; {$endif} function QPrintPreviewDialog_create(parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewDialogH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_create'; procedure QPrintPreviewDialog_destroy(handle: QPrintPreviewDialogH); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_destroy'; function QPrintPreviewDialog_create(printer: QPrinterH; parent: QWidgetH = nil; flags: QtWindowFlags = 0): QPrintPreviewDialogH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_create2'; procedure QPrintPreviewDialog_open(handle: QPrintPreviewDialogH; receiver: QObjectH; member: PAnsiChar); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_open'; function QPrintPreviewDialog_printer(handle: QPrintPreviewDialogH): QPrinterH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_printer'; procedure QPrintPreviewDialog_setVisible(handle: QPrintPreviewDialogH; visible: Boolean); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_setVisible'; procedure QPrintPreviewDialog_done(handle: QPrintPreviewDialogH; result: Integer); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_done'; type QPrintPreviewDialog_paintRequested_Event = procedure (printer: QPrinterH) of object cdecl; type QSystemTrayIconActivationReason = ( // QSystemTrayIcon::ActivationReason (1) QSystemTrayIconUnknown, QSystemTrayIconContext, QSystemTrayIconDoubleClick, QSystemTrayIconTrigger, QSystemTrayIconMiddleClick ); QSystemTrayIconMessageIcon = ( // QSystemTrayIcon::MessageIcon (1) QSystemTrayIconNoIcon, QSystemTrayIconInformation, QSystemTrayIconWarning, QSystemTrayIconCritical ); function QSystemTrayIcon_create(parent: QObjectH = nil): QSystemTrayIconH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_create'; procedure QSystemTrayIcon_destroy(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_destroy'; function QSystemTrayIcon_create(icon: QIconH; parent: QObjectH = nil): QSystemTrayIconH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_create2'; procedure QSystemTrayIcon_setContextMenu(handle: QSystemTrayIconH; menu: QMenuH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setContextMenu'; function QSystemTrayIcon_contextMenu(handle: QSystemTrayIconH): QMenuH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_contextMenu'; procedure QSystemTrayIcon_icon(handle: QSystemTrayIconH; retval: QIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_icon'; procedure QSystemTrayIcon_setIcon(handle: QSystemTrayIconH; icon: QIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setIcon'; procedure QSystemTrayIcon_toolTip(handle: QSystemTrayIconH; retval: PWideString); cdecl; external Qt4PasLib name 'QSystemTrayIcon_toolTip'; procedure QSystemTrayIcon_setToolTip(handle: QSystemTrayIconH; tip: PWideString); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setToolTip'; function QSystemTrayIcon_isSystemTrayAvailable(): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_isSystemTrayAvailable'; function QSystemTrayIcon_supportsMessages(): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_supportsMessages'; procedure QSystemTrayIcon_showMessage(handle: QSystemTrayIconH; title: PWideString; msg: PWideString; icon: QSystemTrayIconMessageIcon = QSystemTrayIconInformation; msecs: Integer = 10000); cdecl; external Qt4PasLib name 'QSystemTrayIcon_showMessage'; procedure QSystemTrayIcon_geometry(handle: QSystemTrayIconH; retval: PRect); cdecl; external Qt4PasLib name 'QSystemTrayIcon_geometry'; function QSystemTrayIcon_isVisible(handle: QSystemTrayIconH): Boolean; cdecl; external Qt4PasLib name 'QSystemTrayIcon_isVisible'; procedure QSystemTrayIcon_setVisible(handle: QSystemTrayIconH; visible: Boolean); cdecl; external Qt4PasLib name 'QSystemTrayIcon_setVisible'; procedure QSystemTrayIcon_show(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_show'; procedure QSystemTrayIcon_hide(handle: QSystemTrayIconH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hide'; type QSystemTrayIcon_activated_Event = procedure (reason: QSystemTrayIconActivationReason) of object cdecl; QSystemTrayIcon_messageClicked_Event = procedure () of object cdecl; type QDesktopServicesStandardLocation = ( // QDesktopServices::StandardLocation (1) QDesktopServicesDesktopLocation, QDesktopServicesDocumentsLocation, QDesktopServicesFontsLocation, QDesktopServicesApplicationsLocation, QDesktopServicesMusicLocation, QDesktopServicesMoviesLocation, QDesktopServicesPicturesLocation, QDesktopServicesTempLocation, QDesktopServicesHomeLocation, QDesktopServicesDataLocation, QDesktopServicesCacheLocation ); function QDesktopServices_openUrl(url: QUrlH): Boolean; cdecl; external Qt4PasLib name 'QDesktopServices_openUrl'; procedure QDesktopServices_setUrlHandler(scheme: PWideString; receiver: QObjectH; method: PAnsiChar); cdecl; external Qt4PasLib name 'QDesktopServices_setUrlHandler'; procedure QDesktopServices_unsetUrlHandler(scheme: PWideString); cdecl; external Qt4PasLib name 'QDesktopServices_unsetUrlHandler'; procedure QDesktopServices_storageLocation(retval: PWideString; _type: QDesktopServicesStandardLocation); cdecl; external Qt4PasLib name 'QDesktopServices_storageLocation'; procedure QDesktopServices_displayName(retval: PWideString; _type: QDesktopServicesStandardLocation); cdecl; external Qt4PasLib name 'QDesktopServices_displayName'; type QStyleStateFlag = cardinal; // QStyle::StateFlag QStyleState = QStyleStateFlag; //QFlags<> (3) const QStyleState_None = $00000000; QStyleState_Enabled = $00000001; QStyleState_Raised = $00000002; QStyleState_Sunken = $00000004; QStyleState_Off = $00000008; QStyleState_NoChange = $00000010; QStyleState_On = $00000020; QStyleState_DownArrow = $00000040; QStyleState_Horizontal = $00000080; QStyleState_HasFocus = $00000100; QStyleState_Top = $00000200; QStyleState_Bottom = $00000400; QStyleState_FocusAtBorder = $00000800; QStyleState_AutoRaise = $00001000; QStyleState_MouseOver = $00002000; QStyleState_UpArrow = $00004000; QStyleState_Selected = $00008000; QStyleState_Active = $00010000; QStyleState_Window = $00020000; QStyleState_Open = $00040000; QStyleState_Children = $00080000; QStyleState_Item = $00100000; QStyleState_Sibling = $00200000; QStyleState_Editing = $00400000; QStyleState_KeyboardFocusChange = $00800000; QStyleState_ReadOnly = $02000000; QStyleState_Small = $04000000; QStyleState_Mini = $08000000; type QStyleControlElement = ( //QStyle::ControlElement (2) QStyleCE_PushButton, QStyleCE_PushButtonBevel, QStyleCE_PushButtonLabel, QStyleCE_CheckBox, QStyleCE_CheckBoxLabel, QStyleCE_RadioButton, QStyleCE_RadioButtonLabel, QStyleCE_TabBarTab, QStyleCE_TabBarTabShape, QStyleCE_TabBarTabLabel, QStyleCE_ProgressBar, QStyleCE_ProgressBarGroove, QStyleCE_ProgressBarContents, QStyleCE_ProgressBarLabel, QStyleCE_MenuItem, QStyleCE_MenuScroller, QStyleCE_MenuVMargin, QStyleCE_MenuHMargin, QStyleCE_MenuTearoff, QStyleCE_MenuEmptyArea, QStyleCE_MenuBarItem, QStyleCE_MenuBarEmptyArea, QStyleCE_ToolButtonLabel, QStyleCE_Header, QStyleCE_HeaderSection, QStyleCE_HeaderLabel, QStyleCE_Q3DockWindowEmptyArea, QStyleCE_ToolBoxTab, QStyleCE_SizeGrip, QStyleCE_Splitter, QStyleCE_RubberBand, QStyleCE_DockWidgetTitle, QStyleCE_ScrollBarAddLine, QStyleCE_ScrollBarSubLine, QStyleCE_ScrollBarAddPage, QStyleCE_ScrollBarSubPage, QStyleCE_ScrollBarSlider, QStyleCE_ScrollBarFirst, QStyleCE_ScrollBarLast, QStyleCE_FocusFrame, QStyleCE_ComboBoxLabel, QStyleCE_ToolBar, QStyleCE_ToolBoxTabShape, QStyleCE_ToolBoxTabLabel, QStyleCE_HeaderEmptyArea, QStyleCE_ColumnViewGrip, QStyleCE_ItemViewItem, QStyleCE_ShapedFrame, QStyleCE_CustomBase = $f0000000 ); QStyleComplexControl = ( //QStyle::ComplexControl (2) QStyleCC_SpinBox, QStyleCC_ComboBox, QStyleCC_ScrollBar, QStyleCC_Slider, QStyleCC_ToolButton, QStyleCC_TitleBar, QStyleCC_Q3ListView, QStyleCC_Dial, QStyleCC_GroupBox, QStyleCC_MdiControls, QStyleCC_CustomBase = $f0000000 ); type QStyleSubControl = cardinal; // QStyle::SubControl QStyleSubControls = QStyleSubControl; //QFlags<> (3) const QStyleSC_None = $00000000; QStyleSC_ScrollBarAddLine = $00000001; QStyleSC_ScrollBarSubLine = $00000002; QStyleSC_ScrollBarAddPage = $00000004; QStyleSC_ScrollBarSubPage = $00000008; QStyleSC_ScrollBarFirst = $00000010; QStyleSC_ScrollBarLast = $00000020; QStyleSC_ScrollBarSlider = $00000040; QStyleSC_ScrollBarGroove = $00000080; QStyleSC_SpinBoxUp = $00000001; QStyleSC_SpinBoxDown = $00000002; QStyleSC_SpinBoxFrame = $00000004; QStyleSC_SpinBoxEditField = $00000008; QStyleSC_ComboBoxFrame = $00000001; QStyleSC_ComboBoxEditField = $00000002; QStyleSC_ComboBoxArrow = $00000004; QStyleSC_ComboBoxListBoxPopup = $00000008; QStyleSC_SliderGroove = $00000001; QStyleSC_SliderHandle = $00000002; QStyleSC_SliderTickmarks = $00000004; QStyleSC_ToolButton = $00000001; QStyleSC_ToolButtonMenu = $00000002; QStyleSC_TitleBarSysMenu = $00000001; QStyleSC_TitleBarMinButton = $00000002; QStyleSC_TitleBarMaxButton = $00000004; QStyleSC_TitleBarCloseButton = $00000008; QStyleSC_TitleBarNormalButton = $00000010; QStyleSC_TitleBarShadeButton = $00000020; QStyleSC_TitleBarUnshadeButton = $00000040; QStyleSC_TitleBarContextHelpButton = $00000080; QStyleSC_TitleBarLabel = $00000100; QStyleSC_Q3ListView = $00000001; QStyleSC_Q3ListViewBranch = $00000002; QStyleSC_Q3ListViewExpand = $00000004; QStyleSC_DialGroove = $00000001; QStyleSC_DialHandle = $00000002; QStyleSC_DialTickmarks = $00000004; QStyleSC_GroupBoxCheckBox = $00000001; QStyleSC_GroupBoxLabel = $00000002; QStyleSC_GroupBoxContents = $00000004; QStyleSC_GroupBoxFrame = $00000008; QStyleSC_MdiMinButton = $00000001; QStyleSC_MdiNormalButton = $00000002; QStyleSC_MdiCloseButton = $00000004; QStyleSC_All = $ffffffff; type QStyleContentsType = ( //QStyle::ContentsType (2) QStyleCT_PushButton, QStyleCT_CheckBox, QStyleCT_RadioButton, QStyleCT_ToolButton, QStyleCT_ComboBox, QStyleCT_Splitter, QStyleCT_Q3DockWindow, QStyleCT_ProgressBar, QStyleCT_MenuItem, QStyleCT_MenuBarItem, QStyleCT_MenuBar, QStyleCT_Menu, QStyleCT_TabBarTab, QStyleCT_Slider, QStyleCT_ScrollBar, QStyleCT_Q3Header, QStyleCT_LineEdit, QStyleCT_SpinBox, QStyleCT_SizeGrip, QStyleCT_TabWidget, QStyleCT_DialogButtons, QStyleCT_HeaderSection, QStyleCT_GroupBox, QStyleCT_MdiControls, QStyleCT_ItemViewItem, QStyleCT_CustomBase = $f0000000 ); QStyleStandardPixmap = ( //QStyle::StandardPixmap (2) QStyleSP_TitleBarMenuButton, QStyleSP_TitleBarMinButton, QStyleSP_TitleBarMaxButton, QStyleSP_TitleBarCloseButton, QStyleSP_TitleBarNormalButton, QStyleSP_TitleBarShadeButton, QStyleSP_TitleBarUnshadeButton, QStyleSP_TitleBarContextHelpButton, QStyleSP_DockWidgetCloseButton, QStyleSP_MessageBoxInformation, QStyleSP_MessageBoxWarning, QStyleSP_MessageBoxCritical, QStyleSP_MessageBoxQuestion, QStyleSP_DesktopIcon, QStyleSP_TrashIcon, QStyleSP_ComputerIcon, QStyleSP_DriveFDIcon, QStyleSP_DriveHDIcon, QStyleSP_DriveCDIcon, QStyleSP_DriveDVDIcon, QStyleSP_DriveNetIcon, QStyleSP_DirOpenIcon, QStyleSP_DirClosedIcon, QStyleSP_DirLinkIcon, QStyleSP_FileIcon, QStyleSP_FileLinkIcon, QStyleSP_ToolBarHorizontalExtensionButton, QStyleSP_ToolBarVerticalExtensionButton, QStyleSP_FileDialogStart, QStyleSP_FileDialogEnd, QStyleSP_FileDialogToParent, QStyleSP_FileDialogNewFolder, QStyleSP_FileDialogDetailedView, QStyleSP_FileDialogInfoView, QStyleSP_FileDialogContentsView, QStyleSP_FileDialogListView, QStyleSP_FileDialogBack, QStyleSP_DirIcon, QStyleSP_DialogOkButton, QStyleSP_DialogCancelButton, QStyleSP_DialogHelpButton, QStyleSP_DialogOpenButton, QStyleSP_DialogSaveButton, QStyleSP_DialogCloseButton, QStyleSP_DialogApplyButton, QStyleSP_DialogResetButton, QStyleSP_DialogDiscardButton, QStyleSP_DialogYesButton, QStyleSP_DialogNoButton, QStyleSP_ArrowUp, QStyleSP_ArrowDown, QStyleSP_ArrowLeft, QStyleSP_ArrowRight, QStyleSP_ArrowBack, QStyleSP_ArrowForward, QStyleSP_DirHomeIcon, QStyleSP_CommandLink, QStyleSP_VistaShield, QStyleSP_BrowserReload, QStyleSP_BrowserStop, QStyleSP_MediaPlay, QStyleSP_MediaStop, QStyleSP_MediaPause, QStyleSP_MediaSkipForward, QStyleSP_MediaSkipBackward, QStyleSP_MediaSeekForward, QStyleSP_MediaSeekBackward, QStyleSP_MediaVolume, QStyleSP_MediaVolumeMuted, QStyleSP_CustomBase = $f0000000 ); type QStylePrimitiveElement = cardinal; // QStyle::PrimitiveElement (4) const QStylePE_Q3CheckListController = 0 { $0 }; QStylePE_Q3CheckListExclusiveIndicator = 1 { $1 }; QStylePE_Q3CheckListIndicator = 2 { $2 }; QStylePE_Q3DockWindowSeparator = 3 { $3 }; QStylePE_Q3Separator = 4 { $4 }; QStylePE_Frame = 5 { $5 }; QStylePE_FrameDefaultButton = 6 { $6 }; QStylePE_FrameDockWidget = 7 { $7 }; QStylePE_FrameFocusRect = 8 { $8 }; QStylePE_FrameGroupBox = 9 { $9 }; QStylePE_FrameLineEdit = 10 { $a }; QStylePE_FrameMenu = 11 { $b }; QStylePE_FrameStatusBar = 12 { $c }; QStylePE_FrameStatusBarItem = 12 { $c }; QStylePE_FrameTabWidget = 13 { $d }; QStylePE_FrameWindow = 14 { $e }; QStylePE_FrameButtonBevel = 15 { $f }; QStylePE_FrameButtonTool = 16 { $10 }; QStylePE_FrameTabBarBase = 17 { $11 }; QStylePE_PanelButtonCommand = 18 { $12 }; QStylePE_PanelButtonBevel = 19 { $13 }; QStylePE_PanelButtonTool = 20 { $14 }; QStylePE_PanelMenuBar = 21 { $15 }; QStylePE_PanelToolBar = 22 { $16 }; QStylePE_PanelLineEdit = 23 { $17 }; QStylePE_IndicatorArrowDown = 24 { $18 }; QStylePE_IndicatorArrowLeft = 25 { $19 }; QStylePE_IndicatorArrowRight = 26 { $1a }; QStylePE_IndicatorArrowUp = 27 { $1b }; QStylePE_IndicatorBranch = 28 { $1c }; QStylePE_IndicatorButtonDropDown = 29 { $1d }; QStylePE_IndicatorViewItemCheck = 30 { $1e }; QStylePE_IndicatorItemViewItemCheck = 30 { $1e }; QStylePE_IndicatorCheckBox = 31 { $1f }; QStylePE_IndicatorDockWidgetResizeHandle = 32 { $20 }; QStylePE_IndicatorHeaderArrow = 33 { $21 }; QStylePE_IndicatorMenuCheckMark = 34 { $22 }; QStylePE_IndicatorProgressChunk = 35 { $23 }; QStylePE_IndicatorRadioButton = 36 { $24 }; QStylePE_IndicatorSpinDown = 37 { $25 }; QStylePE_IndicatorSpinMinus = 38 { $26 }; QStylePE_IndicatorSpinPlus = 39 { $27 }; QStylePE_IndicatorSpinUp = 40 { $28 }; QStylePE_IndicatorToolBarHandle = 41 { $29 }; QStylePE_IndicatorToolBarSeparator = 42 { $2a }; QStylePE_PanelTipLabel = 43 { $2b }; QStylePE_IndicatorTabTear = 44 { $2c }; QStylePE_PanelScrollAreaCorner = 45 { $2d }; QStylePE_Widget = 46 { $2e }; QStylePE_IndicatorColumnViewArrow = 47 { $2f }; QStylePE_IndicatorItemViewItemDrop = 48 { $30 }; QStylePE_PanelItemViewItem = 49 { $31 }; QStylePE_PanelItemViewRow = 50 { $32 }; QStylePE_PanelStatusBar = 51 { $33 }; QStylePE_IndicatorTabClose = 52 { $34 }; QStylePE_PanelMenu = 53 { $35 }; QStylePE_CustomBase = 251658240 { $f000000 }; type QStyleSubElement = cardinal; // QStyle::SubElement (4) const QStyleSE_PushButtonContents = 0 { $0 }; QStyleSE_PushButtonFocusRect = 1 { $1 }; QStyleSE_CheckBoxIndicator = 2 { $2 }; QStyleSE_CheckBoxContents = 3 { $3 }; QStyleSE_CheckBoxFocusRect = 4 { $4 }; QStyleSE_CheckBoxClickRect = 5 { $5 }; QStyleSE_RadioButtonIndicator = 6 { $6 }; QStyleSE_RadioButtonContents = 7 { $7 }; QStyleSE_RadioButtonFocusRect = 8 { $8 }; QStyleSE_RadioButtonClickRect = 9 { $9 }; QStyleSE_ComboBoxFocusRect = 10 { $a }; QStyleSE_SliderFocusRect = 11 { $b }; QStyleSE_Q3DockWindowHandleRect = 12 { $c }; QStyleSE_ProgressBarGroove = 13 { $d }; QStyleSE_ProgressBarContents = 14 { $e }; QStyleSE_ProgressBarLabel = 15 { $f }; QStyleSE_DialogButtonAccept = 16 { $10 }; QStyleSE_DialogButtonReject = 17 { $11 }; QStyleSE_DialogButtonApply = 18 { $12 }; QStyleSE_DialogButtonHelp = 19 { $13 }; QStyleSE_DialogButtonAll = 20 { $14 }; QStyleSE_DialogButtonAbort = 21 { $15 }; QStyleSE_DialogButtonIgnore = 22 { $16 }; QStyleSE_DialogButtonRetry = 23 { $17 }; QStyleSE_DialogButtonCustom = 24 { $18 }; QStyleSE_ToolBoxTabContents = 25 { $19 }; QStyleSE_HeaderLabel = 26 { $1a }; QStyleSE_HeaderArrow = 27 { $1b }; QStyleSE_TabWidgetTabBar = 28 { $1c }; QStyleSE_TabWidgetTabPane = 29 { $1d }; QStyleSE_TabWidgetTabContents = 30 { $1e }; QStyleSE_TabWidgetLeftCorner = 31 { $1f }; QStyleSE_TabWidgetRightCorner = 32 { $20 }; QStyleSE_ViewItemCheckIndicator = 33 { $21 }; QStyleSE_ItemViewItemCheckIndicator = 33 { $21 }; QStyleSE_TabBarTearIndicator = 34 { $22 }; QStyleSE_TreeViewDisclosureItem = 35 { $23 }; QStyleSE_LineEditContents = 36 { $24 }; QStyleSE_FrameContents = 37 { $25 }; QStyleSE_DockWidgetCloseButton = 38 { $26 }; QStyleSE_DockWidgetFloatButton = 39 { $27 }; QStyleSE_DockWidgetTitleBarText = 40 { $28 }; QStyleSE_DockWidgetIcon = 41 { $29 }; QStyleSE_CheckBoxLayoutItem = 42 { $2a }; QStyleSE_ComboBoxLayoutItem = 43 { $2b }; QStyleSE_DateTimeEditLayoutItem = 44 { $2c }; QStyleSE_DialogButtonBoxLayoutItem = 45 { $2d }; QStyleSE_LabelLayoutItem = 46 { $2e }; QStyleSE_ProgressBarLayoutItem = 47 { $2f }; QStyleSE_PushButtonLayoutItem = 48 { $30 }; QStyleSE_RadioButtonLayoutItem = 49 { $31 }; QStyleSE_SliderLayoutItem = 50 { $32 }; QStyleSE_SpinBoxLayoutItem = 51 { $33 }; QStyleSE_ToolButtonLayoutItem = 52 { $34 }; QStyleSE_FrameLayoutItem = 53 { $35 }; QStyleSE_GroupBoxLayoutItem = 54 { $36 }; QStyleSE_TabWidgetLayoutItem = 55 { $37 }; QStyleSE_ItemViewItemDecoration = 56 { $38 }; QStyleSE_ItemViewItemText = 57 { $39 }; QStyleSE_ItemViewItemFocusRect = 58 { $3a }; QStyleSE_TabBarTabLeftButton = 59 { $3b }; QStyleSE_TabBarTabRightButton = 60 { $3c }; QStyleSE_TabBarTabText = 61 { $3d }; QStyleSE_ShapedFrameContents = 62 { $3e }; QStyleSE_CustomBase = 4026531840 { $f0000000 }; type QStylePixelMetric = cardinal; // QStyle::PixelMetric (4) const QStylePM_ButtonMargin = 0 { $0 }; QStylePM_ButtonDefaultIndicator = 1 { $1 }; QStylePM_MenuButtonIndicator = 2 { $2 }; QStylePM_ButtonShiftHorizontal = 3 { $3 }; QStylePM_ButtonShiftVertical = 4 { $4 }; QStylePM_DefaultFrameWidth = 5 { $5 }; QStylePM_SpinBoxFrameWidth = 6 { $6 }; QStylePM_ComboBoxFrameWidth = 7 { $7 }; QStylePM_MaximumDragDistance = 8 { $8 }; QStylePM_ScrollBarExtent = 9 { $9 }; QStylePM_ScrollBarSliderMin = 10 { $a }; QStylePM_SliderThickness = 11 { $b }; QStylePM_SliderControlThickness = 12 { $c }; QStylePM_SliderLength = 13 { $d }; QStylePM_SliderTickmarkOffset = 14 { $e }; QStylePM_SliderSpaceAvailable = 15 { $f }; QStylePM_DockWidgetSeparatorExtent = 16 { $10 }; QStylePM_DockWidgetHandleExtent = 17 { $11 }; QStylePM_DockWidgetFrameWidth = 18 { $12 }; QStylePM_TabBarTabOverlap = 19 { $13 }; QStylePM_TabBarTabHSpace = 20 { $14 }; QStylePM_TabBarTabVSpace = 21 { $15 }; QStylePM_TabBarBaseHeight = 22 { $16 }; QStylePM_TabBarBaseOverlap = 23 { $17 }; QStylePM_ProgressBarChunkWidth = 24 { $18 }; QStylePM_SplitterWidth = 25 { $19 }; QStylePM_TitleBarHeight = 26 { $1a }; QStylePM_MenuScrollerHeight = 27 { $1b }; QStylePM_MenuHMargin = 28 { $1c }; QStylePM_MenuVMargin = 29 { $1d }; QStylePM_MenuPanelWidth = 30 { $1e }; QStylePM_MenuTearoffHeight = 31 { $1f }; QStylePM_MenuDesktopFrameWidth = 32 { $20 }; QStylePM_MenuBarPanelWidth = 33 { $21 }; QStylePM_MenuBarItemSpacing = 34 { $22 }; QStylePM_MenuBarVMargin = 35 { $23 }; QStylePM_MenuBarHMargin = 36 { $24 }; QStylePM_IndicatorWidth = 37 { $25 }; QStylePM_IndicatorHeight = 38 { $26 }; QStylePM_ExclusiveIndicatorWidth = 39 { $27 }; QStylePM_ExclusiveIndicatorHeight = 40 { $28 }; QStylePM_CheckListButtonSize = 41 { $29 }; QStylePM_CheckListControllerSize = 42 { $2a }; QStylePM_DialogButtonsSeparator = 43 { $2b }; QStylePM_DialogButtonsButtonWidth = 44 { $2c }; QStylePM_DialogButtonsButtonHeight = 45 { $2d }; QStylePM_MdiSubWindowFrameWidth = 46 { $2e }; QStylePM_MDIFrameWidth = 46 { $2e }; QStylePM_MdiSubWindowMinimizedWidth = 47 { $2f }; QStylePM_MDIMinimizedWidth = 47 { $2f }; QStylePM_HeaderMargin = 48 { $30 }; QStylePM_HeaderMarkSize = 49 { $31 }; QStylePM_HeaderGripMargin = 50 { $32 }; QStylePM_TabBarTabShiftHorizontal = 51 { $33 }; QStylePM_TabBarTabShiftVertical = 52 { $34 }; QStylePM_TabBarScrollButtonWidth = 53 { $35 }; QStylePM_ToolBarFrameWidth = 54 { $36 }; QStylePM_ToolBarHandleExtent = 55 { $37 }; QStylePM_ToolBarItemSpacing = 56 { $38 }; QStylePM_ToolBarItemMargin = 57 { $39 }; QStylePM_ToolBarSeparatorExtent = 58 { $3a }; QStylePM_ToolBarExtensionExtent = 59 { $3b }; QStylePM_SpinBoxSliderHeight = 60 { $3c }; QStylePM_DefaultTopLevelMargin = 61 { $3d }; QStylePM_DefaultChildMargin = 62 { $3e }; QStylePM_DefaultLayoutSpacing = 63 { $3f }; QStylePM_ToolBarIconSize = 64 { $40 }; QStylePM_ListViewIconSize = 65 { $41 }; QStylePM_IconViewIconSize = 66 { $42 }; QStylePM_SmallIconSize = 67 { $43 }; QStylePM_LargeIconSize = 68 { $44 }; QStylePM_FocusFrameVMargin = 69 { $45 }; QStylePM_FocusFrameHMargin = 70 { $46 }; QStylePM_ToolTipLabelFrameWidth = 71 { $47 }; QStylePM_CheckBoxLabelSpacing = 72 { $48 }; QStylePM_TabBarIconSize = 73 { $49 }; QStylePM_SizeGripSize = 74 { $4a }; QStylePM_DockWidgetTitleMargin = 75 { $4b }; QStylePM_MessageBoxIconSize = 76 { $4c }; QStylePM_ButtonIconSize = 77 { $4d }; QStylePM_DockWidgetTitleBarButtonMargin = 78 { $4e }; QStylePM_RadioButtonLabelSpacing = 79 { $4f }; QStylePM_LayoutLeftMargin = 80 { $50 }; QStylePM_LayoutTopMargin = 81 { $51 }; QStylePM_LayoutRightMargin = 82 { $52 }; QStylePM_LayoutBottomMargin = 83 { $53 }; QStylePM_LayoutHorizontalSpacing = 84 { $54 }; QStylePM_LayoutVerticalSpacing = 85 { $55 }; QStylePM_TabBar_ScrollButtonOverlap = 86 { $56 }; QStylePM_TextCursorWidth = 87 { $57 }; QStylePM_TabCloseIndicatorWidth = 88 { $58 }; QStylePM_TabCloseIndicatorHeight = 89 { $59 }; QStylePM_ScrollView_ScrollBarSpacing = 90 { $5a }; QStylePM_SubMenuOverlap = 91 { $5b }; QStylePM_CustomBase = 4026531840 { $f0000000 }; type QStyleStyleHint = cardinal; // QStyle::StyleHint (4) const QStyleSH_EtchDisabledText = 0 { $0 }; QStyleSH_DitherDisabledText = 1 { $1 }; QStyleSH_ScrollBar_MiddleClickAbsolutePosition = 2 { $2 }; QStyleSH_ScrollBar_ScrollWhenPointerLeavesControl = 3 { $3 }; QStyleSH_TabBar_SelectMouseType = 4 { $4 }; QStyleSH_TabBar_Alignment = 5 { $5 }; QStyleSH_Header_ArrowAlignment = 6 { $6 }; QStyleSH_Slider_SnapToValue = 7 { $7 }; QStyleSH_Slider_SloppyKeyEvents = 8 { $8 }; QStyleSH_ProgressDialog_CenterCancelButton = 9 { $9 }; QStyleSH_ProgressDialog_TextLabelAlignment = 10 { $a }; QStyleSH_PrintDialog_RightAlignButtons = 11 { $b }; QStyleSH_MainWindow_SpaceBelowMenuBar = 12 { $c }; QStyleSH_FontDialog_SelectAssociatedText = 13 { $d }; QStyleSH_Menu_AllowActiveAndDisabled = 14 { $e }; QStyleSH_Menu_SpaceActivatesItem = 15 { $f }; QStyleSH_Menu_SubMenuPopupDelay = 16 { $10 }; QStyleSH_ScrollView_FrameOnlyAroundContents = 17 { $11 }; QStyleSH_MenuBar_AltKeyNavigation = 18 { $12 }; QStyleSH_ComboBox_ListMouseTracking = 19 { $13 }; QStyleSH_Menu_MouseTracking = 20 { $14 }; QStyleSH_MenuBar_MouseTracking = 21 { $15 }; QStyleSH_ItemView_ChangeHighlightOnFocus = 22 { $16 }; QStyleSH_Widget_ShareActivation = 23 { $17 }; QStyleSH_Workspace_FillSpaceOnMaximize = 24 { $18 }; QStyleSH_ComboBox_Popup = 25 { $19 }; QStyleSH_TitleBar_NoBorder = 26 { $1a }; QStyleSH_Slider_StopMouseOverSlider = 27 { $1b }; QStyleSH_ScrollBar_StopMouseOverSlider = 27 { $1b }; QStyleSH_BlinkCursorWhenTextSelected = 28 { $1c }; QStyleSH_RichText_FullWidthSelection = 29 { $1d }; QStyleSH_Menu_Scrollable = 30 { $1e }; QStyleSH_GroupBox_TextLabelVerticalAlignment = 31 { $1f }; QStyleSH_GroupBox_TextLabelColor = 32 { $20 }; QStyleSH_Menu_SloppySubMenus = 33 { $21 }; QStyleSH_Table_GridLineColor = 34 { $22 }; QStyleSH_LineEdit_PasswordCharacter = 35 { $23 }; QStyleSH_DialogButtons_DefaultButton = 36 { $24 }; QStyleSH_ToolBox_SelectedPageTitleBold = 37 { $25 }; QStyleSH_TabBar_PreferNoArrows = 38 { $26 }; QStyleSH_ScrollBar_LeftClickAbsolutePosition = 39 { $27 }; QStyleSH_Q3ListViewExpand_SelectMouseType = 40 { $28 }; QStyleSH_UnderlineShortcut = 41 { $29 }; QStyleSH_SpinBox_AnimateButton = 42 { $2a }; QStyleSH_SpinBox_KeyPressAutoRepeatRate = 43 { $2b }; QStyleSH_SpinBox_ClickAutoRepeatRate = 44 { $2c }; QStyleSH_Menu_FillScreenWithScroll = 45 { $2d }; QStyleSH_ToolTipLabel_Opacity = 46 { $2e }; QStyleSH_DrawMenuBarSeparator = 47 { $2f }; QStyleSH_TitleBar_ModifyNotification = 48 { $30 }; QStyleSH_Button_FocusPolicy = 49 { $31 }; QStyleSH_MenuBar_DismissOnSecondClick = 50 { $32 }; QStyleSH_MessageBox_UseBorderForButtonSpacing = 51 { $33 }; QStyleSH_TitleBar_AutoRaise = 52 { $34 }; QStyleSH_ToolButton_PopupDelay = 53 { $35 }; QStyleSH_FocusFrame_Mask = 54 { $36 }; QStyleSH_RubberBand_Mask = 55 { $37 }; QStyleSH_WindowFrame_Mask = 56 { $38 }; QStyleSH_SpinControls_DisableOnBounds = 57 { $39 }; QStyleSH_Dial_BackgroundRole = 58 { $3a }; QStyleSH_ComboBox_LayoutDirection = 59 { $3b }; QStyleSH_ItemView_EllipsisLocation = 60 { $3c }; QStyleSH_ItemView_ShowDecorationSelected = 61 { $3d }; QStyleSH_ItemView_ActivateItemOnSingleClick = 62 { $3e }; QStyleSH_ScrollBar_ContextMenu = 63 { $3f }; QStyleSH_ScrollBar_RollBetweenButtons = 64 { $40 }; QStyleSH_Slider_AbsoluteSetButtons = 65 { $41 }; QStyleSH_Slider_PageSetButtons = 66 { $42 }; QStyleSH_Menu_KeyboardSearch = 67 { $43 }; QStyleSH_TabBar_ElideMode = 68 { $44 }; QStyleSH_DialogButtonLayout = 69 { $45 }; QStyleSH_ComboBox_PopupFrameStyle = 70 { $46 }; QStyleSH_MessageBox_TextInteractionFlags = 71 { $47 }; QStyleSH_DialogButtonBox_ButtonsHaveIcons = 72 { $48 }; QStyleSH_SpellCheckUnderlineStyle = 73 { $49 }; QStyleSH_MessageBox_CenterButtons = 74 { $4a }; QStyleSH_Menu_SelectionWrap = 75 { $4b }; QStyleSH_ItemView_MovementWithoutUpdatingSelection = 76 { $4c }; QStyleSH_ToolTip_Mask = 77 { $4d }; QStyleSH_FocusFrame_AboveWidget = 78 { $4e }; QStyleSH_TextControl_FocusIndicatorTextCharFormat = 79 { $4f }; QStyleSH_WizardStyle = 80 { $50 }; QStyleSH_ItemView_ArrowKeysNavigateIntoChildren = 81 { $51 }; QStyleSH_Menu_Mask = 82 { $52 }; QStyleSH_Menu_FlashTriggeredItem = 83 { $53 }; QStyleSH_Menu_FadeOutOnHide = 84 { $54 }; QStyleSH_SpinBox_ClickAutoRepeatThreshold = 85 { $55 }; QStyleSH_ItemView_PaintAlternatingRowColorsForEmptyArea = 86 { $56 }; QStyleSH_FormLayoutWrapPolicy = 87 { $57 }; QStyleSH_TabWidget_DefaultTabPosition = 88 { $58 }; QStyleSH_ToolBar_Movable = 89 { $59 }; QStyleSH_FormLayoutFieldGrowthPolicy = 90 { $5a }; QStyleSH_FormLayoutFormAlignment = 91 { $5b }; QStyleSH_FormLayoutLabelAlignment = 92 { $5c }; QStyleSH_ItemView_DrawDelegateFrame = 93 { $5d }; QStyleSH_TabBar_CloseButtonPosition = 94 { $5e }; QStyleSH_DockWidget_ButtonsHaveFrame = 95 { $5f }; QStyleSH_CustomBase = 4026531840 { $f0000000 }; procedure QStyle_polish(handle: QStyleH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QStyle_polish'; procedure QStyle_unpolish(handle: QStyleH; AnonParam1: QWidgetH); cdecl; external Qt4PasLib name 'QStyle_unpolish'; procedure QStyle_polish(handle: QStyleH; AnonParam1: QApplicationH); cdecl; external Qt4PasLib name 'QStyle_polish2'; procedure QStyle_unpolish(handle: QStyleH; AnonParam1: QApplicationH); cdecl; external Qt4PasLib name 'QStyle_unpolish2'; procedure QStyle_polish(handle: QStyleH; AnonParam1: QPaletteH); cdecl; external Qt4PasLib name 'QStyle_polish3'; procedure QStyle_itemTextRect(handle: QStyleH; retval: PRect; fm: QFontMetricsH; r: PRect; flags: Integer; enabled: Boolean; text: PWideString); cdecl; external Qt4PasLib name 'QStyle_itemTextRect'; procedure QStyle_itemPixmapRect(handle: QStyleH; retval: PRect; r: PRect; flags: Integer; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QStyle_itemPixmapRect'; procedure QStyle_drawItemText(handle: QStyleH; painter: QPainterH; rect: PRect; flags: Integer; pal: QPaletteH; enabled: Boolean; text: PWideString; textRole: QPaletteColorRole = QPaletteNoRole); cdecl; external Qt4PasLib name 'QStyle_drawItemText'; procedure QStyle_drawItemPixmap(handle: QStyleH; painter: QPainterH; rect: PRect; alignment: Integer; pixmap: QPixmapH); cdecl; external Qt4PasLib name 'QStyle_drawItemPixmap'; procedure QStyle_standardPalette(handle: QStyleH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QStyle_standardPalette'; procedure QStyle_drawPrimitive(handle: QStyleH; pe: QStylePrimitiveElement; opt: QStyleOptionH; p: QPainterH; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawPrimitive'; procedure QStyle_drawControl(handle: QStyleH; element: QStyleControlElement; opt: QStyleOptionH; p: QPainterH; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawControl'; procedure QStyle_subElementRect(handle: QStyleH; retval: PRect; subElement: QStyleSubElement; option: QStyleOptionH; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_subElementRect'; procedure QStyle_drawComplexControl(handle: QStyleH; cc: QStyleComplexControl; opt: QStyleOptionComplexH; p: QPainterH; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_drawComplexControl'; function QStyle_hitTestComplexControl(handle: QStyleH; cc: QStyleComplexControl; opt: QStyleOptionComplexH; pt: PQtPoint; widget: QWidgetH = nil): QStyleSubControl; cdecl; external Qt4PasLib name 'QStyle_hitTestComplexControl'; procedure QStyle_subControlRect(handle: QStyleH; retval: PRect; cc: QStyleComplexControl; opt: QStyleOptionComplexH; sc: QStyleSubControl; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_subControlRect'; function QStyle_pixelMetric(handle: QStyleH; metric: QStylePixelMetric; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_pixelMetric'; procedure QStyle_sizeFromContents(handle: QStyleH; retval: PSize; ct: QStyleContentsType; opt: QStyleOptionH; contentsSize: PSize; w: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_sizeFromContents'; function QStyle_styleHint(handle: QStyleH; stylehint: QStyleStyleHint; opt: QStyleOptionH = nil; widget: QWidgetH = nil; returnData: QStyleHintReturnH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_styleHint'; procedure QStyle_standardPixmap(handle: QStyleH; retval: QPixmapH; standardPixmap: QStyleStandardPixmap; opt: QStyleOptionH = nil; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_standardPixmap'; procedure QStyle_standardIcon(handle: QStyleH; retval: QIconH; standardIcon: QStyleStandardPixmap; option: QStyleOptionH = nil; widget: QWidgetH = nil); cdecl; external Qt4PasLib name 'QStyle_standardIcon'; procedure QStyle_generatedIconPixmap(handle: QStyleH; retval: QPixmapH; iconMode: QIconMode; pixmap: QPixmapH; opt: QStyleOptionH); cdecl; external Qt4PasLib name 'QStyle_generatedIconPixmap'; procedure QStyle_visualRect(retval: PRect; direction: QtLayoutDirection; boundingRect: PRect; logicalRect: PRect); cdecl; external Qt4PasLib name 'QStyle_visualRect'; procedure QStyle_visualPos(retval: PQtPoint; direction: QtLayoutDirection; boundingRect: PRect; logicalPos: PQtPoint); cdecl; external Qt4PasLib name 'QStyle_visualPos'; function QStyle_sliderPositionFromValue(min: Integer; max: Integer; val: Integer; space: Integer; upsideDown: Boolean = False): Integer; cdecl; external Qt4PasLib name 'QStyle_sliderPositionFromValue'; function QStyle_sliderValueFromPosition(min: Integer; max: Integer; pos: Integer; space: Integer; upsideDown: Boolean = False): Integer; cdecl; external Qt4PasLib name 'QStyle_sliderValueFromPosition'; function QStyle_visualAlignment(direction: QtLayoutDirection; alignment: QtAlignment): QtAlignment; cdecl; external Qt4PasLib name 'QStyle_visualAlignment'; procedure QStyle_alignedRect(retval: PRect; direction: QtLayoutDirection; alignment: QtAlignment; size: PSize; rectangle: PRect); cdecl; external Qt4PasLib name 'QStyle_alignedRect'; function QStyle_layoutSpacing(handle: QStyleH; control1: QSizePolicyControlType; control2: QSizePolicyControlType; orientation: QtOrientation; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_layoutSpacing'; function QStyle_combinedLayoutSpacing(handle: QStyleH; controls1: QSizePolicyControlTypes; controls2: QSizePolicyControlTypes; orientation: QtOrientation; option: QStyleOptionH = nil; widget: QWidgetH = nil): Integer; cdecl; external Qt4PasLib name 'QStyle_combinedLayoutSpacing'; type QStyleOptionOptionType = ( //QStyleOption::OptionType (2) QStyleOptionSO_Default, QStyleOptionSO_FocusRect, QStyleOptionSO_Button, QStyleOptionSO_Tab, QStyleOptionSO_MenuItem, QStyleOptionSO_Frame, QStyleOptionSO_ProgressBar, QStyleOptionSO_ToolBox, QStyleOptionSO_Header, QStyleOptionSO_Q3DockWindow, QStyleOptionSO_DockWidget, QStyleOptionSO_Q3ListViewItem, QStyleOptionSO_ViewItem, QStyleOptionSO_TabWidgetFrame, QStyleOptionSO_TabBarBase, QStyleOptionSO_RubberBand, QStyleOptionSO_ToolBar, QStyleOptionSO_GraphicsItem, QStyleOptionSO_CustomBase = $f00, QStyleOptionSO_Complex = $f0000, QStyleOptionSO_Slider, QStyleOptionSO_SpinBox, QStyleOptionSO_ToolButton, QStyleOptionSO_ComboBox, QStyleOptionSO_Q3ListView, QStyleOptionSO_TitleBar, QStyleOptionSO_GroupBox, QStyleOptionSO_SizeGrip, QStyleOptionSO_ComplexCustomBase = $f000000 ); QStyleOptionStyleOptionVersion = ( //QStyleOption::StyleOptionVersion (2) QStyleOptionVersion = 1 ); type QStyleOptionFocusRectStyleOptionVersion = ( //QStyleOptionFocusRect::StyleOptionVersion (2) QStyleOptionFocusRectVersion = 1 ); type QStyleOptionFrameStyleOptionVersion = ( //QStyleOptionFrame::StyleOptionVersion (2) QStyleOptionFrameVersion = 1 ); type QStyleOptionFrameV2StyleOptionVersion = ( //QStyleOptionFrameV2::StyleOptionVersion (2) QStyleOptionFrameV2Version = 2 ); type QStyleOptionFrameV2FrameFeature = cardinal; // QStyleOptionFrameV2::FrameFeature QStyleOptionFrameV2FrameFeatures = QStyleOptionFrameV2FrameFeature; //QFlags<> (3) const QStyleOptionFrameV2None = $00; QStyleOptionFrameV2Flat = $01; type QStyleOptionFrameV3StyleOptionVersion = ( //QStyleOptionFrameV3::StyleOptionVersion (2) QStyleOptionFrameV3Version = 3 ); type QStyleOptionTabWidgetFrameStyleOptionVersion = ( //QStyleOptionTabWidgetFrame::StyleOptionVersion (2) QStyleOptionTabWidgetFrameVersion = 1 ); type QStyleOptionTabBarBaseStyleOptionVersion = ( //QStyleOptionTabBarBase::StyleOptionVersion (2) QStyleOptionTabBarBaseVersion = 1 ); type QStyleOptionTabBarBaseV2StyleOptionVersion = ( //QStyleOptionTabBarBaseV2::StyleOptionVersion (2) QStyleOptionTabBarBaseV2Version = 2 ); type QStyleOptionHeaderSectionPosition = ( // QStyleOptionHeader::SectionPosition (1) QStyleOptionHeaderBeginning, QStyleOptionHeaderMiddle, QStyleOptionHeaderEnd, QStyleOptionHeaderOnlyOneSection ); QStyleOptionHeaderSelectedPosition = ( // QStyleOptionHeader::SelectedPosition (1) QStyleOptionHeaderNotAdjacent, QStyleOptionHeaderNextIsSelected, QStyleOptionHeaderPreviousIsSelected, QStyleOptionHeaderNextAndPreviousAreSelected ); QStyleOptionHeaderSortIndicator = ( // QStyleOptionHeader::SortIndicator (1) QStyleOptionHeaderNone, QStyleOptionHeaderSortUp, QStyleOptionHeaderSortDown ); QStyleOptionHeaderStyleOptionVersion = ( //QStyleOptionHeader::StyleOptionVersion (2) QStyleOptionHeaderVersion = 1 ); type QStyleOptionButtonStyleOptionVersion = ( //QStyleOptionButton::StyleOptionVersion (2) QStyleOptionButtonVersion = 1 ); type QStyleOptionButtonButtonFeature = cardinal; // QStyleOptionButton::ButtonFeature QStyleOptionButtonButtonFeatures = QStyleOptionButtonButtonFeature; //QFlags<> (3) const QStyleOptionButtonNone = $00; QStyleOptionButtonFlat = $01; QStyleOptionButtonHasMenu = $02; QStyleOptionButtonDefaultButton = $04; QStyleOptionButtonAutoDefaultButton = $08; QStyleOptionButtonCommandLinkButton = $10; type QStyleOptionTabTabPosition = ( // QStyleOptionTab::TabPosition (1) QStyleOptionTabBeginning, QStyleOptionTabMiddle, QStyleOptionTabEnd, QStyleOptionTabOnlyOneTab ); QStyleOptionTabSelectedPosition = ( // QStyleOptionTab::SelectedPosition (1) QStyleOptionTabNotAdjacent, QStyleOptionTabNextIsSelected, QStyleOptionTabPreviousIsSelected ); QStyleOptionTabStyleOptionVersion = ( //QStyleOptionTab::StyleOptionVersion (2) QStyleOptionTabVersion = 1 ); type QStyleOptionTabCornerWidget = cardinal; // QStyleOptionTab::CornerWidget QStyleOptionTabCornerWidgets = QStyleOptionTabCornerWidget; //QFlags<> (3) const QStyleOptionTabNoCornerWidgets = $00; QStyleOptionTabLeftCornerWidget = $01; QStyleOptionTabRightCornerWidget = $02; type QStyleOptionTabV2StyleOptionVersion = ( //QStyleOptionTabV2::StyleOptionVersion (2) QStyleOptionTabV2Version = 2 ); type QStyleOptionTabV3StyleOptionVersion = ( //QStyleOptionTabV3::StyleOptionVersion (2) QStyleOptionTabV3Version = 3 ); type QStyleOptionToolBarToolBarPosition = ( // QStyleOptionToolBar::ToolBarPosition (1) QStyleOptionToolBarBeginning, QStyleOptionToolBarMiddle, QStyleOptionToolBarEnd, QStyleOptionToolBarOnlyOne ); QStyleOptionToolBarStyleOptionVersion = ( //QStyleOptionToolBar::StyleOptionVersion (2) QStyleOptionToolBarVersion = 1 ); type QStyleOptionToolBarToolBarFeature = cardinal; // QStyleOptionToolBar::ToolBarFeature QStyleOptionToolBarToolBarFeatures = QStyleOptionToolBarToolBarFeature; //QFlags<> (3) const QStyleOptionToolBarNone = $0; QStyleOptionToolBarMovable = $1; type QStyleOptionProgressBarStyleOptionVersion = ( //QStyleOptionProgressBar::StyleOptionVersion (2) QStyleOptionProgressBarVersion = 1 ); type QStyleOptionProgressBarV2StyleOptionVersion = ( //QStyleOptionProgressBarV2::StyleOptionVersion (2) QStyleOptionProgressBarV2Version = 2 ); type QStyleOptionMenuItemMenuItemType = ( // QStyleOptionMenuItem::MenuItemType (1) QStyleOptionMenuItemNormal, QStyleOptionMenuItemDefaultItem, QStyleOptionMenuItemSeparator, QStyleOptionMenuItemSubMenu, QStyleOptionMenuItemScroller, QStyleOptionMenuItemTearOff, QStyleOptionMenuItemMargin, QStyleOptionMenuItemEmptyArea ); QStyleOptionMenuItemCheckType = ( // QStyleOptionMenuItem::CheckType (1) QStyleOptionMenuItemNotCheckable, QStyleOptionMenuItemExclusive, QStyleOptionMenuItemNonExclusive ); QStyleOptionMenuItemStyleOptionVersion = ( //QStyleOptionMenuItem::StyleOptionVersion (2) QStyleOptionMenuItemVersion = 1 ); type QStyleOptionQ3ListViewItemStyleOptionVersion = ( //QStyleOptionQ3ListViewItem::StyleOptionVersion (2) QStyleOptionQ3ListViewItemVersion = 1 ); type QStyleOptionQ3ListViewItemQ3ListViewItemFeature = cardinal; // QStyleOptionQ3ListViewItem::Q3ListViewItemFeature QStyleOptionQ3ListViewItemQ3ListViewItemFeatures = QStyleOptionQ3ListViewItemQ3ListViewItemFeature; //QFlags<> (3) const QStyleOptionQ3ListViewItemNone = $00; QStyleOptionQ3ListViewItemExpandable = $01; QStyleOptionQ3ListViewItemMultiLine = $02; QStyleOptionQ3ListViewItemVisible = $04; QStyleOptionQ3ListViewItemParentControl = $08; type QStyleOptionQ3DockWindowStyleOptionVersion = ( //QStyleOptionQ3DockWindow::StyleOptionVersion (2) QStyleOptionQ3DockWindowVersion = 1 ); type QStyleOptionDockWidgetStyleOptionVersion = ( //QStyleOptionDockWidget::StyleOptionVersion (2) QStyleOptionDockWidgetVersion = 1 ); type QStyleOptionViewItemPosition = ( // QStyleOptionViewItem::Position (1) QStyleOptionViewItemLeft, QStyleOptionViewItemRight, QStyleOptionViewItemTop, QStyleOptionViewItemBottom ); QStyleOptionViewItemStyleOptionVersion = ( //QStyleOptionViewItem::StyleOptionVersion (2) QStyleOptionViewItemVersion = 1 ); type QStyleOptionViewItemV4ViewItemPosition = ( // QStyleOptionViewItemV4::ViewItemPosition (1) QStyleOptionViewItemV4Invalid, QStyleOptionViewItemV4Beginning, QStyleOptionViewItemV4Middle, QStyleOptionViewItemV4End, QStyleOptionViewItemV4OnlyOne ); QStyleOptionViewItemV4StyleOptionVersion = ( //QStyleOptionViewItemV4::StyleOptionVersion (2) QStyleOptionViewItemV4Version = 4 ); type QStyleOptionToolBoxStyleOptionVersion = ( //QStyleOptionToolBox::StyleOptionVersion (2) QStyleOptionToolBoxVersion = 1 ); type QStyleOptionToolBoxV2TabPosition = ( // QStyleOptionToolBoxV2::TabPosition (1) QStyleOptionToolBoxV2Beginning, QStyleOptionToolBoxV2Middle, QStyleOptionToolBoxV2End, QStyleOptionToolBoxV2OnlyOneTab ); QStyleOptionToolBoxV2SelectedPosition = ( // QStyleOptionToolBoxV2::SelectedPosition (1) QStyleOptionToolBoxV2NotAdjacent, QStyleOptionToolBoxV2NextIsSelected, QStyleOptionToolBoxV2PreviousIsSelected ); QStyleOptionToolBoxV2StyleOptionVersion = ( //QStyleOptionToolBoxV2::StyleOptionVersion (2) QStyleOptionToolBoxV2Version = 2 ); type QStyleOptionRubberBandStyleOptionVersion = ( //QStyleOptionRubberBand::StyleOptionVersion (2) QStyleOptionRubberBandVersion = 1 ); type QStyleOptionComplexStyleOptionVersion = ( //QStyleOptionComplex::StyleOptionVersion (2) QStyleOptionComplexVersion = 1 ); type QStyleOptionSliderStyleOptionVersion = ( //QStyleOptionSlider::StyleOptionVersion (2) QStyleOptionSliderVersion = 1 ); type QStyleOptionSpinBoxStyleOptionVersion = ( //QStyleOptionSpinBox::StyleOptionVersion (2) QStyleOptionSpinBoxVersion = 1 ); type QStyleOptionQ3ListViewStyleOptionVersion = ( //QStyleOptionQ3ListView::StyleOptionVersion (2) QStyleOptionQ3ListViewVersion = 1 ); type QStyleOptionToolButtonStyleOptionVersion = ( //QStyleOptionToolButton::StyleOptionVersion (2) QStyleOptionToolButtonVersion = 1 ); type QStyleOptionComboBoxStyleOptionVersion = ( //QStyleOptionComboBox::StyleOptionVersion (2) QStyleOptionComboBoxVersion = 1 ); type QStyleOptionTitleBarStyleOptionVersion = ( //QStyleOptionTitleBar::StyleOptionVersion (2) QStyleOptionTitleBarVersion = 1 ); type QStyleOptionGroupBoxStyleOptionVersion = ( //QStyleOptionGroupBox::StyleOptionVersion (2) QStyleOptionGroupBoxVersion = 1 ); type QStyleOptionSizeGripStyleOptionVersion = ( //QStyleOptionSizeGrip::StyleOptionVersion (2) QStyleOptionSizeGripVersion = 1 ); type QStyleOptionGraphicsItemStyleOptionVersion = ( //QStyleOptionGraphicsItem::StyleOptionVersion (2) QStyleOptionGraphicsItemVersion = 1 ); type QStyleHintReturnHintReturnType = ( //QStyleHintReturn::HintReturnType (2) QStyleHintReturnSH_Default = $f000, QStyleHintReturnSH_Mask, QStyleHintReturnSH_Variant ); QStyleHintReturnStyleOptionVersion = ( //QStyleHintReturn::StyleOptionVersion (2) QStyleHintReturnVersion = 1 ); type QStyleHintReturnMaskStyleOptionVersion = ( //QStyleHintReturnMask::StyleOptionVersion (2) QStyleHintReturnMaskVersion = 1 ); type QStyleHintReturnVariantStyleOptionVersion = ( //QStyleHintReturnVariant::StyleOptionVersion (2) QStyleHintReturnVariantVersion = 1 ); type QStyleOptionStyleOptionType = cardinal; // QStyleOption::StyleOptionType (4) const QStyleOptionType = 0 { $0 }; type QStyleOptionFocusRectStyleOptionType = cardinal; // QStyleOptionFocusRect::StyleOptionType (4) const QStyleOptionFocusRectType = 1 { $1 }; type QStyleOptionFrameStyleOptionType = cardinal; // QStyleOptionFrame::StyleOptionType (4) const QStyleOptionFrameType = 5 { $5 }; type QStyleOptionTabWidgetFrameStyleOptionType = cardinal; // QStyleOptionTabWidgetFrame::StyleOptionType (4) const QStyleOptionTabWidgetFrameType = 13 { $d }; type QStyleOptionTabBarBaseStyleOptionType = cardinal; // QStyleOptionTabBarBase::StyleOptionType (4) const QStyleOptionTabBarBaseType = 14 { $e }; type QStyleOptionHeaderStyleOptionType = cardinal; // QStyleOptionHeader::StyleOptionType (4) const QStyleOptionHeaderType = 8 { $8 }; type QStyleOptionButtonStyleOptionType = cardinal; // QStyleOptionButton::StyleOptionType (4) const QStyleOptionButtonType = 2 { $2 }; type QStyleOptionTabStyleOptionType = cardinal; // QStyleOptionTab::StyleOptionType (4) const QStyleOptionTabType = 3 { $3 }; type QStyleOptionToolBarStyleOptionType = cardinal; // QStyleOptionToolBar::StyleOptionType (4) const QStyleOptionToolBarType = 16 { $10 }; type QStyleOptionProgressBarStyleOptionType = cardinal; // QStyleOptionProgressBar::StyleOptionType (4) const QStyleOptionProgressBarType = 6 { $6 }; type QStyleOptionProgressBarV2StyleOptionType = cardinal; // QStyleOptionProgressBarV2::StyleOptionType (4) const QStyleOptionProgressBarV2Type = 6 { $6 }; type QStyleOptionMenuItemStyleOptionType = cardinal; // QStyleOptionMenuItem::StyleOptionType (4) const QStyleOptionMenuItemType = 4 { $4 }; type QStyleOptionQ3ListViewItemStyleOptionType = cardinal; // QStyleOptionQ3ListViewItem::StyleOptionType (4) const QStyleOptionQ3ListViewItemType = 11 { $b }; type QStyleOptionQ3DockWindowStyleOptionType = cardinal; // QStyleOptionQ3DockWindow::StyleOptionType (4) const QStyleOptionQ3DockWindowType = 9 { $9 }; type QStyleOptionDockWidgetStyleOptionType = cardinal; // QStyleOptionDockWidget::StyleOptionType (4) const QStyleOptionDockWidgetType = 10 { $a }; type QStyleOptionViewItemStyleOptionType = cardinal; // QStyleOptionViewItem::StyleOptionType (4) const QStyleOptionViewItemType = 12 { $c }; type QStyleOptionToolBoxStyleOptionType = cardinal; // QStyleOptionToolBox::StyleOptionType (4) const QStyleOptionToolBoxType = 7 { $7 }; type QStyleOptionRubberBandStyleOptionType = cardinal; // QStyleOptionRubberBand::StyleOptionType (4) const QStyleOptionRubberBandType = 15 { $f }; type QStyleOptionComplexStyleOptionType = cardinal; // QStyleOptionComplex::StyleOptionType (4) const QStyleOptionComplexType = 983040 { $f0000 }; type QStyleOptionSliderStyleOptionType = cardinal; // QStyleOptionSlider::StyleOptionType (4) const QStyleOptionSliderType = 983041 { $f0001 }; type QStyleOptionSpinBoxStyleOptionType = cardinal; // QStyleOptionSpinBox::StyleOptionType (4) const QStyleOptionSpinBoxType = 983042 { $f0002 }; type QStyleOptionQ3ListViewStyleOptionType = cardinal; // QStyleOptionQ3ListView::StyleOptionType (4) const QStyleOptionQ3ListViewType = 983045 { $f0005 }; type QStyleOptionToolButtonStyleOptionType = cardinal; // QStyleOptionToolButton::StyleOptionType (4) const QStyleOptionToolButtonType = 983043 { $f0003 }; type QStyleOptionToolButtonToolButtonFeature = cardinal; // QStyleOptionToolButton::ToolButtonFeature (4) QStyleOptionToolButtonToolButtonFeatures = QStyleOptionToolButtonToolButtonFeature; // QFlags<> const QStyleOptionToolButtonNone = 0 { $0 }; QStyleOptionToolButtonArrow = 1 { $1 }; QStyleOptionToolButtonMenu = 4 { $4 }; QStyleOptionToolButtonMenuButtonPopup = 4 { $4 }; QStyleOptionToolButtonPopupDelay = 8 { $8 }; QStyleOptionToolButtonHasMenu = 16 { $10 }; type QStyleOptionComboBoxStyleOptionType = cardinal; // QStyleOptionComboBox::StyleOptionType (4) const QStyleOptionComboBoxType = 983044 { $f0004 }; type QStyleOptionTitleBarStyleOptionType = cardinal; // QStyleOptionTitleBar::StyleOptionType (4) const QStyleOptionTitleBarType = 983046 { $f0006 }; type QStyleOptionGroupBoxStyleOptionType = cardinal; // QStyleOptionGroupBox::StyleOptionType (4) const QStyleOptionGroupBoxType = 983047 { $f0007 }; type QStyleOptionSizeGripStyleOptionType = cardinal; // QStyleOptionSizeGrip::StyleOptionType (4) const QStyleOptionSizeGripType = 983048 { $f0008 }; type QStyleOptionGraphicsItemStyleOptionType = cardinal; // QStyleOptionGraphicsItem::StyleOptionType (4) const QStyleOptionGraphicsItemType = 17 { $11 }; type QStyleHintReturnStyleOptionType = cardinal; // QStyleHintReturn::StyleOptionType (4) const QStyleHintReturnType = 61440 { $f000 }; type QStyleHintReturnMaskStyleOptionType = cardinal; // QStyleHintReturnMask::StyleOptionType (4) const QStyleHintReturnMaskType = 61441 { $f001 }; type QStyleHintReturnVariantStyleOptionType = cardinal; // QStyleHintReturnVariant::StyleOptionType (4) const QStyleHintReturnVariantType = 61442 { $f002 }; function QStyleOption_version(handle : QStyleOptionH) : Integer; cdecl; external Qt4PasLib name 'QStyleOption_version'; procedure QStyleOption_setVersion(handle : QStyleOptionH; version : Integer); cdecl; external Qt4PasLib name 'QStyleOption_setVersion'; function QStyleOption__type(handle : QStyleOptionH) : Integer; cdecl; external Qt4PasLib name 'QStyleOption__type'; procedure QStyleOption_setType(handle : QStyleOptionH; _type : Integer); cdecl; external Qt4PasLib name 'QStyleOption_setType'; function QStyleOption_state(handle : QStyleOptionH) : QStyleState; cdecl; external Qt4PasLib name 'QStyleOption_state'; procedure QStyleOption_setState(handle : QStyleOptionH; state : QStyleState); cdecl; external Qt4PasLib name 'QStyleOption_setState'; function QStyleOption_direction(handle : QStyleOptionH) : QtLayoutDirection; cdecl; external Qt4PasLib name 'QStyleOption_direction'; procedure QStyleOption_setDirection(handle : QStyleOptionH; direction : QtLayoutDirection); cdecl; external Qt4PasLib name 'QStyleOption_setDirection'; procedure QStyleOption_rect(handle : QStyleOptionH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOption_rect'; procedure QStyleOption_setRect(handle : QStyleOptionH; rect : PRect); cdecl; external Qt4PasLib name 'QStyleOption_setRect'; procedure QStyleOption_fontMetrics(handle : QStyleOptionH; retval : QFontMetricsH ); cdecl; external Qt4PasLib name 'QStyleOption_fontMetrics'; procedure QStyleOption_setFontMetrics(handle : QStyleOptionH; fontMetrics : QFontMetricsH); cdecl; external Qt4PasLib name 'QStyleOption_setFontMetrics'; procedure QStyleOption_palette(handle : QStyleOptionH; retval : QPaletteH ); cdecl; external Qt4PasLib name 'QStyleOption_palette'; procedure QStyleOption_setPalette(handle : QStyleOptionH; palette : QPaletteH); cdecl; external Qt4PasLib name 'QStyleOption_setPalette'; function QStyleOption_create(version: QStyleOptionStyleOptionVersion = QStyleOptionVersion; _type: QStyleOptionOptionType = QStyleOptionSO_Default): QStyleOptionH; cdecl; external Qt4PasLib name 'QStyleOption_create'; procedure QStyleOption_destroy(handle: QStyleOptionH); cdecl; external Qt4PasLib name 'QStyleOption_destroy'; function QStyleOption_create(other: QStyleOptionH): QStyleOptionH; cdecl; external Qt4PasLib name 'QStyleOption_create2'; procedure QStyleOption_init(handle: QStyleOptionH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStyleOption_init'; procedure QStyleOption_initFrom(handle: QStyleOptionH; w: QWidgetH); cdecl; external Qt4PasLib name 'QStyleOption_initFrom'; procedure QStyleOptionFocusRect_backgroundColor(handle : QStyleOptionFocusRectH; retval : PQColor ); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_backgroundColor'; procedure QStyleOptionFocusRect_setBackgroundColor(handle : QStyleOptionFocusRectH; backgroundColor : PQColor); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_setBackgroundColor'; function QStyleOptionFocusRect_create(): QStyleOptionFocusRectH; cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_create'; procedure QStyleOptionFocusRect_destroy(handle: QStyleOptionFocusRectH); cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_destroy'; function QStyleOptionFocusRect_create(other: QStyleOptionFocusRectH): QStyleOptionFocusRectH; cdecl; external Qt4PasLib name 'QStyleOptionFocusRect_create2'; function QStyleOptionFrame_lineWidth(handle : QStyleOptionFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionFrame_lineWidth'; procedure QStyleOptionFrame_setLineWidth(handle : QStyleOptionFrameH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionFrame_setLineWidth'; function QStyleOptionFrame_midLineWidth(handle : QStyleOptionFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionFrame_midLineWidth'; procedure QStyleOptionFrame_setMidLineWidth(handle : QStyleOptionFrameH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionFrame_setMidLineWidth'; function QStyleOptionFrame_create(): QStyleOptionFrameH; cdecl; external Qt4PasLib name 'QStyleOptionFrame_create'; procedure QStyleOptionFrame_destroy(handle: QStyleOptionFrameH); cdecl; external Qt4PasLib name 'QStyleOptionFrame_destroy'; function QStyleOptionFrame_create(other: QStyleOptionFrameH): QStyleOptionFrameH; cdecl; external Qt4PasLib name 'QStyleOptionFrame_create2'; function QStyleOptionFrameV2_features(handle : QStyleOptionFrameV2H) : QStyleOptionFrameV2FrameFeatures; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_features'; procedure QStyleOptionFrameV2_setFeatures(handle : QStyleOptionFrameV2H; features : QStyleOptionFrameV2FrameFeatures); cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_setFeatures'; function QStyleOptionFrameV2_create(): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create'; procedure QStyleOptionFrameV2_destroy(handle: QStyleOptionFrameV2H); cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_destroy'; function QStyleOptionFrameV2_create(other: QStyleOptionFrameV2H): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create2'; function QStyleOptionFrameV2_create(other: QStyleOptionFrameH): QStyleOptionFrameV2H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV2_create3'; function QStyleOptionFrameV3_frameShape(handle : QStyleOptionFrameV3H) : QFrameShape; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_frameShape'; procedure QStyleOptionFrameV3_setFrameShape(handle : QStyleOptionFrameV3H; frameShape : QFrameShape); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_setFrameShape'; function QStyleOptionFrameV3_unused(handle : QStyleOptionFrameV3H) : LongWord; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_unused'; procedure QStyleOptionFrameV3_setUnused(handle : QStyleOptionFrameV3H; unused : LongWord); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_setUnused'; function QStyleOptionFrameV3_create(): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create'; procedure QStyleOptionFrameV3_destroy(handle: QStyleOptionFrameV3H); cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_destroy'; function QStyleOptionFrameV3_create(other: QStyleOptionFrameV3H): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create2'; function QStyleOptionFrameV3_create(other: QStyleOptionFrameH): QStyleOptionFrameV3H; cdecl; external Qt4PasLib name 'QStyleOptionFrameV3_create3'; function QStyleOptionTabWidgetFrame_lineWidth(handle : QStyleOptionTabWidgetFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_lineWidth'; procedure QStyleOptionTabWidgetFrame_setLineWidth(handle : QStyleOptionTabWidgetFrameH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setLineWidth'; function QStyleOptionTabWidgetFrame_midLineWidth(handle : QStyleOptionTabWidgetFrameH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_midLineWidth'; procedure QStyleOptionTabWidgetFrame_setMidLineWidth(handle : QStyleOptionTabWidgetFrameH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setMidLineWidth'; function QStyleOptionTabWidgetFrame_shape(handle : QStyleOptionTabWidgetFrameH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_shape'; procedure QStyleOptionTabWidgetFrame_setShape(handle : QStyleOptionTabWidgetFrameH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setShape'; procedure QStyleOptionTabWidgetFrame_tabBarSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_tabBarSize'; procedure QStyleOptionTabWidgetFrame_setTabBarSize(handle : QStyleOptionTabWidgetFrameH; tabBarSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setTabBarSize'; procedure QStyleOptionTabWidgetFrame_rightCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_rightCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_setRightCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; rightCornerWidgetSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setRightCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_leftCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_leftCornerWidgetSize'; procedure QStyleOptionTabWidgetFrame_setLeftCornerWidgetSize(handle : QStyleOptionTabWidgetFrameH; leftCornerWidgetSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_setLeftCornerWidgetSize'; function QStyleOptionTabWidgetFrame_create(): QStyleOptionTabWidgetFrameH; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_create'; procedure QStyleOptionTabWidgetFrame_destroy(handle: QStyleOptionTabWidgetFrameH); cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_destroy'; function QStyleOptionTabWidgetFrame_create(other: QStyleOptionTabWidgetFrameH): QStyleOptionTabWidgetFrameH; cdecl; external Qt4PasLib name 'QStyleOptionTabWidgetFrame_create2'; function QStyleOptionTabBarBase_shape(handle : QStyleOptionTabBarBaseH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_shape'; procedure QStyleOptionTabBarBase_setShape(handle : QStyleOptionTabBarBaseH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setShape'; procedure QStyleOptionTabBarBase_tabBarRect(handle : QStyleOptionTabBarBaseH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_tabBarRect'; procedure QStyleOptionTabBarBase_setTabBarRect(handle : QStyleOptionTabBarBaseH; tabBarRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setTabBarRect'; procedure QStyleOptionTabBarBase_selectedTabRect(handle : QStyleOptionTabBarBaseH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_selectedTabRect'; procedure QStyleOptionTabBarBase_setSelectedTabRect(handle : QStyleOptionTabBarBaseH; selectedTabRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_setSelectedTabRect'; function QStyleOptionTabBarBase_create(): QStyleOptionTabBarBaseH; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_create'; procedure QStyleOptionTabBarBase_destroy(handle: QStyleOptionTabBarBaseH); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_destroy'; function QStyleOptionTabBarBase_create(other: QStyleOptionTabBarBaseH): QStyleOptionTabBarBaseH; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBase_create2'; function QStyleOptionTabBarBaseV2_documentMode(handle : QStyleOptionTabBarBaseV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_documentMode'; procedure QStyleOptionTabBarBaseV2_setDocumentMode(handle : QStyleOptionTabBarBaseV2H; documentMode : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_setDocumentMode'; function QStyleOptionTabBarBaseV2_create(): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create'; procedure QStyleOptionTabBarBaseV2_destroy(handle: QStyleOptionTabBarBaseV2H); cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_destroy'; function QStyleOptionTabBarBaseV2_create(other: QStyleOptionTabBarBaseV2H): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create2'; function QStyleOptionTabBarBaseV2_create(other: QStyleOptionTabBarBaseH): QStyleOptionTabBarBaseV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabBarBaseV2_create3'; function QStyleOptionHeader_section(handle : QStyleOptionHeaderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionHeader_section'; procedure QStyleOptionHeader_setSection(handle : QStyleOptionHeaderH; section : Integer); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSection'; procedure QStyleOptionHeader_text(handle : QStyleOptionHeaderH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionHeader_text'; procedure QStyleOptionHeader_setText(handle : QStyleOptionHeaderH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setText'; function QStyleOptionHeader_textAlignment(handle : QStyleOptionHeaderH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionHeader_textAlignment'; procedure QStyleOptionHeader_setTextAlignment(handle : QStyleOptionHeaderH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setTextAlignment'; procedure QStyleOptionHeader_icon(handle : QStyleOptionHeaderH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionHeader_icon'; procedure QStyleOptionHeader_setIcon(handle : QStyleOptionHeaderH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setIcon'; function QStyleOptionHeader_iconAlignment(handle : QStyleOptionHeaderH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionHeader_iconAlignment'; procedure QStyleOptionHeader_setIconAlignment(handle : QStyleOptionHeaderH; iconAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setIconAlignment'; function QStyleOptionHeader_position(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSectionPosition; cdecl; external Qt4PasLib name 'QStyleOptionHeader_position'; procedure QStyleOptionHeader_setPosition(handle : QStyleOptionHeaderH; position : QStyleOptionHeaderSectionPosition); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setPosition'; function QStyleOptionHeader_selectedPosition(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionHeader_selectedPosition'; procedure QStyleOptionHeader_setSelectedPosition(handle : QStyleOptionHeaderH; selectedPosition : QStyleOptionHeaderSelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSelectedPosition'; function QStyleOptionHeader_sortIndicator(handle : QStyleOptionHeaderH) : QStyleOptionHeaderSortIndicator; cdecl; external Qt4PasLib name 'QStyleOptionHeader_sortIndicator'; procedure QStyleOptionHeader_setSortIndicator(handle : QStyleOptionHeaderH; sortIndicator : QStyleOptionHeaderSortIndicator); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setSortIndicator'; function QStyleOptionHeader_orientation(handle : QStyleOptionHeaderH) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionHeader_orientation'; procedure QStyleOptionHeader_setOrientation(handle : QStyleOptionHeaderH; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionHeader_setOrientation'; function QStyleOptionHeader_create(): QStyleOptionHeaderH; cdecl; external Qt4PasLib name 'QStyleOptionHeader_create'; procedure QStyleOptionHeader_destroy(handle: QStyleOptionHeaderH); cdecl; external Qt4PasLib name 'QStyleOptionHeader_destroy'; function QStyleOptionHeader_create(other: QStyleOptionHeaderH): QStyleOptionHeaderH; cdecl; external Qt4PasLib name 'QStyleOptionHeader_create2'; function QStyleOptionButton_features(handle : QStyleOptionButtonH) : QStyleOptionButtonButtonFeatures; cdecl; external Qt4PasLib name 'QStyleOptionButton_features'; procedure QStyleOptionButton_setFeatures(handle : QStyleOptionButtonH; features : QStyleOptionButtonButtonFeatures); cdecl; external Qt4PasLib name 'QStyleOptionButton_setFeatures'; procedure QStyleOptionButton_text(handle : QStyleOptionButtonH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionButton_text'; procedure QStyleOptionButton_setText(handle : QStyleOptionButtonH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionButton_setText'; procedure QStyleOptionButton_icon(handle : QStyleOptionButtonH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionButton_icon'; procedure QStyleOptionButton_setIcon(handle : QStyleOptionButtonH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionButton_setIcon'; procedure QStyleOptionButton_iconSize(handle : QStyleOptionButtonH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionButton_iconSize'; procedure QStyleOptionButton_setIconSize(handle : QStyleOptionButtonH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionButton_setIconSize'; function QStyleOptionButton_create(): QStyleOptionButtonH; cdecl; external Qt4PasLib name 'QStyleOptionButton_create'; procedure QStyleOptionButton_destroy(handle: QStyleOptionButtonH); cdecl; external Qt4PasLib name 'QStyleOptionButton_destroy'; function QStyleOptionButton_create(other: QStyleOptionButtonH): QStyleOptionButtonH; cdecl; external Qt4PasLib name 'QStyleOptionButton_create2'; function QStyleOptionTab_shape(handle : QStyleOptionTabH) : QTabBarShape; cdecl; external Qt4PasLib name 'QStyleOptionTab_shape'; procedure QStyleOptionTab_setShape(handle : QStyleOptionTabH; shape : QTabBarShape); cdecl; external Qt4PasLib name 'QStyleOptionTab_setShape'; procedure QStyleOptionTab_text(handle : QStyleOptionTabH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionTab_text'; procedure QStyleOptionTab_setText(handle : QStyleOptionTabH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionTab_setText'; procedure QStyleOptionTab_icon(handle : QStyleOptionTabH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionTab_icon'; procedure QStyleOptionTab_setIcon(handle : QStyleOptionTabH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionTab_setIcon'; function QStyleOptionTab_row(handle : QStyleOptionTabH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTab_row'; procedure QStyleOptionTab_setRow(handle : QStyleOptionTabH; row : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTab_setRow'; function QStyleOptionTab_position(handle : QStyleOptionTabH) : QStyleOptionTabTabPosition; cdecl; external Qt4PasLib name 'QStyleOptionTab_position'; procedure QStyleOptionTab_setPosition(handle : QStyleOptionTabH; position : QStyleOptionTabTabPosition); cdecl; external Qt4PasLib name 'QStyleOptionTab_setPosition'; function QStyleOptionTab_selectedPosition(handle : QStyleOptionTabH) : QStyleOptionTabSelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionTab_selectedPosition'; procedure QStyleOptionTab_setSelectedPosition(handle : QStyleOptionTabH; selectedPosition : QStyleOptionTabSelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionTab_setSelectedPosition'; function QStyleOptionTab_cornerWidgets(handle : QStyleOptionTabH) : QStyleOptionTabCornerWidgets; cdecl; external Qt4PasLib name 'QStyleOptionTab_cornerWidgets'; procedure QStyleOptionTab_setCornerWidgets(handle : QStyleOptionTabH; cornerWidgets : QStyleOptionTabCornerWidgets); cdecl; external Qt4PasLib name 'QStyleOptionTab_setCornerWidgets'; function QStyleOptionTab_create(): QStyleOptionTabH; cdecl; external Qt4PasLib name 'QStyleOptionTab_create'; procedure QStyleOptionTab_destroy(handle: QStyleOptionTabH); cdecl; external Qt4PasLib name 'QStyleOptionTab_destroy'; function QStyleOptionTab_create(other: QStyleOptionTabH): QStyleOptionTabH; cdecl; external Qt4PasLib name 'QStyleOptionTab_create2'; procedure QStyleOptionTabV2_iconSize(handle : QStyleOptionTabV2H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_iconSize'; procedure QStyleOptionTabV2_setIconSize(handle : QStyleOptionTabV2H; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_setIconSize'; function QStyleOptionTabV2_create(): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create'; procedure QStyleOptionTabV2_destroy(handle: QStyleOptionTabV2H); cdecl; external Qt4PasLib name 'QStyleOptionTabV2_destroy'; function QStyleOptionTabV2_create(other: QStyleOptionTabV2H): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create2'; function QStyleOptionTabV2_create(other: QStyleOptionTabH): QStyleOptionTabV2H; cdecl; external Qt4PasLib name 'QStyleOptionTabV2_create3'; function QStyleOptionTabV3_documentMode(handle : QStyleOptionTabV3H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_documentMode'; procedure QStyleOptionTabV3_setDocumentMode(handle : QStyleOptionTabV3H; documentMode : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setDocumentMode'; procedure QStyleOptionTabV3_leftButtonSize(handle : QStyleOptionTabV3H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_leftButtonSize'; procedure QStyleOptionTabV3_setLeftButtonSize(handle : QStyleOptionTabV3H; leftButtonSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setLeftButtonSize'; procedure QStyleOptionTabV3_rightButtonSize(handle : QStyleOptionTabV3H; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_rightButtonSize'; procedure QStyleOptionTabV3_setRightButtonSize(handle : QStyleOptionTabV3H; rightButtonSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_setRightButtonSize'; function QStyleOptionTabV3_create(): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create'; procedure QStyleOptionTabV3_destroy(handle: QStyleOptionTabV3H); cdecl; external Qt4PasLib name 'QStyleOptionTabV3_destroy'; function QStyleOptionTabV3_create(other: QStyleOptionTabV3H): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create2'; function QStyleOptionTabV3_create(other: QStyleOptionTabV2H): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create3'; function QStyleOptionTabV3_create(other: QStyleOptionTabH): QStyleOptionTabV3H; cdecl; external Qt4PasLib name 'QStyleOptionTabV3_create4'; function QStyleOptionToolBar_positionOfLine(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_positionOfLine'; procedure QStyleOptionToolBar_setPositionOfLine(handle : QStyleOptionToolBarH; positionOfLine : QStyleOptionToolBarToolBarPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setPositionOfLine'; function QStyleOptionToolBar_positionWithinLine(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_positionWithinLine'; procedure QStyleOptionToolBar_setPositionWithinLine(handle : QStyleOptionToolBarH; positionWithinLine : QStyleOptionToolBarToolBarPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setPositionWithinLine'; function QStyleOptionToolBar_toolBarArea(handle : QStyleOptionToolBarH) : QtToolBarArea; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_toolBarArea'; procedure QStyleOptionToolBar_setToolBarArea(handle : QStyleOptionToolBarH; toolBarArea : QtToolBarArea); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setToolBarArea'; function QStyleOptionToolBar_features(handle : QStyleOptionToolBarH) : QStyleOptionToolBarToolBarFeatures; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_features'; procedure QStyleOptionToolBar_setFeatures(handle : QStyleOptionToolBarH; features : QStyleOptionToolBarToolBarFeatures); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setFeatures'; function QStyleOptionToolBar_lineWidth(handle : QStyleOptionToolBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_lineWidth'; procedure QStyleOptionToolBar_setLineWidth(handle : QStyleOptionToolBarH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setLineWidth'; function QStyleOptionToolBar_midLineWidth(handle : QStyleOptionToolBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_midLineWidth'; procedure QStyleOptionToolBar_setMidLineWidth(handle : QStyleOptionToolBarH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_setMidLineWidth'; function QStyleOptionToolBar_create(): QStyleOptionToolBarH; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_create'; procedure QStyleOptionToolBar_destroy(handle: QStyleOptionToolBarH); cdecl; external Qt4PasLib name 'QStyleOptionToolBar_destroy'; function QStyleOptionToolBar_create(other: QStyleOptionToolBarH): QStyleOptionToolBarH; cdecl; external Qt4PasLib name 'QStyleOptionToolBar_create2'; function QStyleOptionProgressBar_minimum(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_minimum'; procedure QStyleOptionProgressBar_setMinimum(handle : QStyleOptionProgressBarH; minimum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setMinimum'; function QStyleOptionProgressBar_maximum(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_maximum'; procedure QStyleOptionProgressBar_setMaximum(handle : QStyleOptionProgressBarH; maximum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setMaximum'; function QStyleOptionProgressBar_progress(handle : QStyleOptionProgressBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_progress'; procedure QStyleOptionProgressBar_setProgress(handle : QStyleOptionProgressBarH; progress : Integer); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setProgress'; procedure QStyleOptionProgressBar_text(handle : QStyleOptionProgressBarH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_text'; procedure QStyleOptionProgressBar_setText(handle : QStyleOptionProgressBarH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setText'; function QStyleOptionProgressBar_textAlignment(handle : QStyleOptionProgressBarH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_textAlignment'; procedure QStyleOptionProgressBar_setTextAlignment(handle : QStyleOptionProgressBarH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setTextAlignment'; function QStyleOptionProgressBar_textVisible(handle : QStyleOptionProgressBarH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_textVisible'; procedure QStyleOptionProgressBar_setTextVisible(handle : QStyleOptionProgressBarH; textVisible : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_setTextVisible'; function QStyleOptionProgressBar_create(): QStyleOptionProgressBarH; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_create'; procedure QStyleOptionProgressBar_destroy(handle: QStyleOptionProgressBarH); cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_destroy'; function QStyleOptionProgressBar_create(other: QStyleOptionProgressBarH): QStyleOptionProgressBarH; cdecl; external Qt4PasLib name 'QStyleOptionProgressBar_create2'; function QStyleOptionProgressBarV2_orientation(handle : QStyleOptionProgressBarV2H) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_orientation'; procedure QStyleOptionProgressBarV2_setOrientation(handle : QStyleOptionProgressBarV2H; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setOrientation'; function QStyleOptionProgressBarV2_invertedAppearance(handle : QStyleOptionProgressBarV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_invertedAppearance'; procedure QStyleOptionProgressBarV2_setInvertedAppearance(handle : QStyleOptionProgressBarV2H; invertedAppearance : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setInvertedAppearance'; function QStyleOptionProgressBarV2_bottomToTop(handle : QStyleOptionProgressBarV2H) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_bottomToTop'; procedure QStyleOptionProgressBarV2_setBottomToTop(handle : QStyleOptionProgressBarV2H; bottomToTop : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_setBottomToTop'; function QStyleOptionProgressBarV2_create(): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create'; procedure QStyleOptionProgressBarV2_destroy(handle: QStyleOptionProgressBarV2H); cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_destroy'; function QStyleOptionProgressBarV2_create(other: QStyleOptionProgressBarH): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create2'; function QStyleOptionProgressBarV2_create(other: QStyleOptionProgressBarV2H): QStyleOptionProgressBarV2H; cdecl; external Qt4PasLib name 'QStyleOptionProgressBarV2_create3'; function QStyleOptionMenuItem_menuItemType(handle : QStyleOptionMenuItemH) : QStyleOptionMenuItemMenuItemType; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuItemType'; procedure QStyleOptionMenuItem_setMenuItemType(handle : QStyleOptionMenuItemH; menuItemType : QStyleOptionMenuItemMenuItemType); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuItemType'; function QStyleOptionMenuItem_checkType(handle : QStyleOptionMenuItemH) : QStyleOptionMenuItemCheckType; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_checkType'; procedure QStyleOptionMenuItem_setCheckType(handle : QStyleOptionMenuItemH; checkType : QStyleOptionMenuItemCheckType); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setCheckType'; function QStyleOptionMenuItem_checked(handle : QStyleOptionMenuItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_checked'; procedure QStyleOptionMenuItem_setChecked(handle : QStyleOptionMenuItemH; checked : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setChecked'; function QStyleOptionMenuItem_menuHasCheckableItems(handle : QStyleOptionMenuItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuHasCheckableItems'; procedure QStyleOptionMenuItem_setMenuHasCheckableItems(handle : QStyleOptionMenuItemH; menuHasCheckableItems : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuHasCheckableItems'; procedure QStyleOptionMenuItem_menuRect(handle : QStyleOptionMenuItemH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_menuRect'; procedure QStyleOptionMenuItem_setMenuRect(handle : QStyleOptionMenuItemH; menuRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMenuRect'; procedure QStyleOptionMenuItem_text(handle : QStyleOptionMenuItemH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_text'; procedure QStyleOptionMenuItem_setText(handle : QStyleOptionMenuItemH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setText'; procedure QStyleOptionMenuItem_icon(handle : QStyleOptionMenuItemH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_icon'; procedure QStyleOptionMenuItem_setIcon(handle : QStyleOptionMenuItemH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setIcon'; function QStyleOptionMenuItem_maxIconWidth(handle : QStyleOptionMenuItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_maxIconWidth'; procedure QStyleOptionMenuItem_setMaxIconWidth(handle : QStyleOptionMenuItemH; maxIconWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setMaxIconWidth'; function QStyleOptionMenuItem_tabWidth(handle : QStyleOptionMenuItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_tabWidth'; procedure QStyleOptionMenuItem_setTabWidth(handle : QStyleOptionMenuItemH; tabWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setTabWidth'; procedure QStyleOptionMenuItem_font(handle : QStyleOptionMenuItemH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_font'; procedure QStyleOptionMenuItem_setFont(handle : QStyleOptionMenuItemH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_setFont'; function QStyleOptionMenuItem_create(): QStyleOptionMenuItemH; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_create'; procedure QStyleOptionMenuItem_destroy(handle: QStyleOptionMenuItemH); cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_destroy'; function QStyleOptionMenuItem_create(other: QStyleOptionMenuItemH): QStyleOptionMenuItemH; cdecl; external Qt4PasLib name 'QStyleOptionMenuItem_create2'; function QStyleOptionQ3ListViewItem_features(handle : QStyleOptionQ3ListViewItemH) : QStyleOptionQ3ListViewItemQ3ListViewItemFeatures; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_features'; procedure QStyleOptionQ3ListViewItem_setFeatures(handle : QStyleOptionQ3ListViewItemH; features : QStyleOptionQ3ListViewItemQ3ListViewItemFeatures); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setFeatures'; function QStyleOptionQ3ListViewItem_height(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_height'; procedure QStyleOptionQ3ListViewItem_setHeight(handle : QStyleOptionQ3ListViewItemH; height : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setHeight'; function QStyleOptionQ3ListViewItem_totalHeight(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_totalHeight'; procedure QStyleOptionQ3ListViewItem_setTotalHeight(handle : QStyleOptionQ3ListViewItemH; totalHeight : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setTotalHeight'; function QStyleOptionQ3ListViewItem_itemY(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_itemY'; procedure QStyleOptionQ3ListViewItem_setItemY(handle : QStyleOptionQ3ListViewItemH; itemY : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setItemY'; function QStyleOptionQ3ListViewItem_childCount(handle : QStyleOptionQ3ListViewItemH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_childCount'; procedure QStyleOptionQ3ListViewItem_setChildCount(handle : QStyleOptionQ3ListViewItemH; childCount : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_setChildCount'; function QStyleOptionQ3ListViewItem_create(): QStyleOptionQ3ListViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_create'; procedure QStyleOptionQ3ListViewItem_destroy(handle: QStyleOptionQ3ListViewItemH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_destroy'; function QStyleOptionQ3ListViewItem_create(other: QStyleOptionQ3ListViewItemH): QStyleOptionQ3ListViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListViewItem_create2'; function QStyleOptionQ3DockWindow_docked(handle : QStyleOptionQ3DockWindowH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_docked'; procedure QStyleOptionQ3DockWindow_setDocked(handle : QStyleOptionQ3DockWindowH; docked : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_setDocked'; function QStyleOptionQ3DockWindow_closeEnabled(handle : QStyleOptionQ3DockWindowH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_closeEnabled'; procedure QStyleOptionQ3DockWindow_setCloseEnabled(handle : QStyleOptionQ3DockWindowH; closeEnabled : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_setCloseEnabled'; function QStyleOptionQ3DockWindow_create(): QStyleOptionQ3DockWindowH; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_create'; procedure QStyleOptionQ3DockWindow_destroy(handle: QStyleOptionQ3DockWindowH); cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_destroy'; function QStyleOptionQ3DockWindow_create(other: QStyleOptionQ3DockWindowH): QStyleOptionQ3DockWindowH; cdecl; external Qt4PasLib name 'QStyleOptionQ3DockWindow_create2'; procedure QStyleOptionDockWidget_title(handle : QStyleOptionDockWidgetH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_title'; procedure QStyleOptionDockWidget_setTitle(handle : QStyleOptionDockWidgetH; title : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setTitle'; function QStyleOptionDockWidget_closable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_closable'; procedure QStyleOptionDockWidget_setClosable(handle : QStyleOptionDockWidgetH; closable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setClosable'; function QStyleOptionDockWidget_movable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_movable'; procedure QStyleOptionDockWidget_setMovable(handle : QStyleOptionDockWidgetH; movable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setMovable'; function QStyleOptionDockWidget_floatable(handle : QStyleOptionDockWidgetH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_floatable'; procedure QStyleOptionDockWidget_setFloatable(handle : QStyleOptionDockWidgetH; floatable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_setFloatable'; function QStyleOptionDockWidget_create(): QStyleOptionDockWidgetH; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_create'; procedure QStyleOptionDockWidget_destroy(handle: QStyleOptionDockWidgetH); cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_destroy'; function QStyleOptionDockWidget_create(other: QStyleOptionDockWidgetH): QStyleOptionDockWidgetH; cdecl; external Qt4PasLib name 'QStyleOptionDockWidget_create2'; function QStyleOptionViewItem_displayAlignment(handle : QStyleOptionViewItemH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_displayAlignment'; procedure QStyleOptionViewItem_setDisplayAlignment(handle : QStyleOptionViewItemH; displayAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDisplayAlignment'; function QStyleOptionViewItem_decorationAlignment(handle : QStyleOptionViewItemH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationAlignment'; procedure QStyleOptionViewItem_setDecorationAlignment(handle : QStyleOptionViewItemH; decorationAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationAlignment'; function QStyleOptionViewItem_textElideMode(handle : QStyleOptionViewItemH) : QtTextElideMode; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_textElideMode'; procedure QStyleOptionViewItem_setTextElideMode(handle : QStyleOptionViewItemH; textElideMode : QtTextElideMode); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setTextElideMode'; function QStyleOptionViewItem_decorationPosition(handle : QStyleOptionViewItemH) : QStyleOptionViewItemPosition; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationPosition'; procedure QStyleOptionViewItem_setDecorationPosition(handle : QStyleOptionViewItemH; decorationPosition : QStyleOptionViewItemPosition); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationPosition'; procedure QStyleOptionViewItem_decorationSize(handle : QStyleOptionViewItemH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_decorationSize'; procedure QStyleOptionViewItem_setDecorationSize(handle : QStyleOptionViewItemH; decorationSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setDecorationSize'; procedure QStyleOptionViewItem_font(handle : QStyleOptionViewItemH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_font'; procedure QStyleOptionViewItem_setFont(handle : QStyleOptionViewItemH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setFont'; function QStyleOptionViewItem_showDecorationSelected(handle : QStyleOptionViewItemH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_showDecorationSelected'; procedure QStyleOptionViewItem_setShowDecorationSelected(handle : QStyleOptionViewItemH; showDecorationSelected : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_setShowDecorationSelected'; function QStyleOptionViewItem_create(): QStyleOptionViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_create'; procedure QStyleOptionViewItem_destroy(handle: QStyleOptionViewItemH); cdecl; external Qt4PasLib name 'QStyleOptionViewItem_destroy'; function QStyleOptionViewItem_create(other: QStyleOptionViewItemH): QStyleOptionViewItemH; cdecl; external Qt4PasLib name 'QStyleOptionViewItem_create2'; procedure QStyleOptionViewItemV4_index(handle : QStyleOptionViewItemV4H; retval : QModelIndexH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_index'; procedure QStyleOptionViewItemV4_setIndex(handle : QStyleOptionViewItemV4H; index : QModelIndexH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setIndex'; function QStyleOptionViewItemV4_checkState(handle : QStyleOptionViewItemV4H) : QtCheckState; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_checkState'; procedure QStyleOptionViewItemV4_setCheckState(handle : QStyleOptionViewItemV4H; checkState : QtCheckState); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setCheckState'; procedure QStyleOptionViewItemV4_icon(handle : QStyleOptionViewItemV4H; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_icon'; procedure QStyleOptionViewItemV4_setIcon(handle : QStyleOptionViewItemV4H; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setIcon'; procedure QStyleOptionViewItemV4_text(handle : QStyleOptionViewItemV4H; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_text'; procedure QStyleOptionViewItemV4_setText(handle : QStyleOptionViewItemV4H; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setText'; function QStyleOptionViewItemV4_viewItemPosition(handle : QStyleOptionViewItemV4H) : QStyleOptionViewItemV4ViewItemPosition; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_viewItemPosition'; procedure QStyleOptionViewItemV4_setViewItemPosition(handle : QStyleOptionViewItemV4H; viewItemPosition : QStyleOptionViewItemV4ViewItemPosition); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setViewItemPosition'; procedure QStyleOptionViewItemV4_backgroundBrush(handle : QStyleOptionViewItemV4H; retval : QBrushH ); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_backgroundBrush'; procedure QStyleOptionViewItemV4_setBackgroundBrush(handle : QStyleOptionViewItemV4H; backgroundBrush : QBrushH); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_setBackgroundBrush'; function QStyleOptionViewItemV4_create(): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create'; procedure QStyleOptionViewItemV4_destroy(handle: QStyleOptionViewItemV4H); cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_destroy'; function QStyleOptionViewItemV4_create(other: QStyleOptionViewItemV4H): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create2'; function QStyleOptionViewItemV4_create(other: QStyleOptionViewItemH): QStyleOptionViewItemV4H; cdecl; external Qt4PasLib name 'QStyleOptionViewItemV4_create3'; procedure QStyleOptionToolBox_text(handle : QStyleOptionToolBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_text'; procedure QStyleOptionToolBox_setText(handle : QStyleOptionToolBoxH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_setText'; procedure QStyleOptionToolBox_icon(handle : QStyleOptionToolBoxH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_icon'; procedure QStyleOptionToolBox_setIcon(handle : QStyleOptionToolBoxH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_setIcon'; function QStyleOptionToolBox_create(): QStyleOptionToolBoxH; cdecl; external Qt4PasLib name 'QStyleOptionToolBox_create'; procedure QStyleOptionToolBox_destroy(handle: QStyleOptionToolBoxH); cdecl; external Qt4PasLib name 'QStyleOptionToolBox_destroy'; function QStyleOptionToolBox_create(other: QStyleOptionToolBoxH): QStyleOptionToolBoxH; cdecl; external Qt4PasLib name 'QStyleOptionToolBox_create2'; function QStyleOptionToolBoxV2_position(handle : QStyleOptionToolBoxV2H) : QStyleOptionToolBoxV2TabPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_position'; procedure QStyleOptionToolBoxV2_setPosition(handle : QStyleOptionToolBoxV2H; position : QStyleOptionToolBoxV2TabPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_setPosition'; function QStyleOptionToolBoxV2_selectedPosition(handle : QStyleOptionToolBoxV2H) : QStyleOptionToolBoxV2SelectedPosition; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_selectedPosition'; procedure QStyleOptionToolBoxV2_setSelectedPosition(handle : QStyleOptionToolBoxV2H; selectedPosition : QStyleOptionToolBoxV2SelectedPosition); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_setSelectedPosition'; function QStyleOptionToolBoxV2_create(): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create'; procedure QStyleOptionToolBoxV2_destroy(handle: QStyleOptionToolBoxV2H); cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_destroy'; function QStyleOptionToolBoxV2_create(other: QStyleOptionToolBoxV2H): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create2'; function QStyleOptionToolBoxV2_create(other: QStyleOptionToolBoxH): QStyleOptionToolBoxV2H; cdecl; external Qt4PasLib name 'QStyleOptionToolBoxV2_create3'; function QStyleOptionRubberBand_shape(handle : QStyleOptionRubberBandH) : QRubberBandShape; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_shape'; procedure QStyleOptionRubberBand_setShape(handle : QStyleOptionRubberBandH; shape : QRubberBandShape); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_setShape'; function QStyleOptionRubberBand_opaque(handle : QStyleOptionRubberBandH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_opaque'; procedure QStyleOptionRubberBand_setOpaque(handle : QStyleOptionRubberBandH; opaque : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_setOpaque'; function QStyleOptionRubberBand_create(): QStyleOptionRubberBandH; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_create'; procedure QStyleOptionRubberBand_destroy(handle: QStyleOptionRubberBandH); cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_destroy'; function QStyleOptionRubberBand_create(other: QStyleOptionRubberBandH): QStyleOptionRubberBandH; cdecl; external Qt4PasLib name 'QStyleOptionRubberBand_create2'; function QStyleOptionComplex_subControls(handle : QStyleOptionComplexH) : QStyleSubControls; cdecl; external Qt4PasLib name 'QStyleOptionComplex_subControls'; procedure QStyleOptionComplex_setSubControls(handle : QStyleOptionComplexH; subControls : QStyleSubControls); cdecl; external Qt4PasLib name 'QStyleOptionComplex_setSubControls'; function QStyleOptionComplex_activeSubControls(handle : QStyleOptionComplexH) : QStyleSubControls; cdecl; external Qt4PasLib name 'QStyleOptionComplex_activeSubControls'; procedure QStyleOptionComplex_setActiveSubControls(handle : QStyleOptionComplexH; activeSubControls : QStyleSubControls); cdecl; external Qt4PasLib name 'QStyleOptionComplex_setActiveSubControls'; function QStyleOptionComplex_create(version: Integer; _type: Integer): QStyleOptionComplexH; cdecl; external Qt4PasLib name 'QStyleOptionComplex_create'; procedure QStyleOptionComplex_destroy(handle: QStyleOptionComplexH); cdecl; external Qt4PasLib name 'QStyleOptionComplex_destroy'; function QStyleOptionComplex_create(other: QStyleOptionComplexH): QStyleOptionComplexH; cdecl; external Qt4PasLib name 'QStyleOptionComplex_create2'; function QStyleOptionSlider_orientation(handle : QStyleOptionSliderH) : QtOrientation; cdecl; external Qt4PasLib name 'QStyleOptionSlider_orientation'; procedure QStyleOptionSlider_setOrientation(handle : QStyleOptionSliderH; orientation : QtOrientation); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setOrientation'; function QStyleOptionSlider_minimum(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_minimum'; procedure QStyleOptionSlider_setMinimum(handle : QStyleOptionSliderH; minimum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setMinimum'; function QStyleOptionSlider_maximum(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_maximum'; procedure QStyleOptionSlider_setMaximum(handle : QStyleOptionSliderH; maximum : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setMaximum'; function QStyleOptionSlider_tickPosition(handle : QStyleOptionSliderH) : QSliderTickPosition; cdecl; external Qt4PasLib name 'QStyleOptionSlider_tickPosition'; procedure QStyleOptionSlider_setTickPosition(handle : QStyleOptionSliderH; tickPosition : QSliderTickPosition); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setTickPosition'; function QStyleOptionSlider_tickInterval(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_tickInterval'; procedure QStyleOptionSlider_setTickInterval(handle : QStyleOptionSliderH; tickInterval : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setTickInterval'; function QStyleOptionSlider_upsideDown(handle : QStyleOptionSliderH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSlider_upsideDown'; procedure QStyleOptionSlider_setUpsideDown(handle : QStyleOptionSliderH; upsideDown : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setUpsideDown'; function QStyleOptionSlider_sliderPosition(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_sliderPosition'; procedure QStyleOptionSlider_setSliderPosition(handle : QStyleOptionSliderH; sliderPosition : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSliderPosition'; function QStyleOptionSlider_sliderValue(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_sliderValue'; procedure QStyleOptionSlider_setSliderValue(handle : QStyleOptionSliderH; sliderValue : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSliderValue'; function QStyleOptionSlider_singleStep(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_singleStep'; procedure QStyleOptionSlider_setSingleStep(handle : QStyleOptionSliderH; singleStep : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setSingleStep'; function QStyleOptionSlider_pageStep(handle : QStyleOptionSliderH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionSlider_pageStep'; procedure QStyleOptionSlider_setPageStep(handle : QStyleOptionSliderH; pageStep : Integer); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setPageStep'; function QStyleOptionSlider_notchTarget(handle : QStyleOptionSliderH) : qreal; cdecl; external Qt4PasLib name 'QStyleOptionSlider_notchTarget'; procedure QStyleOptionSlider_setNotchTarget(handle : QStyleOptionSliderH; notchTarget : qreal); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setNotchTarget'; function QStyleOptionSlider_dialWrapping(handle : QStyleOptionSliderH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSlider_dialWrapping'; procedure QStyleOptionSlider_setDialWrapping(handle : QStyleOptionSliderH; dialWrapping : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSlider_setDialWrapping'; function QStyleOptionSlider_create(): QStyleOptionSliderH; cdecl; external Qt4PasLib name 'QStyleOptionSlider_create'; procedure QStyleOptionSlider_destroy(handle: QStyleOptionSliderH); cdecl; external Qt4PasLib name 'QStyleOptionSlider_destroy'; function QStyleOptionSlider_create(other: QStyleOptionSliderH): QStyleOptionSliderH; cdecl; external Qt4PasLib name 'QStyleOptionSlider_create2'; function QStyleOptionSpinBox_buttonSymbols(handle : QStyleOptionSpinBoxH) : QAbstractSpinBoxButtonSymbols; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_buttonSymbols'; procedure QStyleOptionSpinBox_setButtonSymbols(handle : QStyleOptionSpinBoxH; buttonSymbols : QAbstractSpinBoxButtonSymbols); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setButtonSymbols'; function QStyleOptionSpinBox_stepEnabled(handle : QStyleOptionSpinBoxH) : QAbstractSpinBoxStepEnabled; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_stepEnabled'; procedure QStyleOptionSpinBox_setStepEnabled(handle : QStyleOptionSpinBoxH; stepEnabled : QAbstractSpinBoxStepEnabled); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setStepEnabled'; function QStyleOptionSpinBox_frame(handle : QStyleOptionSpinBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_frame'; procedure QStyleOptionSpinBox_setFrame(handle : QStyleOptionSpinBoxH; frame : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_setFrame'; function QStyleOptionSpinBox_create(): QStyleOptionSpinBoxH; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_create'; procedure QStyleOptionSpinBox_destroy(handle: QStyleOptionSpinBoxH); cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_destroy'; function QStyleOptionSpinBox_create(other: QStyleOptionSpinBoxH): QStyleOptionSpinBoxH; cdecl; external Qt4PasLib name 'QStyleOptionSpinBox_create2'; procedure QStyleOptionQ3ListView_viewportPalette(handle : QStyleOptionQ3ListViewH; retval : QPaletteH ); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_viewportPalette'; procedure QStyleOptionQ3ListView_setViewportPalette(handle : QStyleOptionQ3ListViewH; viewportPalette : QPaletteH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setViewportPalette'; function QStyleOptionQ3ListView_viewportBGRole(handle : QStyleOptionQ3ListViewH) : QPaletteColorRole; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_viewportBGRole'; procedure QStyleOptionQ3ListView_setViewportBGRole(handle : QStyleOptionQ3ListViewH; viewportBGRole : QPaletteColorRole); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setViewportBGRole'; function QStyleOptionQ3ListView_sortColumn(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_sortColumn'; procedure QStyleOptionQ3ListView_setSortColumn(handle : QStyleOptionQ3ListViewH; sortColumn : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setSortColumn'; function QStyleOptionQ3ListView_itemMargin(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_itemMargin'; procedure QStyleOptionQ3ListView_setItemMargin(handle : QStyleOptionQ3ListViewH; itemMargin : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setItemMargin'; function QStyleOptionQ3ListView_treeStepSize(handle : QStyleOptionQ3ListViewH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_treeStepSize'; procedure QStyleOptionQ3ListView_setTreeStepSize(handle : QStyleOptionQ3ListViewH; treeStepSize : Integer); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setTreeStepSize'; function QStyleOptionQ3ListView_rootIsDecorated(handle : QStyleOptionQ3ListViewH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_rootIsDecorated'; procedure QStyleOptionQ3ListView_setRootIsDecorated(handle : QStyleOptionQ3ListViewH; rootIsDecorated : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_setRootIsDecorated'; function QStyleOptionQ3ListView_create(): QStyleOptionQ3ListViewH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_create'; procedure QStyleOptionQ3ListView_destroy(handle: QStyleOptionQ3ListViewH); cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_destroy'; function QStyleOptionQ3ListView_create(other: QStyleOptionQ3ListViewH): QStyleOptionQ3ListViewH; cdecl; external Qt4PasLib name 'QStyleOptionQ3ListView_create2'; function QStyleOptionToolButton_features(handle : QStyleOptionToolButtonH) : QStyleOptionToolButtonToolButtonFeatures; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_features'; procedure QStyleOptionToolButton_setFeatures(handle : QStyleOptionToolButtonH; features : QStyleOptionToolButtonToolButtonFeatures); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setFeatures'; procedure QStyleOptionToolButton_icon(handle : QStyleOptionToolButtonH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_icon'; procedure QStyleOptionToolButton_setIcon(handle : QStyleOptionToolButtonH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setIcon'; procedure QStyleOptionToolButton_iconSize(handle : QStyleOptionToolButtonH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_iconSize'; procedure QStyleOptionToolButton_setIconSize(handle : QStyleOptionToolButtonH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setIconSize'; procedure QStyleOptionToolButton_text(handle : QStyleOptionToolButtonH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_text'; procedure QStyleOptionToolButton_setText(handle : QStyleOptionToolButtonH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setText'; function QStyleOptionToolButton_arrowType(handle : QStyleOptionToolButtonH) : QtArrowType; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_arrowType'; procedure QStyleOptionToolButton_setArrowType(handle : QStyleOptionToolButtonH; arrowType : QtArrowType); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setArrowType'; function QStyleOptionToolButton_toolButtonStyle(handle : QStyleOptionToolButtonH) : QtToolButtonStyle; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_toolButtonStyle'; procedure QStyleOptionToolButton_setToolButtonStyle(handle : QStyleOptionToolButtonH; toolButtonStyle : QtToolButtonStyle); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setToolButtonStyle'; procedure QStyleOptionToolButton_pos(handle : QStyleOptionToolButtonH; retval : PQtPoint ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_pos'; procedure QStyleOptionToolButton_setPos(handle : QStyleOptionToolButtonH; pos : PQtPoint); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setPos'; procedure QStyleOptionToolButton_font(handle : QStyleOptionToolButtonH; retval : QFontH ); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_font'; procedure QStyleOptionToolButton_setFont(handle : QStyleOptionToolButtonH; font : QFontH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_setFont'; function QStyleOptionToolButton_create(): QStyleOptionToolButtonH; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_create'; procedure QStyleOptionToolButton_destroy(handle: QStyleOptionToolButtonH); cdecl; external Qt4PasLib name 'QStyleOptionToolButton_destroy'; function QStyleOptionToolButton_create(other: QStyleOptionToolButtonH): QStyleOptionToolButtonH; cdecl; external Qt4PasLib name 'QStyleOptionToolButton_create2'; function QStyleOptionComboBox_editable(handle : QStyleOptionComboBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_editable'; procedure QStyleOptionComboBox_setEditable(handle : QStyleOptionComboBoxH; editable : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setEditable'; procedure QStyleOptionComboBox_popupRect(handle : QStyleOptionComboBoxH; retval : PRect ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_popupRect'; procedure QStyleOptionComboBox_setPopupRect(handle : QStyleOptionComboBoxH; popupRect : PRect); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setPopupRect'; function QStyleOptionComboBox_frame(handle : QStyleOptionComboBoxH) : Boolean; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_frame'; procedure QStyleOptionComboBox_setFrame(handle : QStyleOptionComboBoxH; frame : Boolean); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setFrame'; procedure QStyleOptionComboBox_currentText(handle : QStyleOptionComboBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_currentText'; procedure QStyleOptionComboBox_setCurrentText(handle : QStyleOptionComboBoxH; currentText : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setCurrentText'; procedure QStyleOptionComboBox_currentIcon(handle : QStyleOptionComboBoxH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_currentIcon'; procedure QStyleOptionComboBox_setCurrentIcon(handle : QStyleOptionComboBoxH; currentIcon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setCurrentIcon'; procedure QStyleOptionComboBox_iconSize(handle : QStyleOptionComboBoxH; retval : PSize ); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_iconSize'; procedure QStyleOptionComboBox_setIconSize(handle : QStyleOptionComboBoxH; iconSize : PSize); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_setIconSize'; function QStyleOptionComboBox_create(): QStyleOptionComboBoxH; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_create'; procedure QStyleOptionComboBox_destroy(handle: QStyleOptionComboBoxH); cdecl; external Qt4PasLib name 'QStyleOptionComboBox_destroy'; function QStyleOptionComboBox_create(other: QStyleOptionComboBoxH): QStyleOptionComboBoxH; cdecl; external Qt4PasLib name 'QStyleOptionComboBox_create2'; procedure QStyleOptionTitleBar_text(handle : QStyleOptionTitleBarH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_text'; procedure QStyleOptionTitleBar_setText(handle : QStyleOptionTitleBarH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setText'; procedure QStyleOptionTitleBar_icon(handle : QStyleOptionTitleBarH; retval : QIconH ); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_icon'; procedure QStyleOptionTitleBar_setIcon(handle : QStyleOptionTitleBarH; icon : QIconH); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setIcon'; function QStyleOptionTitleBar_titleBarState(handle : QStyleOptionTitleBarH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_titleBarState'; procedure QStyleOptionTitleBar_setTitleBarState(handle : QStyleOptionTitleBarH; titleBarState : Integer); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setTitleBarState'; function QStyleOptionTitleBar_titleBarFlags(handle : QStyleOptionTitleBarH) : QtWindowFlags; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_titleBarFlags'; procedure QStyleOptionTitleBar_setTitleBarFlags(handle : QStyleOptionTitleBarH; titleBarFlags : QtWindowFlags); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_setTitleBarFlags'; function QStyleOptionTitleBar_create(): QStyleOptionTitleBarH; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_create'; procedure QStyleOptionTitleBar_destroy(handle: QStyleOptionTitleBarH); cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_destroy'; function QStyleOptionTitleBar_create(other: QStyleOptionTitleBarH): QStyleOptionTitleBarH; cdecl; external Qt4PasLib name 'QStyleOptionTitleBar_create2'; function QStyleOptionGroupBox_features(handle : QStyleOptionGroupBoxH) : QStyleOptionFrameV2FrameFeatures; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_features'; procedure QStyleOptionGroupBox_setFeatures(handle : QStyleOptionGroupBoxH; features : QStyleOptionFrameV2FrameFeatures); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setFeatures'; procedure QStyleOptionGroupBox_text(handle : QStyleOptionGroupBoxH; retval : PWideString ); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_text'; procedure QStyleOptionGroupBox_setText(handle : QStyleOptionGroupBoxH; text : PWideString); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setText'; function QStyleOptionGroupBox_textAlignment(handle : QStyleOptionGroupBoxH) : QtAlignment; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_textAlignment'; procedure QStyleOptionGroupBox_setTextAlignment(handle : QStyleOptionGroupBoxH; textAlignment : QtAlignment); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setTextAlignment'; procedure QStyleOptionGroupBox_textColor(handle : QStyleOptionGroupBoxH; retval : PQColor ); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_textColor'; procedure QStyleOptionGroupBox_setTextColor(handle : QStyleOptionGroupBoxH; textColor : PQColor); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setTextColor'; function QStyleOptionGroupBox_lineWidth(handle : QStyleOptionGroupBoxH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_lineWidth'; procedure QStyleOptionGroupBox_setLineWidth(handle : QStyleOptionGroupBoxH; lineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setLineWidth'; function QStyleOptionGroupBox_midLineWidth(handle : QStyleOptionGroupBoxH) : Integer; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_midLineWidth'; procedure QStyleOptionGroupBox_setMidLineWidth(handle : QStyleOptionGroupBoxH; midLineWidth : Integer); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_setMidLineWidth'; function QStyleOptionGroupBox_create(): QStyleOptionGroupBoxH; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_create'; procedure QStyleOptionGroupBox_destroy(handle: QStyleOptionGroupBoxH); cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_destroy'; function QStyleOptionGroupBox_create(other: QStyleOptionGroupBoxH): QStyleOptionGroupBoxH; cdecl; external Qt4PasLib name 'QStyleOptionGroupBox_create2'; function QStyleOptionSizeGrip_corner(handle : QStyleOptionSizeGripH) : QtCorner; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_corner'; procedure QStyleOptionSizeGrip_setCorner(handle : QStyleOptionSizeGripH; corner : QtCorner); cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_setCorner'; function QStyleOptionSizeGrip_create(): QStyleOptionSizeGripH; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_create'; procedure QStyleOptionSizeGrip_destroy(handle: QStyleOptionSizeGripH); cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_destroy'; function QStyleOptionSizeGrip_create(other: QStyleOptionSizeGripH): QStyleOptionSizeGripH; cdecl; external Qt4PasLib name 'QStyleOptionSizeGrip_create2'; procedure QStyleOptionGraphicsItem_exposedRect(handle : QStyleOptionGraphicsItemH; retval : QRectFH ); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_exposedRect'; procedure QStyleOptionGraphicsItem_setExposedRect(handle : QStyleOptionGraphicsItemH; exposedRect : QRectFH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setExposedRect'; procedure QStyleOptionGraphicsItem_matrix(handle : QStyleOptionGraphicsItemH; retval : QMatrixH ); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_matrix'; procedure QStyleOptionGraphicsItem_setMatrix(handle : QStyleOptionGraphicsItemH; matrix : QMatrixH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setMatrix'; function QStyleOptionGraphicsItem_levelOfDetail(handle : QStyleOptionGraphicsItemH) : qreal; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_levelOfDetail'; procedure QStyleOptionGraphicsItem_setLevelOfDetail(handle : QStyleOptionGraphicsItemH; levelOfDetail : qreal); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_setLevelOfDetail'; function QStyleOptionGraphicsItem_create(): QStyleOptionGraphicsItemH; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_create'; procedure QStyleOptionGraphicsItem_destroy(handle: QStyleOptionGraphicsItemH); cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_destroy'; function QStyleOptionGraphicsItem_create(other: QStyleOptionGraphicsItemH): QStyleOptionGraphicsItemH; cdecl; external Qt4PasLib name 'QStyleOptionGraphicsItem_create2'; function QStyleHintReturn_version(handle : QStyleHintReturnH) : Integer; cdecl; external Qt4PasLib name 'QStyleHintReturn_version'; procedure QStyleHintReturn_setVersion(handle : QStyleHintReturnH; version : Integer); cdecl; external Qt4PasLib name 'QStyleHintReturn_setVersion'; function QStyleHintReturn__type(handle : QStyleHintReturnH) : Integer; cdecl; external Qt4PasLib name 'QStyleHintReturn__type'; procedure QStyleHintReturn_setType(handle : QStyleHintReturnH; _type : Integer); cdecl; external Qt4PasLib name 'QStyleHintReturn_setType'; function QStyleHintReturn_create(version: QStyleOptionStyleOptionVersion = QStyleOptionVersion; _type: QStyleHintReturnHintReturnType = QStyleHintReturnSH_Default): QStyleHintReturnH; cdecl; external Qt4PasLib name 'QStyleHintReturn_create'; procedure QStyleHintReturn_destroy(handle: QStyleHintReturnH); cdecl; external Qt4PasLib name 'QStyleHintReturn_destroy'; procedure QStyleHintReturnMask_region(handle : QStyleHintReturnMaskH; retval : QRegionH ); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_region'; procedure QStyleHintReturnMask_setRegion(handle : QStyleHintReturnMaskH; region : QRegionH); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_setRegion'; function QStyleHintReturnMask_create(): QStyleHintReturnMaskH; cdecl; external Qt4PasLib name 'QStyleHintReturnMask_create'; procedure QStyleHintReturnMask_destroy(handle: QStyleHintReturnMaskH); cdecl; external Qt4PasLib name 'QStyleHintReturnMask_destroy'; procedure QStyleHintReturnVariant_variant(handle : QStyleHintReturnVariantH; retval : QVariantH ); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_variant'; procedure QStyleHintReturnVariant_setVariant(handle : QStyleHintReturnVariantH; variant : QVariantH); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_setVariant'; function QStyleHintReturnVariant_create(): QStyleHintReturnVariantH; cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_create'; procedure QStyleHintReturnVariant_destroy(handle: QStyleHintReturnVariantH); cdecl; external Qt4PasLib name 'QStyleHintReturnVariant_destroy'; procedure QStyleFactory_keys(retval: QStringListH); cdecl; external Qt4PasLib name 'QStyleFactory_keys'; function QStyleFactory_create(AnonParam1: PWideString): QStyleH; cdecl; external Qt4PasLib name 'QStyleFactory_create'; type QGraphicsSceneItemIndexMethod = ( //QGraphicsScene::ItemIndexMethod (2) QGraphicsSceneNoIndex = -1, QGraphicsSceneBspTreeIndex ); type QGraphicsSceneSceneLayer = cardinal; // QGraphicsScene::SceneLayer QGraphicsSceneSceneLayers = QGraphicsSceneSceneLayer; //QFlags<> (3) const QGraphicsSceneItemLayer = $1; QGraphicsSceneBackgroundLayer = $2; QGraphicsSceneForegroundLayer = $4; QGraphicsSceneAllLayers = $ffff; function QGraphicsScene_create(parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create'; procedure QGraphicsScene_destroy(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_destroy'; function QGraphicsScene_create(sceneRect: QRectFH; parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create2'; function QGraphicsScene_create(x: qreal; y: qreal; width: qreal; height: qreal; parent: QObjectH = nil): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsScene_create3'; procedure QGraphicsScene_sceneRect(handle: QGraphicsSceneH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_sceneRect'; function QGraphicsScene_width(handle: QGraphicsSceneH): qreal; cdecl; external Qt4PasLib name 'QGraphicsScene_width'; function QGraphicsScene_height(handle: QGraphicsSceneH): qreal; cdecl; external Qt4PasLib name 'QGraphicsScene_height'; procedure QGraphicsScene_setSceneRect(handle: QGraphicsSceneH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_setSceneRect'; procedure QGraphicsScene_setSceneRect(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsScene_setSceneRect2'; procedure QGraphicsScene_render(handle: QGraphicsSceneH; painter: QPainterH; target: QRectFH = nil; source: QRectFH = nil; aspectRatioMode: QtAspectRatioMode = QtKeepAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsScene_render'; function QGraphicsScene_itemIndexMethod(handle: QGraphicsSceneH): QGraphicsSceneItemIndexMethod; cdecl; external Qt4PasLib name 'QGraphicsScene_itemIndexMethod'; procedure QGraphicsScene_setItemIndexMethod(handle: QGraphicsSceneH; method: QGraphicsSceneItemIndexMethod); cdecl; external Qt4PasLib name 'QGraphicsScene_setItemIndexMethod'; function QGraphicsScene_isSortCacheEnabled(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_isSortCacheEnabled'; procedure QGraphicsScene_setSortCacheEnabled(handle: QGraphicsSceneH; enabled: Boolean); cdecl; external Qt4PasLib name 'QGraphicsScene_setSortCacheEnabled'; function QGraphicsScene_bspTreeDepth(handle: QGraphicsSceneH): Integer; cdecl; external Qt4PasLib name 'QGraphicsScene_bspTreeDepth'; procedure QGraphicsScene_setBspTreeDepth(handle: QGraphicsSceneH; depth: Integer); cdecl; external Qt4PasLib name 'QGraphicsScene_setBspTreeDepth'; procedure QGraphicsScene_itemsBoundingRect(handle: QGraphicsSceneH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsScene_itemsBoundingRect'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_items'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; pos: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsScene_items2'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; rect: QRectFH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items3'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; polygon: QPolygonFH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items4'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; path: QPainterPathH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items5'; procedure QGraphicsScene_collidingItems(handle: QGraphicsSceneH; retval: PPtrIntArray; item: QGraphicsItemH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_collidingItems'; function QGraphicsScene_itemAt(handle: QGraphicsSceneH; pos: PQtPointF): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_itemAt'; procedure QGraphicsScene_items(handle: QGraphicsSceneH; retval: PPtrIntArray; x: qreal; y: qreal; w: qreal; h: qreal; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsScene_items6'; function QGraphicsScene_itemAt(handle: QGraphicsSceneH; x: qreal; y: qreal): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_itemAt2'; procedure QGraphicsScene_selectedItems(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_selectedItems'; procedure QGraphicsScene_selectionArea(handle: QGraphicsSceneH; retval: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsScene_selectionArea'; procedure QGraphicsScene_setSelectionArea(handle: QGraphicsSceneH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsScene_setSelectionArea'; procedure QGraphicsScene_setSelectionArea(handle: QGraphicsSceneH; path: QPainterPathH; AnonParam2: QtItemSelectionMode); cdecl; external Qt4PasLib name 'QGraphicsScene_setSelectionArea2'; function QGraphicsScene_createItemGroup(handle: QGraphicsSceneH; items: PPtrIntArray): QGraphicsItemGroupH; cdecl; external Qt4PasLib name 'QGraphicsScene_createItemGroup'; procedure QGraphicsScene_destroyItemGroup(handle: QGraphicsSceneH; group: QGraphicsItemGroupH); cdecl; external Qt4PasLib name 'QGraphicsScene_destroyItemGroup'; procedure QGraphicsScene_addItem(handle: QGraphicsSceneH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsScene_addItem'; function QGraphicsScene_addEllipse(handle: QGraphicsSceneH; rect: QRectFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsEllipseItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addEllipse'; function QGraphicsScene_addLine(handle: QGraphicsSceneH; line: QLineFH; pen: QPenH = nil): QGraphicsLineItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addLine'; function QGraphicsScene_addPath(handle: QGraphicsSceneH; path: QPainterPathH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsPathItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPath'; function QGraphicsScene_addPixmap(handle: QGraphicsSceneH; pixmap: QPixmapH): QGraphicsPixmapItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPixmap'; function QGraphicsScene_addPolygon(handle: QGraphicsSceneH; polygon: QPolygonFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsPolygonItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addPolygon'; function QGraphicsScene_addRect(handle: QGraphicsSceneH; rect: QRectFH; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsRectItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addRect'; function QGraphicsScene_addText(handle: QGraphicsSceneH; text: PWideString; font: QFontH = nil): QGraphicsTextItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addText'; function QGraphicsScene_addSimpleText(handle: QGraphicsSceneH; text: PWideString; font: QFontH = nil): QGraphicsSimpleTextItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addSimpleText'; function QGraphicsScene_addWidget(handle: QGraphicsSceneH; widget: QWidgetH; wFlags: QtWindowFlags = 0): QGraphicsProxyWidgetH; cdecl; external Qt4PasLib name 'QGraphicsScene_addWidget'; function QGraphicsScene_addEllipse(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsEllipseItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addEllipse2'; function QGraphicsScene_addLine(handle: QGraphicsSceneH; x1: qreal; y1: qreal; x2: qreal; y2: qreal; pen: QPenH = nil): QGraphicsLineItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addLine2'; function QGraphicsScene_addRect(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; pen: QPenH = nil; brush: QBrushH = nil): QGraphicsRectItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_addRect2'; procedure QGraphicsScene_removeItem(handle: QGraphicsSceneH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsScene_removeItem'; function QGraphicsScene_focusItem(handle: QGraphicsSceneH): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_focusItem'; procedure QGraphicsScene_setFocusItem(handle: QGraphicsSceneH; item: QGraphicsItemH; focusReason: QtFocusReason = QtOtherFocusReason); cdecl; external Qt4PasLib name 'QGraphicsScene_setFocusItem'; function QGraphicsScene_hasFocus(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_hasFocus'; procedure QGraphicsScene_setFocus(handle: QGraphicsSceneH; focusReason: QtFocusReason = QtOtherFocusReason); cdecl; external Qt4PasLib name 'QGraphicsScene_setFocus'; procedure QGraphicsScene_clearFocus(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clearFocus'; procedure QGraphicsScene_setStickyFocus(handle: QGraphicsSceneH; enabled: Boolean); cdecl; external Qt4PasLib name 'QGraphicsScene_setStickyFocus'; function QGraphicsScene_stickyFocus(handle: QGraphicsSceneH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsScene_stickyFocus'; function QGraphicsScene_mouseGrabberItem(handle: QGraphicsSceneH): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsScene_mouseGrabberItem'; procedure QGraphicsScene_backgroundBrush(handle: QGraphicsSceneH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_backgroundBrush'; procedure QGraphicsScene_setBackgroundBrush(handle: QGraphicsSceneH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_setBackgroundBrush'; procedure QGraphicsScene_foregroundBrush(handle: QGraphicsSceneH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_foregroundBrush'; procedure QGraphicsScene_setForegroundBrush(handle: QGraphicsSceneH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsScene_setForegroundBrush'; procedure QGraphicsScene_inputMethodQuery(handle: QGraphicsSceneH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QGraphicsScene_inputMethodQuery'; procedure QGraphicsScene_views(handle: QGraphicsSceneH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsScene_views'; procedure QGraphicsScene_update(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsScene_update'; procedure QGraphicsScene_invalidate(handle: QGraphicsSceneH; x: qreal; y: qreal; w: qreal; h: qreal; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsScene_invalidate'; function QGraphicsScene_style(handle: QGraphicsSceneH): QStyleH; cdecl; external Qt4PasLib name 'QGraphicsScene_style'; procedure QGraphicsScene_setStyle(handle: QGraphicsSceneH; style: QStyleH); cdecl; external Qt4PasLib name 'QGraphicsScene_setStyle'; procedure QGraphicsScene_font(handle: QGraphicsSceneH; retval: QFontH); cdecl; external Qt4PasLib name 'QGraphicsScene_font'; procedure QGraphicsScene_setFont(handle: QGraphicsSceneH; font: QFontH); cdecl; external Qt4PasLib name 'QGraphicsScene_setFont'; procedure QGraphicsScene_palette(handle: QGraphicsSceneH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QGraphicsScene_palette'; procedure QGraphicsScene_setPalette(handle: QGraphicsSceneH; palette: QPaletteH); cdecl; external Qt4PasLib name 'QGraphicsScene_setPalette'; function QGraphicsScene_activeWindow(handle: QGraphicsSceneH): QGraphicsWidgetH; cdecl; external Qt4PasLib name 'QGraphicsScene_activeWindow'; procedure QGraphicsScene_setActiveWindow(handle: QGraphicsSceneH; widget: QGraphicsWidgetH); cdecl; external Qt4PasLib name 'QGraphicsScene_setActiveWindow'; procedure QGraphicsScene_update(handle: QGraphicsSceneH; rect: QRectFH = nil); cdecl; external Qt4PasLib name 'QGraphicsScene_update2'; procedure QGraphicsScene_invalidate(handle: QGraphicsSceneH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsScene_invalidate2'; procedure QGraphicsScene_advance(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_advance'; procedure QGraphicsScene_clearSelection(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clearSelection'; procedure QGraphicsScene_clear(handle: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsScene_clear'; type QGraphicsScene_sceneRectChanged_Event = procedure (rect: QRectFH) of object cdecl; QGraphicsScene_selectionChanged_Event = procedure () of object cdecl; type QGraphicsViewViewportAnchor = ( // QGraphicsView::ViewportAnchor (1) QGraphicsViewNoAnchor, QGraphicsViewAnchorViewCenter, QGraphicsViewAnchorUnderMouse ); QGraphicsViewDragMode = ( // QGraphicsView::DragMode (1) QGraphicsViewNoDrag, QGraphicsViewScrollHandDrag, QGraphicsViewRubberBandDrag ); QGraphicsViewViewportUpdateMode = ( // QGraphicsView::ViewportUpdateMode (1) QGraphicsViewFullViewportUpdate, QGraphicsViewMinimalViewportUpdate, QGraphicsViewSmartViewportUpdate, QGraphicsViewNoViewportUpdate, QGraphicsViewBoundingRectViewportUpdate ); type QGraphicsViewCacheModeFlag = cardinal; // QGraphicsView::CacheModeFlag QGraphicsViewCacheMode = QGraphicsViewCacheModeFlag; //QFlags<> (3) const QGraphicsViewCacheNone = $0; QGraphicsViewCacheBackground = $1; type QGraphicsViewOptimizationFlag = cardinal; // QGraphicsView::OptimizationFlag QGraphicsViewOptimizationFlags = QGraphicsViewOptimizationFlag; //QFlags<> (3) const QGraphicsViewDontClipPainter = $1; QGraphicsViewDontSavePainterState = $2; QGraphicsViewDontAdjustForAntialiasing = $4; function QGraphicsView_create(parent: QWidgetH = nil): QGraphicsViewH; cdecl; external Qt4PasLib name 'QGraphicsView_create'; procedure QGraphicsView_destroy(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_destroy'; function QGraphicsView_create(scene: QGraphicsSceneH; parent: QWidgetH = nil): QGraphicsViewH; cdecl; external Qt4PasLib name 'QGraphicsView_create2'; procedure QGraphicsView_sizeHint(handle: QGraphicsViewH; retval: PSize); cdecl; external Qt4PasLib name 'QGraphicsView_sizeHint'; function QGraphicsView_renderHints(handle: QGraphicsViewH): QPainterRenderHints; cdecl; external Qt4PasLib name 'QGraphicsView_renderHints'; procedure QGraphicsView_setRenderHint(handle: QGraphicsViewH; hint: QPainterRenderHint; enabled: Boolean = True); cdecl; external Qt4PasLib name 'QGraphicsView_setRenderHint'; procedure QGraphicsView_setRenderHints(handle: QGraphicsViewH; hints: QPainterRenderHints); cdecl; external Qt4PasLib name 'QGraphicsView_setRenderHints'; function QGraphicsView_alignment(handle: QGraphicsViewH): QtAlignment; cdecl; external Qt4PasLib name 'QGraphicsView_alignment'; procedure QGraphicsView_setAlignment(handle: QGraphicsViewH; alignment: QtAlignment); cdecl; external Qt4PasLib name 'QGraphicsView_setAlignment'; function QGraphicsView_transformationAnchor(handle: QGraphicsViewH): QGraphicsViewViewportAnchor; cdecl; external Qt4PasLib name 'QGraphicsView_transformationAnchor'; procedure QGraphicsView_setTransformationAnchor(handle: QGraphicsViewH; anchor: QGraphicsViewViewportAnchor); cdecl; external Qt4PasLib name 'QGraphicsView_setTransformationAnchor'; function QGraphicsView_resizeAnchor(handle: QGraphicsViewH): QGraphicsViewViewportAnchor; cdecl; external Qt4PasLib name 'QGraphicsView_resizeAnchor'; procedure QGraphicsView_setResizeAnchor(handle: QGraphicsViewH; anchor: QGraphicsViewViewportAnchor); cdecl; external Qt4PasLib name 'QGraphicsView_setResizeAnchor'; function QGraphicsView_viewportUpdateMode(handle: QGraphicsViewH): QGraphicsViewViewportUpdateMode; cdecl; external Qt4PasLib name 'QGraphicsView_viewportUpdateMode'; procedure QGraphicsView_setViewportUpdateMode(handle: QGraphicsViewH; mode: QGraphicsViewViewportUpdateMode); cdecl; external Qt4PasLib name 'QGraphicsView_setViewportUpdateMode'; function QGraphicsView_optimizationFlags(handle: QGraphicsViewH): QGraphicsViewOptimizationFlags; cdecl; external Qt4PasLib name 'QGraphicsView_optimizationFlags'; procedure QGraphicsView_setOptimizationFlag(handle: QGraphicsViewH; flag: QGraphicsViewOptimizationFlag; enabled: Boolean = True); cdecl; external Qt4PasLib name 'QGraphicsView_setOptimizationFlag'; procedure QGraphicsView_setOptimizationFlags(handle: QGraphicsViewH; flags: QGraphicsViewOptimizationFlags); cdecl; external Qt4PasLib name 'QGraphicsView_setOptimizationFlags'; function QGraphicsView_dragMode(handle: QGraphicsViewH): QGraphicsViewDragMode; cdecl; external Qt4PasLib name 'QGraphicsView_dragMode'; procedure QGraphicsView_setDragMode(handle: QGraphicsViewH; mode: QGraphicsViewDragMode); cdecl; external Qt4PasLib name 'QGraphicsView_setDragMode'; function QGraphicsView_rubberBandSelectionMode(handle: QGraphicsViewH): QtItemSelectionMode; cdecl; external Qt4PasLib name 'QGraphicsView_rubberBandSelectionMode'; procedure QGraphicsView_setRubberBandSelectionMode(handle: QGraphicsViewH; mode: QtItemSelectionMode); cdecl; external Qt4PasLib name 'QGraphicsView_setRubberBandSelectionMode'; function QGraphicsView_cacheMode(handle: QGraphicsViewH): QGraphicsViewCacheMode; cdecl; external Qt4PasLib name 'QGraphicsView_cacheMode'; procedure QGraphicsView_setCacheMode(handle: QGraphicsViewH; mode: QGraphicsViewCacheMode); cdecl; external Qt4PasLib name 'QGraphicsView_setCacheMode'; procedure QGraphicsView_resetCachedContent(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetCachedContent'; function QGraphicsView_isInteractive(handle: QGraphicsViewH): Boolean; cdecl; external Qt4PasLib name 'QGraphicsView_isInteractive'; procedure QGraphicsView_setInteractive(handle: QGraphicsViewH; allowed: Boolean); cdecl; external Qt4PasLib name 'QGraphicsView_setInteractive'; function QGraphicsView_scene(handle: QGraphicsViewH): QGraphicsSceneH; cdecl; external Qt4PasLib name 'QGraphicsView_scene'; procedure QGraphicsView_setScene(handle: QGraphicsViewH; scene: QGraphicsSceneH); cdecl; external Qt4PasLib name 'QGraphicsView_setScene'; procedure QGraphicsView_sceneRect(handle: QGraphicsViewH; retval: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_sceneRect'; procedure QGraphicsView_setSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_setSceneRect'; procedure QGraphicsView_setSceneRect(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_setSceneRect2'; procedure QGraphicsView_matrix(handle: QGraphicsViewH; retval: QMatrixH); cdecl; external Qt4PasLib name 'QGraphicsView_matrix'; procedure QGraphicsView_setMatrix(handle: QGraphicsViewH; matrix: QMatrixH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QGraphicsView_setMatrix'; procedure QGraphicsView_resetMatrix(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetMatrix'; procedure QGraphicsView_transform(handle: QGraphicsViewH; retval: QTransformH); cdecl; external Qt4PasLib name 'QGraphicsView_transform'; procedure QGraphicsView_viewportTransform(handle: QGraphicsViewH; retval: QTransformH); cdecl; external Qt4PasLib name 'QGraphicsView_viewportTransform'; procedure QGraphicsView_setTransform(handle: QGraphicsViewH; matrix: QTransformH; combine: Boolean = False); cdecl; external Qt4PasLib name 'QGraphicsView_setTransform'; procedure QGraphicsView_resetTransform(handle: QGraphicsViewH); cdecl; external Qt4PasLib name 'QGraphicsView_resetTransform'; procedure QGraphicsView_rotate(handle: QGraphicsViewH; angle: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_rotate'; procedure QGraphicsView_scale(handle: QGraphicsViewH; sx: qreal; sy: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_scale'; procedure QGraphicsView_shear(handle: QGraphicsViewH; sh: qreal; sv: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_shear'; procedure QGraphicsView_translate(handle: QGraphicsViewH; dx: qreal; dy: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_translate'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; pos: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn2'; procedure QGraphicsView_centerOn(handle: QGraphicsViewH; item: QGraphicsItemH); cdecl; external Qt4PasLib name 'QGraphicsView_centerOn3'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; rect: QRectFH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible2'; procedure QGraphicsView_ensureVisible(handle: QGraphicsViewH; item: QGraphicsItemH; xmargin: Integer = 50; ymargin: Integer = 50); cdecl; external Qt4PasLib name 'QGraphicsView_ensureVisible3'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; rect: QRectFH; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; x: qreal; y: qreal; w: qreal; h: qreal; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView2'; procedure QGraphicsView_fitInView(handle: QGraphicsViewH; item: QGraphicsItemH; aspectRadioMode: QtAspectRatioMode = QtIgnoreAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_fitInView3'; procedure QGraphicsView_render(handle: QGraphicsViewH; painter: QPainterH; target: QRectFH = nil; source: PRect = nil; aspectRatioMode: QtAspectRatioMode = QtKeepAspectRatio); cdecl; external Qt4PasLib name 'QGraphicsView_render'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QGraphicsView_items'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; pos: PQtPoint); cdecl; external Qt4PasLib name 'QGraphicsView_items2'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_items3'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; rect: PRect; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items4'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; x: Integer; y: Integer; w: Integer; h: Integer; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items5'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; polygon: QPolygonH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items6'; procedure QGraphicsView_items(handle: QGraphicsViewH; retval: PPtrIntArray; path: QPainterPathH; mode: QtItemSelectionMode = QtIntersectsItemShape); cdecl; external Qt4PasLib name 'QGraphicsView_items7'; function QGraphicsView_itemAt(handle: QGraphicsViewH; pos: PQtPoint): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsView_itemAt'; function QGraphicsView_itemAt(handle: QGraphicsViewH; x: Integer; y: Integer): QGraphicsItemH; cdecl; external Qt4PasLib name 'QGraphicsView_itemAt2'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: PQtPointF; point: PQtPoint); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; rect: PRect); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene2'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; polygon: QPolygonH); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene3'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene4'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: PQtPoint; point: PQtPointF); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene2'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; polygon: QPolygonFH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene3'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPainterPathH; path: QPainterPathH); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene4'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: PQtPointF; x: Integer; y: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene5'; procedure QGraphicsView_mapToScene(handle: QGraphicsViewH; retval: QPolygonFH; x: Integer; y: Integer; w: Integer; h: Integer); cdecl; external Qt4PasLib name 'QGraphicsView_mapToScene6'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: PQtPoint; x: qreal; y: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene5'; procedure QGraphicsView_mapFromScene(handle: QGraphicsViewH; retval: QPolygonH; x: qreal; y: qreal; w: qreal; h: qreal); cdecl; external Qt4PasLib name 'QGraphicsView_mapFromScene6'; procedure QGraphicsView_inputMethodQuery(handle: QGraphicsViewH; retval: QVariantH; query: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QGraphicsView_inputMethodQuery'; procedure QGraphicsView_backgroundBrush(handle: QGraphicsViewH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_backgroundBrush'; procedure QGraphicsView_setBackgroundBrush(handle: QGraphicsViewH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_setBackgroundBrush'; procedure QGraphicsView_foregroundBrush(handle: QGraphicsViewH; retval: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_foregroundBrush'; procedure QGraphicsView_setForegroundBrush(handle: QGraphicsViewH; brush: QBrushH); cdecl; external Qt4PasLib name 'QGraphicsView_setForegroundBrush'; procedure QGraphicsView_invalidateScene(handle: QGraphicsViewH; rect: QRectFH = nil; layers: QGraphicsSceneSceneLayers = QGraphicsSceneAllLayers); cdecl; external Qt4PasLib name 'QGraphicsView_invalidateScene'; procedure QGraphicsView_updateSceneRect(handle: QGraphicsViewH; rect: QRectFH); cdecl; external Qt4PasLib name 'QGraphicsView_updateSceneRect'; type QSslKeyType = ( // QSsl::KeyType (1) QSslPrivateKey, QSslPublicKey ); QSslEncodingFormat = ( // QSsl::EncodingFormat (1) QSslPem, QSslDer ); QSslKeyAlgorithm = ( // QSsl::KeyAlgorithm (1) QSslRsa, QSslDsa ); QSslAlternateNameEntryType = ( // QSsl::AlternateNameEntryType (1) QSslEmailEntry, QSslDnsEntry ); QSslSslProtocol = ( //QSsl::SslProtocol (2) QSslUnknownProtocol = -1, QSslSslV3, QSslSslV2, QSslTlsV1, QSslAnyProtocol ); function QSslCipher_create(): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create'; procedure QSslCipher_destroy(handle: QSslCipherH); cdecl; external Qt4PasLib name 'QSslCipher_destroy'; function QSslCipher_create(name: PWideString; protocol: QSslSslProtocol): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create2'; function QSslCipher_create(other: QSslCipherH): QSslCipherH; cdecl; external Qt4PasLib name 'QSslCipher_create3'; function QSslCipher_isNull(handle: QSslCipherH): Boolean; cdecl; external Qt4PasLib name 'QSslCipher_isNull'; procedure QSslCipher_name(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_name'; function QSslCipher_supportedBits(handle: QSslCipherH): Integer; cdecl; external Qt4PasLib name 'QSslCipher_supportedBits'; function QSslCipher_usedBits(handle: QSslCipherH): Integer; cdecl; external Qt4PasLib name 'QSslCipher_usedBits'; procedure QSslCipher_keyExchangeMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_keyExchangeMethod'; procedure QSslCipher_authenticationMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_authenticationMethod'; procedure QSslCipher_encryptionMethod(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_encryptionMethod'; procedure QSslCipher_protocolString(handle: QSslCipherH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslCipher_protocolString'; function QSslCipher_protocol(handle: QSslCipherH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslCipher_protocol'; function QSslKey_create(): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create'; procedure QSslKey_destroy(handle: QSslKeyH); cdecl; external Qt4PasLib name 'QSslKey_destroy'; function QSslKey_create(encoded: QByteArrayH; algorithm: QSslKeyAlgorithm; format: QSslEncodingFormat = QSslPem; _type: QSslKeyType = QSslPrivateKey; passPhrase: QByteArrayH = nil): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create2'; function QSslKey_create(device: QIODeviceH; algorithm: QSslKeyAlgorithm; format: QSslEncodingFormat = QSslPem; _type: QSslKeyType = QSslPrivateKey; passPhrase: QByteArrayH = nil): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create3'; function QSslKey_create(other: QSslKeyH): QSslKeyH; cdecl; external Qt4PasLib name 'QSslKey_create4'; function QSslKey_isNull(handle: QSslKeyH): Boolean; cdecl; external Qt4PasLib name 'QSslKey_isNull'; procedure QSslKey_clear(handle: QSslKeyH); cdecl; external Qt4PasLib name 'QSslKey_clear'; function QSslKey_length(handle: QSslKeyH): Integer; cdecl; external Qt4PasLib name 'QSslKey_length'; function QSslKey_type(handle: QSslKeyH): QSslKeyType; cdecl; external Qt4PasLib name 'QSslKey_type'; function QSslKey_algorithm(handle: QSslKeyH): QSslKeyAlgorithm; cdecl; external Qt4PasLib name 'QSslKey_algorithm'; procedure QSslKey_toPem(handle: QSslKeyH; retval: QByteArrayH; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslKey_toPem'; procedure QSslKey_toDer(handle: QSslKeyH; retval: QByteArrayH; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslKey_toDer'; function QSslKey_handle(handle: QSslKeyH): QtHANDLE; cdecl; external Qt4PasLib name 'QSslKey_handle'; type QSslErrorSslError = ( //QSslError::SslError (2) QSslErrorUnspecifiedError = -1, QSslErrorNoError, QSslErrorUnableToGetIssuerCertificate, QSslErrorUnableToDecryptCertificateSignature, QSslErrorUnableToDecodeIssuerPublicKey, QSslErrorCertificateSignatureFailed, QSslErrorCertificateNotYetValid, QSslErrorCertificateExpired, QSslErrorInvalidNotBeforeField, QSslErrorInvalidNotAfterField, QSslErrorSelfSignedCertificate, QSslErrorSelfSignedCertificateInChain, QSslErrorUnableToGetLocalIssuerCertificate, QSslErrorUnableToVerifyFirstCertificate, QSslErrorCertificateRevoked, QSslErrorInvalidCaCertificate, QSslErrorPathLengthExceeded, QSslErrorInvalidPurpose, QSslErrorCertificateUntrusted, QSslErrorCertificateRejected, QSslErrorSubjectIssuerMismatch, QSslErrorAuthorityIssuerSerialNumberMismatch, QSslErrorNoPeerCertificate, QSslErrorHostNameMismatch, QSslErrorNoSslSupport ); function QSslError_create(error: QSslErrorSslError = QSslErrorNoError; certificate: QSslCertificateH = nil): QSslErrorH; cdecl; external Qt4PasLib name 'QSslError_create'; procedure QSslError_destroy(handle: QSslErrorH); cdecl; external Qt4PasLib name 'QSslError_destroy'; function QSslError_create(other: QSslErrorH): QSslErrorH; cdecl; external Qt4PasLib name 'QSslError_create2'; function QSslError_error(handle: QSslErrorH): QSslErrorSslError; cdecl; external Qt4PasLib name 'QSslError_error'; procedure QSslError_errorString(handle: QSslErrorH; retval: PWideString); cdecl; external Qt4PasLib name 'QSslError_errorString'; procedure QSslError_certificate(handle: QSslErrorH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslError_certificate'; type QAbstractSocketSocketState = ( // QAbstractSocket::SocketState (1) QAbstractSocketUnconnectedState, QAbstractSocketHostLookupState, QAbstractSocketConnectingState, QAbstractSocketConnectedState, QAbstractSocketBoundState, QAbstractSocketListeningState, QAbstractSocketClosingState ); QAbstractSocketSocketType = ( //QAbstractSocket::SocketType (2) QAbstractSocketUnknownSocketType = -1, QAbstractSocketTcpSocket, QAbstractSocketUdpSocket ); QAbstractSocketNetworkLayerProtocol = ( //QAbstractSocket::NetworkLayerProtocol (2) QAbstractSocketUnknownNetworkLayerProtocol = -1, QAbstractSocketIPv4Protocol, QAbstractSocketIPv6Protocol ); QAbstractSocketSocketError = ( //QAbstractSocket::SocketError (2) QAbstractSocketUnknownSocketError = -1, QAbstractSocketConnectionRefusedError, QAbstractSocketRemoteHostClosedError, QAbstractSocketHostNotFoundError, QAbstractSocketSocketAccessError, QAbstractSocketSocketResourceError, QAbstractSocketSocketTimeoutError, QAbstractSocketDatagramTooLargeError, QAbstractSocketNetworkError, QAbstractSocketAddressInUseError, QAbstractSocketSocketAddressNotAvailableError, QAbstractSocketUnsupportedSocketOperationError, QAbstractSocketUnfinishedSocketOperationError, QAbstractSocketProxyAuthenticationRequiredError, QAbstractSocketSslHandshakeFailedError, QAbstractSocketProxyConnectionRefusedError, QAbstractSocketProxyConnectionClosedError, QAbstractSocketProxyConnectionTimeoutError, QAbstractSocketProxyNotFoundError, QAbstractSocketProxyProtocolError ); function QAbstractSocket_create(socketType: QAbstractSocketSocketType; parent: QObjectH): QAbstractSocketH; cdecl; external Qt4PasLib name 'QAbstractSocket_create'; procedure QAbstractSocket_destroy(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_destroy'; procedure QAbstractSocket_connectToHost(handle: QAbstractSocketH; hostName: PWideString; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QAbstractSocket_connectToHost'; procedure QAbstractSocket_connectToHost(handle: QAbstractSocketH; address: QHostAddressH; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QAbstractSocket_connectToHost2'; procedure QAbstractSocket_disconnectFromHost(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_disconnectFromHost'; function QAbstractSocket_isValid(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_isValid'; function QAbstractSocket_bytesAvailable(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_bytesAvailable'; function QAbstractSocket_bytesToWrite(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_bytesToWrite'; function QAbstractSocket_canReadLine(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_canReadLine'; function QAbstractSocket_localPort(handle: QAbstractSocketH): Word; cdecl; external Qt4PasLib name 'QAbstractSocket_localPort'; procedure QAbstractSocket_localAddress(handle: QAbstractSocketH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QAbstractSocket_localAddress'; function QAbstractSocket_peerPort(handle: QAbstractSocketH): Word; cdecl; external Qt4PasLib name 'QAbstractSocket_peerPort'; procedure QAbstractSocket_peerAddress(handle: QAbstractSocketH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QAbstractSocket_peerAddress'; procedure QAbstractSocket_peerName(handle: QAbstractSocketH; retval: PWideString); cdecl; external Qt4PasLib name 'QAbstractSocket_peerName'; function QAbstractSocket_readBufferSize(handle: QAbstractSocketH): int64; cdecl; external Qt4PasLib name 'QAbstractSocket_readBufferSize'; procedure QAbstractSocket_setReadBufferSize(handle: QAbstractSocketH; size: int64); cdecl; external Qt4PasLib name 'QAbstractSocket_setReadBufferSize'; procedure QAbstractSocket_abort(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_abort'; function QAbstractSocket_socketDescriptor(handle: QAbstractSocketH): Integer; cdecl; external Qt4PasLib name 'QAbstractSocket_socketDescriptor'; function QAbstractSocket_socketType(handle: QAbstractSocketH): QAbstractSocketSocketType; cdecl; external Qt4PasLib name 'QAbstractSocket_socketType'; function QAbstractSocket_error(handle: QAbstractSocketH): QAbstractSocketSocketError; cdecl; external Qt4PasLib name 'QAbstractSocket_error'; procedure QAbstractSocket_close(handle: QAbstractSocketH); cdecl; external Qt4PasLib name 'QAbstractSocket_close'; function QAbstractSocket_isSequential(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_isSequential'; function QAbstractSocket_atEnd(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_atEnd'; function QAbstractSocket_flush(handle: QAbstractSocketH): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_flush'; function QAbstractSocket_waitForConnected(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForConnected'; function QAbstractSocket_waitForReadyRead(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForReadyRead'; function QAbstractSocket_waitForBytesWritten(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForBytesWritten'; function QAbstractSocket_waitForDisconnected(handle: QAbstractSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QAbstractSocket_waitForDisconnected'; procedure QAbstractSocket_setProxy(handle: QAbstractSocketH; networkProxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QAbstractSocket_setProxy'; procedure QAbstractSocket_proxy(handle: QAbstractSocketH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QAbstractSocket_proxy'; type QAbstractSocket_hostFound_Event = procedure () of object cdecl; QAbstractSocket_connected_Event = procedure () of object cdecl; QAbstractSocket_disconnected_Event = procedure () of object cdecl; QAbstractSocket_stateChanged_Event = procedure (AnonParam1: QAbstractSocketSocketState) of object cdecl; QAbstractSocket_error_Event = procedure (AnonParam1: QAbstractSocketSocketError) of object cdecl; QAbstractSocket_proxyAuthenticationRequired_Event = procedure (proxy: QNetworkProxyH; authenticator: QAuthenticatorH) of object cdecl; type QUdpSocketBindFlag = cardinal; // QUdpSocket::BindFlag QUdpSocketBindMode = QUdpSocketBindFlag; //QFlags<> (3) const QUdpSocketDefaultForPlatform = $0; QUdpSocketShareAddress = $1; QUdpSocketDontShareAddress = $2; QUdpSocketReuseAddressHint = $4; function QUdpSocket_create(parent: QObjectH = nil): QUdpSocketH; cdecl; external Qt4PasLib name 'QUdpSocket_create'; procedure QUdpSocket_destroy(handle: QUdpSocketH); cdecl; external Qt4PasLib name 'QUdpSocket_destroy'; function QUdpSocket_bind(handle: QUdpSocketH; address: QHostAddressH; port: Word): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind'; function QUdpSocket_bind(handle: QUdpSocketH; port: Word = 0): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind2'; function QUdpSocket_bind(handle: QUdpSocketH; address: QHostAddressH; port: Word; mode: QUdpSocketBindMode): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind3'; function QUdpSocket_bind(handle: QUdpSocketH; port: Word; mode: QUdpSocketBindMode): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_bind4'; function QUdpSocket_hasPendingDatagrams(handle: QUdpSocketH): Boolean; cdecl; external Qt4PasLib name 'QUdpSocket_hasPendingDatagrams'; function QUdpSocket_pendingDatagramSize(handle: QUdpSocketH): int64; cdecl; external Qt4PasLib name 'QUdpSocket_pendingDatagramSize'; function QUdpSocket_readDatagram(handle: QUdpSocketH; data: PAnsiChar; maxlen: int64; host: QHostAddressH = nil; port: PWord = nil): int64; cdecl; external Qt4PasLib name 'QUdpSocket_readDatagram'; function QUdpSocket_writeDatagram(handle: QUdpSocketH; data: PAnsiChar; len: int64; host: QHostAddressH; port: Word): int64; cdecl; external Qt4PasLib name 'QUdpSocket_writeDatagram'; function QUdpSocket_writeDatagram(handle: QUdpSocketH; datagram: QByteArrayH; host: QHostAddressH; port: Word): int64; cdecl; external Qt4PasLib name 'QUdpSocket_writeDatagram2'; function QTcpSocket_create(parent: QObjectH = nil): QTcpSocketH; cdecl; external Qt4PasLib name 'QTcpSocket_create'; procedure QTcpSocket_destroy(handle: QTcpSocketH); cdecl; external Qt4PasLib name 'QTcpSocket_destroy'; function QTcpServer_create(parent: QObjectH = nil): QTcpServerH; cdecl; external Qt4PasLib name 'QTcpServer_create'; procedure QTcpServer_destroy(handle: QTcpServerH); cdecl; external Qt4PasLib name 'QTcpServer_destroy'; function QTcpServer_listen(handle: QTcpServerH; address: QHostAddressH; port: Word = 0): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_listen'; procedure QTcpServer_close(handle: QTcpServerH); cdecl; external Qt4PasLib name 'QTcpServer_close'; function QTcpServer_isListening(handle: QTcpServerH): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_isListening'; procedure QTcpServer_setMaxPendingConnections(handle: QTcpServerH; numConnections: Integer); cdecl; external Qt4PasLib name 'QTcpServer_setMaxPendingConnections'; function QTcpServer_maxPendingConnections(handle: QTcpServerH): Integer; cdecl; external Qt4PasLib name 'QTcpServer_maxPendingConnections'; function QTcpServer_serverPort(handle: QTcpServerH): Word; cdecl; external Qt4PasLib name 'QTcpServer_serverPort'; procedure QTcpServer_serverAddress(handle: QTcpServerH; retval: QHostAddressH); cdecl; external Qt4PasLib name 'QTcpServer_serverAddress'; function QTcpServer_socketDescriptor(handle: QTcpServerH): Integer; cdecl; external Qt4PasLib name 'QTcpServer_socketDescriptor'; function QTcpServer_setSocketDescriptor(handle: QTcpServerH; socketDescriptor: Integer): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_setSocketDescriptor'; function QTcpServer_waitForNewConnection(handle: QTcpServerH; msec: Integer = 0; timedOut: PBoolean = nil): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_waitForNewConnection'; function QTcpServer_hasPendingConnections(handle: QTcpServerH): Boolean; cdecl; external Qt4PasLib name 'QTcpServer_hasPendingConnections'; function QTcpServer_nextPendingConnection(handle: QTcpServerH): QTcpSocketH; cdecl; external Qt4PasLib name 'QTcpServer_nextPendingConnection'; function QTcpServer_serverError(handle: QTcpServerH): QAbstractSocketSocketError; cdecl; external Qt4PasLib name 'QTcpServer_serverError'; procedure QTcpServer_errorString(handle: QTcpServerH; retval: PWideString); cdecl; external Qt4PasLib name 'QTcpServer_errorString'; procedure QTcpServer_setProxy(handle: QTcpServerH; networkProxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QTcpServer_setProxy'; procedure QTcpServer_proxy(handle: QTcpServerH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QTcpServer_proxy'; type QTcpServer_newConnection_Event = procedure () of object cdecl; type QSslSocketSslMode = ( // QSslSocket::SslMode (1) QSslSocketUnencryptedMode, QSslSocketSslClientMode, QSslSocketSslServerMode ); QSslSocketPeerVerifyMode = ( // QSslSocket::PeerVerifyMode (1) QSslSocketVerifyNone, QSslSocketQueryPeer, QSslSocketVerifyPeer, QSslSocketAutoVerifyPeer ); function QSslConfiguration_create(): QSslConfigurationH; cdecl; external Qt4PasLib name 'QSslConfiguration_create'; procedure QSslConfiguration_destroy(handle: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_destroy'; function QSslConfiguration_create(other: QSslConfigurationH): QSslConfigurationH; cdecl; external Qt4PasLib name 'QSslConfiguration_create2'; function QSslConfiguration_isNull(handle: QSslConfigurationH): Boolean; cdecl; external Qt4PasLib name 'QSslConfiguration_isNull'; function QSslConfiguration_protocol(handle: QSslConfigurationH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslConfiguration_protocol'; procedure QSslConfiguration_setProtocol(handle: QSslConfigurationH; protocol: QSslSslProtocol); cdecl; external Qt4PasLib name 'QSslConfiguration_setProtocol'; function QSslConfiguration_peerVerifyMode(handle: QSslConfigurationH): QSslSocketPeerVerifyMode; cdecl; external Qt4PasLib name 'QSslConfiguration_peerVerifyMode'; procedure QSslConfiguration_setPeerVerifyMode(handle: QSslConfigurationH; mode: QSslSocketPeerVerifyMode); cdecl; external Qt4PasLib name 'QSslConfiguration_setPeerVerifyMode'; function QSslConfiguration_peerVerifyDepth(handle: QSslConfigurationH): Integer; cdecl; external Qt4PasLib name 'QSslConfiguration_peerVerifyDepth'; procedure QSslConfiguration_setPeerVerifyDepth(handle: QSslConfigurationH; depth: Integer); cdecl; external Qt4PasLib name 'QSslConfiguration_setPeerVerifyDepth'; procedure QSslConfiguration_localCertificate(handle: QSslConfigurationH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_localCertificate'; procedure QSslConfiguration_setLocalCertificate(handle: QSslConfigurationH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_setLocalCertificate'; procedure QSslConfiguration_peerCertificate(handle: QSslConfigurationH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslConfiguration_peerCertificate'; procedure QSslConfiguration_sessionCipher(handle: QSslConfigurationH; retval: QSslCipherH); cdecl; external Qt4PasLib name 'QSslConfiguration_sessionCipher'; procedure QSslConfiguration_privateKey(handle: QSslConfigurationH; retval: QSslKeyH); cdecl; external Qt4PasLib name 'QSslConfiguration_privateKey'; procedure QSslConfiguration_setPrivateKey(handle: QSslConfigurationH; key: QSslKeyH); cdecl; external Qt4PasLib name 'QSslConfiguration_setPrivateKey'; procedure QSslConfiguration_defaultConfiguration(retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_defaultConfiguration'; procedure QSslConfiguration_setDefaultConfiguration(configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslConfiguration_setDefaultConfiguration'; function QSslSocket_create(parent: QObjectH = nil): QSslSocketH; cdecl; external Qt4PasLib name 'QSslSocket_create'; procedure QSslSocket_destroy(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_destroy'; procedure QSslSocket_connectToHostEncrypted(handle: QSslSocketH; hostName: PWideString; port: Word; mode: QIODeviceOpenMode); cdecl; external Qt4PasLib name 'QSslSocket_connectToHostEncrypted'; function QSslSocket_mode(handle: QSslSocketH): QSslSocketSslMode; cdecl; external Qt4PasLib name 'QSslSocket_mode'; function QSslSocket_isEncrypted(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_isEncrypted'; function QSslSocket_protocol(handle: QSslSocketH): QSslSslProtocol; cdecl; external Qt4PasLib name 'QSslSocket_protocol'; procedure QSslSocket_setProtocol(handle: QSslSocketH; protocol: QSslSslProtocol); cdecl; external Qt4PasLib name 'QSslSocket_setProtocol'; function QSslSocket_peerVerifyMode(handle: QSslSocketH): QSslSocketPeerVerifyMode; cdecl; external Qt4PasLib name 'QSslSocket_peerVerifyMode'; procedure QSslSocket_setPeerVerifyMode(handle: QSslSocketH; mode: QSslSocketPeerVerifyMode); cdecl; external Qt4PasLib name 'QSslSocket_setPeerVerifyMode'; function QSslSocket_peerVerifyDepth(handle: QSslSocketH): Integer; cdecl; external Qt4PasLib name 'QSslSocket_peerVerifyDepth'; procedure QSslSocket_setPeerVerifyDepth(handle: QSslSocketH; depth: Integer); cdecl; external Qt4PasLib name 'QSslSocket_setPeerVerifyDepth'; function QSslSocket_bytesAvailable(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_bytesAvailable'; function QSslSocket_bytesToWrite(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_bytesToWrite'; function QSslSocket_canReadLine(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_canReadLine'; procedure QSslSocket_close(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_close'; function QSslSocket_atEnd(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_atEnd'; function QSslSocket_flush(handle: QSslSocketH): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_flush'; procedure QSslSocket_abort(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_abort'; procedure QSslSocket_setReadBufferSize(handle: QSslSocketH; size: int64); cdecl; external Qt4PasLib name 'QSslSocket_setReadBufferSize'; function QSslSocket_encryptedBytesAvailable(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_encryptedBytesAvailable'; function QSslSocket_encryptedBytesToWrite(handle: QSslSocketH): int64; cdecl; external Qt4PasLib name 'QSslSocket_encryptedBytesToWrite'; procedure QSslSocket_sslConfiguration(handle: QSslSocketH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslSocket_sslConfiguration'; procedure QSslSocket_setSslConfiguration(handle: QSslSocketH; config: QSslConfigurationH); cdecl; external Qt4PasLib name 'QSslSocket_setSslConfiguration'; procedure QSslSocket_setLocalCertificate(handle: QSslSocketH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_setLocalCertificate'; procedure QSslSocket_setLocalCertificate(handle: QSslSocketH; fileName: PWideString; format: QSslEncodingFormat = QSslPem); cdecl; external Qt4PasLib name 'QSslSocket_setLocalCertificate2'; procedure QSslSocket_localCertificate(handle: QSslSocketH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_localCertificate'; procedure QSslSocket_peerCertificate(handle: QSslSocketH; retval: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_peerCertificate'; procedure QSslSocket_sessionCipher(handle: QSslSocketH; retval: QSslCipherH); cdecl; external Qt4PasLib name 'QSslSocket_sessionCipher'; procedure QSslSocket_setPrivateKey(handle: QSslSocketH; key: QSslKeyH); cdecl; external Qt4PasLib name 'QSslSocket_setPrivateKey'; procedure QSslSocket_setPrivateKey(handle: QSslSocketH; fileName: PWideString; algorithm: QSslKeyAlgorithm = QSslRsa; format: QSslEncodingFormat = QSslPem; passPhrase: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QSslSocket_setPrivateKey2'; procedure QSslSocket_privateKey(handle: QSslSocketH; retval: QSslKeyH); cdecl; external Qt4PasLib name 'QSslSocket_privateKey'; procedure QSslSocket_setCiphers(handle: QSslSocketH; ciphers: PWideString); cdecl; external Qt4PasLib name 'QSslSocket_setCiphers'; procedure QSslSocket_addCaCertificate(handle: QSslSocketH; certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_addCaCertificate'; procedure QSslSocket_addDefaultCaCertificate(certificate: QSslCertificateH); cdecl; external Qt4PasLib name 'QSslSocket_addDefaultCaCertificate'; function QSslSocket_waitForConnected(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForConnected'; function QSslSocket_waitForEncrypted(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForEncrypted'; function QSslSocket_waitForReadyRead(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForReadyRead'; function QSslSocket_waitForBytesWritten(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForBytesWritten'; function QSslSocket_waitForDisconnected(handle: QSslSocketH; msecs: Integer = 30000): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_waitForDisconnected'; function QSslSocket_supportsSsl(): Boolean; cdecl; external Qt4PasLib name 'QSslSocket_supportsSsl'; procedure QSslSocket_startClientEncryption(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_startClientEncryption'; procedure QSslSocket_startServerEncryption(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_startServerEncryption'; procedure QSslSocket_ignoreSslErrors(handle: QSslSocketH); cdecl; external Qt4PasLib name 'QSslSocket_ignoreSslErrors'; type QNetworkAccessManagerOperation = ( //QNetworkAccessManager::Operation (2) QNetworkAccessManagerUnknownOperation = 0, QNetworkAccessManagerHeadOperation = 1, QNetworkAccessManagerGetOperation, QNetworkAccessManagerPutOperation, QNetworkAccessManagerPostOperation ); function QNetworkAccessManager_create(parent: QObjectH = nil): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_create'; procedure QNetworkAccessManager_destroy(handle: QNetworkAccessManagerH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_destroy'; procedure QNetworkAccessManager_proxy(handle: QNetworkAccessManagerH; retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_proxy'; procedure QNetworkAccessManager_setProxy(handle: QNetworkAccessManagerH; proxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setProxy'; function QNetworkAccessManager_proxyFactory(handle: QNetworkAccessManagerH): QNetworkProxyFactoryH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_proxyFactory'; procedure QNetworkAccessManager_setProxyFactory(handle: QNetworkAccessManagerH; factory: QNetworkProxyFactoryH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setProxyFactory'; function QNetworkAccessManager_cache(handle: QNetworkAccessManagerH): QAbstractNetworkCacheH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_cache'; procedure QNetworkAccessManager_setCache(handle: QNetworkAccessManagerH; cache: QAbstractNetworkCacheH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setCache'; function QNetworkAccessManager_cookieJar(handle: QNetworkAccessManagerH): QNetworkCookieJarH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_cookieJar'; procedure QNetworkAccessManager_setCookieJar(handle: QNetworkAccessManagerH; cookieJar: QNetworkCookieJarH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_setCookieJar'; function QNetworkAccessManager_head(handle: QNetworkAccessManagerH; request: QNetworkRequestH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_head'; function QNetworkAccessManager_get(handle: QNetworkAccessManagerH; request: QNetworkRequestH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_get'; function QNetworkAccessManager_post(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QIODeviceH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_post'; function QNetworkAccessManager_post(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QByteArrayH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_post2'; function QNetworkAccessManager_put(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QIODeviceH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_put'; function QNetworkAccessManager_put(handle: QNetworkAccessManagerH; request: QNetworkRequestH; data: QByteArrayH): QNetworkReplyH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_put2'; type QNetworkAccessManager_proxyAuthenticationRequired_Event = procedure (proxy: QNetworkProxyH; authenticator: QAuthenticatorH) of object cdecl; QNetworkAccessManager_authenticationRequired_Event = procedure (reply: QNetworkReplyH; authenticator: QAuthenticatorH) of object cdecl; QNetworkAccessManager_finished_Event = procedure (reply: QNetworkReplyH) of object cdecl; type QNetworkRequestKnownHeaders = ( // QNetworkRequest::KnownHeaders (1) QNetworkRequestContentTypeHeader, QNetworkRequestContentLengthHeader, QNetworkRequestLocationHeader, QNetworkRequestLastModifiedHeader, QNetworkRequestCookieHeader, QNetworkRequestSetCookieHeader ); QNetworkRequestCacheLoadControl = ( // QNetworkRequest::CacheLoadControl (1) QNetworkRequestAlwaysNetwork, QNetworkRequestPreferNetwork, QNetworkRequestPreferCache, QNetworkRequestAlwaysCache ); QNetworkRequestAttribute = ( //QNetworkRequest::Attribute (2) QNetworkRequestHttpStatusCodeAttribute, QNetworkRequestHttpReasonPhraseAttribute, QNetworkRequestRedirectionTargetAttribute, QNetworkRequestConnectionEncryptedAttribute, QNetworkRequestCacheLoadControlAttribute, QNetworkRequestCacheSaveControlAttribute, QNetworkRequestSourceIsFromCacheAttribute, QNetworkRequestUser = 1000, QNetworkRequestUserMax = 32767 ); function QNetworkRequest_create(url: QUrlH = nil): QNetworkRequestH; cdecl; external Qt4PasLib name 'QNetworkRequest_create'; procedure QNetworkRequest_destroy(handle: QNetworkRequestH); cdecl; external Qt4PasLib name 'QNetworkRequest_destroy'; function QNetworkRequest_create(other: QNetworkRequestH): QNetworkRequestH; cdecl; external Qt4PasLib name 'QNetworkRequest_create2'; procedure QNetworkRequest_url(handle: QNetworkRequestH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkRequest_url'; procedure QNetworkRequest_setUrl(handle: QNetworkRequestH; url: QUrlH); cdecl; external Qt4PasLib name 'QNetworkRequest_setUrl'; procedure QNetworkRequest_header(handle: QNetworkRequestH; retval: QVariantH; header: QNetworkRequestKnownHeaders); cdecl; external Qt4PasLib name 'QNetworkRequest_header'; procedure QNetworkRequest_setHeader(handle: QNetworkRequestH; header: QNetworkRequestKnownHeaders; value: QVariantH); cdecl; external Qt4PasLib name 'QNetworkRequest_setHeader'; function QNetworkRequest_hasRawHeader(handle: QNetworkRequestH; headerName: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QNetworkRequest_hasRawHeader'; procedure QNetworkRequest_rawHeader(handle: QNetworkRequestH; retval: QByteArrayH; headerName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkRequest_rawHeader'; procedure QNetworkRequest_setRawHeader(handle: QNetworkRequestH; headerName: QByteArrayH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkRequest_setRawHeader'; procedure QNetworkRequest_attribute(handle: QNetworkRequestH; retval: QVariantH; code: QNetworkRequestAttribute; defaultValue: QVariantH = nil); cdecl; external Qt4PasLib name 'QNetworkRequest_attribute'; procedure QNetworkRequest_setAttribute(handle: QNetworkRequestH; code: QNetworkRequestAttribute; value: QVariantH); cdecl; external Qt4PasLib name 'QNetworkRequest_setAttribute'; procedure QNetworkRequest_sslConfiguration(handle: QNetworkRequestH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkRequest_sslConfiguration'; procedure QNetworkRequest_setSslConfiguration(handle: QNetworkRequestH; configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkRequest_setSslConfiguration'; type QNetworkReplyNetworkError = ( //QNetworkReply::NetworkError (2) QNetworkReplyNoError = 0, QNetworkReplyConnectionRefusedError = 1, QNetworkReplyRemoteHostClosedError, QNetworkReplyHostNotFoundError, QNetworkReplyTimeoutError, QNetworkReplyOperationCanceledError, QNetworkReplySslHandshakeFailedError, QNetworkReplyUnknownNetworkError = 99, QNetworkReplyProxyConnectionRefusedError = 101, QNetworkReplyProxyConnectionClosedError, QNetworkReplyProxyNotFoundError, QNetworkReplyProxyTimeoutError, QNetworkReplyProxyAuthenticationRequiredError, QNetworkReplyUnknownProxyError = 199, QNetworkReplyContentAccessDenied = 201, QNetworkReplyContentOperationNotPermittedError, QNetworkReplyContentNotFoundError, QNetworkReplyAuthenticationRequiredError, QNetworkReplyUnknownContentError = 299, QNetworkReplyProtocolUnknownError = 301, QNetworkReplyProtocolInvalidOperationError, QNetworkReplyProtocolFailure = 399 ); procedure QNetworkReply_abort(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_abort'; procedure QNetworkReply_close(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_close'; function QNetworkReply_isSequential(handle: QNetworkReplyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkReply_isSequential'; function QNetworkReply_readBufferSize(handle: QNetworkReplyH): int64; cdecl; external Qt4PasLib name 'QNetworkReply_readBufferSize'; procedure QNetworkReply_setReadBufferSize(handle: QNetworkReplyH; size: int64); cdecl; external Qt4PasLib name 'QNetworkReply_setReadBufferSize'; function QNetworkReply_manager(handle: QNetworkReplyH): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QNetworkReply_manager'; function QNetworkReply_operation(handle: QNetworkReplyH): QNetworkAccessManagerOperation; cdecl; external Qt4PasLib name 'QNetworkReply_operation'; procedure QNetworkReply_request(handle: QNetworkReplyH; retval: QNetworkRequestH); cdecl; external Qt4PasLib name 'QNetworkReply_request'; function QNetworkReply_error(handle: QNetworkReplyH): QNetworkReplyNetworkError; cdecl; external Qt4PasLib name 'QNetworkReply_error'; procedure QNetworkReply_url(handle: QNetworkReplyH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkReply_url'; procedure QNetworkReply_header(handle: QNetworkReplyH; retval: QVariantH; header: QNetworkRequestKnownHeaders); cdecl; external Qt4PasLib name 'QNetworkReply_header'; function QNetworkReply_hasRawHeader(handle: QNetworkReplyH; headerName: QByteArrayH): Boolean; cdecl; external Qt4PasLib name 'QNetworkReply_hasRawHeader'; procedure QNetworkReply_rawHeader(handle: QNetworkReplyH; retval: QByteArrayH; headerName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkReply_rawHeader'; procedure QNetworkReply_attribute(handle: QNetworkReplyH; retval: QVariantH; code: QNetworkRequestAttribute); cdecl; external Qt4PasLib name 'QNetworkReply_attribute'; procedure QNetworkReply_sslConfiguration(handle: QNetworkReplyH; retval: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkReply_sslConfiguration'; procedure QNetworkReply_setSslConfiguration(handle: QNetworkReplyH; configuration: QSslConfigurationH); cdecl; external Qt4PasLib name 'QNetworkReply_setSslConfiguration'; procedure QNetworkReply_ignoreSslErrors(handle: QNetworkReplyH); cdecl; external Qt4PasLib name 'QNetworkReply_ignoreSslErrors'; type QNetworkReply_metaDataChanged_Event = procedure () of object cdecl; QNetworkReply_finished_Event = procedure () of object cdecl; QNetworkReply_error_Event = procedure (AnonParam1: QNetworkReplyNetworkError) of object cdecl; QNetworkReply_uploadProgress_Event = procedure (bytesSent: int64; bytesTotal: int64) of object cdecl; QNetworkReply_downloadProgress_Event = procedure (bytesReceived: int64; bytesTotal: int64) of object cdecl; type QNetworkCookieRawForm = ( // QNetworkCookie::RawForm (1) QNetworkCookieNameAndValueOnly, QNetworkCookieFull ); function QNetworkCookie_create(name: QByteArrayH = nil; value: QByteArrayH = nil): QNetworkCookieH; cdecl; external Qt4PasLib name 'QNetworkCookie_create'; procedure QNetworkCookie_destroy(handle: QNetworkCookieH); cdecl; external Qt4PasLib name 'QNetworkCookie_destroy'; function QNetworkCookie_create(other: QNetworkCookieH): QNetworkCookieH; cdecl; external Qt4PasLib name 'QNetworkCookie_create2'; function QNetworkCookie_isSecure(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isSecure'; procedure QNetworkCookie_setSecure(handle: QNetworkCookieH; enable: Boolean); cdecl; external Qt4PasLib name 'QNetworkCookie_setSecure'; function QNetworkCookie_isHttpOnly(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isHttpOnly'; procedure QNetworkCookie_setHttpOnly(handle: QNetworkCookieH; enable: Boolean); cdecl; external Qt4PasLib name 'QNetworkCookie_setHttpOnly'; function QNetworkCookie_isSessionCookie(handle: QNetworkCookieH): Boolean; cdecl; external Qt4PasLib name 'QNetworkCookie_isSessionCookie'; procedure QNetworkCookie_expirationDate(handle: QNetworkCookieH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QNetworkCookie_expirationDate'; procedure QNetworkCookie_setExpirationDate(handle: QNetworkCookieH; date: QDateTimeH); cdecl; external Qt4PasLib name 'QNetworkCookie_setExpirationDate'; procedure QNetworkCookie_domain(handle: QNetworkCookieH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_domain'; procedure QNetworkCookie_setDomain(handle: QNetworkCookieH; domain: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_setDomain'; procedure QNetworkCookie_path(handle: QNetworkCookieH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_path'; procedure QNetworkCookie_setPath(handle: QNetworkCookieH; path: PWideString); cdecl; external Qt4PasLib name 'QNetworkCookie_setPath'; procedure QNetworkCookie_name(handle: QNetworkCookieH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_name'; procedure QNetworkCookie_setName(handle: QNetworkCookieH; cookieName: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_setName'; procedure QNetworkCookie_value(handle: QNetworkCookieH; retval: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_value'; procedure QNetworkCookie_setValue(handle: QNetworkCookieH; value: QByteArrayH); cdecl; external Qt4PasLib name 'QNetworkCookie_setValue'; procedure QNetworkCookie_toRawForm(handle: QNetworkCookieH; retval: QByteArrayH; form: QNetworkCookieRawForm = QNetworkCookieFull); cdecl; external Qt4PasLib name 'QNetworkCookie_toRawForm'; function QNetworkCookieJar_create(parent: QObjectH = nil): QNetworkCookieJarH; cdecl; external Qt4PasLib name 'QNetworkCookieJar_create'; procedure QNetworkCookieJar_destroy(handle: QNetworkCookieJarH); cdecl; external Qt4PasLib name 'QNetworkCookieJar_destroy'; function QLCLNetworkCookieJar_create(parent: QObjectH = nil): QLCLNetworkCookieJarH; cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_create'; procedure QLCLNetworkCookieJar_destroy(handle: QLCLNetworkCookieJarH); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_destroy'; procedure QLCLNetworkCookieJar_setRawCookies(handle: QLCLNetworkCookieJarH; rawCookies: PAnsiChar); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_setRawCookies'; procedure QLCLNetworkCookieJar_getRawCookies(handle: QLCLNetworkCookieJarH; rawCookies: QByteArrayH); cdecl; external Qt4PasLib name 'QLCLNetworkCookieJar_getRawCookies'; type QNetworkProxyQueryQueryType = ( //QNetworkProxyQuery::QueryType (2) QNetworkProxyQueryTcpSocket, QNetworkProxyQueryUdpSocket, QNetworkProxyQueryTcpServer = 100, QNetworkProxyQueryUrlRequest ); type QNetworkProxyProxyType = ( // QNetworkProxy::ProxyType (1) QNetworkProxyDefaultProxy, QNetworkProxySocks5Proxy, QNetworkProxyNoProxy, QNetworkProxyHttpProxy, QNetworkProxyHttpCachingProxy, QNetworkProxyFtpCachingProxy ); type QNetworkProxyCapability = cardinal; // QNetworkProxy::Capability QNetworkProxyCapabilities = QNetworkProxyCapability; //QFlags<> (3) const QNetworkProxyTunnelingCapability = $0001; QNetworkProxyListeningCapability = $0002; QNetworkProxyUdpTunnelingCapability = $0004; QNetworkProxyCachingCapability = $0008; QNetworkProxyHostNameLookupCapability = $0010; function QNetworkProxyQuery_create(): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create'; procedure QNetworkProxyQuery_destroy(handle: QNetworkProxyQueryH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_destroy'; function QNetworkProxyQuery_create(requestUrl: QUrlH; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryUrlRequest): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create2'; function QNetworkProxyQuery_create(hostname: PWideString; port: Integer; protocolTag: PWideString = nil; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryTcpSocket): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create3'; function QNetworkProxyQuery_create(bindPort: Word; protocolTag: PWideString = nil; queryType: QNetworkProxyQueryQueryType = QNetworkProxyQueryTcpServer): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create4'; function QNetworkProxyQuery_create(other: QNetworkProxyQueryH): QNetworkProxyQueryH; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_create5'; function QNetworkProxyQuery_queryType(handle: QNetworkProxyQueryH): QNetworkProxyQueryQueryType; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_queryType'; procedure QNetworkProxyQuery_setQueryType(handle: QNetworkProxyQueryH; _type: QNetworkProxyQueryQueryType); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setQueryType'; function QNetworkProxyQuery_peerPort(handle: QNetworkProxyQueryH): Integer; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_peerPort'; procedure QNetworkProxyQuery_setPeerPort(handle: QNetworkProxyQueryH; port: Integer); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setPeerPort'; procedure QNetworkProxyQuery_peerHostName(handle: QNetworkProxyQueryH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_peerHostName'; procedure QNetworkProxyQuery_setPeerHostName(handle: QNetworkProxyQueryH; hostname: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setPeerHostName'; function QNetworkProxyQuery_localPort(handle: QNetworkProxyQueryH): Integer; cdecl; external Qt4PasLib name 'QNetworkProxyQuery_localPort'; procedure QNetworkProxyQuery_setLocalPort(handle: QNetworkProxyQueryH; port: Integer); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setLocalPort'; procedure QNetworkProxyQuery_protocolTag(handle: QNetworkProxyQueryH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_protocolTag'; procedure QNetworkProxyQuery_setProtocolTag(handle: QNetworkProxyQueryH; protocolTag: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setProtocolTag'; procedure QNetworkProxyQuery_url(handle: QNetworkProxyQueryH; retval: QUrlH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_url'; procedure QNetworkProxyQuery_setUrl(handle: QNetworkProxyQueryH; url: QUrlH); cdecl; external Qt4PasLib name 'QNetworkProxyQuery_setUrl'; function QNetworkProxy_create(): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create'; procedure QNetworkProxy_destroy(handle: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_destroy'; function QNetworkProxy_create(_type: QNetworkProxyProxyType; hostName: PWideString = nil; port: Word = 0; user: PWideString = nil; password: PWideString = nil): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create2'; function QNetworkProxy_create(other: QNetworkProxyH): QNetworkProxyH; cdecl; external Qt4PasLib name 'QNetworkProxy_create3'; procedure QNetworkProxy_setType(handle: QNetworkProxyH; _type: QNetworkProxyProxyType); cdecl; external Qt4PasLib name 'QNetworkProxy_setType'; function QNetworkProxy_type(handle: QNetworkProxyH): QNetworkProxyProxyType; cdecl; external Qt4PasLib name 'QNetworkProxy_type'; procedure QNetworkProxy_setCapabilities(handle: QNetworkProxyH; capab: QNetworkProxyCapabilities); cdecl; external Qt4PasLib name 'QNetworkProxy_setCapabilities'; function QNetworkProxy_capabilities(handle: QNetworkProxyH): QNetworkProxyCapabilities; cdecl; external Qt4PasLib name 'QNetworkProxy_capabilities'; function QNetworkProxy_isCachingProxy(handle: QNetworkProxyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkProxy_isCachingProxy'; function QNetworkProxy_isTransparentProxy(handle: QNetworkProxyH): Boolean; cdecl; external Qt4PasLib name 'QNetworkProxy_isTransparentProxy'; procedure QNetworkProxy_setUser(handle: QNetworkProxyH; userName: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setUser'; procedure QNetworkProxy_user(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_user'; procedure QNetworkProxy_setPassword(handle: QNetworkProxyH; password: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setPassword'; procedure QNetworkProxy_password(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_password'; procedure QNetworkProxy_setHostName(handle: QNetworkProxyH; hostName: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_setHostName'; procedure QNetworkProxy_hostName(handle: QNetworkProxyH; retval: PWideString); cdecl; external Qt4PasLib name 'QNetworkProxy_hostName'; procedure QNetworkProxy_setPort(handle: QNetworkProxyH; port: Word); cdecl; external Qt4PasLib name 'QNetworkProxy_setPort'; function QNetworkProxy_port(handle: QNetworkProxyH): Word; cdecl; external Qt4PasLib name 'QNetworkProxy_port'; procedure QNetworkProxy_setApplicationProxy(proxy: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_setApplicationProxy'; procedure QNetworkProxy_applicationProxy(retval: QNetworkProxyH); cdecl; external Qt4PasLib name 'QNetworkProxy_applicationProxy'; procedure QNetworkProxyFactory_setApplicationProxyFactory(factory: QNetworkProxyFactoryH); cdecl; external Qt4PasLib name 'QNetworkProxyFactory_setApplicationProxyFactory'; function QAuthenticator_create(): QAuthenticatorH; cdecl; external Qt4PasLib name 'QAuthenticator_create'; procedure QAuthenticator_destroy(handle: QAuthenticatorH); cdecl; external Qt4PasLib name 'QAuthenticator_destroy'; function QAuthenticator_create(other: QAuthenticatorH): QAuthenticatorH; cdecl; external Qt4PasLib name 'QAuthenticator_create2'; procedure QAuthenticator_user(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_user'; procedure QAuthenticator_setUser(handle: QAuthenticatorH; user: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_setUser'; procedure QAuthenticator_password(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_password'; procedure QAuthenticator_setPassword(handle: QAuthenticatorH; password: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_setPassword'; procedure QAuthenticator_realm(handle: QAuthenticatorH; retval: PWideString); cdecl; external Qt4PasLib name 'QAuthenticator_realm'; function QAuthenticator_isNull(handle: QAuthenticatorH): Boolean; cdecl; external Qt4PasLib name 'QAuthenticator_isNull'; procedure QAuthenticator_detach(handle: QAuthenticatorH); cdecl; external Qt4PasLib name 'QAuthenticator_detach'; function QWebHitTestResult_create(): QWebHitTestResultH; cdecl; external Qt4PasLib name 'QWebHitTestResult_create'; procedure QWebHitTestResult_destroy(handle: QWebHitTestResultH); cdecl; external Qt4PasLib name 'QWebHitTestResult_destroy'; function QWebHitTestResult_create(other: QWebHitTestResultH): QWebHitTestResultH; cdecl; external Qt4PasLib name 'QWebHitTestResult_create2'; function QWebHitTestResult_isNull(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isNull'; procedure QWebHitTestResult_pos(handle: QWebHitTestResultH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebHitTestResult_pos'; procedure QWebHitTestResult_boundingRect(handle: QWebHitTestResultH; retval: PRect); cdecl; external Qt4PasLib name 'QWebHitTestResult_boundingRect'; procedure QWebHitTestResult_title(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_title'; procedure QWebHitTestResult_linkText(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkText'; procedure QWebHitTestResult_linkUrl(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkUrl'; procedure QWebHitTestResult_linkTitle(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_linkTitle'; function QWebHitTestResult_linkTargetFrame(handle: QWebHitTestResultH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebHitTestResult_linkTargetFrame'; procedure QWebHitTestResult_alternateText(handle: QWebHitTestResultH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHitTestResult_alternateText'; procedure QWebHitTestResult_imageUrl(handle: QWebHitTestResultH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHitTestResult_imageUrl'; procedure QWebHitTestResult_pixmap(handle: QWebHitTestResultH; retval: QPixmapH); cdecl; external Qt4PasLib name 'QWebHitTestResult_pixmap'; function QWebHitTestResult_isContentEditable(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isContentEditable'; function QWebHitTestResult_isContentSelected(handle: QWebHitTestResultH): Boolean; cdecl; external Qt4PasLib name 'QWebHitTestResult_isContentSelected'; function QWebHitTestResult_frame(handle: QWebHitTestResultH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebHitTestResult_frame'; function QWebFrame_page(handle: QWebFrameH): QWebPageH; cdecl; external Qt4PasLib name 'QWebFrame_page'; procedure QWebFrame_load(handle: QWebFrameH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_load'; procedure QWebFrame_load(handle: QWebFrameH; request: QNetworkRequestH; operation: QNetworkAccessManagerOperation = QNetworkAccessManagerGetOperation; body: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QWebFrame_load2'; procedure QWebFrame_setHtml(handle: QWebFrameH; html: PWideString; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebFrame_setHtml'; procedure QWebFrame_setContent(handle: QWebFrameH; data: QByteArrayH; mimeType: PWideString = nil; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebFrame_setContent'; procedure QWebFrame_addToJavaScriptWindowObject(handle: QWebFrameH; name: PWideString; _object: QObjectH); cdecl; external Qt4PasLib name 'QWebFrame_addToJavaScriptWindowObject'; procedure QWebFrame_toHtml(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_toHtml'; procedure QWebFrame_toPlainText(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_toPlainText'; procedure QWebFrame_renderTreeDump(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_renderTreeDump'; procedure QWebFrame_title(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_title'; procedure QWebFrame_setUrl(handle: QWebFrameH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_setUrl'; procedure QWebFrame_url(handle: QWebFrameH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebFrame_url'; procedure QWebFrame_icon(handle: QWebFrameH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebFrame_icon'; procedure QWebFrame_frameName(handle: QWebFrameH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_frameName'; function QWebFrame_parentFrame(handle: QWebFrameH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebFrame_parentFrame'; procedure QWebFrame_childFrames(handle: QWebFrameH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebFrame_childFrames'; function QWebFrame_scrollBarPolicy(handle: QWebFrameH; orientation: QtOrientation): QtScrollBarPolicy; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarPolicy'; procedure QWebFrame_setScrollBarPolicy(handle: QWebFrameH; orientation: QtOrientation; policy: QtScrollBarPolicy); cdecl; external Qt4PasLib name 'QWebFrame_setScrollBarPolicy'; procedure QWebFrame_setScrollBarValue(handle: QWebFrameH; orientation: QtOrientation; value: Integer); cdecl; external Qt4PasLib name 'QWebFrame_setScrollBarValue'; function QWebFrame_scrollBarValue(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarValue'; function QWebFrame_scrollBarMinimum(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarMinimum'; function QWebFrame_scrollBarMaximum(handle: QWebFrameH; orientation: QtOrientation): Integer; cdecl; external Qt4PasLib name 'QWebFrame_scrollBarMaximum'; procedure QWebFrame_scroll(handle: QWebFrameH; AnonParam1: Integer; AnonParam2: Integer); cdecl; external Qt4PasLib name 'QWebFrame_scroll'; procedure QWebFrame_scrollPosition(handle: QWebFrameH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_scrollPosition'; procedure QWebFrame_setScrollPosition(handle: QWebFrameH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_setScrollPosition'; procedure QWebFrame_render(handle: QWebFrameH; painter: QPainterH; clip: QRegionH); cdecl; external Qt4PasLib name 'QWebFrame_render'; procedure QWebFrame_render(handle: QWebFrameH; painter: QPainterH); cdecl; external Qt4PasLib name 'QWebFrame_render2'; procedure QWebFrame_setTextSizeMultiplier(handle: QWebFrameH; factor: qreal); cdecl; external Qt4PasLib name 'QWebFrame_setTextSizeMultiplier'; function QWebFrame_textSizeMultiplier(handle: QWebFrameH): qreal; cdecl; external Qt4PasLib name 'QWebFrame_textSizeMultiplier'; function QWebFrame_zoomFactor(handle: QWebFrameH): qreal; cdecl; external Qt4PasLib name 'QWebFrame_zoomFactor'; procedure QWebFrame_setZoomFactor(handle: QWebFrameH; factor: qreal); cdecl; external Qt4PasLib name 'QWebFrame_setZoomFactor'; procedure QWebFrame_pos(handle: QWebFrameH; retval: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_pos'; procedure QWebFrame_geometry(handle: QWebFrameH; retval: PRect); cdecl; external Qt4PasLib name 'QWebFrame_geometry'; procedure QWebFrame_contentsSize(handle: QWebFrameH; retval: PSize); cdecl; external Qt4PasLib name 'QWebFrame_contentsSize'; procedure QWebFrame_hitTestContent(handle: QWebFrameH; retval: QWebHitTestResultH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebFrame_hitTestContent'; function QWebFrame_event(handle: QWebFrameH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebFrame_event'; procedure QWebFrame_evaluateJavaScript(handle: QWebFrameH; retval: QVariantH; scriptSource: PWideString); cdecl; external Qt4PasLib name 'QWebFrame_evaluateJavaScript'; procedure QWebFrame_print(handle: QWebFrameH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QWebFrame_print'; type QWebFrame_javaScriptWindowObjectCleared_Event = procedure () of object cdecl; QWebFrame_provisionalLoad_Event = procedure () of object cdecl; QWebFrame_titleChanged_Event = procedure (title: PWideString) of object cdecl; QWebFrame_urlChanged_Event = procedure (url: QUrlH) of object cdecl; QWebFrame_initialLayoutCompleted_Event = procedure () of object cdecl; QWebFrame_iconChanged_Event = procedure () of object cdecl; procedure QWebSecurityOrigin_allOrigins(retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_allOrigins'; procedure QWebSecurityOrigin_scheme(handle: QWebSecurityOriginH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_scheme'; procedure QWebSecurityOrigin_host(handle: QWebSecurityOriginH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_host'; function QWebSecurityOrigin_port(handle: QWebSecurityOriginH): Integer; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_port'; function QWebSecurityOrigin_databaseUsage(handle: QWebSecurityOriginH): int64; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databaseUsage'; function QWebSecurityOrigin_databaseQuota(handle: QWebSecurityOriginH): int64; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databaseQuota'; procedure QWebSecurityOrigin_setDatabaseQuota(handle: QWebSecurityOriginH; quota: int64); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_setDatabaseQuota'; procedure QWebSecurityOrigin_databases(handle: QWebSecurityOriginH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_databases'; function QWebSecurityOrigin_create(other: QWebSecurityOriginH): QWebSecurityOriginH; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_create'; procedure QWebSecurityOrigin_destroy(handle: QWebSecurityOriginH); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_destroy'; function QWebDatabase_create(other: QWebDatabaseH): QWebDatabaseH; cdecl; external Qt4PasLib name 'QWebDatabase_create'; procedure QWebDatabase_destroy(handle: QWebDatabaseH); cdecl; external Qt4PasLib name 'QWebDatabase_destroy'; procedure QWebDatabase_name(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_name'; procedure QWebDatabase_displayName(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_displayName'; function QWebDatabase_expectedSize(handle: QWebDatabaseH): int64; cdecl; external Qt4PasLib name 'QWebDatabase_expectedSize'; function QWebDatabase_size(handle: QWebDatabaseH): int64; cdecl; external Qt4PasLib name 'QWebDatabase_size'; procedure QWebDatabase_fileName(handle: QWebDatabaseH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebDatabase_fileName'; procedure QWebDatabase_origin(handle: QWebDatabaseH; retval: QWebSecurityOriginH); cdecl; external Qt4PasLib name 'QWebDatabase_origin'; procedure QWebDatabase_removeDatabase(db: QWebDatabaseH); cdecl; external Qt4PasLib name 'QWebDatabase_removeDatabase'; function QWebHistoryItem_create(other: QWebHistoryItemH): QWebHistoryItemH; cdecl; external Qt4PasLib name 'QWebHistoryItem_create'; procedure QWebHistoryItem_destroy(handle: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistoryItem_destroy'; procedure QWebHistoryItem_originalUrl(handle: QWebHistoryItemH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHistoryItem_originalUrl'; procedure QWebHistoryItem_url(handle: QWebHistoryItemH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebHistoryItem_url'; procedure QWebHistoryItem_title(handle: QWebHistoryItemH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebHistoryItem_title'; procedure QWebHistoryItem_lastVisited(handle: QWebHistoryItemH; retval: QDateTimeH); cdecl; external Qt4PasLib name 'QWebHistoryItem_lastVisited'; procedure QWebHistoryItem_icon(handle: QWebHistoryItemH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebHistoryItem_icon'; procedure QWebHistoryItem_userData(handle: QWebHistoryItemH; retval: QVariantH); cdecl; external Qt4PasLib name 'QWebHistoryItem_userData'; procedure QWebHistoryItem_setUserData(handle: QWebHistoryItemH; userData: QVariantH); cdecl; external Qt4PasLib name 'QWebHistoryItem_setUserData'; function QWebHistoryItem_isValid(handle: QWebHistoryItemH): Boolean; cdecl; external Qt4PasLib name 'QWebHistoryItem_isValid'; procedure QWebHistory_clear(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_clear'; procedure QWebHistory_items(handle: QWebHistoryH; retval: PPtrIntArray); cdecl; external Qt4PasLib name 'QWebHistory_items'; procedure QWebHistory_backItems(handle: QWebHistoryH; retval: PPtrIntArray; maxItems: Integer); cdecl; external Qt4PasLib name 'QWebHistory_backItems'; procedure QWebHistory_forwardItems(handle: QWebHistoryH; retval: PPtrIntArray; maxItems: Integer); cdecl; external Qt4PasLib name 'QWebHistory_forwardItems'; function QWebHistory_canGoBack(handle: QWebHistoryH): Boolean; cdecl; external Qt4PasLib name 'QWebHistory_canGoBack'; function QWebHistory_canGoForward(handle: QWebHistoryH): Boolean; cdecl; external Qt4PasLib name 'QWebHistory_canGoForward'; procedure QWebHistory_back(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_back'; procedure QWebHistory_forward(handle: QWebHistoryH); cdecl; external Qt4PasLib name 'QWebHistory_forward'; procedure QWebHistory_goToItem(handle: QWebHistoryH; item: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_goToItem'; procedure QWebHistory_backItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_backItem'; procedure QWebHistory_currentItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_currentItem'; procedure QWebHistory_forwardItem(handle: QWebHistoryH; retval: QWebHistoryItemH); cdecl; external Qt4PasLib name 'QWebHistory_forwardItem'; procedure QWebHistory_itemAt(handle: QWebHistoryH; retval: QWebHistoryItemH; i: Integer); cdecl; external Qt4PasLib name 'QWebHistory_itemAt'; function QWebHistory_currentItemIndex(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_currentItemIndex'; function QWebHistory_count(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_count'; function QWebHistory_maximumItemCount(handle: QWebHistoryH): Integer; cdecl; external Qt4PasLib name 'QWebHistory_maximumItemCount'; procedure QWebHistory_setMaximumItemCount(handle: QWebHistoryH; count: Integer); cdecl; external Qt4PasLib name 'QWebHistory_setMaximumItemCount'; procedure QWebHistoryInterface_setDefaultInterface(defaultInterface: QWebHistoryInterfaceH); cdecl; external Qt4PasLib name 'QWebHistoryInterface_setDefaultInterface'; function QWebHistoryInterface_defaultInterface(): QWebHistoryInterfaceH; cdecl; external Qt4PasLib name 'QWebHistoryInterface_defaultInterface'; function QWebHistoryInterface_historyContains(handle: QWebHistoryInterfaceH; url: PWideString): Boolean; cdecl; external Qt4PasLib name 'QWebHistoryInterface_historyContains'; procedure QWebHistoryInterface_addHistoryEntry(handle: QWebHistoryInterfaceH; url: PWideString); cdecl; external Qt4PasLib name 'QWebHistoryInterface_addHistoryEntry'; type QWebPageNavigationType = ( // QWebPage::NavigationType (1) QWebPageNavigationTypeLinkClicked, QWebPageNavigationTypeFormSubmitted, QWebPageNavigationTypeBackOrForward, QWebPageNavigationTypeReload, QWebPageNavigationTypeFormResubmitted, QWebPageNavigationTypeOther ); QWebPageLinkDelegationPolicy = ( // QWebPage::LinkDelegationPolicy (1) QWebPageDontDelegateLinks, QWebPageDelegateExternalLinks, QWebPageDelegateAllLinks ); QWebPageWebWindowType = ( // QWebPage::WebWindowType (1) QWebPageWebBrowserWindow, QWebPageWebModalDialog ); QWebPageExtension = ( // QWebPage::Extension (1) QWebPageChooseMultipleFilesExtension ); QWebPageWebAction = ( //QWebPage::WebAction (2) QWebPageNoWebAction = -1, QWebPageOpenLink, QWebPageOpenLinkInNewWindow, QWebPageOpenFrameInNewWindow, QWebPageDownloadLinkToDisk, QWebPageCopyLinkToClipboard, QWebPageOpenImageInNewWindow, QWebPageDownloadImageToDisk, QWebPageCopyImageToClipboard, QWebPageBack, QWebPageForward, QWebPageStop, QWebPageReload, QWebPageCut, QWebPageCopy, QWebPagePaste, QWebPageUndo, QWebPageRedo, QWebPageMoveToNextChar, QWebPageMoveToPreviousChar, QWebPageMoveToNextWord, QWebPageMoveToPreviousWord, QWebPageMoveToNextLine, QWebPageMoveToPreviousLine, QWebPageMoveToStartOfLine, QWebPageMoveToEndOfLine, QWebPageMoveToStartOfBlock, QWebPageMoveToEndOfBlock, QWebPageMoveToStartOfDocument, QWebPageMoveToEndOfDocument, QWebPageSelectNextChar, QWebPageSelectPreviousChar, QWebPageSelectNextWord, QWebPageSelectPreviousWord, QWebPageSelectNextLine, QWebPageSelectPreviousLine, QWebPageSelectStartOfLine, QWebPageSelectEndOfLine, QWebPageSelectStartOfBlock, QWebPageSelectEndOfBlock, QWebPageSelectStartOfDocument, QWebPageSelectEndOfDocument, QWebPageDeleteStartOfWord, QWebPageDeleteEndOfWord, QWebPageSetTextDirectionDefault, QWebPageSetTextDirectionLeftToRight, QWebPageSetTextDirectionRightToLeft, QWebPageToggleBold, QWebPageToggleItalic, QWebPageToggleUnderline, QWebPageInspectElement, QWebPageInsertParagraphSeparator, QWebPageInsertLineSeparator, QWebPageSelectAll, QWebPageWebActionCount ); type QWebPageFindFlag = cardinal; // QWebPage::FindFlag QWebPageFindFlags = QWebPageFindFlag; //QFlags<> (3) const QWebPageFindBackward = 1; QWebPageFindCaseSensitively = 2; QWebPageFindWrapsAroundDocument = 4; function QWebPage_create(parent: QObjectH = nil): QWebPageH; cdecl; external Qt4PasLib name 'QWebPage_create'; procedure QWebPage_destroy(handle: QWebPageH); cdecl; external Qt4PasLib name 'QWebPage_destroy'; function QWebPage_mainFrame(handle: QWebPageH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebPage_mainFrame'; function QWebPage_currentFrame(handle: QWebPageH): QWebFrameH; cdecl; external Qt4PasLib name 'QWebPage_currentFrame'; function QWebPage_history(handle: QWebPageH): QWebHistoryH; cdecl; external Qt4PasLib name 'QWebPage_history'; function QWebPage_settings(handle: QWebPageH): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebPage_settings'; procedure QWebPage_setView(handle: QWebPageH; view: QWidgetH); cdecl; external Qt4PasLib name 'QWebPage_setView'; function QWebPage_view(handle: QWebPageH): QWidgetH; cdecl; external Qt4PasLib name 'QWebPage_view'; function QWebPage_isModified(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_isModified'; function QWebPage_undoStack(handle: QWebPageH): QUndoStackH; cdecl; external Qt4PasLib name 'QWebPage_undoStack'; procedure QWebPage_setNetworkAccessManager(handle: QWebPageH; manager: QNetworkAccessManagerH); cdecl; external Qt4PasLib name 'QWebPage_setNetworkAccessManager'; function QWebPage_networkAccessManager(handle: QWebPageH): QNetworkAccessManagerH; cdecl; external Qt4PasLib name 'QWebPage_networkAccessManager'; procedure QWebPage_setPluginFactory(handle: QWebPageH; factory: QWebPluginFactoryH); cdecl; external Qt4PasLib name 'QWebPage_setPluginFactory'; function QWebPage_pluginFactory(handle: QWebPageH): QWebPluginFactoryH; cdecl; external Qt4PasLib name 'QWebPage_pluginFactory'; function QWebPage_totalBytes(handle: QWebPageH): qword; cdecl; external Qt4PasLib name 'QWebPage_totalBytes'; function QWebPage_bytesReceived(handle: QWebPageH): qword; cdecl; external Qt4PasLib name 'QWebPage_bytesReceived'; procedure QWebPage_selectedText(handle: QWebPageH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebPage_selectedText'; function QWebPage_action(handle: QWebPageH; action: QWebPageWebAction): QActionH; cdecl; external Qt4PasLib name 'QWebPage_action'; procedure QWebPage_triggerAction(handle: QWebPageH; action: QWebPageWebAction; checked: Boolean = False); cdecl; external Qt4PasLib name 'QWebPage_triggerAction'; procedure QWebPage_viewportSize(handle: QWebPageH; retval: PSize); cdecl; external Qt4PasLib name 'QWebPage_viewportSize'; procedure QWebPage_setViewportSize(handle: QWebPageH; size: PSize); cdecl; external Qt4PasLib name 'QWebPage_setViewportSize'; function QWebPage_event(handle: QWebPageH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_event'; function QWebPage_focusNextPrevChild(handle: QWebPageH; next: Boolean): Boolean; cdecl; external Qt4PasLib name 'QWebPage_focusNextPrevChild'; procedure QWebPage_inputMethodQuery(handle: QWebPageH; retval: QVariantH; _property: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWebPage_inputMethodQuery'; function QWebPage_findText(handle: QWebPageH; subString: PWideString; options: QWebPageFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QWebPage_findText'; procedure QWebPage_setForwardUnsupportedContent(handle: QWebPageH; forward: Boolean); cdecl; external Qt4PasLib name 'QWebPage_setForwardUnsupportedContent'; function QWebPage_forwardUnsupportedContent(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_forwardUnsupportedContent'; procedure QWebPage_setLinkDelegationPolicy(handle: QWebPageH; policy: QWebPageLinkDelegationPolicy); cdecl; external Qt4PasLib name 'QWebPage_setLinkDelegationPolicy'; function QWebPage_linkDelegationPolicy(handle: QWebPageH): QWebPageLinkDelegationPolicy; cdecl; external Qt4PasLib name 'QWebPage_linkDelegationPolicy'; procedure QWebPage_setPalette(handle: QWebPageH; palette: QPaletteH); cdecl; external Qt4PasLib name 'QWebPage_setPalette'; procedure QWebPage_palette(handle: QWebPageH; retval: QPaletteH); cdecl; external Qt4PasLib name 'QWebPage_palette'; procedure QWebPage_setContentEditable(handle: QWebPageH; editable: Boolean); cdecl; external Qt4PasLib name 'QWebPage_setContentEditable'; function QWebPage_isContentEditable(handle: QWebPageH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_isContentEditable'; function QWebPage_swallowContextMenuEvent(handle: QWebPageH; event: QContextMenuEventH): Boolean; cdecl; external Qt4PasLib name 'QWebPage_swallowContextMenuEvent'; procedure QWebPage_updatePositionDependentActions(handle: QWebPageH; pos: PQtPoint); cdecl; external Qt4PasLib name 'QWebPage_updatePositionDependentActions'; function QWebPage_createStandardContextMenu(handle: QWebPageH): QMenuH; cdecl; external Qt4PasLib name 'QWebPage_createStandardContextMenu'; function QWebPage_supportsExtension(handle: QWebPageH; extension: QWebPageExtension): Boolean; cdecl; external Qt4PasLib name 'QWebPage_supportsExtension'; type QWebPage_loadStarted_Event = procedure () of object cdecl; QWebPage_loadProgress_Event = procedure (progress: Integer) of object cdecl; QWebPage_loadFinished_Event = procedure (ok: Boolean) of object cdecl; QWebPage_linkHovered_Event = procedure (link: PWideString; title: PWideString; textContent: PWideString) of object cdecl; QWebPage_statusBarMessage_Event = procedure (text: PWideString) of object cdecl; QWebPage_selectionChanged_Event = procedure () of object cdecl; QWebPage_frameCreated_Event = procedure (frame: QWebFrameH) of object cdecl; QWebPage_geometryChangeRequested_Event = procedure (geom: PRect) of object cdecl; QWebPage_repaintRequested_Event = procedure (dirtyRect: PRect) of object cdecl; QWebPage_scrollRequested_Event = procedure (dx: Integer; dy: Integer; scrollViewRect: PRect) of object cdecl; QWebPage_windowCloseRequested_Event = procedure () of object cdecl; QWebPage_printRequested_Event = procedure (frame: QWebFrameH) of object cdecl; QWebPage_linkClicked_Event = procedure (url: QUrlH) of object cdecl; QWebPage_toolBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_statusBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_menuBarVisibilityChangeRequested_Event = procedure (visible: Boolean) of object cdecl; QWebPage_unsupportedContent_Event = procedure (reply: QNetworkReplyH) of object cdecl; QWebPage_downloadRequested_Event = procedure (request: QNetworkRequestH) of object cdecl; QWebPage_microFocusChanged_Event = procedure () of object cdecl; QWebPage_contentsChanged_Event = procedure () of object cdecl; QWebPage_databaseQuotaExceeded_Event = procedure (frame: QWebFrameH; databaseName: PWideString) of object cdecl; QWebPage_saveFrameStateRequested_Event = procedure (frame: QWebFrameH; item: QWebHistoryItemH) of object cdecl; QWebPage_restoreFrameStateRequested_Event = procedure (frame: QWebFrameH) of object cdecl; function QLCLWebPage_create(parent: QObjectH = nil): QLCLWebPageH; cdecl; external Qt4PasLib name 'QLCLWebPage_create'; procedure QLCLWebPage_destroy(handle: QLCLWebPageH); cdecl; external Qt4PasLib name 'QLCLWebPage_destroy'; procedure QLCLWebPage_override_userAgentForUrl(handle: QLCLWebPageH; hook: QLCLWebPage_userAgentForUrl_Override); cdecl; external Qt4PasLib name 'QLCLWebPage_override_userAgentForUrl'; procedure QLCLWebPage_DefaultUserAgentForUrl(handle: QLCLWebPageH; retval: PWideString; url: QUrlH); cdecl; external Qt4PasLib name 'QLCLWebPage_DefaultUserAgentForUrl'; type QWebSettingsFontFamily = ( // QWebSettings::FontFamily (1) QWebSettingsStandardFont, QWebSettingsFixedFont, QWebSettingsSerifFont, QWebSettingsSansSerifFont, QWebSettingsCursiveFont, QWebSettingsFantasyFont ); QWebSettingsWebAttribute = ( // QWebSettings::WebAttribute (1) QWebSettingsAutoLoadImages, QWebSettingsJavascriptEnabled, QWebSettingsJavaEnabled, QWebSettingsPluginsEnabled, QWebSettingsPrivateBrowsingEnabled, QWebSettingsJavascriptCanOpenWindows, QWebSettingsJavascriptCanAccessClipboard, QWebSettingsDeveloperExtrasEnabled, QWebSettingsLinksIncludedInFocusChain, QWebSettingsZoomTextOnly, QWebSettingsPrintElementBackgrounds, QWebSettingsOfflineStorageDatabaseEnabled, QWebSettingsOfflineWebApplicationCacheEnabled, QWebSettingsLocalStorageDatabaseEnabled ); QWebSettingsWebGraphic = ( // QWebSettings::WebGraphic (1) QWebSettingsMissingImageGraphic, QWebSettingsMissingPluginGraphic, QWebSettingsDefaultFrameIconGraphic, QWebSettingsTextAreaSizeGripCornerGraphic ); QWebSettingsFontSize = ( // QWebSettings::FontSize (1) QWebSettingsMinimumFontSize, QWebSettingsMinimumLogicalFontSize, QWebSettingsDefaultFontSize, QWebSettingsDefaultFixedFontSize ); function QWebSettings_globalSettings(): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebSettings_globalSettings'; procedure QWebSettings_setFontFamily(handle: QWebSettingsH; which: QWebSettingsFontFamily; family: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setFontFamily'; procedure QWebSettings_fontFamily(handle: QWebSettingsH; retval: PWideString; which: QWebSettingsFontFamily); cdecl; external Qt4PasLib name 'QWebSettings_fontFamily'; procedure QWebSettings_resetFontFamily(handle: QWebSettingsH; which: QWebSettingsFontFamily); cdecl; external Qt4PasLib name 'QWebSettings_resetFontFamily'; procedure QWebSettings_setFontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize; size: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setFontSize'; function QWebSettings_fontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize): Integer; cdecl; external Qt4PasLib name 'QWebSettings_fontSize'; procedure QWebSettings_resetFontSize(handle: QWebSettingsH; _type: QWebSettingsFontSize); cdecl; external Qt4PasLib name 'QWebSettings_resetFontSize'; procedure QWebSettings_setAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute; _on: Boolean); cdecl; external Qt4PasLib name 'QWebSettings_setAttribute'; function QWebSettings_testAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute): Boolean; cdecl; external Qt4PasLib name 'QWebSettings_testAttribute'; procedure QWebSettings_resetAttribute(handle: QWebSettingsH; attr: QWebSettingsWebAttribute); cdecl; external Qt4PasLib name 'QWebSettings_resetAttribute'; procedure QWebSettings_setUserStyleSheetUrl(handle: QWebSettingsH; location: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_setUserStyleSheetUrl'; procedure QWebSettings_userStyleSheetUrl(handle: QWebSettingsH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_userStyleSheetUrl'; procedure QWebSettings_setIconDatabasePath(location: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setIconDatabasePath'; procedure QWebSettings_iconDatabasePath(retval: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_iconDatabasePath'; procedure QWebSettings_clearIconDatabase(); cdecl; external Qt4PasLib name 'QWebSettings_clearIconDatabase'; procedure QWebSettings_iconForUrl(retval: QIconH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebSettings_iconForUrl'; procedure QWebSettings_setWebGraphic(_type: QWebSettingsWebGraphic; graphic: QPixmapH); cdecl; external Qt4PasLib name 'QWebSettings_setWebGraphic'; procedure QWebSettings_webGraphic(retval: QPixmapH; _type: QWebSettingsWebGraphic); cdecl; external Qt4PasLib name 'QWebSettings_webGraphic'; procedure QWebSettings_setMaximumPagesInCache(pages: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setMaximumPagesInCache'; function QWebSettings_maximumPagesInCache(): Integer; cdecl; external Qt4PasLib name 'QWebSettings_maximumPagesInCache'; procedure QWebSettings_setObjectCacheCapacities(cacheMinDeadCapacity: Integer; cacheMaxDead: Integer; totalCapacity: Integer); cdecl; external Qt4PasLib name 'QWebSettings_setObjectCacheCapacities'; procedure QWebSettings_setOfflineStoragePath(path: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_setOfflineStoragePath'; procedure QWebSettings_offlineStoragePath(retval: PWideString); cdecl; external Qt4PasLib name 'QWebSettings_offlineStoragePath'; procedure QWebSettings_setOfflineStorageDefaultQuota(maximumSize: int64); cdecl; external Qt4PasLib name 'QWebSettings_setOfflineStorageDefaultQuota'; function QWebSettings_offlineStorageDefaultQuota(): int64; cdecl; external Qt4PasLib name 'QWebSettings_offlineStorageDefaultQuota'; function QWebView_create(parent: QWidgetH = nil): QWebViewH; cdecl; external Qt4PasLib name 'QWebView_create'; procedure QWebView_destroy(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_destroy'; function QWebView_page(handle: QWebViewH): QWebPageH; cdecl; external Qt4PasLib name 'QWebView_page'; procedure QWebView_setPage(handle: QWebViewH; page: QWebPageH); cdecl; external Qt4PasLib name 'QWebView_setPage'; procedure QWebView_load(handle: QWebViewH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebView_load'; procedure QWebView_load(handle: QWebViewH; request: QNetworkRequestH; operation: QNetworkAccessManagerOperation = QNetworkAccessManagerGetOperation; body: QByteArrayH = nil); cdecl; external Qt4PasLib name 'QWebView_load2'; procedure QWebView_setHtml(handle: QWebViewH; html: PWideString; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebView_setHtml'; procedure QWebView_setContent(handle: QWebViewH; data: QByteArrayH; mimeType: PWideString = nil; baseUrl: QUrlH = nil); cdecl; external Qt4PasLib name 'QWebView_setContent'; function QWebView_history(handle: QWebViewH): QWebHistoryH; cdecl; external Qt4PasLib name 'QWebView_history'; function QWebView_settings(handle: QWebViewH): QWebSettingsH; cdecl; external Qt4PasLib name 'QWebView_settings'; procedure QWebView_title(handle: QWebViewH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebView_title'; procedure QWebView_setUrl(handle: QWebViewH; url: QUrlH); cdecl; external Qt4PasLib name 'QWebView_setUrl'; procedure QWebView_url(handle: QWebViewH; retval: QUrlH); cdecl; external Qt4PasLib name 'QWebView_url'; procedure QWebView_icon(handle: QWebViewH; retval: QIconH); cdecl; external Qt4PasLib name 'QWebView_icon'; procedure QWebView_selectedText(handle: QWebViewH; retval: PWideString); cdecl; external Qt4PasLib name 'QWebView_selectedText'; function QWebView_pageAction(handle: QWebViewH; action: QWebPageWebAction): QActionH; cdecl; external Qt4PasLib name 'QWebView_pageAction'; procedure QWebView_triggerPageAction(handle: QWebViewH; action: QWebPageWebAction; checked: Boolean = False); cdecl; external Qt4PasLib name 'QWebView_triggerPageAction'; function QWebView_isModified(handle: QWebViewH): Boolean; cdecl; external Qt4PasLib name 'QWebView_isModified'; procedure QWebView_inputMethodQuery(handle: QWebViewH; retval: QVariantH; _property: QtInputMethodQuery); cdecl; external Qt4PasLib name 'QWebView_inputMethodQuery'; procedure QWebView_sizeHint(handle: QWebViewH; retval: PSize); cdecl; external Qt4PasLib name 'QWebView_sizeHint'; function QWebView_zoomFactor(handle: QWebViewH): qreal; cdecl; external Qt4PasLib name 'QWebView_zoomFactor'; procedure QWebView_setZoomFactor(handle: QWebViewH; factor: qreal); cdecl; external Qt4PasLib name 'QWebView_setZoomFactor'; procedure QWebView_setTextSizeMultiplier(handle: QWebViewH; factor: qreal); cdecl; external Qt4PasLib name 'QWebView_setTextSizeMultiplier'; function QWebView_textSizeMultiplier(handle: QWebViewH): qreal; cdecl; external Qt4PasLib name 'QWebView_textSizeMultiplier'; function QWebView_findText(handle: QWebViewH; subString: PWideString; options: QWebPageFindFlags = 0): Boolean; cdecl; external Qt4PasLib name 'QWebView_findText'; function QWebView_event(handle: QWebViewH; AnonParam1: QEventH): Boolean; cdecl; external Qt4PasLib name 'QWebView_event'; procedure QWebView_stop(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_stop'; procedure QWebView_back(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_back'; procedure QWebView_forward(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_forward'; procedure QWebView_reload(handle: QWebViewH); cdecl; external Qt4PasLib name 'QWebView_reload'; procedure QWebView_print(handle: QWebViewH; printer: QPrinterH); cdecl; external Qt4PasLib name 'QWebView_print'; type QWebView_loadStarted_Event = procedure () of object cdecl; QWebView_loadProgress_Event = procedure (progress: Integer) of object cdecl; QWebView_loadFinished_Event = procedure (AnonParam1: Boolean) of object cdecl; QWebView_titleChanged_Event = procedure (title: PWideString) of object cdecl; QWebView_statusBarMessage_Event = procedure (text: PWideString) of object cdecl; QWebView_linkClicked_Event = procedure (url: QUrlH) of object cdecl; QWebView_selectionChanged_Event = procedure () of object cdecl; QWebView_iconChanged_Event = procedure () of object cdecl; QWebView_urlChanged_Event = procedure (url: QUrlH) of object cdecl; function QLCLWebView_create(parent: QWidgetH = nil): QLCLWebViewH; cdecl; external Qt4PasLib name 'QLCLWebView_create'; procedure QLCLWebView_destroy(handle: QLCLWebViewH); cdecl; external Qt4PasLib name 'QLCLWebView_destroy'; procedure QLCLWebView_override_createWindow(handle: QLCLWebViewH; hook: QLCLWebView_createWindow_Override); cdecl; external Qt4PasLib name 'QLCLWebView_override_createWindow'; function QCoreApplication_hook_create(handle: QObjectH): QCoreApplication_hookH; cdecl; external Qt4PasLib name 'QCoreApplication_hook_create'; procedure QCoreApplication_hook_destroy(handle: QCoreApplication_hookH); cdecl; external Qt4PasLib name 'QCoreApplication_hook_destroy'; procedure QCoreApplication_hook_hook_aboutToQuit(handle: QCoreApplication_hookH; hook: QCoreApplication_aboutToQuit_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_aboutToQuit'; procedure QCoreApplication_hook_hook_unixSignal(handle: QCoreApplication_hookH; hook: QCoreApplication_unixSignal_Event); cdecl; external Qt4PasLib name 'QCoreApplication_hook_hook_unixSignal'; function QTimer_hook_create(handle: QObjectH): QTimer_hookH; cdecl; external Qt4PasLib name 'QTimer_hook_create'; procedure QTimer_hook_destroy(handle: QTimer_hookH); cdecl; external Qt4PasLib name 'QTimer_hook_destroy'; procedure QTimer_hook_hook_timeout(handle: QTimer_hookH; hook: QTimer_timeout_Event); cdecl; external Qt4PasLib name 'QTimer_hook_hook_timeout'; function QModelIndex_hook_create(handle: QObjectH): QModelIndex_hookH; cdecl; external Qt4PasLib name 'QModelIndex_hook_create'; procedure QModelIndex_hook_destroy(handle: QModelIndex_hookH); cdecl; external Qt4PasLib name 'QModelIndex_hook_destroy'; function QPersistentModelIndex_hook_create(handle: QObjectH): QPersistentModelIndex_hookH; cdecl; external Qt4PasLib name 'QPersistentModelIndex_hook_create'; procedure QPersistentModelIndex_hook_destroy(handle: QPersistentModelIndex_hookH); cdecl; external Qt4PasLib name 'QPersistentModelIndex_hook_destroy'; function QAbstractItemModel_hook_create(handle: QObjectH): QAbstractItemModel_hookH; cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_create'; procedure QAbstractItemModel_hook_destroy(handle: QAbstractItemModel_hookH); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_destroy'; procedure QAbstractItemModel_hook_hook_dataChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_dataChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_dataChanged'; procedure QAbstractItemModel_hook_hook_headerDataChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_headerDataChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_headerDataChanged'; procedure QAbstractItemModel_hook_hook_layoutChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_layoutChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_layoutChanged'; procedure QAbstractItemModel_hook_hook_layoutAboutToBeChanged(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_layoutAboutToBeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_layoutAboutToBeChanged'; procedure QAbstractItemModel_hook_hook_rowsAboutToBeInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsAboutToBeInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsAboutToBeInserted'; procedure QAbstractItemModel_hook_hook_rowsInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsInserted'; procedure QAbstractItemModel_hook_hook_rowsAboutToBeRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsAboutToBeRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsAboutToBeRemoved'; procedure QAbstractItemModel_hook_hook_rowsRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_rowsRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_rowsRemoved'; procedure QAbstractItemModel_hook_hook_columnsAboutToBeInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsAboutToBeInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsAboutToBeInserted'; procedure QAbstractItemModel_hook_hook_columnsInserted(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsInserted_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsInserted'; procedure QAbstractItemModel_hook_hook_columnsAboutToBeRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsAboutToBeRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsAboutToBeRemoved'; procedure QAbstractItemModel_hook_hook_columnsRemoved(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_columnsRemoved_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_columnsRemoved'; procedure QAbstractItemModel_hook_hook_modelAboutToBeReset(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_modelAboutToBeReset_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_modelAboutToBeReset'; procedure QAbstractItemModel_hook_hook_modelReset(handle: QAbstractItemModel_hookH; hook: QAbstractItemModel_modelReset_Event); cdecl; external Qt4PasLib name 'QAbstractItemModel_hook_hook_modelReset'; function QAbstractTableModel_hook_create(handle: QObjectH): QAbstractTableModel_hookH; cdecl; external Qt4PasLib name 'QAbstractTableModel_hook_create'; procedure QAbstractTableModel_hook_destroy(handle: QAbstractTableModel_hookH); cdecl; external Qt4PasLib name 'QAbstractTableModel_hook_destroy'; function QAbstractListModel_hook_create(handle: QObjectH): QAbstractListModel_hookH; cdecl; external Qt4PasLib name 'QAbstractListModel_hook_create'; procedure QAbstractListModel_hook_destroy(handle: QAbstractListModel_hookH); cdecl; external Qt4PasLib name 'QAbstractListModel_hook_destroy'; function QSocketNotifier_hook_create(handle: QObjectH): QSocketNotifier_hookH; cdecl; external Qt4PasLib name 'QSocketNotifier_hook_create'; procedure QSocketNotifier_hook_destroy(handle: QSocketNotifier_hookH); cdecl; external Qt4PasLib name 'QSocketNotifier_hook_destroy'; procedure QSocketNotifier_hook_hook_activated(handle: QSocketNotifier_hookH; hook: QSocketNotifier_activated_Event); cdecl; external Qt4PasLib name 'QSocketNotifier_hook_hook_activated'; function QThread_hook_create(handle: QObjectH): QThread_hookH; cdecl; external Qt4PasLib name 'QThread_hook_create'; procedure QThread_hook_destroy(handle: QThread_hookH); cdecl; external Qt4PasLib name 'QThread_hook_destroy'; procedure QThread_hook_hook_started(handle: QThread_hookH; hook: QThread_started_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_started'; procedure QThread_hook_hook_finished(handle: QThread_hookH; hook: QThread_finished_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_finished'; procedure QThread_hook_hook_terminated(handle: QThread_hookH; hook: QThread_terminated_Event); cdecl; external Qt4PasLib name 'QThread_hook_hook_terminated'; function QIODevice_hook_create(handle: QObjectH): QIODevice_hookH; cdecl; external Qt4PasLib name 'QIODevice_hook_create'; procedure QIODevice_hook_destroy(handle: QIODevice_hookH); cdecl; external Qt4PasLib name 'QIODevice_hook_destroy'; procedure QIODevice_hook_hook_readyRead(handle: QIODevice_hookH; hook: QIODevice_readyRead_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_readyRead'; procedure QIODevice_hook_hook_bytesWritten(handle: QIODevice_hookH; hook: QIODevice_bytesWritten_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_bytesWritten'; procedure QIODevice_hook_hook_aboutToClose(handle: QIODevice_hookH; hook: QIODevice_aboutToClose_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_aboutToClose'; procedure QIODevice_hook_hook_readChannelFinished(handle: QIODevice_hookH; hook: QIODevice_readChannelFinished_Event); cdecl; external Qt4PasLib name 'QIODevice_hook_hook_readChannelFinished'; function QProcess_hook_create(handle: QObjectH): QProcess_hookH; cdecl; external Qt4PasLib name 'QProcess_hook_create'; procedure QProcess_hook_destroy(handle: QProcess_hookH); cdecl; external Qt4PasLib name 'QProcess_hook_destroy'; procedure QProcess_hook_hook_started(handle: QProcess_hookH; hook: QProcess_started_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_started'; procedure QProcess_hook_hook_finished(handle: QProcess_hookH; hook: QProcess_finished_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_finished'; procedure QProcess_hook_hook_finished2(handle: QProcess_hookH; hook: QProcess_finished2_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_finished2'; procedure QProcess_hook_hook_error(handle: QProcess_hookH; hook: QProcess_error_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_error'; procedure QProcess_hook_hook_stateChanged(handle: QProcess_hookH; hook: QProcess_stateChanged_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_stateChanged'; procedure QProcess_hook_hook_readyReadStandardOutput(handle: QProcess_hookH; hook: QProcess_readyReadStandardOutput_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_readyReadStandardOutput'; procedure QProcess_hook_hook_readyReadStandardError(handle: QProcess_hookH; hook: QProcess_readyReadStandardError_Event); cdecl; external Qt4PasLib name 'QProcess_hook_hook_readyReadStandardError'; function QFileSystemWatcher_hook_create(handle: QObjectH): QFileSystemWatcher_hookH; cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_create'; procedure QFileSystemWatcher_hook_destroy(handle: QFileSystemWatcher_hookH); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_destroy'; procedure QFileSystemWatcher_hook_hook_fileChanged(handle: QFileSystemWatcher_hookH; hook: QFileSystemWatcher_fileChanged_Event); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_hook_fileChanged'; procedure QFileSystemWatcher_hook_hook_directoryChanged(handle: QFileSystemWatcher_hookH; hook: QFileSystemWatcher_directoryChanged_Event); cdecl; external Qt4PasLib name 'QFileSystemWatcher_hook_hook_directoryChanged'; function QApplication_hook_create(handle: QObjectH): QApplication_hookH; cdecl; external Qt4PasLib name 'QApplication_hook_create'; procedure QApplication_hook_destroy(handle: QApplication_hookH); cdecl; external Qt4PasLib name 'QApplication_hook_destroy'; procedure QApplication_hook_hook_lastWindowClosed(handle: QApplication_hookH; hook: QApplication_lastWindowClosed_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_lastWindowClosed'; procedure QApplication_hook_hook_focusChanged(handle: QApplication_hookH; hook: QApplication_focusChanged_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_focusChanged'; procedure QApplication_hook_hook_fontDatabaseChanged(handle: QApplication_hookH; hook: QApplication_fontDatabaseChanged_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_fontDatabaseChanged'; {$if defined(BINUX) or defined(MSWINDOWS) or defined(DARWIN)} procedure QApplication_hook_hook_commitDataRequest(handle: QApplication_hookH; hook: QApplication_commitDataRequest_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_commitDataRequest'; procedure QApplication_hook_hook_saveStateRequest(handle: QApplication_hookH; hook: QApplication_saveStateRequest_Event); cdecl; external Qt4PasLib name 'QApplication_hook_hook_saveStateRequest'; {$endif} function QWidget_hook_create(handle: QObjectH): QWidget_hookH; cdecl; external Qt4PasLib name 'QWidget_hook_create'; procedure QWidget_hook_destroy(handle: QWidget_hookH); cdecl; external Qt4PasLib name 'QWidget_hook_destroy'; procedure QWidget_hook_hook_customContextMenuRequested(handle: QWidget_hookH; hook: QWidget_customContextMenuRequested_Event); cdecl; external Qt4PasLib name 'QWidget_hook_hook_customContextMenuRequested'; function QLayout_hook_create(handle: QObjectH): QLayout_hookH; cdecl; external Qt4PasLib name 'QLayout_hook_create'; procedure QLayout_hook_destroy(handle: QLayout_hookH); cdecl; external Qt4PasLib name 'QLayout_hook_destroy'; function QStackedLayout_hook_create(handle: QObjectH): QStackedLayout_hookH; cdecl; external Qt4PasLib name 'QStackedLayout_hook_create'; procedure QStackedLayout_hook_destroy(handle: QStackedLayout_hookH); cdecl; external Qt4PasLib name 'QStackedLayout_hook_destroy'; procedure QStackedLayout_hook_hook_widgetRemoved(handle: QStackedLayout_hookH; hook: QStackedLayout_widgetRemoved_Event); cdecl; external Qt4PasLib name 'QStackedLayout_hook_hook_widgetRemoved'; procedure QStackedLayout_hook_hook_currentChanged(handle: QStackedLayout_hookH; hook: QStackedLayout_currentChanged_Event); cdecl; external Qt4PasLib name 'QStackedLayout_hook_hook_currentChanged'; function QAction_hook_create(handle: QObjectH): QAction_hookH; cdecl; external Qt4PasLib name 'QAction_hook_create'; procedure QAction_hook_destroy(handle: QAction_hookH); cdecl; external Qt4PasLib name 'QAction_hook_destroy'; procedure QAction_hook_hook_changed(handle: QAction_hookH; hook: QAction_changed_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_changed'; procedure QAction_hook_hook_triggered(handle: QAction_hookH; hook: QAction_triggered_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_triggered'; procedure QAction_hook_hook_triggered2(handle: QAction_hookH; hook: QAction_triggered2_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_triggered2'; procedure QAction_hook_hook_hovered(handle: QAction_hookH; hook: QAction_hovered_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_hovered'; procedure QAction_hook_hook_toggled(handle: QAction_hookH; hook: QAction_toggled_Event); cdecl; external Qt4PasLib name 'QAction_hook_hook_toggled'; function QActionGroup_hook_create(handle: QObjectH): QActionGroup_hookH; cdecl; external Qt4PasLib name 'QActionGroup_hook_create'; procedure QActionGroup_hook_destroy(handle: QActionGroup_hookH); cdecl; external Qt4PasLib name 'QActionGroup_hook_destroy'; procedure QActionGroup_hook_hook_triggered(handle: QActionGroup_hookH; hook: QActionGroup_triggered_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_triggered'; procedure QActionGroup_hook_hook_selected(handle: QActionGroup_hookH; hook: QActionGroup_selected_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_selected'; procedure QActionGroup_hook_hook_hovered(handle: QActionGroup_hookH; hook: QActionGroup_hovered_Event); cdecl; external Qt4PasLib name 'QActionGroup_hook_hook_hovered'; function QClipboard_hook_create(handle: QObjectH): QClipboard_hookH; cdecl; external Qt4PasLib name 'QClipboard_hook_create'; procedure QClipboard_hook_destroy(handle: QClipboard_hookH); cdecl; external Qt4PasLib name 'QClipboard_hook_destroy'; procedure QClipboard_hook_hook_changed(handle: QClipboard_hookH; hook: QClipboard_changed_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_changed'; procedure QClipboard_hook_hook_selectionChanged(handle: QClipboard_hookH; hook: QClipboard_selectionChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_selectionChanged'; procedure QClipboard_hook_hook_findBufferChanged(handle: QClipboard_hookH; hook: QClipboard_findBufferChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_findBufferChanged'; procedure QClipboard_hook_hook_dataChanged(handle: QClipboard_hookH; hook: QClipboard_dataChanged_Event); cdecl; external Qt4PasLib name 'QClipboard_hook_hook_dataChanged'; function QDesktopWidget_hook_create(handle: QObjectH): QDesktopWidget_hookH; cdecl; external Qt4PasLib name 'QDesktopWidget_hook_create'; procedure QDesktopWidget_hook_destroy(handle: QDesktopWidget_hookH); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_destroy'; procedure QDesktopWidget_hook_hook_resized(handle: QDesktopWidget_hookH; hook: QDesktopWidget_resized_Event); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_hook_resized'; procedure QDesktopWidget_hook_hook_workAreaResized(handle: QDesktopWidget_hookH; hook: QDesktopWidget_workAreaResized_Event); cdecl; external Qt4PasLib name 'QDesktopWidget_hook_hook_workAreaResized'; function QDrag_hook_create(handle: QObjectH): QDrag_hookH; cdecl; external Qt4PasLib name 'QDrag_hook_create'; procedure QDrag_hook_destroy(handle: QDrag_hookH); cdecl; external Qt4PasLib name 'QDrag_hook_destroy'; procedure QDrag_hook_hook_actionChanged(handle: QDrag_hookH; hook: QDrag_actionChanged_Event); cdecl; external Qt4PasLib name 'QDrag_hook_hook_actionChanged'; procedure QDrag_hook_hook_targetChanged(handle: QDrag_hookH; hook: QDrag_targetChanged_Event); cdecl; external Qt4PasLib name 'QDrag_hook_hook_targetChanged'; function QShortcut_hook_create(handle: QObjectH): QShortcut_hookH; cdecl; external Qt4PasLib name 'QShortcut_hook_create'; procedure QShortcut_hook_destroy(handle: QShortcut_hookH); cdecl; external Qt4PasLib name 'QShortcut_hook_destroy'; procedure QShortcut_hook_hook_activated(handle: QShortcut_hookH; hook: QShortcut_activated_Event); cdecl; external Qt4PasLib name 'QShortcut_hook_hook_activated'; procedure QShortcut_hook_hook_activatedAmbiguously(handle: QShortcut_hookH; hook: QShortcut_activatedAmbiguously_Event); cdecl; external Qt4PasLib name 'QShortcut_hook_hook_activatedAmbiguously'; function QAbstractTextDocumentLayout_hook_create(handle: QObjectH): QAbstractTextDocumentLayout_hookH; cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_create'; procedure QAbstractTextDocumentLayout_hook_destroy(handle: QAbstractTextDocumentLayout_hookH); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_destroy'; procedure QAbstractTextDocumentLayout_hook_hook_update(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_update_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_update'; procedure QAbstractTextDocumentLayout_hook_hook_update2(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_update2_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_update2'; procedure QAbstractTextDocumentLayout_hook_hook_updateBlock(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_updateBlock_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_updateBlock'; procedure QAbstractTextDocumentLayout_hook_hook_documentSizeChanged(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_documentSizeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_documentSizeChanged'; procedure QAbstractTextDocumentLayout_hook_hook_pageCountChanged(handle: QAbstractTextDocumentLayout_hookH; hook: QAbstractTextDocumentLayout_pageCountChanged_Event); cdecl; external Qt4PasLib name 'QAbstractTextDocumentLayout_hook_hook_pageCountChanged'; function QTextObjectInterface_hook_create(handle: QObjectH): QTextObjectInterface_hookH; cdecl; external Qt4PasLib name 'QTextObjectInterface_hook_create'; procedure QTextObjectInterface_hook_destroy(handle: QTextObjectInterface_hookH); cdecl; external Qt4PasLib name 'QTextObjectInterface_hook_destroy'; function QFrame_hook_create(handle: QObjectH): QFrame_hookH; cdecl; external Qt4PasLib name 'QFrame_hook_create'; procedure QFrame_hook_destroy(handle: QFrame_hookH); cdecl; external Qt4PasLib name 'QFrame_hook_destroy'; function QStackedWidget_hook_create(handle: QObjectH): QStackedWidget_hookH; cdecl; external Qt4PasLib name 'QStackedWidget_hook_create'; procedure QStackedWidget_hook_destroy(handle: QStackedWidget_hookH); cdecl; external Qt4PasLib name 'QStackedWidget_hook_destroy'; procedure QStackedWidget_hook_hook_currentChanged(handle: QStackedWidget_hookH; hook: QStackedWidget_currentChanged_Event); cdecl; external Qt4PasLib name 'QStackedWidget_hook_hook_currentChanged'; procedure QStackedWidget_hook_hook_widgetRemoved(handle: QStackedWidget_hookH; hook: QStackedWidget_widgetRemoved_Event); cdecl; external Qt4PasLib name 'QStackedWidget_hook_hook_widgetRemoved'; function QAbstractScrollArea_hook_create(handle: QObjectH): QAbstractScrollArea_hookH; cdecl; external Qt4PasLib name 'QAbstractScrollArea_hook_create'; procedure QAbstractScrollArea_hook_destroy(handle: QAbstractScrollArea_hookH); cdecl; external Qt4PasLib name 'QAbstractScrollArea_hook_destroy'; function QAbstractSlider_hook_create(handle: QObjectH): QAbstractSlider_hookH; cdecl; external Qt4PasLib name 'QAbstractSlider_hook_create'; procedure QAbstractSlider_hook_destroy(handle: QAbstractSlider_hookH); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_destroy'; procedure QAbstractSlider_hook_hook_valueChanged(handle: QAbstractSlider_hookH; hook: QAbstractSlider_valueChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_valueChanged'; procedure QAbstractSlider_hook_hook_sliderPressed(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderPressed_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderPressed'; procedure QAbstractSlider_hook_hook_sliderMoved(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderMoved_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderMoved'; procedure QAbstractSlider_hook_hook_sliderReleased(handle: QAbstractSlider_hookH; hook: QAbstractSlider_sliderReleased_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_sliderReleased'; procedure QAbstractSlider_hook_hook_rangeChanged(handle: QAbstractSlider_hookH; hook: QAbstractSlider_rangeChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_rangeChanged'; procedure QAbstractSlider_hook_hook_actionTriggered(handle: QAbstractSlider_hookH; hook: QAbstractSlider_actionTriggered_Event); cdecl; external Qt4PasLib name 'QAbstractSlider_hook_hook_actionTriggered'; function QScrollBar_hook_create(handle: QObjectH): QScrollBar_hookH; cdecl; external Qt4PasLib name 'QScrollBar_hook_create'; procedure QScrollBar_hook_destroy(handle: QScrollBar_hookH); cdecl; external Qt4PasLib name 'QScrollBar_hook_destroy'; function QMenu_hook_create(handle: QObjectH): QMenu_hookH; cdecl; external Qt4PasLib name 'QMenu_hook_create'; procedure QMenu_hook_destroy(handle: QMenu_hookH); cdecl; external Qt4PasLib name 'QMenu_hook_destroy'; procedure QMenu_hook_hook_aboutToShow(handle: QMenu_hookH; hook: QMenu_aboutToShow_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_aboutToShow'; procedure QMenu_hook_hook_aboutToHide(handle: QMenu_hookH; hook: QMenu_aboutToHide_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_aboutToHide'; procedure QMenu_hook_hook_triggered(handle: QMenu_hookH; hook: QMenu_triggered_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_triggered'; procedure QMenu_hook_hook_hovered(handle: QMenu_hookH; hook: QMenu_hovered_Event); cdecl; external Qt4PasLib name 'QMenu_hook_hook_hovered'; function QMenuBar_hook_create(handle: QObjectH): QMenuBar_hookH; cdecl; external Qt4PasLib name 'QMenuBar_hook_create'; procedure QMenuBar_hook_destroy(handle: QMenuBar_hookH); cdecl; external Qt4PasLib name 'QMenuBar_hook_destroy'; procedure QMenuBar_hook_hook_triggered(handle: QMenuBar_hookH; hook: QMenuBar_triggered_Event); cdecl; external Qt4PasLib name 'QMenuBar_hook_hook_triggered'; procedure QMenuBar_hook_hook_hovered(handle: QMenuBar_hookH; hook: QMenuBar_hovered_Event); cdecl; external Qt4PasLib name 'QMenuBar_hook_hook_hovered'; function QButtonGroup_hook_create(handle: QObjectH): QButtonGroup_hookH; cdecl; external Qt4PasLib name 'QButtonGroup_hook_create'; procedure QButtonGroup_hook_destroy(handle: QButtonGroup_hookH); cdecl; external Qt4PasLib name 'QButtonGroup_hook_destroy'; procedure QButtonGroup_hook_hook_buttonClicked(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonClicked_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonClicked'; procedure QButtonGroup_hook_hook_buttonClicked2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonClicked2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonClicked2'; procedure QButtonGroup_hook_hook_buttonPressed(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonPressed_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonPressed'; procedure QButtonGroup_hook_hook_buttonPressed2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonPressed2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonPressed2'; procedure QButtonGroup_hook_hook_buttonReleased(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonReleased_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonReleased'; procedure QButtonGroup_hook_hook_buttonReleased2(handle: QButtonGroup_hookH; hook: QButtonGroup_buttonReleased2_Event); cdecl; external Qt4PasLib name 'QButtonGroup_hook_hook_buttonReleased2'; function QAbstractButton_hook_create(handle: QObjectH): QAbstractButton_hookH; cdecl; external Qt4PasLib name 'QAbstractButton_hook_create'; procedure QAbstractButton_hook_destroy(handle: QAbstractButton_hookH); cdecl; external Qt4PasLib name 'QAbstractButton_hook_destroy'; procedure QAbstractButton_hook_hook_pressed(handle: QAbstractButton_hookH; hook: QAbstractButton_pressed_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_pressed'; procedure QAbstractButton_hook_hook_released(handle: QAbstractButton_hookH; hook: QAbstractButton_released_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_released'; procedure QAbstractButton_hook_hook_clicked(handle: QAbstractButton_hookH; hook: QAbstractButton_clicked_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked'; procedure QAbstractButton_hook_hook_clicked2(handle: QAbstractButton_hookH; hook: QAbstractButton_clicked2_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_clicked2'; procedure QAbstractButton_hook_hook_toggled(handle: QAbstractButton_hookH; hook: QAbstractButton_toggled_Event); cdecl; external Qt4PasLib name 'QAbstractButton_hook_hook_toggled'; function QPushButton_hook_create(handle: QObjectH): QPushButton_hookH; cdecl; external Qt4PasLib name 'QPushButton_hook_create'; procedure QPushButton_hook_destroy(handle: QPushButton_hookH); cdecl; external Qt4PasLib name 'QPushButton_hook_destroy'; function QLineEdit_hook_create(handle: QObjectH): QLineEdit_hookH; cdecl; external Qt4PasLib name 'QLineEdit_hook_create'; procedure QLineEdit_hook_destroy(handle: QLineEdit_hookH); cdecl; external Qt4PasLib name 'QLineEdit_hook_destroy'; procedure QLineEdit_hook_hook_textChanged(handle: QLineEdit_hookH; hook: QLineEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_textChanged'; procedure QLineEdit_hook_hook_textEdited(handle: QLineEdit_hookH; hook: QLineEdit_textEdited_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_textEdited'; procedure QLineEdit_hook_hook_cursorPositionChanged(handle: QLineEdit_hookH; hook: QLineEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_cursorPositionChanged'; procedure QLineEdit_hook_hook_returnPressed(handle: QLineEdit_hookH; hook: QLineEdit_returnPressed_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_returnPressed'; procedure QLineEdit_hook_hook_editingFinished(handle: QLineEdit_hookH; hook: QLineEdit_editingFinished_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_editingFinished'; procedure QLineEdit_hook_hook_selectionChanged(handle: QLineEdit_hookH; hook: QLineEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QLineEdit_hook_hook_selectionChanged'; function QPlainTextEdit_hook_create(handle: QObjectH): QPlainTextEdit_hookH; cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_create'; procedure QPlainTextEdit_hook_destroy(handle: QPlainTextEdit_hookH); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_destroy'; procedure QPlainTextEdit_hook_hook_textChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_textChanged'; procedure QPlainTextEdit_hook_hook_undoAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_undoAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_undoAvailable'; procedure QPlainTextEdit_hook_hook_redoAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_redoAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_redoAvailable'; procedure QPlainTextEdit_hook_hook_copyAvailable(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_copyAvailable_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_copyAvailable'; procedure QPlainTextEdit_hook_hook_selectionChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_selectionChanged'; procedure QPlainTextEdit_hook_hook_cursorPositionChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_cursorPositionChanged'; procedure QPlainTextEdit_hook_hook_updateRequest(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_updateRequest_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_updateRequest'; procedure QPlainTextEdit_hook_hook_blockCountChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_blockCountChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_blockCountChanged'; procedure QPlainTextEdit_hook_hook_modificationChanged(handle: QPlainTextEdit_hookH; hook: QPlainTextEdit_modificationChanged_Event); cdecl; external Qt4PasLib name 'QPlainTextEdit_hook_hook_modificationChanged'; function QPlainTextDocumentLayout_hook_create(handle: QObjectH): QPlainTextDocumentLayout_hookH; cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hook_create'; procedure QPlainTextDocumentLayout_hook_destroy(handle: QPlainTextDocumentLayout_hookH); cdecl; external Qt4PasLib name 'QPlainTextDocumentLayout_hook_destroy'; function QTextEdit_hook_create(handle: QObjectH): QTextEdit_hookH; cdecl; external Qt4PasLib name 'QTextEdit_hook_create'; procedure QTextEdit_hook_destroy(handle: QTextEdit_hookH); cdecl; external Qt4PasLib name 'QTextEdit_hook_destroy'; procedure QTextEdit_hook_hook_textChanged(handle: QTextEdit_hookH; hook: QTextEdit_textChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_textChanged'; procedure QTextEdit_hook_hook_undoAvailable(handle: QTextEdit_hookH; hook: QTextEdit_undoAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_undoAvailable'; procedure QTextEdit_hook_hook_redoAvailable(handle: QTextEdit_hookH; hook: QTextEdit_redoAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_redoAvailable'; procedure QTextEdit_hook_hook_currentCharFormatChanged(handle: QTextEdit_hookH; hook: QTextEdit_currentCharFormatChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_currentCharFormatChanged'; procedure QTextEdit_hook_hook_copyAvailable(handle: QTextEdit_hookH; hook: QTextEdit_copyAvailable_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_copyAvailable'; procedure QTextEdit_hook_hook_selectionChanged(handle: QTextEdit_hookH; hook: QTextEdit_selectionChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_selectionChanged'; procedure QTextEdit_hook_hook_cursorPositionChanged(handle: QTextEdit_hookH; hook: QTextEdit_cursorPositionChanged_Event); cdecl; external Qt4PasLib name 'QTextEdit_hook_hook_cursorPositionChanged'; function QTabWidget_hook_create(handle: QObjectH): QTabWidget_hookH; cdecl; external Qt4PasLib name 'QTabWidget_hook_create'; procedure QTabWidget_hook_destroy(handle: QTabWidget_hookH); cdecl; external Qt4PasLib name 'QTabWidget_hook_destroy'; procedure QTabWidget_hook_hook_currentChanged(handle: QTabWidget_hookH; hook: QTabWidget_currentChanged_Event); cdecl; external Qt4PasLib name 'QTabWidget_hook_hook_currentChanged'; procedure QTabWidget_hook_hook_tabCloseRequested(handle: QTabWidget_hookH; hook: QTabWidget_tabCloseRequested_Event); cdecl; external Qt4PasLib name 'QTabWidget_hook_hook_tabCloseRequested'; function QMainWindow_hook_create(handle: QObjectH): QMainWindow_hookH; cdecl; external Qt4PasLib name 'QMainWindow_hook_create'; procedure QMainWindow_hook_destroy(handle: QMainWindow_hookH); cdecl; external Qt4PasLib name 'QMainWindow_hook_destroy'; procedure QMainWindow_hook_hook_iconSizeChanged(handle: QMainWindow_hookH; hook: QMainWindow_iconSizeChanged_Event); cdecl; external Qt4PasLib name 'QMainWindow_hook_hook_iconSizeChanged'; procedure QMainWindow_hook_hook_toolButtonStyleChanged(handle: QMainWindow_hookH; hook: QMainWindow_toolButtonStyleChanged_Event); cdecl; external Qt4PasLib name 'QMainWindow_hook_hook_toolButtonStyleChanged'; function QToolBar_hook_create(handle: QObjectH): QToolBar_hookH; cdecl; external Qt4PasLib name 'QToolBar_hook_create'; procedure QToolBar_hook_destroy(handle: QToolBar_hookH); cdecl; external Qt4PasLib name 'QToolBar_hook_destroy'; procedure QToolBar_hook_hook_actionTriggered(handle: QToolBar_hookH; hook: QToolBar_actionTriggered_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_actionTriggered'; procedure QToolBar_hook_hook_movableChanged(handle: QToolBar_hookH; hook: QToolBar_movableChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_movableChanged'; procedure QToolBar_hook_hook_allowedAreasChanged(handle: QToolBar_hookH; hook: QToolBar_allowedAreasChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_allowedAreasChanged'; procedure QToolBar_hook_hook_orientationChanged(handle: QToolBar_hookH; hook: QToolBar_orientationChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_orientationChanged'; procedure QToolBar_hook_hook_iconSizeChanged(handle: QToolBar_hookH; hook: QToolBar_iconSizeChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_iconSizeChanged'; procedure QToolBar_hook_hook_toolButtonStyleChanged(handle: QToolBar_hookH; hook: QToolBar_toolButtonStyleChanged_Event); cdecl; external Qt4PasLib name 'QToolBar_hook_hook_toolButtonStyleChanged'; function QLCDNumber_hook_create(handle: QObjectH): QLCDNumber_hookH; cdecl; external Qt4PasLib name 'QLCDNumber_hook_create'; procedure QLCDNumber_hook_destroy(handle: QLCDNumber_hookH); cdecl; external Qt4PasLib name 'QLCDNumber_hook_destroy'; procedure QLCDNumber_hook_hook_overflow(handle: QLCDNumber_hookH; hook: QLCDNumber_overflow_Event); cdecl; external Qt4PasLib name 'QLCDNumber_hook_hook_overflow'; function QAbstractSpinBox_hook_create(handle: QObjectH): QAbstractSpinBox_hookH; cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_create'; procedure QAbstractSpinBox_hook_destroy(handle: QAbstractSpinBox_hookH); cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_destroy'; procedure QAbstractSpinBox_hook_hook_editingFinished(handle: QAbstractSpinBox_hookH; hook: QAbstractSpinBox_editingFinished_Event); cdecl; external Qt4PasLib name 'QAbstractSpinBox_hook_hook_editingFinished'; function QSpinBox_hook_create(handle: QObjectH): QSpinBox_hookH; cdecl; external Qt4PasLib name 'QSpinBox_hook_create'; procedure QSpinBox_hook_destroy(handle: QSpinBox_hookH); cdecl; external Qt4PasLib name 'QSpinBox_hook_destroy'; procedure QSpinBox_hook_hook_valueChanged(handle: QSpinBox_hookH; hook: QSpinBox_valueChanged_Event); cdecl; external Qt4PasLib name 'QSpinBox_hook_hook_valueChanged'; procedure QSpinBox_hook_hook_valueChanged2(handle: QSpinBox_hookH; hook: QSpinBox_valueChanged2_Event); cdecl; external Qt4PasLib name 'QSpinBox_hook_hook_valueChanged2'; function QDoubleSpinBox_hook_create(handle: QObjectH): QDoubleSpinBox_hookH; cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_create'; procedure QDoubleSpinBox_hook_destroy(handle: QDoubleSpinBox_hookH); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_destroy'; procedure QDoubleSpinBox_hook_hook_valueChanged(handle: QDoubleSpinBox_hookH; hook: QDoubleSpinBox_valueChanged_Event); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_hook_valueChanged'; procedure QDoubleSpinBox_hook_hook_valueChanged2(handle: QDoubleSpinBox_hookH; hook: QDoubleSpinBox_valueChanged2_Event); cdecl; external Qt4PasLib name 'QDoubleSpinBox_hook_hook_valueChanged2'; function QSplitter_hook_create(handle: QObjectH): QSplitter_hookH; cdecl; external Qt4PasLib name 'QSplitter_hook_create'; procedure QSplitter_hook_destroy(handle: QSplitter_hookH); cdecl; external Qt4PasLib name 'QSplitter_hook_destroy'; procedure QSplitter_hook_hook_splitterMoved(handle: QSplitter_hookH; hook: QSplitter_splitterMoved_Event); cdecl; external Qt4PasLib name 'QSplitter_hook_hook_splitterMoved'; function QSplitterHandle_hook_create(handle: QObjectH): QSplitterHandle_hookH; cdecl; external Qt4PasLib name 'QSplitterHandle_hook_create'; procedure QSplitterHandle_hook_destroy(handle: QSplitterHandle_hookH); cdecl; external Qt4PasLib name 'QSplitterHandle_hook_destroy'; function QComboBox_hook_create(handle: QObjectH): QComboBox_hookH; cdecl; external Qt4PasLib name 'QComboBox_hook_create'; procedure QComboBox_hook_destroy(handle: QComboBox_hookH); cdecl; external Qt4PasLib name 'QComboBox_hook_destroy'; procedure QComboBox_hook_hook_editTextChanged(handle: QComboBox_hookH; hook: QComboBox_editTextChanged_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_editTextChanged'; procedure QComboBox_hook_hook_activated(handle: QComboBox_hookH; hook: QComboBox_activated_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_activated'; procedure QComboBox_hook_hook_activated2(handle: QComboBox_hookH; hook: QComboBox_activated2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_activated2'; procedure QComboBox_hook_hook_highlighted(handle: QComboBox_hookH; hook: QComboBox_highlighted_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_highlighted'; procedure QComboBox_hook_hook_highlighted2(handle: QComboBox_hookH; hook: QComboBox_highlighted2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_highlighted2'; procedure QComboBox_hook_hook_currentIndexChanged(handle: QComboBox_hookH; hook: QComboBox_currentIndexChanged_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_currentIndexChanged'; procedure QComboBox_hook_hook_currentIndexChanged2(handle: QComboBox_hookH; hook: QComboBox_currentIndexChanged2_Event); cdecl; external Qt4PasLib name 'QComboBox_hook_hook_currentIndexChanged2'; function QCheckBox_hook_create(handle: QObjectH): QCheckBox_hookH; cdecl; external Qt4PasLib name 'QCheckBox_hook_create'; procedure QCheckBox_hook_destroy(handle: QCheckBox_hookH); cdecl; external Qt4PasLib name 'QCheckBox_hook_destroy'; procedure QCheckBox_hook_hook_stateChanged(handle: QCheckBox_hookH; hook: QCheckBox_stateChanged_Event); cdecl; external Qt4PasLib name 'QCheckBox_hook_hook_stateChanged'; function QSlider_hook_create(handle: QObjectH): QSlider_hookH; cdecl; external Qt4PasLib name 'QSlider_hook_create'; procedure QSlider_hook_destroy(handle: QSlider_hookH); cdecl; external Qt4PasLib name 'QSlider_hook_destroy'; function QTextBrowser_hook_create(handle: QObjectH): QTextBrowser_hookH; cdecl; external Qt4PasLib name 'QTextBrowser_hook_create'; procedure QTextBrowser_hook_destroy(handle: QTextBrowser_hookH); cdecl; external Qt4PasLib name 'QTextBrowser_hook_destroy'; procedure QTextBrowser_hook_hook_backwardAvailable(handle: QTextBrowser_hookH; hook: QTextBrowser_backwardAvailable_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_backwardAvailable'; procedure QTextBrowser_hook_hook_forwardAvailable(handle: QTextBrowser_hookH; hook: QTextBrowser_forwardAvailable_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_forwardAvailable'; procedure QTextBrowser_hook_hook_historyChanged(handle: QTextBrowser_hookH; hook: QTextBrowser_historyChanged_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_historyChanged'; procedure QTextBrowser_hook_hook_sourceChanged(handle: QTextBrowser_hookH; hook: QTextBrowser_sourceChanged_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_sourceChanged'; procedure QTextBrowser_hook_hook_highlighted(handle: QTextBrowser_hookH; hook: QTextBrowser_highlighted_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_highlighted'; procedure QTextBrowser_hook_hook_highlighted2(handle: QTextBrowser_hookH; hook: QTextBrowser_highlighted2_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_highlighted2'; procedure QTextBrowser_hook_hook_anchorClicked(handle: QTextBrowser_hookH; hook: QTextBrowser_anchorClicked_Event); cdecl; external Qt4PasLib name 'QTextBrowser_hook_hook_anchorClicked'; function QLabel_hook_create(handle: QObjectH): QLabel_hookH; cdecl; external Qt4PasLib name 'QLabel_hook_create'; procedure QLabel_hook_destroy(handle: QLabel_hookH); cdecl; external Qt4PasLib name 'QLabel_hook_destroy'; procedure QLabel_hook_hook_linkActivated(handle: QLabel_hookH; hook: QLabel_linkActivated_Event); cdecl; external Qt4PasLib name 'QLabel_hook_hook_linkActivated'; procedure QLabel_hook_hook_linkHovered(handle: QLabel_hookH; hook: QLabel_linkHovered_Event); cdecl; external Qt4PasLib name 'QLabel_hook_hook_linkHovered'; function QGroupBox_hook_create(handle: QObjectH): QGroupBox_hookH; cdecl; external Qt4PasLib name 'QGroupBox_hook_create'; procedure QGroupBox_hook_destroy(handle: QGroupBox_hookH); cdecl; external Qt4PasLib name 'QGroupBox_hook_destroy'; procedure QGroupBox_hook_hook_clicked(handle: QGroupBox_hookH; hook: QGroupBox_clicked_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_clicked'; procedure QGroupBox_hook_hook_clicked2(handle: QGroupBox_hookH; hook: QGroupBox_clicked2_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_clicked2'; procedure QGroupBox_hook_hook_toggled(handle: QGroupBox_hookH; hook: QGroupBox_toggled_Event); cdecl; external Qt4PasLib name 'QGroupBox_hook_hook_toggled'; function QDockWidget_hook_create(handle: QObjectH): QDockWidget_hookH; cdecl; external Qt4PasLib name 'QDockWidget_hook_create'; procedure QDockWidget_hook_destroy(handle: QDockWidget_hookH); cdecl; external Qt4PasLib name 'QDockWidget_hook_destroy'; procedure QDockWidget_hook_hook_featuresChanged(handle: QDockWidget_hookH; hook: QDockWidget_featuresChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_featuresChanged'; procedure QDockWidget_hook_hook_topLevelChanged(handle: QDockWidget_hookH; hook: QDockWidget_topLevelChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_topLevelChanged'; procedure QDockWidget_hook_hook_allowedAreasChanged(handle: QDockWidget_hookH; hook: QDockWidget_allowedAreasChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_allowedAreasChanged'; procedure QDockWidget_hook_hook_visibilityChanged(handle: QDockWidget_hookH; hook: QDockWidget_visibilityChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_visibilityChanged'; procedure QDockWidget_hook_hook_dockLocationChanged(handle: QDockWidget_hookH; hook: QDockWidget_dockLocationChanged_Event); cdecl; external Qt4PasLib name 'QDockWidget_hook_hook_dockLocationChanged'; function QTabBar_hook_create(handle: QObjectH): QTabBar_hookH; cdecl; external Qt4PasLib name 'QTabBar_hook_create'; procedure QTabBar_hook_destroy(handle: QTabBar_hookH); cdecl; external Qt4PasLib name 'QTabBar_hook_destroy'; procedure QTabBar_hook_hook_currentChanged(handle: QTabBar_hookH; hook: QTabBar_currentChanged_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_currentChanged'; procedure QTabBar_hook_hook_tabCloseRequested(handle: QTabBar_hookH; hook: QTabBar_tabCloseRequested_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_tabCloseRequested'; procedure QTabBar_hook_hook_tabMoved(handle: QTabBar_hookH; hook: QTabBar_tabMoved_Event); cdecl; external Qt4PasLib name 'QTabBar_hook_hook_tabMoved'; function QProgressBar_hook_create(handle: QObjectH): QProgressBar_hookH; cdecl; external Qt4PasLib name 'QProgressBar_hook_create'; procedure QProgressBar_hook_destroy(handle: QProgressBar_hookH); cdecl; external Qt4PasLib name 'QProgressBar_hook_destroy'; procedure QProgressBar_hook_hook_valueChanged(handle: QProgressBar_hookH; hook: QProgressBar_valueChanged_Event); cdecl; external Qt4PasLib name 'QProgressBar_hook_hook_valueChanged'; function QStatusBar_hook_create(handle: QObjectH): QStatusBar_hookH; cdecl; external Qt4PasLib name 'QStatusBar_hook_create'; procedure QStatusBar_hook_destroy(handle: QStatusBar_hookH); cdecl; external Qt4PasLib name 'QStatusBar_hook_destroy'; procedure QStatusBar_hook_hook_messageChanged(handle: QStatusBar_hookH; hook: QStatusBar_messageChanged_Event); cdecl; external Qt4PasLib name 'QStatusBar_hook_hook_messageChanged'; function QToolBox_hook_create(handle: QObjectH): QToolBox_hookH; cdecl; external Qt4PasLib name 'QToolBox_hook_create'; procedure QToolBox_hook_destroy(handle: QToolBox_hookH); cdecl; external Qt4PasLib name 'QToolBox_hook_destroy'; procedure QToolBox_hook_hook_currentChanged(handle: QToolBox_hookH; hook: QToolBox_currentChanged_Event); cdecl; external Qt4PasLib name 'QToolBox_hook_hook_currentChanged'; function QToolButton_hook_create(handle: QObjectH): QToolButton_hookH; cdecl; external Qt4PasLib name 'QToolButton_hook_create'; procedure QToolButton_hook_destroy(handle: QToolButton_hookH); cdecl; external Qt4PasLib name 'QToolButton_hook_destroy'; procedure QToolButton_hook_hook_triggered(handle: QToolButton_hookH; hook: QToolButton_triggered_Event); cdecl; external Qt4PasLib name 'QToolButton_hook_hook_triggered'; function QMdiArea_hook_create(handle: QObjectH): QMdiArea_hookH; cdecl; external Qt4PasLib name 'QMdiArea_hook_create'; procedure QMdiArea_hook_destroy(handle: QMdiArea_hookH); cdecl; external Qt4PasLib name 'QMdiArea_hook_destroy'; procedure QMdiArea_hook_hook_subWindowActivated(handle: QMdiArea_hookH; hook: QMdiArea_subWindowActivated_Event); cdecl; external Qt4PasLib name 'QMdiArea_hook_hook_subWindowActivated'; function QMdiSubWindow_hook_create(handle: QObjectH): QMdiSubWindow_hookH; cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_create'; procedure QMdiSubWindow_hook_destroy(handle: QMdiSubWindow_hookH); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_destroy'; procedure QMdiSubWindow_hook_hook_windowStateChanged(handle: QMdiSubWindow_hookH; hook: QMdiSubWindow_windowStateChanged_Event); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_hook_windowStateChanged'; procedure QMdiSubWindow_hook_hook_aboutToActivate(handle: QMdiSubWindow_hookH; hook: QMdiSubWindow_aboutToActivate_Event); cdecl; external Qt4PasLib name 'QMdiSubWindow_hook_hook_aboutToActivate'; function QCalendarWidget_hook_create(handle: QObjectH): QCalendarWidget_hookH; cdecl; external Qt4PasLib name 'QCalendarWidget_hook_create'; procedure QCalendarWidget_hook_destroy(handle: QCalendarWidget_hookH); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_destroy'; procedure QCalendarWidget_hook_hook_selectionChanged(handle: QCalendarWidget_hookH; hook: QCalendarWidget_selectionChanged_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_selectionChanged'; procedure QCalendarWidget_hook_hook_clicked(handle: QCalendarWidget_hookH; hook: QCalendarWidget_clicked_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_clicked'; procedure QCalendarWidget_hook_hook_activated(handle: QCalendarWidget_hookH; hook: QCalendarWidget_activated_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_activated'; procedure QCalendarWidget_hook_hook_currentPageChanged(handle: QCalendarWidget_hookH; hook: QCalendarWidget_currentPageChanged_Event); cdecl; external Qt4PasLib name 'QCalendarWidget_hook_hook_currentPageChanged'; function QPrintPreviewWidget_hook_create(handle: QObjectH): QPrintPreviewWidget_hookH; cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_create'; procedure QPrintPreviewWidget_hook_destroy(handle: QPrintPreviewWidget_hookH); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_destroy'; procedure QPrintPreviewWidget_hook_hook_paintRequested(handle: QPrintPreviewWidget_hookH; hook: QPrintPreviewWidget_paintRequested_Event); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_hook_paintRequested'; procedure QPrintPreviewWidget_hook_hook_previewChanged(handle: QPrintPreviewWidget_hookH; hook: QPrintPreviewWidget_previewChanged_Event); cdecl; external Qt4PasLib name 'QPrintPreviewWidget_hook_hook_previewChanged'; function QAbstractItemView_hook_create(handle: QObjectH): QAbstractItemView_hookH; cdecl; external Qt4PasLib name 'QAbstractItemView_hook_create'; procedure QAbstractItemView_hook_destroy(handle: QAbstractItemView_hookH); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_destroy'; procedure QAbstractItemView_hook_hook_pressed(handle: QAbstractItemView_hookH; hook: QAbstractItemView_pressed_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_pressed'; procedure QAbstractItemView_hook_hook_clicked(handle: QAbstractItemView_hookH; hook: QAbstractItemView_clicked_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_clicked'; procedure QAbstractItemView_hook_hook_doubleClicked(handle: QAbstractItemView_hookH; hook: QAbstractItemView_doubleClicked_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_doubleClicked'; procedure QAbstractItemView_hook_hook_activated(handle: QAbstractItemView_hookH; hook: QAbstractItemView_activated_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_activated'; procedure QAbstractItemView_hook_hook_entered(handle: QAbstractItemView_hookH; hook: QAbstractItemView_entered_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_entered'; procedure QAbstractItemView_hook_hook_viewportEntered(handle: QAbstractItemView_hookH; hook: QAbstractItemView_viewportEntered_Event); cdecl; external Qt4PasLib name 'QAbstractItemView_hook_hook_viewportEntered'; function QListView_hook_create(handle: QObjectH): QListView_hookH; cdecl; external Qt4PasLib name 'QListView_hook_create'; procedure QListView_hook_destroy(handle: QListView_hookH); cdecl; external Qt4PasLib name 'QListView_hook_destroy'; function QItemSelectionRange_hook_create(handle: QObjectH): QItemSelectionRange_hookH; cdecl; external Qt4PasLib name 'QItemSelectionRange_hook_create'; procedure QItemSelectionRange_hook_destroy(handle: QItemSelectionRange_hookH); cdecl; external Qt4PasLib name 'QItemSelectionRange_hook_destroy'; function QItemSelectionModel_hook_create(handle: QObjectH): QItemSelectionModel_hookH; cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_create'; procedure QItemSelectionModel_hook_destroy(handle: QItemSelectionModel_hookH); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_destroy'; procedure QItemSelectionModel_hook_hook_currentChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentChanged'; procedure QItemSelectionModel_hook_hook_currentRowChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentRowChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentRowChanged'; procedure QItemSelectionModel_hook_hook_currentColumnChanged(handle: QItemSelectionModel_hookH; hook: QItemSelectionModel_currentColumnChanged_Event); cdecl; external Qt4PasLib name 'QItemSelectionModel_hook_hook_currentColumnChanged'; function QListWidgetItem_hook_create(handle: QObjectH): QListWidgetItem_hookH; cdecl; external Qt4PasLib name 'QListWidgetItem_hook_create'; procedure QListWidgetItem_hook_destroy(handle: QListWidgetItem_hookH); cdecl; external Qt4PasLib name 'QListWidgetItem_hook_destroy'; function QListWidget_hook_create(handle: QObjectH): QListWidget_hookH; cdecl; external Qt4PasLib name 'QListWidget_hook_create'; procedure QListWidget_hook_destroy(handle: QListWidget_hookH); cdecl; external Qt4PasLib name 'QListWidget_hook_destroy'; procedure QListWidget_hook_hook_itemPressed(handle: QListWidget_hookH; hook: QListWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemPressed'; procedure QListWidget_hook_hook_itemClicked(handle: QListWidget_hookH; hook: QListWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemClicked'; procedure QListWidget_hook_hook_itemDoubleClicked(handle: QListWidget_hookH; hook: QListWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemDoubleClicked'; procedure QListWidget_hook_hook_itemActivated(handle: QListWidget_hookH; hook: QListWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemActivated'; procedure QListWidget_hook_hook_itemEntered(handle: QListWidget_hookH; hook: QListWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemEntered'; procedure QListWidget_hook_hook_itemChanged(handle: QListWidget_hookH; hook: QListWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemChanged'; procedure QListWidget_hook_hook_currentItemChanged(handle: QListWidget_hookH; hook: QListWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentItemChanged'; procedure QListWidget_hook_hook_currentTextChanged(handle: QListWidget_hookH; hook: QListWidget_currentTextChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentTextChanged'; procedure QListWidget_hook_hook_currentRowChanged(handle: QListWidget_hookH; hook: QListWidget_currentRowChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_currentRowChanged'; procedure QListWidget_hook_hook_itemSelectionChanged(handle: QListWidget_hookH; hook: QListWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QListWidget_hook_hook_itemSelectionChanged'; function QTreeView_hook_create(handle: QObjectH): QTreeView_hookH; cdecl; external Qt4PasLib name 'QTreeView_hook_create'; procedure QTreeView_hook_destroy(handle: QTreeView_hookH); cdecl; external Qt4PasLib name 'QTreeView_hook_destroy'; procedure QTreeView_hook_hook_expanded(handle: QTreeView_hookH; hook: QTreeView_expanded_Event); cdecl; external Qt4PasLib name 'QTreeView_hook_hook_expanded'; procedure QTreeView_hook_hook_collapsed(handle: QTreeView_hookH; hook: QTreeView_collapsed_Event); cdecl; external Qt4PasLib name 'QTreeView_hook_hook_collapsed'; function QTreeWidgetItem_hook_create(handle: QObjectH): QTreeWidgetItem_hookH; cdecl; external Qt4PasLib name 'QTreeWidgetItem_hook_create'; procedure QTreeWidgetItem_hook_destroy(handle: QTreeWidgetItem_hookH); cdecl; external Qt4PasLib name 'QTreeWidgetItem_hook_destroy'; function QTreeWidget_hook_create(handle: QObjectH): QTreeWidget_hookH; cdecl; external Qt4PasLib name 'QTreeWidget_hook_create'; procedure QTreeWidget_hook_destroy(handle: QTreeWidget_hookH); cdecl; external Qt4PasLib name 'QTreeWidget_hook_destroy'; procedure QTreeWidget_hook_hook_itemPressed(handle: QTreeWidget_hookH; hook: QTreeWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemPressed'; procedure QTreeWidget_hook_hook_itemClicked(handle: QTreeWidget_hookH; hook: QTreeWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemClicked'; procedure QTreeWidget_hook_hook_itemDoubleClicked(handle: QTreeWidget_hookH; hook: QTreeWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemDoubleClicked'; procedure QTreeWidget_hook_hook_itemActivated(handle: QTreeWidget_hookH; hook: QTreeWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemActivated'; procedure QTreeWidget_hook_hook_itemEntered(handle: QTreeWidget_hookH; hook: QTreeWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemEntered'; procedure QTreeWidget_hook_hook_itemChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemChanged'; procedure QTreeWidget_hook_hook_itemExpanded(handle: QTreeWidget_hookH; hook: QTreeWidget_itemExpanded_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemExpanded'; procedure QTreeWidget_hook_hook_itemCollapsed(handle: QTreeWidget_hookH; hook: QTreeWidget_itemCollapsed_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemCollapsed'; procedure QTreeWidget_hook_hook_currentItemChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_currentItemChanged'; procedure QTreeWidget_hook_hook_itemSelectionChanged(handle: QTreeWidget_hookH; hook: QTreeWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QTreeWidget_hook_hook_itemSelectionChanged'; function QHeaderView_hook_create(handle: QObjectH): QHeaderView_hookH; cdecl; external Qt4PasLib name 'QHeaderView_hook_create'; procedure QHeaderView_hook_destroy(handle: QHeaderView_hookH); cdecl; external Qt4PasLib name 'QHeaderView_hook_destroy'; procedure QHeaderView_hook_hook_sectionMoved(handle: QHeaderView_hookH; hook: QHeaderView_sectionMoved_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionMoved'; procedure QHeaderView_hook_hook_sectionResized(handle: QHeaderView_hookH; hook: QHeaderView_sectionResized_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionResized'; procedure QHeaderView_hook_hook_sectionPressed(handle: QHeaderView_hookH; hook: QHeaderView_sectionPressed_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionPressed'; procedure QHeaderView_hook_hook_sectionClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionClicked'; procedure QHeaderView_hook_hook_sectionEntered(handle: QHeaderView_hookH; hook: QHeaderView_sectionEntered_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionEntered'; procedure QHeaderView_hook_hook_sectionDoubleClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionDoubleClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionDoubleClicked'; procedure QHeaderView_hook_hook_sectionCountChanged(handle: QHeaderView_hookH; hook: QHeaderView_sectionCountChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionCountChanged'; procedure QHeaderView_hook_hook_sectionHandleDoubleClicked(handle: QHeaderView_hookH; hook: QHeaderView_sectionHandleDoubleClicked_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionHandleDoubleClicked'; procedure QHeaderView_hook_hook_sectionAutoResize(handle: QHeaderView_hookH; hook: QHeaderView_sectionAutoResize_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sectionAutoResize'; procedure QHeaderView_hook_hook_geometriesChanged(handle: QHeaderView_hookH; hook: QHeaderView_geometriesChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_geometriesChanged'; procedure QHeaderView_hook_hook_sortIndicatorChanged(handle: QHeaderView_hookH; hook: QHeaderView_sortIndicatorChanged_Event); cdecl; external Qt4PasLib name 'QHeaderView_hook_hook_sortIndicatorChanged'; function QStandardItem_hook_create(handle: QObjectH): QStandardItem_hookH; cdecl; external Qt4PasLib name 'QStandardItem_hook_create'; procedure QStandardItem_hook_destroy(handle: QStandardItem_hookH); cdecl; external Qt4PasLib name 'QStandardItem_hook_destroy'; function QStandardItemModel_hook_create(handle: QObjectH): QStandardItemModel_hookH; cdecl; external Qt4PasLib name 'QStandardItemModel_hook_create'; procedure QStandardItemModel_hook_destroy(handle: QStandardItemModel_hookH); cdecl; external Qt4PasLib name 'QStandardItemModel_hook_destroy'; procedure QStandardItemModel_hook_hook_itemChanged(handle: QStandardItemModel_hookH; hook: QStandardItemModel_itemChanged_Event); cdecl; external Qt4PasLib name 'QStandardItemModel_hook_hook_itemChanged'; function QAbstractItemDelegate_hook_create(handle: QObjectH): QAbstractItemDelegate_hookH; cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_create'; procedure QAbstractItemDelegate_hook_destroy(handle: QAbstractItemDelegate_hookH); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_destroy'; procedure QAbstractItemDelegate_hook_hook_commitData(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_commitData_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_commitData'; procedure QAbstractItemDelegate_hook_hook_closeEditor(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_closeEditor_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_closeEditor'; procedure QAbstractItemDelegate_hook_hook_closeEditor2(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_closeEditor2_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_closeEditor2'; procedure QAbstractItemDelegate_hook_hook_sizeHintChanged(handle: QAbstractItemDelegate_hookH; hook: QAbstractItemDelegate_sizeHintChanged_Event); cdecl; external Qt4PasLib name 'QAbstractItemDelegate_hook_hook_sizeHintChanged'; function QTableView_hook_create(handle: QObjectH): QTableView_hookH; cdecl; external Qt4PasLib name 'QTableView_hook_create'; procedure QTableView_hook_destroy(handle: QTableView_hookH); cdecl; external Qt4PasLib name 'QTableView_hook_destroy'; function QTableWidgetSelectionRange_hook_create(handle: QObjectH): QTableWidgetSelectionRange_hookH; cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_hook_create'; procedure QTableWidgetSelectionRange_hook_destroy(handle: QTableWidgetSelectionRange_hookH); cdecl; external Qt4PasLib name 'QTableWidgetSelectionRange_hook_destroy'; function QTableWidgetItem_hook_create(handle: QObjectH): QTableWidgetItem_hookH; cdecl; external Qt4PasLib name 'QTableWidgetItem_hook_create'; procedure QTableWidgetItem_hook_destroy(handle: QTableWidgetItem_hookH); cdecl; external Qt4PasLib name 'QTableWidgetItem_hook_destroy'; function QTableWidget_hook_create(handle: QObjectH): QTableWidget_hookH; cdecl; external Qt4PasLib name 'QTableWidget_hook_create'; procedure QTableWidget_hook_destroy(handle: QTableWidget_hookH); cdecl; external Qt4PasLib name 'QTableWidget_hook_destroy'; procedure QTableWidget_hook_hook_itemPressed(handle: QTableWidget_hookH; hook: QTableWidget_itemPressed_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemPressed'; procedure QTableWidget_hook_hook_itemClicked(handle: QTableWidget_hookH; hook: QTableWidget_itemClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemClicked'; procedure QTableWidget_hook_hook_itemDoubleClicked(handle: QTableWidget_hookH; hook: QTableWidget_itemDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemDoubleClicked'; procedure QTableWidget_hook_hook_itemActivated(handle: QTableWidget_hookH; hook: QTableWidget_itemActivated_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemActivated'; procedure QTableWidget_hook_hook_itemEntered(handle: QTableWidget_hookH; hook: QTableWidget_itemEntered_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemEntered'; procedure QTableWidget_hook_hook_itemChanged(handle: QTableWidget_hookH; hook: QTableWidget_itemChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemChanged'; procedure QTableWidget_hook_hook_currentItemChanged(handle: QTableWidget_hookH; hook: QTableWidget_currentItemChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_currentItemChanged'; procedure QTableWidget_hook_hook_itemSelectionChanged(handle: QTableWidget_hookH; hook: QTableWidget_itemSelectionChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_itemSelectionChanged'; procedure QTableWidget_hook_hook_cellPressed(handle: QTableWidget_hookH; hook: QTableWidget_cellPressed_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellPressed'; procedure QTableWidget_hook_hook_cellClicked(handle: QTableWidget_hookH; hook: QTableWidget_cellClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellClicked'; procedure QTableWidget_hook_hook_cellDoubleClicked(handle: QTableWidget_hookH; hook: QTableWidget_cellDoubleClicked_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellDoubleClicked'; procedure QTableWidget_hook_hook_cellActivated(handle: QTableWidget_hookH; hook: QTableWidget_cellActivated_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellActivated'; procedure QTableWidget_hook_hook_cellEntered(handle: QTableWidget_hookH; hook: QTableWidget_cellEntered_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellEntered'; procedure QTableWidget_hook_hook_cellChanged(handle: QTableWidget_hookH; hook: QTableWidget_cellChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_cellChanged'; procedure QTableWidget_hook_hook_currentCellChanged(handle: QTableWidget_hookH; hook: QTableWidget_currentCellChanged_Event); cdecl; external Qt4PasLib name 'QTableWidget_hook_hook_currentCellChanged'; function QDialog_hook_create(handle: QObjectH): QDialog_hookH; cdecl; external Qt4PasLib name 'QDialog_hook_create'; procedure QDialog_hook_destroy(handle: QDialog_hookH); cdecl; external Qt4PasLib name 'QDialog_hook_destroy'; procedure QDialog_hook_hook_finished(handle: QDialog_hookH; hook: QDialog_finished_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_finished'; procedure QDialog_hook_hook_accepted(handle: QDialog_hookH; hook: QDialog_accepted_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_accepted'; procedure QDialog_hook_hook_rejected(handle: QDialog_hookH; hook: QDialog_rejected_Event); cdecl; external Qt4PasLib name 'QDialog_hook_hook_rejected'; function QFileDialog_hook_create(handle: QObjectH): QFileDialog_hookH; cdecl; external Qt4PasLib name 'QFileDialog_hook_create'; procedure QFileDialog_hook_destroy(handle: QFileDialog_hookH); cdecl; external Qt4PasLib name 'QFileDialog_hook_destroy'; procedure QFileDialog_hook_hook_fileSelected(handle: QFileDialog_hookH; hook: QFileDialog_fileSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_fileSelected'; procedure QFileDialog_hook_hook_filesSelected(handle: QFileDialog_hookH; hook: QFileDialog_filesSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_filesSelected'; procedure QFileDialog_hook_hook_currentChanged(handle: QFileDialog_hookH; hook: QFileDialog_currentChanged_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_currentChanged'; procedure QFileDialog_hook_hook_directoryEntered(handle: QFileDialog_hookH; hook: QFileDialog_directoryEntered_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_directoryEntered'; procedure QFileDialog_hook_hook_filterSelected(handle: QFileDialog_hookH; hook: QFileDialog_filterSelected_Event); cdecl; external Qt4PasLib name 'QFileDialog_hook_hook_filterSelected'; function QProgressDialog_hook_create(handle: QObjectH): QProgressDialog_hookH; cdecl; external Qt4PasLib name 'QProgressDialog_hook_create'; procedure QProgressDialog_hook_destroy(handle: QProgressDialog_hookH); cdecl; external Qt4PasLib name 'QProgressDialog_hook_destroy'; procedure QProgressDialog_hook_hook_canceled(handle: QProgressDialog_hookH; hook: QProgressDialog_canceled_Event); cdecl; external Qt4PasLib name 'QProgressDialog_hook_hook_canceled'; function QAbstractPrintDialog_hook_create(handle: QObjectH): QAbstractPrintDialog_hookH; cdecl; external Qt4PasLib name 'QAbstractPrintDialog_hook_create'; procedure QAbstractPrintDialog_hook_destroy(handle: QAbstractPrintDialog_hookH); cdecl; external Qt4PasLib name 'QAbstractPrintDialog_hook_destroy'; function QPrintDialog_hook_create(handle: QObjectH): QPrintDialog_hookH; cdecl; external Qt4PasLib name 'QPrintDialog_hook_create'; procedure QPrintDialog_hook_destroy(handle: QPrintDialog_hookH); cdecl; external Qt4PasLib name 'QPrintDialog_hook_destroy'; procedure QPrintDialog_hook_hook_accepted(handle: QPrintDialog_hookH; hook: QPrintDialog_accepted_Event); cdecl; external Qt4PasLib name 'QPrintDialog_hook_hook_accepted'; function QPrintPreviewDialog_hook_create(handle: QObjectH): QPrintPreviewDialog_hookH; cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_create'; procedure QPrintPreviewDialog_hook_destroy(handle: QPrintPreviewDialog_hookH); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_destroy'; procedure QPrintPreviewDialog_hook_hook_paintRequested(handle: QPrintPreviewDialog_hookH; hook: QPrintPreviewDialog_paintRequested_Event); cdecl; external Qt4PasLib name 'QPrintPreviewDialog_hook_hook_paintRequested'; function QSystemTrayIcon_hook_create(handle: QObjectH): QSystemTrayIcon_hookH; cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_create'; procedure QSystemTrayIcon_hook_destroy(handle: QSystemTrayIcon_hookH); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_destroy'; procedure QSystemTrayIcon_hook_hook_activated(handle: QSystemTrayIcon_hookH; hook: QSystemTrayIcon_activated_Event); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_hook_activated'; procedure QSystemTrayIcon_hook_hook_messageClicked(handle: QSystemTrayIcon_hookH; hook: QSystemTrayIcon_messageClicked_Event); cdecl; external Qt4PasLib name 'QSystemTrayIcon_hook_hook_messageClicked'; function QGraphicsScene_hook_create(handle: QObjectH): QGraphicsScene_hookH; cdecl; external Qt4PasLib name 'QGraphicsScene_hook_create'; procedure QGraphicsScene_hook_destroy(handle: QGraphicsScene_hookH); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_destroy'; procedure QGraphicsScene_hook_hook_sceneRectChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_sceneRectChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_sceneRectChanged'; procedure QGraphicsScene_hook_hook_selectionChanged(handle: QGraphicsScene_hookH; hook: QGraphicsScene_selectionChanged_Event); cdecl; external Qt4PasLib name 'QGraphicsScene_hook_hook_selectionChanged'; function QAbstractSocket_hook_create(handle: QObjectH): QAbstractSocket_hookH; cdecl; external Qt4PasLib name 'QAbstractSocket_hook_create'; procedure QAbstractSocket_hook_destroy(handle: QAbstractSocket_hookH); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_destroy'; procedure QAbstractSocket_hook_hook_hostFound(handle: QAbstractSocket_hookH; hook: QAbstractSocket_hostFound_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_hostFound'; procedure QAbstractSocket_hook_hook_connected(handle: QAbstractSocket_hookH; hook: QAbstractSocket_connected_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_connected'; procedure QAbstractSocket_hook_hook_disconnected(handle: QAbstractSocket_hookH; hook: QAbstractSocket_disconnected_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_disconnected'; procedure QAbstractSocket_hook_hook_stateChanged(handle: QAbstractSocket_hookH; hook: QAbstractSocket_stateChanged_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_stateChanged'; procedure QAbstractSocket_hook_hook_error(handle: QAbstractSocket_hookH; hook: QAbstractSocket_error_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_error'; procedure QAbstractSocket_hook_hook_proxyAuthenticationRequired(handle: QAbstractSocket_hookH; hook: QAbstractSocket_proxyAuthenticationRequired_Event); cdecl; external Qt4PasLib name 'QAbstractSocket_hook_hook_proxyAuthenticationRequired'; function QUdpSocket_hook_create(handle: QObjectH): QUdpSocket_hookH; cdecl; external Qt4PasLib name 'QUdpSocket_hook_create'; procedure QUdpSocket_hook_destroy(handle: QUdpSocket_hookH); cdecl; external Qt4PasLib name 'QUdpSocket_hook_destroy'; function QTcpSocket_hook_create(handle: QObjectH): QTcpSocket_hookH; cdecl; external Qt4PasLib name 'QTcpSocket_hook_create'; procedure QTcpSocket_hook_destroy(handle: QTcpSocket_hookH); cdecl; external Qt4PasLib name 'QTcpSocket_hook_destroy'; function QTcpServer_hook_create(handle: QObjectH): QTcpServer_hookH; cdecl; external Qt4PasLib name 'QTcpServer_hook_create'; procedure QTcpServer_hook_destroy(handle: QTcpServer_hookH); cdecl; external Qt4PasLib name 'QTcpServer_hook_destroy'; procedure QTcpServer_hook_hook_newConnection(handle: QTcpServer_hookH; hook: QTcpServer_newConnection_Event); cdecl; external Qt4PasLib name 'QTcpServer_hook_hook_newConnection'; function QNetworkAccessManager_hook_create(handle: QObjectH): QNetworkAccessManager_hookH; cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_create'; procedure QNetworkAccessManager_hook_destroy(handle: QNetworkAccessManager_hookH); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_destroy'; procedure QNetworkAccessManager_hook_hook_proxyAuthenticationRequired(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_proxyAuthenticationRequired_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_proxyAuthenticationRequired'; procedure QNetworkAccessManager_hook_hook_authenticationRequired(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_authenticationRequired_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_authenticationRequired'; procedure QNetworkAccessManager_hook_hook_finished(handle: QNetworkAccessManager_hookH; hook: QNetworkAccessManager_finished_Event); cdecl; external Qt4PasLib name 'QNetworkAccessManager_hook_hook_finished'; function QNetworkReply_hook_create(handle: QObjectH): QNetworkReply_hookH; cdecl; external Qt4PasLib name 'QNetworkReply_hook_create'; procedure QNetworkReply_hook_destroy(handle: QNetworkReply_hookH); cdecl; external Qt4PasLib name 'QNetworkReply_hook_destroy'; procedure QNetworkReply_hook_hook_metaDataChanged(handle: QNetworkReply_hookH; hook: QNetworkReply_metaDataChanged_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_metaDataChanged'; procedure QNetworkReply_hook_hook_finished(handle: QNetworkReply_hookH; hook: QNetworkReply_finished_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_finished'; procedure QNetworkReply_hook_hook_error(handle: QNetworkReply_hookH; hook: QNetworkReply_error_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_error'; procedure QNetworkReply_hook_hook_uploadProgress(handle: QNetworkReply_hookH; hook: QNetworkReply_uploadProgress_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_uploadProgress'; procedure QNetworkReply_hook_hook_downloadProgress(handle: QNetworkReply_hookH; hook: QNetworkReply_downloadProgress_Event); cdecl; external Qt4PasLib name 'QNetworkReply_hook_hook_downloadProgress'; function QWebHitTestResult_hook_create(handle: QObjectH): QWebHitTestResult_hookH; cdecl; external Qt4PasLib name 'QWebHitTestResult_hook_create'; procedure QWebHitTestResult_hook_destroy(handle: QWebHitTestResult_hookH); cdecl; external Qt4PasLib name 'QWebHitTestResult_hook_destroy'; function QWebFrame_hook_create(handle: QObjectH): QWebFrame_hookH; cdecl; external Qt4PasLib name 'QWebFrame_hook_create'; procedure QWebFrame_hook_destroy(handle: QWebFrame_hookH); cdecl; external Qt4PasLib name 'QWebFrame_hook_destroy'; procedure QWebFrame_hook_hook_javaScriptWindowObjectCleared(handle: QWebFrame_hookH; hook: QWebFrame_javaScriptWindowObjectCleared_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_javaScriptWindowObjectCleared'; procedure QWebFrame_hook_hook_provisionalLoad(handle: QWebFrame_hookH; hook: QWebFrame_provisionalLoad_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_provisionalLoad'; procedure QWebFrame_hook_hook_titleChanged(handle: QWebFrame_hookH; hook: QWebFrame_titleChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_titleChanged'; procedure QWebFrame_hook_hook_urlChanged(handle: QWebFrame_hookH; hook: QWebFrame_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_urlChanged'; procedure QWebFrame_hook_hook_initialLayoutCompleted(handle: QWebFrame_hookH; hook: QWebFrame_initialLayoutCompleted_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_initialLayoutCompleted'; procedure QWebFrame_hook_hook_iconChanged(handle: QWebFrame_hookH; hook: QWebFrame_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebFrame_hook_hook_iconChanged'; function QWebSecurityOrigin_hook_create(handle: QObjectH): QWebSecurityOrigin_hookH; cdecl; external Qt4PasLib name 'QWebSecurityOrigin_hook_create'; procedure QWebSecurityOrigin_hook_destroy(handle: QWebSecurityOrigin_hookH); cdecl; external Qt4PasLib name 'QWebSecurityOrigin_hook_destroy'; function QWebDatabase_hook_create(handle: QObjectH): QWebDatabase_hookH; cdecl; external Qt4PasLib name 'QWebDatabase_hook_create'; procedure QWebDatabase_hook_destroy(handle: QWebDatabase_hookH); cdecl; external Qt4PasLib name 'QWebDatabase_hook_destroy'; function QWebHistoryItem_hook_create(handle: QObjectH): QWebHistoryItem_hookH; cdecl; external Qt4PasLib name 'QWebHistoryItem_hook_create'; procedure QWebHistoryItem_hook_destroy(handle: QWebHistoryItem_hookH); cdecl; external Qt4PasLib name 'QWebHistoryItem_hook_destroy'; function QWebHistory_hook_create(handle: QObjectH): QWebHistory_hookH; cdecl; external Qt4PasLib name 'QWebHistory_hook_create'; procedure QWebHistory_hook_destroy(handle: QWebHistory_hookH); cdecl; external Qt4PasLib name 'QWebHistory_hook_destroy'; function QWebHistoryInterface_hook_create(handle: QObjectH): QWebHistoryInterface_hookH; cdecl; external Qt4PasLib name 'QWebHistoryInterface_hook_create'; procedure QWebHistoryInterface_hook_destroy(handle: QWebHistoryInterface_hookH); cdecl; external Qt4PasLib name 'QWebHistoryInterface_hook_destroy'; function QWebPage_hook_create(handle: QObjectH): QWebPage_hookH; cdecl; external Qt4PasLib name 'QWebPage_hook_create'; procedure QWebPage_hook_destroy(handle: QWebPage_hookH); cdecl; external Qt4PasLib name 'QWebPage_hook_destroy'; procedure QWebPage_hook_hook_loadStarted(handle: QWebPage_hookH; hook: QWebPage_loadStarted_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadStarted'; procedure QWebPage_hook_hook_loadProgress(handle: QWebPage_hookH; hook: QWebPage_loadProgress_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadProgress'; procedure QWebPage_hook_hook_loadFinished(handle: QWebPage_hookH; hook: QWebPage_loadFinished_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_loadFinished'; procedure QWebPage_hook_hook_linkHovered(handle: QWebPage_hookH; hook: QWebPage_linkHovered_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_linkHovered'; procedure QWebPage_hook_hook_statusBarMessage(handle: QWebPage_hookH; hook: QWebPage_statusBarMessage_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_statusBarMessage'; procedure QWebPage_hook_hook_selectionChanged(handle: QWebPage_hookH; hook: QWebPage_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_selectionChanged'; procedure QWebPage_hook_hook_frameCreated(handle: QWebPage_hookH; hook: QWebPage_frameCreated_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_frameCreated'; procedure QWebPage_hook_hook_geometryChangeRequested(handle: QWebPage_hookH; hook: QWebPage_geometryChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_geometryChangeRequested'; procedure QWebPage_hook_hook_repaintRequested(handle: QWebPage_hookH; hook: QWebPage_repaintRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_repaintRequested'; procedure QWebPage_hook_hook_scrollRequested(handle: QWebPage_hookH; hook: QWebPage_scrollRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_scrollRequested'; procedure QWebPage_hook_hook_windowCloseRequested(handle: QWebPage_hookH; hook: QWebPage_windowCloseRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_windowCloseRequested'; procedure QWebPage_hook_hook_printRequested(handle: QWebPage_hookH; hook: QWebPage_printRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_printRequested'; procedure QWebPage_hook_hook_linkClicked(handle: QWebPage_hookH; hook: QWebPage_linkClicked_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_linkClicked'; procedure QWebPage_hook_hook_toolBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_toolBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_toolBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_statusBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_statusBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_statusBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_menuBarVisibilityChangeRequested(handle: QWebPage_hookH; hook: QWebPage_menuBarVisibilityChangeRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_menuBarVisibilityChangeRequested'; procedure QWebPage_hook_hook_unsupportedContent(handle: QWebPage_hookH; hook: QWebPage_unsupportedContent_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_unsupportedContent'; procedure QWebPage_hook_hook_downloadRequested(handle: QWebPage_hookH; hook: QWebPage_downloadRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_downloadRequested'; procedure QWebPage_hook_hook_microFocusChanged(handle: QWebPage_hookH; hook: QWebPage_microFocusChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_microFocusChanged'; procedure QWebPage_hook_hook_contentsChanged(handle: QWebPage_hookH; hook: QWebPage_contentsChanged_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_contentsChanged'; procedure QWebPage_hook_hook_databaseQuotaExceeded(handle: QWebPage_hookH; hook: QWebPage_databaseQuotaExceeded_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_databaseQuotaExceeded'; procedure QWebPage_hook_hook_saveFrameStateRequested(handle: QWebPage_hookH; hook: QWebPage_saveFrameStateRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_saveFrameStateRequested'; procedure QWebPage_hook_hook_restoreFrameStateRequested(handle: QWebPage_hookH; hook: QWebPage_restoreFrameStateRequested_Event); cdecl; external Qt4PasLib name 'QWebPage_hook_hook_restoreFrameStateRequested'; function QWebSettings_hook_create(handle: QObjectH): QWebSettings_hookH; cdecl; external Qt4PasLib name 'QWebSettings_hook_create'; procedure QWebSettings_hook_destroy(handle: QWebSettings_hookH); cdecl; external Qt4PasLib name 'QWebSettings_hook_destroy'; function QWebView_hook_create(handle: QObjectH): QWebView_hookH; cdecl; external Qt4PasLib name 'QWebView_hook_create'; procedure QWebView_hook_destroy(handle: QWebView_hookH); cdecl; external Qt4PasLib name 'QWebView_hook_destroy'; procedure QWebView_hook_hook_loadStarted(handle: QWebView_hookH; hook: QWebView_loadStarted_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadStarted'; procedure QWebView_hook_hook_loadProgress(handle: QWebView_hookH; hook: QWebView_loadProgress_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadProgress'; procedure QWebView_hook_hook_loadFinished(handle: QWebView_hookH; hook: QWebView_loadFinished_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_loadFinished'; procedure QWebView_hook_hook_titleChanged(handle: QWebView_hookH; hook: QWebView_titleChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_titleChanged'; procedure QWebView_hook_hook_statusBarMessage(handle: QWebView_hookH; hook: QWebView_statusBarMessage_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_statusBarMessage'; procedure QWebView_hook_hook_linkClicked(handle: QWebView_hookH; hook: QWebView_linkClicked_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_linkClicked'; procedure QWebView_hook_hook_selectionChanged(handle: QWebView_hookH; hook: QWebView_selectionChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_selectionChanged'; procedure QWebView_hook_hook_iconChanged(handle: QWebView_hookH; hook: QWebView_iconChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_iconChanged'; procedure QWebView_hook_hook_urlChanged(handle: QWebView_hookH; hook: QWebView_urlChanged_Event); cdecl; external Qt4PasLib name 'QWebView_hook_hook_urlChanged'; //======================================================= // Dynamic Qt Version //======================================================= function QtVersion : PChar; cdecl; external Qt4PasLib name 'QtVersion'; //======================================================= // Special-Purpose Global Functions Exported by Qt //======================================================= {$IFDEF BINUX} procedure QtX11WaitForWindowManager(handle : QWidgetH); cdecl; external Qt4PasLib name 'qtx11waitforwindowmanager'; {$ENDIF} {$IFDEF DARWIN} procedure QtMacSetDockMenu(handle : QMenuH); cdecl; external Qt4PasLib name 'qtmacsetdockmenu'; {$ENDIF} //======================================================= // Drawing Utility Functions (qdrawutil.h) //======================================================= procedure q_DrawShadeRect(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadeRect'; procedure q_DrawShadeRect(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadeRect2'; procedure q_DrawPlainRect(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; p6: PQColor; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawPlainRect'; procedure q_DrawPlainRect(p: QPainterH; r: PRect; p3: PQColor; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawPlainRect2'; procedure q_DrawWinPanel(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawWinPanel'; procedure q_DrawWinPanel(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawWinPanel2'; procedure q_DrawShadeLine(p: QPainterH; x1: Integer; y1: Integer; x2: Integer; y2: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; midLineWidth: Integer = 0); overload; cdecl; external Qt4PasLib name 'q_DrawShadeLine'; procedure q_DrawShadePanel(p: QPainterH; x: Integer; y: Integer; w: Integer; h: Integer; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadePanel'; procedure q_DrawShadePanel(p: QPainterH; r: PRect; pal: QPaletteH; sunken: Boolean = False; lineWidth: Integer = 1; fill: QBrushH = nil); overload; cdecl; external Qt4PasLib name 'q_DrawShadePanel2'; //======================================================= // Pascal Bind Functions //======================================================= procedure initPWideStrings(CUPS, UOPS, LOPS, IPS, FPS: Pointer); cdecl; external Qt4PasLib name 'initPWideStrings'; procedure InitializePPtrIntArray(GPP, GPL, SPL: Pointer); cdecl; external Qt4PasLib name 'initializePPtrIntArray'; procedure InitializeQRealArray(GPP, GPL, SPL: Pointer); cdecl; external Qt4PasLib name 'initializeQRealArray'; implementation uses SysUtils,Math; function QtPoint(X,Y:integer): TQtPoint; begin Result.X:=X; Result.Y:=Y; end; function QtPointF(X,Y:QReal): TQtPointF; begin Result.X:=X; Result.Y:=Y; end; // AnsiString Access from c-code procedure CopyCharsToPAnsiString(Chars: PAnsiChar; var S: AnsiString); cdecl; export; begin S := Chars; end; function CharsOfPAnsiString(var S: AnsiString): PAnsiChar; cdecl; export; begin Result := PAnsiChar(Pointer(S)); end; procedure InitPAnsiString(var S: PAnsiString); cdecl; export; begin New(S); end; procedure FinalPAnsiString(var S: PAnsiString); cdecl; export; begin Dispose(S); end; // WideString Access from c-code procedure CopyUnicodeToPWideString(Unicode: PWideChar; var S: WideString; Len: Integer); cdecl; export; begin SetString(S, Unicode, Len); end; function UnicodeOfPWideString(var S: WideString): PWideChar; cdecl; export; const cEmptyStr = ''; begin if @S = nil then Result := cEmptyStr else Result := PWideChar(Pointer(S)); end; function LengthOfPWideString(var S: WideString): Integer; cdecl; export; begin if @S <> nil then Result := Length(S) else Result := 0; end; procedure InitPWideString(var S: PWideString); cdecl; export; begin New(S); end; procedure FinalPWideString(var S: PWideString); cdecl; export; begin Dispose(S); end; // PtrInt Array Access from c-code function GetPtrIntArrayAddr(var PArr : TPtrIntArray): PPtrInt; cdecl; export; begin Result:=@PArr[0]; end; function GetPtrIntArrayLength(var PArr: TPtrIntArray): Integer; cdecl; export; begin Result := Length(PArr); end; procedure SetPtrIntArrayLength(var PArr: TPtrIntArray; Len: Integer); cdecl; export; begin SetLength(PArr, Len); end; // QReal Array Access from c-code function GetQRealArrayAddr(var PArr : TQRealArray): PPtrInt; cdecl; export; begin Result := @PArr[0]; end; function GetQRealArrayLength(var PArr: TQRealArray): Integer; cdecl; export; begin Result := Length(PArr); end; procedure SetQRealArrayLength(var PArr: TQRealArray; Len: Integer); cdecl; export; begin SetLength(PArr, Len); end; initialization initPWideStrings(@CopyUnicodeToPWideString, @UnicodeOfPWideString, @LengthOfPWideString, @InitPWideString, @FinalPWideString); InitializePPtrIntArray(@GetPtrIntArrayAddr, @GetPtrIntArrayLength, @SetPtrIntArrayLength); InitializeQRealArray(@GetQRealArrayAddr, @GetQRealArrayLength, @SetQRealArrayLength); SetExceptionMask([exDenormalized,exInvalidOp,exOverflow,exPrecision,exUnderflow,exZeroDivide]); end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/src/wlxMplayer.lpr�������������������������������������������0000644�0001750�0000144�00000017035�12117057733�022602� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ WlxMplayer ------------------------------------------------------------------------- This is WLX (Lister) plugin for Double Commander. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Class TExProcess used in plugin was written by Anton Rjeshevsky. Gtk2 and Qt support were added by Koblov Alexander (Alexx2000@mail.ru) 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 } library wlxMplayer; {$mode objfpc}{$H+} {$include calling.inc} {$IF NOT (DEFINED(LCLGTK) or DEFINED(LCLGTK2) or DEFINED(LCLQT))} {$DEFINE LCLGTK2} {$ENDIF} uses {$IFDEF UNIX} cthreads, {$ENDIF} Classes, sysutils, x, {$IFDEF LCLGTK} gtk, gdk, glib, {$ENDIF} {$IFDEF LCLGTK2} gtk2, gdk2, glib2, gdk2x, {$ENDIF} {$IFDEF LCLQT} qt4, {$ENDIF} process, math, WLXPlugin; type { TExProcess } TExProcess = class protected p: TProcess; s: string; function _GetExitStatus(): integer; public RezList:TStringList; constructor Create(commandline: string); procedure Execute; destructor Destroy; procedure OnReadLn(str: string); property ExitStatus: integer read _GetExitStatus; end; const buf_len = 3000; { TExProcess } function TExProcess._GetExitStatus(): integer; begin Result:=p.ExitStatus; end; constructor TExProcess.Create(commandline: string); begin RezList:=TStringList.Create; s:=''; p:=TProcess.Create(nil); p.CommandLine:=commandline; p.Options:=[poUsePipes,poNoConsole]; end; procedure TExProcess.Execute; var buf: string; i, j, c, n: integer; begin p.Execute; repeat SetLength(buf, buf_len); SetLength(buf, p.output.Read(buf[1], length(buf))); //waits for the process output // cut the incoming stream to lines: s:=s + buf; //add to the accumulator repeat //detect the line breaks and cut. i:=Pos(#13, s); j:=Pos(#10, s); if i=0 then i:=j; if j=0 then j:=i; if j = 0 then Break; //there are no complete lines yet. OnReadLn(Copy(s, 1, min(i, j) - 1)); //return the line without the CR/LF characters s:=Copy(s, max(i, j) + 1, length(s) - max(i, j)); //remove the line from accumulator until false; until buf = ''; if s <> '' then OnReadLn(s); end; destructor TExProcess.Destroy; begin RezList.Free; p.Free; end; procedure TExProcess.OnReadLn(str: string); begin RezList.Add(str); end; type //Class implementing mplayer control { TMPlayer } TMPlayer=class(TThread) public //--------------------- hWidget:THandle; //the integrable widget fileName:string; //filename xid:TWindow; //X window handle pr:TProcess; //mplayer's process pmplayer:string; //path to mplayer //--------------------- constructor Create(APlayerPath, AFilename: String); destructor destroy; override; procedure SetParentWidget(AWidget:thandle); protected procedure Execute; override; private end; { TMPlayer } constructor TMPlayer.Create(APlayerPath, AFilename: String); begin inherited Create(True); filename:= '"' + AFilename + '"'; pmplayer:= APlayerPath + ' '; WriteLn('wlxMPlayer: found mplayer in - ' + pmplayer); end; destructor TMPlayer.destroy; begin if pr.Running then pr.Terminate(0); pr.Free; {$IF DEFINED(LCLQT)} QWidget_Destroy(QWidgetH(hWidget)); {$ELSE} gtk_widget_destroy(PGtkWidget(hWidget)); {$ENDIF} inherited destroy; end; procedure TMPlayer.SetParentWidget(AWidget: THandle); {$IFDEF LCLQT} begin hWidget:= THandle(QWidget_create(QWidgetH(AWidget))); QWidget_show(QWidgetH(hWidget)); xid:= QWidget_winId(QWidgetH(hWidget)); end; {$ELSE} var widget, mySocket: PGtkWidget; //the socket begin widget := PGtkWidget(AWidget); mySocket := gtk_socket_new; gtk_container_add(GTK_CONTAINER(widget), mySocket); gtk_widget_show(mySocket); gtk_widget_show(widget); gtk_widget_realize(mySocket); {$IFDEF LCLGTK} xid:= (PGdkWindowPrivate(mySocket^.window))^.xwindow; {$ENDIF} {$IFDEF LCLGTK2} xid:= GDK_WINDOW_XID(mySocket^.window); {$ENDIF} hWidget:= THandle(mySocket); end; {$ENDIF} procedure TMPlayer.Execute; begin pr:=TProcess.Create(nil); pr.Options := Pr.Options + [poWaitOnExit,poNoConsole{,poUsePipes}]; //mplayer stops if poUsePipes used. pr.CommandLine:=pmplayer+fileName+' -wid '+IntToStr(xid); WriteLn(pr.CommandLine); pr.Execute; end; //Custom class contains info for plugin windows type { TPlugInfo } TPlugInfo = class private fControls:TStringList; public fFileToLoad:string; fShowFlags:integer; //etc constructor Create; destructor Destroy; override; function AddControl(AItem: TMPlayer):integer; end; { TPlugInfo } constructor TPlugInfo.Create; begin fControls:=TStringlist.Create; end; destructor TPlugInfo.Destroy; begin while fControls.Count>0 do begin TMPlayer(fControls.Objects[0]).Free; fControls.Delete(0); end; inherited Destroy; end; function TPlugInfo.AddControl(AItem: TMPlayer): integer; begin fControls.AddObject(inttostr(PtrUInt(AItem)),TObject(AItem)); end; {Plugin main part} var List:TStringList; function ListLoad(ParentWin: THandle; FileToLoad: PChar; ShowFlags: Integer): THandle; dcpcall; var pf: TExProcess; sPlayerPath: String; p: TMPlayer; begin pf:= TExProcess.Create('which mplayer'); try pf.Execute; if (pf.RezList.Count <> 0) then sPlayerPath:= pf.RezList[0] else WriteLn('wlxMPlayer: mplayer not found!'); finally pf.Free; end; if sPlayerPath = EmptyStr then Exit(wlxInvalidHandle); p:= TMPlayer.Create(sPlayerPath, string(FileToLoad)); p.SetParentWidget(ParentWin); // Create list if none if not Assigned(List) then List:= TStringList.Create; // Add to list new plugin window and it's info List.AddObject(IntToStr(PtrInt(p.hWidget)), TPlugInfo.Create); with TPlugInfo(List.Objects[List.Count-1]) do begin fFileToLoad:= FileToLoad; fShowFlags:= ShowFlags; AddControl(p); end; Result:= p.hWidget; p.Resume; end; procedure ListCloseWindow(ListWin:thandle); dcpcall; var Index:integer; s:string; begin if assigned(List) then begin writeln('ListCloseWindow quit, List Item count: '+inttostr(List.Count)); s:=IntToStr(ListWin); Index:=List.IndexOf(s); if Index>-1 then begin TPlugInfo(List.Objects[index]).Free; List.Delete(Index); writeln('List item n: '+inttostr(Index)+' Deleted'); end; //Free list if it has zero items If List.Count=0 then FreeAndNil(List); end; end; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); dcpcall; begin StrLCopy(DetectString, '(EXT="AVI")|(EXT="MKV")|(EXT="FLV")|(EXT="MPG")|(EXT="MPEG")|(EXT="MP4")|(EXT="VOB")', maxlen); end; exports ListLoad, ListCloseWindow, ListGetDetectString; {$R *.res} begin end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/src/wlxMplayer.lpi�������������������������������������������0000644�0001750�0000144�00000011726�12451531427�022570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="MPlayer WLX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\wlxmplayer.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS)\$(LCLWidgetType);..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CustomOptions Value="-dLCL$(LCLWidgetType)"/> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="wlxMplayer.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="wlxMplayer"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\wlxmplayer.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS)\$(LCLWidgetType);..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CustomOptions Value="-dLCL$(LCLWidgetType)"/> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/lib/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017703� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/COPYING.txt��������������������������������������������������0000644�0001750�0000144�00000020735�12407332717�021002� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ This is the file COPYING.TXT, it applies to the Free Pascal Qt4 Binding. The source code of the Free Pascal Qt4 binding is distributed under the GNU Lesser General Public License (see http://www.gnu.org/licenses/lgpl.txt and below) with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. http://www.gnu.org/licenses/lgpl.txt: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. �����������������������������������doublecmd-0.7.1/plugins/wlx/WlxMplayer/README.txt���������������������������������������������������0000644�0001750�0000144�00000002542�12014201074�020604� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ WlxMplayer ------------------------------------------------------------------------- This is WLX (Lister) plugin for Double Commander. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Class TExProcess used in plugin was written by Anton Rjeshevsky. Gtk2 and Qt support were added by Koblov Alexander (Alexx2000@mail.ru) 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 While the gui interface for wlx isn't developed to use this plugin add to doublecmd.ini these lines and edit them. [Lister Plugins] PluginCount=1 Plugin1Name=WlxMplayer Plugin1Detect=(EXT="MPG")|(EXT="AVI")|(EXT="MPEG")|(EXT="FLV") Plugin1Path=*Here you must write path to compiled plugin* ��������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017055� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017644� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/src/simplewlx.lpi���������������������������������������������0000644�0001750�0000144�00000004175�12201667623�022371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <Language Value=""/> <CharSet Value=""/> <StringTable ProductVersion=""/> </VersionInfo> <BuildModes Count="1"> <Item1 Name="default" Default="True"/> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="simplewlx.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="SimpleWlx"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/simplewlx.wlx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/src/simplewlx.lpr���������������������������������������������0000644�0001750�0000144�00000005325�12117057733�022401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library SimpleWlx; {$mode objfpc}{$H+} {$include calling.inc} {$DEFINE GTK2} uses Classes, sysutils, {$IFDEF GTK} gtk,gdk,glib, {$ENDIF} {$IFDEF GTK2} gtk2,gdk2,glib2, {$ENDIF} WLXPlugin; var List:TStringList; //Custom class contains info for plugin windows type { TPlugInfo } TPlugInfo = class private fControls:TStringList; public fFileToLoad:string; fShowFlags:integer; //etc constructor Create; destructor Destroy; override; function AddControl(AItem:PGtkWidget):integer; end; { TPlugInfo } constructor TPlugInfo.Create; begin fControls:=TStringlist.Create; end; destructor TPlugInfo.Destroy; begin while fControls.Count>0 do begin gtk_widget_destroy(PGtkWidget(fControls.Objects[0])); fControls.Delete(0); end; inherited Destroy; end; function TPlugInfo.AddControl(AItem: PGtkWidget): integer; begin fControls.AddObject(inttostr(Integer(AItem)),TObject(AItem)); end; function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; dcpcall; var GFix, GButton1, Gbutton2: PGtkWidget; begin // gFix:=gtk_fixed_new; gFix:=gtk_vbox_new(true,5); gtk_container_add(GTK_CONTAINER(PGtkWidget(ParentWin)),gFix); gtk_widget_show(gFix); GButton1:=gtk_button_new_with_label('Yehoo1'); gtk_container_add(GTK_CONTAINER(GFix),GButton1); gtk_widget_set_usize(GButton1,10,10); // gtk_widget_set_uposition(GButton1,30,10); gtk_widget_show(GButton1); Gbutton2:=gtk_button_new_with_label('Yehoo2'); gtk_container_add(GTK_CONTAINER(GFix),Gbutton2 ); gtk_widget_set_usize(GButton2,20,20); // gtk_widget_set_uposition(GButton2,50,50); gtk_widget_show(Gbutton2); //Create list if none if not assigned(List) then List:=TStringList.Create; //add to list new plugin window and it's info List.AddObject(IntToStr(integer(GFix)),TPlugInfo.Create); with TPlugInfo(List.Objects[List.Count-1]) do begin fFileToLoad:=FileToLoad; fShowFlags:=ShowFlags; AddControl(GFix); end; Result:= thandle(GFix); end; procedure ListCloseWindow(ListWin:thandle); dcpcall; var Index:integer; s:string; begin if assigned(List) then begin writeln('ListCloseWindow quit, List Item count: '+inttostr(List.Count)); s:=IntToStr(ListWin); Index:=List.IndexOf(s); if Index>-1 then begin TPlugInfo(List.Objects[index]).Free; List.Delete(Index); writeln('List item n: '+inttostr(Index)+' Deleted'); end; //Free list if it has zero items If List.Count=0 then FreeAndNil(List); end; end; exports ListLoad, ListCloseWindow; begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/src/wlxplugin.pas���������������������������������������������0000644�0001750�0000144�00000004443�12014201074�022355� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Lister API definitions. // This unit is written by Christian Ghisler, it's from Total Commander // Lister API Guide, which can be found at http://ghisler.com. // Version: 1.8. unit WLXPlugin; interface {$IFDEF MSWINDOWS} uses Windows;{$ENDIF} const lc_copy=1; lc_newparams=2; lc_selectall=3; lc_setpercent=4; lcp_wraptext=1; lcp_fittowindow=2; lcp_ansi=4; lcp_ascii=8; lcp_variable=12; lcp_forceshow=16; lcp_fitlargeronly=32; lcp_center=64; lcs_findfirst=1; lcs_matchcase=2; lcs_wholewords=4; lcs_backwards=8; itm_percent=$FFFE; itm_fontstyle=$FFFD; itm_wrap=$FFFC; itm_fit=$FFFB; itm_next=$FFFA; itm_center=$FFF9; LISTPLUGIN_OK=0; LISTPLUGIN_ERROR=1; const MAX_PATH=32000; type tListDefaultParamStruct=record size, PluginInterfaceVersionLow, PluginInterfaceVersionHi:longint; DefaultIniName:array[0..MAX_PATH-1] of char; end; pListDefaultParamStruct=^tListDefaultParamStruct; type tdateformat=record wYear,wMonth,wDay:word; end; pdateformat=^tdateformat; type ttimeformat=record wHour,wMinute,wSecond:word; end; ptimeformat=^ttimeformat; type HBITMAP = type LongWord; { Function prototypes: Functions need to be defined exactly like this!} { function ListLoad(ParentWin:thandle;FileToLoad:pchar;ShowFlags:integer):thandle; stdcall; function ListLoadNext(ParentWin,PluginWin:thandle;FileToLoad:pchar;ShowFlags:integer):integer; stdcall; procedure ListCloseWindow(ListWin:thandle); stdcall; procedure ListGetDetectString(DetectString:pchar;maxlen:integer); stdcall; function ListSearchText(ListWin:thandle;SearchString:pchar; SearchParameter:integer):integer; stdcall; function ListSearchDialog(ListWin:thandle;FindNext:integer):integer; stdcall; function ListSendCommand(ListWin:thandle;Command,Parameter:integer):integer; stdcall; function ListPrint(ListWin:thandle;FileToPrint,DefPrinter:pchar; PrintFlags:integer;var Margins:trect):integer; stdcall; function ListNotificationReceived(ListWin:thandle;Message,wParam,lParam:integer):integer; stdcall; procedure ListSetDefaultParams(dps:pListDefaultParamStruct); stdcall; function ListGetPreviewBitmap(FileToLoad:pchar;width,height:integer; contentbuf:pchar;contentbuflen:integer):hbitmap; stdcall; } implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wlx/simplewlx/lib/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017623� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�015014� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016602� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/src/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�017371� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/src/DSXLocate.lpr���������������������������������������������0000644�0001750�0000144�00000012010�12014201074�021637� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { DSXLocate ------------------------------------------------------------------------- This is DSX (Search) plugin for Double Commander. Plugin use locate and it's database for searching. Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) The original class of TExProcess used in plugin was written by Anton Rjeshevsky. 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 } library DSXLocate; {$mode objfpc}{$H+} {$include calling.inc} uses Classes, SysUtils, DsxPlugin, un_process; var List: TStringList; LocatePath: String; type { TPlugInfo } TPlugInfo = class private FProcess: TExProcess; FAddProc: TSAddFileProc; FUpdateProc: TSUpdateStatusProc; FSearchRec: TDsxSearchRecord; FilesScanned: Integer; public PluginNr: Integer; //--------------------- constructor Create(Nr: Integer); procedure SetProcs(AddProc: TSAddFileProc; UpdateProc: TSUpdateStatusProc); procedure SetDefs(pSearchRec: PDsxSearchRecord); destructor Destroy; override; //--------------------- procedure Start; procedure Stop; procedure OnReadLn(str: String); end; constructor TPlugInfo.Create(Nr: Integer); begin PluginNr := Nr; FProcess := nil; end; procedure TPlugInfo.SetProcs(AddProc: TSAddFileProc; UpdateProc: TSUpdateStatusProc); begin FAddProc := AddProc; FUpdateProc := UpdateProc; end; procedure TPlugInfo.SetDefs(pSearchRec: PDsxSearchRecord); begin FSearchRec := pSearchRec^; end; destructor TPlugInfo.Destroy; begin if Assigned(FProcess) then FreeAndNil(FProcess); inherited Destroy; end; procedure TPlugInfo.Start; var sSearch: String; begin FilesScanned := 0; if Assigned(FProcess) then FreeAndNil(FProcess); FProcess := TExProcess.Create; FProcess.OnReadLn := @OnReadLn; with FSearchRec do begin // TProcess doesn't support passing parameters other than quoted in "". // Adapt this code when this changes. sSearch := String(StartPath); if sSearch <> '' then begin // Search in given start path and in subdirectories. sSearch := '"' + IncludeTrailingPathDelimiter(sSearch) + String(FileMask) + '" ' + '"' + IncludeTrailingPathDelimiter(sSearch) + '*' + PathDelim + String(FileMask) + '"'; end else sSearch := '"' + String(FileMask) + '"'; end; if LocatePath <> '' then FProcess.SetCmdLine(LocatePath + ' ' + sSearch); FProcess.Execute; end; procedure TPlugInfo.Stop; begin if Assigned(FProcess) then begin FProcess.Stop; FreeAndNil(FProcess); end; end; procedure TPlugInfo.OnReadLn(str: String); begin if str <> '' then Inc(FilesScanned); FAddProc(PluginNr, PChar(str)); FUpdateProc(PluginNr, PChar(str), FilesScanned); end; {Main --------------------------------------------------------------------------------} function Init(dps: PDsxDefaultParamStruct; pAddFileProc: TSAddFileProc; pUpdateStatus: TSUpdateStatusProc): Integer; dcpcall; var i: Integer; begin if not assigned(List) then List := TStringList.Create; I := List.Count; List.AddObject(IntToStr(I), TPlugInfo.Create(I)); TPlugInfo(List.Objects[I]).SetProcs(pAddFileProc, pUpdateStatus); Result := I; end; procedure StartSearch(FPluginNr: Integer; pSearchRecRec: PDsxSearchRecord); dcpcall; begin TPlugInfo(List.Objects[FPluginNr]).SetDefs(pSearchRecRec); TPlugInfo(List.Objects[FPluginNr]).Start; end; procedure StopSearch(FPluginNr: Integer); dcpcall; begin TPlugInfo(List.Objects[FPluginNr]).Stop; end; procedure Finalize(FPluginNr: Integer); dcpcall; begin if not Assigned(List) then exit; if (FPluginNr > List.Count) or (FPluginNr < 0) or (List.Count = 0) then exit; //Destroy PlugInfo Item № TPlugInfo(List.Objects[FPluginNr]).Free; List.Delete(FPluginNr); if List.Count = 0 then FreeAndNil(List); end; exports Init, StartSearch, StopSearch, Finalize; type Tx = class procedure OnReadLnWhich(str: String); end; procedure Tx.OnReadLnWhich(str: String); begin if str <> '' then begin LocatePath := str; //WriteLn('PLUGIN: locate found in '+str); end; end; var Pr: TExProcess; x: TX; {$R *.res} begin pr := TExProcess.Create('which locate'); x := Tx.Create; pr.OnReadLn := @x.OnReadLnWhich; pr.Execute; pr.Free; x.Free; {$IFDEF UNIX} if LocatePath = '' then Writeln('DSXLocate: Locate utility not found.'); {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/src/DSXLocate.lpi���������������������������������������������0000644�0001750�0000144�00000010553�12451527526�021662� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="DSXLocate"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="DSXLocate plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/dsxlocate.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedproject\"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="2"> <Unit0> <Filename Value="DSXLocate.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="DSXLocate"/> </Unit0> <Unit1> <Filename Value="un_process.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="un_process"/> </Unit1> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/dsxlocate.dsx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/src/un_process.pas��������������������������������������������0000644�0001750�0000144�00000004444�12014201074�022233� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$mode delphi} {$longstrings on} unit un_process; interface uses process, Math, SysUtils; type TOnReadLn = procedure(str: String) of object; { TExProcess } TExProcess = class protected p: TProcess; s: String; FStop: Boolean; function _GetExitStatus(): Integer; public OnReadLn: TOnReadLn; constructor Create(commandline: String = ''); procedure Execute; procedure Stop; procedure SetCmdLine(commandline: String); destructor Destroy; override; property ExitStatus: Integer read _GetExitStatus; end; implementation const buf_len = 3000; { TExProcess } function TExProcess._GetExitStatus(): Integer; begin Result := p.ExitStatus; end; constructor TExProcess.Create(commandline: String = ''); begin s := ''; p := TProcess.Create(nil); p.CommandLine := commandline; p.Options := [poUsePipes, poNoConsole, poWaitOnExit]; end; procedure TExProcess.Execute; var buf: String; i, j: Integer; begin try p.Execute; repeat if FStop then exit; SetLength(buf, buf_len); SetLength(buf, p.output.Read(buf[1], length(buf))); //waits for the process output // cut the incoming stream to lines: s := s + buf; //add to the accumulator repeat //detect the line breaks and cut. i := Pos(#13, s); j := Pos(#10, s); if i = 0 then i := j; if j = 0 then j := i; if j = 0 then Break; //there are no complete lines yet. if Assigned(OnReadLn) then OnReadLn(Copy(s, 1, min(i, j) - 1)); //return the line without the CR/LF characters s := Copy(s, max(i, j) + 1, length(s) - max(i, j)); //remove the line from accumulator until False; until buf = ''; if s <> '' then if Assigned(OnReadLn) then OnReadLn(s); buf := ''; except {$IFDEF UNIX} on e: Exception do Writeln('DSXLocate error: ', e.Message); {$ENDIF} end; if Assigned(OnReadLn) then OnReadLn(buf); //Empty line to notify DC about search process finish end; procedure TExProcess.Stop; begin FStop := True; end; procedure TExProcess.SetCmdLine(commandline: String); begin p.CommandLine := commandline; end; destructor TExProcess.Destroy; begin FreeAndNil(p); inherited Destroy; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/dsx/DSXLocate/lib/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�017350� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�015017� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016057� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/bzip2/������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�017105� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/bzip2/bzip2.pas���������������������������������������������������0000644�0001750�0000144�00000042367�12014201074�020623� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit bzip2; {**************************************************************************** BZIP2 decompression unit Copyright (C) 2002 by Daniel Mantione This unit provides a decompression stream to decode .bz2 files. It is inpired by Julian R. Seward's libbzip2 library and therefore you should send credits to him and bug reports to me :) This code is licensed under the same terms as the original libbz2 library, which is decsribed in the file LICENSE. If you don't have this file, look at http://www.freepascal.org for this bzip2 unit, the LICENSE file will be included. In case of problems, contact the author. E-mail addresses: Daniel Mantione <daniel.mantione@freepascal.org> Julian R. Seward <jseward@acm.org> Please do not contact Julian about this Pascal library, he didn't wrote it. ****************************************************************************} interface {$goto on} {$pointermath on} uses objects; const max_groups=6; max_alpha_size=258; max_code_len=23; group_size=50; iter_count=4; max_selectors=2+(900000 div group_size); const mtfa_size=4096; mtfl_size=16; type Tcardinal_array=array [0..899999] of cardinal; Pcardinal_array=^Tcardinal_array; Pcardinal=^cardinal; Thuffarray=array[0..max_alpha_size] of cardinal; Phuffarray=^Thuffarray; Tbzip2_decode_stream=object(Tstream) short:cardinal; readstream:Pstream; block_randomized:boolean; blocksize:byte; tt:Pcardinal_array; tt_count:cardinal; rle_run_left,rle_run_data:byte; nextrle:Pbyte; decode_available:cardinal; block_origin:cardinal; current_block:cardinal; read_data,bits_available:byte; inuse16:set of 0..15; inuse:set of 0..255; inuse_count:cardinal; seq_to_unseq:array[0..255] of byte; alphasize:cardinal; group_count,group_pos,gsel,gminlen:byte; group_no:cardinal; glimit,gperm,gbase:Phuffarray; selector_count:cardinal; selector,selector_mtf:array[0..max_selectors] of byte; len:array[0..max_groups,0..max_alpha_size] of byte; limit:array[0..max_groups,0..max_alpha_size] of cardinal; base:array[0..max_groups,0..max_alpha_size] of cardinal; perm:array[0..max_groups,0..max_alpha_size] of cardinal; minlens:array[0..max_groups] of byte; cftab:array[0..257] of cardinal; mtfbase:array[0..256 div mtfl_size-1] of cardinal; mtfa:array[0..mtfa_size-1] of byte; constructor init(Areadstream:Pstream); function get_bits(n:byte):byte; function get_boolean:boolean; function get_byte:byte; function get_cardinal24:cardinal; function get_cardinal:cardinal; procedure receive_mapping_table; procedure receive_selectors; procedure undo_mtf_values; procedure receive_coding_tables; procedure make_hufftab; procedure init_mtf; function get_mtf_value:cardinal; procedure move_mtf_block; procedure receive_mtf_values; procedure detransform; function decode_block:boolean; procedure read(var buf;count:Longint);virtual; procedure new_block; procedure consume_rle;inline; procedure rle_read(bufptr:Pbyte;var count:Longint); destructor done;virtual; end; {A bzip2 stream starts with this:} const bzip2_stream_magic='BZh'; {Error codes for stream errorinfo.} const bzip2_bad_header_magic =1; bzip2_bad_block_magic =2; bzip2_endoffile =3; bzip2_data_error =4; implementation {$ifdef i386} {$i bzip2i386.inc} {$endif} procedure hb_create_decode_tables(var limit,base,perm:array of cardinal; var length:array of byte; minlen,maxlen:byte;alphasize:cardinal); var pp,i,j,vec:cardinal; begin pp:=0; for i:=minlen to maxlen do for j:=0 to alphasize-1 do if length[j]=i then begin perm[pp]:=j; inc(pp); end; for i:=0 to max_code_len-1 do begin base[i]:=0; limit[i]:=0; end; for i:=0 to alphasize-1 do inc(base[length[i]+1]); for i:=1 to max_code_len-1 do inc(base[i],base[i-1]); vec:=0; for i:=minlen to maxlen do begin inc(vec,base[i+1]-base[i]); limit[i]:=vec-1; vec:=vec shl 1; end; for i:=minlen+1 to maxlen do base[i]:=((limit[i-1]+1) shl 1)-base[i]; end; {***************************************************************************** Tbzip2_decode_stream *****************************************************************************} constructor Tbzip2_decode_stream.init(Areadstream:Pstream); var magic:array[1..3] of char; c:char; begin readstream:=Areadstream; {Read the magic.} readstream^.read(magic,sizeof(magic)); if magic<>bzip2_stream_magic then begin error(stiniterror,bzip2_bad_header_magic); exit; end; {Read the block size and allocate the working array.} readstream^.read(c,1); blocksize:=byte(c)-byte('0'); getmem(tt,blocksize*100000*sizeof(cardinal)); decode_available:=high(decode_available); end; function Tbzip2_decode_stream.get_bits(n:byte):byte; var data:byte; begin if n>bits_available then begin readstream^.read(data,1); get_bits:=(read_data shr (8-n)) or data shr (8-(n-bits_available)); read_data:=data shl (n-bits_available); inc(bits_available,8); end else begin get_bits:=read_data shr (8-n); read_data:=read_data shl n; end; dec(bits_available,n); end; function Tbzip2_decode_stream.get_boolean:boolean; begin get_boolean:=boolean(get_bits(1)); end; function Tbzip2_decode_stream.get_byte:byte; begin get_byte:=get_bits(8); end; function Tbzip2_decode_stream.get_cardinal24:cardinal; begin get_cardinal24:=get_bits(8) shl 16 or get_bits(8) shl 8 or get_bits(8); end; function Tbzip2_decode_stream.get_cardinal:cardinal; begin get_cardinal:=get_bits(8) shl 24 or get_bits(8) shl 16 or get_bits(8) shl 8 or get_bits(8); end; procedure Tbzip2_decode_stream.receive_mapping_table; {Receive the mapping table. To save space, the inuse set is stored in pieces of 16 bits. First 16 bits are stored which pieces of 16 bits are used, then the pieces follow.} var i,j:byte; begin inuse16:=[]; {Receive the first 16 bits which tell which pieces are stored.} for i:=0 to 15 do if get_boolean then include(inuse16,i); {Receive the used pieces.} inuse:=[]; inuse_count:=0; for i:=0 to 15 do if i in inuse16 then for j:=0 to 15 do if get_boolean then begin include(inuse,16*i+j); seq_to_unseq[inuse_count]:=16*i+j; inc(inuse_count); end; { system.write('Mapping table: '); for i:=0 to 255 do if i in inuse then system.write(i,' '); writeln;} end; procedure Tbzip2_decode_stream.receive_selectors; {Receives the selectors.} var i:cardinal; j:byte; begin group_count:=get_bits(3); selector_count:=get_bits(8) shl 7 or get_bits(7); for i:=0 to selector_count-1 do begin j:=0; while get_boolean do begin inc(j); if j>5 then error(streaderror,bzip2_data_error); end; selector_mtf[i]:=j; end; { system.write('Selector_mtf: '); for i:=0 to selector_count-1 do system.write(selector_mtf[i],' '); writeln;} end; procedure Tbzip2_decode_stream.undo_mtf_values; {Undo the MTF values for the selectors.} var pos:array[0..max_groups] of byte; i:cardinal; v,tmp:byte; begin for v:=0 to group_count-1 do pos[v]:=v; for i:=0 to selector_count-1 do begin v:=selector_mtf[i]; tmp:=pos[v]; while v<>0 do begin pos[v]:=pos[v-1]; dec(v); end; pos[0]:=tmp; selector[i]:=tmp; end; end; procedure Tbzip2_decode_stream.receive_coding_tables; var t,curr:byte; i:cardinal; begin for t:=0 to group_count-1 do begin curr:=get_bits(5); for i:=0 to alphasize-1 do begin repeat if not(curr in [1..20]) then begin error(streaderror,bzip2_data_error); exit; end; if not get_boolean then break; if get_boolean then dec(curr) else inc(curr); until false; len[t,i]:=curr; end; end; { writeln('Coding tables:'); for t:=0 to group_count-1 do begin for i:=0 to alphasize-1 do system.write(len[t,i],' '); writeln; end;} end; procedure Tbzip2_decode_stream.make_hufftab; {Builds the Huffman tables.} var i:cardinal; t,minlen,maxlen:byte; begin for t:=0 to group_count-1 do begin minlen:=32; maxlen:=0; for i:=0 to alphasize-1 do begin if len[t,i]>maxlen then maxlen:=len[t,i]; if len[t,i]<minlen then minlen:=len[t,i]; end; hb_create_decode_tables(limit[t],base[t],perm[t],len[t], minlen,maxlen,alphasize); minlens[t]:=minlen; end; end; procedure Tbzip2_decode_stream.init_mtf; var i,j:byte; k:cardinal; begin k:=mtfa_size-1; for i:=256 div mtfl_size-1 downto 0 do begin for j:=mtfl_size-1 downto 0 do begin mtfa[k]:=i*mtfl_size+j; dec(k); end; mtfbase[i]:=k+1; end; end; function Tbzip2_decode_stream.get_mtf_value:cardinal; var zn:byte; zvec:cardinal; begin if group_pos=0 then begin inc(group_no); group_pos:=group_size; gsel:=selector[group_no]; gminlen:=minlens[gsel]; glimit:=@limit[gsel]; gperm:=@perm[gsel]; gbase:=@base[gsel]; end; dec(group_pos); zn:=gminlen; zvec:=get_bits(zn); while zvec>glimit^[zn] do begin inc(zn); zvec:=zvec shl 1 or byte(get_boolean); end; get_mtf_value:=gperm^[zvec-gbase^[zn]]; end; procedure Tbzip2_decode_stream.move_mtf_block; var i:byte; j,k:cardinal; begin k:=MTFA_SIZE; for i:=256 div MTFL_SIZE-1 downto 0 do begin j:=mtfbase[i]; Pcardinal(@mtfa[k- 4])^:=Pcardinal(@mtfa[j+12])^; Pcardinal(@mtfa[k- 8])^:=Pcardinal(@mtfa[j+ 8])^; Pcardinal(@mtfa[k-12])^:=Pcardinal(@mtfa[j+ 4])^; dec(k,16); Pcardinal(@mtfa[k ])^:=Pcardinal(@mtfa[j ])^; mtfbase[i]:=k; end; end; procedure Tbzip2_decode_stream.receive_mtf_values; const run_a=0; run_b=1; var t,next_sym:cardinal; es:cardinal; n:byte; nn,i:cardinal; p,q:Pbyte; u,v:Pcardinal; lno,off:cardinal; begin group_no:=high(group_no); group_pos:=0; t:=0; for i:=0 to 257 do cftab[i]:=0; init_mtf; next_sym:=get_mtf_value; while next_sym<>inuse_count+1 do begin { writeln(t,' ',next_sym); if t=22296 then t:=t; } if next_sym<=run_b then begin es:=0; n:=0; repeat inc(es,(next_sym+1) shl n); inc(n); next_sym:=get_mtf_value; until next_sym>run_b; n:=seq_to_unseq[mtfa[mtfbase[0]]]; inc(cftab[n],es); if t+es>100000*blocksize then begin error(streaderror,bzip2_data_error); exit; end; while es>0 do begin tt^[t]:=n; dec(es); inc(t); end; end else begin nn:=next_sym-1; if nn<mtfl_size then begin {Avoid the costs of the general case.} p:=@mtfa[mtfbase[0]]; q:=p+nn; n:=q^; repeat q^:=(q-1)^; dec(q); until q=p; q^:=n; end else begin {General case.} lno:=nn div MTFL_SIZE; off:=nn and (MTFL_SIZE-1); p:=@mtfa[mtfbase[lno]]; q:=p+off; n:=q^; while(q<>p) do begin q^:=(q-1)^; dec(q); end; u:=@mtfbase; v:=u+lno; repeat mtfa[v^]:=mtfa[(v-1)^+MTFL_SIZE-1]; dec(v); dec(v^); until v=u; mtfa[v^]:=n; if v^=0 then move_mtf_block; end; inc(cftab[seq_to_unseq[n]]); tt^[t]:=cardinal(seq_to_unseq[n]); inc(t); if t>100000*blocksize then begin error(streaderror,bzip2_data_error); exit; end; next_sym:=get_mtf_value; end; end; tt_count:=t; {Setup cftab to facilitate generation of T^(-1).} t:=0; for i:=0 to 256 do begin nn:=cftab[i]; cftab[i]:=t; { writeln(i,' ',t);} inc(t,nn); end; end; {$ifndef HAVE_DETRANSFORM} procedure Tbzip2_decode_stream.detransform; var a:cardinal; p,q,r:Pcardinal; begin a:=0; p:=@tt^[0]; q:=p+tt_count; while p<>q do begin r:=@tt^[cftab[p^ and $ff]]; inc(cftab[p^ and $ff]); r^:=r^ or a; inc(a,256); inc(p); end; end; {$endif} function Tbzip2_decode_stream.decode_block:boolean; {Decode a new compressed block.} var magic:array[1..6] of char; stored_blockcrc:cardinal; i:byte; begin for i:=1 to 6 do magic[i]:=char(get_byte); if magic='1AY&SY' then begin inc(current_block); { writeln('Block ',current_block,': Header ok');} stored_blockcrc:=get_cardinal; block_randomized:=get_boolean; block_origin:=get_cardinal24; {Receive the mapping table.} receive_mapping_table; alphasize:=cardinal(inuse_count)+2; { writeln('Mapping table ok.');} {Receive the selectors.} receive_selectors; if status<>0 then exit; { writeln('Selectors ok.');} {Undo the MTF values for the selectors.} undo_mtf_values; { writeln('Undo mtf ok.');} {Receive the coding tables.} receive_coding_tables; if status<>0 then exit; { writeln('Coding tables ok');} {Build the Huffman tables.} make_hufftab; { writeln('Huffman ok.');} {Receive the MTF values.} receive_mtf_values; { writeln('MTF OK');} {Undo the Burrows Wheeler transformation.} detransform; { writeln('Detransform OK');} decode_available:=tt_count; end else begin if magic<>#$17'rE8P'#$90 then error(streaderror,bzip2_bad_block_magic); decode_block:=false; end; end; procedure Tbzip2_decode_stream.new_block; begin if decode_block then nextrle:=@tt^[tt^[block_origin] shr 8] else begin error(streaderror,bzip2_endoffile); nextrle:=nil; end; end; procedure Tbzip2_decode_stream.consume_rle;inline; {Make nextrle point to the next decoded byte. If nextrle did point to the last byte in the current block, decode the next block.} begin { Pcardinal(nextrle)^:=Pcardinal(nextrle)^ shr 8;} nextrle:=@tt^[Pcardinal(nextrle)^ shr 8]; dec(decode_available); if decode_available=0 then new_block; end; procedure Tbzip2_decode_stream.rle_read(bufptr:Pbyte;var count:Longint); var rle_len:cardinal; data:byte; label rle_write; begin rle_len:=rle_run_left; data:=rle_run_data; if block_randomized then {Not yet implemented.} runerror(212) else begin if rle_len<>0 then {Speed is important. Instead of an if statement within the repeat loop use a goto outside the loop.} goto rle_write; repeat if decode_available=0 then break; rle_len:=1; data:=nextrle^; consume_rle; if (decode_available>0) and (data=nextrle^) then begin inc(rle_len); consume_rle; if (decode_available>0) and (data=nextrle^) then begin inc(rle_len); consume_rle; if (decode_available>0) and (data=nextrle^) then begin consume_rle; inc(rle_len,nextrle^+1); consume_rle; end; end; end; rle_write: repeat bufptr^:=data; inc(bufptr); dec(count); dec(rle_len); until (rle_len=0) or (count=0); until count=0; short:=count; end; rle_run_data:=data; rle_run_left:=rle_len; end; procedure Tbzip2_decode_stream.read(var buf;count:Longint); var bufptr:Pbyte; begin short:=0; bufptr:=@buf; if decode_available=high(decode_available) then begin {Initialize the rle process: - Decode a block - Initialize pointer.} if not decode_block then begin error(streaderror,bzip2_endoffile); nextrle:=nil; end; nextrle:=@tt^[tt^[block_origin] shr 8]; end; rle_read(bufptr,count); end; destructor Tbzip2_decode_stream.done; begin if tt<>nil then freemem(tt,blocksize*100000*sizeof(cardinal)); inherited done; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/bzip2/LICENSE�����������������������������������������������������0000644�0001750�0000144�00000003424�10606265634�020105� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This Pascal unit "bzip2.pas" is copyright (C) 2002 by Daniel Mantione It is inspired by "bzip2" and associated library "libbzip2", copyright (C) 1996-2002 by Julian R Seward. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Daniel Mantione, Delft, the Netherlans daniel.mantione@freepascal.org Pascal bzip2 unit, version 0.0.1 of 10 October 2002 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/bzip2/pasbzip.pas�������������������������������������������������0000644�0001750�0000144�00000001563�12014201074�021236� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program pasbzip; uses objects,bzip2; var infile,outfile:Tbufstream; decoder:Tbzip2_decode_stream; a:array[1..4096] of byte; i,readsize:cardinal; begin assign(output,'pasbzip.out'); rewrite(output); if paramcount<>1 then writeln('Usage: pasbunzip <file>') else begin infile.init(paramstr(1),stopenread,4096); outfile.init('OUTFILE',stcreate,4096); decoder.init(@infile); if decoder.status<>stok then writeln('Fout: ',decoder.status,' ',decoder.errorinfo); repeat readsize:=4096; decoder.read(a,readsize); dec(readsize,decoder.short); outfile.write(a,readsize); until decoder.status<>0; if decoder.status<>stok then writeln('Fout: ',decoder.status,' ',decoder.errorinfo); decoder.done; infile.done; outfile.done; end; close(output); end. ���������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/bzip2/bzip2i386.inc�����������������������������������������������0000644�0001750�0000144�00000001620�12014201074�021206� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{$ASMMODE intel} {$define HAVE_DETRANSFORM} { procedure Tbzip2_decode_stream.detransform; var a:cardinal; p,q,r:Pcardinal; begin a:=0; p:=@tt^[0]; q:=p+tt_count; while p<>q do begin r:=@tt^[cftab[p^ and $ff]]; inc(cftab[p^ and $ff]); r^:=r^ or a; inc(a,256); inc(p); end; end; } {const c:cardinal=0; procedure mcount;external name 'mcount';} procedure Tbzip2_decode_stream.detransform;assembler; asm { mov edx,offset c call mcount} xor edx,edx lea ebx,[esi+Tbzip2_decode_stream.cftab] mov ecx,[esi+Tbzip2_decode_stream.tt_count] push esi push ebp mov esi,[esi+Tbzip2_decode_stream.tt] mov edi,esi lea ebp,[4*ecx+esi] jmp @a2 @a1: movzx eax,byte [esi] mov ecx,[ebx+4*eax] inc dword [ebx+4*eax] or [edi+4*ecx],edx add edx,$100 add esi,4 @a2: cmp esi,ebp jne @a1 pop ebp pop esi end ['eax','ebx','ecx','edx','edi']; ����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/src/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016646� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/src/bz2func.pas���������������������������������������������������0000644�0001750�0000144�00000012756�12014201074�020706� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WCX plugin for extract *.bz2 archives Copyright (C) 2007-2009 Koblov Alexander (Alexx2000@mail.ru) based on: pasbzip.pas from FPC sources 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit bz2func; {$mode delphi} {$include calling.inc} interface uses WcxPlugin; { Mandatory functions } function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; function ReadHeader (hArcData : TArcHandle; var HeaderData : THeaderData) : Integer;dcpcall; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; { Optional functions } function CanYouHandleThisFile(FileName: PChar): Boolean;dcpcall; implementation uses bzip2, SysUtils, Objects; var sArcName : String; Count : Integer = 0; ProcessDataProc : TProcessDataProc; function ExtractOnlyFileName(const FileName: string): string; var iDotIndex, I: longint; begin (* Find a dot index *) I := Length(FileName); while (I > 0) and not (FileName[I] in ['.', '/', '\', ':']) do Dec(I); if (I > 0) and (FileName[I] = '.') then iDotIndex := I else iDotIndex := MaxInt; (* Find file name index *) I := Length(FileName); while (I > 0) and not (FileName[I] in ['/', '\', ':']) do Dec(I); Result := Copy(FileName, I + 1, iDotIndex - I - 1); end; function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle; begin if FileExists(ArchiveData.ArcName) then begin sArcName := ArchiveData.ArcName; Count := 0; Result := 1985; end else Result := E_EOPEN; end; function ReadHeader (hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; var sr : TSearchRec; begin if Count > 0 then begin Result := E_END_ARCHIVE; exit; end; with HeaderData do begin FindFirst(sArcName, faAnyFile, sr); FileName := ExtractOnlyFileName(sArcName); PackSize := sr.Size; UnpSize := sr.Size; // we don't know real file size FileTime := sr.Time; FileAttr := sr.Attr; FindClose(sr); end; Result := 0; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer; var infile,outfile:Tbufstream; decoder:Tbzip2_decode_stream; a:array[1..4096] of byte; i,readsize:cardinal; sOutputFileName : String; iLastPos : LongInt; begin Result := E_SUCCESS; case Operation of PK_TEST: begin Result := E_NOT_SUPPORTED; end; PK_EXTRACT: begin sOutputFileName := DestPath; if sOutputFileName <> '' then sOutputFileName := sOutputFileName + ExtractOnlyFileName(sArcName) else sOutputFileName := DestName; { // Debug assign(output, DestPath + 'unbz2.log'); rewrite(output); } begin infile.init(sArcName,stopenread,4096); outfile.init(sOutputFileName,stcreate,4096); decoder.init(@infile); { // Debug if decoder.status<>stok then writeln(output, 'Fout: ',decoder.status,' ',decoder.errorinfo); } iLastPos := infile.Position; repeat readsize:=4096; decoder.read(a,readsize); dec(readsize,decoder.short); outfile.write(a,readsize); if Assigned(ProcessDataProc) and (infile.Position <> iLastPos) then begin ProcessDataProc(PChar(sOutputFileName), infile.Position - iLastPos); iLastPos := infile.Position; end; until decoder.status<>0; { // Debug if decoder.status<>stok then writeln(output, 'Fout: ',decoder.status,' ',decoder.errorinfo); } decoder.done; infile.done; outfile.done; end; { // Debug close(output); } end; PK_SKIP: begin end; end; {case} Count := Count + 1; end; function CloseArchive (hArcData : TArcHandle) : Integer; begin Result := 0; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : TChangeVolProc); begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); begin if Assigned(pProcessDataProc) then ProcessDataProc := pProcessDataProc else ProcessDataProc := nil; end; function CanYouHandleThisFile(FileName: PChar): Boolean;dcpcall; var bz2bs : TBufStream; Buffer : array[1..5] of Char; begin try bz2bs.Init(FileName, stOpenRead, SizeOf(Buffer)); bz2bs.Read(Buffer, SizeOf(Buffer)); finally bz2bs.Done; end; Result := (Buffer = 'BZh91'); end; end. ������������������doublecmd-0.7.1/plugins/wcx/unbz2/src/unbz2.lpi�����������������������������������������������������0000644�0001750�0000144�00000010351�12451527075�020404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="UnBZ2 WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\unbz2.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="..\bzip2;..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="1"> <Unit0> <Filename Value="unbz2.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\unbz2.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="..\..\..\..\sdk"/> <OtherUnitFiles Value="..\bzip2;..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/src/unbz2.dpr�����������������������������������������������������0000644�0001750�0000144�00000000470�12014201074�020365� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library unbz2; uses bz2func in 'bz2func.pas'; {$E wcx} {$R *.res} exports { Mandatory } OpenArchive, ReadHeader, ProcessFile, CloseArchive, SetChangeVolProc, SetProcessDataProc, { Optional } CanYouHandleThisFile; begin {$IFDEF UNIX} WriteLN('unbz2 plugin is loaded'); {$ENDIF} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/lib/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016625� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/unbz2/COPYING.txt�������������������������������������������������������0000644�0001750�0000144�00000043131�12014201074�017701� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�015615� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/license.txt���������������������������������������������������������0000644�0001750�0000144�00000002205�12014201074�017746� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPM plugin v.1.4 for Windows Commander. Copyright (c) 2000..2002 Mandryka Yurij ( Brain Group ) Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse rpm archives with Windows Commander 4.0 or greater. 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any questions about plugin can be made via e-mail : braingroup@hotmail.ru and information about plugin can be found on Brain Group web site : http://braingroup.hotmail.ru/wcplugins/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016404� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm.lpi���������������������������������������������������������0000644�0001750�0000144�00000011130�12451527075�017674� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="RPM WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/rpm.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedproject\"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="rpm.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/rpm.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm.cfg���������������������������������������������������������0000644�0001750�0000144�00000000546�11173025634�017652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-$A- -$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 -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\borland\delphi5\Projects\Bpl" -LN"c:\borland\delphi5\Projects\Bpl" ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm_io.pas������������������������������������������������������0000644�0001750�0000144�00000017227�12014201074�020356� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** {$A-,I-} unit rpm_io; interface uses SysUtils, rpm_def; type TStrBuf = array[1..260] of Char; function RPM_ReadLead(var f : file; var lead : RPM_Lead) : Boolean; function RPM_ReadSignature(var f : file; sig_type : Word; var signature : RPM_Header) : Boolean; function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec) : Boolean; function RPM_ReadEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo) : Boolean; function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec) : Boolean; procedure swap_value(var value; size : Integer); procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function get_archivename(var fname : String;datasig:RPM_DataSig) : String; function read_string(var f : file; var s : AnsiString) : Boolean; function read_int32(var f : file; var int32 : LongWord) : Boolean; implementation uses Classes; procedure swap_value(var value; size:Integer); type byte_array = array[1..MaxInt] of Byte; var i : Integer; avalue : Byte; begin for i:=1 to size div 2 do begin avalue := byte_array(value)[i]; byte_array(value)[i] := byte_array(value)[size + 1 - i]; byte_array(value)[size + 1 - i] := avalue; end; end; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function get_archivename(var fname : String;datasig:RPM_DataSig) : String; var tmp_str : String; i_char : Integer; fgFound : Boolean; begin tmp_str := ExtractFileName(fname); fgFound := False; for i_char := Length(tmp_str) downto 1 do if tmp_str[i_char] = '.' then begin fgFound := True; Break; end; if fgFound then SetLength(tmp_str, i_char - 1); if (datasig[0] = #031) and (datasig[1] = #139) then tmp_str := tmp_str + '.cpio.gz' else if (datasig[0]='B') and (datasig[1]='Z') and (datasig[2]='h') then tmp_str := tmp_str + '.cpio.bz2' else if CompareByte(datasig, #253'7zXZ'#000, 6) = 0 then tmp_str := tmp_str + '.cpio.xz' else tmp_str := tmp_str + '.cpio.lzma'; Result := tmp_str; end; function RPM_ReadLead; begin Result := False; BlockRead(f, lead, Sizeof(Lead)); if IOResult = 0 then Result := True; with lead do begin swap_value(rpmtype, 2); swap_value(archnum, 2); swap_value(osnum, 2); swap_value(signature_type, 2); end; end; function RPM_ReadHeader; var i_entry : LongWord; start : Integer; entry : RPM_EntryInfo; begin Result := False; BlockRead(f, header, Sizeof(header)); if IOResult = 0 then begin with header do begin swap_value(count, 4); swap_value(data_size, 4); start := FilePos(f) + LongInt(count) * Sizeof(entry); for i_entry := 0 to count - 1 do begin if not RPM_ReadEntry(f, start, entry) then Exit else if not RPM_ProcessEntry(f, start, entry, info) then Exit; end; end; start := start + LongInt(header.data_size); // Move file pointer on padded to a multiple of 8 bytes position if align_data then if (start mod 8) <> 0 then begin start := start and $FFFFFFF8; Inc(start, 8); end; Seek(f, start); Result := True; end; end; function RPM_ReadEntry; begin Result := False; BlockRead(f, entry, Sizeof(entry)); if IOResult = 0 then Result := True; with entry do begin swap_value(tag, 4); swap_value(etype, 4); swap_value(offset, 4); offset := data_start + LongInt(offset); swap_value(count, 4); end; end; function RPM_ReadSignature; var info : RPM_InfoRec; begin Result := False; case sig_type of RPMSIG_PGP262_1024 : ; // Old PGP signature RPMSIG_MD5 : ; // RPMSIG_MD5_PGP : ; // RPMSIG_HEADERSIG : // New header signature begin if RPM_ReadHeader(f, True, signature, info) then Result := True; end; end;{case signature type} end; procedure CRtoCRLF(var instr:string); var s:string; i,l:integer; ch,ch2:char; begin instr:=instr+' '; {Avoid overflow} l:=length(instr)-1; for i:=1 to l do begin ch:=instr[i]; ch2:=instr[i+1]; if ((ch=#13) and (ch2<>#10)) or ((ch=#10) and (ch2<>#13)) then s:=s+#13#10 else s:=s+ch; end; instr:=s; end; function RPM_ProcessEntry; var save_pos : Integer; fgError : Boolean; begin result:=true; if entry.tag = RPMTAG_FILENAMES then exit; fgError := False; save_pos := FilePos(f); Seek(f, entry.offset); if IOResult = 0 then begin case entry.tag of RPMTAG_NAME : if entry.etype = 6 then fgError := not read_string(f, info.name); RPMTAG_VERSION : if entry.etype = 6 then fgError := not read_string(f, info.version); RPMTAG_RELEASE : if entry.etype = 6 then fgError := not read_string(f, info.release); RPMTAG_SUMMARY : if entry.etype = 9 then fgError := not read_string(f, info.summary); RPMTAG_DESCRIPTION : if entry.etype = 9 then begin fgError := not read_string(f, info.description); if not fgError then CRtoCRLF(info.description); end; RPMTAG_BUILDTIME : if entry.etype = 4 then fgError := not read_int32(f, info.buildtime); RPMTAG_DISTRIBUTION : if entry.etype = 6 then fgError := not read_string(f, info.distribution); RPMTAG_VENDOR : if entry.etype = 6 then fgError := not read_string(f, info.vendor); RPMTAG_LICENSE : if entry.etype = 6 then fgError := not read_string(f, info.license); RPMTAG_PACKAGER : if entry.etype = 6 then fgError := not read_string(f, info.packager); RPMTAG_GROUP : if entry.etype = 9 then fgError := not read_string(f, info.group); RPMTAG_OS : if entry.etype = 6 then fgError := not read_string(f, info.os); RPMTAG_ARCH : if entry.etype = 6 then fgError := not read_string(f, info.arch); RPMTAG_SOURCERPM : if entry.etype = 6 then fgError := not read_string(f, info.sourcerpm); end;{case} end else fgError := True; Result := not fgError; Seek(f, save_pos); end; function read_string(var f : file; var s : AnsiString) : Boolean; var i_char : Char; fgError : Boolean; begin fgError := False; SetLength(s, 0); while not eof(f) do begin BlockRead(f, i_char, 1); if IOResult <> 0 then begin fgError := True; Break; end; if i_char = #0 then Break else s := s + i_char; end; Result := not fgError; end; function read_int32(var f : file; var int32 : LongWord) : Boolean; begin BlockRead(f, int32, Sizeof(LongWord)); swap_value(int32, Sizeof(LongWord)); if IOResult = 0 then Result := True else Result := False; end; procedure RPM_CreateInfoRec(var info : RPM_InfoRec); begin end; procedure RPM_DeleteInfoRec(var info : RPM_InfoRec); begin end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm_def.pas�����������������������������������������������������0000644�0001750�0000144�00000005632�12014201074�020502� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit rpm_def; interface uses Classes; {$ifdef ver90} type longword=longint; {$endif} {$ifdef ver100} type longword=longint; {$endif} //values for TArchiveRec.headers (pseudo-files to show) const HDR_INFO = 0; HDR_DATA = 1; const MAX_PHANTOM_FILES = 13; const RPM_MAGIC = $DBEEABED; RPM_TYPE_BINARY = 0; // binary package type RPM_TYPE_SOURCE = 1; // source package type RPMSIG_PGP262_1024 = 1; RPMSIG_MD5 = 3; RPMSIG_MD5_PGP = 4; RPMSIG_HEADERSIG = 5; const RPMTAG_NAME = 1000; RPMTAG_VERSION = 1001; RPMTAG_RELEASE = 1002; RPMTAG_SUMMARY = 1004; RPMTAG_DESCRIPTION = 1005; RPMTAG_BUILDTIME = 1006; RPMTAG_DISTRIBUTION = 1010; RPMTAG_VENDOR = 1011; RPMTAG_LICENSE = 1014; RPMTAG_PACKAGER = 1015; RPMTAG_GROUP = 1016; RPMTAG_OS = 1021; RPMTAG_ARCH = 1022; RPMTAG_FILENAMES = 1027; RPMTAG_FILEMTIMES = 1034; RPMTAG_SOURCERPM = 1044; RPMTAG_ARCHIVESIZE = 1046; type RPM_DataSig = array[0..5] of char; type RPM_EntryInfo = record tag : LongWord; etype : LongWord; offset : LongWord; count : LongWord; end;{EntryInfo} type RPM_Lead = record magic : LongWord; major_ver : Byte; minor_ver : Byte; rpmtype : Word; archnum : Word; name : array[1..66] of Char; osnum : Word; signature_type : Word; reserved : array[1..16] of Char; end;{RPM_Lead} RPM_Header =record magic : array [1..3] of byte; header_ver : Byte; reserved : array [1..4] of Byte; count : LongWord; data_size : LongWord; end;{RPM_Header} RPM_InfoRec = record name : AnsiString; // RPMTAG_NAME version : AnsiString; // RPMTAG_VERSION release : AnsiString; // RPMTAG_RELEASE summary : AnsiString; // RPMTAG_SUMMARY description : AnsiString; // RPMTAG_DESCRIPTION distribution : AnsiString; // RPMTAG_DISTRIBUTION buildtime : LongWord; // RPMTAG_BUILDTIME vendor : AnsiString; // RPMTAG_VENDOR license : AnsiString; // RPMTAG_LICENSE packager : AnsiString; // RPMTAG_PACKAGER group : AnsiString; // RPMTAG_GROUP os : AnsiString; // RPMTAG_OS arch : AnsiString; // RPMTAG_ARCH sourcerpm : AnsiString; // RPMTAG_SOURCERPM end;{RPM_Info} implementation end. ������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm_archive.pas�������������������������������������������������0000644�0001750�0000144�00000025566�12014201074�021375� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2012 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** // History // 2001-02-04 Bug: Error Opening rpm file on CD (readonly) // Fix: Add FileMode = 0 before Reset // Who: Oliver Haeger <haeger@inghb.de> unit rpm_archive; {$mode delphi}{$A-,I-} {$include calling.inc} interface uses Classes, WcxPlugin, rpm_def, rpm_io; const MAX_ARCHIVE_LIST = 20; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; headers : Integer; header : RPM_Header; arch_len : LongWord; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; //- RPM tags ------------------------------------------- info : RPM_InfoRec; datasig : RPM_DataSig; end;{ArchiveRec} var aList : TList; function GetPackerCaps : Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes; function GetArchiveID(hArcData : THandle) : Integer; var i_rec : Integer; arec : PArchiveRec; begin Result := -1; if aList.Count = 0 then Exit; for i_rec := 0 to (aList.Count - 1) do begin arec := aList.Items[i_rec]; if arec^.handle_io = hArcData then begin Result := i_rec; Break; end; end; end; function GetPackerCaps; begin Result := PK_CAPS_MULTIPLE; end; function OpenArchive; var arch : THandle; arec : PArchiveRec; filename : String; r_lead : RPM_Lead; signature : RPM_Header; fgError : Boolean; headerend : integer; begin arec := nil; arch := 0; fgError := False; if aList.Count >= MAX_ARCHIVE_LIST then begin fgError := True; end else begin filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = THandle(-1) then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; headers := HDR_INFO; arch_len := 0; fdate := FileAge(filename); process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end else begin RPM_ReadLead(arec^.handle_file, r_lead); if r_lead.magic <> RPM_MAGIC then fgError := True else begin if not RPM_ReadSignature(arec^.handle_file, r_lead.signature_type, signature) then fgError := True else if not RPM_ReadHeader(arec^.handle_file, False, arec^.header, arec^.info) then fgError := True else arec^.arch_len := FileSize(arec^.handle_file) - FilePos(arec^.handle_file); if not fgError then begin headerend:=FilePos(arec^.handle_file); BlockRead(arec^.handle_file, arec^.datasig, SizeOf(RPM_DataSig)); Seek(arec^.handle_file, headerend); end; end; end;{ioresult} end;{arch = -1} end;{max count reached} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; ArchiveData.OpenResult := E_EOPEN end else begin aList.Add(arec); Result := arch; end; end; function CloseArchive; var i_rec : Integer; arec : PArchiveRec; begin if aList.Count <> 0 then begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; CloseFile(arec^.handle_file); FileClose(hArcData); Dispose(arec); aList.Delete(i_rec); end; end; Result := E_SUCCESS; end; function ReadHeader; var i_rec : Integer; arec : PArchiveRec; begin Result := E_END_ARCHIVE; i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; Result := E_SUCCESS; with HeaderData do begin case arec^.headers of HDR_DATA: begin copy_str2buf(TStrBuf(FileName), get_archivename(arec^.fname,arec^.datasig)); PackSize := arec^.arch_len; UnpSize := arec^.arch_len; end; HDR_INFO: begin copy_str2buf(TStrBuf(FileName), 'INFO.TXT'); PackSize := 0; UnpSize := 0; end; else Result := E_END_ARCHIVE; end; if Result = E_SUCCESS then begin copy_str2buf(TStrBuf(ArcName), arec^.fname); FileAttr := faArchive; FileTime := LongInt(UnixFileTimeToDosTime(TUnixFileTime(arec^.info.buildtime))); Inc(arec^.headers); end; end; end; end; function ProcessFile; var i_rec : Integer; arec : PArchiveRec; rpm_file : file; rpm_name : String; buf : Pointer; buf_size : LongWord; fsize : LongWord; fgReadError : Boolean; fgWriteError: Boolean; faborted : Boolean; testonly : Boolean; //Helper function to output one line of text to rpm_file function Line(S: AnsiString): Integer; begin Result := 0; if not fgReadError and not fgWriteError then if testonly then Result := Length(S) + 2 else begin S := S + #13#10; BlockWrite(rpm_file, S[1], Length(S), Result); if IOResult <> 0 then fgWriteError := True; end; end; begin case Operation of // Because rpm archive doesn't contains length of _alone_ attached // gzipped cpio archive, plugin cann't skip or test rpm archive // correctly without extracting archive. PK_SKIP : Result := E_SUCCESS; PK_TEST, PK_EXTRACT : begin testonly:=Operation=PK_TEST; if not testonly then begin rpm_name := String(DestName); AssignFile(rpm_file, rpm_name); Rewrite(rpm_file, 1); end; if not testonly and (IOResult <> 0) then begin Result := E_EWRITE end else begin i_rec := GetArchiveID(hArcData); arec := aList.Items[i_rec]; fgReadError := False; fgWriteError := False; faborted:=false; case (arec^.headers-1) of HDR_DATA: begin fsize := arec^.arch_len; buf_size := 65536; GetMem(buf, buf_size); while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} if not testonly then begin BlockWrite(rpm_file, buf^, buf_size); if IOResult <> 0 then begin fgWriteError := True; Break; end;{if IO error} end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then faborted:=true; end;{while} if not fgReadError and not fgWriteError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if not testonly and not fgReadError then begin BlockWrite(rpm_file, buf^, fsize); if IOResult <> 0 then fgWriteError := True; end; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then faborted:=true; end; end; Freemem(buf, buf_size); //Other pseudo-files end; HDR_INFO: with arec^.info do begin Line('NAME: ' + name); Line('VERSION: ' + version); Line('RELEASE: ' + release); Line('SUMMARY: ' + summary); Line('DISTRIBUTION: ' + distribution); Line('VENDOR: ' + vendor); Line('LICENSE: ' + license); Line('PACKAGER: ' + packager); Line('GROUP: ' + group); Line('OS: ' + os); Line('ARCH: ' + arch); Line('SOURCE RPM: ' + sourcerpm); Line('DESCRIPTION: '); Line(description); end; end; if faborted then Result:=E_EABORTED else if fgReadError then Result := E_BAD_DATA else if fgWriteError then Result:= E_EWRITE else Result := E_SUCCESS; if not testonly then begin if result = E_SUCCESS then FileSetDate(tfilerec(rpm_file).handle, LongInt(UnixFileTimeToDosTime(TUnixFileTime(arec^.info.buildtime)))); CloseFile(rpm_file); if result <> E_SUCCESS then Erase(rpm_file); end; end; end else Result := E_SUCCESS; end;{case operation} end; procedure SetProcessDataProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.changevol_proc := ChangeVolProc; end; end; initialization aList := TList.Create; finalization aList.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm.dof���������������������������������������������������������0000644�0001750�0000144�00000002373�11173025634�017663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Compiler] A=0 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=0 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= SearchPath= Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;dcldtree50 Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=e:\delphi\exedpr\totalcmd.exe [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=1 Release=0 Build=188 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Brain group FileDescription=rpm plugin for Windows Commander FileVersion=1.1.0.188 InternalName=rpm.wcx LegalCopyright=Mandryka Yurij LegalTrademarks= OriginalFilename=rpm.wcx ProductName=rpm plugin ProductVersion=1.1.0.0 Comments=any questions on braingroup@hotmail.ru ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/src/rpm.dpr���������������������������������������������������������0000644�0001750�0000144�00000001702�12014201074�017660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2012 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** library rpm; uses SysUtils, Classes, WcxPlugin, rpm_io in 'rpm_io.pas', rpm_def in 'rpm_def.pas', rpm_archive in 'rpm_archive.pas'; exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc; {$R *.res} begin {$IFNDEF MSWINDOWS} WriteLn('Rpm plugin is loaded'); {$ENDIF} end. ��������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016363� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/rpm/install.txt���������������������������������������������������������0000644�0001750�0000144�00000001026�12014201074�017772� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install RPM plugin: 1. Unzip the rpm.wcx and cpio.wcx to the Totalcmd directory 2. In Total Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type rpm as the extension 6. Click 'new type', and select the rpm.wcx 5. type cpio as the extension 6. Click 'new type', and select the cpio.wcx 7. Click OK What it does: This plugin allow you to browse rpm archives. Mandryka Yurij Brain group http://braingroup.hotmail.ru/wcplugins/ mailto:braingroup@hotmail.ru����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/���������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016662� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/release/�������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�020302� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/release/i386/��������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�020773� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/release/x86_64/������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�021240� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/build.bat������������������������������������������������������0000644�0001750�0000144�00000001604�12601757617�020446� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off set VERSION=15.09.27.2 rem The next two line must be changed before run on your computer set lazpath=D:\Alexx\Prog\FreePascal\Lazarus set PATH=%lazpath%;%PATH% del /Q /S *.wcx* del /Q /S lib\*.* lazbuild.exe --cpu=x86_64 --os=win64 --bm=Release src\SevenZipWcx.lpi ren sevenzip.wcx sevenzip.wcx64 del /Q /S lib\*.* lazbuild.exe --cpu=i386 --os=win32 --bm=Release src\SevenZipWcx.lpi del /Q /S lib\*.* rem Prepare archive del /Q /S release\* copy "C:\Program Files (x86)\7-Zip\7z.dll" release\i386\ copy "C:\Program Files\7-Zip\7z.dll" release\x86_64\ copy LICENSE.txt release\ copy pluginst.inf release\ copy README.txt release\ copy sevenzip.wcx release\ copy sevenzip.wcx64 release\ del /Q sevenzip-*.zip pushd release "C:\Program Files\7-Zip\7z.exe" a ..\sevenzip-%VERSION%.zip .\* popd del /Q /S release\* ����������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/�����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�017451� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipWcx.dpr��������������������������������������������0000644�0001750�0000144�00000003434�12630666255�022404� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library SevenZipWcx; uses FPCAdds, SevenZipFunc, SevenZipDlg, WcxPlugin, SevenZipAdv, SevenZipLng; function OpenArchive(var ArchiveData : tOpenArchiveData) : TArcHandle; stdcall; begin Result:= 0; ArchiveData.OpenResult:= E_NOT_SUPPORTED; end; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PAnsiChar) : Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc); stdcall; begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc); stdcall; begin end; function PackFiles(PackedFile, SubPath, SrcPath, AddList: PAnsiChar; Flags: Integer): Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function DeleteFiles(PackedFile, DeleteList: PAnsiChar): Integer; stdcall; begin Result:= E_NOT_SUPPORTED; end; function GetBackgroundFlags: Integer; stdcall; begin Result:= BACKGROUND_UNPACK or BACKGROUND_PACK; end; function GetPackerCaps : Integer; stdcall; begin Result:= PK_CAPS_NEW or PK_CAPS_DELETE or PK_CAPS_MODIFY or PK_CAPS_MULTIPLE or PK_CAPS_OPTIONS or PK_CAPS_ENCRYPT; end; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } PackFiles, PackFilesW, DeleteFiles, DeleteFilesW, GetPackerCaps, ConfigurePacker, GetBackgroundFlags, PackSetDefaultParams, CanYouHandleThisFileW ; {$R *.res} begin end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipWcx.lpi��������������������������������������������0000644�0001750�0000144�00000011427�12601757617�022405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <Flags> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <Title Value="SevenZipWcx"/> <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <i18n> <EnableI18N LFM="False"/> </i18n> <VersionInfo> <UseVersionInfo Value="True"/> <MajorVersionNr Value="15"/> <MinorVersionNr Value="9"/> <RevisionNr Value="27"/> <BuildNr Value="2"/> <CharSet Value="04B0"/> <StringTable FileDescription="SevenZip archiver plugin" InternalName="SevenZip" LegalCopyright="Copyright (C) 2014-2015 Alexander Koblov" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\sevenzip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk;jcl\common;jcl\windows;jcl"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CustomOptions Value="-dUNICODE_CTRLS"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="D:\doublecmd\doublecmd.exe"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LazUtils"/> </Item1> </RequiredPackages> <Units Count="5"> <Unit0> <Filename Value="SevenZipWcx.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> <Filename Value="SevenZipFunc.pas"/> <IsPartOfProject Value="True"/> </Unit1> <Unit2> <Filename Value="SevenZipAdv.pas"/> <IsPartOfProject Value="True"/> </Unit2> <Unit3> <Filename Value="SevenZipDlg.pas"/> <IsPartOfProject Value="True"/> </Unit3> <Unit4> <Filename Value="SevenZipLng.pas"/> <IsPartOfProject Value="True"/> </Unit4> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\sevenzip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir)"/> <OtherUnitFiles Value="..\..\..\..\sdk;jcl\common;jcl\windows;jcl"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CustomOptions Value="-dUNICODE_CTRLS"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipOpt.pas��������������������������������������������0000644�0001750�0000144�00000033723�12630666255�022407� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, compression options Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipOpt; {$mode delphi} interface uses Classes, SysUtils, Windows, IniFiles, JclCompression, SevenZip; const cKilo = 1024; cMega = cKilo * cKilo; cGiga = cKilo * cKilo * cKilo; const kNoSolidBlockSize = 0; kSolidBlockSize = 64; const DeflateDict: array[0..0] of PtrInt = ( cKilo * 32 ); Deflate64Dict: array[0..0] of PtrInt = ( cKilo * 64 ); Bzip2Dict: array[0..8] of PtrInt = ( cKilo * 100, cKilo * 200, cKilo * 300, cKilo * 400, cKilo * 500, cKilo * 600, cKilo * 700, cKilo * 800, cKilo * 900 ); LZMADict: array[0..21] of PtrInt = ( cKilo * 64, cMega, cMega * 2, cMega * 3, cMega * 4, cMega * 6, cMega * 8, cMega * 12, cMega * 16, cMega * 24, cMega * 32, cMega * 48, cMega * 64, cMega * 96, cMega * 128, cMega * 192, cMega * 256, cMega * 384, cMega * 512, cMega * 768, cMega * 1024, cMega * 1536 ); PPMdDict: array[0..19] of PtrInt = ( cMega, cMega * 2, cMega * 3, cMega * 4, cMega * 6, cMega * 8, cMega * 12, cMega * 16, cMega * 24, cMega * 32, cMega * 48, cMega * 64, cMega * 96, cMega * 128, cMega * 192, cMega * 256, cMega * 384, cMega * 512, cMega * 768, cMega * 1024 ); DeflateWordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 258); Deflate64WordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 257); LZMAWordSize: array[0..11] of PtrInt = (8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 273); PPMdWordSize: array[0..14] of PtrInt = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16); // Stored as block size / 1024 SolidBlock: array[0..16] of PtrInt = ( cKilo, cKilo * 2, cKilo * 4, cKilo * 8, cKilo * 16, cKilo * 32, cKilo * 64, cKilo * 128, cKilo * 256, cKilo * 512, cMega, cMega * 2, cMega * 4, cMega * 8, cMega * 16, cMega * 32, cMega * 64 ); const TargetCPU = {$I %FPCTARGETCPU%}; // Target CPU of FPC type TCompressionLevel = ( clStore = 0, clFastest = 1, clFast = 3, clNormal = 5, clMaximum = 7, clUltra = 9 ); TArchiveFormat = (afSevenZip, afBzip2, afGzip, afTar, afWim, afXz, afZip); PPasswordData = ^TPasswordData; TPasswordData = record EncryptHeader: Boolean; Password: array[0..MAX_PATH] of WideChar; end; TFormatOptions = record Level: PtrInt; Method: PtrInt; Dictionary: PtrInt; WordSize: PtrInt; SolidSize: PtrInt; ThreadCount: PtrInt; ArchiveCLSID: PGUID; Parameters: WideString; end; function GetNumberOfProcessors: LongWord; function FormatFileSize(ASize: Int64; AGiga: Boolean = True): String; procedure SetArchiveOptions(AJclArchive: IInterface); procedure LoadConfiguration; procedure SaveConfiguration; const DefaultIniName = 'sevenzip.ini'; var ConfigFile: AnsiString; LibraryPath: AnsiString; const ArchiveExtension: array[TArchiveFormat] of WideString = ('7z', 'bzip2', 'gzip', 'tar', 'wim', 'xz', 'zip'); const MethodName: array [TJclCompressionMethod] of WideString = (kCopyMethodName, kDeflateMethodName, kDeflate64MethodName, kBZip2MethodName, kLZMAMethodName, kLZMA2MethodName, kPPMdMethodName); const DefaultConfig: array[TArchiveFormat] of TFormatOptions = ( (Level: PtrInt(clNormal); Method: PtrInt(cmLZMA2); Dictionary: cMega * 16; WordSize: 32; SolidSize: cMega * 2; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormat7z; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmBZip2); Dictionary: cKilo * 900; WordSize: 0; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatBZ2; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmDeflate); Dictionary: cKilo * 32; WordSize: 32; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatGZip; Parameters: '';), (Level: PtrInt(clStore); Method: 0; Dictionary: 0; WordSize: 0; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatTar; Parameters: '';), (Level: PtrInt(clStore); Method: 0; Dictionary: 0; WordSize: 0; SolidSize: 0; ThreadCount: 1; ArchiveCLSID: @CLSID_CFormatWim; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmLZMA2); Dictionary: cMega * 16; WordSize: 32; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatXz; Parameters: '';), (Level: PtrInt(clNormal); Method: PtrInt(cmDeflate); Dictionary: cKilo * 32; WordSize: 32; SolidSize: 0; ThreadCount: 2; ArchiveCLSID: @CLSID_CFormatZip; Parameters: '';) ); var PluginConfig: array[TArchiveFormat] of TFormatOptions; implementation uses ActiveX, LazUTF8, SevenZipAdv; function GetNumberOfProcessors: LongWord; var SystemInfo: TSYSTEMINFO; begin GetSystemInfo(@SystemInfo); Result:= SystemInfo.dwNumberOfProcessors; end; function FormatFileSize(ASize: Int64; AGiga: Boolean): String; begin if ((ASize div cGiga) > 0) and AGiga then Result:= IntToStr(ASize div cGiga) + ' GB' else if (ASize div cMega) >0 then Result:= IntToStr(ASize div cMega) + ' MB' else if (ASize div cKilo) > 0 then Result:= IntToStr(ASize div cKilo) + ' KB' else Result:= IntToStr(ASize); end; procedure SetArchiveCustom(AJclArchive: IInterface; AFormat: TArchiveFormat); var Index: Integer; Start: Integer = 1; Parameters: WideString; Method: TJclCompressionMethod; JclArchive: TJclCompressionArchive; procedure AddProperty(const Name: WideString; const Value: TPropVariant); begin with JclArchive do begin SetLength(PropNames, Length(PropNames)+1); PropNames[High(PropNames)] := Name; SetLength(PropValues, Length(PropValues)+1); PropValues[High(PropValues)] := Value; end; end; procedure AddCardinalProperty(const Name: WideString; Value: Cardinal); var PropValue: TPropVariant; begin PropValue.vt := VT_UI4; PropValue.ulVal := Value; AddProperty(Name, PropValue); end; procedure AddWideStringProperty(const Name: WideString; const Value: WideString); var PropValue: TPropVariant; begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(Value)); AddProperty(Name, PropValue); end; procedure AddOption(Finish: Integer); var C: WideChar; PropValue: TPropVariant; Option, Value: WideString; begin Option:= Copy(Parameters, Start, Finish - Start); Start:= Pos('=', Option); if Start = 0 then begin PropValue.vt:= VT_EMPTY; C:= Option[Length(Option)]; if C = '+' then Variant(PropValue):= True else if C = '-' then begin Variant(PropValue):= False; end; if (PropValue.vt <> VT_EMPTY) then begin Delete(Option, Length(Option), 1); end; AddProperty(Option, PropValue); end else begin Value:= Copy(Option, Start + 1, MaxInt); SetLength(Option, Start - 1); AddWideStringProperty(Option, Value); end; end; begin JclArchive:= AJclArchive as TJclCompressionArchive; // Set word size parameter Method:= TJclCompressionMethod(PluginConfig[AFormat].Method); case Method of cmLZMA, cmLZMA2, cmDeflate, cmDeflate64: AddCardinalProperty('fb', PluginConfig[AFormat].WordSize); cmPPMd: AddCardinalProperty('o', PluginConfig[AFormat].WordSize); end; // Set 7-zip compression method if IsEqualGUID(CLSID_CFormat7z, PluginConfig[AFormat].ArchiveCLSID^) then begin AddWideStringProperty('0', MethodName[Method]); end; // Parse additional parameters Parameters:= Trim(PluginConfig[AFormat].Parameters); if Length(Parameters) > 0 then begin for Index:= 1 to Length(Parameters) do begin if Parameters[Index] = #32 then begin AddOption(Index); Start:= Index + 1; end; end; AddOption(MaxInt); end; end; procedure SetArchiveOptions(AJclArchive: IInterface); var ArchiveCLSID: TGUID; SolidBlockSize: Int64; Index: TArchiveFormat; Solid: IJclArchiveSolid; DictionarySize: IJclArchiveDictionarySize; CompressionLevel: IJclArchiveCompressionLevel; MultiThreadStrategy: IJclArchiveNumberOfThreads; CompressionMethod: IJclArchiveCompressionMethod; begin if AJclArchive is TJclSevenzipCompressArchive then ArchiveCLSID:= (AJclArchive as TJclSevenzipCompressArchive).ArchiveCLSID else begin ArchiveCLSID:= (AJclArchive as TJclSevenzipUpdateArchive).ArchiveCLSID end; for Index:= Low(PluginConfig) to High(PluginConfig) do begin if IsEqualGUID(ArchiveCLSID, PluginConfig[Index].ArchiveCLSID^) then begin if Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) then CompressionMethod.SetCompressionMethod(TJclCompressionMethod(PluginConfig[Index].Method)); if Supports(AJclArchive, IJclArchiveCompressionLevel, CompressionLevel) and Assigned(CompressionLevel) then CompressionLevel.SetCompressionLevel(PluginConfig[Index].Level); if PluginConfig[Index].Level <> PtrInt(clStore) then begin if Supports(AJclArchive, IJclArchiveDictionarySize, DictionarySize) and Assigned(DictionarySize) then DictionarySize.SetDictionarySize(PluginConfig[Index].Dictionary); if Supports(AJclArchive, IJclArchiveSolid, Solid) and Assigned(Solid) then begin SolidBlockSize:= Int64(PluginConfig[Index].SolidSize); if SolidBlockSize <> kSolidBlockSize then SolidBlockSize:= SolidBlockSize * cKilo; Solid.SetSolidBlockSize(SolidBlockSize); end; if Supports(AJclArchive, IJclArchiveNumberOfThreads, MultiThreadStrategy) and Assigned(MultiThreadStrategy) then MultiThreadStrategy.SetNumberOfThreads(PluginConfig[Index].ThreadCount); end; try SetArchiveCustom(AJclArchive, Index); except on E: Exception do Messagebox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; Exit; end; end; end; procedure LoadConfiguration; var Ini: TIniFile; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFile.Create(ConfigFile); try LibraryPath:= Ini.ReadString('Library', TargetCPU, EmptyStr); LibraryPath:= Utf16ToUtf8(ExpandEnvironmentStrings(UTF8Decode(LibraryPath))); for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do begin Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^); PluginConfig[ArchiveFormat].Level:= Ini.ReadInteger(Section, 'Level', DefaultConfig[ArchiveFormat].Level); PluginConfig[ArchiveFormat].Method:= Ini.ReadInteger(Section, 'Method', DefaultConfig[ArchiveFormat].Method); PluginConfig[ArchiveFormat].Dictionary:= Ini.ReadInteger(Section, 'Dictionary', DefaultConfig[ArchiveFormat].Dictionary); PluginConfig[ArchiveFormat].WordSize:= Ini.ReadInteger(Section, 'WordSize', DefaultConfig[ArchiveFormat].WordSize); PluginConfig[ArchiveFormat].SolidSize:= Ini.ReadInteger(Section, 'SolidSize', DefaultConfig[ArchiveFormat].SolidSize); PluginConfig[ArchiveFormat].ThreadCount:= Ini.ReadInteger(Section, 'ThreadCount', DefaultConfig[ArchiveFormat].ThreadCount); PluginConfig[ArchiveFormat].Parameters:= Ini.ReadString(Section, 'Parameters', DefaultConfig[ArchiveFormat].Parameters); end; finally Ini.Free; end; except on E: Exception do MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; procedure SaveConfiguration; var Ini: TIniFile; Section: AnsiString; ArchiveFormat: TArchiveFormat; begin try Ini:= TIniFile.Create(ConfigFile); try for ArchiveFormat:= Low(TArchiveFormat) to High(TArchiveFormat) do begin Section:= GUIDToString(PluginConfig[ArchiveFormat].ArchiveCLSID^); Ini.WriteString(Section, 'Format', ArchiveExtension[ArchiveFormat]); Ini.WriteInteger(Section, 'Level', PluginConfig[ArchiveFormat].Level); Ini.WriteInteger(Section, 'Method', PluginConfig[ArchiveFormat].Method); Ini.WriteInteger(Section, 'Dictionary', PluginConfig[ArchiveFormat].Dictionary); Ini.WriteInteger(Section, 'WordSize', PluginConfig[ArchiveFormat].WordSize); Ini.WriteInteger(Section, 'SolidSize', PluginConfig[ArchiveFormat].SolidSize); Ini.WriteInteger(Section, 'ThreadCount', PluginConfig[ArchiveFormat].ThreadCount); Ini.WriteString(Section, 'Parameters', PluginConfig[ArchiveFormat].Parameters); end; finally Ini.Free; end; except on E: Exception do MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; initialization CopyMemory(@PluginConfig[Low(PluginConfig)], @DefaultConfig[Low(DefaultConfig)], SizeOf(PluginConfig)); end. ���������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipLng.pas��������������������������������������������0000644�0001750�0000144�00000002763�12603033261�022346� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, language support Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipLng; {$mode delphi} interface uses Classes, SysUtils; resourcestring rsSevenZipLoadError = 'Failed to load 7z.dll'; rsSevenZipSfxNotFound = 'Cannot find specified SFX module'; resourcestring rsCompressionLevelStore = 'Store'; rsCompressionLevelFastest = 'Fastest'; rsCompressionLevelFast = 'Fast'; rsCompressionLevelNormal = 'Normal'; rsCompressionLevelMaximum = 'Maximum'; rsCompressionLevelUltra = 'Ultra'; rsSolidBlockSolid = 'Solid'; rsSolidBlockNonSolid = 'Non-solid'; implementation end. �������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipAdv.pas��������������������������������������������0000644�0001750�0000144�00000036736�12630666255�022366� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2014 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipAdv; {$mode delphi} interface uses Classes, SysUtils, SevenZip, JclCompression; type TBytes = array of Byte; TCardinalArray = array of Cardinal; TJclCompressionArchiveClassArray = array of TJclCompressionArchiveClass; type { TArchiveFormat } TArchiveFormat = class Name: UnicodeString; Extension: UnicodeString; AddExtension: UnicodeString; Update: WordBool; KeepName: WordBool; ClassID: TGUID; StartSignature: TBytes; end; { TJclXzCompressArchiveEx } TJclXzCompressArchiveEx = class(TJclSevenzipCompressArchive) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; { TJclSevenzipUpdateArchiveHelper } TJclSevenzipUpdateArchiveHelper = class helper for TJclSevenzipUpdateArchive procedure RemoveDirectory(const PackedName: WideString); overload; end; { TJclSevenzipDecompressArchiveHelper } TJclSevenzipDecompressArchiveHelper = class helper for TJclSevenzipDecompressArchive procedure ProcessSelected(const SelectedArray: TCardinalArray; Verify: Boolean); end; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; function GetNestedArchiveName(const ArchiveName: String; Item: TJclCompressionItem): WideString; function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString; function WideExtractFilePath(const FileName: WideString): WideString; function GetModulePath(out ModulePath: AnsiString): Boolean; implementation uses CTypes, ActiveX, Windows, LazFileUtils, LazUTF8; type TArchiveFormats = array of TArchiveFormat; TJclSevenzipUpdateArchiveClass = class of TJclSevenzipUpdateArchive; TJclSevenzipCompressArchiveClass = class of TJclSevenzipCompressArchive; TJclSevenzipDecompressArchiveClass = class of TJclSevenzipDecompressArchive; TJclArchiveType = (atUpdateArchive, atCompressArchive, atDecompressArchive); type TArchiveFormatCache = record ArchiveName: String; ArchiveClassArray: TJclCompressionArchiveClassArray; end; var ArchiveFormatsX: TArchiveFormats; var UpdateFormatsCache: TArchiveFormatCache; CompressFormatsCache: TArchiveFormatCache; DecompressFormatsCache: TArchiveFormatCache; function _wcsnicmp(const s1, s2: pwidechar; count: csize_t): cint; cdecl; external 'msvcrt.dll'; function ReadStringProp(FormatIndex: Cardinal; PropID: TPropID; out Value: UnicodeString): LongBool; var PropSize: Cardinal; PropValue: TPropVariant; begin Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BSTR); if Result then try PropSize:= SysStringByteLen(PropValue.bstrVal); SetLength(Value, PropSize div SizeOf(WideChar)); CopyMemory(PWideChar(Value), PropValue.bstrVal, PropSize); finally SysFreeString(PropValue.bstrVal); end; end; function ReadBooleanProp(FormatIndex: Cardinal; PropID: TPropID; out Value: WordBool): LongBool; var PropValue: TPropVariant; begin Result:= Succeeded(GetHandlerProperty2(FormatIndex, PropID, PropValue)); Result:= Result and (PropValue.vt = VT_BOOL); if Result then Value:= PropValue.boolVal; end; procedure LoadArchiveFormats(var ArchiveFormats: TArchiveFormats); var J: Integer; Data: PByte; Idx: Integer = 0; PropValue: TPropVariant; ArchiveFormat: TArchiveFormat; Index, NumberOfFormats: Cardinal; begin if (not Is7ZipLoaded) and (not Load7Zip) then Exit; if not Succeeded(GetNumberOfFormats(@NumberOfFormats)) then Exit; SetLength(ArchiveFormats, NumberOfFormats); for Index := Low(ArchiveFormats) to High(ArchiveFormats) do begin // Archive format GUID GetHandlerProperty2(Index, kClassID, PropValue); if PropValue.vt = VT_BSTR then try if SysStringByteLen(PropValue.bstrVal) <> SizeOf(TGUID) then Continue else begin ArchiveFormat:= TArchiveFormat.Create; ArchiveFormat.ClassID:= PGUID(PropValue.bstrVal)^; end; finally SysFreeString(PropValue.bstrVal); end; // Archive format signature GetHandlerProperty2(Index, kStartSignature, PropValue); if PropValue.vt = VT_BSTR then try SetLength(ArchiveFormat.StartSignature, SysStringByteLen(PropValue.bstrVal)); Data:= PByte(PropValue.bstrVal); for J:= Low(ArchiveFormat.StartSignature) to High(ArchiveFormat.StartSignature) do ArchiveFormat.StartSignature[J]:= Data[J]; finally SysFreeString(PropValue.bstrVal); end; ReadStringProp(Index, kArchiveName, ArchiveFormat.Name); ReadStringProp(Index, kExtension, ArchiveFormat.Extension); ReadStringProp(Index, kAddExtension, ArchiveFormat.AddExtension); ReadBooleanProp(Index, kUpdate, ArchiveFormat.Update); ReadBooleanProp(Index, kKeepName, ArchiveFormat.KeepName); ArchiveFormats[Idx]:= ArchiveFormat; Inc(Idx); end; SetLength(ArchiveFormats, Idx); end; function Contains(const ArrayToSearch: TJclCompressionArchiveClassArray; const ArchiveClass: TJclCompressionArchiveClass): Boolean; var Index: Integer; begin for Index := Low(ArrayToSearch) to High(ArrayToSearch) do if ArrayToSearch[Index] = ArchiveClass then Exit(True); Result := False; end; function FindArchiveFormat(const ClassID: TGUID; ArchiveType: TJclArchiveType): TJclCompressionArchiveClass; var Index: Integer; UpdateClass: TJclSevenzipUpdateArchiveClass; CompressClass: TJclSevenzipCompressArchiveClass; DecompressClass: TJclSevenzipDecompressArchiveClass; begin case ArchiveType of atUpdateArchive: for Index:= 0 to GetArchiveFormats.UpdateFormatCount - 1 do begin UpdateClass:= TJclSevenzipUpdateArchiveClass(GetArchiveFormats.UpdateFormats[Index]); if IsEqualGUID(ClassID, UpdateClass.ArchiveCLSID) then Exit(GetArchiveFormats.UpdateFormats[Index]); end; atCompressArchive: for Index:= 0 to GetArchiveFormats.CompressFormatCount - 1 do begin CompressClass:= TJclSevenzipCompressArchiveClass(GetArchiveFormats.CompressFormats[Index]); if IsEqualGUID(ClassID, CompressClass.ArchiveCLSID) then Exit(GetArchiveFormats.CompressFormats[Index]); end; atDecompressArchive: for Index:= 0 to GetArchiveFormats.DecompressFormatCount - 1 do begin DecompressClass:= TJclSevenzipDecompressArchiveClass(GetArchiveFormats.DecompressFormats[Index]); if IsEqualGUID(ClassID, DecompressClass.ArchiveCLSID) then Exit(GetArchiveFormats.DecompressFormats[Index]); end; end; Result:= nil; end; procedure FindArchiveFormats(const AFileName: TFileName; ArchiveType: TJclArchiveType; var Result: TJclCompressionArchiveClassArray); const BufferSize = 524288; var AFile: THandle; Buffer: TBytes; Idx, Index: Integer; ArchiveFormat: TArchiveFormat; ArchiveClass: TJclCompressionArchiveClass; begin if Length(ArchiveFormatsX) = 0 then LoadArchiveFormats(ArchiveFormatsX); AFile:= FileOpenUTF8(AFileName, fmOpenRead or fmShareDenyNone); if AFile = feInvalidHandle then Exit; try SetLength(Buffer, BufferSize); if FileRead(AFile, Buffer[0], BufferSize) = 0 then Exit; finally FileClose(AFile); end; for Index := Low(ArchiveFormatsX) to High(ArchiveFormatsX) do begin ArchiveFormat:= ArchiveFormatsX[Index]; if (not ArchiveFormat.Update) and (ArchiveType in [atUpdateArchive, atCompressArchive]) then Continue; // Skip container types if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatPe) then Continue; if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatIso) then Continue; if IsEqualGUID(ArchiveFormat.ClassID, CLSID_CFormatUdf) then Continue; if Length(ArchiveFormat.StartSignature) = 0 then Continue; for Idx:= 0 to Pred(BufferSize) - Length(ArchiveFormat.StartSignature) do begin if CompareMem(@Buffer[Idx], @ArchiveFormat.StartSignature[0], Length(ArchiveFormat.StartSignature)) then begin ArchiveClass:= FindArchiveFormat(ArchiveFormat.ClassID, ArchiveType); if Assigned(ArchiveClass) and not Contains(Result, ArchiveClass) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := ArchiveClass; end; Break; end; end; end; end; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin // Try to find archive type in cache if UpdateFormatsCache.ArchiveName = AFileName then Exit(TJclUpdateArchiveClassArray(UpdateFormatsCache.ArchiveClassArray)) else begin UpdateFormatsCache.ArchiveName:= AFileName; SetLength(UpdateFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindUpdateFormats(AFileName); FindArchiveFormats(AFileName, atUpdateArchive, ArchiveClassArray); // Save archive type in cache UpdateFormatsCache.ArchiveClassArray:= ArchiveClassArray; end; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin // Try to find archive type in cache if CompressFormatsCache.ArchiveName = AFileName then Exit(TJclCompressArchiveClassArray(CompressFormatsCache.ArchiveClassArray)) else begin CompressFormatsCache.ArchiveName:= AFileName; SetLength(CompressFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindCompressFormats(AFileName); FindArchiveFormats(AFileName, atCompressArchive, ArchiveClassArray); // Save archive type in cache CompressFormatsCache.ArchiveClassArray:= ArchiveClassArray; end; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; var ArchiveClassArray: TJclCompressionArchiveClassArray absolute Result; begin // Try to find archive type in cache if DecompressFormatsCache.ArchiveName = AFileName then Exit(TJclDecompressArchiveClassArray(DecompressFormatsCache.ArchiveClassArray)) else begin DecompressFormatsCache.ArchiveName:= AFileName; SetLength(DecompressFormatsCache.ArchiveClassArray, 0); end; Result:= GetArchiveFormats.FindDecompressFormats(AFileName); FindArchiveFormats(AFileName, atDecompressArchive, ArchiveClassArray); // Save archive type in cache DecompressFormatsCache.ArchiveClassArray:= ArchiveClassArray; end; { TJclXzCompressArchiveEx } class function TJclXzCompressArchiveEx.ArchiveExtensions: string; begin Result:= TJclXzCompressArchive.ArchiveExtensions; end; class function TJclXzCompressArchiveEx.ArchiveName: string; begin Result:= TJclXzCompressArchive.ArchiveName; end; class function TJclXzCompressArchiveEx.ArchiveSubExtensions: string; begin Result:= TJclXzCompressArchive.ArchiveSubExtensions; end; class function TJclXzCompressArchiveEx.ArchiveCLSID: TGUID; begin Result:= TJclXzCompressArchive.ArchiveCLSID; end; { TJclSevenzipUpdateArchiveHelper } procedure TJclSevenzipUpdateArchiveHelper.RemoveDirectory(const PackedName: WideString); var DirectoryName: WideString; AItem: TJclCompressionItem; Index, PackedNamesIndex: Integer; begin DirectoryName:= Copy(PackedName, 1, Length(PackedName) - 1); // Remove directory for Index := 0 to ItemCount - 1 do begin AItem := Items[Index]; // Can be with or without path delimiter at end if WideSameText(AItem.PackedName, PackedName) or WideSameText(AItem.PackedName, DirectoryName) then begin FItems.Delete(Index); PackedNamesIndex := -1; if (FPackedNames <> nil) and FPackedNames.Find(PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); Break; end; end; // Remove directory content for Index := ItemCount - 1 downto 0 do begin if (_wcsnicmp(PWideChar(PackedName), PWideChar(Items[Index].PackedName), Length(PackedName)) = 0) then begin if (FPackedNames <> nil) and FPackedNames.Find(Items[Index].PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); FItems.Delete(Index); end; end; end; { TJclSevenzipDecompressArchiveHelper } procedure TJclSevenzipDecompressArchiveHelper.ProcessSelected(const SelectedArray: TCardinalArray; Verify: Boolean); var AExtractCallback: IArchiveExtractCallback; begin CheckNotDecompressing; FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; SevenzipCheck(InArchive.Extract(@SelectedArray[0], Length(SelectedArray), Cardinal(Verify), AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; end; end; function GetNestedArchiveName(const ArchiveName: String; Item: TJclCompressionItem): WideString; var Extension: String; begin Result:= Item.NestedArchiveName; Extension:= LowerCase(ExtractFileExt(ArchiveName)); if (Extension = '.tbz') or (Extension = '.tgz') or (Extension = '.txz') then begin Result:= Result + '.tar'; end; end; function ExpandEnvironmentStrings(const FileName: UnicodeString): UnicodeString; var dwSize: DWORD; begin SetLength(Result, MAX_PATH + 1); dwSize:= ExpandEnvironmentStringsW(PWideChar(FileName), PWideChar(Result), MAX_PATH); if dwSize > 0 then SetLength(Result, dwSize - 1); end; function WideExtractFilePath(const FileName: WideString): WideString; var Index: Integer; begin for Index:= Length(FileName) downto 1 do case FileName[Index] of PathDelim: Exit(Copy(FileName, 1, Index)); end; Result:= EmptyWideStr; end; function GetModulePath(out ModulePath: AnsiString): Boolean; var lpBuffer: TMemoryBasicInformation; ModuleName: array[0..MAX_PATH] of WideChar; begin Result:= VirtualQuery(@GetModulePath, @lpBuffer, SizeOf(lpBuffer)) = SizeOf(lpBuffer); if Result then begin Result:= GetModuleFileNameW(THandle(lpBuffer.AllocationBase), ModuleName, MAX_PATH) > 0; if Result then begin ModulePath:= ExtractFilePath(Utf16ToUtf8(WideString(ModuleName))); end; end; end; end. ����������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/�������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�020221� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/windows/�����������������������������������������������0000755�0001750�0000144�00000000000�12675717731�021713� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/windows/sevenzip.pas�����������������������������������0000644�0001750�0000144�00000101264�12512255642�024253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{**************************************************************************************************} { } { Project JEDI Code Library (JCL) } { } { interface of the 'sevenzip' (http://sourceforge.net/projects/sevenzip/) compression library } { version 4.62, December 2th, 2008 } { } { Copyright (C) 1999-2008 Igor Pavlov } { } { GNU LGPL information } { -------------------- } { } { This library is free software; you can redistribute it and/or modify it under the terms of } { the GNU Lesser General Public License as published by the Free Software Foundation; either } { version 2.1 of the License, or (at your option) any later version. } { } { This 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 Lesser General Public License for more details. } { } { You should have received a copy of the GNU Lesser 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 } { } { unRAR restriction } { ----------------- } { } { The decompression engine for RAR archives was developed using source code of unRAR program. } { All copyrights to original unRAR code are owned by Alexander Roshal. } { } { The license for original unRAR code has the following restriction: } { } { The unRAR sources cannot be used to re-create the RAR compression algorithm, } { which is proprietary. Distribution of modified unRAR sources in separate form } { or as a part of other software is permitted, provided that it is clearly } { stated in the documentation and source comments that the code may } { not be used to develop a RAR (WinRAR) compatible archiver. } { } {**************************************************************************************************} { } { Translation 2007-2008 Florent Ouchet for the JEDI Code Library } { Contributors: } { Uwe Schuster (uschuster) } { Jan Goyvaerts (jgsoft) } { } {**************************************************************************************************} { } { Last modified: $Date:: $ } { Revision: $Rev:: $ } { Author: $Author:: $ } { } {**************************************************************************************************} unit sevenzip; {$mode delphi} interface {$DEFINE 7ZIP_LINKONREQUEST} uses {$IFDEF HAS_UNITSCOPE} Winapi.ActiveX, Winapi.Windows, {$ELSE ~HAS_UNITSCOPE} ActiveX, Windows, {$ENDIF ~HAS_UNITSCOPE} {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} DCJclAlternative; //DOM-IGNORE-BEGIN // Guid.txt const CLSID_CCodec : TGUID = '{23170F69-40C1-2790-0000-000000000000}'; CLSID_CCodecBCJ2 : TGUID = '{23170F69-40C1-2790-1B01-030300000000}'; // BCJ2 0303011B CLSID_CCodecBCJ : TGUID = '{23170F69-40C1-2790-0301-030300000000}'; // BCJ 03030103 CLSID_CCodecSWAP2 : TGUID = '{23170F69-40C1-2790-0203-030000000000}'; // swap2 020302 CLSID_CCodecSWAP4 : TGUID = '{23170F69-40C1-2790-0403-020000000000}'; // swap4 020304 CLSID_CCodecBPPC : TGUID = '{23170F69-40C1-2790-0502-030300000000}'; // branch ppc 03030205 CLSID_CCodecBIA64 : TGUID = '{23170F69-40C1-2790-0104-030300000000}'; // branch IA64 03030401 CLSID_CCodecBARM : TGUID = '{23170F69-40C1-2790-0105-030300000000}'; // branch ARM 03030501 CLSID_CCodecBARMT : TGUID = '{23170F69-40C1-2790-0107-030300000000}'; // branch ARM Thumb 03030701 CLSID_CCodecBARMS : TGUID = '{23170F69-40C1-2790-0508-030300000000}'; // branch ARM Sparc 03030805 CLSID_CCodecBZIP : TGUID = '{23170F69-40C1-2790-0202-040000000000}'; // bzip2 040202 CLSID_CCodecCOPY : TGUID = '{23170F69-40C1-2790-0000-000000000000}'; // copy 0 CLSID_CCodecDEF64 : TGUID = '{23170F69-40C1-2790-0901-040000000000}'; // deflate64 040109 CLSID_CCodecDEFNSIS : TGUID = '{23170F69-40C1-2790-0109-040000000000}'; // deflate nsis 040901 CLSID_CCodecDEFREG : TGUID = '{23170F69-40C1-2790-0801-040000000000}'; // deflate register 040108 CLSID_CCodecLZMA : TGUID = '{23170F69-40C1-2790-0101-030000000000}'; // lzma 030101 CLSID_CCodecPPMD : TGUID = '{23170F69-40C1-2790-0104-030000000000}'; // ppmd 030401 CLSID_CCodecRAR1 : TGUID = '{23170F69-40C1-2790-0103-040000000000}'; // rar1 040301 CLSID_CCodecRAR2 : TGUID = '{23170F69-40C1-2790-0203-040000000000}'; // rar2 040302 CLSID_CCodecRAR3 : TGUID = '{23170F69-40C1-2790-0303-040000000000}'; // rar3 040303 CLSID_CAESCodec : TGUID = '{23170F69-40C1-2790-0107-F10600000000}'; // AES 06F10701 CLSID_CArchiveHandler : TGUID = '{23170F69-40C1-278A-1000-000110000000}'; CLSID_CFormatZip : TGUID = '{23170F69-40C1-278A-1000-000110010000}'; CLSID_CFormatBZ2 : TGUID = '{23170F69-40C1-278A-1000-000110020000}'; CLSID_CFormatRar : TGUID = '{23170F69-40C1-278A-1000-000110030000}'; CLSID_CFormatArj : TGUID = '{23170F69-40C1-278A-1000-000110040000}'; CLSID_CFormatZ : TGUID = '{23170F69-40C1-278A-1000-000110050000}'; CLSID_CFormatLzh : TGUID = '{23170F69-40C1-278A-1000-000110060000}'; CLSID_CFormat7z : TGUID = '{23170F69-40C1-278A-1000-000110070000}'; CLSID_CFormatCab : TGUID = '{23170F69-40C1-278A-1000-000110080000}'; CLSID_CFormatNsis : TGUID = '{23170F69-40C1-278A-1000-000110090000}'; CLSID_CFormatLzma : TGUID = '{23170F69-40C1-278A-1000-0001100A0000}'; CLSID_CFormatLzma86 : TGUID = '{23170F69-40C1-278A-1000-0001100B0000}'; CLSID_CFormatXz : TGUID = '{23170F69-40C1-278A-1000-0001100C0000}'; CLSID_CFormatPpmd : TGUID = '{23170F69-40C1-278A-1000-0001100D0000}'; CLSID_CFormatTE : TGUID = '{23170F69-40C1-278A-1000-000110CF0000}'; CLSID_CFormatUEFIc : TGUID = '{23170F69-40C1-278A-1000-000110D00000}'; CLSID_CFormatUEFIs : TGUID = '{23170F69-40C1-278A-1000-000110D10000}'; CLSID_CFormatSquashFS : TGUID = '{23170F69-40C1-278A-1000-000110D20000}'; CLSID_CFormatCramFS : TGUID = '{23170F69-40C1-278A-1000-000110D30000}'; CLSID_CFormatAPM : TGUID = '{23170F69-40C1-278A-1000-000110D40000}'; CLSID_CFormatMslz : TGUID = '{23170F69-40C1-278A-1000-000110D50000}'; CLSID_CFormatFlv : TGUID = '{23170F69-40C1-278A-1000-000110D60000}'; CLSID_CFormatSwf : TGUID = '{23170F69-40C1-278A-1000-000110D70000}'; CLSID_CFormatSwfc : TGUID = '{23170F69-40C1-278A-1000-000110D80000}'; CLSID_CFormatNtfs : TGUID = '{23170F69-40C1-278A-1000-000110D90000}'; CLSID_CFormatFat : TGUID = '{23170F69-40C1-278A-1000-000110DA0000}'; CLSID_CFormatMbr : TGUID = '{23170F69-40C1-278A-1000-000110DB0000}'; CLSID_CFormatVhd : TGUID = '{23170F69-40C1-278A-1000-000110DC0000}'; CLSID_CFormatPe : TGUID = '{23170F69-40C1-278A-1000-000110DD0000}'; CLSID_CFormatElf : TGUID = '{23170F69-40C1-278A-1000-000110DE0000}'; CLSID_CFormatMacho : TGUID = '{23170F69-40C1-278A-1000-000110DF0000}'; CLSID_CFormatUdf : TGUID = '{23170F69-40C1-278A-1000-000110E00000}'; CLSID_CFormatXar : TGUID = '{23170F69-40C1-278A-1000-000110E10000}'; CLSID_CFormatMub : TGUID = '{23170F69-40C1-278A-1000-000110E20000}'; CLSID_CFormatHfs : TGUID = '{23170F69-40C1-278A-1000-000110E30000}'; CLSID_CFormatDmg : TGUID = '{23170F69-40C1-278A-1000-000110E40000}'; CLSID_CFormatCompound : TGUID = '{23170F69-40C1-278A-1000-000110E50000}'; CLSID_CFormatWim : TGUID = '{23170F69-40C1-278A-1000-000110E60000}'; CLSID_CFormatIso : TGUID = '{23170F69-40C1-278A-1000-000110E70000}'; //CLSID_CFormatBkf : TGUID = '{23170F69-40C1-278A-1000-000110E80000}'; not in 4.57 CLSID_CFormatChm : TGUID = '{23170F69-40C1-278A-1000-000110E90000}'; CLSID_CFormatSplit : TGUID = '{23170F69-40C1-278A-1000-000110EA0000}'; CLSID_CFormatRpm : TGUID = '{23170F69-40C1-278A-1000-000110EB0000}'; CLSID_CFormatDeb : TGUID = '{23170F69-40C1-278A-1000-000110EC0000}'; CLSID_CFormatCpio : TGUID = '{23170F69-40C1-278A-1000-000110ED0000}'; CLSID_CFormatTar : TGUID = '{23170F69-40C1-278A-1000-000110EE0000}'; CLSID_CFormatGZip : TGUID = '{23170F69-40C1-278A-1000-000110EF0000}'; // IStream.h type // "23170F69-40C1-278A-0000-000300xx0000" ISequentialInStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300010000}'] function Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; {Out: if size != 0, return_value = S_OK and (*processedSize == 0), then there are no more bytes in stream. if (size > 0) && there are bytes in stream, this function must read at least 1 byte. This function is allowed to read less than number of remaining bytes in stream. You must call Read function in loop, if you need exact amount of data} end; ISequentialOutStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300020000}'] function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; {if (size > 0) this function must write at least 1 byte. This function is allowed to write less than "size". You must call Write function in loop, if you need to write exact amount of data} end; IInStream = interface(ISequentialInStream) ['{23170F69-40C1-278A-0000-000300030000}'] function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; end; IOutStream = interface(ISequentialOutStream) ['{23170F69-40C1-278A-0000-000300040000}'] function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; IStreamGetSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300060000}'] function GetSize(Size: PInt64): HRESULT; stdcall; end; IOutStreamFlush = interface(IUnknown) ['{23170F69-40C1-278A-0000-000300070000}'] function Flush: HRESULT; stdcall; end; // PropID.h const kpidNoProperty = 0; kpidMainSubfile = 1; kpidHandlerItemIndex = 2; kpidPath = 3; kpidName = 4; kpidExtension = 5; kpidIsFolder = 6 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidIsDir' {$ENDIF} {$ENDIF}; kpidIsDir = 6; kpidSize = 7; kpidPackedSize = 8 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidPackSize' {$ENDIF} {$ENDIF}; kpidPackSize = 8; kpidAttributes = 9 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidAttrib' {$ENDIF} {$ENDIF}; kpidAttrib = 9; kpidCreationTime = 10 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidCTime' {$ENDIF} {$ENDIF}; kpidCTime = 10; kpidLastAccessTime = 11 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidATime' {$ENDIF} {$ENDIF}; kpidATime = 11; kpidLastWriteTime = 12 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kpidMTime' {$ENDIF} {$ENDIF}; kpidMTime = 12; kpidSolid = 13; kpidCommented = 14; kpidEncrypted = 15; kpidSplitBefore = 16; kpidSplitAfter = 17; kpidDictionarySize = 18; kpidCRC = 19; kpidType = 20; kpidIsAnti = 21; kpidMethod = 22; kpidHostOS = 23; kpidFileSystem = 24; kpidUser = 25; kpidGroup = 26; kpidBlock = 27; kpidComment = 28; kpidPosition = 29; kpidPrefix = 30; kpidNumSubDirs = 31; kpidNumSubFiles = 32; kpidUnpackVer = 33; kpidVolume = 34; kpidIsVolume = 35; kpidOffset = 36; kpidLinks = 37; kpidNumBlocks = 38; kpidNumVolumes = 39; kpidTimeType = 40; kpidBit64 = 41; kpidBigEndian = 42; kpidCpu = 43; kpidPhySize = 44; kpidHeadersSize = 45; kpidChecksum = 46; kpidCharacts = 47; kpidVa = 48; kpidId = 49; kpidShortName = 50; kpidCreatorApp = 51; kpidSectorSize = 52; kpidPosixAttrib = 53; kpidLink = 54; kpidTotalSize = $1100; kpidFreeSpace = $1101; kpidClusterSize = $1102; kpidVolumeName = $1103; kpidLocalName = $1200; kpidProvider = $1201; kpidUserDefined = $10000; // HandlerOut.cpp kCopyMethodName = WideString('Copy'); kLZMAMethodName = WideString('LZMA'); kLZMA2MethodName = WideString('LZMA2'); kBZip2MethodName = WideString('BZip2'); kPpmdMethodName = WideString('PPMd'); kDeflateMethodName = WideString('Deflate'); kDeflate64MethodName = WideString('Deflate64'); kAES128MethodName = WideString('AES128'); kAES192MethodName = WideString('AES192'); kAES256MethodName = WideString('AES256'); kZipCryptoMethodName = WideString('ZIPCRYPTO'); // ICoder.h type ICompressProgressInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400040000}'] function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; ICompressCoder = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400050000}'] function Code(InStream: ISequentialInStream; OutStream: ISequentialOutStream; InSize, OutSize: PInt64; Progress: ICompressProgressInfo): HRESULT; stdcall; end; PISequentialInStream = ^ISequentialInStream; PISequentialOutStream = ^ISequentialOutStream; ICompressCoder2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400180000}'] function Code(InStreams: PISequentialInStream; InSizes: JclBase.PPInt64; NumInStreams: Cardinal; OutStreams: PISequentialOutStream; OutSizes: JclBase.PPInt64; NumOutStreams: Cardinal; Progress: ICompressProgressInfo): HRESULT; stdcall; end; const kDictionarySize = $400; kUsedMemorySize = $401; kOrder = $402; kBlockSize = $403; kPosStateBits = $440; kLitContextBits = $441; kLitPosBits = $442; kNumFastBytes = $450; kMatchFinder = $451; kMatchFinderCycles = $452; kNumPasses = $460; kAlgorithm = $470; kMultiThread = $480; kNumThreads = $481; kEndMarker = $490; type ICompressSetCoderProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400200000}'] function SetCoderProperties(PropIDs: PPropID; Properties: PPropVariant; NumProperties: Cardinal): HRESULT; stdcall; end; ICompressSetDecoderProperties2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400220000}'] function SetDecoderProperties2(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICompressWriteCoderProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400230000}'] function WriteCoderProperties(OutStream: ISequentialOutStream): HRESULT; stdcall; end; ICompressGetInStreamProcessedSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400240000}'] function GetInStreamProcessedSize(Value: PInt64): HRESULT; stdcall; end; ICompressSetCoderMt = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400250000}'] function SetNumberOfThreads(NumThreads: Cardinal): HRESULT; stdcall; end; ICompressGetSubStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400300000}'] function GetSubStreamSize(SubStream: Int64; out Value: Int64): HRESULT; stdcall; end; ICompressSetInStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400310000}'] function SetInStream(InStream: ISequentialInStream): HRESULT; stdcall; function ReleaseInStream: HRESULT; stdcall; end; ICompressSetOutStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400320000}'] function SetOutStream(OutStream: ISequentialOutStream): HRESULT; stdcall; function ReleaseOutStream: HRESULT; stdcall; end; ICompressSetInStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400330000}'] function SetInStreamSize(InSize: PInt64): HRESULT; stdcall; end; ICompressSetOutStreamSize = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400340000}'] function SetOutStreamSize(OutSize: PInt64): HRESULT; stdcall; end; ICompressFilter = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400400000}'] function Init: HRESULT; stdcall; function Filter(Data: PByte; Size: Cardinal): Cardinal; stdcall; // Filter return outSize (UInt32) // if (outSize <= size): Filter have converted outSize bytes // if (outSize > size): Filter have not converted anything. // and it needs at least outSize bytes to convert one block // (it's for crypto block algorithms). end; ICompressCodecsInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400600000}'] function GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function CreateDecoder(Index: Cardinal; IID: PGUID; out Decoder): HRESULT; stdcall; function CreateEncoder(Index: Cardinal; IID: PGUID; out Coder): HRESULT; stdcall; end; ISetCompressCodecsInfo = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400610000}'] function SetCompressCodecsInfo(CompressCodecsInfo: ICompressCodecsInfo): HRESULT; stdcall; end; ICryptoProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400800000}'] function SetKey(Data: PByte; Size: Cardinal): HRESULT; stdcall; function SetInitVector(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICryptoSetPassword = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400900000}'] function CryptoSetPassword(Data: PByte; Size: Cardinal): HRESULT; stdcall; end; ICryptoSetCRC = interface(IUnknown) ['{23170F69-40C1-278A-0000-000400A00000}'] function CryptoSetCRC(crc: Cardinal): HRESULT; stdcall; end; const kID = 0; kName = 1; kDecoder = 2; kEncoder = 3; kInStreams = 4; kOutStreams = 5; kDescription = 6; kDecoderIsAssigned = 7; kEncoderIsAssigned = 8; // IProgress.h type IProgress = interface(IUnknown) ['{23170F69-40C1-278A-0000-000000050000}'] function SetTotal(Total: Int64): HRESULT; stdcall; function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; end; // IArchive.h const // file time type kWindows = 0; kUnix = 1; kDOS = 2; // archive kArchiveName = 0; kClassID = 1; kExtension = 2; kAddExtension = 3; kUpdate = 4; kKeepName = 5; kStartSignature = 6; kFinishSignature = 7; kAssociate = 8; // ask mode kExtract = 0; kTest = 1; kSkip = 2; // operation result kOK = 0; kUnSupportedMethod = 1; kDataError = 2; kCRCError = 3; kError = 1; type // "23170F69-40C1-278A-0000-000600xx0000" IArchiveOpenCallback = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600100000}'] function SetTotal(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; function SetCompleted(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; end; IArchiveExtractCallback = interface(IProgress) ['{23170F69-40C1-278A-0000-000600200000}'] function GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; stdcall; // GetStream OUT: S_OK - OK, S_FALSE - skeep this file function PrepareOperation(askExtractMode: Cardinal): HRESULT; stdcall; function SetOperationResult(resultEOperationResult: Integer): HRESULT; stdcall; end; IArchiveOpenVolumeCallback = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600300000}'] function GetProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetStream(Name: PWideChar; out InStream: IInStream): HRESULT; stdcall; end; IInArchiveGetStream = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600400000}'] function GetStream(Index: Cardinal; out Stream: ISequentialInStream): HRESULT; stdcall; end; IArchiveOpenSetSubArchiveName = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600500000}'] function SetSubArchiveName(Name: PWideChar): HRESULT; stdcall; end; IInArchive = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600600000}'] function Open(Stream: IInStream; MaxCheckStartPosition: PInt64; OpenArchiveCallback: IArchiveOpenCallback): HRESULT; stdcall; function Close: HRESULT; stdcall; function GetNumberOfItems(NumItems: PCardinal): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; var Value: TPropVariant): HRESULT; stdcall; function Extract(Indices: PCardinal; NumItems: Cardinal; TestMode: Integer; ExtractCallback: IArchiveExtractCallback): HRESULT; stdcall; // indices must be sorted // numItems = 0xFFFFFFFF means all files // testMode != 0 means "test files operation" function GetArchiveProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetNumberOfProperties(NumProperties: PCardinal): HRESULT; stdcall; function GetPropertyInfo(Index: Cardinal; out Name: TBStr; out PropID: TPropID; out VarType: TVarType): HRESULT; stdcall; function GetNumberOfArchiveProperties(NumProperties: PCardinal): HRESULT; stdcall; function GetArchivePropertyInfo(Index: Cardinal; out Name: TBStr; out PropID: TPropID; out VarType: TVarType): HRESULT; stdcall; end; IArchiveUpdateCallback = interface(IProgress) ['{23170F69-40C1-278A-0000-000600800000}'] function GetUpdateItemInfo(Index: Cardinal; NewData: PInteger; // 1 - new data, 0 - old data NewProperties: PInteger; // 1 - new properties, 0 - old properties IndexInArchive: PCardinal // -1 if there is no in archive, or if doesn't matter ): HRESULT; stdcall; function GetProperty(Index: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; stdcall; function SetOperationResult(OperationResult: Integer): HRESULT; stdcall; end; IArchiveUpdateCallback2 = interface(IArchiveUpdateCallback) ['{23170F69-40C1-278A-0000-000600820000}'] function GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; stdcall; function GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; stdcall; end; IOutArchive = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600A00000}'] function UpdateItems(OutStream: ISequentialOutStream; NumItems: Cardinal; UpdateCallback: IArchiveUpdateCallback): HRESULT; stdcall; function GetFileTimeType(Type_: PCardinal): HRESULT; stdcall; end; ISetProperties = interface(IUnknown) ['{23170F69-40C1-278A-0000-000600030000}'] function SetProperties(Names: PPWideChar; Values: PPropVariant; NumProperties: Integer): HRESULT; stdcall; end; // IPassword.h type ICryptoGetTextPassword = interface(IUnknown) ['{23170F69-40C1-278A-0000-000500100000}'] function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; end; ICryptoGetTextPassword2 = interface(IUnknown) ['{23170F69-40C1-278A-0000-000500110000}'] function CryptoGetTextPassword2(PasswordIsDefined: PInteger; Password: PBStr): HRESULT; stdcall; end; // ZipHandlerOut.cpp const kDeflateAlgoX1 = 0 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kLzAlgoX1' {$ENDIF} {$ENDIF}; kLzAlgoX1 = 0; kDeflateAlgoX5 = 1 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kLzAlgoX5' {$ENDIF} {$ENDIF}; kLzAlgoX5 = 1; kDeflateNumPassesX1 = 1; kDeflateNumPassesX7 = 3; kDeflateNumPassesX9 = 10; kNumFastBytesX1 = 32 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX1' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX1 = 32; kNumFastBytesX7 = 64 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX7' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX7 = 64; kNumFastBytesX9 = 128 {$IFDEF SUPPORTS_DEPRECATED} deprecated {$IFDEF SUPPORTS_DEPRECATED_DETAILS} 'Use kDeflateNumFastBytesX9' {$ENDIF} {$ENDIF}; kDeflateNumFastBytesX9 = 128; kLzmaNumFastBytesX1 = 32; kLzmaNumFastBytesX7 = 64; kBZip2NumPassesX1 = 1; kBZip2NumPassesX7 = 2; kBZip2NumPassesX9 = 7; kBZip2DicSizeX1 = 100000; kBZip2DicSizeX3 = 500000; kBZip2DicSizeX5 = 900000; // HandlerOut.cpp const kLzmaAlgoX1 = 0; kLzmaAlgoX5 = 1; kLzmaDicSizeX1 = 1 shl 16; kLzmaDicSizeX3 = 1 shl 20; kLzmaDicSizeX5 = 1 shl 24; kLzmaDicSizeX7 = 1 shl 25; kLzmaDicSizeX9 = 1 shl 26; kLzmaFastBytesX1 = 32; kLzmaFastBytesX7 = 64; kPpmdMemSizeX1 = (1 shl 22); kPpmdMemSizeX5 = (1 shl 24); kPpmdMemSizeX7 = (1 shl 26); kPpmdMemSizeX9 = (192 shl 20); kPpmdOrderX1 = 4; kPpmdOrderX5 = 6; kPpmdOrderX7 = 16; kPpmdOrderX9 = 32; kDeflateFastBytesX1 = 32; kDeflateFastBytesX7 = 64; kDeflateFastBytesX9 = 128; {$IFDEF 7ZIP_LINKONREQUEST} type TCreateObjectFunc = function (ClsID: PGUID; IID: PGUID; out Obj): HRESULT; stdcall; TGetHandlerProperty2 = function (FormatIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetHandlerProperty = function (PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetMethodProperty = function (CodecIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; TGetNumberOfFormatsFunc = function (NumFormats: PCardinal): HRESULT; stdcall; TGetNumberOfMethodsFunc = function (NumMethods: PCardinal): HRESULT; stdcall; TSetLargePageMode = function: HRESULT; stdcall; var CreateObject: TCreateObjectFunc = nil; GetHandlerProperty2: TGetHandlerProperty2 = nil; GetHandlerProperty: TGetHandlerProperty = nil; GetMethodProperty: TGetMethodProperty = nil; GetNumberOfFormats: TGetNumberOfFormatsFunc = nil; GetNumberOfMethods: TGetNumberOfMethodsFunc = nil; SetLargePageMode: TSetLargePageMode = nil; {$ELSE ~7ZIP_LINKONREQUEST} function CreateObject(ClsID: PGUID; IID: PGUID; out Obj): HRESULT; stdcall; function GetHandlerProperty2(FormatIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetHandlerProperty(PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetMethodProperty(CodecIndex: Cardinal; PropID: TPropID; out Value: TPropVariant): HRESULT; stdcall; function GetNumberOfFormats(NumFormats: PCardinal): HRESULT; stdcall; function GetNumberOfMethods(NumMethods: PCardinal): HRESULT; stdcall; function SetLargePageMode: HRESULT; stdcall; {$ENDIF ~7ZIP_LINKONREQUEST} //DOM-IGNORE-END const SevenzipDefaultLibraryName = '7z.dll'; CreateObjectDefaultExportName = 'CreateObject'; GetHandlerProperty2DefaultExportName = 'GetHandlerProperty2'; GetHandlerPropertyDefaultExportName = 'GetHandlerProperty'; GetMethodPropertyDefaultExportName = 'GetMethodProperty'; GetNumberOfFormatsDefaultExportName = 'GetNumberOfFormats'; GetNumberOfMethodsDefaultExportName = 'GetNumberOfMethods'; SetLargePageModeDefaultExportName = 'SetLargePageMode'; {$IFDEF 7ZIP_LINKONREQUEST} var SevenzipLibraryName: string = SevenzipDefaultLibraryName; CreateObjectExportName: string = CreateObjectDefaultExportName; GetHandlerProperty2ExportName: string = GetHandlerProperty2DefaultExportName; GetHandlerPropertyExportName: string = GetHandlerPropertyDefaultExportName; GetMethodPropertyExportName: string = GetMethodPropertyDefaultExportName; GetNumberOfFormatsExportName: string = GetNumberOfFormatsDefaultExportName; GetNumberOfMethodsExportName: string = GetNumberOfMethodsDefaultExportName; SetLargePageModeExportName: string = SetLargePageModeDefaultExportName; SevenzipLibraryHandle: TModuleHandle = INVALID_MODULEHANDLE_VALUE; {$ENDIF 7ZIP_LINKONREQUEST} function Load7Zip: Boolean; function Is7ZipLoaded: Boolean; procedure Unload7Zip; {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL$'; Revision: '$Revision$'; Date: '$Date$'; LogPath: 'JCL\source\windows'; Extra: ''; Data: nil ); {$ENDIF UNITVERSIONING} implementation {$IFDEF 7ZIP_LINKDLL} function CreateObject; external SevenzipDefaultLibraryName name CreateObjectDefaultExportName; function GetHandlerProperty2; external SevenzipDefaultLibraryName name GetHandlerProperty2DefaultExportName; function GetHandlerProperty; external SevenzipDefaultLibraryName name GetHandlerPropertyDefaultExportName; function GetMethodProperty; external SevenzipDefaultLibraryName name GetMethodPropertyDefaultExportName; function GetNumberOfFormats; external SevenzipDefaultLibraryName name GetNumberOfFormatsDefaultExportName; function GetNumberOfMethods; external SevenzipDefaultLibraryName name GetNumberOfMethodsDefaultExportName; function SetLargePageMode; external SevenzipDefaultLibraryName name SetLargePageModeDefaultExportName; {$ENDIF 7ZIP_LINKDLL} function Load7Zip: Boolean; {$IFDEF 7ZIP_LINKONREQUEST} begin Result := SevenzipLibraryHandle <> INVALID_MODULEHANDLE_VALUE; if Result then Exit; Result := JclSysUtils.LoadModule(SevenzipLibraryHandle, SevenzipLibraryName); if Result then begin @CreateObject := GetModuleSymbol(SevenzipLibraryHandle, CreateObjectExportName); @GetHandlerProperty2 := GetModuleSymbol(SevenzipLibraryHandle, GetHandlerProperty2ExportName); @GetHandlerProperty := GetModuleSymbol(SevenzipLibraryHandle, GetHandlerPropertyExportName); @GetMethodProperty := GetModuleSymbol(SevenzipLibraryHandle, GetMethodPropertyExportName); @GetNumberOfFormats := GetModuleSymbol(SevenzipLibraryHandle, GetNumberOfFormatsExportName); @GetNumberOfMethods := GetModuleSymbol(SevenzipLibraryHandle, GetNumberOfMethodsExportName); @SetLargePageMode := GetModuleSymbol(SevenzipLibraryHandle, SetLargePageModeExportName); Result := Assigned(@CreateObject) and Assigned(@GetHandlerProperty2) and Assigned(@GetHandlerProperty) and Assigned(@GetMethodProperty) and Assigned(@GetNumberOfFormats) and Assigned(@GetNumberOfMethods) and Assigned(@SetLargePageMode); end; end; {$ELSE ~7ZIP_LINKONREQUEST} begin Result := True; end; {$ENDIF ~7ZIP_LINKONREQUEST} function Is7ZipLoaded: Boolean; begin {$IFDEF 7ZIP_LINKONREQUEST} Result := SevenzipLibraryHandle <> INVALID_MODULEHANDLE_VALUE; {$ELSE ~7ZIP_LINKONREQUEST} Result := True; {$ENDIF ~7ZIP_LINKONREQUEST} end; procedure Unload7Zip; begin {$IFDEF 7ZIP_LINKONREQUEST} @CreateObject := nil; @GetHandlerProperty2 := nil; @GetHandlerProperty := nil; @GetMethodProperty := nil; @GetNumberOfFormats := nil; @GetNumberOfMethods := nil; @SetLargePageMode := nil; JclSysUtils.UnloadModule(SevenzipLibraryHandle); {$ENDIF 7ZIP_LINKONREQUEST} end; {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); finalization UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/DCJclAlternative.pas�����������������������������������0000644�0001750�0000144�00000033251�12570573053�024037� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclAlternative; {$mode objfpc}{$H+} interface uses Classes, SysUtils, fgl, Windows, LazUTF8Classes; // JclBase.pas ----------------------------------------------------------------- type EJclError = class(Exception); TDynByteArray = array of Byte; TDynCardinalArray = array of Cardinal; type JclBase = class type PPInt64 = ^PInt64; end; // JclStreams.pas -------------------------------------------------------------- type TJclStream = TStream; TJclOnVolume = function(Index: Integer): TStream of object; TJclOnVolumeMaxSize = function(Index: Integer): Int64 of object; type { TJclDynamicSplitStream } TJclDynamicSplitStream = class(TJclStream) private FVolume: TStream; FOnVolume: TJclOnVolume; FOnVolumeMaxSize: TJclOnVolumeMaxSize; private function LoadVolume: Boolean; function GetVolume(Index: Integer): TStream; function GetVolumeMaxSize(Index: Integer): Int64; protected function GetSize: Int64; override; procedure SetSize(const NewSize: Int64); override; public constructor Create(ADummy: Boolean = False); function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Read(var Buffer; Count: LongInt): LongInt; override; function Write(const Buffer; Count: LongInt): LongInt; override; property OnVolume: TJclOnVolume read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclOnVolumeMaxSize read FOnVolumeMaxSize write FOnVolumeMaxSize; end; function StreamCopy(Source, Target: TStream): Int64; // JclDateTime.pas ------------------------------------------------------------- function LocalDateTimeToFileTime(DateTime: TDateTime): TFileTime; // JclFileUtils.pas ------------------------------------------------------------ const DirDelimiter = DirectorySeparator; DirSeparator = PathSeparator; type TJclOnAddDirectory = procedure(const Directory: String) of object; TJclOnAddFile = procedure(const Directory: String; const FileInfo: TSearchRec) of object; function PathAddSeparator(const Path: String): String; inline; function PathRemoveSeparator(const Path: String): String; inline; function PathGetRelativePath(const Base, Path: String): String; inline; function PathCanonicalize(const Path: WideString): WideString; function IsFileNameMatch(const FileName, Mask: WideString): Boolean; inline; procedure BuildFileList(const SourceFile: String; FileAttr: Integer; InnerList: TStrings; Dummy: Boolean); procedure EnumFiles(const Path: String; OnAddFile: TJclOnAddFile; ExcludeAttributes: Integer); procedure EnumDirectories(const Path: String; OnAddDirectory: TJclOnAddDirectory; DummyBoolean: Boolean; const DummyString: String; DummyPointer: Pointer); function FileDelete(const FileName: String): Boolean; inline; function FindUnusedFileName(const FileName, FileExt: String): String; function FileMove(const OldName, NewName: String; Replace: Boolean = False): Boolean; // JclSysUtils.pas ------------------------------------------------------------- type TModuleHandle = HINST; const INVALID_MODULEHANDLE_VALUE = TModuleHandle(0); type JclSysUtils = class class function LoadModule(var Module: TModuleHandle; FileName: String): Boolean; class procedure UnloadModule(var Module: TModuleHandle); end; function GUIDEquals(const GUID1, GUID2: TGUID): Boolean; inline; function GetModuleSymbol(Module: TModuleHandle; SymbolName: String): Pointer; inline; // JclStrings.pas -------------------------------------------------------------- procedure StrTokenToStrings(const Token: String; Separator: AnsiChar; var Strings: TStrings); // JclWideStrings.pas ---------------------------------------------------------- type TFPWideStrObjMap = specialize TFPGMap<WideString, TObject>; type { TJclWideStringList } TJclWideStringList = class(TFPWideStrObjMap) private FCaseSensitive: Boolean; private procedure SetCaseSensitive(AValue: Boolean); function CompareWideStringProc(Key1, Key2: Pointer): Integer; function CompareTextWideStringProc(Key1, Key2: Pointer): Integer; protected function Get(Index: Integer): WideString; function GetObject(Index: Integer): TObject; procedure Put(Index: Integer; const S: WideString); procedure PutObject(Index: Integer; AObject: TObject); public constructor Create; function AddObject(const S: WideString; AObject: TObject): Integer; property CaseSensitive: Boolean read FCaseSensitive write SetCaseSensitive; property Objects[Index: Integer]: TObject read GetObject write PutObject; property Strings[Index: Integer]: WideString read Get write Put; default; end; // Classes.pas ----------------------------------------------------------------- type TFileStream = TFileStreamUTF8; // SysUtils.pas ----------------------------------------------------------------- function FileExists(const FileName: String): Boolean; inline; // Windows.pas ----------------------------------------------------------------- function CreateFile(lpFileName: LPCSTR; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; inline; function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_LEVELS; lpFileInformation: Pointer): BOOL; inline; implementation uses LazFileUtils; function StreamCopy(Source, Target: TStream): Int64; begin Result:= Target.CopyFrom(Source, Source.Size); end; function LocalDateTimeToFileTime(DateTime: TDateTime): TFileTime; begin Int64(Result) := Round((Extended(DateTime) + 109205.0) * 864000000000.0); Windows.LocalFileTimeToFileTime(@Result, @Result); end; function PathAddSeparator(const Path: String): String; begin Result:= IncludeTrailingPathDelimiter(Path); end; function PathRemoveSeparator(const Path: String): String; begin Result:= ExcludeTrailingPathDelimiter(Path); end; function PathGetRelativePath(const Base, Path: String): String; begin Result:= ExtractRelativePath(Base, Path); end; function PathMatchSpecW(pszFile, pszSpec: LPCWSTR): BOOL; stdcall; external 'shlwapi.dll'; function PathCanonicalizeW(lpszDst, lpszSrc: LPCWSTR): BOOL; stdcall; external 'shlwapi.dll'; function PathCanonicalize(const Path: WideString): WideString; begin SetLength(Result, MAX_PATH); if PathCanonicalizeW(PWideChar(Result), PWideChar(Path)) then Result:= PWideChar(Result) else begin Result:= EmptyWideStr; end; end; function IsFileNameMatch(const FileName, Mask: WideString): Boolean; begin Result:= PathMatchSpecW(PWideChar(FileName), PWideChar(Mask)); end; procedure BuildFileList(const SourceFile: String; FileAttr: Integer; InnerList: TStrings; Dummy: Boolean); begin raise Exception.Create('Not implemented'); end; procedure EnumFiles(const Path: String; OnAddFile: TJclOnAddFile; ExcludeAttributes: Integer); begin raise Exception.Create('Not implemented'); end; procedure EnumDirectories(const Path: String; OnAddDirectory: TJclOnAddDirectory; DummyBoolean: Boolean; const DummyString: String; DummyPointer: Pointer); begin raise Exception.Create('Not implemented'); end; function FileDelete(const FileName: String): Boolean; begin Result:= DeleteFileW(PWideChar(UTF8Decode(FileName))); end; function FindUnusedFileName(const FileName, FileExt: String): String; var Counter: Int64 = 0; begin Result:= FileName + ExtensionSeparator + FileExt; if FileExists(Result) then repeat Inc(Counter); Result:= FileName + IntToStr(Counter) + ExtensionSeparator + FileExt; until not FileExists(Result); end; function FileMove(const OldName, NewName: String; Replace: Boolean): Boolean; const dwFlags: array[Boolean] of DWORD = (0, MOVEFILE_REPLACE_EXISTING); begin Result:= MoveFileExW(PWideChar(UTF8Decode(OldName)), PWideChar(UTF8Decode(NewName)), dwFlags[Replace] or MOVEFILE_COPY_ALLOWED); end; function GUIDEquals(const GUID1, GUID2: TGUID): Boolean; begin Result:= IsEqualGUID(GUID1, GUID2); end; class function JclSysUtils.LoadModule(var Module: TModuleHandle; FileName: String): Boolean; begin Module:= LoadLibraryW(PWideChar(UTF8Decode(FileName))); Result:= Module <> INVALID_MODULEHANDLE_VALUE; end; function GetModuleSymbol(Module: TModuleHandle; SymbolName: String): Pointer; begin Result:= GetProcAddress(Module, PAnsiChar(SymbolName)); end; class procedure JclSysUtils.UnloadModule(var Module: TModuleHandle); begin if Module <> INVALID_MODULEHANDLE_VALUE then begin FreeLibrary(Module); Module:= INVALID_MODULEHANDLE_VALUE; end; end; procedure StrTokenToStrings(const Token: String; Separator: AnsiChar; var Strings: TStrings); var Start: Integer = 1; Len, Finish: Integer; begin Len:= Length(Token); Strings.BeginUpdate; try Strings.Clear; for Finish:= 1 to Len - 1 do begin if Token[Finish] = Separator then begin Strings.Add(Copy(Token, Start, Finish - Start)); Start:= Finish + 1; end; end; if Start <= Len then begin Strings.Add(Copy(Token, Start, Len - Start + 1)); end; finally Strings.EndUpdate; end; end; function FileExists(const FileName: String): Boolean; begin Result:= FileExistsUTF8(FileName); end; function CreateFile(lpFileName: LPCSTR; dwDesiredAccess: DWORD; dwShareMode: DWORD; lpSecurityAttributes: LPSECURITY_ATTRIBUTES; dwCreationDisposition: DWORD; dwFlagsAndAttributes: DWORD; hTemplateFile: HANDLE): HANDLE; begin Result:= CreateFileW(PWideChar(UTF8Decode(lpFileName)), dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); end; function GetFileAttributesEx(lpFileName: LPCSTR; fInfoLevelId: TGET_FILEEX_INFO_LEVELS; lpFileInformation: Pointer): BOOL; begin Result:= GetFileAttributesExW(PWideChar(UTF8Decode(lpFileName)), fInfoLevelId, lpFileInformation); end; { TJclDynamicSplitStream } function TJclDynamicSplitStream.LoadVolume: Boolean; begin Result:= Assigned(FVolume); if not Result then begin FVolume:= GetVolume(0); GetVolumeMaxSize(0); Result := Assigned(FVolume); if Result then FVolume.Seek(0, soBeginning); end; end; function TJclDynamicSplitStream.GetVolume(Index: Integer): TStream; begin if Assigned(FOnVolume) then Result:= FOnVolume(Index) else begin Result:= nil; end; end; function TJclDynamicSplitStream.GetVolumeMaxSize(Index: Integer): Int64; begin if Assigned(FOnVolumeMaxSize) then Result:= FOnVolumeMaxSize(Index) else begin Result:= 0; end; end; function TJclDynamicSplitStream.GetSize: Int64; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Size; end; end; procedure TJclDynamicSplitStream.SetSize(const NewSize: Int64); begin if LoadVolume then FVolume.Size:= NewSize; end; constructor TJclDynamicSplitStream.Create(ADummy: Boolean); begin inherited Create; end; function TJclDynamicSplitStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Seek(Offset, Origin); end; end; function TJclDynamicSplitStream.Read(var Buffer; Count: LongInt): LongInt; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Read(Buffer, Count); end; end; function TJclDynamicSplitStream.Write(const Buffer; Count: LongInt): LongInt; begin if not LoadVolume then Result:= 0 else begin Result:= FVolume.Write(Buffer, Count); end; end; { TJclWideStringList } procedure TJclWideStringList.SetCaseSensitive(AValue: Boolean); begin if FCaseSensitive <> AValue then begin FCaseSensitive:= AValue; if FCaseSensitive then OnKeyPtrCompare := @CompareWideStringProc else begin OnKeyPtrCompare := @CompareTextWideStringProc; end; if Sorted then Sort; end; end; function TJclWideStringList.Get(Index: Integer): WideString; begin Result := Keys[Index]; end; function TJclWideStringList.GetObject(Index: Integer): TObject; begin Result := Data[Index]; end; procedure TJclWideStringList.Put(Index: Integer; const S: WideString); begin Keys[Index] := S; end; procedure TJclWideStringList.PutObject(Index: Integer; AObject: TObject); begin Data[Index] := AObject; end; function TJclWideStringList.CompareWideStringProc(Key1, Key2: Pointer): Integer; begin Result:= WideStringManager.CompareWideStringProc(WideString(Key1^), WideString(Key2^)); end; function TJclWideStringList.CompareTextWideStringProc(Key1, Key2: Pointer): Integer; begin Result:= WideStringManager.CompareTextWideStringProc(WideString(Key1^), WideString(Key2^)); end; constructor TJclWideStringList.Create; begin inherited Create; OnKeyPtrCompare := @CompareTextWideStringProc; end; function TJclWideStringList.AddObject(const S: WideString; AObject: TObject): Integer; begin Result:= inherited Add(S, AObject); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/DCJclResources.pas�������������������������������������0000644�0001750�0000144�00000016120�12512255642�023524� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclResources; {$mode delphi} interface resourcestring RsCompressionUnavailableProperty = 'This property is unavailable'; RsCompressionNoNestedArchive = 'Nested archive is not implemented'; RsCompression7zWindows = 'Windows'; RsCompressionDuplicate = 'Archive already contains the file %s'; RsCompressionUnsupportedMethod = 'Unsupported method'; RsCompressionDataError = 'Data error'; RsCompressionCRCError = 'CRC error'; RsCompressionUnknownError = 'Unknown error'; RsCompressionWriteNotSupported = 'Write operation is not supported'; RsCompressionCompressingError = 'This operation is not allowed during compression'; RsCompressionDecompressingError = 'This operation is not allowed during decompression'; RsCompressionReplaceError = 'Some volume could not be replaced while archive update'; RsCompression7zReturnError = '7-Zip: Error code (%.8x) - %s'; RsCompression7zUnknownValueType = '7-Zip: Property (%d) contains unknown value type (%d)'; RsCompression7zLoadError = '7-Zip: Cannot load library 7z.dll'; RsCompression7zOutArchiveError = '7-Zip: Unable to get out archive interface of %s class'; RsCompression7zInArchiveError = '7-Zip: Unable to get in archive interface of %s class'; RsCompressionZipName = 'ZIP format'; RsCompressionZipExtensions = '*.zip'; RsCompressionBZip2Name = 'BZIP2 format'; RsCompressionBZip2Extensions = '*.bz2;*.bzip2;*.tbz2;*.tbz'; RsCompressionBZip2SubExtensions = '.tbz2=.tar;.tbz=.tar'; RsCompressionRarName = 'RAR format'; RsCompressionRarExtensions = '*.rar;*.r00'; RsCompressionArjName = 'ARJ format'; RsCompressionArjExtensions = '*.arj'; RsCompressionZName = 'Z format'; RsCompressionZExtensions = '*.z;*.taz'; RsCompressionZSubExtensions = '.taz=.tar'; RsCompressionLzhName = 'LZH format'; RsCompressionLzhExtensions = '*.lzh;*.lha'; RsCompression7zName = '7z format'; RsCompression7zExtensions = '*.7z'; RsCompressionCabName = 'CAB format'; RsCompressionCabExtensions = '*.cab'; RsCompressionNsisName = 'NSIS format'; RsCompressionNsisExtensions = '*.nsis'; RsCompressionLzmaName = 'LZMA format'; RsCompressionLzmaExtensions = '*.lzma'; RsCompressionLzma86Name = 'LZMA86 format'; RsCompressionLzma86Extensions = '*.lzma86'; RsCompressionXzName = 'XZ format'; RsCompressionXzExtensions = '*.xz;*.txz'; RsCompressionXzSubExtensions = '.txz=.tar'; RsCompressionPpmdName = 'PPMD format'; RsCompressionPpmdExtensions = '*.ppmd'; RsCompressionTEName = 'TE format'; RsCompressionTEExtensions = '*.te'; RsCompressionUEFIcName = 'UEFIc format'; RsCompressionUEFIcExtensions = '*.scap'; RsCompressionUEFIsName = 'UEFIs format'; RsCompressionUEFIsExtensions = '*.uefif'; RsCompressionSquashFSName = 'SquashFS format'; RsCompressionSquashFSExtensions = '*.squashfs'; RsCompressionCramFSName = 'CramFS format'; RsCompressionCramFSExtensions = '*.cramfs'; RsCompressionApmName = 'APM format'; RsCompressionApmExtensions = '*.apm'; RsCompressionMsLZName = 'MsLZ format'; RsCompressionMsLZExtensions = ''; RsCompressionFlvName = 'FLV format'; RsCompressionFlvExtensions = '*.flv'; RsCompressionSwfName = 'SWF format'; RsCompressionSwfExtensions = '*.swf'; RsCompressionSwfcName = 'SWFC format'; RsCompressionSwfcExtensions = '*.swf'; RsCompressionNtfsName = 'NTFS format'; RsCompressionNtfsExtensions = '*.ntfs;*.img'; RsCompressionFatName = 'FAT format'; RsCompressionFatExtensions = '*.fat;*.img'; RsCompressionMbrName = 'MBR format'; RsCompressionMbrExtensions = '*.mbr'; RsCompressionVhdName = 'VHD format'; RsCompressionVhdExtensions = '*.vhd'; RsCompressionVhdSubExtensions = '.vhd=.mbr'; RsCompressionPeName = 'PE format'; RsCompressionPeExtensions = '*.exe;*.dll'; RsCompressionElfName = 'ELF format'; RsCompressionElfExtensions = ''; RsCompressionMachoName = 'MACH-O format'; RsCompressionMachoExtensions = ''; RsCompressionUdfName = 'UDF format'; RsCompressionUdfExtensions = '*.udf;*.iso;*.img'; RsCompressionXarName = 'XAR format'; RsCompressionXarExtensions = '*.xar;*.pkg'; RsCompressionMubName = 'MUB format'; RsCompressionMubExtensions = '*.mub'; RsCompressionHfsName = 'HFS format'; RsCompressionHfsExtensions = '*.hfs;*.hfsx'; RsCompressionDmgName = 'DMG format'; RsCompressionDmgExtensions = '*.dmg'; RsCompressionCompoundName = 'COMPOUND format'; RsCompressionCompoundExtensions = '*.msi;*.msp;*.doc;*.xls;*.ppt'; RsCompressionWimName = 'WIM format'; RsCompressionWimExtensions = '*.wim;*.swm'; RsCompressionIsoName = 'ISO format'; RsCompressionIsoExtensions = '*.iso;*.img'; RsCompressionChmName = 'CHM format'; RsCompressionChmExtensions = '*.chm;*.chw;*.chi;*.chq;*.hxs;*.hxi;*.hxr;*.hxq;*.hxw;*.lit'; RsCompressionSplitName = 'SPLIT format'; RsCompressionSplitExtensions = '*.001'; RsCompressionRpmName = 'RPM format'; RsCompressionRpmExtensions = '*.rpm'; RsCompressionDebName = 'DEB format'; RsCompressionDebExtensions = '*.deb'; RsCompressionCpioName = 'CPIO format'; RsCompressionCpioExtensions = '*.cpio'; RsCompressionTarName = 'TAR format'; RsCompressionTarExtensions = '*.tar'; RsCompressionGZipName = 'GZIP format'; RsCompressionGZipExtensions = '*.gz;*.gzip;*.tgz'; RsCompressionGZipSubExtensions = '.tgz=.tar'; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/DCJclCompression.pas�����������������������������������0000644�0001750�0000144�00000007110�12603032203�024035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCJclCompression; {$mode delphi} interface uses Classes, SysUtils, SevenZip; type { TSfxSevenzipOutStream } TSfxSevenzipOutStream = class(TInterfacedObject, ISequentialOutStream, IOutStream, IUnknown) private FStream: TStream; FSfxLength: Int64; FSfxModule: String; public constructor Create(AStream: TStream; const ASfxModule: String); destructor Destroy; override; // ISequentialOutStream function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IOutStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; implementation uses ActiveX, JwaWinError, LazUTF8Classes; { TSfxSevenzipOutStream } constructor TSfxSevenzipOutStream.Create(AStream: TStream; const ASfxModule: String); var SfxModule: TFileStreamUTF8; begin inherited Create; FStream := AStream; FSfxModule := ASfxModule; SfxModule:= TFileStreamUTF8.Create(FSfxModule, fmOpenRead or fmShareDenyNone); try FStream.Seek(0, soBeginning); FSfxLength := FStream.CopyFrom(SfxModule, SfxModule.Size); finally SfxModule.Free; end; end; destructor TSfxSevenzipOutStream.Destroy; begin FStream.Free; inherited Destroy; end; function TSfxSevenzipOutStream.Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; var Processed: Cardinal; begin if Assigned(FStream) then begin Result := S_OK; Processed := FStream.Write(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; end else Result := S_FALSE; end; function TSfxSevenzipOutStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; var NewPos: Int64; NewOffset: Int64; begin if Assigned(FStream) then begin Result := S_OK; if SeekOrigin <> STREAM_SEEK_SET then NewOffset := Offset else begin NewOffset := Offset + FSfxLength; end; // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(NewOffset, TSeekOrigin(SeekOrigin)); if NewPos < FSfxLength then Exit(E_INVALIDARG); if Assigned(NewPosition) then NewPosition^ := NewPos - FSfxLength; end else Result := S_FALSE; end; function TSfxSevenzipOutStream.SetSize(NewSize: Int64): HRESULT; stdcall; begin if Assigned(FStream) then begin Result := S_OK; FStream.Size := NewSize + FSfxLength; end else Result := S_FALSE; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/doublecmd.diff�����������������������������������������0000644�0001750�0000144�00000020001�12603033261�022756� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ jcl/source/common/JclCompression.pas | 67 +++++++++++++++++++++++++++++++----- jcl/source/windows/sevenzip.pas | 8 ++--- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/jcl/source/common/JclCompression.pas b/jcl/source/common/JclCompression.pas index e5e6a2f..5934880 100644 --- a/jcl/source/common/JclCompression.pas +++ b/jcl/source/common/JclCompression.pas @@ -44,8 +44,7 @@ unit JclCompression; -{$I jcl.inc} -{$I crossplatform.inc} +{$mode delphi} interface @@ -75,7 +74,10 @@ uses ZLib, {$ENDIF ZLIB_RTL} {$ENDIF ~HAS_UNITSCOPE} - zlibh, bzip2, JclWideStrings, JclBase, JclStreams; + {$IFNDEF FPC} + zlibh, bzip2, + {$ENDIF FPC} + DCJclAlternative; // Must be after Classes, SysUtils, Windows {$IFDEF RTL230_UP} {$HPPEMIT '// To avoid ambiguity with System::Zlib::z_stream_s we force using ours'} @@ -180,6 +182,9 @@ uses **************************************************************************************************} type + +{$IFNDEF FPC} + TJclCompressionStream = class(TJclStream) private FOnProgress: TNotifyEvent; @@ -562,8 +567,12 @@ type function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; +{$ENDIF FPC} + EJclCompressionError = class(EJclError); +{$IFNDEF FPC} + // callback type used in helper functions below: TJclCompressStreamProgressCallback = procedure(FileSize, Position: Int64; UserData: Pointer) of object; @@ -586,6 +595,8 @@ procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); +{$ENDIF FPC} + // archive ancestor classes {$IFDEF MSWINDOWS} type @@ -595,6 +606,7 @@ type var AVolumeMaxSize: Int64) of object; TJclCompressionProgressEvent = procedure(Sender: TObject; const Value, MaxValue: Int64) of object; TJclCompressionRatioEvent = procedure(Sender: TObject; const InSize, OutSize: Int64) of object; + TJclCompressionPasswordEvent = procedure(Sender: TObject; var Password: WideString) of object; TJclCompressionItemProperty = (ipPackedName, ipPackedSize, ipPackedExtension, ipFileSize, ipFileName, ipAttributes, ipCreationTime, ipLastAccessTime, @@ -770,6 +782,7 @@ type FOnRatio: TJclCompressionRatioEvent; FOnVolume: TJclCompressionVolumeEvent; FOnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent; + FOnPassword: TJclCompressionPasswordEvent; FPassword: WideString; FVolumeIndex: Integer; FVolumeIndexOffset: Integer; @@ -804,6 +817,9 @@ type function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public + PropNames: array of WideString; + PropValues: array of TPropVariant; + public class function MultipleItemContainer: Boolean; virtual; class function VolumeAccess: TJclStreamAccess; virtual; function ItemAccess: TJclStreamAccess; virtual; @@ -855,6 +871,7 @@ type property OnVolume: TJclCompressionVolumeEvent read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent read FOnVolumeMaxSize write FOnVolumeMaxSize; + property OnPassword: TJclCompressionPasswordEvent read FOnPassword write FOnPassword; property Password: WideString read FPassword write FPassword; property SupportsNestedArchive: Boolean read GetSupportsNestedArchive; @@ -1193,6 +1210,7 @@ function GetArchiveFormats: TJclCompressionArchiveFormats; type TJclSevenzipCompressArchive = class(TJclCompressArchive, IInterface) private + FSfxModule: String; FOutArchive: IOutArchive; protected function GetItemClass: TJclCompressionItemClass; override; @@ -1203,6 +1221,7 @@ type destructor Destroy; override; procedure Compress; override; property OutArchive: IOutArchive read GetOutArchive; + property SfxModule: String read FSfxModule write FSfxModule; end; // file formats @@ -2206,8 +2225,7 @@ const implementation uses - JclUnicode, // WideSameText - JclDateTime, JclFileUtils, JclResources, JclStrings, JclSysUtils; + DCJclResources, DCJclCompression; const JclDefaultBufferSize = 131072; // 128k @@ -2218,6 +2236,8 @@ var GlobalStreamFormats: TObject; GlobalArchiveFormats: TObject; +{$IFNDEF FPC} + //=== { TJclCompressionStream } ============================================== constructor TJclCompressionStream.Create(AStream: TStream); @@ -3743,6 +3763,8 @@ begin end; end; +{$ENDIF FPC} + {$IFDEF MSWINDOWS} function OpenFileStream(const FileName: TFileName; StreamAccess: TJclStreamAccess): TStream; @@ -3887,7 +3909,7 @@ end; function TJclCompressionItem.GetNestedArchiveName: WideString; var ParentArchiveExtension, ArchiveFileName, ArchiveExtension: WideString; - ExtensionMap: TJclWideStrings; + ExtensionMap: TStrings; begin if ipPackedName in ValidProperties then Result := PackedName @@ -3914,7 +3936,7 @@ begin else if ArchiveFileName <> '' then begin - ExtensionMap := TJclWideStringList.Create; + ExtensionMap := TStringList.Create; try ExtensionMap.Delimiter := ';'; ExtensionMap.DelimitedText := Archive.ArchiveSubExtensions; @@ -6117,6 +6139,8 @@ end; procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); var + Index: Integer; + JclArchive: TJclCompressionArchive; PropertySetter: Sevenzip.ISetProperties; InArchive, OutArchive: Boolean; Unused: IInterface; @@ -6254,9 +6278,18 @@ begin else AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'F'); end; + + JclArchive := AJclArchive as TJclCompressionArchive; + for Index := Low(JclArchive.PropNames) to High(JclArchive.PropNames) do + begin + AddProperty(PWideChar(JclArchive.PropNames[Index]), JclArchive.PropValues[Index]); + end; end; if Length(PropNames) > 0 then + begin SevenZipCheck(PropertySetter.SetProperties(@PropNames[0], @PropValues[0], Length(PropNames))); + SetLength(JclArchive.PropNames, 0); SetLength(JclArchive.PropValues, 0); + end; end; end; @@ -6692,7 +6725,11 @@ begin SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; - OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); + if Length(FSfxModule) > 0 then + OutStream := TSfxSevenzipOutStream.Create(SplitStream, FSfxModule) + else begin + OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); + end; UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); @@ -7422,7 +7459,14 @@ function TJclSevenzipOpenCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then + begin + if Length(FArchive.FPassword) = 0 then + begin + if Assigned(FArchive.OnPassword) then + FArchive.OnPassword(FArchive, FArchive.FPassword); + end; password^ := SysAllocString(PWideChar(FArchive.Password)); + end; Result := S_OK; end; @@ -7456,7 +7500,14 @@ function TJclSevenzipExtractCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then + begin + if Length(FArchive.FPassword) = 0 then + begin + if Assigned(FArchive.OnPassword) then + FArchive.OnPassword(FArchive, FArchive.FPassword); + end; password^ := SysAllocString(PWideChar(FArchive.Password)); + end; Result := S_OK; end; diff --git a/jcl/source/windows/sevenzip.pas b/jcl/source/windows/sevenzip.pas index 06fb94f..0853a85 100644 --- a/jcl/source/windows/sevenzip.pas +++ b/jcl/source/windows/sevenzip.pas @@ -53,10 +53,11 @@ unit sevenzip; +{$mode delphi} + interface -{$I jcl.inc} -{$I windowsonly.inc} +{$DEFINE 7ZIP_LINKONREQUEST} uses {$IFDEF HAS_UNITSCOPE} @@ -67,8 +68,7 @@ uses {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} - JclBase, - JclSysUtils; + DCJclAlternative; //DOM-IGNORE-BEGIN �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/common/������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�021511� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/jcl/common/JclCompression.pas������������������������������0000644�0001750�0000144�00001117724�12603033261�025141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{**************************************************************************************************} { } { Project JEDI Code Library (JCL) } { } { The contents of this file are 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/MPL/ } { } { 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. } { } { The Original Code is JclCompression.pas. } { } { The Initial Developer of the Original Code is Matthias Thoma. } { All Rights Reserved. } { } { Contributors: } { Olivier Sannier (obones) } { Florent Ouchet (outchy) } { Jan Goyvaerts (jgsoft) } { Uwe Schuster (uschuster) } { } {**************************************************************************************************} { } { Alternatively, the contents of this file may be used under the terms of the GNU Lesser General } { Public License (the "LGPL License"), in which case the provisions of the LGPL License are } { applicable instead of those above. If you wish to allow use of your version of this file only } { under the terms of the LGPL License and not to allow others to use your version of this file } { under the MPL, indicate your decision by deleting the provisions above and replace them with the } { notice and other provisions required by the LGPL License. If you do not delete the provisions } { above, a recipient may use your version of this file under either the MPL or the LGPL License. } { } { For more information about the LGPL: } { http://www.gnu.org/copyleft/lesser.html } { } {**************************************************************************************************} { } { Last modified: $Date:: $ } { Revision: $Rev:: $ } { Author: $Author:: $ } { } {**************************************************************************************************} unit JclCompression; {$mode delphi} interface uses {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} {$IFDEF HAS_UNIT_LIBC} Libc, {$ENDIF HAS_UNIT_LIBC} {$IFDEF HAS_UNITSCOPE} {$IFDEF MSWINDOWS} Winapi.Windows, Sevenzip, Winapi.ActiveX, {$ENDIF MSWINDOWS} System.Types, System.SysUtils, System.Classes, System.Contnrs, {$IFDEF ZLIB_RTL} System.ZLib, {$ENDIF ZLIB_RTL} {$ELSE ~HAS_UNITSCOPE} {$IFDEF MSWINDOWS} Windows, Sevenzip, ActiveX, {$ENDIF MSWINDOWS} Types, SysUtils, Classes, Contnrs, {$IFDEF ZLIB_RTL} ZLib, {$ENDIF ZLIB_RTL} {$ENDIF ~HAS_UNITSCOPE} {$IFNDEF FPC} zlibh, bzip2, {$ENDIF FPC} DCJclAlternative; // Must be after Classes, SysUtils, Windows {$IFDEF RTL230_UP} {$HPPEMIT '// To avoid ambiguity with System::Zlib::z_stream_s we force using ours'} {$HPPEMIT '#define z_stream_s Zlibh::z_stream_s'} {$ENDIF RTL230_UP} {************************************************************************************************** Class hierarchy TJclCompressionStream | |-- TJclCompressStream | | | |-- TJclZLibCompressStream handled by zlib http://www.zlib.net/ | |-- TJclBZIP2CompressStream handled by bzip2 http://www.bzip.net/ | |-- TJclGZIPCompressStream handled by zlib http://www.zlib.net/ + JCL | |-- TJclDecompressStream | |-- TJclZLibDecompressStream handled by zlib http://www.zlib.net/ |-- TBZIP2DecompressStream handled by bzip2 http://www.bzip.net/ |-- TGZIPDecompressStream handled by zlib http://www.zlib.net/ + JCL TJclCompressionArchive | |-- TJclCompressArchive | | | |-- TJclSevenzipCompressArchive | | | |-- TJclZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBZ2CompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJcl7zCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTarCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclGZipCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXzCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfcCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclWimCompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDecompressArchive | | | |-- TJclSevenZipDecompressArchive | | | |-- TJclZipDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBZ2DecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclRarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclArjDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclZDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzhDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJcl7zDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCabDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclNsisDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzmaDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclLzma86DecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclPeDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclElfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMachoDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUdfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMubDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclHfsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDmgDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCompoundDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclWimDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclIsoDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclBkfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclChmDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSplitDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclRpmDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclDebDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCpioDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTarDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclGZipDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclXzDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclNtfsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclFatDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMbrDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclVhdDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclMslzDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclFlvDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSwfcDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclAPMDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclPpmdDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclTEDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUEFIcDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUEFIsDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclSquashFSDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclCramFSDecompressArchive handled by sevenzip http://sevenzip.sourceforge.net/ | |-- TJclUpdateArchive | |-- TJclSevenzipUpdateArchive | |-- TJclZipUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclBZ2UpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJcl7zUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclTarUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclGZipUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclXzUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ |-- TJclSwfcUpdateArchive handled by sevenzip http://sevenzip.sourceforge.net/ **************************************************************************************************} type {$IFNDEF FPC} TJclCompressionStream = class(TJclStream) private FOnProgress: TNotifyEvent; FBuffer: Pointer; FBufferSize: Cardinal; FStream: TStream; protected function SetBufferSize(Size: Cardinal): Cardinal; virtual; procedure Progress(Sender: TObject); dynamic; property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; public class function StreamExtensions: string; virtual; class function StreamName: string; virtual; class function StreamSubExtensions: string; virtual; constructor Create(AStream: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; procedure Reset; virtual; end; TJclCompressionStreamClass = class of TJclCompressionStream; TJclCompressStream = class(TJclCompressionStream) public function Flush: Integer; dynamic; abstract; constructor Create(Destination: TStream); end; TJclCompressStreamClass = class of TJclCompressStream; TJclDecompressStream = class(TJclCompressionStream) private FOwnsStream: Boolean; public constructor Create(Source: TStream; AOwnsStream: Boolean = False); destructor Destroy; override; end; TJclDecompressStreamClass = class of TJclDecompressStream; TJclCompressionStreamFormats = class private FCompressFormats: TList; FDecompressFormats: TList; protected function GetCompressFormatCount: Integer; function GetCompressFormat(Index: Integer): TJclCompressStreamClass; function GetDecompressFormatCount: Integer; function GetDecompressFormat(Index: Integer): TJclDecompressStreamClass; public constructor Create; destructor Destroy; override; procedure RegisterFormat(AClass: TJclCompressionStreamClass); procedure UnregisterFormat(AClass: TJclCompressionStreamClass); function FindCompressFormat(const AFileName: TFileName): TJclCompressStreamClass; function FindDecompressFormat(const AFileName: TFileName): TJclDecompressStreamClass; property CompressFormatCount: Integer read GetCompressFormatCount; property CompressFormats[Index: Integer]: TJclCompressStreamClass read GetCompressFormat; property DecompressFormatCount: Integer read GetDecompressFormatCount; property DecompressFormats[Index: Integer]: TJclDecompressStreamClass read GetDecompressFormat; end; // retreive a singleton list containing registered stream classes function GetStreamFormats: TJclCompressionStreamFormats; // ZIP Support type TJclCompressionLevel = Integer; TJclZLibCompressStream = class(TJclCompressStream) private FWindowBits: Integer; FMemLevel: Integer; FMethod: Integer; FStrategy: Integer; FDeflateInitialized: Boolean; FCompressionLevel: Integer; protected ZLibRecord: TZStreamRec; procedure SetCompressionLevel(Value: Integer); procedure SetStrategy(Value: Integer); procedure SetMemLevel(Value: Integer); procedure SetMethod(Value: Integer); procedure SetWindowBits(Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; CompressionLevel: TJclCompressionLevel = -1); destructor Destroy; override; function Flush: Integer; override; procedure Reset; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Write(const Buffer; Count: Longint): Longint; override; property WindowBits: Integer read FWindowBits write SetWindowBits; property MemLevel: Integer read FMemLevel write SetMemLevel; property Method: Integer read FMethod write SetMethod; property Strategy: Integer read FStrategy write SetStrategy; property CompressionLevel: Integer read FCompressionLevel write SetCompressionLevel; end; {$IFDEF ZLIB_RTL} const DEF_WBITS = 15; {$EXTERNALSYM DEF_WBITS} DEF_MEM_LEVEL = 8; {$EXTERNALSYM DEF_MEM_LEVEL} type PBytef = PByte; {$EXTERNALSYM PBytef} {$ENDIF ZLIB_RTL} type TJclZLibDecompressStream = class(TJclDecompressStream) private FWindowBits: Integer; FInflateInitialized: Boolean; protected ZLibRecord: TZStreamRec; procedure SetWindowBits(Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; WindowBits: Integer = DEF_WBITS; AOwnsStream: Boolean = False); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property WindowBits: Integer read FWindowBits write SetWindowBits; end; // GZIP Support //=== { GZIP helpers } ======================================================= type TJclGZIPHeader = packed record ID1: Byte; ID2: Byte; CompressionMethod: Byte; Flags: Byte; ModifiedTime: Cardinal; ExtraFlags: Byte; OS: Byte; end; TJclGZIPFooter = packed record DataCRC32: Cardinal; DataSize: Cardinal; end; const // ID1 and ID2 fields JCL_GZIP_ID1 = $1F; // value for the ID1 field JCL_GZIP_ID2 = $8B; // value for the ID2 field // Compression Model field JCL_GZIP_CM_DEFLATE = 8; // Zlib classic // Flags field : extra fields for the header JCL_GZIP_FLAG_TEXT = $01; // file is probably ASCII text JCL_GZIP_FLAG_CRC = $02; // a CRC16 for the header is present JCL_GZIP_FLAG_EXTRA = $04; // extra fields present JCL_GZIP_FLAG_NAME = $08; // original file name is present JCL_GZIP_FLAG_COMMENT = $10; // comment is present // ExtraFlags field : compression level JCL_GZIP_EFLAG_MAX = 2; // compressor used maximum compression JCL_GZIP_EFLAG_FAST = 4; // compressor used fastest compression // OS field : file system JCL_GZIP_OS_FAT = 0; // FAT filesystem (MS-DOS, OS/2, NT/Win32) JCL_GZIP_OS_AMIGA = 1; // Amiga JCL_GZIP_OS_VMS = 2; // VMS (or OpenVMS) JCL_GZIP_OS_UNIX = 3; // Unix JCL_GZIP_OS_VM = 4; // VM/CMS JCL_GZIP_OS_ATARI = 5; // Atari TOS JCL_GZIP_OS_HPFS = 6; // HPFS filesystem (OS/2, NT) JCL_GZIP_OS_MAC = 7; // Macintosh JCL_GZIP_OS_Z = 8; // Z-System JCL_GZIP_OS_CPM = 9; // CP/M JCL_GZIP_OS_TOPS = 10; // TOPS-20 JCL_GZIP_OS_NTFS = 11; // NTFS filesystem (NT) JCL_GZIP_OS_QDOS = 12; // QDOS JCL_GZIP_OS_ACORN = 13; // Acorn RISCOS JCL_GZIP_OS_UNKNOWN = 255; // unknown type TJclGZIPSubFieldHeader = packed record SI1: Byte; SI2: Byte; Len: Word; end; // constants to identify sub fields in the extra field // source: http://www.gzip.org/format.txt const JCL_GZIP_X_AC1 = $41; // AC Acorn RISC OS/BBC MOS file type information JCL_GZIP_X_AC2 = $43; JCL_GZIP_X_Ap1 = $41; // Ap Apollo file type information JCL_GZIP_X_Ap2 = $70; JCL_GZIP_X_cp1 = $63; // cp file compressed by cpio JCL_GZIP_X_cp2 = $70; JCL_GZIP_X_GS1 = $1D; // GS gzsig JCL_GZIP_X_GS2 = $53; JCL_GZIP_X_KN1 = $4B; // KN KeyNote assertion (RFC 2704) JCL_GZIP_X_KN2 = $4E; JCL_GZIP_X_Mc1 = $4D; // Mc Macintosh info (Type and Creator values) JCL_GZIP_X_Mc2 = $63; JCL_GZIP_X_RO1 = $52; // RO Acorn Risc OS file type information JCL_GZIP_X_RO2 = $4F; type TJclGZIPFlag = (gfDataIsText, gfHeaderCRC16, gfExtraField, gfOriginalFileName, gfComment); TJclGZIPFlags = set of TJclGZIPFlag; TJclGZIPFatSystem = (gfsFat, gfsAmiga, gfsVMS, gfsUnix, gfsVM, gfsAtari, gfsHPFS, gfsMac, gfsZ, gfsCPM, gfsTOPS, gfsNTFS, gfsQDOS, gfsAcorn, gfsOther, gfsUnknown); // Format is described in RFC 1952, http://www.faqs.org/rfcs/rfc1952.html TJclGZIPCompressionStream = class(TJclCompressStream) private FFlags: TJclGZIPFlags; FUnixTime: Cardinal; FAutoSetTime: Boolean; FCompressionLevel: TJclCompressionLevel; FFatSystem: TJclGZIPFatSystem; FExtraField: string; FOriginalFileName: TFileName; FComment: string; FZLibStream: TJclZLibCompressStream; FOriginalSize: Cardinal; FDataCRC32: Cardinal; FHeaderWritten: Boolean; FFooterWritten: Boolean; // flag so we only write the footer once! (NEW 2007) procedure WriteHeader; function GetDosTime: TDateTime; function GetUnixTime: Cardinal; procedure SetDosTime(const Value: TDateTime); procedure SetUnixTime(Value: Cardinal); procedure ZLibStreamProgress(Sender: TObject); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; CompressionLevel: TJclCompressionLevel = -1); destructor Destroy; override; function Write(const Buffer; Count: Longint): Longint; override; procedure Reset; override; // IMPORTANT: In order to get a valid GZip file, Flush MUST be called after // the last call to Write. function Flush: Integer; override; property Flags: TJclGZIPFlags read FFlags write FFlags; property DosTime: TDateTime read GetDosTime write SetDosTime; property UnixTime: Cardinal read GetUnixTime write SetUnixTime; property AutoSetTime: Boolean read FAutoSetTime write FAutoSetTime; property FatSystem: TJclGZIPFatSystem read FFatSystem write FFatSystem; property ExtraField: string read FExtraField write FExtraField; // Note: In order for most decompressors to work, the original file name // must be given or they would display an empty file name in their list. // This does not affect the decompression stream below as it simply reads // the value and does not work with it property OriginalFileName: TFileName read FOriginalFileName write FOriginalFileName; property Comment: string read FComment write FComment; end; TJclGZIPDecompressionStream = class(TJclDecompressStream) private FHeader: TJclGZIPHeader; FFooter: TJclGZIPFooter; FCompressedDataStream: TJclDelegatedStream; FZLibStream: TJclZLibDecompressStream; FOriginalFileName: TFileName; FComment: string; FExtraField: string; FComputedHeaderCRC16: Word; FStoredHeaderCRC16: Word; FComputedDataCRC32: Cardinal; FCompressedDataSize: Int64; FDataSize: Int64; FDataStarted: Boolean; FDataEnded: Boolean; FAutoCheckDataCRC32: Boolean; function GetCompressedDataSize: Int64; function GetComputedDataCRC32: Cardinal; function GetDosTime: TDateTime; function GetFatSystem: TJclGZIPFatSystem; function GetFlags: TJclGZIPFlags; function GetOriginalDataSize: Cardinal; function GetStoredDataCRC32: Cardinal; function ReadCompressedData(Sender: TObject; var Buffer; Count: Longint): Longint; procedure ZLibStreamProgress(Sender: TObject); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; CheckHeaderCRC: Boolean = True; AOwnsStream: Boolean = False); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; property ComputedHeaderCRC16: Word read FComputedHeaderCRC16; property StoredHeaderCRC16: Word read FStoredHeaderCRC16; property ExtraField: string read FExtraField; property OriginalFileName: TFileName read FOriginalFileName; property Comment: string read FComment; property Flags: TJclGZIPFlags read GetFlags; property CompressionLevel: Byte read FHeader.ExtraFlags; property FatSystem: TJclGZIPFatSystem read GetFatSystem; property UnixTime: Cardinal read FHeader.ModifiedTime; property DosTime: TDateTime read GetDosTime; property ComputedDataCRC32: Cardinal read GetComputedDataCRC32; property StoredDataCRC32: Cardinal read GetStoredDataCRC32; property AutoCheckDataCRC32: Boolean read FAutoCheckDataCRC32 write FAutoCheckDataCRC32; property CompressedDataSize: Int64 read GetCompressedDataSize; property OriginalDataSize: Cardinal read GetOriginalDataSize; end; // BZIP2 Support TJclBZIP2CompressionStream = class(TJclCompressStream) private FDeflateInitialized: Boolean; FCompressionLevel: Integer; protected BZLibRecord: bz_stream; procedure SetCompressionLevel(const Value: Integer); public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Destination: TStream; ACompressionLevel: TJclCompressionLevel = 9); destructor Destroy; override; function Flush: Integer; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function Write(const Buffer; Count: Longint): Longint; override; property CompressionLevel: Integer read FCompressionLevel write SetCompressionLevel; end; TJclBZIP2DecompressionStream = class(TJclDecompressStream) private FInflateInitialized: Boolean; protected BZLibRecord: bz_stream; public // stream description class function StreamExtensions: string; override; class function StreamName: string; override; class function StreamSubExtensions: string; override; constructor Create(Source: TStream; AOwnsStream: Boolean = False); overload; destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; {$ENDIF FPC} EJclCompressionError = class(EJclError); {$IFNDEF FPC} // callback type used in helper functions below: TJclCompressStreamProgressCallback = procedure(FileSize, Position: Int64; UserData: Pointer) of object; {helper functions - one liners by wpostma} function GZipFile(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; function UnGZipFile(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; procedure GZipStream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); procedure UnGZipStream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); function BZip2File(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; function UnBZip2File(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil): Boolean; procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); {$ENDIF FPC} // archive ancestor classes {$IFDEF MSWINDOWS} type TJclCompressionVolumeEvent = procedure(Sender: TObject; Index: Integer; var AFileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean) of object; TJclCompressionVolumeMaxSizeEvent = procedure(Sender: TObject; Index: Integer; var AVolumeMaxSize: Int64) of object; TJclCompressionProgressEvent = procedure(Sender: TObject; const Value, MaxValue: Int64) of object; TJclCompressionRatioEvent = procedure(Sender: TObject; const InSize, OutSize: Int64) of object; TJclCompressionPasswordEvent = procedure(Sender: TObject; var Password: WideString) of object; TJclCompressionItemProperty = (ipPackedName, ipPackedSize, ipPackedExtension, ipFileSize, ipFileName, ipAttributes, ipCreationTime, ipLastAccessTime, ipLastWriteTime, ipComment, ipHostOS, ipHostFS, ipUser, ipGroup, ipCRC, ipStream, ipMethod, ipEncrypted); TJclCompressionItemProperties = set of TJclCompressionItemProperty; TJclCompressionItemKind = (ikFile, ikDirectory); TJclCompressionOperationSuccess = (osNoOperation, osOK, osUnsupportedMethod, osDataError, osCRCError, osUnknownError); TJclCompressionDuplicateCheck = (dcNone, dcExisting, dcAll); TJclCompressionDuplicateAction = (daOverwrite, daError, daSkip); TJclCompressionArchive = class; TJclCompressionItem = class private FArchive: TJclCompressionArchive; // source or destination FFileName: TFileName; FStream: TStream; FOwnsStream: Boolean; // miscellaneous FValidProperties: TJclCompressionItemProperties; FModifiedProperties: TJclCompressionItemProperties; FPackedIndex: Cardinal; FSelected: Boolean; FOperationSuccess: TJclCompressionOperationSuccess; // file properties FPackedName: WideString; FPackedSize: Int64; FFileSize: Int64; FAttributes: Cardinal; FPackedExtension: WideString; FCreationTime: TFileTime; FLastAccessTime: TFileTime; FLastWriteTime: TFileTime; FComment: WideString; FHostOS: WideString; FHostFS: WideString; FUser: WideString; FGroup: WideString; FCRC: Cardinal; FMethod: WideString; FEncrypted: Boolean; function WideChangeFileExt(const AFileName, AExtension: WideString): WideString; function WideExtractFileExt(const AFileName: WideString): WideString; function WideExtractFileName(const AFileName: WideString): WideString; protected // property checkers procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); virtual; abstract; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); virtual; abstract; function ValidateExtraction(Index: Integer): Boolean; virtual; function DeleteOutputFile: Boolean; function UpdateFileTimes: Boolean; // property getters function GetAttributes: Cardinal; function GetComment: WideString; function GetCRC: Cardinal; function GetCreationTime: TFileTime; function GetDirectory: Boolean; function GetEncrypted: Boolean; function GetFileName: TFileName; function GetFileSize: Int64; function GetGroup: WideString; function GetHostFS: WideString; function GetHostOS: WideString; function GetItemKind: TJclCompressionItemKind; function GetLastAccessTime: TFileTime; function GetLastWriteTime: TFileTime; function GetMethod: WideString; function GetNestedArchiveName: WideString; virtual; function GetNestedArchiveStream: TStream; virtual; function GetPackedExtension: WideString; function GetPackedName: WideString; function GetPackedSize: Int64; function GetStream: TStream; function GetUser: WideString; // property setters procedure SetAttributes(Value: Cardinal); procedure SetComment(const Value: WideString); procedure SetCRC(Value: Cardinal); procedure SetCreationTime(const Value: TFileTime); procedure SetDirectory(Value: Boolean); procedure SetEncrypted(Value: Boolean); procedure SetFileName(const Value: TFileName); procedure SetFileSize(const Value: Int64); procedure SetGroup(const Value: WideString); procedure SetHostFS(const Value: WideString); procedure SetHostOS(const Value: WideString); procedure SetLastAccessTime(const Value: TFileTime); procedure SetLastWriteTime(const Value: TFileTime); procedure SetMethod(const Value: WideString); procedure SetPackedExtension(const Value: WideString); procedure SetPackedName(const Value: WideString); procedure SetPackedSize(const Value: Int64); procedure SetStream(const Value: TStream); procedure SetUser(const Value: WideString); public constructor Create(AArchive: TJclCompressionArchive); destructor Destroy; override; // release stream if owned and created from file name procedure ReleaseStream; // properties in archive property Attributes: Cardinal read GetAttributes write SetAttributes; property Comment: WideString read GetComment write SetComment; property CRC: Cardinal read GetCRC write SetCRC; property CreationTime: TFileTime read GetCreationTime write SetCreationTime; property Directory: Boolean read GetDirectory write SetDirectory; property Encrypted: Boolean read GetEncrypted write SetEncrypted; property FileSize: Int64 read GetFileSize write SetFileSize; property Group: WideString read GetGroup write SetGroup; property HostOS: WideString read GetHostOS write SetHostOS; property HostFS: WideString read GetHostFS write SetHostFS; property Kind: TJclCompressionItemKind read GetItemKind; property LastAccessTime: TFileTime read GetLastAccessTime write SetLastAccessTime; property LastWriteTime: TFileTime read GetLastWriteTime write SetLastWriteTime; property Method: WideString read GetMethod write SetMethod; property PackedExtension: WideString read GetPackedExtension write SetPackedExtension; property PackedName: WideString read GetPackedName write SetPackedName; property PackedSize: Int64 read GetPackedSize write SetPackedSize; property User: WideString read GetUser write SetUser; // source or destination property FileName: TFileName read GetFileName write SetFileName; property OwnsStream: Boolean read FOwnsStream write FOwnsStream; property Stream: TStream read GetStream write SetStream; property NestedArchiveStream: TStream read GetNestedArchiveStream; property NestedArchiveName: WideString read GetNestedArchiveName; // miscellaneous property Archive: TJclCompressionArchive read FArchive; property OperationSuccess: TJclCompressionOperationSuccess read FOperationSuccess write FOperationSuccess; property ValidProperties: TJclCompressionItemProperties read FValidProperties; property ModifiedProperties: TJclCompressionItemProperties read FModifiedProperties write FModifiedProperties; property PackedIndex: Cardinal read FPackedIndex; property Selected: Boolean read FSelected write FSelected; end; TJclCompressionItemClass = class of TJclCompressionItem; TJclCompressionVolume = class protected FFileName: TFileName; FTmpFileName: TFileName; FStream: TStream; FTmpStream: TStream; FOwnsStream: Boolean; FOwnsTmpStream: Boolean; FVolumeMaxSize: Int64; public constructor Create(AStream, ATmpStream: TStream; AOwnsStream, AOwnsTmpStream: Boolean; AFileName, ATmpFileName: TFileName; AVolumeMaxSize: Int64); destructor Destroy; override; procedure ReleaseStreams; property FileName: TFileName read FFileName; property TmpFileName: TFileName read FTmpFileName; property Stream: TStream read FStream; property TmpStream: TStream read FTmpStream; property OwnsStream: Boolean read FOwnsStream; property OwnsTmpStream: Boolean read FOwnsTmpStream; property VolumeMaxSize: Int64 read FVolumeMaxSize; end; TJclStreamAccess = (saCreate, saReadOnly, saReadOnlyDenyNone, saWriteOnly, saReadWrite); { TJclCompressionArchive is not ref-counted } TJclCompressionArchive = class(TInterfacedObject, IInterface) private FOnProgress: TJclCompressionProgressEvent; FOnRatio: TJclCompressionRatioEvent; FOnVolume: TJclCompressionVolumeEvent; FOnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent; FOnPassword: TJclCompressionPasswordEvent; FPassword: WideString; FVolumeIndex: Integer; FVolumeIndexOffset: Integer; FVolumeMaxSize: Int64; FVolumeFileNameMask: TFileName; FProgressMax: Int64; FCancelCurrentOperation: Boolean; FCurrentItemIndex: Integer; function GetItemCount: Integer; function GetItem(Index: Integer): TJclCompressionItem; function GetVolumeCount: Integer; function GetVolume(Index: Integer): TJclCompressionVolume; protected FVolumes: TObjectList; FItems: TObjectList; procedure InitializeArchiveProperties; virtual; function InternalOpenStream(const FileName: TFileName): TStream; function TranslateItemPath(const ItemPath, OldBase, NewBase: WideString): WideString; function DoProgress(const Value, MaxValue: Int64): Boolean; function DoRatio(const InSize, OutSize: Int64): Boolean; function NeedStream(Index: Integer): TStream; function NeedStreamMaxSize(Index: Integer): Int64; procedure ReleaseVolumes; function GetItemClass: TJclCompressionItemClass; virtual; abstract; function GetSupportsNestedArchive: Boolean; virtual; public { IInterface } // function QueryInterface(const IID: TGUID; out Obj): HRESULT; stdcall; function _AddRef: Integer; stdcall; function _Release: Integer; stdcall; public PropNames: array of WideString; PropValues: array of TPropVariant; public class function MultipleItemContainer: Boolean; virtual; class function VolumeAccess: TJclStreamAccess; virtual; function ItemAccess: TJclStreamAccess; virtual; class function ArchiveExtensions: string; virtual; class function ArchiveName: string; virtual; class function ArchiveSubExtensions: string; virtual; class function ArchiveSignature: TDynByteArray; virtual; constructor Create(Volume0: TStream; AVolumeMaxSize: Int64 = 0; AOwnVolume: Boolean = False); overload; virtual; constructor Create(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0; VolumeMask: Boolean = False); overload; virtual; // if VolumeMask is true then VolumeFileName represents a mask to get volume file names // "myfile%d.zip" "myfile.zip.%.3d" ... destructor Destroy; override; function AddVolume(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0): Integer; overload; virtual; function AddVolume(const VolumeFileName, TmpVolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0): Integer; overload; virtual; function AddVolume(VolumeStream: TStream; AVolumeMaxSize: Int64 = 0; AOwnsStream: Boolean = False): Integer; overload; virtual; function AddVolume(VolumeStream, TmpVolumeStream: TStream; AVolumeMaxSize: Int64 = 0; AOwnsStream: Boolean = False; AOwnsTmpStream: Boolean = False): Integer; overload; virtual; // miscellaneous procedure ClearVolumes; procedure ClearItems; procedure CheckOperationSuccess; procedure ClearOperationSuccess; procedure SelectAll; procedure UnselectAll; property ItemCount: Integer read GetItemCount; property Items[Index: Integer]: TJclCompressionItem read GetItem; property VolumeCount: Integer read GetVolumeCount; property Volumes[Index: Integer]: TJclCompressionVolume read GetVolume; property VolumeMaxSize: Int64 read FVolumeMaxSize; property VolumeFileNameMask: TFileName read FVolumeFileNameMask; property VolumeIndexOffset: Integer read FVolumeIndexOffset write FVolumeIndexOffset; property CurrentItemIndex: Integer read FCurrentItemIndex; // valid during OnProgress property OnProgress: TJclCompressionProgressEvent read FOnProgress write FOnProgress; property OnRatio: TJclCompressionRatioEvent read FOnRatio write FOnRatio; // volume events property OnVolume: TJclCompressionVolumeEvent read FOnVolume write FOnVolume; property OnVolumeMaxSize: TJclCompressionVolumeMaxSizeEvent read FOnVolumeMaxSize write FOnVolumeMaxSize; property OnPassword: TJclCompressionPasswordEvent read FOnPassword write FOnPassword; property Password: WideString read FPassword write FPassword; property SupportsNestedArchive: Boolean read GetSupportsNestedArchive; property CancelCurrentOperation: Boolean read FCancelCurrentOperation write FCancelCurrentOperation; end; TJclCompressionArchiveClass = class of TJclCompressionArchive; IJclArchiveNumberOfThreads = interface ['{9CFAB801-E68E-4A51-AC49-277B297F1141}'] function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); property NumberOfThreads: Cardinal read GetNumberOfThreads write SetNumberOfThreads; end; IJclArchiveCompressionLevel = interface ['{A6A2F55F-2860-4E44-BC20-8C5D3E322AB6}'] function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); property CompressionLevel: Cardinal read GetCompressionLevel write SetCompressionLevel; property CompressionLevelMax: Cardinal read GetCompressionLevelMax; property CompressionLevelMin: Cardinal read GetCompressionLevelMin; end; TJclCompressionMethod = (cmCopy, cmDeflate, cmDeflate64, cmBZip2, cmLZMA, cmLZMA2, cmPPMd); TJclCompressionMethods = set of TJclCompressionMethod; IJclArchiveCompressionMethod = interface ['{2818F8E8-7D5F-4C8C-865E-9BA4512BB766}'] function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); property CompressionMethod: TJclCompressionMethod read GetCompressionMethod write SetCompressionMethod; property SupportedCompressionMethods: TJclCompressionMethods read GetSupportedCompressionMethods; end; TJclEncryptionMethod = (emNone, emAES128, emAES192, emAES256, emZipCrypto); TJclEncryptionMethods = set of TJclEncryptionMethod; IJclArchiveEncryptionMethod = interface ['{643485B6-66A1-41C9-A13B-0A8453E9D0C9}'] function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); property EncryptionMethod: TJclEncryptionMethod read GetEncryptionMethod write SetEncryptionMethod; property SupportedEncryptionMethods: TJclEncryptionMethods read GetSupportedEncryptionMethods; end; IJclArchiveDictionarySize = interface ['{D3949834-9F3B-49BC-8403-FE3CE5FDCF35}'] function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); property DictionarySize: Cardinal read GetDictionarySize write SetDictionarySize; end; IJclArchiveNumberOfPasses = interface ['{C61B2814-50CE-4C3C-84A5-BACF8A57E3BC}'] function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); property NumberOfPasses: Cardinal read GetNumberOfPasses write SetNumberOfPasses; end; IJclArchiveRemoveSfxBlock = interface ['{852D050D-734E-4610-902A-8FB845DB32A9}'] function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); property RemoveSfxBlock: Boolean read GetRemoveSfxBlock write SetRemoveSfxBlock; end; IJclArchiveCompressHeader = interface ['{22C62A3B-A58E-4F88-9D3F-08586B542639}'] function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); property CompressHeader: Boolean read GetCompressHeader write SetCompressHeader; property CompressHeaderFull: Boolean read GetCompressHeaderFull write SetCompressHeaderFull; end; IJclArchiveEncryptHeader = interface ['{7DBA20A8-48A1-4CA2-B9AC-41C219A09A4A}'] function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); property EncryptHeader: Boolean read GetEncryptHeader write SetEncryptHeader; end; IJclArchiveSaveCreationDateTime = interface ['{8B212BF9-C13F-4582-A4FA-A40E538EFF65}'] function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); property SaveCreationDateTime: Boolean read GetSaveCreationDateTime write SetSaveCreationDateTime; end; IJclArchiveSaveLastAccessDateTime = interface ['{1A4B2906-9DD2-4584-B7A3-3639DA92AFC5}'] function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); property SaveLastAccessDateTime: Boolean read GetSaveLastAccessDateTime write SetSaveLastAccessDateTime; end; IJclArchiveSaveLastWriteDateTime = interface ['{0C1729DC-35E8-43D4-8ECA-54F20CDFF87A}'] function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); property SaveLastWriteDateTime: Boolean read GetSaveLastWriteDateTime write SetSaveLastWriteDateTime; end; IJclArchiveAlgorithm = interface ['{53965F1F-24CC-4548-B9E8-5AE2EB7F142D}'] function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); property Algorithm: Cardinal read GetAlgorithm write SetAlgorithm; property SupportedAlgorithms: TDynCardinalArray read GetSupportedAlgorithms; end; IJclArchiveSolid = interface ['{6902C54C-1577-422C-B18B-E27953A28661}'] function GetSolidBlockSize: Int64; function GetSolidExtension: Boolean; procedure SetSolidBlockSize(const Value: Int64); procedure SetSolidExtension(Value: Boolean); property SolidBlockSize: Int64 read GetSolidBlockSize write SetSolidBlockSize; property SolidExtension: Boolean read GetSolidExtension write SetSolidExtension; end; TJclCompressItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; end; TJclCompressArchive = class(TJclCompressionArchive, IInterface) private FBaseRelName: WideString; FBaseDirName: string; FAddFilesInDir: Boolean; FDuplicateAction: TJclCompressionDuplicateAction; FDuplicateCheck: TJclCompressionDuplicateCheck; procedure InternalAddFile(const Directory: string; const FileInfo: TSearchRec); procedure InternalAddDirectory(const Directory: string); protected FCompressing: Boolean; FPackedNames: TJclWideStringList; procedure CheckNotCompressing; function AddFileCheckDuplicate(NewItem: TJclCompressionItem): Integer; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; destructor Destroy; override; function AddDirectory(const PackedName: WideString; const DirName: string = ''; RecurseIntoDir: Boolean = False; AddFilesInDir: Boolean = False): Integer; overload; virtual; function AddFile(const PackedName: WideString; const FileName: TFileName): Integer; overload; virtual; function AddFile(const PackedName: WideString; AStream: TStream; AOwnsStream: Boolean = False): Integer; overload; virtual; procedure Compress; virtual; property DuplicateCheck: TJclCompressionDuplicateCheck read FDuplicateCheck write FDuplicateCheck; property DuplicateAction: TJclCompressionDuplicateAction read FDuplicateAction write FDuplicateAction; end; TJclCompressArchiveClass = class of TJclCompressArchive; TJclCompressArchiveClassArray = array of TJclCompressArchiveClass; TJclDecompressItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; function ValidateExtraction(Index: Integer): Boolean; override; end; // return False not to extract this file // assign your own FileName, Stream or AOwnsStream to override default one TJclCompressionExtractEvent = function (Sender: TObject; Index: Integer; var FileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean of object; TJclDecompressArchive = class(TJclCompressionArchive, IInterface) private FOnExtract: TJclCompressionExtractEvent; FAutoCreateSubDir: Boolean; protected FDecompressing: Boolean; FListing: Boolean; FDestinationDir: string; FExtractingAllIndex: Integer; procedure CheckNotDecompressing; procedure CheckListing; function ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; virtual; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; procedure ListFiles; virtual; abstract; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; property OnExtract: TJclCompressionExtractEvent read FOnExtract write FOnExtract; property DestinationDir: string read FDestinationDir; property AutoCreateSubDir: Boolean read FAutoCreateSubDir; end; TJclDecompressArchiveClass = class of TJclDecompressArchive; TJclDecompressArchiveClassArray = array of TJclDecompressArchiveClass; TJclUpdateItem = class(TJclCompressionItem) protected procedure CheckGetProperty(AProperty: TJclCompressionItemProperty); override; procedure CheckSetProperty(AProperty: TJclCompressionItemProperty); override; function ValidateExtraction(Index: Integer): Boolean; override; end; TJclUpdateArchive = class(TJclCompressArchive, IInterface) private FOnExtract: TJclCompressionExtractEvent; FAutoCreateSubDir: Boolean; protected FDecompressing: Boolean; FListing: Boolean; FDestinationDir: string; FExtractingAllIndex: Integer; procedure CheckNotDecompressing; procedure CheckListing; procedure InitializeArchiveProperties; override; function ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; virtual; public class function VolumeAccess: TJclStreamAccess; override; function ItemAccess: TJclStreamAccess; override; procedure ListFiles; virtual; abstract; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); virtual; procedure DeleteItem(Index: Integer); virtual; abstract; procedure RemoveItem(const PackedName: WideString); virtual; abstract; property OnExtract: TJclCompressionExtractEvent read FOnExtract write FOnExtract; property DestinationDir: string read FDestinationDir; property AutoCreateSubDir: Boolean read FAutoCreateSubDir; end; // ancestor class for all archives that update files in-place (not creating a copy of the volumes) TJclInPlaceUpdateArchive = class(TJclUpdateArchive, IInterface) end; // called when tmp volumes will replace volumes after out-of-place update TJclCompressionReplaceEvent = function (Sender: TObject; const SrcFileName, DestFileName: TFileName; var SrcStream, DestStream: TStream; var OwnsSrcStream, OwnsDestStream: Boolean): Boolean of object; // ancestor class for all archives that update files out-of-place (by creating a copy of the volumes) TJclOutOfPlaceUpdateArchive = class(TJclUpdateArchive, IInterface) private FReplaceVolumes: Boolean; FTmpVolumeIndex: Integer; FOnReplace: TJclCompressionReplaceEvent; FOnTmpVolume: TJclCompressionVolumeEvent; protected function NeedTmpStream(Index: Integer): TStream; procedure InitializeArchiveProperties; override; function InternalOpenTmpStream(const FileName: TFileName): TStream; public class function TmpVolumeAccess: TJclStreamAccess; virtual; procedure Compress; override; property ReplaceVolumes: Boolean read FReplaceVolumes write FReplaceVolumes; property OnReplace: TJclCompressionReplaceEvent read FOnReplace write FOnReplace; property OnTmpVolume: TJclCompressionVolumeEvent read FOnTmpVolume write FOnTmpVolume; end; TJclUpdateArchiveClass = class of TJclUpdateArchive; TJclUpdateArchiveClassArray = array of TJclUpdateArchiveClass; // registered archive formats type TJclCompressionArchiveFormats = class private FCompressFormats: TList; FDecompressFormats: TList; FUpdateFormats: TList; protected function GetCompressFormatCount: Integer; function GetCompressFormat(Index: Integer): TJclCompressArchiveClass; function GetDecompressFormatCount: Integer; function GetDecompressFormat(Index: Integer): TJclDecompressArchiveClass; function GetUpdateFormatCount: Integer; function GetUpdateFormat(Index: Integer): TJclUpdateArchiveClass; public constructor Create; destructor Destroy; override; procedure RegisterFormat(AClass: TJclCompressionArchiveClass); procedure UnregisterFormat(AClass: TJclCompressionArchiveClass); // archive signatures do not give significant results for ISO/UDF (signature is not located at stream start) // need to find a generic way to match all signature before publishing the code //function SignatureMatches(Format: TJclCompressionArchiveClass; ArchiveStream: TStream; var Buffer: TDynByteArray): Boolean; function FindCompressFormat(const AFileName: TFileName): TJclCompressArchiveClass; //function FindDecompressFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclDecompressArchiveClass; overload; function FindDecompressFormat(const AFileName: TFileName): TJclDecompressArchiveClass; //overload; //function FindUpdateFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclUpdateArchiveClass; overload; function FindUpdateFormat(const AFileName: TFileName): TJclUpdateArchiveClass; //overload; function FindCompressFormats(const AFileName: TFileName): TJclCompressArchiveClassArray; function FindDecompressFormats(const AFileName: TFileName): TJclDecompressArchiveClassArray; function FindUpdateFormats(const AFileName: TFileName): TJclUpdateArchiveClassArray; property CompressFormatCount: Integer read GetCompressFormatCount; property CompressFormats[Index: Integer]: TJclCompressArchiveClass read GetCompressFormat; property DecompressFormatCount: Integer read GetDecompressFormatCount; property DecompressFormats[Index: Integer]: TJclDecompressArchiveClass read GetDecompressFormat; property UpdateFormatCount: Integer read GetUpdateFormatCount; property UpdateFormats[Index: Integer]: TJclUpdateArchiveClass read GetUpdateFormat; end; // retreive a singleton list containing archive formats function GetArchiveFormats: TJclCompressionArchiveFormats; // sevenzip classes for compression type TJclSevenzipCompressArchive = class(TJclCompressArchive, IInterface) private FSfxModule: String; FOutArchive: IOutArchive; protected function GetItemClass: TJclCompressionItemClass; override; function GetOutArchive: IOutArchive; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure Compress; override; property OutArchive: IOutArchive read GetOutArchive; property SfxModule: String read FSfxModule write FSfxModule; end; // file formats TJclZipCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveCompressionMethod, IJclArchiveEncryptionMethod, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IJclArchiveAlgorithm, IInterface) private FNumberOfThreads: Cardinal; FEncryptionMethod: TJclEncryptionMethod; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressionMethod: TJclCompressionMethod; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptionMethod } function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgoritm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclBZ2CompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); end; TJcl7zCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfThreads, IJclArchiveRemoveSfxBlock, IJclArchiveCompressHeader, IJclArchiveEncryptHeader, IJclArchiveSaveCreationDateTime, IJclArchiveSaveLastAccessDateTime, IJclArchiveSaveLastWriteDateTime, IJclArchiveSolid, IInterface) private FNumberOfThreads: Cardinal; FEncryptHeader: Boolean; FRemoveSfxBlock: Boolean; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressHeader: Boolean; FCompressHeaderFull: Boolean; FSaveLastAccessDateTime: Boolean; FSaveCreationDateTime: Boolean; FSaveLastWriteDateTime: Boolean; FSolidBlockSize: Int64; FSolidExtension: Boolean; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptHeader } function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); { IJclArchiveRemoveSfxBlock } function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressHeader } function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); { IJclArchiveSaveLastAccessDateTime } function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); { IJclArchiveSaveCreationDateTime } function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); { IJclArchiveSaveLastWriteDateTime } function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); { IJclArchiveSolid } function GetSolidBlockSize: Int64; function GetSolidExtension: Boolean; procedure SetSolidBlockSize(const Value: Int64); procedure SetSolidExtension(Value: Boolean); end; TJclTarCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionLevel, IJclArchiveNumberOfPasses, IJclArchiveAlgorithm, IInterface) private FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgorithm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclXzCompressArchive = class(TJclSevenzipCompressArchive, IJclArchiveCompressionMethod, IInterface) private FCompressionMethod: TJclCompressionMethod; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); end; TJclSwfcCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclWimCompressArchive = class(TJclSevenzipCompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // sevenzip classes for decompression type TJclSevenzipDecompressItem = class(TJclDecompressItem) protected function GetNestedArchiveStream: TStream; override; end; TJclSevenzipDecompressArchive = class(TJclDecompressArchive, IInterface) private FInArchive: IInArchive; FInArchiveGetStream: IInArchiveGetStream; FOpened: Boolean; protected procedure OpenArchive; function GetInArchive: IInArchive; function GetInArchiveGetStream: IInArchiveGetStream; function GetItemClass: TJclCompressionItemClass; override; function GetSupportsNestedArchive: Boolean; override; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure ListFiles; override; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; property InArchive: IInArchive read GetInArchive; property InArchiveGetStream: IInArchiveGetStream read GetInArchiveGetStream; end; // file formats TJclZipDecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclBZ2DecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclRarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclArjDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclZDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzhDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJcl7zDecompressArchive = class(TJclSevenzipDecompressArchive, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); end; TJclCabDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclNsisDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzmaDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclLzma86DecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclPeDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclElfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMachoDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUdfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclXarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMubDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclHfsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclDmgDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCompoundDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclWimDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclIsoDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // not implemented in 9.04 {TJclBkfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) protected function GetCLSID: TGUID; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; end;} TJclChmDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSplitDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclRpmDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclDebDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCpioDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclTarDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclXzDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclNtfsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclFatDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMbrDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclVhdDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; end; TJclMslzDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclFlvDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSwfDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSwfcDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclAPMDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclPpmdDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclTEDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUEFIcDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclUEFIsDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclSquashFSDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclCramFSDecompressArchive = class(TJclSevenzipDecompressArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; //sevenzip classes for updates (read and write) type TJclSevenzipUpdateArchive = class(TJclOutOfPlaceUpdateArchive, IInterface) private FInArchive: IInArchive; FOutArchive: IOutArchive; FOpened: Boolean; protected procedure OpenArchive; function GetInArchive: IInArchive; function GetItemClass: TJclCompressionItemClass; override; function GetOutArchive: IOutArchive; public class function ArchiveCLSID: TGUID; virtual; class function ArchiveSignature: TDynByteArray; override; destructor Destroy; override; procedure ListFiles; override; procedure ExtractSelected(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure ExtractAll(const ADestinationDir: string = ''; AAutoCreateSubDir: Boolean = True); override; procedure Compress; override; procedure DeleteItem(Index: Integer); override; procedure RemoveItem(const PackedName: WideString); override; property InArchive: IInArchive read GetInArchive; property OutArchive: IOutArchive read GetOutArchive; end; TJclZipUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveCompressionMethod, IJclArchiveEncryptionMethod, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IJclArchiveAlgorithm, IInterface) private FNumberOfThreads: Cardinal; FEncryptionMethod: TJclEncryptionMethod; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressionMethod: TJclCompressionMethod; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptionMethod } function GetEncryptionMethod: TJclEncryptionMethod; function GetSupportedEncryptionMethods: TJclEncryptionMethods; procedure SetEncryptionMethod(Value: TJclEncryptionMethod); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgoritm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclBZ2UpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfPasses, IJclArchiveNumberOfThreads, IInterface) private FNumberOfThreads: Cardinal; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); end; TJcl7zUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveDictionarySize, IJclArchiveNumberOfThreads, IJclArchiveRemoveSfxBlock, IJclArchiveCompressHeader, IJclArchiveEncryptHeader, IJclArchiveSaveCreationDateTime, IJclArchiveSaveLastAccessDateTime, IJclArchiveSaveLastWriteDateTime, IInterface) private FNumberOfThreads: Cardinal; FEncryptHeader: Boolean; FRemoveSfxBlock: Boolean; FDictionarySize: Cardinal; FCompressionLevel: Cardinal; FCompressHeader: Boolean; FCompressHeaderFull: Boolean; FSaveLastAccessDateTime: Boolean; FSaveCreationDateTime: Boolean; FSaveLastWriteDateTime: Boolean; protected procedure InitializeArchiveProperties; override; public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveNumberOfThreads } function GetNumberOfThreads: Cardinal; procedure SetNumberOfThreads(Value: Cardinal); { IJclArchiveEncryptHeader } function GetEncryptHeader: Boolean; procedure SetEncryptHeader(Value: Boolean); { IJclArchiveRemoveSfxBlock } function GetRemoveSfxBlock: Boolean; procedure SetRemoveSfxBlock(Value: Boolean); { IJclArchiveDictionarySize } function GetDictionarySize: Cardinal; procedure SetDictionarySize(Value: Cardinal); { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveCompressHeader } function GetCompressHeader: Boolean; function GetCompressHeaderFull: Boolean; procedure SetCompressHeader(Value: Boolean); procedure SetCompressHeaderFull(Value: Boolean); { IJclArchiveSaveLastAccessDateTime } function GetSaveLastAccessDateTime: Boolean; procedure SetSaveLastAccessDateTime(Value: Boolean); { IJclArchiveSaveCreationDateTime } function GetSaveCreationDateTime: Boolean; procedure SetSaveCreationDateTime(Value: Boolean); { IJclArchiveSaveLastWriteDateTime } function GetSaveLastWriteDateTime: Boolean; procedure SetSaveLastWriteDateTime(Value: Boolean); end; TJclTarUpdateArchive = class(TJclSevenzipUpdateArchive, IInterface) public class function MultipleItemContainer: Boolean; override; class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; TJclGZipUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionLevel, IJclArchiveNumberOfPasses, IJclArchiveAlgorithm, IInterface) private FCompressionLevel: Cardinal; FNumberOfPasses: Cardinal; FAlgorithm: Cardinal; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionLevel } function GetCompressionLevel: Cardinal; function GetCompressionLevelMax: Cardinal; function GetCompressionLevelMin: Cardinal; procedure SetCompressionLevel(Value: Cardinal); { IJclArchiveNumberOfPasses } function GetNumberOfPasses: Cardinal; procedure SetNumberOfPasses(Value: Cardinal); { IJclArchiveAlgorithm } function GetAlgorithm: Cardinal; function GetSupportedAlgorithms: TDynCardinalArray; procedure SetAlgorithm(Value: Cardinal); end; TJclXzUpdateArchive = class(TJclSevenzipUpdateArchive, IJclArchiveCompressionMethod, IInterface) private FCompressionMethod: TJclCompressionMethod; protected procedure InitializeArchiveProperties; override; public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveSubExtensions: string; override; class function ArchiveCLSID: TGUID; override; { IJclArchiveCompressionMethod } function GetCompressionMethod: TJclCompressionMethod; function GetSupportedCompressionMethods: TJclCompressionMethods; procedure SetCompressionMethod(Value: TJclCompressionMethod); end; TJclSwfcUpdateArchive = class(TJclSevenzipUpdateArchive, IInterface) public class function ArchiveExtensions: string; override; class function ArchiveName: string; override; class function ArchiveCLSID: TGUID; override; end; // internal sevenzip stuff, do not use it directly type TJclSevenzipOutStream = class(TInterfacedObject, ISequentialOutStream, IOutStream, IUnknown) private FArchive: TJclCompressionArchive; FItemIndex: Integer; FStream: TStream; FOwnsStream: Boolean; FTruncateOnRelease: Boolean; FMaximumPosition: Int64; procedure NeedStream; procedure ReleaseStream; public constructor Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); overload; constructor Create(AStream: TStream; AOwnsStream: Boolean; ATruncateOnRelease: Boolean); overload; destructor Destroy; override; // ISequentialOutStream function Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IOutStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; function SetSize(NewSize: Int64): HRESULT; stdcall; end; TJclSevenzipNestedInStream = class(TJclStream) private FInStream: IInStream; protected procedure SetSize(const NewSize: Int64); override; public constructor Create(AInStream: IInStream); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; TJclSevenzipInStream = class(TInterfacedObject, ISequentialInStream, IInStream, IStreamGetSize, IUnknown) private FArchive: TJclCompressionArchive; FItemIndex: Integer; FStream: TStream; FOwnsStream: Boolean; procedure NeedStream; procedure ReleaseStream; public constructor Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); overload; constructor Create(AStream: TStream; AOwnsStream: Boolean); overload; destructor Destroy; override; // ISequentialInStream function Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; stdcall; // IInStream function Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; stdcall; // IStreamGetSize function GetSize(Size: PInt64): HRESULT; stdcall; end; TJclSevenzipOpenCallback = class(TInterfacedObject, IArchiveOpenCallback, ICryptoGetTextPassword, IUnknown) private FArchive: TJclCompressionArchive; public constructor Create(AArchive: TJclCompressionArchive); // IArchiveOpenCallback function SetCompleted(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; function SetTotal(Files: PInt64; Bytes: PInt64): HRESULT; stdcall; // ICryptoGetTextPassword function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; end; TJclSevenzipExtractCallback = class(TInterfacedObject, IUnknown, IProgress, IArchiveExtractCallback, ICryptoGetTextPassword, ICompressProgressInfo) private FArchive: TJclCompressionArchive; FLastStream: Cardinal; public constructor Create(AArchive: TJclCompressionArchive); // IArchiveExtractCallback function GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; stdcall; function PrepareOperation(askExtractMode: Cardinal): HRESULT; stdcall; function SetOperationResult(resultEOperationResult: Integer): HRESULT; stdcall; // IProgress function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; function SetTotal(Total: Int64): HRESULT; stdcall; // ICryptoGetTextPassword function CryptoGetTextPassword(password: PBStr): HRESULT; stdcall; // ICompressProgressInfo function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; TJclSevenzipUpdateCallback = class(TInterfacedObject, IUnknown, IProgress, IArchiveUpdateCallback, IArchiveUpdateCallback2, ICryptoGetTextPassword2, ICompressProgressInfo) private FArchive: TJclCompressionArchive; FLastStream: Cardinal; public constructor Create(AArchive: TJclCompressionArchive); // IProgress function SetCompleted(CompleteValue: PInt64): HRESULT; stdcall; function SetTotal(Total: Int64): HRESULT; stdcall; // IArchiveUpdateCallback function GetProperty(Index: Cardinal; PropID: Cardinal; out Value: tagPROPVARIANT): HRESULT; stdcall; function GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; stdcall; function GetUpdateItemInfo(Index: Cardinal; NewData: PInteger; NewProperties: PInteger; IndexInArchive: PCardinal): HRESULT; stdcall; function SetOperationResult(OperationResult: Integer): HRESULT; stdcall; // IArchiveUpdateCallback2 function GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; stdcall; function GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; stdcall; // ICryptoGetTextPassword2 function CryptoGetTextPassword2(PasswordIsDefined: PInteger; Password: PBStr): HRESULT; stdcall; // ICompressProgressInfo function SetRatioInfo(InSize: PInt64; OutSize: PInt64): HRESULT; stdcall; end; type TWideStringSetter = procedure (const Value: WideString) of object; TCardinalSetter = procedure (Value: Cardinal) of object; TInt64Setter = procedure (const Value: Int64) of object; TFileTimeSetter = procedure (const Value: TFileTime) of object; TBoolSetter = procedure (Value: Boolean) of object; procedure SevenzipCheck(Value: HRESULT); function Get7zWideStringProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TWideStringSetter): Boolean; function Get7zCardinalProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TCardinalSetter): Boolean; function Get7zInt64Prop(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TInt64Setter): Boolean; function Get7zFileTimeProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TFileTimeSetter): Boolean; function Get7zBoolProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TBoolSetter): Boolean; procedure Load7zFileAttribute(AInArchive: IInArchive; ItemIndex: Integer; AItem: TJclCompressionItem); procedure GetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil; OnArchiveRatio: TJclCompressionRatioEvent = nil): Boolean; overload; function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64 = 0; Password: String = ''; OnArchiveProgress: TJclCompressionProgressEvent = nil; OnArchiveRatio: TJclCompressionRatioEvent = nil): Boolean; overload; {$ENDIF MSWINDOWS} {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL$'; Revision: '$Revision$'; Date: '$Date$'; LogPath: 'JCL\source\common'; Extra: ''; Data: nil ); {$ENDIF UNITVERSIONING} implementation uses DCJclResources, DCJclCompression; const JclDefaultBufferSize = 131072; // 128k var // using TObject prevents default linking of TJclCompressionStreamFormats // and TJclCompressionArchiveFormats and all classes GlobalStreamFormats: TObject; GlobalArchiveFormats: TObject; {$IFNDEF FPC} //=== { TJclCompressionStream } ============================================== constructor TJclCompressionStream.Create(AStream: TStream); begin inherited Create; FBuffer := nil; SetBufferSize(JclDefaultBufferSize); FStream := AStream; end; destructor TJclCompressionStream.Destroy; begin SetBufferSize(0); inherited Destroy; end; function TJclCompressionStream.Read(var Buffer; Count: Longint): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionReadNotSupported); end; function TJclCompressionStream.Write(const Buffer; Count: Longint): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; function TJclCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin raise EJclCompressionError.CreateRes(@RsCompressionSeekNotSupported); end; procedure TJclCompressionStream.Reset; begin raise EJclCompressionError.CreateRes(@RsCompressionResetNotSupported); end; function TJclCompressionStream.SetBufferSize(Size: Cardinal): Cardinal; begin if FBuffer <> nil then FreeMem(FBuffer, FBufferSize); FBufferSize := Size; if FBufferSize > 0 then GetMem(FBuffer, FBufferSize) else FBuffer := nil; Result := FBufferSize; end; class function TJclCompressionStream.StreamExtensions: string; begin Result := ''; end; class function TJclCompressionStream.StreamName: string; begin Result := ''; end; class function TJclCompressionStream.StreamSubExtensions: string; begin Result := ''; end; procedure TJclCompressionStream.Progress(Sender: TObject); begin if Assigned(FOnProgress) then FOnProgress(Sender); end; //=== { TJclCompressStream } ================================================= constructor TJclCompressStream.Create(Destination: TStream); begin inherited Create(Destination); end; //=== { TJclDecompressStream } =============================================== constructor TJclDecompressStream.Create(Source: TStream; AOwnsStream: Boolean); begin inherited Create(Source); FOwnsStream := AOwnsStream; end; destructor TJclDecompressStream.Destroy; begin if FOwnsStream then FStream.Free; inherited Destroy; end; //=== { TJclCompressionStreamFormats } ======================================= constructor TJclCompressionStreamFormats.Create; begin inherited Create; FCompressFormats := TList.Create; FDecompressFormats := TList.Create; RegisterFormat(TJclZLibCompressStream); RegisterFormat(TJclZLibDecompressStream); RegisterFormat(TJclGZIPCompressionStream); RegisterFormat(TJclGZIPDecompressionStream); RegisterFormat(TJclBZIP2CompressionStream); RegisterFormat(TJclBZIP2DecompressionStream); end; destructor TJclCompressionStreamFormats.Destroy; begin FCompressFormats.Free; FDecompressFormats.Free; inherited Destroy; end; function TJclCompressionStreamFormats.FindCompressFormat(const AFileName: TFileName): TJclCompressStreamClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressStreamClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.StreamExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionStreamFormats.FindDecompressFormat(const AFileName: TFileName): TJclDecompressStreamClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclDecompressStreamClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to DecompressFormatCount - 1 do begin AFormat := DecompressFormats[IndexFormat]; StrTokenToStrings(AFormat.StreamExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionStreamFormats.GetCompressFormat(Index: Integer): TJclCompressStreamClass; begin Result := TJclCompressStreamClass(FCompressFormats.Items[Index]); end; function TJclCompressionStreamFormats.GetCompressFormatCount: Integer; begin Result := FCompressFormats.Count; end; function TJclCompressionStreamFormats.GetDecompressFormat(Index: Integer): TJclDecompressStreamClass; begin Result := TJclDecompressStreamClass(FDecompressFormats.Items[Index]); end; function TJclCompressionStreamFormats.GetDecompressFormatCount: Integer; begin Result := FDecompressFormats.Count; end; procedure TJclCompressionStreamFormats.RegisterFormat(AClass: TJclCompressionStreamClass); begin if AClass.InheritsFrom(TJclCompressStream) then FCompressFormats.Add(AClass) else if AClass.InheritsFrom(TJclDecompressStream) then FDecompressFormats.Add(AClass); end; procedure TJclCompressionStreamFormats.UnregisterFormat(AClass: TJclCompressionStreamClass); begin if AClass.InheritsFrom(TJclCompressStream) then FCompressFormats.Remove(AClass) else if AClass.InheritsFrom(TJclDecompressStream) then FDecompressFormats.Remove(AClass); end; function GetStreamFormats: TJclCompressionStreamFormats; begin if not Assigned(GlobalStreamFormats) then GlobalStreamFormats := TJclCompressionStreamFormats.Create; Result := TJclCompressionStreamFormats(GlobalStreamFormats); end; //=== { TJclZLibCompressionStream } ========================================== { Error checking helper } function ZLibCheck(const ErrCode: Integer): Integer; begin case ErrCode of 0..High(ErrCode): Result := ErrCode; // no error Z_ERRNO: raise EJclCompressionError.CreateRes(@RsCompressionZLibZErrNo); Z_STREAM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZStreamError); Z_DATA_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZDataError); Z_MEM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZMemError); Z_BUF_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZBufError); Z_VERSION_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionZLibZVersionError); else raise EJclCompressionError.CreateResFmt(@RsCompressionZLibError, [ErrCode]); end; end; constructor TJclZLibCompressStream.Create(Destination: TStream; CompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadZLib; Assert(FBuffer <> nil); Assert(FBufferSize > 0); // Initialize ZLib StreamRecord ZLibRecord.zalloc := nil; // Use build-in memory allocation functionality ZLibRecord.zfree := nil; ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; FWindowBits := DEF_WBITS; FMemLevel := DEF_MEM_LEVEL; FMethod := Z_DEFLATED; FStrategy := Z_DEFAULT_STRATEGY; FCompressionLevel := CompressionLevel; FDeflateInitialized := False; end; destructor TJclZLibCompressStream.Destroy; begin Flush; if FDeflateInitialized then begin ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.avail_out := 0; ZLibRecord.next_out := nil; ZLibCheck(deflateEnd(ZLibRecord)); end; inherited Destroy; end; function TJclZLibCompressStream.Write(const Buffer; Count: Longint): Longint; begin if not FDeflateInitialized then begin ZLibCheck(deflateInit2(ZLibRecord, FCompressionLevel, FMethod, FWindowBits, FMemLevel, FStrategy)); FDeflateInitialized := True; end; ZLibRecord.next_in := @Buffer; ZLibRecord.avail_in := Count; while ZLibRecord.avail_in > 0 do begin ZLibCheck(deflate(ZLibRecord, Z_NO_FLUSH)); if ZLibRecord.avail_out = 0 then // Output buffer empty. Write to stream and go on... begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; end; end; Result := Count; end; function TJclZLibCompressStream.Flush: Integer; begin Result := 0; if FDeflateInitialized then begin ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; while (ZLibCheck(deflate(ZLibRecord, Z_FINISH)) <> Z_STREAM_END) and (ZLibRecord.avail_out = 0) do begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; Inc(Result, FBufferSize); end; if ZLibRecord.avail_out < FBufferSize then begin FStream.WriteBuffer(FBuffer^, FBufferSize - ZLibRecord.avail_out); Progress(Self); Inc(Result, FBufferSize - ZLibRecord.avail_out); ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; end; end; end; function TJclZLibCompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := ZLibRecord.total_in else if (Offset = 0) and (Origin = soBeginning) and (ZLibRecord.total_in = 0) then Result := 0 else Result := inherited Seek(Offset, Origin); end; procedure TJclZLibCompressStream.SetWindowBits(Value: Integer); begin FWindowBits := Value; end; class function TJclZLibCompressStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZLibCompressStream.StreamName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZLibCompressStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; procedure TJclZLibCompressStream.SetMethod(Value: Integer); begin FMethod := Value; end; procedure TJclZLibCompressStream.SetStrategy(Value: Integer); begin FStrategy := Value; if FDeflateInitialized then ZLibCheck(deflateParams(ZLibRecord, FCompressionLevel, FStrategy)); end; procedure TJclZLibCompressStream.SetMemLevel(Value: Integer); begin FMemLevel := Value; end; procedure TJclZLibCompressStream.SetCompressionLevel(Value: Integer); begin FCompressionLevel := Value; if FDeflateInitialized then ZLibCheck(deflateParams(ZLibRecord, FCompressionLevel, FStrategy)); end; procedure TJclZLibCompressStream.Reset; begin if FDeflateInitialized then begin Flush; ZLibCheck(deflateReset(ZLibRecord)); end; end; //=== { TJclZLibDecompressionStream } ======================================= constructor TJclZLibDecompressStream.Create(Source: TStream; WindowBits: Integer; AOwnsStream: Boolean); begin inherited Create(Source, AOwnsStream); LoadZLib; // Initialize ZLib StreamRecord ZLibRecord.zalloc := nil; // Use build-in memory allocation functionality ZLibRecord.zfree := nil; ZLibRecord.next_in := nil; ZLibRecord.avail_in := 0; ZLibRecord.next_out := FBuffer; ZLibRecord.avail_out := FBufferSize; FInflateInitialized := False; FWindowBits := WindowBits; end; destructor TJclZLibDecompressStream.Destroy; begin if FInflateInitialized then begin FStream.Seek(-ZLibRecord.avail_in, soCurrent); ZLibCheck(inflateEnd(ZLibRecord)); end; inherited Destroy; end; function TJclZLibDecompressStream.Read(var Buffer; Count: Longint): Longint; var Res: Integer; begin if not FInflateInitialized then begin ZLibCheck(InflateInit2(ZLibRecord, FWindowBits)); FInflateInitialized := True; end; ZLibRecord.next_out := @Buffer; ZLibRecord.avail_out := Count; while ZLibRecord.avail_out > 0 do // as long as we have data begin if ZLibRecord.avail_in = 0 then begin ZLibRecord.avail_in := FStream.Read(FBuffer^, FBufferSize); if ZLibRecord.avail_in = 0 then begin Result := Count - Longint(ZLibRecord.avail_out); Exit; end; ZLibRecord.next_in := FBuffer; end; if ZLibRecord.avail_in > 0 then begin Res := inflate(ZLibRecord, Z_NO_FLUSH); ZLibCheck(Res); Progress(Self); // Suggestion by ZENsan (mantis 4546) if Res = Z_STREAM_END then begin Result := Count - Longint(ZLibRecord.avail_out); Exit; end; end; end; Result := Count; end; function TJclZLibDecompressStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := ZLibRecord.total_out else Result := inherited Seek(Offset, Origin); end; procedure TJclZLibDecompressStream.SetWindowBits(Value: Integer); begin FWindowBits := Value; end; class function TJclZLibDecompressStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZLibDecompressStream.StreamName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZLibDecompressStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; //=== { TJclGZIPCompressionStream } ========================================== constructor TJclGZIPCompressionStream.Create(Destination: TStream; CompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadZLib; FFlags := [gfHeaderCRC16, gfExtraField, gfOriginalFileName, gfComment]; FAutoSetTime := True; FFatSystem := gfsUnknown; FCompressionLevel := CompressionLevel; FDataCRC32 := crc32(0, nil, 0); end; destructor TJclGZIPCompressionStream.Destroy; begin // BUGFIX: CRC32 and Uncompressed Size missing from GZIP output // unless you called Flush manually. This is not correct Stream behaviour. // Flush should be optional! Flush; FZLibStream.Free; inherited Destroy; end; function TJclGZIPCompressionStream.Flush: Integer; var AFooter: TJclGZIPFooter; begin if Assigned(FZLibStream) then Result := FZLibStream.Flush else Result := 0; if FFooterWritten then Exit; FFooterWritten := True; // Write footer, CRC32 followed by ISIZE AFooter.DataCRC32 := FDataCRC32; AFooter.DataSize := FOriginalSize; Inc(Result, FStream.Write(AFooter, SizeOf(AFooter))); end; function TJclGZIPCompressionStream.GetDosTime: TDateTime; begin if AutoSetTime then Result := Now else Result := UnixTimeToDateTime(FUnixTime); end; function TJclGZIPCompressionStream.GetUnixTime: Cardinal; begin if AutoSetTime then Result := DateTimeToUnixTime(Now) else Result := FUnixTime; end; procedure TJclGZIPCompressionStream.Reset; begin if Assigned(FZLibStream) then FZLibStream.Reset; FDataCRC32 := crc32(0, nil, 0); FOriginalSize := 0; end; procedure TJclGZIPCompressionStream.SetDosTime(const Value: TDateTime); begin AutoSetTime := False; FUnixTime := DateTimeToUnixTime(Value); end; procedure TJclGZIPCompressionStream.SetUnixTime(Value: Cardinal); begin AutoSetTime := False; FUnixTime := Value; end; class function TJclGZIPCompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZIPCompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZIPCompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; function TJclGZIPCompressionStream.Write(const Buffer; Count: Integer): Longint; begin if not FHeaderWritten then begin WriteHeader; FHeaderWritten := True; end; if not Assigned(FZLibStream) then begin FZLibStream := TJclZLibCompressStream.Create(FStream, FCompressionLevel); FZLibStream.WindowBits := -DEF_WBITS; // negative value for raw mode FZLibStream.OnProgress := ZLibStreamProgress; end; Result := FZLibStream.Write(Buffer, Count); FDataCRC32 := crc32(FDataCRC32, PBytef(@Buffer), Result); Inc(FOriginalSize, Result); end; procedure TJclGZIPCompressionStream.WriteHeader; const FatSystemToByte: array [TJclGZIPFatSystem] of Byte = (JCL_GZIP_OS_FAT, JCL_GZIP_OS_AMIGA, JCL_GZIP_OS_VMS, JCL_GZIP_OS_UNIX, JCL_GZIP_OS_VM, JCL_GZIP_OS_ATARI, JCL_GZIP_OS_HPFS, JCL_GZIP_OS_MAC, JCL_GZIP_OS_Z, JCL_GZIP_OS_CPM, JCL_GZIP_OS_TOPS, JCL_GZIP_OS_NTFS, JCL_GZIP_OS_QDOS, JCL_GZIP_OS_ACORN, JCL_GZIP_OS_UNKNOWN, JCL_GZIP_OS_UNKNOWN); var AHeader: TJclGZIPHeader; ExtraFieldLength, HeaderCRC16: Word; HeaderCRC: Cardinal; TmpAnsiString: AnsiString; procedure StreamWriteBuffer(const Buffer; Count: Longint); begin FStream.WriteBuffer(Buffer, Count); if gfHeaderCRC16 in Flags then HeaderCRC := crc32(HeaderCRC, @Byte(Buffer), Count); end; function CheckCString(const Buffer: string): Boolean; var Index: Integer; begin Result := False; for Index := 1 to Length(Buffer) do if Buffer[Index] = #0 then Exit; Result := True; end; begin if gfHeaderCRC16 in Flags then HeaderCRC := crc32(0, nil, 0); AHeader.ID1 := JCL_GZIP_ID1; AHeader.ID2 := JCL_GZIP_ID2; AHeader.CompressionMethod := JCL_GZIP_CM_DEFLATE; AHeader.Flags := 0; if gfDataIsText in Flags then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_TEXT; if gfHeaderCRC16 in Flags then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_CRC; if (gfExtraField in Flags) and (ExtraField <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_EXTRA; if (gfOriginalFileName in Flags) and (OriginalFileName <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_NAME; if (gfComment in Flags) and (Comment <> '') then AHeader.Flags := AHeader.Flags or JCL_GZIP_FLAG_COMMENT; if AutoSetTime then AHeader.ModifiedTime := DateTimeToUnixTime(Now) else AHeader.ModifiedTime := FUnixTime; case FCompressionLevel of Z_BEST_COMPRESSION: AHeader.ExtraFlags := JCL_GZIP_EFLAG_MAX; Z_BEST_SPEED: AHeader.ExtraFlags := JCL_GZIP_EFLAG_FAST; else AHeader.ExtraFlags := 0; end; AHeader.OS := FatSystemToByte[FatSystem]; StreamWriteBuffer(AHeader, SizeOf(AHeader)); if (gfExtraField in Flags) and (ExtraField <> '') then begin if Length(ExtraField) > High(Word) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPExtraFieldTooLong); ExtraFieldLength := Length(ExtraField); StreamWriteBuffer(ExtraFieldLength, SizeOf(ExtraFieldLength)); StreamWriteBuffer(ExtraField[1], Length(ExtraField)); end; if (gfOriginalFileName in Flags) and (OriginalFileName <> '') then begin if not CheckCString(OriginalFileName) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPBadString); TmpAnsiString := AnsiString(OriginalFileName); StreamWriteBuffer(TmpAnsiString[1], Length(TmpAnsiString) + 1); end; if (gfComment in Flags) and (Comment <> '') then begin if not CheckCString(Comment) then raise EJclCompressionError.CreateRes(@RsCompressionGZIPBadString); TmpAnsiString := AnsiString(Comment); StreamWriteBuffer(TmpAnsiString[1], Length(TmpAnsiString) + 1); end; if (gfHeaderCRC16 in Flags) then begin HeaderCRC16 := HeaderCRC and $FFFF; FStream.WriteBuffer(HeaderCRC16, SizeOf(HeaderCRC16)); end; end; procedure TJclGZIPCompressionStream.ZLibStreamProgress(Sender: TObject); begin Progress(Self); end; //=== { TJclGZIPDecompressionStream } ======================================== constructor TJclGZIPDecompressionStream.Create(Source: TStream; CheckHeaderCRC: Boolean; AOwnsStream: Boolean); var HeaderCRC: Cardinal; ComputeHeaderCRC: Boolean; ExtraFieldLength: Word; procedure ReadBuffer(var Buffer; SizeOfBuffer: Longint); begin Source.ReadBuffer(Buffer, SizeOfBuffer); if ComputeHeaderCRC then HeaderCRC := crc32(HeaderCRC, @Byte(Buffer), SizeOfBuffer); end; function ReadCString: AnsiString; var Buf: AnsiChar; begin Result := ''; Buf := #0; repeat Source.ReadBuffer(Buf, SizeOf(Buf)); if Buf = #0 then Break; Result := Result + Buf; until False; end; begin inherited Create(Source, AOwnsStream); LoadZLib; FAutoCheckDataCRC32 := True; FComputedDataCRC32 := crc32(0, nil, 0); HeaderCRC := crc32(0, nil, 0); ComputeHeaderCRC := CheckHeaderCRC; ReadBuffer(FHeader, SizeOf(FHeader)); if (FHeader.ID1 <> JCL_GZIP_ID1) or (FHeader.ID2 <> JCL_GZIP_ID2) then raise EJclCompressionError.CreateResFmt(@RsCompressionGZipInvalidID, [FHeader.ID1, FHeader.ID2]); if (FHeader.CompressionMethod <> JCL_GZIP_CM_DEFLATE) then raise EJclCompressionError.CreateResFmt(@RsCompressionGZipUnsupportedCM, [FHeader.CompressionMethod]); if (FHeader.Flags and JCL_GZIP_FLAG_EXTRA) <> 0 then begin ExtraFieldLength := 0; ReadBuffer(ExtraFieldLength, SizeOf(ExtraFieldLength)); SetLength(FExtraField, ExtraFieldLength); ReadBuffer(FExtraField[1], ExtraFieldLength); end; if (FHeader.Flags and JCL_GZIP_FLAG_NAME) <> 0 then FOriginalFileName := TFileName(ReadCString); if (FHeader.Flags and JCL_GZIP_FLAG_COMMENT) <> 0 then FComment := string(ReadCString); if CheckHeaderCRC then begin ComputeHeaderCRC := False; FComputedHeaderCRC16 := HeaderCRC and $FFFF; end; if (FHeader.Flags and JCL_GZIP_FLAG_CRC) <> 0 then begin Source.ReadBuffer(FStoredHeaderCRC16, SizeOf(FStoredHeaderCRC16)); if CheckHeaderCRC and (FComputedHeaderCRC16 <> FStoredHeaderCRC16) then raise EJclCompressionError.CreateRes(@RsCompressionGZipHeaderCRC); end; end; destructor TJclGZIPDecompressionStream.Destroy; begin FZLibStream.Free; FCompressedDataStream.Free; inherited Destroy; end; function TJclGZIPDecompressionStream.GetCompressedDataSize: Int64; begin if not FDataStarted then Result := FStream.Size - FStream.Position - SizeOf(FFooter) else if FDataEnded then Result := FCompressedDataSize else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.GetComputedDataCRC32: Cardinal; begin if FDataEnded then Result := FComputedDataCRC32 else raise EJclCompressionError.CreateRes(@RsCompressionGZipNotDecompressed); end; function TJclGZIPDecompressionStream.GetDosTime: TDateTime; begin Result := UnixTimeToDateTime(FHeader.ModifiedTime); end; function TJclGZIPDecompressionStream.GetFatSystem: TJclGZIPFatSystem; const ByteToFatSystem: array [JCL_GZIP_OS_FAT..JCL_GZIP_OS_ACORN] of TJclGZIPFatSystem = (gfsFat, gfsAmiga, gfsVMS, gfsUnix, gfsVM, gfsAtari, gfsHPFS, gfsMac, gfsZ, gfsCPM, gfsTOPS, gfsNTFS, gfsQDOS, gfsAcorn); begin case FHeader.OS of JCL_GZIP_OS_FAT..JCL_GZIP_OS_ACORN: Result := ByteToFatSystem[FHeader.OS]; JCL_GZIP_OS_UNKNOWN: Result := gfsUnknown; else Result := gfsOther; end; end; function TJclGZIPDecompressionStream.GetFlags: TJclGZIPFlags; begin Result := []; if (FHeader.Flags and JCL_GZIP_FLAG_TEXT) <> 0 then Result := Result + [gfDataIsText]; if (FHeader.Flags and JCL_GZIP_FLAG_CRC) <> 0 then Result := Result + [gfHeaderCRC16]; if (FHeader.Flags and JCL_GZIP_FLAG_EXTRA) <> 0 then Result := Result + [gfExtraField]; if (FHeader.Flags and JCL_GZIP_FLAG_NAME) <> 0 then Result := Result + [gfOriginalFileName]; if (FHeader.Flags and JCL_GZIP_FLAG_COMMENT) <> 0 then Result := Result + [gfComment]; end; function TJclGZIPDecompressionStream.GetOriginalDataSize: Cardinal; var StartPos: Int64; AFooter: TJclGZIPFooter; begin if not FDataStarted then begin StartPos := FStream.Position; try FStream.Seek(-SizeOf(AFooter), soEnd); AFooter.DataCRC32 := 0; AFooter.DataSize := 0; FStream.ReadBuffer(AFooter, SizeOf(AFooter)); Result := AFooter.DataSize; finally FStream.Seek(StartPos, soBeginning); end; end else if FDataEnded then Result := FFooter.DataSize else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.GetStoredDataCRC32: Cardinal; var StartPos: Int64; AFooter: TJclGZIPFooter; begin if not FDataStarted then begin StartPos := FStream.Position; try FStream.Seek(-SizeOf(AFooter), soEnd); AFooter.DataSize := 0; AFooter.DataCRC32 := 0; FStream.ReadBuffer(AFooter, SizeOf(AFooter)); Result := AFooter.DataCRC32; finally FStream.Seek(StartPos, soBeginning); end; end else if FDataEnded then Result := FFooter.DataCRC32 else raise EJclCompressionError.CreateRes(@RsCompressionGZipDecompressing); end; function TJclGZIPDecompressionStream.Read(var Buffer; Count: Longint): Longint; begin if not Assigned(FZLibStream) then begin FCompressedDataStream := TJclDelegatedStream.Create; FCompressedDataStream.OnRead := ReadCompressedData; FZLibStream := TJclZLibDecompressStream.Create(FCompressedDataStream, -DEF_WBITS); FZLibStream.OnProgress := ZLibStreamProgress; end; Result := FZLibStream.Read(Buffer, Count); Inc(FDataSize, Result); FComputedDataCRC32 := crc32(FComputedDataCRC32, @Byte(Buffer), Result); if Result < Count then begin if not FDataEnded then // the decompressed stream is stopping before the compressed stream raise EJclCompressionError.CreateRes(@RsCompressionGZipInternalError); if AutoCheckDataCRC32 and (FComputedDataCRC32 <> FFooter.DataCRC32) then raise EJclCompressionError.CreateRes(@RsCompressionGZipDataCRCFailed); end; end; function TJclGZIPDecompressionStream.ReadCompressedData(Sender: TObject; var Buffer; Count: Longint): Longint; var BufferAddr: PAnsiChar; FooterAddr: PAnsiChar; begin if (Count = 0) or FDataEnded then begin Result := 0; Exit; end else if not FDataStarted then begin FDataStarted := True; // prolog if FStream.Read(FFooter, SizeOf(FFooter)) < SizeOf(FFooter) then raise EJclCompressionError.CreateRes(@RsCompressionGZipDataTruncated); end; BufferAddr := @Byte(Buffer); Move(FFooter, Buffer, SizeOf(FFooter)); Result := FStream.Read(BufferAddr[SizeOf(FFooter)], Count - SizeOf(FFooter)) + FStream.Read(FFooter, SizeOf(FFooter)); if Result < Count then begin FDataEnded := True; // epilog FooterAddr := @FFooter; if (Count - Result) < SizeOf(FFooter) then begin // the "real" footer is splitted in the data and the footer // shift the valid bytes of the footer to their place Move(FFooter, FooterAddr[Count - Result], SizeOf(FFooter) - Count + Result); // the missing bytes of the footer are located after the data Move(BufferAddr[Result], FFooter, Count - Result); end else // the "real" footer is located in the data Move(BufferAddr[Result], FFooter, SizeOf(FFooter)); end; Inc(FCompressedDataSize, Result); end; class function TJclGZIPDecompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZIPDecompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZIPDecompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; procedure TJclGZIPDecompressionStream.ZLibStreamProgress(Sender: TObject); begin Progress(Self); end; //=== { TJclBZLibCompressionStream } ========================================= { Error checking helper } function BZIP2LibCheck(const ErrCode: Integer): Integer; begin case ErrCode of 0..High(ErrCode): Result := ErrCode; // no error BZ_SEQUENCE_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2SequenceError); BZ_PARAM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2ParameterError); BZ_MEM_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2MemoryError); BZ_DATA_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2DataError); BZ_DATA_ERROR_MAGIC: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2HeaderError); BZ_IO_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2IOError); BZ_UNEXPECTED_EOF: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2EOFError); BZ_OUTBUFF_FULL: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2OutBuffError); BZ_CONFIG_ERROR: raise EJclCompressionError.CreateRes(@RsCompressionBZIP2ConfigError); else raise EJclCompressionError.CreateResFmt(@RsCompressionBZIP2Error, [ErrCode]); end; end; constructor TJclBZIP2CompressionStream.Create(Destination: TStream; ACompressionLevel: TJclCompressionLevel); begin inherited Create(Destination); LoadBZip2; Assert(FBuffer <> nil); Assert(FBufferSize > 0); // Initialize ZLib StreamRecord BZLibRecord.bzalloc := nil; // Use build-in memory allocation functionality BZLibRecord.bzfree := nil; BZLibRecord.next_in := nil; BZLibRecord.avail_in := 0; BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; FDeflateInitialized := False; FCompressionLevel := ACompressionLevel; end; destructor TJclBZIP2CompressionStream.Destroy; begin Flush; if FDeflateInitialized then BZIP2LibCheck(BZ2_bzCompressEnd(BZLibRecord)); inherited Destroy; end; function TJclBZIP2CompressionStream.Flush: Integer; begin Result := 0; if FDeflateInitialized then begin BZLibRecord.next_in := nil; BZLibRecord.avail_in := 0; while (BZIP2LibCheck(BZ2_bzCompress(BZLibRecord, BZ_FINISH)) <> BZ_STREAM_END) and (BZLibRecord.avail_out = 0) do begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; Inc(Result, FBufferSize); end; if BZLibRecord.avail_out < FBufferSize then begin FStream.WriteBuffer(FBuffer^, FBufferSize - BZLibRecord.avail_out); Progress(Self); Inc(Result, FBufferSize - BZLibRecord.avail_out); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; end; end; end; function TJclBZIP2CompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := (BZLibRecord.total_in_hi32 shl 32) or BZLibRecord.total_in_lo32 else if (Offset = 0) and (Origin = soBeginning) and (BZLibRecord.total_in_lo32 = 0) then Result := 0 else Result := inherited Seek(Offset, Origin); end; procedure TJclBZIP2CompressionStream.SetCompressionLevel(const Value: Integer); begin if not FDeflateInitialized then FCompressionLevel := Value else raise EJclCompressionError.CreateRes(@RsCompressionBZIP2SequenceError); end; class function TJclBZIP2CompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZIP2CompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZIP2CompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; function TJclBZIP2CompressionStream.Write(const Buffer; Count: Longint): Longint; begin if not FDeflateInitialized then begin BZIP2LibCheck(BZ2_bzCompressInit(BZLibRecord, FCompressionLevel, 0, 0)); FDeflateInitialized := True; end; BZLibRecord.next_in := @Buffer; BZLibRecord.avail_in := Count; while BZLibRecord.avail_in > 0 do begin BZIP2LibCheck(BZ2_bzCompress(BZLibRecord, BZ_RUN)); if BZLibRecord.avail_out = 0 then // Output buffer empty. Write to stream and go on... begin FStream.WriteBuffer(FBuffer^, FBufferSize); Progress(Self); BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; end; end; Result := Count; end; //=== { TJclBZip2DecompressionStream } ======================================= constructor TJclBZIP2DecompressionStream.Create(Source: TStream; AOwnsStream: Boolean); begin inherited Create(Source, AOwnsStream); LoadBZip2; // Initialize ZLib StreamRecord BZLibRecord.bzalloc := nil; // Use build-in memory allocation functionality BZLibRecord.bzfree := nil; BZLibRecord.opaque := nil; BZLibRecord.next_in := nil; BZLibRecord.state := nil; BZLibRecord.avail_in := 0; BZLibRecord.next_out := FBuffer; BZLibRecord.avail_out := FBufferSize; FInflateInitialized := False; end; destructor TJclBZIP2DecompressionStream.Destroy; begin if FInflateInitialized then begin FStream.Seek(-BZLibRecord.avail_in, soCurrent); BZIP2LibCheck(BZ2_bzDecompressEnd(BZLibRecord)); end; inherited Destroy; end; function TJclBZIP2DecompressionStream.Read(var Buffer; Count: Longint): Longint; begin if not FInflateInitialized then begin BZIP2LibCheck(BZ2_bzDecompressInit(BZLibRecord, 0, 0)); FInflateInitialized := True; end; BZLibRecord.next_out := @Buffer; BZLibRecord.avail_out := Count; Result := 0; while Result < Count do // as long as we need data begin if BZLibRecord.avail_in = 0 then // no more compressed data begin BZLibRecord.avail_in := FStream.Read(FBuffer^, FBufferSize); if BZLibRecord.avail_in = 0 then Exit; BZLibRecord.next_in := FBuffer; end; if BZLibRecord.avail_in > 0 then begin BZIP2LibCheck(BZ2_bzDecompress(BZLibRecord)); Result := Count; Dec(Result, BZLibRecord.avail_out); end end; Result := Count; end; function TJclBZIP2DecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Offset = 0) and (Origin = soCurrent) then Result := (BZLibRecord.total_out_hi32 shl 32) or BZLibRecord.total_out_lo32 else Result := inherited Seek(Offset, Origin); end; class function TJclBZIP2DecompressionStream.StreamExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZIP2DecompressionStream.StreamName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZIP2DecompressionStream.StreamSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; procedure InternalCompress(SourceStream: TStream; CompressStream: TJclCompressStream; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer); var SourceStreamSize, SourceStreamPosition: Int64; Buffer: Pointer; ReadBytes: Integer; EofFlag: Boolean; begin SourceStreamSize := SourceStream.Size; // source file size SourceStreamPosition := 0; GetMem(Buffer, JclDefaultBufferSize + 2); try // ZLibStream.CopyFrom(SourceStream, 0 ); // One line way to do it! may not // // be reliable idea to do this! also, // //no progress callbacks! EofFlag := False; while not EofFlag do begin if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStreamPosition, UserData); ReadBytes := SourceStream.Read(Buffer^, JclDefaultBufferSize); SourceStreamPosition := SourceStreamPosition + ReadBytes; CompressStream.WriteBuffer(Buffer^, ReadBytes); // short block indicates end of zlib stream EofFlag := ReadBytes < JclDefaultBufferSize; end; //CompressStream.Flush; (called by the destructor of compression streams finally FreeMem(Buffer); end; if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStreamPosition, UserData); end; procedure InternalDecompress(SourceStream, DestStream: TStream; DecompressStream: TJclDecompressStream; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer); var SourceStreamSize: Int64; Buffer: Pointer; ReadBytes: Integer; EofFlag: Boolean; begin SourceStreamSize := SourceStream.Size; // source file size GetMem(Buffer, JclDefaultBufferSize + 2); try // ZLibStream.CopyFrom(SourceStream, 0 ); // One line way to do it! may not // // be reliable idea to do this! also, // //no progress callbacks! EofFlag := False; while not EofFlag do begin if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStream.Position, UserData); ReadBytes := DecompressStream.Read(Buffer^, JclDefaultBufferSize); DestStream.WriteBuffer(Buffer^, ReadBytes); // short block indicates end of zlib stream EofFlag := ReadBytes < JclDefaultBufferSize; end; finally FreeMem(Buffer); end; if Assigned(ProgressCallback) then ProgressCallback(SourceStreamSize, SourceStream.Position, UserData); end; { Compress to a .gz file - one liner - NEW MARCH 2007 } function GZipFile(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var GZipStream: TJclGZIPCompressionStream; DestStream: TFileStream; SourceStream: TFileStream; GZipStreamDateTime: TDateTime; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; GetFileLastWrite(SourceFile, GZipStreamDateTime); {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils try { create compressionstream third, and copy from source, through zlib compress layer, out through file stream} GZipStream := TJclGZIPCompressionStream.Create(DestStream, CompressionLevel); try GZipStream.DosTime := GZipStreamDateTime; InternalCompress(SourceStream, GZipStream, ProgressCallback, UserData); finally GZipStream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; { Decompress a .gz file } function UnGZipFile(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var GZipStream: TJclGZIPDecompressionStream; DestStream: TFileStream; SourceStream: TFileStream; GZipStreamDateTime: TDateTime; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils try { create decompressionstream third, and copy from source, through zlib decompress layer, out through file stream } GZipStream := TJclGZIPDecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestStream, GZipStream, ProgressCallback, UserData); GZipStreamDateTime := GZipStream.DosTime; finally GZipStream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); if Result and (GZipStreamDateTime <> 0) then // preserve datetime when unpacking! (see JclFileUtils) SetFileLastWrite(DestinationFile, GZipStreamDateTime); end; procedure GZipStream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = Z_DEFAULT_COMPRESSION; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var GZStream: TJclGZIPCompressionStream; begin GZStream := TJclGZIPCompressionStream.Create(DestinationStream, CompressionLevel); try InternalCompress(SourceStream, GZStream, ProgressCallback, UserData); finally GZStream.Free; end; end; procedure UnGZipStream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var GZipStream: TJclGZIPDecompressionStream; begin GZipStream := TJclGZIPDecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestinationStream, GZipStream, ProgressCallback, UserData); finally GZipStream.Free; end; end; { Compress to a .bz2 file - one liner } function BZip2File(SourceFile, DestinationFile: TFileName; CompressionLevel: Integer; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var BZip2Stream: TJclBZIP2CompressionStream; DestStream: TFileStream; SourceStream: TFileStream; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, fmCreate); // see SysUtils try { create compressionstream third, and copy from source, through zlib compress layer, out through file stream} BZip2Stream := TJclBZIP2CompressionStream.Create(DestStream, CompressionLevel); try InternalCompress(SourceStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; { Decompress a .bzip2 file } function UnBZip2File(SourceFile, DestinationFile: TFileName; ProgressCallback: TJclCompressStreamProgressCallback; UserData: Pointer): Boolean; var BZip2Stream: TJclBZIP2DecompressionStream; DestStream: TFileStream; SourceStream: TFileStream; begin Result := False; if not FileExists(SourceFile) then // can't copy what doesn't exist! Exit; {destination and source streams first and second} SourceStream := TFileStream.Create(SourceFile, {mode} fmOpenRead or fmShareDenyWrite); try DestStream := TFileStream.Create(DestinationFile, {mode} fmCreate); // see SysUtils try { create decompressionstream third, and copy from source, through zlib decompress layer, out through file stream } BZip2Stream := TJclBZIP2DecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; finally DestStream.Free; end; finally SourceStream.Free; end; Result := FileExists(DestinationFile); end; procedure BZip2Stream(SourceStream, DestinationStream: TStream; CompressionLevel: Integer = 5; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var BZ2Stream: TJclBZIP2CompressionStream; begin BZ2Stream := TJclBZIP2CompressionStream.Create(DestinationStream, CompressionLevel); try InternalCompress(SourceStream, BZ2Stream, ProgressCallback, UserData); finally BZ2Stream.Free; end; end; procedure UnBZip2Stream(SourceStream, DestinationStream: TStream; ProgressCallback: TJclCompressStreamProgressCallback = nil; UserData: Pointer = nil); var BZip2Stream: TJclBZIP2DecompressionStream; begin BZip2Stream := TJclBZIP2DecompressionStream.Create(SourceStream); try InternalDecompress(SourceStream, DestinationStream, BZip2Stream, ProgressCallback, UserData); finally BZip2Stream.Free; end; end; {$ENDIF FPC} {$IFDEF MSWINDOWS} function OpenFileStream(const FileName: TFileName; StreamAccess: TJclStreamAccess): TStream; begin Result := nil; case StreamAccess of saCreate: Result := TFileStream.Create(FileName, fmCreate); saReadOnly: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); saReadOnlyDenyNone: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); saWriteOnly: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenWrite) else if FileName <> '' then Result := TFileStream.Create(FileName, fmCreate); saReadWrite: if FileExists(FileName) then Result := TFileStream.Create(FileName, fmOpenReadWrite) else if FileName <> '' then Result := TFileStream.Create(FileName, fmCreate); end; end; //=== { TJclCompressionItem } ================================================ constructor TJclCompressionItem.Create(AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; FPackedIndex := $FFFFFFFF; end; function TJclCompressionItem.DeleteOutputFile: Boolean; begin Result := (FFileName <> '') and FileExists(FFileName) and FileDelete(FFileName); end; destructor TJclCompressionItem.Destroy; begin ReleaseStream; inherited Destroy; end; function TJclCompressionItem.GetAttributes: Cardinal; begin CheckGetProperty(ipAttributes); Result := FAttributes; end; function TJclCompressionItem.GetComment: WideString; begin CheckGetProperty(ipComment); Result := FComment; end; function TJclCompressionItem.GetCRC: Cardinal; begin CheckGetProperty(ipCRC); Result := FCRC; end; function TJclCompressionItem.GetCreationTime: TFileTime; begin CheckGetProperty(ipCreationTime); Result := FCreationTime; end; function TJclCompressionItem.GetDirectory: Boolean; begin Result := (Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0; end; function TJclCompressionItem.GetEncrypted: Boolean; begin CheckGetProperty(ipEncrypted); Result := FEncrypted; end; function TJclCompressionItem.GetFileName: TFileName; begin CheckGetProperty(ipFileName); Result := FFileName; end; function TJclCompressionItem.GetFileSize: Int64; begin CheckGetProperty(ipFileSize); Result := FFileSize; end; function TJclCompressionItem.GetGroup: WideString; begin CheckGetProperty(ipGroup); Result := FGroup; end; function TJclCompressionItem.GetHostFS: WideString; begin CheckGetProperty(ipHostFS); Result := FHostFS; end; function TJclCompressionItem.GetHostOS: WideString; begin CheckGetProperty(ipHostOS); Result := FHostOS; end; function TJclCompressionItem.GetItemKind: TJclCompressionItemKind; begin if (Attributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then Result := ikDirectory else Result := ikFile; end; function TJclCompressionItem.GetLastAccessTime: TFileTime; begin CheckGetProperty(ipLastAccessTime); Result := FLastAccessTime; end; function TJclCompressionItem.GetLastWriteTime: TFileTime; begin CheckGetProperty(ipLastWriteTime); Result := FLastWriteTime; end; function TJclCompressionItem.GetMethod: WideString; begin CheckGetProperty(ipMethod); Result := FMethod; end; function TJclCompressionItem.GetNestedArchiveName: WideString; var ParentArchiveExtension, ArchiveFileName, ArchiveExtension: WideString; ExtensionMap: TStrings; begin if ipPackedName in ValidProperties then Result := PackedName else begin ArchiveFileName := ''; ArchiveExtension := ''; // find archive file name if Archive.VolumeCount > 0 then ArchiveFileName := WideExtractFileName(WideString(Archive.Volumes[0].FileName)); if (ArchiveFileName <> '') and (WideExtractFileExt(ArchiveFileName) = '.001') then ArchiveFileName := WideChangeFileExt(ArchiveFileName, ''); ParentArchiveExtension := WideExtractFileExt(ArchiveFileName); ArchiveFileName := WideChangeFileExt(ArchiveFileName, ''); // find item extension ArchiveExtension := WideExtractFileExt(ArchiveFileName); if ArchiveExtension <> '' then ArchiveFileName := WideChangeFileExt(ArchiveFileName, '') else if ipPackedExtension in ValidProperties then ArchiveExtension := PackedExtension else if ArchiveFileName <> '' then begin ExtensionMap := TStringList.Create; try ExtensionMap.Delimiter := ';'; ExtensionMap.DelimitedText := Archive.ArchiveSubExtensions; ArchiveExtension := ExtensionMap.Values[ParentArchiveExtension]; finally ExtensionMap.Free; end; end; // elaborate result if (ArchiveFileName = '') and (ArchiveExtension = '') then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty) else if ArchiveFileName = '' then Result := ArchiveExtension else Result := WideChangeFileExt(ArchiveFileName, ArchiveExtension); end; end; function TJclCompressionItem.GetNestedArchiveStream: TStream; begin raise EJclCompressionError.CreateRes(@RsCompressionNoNestedArchive); end; function TJclCompressionItem.GetPackedExtension: WideString; begin CheckGetProperty(ipPackedExtension); if FPackedName = '' then Result := FPackedExtension else Result := WideExtractFileExt(FPackedName); end; function TJclCompressionItem.GetPackedName: WideString; begin CheckGetProperty(ipPackedName); Result := FPackedName; end; function TJclCompressionItem.GetPackedSize: Int64; begin CheckGetProperty(ipPackedSize); Result := FPackedSize; end; function TJclCompressionItem.GetStream: TStream; begin if not Assigned(FStream) and (FileName <> '') then FStream := OpenFileStream(FileName, Archive.ItemAccess); Result := FStream; end; function TJclCompressionItem.GetUser: WideString; begin CheckGetProperty(ipUser); Result := FUser; end; procedure TJclCompressionItem.ReleaseStream; begin if OwnsStream or (FileName <> '') then FreeAndNil(FStream); end; procedure TJclCompressionItem.SetAttributes(Value: Cardinal); begin CheckSetProperty(ipAttributes); FAttributes := Value; Include(FModifiedProperties, ipAttributes); Include(FValidProperties, ipAttributes); end; procedure TJclCompressionItem.SetComment(const Value: WideString); begin CheckSetProperty(ipComment); FComment := Value; Include(FModifiedProperties, ipComment); Include(FValidProperties, ipComment); end; procedure TJclCompressionItem.SetCRC(Value: Cardinal); begin CheckSetProperty(ipCRC); FCRC := Value; Include(FModifiedProperties, ipCRC); Include(FValidProperties, ipCRC); end; procedure TJclCompressionItem.SetCreationTime(const Value: TFileTime); begin CheckSetProperty(ipCreationTime); FCreationTime := Value; Include(FModifiedProperties, ipCreationTime); Include(FValidProperties, ipCreationTime); end; procedure TJclCompressionItem.SetDirectory(Value: Boolean); begin CheckSetProperty(ipAttributes); if Value then FAttributes := FAttributes or FILE_ATTRIBUTE_DIRECTORY else FAttributes := FAttributes and (not FILE_ATTRIBUTE_DIRECTORY); Include(FModifiedProperties, ipAttributes); Include(FValidProperties, ipAttributes); end; procedure TJclCompressionItem.SetEncrypted(Value: Boolean); begin CheckSetProperty(ipEncrypted); FEncrypted := Value; Include(FModifiedProperties, ipEncrypted); Include(FValidProperties, ipEncrypted); end; procedure TJclCompressionItem.SetFileName(const Value: TFileName); var AFindData: TWin32FindData; begin CheckSetProperty(ipFileName); FFileName := Value; if Value <> '' then begin Include(FModifiedProperties, ipFileName); Include(FValidProperties, ipFileName); end else begin Exclude(FModifiedProperties, ipFileName); Exclude(FValidProperties, ipFileName); end; if (Value <> '') and (FArchive is TJclCompressionArchive) and GetFileAttributesEx(PChar(Value), GetFileExInfoStandard, @AFindData) then begin FileSize := (Int64(AFindData.nFileSizeHigh) shl 32) or AFindData.nFileSizeLow; Attributes := AFindData.dwFileAttributes; CreationTime := AFindData.ftCreationTime; LastAccessTime := AFindData.ftLastAccessTime; LastWriteTime := AFindData.ftLastWriteTime; // TODO: user name and group (using file handle and GetSecurityInfo) {$IFDEF MSWINDOWS} HostOS := LoadResString(@RsCompression7zWindows); {$ENDIF MSWINDOWS} {$IFDEF UNIX} HostOS := LoadResString(@RsCompression7zUnix); {$ENDIF UNIX} end; end; procedure TJclCompressionItem.SetFileSize(const Value: Int64); begin CheckSetProperty(ipFileSize); FFileSize := Value; Include(FModifiedProperties, ipFileSize); Include(FValidProperties, ipFileSize); end; procedure TJclCompressionItem.SetGroup(const Value: WideString); begin CheckSetProperty(ipGroup); FGroup := Value; Include(FModifiedProperties, ipGroup); Include(FValidProperties, ipGroup); end; procedure TJclCompressionItem.SetHostFS(const Value: WideString); begin CheckSetProperty(ipHostFS); FHostFS := Value; Include(FModifiedProperties, ipHostFS); Include(FValidProperties, ipHostFS); end; procedure TJclCompressionItem.SetHostOS(const Value: WideString); begin CheckSetProperty(ipHostOS); FHostOS := Value; Include(FModifiedProperties, ipHostOS); Include(FValidProperties, ipHostOS); end; procedure TJclCompressionItem.SetLastAccessTime(const Value: TFileTime); begin CheckSetProperty(ipLastAccessTime); FLastAccessTime := Value; Include(FModifiedProperties, ipLastAccessTime); Include(FValidProperties, ipLastAccessTime); end; procedure TJclCompressionItem.SetLastWriteTime(const Value: TFileTime); begin CheckSetProperty(ipLastWriteTime); FLastWriteTime := Value; Include(FModifiedProperties, ipLastWriteTime); Include(FValidProperties, ipLastWriteTime); end; procedure TJclCompressionItem.SetMethod(const Value: WideString); begin CheckSetProperty(ipMethod); FMethod := Value; Include(FModifiedProperties, ipMethod); Include(FValidProperties, ipMethod); end; procedure TJclCompressionItem.SetPackedExtension(const Value: WideString); begin CheckSetProperty(ipPackedExtension); if (Value <> '') and (Value[1] <> '.') then // force heading '.' FPackedExtension := '.' + Value else FPackedExtension := Value; Include(FModifiedProperties, ipPackedExtension); Include(FValidProperties, ipPackedExtension); end; procedure TJclCompressionItem.SetPackedName(const Value: WideString); var PackedNamesIndex: Integer; begin if FPackedName <> Value then begin CheckSetProperty(ipPackedName); if FArchive is TJclCompressArchive then begin PackedNamesIndex := -1; if (TJclCompressArchive(FArchive).FPackedNames <> nil) and TJclCompressArchive(FArchive).FPackedNames.Find(FPackedName, PackedNamesIndex) then begin TJclCompressArchive(FArchive).FPackedNames.Delete(PackedNamesIndex); try TJclCompressArchive(FArchive).FPackedNames.Add(Value); except raise EJclCompressionError(Format(LoadResString(@RsCompressionDuplicate), [Value])); end; end; end; FPackedName := Value; Include(FModifiedProperties, ipPackedName); Include(FValidProperties, ipPackedName); end; end; procedure TJclCompressionItem.SetPackedSize(const Value: Int64); begin CheckSetProperty(ipPackedSize); FPackedSize := Value; Include(FModifiedProperties, ipPackedSize); Include(FValidProperties, ipPackedSize); end; procedure TJclCompressionItem.SetStream(const Value: TStream); begin CheckSetProperty(ipStream); ReleaseStream; FStream := Value; if Value <> nil then begin Include(FModifiedProperties, ipStream); Include(FValidProperties, ipStream); end else begin Exclude(FModifiedProperties, ipStream); Exclude(FValidProperties, ipStream); end; end; procedure TJclCompressionItem.SetUser(const Value: WideString); begin CheckSetProperty(ipUser); FUser := Value; Include(FModifiedProperties, ipUser); Include(FValidProperties, ipUser); end; function TJclCompressionItem.UpdateFileTimes: Boolean; const FILE_WRITE_ATTRIBUTES = $00000100; var FileHandle: HFILE; ACreationTime, ALastAccessTime, ALastWriteTime: PFileTime; begin ReleaseStream; Result := FFileName <> ''; if Result then begin FileHandle := CreateFile(PChar(FFileName), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ, nil, OPEN_ALWAYS, 0, 0); try // creation time should be the oldest if ipCreationTime in FValidProperties then ACreationTime := @FCreationTime else if ipLastWriteTime in FValidProperties then ACreationTime := @FLastWriteTime else if ipLastAccessTime in FValidProperties then ACreationTime := @FLastAccessTime else ACreationTime := nil; // last access time may default to now if not set if ipLastAccessTime in FValidProperties then ALastAccessTime := @FLastAccessTime else ALastAccessTime := nil; // last write time may, if not set, be the creation time or last access time if ipLastWriteTime in FValidProperties then ALastWriteTime := @FLastWriteTime else if ipCreationTime in FValidProperties then ALastWriteTime := @FCreationTime else if ipLastAccessTime in FValidProperties then ALastWriteTime := @FLastAccessTime else ALastWriteTime := nil; Result := (FileHandle <> INVALID_HANDLE_VALUE) and SetFileTime(FileHandle, ACreationTime, ALastAccessTime, ALastWriteTime); finally CloseHandle(FileHandle); end; end; end; function TJclCompressionItem.ValidateExtraction(Index: Integer): Boolean; begin Result := False; end; function TJclCompressionItem.WideChangeFileExt(const AFileName, AExtension: WideString): WideString; var Index: Integer; begin Result := AFileName; // Unicode version of ChangeFileExt for Index := Length(Result) downto 1 do begin case Result[Index] of '.': begin Result := Copy(Result, 1, Index - 1) + AExtension; Exit; end; DirSeparator, DirDelimiter: // no extension Break; end; end; Result := Result + AExtension; end; function TJclCompressionItem.WideExtractFileExt( const AFileName: WideString): WideString; var Index: Integer; begin Result := ''; // Unicode version of ExtractFileExt for Index := Length(AFileName) downto 1 do begin case AFileName[Index] of '.': begin Result := Copy(AFileName, Index, Length(AFileName) - Index + 1); Break; end; DirSeparator, DirDelimiter: // no extension Break; end; end; end; function TJclCompressionItem.WideExtractFileName( const AFileName: WideString): WideString; var Index: Integer; begin Result := AFileName; // Unicode version of ExtractFileName for Index := Length(AFileName) downto 1 do begin case AFileName[Index] of DirSeparator, DirDelimiter: begin Result := Copy(AFileName, Index + 1, Length(AFileName) - Index); Break; end; end; end; end; //=== { TJclCompressionArchiveFormats } ====================================== constructor TJclCompressionArchiveFormats.Create; begin inherited Create; FCompressFormats := TList.Create; FDecompressFormats := TList.Create; FUpdateFormats := TList.Create; // register compression archives RegisterFormat(TJclZipCompressArchive); RegisterFormat(TJclBZ2CompressArchive); RegisterFormat(TJcl7zCompressArchive); RegisterFormat(TJclTarCompressArchive); RegisterFormat(TJclGZipCompressArchive); RegisterFormat(TJclXzCompressArchive); RegisterFormat(TJclSwfcCompressArchive); RegisterFormat(TJclWimCompressArchive); // register decompression archives RegisterFormat(TJclZipDecompressArchive); RegisterFormat(TJclBZ2DecompressArchive); RegisterFormat(TJclRarDecompressArchive); RegisterFormat(TJclArjDecompressArchive); RegisterFormat(TJclZDecompressArchive); RegisterFormat(TJclLzhDecompressArchive); RegisterFormat(TJcl7zDecompressArchive); RegisterFormat(TJclCabDecompressArchive); RegisterFormat(TJclNsisDecompressArchive); RegisterFormat(TJclLzmaDecompressArchive); RegisterFormat(TJclLzma86DecompressArchive); RegisterFormat(TJclPeDecompressArchive); RegisterFormat(TJclElfDecompressArchive); RegisterFormat(TJclMachoDecompressArchive); RegisterFormat(TJclUdfDecompressArchive); RegisterFormat(TJclXarDecompressArchive); RegisterFormat(TJclMubDecompressArchive); RegisterFormat(TJclHfsDecompressArchive); RegisterFormat(TJclDmgDecompressArchive); RegisterFormat(TJclCompoundDecompressArchive); RegisterFormat(TJclWimDecompressArchive); RegisterFormat(TJclIsoDecompressArchive); RegisterFormat(TJclChmDecompressArchive); RegisterFormat(TJclSplitDecompressArchive); RegisterFormat(TJclRpmDecompressArchive); RegisterFormat(TJclDebDecompressArchive); RegisterFormat(TJclCpioDecompressArchive); RegisterFormat(TJclTarDecompressArchive); RegisterFormat(TJclGZipDecompressArchive); RegisterFormat(TJclNtfsDecompressArchive); RegisterFormat(TJclFatDecompressArchive); RegisterFormat(TJclMbrDecompressArchive); RegisterFormat(TJclVhdDecompressArchive); RegisterFormat(TJclMslzDecompressArchive); RegisterFormat(TJclFlvDecompressArchive); RegisterFormat(TJclSwfDecompressArchive); RegisterFormat(TJclSwfcDecompressArchive); RegisterFormat(TJclAPMDecompressArchive); RegisterFormat(TJclPpmdDecompressArchive); RegisterFormat(TJclTEDecompressArchive); RegisterFormat(TJclUEFIcDecompressArchive); RegisterFormat(TJclUEFIsDecompressArchive); RegisterFormat(TJclSquashFSDecompressArchive); RegisterFormat(TJclCramFSDecompressArchive); // register update archives RegisterFormat(TJclZipUpdateArchive); RegisterFormat(TJclBZ2UpdateArchive); RegisterFormat(TJcl7zUpdateArchive); RegisterFormat(TJclTarUpdateArchive); RegisterFormat(TJclGZipUpdateArchive); RegisterFormat(TJclSwfcUpdateArchive); end; destructor TJclCompressionArchiveFormats.Destroy; begin FCompressFormats.Free; FDecompressFormats.Free; FUpdateFormats.Free; inherited Destroy; end; function TJclCompressionArchiveFormats.FindCompressFormat(const AFileName: TFileName): TJclCompressArchiveClass; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressArchiveClass; begin Result := nil; Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin Result := AFormat; Break; end; if Result <> nil then Break; end; finally Filters.Free; end; end; function TJclCompressionArchiveFormats.FindCompressFormats( const AFileName: TFileName): TJclCompressArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclCompressArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to CompressFormatCount - 1 do begin AFormat := CompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; {function TJclCompressionArchiveFormats.FindDecompressFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclDecompressArchiveClass; var MatchingFormats: TJclDecompressArchiveClassArray; Index: Integer; ArchiveStream: TStream; Buffer: TDynByteArray; begin SetLength(Buffer, 0); // enumerate formats based on filename MatchingFormats := FindDecompressFormats(AFileName); if (Length(MatchingFormats) >= 1) and (not TestArchiveSignature) then begin Result := MatchingFormats[0]; Exit; end else Result := nil; // load archive to test signature ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone); try for Index := Low(MatchingFormats) to High(MatchingFormats) do if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then begin Result := MatchingFormats[Index]; Exit; end; finally ArchiveStream.Free; end; end;} function TJclCompressionArchiveFormats.FindDecompressFormat(const AFileName: TFileName): TJclDecompressArchiveClass; var MatchingFormats: TJclDecompressArchiveClassArray; begin // enumerate formats based on filename MatchingFormats := FindDecompressFormats(AFileName); if Length(MatchingFormats) >= 1 then begin Result := MatchingFormats[0]; Exit; end else Result := nil; end; function TJclCompressionArchiveFormats.FindDecompressFormats( const AFileName: TFileName): TJclDecompressArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclDecompressArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to DecompressFormatCount - 1 do begin AFormat := DecompressFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; {function TJclCompressionArchiveFormats.FindUpdateFormat(const AFileName: TFileName; TestArchiveSignature: Boolean): TJclUpdateArchiveClass; var MatchingFormats: TJclUpdateArchiveClassArray; Index: Integer; ArchiveStream: TStream; Buffer: TDynByteArray; begin SetLength(Buffer, 0); // enumerate formats based on filename MatchingFormats := FindUpdateFormats(AFileName); if (Length(MatchingFormats) >= 1) and (not TestArchiveSignature) then begin Result := MatchingFormats[0]; Exit; end else Result := nil; // load archive to test signature ArchiveStream := TFileStream.Create(AFileName, fmOpenRead and fmShareDenyNone); try for Index := Low(MatchingFormats) to High(MatchingFormats) do if SignatureMatches(MatchingFormats[Index], ArchiveStream, Buffer) then begin Result := MatchingFormats[Index]; Exit; end; finally ArchiveStream.Free; end; end;} function TJclCompressionArchiveFormats.FindUpdateFormat(const AFileName: TFileName): TJclUpdateArchiveClass; var MatchingFormats: TJclUpdateArchiveClassArray; begin // enumerate formats based on filename MatchingFormats := FindUpdateFormats(AFileName); if Length(MatchingFormats) >= 1 then begin Result := MatchingFormats[0]; Exit; end else Result := nil; end; function TJclCompressionArchiveFormats.FindUpdateFormats( const AFileName: TFileName): TJclUpdateArchiveClassArray; var IndexFormat, IndexFilter: Integer; Filters: TStrings; AFormat: TJclUpdateArchiveClass; begin SetLength(Result, 0); Filters := TStringList.Create; try for IndexFormat := 0 to UpdateFormatCount - 1 do begin AFormat := UpdateFormats[IndexFormat]; StrTokenToStrings(AFormat.ArchiveExtensions, DirSeparator, Filters); for IndexFilter := 0 to Filters.Count - 1 do if IsFileNameMatch(AFileName, Filters.Strings[IndexFilter]) then begin SetLength(Result, Length(Result) + 1); Result[High(Result)] := AFormat; Break; end; end; finally Filters.Free; end; end; function TJclCompressionArchiveFormats.GetCompressFormat(Index: Integer): TJclCompressArchiveClass; begin Result := TJclCompressArchiveClass(FCompressFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetCompressFormatCount: Integer; begin Result := FCompressFormats.Count; end; function TJclCompressionArchiveFormats.GetDecompressFormat(Index: Integer): TJclDecompressArchiveClass; begin Result := TJclDecompressArchiveClass(FDecompressFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetDecompressFormatCount: Integer; begin Result := FDecompressFormats.Count; end; function TJclCompressionArchiveFormats.GetUpdateFormat(Index: Integer): TJclUpdateArchiveClass; begin Result := TJclUpdateArchiveClass(FUpdateFormats.Items[Index]); end; function TJclCompressionArchiveFormats.GetUpdateFormatCount: Integer; begin Result := FUpdateFormats.Count; end; procedure TJclCompressionArchiveFormats.RegisterFormat(AClass: TJclCompressionArchiveClass); begin if AClass.InheritsFrom(TJclUpdateArchive) then FUpdateFormats.Add(AClass) else if AClass.InheritsFrom(TJclDecompressArchive) then FDecompressFormats.Add(AClass) else if AClass.InheritsFrom(TJclCompressArchive) then FCompressFormats.Add(AClass); end; {function TJclCompressionArchiveFormats.SignatureMatches( Format: TJclCompressionArchiveClass; ArchiveStream: TStream; var Buffer: TDynByteArray): Boolean; var Index, StartPos, EndPos: Integer; Signature: TDynByteArray; begin // must match empty signatures Result := True; Signature := Format.ArchiveSignature; // fill buffer if needed StartPos := Length(Buffer); // High(Buffer) + 1 EndPos := Length(Signature); if StartPos < EndPos then begin SetLength(Buffer, EndPos); for Index := StartPos to EndPos - 1 do ArchiveStream.ReadBuffer(Buffer[Index], SizeOf(Buffer[Index])); end; // compare buffer and signature for Index := 0 to EndPos - 1 do if Buffer[Index] <> Signature[Index] then begin Result := False; Break; end; end;} procedure TJclCompressionArchiveFormats.UnregisterFormat(AClass: TJclCompressionArchiveClass); begin if AClass.InheritsFrom(TJclUpdateArchive) then FUpdateFormats.Remove(AClass) else if AClass.InheritsFrom(TJclDecompressArchive) then FDecompressFormats.Remove(AClass) else if AClass.InheritsFrom(TJclCompressArchive) then FCompressFormats.Remove(AClass); end; function GetArchiveFormats: TJclCompressionArchiveFormats; begin if not Assigned(GlobalArchiveFormats) then GlobalArchiveFormats := TJclCompressionArchiveFormats.Create; Result := TJclCompressionArchiveFormats(GlobalArchiveFormats); end; //=== { TJclCompressionVolume } ============================================== constructor TJclCompressionVolume.Create(AStream, ATmpStream: TStream; AOwnsStream, AOwnsTmpStream: Boolean; AFileName, ATmpFileName: TFileName; AVolumeMaxSize: Int64); begin inherited Create; FStream := AStream; FTmpStream := ATmpStream; FOwnsStream := AOwnsStream; FOwnsTmpStream := AOwnsTmpStream; FFileName := AFileName; FTmpFileName := ATmpFileName; FVolumeMaxSize := AVolumeMaxSize; end; destructor TJclCompressionVolume.Destroy; begin ReleaseStreams; inherited Destroy; end; procedure TJclCompressionVolume.ReleaseStreams; begin if OwnsStream then FreeAndNil(FStream); if OwnsTmpStream then FreeAndNil(FTmpStream); end; //=== { TJclCompressionArchive } ============================================= constructor TJclCompressionArchive.Create(Volume0: TStream; AVolumeMaxSize: Int64 = 0; AOwnVolume: Boolean = False); begin inherited Create; FVolumeIndex := -1; FVolumeIndexOffset := 1; FVolumeMaxSize := AVolumeMaxSize; FItems := TObjectList.Create(True); FVolumes := TObjectList.Create(True); if Assigned(Volume0) then AddVolume(Volume0, AVolumeMaxSize, AOwnVolume); InitializeArchiveProperties; end; constructor TJclCompressionArchive.Create(const VolumeFileName: TFileName; AVolumeMaxSize: Int64 = 0; VolumeMask: Boolean = False); begin inherited Create; FVolumeIndex := -1; FVolumeIndexOffset := 1; FVolumeMaxSize := AVolumeMaxSize; FItems := TObjectList.Create(True); FVolumes := TObjectList.Create(True); if VolumeMask then FVolumeFileNameMask := VolumeFileName else AddVolume(VolumeFileName, AVolumeMaxSize); InitializeArchiveProperties; end; destructor TJclCompressionArchive.Destroy; begin FItems.Free; FVolumes.Free; inherited Destroy; end; function TJclCompressionArchive.AddVolume(VolumeStream: TStream; AVolumeMaxSize: Int64; AOwnsStream: Boolean): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(VolumeStream, nil, AOwnsStream, True, '', '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(VolumeStream, TmpVolumeStream: TStream; AVolumeMaxSize: Int64; AOwnsStream, AOwnsTmpStream: Boolean): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(VolumeStream, TmpVolumeStream, AOwnsStream, AOwnsTmpStream, '', '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(const VolumeFileName: TFileName; AVolumeMaxSize: Int64): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, VolumeFileName, '', AVolumeMaxSize)); end; function TJclCompressionArchive.AddVolume(const VolumeFileName, TmpVolumeFileName: TFileName; AVolumeMaxSize: Int64): Integer; begin Result := FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, VolumeFileName, TmpVolumeFileName, AVolumeMaxSize)); end; class function TJclCompressionArchive.ArchiveExtensions: string; begin Result := ''; end; class function TJclCompressionArchive.ArchiveName: string; begin Result := ''; end; class function TJclCompressionArchive.ArchiveSignature: TDynByteArray; begin SetLength(Result, 0); end; class function TJclCompressionArchive.ArchiveSubExtensions: string; begin Result := ''; end; procedure TJclCompressionArchive.CheckOperationSuccess; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do begin case TJclCompressionItem(FItems.Items[Index]).OperationSuccess of osNoOperation: ; osOK: ; osUnsupportedMethod: raise EJclCompressionError.CreateRes(@RsCompressionUnsupportedMethod); osDataError: raise EJclCompressionError.CreateRes(@RsCompressionDataError); osCRCError: raise EJclCompressionError.CreateRes(@RsCompressionCRCError); else raise EJclCompressionError.CreateRes(@RsCompressionUnknownError); end; end; end; procedure TJclCompressionArchive.ClearItems; begin FItems.Clear; end; procedure TJclCompressionArchive.ClearOperationSuccess; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).OperationSuccess := osNoOperation; end; procedure TJclCompressionArchive.ClearVolumes; begin FVolumes.Clear; end; procedure TJclCompressionArchive.InitializeArchiveProperties; begin // override to customize end; function TJclCompressionArchive.DoProgress(const Value, MaxValue: Int64): Boolean; begin if Assigned(FOnProgress) then FOnProgress(Self, Value, MaxValue); Result := not FCancelCurrentOperation; end; function TJclCompressionArchive.DoRatio(const InSize, OutSize: Int64): Boolean; begin if Assigned(FOnRatio) then FOnRatio(Self, InSize, OutSize); Result := not FCancelCurrentOperation; end; function TJclCompressionArchive.GetItem(Index: Integer): TJclCompressionItem; begin Result := TJclCompressionItem(FItems.Items[Index]); end; function TJclCompressionArchive.GetItemCount: Integer; begin Result := FItems.Count; end; function TJclCompressionArchive.GetSupportsNestedArchive: Boolean; begin Result := False; end; function TJclCompressionArchive.GetVolume(Index: Integer): TJclCompressionVolume; begin Result := TJclCompressionVolume(FVolumes.Items[Index]); end; function TJclCompressionArchive.GetVolumeCount: Integer; begin Result := FVolumes.Count; end; function TJclCompressionArchive.InternalOpenStream( const FileName: TFileName): TStream; begin Result := OpenFileStream(FileName, VolumeAccess); end; function TJclCompressionArchive.ItemAccess: TJclStreamAccess; begin Result := saReadOnly; end; class function TJclCompressionArchive.MultipleItemContainer: Boolean; begin Result := True; end; function TJclCompressionArchive.NeedStream(Index: Integer): TStream; var AVolume: TJclCompressionVolume; AOwnsStream: Boolean; AFileName: TFileName; begin Result := nil; if Index <> FVolumeIndex then begin AOwnsStream := VolumeFileNameMask <> ''; AVolume := nil; AFileName := Format(VolumeFileNameMask, [Index + VolumeIndexOffset]); if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.Stream; AOwnsStream := AVolume.OwnsStream; AFileName := AVolume.FileName; end; if Assigned(FOnVolume) then FOnVolume(Self, Index, AFileName, Result, AOwnsStream); if Assigned(AVolume) then begin if not Assigned(Result) then Result := InternalOpenStream(AFileName); AVolume.FFileName := AFileName; AVolume.FStream := Result; AVolume.FOwnsStream := AOwnsStream; end else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if not Assigned(Result) then Result := InternalOpenStream(AFileName); if Assigned(Result) then begin if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FFileName := AFileName; AVolume.FStream := Result; AVolume.FOwnsStream := AOwnsStream; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(Result, nil, AOwnsStream, True, AFileName, '', FVolumeMaxSize)); end; end; FVolumeIndex := Index; end else if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.Stream; if Assigned(Result) then Result.Seek(0, soBeginning); end else FVolumeIndex := Index; end; function TJclCompressionArchive.NeedStreamMaxSize(Index: Integer): Int64; var AVolume: TJclCompressionVolume; begin if (Index <> FVolumeIndex) then begin AVolume := nil; if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); FVolumeMaxSize := AVolume.VolumeMaxSize; end; if Assigned(FOnVolumeMaxSize) then FOnVolumeMaxSize(Self, Index, FVolumeMaxSize); if Assigned(AVolume) then AVolume.FVolumeMaxSize := FVolumeMaxSize else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FFileName := Format(VolumeFileNameMask, [Index + VolumeIndexOffset]); AVolume.FStream := nil; AVolume.FOwnsStream := True; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); end; end; Result := FVolumeMaxSize; end; procedure TJclCompressionArchive.ReleaseVolumes; var Index: Integer; begin for Index := 0 to FVolumes.Count - 1 do TJclCompressionVolume(FVolumes.Items[Index]).ReleaseStreams; end; procedure TJclCompressionArchive.SelectAll; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).Selected := True; end; function TJclCompressionArchive.TranslateItemPath(const ItemPath, OldBase, NewBase: WideString): WideString; begin Result := PathCanonicalize(PathAddSeparator(NewBase) + PathGetRelativePath(OldBase, ItemPath)); end; procedure TJclCompressionArchive.UnselectAll; var Index: Integer; begin for Index := 0 to FItems.Count - 1 do TJclCompressionItem(FItems.Items[Index]).Selected := False; end; class function TJclCompressionArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; function TJclCompressionArchive._AddRef: Integer; begin Result := -1; end; function TJclCompressionArchive._Release: Integer; begin Result := -1; end; //=== { TJclCompressItem } =================================================== procedure TJclCompressItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // always valid end; procedure TJclCompressItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin if AProperty in [ipMethod] then raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); (Archive as TJclCompressArchive).CheckNotCompressing; end; //=== { TJclCompressArchive } ================================================ destructor TJclCompressArchive.Destroy; begin FPackedNames.Free; inherited Destroy; end; function TJclCompressArchive.AddDirectory(const PackedName: WideString; const DirName: string; RecurseIntoDir: Boolean; AddFilesInDir: Boolean): Integer; var AItem: TJclCompressionItem; begin CheckNotCompressing; if DirName <> '' then begin FBaseRelName := PackedName; FBaseDirName := PathRemoveSeparator(DirName); FAddFilesInDir := AddFilesInDir; if RecurseIntoDir then begin Result := FItems.Count; EnumDirectories(DirName, InternalAddDirectory, True, '', nil); Exit; end; end; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.FileName := DirName; except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); if (DirName <> '') and AddFilesInDir then EnumFiles(PathAddSeparator(DirName) + '*', InternalAddFile, faDirectory); end; function TJclCompressArchive.AddFile(const PackedName: WideString; const FileName: TFileName): Integer; var AItem: TJclCompressionItem; begin CheckNotCompressing; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.FileName := FileName; except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.AddFile(const PackedName: WideString; AStream: TStream; AOwnsStream: Boolean): Integer; var AItem: TJclCompressionItem; NowFileTime: TFileTime; begin CheckNotCompressing; AItem := GetItemClass.Create(Self); try AItem.PackedName := PackedName; AItem.Stream := AStream; AItem.OwnsStream := AOwnsStream; AItem.FileSize := AStream.Size - AStream.Position; NowFileTime := LocalDateTimeToFileTime(Now); AItem.Attributes := faReadOnly and faArchive; AItem.CreationTime := NowFileTime; AItem.LastAccessTime := NowFileTime; AItem.LastWriteTime := NowFileTime; {$IFDEF MSWINDOWS} AItem.HostOS := LoadResString(@RsCompression7zWindows); {$ENDIF MSWINDOWS} {$IFDEF UNIX} AItem.HostOS := LoadResString(@RsCompression7zUnix); {$ENDIF UNIX} except AItem.Destroy; raise; end; Result := AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.AddFileCheckDuplicate(NewItem: TJclCompressionItem): Integer; var I, PackedNamesIndex: Integer; S: string; begin if FDuplicateCheck = dcNone then Result := FItems.Add(NewItem) else begin if FPackedNames = nil then begin FPackedNames := TJclWideStringList.Create; FPackedNames.Sorted := True; {$IFDEF UNIX} FPackedNames.CaseSensitive := True; {$ELSE ~UNIX} FPackedNames.CaseSensitive := False; {$ENDIF ~UNIX} FPackedNames.Duplicates := dupIgnore; for I := ItemCount - 1 downto 0 do FPackedNames.AddObject(Items[I].PackedName, Items[I]); FPackedNames.Duplicates := dupError; end; if DuplicateCheck = dcAll then begin try PackedNamesIndex := -1; FPackedNames.AddObject(NewItem.PackedName, NewItem); Result := FItems.Add(NewItem); except Result := -1; end; end else if FPackedNames.Find(NewItem.PackedName, PackedNamesIndex) then Result := -1 else Result := FItems.Add(NewItem); if Result < 0 then begin case DuplicateAction of daOverwrite: begin if PackedNamesIndex < 0 then PackedNamesIndex := FPackedNames.IndexOf(NewItem.PackedName); FItems.Remove(FPackedNames.Objects[PackedNamesIndex]); Result := FItems.Add(NewItem); if DuplicateCheck = dcAll then FPackedNames.Objects[PackedNamesIndex] := NewItem else FPackedNames.Delete(PackedNamesIndex); end; daError: begin S := Format(LoadResString(@RsCompressionDuplicate), [NewItem.PackedName]); NewItem.Free; raise EJclCompressionError.Create(S); end; daSkip: begin NewItem.Free; Result := -1; end; end end; end; end; procedure TJclCompressArchive.CheckNotCompressing; begin if FCompressing then raise EJclCompressionError.CreateRes(@RsCompressionCompressingError); end; procedure TJclCompressArchive.Compress; begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclCompressArchive.InternalAddDirectory(const Directory: string); begin AddDirectory(TranslateItemPath(Directory, FBaseDirName, FBaseRelName), Directory, False, FAddFilesInDir); end; procedure TJclCompressArchive.InternalAddFile(const Directory: string; const FileInfo: TSearchRec); var AFileName: TFileName; AItem: TJclCompressionItem; begin AFileName := PathAddSeparator(Directory) + FileInfo.Name; AItem := GetItemClass.Create(Self); try AItem.PackedName := TranslateItemPath(AFileName, FBaseDirName, FBaseRelName); AItem.FileName := AFileName; except AItem.Destroy; raise; end; AddFileCheckDuplicate(AItem); end; function TJclCompressArchive.ItemAccess: TJclStreamAccess; begin Result := saReadOnly; end; class function TJclCompressArchive.VolumeAccess: TJclStreamAccess; begin Result := saWriteOnly; end; //=== { TJclDecompressItem } ================================================= procedure TJclDecompressItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // TODO end; procedure TJclDecompressItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin (Archive as TJclDecompressArchive).CheckNotDecompressing; end; function TJclDecompressItem.ValidateExtraction(Index: Integer): Boolean; begin Result := (FArchive as TJclDecompressArchive).ValidateExtraction(Index, FFileName, FStream, FOwnsStream); end; //=== { TJclDecompressArchive } ============================================== procedure TJclDecompressArchive.CheckListing; begin if not FListing then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclDecompressArchive.CheckNotDecompressing; begin if FDecompressing then raise EJclCompressionError.CreateRes(@RsCompressionDecompressingError); end; procedure TJclDecompressArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclDecompressArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; function TJclDecompressArchive.ItemAccess: TJclStreamAccess; begin Result := saCreate; end; function TJclDecompressArchive.ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; var AItem: TJclCompressionItem; PackedName: TFileName; begin if FExtractingAllIndex <> -1 then // extracting all FExtractingAllIndex := Index; AItem := Items[Index]; if (FileName = '') and not Assigned(AStream) then begin PackedName := AItem.PackedName; if PackedName = '' then PackedName := ChangeFileExt(ExtractFileName(Volumes[0].FileName), AItem.PackedExtension); FileName := PathGetRelativePath(FDestinationDir, PackedName); end; Result := True; if Assigned(FOnExtract) then Result := FOnExtract(Self, Index, FileName, AStream, AOwnsStream); if Result and not Assigned(AStream) and AutoCreateSubDir then begin if (AItem.Attributes and faDirectory) <> 0 then ForceDirectories(FileName) else ForceDirectories(ExtractFilePath(FileName)); end; end; class function TJclDecompressArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; //=== { TJclUpdateItem } ===================================================== procedure TJclUpdateItem.CheckGetProperty( AProperty: TJclCompressionItemProperty); begin // TODO end; procedure TJclUpdateItem.CheckSetProperty( AProperty: TJclCompressionItemProperty); begin (Archive as TJclCompressArchive).CheckNotCompressing; end; function TJclUpdateItem.ValidateExtraction(Index: Integer): Boolean; begin Result := (Archive as TJclUpdateArchive).ValidateExtraction(Index, FFileName, FStream, FOwnsStream); end; //=== { TJclUpdateArchive } ================================================== procedure TJclUpdateArchive.CheckListing; begin if not FListing then raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclUpdateArchive.CheckNotDecompressing; begin if FDecompressing then raise EJclCompressionError.CreateRes(@RsCompressionDecompressingError); end; procedure TJclUpdateArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclUpdateArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); begin // Calling ReleaseVolumes here causes subsequent operations on the archive to fail with an "unsupported method" exception // ReleaseVolumes; end; procedure TJclUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FDuplicateCheck := dcExisting; end; function TJclUpdateArchive.ItemAccess: TJclStreamAccess; begin if FDecompressing then Result := saCreate else Result := saReadOnly; end; function TJclUpdateArchive.ValidateExtraction(Index: Integer; var FileName: TFileName; var AStream: TStream; var AOwnsStream: Boolean): Boolean; var AItem: TJclCompressionItem; PackedName: TFileName; begin if FExtractingAllIndex <> -1 then // extracting all FExtractingAllIndex := Index; AItem := Items[Index]; if (FileName = '') and not Assigned(AStream) then begin PackedName := AItem.PackedName; if PackedName = '' then PackedName := ChangeFileExt(ExtractFileName(Volumes[0].FileName), AItem.PackedExtension); FileName := PathGetRelativePath(FDestinationDir, PackedName); end; Result := True; if Assigned(FOnExtract) then Result := FOnExtract(Self, Index, FileName, AStream, AOwnsStream); if Result and not Assigned(AStream) and AutoCreateSubDir then begin if (AItem.Attributes and faDirectory) <> 0 then ForceDirectories(FileName) else ForceDirectories(ExtractFilePath(FileName)); end; end; class function TJclUpdateArchive.VolumeAccess: TJclStreamAccess; begin Result := saReadOnly; end; //=== { TJclOutOfPlaceUpdateArchive } ======================================== procedure TJclOutOfPlaceUpdateArchive.Compress; var Index: Integer; AVolume: TJclCompressionVolume; SrcFileName, DestFileName: TFileName; SrcStream, DestStream: TStream; OwnsSrcStream, OwnsDestStream, AllHandled, Handled: Boolean; CopiedSize: Int64; begin // release volume streams and other finalization inherited Compress; if ReplaceVolumes then begin AllHandled := True; // replace streams by tmp streams for Index := 0 to FVolumes.Count - 1 do begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); SrcFileName := AVolume.TmpFileName; DestFileName := AVolume.FileName; SrcStream := AVolume.TmpStream; DestStream := AVolume.Stream; OwnsSrcStream := AVolume.OwnsTmpStream; OwnsDestStream := AVolume.OwnsStream; Handled := Assigned(FOnReplace) and FOnReplace(Self, SrcFileName, DestFileName, SrcStream, DestStream, OwnsSrcStream, OwnsDestStream); if not Handled then begin if (SrcFileName <> '') and (DestFileName <> '') and (OwnsSrcStream or not Assigned(SrcStream)) and (OwnsDestStream or not Assigned(DestStream)) then begin // close references before moving files if OwnsSrcStream then FreeAndNil(SrcStream); if OwnsDestStream then FreeAndNil(DestStream); Handled := FileMove(SrcFileName, DestFileName, True); end else if (SrcFileName = '') and (DestFileName = '') and Assigned(SrcStream) and Assigned(DestStream) then begin // in-memory moves SrcStream.Seek(0, soBeginning); DestStream.Seek(0, soBeginning); CopiedSize := StreamCopy(SrcStream, DestStream); // reset size DestStream.Size := CopiedSize; Handled := True; end; // identity // else // Handled := False; end; // update volume information AVolume.FTmpStream := SrcStream; AVolume.FStream := DestStream; AVolume.FOwnsTmpStream := OwnsSrcStream; AVolume.FOwnsStream := OwnsDestStream; AVolume.FTmpFileName := SrcFileName; AVolume.FFileName := DestFileName; AllHandled := AllHandled and Handled; end; if not AllHandled then raise EJclCompressionError.CreateRes(@RsCompressionReplaceError); end; end; procedure TJclOutOfPlaceUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FReplaceVolumes := True; FTmpVolumeIndex := -1; end; function TJclOutOfPlaceUpdateArchive.InternalOpenTmpStream( const FileName: TFileName): TStream; begin Result := OpenFileStream(FileName, TmpVolumeAccess); end; function TJclOutOfPlaceUpdateArchive.NeedTmpStream(Index: Integer): TStream; var AVolume: TJclCompressionVolume; AOwnsStream: Boolean; AFileName: TFileName; begin Result := nil; if Index <> FTmpVolumeIndex then begin AOwnsStream := VolumeFileNameMask <> ''; AVolume := nil; if VolumeFileNameMask = '' then AFileName := '' else AFileName := FindUnusedFileName(Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '.tmp'); if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.TmpStream; AOwnsStream := AVolume.OwnsTmpStream; AFileName := AVolume.TmpFileName; if (AFileName = '') and (AVolume.FileName <> '') then AFileName := FindUnusedFileName(AVolume.FileName, '.tmp'); end; if Assigned(FOnTmpVolume) then FOnTmpVolume(Self, Index, AFileName, Result, AOwnsStream); if Assigned(AVolume) then begin if not Assigned(Result) then Result := InternalOpenTmpStream(AFileName); AVolume.FTmpFileName := AFileName; AVolume.FTmpStream := Result; AVolume.FOwnsTmpStream := AOwnsStream; end else begin while FVolumes.Count < Index do FVolumes.Add(TJclCompressionVolume.Create(nil, nil, True, True, Format(VolumeFileNameMask, [Index + VolumeIndexOffset]), '', FVolumeMaxSize)); if not Assigned(Result) then Result := InternalOpenTmpStream(AFileName); if Assigned(Result) then begin if Index < FVolumes.Count then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); AVolume.FTmpFileName := AFileName; AVolume.FTmpStream := Result; AVolume.FOwnsTmpStream := AOwnsStream; AVolume.FVolumeMaxSize := FVolumeMaxSize; end else FVolumes.Add(TJclCompressionVolume.Create(nil, Result, True, AOwnsStream, '', AFileName, FVolumeMaxSize)); end; end; FTmpVolumeIndex := Index; end else if (Index >= 0) and (Index < FVolumes.Count) then begin AVolume := TJclCompressionVolume(FVolumes.Items[Index]); Result := AVolume.TmpStream; if Assigned(Result) then Result.Seek(0, soBeginning); end else FTmpVolumeIndex := Index; end; class function TJclOutOfPlaceUpdateArchive.TmpVolumeAccess: TJclStreamAccess; begin Result := saWriteOnly; end; //=== { TJclSevenzipOutStream } ============================================== constructor TJclSevenzipOutStream.Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); begin inherited Create; FArchive := AArchive; FItemIndex := AItemIndex; FStream := nil; FOwnsStream := False; FMaximumPosition := 0; FTruncateOnRelease := False; end; constructor TJclSevenzipOutStream.Create(AStream: TStream; AOwnsStream: Boolean; ATruncateOnRelease: Boolean); begin inherited Create; FArchive := nil; FItemIndex := -1; FStream := AStream; FOwnsStream := AOwnsStream; FMaximumPosition := 0; FTruncateOnRelease := ATruncateOnRelease; end; destructor TJclSevenzipOutStream.Destroy; begin ReleaseStream; inherited Destroy; end; procedure TJclSevenzipOutStream.NeedStream; begin if Assigned(FArchive) then begin FArchive.FCurrentItemIndex := FItemIndex; if not Assigned(FStream) then FStream := FArchive.Items[FItemIndex].Stream; end; end; procedure TJclSevenzipOutStream.ReleaseStream; begin // truncate to the maximum position that was written if FTruncateOnRelease then FStream.Size := FMaximumPosition; if Assigned(FArchive) then FArchive.Items[FItemIndex].ReleaseStream else if FOwnsStream then FStream.Free; end; function TJclSevenzipOutStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; var NewPos: Int64; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(Offset, TSeekOrigin(SeekOrigin)); if Assigned(NewPosition) then NewPosition^ := NewPos; end else Result := S_FALSE; end; function TJclSevenzipOutStream.SetSize(NewSize: Int64): HRESULT; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; FStream.Size := NewSize; if FTruncateOnRelease and (FMaximumPosition < NewSize) then FMaximumPosition := NewSize; end else Result := S_FALSE; end; function TJclSevenzipOutStream.Write(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; var Processed: Cardinal; APosition: Int64; begin NeedStream; if Assigned(FStream) then begin Result := S_OK; Processed := FStream.Write(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; if FTruncateOnRelease then begin APosition := FStream.Position; if FMaximumPosition < APosition then FMaximumPosition := APosition; end; end else Result := S_FALSE; end; //=== { TJclSevenzipNestedInStream } ========================================= constructor TJclSevenzipNestedInStream.Create(AInStream: IInStream); begin inherited Create; FInStream := AInStream; end; function TJclSevenzipNestedInStream.Read(var Buffer; Count: Integer): Longint; begin SevenzipCheck(FInStream.Read(@Buffer, Count, @Result)); end; function TJclSevenzipNestedInStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin SevenzipCheck(FInStream.Seek(Offset, Cardinal(Origin), @Result)); end; procedure TJclSevenzipNestedInStream.SetSize(const NewSize: Int64); begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; function TJclSevenzipNestedInStream.Write(const Buffer; Count: Integer): Longint; begin raise EJclCompressionError.CreateRes(@RsCompressionWriteNotSupported); end; //=== { TJclSevenzipInStream } =============================================== constructor TJclSevenzipInStream.Create(AArchive: TJclCompressionArchive; AItemIndex: Integer); begin inherited Create; FArchive := AArchive; FItemIndex := AItemIndex; FStream := nil; FOwnsStream := False; end; constructor TJclSevenzipInStream.Create(AStream: TStream; AOwnsStream: Boolean); begin inherited Create; FArchive := nil; FItemIndex := -1; FStream := AStream; FOwnsStream := AOwnsStream; end; destructor TJclSevenzipInStream.Destroy; begin ReleaseStream; inherited Destroy; end; function TJclSevenzipInStream.GetSize(Size: PInt64): HRESULT; begin NeedStream; if Assigned(FStream) then begin if Assigned(Size) then Size^ := FStream.Size; Result := S_OK; end else Result := S_FALSE; end; procedure TJclSevenzipInStream.NeedStream; begin if Assigned(FArchive) then begin FArchive.FCurrentItemIndex := FItemIndex; if not Assigned(FStream) then FStream := FArchive.Items[FItemIndex].Stream; end; end; function TJclSevenzipInStream.Read(Data: Pointer; Size: Cardinal; ProcessedSize: PCardinal): HRESULT; var Processed: Cardinal; begin NeedStream; if Assigned(FStream) then begin Processed := FStream.Read(Data^, Size); if Assigned(ProcessedSize) then ProcessedSize^ := Processed; Result := S_OK; end else Result := S_FALSE; end; procedure TJclSevenzipInStream.ReleaseStream; begin if Assigned(FArchive) then FArchive.Items[FItemIndex].ReleaseStream else if FOwnsStream then FStream.Free; end; function TJclSevenzipInStream.Seek(Offset: Int64; SeekOrigin: Cardinal; NewPosition: PInt64): HRESULT; var NewPos: Int64; begin NeedStream; if Assigned(FStream) then begin // STREAM_SEEK_SET = 0 = soBeginning // STREAM_SEEK_CUR = 1 = soCurrent // STREAM_SEEK_END = 2 = soEnd NewPos := FStream.Seek(Offset, TSeekOrigin(SeekOrigin)); if Assigned(NewPosition) then NewPosition^ := NewPos; Result := S_OK; end else Result := S_FALSE; end; // sevenzip helper functions procedure SevenzipCheck(Value: HRESULT); begin if (Value <> S_OK) and (Value <> E_ABORT) then raise EJclCompressionError.CreateResFmt(@RsCompression7zReturnError, [Value, SysErrorMessage(Value)]); end; function Get7zWideStringProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TWideStringSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_LPSTR: begin Result := True; Setter(WideString(AnsiString(Value.pszVal))); end; VT_LPWSTR: begin Result := True; Setter(Value.pwszVal); end; VT_BSTR: begin Result := True; Setter(Value.bstrVal); SysFreeString(Value.bstrVal); end; VT_I1: begin Result := True; Setter(IntToStr(Value.iVal)); end; VT_I2: begin Result := True; Setter(IntToStr(Value.iVal)); end; VT_INT, VT_I4: begin Result := True; Setter(IntToStr(Value.lVal)); end; VT_I8: begin Result := True; Setter(IntToStr(Value.hVal.QuadPart)); end; VT_UI1: begin Result := True; Setter(IntToStr(Value.bVal)); end; VT_UI2: begin Result := True; Setter(IntToStr(Value.uiVal)); end; VT_UINT, VT_UI4: begin Result := True; Setter(IntToStr(Value.ulVal)); end; VT_UI8: begin Result := True; Setter(IntToStr(Value.uhVal.QuadPart)); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zCardinalProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TCardinalSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_I1, VT_I2, VT_INT, VT_I4, VT_I8, VT_UI1, VT_UI2, VT_UINT, VT_UI4, VT_UI8: begin Result := True; case Value.vt of VT_I1: Setter(Value.iVal); VT_I2: Setter(Value.iVal); VT_INT, VT_I4: Setter(Value.lVal); VT_I8: Setter(Value.hVal.QuadPart); VT_UI1: Setter(Value.bVal); VT_UI2: Setter(Value.uiVal); VT_UINT, VT_UI4: Setter(Value.ulVal); VT_UI8: Setter(Value.uhVal.QuadPart); end; end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zInt64Prop(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TInt64Setter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_I1, VT_I2, VT_INT, VT_I4, VT_I8, VT_UI1, VT_UI2, VT_UINT, VT_UI4, VT_UI8: begin Result := True; case Value.vt of VT_I1: Setter(Value.iVal); VT_I2: Setter(Value.iVal); VT_INT, VT_I4: Setter(Value.lVal); VT_I8: Setter(Value.hVal.QuadPart); VT_UI1: Setter(Value.bVal); VT_UI2: Setter(Value.uiVal); VT_UINT, VT_UI4: Setter(Value.ulVal); VT_UI8: Setter(Value.uhVal.QuadPart); end; end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zFileTimeProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TFileTimeSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_FILETIME: begin Result := True; Setter(Value.filetime); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; function Get7zBoolProp(const AArchive: IInArchive; ItemIndex: Integer; PropID: Cardinal; const Setter: TBoolSetter): Boolean; var Value: TPropVariant; begin ZeroMemory(@Value, SizeOf(Value)); SevenzipCheck(AArchive.GetProperty(ItemIndex, PropID, Value)); case Value.vt of VT_EMPTY, VT_NULL: Result := False; VT_BOOL: begin Result := True; Setter(Value.bool); end; else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [Value.vt, PropID]); end; end; // TODO: Are changes for UTF-8 filenames (>= 4.58 beta) necessary? procedure Load7zFileAttribute(AInArchive: IInArchive; ItemIndex: Integer; AItem: TJclCompressionItem); begin AItem.FValidProperties := []; AItem.FPackedIndex := ItemIndex; AItem.FileName := ''; AItem.Stream := nil; AItem.OwnsStream := False; // sometimes, items have neither names nor extension although other properties may succeed Get7zWideStringProp(AInArchive, ItemIndex, kpidPath, AItem.SetPackedName); Get7zWideStringProp(AInArchive, ItemIndex, kpidExtension, AItem.SetPackedExtension); Get7zCardinalProp(AInArchive, ItemIndex, kpidAttrib, AItem.SetAttributes); // SetDirectory must be after SetAttributes Get7zBoolProp(AInArchive, ItemIndex, kpidIsDir, AItem.SetDirectory); Get7zInt64Prop(AInArchive, ItemIndex, kpidSize, AItem.SetFileSize); Get7zInt64Prop(AInArchive, ItemIndex, kpidPackSize, AItem.SetPackedSize); Get7zFileTimeProp(AInArchive, ItemIndex, kpidCTime, AItem.SetCreationTime); Get7zFileTimeProp(AInArchive, ItemIndex, kpidATime, AItem.SetLastAccessTime); Get7zFileTimeProp(AInArchive, ItemIndex, kpidMTime, AItem.SetLastWriteTime); Get7zWideStringProp(AInArchive, ItemIndex, kpidComment, AItem.SetComment); Get7zWideStringProp(AInArchive, ItemIndex, kpidHostOS, AItem.SetHostOS); Get7zWideStringProp(AInArchive, ItemIndex, kpidFileSystem, AItem.SetHostFS); Get7zWideStringProp(AInArchive, ItemIndex, kpidUser, AItem.SetUser); Get7zWideStringProp(AInArchive, ItemIndex, kpidGroup, AItem.SetGroup); Get7zCardinalProp(AInArchive, ItemIndex, kpidCRC, AItem.SetCRC); Get7zWideStringProp(AInArchive, ItemIndex, kpidMethod, AItem.SetMethod); Get7zBoolProp(AInArchive, ItemIndex, kpidEncrypted, AItem.SetEncrypted); // reset modified flags AItem.ModifiedProperties := []; end; procedure GetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); begin // TODO properties from ASevenzipArchive to AJclArchive end; procedure SetSevenzipArchiveCompressionProperties(AJclArchive: IInterface; ASevenzipArchive: IInterface); var Index: Integer; JclArchive: TJclCompressionArchive; PropertySetter: Sevenzip.ISetProperties; InArchive, OutArchive: Boolean; Unused: IInterface; MultiThreadStrategy: IJclArchiveNumberOfThreads; CompressionMethod: IJclArchiveCompressionMethod; CompressionLevel: IJclArchiveCompressionLevel; EncryptionMethod: IJclArchiveEncryptionMethod; DictionarySize: IJclArchiveDictionarySize; NumberOfPasses: IJclArchiveNumberOfPasses; RemoveSfxBlock: IJclArchiveRemoveSfxBlock; CompressHeader: IJclArchiveCompressHeader; EncryptHeader: IJclArchiveEncryptHeader; SaveCreationDateTime: IJclArchiveSaveCreationDateTime; SaveLastAccessDateTime: IJclArchiveSaveLastAccessDateTime; SaveLastWriteDateTime: IJclArchiveSaveLastWriteDateTime; Algorithm: IJclArchiveAlgorithm; Solid: IJclArchiveSolid; PropNames: array of PWideChar; PropValues: array of TPropVariant; procedure AddProperty(const Name: PWideChar; const Value: TPropVariant); begin SetLength(PropNames, Length(PropNames)+1); PropNames[High(PropNames)] := Name; SetLength(PropValues, Length(PropValues)+1); PropValues[High(PropValues)] := Value; end; procedure AddCardinalProperty(const Name: PWideChar; Value: Cardinal); var PropValue: TPropVariant; begin PropValue.vt := VT_UI4; PropValue.ulVal := Value; AddProperty(Name, PropValue); end; procedure AddWideStringProperty(const Name: PWideChar; const Value: WideString); var PropValue: TPropVariant; begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(Value)); AddProperty(Name, PropValue); end; procedure AddBooleanProperty(const Name: PWideChar; Value: Boolean); var PropValue: TPropVariant; const BooleanValues: array [False..True] of WideString = ( 'OFF', 'ON' ); begin PropValue.vt := VT_BSTR; PropValue.bstrVal := SysAllocString(PWideChar(BooleanValues[Value])); AddProperty(Name, PropValue); end; const EncryptionMethodNames: array [TJclEncryptionMethod] of WideString = ( '' {emNone}, kAES128MethodName {emAES128}, kAES192MethodName {emAES192}, kAES256MethodName {emAES256}, kZipCryptoMethodName {emZipCrypto} ); CompressionMethodNames: array [TJclCompressionMethod] of WideString = ( kCopyMethodName {cmCopy}, kDeflateMethodName {cmDeflate}, kDeflate64MethodName {cmDeflate64}, kBZip2MethodName {cmBZip2}, kLZMAMethodName {cmLZMA}, kLZMA2MethodName {cmLZMA2}, kPPMdMethodName {cmPPMd} ); begin if Supports(ASevenzipArchive, Sevenzip.ISetProperties, PropertySetter) and Assigned(PropertySetter) then begin InArchive := Supports(ASevenzipArchive, Sevenzip.IInArchive, Unused); OutArchive := Supports(ASevenzipArchive, Sevenzip.IOutArchive, Unused); if (InArchive or OutArchive) and Supports(AJclArchive, IJclArchiveNumberOfThreads, MultiThreadStrategy) and Assigned(MultiThreadStrategy) and (MultiThreadStrategy.NumberOfThreads > 1) then AddCardinalProperty('MT', MultiThreadStrategy.NumberOfThreads); if OutArchive then begin if Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) then AddWideStringProperty('M', CompressionMethodNames[CompressionMethod.CompressionMethod]); if Supports(AJclArchive, IJclArchiveCompressionLevel, CompressionLevel) and Assigned(CompressionLevel) then AddCardinalProperty('X', CompressionLevel.CompressionLevel); if Supports(AJclArchive, IJclArchiveEncryptionMethod, EncryptionMethod) and Assigned(EncryptionMethod) and (EncryptionMethod.EncryptionMethod <> emNone) then AddWideStringProperty('EM', EncryptionMethodNames[EncryptionMethod.EncryptionMethod]); if Supports(AJclArchive, IJclArchiveDictionarySize, DictionarySize) and Assigned(DictionarySize) and Supports(AJclArchive, IJclArchiveCompressionMethod, CompressionMethod) and Assigned(CompressionMethod) and (CompressionMethod.CompressionMethod in [cmBZip2,cmLZMA,cmLZMA2]) then AddWideStringProperty('D', IntToStr(DictionarySize.DictionarySize) + 'B'); if Supports(AJclArchive, IJclArchiveNumberOfPasses, NumberOfPasses) and Assigned(NumberOfPasses) then AddCardinalProperty('PASS', NumberOfPasses.NumberOfPasses); if Supports(AJclArchive, IJclArchiveRemoveSfxBlock, RemoveSfxBlock) and Assigned(RemoveSfxBlock) then AddBooleanProperty('RSFX', RemoveSfxBlock.RemoveSfxBlock); if Supports(AJclArchive, IJclArchiveCompressHeader, CompressHeader) and Assigned(CompressHeader) then begin AddBooleanProperty('HC', CompressHeader.CompressHeader); if CompressHeader.CompressHeaderFull then AddBooleanProperty('HCF', CompressHeader.CompressHeaderFull); end; if Supports(AJclArchive, IJclArchiveEncryptHeader, EncryptHeader) and Assigned(EncryptHeader) then AddBooleanProperty('HE', EncryptHeader.EncryptHeader); if Supports(AJclArchive, IJclArchiveSaveCreationDateTime, SaveCreationDateTime) and Assigned(SaveCreationDateTime) then AddBooleanProperty('TC', SaveCreationDateTime.SaveCreationDateTime); if Supports(AJclArchive, IJclArchiveSaveLastAccessDateTime, SaveLastAccessDateTime) and Assigned(SaveLastAccessDateTime) then AddBooleanProperty('TA', SaveLastAccessDateTime.SaveLastAccessDateTime); if Supports(AJclArchive, IJclArchiveSaveLastWriteDateTime, SaveLastWriteDateTime) and Assigned(SaveLastWriteDateTime) then AddBooleanProperty('TM', SaveLastWriteDateTime.SaveLastWriteDateTime); if Supports(AJclArchive, IJclArchiveAlgorithm, Algorithm) and Assigned(Algorithm) then AddCardinalProperty('A', Algorithm.Algorithm); if Supports(AJclArchive, IJclArchiveSolid, Solid) and Assigned(Solid) then begin if Solid.SolidExtension then AddWideStringProperty('S', 'E'); if Solid.SolidBlockSize > 0 then AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'B') else AddWideStringProperty('S', IntToStr(Solid.SolidBlockSize) + 'F'); end; JclArchive := AJclArchive as TJclCompressionArchive; for Index := Low(JclArchive.PropNames) to High(JclArchive.PropNames) do begin AddProperty(PWideChar(JclArchive.PropNames[Index]), JclArchive.PropValues[Index]); end; end; if Length(PropNames) > 0 then begin SevenZipCheck(PropertySetter.SetProperties(@PropNames[0], @PropValues[0], Length(PropNames))); SetLength(JclArchive.PropNames, 0); SetLength(JclArchive.PropValues, 0); end; end; end; function Create7zFile(SourceFiles: TStrings; const DestinationFile: TFileName; VolumeSize: Int64; Password: String; OnArchiveProgress: TJclCompressionProgressEvent; OnArchiveRatio: TJclCompressionRatioEvent): Boolean; var ArchiveFileName: string; SourceFile : String; AFormat: TJclUpdateArchiveClass; Archive : TJclCompressionArchive; i: Integer; InnerList : tStringList; j: Integer; begin Result := False; ArchiveFileName := DestinationFile; AFormat := GetArchiveFormats.FindUpdateFormat(ArchiveFileName); if AFormat <> nil then begin if VolumeSize <> 0 then ArchiveFileName := ArchiveFileName + '.%.3d'; Archive := AFormat.Create(ArchiveFileName, VolumeSize, VolumeSize <> 0); try Archive.Password := Password; Archive.OnProgress := OnArchiveProgress; Archive.OnRatio := OnArchiveRatio; InnerList := tStringList.Create; try for i := 0 to SourceFiles.Count - 1 do begin InnerList.Clear; BuildFileList(SourceFiles[i], faAnyFile, InnerList, True); for j := 0 to InnerList.Count - 1 do begin SourceFile:=InnerList[j]; (Archive as TJclCompressArchive).AddFile(ExtractFileName(SourceFile), SourceFile); Result := True; end; end; finally InnerList.Free; end; (Archive as TJclCompressArchive).Compress; finally Archive.Free; end; end; end; function Create7zFile(const SourceFile, DestinationFile: TFileName; VolumeSize: Int64; Password: String; OnArchiveProgress: TJclCompressionProgressEvent; OnArchiveRatio: TJclCompressionRatioEvent): Boolean; var SourceFiles : TStringList; begin SourceFiles := TStringList.Create; try SourceFiles.Add(SourceFile); Result := Create7zFile(SourceFiles, DestinationFile, VolumeSize, Password, OnArchiveProgress, OnArchiveRatio); finally SourceFiles.Free; end; end; function Get7zArchiveSignature(const ClassID: TGUID): TDynByteArray; var I, NumberOfFormats: Cardinal; J: Integer; PropValue: TPropVariant; Found: Boolean; Data: PAnsiChar; begin Found := False; SetLength(Result, 0); SevenzipCheck(Sevenzip.GetNumberOfFormats(@NumberOfFormats)); for I := 0 to NumberOfFormats - 1 do begin SevenzipCheck(Sevenzip.GetHandlerProperty2(I, kClassID, PropValue)); if PropValue.vt = VT_BSTR then begin try if SysStringByteLen(PropValue.bstrVal) = SizeOf(TGUID) then Found := GUIDEquals(PGUID(PropValue.bstrVal)^, ClassID) else raise EJclCompressionError.CreateRes(@RsCompressionDataError); finally SysFreeString(PropValue.bstrVal); end; end else raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [PropValue.vt, kClassID]); if Found then begin SevenzipCheck(Sevenzip.GetHandlerProperty2(I, kStartSignature, PropValue)); if PropValue.vt = VT_BSTR then begin try SetLength(Result, SysStringByteLen(PropValue.bstrVal)); Data := PAnsiChar(PropValue.bstrVal); for J := Low(Result) to High(Result) do Result[J] := Ord(Data[J]); finally SysFreeString(PropValue.bstrVal); end; end else if PropValue.vt <> VT_EMPTY then raise EJclCompressionError.CreateResFmt(@RsCompression7zUnknownValueType, [PropValue.vt, kClassID]); Break; end; end; end; //=== { TJclSevenzipOutputCallback } ========================================= constructor TJclSevenzipUpdateCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipUpdateCallback.CryptoGetTextPassword2( PasswordIsDefined: PInteger; Password: PBStr): HRESULT; begin if Assigned(PasswordIsDefined) then begin if FArchive.Password <> '' then PasswordIsDefined^ := Integer($FFFFFFFF) else PasswordIsDefined^ := 0; end; if Assigned(Password) then Password^ := SysAllocString(PWideChar(FArchive.Password)); Result := S_OK; end; function TJclSevenzipUpdateCallback.GetProperty(Index, PropID: Cardinal; out Value: tagPROPVARIANT): HRESULT; var AItem: TJclCompressionItem; begin Result := S_OK; AItem := FArchive.Items[Index]; case PropID of kpidNoProperty: Value.vt := VT_NULL; // kpidMainSubfile: ; // kpidHandlerItemIndex: ; kpidPath: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.PackedName)); end; //kpidName: (read only) { kpidExtension: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(WideString(ExtractFileExt(FCompressionStream.FileNames[Index])))); end;} kpidIsDir: begin Value.vt := VT_BOOL; Value.bool := AItem.Kind = ikDirectory; end; kpidSize: begin Value.vt := VT_UI8; Value.uhVal.QuadPart := AItem.FileSize; end; // kpidPackSize: ; kpidAttrib: begin Value.vt := VT_UI4; Value.ulVal := AItem.Attributes; end; kpidCTime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.CreationTime; end; kpidATime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.LastAccessTime; end; kpidMTime: begin Value.vt := VT_FILETIME; Value.filetime := AItem.LastWriteTime; end; kpidSolid: begin Value.vt := VT_BOOL; Value.bool := True; end; // kpidCommented: ; // kpidEncrypted: ; // kpidSplitBefore: ; // kpidSplitAfter: ; // kpidDictionarySize: ; // kpidCRC: ; // kpidType: ; kpidIsAnti: begin Value.vt := VT_BOOL; Value.bool := False; end; // kpidMethod: ; // kpidHostOS: ; // kpidFileSystem: ; kpidUser: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.User)); end; kpidGroup: begin Value.vt := VT_BSTR; Value.bstrVal := SysAllocString(PWideChar(AItem.Group)); end; // kpidBlock: ; // kpidComment: ; // kpidPosition: ; // kpidPrefix: ; // kpidNumSubDirs: ; // kpidNumSubFiles: ; // kpidUnpackVer: ; // kpidVolume: ; // kpidIsVolume: ; // kpidOffset: ; // kpidLinks: ; // kpidNumBlocks: ; // kpidNumVolumes: ; kpidTimeType: begin Value.vt := VT_UI4; Value.ulVal := kWindows; end; // kpidBit64: ; // kpidBigEndian: ; // kpidCpu: ; // kpidPhySize: ; // kpidHeadersSize: ; // kpidChecksum: ; // kpidCharacts: ; // kpidVa: ; // kpidId: ; // kpidShortName: ; // kpidCreatorApp: ; // kpidSectorSize: ; kpidPosixAttrib: begin Value.vt := VT_EMPTY; end; // kpidLink: ; // kpidTotalSize: ; // kpidFreeSpace: ; // kpidClusterSize: ; // kpidVolumeName: ; // kpidLocalName: ; // kpidProvider: ; // kpidUserDefined: ; else Value.vt := VT_EMPTY; Result := S_FALSE; end; end; function TJclSevenzipUpdateCallback.GetStream(Index: Cardinal; out InStream: ISequentialInStream): HRESULT; begin FLastStream := Index; InStream := TJclSevenzipInStream.Create(FArchive, Index); Result := S_OK; end; function TJclSevenzipUpdateCallback.GetUpdateItemInfo(Index: Cardinal; NewData, NewProperties: PInteger; IndexInArchive: PCardinal): HRESULT; var CompressionItem: TJclCompressionItem; begin CompressionItem := FArchive.Items[Index]; if Assigned(NewData) then begin if ([ipFileName, ipStream] * CompressionItem.ModifiedProperties) <> [] then NewData^ := 1 else NewData^ := 0; end; if Assigned(NewProperties) then begin if (CompressionItem.ModifiedProperties - [ipFileName, ipStream]) <> [] then NewProperties^ := 1 else NewProperties^ := 0; end; // TODO if Assigned(IndexInArchive) then IndexInArchive^ := CompressionItem.PackedIndex; Result := S_OK; end; function TJclSevenzipUpdateCallback.GetVolumeSize(Index: Cardinal; Size: PInt64): HRESULT; begin // the JCL has its own spliting engine if Assigned(Size) then Size^ := 0; Result := S_FALSE; end; function TJclSevenzipUpdateCallback.GetVolumeStream(Index: Cardinal; out VolumeStream: ISequentialOutStream): HRESULT; begin VolumeStream := nil; Result := S_FALSE; end; function TJclSevenzipUpdateCallback.SetCompleted( CompleteValue: PInt64): HRESULT; begin Result := S_OK; if Assigned(CompleteValue) and not FArchive.DoProgress(CompleteValue^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipUpdateCallback.SetOperationResult( OperationResult: Integer): HRESULT; begin case OperationResult of kOK: FArchive.Items[FLastStream].OperationSuccess := osOK; kUnSupportedMethod: FArchive.Items[FLastStream].OperationSuccess := osUnsupportedMethod; kDataError: FArchive.Items[FLastStream].OperationSuccess := osDataError; kCRCError: FArchive.Items[FLastStream].OperationSuccess := osCRCError; else FArchive.Items[FLastStream].OperationSuccess := osUnknownError; end; Result := S_OK; end; function TJclSevenzipUpdateCallback.SetRatioInfo(InSize, OutSize: PInt64): HRESULT; var AInSize, AOutSize: Int64; begin if Assigned(InSize) then AInSize := InSize^ else AInSize := -1; if Assigned(OutSize) then AOutSize := OutSize^ else AOutSize := -1; if FArchive.DoRatio(AInSize, AOutSize) then Result := S_OK else Result := E_ABORT; end; function TJclSevenzipUpdateCallback.SetTotal(Total: Int64): HRESULT; begin FArchive.FProgressMax := Total; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipCompressArchive } ======================================== class function TJclSevenzipCompressArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; class function TJclSevenzipCompressArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; destructor TJclSevenzipCompressArchive.Destroy; begin FOutArchive := nil; inherited Destroy; end; function TJclSevenzipCompressArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclCompressItem; end; function TJclSevenzipCompressArchive.GetOutArchive: IOutArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FOutArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IOutArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FOutArchive) <> ERROR_SUCCESS) or not Assigned(FOutArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zOutArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FOutArchive; end; procedure TJclSevenzipCompressArchive.Compress; var OutStream: IOutStream; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin CheckNotCompressing; FCompressing := True; try SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; if Length(FSfxModule) > 0 then OutStream := TSfxSevenzipOutStream.Create(SplitStream, FSfxModule) else begin OutStream := TJclSevenzipOutStream.Create(SplitStream, True, False); end; UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); SevenzipCheck(OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback)); finally FCompressing := False; // release volumes and other finalizations inherited Compress; end; end; //=== { TJcl7zCompressArchive } ============================================== class function TJcl7zCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zCompressArchive.GetCompressHeader: Boolean; begin Result := FCompressHeader; end; function TJcl7zCompressArchive.GetCompressHeaderFull: Boolean; begin Result := FCompressHeaderFull; end; function TJcl7zCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJcl7zCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJcl7zCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJcl7zCompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJcl7zCompressArchive.GetEncryptHeader: Boolean; begin Result := FEncryptHeader; end; function TJcl7zCompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJcl7zCompressArchive.GetRemoveSfxBlock: Boolean; begin Result := FRemoveSfxBlock; end; function TJcl7zCompressArchive.GetSaveCreationDateTime: Boolean; begin Result := FSaveCreationDateTime; end; function TJcl7zCompressArchive.GetSaveLastAccessDateTime: Boolean; begin Result := FSaveLastAccessDateTime; end; function TJcl7zCompressArchive.GetSaveLastWriteDateTime: Boolean; begin Result := FSaveLastWriteDateTime; end; function TJcl7zCompressArchive.GetSolidBlockSize: Int64; begin Result := FSolidBlockSize; end; function TJcl7zCompressArchive.GetSolidExtension: Boolean; begin Result := FSolidExtension; end; procedure TJcl7zCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptHeader := False; FRemoveSfxBlock := False; FDictionarySize := kLzmaDicSizeX5; FCompressionLevel := 6; FCompressHeader := False; FCompressHeaderFull := False; FSaveLastAccessDateTime := True; FSaveCreationDateTime := True; FSaveLastWriteDateTime := True; FSolidBlockSize := High(Cardinal); FSolidExtension := False; end; class function TJcl7zCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zCompressArchive.SetCompressHeader(Value: Boolean); begin CheckNotCompressing; FCompressHeader := Value; end; procedure TJcl7zCompressArchive.SetCompressHeaderFull(Value: Boolean); begin CheckNotCompressing; FCompressHeaderFull := Value; end; procedure TJcl7zCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJcl7zCompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJcl7zCompressArchive.SetEncryptHeader(Value: Boolean); begin CheckNotCompressing; FEncryptHeader := Value; end; procedure TJcl7zCompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; procedure TJcl7zCompressArchive.SetRemoveSfxBlock(Value: Boolean); begin CheckNotCompressing; FRemoveSfxBlock := Value; end; procedure TJcl7zCompressArchive.SetSaveCreationDateTime(Value: Boolean); begin CheckNotCompressing; FSaveCreationDateTime := Value; end; procedure TJcl7zCompressArchive.SetSaveLastAccessDateTime(Value: Boolean); begin CheckNotCompressing; FSaveLastAccessDateTime := Value; end; procedure TJcl7zCompressArchive.SetSaveLastWriteDateTime(Value: Boolean); begin CheckNotCompressing; FSaveLastWriteDateTime := Value; end; procedure TJcl7zCompressArchive.SetSolidBlockSize(const Value: Int64); begin CheckNotCompressing; FSolidBlockSize := Value; end; procedure TJcl7zCompressArchive.SetSolidExtension(Value: Boolean); begin CheckNotCompressing; FSolidExtension := Value; end; //=== { TJclZipCompressArchive } ============================================= class function TJclZipCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipCompressArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclZipCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclZipCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclZipCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclZipCompressArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclZipCompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclZipCompressArchive.GetEncryptionMethod: TJclEncryptionMethod; begin Result := FEncryptionMethod; end; function TJclZipCompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclZipCompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJclZipCompressArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result, 2); Result[0] := 0; Result[1] := 1; end; function TJclZipCompressArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmCopy,cmDeflate,cmDeflate64,cmBZip2,cmLZMA,cmPPMd]; end; function TJclZipCompressArchive.GetSupportedEncryptionMethods: TJclEncryptionMethods; begin Result := [emNone,emAES128,emAES192,emAES256,emZipCrypto]; end; procedure TJclZipCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptionMethod := emZipCrypto; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FCompressionMethod := cmDeflate; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; class function TJclZipCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipCompressArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; if (Value = 0) or (Value = 1) then FAlgorithm := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; case FCompressionMethod of cmDeflate, cmDeflate64: begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; cmBZip2: begin if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end; cmLZMA: begin if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; end; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetCompressionMethod(Value: TJclCompressionMethod); begin CheckNotCompressing; if Value in GetSupportedCompressionMethods then FCompressionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJclZipCompressArchive.SetEncryptionMethod(Value: TJclEncryptionMethod); begin CheckNotCompressing; if Value in GetSupportedEncryptionMethods then FEncryptionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipCompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; procedure TJclZipCompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2CompressArchive } ============================================= class function TJclBZ2CompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2CompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2CompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2CompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2CompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclBZ2CompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclBZ2CompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclBZ2CompressArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclBZ2CompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclBZ2CompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2CompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FNumberOfPasses := kBZip2NumPassesX7; end; procedure TJclBZ2CompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclBZ2CompressArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; FDictionarySize := Value; end; procedure TJclBZ2CompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; procedure TJclBZ2CompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; FNumberOfThreads := Value; end; //=== { TJclTarCompressArchive } ============================================= class function TJclTarCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarCompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipCompressArchive } ============================================ class function TJclGZipCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipCompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; function TJclGZipCompressArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclGZipCompressArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclGZipCompressArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclGZipCompressArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclGZipCompressArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclGZipCompressArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; procedure TJclGZipCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionLevel := 7; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; procedure TJclGZipCompressArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; FAlgorithm := Value; end; procedure TJclGZipCompressArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; if Value <= 9 then begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclGZipCompressArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; FNumberOfPasses := Value; end; //=== { TJclXzCompressArchive } ============================================== class function TJclXzCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzName); end; class function TJclXzCompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; function TJclXzCompressArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclXzCompressArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmLZMA2]; end; procedure TJclXzCompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionMethod := cmLZMA2; end; procedure TJclXzCompressArchive.SetCompressionMethod( Value: TJclCompressionMethod); begin CheckNotCompressing; FCompressionMethod := Value; end; //=== { TJclSwfcCompressArchive } ============================================ class function TJclSwfcCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; //=== { TJclWimCompressArchive } ============================================= class function TJclWimCompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatWim; end; class function TJclWimCompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionWimExtensions); end; class function TJclWimCompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionWimName); end; //=== { TJclSevenzipOpenCallback } =========================================== constructor TJclSevenzipOpenCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipOpenCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then begin if Length(FArchive.FPassword) = 0 then begin if Assigned(FArchive.OnPassword) then FArchive.OnPassword(FArchive, FArchive.FPassword); end; password^ := SysAllocString(PWideChar(FArchive.Password)); end; Result := S_OK; end; function TJclSevenzipOpenCallback.SetCompleted(Files, Bytes: PInt64): HRESULT; begin Result := S_OK; if Assigned(Files) and not FArchive.DoProgress(Files^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipOpenCallback.SetTotal(Files, Bytes: PInt64): HRESULT; begin if Assigned(Files) then FArchive.FProgressMax := Files^; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipExtractCallback } ======================================== constructor TJclSevenzipExtractCallback.Create( AArchive: TJclCompressionArchive); begin inherited Create; FArchive := AArchive; end; function TJclSevenzipExtractCallback.CryptoGetTextPassword( password: PBStr): HRESULT; begin if Assigned(password) then begin if Length(FArchive.FPassword) = 0 then begin if Assigned(FArchive.OnPassword) then FArchive.OnPassword(FArchive, FArchive.FPassword); end; password^ := SysAllocString(PWideChar(FArchive.Password)); end; Result := S_OK; end; function TJclSevenzipExtractCallback.GetStream(Index: Cardinal; out OutStream: ISequentialOutStream; askExtractMode: Cardinal): HRESULT; begin FLastStream := Index; Assert(askExtractMode in [kExtract, kTest, kSkip]); if askExtractMode in [kTest, kSkip] then begin OutStream := nil; Result := S_OK; end else if FArchive.Items[Index].ValidateExtraction(Index) then begin OutStream := TJclSevenzipOutStream.Create(FArchive, Index); Result := S_OK; end else begin OutStream := nil; Result := S_FALSE; end; end; function TJclSevenzipExtractCallback.PrepareOperation( askExtractMode: Cardinal): HRESULT; begin Result := S_OK; end; function TJclSevenzipExtractCallback.SetCompleted( CompleteValue: PInt64): HRESULT; begin Result := S_OK; if Assigned(CompleteValue) and not FArchive.DoProgress(CompleteValue^, FArchive.FProgressMax) then Result := E_ABORT; end; function TJclSevenzipExtractCallback.SetOperationResult( resultEOperationResult: Integer): HRESULT; var LastItem: TJclCompressionItem; begin LastItem := FArchive.Items[FLastStream]; case resultEOperationResult of kOK: begin LastItem.OperationSuccess := osOK; LastItem.UpdateFileTimes; end; kUnSupportedMethod: begin LastItem.OperationSuccess := osUnsupportedMethod; LastItem.DeleteOutputFile; end; kDataError: begin LastItem.OperationSuccess := osDataError; LastItem.DeleteOutputFile; end; kCRCError: begin LastItem.OperationSuccess := osCRCError; LastItem.DeleteOutputFile; end else LastItem.OperationSuccess := osUnknownError; LastItem.DeleteOutputFile; end; Result := S_OK; end; function TJclSevenzipExtractCallback.SetRatioInfo(InSize, OutSize: PInt64): HRESULT; var AInSize, AOutSize: Int64; begin if Assigned(InSize) then AInSize := InSize^ else AInSize := -1; if Assigned(OutSize) then AOutSize := OutSize^ else AOutSize := -1; if FArchive.DoRatio(AInSize, AOutSize) then Result := S_OK else Result := E_ABORT; end; function TJclSevenzipExtractCallback.SetTotal(Total: Int64): HRESULT; begin FArchive.FProgressMax := Total; if FArchive.CancelCurrentOperation then Result := E_ABORT else Result := S_OK; end; //=== { TJclSevenzipDecompressItem } ========================================= function TJclSevenzipDecompressItem.GetNestedArchiveStream: TStream; var SequentialInStream: ISequentialInStream; InStream: IInStream; InterfaceID: TGUID; begin if Archive.SupportsNestedArchive and (Archive is TJclSevenzipDecompressArchive) then begin SevenzipCheck(TJclSevenzipDecompressArchive(Archive).InArchiveGetStream.GetStream(PackedIndex, SequentialInStream)); InterfaceID := IInStream; SevenzipCheck(SequentialInStream.QueryInterface(InterfaceID, InStream)); Result := TJclSevenzipNestedInStream.Create(InStream); end else Result := inherited GetNestedArchiveStream; end; //=== { TJclSevenzipDecompressArchive } ====================================== class function TJclSevenzipDecompressArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; class function TJclSevenzipDecompressArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; destructor TJclSevenzipDecompressArchive.Destroy; begin FInArchive := nil; FInArchiveGetStream := nil; inherited Destroy; end; procedure TJclSevenzipDecompressArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; FExtractingAllIndex := 0; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; // seems buggy: first param "indices" is dereferenced without // liveness checks inside Sevenzip code //SevenzipCheck(InArchive.Extract(nil, $FFFFFFFF, 0, AExtractCallback)); NbIndices := ItemCount; SetLength(Indices, NbIndices); for Index := 0 to NbIndices - 1 do begin Items[Index].Selected := True; Indices[Index] := Index; end; SevenzipCheck(InArchive.Extract(@Indices[0], NbIndices, 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; FExtractingAllIndex := -1; FCurrentItemIndex := -1; AExtractCallback := nil; // release volumes and other finalizations inherited ExtractAll(ADestinationDir, AAutoCreateSubDir); end; end; procedure TJclSevenzipDecompressArchive.ExtractSelected(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then Inc(NbIndices); SetLength(Indices, NbIndices); NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then begin Indices[NbIndices] := Index; Inc(NbIndices); end; SevenzipCheck(InArchive.Extract(@Indices[0], Length(Indices), 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; FCurrentItemIndex := -1; // release volumes and other finalizations inherited ExtractSelected(ADestinationDir, AAutoCreateSubDir); end; end; function TJclSevenzipDecompressArchive.GetInArchive: IInArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FInArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IInArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FInArchive) <> ERROR_SUCCESS) or not Assigned(FInArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zInArchiveError, [GUIDToString(SevenzipCLSID)]); FExtractingAllIndex := -1; end; Result := FInArchive; end; function TJclSevenzipDecompressArchive.GetInArchiveGetStream: IInArchiveGetStream; var InterfaceID: TGUID; begin if not Assigned(FInArchiveGetStream) then begin InterfaceID := Sevenzip.IInArchiveGetStream; SevenzipCheck(InArchive.QueryInterface(InterfaceID, FInArchiveGetStream)); end; Result := FInArchiveGetStream; end; function TJclSevenzipDecompressArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclSevenzipDecompressItem; end; function TJclSevenzipDecompressArchive.GetSupportsNestedArchive: Boolean; var InterfaceID: TGUID; begin Result := Assigned(FInArchiveGetStream); if not Result then begin InterfaceID := Sevenzip.IInArchiveGetStream; Result := InArchive.QueryInterface(InterfaceID, FInArchiveGetStream) = ERROR_SUCCESS; end; end; procedure TJclSevenzipDecompressArchive.ListFiles; var NumberOfItems: Cardinal; Index: Integer; AItem: TJclCompressionItem; begin CheckNotDecompressing; FListing := True; try ClearItems; OpenArchive; SevenzipCheck(InArchive.GetNumberOfItems(@NumberOfItems)); if NumberOfItems > 0 then begin for Index := 0 to NumberOfItems - 1 do begin AItem := GetItemClass.Create(Self); Load7zFileAttribute(InArchive, Index, AItem); FItems.Add(AItem); end; end; finally FListing := False; end; end; procedure TJclSevenzipDecompressArchive.OpenArchive; var SplitStream: TJclDynamicSplitStream; OpenCallback: IArchiveOpenCallback; MaxCheckStartPosition: Int64; AInStream: IInStream; begin if not FOpened then begin if (VolumeFileNameMask <> '') or (VolumeMaxSize <> 0) or (FVolumes.Count <> 0) then begin SplitStream := TJclDynamicSplitStream.Create(False); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; AInStream := TJclSevenzipInStream.Create(SplitStream, True); end else AInStream := TJclSevenzipInStream.Create(NeedStream(0), False); OpenCallback := TJclSevenzipOpenCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, InArchive); MaxCheckStartPosition := 1 shl 22; SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback)); GetSevenzipArchiveCompressionProperties(Self, InArchive); FOpened := True; end; end; //=== { TJclZipDecompressArchive } =========================================== class function TJclZipDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipDecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclZipDecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; class function TJclZipDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipDecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2DecompressArchive } =========================================== class function TJclBZ2DecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2DecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2DecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2DecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2DecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2DecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; procedure TJclBZ2DecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclRarDecompressArchive } =========================================== class function TJclRarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionRarExtensions); end; class function TJclRarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionRarName); end; class function TJclRarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatRar; end; class function TJclRarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclArjDecompressArchive } =========================================== class function TJclArjDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionArjExtensions); end; class function TJclArjDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionArjName); end; class function TJclArjDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatArj; end; class function TJclArjDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclZDecompressArchive } ============================================= class function TJclZDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZExtensions); end; class function TJclZDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZName); end; class function TJclZDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionZSubExtensions); end; class function TJclZDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZ; end; class function TJclZDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclLzhDecompressArchive } =========================================== class function TJclLzhDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzhExtensions); end; class function TJclLzhDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzhName); end; class function TJclLzhDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzh; end; class function TJclLzhDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJcl7zDecompressArchive } ============================================ class function TJcl7zDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zDecompressArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJcl7zDecompressArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; end; class function TJcl7zDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zDecompressArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclCabDecompressArchive } =========================================== class function TJclCabDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCabExtensions); end; class function TJclCabDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCabName); end; class function TJclCabDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCab; end; class function TJclCabDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclNsisDecompressArchive } ========================================== class function TJclNsisDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionNsisExtensions); end; class function TJclNsisDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionNsisName); end; class function TJclNsisDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatNsis; end; class function TJclNsisDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclLzmaDecompressArchive } ========================================== class function TJclLzmaDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzmaExtensions); end; class function TJclLzmaDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzmaName); end; class function TJclLzmaDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzma; end; class function TJclLzmaDecompressArchive.MultipleItemContainer: Boolean; begin Result := False; end; //=== { TJclLzma86DecompressArchive } ======================================== class function TJclLzma86DecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionLzma86Extensions); end; class function TJclLzma86DecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionLzma86Name); end; class function TJclLzma86DecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatLzma86; end; class function TJclLzma86DecompressArchive.MultipleItemContainer: Boolean; begin Result := False; end; //=== { TJclPeDecompressArchive } ============================================ class function TJclPeDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionPeExtensions); end; class function TJclPeDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionPeName); end; class function TJclPeDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatPe; end; class function TJclPeDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclElfDecompressArchive } =========================================== class function TJclElfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionElfExtensions); end; class function TJclElfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionElfName); end; class function TJclElfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatElf; end; class function TJclElfDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMachoDecompressArchive } ========================================= class function TJclMachoDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMachoExtensions); end; class function TJclMachoDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMachoName); end; class function TJclMachoDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMacho; end; class function TJclMachoDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclUdfDecompressArchive } ========================================== class function TJclUdfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUdfExtensions); end; class function TJclUdfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUdfName); end; class function TJclUdfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUdf; end; class function TJclUdfDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclXarDecompressArchive } =========================================== class function TJclXarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXarExtensions); end; class function TJclXarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXarName); end; class function TJclXarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXar; end; class function TJclXarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMubDecompressArchive } =========================================== class function TJclMubDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMubExtensions); end; class function TJclMubDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMubName); end; class function TJclMubDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMub; end; class function TJclMubDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclHfsDecompressArchive } =========================================== class function TJclHfsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionHfsExtensions); end; class function TJclHfsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionHfsName); end; class function TJclHfsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatHfs; end; class function TJclHfsDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclDmgDecompressArchive } =========================================== class function TJclDmgDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionDmgExtensions); end; class function TJclDmgDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionDmgName); end; class function TJclDmgDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatDmg; end; class function TJclDmgDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclCompoundDecompressArchive } ====================================== class function TJclCompoundDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCompoundExtensions); end; class function TJclCompoundDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCompoundName); end; class function TJclCompoundDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCompound; end; class function TJclCompoundDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclWimDecompressArchive } =========================================== class function TJclWimDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionWimExtensions); end; class function TJclWimDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionWimName); end; class function TJclWimDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatWim; end; class function TJclWimDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclIsoDecompressArchive } =========================================== class function TJclIsoDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionIsoExtensions); end; class function TJclIsoDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionIsoName); end; class function TJclIsoDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatIso; end; class function TJclIsoDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclChmDecompressArchive } =========================================== class function TJclChmDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionChmExtensions); end; class function TJclChmDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionChmName); end; class function TJclChmDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatChm; end; class function TJclChmDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclSplitDecompressArchive } ========================================= class function TJclSplitDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSplitExtensions); end; class function TJclSplitDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSplitName); end; class function TJclSplitDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSplit; end; //=== { TJclRpmDecompressArchive } =========================================== class function TJclRpmDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionRpmExtensions); end; class function TJclRpmDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionRpmName); end; class function TJclRpmDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatRpm; end; class function TJclRpmDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclDebDecompressArchive } =========================================== class function TJclDebDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionDebExtensions); end; class function TJclDebDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionDebName); end; class function TJclDebDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatDeb; end; class function TJclDebDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclCpioDecompressArchive } ========================================== class function TJclCpioDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCpioExtensions); end; class function TJclCpioDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCpioName); end; class function TJclCpioDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCpio; end; class function TJclCpioDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclTarDecompressArchive } =========================================== class function TJclTarDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipDecompressArchive } ========================================== class function TJclGZipDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; //=== { TJclXzDecompressArchive } ============================================ class function TJclXzDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzName); end; class function TJclXzDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; //=== { TJclNtfsDecompressArchive } ========================================== class function TJclNtfsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionNtfsExtensions); end; class function TJclNtfsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionNtfsName); end; class function TJclNtfsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatNtfs; end; class function TJclNtfsDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclFatDecompressArchive } =========================================== class function TJclFatDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionFatExtensions); end; class function TJclFatDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionFatName); end; class function TJclFatDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatFat; end; class function TJclFatDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclMbrDecompressArchive } =========================================== class function TJclMbrDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMbrExtensions); end; class function TJclMbrDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMbrName); end; class function TJclMbrDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMbr; end; class function TJclMbrDecompressArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclVhdDecompressArchive } =========================================== class function TJclVhdDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionVhdExtensions); end; class function TJclVhdDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionVhdName); end; class function TJclVhdDecompressArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionVhdSubExtensions); end; class function TJclVhdDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatVhd; end; //=== { TJclMslzDecompressArchive } ========================================== class function TJclMslzDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionMslzExtensions); end; class function TJclMslzDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionMslzName); end; class function TJclMslzDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatMslz; end; //=== { TJclFlvDecompressArchive } =========================================== class function TJclFlvDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionFlvExtensions); end; class function TJclFlvDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionFlvName); end; class function TJclFlvDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatFlv; end; //=== { TJclSwfDecompressArchive } =========================================== class function TJclSwfDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfExtensions); end; class function TJclSwfDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfName); end; class function TJclSwfDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwf; end; //=== { TJclSwfcDecompressArchive } ========================================== class function TJclSwfcDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; //=== { TJclAPMDecompressArchive } =========================================== class function TJclAPMDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionApmExtensions); end; class function TJclAPMDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionApmName); end; class function TJclAPMDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatAPM; end; //=== { TJclPpmdDecompressArchive } ========================================== class function TJclPpmdDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionPpmdExtensions); end; class function TJclPpmdDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionPpmdName); end; class function TJclPpmdDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatPpmd; end; //=== { TJclTEDecompressArchive } ============================================ class function TJclTEDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTEExtensions); end; class function TJclTEDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTEName); end; class function TJclTEDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTE; end; //=== { TJclUEFIcDecompressArchive } ========================================= class function TJclUEFIcDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUEFIcExtensions); end; class function TJclUEFIcDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUEFIcName); end; class function TJclUEFIcDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUEFIc; end; //=== { TJclUEFIsDecompressArchive } ========================================= class function TJclUEFIsDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionUEFIsExtensions); end; class function TJclUEFIsDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionUEFIsName); end; class function TJclUEFIsDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatUEFIs; end; //=== { TJclSquashFSDecompressArchive } ====================================== class function TJclSquashFSDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSquashFSExtensions); end; class function TJclSquashFSDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSquashFSName); end; class function TJclSquashFSDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSquashFS; end; //=== { TJclCramFSDecompressArchive } ======================================== class function TJclCramFSDecompressArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionCramFSExtensions); end; class function TJclCramFSDecompressArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionCramFSName); end; class function TJclCramFSDecompressArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatCramFS; end; //=== { TJclSevenzipUpdateArchive } ========================================== class function TJclSevenzipUpdateArchive.ArchiveCLSID: TGUID; begin Result := GUID_NULL; end; destructor TJclSevenzipUpdateArchive.Destroy; begin FInArchive := nil; FOutArchive := nil; inherited Destroy; end; class function TJclSevenzipUpdateArchive.ArchiveSignature: TDynByteArray; begin Result := Get7zArchiveSignature(ArchiveCLSID); end; procedure TJclSevenzipUpdateArchive.Compress; var OutStream: IOutStream; UpdateCallback: IArchiveUpdateCallback; SplitStream: TJclDynamicSplitStream; begin CheckNotCompressing; CheckNotDecompressing; FCompressing := True; try SplitStream := TJclDynamicSplitStream.Create(True); SplitStream.OnVolume := NeedTmpStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; OutStream := TJclSevenzipOutStream.Create(SplitStream, True, True); UpdateCallback := TJclSevenzipUpdateCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, OutArchive); SevenzipCheck(OutArchive.UpdateItems(OutStream, ItemCount, UpdateCallback)); finally FCompressing := False; // release reference to volume streams OutStream := nil; // replace streams by tmp streams inherited Compress; end; end; procedure TJclSevenzipUpdateArchive.DeleteItem(Index: Integer); var I, BaseLength: Integer; IsDirectory: Boolean; AItem: TJclCompressionItem; DirectoryName: WideString; begin AItem := Items[Index]; IsDirectory := (AItem.Attributes and faDirectory) <> 0; DirectoryName := AItem.PackedName + DirDelimiter; FItems.Delete(Index); if IsDirectory then begin BaseLength := Length(DirectoryName); for I := ItemCount - 1 downto 0 do if WideSameText(DirectoryName, Copy(Items[I].PackedName, 1, BaseLength)) then FItems.Delete(I); end; end; procedure TJclSevenzipUpdateArchive.ExtractAll(const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; CheckNotCompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; FExtractingAllIndex := 0; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; // seems buggy: first param "indices" is dereferenced without // liveness checks inside Sevenzip code //SevenzipCheck(InArchive.Extract(nil, $FFFFFFFF, 0, AExtractCallback)); NbIndices := ItemCount; SetLength(Indices, NbIndices); for Index := 0 to NbIndices - 1 do begin Items[Index].Selected := True; Indices[Index] := Index; end; SevenzipCheck(InArchive.Extract(@Indices[0], NbIndices, 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; FExtractingAllIndex := -1; FCurrentItemIndex := -1; AExtractCallback := nil; // release volumes and other finalizations inherited ExtractAll(ADestinationDir, AAutoCreateSubDir); end; end; procedure TJclSevenzipUpdateArchive.ExtractSelected( const ADestinationDir: string; AAutoCreateSubDir: Boolean); var AExtractCallback: IArchiveExtractCallback; Indices: array of Cardinal; NbIndices: Cardinal; Index: Integer; begin CheckNotDecompressing; CheckNotCompressing; FDestinationDir := ADestinationDir; FAutoCreateSubDir := AAutoCreateSubDir; if FDestinationDir <> '' then FDestinationDir := PathAddSeparator(FDestinationDir); FDecompressing := True; AExtractCallback := TJclSevenzipExtractCallback.Create(Self); try OpenArchive; NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then Inc(NbIndices); SetLength(Indices, NbIndices); NbIndices := 0; for Index := 0 to ItemCount - 1 do if Items[Index].Selected then begin Indices[NbIndices] := Index; Inc(NbIndices); end; SevenzipCheck(InArchive.Extract(@Indices[0], Length(Indices), 0, AExtractCallback)); CheckOperationSuccess; finally FDestinationDir := ''; FDecompressing := False; AExtractCallback := nil; FCurrentItemIndex := -1; // release volumes and other finalizations inherited ExtractSelected(ADestinationDir, AAutoCreateSubDir); end; end; function TJclSevenzipUpdateArchive.GetInArchive: IInArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FInArchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IInArchive; if (not Is7ZipLoaded) and (not Load7Zip) then raise EJclCompressionError.CreateRes(@RsCompression7zLoadError); if (Sevenzip.CreateObject(@SevenzipCLSID, @InterfaceID, FInArchive) <> ERROR_SUCCESS) or not Assigned(FInArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zInArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FInArchive; end; function TJclSevenzipUpdateArchive.GetItemClass: TJclCompressionItemClass; begin Result := TJclUpdateItem; end; function TJclSevenzipUpdateArchive.GetOutArchive: IOutArchive; var SevenzipCLSID, InterfaceID: TGUID; begin if not Assigned(FOutarchive) then begin SevenzipCLSID := ArchiveCLSID; InterfaceID := Sevenzip.IOutArchive; if not Supports(InArchive, InterfaceID, FOutArchive) or not Assigned(FOutArchive) then raise EJclCompressionError.CreateResFmt(@RsCompression7zOutArchiveError, [GUIDToString(SevenzipCLSID)]); end; Result := FOutArchive; end; procedure TJclSevenzipUpdateArchive.ListFiles; var NumberOfItems: Cardinal; Index: Integer; AItem: TJclCompressionItem; begin CheckNotDecompressing; CheckNotCompressing; FListing := True; try ClearItems; OpenArchive; SevenzipCheck(InArchive.GetNumberOfItems(@NumberOfItems)); if NumberOfItems > 0 then begin for Index := 0 to NumberOfItems - 1 do begin AItem := GetItemClass.Create(Self); Load7zFileAttribute(InArchive, Index, AItem); FItems.Add(AItem); end; end; finally FListing := False; end; end; procedure TJclSevenzipUpdateArchive.OpenArchive; var OpenCallback: IArchiveOpenCallback; MaxCheckStartPosition: Int64; AInStream: IInStream; SplitStream: TJclDynamicSplitStream; begin if not FOpened then begin SplitStream := TJclDynamicSplitStream.Create(True); SplitStream.OnVolume := NeedStream; SplitStream.OnVolumeMaxSize := NeedStreamMaxSize; AInStream := TJclSevenzipInStream.Create(SplitStream, True); OpenCallback := TJclSevenzipOpenCallback.Create(Self); SetSevenzipArchiveCompressionProperties(Self, InArchive); MaxCheckStartPosition := 1 shl 22; SevenzipCheck(InArchive.Open(AInStream, @MaxCheckStartPosition, OpenCallback)); GetSevenzipArchiveCompressionProperties(Self, InArchive); FOpened := True; end; end; procedure TJclSevenzipUpdateArchive.RemoveItem(const PackedName: WideString); var Index, BaseLength, PackedNamesIndex: Integer; IsDirectory: Boolean; AItem: TJclCompressionItem; DirectoryName: WideString; begin IsDirectory := False; for Index := 0 to ItemCount - 1 do begin AItem := Items[Index]; if WideSameText(AItem.PackedName, PackedName) then begin DirectoryName := AItem.PackedName; if (AItem.Attributes and faDirectory) <> 0 then IsDirectory := True; FItems.Delete(Index); PackedNamesIndex := -1; if (FPackedNames <> nil) and FPackedNames.Find(PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); Break; end; end; if IsDirectory then begin DirectoryName := PackedName + DirDelimiter; BaseLength := Length(DirectoryName); for Index := ItemCount - 1 downto 0 do if WideSameText(DirectoryName, Copy(Items[Index].PackedName, 1, BaseLength)) then begin if (FPackedNames <> nil) and FPackedNames.Find(Items[Index].PackedName, PackedNamesIndex) then FPackedNames.Delete(PackedNamesIndex); FItems.Delete(Index); end; end; end; //=== { TJclZipUpdateArchive } =============================================== class function TJclZipUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionZipExtensions); end; class function TJclZipUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionZipName); end; class function TJclZipUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatZip; end; function TJclZipUpdateArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclZipUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclZipUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclZipUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclZipUpdateArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclZipUpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclZipUpdateArchive.GetEncryptionMethod: TJclEncryptionMethod; begin Result := FEncryptionMethod; end; function TJclZipUpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclZipUpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJclZipUpdateArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; function TJclZipUpdateArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmCopy,cmDeflate,cmDeflate64,cmBZip2,cmLZMA]; end; function TJclZipUpdateArchive.GetSupportedEncryptionMethods: TJclEncryptionMethods; begin Result := [emNone,emAES128,emAES192,emAES256,emZipCrypto]; end; procedure TJclZipUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptionMethod := emZipCrypto; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FCompressionMethod := cmDeflate; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; class function TJclZipUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJclZipUpdateArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if (Value = 0) or (Value = 1) then FAlgorithm := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; case FCompressionMethod of cmDeflate, cmDeflate64: begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; cmBZip2: begin if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end; cmLZMA: begin if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end; end; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetCompressionMethod(Value: TJclCompressionMethod); begin CheckNotCompressing; CheckNotDecompressing; if Value in GetSupportedCompressionMethods then FCompressionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJclZipUpdateArchive.SetEncryptionMethod(Value: TJclEncryptionMethod); begin CheckNotCompressing; CheckNotDecompressing; if Value in GetSupportedEncryptionMethods then FEncryptionMethod := Value else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclZipUpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; procedure TJclZipUpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJclBZ2UpdateArchive } =============================================== class function TJclBZ2UpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionBZip2Extensions); end; class function TJclBZ2UpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionBZip2Name); end; class function TJclBZ2UpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionBZip2SubExtensions); end; class function TJclBZ2UpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatBZ2; end; function TJclBZ2UpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclBZ2UpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclBZ2UpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclBZ2UpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJclBZ2UpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclBZ2UpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; procedure TJclBZ2UpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FDictionarySize := kBZip2DicSizeX5; FCompressionLevel := 7; FNumberOfPasses := kBZip2NumPassesX7; end; procedure TJclBZ2UpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FNumberOfPasses := kBZip2NumPassesX9 else if Value >= 7 then FNumberOfPasses := kBZip2NumPassesX7 else FNumberOfPasses := kBZip2NumPassesX1; if Value >= 5 then FDictionarySize := kBZip2DicSizeX5 else if Value >= 3 then FDictionarySize := kBZip2DicSizeX3 else FDictionarySize := kBZip2DicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclBZ2UpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJclBZ2UpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; procedure TJclBZ2UpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; //=== { TJcl7zUpdateArchive } ================================================ class function TJcl7zUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompression7zExtensions); end; class function TJcl7zUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompression7zName); end; class function TJcl7zUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormat7z; end; function TJcl7zUpdateArchive.GetCompressHeader: Boolean; begin Result := FCompressHeader; end; function TJcl7zUpdateArchive.GetCompressHeaderFull: Boolean; begin Result := FCompressHeaderFull; end; function TJcl7zUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJcl7zUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJcl7zUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJcl7zUpdateArchive.GetDictionarySize: Cardinal; begin Result := FDictionarySize; end; function TJcl7zUpdateArchive.GetEncryptHeader: Boolean; begin Result := FEncryptHeader; end; function TJcl7zUpdateArchive.GetNumberOfThreads: Cardinal; begin Result := FNumberOfThreads; end; function TJcl7zUpdateArchive.GetRemoveSfxBlock: Boolean; begin Result := FRemoveSfxBlock; end; function TJcl7zUpdateArchive.GetSaveCreationDateTime: Boolean; begin Result := FSaveCreationDateTime; end; function TJcl7zUpdateArchive.GetSaveLastAccessDateTime: Boolean; begin Result := FSaveLastAccessDateTime; end; function TJcl7zUpdateArchive.GetSaveLastWriteDateTime: Boolean; begin Result := FSaveLastWriteDateTime; end; procedure TJcl7zUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FNumberOfThreads := 1; FEncryptHeader := False; FRemoveSfxBlock := False; FDictionarySize := kLzmaDicSizeX5; FCompressionLevel := 6; FCompressHeader := False; FCompressHeaderFull := False; FSaveLastAccessDateTime := True; FSaveCreationDateTime := True; FSaveLastWriteDateTime := True; end; class function TJcl7zUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; procedure TJcl7zUpdateArchive.SetCompressHeader(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FCompressHeader := Value; end; procedure TJcl7zUpdateArchive.SetCompressHeaderFull(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FCompressHeaderFull := Value; end; procedure TJcl7zUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin FCompressionLevel := Value; if Value >= 9 then FDictionarySize := kLzmaDicSizeX9 else if Value >= 7 then FDictionarySize := kLzmaDicSizeX7 else if Value >= 5 then FDictionarySize := kLzmaDicSizeX5 else if Value >= 3 then FDictionarySize := kLzmaDicSizeX3 else FDictionarySize := kLzmaDicSizeX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJcl7zUpdateArchive.SetDictionarySize(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FDictionarySize := Value; end; procedure TJcl7zUpdateArchive.SetEncryptHeader(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FEncryptHeader := Value; end; procedure TJcl7zUpdateArchive.SetNumberOfThreads(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfThreads := Value; end; procedure TJcl7zUpdateArchive.SetRemoveSfxBlock(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FRemoveSfxBlock := Value; end; procedure TJcl7zUpdateArchive.SetSaveCreationDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveCreationDateTime := Value; end; procedure TJcl7zUpdateArchive.SetSaveLastAccessDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveLastAccessDateTime := Value; end; procedure TJcl7zUpdateArchive.SetSaveLastWriteDateTime(Value: Boolean); begin CheckNotCompressing; CheckNotDecompressing; FSaveLastWriteDateTime := Value; end; //=== { TJclTarUpdateArchive } =============================================== class function TJclTarUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionTarExtensions); end; class function TJclTarUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionTarName); end; class function TJclTarUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatTar; end; class function TJclTarUpdateArchive.MultipleItemContainer: Boolean; begin Result := True; end; //=== { TJclGZipUpdateArchive } ============================================== class function TJclGZipUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionGZipExtensions); end; class function TJclGZipUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionGZipName); end; class function TJclGZipUpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionGZipSubExtensions); end; class function TJclGZipUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatGZip; end; function TJclGZipUpdateArchive.GetAlgorithm: Cardinal; begin Result := FAlgorithm; end; function TJclGZipUpdateArchive.GetCompressionLevel: Cardinal; begin Result := FCompressionLevel; end; function TJclGZipUpdateArchive.GetCompressionLevelMax: Cardinal; begin Result := 9; end; function TJclGZipUpdateArchive.GetCompressionLevelMin: Cardinal; begin Result := 0; end; function TJclGZipUpdateArchive.GetNumberOfPasses: Cardinal; begin Result := FNumberOfPasses; end; function TJclGZipUpdateArchive.GetSupportedAlgorithms: TDynCardinalArray; begin SetLength(Result,2); Result[0] := 0; Result[1] := 1; end; procedure TJclGZipUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionLevel := 7; FNumberOfPasses := kDeflateNumPassesX7; FAlgorithm := kLzAlgoX5; end; procedure TJclGZipUpdateArchive.SetAlgorithm(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FAlgorithm := Value; end; procedure TJclGZipUpdateArchive.SetCompressionLevel(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; if Value <= 9 then begin if Value >= 9 then FNumberOfPasses := kDeflateNumPassesX9 else if Value >= 7 then FNumberOfPasses := kDeflateNumPassesX7 else FNumberOfPasses := kDeflateNumPassesX1; if Value >= 5 then FAlgorithm := kLzAlgoX5 else FAlgorithm := kLzAlgoX1; end else raise EJclCompressionError.CreateRes(@RsCompressionUnavailableProperty); end; procedure TJclGZipUpdateArchive.SetNumberOfPasses(Value: Cardinal); begin CheckNotCompressing; CheckNotDecompressing; FNumberOfPasses := Value; end; //=== { TJclXzUpdateArchive } ================================================ class function TJclXzUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionXzExtensions); end; class function TJclXzUpdateArchive.ArchiveSubExtensions: string; begin Result := LoadResString(@RsCompressionXzSubExtensions); end; class function TJclXzUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatXz; end; function TJclXzUpdateArchive.GetCompressionMethod: TJclCompressionMethod; begin Result := FCompressionMethod; end; function TJclXzUpdateArchive.GetSupportedCompressionMethods: TJclCompressionMethods; begin Result := [cmLZMA2]; end; procedure TJclXzUpdateArchive.InitializeArchiveProperties; begin inherited InitializeArchiveProperties; FCompressionMethod := cmLZMA2 end; procedure TJclXzUpdateArchive.SetCompressionMethod( Value: TJclCompressionMethod); begin CheckNotDecompressing; CheckNotCompressing; FCompressionMethod := Value; end; //=== { TJclSwfcUpdateArchive } ============================================== class function TJclSwfcUpdateArchive.ArchiveExtensions: string; begin Result := LoadResString(@RsCompressionSwfcExtensions); end; class function TJclSwfcUpdateArchive.ArchiveName: string; begin Result := LoadResString(@RsCompressionSwfcName); end; class function TJclSwfcUpdateArchive.ArchiveCLSID: TGUID; begin Result := CLSID_CFormatSwfc; end; {$ENDIF MSWINDOWS} initialization {$IFDEF UNITVERSIONING} RegisterUnitVersion(HInstance, UnitVersioning); {$ENDIF UNITVERSIONING} finalization {$IFDEF UNITVERSIONING} UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} FreeAndNil(GlobalStreamFormats); FreeAndNil(GlobalArchiveFormats); end. ��������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipFunc.pas�������������������������������������������0000644�0001750�0000144�00000044420�12630666255�022534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipFunc; {$IFDEF FPC} {$MODE DELPHI} {$ENDIF} interface uses WcxPlugin; { Mandatory } function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;stdcall; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;stdcall; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;stdcall; function CloseArchive (hArcData : TArcHandle) : Integer;stdcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);stdcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);stdcall; { Optional } function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; stdcall; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; stdcall; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; stdcall; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); stdcall; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); stdcall; implementation uses JwaWinBase, Windows, SysUtils, Classes, JclCompression, SevenZip, SevenZipAdv, SevenZipDlg, SevenZipLng, SevenZipOpt, LazFileUtils, SyncObjs, LazUTF8; type { ESevenZipAbort } ESevenZipAbort = class(EJclCompressionError) end; { TSevenZipUpdate } TSevenZipUpdate = class(TThread) FPercent: Int64; FFileName: WideString; FPause: TEventObject; FProgress: TEventObject; FArchive: TJclCompressionArchive; public constructor Create; overload; constructor Create(Archive: TJclCompressionArchive); overload; destructor Destroy; override; public procedure Execute; override; function Update: Integer; virtual; procedure JclCompressionPassword(Sender: TObject; var Password: WideString); procedure JclCompressionProgress(Sender: TObject; const Value, MaxValue: Int64); virtual; end; { TSevenZipHandle } TSevenZipHandle = class(TSevenZipUpdate) Index, Count: LongWord; OpenMode, OperationMode: Integer; ProcessIndex: Cardinal; ArchiveName: String; ProcessArray: TCardinalArray; FileName: array of String; ProcessDataProc: TProcessDataProcW; public procedure Execute; override; function Update: Integer; override; procedure SetArchive(AValue: TJclDecompressArchive); function JclCompressionExtract(Sender: TObject; AIndex: Integer; var AFileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean; end; threadvar ProcessDataProcT: TProcessDataProcW; function GetArchiveError(const E: Exception): Integer; begin if E is EFOpenError then Result:= E_EOPEN else if E is EFCreateError then Result:= E_ECREATE else if E is EReadError then Result:= E_EREAD else if E is EWriteError then Result:= E_EWRITE else if E is ESevenZipAbort then Result:= E_EABORTED else if Pos(HexStr(E_OUTOFMEMORY, 8), E.Message) > 0 then Result:= E_NO_MEMORY else begin Result:= E_UNKNOWN_FORMAT; end; end; function WinToDosTime(const WinTime: TFILETIME; var DosTime: Cardinal): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle; stdcall; var I: Integer; ResultHandle: TSevenZipHandle; Archive: TJclDecompressArchive; AFormats: TJclDecompressArchiveClassArray; begin ResultHandle:= TSevenZipHandle.Create; with ResultHandle do begin Index:= 0; ProcessIndex:= 0; OpenMode:= ArchiveData.OpenMode; ArchiveName := Utf16ToUtf8(WideString(ArchiveData.ArcName)); AFormats := FindDecompressFormats(ArchiveName); for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(ArchiveName, 0, False); try SetArchive(Archive); Archive.ListFiles; Count:= Archive.ItemCount; if OpenMode = PK_OM_EXTRACT then begin SetLength(FileName, Count); SetLength(ProcessArray, Count); end; ArchiveData.OpenResult:= E_SUCCESS; Exit(TArcHandle(ResultHandle)); except on E: Exception do begin ArchiveData.OpenResult:= GetArchiveError(E); FreeAndNil(Archive); Continue; end; end; end; if (Archive = nil) then Free; end; Result:= 0; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer; stdcall; var Item: TJclCompressionItem; Handle: TSevenZipHandle absolute hArcData; begin with Handle do begin if Index >= Count then Exit(E_END_ARCHIVE); Item:= FArchive.Items[Index]; HeaderData.FileName:= Item.PackedName; HeaderData.UnpSize:= Int64Rec(Item.FileSize).Lo; HeaderData.UnpSizeHigh:= Int64Rec(Item.FileSize).Hi; HeaderData.PackSize:= Int64Rec(Item.PackedSize).Lo; HeaderData.PackSizeHigh:= Int64Rec(Item.PackedSize).Hi; HeaderData.FileAttr:= Item.Attributes; WinToDosTime(Item.LastWriteTime, LongWord(HeaderData.FileTime)); // Special case for BZip2, GZip and Xz archives if (HeaderData.FileName[0] = #0) then begin HeaderData.FileName:= GetNestedArchiveName(ArchiveName, Item); end; end; Result:= E_SUCCESS; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar): Integer; stdcall; var Handle: TSevenZipHandle absolute hArcData; begin try with Handle do case Operation of PK_TEST, PK_EXTRACT: begin if Operation = PK_EXTRACT then begin if Assigned(DestPath) then begin FileName[Index]:= IncludeTrailingPathDelimiter(Utf16ToUtf8(WideString(DestPath))) + Utf16ToUtf8(WideString(DestName)); end else begin FileName[Index]:= Utf16ToUtf8(WideString(DestName)); end; end; Result:= E_SUCCESS; OperationMode:= Operation; ProcessArray[ProcessIndex]:= Index; Inc(ProcessIndex); end; else Result:= E_SUCCESS; end; finally Inc(Handle.Index); end; end; function CloseArchive(hArcData: TArcHandle): Integer; stdcall; var Handle: TSevenZipHandle absolute hArcData; begin Result:= E_SUCCESS; if (hArcData <> wcxInvalidHandle) then with Handle do begin if OpenMode = PK_OM_EXTRACT then begin Start; Update; end; FArchive.Free; Free; end; end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW); stdcall; begin end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW); stdcall; var Handle: TSevenZipHandle absolute hArcData; begin if (hArcData = wcxInvalidHandle) then ProcessDataProcT:= pProcessDataProc else begin Handle.ProcessDataProc:= pProcessDataProc; end; end; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; stdcall; var I: Integer; Encrypt: Boolean; AMessage: String; Password: WideString; FilePath: WideString; FileName: WideString; SfxModule: String = ''; FileNameUTF8: String; AProgress: TSevenZipUpdate; Archive: TJclCompressArchive; AFormats: TJclCompressArchiveClassArray; begin if (Flags and PK_PACK_MOVE_FILES) <> 0 then Exit(E_NOT_SUPPORTED); FileNameUTF8 := Utf16ToUtf8(WideString(PackedFile)); // If update existing archive if (GetFileAttributesW(PackedFile) <> INVALID_FILE_ATTRIBUTES) then AFormats := TJclCompressArchiveClassArray(FindUpdateFormats(FileNameUTF8)) else begin if not SameText(ExtractFileExt(FileNameUTF8), '.exe') then AFormats := FindCompressFormats(FileNameUTF8) else begin // Only 7-Zip supports self-extract SfxModule := ExtractFilePath(SevenzipLibraryName) + '7z.sfx'; if FileExistsUTF8(SfxModule) then begin SetLength(AFormats, 1); AFormats[0] := TJcl7zCompressArchive; end else begin AMessage := SysErrorMessage(GetLastError) + LineEnding; AMessage += rsSevenZipSfxNotFound + LineEnding + SfxModule; MessageBox(0, PAnsiChar(AMessage), nil, MB_OK or MB_ICONERROR); Exit(E_NO_FILES); end; end; end; for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(FileNameUTF8, 0, False); try AProgress:= TSevenZipUpdate.Create(Archive); if (Flags and PK_PACK_ENCRYPT) <> 0 then begin Encrypt:= Archive is IJclArchiveEncryptHeader; if not ShowPasswordQuery(Encrypt, Password) then Exit(E_EABORTED) else begin Archive.Password:= Password; if Archive is TJcl7zUpdateArchive then TJcl7zUpdateArchive(Archive).SetEncryptHeader(Encrypt); if Archive is TJcl7zCompressArchive then TJcl7zCompressArchive(Archive).SetEncryptHeader(Encrypt); if Archive is TJclZipUpdateArchive then TJclZipUpdateArchive(Archive).SetEncryptionMethod(emAES256); if Archive is TJclZipCompressArchive then TJclZipCompressArchive(Archive).SetEncryptionMethod(emAES256); end; end; if (Archive is TJclUpdateArchive) then try TJclUpdateArchive(Archive).ListFiles; except Continue; end; SetArchiveOptions(Archive); if Archive is TJcl7zCompressArchive then begin TJcl7zCompressArchive(Archive).SfxModule := SfxModule; end; if Assigned(SubPath) then begin FilePath:= WideString(SubPath); if FilePath[Length(FilePath)] <> PathDelim then FilePath := FilePath + PathDelim; end; while True do begin FileName := WideString(AddList); FileNameUTF8:= Utf16ToUtf8(WideString(SrcPath + FileName)); if FileName[Length(FileName)] = PathDelim then Archive.AddDirectory(FilePath + FileName, FileNameUTF8) else Archive.AddFile(FilePath + FileName, FileNameUTF8); if (AddList + Length(FileName) + 1)^ = #0 then Break; Inc(AddList, Length(FileName) + 1); end; AProgress.Start; Exit(AProgress.Update); finally Archive.Free; AProgress.Free; end; end; Result:= E_NOT_SUPPORTED; end; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; stdcall; var I: Integer; PathEnd : WideChar; FileList : PWideChar; FileName : WideString; FileNameUTF8 : String; Archive: TJclUpdateArchive; AProgress: TSevenZipUpdate; AFormats: TJclUpdateArchiveClassArray; begin FileNameUTF8 := Utf16ToUtf8(WideString(PackedFile)); AFormats := FindUpdateFormats(FileNameUTF8); for I := Low(AFormats) to High(AFormats) do begin Archive := AFormats[I].Create(FileNameUTF8, 0, False); try AProgress:= TSevenZipUpdate.Create(Archive); try Archive.ListFiles; except Continue; end; // Parse file list. FileList := DeleteList; while FileList^ <> #0 do begin FileName := FileList; // Convert PWideChar to WideString (up to first #0) PathEnd := (FileList + Length(FileName) - 1)^; // If ends with '.../*.*' or '.../' then delete directory. if (PathEnd = '*') or (PathEnd = PathDelim) then TJclSevenzipUpdateArchive(Archive).RemoveDirectory(WideExtractFilePath(FileName)) else TJclSevenzipUpdateArchive(Archive).RemoveItem(FileName); FileList := FileList + Length(FileName) + 1; // move after filename and ending #0 if FileList^ = #0 then Break; // end of list end; AProgress.Start; Exit(AProgress.Update); finally Archive.Free; AProgress.Free; end; end; Result:= E_NOT_SUPPORTED; end; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; stdcall; begin Result:= FindDecompressFormats(Utf16ToUtf8(WideString(FileName))) <> nil; end; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); stdcall; var ModulePath: AnsiString; begin // Save configuration file name ConfigFile:= ExtractFilePath(dps^.DefaultIniName) + DefaultIniName; // Get plugin path if GetModulePath(ModulePath) then begin // Use configuration from plugin path if FileExistsUTF8(ModulePath + DefaultIniName) then ConfigFile:= UTF8ToSys(ModulePath) + DefaultIniName; end; // Load plugin configuration LoadConfiguration; // Try to find library path if FileExistsUTF8(LibraryPath) then SevenzipLibraryName:= LibraryPath else if Length(ModulePath) > 0 then begin if FileExistsUTF8(ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName) then SevenzipLibraryName:= ModulePath + TargetCPU + PathDelim + SevenzipDefaultLibraryName else if FileExistsUTF8(ModulePath + SevenzipDefaultLibraryName) then begin SevenzipLibraryName:= ModulePath + SevenzipDefaultLibraryName; end; end; // Process Xz files as archives GetArchiveFormats.RegisterFormat(TJclXzDecompressArchive); // Replace TJclXzCompressArchive by TJclXzCompressArchiveEx GetArchiveFormats.UnregisterFormat(TJclXzCompressArchive); GetArchiveFormats.RegisterFormat(TJclXzCompressArchiveEx); // Don't process PE files as archives GetArchiveFormats.UnregisterFormat(TJclPeDecompressArchive); // Try to load 7z.dll if not (Is7ZipLoaded or Load7Zip) then begin MessageBoxW(0, PWideChar(UTF8Decode(rsSevenZipLoadError)), 'SevenZip', MB_OK or MB_ICONERROR); end; end; procedure ConfigurePacker(Parent: WcxPlugin.HWND; DllInstance: THandle); stdcall; begin ShowConfigurationDialog(Parent); end; { TSevenZipUpdate } constructor TSevenZipUpdate.Create; begin inherited Create(True); FPause:= TEventObject.Create(nil, False, False, ''); FProgress:= TEventObject.Create(nil, False, False, ''); end; constructor TSevenZipUpdate.Create(Archive: TJclCompressionArchive); begin Create; FArchive:= Archive; Archive.OnPassword:= JclCompressionPassword; end; destructor TSevenZipUpdate.Destroy; begin FPause.Free; FProgress.Free; inherited Destroy; end; procedure TSevenZipUpdate.Execute; begin try (FArchive as TJclCompressArchive).Compress; ReturnValue:= E_SUCCESS; except on E: Exception do ReturnValue:= GetArchiveError(E); end; Terminate; FProgress.SetEvent; end; function TSevenZipUpdate.Update: Integer; var AllowCancel: Boolean; begin FArchive.OnProgress:= JclCompressionProgress; AllowCancel:= not (FArchive is TJclUpdateArchive); while not Terminated do begin // Wait progress event FProgress.WaitFor(INFINITE); // If the user has clicked on Cancel, the function returns zero FArchive.CancelCurrentOperation:= (ProcessDataProcT(PWideChar(FFileName), -FPercent) = 0) and AllowCancel; // Drop pause FPause.SetEvent; end; Result:= ReturnValue; end; procedure TSevenZipUpdate.JclCompressionPassword(Sender: TObject; var Password: WideString); var Encrypt: Boolean = False; begin if not ShowPasswordQuery(Encrypt, Password) then raise ESevenZipAbort.Create(EmptyStr); end; procedure TSevenZipUpdate.JclCompressionProgress(Sender: TObject; const Value, MaxValue: Int64); begin if MaxValue > 0 then begin FPercent:= (Value * 100) div MaxValue; end; if FArchive.ItemCount > 0 then begin FFileName:= FArchive.Items[FArchive.CurrentItemIndex].PackedName; end; // Fire progress event FProgress.SetEvent; // Check pause progress FPause.WaitFor(INFINITE); end; { TSevenZipHandle } procedure TSevenZipHandle.Execute; begin try SetLength(ProcessArray, ProcessIndex); TJclSevenzipDecompressArchive(FArchive).ProcessSelected(ProcessArray, OperationMode = PK_TEST); ReturnValue:= E_SUCCESS; except on E: Exception do begin ReturnValue:= GetArchiveError(E); MessageBox(0, PAnsiChar(E.Message), nil, MB_OK or MB_ICONERROR); end; end; Terminate; FProgress.SetEvent; end; function TSevenZipHandle.Update: Integer; begin FArchive.OnProgress:= JclCompressionProgress; while not Terminated do begin // Wait progress event FProgress.WaitFor(INFINITE); if Assigned(ProcessDataProc) then begin // If the user has clicked on Cancel, the function returns zero FArchive.CancelCurrentOperation:= ProcessDataProc(PWideChar(FFileName), -FPercent) = 0; end; // Drop pause FPause.SetEvent; end; Result:= ReturnValue; end; procedure TSevenZipHandle.SetArchive(AValue: TJclDecompressArchive); begin FArchive:= AValue; AValue.OnPassword := JclCompressionPassword; AValue.OnExtract := JclCompressionExtract; end; function TSevenZipHandle.JclCompressionExtract(Sender: TObject; AIndex: Integer; var AFileName: TFileName; var Stream: TStream; var AOwnsStream: Boolean): Boolean; begin Result:= True; AFileName:= FileName[AIndex]; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipDlg.res��������������������������������������������0000644�0001750�0000144�00000003320�12422770427�022343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� �������������������������4����D�I�A�L�O�G�_�C�F�G���������0 ��������Ȁ����������!����O�p�t�i�o�n�s����M�S� �S�h�e�l�l� �D�l�g�������P���� � �h��J�A�r�c�h�i�v�e� �&�f�o�r�m�a�t�:�������!P����r� �X�P�4���������P���� � �h��K�C�o�m�p�r�e�s�s�i�o�n� �&�l�e�v�e�l�:������!P����r��X�P�2���������P���� �5�h��P�C�o�m�p�r�e�s�s�i�o�n� �&�m�e�t�h�o�d�:��������!P����r�3�X�P�6���������P���� �J�h��Q�&�D�i�c�t�i�o�n�a�r�y� �s�i�z�e�:������!P����r�H�X��7���������P���� �_�h��R�&�W�o�r�d� �s�i�z�e�:������!P����r�]�X��8���������P���� �t�h��S�&�S�o�l�i�d� �B�l�o�c�k� �s�i�z�e�:��������!P����r�r�X��9���������P���� ��h��T�&�N�u�m�b�e�r� �o�f� �C�P�U� �t�h�r�e�a�d�s�:������!P����r��5��:��������P��������;�1�������P���� �����M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �C�o�m�p�r�e�s�s�i�n�g�:������P������(���0�������P���� �����M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �D�e�c�o�m�p�r�e�s�s�i�n�g�:������P������(���0�������P���� ����O�S�p�l�i�t� �t�o� �&�v�o�l�u�m�e�s�,� �b�y�t�e�s�:�����B�!P���� ���I�5���������P���� ����L�&�P�a�r�a�m�e�t�e�r�s�:��������P���� ����C�������P����� @����O�K��������P����M� @����C�a�n�c�e�l��������P����� @�� ��A�p�p�l�y�����h��4����D�I�A�L�O�G�_�P�W�D���������0 ��������Ȁ����������g�����E�n�t�e�r� �p�a�s�s�w�o�r�d����M�S� �S�h�e�l�l� �D�l�g�����P���������&�E�n�t�e�r� �p�a�s�s�w�o�r�d�:��������P���������������P���� �(�� ��&�S�h�o�w� �p�a�s�s�w�o�r�d�������P���� �K�@����O�K��������P����R�K�@����C�a�n�c�e�l�������P���� �7�� ����E�n�c�r�y�p�t� �f�i�l�e� �&�n�a�m�e�s���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipDlg.rc���������������������������������������������0000644�0001750�0000144�00000017074�12422770427�022171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������D�I�A�L�O�G�_�C�F�G� �D�I�A�L�O�G� �M�O�V�E�A�B�L�E� �P�U�R�E� �L�O�A�D�O�N�C�A�L�L� �D�I�S�C�A�R�D�A�B�L�E� �0�,� �0�,� �2�2�1�,� �2�8�9� � �S�T�Y�L�E� �D�S�_�S�E�T�F�O�N�T� �|�D�S�_�M�O�D�A�L�F�R�A�M�E� �|�D�S�_�C�E�N�T�E�R� �|�W�S�_�P�O�P�U�P� �|�W�S�_�S�Y�S�M�E�N�U� �|�W�S�_�C�A�P�T�I�O�N� � � �C�A�P�T�I�O�N� �"�O�p�t�i�o�n�s�"� � �F�O�N�T� �8�,� �"�M�S� �S�h�e�l�l� �D�l�g�"� � �L�A�N�G�U�A�G�E� �L�A�N�G�_�E�N�G�L�I�S�H�,� �1� � �B�E�G�I�N� � � � �C�O�N�T�R�O�L� �"�A�r�c�h�i�v�e� �&�f�o�r�m�a�t�:�"�,�1�0�9�8�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�1�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�6�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�C�B�S�_�S�O�R�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�9�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�C�o�m�p�r�e�s�s�i�o�n� �&�l�e�v�e�l�:�"�,�1�0�9�9�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�3�2�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�4�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�3�0�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�C�o�m�p�r�e�s�s�i�o�n� �&�m�e�t�h�o�d�:�"�,�1�1�0�4�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�5�3�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�8�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�5�1�,�8�8�,�8�0� � � � �C�O�N�T�R�O�L� �"�&�D�i�c�t�i�o�n�a�r�y� �s�i�z�e�:�"�,�1�1�0�5�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�7�4�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�9�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�7�2�,�8�8�,�1�6�7� � � � �C�O�N�T�R�O�L� �"�&�W�o�r�d� �s�i�z�e�:�"�,�1�1�0�6�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�9�5�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�0�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�9�3�,�8�8�,�1�4�1� � � � �C�O�N�T�R�O�L� �"�&�S�o�l�i�d� �B�l�o�c�k� �s�i�z�e�:�"�,�1�1�0�7�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�1�6�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�1�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�1�1�4�,�8�8�,�1�4�0� � � � �C�O�N�T�R�O�L� �"�&�N�u�m�b�e�r� �o�f� �C�P�U� �t�h�r�e�a�d�s�:�"�,�1�1�0�8�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�3�7�,�1�0�4�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�8�2�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N�L�I�S�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�1�4�,�1�3�5�,�5�3�,�1�4�0� � � � �C�O�N�T�R�O�L� �"�1�"�,�1�0�8�3�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�7�7�,�1�3�7�,�2�5�,�8� � � � �C�O�N�T�R�O�L� �"�M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �C�o�m�p�r�e�s�s�i�n�g�:�"�,�1�0�2�2�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�6�0�,�1�5�2�,�8� � � � �C�O�N�T�R�O�L� �"�0�"�,�1�0�2�7�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�6�2�,�1�6�0�,�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�M�e�m�o�r�y� �u�s�a�g�e� �f�o�r� �D�e�c�o�m�p�r�e�s�s�i�n�g�:�"�,�1�0�2�3�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�7�6�,�1�5�2�,�8� � � � �C�O�N�T�R�O�L� �"�0�"�,�1�0�2�8�,�"�S�T�A�T�I�C�"�,�S�S�_�R�I�G�H�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�6�2�,�1�7�6�,�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�S�p�l�i�t� �t�o� �&�v�o�l�u�m�e�s�,� �b�y�t�e�s�:�"�,�1�1�0�3�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�1�9�5�,�1�9�2�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�7�7�,�"�C�O�M�B�O�B�O�X�"�,�C�B�S�_�D�R�O�P�D�O�W�N� �|�C�B�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�W�S�_�C�H�I�L�D� �|�W�S�_�V�S�C�R�O�L�L� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�2�0�7�,�1�9�2�,�7�3� � � � �C�O�N�T�R�O�L� �"�&�P�a�r�a�m�e�t�e�r�s�:�"�,�1�1�0�0�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�2�3�0�,�1�9�2�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�9�1�,�"�E�D�I�T�"�,�E�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�E�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�B�O�R�D�E�R� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�2�,�2�4�0�,�1�9�0�,�1�4� � � � �C�O�N�T�R�O�L� �"�O�K�"�,�1�,�"�B�U�T�T�O�N�"�,�B�S�_�D�E�F�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�5�,�2�6�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�C�a�n�c�e�l�"�,�2�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�7�7�,�2�6�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�A�p�p�l�y�"�,�9�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�4�9�,�2�6�5�,�6�4�,�1�6� � �E�N�D� � � � �D�I�A�L�O�G�_�P�W�D� �D�I�A�L�O�G� �M�O�V�E�A�B�L�E� �P�U�R�E� �L�O�A�D�O�N�C�A�L�L� �D�I�S�C�A�R�D�A�B�L�E� �0�,� �0�,� �1�5�7�,� �1�0�3� � �S�T�Y�L�E� �D�S�_�S�E�T�F�O�N�T� �|�D�S�_�M�O�D�A�L�F�R�A�M�E� �|�D�S�_�C�E�N�T�E�R� �|�W�S�_�P�O�P�U�P� �|�W�S�_�S�Y�S�M�E�N�U� �|�W�S�_�C�A�P�T�I�O�N� � � �C�A�P�T�I�O�N� �"�E�n�t�e�r� �p�a�s�s�w�o�r�d�"� � �F�O�N�T� �8�,� �"�M�S� �S�h�e�l�l� �D�l�g�"� � �L�A�N�G�U�A�G�E� �L�A�N�G�_�E�N�G�L�I�S�H�,� �1� � �B�E�G�I�N� � � � �C�O�N�T�R�O�L� �"�&�E�n�t�e�r� �p�a�s�s�w�o�r�d�:�"�,�1�0�0�0�,�"�S�T�A�T�I�C�"�,�S�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�G�R�O�U�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�,�8�,�1�4�0�,�8� � � � �C�O�N�T�R�O�L� �"�"�,�1�0�0�1�,�"�E�D�I�T�"�,�E�S�_�P�A�S�S�W�O�R�D� �|�E�S�_�A�U�T�O�H�S�C�R�O�L�L� �|�E�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�B�O�R�D�E�R� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�,�2�0�,�1�4�0�,�1�4� � � � �C�O�N�T�R�O�L� �"�&�S�h�o�w� �p�a�s�s�w�o�r�d�"�,�1�0�0�2�,�"�B�U�T�T�O�N�"�,�B�S�_�A�U�T�O�C�H�E�C�K�B�O�X� �|�B�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�4�0�,�1�4�0�,�1�0� � � � �C�O�N�T�R�O�L� �"�O�K�"�,�1�,�"�B�U�T�T�O�N�"�,�B�S�_�D�E�F�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�7�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�C�a�n�c�e�l�"�,�2�,�"�B�U�T�T�O�N�"�,�B�S�_�P�U�S�H�B�U�T�T�O�N� �|�B�S�_�V�C�E�N�T�E�R� �|�B�S�_�C�E�N�T�E�R� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�8�2�,�7�5�,�6�4�,�1�6� � � � �C�O�N�T�R�O�L� �"�E�n�c�r�y�p�t� �f�i�l�e� �&�n�a�m�e�s�"�,�0�,�"�B�U�T�T�O�N�"�,�B�S�_�A�U�T�O�C�H�E�C�K�B�O�X� �|�B�S�_�L�E�F�T� �|�W�S�_�C�H�I�L�D� �|�W�S�_�T�A�B�S�T�O�P� �|�W�S�_�V�I�S�I�B�L�E� �,�1�0�,�5�5�,�1�4�0�,�1�0� � �E�N�D� � ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/src/SevenZipDlg.pas��������������������������������������������0000644�0001750�0000144�00000057676�12630666255�022370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- SevenZip archiver plugin, dialogs unit Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) Based on 7-Zip 15.06 (http://7-zip.org) 7-Zip Copyright (C) 1999-2015 Igor Pavlov This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit SevenZipDlg; {$mode delphi} interface uses Classes, SysUtils, Windows, Math, SevenZipOpt, SevenZipLng, JclCompression; procedure ShowConfigurationDialog(Parent: HWND); function ShowPasswordQuery(var Encrypt: Boolean; var Password: WideString): Boolean; implementation {$R *.res} const IDC_PASSWORD = 1001; IDC_SHOW_PASSWORD = 1002; IDC_ENCRYPT_HEADER = 0; const IDC_APPLY_BUTTON = 9; IDC_COMP_FORMAT = 1076; IDC_COMP_METHOD = 1078; IDC_COMP_LEVEL = 1074; IDC_VOLUME_SIZE = 1077; IDC_COMP_DICT = 1079; IDC_COMP_WORD = 1080; IDC_COMP_SOLID = 1081; IDC_COMP_THREAD = 1082; IDC_MAX_THREAD = 1083; IDC_PARAMETERS = 1091; IDC_MEMORY_COMP = 1027; IDC_MEMORY_DECOMP = 1028; function GetComboBox(hwndDlg: HWND; ItemID: Integer): PtrInt; var Index: Integer; begin Index:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETCURSEL, 0, 0); Result:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETITEMDATA, Index, 0); end; procedure SetComboBox(hwndDlg: HWND; ItemID: Integer; ItemData: PtrInt); var Index, Count: Integer; begin Count:= SendDlgItemMessage(hwndDlg, ItemID, CB_GETCOUNT, 0, 0); for Index:= 0 to Count - 1 do begin if SendDlgItemMessage(hwndDlg, ItemID, CB_GETITEMDATA, Index, 0) = ItemData then begin SendDlgItemMessage(hwndDlg, ItemID, CB_SETCURSEL, Index, 0); Exit; end; end; end; procedure SaveArchiver(hwndDlg: HWND); var Format: TArchiveFormat; Parameters: array[0..MAX_PATH] of WideChar; begin Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); PluginConfig[Format].Level:= GetComboBox(hwndDlg, IDC_COMP_LEVEL); PluginConfig[Format].Method:= GetComboBox(hwndDlg, IDC_COMP_METHOD); if PluginConfig[Format].Level <> PtrInt(clStore) then begin PluginConfig[Format].Dictionary:= GetComboBox(hwndDlg, IDC_COMP_DICT); PluginConfig[Format].WordSize:= GetComboBox(hwndDlg, IDC_COMP_WORD); PluginConfig[Format].SolidSize:= GetComboBox(hwndDlg, IDC_COMP_SOLID); PluginConfig[Format].ThreadCount:= GetComboBox(hwndDlg, IDC_COMP_THREAD); end; GetDlgItemTextW(hwndDlg, IDC_PARAMETERS, Parameters, MAX_PATH); PluginConfig[Format].Parameters:= Parameters; SaveConfiguration; end; function ComboBoxAdd(hwndDlg: HWND; ItemID: Integer; ItemText: String; ItemData: PtrInt): Integer; var Text: WideString; begin Text:= UTF8Decode(ItemText); Result:= SendDlgItemMessageW(hwndDlg, ItemID, CB_ADDSTRING, 0, LPARAM(PWideChar(Text))); SendDlgItemMessage(hwndDlg, ItemID, CB_SETITEMDATA, Result, ItemData); end; function GetMemoryUsage(hwndDlg: HWND; out decompressMemory: Int64): Int64; var size: Int64 = 0; Dictionary, hs, numThreads, numThreads1, numBlockThreads: Cardinal; size1, chunkSize: Int64; Level: TCompressionLevel; Method: TJclCompressionMethod; begin Level := TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); if (level = clStore) then begin decompressMemory := (1 shl 20); Exit(decompressMemory); end; decompressMemory := -1; Dictionary := GetComboBox(hwndDlg, IDC_COMP_DICT); Method := TJclCompressionMethod(GetComboBox(hwndDlg, IDC_COMP_METHOD)); if (Method <> cmDeflate) and (Method <> cmDeflate64) and (level >= clUltra) then size += (12 shl 20) * 2 + (5 shl 20); numThreads := GetComboBox(hwndDlg, IDC_COMP_THREAD); case (method) of cmLZMA, cmLZMA2: begin hs := dictionary - 1; hs := hs or (hs shr 1); hs := hs or (hs shr 2); hs := hs or (hs shr 4); hs := hs or (hs shr 8); hs := hs shr 1; hs := hs or $FFFF; if (hs > (1 shl 24)) then hs := hs shr 1; Inc(hs); size1 := Int64(hs) * 4; size1 += Int64(dictionary) * 4; if (level >= clNormal) then size1 += Int64(dictionary) * 4; size1 += (2 shl 20); numThreads1 := 1; if (numThreads > 1) and (level >= clNormal) then begin size1 += (2 shl 20) + (4 shl 20); numThreads1 := 2; end; numBlockThreads := numThreads div numThreads1; if (method = cmLZMA) or (numBlockThreads = 1) then size1 += Int64(dictionary) * 3 div 2 else begin chunkSize := Int64(dictionary) shl 2; chunkSize := Max(chunkSize, Int64(1 shl 20)); chunkSize := Min(chunkSize, Int64(1 shl 28)); chunkSize := Max(chunkSize, Int64(dictionary)); size1 += chunkSize * 2; end; size += size1 * numBlockThreads; decompressMemory := Int64(dictionary) + (2 shl 20); Exit(size); end; cmPPMd: begin decompressMemory := Int64(dictionary) + (2 shl 20); Exit(size + decompressMemory); end; cmDeflate, cmDeflate64: begin if (level >= clMaximum) then size += (1 shl 20); size += 3 shl 20; decompressMemory := (2 shl 20); Exit(size); end; cmBZip2: begin decompressMemory := (7 shl 20); size1 := (10 shl 20); Exit(size + size1 * numThreads); end; end; Result := -1; end; procedure UpdateMemoryUsage(hwndDlg: HWND); var Comp, Decomp: Int64; begin Comp := GetMemoryUsage(hwndDlg, Decomp); SetDlgItemText(hwndDlg, IDC_MEMORY_COMP, PAnsiChar(IntToStr(Comp div cMega) + 'Mb')); SetDlgItemText(hwndDlg, IDC_MEMORY_DECOMP, PAnsiChar(IntToStr(Decomp div cMega) + 'Mb')); end; procedure SetDefaultOptions(hwndDlg: HWND); var Level: TCompressionLevel; Method: TJclCompressionMethod; begin // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); // Get compression method Method:= TJclCompressionMethod(GetComboBox(hwndDlg, IDC_COMP_METHOD)); case Method of cmDeflate, cmDeflate64: begin case Level of clFastest, clFast, clNormal: SetComboBox(hwndDlg, IDC_COMP_WORD, 32); clMaximum: SetComboBox(hwndDlg, IDC_COMP_WORD, 64); clUltra: SetComboBox(hwndDlg, IDC_COMP_WORD, 128); end; SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_SETCURSEL, 0, 0); end; cmBZip2: begin case Level of clFastest: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 100 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 8 * cKilo); end; clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 500 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 32 * cKilo); end; clNormal, clMaximum, clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 900 * cKilo); SetComboBox(hwndDlg, IDC_COMP_SOLID, 64 * cKilo); end; end; end; cmLZMA, cmLZMA2: begin case Level of clFastest: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cKilo); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 8 * cKilo); end; clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 128 * cKilo); end; clNormal: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 16 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 32); SetComboBox(hwndDlg, IDC_COMP_SOLID, 2 * cMega); end; clMaximum: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 32 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 64); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 64); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; end; end; cmPPMd: begin case Level of clFastest, clFast: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 4 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 4); SetComboBox(hwndDlg, IDC_COMP_SOLID, 512 * cKilo); end; clNormal: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 16 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 6); SetComboBox(hwndDlg, IDC_COMP_SOLID, 2 * cMega); end; clMaximum: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 64 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 16); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; clUltra: begin SetComboBox(hwndDlg, IDC_COMP_DICT, 192 * cMega); SetComboBox(hwndDlg, IDC_COMP_WORD, 16); SetComboBox(hwndDlg, IDC_COMP_SOLID, 4 * cMega); end; end; end; end; UpdateMemoryUsage(hwndDlg); end; procedure UpdateSolid(hwndDlg: HWND); var Index: Integer; Format: TArchiveFormat; Level: TCompressionLevel; begin SendDlgItemMessage(hwndDlg, IDC_COMP_SOLID, CB_RESETCONTENT, 0, 0); // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); if (Format in [afSevenZip]) and (Level <> clStore) then begin ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, rsSolidBlockNonSolid, kNoSolidBlockSize); for Index:= Low(SolidBlock) to High(SolidBlock) do begin ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, FormatFileSize(Int64(SolidBlock[Index]) * cKilo), PtrInt(SolidBlock[Index])); end; ComboBoxAdd(hwndDlg, IDC_COMP_SOLID, rsSolidBlockSolid, kSolidBlockSize); end; end; procedure UpdateThread(hwndDlg: HWND; dwAlgoThreadMax: LongWord); var Index: LongWord; dwMaxThread: LongWord; dwDefaultValue: DWORD; wsMaxThread: WideString; dwHardwareThreads: DWORD; begin SendDlgItemMessage(hwndDlg, IDC_COMP_THREAD, CB_RESETCONTENT, 0, 0); dwHardwareThreads:= GetNumberOfProcessors; dwDefaultValue:= dwHardwareThreads; dwMaxThread:= dwHardwareThreads * 2; if dwMaxThread > dwAlgoThreadMax then dwMaxThread:= dwAlgoThreadMax; if dwAlgoThreadMax < dwDefaultValue then dwDefaultValue:= dwAlgoThreadMax; for Index:= 1 to dwMaxThread do begin ComboBoxAdd(hwndDlg, IDC_COMP_THREAD, IntToStr(Index), Index); end; wsMaxThread:= '/ ' + IntToStr(dwHardwareThreads); SendDlgItemMessage(hwndDlg, IDC_COMP_THREAD, CB_SETCURSEL, dwDefaultValue - 1, 0); SendDlgItemMessageW(hwndDlg, IDC_MAX_THREAD, WM_SETTEXT, 0, LPARAM(PWideChar(wsMaxThread))); end; procedure UpdateMethod(hwndDlg: HWND); var Index: Integer; Format: TArchiveFormat; dwAlgoThreadMax: LongWord = 1; Method: TJclCompressionMethod; begin // Clear comboboxes SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_WORD, CB_RESETCONTENT, 0, 0); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_DICT), not (Format in [afTar, afWim])); // Get Compression method Method:= TJclCompressionMethod(GetComboBox(hwndDlg, IDC_COMP_METHOD)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_WORD), (Format in [afSevenZip, afGzip, afXz, afZip]) and (Method <> cmBZip2)); case Method of cmDeflate: begin for Index:= Low(DeflateDict) to High(DeflateDict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(DeflateDict[Index]), PtrInt(DeflateDict[Index])); end; for Index:= Low(DeflateWordSize) to High(DeflateWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(DeflateWordSize[Index]), PtrInt(DeflateWordSize[Index])); end; end; cmDeflate64: begin for Index:= Low(Deflate64Dict) to High(Deflate64Dict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(Deflate64Dict[Index]), PtrInt(Deflate64Dict[Index])); end; for Index:= Low(Deflate64WordSize) to High(Deflate64WordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(Deflate64WordSize[Index]), PtrInt(Deflate64WordSize[Index])); end; end; cmLZMA, cmLZMA2: begin for Index:= Low(LZMADict) to High(LZMADict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(LZMADict[Index], False), PtrInt(LZMADict[Index])); end; for Index:= Low(LZMAWordSize) to High(LZMAWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(LZMAWordSize[Index]), PtrInt(LZMAWordSize[Index])); end; dwAlgoThreadMax:= IfThen(Method = cmLZMA, 2, 32); end; cmBZip2: begin for Index:= Low(BZip2Dict) to High(BZip2Dict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(BZip2Dict[Index]), PtrInt(BZip2Dict[Index])); end; dwAlgoThreadMax:= 32; end; cmPPMd: begin for Index:= Low(PPMdDict) to High(PPMdDict) do begin ComboBoxAdd(hwndDlg, IDC_COMP_DICT, FormatFileSize(PPMdDict[Index], False), PtrInt(PPMdDict[Index])); end; for Index:= Low(PPMdWordSize) to High(PPMdWordSize) do begin ComboBoxAdd(hwndDlg, IDC_COMP_WORD, IntToStr(PPMdWordSize[Index]), PtrInt(PPMdWordSize[Index])); end; end; end; if Format = afZip then dwAlgoThreadMax:= 128; UpdateThread(hwndDlg, dwAlgoThreadMax); end; procedure FillMethod(hwndDlg: HWND); var Format: TArchiveFormat; begin // Clear combobox SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_RESETCONTENT, 0, 0); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); case Format of afSevenZip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA', PtrInt(cmLZMA)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA2', PtrInt(cmLZMA2)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'PPMd', PtrInt(cmPPMd)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); end; afBzip2: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afGzip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate', PtrInt(cmDeflate)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afXz: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA2', PtrInt(cmLZMA2)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); end; afZip: begin // Fill compression method ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate', PtrInt(cmDeflate)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'Deflate64', PtrInt(cmDeflate64)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'BZip2', PtrInt(cmBZip2)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'LZMA', PtrInt(cmLZMA)); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, 'PPMd', PtrInt(cmPPMd)); end; end; end; procedure UpdateFormat(hwndDlg: HWND); var Format: TArchiveFormat; begin // Clear comboboxes SendDlgItemMessage(hwndDlg, IDC_COMP_LEVEL, CB_RESETCONTENT, 0, 0); // Get archive format Format:= TArchiveFormat(GetComboBox(hwndDlg, IDC_COMP_FORMAT)); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, LONG_PTR(Format)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), Format = afSevenZip); // 7Zip and Zip if Format in [afSevenZip, afZip] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelStore, PtrInt(clStore)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFastest, PtrInt(clFastest)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else if Format in [afBzip2, afXz] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFastest, PtrInt(clFastest)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else if Format in [afGzip] then begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelFast, PtrInt(clFast)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelNormal, PtrInt(clNormal)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelMaximum, PtrInt(clMaximum)); ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelUltra, PtrInt(clUltra)); end else begin // Fill compression level ComboBoxAdd(hwndDlg, IDC_COMP_LEVEL, rsCompressionLevelStore, PtrInt(clStore)); end; FillMethod(hwndDlg); end; procedure UpdateLevel(hwndDlg: HWND; First: Boolean); var Format: TArchiveFormat; Level: TCompressionLevel; begin Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); // Get compression level Level:= TCompressionLevel(GetComboBox(hwndDlg, IDC_COMP_LEVEL)); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_DICT), Level <> clStore); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_WORD), Level <> clStore); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), (Format = afSevenZip) and (Level <> clStore)); if Level = clStore then begin SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_DICT, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_WORD, CB_RESETCONTENT, 0, 0); SendDlgItemMessage(hwndDlg, IDC_COMP_SOLID, CB_RESETCONTENT, 0, 0); ComboBoxAdd(hwndDlg, IDC_COMP_METHOD, MethodName[cmCopy], PtrInt(cmCopy)); SendDlgItemMessage(hwndDlg, IDC_COMP_METHOD, CB_SETCURSEL, 0, 0); UpdateThread(hwndDlg, 1); end else if not First then begin FillMethod(hwndDlg); PluginConfig[Format].Method:= DefaultConfig[Format].Method; SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); UpdateMethod(hwndDlg); UpdateSolid(hwndDlg); EnableWindow(GetDlgItem(hwndDlg, IDC_COMP_SOLID), Format = afSevenZip); end; end; procedure SelectFormat(hwndDlg: HWND); var Format: TArchiveFormat; begin UpdateFormat(hwndDlg); Format:= TArchiveFormat(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); SetComboBox(hwndDlg, IDC_COMP_LEVEL, PluginConfig[Format].Level); SetComboBox(hwndDlg, IDC_COMP_METHOD, PluginConfig[Format].Method); UpdateMethod(hwndDlg); UpdateLevel(hwndDlg, True); UpdateSolid(hwndDlg); SetComboBox(hwndDlg, IDC_COMP_DICT, PluginConfig[Format].Dictionary); SetComboBox(hwndDlg, IDC_COMP_WORD, PluginConfig[Format].WordSize); SetComboBox(hwndDlg, IDC_COMP_SOLID, PluginConfig[Format].SolidSize); SetComboBox(hwndDlg, IDC_COMP_THREAD, PluginConfig[Format].ThreadCount); SetDlgItemTextW(hwndDlg, IDC_PARAMETERS, PWideChar(PluginConfig[Format].Parameters)); UpdateMemoryUsage(hwndDlg); end; function DialogProc(hwndDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): INT_PTR; stdcall; var Index: TArchiveFormat; begin case uMsg of WM_INITDIALOG: begin EnableWindow(GetDlgItem(hwndDlg, IDC_VOLUME_SIZE), False); for Index:= Low(ArchiveExtension) to High(ArchiveExtension) do ComboBoxAdd(hwndDlg, IDC_COMP_FORMAT, ArchiveExtension[Index], PtrInt(Index)); SendDlgItemMessage(hwndDlg, IDC_COMP_FORMAT, CB_SETCURSEL, 0, 0); SelectFormat(hwndDlg); Result:= 1; end; WM_COMMAND: begin case LOWORD(wParam) of IDC_COMP_FORMAT: begin if (HIWORD(wParam) = CBN_SELCHANGE) then begin SelectFormat(hwndDlg); end; end; IDC_COMP_METHOD: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateMethod(hwndDlg); SetDefaultOptions(hwndDlg); end; IDC_COMP_LEVEL: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateLevel(hwndDlg, False); SetDefaultOptions(hwndDlg); end; IDC_COMP_DICT, IDC_COMP_WORD, IDC_COMP_THREAD: if (HIWORD(wParam) = CBN_SELCHANGE) then begin UpdateMemoryUsage(hwndDlg); end; IDOK: begin SaveArchiver(hwndDlg); EndDialog(hwndDlg, IDOK); end; IDCANCEL: EndDialog(hwndDlg, IDCANCEL); IDC_APPLY_BUTTON: SaveArchiver(hwndDlg); end; end; WM_CLOSE: begin EndDialog(hwndDlg, 0); end else begin Result:= 0; end; end; end; function PasswordDialog(hwndDlg: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): INT_PTR; stdcall; var PasswordData: PPasswordData; begin PasswordData:= PPasswordData(GetWindowLongPtr(hwndDlg, GWLP_USERDATA)); case uMsg of WM_INITDIALOG: begin PasswordData:= PPasswordData(lParam); SetWindowLongPtr(hwndDlg, GWLP_USERDATA, LONG_PTR(lParam)); SetDlgItemTextW(hwndDlg, IDC_PASSWORD, PasswordData^.Password); SendDlgItemMessage(hwndDlg, IDC_PASSWORD, EM_SETLIMITTEXT, MAX_PATH, 0); EnableWindow(GetDlgItem(hwndDlg, IDC_ENCRYPT_HEADER), PasswordData^.EncryptHeader); Exit(1); end; WM_COMMAND: begin case LOWORD(wParam) of IDOK: begin PasswordData^.EncryptHeader:= IsDlgButtonChecked(hwndDlg, IDC_ENCRYPT_HEADER) <> 0; GetDlgItemTextW(hwndDlg, IDC_PASSWORD, PasswordData^.Password, MAX_PATH); EndDialog(hwndDlg, IDOK); end; IDCANCEL: EndDialog(hwndDlg, IDCANCEL); IDC_SHOW_PASSWORD: begin wParam:= (not IsDlgButtonChecked(hwndDlg, IDC_SHOW_PASSWORD) and $01) * $2A; SendDlgItemMessageW(hwndDlg, IDC_PASSWORD, EM_SETPASSWORDCHAR, wParam, 0); end; end; end; end; Result:= 0; end; function ShowPasswordQuery(var Encrypt: Boolean; var Password: WideString): Boolean; var PasswordData: TPasswordData; begin PasswordData.Password:= Password; PasswordData.EncryptHeader:= Encrypt; Result:= (DialogBoxParam(hInstance, 'DIALOG_PWD', 0, @PasswordDialog, LPARAM(@PasswordData)) = IDOK); if Result then begin Password:= PasswordData.Password; Encrypt:= PasswordData.EncryptHeader; end; end; procedure ShowConfigurationDialog(Parent: HWND); begin DialogBox(hInstance, 'DIALOG_CFG', Parent, @DialogProc); end; end. ������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/lib/�����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�017430� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/LICENSE.txt����������������������������������������������������0000644�0001750�0000144�00000064505�12422770427�020506� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. (This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.) Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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. {description} Copyright (C) {year} {fullname} This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. {signature of Ty Coon}, 1 April 1990 Ty Coon, President of Vice That's all there is to it! �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/pluginst.inf���������������������������������������������������0000644�0001750�0000144�00000000200�12512443710�021174� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[plugininstall] description=SevenZip archiver plugin type=wcx file=SevenZip.wcx defaultextension=7z defaultdir=SevenZip ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/sevenzip/README.txt�����������������������������������������������������0000644�0001750�0000144�00000001056�12601713142�020337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SevenZip plugin can store configuration in two places: 1. If sevenzip.ini exists in plugin directory then plugin will use it 2. Otherwise it will store sevenzip.ini in commander configuration directory SevenZip plugin search 7z.dll in next places: 1. Path from sevenzip.ini [Library] i386=<full path to 7z.dll 32 bit> x86_64=<full path to 7z.dll 64 bit> 2. Plugin directory \i386\7z.dll \x86_64\7z.dll \7z.dll 3. Commander directory 4. Windows system directory ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�015551� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/license.txt���������������������������������������������������������0000644�0001750�0000144�00000002037�12014201074�017705� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������DEB plugin for Windows Commander. Copyright (c) 2002 Alexandre Maximov Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse debian linux package (*.deb) archives with Windows Commander 4.0 or greater. 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any information about plugin can be found on web site : http://max.reklam.ru �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016340� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/deb.lpi���������������������������������������������������������0000644�0001750�0000144�00000010774�12451527075�017601� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="DEB WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\deb.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedproject\"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="X:\Totalcmd\Totalcmd.exe"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="deb.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\deb.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ����doublecmd-0.7.1/plugins/wcx/deb/src/deb.dpr���������������������������������������������������������0000644�0001750�0000144�00000000421�12014201074�017545� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library deb; uses deb_io in 'deb_io.pas', deb_archive in 'deb_archive.pas', deb_def in 'deb_def.pas'; {$E wcx} exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc; {$R *.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/deb_io.pas������������������������������������������������������0000644�0001750�0000144�00000002454�12014201074�020242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_io; interface {$A-,I-} uses deb_def; function deb_ReadHeader(var f : file; var header, lastheader : deb_Header) : Boolean; implementation uses SysUtils; function deb_ReadHeader; var tmp_buf : array [0..259] of Char; tmp_str : String[10]; j : Integer; loadlen : Integer; begin Result := False; loadlen:=size_deb_files; Seek(f, lastheader.pos+lastheader.size); if IOResult <> 0 then Exit; header.pos:=FilePos(f)+size_deb_files; BlockRead(f, tmp_buf, loadlen); if IOResult <> 0 then Exit; if tmp_buf[0] = #10 then begin // other version DPKG - offset 1. Seek(f, lastheader.pos+lastheader.size+1); if IOResult <> 0 then Exit; header.pos:=FilePos(f)+size_deb_files; BlockRead(f, tmp_buf, loadlen); if IOResult <> 0 then Exit; end; SetLength(header.filename, 16); for j:=1 to 16 do header.filename[j]:=tmp_buf[j-1]; header.filename:=Trim(header.filename); SetLength(tmp_str, 10); for j:=1 to 10 do tmp_str[j] := tmp_buf[j - 1 + 32+16]; if tmp_str = '' then header.size:=0 else header.size:=StrToInt(Trim(tmp_str)); SetLength(tmp_str, 12); for j:=1 to 12 do tmp_str[j] := tmp_buf[j - 1 + 16]; if tmp_str = '' then header.Time:=0 else header.Time:=StrToInt(Trim(tmp_str)); header.crc:=0; Result := True; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/deb.dof���������������������������������������������������������0000644�0001750�0000144�00000002417�11173006725�017552� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[FileVersion] Version=6.0 [Compiler] A=8 B=0 C=0 D=0 E=0 F=0 G=1 H=1 I=0 J=0 K=0 L=0 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=1 V=1 W=1 X=1 Y=0 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=65536 ExeDescription= [Directories] OutputDir=bin UnitOutputDir=bin PackageDLLOutputDir= PackageDCPOutputDir= SearchPath=..\..\.. Packages=vcl;rtl;vclx Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=X:\Totalcmd\Totalcmd.exe Launcher= UseLauncher=0 DebugCWD= [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=1 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Alexandre Maximov FileDescription= FileVersion=1.0.0.0 InternalName=deb.wcx LegalCopyright= LegalTrademarks= OriginalFilename=deb.wcx ProductName=WC Plugin for Debian pakages ProductVersion=1.0.0.0 Comments= [Excluded Packages] [HistoryLists\hlUnitAliases] Count=1 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/deb_archive.pas�������������������������������������������������0000644�0001750�0000144�00000023351�12014201074�021253� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_archive; interface {$mode delphi}{$A-,I-} {$include calling.inc} uses Classes, WcxPlugin, deb_def, deb_io; const MAX_ARCHIVE_LIST = 20; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; fgEndArchive : Boolean; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; last_header : deb_Header; end;{ArchiveRec} var aList : TList; function GetPackerCaps : Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes; function GetArchiveID(hArcData : THandle) : Integer; var i_rec : Integer; arec : PArchiveRec; begin Result := -1; if aList.Count = 0 then Exit; for i_rec := 0 to (aList.Count - 1) do begin arec := aList.Items[i_rec]; if arec^.handle_io = hArcData then begin Result := i_rec; Break; end; end; end; function GetPackerCaps; begin Result := PK_CAPS_MULTIPLE; end; function OpenArchive; var arch : THandle; arec : PArchiveRec; filename : String; fgError : Boolean; function SignatureProbe: integer; //0 Ales Gut; 1 IO error; 2 is not DEBIAN PKG const deb_signature: array [0..20] of Char ='!<arch>'#10'debian-binary'; var tmp_buf : array [0..20] of Char; j : integer; begin Result:=2; BlockRead(arec^.handle_file, tmp_buf, 21); if IOResult <> 0 then begin Result:=1; Exit; end; for j:=0 to 20 do if deb_signature[j] <> tmp_buf[j] then Exit; Result:=0; end; begin ArchiveData.OpenResult := E_EOPEN; arec := nil; arch := 0; fgError := False; if aList.Count >= MAX_ARCHIVE_LIST then begin fgError := True; end else begin filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = THandle(-1) then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; fdate := FileAge(filename); fgEndArchive := False; process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; last_header.size:=0; last_header.pos:=size_deb_signature; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end else begin case SignatureProbe of 1: begin ArchiveData.OpenResult := E_EREAD; fgError := True; end; 2: begin ArchiveData.OpenResult := E_UNKNOWN_FORMAT; fgError := True; end else begin Seek(arec^.handle_file, size_deb_signature); if IOResult <> 0 then fgError := True; end; end;{case SignatureProbe} end;{ioresult} end;{arch = -1} end;{max count reached} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; end else begin aList.Add(arec); Result := arch; ArchiveData.OpenResult := E_SUCCESS; end; end; function CloseArchive; var i_rec : Integer; arec : PArchiveRec; begin if aList.Count <> 0 then begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; CloseFile(arec^.handle_file); FileClose(hArcData); Dispose(arec); aList.Delete(i_rec); end; end; Result := E_SUCCESS; end; function ReadHeader; var i_rec : Integer; arec : PArchiveRec; header : deb_Header; begin Result := E_EREAD; i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; if arec^.fgEndArchive then Result := E_END_ARCHIVE else begin while True do begin if not deb_ReadHeader(arec^.handle_file, header, arec^.last_header) then begin Result := E_END_ARCHIVE; Break end else begin with HeaderData do begin StrPCopy(ArcName, arec^.fname); StrPCopy(FileName, header.filename); PackSize := header.size; UnpSize := header.size; UnpVer := 2; HostOS := 0; FileCRC := header.CRC; FileAttr := faArchive; FileTime := LongInt(UnixFileTimeToDosTime(TUnixFileTime(header.time))); end;{with} Result := E_SUCCESS; Break; end{if header readed} end;{while true} arec^.last_header := header; end;{if not end of archive} end; end; function ProcessFile; var i_rec : Integer; arec : PArchiveRec; targz_file : file; targz_name : String; buf : Pointer; buf_size : LongWord; fsize : LongWord; fpos : LongWord; fgReadError : Boolean; fgWriteError: Boolean; fAborted : Boolean; head : deb_Header; begin i_rec := GetArchiveID(hArcData); arec := aList.Items[i_rec]; head := arec^.last_header; case Operation of PK_TEST : begin fAborted:=false; fsize := head.size; fpos := head.pos; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; Seek(arec^.handle_file, fpos); if IOResult <> 0 then begin fgReadError := True; fAborted:=True; end; while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:=E_EABORTED else if fgReadError then Result := E_EREAD else Result := 0; Seek(arec^.handle_file, size_deb_signature); FreeMem(buf, 65536); end;{PK_TEST} PK_SKIP : Result := 0; PK_EXTRACT : begin targz_name := String(DestName); AssignFile(targz_file, targz_name); Rewrite(targz_file, 1); if IOResult <> 0 then Result := E_ECREATE else begin i_rec := GetArchiveID(hArcData); arec := aList.Items[i_rec]; fgReadError := False; fgWriteError :=False; fAborted := False; fsize := head.size; fpos := head.pos; buf_size := 65536; GetMem(buf, buf_size); Seek(arec^.handle_file, fpos); if IOResult <> 0 then begin fgReadError := True; fAborted:=True; end; while not fAborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} BlockWrite(targz_file, buf^, buf_size); if ioresult<>0 then begin fgWriteError:=true; break; end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; BlockWrite(targz_file, buf^, fsize); if ioresult<>0 then fgWriteError:=true; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:= E_EABORTED else if fgWriteError then Result := E_EWRITE else if fgReadError then Result := E_EREAD else Result := 0; FileSetDate(tfilerec(targz_file).handle, LongInt(UnixFileTimeToDosTime(TUnixFileTime(head.time)))); CloseFile(targz_file); Seek(arec^.handle_file, size_deb_signature); if result<>0 then Erase(targz_file); FreeMem(buf, 65536); end; end;{PK_EXTRACT} else Result := E_SUCCESS; end;{case operation} end; procedure SetProcessDataProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.changevol_proc := ChangeVolProc; end; end; initialization aList := TList.Create; finalization aList.Free; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/src/deb_def.pas�����������������������������������������������������0000644�0001750�0000144�00000000404�12014201074�020362� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit deb_def; interface type deb_Header = record filename : String[16]; time : longint; size : longint; pos : longint; crc : longint; end; const size_deb_files= 60; size_deb_signature = 72; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/lib/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016317� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/deb/install.txt���������������������������������������������������������0000644�0001750�0000144�00000000646�12014201074�017735� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install DEB plugin: 1. Unzip the deb.wcx to the Wincmd directory 2. In Windows Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type deb as the extension 6. Click 'new type', and select the deb.wcx 7. Click OK What it does: This plugin allow you to browse debian linux package archives. Alexandre Maximov. Penza. Russia. http://max.reklam.ru ������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/�������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�015751� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/license.txt��������������������������������������������������������0000644�0001750�0000144�00000002205�12014201074�020102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������RPM plugin v.1.4 for Windows Commander. Copyright (c) 2000..2002 Mandryka Yurij ( Brain Group ) Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) This plugin allow you to browse rpm archives with Windows Commander 4.0 or greater. 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 OR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Any questions about plugin can be made via e-mail : braingroup@hotmail.ru and information about plugin can be found on Brain Group web site : http://braingroup.hotmail.ru/wcplugins/ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/���������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016540� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio.cfg�������������������������������������������������������0000644�0001750�0000144�00000000546�11173006725�020142� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-$A- -$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 -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\borland\delphi5\Projects\Bpl" -LN"c:\borland\delphi5\Projects\Bpl" ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio.dof�������������������������������������������������������0000644�0001750�0000144�00000002433�11173006725�020150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[Compiler] A=0 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=0 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= SearchPath= Packages=VCL50;VCLX50;VCLSMP50;VCLDB50;VCLADO50;ibevnt50;VCLBDE50;VCLDBX50;QRPT50;TEEUI50;TEEDB50;TEE50;DSS50;TEEQR50;VCLIB50;VCLMID50;VCLIE50;INETDB50;INET50;NMFAST50;WEBMID50;dclocx50;dclaxserver50;dcldtree50 Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication=e:\delphi\exedpr\wincmd32.exe [Version Info] IncludeVerInfo=1 AutoIncBuild=1 MajorVer=1 MinorVer=0 Release=0 Build=79 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=1049 CodePage=1251 [Version Info Keys] CompanyName=Brain group FileDescription=cpio plugin for rpm plugin for Windows Commander FileVersion=1.0.0.79 InternalName=cpio.wcx LegalCopyright=Mandryka Yurij LegalTrademarks= OriginalFilename=cpio.wcx ProductName=cpio plugin for rpm plugin ProductVersion=1.0.0.0 Comments=any questions on braingroup@hotmail.ru �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio_def.pas���������������������������������������������������0000644�0001750�0000144�00000006143�12612631376�021010� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit cpio_def; interface type CPIO_Header = record magic, dev_major, dev_minor, inode, mode, uid, gid, nlink, mtime, filesize, namesize: Longword; filename : String; origname : String; IsOldHeader: Boolean; end;{CPIO_Header} TOldBinaryHeader=packed record c_magic, c_dev, c_ino, c_mode, c_uid, c_gid, c_nlink, c_rdev:word; c_mtime1,c_mtime2:word; c_namesize:word; c_filesize1,c_filesize2:word; (* char c_name[c_namesize rounded to word];*) end; TOldCharHeader=packed record c_magic : array[0..5] of AnsiChar; {070707} c_dev : array[0..5] of AnsiChar; c_ino : array[0..5] of AnsiChar; c_mode : array[0..5] of AnsiChar; c_uid : array[0..5] of AnsiChar; c_gid : array[0..5] of AnsiChar; c_nlink : array[0..5] of AnsiChar; c_rdev : array[0..5] of AnsiChar; c_mtime : array[0..10] of AnsiChar; c_namesize: array[0..5] of AnsiChar; c_filesize: array[0..10] of AnsiChar; end; TNewCharHeader=packed record c_magic : array[0..5] of AnsiChar; {070701} {070702 - CRC format} c_ino : array[0..7] of AnsiChar; c_mode : array[0..7] of AnsiChar; c_uid : array[0..7] of AnsiChar; c_gid : array[0..7] of AnsiChar; c_nlink : array[0..7] of AnsiChar; c_mtime : array[0..7] of AnsiChar; c_filesize : array[0..7] of AnsiChar; //must be 0 for FIFOs and directories c_devmajor : array[0..7] of AnsiChar; c_devminor : array[0..7] of AnsiChar; c_rdevmajor: array[0..7] of AnsiChar; //only valid for chr and blk special files c_rdevminor: array[0..7] of AnsiChar; //only valid for chr and blk special files c_namesize : array[0..7] of AnsiChar; //count includes terminating NUL in pathname c_check : array[0..7] of AnsiChar; //0 for "new" portable format; for CRC format the sum of all the bytes in the file end; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio.dpr�������������������������������������������������������0000644�0001750�0000144�00000001632�12014201074�020152� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** library cpio; uses SysUtils, Classes, WcxPlugin, cpio_io in 'cpio_io.pas', cpio_def in 'cpio_def.pas', cpio_archive in 'cpio_archive.pas'; exports CloseArchive, GetPackerCaps, OpenArchive, ProcessFile, ReadHeader, SetChangeVolProc, SetProcessDataProc, CanYouHandleThisFile; {$R *.res} begin end. ������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio_io.pas����������������������������������������������������0000644�0001750�0000144�00000017233�12612631376�020663� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // Part of code (functions DirectoryExists and ForceDirectories) // got from Delphi source code //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit cpio_io; interface uses cpio_def, Classes; type TStrBuf = array[1..260] of Char; function CPIO_ReadHeader(var f : file; var header : CPIO_Header) : Boolean; function IsCPIOArchive(FileName: String): Boolean; function AlignFilePointer(var f : file; align : Integer) : Boolean; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function CreateDirectories(Dir : String) : Boolean; function correct_filename(oldname : AnsiString) : AnsiString; implementation uses SysUtils; {$IFNDEF FPC} // for compiling under Delphi Const DirSeparators : set of char = ['/','\']; Procedure DoDirSeparators (Var FileName : String); VAr I : longint; begin For I:=1 to Length(FileName) do If FileName[I] in DirSeparators then FileName[i]:=PathDelim; end; {$ENDIF} procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function AlignFilePointer; var start : Integer; mul : LongWord; begin Result := False; start := FilePos(f); case align of 2 : mul := $FFFFFFFE; 4 : mul := $FFFFFFFC; 8 : mul := $FFFFFFF8; else Exit; end;{case} if (start mod align) <> 0 then begin start := start and mul; Inc(start, align); end; Seek(f, start); if IOResult = 0 then Result := True; end; function ExcludeTrailingBackslash(Dir:string):string; begin if (length(dir)>0) and (dir[length(dir)]='\') then result:=copy(dir,1,length(dir)-1) else result:=dir; end; function CreateDirectories(Dir : String) : Boolean; begin Result := True; if Length(Dir) = 0 then Result := False else begin Dir := ExcludeTrailingBackslash(Dir); if (Length(Dir) < 3) or DirectoryExists(Dir) or (ExtractFilePath(Dir) = Dir) then Exit; Result := CreateDirectories(ExtractFilePath(Dir)) and CreateDir(Dir); end; end; function OctalToDec(Octal: String): Longword; var i: Integer; begin Result := 0; for i := 1 to Length(Octal) do begin Result := Result shl 3; case Octal[i] of '0'..'7': Result := Result + Longword(Ord(Octal[i]) - Ord('0')); end; end; end; function HexToDec(Hex: String): Longword; var i: Integer; begin Result := 0; for i := 1 to Length(Hex) do begin Result := Result shl 4; case Hex[i] of '0'..'9': Result := Result + LongWord(Ord(Hex[i]) - Ord('0')); 'A'..'F': Result := Result + LongWord(Ord(Hex[i]) - Ord('A')) + 10; 'a'..'f': Result := Result + LongWord(Ord(Hex[i]) - Ord('a')) + 10; end; end; end; function CPIO_ReadHeader(var f : file; var header : CPIO_Header): Boolean; var Buffer : array [0..259] of AnsiChar; OldHdr : TOldBinaryHeader absolute Buffer; OdcHdr : TOldCharHeader absolute Buffer; NewHdr : TNewCharHeader absolute Buffer; ofs : Integer; begin Result := False; {First, check the type of header} BlockRead(f, Buffer[0], 6); if IOResult <> 0 then Exit; header.IsOldHeader := False; // Old binary format. if PWord(@Buffer[0])^ = $71C7 then begin header.IsOldHeader := True; BlockRead(f, Buffer[6], SizeOf(TOldBinaryHeader) - 6); if IOResult <> 0 then Exit; with header, OldHdr do begin magic := c_magic; dev_major := c_dev; dev_minor := 0; inode := c_ino; mode := c_mode; uid := c_uid; gid := c_gid; nlink := c_nlink; mtime := 65536 * c_mtime1 + c_mtime2; filesize := 65536 * c_filesize1 + c_filesize2; namesize := c_namesize; end; end // Old Ascii format. else if strlcomp(Buffer, '070707', 6) = 0 then begin BlockRead(f, Buffer[6], SizeOf(TOldCharHeader) - 6); if IOResult <> 0 then Exit; with header, OdcHdr do begin magic := OctalToDec(c_magic); dev_major := OctalToDec(c_dev); dev_minor := 0; inode := OctalToDec(c_ino); mode := OctalToDec(c_mode); uid := OctalToDec(c_uid); gid := OctalToDec(c_gid); nlink := OctalToDec(c_nlink); mtime := OctalToDec(c_mtime); filesize := OctalToDec(c_filesize); namesize := OctalToDec(c_namesize); end; end // New Ascii format. else if (strlcomp(Buffer, '070701', 6) = 0) or (strlcomp(Buffer, '070702', 6) = 0) then begin BlockRead(f, Buffer[6], SizeOf(TNewCharHeader) - 6); if IOResult <> 0 then Exit; with header, NewHdr do begin magic := HexToDec(c_magic); dev_major := HexToDec(c_devmajor); dev_minor := HexToDec(c_devminor); inode := HexToDec(c_ino); mode := HexToDec(c_mode); uid := HexToDec(c_uid); gid := HexToDec(c_gid); nlink := HexToDec(c_nlink); mtime := HexToDec(c_mtime); filesize := HexToDec(c_filesize); namesize := HexToDec(c_namesize); end; end else Exit; with header do begin if namesize = 0 then exit; {Error!} {Read name} ofs:=0; if namesize > 259 then begin ofs := namesize - 259; namesize := 259; end; FillChar(Buffer, SizeOf(Buffer), #0); BlockRead(f, Buffer, namesize); if IOResult <> 0 then Exit; SetString(filename, Buffer, namesize); if ofs <> 0 then Seek(f, FilePos(f) + ofs); origname := filename; DoDirSeparators(filename); if IsOldHeader then begin if not AlignFilePointer(f, 2) then Exit; end else if not AlignFilePointer(f, 4) then Exit; //Correct file name started with "./" or "/" filename := correct_filename(filename); end; Result := True; end; function IsCPIOArchive(FileName: String): Boolean; type TAsciiHeader = array[0..5] of AnsiChar; const sOld: TAsciiHeader = ('0', '7', '0', '7', '0', '7'); sNew: TAsciiHeader = ('0', '7', '0', '7', '0', '1'); sCrc: TAsciiHeader = ('0', '7', '0', '7', '0', '2'); var Buf: TAsciiHeader; Stream: TFileStream; begin Result := False; Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone); try if (Stream.Size >= 6) and (Stream.Read(Buf[0], 6) = 6) then begin Result := // Binary format (PWord(@Buf[0])^ = $71C7) or // Ascii formats CompareMem(@Buf[0], @sOld[0], 6) or CompareMem(@Buf[0], @sNew[0], 6) or CompareMem(@Buf[0], @sCrc[0], 6); end; finally Stream.Free; end; end; function correct_filename(oldname : AnsiString) : AnsiString; begin Result := oldname; if Length(oldname) > 1 then begin case oldname[1] of '.' : case oldname[2] of '/', '\' : System.Delete(oldname, 1, 2); end;{case} '/', '\' : System.Delete(oldname, 1, 1); end;{case} end; Result := oldname; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio_archive.pas�����������������������������������������������0000644�0001750�0000144�00000025165�12014201074�021660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** { Add some changes for Lazarus and Linux compability Copyright (C) 2007-2009 Koblov Alexander (Alexx2000@mail.ru) } //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** // History // 2001-02-04 Bug: Error Opening rpm file on CD (readonly) // Fix: Add FileMode = 0 before Reset // Who: Oliver Haeger <haeger@inghb.de> // 2001-02-27 Bug: My or Ghisler I don't know : WC incorrectly // work with names in archive started with // "./" or "/" (normal UNIX filenames form) unit cpio_archive; interface {$mode delphi}{$A-,I-} {$include calling.inc} uses Classes, WcxPlugin, cpio_def, cpio_io; const MAX_ARCHIVE_LIST = 20; type PArchiveRec = ^TArchiveRec; TArchiveRec = record handle_io : THandle; handle_file : file; fname : AnsiString; fdate : Integer; fgEndArchive : Boolean; process_proc : TProcessDataProc; changevol_proc : TChangeVolProc; last_header : CPIO_Header; end;{ArchiveRec} var aList : TList; function GetPackerCaps : Integer; dcpcall; function OpenArchive(var ArchiveData : TOpenArchiveData) : TArcHandle; dcpcall; function CloseArchive(hArcData : TArcHandle) : Integer; dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData) : Integer; dcpcall; function ProcessFile(hArcData : TArcHandle; Operation : Integer; DestPath : PChar; DestName : PChar) : Integer; dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; ProcessDataProc : TProcessDataProc); dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; ChangeVolProc : TChangeVolProc); dcpcall; function CanYouHandleThisFile(FileName: PAnsiChar): Boolean; dcpcall; implementation uses SysUtils, DCDateTimeUtils, DCBasicTypes; function GetArchiveID(hArcData : THandle) : Integer; var i_rec : Integer; arec : PArchiveRec; begin Result := -1; if aList.Count = 0 then Exit; for i_rec := 0 to (aList.Count - 1) do begin arec := aList.Items[i_rec]; if arec^.handle_io = hArcData then begin Result := i_rec; Break; end; end; end; function GetPackerCaps; begin Result := 0; end; function OpenArchive; var arch : THandle; arec : PArchiveRec; filename : String; fgError : Boolean; begin arec := nil; arch := 0; fgError := False; if aList.Count >= MAX_ARCHIVE_LIST then begin fgError := True; end else begin filename := String(ArchiveData.ArcName); arch := FileOpen(filename, fmOpenRead or fmShareDenyNone); if arch = -1 then begin fgError := True; end else begin New(arec); with arec^ do begin handle_io := arch; fname := filename; fdate := FileAge(filename); fgEndArchive := False; process_proc := nil; changevol_proc := nil; if fdate = -1 then fdate := 0; end; AssignFile(arec^.handle_file, filename); FileMode := 0; Reset(arec^.handle_file, 1); if IOResult <> 0 then begin fgError := True; end;{ioresult} end;{arch = -1} end;{max count reached} if fgError then begin if arec <> nil then begin CloseFile(arec^.handle_file); Dispose(arec); end; FileClose(arch); Result := 0; ArchiveData.OpenResult := E_EOPEN end else begin aList.Add(arec); Result := arch; end; end; function CloseArchive; var i_rec : Integer; arec : PArchiveRec; begin if aList.Count <> 0 then begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; CloseFile(arec^.handle_file); FileClose(hArcData); Dispose(arec); aList.Delete(i_rec); end; end; Result := E_SUCCESS; end; function ReadHeader(hArcData : TArcHandle; var HeaderData : THeaderData): Integer; var i_rec : Integer; arec : PArchiveRec; header : CPIO_Header; begin Result := E_EREAD; i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; if arec^.fgEndArchive then Result := E_END_ARCHIVE else begin while True do begin if CPIO_ReadHeader(arec^.handle_file, header) then begin if header.filename = 'TRAILER!!!' then begin Result := E_END_ARCHIVE; Break end else begin if header.filesize <> 0 then begin with HeaderData do begin copy_str2buf(TStrBuf(ArcName), arec^.fname); copy_str2buf(TStrBuf(FileName), header.filename); PackSize := header.filesize; UnpSize := header.filesize; FileAttr := LongInt(header.mode); FileTime := LongInt(UnixFileTimeToDosTime(TUnixFileTime(header.mtime))); end;{with} Result := 0; Break; end else Continue; end;{not end of file "TRAILER!!!"} end{if header readed} else begin Result := E_EREAD; Break; end; end;{while true} arec^.last_header := header; end;{if not end of archive} end; end; function ProcessFile; var i_rec : Integer; arec : PArchiveRec; cpio_file : file; cpio_name : String; cpio_dir : String; buf : Pointer; buf_size : LongWord; fsize : LongWord; fgReadError : Boolean; fgWriteError: Boolean; fAborted : Boolean; head : CPIO_Header; begin i_rec := GetArchiveID(hArcData); arec := aList.Items[i_rec]; head := arec^.last_header; case Operation of PK_TEST : begin faborted:=false; fsize := head.filesize; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; while not faborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then faborted:=true; end;{while} if not fgReadError and not faborted then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; if Assigned(arec^.process_proc) then arec^.process_proc(nil, fsize); end; end; if faborted then Result:=E_EABORTED else if fgReadError then Result := E_EREAD else begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end; FreeMem(buf, 65536); end;{PK_TEST} PK_SKIP : begin Seek(arec^.handle_file, FilePos(arec^.handle_file) + LongInt(head.filesize)); if IOResult = 0 then begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end else Result := E_EREAD; end;{PK_SKIP} PK_EXTRACT : begin cpio_name := String(DestName); cpio_dir := ExtractFileDir(cpio_name); if CreateDirectories(cpio_dir) then begin AssignFile(cpio_file, cpio_name); Rewrite(cpio_file, 1); if IOResult <> 0 then Result := E_ECREATE else begin fsize := head.filesize; buf_size := 65536; GetMem(buf, buf_size); fgReadError := False; fgWriteError :=False; fAborted := False; while not fAborted do begin if fsize < buf_size then Break; BlockRead(arec^.handle_file, buf^, buf_size); if IOResult <> 0 then begin fgReadError := True; Break; end;{if IO error} BlockWrite(cpio_file, buf^, buf_size); if ioresult<>0 then begin fgWriteError:=true; break; end; Dec(fsize, buf_size); if Assigned(arec^.process_proc) then if arec^.process_proc(nil, buf_size)=0 then fAborted:=true; end;{while} if not fgReadError then begin if fsize <> 0 then begin BlockRead(arec^.handle_file, buf^, fsize); if IOResult <> 0 then fgReadError := True; BlockWrite(cpio_file, buf^, fsize); if ioresult<>0 then fgWriteError:=true; if Assigned(arec^.process_proc) then if arec^.process_proc(nil, fsize)=0 then fAborted:=true; end; end; if fAborted then Result:= E_EABORTED else if fgWriteError then Result := E_EWRITE else if fgReadError then Result := E_EREAD else begin Result := 0; if arec^.last_header.IsOldHeader then begin if not AlignFilePointer(arec^.handle_file, 2) then Result := E_EREAD; end else if not AlignFilePointer(arec^.handle_file, 4) then Result := E_EREAD; end; FileSetDate(tfilerec(cpio_file).handle, LongInt(UnixFileTimeToDosTime(TUnixFileTime(head.mtime)))); CloseFile(cpio_file); if result<>0 then Erase(cpio_file); FreeMem(buf, 65536); end; end else Result := E_ECREATE; end{PK_EXTRACT} else Result := 0; end;{case operation} end; procedure SetProcessDataProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.process_proc := ProcessDataProc; end; end; procedure SetChangeVolProc; var i_rec : Integer; arec : PArchiveRec; begin i_rec := GetArchiveID(hArcData); if i_rec <> -1 then begin arec := aList.Items[i_rec]; arec^.changevol_proc := ChangeVolProc; end; end; function CanYouHandleThisFile; begin try Result:= IsCPIOArchive(StrPas(FileName)); except Result := False; end; end; initialization aList := TList.Create; finalization aList.Free; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/src/cpio.lpi�������������������������������������������������������0000644�0001750�0000144�00000011117�12451527075�020171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="CPIO WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/cpio.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <IncludeAssertionCode Value="True"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedproject\"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="cpio.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/cpio.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../../../../sdk"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/lib/���������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717731�016517� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/cpio/install.txt��������������������������������������������������������0000644�0001750�0000144�00000001026�12014201074�020126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������How to install RPM plugin: 1. Unzip the rpm.wcx and cpio.wcx to the Totalcmd directory 2. In Total Commander, choose Configuration - Options 3. Open the 'Packer' page 4. Click 'Configure packer extension WCXs 5. type rpm as the extension 6. Click 'new type', and select the rpm.wcx 5. type cpio as the extension 6. Click 'new type', and select the cpio.wcx 7. Click OK What it does: This plugin allow you to browse rpm archives. Mandryka Yurij Brain group http://braingroup.hotmail.ru/wcplugins/ mailto:braingroup@hotmail.ru����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/��������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�015622� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017571� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/license.txt�����������������������������������������������0000644�0001750�0000144�00000062233�12014201074�021730� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ MOZILLA PUBLIC LICENSE Version 1.1 --------------- 1. Definitions. 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. 1.5. "Executable" means Covered Code in any form other than Source Code. 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. 1.8. "License" means this document. 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: A. Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. B. Any new file that contains any part of the Original Code or previous Modifications. 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. 2. Source Code License. 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and (b) under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). (c) the licenses granted in this Section 2.1(a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. (d) Notwithstanding Section 2.1(b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). (c) the licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first makes Commercial Use of the Covered Code. (d) Notwithstanding Section 2.2(b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. 3. Distribution Obligations. 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. 3.4. Intellectual Property Matters (a) Third Party Claims. If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. (b) Contributor APIs. If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. (c) Representations. Contributor represents that, except as disclosed pursuant to Section 3.4(a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Section 3.1-3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. 4. Inability to Comply Due to Statute or Regulation. If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. 5. Application of this License. This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. 6. Versions of the License. 6.1. New Versions. Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. 6.2. Effect of New Versions. Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. 6.3. Derivative Works. If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) 7. DISCLAIMER OF WARRANTY. COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. 8. TERMINATION. 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: (a) such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. (b) any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. 9. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. 10. U.S. GOVERNMENT END USERS. The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. 11. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. 12. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. 13. MULTIPLE-LICENSED CODE. Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the NPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. EXHIBIT A -Mozilla Public License. ``The contents of this file are 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/MPL/ 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. The Original Code is ______________________________________. The Initial Developer of the Original Code is ________________________. Portions created by ______________________ are Copyright (C) ______ _______________________. All Rights Reserved. Contributor(s): ______________________________________. Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." [NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications.] ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abziptyp.pas����������������������������������������������0000644�0001750�0000144�00000251362�12630665222�022134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipTyp.pas *} {*********************************************************} {* ABBREVIA: PKZip types *} {* Based on information from Appnote.txt, shipped with *} {* PKWare's PKZip for Windows 2.5 *} {*********************************************************} unit AbZipTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbUtils, AbSpanSt; const { note #$50 = 'P', #$4B = 'K'} Ab_ZipVersion = 63; Ab_ZipLocalFileHeaderSignature : Longint = $04034B50; Ab_ZipDataDescriptorSignature : Longint = $08074B50; Ab_ZipCentralDirectoryFileHeaderSignature : Longint = $02014B50; Ab_Zip64EndCentralDirectorySignature : Longint = $06064B50; Ab_Zip64EndCentralDirectoryLocatorSignature:Longint = $07064B50; Ab_ZipEndCentralDirectorySignature : Longint = $06054B50; Ab_ZipSpannedSetSignature : Longint = $08074B50; Ab_ZipPossiblySpannedSignature : Longint = $30304B50; Ab_GeneralZipSignature : Word = $4B50; Ab_ArchiveExtraDataRecord : Longint = $08064B50; Ab_DigitalSignature : Longint = $05054B50; Ab_WindowsExeSignature : Word = $5A4D; Ab_LinuxExeSignature : Longint = $464C457F; AbDefZipSpanningThreshold = 0; AbDefPasswordRetries = 3; AbFileIsEncryptedFlag = $0001; AbHasDataDescriptorFlag = $0008; AbLanguageEncodingFlag = $0800; Ab_Zip64SubfieldID : Word = $0001; Ab_InfoZipUnicodePathSubfieldID : Word = $7075; Ab_XceedUnicodePathSubfieldID : Word = $554E; Ab_XceedUnicodePathSignature : LongWord= $5843554E; type PAbByteArray4K = ^TAbByteArray4K; TAbByteArray4K = array[1..4096] of Byte; PAbByteArray8K = ^TAbByteArray8K; TAbByteArray8K = array[0..8192] of Byte; PAbIntArray8K = ^TAbIntArray8K; TAbIntArray8K = array[0..8192] of SmallInt; PAbWordArray = ^TAbWordArray; TAbWordArray = array[0..65535 div SizeOf(Word)-1] of Word; PAbByteArray = ^TAbByteArray; TAbByteArray = array[0..65535-1] of Byte; PAbSmallIntArray = ^TAbSmallIntArray; TAbSmallIntArray = array[0..65535 div SizeOf(SmallInt)-1] of SmallInt; PAbIntegerArray = ^TAbIntegerArray; TAbIntegerArray = array[0..65535 div sizeof(integer)-1] of integer; TAbZip64EndOfCentralDirectoryRecord = packed record Signature : Longint; RecordSize : Int64; VersionMadeBy : Word; VersionNeededToExtract : Word; DiskNumber : LongWord; StartDiskNumber : LongWord; EntriesOnDisk : Int64; TotalEntries : Int64; DirectorySize : Int64; DirectoryOffset : Int64; end; TAbZip64EndOfCentralDirectoryLocator = packed record Signature : Longint; StartDiskNumber : Longint; RelativeOffset : Int64; TotalDisks : Longint; end; TAbZipEndOfCentralDirectoryRecord = packed record Signature : Longint; DiskNumber : Word; StartDiskNumber : Word; EntriesOnDisk : Word; TotalEntries : Word; DirectorySize : LongWord; DirectoryOffset : LongWord; CommentLength : Word; end; TAbFollower = {used to expand reduced files} packed record Size : Byte; {size of follower set} FSet : array[0..31] of Byte; {follower set} end; PAbFollowerSets = ^TAbFollowerSets; TAbFollowerSets = array[0..255] of TAbFollower; PAbSfEntry = ^TAbSfEntry; TAbSfEntry = {entry in a Shannon-Fano tree} packed record case Byte of 0 : (Code : Word; Value, BitLength : Byte); 1 : (L : Longint); end; PAbSfTree = ^TAbSfTree; TAbSfTree = packed record {a Shannon-Fano tree} Entries : SmallInt; MaxLength : SmallInt; Entry : array[0..256] of TAbSfEntry; end; PInfoZipUnicodePathRec = ^TInfoZipUnicodePathRec; TInfoZipUnicodePathRec = packed record Version: Byte; NameCRC32: LongInt; UnicodeName: array[0..0] of AnsiChar; end; PXceedUnicodePathRec = ^TXceedUnicodePathRec; TXceedUnicodePathRec = packed record Signature: LongWord; Length: Integer; UnicodeName: array[0..0] of WideChar; end; PZip64LocalHeaderRec = ^TZip64LocalHeaderRec; TZip64LocalHeaderRec = packed record UncompressedSize: Int64; CompressedSize: Int64; end; type TAbZipCompressionMethod = (cmStored, cmShrunk, cmReduced1, cmReduced2, cmReduced3, cmReduced4, cmImploded, cmTokenized, cmDeflated, cmEnhancedDeflated, cmDCLImploded, cmBzip2 = 12, cmLZMA = 14, cmIBMTerse = 18, cmLZ77, cmXz = 95, cmJPEG = 96, cmWavPack = 97, cmPPMd); TAbZipSupportedMethod = (smStored, smDeflated, smBestMethod); {ExternalFileAttributes compatibility; aliases are Info-ZIP/PKZIP overlaps} TAbZipHostOS = (hosDOS, hosAmiga, hosVAX, hosUnix, hosVMCMS, hosAtari, hosOS2, hosMacintosh, hosZSystem, hosCPM, hosNTFS, hosTOPS20 = hosNTFS, hosMVS, hosWinNT = hosMVS, hosVSE, hosQDOS = hosVSE, hosRISC, hosVFAT, hosAltMVS, hosBeOS, hosTandem, hosOS400, hosTHEOS = hosOS400, hosDarwin, hosAtheOS = 30); {for method 6 - imploding} TAbZipDictionarySize = (dsInvalid, ds4K, ds8K); {for method 8 - deflating} TAbZipDeflationOption = (doInvalid, doNormal, doMaximum, doFast, doSuperFast ); type TAbNeedPasswordEvent = procedure(Sender : TObject; var NewPassword : AnsiString) of object; const AbDefCompressionMethodToUse = smBestMethod; AbDefDeflationOption = doNormal; type TAbZipDataDescriptor = class( TObject ) protected {private} FCRC32 : Longint; FCompressedSize : Int64; FUncompressedSize : Int64; public {methods} procedure SaveToStream( Stream : TStream ); public {properties} property CRC32 : Longint read FCRC32 write FCRC32; property CompressedSize : Int64 read FCompressedSize write FCompressedSize; property UncompressedSize : Int64 read FUncompressedSize write FUncompressedSize; end; type { TAbZipFileHeader interface =============================================== } {ancestor class for ZipLocalFileHeader and DirectoryFileHeader} TAbZipFileHeader = class( TObject ) protected {private} FValidSignature : Longint; FSignature : Longint; FVersionNeededToExtract : Word; FGeneralPurposeBitFlag : Word; FCompressionMethod : Word; FLastModFileTime : Word; FLastModFileDate : Word; FCRC32 : Longint; FCompressedSize : LongWord; FUncompressedSize : LongWord; FFileName : AnsiString; FExtraField : TAbExtraField; protected {methods} function GetCompressionMethod : TAbZipCompressionMethod; function GetCompressionRatio : Double; function GetDataDescriptor : Boolean; function GetDeflationOption : TAbZipDeflationOption; function GetDictionarySize : TAbZipDictionarySize; function GetEncrypted : Boolean; function GetIsUTF8 : Boolean; function GetShannonFanoTreeCount : Byte; function GetValid : Boolean; procedure SetCompressionMethod( Value : TAbZipCompressionMethod ); procedure SetIsUTF8( Value : Boolean ); public {methods} constructor Create; destructor Destroy; override; public {properties} property Signature : Longint read FSignature write FSignature; property VersionNeededToExtract : Word read FVersionNeededToExtract write FVersionNeededToExtract; property GeneralPurposeBitFlag : Word read FGeneralPurposeBitFlag write FGeneralPurposeBitFlag; property CompressionMethod : TAbZipCompressionMethod read GetCompressionMethod write SetCompressionMethod; property LastModFileTime : Word read FLastModFileTime write FLastModFileTime; property LastModFileDate : Word read FLastModFileDate write FLastModFileDate; property CRC32 : Longint read FCRC32 write FCRC32; property CompressedSize : LongWord read FCompressedSize write FCompressedSize; property UncompressedSize : LongWord read FUncompressedSize write FUncompressedSize; property FileName : AnsiString read FFileName write FFileName; property ExtraField : TAbExtraField read FExtraField; property CompressionRatio : Double read GetCompressionRatio; property DeflationOption : TAbZipDeflationOption read GetDeflationOption; property DictionarySize : TAbZipDictionarySize read GetDictionarySize; property HasDataDescriptor : Boolean read GetDataDescriptor; property IsValid : Boolean read GetValid; property IsEncrypted : Boolean read GetEncrypted; property IsUTF8 : Boolean read GetIsUTF8 write SetIsUTF8; property ShannonFanoTreeCount : Byte read GetShannonFanoTreeCount; end; { TAbZipLocalFileHeader interface ========================================== } TAbZipLocalFileHeader = class( TAbZipFileHeader ) public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); end; { TAbZipDirectoryFileHeader interface ====================================== } TAbZipDirectoryFileHeader = class( TAbZipFileHeader ) protected {private} FVersionMadeBy : Word; FDiskNumberStart : Word; FInternalFileAttributes : Word; FExternalFileAttributes : LongWord; FRelativeOffset : LongWord; FFileComment : AnsiString; public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream ); public {properties} property VersionMadeBy : Word read FVersionMadeBy write FVersionMadeBy; property DiskNumberStart : Word read FDiskNumberStart write FDiskNumberStart; property InternalFileAttributes : Word read FInternalFileAttributes write FInternalFileAttributes; property ExternalFileAttributes : LongWord read FExternalFileAttributes write FExternalFileAttributes; property RelativeOffset : LongWord read FRelativeOffset write FRelativeOffset; property FileComment : AnsiString read FFileComment write FFileComment; end; { TAbZipDirectoryFileFooter interface ====================================== } TAbZipDirectoryFileFooter = class( TObject ) protected {private} FDiskNumber : LongWord; FStartDiskNumber : LongWord; FEntriesOnDisk : Int64; FTotalEntries : Int64; FDirectorySize : Int64; FDirectoryOffset : Int64; FZipfileComment : AnsiString; function GetIsZip64: Boolean; public {methods} procedure LoadFromStream( Stream : TStream ); procedure LoadZip64FromStream( Stream : TStream ); procedure SaveToStream( Stream : TStream; aZip64TailOffset : Int64 = -1 ); public {properties} property DiskNumber : LongWord read FDiskNumber write FDiskNumber; property EntriesOnDisk : Int64 read FEntriesOnDisk write FEntriesOnDisk; property TotalEntries : Int64 read FTotalEntries write FTotalEntries; property DirectorySize : Int64 read FDirectorySize write FDirectorySize; property DirectoryOffset : Int64 read FDirectoryOffset write FDirectoryOffset; property StartDiskNumber : LongWord read FStartDiskNumber write FStartDiskNumber; property ZipfileComment : AnsiString read FZipfileComment write FZipfileComment; property IsZip64: Boolean read GetIsZip64; end; { TAbZipItem interface ===================================================== } TAbZipItem = class( TAbArchiveItem ) protected {private} FItemInfo : TAbZipDirectoryFileHeader; FDiskNumberStart : LongWord; FLFHExtraField : TAbExtraField; FRelativeOffset : Int64; protected {methods} function GetCompressionMethod : TAbZipCompressionMethod; function GetCompressionRatio : Double; function GetDeflationOption : TAbZipDeflationOption; function GetDictionarySize : TAbZipDictionarySize; function GetExtraField : TAbExtraField; function GetFileComment : AnsiString; function GetGeneralPurposeBitFlag : Word; function GetHostOS: TAbZipHostOS; function GetInternalFileAttributes : Word; function GetRawFileName : AnsiString; function GetShannonFanoTreeCount : Byte; function GetVersionMadeBy : Word; function GetVersionNeededToExtract : Word; procedure SaveCDHToStream( Stream : TStream ); procedure SaveDDToStream( Stream : TStream ); procedure SaveLFHToStream( Stream : TStream ); procedure SetCompressionMethod( Value : TAbZipCompressionMethod ); procedure SetDiskNumberStart( Value : LongWord ); procedure SetFileComment(const Value : AnsiString ); procedure SetGeneralPurposeBitFlag( Value : Word ); procedure SetHostOS( Value : TAbZipHostOS ); procedure SetInternalFileAttributes( Value : Word ); procedure SetRelativeOffset( Value : Int64 ); procedure SetVersionMadeBy( Value : Word ); procedure SetVersionNeededToExtract( Value : Word ); procedure UpdateVersionNeededToExtract; procedure UpdateZip64ExtraHeader; protected {redefined property methods} function GetCRC32 : Longint; override; function GetExternalFileAttributes : LongWord; override; function GetIsDirectory: Boolean; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetNativeFileAttributes : LongInt; override; function GetNativeLastModFileTime: Longint; override; procedure SetCompressedSize( const Value : Int64 ); override; procedure SetCRC32( const Value : Longint ); override; procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string ); override; procedure SetLastModFileDate(const Value : Word ); override; procedure SetLastModFileTime(const Value : Word ); override; procedure SetUncompressedSize( const Value : Int64 ); override; public {methods} constructor Create; destructor Destroy; override; procedure LoadFromStream( Stream : TStream ); public {properties} property CompressionMethod : TAbZipCompressionMethod read GetCompressionMethod write SetCompressionMethod; property CompressionRatio : Double read GetCompressionRatio; property DeflationOption : TAbZipDeflationOption read GetDeflationOption; property DictionarySize : TAbZipDictionarySize read GetDictionarySize; property DiskNumberStart : LongWord read FDiskNumberStart write SetDiskNumberStart; property ExtraField : TAbExtraField read GetExtraField; property FileComment : AnsiString read GetFileComment write SetFileComment; property HostOS: TAbZipHostOS read GetHostOS write SetHostOS; property InternalFileAttributes : Word read GetInternalFileAttributes write SetInternalFileAttributes; property GeneralPurposeBitFlag : Word read GetGeneralPurposeBitFlag write SetGeneralPurposeBitFlag; property LFHExtraField : TAbExtraField read FLFHExtraField; property RawFileName : AnsiString read GetRawFileName; property RelativeOffset : Int64 read FRelativeOffset write SetRelativeOffset; property ShannonFanoTreeCount : Byte read GetShannonFanoTreeCount; property VersionMadeBy : Word read GetVersionMadeBy write SetVersionMadeBy; property VersionNeededToExtract : Word read GetVersionNeededToExtract write SetVersionNeededToExtract; end; { TAbZipArchive interface ================================================== } TAbZipArchive = class( TAbArchive ) protected {private} FCompressionMethodToUse : TAbZipSupportedMethod; FDeflationOption : TAbZipDeflationOption; FInfo : TAbZipDirectoryFileFooter; FIsExecutable : Boolean; FPassword : AnsiString; FPasswordRetries : Byte; FStubSize : LongWord; FExtractHelper : TAbArchiveItemExtractEvent; FExtractToStreamHelper : TAbArchiveItemExtractToStreamEvent; FTestHelper : TAbArchiveItemTestEvent; FInsertHelper : TAbArchiveItemInsertEvent; FInsertFromStreamHelper : TAbArchiveItemInsertFromStreamEvent; FOnNeedPassword : TAbNeedPasswordEvent; FOnRequestLastDisk : TAbRequestDiskEvent; FOnRequestNthDisk : TAbRequestNthDiskEvent; FOnRequestBlankDisk : TAbRequestDiskEvent; protected {methods} procedure DoExtractHelper(Index : Integer; const NewName : string); procedure DoExtractToStreamHelper(Index : Integer; aStream : TStream); procedure DoTestHelper(Index : Integer); procedure DoInsertHelper(Index : Integer; OutStream : TStream); procedure DoInsertFromStreamHelper(Index : Integer; OutStream : TStream); function GetItem( Index : Integer ) : TAbZipItem; function GetZipfileComment : AnsiString; procedure PutItem( Index : Integer; Value : TAbZipItem ); procedure DoRequestDisk(const AMessage: string; var Abort : Boolean); procedure DoRequestLastDisk( var Abort : Boolean ); virtual; procedure DoRequestNthDisk(Sender: TObject; DiskNumber : Byte; var Abort : Boolean ); virtual; procedure DoRequestBlankDisk(Sender: TObject; var Abort : Boolean ); virtual; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure TestItemAt(Index : Integer); override; function FixName(const Value : string ) : string; override; function GetSupportsEmptyFolders: Boolean; override; procedure LoadArchive; override; procedure SaveArchive; override; procedure SetZipfileComment(const Value : AnsiString ); protected {properties} property IsExecutable : Boolean read FIsExecutable write FIsExecutable; public {protected} procedure DoRequestImage(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); public {methods} constructor CreateFromStream( aStream : TStream; const ArchiveName : string ); override; destructor Destroy; override; function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; public {properties} property CompressionMethodToUse : TAbZipSupportedMethod read FCompressionMethodToUse write FCompressionMethodToUse; property DeflationOption : TAbZipDeflationOption read FDeflationOption write FDeflationOption; property ExtractHelper : TAbArchiveItemExtractEvent read FExtractHelper write FExtractHelper; property ExtractToStreamHelper : TAbArchiveItemExtractToStreamEvent read FExtractToStreamHelper write FExtractToStreamHelper; property TestHelper : TAbArchiveItemTestEvent read FTestHelper write FTestHelper; property InsertHelper : TAbArchiveItemInsertEvent read FInsertHelper write FInsertHelper; property InsertFromStreamHelper : TAbArchiveItemInsertFromStreamEvent read FInsertFromStreamHelper write FInsertFromStreamHelper; property Password : AnsiString read FPassword write FPassword; property PasswordRetries : Byte read FPasswordRetries write FPasswordRetries default AbDefPasswordRetries; property StubSize : LongWord read FStubSize; property ZipfileComment : AnsiString read GetZipfileComment write SetZipfileComment; property Items[Index : Integer] : TAbZipItem read GetItem write PutItem; default; public {events} property OnNeedPassword : TAbNeedPasswordEvent read FOnNeedPassword write FOnNeedPassword; property OnRequestLastDisk : TAbRequestDiskEvent read FOnRequestLastDisk write FOnRequestLastDisk; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write FOnRequestNthDisk; property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write FOnRequestBlankDisk; end; {============================================================================} procedure MakeSelfExtracting( StubStream, ZipStream, SelfExtractingStream : TStream ); {-takes an executable stub, and a .zip format stream, and creates a SelfExtracting stream. The stub should create a TAbZipArchive passing itself as the file, using a read-only open mode. It should then perform operations as needed - like ExtractFiles( '*.*' ). This routine updates the RelativeOffset of each item in the archive} function FindCentralDirectoryTail(aStream : TStream) : Int64; function VerifyZip(Strm : TStream) : TAbArchiveType; function VerifySelfExtracting(Strm : TStream) : TAbArchiveType; function ZipCompressionMethodToString(aMethod: TAbZipCompressionMethod): string; implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} {$IFDEF UnixDialogs} {$IFDEF KYLIX} QControls, QDialogs, {$ENDIF} {$IFDEF LCL} Controls, Dialogs, {$ENDIF} {$ENDIF} Math, AbResString, AbExcept, AbVMStrm, SysUtils, LazUTF8, DCOSUtils, DCClassesUtf8, DCConvertEncoding; function VerifyZip(Strm : TStream) : TAbArchiveType; { determine if stream appears to be in PkZip format } var Footer : TAbZipEndOfCentralDirectoryRecord; Sig : LongInt; TailPosition : int64; StartPos : int64; begin StartPos := Strm.Position; Result := atUnknown; try Strm.Position := 0; if Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig) then begin if (Sig = Ab_ZipSpannedSetSignature) then Result := atSpannedZip else begin { attempt to find Central Directory Tail } TailPosition := FindCentralDirectoryTail( Strm ); if TailPosition <> -1 then begin { check Central Directory Signature } if (Strm.Read(Footer, SizeOf(Footer)) = SizeOf(Footer)) and (Footer.Signature = Ab_ZipEndCentralDirectorySignature) then begin { check Central Directory Offset } if (Footer.DirectoryOffset = High(LongWord)) or ((Strm.Seek(Footer.DirectoryOffset, soBeginning) = Footer.DirectoryOffset) and (Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig)) and (Sig = Ab_ZipCentralDirectoryFileHeaderSignature)) then begin if Footer.DiskNumber = 0 then Result := atZip else Result := atSpannedZip; end; end; end; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := StartPos; end; function VerifySelfExtracting(Strm : TStream) : TAbArchiveType; { determine if stream appears to be an executable with appended PkZip data } var FileSignature : Longint; StartPos : Int64; IsWinExe, IsLinuxExe : Boolean; begin StartPos := Strm.Position; { verify presence of executable stub } {check file type of stub stream} Strm.Position := 0; Strm.Read( FileSignature, sizeof( FileSignature ) ); Result := atSelfExtZip; { detect executable type } IsLinuxExe := FileSignature = Ab_LinuxExeSignature; IsWinExe := LongRec(FileSignature).Lo = Ab_WindowsExeSignature; if not (IsWinExe or IsLinuxExe) then Result := atUnknown; { Check for central directory tail } if VerifyZip(Strm) <> atZip then Result := atUnknown; Strm.Position := StartPos; end; {============================================================================} function ZipCompressionMethodToString(aMethod: TAbZipCompressionMethod): string; begin case aMethod of cmStored: Result := AbZipStored; cmShrunk: Result := AbZipShrunk; cmReduced1..cmReduced4: Result := AbZipReduced; cmImploded: Result := AbZipImploded; cmTokenized: Result := AbZipTokenized; cmDeflated: Result := AbZipDeflated; cmEnhancedDeflated: Result := AbZipDeflate64; cmDCLImploded: Result := AbZipDCLImploded; cmBzip2: Result := AbZipBzip2; cmLZMA: Result := AbZipLZMA; cmIBMTerse: Result := AbZipIBMTerse; cmLZ77: Result := AbZipLZ77; cmJPEG: Result := AbZipJPEG; cmWavPack: Result := AbZipWavPack; cmPPMd: Result := AbZipPPMd; else Result := Format(AbZipUnknown, [Ord(aMethod)]); end; end; {============================================================================} function FindCentralDirectoryTail(aStream : TStream) : Int64; { search end of aStream looking for ZIP Central Directory structure returns position in stream if found (otherwise returns -1), leaves stream positioned at start of structure or at original position if not found } const MaxBufSize = 256 * 1024; var StartPos : Int64; TailRec : TAbZipEndOfCentralDirectoryRecord; Buffer : PAnsiChar; Offset : Int64; TestPos : PAnsiChar; BytesRead : Int64; BufSize : Int64; CommentLen: integer; begin {save the starting position} StartPos := aStream.Seek(0, soCurrent); {start off with the majority case: no zip file comment, so the central directory tail is the last thing in the stream and it's a fixed size and doesn't indicate a zip file comment} Result := aStream.Seek(-sizeof(TailRec), soEnd); if (Result >= 0) then begin aStream.ReadBuffer(TailRec, sizeof(TailRec)); if (TailRec.Signature = Ab_ZipEndCentralDirectorySignature) and (TailRec.CommentLength = 0) then begin aStream.Seek(Result, soBeginning); Exit; end; end; {the zip stream seems to have a comment, or it has null padding bytes from some flaky program, or it's not even a zip formatted stream; we need to search for the tail signature} {get a buffer} BufSize := Min(MaxBufSize, aStream.Size); GetMem(Buffer, BufSize); try {start out searching backwards} Offset := -BufSize; {seek to the search position} Result := aStream.Seek(Offset, soEnd); if (Result < 0) then begin Result := aStream.Seek(0, soBeginning); end; {read a buffer full} BytesRead := aStream.Read(Buffer^, BufSize); if BytesRead < sizeOf(TailRec) then begin Result := -1; Exit; end; {search backwards through the buffer looking for the signature} TestPos := Buffer + BytesRead - sizeof(TailRec); while (TestPos <> Buffer) and (PLongint(TestPos)^ <> Ab_ZipEndCentralDirectorySignature) do dec(TestPos); {if we found the signature...} if (PLongint(TestPos)^ = Ab_ZipEndCentralDirectorySignature) then begin {get the tail record at this position} Move(TestPos^, TailRec, sizeof(TailRec)); {if it's as valid a tail as we can check here...} CommentLen := -Offset - (TestPos - Buffer + sizeof(TailRec)); if (TailRec.CommentLength <= CommentLen) then begin {calculate its position and exit} Result := Result + (TestPos - Buffer); aStream.Seek(Result, soBeginning); Exit; end; end; {if we reach this point, the CD tail is not present} Result := -1; aStream.Seek(StartPos, soBeginning); finally FreeMem(Buffer); end; end; {============================================================================} procedure MakeSelfExtracting( StubStream, ZipStream, SelfExtractingStream : TStream ); {-takes an executable stub, and a .zip format stream, and creates a SelfExtracting stream. The stub should create a TAbZipArchive passing itself as the file, using a read-only open mode. It should then perform operations as needed - like ExtractFiles( '*.*' ). This routine updates the RelativeOffset of each item in the archive} var DirectoryStart : Int64; FileSignature : Longint; StubSize : LongWord; TailPosition : Int64; ZDFF : TAbZipDirectoryFileFooter; ZipItem : TAbZipItem; IsWinExe, IsLinuxExe : Boolean; begin {check file type of stub stream} StubStream.Position := 0; StubStream.Read(FileSignature, SizeOf(FileSignature)); {detect executable type } IsLinuxExe := FileSignature = Ab_LinuxExeSignature; IsWinExe := LongRec(FileSignature).Lo = Ab_WindowsExeSignature; if not (IsWinExe or IsLinuxExe) then raise EAbZipInvalidStub.Create; StubStream.Position := 0; StubSize := StubStream.Size; ZipStream.Position := 0; ZipStream.Read( FileSignature, sizeof( FileSignature ) ); if LongRec(FileSignature).Lo <> Ab_GeneralZipSignature then raise EAbZipInvalid.Create; ZipStream.Position := 0; {copy the stub into the selfex stream} SelfExtractingStream.Position := 0; SelfExtractingStream.CopyFrom( StubStream, 0 ); TailPosition := FindCentralDirectoryTail( ZipStream ); if TailPosition = -1 then raise EAbZipInvalid.Create; {load the ZipDirectoryFileFooter} ZDFF := TAbZipDirectoryFileFooter.Create; try ZDFF.LoadFromStream( ZipStream ); DirectoryStart := ZDFF.DirectoryOffset; finally ZDFF.Free; end; {copy everything up to the CDH into the SelfExtractingStream} ZipStream.Position := 0; SelfExtractingStream.CopyFrom( ZipStream, DirectoryStart ); ZipStream.Position := DirectoryStart; repeat ZipItem := TAbZipItem.Create; try ZipItem.LoadFromStream( ZipStream ); ZipItem.RelativeOffset := ZipItem.RelativeOffset + StubSize; {save the modified entry into the Self Extracting Stream} ZipItem.SaveCDHToStream( SelfExtractingStream ); finally ZipItem.Free; end; until ZipStream.Position = TailPosition; {save the CDH Footer.} ZDFF := TAbZipDirectoryFileFooter.Create; try ZDFF.LoadFromStream( ZipStream ); ZDFF.DirectoryOffset := ZDFF.DirectoryOffset + StubSize; ZDFF.SaveToStream( SelfExtractingStream ); finally ZDFF.Free; end; end; {============================================================================} { TAbZipDataDescriptor implementation ====================================== } procedure TAbZipDataDescriptor.SaveToStream( Stream : TStream ); begin Stream.Write( Ab_ZipDataDescriptorSignature, sizeof( Ab_ZipDataDescriptorSignature ) ); Stream.Write( FCRC32, sizeof( FCRC32 ) ); if (FCompressedSize >= $FFFFFFFF) or (FUncompressedSize >= $FFFFFFFF) then begin Stream.Write( FCompressedSize, sizeof( FCompressedSize ) ); Stream.Write( FUncompressedSize, sizeof( FUncompressedSize ) ); end else begin Stream.Write( FCompressedSize, sizeof( LongWord ) ); Stream.Write( FUncompressedSize, sizeof( LongWord ) ); end; end; { -------------------------------------------------------------------------- } { TAbZipFileHeader implementation ========================================== } constructor TAbZipFileHeader.Create; begin inherited Create; FExtraField := TAbExtraField.Create; FValidSignature := $0; end; { -------------------------------------------------------------------------- } destructor TAbZipFileHeader.Destroy; begin FreeAndNil(FExtraField); inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetCompressionMethod : TAbZipCompressionMethod; begin Result := TAbZipCompressionMethod( FCompressionMethod ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDataDescriptor : Boolean; begin Result := ( CompressionMethod = cmDeflated ) and ( ( FGeneralPurposeBitFlag and AbHasDataDescriptorFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetCompressionRatio : Double; var CompSize : Int64; begin {adjust for encrypted headers - ensures we never get negative compression ratios for stored, encrypted files - no guarantees about negative compression ratios in other cases} if isEncrypted then CompSize := CompressedSize - 12 else CompSize := CompressedSize; if UncompressedSize > 0 then Result := 100.0 * ( 1 - ( ( 1.0 * CompSize ) / UncompressedSize ) ) else Result := 0.0; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDeflationOption : TAbZipDeflationOption; begin if CompressionMethod = cmDeflated then if ( ( FGeneralPurposeBitFlag and $02 ) <> 0 ) then if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := doSuperFast else Result := doMaximum else if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := doFast else Result := doNormal else Result := doInvalid; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetDictionarySize : TAbZipDictionarySize; begin if CompressionMethod = cmImploded then if ( ( FGeneralPurposeBitFlag and $02 ) <> 0 ) then Result := ds8K else Result := ds4K else Result := dsInvalid; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetEncrypted : Boolean; begin {bit 0 of the GeneralPurposeBitFlag} Result := ( ( FGeneralPurposeBitFlag and AbFileIsEncryptedFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetIsUTF8 : Boolean; begin Result := ( ( GeneralPurposeBitFlag and AbLanguageEncodingFlag ) <> 0 ); end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetShannonFanoTreeCount : Byte; begin if CompressionMethod = cmImploded then if ( ( FGeneralPurposeBitFlag and $04 ) <> 0 ) then Result := 3 else Result := 2 else Result := 0; end; { -------------------------------------------------------------------------- } function TAbZipFileHeader.GetValid : Boolean; begin Result := ( FValidSignature = FSignature ); end; { -------------------------------------------------------------------------- } procedure TAbZipFileHeader.SetCompressionMethod( Value : TAbZipCompressionMethod ); begin FCompressionMethod := Ord( Value ); end; { -------------------------------------------------------------------------- } procedure TAbZipFileHeader.SetIsUTF8( Value : Boolean ); begin if Value then GeneralPurposeBitFlag := GeneralPurposeBitFlag or AbLanguageEncodingFlag else GeneralPurposeBitFlag := GeneralPurposeBitFlag and not AbLanguageEncodingFlag; end; { -------------------------------------------------------------------------- } { TAbZipLocalFileHeader implementation ===================================== } constructor TAbZipLocalFileHeader.Create; begin inherited Create; FValidSignature := Ab_ZipLocalFileHeaderSignature; end; { -------------------------------------------------------------------------- } destructor TAbZipLocalFileHeader.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbZipLocalFileHeader.LoadFromStream( Stream : TStream ); var ExtraFieldLength, FileNameLength : Word; begin with Stream do begin Read( FSignature, sizeof( FSignature ) ); Read( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Read( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Read( FCompressionMethod, sizeof( FCompressionMethod ) ); Read( FLastModFileTime, sizeof( FLastModFileTime ) ); Read( FLastModFileDate, sizeof( FLastModFileDate ) ); Read( FCRC32, sizeof( FCRC32 ) ); Read( FCompressedSize, sizeof( FCompressedSize ) ); Read( FUncompressedSize, sizeof( FUncompressedSize ) ); Read( FileNameLength, sizeof( FileNameLength ) ); Read( ExtraFieldLength, sizeof( ExtraFieldLength ) ); SetLength( FFileName, FileNameLength ); if FileNameLength > 0 then Read( FFileName[1], FileNameLength ); FExtraField.LoadFromStream( Stream, ExtraFieldLength ); end; if not IsValid then raise EAbZipInvalid.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipLocalFileHeader.SaveToStream( Stream : TStream ); var ExtraFieldLength, FileNameLength: Word; begin with Stream do begin {write the valid signature from the constant} Write( FValidSignature, sizeof( FValidSignature ) ); Write( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Write( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Write( FCompressionMethod, sizeof( FCompressionMethod ) ); Write( FLastModFileTime, sizeof( FLastModFileTime ) ); Write( FLastModFileDate, sizeof( FLastModFileDate ) ); Write( FCRC32, sizeof( FCRC32 ) ); Write( FCompressedSize, sizeof( FCompressedSize ) ); Write( FUncompressedSize, sizeof( FUncompressedSize ) ); FileNameLength := Word( Length( FFileName ) ); Write( FileNameLength, sizeof( FileNameLength ) ); ExtraFieldLength := Length(FExtraField.Buffer); Write( ExtraFieldLength, sizeof( ExtraFieldLength ) ); if FileNameLength > 0 then Write( FFileName[1], FileNameLength ); if ExtraFieldLength > 0 then Write(FExtraField.Buffer[0], ExtraFieldLength); end; end; { -------------------------------------------------------------------------- } { TAbZipDirectoryFileHeader implementation ================================= } constructor TAbZipDirectoryFileHeader.Create; begin inherited Create; FValidSignature := Ab_ZipCentralDirectoryFileHeaderSignature; end; { -------------------------------------------------------------------------- } destructor TAbZipDirectoryFileHeader.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileHeader.LoadFromStream( Stream : TStream ); var ExtraFieldLength, FileCommentLength, FileNameLength : Word; begin with Stream do begin Read( FSignature, sizeof( FSignature ) ); Read( FVersionMadeBy, sizeof( FVersionMadeBy ) ); Read( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Read( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Read( FCompressionMethod, sizeof( FCompressionMethod ) ); Read( FLastModFileTime, sizeof( FLastModFileTime ) ); Read( FLastModFileDate, sizeof( FLastModFileDate ) ); Read( FCRC32, sizeof( FCRC32 ) ); Read( FCompressedSize, sizeof( FCompressedSize ) ); Read( FUncompressedSize, sizeof( FUncompressedSize ) ); Read( FileNameLength, sizeof( FileNameLength ) ); Read( ExtraFieldLength, sizeof( ExtraFieldLength ) ); Read( FileCommentLength, sizeof( FileCommentLength ) ); Read( FDiskNumberStart, sizeof( FDiskNumberStart ) ); Read( FInternalFileAttributes, sizeof( FInternalFileAttributes ) ); Read( FExternalFileAttributes, sizeof( FExternalFileAttributes ) ); Read( FRelativeOffset, sizeof( FRelativeOffset ) ); SetLength( FFileName, FileNameLength ); if FileNameLength > 0 then Read( FFileName[1], FileNameLength ); FExtraField.LoadFromStream( Stream, ExtraFieldLength ); SetLength( FFileComment, FileCommentLength ); if FileCommentLength > 0 then Read( FFileComment[1], FileCommentLength ); end; if not IsValid then raise EAbZipInvalid.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileHeader.SaveToStream( Stream : TStream ); var ExtraFieldLength, FileCommentLength, FileNameLength : Word; begin with Stream do begin {write the valid signature from the constant} Write( FValidSignature, sizeof( FValidSignature ) ); Write( FVersionMadeBy, sizeof( FVersionMadeBy ) ); Write( FVersionNeededToExtract, sizeof( FVersionNeededToExtract ) ); Write( FGeneralPurposeBitFlag, sizeof( FGeneralPurposeBitFlag ) ); Write( FCompressionMethod, sizeof( FCompressionMethod ) ); Write( FLastModFileTime, sizeof( FLastModFileTime ) ); Write( FLastModFileDate, sizeof( FLastModFileDate ) ); Write( FCRC32, sizeof( FCRC32 ) ); Write( FCompressedSize, sizeof( FCompressedSize ) ); Write( FUncompressedSize, sizeof( FUncompressedSize ) ); FileNameLength := Word( Length( FFileName ) ); Write( FileNameLength, sizeof( FileNameLength ) ); ExtraFieldLength := Length(FExtraField.Buffer); Write( ExtraFieldLength, sizeof( ExtraFieldLength ) ); FileCommentLength := Word( Length( FFileComment ) ); Write( FileCommentLength, sizeof( FileCommentLength ) ); Write( FDiskNumberStart, sizeof( FDiskNumberStart ) ); Write( FInternalFileAttributes, sizeof( FInternalFileAttributes ) ); Write( FExternalFileAttributes, sizeof( FExternalFileAttributes ) ); Write( FRelativeOffset, sizeof( FRelativeOffset ) ); if FileNameLength > 0 then Write( FFileName[1], FileNameLength ); if ExtraFieldLength > 0 then Write( FExtraField.Buffer[0], ExtraFieldLength ); if FileCommentLength > 0 then Write( FFileComment[1], FileCommentLength ); end; end; { -------------------------------------------------------------------------- } { TAbZipDirectoryFileFooter implementation ================================= } function TAbZipDirectoryFileFooter.GetIsZip64: Boolean; begin if DiskNumber >= $FFFF then Exit(True); if StartDiskNumber >= $FFFF then Exit(True); if EntriesOnDisk >= $FFFF then Exit(True); if TotalEntries >= $FFFF then Exit(True); if DirectorySize >= $FFFFFFFF then Exit(True); if DirectoryOffset >= $FFFFFFFF then Exit(True); Result := False; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.LoadFromStream( Stream : TStream ); var Footer: TAbZipEndOfCentralDirectoryRecord; begin Stream.ReadBuffer( Footer, SizeOf(Footer) ); if Footer.Signature <> Ab_ZipEndCentralDirectorySignature then raise EAbZipInvalid.Create; FDiskNumber := Footer.DiskNumber; FStartDiskNumber := Footer.StartDiskNumber; FEntriesOnDisk := Footer.EntriesOnDisk; FTotalEntries := Footer.TotalEntries; FDirectorySize := Footer.DirectorySize; FDirectoryOffset := Footer.DirectoryOffset; SetLength( FZipfileComment, Footer.CommentLength ); if Footer.CommentLength > 0 then Stream.ReadBuffer( FZipfileComment[1], Footer.CommentLength ); end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.LoadZip64FromStream( Stream : TStream ); {load the ZIP64 end of central directory record. LoadFromStream() must be called first to load the standard record} var Footer: TAbZip64EndOfCentralDirectoryRecord; begin Stream.ReadBuffer( Footer, SizeOf(Footer) ); if Footer.Signature <> Ab_Zip64EndCentralDirectorySignature then raise EAbZipInvalid.Create; if FDiskNumber = $FFFF then FDiskNumber := Footer.DiskNumber; if FStartDiskNumber = $FFFF then FStartDiskNumber := Footer.StartDiskNumber; if FEntriesOnDisk = $FFFF then FEntriesOnDisk := Footer.EntriesOnDisk; if FTotalEntries = $FFFF then FTotalEntries := Footer.TotalEntries; if FDirectorySize = $FFFFFFFF then FDirectorySize := Footer.DirectorySize; if FDirectoryOffset = $FFFFFFFF then FDirectoryOffset := Footer.DirectoryOffset; {RecordSize, VersionMadeBy, and VersionNeededToExtract are currently ignored} end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.SaveToStream( Stream : TStream; aZip64TailOffset: Int64 = -1); {write end of central directory record, along with Zip64 records if necessary. aZip64TailOffset is the value to use for the Zip64 locator's directory offset, and is only necessary when writing to an intermediate stream} var Footer: TAbZipEndOfCentralDirectoryRecord; Zip64Footer: TAbZip64EndOfCentralDirectoryRecord; Zip64Locator: TAbZip64EndOfCentralDirectoryLocator; begin if IsZip64 then begin {setup Zip64 end of central directory record} Zip64Footer.Signature := Ab_Zip64EndCentralDirectorySignature; Zip64Footer.RecordSize := SizeOf(Zip64Footer) - SizeOf(Zip64Footer.Signature) - SizeOf(Zip64Footer.RecordSize); Zip64Footer.VersionMadeBy := 45; Zip64Footer.VersionNeededToExtract := 45; Zip64Footer.DiskNumber := DiskNumber; Zip64Footer.StartDiskNumber := StartDiskNumber; Zip64Footer.EntriesOnDisk := EntriesOnDisk; Zip64Footer.TotalEntries := TotalEntries; Zip64Footer.DirectorySize := DirectorySize; Zip64Footer.DirectoryOffset := DirectoryOffset; {setup Zip64 end of central directory locator} Zip64Locator.Signature := Ab_Zip64EndCentralDirectoryLocatorSignature; Zip64Locator.StartDiskNumber := DiskNumber; if aZip64TailOffset = -1 then Zip64Locator.RelativeOffset := Stream.Position else Zip64Locator.RelativeOffset := aZip64TailOffset; Zip64Locator.TotalDisks := DiskNumber + 1; {write Zip64 records} Stream.WriteBuffer(Zip64Footer, SizeOf(Zip64Footer)); Stream.WriteBuffer(Zip64Locator, SizeOf(Zip64Locator)); end; Footer.Signature := Ab_ZipEndCentralDirectorySignature; Footer.DiskNumber := Min(FDiskNumber, $FFFF); Footer.StartDiskNumber := Min(FStartDiskNumber, $FFFF); Footer.EntriesOnDisk := Min(FEntriesOnDisk, $FFFF); Footer.TotalEntries := Min(FTotalEntries, $FFFF); Footer.DirectorySize := Min(FDirectorySize, $FFFFFFFF); Footer.DirectoryOffset := Min(FDirectoryOffset, $FFFFFFFF); Footer.CommentLength := Length( FZipfileComment ); Stream.WriteBuffer( Footer, SizeOf(Footer) ); if FZipfileComment <> '' then Stream.Write( FZipfileComment[1], Length(FZipfileComment) ); end; { -------------------------------------------------------------------------- } { TAbZipItem implementation ================================================ } constructor TAbZipItem.Create; begin inherited Create; FItemInfo := TAbZipDirectoryFileHeader.Create; FLFHExtraField := TAbExtraField.Create; end; { -------------------------------------------------------------------------- } destructor TAbZipItem.Destroy; begin FLFHExtraField.Free; FItemInfo.Free; FItemInfo := nil; inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCompressionMethod : TAbZipCompressionMethod; begin Result := FItemInfo.CompressionMethod; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCompressionRatio : Double; begin Result := FItemInfo.CompressionRatio; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetCRC32 : Longint; begin Result := FItemInfo.CRC32; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetDeflationOption : TAbZipDeflationOption; begin Result := FItemInfo.DeflationOption; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetDictionarySize : TAbZipDictionarySize; begin Result := FItemInfo.DictionarySize; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetGeneralPurposeBitFlag : Word; begin Result := FItemInfo.GeneralPurposeBitFlag; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetHostOS: TAbZipHostOS; begin Result := TAbZipHostOS(Hi(VersionMadeBy)); end; { -------------------------------------------------------------------------- } function TAbZipItem.GetExternalFileAttributes : LongWord; begin Result := FItemInfo.ExternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetExtraField : TAbExtraField; begin Result := FItemInfo.ExtraField; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetFileComment : AnsiString; begin Result := FItemInfo.FileComment; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetInternalFileAttributes : Word; begin Result := FItemInfo.InternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetIsDirectory: Boolean; begin Result := ((ExternalFileAttributes and faDirectory) <> 0) or ((FileName <> '') and CharInSet(Filename[Length(FFilename)], ['\','/'])); end; { -------------------------------------------------------------------------- } function TAbZipItem.GetIsEncrypted : Boolean; begin Result := FItemInfo.IsEncrypted; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetLastModFileDate : Word; begin Result := FItemInfo.LastModFileDate; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetLastModFileTime : Word; begin Result := FItemInfo.LastModFileTime; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetNativeFileAttributes : LongInt; begin {$IFDEF MSWINDOWS} if (HostOS = hosUnix) or (ExternalFileAttributes > $1FFFF) then Result := AbUnix2DosFileAttributes(ExternalFileAttributes shr 16) else Result := Byte(ExternalFileAttributes); {$ENDIF} {$IFDEF UNIX} if HostOS in [hosDOS, hosNTFS, hosWinNT] then Result := AbDOS2UnixFileAttributes(ExternalFileAttributes) else Result := ExternalFileAttributes shr 16; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbZipItem.GetRawFileName : AnsiString; begin Result := FItemInfo.FileName; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetNativeLastModFileTime: Longint; {$IFDEF UNIX} var DateTime: TDateTime; {$ENDIF} begin // Zip stores MS-DOS date/time. {$IFDEF UNIX} DateTime := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); Result := AbLocalDateTimeToUnixTime(DateTime); {$ELSE} LongRec(Result).Hi := LastModFileDate; LongRec(Result).Lo := LastModFileTime; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbZipItem.GetShannonFanoTreeCount : Byte; begin Result := FItemInfo.ShannonFanoTreeCount; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetVersionMadeBy : Word; begin Result := FItemInfo.VersionMadeBy; end; { -------------------------------------------------------------------------- } function TAbZipItem.GetVersionNeededToExtract : Word; begin Result := FItemInfo.VersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.LoadFromStream( Stream : TStream ); var FieldSize: Word; FieldStream: TStream; InfoZipField: PInfoZipUnicodePathRec; UnicodeName: UnicodeString; UTF8Name: AnsiString; XceedField: PXceedUnicodePathRec; SystemCode: TAbZipHostOs; begin FItemInfo.LoadFromStream( Stream ); { decode filename (ANSI/OEM/UTF-8) } if FItemInfo.IsUTF8 then FFileName := FItemInfo.FileName else if FItemInfo.ExtraField.Get(Ab_InfoZipUnicodePathSubfieldID, Pointer(InfoZipField), FieldSize) and (FieldSize > SizeOf(TInfoZipUnicodePathRec)) and (InfoZipField.Version = 1) and (InfoZipField.NameCRC32 = AbCRC32Of(FItemInfo.FileName)) then begin SetString(UTF8Name, InfoZipField.UnicodeName, FieldSize - SizeOf(TInfoZipUnicodePathRec) + 1); FFileName := UTF8Name; end else if FItemInfo.ExtraField.Get(Ab_XceedUnicodePathSubfieldID, Pointer(XceedField), FieldSize) and (FieldSize > SizeOf(TXceedUnicodePathRec)) and (XceedField.Signature = Ab_XceedUnicodePathSignature) and (XceedField.Length * SizeOf(WideChar) = FieldSize - SizeOf(TXceedUnicodePathRec) + SizeOf(WideChar)) then begin SetString(UnicodeName, XceedField.UnicodeName, XceedField.Length); FFileName := Utf16ToUtf8(UnicodeName); end else begin SystemCode := HostOS; {$IF DEFINED(MSWINDOWS)} if (GetACP <> GetOEMCP) and (SystemCode = hosDOS) then FFileName := CeOemToUtf8(FItemInfo.FileName) else if (GetACP <> GetOEMCP) and CeTryDecode(FItemInfo.FileName, CP_OEMCP, UnicodeName) then FFileName := Utf16ToUtf8(UnicodeName) else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then FFileName := CeAnsiToUtf8(FItemInfo.FileName) else {$ELSEIF DEFINED(UNIX)} if (SystemCode = hosDOS) then FFileName := CeOemToUtf8(FItemInfo.FileName) else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then FFileName := CeAnsiToUtf8(FItemInfo.FileName) else {$ENDIF} FFileName := FItemInfo.FileName; end; { read ZIP64 extended header } FUncompressedSize := FItemInfo.UncompressedSize; FCompressedSize := FItemInfo.CompressedSize; FRelativeOffset := FItemInfo.RelativeOffset; FDiskNumberStart := FItemInfo.DiskNumberStart; if FItemInfo.ExtraField.GetStream(Ab_Zip64SubfieldID, FieldStream) then try if FItemInfo.UncompressedSize = $FFFFFFFF then FieldStream.ReadBuffer(FUncompressedSize, SizeOf(Int64)); if FItemInfo.CompressedSize = $FFFFFFFF then FieldStream.ReadBuffer(FCompressedSize, SizeOf(Int64)); if FItemInfo.RelativeOffset = $FFFFFFFF then FieldStream.ReadBuffer(FRelativeOffset, SizeOf(Int64)); if FItemInfo.DiskNumberStart = $FFFF then FieldStream.ReadBuffer(FDiskNumberStart, SizeOf(LongWord)); finally FieldStream.Free; end; LastModFileTime := FItemInfo.LastModFileTime; LastModFileDate := FItemInfo.LastModFileDate; FDiskFileName := FileName; AbUnfixName( FDiskFileName ); Action := aaNone; Tagged := False; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveLFHToStream( Stream : TStream ); var LFH : TAbZipLocalFileHeader; Zip64Field: TZip64LocalHeaderRec; begin LFH := TAbZipLocalFileHeader.Create; try LFH.VersionNeededToExtract := VersionNeededToExtract; LFH.GeneralPurposeBitFlag := GeneralPurposeBitFlag; LFH.CompressionMethod := CompressionMethod; LFH.LastModFileTime := LastModFileTime; LFH.LastModFileDate := LastModFileDate; LFH.CRC32 := CRC32; LFH.FileName := RawFileName; LFH.ExtraField.Assign(LFHExtraField); LFH.ExtraField.CloneFrom(ExtraField, Ab_InfoZipUnicodePathSubfieldID); LFH.ExtraField.CloneFrom(ExtraField, Ab_XceedUnicodePathSubfieldID); { setup sizes; unlike the central directory header, the ZIP64 local header needs to store both compressed and uncompressed sizes if either needs it } if (CompressedSize >= $FFFFFFFF) or (UncompressedSize >= $FFFFFFFF) then begin LFH.UncompressedSize := $FFFFFFFF; LFH.CompressedSize := $FFFFFFFF; Zip64Field.UncompressedSize := UncompressedSize; Zip64Field.CompressedSize := CompressedSize; LFH.ExtraField.Put(Ab_Zip64SubfieldID, Zip64Field, SizeOf(Zip64Field)); end else begin LFH.UncompressedSize := UncompressedSize; LFH.CompressedSize := CompressedSize; LFH.ExtraField.Delete(Ab_Zip64SubfieldID); end; LFH.SaveToStream( Stream ); finally LFH.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveCDHToStream( Stream : TStream ); {-Save a ZipCentralDirectorHeader entry to Stream} begin FItemInfo.SaveToStream( Stream ); end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SaveDDToStream( Stream : TStream ); var DD : TAbZipDataDescriptor; begin DD := TAbZipDataDescriptor.Create; try DD.CRC32 := CRC32; DD.CompressedSize := CompressedSize; DD.UncompressedSize := UncompressedSize; DD.SaveToStream( Stream ); finally DD.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCompressedSize( const Value : Int64 ); begin FCompressedSize := Value; FItemInfo.CompressedSize := Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCompressionMethod( Value : TAbZipCompressionMethod ); begin FItemInfo.CompressionMethod := Value; UpdateVersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetCRC32( const Value : Longint ); begin FItemInfo.CRC32 := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetDiskNumberStart( Value : LongWord ); begin FDiskNumberStart := Value; FItemInfo.DiskNumberStart := Min(Value, $FFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetExternalFileAttributes( Value : LongWord ); begin FItemInfo.ExternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetFileComment(const Value : AnsiString ); begin FItemInfo.FileComment := Value; end; { -------------------------------------------------------------------------- } {$IFDEF KYLIX}{$IFOPT O+}{$DEFINE OPTIMIZATIONS_ON}{$O-}{$ENDIF}{$ENDIF} procedure TAbZipItem.SetFileName(const Value : string ); var {$IFDEF MSWINDOWS} AnsiName : AnsiString; {$ENDIF} UTF8Name : AnsiString; FieldSize : Word; I : Integer; InfoZipField : PInfoZipUnicodePathRec; UseExtraField: Boolean; begin inherited SetFileName(Value); {$IFDEF MSWINDOWS} FItemInfo.IsUTF8 := False; HostOS := hosDOS; if CeTryEncode(UTF8Decode(Value), CP_OEMCP, False, AnsiName) then {no-op} else if (GetACP <> GetOEMCP) and CeTryEncode(UTF8Decode(Value), CP_ACP, False, AnsiName) then HostOS := hosWinNT else FItemInfo.IsUTF8 := True; if FItemInfo.IsUTF8 then FItemInfo.FileName := Value else FItemInfo.FileName := AnsiName; {$ENDIF} {$IFDEF UNIX} FItemInfo.FileName := Value; FItemInfo.IsUTF8 := SystemEncodingUtf8; {$ENDIF} UseExtraField := False; if not FItemInfo.IsUTF8 then for i := 1 to Length(Value) do begin if Ord(Value[i]) > 127 then begin UseExtraField := True; Break; end; end; if UseExtraField then begin UTF8Name := Value; FieldSize := SizeOf(TInfoZipUnicodePathRec) + Length(UTF8Name) - 1; GetMem(InfoZipField, FieldSize); try InfoZipField.Version := 1; InfoZipField.NameCRC32 := AbCRC32Of(FItemInfo.FileName); Move(UTF8Name[1], InfoZipField.UnicodeName, Length(UTF8Name)); FItemInfo.ExtraField.Put(Ab_InfoZipUnicodePathSubfieldID, InfoZipField^, FieldSize); finally FreeMem(InfoZipField); end; end else FItemInfo.ExtraField.Delete(Ab_InfoZipUnicodePathSubfieldID); FItemInfo.ExtraField.Delete(Ab_XceedUnicodePathSubfieldID); end; {$IFDEF OPTIMIZATIONS_ON}{$O+}{$ENDIF} { -------------------------------------------------------------------------- } procedure TAbZipItem.SetGeneralPurposeBitFlag( Value : Word ); begin FItemInfo.GeneralPurposeBitFlag := Value; UpdateVersionNeededToExtract; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetHostOS( Value : TAbZipHostOS ); begin FItemInfo.VersionMadeBy := Low(FItemInfo.VersionMadeBy) or Word(Ord(Value)) shl 8; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetInternalFileAttributes( Value : Word ); begin FItemInfo.InternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetLastModFileDate( const Value : Word ); begin FItemInfo.LastModFileDate := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetLastModFileTime( const Value : Word ); begin FItemInfo.LastModFileTime := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetRelativeOffset( Value : Int64 ); begin FRelativeOffset := Value; FItemInfo.RelativeOffset := Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetUncompressedSize( const Value : Int64 ); begin FUncompressedSize := Value; FItemInfo.UncompressedSize:= Min(Value, $FFFFFFFF); UpdateZip64ExtraHeader; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetVersionMadeBy( Value : Word ); begin FItemInfo.VersionMadeBy := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.SetVersionNeededToExtract( Value : Word ); begin FItemInfo.VersionNeededToExtract := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipItem.UpdateVersionNeededToExtract; {calculates VersionNeededToExtract and VersionMadeBy based on used features} begin {According to AppNote.txt zipx compression methods should set the Version Needed To Extract to the AppNote version the method was introduced in (e.g., 6.3 for PPMd). Most utilities just set it to 2.0 and rely on the extractor detecting unsupported compression methods, since it's easier to add support for decompression methods without implementing the entire newer spec. } if ExtraField.Has(Ab_Zip64SubfieldID) then VersionNeededToExtract := 45 else if IsDirectory or IsEncrypted or not (CompressionMethod in [cmStored..cmImploded]) then VersionNeededToExtract := 20 else VersionNeededToExtract := 10; VersionMadeBy := (VersionMadeBy and $FF00) + Max(20, VersionNeededToExtract); end; { -------------------------------------------------------------------------- } procedure TAbZipItem.UpdateZip64ExtraHeader; var Changed: Boolean; FieldStream: TMemoryStream; begin FieldStream := TMemoryStream.Create; try if UncompressedSize >= $FFFFFFFF then FieldStream.WriteBuffer(FUncompressedSize, SizeOf(Int64)); if CompressedSize >= $FFFFFFFF then FieldStream.WriteBuffer(FCompressedSize, SizeOf(Int64)); if RelativeOffset >= $FFFFFFFF then FieldStream.WriteBuffer(FRelativeOffset, SizeOf(Int64)); if DiskNumberStart >= $FFFF then FieldStream.WriteBuffer(FDiskNumberStart, SizeOf(LongWord)); Changed := (FieldStream.Size > 0) <> ExtraField.Has(Ab_Zip64SubfieldID); if FieldStream.Size > 0 then ExtraField.Put(Ab_Zip64SubfieldID, FieldStream.Memory^, FieldStream.Size) else ExtraField.Delete(Ab_Zip64SubfieldID); if Changed then UpdateVersionNeededToExtract; finally FieldStream.Free; end; end; { -------------------------------------------------------------------------- } { TAbZipArchive implementation ============================================= } constructor TAbZipArchive.CreateFromStream( aStream : TStream; const ArchiveName : string ); begin inherited CreateFromStream( aStream, ArchiveName ); FCompressionMethodToUse := smBestMethod; FInfo := TAbZipDirectoryFileFooter.Create; StoreOptions := StoreOptions + [soStripDrive]; FDeflationOption := doNormal; FPasswordRetries := AbDefPasswordRetries; FTempDir := ''; SpanningThreshold := AbDefZipSpanningThreshold; end; { -------------------------------------------------------------------------- } destructor TAbZipArchive.Destroy; begin FInfo.Free; FInfo := nil; inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbZipArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var FullSourceFileName, FullArchiveFileName: string; begin Result := TAbZipItem.Create; with TAbZipItem( Result ) do begin CompressionMethod := cmDeflated; GeneralPurposeBitFlag := 0; CompressedSize := 0; CRC32 := 0; RelativeOffset := 0; MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); if mbDirectoryExists(FullSourceFileName) then begin FullSourceFileName := IncludeTrailingPathDelimiter(FullSourceFileName); end; Result.FileName := FullArchiveFileName; Result.DiskFileName := FullSourceFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoExtractHelper(Index : Integer; const NewName : string); begin if Assigned(FExtractHelper) then FExtractHelper(Self, ItemList[Index], NewName) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoExtractToStreamHelper(Index : Integer; aStream : TStream); begin if Assigned(FExtractToStreamHelper) then FExtractToStreamHelper(Self, ItemList[Index], aStream) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoTestHelper(Index : Integer); begin if Assigned(FTestHelper) then FTestHelper(Self, ItemList[Index]) else raise EAbZipNoExtraction.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoInsertHelper(Index : Integer; OutStream : TStream); begin if Assigned(FInsertHelper) then FInsertHelper(Self, ItemList[Index], OutStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoInsertFromStreamHelper(Index : Integer; OutStream : TStream); begin if Assigned(FInsertFromStreamHelper) then FInsertFromStreamHelper(Self, ItemList[Index], OutStream, InStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestDisk(const AMessage: string; var Abort : Boolean); begin {$IFDEF MSWINDOWS} Abort := Windows.MessageBox( 0, PChar(AMessage), PChar(AbDiskRequestS), MB_TASKMODAL or MB_OKCANCEL ) = IDCANCEL; {$ENDIF} {$IFDEF UnixDialogs} {$IFDEF KYLIX} Abort := QDialogs.MessageDlg(AbDiskRequestS, AMessage, mtWarning, mbOKCancel, 0) = mrCancel; {$ENDIF} {$IFDEF LCL} Abort := Dialogs.MessageDlg(AbDiskRequestS, AMessage, mtWarning, mbOKCancel, 0) = mrCancel; {$ENDIF} {$ELSE} Abort := True; {$ENDIF} end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestLastDisk( var Abort : Boolean ); begin Abort := False; if Assigned( FOnRequestLastDisk ) then FOnRequestLastDisk( Self, Abort ) else DoRequestDisk( AbLastDiskRequestS, Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestNthDisk( Sender: TObject; DiskNumber : Byte; var Abort : Boolean ); begin Abort := False; if Assigned( FOnRequestNthDisk ) then FOnRequestNthDisk( Self, DiskNumber, Abort ) else DoRequestDisk( Format(AbDiskNumRequestS, [DiskNumber]), Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestBlankDisk(Sender: TObject; var Abort : Boolean ); begin Abort := False; FSpanned := True; if Assigned( FOnRequestBlankDisk ) then FOnRequestBlankDisk( Self, Abort ) else DoRequestDisk( AbBlankDiskS, Abort ); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.DoRequestImage(Sender: TObject; ImageNumber : Integer; var ImageName : string ; var Abort : Boolean); begin if Assigned(FOnRequestImage) then FOnRequestImage(Self, ImageNumber, ImageName, Abort); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.ExtractItemAt(Index : Integer; const UseName : string); begin DoExtractHelper(Index, UseName); end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.ExtractItemToStreamAt(Index : Integer; aStream : TStream); begin DoExtractToStreamHelper(Index, aStream); end; { -------------------------------------------------------------------------- } function TAbZipArchive.FixName(const Value : string ) : string; {-changes backslashes to forward slashes} var i : SmallInt; lValue : string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := AbAddBackSlash(BaseDirectory) + lValue; end; lValue := AbGetShortFileSpec( lValue ); end; {$ENDIF MSWINDOWS} {Zip files Always strip the drive path} StoreOptions := StoreOptions + [soStripDrive]; {strip drive stuff} if soStripDrive in StoreOptions then AbStripDrive( lValue ); {check for a leading backslash} if (Length(lValue) > 1) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then begin lValue := ExtractFileName( lValue ); end; if soRemoveDots in StoreOptions then AbStripDots( lValue ); for i := 1 to Length( lValue ) do if lValue[i] = AbDosPathDelim then lValue[i] := AbUnixPathDelim; Result := lValue; end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetItem( Index : Integer ) : TAbZipItem; begin Result := TAbZipItem(FItemList.Items[Index]); end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetSupportsEmptyFolders: Boolean; begin Result := True; end; { -------------------------------------------------------------------------- } function TAbZipArchive.GetZipfileComment : AnsiString; begin Result := FInfo.ZipfileComment; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.LoadArchive; var Abort : Boolean; TailPosition : int64; Item : TAbZipItem; Progress : Byte; FileSignature : Longint; Zip64Locator : TAbZip64EndOfCentralDirectoryLocator; begin Abort := False; if FStream.Size = 0 then Exit; {Get signature info} FStream.Position := 0; FStream.Read( FileSignature, sizeof( FileSignature ) ); {Get Executable Type; allow non-native stubs} IsExecutable := (LongRec(FileSignature).Lo = Ab_WindowsExeSignature) or (FileSignature = Ab_LinuxExeSignature); { try to locate central directory tail } TailPosition := FindCentralDirectoryTail( FStream ); if (TailPosition = -1) and (FileSignature = Ab_ZipSpannedSetSignature) and FOwnsStream and AbDriveIsRemovable(ArchiveName) then begin while TailPosition = -1 do begin FreeAndNil(FStream); DoRequestLastDisk(Abort); if Abort then begin FStatus := asInvalid; //TODO: Status updates are extremely inconsistent raise EAbUserAbort.Create; end; FStream := TFileStreamEx.Create( ArchiveName, Mode ); TailPosition := FindCentralDirectoryTail( FStream ); end; end; if TailPosition = -1 then begin FStatus := asInvalid; raise EAbZipInvalid.Create; end; { load the ZipDirectoryFileFooter } FInfo.LoadFromStream(FStream); { find Zip64 end of central directory locator; it will usually occur immediately before the standard end of central directory record. the actual Zip64 end of central directory may be on another disk } if FInfo.IsZip64 then begin Dec(TailPosition, SizeOf(Zip64Locator)); repeat if TailPosition < 0 then raise EAbZipInvalid.Create; FStream.Position := TailPosition; FStream.ReadBuffer(Zip64Locator, SizeOf(Zip64Locator)); Dec(TailPosition); until Zip64Locator.Signature = Ab_Zip64EndCentralDirectoryLocatorSignature; { update current image number } FInfo.DiskNumber := Zip64Locator.TotalDisks - 1; end; { setup spanning support and move to the start of the central directory } FSpanned := FInfo.DiskNumber > 0; if FSpanned then begin if FOwnsStream then begin FStream := TAbSpanReadStream.Create( ArchiveName, FInfo.DiskNumber, FStream ); TAbSpanReadStream(FStream).OnRequestImage := DoRequestImage; TAbSpanReadStream(FStream).OnRequestNthDisk := DoRequestNthDisk; if FInfo.IsZip64 then begin TAbSpanReadStream(FStream).SeekImage(Zip64Locator.StartDiskNumber, Zip64Locator.RelativeOffset); FInfo.LoadZip64FromStream(FStream); end; TAbSpanReadStream(FStream).SeekImage(FInfo.StartDiskNumber, FInfo.DirectoryOffset); end else raise EAbZipBadSpanStream.Create; end else begin if FInfo.IsZip64 then begin FStream.Position := Zip64Locator.RelativeOffset; FInfo.LoadZip64FromStream(FStream); end; FStream.Position := FInfo.DirectoryOffset; end; { build Items list from central directory records } FStubSize := High(LongWord); while Count < FInfo.TotalEntries do begin { create new Item } Item := TAbZipItem.Create; try Item.LoadFromStream(FStream); Item.Action := aaNone; FItemList.Add(Item); except Item.Free; raise; end; if IsExecutable and (Item.DiskNumberStart = 0) and (Item.RelativeOffset < FStubSize) then FStubSize := Item.RelativeOffset; Progress := (Count * 100) div FInfo.TotalEntries; DoArchiveProgress( Progress, Abort ); if Abort then begin FStatus := asInvalid; raise EAbUserAbort.Create; end; end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.PutItem( Index : Integer; Value : TAbZipItem ); begin FItemList.Items[Index] := Value; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.SaveArchive; {builds a new archive and copies it to FStream} var Abort : Boolean; MemStream : TMemoryStream; HasDataDescriptor : Boolean; i : LongWord; LFH : TAbZipLocalFileHeader; NewStream : TStream; WorkingStream : TAbVirtualMemoryStream; CurrItem : TAbZipItem; Progress : Byte; begin if Count = 0 then Exit; {shouldn't be trying to overwrite an existing spanned archive} if Spanned then begin for i := 0 to Pred(Count) do if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; FIsDirty := False; raise EAbZipSpanOverwrite.Create; end; {init new zip archive stream can span only new archives, if SpanningThreshold > 0 or removable drive spanning writes to original location, rather than writing to a temp stream first} if FOwnsStream and (FStream.Size = 0) and not IsExecutable and ((SpanningThreshold > 0) or AbDriveIsRemovable(ArchiveName)) then begin NewStream := TAbSpanWriteStream.Create(ArchiveName, FStream, SpanningThreshold); FStream := nil; TAbSpanWriteStream(NewStream).OnRequestBlankDisk := DoRequestBlankDisk; TAbSpanWriteStream(NewStream).OnRequestImage := DoRequestImage; end else begin NewStream := TAbVirtualMemoryStream.Create; TAbVirtualMemoryStream(NewStream).SwapFileDirectory := FTempDir; end; try {NewStream} {copy the executable stub over to the output} if IsExecutable then NewStream.CopyFrom( FStream, StubSize ) {assume spanned for spanning stream} else if NewStream is TAbSpanWriteStream then NewStream.Write(Ab_ZipSpannedSetSignature, SizeOf(Ab_ZipSpannedSetSignature)); {build new zip archive from existing archive} for i := 0 to pred( Count ) do begin CurrItem := (ItemList[i] as TAbZipItem); FCurrentItem := ItemList[i]; case CurrItem.Action of aaNone, aaMove: begin {just copy the file to new stream} Assert(not (NewStream is TAbSpanWriteStream)); FStream.Position := CurrItem.RelativeOffset; CurrItem.DiskNumberStart := 0; CurrItem.RelativeOffset := NewStream.Position; {toss old local file header} LFH := TAbZipLocalFileHeader.Create; try {LFH} LFH.LoadFromStream( FStream ); if CurrItem.LFHExtraField.Count = 0 then CurrItem.LFHExtraField.Assign(LFH.ExtraField); finally {LFH} LFH.Free; end; {LFH} {write out new local file header and append compressed data} CurrItem.SaveLFHToStream( NewStream ); if (CurrItem.CompressedSize > 0) then NewStream.CopyFrom(FStream, CurrItem.CompressedSize); end; aaDelete: begin {doing nothing omits file from new stream} end; aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin {compress the file and add it to new stream} try WorkingStream := TAbVirtualMemoryStream.Create; try {WorkingStream} WorkingStream.SwapFileDirectory := FTempDir; {compress the file} if (CurrItem.Action = aaStreamAdd) then DoInsertFromStreamHelper(i, WorkingStream) else DoInsertHelper(i, WorkingStream); {write local header} if NewStream is TAbSpanWriteStream then begin MemStream := TMemoryStream.Create; try CurrItem.SaveLFHToStream(MemStream); TAbSpanWriteStream(NewStream).WriteUnspanned( MemStream.Memory^, MemStream.Size); {calculate positions after the write in case it triggered a new span} CurrItem.DiskNumberStart := TAbSpanWriteStream(NewStream).CurrentImage; CurrItem.RelativeOffset := NewStream.Position - MemStream.Size; finally MemStream.Free; end; end else begin CurrItem.DiskNumberStart := 0; CurrItem.RelativeOffset := NewStream.Position; CurrItem.SaveLFHToStream(NewStream); end; {copy compressed data} NewStream.CopyFrom(WorkingStream, 0); if CurrItem.IsEncrypted then CurrItem.SaveDDToStream(NewStream); finally WorkingStream.Free; end; except on E : Exception do begin { Exception was caused by a User Abort and Item Failure should not be called Question: Do we want an New Event when this occurs or should the exception just be re-raised [783614] } if (E is EAbUserAbort) then raise; CurrItem.Action := aaDelete; DoProcessItemFailure(CurrItem, ptAdd, ecFileOpenError, 0); end; end; end; end; { case } { TODO: Check HasDataDescriptior behavior; seems like it's getting written twice for encrypted files } {Now add the data descriptor record to new stream} HasDataDescriptor := (CurrItem.CompressionMethod = cmDeflated) and ((CurrItem.GeneralPurposeBitFlag and AbHasDataDescriptorFlag) <> 0); if (CurrItem.Action <> aaDelete) and HasDataDescriptor then CurrItem.SaveDDToStream(NewStream); Progress := AbPercentage(9 * succ( i ), 10 * Count); DoArchiveSaveProgress(Progress, Abort); DoArchiveProgress(Progress, Abort); if Abort then raise EAbUserAbort.Create; end; {write the central directory} if NewStream is TAbSpanWriteStream then FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage else FInfo.DiskNumber := 0; FInfo.StartDiskNumber := FInfo.DiskNumber; FInfo.DirectoryOffset := NewStream.Position; FInfo.DirectorySize := 0; FInfo.EntriesOnDisk := 0; FInfo.TotalEntries := 0; MemStream := TMemoryStream.Create; try {write central directory entries} for i := 0 to Count - 1 do begin if not (FItemList[i].Action in [aaDelete, aaFailed]) then begin (FItemList[i] as TAbZipItem).SaveCDHToStream(MemStream); if NewStream is TAbSpanWriteStream then begin TAbSpanWriteStream(NewStream).WriteUnspanned(MemStream.Memory^, MemStream.Size); {update tail info on span change} if FInfo.DiskNumber <> TAbSpanWriteStream(NewStream).CurrentImage then begin FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage; FInfo.EntriesOnDisk := 0; if FInfo.TotalEntries = 0 then begin FInfo.StartDiskNumber := FInfo.DiskNumber; FInfo.DirectoryOffset := NewStream.Position - MemStream.Size; end; end; end else NewStream.WriteBuffer(MemStream.Memory^, MemStream.Size); FInfo.DirectorySize := FInfo.DirectorySize + MemStream.Size; FInfo.EntriesOnDisk := FInfo.EntriesOnDisk + 1; FInfo.TotalEntries := FInfo.TotalEntries + 1; MemStream.Clear; end; end; {append the central directory footer} FInfo.SaveToStream(MemStream, NewStream.Position); if NewStream is TAbSpanWriteStream then begin {update the footer if writing it would trigger a new span} if not TAbSpanWriteStream(NewStream).WriteUnspanned(MemStream.Memory^, MemStream.Size) then begin FInfo.DiskNumber := TAbSpanWriteStream(NewStream).CurrentImage; FInfo.EntriesOnDisk := 0; FInfo.SaveToStream(NewStream); end; end else NewStream.WriteBuffer(MemStream.Memory^, MemStream.Size); finally {MemStream} MemStream.Free; end; {MemStream} FSpanned := (FInfo.DiskNumber > 0); {update output stream} if NewStream is TAbSpanWriteStream then begin {zip has already been written to target location} FStream := TAbSpanWriteStream(NewStream).ReleaseStream; if Spanned then begin {switch to read stream} FStream := TAbSpanReadStream.Create(ArchiveName, FInfo.DiskNumber, FStream); TAbSpanReadStream(FStream).OnRequestImage := DoRequestImage; TAbSpanReadStream(FStream).OnRequestNthDisk := DoRequestNthDisk; end else begin {replace spanned signature} FStream.Position := 0; FStream.Write(Ab_ZipPossiblySpannedSignature, SizeOf(Ab_ZipPossiblySpannedSignature)); end; end else begin {copy new stream to FStream (non-spanned only)} NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else begin if FOwnsStream then begin {need new stream to write} FreeAndNil(FStream); FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite); end; FStream.Size := 0; FStream.Position := 0; FStream.CopyFrom(NewStream, 0) end; end; {update Items list} for i := pred( Count ) downto 0 do begin if FItemList[i].Action = aaDelete then FItemList.Delete( i ) else if FItemList[i].Action <> aaFailed then FItemList[i].Action := aaNone; end; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream} NewStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.SetZipfileComment(const Value : AnsiString ); begin FInfo.FZipfileComment := Value; FIsDirty := True; end; { -------------------------------------------------------------------------- } procedure TAbZipArchive.TestItemAt(Index : Integer); begin DoTestHelper(Index); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfpkmg.pas����������������������������������������������0000644�0001750�0000144�00000021740�12014201074�022023� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfPkMg.pas *} {*********************************************************} {* Deflate package-merge algorithm *} {*********************************************************} unit AbDfPkMg; {$I AbDefine.inc} interface uses AbDfBase; procedure GenerateCodeLengths(aMaxCodeLen : integer; const aWeights : array of integer; var aCodeLengths : array of integer; aStartInx : integer; aLog : TAbLogger); implementation type PPkgNode = ^TPkgNode; TPkgNode = packed record pnWeight : integer; pnCount : integer; pnLeft : PPkgNode; pnRight : PPkgNode; end; PPkgNodeList = ^TPkgNodeList; TPkgNodeList = array [0..pred(286 * 2)] of PPkgNode; {Note: the "286" is the number of literal/length symbols, the maximum number of weights we'll be calculating the optimal code lengths for} {===helper routines==================================================} function IsCalcFeasible(aCount : integer; aMaxCodeLen : integer) : boolean; begin {works out if length-limited codes can be calculated for a given number of symbols and the maximum code length} {return whether 2^aMaxCodeLen > aCount} Result := (1 shl aMaxCodeLen) > aCount; end; {--------} procedure QSS(aList : PPkgNodeList; aFirst : integer; aLast : integer); var L, R : integer; Pivot : integer; Temp : pointer; begin {while there are at least two items to sort} while (aFirst < aLast) do begin {the pivot is the middle item} Pivot := aList^[(aFirst+aLast) div 2]^.pnWeight; {set indexes and partition} L := pred(aFirst); R := succ(aLast); while true do begin repeat dec(R); until (aList^[R]^.pnWeight <= Pivot); repeat inc(L); until (aList^[L]^.pnWeight >= Pivot); if (L >= R) then Break; Temp := aList^[L]; aList^[L] := aList^[R]; aList^[R] := Temp; end; {quicksort the first subfile} if (aFirst < R) then QSS(aList, aFirst, R); {quicksort the second subfile - recursion removal} aFirst := succ(R); end; end; {--------} procedure SortList(aList : PPkgNodeList; aCount : integer); begin QSS(aList, 0, pred(aCount)); end; {--------} procedure Accumulate(aNode : PPkgNode); begin while (aNode^.pnLeft <> nil) do begin Accumulate(aNode^.pnLeft); aNode := aNode^.pnRight; end; inc(aNode^.pnCount); end; {====================================================================} {===Interfaced routine===============================================} procedure GenerateCodeLengths(aMaxCodeLen : integer; const aWeights : array of integer; var aCodeLengths : array of integer; aStartInx : integer; aLog : TAbLogger); var i : integer; Bit : integer; WeightCount : integer; OrigList : PPkgNodeList; OrigListCount : integer; MergeList : PPkgNodeList; MergeListCount : integer; PkgList : PPkgNodeList; PkgListCount : integer; OrigInx : integer; PkgInx : integer; Node : PPkgNode; NodeMgr : TAbNodeManager; begin {calculate the number of weights} WeightCount := succ(high(aWeights)); {check for dumb programming errors} Assert((0 < aMaxCodeLen) and (aMaxCodeLen <= 15), 'GenerateCodeLengths: the maximum code length should be in the range 1..15'); Assert((1 <= WeightCount) and (WeightCount <= 286), 'GenerateCodeLengths: the weight array must have 1..286 elements'); Assert(IsCalcFeasible(WeightCount, aMaxCodeLen), 'GenerateCodeLengths: the package-merge algorithm should always be feasible'); {clear the code lengths array} FillChar(aCodeLengths[aStartInx], WeightCount * sizeof(integer), 0); {prepare for the try..finally} OrigList := nil; MergeList := nil; PkgList := nil; NodeMgr := nil; try {create the node manager} NodeMgr := TAbNodeManager.Create(sizeof(TPkgNode)); {create the original list of nodes} GetMem(OrigList, WeightCount * sizeof(PPkgNode)); OrigListCount := 0; for i := 0 to pred(WeightCount) do if (aWeights[i] <> 0) then begin Node := NodeMgr.AllocNode; Node^.pnLeft := nil; { this will indicate a leaf} Node^.pnRight := pointer(i); { the index of the weight} Node^.pnWeight := aWeights[i]; { the weight itself} Node^.pnCount := 1; { how many times used} OrigList^[OrigListCount] := Node; inc(OrigListCount); end; {we need at least 2 items, so make anything less a special case} if (OrigListCount <= 1) then begin {if there are no items at all in the original list, we need to pretend that there is one, since we shall eventually need to calculate a Count-1 value that cannot be negative} if (OrigListCount = 0) then begin aCodeLengths[aStartInx] := 1; Exit; end; {otherwise there is only one item: set its code length directly} for i := 0 to pred(WeightCount) do if (aWeights[i] <> 0) then begin aCodeLengths[aStartInx + i] := 1; Exit; end; end; {there are at least 2 items in the list; so sort the list} SortList(OrigList, OrigListCount); {create the merge and package lists} GetMem(MergeList, OrigListCount * 2 * sizeof(PPkgNode)); GetMem(PkgList, OrigListCount * 2 * sizeof(PPkgNode)); {initialize the merge list to have the same items as the original list} Move(OrigList^, MergeList^, OrigListCount * sizeof(PPkgNode)); MergeListCount := OrigListCount; {do aMaxCodeLen - 2 times...} for Bit := 1 to pred(aMaxCodeLen) do begin {generate the package list from the merge list by grouping pairs from the merge list and adding them to the package list} PkgListCount := 0; for i := 0 to pred(MergeListCount div 2) do begin Node := NodeMgr.AllocNode; Node^.pnLeft := MergeList^[i * 2]; Node^.pnRight := MergeList^[i * 2 + 1]; Node^.pnWeight := Node^.pnLeft^.pnWeight + Node^.pnRight^.pnWeight; {$IFOPT C+} Node^.pnCount := 0; {$ENDIF} PkgList^[PkgListCount] := Node; inc(PkgListCount); end; {merge the original list and the package list} MergeListCount := 0; OrigInx := 0; PkgInx := 0; {note the optimization here: the package list will *always* be last to empty in the merge process since it will have at least one item whose accumulated weight is greater than all of the items in the original list} while (OrigInx < OrigListCount) and (PkgInx < PkgListCount) do begin if (OrigList^[OrigInx]^.pnWeight <= PkgList^[PkgInx]^.pnWeight) then begin MergeList^[MergeListCount] := OrigList^[OrigInx]; inc(OrigInx); end else begin MergeList^[MergeListCount] := PkgList^[PkgInx]; inc(PkgInx); end; inc(MergeListCount); end; if (OrigInx < OrigListCount) then begin Move(OrigList^[OrigInx], MergeList^[MergeListCount], (OrigListCount - OrigInx) * sizeof(PPkgNode)); inc(MergeListCount, (OrigListCount - OrigInx)); end else begin Move(PkgList^[PkgInx], MergeList^[MergeListCount], (PkgListCount - PkgInx) * sizeof(PPkgNode)); inc(MergeListCount, (PkgListCount - PkgInx)); end; end; {calculate the code lengths} for i := 0 to (OrigListCount * 2) - 3 do begin Node := MergeList^[i]; if (Node^.pnLeft <> nil) then Accumulate(Node); end; for i := 0 to pred(OrigListCount) do aCodeLengths[aStartInx + integer(OrigList^[i].pnRight)] := OrigList^[i].pnCount; finally FreeMem(OrigList); FreeMem(MergeList); FreeMem(PkgList); NodeMgr.Free; end; end; {====================================================================} end. ��������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abswstm.pas�����������������������������������������������0000644�0001750�0000144�00000033461�12014201074�021733� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSWStm.pas *} {*********************************************************} {* ABBREVIA: TabSlidingWindowStream class *} {*********************************************************} unit AbSWStm; {$I AbDefine.inc} {Notes: The TabSlidingWindowStream class provides a simple buffered stream for sliding window compression/decompression routines. The sliding window stream is limited when compared with a true buffered stream: - it is assumed that the underlying stream is just going to be written to and is initially empty - the buffer is fixed in size to 40KB - write operations can only occur at the end of the stream - the stream can only be positioned with a certain limited range - we can only read up to 32KB - we can only write up to 32KB The stream is written as a wrapper around another stream (presumably a file stream) which is used for actual reads to the buffer and writes from the buffer. The stream buffer is organized as five 8KB chunks in an array. The last chunk is the only one used for writing, the other four are a 32KB buffer for reading. As the final chunk gets filled, the class will drop off the first chunk (writing it to the underlying stream, and shift the other chunks in the array.} {Define this if you wish to see a trace of the stream usage in a file called C:\SlideWin.LOG} {.$DEFINE DebugTrace} interface uses SysUtils, Classes; const abSWChunkCount = 5; type TabSlidingWindowStream = class(TStream) protected {private} bsChunks : array [0..pred(abSWChunkCount)] of PByteArray; bsBufferStart : longint; bsLastPos : integer; bsCurChunk : integer; bsPosInChunk : integer; bsPosInBuffer : longint; bsSize : Longint; {count of bytes in stream} bsDirty : boolean; {whether the buffer is dirty or not} bsStream : TStream; {actual stream containing data} {$IFDEF DebugTrace} bsF : System.Text; {$ENDIF} protected procedure bsWriteChunk(aIndex : integer); procedure bsSlide; public constructor Create(aStream : TStream); {-create the buffered stream} destructor Destroy; override; {-destroy the buffered stream} procedure Flush; {-ensures that all dirty buffered data is flushed} function Read(var Buffer; Count : Longint) : Longint; override; {-read from the stream into a buffer} function Seek(Offset : Longint; Origin : Word) : Longint; override; {-seek to a particular point in the stream} function Write(const Buffer; Count : Longint) : Longint; override; {-write to the stream from a buffer} end; implementation const ChunkSize = 8192; {cannot be greater than MaxInt} {===Helper routines==================================================} procedure RaiseException(const S : string); begin raise Exception.Create(S); end; {====================================================================} {===TabSlidingWindowStream===========================================} constructor TabSlidingWindowStream.Create(aStream : TStream); var i : integer; begin inherited Create; {save the actual stream} bsStream := aStream; {allocate the chunks-they must be set to binary zeros} for i := 0 to pred(abSWChunkCount) do bsChunks[i] := AllocMem(ChunkSize); {set the page/buffer variables to the start of the stream; remember we only write to the last chunk--the previous chunks are set to binary zeros} aStream.Position := 0; bsSize := 0; bsBufferStart := -ChunkSize * pred(abSWChunkCount); bsPosInBuffer := ChunkSize * pred(abSWChunkCount); bsCurChunk := pred(abSWChunkCount); bsPosInChunk := 0; bsDirty := false; {$IFDEF DebugTrace} System.Assign(bsF, 'c:\SlideWin.LOG'); if FileExists('c:\SlideWin.LOG') then System.Append(bsF) else System.Rewrite(bsF); writeln(bsF, '---NEW LOG---'); {$ENDIF} end; {--------} destructor TabSlidingWindowStream.Destroy; var i : integer; begin {destroy the buffer, after writing it to the actual stream} if bsDirty then Flush; for i := 0 to pred(abSWChunkCount) do if (bsChunks[i] <> nil) then FreeMem(bsChunks[i], ChunkSize); {$IFDEF DebugTrace} System.Close(bsF); {$ENDIF} {let our ancestor clean up} inherited Destroy; end; {--------} procedure TabSlidingWindowStream.bsSlide; var SavePtr : PByteArray; i : integer; begin {write out the first chunk} bsWriteChunk(0); {slide the chunks around} SavePtr := bsChunks[0]; for i := 0 to abSWChunkCount-2 do bsChunks[i] := bsChunks[i+1]; bsChunks[pred(abSWChunkCount)] := SavePtr; {advance the buffer start position} inc(bsBufferStart, ChunkSize); {reset the write position} bsPosInChunk := 0; bsPosInBuffer := ChunkSize * pred(abSWChunkCount); bsLastPos := 0; end; {--------} procedure TabSlidingWindowStream.bsWriteChunk(aIndex : integer); var SeekResult : longint; BytesWrit : longint; Offset : longint; BytesToWrite : integer; begin Offset := bsBufferStart + (longint(aIndex) * ChunkSize); if (Offset >= 0) then begin SeekResult := bsStream.Seek(Offset, 0); if (SeekResult = -1) then RaiseException('TabSlidingWindowStream.bsWriteChunk: seek failed'); if (aIndex <> pred(abSWChunkCount)) then BytesToWrite := ChunkSize else BytesToWrite := bsLastPos; BytesWrit := bsStream.Write(bsChunks[aIndex]^, BytesToWrite); if (BytesWrit <> BytesToWrite) then RaiseException('TabSlidingWindowStream.bsWriteChunk: write failed'); end; end; {--------} procedure TabSlidingWindowStream.Flush; var i : integer; begin if bsDirty then begin for i := 0 to pred(abSWChunkCount) do bsWriteChunk(i); bsDirty := false; end; end; {--------} function TabSlidingWindowStream.Read(var Buffer; Count : Longint) : Longint; var BufPtr : PByte; BytesToGo : Longint; BytesToRead : integer; begin BufPtr := @Buffer; {$IFDEF DebugTrace} System.Writeln(bsF, 'Read: ', Count, ' bytes'); {$ENDIF} {we do not support reads greater than 32KB bytes} if (Count > 32*1024) then Count := 32*1024; {reading is complicated by the fact we can only read in chunks of ChunkSize: we need to partition out the overall read into a read from part of the chunk, zero or more reads from complete chunks and then a possible read from part of a chunk} {calculate the actual number of bytes we can read - this depends on the current position and size of the stream as well as the number of bytes requested} BytesToGo := Count; if (bsSize < (bsBufferStart + bsPosInBuffer + Count)) then BytesToGo := bsSize - (bsBufferStart + bsPosInBuffer); if (BytesToGo <= 0) then begin Result := 0; Exit; end; {remember to return the result of our calculation} Result := BytesToGo; {calculate the number of bytes we can read prior to the loop} BytesToRead := ChunkSize - bsPosInChunk; if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; {copy from the stream buffer to the caller's buffer} if (BytesToRead = 1) then BufPtr^ := bsChunks[bsCurChunk]^[bsPosInChunk] else Move(bsChunks[bsCurChunk]^[bsPosInChunk], BufPtr^, BytesToRead); {calculate the number of bytes still to read} dec(BytesToGo, BytesToRead); {while we have bytes to read, read them} while (BytesToGo > 0) do begin {advance the pointer for the caller's buffer} inc(BufPtr, BytesToRead); {as we've exhausted this chunk, advance to the next} inc(bsCurChunk); bsPosInChunk := 0; {calculate the number of bytes we can read in this cycle} BytesToRead := ChunkSize; if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; {copy from the stream buffer to the caller's buffer} Move(bsChunks[bsCurChunk]^, BufPtr^, BytesToRead); {calculate the number of bytes still to read} dec(BytesToGo, BytesToRead); end; {remember our new position} inc(bsPosInChunk, BytesToRead); end; {--------} function TabSlidingWindowStream.Seek(Offset : Longint; Origin : Word) : Longint; {$IFDEF DebugTrace} const OriginStr : array [0..2] of string[7] = ('start', 'current', 'end'); {$ENDIF} var NewPos : Longint; begin {$IFDEF DebugTrace} System.Writeln(bsF, 'Seek: ', Offset, ' bytes from ', OriginStr[Origin]); {$ENDIF} {calculate the new position} case Origin of soFromBeginning : NewPos := Offset; soFromCurrent : NewPos := bsBufferStart + bsPosInBuffer + Offset; soFromEnd : NewPos := bsSize + Offset; else NewPos := 0; RaiseException('TabSlidingWindowStream.Seek: invalid origin'); end; {if the new position is invalid, say so} if (NewPos < bsBufferStart) or (NewPos > bsSize) then RaiseException('TabSlidingWindowStream.Seek: invalid new position'); {calculate the chunk number and the position in buffer & chunk} bsPosInBuffer := NewPos - bsBufferStart; bsCurChunk := bsPosInBuffer div ChunkSize; bsPosInChunk := bsPosInBuffer mod ChunkSize; {return the new position} Result := NewPos; end; {--------} function TabSlidingWindowStream.Write(const Buffer; Count : Longint) : Longint; var BufPtr : PByte; BytesToGo : Longint; BytesToWrite: integer; begin BufPtr := @Buffer; {$IFDEF DebugTrace} System.Writeln(bsF, 'Write: ', Count, ' bytes'); {$ENDIF} {we ONLY write at the end of the stream} if ((bsBufferStart + bsPosInBuffer) <> bsSize) then RaiseException('TabSlidingWindowStream.Write: Not at end of stream'); {we do not support writes greater than 32KB bytes} if (Count > 32*1024) then Count := 32*1024; {writing is complicated by the fact we write in chunks of Chunksize bytes: we need to partition out the overall write into a write to part of the chunk, zero or more writes to complete chunks and then a possible write to part of a chunk; every time we fill a chunk we have toi slide the buffer} {when we write to this stream we always assume that we can write the requested number of bytes: if we can't (eg, the disk is full) we'll get an exception somewhere eventually} BytesToGo := Count; {remember to return the result of our calculation} Result := BytesToGo; {calculate the number of bytes we can write prior to the loop} BytesToWrite := ChunkSize - bsPosInChunk; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy from the caller's buffer to the stream buffer} if (BytesToWrite = 1) then bsChunks[pred(abSWChunkCount)]^[bsPosInChunk] := BufPtr^ else Move(BufPtr^, bsChunks[pred(abSWChunkCount)]^[bsPosInChunk], BytesToWrite); {mark our buffer as requiring a save to the actual stream} bsDirty := true; {calculate the number of bytes still to write} dec(BytesToGo, BytesToWrite); {while we have bytes to write, write them} while (BytesToGo > 0) do begin {slide the buffer} bsSlide; {advance the pointer for the caller's buffer} inc(BufPtr, BytesToWrite); {calculate the number of bytes we can write in this cycle} BytesToWrite := ChunkSize; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy from the caller's buffer to our buffer} Move(BufPtr^, bsChunks[pred(abSWChunkCount)]^, BytesToWrite); {calculate the number of bytes still to write} dec(BytesToGo, BytesToWrite); end; {remember our new position} inc(bsPosInChunk, BytesToWrite); bsPosInBuffer := (longint(ChunkSize) * pred(abSWChunkCount)) + bsPosInChunk; bsLastPos := bsPosInChunk; {make sure the stream size is correct} inc(bsSize, Result); {if we're at the end of the chunk, slide the buffer ready for next time we write} if (bsPosInChunk = ChunkSize) then bsSlide; end; {====================================================================} end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abbzip2typ.pas��������������������������������������������0000644�0001750�0000144�00000035517�12613112750�022354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBzip2Typ.pas *} {*********************************************************} {* ABBREVIA: TAbBzip2Archive, TAbBzip2Item classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Bzip2 files *} {*********************************************************} unit AbBzip2Typ; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; const { Default Stream Header for Bzip2s is 'BZhX', where X is the block size setting 1-9 in ASCII } { Each block has the following header: '1AY&SY', and are in units of 100kilobytes NOT 100kibiBytes } AB_BZIP2_FILE_HEADER = 'BZh'; AB_BZIP2_BLOCK_SIZE = ['1','2','3','4','5','6','7','8','9']; AB_BZIP2_BLOCK_HEADER = '1AY&SY'; { Note: $314159265359, BCD for Pi :) } { Note that Blocks are bit aligned, as such the only time you will "for sure" see the block header is on the start of stream/File } AB_BZIP2_FILE_TAIL =#23#114#36#83#133#9#0; { $1772245385090, BCD for sqrt(Pi) :) } { This is odd as the blocks are bit allgned so this is a string that is 13*4 bits = 52 bits } type PAbBzip2Header = ^TAbBzip2Header; { File Header } TAbBzip2Header = packed record { SizeOf(TAbBzip2Header) = 10 } FileHeader : array[0..2] of AnsiChar;{ 'BZh'; $42,5A,68 } BlockSize : AnsiChar; { '1'..'9'; $31-$39 } BlockHeader : array[0..5] of AnsiChar;{ '1AY&SY'; $31,41,59,26,53,59 } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbBzip2Item = class(TabArchiveItem); TAbBzip2ArchiveState = (gsBzip2, gsTar); TAbBzip2Archive = class(TAbTarArchive) private FBzip2Stream : TStream; { stream for Bzip2 file} FBzip2Item : TAbArchiveList; { item in bzip2 (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbBzip2ArchiveState; FIsBzippedTar : Boolean; procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToBzip2; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsBzippedTar : Boolean read FIsBzippedTar write FIsBzippedTar; end; function VerifyBzip2(Strm : TStream) : TAbArchiveType; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, AbBzip2, AbExcept, AbVMStrm, AbBitBkt, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbBzip2Header) : Boolean; begin Result := (Header.FileHeader = AB_BZIP2_FILE_HEADER) and (Header.BlockSize in AB_BZIP2_BLOCK_SIZE) and (Header.BlockHeader = AB_BZIP2_BLOCK_HEADER); end; { -------------------------------------------------------------------------- } function VerifyBzip2(Strm : TStream) : TAbArchiveType; var Hdr : TAbBzip2Header; CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soFromBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atBzip2; { Check for embedded TAR } Strm.Seek(0, soFromBeginning); DecompStream := TBZDecompressionStream.Create(Strm); try TarStream := TMemoryStream.Create; try DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atBzippedTar; finally TarStream.Free; end; finally DecompStream.Free; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbBzip2Archive ***************************** } constructor TAbBzip2Archive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsBzip2; FBzip2Stream := FStream; FBzip2Item := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SwapToBzip2; begin FStream := FBzip2Stream; FItemList := FBzip2Item; FState := gsBzip2; end; { -------------------------------------------------------------------------- } function TAbBzip2Archive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var Bz2Item : TAbBzip2Item; FullSourceFileName, FullArchiveFileName: String; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToBzip2; Bz2Item := TAbBzip2Item.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); Bz2Item.FileName := FullArchiveFileName; Bz2Item.DiskFileName := FullSourceFileName; Result := Bz2Item; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbBzip2Archive.Destroy; begin SwapToBzip2; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToBzip2; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Bz2 doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToBzip2; { Index ignored as there's only one item in a Bz2 } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbBzip2Archive.GetSupportsEmptyFolders : Boolean; begin Result := IsBzippedTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.LoadArchive; var Item: TAbBzip2Item; Abort: Boolean; ItemName: string; begin if FBzip2Stream.Size = 0 then Exit; if IsBzippedTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToBzip2; Item := TAbBzip2Item.Create; Item.Action := aaNone; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.tbz', ItemName) or AnsiEndsText('.tbz2', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SaveArchive; var CompStream: TStream; i: Integer; CurItem: TAbBzip2Item; UpdateArchive: Boolean; TempFileName: String; InputFileStream: TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; UpdateArchive := (FBzip2Stream.Size > 0) and (FBzip2Stream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FBzip2Stream); TempFileName := GetTempName(FArchiveName + ExtensionSeparator); { Create new archive with temporary name } FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream); try CompStream.CopyFrom(FTarStream, 0); finally CompStream.Free; end; if UpdateArchive then begin FreeAndNil(FBzip2Stream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FBzip2Stream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToBzip2; for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbBzip2Item(ItemList[i]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; bz2 doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FBzip2Stream.Size := 0; CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream); try if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FBzip2Stream } else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try CompStream.CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } finally InputFileStream.Free; end; end; finally CompStream.Free; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToBzip2; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.DecompressToStream(aStream: TStream); const BufSize = $F000; var DecompStream: TBZDecompressionStream; Buffer: PByte; N: Integer; begin DecompStream := TBZDecompressionStream.Create(FBzip2Stream); try GetMem(Buffer, BufSize); try N := DecompStream.Read(Buffer^, BufSize); while N > 0 do begin aStream.WriteBuffer(Buffer^, N); N := DecompStream.Read(Buffer^, BufSize); end; finally FreeMem(Buffer, BufSize); end; finally DecompStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.TestItemAt(Index: Integer); var Bzip2Type: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { note Index ignored as there's only one item in a GZip } Bzip2Type := VerifyBzip2(FBzip2Stream); if not (Bzip2Type in [atBzip2, atBzippedTar]) then raise EAbGzipInvalid.Create;// TODO: Add bzip2-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbBzip2Archive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abunzprc.pas����������������������������������������������0000644�0001750�0000144�00000107714�12423755012�022114� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUnzPrc.pas *} {*********************************************************} {* ABBREVIA: UnZip procedures *} {*********************************************************} unit AbUnzPrc; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbZipTyp; type TAbUnzipHelper = class( TObject ) protected {private} {internal variables} FOutWriter : TStream; FOutStream : TStream; FUnCompressedSize : LongInt; FCompressionMethod : TAbZipCompressionMethod; FDictionarySize : TAbZipDictionarySize; FShannonFanoTreeCount : Byte; FOutBuf : PAbByteArray; {output buffer} FOutSent : LongInt; {number of bytes sent to output buffer} FOutPos : Cardinal; {current position in output buffer} FBitSValid : Byte; {Number of valid bits} FInBuf : TAbByteArray4K; FInPos : Integer; {current position in input buffer} FInCnt : Integer; {number of bytes in input buffer} FInEof : Boolean; {set when stream read returns 0} FCurByte : Byte; {current input byte} FBitsLeft : Byte; {bits left to process in FCurByte} FZStream : TStream; protected procedure uzFlushOutBuf; {-Flushes the output buffer} function uzReadBits(Bits : Byte) : Integer; {-Read the specified number of bits} procedure uzReadNextPrim; {-does less likely part of uzReadNext} {$IFDEF UnzipImplodeSupport} procedure uzUnImplode; {-Extract an imploded file} {$ENDIF} {$IFDEF UnzipReduceSupport} procedure uzUnReduce; {-Extract a reduced file} {$ENDIF} {$IFDEF UnzipShrinkSupport} procedure uzUnShrink; {-Extract a shrunk file} {$ENDIF} procedure uzWriteByte(B : Byte); {write to output} public constructor Create( InputStream, OutputStream : TStream ); destructor Destroy; override; procedure Execute; property UnCompressedSize : LongInt read FUncompressedSize write FUncompressedSize; property CompressionMethod : TAbZipCompressionMethod read FCompressionMethod write FCompressionMethod; property DictionarySize : TAbZipDictionarySize read FDictionarySize write FDictionarySize; property ShannonFanoTreeCount : Byte read FShannonFanoTreeCount write FShannonFanoTreeCount; end; procedure AbUnzipToStream( Sender : TObject; Item : TAbZipItem; OutStream : TStream); procedure AbUnzip(Sender : TObject; Item : TAbZipItem; const UseName : string); procedure AbTestZipItem(Sender : TObject; Item : TAbZipItem); procedure InflateStream(CompressedStream, UnCompressedStream : TStream); {-Inflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills!} implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, {$IFDEF UnzipBzip2Support} AbBzip2, {$ENDIF} {$IFDEF UnzipLzmaSupport} ULZMADecoder, {$ENDIF} {$IFDEF UnzipPPMdSupport} AbPPMd, {$ENDIF} {$IFDEF UnzipWavPackSupport} AbWavPack, {$ENDIF} {$IFDEF UnzipXzSupport} AbXz, {$ENDIF} AbBitBkt, AbConst, AbDfBase, AbDfCryS, AbDfDec, AbExcept, AbSpanSt, AbSWStm, AbUnzOutStm, AbUtils, DCClassesUtf8; { -------------------------------------------------------------------------- } procedure AbReverseBits(var W : Word); {-Reverse the order of the bits in W} register; const RevTable : array[0..255] of Byte = ($00, $80, $40, $C0, $20, $A0, $60, $E0, $10, $90, $50, $D0, $30, $B0, $70, $F0, $08, $88, $48, $C8, $28, $A8, $68, $E8, $18, $98, $58, $D8, $38, $B8, $78, $F8, $04, $84, $44, $C4, $24, $A4, $64, $E4, $14, $94, $54, $D4, $34, $B4, $74, $F4, $0C, $8C, $4C, $CC, $2C, $AC, $6C, $EC, $1C, $9C, $5C, $DC, $3C, $BC, $7C, $FC, $02, $82, $42, $C2, $22, $A2, $62, $E2, $12, $92, $52, $D2, $32, $B2, $72, $F2, $0A, $8A, $4A, $CA, $2A, $AA, $6A, $EA, $1A, $9A, $5A, $DA, $3A, $BA, $7A, $FA, $06, $86, $46, $C6, $26, $A6, $66, $E6, $16, $96, $56, $D6, $36, $B6, $76, $F6, $0E, $8E, $4E, $CE, $2E, $AE, $6E, $EE, $1E, $9E, $5E, $DE, $3E, $BE, $7E, $FE, $01, $81, $41, $C1, $21, $A1, $61, $E1, $11, $91, $51, $D1, $31, $B1, $71, $F1, $09, $89, $49, $C9, $29, $A9, $69, $E9, $19, $99, $59, $D9, $39, $B9, $79, $F9, $05, $85, $45, $C5, $25, $A5, $65, $E5, $15, $95, $55, $D5, $35, $B5, $75, $F5, $0D, $8D, $4D, $CD, $2D, $AD, $6D, $ED, $1D, $9D, $5D, $DD, $3D, $BD, $7D, $FD, $03, $83, $43, $C3, $23, $A3, $63, $E3, $13, $93, $53, $D3, $33, $B3, $73, $F3, $0B, $8B, $4B, $CB, $2B, $AB, $6B, $EB, $1B, $9B, $5B, $DB, $3B, $BB, $7B, $FB, $07, $87, $47, $C7, $27, $A7, $67, $E7, $17, $97, $57, $D7, $37, $B7, $77, $F7, $0F, $8F, $4F, $CF, $2F, $AF, $6F, $EF, $1F, $9F, $5F, $DF, $3F, $BF, $7F, $FF); begin W := RevTable[Byte(W shr 8)] or Word(RevTable[Byte(W)] shl 8); end; { TAbUnzipHelper implementation ============================================ } { -------------------------------------------------------------------------- } constructor TAbUnzipHelper.Create( InputStream, OutputStream : TStream ); begin inherited Create; FOutBuf := AllocMem( AbBufferSize ); FOutPos := 0; FZStream := InputStream; FOutStream := OutputStream; FUncompressedSize := 0; FDictionarySize := dsInvalid; FShannonFanoTreeCount := 0; FCompressionMethod := cmDeflated; end; { -------------------------------------------------------------------------- } destructor TAbUnzipHelper.Destroy; begin FreeMem( FOutBuf, AbBufferSize ); inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.Execute; begin {parent class handles exceptions via OnExtractFailure} FBitsLeft := 0; FCurByte := 0; FInCnt := 0; FOutSent := 0; FOutPos := 0; FInEof := False; {set the output stream; for Imploded/Reduced files this has to be buffered, for all other types of compression, the code buffers the output data nicely and so the given output stream can be used.} {$IFDEF UnzipImplodeSupport} if (FCompressionMethod = cmImploded) then FOutWriter := TabSlidingWindowStream.Create(FOutStream) else {$ENDIF} {$IFDEF UnzipReduceSupport} if (FCompressionMethod >= cmReduced1) and (FCompressionMethod <= cmReduced4) then FOutWriter := TabSlidingWindowStream.Create(FOutStream) else {$ENDIF} FOutWriter := FOutStream; FInPos := 1+SizeOf(FInBuf); { GetMem( FInBuf, SizeOf(FInBuf^) );} try {uncompress it with the appropriate method} case FCompressionMethod of {$IFDEF UnzipShrinkSupport} cmShrunk : uzUnshrink; {$ENDIF} {$IFDEF UnzipReduceSupport} cmReduced1..cmReduced4 : uzUnReduce; {$ENDIF} {$IFDEF UnzipImplodeSupport} cmImploded : uzUnImplode; {$ENDIF} {cmTokenized} {cmEnhancedDeflated} {cmDCLImploded} else raise EAbZipInvalidMethod.Create; end; finally uzFlushOutBuf; {free any memory} if (FOutWriter <> FOutStream) then FOutWriter.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzReadNextPrim; begin FInCnt := FZStream.Read( FInBuf, sizeof( FInBuf ) ); FInEof := FInCnt = 0; {load first byte in buffer and set position counter} FCurByte := FInBuf[1]; FInPos := 2; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzFlushOutBuf; {-flushes the output buffer} begin if (FOutPos <> 0) then begin FOutWriter.Write( FOutBuf^, FOutPos ); Inc( FOutSent, FOutPos ); FOutPos := 0; end; end; { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzWriteByte(B : Byte); {-Write one byte to the output buffer} begin FOutBuf^[FOutPos] := B; inc(FOutPos); if (FOutPos = AbBufferSize) or (LongInt(FOutPos) + FOutSent = FUncompressedSize) then uzFlushOutBuf; end; { -------------------------------------------------------------------------- } function TAbUnzipHelper.uzReadBits(Bits : Byte) : Integer; {-Read the specified number of bits} var SaveCurByte, Delta, SaveBitsLeft : Byte; begin {read next byte if we're out of bits} if FBitsLeft = 0 then begin {do we still have a byte buffered?} if FInPos <= FInCnt then begin {get next byte out of buffer and advance position counter} FCurByte := FInBuf[FInPos]; Inc(FInPos); end {are there any left to read?} else uzReadNextPrim; FBitsLeft := 8; end; if ( Bits < FBitsLeft ) then begin Dec( FBitsLeft, Bits ); Result := ((1 shl Bits) - 1) and FCurByte; FCurByte := FCurByte shr Bits; end else if ( Bits = FBitsLeft ) then begin Result := FCurByte; FCurByte := 0; FBitsLeft := 0; end else begin SaveCurByte := FCurByte; SaveBitsLeft := FBitsLeft; {number of additional bits that we need} Delta := Bits - FBitsLeft; {do we still have a byte buffered?} if FInPos <= FInCnt then begin {get next byte out of buffer and advance position counter} FCurByte := FInBuf[FInPos]; Inc(FInPos); end {are there any left to read?} else uzReadNextPrim; FBitsLeft := 8; Result := ( uzReadBits( Delta ) shl SaveBitsLeft ) or SaveCurByte; end; end; {$IFDEF UnzipImplodeSupport} { -------------------------------------------------------------------------- } procedure TAbUnzipHelper.uzUnImplode; {-Extract an imploded file} const szLengthTree = SizeOf(TAbSfTree)-(192*SizeOf(TAbSfEntry)); szDistanceTree = SizeOf(TAbSfTree)-(192*SizeOf(TAbSfEntry)); szLitTree = SizeOf(TAbSfTree); var Length : Integer; DIndex : LongInt; Distance : Integer; SPos : LongInt; MyByte : Byte; DictBits : Integer; {number of bits used in sliding dictionary} MinMatchLength : Integer; {minimum match length} LitTree : PAbSfTree; {Literal tree} LengthTree : PAbSfTree; {Length tree} DistanceTree : PAbSfTree; {Distance tree} procedure uzLoadTree(var T; TreeSize : Integer); {-Load one Shannon-Fano tree} var I : Word; Tree : TAbSfTree absolute T; procedure GenerateTree; {-Generate a Shannon-Fano tree} var C : Word; CodeIncrement : Integer; LastBitLength : Integer; I : Integer; begin C := 0; CodeIncrement := 0; LastBitLength := 0; for I := Tree.Entries-1 downto 0 do with Tree.Entry[I] do begin Inc(C, CodeIncrement); if BitLength <> LastBitLength then begin LastBitLength := BitLength; CodeIncrement := 1 shl (16-LastBitLength); end; Code := C; end; end; procedure SortLengths; {-Sort the bit lengths in ascending order, while retaining the order of the original lengths stored in the file} var XL : Integer; XGL : Integer; TXP : PAbSfEntry; TXGP : PAbSfEntry; X, Gap : Integer; Done : Boolean; LT : LongInt; begin Gap := Tree.Entries shr 1; repeat repeat Done := True; for X := 0 to (Tree.Entries-1)-Gap do begin TXP := @Tree.Entry[X]; TXGP := @Tree.Entry[X+Gap]; XL := TXP^.BitLength; XGL := TXGP^.BitLength; if (XL > XGL) or ((XL = XGL) and (TXP^.Value > TXGP^.Value)) then begin LT := TXP^.L; TXP^.L := TXGP^.L; TXGP^.L := LT; Done := False; end; end; until Done; Gap := Gap shr 1; until (Gap = 0); end; procedure uzReadLengths; {-Read bit lengths for a tree} var TreeBytes : Integer; I, J, K : Integer; Num, Len : Integer; B : Byte; begin {get number of bytes in compressed tree} TreeBytes := uzReadBits(8)+1; I := 0; Tree.MaxLength := 0; {High nibble: Number of values at this bit length + 1. Low nibble: Bits needed to represent value + 1} for J := 1 to TreeBytes do begin B := uzReadBits(8); Len := (B and $0F)+1; Num := (B shr 4)+1; for K := I to I+Num-1 do with Tree, Entry[K] do begin if Len > MaxLength then MaxLength := Len; BitLength := Len; Value := K; end; Inc(I, Num); end; end; begin Tree.Entries := TreeSize; uzReadLengths; SortLengths; GenerateTree; for I := 0 to TreeSize-1 do AbReverseBits(Tree.Entry[I].Code); end; function uzReadTree(var T) : Byte; {-Read next byte using a Shannon-Fano tree} var Bits : Integer; CV : Word; E : Integer; Cur : Integer; var Tree : TAbSfTree absolute T; begin Result := 0; Bits := 0; CV := 0; Cur := 0; E := Tree.Entries; repeat CV := CV or (uzReadBits(1) shl Bits); Inc(Bits); while Tree.Entry[Cur].BitLength < Bits do begin Inc(Cur); if Cur >= E then Exit; end; while Tree.Entry[Cur].BitLength = Bits do begin if Tree.Entry[Cur].Code = CV then begin Result := Tree.Entry[Cur].Value; Exit; end; Inc(Cur); if Cur >= E then Exit; end; until False; end; begin {do we have an 8K dictionary?} if FDictionarySize = ds8K then DictBits := 7 else DictBits := 6; {allocate trees} LengthTree := AllocMem(szLengthTree); DistanceTree := AllocMem(szDistanceTree); LitTree := nil; try {do we have a Literal tree?} MinMatchLength := FShannonFanoTreeCount; if MinMatchLength = 3 then begin LitTree := AllocMem(szLitTree); uzLoadTree(LitTree^, 256); end; {load the other two trees} uzLoadTree(LengthTree^, 64); uzLoadTree(DistanceTree^, 64); while (not FInEof) and (FOutSent + LongInt(FOutPos) < FUncompressedSize) do {is data literal?} if Boolean(uzReadBits(1)) then begin {if MinMatchLength = 3 then we have a Literal tree} if (MinMatchLength = 3) then uzWriteByte( uzReadTree(LitTree^) ) else uzWriteByte( uzReadBits(8) ); end else begin {data is a sliding dictionary} Distance := uzReadBits(DictBits); {using the Distance Shannon-Fano tree, read and decode the upper 6 bits of the Distance value} Distance := Distance or (uzReadTree(DistanceTree^) shl DictBits); {using the Length Shannon-Fano tree, read and decode the Length value} Length := uzReadTree(LengthTree^); if Length = 63 then Inc(Length, uzReadBits(8)); Inc(Length, MinMatchLength); {move backwards Distance+1 bytes in the output stream, and copy Length characters from this position to the output stream. (if this position is before the start of the output stream, then assume that all the data before the start of the output stream is filled with zeros)} DIndex := (FOutSent + LongInt(FOutPos))-(Distance+1); while Length > 0 do begin if DIndex < 0 then uzWriteByte(0) else begin uzFlushOutBuf; SPos := FOutWriter.Position; FOutWriter.Position := DIndex; FOutWriter.Read( MyByte, 1 ); FOutWriter.Position := SPos; uzWriteByte(MyByte); end; Inc(DIndex); Dec(Length); end; end; finally if (LitTree <> nil) then FreeMem(LitTree, szLitTree); FreeMem(LengthTree, szLengthTree); FreeMem(DistanceTree, szDistanceTree); end; end; {$ENDIF UnzipImplodeSupport} { -------------------------------------------------------------------------- } {$IFDEF UnzipReduceSupport} procedure TAbUnzipHelper.uzUnReduce; const FactorMasks : array[1..4] of Byte = ($7F, $3F, $1F, $0F); DLE = 144; var C, Last : Byte; OpI : LongInt; I, J, Sz : Integer; D : Word; SPos : LongInt; MyByte : Byte; Factor : Byte; {reduction Factor} FactorMask : Byte; {bit mask to use based on Factor} Followers : PAbFollowerSets; {array of follower sets} State : Integer; {used while processing reduced files} V : Integer; {"} Len : Integer; {"} function BitsNeeded( i : Byte ) : Word; begin dec( i ); Result := 0; repeat inc( Result ); i := i shr 1; until i = 0; end; begin GetMem(Followers, SizeOf(TAbFollowerSets)); try Factor := Ord( FCompressionMethod ) - 1; FactorMask := FactorMasks[Factor]; State := 0; C := 0; V := 0; Len := 0; D := 0; {load follower sets} for I := 255 downto 0 do begin Sz := uzReadBits(6); Followers^[I].Size := Sz; Dec(Sz); for J := 0 to Sz do Followers^[I].FSet[J] := uzReadBits(8); end; while (not FInEof) and ((FOutSent + LongInt(FOutPos)) < FUncompressedSize) do begin Last := C; with Followers^[Last] do if Size = 0 then C := uzReadBits(8) else begin C := uzReadBits(1); if C <> 0 then C := uzReadBits(8) else C := FSet[uzReadBits(BitsNeeded(Size))]; end; if FInEof then Exit; case State of 0 : if C <> DLE then uzWriteByte(C) else State := 1; 1 : if C <> 0 then begin V := C; Len := V and FactorMask; if Len = FactorMask then State := 2 else State := 3; end else begin uzWriteByte(DLE); State := 0; end; 2 : begin Inc(Len, C); State := 3; end; 3 : begin case Factor of 1 : D := (V shr 7) and $01; 2 : D := (V shr 6) and $03; 3 : D := (V shr 5) and $07; 4 : D := (V shr 4) and $0f; else raise EAbZipInvalidFactor.Create; end; {Delphi raises compiler Hints here, saying D might be undefined... If Factor is not in [1..4], the exception gets raised, and we never execute the following line} OpI := (FOutSent + LongInt(FOutPos))-(Swap(D)+C+1); for I := 0 to Len+2 do begin if OpI < 0 then uzWriteByte(0) else if OpI >= FOutSent then uzWriteByte(FOutBuf[OpI - FOutSent]) else begin SPos := FOutWriter.Position; FOutWriter.Position := OpI; FOutWriter.Read( MyByte, 1 ); FOutWriter.Position := SPos; uzWriteByte(MyByte); end; Inc(OpI); end; State := 0; end; end; end; finally FreeMem(Followers, SizeOf(Followers^)); end; end; {$ENDIF UnzipReduceSupport} { -------------------------------------------------------------------------- } {$IFDEF UnzipShrinkSupport} procedure TAbUnzipHelper.uzUnShrink; {-Extract a file that was shrunk} const MaxBits = 13; InitBits = 9; FirstFree = 257; Clear = 256; MaxCodeMax = 8192; {= 1 shl MaxBits} Unused = -1; var CodeSize : SmallInt; NextFree : SmallInt; BaseChar : SmallInt; NewCode : SmallInt; OldCode : SmallInt; SaveCode : SmallInt; N, R : SmallInt; I : Integer; PrefixTable : PAbIntArray8K; {used while processing shrunk files} SuffixTable : PAbByteArray8K; {"} Stack : PAbByteArray8K; {"} StackIndex : Integer; {"} begin CodeSize := InitBits; { MaxCode := (1 shl InitBits)-1;} NextFree := FirstFree; PrefixTable := nil; SuffixTable := nil; Stack := nil; try GetMem(PrefixTable, SizeOf(PrefixTable^)); SuffixTable := AllocMem(SizeOf(SuffixTable^)); GetMem(Stack, SizeOf(Stack^)); FillChar(PrefixTable^, SizeOf(PrefixTable^), $FF); for NewCode := 255 downto 0 do begin PrefixTable^[NewCode] := 0; SuffixTable^[NewCode] := NewCode; end; OldCode := uzReadBits(CodeSize); if FInEof then Exit; BaseChar := OldCode; uzWriteByte(BaseChar); StackIndex := 0; while (not FInEof) do begin NewCode := uzReadBits(CodeSize); while (NewCode = Clear) and (not FInEof) do begin case uzReadBits(CodeSize) of 1 : begin Inc(CodeSize); end; 2 : begin {mark all nodes as potentially unused} for I := FirstFree to pred( NextFree ) do PrefixTable^[I] := PrefixTable^[I] or LongInt($8000); {unmark those used by other nodes} for N := FirstFree to NextFree-1 do begin {reference to another node?} R := PrefixTable^[N] and $7FFF; {flag node as referenced} if R >= FirstFree then PrefixTable^[R] := PrefixTable^[R] and $7FFF; end; {clear the ones that are still marked} for I := FirstFree to pred( NextFree ) do if PrefixTable^[I] < 0 then PrefixTable^[I] := -1; {recalculate NextFree} NextFree := FirstFree; while (NextFree < MaxCodeMax) and (PrefixTable^[NextFree] <> -1) do Inc(NextFree); end; end; NewCode := uzReadBits(CodeSize); end; if FInEof then Exit; {save current code} SaveCode := NewCode; {special case} if PrefixTable^[NewCode] = Unused then begin Stack^[StackIndex] := BaseChar; Inc(StackIndex); NewCode := OldCode; end; {generate output characters in reverse order} while (NewCode >= FirstFree) do begin if PrefixTable^[NewCode] = Unused then begin Stack^[StackIndex] := BaseChar; Inc(StackIndex); NewCode := OldCode; end else begin Stack^[StackIndex] := SuffixTable^[NewCode]; Inc(StackIndex); NewCode := PrefixTable^[NewCode]; end; end; BaseChar := SuffixTable^[NewCode]; uzWriteByte(BaseChar); {put them out in forward order} while (StackIndex > 0) do begin Dec(StackIndex); uzWriteByte(Stack^[StackIndex]); end; {add new entry to tables} NewCode := NextFree; if NewCode < MaxCodeMax then begin PrefixTable^[NewCode] := OldCode; SuffixTable^[NewCode] := BaseChar; while (NextFree < MaxCodeMax) and (PrefixTable^[NextFree] <> Unused) do Inc(NextFree); end; {remember previous code} OldCode := SaveCode; end; finally FreeMem(PrefixTable, SizeOf(PrefixTable^)); FreeMem(SuffixTable, SizeOf(SuffixTable^)); FreeMem(Stack, SizeOf(Stack^)); end; end; {$ENDIF} { -------------------------------------------------------------------------- } procedure RequestPassword(Archive : TAbZipArchive; var Abort : Boolean); var APassPhrase : AnsiString; begin APassPhrase := Archive.Password; Abort := False; if Assigned(Archive.OnNeedPassword) then begin Archive.OnNeedPassword(Archive, APassPhrase); if APassPhrase = '' then Abort := True else Archive.Password := APassPhrase; end; end; { -------------------------------------------------------------------------- } procedure CheckPassword(Archive : TAbZipArchive; var Tries : Integer; var Abort : Boolean); begin { if current password empty } if Archive.Password = '' then begin { request password } RequestPassword(Archive, Abort); { increment tries } Inc(Tries); end; { if current password still empty } if Archive.Password = '' then begin { abort } raise EAbZipInvalidPassword.Create; end; end; { -------------------------------------------------------------------------- } procedure DoInflate(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Hlpr : TAbDeflateHelper; begin Hlpr := TAbDeflateHelper.Create; try if Item.CompressionMethod = cmEnhancedDeflated then Hlpr.Options := Hlpr.Options or dfc_UseDeflate64; Hlpr.StreamSize := Item.CompressedSize; Inflate(InStream, OutStream, Hlpr); finally Hlpr.Free; end; end; { -------------------------------------------------------------------------- } procedure DoLegacyUnzip(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Helper : TAbUnzipHelper; begin Helper := TAbUnzipHelper.Create(InStream, OutStream); try {Helper} Helper.DictionarySize := Item.DictionarySize; Helper.UnCompressedSize := Item.UncompressedSize; Helper.CompressionMethod := Item.CompressionMethod; Helper.ShannonFanoTreeCount := Item.ShannonFanoTreeCount; Helper.Execute; finally Helper.Free; end; end; { -------------------------------------------------------------------------- } {$IFDEF UnzipBzip2Support} procedure DoExtractBzip2(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Bzip2Stream: TStream; begin Bzip2Stream := TBZDecompressionStream.Create(InStream); try OutStream.CopyFrom(Bzip2Stream, Item.UncompressedSize); finally Bzip2Stream.Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } {$IFDEF UnzipLzmaSupport} procedure DoExtractLzma(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var Header: packed record MajorVer, MinorVer: Byte; PropSize: Word; end; Properties: array of Byte; begin InStream.ReadBuffer(Header, SizeOf(Header)); SetLength(Properties, Header.PropSize); InStream.ReadBuffer(Properties[0], Header.PropSize); with TLZMADecoder.Create do try SetDecoderProperties(Properties); Code(InStream, OutStream, Item.UncompressedSize); finally Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } {$IFDEF UnzipXzSupport} procedure DoExtractXz(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); var LzmaDecompression: TLzmaDecompression; begin LzmaDecompression := TLzmaDecompression.Create(InStream, OutStream); try LzmaDecompression.Code(Item.UncompressedSize); finally LzmaDecompression.Free; end; end; {$ENDIF} { -------------------------------------------------------------------------- } function ExtractPrep(ZipArchive: TAbZipArchive; Item: TAbZipItem): TStream; var LFH : TAbZipLocalFileHeader; Abort : Boolean; Tries : Integer; CheckValue : LongInt; DecryptStream: TAbDfDecryptStream; begin { validate } if (Lo(Item.VersionNeededToExtract) > Ab_ZipVersion) then raise EAbZipVersion.Create; { seek to compressed file } if ZipArchive.FStream is TAbSpanReadStream then TAbSpanReadStream(ZipArchive.FStream).SeekImage(Item.DiskNumberStart, Item.RelativeOffset) else ZipArchive.FStream.Position := Item.RelativeOffset; { get local header info for Item} LFH := TAbZipLocalFileHeader.Create; try { select appropriate CRC value based on General Purpose Bit Flag } { also get whether the file is stored, while we've got the local file header } LFH.LoadFromStream(ZipArchive.FStream); if (LFH.GeneralPurposeBitFlag and AbHasDataDescriptorFlag = AbHasDataDescriptorFlag) then { if bit 3 is set, then the data descriptor record is appended to the compressed data } CheckValue := LFH.LastModFileTime shl $10 else CheckValue := Item.CRC32; finally LFH.Free; end; Result := TAbUnzipSubsetStream.Create(ZipArchive.FStream, Item.CompressedSize); { get decrypting stream } if Item.IsEncrypted then begin try { need to decrypt } Tries := 0; Abort := False; CheckPassword(ZipArchive, Tries, Abort); while True do begin if Abort then raise EAbUserAbort.Create; { check for valid password } DecryptStream := TAbDfDecryptStream.Create(Result, CheckValue, ZipArchive.Password); if DecryptStream.IsValid then begin DecryptStream.OwnsStream := True; Result := DecryptStream; Break; end; FreeAndNil(DecryptStream); { prompt again } Inc(Tries); if (Tries > ZipArchive.PasswordRetries) then raise EAbZipInvalidPassword.Create; RequestPassword(ZipArchive, Abort); end; except Result.Free; raise; end; end; end; { -------------------------------------------------------------------------- } procedure DoExtract(aZipArchive: TAbZipArchive; aItem: TAbZipItem; aInStream, aOutStream: TStream); var OutStream : TAbUnzipOutputStream; begin if aItem.UncompressedSize = 0 then Exit; OutStream := TAbUnzipOutputStream.Create(aOutStream); try OutStream.UncompressedSize := aItem.UncompressedSize; OutStream.OnProgress := aZipArchive.OnProgress; { determine storage type } case aItem.CompressionMethod of cmStored: begin { unstore aItem } OutStream.CopyFrom(aInStream, aItem.UncompressedSize); end; cmDeflated, cmEnhancedDeflated: begin { inflate aItem } DoInflate(aZipArchive, aItem, aInStream, OutStream); end; {$IFDEF UnzipBzip2Support} cmBzip2: begin DoExtractBzip2(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipLzmaSupport} cmLZMA: begin DoExtractLzma(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipPPMdSupport} cmPPMd: begin DecompressPPMd(aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipWavPackSupport} cmWavPack: begin DecompressWavPack(aInStream, OutStream); end; {$ENDIF} {$IFDEF UnzipXzSupport} cmXz: begin DoExtractXz(aZipArchive, aItem, aInStream, OutStream); end; {$ENDIF} cmShrunk..cmImploded: begin DoLegacyUnzip(aZipArchive, aItem, aInStream, OutStream); end; else raise EAbZipInvalidMethod.Create; end; { check CRC } if OutStream.CRC32 <> aItem.CRC32 then if Assigned(aZipArchive.OnProcessItemFailure) then aZipArchive.OnProcessItemFailure(aZipArchive, aItem, ptExtract, ecAbbrevia, AbZipBadCRC) else raise EAbZipBadCRC.Create; finally OutStream.Free; end; end; { -------------------------------------------------------------------------- } procedure AbUnzipToStream( Sender : TObject; Item : TAbZipItem; OutStream : TStream); var ZipArchive : TAbZipArchive; InStream : TStream; begin ZipArchive := Sender as TAbZipArchive; if not Assigned(OutStream) then raise EAbBadStream.Create; InStream := ExtractPrep(ZipArchive, Item); try DoExtract(ZipArchive, Item, InStream, OutStream); finally InStream.Free end; end; { -------------------------------------------------------------------------- } procedure AbUnzip(Sender : TObject; Item : TAbZipItem; const UseName : string); {create the output filestream and pass it to DoExtract} var InStream, OutStream : TStream; ZipArchive : TAbZipArchive; begin ZipArchive := TAbZipArchive(Sender); if Item.IsDirectory then AbCreateDirectory(UseName) else begin InStream := ExtractPrep(ZipArchive, Item); try OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyWrite); try try {OutStream} DoExtract(ZipArchive, Item, InStream, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} except if ExceptObject is EAbUserAbort then ZipArchive.FStatus := asInvalid; DeleteFile(UseName); raise; end; finally InStream.Free end; end; AbSetFileTime(UseName, Item.LastModTimeAsDateTime); AbSetFileAttr(UseName, Item.NativeFileAttributes); end; { -------------------------------------------------------------------------- } procedure AbTestZipItem(Sender : TObject; Item : TAbZipItem); {extract item to bit bucket and verify its local file header} var BitBucket : TAbBitBucketStream; FieldSize : Word; LFH : TAbZipLocalFileHeader; Zip64Field : PZip64LocalHeaderRec; ZipArchive : TAbZipArchive; begin ZipArchive := TAbZipArchive(Sender); if (Lo(Item.VersionNeededToExtract) > Ab_ZipVersion) then raise EAbZipVersion.Create; { seek to compressed file } if ZipArchive.FStream is TAbSpanReadStream then TAbSpanReadStream(ZipArchive.FStream).SeekImage(Item.DiskNumberStart, Item.RelativeOffset) else ZipArchive.FStream.Position := Item.RelativeOffset; BitBucket := nil; LFH := nil; try BitBucket := TAbBitBucketStream.Create(0); LFH := TAbZipLocalFileHeader.Create; {get the item's local file header} ZipArchive.FStream.Seek(Item.RelativeOffset, soBeginning); LFH.LoadFromStream(ZipArchive.FStream); ZipArchive.FStream.Seek(Item.RelativeOffset, soBeginning); {currently a single exception is raised for any LFH error} if (LFH.VersionNeededToExtract <> Item.VersionNeededToExtract) then raise EAbZipInvalidLFH.Create; if (LFH.GeneralPurposeBitFlag <> Item.GeneralPurposeBitFlag) then raise EAbZipInvalidLFH.Create; if (LFH.LastModFileTime <> Item.LastModFileTime) then raise EAbZipInvalidLFH.Create; if (LFH.LastModFileDate <> Item.LastModFileDate) then raise EAbZipInvalidLFH.Create; if (LFH.CRC32 <> Item.CRC32) then raise EAbZipInvalidLFH.Create; if LFH.ExtraField.Get(Ab_Zip64SubfieldID, Pointer(Zip64Field), FieldSize) then begin if (Zip64Field.CompressedSize <> Item.CompressedSize) then raise EAbZipInvalidLFH.Create; if (Zip64Field.UncompressedSize <> Item.UncompressedSize) then raise EAbZipInvalidLFH.Create; end else begin if (LFH.CompressedSize <> Item.CompressedSize) then raise EAbZipInvalidLFH.Create; if (LFH.UncompressedSize <> Item.UncompressedSize) then raise EAbZipInvalidLFH.Create; end; if (LFH.FileName <> Item.RawFileName) then raise EAbZipInvalidLFH.Create; {any CRC errors will raise exception during extraction} AbUnZipToStream(Sender, Item, BitBucket); finally BitBucket.Free; LFH.Free; end; end; { -------------------------------------------------------------------------- } procedure InflateStream( CompressedStream, UnCompressedStream : TStream ); {-Inflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills!} begin Inflate(CompressedStream, UncompressedStream, nil); end; end. ����������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfbase.pas����������������������������������������������0000644�0001750�0000144�00000056315�12014201074�022005� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfBase.pas *} {*********************************************************} {* Deflate base unit *} {*********************************************************} unit AbDfBase; {$I AbDefine.inc} interface uses SysUtils, Classes; type PAbDfLongintList = ^TAbDfLongintList; TAbDfLongintList = array [0..pred(MaxInt div sizeof(longint))] of longint; const dfc_CodeLenCodeLength = 7; dfc_LitDistCodeLength = 15; dfc_MaxCodeLength = 15; const dfc_MaxMatchLen = 258; {lengths are 3..258 for deflate} dfc_MaxMatchLen64 = 64 * 1024; {lengths are 3..65536 for deflate64} const dfc_LitExtraOffset = 257; dfc_LitExtraBits : array [0..30] of byte = (0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16, 99, 99); { note: the last two are required to avoid going beyond the end} { of the array when generating static trees} dfc_DistExtraOffset = 0; dfc_DistExtraBits : array [0..31] of byte = (0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14); { note: the last two are only use for deflate64} dfc_LengthBase : array [0..28] of word = (3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3); { note: the final 3 is correct for deflate64; for symbol 285,} { lengths are stored as (length - 3)} { for deflate it's very wrong, but there's special code in} { the (de)compression code to cater for this} dfc_DistanceBase : array [0..31] of word = (1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153); dfc_CodeLengthIndex : array [0..18] of byte = (16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15); const dfc_CanUseStored = $01; dfc_CanUseStatic = $02; dfc_CanUseDynamic = $04; dfc_UseLazyMatch = $08; dfc_UseDeflate64 = $10; dfc_UseAdler32 = $20; dfc_CanUseHuffman = dfc_CanUseStatic or dfc_CanUseDynamic; dfc_TestOnly = $40000000; type TAbProgressStep = procedure (aPercentDone : integer) of object; {-progress metering of deflate/inflate; abort with AbortProgress} TAbDeflateHelper = class private FAmpleLength : longint; FChainLength : longint; FLogFile : string; FMaxLazy : longint; FOnProgressStep : TAbProgressStep; FOptions : longint; FPartSize : Int64; FSizeCompressed : Int64; FSizeNormal : Int64; FStreamSize : Int64; FWindowSize : longint; FZipOption : AnsiChar; protected procedure dhSetAmpleLength(aValue : longint); procedure dhSetChainLength(aValue : longint); procedure dhSetLogFile(const aValue : string); procedure dhSetMaxLazy(aValue : longint); procedure dhSetOnProgressStep(aValue : TAbProgressStep); procedure dhSetOptions(aValue : longint); procedure dhSetWindowSize(aValue : longint); procedure dhSetZipOption(aValue : AnsiChar); public constructor Create; procedure Assign(aHelper : TAbDeflateHelper); property AmpleLength : longint read FAmpleLength write dhSetAmpleLength; property ChainLength : longint read FChainLength write dhSetChainLength; property LogFile : string read FLogFile write dhSetLogFile; property MaxLazyLength : longint read FMaxLazy write dhSetMaxLazy; property Options : longint read FOptions write dhSetOptions; property PartialSize : Int64 read FPartSize write FPartSize; property PKZipOption : AnsiChar read FZipOption write dhSetZipOption; property StreamSize : Int64 read FStreamSize write FStreamSize; property WindowSize : longint read FWindowSize write dhSetWindowSize; property CompressedSize : Int64 read FSizeCompressed write FSizeCompressed; property NormalSize : Int64 read FSizeNormal write FSizeNormal; property OnProgressStep : TAbProgressStep read FOnProgressStep write dhSetOnProgressStep; end; type TAbLineDelimiter = (ldCRLF, ldLF); TAbLogger = class(TStream) private FBuffer : PAnsiChar; FCurPos : PAnsiChar; FLineDelim : TAbLineDelimiter; FStream : TFileStream; protected function logWriteBuffer : boolean; public constructor Create(const aLogName : string); destructor Destroy; override; function Read(var Buffer; Count : longint) : longint; override; function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; function Write(const Buffer; Count : longint) : longint; override; procedure WriteLine(const S : string); procedure WriteStr(const S : string); property LineDelimiter : TAbLineDelimiter read FLineDelim write FLineDelim; end; type TAbNodeManager = class private FFreeList : pointer; FNodeSize : cardinal; FNodesPerPage : cardinal; FPageHead : pointer; FPageSize : cardinal; protected function nmAllocNewPage : pointer; public constructor Create(aNodeSize : cardinal); destructor Destroy; override; function AllocNode : pointer; function AllocNodeClear : pointer; procedure FreeNode(aNode : pointer); end; {---exception classes---} type EAbAbortProgress = class(Exception); EAbPartSizedInflate = class(Exception); EAbInflatePasswordError = class(Exception); EAbInternalInflateError = class(Exception); EAbInflateError = class(Exception) public constructor Create(const aMsg : string); constructor CreateUnknown(const aMsg : string; const aErrorMsg : string); end; EAbInternalDeflateError = class(Exception); EAbDeflateError = class(Exception) public constructor Create(const aMsg : string); constructor CreateUnknown(const aMsg : string; const aErrorMsg : string); end; {---aborting a process---} procedure AbortProgress; {---calculation of checksums---} procedure AbUpdateAdlerBuffer(var aAdler : longint; var aBuffer; aCount : integer); procedure AbUpdateCRCBuffer(var aCRC : longint; var aBuffer; aCount : integer); implementation uses AbUtils; {===TAbDeflateHelper=================================================} constructor TAbDeflateHelper.Create; begin inherited Create; FAmpleLength := 8; FChainLength := 32; {FLogFile := '';} FMaxLazy := 16; {FOnProgressStep := nil;} FOptions := $F; {FStreamSize := 0;} FWindowSize := 32 * 1024; FZipOption := 'n'; end; {--------} procedure TAbDeflateHelper.Assign(aHelper : TAbDeflateHelper); begin FAmpleLength := aHelper.FAmpleLength; FChainLength := aHelper.FChainLength; FLogFile := aHelper.FLogFile; FMaxLazy := aHelper.FMaxLazy; FOnProgressStep := aHelper.FOnProgressStep; FOptions := aHelper.FOptions; FPartSize := aHelper.FPartSize; FStreamSize := aHelper.FStreamSize; FWindowSize := aHelper.FWindowSize; FZipOption := aHelper.FZipOption; end; {--------} procedure TAbDeflateHelper.dhSetAmpleLength(aValue : longint); begin if (aValue <> AmpleLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FAmpleLength := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetChainLength(aValue : longint); begin if (aValue <> ChainLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FChainLength := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetLogFile(const aValue : string); begin FLogFile := aValue; end; {--------} procedure TAbDeflateHelper.dhSetMaxLazy(aValue : longint); begin if (aValue <> MaxLazyLength) then begin if (aValue <> -1) and (aValue < 4) then aValue := 4; FMaxLazy := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetOnProgressStep(aValue : TAbProgressStep); begin FOnProgressStep := aValue; end; {--------} procedure TAbDeflateHelper.dhSetOptions(aValue : longint); begin if (aValue <> Options) then begin FOptions := aValue; FZipOption := '?'; end; end; {--------} procedure TAbDeflateHelper.dhSetWindowSize(aValue : longint); var NewValue : longint; begin if (aValue <> WindowSize) then begin {calculate the window size rounded to nearest 1024 bytes} NewValue := ((aValue + 1023) div 1024) * 1024; {if the new window size is greater than 32KB...} if (NewValue > 32 * 1024) then {if the Deflate64 option is set, force to 64KB} if ((Options and dfc_UseDeflate64) <> 0) then NewValue := 64 * 1024 {otherwise, force to 32KB} else NewValue := 32 * 1024; {set the new window size} FWindowSize := NewValue; end; end; {--------} procedure TAbDeflateHelper.dhSetZipOption(aValue : AnsiChar); begin {notes: The original Abbrevia code used the following table for setting the equivalent values: Good Lazy Chain UseLazy Option 4 4 4 N s ^ 4 5 8 N | 4 6 32 N f faster 4 4 16 Y slower 8 16 32 Y n | 8 16 128 Y | 8 32 256 Y | 32 128 1024 Y | 32 258 4096 Y x V The new Abbrevia 3 code follows these values to a certain extent. } {force to lower case} if ('A' <= aValue) and (aValue <= 'Z') then aValue := AnsiChar(ord(aValue) + ord('a') - ord('A')); {if the value has changed...} if (aValue <> PKZipOption) then begin {switch on the new value...} case aValue of '0' : {no compression} begin FZipOption := aValue; FOptions := (FOptions and (not $0F)) or dfc_CanUseStored; FAmpleLength := 8; { not actually needed} FChainLength := 32; { not actually needed} FMaxLazy := 16; { not actually needed} end; '2' : {hidden option: Abbrevia 2 compatibility} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 8; FChainLength := 32; FMaxLazy := 16; end; 'f' : {fast compression} begin FZipOption := aValue; FOptions := FOptions or $07; { no lazy matching} FAmpleLength := 4; FChainLength := 32; FMaxLazy := 6; end; 'n' : {normal compression} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 16; FChainLength := 32; FMaxLazy := 24; end; 's' : {super fast compression} begin FZipOption := aValue; FOptions := FOptions or $07; { no lazy matching} FAmpleLength := 4; FChainLength := 4; FMaxLazy := 4; end; 'x' : {maximum compression} begin FZipOption := aValue; FOptions := FOptions or $0F; FAmpleLength := 64;{32;} FChainLength := 4096; FMaxLazy := 258; end; end; end; end; {====================================================================} {===TAbLogger========================================================} const LogBufferSize = 4096; {--------} constructor TAbLogger.Create(const aLogName : string); begin Assert(aLogName <> '', 'TAbLogger.Create: a filename must be provided for the logger'); {create the ancestor} inherited Create; {set the default line terminator} {$IFDEF MSWINDOWS} FLineDelim := ldCRLF; {$ENDIF} {$IFDEF UNIX} FLineDelim := ldLF; {$ENDIF} {create and initialize the buffer} GetMem(FBuffer, LogBufferSize); FCurPos := FBuffer; {create the log file} FStream := TFileStream.Create(aLogName, fmCreate); end; {--------} destructor TAbLogger.Destroy; begin {if there is a buffer ensure that it is flushed before freeing it} if (FBuffer <> nil) then begin if (FCurPos <> FBuffer) then logWriteBuffer; FreeMem(FBuffer, LogBufferSize); end; {free the stream} FStream.Free; {destroy the ancestor} inherited Destroy; end; {--------} function TAbLogger.logWriteBuffer : boolean; var BytesToWrite : longint; BytesWritten : longint; begin BytesToWrite := FCurPos - FBuffer; BytesWritten := FStream.Write(FBuffer^, BytesToWrite); if (BytesWritten = BytesToWrite) then begin Result := true; FCurPos := FBuffer; end else begin Result := false; if (BytesWritten <> 0) then begin Move(FBuffer[BytesWritten], FBuffer^, BytesToWrite - BytesWritten); FCurPos := FBuffer + (BytesToWrite - BytesWritten); end; end; end; {--------} function TAbLogger.Read(var Buffer; Count : longint) : longint; begin Assert(false, 'TAbLogger.Read: loggers are write-only, no reading allowed'); Result := 0; end; {--------} function TAbLogger.Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; begin case Origin of soBeginning : begin end; soCurrent : if (Offset = 0) then begin Result := FStream.Position + (FCurPos - FBuffer); Exit; end; soEnd : if (Offset = 0) then begin Result := FStream.Position + (FCurPos - FBuffer); Exit; end; end; Assert(false, 'TAbLogger.Seek: loggers are write-only, no seeking allowed'); Result := 0; end; {--------} function TAbLogger.Write(const Buffer; Count : longint) : longint; var UserBuf : PAnsiChar; BytesToGo : longint; BytesToWrite : longint; begin {reference the user's buffer as a PChar} UserBuf := @Buffer; {start the counter for the number of bytes written} Result := 0; {if needed, empty the internal buffer into the underlying stream} if (LogBufferSize = FCurPos - FBuffer) then if not logWriteBuffer then Exit; {calculate the number of bytes to copy this time from the user's buffer to the internal buffer} BytesToGo := Count; BytesToWrite := LogBufferSize - (FCurPos - FBuffer); if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy the bytes} Move(UserBuf^, FCurPos^, BytesToWrite); {adjust the counters} inc(FCurPos, BytesToWrite); dec(BytesToGo, BytesToWrite); inc(Result, BytesToWrite); {while there are still more bytes to copy, do so} while (BytesToGo <> 0) do begin {advance the user's buffer} inc(UserBuf, BytesToWrite); {empty the internal buffer into the underlying stream} if not logWriteBuffer then Exit; {calculate the number of bytes to copy this time from the user's buffer to the internal buffer} BytesToWrite := LogBufferSize; if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; {copy the bytes} Move(UserBuf^, FCurPos^, BytesToWrite); {adjust the counters} inc(FCurPos, BytesToWrite); dec(BytesToGo, BytesToWrite); inc(Result, BytesToWrite); end; end; {--------} procedure TAbLogger.WriteLine(const S : string); const cLF : AnsiChar = ^J; cCRLF : array [0..1] of AnsiChar = ^M^J; begin if (length(S) > 0) then Write(S[1], length(S)); case FLineDelim of ldLF : Write(cLF, sizeof(cLF)); ldCRLF : Write(cCRLF, sizeof(cCRLF)); end; end; {--------} procedure TAbLogger.WriteStr(const S : string); begin if (length(S) > 0) then Write(S[1], length(S)); end; {====================================================================} {===Calculate checksums==============================================} procedure AbUpdateAdlerBuffer(var aAdler : longint; var aBuffer; aCount : integer); var S1 : LongWord; S2 : LongWord; i : integer; Buffer : PAnsiChar; BytesToUse : integer; begin {Note: this algorithm will *only* work if the buffer is 4KB or less, which is why we go to such lengths to chop up the user buffer into usable chunks of 4KB. However, for Delphi 3 there is no proper 32-bit longword. Although the additions pose no problems in this situation, the mod operations below (especially for S2) will be signed integer divisions, producing an (invalid) signed result. In this case, the buffer is chopped up into 2KB chunks to avoid any signed problems.} {split the current Adler checksum into its halves} S1 := LongWord(aAdler) and $FFFF; S2 := LongWord(aAdler) shr 16; {reference the user buffer as a PChar: it makes it easier} Buffer := @aBuffer; {while there's still data to checksum...} while (aCount <> 0) do begin {calculate the number of bytes to checksum this time} {$IFDEF HasLongWord} BytesToUse := 4096; {$ELSE} BytesToUse := 2048; {$ENDIF} if (BytesToUse > aCount) then BytesToUse := aCount; {checksum the bytes} for i := 0 to pred(BytesToUse) do begin inc(S1, ord(Buffer^)); inc(S2, S1); inc(Buffer); end; {recalibrate the Adler checksum halves} S1 := S1 mod 65521; S2 := S2 mod 65521; {calculate the number of bytes still to go} dec(aCount, BytesToUse); end; {join the halves to produce the complete Adler checksum} aAdler := longint((S2 shl 16) or S1); end; {--------} procedure AbUpdateCRCBuffer(var aCRC : longint; var aBuffer; aCount : integer); var i : integer; CRC : LongWord; Buffer : PAnsiChar; begin {$R-}{$Q-} {reference the user buffer as a PChar: it makes it easier} Buffer := @aBuffer; {get the current CRC as a local variable, it's faster} CRC := aCRC; {checksum the bytes in the buffer} for i := 0 to pred(aCount) do begin CRC := AbCrc32Table[byte(CRC) xor byte(Buffer^)] xor (CRC shr 8); inc(Buffer); end; {return the new CRC} aCRC := CRC; {$R+}{$Q+} end; {====================================================================} {===EAbInflateError==================================================} constructor EAbInflateError.Create(const aMsg : string); begin inherited Create( 'Abbrevia inflate error, possibly a corrupted compressed stream. ' + '(Internal cause: ' + aMsg + ')'); end; {--------} constructor EAbInflateError.CreateUnknown(const aMsg : string; const aErrorMsg : string); begin inherited Create(aMsg + ': ' + aErrorMsg); end; {====================================================================} {===EAbDeflateError==================================================} constructor EAbDeflateError.Create(const aMsg : string); begin inherited Create( 'Abbrevia deflate error. ' + '(Internal cause: ' + aMsg + ')'); end; {--------} constructor EAbDeflateError.CreateUnknown(const aMsg : string; const aErrorMsg : string); begin inherited Create(aMsg + ': ' + aErrorMsg); end; {====================================================================} {===Node manager=====================================================} const PageSize = 8 * 1024; type PGenericNode = ^TGenericNode; TGenericNode = packed record gnNext : PGenericNode; gnData : record end; end; {--------} constructor TAbNodeManager.Create(aNodeSize : cardinal); const Gran = sizeof(pointer); Mask = not (Gran - 1); begin {create the ancestor} inherited Create; {save the node size rounded to nearest 4 bytes} if (aNodeSize <= sizeof(pointer)) then aNodeSize := sizeof(pointer) else aNodeSize := (aNodeSize + Gran - 1) and Mask; FNodeSize := aNodeSize; {calculate the page size (default 1024 bytes) and the number of nodes per page; if the default page size is not large enough for two or more nodes, force a single node per page} FNodesPerPage := (PageSize - sizeof(pointer)) div aNodeSize; if (FNodesPerPage > 1) then FPageSize := PageSize else begin FNodesPerPage := 1; FPagesize := aNodeSize + sizeof(pointer); end; end; {--------} destructor TAbNodeManager.Destroy; var Temp : pointer; begin {dispose of all the pages, if there are any} while (FPageHead <> nil) do begin Temp := PGenericNode(FPageHead)^.gnNext; FreeMem(FPageHead, FPageSize); FPageHead := Temp; end; {destroy the ancestor} inherited Destroy; end; {--------} function TAbNodeManager.AllocNode : pointer; begin Result := FFreeList; if (Result = nil) then Result := nmAllocNewPage else FFreeList := PGenericNode(Result)^.gnNext; end; {--------} function TAbNodeManager.AllocNodeClear : pointer; begin Result := FFreeList; if (Result = nil) then Result := nmAllocNewPage else FFreeList := PGenericNode(Result)^.gnNext; FillChar(Result^, FNodeSize, 0); end; {--------} procedure TAbNodeManager.FreeNode(aNode : pointer); begin {add the node (if non-nil) to the top of the free list} if (aNode <> nil) then begin PGenericNode(aNode)^.gnNext := FFreeList; FFreeList := aNode; end; end; {--------} function TAbNodeManager.nmAllocNewPage : pointer; var NewPage : PAnsiChar; i : integer; FreeList : pointer; NodeSize : integer; begin {allocate a new page and add it to the front of the page list} GetMem(NewPage, FPageSize); PGenericNode(NewPage)^.gnNext := FPageHead; FPageHead := NewPage; {now split up the new page into nodes and push them all onto the free list; note that the first 4 bytes of the page is a pointer to the next page, so remember to skip over it} inc(NewPage, sizeof(pointer)); FreeList := FFreeList; NodeSize := FNodeSize; for i := 0 to pred(FNodesPerPage) do begin PGenericNode(NewPage)^.gnNext := FreeList; FreeList := NewPage; inc(NewPage, NodeSize); end; {return the top of the list} Result := FreeList; FFreeList := PGenericNode(Result)^.gnNext; end; {====================================================================} {====================================================================} procedure AbortProgress; begin raise EAbAbortProgress.Create('Abort'); end; {====================================================================} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abbrowse.pas����������������������������������������������0000644�0001750�0000144�00000051071�12423755012�022066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBrowse.pas *} {*********************************************************} {* ABBREVIA: Base Browser Component *} {*********************************************************} unit AbBrowse; {$I AbDefine.inc} interface uses Classes, AbBase, AbUtils, AbArcTyp; type IAbProgressMeter = interface ['{4B766704-FD20-40BF-BA40-2EC2DD77B178}'] procedure DoProgress(Progress : Byte); procedure Reset; end; TAbBaseBrowser = class(TAbBaseComponent) public FArchive : TAbArchive; protected {private} FSpanningThreshold : Longint; FItemProgressMeter : IAbProgressMeter; FArchiveProgressMeter : IAbProgressMeter; FBaseDirectory : string; FFileName : string; FLogFile : string; FLogging : Boolean; FOnArchiveProgress : TAbArchiveProgressEvent; FOnArchiveItemProgress : TAbArchiveItemProgressEvent; FOnChange : TNotifyEvent; FOnConfirmProcessItem : TAbArchiveItemConfirmEvent; FOnLoad : TAbArchiveEvent; FOnProcessItemFailure : TAbArchiveItemFailureEvent; FOnRequestImage : TAbRequestImageEvent; FTempDirectory : string; { detected compression type } FArchiveType : TAbArchiveType; FForceType : Boolean; protected {private methods} function GetCount : Integer; function GetItem(Value : Longint) : TAbArchiveItem; function GetSpanned : Boolean; function GetStatus : TAbArchiveStatus; procedure ResetMeters; virtual; procedure SetArchiveProgressMeter(const Value: IAbProgressMeter); procedure SetCompressionType(const Value: TAbArchiveType); procedure SetBaseDirectory(const Value : string); procedure SetItemProgressMeter(const Value: IAbProgressMeter); procedure SetSpanningThreshold(Value : Longint); procedure SetLogFile(const Value : string); procedure SetLogging(Value : Boolean); procedure SetTempDirectory(const Value : string); procedure Loaded; override; procedure Notification(Component: TComponent; Operation: TOperation); override; protected {virtual methods} procedure DoArchiveItemProgress(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); virtual; procedure DoChange; virtual; procedure DoConfirmProcessItem(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean); virtual; procedure DoLoad(Sender : TObject); virtual; procedure DoProcessItemFailure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); virtual; procedure SetOnRequestImage(Value : TAbRequestImageEvent); virtual; procedure InitArchive; virtual; {This method must be defined in descendent classes} procedure SetFileName(const aFileName : string); virtual; abstract; protected {properties} property Archive : TAbArchive read FArchive; property ArchiveProgressMeter : IAbProgressMeter read FArchiveProgressMeter write SetArchiveProgressMeter; property BaseDirectory : string read FBaseDirectory write SetBaseDirectory; property FileName : string read FFileName write SetFileName; property SpanningThreshold : Longint read FSpanningThreshold write SetSpanningThreshold default 0; property ItemProgressMeter : IAbProgressMeter read FItemProgressMeter write SetItemProgressMeter; property LogFile : string read FLogFile write SetLogFile; property Logging : Boolean read FLogging write SetLogging default False; property Spanned : Boolean read GetSpanned; property TempDirectory : string read FTempDirectory write SetTempDirectory; protected {events} property OnArchiveProgress : TAbArchiveProgressEvent read FOnArchiveProgress write FOnArchiveProgress; property OnArchiveItemProgress : TAbArchiveItemProgressEvent read FOnArchiveItemProgress write FOnArchiveItemProgress; property OnConfirmProcessItem : TAbArchiveItemConfirmEvent read FOnConfirmProcessItem write FOnConfirmProcessItem; property OnProcessItemFailure : TAbArchiveItemFailureEvent read FOnProcessItemFailure write FOnProcessItemFailure; property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write SetOnRequestImage; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure ClearTags; {Clear all tags from the archive} function FindItem(aItem : TAbArchiveItem) : Integer; function FindFile(const aFileName : string) : Integer; procedure TagItems(const FileMask : string); {tag all items that match the mask} procedure UnTagItems(const FileMask : string); {clear tags for all items that match the mask} procedure CloseArchive; {closes the archive by setting FileName to ''} procedure OpenArchive(const aFileName : string); {opens the archive} public {properties} property Count : Integer read GetCount; property Items[Index : Integer] : TAbArchiveItem read GetItem; default; property Status : TAbArchiveStatus read GetStatus; property ArchiveType : TAbArchiveType read FArchiveType write SetCompressionType default atUnknown; property ForceType : Boolean read FForceType write FForceType default False; public {events} property OnChange : TNotifyEvent read FOnChange write FOnChange; property OnLoad : TAbArchiveEvent read FOnLoad write FOnLoad; end; function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; overload; function AbDetermineArcType(aStream: TStream) : TAbArchiveType; overload; implementation uses SysUtils, AbExcept, {$IF DEFINED(ExtractCabSupport)} AbCabTyp, {$ENDIF} AbZipTyp, AbTarTyp, AbGzTyp, AbBzip2Typ, AbLzmaTyp, AbXzTyp, DCOSUtils, DCClassesUtf8; { TAbBaseBrowser implementation ======================================= } { -------------------------------------------------------------------------- } constructor TAbBaseBrowser.Create(AOwner : TComponent); begin inherited Create(AOwner); FLogFile := ''; FLogging := False; FSpanningThreshold := 0; FArchiveType := atUnknown; FForceType := False; end; { -------------------------------------------------------------------------- } destructor TAbBaseBrowser.Destroy; begin FArchive.Free; FArchive := nil; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.ClearTags; {Clear all tags from the archive} begin if Assigned(FArchive) then FArchive.ClearTags else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.CloseArchive; {closes the archive by setting FileName to ''} begin if FFileName <> '' then FileName := ''; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoArchiveItemProgress(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FItemProgressMeter) then FItemProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveItemProgress) then FOnArchiveItemProgress(Self, Item, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoArchiveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FArchiveProgressMeter) then FArchiveProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveProgress) then FOnArchiveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoChange; begin if Assigned(FOnChange) then begin FOnChange(Self); end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoConfirmProcessItem(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean); begin Confirm := True; if Assigned(FItemProgressMeter) then FItemProgressMeter.Reset; if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(Self, Item, ProcessType, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoLoad(Sender : TObject); begin if Assigned(FOnLoad) then FOnLoad(Self); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.DoProcessItemFailure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); begin if Assigned(FOnProcessItemFailure) then FOnProcessItemFailure(Self, Item, ProcessType, ErrorClass, ErrorCode); end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.FindItem(aItem : TAbArchiveItem) : Integer; begin if Assigned(FArchive) then Result := FArchive.FindItem(aItem) else Result := -1; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.FindFile(const aFileName : string) : Integer; begin if Assigned(FArchive) then Result := FArchive.FindFile(aFileName) else Result := -1; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetSpanned : Boolean; begin if Assigned(FArchive) then Result := FArchive.Spanned else Result := False; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetStatus : TAbArchiveStatus; begin if Assigned(FArchive) then Result := FArchive.Status else Result := asInvalid; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetCount : Integer; begin if Assigned(FArchive) then Result := FArchive.Count else Result := 0; end; { -------------------------------------------------------------------------- } function TAbBaseBrowser.GetItem(Value : Longint) : TAbArchiveItem; begin if Assigned(FArchive) then Result := FArchive.ItemList[Value] else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.InitArchive; begin ResetMeters; if Assigned(FArchive) then begin {properties} FArchive.SpanningThreshold := FSpanningThreshold; FArchive.LogFile := FLogFile; FArchive.Logging := FLogging; FArchive.TempDirectory := FTempDirectory; SetBaseDirectory(FBaseDirectory); {events} FArchive.OnArchiveProgress := DoArchiveProgress; FArchive.OnArchiveItemProgress := DoArchiveItemProgress; FArchive.OnConfirmProcessItem := DoConfirmProcessItem; FArchive.OnLoad := DoLoad; FArchive.OnProcessItemFailure := DoProcessItemFailure; FArchive.OnRequestImage := FOnRequestImage; end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.Loaded; begin inherited Loaded; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.Notification(Component: TComponent; Operation: TOperation); begin inherited Notification(Component, Operation); if (Operation = opRemove) then begin if Assigned(ItemProgressMeter) and Component.IsImplementorOf(ItemProgressMeter) then ItemProgressMeter := nil; if Assigned(ArchiveProgressMeter) and Component.IsImplementorOf(ArchiveProgressMeter) then ArchiveProgressMeter := nil; end; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.OpenArchive(const aFileName : string); {opens the archive} begin FileName := AFileName; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.ResetMeters; begin if Assigned(FArchiveProgressMeter) then FArchiveProgressMeter.Reset; if Assigned(FItemProgressMeter) then FItemProgressMeter.Reset; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetBaseDirectory(const Value : string); begin if Assigned(FArchive) then begin FArchive.BaseDirectory := Value; FBaseDirectory := FArchive.BaseDirectory; end else FBaseDirectory := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetSpanningThreshold(Value : Longint); begin FSpanningThreshold := Value; if Assigned(FArchive) then FArchive.SpanningThreshold := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetLogFile(const Value : string); begin FLogFile := Value; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then FArchive.LogFile := Value; SetLogging(Value <> ''); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetLogging(Value : Boolean); begin FLogging := Value; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then FArchive.Logging:= Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetOnRequestImage(Value : TAbRequestImageEvent); begin FOnRequestImage := Value; if Assigned(FArchive) then FArchive.OnRequestImage := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetTempDirectory(const Value : string); begin FTempDirectory := Value; if Assigned(FArchive) then FArchive.TempDirectory := Value; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.TagItems(const FileMask : string); {tag all items that match the mask} begin if Assigned(FArchive) then FArchive.TagItems(FileMask) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.UnTagItems(const FileMask : string); {clear tags for all items that match the mask} begin if Assigned(FArchive) then FArchive.UnTagItems(FileMask) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetCompressionType(const Value: TAbArchiveType); begin if not Assigned(FArchive) or (Status <> asInvalid) then FArchiveType := Value else raise EAbArchiveBusy.Create; end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetArchiveProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FArchiveProgressMeter, opRemove); FArchiveProgressMeter := Value; ReferenceInterface(FArchiveProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } procedure TAbBaseBrowser.SetItemProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FItemProgressMeter, opRemove); FItemProgressMeter := Value; ReferenceInterface(FItemProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; var Ext : string; FS : TStream; begin Result := AssertType; if Result = atUnknown then begin { Guess archive type based on it's extension } Ext := UpperCase(ExtractFileExt(FN)); if (Ext = '.ZIP') or (Ext = '.JAR') then Result := atZip else if (Ext = '.EXE') then Result := atSelfExtZip else if (Ext = '.TAR') then Result := atTar else if (Ext = '.GZ') then Result := atGzip else if (Ext = '.TGZ') then Result := atGzippedTar else if (Ext = '.CAB') then Result := atCab else if (Ext = '.BZ2') then Result := atBzip2 else if (Ext = '.TBZ') then Result := atBzippedTar else if (Ext = '.XZ') then Result := atXz else if (Ext = '.TXZ') then Result := atXzippedTar else if (Ext = '.LZMA') then Result := atLzma else if (Ext = '.TLZ') then Result := atLzmaTar; end; {$IF NOT DEFINED(ExtractCabSupport)} if Result = atCab then Result := atUnknown; {$ENDIF} if mbFileExists(FN) and (AbFileGetSize(FN) > 0) then begin { If the file doesn't exist (or is empty) presume to make one, otherwise guess or verify the contents } try FS := TFileStreamEx.Create(FN, fmOpenRead or fmShareDenyNone); try if Result <> atUnknown then begin case Result of atZip : begin Result := VerifyZip(FS); end; atSelfExtZip : begin Result := VerifySelfExtracting(FS); end; atTar : begin Result := VerifyTar(FS); end; atGzip, atGzippedTar: begin Result := VerifyGzip(FS); end; {$IF DEFINED(ExtractCabSupport)} atCab : begin Result := VerifyCab(FS); end; {$ENDIF} atBzip2, atBzippedTar: begin Result := VerifyBzip2(FS); end; atXz, atXzippedTar: begin Result := VerifyXz(FS); end; atLzma, atLzmaTar: begin Result := VerifyLzma(FS); end; end; end; if Result = atUnknown then Result := AbDetermineArcType(FS) finally FS.Free; end; except // Skip end; end; end; { -------------------------------------------------------------------------- } function AbDetermineArcType(aStream: TStream): TAbArchiveType; begin { VerifyZip returns true for self-extracting zips too, so test those first } Result := VerifySelfExtracting(aStream); { VerifyZip returns true for example when ZIP file is stored in a TAR archive, so test it first } if Result = atUnknown then Result := VerifyTar(aStream); if Result = atUnknown then Result := VerifyZip(aStream); if Result = atUnknown then Result := VerifyGzip(aStream); if Result = atUnknown then Result := VerifyBzip2(aStream); {$IF DEFINED(ExtractCabSupport)} if Result = atUnknown then Result := VerifyCab(aStream); {$ENDIF} end; { -------------------------------------------------------------------------- } end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abgztyp.pas�����������������������������������������������0000644�0001750�0000144�00000107753�12434110142�021742� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbGzTyp.pas *} {*********************************************************} {* ABBREVIA: TAbGzipArchive, TAbGzipItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with GZip files *} {* See: RFC 1952 *} {* "GZIP file format specification version 4.3" *} {* for more information on GZip *} {* See "algorithm.doc" in Gzip source and "format.txt" *} {* on gzip.org for differences from RFC *} {*********************************************************} unit AbGzTyp; {$I AbDefine.inc} interface uses Classes, AbUtils, AbArcTyp, AbTarTyp; type { pre-defined "operating system" (really more FILE system) types for the Gzip header } TAbGzFileSystem = (osFat, osAmiga, osVMS, osUnix, osVM_CMS, osAtariTOS, osHPFS, osMacintosh, osZSystem, osCP_M, osTOPS20, osNTFS, osQDOS, osAcornRISCOS, osVFAT, osMVS, osBeOS, osTandem, osTHEOS, osUnknown, osUndefined); type PAbGzHeader = ^TAbGzHeader; TAbGzHeader = packed record { SizeOf(TGzHeader) = 10} ID1 : Byte; { ID Byte, should always be $1F} ID2 : Byte; { ID Byte, should always be $8B} CompMethod : Byte; { compression method used} { 0..7 reserved, 8 = deflate, others undefined as of this writing (4/27/2001)} Flags : Byte; { misc flags} { Bit 0: FTEXT compressed file contains text, can be used for} { cross platform line termination translation} { Bit 1: FCONTINUATION file is a continuation of a multi-part gzip file} { RFC 1952 says this is the header CRC16 flag, but gzip} { reserves it and won't extract the file if this is set} { header data includes part number after header record} { Bit 2: FEXTRA header data contains Extra Data, starts after part} { number (if any)} { Bit 3: FNAME header data contains FileName, null terminated} { string starting immediately after Extra Data (if any)} { RFC 1952 says this is ISO 8859-1 encoded, but gzip} { always uses the system encoding} { Bit 4: FCOMMENT header data contains Comment, null terminated string} { starting immediately after FileName (if any)} { Bit 5: FENCRYPTED file is encrypted using zip-1.9 encryption } { header data contains a 12-byte encryption header } { starting immediately after Comment. Documented in} { "algorithm.doc", but unsupported in gzip} { Bits 6..7 are undefined and reserved as of this writing (8/25/2009)} ModTime : LongInt; { File Modification (Creation) time,} { UNIX cdate format} XtraFlags : Byte; { additional flags} { XtraFlags = 2 -- Deflate compressor used maximum compression algorithm} { XtraFlags = 4 -- Deflate compressor used fastest algorithm} OS : Byte; { Operating system that created file,} { see GZOsToStr routine for values} end; TAbGzTailRec = packed record CRC32 : LongInt; { crc for uncompressed data } ISize : LongWord; { size of uncompressed data } end; TAbGzExtraFieldSubID = array[0..1] of AnsiChar; type TAbGzipExtraField = class(TAbExtraField) private FGZHeader : PAbGzHeader; function GetID(aIndex : Integer): TAbGzExtraFieldSubID; protected procedure Changed; override; public constructor Create(aGZHeader : PAbGzHeader); procedure Delete(aID : TAbGzExtraFieldSubID); function Get(aID : TAbGzExtraFieldSubID; out aData : Pointer; out aDataSize : Word) : Boolean; procedure Put(aID : TAbGzExtraFieldSubID; const aData; aDataSize : Word); public property IDs[aIndex : Integer]: TAbGzExtraFieldSubID read GetID; end; TAbGzipItem = class(TAbArchiveItem) protected {private} FGZHeader : TAbGzHeader; FExtraField : TAbGzipExtraField; FFileComment : AnsiString; FRawFileName : AnsiString; protected function GetFileSystem: TAbGzFileSystem; function GetHasExtraField: Boolean; function GetHasFileComment: Boolean; function GetHasFileName: Boolean; function GetIsText: Boolean; procedure SetFileComment(const Value : AnsiString); procedure SetFileSystem(const Value: TAbGzFileSystem); procedure SetIsText(const Value: Boolean); function GetExternalFileAttributes : LongWord; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; function GetNativeLastModFileTime: Longint; override; procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string); override; procedure SetIsEncrypted(Value : Boolean); override; procedure SetLastModFileDate(const Value : Word); override; procedure SetLastModFileTime(const Value : Word); override; procedure SetLastModTimeAsDateTime(const Value: TDateTime); override; procedure SaveGzHeaderToStream(AStream : TStream); procedure LoadGzHeaderFromStream(AStream : TStream); public property CompressionMethod : Byte read FGZHeader.CompMethod; property ExtraFlags : Byte {Default: 2} read FGZHeader.XtraFlags write FGZHeader.XtraFlags; property Flags : Byte read FGZHeader.Flags; property FileComment : AnsiString read FFileComment write SetFileComment; property FileSystem : TAbGzFileSystem {Default: osFat (Windows); osUnix (Linux)} read GetFileSystem write SetFileSystem; property ExtraField : TAbGzipExtraField read FExtraField; property IsEncrypted : Boolean read GetIsEncrypted; property HasExtraField : Boolean read GetHasExtraField; property HasFileName : Boolean read GetHasFileName; property HasFileComment : Boolean read GetHasFileComment; property IsText : Boolean read GetIsText write SetIsText; property GZHeader : TAbGzHeader read FGZHeader; constructor Create; destructor Destroy; override; end; TAbGzipStreamHelper = class(TAbArchiveStreamHelper) private function GetGzCRC: LongInt; function GetFileSize: LongInt; protected {private} FItem : TAbGzipItem; FTail : TAbGzTailRec; public constructor Create(AStream : TStream); destructor Destroy; override; procedure ExtractItemData(AStream : TStream); override; function FindFirstItem : Boolean; override; function FindNextItem : Boolean; override; function SeekItem(Index : Integer): Boolean; override; procedure SeekToItemData; procedure WriteArchiveHeader; override; procedure WriteArchiveItem(AStream : TStream); override; procedure WriteArchiveTail; override; function GetItemCount : Integer; override; procedure ReadHeader; override; procedure ReadTail; override; property CRC : LongInt read GetGzCRC; property FileSize : LongInt read GetFileSize; property TailCRC : LongInt read FTail.CRC32; property TailSize : LongWord read FTail.ISize; end; TAbGzipArchiveState = (gsGzip, gsTar); TAbGzipArchive = class(TAbTarArchive) private FGZStream : TStream; { stream for GZip file} FGZItem : TAbArchiveList; { item in Gzip (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbGzipArchiveState; FIsGzippedTar : Boolean; procedure SetTarAutoHandle(const Value: Boolean); function GetIsGzippedTar: Boolean; procedure SwapToGzip; procedure SwapToTar; protected function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function FixName(const Value : string) : string; override; function GetSupportsEmptyFolders : Boolean; override; function GetItem(Index: Integer): TAbGzipItem; procedure PutItem(Index: Integer; const Value: TAbGzipItem); public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsGzippedTar : Boolean read GetIsGzippedTar write FIsGzippedTar; property Items[Index : Integer] : TAbGzipItem read GetItem write PutItem; default; end; function VerifyGZip(Strm : TStream) : TAbArchiveType; function GZOsToStr(OS: Byte) : string; implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} SysUtils, AbBitBkt, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, AbVMStrm, DCOSUtils, DCClassesUtf8, DCConvertEncoding; const { Header Signature Values} AB_GZ_HDR_ID1 = $1F; AB_GZ_HDR_ID2 = $8B; { Test bits for TGzHeader.Flags field } AB_GZ_FLAG_FTEXT = $01; AB_GZ_FLAG_FCONTINUATION = $02; AB_GZ_FLAG_FEXTRA = $04; AB_GZ_FLAG_FNAME = $08; AB_GZ_FLAG_FCOMMENT = $10; AB_GZ_FLAG_FENCRYPTED = $20; AB_GZ_UNSUPPORTED_FLAGS = $E2; { GZip OS source flags } AB_GZ_OS_ID_FAT = 0; AB_GZ_OS_ID_Amiga = 1; AB_GZ_OS_ID_VMS = 2; AB_GZ_OS_ID_Unix = 3; AB_GZ_OS_ID_VM_CMS = 4; AB_GZ_OS_ID_AtariTOS = 5; AB_GZ_OS_ID_HPFS = 6; AB_GZ_OS_ID_Macintosh = 7; AB_GZ_OS_ID_Z_System = 8; AB_GZ_OS_ID_CP_M = 9; AB_GZ_OS_ID_TOPS20 = 10; AB_GZ_OS_ID_NTFS = 11; AB_GZ_OS_ID_QDOS = 12; AB_GZ_OS_ID_AcornRISCOS = 13; AB_GZ_OS_ID_VFAT = 14; AB_GZ_OS_ID_MVS = 15; AB_GZ_OS_ID_BEOS = 16; AB_GZ_OS_ID_TANDEM = 17; AB_GZ_OS_ID_THEOS = 18; AB_GZ_OS_ID_unknown = 255; function GZOsToStr(OS: Byte) : string; { Return a descriptive string for TGzHeader.OS field } begin case OS of AB_GZ_OS_ID_FAT : Result := AbGzOsFat; AB_GZ_OS_ID_Amiga : Result := AbGzOsAmiga; AB_GZ_OS_ID_VMS : Result := AbGzOsVMS; AB_GZ_OS_ID_Unix : Result := AbGzOsUnix; AB_GZ_OS_ID_VM_CMS : Result := AbGzOsVM_CMS; AB_GZ_OS_ID_AtariTOS : Result := AbGzOsAtari; AB_GZ_OS_ID_HPFS : Result := AbGzOsHPFS; AB_GZ_OS_ID_Macintosh : Result := AbGzOsMacintosh; AB_GZ_OS_ID_Z_System : Result := AbGzOsZ_System; AB_GZ_OS_ID_CP_M : Result := AbGzOsCP_M; AB_GZ_OS_ID_TOPS20 : Result := AbGzOsTOPS_20; AB_GZ_OS_ID_NTFS : Result := AbGzOsNTFS; AB_GZ_OS_ID_QDOS : Result := AbGzOsQDOS; AB_GZ_OS_ID_AcornRISCOS : Result := AbGzOsAcornRISCOS; AB_GZ_OS_ID_VFAT : Result := AbGzOsVFAT; AB_GZ_OS_ID_MVS : Result := AbGzOsMVS; AB_GZ_OS_ID_BEOS : Result := AbGzOsBeOS; AB_GZ_OS_ID_TANDEM : Result := AbGzOsTandem; AB_GZ_OS_ID_THEOS : Result := AbGzOsTHEOS; AB_GZ_OS_ID_unknown : Result := AbGzOsunknown; else Result := AbGzOsUndefined; end; end; function VerifyHeader(const Header : TAbGzHeader) : Boolean; begin { check id fields and if deflated (only handle deflate anyway)} Result := (Header.ID1 = AB_GZ_HDR_ID1) and (Header.ID2 = AB_GZ_HDR_ID2) and (Header.CompMethod = 8 {deflate}); end; function VerifyGZip(Strm : TStream) : TAbArchiveType; var GHlp : TAbGzipStreamHelper; Hlpr : TAbDeflateHelper; PartialTarData : TMemoryStream; CurPos : Int64; begin Result := atUnknown; CurPos := Strm.Position; try Strm.Seek(0, soFromBeginning); {prepare for the try..finally} Hlpr := nil; PartialTarData := nil; GHlp := TAbGzipStreamHelper.Create(Strm); try {create the stream helper and read the item header} GHlp.ReadHeader; { check id fields and if deflated (only handle deflate anyway)} if VerifyHeader(GHlp.FItem.FGZHeader) then begin Result := atGZip; { provisional } { check if is actually a Gzipped Tar } { partial extract contents, verify vs. Tar } PartialTarData := TMemoryStream.Create; GHlp.SeekToItemData; Hlpr := TAbDeflateHelper.Create; Hlpr.PartialSize := AB_TAR_RECORDSIZE * 4; PartialTarData.SetSize(Hlpr.PartialSize); Inflate(Strm, PartialTarData, Hlpr); {set to beginning of extracted data} PartialTarData.Position := 0; if (VerifyTar(PartialTarData) = atTar) then Result := atGZippedTar; end; finally GHlp.Free; Hlpr.Free; PartialTarData.Free; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; end; { TAbGzipExtraField } constructor TAbGzipExtraField.Create(aGZHeader : PAbGzHeader); begin inherited Create; FGZHeader := aGZHeader; end; procedure TAbGzipExtraField.Changed; begin if Buffer = nil then FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FEXTRA else FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FEXTRA; end; procedure TAbGzipExtraField.Delete(aID : TAbGzExtraFieldSubID); begin inherited Delete(Word(aID)); end; function TAbGzipExtraField.GetID(aIndex : Integer): TAbGzExtraFieldSubID; begin Result := TAbGzExtraFieldSubID(inherited IDs[aIndex]); end; function TAbGzipExtraField.Get(aID : TAbGzExtraFieldSubID; out aData : Pointer; out aDataSize : Word) : Boolean; begin Result := inherited Get(Word(aID), aData, aDataSize); end; procedure TAbGzipExtraField.Put(aID : TAbGzExtraFieldSubID; const aData; aDataSize : Word); begin inherited Put(Word(aID), aData, aDataSize); end; { TAbGzipStreamHelper } constructor TAbGzipStreamHelper.Create(AStream : TStream); begin inherited Create(AStream); FItem := TAbGzipItem.Create; end; destructor TAbGzipStreamHelper.Destroy; begin FItem.Free; inherited; end; function ReadCStringInStream(AStream: TStream): AnsiString; { locate next instance of a null character in a stream leaves stream positioned just past that, or at end of stream if not found or null is last byte in stream. Result is the entire read string. } const BuffSiz = 1024; var Buff : array [0..BuffSiz-1] of AnsiChar; Len, DataRead : LongInt; begin { basically what this is supposed to do is...} { repeat AStream.Read(C, 1); Result := Result + C; until (AStream.Position = AStream.Size) or (C = #0); } Result := ''; repeat DataRead := AStream.Read(Buff, BuffSiz - 1); Buff[DataRead] := #0; Len := StrLen(Buff); if Len > 0 then begin SetLength(Result, Length(Result) + Len); Move(Buff, Result[Length(Result) - Len + 1], Len); end; if Len < DataRead then begin AStream.Seek(Len - DataRead + 1, soFromCurrent); Break; end; until DataRead = 0; end; procedure TAbGzipStreamHelper.SeekToItemData; {find end of header data, including FileName etc.} begin {** Seek to Compressed Data **} FStream.Seek(0, soFromBeginning); FItem.LoadGzHeaderFromStream(FStream); end; procedure TAbGzipStreamHelper.ExtractItemData(AStream: TStream); var Helper : TAbDeflateHelper; begin Helper := TAbDeflateHelper.Create; try SeekToItemData; if (AStream is TAbBitBucketStream) then Helper.Options := Helper.Options or dfc_TestOnly; FItem.CRC32 := Inflate(FStream, AStream, Helper); FItem.UncompressedSize := AStream.Size{Helper.NormalSize}; finally Helper.Free; end; end; function TAbGzipStreamHelper.FindFirstItem: Boolean; var GZH : TAbGzHeader; DataRead : Integer; begin Result := False; FStream.Seek(0, soFromBeginning); DataRead := FStream.Read(GZH, SizeOf(TAbGzHeader)); if (DataRead = SizeOf(TAbGzHeader)) and VerifyHeader(GZH) then begin FItem.FGZHeader := GZH; Result := True; end; FStream.Seek(0, soFromBeginning); end; function TAbGzipStreamHelper.FindNextItem: Boolean; begin { only one item in a GZip } Result := False; end; function TAbGzipStreamHelper.SeekItem(Index: Integer): Boolean; begin if Index > 0 then Result := False else Result := FindFirstItem; end; procedure TAbGzipStreamHelper.WriteArchiveHeader; begin FItem.SaveGzHeaderToStream(FStream); end; procedure TAbGzipStreamHelper.WriteArchiveItem(AStream: TStream); var Helper : TAbDeflateHelper; begin Helper := TAbDeflateHelper.Create; try FItem.CRC32 := Deflate(AStream, FStream, Helper); FItem.UncompressedSize := AStream.Size; finally Helper.Free; end; end; procedure TAbGzipStreamHelper.WriteArchiveTail; var Tail : TAbGzTailRec; begin Tail.CRC32 := FItem.CRC32; Tail.ISize := FItem.UncompressedSize; FStream.Write(Tail, SizeOf(TAbGzTailRec)); end; function TAbGzipStreamHelper.GetItemCount: Integer; begin { only one item in a gzip } Result := 1; end; procedure TAbGzipStreamHelper.ReadHeader; begin FItem.LoadGzHeaderFromStream(FStream); end; procedure TAbGzipStreamHelper.ReadTail; begin FStream.Read(FTail, SizeOf(TAbGzTailRec)); end; function TAbGzipStreamHelper.GetGzCRC: LongInt; begin Result := FItem.CRC32; end; function TAbGzipStreamHelper.GetFileSize: LongInt; begin Result := FItem.UncompressedSize; end; { TAbGzipItem } constructor TAbGzipItem.Create; begin inherited Create; { default ID fields } FGzHeader.ID1 := AB_GZ_HDR_ID1; FGzHeader.ID2 := AB_GZ_HDR_ID2; { compression method } FGzHeader.CompMethod := 8; { deflate } { Maxium Compression } FGzHeader.XtraFlags := 2; FFileName := ''; FFileComment := ''; FExtraField := TAbGzipExtraField.Create(@FGzHeader); { source OS ID } {$IFDEF LINUX } {assume EXT2 system } FGzHeader.OS := AB_GZ_OS_ID_Unix; {$ENDIF LINUX } {$IFDEF MSWINDOWS } {assume FAT system } FGzHeader.OS := AB_GZ_OS_ID_FAT; {$ENDIF MSWINDOWS } end; destructor TAbGzipItem.Destroy; begin FExtraField.Free; inherited; end; function TAbGzipItem.GetExternalFileAttributes: LongWord; begin { GZip has no provision for storing attributes } Result := 0; end; function TAbGzipItem.GetFileSystem: TAbGzFileSystem; begin case FGzHeader.OS of 0..18: Result := TAbGzFileSystem(FGzHeader.OS); 255: Result := osUnknown; else Result := osUndefined; end; { case } end; function TAbGzipItem.GetIsEncrypted: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FENCRYPTED) = AB_GZ_FLAG_FENCRYPTED; end; function TAbGzipItem.GetHasExtraField: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FEXTRA) = AB_GZ_FLAG_FEXTRA; end; function TAbGzipItem.GetHasFileComment: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FCOMMENT) = AB_GZ_FLAG_FCOMMENT; end; function TAbGzipItem.GetHasFileName: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FNAME) = AB_GZ_FLAG_FNAME; end; function TAbGzipItem.GetIsText: Boolean; begin Result := (FGZHeader.Flags and AB_GZ_FLAG_FTEXT) = AB_GZ_FLAG_FTEXT; end; function TAbGzipItem.GetLastModFileDate: Word; begin { convert to local DOS file Date } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Hi; end; function TAbGzipItem.GetLastModFileTime: Word; begin { convert to local DOS file Time } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Lo; end; function TAbGzipItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbUnixTimeToLocalDateTime(FGZHeader.ModTime); end; function TAbGzipItem.GetNativeLastModFileTime: Longint; {$IFDEF MSWINDOWS} var DateTime: TDateTime; {$ENDIF} begin Result := FGZHeader.ModTime; {$IFDEF MSWINDOWS} DateTime := AbUnixTimeToLocalDateTime(Result); Result := AbDateTimeToDosFileDate(DateTime); {$ENDIF} end; procedure TAbGzipItem.LoadGzHeaderFromStream(AStream: TStream); var LenW : Word; begin AStream.Read(FGzHeader, SizeOf(TAbGzHeader)); if not VerifyHeader(FGzHeader) then Exit; { Skip part number, if any } if (FGzHeader.Flags and AB_GZ_FLAG_FCONTINUATION) = AB_GZ_FLAG_FCONTINUATION then AStream.Seek(SizeOf(Word), soCurrent); if HasExtraField then begin { get length of extra data } AStream.Read(LenW, SizeOf(Word)); FExtraField.LoadFromStream(AStream, LenW); end else FExtraField.Clear; { Get Filename, if any } if HasFileName then begin FRawFileName := ReadCStringInStream(AStream); FFileName := CeRawToUtf8(FRawFileName) end else FFileName := 'unknown'; { any comment present? } if HasFileComment then FFileComment := ReadCStringInStream(AStream) else FFileComment := ''; {Assert: stream should now be located at start of compressed data } {If file was compressed with 3.3 spec this will be invalid so use with care} CompressedSize := AStream.Size - AStream.Position - SizeOf(TAbGzTailRec); FDiskFileName := FileName; AbUnfixName(FDiskFileName); Action := aaNone; Tagged := False; end; procedure TAbGzipItem.SaveGzHeaderToStream(AStream: TStream); var LenW : Word; begin { default ID fields } FGzHeader.ID1 := AB_GZ_HDR_ID1; FGzHeader.ID2 := AB_GZ_HDR_ID2; { compression method } FGzHeader.CompMethod := 8; { deflate } { reset unsupported flags } FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_UNSUPPORTED_FLAGS; { main header data } AStream.Write(FGzHeader, SizeOf(TAbGzHeader)); { add extra field if any } if HasExtraField then begin LenW := Length(FExtraField.Buffer); AStream.Write(LenW, SizeOf(LenW)); if LenW > 0 then AStream.Write(FExtraField.Buffer[0], LenW); end; { add filename if any (and include final #0 from string) } if HasFileName then AStream.Write(FRawFileName[1], Length(FRawFileName) + 1); { add file comment if any (and include final #0 from string) } if HasFileComment then AStream.Write(FFileComment[1], Length(FFileComment) + 1); end; procedure TAbGzipItem.SetExternalFileAttributes(Value: LongWord); begin { do nothing } end; procedure TAbGzipItem.SetFileComment(const Value: AnsiString); begin FFileComment := Value; if FFileComment <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FCOMMENT else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FCOMMENT; end; procedure TAbGzipItem.SetFileName(const Value: string); begin FFileName := Value; FRawFileName := CeUtf8ToSys(Value); if Value <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FNAME else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FNAME; end; procedure TAbGzipItem.SetFileSystem(const Value: TAbGzFileSystem); begin if Value = osUnknown then FGzHeader.OS := 255 else FGzHeader.OS := Ord(Value); end; procedure TAbGzipItem.SetIsEncrypted(Value: Boolean); begin { do nothing } end; procedure TAbGzipItem.SetIsText(const Value: Boolean); begin if Value then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FTEXT else FGzHeader.Flags := FGzHeader.Flags and not AB_GZ_FLAG_FTEXT; end; procedure TAbGzipItem.SetLastModFileDate(const Value: Word); begin { replace date, keep existing time } LastModTimeAsDateTime := EncodeDate( Value shr 9 + 1980, Value shr 5 and 15, Value and 31) + Frac(LastModTimeAsDateTime); end; procedure TAbGzipItem.SetLastModFileTime(const Value: Word); begin { keep current date, replace time } LastModTimeAsDateTime := Trunc(LastModTimeAsDateTime) + EncodeTime( Value shr 11, Value shr 5 and 63, Value and 31 shl 1, 0); end; procedure TAbGzipItem.SetLastModTimeAsDateTime(const Value: TDateTime); begin FGZHeader.ModTime := AbLocalDateTimeToUnixTime(Value); end; { TAbGzipArchive } constructor TAbGzipArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsGzip; FGZStream := FStream; FGZItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; procedure TAbGzipArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; procedure TAbGzipArchive.SwapToGzip; begin FStream := FGzStream; FItemList := FGzItem; FState := gsGzip; end; function TAbGzipArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var GzItem : TAbGzipItem; FullSourceFileName, FullArchiveFileName: String; begin if IsGZippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToGzip; GzItem := TAbGzipItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); GzItem.FileName := FullArchiveFileName; GzItem.DiskFileName := FullSourceFileName; Result := GzItem; except Result := nil; raise; end; end; end; destructor TAbGzipArchive.Destroy; begin SwapToGzip; FTarList.Free; FTarStream.Free; inherited Destroy; end; procedure TAbGzipArchive.ExtractItemAt(Index: Integer; const UseName: string); var OutStream : TStream; CurItem : TAbGzipItem; begin if IsGZippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, UseName); end else begin SwapToGzip; if Index > 0 then Index := 0; { only one item in a GZip} CurItem := TAbGzipItem(ItemList[Index]); OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); AbSetFileAttr(UseName, CurItem.NativeFileAttributes); except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(UseName) then mbDeleteFile(UseName); raise; end else begin if mbFileExists(UseName) then mbDeleteFile(UseName); raise; end; end; end; end; procedure TAbGzipArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); var GzHelp : TAbGzipStreamHelper; begin if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToGzip; { note Index ignored as there's only one item in a GZip } GZHelp := TAbGzipStreamHelper.Create(FGzStream); try { read GZip Header } GzHelp.ReadHeader; { extract copy data from GZip} GzHelp.ExtractItemData(aStream); { Get validation data } GzHelp.ReadTail; {$IFDEF STRICTGZIP} { According to http://www.gzip.org/zlib/rfc1952.txt A compliant gzip compressor should calculate and set the CRC32 and ISIZE. However, a compliant decompressor should not check these values. If you want to check the the values of the CRC32 and ISIZE in a GZIP file when decompressing enable the STRICTGZIP define contained in AbDefine.inc } { validate against CRC } if GzHelp.FItem.Crc32 <> GzHelp.TailCRC then raise EAbGzipBadCRC.Create; { validate against file size } if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then raise EAbGzipBadFileSize.Create; {$ENDIF} finally GzHelp.Free; end; end; end; function TAbGzipArchive.FixName(const Value: string): string; { fix up fileaname for storage } begin if FState = gsTar then Result := inherited FixName( Value ) else begin {GZip files Always strip the file path} StoreOptions := StoreOptions + [soStripDrive, soStripPath]; Result := ''; if Value <> '' then Result := ExtractFileName(Value); end; end; function TAbGzipArchive.GetIsGzippedTar: Boolean; begin Result := FIsGzippedTar; end; function TAbGzipArchive.GetItem(Index: Integer): TAbGzipItem; begin Result := nil; if Index = 0 then Result := TAbGzipItem(FItemList.Items[Index]); end; function TAbGzipArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsGzippedTar and TarAutoHandle; end; procedure TAbGzipArchive.LoadArchive; var GzHelp : TAbGzipStreamHelper; Item : TAbGzipItem; Abort : Boolean; begin SwapToGzip; if FGzStream.Size > 0 then begin GzHelp := TAbGzipStreamHelper.Create(FGzStream); try if GzHelp.FindFirstItem then begin Item := TAbGzipItem.Create; Item.LoadGzHeaderFromStream(FGzStream); FGzStream.Seek(-SizeOf(TAbGzTailRec), soFromEnd); GZHelp.ReadTail; Item.CRC32 := GZHelp.TailCRC; Item.UncompressedSize := GZHelp.TailSize; Item.Action := aaNone; FGZItem.Add(Item); if IsGzippedTar and TarAutoHandle then begin { extract Tar and set stream up } GzHelp.SeekToItemData; GzHelp.ExtractItemData(FTarStream); SwapToTar; inherited LoadArchive; end; end; DoArchiveProgress(100, Abort); FIsDirty := False; finally { Clean Up } GzHelp.Free; end; end; end; procedure TAbGzipArchive.PutItem(Index: Integer; const Value: TAbGzipItem); begin if Index = 0 then FItemList.Items[Index] := Value; end; procedure TAbGzipArchive.SaveArchive; var InGzHelp, OutGzHelp : TAbGzipStreamHelper; Abort : Boolean; i : Integer; NewStream : TAbVirtualMemoryStream; UncompressedStream : TStream; CurItem : TAbGzipItem; begin {prepare for the try..finally} OutGzHelp := nil; NewStream := nil; try InGzHelp := TAbGzipStreamHelper.Create(FGzStream); try {init new archive stream} NewStream := TAbVirtualMemoryStream.Create; OutGzHelp := TAbGzipStreamHelper.Create(NewStream); { create helper } NewStream.SwapFileDirectory := ExtractFilePath(AbGetTempFile(FTempDir, False)); { save the Tar data } if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; if FTarStream.Size > 0 then begin if FGZItem.Count = 0 then begin CurItem := TAbGzipItem.Create; FGZItem.Add(CurItem); end; CurItem := FGZItem[0] as TAbGzipItem; CurItem.Action := aaNone; CurItem.LastModTimeAsDateTime := Now; CurItem.SaveGzHeaderToStream(NewStream); FTarStream.Position := 0; OutGzHelp.WriteArchiveItem(FTarStream); CurItem.CRC32 := OutGzHelp.CRC; CurItem.UncompressedSize := OutGzHelp.FileSize; OutGzHelp.WriteArchiveTail; end; end else begin SwapToGzip; {build new archive from existing archive} for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbGzipItem(ItemList[i]); InGzHelp.SeekToItemData; case CurItem.Action of aaNone, aaMove : begin {just copy the file to new stream} CurItem.SaveGzHeaderToStream(NewStream); InGzHelp.SeekToItemData; NewStream.CopyFrom(FGZStream, FGZStream.Size - FGZStream.Position); end; aaDelete: {doing nothing omits file from new stream} ; aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin try if (CurItem.Action = aaStreamAdd) then begin { adding from a stream } CurItem.SaveGzHeaderToStream(NewStream); CurItem.UncompressedSize := InStream.Size; OutGzHelp.WriteArchiveItem(InStream); OutGzHelp.WriteArchiveTail; end else begin CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); UncompressedStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try CurItem.UncompressedSize := UncompressedStream.Size; CurItem.SaveGzHeaderToStream(NewStream); OutGzHelp.WriteArchiveItem(UncompressedStream); OutGzHelp.WriteArchiveTail; finally {UncompressedStream} UncompressedStream.Free; end; {UncompressedStream} end; except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; end; {case} end; { for } end; finally InGzHelp.Free; end; {copy new stream to FStream} SwapToGzip; NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else begin { need new stream to write } FreeAndNil(FStream); FGZStream := nil; FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FGZStream := FStream; FStream.CopyFrom(NewStream, NewStream.Size); end; {update Items list} for i := pred( Count ) downto 0 do begin if ItemList[i].Action = aaDelete then FItemList.Delete( i ) else if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; end; if IsGzippedTar and TarAutoHandle then SwapToTar; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream} OutGzHelp.Free; NewStream.Free; end; end; procedure TAbGzipArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToGzip; FTarAutoHandle := Value; end; procedure TAbGzipArchive.TestItemAt(Index: Integer); var SavePos : LongInt; GZType : TAbArchiveType; BitBucket : TAbBitBucketStream; GZHelp : TAbGzipStreamHelper; begin if IsGzippedTar and TarAutoHandle then begin inherited TestItemAt(Index); end else begin { note Index ignored as there's only one item in a GZip } SavePos := FGzStream.Position; GZType := VerifyGZip(FGZStream); if not (GZType in [atGZip, atGZippedTar]) then raise EAbGzipInvalid.Create; BitBucket := nil; GZHelp := nil; try BitBucket := TAbBitBucketStream.Create(1024); GZHelp := TAbGzipStreamHelper.Create(FGZStream); GZHelp.ExtractItemData(BitBucket); GZHelp.ReadTail; { validate against CRC } if GzHelp.FItem.Crc32 <> GZHelp.TailCRC then raise EAbGzipBadCRC.Create; { validate against file size } if GzHelp.FItem.UncompressedSize <> GZHelp.TailSize then raise EAbGzipBadFileSize.Create; finally GZHelp.Free; BitBucket.Free; end; FGzStream.Position := SavePos; end; end; procedure TAbGzipArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. ���������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abzbrows.pas����������������������������������������������0000644�0001750�0000144�00000026607�12014201074�022110� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZBrows.pas *} {*********************************************************} {* ABBREVIA: Zip file Browser Component *} {*********************************************************} unit AbZBrows; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbBrowse, AbSpanSt, AbZipTyp; type TAbCustomZipBrowser = class(TAbBaseBrowser) private function GetTarAutoHandle: Boolean; procedure SetTarAutoHandle(const Value: Boolean); protected {private} FPassword : AnsiString; FOnRequestLastDisk : TAbRequestDiskEvent; FOnRequestNthDisk : TAbRequestNthDiskEvent; FOnRequestBlankDisk : TAbRequestDiskEvent; FTarAutoHandle : Boolean; protected {methods} function GetItem(Index : Integer) : TAbZipItem; virtual; function GetStream: TStream; function GetZipfileComment : AnsiString; procedure InitArchive; override; procedure SetFileName(const aFileName : string); override; procedure SetStream(aValue: TStream); procedure SetOnRequestLastDisk(Value : TAbRequestDiskEvent); procedure SetOnRequestNthDisk(Value : TAbRequestNthDiskEvent); procedure SetOnRequestBlankDisk(Value : TAbRequestDiskEvent); procedure SetPassword(const Value : AnsiString); procedure SetZipfileComment(const Value : AnsiString); virtual; protected {properties} property Password : AnsiString read FPassword write SetPassword; protected {events} property OnRequestLastDisk : TAbRequestDiskEvent read FOnRequestLastDisk write SetOnRequestLastDisk; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write SetOnRequestNthDisk; property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write SetOnRequestBlankDisk; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; public {properties} property Items[Index : Integer] : TAbZipItem read GetItem; default; property Stream : TStream // This can be used instead of Filename read GetStream write SetStream; property ZipArchive : {TAbZipArchive} TAbArchive read FArchive; property ZipfileComment : AnsiString read GetZipfileComment write SetZipfileComment; property TarAutoHandle : Boolean read GetTarAutoHandle write SetTarAutoHandle; end; TAbZipBrowser = class(TAbCustomZipBrowser) published property ArchiveProgressMeter; property ItemProgressMeter; property BaseDirectory; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmProcessItem; property OnLoad; property OnProcessItemFailure; property OnRequestLastDisk; property OnRequestNthDisk; property Version; property TarAutoHandle; property FileName; {must be after OnLoad} end; implementation uses SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils, DCOSUtils; { TAbCustomZipBrowser implementation ======================================= } { -------------------------------------------------------------------------- } constructor TAbCustomZipBrowser.Create(AOwner : TComponent); begin inherited Create(AOwner); end; { -------------------------------------------------------------------------- } destructor TAbCustomZipBrowser.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetItem(Index : Integer) : TAbZipItem; begin Result := TAbZipItem(ZipArchive.ItemList[Index]); end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetStream: TStream; begin if FArchive <> nil then Result := FArchive.FStream else Result := nil end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetTarAutoHandle: Boolean; begin Result := False; if FArchive is TAbGzipArchive then Result := TAbGzipArchive(FArchive).TarAutoHandle else if FArchive is TAbBzip2Archive then Result := TAbBzip2Archive(FArchive).TarAutoHandle; end; { -------------------------------------------------------------------------- } function TAbCustomZipBrowser.GetZipfileComment : AnsiString; begin if ZipArchive is TAbZipArchive then Result := TAbZipArchive(ZipArchive).ZipfileComment else Result := ''; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.InitArchive; begin inherited InitArchive; if ZipArchive is TAbZipArchive then begin {properties} TAbZipArchive(ZipArchive).Password := FPassword; {events} TAbZipArchive(ZipArchive).OnRequestLastDisk := FOnRequestLastDisk; TAbZipArchive(ZipArchive).OnRequestNthDisk := FOnRequestNthDisk; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetFileName(const aFileName : string); var ArcType : TAbArchiveType; begin FFileName := aFileName; if csDesigning in ComponentState then Exit; try if Assigned(FArchive) then begin FArchive.Save; end; except end; FArchive.Free; FArchive := nil; if FileName <> '' then begin if mbFileExists(FileName) then begin { open it } ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchive.Load; FArchiveType := ArcType; end; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetStream(aValue: TStream); var ArcType : TAbArchiveType; begin FFileName := ''; try if FArchive <> nil then FArchive.Save; except end; FreeAndNil(FArchive); if aValue <> nil then begin ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(aValue); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.CreateFromStream(aValue, ''); end; atTar : begin FArchive := TAbTarArchive.CreateFromStream(aValue, ''); end; atGZip, atGZippedTar : begin FArchive := TAbGzipArchive.CreateFromStream(aValue, ''); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := (ArcType = atGZippedTar); end; atBzip2, atBzippedTar : begin FArchive := TAbBzip2Archive.CreateFromStream(aValue, ''); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := (ArcType = atBzippedTar); end; else raise EAbUnhandledType.Create; end {case}; InitArchive; FArchive.Load; FArchiveType := ArcType; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestBlankDisk(Value : TAbRequestDiskEvent); begin FOnRequestBlankDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestBlankDisk := FOnRequestBlankDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestLastDisk(Value : TAbRequestDiskEvent); begin FOnRequestLastDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestLastDisk := FOnRequestLastDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetOnRequestNthDisk(Value : TAbRequestNthDiskEvent); begin FOnRequestNthDisk := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).OnRequestNthDisk := FOnRequestNthDisk; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetPassword(const Value : AnsiString); begin FPassword := Value; if ZipArchive is TAbZipArchive then TAbZipArchive(ZipArchive).Password := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipBrowser.SetTarAutoHandle(const Value: Boolean); begin FTarAutoHandle := Value; if FArchive is TAbGzipArchive then begin if TAbGzipArchive(FArchive).TarAutoHandle <> Value then begin TAbGzipArchive(FArchive).TarAutoHandle := Value; InitArchive; FArchive.Load; DoChange; end; end; if FArchive is TAbBzip2Archive then begin if TAbBzip2Archive(FArchive).TarAutoHandle <> Value then begin TAbBzip2Archive(FArchive).TarAutoHandle := Value; InitArchive; FArchive.Load; DoChange; end; end; end; procedure TAbCustomZipBrowser.SetZipfileComment(const Value : AnsiString); begin {NOP - descendents wishing to set this property should override} end; { -------------------------------------------------------------------------- } end. �������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abvmstrm.pas����������������������������������������������0000644�0001750�0000144�00000041606�12014201074�022106� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbVMStrm.pas *} {*********************************************************} {* ABBREVIA: Virtual Memory Stream *} {*********************************************************} unit AbVMStrm; {$I AbDefine.inc} interface uses Classes; const AB_VMSPageSize = 4096; {must be a power of two} AB_VMSMaxPages = 2048; {makes 8MB with the above value} type PvmsPage = ^TvmsPage; TvmsPage = packed record vpStmOfs : Int64; {value will be multiple of AB_VMSPageSize} vpLRU : integer; {'time' page was last accessed} vpDirty : Boolean; {has the page been changed?} vpData : array [0..pred(AB_VMSPageSize)] of byte; {stream data} end; type TAbVirtualMemoryStream = class(TStream) protected {private} vmsCachePage : PvmsPage; {the latest page used} vmsLRU : Longint; {'tick' value} vmsMaxMemToUse : Longword; {maximum memory to use for data} vmsMaxPages : Integer; {maximum data pages} vmsPageList : TList; {page array, sorted by offset} vmsPosition : Int64; {position of stream} vmsSize : Int64; {size of stream} vmsSwapFileDir : string; {swap file directory} vmsSwapFileName : string; {swap file name} vmsSwapFileSize : Int64; {size of swap file} vmsSwapHandle : System.THandle; {swap file handle} protected procedure vmsSetMaxMemToUse(aNewMem : Longword); function vmsAlterPageList(aNewMem : Longword) : Longword; procedure vmsFindOldestPage(out OldestInx : Longint; out OldestPage: PvmsPage); function vmsGetNextLRU : Longint; function vmsGetPageForOffset(aOffset : Int64) : PvmsPage; procedure vmsSwapFileCreate; procedure vmsSwapFileDestroy; procedure vmsSwapFileRead(aPage : PvmsPage); procedure vmsSwapFileWrite(aPage : PvmsPage); public constructor Create; {-create the virtual memory stream} destructor Destroy; override; {-destroy the virtual memory stream} function Read(var Buffer; Count : Longint) : Longint; override; {-read from the stream into a buffer} function Write(const Buffer; Count : Longint) : Longint; override; {-write to the stream from a buffer} function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; {-seek to a particular point in the stream} procedure SetSize(const NewSize : Int64); override; {-set the stream size} property MaxMemToUse : Longword read vmsMaxMemToUse write vmsSetMaxMemToUse; {-maximum memory to use for data before swapping to disk} property SwapFileDirectory : string read vmsSwapFileDir write vmsSwapFileDir; end; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix warning about unexpanded inline functions {$ENDIF} SysUtils, AbExcept, AbUtils, DCOSUtils; const LastLRUValue = $7FFFFFFF; {===TAbVirtualMemoryStream===========================================} constructor TAbVirtualMemoryStream.Create; var Page : PvmsPage; begin inherited Create; {create the page array} vmsPageList := TList.Create; {create the first page} New(Page); with Page^ do begin vpStmOfs := 0; vpLRU := vmsGetNextLRU; vpDirty := False; FillChar(vpData, AB_VMSPageSize, 0); end; vmsPageList.Insert(0, pointer(Page)); {prime the cache, from now on the cache will never be nil} vmsCachePage := Page; {default to using all allowed pages} MaxMemToUse := AB_VMSMaxPages * AB_VMSPageSize; end; {--------} destructor TAbVirtualMemoryStream.Destroy; var Inx : integer; begin {destroy the swap file} vmsSwapFileDestroy; {throw away all pages in the list} if (vmsPageList <> nil) then begin for Inx := 0 to pred(vmsPageList.Count) do Dispose(PvmsPage(vmsPageList[Inx])); vmsPageList.Destroy; end; {let our ancestor clean up} inherited Destroy; end; {--------} function TAbVirtualMemoryStream.Read(var Buffer; Count : Longint) : Longint; var BufPtr : PByte; Page : PvmsPage; PageDataInx : integer; Posn : int64; BytesToGo : int64; BytesToRead : int64; StartOfs : int64; begin {reading is complicated by the fact we can only read in chunks of AB_VMSPageSize: we need to partition out the overall read into a read from a partial page, zero or more reads from complete pages and then a possible read from a partial page} {initialise some variables, note that the complex calc in the expression for PageDataInx is the offset of the start of the page where Posn is found.} BufPtr := @Buffer; Posn := vmsPosition; PageDataInx := Posn - (Posn and (not pred(AB_VMSPageSize))); BytesToRead := AB_VMSPageSize - PageDataInx; {calculate the actual number of bytes to read - this depends on the current position and size of the stream} BytesToGo := Count; if (vmsSize < (vmsPosition + Count)) then BytesToGo := vmsSize - vmsPosition; if (BytesToGo < 0) then BytesToGo := 0; Result := BytesToGo; {while we have bytes to read, read them} while (BytesToGo <> 0) do begin if (BytesToRead > BytesToGo) then BytesToRead := BytesToGo; StartOfs := Posn and (not pred(AB_VMSPageSize)); if (vmsCachePage^.vpStmOfs = StartOfs) then Page := vmsCachePage else Page := vmsGetPageForOffset(StartOfs); Move(Page^.vpData[PageDataInx], BufPtr^, BytesToRead); dec(BytesToGo, BytesToRead); inc(Posn, BytesToRead); inc(BufPtr, BytesToRead); PageDataInx := 0; BytesToRead := AB_VMSPageSize; end; {remember our new position} vmsPosition := Posn; end; {--------} function TAbVirtualMemoryStream.Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; begin case Origin of soBeginning : vmsPosition := Offset; soCurrent : inc(vmsPosition, Offset); soEnd : vmsPosition := vmsSize + Offset; else raise EAbVMSInvalidOrigin.Create( Integer(Origin)); end; Result := vmsPosition; end; {--------} procedure TAbVirtualMemoryStream.SetSize(const NewSize : Int64); var Page : PvmsPage; Inx : integer; NewFileSize : Int64; begin if (NewSize < vmsSize) then begin {go through the page list discarding pages whose offset is greater than our new size; don't bother saving any data from them since it be beyond the end of the stream anyway} {never delete the last page here} for Inx := pred(vmsPageList.Count) downto 1 do begin Page := PvmsPage(vmsPageList[Inx]); if (Page^.vpStmOfs >= NewSize) then begin Dispose(Page); vmsPageList.Delete(Inx); end else begin Break; end; end; { Reset cache to the first page in case the cached page was deleted. } vmsCachePage := vmsPageList[0]; {force the swap file file size in range, it'll be a multiple of AB_VMSPageSize} NewFileSize := pred(NewSize + AB_VMSPageSize) and (not pred(AB_VMSPageSize)); if (NewFileSize < vmsSwapFileSize) then vmsSwapFileSize := NewFileSize; {ignore the swap file itself} end; vmsSize := NewSize; if (vmsPosition > NewSize) then vmsPosition := NewSize; end; {--------} function TAbVirtualMemoryStream.vmsAlterPageList(aNewMem : Longword) : Longword; var NumPages : Longint; Page : PvmsPage; i : integer; OldestPageNum : Longint; begin {calculate the max number of pages required} if aNewMem = 0 then NumPages := 1 // always have at least one page else NumPages := pred(aNewMem + AB_VMSPageSize) div AB_VMSPageSize; if (NumPages > AB_VMSMaxPages) then NumPages := AB_VMSMaxPages; {if the maximum number of pages means we have to shrink the current list, do so, tossing out the oldest pages first} if (NumPages < vmsPageList.Count) then begin for i := 1 to (vmsPageList.Count - NumPages) do begin {find the oldest page} vmsFindOldestPage(OldestPageNum, Page); {if it is dirty, write it out to the swap file} if Page^.vpDirty then begin vmsSwapFileWrite(Page); end; {remove it from the page list} vmsPageList.Delete(OldestPageNum); {free the page memory} Dispose(Page); end; { Reset cache to the first page in case the cached page was deleted. } vmsCachePage := vmsPageList[0]; end; {remember our new max number of pages} vmsMaxPages := NumPages; Result := NumPages * AB_VMSPageSize; end; {--------} procedure TAbVirtualMemoryStream.vmsFindOldestPage(out OldestInx : Longint; out OldestPage: PvmsPage); var OldestLRU : Longint; Inx : integer; Page : PvmsPage; begin OldestInx := -1; OldestLRU := LastLRUValue; for Inx := 0 to pred(vmsPageList.Count) do begin Page := PvmsPage(vmsPageList[Inx]); if (Page^.vpLRU < OldestLRU) then begin OldestInx := Inx; OldestLRU := Page^.vpLRU; OldestPage := Page; end; end; end; {--------} function TAbVirtualMemoryStream.vmsGetNextLRU : Longint; var Inx : integer; begin if (vmsLRU = LastLRUValue) then begin {reset all LRUs in list} for Inx := 0 to pred(vmsPageList.Count) do PvmsPage(vmsPageList[Inx])^.vpLRU := 0; vmsLRU := 0; end; inc(vmsLRU); Result := vmsLRU; end; {--------} function TAbVirtualMemoryStream.vmsGetPageForOffset(aOffset : Int64) : PvmsPage; var Page : PvmsPage; PageOfs : Int64; L, M, R : integer; OldestPageNum : integer; CreatedNewPage: boolean; begin {using a sequential or a binary search (depending on the number of pages), try to find the page in the cache; we'll do a sequential search if the number of pages is very small, eg less than 4} if (vmsPageList.Count < 4) then begin L := vmsPageList.Count; for M := 0 to pred(vmsPageList.Count) do begin Page := PvmsPage(vmsPageList[M]); PageOfs := Page^.vpStmOfs; if (aOffset < PageOfs) then begin L := M; Break; end; if (aOffset = PageOfs) then begin Page^.vpLRU := vmsGetNextLRU; vmsCachePage := Page; Result := Page; Exit; end; end; end else {we need to do a binary search} begin L := 0; R := pred(vmsPageList.Count); repeat M := (L + R) div 2; Page := PvmsPage(vmsPageList[M]); PageOfs := Page^.vpStmOfs; if (aOffset < PageOfs) then R := pred(M) else if (aOffset > PageOfs) then L := succ(M) else {aOffset = PageOfs} begin Page^.vpLRU := vmsGetNextLRU; vmsCachePage := Page; Result := Page; Exit; end; until (L > R); end; {if we get here the page for the offset is not present in the page list, and once created/loaded, the page should be inserted at L} {enter a try..except block so that if a new page is created and an exception occurs, the page is freed} CreatedNewPage := false; Result := nil; try {if there is room to insert a new page, create one ready} if (vmsPageList.Count < vmsMaxPages) then begin New(Page); CreatedNewPage := true; end {otherwise there is no room for the insertion, so find the oldest page in the list and discard it} else {vmsMaxPages <= vmsPageList.Count} begin {find the oldest page} vmsFindOldestPage(OldestPageNum, Page); {if it is dirty, write it out to the swap file} if Page^.vpDirty then begin vmsSwapFileWrite(Page); end; {remove it from the page list} vmsPageList.Delete(OldestPageNum); {patch up the insertion point, in case the page just deleted was before it} if (OldestPageNum < L) then dec(L); end; {set all the page fields} with Page^ do begin vpStmOfs := aOffset; vpLRU := vmsGetNextLRU; vpDirty := False; vmsSwapFileRead(Page); end; {insert the page into the correct spot} vmsPageList.Insert(L, pointer(Page)); {return the page, remembering to save it in the cache} vmsCachePage := Page; Result := Page; except if CreatedNewPage then Dispose(Page); end;{try..except} end; {--------} procedure TAbVirtualMemoryStream.vmsSetMaxMemToUse(aNewMem : Longword); begin vmsMaxMemToUse := vmsAlterPageList(aNewMem); end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileCreate; begin if (vmsSwapHandle = 0) then begin vmsSwapFileName := AbCreateTempFile(vmsSwapFileDir); vmsSwapHandle := mbFileOpen(vmsSwapFileName, fmOpenReadWrite); if (vmsSwapHandle <= 0) then begin vmsSwapHandle := 0; mbDeleteFile(vmsSwapFileName); raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName ); end; vmsSwapFileSize := 0; end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileDestroy; begin if (vmsSwapHandle <> 0) then begin FileClose(vmsSwapHandle); mbDeleteFile(vmsSwapFileName); vmsSwapHandle := 0; end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileRead(aPage : PvmsPage); var BytesRead : Longint; SeekResult: Int64; begin if (vmsSwapHandle = 0) or (aPage^.vpStmOfs >= vmsSwapFileSize) then begin {there is nothing to be read from the disk (either the swap file doesn't exist or it's too small) so zero out the page data} FillChar(aPage^.vpData, AB_VMSPageSize, 0) end else {there is something to be read from the swap file} begin SeekResult := FileSeek(vmsSwapHandle, aPage^.vpStmOfs, 0); if (SeekResult = -1) then raise EAbVMSSeekFail.Create( vmsSwapFileName ); BytesRead := FileRead(vmsSwapHandle, aPage^.vpData, AB_VMSPageSize); if (BytesRead <> AB_VMSPageSize) then raise EAbVMSReadFail.Create( AB_VMSPageSize, vmsSwapFileName ); end; end; {--------} procedure TAbVirtualMemoryStream.vmsSwapFileWrite(aPage : PvmsPage); var NewPos : Int64; SeekResult: Int64; BytesWritten : Longint; begin if (vmsSwapHandle = 0) then vmsSwapFileCreate; SeekResult := FileSeek(vmsSwapHandle, aPage^.vpStmOfs, 0); if (SeekResult = -1) then raise EAbVMSSeekFail.Create( vmsSwapFileName ); BytesWritten := FileWrite(vmsSwapHandle, aPage^.vpData, AB_VMSPageSize); if BytesWritten <> AB_VMSPageSize then raise EAbVMSWriteFail.Create( AB_VMSPageSize, vmsSwapFileName ); NewPos := aPage^.vpStmOfs + AB_VMSPageSize; if (NewPos > vmsSwapFileSize) then vmsSwapFileSize := NewPos; end; {--------} function TAbVirtualMemoryStream.Write(const Buffer; Count : Longint) : Longint; var BufPtr : PByte; Page : PvmsPage; PageDataInx : integer; Posn : Int64; BytesToGo : Int64; BytesToWrite: Int64; StartOfs : Int64; begin {writing is complicated by the fact we can only write in chunks of AB_VMSPageSize: we need to partition out the overall write into a write to a partial page, zero or more writes to complete pages and then a possible write to a partial page} {initialise some variables, note that the complex calc in the expression for PageDataInx is the offset of the start of the page where Posn is found.} BufPtr := @Buffer; Posn := vmsPosition; PageDataInx := Posn - (Posn and (not pred(AB_VMSPageSize))); BytesToWrite := AB_VMSPageSize - PageDataInx; {calculate the actual number of bytes to write} BytesToGo := Count; Result := BytesToGo; {while we have bytes to write, write them} while (BytesToGo <> 0) do begin if (BytesToWrite > BytesToGo) then BytesToWrite := BytesToGo; StartOfs := Posn and (not pred(AB_VMSPageSize)); if (vmsCachePage^.vpStmOfs = StartOfs) then Page := vmsCachePage else Page := vmsGetPageForOffset(StartOfs); Move(BufPtr^, Page^.vpData[PageDataInx], BytesToWrite); Page^.vpDirty := True; dec(BytesToGo, BytesToWrite); inc(Posn, BytesToWrite); inc(BufPtr, BytesToWrite); PageDataInx := 0; BytesToWrite := AB_VMSPageSize; end; {remember our new position} vmsPosition := Posn; {if we've grown the stream, make a note of it} if (vmsPosition > vmsSize) then vmsSize := vmsPosition; end; {====================================================================} end. ��������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abresstring.pas�������������������������������������������0000644�0001750�0000144�00000023301�12014201074�022566� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Roman Kassebaum * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* Abbrevia: AbResString.pas *} {*********************************************************} {* Abbrevia: Resource strings *} {*********************************************************} unit AbResString; {$I AbDefine.inc} interface resourcestring AbErrZipInvalidS = 'Invalid file - not a PKZip file'; AbZipVersionNeededS = 'Cannot extract file - newer version required'; AbUnknownCompressionMethodS = 'Cannot extract file - unsupported compression method'; AbNoExtractionMethodS = 'Cannot extract file - no extraction support provided'; AbInvalidPasswordS = 'Cannot extract file - invalid password'; AbNoInsertionMethodS = 'Cannot insert file - no insertion support provided'; AbInvalidFactorS = 'Invalid Reduce Factor'; AbDuplicateNameS = 'Cannot insert file - duplicates stored name'; AbUnsupportedCompressionMethodS = 'Cannot insert file - unsupported compression method'; AbUserAbortS = 'Process aborted by user'; AbArchiveBusyS = 'Archive is busy - cannot process new requests'; AbLastDiskRequestS = 'Insert the last disk in the spanned disk set'; AbDiskRequestS = 'Insert floppy'; AbImageRequestS = 'Image file name'; AbBadSpanStreamS = 'Spanned archives must be opened as file streams'; AbDiskNumRequestS = 'Insert disk number %d of the spanned disk set'; AbImageNumRequestS = 'Insert span number %d of the spanned file set'; AbNoOverwriteSpanStreamS = 'Cannot update an existing spanned disk set'; AbNoSpannedSelfExtractS = 'Cannot make a self-extracting spanned disk set'; AbBlankDiskS = 'Insert a blank floppy disk'; AbStreamFullS = 'Stream write error'; AbNoSuchDirectoryS = 'Directory does not exist'; AbInflateBlockErrorS = 'Cannot inflate block'; AbBadStreamTypeS = 'Invalid Stream'; AbTruncateErrorS = 'Error truncating Zip File'; AbZipBadCRCS = 'Failed CRC Check'; AbZipBadStubS = 'Stub must be an executable'; AbFileNotFoundS = 'File not found'; AbInvalidLFHS = 'Invalid Local File Header entry'; AbNoArchiveS = 'Archive does not exist - Filename is blank'; AbReadErrorS = 'Error reading archive'; AbInvalidIndexS = 'Invalid archive item index'; AbInvalidThresholdS = 'Invalid archive size threshold'; AbUnhandledFileTypeS = 'Unhandled Archive Type'; AbSpanningNotSupportedS = 'Spanning not supported by this Archive type'; AbLogCreateErrorS = 'Error creating Log File'; AbMoveFileErrorS = 'Error Moving File %s to %s'; AbFileSizeTooBigS = 'File size is too big for archive type'; AbNoCabinetDllErrorS = 'Cannot load cabinet.dll'; AbFCIFileOpenErrorS = 'FCI cannot open file'; AbFCIFileReadErrorS = 'FCI cannot read file'; AbFCIFileWriteErrorS = 'FCI cannot write file'; AbFCIFileCloseErrorS = 'FCI close file error'; AbFCIFileSeekErrorS = 'FCI file seek error'; AbFCIFileDeleteErrorS = 'FCI file delete error'; AbFCIAddFileErrorS = 'FCI cannot add file'; AbFCICreateErrorS = 'FCI cannot create context'; AbFCIFlushCabinetErrorS = 'FCI cannot flush cabinet'; AbFCIFlushFolderErrorS = 'FCI cannot flush folder'; AbFDICopyErrorS = 'FDI cannot enumerate files'; AbFDICreateErrorS = 'FDI cannot create context'; AbInvalidCabTemplateS = 'Invalid cab file template'; AbInvalidCabFileS = 'Invalid file - not a cabinet file'; AbZipStored = 'Stored'; AbZipShrunk = 'Shrunk'; AbZipReduced = 'Reduced'; AbZipImploded = 'Imploded'; AbZipTokenized = 'Tokenized'; AbZipDeflated = 'Deflated'; AbZipDeflate64 = 'Enhanced Deflation'; AbZipDCLImploded = 'DCL Imploded'; AbZipBzip2 = 'Bzip2'; AbZipLZMA = 'LZMA'; AbZipIBMTerse = 'IBM Terse'; AbZipLZ77 = 'IBM LZ77'; AbZipJPEG = 'JPEG'; AbZipWavPack = 'WavPack'; AbZipPPMd = 'PPMd'; AbZipUnknown = 'Unknown (%d)'; AbZipBestMethod = 'Best Method'; AbVersionFormatS = 'Version %s'; AbCompressedSizeFormatS = 'Compressed Size: %d'; AbUncompressedSizeFormatS = 'Uncompressed Size: %d'; AbCompressionMethodFormatS = 'Compression Method: %s'; AbCompressionRatioFormatS = 'Compression Ratio: %2.0f%%'; AbCRCFormatS = 'CRC: %x'; AbReadOnlyS = 'r'; AbHiddenS = 'h'; AbSystemS = 's'; AbArchivedS = 'a'; AbEFAFormatS = 'External File Attributes: %s'; AbIFAFormatS = 'File Type: %s'; AbTextS = 'Text'; AbBinaryS = 'Binary'; AbEncryptionFormatS = 'Encryption: %s'; AbEncryptedS = 'Encrypted'; AbNotEncryptedS = 'Not Encrypted'; AbUnknownS = 'Unknown'; AbTimeStampFormatS = 'Time Stamp: %s'; AbMadeByFormatS = 'Made by Version: %f'; AbNeededFormatS = 'Version Needed to Extract: %f'; AbCommentFormatS = 'Comment: %s'; AbDefaultExtS = '*.zip'; AbFilterS = 'PKZip Archives (*.zip)|*.zip|Self Extracting Archives (*.exe)|*.exe|All Files (*.*)|*.*'; AbFileNameTitleS = 'Select File Name'; AbOKS = 'OK'; AbCancelS = 'Cancel'; AbSelectDirectoryS = 'Select Directory'; AbEnterPasswordS = 'Enter Password'; AbPasswordS = '&Password'; AbVerifyS = '&Verify'; AbCabExtS = '*.cab'; AbCabFilterS = 'Cabinet Archives (*.cab)|*.CAB|All Files (*.*)|*.*'; AbLogExtS = '*.txt'; AbLogFilterS = 'Text Files (*.txt)|*.TXT|All Files (*.*)|*.*'; AbExeExtS = '*.exe'; AbExeFilterS = 'Self-Extracting Zip Files (*.exe)|*.EXE|All Files (*.*)|*.*'; AbVMSReadTooManyBytesS = 'VMS: request to read too many bytes [%d]'; AbVMSInvalidOriginS = 'VMS: invalid origin %d, should be 0, 1, 2'; AbVMSErrorOpenSwapS = 'VMS: Cannot open swap file %s'; AbVMSSeekFailS = 'VMS: Failed to seek in swap file %s'; AbVMSReadFailS = 'VMS: Failed to read %d bytes from swap file %s'; AbVMSWriteFailS = 'VMS: Failed to write %d bytes to swap file %s'; AbVMSWriteTooManyBytesS = 'VMS: request to write too many bytes [%d]'; AbBBSReadTooManyBytesS = 'BBS: request to read too many bytes [%d]'; AbBBSSeekOutsideBufferS = 'BBS: New position is outside the buffer'; AbBBSInvalidOriginS = 'BBS: Invalid Origin value'; AbBBSWriteTooManyBytesS = 'BBS: request to write too many bytes [%d]'; AbSWSNotEndofStreamS = 'TabSlidingWindowStream.Write: Not at end of stream'; AbSWSSeekFailedS = 'TabSlidingWindowStream.bsWriteChunk: seek failed'; AbSWSWriteFailedS = 'TabSlidingWindowStream.bsWriteChunk: write failed'; AbSWSInvalidOriginS = 'TabSlidingWindowStream.Seek: invalid origin'; AbSWSInvalidNewOriginS = 'TabSlidingWindowStream.Seek: invalid new position'; AbItemNameHeadingS = 'Name'; AbPackedHeadingS = 'Packed'; AbMethodHeadingS = 'Method'; AbRatioHeadingS = 'Ratio (%)'; AbCRCHeadingS = 'CRC32'; AbFileAttrHeadingS = 'Attributes'; AbFileFormatHeadingS = 'Format'; AbEncryptionHeadingS = 'Encrypted'; AbTimeStampHeadingS = 'Time Stamp'; AbFileSizeHeadingS = 'Size'; AbVersionMadeHeadingS = 'Version Made'; AbVersionNeededHeadingS = 'Version Needed'; AbPathHeadingS = 'Path'; AbPartialHeadingS = 'Partial'; AbExecutableHeadingS = 'Executable'; AbFileTypeHeadingS = 'Type'; AbLastModifiedHeadingS = 'Modified'; AbCabMethod0S = 'None'; AbCabMethod1S = 'MSZip'; AbLtAddS = ' added '; AbLtDeleteS = ' deleted '; AbLtExtractS = ' extracted '; AbLtFreshenS = ' freshened '; AbLtMoveS = ' moved '; AbLtReplaceS = ' replaced '; AbLtStartS = ' logging '; AbGzipInvalidS = 'Invalid Gzip'; AbGzipBadCRCS = 'Bad CRC'; AbGzipBadFileSizeS = 'Bad File Size'; AbTarInvalidS = 'Invalid Tar'; AbTarBadFileNameS = 'File name too long'; AbTarBadLinkNameS = 'Symbolic link path too long'; AbTarBadOpS = 'Unsupported Operation'; AbUnhandledEntityS = 'Unhandled Entity'; { pre-defined "operating system" (really more FILE system) identifiers for the Gzip header } AbGzOsFat = 'FAT File System (MS-DOS, OS/2, NT/Win32)'; AbGzOsAmiga = 'Amiga'; AbGzOsVMS = 'VMS (or OpenVMS)'; AbGzOsUnix = 'Unix'; AbGzOsVM_CMS = 'VM/CMS'; AbGzOsAtari = 'Atari TOS'; AbGzOsHPFS = 'HPFS File System (OS/2, NT)'; AbGzOsMacintosh = 'Macintosh'; AbGzOsZ_System = 'Z-System'; AbGzOsCP_M = 'CP/M'; AbGzOsTOPS_20 = 'TOPS-20'; AbGzOsNTFS = 'NTFS File System (NT)'; AbGzOsQDOS = 'QDOS'; AbGzOsAcornRISCOS = 'Acorn RISCOS'; AbGzOsVFAT = 'VFAT File System (Win95, NT)'; AbGzOsMVS = 'MVS'; AbGzOsBeOS = 'BeOS (BeBox or PowerMac)'; AbGzOsTandem = 'Tandem/NSK'; AbGzOsTHEOS = 'THEOS'; AbGzOsunknown = 'unknown'; AbGzOsUndefined = 'ID undefined by gzip'; { Compound File specific error messages } resourcestring AbCmpndIndexOutOfBounds = 'Index out of bounds'; AbCmpndBusyUpdating = 'Compound file is busy updating'; AbCmpndInvalidFile = 'Invalid compound file'; AbCmpndFileNotFound = 'File/Directory not found'; AbCmpndFolderNotEmpty = 'Folder not empty'; AbCmpndExceedsMaxFileSize = 'File size exceeds maximum allowable'; implementation end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abtartyp.pas����������������������������������������������0000644�0001750�0000144�00000256546�12143117625�022127� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Joel Haynie * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbTarTyp.pas *} {*********************************************************} {* ABBREVIA: TAbTarArchive, TAbTarItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Tar files *} {*********************************************************} unit AbTarTyp; {$I AbDefine.inc} interface uses Classes, AbUtils, AbArcTyp; const AB_TAR_RECORDSIZE = 512; {Note: SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE} AB_TAR_NAMESIZE = 100; AB_TAR_V7_EMPTY_SIZE = 167; AB_TAR_USTAR_PREFIX_SIZE = 155; AB_TAR_STAR_PREFIX_SIZE = 131; AB_TAR_OLD_GNU_EMPTY1_SIZE = 5; AB_TAR_OLD_GNU_SPARSE_SIZE = 96; AB_TAR_OLD_GNU_EMPTY2_SIZE = 17; AB_TAR_SIZE_AFTER_STDHDR = 167; AB_TAR_TUSRNAMELEN = 32; AB_TAR_TGRPNAMELEN = 32; { The checksum field is filled with this while the checksum is computed. } AB_TAR_CHKBLANKS = ' '; { 8 blank spaces(#20), no null } AB_TAR_L_HDR_NAME = '././@LongLink'; { As seen in the GNU File Examples} AB_TAR_L_HDR_USR_NAME='root'; { On Cygwin this is #0, Redhat it is 'root' } AB_TAR_L_HDR_GRP_NAME='root'; { Same on all OS's } AB_TAR_L_HDR_ARR8_0 ='0000000'#0; { 7 zeros and one null } AB_TAR_L_HDR_ARR12_0 ='00000000000'#0;{ 11 zeros and one null } AB_TAR_MAGIC_VAL = 'ustar'#0; { 5 chars & a nul } AB_TAR_MAGIC_VER = '00'; { 2 chars } AB_TAR_MAGIC_GNUOLD = 'ustar '#0; { 7 chars & a null } AB_TAR_MAGIC_V7_NONE = #0#0#0#0#0#0#0#0;{ 8, #0 } { The linkflag defines the type of file(FH), and Meta Data about File(MDH) } AB_TAR_LF_OLDNORMAL = #0; { FH, Normal disk file, Unix compatible } { Historically used for V7 } AB_TAR_LF_NORMAL = '0'; { FH, Normal disk file } AB_TAR_LF_LINK = '1'; { FH, Link to previously archived file } AB_TAR_LF_SYMLINK = '2'; { FH, Symbolic(soft) link } AB_TAR_LF_CHR = '3'; { FH, Character special file }{ Used for device nodes, Conditionally compiled into GNUTAR } AB_TAR_LF_BLK = '4'; { FH, Block special file }{ Used for device nodes, Conditionally compiled into GNUTAR } AB_TAR_LF_DIR = '5'; { FH, Directory, Zero size File } AB_TAR_LF_FIFO = '6'; { FH, FIFO special file }{ Used for fifo files(pipe like), Conditionally complied into GNUTAR } AB_TAR_LF_CONTIG = '7'; { FH, Contiguous file } { Normal File, but All blocks should be contiguos on the disk } AB_TAR_LF_XHDR = 'x'; { MDH, POSIX, Next File has Extended Header } AB_TAR_LF_XGL = 'g'; { MDH, POSIX, Global Extended Header } AB_TAR_LF_DUMPDIR = 'D'; { FH, Extra GNU, Dump Directory} { Generated Dump of Files in a directory, has a size } AB_TAR_LF_LONGLINK = 'K'; { MDH, Extra GNU, Next File has Long LinkName} AB_TAR_LF_LONGNAME = 'L'; { MDH, Extra GNU, Next File has Long Name} AB_TAR_LF_MULTIVOL = 'M'; { FH, Extra GNU, MultiVolume File Cont.}{ End of a file that spans multiple TARs } AB_TAR_LF_SPARSE = 'S'; { FH, Extra GNU, Sparse File Cont.} AB_TAR_LF_VOLHDR = 'V'; { FH, Extra GNU, File is Volume Header } AB_TAR_LF_EXHDR = 'X'; { MDH, Extra GNU, Solaris Extended Header } { The only questionable MetaData type is 'V', file or meta-data? will treat as file header } AB_SUPPORTED_F_HEADERS = [AB_TAR_LF_OLDNORMAL, AB_TAR_LF_NORMAL, AB_TAR_LF_LINK, AB_TAR_LF_SYMLINK, AB_TAR_LF_DIR]; AB_UNSUPPORTED_F_HEADERS = [AB_TAR_LF_CHR, AB_TAR_LF_BLK, AB_TAR_LF_FIFO, AB_TAR_LF_CONTIG, AB_TAR_LF_DUMPDIR, AB_TAR_LF_MULTIVOL, AB_TAR_LF_SPARSE, AB_TAR_LF_VOLHDR]; AB_SUPPORTED_MD_HEADERS = [AB_TAR_LF_LONGNAME, AB_TAR_LF_LONGLINK]; AB_UNSUPPORTED_MD_HEADERS= [AB_TAR_LF_XHDR, AB_TAR_LF_XGL, AB_TAR_LF_EXHDR]; AB_GNU_MD_HEADERS = [AB_TAR_LF_LONGLINK, AB_TAR_LF_LONGNAME]; { If present then OLD_/GNU_FORMAT } AB_PAX_MD_HEADERS = [AB_TAR_LF_XHDR, AB_TAR_LF_XGL]; { If present then POSIX_FORMAT } AB_IGNORE_SIZE_HEADERS = [AB_TAR_LF_LINK, AB_TAR_LF_SYMLINK, AB_TAR_LF_CHR, AB_TAR_LF_BLK, AB_TAR_LF_DIR, AB_TAR_LF_FIFO]; { The rest of the Chars are unsupported and unknown types Treat those headers as File types } { Further link types may be defined later. } { Bits used in the mode field - values in octal } AB_TAR_TSUID = $0800; { Set UID on execution } AB_TAR_TSGID = $0400; { Set GID on execution } AB_TAR_TSVTX = $0200; { Save text (sticky bit) } type Arr8 = array [0..7] of AnsiChar; Arr12 = array [0..11] of AnsiChar; Arr12B = array[0..11] of Byte; ArrName = array [0..AB_TAR_NAMESIZE-1] of AnsiChar; TAbTarHeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); TAbTarItemType = (SUPPORTED_ITEM, UNSUPPORTED_ITEM, UNKNOWN_ITEM); TAbTarHeaderType = (FILE_HEADER, META_DATA_HEADER, MD_DATA_HEADER, UNKNOWN_HEADER); TAbTarMagicType = (GNU_OLD, NORMAL); TAbTarMagicRec = packed record case TAbTarMagicType of GNU_OLD: (gnuOld : array[0..7] of AnsiChar); { Old GNU magic: (Magic.gnuOld) } NORMAL : (value : array[0..5] of AnsiChar; { Magic value: (Magic.value)} version: array[0..1] of AnsiChar); { Version: (Magic.version) } end; { Notes from GNU Tar & POSIX Spec.: } {All the first 345 bytes are the same. } { "USTAR_header": Prefix(155): 345-499, empty(12): 500-511 } { "old_gnu_header": atime(12): 345-356, ctime(12): 357-368, offset(12): 369-380, longnames(4): 381-384, empty(1): 385, sparse structs(4x(12+12)=96): 386-481, isextended(1): 482, realsize(12): 483-494, empty(16): 495-511 } { "star_header": Prefix(131): 345-475, atime(12): 476-487, ctime(12): 488-499, empty(12): 500-511 } { "star_in_header": prefix(1): 345, empty(9): 346-354, isextended(1): 355, sparse structs(4x(12+12)=96): 356-451, realsize(12): 452-463, offset(12): 464-475, atime(12): 476-487, ctime(12): 488-499, empty(8): 500-507, xmagic(4): 508-511 } { "sparse_header": These two structs are the same, and they are Meta data about file. } {"star_ext_header": sparse structs(21x(12+12)=504): 0-503, isextended(1): 504 } {POSIX(PAX) extended header: is a buffer packed with content of this form: This if from the POSIX spec. References the C printf command string. "%d %s=%s\n". Then they are simply concatenated. } { PAX Extended Header Keywords: } { 'atime', 'charset', 'comment', 'ctime', 'gid', 'gname', 'linkpath', 'mtime', 'path', 'realtime.', 'security.', 'size', 'uid', 'uname' } { GNU Added PAX Extended Header Keywords: } { 'GNU.sparse.name', 'GNU.sparse.major', 'GNU.sparse.minor', 'GNU.sparse.realsize', 'GNU.sparse.numblocks', 'GNU.sparse.size', 'GNU.sparse.offset', 'GNU.sparse.numbytes', 'GNU.sparse.map', 'GNU.dumpdir', 'GNU.volume.label', 'GNU.volume.filename', 'GNU.volume.size', 'GNU.volume.offset' } { V7 uses AB_TAR_LF_OLDNORMAL linkflag, has no magic field & no Usr/Grp Names } { V7 Format ends Empty(padded with zeros), as does the POSIX record. } TAbTarEnd_Empty_Rec = packed record Empty: array[0..AB_TAR_V7_EMPTY_SIZE-1] of Byte; { 345-511, $159-1FF, Empty Space } end; { UStar End Format } TAbTarEnd_UStar_Rec = packed record Prefix: array[0..AB_TAR_USTAR_PREFIX_SIZE-1] of AnsiChar; { 345-499, $159-1F3, Prefix of file & path name, null terminated ASCII string } Empty : Arr12B;{ 500-512, $1F4-1FF, Empty Space } end; { Old GNU End Format } TAbTarEnd_GNU_old_Rec = packed record Atime : Arr12; { 345-356, $159-164, time of last access (UNIX Date in ASCII coded Octal)} Ctime : Arr12; { 357-368, $165-170, time of last status change (UNIX Date in ASCII coded Octal)} Offset: Arr12; { 369-380, $171-17C, Multirecord specific value } Empty1: array[0..AB_TAR_OLD_GNU_EMPTY1_SIZE-1] of Byte; { 381-385, $17D-181, Empty Space, Once contained longname ref. } Sparse: array[0..AB_TAR_OLD_GNU_SPARSE_SIZE-1] of Byte; { 386-481, $182-1E1, Sparse File specific values } IsExtended: byte;{ 482, $ 1E2, Flag to signify Sparse file headers follow } RealSize: Arr12;{ 483-494, $1E3-1EE, Real size of a Sparse File. } Empty2: array[0..AB_TAR_OLD_GNU_EMPTY2_SIZE-1] of Byte; { 495-511, $1EF-1FF, Empty Space } end; { Star End Format } TAbTarEnd_Star_Rec = packed record Prefix: array[0..AB_TAR_STAR_PREFIX_SIZE-1] of AnsiChar; { 345-499, $159-1F3, prefix of file & path name, null terminated ASCII string } Atime : Arr12; { 476-487, $1DC-1E7, time of last access (UNIX Date in ASCII coded Octal)} Ctime : Arr12; { 488-499, $1E8-1F3, time of last status change (UNIX Date in ASCII coded Octal)} Empty : Arr12B;{ 500-512, $1F4-1FF, Empty Space } end; { When support for sparse files is added, Add another record for sparse in header } { Note: SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE by design } PAbTarHeaderRec = ^TAbTarHeaderRec; { Declare pointer type for use in the list } TAbTarHeaderRec = packed record Name : ArrName; { 0- 99, $ 0- 63, filename, null terminated ASCII string, unless length is 100 } Mode : Arr8; { 100-107, $ 64- 6B, file mode (UNIX style, ASCII coded Octal) } uid : Arr8; { 108-115, $ 6C- 73, usrid # (UNIX style, ASCII coded Octal) } gid : Arr8; { 116-123, $ 74- 7B, grpid # (UNIX style, ASCII coded Octal) } Size : Arr12; { 124-135, $ 7C- 87, size of TARred file (ASCII coded Octal) } ModTime : Arr12; { 136-147, $ 88- 93, time of last modification.(UNIX Date in ASCII coded Octal) UTC time } ChkSum : Arr8; { 148-155, $ 94- 9B, checksum of header (6 bytes ASCII coded Octal, #00, #20) } LinkFlag: AnsiChar; { 156, $ 9C, type of item, one of the Link Flag constants from above } LinkName: ArrName; { 157-256, $ 9D-100, name of link, null terminated ASCII string } Magic : TAbTarMagicRec; { 257-264, $101-108, identifier, usually 'ustar'#00'00' } UsrName : array [0..AB_TAR_TUSRNAMELEN-1] of AnsiChar; { 265-296, $109-128, username, null terminated ASCII string } GrpName : array [0..AB_TAR_TGRPNAMELEN-1] of AnsiChar; { 297-328, $129-148, groupname, null terminated ASCII string } DevMajor: Arr8; { 329-336, $149-150, major device ID (UNIX style, ASCII coded Octal) } DevMinor: Arr8; { 337-344, $151-158, minor device ID (UNIX style, ASCII coded Octal) } case TAbTarHeaderFormat of{ 345-511, $159-1FF See byte Definitions above.} V7_FORMAT : ( v7 : TAbTarEnd_Empty_Rec ); OLDGNU_FORMAT: ( gnuOld: TAbTarEnd_GNU_old_Rec ); GNU_FORMAT : ( gnu : TAbTarEnd_GNU_old_Rec ); USTAR_FORMAT : ( ustar : TAbTarEnd_UStar_Rec ); STAR_FORMAT : ( star : TAbTarEnd_Star_Rec ); POSIX_FORMAT : ( pax : TAbTarEnd_Empty_Rec ); end;{ end TAbTarHeaderRec } { There are three main types of headers we will see in a Tar file } { TAbTarHeaderType = (STANDARD_HDR, SPARSE_HDR, POSIX_EXTENDED_HDR); } { The 1st is defined above, The later two are simply organized data types. } TAbTarItemRec = record { Note: that the actual The name needs to be coherient with the name Inherited from parent type TAbArchiveItem } Name : string; { Path & File name. } Mode : LongWord; { File Permissions } uid : Integer; { User ID } gid : Integer; { Group ID } Size : Int64; { Tared File size } ModTime : Int64; { Last time of Modification, in UnixTime } ChkSumPass : Boolean; { Header Check sum found to be good } LinkFlag : AnsiChar; { Link Flag, Echos the actual File Type of this Item. } ItemType : TAbTarItemType; { Item Type Assigned from LinkFlag Header Types. } LinkName : string; { Link Name } Magic : AnsiString; { Magic value } Version : Integer; { Version Number } UsrName : string; { User Name, for User ID } GrpName : string; { Group Name, for Group ID } DevMajor : Integer; { Major Device ID } DevMinor : Integer; { Minor Device ID } { Additional Types used for holding info. } AccessTime : Int64; { Time of Last Access, in UnixTime } ChangeTime : Int64; { Time of Last Status Change, in UnixTime } ArchiveFormat: TAbTarHeaderFormat; { Type of Archive of this record } StreamPosition: Int64; { Pointer to the top of the item in the file. } Dirty : Boolean; { Indication if this record needs to have its headers CheckSum recalculated } ItemReadOnly: Boolean; { Indication if this record is READ ONLY } FileHeaderCount:Integer;{ Number of Headers in the Orginal TarHeaders in the File Stream } end; type PTAbTarItem = ^TAbTarItem; TAbTarItem = class(TAbArchiveItem) private { The following private members are used for Stuffing FTarItem struct } procedure ParseTarHeaders; { Error in header if } procedure DetectHeaderFormat; { Helper to stuff HeaderFormat } procedure GetFileNameFromHeaders; { Helper to pull name from Headers } procedure GetLinkNameFromHeaders; { Helper to pull name from Headers } function TestCheckSum: Boolean; { Helper to Calculate Checksum of a header. } procedure DoGNUExistingLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); procedure DoGNUNewLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); protected {private} PTarHeader: PAbTarHeaderRec;{ Points to FTarHeaderList.Items[FTarHeaderList.Count-1] } FTarHeaderList: TList; { List of The Headers } FTarHeaderTypeList: TList; { List of the Header Types } FTarItem: TAbTarItemRec; { Data about current TAR Item } protected function GetDevMajor: Integer; function GetDevMinor: Integer; function GetGroupID: Integer; function GetGroupName: string; function GetLinkName: string; function GetUserID: Integer; function GetUserName: string; function GetModTime: Int64; function GetNumHeaders: Integer; function GetMagic: string; { All Sets shall update the headers Or add headers as needed. } procedure SetDevMajor(const Value: Integer); procedure SetDevMinor(const Value: Integer); procedure SetGroupID(const Value: Integer); { Extended Headers } procedure SetGroupName(const Value: string); { Extended Headers } procedure SetLinkFlag(Value: AnsiChar); procedure SetLinkName(const Value: string); { Extended Headers } procedure SetUserID(const Value: Integer); { Extended Headers } procedure SetUserName(const Value: string); { Extended Headers } procedure SetModTime(const Value: Int64); Procedure SetMagic(const Value: string); { TODO: add support for Atime and Ctime here } { Overrides for Inherited Properties from type TAbArchiveItem } function GetCompressedSize : Int64; override; function GetExternalFileAttributes : LongWord; override; function GetFileName : string; override; function GetIsDirectory: Boolean; override; function GetIsEncrypted : Boolean; override; function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; function GetNativeFileAttributes : LongInt; override; function GetNativeLastModFileTime: Longint; override; function GetUncompressedSize : Int64; override; procedure SetCompressedSize(const Value : Int64); override; { Extended Headers } procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string); override; { Extended Headers } procedure SetIsEncrypted(Value : Boolean); override; procedure SetLastModFileDate(const Value : Word); override; { Extended Headers } procedure SetLastModFileTime(const Value : Word); override; { Extended Headers } procedure SetLastModTimeAsDateTime(const Value: TDateTime); override; procedure SetUncompressedSize(const Value : Int64); override; { Extended Headers } procedure SaveTarHeaderToStream(AStream : TStream); procedure LoadTarHeaderFromStream(AStream : TStream); property Magic : string { Magic value } read GetMagic write SetMagic; public { property Name : STRING; Path & File name. Inherited from parent type TAbArchiveItem } { read GetFileName write SetFileName; overridden above} property Mode : LongWord { File Permissions } read GetExternalFileAttributes write SetExternalFileAttributes; property UserID : Integer { User ID } read GetUserID write SetUserID; property GroupID : Integer { Group ID } read GetGroupID write SetGroupID; property ModTime : Int64 read GetModTime write SetModTime; { property UncompressedSize/CompressedSize(Size): Int64; File size (comp/uncomp) Inherited from parent type TAbArchiveItem } { read GetUncompressedSize, GetCompressedSize; overridden above } { write SetUncompressedSize, SetCompressedSize; overridden above } { property LastModFileTime/LastModFileDate(ModeTime): TDateTime; Last time of Modification Inherited from parent type TAbArchiveItem } { read GetLastModFileTime, GetLastModFileDate; overridden above } { write SetLastModFileTime, SetLastModFileDate; overridden above } property CheckSumGood: Boolean read FTarItem.ChkSumPass; { Header Check sum found to be good } property LinkFlag : AnsiChar { Link Flag of File Header } read FTarItem.LinkFlag write SetLinkFlag; property LinkName : string { Link Name } read GetLinkName write SetLinkName; property UserName : string { User Name, for User ID } read GetUserName write SetUserName; property GroupName : string { Group Name, for Group ID } read GetGroupName write SetGroupName; property DevMajor : Integer { Major Device ID } read GetDevMajor write SetDevMajor; property DevMinor : Integer { Minor Device ID } read GetDevMinor write SetDevMinor; { TODO: Add support ATime and CTime } {AccessTime : TDateTime;} { Time of Last Access } {ChangeTime : TDateTime;} { Time of Last Status Change } { Additional Types used for holding info. } property ExternalFileAttributes; property ArchiveFormat: TAbTarHeaderFormat read FTarItem.ArchiveFormat write FTarItem.ArchiveFormat; property ItemType: TAbTarItemType read FTarItem.ItemType write FTarItem.ItemType; property ItemReadOnly: Boolean read FTarItem.ItemReadOnly write FTarItem.ItemReadOnly; property FileHeaderCount: Integer read FTarItem.FileHeaderCount; property HeaderCount: Integer read GetNumHeaders; property StreamPosition: Int64 read FTarItem.StreamPosition write FTarItem.StreamPosition; constructor Create; destructor Destroy; override; end; { end TAbArchiveItem } TAbTarStreamHelper = class(TAbArchiveStreamHelper) private function FindItem: Boolean; { Tool for FindFirst/NextItem functions } protected FTarHeader : TAbTarHeaderRec; { Speed-up Buffer only } FCurrItemSize : Int64; { Current Item size } FCurrItemPreHdrs: Integer; { Number of Meta-data Headers before the Item } public destructor Destroy; override; procedure ExtractItemData(AStream : TStream); override; function FindFirstItem : Boolean; override; function FindNextItem : Boolean; override; procedure ReadHeader; override; procedure ReadTail; override; function SeekItem(Index : Integer): Boolean; override; procedure WriteArchiveHeader; override; procedure WriteArchiveItem(AStream : TStream); override; procedure WriteArchiveItemSize(AStream : TStream; Size: Int64); procedure WriteArchiveTail; override; function GetItemCount : Integer; override; end; TAbTarArchive = class(TAbArchive) private FArchReadOnly : Boolean; FArchFormat: TAbTarHeaderFormat; protected function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function FixName(const Value: string): string; override; function GetSupportsEmptyFolders: Boolean; override; function GetItem(Index: Integer): TAbTarItem; procedure PutItem(Index: Integer; const Value: TAbTarItem); public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; property UnsupportedTypesDetected : Boolean read FArchReadOnly; property Items[Index : Integer] : TAbTarItem read GetItem write PutItem; default; end; procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; out Permissions: LongWord; out LinkFlag: AnsiChar); procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; out UnixAttrs: LongWord); function VerifyTar(Strm : TStream) : TAbArchiveType; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF MSWINDOWS} Math, RTLConsts, SysUtils, AbVMStrm, AbExcept, DCOSUtils, DCClassesUtf8, DCConvertEncoding; { ****************** Helper functions Not from Classes Above ***************** } function OctalToInt(const Oct : PAnsiChar; aLen : integer): Int64; var i : integer; begin Result := 0; i := 0; while (i < aLen) and (Oct[i] = ' ') do inc(i); if (i = aLen) then Exit; while (i < aLen) and (Oct[i] in ['0'..'7']) do begin Result := (Result * 8) + (Ord(Oct[i]) - Ord('0')); inc(i); end; end; function IntToOctal(Value : Int64): AnsiString; const OctDigits : array[0..7] of AnsiChar = '01234567'; begin if Value = 0 then Result := '0' else begin Result := ''; while Value > 0 do begin Result := OctDigits[Value and 7] + Result; Value := Value shr 3; end; end; end; function CalcTarHeaderChkSum(const TarH : TAbTarHeaderRec): LongInt; var HdrBuffer : PAnsiChar; HdrChkSum : LongInt; j : Integer; begin { prepare for the checksum calculation } HdrBuffer := PAnsiChar(@TarH); HdrChkSum := 0; {calculate the checksum, a simple sum of the bytes in the header} for j := 0 to Pred(SizeOf(TAbTarHeaderRec)) do HdrChkSum := HdrChkSum + Ord(HdrBuffer[j]); Result := HdrChkSum; end; function VerifyTar(Strm : TStream) : TAbArchiveType; { assumes Tar positioned correctly for test of item } var TarItem : TAbTarItem; StartPos : Int64; begin StartPos := Strm.Position; try { Verifies that the header checksum is valid, and Item type is understood. This does not mean that extraction is supported. } TarItem := TAbTarItem.Create; try { get current Tar Header } TarItem.LoadTarHeaderFromStream(Strm); if TarItem.CheckSumGood then Result := atTar else Result := atUnknown; finally TarItem.Free; end; except on EReadError do Result := atUnknown; end; Strm.Position := StartPos; end; function PadString(const S : AnsiString; Places : Integer) : AnsiString; { Pads a string (S) with one right space and as many left spaces as needed to fill Places If length S greater than Places, just returns S Some TAR utilities evidently expect Octal numeric fields to be in this format } begin if Length(S) >= LongInt(Places) then Result := S else begin Result := S + ' '; Result := StringOfChar(AnsiChar(' '), Places - Length(Result)) + Result; end; end; { Round UP to the nearest Tar Block Boundary. } function RoundToTarBlock(Size: Int64) : Int64; begin Result := (Size + (AB_TAR_RECORDSIZE - 1)) and not (AB_TAR_RECORDSIZE - 1); end; procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; out Permissions: LongWord; out LinkFlag: AnsiChar); begin case (UnixAttrs and $F000) of AB_FMODE_SOCKET: ; AB_FMODE_FILELINK: LinkFlag := AB_TAR_LF_SYMLINK; AB_FMODE_FILE2: LinkFlag := AB_TAR_LF_NORMAL; AB_FMODE_BLOCKSPECFILE: LinkFlag := AB_TAR_LF_BLK; AB_FMODE_DIR: LinkFlag := AB_TAR_LF_DIR; AB_FMODE_CHARSPECFILE: LinkFlag := AB_TAR_LF_CHR; AB_FMODE_FIFO: LinkFlag := AB_TAR_LF_FIFO; AB_FMODE_FILE: LinkFlag := AB_TAR_LF_NORMAL; else LinkFlag := AB_TAR_LF_OLDNORMAL; end; Permissions := (UnixAttrs and $0FFF); end; { -------------------------------------------------------------------------- } procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; out UnixAttrs: LongWord); begin case LinkFlag of AB_TAR_LF_OLDNORMAL: UnixAttrs := AB_FMODE_FILE; AB_TAR_LF_NORMAL: UnixAttrs := AB_FMODE_FILE2; AB_TAR_LF_SYMLINK: UnixAttrs := AB_FMODE_FILELINK; AB_TAR_LF_BLK: UnixAttrs := AB_FMODE_BLOCKSPECFILE; AB_TAR_LF_DIR: UnixAttrs := AB_FMODE_DIR; AB_TAR_LF_CHR: UnixAttrs := AB_FMODE_CHARSPECFILE; AB_TAR_LF_FIFO: UnixAttrs := AB_FMODE_FIFO; else UnixAttrs := AB_FMODE_FILE; end; UnixAttrs := UnixAttrs or (Permissions and $0FFF); end; { ****************************** TAbTarItem ********************************** } constructor TAbTarItem.Create; begin inherited Create; FTarHeaderList := TList.Create; FTarHeaderTypeList := TList.Create; GetMem(PTarHeader, AB_TAR_RECORDSIZE); { PTarHeader is our new Header } FillChar(PTarHeader^, AB_TAR_RECORDSIZE, #0); FTarHeaderList.Add(PTarHeader); FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); FTarItem.FileHeaderCount := 1; { set defaults } FTarItem.ArchiveFormat := UNKNOWN_FORMAT; FileName := ''; Mode := AB_FPERMISSION_GENERIC; UserID := 0; GroupID := 0; UncompressedSize := 0; { ModTime } LinkFlag := AB_TAR_LF_OLDNORMAL; { Link Name } PTarHeader.Magic.gnuOld := AB_TAR_MAGIC_V7_NONE; { Default to GNU type } UserName := ''; GroupName := ''; DevMajor := 0; DevMinor := 0; { TODO: atime, ctime } FTarItem.ItemType := SUPPORTED_ITEM; FTarItem.Dirty := True; { Checksum needs to be generated } FTarItem.ItemReadOnly := False; end; destructor TAbTarItem.Destroy; var i : Integer; begin if Assigned(FTarHeaderList) then begin for i := 0 to FTarHeaderList.Count - 1 do FreeMem(FTarHeaderList.Items[i]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Free; end; FTarHeaderTypeList.Free; inherited Destroy; end; function TAbTarItem.GetCompressedSize: Int64; { TAR includes no internal compression, returns same value as GetUncompressedSize } begin Result := FTarItem.Size; end; function TAbTarItem.GetDevMajor: Integer; begin Result := FTarItem.DevMajor; end; function TAbTarItem.GetDevMinor: Integer; begin Result := FTarItem.DevMinor; end; function TAbTarItem.GetExternalFileAttributes: LongWord; begin TarAttrsToUnixAttrs(FTarItem.Mode, FTarItem.LinkFlag, Result); end; function TAbTarItem.GetFileName: string; begin Result := FTarItem.Name; { Inherited String from Parent Class } end; function TAbTarItem.GetGroupID: Integer; begin Result := FTarItem.gid; end; function TAbTarItem.GetGroupName: string; begin Result := FTarItem.GrpName; end; function TAbTarItem.GetIsDirectory: Boolean; begin Result := (LinkFlag = AB_TAR_LF_DIR); end; function TAbTarItem.GetIsEncrypted: Boolean; begin { TAR has no native encryption } Result := False; end; function TAbTarItem.GetLastModFileDate: Word; begin { convert to local DOS file Date } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Hi; end; function TAbTarItem.GetLastModFileTime: Word; begin { convert to local DOS file Time } Result := LongRec(AbDateTimeToDosFileDate(LastModTimeAsDateTime)).Lo; end; function TAbTarItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbUnixTimeToLocalDateTime(FTarItem.ModTime); end; function TAbTarItem.GetNativeLastModFileTime: Longint; {$IFDEF MSWINDOWS} var DateTime: TDateTime; {$ENDIF} begin Result := Self.ModTime; {$IFDEF MSWINDOWS} DateTime := AbUnixTimeToLocalDateTime(Result); Result := AbDateTimeToDosFileDate(DateTime); {$ENDIF} end; function TAbTarItem.GetLinkName: string; begin Result := FTarItem.LinkName; end; function TAbTarItem.GetMagic: string; begin Result := string(FTarItem.Magic); end; function TAbTarItem.GetNativeFileAttributes : LongInt; begin Result := GetExternalFileAttributes; {$IFDEF MSWINDOWS} Result := AbUnix2DosFileAttributes(Result); {$ENDIF} end; function TAbTarItem.GetUncompressedSize: Int64; { TAR includes no internal compression, returns same value as GetCompressedSize } begin Result := FTarItem.Size; end; function TAbTarItem.GetUserID: Integer; begin Result := FTarItem.uid; end; function TAbTarItem.GetUserName: string; begin Result := FTarItem.UsrName; end; function TAbTarItem.GetModTime: Int64; begin Result := FTarItem.ModTime; end; { Get Number of tar headers currently for this item } function TAbTarItem.GetNumHeaders: Integer; begin Result := FTarHeaderList.Count; end; { Takes data from Supported Header types stored in TAbTarItem.FTarHeaderList } { and updates values in the TAbTarItem.FTarItem.X } procedure TAbTarItem.DetectHeaderFormat; begin if FTarItem.ArchiveFormat <> UNKNOWN_FORMAT then Exit;{ We have already set the format. } { In the previous header parsing if pax headers are detected the format is changed } { GNU_FORMAT is detected by the presence of GNU extended headers. } { These detections are similar to GNU tar's. } if (PTarHeader.Magic.value = AB_TAR_MAGIC_VAL) then begin { We have one of three types, STAR_FORMAT, USTAR_FORMAT, POSIX_FORMAT } { Detect STAR format. Leave disabled until explicit STAR support is added. } {if (PTarHeader.star.Prefix[130] = #00) and (PTarHeader.star.Atime[0] in ['0'..'7']) and (PTarHeader.star.Atime[11] = #20) and (PTarHeader.star.Ctime[0]in ['0'..'7']) and (PTarHeader.star.Ctime[11] = #20) then begin FTarItme.ArchiveType := STAR_FORMAT; end } { else if } { POSIX uses the existance of x headers } { This can define false positives, Pax headers/ STAR format could be detected as this } FTarItem.ArchiveFormat := USTAR_FORMAT; end else if (PTarHeader.Magic.gnuOld = AB_TAR_MAGIC_GNUOLD) then begin FTarItem.ArchiveFormat := OLDGNU_FORMAT; end else { V7 uses AB_TAR_LF_OLDNORMAL linkflag, has no magic field & no Usr/Grp Names } begin FTarItem.ArchiveFormat := V7_FORMAT; { Lowest Common Denominator } end; end; { Extract the file name from the headers } procedure TAbTarItem.GetFileNameFromHeaders; var I, J : Integer; PHeader: PAbTarHeaderRec; FoundName: Boolean; NameLength : Int64; NumMHeaders: integer; ExtraName: integer; RawFileName, TempStr: AnsiString; begin { UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT } FoundName := False; I := 0; while (not FoundName) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGNAME then begin FoundName := True; RawFileName := ''; NameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size)); NumMHeaders := NameLength div AB_TAR_RECORDSIZE; ExtraName := NameLength mod AB_TAR_RECORDSIZE; { Chars in the last Header } { NumMHeaders should never be zero } { It appears that it is not null terminated in the blocks } for J := 1 to NumMHeaders do begin { Copy entire content of Header to String } PHeader := FTarHeaderList.Items[I+J]; SetString(TempStr, PAnsiChar(PHeader), AB_TAR_RECORDSIZE); RawFileName := RawFileName + TempStr; end; if ExtraName <> 0 then begin PHeader := FTarHeaderList.Items[I+NumMHeaders+1]; SetString(TempStr, PAnsiChar(PHeader), ExtraName-1); RawFileName := RawFileName + TempStr; end else { We already copied the entire name, but the string is still null terminated. } begin { Removed the last zero } SetLength(RawFileName, (Length(RawFileName)-1)); end; end { end long filename link flag } else I := I + 1; end; { End While } if not FoundName then begin if (FTarItem.ArchiveFormat = USTAR_FORMAT) and (PTarHeader.ustar.Prefix[0] <> #0) then RawFileName := PTarHeader.ustar.Prefix+'/'+PTarHeader.Name else { V7_FORMAT, OLDGNU_FORMAT } RawFileName := PTarHeader.Name; end; { End not FoundName } FTarItem.Name := CeRawToUtf8(RawFileName); end; { Extract the file name from the headers } procedure TAbTarItem.GetLinkNameFromHeaders; var I, J : Integer; PHeader: PAbTarHeaderRec; FoundName: Boolean; NameLength : Int64; NumMHeaders: integer; ExtraName: integer; RawLinkName, TempStr: AnsiString; begin { UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT } PHeader := nil; FoundName := False; I := 0; { Note that: FTarHeaderList.Count <= 1, always } while (not FoundName) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGLINK then begin FoundName := True; RawLinkName := ''; NameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size)); NumMHeaders := NameLength div AB_TAR_RECORDSIZE; ExtraName := NameLength mod AB_TAR_RECORDSIZE; { Chars in the last Header } { NumMHeaders should never be zero } { It appears that it is not null terminated in the blocks } for J := 1 to NumMHeaders do begin { Copy entire content of Header to String } PHeader := FTarHeaderList.Items[I+J]; SetString(TempStr, PAnsiChar(PHeader), AB_TAR_RECORDSIZE); RawLinkName := RawLinkName + TempStr; end; if ExtraName <> 0 then begin PHeader := FTarHeaderList.Items[I+NumMHeaders+1]; SetString(TempStr, PAnsiChar(PHeader), ExtraName-1); RawLinkName := RawLinkName + TempStr; end else { We already copied the entire name, but the string is still null terminated. } begin { Removed the last zero } SetLength(RawLinkName, (Length(RawLinkName)-1)); end; end { end long filename link flag } else I := I + 1; end; { End While } if not FoundName then RawLinkName := PHeader.LinkName; FTarItem.LinkName := CeRawToUtf8(RawLinkName); end; { Return True if CheckSum passes out. } function TAbTarItem.TestCheckSum : Boolean; var TarChkSum : LongInt; TarChkSumArr : Arr8; { ChkSum field is Arr8 } PHeader: PAbTarHeaderRec; I: Integer; begin Result := True; { Check sums are in valid headers but NOT in the data headers. } for I := 0 to FTarHeaderList.Count - 1 do begin if TAbTarHeaderType(FTarHeaderTypeList.Items[I]) in [FILE_HEADER, META_DATA_HEADER] then begin PHeader := FTarHeaderList.Items[i]; { Save off old Check sum } Move(PHeader.ChkSum, TarChkSumArr, SizeOf(PHeader.ChkSum)); TarChkSum := OctalToInt(TarChkSumArr, SizeOf(TarChkSumArr)); { Set to Generator Value } PHeader.ChkSum := AB_TAR_CHKBLANKS; if CalcTarHeaderChkSum(PHeader^) <> TarChkSum then Result := False; { Pass unless one miss-compares } { Save back old checksum } Move(TarChkSumArr, PHeader.ChkSum, SizeOf(TarChkSumArr)); end; end; end; procedure TAbTarItem.ParseTarHeaders; begin { The final index is the Item index } DetectHeaderFormat; { Long term this parsing is not correct, as the values in extended headers override the later values in this header } FTarItem.Mode := OctalToInt(PTarHeader.Mode, SizeOf(PTarHeader.Mode)); FTarItem.uid := OctalToInt(PTarHeader.uid, SizeOf(PTarHeader.uid)); { Extended in PAX Headers } FTarItem.gid := OctalToInt(PTarHeader.gid, SizeOf(PTarHeader.gid)); { Extended in PAX Headers } FTarItem.Size := OctalToInt(PTarHeader.Size, SizeOf(PTarHeader.Size)); { Extended in PAX Headers } { ModTime should be an Int64 but no tool support, No issues until Feb 6th, 2106 :) } { ModTime is Extended in PAX Headers } FTarItem.ModTime := OctalToInt(PTarHeader.ModTime, SizeOf(PTarHeader.ModTime)); FTarItem.ChkSumPass := TestCheckSum(); FTarItem.LinkFlag := PTarHeader.LinkFlag; GetLinkNameFromHeaders; { Extended in PAX Headers } FTarItem.Magic := PTarHeader.Magic.value; FTarItem.Version := OctalToInt(PTarHeader.Magic.version, SizeOf(PTarHeader.Magic.version)); FTarItem.UsrName := string(PTarHeader.UsrName); { Extended in PAX Headers } FTarItem.GrpName := string(PTarHeader.GrpName); { Extended in PAX Headers } FTarItem.DevMajor := OctalToInt(PTarHeader.DevMajor, SizeOf(PTarHeader.DevMajor)); FTarItem.DevMinor := OctalToInt(PTarHeader.DevMinor, SizeOf(PTarHeader.DevMinor)); GetFileNameFromHeaders; { FTarItem.ArchiveFormat; Already stuffed } { FTarItem.StreamPosition: Already Stuffed } { FTarItem.Dirty; Stuffed upon creaction } end; procedure TAbTarItem.LoadTarHeaderFromStream(AStream: TStream); var NumMHeaders : Integer; I : Integer; FoundItem : Boolean; begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } { We should expect FindNext/FirstItem, and next check for bounds. } if FTarHeaderList.Count > 0 then begin { We're Going to stomp over the headers that are already present } { We need to destory the memory we've used } PTarHeader := nil; for i := 0 to FTarHeaderList.Count - 1 do FreeMem(FTarHeaderList.Items[i]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Clear; FTarHeaderTypeList.Clear; FTarItem.FileHeaderCount := 0; { All pointers should now be removed from those headers } end; { Now lets start filling up that list. } FTarItem.ItemType := UNKNOWN_ITEM; { We don't know what we have yet } FoundItem := False; while not FoundItem do begin { Create a Header to be Stored in the Items List } GetMem(PTarHeader, AB_TAR_RECORDSIZE); AStream.ReadBuffer(PTarHeader^, AB_TAR_RECORDSIZE); FTarHeaderList.Add(PTarHeader); { Store the Header to the list } { Parse header based on LinkFlag } if PTarHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { This Header type is in the Set of un/supported Meta data type headers } if PTarHeader.LinkFlag in AB_UNSUPPORTED_MD_HEADERS then FTarItem.ItemReadOnly := True; { We don't fully support this meta-data type } if (PTarHeader.LinkFlag in AB_PAX_MD_HEADERS) and (PTarHeader.Magic.value = AB_TAR_MAGIC_VAL) then FTarItem.ArchiveFormat := POSIX_FORMAT; { We have a POSIX_FORMAT, has x headers, and Magic matches } if PTarHeader.LinkFlag in AB_GNU_MD_HEADERS then FTarItem.ArchiveFormat := OLDGNU_FORMAT; { We have a OLDGNU_FORMAT, has L/K headers } { There can be a unknown number of Headers of data } { We are for sure going to read at least one more header, but are we going to read more than that? } FTarHeaderTypeList.Add(Pointer(META_DATA_HEADER)); NumMHeaders := Ceil(OctalToInt(PTarHeader.Size, SizeOf(PTarHeader.Size)) / AB_TAR_RECORDSIZE); { NumMHeasder should never be zero } for I := 1 to NumMHeaders do begin GetMem(PTarHeader, AB_TAR_RECORDSIZE); { Create a new Header } AStream.ReadBuffer(PTarHeader^, AB_TAR_RECORDSIZE); { Get the Meta Data } FTarHeaderList.Add(PTarHeader); { Store the Header to the list } FTarHeaderTypeList.Add(Pointer(MD_DATA_HEADER)); end; { Loop and reparse } end else if PTarHeader.LinkFlag in AB_SUPPORTED_F_HEADERS then begin { This Header type is in the Set of supported File type Headers } FoundItem := True; { Exit Criterion } FTarItem.ItemType := SUPPORTED_ITEM; if FTarItem.ItemReadOnly then { Since some of the Headers are read only. } FTarItem.ItemType := UNSUPPORTED_ITEM; { This Item is unsupported } FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); end else if PTarHeader.LinkFlag in AB_UNSUPPORTED_F_HEADERS then begin { This Header type is in the Set of unsupported File type Headers } FoundItem := True; { Exit Criterion } FTarItem.ItemType := UNSUPPORTED_ITEM; FTarHeaderTypeList.Add(Pointer(FILE_HEADER)); end else { These are unknown header types } begin { Note: Some of these unknown types could have known Meta-data headers } FoundItem := True; FTarItem.ItemType := UNKNOWN_ITEM; FTarHeaderTypeList.Add(Pointer(UNKNOWN_HEADER)); end;{ end LinkFlag parsing } end; { end Found Item While } { PTarHeader points to FTarHeaderList.Items[FTarHeaderList.Count-1]; } { Re-wind the Stream back to the begining of this Item inc. all headers } AStream.Seek(-(FTarHeaderList.Count*AB_TAR_RECORDSIZE), soFromCurrent); { AStream.Position := FTarItem.StreamPosition; } { This should be equivalent as above } FTarItem.FileHeaderCount := FTarHeaderList.Count; if FTarItem.ItemType <> UNKNOWN_ITEM then begin ParseTarHeaders; { Update FTarItem values } FFileName := FTarItem.Name; {FTarHeader.Name;} // FDiskFileName := FileName; // AbUnfixName(FDiskFileName); end; Action := aaNone; Tagged := False; end; { ****************** BEGIN SET ********************** } procedure TAbTarItem.SaveTarHeaderToStream(AStream: TStream); var i : Integer; j : Integer; PHeader : PAbTarHeaderRec; HdrChkSum : Integer; HdrChkStr : AnsiString; HdrBuffer : PAnsiChar; SkipNextChkSum: Integer; SkipChkSum: Boolean; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } if FTarItem.Dirty then SkipNextChkSum := 0 else SkipNextChkSum := FTarHeaderList.Count; { Don't recalc any chkSums } { The first header in the Item list must have a checksum calculation } for i := 0 to (FTarHeaderList.Count-1) do begin SkipChkSum := False; PHeader := FTarHeaderList.Items[i]; if (SkipNextChkSum = 0) then begin { We need to parse this header } if PHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { We have a Meta-Data Header, Calculate how many headers to skip. } { These meta-data headers have non-Header buffers after this Header } SkipNextChkSum := Ceil(OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); { Ceil will mandate one run through, and will handle 512 correctly } end else if PHeader.LinkFlag in AB_SUPPORTED_F_HEADERS then begin SkipNextChkSum := 0; end else begin { Un-Supported Header type, Copy but do nothing to the data } SkipNextChkSum := 0; SkipChkSum := True; end;{ end LinkFlag parsing } end else begin { Do not calcuate the check sum on this meta Data header buffer } SkipNextChkSum := SkipNextChkSum - 1; SkipChkSum := True; end;{ end SkipNextChkSum } if not SkipChkSum then begin { We are Calculating the Checksum for this Header } {Tar ChkSum is "odd" The check sum field is filled with #20 chars as empty } { ChkSum field itself is #20'd and has an effect on the sum } PHeader.ChkSum := AB_TAR_CHKBLANKS; { Set up the buffers } HdrBuffer := PAnsiChar(PHeader); HdrChkSum := 0; { Calculate the checksum, a simple sum of the bytes in the header } for j := 0 to (AB_TAR_RECORDSIZE-1) do HdrChkSum := HdrChkSum + Ord(HdrBuffer[j]); { set the checksum in the header } HdrChkStr := PadString(IntToOctal(HdrChkSum), SizeOf(PHeader.ChkSum)); Move(HdrChkStr[1], PHeader.ChkSum, Length(HdrChkStr)); end; { end Skip Check Sum } { write header to the file } AStream.Write(PHeader^, AB_TAR_RECORDSIZE); end; { End for the number of headers in the list } { Updated here as the stream is now updated to the latest number of headers } FTarItem.FileHeaderCount := FTarHeaderList.Count; end; procedure TAbTarItem.SetCompressedSize(const Value: Int64); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Size is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.Size := Value; { Store our Vitrual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.Size, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetDevMajor(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Dev Major and Minor are Only used for AB_TAR_LF_CHR, AB_TAR_LF_BLK } { Otherwise they are stuffed with #00 } FTarItem.DevMajor := Value; { Store to the struct } S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.DevMajor, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetDevMinor(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Dev Major and Minor are Only used for AB_TAR_LF_CHR, AB_TAR_LF_BLK } { Otherwise they are stuffed with #00 } FTarItem.DevMinor := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.DevMinor, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetExternalFileAttributes(Value: LongWord); var S : AnsiString; I: Integer; Permissions: LongWord; ALinkFlag: AnsiChar; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; UnixAttrsToTarAttrs(Value, Permissions, ALinkFlag); FTarItem.Mode := Permissions; S := PadString(IntToOctal(Permissions), SizeOf(Arr8)); for I := 0 to FTarHeaderList.Count - 1 do if TAbTarHeaderType(FTarHeaderTypeList.Items[I]) in [FILE_HEADER, META_DATA_HEADER] then Move(S[1], PAbTarHeaderRec(FTarHeaderList.Items[I]).Mode, Length(S)); Self.LinkFlag := ALinkFlag; // also updates headers FTarItem.Dirty := True; end; { Add/Remove Headers as needed To/From Existing GNU Long (Link/Name) TarItems } procedure TAbTarItem.DoGNUExistingLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); var PHeader: PAbTarHeaderRec; J: Integer; OldNameLength: Integer; TotalOldNumHeaders: Integer; TotalNewNumHeaders: Integer; NumHeaders: Integer; ExtraName: Integer; tempStr: AnsiString; begin PHeader := FTarHeaderList.Items[I]; { Need this data from the old header } OldNameLength := OctalToInt(PHeader.Size, SizeOf(PHeader.Size));{ inlcudes Null termination } { Length(FTarItem.Name)+1 = OldNameLength; }{ This should be true, always } { Save off the new Length, so we don't have to change the pointers later. } tempStr := PadString(IntToOctal(Length(Value)+1), SizeOf(PHeader.Size)); Move(tempStr[1], PHeader.Size, Length(tempStr)); TotalOldNumHeaders := Ceil(OldNameLength / AB_TAR_RECORDSIZE); TotalNewNumHeaders := Ceil((Length(Value)+1) / AB_TAR_RECORDSIZE);{ Null terminated } {Length(Value)+1: 1-512 = 1, 513-1024 = 2 ... } J := TotalOldNumHeaders - TotalNewNumHeaders; while J <> 0 do begin if J > 0 then begin { Old > New, Have to many Headers, Remove } FreeMem(FTarHeaderList.Items[I+J]); { Free the Memory for the extra Header } FTarHeaderList.Delete(I+J); { Delete the List index } FTarHeaderTypeList.Delete(I+J); J := J - 1; end else { if J < 0 then } begin { Old < New, Need more Headers, Insert } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I+1,PHeader);{ Insert: Inserts at index } FTarHeaderTypeList.Insert(I+1,Pointer(MD_DATA_HEADER));{ We are only adding MD Data headers here } J := J + 1; end; end;{ end numHeaders while } { Yes, GNU Tar adds a Nil filled MD data header if Length(Value) mod AB_TAR_RECORDSIZE = 0 } NumHeaders := (Length(Value)+1) div AB_TAR_RECORDSIZE; { Include Null terminator } ExtraName := (Length(Value)+1) mod AB_TAR_RECORDSIZE; { Chars in the last Header } { Now we have the number of headers set up, stuff the name in the Headers } TempStr := AnsiString(Value); for J := 1 to NumHeaders do begin { Copy entire next AB_TAR_RECORDSIZE bytes of tempString to content of Header } { There may only be AB_TAR_RECORDSIZE-1 bytes if this is the last rounded header } PHeader := FTarHeaderList.Items[I+J]; Move(TempStr[1], PHeader^, AB_TAR_RECORDSIZE); if Length(TempStr) >= AB_TAR_RECORDSIZE then Delete(TempStr, 1, AB_TAR_RECORDSIZE);{ Crop string } end; if ExtraName <> 0 then begin { Copy whatever is left in tempStr into the rest of the buffer } PHeader := FTarHeaderList.Items[I+NumHeaders+1]; FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } Move(TempStr[1], PHeader^, ExtraName-1); { The string is null terminated } end else { We already copied the entire name, but it must be null terminated } begin FillChar(Pointer(PtrInt(PHeader)+AB_TAR_RECORDSIZE-1)^, 1, #0); { Zero rest of the block } end; { Finally we need to stuff the file type Header. } { Note: Value.length > AB_TAR_NAMESIZE(100) } if LinkFlag = AB_TAR_LF_LONGNAME then Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; { Always inserts the L/K Headers at index 0+ } procedure TAbTarItem.DoGNUNewLongNameLink(LinkFlag: AnsiChar; I: Integer; const Value: AnsiString); var PHeader: PAbTarHeaderRec; J: Integer; NumHeaders: Integer; ExtraName: Integer; tempStr: AnsiString; begin { We have a GNU_FORMAT, and no L/K Headers.} { Add a new MD Header and MD Data Headers } { Make an L/K header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I, PHeader);{ Insert: Inserts at base index } FTarHeaderTypeList.Insert(I, Pointer( META_DATA_HEADER));{ This is the L/K Header } FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } StrPCopy(PHeader.Name, AB_TAR_L_HDR_NAME); { Stuff L/K String Name } StrPCopy(PHeader.Mode, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } StrPCopy(PHeader.uid, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } StrPCopy(PHeader.gid, AB_TAR_L_HDR_ARR8_0); { Stuff zeros } tempStr := PadString(IntToOctal(Length(Value)+1), SizeOf(PHeader.Size)); { Stuff Size } Move(tempStr[1], PHeader.Size, Length(tempStr)); StrPCopy(PHeader.ModTime, AB_TAR_L_HDR_ARR12_0); { Stuff zeros } { Check sum will be calculated as the Dirty flag is in caller. } PHeader.LinkFlag := LinkFlag; { Stuff Link FlagSize } StrPCopy(PHeader.Magic.gnuOld, AB_TAR_MAGIC_GNUOLD); { Stuff the magic } StrPCopy(PHeader.UsrName, AB_TAR_L_HDR_USR_NAME); StrPCopy(PHeader.GrpName, AB_TAR_L_HDR_GRP_NAME); { All else stays as Zeros. } { Completed with L/K Header } { OK, now we need to add the proper number of MD Data Headers, and intialize to new name } { Yes, GNU Tar adds an extra Nil filled MD data header if Length(Value) mod AB_TAR_RECORDSIZE = 0 } NumHeaders := Ceil((Length(Value)+1) / AB_TAR_RECORDSIZE); { Include Null terminator } ExtraName := (Length(Value)+1) mod AB_TAR_RECORDSIZE; { Chars in the last Header } { Now we have the number of headers set up, stuff the name in the Headers } TempStr := AnsiString(Value); for J := 1 to NumHeaders-1 do begin { Make a buffer, and copy entire next AB_TAR_RECORDSIZE bytes of tempStr to content of Header } { There may only be AB_TAR_RECORDSIZE-1 bytes if this is the last rounded header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(J+I, PHeader); FTarHeaderTypeList.Insert(J+I, Pointer(MD_DATA_HEADER));{ We are adding MD Data headers here } Move(TempStr[1], PHeader^, AB_TAR_RECORDSIZE); if Length(TempStr) >= AB_TAR_RECORDSIZE then Delete(TempStr, 1, AB_TAR_RECORDSIZE);{ Crop string } end; if ExtraName <> 0 then begin { Copy what ever is left in tempStr into the rest of the buffer } { Create the last MD Data Header } GetMem(PHeader, AB_TAR_RECORDSIZE); FTarHeaderList.Insert(I+NumHeaders, PHeader);{ Insert: Inserts at base index } FTarHeaderTypeList.Insert(I+NumHeaders, Pointer(MD_DATA_HEADER));{ We are only adding MD Data headers here } FillChar(PHeader^, AB_TAR_RECORDSIZE, #0); { Zero the whole block } Move(TempStr[1], PHeader^, ExtraName-1); { The string is null terminated in the header } end else { We already copied the entire name, but it must be null terminated } begin FillChar(Pointer(PtrInt(PHeader)+AB_TAR_RECORDSIZE-1)^, 1, #0); { Zero rest of the block } end; { Finally we need to stuff the file type Header. } { Note: Value.length > AB_TAR_NAMESIZE(100) } if LinkFlag = AB_TAR_LF_LONGNAME then Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; procedure TAbTarItem.SetFileName(const Value: string); var FoundMetaDataHeader: Boolean; PHeader: PAbTarHeaderRec; I, J: Integer; TotalOldNumHeaders: Integer; RawFileName: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Assume ItemReadOnly is set for all Unsupported Type. } { Cases: New File Name is short, Length <= 100, All formats: Zero Name field and move new name to field. V7: Work complete, 1 header USTAR: zero prefix field, 1 Header OLD_GNU & GNU: Remove old name headers, 1 header. STAR & PAX: And should not yet get here. New File Name is Long, Length >=101 Note: The Header Parsing sets any V7 to GNU if 'L'/'K" Headers are present V7: Raise an exception, as this can NOT be done, no change to header. USTAR: if new length <= 254 zero fill header, update name fields, 1 updated Header if new Length >= 255 raise an exception, as this can NOT be done, no change to header if old was Short, Add files to match format, OLD_GNU & GNU: Create new Name header, Add N Headers for name, Update name in file header, update name fields, min 3 headers STAR & PAX: And should not yet get here. if old was Long, OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers Add headers to length of new Name Length, update name in file header, update name fields } RawFileName := CeUtf8ToSys(Value); { In all cases zero out the name fields in the File Header. } if Length(RawFileName) > AB_TAR_NAMESIZE then begin { Must be null terminated except at 100 char length } { Look for long name meta-data headers already in the archive. } FoundMetaDataHeader := False; I := 0; { FTarHeaderList.Count <= 1 always } while (not FoundMetaDataHeader) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGNAME then begin { We are growing or Shriking the Name MD Data fields. } FoundMetaDataHeader := True; DoGNUExistingLongNameLink(AB_TAR_LF_LONGNAME, I, RawFileName); { Need to copy the Name to the header. } FTarItem.Name := Value; end else I := I + 1; end; { End While } { MD Headers & MD Data Headers have been stuffed if FoundMetaDataHeader } { Still need to stuff the File type header contents. } if not FoundMetaDataHeader then begin case FTarItem.ArchiveFormat of V7_FORMAT: raise EAbTarBadFileName.Create; { File Name to Long } USTAR_FORMAT: begin { Longest file name is AB_TAR_NAMESIZE(100) chars } { Longest Prefix is AB_TAR_USTAR_PREFIX_SIZE(155) chars } { These two fields are delimted by a '/' char } {0123456789012345, Length = 15, NameLength = 5, PrefixLength = 9} { AAAA/BBBB/C.txt, Stored as Name := 'C.txt', Prefix := 'AAAA/BBBB' } { That means Theoretical maximum is 256 for Length(RawFileName) } if Length(RawFileName) > (AB_TAR_NAMESIZE+AB_TAR_USTAR_PREFIX_SIZE+1) then { Check the obvious one. } raise EAbTarBadFileName.Create; { File Name to Long } for I := Length(RawFileName) downto Length(RawFileName)-AB_TAR_NAMESIZE-1 do begin if RawFileName[I] = '/' then begin if (I <= AB_TAR_USTAR_PREFIX_SIZE+1) and (Length(RawFileName)-I <= AB_TAR_NAMESIZE) then begin { We have a successfull parse. } FillChar(PTarHeader.Name, SizeOf(PTarHeader.Name), #0); FillChar(PTarHeader.ustar.Prefix, SizeOf(PTarHeader.ustar.Prefix), #0); Move(RawFileName[I+1], PTarHeader.Name, Length(RawFileName)-I); Move(RawFileName[1], PTarHeader.ustar.Prefix, I); break; end else if (Length(RawFileName)-I > AB_TAR_NAMESIZE) then raise EAbTarBadFileName.Create { File Name not splittable } { else continue; } end; end;{ End for I... } end; { End USTAR Format } OLDGNU_FORMAT: DoGNUNewLongNameLink(AB_TAR_LF_LONGNAME, 0, RawFileName); {GNU_FORMAT} else begin { UNKNOWN_FORMAT, STAR_FORMAT, POSIX_FORMAT } raise EAbTarBadOp.Create; { Unknown Archive Format } end;{ End of Else for case statement } end;{ End of case statement } FTarItem.Name := Value; end; { if no Meta data header found } end { End "name length larger than 100" } else begin { Short new name, Simple Case Just put it in the Name Field & remove any headers } { PTarHeader Points to the File type Header } { Zero the Name field } FillChar(PTarHeader.Name, SizeOf(PTarHeader.Name), #0); if FTarItem.ArchiveFormat in [USTAR_FORMAT] then { Zero the prefix field } FillChar(PTarHeader.ustar.Prefix, SizeOf(PTarHeader.ustar.Prefix), #0); if FTarItem.ArchiveFormat in [GNU_FORMAT, OLDGNU_FORMAT] then begin { We may have AB_TAR_LF_LONGNAME Headers to be removed } { Remove long file names Headers if they exist} FoundMetaDataHeader := False; I := 0; while not FoundMetaDataHeader and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag in [AB_TAR_LF_LONGNAME] then begin { Delete this Header, and the data Headers. } FoundMetaDataHeader := True; TotalOldNumHeaders := Ceil( OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); for J := TotalOldNumHeaders downto 0 do begin { Note 0 will delete the Long Link MD Header } FreeMem(FTarHeaderList.Items[I+J]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Delete(I+J); FTarHeaderTypeList.Delete(I+J); end; end else I := I + 1; { Got to next header } end;{ End While not found... } end; { End if GNU... } { Save off the new name and store to the Header } FTarItem.Name := Value; { Must add Null Termination before we store to Header } StrPLCopy(PTarHeader.Name, RawFileName, AB_TAR_NAMESIZE); end;{ End else Short new name,... } { Update the inherited file names. } FFileName := FTarItem.Name; //DiskFileName := FFileName; //AbUnfixName(FDiskFileName); // Don't override DiskFileName FTarItem.Dirty := True; end; procedure TAbTarItem.SetGroupID(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { gid is extendable in PAX Headers, Rember PAX extended Header Over Rule File Headers } FTarItem.gid := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.gid, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetGroupName(const Value: string); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { GrpName is extendable in PAX Headers, Rember PAX extended Header Over Rule File Headers } FTarItem.GrpName := Value; StrPLCopy(PTarHeader.GrpName, AnsiString(Value), SizeOf(PTarHeader.GrpName)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetIsEncrypted(Value: Boolean); begin { do nothing, TAR has no native encryption } end; procedure TAbTarItem.SetLastModFileDate(const Value: Word); begin { replace date, keep existing time } LastModTimeAsDateTime := EncodeDate( Value shr 9 + 1980, Value shr 5 and 15, Value and 31) + Frac(LastModTimeAsDateTime); end; procedure TAbTarItem.SetLastModFileTime(const Value: Word); begin { keep current date, replace time } LastModTimeAsDateTime := Trunc(LastModTimeAsDateTime) + EncodeTime( Value shr 11, Value shr 5 and 63, Value and 31 shl 1, 0); end; procedure TAbTarItem.SetLastModTimeAsDateTime(const Value: TDateTime); begin // TAR stores always Unix time. SetModTime(AbLocalDateTimeToUnixTime(Value)); // also updates headers end; procedure TAbTarItem.SetLinkFlag(Value: AnsiChar); begin if FTarItem.ItemReadOnly then Exit; FTarItem.LinkFlag := Value; PTarHeader.LinkFlag := Value; FTarItem.Dirty := True; end; procedure TAbTarItem.SetLinkName(const Value: string); var FoundMetaDataHeader: Boolean; PHeader: PAbTarHeaderRec; I, J: Integer; TotalOldNumHeaders: Integer; RawLinkName: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Cases: New Link Name is short, Length <= 100, All formats: Zero Name field and move new name to field. V7: Work complete, 1 header USTAR: Work complete, 1 Header OLD_GNU & GNU: Remove old link headers, 1 header. STAR & PAX: And should not yet get here. New File Name is Long, Length >=101 Note: The Header Parsing sets any V7 to GNU if 'L'/'K' Headers are present V7: Raise an exception, as this can NOT be done, no change to header. USTAR: Raise an exception, as this can NOT be done, no change to header. if old was Short, Add files to match format, OLD_GNU & GNU: Create new Link header, Add N Headers for name, Update name in file header, update name fields, min 3 headers if old was Long, OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers STAR & PAX: And should not yet get here.} RawLinkName := CeUtf8ToSys(Value); if Length(RawLinkName) > AB_TAR_NAMESIZE then { Must be null terminated except at 100 char length } begin { Look for long name meta-data headers already in the archive. } FoundMetaDataHeader := False; I := 0; { FTarHeaderList.Count <= 1 always } while (not FoundMetaDataHeader) and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag = AB_TAR_LF_LONGLINK then begin { We are growing or Shriking the Name MD Data fields. } FoundMetaDataHeader := True; DoGNUExistingLongNameLink(AB_TAR_LF_LONGLINK, I, RawLinkName); { Need to copy the Name to the header. } FTarItem.LinkName := Value; end else I := I + 1; end; { End While } { MD Headers & MD Data Headers have been stuffed if FoundMetaDataHeader } { Still need to stuff the File type header contents. } if not FoundMetaDataHeader then begin case FTarItem.ArchiveFormat of V7_FORMAT: raise EAbTarBadLinkName.Create; { Link Name to Long } USTAR_FORMAT: raise EAbTarBadLinkName.Create; { Link Name to Long } OLDGNU_FORMAT: DoGNUNewLongNameLink(AB_TAR_LF_LONGLINK, 0, RawLinkName); {GNU_FORMAT} else begin { UNKNOWN_FORMAT, STAR_FORMAT, POSIX_FORMAT } raise EAbTarBadOp.Create; { Unknown Archive Format } end;{ End of Else for case statement } end;{ End of case statement } FTarItem.LinkName := Value; end; { if no Meta data header found } end { End "name length larger than 100" } else begin { Short new name, Simple Case Just put it in the Link Field & remove any headers } { PTarHeader Points to the File type Header } { Zero the Link field } FillChar(PTarHeader.LinkName, SizeOf(PTarHeader.LinkName), #0); if FTarItem.ArchiveFormat in [GNU_FORMAT, OLDGNU_FORMAT] then begin { We may have AB_TAR_LF_LONGNAME Headers to be removed } { Remove long file names Headers if they exist} FoundMetaDataHeader := False; I := 0; while not FoundMetaDataHeader and (I <= (FTarHeaderList.Count - 1)) do begin PHeader := FTarHeaderList.Items[I]; if PHeader.LinkFlag in [AB_TAR_LF_LONGLINK] then begin { Delete this Header, and the data Headers. } FoundMetaDataHeader := True; TotalOldNumHeaders := Ceil( OctalToInt(PHeader.Size, SizeOf(PHeader.Size)) / AB_TAR_RECORDSIZE); for J := TotalOldNumHeaders downto 0 do begin { Note 0 will delete the Long Link MD Header } FreeMem(FTarHeaderList.Items[I+J]); { This list holds PAbTarHeaderRec's } FTarHeaderList.Delete(I+J); FTarHeaderTypeList.Delete(I+J); end; end else I := I + 1; { Got to next header } end;{ End While not found... } end; { End if GNU... } { Save off the new name and store to the Header } FTarItem.LinkName := Value; StrPLCopy(PTarHeader.LinkName, RawLinkName, AB_TAR_NAMESIZE); end;{ End else Short new name,... } FTarItem.Dirty := True; end; procedure TAbTarItem.SetMagic(const Value: String); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; FTarItem.Magic := AnsiString(Value); Move(Value[1], PTarHeader.Magic, SizeOf(TAbTarMagicRec)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUncompressedSize(const Value: Int64); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { Size is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.Size := Value; { Store our Vitrual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.Size, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUserID(const Value: Integer); var S : AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { uid is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.uid := Value; S := PadString(IntToOctal(Value), SizeOf(Arr8)); Move(S[1], PTarHeader.uid, Length(S)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetUserName(const Value: string); begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { UsrName is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.UsrName := Value; StrPLCopy(PTarHeader.UsrName, AnsiString(Value), SizeOf(PTarHeader.UsrName)); FTarItem.Dirty := True; end; procedure TAbTarItem.SetModTime(const Value: Int64); var S: AnsiString; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; { ModTime is extendable in PAX Headers, Remember PAX extended Header Over Rule File Headers } FTarItem.ModTime := Value; { Store our Virtual Copy } S := PadString(IntToOctal(Value), SizeOf(Arr12));{ Stuff to header } Move(S[1], PTarHeader.ModTime, Length(S)); FTarItem.Dirty := True; end; { ************************** TAbTarStreamHelper ****************************** } destructor TAbTarStreamHelper.Destroy; begin inherited Destroy; end; { This is slow, use the archive class instead } procedure TAbTarStreamHelper.ExtractItemData(AStream: TStream); begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } if FCurrItemSize <> 0 then begin { copy stored data to output } AStream.CopyFrom(FStream, FCurrItemSize); {reset the stream to the start of the item} FStream.Seek(-(FCurrItemPreHdrs*AB_TAR_RECORDSIZE+FCurrItemSize), soFromCurrent); end; { else do nothing } end; { This function Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindItem: Boolean; var DataRead : LongInt; FoundItem: Boolean; SkipHdrs : Integer; begin { Note: The SizeOf(TAbTarHeaderRec) = AB_TAR_RECORDSIZE } { Note: Standard LBA size of hard disks is 512 bytes = AB_TAR_RECORDSIZE } FoundItem := False; { Getting an new Item reset these numbers } FCurrItemSize := 0; FCurrItemPreHdrs := 0; DataRead := FStream.Read(FTarHeader, AB_TAR_RECORDSIZE); { Read in a header } { DataRead <> AB_TAR_RECORDSIZE means end of stream, and the End Of Archive record is all #0's, which the StrLen(FTarHeader.Name) check will catch } while (DataRead = AB_TAR_RECORDSIZE) and (StrLen(FTarHeader.Name) > 0) and not FoundItem do begin { Either exit when we find a supported file or end of file or an invalid header name. } if FTarHeader.LinkFlag in (AB_SUPPORTED_MD_HEADERS+AB_UNSUPPORTED_MD_HEADERS) then begin { We have a un/supported Meta-Data Header } { FoundItem := False } { Value remains False. } SkipHdrs := Ceil(OctalToInt(FTarHeader.Size, SizeOf(FTarHeader.Size))/AB_TAR_RECORDSIZE); FStream.Seek(SkipHdrs*AB_TAR_RECORDSIZE, soFromCurrent); { Tally new Headers: Consumed + Current } FCurrItemPreHdrs := FCurrItemPreHdrs + SkipHdrs + 1; { Read our next header, Loop, and re-parse } DataRead := FStream.Read(FTarHeader, AB_TAR_RECORDSIZE); end else if FTarHeader.LinkFlag in (AB_SUPPORTED_F_HEADERS+AB_UNSUPPORTED_F_HEADERS) then begin { We have a un/supported File Header. } FoundItem := True; if not (FTarHeader.LinkFlag in AB_IGNORE_SIZE_HEADERS) then FCurrItemSize := OctalToInt(FTarHeader.Size, SizeOf(FTarHeader.Size)) else FCurrItemSize := 0; { Per The spec these Headers do not have file content } FCurrItemPreHdrs := FCurrItemPreHdrs + 1; { Tally current header } end else begin{ We Have an Unknown header } FoundItem := True; FCurrItemSize := 0; { We could have many un/supported headers before this unknown type } FCurrItemPreHdrs := FCurrItemPreHdrs + 1; { Tally current header } { These Headers should throw exceptions when TAbTarItem.LoadTarHeaderFromStream is called } end; { End of Link Flag parsing } end; { Rewind to the "The Beginning" of this Item } { Really that means to the first supported Header Type before a supported Item Type } if FoundItem then FStream.Seek(-(FCurrItemPreHdrs*AB_TAR_RECORDSIZE), soFromCurrent); Result := FoundItem; end; { Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindFirstItem: Boolean; begin FStream.Seek(0, soFromBeginning); Result := FindItem; end; { Should only be used from LoadArchive, as it is slow. } function TAbTarStreamHelper.FindNextItem: Boolean; begin { Fast Forward Past the current Item } FStream.Seek((FCurrItemPreHdrs*AB_TAR_RECORDSIZE + RoundToTarBlock(FCurrItemSize)), soFromCurrent); Result := FindItem; end; { This is slow, use the archive class instead } function TAbTarStreamHelper.GetItemCount : Integer; var Found : Boolean; begin Result := 0; Found := FindFirstItem; while Found do begin Inc(Result); Found := FindNextItem; end; end; procedure TAbTarStreamHelper.ReadHeader; begin { do nothing } { Tar archives have no overall header data } end; procedure TAbTarStreamHelper.ReadTail; begin { do nothing } { Tar archives have no overall tail data } end; { This is slow, use the archive class instead } function TAbTarStreamHelper.SeekItem(Index: Integer): Boolean; var i : Integer; begin Result := FindFirstItem; { see if can get to first item } i := 1; while Result and (i < Index) do begin Result := FindNextItem; Inc(i); end; end; procedure TAbTarStreamHelper.WriteArchiveHeader; begin { do nothing } { Tar archives have no overall header data } end; procedure TAbTarStreamHelper.WriteArchiveItem(AStream: TStream); begin WriteArchiveItemSize(AStream, AStream.Size); end; procedure TAbTarStreamHelper.WriteArchiveItemSize(AStream: TStream; Size: Int64); var PadBuff : PAnsiChar; PadSize : Integer; begin if Size = 0 then Exit; { transfer actual item data } FStream.CopyFrom(AStream, Size); { Pad to Next block } PadSize := RoundToTarBlock(Size) - Size; GetMem(PadBuff, PadSize); FillChar(PadBuff^, PadSize, #0); FStream.Write(PadBuff^, PadSize); FreeMem(PadBuff, PadSize); end; procedure TAbTarStreamHelper.WriteArchiveTail; var PadBuff : PAnsiChar; PadSize : Integer; begin { append 2 terminating null blocks } PadSize := AB_TAR_RECORDSIZE; GetMem(PadBuff, PadSize); try FillChar(PadBuff^, PadSize, #0); FStream.Write(PadBuff^, PadSize); FStream.Write(PadBuff^, PadSize); finally FreeMem(PadBuff, PadSize); end; end; { ***************************** TAbTarArchive ******************************** } constructor TAbTarArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); begin inherited; FArchFormat := V7_FORMAT; // Default for new archives end; function TAbTarArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var Item : TAbTarItem; I: Integer; FullSourceFileName, FullArchiveFileName: String; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Create Item Unsupported in this Archive } MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); Item := TAbTarItem.Create; try // HeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); if FArchFormat in [OLDGNU_FORMAT, GNU_FORMAT] then begin Item.ArchiveFormat := FArchFormat; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_GNUOLD; end else if FArchFormat in [USTAR_FORMAT] then begin Item.ArchiveFormat := USTAR_FORMAT; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end else if (FArchFormat = V7_FORMAT) and (Length(FullArchiveFileName) > 100) then begin { Switch the rep over to GNU so it can have long file names. } FArchFormat := OLDGNU_FORMAT; Item.ArchiveFormat := OLDGNU_FORMAT; { Leave the Defaults for LinkFlag, and Magic } { Update all the rest so that it can transistion to GNU_FORMAT } for I := 0 to FItemList.Count - 1 do TAbTarItem(FItemList.Items[i]).ArchiveFormat := OLDGNU_FORMAT; end;{ This should not execute... }{ else if FArchFormat in [STAR_FORMAT, POSIX_FORMAT] then begin Item.ArchiveFormat := FArchFormat; Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end; }{ else FArchFormat in [ UNKNOWN_FORMAT, V7_FORMAT and Length(S) <= 100 ] } { This is the default. } { Most others are initialized in the .Create } Item.CRC32 := 0; { Note this can raise exceptions for file name lengths. } Item.FileName := FullArchiveFileName; Item.DiskFileName := FullSourceFileName; Item.Action := aaNone; finally Result := Item; end; end; procedure TAbTarArchive.ExtractItemAt(Index: Integer; const UseName: string); var OutStream : TStream; CurItem : TAbTarItem; begin { Check the index is not out of range. } if(Index >= ItemList.Count) then raise EListError.CreateFmt(SListIndexError, [Index]); CurItem := TAbTarItem(ItemList[Index]); if CurItem.ItemType in [UNKNOWN_ITEM] then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } if (CurItem.ItemType = UNSUPPORTED_ITEM) and ((Length(CurItem.FileName) >= AB_TAR_NAMESIZE) or (Length(CurItem.LinkName) >= AB_TAR_NAMESIZE)) then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { We will allow extractions if the file name/Link name are strickly less than 100 chars } if CurItem.IsDirectory then AbCreateDirectory(UseName) else begin case (CurItem.Mode and $F000) of AB_FMODE_FILE, AB_FMODE_FILE2: begin OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); finally {OutStream} OutStream.Free; end; {OutStream} except if ExceptObject is EAbUserAbort then FStatus := asInvalid; mbDeleteFile(UseName); raise; end; end; AB_FMODE_FILELINK: begin AbCreateSymlink(CurItem.LinkName, UseName); end; end; end; AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); AbSetFileAttr(UseName, CurItem.NativeFileAttributes); end; procedure TAbTarArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); var CurItem : TAbTarItem; begin if(Index >= ItemList.Count) then raise EListError.CreateFmt(SListIndexError, [Index]); CurItem := TAbTarItem(ItemList[Index]); if CurItem.ItemType in [UNKNOWN_ITEM] then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } if (CurItem.ItemType = UNSUPPORTED_ITEM) and ((Length(CurItem.FileName) >= AB_TAR_NAMESIZE) or (Length(CurItem.LinkName) >= AB_TAR_NAMESIZE)) then raise EAbTarBadOp.Create; { Unsupported Type, Cannot Extract } { We will allow extractions if the file name is strictly less than 100 chars } FStream.Position := CurItem.StreamPosition+CurItem.FileHeaderCount*AB_TAR_RECORDSIZE; if CurItem.UncompressedSize <> 0 then aStream.CopyFrom(FStream, CurItem.UncompressedSize); { Else there is nothing to copy. } end; procedure TAbTarArchive.LoadArchive; var TarHelp : TAbTarStreamHelper; Item : TAbTarItem; ItemFound : Boolean; Abort : Boolean; Confirm : Boolean; i : Integer; Progress : Byte; begin { create helper } TarHelp := TAbTarStreamHelper.Create(FStream); try {TarHelp} {build Items list from tar header records} { reset Tar } ItemFound := (FStream.Size > 0) and TarHelp.FindFirstItem; if ItemFound then FArchFormat := UNKNOWN_FORMAT else FArchFormat := V7_FORMAT; { while more data in Tar } while (FStream.Position < FStream.Size) and ItemFound do begin {create new Item} Item := TAbTarItem.Create; Item.FTarItem.StreamPosition := FStream.Position; try {Item} Item.LoadTarHeaderFromStream(FStream); if Item.ItemReadOnly then FArchReadOnly := True; { Set Archive as Read Only } if Item.ItemType in [SUPPORTED_ITEM, UNSUPPORTED_ITEM] then begin { List of supported Item/File Types. } { Add the New Supported Item to the List } if FArchFormat < Item.ArchiveFormat then FArchFormat := Item.ArchiveFormat; { Take the max format } Item.Action := aaNone; FItemList.Add(Item); end { end if } else begin { unhandled Tar file system entity, notify user, but otherwise ignore } if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(self, Item, ptFoundUnhandled, Confirm); end; { show progress and allow for aborting } Progress := (FStream.Position*100) div FStream.Size; DoArchiveProgress(Progress, Abort); if Abort then begin FStatus := asInvalid; raise EAbUserAbort.Create; end; { get the next item } ItemFound := TarHelp.FindNextItem; except {Item} raise EAbTarBadOp.Create; { Invalid Item } end; {Item} end; {end while } { All the items need to reflect this information. } for i := 0 to FItemList.Count - 1 do begin TAbTarItem(FItemList.Items[i]).ArchiveFormat := FArchFormat; TAbTarItem(FItemList.Items[i]).ItemReadOnly := FArchReadOnly; end; DoArchiveProgress(100, Abort); FIsDirty := False; finally {TarHelp} { Clean Up } TarHelp.Free; end; {TarHelp} end; function TAbTarArchive.FixName(const Value: string): string; { fixup filename for storage } var lValue : string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := BaseDirectory + AbPathDelim + lValue; end; lValue := AbGetShortFileSpec( lValue ); end; {$ENDIF MSWINDOWS} { Should always trip drive info if on a Win/Dos system } StoreOptions := StoreOptions + [soStripDrive]; { strip drive stuff } if soStripDrive in StoreOptions then AbStripDrive( lValue ); { check for a leading slash } if (Length(lValue) > 0) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then lValue := ExtractFileName(lValue); if soRemoveDots in StoreOptions then AbStripDots(lValue); AbFixName(lValue); Result := lValue; end; function TAbTarArchive.GetItem(Index: Integer): TAbTarItem; begin Result := TAbTarItem(FItemList.Items[Index]); end; function TAbTarArchive.GetSupportsEmptyFolders: Boolean; begin Result := True; end; procedure TAbTarArchive.PutItem(Index: Integer; const Value: TAbTarItem); begin //TODO: Remove this from all archives FItemList.Items[Index] := Value; end; procedure TAbTarArchive.SaveArchive; var OutTarHelp : TAbTarStreamHelper; Abort : Boolean; i : Integer; NewStream : TAbVirtualMemoryStream; TempStream : TStream; CurItem : TAbTarItem; AttrEx : TAbAttrExRec; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Archive is read only } {init new archive stream} NewStream := TAbVirtualMemoryStream.Create; OutTarHelp := TAbTarStreamHelper.Create(NewStream); try {NewStream/OutTarHelp} { create helper } NewStream.SwapFileDirectory := AbGetTempDirectory; {build new archive from existing archive} for i := 0 to pred(Count) do begin FCurrentItem := ItemList[i]; CurItem := TAbTarItem(ItemList[i]); case CurItem.Action of aaNone, aaMove : begin {just copy the file to new stream} { "Seek" to the Item Data } { SaveTarHeaders, Updates FileHeaderCount } FStream.Position := CurItem.StreamPosition+CurItem.FileHeaderCount*AB_TAR_RECORDSIZE; CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } { Flush The Headers to the new stream } CurItem.SaveTarHeaderToStream(NewStream); { Copy to new Stream, Round to the AB_TAR_RECORDSIZE boundry, and Pad zeros} outTarhelp.WriteArchiveItemSize(FStream, CurItem.UncompressedSize); end; aaDelete: {doing nothing omits file from new stream} ; aaStreamAdd : begin try { adding from a stream } CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } CurItem.UncompressedSize := InStream.Size; CurItem.SaveTarHeaderToStream(NewStream); OutTarHelp.WriteArchiveItemSize(InStream, InStream.Size); except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; aaAdd, aaFreshen, aaReplace: begin try { update metadata } if not AbFileGetAttrEx(CurItem.DiskFileName, AttrEx, False) then Raise EAbFileNotFound.Create; CurItem.ExternalFileAttributes := AttrEx.Mode; CurItem.LastModTimeAsDateTime := AttrEx.Time; { TODO: uid, gid, uname, gname should be added here } { TODO: Add support for different types of files here } case (AttrEx.Mode and $F000) of AB_FMODE_DIR: begin CurItem.UncompressedSize := 0; CurItem.SaveTarHeaderToStream(NewStream); end; AB_FMODE_FILELINK: begin CurItem.UncompressedSize := 0; CurItem.LinkName := AbReadSymlink(CurItem.DiskFileName); CurItem.SaveTarHeaderToStream(NewStream); end; AB_FMODE_FILE, AB_FMODE_FILE2: begin TempStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try { TempStream } CurItem.UncompressedSize := TempStream.Size; CurItem.StreamPosition := NewStream.Position;{ Reset the Stream Pointer. } CurItem.SaveTarHeaderToStream(NewStream); OutTarHelp.WriteArchiveItemSize(TempStream, TempStream.Size); finally { TempStream } TempStream.Free; end; { TempStream } end; else begin CurItem.UncompressedSize := AttrEx.Size; CurItem.SaveTarHeaderToStream(NewStream); end; end; except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); end; end; { aaAdd ... } end; { case } end; { for i ... } if NewStream.Size <> 0 then OutTarHelp.WriteArchiveTail; { Terminate the TAR } { Size of NewStream is still 0, and max of the stream will also be 0 } {copy new stream to FStream} NewStream.Position := 0; if (FStream is TMemoryStream) then TMemoryStream(FStream).LoadFromStream(NewStream) else if (FStream is TAbVirtualMemoryStream) then begin FStream.Position := 0; FStream.Size := 0; TAbVirtualMemoryStream(FStream).CopyFrom(NewStream, NewStream.Size) end else begin { need new stream to write } FreeAndNil(FStream); FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FStream.CopyFrom(NewStream, NewStream.Size); end; {update Items list} for i := pred( Count ) downto 0 do begin if ItemList[i].Action = aaDelete then FItemList.Delete( i ) else if ItemList[i].Action <> aaFailed then ItemList[i].Action := aaNone; end; DoArchiveSaveProgress( 100, Abort ); DoArchiveProgress( 100, Abort ); finally {NewStream/OutTarHelp} OutTarHelp.Free; NewStream.Free; end; end; { This assumes that LoadArchive has been called. } procedure TAbTarArchive.TestItemAt(Index: Integer); begin FStream.Position := TAbTarItem(FItemList[Index]).StreamPosition; if VerifyTar(FStream) <> atTar then raise EAbTarInvalid.Create; { Invalid Tar } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abzipper.pas����������������������������������������������0000644�0001750�0000144�00000051414�12423755012�022077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipper.pas *} {*********************************************************} {* ABBREVIA: Non-visual Component with Zip support *} {*********************************************************} unit AbZipper; {$I AbDefine.inc} interface uses Classes, AbBrowse, AbZBrows, AbArcTyp, AbZipTyp; type TAbCustomZipper = class(TAbCustomZipBrowser) protected {private} FAutoSave : Boolean; FCompressionMethodToUse : TAbZipSupportedMethod; FDeflationOption : TAbZipDeflationOption; FDOSMode : Boolean; FOnConfirmSave : TAbArchiveConfirmEvent; FOnSave : TAbArchiveEvent; FOnArchiveSaveProgress : TAbArchiveProgressEvent; FArchiveSaveProgressMeter : IAbProgressMeter; FStoreOptions : TAbStoreOptions; protected {methods} procedure DoConfirmSave(Sender : TObject; var Confirm : Boolean); virtual; procedure DoSave(Sender : TObject); virtual; procedure DoArchiveSaveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); procedure InitArchive; override; procedure SetAutoSave(Value : Boolean); procedure SetCompressionMethodToUse(Value : TAbZipSupportedMethod); procedure SetDeflationOption(Value : TAbZipDeflationOption); procedure SetDOSMode( Value : Boolean ); procedure SetFileName(const aFileName : string); override; procedure SetStoreOptions( Value : TAbStoreOptions ); procedure SetArchiveSaveProgressMeter(const Value: IAbProgressMeter); procedure SetZipfileComment(const Value : AnsiString); override; procedure ZipProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); procedure ZipFromStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream ); procedure Notification(Component: TComponent; Operation: TOperation); override; procedure ResetMeters; override; protected {properties} property AutoSave : Boolean read FAutoSave write SetAutoSave; property CompressionMethodToUse : TAbZipSupportedMethod read FCompressionMethodToUse write SetCompressionMethodToUse default AbDefCompressionMethodToUse; property DeflationOption : TAbZipDeflationOption read FDeflationOption write SetDeflationOption default AbDefDeflationOption; property DOSMode : Boolean read FDOSMode write SetDOSMode; property StoreOptions : TAbStoreOptions read FStoreOptions write SetStoreOptions default AbDefStoreOptions; property ArchiveSaveProgressMeter : IAbProgressMeter read FArchiveSaveProgressMeter write SetArchiveSaveProgressMeter; protected {events} property OnConfirmSave : TAbArchiveConfirmEvent read FOnConfirmSave write FOnConfirmSave; property OnSave : TAbArchiveEvent read FOnSave write FOnSave; property OnArchiveSaveProgress : TAbArchiveProgressEvent read FOnArchiveSaveProgress write FOnArchiveSaveProgress; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure AddFiles(const FileMask : string; SearchAttr : Integer); procedure AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); procedure AddFromStream(const NewName : string; FromStream : TStream); procedure DeleteAt(Index : Integer); procedure DeleteFiles(const FileMask : string); procedure DeleteFilesEx(const FileMask, ExclusionMask : string); procedure DeleteTaggedItems; procedure FreshenFiles(const FileMask : string); procedure FreshenFilesEx(const FileMask, ExclusionMask : string); procedure FreshenTaggedItems; procedure Move(aItem : TAbArchiveItem; const NewStoredPath : string); procedure Save; procedure Replace(aItem : TAbArchiveItem); end; type TAbZipper = class(TAbCustomZipper) published property ArchiveProgressMeter; property ArchiveSaveProgressMeter; property ItemProgressMeter; property AutoSave; property BaseDirectory; property CompressionMethodToUse; property DeflationOption; property DOSMode; property SpanningThreshold; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveSaveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmProcessItem; property OnConfirmSave; property OnLoad; property OnProcessItemFailure; property OnRequestBlankDisk; property OnRequestImage; property OnRequestLastDisk; property OnRequestNthDisk; property OnSave; property Password; property StoreOptions; property TempDirectory; property Version; property FileName; {must be after OnLoad} end; implementation uses SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc, AbXzTyp, AbLzmaTyp, DCOSUtils; { -------------------------------------------------------------------------- } constructor TAbCustomZipper.Create( AOwner : TComponent ); begin inherited Create( AOwner ); CompressionMethodToUse := AbDefCompressionMethodToUse; DeflationOption := AbDefDeflationOption; StoreOptions := AbDefStoreOptions; end; { -------------------------------------------------------------------------- } destructor TAbCustomZipper.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFiles(const FileMask : string; SearchAttr : Integer); {Add files to the archive where the disk filespec matches} begin if (ZipArchive <> nil) then ZipArchive.AddFiles(FileMask, SearchAttr) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); {Add files that match Filemask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.AddFilesEx(FileMask, ExclusionMask, SearchAttr) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.AddFromStream(const NewName : string; FromStream : TStream); {Add stream directly to archive} begin if (ZipArchive <> nil) then begin FromStream.Position := 0; ZipArchive.AddFromStream(NewName, FromStream); end else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteFiles(const FileMask : string); {delete all files from the archive that match the file mask} begin if (ZipArchive <> nil) then ZipArchive.DeleteFiles( FileMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteAt(Index : Integer); {delete item at Index} begin if (ZipArchive <> nil) then ZipArchive.DeleteAt( Index ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteFilesEx(const FileMask, ExclusionMask : string); {Delete files that match Filemask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.DeleteFilesEx(FileMask, ExclusionMask) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DeleteTaggedItems; {delete all tagged items from the archive} begin if (ZipArchive <> nil) then ZipArchive.DeleteTaggedItems else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoConfirmSave(Sender : TObject; var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmSave) then FOnConfirmSave(Self, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoSave(Sender : TObject); begin if Assigned(FOnSave) then FOnSave(Self); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenFiles(const FileMask : string); {freshen all items that match the file mask} begin if (ZipArchive <> nil) then ZipArchive.FreshenFiles( FileMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenFilesEx(const FileMask, ExclusionMask : string); {freshen all items matching FileMask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.FreshenFilesEx( FileMask, ExclusionMask ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.FreshenTaggedItems; {freshen all tagged items} begin if (ZipArchive <> nil) then ZipArchive.FreshenTaggedItems else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.InitArchive; begin inherited InitArchive; if (ZipArchive is TAbZipArchive) then begin {properties} ZipArchive.AutoSave := FAutoSave; TAbZipArchive(ZipArchive).CompressionMethodToUse := FCompressionMethodToUse; TAbZipArchive(ZipArchive).DeflationOption := FDeflationOption; FArchive.DOSMode := FDOSMode; ZipArchive.StoreOptions := FStoreOptions; {events} ZipArchive.OnArchiveSaveProgress := DoArchiveSaveProgress; ZipArchive.OnConfirmSave := DoConfirmSave; TAbZipArchive(ZipArchive).OnRequestBlankDisk := OnRequestBlankDisk; ZipArchive.OnSave := DoSave; TAbZipArchive(ZipArchive).InsertHelper := ZipProc; TAbZipArchive(ZipArchive).InsertFromStreamHelper := ZipFromStreamProc; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Move(aItem : TAbArchiveItem; const NewStoredPath : string); {renames the item} begin if (ZipArchive <> nil) then ZipArchive.Move(aItem, NewStoredPath) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Replace(aItem : TAbArchiveItem); {replace the item} begin if (ZipArchive <> nil) then ZipArchive.Replace( aItem ) else raise EAbNoArchive.Create; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Save; begin if (ZipArchive <> nil) then begin ZipArchive.Save; DoChange; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetAutoSave(Value : Boolean); begin FAutoSave := Value; if (ZipArchive <> nil) then ZipArchive.AutoSave := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetCompressionMethodToUse( Value : TAbZipSupportedMethod); begin FCompressionMethodToUse := Value; if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).CompressionMethodToUse := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetDeflationOption(Value : TAbZipDeflationOption); begin FDeflationOption := Value; if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).DeflationOption := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetDOSMode(Value : Boolean); begin FDOSMode := Value; if (ZipArchive <> nil) then ZipArchive.DOSMode := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetFileName(const aFileName : string); var ArcType : TAbArchiveType; begin FFileName := aFileName; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then begin FArchive.Save; FreeAndNil(FArchive); end; ArcType := ArchiveType; if (FileName <> '') then if mbFileExists(FileName) then begin { open it } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip, atSpannedZip, atSelfExtZip : begin FArchive := TAbZipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; atXz, atXzippedTar : begin FArchive := TAbXzArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); inherited InitArchive; end; atLzma, atLzmaTar : begin FArchive := TAbLzmaArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchive.Load; FArchiveType := ArcType; end else begin { file doesn't exist, so create a new one } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); case ArcType of atZip : begin FArchive := TAbZipArchive.Create(FileName, fmCreate or fmShareDenyWrite); InitArchive; end; atTar : begin FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyWrite); inherited InitArchive; end; atGZip : begin FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; end; atGZippedTar : begin FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; end; atBzip2 : begin FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; end; atBzippedTar : begin FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; atXz, atXzippedTar : begin FArchive := TAbXzArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); inherited InitArchive; end; atLzma, atLzmaTar : begin FArchive := TAbLzmaArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); inherited InitArchive; end; else raise EAbUnhandledType.Create; end {case}; FArchiveType := ArcType; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetStoreOptions(Value : TAbStoreOptions); begin FStoreOptions := Value; if (ZipArchive <> nil) then ZipArchive.StoreOptions := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetArchiveSaveProgressMeter(const Value: IAbProgressMeter); begin ReferenceInterface(FArchiveSaveProgressMeter, opRemove); FArchiveSaveProgressMeter := Value; ReferenceInterface(FArchiveSaveProgressMeter, opInsert); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.SetZipfileComment(const Value : AnsiString); begin if (ZipArchive is TAbZipArchive) then TAbZipArchive(ZipArchive).ZipfileComment := Value else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ZipProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); begin AbZip(TAbZipArchive(Sender), TAbZipItem(Item), OutStream); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ZipFromStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream); begin if Assigned(InStream) then AbZipFromStream(TAbZipArchive(Sender), TAbZipItem(Item), OutStream, InStream) else raise EAbZipNoInsertion.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.DoArchiveSaveProgress(Sender : TObject; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FArchiveSaveProgressMeter) then FArchiveSaveProgressMeter.DoProgress(Progress); if Assigned(FOnArchiveSaveProgress) then FOnArchiveSaveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.Notification(Component: TComponent; Operation: TOperation); begin inherited Notification(Component, Operation); if (Operation = opRemove) then if Assigned(ArchiveSaveProgressMeter) and Component.IsImplementorOf(ArchiveSaveProgressMeter) then ArchiveSaveProgressMeter := nil end; { -------------------------------------------------------------------------- } procedure TAbCustomZipper.ResetMeters; begin inherited ResetMeters; if Assigned(FArchiveSaveProgressMeter) then FArchiveSaveProgressMeter.Reset; end; { -------------------------------------------------------------------------- } end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abzipprc.pas����������������������������������������������0000644�0001750�0000144�00000023462�12014201074�022065� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipPrc.pas *} {*********************************************************} {* ABBREVIA: TABZipHelper class *} {*********************************************************} unit AbZipPrc; {$I AbDefine.inc} interface uses Classes, AbZipTyp; procedure AbZip( Sender : TAbZipArchive; Item : TAbZipItem; OutStream : TStream ); procedure AbZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); procedure DeflateStream( UncompressedStream, CompressedStream : TStream ); {-Deflates everything in UncompressedStream to CompressedStream no encryption is tried, no check on CRC is done, uses the whole compressedstream - no Progress events - no Frills! } implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} SysUtils, AbArcTyp, AbExcept, AbUtils, AbDfCryS, AbVMStrm, AbDfBase, AbDfEnc, AbSpanSt, DCClassesUtf8; { ========================================================================== } procedure DoDeflate(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); const DEFLATE_NORMAL_MASK = $00; DEFLATE_MAXIMUM_MASK = $02; DEFLATE_FAST_MASK = $04; DEFLATE_SUPERFAST_MASK = $06; var Hlpr : TAbDeflateHelper; begin Item.CompressionMethod := cmDeflated; Hlpr := TAbDeflateHelper.Create; {anything dealing with store options, etc. should already be done.} try {Hlpr} Hlpr.StreamSize := InStream.Size; { set deflation level desired } Hlpr.PKZipOption := '0'; case Archive.DeflationOption of doNormal : begin Hlpr.PKZipOption := 'n'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_NORMAL_MASK; end; doMaximum : begin Hlpr.PKZipOption := 'x'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_MAXIMUM_MASK; end; doFast : begin Hlpr.PKZipOption := 'f'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_FAST_MASK; end; doSuperFast : begin Hlpr.PKZipOption := 's'; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or DEFLATE_SUPERFAST_MASK; end; end; { attach progress notification method } Hlpr.OnProgressStep := Archive.DoInflateProgress; { provide encryption check value } Item.CRC32 := Deflate(InStream, OutStream, Hlpr); finally {Hlpr} Hlpr.Free; end; {Hlpr} end; { ========================================================================== } procedure DoStore(Archive : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var CRC32 : LongInt; Percent : LongInt; LastPercent : LongInt; InSize : Int64; DataRead : Int64; Total : Int64; Abort : Boolean; Buffer : array [0..8191] of byte; begin { setup } Item.CompressionMethod := cmStored; Abort := False; CRC32 := -1; Total := 0; Percent := 0; LastPercent := 0; InSize := InStream.Size; { get first bufferful } DataRead := InStream.Read(Buffer, SizeOf(Buffer)); { while more data has been read and we're not told to bail } while (DataRead <> 0) and not Abort do begin {report the progress} if Assigned(Archive.OnProgress) then begin Total := Total + DataRead; Percent := Round((100.0 * Total) / InSize); if (LastPercent <> Percent) then Archive.OnProgress(Percent, Abort); LastPercent := Percent; end; { update CRC} AbUpdateCRCBuffer(CRC32, Buffer, DataRead); { write data (encrypting if needed) } OutStream.WriteBuffer(Buffer, DataRead); { get next bufferful } DataRead := InStream.Read(Buffer, SizeOf(Buffer)); end; { finish CRC calculation } Item.CRC32 := not CRC32; { show final progress increment } if (Percent < 100) and Assigned(Archive.OnProgress) then Archive.OnProgress(100, Abort); { User wants to bail } if Abort then begin raise EAbUserAbort.Create; end; end; { ========================================================================== } procedure DoZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var ZipArchive : TAbZipArchive; InStartPos : LongInt; TempOut : TAbVirtualMemoryStream; DestStrm : TStream; begin ZipArchive := TAbZipArchive(Sender); { configure Item } Item.UncompressedSize := InStream.Size; Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag and AbLanguageEncodingFlag; if ZipArchive.Password <> '' then { encrypt the stream } DestStrm := TAbDfEncryptStream.Create(OutStream, LongInt(Item.LastModFileTime shl $10), ZipArchive.Password) else DestStrm := OutStream; try if InStream.Size > 0 then begin { determine how to store Item based on specified CompressionMethodToUse } case ZipArchive.CompressionMethodToUse of smDeflated : begin { Item is to be deflated regarless } { deflate item } DoDeflate(ZipArchive, Item, DestStrm, InStream); end; smStored : begin { Item is to be stored regardless } { store item } DoStore(ZipArchive, Item, DestStrm, InStream); end; smBestMethod : begin { Item is to be archived using method producing best compression } TempOut := TAbVirtualMemoryStream.Create; try TempOut.SwapFileDirectory := Sender.TempDirectory; { save starting points } InStartPos := InStream.Position; { try deflating item } DoDeflate(ZipArchive, Item, TempOut, InStream); { if deflated size > input size then got negative compression } { so storing the item is more efficient } if TempOut.Size > InStream.Size then begin { store item instead } { reset streams to original positions } InStream.Position := InStartPos; TempOut.Free; TempOut := TAbVirtualMemoryStream.Create; TempOut.SwapFileDirectory := Sender.TempDirectory; { store item } DoStore(ZipArchive, Item, TempOut, InStream); end {if}; TempOut.Seek(0, soBeginning); DestStrm.CopyFrom(TempOut, TempOut.Size); finally TempOut.Free; end; end; end; { case } end else begin { InStream is zero length} Item.CRC32 := 0; { ignore any storage indicator and treat as stored } DoStore(ZipArchive, Item, DestStrm, InStream); end; finally if DestStrm <> OutStream then DestStrm.Free; end; { update item } Item.CompressedSize := OutStream.Size; Item.InternalFileAttributes := 0; { don't care } if (ZipArchive.Password <> '') then Item.GeneralPurposeBitFlag := Item.GeneralPurposeBitFlag or AbFileIsEncryptedFlag or AbHasDataDescriptorFlag; end; { -------------------------------------------------------------------------- } procedure AbZipFromStream(Sender : TAbZipArchive; Item : TAbZipItem; OutStream, InStream : TStream); var FileTimeStamp : LongInt; begin // Set item properties for non-file streams Item.ExternalFileAttributes := 0; FileTimeStamp := DateTimeToFileDate(SysUtils.Now); Item.LastModFileTime := LongRec(FileTimeStamp).Lo; Item.LastModFileDate := LongRec(FileTimeStamp).Hi; DoZipFromStream(Sender, Item, OutStream, InStream); end; { -------------------------------------------------------------------------- } procedure AbZip( Sender : TAbZipArchive; Item : TAbZipItem; OutStream : TStream ); var UncompressedStream : TStream; AttrEx : TAbAttrExRec; begin if not AbFileGetAttrEx(Item.DiskFileName, AttrEx) then Raise EAbFileNotFound.Create; if ((AttrEx.Attr and faDirectory) <> 0) then UncompressedStream := TMemoryStream.Create else UncompressedStream := TFileStreamEx.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); try {UncompressedStream} {$IFDEF UNIX} Item.ExternalFileAttributes := LongWord(AttrEx.Mode) shl 16 + LongWord(AttrEx.Attr); {$ELSE} Item.ExternalFileAttributes := AttrEx.Attr; {$ENDIF} Item.LastModTimeAsDateTime := AttrEx.Time; DoZipFromStream(Sender, Item, OutStream, UncompressedStream); finally {UncompressedStream} UncompressedStream.Free; end; {UncompressedStream} end; { -------------------------------------------------------------------------- } procedure DeflateStream( UncompressedStream, CompressedStream : TStream ); {-Deflates everything in CompressedStream to UncompressedStream no encryption is tried, no check on CRC is done, uses the whole Uncompressedstream - no Progress events - no Frills! } begin Deflate(UncompressedStream, CompressedStream, nil); end; { -------------------------------------------------------------------------- } end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfhufd.pas����������������������������������������������0000644�0001750�0000144�00000044156�12014201074�022021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfHufD.pas *} {*********************************************************} {* Deflate Huffman tree for decoder *} {*********************************************************} unit AbDfHufD; {$I AbDefine.inc} {Activate this compiler define and rebuild if you want the complete huffman tree output to print to the current log. The output is voluminous to say the least...} {$IFDEF UseLogging} {.$DEFINE EnableMegaLog} {$ENDIF} {Notes: The object of this class is to build a decoder array, not to build a Huffman tree particularly. We don't want to decode huffman strings bit by bit. moving down the Huffman tree sometimes left, sometimes right. Instead we want to grab a set of bits and look them up in an array. Sometimes we'll grab too many bits, sure, but we can deal with that later. So, the object of the exercise is to calculate the code for a symbol, reverse it ('cos that's how the input bit stream will present it to us) and set that element of the array to the decoded symbol value (plus some extra information: bit lengths). If the alphabet size were 19 (the codelengths huffman tree) and the maximum code length 5, for example, the decoder array would be 2^5 elements long, much larger than the alphabet size. The user of this class will be presenting sets of 5 bits for us to decode. We would like to look up these 5 bits in the array (as an index) and have the symbol returned. Now, since the alphabet size is much less than the number of elements in the decoder array, we must set the other elements in the array as well. Consider a symbol that has a code of 110 in this scenario. The reversed code is 011, or 3, so we'd be setting element 3. However we should also be setting elements 01011, 10011, and 11011 to this symbol information as well, since the lookup will be 5 bits long. Because the code is a huffman code from a prefix tree, we won't get any index clashes between actual codes by this "filling in" process. For the codelength Huffman tree, the maximum code length is at most 7. This equates to a 128 element array. For the literal and distance trees, the max code length is at most 15. This equates to a 32768 element array. For a given lookup value the decoder will return a 32-bit value. The lower 16 bits is the decoded symbol, the next 8 bits is the code length for that symbol, the last 8 bits (the most significant) are the number of extra bits that must be extracted from the input bit stream. } interface uses AbDfBase; type TAbDfHuffmanUsage = ( {usage of a huffman decoder..} huEncoding, {..encoding} huDecoding, {..decoding} huBoth); {..both (used for static trees)} TAbDfDecodeHuffmanTree = class private FAlphaSize : integer; FDecodes : PAbDfLongintList; FDefMaxCodeLen : integer; FEncodes : PAbDfLongintList; {$IFOPT C+} FMask : integer; {$ENDIF} FMaxCodeLen : integer; FUsage : TAbDfHuffmanUsage; protected public constructor Create(aAlphabetSize : integer; aDefMaxCodeLen: integer; aUsage : TAbDfHuffmanUsage); destructor Destroy; override; procedure Build(const aCodeLengths : array of integer; aStartInx : integer; aCount : integer; const aExtraBits : array of byte; aExtraOffset : integer); function Decode(aLookupBits : integer) : longint; function Encode(aSymbol : integer) : longint; {$IFDEF UseLogging} procedure DebugPrint(aLog : TAbLogger); {$ENDIF} property LookupBitLength : integer read FMaxCodeLen; property Decodes : PAbDfLongintList read FDecodes; property Encodes : PAbDfLongintList read FEncodes; end; var AbStaticLiteralTree : TAbDfDecodeHuffmanTree; AbStaticDistanceTree : TAbDfDecodeHuffmanTree; implementation uses SysUtils; const PowerOfTwo : array [0..dfc_MaxCodeLength] of integer = (1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768); {===Debug helper routine=============================================} {$IFDEF EnableMegaLog} function CodeToStr(aCode : longint; aLen : integer) : string; var i : integer; begin if (aLen = 0) then Result := 'no code' else begin SetLength(Result, 32); FillChar(Result[1], 32, ' '); for i := 32 downto (33-aLen) do begin if Odd(aCode) then Result[i] := '1' else Result[i] := '0'; aCode := aCode shr 1; end; end; end; {$ENDIF} {====================================================================} {===TAbDfDecodeHuffmanTree===========================================} constructor TAbDfDecodeHuffmanTree.Create( aAlphabetSize : integer; aDefMaxCodeLen: integer; aUsage : TAbDfHuffmanUsage); begin {protect against dumb programming mistakes} Assert(aAlphabetSize >= 2, 'TAbDfDecodeHuffmanTree.Create: a huffman tree must be for at least two symbols'); {let the ancestor initialize} inherited Create; {save the alphabet size, etc} FAlphaSize := aAlphabetSize; FDefMaxCodeLen := aDefMaxCodeLen; FUsage := aUsage; {allocate the encoder array (needs to be initialized to zeros)} if (aUsage <> huDecoding) then FEncodes := AllocMem(FAlphaSize * sizeof(longint)); end; {--------} destructor TAbDfDecodeHuffmanTree.Destroy; begin {destroy the codes arrays} if (FDecodes <> nil) then FreeMem(FDecodes); if (FEncodes <> nil) then FreeMem(FEncodes); {let the ancestor die} inherited Destroy; end; {--------} procedure TAbDfDecodeHuffmanTree.Build( const aCodeLengths : array of integer; aStartInx : integer; aCount : integer; const aExtraBits : array of byte; aExtraOffset : integer); const ByteRevTable : array [0..255] of byte = ( $00, $80, $40, $C0, $20, $A0, $60, $E0, $10, $90, $50, $D0, $30, $B0, $70, $F0, $08, $88, $48, $C8, $28, $A8, $68, $E8, $18, $98, $58, $D8, $38, $B8, $78, $F8, $04, $84, $44, $C4, $24, $A4, $64, $E4, $14, $94, $54, $D4, $34, $B4, $74, $F4, $0C, $8C, $4C, $CC, $2C, $AC, $6C, $EC, $1C, $9C, $5C, $DC, $3C, $BC, $7C, $FC, $02, $82, $42, $C2, $22, $A2, $62, $E2, $12, $92, $52, $D2, $32, $B2, $72, $F2, $0A, $8A, $4A, $CA, $2A, $AA, $6A, $EA, $1A, $9A, $5A, $DA, $3A, $BA, $7A, $FA, $06, $86, $46, $C6, $26, $A6, $66, $E6, $16, $96, $56, $D6, $36, $B6, $76, $F6, $0E, $8E, $4E, $CE, $2E, $AE, $6E, $EE, $1E, $9E, $5E, $DE, $3E, $BE, $7E, $FE, $01, $81, $41, $C1, $21, $A1, $61, $E1, $11, $91, $51, $D1, $31, $B1, $71, $F1, $09, $89, $49, $C9, $29, $A9, $69, $E9, $19, $99, $59, $D9, $39, $B9, $79, $F9, $05, $85, $45, $C5, $25, $A5, $65, $E5, $15, $95, $55, $D5, $35, $B5, $75, $F5, $0D, $8D, $4D, $CD, $2D, $AD, $6D, $ED, $1D, $9D, $5D, $DD, $3D, $BD, $7D, $FD, $03, $83, $43, $C3, $23, $A3, $63, $E3, $13, $93, $53, $D3, $33, $B3, $73, $F3, $0B, $8B, $4B, $CB, $2B, $AB, $6B, $EB, $1B, $9B, $5B, $DB, $3B, $BB, $7B, $FB, $07, $87, $47, $C7, $27, $A7, $67, $E7, $17, $97, $57, $D7, $37, $B7, $77, $F7, $0F, $8F, $4F, $CF, $2F, $AF, $6F, $EF, $1F, $9F, $5F, $DF, $3F, $BF, $7F, $FF); var i : integer; Symbol : integer; LengthCount : array [0..dfc_MaxCodeLength] of integer; NextCode : array [0..dfc_MaxCodeLength] of integer; Code : longint; CodeLen : integer; CodeData : longint; DecoderLen : integer; CodeIncr : integer; Decodes : PAbDfLongintList; Encodes : PAbDfLongintList; {$IFDEF CPU386} DecodesEnd : pointer; {$ENDIF} TablePtr : pointer; begin {count the number of instances of each code length and calculate the maximum code length at the same time} FillChar(LengthCount, sizeof(LengthCount), 0); FMaxCodeLen := 0; for i := 0 to pred(aCount) do begin CodeLen := aCodeLengths[i + aStartInx]; Assert((CodeLen <= FDefMaxCodeLen), Format('TAbDfDecodeHuffmanTree.Build: a code length is greater than %d', [FDefMaxCodeLen])); if (CodeLen > FMaxCodeLen) then FMaxCodeLen := CodeLen; inc(LengthCount[CodeLen]); end; {now we know the maximum code length we can allocate our decoder array} {$IFNDEF CPU386} DecoderLen := 0; {$ENDIF} if (FUsage <> huEncoding) then begin DecoderLen := PowerOfTwo[FMaxCodeLen]; GetMem(FDecodes, DecoderLen * sizeof(longint)); {$IFDEF CPU386} DecodesEnd := PAnsiChar(FDecodes) + (DecoderLen * sizeof(longint)); {$ENDIF} {$IFOPT C+} FillChar(FDecodes^, DecoderLen * sizeof(longint), $FF); FMask := not (DecoderLen - 1); {$ENDIF} end; {calculate the start codes for each code length} Code := 0; LengthCount[0] := 0; for i := 1 to FDefMaxCodeLen do begin Code := (Code + LengthCount[i-1]) shl 1; NextCode[i] := Code; end; {for speed and convenience} Decodes := FDecodes; Encodes := FEncodes; TablePtr := @ByteRevTable; {for each symbol...} for Symbol := 0 to pred(aCount) do begin {calculate the code length} CodeLen := aCodeLengths[Symbol + aStartInx]; {if the code length were zero, just set the relevant entry in the encoder array; the decoder array doesn't need anything} if (CodeLen = 0) then begin if (FUsage <> huDecoding) then Encodes^[Symbol] := -1 end {otherwise we need to fill elements in both the encoder and decoder arrays} else begin {calculate *reversed* code} Code := NextCode[CodeLen]; {$IFDEF CPU386} asm push esi mov eax, Code mov esi, TablePtr xor ecx, ecx xor edx, edx mov cl, ah mov dl, al mov al, [esi+ecx] mov ah, [esi+edx] mov ecx, 16 pop esi sub ecx, CodeLen shr eax, cl mov Code, eax end; {$ELSE} CodeData:= Code; LongRec(Code).Bytes[1]:= ByteRevTable[LongRec(CodeData).Bytes[0]]; LongRec(Code).Bytes[0]:= ByteRevTable[LongRec(CodeData).Bytes[1]]; Code:= Code shr (16-CodeLen); {$ENDIF} {set the code data (bit count, extra bits required, symbol), everywhere the reversed code would appear in the decoder array; set the code data in the encoder array as well} if (Symbol >= aExtraOffset) then begin if (FUsage <> huEncoding) then CodeData := Symbol + { symbol} (CodeLen shl 16) + { code length} (aExtraBits[Symbol-aExtraOffset] shl 24); { extra bits required} if (FUsage <> huDecoding) then Encodes^[Symbol] := Code + { code} (CodeLen shl 16) + { code length} (aExtraBits[Symbol-aExtraOffset] shl 24) { extra bits required} end else begin if (FUsage <> huEncoding) then CodeData := Symbol + { symbol} (CodeLen shl 16); { code length} if (FUsage <> huDecoding) then Encodes^[Symbol] := Code + { code} (CodeLen shl 16); { code length} end; {OPTIMIZATION NOTE: the following code CodeIncr := PowerOfTwo[CodeLen]; while Code < DecoderLen do begin Decodes^[Code] := CodeData; inc(Code, CodeIncr); end; was replaced by the asm code below to improve the speed. The code in the loop is the big time sink in this routine so it was best to replace it.} if (FUsage <> huEncoding) then begin {$IFDEF CPU386} CodeIncr := PowerOfTwo[CodeLen] * sizeof(longint); asm push edi { save edi} mov eax, Decodes { get the Decodes array} mov edi, DecodesEnd { get the end of the Decodes array} mov edx, Code { get Code and..} shl edx, 1 { ..multiply by 4} shl edx, 1 add eax, edx { eax => first element to be set} mov edx, CodeData { get the CodeData} mov ecx, CodeIncr { get the increment per loop} @@1: mov [eax], edx { set the element} add eax, ecx { move to the next element} cmp eax, edi { if we haven't gone past the end..} jl @@1 { ..go back for the next one} pop edi { retrieve edi} end; {$ELSE} CodeIncr := PowerOfTwo[CodeLen]; while Code < DecoderLen do begin Decodes^[Code] := CodeData; inc(Code, CodeIncr); end; {$ENDIF} end; {we've used this code up for this symbol, so increment for the next symbol at this code length} inc(NextCode[CodeLen]); end; end; end; {--------} {$IFDEF UseLogging} procedure TAbDfDecodeHuffmanTree.DebugPrint(aLog : TAbLogger); {$IFDEF EnableMegaLog} var i : integer; Code : longint; {$ENDIF} begin {to print the huffman tree, we must have a logger...} Assert(aLog <> nil, 'TAbDfDecodeHuffmanTree.DebugPrint needs a logger object to which to print'); if (FUsage <> huEncoding) then begin aLog.WriteLine('Huffman decoder array'); aLog.WriteLine(Format('Alphabet size: %d', [FAlphaSize])); aLog.WriteLine(Format('Max codelength: %d', [FMaxCodeLen])); {$IFDEF EnableMegaLog} aLog.WriteLine('Index Len Xtra Symbol Reversed Code'); for i := 0 to pred(PowerOfTwo[FMaxCodeLen]) do begin Code := FDecodes^[i]; if (Code = -1) then aLog.WriteLine(Format('%5d%49s', [i, 'no code'])) else aLog.WriteLine(Format('%5d%4d%5d%7d%33s', [i, ((Code shr 16) and $FF), ((Code shr 24) and $FF), (Code and $FFFF), CodeToStr(i, ((Code shr 16) and $FF))])); end; aLog.WriteLine('---end decoder array---'); {$ENDIF} end; if (FUsage <> huDecoding) then begin aLog.WriteLine('Huffman encoder array'); aLog.WriteLine(Format('Alphabet size: %d', [FAlphaSize])); {$IFDEF EnableMegaLog} aLog.WriteLine('Symbol Len Xtra Reversed Code'); for i := 0 to pred(FAlphaSize) do begin Code := FEncodes^[i]; if (Code = -1) then aLog.WriteLine(Format('%6d%42s', [i, 'no code'])) else aLog.WriteLine(Format('%6d%4d%5d%33s', [i, ((Code shr 16) and $FF), ((Code shr 24) and $FF), CodeToStr((Code and $FFFF), ((Code shr 16) and $FF))])); end; aLog.WriteLine('---end encoder array---'); {$ENDIF} end; end; {$ENDIF} {--------} function TAbDfDecodeHuffmanTree.Decode(aLookupBits : integer) : longint; begin {protect against dumb programming mistakes (note: FMask only exists if assertions are on)} {$IFOPT C+} Assert((aLookupBits and FMask) = 0, 'TAbDfDecodeHuffmanTree.Decode: trying to decode too many bits, use LookupBitLength property'); {$ENDIF} {return the code data} Result := FDecodes^[aLookupBits]; end; {--------} function TAbDfDecodeHuffmanTree.Encode(aSymbol : integer) : longint; begin {protect against dumb programming mistakes} Assert((0 <= aSymbol) and (aSymbol < FAlphaSize), 'TAbDfDecodeHuffmanTree.Encode: trying to encode a symbol that is not in the alphabet'); {return the code data} Result := FEncodes^[aSymbol]; {if the result is -1, it's another programming mistake: the user is attempting to get a code for a symbol that wasn't being used} Assert(Result <> -1, 'TAbDfDecodeHuffmanTree.Encode: trying to encode a symbol that was not used'); end; {====================================================================} {===BuildStaticTrees=================================================} procedure BuildStaticTrees; var i : integer; CodeLens : array [0..287] of integer; begin {this routine builds the static huffman trees, those whose code lengths are determined by the deflate spec} {the static literal tree first} for i := 0 to 143 do CodeLens[i] := 8; for i := 144 to 255 do CodeLens[i] := 9; for i := 256 to 279 do CodeLens[i] := 7; for i := 280 to 287 do CodeLens[i] := 8; AbStaticLiteralTree := TAbDfDecodeHuffmanTree.Create(288, 15, huBoth); AbStaticLiteralTree.Build(CodeLens, 0, 288, dfc_LitExtraBits, dfc_LitExtraOffset); {the static distance tree afterwards} for i := 0 to 31 do CodeLens[i] := 5; AbStaticDistanceTree := TAbDfDecodeHuffmanTree.Create(32, 15, huBoth); AbStaticDistanceTree.Build(CodeLens, 0, 32, dfc_DistExtraBits, dfc_DistExtraOffset); end; {====================================================================} initialization BuildStaticTrees; finalization AbStaticLiteralTree.Free; AbStaticDistanceTree.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfinw.pas�����������������������������������������������0000644�0001750�0000144�00000053741�12014201074�021670� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfInW.pas *} {*********************************************************} {* Deflate input sliding window unit *} {*********************************************************} unit AbDfInW; {$I AbDefine.inc} interface uses Classes, AbDfBase; {Notes: TdfInputWindow implements a sliding window on data for the LZ77 dictionary encoding. The stream passed to the class is automatically read when required to keep the internal buffer fully loaded. } type TAbDfMatch = record maLen : integer; maDist : integer; maLit : AnsiChar; end; type PAbPointerList = ^TAbPointerList; TAbPointerList = array[0..MaxInt div SizeOf(Pointer) - 1] of Pointer; TAbDfInputWindow = class private FAdvanceStart : boolean; FBuffer : PAnsiChar; FBufferEnd : PAnsiChar; FBytesUsed : longint; FChainLen : integer; FHashChains : PAbPointerList; FHashHeads : PAbPointerList; FHashIndex : integer; FChecksum : longint; FCurrent : PAnsiChar; FLookAheadEnd : PAnsiChar; FMaxMatchLen : integer; FMustSlide : boolean; FOnProgress : TAbProgressStep; FSlidePoint : PAnsiChar; FStart : PAnsiChar; FStartOffset : longint; FStream : TStream; FStreamSize : longint; FUseCRC32 : boolean; FUseDeflate64 : boolean; FWinMask : integer; FWinSize : integer; protected function iwGetChecksum : longint; procedure iwReadFromStream; procedure iwSetCapacity(aValue : longint); procedure iwSlide; public constructor Create(aStream : TStream; aStreamSize : longint; aWinSize : integer; aChainLength : integer; aUseDeflate64 : boolean; aUseCRC32 : boolean); destructor Destroy; override; procedure Advance(aCount : integer; aHashCount : integer); procedure AdvanceByOne; function FindLongestMatch(aAmpleLength : integer; var aMatch : TAbDfMatch; const aPrevMatch : TAbDfMatch) : boolean; function GetNextChar : AnsiChar; function GetNextKeyLength : integer; function Position : longint; procedure ReadBuffer(var aBuffer; aCount : longint; aOffset : Int64); property ChainLen : integer read FChainLen write FChainLen; property Checksum : longint read iwGetChecksum; property OnProgress : TAbProgressStep read FOnProgress write FOnProgress; end; implementation uses SysUtils; {Notes: Meaning of the internal pointers: |----------+===================+==+--------------------------| | | | | | FBuffer FStart FCurrent FLookAheadEnd FBufferEnd FCurrent is the current match position. The valid data that can be matched is between FStart and FLookAheadEnd, The data between FStart and FCurrent has already been seen; the data between FCurrent and FLookAheadEnd can be used for matching. The buffer size depends on the requested window size (a multiple of 1KB, up to 32KB for deflate, up to 64KB for deflate64) and the lookahead size (up to 258 bytes for deflate and 64KB for deflate64.) The window of data continuously slides to the right, and is slid back to FBuffer whenever FStart reaches a point 16KB away, this point being given by FSlidePoint. The hash table: This is a chained hash table with some peculiarities. First the table itself, FHashHeads. It contains pointers to strings in the window buffer, not to chains. The chains are held is a separate structure, FHashChains. The hash function on the three-character keys is a Rabin-Karp function: ((((Ch1 shl 5) xor Ch2) shl 5) xor Ch3) and $3FFF designed so that a running hash value can be kept and calculated per character. The hash table is $4000 elements long (obviously, given the hash function). On insertion, the previous pointer in the hash table at the calculated index is saved and replaced by the new pointer. The old pointer is saved in the chains array. This has the same number of elements as the sliding window has characters. The pointer is placed at (Ptr and (WindowsSize-1)) overwriting the value that's already there. In this fashion the individual chains in the standard hash table are interwoven with each other in this hash table, like a skein of threads. } const c_HashCount = $4000; {the number of hash entries} c_HashMask = c_HashCount - 1; {a mask for the hash function} c_HashShift = 5; {shift value for the hash function} {===TAbDfInputWindow=================================================} constructor TAbDfInputWindow.Create(aStream : TStream; aStreamSize : longint; aWinSize : integer; aChainLength : integer; aUseDeflate64 : boolean; aUseCRC32 : boolean); begin {create the ancestor} inherited Create; {save parameters} FStreamSize := aStreamSize; FWinSize := aWinSize; FWinMask := aWinSize - 1; FStream := aStream; FChainLen := aChainLength; FUseDeflate64 := aUseDeflate64; FUseCRC32 := aUseCRC32; if aUseCRC32 then FChecksum := -1 { CRC32 starts off with all bits set } else FCheckSum := 1; { Adler32 starts off with a value of 1 } {set capacity of sliding window} iwSetCapacity(aWinSize); {create the hash table, first the hash table itself (and set all entries to nil)} FHashHeads := AllocMem(c_HashCount * sizeof(pointer)); {..now the chains (there's no need to set the entries to nil, since the chain entries get fed from the head entries before searching)} GetMem(FHashChains, aWinSize * sizeof(pointer)); {read the first chunk of data from the stream} FMustSlide := true; iwReadFromStream; {if there are at least two bytes, prime the hash index} if ((FLookAheadEnd - FBuffer) >= 2) then FHashIndex := ((longint(FBuffer[0]) shl c_HashShift) xor longint(FBuffer[1])) and c_HashMask; end; {--------} destructor TAbDfInputWindow.Destroy; begin {free the hash table} FreeMem(FHashHeads); FreeMem(FHashChains); {free the buffer} FreeMem(FBuffer); {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfInputWindow.Advance(aCount : integer; aHashCount : integer); var i : integer; ByteCount : integer; Percent : integer; HashChains: PAbPointerList; HashHeads : PAbPointerList; HashInx : integer; CurPos : PAnsiChar; begin Assert((FLookAheadEnd - FCurrent) >= aCount, 'TAbDfInputWindow.Advance: seem to be advancing into the unknown'); Assert((aHashCount = aCount) or (aHashCount = pred(aCount)), 'TAbDfInputWindow.Advance: the parameters are plain wrong'); {use local var for speed} CurPos := FCurrent; {advance the current pointer if needed} if (aCount > aHashCount) then inc(CurPos); {make sure we update the hash table; remember that the string[3] at the current position has already been added to the hash table (for notes on updating the hash table, see FindLongestMatch} {use local vars for speed} HashChains := FHashChains; HashHeads := FHashHeads; HashInx := FHashIndex; {update the hash table} for i := 0 to pred(aHashCount) do begin HashInx := ((HashInx shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; HashChains^[PtrUInt(CurPos) and FWinMask] := HashHeads^[HashInx]; HashHeads^[HashInx] := CurPos; inc(CurPos); end; {replace old values} FHashChains := HashChains; FHashHeads := HashHeads; FHashIndex := HashInx; FCurrent := CurPos; {if we've seen at least FWinSize bytes...} if FAdvanceStart then begin {advance the start of the sliding window} inc(FStart, aCount); inc(FStartOffset, aCount); {check to see if we have advanced into the slide zone} if FMustSlide and (FStart >= FSlidePoint) then iwSlide; end {otherwise check to see if we've seen at least FWinSize bytes} else if ((CurPos - FStart) >= FWinSize) then begin FAdvanceStart := true; {note: we can't advance automatically aCount bytes here, we need to calculate the actual count} ByteCount := (CurPos - FWinSize) - FStart; inc(FStart, ByteCount); inc(FStartOffset, ByteCount); end; {show progress} if Assigned(FOnProgress) then begin inc(FBytesUsed, aCount); if ((FBytesUsed and $FFF) = 0) then begin Percent := Round((100.0 * FBytesUsed) / FStreamSize); FOnProgress(Percent); end; end; {check to see if we have advanced into the slide zone} if (FStart >= FSlidePoint) then iwSlide; end; {--------} procedure TAbDfInputWindow.AdvanceByOne; var Percent : integer; begin {advance the current pointer} inc(FCurrent); {if we've seen at least FWinSize bytes...} if FAdvanceStart then begin {advance the start of the sliding window} inc(FStart, 1); inc(FStartOffset, 1); {check to see if we have advanced into the slide zone} if FMustSlide and (FStart >= FSlidePoint) then iwSlide; end {otherwise check to see if we've seen FWinSize bytes} else if ((FCurrent - FStart) = FWinSize) then FAdvanceStart := true; {show progress} if Assigned(FOnProgress) then begin inc(FBytesUsed, 1); if ((FBytesUsed and $FFF) = 0) then begin Percent := Round((100.0 * FBytesUsed) / FStreamSize); FOnProgress(Percent); end; end; end; {--------} function TAbDfInputWindow.FindLongestMatch(aAmpleLength : integer; var aMatch : TAbDfMatch; const aPrevMatch : TAbDfMatch) : boolean; {Note: this routine implements a greedy algorithm and is by far the time sink for compression. There are two versions, one written in Pascal for understanding, one in assembler for speed. Activate one and only one of the following compiler defines.} {$IFDEF CPU386} {$DEFINE UseGreedyAsm} {$ELSE} {$DEFINE UseGreedyPascal} {$ENDIF} {Check to see that all is correct} {$IFDEF UseGreedyAsm} {$IFDEF UseGreedyPascal} !! Compile Error: only one of the greedy compiler defines can be used {$ENDIF} {$ELSE} {$IFNDEF UseGreedyPascal} !! Compile Error: one of the greedy compiler defines must be used {$ENDIF} {$ENDIF} type PWord = ^word; var MaxLen : longint; MaxDist : longint; MaxMatch : integer; ChainLen : integer; PrevStrPos : PAnsiChar; CurPos : PAnsiChar; {$IFDEF UseGreedyAsm} CurWord : word; MaxWord : word; {$ENDIF} {$IFDEF UseGreedyPascal} Len : longint; MatchStr : PAnsiChar; CurrentCh : PAnsiChar; CurCh : AnsiChar; MaxCh : AnsiChar; {$ENDIF} begin {calculate the hash index for the current position; using the Rabin-Karp algorithm this is equal to the previous index less the effect of the character just lost plus the effect of the character just gained} CurPos := FCurrent; FHashIndex := ((FHashIndex shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; {get the head of the hash chain: this is the position in the sliding window of the previous 3-character string with this hash value} PrevStrPos := FHashHeads^[FHashIndex]; {set the head of the hash chain equal to our current position} FHashHeads^[FHashIndex] := CurPos; {update the chain itself: set the entry for this position equal to the previous string position} FHashChains^[PtrUInt(CurPos) and FWinMask] := PrevStrPos; {calculate the maximum match we could do at this position} MaxMatch := (FLookAheadEnd - CurPos); if (MaxMatch > FMaxMatchLen) then MaxMatch := FMaxMatchLen; if (aAmpleLength > MaxMatch) then aAmpleLength := MaxMatch; {calculate the current match length} if (aPrevMatch.maLen = 0) then MaxLen := 2 else begin if (MaxMatch < aPrevMatch.maLen) then begin Result := false; aMatch.maLen := 0; aMatch.maLit := CurPos^; Exit; end; MaxLen := aPrevMatch.maLen; end; {get the bytes at the current position and at the end of the maximum match we have to better} {$IFDEF UseGreedyAsm} CurWord := PWord(CurPos)^; MaxWord := PWord(CurPos + pred(MaxLen))^; {$ENDIF} {$IFDEF UseGreedyPascal} CurCh := CurPos^; MaxCh := (CurPos + pred(MaxLen))^; {$ENDIF} {set the chain length to search based on the current maximum match (basically: if we've already satisfied the ample length requirement, don't search as far)} if (MaxLen >= aAmpleLength) then ChainLen := FChainLen div 4 else ChainLen := FChainLen; {get ready for the loop} {$IFDEF DefeatWarnings} MaxDist := 0; {$ENDIF} {$IFDEF UseGreedyAsm} { slip into assembler for speed...} asm push ebx { save those registers we should} push esi push edi mov ebx, Self { ebx will store the Self pointer} mov edi, PrevStrPos { edi => previous string} mov esi, CurPos { esi => current string} @@TestThisPosition: { check previous string is in range} or edi, edi je @@Exit cmp edi, [ebx].TAbDfInputWindow.FStart jb @@Exit cmp edi, CurPos jae @@Exit mov ax, [edi] { check previous string starts with same} cmp CurWord, ax { two bytes as current} jne @@GetNextPosition { ..nope, they don't match} mov edx, edi { check previous string ends with same} add edi, MaxLen { two bytes as current (by "ends" we} dec edi { mean the last two bytes at the} mov ax, [edi] { current match length)} cmp MaxWord, ax mov edi, edx jne @@GetNextPosition { ..nope, they don't match} push edi { compare the previous string with the} push esi { current string} mov eax, MaxMatch add edi, 2 { (we've already checked that the first} sub eax, 2 { two characters are the same)} add esi, 2 mov ecx, eax @@CmpQuads: cmp ecx, 4 jb @@CmpSingles mov edx, [esi] cmp edx, [edi] jne @@CmpSingles add esi, 4 add edi, 4 sub ecx, 4 jnz @@CmpQuads jmp @@MatchCheck @@CmpSingles: or ecx, ecx jb @@MatchCheck mov dl, [esi] cmp dl, [edi] jne @@MatchCheck inc esi inc edi dec ecx jnz @@CmpSingles @@MatchCheck: sub eax, ecx add eax, 2 pop esi pop edi cmp eax, MaxLen { have we found a longer match?} jbe @@GetNextPosition { ..no} mov MaxLen, eax { ..yes, so save it} mov eax, esi { calculate the dist for this new match} sub eax, edi mov MaxDist, eax cmp eax, aAmpleLength { if this match is ample enough, exit} jae @@Exit mov eax, esi { calculate the two bytes at the end of} add eax, MaxLen { this new match} dec eax mov ax, [eax] mov MaxWord, ax @@GetNextPosition: mov eax, ChainLen { we've visited one more link on the} dec eax { chain, if that's the last one we} je @@Exit { should visit, exit} mov ChainLen, eax { advance along the chain} mov edx, [ebx].TAbDfInputWindow.FHashChains mov eax, [ebx].TAbDfInputWindow.FWinMask and edi, eax shl edi, 2 mov edi, [edx+edi] jmp @@TestThisPosition @@Exit: pop edi pop esi pop ebx end; {$ENDIF} {$IFDEF UseGreedyPascal} {for all possible hash nodes in the chain...} while (FStart <= PrevStrPos) and (PrevStrPos < CurPos) do begin {if the initial and maximal characters match...} if (PrevStrPos[0] = CurCh) and (PrevStrPos[pred(MaxLen)] = MaxCh) then begin {compare more characters} Len := 1; CurrentCh := CurPos + 1; MatchStr := PrevStrPos + 1; {compare away, but don't go above the maximum length} while (Len < MaxMatch) and (MatchStr^ = CurrentCh^) do begin inc(CurrentCh); inc(MatchStr); inc(Len); end; {have we reached another maximum for the length?} if (Len > MaxLen) then begin MaxLen := Len; {calculate the distance} MaxDist := CurPos - PrevStrPos; MaxCh := CurPos[pred(MaxLen)]; {is the new best length ample enough?} if MaxLen >= aAmpleLength then Break; end; end; {have we reached the end of this chain?} dec(ChainLen); if (ChainLen = 0) then Break; {otherwise move onto the next position} PrevStrPos := FHashChains^[PtrUInt(PrevStrPos) and FWinMask]; end; {$ENDIF} {based on the results of our investigation, return the match values} if (MaxLen < 3) or (MaxLen <= aPrevMatch.maLen) then begin Result := false; aMatch.maLen := 0; aMatch.maLit := CurPos^; end else begin Result := true; aMatch.maLen := MaxLen; aMatch.maDist := MaxDist; aMatch.maLit := CurPos^; { just in case...} end; end; {--------} function TAbDfInputWindow.GetNextChar : AnsiChar; begin Result := FCurrent^; inc(FCurrent); end; {--------} function TAbDfInputWindow.GetNextKeyLength : integer; begin Result := FLookAheadEnd - FCurrent; if (Result > 3) then Result := 3; end; {--------} function TAbDfInputWindow.iwGetChecksum : longint; begin {the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if FUseCRC32 then Result := not FChecksum else Result := FChecksum; end; {--------} procedure TAbDfInputWindow.iwReadFromStream; var BytesRead : longint; BytesToRead : longint; begin {read some more data into the look ahead zone} BytesToRead := FBufferEnd - FLookAheadEnd; BytesRead := FStream.Read(FLookAheadEnd^, BytesToRead); {if nothing was read, we reached the end of the stream; hence there's no more need to slide the window since we have all the data} if (BytesRead = 0) then FMustSlide := false {otherwise something was actually read...} else begin {update the checksum} if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FLookAheadEnd^, BytesRead) else AbUpdateAdlerBuffer(FChecksum, FLookAheadEnd^, BytesRead); {reposition the pointer for the end of the lookahead area} inc(FLookAheadEnd, BytesRead); end; end; {--------} procedure TAbDfInputWindow.iwSetCapacity(aValue : longint); var ActualSize : integer; begin {calculate the actual size; this will be the value passed in, plus the correct look ahead size, plus 16KB} ActualSize := aValue + (16 * 1024); if FUseDeflate64 then begin inc(ActualSize, dfc_MaxMatchLen64); FMaxMatchLen := dfc_MaxMatchLen64; end else begin inc(ActualSize, dfc_MaxMatchLen); FMaxMatchLen := dfc_MaxMatchLen; end; {get the new buffer} GetMem(FBuffer, ActualSize); {set the other buffer pointers} FStart := FBuffer; FCurrent := FBuffer; FLookAheadEnd := FBuffer; FBufferEnd := FBuffer + ActualSize; FSlidePoint := FBuffer + (16 * 1024); end; {--------} procedure TAbDfInputWindow.iwSlide; var i : integer; ByteCount : PtrInt; Buffer : PAnsiChar; ListItem : PPointer; begin {move current valid data back to the start of the buffer} ByteCount := FLookAheadEnd - FStart; Move(FStart^, FBuffer^, ByteCount); {reset the various pointers} ByteCount := FStart - FBuffer; FStart := FBuffer; dec(FCurrent, ByteCount); dec(FLookAheadEnd, ByteCount); {patch up the hash table: the head pointers} Buffer := FBuffer; ListItem := @FHashHeads^[0]; for i := 0 to pred(c_HashCount) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then ListItem^ := nil; inc(ListItem); end; {..the chain pointers} ListItem := @FHashChains^[0]; for i := 0 to pred(FWinSize) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then ListItem^ := nil; inc(ListItem); end; {now read some more data from the stream} iwReadFromStream; end; {--------} function TAbDfInputWindow.Position : longint; begin Result := (FCurrent - FStart) + FStartOffset; end; {--------} procedure TAbDfInputWindow.ReadBuffer(var aBuffer; aCount : longint; aOffset : Int64); var CurPos : Int64; begin CurPos := FStream.Seek(0, soCurrent); FStream.Seek(aOffSet, soBeginning); FStream.ReadBuffer(aBuffer, aCount); FStream.Seek(CurPos, soBeginning); end; {====================================================================} end. �������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdefine.inc����������������������������������������������0000644�0001750�0000144�00000021173�12423755012�022005� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDefine.inc *} {*********************************************************} {* ABBREVIA: Compiler options/directives include file *} {*********************************************************} {NOTE: ABDEFINE.INC is included in all ABBREVIA units; hence you can specify global compiler options here. ABDEFINE.INC is included *before* each unit's own required compiler options, so options specified here could be overridden by hardcoded options in the unit source file.} {====Compiler options that can be changed====} {$A+ Force alignment on word/dword boundaries} {$S- No stack checking} {---Global compiler defines for 32-bit OS's---} {====Global fixed compiler options (do NOT change)====} {$B- Incomplete boolean evaluation} {$H+ Long string support} {$P- No open string parameters} {$Q- Arithmetic overflow checking} {!! - Needs to be turned on!} {$R- Range checking} {!! - Needs to be turned on!} {$T+ No type-checked pointers} {$V- No var string checking} {$X+ Extended syntax} {$Z1 Enumerations are byte sized} {====Platform defines================================================} { map Delphi platform defines to FreePascal's (MSWINDOWS/UNIX/LINUX/DARWIN) } {$IFNDEF FPC} {$IF DEFINED(LINUX) AND (CompilerVersion < 15)} {$DEFINE KYLIX} {$DEFINE UNIX} {$IFEND} {$IFDEF MACOS} {$DEFINE DARWIN} {$ENDIF} {$IFDEF POSIX} {$DEFINE UNIX} {$ENDIF} {$ENDIF} { Unix API (Kylix/Delphi/FreePascal) } {$IFDEF UNIX} {$IF DEFINED(FPC)} {$DEFINE FPCUnixAPI} {$ELSEIF DEFINED(KYLIX)} {$DEFINE LibcAPI} {$ELSE} {$DEFINE PosixAPI} {$IFEND} {$ENDIF} {$IFDEF FPC} {$MODE DELPHI} {$PACKRECORDS C} {$ENDIF} {Activate this define to show CLX/LCL dialogs for spanning media requests. The default behavior will abort the operation instead. This define is only safe when using Abbrevia from the foreground thread. If using it from a background thread override OnRequestLastDisk, OnRequestNthDisk, and OnRequestBlankDisk and synchronize to the foreground yourself. The Windows version always MessageBox so it's thread-safe.} {.$DEFINE UnixDialogs} {====RTL defines=====================================================} {$IFNDEF FPC} {$IF RTLVersion >= 18} // Delphi 2006 {$DEFINE HasAdvancedRecords} {$IFEND} {$IF RTLVersion >= 20} // Delphi 2009 {$DEFINE HasThreadFinished} {$IFEND} {$IF RTLVersion >= 21} // Delphi 2010 {$DEFINE HasThreadStart} {$IFEND} {$IF RTLVersion >= 23} // Delphi XE2 {$DEFINE HasPlatformsAttribute} {$IFEND} {$ENDIF} {====Widgetset defines===============================================} { VCL version specific defines } {$IFNDEF FPC} {$IF RTLVersion >= 17} // Delphi 2005 {$DEFINE HasOnMouseActivate} {$IFEND} {$IF RTLVersion >= 18} // Delphi 2006 {$DEFINE HasOnMouseEnter} {$IFEND} {$IF RTLVersion >= 20} // Delphi 2009 {$DEFINE HasListViewGroups} {$DEFINE HasListViewOnItemChecked} {$DEFINE HasParentDoubleBuffered} {$DEFINE HasTreeViewExpandedImageIndex} {$IFEND} {$IF RTLVersion >= 21} // Delphi 2010 {$DEFINE HasGridDrawingStyle} {$DEFINE HasTouch} {$IFEND} {$ENDIF} {====General defines=================================================} {Activate the following define to include extra code to get rid of all hints and warnings. Parts of ABBREVIA are written in such a way that the hint/warning algorithms of the Delphi compilers are fooled and report things like variables being used before initialisation and so on when in reality the problem does not exist.} {$DEFINE DefeatWarnings} { Disable warnings for explicit string casts } {$IFDEF UNICODE} {$WARN EXPLICIT_STRING_CAST OFF} {$WARN EXPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} { Disable hints on Delphi XE2/Mac to prevent unexpanded inline messages } {$IFDEF POSIX} {$HINTS OFF} {$ENDIF} {====Bzip2 defines===================================================} {Activate this define to statically link bzip2 .obj files into the application. Curerntly only supported by Delphi/Win32.} {.$DEFINE Bzip2Static} {Activate this define to dynamically link to a libbz2.dll/libbbz2.so.1} {.$DEFINE Bzip2Dynamic} {Activate this define to load libbz2.dll/libbz2.so.1 at runtime using LoadLibrary} {.$DEFINE Bzip2Runtime} {Pick an appropriate linking method if none of the above are activate} {$IF NOT DEFINED(Bzip2Static) AND NOT DEFINED(Bzip2Dynamic) AND NOT DEFINED(Bzip2Runtime)} {$IFDEF FPC} {$DEFINE Bzip2Runtime} {$ELSE} {$IFDEF MSWINDOWS} {$DEFINE Bzip2Static} {$ELSE} {$DEFINE Bzip2Dynamic} {$ENDIF} {$ENDIF} {$IFEND} {====Zip defines=====================================================} {Activate the following define when you don't want Visual parts of the VCL library included for a program using a TAbArchive or TAbZipArchive} {.$DEFINE BuildingStub} {Activate the following define to include support for extracting files using PKzip compatible unShrink.} {.$DEFINE UnzipShrinkSupport} {Activate the following define to include support for extracting files using PKZip compatible unReduce.} {.$DEFINE UnzipReduceSupport} {Activate the following define to include support for extracting files using PKZip compatible unImplode.} {.$DEFINE UnzipImplodeSupport} {Activate the following to include support for extracting files using all older PKZip compatible methods (Shrink, Reduce, Implode} {$DEFINE UnzipBackwardSupport} {Activate the following to include support for extracting files using BZIP2 compression. Added in AppNote.txt v4.6. } {.$DEFINE UnzipBzip2Support} {Activate the following to include support for extracting files using 7-zip compatible Lzma compression. Added in AppNote.txt v6.3.} {.$DEFINE UnzipLzmaSupport} {Activate the following to include support for extracting files using zipx PPMd I compression. Added in AppNote.txt v6.3.} {.$DEFINE UnzipPPMdSupport} {Activate the following to include support for extracting .wav files using zipx WavPack compression. Requires copyright notice in your documentation. Check "WavPack License.txt" for details. Added in AppNote.txt v6.3. } {.$DEFINE UnzipWavPackSupport} {Activate the following to include support for extracting files using all newer (zipx) compatible methods (Bzip2, Lzma, PPMd, WavPack)} {$DEFINE UnzipZipxSupport} {Activate the following to include logging support in the deflate/ inflate code. Since this logging support is a by-product of assertion checking, you should only activate it if that is also on: $C+} {$IFOPT C+} //if Assertions are on {.$DEFINE UseLogging} {$ENDIF} { According to http://www.gzip.org/zlib/rfc1952.txt A compliant gzip compressor should calculate and set the CRC32 and ISIZE. However, a compliant decompressor should not check these values. If you want to check the the values of the CRC32 and ISIZE in a GZIP file when decompressing enable the STRICTGZIP define below. } {.$DEFINE STRICTGZIP} { The following define is ONLY used for Abbrevia Unit Tests. It has no effect on the Abbrevia Library. If defined it uses Winzip to create and test archives for compatability. The winzip tests require Systools stSpawn.pas It can be downloaded at http://sf.net/projects/tpsystools } {$IFDEF MSWINDOWS} {.$DEFINE WINZIPTESTS} {$ENDIF} {-------- !! DO NOT CHANGE DEFINES BELOW THIS LINE !! --------} {$IFDEF UnzipBackwardSupport} {$DEFINE UnzipShrinkSupport} {$DEFINE UnzipReduceSupport} {$DEFINE UnzipImplodeSupport} {$ENDIF} {$IFDEF UnzipZipxSupport} {$DEFINE UnzipXzSupport} {$DEFINE UnzipBzip2Support} {$DEFINE UnzipLzmaSupport} {$DEFINE UnzipPPMdSupport} {$DEFINE UnzipWavPackSupport} {$ENDIF} { Linking .obj files isn't currently supported in Kylix or FPC } {$IF DEFINED(FPC) OR NOT DEFINED(MSWINDOWS)} {$UNDEF UnzipPPMdSupport} {$UNDEF UnzipWavPackSupport} {$IFEND} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abselfex.pas����������������������������������������������0000644�0001750�0000144�00000007521�12014201074�022042� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSelfEx.pas *} {*********************************************************} {* ABBREVIA: Component for building self-extracting zips *} {*********************************************************} unit AbSelfEx; {$I AbDefine.inc} interface uses Classes, AbBase; type TAbGetFileEvent = procedure(Sender : TObject; var aFilename : string; var Abort : Boolean) of object; type TAbMakeSelfExe = class(TAbBaseComponent) protected {private} FStubExe : string; FZipFile : string; FSelfExe : string; FStubStream : TStream; FZipStream : TStream; FSelfStream : TStream; FOnGetStubExe : TAbGetFileEvent; FOnGetZipFile : TAbGetFileEvent; procedure DoGetStubExe(var Abort : Boolean); procedure DoGetZipFile(var Abort : Boolean); public function Execute : Boolean; published property SelfExe : string read FSelfExe write FSelfExe; property StubExe : string read FStubExe write FStubExe; property ZipFile : string read FZipFile write FZipFile; property OnGetStubExe : TAbGetFileEvent read FOnGetStubExe write FOnGetStubExe; property OnGetZipFile : TAbGetFileEvent read FOnGetZipFile write FOnGetZipFile; property Version; end; implementation uses SysUtils, {$IFDEF LibcAPI} Libc, {$ENDIF} AbExcept, AbZipTyp, DCOSUtils, DCClassesUtf8; { -------------------------------------------------------------------------- } function TAbMakeSelfExe.Execute : Boolean; var Abort : Boolean; begin Abort := False; if (FStubExe = '') then DoGetStubExe(Abort); if Abort then raise EAbUserAbort.Create; if not mbFileExists(FStubExe) then raise EAbFileNotFound.Create; if (FZipFile = '') then DoGetZipFile(Abort); if Abort then raise EAbUserAbort.Create; if not mbFileExists(FZipFile) then raise EAbFileNotFound.Create; FStubStream := TFileStreamEx.Create(FStubExe, fmOpenRead or fmShareDenyWrite); FZipStream := TFileStreamEx.Create(FZipFile, fmOpenRead or fmShareDenyWrite); if (FSelfExe = '') then FSelfExe := ChangeFileExt(FZipFile, '.exe'); FSelfStream := TFileStreamEx.Create(FSelfExe, fmCreate or fmShareExclusive); try MakeSelfExtracting(FStubStream, FZipStream, FSelfStream); Result := True; finally FStubStream.Free; FZipStream.Free; FSelfStream.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbMakeSelfExe.DoGetStubExe(var Abort: Boolean); begin if Assigned(FOnGetStubExe) then FOnGetStubExe(Self, FStubExe, Abort); end; { -------------------------------------------------------------------------- } procedure TAbMakeSelfExe.DoGetZipFile(var Abort : Boolean); begin if Assigned(FOnGetZipFile) then FOnGetZipFile(Self, FZipFile, Abort); end; { -------------------------------------------------------------------------- } end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfstrm.pas����������������������������������������������0000644�0001750�0000144�00000132320�12014201074�022047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfStrm.pas *} {*********************************************************} {* Deflate streams unit for various streams *} {*********************************************************} unit AbDfStrm; {$I AbDefine.inc} interface uses Classes, AbDfBase, AbDfInW, AbDfHufD; type TAb32bit = longint; { a 32-bit type} PAbDfLitBuckets = ^TAbDfLitBuckets; TAbDfLitBuckets = array [0..285] of integer; PAbDfDistBuckets = ^TAbDfDistBuckets; TAbDfDistBuckets = array [0..31] of integer; PAbDfCodeLenBuckets = ^TAbDfCodeLenBuckets; TAbDfCodeLenBuckets = array [0..18] of integer; const AbExtractMask : array [1..31] of TAb32bit = ($00000001, $00000003, $00000007, $0000000F, $0000001F, $0000003F, $0000007F, $000000FF, $000001FF, $000003FF, $000007FF, $00000FFF, $00001FFF, $00003FFF, $00007FFF, $0000FFFF, $0001FFFF, $0003FFFF, $0007FFFF, $000FFFFF, $001FFFFF, $003FFFFF, $007FFFFF, $00FFFFFF, $01FFFFFF, $03FFFFFF, $07FFFFFF, $0FFFFFFF, $1FFFFFFF, $3FFFFFFF, $7FFFFFFF); type TAbDfInBitStream = class { input bit stream} private FBitBuffer : TAb32bit; FBitsLeft : integer; FBufEnd : PAnsiChar; FBuffer : PAnsiChar; FBufPos : PAnsiChar; FByteCount : longint; FFakeCount : integer; FOnProgress: TAbProgressStep; {$IFOPT C+} FPeekCount : integer; {$ENDIF} FStream : TStream; FStreamSize: longint; protected function ibsFillBuffer : boolean; public constructor Create(aStream : TStream; aOnProgress : TAbProgressStep; aStreamSize : longint); destructor Destroy; override; procedure AlignToByte; procedure DiscardBits(aCount : integer); procedure DiscardMoreBits(aCount : integer); function PeekBits(aCount : integer) : integer; function PeekMoreBits(aCount : integer) : integer; function ReadBit : boolean; function ReadBits(aCount : integer) : integer; procedure ReadBuffer(var aBuffer; aCount : integer); property BitBuffer : TAb32bit read FBitBuffer write FBitBuffer; property BitsLeft : integer read FBitsLeft write FBitsLeft; end; type TAbDfOutBitStream = class { output bit stream} private FBitBuffer : TAb32bit; FBitsUsed : integer; FBufEnd : PAnsiChar; FBuffer : PAnsiChar; FBufPos : PAnsiChar; FStream : TStream; protected procedure obsEmptyBuffer; public constructor Create(aStream : TStream); destructor Destroy; override; procedure AlignToByte; function Position : longint; procedure WriteBit(aBit : boolean); procedure WriteBits(aBits : integer; aCount : integer); procedure WriteBuffer(var aBuffer; aCount : integer); procedure WriteMoreBits(aBits : integer; aCount : integer); property BitBuffer : TAb32bit read FBitBuffer write FBitBuffer; property BitsUsed : integer read FBitsUsed write FBitsUsed; end; type TAbDfLZStream = class { LZ77 token stream} private FCurPos : PAnsiChar; FDistBuckets : PAbDfDistBuckets; FDistCount : integer; FLitBuckets : PAbDfLitBuckets; FLitCount : integer; FLog : TAbLogger; FSlideWin : TAbDfInputWindow; FStartOfs : Int64; FStoredSize : LongWord; FStream : PAnsiChar; FStrmEnd : PAnsiChar; {$IFDEF UseLogging} FSWPos : longint; {$ENDIF} FUseDeflate64: boolean; protected function lzsGetApproxSize : LongWord; function lzsGetStaticSize : integer; function lzsGetStoredSize : integer; function lzsIsFull : boolean; public constructor Create(aSlideWin : TAbDfInputWindow; aUseDeflate64 : boolean; aLog : TAbLogger); destructor Destroy; override; function AddLenDist(aLen : integer; aDist : integer) : boolean; { returns true if the stream is "full"} function AddLiteral(aCh : AnsiChar) : boolean; { returns true if the stream is "full"} procedure Clear; procedure Encode(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree; aDistTree : TAbDfDecodeHuffmanTree; aUseDeflate64 : boolean); procedure Rewind; procedure ReadStoredBuffer(var aBuffer; aCount : integer); property LenDistCount : integer read FDistCount; property LiteralCount : integer read FLitCount; property DistBuckets : PAbDfDistBuckets read FDistBuckets; property LitBuckets : PAbDfLitBuckets read FLitBuckets; property StaticSize : integer read lzsGetStaticSize;{ in bits} property StoredSize : integer read lzsGetStoredSize;{ in bytes} end; type TAbDfCodeLenStream = class { codelength token stream} private FBuckets : PAbDfCodeLenBuckets; FPosition : PAnsiChar; FStream : PAnsiChar; {array [0..285+32*2] of byte;} FStrmEnd : PAnsiChar; protected public constructor Create(aLog : TAbLogger); destructor Destroy; override; procedure Build(const aCodeLens : array of integer; aCount : integer); procedure Encode(aBitStrm : TAbDfOutBitStream; aTree : TAbDfDecodeHuffmanTree); property Buckets : PAbDfCodeLenBuckets read FBuckets; end; implementation uses SysUtils, AbDfXlat; type PAb32bit = ^TAb32bit; const BitStreamBufferSize = 16*1024; {===TAbDfInBitStream=================================================} constructor TAbDfInBitStream.Create(aStream : TStream; aOnProgress : TAbProgressStep; aStreamSize : longint); begin {protect against dumb programming mistakes} Assert(aStream <> nil, 'TAbDfInBitStream.Create: Cannot create a bit stream wrapping a nil stream'); {create the ancestor} inherited Create; {save the stream instance, allocate the buffer} FStream := aStream; GetMem(FBuffer, BitStreamBufferSize); {save the on progress handler} if Assigned(aOnProgress) and (aStreamSize > 0) then begin FOnProgress := aOnProgress; //FStreamSize := aStreamSize; FStreamSize := aStream.Size - aStream.Position; end; end; {--------} destructor TAbDfInBitStream.Destroy; begin {if we did some work...} if (FBuffer <> nil) then begin {reposition the underlying stream to the point where we stopped; this position is equal to... the position of the underlying stream, PLUS the number of fake bytes we added, LESS the number of bytes in the buffer, PLUS the position in the buffer, PLUS the number of complete bytes in the bit buffer} FStream.Seek(FStream.Position + FFakeCount - (FBufEnd - FBuffer) + (FBufPos - FBuffer) - (FBitsLeft div 8), soFromBeginning); {free the buffer} FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfInBitStream.AlignToByte; begin {get rid of the odd bits by shifting them out of the bit cache} FBitBuffer := FBitBuffer shr (FBitsLeft mod 8); dec(FBitsLeft, FBitsLeft mod 8); end; {--------} procedure TAbDfInBitStream.DiscardBits(aCount : integer); var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..32} if (aCount <= 0) or (aCount > 32) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 32 inclusive [TAbDfInBitStream.DiscardBits]'); {$IFOPT C+} {verify that the count of bits to discard is less than or equal to the recent count from PeekBits--a programming error} Assert((aCount <= FPeekCount), 'TAbDfInBitStream.DiscardBits: discarding more bits than peeked'); {since we're discarding bits already peeked, reset the peek count} FPeekCount := 0; {$ENDIF} {if we have more than enough bits in our bit buffer, update the bitbuffer and the number of bits left} if (aCount <= FBitsLeft) then begin FBitBuffer := FBitBuffer shr aCount; dec(FBitsLeft, aCount); end {otherwise we shall have to read another integer out of the buffer to satisfy the request} else begin {check that there is data in the buffer, if not it's indicates a corrupted stream: PeekBits should have filled it} if (FBufPos = FBufEnd) then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.DiscardBits]'); {refill the bit buffer} BitsToGo := aCount - FBitsLeft; FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; end; {--------} procedure TAbDfInBitStream.DiscardMoreBits(aCount : integer); var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..32} if (aCount <= 0) or (aCount > 32) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 32 inclusive [TAbDfInBitStream.DiscardMoreBits]'); {$IFOPT C+} {verify that the count of bits to discard is less than or equal to the recent count from PeekBits--a programming error} Assert((aCount <= FPeekCount), 'TAbDfInBitStream.DiscardBits: discarding more bits than peeked'); {since we're discarding bits already peeked, reset the peek count} FPeekCount := 0; {$ENDIF} {check that there is data in the buffer, if not it's indicates a corrupted stream: PeekBits/PeekMoreBits should have filled it} if (FBufPos = FBufEnd) then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.DiscardBits]'); {refill the bit buffer} BitsToGo := aCount - FBitsLeft; FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; {--------} function TAbDfInBitStream.ibsFillBuffer : boolean; var BytesRead : longint; BytesToRead : longint; i : integer; Percent : integer; Buffer : PAnsiChar; BufferCount : integer; begin {check for dumb programming mistakes: this routine should only be called if there are less than 4 bytes unused in the buffer} Assert((FBufEnd - FBufPos) < sizeof(longint), 'TAbDfInBitStream.ibsFillBuffer: the buffer should be almost empty'); {if there are still 1, 2, or three bytes unused, move them to the front of the buffer} Buffer := FBuffer; while (FBufPos <> FBufEnd) do begin Buffer^ := FBufPos^; inc(FBufPos); inc(Buffer); end; {fill the buffer} BytesToRead := BitStreamBufferSize - (Buffer - FBuffer); BytesRead := FStream.Read(Buffer^, BytesToRead); {reset the internal pointers} FBufPos := FBuffer; FBufEnd := Buffer + BytesRead; BufferCount := FBufEnd - FBuffer; {if, as a result of the read, no data is in the buffer, return false; the caller will decide what to do about the problem} if (BufferCount = 0) then Result := false {otherwise there is data to be processed} else begin Result := true; {if we didn't read anything from the stream, we need to make sure that enough buffer is zeroed out so that reading longint values don't produce (dreadfully) bogus values} if (BytesRead = 0) and ((BufferCount mod 4) <> 0) then begin FFakeCount := 4 - (BufferCount mod 4); for i := 0 to pred(FFakeCount) do begin FBufEnd^ := #0; inc(FBufEnd); end; end; {fire the progress event} if Assigned(FOnProgress) then begin inc(FByteCount, BytesRead); Percent := Round((100.0 * FByteCount) / FStreamSize); FOnProgress(Percent); end; end; end; {--------} function TAbDfInBitStream.PeekBits(aCount : integer) : integer; var BitsToGo : integer; TempBuffer : integer; begin {check that aCount is in the correct range 1..32} Assert((0 <= aCount) and (aCount <= 32), 'TAbDfInBitStream.PeekBits: count of bits must be between 1 and 32 inclusive'); {if we have more than enough bits in our bit buffer, return as many as needed} if (aCount <= FBitsLeft) then Result := FBitBuffer and AbExtractMask[aCount] {otherwise we shall have to read another integer out of the buffer to satisfy the request; note that this will fill the stream buffer if required} else begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then TempBuffer := 0 else TempBuffer := PAb32bit(FBufPos)^ else TempBuffer := PAb32bit(FBufPos)^; Result := Result + ((TempBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); end; {$IFOPT C+} {save the number of bits peeked for an assertion check later} FPeekCount := aCount; {$ENDIF} end; {--------} function TAbDfInBitStream.PeekMoreBits(aCount : integer) : integer; var BitsToGo : integer; TempBuffer : integer; begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then TempBuffer := 0 else TempBuffer := PAb32bit(FBufPos)^ else TempBuffer := PAb32bit(FBufPos)^; Result := Result + ((TempBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); end; {--------} function TAbDfInBitStream.ReadBit : boolean; begin if (FBitsLeft = 0) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBit]'); FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); FBitsLeft := 32; end; Result := Odd(FBitBuffer); FBitBuffer := FBitBuffer shr 1; dec(FBitsLeft); end; {--------} function TAbDfInBitStream.ReadBits(aCount : integer) : integer; var BitsToGo : integer; begin {aCount comes from a (possibly corrupt) stream, so check that it is the correct range, 1..16} if (aCount <= 0) or (aCount > 16) then raise EAbInternalInflateError.Create( 'count of bits must be between 1 and 16 inclusive [TAbDfInBitStream.ReadBits]'); {if we have more than enough bits in our bit buffer, return as many as needed, and update the bitbuffer and the number of bits left} if (aCount <= FBitsLeft) then begin Result := FBitBuffer and AbExtractMask[aCount]; FBitBuffer := FBitBuffer shr aCount; dec(FBitsLeft, aCount); end {if we have exactly enough bits in our bit buffer, return them all, and update the bitbuffer and the number of bits left} else if (aCount = FBitsLeft) then begin Result := FBitBuffer; FBitBuffer := 0; FBitsLeft := 0; end {otherwise we shall have to read another integer out of the buffer to satisfy the request} else begin BitsToGo := aCount - FBitsLeft; Result := FBitBuffer; if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBits]'); FBitBuffer := PAb32bit(FBufPos)^; inc(FBufPos, sizeof(TAb32bit)); Result := Result + ((FBitBuffer and AbExtractMask[BitsToGo]) shl FBitsLeft); FBitBuffer := FBitBuffer shr BitsToGo; FBitsLeft := 32 - BitsToGo; end; end; {--------} procedure TAbDfInBitStream.ReadBuffer(var aBuffer; aCount : integer); var i : integer; Buffer : PAnsiChar; BytesToRead : integer; BytesInBuffer : integer; begin {this method is designed to read a set of bytes and this can only be done if the stream has been byte aligned--if it isn't, it's a programming error} Assert((FBitsLeft mod 8) = 0, 'TAbDfInBitStream.ReadBuffer. cannot read a buffer unless the stream is byte-aligned'); {get the address of the user buffer as a PChar: easier arithmetic} Buffer := @aBuffer; {if we have some bits left in the bit buffer, we need to copy those first} if (FBitsLeft > 0) then begin BytesToRead := FBitsLeft div 8; for i := 0 to pred(BytesToRead) do begin Buffer^ := AnsiChar(FBitBuffer and $FF); inc(Buffer); FBitBuffer := FBitBuffer shr 8; end; {calculate the count of bytes still to read} dec(aCount, BytesToRead); end; {calculate the number of bytes to copy} BytesInBuffer := FBufEnd - FBufPos; if (aCount <= BytesInBuffer) then BytesToRead := aCount else BytesToRead := BytesInBuffer; {copy the data from our buffer to the user buffer} Move(FBufPos^, Buffer^, BytesToRead); {update variables} dec(aCount, BytesToRead); inc(FBufPos, BytesToRead); {while there is still data to copy, keep on filling our internal buffer and copy it to the user buffer} while (aCount <> 0) do begin {increment the user buffer pointer past the data just copied} inc(Buffer, BytesToRead); {fill our buffer} if not ibsFillBuffer then raise EAbInternalInflateError.Create( 'no more compressed data in stream [TAbDfInBitStream.ReadBuffer]'); {calculate the number of bytes to copy} BytesInBuffer := FBufEnd - FBufPos; if (aCount <= BytesInBuffer) then BytesToRead := aCount else BytesToRead := BytesInBuffer; {copy the data from our buffer to the user buffer} Move(FBufPos^, Buffer^, BytesToRead); {update variables} dec(aCount, BytesToRead); inc(FBufPos, BytesToRead); end; {now we've copied everything over, reset the bit variables: they're empty and need refilling} FBitBuffer := 0; FBitsLeft := 0; end; {====================================================================} {===TAbDfOutBitStream================================================} constructor TAbDfOutBitStream.Create(aStream : TStream); begin {protect against dumb programming mistakes} Assert(aStream <> nil, 'TAbDfOutBitStream.Create: Cannot create a bit stream wrapping a nil stream'); {create the ancestor} inherited Create; {save the stream instance, allocate the buffer} FStream := aStream; GetMem(FBuffer, BitStreamBufferSize); FBufEnd := FBuffer + BitStreamBufferSize; FBufPos := FBuffer; end; {--------} destructor TAbDfOutBitStream.Destroy; var i : integer; begin {if the buffer was allocated...} if (FBuffer <> nil) then begin {if there are still some bits in the bit buffer...} if (FBitsUsed <> 0) then begin {pad the bit buffer to a byte boundary} AlignToByte; {empty the main buffer if there isn't enough room to copy over the 1 to 4 bytes in the bit buffer} if ((FBufEnd - FBufPos) < FBitsUsed div 8) then obsEmptyBuffer; {flush the bit buffer} for i := 1 to (FBitsUsed div 8) do begin FBufPos^ := AnsiChar(FBitBuffer); FBitBuffer := FBitBuffer shr 8; inc(FBufPos); end; end; {if there is some data in the main buffer, empty it} if (FBufPos <> FBuffer) then obsEmptyBuffer; {free the buffer} FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfOutBitStream.AlignToByte; begin {round up the number of bits used to the nearest 8} FBitsUsed := (FBitsUsed + 7) and $F8; {if the bit buffer is now full, flush it to the main buffer} if (FBitsUsed = 32) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := 0; FBitsUsed := 0; end; end; {--------} procedure TAbDfOutBitStream.obsEmptyBuffer; var ByteCount : integer; BytesWritten : longint; begin {empty the buffer} ByteCount := FBufPos - FBuffer; BytesWritten := FStream.Write(FBuffer^, ByteCount); {if we couldn't write the correct number of bytes, it's an error} if (BytesWritten <> ByteCount) then raise EAbInternalDeflateError.Create( 'could not write to the output stream [TAbDfInBitStream.obsEmptyBuffer]'); {reset the pointers} FBufPos := FBuffer; end; {--------} function TAbDfOutBitStream.Position : longint; begin Assert(false, 'TAbDfOutBitStream.Position: not implemented yet!'); Result := -1; end; {--------} procedure TAbDfOutBitStream.WriteBit(aBit : boolean); begin {only set the corresponding bit in the bit buffer if the passed bit is set (the bit buffer is set to zero when emptied, so we don't actually have to record clear bits)} if aBit then FBitBuffer := FBitBuffer or (1 shl FBitsUsed); {we've now got one more bit} inc(FBitsUsed); {if the bit buffer is now full, flush it to the main buffer} if (FBitsUsed = 32) then begin if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); FBitBuffer := 0; FBitsUsed := 0; end; end; {--------} procedure TAbDfOutBitStream.WriteBits(aBits : integer; aCount : integer); begin {protect against programming mistakes...} {..the count should be in the range 1 to 16 (BTW, the latter is only used once: Deflate64 with length symbol 258)} Assert((0 < aCount) and (aCount <= 16), 'TAbDfOutBitStream.WriteBits: aCount should be from 1 to 16'); {..there shouldn't be more than aCount bits} Assert((aBits shr aCount) = 0, 'TAbDfOutBitStream.WriteBits: aBits has more than aCount bits'); {copy as many bits as we can to the bit buffer} FBitBuffer := FBitBuffer or (aBits shl FBitsUsed); {increment the number of bits used} inc(FBitsUsed, aCount); {if we've overshot...} if (FBitsUsed >= 32) then begin {the bit buffer is now full, so flush it} if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); {patch up the bit buffer and the number of bits used} dec(FBitsUsed, 32); FBitBuffer := aBits shr (aCount - FBitsUsed); end; end; {--------} procedure TAbDfOutBitStream.WriteBuffer(var aBuffer; aCount : integer); var Buffer : PAnsiChar; BytesToCopy : integer; begin {guard against dumb programming errors: we must be byte aligned} Assert((FBitsUsed and $7) = 0, 'TAbDfOutBitStream.WriteBuffer: must be byte aligned'); {use the user buffer as a PChar} Buffer := @aBuffer; {flush the bit buffer to the underlying stream} while (FBitsUsed <> 0) do begin if (FBufEnd = FBufPos) then obsEmptyBuffer; FBufPos^ := AnsiChar(FBitBuffer and $FF); inc(FBufPos); FBitBuffer := FBitBuffer shr 8; dec(FBitsUsed, 8); end; {copy over the data to the underlying stream} BytesToCopy := FBufEnd - FBufPos; if (BytesToCopy > aCount) then BytesToCopy := aCount; Move(Buffer^, FBufPos^, BytesToCopy); inc(FBufPos, BytesToCopy); dec(aCount, BytesToCopy); while (aCount <> 0) do begin inc(Buffer, BytesToCopy); obsEmptyBuffer; BytesToCopy := FBufEnd - FBufPos; if (BytesToCopy > aCount) then BytesToCopy := aCount; Move(Buffer^, FBufPos^, BytesToCopy); inc(FBufPos, BytesToCopy); dec(aCount, BytesToCopy); end; {finish with a flushed buffer} obsEmptyBuffer; end; {--------} procedure TAbDfOutBitStream.WriteMoreBits(aBits : integer; aCount : integer); begin {the bit buffer is now full, so flush it} if ((FBufEnd - FBufPos) < sizeof(TAb32bit)) then obsEmptyBuffer; PAb32bit(FBufPos)^ := FBitBuffer; inc(FBufPos, sizeof(TAb32bit)); {patch up the bit buffer and the number of bits used} dec(FBitsUsed, 32); FBitBuffer := aBits shr (aCount - FBitsUsed); end; {====================================================================} {===TAbDfLZStream====================================================} const {Implementation note: this stream size has been chosen so that if the data must be stored, a block size of about 64K will result} StreamSize = 160 * 1024; type PWord = ^word; {--------} constructor TAbDfLZStream.Create(aSlideWin : TAbDfInputWindow; aUseDeflate64 : boolean; aLog : TAbLogger); begin {create the ancestor} inherited Create; {save the sliding window and the logger} FSlideWin := aSlideWin; FUseDeflate64 := aUseDeflate64; FLog := aLog; {create the buckets} New(FDistBuckets); New(FLitBuckets); {create the memory stream, allocate its buffer, position at start} GetMem(FStream, StreamSize); Clear; end; {--------} destructor TAbDfLZStream.Destroy; begin {free the buckets} if (FDistBuckets <> nil) then Dispose(FDistBuckets); if (FLitBuckets <> nil) then Dispose(FLitBuckets); {free the memory stream} if (FStream <> nil) then FreeMem(FStream); {destroy the ancestor} inherited Destroy; end; {--------} {$IFDEF UseLogging} procedure AddLenDistToLog(aLog : TAbLogger; aPosn : longint; aLen : integer; aDist : integer; aOverLap : boolean); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if aOverLap then aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d **overlap**', [aPosn, aLen, aDist])) else aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d', [aPosn, aLen, aDist])); end; {$ENDIF} {--------} function TAbDfLZStream.AddLenDist(aLen : integer; aDist : integer) : boolean; var LenSymbol : integer; DistSymbol : integer; CurPos : PAnsiChar; begin {$IFDEF UseLogging} {log it} if (FLog <> nil) then begin if (aLen > aDist) then AddLenDistToLog(FLog, FSWPos, aLen, aDist, true) else AddLenDistToLog(FLog, FSWPos, aLen, aDist, false); inc(FSWPos, aLen); end; {$ENDIF} {write a length/distance record to the stream} CurPos := FCurPos; CurPos^ := AnsiChar(false); inc(CurPos); PWord(CurPos)^ := word(aLen - 1); inc(CurPos, sizeof(word)); PWord(CurPos)^ := word(aDist - 1); inc(CurPos, sizeof(word)); FCurPos := CurPos; {increment the various counters} inc(FDistCount); inc(FStoredSize, aLen); {convert the length and distance to their symbols} {$IFOPT C+} {if Assertions are on} LenSymbol := AbSymbolTranslator.TranslateLength(aLen); DistSymbol := AbSymbolTranslator.TranslateDistance(aDist); {$ELSE} if (3 <= aLen) and (aLen <= 258) then LenSymbol := AbSymbolTranslator.LenSymbols[aLen-3] + 257 else LenSymbol := 285; if (aDist <= 256) then DistSymbol := AbSymbolTranslator.ShortDistSymbols[aDist - 1] else if (aDist <= 32768) then DistSymbol := AbSymbolTranslator.MediumDistSymbols[((aDist - 1) div 128) - 2] else DistSymbol := AbSymbolTranslator.LongDistSymbols[((aDist - 1) div 16384) - 2]; {$ENDIF} {increment the buckets} inc(FLitBuckets^[LenSymbol]); inc(FDistBuckets^[DistSymbol]); {return whether the stream is full and needs encoding} Result := lzsIsFull; end; {--------} {$IFDEF UseLogging} procedure AddLiteralToLog(aLog : TAbLogger; aPosn : longint; aCh : AnsiChar); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if (' ' < aCh) and (aCh <= '~') then aLog.WriteLine(Format('%8x Char: %3d $%2x [%s]', [aPosn, ord(aCh), ord(aCh), aCh])) else aLog.WriteLine(Format('%8x Char: %3d $%2x', [aPosn, ord(aCh), ord(aCh)])); end; {$ENDIF} {--------} function TAbDfLZStream.AddLiteral(aCh : AnsiChar) : boolean; var CurPos : PAnsiChar; begin {$IFDEF UseLogging} {log it} if (FLog <> nil) then begin AddLiteralToLog(FLog, FSWPos, aCh); inc(FSWPos); end; {$ENDIF} {write a literal to the internal stream} CurPos := FCurPos; CurPos^ := AnsiChar(true); inc(CurPos); CurPos^ := aCh; inc(CurPos); FCurPos := CurPos; {increment the various counters} inc(FLitCount); inc(FLitBuckets^[byte(aCh)]); inc(FStoredSize); {return whether the stream is full and needs encoding} Result := lzsIsFull; end; {--------} procedure TAbDfLZStream.Clear; begin {position the stream at the start} Rewind; {reset all variables} FStrmEnd := nil; FLitCount := 0; FDistCount := 0; FStartOfs := FSlideWin.Position; FStoredSize := 0; {$IFDEF UseLogging} FSWPos := FStartOfs; {$ENDIF} {reset the buckets} FillChar(FLitBuckets^, sizeof(FLitBuckets^), 0); FLitBuckets^[256] := 1; { end-of-block marker: it's always there...} FillChar(FDistBuckets^, sizeof(FDistBuckets^), 0); end; {--------} procedure TAbDfLZStream.Encode(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree; aDistTree : TAbDfDecodeHuffmanTree; aUseDeflate64 : boolean); var Len : integer; Dist : integer; Symbol : integer; CurPos : PAnsiChar; StrmEnd : PAnsiChar; Code : longint; ExtraBits : longint; begin {rewind the LZ77 stream} Rewind; {for speed use local variables} CurPos := FCurPos; StrmEnd := FStrmEnd; {while there are still items in the stream...} while (CurPos < StrmEnd) do begin {if the next item is a literal...} if boolean(CurPos^) then begin {encode the literal character as a symbol} inc(CurPos); {$IFOPT C+} {if Assertions are on} Code := aLitTree.Encode(byte(CurPos^)); {$ELSE} Code := aLitTree.Encodes^[byte(CurPos^)]; {$ENDIF} inc(CurPos); {write the code out to the bit stream} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} end {otherwise it's a length/distance pair} else begin {DO THE LENGTH FIRST-------------------------------------------} {get the length from the stream} inc(CurPos); Len := integer(PWord(CurPos)^) + 1; inc(CurPos, sizeof(word)); {translate it to a symbol and convert that to a code using the literal/length huffman tree} {$IFOPT C+} {if Assertions are on} Symbol := AbSymbolTranslator.TranslateLength(Len); Code := aLitTree.Encode(Symbol); {$ELSE} if (3 <= Len) and (Len <= 258) then Symbol := AbSymbolTranslator.LenSymbols[Len-3] + 257 else Symbol := 285; Code := aLitTree.Encodes^[Symbol]; {$ENDIF} {output the length code} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} {if the length symbol were 285, its definition changes from Deflate to Deflate64, so make it a special case: for Deflate there are no extra bits, for Deflate64 output the (length - 3) as 16 bits} if (Symbol = 285) then begin if aUseDeflate64 then begin {$IFOPT C+} aBitStrm.WriteBits(Len - 3, 16); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Len - 3) shl BitsUsed); BitsUsed := BitsUsed + 16; if (BitsUsed >= 32) then WriteMoreBits(Len - 3, 16); end; {$ENDIF} end; end {otherwise if there are extra bits to be output for this length, calculate them and output them} else begin ExtraBits := Code shr 24; if (ExtraBits <> 0) then begin {$IFOPT C+} aBitStrm.WriteBits((Len - dfc_LengthBase[Symbol - 257]), ExtraBits); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Len - dfc_LengthBase[Symbol - 257]) shl BitsUsed); BitsUsed := BitsUsed + ExtraBits; if (BitsUsed >= 32) then WriteMoreBits((Len - dfc_LengthBase[Symbol - 257]), ExtraBits); end; {$ENDIF} end; end; {DO THE DISTANCE NEXT------------------------------------------} {get the distance from the stream} Dist := integer(PWord(CurPos)^) + 1; inc(CurPos, sizeof(word)); {translate it to a symbol and convert that to a code using the distance huffman tree} {$IFOPT C+} {if Assertions are on} Symbol := AbSymbolTranslator.TranslateDistance(Dist); Assert(aUseDeflate64 or (Symbol < 30), 'TAbDfLZStream.Encode: a Deflate64 distance symbol has been generated for Deflate'); Code := aDistTree.Encode(Symbol); {$ELSE} if (Dist <= 256) then Symbol := AbSymbolTranslator.ShortDistSymbols[Dist - 1] else if (Dist <= 32768) then Symbol := AbSymbolTranslator.MediumDistSymbols[((Dist - 1) div 128) - 2] else Symbol := AbSymbolTranslator.LongDistSymbols[((Dist - 1) div 16384) - 2]; Code := aDistTree.Encodes^[Symbol]; {$ENDIF} {output the distance code} {$IFOPT C+} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Code and $FFFF) shl BitsUsed); BitsUsed := BitsUsed + ((Code shr 16) and $FF); if (BitsUsed >= 32) then WriteMoreBits(Code and $FFFF, (Code shr 16) and $FF); end; {$ENDIF} {if there are extra bits to be output for this distance, calculate them and output them} ExtraBits := Code shr 24; if (ExtraBits <> 0) then begin {$IFOPT C+} aBitStrm.WriteBits((Dist - dfc_DistanceBase[Symbol]), ExtraBits); {$ELSE} with aBitStrm do begin BitBuffer := BitBuffer or ((Dist - dfc_DistanceBase[Symbol]) shl BitsUsed); BitsUsed := BitsUsed + ExtraBits; if (BitsUsed >= 32) then WriteMoreBits((Dist - dfc_DistanceBase[Symbol]), ExtraBits); end; {$ENDIF} end; end; end; {clear the stream; ready for some more items} { Clear;} end; {--------} function TAbDfLZStream.lzsGetApproxSize : LongWord; var i : integer; begin {note: calculates an approximate compressed size without taking too long about it. The average encoded bit length for literals and lengths is assumed to be 8. Distances are assumed to follow the static tree definition (ie, 5 bits per distance, plus any extra bits). There are FLitCount literals, FDistCount lengths, and FDistCount distances} Result := (13 * FDistCount) + (8 * FLitCount); for i := 4 to 31 do inc(Result, FDistBuckets^[i] * dfc_DistExtraBits[i]); Result := Result div 8; end; {--------} function TAbDfLZStream.lzsGetStaticSize : integer; var i : integer; begin Result := 0; for i := 0 to 143 do inc(Result, FLitBuckets^[i] * 8); for i := 144 to 255 do inc(Result, FLitBuckets^[i] * 9); inc(Result, FLitBuckets^[256] * 7); for i := 257 to 279 do inc(Result, FLitBuckets^[i] * (7 + dfc_LitExtraBits[i - dfc_LitExtraOffset])); for i := 280 to 284 do inc(Result, FLitBuckets^[i] * (8 + dfc_LitExtraBits[i - dfc_LitExtraOffset])); if FUseDeflate64 then inc(Result, FLitBuckets^[285] * (8 + 16)) else inc(Result, FLitBuckets^[285] * 8); for i := 0 to 31 do inc(Result, FDistBuckets^[i] * (5 + dfc_DistExtraBits[i])); end; {--------} function TAbDfLZStream.lzsGetStoredSize : integer; begin Result := FStoredSize; {Result := FSlideWin.Position - FStartOfs;} end; {--------} function TAbDfLZStream.lzsIsFull : boolean; begin {if the number of hits on the (eventual) literal tree is a multiple of 8192, the stream is full if the majority were straight literals and we're getting approx 50% compression} if (((FLitCount + FDistCount) and $1FFF) = 0) then begin Result := (FDistCount < FLitCount) and (lzsGetApproxSize < (FStoredSize div 2)); if Result then Exit; end; {otherwise the stream is full if the number of hits on the literal tree or on the distance tree is 32768} { Result := (FCurPos - FStream) > (StreamSIze - 100);} Result := (FDistCount >= 32768) or ((FLitCount + FDistCount) >= 32768); end; {--------} procedure TAbDfLZStream.ReadStoredBuffer(var aBuffer; aCount : integer); begin FSlideWin.ReadBuffer(aBuffer, aCount, FStartOfs); inc(FStartOfs, aCount); end; {--------} procedure TAbDfLZStream.Rewind; begin {position the stream at the beginning} FStrmEnd := FCurPos; FCurPos := FStream; end; {====================================================================} {===TAbDfCodeLenStream===============================================} constructor TAbDfCodeLenStream.Create(aLog : TAbLogger); begin {create the ancestor} inherited Create; {allocate the stream (to contain all literals and distances and possible extra data} GetMem(FStream, (285 + 32) * 2); FPosition := FStream; {allocate the buckets} FBuckets := AllocMem(sizeof(TAbDfCodeLenBuckets)); end; {--------} destructor TAbDfCodeLenStream.Destroy; begin {free the stream} if (FStream <> nil) then FreeMem(FStream); {free the buckets} if (FBuckets <> nil) then Dispose(FBuckets); {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfCodeLenStream.Build(const aCodeLens : array of integer; aCount : integer); var i : integer; State : (ScanStart, ScanNormal, Got2nd, Got3rd); Count : integer; ThisCount : integer; CodeLen : integer; PrevCodeLen : integer; CurPos : PAnsiChar; Buckets : PAbDfCodeLenBuckets; begin {start the automaton} State := ScanStart; CurPos := FStream; Buckets := FBuckets; Count := 0; PrevCodeLen := 0; {for all the codelengths in the array (plus a fake one at the end to ensure all codeslengths are counted)...} for i := 0 to aCount do begin {get the current codelength} if (i = aCount) then CodeLen := -1 else CodeLen := aCodeLens[i]; {switch based on the state...} case State of ScanStart : begin PrevCodeLen := CodeLen; State := ScanNormal; end; ScanNormal : begin {if the current code is the same as the previous, move to the next state} if (CodeLen = PrevCodeLen) then State := Got2nd {otherwise output the previous code} else begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); PrevCodeLen := CodeLen; end; end; Got2nd : begin {if the current code is the same as the previous, move to the next state; we now have three similar codes in a row} if (CodeLen = PrevCodeLen) then begin State := Got3rd; Count := 3; end {otherwise output the previous two similar codes, move back to the initial state} else begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen], 2); PrevCodeLen := CodeLen; State := ScanNormal; end; end; Got3rd: begin {if the current code is the same as the previous, increment the count of similar codes} if (CodeLen = PrevCodeLen) then inc(Count) {otherwise we need to output the repeat values...} else begin {if the previous code were a zero code...} if (PrevCodeLen = 0) then begin {while there are zero codes to be output...} while (Count <> 0) do begin {if there are less than three zero codes, output them individually} if (Count < 3) then begin while (Count <> 0) do begin CurPos^ := #0; inc(CurPos); inc(Buckets^[0]); dec(Count); end; end {if there are less than 11 successive zero codes, output a 17 code and the count of zeros} else if (Count < 11) then begin CurPos^ := #17; inc(CurPos); inc(Buckets^[17]); CurPos^ := AnsiChar(Count - 3); inc(CurPos); Count := 0; end {otherwise output an 18 code and the count of zeros} else begin ThisCount := Count; if (ThisCount > 138) then ThisCount := 138; CurPos^ := #18; inc(CurPos); inc(Buckets^[18]); CurPos^ := AnsiChar(ThisCount - 11); inc(CurPos); dec(Count, ThisCount); end; end; end {otherwise the previous code was a non-zero code...} else begin {output the first code} CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); dec(Count); {while there are more codes to be output...} while (Count <> 0) do begin {if there are less than three codes, output them individually} if (Count < 3) then begin while (Count <> 0) do begin CurPos^ := AnsiChar(PrevCodeLen); inc(CurPos); inc(Buckets^[PrevCodeLen]); dec(Count); end; end {otherwise output an 16 code and the count} else begin ThisCount := Count; if (ThisCount > 6) then ThisCount := 6; CurPos^ := #16; inc(CurPos); inc(Buckets^[16]); CurPos^ := AnsiChar(ThisCount - 3); inc(CurPos); dec(Count, ThisCount); end; end; end; {move back to the initial state} PrevCodeLen := CodeLen; State := ScanNormal; end; end; end; end; {set the read position} FStrmEnd := CurPos; FPosition := FStream; end; {--------} procedure TAbDfCodeLenStream.Encode(aBitStrm : TAbDfOutBitStream; aTree : TAbDfDecodeHuffmanTree); var Symbol : integer; ExtraData : integer; Code : longint; CurPos : PAnsiChar; StrmEnd : PAnsiChar; begin {prepare for the loop} CurPos := FPosition; StrmEnd := FStrmEnd; {while there are tokens in the stream...} while (CurPos <> StrmEnd) do begin {get the next symbol} Symbol := ord(CurPos^); inc(CurPos); {if the symbol is 0..15, get the code and output it} if (Symbol <= 15) then begin {$IFOPT C+} {if Assertions are on} Code := aTree.Encode(Symbol); {$ELSE} Code:= aTree.Encodes^[Symbol]; {$ENDIF} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); end {otherwise the symbol is 16, 17, or 18} else begin {get the extra data} ExtraData := ord(CurPos^); inc(CurPos); {get the code and output it} {$IFOPT C+} {if Assertions are on} Code := aTree.Encode(Symbol); {$ELSE} Code:= aTree.Encodes^[Symbol]; {$ENDIF} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); if (Symbol = 16) then aBitStrm.WriteBits(ExtraData, 2) else if (Symbol = 17) then aBitStrm.WriteBits(ExtraData, 3) else {Symbol = 18} aBitStrm.WriteBits(ExtraData, 7); end; end; end; {====================================================================} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abunzoutstm.pas�������������������������������������������0000644�0001750�0000144�00000013645�12014201074�022650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUnzOutStm.pas *} {*********************************************************} {* ABBREVIA: UnZip output stream; progress and CRC32 *} {*********************************************************} unit AbUnzOutStm; {$I AbDefine.inc} interface uses SysUtils, Classes, AbArcTyp; type // Fixed-length read-only stream, limits reads to the range between // the input stream's starting position and a specified size. Seek/Position // are adjusted to be 0 based. TAbUnzipSubsetStream = class( TStream ) private FStream : TStream; FStartPos: Int64; FCurPos: Int64; FEndPos: Int64; public constructor Create(aStream: TStream; aStreamSize: Int64); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; // Write-only output stream, computes CRC32 and calls progress event TAbUnzipOutputStream = class( TStream ) private FBytesWritten : Int64; FCRC32 : LongInt; FCurrentProgress : Byte; FStream : TStream; FUncompressedSize : Int64; FOnProgress : TAbProgressEvent; function GetCRC32 : LongInt; public constructor Create(aStream : TStream); function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property CRC32 : LongInt read GetCRC32; property Stream : TStream read FStream write FStream; property UncompressedSize : Int64 read FUncompressedSize write FUncompressedSize; property OnProgress : TAbProgressEvent read FOnProgress write FOnProgress; end; implementation uses Math, AbExcept, AbUtils; { TAbUnzipSubsetStream implementation ====================================== } { -------------------------------------------------------------------------- } constructor TAbUnzipSubsetStream.Create(aStream: TStream; aStreamSize: Int64); begin inherited Create; FStream := aStream; FStartPos := FStream.Position; FCurPos := FStartPos; FEndPos := FStartPos + aStreamSize; end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Read(var Buffer; Count: Longint): Longint; begin if Count > FEndPos - FCurPos then Count := FEndPos - FCurPos; if Count > 0 then begin Result := FStream.Read(Buffer, Count); Inc(FCurPos, Result); end else Result := 0; end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Write(const Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbUnzipSubsetStream.Write not supported'); end; { -------------------------------------------------------------------------- } function TAbUnzipSubsetStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var OldPos: Int64; begin OldPos := FCurPos; case Origin of soBeginning: FCurPos := FStartPos + Offset; soCurrent: FCurPos := FCurPos + Offset; soEnd: FCurPos := FEndPos + Offset; end; if FCurPos < FStartPos then FCurPos := FStartPos; if FCurPos > FEndPos then FCurPos := FEndPos; if OldPos <> FCurPos then FStream.Position := FCurPos; Result := FCurPos - FStartPos; end; { -------------------------------------------------------------------------- } { TAbUnzipOutputStream implementation ====================================== } { -------------------------------------------------------------------------- } constructor TAbUnzipOutputStream.Create(aStream: TStream); begin inherited Create; FStream := aStream; FCRC32 := -1; end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Read(var Buffer; Count: Integer): Longint; begin raise EAbException.Create('TAbUnzipOutputStream.Read not supported'); end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Write(const Buffer; Count: Longint): Longint; var Abort : Boolean; NewProgress : Byte; begin Result := FStream.Write(Buffer, Count); AbUpdateCRC( FCRC32, Buffer, Count ); Inc( FBytesWritten, Result ); if Assigned( FOnProgress ) then begin Abort := False; NewProgress := AbPercentage(FBytesWritten, FUncompressedSize); if (NewProgress <> FCurrentProgress) then begin FOnProgress( NewProgress, Abort ); FCurrentProgress := NewProgress; end; if Abort then raise EAbUserAbort.Create; end; end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin Result := FStream.Seek(Offset, Origin); end; { -------------------------------------------------------------------------- } function TAbUnzipOutputStream.GetCRC32: LongInt; begin Result := not FCRC32; end; end. �������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfdec.pas�����������������������������������������������0000644�0001750�0000144�00000064352�12014201074�021626� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfDec.pas *} {*********************************************************} {* Deflate decoding unit *} {*********************************************************} unit AbDfDec; {$I AbDefine.inc} interface uses Classes, AbDfBase; function Inflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; implementation uses SysUtils, AbDfStrm, AbDfHufD, AbDfOutW, AbDfCryS; {===Helper routines==================================================} procedure ReadLitDistCodeLengths(aInStrm : TAbDfInBitStream; aCodeLenTree : TAbDfDecodeHuffmanTree; var aCodeLens : array of integer; aCount : integer; var aTotalBits : integer); var i : integer; SymbolCount : integer; LookupValue : integer; EncodedSymbol : longint; Symbol : integer; SymbolCodeLen : integer; RepeatCount : integer; BitBuffer : TAb32bit; BitCount : integer; begin {$IFDEF UseLogging} {we need to calculate the total number of bits in the code lengths for reporting purposes, so zero the count} aTotalBits := 0; {$ENDIF} {clear the code lengths array} FillChar(aCodeLens, sizeof(aCodeLens), 0); {read all the Symbols required in the bit stream} SymbolCount := 0; while (SymbolCount < aCount) do begin {grab the lookup set of bits} BitCount := aCodeLenTree.LookupBitLength + 7; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aCodeLenTree.LookupBitLength]; {get the encoded Symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aCodeLenTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aCodeLenTree.Decodes^[LookupValue]; {$ENDIF} {extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; {$IFDEF UseLogging} {keep count of the total number of bits read} inc(aTotalBits, SymbolCodeLen); {$ENDIF} {check that the symbol is between 0 and 18} if not ((0 <= Symbol) and (Symbol <= 18)) then raise EAbInternalInflateError.Create( 'decoded a symbol not between 0 and 18 {ReadLitDistCodeLengths}'); {check that the codelength is in range} if not ((0 < SymbolCodeLen) and (SymbolCodeLen <= aCodeLenTree.LookupBitLength)) then raise EAbInternalInflateError.Create( 'decoded a code length out of range {ReadLitDistCodeLengths}'); {for a Symbol of 0..15, just save the value} if (Symbol <= 15) then begin aCodeLens[SymbolCount] := Symbol; inc(SymbolCount); {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end {for a Symbol of 16, get two more bits and copy the previous code length that many times + 3} else if (Symbol = 16) then begin RepeatCount := 3 + ((BitBuffer shr SymbolCodeLen) and $3); Symbol := aCodeLens[SymbolCount-1]; for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := Symbol; inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 2; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 2); {$ENDIF} end {for a Symbol of 17, get three more bits and copy a zero code length that many times + 3} else if (Symbol = 17) then begin RepeatCount := 3 + ((BitBuffer shr SymbolCodeLen) and $7); {note: the codelengths array was aet to zeros at the start so the following two lines are not needed for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := 0;} inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 3; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 3); {$ENDIF} end {for a Symbol of 18, get seven more bits and copy a zero code length that many times + 11} else if (Symbol = 18) then begin RepeatCount := 11 + ((BitBuffer shr SymbolCodeLen) and $7F); {note: the codelengths array was aet to zeros at the start so the following two lines are not needed for i := 0 to pred(RepeatCount) do aCodeLens[SymbolCount+i] := 0;} inc(SymbolCount, RepeatCount); BitCount := SymbolCodeLen + 7; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} {$IFDEF UseLogging} inc(aTotalBits, 7); {$ENDIF} end; end; end; {--------} procedure DecodeData(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLiteralTree : TAbDfDecodeHuffmanTree; aDistanceTree : TAbDfDecodeHuffmanTree; aDeflate64 : boolean); var LookupValue : integer; EncodedSymbol : longint; Symbol : integer; SymbolCodeLen : integer; ExtraBitCount : integer; Length : integer; Distance : integer; BitBuffer : TAb32bit; BitCount : integer; begin {extract the first symbol (it's got to be a literal/length symbol)} {..grab the lookup set of bits} if aDeflate64 then BitCount := aLiteralTree.LookupBitLength + 16 else BitCount := aLiteralTree.LookupBitLength + 5; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aLiteralTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aLiteralTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aLiteralTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; // ExtraBitCount := EncodedSymbol shr 24; {repeat until we get the end-of-block symbol} while ((Symbol <> 256) {and (ExtraBitCount <> 15)}) do begin {for a literal, just output it to the sliding window} if (Symbol < 256) then begin aOutWindow.AddLiteral(AnsiChar(Symbol)); {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end {for a length value, we need to get any extra bits, and then the distance (plus any extra bits for that), and then add the duplicated characters to the sliding window} else begin {check that the length symbol is less than or equal to 285} if (Symbol > 285) then raise EAbInternalInflateError.Create( 'decoded an invalid length symbol: greater than 285 [DecodeData]'); {calculate the length (if need be, by calculating the number of extra bits that encode the length)} if (not aDeflate64) and (Symbol = 285) then begin Length := 258; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin ExtraBitCount := EncodedSymbol shr 24; if (ExtraBitCount = 0) then begin Length := dfc_LengthBase[Symbol - 257]; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin Length := dfc_LengthBase[Symbol - 257] + ((BitBuffer shr SymbolCodeLen) and AbExtractMask[ExtraBitCount]); BitCount := SymbolCodeLen + ExtraBitCount; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} end; end; {extract the distance} {..grab the lookup set of bits} BitCount := aDistanceTree.LookupBitLength + 14; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aDistanceTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aDistanceTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aDistanceTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; {check that the distance symbol is less than or equal to 29} if (not aDeflate64) and (Symbol > 29) then raise EAbInternalInflateError.Create( 'decoded an invalid distance symbol: greater than 29 [DecodeData]'); {..calculate the extra bits for the distance} ExtraBitCount := EncodedSymbol shr 24; {..calculate the distance} if (ExtraBitCount = 0) then begin Distance := dfc_DistanceBase[Symbol]; {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end else begin Distance := dfc_DistanceBase[Symbol] + ((BitBuffer shr SymbolCodeLen) and AbExtractMask[ExtraBitCount]); BitCount := SymbolCodeLen + ExtraBitCount; {$IFOPT C+} aInStrm.DiscardBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then aInStrm.DiscardMoreBits(BitCount) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr BitCount; aInStrm.BitsLeft := aInStrm.BitsLeft - BitCount; end; {$ENDIF} end; {duplicate the characters in the sliding window} aOutWindow.AddLenDist(Length, Distance); end; {extract the next symbol} {..grab the lookup set of bits} if aDeflate64 then BitCount := aLiteralTree.LookupBitLength + 16 else BitCount := aLiteralTree.LookupBitLength + 5; {$IFOPT C+} BitBuffer := aInStrm.PeekBits(BitCount); {$ELSE} if (aInStrm.BitsLeft < BitCount) then BitBuffer := aInStrm.PeekMoreBits(BitCount) else BitBuffer := aInStrm.BitBuffer and AbExtractMask[BitCount]; {$ENDIF} LookupValue := BitBuffer and AbExtractMask[aLiteralTree.LookupBitLength]; {..get the encoded symbol} {$IFOPT C+} {if Assertions are on} EncodedSymbol := aLiteralTree.Decode(LookupValue); {$ELSE} EncodedSymbol := aLiteralTree.Decodes^[LookupValue]; {$ENDIF} {..extract the data} Symbol := EncodedSymbol and $FFFF; SymbolCodeLen := (EncodedSymbol shr 16) and $FF; end; {discard the bits for the end-of-block marker} {$IFOPT C+} aInStrm.DiscardBits(SymbolCodeLen); {$ELSE} if (aInStrm.BitsLeft < SymbolCodeLen) then aInStrm.DiscardMoreBits(SymbolCodeLen) else begin aInStrm.BitBuffer := aInStrm.BitBuffer shr SymbolCodeLen; aInStrm.BitsLeft := aInStrm.BitsLeft - SymbolCodeLen; end; {$ENDIF} end; {--------} procedure InflateStoredBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger); const BufferSize = 16 * 1024; var LenNotLen : packed record Len : word; NotLen : word; end; BytesToGo : integer; BytesToWrite : integer; Buffer : pointer; begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a stored block'); {$ENDIF} {align the input bit stream to the nearest byte boundary} aInStrm.AlignToByte; {read the length of the stored data and the notted length} aInStrm.ReadBuffer(LenNotLen, sizeof(LenNotLen)); {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..block length: %d (%-4x, NOT %-4x)', [LenNotLen.Len, LenNotLen.Len, LenNotLen.NotLen])); {$ENDIF} {check that NOT of the length equals the notted length} if ((not LenNotLen.Len) <> LenNotLen.NotLen) then raise EAbInternalInflateError.Create( 'invalid stored block (length and NOT length do not match) [InflateStoredBlock]'); {calculate the number of bytes to copy from the stored block} BytesToGo := LenNotLen.Len; {allocate a large buffer} GetMem(Buffer, BufferSize); {copy all the data in the stored block to the output window} try {while there are still some bytes to copy...} while (BytesToGo <> 0) do begin {calculate the number of bytes this time} if (BytesToGo > BufferSize) then BytesToWrite := BufferSize else BytesToWrite := BytesToGo; {read that many bytes and write them to the output window} aInStrm.ReadBuffer(Buffer^, BytesToWrite); aOutWindow.AddBuffer(Buffer^, BytesToWrite); {calculate the number of bytes still to copy} dec(BytesToGo, BytesToWrite); end; finally FreeMem(Buffer); end; end; {--------} procedure InflateStaticBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger; aDeflate64 : boolean); begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a static huffman tree block'); {$ENDIF} {decode the data with the static trees} DecodeData(aInStrm, aOutWindow, AbStaticLiteralTree, AbStaticDistanceTree, aDeflate64); end; {--------} procedure InflateDynamicBlock(aInStrm : TAbDfInBitStream; aOutWindow : TAbDfOutputWindow; aLog : TAbLogger; aDeflate64 : boolean); var i : integer; LitCount : integer; DistCount : integer; CodeLenCount : integer; CodeLens : array [0..285+32] of integer; CodeLenTree : TAbDfDecodeHuffmanTree; LiteralTree : TAbDfDecodeHuffmanTree; DistanceTree : TAbDfDecodeHuffmanTree; TotalBits : integer; begin {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine('....a dynamic huffman tree block'); {$ENDIF} {prepare for the try..finally} CodeLenTree := nil; LiteralTree := nil; DistanceTree := nil; try {decode the number of literal, distance and codelength codes} LitCount := aInStrm.ReadBits(5) + 257; DistCount := aInStrm.ReadBits(5) + 1; CodeLenCount := aInStrm.ReadBits(4) + 4; {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine(Format('Count of literals: %d', [LitCount])); aLog.WriteLine(Format('Count of distances: %d', [DistCount])); aLog.WriteLine(Format('Count of code lengths: %d', [CodeLenCount])); end; {$ENDIF} {verify that the counts are valid} if (LitCount > 286) then raise EAbInternalInflateError.Create( 'count of literal codes in dynamic block is greater than 286 [InflateDynamicBlock]'); if (not aDeflate64) and (DistCount > 30) then raise EAbInternalInflateError.Create( 'count of distance codes in dynamic block is greater than 30 [InflateDynamicBlock]'); {read the codelengths} FillChar(CodeLens, 19 * sizeof(integer), 0); for i := 0 to pred(CodeLenCount) do CodeLens[dfc_CodeLengthIndex[i]] := aInStrm.ReadBits(3); {$IFDEF UseLogging} {log them} if (aLog <> nil) then begin aLog.WriteLine('CodeLength Huffman tree: code lengths'); for i := 0 to 18 do aLog.WriteStr(Format('%-3d', [CodeLens[i]])); aLog.WriteLine(''); aLog.WriteLine(Format('..total bits: %d', [CodeLenCount * 3])); end; {$ENDIF} {create the codelength huffman tree} CodeLenTree := TAbDfDecodeHuffmanTree.Create(19, 7, huDecoding); CodeLenTree.Build(CodeLens, 0, 19, [0], $FFFF); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Code lengths tree'); CodeLenTree.DebugPrint(aLog); end; {$ENDIF} {read the codelengths for both the literal/length and distance huffman trees} ReadLitDistCodeLengths(aInStrm, CodeLenTree, CodeLens, LitCount + DistCount, TotalBits); {$IFDEF UseLoggingx} {log them} if (aLog <> nil) then begin aLog.WriteLine('Literal/length & Dist Huffman trees: code lengths'); for i := 0 to pred(LitCount + DistCount) do aLog.WriteLine(Format('%3d: %3d', [i, CodeLens[i]])); aLog.WriteLine(''); aLog.WriteLine(Format('..total bits: %d', [TotalBits])); end; {$ENDIF} {create the literal huffman tree} LiteralTree := TAbDfDecodeHuffmanTree.Create(286, 15, huDecoding); LiteralTree.Build(CodeLens, 0, LitCount, dfc_LitExtraBits, dfc_LitExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Literal/length tree'); LiteralTree.DebugPrint(aLog); end; {$ENDIF} {create the distance huffman tree} if aDeflate64 then DistanceTree := TAbDfDecodeHuffmanTree.Create(32, 15, huDecoding) else DistanceTree := TAbDfDecodeHuffmanTree.Create(30, 15, huDecoding); DistanceTree.Build(CodeLens, LitCount, DistCount, dfc_DistExtraBits, dfc_DistExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Distance tree'); DistanceTree.DebugPrint(aLog); end; {$ENDIF} {using the literal and distance trees, decode the bit stream} DecodeData(aInStrm, aOutWindow, LiteralTree, DistanceTree, aDeflate64); finally CodeLenTree.Free; LiteralTree.Free; DistanceTree.Free; end; end; {====================================================================} {===Interfaced routine===============================================} function Inflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; var Helper : TAbDeflateHelper; InBitStrm : TAbDfInBitStream; OutWindow : TAbDfOutputWindow; Log : TAbLogger; UseDeflate64 : boolean; UseCRC32 : boolean; IsFinalBlock : boolean; BlockType : integer; TestOnly : boolean; SourceStartPos : longint; DestStartPos : longint; {$IFDEF UseLogging} StartPosn : longint; {$ENDIF} begin {$IFDEF DefeatWarnings} Result := 0; SourceStartPos := 0; DestStartPos := 0; TestOnly := False; {$ENDIF} {$IFDEF UseLogging} StartPosn := 0; {$ENDIF} {pre-conditions: streams must be allocated of course} Assert(aSource <> nil, 'Deflate: aSource stream cannot be nil'); Assert(aDest <> nil, 'Deflate: aDest stream cannot be nil'); {prepare for the try..finally} Helper := nil; InBitStrm := nil; OutWindow := nil; Log := nil; try {finally} try {except} {create our helper; assign the passed one to it} Helper := TAbDeflateHelper.Create; if (aHelper <> nil) then Helper.Assign(aHelper); {get the initial start positions of both streams} SourceStartPos := aSource.Position; DestStartPos := aDest.Position; {if the helper's stream size is -1, and it has a progress event handler, calculate the stream size from the stream itself} if Assigned(Helper.OnProgressStep) then begin if (Helper.StreamSize = -1) then Helper.StreamSize := aSource.Size; end {otherwise we certainly can't do any progress reporting} else begin Helper.OnProgressStep := nil; Helper.StreamSize := 0; end; {create the logger, if requested} if (Helper.LogFile <> '') then begin Log := TAbLogger.Create(Helper.LogFile); Log.WriteLine('INFLATING STREAM...'); {$IFNDEF UseLogging} Log.WriteLine('Need to recompile the app with UseLogging turned on'); {$ENDIF} end; InBitStrm := TAbDfInBitStream.Create(aSource, Helper.OnProgressStep, Helper.StreamSize); {create the output sliding window} UseDeflate64 := (Helper.Options and dfc_UseDeflate64) <> 0; UseCRC32 := (Helper.Options and dfc_UseAdler32) = 0; TestOnly := (Helper.Options and dfc_TestOnly) <> 0; OutWindow := TAbDfOutputWindow.Create( aDest, UseDeflate64, UseCRC32, Helper.PartialSize, TestOnly, Log); {start decoding the deflated stream} repeat {read the final block flag and the block type} IsFinalBlock := InBitStrm.ReadBit; BlockType := InBitStrm.ReadBits(2); {$IFDEF UseLogging} {log it} if (Log <> nil) then begin Log.WriteLine(''); Log.WriteLine('Starting new block'); Log.WriteLine(Format('..final block? %d', [ord(IsFinalBlock)])); Log.WriteLine(Format('..block type? %d', [BlockType])); StartPosn := OutWindow.Position; end; {$ENDIF} case BlockType of 0 : InflateStoredBlock(InBitStrm, OutWindow, Log); 1 : InflateStaticBlock(InBitStrm, OutWindow, Log, UseDeflate64); 2 : InflateDynamicBlock(InBitStrm, OutWindow, Log, UseDeflate64); else raise EAbInternalInflateError.Create( 'starting new block, but invalid block type [Inflate]'); end; {$IFDEF UseLogging} {log it} if (Log <> nil) then Log.WriteLine(Format('---block end--- (decoded size %d bytes)', [OutWindow.Position - StartPosn])); {$ENDIF} until IsFinalBlock; {get the uncompressed stream's checksum} Result := OutWindow.Checksum; if TestOnly and (aHelper <> nil) then aHelper.NormalSize := OutWindow.Position; {$IFDEF UseLogging} {log it} if (Log <> nil) then Log.WriteLine(Format('End of compressed stream, checksum %-8x', [Result])); {$ENDIF} except on E : EAbPartSizedInflate do begin {nothing, just swallow the exception} Result := 0; end; on E : EAbAbortProgress do begin {nothing, just swallow the exception} Result := 0; end; on E : EAbInternalInflateError do begin if (Log <> nil) then Log.WriteLine(Format('Internal exception raised: %s', [E.Message])); raise EAbInflateError.Create(E.Message); end; end; finally Helper.Free; OutWindow.Free; InBitStrm.Free; Log.Free; end; {if there's a helper return the compressed and uncompressed sizes} if (aHelper <> nil) then begin if not TestOnly then aHelper.NormalSize := aDest.Position - DestStartPos; aHelper.CompressedSize := aSource.Position - SourceStartPos; end; {WARNING NOTE: the compiler will warn that the return value of this function might be undefined. However, it is wrong: it has been fooled by the code. If you don't want to see this warning again, enable the DefeatWarnings compiler define in AbDefine.inc.} end; {====================================================================} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abxz.pas��������������������������������������������������0000644�0001750�0000144�00000022106�12455021064�021221� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Simple interface to lzma library * * Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * ***** END LICENSE BLOCK ***** *) {**********************************************************} {* ABBREVIA: AbXz.pas *} {**********************************************************} {* ABBREVIA: TLzmaCompression, TLzmaDecompression classes *} {**********************************************************} unit AbXz; {$mode delphi} {$packrecords c} interface uses Classes, SysUtils, CTypes; type TLzmaStreamRec = record next_in: pbyte; (**< Pointer to the next input byte. *) avail_in: csize_t; (**< Number of available input bytes in next_in. *) total_in: cuint64; (**< Total number of bytes read by liblzma. *) next_out: pbyte; (**< Pointer to the next output position. *) avail_out: csize_t; (**< Amount of free space in next_out. *) total_out: cuint64; (**< Total number of bytes written by liblzma. *) (** * \brief Custom memory allocation functions * * In most cases this is NULL which makes liblzma use * the standard malloc() and free(). *) allocator: pointer; (** Internal state is not visible to applications. *) internal: pointer; (* * Reserved space to allow possible future extensions without * breaking the ABI. Excluding the initialization of this structure, * you should not touch these, because the names of these variables * may change. *) reserved_ptr1: pointer; reserved_ptr2: pointer; reserved_ptr3: pointer; reserved_ptr4: pointer; reserved_int1: cuint64; reserved_int2: cuint64; reserved_int3: csize_t; reserved_int4: csize_t; reserved_enum1: cuint32; reserved_enum2: cuint32; end; type { TLzmaBase } TLzmaBase = class private FLzmaRec: TLzmaStreamRec; FSource, FTarget: TStream; FInput: array[Word] of Byte; FOutput: array[Word] of Byte; protected function Check(Return: cint): cint; virtual; abstract; public constructor Create(ASource, ATarget: TStream); virtual; destructor Destroy; override; function Code(Count: cuint64 = High(cuint64)): Boolean; end; { TLzmaCompression } TLzmaCompression = class(TLzmaBase) protected function Check(Return: cint): cint; override; public constructor Create(ASource, ATarget: TStream); override; end; { TLzmaDecompression } TLzmaDecompression = class(TLzmaBase) protected function Check(Return: cint): cint; override; public constructor Create(ASource, ATarget: TStream); override; end; ELzmaError = class(Exception); ELzmaCompressionError = class(ELzmaError); ELzmaDecompressionError = class(ELzmaError); implementation uses DynLibs; const // Lzma return codes LZMA_OK = 0; LZMA_STREAM_END = 1; LZMA_NO_CHECK = 2; LZMA_UNSUPPORTED_CHECK = 3; LZMA_GET_CHECK = 4; LZMA_MEM_ERROR = 5; LZMA_MEMLIMIT_ERROR = 6; LZMA_FORMAT_ERROR = 7; LZMA_OPTIONS_ERROR = 8; LZMA_DATA_ERROR = 9; LZMA_BUF_ERROR = 10; LZMA_PROG_ERROR = 11; const // Lzma actions LZMA_RUN = 0; LZMA_SYNC_FLUSH = 1; LZMA_FULL_FLUSH = 2; LZMA_FINISH = 3; const // Type of the integrity check (Check ID) LZMA_CHECK_CRC64 = 4; const // Decoding flags LZMA_TELL_UNSUPPORTED_CHECK = $02; LZMA_CONCATENATED = $08; const liblzma = {$IF DEFINED(MSWINDOWS)} 'liblzma.dll' {$ELSEIF DEFINED(DARWIN)} 'liblzma.dylib' {$ELSEIF DEFINED(UNIX)} 'liblzma.so.5' {$IFEND}; var hLzma: TLibHandle = NilHandle; var lzma_stream_decoder: function(var strm: TLzmaStreamRec; memlimit: cuint64; flags: cuint32): cint; cdecl; lzma_easy_encoder: function(var strm: TLzmaStreamRec; preset: cuint32; check: cint): cint; cdecl; lzma_code: function(var strm: TLzmaStreamRec; action: cint): cint; cdecl; lzma_end: procedure(var strm: TLzmaStreamRec); cdecl; procedure LzmaLoadLibrary; begin if hLzma <> NilHandle then Exit; hLzma := LoadLibrary(liblzma); if hLzma = NilHandle then raise ELzmaError.Create('Lzma shared library not found'); @lzma_stream_decoder := GetProcAddress(hLzma, 'lzma_stream_decoder'); @lzma_easy_encoder := GetProcAddress(hLzma, 'lzma_easy_encoder'); @lzma_code := GetProcAddress(hLzma, 'lzma_code'); @lzma_end := GetProcAddress(hLzma, 'lzma_end'); end; { TLzmaBase } function TLzmaBase.Code(Count: cuint64): Boolean; var State: cint; Size: csize_t; Action: cint = LZMA_RUN; begin FLzmaRec.next_out := @FOutput; FLzmaRec.avail_out := SizeOf(FOutput); while True do begin if (FLzmaRec.avail_in = 0) then begin FLzmaRec.next_in := FInput; FLzmaRec.avail_in := FSource.Read(FInput, SizeOf(FInput)); if FLzmaRec.avail_in = 0 then Action:= LZMA_FINISH; end; State:= Check(lzma_code(FLzmaRec, Action)); if (FLzmaRec.total_out > Count) then begin State:= LZMA_STREAM_END; FLzmaRec.avail_out:= SizeOf(FOutput) - (Count - FTarget.Position); end; if (FLzmaRec.avail_out = 0) or (State = LZMA_STREAM_END) then begin Size:= SizeOf(FOutput) - FLzmaRec.avail_out; if FTarget.Write(FOutput, Size) <> Size then begin RaiseLastOSError; end; FLzmaRec.next_out := FOutput; FLzmaRec.avail_out := SizeOf(FOutput); end; if State = LZMA_STREAM_END then Exit(True); end; end; constructor TLzmaBase.Create(ASource, ATarget: TStream); begin LzmaLoadLibrary; FSource:= ASource; FTarget:= ATarget; FillChar(FLzmaRec, SizeOf(TLzmaStreamRec), 0); end; destructor TLzmaBase.Destroy; begin if (@lzma_end <> nil) then lzma_end(FLzmaRec); inherited Destroy; end; { TLzmaCompression } function TLzmaCompression.Check(Return: cint): cint; var Message: String; begin Result:= Return; if not (Return in [LZMA_OK, LZMA_STREAM_END]) then begin case Return of LZMA_MEM_ERROR: Message:= 'Memory allocation failed'; LZMA_OPTIONS_ERROR: Message:= 'Specified preset is not supported'; LZMA_UNSUPPORTED_CHECK: Message:= 'Specified integrity check is not supported'; LZMA_FORMAT_ERROR: Message:= 'The input is not in the .xz format'; LZMA_DATA_ERROR: Message:= 'File size limits exceeded'; else Message:= Format('Unknown error, possibly a bug (error code %d)', [Return]); end; raise ELzmaCompressionError.Create(Message); end; end; constructor TLzmaCompression.Create(ASource, ATarget: TStream); begin inherited Create(ASource, ATarget); Check(lzma_easy_encoder(FLzmaRec, 0, LZMA_CHECK_CRC64)); end; { TLzmaDecompression } function TLzmaDecompression.Check(Return: cint): cint; var Message: String; begin Result:= Return; if not (Return in [LZMA_OK, LZMA_STREAM_END]) then begin case Return of LZMA_MEM_ERROR: Message:= 'Memory allocation failed'; LZMA_OPTIONS_ERROR: Message:= 'Unsupported decompressor flags'; LZMA_FORMAT_ERROR: Message:= 'The input is not in the .xz format'; LZMA_DATA_ERROR: Message:= 'Compressed file is corrupt'; LZMA_BUF_ERROR: Message:= 'Compressed file is truncated or otherwise corrupt'; else Message:= Format('Unknown error, possibly a bug (error code %d)', [Return]); end; raise ELzmaDecompressionError.Create(Message); end; end; constructor TLzmaDecompression.Create(ASource, ATarget: TStream); const flags = LZMA_TELL_UNSUPPORTED_CHECK or LZMA_CONCATENATED; var memory_limit: cuint64 = High(cuint64); begin inherited Create(ASource, ATarget); Check(lzma_stream_decoder(FLzmaRec, memory_limit, flags)); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abspanst.pas����������������������������������������������0000644�0001750�0000144�00000030723�12014201074�022064� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Craig Peterson <capeterson@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbSpanSt.pas *} {*********************************************************} {* ABBREVIA: TAbSpan*Stream Classes *} {*********************************************************} {* Streams to handle splitting ZIP files or spanning *} {* them to diskettes *} {*********************************************************} unit AbSpanSt; {$I AbDefine.inc} interface uses Classes, AbArcTyp; type { TAbSpanBaseStream interface ============================================== } TAbSpanBaseStream = class(TStream) protected {private} FArchiveName: string; FOnRequestImage: TAbRequestImageEvent; protected {methods} function GetImageName( ImageNumber: Integer ): string; public {methods} constructor Create( const ArchiveName: string ); public {events} property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write FOnRequestImage; end; { TAbSpanReadStream interface ============================================== } TAbSpanReadStream = class(TAbSpanBaseStream) protected {private} FCurrentImage: LongWord; FIsSplit: Boolean; FLastImage: LongWord; FStream: TStream; FOnRequestNthDisk : TAbRequestNthDiskEvent; protected {methods} procedure GotoImage( ImageNumber: Integer ); procedure SetOnRequestImage(Value: TAbRequestImageEvent); public {methods} constructor Create( const ArchiveName: string; CurrentImage: LongWord; Stream: TStream ); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; procedure SeekImage( Image: LongWord; const Offset: Int64); public {events} property OnRequestImage write SetOnRequestImage; property OnRequestNthDisk : TAbRequestNthDiskEvent read FOnRequestNthDisk write FOnRequestNthDisk; end; { TAbSpanWriteStream interface ============================================= } TAbSpanWriteStream = class(TAbSpanBaseStream) protected {private} FCurrentImage: LongWord; FImageSize: Int64; FStream: TStream; FThreshold: Int64; FOnRequestBlankDisk : TAbRequestDiskEvent; protected {methods} procedure NewImage; public {methods} constructor Create( const ArchiveName: string; Stream: TStream; Threshold: Int64 ); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function WriteUnspanned(const Buffer; Count: Longint; FailOnSpan: Boolean = False): Boolean; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; function ReleaseStream: TStream; public {properties} property CurrentImage : LongWord read FCurrentImage; public {events} property OnRequestBlankDisk : TAbRequestDiskEvent read FOnRequestBlankDisk write FOnRequestBlankDisk; end; implementation uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} Math, RTLConsts, SysUtils, AbUtils, AbExcept, DCOSUtils, DCClassesUtf8; {============================================================================} { TAbSpanBaseStream implementation ========================================= } constructor TAbSpanBaseStream.Create( const ArchiveName: string ); begin inherited Create; FArchiveName := ArchiveName; end; {------------------------------------------------------------------------------} function TAbSpanBaseStream.GetImageName( ImageNumber: Integer ): string; var Abort : Boolean; Ext : string; begin {generate default name} Ext := ExtractFileExt(FArchiveName); if (Length(Ext) < 2) then Ext := '.' + Format('%.2d', [ImageNumber]) else Ext := Ext[1] + Ext[2] + Format('%.2d', [ImageNumber]); Result := ChangeFileExt(FArchiveName, Ext); {call event} if Assigned(FOnRequestImage) then begin Abort := False; FOnRequestImage(Self, ImageNumber, Result, Abort); if Abort then raise EAbUserAbort.Create; end; end; {============================================================================} { TAbSpanReadStream implementation ========================================= } constructor TAbSpanReadStream.Create( const ArchiveName: string; CurrentImage: LongWord; Stream: TStream ); begin inherited Create(ArchiveName); FCurrentImage := CurrentImage; FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); FLastImage := CurrentImage; FStream := Stream; end; {------------------------------------------------------------------------------} destructor TAbSpanReadStream.Destroy; begin FreeAndNil(FStream); inherited; end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.GotoImage( ImageNumber: Integer ); var Abort: Boolean; ImageName: string; begin { switch to the requested image. ImageNumber is passed in as 0-based to match the zip spec, but all of the callbacks receive 1-based values. } FreeAndNil(FStream); FCurrentImage := ImageNumber; Inc(ImageNumber); ImageName := FArchiveName; if FIsSplit then begin { the last image uses the original filename } if FCurrentImage <> FLastImage then ImageName := GetImageName(ImageNumber) end else if Assigned(FOnRequestNthDisk) then begin Abort := False; repeat FOnRequestNthDisk(Self, ImageNumber, Abort); if Abort then raise EAbUserAbort.Create; until AbGetDriveFreeSpace(ImageName) <> -1; end else raise EAbUserAbort.Create; FStream := TFileStreamEx.Create(ImageName, fmOpenRead or fmShareDenyWrite); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Read(var Buffer; Count: Longint): Longint; var BytesRead, BytesLeft: LongInt; PBuf: PByte; begin { read until the buffer's full, switching images if necessary } Result := 0; if FStream = nil then Exit; PBuf := @Buffer; BytesLeft := Count; while Result < Count do begin BytesRead := FStream.Read(PBuf^, BytesLeft); Inc(Result, BytesRead); Inc(PBuf, BytesRead); Dec(BytesLeft, BytesRead); if BytesRead < BytesLeft then begin if FCurrentImage <> FLastImage then GotoImage(FCurrentImage + 1) else Break; end; end; end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Write(const Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbSpanReadStream.Write unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if FStream = nil then Result := 0 else if (Offset = 0) and (Origin = soCurrent) then Result := FStream.Position else raise EAbException.Create('TAbSpanReadStream.Seek unsupported'); end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.SeekImage( Image: LongWord; const Offset: Int64); begin if FStream = nil then Exit; if FCurrentImage <> Image then GotoImage(Image); FStream.Position := Offset; end; {------------------------------------------------------------------------------} procedure TAbSpanReadStream.SetOnRequestImage(Value: TAbRequestImageEvent); begin FOnRequestImage := Value; FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); end; {============================================================================} { TAbSpanWriteStream implementation ======================================== } constructor TAbSpanWriteStream.Create( const ArchiveName: string; Stream: TStream; Threshold: Int64 ); begin inherited Create(ArchiveName); FCurrentImage := 0; FStream := Stream; FThreshold := Threshold; end; {------------------------------------------------------------------------------} destructor TAbSpanWriteStream.Destroy; begin FStream.Free; inherited; end; {------------------------------------------------------------------------------} procedure TAbSpanWriteStream.NewImage; var Abort: Boolean; begin { start a new span or blank disk. FCurrentImage is 0-based to match the zip spec, but all of the callbacks receive 1-based values. } FreeAndNil(FStream); Inc(FCurrentImage); if FThreshold > 0 then mbRenameFile(FArchiveName, GetImageName(FCurrentImage)) else begin if Assigned(FOnRequestBlankDisk) then begin Abort := False; repeat FOnRequestBlankDisk(Self, Abort); if Abort then raise EAbUserAbort.Create; until AbGetDriveFreeSpace(FArchiveName) <> -1; end else raise EAbUserAbort.Create; AbSetSpanVolumeLabel(AbDrive(FArchiveName), FCurrentImage); end; FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FImageSize := 0; end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Read(var Buffer; Count: Longint): Longint; begin raise EAbException.Create('TAbSpanWriteStream.Read unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Write(const Buffer; Count: Longint): Longint; var BytesWritten, BytesLeft: LongInt; PBuf: PByte; begin { write until the buffer is done, starting new spans if necessary } Result := 0; if FStream = nil then Exit; PBuf := @Buffer; BytesLeft := Count; while Result < Count do begin if FThreshold > 0 then BytesWritten := FStream.Write(PBuf^, Min(BytesLeft, FThreshold - FImageSize)) else BytesWritten := FStream.Write(PBuf^, BytesLeft); Inc(FImageSize, BytesWritten); Inc(Result, BytesWritten); Inc(PBuf, BytesWritten); Dec(BytesLeft, BytesWritten); if BytesWritten < BytesLeft then NewImage; end; end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.WriteUnspanned(const Buffer; Count: Longint; FailOnSpan: Boolean = False): Boolean; var BytesWritten: LongInt; begin { write as a contiguous block, starting a new span if there isn't room. FailOnSpan (and result = false) can be used to update data before it's written again } if FStream = nil then raise EWriteError.Create(SWriteError); if (FThreshold > 0) and (FThreshold - FImageSize < Count) then BytesWritten := 0 else BytesWritten := FStream.Write(Buffer, Count); if BytesWritten < Count then begin if BytesWritten > 0 then FStream.Size := FStream.Size - BytesWritten; NewImage; if FailOnSpan then BytesWritten := 0 else begin BytesWritten := Count; FStream.WriteBuffer(Buffer, Count); end; end; Inc(FImageSize, BytesWritten); Result := (BytesWritten = Count); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if FStream = nil then Result := 0 else if (Offset = 0) and (Origin = soCurrent) then Result := FStream.Position else raise EAbException.Create('TAbSpanWriteStream.Seek unsupported'); end; {------------------------------------------------------------------------------} function TAbSpanWriteStream.ReleaseStream: TStream; begin Result := FStream; FStream := nil; end; {------------------------------------------------------------------------------} end. ���������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abexcept.pas����������������������������������������������0000644�0001750�0000144�00000042327�12014201074�022047� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbExcept.pas *} {*********************************************************} {* ABBREVIA: Exception classes *} {*********************************************************} unit AbExcept; {$I AbDefine.inc} interface uses SysUtils, AbUtils; type EAbException = class( Exception ) public ErrorCode : Integer; end; EAbArchiveBusy = class( EAbException ) public constructor Create; end; EAbBadStream = class( EAbException ) protected FInnerException : Exception; public constructor Create; constructor CreateInner(aInnerException : Exception); property InnerException : Exception read FInnerException; end; EAbDuplicateName = class( EAbException ) public constructor Create; end; EAbFileNotFound = class( EAbException ) public constructor Create; end; EAbNoArchive = class( EAbException ) public constructor Create; end; EAbUserAbort = class( EAbException ) public constructor Create; end; EAbNoSuchDirectory = class( EAbException ) public constructor Create; end; EAbUnhandledType = class( EAbException ) public constructor Create; end; EAbSpanningNotSupported = class (EAbException) public constructor Create; end; EAbInvalidSpanningThreshold = class ( EAbException ) public constructor Create; end; EAbZipException = class( EAbException ); {Zip exception} EAbCabException = class( EAbException ); {Cab exception} EAbTarException = class( EAbException ); {Tar Exception} EAbGzipException = class( EAbException); {GZip exception} EAbZipBadSpanStream = class( EAbZipException ) public constructor Create; end; EAbZipBadCRC = class( EAbZipException ) public constructor Create; end; EAbZipInflateBlock = class( EAbZipException ) public constructor Create; end; EAbZipInvalid = class( EAbZipException ) public constructor Create; end; EAbInvalidIndex = class( EAbZipException ) public constructor Create; end; EAbZipInvalidFactor = class( EAbZipException ) public constructor Create; end; EAbZipInvalidLFH = class( EAbZipException ) public constructor Create; end; EAbZipInvalidMethod = class( EAbZipException ) public constructor Create; end; EAbZipInvalidPassword = class( EAbZipException ) public constructor Create; end; EAbZipInvalidStub= class( EAbZipException ) public constructor Create; end; EAbZipNoExtraction = class( EAbZipException ) public constructor Create; end; EAbZipNoInsertion = class( EAbZipException ) public constructor Create; end; EAbZipSpanOverwrite= class( EAbZipException ) public constructor Create; end; EAbZipStreamFull = class( EAbZipException ) public constructor Create; end; EAbZipTruncate = class( EAbZipException ) public constructor Create; end; EAbZipUnsupported = class( EAbZipException ) public constructor Create; end; EAbZipVersion = class( EAbZipException ) public constructor Create; end; EAbReadError = class( EAbZipException ) public constructor Create; end; EAbGzipBadCRC = class( EAbGZipException ) public constructor Create; end; EAbGzipBadFileSize = class( EAbGZipException ) public constructor Create; end; EAbGzipInvalid = class( EAbGZipException ) public constructor Create; end; EAbTarInvalid = class( EAbTarException) public constructor Create; end; EAbTarBadFileName = class( EAbTarException) public constructor Create; end; EAbTarBadLinkName = class( EAbTarException) public constructor Create; end; EAbTarBadOp = class( EAbTarException) public constructor Create; end; EAbVMSInvalidOrigin = class( EAbZipException ) public constructor Create( Value : Integer ); end; EAbVMSErrorOpenSwap = class( EAbZipException ) public constructor Create( const Value : string ); end; EAbVMSSeekFail = class( EAbZipException ) public constructor Create( const Value : string ); end; EAbVMSReadFail = class( EAbZipException ) public constructor Create( Count : Integer; const Value : string ); end; EAbVMSWriteFail = class( EAbZipException ) public constructor Create( Count : Integer; const Value : string ); end; EAbVMSWriteTooManyBytes = class( EAbZipException ) public constructor Create( Count : Integer ); end; EAbBBSReadTooManyBytes = class( EAbZipException ) public constructor Create(Count : Integer ); end; EAbBBSSeekOutsideBuffer = class( EAbZipException ) public constructor Create; end; EAbBBSInvalidOrigin = class( EAbZipException ) public constructor Create; end; EAbBBSWriteTooManyBytes = class( EAbZipException ) public constructor Create(Count : Integer ); end; EAbSWSNotEndofStream = class( EAbZipException ) public constructor Create; end; EAbSWSSeekFailed = class( EAbZipException ) public constructor Create; end; EAbSWSWriteFailed = class( EAbZipException ) public constructor Create; end; EAbSWSInvalidOrigin = class( EAbZipException ) public constructor Create; end; EAbSWSInvalidNewOrigin = class( EAbZipException ) public constructor Create; end; EAbNoCabinetDll = class( EAbCabException ) public constructor Create; end; EAbFCIFileOpenError = class( EAbCabException ) public constructor Create; end; EAbFCIFileReadError = class( EAbCabException ) public constructor Create; end; EAbFCIFileWriteError = class( EAbCabException ) public constructor Create; end; EAbFCIFileCloseError = class( EAbCabException ) public constructor Create; end; EAbFCIFileSeekError = class( EAbCabException ) public constructor Create; end; EAbFCIFileDeleteError = class( EAbCabException ) public constructor Create; end; EAbFCIAddFileError = class( EAbCabException ) public constructor Create; end; EAbFCICreateError = class( EAbCabException ) public constructor Create; end; EAbFCIFlushCabinetError = class( EAbCabException ) public constructor Create; end; EAbFCIFlushFolderError = class( EAbCabException ) public constructor Create; end; EAbFDICopyError = class( EAbCabException ) public constructor Create; end; EAbFDICreateError = class( EAbCabException ) public constructor Create; end; EAbInvalidCabTemplate = class( EAbCabException ) public constructor Create; end; EAbInvalidCabFile = class( EAbCabException ) public constructor Create; end; EAbFileTooLarge = class(EAbException) public constructor Create; end; procedure AbConvertException( const E : Exception; var eClass : TAbErrorClass; var eErrorCode : Integer ); implementation uses Classes, AbConst, AbResString; constructor EAbArchiveBusy.Create; begin inherited Create(AbArchiveBusyS); ErrorCode := AbArchiveBusy; end; constructor EAbBadStream.Create; begin inherited Create(AbBadStreamTypeS); FInnerException := nil; ErrorCode := AbBadStreamType; end; constructor EAbBadStream.CreateInner(aInnerException: Exception); begin inherited Create(AbBadStreamTypeS + #13#10 + aInnerException.Message); FInnerException := aInnerException; ErrorCode := AbBadStreamType; end; constructor EAbDuplicateName.Create; begin inherited Create(AbDuplicateNameS); ErrorCode := AbDuplicateName; end; constructor EAbNoSuchDirectory.Create; begin inherited Create(AbNoSuchDirectoryS); ErrorCode := AbNoSuchDirectory; end; constructor EAbInvalidSpanningThreshold.Create; begin inherited Create(AbInvalidThresholdS); ErrorCode := AbInvalidThreshold; end; constructor EAbFileNotFound.Create; begin inherited Create(AbFileNotFoundS); ErrorCode := AbFileNotFound; end; constructor EAbNoArchive.Create; begin inherited Create(AbNoArchiveS); ErrorCode := AbNoArchive; end; constructor EAbUserAbort.Create; begin inherited Create(AbUserAbortS); ErrorCode := AbUserAbort; end; constructor EAbZipBadSpanStream.Create; begin inherited Create(AbBadSpanStreamS); ErrorCode := AbBadSpanStream; end; constructor EAbZipBadCRC.Create; begin inherited Create(AbZipBadCRCS); ErrorCode := AbZipBadCRC; end; constructor EAbZipInflateBlock.Create; begin inherited Create(AbInflateBlockErrorS); ErrorCode := AbInflateBlockError; end; constructor EAbZipInvalid.Create; begin inherited Create(AbErrZipInvalidS); ErrorCode := AbErrZipInvalid; end; constructor EAbInvalidIndex.Create; begin inherited Create(AbInvalidIndexS); ErrorCode := AbInvalidIndex; end; constructor EAbZipInvalidFactor.Create; begin inherited Create(AbInvalidFactorS); ErrorCode := AbInvalidFactor; end; constructor EAbZipInvalidLFH.Create; begin inherited Create(AbInvalidLFHS); ErrorCode := AbInvalidLFH; end; constructor EAbZipInvalidMethod.Create; begin inherited Create(AbUnknownCompressionMethodS); ErrorCode := AbUnknownCompressionMethod; end; constructor EAbZipInvalidPassword.Create; begin inherited Create(AbInvalidPasswordS); ErrorCode := AbInvalidPassword; end; constructor EAbZipInvalidStub.Create; begin inherited Create(AbZipBadStubS); ErrorCode := AbZipBadStub; end; constructor EAbZipNoExtraction.Create; begin inherited Create(AbNoExtractionMethodS); ErrorCode := AbNoExtractionMethod; end; constructor EAbZipNoInsertion.Create; begin inherited Create(AbNoInsertionMethodS); ErrorCode := AbNoInsertionMethod; end; constructor EAbZipSpanOverwrite.Create; begin inherited Create(AbNoOverwriteSpanStreamS); ErrorCode := AbNoOverwriteSpanStream; end; constructor EAbZipStreamFull.Create; begin inherited Create(AbStreamFullS); ErrorCode := AbStreamFull; end; constructor EAbZipTruncate.Create; begin inherited Create(AbTruncateErrorS); ErrorCode := AbTruncateError; end; constructor EAbZipUnsupported.Create; begin inherited Create(AbUnsupportedCompressionMethodS); ErrorCode := AbUnsupportedCompressionMethod; end; constructor EAbZipVersion.Create; begin inherited Create(AbZipVersionNeededS); ErrorCode := AbZipVersionNeeded; end; constructor EAbReadError.Create; begin inherited Create(AbReadErrorS); ErrorCode := AbReadError; end; constructor EAbVMSInvalidOrigin.Create( Value : Integer ); begin inherited Create(Format(AbVMSInvalidOriginS, [Value])); ErrorCode := AbVMSInvalidOrigin; end; constructor EAbBBSReadTooManyBytes.Create(Count : Integer ); begin inherited Create(Format(AbBBSReadTooManyBytesS, [Count])); ErrorCode := AbBBSReadTooManyBytes; end; constructor EAbBBSSeekOutsideBuffer.Create; begin inherited Create(AbBBSSeekOutsideBufferS); ErrorCode := AbBBSSeekOutsideBuffer; end; constructor EAbBBSInvalidOrigin.Create; begin inherited Create(AbBBSInvalidOriginS); ErrorCode := AbBBSInvalidOrigin; end; constructor EAbBBSWriteTooManyBytes.Create(Count : Integer); begin inherited Create(Format(AbBBSWriteTooManyBytesS, [Count])); ErrorCode := AbBBSWriteTooManyBytes; end; constructor EAbVMSErrorOpenSwap.Create( const Value : string ); begin inherited Create(Format(AbVMSErrorOpenSwapS, [Value])); ErrorCode := AbVMSErrorOpenSwap; end; constructor EAbVMSSeekFail.Create( const Value : string ); begin inherited Create(Format(AbVMSSeekFailS, [Value])); ErrorCode := AbVMSSeekFail; end; constructor EAbVMSReadFail.Create( Count : Integer; const Value : string ); begin inherited Create(Format(AbVMSReadFailS, [Count, Value])); ErrorCode := AbVMSReadFail; end; constructor EAbVMSWriteFail.Create( Count : Integer; const Value : string ); begin inherited Create(Format(AbVMSWriteFailS, [Count, Value])); ErrorCode := AbVMSWriteFail; end; constructor EAbVMSWriteTooManyBytes.Create( Count : Integer ); begin inherited Create(Format(AbVMSWriteTooManyBytesS, [Count])); ErrorCode := AbVMSWriteTooManyBytes; end; constructor EAbSWSNotEndofStream.Create; begin inherited Create(AbSWSNotEndofStreamS); ErrorCode := AbSWSNotEndofStream; end; constructor EAbSWSSeekFailed.Create; begin inherited Create(AbSWSSeekFailedS); ErrorCode := AbSWSSeekFailed; end; constructor EAbSWSWriteFailed.Create; begin inherited Create(AbSWSWriteFailedS); ErrorCode := AbSWSWriteFailed; end; constructor EAbSWSInvalidOrigin.Create; begin inherited Create(AbSWSInvalidOriginS); ErrorCode := AbSWSInvalidOrigin; end; constructor EAbSWSInvalidNewOrigin.Create; begin inherited Create(AbSWSInvalidNewOriginS); ErrorCode := AbSWSInvalidNewOrigin; end; constructor EAbFCIFileOpenError.Create; begin inherited Create(AbFCIFileOpenErrorS); ErrorCode := AbFCIFileOpenError; end; constructor EAbNoCabinetDll.Create; begin inherited Create(AbNoCabinetDllErrorS); ErrorCode := AbNoCabinetDllError; end; constructor EAbFCIFileReadError.Create; begin inherited Create(AbFCIFileReadErrorS); ErrorCode := AbFCIFileReadError; end; constructor EAbFCIFileWriteError.Create; begin inherited Create(AbFCIFileWriteErrorS); ErrorCode := AbFCIFileWriteError; end; constructor EAbFCIFileCloseError.Create; begin inherited Create(AbFCIFileCloseErrorS); ErrorCode := AbFCIFileCloseError; end; constructor EAbFCIFileSeekError.Create; begin inherited Create(AbFCIFileSeekErrorS); ErrorCode := AbFCIFileSeekError; end; constructor EAbFCIFileDeleteError.Create; begin inherited Create(AbFCIFileDeleteErrorS); ErrorCode := AbFCIFileDeleteError; end; constructor EAbFCIAddFileError.Create; begin inherited Create(AbFCIAddFileErrorS); ErrorCode := AbFCIAddFileError; end; constructor EAbFCICreateError.Create; begin inherited Create(AbFCICreateErrorS); ErrorCode := AbFCICreateError; end; constructor EAbFCIFlushCabinetError.Create; begin inherited Create(AbFCIFlushCabinetErrorS); ErrorCode := AbFCIFlushCabinetError; end; constructor EAbFCIFlushFolderError.Create; begin inherited Create(AbFCIFlushFolderErrorS); ErrorCode := AbFCIFlushFolderError; end; constructor EAbFDICopyError.Create; begin inherited Create(AbFDICopyErrorS); ErrorCode := AbFDICopyError; end; constructor EAbFDICreateError.Create; begin inherited Create(AbFDICreateErrorS); ErrorCode := AbFDICreateError; end; constructor EAbInvalidCabTemplate.Create; begin inherited Create(AbInvalidCabTemplateS); ErrorCode := AbInvalidCabTemplate; end; constructor EAbInvalidCabFile.Create; begin inherited Create(AbInvalidCabFileS); ErrorCode := AbInvalidCabFile; end; procedure AbConvertException( const E : Exception; var eClass : TAbErrorClass; var eErrorCode : Integer ); begin eClass := ecOther; eErrorCode := 0; if E is EAbException then begin eClass := ecAbbrevia; eErrorCode := (E as EAbException).ErrorCode; end else if E is EInOutError then begin eClass := ecInOutError; eErrorCode := (E as EInOutError).ErrorCode; end else if E is EFilerError then eClass := ecFilerError else if E is EFOpenError then eClass := ecFileOpenError else if E is EFCreateError then eClass := ecFileCreateError; end; { EAbUnhandledType } constructor EAbUnhandledType.Create; begin inherited Create(AbUnhandledFileTypeS); ErrorCode := AbUnhandledFileType; end; { EAbGzipBadCRC } constructor EAbGzipBadCRC.Create; begin inherited Create(AbGzipBadCRCS); ErrorCode := AbGzipBadCRC; end; { EAbGzipBadFileSize } constructor EAbGzipBadFileSize.Create; begin inherited Create(AbGzipBadFileSizeS); ErrorCode := AbGzipBadFileSize; end; { EAbGzipInvalid } constructor EAbGzipInvalid.Create; begin inherited Create(AbSpanningNotSupportedS); ErrorCode := AbSpanningNotSupported; end; { EAbTarInvalid } constructor EAbTarInvalid.Create; begin inherited Create(AbTarInvalidS); ErrorCode := AbTarInvalid; end; { EAbTarBadFileName } constructor EAbTarBadFileName.Create; begin inherited Create(AbTarBadFileNameS); ErrorCode := AbTarBadFileName; end; { EAbTarBadLinkName } constructor EAbTarBadLinkName.Create; begin inherited Create(AbTarBadLinkNameS); ErrorCode := AbTarBadLinkName; end; { EAbTarBadOp } constructor EAbTarBadOp.Create; begin inherited Create(AbTarBadOpS); ErrorCode := AbTarBadOp; end; { EAbSpanningNotSupported } constructor EAbSpanningNotSupported.Create; begin inherited Create(AbSpanningNotSupportedS); ErrorCode := AbSpanningNotSupported; end; { EAbFileTooLarge } constructor EAbFileTooLarge.Create; begin {TODO Create const and fix wording} inherited Create(AbFileSizeTooBigS); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abutils.pas�����������������������������������������������0000644�0001750�0000144�00000123356�12630665222�021736� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbUtils.pas *} {*********************************************************} {* ABBREVIA: Utility classes and routines *} {*********************************************************} unit AbUtils; {$I AbDefine.inc} interface uses {$IFDEF MSWINDOWS} Windows, {$ENDIF} {$IFDEF LibcAPI} Libc, {$ENDIF} {$IFDEF FPCUnixAPI} baseunix, {$IFDEF Linux} initc, {$ENDIF} unix, {$ENDIF} {$IFDEF PosixAPI} Posix.SysStatvfs, Posix.SysStat, Posix.Utime, Posix.Base, Posix.Unistd, Posix.Fcntl, Posix.SysTypes, {$ENDIF} {$IFDEF UNIX} DateUtils, DCClassesUtf8, {$ENDIF} SysUtils, Classes; type {describe the pending action for an archive item} TAbArchiveAction = (aaFailed, aaNone, aaAdd, aaDelete, aaFreshen, aaMove, aaReplace, aaStreamAdd); TAbProcessType = (ptAdd, ptDelete, ptExtract, ptFreshen, ptMove, ptReplace, ptFoundUnhandled); TAbLogType = (ltAdd, ltDelete, ltExtract, ltFreshen, ltMove, ltReplace, ltStart, ltFoundUnhandled); TAbErrorClass = (ecAbbrevia, ecInOutError, ecFilerError, ecFileCreateError, ecFileOpenError, ecCabError, ecOther); const AbPathDelim = PathDelim; { Delphi/Linux constant } AbPathSep = PathSep; { Delphi/Linux constant } AbDosPathDelim = '\'; AbUnixPathDelim = '/'; AbDosPathSep = ';'; AbUnixPathSep = ':'; AbDosAnyFile = '*.*'; AbUnixAnyFile = '*'; AbAnyFile = {$IFDEF UNIX} AbUnixAnyFile; {$ELSE} AbDosAnyFile; {$ENDIF} AbThisDir = '.'; AbParentDir = '..'; type TAbArchiveType = (atUnknown, atZip, atSpannedZip, atSelfExtZip, atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar, atXz, atXzippedTar, atLzma, atLzmaTar); {$IF NOT DECLARED(DWORD)} type DWORD = LongWord; {$IFEND} {$IF NOT DECLARED(PtrInt)} type // Delphi 7-2007 declared NativeInt incorrectly {$IFDEF CPU386} PtrInt = LongInt; PtrUInt = LongWord; {$ELSE} PtrInt = NativeInt; PtrUInt = NativeUInt; {$ENDIF} {$IFEND} { Unicode backwards compatibility types } {$IF NOT DECLARED(RawByteString)} type RawByteString = AnsiString; {$IFEND} { System-encoded SBCS string (formerly AnsiString) } type AbSysString = {$IFDEF Posix}UTF8String{$ELSE}AnsiString{$ENDIF}; const AbCrc32Table : array[0..255] of DWord = ( $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, $706af48f, $e963a535, $9e6495a3, $0edb8832, $79dcb8a4, $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, $90bf1d91, $1db71064, $6ab020f2, $f3b97148, $84be41de, $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, $136c9856, $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, $fa0f3d63, $8d080df5, $3b6e20c8, $4c69105e, $d56041e4, $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, $35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, $45df5c75, $dcd60dcf, $abd13d59, $26d930ac, $51de003a, $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, $b8bda50f, $2802b89e, $5f058808, $c60cd9b2, $b10be924, $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, $76dc4190, $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, $9fbfe4a5, $e8b8d433, $7807c9a2, $0f00f934, $9609a88e, $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, $6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, $1b01a57b, $8208f4c1, $f50fc457, $65b0d9c6, $12b7e950, $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, $fbd44c65, $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, $4369e96a, $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, $aa0a4c5f, $dd0d7cc9, $5005713c, $270241aa, $be0b1010, $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, $2eb40d81, $b7bd5c3b, $c0ba6cad, $edb88320, $9abfb3b6, $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, $73dc1683, $e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, $f00f9344, $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, $196c3671, $6e6b06e7, $fed41b76, $89d32be0, $10da7a5a, $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, $d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, $a6bc5767, $3fb506dd, $48b2364b, $d80d2bda, $af0a1b4c, $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, $4669be79, $cb61b38c, $bc66831a, $256fd2a0, $5268e236, $cc0c7795, $bb0b4703, $220216b9, $5505262f, $c5ba3bbe, $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, $2cd99e8b, $5bdeae1d, $9b64c2b0, $ec63f226, $756aa39c, $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, $e5d5be0d, $7cdcefb7, $0bdbdf21, $86d3d2d4, $f1d4e242, $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, $18b74777, $88085ae6, $ff0f6a70, $66063bca, $11010b5c, $8f659eff, $f862ae69, $616bffd3, $166ccf45, $a00ae278, $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, $4969474d, $3e6e77db, $aed16a4a, $d9d65adc, $40df0b66, $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, $cdd70693, $54de5729, $23d967bf, $b3667a2e, $c4614ab8, $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, $2d02ef8d ); type TAbPathType = ( ptNone, ptRelative, ptAbsolute ); {===Helper functions===} function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; procedure AbCreateDirectory( const Path : string ); {creates the requested directory tree. CreateDir is insufficient, because if you have a path x:\dir, and request x:\dir\sub1\sub2, (/dir and /dir/sub1/sub2 on Unix) it fails.} function AbCreateSymlink( const LinksPointsTo, LinkName : String ): Boolean; function AbCreateTempFile(const Dir : string) : string; function AbReadSymlink( const LinkFile : String ): String; {Reads the name that a link points to.} function AbGetTempDirectory : string; {-Return the system temp directory} function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; function AbDrive(const ArchiveName : string) : Char; function AbDriveIsRemovable(const ArchiveName : string) : Boolean; function AbFileMatch(FileName : string; FileMask : string ) : Boolean; {see if FileName matches FileMask} procedure AbFindFiles(const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); procedure AbFindFilesEx( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); function AbAddBackSlash(const DirName : string) : string; function AbFindNthSlash( const Path : string; n : Integer ) : Integer; {return the position of the character just before the nth backslash} function AbGetDriveFreeSpace(const ArchiveName : string) : Int64; {return the available space on the specified drive } function AbGetPathType( const Value : string ) : TAbPathType; {returns path type - none, relative or absolute} {$IFDEF MSWINDOWS} function AbGetShortFileSpec(const LongFileSpec : string ) : string; {$ENDIF} procedure AbIncFilename( var Filename : string; Value : Word ); procedure AbParseFileName( FileSpec : string; out Drive : string; out Path : string; out FileName : string ); procedure AbParsePath( Path : string; SubPaths : TStrings ); {- break abart path into subpaths --- Path : abbrevia/examples -> SubPaths[0] = abbrevia SubPaths[1] = examples} function AbPatternMatch(const Source : string; iSrc : Integer; const Pattern : string; iPat : Integer ) : Boolean; { recursive routine to see if the source string matches the pattern. Both ? and * wildcard characters are allowed.} function AbPercentage(V1, V2 : LongInt) : Byte; {-Returns the ratio of V1 to V2 * 100} procedure AbStripDots( var FName : string ); {-strips relative path information} procedure AbStripDrive( var FName : string ); {-strips the drive off a filename} procedure AbFixName( var FName : string ); {-changes backslashes to forward slashes} procedure AbUnfixName( var FName : string ); {-changes forward slashes to backslashes} procedure AbUpdateCRC( var CRC : LongInt; const Buffer; Len : Integer ); function AbUpdateCRC32(CurByte : Byte; CurCrc : LongInt) : LongInt; {-Returns an updated crc32} function AbCRC32Of( const aValue : RawByteString ) : LongInt; function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; const AB_SPAN_VOL_LABEL = 'PKBACK# %3.3d'; function AbGetVolumeLabel(Drive : Char) : string; procedure AbSetSpanVolumeLabel(Drive: Char; VolNo : Integer); function AbTestSpanVolumeLabel(Drive: Char; VolNo : Integer): Boolean; procedure AbSetFileAttr(const aFileName : string; aAttr: Integer); {-Sets platform-native file attributes (DOS attr or Unix mode)} function AbFileGetSize(const aFileName : string) : Int64; type TAbAttrExRec = record Time: TDateTime; Size: Int64; Attr: Integer; Mode: {$IFDEF UNIX}mode_t{$ELSE}Cardinal{$ENDIF}; end; function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; function AbSwapLongEndianness(Value : LongInt): LongInt; { date and time stuff } const Date1900 {: LongInt} = $0001AC05; {Julian day count for 01/01/1900 -- TDateTime Start Date} Date1970 {: LongInt} = $00020FE4; {Julian day count for 01/01/1970 -- Unix Start Date} Unix0Date: TDateTime = 25569; {Date1970 - Date1900} SecondsInDay = 86400; {Number of seconds in a day} SecondsInHour = 3600; {Number of seconds in an hour} SecondsInMinute = 60; {Number of seconds in a minute} HoursInDay = 24; {Number of hours in a day} MinutesInHour = 60; {Number of minutes in an hour} MinutesInDay = 1440; {Number of minutes in a day} function AbUnixTimeToLocalDateTime(UnixTime : LongInt) : TDateTime; function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt; function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime; function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt; function AbGetFileTime(const aFileName: string): TDateTime; function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; { file attributes } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; function AbUnix2DosFileAttributes(Attr: LongInt): LongInt; { UNIX File Types and Permissions } const AB_FMODE_FILE = $0000; AB_FMODE_FIFO = $1000; AB_FMODE_CHARSPECFILE = $2000; AB_FMODE_DIR = $4000; AB_FMODE_BLOCKSPECFILE = $6000; AB_FMODE_FILE2 = $8000; AB_FMODE_FILELINK = $A000; AB_FMODE_SOCKET = $C000; AB_FPERMISSION_OWNERREAD = $0100; { read by owner } AB_FPERMISSION_OWNERWRITE = $0080; { write by owner } AB_FPERMISSION_OWNEREXECUTE = $0040; { execute/search by owner } AB_FPERMISSION_GROUPREAD = $0020; { read by group } AB_FPERMISSION_GROUPWRITE = $0010; { write by group } AB_FPERMISSION_GROUPEXECUTE = $0008; { execute/search by group } AB_FPERMISSION_OTHERREAD = $0004; { read by other } AB_FPERMISSION_OTHERWRITE = $0002; { write by other } AB_FPERMISSION_OTHEREXECUTE = $0001; { execute/search by other } AB_FPERMISSION_GENERIC = AB_FPERMISSION_OWNERREAD or AB_FPERMISSION_OWNERWRITE or AB_FPERMISSION_GROUPREAD or AB_FPERMISSION_OTHERREAD; { Unicode backwards compatibility functions } {$IFNDEF UNICODE} function CharInSet(C: AnsiChar; CharSet: TSysCharSet): Boolean; {$ENDIF} implementation uses StrUtils, LazUTF8, AbConst, AbExcept, DCOSUtils, DCStrUtils, DCDateTimeUtils; (* {$IF DEFINED(FPCUnixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external clib name 'mktemp'; {$ELSEIF DEFINED(PosixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external libc name _PU + 'mktemp'; {$IFEND} {$IF DEFINED(FPCUnixAPI) AND DEFINED(Linux)} // FreePascal libc definitions type nl_item = cint; const __LC_CTYPE = 0; _NL_CTYPE_CLASS = (__LC_CTYPE shl 16); _NL_CTYPE_CODESET_NAME = (_NL_CTYPE_CLASS)+14; function nl_langinfo(__item: nl_item): PAnsiChar; cdecl; external clib name 'nl_langinfo'; {$IFEND} *) {===platform independent routines for platform dependent stuff=======} function ExtractShortName(const SR : TSearchRec) : string; begin {$IFDEF MSWINDOWS} {$WARN SYMBOL_PLATFORM OFF} if SR.FindData.cAlternateFileName[0] <> #0 then Result := SR.FindData.cAlternateFileName else Result := SR.FindData.cFileName; {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$IFDEF UNIX} Result := SR.Name; {$ENDIF} end; {====================================================================} { ========================================================================== } function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; {$IFDEF UNIX} var DesStream, SrcStream: TFileStreamEx; {$ENDIF} begin {$IFDEF UNIX} Result := False; if not FailIfExists or not mbFileExists(Destination) then try SrcStream := TFileStreamEx.Create(Source, fmOpenRead or fmShareDenyWrite); try DesStream := TFileStreamEx.Create(Destination, fmCreate); try DesStream.CopyFrom(SrcStream, 0); Result := True; finally DesStream.Free; end; finally SrcStream.Free; end; except // Ignore errors and just return false end; {$ENDIF UNIX} {$IFDEF MSWINDOWS} Result := CopyFileW(PWideChar(UTF8Decode(Source)), PWideChar(UTF8Decode(Destination)), FailIfExists); {$ENDIF MSWINDOWS} end; { -------------------------------------------------------------------------- } procedure AbCreateDirectory( const Path : string ); {creates the requested directory tree. CreateDir is insufficient, because if you have a path x:\dir, and request x:\dir\sub1\sub2, (/dir and /dir/sub1/sub2 on Unix) it fails.} var iStartSlash : Integer; i : Integer; TempPath : string; begin if mbDirectoryExists( Path ) then Exit; {see how much of the path currently exists} if Pos( '\\', Path ) > 0 then {UNC Path \\computername\sharename\path1..\pathn} iStartSlash := 5 else {standard Path drive:\path1..\pathn} iStartSlash := 2; repeat {find the Slash at iStartSlash} i := AbFindNthSlash( Path, iStartSlash ); {get a temp path to try: drive:\path1} TempPath := Copy( Path, 1, i ); {if it doesn't exist, create it} if not mbDirectoryExists( TempPath ) then if mbCreateDir( TempPath ) = False then Exit; inc( iStartSlash ); until ( Length( TempPath ) = Length( Path ) ); end; function AbCreateSymlink(const LinksPointsTo, LinkName: String): Boolean; begin {$IF DEFINED(MSWINDOWS)} // TODO: Implement using uNTFSLinks. Result := False; {$ELSEIF DEFINED(FPCUnixAPI)} Result := (fpsymlink(PChar(UTF8ToSys(LinksPointsTo)),PChar(UTF8ToSys(LinkName)))=0); {$ELSE} Result := False; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbCreateTempFile(const Dir : string) : string; begin Result := AbGetTempFile(Dir, True); end; function AbReadSymlink(const LinkFile: String): String; begin {$IF DEFINED(MSWINDOWS)} // TODO: Implement using uNTFSLinks. Result := ''; {$ELSEIF DEFINED(FPCUnixAPI)} Result := SysToUTF8(fpReadlink(UTF8ToSys(LinkFile))); {$ELSE} Result := ''; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbGetTempDirectory : string; begin Result:= SysToUTF8(GetTempDir); end; { -------------------------------------------------------------------------- } function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; var hFile: System.THandle; TempPath : String; begin if mbDirectoryExists(Dir) then TempPath := IncludeTrailingPathDelimiter(Dir) else TempPath := AbGetTempDirectory; Result := GetTempName(TempPath + 'VMS'); if CreateIt then begin hFile := mbFileCreate(Result); if hFile <> feInvalidHandle then FileClose(hFile); end; end; { -------------------------------------------------------------------------- } function AbDrive(const ArchiveName : string) : Char; var iPos: Integer; Path : string; begin Path := ExpandFileName(ArchiveName); iPos := Pos(':', Path); if (iPos <= 0) then Result := 'A' else Result := Path[1]; end; { -------------------------------------------------------------------------- } function AbDriveIsRemovable(const ArchiveName : string) : Boolean; {$IFDEF MSWINDOWS} var Path: string; {$ENDIF} begin {$IFDEF MSWINDOWS} Path := ExpandFileName(ArchiveName); if AnsiStartsText('\\?\UNC\', Path) then Delete(Path, 1, 8) else if AnsiStartsText('\\?\', Path) then Delete(Path, 1, 4); Path := IncludeTrailingPathDelimiter(ExtractFileDrive(Path)); Result := GetDriveType(PChar(Path)) = DRIVE_REMOVABLE; {$ENDIF} {$IFDEF LINUX} {LINUX -- Following may not cover all the bases} Result := AnsiStartsText('/mnt/floppy', ExtractFilePath(ExpandFileName(ArchiveName))); {$ENDIF} {$IFDEF DARWIN} Result := False; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbGetDriveFreeSpace(const ArchiveName : string) : Int64; { attempt to find free space (in bytes) on drive/volume, returns -1 if fails for some reason } {$IFDEF MSWINDOWS} var FreeAvailable, TotalSpace: Int64; begin if GetDiskFreeSpaceExW(PWideChar(UTF8Decode(ExtractFilePath(ExpandFileName(ArchiveName)))), FreeAvailable, TotalSpace, nil) then Result := FreeAvailable else Result := -1; {$ENDIF} {$IFDEF UNIX} var FStats : {$IFDEF PosixAPI}_statvfs{$ELSE}TStatFs{$ENDIF}; begin {$IF DEFINED(LibcAPI)} if statfs(PAnsiChar(ExtractFilePath(ArchiveName)), FStats) = 0 then Result := Int64(FStats.f_bAvail) * Int64(FStats.f_bsize) {$ELSEIF DEFINED(FPCUnixAPI)} if fpStatFS(PAnsiChar(UTF8ToSys(ExtractFilePath(ArchiveName))), @FStats) = 0 then Result := Int64(FStats.bAvail) * Int64(FStats.bsize) {$ELSEIF DEFINED(PosixAPI)} if statvfs(PAnsiChar(AbSysString(ExtractFilePath(ArchiveName))), FStats) = 0 then Result := Int64(FStats.f_bavail) * Int64(FStats.f_bsize) {$IFEND} else Result := -1; {$ENDIF} end; { -------------------------------------------------------------------------- } function AbFileMatch(FileName: string; FileMask: string ): Boolean; {see if FileName matches FileMask} var DirMatch : Boolean; MaskDir : string; begin //FileName := UpperCase( FileName ); //FileMask := UpperCase( FileMask ); MaskDir := ExtractFilePath( FileMask ); if MaskDir = '' then DirMatch := True else DirMatch := AbPatternMatch( ExtractFilePath( FileName ), 1, MaskDir, 1 ); Result := DirMatch and AbPatternMatch( ExtractFileName( FileName ), 1, ExtractFileName( FileMask ), 1 ); end; { -------------------------------------------------------------------------- } procedure AbFindFiles( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); var NewFile : string; SR : TSearchRec; Found : Integer; NameMask: string; begin Found := FindFirst( FileMask, SearchAttr, SR ); if Found = 0 then begin try NameMask := ExtractFileName(FileMask); while Found = 0 do begin NewFile := ExtractFilePath( FileMask ) + SR.Name; if (SR.Name <> AbThisDir) and (SR.Name <> AbParentDir) and AbPatternMatch(SR.Name, 1, NameMask, 1) then if (SR.Attr and faDirectory) <> 0 then FileList.Add( NewFile + PathDelim ) else FileList.Add( NewFile ); Found := FindNext( SR ); end; finally FindClose( SR ); end; end; if not Recurse then Exit; NewFile := ExtractFilePath( FileMask ); if ( NewFile <> '' ) and ( NewFile[Length(NewFile)] <> AbPathDelim) then NewFile := NewFile + AbPathDelim; NewFile := NewFile + AbAnyFile; Found := FindFirst( NewFile, faDirectory or SearchAttr, SR ); if Found = 0 then begin try while ( Found = 0 ) do begin if ( SR.Name <> AbThisDir ) and ( SR.Name <> AbParentDir ) and ((SR.Attr and faDirectory) > 0 ) then AbFindFiles( ExtractFilePath( NewFile ) + SR.Name + AbPathDelim + ExtractFileName( FileMask ), SearchAttr, FileList, True ); Found := FindNext( SR ); end; finally FindClose( SR ); end; end; end; { -------------------------------------------------------------------------- } procedure AbFindFilesEx( const FileMask : string; SearchAttr : Integer; FileList : TStrings; Recurse : Boolean ); var I, J: Integer; MaskPart: string; begin I := 1; while I <= Length(FileMask) do begin J := I; while (I <= Length(FileMask)) and (FileMask[I] <> AbPathSep) do Inc(I); MaskPart := Trim(Copy(FileMask, J, I - J)); if (I <= Length(FileMask)) and (FileMask[I] = AbPathSep) then Inc(I); AbFindFiles(MaskPart, SearchAttr, FileList, Recurse); end; end; { -------------------------------------------------------------------------- } function AbAddBackSlash(const DirName : string) : string; { Add a default slash to a directory name } const AbDelimSet : set of AnsiChar = [AbPathDelim, ':', #0]; begin Result := DirName; if Length(DirName) = 0 then Exit; if not CharInSet(DirName[Length(DirName)], AbDelimSet) then Result := DirName + AbPathDelim; end; { -------------------------------------------------------------------------- } function AbFindNthSlash( const Path : string; n : Integer ) : Integer; { return the position of the character just before the nth slash } var i : Integer; Len : Integer; iSlash : Integer; begin Len := Length( Path ); Result := Len; iSlash := 0; i := 0; while i <= Len do begin if Path[i] = AbPathDelim then begin inc( iSlash ); if iSlash = n then begin Result := pred( i ); break; end; end; inc( i ); end; end; { -------------------------------------------------------------------------- } function AbGetPathType( const Value : string ) : TAbPathType; { returns path type - none, relative or absolute } begin Result := ptNone; {$IFDEF MSWINDOWS} {check for drive/unc info} if ( Pos( '\\', Value ) > 0 ) or ( Pos( ':', Value ) > 0 ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (Value[1] = AbPathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( AbPathDelim, Value ) > 0 ) or ( Pos( AB_ZIPPATHDELIM, Value ) > 0 ) then Result := ptRelative; end; { -------------------------------------------------------------------------- } {$IFDEF MSWINDOWS} {$WARN SYMBOL_PLATFORM OFF} function AbGetShortFileSpec(const LongFileSpec : string ) : string; var SR : TSearchRec; Search : string; Drive : string; Path : string; FileName : string; Found : Integer; SubPaths : TStrings; i : Integer; begin AbParseFileName( LongFileSpec, Drive, Path, FileName ); SubPaths := TStringList.Create; try AbParsePath( Path, SubPaths ); Search := Drive; Result := Search + AbPathDelim; if SubPaths.Count > 0 then for i := 0 to pred( SubPaths.Count ) do begin Search := Search + AbPathDelim + SubPaths[i]; Found := FindFirst( Search, faHidden + faSysFile + faDirectory, SR ); if Found <> 0 then raise EAbException.Create( 'Path not found' ); try Result := Result + ExtractShortName(SR) + AbPathDelim; finally FindClose( SR ); end; end; Search := Search + AbPathDelim + FileName; Found := FindFirst( Search, faReadOnly + faHidden + faSysFile + faArchive, SR ); if Found <> 0 then raise EAbFileNotFound.Create; try Result := Result + ExtractShortName(SR); finally FindClose( SR ); end; finally SubPaths.Free; end; end; {$WARN SYMBOL_PLATFORM ON} {$ENDIF} { -------------------------------------------------------------------------- } procedure AbIncFilename( var Filename : string; Value : Word ); { place value at the end of filename, e.g. Files.C04 } var Ext : string; I : Word; begin I := (Value + 1) mod 100; Ext := ExtractFileExt(Filename); if (Length(Ext) < 2) then Ext := '.' + Format('%.2d', [I]) else Ext := Ext[1] + Ext[2] + Format('%.2d', [I]); Filename := ChangeFileExt(Filename, Ext); end; { -------------------------------------------------------------------------- } procedure AbParseFileName( FileSpec : string; out Drive : string; out Path : string; out FileName : string ); var i : Integer; iColon : Integer; iStartSlash : Integer; begin if Pos( AB_ZIPPATHDELIM, FileSpec ) > 0 then AbUnfixName( FileSpec ); FileName := ExtractFileName( FileSpec ); Path := ExtractFilePath( FileSpec ); {see how much of the path currently exists} iColon := Pos( ':', Path ); if Pos( '\\', Path ) > 0 then begin {UNC Path \\computername\sharename\path1..\pathn} {everything up to the 4th slash is the drive} iStartSlash := 4; i := AbFindNthSlash( Path, iStartSlash ); Drive := Copy( Path, 1, i ); Delete( Path, 1, i + 1 ); end else if iColon > 0 then begin Drive := Copy( Path, 1, iColon ); Delete( Path, 1, iColon ); if Path[1] = AbPathDelim then Delete( Path, 1, 1 ); end; end; { -------------------------------------------------------------------------- } procedure AbParsePath( Path : string; SubPaths : TStrings ); { break abart path into subpaths --- Path : abbrevia/examples > SubPaths[0] = abbrevia SubPaths[1] = examples} var i : Integer; iStart : Integer; iStartSlash : Integer; SubPath : string; begin if Path = '' then Exit; if Path[ Length( Path ) ] = AbPathDelim then Delete( Path, Length( Path ), 1 ); iStart := 1; iStartSlash := 1; repeat {find the Slash at iStartSlash} i := AbFindNthSlash( Path, iStartSlash ); {get the subpath} SubPath := Copy( Path, iStart, i - iStart + 1 ); iStart := i + 2; inc( iStartSlash ); SubPaths.Add( SubPath ); until ( i = Length( Path ) ); end; { -------------------------------------------------------------------------- } function AbPatternMatch(const Source : string; iSrc : Integer; const Pattern : string; iPat : Integer ) : Boolean; { recursive routine to see if the source string matches the pattern. Both ? and * wildcard characters are allowed. Compares Source from iSrc to Length(Source) to Pattern from iPat to Length(Pattern)} var Matched : Boolean; k : Integer; begin if Length( Source ) = 0 then begin Result := Length( Pattern ) = 0; Exit; end; if iPat = 1 then begin if ( CompareStr( Pattern, AbDosAnyFile) = 0 ) or ( CompareStr( Pattern, AbUnixAnyFile ) = 0 ) then begin Result := True; Exit; end; end; if Length( Pattern ) = 0 then begin Result := (Length( Source ) - iSrc + 1 = 0); Exit; end; while True do begin if ( Length( Source ) < iSrc ) and ( Length( Pattern ) < iPat ) then begin Result := True; Exit; end; if Length( Pattern ) < iPat then begin Result := False; Exit; end; if Pattern[iPat] = '*' then begin k := iPat; if ( Length( Pattern ) < iPat + 1 ) then begin Result := True; Exit; end; while True do begin Matched := AbPatternMatch( Source, k, Pattern, iPat + 1 ); if Matched or ( Length( Source ) < k ) then begin Result := Matched; Exit; end; inc( k ); end; end else begin if ( (Pattern[iPat] = '?') and ( Length( Source ) <> iSrc - 1 ) ) or ( Pattern[iPat] = Source[iSrc] ) then begin inc( iPat ); inc( iSrc ); end else begin Result := False; Exit; end; end; end; end; { -------------------------------------------------------------------------- } function AbPercentage(V1, V2 : LongInt) : Byte; { Returns the ratio of V1 to V2 * 100 } begin if V2 > 16384000 then begin {Possible LongInt overflow} V1 := (V1 + $80) shr 8; {scale down (div 256)} V2 := (V2 + $80) shr 8; {scale down (div 256)} end; if V2 <= 0 then Result := 0 else if V1 >= V2 then Result := 100 else Result := (V1 * 100) div V2; end; { -------------------------------------------------------------------------- } procedure AbStripDots( var FName : string ); { strips relative path information, e.g. ".."} begin while Pos( AbParentDir + AbPathDelim, FName ) = 1 do System.Delete( FName, 1, 3 ); end; { -------------------------------------------------------------------------- } procedure AbStripDrive( var FName : string ); { strips the drive off a filename } var Drive, Path, Name : string; begin AbParseFileName( FName, Drive, Path, Name ); FName := Path + Name; end; { -------------------------------------------------------------------------- } procedure AbFixName( var FName : string ); { changes backslashes to forward slashes } var i : Integer; begin for i := 1 to Length( FName ) do if FName[i] = AbPathDelim then FName[i] := AB_ZIPPATHDELIM; end; { -------------------------------------------------------------------------- } procedure AbUnfixName( var FName : string ); { changes forward slashes to backslashes } var i : Integer; begin for i := 1 to Length( FName ) do if FName[i] = AB_ZIPPATHDELIM then FName[i] := AbPathDelim; end; { -------------------------------------------------------------------------- } procedure AbUpdateCRC( var CRC : LongInt; const Buffer; Len : Integer ); var BufPtr : PByte; i : Integer; CRCTemp : DWORD; begin BufPtr := @Buffer; CRCTemp := CRC; for i := 0 to pred( Len ) do begin CRCTemp := AbCrc32Table[ Byte(CrcTemp) xor (BufPtr^) ] xor ((CrcTemp shr 8) and $00FFFFFF); Inc(BufPtr); end; CRC := CRCTemp; end; { -------------------------------------------------------------------------- } function AbUpdateCRC32(CurByte : Byte; CurCrc : LongInt) : LongInt; { Return the updated 32bit CRC } { Normally a good candidate for basm, but Delphi32's code generation couldn't be beat on this one!} begin Result := DWORD(AbCrc32Table[ Byte(CurCrc xor LongInt( CurByte ) ) ] xor ((CurCrc shr 8) and DWORD($00FFFFFF))); end; { -------------------------------------------------------------------------- } function AbCRC32Of( const aValue : RawByteString ) : LongInt; begin Result := -1; AbUpdateCRC(Result, aValue[1], Length(aValue)); Result := not Result; end; { -------------------------------------------------------------------------- } function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; var Temp : WideString; Vol : array[0..11] of WideChar; Root : array[0..3] of WideChar; begin Temp := UTF8Decode(VolName); StrPCopyW(Root, '%:' + AbPathDelim); Root[0] := Drive; if Length(Temp) > 11 then SetLength(Temp, 11); StrPCopyW(Vol, Temp); {$IFDEF MSWINDOWS} if Windows.SetVolumeLabelW(Root, Vol) then Result := 0 else Result := GetLastError; {$ENDIF MSWINDOWS} {$IFDEF UNIX} { Volume labels not supported on Unix } Result := 0; {$ENDIF UNIX} end; { -------------------------------------------------------------------------- } {$IFDEF MSWINDOWS} function AbOffsetFromUTC: LongInt; { local timezone's offset from UTC in seconds (UTC = local + bias) } var TZI: TTimeZoneInformation; begin case GetTimeZoneInformation(TZI) of TIME_ZONE_ID_UNKNOWN: Result := TZI.Bias; TIME_ZONE_ID_DAYLIGHT: Result := TZI.Bias + TZI.DaylightBias; TIME_ZONE_ID_STANDARD: Result := TZI.Bias + TZI.StandardBias else Result := 0 end; Result := Result * SecondsInMinute; end; {$ENDIF} { -------------------------------------------------------------------------- } function AbUnixTimeToLocalDateTime(UnixTime : LongInt) : TDateTime; { convert UTC unix date to Delphi TDateTime in local timezone } {$IFDEF MSWINDOWS} var Hrs, Mins, Secs : Word; TodaysSecs : LongInt; Time: TDateTime; begin UnixTime := UnixTime - AbOffsetFromUTC; TodaysSecs := UnixTime mod SecondsInDay; Hrs := TodaysSecs div SecondsInHour; TodaysSecs := TodaysSecs - (Hrs * SecondsInHour); Mins := TodaysSecs div SecondsInMinute; Secs := TodaysSecs - (Mins * SecondsInMinute); if TryEncodeTime(Hrs, Mins, Secs, 0, Time) then Result := Unix0Date + (UnixTime div SecondsInDay) + Time else Result := 0; {$ENDIF} {$IFDEF UNIX} begin Result := FileDateToDateTime(UnixTime); {$ENDIF} end; { -------------------------------------------------------------------------- } function AbLocalDateTimeToUnixTime(DateTime : TDateTime) : LongInt; { convert local Delphi TDateTime to UTC unix date } {$IFDEF MSWINDOWS} var Hrs, Mins, Secs, MSecs : Word; Dt, Tm : TDateTime; begin Dt := Trunc(DateTime); Tm := DateTime - Dt; if Dt < Unix0Date then Result := 0 else Result := Trunc(Dt - Unix0Date) * SecondsInDay; DecodeTime(Tm, Hrs, Mins, Secs, MSecs); Result := Result + (Hrs * SecondsInHour) + (Mins * SecondsInMinute) + Secs; Result := Result + AbOffsetFromUTC; {$ENDIF} {$IFDEF UNIX} begin Result := DateTimeToFileDate(DateTime); {$ENDIF} end; { -------------------------------------------------------------------------- } function AbDosFileDateToDateTime(FileDate, FileTime : Word) : TDateTime; {$IFDEF MSWINDOWS} var Temp : LongInt; begin LongRec(Temp).Lo := FileTime; LongRec(Temp).Hi := FileDate; Result := FileDateToDateTime(Temp); {$ENDIF MSWINDOWS} {$IFDEF UNIX} var Yr, Mo, Dy : Word; Hr, Mn, S : Word; begin Yr := FileDate shr 9 + 1980; Mo := FileDate shr 5 and 15; if Mo < 1 then Mo := 1; if Mo > 12 then Mo := 12; Dy := FileDate and 31; if Dy < 1 then Dy := 1; if Dy > DaysInAMonth(Yr, Mo) then Dy := DaysInAMonth(Yr, Mo); Hr := FileTime shr 11; if Hr > 23 then Hr := 23; Mn := FileTime shr 5 and 63; if Mn > 59 then Mn := 59; S := FileTime and 31 shl 1; if S > 59 then S := 59; Result := EncodeDate(Yr, Mo, Dy) + EncodeTime(Hr, Mn, S, 0); {$ENDIF UNIX} end; function AbDateTimeToDosFileDate(Value : TDateTime) : LongInt; {$IFDEF MSWINDOWS} begin Result := DateTimeToFileDate(Value); {$ENDIF MSWINDOWS} {$IFDEF UNIX} var Yr, Mo, Dy : Word; Hr, Mn, S, MS: Word; begin DecodeDate(Value, Yr, Mo, Dy); if (Yr < 1980) or (Yr > 2107) then { outside DOS file date year range } Yr := 1980; DecodeTime(Value, Hr, Mn, S, MS); LongRec(Result).Lo := (S shr 1) or (Mn shl 5) or (Hr shl 11); LongRec(Result).Hi := Dy or (Mo shl 5) or (Word(Yr - 1980) shl 9); {$ENDIF UNIX} end; { -------------------------------------------------------------------------- } function AbGetFileTime(const aFileName: string): TDateTime; var Attr: TAbAttrExRec; begin AbFileGetAttrEx(aFileName, Attr); Result := Attr.Time; end; function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; begin Result:= mbFileSetTime(aFileName, DateTimeToFileTime(aValue)); end; { -------------------------------------------------------------------------- } function AbSwapLongEndianness(Value : LongInt): LongInt; { convert BigEndian <-> LittleEndian 32-bit value } type TCastArray = array [0..3] of Byte; var i : Integer; begin for i := 3 downto 0 do TCastArray(Result)[3-i] := TCastArray(Value)[i]; end; { -------------------------------------------------------------------------- } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; begin {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := { default permissions } AB_FPERMISSION_OWNERREAD or AB_FPERMISSION_GROUPREAD or AB_FPERMISSION_OTHERREAD; if (Attr and faReadOnly) = 0 then Result := Result or AB_FPERMISSION_OWNERWRITE; if (Attr and faDirectory) <> 0 then Result := Result or AB_FMODE_DIR or AB_FPERMISSION_OWNEREXECUTE else Result := Result or AB_FMODE_FILE; {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } function AbUnix2DosFileAttributes(Attr: LongInt): LongInt; begin {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := 0; case (Attr and $F000) of AB_FMODE_FILE, AB_FMODE_FILE2: { standard file } Result := 0; AB_FMODE_DIR: { directory } Result := Result or faDirectory; AB_FMODE_FIFO, AB_FMODE_CHARSPECFILE, AB_FMODE_BLOCKSPECFILE, AB_FMODE_FILELINK, AB_FMODE_SOCKET: Result := Result or faSysFile; end; if (Attr and AB_FPERMISSION_OWNERWRITE) <> AB_FPERMISSION_OWNERWRITE then Result := Result or faReadOnly; {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } procedure AbSetFileAttr(const aFileName : string; aAttr: Integer); begin {$IFDEF MSWINDOWS} mbFileSetAttr(aFileName, aAttr); {$ENDIF} {$IF DEFINED(LibcAPI) OR DEFINED(PosixAPI)} chmod(PAnsiChar(AbSysString(aFileName)), aAttr); {$ELSEIF DEFINED(FPCUnixAPI)} mbFileSetAttr(aFileName, aAttr); {$IFEND} end; { -------------------------------------------------------------------------- } function AbFileGetSize(const aFileName : string) : Int64; var SR: TAbAttrExRec; begin if AbFileGetAttrEx(aFileName, SR) then Result := SR.Size else Result := -1; end; { -------------------------------------------------------------------------- } function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; var {$IFDEF MSWINDOWS} FileDate: LongRec; FindData: TWin32FindDataW; LocalFileTime: Windows.TFileTime; {$ENDIF} {$IFDEF FPCUnixAPI} StatBuf: stat; {$ENDIF} {$IFDEF LibcAPI} StatBuf: TStatBuf64; {$ENDIF} {$IFDEF PosixAPI} StatBuf: _stat; {$ENDIF} begin aAttr.Time := 0; aAttr.Size := -1; aAttr.Attr := -1; aAttr.Mode := 0; {$IFDEF MSWINDOWS} Result := GetFileAttributesExW(PWideChar(UTF8Decode(aFileName)), GetFileExInfoStandard, @FindData); if Result then begin if Windows.FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and FileTimeToDosDateTime(LocalFileTime, FileDate.Hi, FileDate.Lo) then aAttr.Time := FileDateToDateTime(Integer(FileDate)); LARGE_INTEGER(aAttr.Size).LowPart := FindData.nFileSizeLow; LARGE_INTEGER(aAttr.Size).HighPart := FindData.nFileSizeHigh; aAttr.Attr := FindData.dwFileAttributes; aAttr.Mode := AbDOS2UnixFileAttributes(FindData.dwFileAttributes); end; {$ENDIF} {$IFDEF UNIX} {$IFDEF FPCUnixAPI} if FollowLinks then Result := (FpStat(UTF8ToSys(aFileName), StatBuf) = 0) else Result := (FpLStat(UTF8ToSys(aFileName), StatBuf) = 0); {$ENDIF} {$IFDEF LibcAPI} // Work around Kylix QC#2761: Stat64, et al., are defined incorrectly Result := (__lxstat64(_STAT_VER, PAnsiChar(aFileName), StatBuf) = 0); {$ENDIF} {$IFDEF PosixAPI} Result := (stat(PAnsiChar(AbSysString(aFileName)), StatBuf) = 0); {$ENDIF} if Result then begin aAttr.Time := FileDateToDateTime(StatBuf.st_mtime); aAttr.Size := StatBuf.st_size; aAttr.Attr := AbUnix2DosFileAttributes(StatBuf.st_mode); aAttr.Mode := StatBuf.st_mode; end; {$ENDIF UNIX} end; const MAX_VOL_LABEL = 16; function AbGetVolumeLabel(Drive : Char) : string; {-Get the volume label for the specified drive.} {$IFDEF MSWINDOWS} var Root : WideString; Flags, MaxLength : DWORD; NameSize : Integer; VolName : WideString; {$ENDIF} begin {$IFDEF MSWINDOWS} NameSize := 0; Root := Drive + ':\'; SetLength(VolName, MAX_VOL_LABEL); Result := ''; if GetVolumeInformationW(PWideChar(Root), PWideChar(VolName), Length(VolName), nil, MaxLength, Flags, nil, NameSize) then Result := Utf16ToUtf8(VolName); {$ELSE} Result := ''; //Stop Gap, spanning support needs to be rethought for Unix {$ENDIF} end; procedure AbSetSpanVolumeLabel(Drive: Char; VolNo : Integer); begin AbWriteVolumeLabel(Format(AB_SPAN_VOL_LABEL, [VolNo]), Drive); end; function AbTestSpanVolumeLabel(Drive: Char; VolNo : Integer): Boolean; var VolLabel, TestLabel : string; begin TestLabel := Format(AB_SPAN_VOL_LABEL, [VolNo]); VolLabel := UpperCase(AbGetVolumeLabel(Drive)); Result := VolLabel = TestLabel; end; { Unicode backwards compatibility functions } {$IFNDEF UNICODE} function CharInSet(C: AnsiChar; CharSet: TSysCharSet): Boolean; begin Result := C in CharSet; end; {$ENDIF} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/ablzmatyp.pas���������������������������������������������0000644�0001750�0000144�00000035304�12613112750�022263� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Koblov <alexx2000@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbLzmaTyp.pas *} {*********************************************************} {* ABBREVIA: TAbLzmaArchive, TAbLzmaItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Lzma files *} {*********************************************************} unit AbLzmaTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; type PAbLzmaHeader = ^TAbLzmaHeader; { File Header } TAbLzmaHeader = packed record { SizeOf(TAbLzmaHeader) = 13 } Properties: array[0..4] of Byte; { LZMA properties } UncompressedSize : Int64; { Uncompressed size } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbLzmaItem = class(TabArchiveItem); TAbLzmaArchiveState = (gsLzma, gsTar); { TAbLzmaArchive } TAbLzmaArchive = class(TAbTarArchive) private FLzmaStream : TStream; { stream for Lzma file} FLzmaItem : TAbArchiveList; { item in lzma (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbLzmaArchiveState; FIsLzmaTar : Boolean; procedure CompressFromStream(aStream: TStream); procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToLzma; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsLzmaTar : Boolean read FIsLzmaTar write FIsLzmaTar; end; function VerifyLzma(Strm : TStream) : TAbArchiveType; implementation uses StrUtils, SysUtils, Math, AbExcept, AbVMStrm, AbBitBkt, ULZMADecoder, ULZMAEncoder, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyLzma(Strm : TStream) : TAbArchiveType; var CurPos : Int64; TarStream: TStream; Hdr : TAbLzmaHeader; UncompressedSize: Int64; DecompStream: TLZMADecoder; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soFromBeginning); try if Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr) then begin TarStream := TMemoryStream.Create; try DecompStream := TLZMADecoder.Create; try if Hdr.UncompressedSize <> -1 then UncompressedSize:= Min(AB_TAR_RECORDSIZE * 4, Hdr.UncompressedSize) else if Strm.Size < AB_TAR_RECORDSIZE * 8 then UncompressedSize:= -1 else begin UncompressedSize:= AB_TAR_RECORDSIZE * 4; end; if DecompStream.SetDecoderProperties(Hdr.Properties) and DecompStream.Code(Strm, TarStream, UncompressedSize) then begin Result := atLzma; { Check for embedded TAR } TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atLzmaTar; end; finally DecompStream.Free; end; finally TarStream.Free; end; end; except on EReadError do Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbLzmaArchive ***************************** } constructor TAbLzmaArchive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsLzma; FLzmaStream := FStream; FLzmaItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SwapToLzma; begin FStream := FLzmaStream; FItemList := FLzmaItem; FState := gsLzma; end; { -------------------------------------------------------------------------- } function TAbLzmaArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var LzmaItem : TAbLzmaItem; FullSourceFileName, FullArchiveFileName: String; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToLzma; LzmaItem := TAbLzmaItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); LzmaItem.FileName := FullArchiveFileName; LzmaItem.DiskFileName := FullSourceFileName; Result := LzmaItem; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbLzmaArchive.Destroy; begin SwapToLzma; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToLzma; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Lzma doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToLzma; { Index ignored as there's only one item in a Lzma } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbLzmaArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsLzmaTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.LoadArchive; var Item: TAbLzmaItem; Abort: Boolean; ItemName: string; Header: TAbLzmaHeader; begin if FLzmaStream.Size = 0 then Exit; if IsLzmaTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToLzma; FStream.Read(Header, SizeOf(Header)); Item := TAbLzmaItem.Create; Item.Action := aaNone; if Header.UncompressedSize <> -1 then Item.UncompressedSize := Header.UncompressedSize; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.tlz', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SaveArchive; var I: Integer; CurItem: TAbLzmaItem; UpdateArchive: Boolean; TempFileName: String; InputFileStream: TStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; UpdateArchive := (FLzmaStream.Size > 0) and (FLzmaStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FLzmaStream); TempFileName := GetTempName(FArchiveName + ExtensionSeparator); { Create new archive with temporary name } FLzmaStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; CompressFromStream(FTarStream); if UpdateArchive then begin FreeAndNil(FLzmaStream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FLzmaStream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToLzma; for I := 0 to Pred(Count) do begin FCurrentItem := ItemList[I]; CurItem := TAbLzmaItem(ItemList[I]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; lzma doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FLzmaStream.Size := 0; if CurItem.Action = aaStreamAdd then begin CompressFromStream(InStream); { Copy/compress entire Instream to FLzmaStream } end else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try CompressFromStream(InputFileStream); { Copy/compress entire Instream to FLzmaStream } finally InputFileStream.Free; end; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToLzma; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.CompressFromStream(aStream: TStream); var Encoder: TLZMAEncoder; begin Encoder := TLZMAEncoder.Create; try Encoder.WriteCoderProperties(FLzmaStream); FLzmaStream.WriteQWord(NToLE(aStream.Size)); Encoder.Code(aStream, FLzmaStream, -1, -1); finally Encoder.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.DecompressToStream(aStream: TStream); var Header: TAbLzmaHeader; Decoder: TLZMADecoder; begin FLzmaStream.Seek(0, soFromBeginning); if FLzmaStream.Read(Header, SizeOf(Header)) = SizeOf(Header) then begin Decoder := TLZMADecoder.Create; try if Decoder.SetDecoderProperties(Header.Properties) and Decoder.Code(FLzmaStream, aStream, Header.UncompressedSize) then begin Exit; { Success } end; finally Decoder.Free; end; end; raise EAbUnhandledType.Create; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.TestItemAt(Index: Integer); var LzmaType: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsLzmaTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { Note Index ignored as there's only one item in a GZip } LzmaType := VerifyLzma(FLzmaStream); if not (LzmaType in [atLzma, atLzmaTar]) then raise EAbGzipInvalid.Create; // TODO: Add lzma-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbLzmaArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/doublecmd.diff��������������������������������������������0000644�0001750�0000144�00000273074�12630665222�022361� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: AbArcTyp.pas =================================================================== --- AbArcTyp.pas (revision 512) +++ AbArcTyp.pas (working copy) @@ -70,7 +70,14 @@ function GetIsEncrypted : Boolean; virtual; function GetLastModFileDate : Word; virtual; function GetLastModFileTime : Word; virtual; + { This depends on in what format the attributes are stored in the archive, + to which system they refer (MS-DOS, Unix, etc.) and what system + we're running on (compile time). } function GetNativeFileAttributes : LongInt; virtual; + { This depends on in what format the date/time is stored in the archive + (Unix, MS-DOS, ...) and what system we're running on (compile time). + Returns MS-DOS local time on Windows, Unix UTC time on Unix. } + function GetNativeLastModFileTime : Longint; virtual; function GetStoredPath : string; function GetUncompressedSize : Int64; virtual; procedure SetCompressedSize(const Value : Int64); virtual; @@ -126,6 +133,8 @@ write SetLastModFileTime; property NativeFileAttributes : LongInt read GetNativeFileAttributes; + property NativeLastModFileTime : Longint + read GetNativeLastModFileTime; property StoredPath : string read GetStoredPath; property Tagged : Boolean @@ -316,6 +325,10 @@ procedure GetFreshenTarget(Item : TAbArchiveItem); function GetItemCount : Integer; procedure MakeLogEntry(const FN: string; LT : TAbLogType); + procedure MakeFullNames(const SourceFileName: String; + const ArchiveDirectory: String; + out FullSourceFileName: String; + out FullArchiveFileName: String); procedure ReplaceAt(Index : Integer); procedure SaveIfNeeded(aItem : TAbArchiveItem); procedure SetBaseDirectory(Value : string); @@ -323,8 +336,19 @@ procedure SetLogging(Value : Boolean); protected {abstract methods} + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; + {SourceFileName - full or relative path to a file/dir on some file system + If full path, BaseDirectory is used to determine relative path} + {ArchiveDirectory - path to a directory in the archive the file/dir will be in} + {Example: + FBaseDirectory = /dir + SourceFileName = /dir/subdir/file + ArchiveDirectory = files/storage (or files/storage/) + -> name in archive = files/storage/subdir/file} + virtual; abstract; overload; function CreateItem(const FileSpec : string): TAbArchiveItem; - virtual; abstract; + overload; procedure ExtractItemAt(Index : Integer; const UseName : string); virtual; abstract; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); @@ -384,6 +408,7 @@ override; procedure Add(aItem : TAbArchiveItem); virtual; + procedure AddEntry(const Path : String; const ArchiveDirectory : String); procedure AddFiles(const FileMask : string; SearchAttr : Integer); procedure AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); @@ -565,7 +590,9 @@ AbExcept, AbDfBase, AbConst, - AbResString; + AbResString, + DCOSUtils, + DCClassesUtf8; { TAbArchiveItem implementation ============================================ } @@ -647,6 +674,12 @@ {$ENDIF} end; { -------------------------------------------------------------------------- } +function TAbArchiveItem.GetNativeLastModFileTime : Longint; +begin + LongRec(Result).Hi := LastModFileDate; + LongRec(Result).Lo := LastModFileTime; +end; +{ -------------------------------------------------------------------------- } function TAbArchiveItem.GetStoredPath : string; begin Result := ExtractFilePath(DiskFileName); @@ -973,7 +1006,7 @@ ExtractOptions := []; FStatus := asIdle; FOnProgress := DoProgress; - BaseDirectory := ExtractFilePath(ParamStr(0)); + // BaseDirectory := ExtractFilePath(ParamStr(0)); end; { -------------------------------------------------------------------------- } constructor TAbArchive.Create(const FileName : string; Mode : Word); @@ -980,7 +1013,7 @@ {create an archive by opening a filestream on filename with the given mode} begin FOwnsStream := True; - CreateFromStream(TFileStream.Create(FileName, Mode), FileName); + CreateFromStream(TFileStreamEx.Create(FileName, Mode), FileName); FMode := Mode; end; { -------------------------------------------------------------------------- } @@ -1032,6 +1065,19 @@ end; end; { -------------------------------------------------------------------------- } +procedure TAbArchive.AddEntry(const Path : String; const ArchiveDirectory : String); +var + Item : TAbArchiveItem; + FullSourceFileName, FullArchiveFileName : String; +begin + MakeFullNames(Path, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); + + if (FullSourceFileName <> FArchiveName) then begin + Item := CreateItem(Path, ArchiveDirectory); + Add(Item); + end; +end; +{ -------------------------------------------------------------------------- } procedure TAbArchive.AddFiles(const FileMask : string; SearchAttr : Integer); {Add files to the archive where the disk filespec matches} begin @@ -1196,7 +1242,7 @@ UseName := AbAddBackSlash(BaseDirectory) + UseName; Path := ExtractFileDir(UseName); - if (Path <> '') and not DirectoryExists(Path) then + if (Path <> '') and not mbDirectoryExists(Path) then if (eoCreateDirs in ExtractOptions) then AbCreateDirectory(Path) else @@ -1203,7 +1249,7 @@ raise EAbNoSuchDirectory.Create; Result := True; - if not Item.IsDirectory and FileExists(UseName) then + if not Item.IsDirectory and mbFileExists(UseName) then DoConfirmOverwrite(UseName, Result); end; { -------------------------------------------------------------------------- } @@ -1560,11 +1606,12 @@ begin CheckValid; Index := FindItem(aItem); - if Index <> -1 then begin + if Index <> -1 then + begin + FreshenAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; - FreshenAt(Index); end; end; { -------------------------------------------------------------------------- } @@ -1625,7 +1672,7 @@ { -------------------------------------------------------------------------- } function TAbArchive.FreshenRequired(Item : TAbArchiveItem) : Boolean; var - FS : TFileStream; + FS : TFileStreamEx; DateTime : LongInt; FileTime : Word; FileDate : Word; @@ -1636,8 +1683,8 @@ if BaseDirectory <> '' then ChDir(BaseDirectory); try - FS := TFileStream.Create(Item.DiskFileName, - fmOpenRead or fmShareDenyWrite); + FS := TFileStreamEx.Create(Item.DiskFileName, + fmOpenRead or fmShareDenyWrite); try DateTime := FileGetDate(FS.Handle); FileTime := LongRec(DateTime).Lo; @@ -1761,6 +1808,45 @@ end; end; { -------------------------------------------------------------------------- } +procedure TAbArchive.MakeFullNames(const SourceFileName: String; + const ArchiveDirectory: String; + out FullSourceFileName: String; + out FullArchiveFileName: String); +var + PathType : TAbPathType; + RelativeSourceFileName: String; +begin + PathType := AbGetPathType(SourceFileName); + case PathType of + ptNone, ptRelative : + begin + if FBaseDirectory <> '' then + FullSourceFileName := AbAddBackSlash(FBaseDirectory) + SourceFileName + else + FullSourceFileName := SourceFileName; + + RelativeSourceFileName := SourceFileName; + end; + ptAbsolute : + begin + FullSourceFileName := SourceFileName; + + if FBaseDirectory <> '' then + RelativeSourceFileName := ExtractRelativepath(AbAddBackSlash(FBaseDirectory), + SourceFileName) + else + RelativeSourceFileName := ExtractFileName(SourceFileName); + end; + end; + + if ArchiveDirectory <> '' then + FullArchiveFileName := AbAddBackSlash(ArchiveDirectory) + RelativeSourceFileName + else + FullArchiveFileName := RelativeSourceFileName; + + FullArchiveFileName := FixName(FullArchiveFileName); +end; +{ -------------------------------------------------------------------------- } procedure TAbArchive.Move(aItem : TAbArchiveItem; const NewStoredPath : string); var Confirm : Boolean; @@ -1807,11 +1893,12 @@ begin CheckValid; Index := FindItem(aItem); - if Index <> -1 then begin + if Index <> -1 then + begin + ReplaceAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; - ReplaceAt(Index); end; end; { -------------------------------------------------------------------------- } @@ -1841,7 +1928,7 @@ begin if Status = asInvalid then Exit; - if (not FIsDirty) and (Count > 0) then + if not FIsDirty then Exit; DoConfirmSave(Confirm); @@ -1865,7 +1952,7 @@ if Value[Length(Value)] = AbPathDelim then if (Length(Value) > 1) and (Value[Length(Value) - 1] <> ':') then System.Delete(Value, Length(Value), 1); - if (Length(Value) = 0) or DirectoryExists(Value) then + if (Length(Value) = 0) or mbDirectoryExists(Value) then FBaseDirectory := Value else raise EAbNoSuchDirectory.Create; @@ -1930,6 +2017,13 @@ raise EAbSpanningNotSupported.Create; end; { -------------------------------------------------------------------------- } +function TAbArchive.CreateItem(const FileSpec : string): TAbArchiveItem; +begin + // This function is used by Abbrevia. We don't use it but a dummy + // definition is needed for the code to compile successfully. + raise Exception.Create(''); +end; +{ -------------------------------------------------------------------------- } { TAbExtraField implementation ============================================= } procedure TAbExtraField.Assign(aSource : TAbExtraField); @@ -1973,7 +2067,7 @@ Len, Offset : Integer; begin Len := SizeOf(TAbExtraSubField) + aSubField.Len; - Offset := PtrInt(aSubField) - PtrInt(Pointer(FBuffer)); + Offset := Pointer(aSubField) - Pointer(FBuffer); if Offset + Len < Length(FBuffer) then Move(FBuffer[Offset + Len], aSubField^, Length(FBuffer) - Offset - Len); SetLength(FBuffer, Length(FBuffer) - Len); @@ -2001,9 +2095,9 @@ end else begin BytesLeft := Length(FBuffer) - - Integer(PtrInt(aCurField) - PtrInt(Pointer(FBuffer))) - + (Pointer(aCurField) - Pointer(FBuffer)) - SizeOf(TAbExtraSubField) - aCurField.Len; - aCurField := Pointer(PtrInt(aCurField) + aCurField.Len + SizeOf(TAbExtraSubField)); + Inc(Pointer(aCurField), aCurField.Len + SizeOf(TAbExtraSubField)); end; Result := (BytesLeft >= SizeOf(TAbExtraSubField)); if Result and (BytesLeft < SizeOf(TAbExtraSubField) + aCurField.Len) then Index: AbBitBkt.pas =================================================================== --- AbBitBkt.pas (revision 512) +++ AbBitBkt.pas (working copy) @@ -47,7 +47,7 @@ FBufPosn : longint; FPosn : Int64; FSize : Int64; - FTail : longint; + FTail : Int64; protected public constructor Create(aBufSize : cardinal); @@ -108,8 +108,8 @@ {--------} function TAbBitBucketStream.Read(var Buffer; Count : Longint) : Longint; var - Chunk2Size : longint; - Chunk1Size : longint; + Chunk2Size : Int64; + Chunk1Size : Int64; OutBuffer : PByte; begin OutBuffer := @Buffer; @@ -146,7 +146,7 @@ end; if (Chunk2Size > 0) then begin {we've wrapped} - Move(FBuffer[0], PByte(PtrInt(OutBuffer) + PtrInt(Chunk1Size))^, Chunk2Size); + Move(FBuffer[0], (OutBuffer + Chunk1Size)^, Chunk2Size); FBufPosn := Chunk2Size; inc(FPosn, Chunk2Size); end; @@ -155,8 +155,8 @@ {--------} function TAbBitBucketStream.Write(const Buffer; Count : Longint) : Longint; var - Chunk2Size : longint; - Chunk1Size : longint; + Chunk2Size : Int64; + Chunk1Size : Int64; InBuffer : PByte; Overage : longint; begin @@ -186,7 +186,7 @@ {if the second chunk size is not zero, write the second chunk; note that we have wrapped} if (Chunk2Size > 0) then begin - Move(PByte(PtrInt(InBuffer) + PtrInt(Chunk1Size))^, FBuffer[0], Chunk2Size); + Move((InBuffer + Chunk1Size)^, FBuffer[0], Chunk2Size); FTail := Chunk2Size; end; {the stream size and position have changed} Index: AbBrowse.pas =================================================================== --- AbBrowse.pas (revision 512) +++ AbBrowse.pas (working copy) @@ -220,13 +220,17 @@ uses SysUtils, AbExcept, -{$IFDEF MSWINDOWS} +{$IF DEFINED(ExtractCabSupport)} AbCabTyp, {$ENDIF} AbZipTyp, AbTarTyp, AbGzTyp, - AbBzip2Typ; + AbBzip2Typ, + AbLzmaTyp, + AbXzTyp, + DCOSUtils, + DCClassesUtf8; { TAbBaseBrowser implementation ======================================= } @@ -515,7 +519,7 @@ function AbDetermineArcType(const FN : string; AssertType : TAbArchiveType) : TAbArchiveType; var Ext : string; - FS : TFileStream; + FS : TStream; begin Result := AssertType; if Result = atUnknown then begin @@ -522,59 +526,77 @@ { Guess archive type based on it's extension } Ext := UpperCase(ExtractFileExt(FN)); if (Ext = '.ZIP') or (Ext = '.JAR') then - Result := atZip; - if (Ext = '.EXE') then - Result := atSelfExtZip; - if (Ext = '.TAR') then - Result := atTar; - if (Ext = '.GZ') then - Result := atGzip; - if (Ext = '.TGZ') then - Result := atGzippedTar; - if (Ext = '.CAB') then - Result := atCab; - if (Ext = '.BZ2') then - Result := atBzip2; - if (Ext = '.TBZ') then - Result := atBzippedTar; + Result := atZip + else if (Ext = '.EXE') then + Result := atSelfExtZip + else if (Ext = '.TAR') then + Result := atTar + else if (Ext = '.GZ') then + Result := atGzip + else if (Ext = '.TGZ') then + Result := atGzippedTar + else if (Ext = '.CAB') then + Result := atCab + else if (Ext = '.BZ2') then + Result := atBzip2 + else if (Ext = '.TBZ') then + Result := atBzippedTar + else if (Ext = '.XZ') then + Result := atXz + else if (Ext = '.TXZ') then + Result := atXzippedTar + else if (Ext = '.LZMA') then + Result := atLzma + else if (Ext = '.TLZ') then + Result := atLzmaTar; end; - {$IFNDEF MSWINDOWS} + {$IF NOT DEFINED(ExtractCabSupport)} if Result = atCab then Result := atUnknown; {$ENDIF} - if FileExists(FN) and (AbFileGetSize(FN) > 0) then begin + if mbFileExists(FN) and (AbFileGetSize(FN) > 0) then begin { If the file doesn't exist (or is empty) presume to make one, otherwise guess or verify the contents } - FS := TFileStream.Create(FN, fmOpenRead or fmShareDenyNone); - try - if Result = atUnknown then - Result := AbDetermineArcType(FS) - else begin - case Result of - atZip : begin - Result := VerifyZip(FS); + try + FS := TFileStreamEx.Create(FN, fmOpenRead or fmShareDenyNone); + try + if Result <> atUnknown then begin + case Result of + atZip : begin + Result := VerifyZip(FS); + end; + atSelfExtZip : begin + Result := VerifySelfExtracting(FS); + end; + atTar : begin + Result := VerifyTar(FS); + end; + atGzip, atGzippedTar: begin + Result := VerifyGzip(FS); + end; + {$IF DEFINED(ExtractCabSupport)} + atCab : begin + Result := VerifyCab(FS); + end; + {$ENDIF} + atBzip2, atBzippedTar: begin + Result := VerifyBzip2(FS); + end; + atXz, atXzippedTar: begin + Result := VerifyXz(FS); + end; + atLzma, atLzmaTar: begin + Result := VerifyLzma(FS); + end; end; - atSelfExtZip : begin - Result := VerifySelfExtracting(FS); - end; - atTar : begin - Result := VerifyTar(FS); - end; - atGzip, atGzippedTar: begin - Result := VerifyGzip(FS); - end; - {$IFDEF MSWINDOWS} - atCab : begin - Result := VerifyCab(FS); - end; - {$ENDIF} - atBzip2, atBzippedTar: begin - Result := VerifyBzip2(FS); - end; end; + if Result = atUnknown then + Result := AbDetermineArcType(FS) + finally + FS.Free; end; - finally - FS.Free; + except + // Skip end; end; end; @@ -583,15 +605,16 @@ begin { VerifyZip returns true for self-extracting zips too, so test those first } Result := VerifySelfExtracting(aStream); + { VerifyZip returns true for example when ZIP file is stored in a TAR archive, so test it first } if Result = atUnknown then + Result := VerifyTar(aStream); + if Result = atUnknown then Result := VerifyZip(aStream); if Result = atUnknown then - Result := VerifyTar(aStream); - if Result = atUnknown then Result := VerifyGzip(aStream); if Result = atUnknown then Result := VerifyBzip2(aStream); - {$IFDEF MSWINDOWS} + {$IF DEFINED(ExtractCabSupport)} if Result = atUnknown then Result := VerifyCab(aStream); {$ENDIF} Index: AbBzip2.pas =================================================================== --- AbBzip2.pas (revision 512) +++ AbBzip2.pas (working copy) @@ -149,6 +149,8 @@ large chunk of data from the decompression stream in a single call.} TBZDecompressionStream = class(TCustomBZip2Stream) + private + FReadState: LongInt; public constructor Create(Source: TStream); destructor Destroy; override; @@ -391,7 +393,7 @@ {$ENDIF} const - libbz2 = {$IF DEFINED(MSWINDOWS)}'libbz2.dll' + libbz2 = {$IF DEFINED(MSWINDOWS)}'bz2.dll' {$ELSEIF DEFINED(DARWIN)}'libbz2.dylib' {$ELSE}'libbz2.so.1'{$IFEND}; @@ -527,8 +529,7 @@ P := OutBuf; Inc(OutBytes, 256); ReallocMem(OutBuf, OutBytes); - strm.next_out := PByte(PtrInt(OutBuf) - + (PtrInt(strm.next_out) - PtrInt(P))); + strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := 256; end; finally @@ -571,7 +572,7 @@ P := OutBuf; Inc(OutBytes, BufInc); ReallocMem(OutBuf, OutBytes); - strm.next_out := PByte(PtrInt(OutBuf) + (PtrInt(strm.next_out) - PtrInt(P))); + strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := BufInc; end; finally @@ -717,8 +718,13 @@ if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_out > 0) do begin - if FBZRec.avail_in = 0 then + if FReadState = BZ_STREAM_END then begin + Result := Count - FBZRec.avail_out; + Exit; + end + else if FBZRec.avail_in = 0 then + begin FBZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); if FBZRec.avail_in = 0 then begin @@ -728,7 +734,7 @@ FBZRec.next_in := @FBuffer[0]; FStrmPos := FStrm.Position; end; - CCheck(BZ2_bzDecompress(FBZRec)); + FReadState := DCheck(BZ2_bzDecompress(FBZRec)); Progress(Self); end; Result := Count; Index: AbBzip2Typ.pas =================================================================== --- AbBzip2Typ.pas (revision 512) +++ AbBzip2Typ.pas (working copy) @@ -86,7 +86,8 @@ protected { Inherited Abstract functions } - function CreateItem(const FileSpec : string): TAbArchiveItem; override; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; @@ -118,7 +119,7 @@ Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, - AbBzip2, AbExcept, AbVMStrm, AbBitBkt; + AbBzip2, AbExcept, AbVMStrm, AbBitBkt, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbBzip2Header) : Boolean; @@ -131,8 +132,9 @@ function VerifyBzip2(Strm : TStream) : TAbArchiveType; var Hdr : TAbBzip2Header; - CurPos : int64; + CurPos, DecompSize : Int64; DecompStream, TarStream: TStream; + Buffer: array[0..Pred(AB_TAR_RECORDSIZE * 4)] of Byte; begin Result := atUnknown; @@ -148,7 +150,8 @@ try TarStream := TMemoryStream.Create; try - TarStream.CopyFrom(DecompStream, 512 * 2); + DecompSize:= DecompStream.Read(Buffer, SizeOf(Buffer)); + TarStream.Write(Buffer, DecompSize); TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atBzippedTar; @@ -193,20 +196,29 @@ FState := gsBzip2; end; { -------------------------------------------------------------------------- } -function TAbBzip2Archive.CreateItem(const FileSpec: string): TAbArchiveItem; +function TAbBzip2Archive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; +var + Bz2Item : TAbBzip2Item; + FullSourceFileName, FullArchiveFileName: String; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; - Result := inherited CreateItem(FileSpec); + Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToBzip2; - Result := TAbBzip2Item.Create; + Bz2Item := TAbBzip2Item.Create; try - Result.DiskFileName := ExpandFileName(FileSpec); - Result.FileName := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + Bz2Item.FileName := FullArchiveFileName; + Bz2Item.DiskFileName := FullSourceFileName; + + Result := Bz2Item; except - Result.Free; + Result := nil; raise; end; end; @@ -223,7 +235,7 @@ procedure TAbBzip2Archive.ExtractItemAt(Index: Integer; const NewName: string); var - OutStream : TFileStream; + OutStream : TStream; begin if IsBzippedTar and TarAutoHandle then begin SwapToTar; @@ -231,7 +243,7 @@ end else begin SwapToBzip2; - OutStream := TFileStream.Create(NewName, fmCreate or fmShareDenyNone); + OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); @@ -242,12 +254,12 @@ except on E : EAbUserAbort do begin FStatus := asInvalid; - if FileExists(NewName) then - DeleteFile(NewName); + if mbFileExists(NewName) then + mbDeleteFile(NewName); raise; end else begin - if FileExists(NewName) then - DeleteFile(NewName); + if mbFileExists(NewName) then + mbDeleteFile(NewName); raise; end; end; @@ -312,6 +324,8 @@ CompStream: TStream; i: Integer; CurItem: TAbBzip2Item; + UpdateArchive: Boolean; + TempFileName: String; InputFileStream: TStream; begin if IsBzippedTar and TarAutoHandle then @@ -318,8 +332,15 @@ begin SwapToTar; inherited SaveArchive; + UpdateArchive := (FBzip2Stream.Size > 0) and (FBzip2Stream is TFileStreamEx); + if UpdateArchive then + begin + FreeAndNil(FBzip2Stream); + TempFileName := GetTempName(FArchiveName + ExtensionSeparator); + { Create new archive with temporary name } + FBzip2Stream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); + end; FTarStream.Position := 0; - FBzip2Stream.Size := 0; CompStream := TBZCompressionStream.Create(bs9, FBzip2Stream); try CompStream.CopyFrom(FTarStream, 0); @@ -326,6 +347,15 @@ finally CompStream.Free; end; + if UpdateArchive then + begin + FreeAndNil(FBzip2Stream); + { Replace original by new archive } + if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then + RaiseLastOSError; + { Open new archive } + FBzip2Stream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); + end; end else begin { Things we know: There is only one file per archive.} @@ -347,7 +377,7 @@ if CurItem.Action = aaStreamAdd then CompStream.CopyFrom(InStream, 0){ Copy/compress entire Instream to FBzip2Stream } else begin - InputFileStream := TFileStream.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); + InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try CompStream.CopyFrom(InputFileStream, 0);{ Copy/compress entire Instream to FBzip2Stream } finally Index: AbDefine.inc =================================================================== --- AbDefine.inc (revision 512) +++ AbDefine.inc (working copy) @@ -271,6 +271,7 @@ {$ENDIF} {$IFDEF UnzipZipxSupport} + {$DEFINE UnzipXzSupport} {$DEFINE UnzipBzip2Support} {$DEFINE UnzipLzmaSupport} {$DEFINE UnzipPPMdSupport} @@ -279,7 +280,6 @@ { Linking .obj files isn't currently supported in Kylix or FPC } {$IF DEFINED(FPC) OR NOT DEFINED(MSWINDOWS)} - {$UNDEF UnzipLzmaSupport} {$UNDEF UnzipPPMdSupport} {$UNDEF UnzipWavPackSupport} {$IFEND} Index: AbDfEnc.pas =================================================================== --- AbDfEnc.pas (revision 512) +++ AbDfEnc.pas (working copy) @@ -889,6 +889,7 @@ {$ENDIF} raise EAbDeflateError.Create(E.Message); end; + else raise; end; finally Helper.Free; Index: AbDfInW.pas =================================================================== --- AbDfInW.pas (revision 512) +++ AbDfInW.pas (working copy) @@ -261,8 +261,7 @@ HashInx := ((HashInx shl c_HashShift) xor longint(CurPos[2])) and c_HashMask; - HashChains^[longint(CurPos) and FWinMask] := - HashHeads^[HashInx]; + HashChains^[PtrUInt(CurPos) and FWinMask] := HashHeads^[HashInx]; HashHeads^[HashInx] := CurPos; inc(CurPos); end; @@ -367,7 +366,6 @@ {$ENDIF} {$ENDIF} type - PLongint = ^longint; PWord = ^word; var MaxLen : longint; @@ -406,7 +404,7 @@ {update the chain itself: set the entry for this position equal to the previous string position} - FHashChains^[longint(CurPos) and FWinMask] := PrevStrPos; + FHashChains^[PtrUInt(CurPos) and FWinMask] := PrevStrPos; {calculate the maximum match we could do at this position} MaxMatch := (FLookAheadEnd - CurPos); @@ -602,7 +600,7 @@ Break; {otherwise move onto the next position} - PrevStrPos := FHashChains^[longint(PrevStrPos) and FWinMask]; + PrevStrPos := FHashChains^[PtrUInt(PrevStrPos) and FWinMask]; end; {$ENDIF} @@ -700,13 +698,11 @@ end; {--------} procedure TAbDfInputWindow.iwSlide; -type - PLongint = ^longint; var i : integer; - ByteCount : integer; - Buffer : longint; - ListItem : PLongint; + ByteCount : PtrInt; + Buffer : PAnsiChar; + ListItem : PPointer; begin {move current valid data back to the start of the buffer} ByteCount := FLookAheadEnd - FStart; @@ -719,22 +715,22 @@ dec(FLookAheadEnd, ByteCount); {patch up the hash table: the head pointers} - Buffer := longint(FBuffer); - ListItem := PLongint(@FHashHeads^[0]); + Buffer := FBuffer; + ListItem := @FHashHeads^[0]; for i := 0 to pred(c_HashCount) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then - ListItem^ := 0; - inc(PAnsiChar(ListItem), sizeof(pointer)); + ListItem^ := nil; + inc(ListItem); end; {..the chain pointers} - ListItem := PLongint(@FHashChains^[0]); + ListItem := @FHashChains^[0]; for i := 0 to pred(FWinSize) do begin dec(ListItem^, ByteCount); if (ListItem^ < Buffer) then - ListItem^ := 0; - inc(PAnsiChar(ListItem), sizeof(pointer)); + ListItem^ := nil; + inc(ListItem); end; {now read some more data from the stream} Index: AbDfStrm.pas =================================================================== --- AbDfStrm.pas (revision 512) +++ AbDfStrm.pas (working copy) @@ -230,7 +230,8 @@ {save the on progress handler} if Assigned(aOnProgress) and (aStreamSize > 0) then begin FOnProgress := aOnProgress; - FStreamSize := aStreamSize; + //FStreamSize := aStreamSize; + FStreamSize := aStream.Size - aStream.Position; end; end; {--------} Index: AbGzTyp.pas =================================================================== --- AbGzTyp.pas (revision 512) +++ AbGzTyp.pas (working copy) @@ -140,6 +140,7 @@ function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; + function GetNativeLastModFileTime: Longint; override; procedure SetExternalFileAttributes( Value : LongWord ); override; procedure SetFileName(const Value : string); override; @@ -242,7 +243,8 @@ procedure SwapToTar; protected - function CreateItem(const FileSpec : string): TAbArchiveItem; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; @@ -291,7 +293,8 @@ Windows, {$ENDIF} SysUtils, - AbBitBkt, AbCharset, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, AbVMStrm; + AbBitBkt, AbDfBase, AbDfDec, AbDfEnc, AbExcept, AbResString, + AbVMStrm, DCOSUtils, DCClassesUtf8, DCConvertEncoding; const { Header Signature Values} @@ -399,8 +402,8 @@ PartialTarData := TMemoryStream.Create; GHlp.SeekToItemData; Hlpr := TAbDeflateHelper.Create; - Hlpr.PartialSize := 512; - PartialTarData.SetSize(512 * 2); + Hlpr.PartialSize := AB_TAR_RECORDSIZE * 4; + PartialTarData.SetSize(Hlpr.PartialSize); Inflate(Strm, PartialTarData, Hlpr); {set to beginning of extracted data} @@ -708,6 +711,20 @@ Result := AbUnixTimeToLocalDateTime(FGZHeader.ModTime); end; +function TAbGzipItem.GetNativeLastModFileTime: Longint; +{$IFDEF MSWINDOWS} +var + DateTime: TDateTime; +{$ENDIF} +begin + Result := FGZHeader.ModTime; + +{$IFDEF MSWINDOWS} + DateTime := AbUnixTimeToLocalDateTime(Result); + Result := AbDateTimeToDosFileDate(DateTime); +{$ENDIF} +end; + procedure TAbGzipItem.LoadGzHeaderFromStream(AStream: TStream); var LenW : Word; @@ -731,7 +748,7 @@ { Get Filename, if any } if HasFileName then begin FRawFileName := ReadCStringInStream(AStream); - FFileName := AbRawBytesToString(FRawFileName) + FFileName := CeRawToUtf8(FRawFileName) end else FFileName := 'unknown'; @@ -804,7 +821,7 @@ procedure TAbGzipItem.SetFileName(const Value: string); begin FFileName := Value; - FRawFileName := AbStringToUnixBytes(Value); + FRawFileName := CeUtf8ToSys(Value); if Value <> '' then FGzHeader.Flags := FGzHeader.Flags or AB_GZ_FLAG_FNAME else @@ -886,25 +903,30 @@ FState := gsGzip; end; -function TAbGzipArchive.CreateItem(const FileSpec: string): TAbArchiveItem; +function TAbGzipArchive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; var GzItem : TAbGzipItem; + FullSourceFileName, FullArchiveFileName: String; begin if IsGZippedTar and TarAutoHandle then begin SwapToTar; - Result := inherited CreateItem(FileSpec); + Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToGzip; GzItem := TAbGzipItem.Create; try - GzItem.CompressedSize := 0; - GzItem.CRC32 := 0; - GzItem.DiskFileName := ExpandFileName(FileSpec); - GzItem.FileName := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + GzItem.FileName := FullArchiveFileName; + GzItem.DiskFileName := FullSourceFileName; + Result := GzItem; except Result := nil; + raise; end; end; end; @@ -921,7 +943,7 @@ procedure TAbGzipArchive.ExtractItemAt(Index: Integer; const UseName: string); var - OutStream : TFileStream; + OutStream : TStream; CurItem : TAbGzipItem; begin if IsGZippedTar and TarAutoHandle then begin @@ -934,7 +956,7 @@ CurItem := TAbGzipItem(ItemList[Index]); - OutStream := TFileStream.Create(UseName, fmCreate or fmShareDenyNone); + OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); try try {OutStream} ExtractItemToStreamAt(Index, OutStream); @@ -946,12 +968,12 @@ except on E : EAbUserAbort do begin FStatus := asInvalid; - if FileExists(UseName) then - DeleteFile(UseName); + if mbFileExists(UseName) then + mbDeleteFile(UseName); raise; end else begin - if FileExists(UseName) then - DeleteFile(UseName); + if mbFileExists(UseName) then + mbDeleteFile(UseName); raise; end; end; @@ -1089,7 +1111,6 @@ i : Integer; NewStream : TAbVirtualMemoryStream; UncompressedStream : TStream; - SaveDir : string; CurItem : TAbGzipItem; begin {prepare for the try..finally} @@ -1111,19 +1132,22 @@ if IsGzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; - if FGZItem.Count = 0 then begin - CurItem := TAbGzipItem.Create; - FGZItem.Add(CurItem); + if FTarStream.Size > 0 then + begin + if FGZItem.Count = 0 then begin + CurItem := TAbGzipItem.Create; + FGZItem.Add(CurItem); + end; + CurItem := FGZItem[0] as TAbGzipItem; + CurItem.Action := aaNone; + CurItem.LastModTimeAsDateTime := Now; + CurItem.SaveGzHeaderToStream(NewStream); + FTarStream.Position := 0; + OutGzHelp.WriteArchiveItem(FTarStream); + CurItem.CRC32 := OutGzHelp.CRC; + CurItem.UncompressedSize := OutGzHelp.FileSize; + OutGzHelp.WriteArchiveTail; end; - CurItem := FGZItem[0] as TAbGzipItem; - CurItem.Action := aaNone; - CurItem.LastModTimeAsDateTime := Now; - CurItem.SaveGzHeaderToStream(NewStream); - FTarStream.Position := 0; - OutGzHelp.WriteArchiveItem(FTarStream); - CurItem.CRC32 := OutGzHelp.CRC; - CurItem.UncompressedSize := OutGzHelp.FileSize; - OutGzHelp.WriteArchiveTail; end else begin SwapToGzip; @@ -1154,17 +1178,9 @@ OutGzHelp.WriteArchiveTail; end else begin - { it's coming from a file } - GetDir(0, SaveDir); - try {SaveDir} - if (BaseDirectory <> '') then - ChDir(BaseDirectory); - CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); - UncompressedStream := TFileStream.Create(CurItem.DiskFileName, + CurItem.LastModTimeAsDateTime := AbGetFileTime(CurItem.DiskFileName); + UncompressedStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} try CurItem.UncompressedSize := UncompressedStream.Size; @@ -1197,7 +1213,7 @@ { need new stream to write } FreeAndNil(FStream); FGZStream := nil; - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FGZStream := FStream; FStream.CopyFrom(NewStream, NewStream.Size); end; Index: AbSelfEx.pas =================================================================== --- AbSelfEx.pas (revision 512) +++ AbSelfEx.pas (working copy) @@ -49,9 +49,9 @@ FStubExe : string; FZipFile : string; FSelfExe : string; - FStubStream : TFileStream; - FZipStream : TFileStream; - FSelfStream : TFileStream; + FStubStream : TStream; + FZipStream : TStream; + FSelfStream : TStream; FOnGetStubExe : TAbGetFileEvent; FOnGetZipFile : TAbGetFileEvent; @@ -88,7 +88,7 @@ {$IFDEF LibcAPI} Libc, {$ENDIF} - AbExcept, AbZipTyp; + AbExcept, AbZipTyp, DCOSUtils, DCClassesUtf8; { -------------------------------------------------------------------------- } function TAbMakeSelfExe.Execute : Boolean; @@ -100,20 +100,20 @@ DoGetStubExe(Abort); if Abort then raise EAbUserAbort.Create; - if not FileExists(FStubExe) then + if not mbFileExists(FStubExe) then raise EAbFileNotFound.Create; if (FZipFile = '') then DoGetZipFile(Abort); if Abort then raise EAbUserAbort.Create; - if not FileExists(FZipFile) then + if not mbFileExists(FZipFile) then raise EAbFileNotFound.Create; - FStubStream := TFileStream.Create(FStubExe, fmOpenRead or fmShareDenyWrite); - FZipStream := TFileStream.Create(FZipFile, fmOpenRead or fmShareDenyWrite); + FStubStream := TFileStreamEx.Create(FStubExe, fmOpenRead or fmShareDenyWrite); + FZipStream := TFileStreamEx.Create(FZipFile, fmOpenRead or fmShareDenyWrite); if (FSelfExe = '') then FSelfExe := ChangeFileExt(FZipFile, '.exe'); - FSelfStream := TFileStream.Create(FSelfExe, fmCreate or fmShareExclusive); + FSelfStream := TFileStreamEx.Create(FSelfExe, fmCreate or fmShareExclusive); try MakeSelfExtracting(FStubStream, FZipStream, FSelfStream); Result := True; Index: AbSpanSt.pas =================================================================== --- AbSpanSt.pas (revision 512) +++ AbSpanSt.pas (working copy) @@ -142,7 +142,7 @@ {$IFDEF MSWINDOWS} Windows, {$ENDIF} - Math, RTLConsts, SysUtils, AbUtils, AbExcept; + Math, RTLConsts, SysUtils, AbUtils, AbExcept, DCOSUtils, DCClassesUtf8; {============================================================================} @@ -181,7 +181,7 @@ begin inherited Create(ArchiveName); FCurrentImage := CurrentImage; - FIsSplit := FileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); + FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(ArchiveName); FLastImage := CurrentImage; FStream := Stream; end; @@ -218,7 +218,7 @@ end else raise EAbUserAbort.Create; - FStream := TFileStream.Create(ImageName, fmOpenRead or fmShareDenyWrite); + FStream := TFileStreamEx.Create(ImageName, fmOpenRead or fmShareDenyWrite); end; {------------------------------------------------------------------------------} function TAbSpanReadStream.Read(var Buffer; Count: Longint): Longint; @@ -273,7 +273,7 @@ procedure TAbSpanReadStream.SetOnRequestImage(Value: TAbRequestImageEvent); begin FOnRequestImage := Value; - FIsSplit := FileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); + FIsSplit := mbFileExists(GetImageName(1)) or not AbDriveIsRemovable(FArchiveName); end; {============================================================================} @@ -302,7 +302,7 @@ FreeAndNil(FStream); Inc(FCurrentImage); if FThreshold > 0 then - RenameFile(FArchiveName, GetImageName(FCurrentImage)) + mbRenameFile(FArchiveName, GetImageName(FCurrentImage)) else begin if Assigned(FOnRequestBlankDisk) then begin Abort := False; @@ -316,7 +316,7 @@ raise EAbUserAbort.Create; AbSetSpanVolumeLabel(AbDrive(FArchiveName), FCurrentImage); end; - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FImageSize := 0; end; {------------------------------------------------------------------------------} Index: AbTarTyp.pas =================================================================== --- AbTarTyp.pas (revision 512) +++ AbTarTyp.pas (working copy) @@ -320,6 +320,7 @@ function GetLastModFileTime : Word; override; function GetLastModTimeAsDateTime: TDateTime; override; function GetNativeFileAttributes : LongInt; override; + function GetNativeLastModFileTime: Longint; override; function GetUncompressedSize : Int64; override; procedure SetCompressedSize(const Value : Int64); override; { Extended Headers } @@ -418,7 +419,8 @@ FArchReadOnly : Boolean; FArchFormat: TAbTarHeaderFormat; protected - function CreateItem(const FileSpec : string): TAbArchiveItem; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const UseName : string); override; @@ -448,6 +450,11 @@ write PutItem; default; end; + procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; + out Permissions: LongWord; out LinkFlag: AnsiChar); + procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; + out UnixAttrs: LongWord); + function VerifyTar(Strm : TStream) : TAbArchiveType; @@ -457,7 +464,8 @@ {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF MSWINDOWS} - Math, RTLConsts, SysUtils, AbCharset, AbVMStrm, AbExcept; + Math, RTLConsts, SysUtils, AbVMStrm, AbExcept, + DCOSUtils, DCClassesUtf8, DCConvertEncoding; { ****************** Helper functions Not from Classes Above ***************** } function OctalToInt(const Oct : PAnsiChar; aLen : integer): Int64; @@ -566,7 +574,58 @@ not (AB_TAR_RECORDSIZE - 1); end; +procedure UnixAttrsToTarAttrs(const UnixAttrs: LongWord; + out Permissions: LongWord; out LinkFlag: AnsiChar); +begin + case (UnixAttrs and $F000) of + AB_FMODE_SOCKET: + ; + AB_FMODE_FILELINK: + LinkFlag := AB_TAR_LF_SYMLINK; + AB_FMODE_FILE2: + LinkFlag := AB_TAR_LF_NORMAL; + AB_FMODE_BLOCKSPECFILE: + LinkFlag := AB_TAR_LF_BLK; + AB_FMODE_DIR: + LinkFlag := AB_TAR_LF_DIR; + AB_FMODE_CHARSPECFILE: + LinkFlag := AB_TAR_LF_CHR; + AB_FMODE_FIFO: + LinkFlag := AB_TAR_LF_FIFO; + AB_FMODE_FILE: + LinkFlag := AB_TAR_LF_NORMAL; + else + LinkFlag := AB_TAR_LF_OLDNORMAL; + end; + Permissions := (UnixAttrs and $0FFF); +end; +{ -------------------------------------------------------------------------- } +procedure TarAttrsToUnixAttrs(const Permissions: LongWord; const LinkFlag: AnsiChar; + out UnixAttrs: LongWord); +begin + case LinkFlag of + AB_TAR_LF_OLDNORMAL: + UnixAttrs := AB_FMODE_FILE; + AB_TAR_LF_NORMAL: + UnixAttrs := AB_FMODE_FILE2; + AB_TAR_LF_SYMLINK: + UnixAttrs := AB_FMODE_FILELINK; + AB_TAR_LF_BLK: + UnixAttrs := AB_FMODE_BLOCKSPECFILE; + AB_TAR_LF_DIR: + UnixAttrs := AB_FMODE_DIR; + AB_TAR_LF_CHR: + UnixAttrs := AB_FMODE_CHARSPECFILE; + AB_TAR_LF_FIFO: + UnixAttrs := AB_FMODE_FIFO; + else + UnixAttrs := AB_FMODE_FILE; + end; + + UnixAttrs := UnixAttrs or (Permissions and $0FFF); +end; + { ****************************** TAbTarItem ********************************** } constructor TAbTarItem.Create; begin @@ -632,7 +691,7 @@ function TAbTarItem.GetExternalFileAttributes: LongWord; begin - Result := FTarItem.Mode; + TarAttrsToUnixAttrs(FTarItem.Mode, FTarItem.LinkFlag, Result); end; function TAbTarItem.GetFileName: string; @@ -678,6 +737,19 @@ Result := AbUnixTimeToLocalDateTime(FTarItem.ModTime); end; +function TAbTarItem.GetNativeLastModFileTime: Longint; +{$IFDEF MSWINDOWS} +var + DateTime: TDateTime; +{$ENDIF} +begin + Result := Self.ModTime; + +{$IFDEF MSWINDOWS} + DateTime := AbUnixTimeToLocalDateTime(Result); + Result := AbDateTimeToDosFileDate(DateTime); +{$ENDIF} +end; function TAbTarItem.GetLinkName: string; begin Result := FTarItem.LinkName; @@ -819,7 +891,7 @@ RawFileName := PTarHeader.Name; end; { End not FoundName } - FTarItem.Name := AbRawBytesToString(RawFileName); + FTarItem.Name := CeRawToUtf8(RawFileName); end; { Extract the file name from the headers } @@ -876,7 +948,7 @@ if not FoundName then RawLinkName := PHeader.LinkName; - FTarItem.LinkName := AbRawBytesToString(RawLinkName); + FTarItem.LinkName := CeRawToUtf8(RawLinkName); end; { Return True if CheckSum passes out. } @@ -1017,8 +1089,8 @@ begin ParseTarHeaders; { Update FTarItem values } FFileName := FTarItem.Name; {FTarHeader.Name;} - FDiskFileName := FileName; - AbUnfixName(FDiskFileName); +// FDiskFileName := FileName; +// AbUnfixName(FDiskFileName); end; Action := aaNone; Tagged := False; @@ -1142,14 +1214,21 @@ var S : AnsiString; I: Integer; + Permissions: LongWord; + ALinkFlag: AnsiChar; begin if FTarItem.ItemReadOnly then { Read Only - Do Not Save } Exit; - FTarItem.Mode := Value; - S := PadString(IntToOctal(Value), SizeOf(Arr8)); + + UnixAttrsToTarAttrs(Value, Permissions, ALinkFlag); + + FTarItem.Mode := Permissions; + S := PadString(IntToOctal(Permissions), SizeOf(Arr8)); for I := 0 to FTarHeaderList.Count - 1 do if TAbTarHeaderType(FTarHeaderTypeList.Items[I]) in [FILE_HEADER, META_DATA_HEADER] then Move(S[1], PAbTarHeaderRec(FTarHeaderList.Items[I]).Mode, Length(S)); + + Self.LinkFlag := ALinkFlag; // also updates headers FTarItem.Dirty := True; end; @@ -1297,9 +1376,9 @@ { Finally we need to stuff the file type Header. } { Note: Value.length > AB_TAR_NAMESIZE(100) } if LinkFlag = AB_TAR_LF_LONGNAME then - Move(Value[1], PHeader.Name, AB_TAR_NAMESIZE) + Move(Value[1], PTarHeader.Name, AB_TAR_NAMESIZE) else - Move(Value[1], PHeader.LinkName, AB_TAR_NAMESIZE); + Move(Value[1], PTarHeader.LinkName, AB_TAR_NAMESIZE); end; procedure TAbTarItem.SetFileName(const Value: string); @@ -1333,7 +1412,7 @@ OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers Add headers to length of new Name Length, update name in file header, update name fields } - RawFileName := AbStringToUnixBytes(Value); + RawFileName := CeUtf8ToSys(Value); { In all cases zero out the name fields in the File Header. } if Length(RawFileName) > AB_TAR_NAMESIZE then begin { Must be null terminated except at 100 char length } { Look for long name meta-data headers already in the archive. } @@ -1431,8 +1510,8 @@ { Update the inherited file names. } FFileName := FTarItem.Name; - DiskFileName := FFileName; - AbUnfixName(FDiskFileName); +//DiskFileName := FFileName; +//AbUnfixName(FDiskFileName); // Don't override DiskFileName FTarItem.Dirty := True; end; @@ -1527,7 +1606,7 @@ if old was Long, OLD_GNU & GNU: Add N Headers for name, Update name in MD header, update name field in File Headers, min 3 headers STAR & PAX: And should not yet get here.} - RawLinkName := AbStringToUnixBytes(Value); + RawLinkName := CeUtf8ToSys(Value); if Length(RawLinkName) > AB_TAR_NAMESIZE then { Must be null terminated except at 100 char length } begin { Look for long name meta-data headers already in the archive. } @@ -1838,16 +1917,19 @@ FArchFormat := V7_FORMAT; // Default for new archives end; -function TAbTarArchive.CreateItem(const FileSpec: string): TAbArchiveItem; +function TAbTarArchive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; var Item : TAbTarItem; - S : String; I: Integer; + FullSourceFileName, FullArchiveFileName: String; begin if FArchReadOnly then raise EAbTarBadOp.Create; { Create Item Unsupported in this Archive } - S := FixName(FileSpec); + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + Item := TAbTarItem.Create; try // HeaderFormat = (UNKNOWN_FORMAT, V7_FORMAT, OLDGNU_FORMAT, GNU_FORMAT, USTAR_FORMAT, STAR_FORMAT, POSIX_FORMAT); @@ -1863,7 +1945,7 @@ Item.LinkFlag := AB_TAR_LF_NORMAL; Item.Magic := AB_TAR_MAGIC_VAL+AB_TAR_MAGIC_VER; end - else if (FArchFormat = V7_FORMAT) and (Length(S) > 100) then + else if (FArchFormat = V7_FORMAT) and (Length(FullArchiveFileName) > 100) then begin { Switch the rep over to GNU so it can have long file names. } FArchFormat := OLDGNU_FORMAT; Item.ArchiveFormat := OLDGNU_FORMAT; @@ -1882,9 +1964,10 @@ { Most others are initialized in the .Create } Item.CRC32 := 0; + { Note this can raise exceptions for file name lengths. } - Item.FileName := FixName(FileSpec); - Item.DiskFileName := ExpandFileName(FileSpec); + Item.FileName := FullArchiveFileName; + Item.DiskFileName := FullSourceFileName; Item.Action := aaNone; finally Result := Item; @@ -1894,7 +1977,7 @@ procedure TAbTarArchive.ExtractItemAt(Index: Integer; const UseName: string); var - OutStream : TFileStream; + OutStream : TStream; CurItem : TAbTarItem; begin { Check the index is not out of range. } @@ -1914,18 +1997,26 @@ if CurItem.IsDirectory then AbCreateDirectory(UseName) else begin - OutStream := TFileStream.Create(UseName, fmCreate or fmShareDenyNone); - try - try {OutStream} - ExtractItemToStreamAt(Index, OutStream); - finally {OutStream} - OutStream.Free; - end; {OutStream} - except - if ExceptObject is EAbUserAbort then - FStatus := asInvalid; - DeleteFile(UseName); - raise; + case (CurItem.Mode and $F000) of + AB_FMODE_FILE, AB_FMODE_FILE2: begin + OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyNone); + try + try {OutStream} + ExtractItemToStreamAt(Index, OutStream); + finally {OutStream} + OutStream.Free; + end; {OutStream} + except + if ExceptObject is EAbUserAbort then + FStatus := asInvalid; + mbDeleteFile(UseName); + raise; + end; + end; + + AB_FMODE_FILELINK: begin + AbCreateSymlink(CurItem.LinkName, UseName); + end; end; end; AbSetFileTime(UseName, CurItem.LastModTimeAsDateTime); @@ -2060,7 +2151,7 @@ AbStripDrive( lValue ); { check for a leading slash } - if lValue[1] = AbPathDelim then + if (Length(lValue) > 0) and (lValue[1] = AbPathDelim) then System.Delete( lValue, 1, 1 ); if soStripPath in StoreOptions then @@ -2097,7 +2188,6 @@ i : Integer; NewStream : TAbVirtualMemoryStream; TempStream : TStream; - SaveDir : string; CurItem : TAbTarItem; AttrEx : TAbAttrExRec; begin @@ -2145,24 +2235,27 @@ aaAdd, aaFreshen, aaReplace: begin try - { it's coming from a file } - GetDir(0, SaveDir); - try {SaveDir} - if (BaseDirectory <> '') then - ChDir(BaseDirectory); - { update metadata } - AbFileGetAttrEx(CurItem.DiskFileName, AttrEx); - CurItem.ExternalFileAttributes := AttrEx.Mode; - CurItem.LastModTimeAsDateTime := AttrEx.Time; - { TODO: uid, gid, uname, gname should be added here } - { TODO: Add support for different types of files here } - if (AttrEx.Mode and AB_FMODE_DIR) <> 0 then begin - CurItem.LinkFlag := AB_TAR_LF_DIR; + { update metadata } + if not AbFileGetAttrEx(CurItem.DiskFileName, AttrEx, False) then + Raise EAbFileNotFound.Create; + CurItem.ExternalFileAttributes := AttrEx.Mode; + CurItem.LastModTimeAsDateTime := AttrEx.Time; + { TODO: uid, gid, uname, gname should be added here } + { TODO: Add support for different types of files here } + case (AttrEx.Mode and $F000) of + AB_FMODE_DIR: begin CurItem.UncompressedSize := 0; CurItem.SaveTarHeaderToStream(NewStream); - end - else begin - TempStream := TFileStream.Create(CurItem.DiskFileName, + end; + + AB_FMODE_FILELINK: begin + CurItem.UncompressedSize := 0; + CurItem.LinkName := AbReadSymlink(CurItem.DiskFileName); + CurItem.SaveTarHeaderToStream(NewStream); + end; + + AB_FMODE_FILE, AB_FMODE_FILE2: begin + TempStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite ); try { TempStream } CurItem.UncompressedSize := TempStream.Size; @@ -2173,9 +2266,13 @@ TempStream.Free; end; { TempStream } end; - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} + + else begin + CurItem.UncompressedSize := AttrEx.Size; + CurItem.SaveTarHeaderToStream(NewStream); + end; + end; + except ItemList[i].Action := aaDelete; DoProcessItemFailure(ItemList[i], ptAdd, ecFileOpenError, 0); @@ -2200,7 +2297,7 @@ else begin { need new stream to write } FreeAndNil(FStream); - FStream := TFileStream.Create(FArchiveName, fmCreate or fmShareDenyWrite); + FStream := TFileStreamEx.Create(FArchiveName, fmCreate or fmShareDenyWrite); FStream.CopyFrom(NewStream, NewStream.Size); end; Index: AbUnzPrc.pas =================================================================== --- AbUnzPrc.pas (revision 512) +++ AbUnzPrc.pas (working copy) @@ -136,7 +136,7 @@ AbBzip2, {$ENDIF} {$IFDEF UnzipLzmaSupport} - AbLzma, + ULZMADecoder, {$ENDIF} {$IFDEF UnzipPPMdSupport} AbPPMd, @@ -144,6 +144,9 @@ {$IFDEF UnzipWavPackSupport} AbWavPack, {$ENDIF} + {$IFDEF UnzipXzSupport} + AbXz, + {$ENDIF} AbBitBkt, AbConst, AbDfBase, @@ -153,7 +156,8 @@ AbSpanSt, AbSWStm, AbUnzOutStm, - AbUtils; + AbUtils, + DCClassesUtf8; { -------------------------------------------------------------------------- } procedure AbReverseBits(var W : Word); @@ -944,11 +948,30 @@ InStream.ReadBuffer(Header, SizeOf(Header)); SetLength(Properties, Header.PropSize); InStream.ReadBuffer(Properties[0], Header.PropSize); - LzmaDecodeStream(PByte(Properties), Header.PropSize, InStream, OutStream, - Item.UncompressedSize); + with TLZMADecoder.Create do + try + SetDecoderProperties(Properties); + Code(InStream, OutStream, Item.UncompressedSize); + finally + Free; + end; end; {$ENDIF} { -------------------------------------------------------------------------- } +{$IFDEF UnzipXzSupport} +procedure DoExtractXz(Archive : TAbZipArchive; Item : TAbZipItem; InStream, OutStream : TStream); +var + LzmaDecompression: TLzmaDecompression; +begin + LzmaDecompression := TLzmaDecompression.Create(InStream, OutStream); + try + LzmaDecompression.Code(Item.UncompressedSize); + finally + LzmaDecompression.Free; + end; +end; +{$ENDIF} +{ -------------------------------------------------------------------------- } function ExtractPrep(ZipArchive: TAbZipArchive; Item: TAbZipItem): TStream; var LFH : TAbZipLocalFileHeader; @@ -1062,6 +1085,11 @@ DecompressWavPack(aInStream, OutStream); end; {$ENDIF} + {$IFDEF UnzipXzSupport} + cmXz: begin + DoExtractXz(aZipArchive, aItem, aInStream, OutStream); + end; + {$ENDIF} cmShrunk..cmImploded: begin DoLegacyUnzip(aZipArchive, aItem, aInStream, OutStream); end; @@ -1111,7 +1139,7 @@ else begin InStream := ExtractPrep(ZipArchive, Item); try - OutStream := TFileStream.Create(UseName, fmCreate or fmShareDenyWrite); + OutStream := TFileStreamEx.Create(UseName, fmCreate or fmShareDenyWrite); try try {OutStream} DoExtract(ZipArchive, Item, InStream, OutStream); Index: AbUtils.pas =================================================================== --- AbUtils.pas (revision 512) +++ AbUtils.pas (working copy) @@ -60,10 +60,10 @@ {$ENDIF} {$IFDEF UNIX} DateUtils, + DCClassesUtf8, {$ENDIF} SysUtils, - Classes, - AbCharset; + Classes; type @@ -94,7 +94,8 @@ type TAbArchiveType = (atUnknown, atZip, atSpannedZip, atSelfExtZip, - atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar); + atTar, atGzip, atGzippedTar, atCab, atBzip2, atBzippedTar, + atXz, atXzippedTar, atLzma, atLzmaTar); {$IF NOT DECLARED(DWORD)} @@ -114,6 +115,12 @@ {$ENDIF} {$IFEND} +{ Unicode backwards compatibility types } +{$IF NOT DECLARED(RawByteString)} +type + RawByteString = AnsiString; +{$IFEND} + { System-encoded SBCS string (formerly AnsiString) } type AbSysString = {$IFDEF Posix}UTF8String{$ELSE}AnsiString{$ENDIF}; @@ -198,8 +205,13 @@ because if you have a path x:\dir, and request x:\dir\sub1\sub2, (/dir and /dir/sub1/sub2 on Unix) it fails.} + function AbCreateSymlink( const LinksPointsTo, LinkName : String ): Boolean; + function AbCreateTempFile(const Dir : string) : string; + function AbReadSymlink( const LinkFile : String ): String; + {Reads the name that a link points to.} + function AbGetTempDirectory : string; {-Return the system temp directory} @@ -294,7 +306,7 @@ Mode: {$IFDEF UNIX}mode_t{$ELSE}Cardinal{$ENDIF}; end; - function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec) : Boolean; + function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; function AbSwapLongEndianness(Value : LongInt): LongInt; @@ -363,9 +375,14 @@ uses StrUtils, + LazUTF8, AbConst, - AbExcept; + AbExcept, + DCOSUtils, + DCStrUtils, + DCDateTimeUtils; +(* {$IF DEFINED(FPCUnixAPI)} function mktemp(template: PAnsiChar): PAnsiChar; cdecl; external clib name 'mktemp'; @@ -387,6 +404,7 @@ function nl_langinfo(__item: nl_item): PAnsiChar; cdecl; external clib name 'nl_langinfo'; {$IFEND} +*) {===platform independent routines for platform dependent stuff=======} function ExtractShortName(const SR : TSearchRec) : string; @@ -410,16 +428,16 @@ function AbCopyFile(const Source, Destination: string; FailIfExists: Boolean): Boolean; {$IFDEF UNIX} var - DesStream, SrcStream: TFileStream; + DesStream, SrcStream: TFileStreamEx; {$ENDIF} begin {$IFDEF UNIX} Result := False; - if not FailIfExists or not FileExists(Destination) then + if not FailIfExists or not mbFileExists(Destination) then try - SrcStream := TFileStream.Create(Source, fmOpenRead or fmShareDenyWrite); + SrcStream := TFileStreamEx.Create(Source, fmOpenRead or fmShareDenyWrite); try - DesStream := TFileStream.Create(Destination, fmCreate); + DesStream := TFileStreamEx.Create(Destination, fmCreate); try DesStream.CopyFrom(SrcStream, 0); Result := True; @@ -434,7 +452,7 @@ end; {$ENDIF UNIX} {$IFDEF MSWINDOWS} - Result := CopyFile(PChar(Source), PChar(Destination), FailIfExists); + Result := CopyFileW(PWideChar(UTF8Decode(Source)), PWideChar(UTF8Decode(Destination)), FailIfExists); {$ENDIF MSWINDOWS} end; { -------------------------------------------------------------------------- } @@ -447,7 +465,7 @@ i : Integer; TempPath : string; begin - if DirectoryExists( Path ) then + if mbDirectoryExists( Path ) then Exit; {see how much of the path currently exists} if Pos( '\\', Path ) > 0 then @@ -463,57 +481,66 @@ {get a temp path to try: drive:\path1} TempPath := Copy( Path, 1, i ); {if it doesn't exist, create it} - if not DirectoryExists( TempPath ) then - MkDir( TempPath ); + if not mbDirectoryExists( TempPath ) then + if mbCreateDir( TempPath ) = False then + Exit; inc( iStartSlash ); until ( Length( TempPath ) = Length( Path ) ); end; + +function AbCreateSymlink(const LinksPointsTo, LinkName: String): Boolean; +begin +{$IF DEFINED(MSWINDOWS)} + // TODO: Implement using uNTFSLinks. + Result := False; +{$ELSEIF DEFINED(FPCUnixAPI)} + Result := (fpsymlink(PChar(UTF8ToSys(LinksPointsTo)),PChar(UTF8ToSys(LinkName)))=0); +{$ELSE} + Result := False; +{$ENDIF} +end; + { -------------------------------------------------------------------------- } function AbCreateTempFile(const Dir : string) : string; begin Result := AbGetTempFile(Dir, True); end; + +function AbReadSymlink(const LinkFile: String): String; +begin +{$IF DEFINED(MSWINDOWS)} + // TODO: Implement using uNTFSLinks. + Result := ''; +{$ELSEIF DEFINED(FPCUnixAPI)} + Result := SysToUTF8(fpReadlink(UTF8ToSys(LinkFile))); +{$ELSE} + Result := ''; +{$ENDIF} +end; + { -------------------------------------------------------------------------- } function AbGetTempDirectory : string; begin -{$IFDEF MSWiNDOWS} - SetLength(Result, MAX_PATH); - SetLength(Result, GetTempPath(Length(Result), PChar(Result))); -{$ENDIF} -{$IFDEF UNIX} - Result := '/tmp/'; -{$ENDIF} + Result:= SysToUTF8(GetTempDir); end; { -------------------------------------------------------------------------- } function AbGetTempFile(const Dir : string; CreateIt : Boolean) : string; var - TempPath : string; -{$IFDEF MSWINDOWS} - FileNameZ : array [0..259] of char; -{$ENDIF} -{$IFDEF UNIX} - hFile: Integer; - FileName: AbSysString; -{$ENDIF} + hFile: System.THandle; + TempPath : String; begin - if DirectoryExists(Dir) then - TempPath := Dir + if mbDirectoryExists(Dir) then + TempPath := IncludeTrailingPathDelimiter(Dir) else TempPath := AbGetTempDirectory; -{$IFDEF MSWINDOWS} - GetTempFileName(PChar(TempPath), 'VMS', Word(not CreateIt), FileNameZ); - Result := string(FileNameZ); -{$ENDIF} -{$IFDEF UNIX} - FileName := AbSysString(TempPath) + 'VMSXXXXXX'; - mktemp(PAnsiChar(AbSysString(FileName))); - Result := string(FileName); + + Result := GetTempName(TempPath + 'VMS'); + if CreateIt then begin - hFile := FileCreate(Result); - if hFile <> -1 then + hFile := mbFileCreate(Result); + if hFile <> feInvalidHandle then FileClose(hFile); end; -{$ENDIF} end; { -------------------------------------------------------------------------- } function AbDrive(const ArchiveName : string) : Char; @@ -560,8 +587,8 @@ var FreeAvailable, TotalSpace: Int64; begin - if GetDiskFreeSpaceEx(PChar(ExtractFilePath(ExpandFileName(ArchiveName))), - FreeAvailable, TotalSpace, nil) then + if GetDiskFreeSpaceExW(PWideChar(UTF8Decode(ExtractFilePath(ExpandFileName(ArchiveName)))), + FreeAvailable, TotalSpace, nil) then Result := FreeAvailable else Result := -1; @@ -574,7 +601,7 @@ if statfs(PAnsiChar(ExtractFilePath(ArchiveName)), FStats) = 0 then Result := Int64(FStats.f_bAvail) * Int64(FStats.f_bsize) {$ELSEIF DEFINED(FPCUnixAPI)} - if fpStatFS(PAnsiChar(ExtractFilePath(ArchiveName)), @FStats) = 0 then + if fpStatFS(PAnsiChar(UTF8ToSys(ExtractFilePath(ArchiveName))), @FStats) = 0 then Result := Int64(FStats.bAvail) * Int64(FStats.bsize) {$ELSEIF DEFINED(PosixAPI)} if statvfs(PAnsiChar(AbSysString(ExtractFilePath(ArchiveName))), FStats) = 0 then @@ -591,8 +618,8 @@ DirMatch : Boolean; MaskDir : string; begin - FileName := UpperCase( FileName ); - FileMask := UpperCase( FileMask ); +//FileName := UpperCase( FileName ); +//FileMask := UpperCase( FileMask ); MaskDir := ExtractFilePath( FileMask ); if MaskDir = '' then DirMatch := True @@ -614,12 +641,12 @@ Found := FindFirst( FileMask, SearchAttr, SR ); if Found = 0 then begin try - NameMask := UpperCase(ExtractFileName(FileMask)); + NameMask := ExtractFileName(FileMask); while Found = 0 do begin NewFile := ExtractFilePath( FileMask ) + SR.Name; if (SR.Name <> AbThisDir) and (SR.Name <> AbParentDir) and - AbPatternMatch(UpperCase(SR.Name), 1, NameMask, 1) then + AbPatternMatch(SR.Name, 1, NameMask, 1) then if (SR.Attr and faDirectory) <> 0 then FileList.Add( NewFile + PathDelim ) else @@ -1002,18 +1029,18 @@ function AbWriteVolumeLabel(const VolName : string; Drive : Char) : Cardinal; var - Temp : string; - Vol : array[0..11] of Char; - Root : array[0..3] of Char; + Temp : WideString; + Vol : array[0..11] of WideChar; + Root : array[0..3] of WideChar; begin - Temp := VolName; - StrCopy(Root, '%:' + AbPathDelim); + Temp := UTF8Decode(VolName); + StrPCopyW(Root, '%:' + AbPathDelim); Root[0] := Drive; if Length(Temp) > 11 then SetLength(Temp, 11); - StrPCopy(Vol, Temp); + StrPCopyW(Vol, Temp); {$IFDEF MSWINDOWS} - if Windows.SetVolumeLabel(Root, Vol) then + if Windows.SetVolumeLabelW(Root, Vol) then Result := 0 else Result := GetLastError; {$ENDIF MSWINDOWS} @@ -1166,12 +1193,7 @@ function AbSetFileTime(const aFileName: string; aValue: TDateTime): Boolean; begin - {$IFDEF MSWINDOWS} - Result := FileSetDate(aFileName, AbDateTimeToDosFileDate(aValue)) = 0; - {$ENDIF} - {$IFDEF UNIX} - Result := FileSetDate(aFileName, AbLocalDateTimeToUnixTime(aValue)) = 0; - {$ENDIF} + Result:= mbFileSetTime(aFileName, DateTimeToFileTime(aValue)); end; { -------------------------------------------------------------------------- } @@ -1188,7 +1210,8 @@ { -------------------------------------------------------------------------- } function AbDOS2UnixFileAttributes(Attr: LongInt): LongInt; begin - {$WARN SYMBOL_PLATFORM OFF} + {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} + {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := { default permissions } AB_FPERMISSION_OWNERREAD or AB_FPERMISSION_GROUPREAD or @@ -1201,12 +1224,14 @@ Result := Result or AB_FMODE_DIR or AB_FPERMISSION_OWNEREXECUTE else Result := Result or AB_FMODE_FILE; - {$WARN SYMBOL_PLATFORM ON} + {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} + {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } function AbUnix2DosFileAttributes(Attr: LongInt): LongInt; begin - {$WARN SYMBOL_PLATFORM OFF} + {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} + {$ELSE} {$WARN SYMBOL_PLATFORM OFF} {$ENDIF} Result := 0; case (Attr and $F000) of AB_FMODE_FILE, AB_FMODE_FILE2: { standard file } @@ -1225,21 +1250,20 @@ if (Attr and AB_FPERMISSION_OWNERWRITE) <> AB_FPERMISSION_OWNERWRITE then Result := Result or faReadOnly; - {$WARN SYMBOL_PLATFORM ON} + {$IFDEF LINUX} {$IF NOT ((FPC_VERSION = 2) and (FPC_RELEASE = 6) and (FPC_PATCH = 0))} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} + {$ELSE} {$WARN SYMBOL_PLATFORM ON} {$ENDIF} end; { -------------------------------------------------------------------------- } procedure AbSetFileAttr(const aFileName : string; aAttr: Integer); begin - {$WARN SYMBOL_PLATFORM OFF} {$IFDEF MSWINDOWS} - FileSetAttr(aFileName, aAttr); + mbFileSetAttr(aFileName, aAttr); {$ENDIF} {$IF DEFINED(LibcAPI) OR DEFINED(PosixAPI)} chmod(PAnsiChar(AbSysString(aFileName)), aAttr); {$ELSEIF DEFINED(FPCUnixAPI)} - fpchmod(aFileName, aAttr); + mbFileSetAttr(aFileName, aAttr); {$IFEND} - {$WARN SYMBOL_PLATFORM ON} end; { -------------------------------------------------------------------------- } function AbFileGetSize(const aFileName : string) : Int64; @@ -1252,12 +1276,12 @@ Result := -1; end; { -------------------------------------------------------------------------- } -function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec) : Boolean; +function AbFileGetAttrEx(const aFileName: string; out aAttr: TAbAttrExRec; FollowLinks: Boolean = True) : Boolean; var {$IFDEF MSWINDOWS} FileDate: LongRec; - FindData: TWin32FindData; - LocalFileTime: TFileTime; + FindData: TWin32FindDataW; + LocalFileTime: Windows.TFileTime; {$ENDIF} {$IFDEF FPCUnixAPI} StatBuf: stat; @@ -1274,9 +1298,9 @@ aAttr.Attr := -1; aAttr.Mode := 0; {$IFDEF MSWINDOWS} - Result := GetFileAttributesEx(PChar(aFileName), GetFileExInfoStandard, @FindData); + Result := GetFileAttributesExW(PWideChar(UTF8Decode(aFileName)), GetFileExInfoStandard, @FindData); if Result then begin - if FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and + if Windows.FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime) and FileTimeToDosDateTime(LocalFileTime, FileDate.Hi, FileDate.Lo) then aAttr.Time := FileDateToDateTime(Integer(FileDate)); LARGE_INTEGER(aAttr.Size).LowPart := FindData.nFileSizeLow; @@ -1287,7 +1311,10 @@ {$ENDIF} {$IFDEF UNIX} {$IFDEF FPCUnixAPI} - Result := (FpStat(aFileName, StatBuf) = 0); + if FollowLinks then + Result := (FpStat(UTF8ToSys(aFileName), StatBuf) = 0) + else + Result := (FpLStat(UTF8ToSys(aFileName), StatBuf) = 0); {$ENDIF} {$IFDEF LibcAPI} // Work around Kylix QC#2761: Stat64, et al., are defined incorrectly @@ -1313,10 +1340,10 @@ {-Get the volume label for the specified drive.} {$IFDEF MSWINDOWS} var - Root : string; + Root : WideString; Flags, MaxLength : DWORD; NameSize : Integer; - VolName : string; + VolName : WideString; {$ENDIF} begin {$IFDEF MSWINDOWS} @@ -1326,10 +1353,10 @@ Result := ''; - if GetVolumeInformation(PChar(Root), PChar(VolName), Length(VolName), + if GetVolumeInformationW(PWideChar(Root), PWideChar(VolName), Length(VolName), nil, MaxLength, Flags, nil, NameSize) then - Result := VolName; + Result := Utf16ToUtf8(VolName); {$ELSE} Result := ''; //Stop Gap, spanning support needs to be rethought for Unix {$ENDIF} Index: AbVMStrm.pas =================================================================== --- AbVMStrm.pas (revision 512) +++ AbVMStrm.pas (working copy) @@ -109,7 +109,8 @@ {$ENDIF} SysUtils, AbExcept, - AbUtils; + AbUtils, + DCOSUtils; const LastLRUValue = $7FFFFFFF; @@ -429,10 +430,10 @@ begin if (vmsSwapHandle = 0) then begin vmsSwapFileName := AbCreateTempFile(vmsSwapFileDir); - vmsSwapHandle := FileOpen(vmsSwapFileName, fmOpenReadWrite); + vmsSwapHandle := mbFileOpen(vmsSwapFileName, fmOpenReadWrite); if (vmsSwapHandle <= 0) then begin vmsSwapHandle := 0; - DeleteFile(vmsSwapFileName); + mbDeleteFile(vmsSwapFileName); raise EAbVMSErrorOpenSwap.Create( vmsSwapFileName ); end; vmsSwapFileSize := 0; @@ -443,7 +444,7 @@ begin if (vmsSwapHandle <> 0) then begin FileClose(vmsSwapHandle); - DeleteFile(vmsSwapFileName); + mbDeleteFile(vmsSwapFileName); vmsSwapHandle := 0; end; end; Index: AbZBrows.pas =================================================================== --- AbZBrows.pas (revision 512) +++ AbZBrows.pas (working copy) @@ -129,7 +129,7 @@ implementation uses - SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils; + SysUtils, AbBzip2Typ, AbExcept, AbGzTyp, AbTarTyp, AbUtils, DCOSUtils; { TAbCustomZipBrowser implementation ======================================= } @@ -205,7 +205,7 @@ FArchive := nil; if FileName <> '' then begin - if FileExists(FileName) then begin { open it } + if mbFileExists(FileName) then begin { open it } ArcType := ArchiveType; if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); Index: AbZipper.pas =================================================================== --- AbZipper.pas (revision 512) +++ AbZipper.pas (working copy) @@ -173,7 +173,8 @@ implementation uses - SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc; + SysUtils, AbUtils, AbTarTyp, AbGzTyp, AbBzip2Typ, AbExcept, AbZipPrc, + AbXzTyp, AbLzmaTyp, DCOSUtils; { -------------------------------------------------------------------------- } constructor TAbCustomZipper.Create( AOwner : TComponent ); @@ -399,7 +400,7 @@ ArcType := ArchiveType; if (FileName <> '') then - if FileExists(FileName) then begin { open it } + if mbFileExists(FileName) then begin { open it } if not ForceType then ArcType := AbDetermineArcType(FileName, atUnknown); @@ -411,12 +412,12 @@ end; atTar : begin - FArchive := TAbTarArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbTarArchive.Create(FileName, fmOpenRead or fmShareDenyNone); inherited InitArchive; end; atGZip : begin - FArchive := TAbGzipArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; @@ -423,7 +424,7 @@ end; atGZippedTar : begin - FArchive := TAbGzipArchive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; @@ -430,7 +431,7 @@ end; atBzip2 : begin - FArchive := TAbBzip2Archive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; @@ -437,12 +438,26 @@ end; atBzippedTar : begin - FArchive := TAbBzip2Archive.Create(FileName, fmOpenReadWrite or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmOpenRead or fmShareDenyNone); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; + atXz, atXzippedTar : begin + FArchive := TAbXzArchive.Create(FileName, fmOpenRead or fmShareDenyNone); + TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; + TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); + inherited InitArchive; + end; + + atLzma, atLzmaTar : begin + FArchive := TAbLzmaArchive.Create(FileName, fmOpenRead or fmShareDenyNone); + TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; + TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); + inherited InitArchive; + end; + else raise EAbUnhandledType.Create; end {case}; @@ -455,17 +470,17 @@ case ArcType of atZip : begin - FArchive := TAbZipArchive.Create(FileName, fmCreate); + FArchive := TAbZipArchive.Create(FileName, fmCreate or fmShareDenyWrite); InitArchive; end; atTar : begin - FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbTarArchive.Create(FileName, fmCreate or fmShareDenyWrite); inherited InitArchive; end; atGZip : begin - FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := False; inherited InitArchive; @@ -472,7 +487,7 @@ end; atGZippedTar : begin - FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbGzipArchive.Create(FileName, fmCreate or fmShareDenyWrite); TAbGzipArchive(FArchive).TarAutoHandle := FTarAutoHandle; TAbGzipArchive(FArchive).IsGzippedTar := True; inherited InitArchive; @@ -479,7 +494,7 @@ end; atBzip2 : begin - FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := False; inherited InitArchive; @@ -486,12 +501,26 @@ end; atBzippedTar : begin - FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyNone); + FArchive := TAbBzip2Archive.Create(FileName, fmCreate or fmShareDenyWrite); TAbBzip2Archive(FArchive).TarAutoHandle := FTarAutoHandle; TAbBzip2Archive(FArchive).IsBzippedTar := True; inherited InitArchive; end; + atXz, atXzippedTar : begin + FArchive := TAbXzArchive.Create(FileName, fmCreate or fmShareDenyWrite); + TAbXzArchive(FArchive).TarAutoHandle := FTarAutoHandle; + TAbXzArchive(FArchive).IsXzippedTar := (ArcType = atXzippedTar); + inherited InitArchive; + end; + + atLzma, atLzmaTar : begin + FArchive := TAbLzmaArchive.Create(FileName, fmCreate or fmShareDenyWrite); + TAbLzmaArchive(FArchive).TarAutoHandle := FTarAutoHandle; + TAbLzmaArchive(FArchive).IsLzmaTar := (ArcType = atLzmaTar); + inherited InitArchive; + end; + else raise EAbUnhandledType.Create; end {case}; Index: AbZipPrc.pas =================================================================== --- AbZipPrc.pas (revision 512) +++ AbZipPrc.pas (working copy) @@ -67,7 +67,8 @@ AbVMStrm, AbDfBase, AbDfEnc, - AbSpanSt; + AbSpanSt, + DCClassesUtf8; { ========================================================================== } @@ -294,22 +295,14 @@ OutStream : TStream ); var UncompressedStream : TStream; - SaveDir : string; AttrEx : TAbAttrExRec; begin - GetDir(0, SaveDir); - try {SaveDir} - if (Sender.BaseDirectory <> '') then - ChDir(Sender.BaseDirectory); - AbFileGetAttrEx(Item.DiskFileName, AttrEx); - if ((AttrEx.Attr and faDirectory) <> 0) then - UncompressedStream := TMemoryStream.Create - else - UncompressedStream := - TFileStream.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); - finally {SaveDir} - ChDir( SaveDir ); - end; {SaveDir} + if not AbFileGetAttrEx(Item.DiskFileName, AttrEx) then + Raise EAbFileNotFound.Create; + if ((AttrEx.Attr and faDirectory) <> 0) then + UncompressedStream := TMemoryStream.Create + else + UncompressedStream := TFileStreamEx.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); try {UncompressedStream} {$IFDEF UNIX} Item.ExternalFileAttributes := LongWord(AttrEx.Mode) shl 16 + LongWord(AttrEx.Attr); Index: AbZipTyp.pas =================================================================== --- AbZipTyp.pas (revision 512) +++ AbZipTyp.pas (working copy) @@ -169,7 +169,7 @@ (cmStored, cmShrunk, cmReduced1, cmReduced2, cmReduced3, cmReduced4, cmImploded, cmTokenized, cmDeflated, cmEnhancedDeflated, cmDCLImploded, cmBzip2 = 12, cmLZMA = 14, - cmIBMTerse = 18, cmLZ77, cmJPEG = 96, cmWavPack = 97, cmPPMd); + cmIBMTerse = 18, cmLZ77, cmXz = 95, cmJPEG = 96, cmWavPack = 97, cmPPMd); TAbZipSupportedMethod = (smStored, smDeflated, smBestMethod); @@ -407,6 +407,7 @@ function GetLastModFileDate : Word; override; function GetLastModFileTime : Word; override; function GetNativeFileAttributes : LongInt; override; + function GetNativeLastModFileTime: Longint; override; procedure SetCompressedSize( const Value : Int64 ); override; procedure SetCRC32( const Value : Longint ); override; procedure SetExternalFileAttributes( Value : LongWord ); override; @@ -530,8 +531,8 @@ override; destructor Destroy; override; - function CreateItem(const FileName : string): TAbArchiveItem; - override; + function CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; override; public {properties} property CompressionMethodToUse : TAbZipSupportedMethod @@ -620,11 +621,14 @@ {$ENDIF} {$ENDIF} Math, - AbCharset, AbResString, AbExcept, AbVMStrm, - SysUtils; + SysUtils, + LazUTF8, + DCOSUtils, + DCClassesUtf8, + DCConvertEncoding; function VerifyZip(Strm : TStream) : TAbArchiveType; { determine if stream appears to be in PkZip format } @@ -638,20 +642,31 @@ Result := atUnknown; try Strm.Position := 0; - Strm.Read(Sig, SizeOf(Sig)); - if (Sig = Ab_ZipSpannedSetSignature) then - Result := atSpannedZip - else begin - { attempt to find Central Directory Tail } - TailPosition := FindCentralDirectoryTail( Strm ); - if TailPosition <> -1 then begin - { check Central Directory Signature } - Strm.ReadBuffer(Footer, SizeOf(Footer)); - if Footer.Signature = Ab_ZipEndCentralDirectorySignature then - if Footer.DiskNumber = 0 then - Result := atZip - else - Result := atSpannedZip; + if Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig) then + begin + if (Sig = Ab_ZipSpannedSetSignature) then + Result := atSpannedZip + else begin + { attempt to find Central Directory Tail } + TailPosition := FindCentralDirectoryTail( Strm ); + if TailPosition <> -1 then begin + { check Central Directory Signature } + if (Strm.Read(Footer, SizeOf(Footer)) = SizeOf(Footer)) and + (Footer.Signature = Ab_ZipEndCentralDirectorySignature) then + begin + { check Central Directory Offset } + if (Footer.DirectoryOffset = High(LongWord)) or + ((Strm.Seek(Footer.DirectoryOffset, soBeginning) = Footer.DirectoryOffset) and + (Strm.Read(Sig, SizeOf(Sig)) = SizeOf(Sig)) and + (Sig = Ab_ZipCentralDirectoryFileHeaderSignature)) then + begin + if Footer.DiskNumber = 0 then + Result := atZip + else + Result := atSpannedZip; + end; + end; + end; end; end; except @@ -733,8 +748,7 @@ leaves stream positioned at start of structure or at original position if not found } const - StartBufSize = 512; - MaxBufSize = 64 * 1024; + MaxBufSize = 256 * 1024; var StartPos : Int64; TailRec : TAbZipEndOfCentralDirectoryRecord; @@ -741,7 +755,6 @@ Buffer : PAnsiChar; Offset : Int64; TestPos : PAnsiChar; - Done : boolean; BytesRead : Int64; BufSize : Int64; CommentLen: integer; @@ -767,7 +780,7 @@ stream; we need to search for the tail signature} {get a buffer} - BufSize := StartBufSize; + BufSize := Min(MaxBufSize, aStream.Size); GetMem(Buffer, BufSize); try @@ -774,57 +787,41 @@ {start out searching backwards} Offset := -BufSize; - {while there is still data to search ...} - Done := false; - while not Done do begin + {seek to the search position} + Result := aStream.Seek(Offset, soEnd); + if (Result < 0) then begin + Result := aStream.Seek(0, soBeginning); + end; - {seek to the search position} - Result := aStream.Seek(Offset, soEnd); - if (Result <= 0) then begin - Result := aStream.Seek(0, soBeginning); - Done := true; - end; + {read a buffer full} + BytesRead := aStream.Read(Buffer^, BufSize); - {read a buffer full} - BytesRead := aStream.Read(Buffer^, BufSize); + if BytesRead < sizeOf(TailRec) then begin + Result := -1; + Exit; + end; - if BytesRead < sizeOf(TailRec) then begin - Result := -1; - Exit; - end; + {search backwards through the buffer looking for the signature} + TestPos := Buffer + BytesRead - sizeof(TailRec); + while (TestPos <> Buffer) and + (PLongint(TestPos)^ <> Ab_ZipEndCentralDirectorySignature) do + dec(TestPos); - {search backwards through the buffer looking for the signature} - TestPos := Buffer + BytesRead - sizeof(TailRec); - while (TestPos <> Buffer) and - (PLongint(TestPos)^ <> Ab_ZipEndCentralDirectorySignature) do - dec(TestPos); + {if we found the signature...} + if (PLongint(TestPos)^ = Ab_ZipEndCentralDirectorySignature) then begin - {if we found the signature...} - if (PLongint(TestPos)^ = Ab_ZipEndCentralDirectorySignature) then begin + {get the tail record at this position} + Move(TestPos^, TailRec, sizeof(TailRec)); - {get the tail record at this position} - Move(TestPos^, TailRec, sizeof(TailRec)); + {if it's as valid a tail as we can check here...} + CommentLen := -Offset - (TestPos - Buffer + sizeof(TailRec)); + if (TailRec.CommentLength <= CommentLen) then begin - {if it's as valid a tail as we can check here...} - CommentLen := -Offset - (TestPos - Buffer + sizeof(TailRec)); - if (TailRec.CommentLength <= CommentLen) then begin - - {calculate its position and exit} - Result := Result + (TestPos - Buffer); - aStream.Seek(Result, soBeginning); - Exit; - end; + {calculate its position and exit} + Result := Result + (TestPos - Buffer); + aStream.Seek(Result, soBeginning); + Exit; end; - - {otherwise move back one step, doubling the buffer} - if (BufSize < MaxBufSize) then begin - FreeMem(Buffer); - BufSize := BufSize * 2; - if BufSize > MaxBufSize then - BufSize := MaxBufSize; - GetMem(Buffer, BufSize); - end; - dec(Offset, BufSize - SizeOf(TailRec)); end; {if we reach this point, the CD tail is not present} @@ -1195,12 +1192,13 @@ { TAbZipDirectoryFileFooter implementation ================================= } function TAbZipDirectoryFileFooter.GetIsZip64: Boolean; begin - Result := (DiskNumber >= $FFFF) or - (StartDiskNumber >= $FFFF) or - (EntriesOnDisk >= $FFFF) or - (TotalEntries >= $FFFF) or - (DirectorySize >= $FFFFFFFF) or - (DirectoryOffset >= $FFFFFFFF); + if DiskNumber >= $FFFF then Exit(True); + if StartDiskNumber >= $FFFF then Exit(True); + if EntriesOnDisk >= $FFFF then Exit(True); + if TotalEntries >= $FFFF then Exit(True); + if DirectorySize >= $FFFFFFFF then Exit(True); + if DirectoryOffset >= $FFFFFFFF then Exit(True); + Result := False; end; { -------------------------------------------------------------------------- } procedure TAbZipDirectoryFileFooter.LoadFromStream( Stream : TStream ); @@ -1407,6 +1405,22 @@ Result := FItemInfo.FileName; end; { -------------------------------------------------------------------------- } +function TAbZipItem.GetNativeLastModFileTime: Longint; +{$IFDEF UNIX} +var + DateTime: TDateTime; +{$ENDIF} +begin + // Zip stores MS-DOS date/time. +{$IFDEF UNIX} + DateTime := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); + Result := AbLocalDateTimeToUnixTime(DateTime); +{$ELSE} + LongRec(Result).Hi := LastModFileDate; + LongRec(Result).Lo := LastModFileTime; +{$ENDIF} +end; +{ -------------------------------------------------------------------------- } function TAbZipItem.GetShannonFanoTreeCount : Byte; begin Result := FItemInfo.ShannonFanoTreeCount; @@ -1430,12 +1444,13 @@ UnicodeName: UnicodeString; UTF8Name: AnsiString; XceedField: PXceedUnicodePathRec; + SystemCode: TAbZipHostOs; begin FItemInfo.LoadFromStream( Stream ); { decode filename (ANSI/OEM/UTF-8) } - if FItemInfo.IsUTF8 or (AbDetectCharSet(FItemInfo.FileName) = csUTF8) then - FFileName := UTF8ToString(FItemInfo.FileName) + if FItemInfo.IsUTF8 then + FFileName := FItemInfo.FileName else if FItemInfo.ExtraField.Get(Ab_InfoZipUnicodePathSubfieldID, Pointer(InfoZipField), FieldSize) and (FieldSize > SizeOf(TInfoZipUnicodePathRec)) and (InfoZipField.Version = 1) and @@ -1442,7 +1457,7 @@ (InfoZipField.NameCRC32 = AbCRC32Of(FItemInfo.FileName)) then begin SetString(UTF8Name, InfoZipField.UnicodeName, FieldSize - SizeOf(TInfoZipUnicodePathRec) + 1); - FFileName := UTF8ToString(UTF8Name); + FFileName := UTF8Name; end else if FItemInfo.ExtraField.Get(Ab_XceedUnicodePathSubfieldID, Pointer(XceedField), FieldSize) and (FieldSize > SizeOf(TXceedUnicodePathRec)) and @@ -1449,16 +1464,28 @@ (XceedField.Signature = Ab_XceedUnicodePathSignature) and (XceedField.Length * SizeOf(WideChar) = FieldSize - SizeOf(TXceedUnicodePathRec) + SizeOf(WideChar)) then begin SetString(UnicodeName, XceedField.UnicodeName, XceedField.Length); - FFileName := string(UnicodeName); + FFileName := Utf16ToUtf8(UnicodeName); end - {$IFDEF MSWINDOWS} - else if (GetACP <> GetOEMCP) and ((HostOS = hosDOS) or AbIsOEM(FItemInfo.FileName)) then begin - SetLength(FFileName, Length(FItemInfo.FileName)); - OemToCharBuff(PAnsiChar(FItemInfo.FileName), PChar(FFileName), Length(FFileName)); - end - {$ENDIF} else - FFileName := string(FItemInfo.FileName); + begin + SystemCode := HostOS; + {$IF DEFINED(MSWINDOWS)} + if (GetACP <> GetOEMCP) and (SystemCode = hosDOS) then + FFileName := CeOemToUtf8(FItemInfo.FileName) + else if (GetACP <> GetOEMCP) and CeTryDecode(FItemInfo.FileName, CP_OEMCP, UnicodeName) then + FFileName := Utf16ToUtf8(UnicodeName) + else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then + FFileName := CeAnsiToUtf8(FItemInfo.FileName) + else + {$ELSEIF DEFINED(UNIX)} + if (SystemCode = hosDOS) then + FFileName := CeOemToUtf8(FItemInfo.FileName) + else if (SystemCode = hosNTFS) or (SystemCode = hosWinNT) then + FFileName := CeAnsiToUtf8(FItemInfo.FileName) + else + {$ENDIF} + FFileName := FItemInfo.FileName; + end; { read ZIP64 extended header } FUncompressedSize := FItemInfo.UncompressedSize; @@ -1596,24 +1623,20 @@ {$IFDEF MSWINDOWS} FItemInfo.IsUTF8 := False; HostOS := hosDOS; - if AbTryEncode(Value, CP_OEMCP, False, AnsiName) then + if CeTryEncode(UTF8Decode(Value), CP_OEMCP, False, AnsiName) then {no-op} - else if (GetACP <> GetOEMCP) and AbTryEncode(Value, CP_ACP, False, AnsiName) then + else if (GetACP <> GetOEMCP) and CeTryEncode(UTF8Decode(Value), CP_ACP, False, AnsiName) then HostOS := hosWinNT - else if AbTryEncode(Value, CP_OEMCP, True, AnsiName) then - {no-op} - else if (GetACP <> GetOEMCP) and AbTryEncode(Value, CP_ACP, True, AnsiName) then - HostOS := hosWinNT else FItemInfo.IsUTF8 := True; if FItemInfo.IsUTF8 then - FItemInfo.FileName := Utf8Encode(Value) + FItemInfo.FileName := Value else FItemInfo.FileName := AnsiName; {$ENDIF} {$IFDEF UNIX} - FItemInfo.FileName := AnsiString(Value); - FItemInfo.IsUTF8 := AbSysCharSetIsUTF8; + FItemInfo.FileName := Value; + FItemInfo.IsUTF8 := SystemEncodingUtf8; {$ENDIF} UseExtraField := False; @@ -1626,7 +1649,7 @@ end; if UseExtraField then begin - UTF8Name := AnsiToUTF8(Value); + UTF8Name := Value; FieldSize := SizeOf(TInfoZipUnicodePathRec) + Length(UTF8Name) - 1; GetMem(InfoZipField, FieldSize); try @@ -1762,11 +1785,11 @@ inherited Destroy; end; { -------------------------------------------------------------------------- } -function TAbZipArchive.CreateItem( const FileName : string ): TAbArchiveItem; +function TAbZipArchive.CreateItem(const SourceFileName : string; + const ArchiveDirectory : string): TAbArchiveItem; var - FileSpec : string; + FullSourceFileName, FullArchiveFileName: string; begin - FileSpec := FileName; Result := TAbZipItem.Create; with TAbZipItem( Result ) do begin CompressionMethod := cmDeflated; @@ -1773,9 +1796,17 @@ GeneralPurposeBitFlag := 0; CompressedSize := 0; CRC32 := 0; - DiskFileName := ExpandFileName(FileSpec); - FileName := FixName(FileSpec); RelativeOffset := 0; + + MakeFullNames(SourceFileName, ArchiveDirectory, + FullSourceFileName, FullArchiveFileName); + + if mbDirectoryExists(FullSourceFileName) then begin + FullSourceFileName := IncludeTrailingPathDelimiter(FullSourceFileName); + end; + + Result.FileName := FullArchiveFileName; + Result.DiskFileName := FullSourceFileName; end; end; { -------------------------------------------------------------------------- } @@ -1930,8 +1961,8 @@ AbStripDots( lValue ); for i := 1 to Length( lValue ) do - if lValue[i] = '\' then - lValue[i] := '/'; + if lValue[i] = AbDosPathDelim then + lValue[i] := AbUnixPathDelim; Result := lValue; end; { -------------------------------------------------------------------------- } @@ -1983,7 +2014,7 @@ FStatus := asInvalid; //TODO: Status updates are extremely inconsistent raise EAbUserAbort.Create; end; - FStream := TFileStream.Create( ArchiveName, Mode ); + FStream := TFileStreamEx.Create( ArchiveName, Mode ); TailPosition := FindCentralDirectoryTail( FStream ); end; end; @@ -2302,7 +2333,7 @@ if FOwnsStream then begin {need new stream to write} FreeAndNil(FStream); - FStream := TFileStream.Create(FArchiveName, + FStream := TFileStreamEx.Create(FArchiveName, fmOpenReadWrite or fmShareDenyWrite); end; FStream.Size := 0; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abarctyp.pas����������������������������������������������0000644�0001750�0000144�00000211312�12177772463�022102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbArcTyp.pas *} {*********************************************************} {* ABBREVIA: TABArchive, TABArchiveItem classes *} {*********************************************************} unit AbArcTyp; {$I AbDefine.inc} interface uses {$IFDEF MSWINDOWS} Windows, {$ENDIF MSWINDOWS} Classes, Types, AbUtils; { ===== TAbArchiveItem ====================================================== } type TAbArchiveItem = class(TObject) protected {private} NextItem : TAbArchiveItem; FAction : TAbArchiveAction; FCompressedSize : Int64; FCRC32 : Longint; FDiskFileName : string; FExternalFileAttributes : LongWord; FFileName : string; FIsEncrypted : Boolean; FLastModFileTime : Word; FLastModFileDate : Word; FTagged : Boolean; FUncompressedSize : Int64; protected {property methods} function GetCompressedSize : Int64; virtual; function GetCRC32 : Longint; virtual; function GetDiskPath : string; function GetExternalFileAttributes : LongWord; virtual; function GetFileName : string; virtual; function GetIsDirectory: Boolean; virtual; function GetIsEncrypted : Boolean; virtual; function GetLastModFileDate : Word; virtual; function GetLastModFileTime : Word; virtual; { This depends on in what format the attributes are stored in the archive, to which system they refer (MS-DOS, Unix, etc.) and what system we're running on (compile time). } function GetNativeFileAttributes : LongInt; virtual; { This depends on in what format the date/time is stored in the archive (Unix, MS-DOS, ...) and what system we're running on (compile time). Returns MS-DOS local time on Windows, Unix UTC time on Unix. } function GetNativeLastModFileTime : Longint; virtual; function GetStoredPath : string; function GetUncompressedSize : Int64; virtual; procedure SetCompressedSize(const Value : Int64); virtual; procedure SetCRC32(const Value : Longint); virtual; procedure SetExternalFileAttributes( Value : LongWord ); virtual; procedure SetFileName(const Value : string); virtual; procedure SetIsEncrypted(Value : Boolean); virtual; procedure SetLastModFileDate(const Value : Word); virtual; procedure SetLastModFileTime(const Value : Word); virtual; procedure SetUncompressedSize(const Value : Int64); virtual; function GetLastModTimeAsDateTime: TDateTime; virtual; procedure SetLastModTimeAsDateTime(const Value: TDateTime); virtual; public {methods} constructor Create; destructor Destroy; override; function MatchesDiskName(const FileMask : string) : Boolean; function MatchesStoredName(const FileMask : string) : Boolean; function MatchesStoredNameEx(const FileMask : string) : Boolean; public {properties} property Action : TAbArchiveAction read FAction write FAction; property CompressedSize : Int64 read GetCompressedSize write SetCompressedSize; property CRC32 : Longint read GetCRC32 write SetCRC32; property DiskFileName : string read FDiskFileName write FDiskFileName; property DiskPath : string read GetDiskPath; property ExternalFileAttributes : LongWord read GetExternalFileAttributes write SetExternalFileAttributes; property FileName : string read GetFileName write SetFileName; property IsDirectory: Boolean read GetIsDirectory; property IsEncrypted : Boolean read GetIsEncrypted write SetIsEncrypted; property LastModFileDate : Word read GetLastModFileDate write SetLastModFileDate; property LastModFileTime : Word read GetLastModFileTime write SetLastModFileTime; property NativeFileAttributes : LongInt read GetNativeFileAttributes; property NativeLastModFileTime : Longint read GetNativeLastModFileTime; property StoredPath : string read GetStoredPath; property Tagged : Boolean read FTagged write FTagged; property UncompressedSize : Int64 read GetUncompressedSize write SetUncompressedSize; property LastModTimeAsDateTime : TDateTime read GetLastModTimeAsDateTime write SetLastModTimeAsDateTime; end; { ===== TAbArchiveListEnumerator ============================================ } type TAbArchiveList = class; TAbArchiveListEnumerator = class private FIndex: Integer; FList: TAbArchiveList; public constructor Create(aList: TAbArchiveList); function GetCurrent: TAbArchiveItem; function MoveNext: Boolean; property Current: TAbArchiveItem read GetCurrent; end; { ===== TAbArchiveList ====================================================== } TAbArchiveList = class protected {private} FList : TList; FOwnsItems: Boolean; HashTable : array[0..1020] of TAbArchiveItem; protected {methods} function GenerateHash(const S : string) : LongInt; function GetCount : Integer; function Get(Index : Integer) : TAbArchiveItem; procedure Put(Index : Integer; Item : TAbArchiveItem); public {methods} constructor Create(AOwnsItems: Boolean); destructor Destroy; override; function Add(Item : Pointer): Integer; procedure Clear; procedure Delete(Index : Integer); function Find(const FN : string) : Integer; function GetEnumerator: TAbArchiveListEnumerator; function IsActiveDupe(const FN : string) : Boolean; public {properties} property Count : Integer read GetCount; property Items[Index : Integer] : TAbArchiveItem read Get write Put; default; end; { ===== TAbArchive specific types =========================================== } type TAbStoreOption = (soStripDrive, soStripPath, soRemoveDots, soRecurse, soFreshen, soReplace); TAbStoreOptions = set of TAbStoreOption; TAbExtractOption = (eoCreateDirs, eoRestorePath); TAbExtractOptions = set of TAbExtractOption; TAbArchiveStatus = (asInvalid, asIdle, asBusy); TAbArchiveEvent = procedure(Sender : TObject) of object; TAbArchiveConfirmEvent = procedure (Sender : TObject; var Confirm : Boolean) of object; TAbArchiveProgressEvent = procedure(Sender : TObject; Progress : Byte; var Abort : Boolean) of object; TAbArchiveItemEvent = procedure(Sender : TObject; Item : TAbArchiveItem) of object; TAbArchiveItemConfirmEvent = procedure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; var Confirm : Boolean) of object; TAbConfirmOverwriteEvent = procedure(var Name : string; var Confirm : Boolean) of object; TAbArchiveItemFailureEvent = procedure(Sender : TObject; Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer) of object; TAbArchiveItemExtractEvent = procedure(Sender : TObject; Item : TAbArchiveItem; const NewName : string) of object; TAbArchiveItemExtractToStreamEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream) of object; TAbArchiveItemTestEvent = procedure(Sender : TObject; Item : TAbArchiveItem) of object; TAbArchiveItemInsertEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream) of object; TAbArchiveItemInsertFromStreamEvent = procedure(Sender : TObject; Item : TAbArchiveItem; OutStream, InStream : TStream) of object; TAbArchiveItemProgressEvent = procedure(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean) of object; TAbProgressEvent = procedure(Progress : Byte; var Abort : Boolean) of object; TAbRequestDiskEvent = procedure(Sender : TObject; var Abort : Boolean) of object; TAbRequestImageEvent = procedure(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean) of object; TAbRequestNthDiskEvent = procedure(Sender : TObject; DiskNumber : Byte; var Abort : Boolean) of object; type TAbArchiveStreamHelper = class protected FStream : TStream; public constructor Create(AStream : TStream); procedure ExtractItemData(AStream : TStream); virtual; abstract; function FindFirstItem : Boolean; virtual; abstract; function FindNextItem : Boolean; virtual; abstract; procedure ReadHeader; virtual; abstract; procedure ReadTail; virtual; abstract; function SeekItem(Index : Integer): Boolean; virtual; abstract; procedure WriteArchiveHeader; virtual; abstract; procedure WriteArchiveItem(AStream : TStream); virtual; abstract; procedure WriteArchiveTail; virtual; abstract; function GetItemCount : Integer; virtual; abstract; end; { ===== TAbArchive ========================================================== } type TAbArchive = class(TObject) public FStream : TStream; FStatus : TAbArchiveStatus; protected {property variables} //These break Encapsulation FArchiveName : string; FAutoSave : Boolean; FBaseDirectory : string; FCurrentItem : TAbArchiveItem; FDOSMode : Boolean; FExtractOptions : TAbExtractOptions; FImageNumber : Word; FInStream : TStream; FIsDirty : Boolean; FSpanningThreshold : Int64; FItemList : TAbArchiveList; FLogFile : string; FLogging : Boolean; FLogStream : TFileStream; FMode : Word; FOwnsStream : Boolean; FSpanned : Boolean; FStoreOptions : TAbStoreOptions; FTempDir : string; protected {event variables} FOnProcessItemFailure : TAbArchiveItemFailureEvent; FOnArchiveProgress : TAbArchiveProgressEvent; FOnArchiveSaveProgress : TAbArchiveProgressEvent; FOnArchiveItemProgress : TAbArchiveItemProgressEvent; FOnConfirmProcessItem : TAbArchiveItemConfirmEvent; FOnConfirmOverwrite : TAbConfirmOverwriteEvent; FOnConfirmSave : TAbArchiveConfirmEvent; FOnLoad : TAbArchiveEvent; FOnProgress : TAbProgressEvent; FOnRequestImage : TAbRequestImageEvent; FOnSave : TAbArchiveEvent; protected {methods} constructor CreateInit; procedure CheckValid; function ConfirmPath(Item : TAbArchiveItem; const NewName : string; out UseName : string) : Boolean; procedure FreshenAt(Index : Integer); function FreshenRequired(Item : TAbArchiveItem) : Boolean; procedure GetFreshenTarget(Item : TAbArchiveItem); function GetItemCount : Integer; procedure MakeLogEntry(const FN: string; LT : TAbLogType); procedure MakeFullNames(const SourceFileName: String; const ArchiveDirectory: String; out FullSourceFileName: String; out FullArchiveFileName: String); procedure ReplaceAt(Index : Integer); procedure SaveIfNeeded(aItem : TAbArchiveItem); procedure SetBaseDirectory(Value : string); procedure SetLogFile(const Value : string); procedure SetLogging(Value : Boolean); protected {abstract methods} function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; {SourceFileName - full or relative path to a file/dir on some file system If full path, BaseDirectory is used to determine relative path} {ArchiveDirectory - path to a directory in the archive the file/dir will be in} {Example: FBaseDirectory = /dir SourceFileName = /dir/subdir/file ArchiveDirectory = files/storage (or files/storage/) -> name in archive = files/storage/subdir/file} virtual; abstract; overload; function CreateItem(const FileSpec : string): TAbArchiveItem; overload; procedure ExtractItemAt(Index : Integer; const UseName : string); virtual; abstract; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); virtual; abstract; procedure LoadArchive; virtual; abstract; procedure SaveArchive; virtual; abstract; procedure TestItemAt(Index : Integer); virtual; abstract; protected {virtual methods} procedure DoProcessItemFailure(Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); virtual; procedure DoArchiveSaveProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoArchiveItemProgress(Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); virtual; procedure DoConfirmOverwrite(var FileName : string; var Confirm : Boolean); virtual; procedure DoConfirmProcessItem(Item : TAbArchiveItem; const ProcessType : TAbProcessType; var Confirm : Boolean); virtual; procedure DoConfirmSave(var Confirm : Boolean); virtual; procedure DoLoad; virtual; procedure DoProgress(Progress : Byte; var Abort : Boolean); virtual; procedure DoSave; virtual; function FixName(const Value : string) : string; virtual; function GetSpanningThreshold : Int64; virtual; function GetSupportsEmptyFolders : Boolean; virtual; procedure SetSpanningThreshold( Value : Int64 ); virtual; protected {properties and events} property InStream : TStream read FInStream; public {methods} constructor Create(const FileName : string; Mode : Word); virtual; constructor CreateFromStream(aStream : TStream; const aArchiveName : string); virtual; destructor Destroy; override; procedure Add(aItem : TAbArchiveItem); virtual; procedure AddEntry(const Path : String; const ArchiveDirectory : String); procedure AddFiles(const FileMask : string; SearchAttr : Integer); procedure AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); procedure AddFromStream(const NewName : string; aStream : TStream); procedure ClearTags; procedure Delete(aItem : TAbArchiveItem); procedure DeleteAt(Index : Integer); procedure DeleteFiles(const FileMask : string); procedure DeleteFilesEx(const FileMask, ExclusionMask : string); procedure DeleteTaggedItems; procedure Extract(aItem : TAbArchiveItem; const NewName : string); procedure ExtractAt(Index : Integer; const NewName : string); procedure ExtractFiles(const FileMask : string); procedure ExtractFilesEx(const FileMask, ExclusionMask : string); procedure ExtractTaggedItems; procedure ExtractToStream(const aFileName : string; aStream : TStream); function FindFile(const aFileName : string): Integer; function FindItem(aItem : TAbArchiveItem): Integer; procedure Freshen(aItem : TAbArchiveItem); procedure FreshenFiles(const FileMask : string); procedure FreshenFilesEx(const FileMask, ExclusionMask : string); procedure FreshenTaggedItems; procedure Load; virtual; procedure Move(aItem : TAbArchiveItem; const NewStoredPath : string); virtual; procedure Replace(aItem : TAbArchiveItem); procedure Save; virtual; procedure TagItems(const FileMask : string); procedure TestTaggedItems; procedure UnTagItems(const FileMask : string); procedure DoDeflateProgress(aPercentDone : integer); virtual; procedure DoInflateProgress(aPercentDone : integer); virtual; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); virtual; public {properties} property OnProgress : TAbProgressEvent read FOnProgress write FOnProgress; property ArchiveName : string read FArchiveName; property AutoSave : Boolean read FAutoSave write FAutoSave; property BaseDirectory : string read FBaseDirectory write SetBaseDirectory; property Count : Integer read GetItemCount; property DOSMode : Boolean read FDOSMode write FDOSMode; property ExtractOptions : TAbExtractOptions read FExtractOptions write FExtractOptions; property IsDirty : Boolean read FIsDirty write FIsDirty; property ItemList : TAbArchiveList read FItemList; property LogFile : string read FLogFile write SetLogFile; property Logging : Boolean read FLogging write SetLogging; property Mode : Word read FMode; property Spanned : Boolean read FSpanned; property SpanningThreshold : Int64 read GetSpanningThreshold write SetSpanningThreshold; property Status : TAbArchiveStatus read FStatus; property StoreOptions : TAbStoreOptions read FStoreOptions write FStoreOptions; property SupportsEmptyFolders : Boolean read GetSupportsEmptyFolders; property TempDirectory : string read FTempDir write FTempDir; public {events} property OnProcessItemFailure : TAbArchiveItemFailureEvent read FOnProcessItemFailure write FOnProcessItemFailure; property OnArchiveProgress : TAbArchiveProgressEvent read FOnArchiveProgress write FOnArchiveProgress; property OnArchiveSaveProgress : TAbArchiveProgressEvent read FOnArchiveSaveProgress write FOnArchiveSaveProgress; property OnArchiveItemProgress : TAbArchiveItemProgressEvent read FOnArchiveItemProgress write FOnArchiveItemProgress; property OnConfirmProcessItem : TAbArchiveItemConfirmEvent read FOnConfirmProcessItem write FOnConfirmProcessItem; property OnConfirmOverwrite : TAbConfirmOverwriteEvent read FOnConfirmOverwrite write FOnConfirmOverwrite; property OnConfirmSave : TAbArchiveConfirmEvent read FOnConfirmSave write FOnConfirmSave; property OnLoad : TAbArchiveEvent read FOnLoad write FOnLoad; property OnRequestImage : TAbRequestImageEvent read FOnRequestImage write FOnRequestImage; property OnSave : TAbArchiveEvent read FOnSave write FOnSave; end; { ===== TAbExtraField ======================================================= } type PAbExtraSubField = ^TAbExtraSubField; TAbExtraSubField = packed record ID : Word; Len : Word; Data : record end; end; TAbExtraField = class private {fields} FBuffer : TByteDynArray; private {methods} procedure DeleteField(aSubField : PAbExtraSubField); function FindField(aID : Word; out aSubField : PAbExtraSubField) : Boolean; function FindNext(var aCurField : PAbExtraSubField) : Boolean; function GetCount : Integer; function GetID(aIndex : Integer): Word; procedure SetBuffer(const aValue : TByteDynArray); protected {methods} procedure Changed; virtual; public {methods} procedure Assign(aSource : TAbExtraField); procedure Clear; procedure CloneFrom(aSource : TAbExtraField; aID : Word); procedure Delete(aID : Word); function Get(aID : Word; out aData : Pointer; out aDataSize : Word) : Boolean; function GetStream(aID : Word; out aStream : TStream): Boolean; function Has(aID : Word): Boolean; procedure LoadFromStream(aStream : TStream; aSize : Word); procedure Put(aID : Word; const aData; aDataSize : Word); public {properties} property Count : Integer read GetCount; property Buffer : TByteDynArray read FBuffer write SetBuffer; property IDs[aIndex : Integer]: Word read GetID; end; const AbDefAutoSave = False; AbDefExtractOptions = [eoCreateDirs]; AbDefStoreOptions = [soStripDrive, soRemoveDots]; AbBufferSize = 32768; AbLastDisk = -1; AbLastImage = -1; implementation {.$R ABRES.R32} uses RTLConsts, SysUtils, AbExcept, AbDfBase, AbConst, AbResString, DCOSUtils, DCClassesUtf8; { TAbArchiveItem implementation ============================================ } { TAbArchiveItem } constructor TAbArchiveItem.Create; begin inherited Create; FCompressedSize := 0; FUncompressedSize := 0; FFileName := ''; FAction := aaNone; FLastModFileTime := 0; FLastModFileDate := 0; end; { -------------------------------------------------------------------------- } destructor TAbArchiveItem.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetCompressedSize : Int64; begin Result := FCompressedSize; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetCRC32 : LongInt; begin Result := FCRC32; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetDiskPath : string; begin Result := ExtractFilePath(DiskFileName); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetExternalFileAttributes : LongWord; begin Result := FExternalFileAttributes; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetFileName : string; begin Result := FFileName; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetIsDirectory: Boolean; begin Result := False; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetIsEncrypted : Boolean; begin Result := FIsEncrypted; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModFileTime : Word; begin Result := FLastModFileTime; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModFileDate : Word; begin Result := FLastModFileDate; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetNativeFileAttributes : LongInt; begin {$IFDEF MSWINDOWS} if IsDirectory then Result := faDirectory else Result := 0; {$ENDIF} {$IFDEF UNIX} if IsDirectory then Result := AB_FPERMISSION_GENERIC or AB_FPERMISSION_OWNEREXECUTE else Result := AB_FPERMISSION_GENERIC; {$ENDIF} end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetNativeLastModFileTime : Longint; begin LongRec(Result).Hi := LastModFileDate; LongRec(Result).Lo := LastModFileTime; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetStoredPath : string; begin Result := ExtractFilePath(DiskFileName); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetUnCompressedSize : Int64; begin Result := FUnCompressedSize; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesDiskName(const FileMask : string) : Boolean; var DiskName, Mask : string; begin DiskName := DiskFileName; AbUnfixName(DiskName); Mask := FileMask; AbUnfixName(Mask); Result := AbFileMatch(DiskName, Mask); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesStoredName(const FileMask : string) : Boolean; var Value : string; Drive, Dir, Name : string; begin Value := FileMask; AbUnfixName(Value); AbParseFileName(Value, Drive, Dir, Name); Value := Dir + Name; Name := FileName; AbUnfixName(Name); if IsDirectory then Name := ExcludeTrailingPathDelimiter(Name); Result := AbFileMatch(Name, Value); end; { -------------------------------------------------------------------------- } function TAbArchiveItem.MatchesStoredNameEx(const FileMask : string) : Boolean; var I, J: Integer; MaskPart: string; begin Result := True; I := 1; while I <= Length(FileMask) do begin J := I; while (I <= Length(FileMask)) and (FileMask[I] <> PathSep {';'}) do Inc(I); MaskPart := Trim(Copy(FileMask, J, I - J)); if (I <= Length(FileMask)) and (FileMask[I] = PathSep {';'}) then Inc(I); if MatchesStoredName(MaskPart) then Exit; end; Result := False; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetCompressedSize(const Value : Int64); begin FCompressedSize := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetCRC32(const Value : LongInt); begin FCRC32 := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetExternalFileAttributes( Value : LongWord ); begin FExternalFileAttributes := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetFileName(const Value : string); begin FFileName := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetIsEncrypted(Value : Boolean); begin FIsEncrypted := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModFileDate(const Value : Word); begin FLastModFileDate := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModFileTime(const Value : Word); begin FLastModFileTime := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetUnCompressedSize(const Value : Int64); begin FUnCompressedSize := Value; end; { -------------------------------------------------------------------------- } function TAbArchiveItem.GetLastModTimeAsDateTime: TDateTime; begin Result := AbDosFileDateToDateTime(LastModFileDate, LastModFileTime); end; { -------------------------------------------------------------------------- } procedure TAbArchiveItem.SetLastModTimeAsDateTime(const Value: TDateTime); var FileDate : Integer; begin FileDate := AbDateTimeToDosFileDate(Value); LastModFileTime := LongRec(FileDate).Lo; LastModFileDate := LongRec(FileDate).Hi; end; { -------------------------------------------------------------------------- } { TAbArchiveEnumeratorList implementation ================================== } { TAbArchiveEnumeratorList } constructor TAbArchiveListEnumerator.Create(aList: TAbArchiveList); begin inherited Create; FIndex := -1; FList := aList; end; { -------------------------------------------------------------------------- } function TAbArchiveListEnumerator.GetCurrent: TAbArchiveItem; begin Result := FList[FIndex]; end; { -------------------------------------------------------------------------- } function TAbArchiveListEnumerator.MoveNext: Boolean; begin Result := FIndex < FList.Count - 1; if Result then Inc(FIndex); end; { -------------------------------------------------------------------------- } { TAbArchiveList implementation ============================================ } { TAbArchiveList } constructor TAbArchiveList.Create(AOwnsItems: Boolean); begin inherited Create; FList := TList.Create; FOwnsItems := AOwnsItems; end; { -------------------------------------------------------------------------- } destructor TAbArchiveList.Destroy; begin Clear; FList.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbArchiveList.Add(Item : Pointer) : Integer; var H : LongInt; begin if FOwnsItems then begin H := GenerateHash(TAbArchiveItem(Item).FileName); TAbArchiveItem(Item).NextItem := HashTable[H]; HashTable[H] := TAbArchiveItem(Item); end; Result := FList.Add(Item); end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Clear; var i : Integer; begin if FOwnsItems then for i := 0 to Count - 1 do TObject(FList[i]).Free; FList.Clear; FillChar(HashTable, SizeOf(HashTable), #0); end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Delete(Index: Integer); var Look : TAbArchiveItem; Last : Pointer; FN : string; begin if FOwnsItems then begin FN := TAbArchiveItem(FList[Index]).FileName; Last := @HashTable[GenerateHash(FN)]; Look := TAbArchiveItem(Last^); while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Move(Look.NextItem, Last^, 4); Break; end; Last := @Look.NextItem; Look := TAbArchiveItem(Last^); end; TObject(FList[Index]).Free; end; FList.Delete(Index); end; { -------------------------------------------------------------------------- } function TAbArchiveList.Find(const FN : string) : Integer; var Look : TAbArchiveItem; I : Integer; begin if FOwnsItems then begin Look := HashTable[GenerateHash(FN)]; while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Result := FList.IndexOf(Look); Exit; end; Look := Look.NextItem; end; end else begin for I := 0 to FList.Count - 1 do if CompareText(Items[I].FileName, FN) = 0 then begin Result := I; Exit; end; end; Result := -1; end; { -------------------------------------------------------------------------- } {$IFOPT Q+}{$DEFINE OVERFLOW_CHECKS_ON}{$Q-}{$ENDIF} function TAbArchiveList.GenerateHash(const S : string) : LongInt; var G : LongInt; I : Integer; U : string; begin Result := 0; U := AnsiUpperCase(S); for I := 1 to Length(U) do begin Result := (Result shl 4) + Ord(U[I]); G := LongInt(Result and $F0000000); if (G <> 0) then Result := Result xor (G shr 24); Result := Result and (not G); end; Result := Result mod 1021; end; {$IFDEF OVERFLOW_CHECKS_ON}{$Q+}{$ENDIF} { -------------------------------------------------------------------------- } function TAbArchiveList.Get(Index : Integer): TAbArchiveItem; begin Result := TAbArchiveItem(FList[Index]); end; { -------------------------------------------------------------------------- } function TAbArchiveList.GetCount : Integer; begin Result := FList.Count; end; { -------------------------------------------------------------------------- } function TAbArchiveList.GetEnumerator: TAbArchiveListEnumerator; begin Result := TAbArchiveListEnumerator.Create(Self); end; { -------------------------------------------------------------------------- } function TAbArchiveList.IsActiveDupe(const FN : string) : Boolean; var Look : TAbArchiveItem; I : Integer; begin if FOwnsItems then begin Look := HashTable[GenerateHash(FN)]; while Look <> nil do begin if (CompareText(Look.FileName, FN) = 0) and (Look.Action <> aaDelete) then begin Result := True; Exit; end; Look := Look.NextItem; end; end else begin for I := 0 to Count - 1 do if (CompareText(Items[I].FileName, FN) = 0) and (Items[I].Action <> aaDelete) then begin Result := True; Exit; end; end; Result := False; end; { -------------------------------------------------------------------------- } procedure TAbArchiveList.Put(Index : Integer; Item : TAbArchiveItem); var H : LongInt; Look : TAbArchiveItem; Last : Pointer; FN : string; begin if FOwnsItems then begin FN := TAbArchiveItem(FList[Index]).FileName; Last := @HashTable[GenerateHash(FN)]; Look := TAbArchiveItem(Last^); { Delete old index } while Look <> nil do begin if CompareText(Look.FileName, FN) = 0 then begin Move(Look.NextItem, Last^, 4); Break; end; Last := @Look.NextItem; Look := TAbArchiveItem(Last^); end; { Free old instance } TObject(FList[Index]).Free; { Add new index } H := GenerateHash(TAbArchiveItem(Item).FileName); TAbArchiveItem(Item).NextItem := HashTable[H]; HashTable[H] := TAbArchiveItem(Item); end; { Replace pointer } FList[Index] := Item; end; { TAbArchive implementation ================================================ } { TAbArchive } constructor TAbArchive.CreateInit; begin inherited Create; FIsDirty := False; FAutoSave := False; FItemList := TAbArchiveList.Create(True); StoreOptions := []; ExtractOptions := []; FStatus := asIdle; FOnProgress := DoProgress; // BaseDirectory := ExtractFilePath(ParamStr(0)); end; { -------------------------------------------------------------------------- } constructor TAbArchive.Create(const FileName : string; Mode : Word); {create an archive by opening a filestream on filename with the given mode} begin FOwnsStream := True; CreateFromStream(TFileStreamEx.Create(FileName, Mode), FileName); FMode := Mode; end; { -------------------------------------------------------------------------- } constructor TAbArchive.CreateFromStream(aStream : TStream; const aArchiveName : string); {create an archive based on an existing stream} begin CreateInit; FArchiveName := aArchiveName; FStream := aStream; end; { -------------------------------------------------------------------------- } destructor TAbArchive.Destroy; begin FItemList.Free; if FOwnsStream then FStream.Free; FLogStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Add(aItem : TAbArchiveItem); var Confirm, ItemAdded : Boolean; begin ItemAdded := False; try CheckValid; if FItemList.IsActiveDupe(aItem.FileName) then begin if (soFreshen in StoreOptions) then Freshen(aItem) else if (soReplace in StoreOptions) then Replace(aItem) else DoProcessItemFailure(aItem, ptAdd, ecAbbrevia, AbDuplicateName); Exit; end; DoConfirmProcessItem(aItem, ptAdd, Confirm); if not Confirm then Exit; aItem.Action := aaAdd; FItemList.Add(aItem); ItemAdded := True; FIsDirty := True; if AutoSave then Save; finally if not ItemAdded then aItem.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddEntry(const Path : String; const ArchiveDirectory : String); var Item : TAbArchiveItem; FullSourceFileName, FullArchiveFileName : String; begin MakeFullNames(Path, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); if (FullSourceFileName <> FArchiveName) then begin Item := CreateItem(Path, ArchiveDirectory); Add(Item); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFiles(const FileMask : string; SearchAttr : Integer); {Add files to the archive where the disk filespec matches} begin AddFilesEx(FileMask, '', SearchAttr); end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFilesEx(const FileMask, ExclusionMask : string; SearchAttr : Integer); {Add files matching Filemask except those matching ExclusionMask} var PathType : TAbPathType; IsWild : Boolean; SaveDir : string; Mask : string; MaskF : string; procedure CreateItems(Wild, Recursing : Boolean); var i : Integer; Files : TStrings; FilterList : TStringList; Item : TAbArchiveItem; begin FilterList := TStringList.Create; try if (MaskF <> '') then AbFindFilesEx(MaskF, SearchAttr, FilterList, Recursing); Files := TStringList.Create; try AbFindFilesEx(Mask, SearchAttr, Files, Recursing); if (Files.Count > 0) then for i := 0 to pred(Files.Count) do if FilterList.IndexOf(Files[i]) < 0 then if not Wild then begin if (Files[i] <> FArchiveName) then begin Item := CreateItem(Files[i]); Add(Item); end; end else begin if (AbAddBackSlash(FBaseDirectory) + Files[i]) <> FArchiveName then begin Item := CreateItem(Files[i]); Add(Item); end; end; finally Files.Free; end; finally FilterList.Free; end; end; begin if not SupportsEmptyFolders then SearchAttr := SearchAttr and not faDirectory; CheckValid; IsWild := (Pos('*', FileMask) > 0) or (Pos('?', FileMask) > 0); PathType := AbGetPathType(FileMask); Mask := FileMask; AbUnfixName(Mask); MaskF := ExclusionMask; AbUnfixName(MaskF); case PathType of ptNone, ptRelative : begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try CreateItems(IsWild, soRecurse in StoreOptions); finally if BaseDirectory <> '' then ChDir(SaveDir); end; end; ptAbsolute : begin CreateItems(IsWild, soRecurse in StoreOptions); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.AddFromStream(const NewName : string; aStream : TStream); {Add an item to the archive directly from a TStream descendant} var Confirm : Boolean; Item : TAbArchiveItem; PT : TAbProcessType; begin Item := CreateItem(NewName); CheckValid; PT := ptAdd; if FItemList.IsActiveDupe(NewName) then begin if ((soFreshen in StoreOptions) or (soReplace in StoreOptions)) then begin Item.Free; Item := FItemList[FItemList.Find(NewName)]; PT := ptReplace; end else begin DoProcessItemFailure(Item, ptAdd, ecAbbrevia, AbDuplicateName); Item.Free; Exit; end; end; DoConfirmProcessItem(Item, PT, Confirm); if not Confirm then Exit; FInStream := aStream; Item.Action := aaStreamAdd; if (PT = ptAdd) then FItemList.Add(Item); FIsDirty := True; Save; FInStream := nil; end; { -------------------------------------------------------------------------- } procedure TAbArchive.CheckValid; begin if Status = asInvalid then raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ClearTags; {Clear all tags from the archive} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do TAbArchiveItem(FItemList[i]).Tagged := False; end; { -------------------------------------------------------------------------- } function TAbArchive.ConfirmPath(Item : TAbArchiveItem; const NewName : string; out UseName : string) : Boolean; var Path : string; begin if Item.IsDirectory and not (ExtractOptions >= [eoRestorePath, eoCreateDirs]) then begin Result := False; Exit; end; if (NewName = '') then begin UseName := Item.FileName; AbUnfixName(UseName); if Item.IsDirectory then UseName := ExcludeTrailingPathDelimiter(UseName); if (not (eoRestorePath in ExtractOptions)) then UseName := ExtractFileName(UseName); end else UseName := NewName; if (AbGetPathType(UseName) <> ptAbsolute) then UseName := AbAddBackSlash(BaseDirectory) + UseName; Path := ExtractFileDir(UseName); if (Path <> '') and not mbDirectoryExists(Path) then if (eoCreateDirs in ExtractOptions) then AbCreateDirectory(Path) else raise EAbNoSuchDirectory.Create; Result := True; if not Item.IsDirectory and mbFileExists(UseName) then DoConfirmOverwrite(UseName, Result); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Delete(aItem : TAbArchiveItem); {delete an item from the archive} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then DeleteAt(Index); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteAt(Index : Integer); {delete the item at the index from the archive} var Confirm : Boolean; begin CheckValid; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptDelete, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaDelete; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteFiles(const FileMask : string); {delete all files from the archive that match the file mask} begin DeleteFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteFilesEx(const FileMask, ExclusionMask : string); {Delete files matching Filemask except those matching ExclusionMask} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) then if not MatchesStoredNameEx(ExclusionMask) then DeleteAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DeleteTaggedItems; {delete all tagged items from the archive} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if Tagged then DeleteAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoProcessItemFailure(Item : TAbArchiveItem; ProcessType : TAbProcessType; ErrorClass : TAbErrorClass; ErrorCode : Integer); begin if Assigned(FOnProcessItemFailure) then FOnProcessItemFailure(Self, Item, ProcessType, ErrorClass, ErrorCode); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveSaveProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveSaveProgress) then FOnArchiveSaveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveProgress) then FOnArchiveProgress(Self, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoArchiveItemProgress(Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); begin Abort := False; if Assigned(FOnArchiveItemProgress) then FOnArchiveItemProgress(Self, Item, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmOverwrite(var FileName : string; var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmOverwrite) then FOnConfirmOverwrite(FileName, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmProcessItem(Item : TAbArchiveItem; const ProcessType : TAbProcessType; var Confirm : Boolean); const ProcessTypeToLogType : array[TAbProcessType] of TAbLogType = (ltAdd, ltDelete, ltExtract, ltFreshen, ltMove, ltReplace, ltFoundUnhandled); begin Confirm := True; if Assigned(FOnConfirmProcessItem) then FOnConfirmProcessItem(Self, Item, ProcessType, Confirm); if (Confirm and FLogging) then MakeLogEntry(Item.Filename, ProcessTypeToLogType[ProcessType]); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoConfirmSave(var Confirm : Boolean); begin Confirm := True; if Assigned(FOnConfirmSave) then FOnConfirmSave(Self, Confirm); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoDeflateProgress(aPercentDone: integer); var Abort : Boolean; begin DoProgress(aPercentDone, Abort); if Abort then raise EAbAbortProgress.Create(AbUserAbortS); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoInflateProgress(aPercentDone: integer); var Abort : Boolean; begin DoProgress(aPercentDone, Abort); if Abort then raise EAbAbortProgress.Create(AbUserAbortS); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoLoad; begin if Assigned(FOnLoad) then FOnLoad(Self); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoProgress(Progress : Byte; var Abort : Boolean); begin Abort := False; DoArchiveItemProgress(FCurrentItem, Progress, Abort); end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoSave; begin if Assigned(FOnSave) then FOnSave(Self); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Extract(aItem : TAbArchiveItem; const NewName : string); {extract an item from the archive} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then ExtractAt(Index, NewName); end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractAt(Index : Integer; const NewName : string); {extract an item from the archive at Index} var Confirm : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; UseName : string; begin CheckValid; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptExtract, Confirm); if not Confirm then Exit; if not ConfirmPath(FItemList[Index], NewName, UseName) then Exit; try FCurrentItem := FItemList[Index]; ExtractItemAt(Index, UseName); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptExtract, ErrorClass, ErrorCode); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractToStream(const aFileName : string; aStream : TStream); {extract an item from the archive at Index directly to a stream} var Confirm : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; Index : Integer; begin CheckValid; Index := FindFile(aFileName); if (Index = -1) then Exit; SaveIfNeeded(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptExtract, Confirm); if not Confirm then Exit; FCurrentItem := FItemList[Index]; try ExtractItemToStreamAt(Index, aStream); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptExtract, ErrorClass, ErrorCode); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} begin ExtractFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractFilesEx(const FileMask, ExclusionMask : string); {Extract files matching Filemask except those matching ExclusionMask} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) and not MatchesStoredNameEx(ExclusionMask) and ((eoCreateDirs in ExtractOptions) or not IsDirectory) then ExtractAt(i, ''); DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ExtractTaggedItems; {extract all tagged items from the archive} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if Tagged then ExtractAt(i, ''); DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.TestTaggedItems; {test all tagged items in the archive} var i : Integer; Abort : Boolean; begin CheckValid; if Count > 0 then begin for i := 0 to pred(Count) do begin with TAbArchiveItem(FItemList[i]) do if Tagged then begin FCurrentItem := FItemList[i]; TestItemAt(i); end; DoArchiveProgress(AbPercentage(succ(i), Count), Abort); if Abort then raise EAbUserAbort.Create; end; DoArchiveProgress(100, Abort); end; end; { -------------------------------------------------------------------------- } function TAbArchive.FindFile(const aFileName : string): Integer; {find the index of the specified file} begin Result := FItemList.Find(aFileName); end; { -------------------------------------------------------------------------- } function TAbArchive.FindItem(aItem : TAbArchiveItem): Integer; {find the index of the specified item} begin Result := FItemList.Find(aItem.FileName); end; { -------------------------------------------------------------------------- } function TAbArchive.FixName(const Value : string) : string; var lValue: string; begin lValue := Value; {$IFDEF MSWINDOWS} if DOSMode then begin {Add the base directory to the filename before converting } {the file spec to the short filespec format. } if BaseDirectory <> '' then begin {Does the filename contain a drive or a leading backslash? } if not ((Pos(':', lValue) = 2) or (Pos(AbPathDelim, lValue) = 1)) then {If not, add the BaseDirectory to the filename.} lValue := AbAddBackSlash(BaseDirectory) + lValue; end; lValue := AbGetShortFileSpec(lValue); end; {$ENDIF} {strip drive stuff} if soStripDrive in StoreOptions then AbStripDrive(lValue); {check for a leading backslash} if lValue[1] = AbPathDelim then System.Delete(lValue, 1, 1); if soStripPath in StoreOptions then begin lValue := ExtractFileName(lValue); end; if soRemoveDots in StoreOptions then AbStripDots(lValue); Result := lValue; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Freshen(aItem : TAbArchiveItem); {freshen the item} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then begin FreshenAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenAt(Index : Integer); {freshen item at index} var Confirm : Boolean; FR : Boolean; ErrorClass : TAbErrorClass; ErrorCode : Integer; begin CheckValid; SaveIfNeeded(FItemList[Index]); GetFreshenTarget(FItemList[Index]); FR := False; try FR := FreshenRequired(FItemList[Index]); except on E : Exception do begin AbConvertException(E, ErrorClass, ErrorCode); DoProcessItemFailure(FItemList[Index], ptFreshen, ErrorClass, ErrorCode); end; end; if not FR then Exit; DoConfirmProcessItem(FItemList[Index], ptFreshen, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaFreshen; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenFiles(const FileMask : string); {freshen all items that match the file mask} begin FreshenFilesEx(FileMask, ''); end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenFilesEx(const FileMask, ExclusionMask : string); {freshen all items that match the file mask} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if MatchesStoredNameEx(FileMask) then if not MatchesStoredNameEx(ExclusionMask) then FreshenAt(i); end; end; end; { -------------------------------------------------------------------------- } function TAbArchive.FreshenRequired(Item : TAbArchiveItem) : Boolean; var FS : TFileStreamEx; DateTime : LongInt; FileTime : Word; FileDate : Word; Matched : Boolean; SaveDir : string; begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try FS := TFileStreamEx.Create(Item.DiskFileName, fmOpenRead or fmShareDenyWrite); try DateTime := FileGetDate(FS.Handle); FileTime := LongRec(DateTime).Lo; FileDate := LongRec(DateTime).Hi; Matched := (Item.LastModFileDate = FileDate) and (Item.LastModFileTime = FileTime) and (Item.UncompressedSize = FS.Size); Result := not Matched; finally FS.Free; end; finally if BaseDirectory <> '' then ChDir(SaveDir); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.FreshenTaggedItems; {freshen all tagged items} var i : Integer; begin CheckValid; if Count > 0 then begin for i := pred(Count) downto 0 do begin with TAbArchiveItem(FItemList[i]) do if Tagged then FreshenAt(i); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.GetFreshenTarget(Item : TAbArchiveItem); var PathType : TAbPathType; Files : TStrings; SaveDir : string; DName : string; begin PathType := AbGetPathType(Item.DiskFileName); if (soRecurse in StoreOptions) and (PathType = ptNone) then begin GetDir(0, SaveDir); if BaseDirectory <> '' then ChDir(BaseDirectory); try Files := TStringList.Create; try // even if archive supports empty folder we don't have to // freshen it because there is no data, although, the timestamp // can be update since the folder was added AbFindFiles(Item.FileName, faAnyFile and not faDirectory, Files, True); if Files.Count > 0 then begin DName := AbAddBackSlash(BaseDirectory) + Files[0]; AbUnfixName(DName); Item.DiskFileName := DName; end else Item.DiskFileName := ''; finally Files.Free; end; finally if BaseDirectory <> '' then ChDir(SaveDir); end; end else begin if (BaseDirectory <> '') then DName := AbAddBackSlash(BaseDirectory) + Item.FileName else if AbGetPathType(Item.DiskFileName) = ptAbsolute then DName := Item.DiskFileName else DName := Item.FileName; AbUnfixName(DName); Item.DiskFileName := DName; end; end; { -------------------------------------------------------------------------- } function TAbArchive.GetSpanningThreshold : Int64; begin Result := FSpanningThreshold; end; { -------------------------------------------------------------------------- } function TAbArchive.GetSupportsEmptyFolders : Boolean; begin Result := False; end; { -------------------------------------------------------------------------- } function TAbArchive.GetItemCount : Integer; begin if Assigned(FItemList) then Result := FItemList.Count else Result := 0; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Load; {load the archive} begin try LoadArchive; FStatus := asIdle; finally DoLoad; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.MakeLogEntry(const FN: string; LT : TAbLogType); const LogTypeRes : array[TAbLogType] of string = (AbLtAddS, AbLtDeleteS, AbLtExtractS, AbLtFreshenS, AbLtMoveS, AbLtReplaceS, AbLtStartS, AbUnhandledEntityS); var Buf : string; begin if Assigned(FLogStream) then begin Buf := FN + LogTypeRes[LT] + DateTimeToStr(Now) + sLineBreak; FLogStream.Write(Buf[1], Length(Buf) * SizeOf(Char)); end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.MakeFullNames(const SourceFileName: String; const ArchiveDirectory: String; out FullSourceFileName: String; out FullArchiveFileName: String); var PathType : TAbPathType; RelativeSourceFileName: String; begin PathType := AbGetPathType(SourceFileName); case PathType of ptNone, ptRelative : begin if FBaseDirectory <> '' then FullSourceFileName := AbAddBackSlash(FBaseDirectory) + SourceFileName else FullSourceFileName := SourceFileName; RelativeSourceFileName := SourceFileName; end; ptAbsolute : begin FullSourceFileName := SourceFileName; if FBaseDirectory <> '' then RelativeSourceFileName := ExtractRelativepath(AbAddBackSlash(FBaseDirectory), SourceFileName) else RelativeSourceFileName := ExtractFileName(SourceFileName); end; end; if ArchiveDirectory <> '' then FullArchiveFileName := AbAddBackSlash(ArchiveDirectory) + RelativeSourceFileName else FullArchiveFileName := RelativeSourceFileName; FullArchiveFileName := FixName(FullArchiveFileName); end; { -------------------------------------------------------------------------- } procedure TAbArchive.Move(aItem : TAbArchiveItem; const NewStoredPath : string); var Confirm : Boolean; Found : Boolean; i : Integer; FixedPath: string; begin CheckValid; FixedPath := FixName(NewStoredPath); Found := False; if Count > 0 then for i := 0 to pred(Count) do if (ItemList[i] <> aItem) and SameText(FixedPath, ItemList[i].FileName) and (ItemList[i].Action <> aaDelete) then begin Found := True; Break; end; if Found then begin DoProcessItemFailure(aItem, ptMove, ecAbbrevia, AbDuplicateName); {even if something gets done in the AddItemFailure, we don't want to continue...} Exit; end; SaveIfNeeded(aItem); DoConfirmProcessItem(aItem, ptMove, Confirm); if not Confirm then Exit; with aItem do begin FileName := FixedPath; Action := aaMove; end; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Replace(aItem : TAbArchiveItem); {replace the item} var Index : Integer; begin CheckValid; Index := FindItem(aItem); if Index <> -1 then begin ReplaceAt(Index); {point existing item at the new file} if AbGetPathType(aItem.DiskFileName) = ptAbsolute then FItemList[Index].DiskFileName := aItem.DiskFileName; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.ReplaceAt(Index : Integer); {replace item at Index} var Confirm : Boolean; begin CheckValid; SaveIfNeeded(FItemList[Index]); GetFreshenTarget(FItemList[Index]); DoConfirmProcessItem(FItemList[Index], ptReplace, Confirm); if not Confirm then Exit; TAbArchiveItem(FItemList[Index]).Action := aaReplace; FIsDirty := True; if AutoSave then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.Save; {save the archive} var Confirm : Boolean; begin if Status = asInvalid then Exit; if not FIsDirty then Exit; DoConfirmSave(Confirm); if not Confirm then Exit; SaveArchive; FIsDirty := False; DoSave; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SaveIfNeeded(aItem : TAbArchiveItem); begin if (aItem.Action <> aaNone) then Save; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetBaseDirectory(Value : string); begin if (Value <> '') then if Value[Length(Value)] = AbPathDelim then if (Length(Value) > 1) and (Value[Length(Value) - 1] <> ':') then System.Delete(Value, Length(Value), 1); if (Length(Value) = 0) or mbDirectoryExists(Value) then FBaseDirectory := Value else raise EAbNoSuchDirectory.Create; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetSpanningThreshold( Value : Int64 ); begin FSpanningThreshold := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetLogFile(const Value : string); begin FLogFile := Value; end; { -------------------------------------------------------------------------- } procedure TAbArchive.SetLogging(Value : Boolean); begin FLogging := Value; if Assigned(FLogStream) then begin FLogStream.Free; FLogStream := nil; end; if FLogging and (FLogFile <> '') then begin try FLogStream := TFileStream.Create(FLogFile, fmCreate or fmOpenWrite); MakeLogEntry(FArchiveName, ltStart); except raise EAbException.Create(AbLogCreateErrorS); end; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.TagItems(const FileMask : string); {tag all items that match the mask} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do with TAbArchiveItem(FItemList[i]) do begin if MatchesStoredNameEx(FileMask) then Tagged := True; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.UnTagItems(const FileMask : string); {clear tags for all items that match the mask} var i : Integer; begin if Count > 0 then for i := 0 to pred(Count) do with TAbArchiveItem(FItemList[i]) do begin if MatchesStoredNameEx(FileMask) then Tagged := False; end; end; { -------------------------------------------------------------------------- } procedure TAbArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin raise EAbSpanningNotSupported.Create; end; { -------------------------------------------------------------------------- } function TAbArchive.CreateItem(const FileSpec : string): TAbArchiveItem; begin // This function is used by Abbrevia. We don't use it but a dummy // definition is needed for the code to compile successfully. raise Exception.Create(''); end; { -------------------------------------------------------------------------- } { TAbExtraField implementation ============================================= } procedure TAbExtraField.Assign(aSource : TAbExtraField); begin SetBuffer(aSource.Buffer); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Changed; begin // No-op end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Clear; begin FBuffer := nil; Changed; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.CloneFrom(aSource : TAbExtraField; aID : Word); var Data : Pointer; DataSize : Word; begin if aSource.Get(aID, Data, DataSize) then Put(aID, Data, DataSize) else Delete(aID); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Delete(aID : Word); var SubField : PAbExtraSubField; begin if FindField(aID, SubField) then begin DeleteField(SubField); Changed; end; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.DeleteField(aSubField : PAbExtraSubField); var Len, Offset : Integer; begin Len := SizeOf(TAbExtraSubField) + aSubField.Len; Offset := Pointer(aSubField) - Pointer(FBuffer); if Offset + Len < Length(FBuffer) then Move(FBuffer[Offset + Len], aSubField^, Length(FBuffer) - Offset - Len); SetLength(FBuffer, Length(FBuffer) - Len); end; { -------------------------------------------------------------------------- } function TAbExtraField.FindField(aID : Word; out aSubField : PAbExtraSubField) : Boolean; begin Result := False; aSubField := nil; while FindNext(aSubField) do if aSubField.ID = aID then begin Result := True; Break; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.FindNext(var aCurField : PAbExtraSubField) : Boolean; var BytesLeft : Integer; begin if aCurField = nil then begin aCurField := PAbExtraSubField(FBuffer); BytesLeft := Length(FBuffer); end else begin BytesLeft := Length(FBuffer) - (Pointer(aCurField) - Pointer(FBuffer)) - SizeOf(TAbExtraSubField) - aCurField.Len; Inc(Pointer(aCurField), aCurField.Len + SizeOf(TAbExtraSubField)); end; Result := (BytesLeft >= SizeOf(TAbExtraSubField)); if Result and (BytesLeft < SizeOf(TAbExtraSubField) + aCurField.Len) then aCurField.Len := BytesLeft - SizeOf(TAbExtraSubField); end; { -------------------------------------------------------------------------- } function TAbExtraField.Get(aID : Word; out aData : Pointer; out aDataSize : Word) : Boolean; var SubField : PAbExtraSubField; begin Result := FindField(aID, SubField); if Result then begin aData := @SubField.Data; aDataSize := SubField.Len; end else begin aData := nil; aDataSize := 0; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.GetCount : Integer; var SubField : PAbExtraSubField; begin Result := 0; SubField := nil; while FindNext(SubField) do Inc(Result); end; { -------------------------------------------------------------------------- } function TAbExtraField.GetID(aIndex : Integer): Word; var i: Integer; SubField : PAbExtraSubField; begin i := 0; SubField := nil; while FindNext(SubField) do if i = aIndex then begin Result := SubField.ID; Exit; end else Inc(i); raise EListError.CreateFmt(SListIndexError, [aIndex]); end; { -------------------------------------------------------------------------- } function TAbExtraField.GetStream(aID : Word; out aStream : TStream): Boolean; var Data: Pointer; DataSize: Word; begin Result := Get(aID, Data, DataSize); if Result then begin aStream := TMemoryStream.Create; aStream.WriteBuffer(Data^, DataSize); aStream.Position := 0; end; end; { -------------------------------------------------------------------------- } function TAbExtraField.Has(aID : Word): Boolean; var SubField : PAbExtraSubField; begin Result := FindField(aID, SubField); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.LoadFromStream(aStream : TStream; aSize : Word); begin SetLength(FBuffer, aSize); if aSize > 0 then aStream.ReadBuffer( FBuffer[0], aSize); end; { -------------------------------------------------------------------------- } procedure TAbExtraField.Put(aID : Word; const aData; aDataSize : Word); var Offset : Cardinal; SubField : PAbExtraSubField; begin if FindField(aID, SubField) then begin if SubField.Len = aDataSize then begin Move(aData, SubField.Data, aDataSize); Changed; Exit; end else DeleteField(SubField); end; Offset := Length(FBuffer); SetLength(FBuffer, Length(FBuffer) + SizeOf(TAbExtraSubField) + aDataSize); SubField := PAbExtraSubField(@FBuffer[Offset]); SubField.ID := aID; SubField.Len := aDataSize; Move(aData, SubField.Data, aDataSize); Changed; end; { -------------------------------------------------------------------------- } procedure TAbExtraField.SetBuffer(const aValue : TByteDynArray); begin SetLength(FBuffer, Length(aValue)); if Length(FBuffer) > 0 then Move(aValue[0], FBuffer[0], Length(FBuffer)); Changed; end; { -------------------------------------------------------------------------- } { ========================================================================== } { TAbArchiveStreamHelper } constructor TAbArchiveStreamHelper.Create(AStream: TStream); begin if Assigned(AStream) then FStream := AStream else raise Exception.Create('nil stream'); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfenc.pas�����������������������������������������������0000644�0001750�0000144�00000073717�12411334107�021652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfEnc.pas *} {*********************************************************} {* Deflate encoding unit *} {*********************************************************} unit AbDfEnc; {$I AbDefine.inc} interface uses Classes, AbDfBase; function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; implementation uses AbDfInW, AbDfHufD, AbDfStrm, AbDfCryS, AbDfPkMg; {====================================================================} function CalcDynamicBitCount(aUseDeflate64: boolean; aLitBuckets : PAbDfLitBuckets; aDistBuckets : PAbDfDistBuckets; aCodeBuckets : PAbDfCodeLenBuckets; const aCodeLens : array of integer; const aCLCodeLens : array of integer; aLitCount : integer; aDistCount : integer; aCodeCount : integer) : longint; var Symbol : integer; LastSymbol : integer; Inx : integer; begin {note: this routine calculates the number of bits required to compress a given block} {a dynamic block starts off with 5 bits of literal symbol count, 5 bits of distance symbol count, 4 bits of codelength symbol count, and then 3 bits for every codelength symbol used} Result := 5 + 5 + 4 + (aCodeCount * 3); {add in the bits needed to compress the literal and distance trees} inc(Result, aCodeBuckets^[16] * (aCLCodeLens[16] + 2)); inc(Result, aCodeBuckets^[17] * (aCLCodeLens[16] + 3)); inc(Result, aCodeBuckets^[18] * (aCLCodeLens[16] + 7)); for Symbol := 3 to pred(aCodeCount) do begin Inx := dfc_CodeLengthIndex[Symbol]; Assert(Inx <=15, 'CalcDynamicBitCount: the index array of codelengths is corrupted'); inc(Result, aCodeBuckets^[Inx] * aCLCodeLens[Inx]) end; {make the literal symbol 285 a special case} LastSymbol := pred(aLitCount); if (LastSymbol = 285) then LastSymbol := 284; {add in all the bits needed to compress the literals (except 285)} for Symbol := 0 to LastSymbol do if (Symbol < dfc_LitExtraOffset) then inc(Result, aLitBuckets^[Symbol] * aCodeLens[Symbol]) else inc(Result, aLitBuckets^[Symbol] * (aCodeLens[Symbol] + dfc_LitExtraBits[Symbol - dfc_LitExtraOffset])); {add in all the bits needed to compress the literal symbol 285} if (pred(aLitCount) = 285) then if (not aUseDeflate64) then inc(Result, aLitBuckets^[285] * aCodeLens[285]) else inc(Result, aLitBuckets^[285] * (aCodeLens[285] + 16)); {add in all the bits needed to compress the distances} for Symbol := 0 to pred(aDistCount) do inc(Result, aDistBuckets^[Symbol] * (aCodeLens[aLitCount + Symbol] + dfc_DistExtraBits[Symbol])); end; {====================================================================} {====================================================================} procedure OutputEndOfBlock(aBitStrm : TAbDfOutBitStream; aLitTree : TAbDfDecodeHuffmanTree); var Code : longint; begin {note: this routine encodes the end-of-block character (symbol 256) and then writes out the code to the bit stream} {encode the end-of-block character as a symbol} {$IFOPT C+} {if Assertions are on } Code := aLitTree.Encode(256); {$ELSE} Code := aLitTree.Encodes^[256]; {$ENDIF} {write the code out to the bit stream} aBitStrm.WriteBits(Code and $FFFF, (Code shr 16) and $FF); end; {--------} procedure EncodeLZStreamStored(aFinalBlock : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aDataSize : integer; aLog : TAbLogger); var BlockHeader : packed record bhSize : word; bhNotSize : word; end; Buffer : pointer; Code : integer; BlockSize : integer; begin {note: this routine writes out an incompressible block to the bit stream (the store algorithm)} {allocate the maximum buffer we can write at once} GetMem(Buffer, 64 * 1024); try {while there's more incompressible data to store...} while (aDataSize <> 0) do begin {calculate the block size to write this time} if (aDataSize > $FFFF) then begin BlockSize := $FFFF; dec(aDataSize, $FFFF); end else begin BlockSize := aDataSize; aDataSize := 0; end; {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 0'); aLog.WriteLine(Format('..block size: %d', [BlockSize])); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (0 shl 1) else Code := 0 + (0 shl 1); aBitStrm.WriteBits(Code, 3); {align the bit stream to the nearest byte} aBitStrm.AlignToByte; {write the stored block header} BlockHeader.bhSize := BlockSize; BlockHeader.bhNotSize := not BlockHeader.bhSize; aBitStrm.WriteBuffer(BlockHeader, sizeof(BlockHeader)); {get and write this block} aStream.ReadStoredBuffer(Buffer^, BlockSize); aBitStrm.WriteBuffer(Buffer^, BlockSize); end; finally FreeMem(Buffer); end; {clear the stream, ready for the next block} aStream.Clear; end; {--------} procedure EncodeLZStreamStatic(aFinalBlock : boolean; aUseDeflate64 : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aLog : TAbLogger); var Code : integer; begin {note: this routine writes out the stream of LZ77 tokens for the current block to the bit stream, using the static huffman trees to encode the token symbols} {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 1'); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (1 shl 1) else Code := 0 + (1 shl 1); aBitStrm.WriteBits(Code, 3); {encode the LZ77 stream} aStream.Encode(aBitStrm, AbStaticLiteralTree, AbStaticDistanceTree, aUseDeflate64); {output the end-of-block marker to the bit stream} OutputEndOfBlock(aBitStrm, AbStaticLiteralTree); {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('Char: end-of-block marker (#256)'); {$ENDIF} end; {--------} procedure EncodeLZStreamDynamic(aFinalBlock : boolean; aUseDeflate64 : boolean; aUseBest : boolean; aStream : TAbDfLZStream; aBitStrm : TAbDfOutBitStream; aLog : TAbLogger); var i : integer; LitTree : TAbDfDecodeHuffmanTree; DistTree : TAbDfDecodeHuffmanTree; CodeLenTree : TAbDfDecodeHuffmanTree; CodeLenStream : TAbDfCodeLenStream; CodeLens : array [0..285+32] of integer; CLCodeLens : array [0..18] of integer; LitCodeCount : integer; DistCodeCount : integer; LenCodeCount : integer; BitCount : integer; Code : integer; StaticSize : integer; StoredSize : integer; begin {note: this routine writes out the stream of LZ77 tokens for the current block to the bit stream, using the dynamic huffman trees to encode the token symbols; if the routine determines that the data can better be compressed using the static huffman trees or should be stored as is, it'll switch algorithms} {prepare for the try..finally} LitTree := nil; DistTree := nil; CodeLenTree := nil; CodeLenStream := nil; try {calculate the code lengths for the literal symbols} GenerateCodeLengths(15, aStream.LitBuckets^, CodeLens, 0, aLog); {calculate the number of the used codelengths for the literals} LitCodeCount := 286; repeat dec(LitCodeCount); until (CodeLens[LitCodeCount] <> 0); inc(LitCodeCount); {calculate the code lengths for the distance symbols} GenerateCodeLengths(15, aStream.DistBuckets^, CodeLens, LitCodeCount, aLog); {calculate the number of the used codelengths for the distances} DistCodeCount := 32; repeat dec(DistCodeCount); until (CodeLens[DistCodeCount + LitCodeCount] <> 0); inc(DistCodeCount); {calculate the code lengths array as a stream of items} CodeLenStream := TAbDfCodeLenStream.Create(aLog); CodeLenStream.Build(CodeLens, LitCodeCount + DistCodeCount); {calculate the codelengths for the code lengths} GenerateCodeLengths(7, CodeLenStream.Buckets^, CLCodeLens, 0, nil); {calculate the number of the used codelengths for the code lengths} LenCodeCount := 19; repeat dec(LenCodeCount); until (CLCodeLens[dfc_CodeLengthIndex[LenCodeCount]] <> 0); inc(LenCodeCount); {..there's a minimum of four, though} if (LenCodeCount < 4) then LenCodeCount := 4; {if we have to work out and use the best method...} if aUseBest then begin {calculate the number of bits required for the compressed data using dynamic huffman trees} BitCount := CalcDynamicBitCount(aUseDeflate64, aStream.LitBuckets, aStream.DistBuckets, CodeLenStream.Buckets, CodeLens, CLCodeLens, LitCodeCount, DistCodeCount, LenCodeCount); {choose the algorithm with the smallest size} StaticSize := aStream.StaticSize; StoredSize := (aStream.StoredSize + 4) * 8; if (StaticSize < BitCount) then begin if (StoredSize < StaticSize) then EncodeLZStreamStored(aFinalBlock, aStream, aBitStrm, (StoredSize div 8) - 4, aLog) else EncodeLZStreamStatic(aFinalBlock, aUseDeflate64, aStream, aBitStrm, aLog); Exit; end else if (StoredSize < BitCount) then begin EncodeLZStreamStored(aFinalBlock, aStream, aBitStrm, (StoredSize div 8) - 4, aLog); Exit; end; end; {create the code lengths tree} CodeLenTree := TAbDfDecodeHuffmanTree.Create(19, 7, huEncoding); CodeLenTree.Build(CLCodeLens, 0, 19, [0], $FFFF); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Code lengths tree'); CodeLenTree.DebugPrint(aLog); end; {$ENDIF} {calculate the literal encoding tree} LitTree := TAbDfDecodeHuffmanTree.Create(286, 15, huEncoding); LitTree.Build(CodeLens, 0, LitCodeCount, dfc_LitExtraBits, dfc_LitExtraOffset); {$IFDEF UseLogging} {log the tree} if (aLog <> nil) then begin aLog.WriteLine('Literal/length tree'); LitTree.DebugPrint(aLog); end; {$ENDIF} {calculate the distance tree} if aUseDeflate64 then DistTree := TAbDfDecodeHuffmanTree.Create(32, 15, huEncoding) else DistTree := TAbDfDecodeHuffmanTree.Create(30, 15, huEncoding); DistTree.Build(CodeLens, LitCodeCount, DistCodeCount, dfc_DistExtraBits, dfc_DistExtraOffset); {$IFDEF UseLogging} if (aLog <> nil) then begin {log the tree} aLog.WriteLine('Distance tree'); DistTree.DebugPrint(aLog); {log the new block} aLog.WriteLine('..Writing new block...'); aLog.WriteLine(Format('..final block? %d', [ord(aFinalBlock)])); aLog.WriteLine('..block type? 2'); aLog.WriteLine(Format('Count of literals: %d', [LitCodeCount])); aLog.WriteLine(Format('Count of distances: %d', [DistCodeCount])); aLog.WriteLine(Format('Count of code lengths: %d', [LenCodeCount])); end; {$ENDIF} {output the block information to the bit stream} if aFinalBlock then Code := 1 + (2 shl 1) else Code := 0 + (2 shl 1); aBitStrm.WriteBits(Code, 3); {output the various counts to the bit stream} Code := (LitCodeCount - 257) + ((DistCodeCount - 1) shl 5) + ((LenCodeCount - 4) shl 10); aBitStrm.WriteBits(Code, 14); {output the code length codelengths to the bit stream} for i := 0 to pred(LenCodeCount) do aBitStrm.WriteBits(CLCodeLens[dfc_CodeLengthIndex[i]], 3); {encode and write the codelength stream to the bit stream} CodeLenStream.Encode(aBitStrm, CodeLenTree); {encode and write the LZ77 stream to the bit stream} aStream.Encode(aBitStrm, LitTree, DistTree, aUseDeflate64); {output the end-of-block marker to the bit stream} OutputEndOfBlock(aBitStrm, LitTree); {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('Char: end-of-block marker (#256)'); {$ENDIF} finally LitTree.Free; DistTree.Free; CodeLenTree.Free; CodeLenStream.Free; end; end; {====================================================================} {===Single algorithm Static/Dynamic Huffman tree deflate=============} function DeflateStaticDynamic(aStatic : boolean; aUseBest: boolean; aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper; aLog : TAbLogger) : longint; var i : integer; SlideWin : TAbDfInputWindow; BitStrm : TAbDfOutBitStream; LZ77Stream : TAbDfLZStream; KeyLen : integer; Match : TAbDfMatch; PrevMatch : TAbDfMatch; UseDeflate64 : boolean; UseCRC32 : boolean; GotMatch : boolean; LZStrmIsFull : boolean; TestForBinary: boolean; begin {note: turn on the following define to see when and how the lazy matching algorithm works} {$IFDEF UseLogging} {$DEFINE UseLazyMatchLogging} {$ENDIF} {$IFDEF UseLogging} if (aLog <> nil) then if aStatic then aLog.WriteLine('..compressing source data with static huffman trees') else aLog.WriteLine('..compressing source data with dynamic huffman trees'); {$ENDIF} {prepare for the try..finally} SlideWin := nil; BitStrm := nil; LZ77Stream := nil; try {create the sliding window} UseDeflate64 := (aHelper.Options and dfc_UseDeflate64) <> 0; UseCRC32 := (aHelper.Options and dfc_UseAdler32) = 0; SlideWin := TAbDfInputWindow.Create(aSource, aHelper.StreamSize, aHelper.WindowSize, aHelper.ChainLength, UseDeflate64, UseCRC32); SlideWin.OnProgress := aHelper.OnProgressStep; {create the bit stream} BitStrm := TAbDfOutBitStream.Create(aDest); {create the LZ77 stream} LZ77Stream := TAbDfLZStream.Create(SlideWin, UseDeflate64, aLog); LZStrmIsFull := false; TestForBinary := true; {set the previous match to be a literal character: this will ensure that no lazy matching goes on with the first key read} PrevMatch.maLen := 0; {get the first key length} KeyLen := SlideWin.GetNextKeyLength; {while the current key is three characters long...} while (KeyLen = 3) do begin {tweak for binary/text} {note: the test for whether a stream is binary or not is to check whether there are any #0 characters in the first 1024 bytes: if there are the stream is binary. this test and tweaking is based on experimentation compression ratios for binary and text files based on the PKZIP 'n' option.} if TestForBinary and (LZ77Stream.StoredSize = 1024) then begin if (aHelper.PKZipOption = 'n') then if (LZ77Stream.LitBuckets^[0] = 0) then begin aHelper.AmpleLength := aHelper.AmpleLength * 2; aHelper.MaxLazyLength := aHelper.MaxLazyLength * 2; aHelper.ChainLength := aHelper.ChainLength * 2; SlideWin.ChainLen := aHelper.ChainLength; end; TestForBinary := false; end; {if the LZ77 stream is full, empty it} if LZStrmIsFull then begin if aStatic then EncodeLZStreamStatic(false, UseDeflate64, LZ77Stream, BitStrm, aLog) else EncodeLZStreamDynamic(false, UseDeflate64, aUseBest, LZ77Stream, BitStrm, aLog); LZ77Stream.Clear; LZStrmIsFull := false; end; {try and find a match of three or more characters (note: this has the side effect of adding the current key to the internal hash table); this routine will only return true if it finds a match greater than the previous match} GotMatch := SlideWin.FindLongestMatch(aHelper.AmpleLength, Match, PrevMatch); {if the maximum match length were three and the distance exceeds 4096 bytes, it's most likely that we'll get better compression by outputting the three literal bytes rather than by outputting a length symbol, a distance symbol, and at least ten extra bits for the extra distance value} if (Match.maLen = 3) and (Match.maDist > 4096) then GotMatch := false; {if we found a match...} if GotMatch then begin {if there were no previous match, we can't do any lazy match processing now, so save the current match details ready for lazy matching the next time through, and advance the sliding window} if (PrevMatch.maLen = 0) then begin PrevMatch.maLen := Match.maLen; PrevMatch.maDist := Match.maDist; PrevMatch.maLit := Match.maLit; SlideWin.AdvanceByOne; end {otherwise the previous match is smaller than this one, so we're going to accept this match in preference; throw away the previous match, output the previous literal character instead and save these match details} else begin {$IFDEF UseLazyMatchLogging} if (aLog <> nil) then aLog.WriteLine( Format( '..this match longer, rejecting previous one (%d,%d)', [PrevMatch.maLen, PrevMatch.maDist])); {$ENDIF} LZStrmIsFull := LZ77Stream.AddLiteral(PrevMatch.maLit); PrevMatch.maLen := Match.maLen; PrevMatch.maDist := Match.maDist; PrevMatch.maLit := Match.maLit; SlideWin.AdvanceByOne; end; {if, by this point, we're storing up a match, check to see if it equals or exceeds the maximum lazy match length; if it does then output the match right now and avoid checking for a lazy match} if (PrevMatch.maLen >= aHelper.MaxLazyLength) then begin {$IFDEF UseLazyMatchLogging} if (aLog <> nil) then if ((aHelper.Options and dfc_UseLazyMatch) <> 0) then aLog.WriteLine('..match longer than max lazy match, using it'); {$ENDIF} LZStrmIsFull := LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); SlideWin.Advance(PrevMatch.maLen - 1, PrevMatch.maLen - 1); PrevMatch.maLen := 0; end; end {otherwise, we don't have a match at all: so we possibly just need to output a literal character} else begin {if there was a previous match, output it and discard the results of this match} if (PrevMatch.maLen <> 0) then begin LZStrmIsFull := LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); SlideWin.Advance(PrevMatch.maLen - 1, PrevMatch.maLen - 2); PrevMatch.maLen := 0; end {otherwise there was no previous match or it's already been output, so output this literal} else begin LZStrmIsFull := LZ77Stream.AddLiteral(Match.maLit); SlideWin.AdvanceByOne; PrevMatch.maLen := 0; end; end; {get the next key} KeyLen := SlideWin.GetNextKeyLength; end; {if the last key read were one or two characters in length, save them as literal character encodings} if (KeyLen > 0) then begin {if there's a match pending, it'll be of length 3: output it} if (PrevMatch.maLen <> 0) then begin Assert(PrevMatch.maLen = 3, 'DeflateStaticDynamic: previous match should be length 3'); LZ77Stream.AddLenDist(PrevMatch.maLen, PrevMatch.maDist); end {otherwise, output the one or two final literals} else for i := 1 to KeyLen do LZ77Stream.AddLiteral(SlideWin.GetNextChar); end; {empty the LZ77 stream} if aStatic then EncodeLZStreamStatic(true, UseDeflate64, LZ77Stream, BitStrm, aLog) else EncodeLZStreamDynamic(true, UseDeflate64, aUseBest, LZ77Stream, BitStrm, aLog); {calculate the checksum of the input stream} Result := SlideWin.Checksum; finally {free the objects} SlideWin.Free; BitStrm.Free; LZ77Stream.Free; end;{try..finally} {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..checksum: %8x', [Result])) {$ENDIF} end; {====================================================================} {===Simple storing===================================================} function DeflateStored(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper; aLog : TAbLogger) : longint; const StoredBlockSize = $FFFF; var Buffer : PAnsiChar; BytesRead : LongWord; ByteCount : Int64; BytesToGo : Int64; CurPos : Int64; Size : Int64; Percent : longint; CheckSum : longint; UseCRC32 : boolean; BlockHeader : packed record bhInfo : byte; bhSize : word; bhNotSize : word; end; begin {note: this routine merely stores the aSource stream data, no compression is attempted or done} {$IFDEF UseLogging} if (aLog <> nil) then aLog.WriteLine('..storing source data to destination, no compression'); {$ENDIF} {initialize} ByteCount := 0; UseCRC32 := (aHelper.Options and dfc_UseAdler32) = 0; if UseCRC32 then Checksum := -1 { CRC32 starts off with all bits set} else CheckSum := 1; { Adler32 starts off with a value of 1} if (aHelper.StreamSize > 0) then BytesToGo := aHelper.StreamSize else begin CurPos := aSource.Seek(0, soCurrent); Size := aSource.Seek(0, soEnd); aSource.Seek(CurPos, soBeginning); BytesToGo := Size - CurPos; end; {get a buffer} GetMem(Buffer, StoredBlockSize); try {while there is still data to be stored...} while (BytesToGo <> 0) do begin {read the next block} BytesRead := aSource.Read(Buffer^, StoredBlockSize); {fire the progress event} if Assigned(aHelper.OnProgressStep) then begin inc(ByteCount, BytesRead); Percent := Round((100.0 * ByteCount) / aHelper.StreamSize); aHelper.OnProgressStep(Percent); end; {update the checksum} if UseCRC32 then AbUpdateCRCBuffer(Checksum, Buffer^, BytesRead) else AbUpdateAdlerBuffer(Checksum, Buffer^, BytesRead); {write the block header} if (BytesRead = BytesToGo) then BlockHeader.bhInfo := 1 {ie, final block, stored} else BlockHeader.bhInfo := 0; {ie, not final block, stored} BlockHeader.bhSize := BytesRead; BlockHeader.bhNotSize := not BlockHeader.bhSize; aDest.WriteBuffer(BlockHeader, sizeof(BlockHeader)); {write the block of data} aDest.WriteBuffer(Buffer^, BytesRead); {$IFDEF UseLogging} {log it} if (aLog <> nil) then begin if (BlockHeader.bhInfo = 0) then aLog.WriteLine(Format('..block size: %d', [BytesRead])) else aLog.WriteLine(Format('..block size: %d (final block)', [BytesRead])); end; {$ENDIF} {decrement the number of bytes to go} dec(BytesToGo, BytesRead); end; finally FreeMem(Buffer); end; {return the checksum} {note: the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if UseCRC32 then Result := not Checksum else Result := Checksum; {$IFDEF UseLogging} {log it} if (aLog <> nil) then aLog.WriteLine(Format('..checksum: %8x', [Result])) {$ENDIF} end; {====================================================================} {===Interfaced routine===============================================} function Deflate(aSource : TStream; aDest : TStream; aHelper : TAbDeflateHelper) : longint; var Helper : TAbDeflateHelper; Log : TAbLogger; SourceStartPos : longint; DestStartPos : longint; begin {pre-conditions: streams are allocated, options enable some kind of archiving} Assert(aSource <> nil, 'Deflate: aSource stream cannot be nil'); Assert(aDest <> nil, 'Deflate: aDest stream cannot be nil'); Assert((aHelper = nil) or ((aHelper.Options and $07) <> 0), 'Deflate: aHelper.Options must enable some kind of archiving'); {$IFDEF DefeatWarnings} Result := 0; {$ENDIF} {prepare for the try..finally} Helper := nil; Log := nil; try {finally} try {except} {create our helper; assign the passed one to it} Helper := TAbDeflateHelper.Create; if (aHelper <> nil) then Helper.Assign(aHelper); {save the current positions of both streams} SourceStartPos := aSource.Position; DestStartPos := aDest.Position; {if the helper's stream size is -1, and it has a progress event handler, calculate the stream size from the stream itself} if Assigned(Helper.OnProgressStep) then begin if (Helper.StreamSize = -1) then Helper.StreamSize := aSource.Size; end {otherwise we certainly can't do any progress reporting} else begin Helper.OnProgressStep := nil; Helper.StreamSize := 0; end; {if lazy matching is not requested, ensure the maximum lazy match length is zero: this make the LZ77 code a little easier to understand} if ((Helper.Options and dfc_UseLazyMatch) = 0) then Helper.MaxLazyLength := 0; {patch up the various lengths in the helper if they specify the maximum (that is, are equal to -1)} if (Helper.AmpleLength = -1) then Helper.AmpleLength := MaxLongInt; if (Helper.MaxLazyLength = -1) then Helper.MaxLazyLength := MaxLongInt; if (Helper.ChainLength = -1) then Helper.ChainLength := MaxLongInt; {create the logger, if requested} if (Helper.LogFile <> '') then begin Log := TAbLogger.Create(Helper.LogFile); Log.WriteLine('DEFLATING STREAM...'); {$IFNDEF UseLogging} Log.WriteLine('Need to recompile the app with UseLogging turned on'); {$ENDIF} end; {use the helper's options property to decide what to do} case (Helper.Options and $07) of dfc_CanUseStored : Result := DeflateStored(aSource, aDest, Helper, Log); dfc_CanUseStatic : Result := DeflateStaticDynamic(true, false, aSource, aDest, Helper, Log); dfc_CanUseDynamic : Result := DeflateStaticDynamic(false, false, aSource, aDest, Helper, Log); else Result := DeflateStaticDynamic(false, true, aSource, aDest, Helper, Log); end; {save the uncompressed and compressed sizes} if (aHelper <> nil) then begin aHelper.NormalSize := aSource.Position - SourceStartPos; aHelper.CompressedSize := aDest.Position - DestStartPos; end; except on E : EAbInternalDeflateError do begin {$IFDEF UseLogging} if (Log <> nil) then Log.WriteLine(Format('Internal exception raised: %s', [E.Message])); {$ENDIF} raise EAbDeflateError.Create(E.Message); end; else raise; end; finally Helper.Free; Log.Free; end; {WARNING NOTE: the compiler will warn that the return value of this function might be undefined. However, it is wrong: it has been fooled by the code. If you don't want to see this warning again, enable the DefeatWarnings compiler define in AbDefine.inc.} end; {====================================================================} end. �������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abzipkit.pas����������������������������������������������0000644�0001750�0000144�00000023047�12014201074�022067� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbZipKit.pas *} {*********************************************************} {* ABBREVIA: TABZipKit component *} {*********************************************************} unit AbZipKit; {$I AbDefine.inc} interface uses Classes, AbZipper, AbArcTyp, AbZipTyp; type TAbCustomZipKit = class(TAbCustomZipper) protected {private} FExtractOptions : TAbExtractOptions; FOnConfirmOverwrite : TAbConfirmOverwriteEvent; FOnNeedPassword : TAbNeedPasswordEvent; FPasswordRetries : Byte; protected {methods} procedure DoConfirmOverwrite(var Name : string; var Confirm : Boolean); virtual; procedure DoNeedPassword(Sender : TObject; var NewPassword : AnsiString); virtual; procedure InitArchive; override; procedure SetExtractOptions(Value : TAbExtractOptions); procedure SetPasswordRetries(Value : Byte); procedure UnzipProc(Sender : TObject; Item : TAbArchiveItem; const NewName : string ); procedure UnzipToStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); procedure TestItemProc(Sender : TObject; Item : TAbArchiveItem); protected {properties} property ExtractOptions : TAbExtractOptions read FExtractOptions write SetExtractOptions default AbDefExtractOptions; property PasswordRetries : Byte read FPasswordRetries write SetPasswordRetries default AbDefPasswordRetries; protected {events} property OnConfirmOverwrite : TAbConfirmOverwriteEvent read FOnConfirmOverwrite write FOnConfirmOverwrite; property OnNeedPassword : TAbNeedPasswordEvent read FOnNeedPassword write FOnNeedPassword; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; procedure ExtractAt(Index : Integer; const NewName : string); procedure ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} procedure ExtractFilesEx(const FileMask, ExclusionMask : string); {extract files matching FileMask except those matching ExclusionMask} procedure ExtractTaggedItems; {extract all tagged items from the archive} procedure ExtractToStream(const aFileName : string; ToStream : TStream); {extract the specified item to TStream descendant} procedure TestTaggedItems; {test all tagged items in the archive} public {property} property Spanned; end; TAbZipKit = class(TAbCustomZipKit) published property ArchiveProgressMeter; property ArchiveSaveProgressMeter; property AutoSave; property BaseDirectory; property CompressionMethodToUse; property DeflationOption; {$IFDEF MSWINDOWS} property DOSMode; {$ENDIF} property ExtractOptions; property SpanningThreshold; property ItemProgressMeter; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveSaveProgress; property OnArchiveItemProgress; property OnChange; property OnConfirmOverwrite; property OnConfirmProcessItem; property OnConfirmSave; property OnLoad; property OnNeedPassword; property OnProcessItemFailure; property OnRequestBlankDisk; property OnRequestImage; property OnRequestLastDisk; property OnRequestNthDisk; property OnSave; property Password; property PasswordRetries; property StoreOptions; property TempDirectory; property Version; property FileName; {must be after OnLoad} end; implementation uses AbExcept, AbUnzPrc, AbZBrows; { -------------------------------------------------------------------------- } constructor TAbCustomZipKit.Create( AOwner : TComponent ); begin inherited Create( AOwner ); PasswordRetries := AbDefPasswordRetries; end; { -------------------------------------------------------------------------- } destructor TAbCustomZipKit.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.DoConfirmOverwrite( var Name : string; var Confirm : Boolean ); begin Confirm := True; if Assigned( FOnConfirmOverwrite ) then FOnConfirmOverwrite( Name, Confirm ); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.DoNeedPassword( Sender : TObject; var NewPassword : AnsiString ); begin if Assigned( FOnNeedPassword ) then begin FOnNeedPassword( Self, NewPassword ); FPassword := NewPassword; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractAt(Index : Integer; const NewName : string); {extract a file from the archive that match the index} begin if (ZipArchive <> nil) then ZipArchive.ExtractAt( Index, NewName ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractFiles(const FileMask : string); {extract all files from the archive that match the mask} begin if (ZipArchive <> nil) then ZipArchive.ExtractFiles( FileMask ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractFilesEx(const FileMask, ExclusionMask : string); {extract files matching FileMask except those matching ExclusionMask} begin if (ZipArchive <> nil) then ZipArchive.ExtractFilesEx( FileMask, ExclusionMask ) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractTaggedItems; {extract all tagged items from the archive} begin if (ZipArchive <> nil) then ZipArchive.ExtractTaggedItems else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.ExtractToStream(const aFileName : string; ToStream : TStream); begin if (ZipArchive <> nil) then ZipArchive.ExtractToStream(aFileName, ToStream) else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.InitArchive; begin inherited InitArchive; if (ZipArchive <> nil) then begin if ZipArchive is TAbZipArchive then begin {properties} ZipArchive.ExtractOptions := FExtractOptions; TAbZipArchive(ZipArchive).PasswordRetries := FPasswordRetries; {events} ZipArchive.OnConfirmOverwrite := DoConfirmOverwrite; TAbZipArchive(ZipArchive).OnNeedPassword := DoNeedPassword; TAbZipArchive(ZipArchive).ExtractHelper := UnzipProc; TAbZipArchive(ZipArchive).ExtractToStreamHelper := UnzipToStreamProc; TAbZipArchive(ZipArchive).TestHelper := TestItemProc; end; end; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.SetExtractOptions( Value : TAbExtractOptions ); begin FExtractOptions := Value; if (ZipArchive <> nil) then ZipArchive.ExtractOptions := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.SetPasswordRetries( Value : Byte ); begin FPasswordRetries := Value; if (ZipArchive <> nil) then (ZipArchive as TAbZipArchive).PasswordRetries := Value; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.TestTaggedItems; {test all tagged items in the archive} begin if (ZipArchive <> nil) then ZipArchive.TestTaggedItems else raise EAbNoArchive.Create; end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.UnzipProc( Sender : TObject; Item : TAbArchiveItem; const NewName : string ); begin AbUnzip( TAbZipArchive(Sender), TAbZipItem(Item), NewName); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.UnzipToStreamProc(Sender : TObject; Item : TAbArchiveItem; OutStream : TStream); begin AbUnzipToStream(TAbZipArchive(Sender), TAbZipItem(Item), OutStream); end; { -------------------------------------------------------------------------- } procedure TAbCustomZipKit.TestItemProc(Sender : TObject; Item : TAbArchiveItem); begin AbTestZipItem(TAbZipArchive(Sender), TAbZipItem(Item)); end; { -------------------------------------------------------------------------- } end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfoutw.pas����������������������������������������������0000644�0001750�0000144�00000026405�12014201074�022066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfOutW.pas *} {*********************************************************} {* Deflate output sliding window *} {*********************************************************} unit AbDfOutW; {$I AbDefine.inc} interface uses Classes, AbDfBase; {Notes: TAbDfOutputWindow implements a sliding window on previously written data for the LZ77 dictionary decoding. AddLiteral will add a literal character at the current position and advance by one. AddLenDist will copy the required number of characters from the given position to the current position, and advance the stream on by the length. The class will periodically update the stream from the internal buffer. For normal Deflate, the internal buffer is 48K + 512 bytes in size. Once there is 48Kb worth of data, 16KB is written to file, and the buffer is shifted left by 16KB. We need to keep the last decoded 32KB in memory at all times. For Deflate64, the internal buffer is 96K + 512 bytes in size. Once there is 96Kb worth of data, 32KB is written to file, and the buffer is shifted left by 32KB. We need to keep the last decoded 64KB in memory at all times. } type TAbDfOutputWindow = class private FBuffer : PAnsiChar; FChecksum : longint; FCurrent : PAnsiChar; FLog : TAbLogger; FPartSize : longint; FSlideCount : integer; FStream : TStream; FStreamPos : longint; FTestOnly : boolean; FUseCRC32 : boolean; FWritePoint : PAnsiChar; protected function swGetChecksum : longint; procedure swWriteToStream(aFlush : boolean); public constructor Create(aStream : TStream; aUseDeflate64 : boolean; aUseCRC32 : boolean; aPartSize : longint; aTestOnly : boolean; aLog : TAbLogger); destructor Destroy; override; procedure AddBuffer(var aBuffer; aCount : integer); procedure AddLiteral(aCh : AnsiChar); procedure AddLenDist(aLen : integer; aDist : integer); function Position : longint; property Checksum : longint read swGetChecksum; property Log : TAbLogger read FLog; end; implementation uses SysUtils; {Notes: Meaning of the internal pointers: |==============================+------------------------+----| | | | FBuffer FCurrent FWritePoint Once FCurrent reaches or exceeds FWritePoint, FSlideCount bytes of data from FBuffer are written to the stream and the remaining data is moved back FSlideCount bytes, moving FCurrent along with it as well. } {===TAbDfOutputWindow==================================================} constructor TAbDfOutputWindow.Create(aStream : TStream; aUseDeflate64 : boolean; aUseCRC32 : boolean; aPartSize : longint; aTestOnly : boolean; aLog : TAbLogger); var Size : integer; LookAheadSize : integer; begin {allow the ancestor to initialize} inherited Create; {save parameters} FLog := aLog; FStream := aStream; FTestOnly := aTestOnly; if (aPartSize <= 0) then FPartSize := 0 else FPartSize := aPartSize; FUseCRC32 := aUseCRC32; if aUseCRC32 then FChecksum := -1 { CRC32 starts off with all bits set} else FCheckSum := 1; { Adler32 starts off with a value of 1} {set capacity of sliding window} if aUseDeflate64 then begin Size := 96 * 1024; FSlideCount := 32 * 1024; LookAheadSize := 64 * 1024; end else begin Size := 64 * 1024; FSlideCount := 32 * 1024; LookAheadSize := 258; end; GetMem(FBuffer, Size + LookAheadSize); {set the other internal pointers} FCurrent := FBuffer; FWritePoint := FBuffer + Size; if (FPartSize > Size) then FPartSize := Size; end; {--------} destructor TAbDfOutputWindow.Destroy; begin {write remaining data and free the buffer} if (FBuffer <> nil) then begin if (FCurrent <> FBuffer) then swWriteToStream(true); FreeMem(FBuffer); end; {destroy the ancestor} inherited Destroy; end; {--------} procedure TAbDfOutputWindow.AddBuffer(var aBuffer; aCount : integer); var Buffer : PAnsiChar; BytesToWrite : integer; begin {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); {cast the user buffer to a PChar, it's easier to use} Buffer := @aBuffer; {calculate the number of bytes to copy} BytesToWrite := FWritePoint - FCurrent; if (BytesToWrite > aCount) then BytesToWrite := aCount; {move this block of bytes} Move(Buffer^, FCurrent^, BytesToWrite); {advance pointers and counters} inc(FCurrent, BytesToWrite); dec(aCount, BytesToWrite); {while there is still data to copy...} while (aCount > 0) do begin {advance the user buffer pointer} inc(Buffer, BytesToWrite); {write the sliding window chunk to the stream} swWriteToStream(false); {calculate the number of bytes to copy} BytesToWrite := FWritePoint - FCurrent; if (BytesToWrite > aCount) then BytesToWrite := aCount; {move this block of bytes} Move(Buffer^, FCurrent^, BytesToWrite); {advance pointers and counters} inc(FCurrent, BytesToWrite); dec(aCount, BytesToWrite); end; end; {--------} procedure AddLenDistToLog(aLog : TAbLogger; aPosn : longint; aLen : integer; aDist : integer; aOverLap : boolean); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if aOverLap then aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d **overlap**', [aPosn, aLen, aDist])) else aLog.WriteLine(Format('%8x Len: %-3d, Dist: %-5d', [aPosn, aLen, aDist])); end; {--------} procedure TAbDfOutputWindow.AddLenDist(aLen : integer; aDist : integer); var i : integer; ToChar : PAnsiChar; FromChar : PAnsiChar; begin {log it} {$IFDEF UseLogging} if (FLog <> nil) then AddLenDistToLog(FLog, Position, aLen, aDist, (aLen > aDist)); {$ENDIF} {if the length to copy is less than the distance, just do a move} if (aLen <= aDist) then begin Move((FCurrent - aDist)^ , FCurrent^, aLen); end {otherwise we have to use a byte-by-byte copy} else begin FromChar := FCurrent - aDist; ToChar := FCurrent; for i := 1 to aLen do begin ToChar^ := FromChar^; inc(FromChar); inc(ToChar); end; end; {increment the current pointer} inc(FCurrent, aLen); {if we've reached the point requested, abort} if (FPartSize > 0) and ((FCurrent - FBuffer) >= FPartSize) then raise EAbPartSizedInflate.Create(''); {NOTE: This exception is expected during detection of .GZ and .TGZ files. (VerifyGZip)} {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); end; {--------} procedure AddLiteralToLog(aLog : TAbLogger; aPosn : longint; aCh : AnsiChar); begin {NOTE the reason for this separate routine is to avoid string allocations and try..finally blocks in the main method: an optimization issue} if (' ' < aCh) and (aCh <= '~') then aLog.WriteLine(Format('%8x Char: %3d $%2x [%s]', [aPosn, ord(aCh), ord(aCh), aCh])) else aLog.WriteLine(Format('%8x Char: %3d $%2x', [aPosn, ord(aCh), ord(aCh)])); end; {--------} procedure TAbDfOutputWindow.AddLiteral(aCh : AnsiChar); begin {log it} {$IFDEF UseLogging} if (FLog <> nil) then AddLiteralToLog(FLog, Position, aCh); {$ENDIF} {add the literal to the buffer} FCurrent^ := aCh; {increment the current pointer} inc(FCurrent); {if we've reached the point requested, abort} if (FPartSize > 0) and ((FCurrent - FBuffer) >= FPartSize) then raise EAbPartSizedInflate.Create(''); {if we've advanced to the point when we need to write, do so} if (FCurrent >= FWritePoint) then swWriteToStream(false); end; {--------} function TAbDfOutputWindow.Position : longint; begin if FTestOnly then Result := FStreamPos + (FCurrent - FBuffer) else Result := FStream.Position + (FCurrent - FBuffer); end; {--------} function TAbDfOutputWindow.swGetChecksum : longint; begin {since the checksum is calculated by the method that flushes to the stream, make sure any buffered data is written out first} if (FCurrent <> FBuffer) then swWriteToStream(true); {the CRC32 checksum algorithm requires a post-conditioning step after being calculated (the result is NOTted), whereas Adler32 does not} if FUseCRC32 then Result := not FChecksum else Result := FChecksum; end; {--------} procedure TAbDfOutputWindow.swWriteToStream(aFlush : boolean); var FromPtr : PAnsiChar; begin {if the request was to flush, write all remaining data after updating the checksum} if aFlush then begin if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FBuffer^, FCurrent - FBuffer) else AbUpdateAdlerBuffer(FChecksum, FBuffer^, FCurrent - FBuffer); if FTestOnly then inc(FStreamPos, FCurrent - FBuffer) else FStream.WriteBuffer(FBuffer^, FCurrent - FBuffer); FCurrent := FBuffer; end {otherwise, update the checksum with the data in the sliding window chunk, write it out to the stream, and move the rest of the buffer back} else begin if FUseCRC32 then AbUpdateCRCBuffer(FChecksum, FBuffer^, FSlideCount) else AbUpdateAdlerBuffer(FChecksum, FBuffer^, FSlideCount); if FTestOnly then inc(FStreamPos, FSlideCount) else FStream.WriteBuffer(FBuffer^, FSlideCount); FromPtr := FBuffer + FSlideCount; Move(FromPtr^, FBuffer^, FCurrent - FromPtr); FCurrent := FCurrent - FSlideCount; end; end; {====================================================================} end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/readme.txt������������������������������������������������0000644�0001750�0000144�00000002444�12014201074�021541� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Abbrevia Version: 5.0 Revision: 512 Home Page: http://tpabbrevia.sourceforge.net Abbrevia is a compression toolkit for Embarcadero Delphi, C++ Builder, and Kylix and FreePascal. It supports PKZip, Microsoft CAB, tar, gzip, bzip2 and zlib compression formats, and the creation of self-extracting executables. It includes several visual components that simplify displaying zip files. Some modifications done for Double Commander (see doublecmd.diff). NOTES: Functions AbDetectCharSet and IsOEM from AbCharset unit fails with some code pages and characters (eg. 936 and 图片) ! Don't use it when merging with Abbrevia. Better to try to convert with MultiByteToWideChar (see DCConvertEncoding CeTryEncode and CeTryDecode). Abbrevia sets current directory before reading files from disk in case paths are relative and uses ExpandFileName (which relies on current directory) to change relative paths to absolute. Since Double Commander uses the toolkit from a non-main thread it cannot rely on current directory not changing while working. Instead, always full paths in archive items are used, both archive file name and disk file name, paths are rebased against TAbArchive.BaseDirectory (which doesn't change during working) and all calls to functions changing current directory have been removed. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abbase.pas������������������������������������������������0000644�0001750�0000144�00000003470�12014201074�021465� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBase.pas *} {*********************************************************} {* ABBREVIA: Base component class *} {*********************************************************} unit AbBase; {$I AbDefine.inc} interface uses Classes; type TAbBaseComponent = class(TComponent) protected {methods} function GetVersion : string; procedure SetVersion(const Value : string); protected {properties} property Version : string read GetVersion write SetVersion stored False; end; implementation uses AbConst; { -------------------------------------------------------------------------- } function TAbBaseComponent.GetVersion : string; begin Result := AbVersionS; end; { -------------------------------------------------------------------------- } procedure TAbBaseComponent.SetVersion(const Value : string); begin {NOP} end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfxlat.pas����������������������������������������������0000644�0001750�0000144�00000013032�12014201074�022030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfXlat.pas *} {*********************************************************} {* Deflate length/dist to symbol translator *} {*********************************************************} unit AbDfXlat; {$I AbDefine.inc} interface uses SysUtils; type TAbDfTranslator = class private FBuffer : PAnsiChar; FLenSymbols : PByteArray; {for lengths 3..258} FLongDistSymbols : PByteArray; {for distances 32769..65536 (deflate64)} FMediumDistSymbols : PByteArray; {for distances 257..32768} FShortDistSymbols : PByteArray; {for distances 1..256} protected procedure trBuild; public constructor Create; destructor Destroy; override; function TranslateLength(aLen : integer): integer; function TranslateDistance(aDist : integer) : integer; property LenSymbols : PByteArray read FLenSymbols; property LongDistSymbols : PByteArray read FLongDistSymbols; property MediumDistSymbols : PByteArray read FMediumDistSymbols; property ShortDistSymbols : PByteArray read FShortDistSymbols; end; var AbSymbolTranslator : TAbDfTranslator; implementation uses AbDfBase; {====================================================================} constructor TAbDfTranslator.Create; begin {create the ancestor} inherited Create; {allocate the translation arrays (the buffer *must* be zeroed)} FBuffer := AllocMem(256 + 2 + 256 + 256); FLenSymbols := PByteArray(FBuffer); FLongDistSymbols := PByteArray(FBuffer + 256); FMediumDistSymbols := PByteArray(FBuffer + 256 + 2); FShortDistSymbols := PByteArray(FBuffer + 256 + 2 + 256); {build the translation arrays} trBuild; end; {--------} destructor TAbDfTranslator.Destroy; begin if (FBuffer <> nil) then FreeMem(FBuffer); inherited Destroy; end; {--------} function TAbDfTranslator.TranslateDistance(aDist : integer) : integer; begin {save against dumb programming mistakes} Assert((1 <= aDist) and (aDist <= 65536), 'TAbDfTranslator.Translate: distance should be 1..65536'); {translate the distance} if (aDist <= 256) then Result := FShortDistSymbols[aDist - 1] else if (aDist <= 32768) then Result := FMediumDistSymbols[((aDist - 1) div 128) - 2] else Result := FLongDistSymbols[((aDist - 1) div 16384) - 2]; end; {--------} function TAbDfTranslator.TranslateLength(aLen : integer): integer; begin {save against dumb programming mistakes} Assert((3 <= aLen) and (aLen <= 65536), 'TAbDfTranslator.Translate: length should be 3..65536'); {translate the length} dec(aLen, 3); if (0 <= aLen) and (aLen <= 255) then Result := FLenSymbols[aLen] + 257 else Result := 285; end; {--------} procedure TAbDfTranslator.trBuild; var i : integer; Len : integer; Dist : integer; Value : integer; begin {initialize the length translation array; elements will contain (Symbol - 257) for a given (length - 3)} for i := low(dfc_LengthBase) to pred(high(dfc_LengthBase)) do begin Len := dfc_LengthBase[i] - 3; FLenSymbols[Len] := i; end; FLenSymbols[255] := 285 - 257; Value := -1; for i := 0 to 255 do begin if (Value < FLenSymbols[i]) then Value := FLenSymbols[i] else FLenSymbols[i] := Value; end; {initialize the short distance translation array: it will contain the Symbol for a given (distance - 1) where distance <= 256} for i := 0 to 15 do begin Dist := dfc_DistanceBase[i] - 1; FShortDistSymbols[Dist] := i; end; Value := -1; for i := 0 to 255 do begin if (Value < FShortDistSymbols[i]) then Value := FShortDistSymbols[i] else FShortDistSymbols[i] := Value; end; {initialize the medium distance translation array: it will contain the Symbol for a given (((distance - 1) div 128) - 2) where distance is in the range 256..32768} for i := 16 to 29 do begin Dist := ((dfc_DistanceBase[i] - 1) div 128) - 2; FMediumDistSymbols[Dist] := i; end; Value := -1; for i := 0 to 255 do begin if (Value < FMediumDistSymbols[i]) then Value := FMediumDistSymbols[i] else FMediumDistSymbols[i] := Value; end; {initialize the long distance translation array: it will contain the Symbol for a given ((distance - 1) div 16384) - 2) for distances over 32768 in deflate64} FLongDistSymbols[0] := 30; FLongDistSymbols[1] := 31; end; {====================================================================} initialization AbSymbolTranslator := TAbDfTranslator.Create; finalization AbSymbolTranslator.Free; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abxztyp.pas�����������������������������������������������0000644�0001750�0000144�00000034635�12613112750�021767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * Joel Haynie * Craig Peterson * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Alexander Koblov <alexx2000@users.sourceforge.net> * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbXzTyp.pas *} {*********************************************************} {* ABBREVIA: TAbXzArchive, TAbXzItem classes *} {*********************************************************} {* Misc. constants, types, and routines for working *} {* with Xz files *} {*********************************************************} unit AbXzTyp; {$I AbDefine.inc} interface uses Classes, AbArcTyp, AbTarTyp, AbUtils; const { The first six (6) bytes of the Stream are so called Header } { Magic Bytes. They can be used to identify the file type. } AB_XZ_FILE_HEADER = #$FD'7zXZ'#00; type PAbXzHeader = ^TAbXzHeader; { File Header } TAbXzHeader = packed record { SizeOf(TAbXzHeader) = 12 } HeaderMagic : array[0..5] of AnsiChar; { 0xFD, '7', 'z', 'X', 'Z', 0x00 } StreamFlags : Word; { 0x00, 0x00-0x0F } CRC32 : LongWord; { The CRC32 is calculated from the Stream Flags field } end; { The Purpose for this Item is the placeholder for aaAdd and aaDelete Support. } { For all intents and purposes we could just use a TAbArchiveItem } type TAbXzItem = class(TabArchiveItem); TAbXzArchiveState = (gsXz, gsTar); TAbXzArchive = class(TAbTarArchive) private FXzStream : TStream; { stream for Xz file} FXzItem : TAbArchiveList; { item in xz (only one, but need polymorphism of class)} FTarStream : TStream; { stream for possible contained Tar } FTarList : TAbArchiveList; { items in possible contained Tar } FTarAutoHandle: Boolean; FState : TAbXzArchiveState; FIsXzippedTar : Boolean; procedure DecompressToStream(aStream: TStream); procedure SetTarAutoHandle(const Value: Boolean); procedure SwapToXz; procedure SwapToTar; protected { Inherited Abstract functions } function CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; override; procedure ExtractItemAt(Index : Integer; const NewName : string); override; procedure ExtractItemToStreamAt(Index : Integer; aStream : TStream); override; procedure LoadArchive; override; procedure SaveArchive; override; procedure TestItemAt(Index : Integer); override; function GetSupportsEmptyFolders : Boolean; override; public {methods} constructor CreateFromStream(aStream : TStream; const aArchiveName : string); override; destructor Destroy; override; procedure DoSpanningMediaRequest(Sender : TObject; ImageNumber : Integer; var ImageName : string; var Abort : Boolean); override; { Properties } property TarAutoHandle : Boolean read FTarAutoHandle write SetTarAutoHandle; property IsXzippedTar : Boolean read FIsXzippedTar write FIsXzippedTar; end; function VerifyXz(Strm : TStream) : TAbArchiveType; implementation uses {$IFDEF MSWINDOWS} Windows, // Fix inline warnings {$ENDIF} StrUtils, SysUtils, AbXz, AbExcept, AbVMStrm, AbBitBkt, CRC, DCOSUtils, DCClassesUtf8; { ****************** Helper functions Not from Classes Above ***************** } function VerifyHeader(const Header : TAbXzHeader) : Boolean; begin Result := CompareByte(Header.HeaderMagic, AB_XZ_FILE_HEADER, SizeOf(Header.HeaderMagic)) = 0; Result := Result and (Crc32(0, PByte(@Header.StreamFlags), SizeOf(Header.StreamFlags)) = Header.CRC32); end; { -------------------------------------------------------------------------- } function VerifyXz(Strm : TStream) : TAbArchiveType; var Hdr : TAbXzHeader; CurPos : Int64; TarStream: TStream; DecompStream: TLzmaDecompression; begin Result := atUnknown; CurPos := Strm.Position; Strm.Seek(0, soFromBeginning); try if (Strm.Read(Hdr, SizeOf(Hdr)) = SizeOf(Hdr)) and VerifyHeader(Hdr) then begin Result := atXz; { Check for embedded TAR } Strm.Seek(0, soFromBeginning); TarStream := TMemoryStream.Create; try DecompStream := TLzmaDecompression.Create(Strm, TarStream); try DecompStream.Code(AB_TAR_RECORDSIZE * 4); TarStream.Seek(0, soFromBeginning); if VerifyTar(TarStream) = atTar then Result := atXzippedTar; finally DecompStream.Free; end; finally TarStream.Free; end; end; except Result := atUnknown; end; Strm.Position := CurPos; { Return to original position. } end; { ****************************** TAbXzArchive ***************************** } constructor TAbXzArchive.CreateFromStream(aStream: TStream; const aArchiveName: string); begin inherited CreateFromStream(aStream, aArchiveName); FState := gsXz; FXzStream := FStream; FXzItem := FItemList; FTarStream := TAbVirtualMemoryStream.Create; FTarList := TAbArchiveList.Create(True); end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SwapToTar; begin FStream := FTarStream; FItemList := FTarList; FState := gsTar; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SwapToXz; begin FStream := FXzStream; FItemList := FXzItem; FState := gsXz; end; { -------------------------------------------------------------------------- } function TAbXzArchive.CreateItem(const SourceFileName : string; const ArchiveDirectory : string): TAbArchiveItem; var XzItem : TAbXzItem; FullSourceFileName, FullArchiveFileName: String; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; Result := inherited CreateItem(SourceFileName, ArchiveDirectory); end else begin SwapToXz; XzItem := TAbXzItem.Create; try MakeFullNames(SourceFileName, ArchiveDirectory, FullSourceFileName, FullArchiveFileName); XzItem.FileName := FullArchiveFileName; XzItem.DiskFileName := FullSourceFileName; Result := XzItem; except Result := nil; raise; end; end; end; { -------------------------------------------------------------------------- } destructor TAbXzArchive.Destroy; begin SwapToXz; FTarList.Free; FTarStream.Free; inherited Destroy; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.ExtractItemAt(Index: Integer; const NewName: string); var OutStream : TStream; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemAt(Index, NewName); end else begin SwapToXz; OutStream := TFileStreamEx.Create(NewName, fmCreate or fmShareDenyNone); try try ExtractItemToStreamAt(Index, OutStream); finally OutStream.Free; end; { Xz doesn't store the last modified time or attributes, so don't set them } except on E : EAbUserAbort do begin FStatus := asInvalid; if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end else begin if mbFileExists(NewName) then mbDeleteFile(NewName); raise; end; end; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.ExtractItemToStreamAt(Index: Integer; aStream: TStream); begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited ExtractItemToStreamAt(Index, aStream); end else begin SwapToXz; { Index ignored as there's only one item in a Xz } DecompressToStream(aStream); end; end; { -------------------------------------------------------------------------- } function TAbXzArchive.GetSupportsEmptyFolders : Boolean; begin Result := IsXzippedTar and TarAutoHandle; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.LoadArchive; var Item: TAbXzItem; Abort: Boolean; ItemName: string; begin if FXzStream.Size = 0 then Exit; if IsXzippedTar and TarAutoHandle then begin { Decompress and send to tar LoadArchive } DecompressToStream(FTarStream); SwapToTar; inherited LoadArchive; end else begin SwapToXz; Item := TAbXzItem.Create; Item.Action := aaNone; { Filename isn't stored, so constuct one based on the archive name } ItemName := ExtractFileName(ArchiveName); if ItemName = '' then Item.FileName := 'unknown' else if AnsiEndsText('.txz', ItemName) then Item.FileName := ChangeFileExt(ItemName, '.tar') else Item.FileName := ChangeFileExt(ItemName, ''); Item.DiskFileName := Item.FileName; FItemList.Add(Item); end; DoArchiveProgress(100, Abort); FIsDirty := False; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SaveArchive; var I: Integer; CurItem: TAbXzItem; UpdateArchive: Boolean; TempFileName: String; InputFileStream: TStream; LzmaCompression: TLzmaCompression; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited SaveArchive; UpdateArchive := (FXzStream.Size > 0) and (FXzStream is TFileStreamEx); if UpdateArchive then begin FreeAndNil(FXzStream); TempFileName := GetTempName(FArchiveName + ExtensionSeparator); { Create new archive with temporary name } FXzStream := TFileStreamEx.Create(TempFileName, fmCreate or fmShareDenyWrite); end; FTarStream.Position := 0; LzmaCompression := TLzmaCompression.Create(FTarStream, FXzStream); try LzmaCompression.Code(); finally LzmaCompression.Free; end; if UpdateArchive then begin FreeAndNil(FXzStream); { Replace original by new archive } if not (mbDeleteFile(FArchiveName) and mbRenameFile(TempFileName, FArchiveName)) then RaiseLastOSError; { Open new archive } FXzStream := TFileStreamEx.Create(FArchiveName, fmOpenRead or fmShareDenyNone); end; end else begin { Things we know: There is only one file per archive.} { Actions we have to address in SaveArchive: } { aaNone & aaMove do nothing, as the file does not change, only the meta data } { aaDelete could make a zero size file unless there are two files in the list.} { aaAdd, aaStreamAdd, aaFreshen, & aaReplace will be the only ones to take action. } SwapToXz; for I := 0 to Pred(Count) do begin FCurrentItem := ItemList[I]; CurItem := TAbXzItem(ItemList[I]); case CurItem.Action of aaNone, aaMove: Break;{ Do nothing; xz doesn't store metadata } aaDelete: ; {doing nothing omits file from new stream} aaAdd, aaFreshen, aaReplace, aaStreamAdd: begin FXzStream.Size := 0; if CurItem.Action = aaStreamAdd then begin LzmaCompression := TLzmaCompression.Create(InStream, FXzStream); try LzmaCompression.Code(); { Copy/compress entire Instream to FXzStream } finally LzmaCompression.Free; end; end else begin InputFileStream := TFileStreamEx.Create(CurItem.DiskFileName, fmOpenRead or fmShareDenyWrite); try LzmaCompression := TLzmaCompression.Create(InputFileStream, FXzStream); try LzmaCompression.Code(); { Copy/compress entire Instream to FXzStream } finally LzmaCompression.Free; end; finally InputFileStream.Free; end; end; Break; end; { End aaAdd, aaFreshen, aaReplace, & aaStreamAdd } end; { End of CurItem.Action Case } end; { End Item for loop } end; { End Tar Else } end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.SetTarAutoHandle(const Value: Boolean); begin if Value then SwapToTar else SwapToXz; FTarAutoHandle := Value; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.DecompressToStream(aStream: TStream); var LzmaDecompression: TLzmaDecompression; begin LzmaDecompression := TLzmaDecompression.Create(FXzStream, aStream); try LzmaDecompression.Code finally LzmaDecompression.Free; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.TestItemAt(Index: Integer); var XzType: TAbArchiveType; BitBucket: TAbBitBucketStream; begin if IsXzippedTar and TarAutoHandle then begin SwapToTar; inherited TestItemAt(Index); end else begin { Note Index ignored as there's only one item in a GZip } XzType := VerifyXz(FXzStream); if not (XzType in [atXz, atXzippedTar]) then raise EAbGzipInvalid.Create; // TODO: Add xz-specific exceptions } BitBucket := TAbBitBucketStream.Create(1024); try DecompressToStream(BitBucket); finally BitBucket.Free; end; end; end; { -------------------------------------------------------------------------- } procedure TAbXzArchive.DoSpanningMediaRequest(Sender: TObject; ImageNumber: Integer; var ImageName: string; var Abort: Boolean); begin Abort := False; end; end. ���������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abbzip2.pas�����������������������������������������������0000644�0001750�0000144�00000066355�12367113704�021631� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * This program, "bzip2", the associated library "libbzip2", and all * documentation, are copyright (C) 1996-2007 Julian R Seward. All * rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. The origin of this software must not be misrepresented; you must * not claim that you wrote the original software. If you use this * software in a product, an acknowledgment in the product * documentation would be appreciated but is not required. * * 3. Altered source versions must be plainly marked as such, and must * not be misrepresented as being the original software. * * 4. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Julian Seward, jseward@bzip.org * bzip2/libbzip2 version 1.0.5 of 10 December 2007 * * Pascal wrapper created by Edison Mera, version 1.04 * http://edisonlife.homelinux.com/ * * Dynamic and runtime linking and Win64/OS X/Linux support by Craig Peterson * http://tpabbrevia.sourceforge.net/ * ***** END LICENSE BLOCK ***** *) unit AbBzip2; {$I AbDefine.inc} interface uses SysUtils, Classes; type TAlloc = function(opaque: Pointer; Items, Size: Integer): Pointer; cdecl; TFree = procedure(opaque, Block: Pointer); cdecl; // Internal structure. Ignore. TBZStreamRec = record next_in: PByte; // next input byte avail_in: Integer; // number of bytes available at next_in total_in_lo32: Integer; // total nb of input bytes read so far total_in_hi32: Integer; next_out: PByte; // next output byte should be put here avail_out: Integer; // remaining free space at next_out total_out_lo32: Integer; // total nb of bytes output so far total_out_hi32: Integer; state: Pointer; bzalloc: TAlloc; // used to allocate the internal state bzfree: TFree; // used to free the internal state opaque: Pointer; end; // Abstract ancestor class TCustomBZip2Stream = class(TStream) private FStrm: TStream; FStrmPos: Int64; FOnProgress: TNotifyEvent; FBZRec: TBZStreamRec; FBuffer: array[Word] of Byte; protected procedure Progress(Sender: TObject); dynamic; property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; constructor Create(Strm: TStream); end; { TBZCompressionStream compresses data on the fly as data is written to it, and stores the compressed data to another stream. TBZCompressionStream is write-only and strictly sequential. Reading from the stream will raise an exception. Using Seek to move the stream pointer will raise an exception. Output data is cached internally, written to the output stream only when the internal output buffer is full. All pending output data is flushed when the stream is destroyed. The Position property returns the number of uncompressed bytes of data that have been written to the stream so far. CompressionRate returns the on-the-fly percentage by which the original data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 If raw data size = 100 and compressed data size = 25, the CompressionRate is 75% The OnProgress event is called each time the output buffer is filled and written to the output stream. This is useful for updating a progress indicator when you are writing a large chunk of data to the compression stream in a single call.} TBlockSize100k = (bs1, bs2, bs3, bs4, bs5, bs6, bs7, bs8, bs9); TBZCompressionStream = class(TCustomBZip2Stream) private function GetCompressionRate: Single; public constructor Create(BlockSize100k: TBlockSize100k; Dest: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property CompressionRate: Single read GetCompressionRate; property OnProgress; end; { TDecompressionStream decompresses data on the fly as data is read from it. Compressed data comes from a separate source stream. TDecompressionStream is read-only and unidirectional; you can seek forward in the stream, but not backwards. The special case of setting the stream position to zero is allowed. Seeking forward decompresses data until the requested position in the uncompressed data has been reached. Seeking backwards, seeking relative to the end of the stream, requesting the size of the stream, and writing to the stream will raise an exception. The Position property returns the number of bytes of uncompressed data that have been read from the stream so far. The OnProgress event is called each time the internal input buffer of compressed data is exhausted and the next block is read from the input stream. This is useful for updating a progress indicator when you are reading a large chunk of data from the decompression stream in a single call.} TBZDecompressionStream = class(TCustomBZip2Stream) private FReadState: LongInt; public constructor Create(Source: TStream); destructor Destroy; override; function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; property OnProgress; end; { CompressBuf compresses data, buffer to buffer, in one call. In: InBuf = ptr to compressed data InBytes = number of bytes in InBuf Out: OutBuf = ptr to newly allocated buffer containing decompressed data OutBytes = number of bytes in OutBuf } procedure BZCompressBuf(const InBuf: Pointer; InBytes: Integer; out OutBuf: Pointer; out OutBytes: Integer); { DecompressBuf decompresses data, buffer to buffer, in one call. In: InBuf = ptr to compressed data InBytes = number of bytes in InBuf OutEstimate = zero, or est. size of the decompressed data Out: OutBuf = ptr to newly allocated buffer containing decompressed data OutBytes = number of bytes in OutBuf } procedure BZDecompressBuf(const InBuf: Pointer; InBytes: Integer; OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); type EBZip2Error = class(Exception); EBZCompressionError = class(EBZip2Error); EBZDecompressionError = class(EBZip2Error); implementation // Compile for Win64 using MSVC // <Path To MSVC>\bin\x86_amd64\cl.exe -c -nologo -GS- -Z7 -wd4086 -Gs32768 // -DBZ_NO_STDIO blocksort.c huffman.c compress.c decompress.c bzlib.c uses {$IFDEF Bzip2Runtime} {$IF DEFINED(FPC)} dynlibs, {$ELSEIF DEFINED(MSWINDOWS)} Windows, {$IFEND} {$ENDIF} AbUtils; {$IFDEF Bzip2Static} {$IF DEFINED(WIN32)} {$L Win32\blocksort.obj} {$L Win32\huffman.obj} {$L Win32\compress.obj} {$L Win32\decompress.obj} {$L Win32\bzlib.obj} {$ELSEIF DEFINED(WIN64)} {$L Win64\blocksort.obj} {$L Win64\huffman.obj} {$L Win64\compress.obj} {$L Win64\decompress.obj} {$L Win64\bzlib.obj} {$IFEND} procedure BZ2_hbMakeCodeLengths; external; procedure BZ2_blockSort; external; procedure BZ2_hbCreateDecodeTables; external; procedure BZ2_hbAssignCodes; external; procedure BZ2_compressBlock; external; procedure BZ2_decompress; external; {$ENDIF} type TLargeInteger = record case Integer of 0: ( LowPart: LongWord; HighPart: LongWord); 1: ( QuadPart: Int64); end; const BZ_RUN = 0; BZ_FLUSH = 1; BZ_FINISH = 2; BZ_OK = 0; BZ_RUN_OK = 1; BZ_FLUSH_OK = 2; BZ_FINISH_OK = 3; BZ_STREAM_END = 4; BZ_SEQUENCE_ERROR = (-1); BZ_PARAM_ERROR = (-2); BZ_MEM_ERROR = (-3); BZ_DATA_ERROR = (-4); BZ_DATA_ERROR_MAGIC = (-5); BZ_IO_ERROR = (-6); BZ_UNEXPECTED_EOF = (-7); BZ_OUTBUFF_FULL = (-8); BZ_BLOCK_SIZE_100K = 9; {$IFDEF Bzip2Static} BZ2_rNums: array[0..511] of Longint = ( 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 ); BZ2_crc32Table: array[0..255] of Longint = ( $00000000, $04C11DB7, $09823B6E, $0D4326D9, $130476DC, $17C56B6B, $1A864DB2, $1E475005, $2608EDB8, $22C9F00F, $2F8AD6D6, $2B4BCB61, $350C9B64, $31CD86D3, $3C8EA00A, $384FBDBD, $4C11DB70, $48D0C6C7, $4593E01E, $4152FDA9, $5F15ADAC, $5BD4B01B, $569796C2, $52568B75, $6A1936C8, $6ED82B7F, $639B0DA6, $675A1011, $791D4014, $7DDC5DA3, $709F7B7A, $745E66CD, -$67DC4920, -$631D54A9, -$6E5E7272, -$6A9F6FC7, -$74D83FC4, -$70192275, -$7D5A04AE, -$799B191B, -$41D4A4A8, -$4515B911, -$48569FCA, -$4C97827F, -$52D0D27C, -$5611CFCD, -$5B52E916, -$5F93F4A3, -$2BCD9270, -$2F0C8FD9, -$224FA902, -$268EB4B7, -$38C9E4B4, -$3C08F905, -$314BDFDE, -$358AC26B, -$0DC57FD8, -$09046261, -$044744BA, -$0086590F, -$1EC1090C, -$1A0014BD, -$17433266, -$13822FD3, $34867077, $30476DC0, $3D044B19, $39C556AE, $278206AB, $23431B1C, $2E003DC5, $2AC12072, $128E9DCF, $164F8078, $1B0CA6A1, $1FCDBB16, $018AEB13, $054BF6A4, $0808D07D, $0CC9CDCA, $7897AB07, $7C56B6B0, $71159069, $75D48DDE, $6B93DDDB, $6F52C06C, $6211E6B5, $66D0FB02, $5E9F46BF, $5A5E5B08, $571D7DD1, $53DC6066, $4D9B3063, $495A2DD4, $44190B0D, $40D816BA, -$535A3969, -$579B24E0, -$5AD80207, -$5E191FB2, -$405E4FB5, -$449F5204, -$49DC74DB, -$4D1D696E, -$7552D4D1, -$7193C968, -$7CD0EFBF, -$7811F20A, -$6656A20D, -$6297BFBC, -$6FD49963, -$6B1584D6, -$1F4BE219, -$1B8AFFB0, -$16C9D977, -$1208C4C2, -$0C4F94C5, -$088E8974, -$05CDAFAB, -$010CB21E, -$39430FA1, -$3D821218, -$30C134CF, -$3400297A, -$2A47797D, -$2E8664CC, -$23C54213, -$27045FA6, $690CE0EE, $6DCDFD59, $608EDB80, $644FC637, $7A089632, $7EC98B85, $738AAD5C, $774BB0EB, $4F040D56, $4BC510E1, $46863638, $42472B8F, $5C007B8A, $58C1663D, $558240E4, $51435D53, $251D3B9E, $21DC2629, $2C9F00F0, $285E1D47, $36194D42, $32D850F5, $3F9B762C, $3B5A6B9B, $0315D626, $07D4CB91, $0A97ED48, $0E56F0FF, $1011A0FA, $14D0BD4D, $19939B94, $1D528623, -$0ED0A9F2, -$0A11B447, -$075292A0, -$03938F29, -$1DD4DF2E, -$1915C29B, -$1456E444, -$1097F9F5, -$28D8444A, -$2C1959FF, -$215A7F28, -$259B6291, -$3BDC3296, -$3F1D2F23, -$325E09FC, -$369F144D, -$42C17282, -$46006F37, -$4B4349F0, -$4F825459, -$51C5045E, -$550419EB, -$58473F34, -$5C862285, -$64C99F3A, -$6008828F, -$6D4BA458, -$698AB9E1, -$77CDE9E6, -$730CF453, -$7E4FD28C, -$7A8ECF3D, $5D8A9099, $594B8D2E, $5408ABF7, $50C9B640, $4E8EE645, $4A4FFBF2, $470CDD2B, $43CDC09C, $7B827D21, $7F436096, $7200464F, $76C15BF8, $68860BFD, $6C47164A, $61043093, $65C52D24, $119B4BE9, $155A565E, $18197087, $1CD86D30, $029F3D35, $065E2082, $0B1D065B, $0FDC1BEC, $3793A651, $3352BBE6, $3E119D3F, $3AD08088, $2497D08D, $2056CD3A, $2D15EBE3, $29D4F654, -$3A56D987, -$3E97C432, -$33D4E2E9, -$3715FF60, -$2952AF5B, -$2D93B2EE, -$20D09435, -$24118984, -$1C5E343F, -$189F298A, -$15DC0F51, -$111D12E8, -$0F5A42E3, -$0B9B5F56, -$06D8798D, -$0219643C, -$764702F7, -$72861F42, -$7FC53999, -$7B042430, -$6543742B, -$6182699E, -$6CC14F45, -$680052F4, -$504FEF4F, -$548EF2FA, -$59CDD421, -$5D0CC998, -$434B9993, -$478A8426, -$4AC9A2FD, -$4E08BF4C ); procedure bz_internal_error(errcode: Integer); cdecl; begin raise EBZip2Error.CreateFmt('Compression Error %d', [errcode]); end; { _bz_internal_error } function malloc(size: Integer): Pointer; cdecl; begin GetMem(Result, Size); end; { _malloc } procedure free(block: Pointer); cdecl; begin FreeMem(block); end; { _free } {$ENDIF} const libbz2 = {$IF DEFINED(MSWINDOWS)}'bz2.dll' {$ELSEIF DEFINED(DARWIN)}'libbz2.dylib' {$ELSE}'libbz2.so.1'{$IFEND}; {$IFDEF Bzip2Runtime} var hBzip2: HMODULE; // deflate compresses data BZ2_bzCompressInit: function(var strm: TBZStreamRec; blockSize100k: Integer; verbosity: Integer; workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzCompress: function(var strm: TBZStreamRec; action: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzCompressEnd: function (var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzBuffToBuffCompress: function(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, blockSize100k, verbosity, workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} // inflate decompresses data BZ2_bzDecompressInit: function(var strm: TBZStreamRec; verbosity: Integer; small: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzDecompress: function(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzDecompressEnd: function(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} BZ2_bzBuffToBuffDecompress: function(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, small, verbosity: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} {$ELSE} // deflate compresses data function BZ2_bzCompressInit(var strm: TBZStreamRec; blockSize100k: Integer; verbosity: Integer; workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompressInit'{$ENDIF}; function BZ2_bzCompress(var strm: TBZStreamRec; action: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompress'{$ENDIF}; function BZ2_bzCompressEnd(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzCompressEnd'{$ENDIF}; function BZ2_bzBuffToBuffCompress(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, blockSize100k, verbosity, workFactor: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzBuffToBuffCompress'{$ENDIF}; // inflate decompresses data function BZ2_bzDecompressInit(var strm: TBZStreamRec; verbosity: Integer; small: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompressInit'{$ENDIF}; function BZ2_bzDecompress(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompress'{$ENDIF}; function BZ2_bzDecompressEnd(var strm: TBZStreamRec): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzDecompressEnd'{$ENDIF}; function BZ2_bzBuffToBuffDecompress(dest: Pointer; var destLen: Integer; source: Pointer; sourceLen, small, verbosity: Integer): Integer; {$IFDEF MSWINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} external {$IFDEF Bzip2Dynamic}libbz2{$ENDIF} {$IFDEF DARWIN}name '_BZ2_bzBuffToBuffDecompress'{$ENDIF}; {$ENDIF} procedure LoadBzip2DLL; begin {$IFDEF Bzip2Runtime} if hBzip2 <> 0 then Exit; hBzip2 := LoadLibrary(libbz2); if hBzip2 = 0 then raise EBZip2Error.Create('Bzip2 shared library not found'); @BZ2_bzCompressInit := GetProcAddress(hBzip2, 'BZ2_bzCompressInit'); @BZ2_bzCompress := GetProcAddress(hBzip2, 'BZ2_bzCompress'); @BZ2_bzCompressEnd := GetProcAddress(hBzip2, 'BZ2_bzCompressEnd'); @BZ2_bzBuffToBuffCompress := GetProcAddress(hBzip2, 'BZ2_bzBuffToBuffCompress'); @BZ2_bzDecompressInit := GetProcAddress(hBzip2, 'BZ2_bzDecompressInit'); @BZ2_bzDecompress := GetProcAddress(hBzip2, 'BZ2_bzDecompress'); @BZ2_bzDecompressEnd := GetProcAddress(hBzip2, 'BZ2_bzDecompressEnd'); @BZ2_bzBuffToBuffDecompress := GetProcAddress(hBzip2, 'BZ2_bzBuffToBuffDecompress'); {$ENDIF} end; function bzip2AllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; begin GetMem(Result, Items * Size); end; { bzip2AllocMem } procedure bzip2FreeMem(AppData, Block: Pointer); cdecl; begin FreeMem(Block); end; { bzip2FreeMem } function CCheck(code: Integer): Integer; begin Result := code; if code < 0 then raise EBZCompressionError.CreateFmt('error %d', [code]); //!! end; { CCheck } function DCheck(code: Integer): Integer; begin Result := code; if code < 0 then raise EBZDecompressionError.CreateFmt('error %d', [code]); //!! end; { DCheck } procedure BZCompressBuf(const InBuf: Pointer; InBytes: Integer; out OutBuf: Pointer; out OutBytes: Integer); var strm: TBZStreamRec; P: Pointer; begin LoadBzip2DLL; FillChar(strm, sizeof(strm), 0); strm.bzalloc := bzip2AllocMem; strm.bzfree := bzip2FreeMem; OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; GetMem(OutBuf, OutBytes); try strm.next_in := InBuf; strm.avail_in := InBytes; strm.next_out := OutBuf; strm.avail_out := OutBytes; CCheck(BZ2_bzCompressInit(strm, 9, 0, 0)); try while CCheck(BZ2_bzCompress(strm, BZ_FINISH)) <> BZ_STREAM_END do begin P := OutBuf; Inc(OutBytes, 256); ReallocMem(OutBuf, OutBytes); strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := 256; end; finally CCheck(BZ2_bzCompressEnd(strm)); end; ReallocMem(OutBuf, strm.total_out_lo32); OutBytes := strm.total_out_lo32; except FreeMem(OutBuf); raise end; end; procedure BZDecompressBuf(const InBuf: Pointer; InBytes: Integer; OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); var strm: TBZStreamRec; P: Pointer; BufInc: Integer; begin LoadBzip2DLL; FillChar(strm, sizeof(strm), 0); strm.bzalloc := bzip2AllocMem; strm.bzfree := bzip2FreeMem; BufInc := (InBytes + 255) and not 255; if OutEstimate = 0 then OutBytes := BufInc else OutBytes := OutEstimate; GetMem(OutBuf, OutBytes); try strm.next_in := InBuf; strm.avail_in := InBytes; strm.next_out := OutBuf; strm.avail_out := OutBytes; DCheck(BZ2_bzDecompressInit(strm, 0, 0)); try while DCheck(BZ2_bzDecompress(strm)) <> BZ_STREAM_END do begin P := OutBuf; Inc(OutBytes, BufInc); ReallocMem(OutBuf, OutBytes); strm.next_out := OutBuf + (strm.next_out - P); strm.avail_out := BufInc; end; finally DCheck(BZ2_bzDecompressEnd(strm)); end; ReallocMem(OutBuf, strm.total_out_lo32); OutBytes := strm.total_out_lo32; except FreeMem(OutBuf); raise end; end; // TCustomBZip2Stream constructor TCustomBZip2Stream.Create(Strm: TStream); begin inherited Create; FStrm := Strm; FStrmPos := Strm.Position; FBZRec.bzalloc := bzip2AllocMem; FBZRec.bzfree := bzip2FreeMem; end; procedure TCustomBZip2Stream.Progress(Sender: TObject); begin if Assigned(FOnProgress) then FOnProgress(Sender); end; { TCustomBZip2Stream } // TBZCompressionStream constructor TBZCompressionStream.Create(BlockSize100k: TBlockSize100k; Dest: TStream); const BlockSizes: array[TBlockSize100k] of ShortInt = (1, 2, 3, 4, 5, 6, 7, 8, 9); begin inherited Create(Dest); LoadBzip2DLL; FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); CCheck(BZ2_bzCompressInit(FBZRec, BlockSizes[BlockSize100k], 0, 0)); end; destructor TBZCompressionStream.Destroy; begin if FBZRec.state <> nil then begin FBZRec.next_in := nil; FBZRec.avail_in := 0; try if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (CCheck(BZ2_bzCompress(FBZRec, BZ_FINISH)) <> BZ_STREAM_END) and (FBZRec.avail_out = 0) do begin FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); end; if FBZRec.avail_out < sizeof(FBuffer) then FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FBZRec.avail_out); finally BZ2_bzCompressEnd(FBZRec); end; end; inherited Destroy; end; function TBZCompressionStream.Read(var Buffer; Count: Longint): Longint; begin raise EBZCompressionError.Create('Invalid stream operation'); end; { TBZCompressionStream } function TBZCompressionStream.Write(const Buffer; Count: Longint): Longint; begin FBZRec.next_in := @Buffer; FBZRec.avail_in := Count; if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_in > 0) do begin CCheck(BZ2_bzCompress(FBZRec, BZ_RUN)); if FBZRec.avail_out = 0 then begin FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); FBZRec.next_out := @FBuffer[0]; FBZRec.avail_out := sizeof(FBuffer); FStrmPos := FStrm.Position; end; Progress(Self); end; Result := Count; end; { TBZCompressionStream } function TBZCompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var conv64 : TLargeInteger; begin if (Offset = 0) and (Origin = soCurrent) then begin conv64.LowPart := FBZRec.total_in_lo32; conv64.HighPart := FBZRec.total_in_hi32; Result := conv64.QuadPart end else raise EBZCompressionError.Create('Invalid stream operation'); end; { TBZCompressionStream } function TBZCompressionStream.GetCompressionRate: Single; var conv64In : TLargeInteger; conv64Out: TLargeInteger; begin conv64In.LowPart := FBZRec.total_in_lo32; conv64In.HighPart := FBZRec.total_in_hi32; conv64Out.LowPart := FBZRec.total_out_lo32; conv64Out.HighPart := FBZRec.total_out_hi32; if conv64In.QuadPart = 0 then Result := 0 else Result := (1.0 - (conv64Out.QuadPart / conv64In.QuadPart)) * 100.0; end; { TBZCompressionStream } // TDecompressionStream constructor TBZDecompressionStream.Create(Source: TStream); begin inherited Create(Source); LoadBzip2DLL; FBZRec.next_in := @FBuffer[0]; FBZRec.avail_in := 0; DCheck(BZ2_bzDecompressInit(FBZRec, 0, 0)); end; destructor TBZDecompressionStream.Destroy; begin if FBZRec.state <> nil then BZ2_bzDecompressEnd(FBZRec); inherited Destroy; end; function TBZDecompressionStream.Read(var Buffer; Count: Longint): Longint; begin FBZRec.next_out := @Buffer; FBZRec.avail_out := Count; if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; while (FBZRec.avail_out > 0) do begin if FReadState = BZ_STREAM_END then begin Result := Count - FBZRec.avail_out; Exit; end else if FBZRec.avail_in = 0 then begin FBZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); if FBZRec.avail_in = 0 then begin Result := Count - FBZRec.avail_out; Exit; end; FBZRec.next_in := @FBuffer[0]; FStrmPos := FStrm.Position; end; FReadState := DCheck(BZ2_bzDecompress(FBZRec)); Progress(Self); end; Result := Count; end; { TBZDecompressionStream } function TBZDecompressionStream.Write(const Buffer; Count: Longint): Longint; begin raise EBZDecompressionError.Create('Invalid stream operation'); end; { TBZDecompressionStream } function TBZDecompressionStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; var I : Integer; Buf : array[0..4095] of Char; conv64: TLargeInteger; NewOff: Int64; begin conv64.LowPart := FBZRec.total_out_lo32; conv64.HighPart := FBZRec.total_out_hi32; if (Offset = 0) and (Origin = soBeginning) then begin DCheck(BZ2_bzDecompressEnd(FBZRec)); DCheck(BZ2_bzDecompressInit(FBZRec, 0, 0)); FBZRec.next_in := @FBuffer[0]; FBZRec.avail_in := 0; FStrm.Position := 0; FStrmPos := 0; end else if ((Offset >= 0) and (Origin = soCurrent)) or (((Offset - conv64.QuadPart) > 0) and (Origin = soBeginning)) then begin NewOff := Offset; if Origin = soBeginning then Dec(NewOff, conv64.QuadPart); if NewOff > 0 then begin for I := 1 to NewOff div sizeof(Buf) do ReadBuffer(Buf, sizeof(Buf)); ReadBuffer(Buf, NewOff mod sizeof(Buf)); end; end else raise EBZDecompressionError.Create('Invalid stream operation'); Result := conv64.QuadPart; end; { TBZDecompressionStream } end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abconst.pas�����������������������������������������������0000644�0001750�0000144�00000017473�12014201074�021711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* Abbrevia: AbConst.pas *} {*********************************************************} {* Abbrevia: Constants *} {*********************************************************} unit AbConst; {$I AbDefine.inc} interface const AbVersion = 5.0; AbVersionS = '5.0'; Ab_MessageLen = 255; Ab_CaptionLen = 80; AB_ZIPPATHDELIM = '/'; const AbZipVersionNeeded = 1; AbUnknownCompressionMethod = 2; AbNoExtractionMethod = 3; AbInvalidPassword = 4; AbNoInsertionMethod = 5; AbInvalidFactor = 6; AbDuplicateName = 7; AbUnsupportedCompressionMethod = 8; AbUserAbort = 9; AbArchiveBusy = 10; AbBadSpanStream = 11; AbNoOverwriteSpanStream = 12; AbNoSpannedSelfExtract = 13; AbStreamFull = 14; AbNoSuchDirectory = 15; AbInflateBlockError = 16; AbBadStreamType = 17; AbTruncateError = 18; AbZipBadCRC = 19; AbZipBadStub = 20; AbFileNotFound = 21; AbInvalidLFH = 22; AbNoArchive = 23; AbErrZipInvalid = 24; AbReadError = 25; AbInvalidIndex = 26; AbInvalidThreshold = 27; AbUnhandledFileType = 28; AbSpanningNotSupported = 29; AbBBSReadTooManyBytes = 40; AbBBSSeekOutsideBuffer = 41; AbBBSInvalidOrigin = 42; AbBBSWriteTooManyBytes = 43; AbNoCabinetDllError = 50; AbFCIFileOpenError = 51; AbFCIFileReadError = 52; AbFCIFileWriteError = 53; AbFCIFileCloseError = 54; AbFCIFileSeekError = 55; AbFCIFileDeleteError = 56; AbFCIAddFileError = 57; AbFCICreateError = 58; AbFCIFlushCabinetError = 59; AbFCIFlushFolderError = 60; AbFDICopyError = 61; AbFDICreateError = 62; AbInvalidCabTemplate = 63; AbInvalidCabFile = 64; AbSWSNotEndofStream = 80; AbSWSSeekFailed = 81; AbSWSWriteFailed = 82; AbSWSInvalidOrigin = 83; AbSWSInvalidNewOrigin = 84; AbVMSReadTooManyBytes = 100; AbVMSInvalidOrigin = 101; AbVMSErrorOpenSwap = 102; AbVMSSeekFail = 103; AbVMSReadFail = 104; AbVMSWriteFail = 105; AbVMSWriteTooManyBytes = 106; AbGZipInvalid = 200; AbGzipBadCRC = 201; AbGzipBadFileSize = 202; AbTarInvalid = 220; AbTarBadFileName = 221; AbTarBadLinkName = 222; AbTarBadOp = 223; function AbStrRes(Index : Integer) : string; implementation uses AbResString; type AbStrRec = record ID: Integer; Str: string; end; const AbStrArray : array [0..66] of AbStrRec = ( (ID: AbZipVersionNeeded; Str: AbZipVersionNeededS), (ID: AbUnknownCompressionMethod; Str: AbUnknownCompressionMethodS), (ID: AbNoExtractionMethod; Str: AbNoExtractionMethodS), (ID: AbInvalidPassword; Str: AbInvalidPasswordS), (ID: AbNoInsertionMethod; Str: AbNoInsertionMethodS), (ID: AbInvalidFactor; Str: AbInvalidFactorS), (ID: AbDuplicateName; Str: AbDuplicateNameS), (ID: AbUnsupportedCompressionMethod; Str: AbUnsupportedCompressionMethodS), (ID: AbUserAbort; Str: AbUserAbortS), (ID: AbArchiveBusy; Str: AbArchiveBusyS), (ID: AbBadSpanStream; Str: AbBadSpanStreamS), (ID: AbNoOverwriteSpanStream; Str: AbNoOverwriteSpanStreamS), (ID: AbNoSpannedSelfExtract; Str: AbNoSpannedSelfExtractS), (ID: AbStreamFull; Str: AbStreamFullS), (ID: AbNoSuchDirectory; Str: AbNoSuchDirectoryS), (ID: AbInflateBlockError; Str: AbInflateBlockErrorS), (ID: AbBadStreamType; Str: AbBadStreamTypeS), (ID: AbTruncateError; Str: AbTruncateErrorS), (ID: AbZipBadCRC; Str: AbZipBadCRCS), (ID: AbZipBadStub; Str: AbZipBadStubS), (ID: AbFileNotFound; Str: AbFileNotFoundS), (ID: AbInvalidLFH; Str: AbInvalidLFHS), (ID: AbNoArchive; Str: AbNoArchiveS), (ID: AbErrZipInvalid; Str: AbErrZipInvalidS), (ID: AbReadError; Str: AbReadErrorS), (ID: AbInvalidIndex; Str: AbInvalidIndexS), (ID: AbInvalidThreshold; Str: AbInvalidThresholdS), (ID: AbUnhandledFileType; Str: AbUnhandledFileTypeS), (ID: AbSpanningNotSupported; Str: AbSpanningNotSupportedS), (ID: AbBBSReadTooManyBytes; Str: AbBBSReadTooManyBytesS), (ID: AbBBSSeekOutsideBuffer; Str: AbBBSSeekOutsideBufferS), (ID: AbBBSInvalidOrigin; Str: AbBBSInvalidOriginS), (ID: AbBBSWriteTooManyBytes; Str: AbBBSWriteTooManyBytesS), (ID: AbNoCabinetDllError; Str: AbNoCabinetDllErrorS), (ID: AbFCIFileOpenError; Str: AbFCIFileOpenErrorS), (ID: AbFCIFileReadError; Str: AbFCIFileReadErrorS), (ID: AbFCIFileWriteError; Str: AbFCIFileWriteErrorS), (ID: AbFCIFileCloseError; Str: AbFCIFileCloseErrorS), (ID: AbFCIFileSeekError; Str: AbFCIFileSeekErrorS), (ID: AbFCIFileDeleteError; Str: AbFCIFileDeleteErrorS), (ID: AbFCIAddFileError; Str: AbFCIAddFileErrorS), (ID: AbFCICreateError; Str: AbFCICreateErrorS), (ID: AbFCIFlushCabinetError; Str: AbFCIFlushCabinetErrorS), (ID: AbFCIFlushFolderError; Str: AbFCIFlushFolderErrorS), (ID: AbFDICopyError; Str: AbFDICopyErrorS), (ID: AbFDICreateError; Str: AbFDICreateErrorS), (ID: AbInvalidCabTemplate; Str: AbInvalidCabTemplateS), (ID: AbInvalidCabFile; Str: AbInvalidCabFileS), (ID: AbSWSNotEndofStream; Str: AbSWSNotEndofStreamS), (ID: AbSWSSeekFailed; Str: AbSWSSeekFailedS), (ID: AbSWSWriteFailed; Str: AbSWSWriteFailedS), (ID: AbSWSInvalidOrigin; Str: AbSWSInvalidOriginS), (ID: AbSWSInvalidNewOrigin; Str: AbSWSInvalidNewOriginS), (ID: AbVMSReadTooManyBytes; Str: AbVMSReadTooManyBytesS), (ID: AbVMSInvalidOrigin; Str: AbVMSInvalidOriginS), (ID: AbVMSErrorOpenSwap; Str: AbVMSErrorOpenSwapS), (ID: AbVMSSeekFail; Str: AbVMSSeekFailS), (ID: AbVMSReadFail; Str: AbVMSReadFailS), (ID: AbVMSWriteFail; Str: AbVMSWriteFailS), (ID: AbVMSWriteTooManyBytes; Str: AbVMSWriteTooManyBytesS), (ID: AbGzipInvalid; Str: AbGzipInvalidS), (ID: AbGzipBadCRC; Str: AbGzipBadCRCS), (ID: AbGzipBadFileSize; Str: AbGzipBadFileSizeS), (ID: AbTarInvalid; Str: AbTarInvalidS), (ID: AbTarBadFileName; Str: AbTarBadFileNameS), (ID: AbTarBadLinkName; Str: AbTarBadLinkNameS), (ID: AbTarBadOp; Str: AbTarBadOpS) ); function AbStrRes(Index : Integer) : string; var i : Integer; begin for i := Low(AbStrArray) to High(AbStrArray) do if AbStrArray[i].ID = Index then Result := AbStrArray[i].Str; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abdfcrys.pas����������������������������������������������0000644�0001750�0000144�00000045367�12014201074�022060� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbDfCryS.pas *} {*********************************************************} {* Deflate encryption streams *} {*********************************************************} unit AbDfCryS; {$I AbDefine.inc} interface uses Classes; type TAbZipEncryptHeader = array [0..11] of byte; TAbZipDecryptEngine = class private FReady : boolean; FState : array [0..2] of longint; protected procedure zdeInitState(const aPassphrase : AnsiString); public constructor Create; function Decode(aCh : byte) : byte; {-decodes a byte} procedure DecodeBuffer(var aBuffer; aCount : integer); {-decodes a buffer} function VerifyHeader(const aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint) : boolean; {-validate an encryption header} end; TAbDfDecryptStream = class(TStream) private FCheckValue : longint; FEngine : TAbZipDecryptEngine; FOwnsStream : Boolean; FPassphrase : AnsiString; FReady : boolean; FStream : TStream; protected public constructor Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); destructor Destroy; override; function IsValid : boolean; function Read(var aBuffer; aCount : longint) : longint; override; function Seek(aOffset : longint; aOrigin : word) : longint; override; function Write(const aBuffer; aCount : longint) : longint; override; property OwnsStream : Boolean read FOwnsStream write FOwnsStream; end; TAbZipEncryptEngine = class private FReady : boolean; FState : array [0..2] of longint; protected procedure zeeInitState(const aPassphrase : AnsiString); public constructor Create; function Encode(aCh : byte) : byte; {-encodes a byte} procedure EncodeBuffer(var aBuffer; aCount : integer); {-encodes a buffer} procedure CreateHeader(var aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint); {-generate an encryption header} end; TAbDfEncryptStream = class(TStream) private FBuffer : PAnsiChar; FBufSize : integer; FEngine : TAbZipEncryptEngine; FStream : TStream; protected public constructor Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); destructor Destroy; override; function Read(var aBuffer; aCount : longint) : longint; override; function Seek(aOffset : longint; aOrigin : word) : longint; override; function Write(const aBuffer; aCount : longint) : longint; override; end; implementation {Notes: the ZIP spec defines a couple of primitive routines for performing encryption. For speed Abbrevia inlines them into the respective methods of the encryption/decryption engines char crc32(long,char) return updated CRC from current CRC and next char update_keys(char): Key(0) <- crc32(key(0),char) Key(1) <- Key(1) + (Key(0) & 000000ffH) Key(1) <- Key(1) * 134775813 + 1 Key(2) <- crc32(key(2),key(1) >> 24) end update_keys char decrypt_byte() local unsigned short temp temp <- Key(2) | 2 decrypt_byte <- (temp * (temp ^ 1)) >> 8 end decrypt_byte } uses AbUtils; {---magic numbers from ZIP spec---} const StateInit1 = 305419896; StateInit2 = 591751049; StateInit3 = 878082192; MagicNumber = 134775813; {===internal encryption class========================================} constructor TAbZipDecryptEngine.Create; begin {create the ancestor} inherited Create; {we're not ready for decryption yet since a header hasn't been properly verified with VerifyHeader} FReady := false; end; {--------} function TAbZipDecryptEngine.Decode(aCh : byte) : byte; var Temp : longint; begin {check for programming error} Assert(FReady, 'TAbZipDecryptEngine.Decode: must successfully call VerifyHeader first'); {calculate the decoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Result := aCh xor ((Temp * (Temp xor 1)) shr 8); {mix the decoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(Result, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {--------} procedure TAbZipDecryptEngine.DecodeBuffer(var aBuffer; aCount : integer); var i : integer; Temp : longint; Buffer : PAnsiChar; WorkState : array [0..2] of longint; begin {check for programming error} Assert(FReady, 'TAbZipDecryptEngine.Decode: must successfully call VerifyHeader first'); {move the state to a local variable--for better speed} WorkState[0] := FState[0]; WorkState[1] := FState[1]; WorkState[2] := FState[2]; {reference the buffer as a PChar--easier arithmetic} Buffer := @aBuffer; {for each byte in the buffer...} for i := 0 to pred(aCount) do begin {calculate the next decoded byte (uses inlined decrypt_byte)} Temp := (WorkState[2] and $FFFF) or 2; Buffer^ := AnsiChar( byte(Buffer^) xor ((Temp * (Temp xor 1)) shr 8)); {mix the decoded byte into the state (uses inlined update_keys)} WorkState[0] := AbUpdateCrc32(byte(Buffer^), WorkState[0]); WorkState[1] := WorkState[1] + (WorkState[0] and $FF); WorkState[1] := (WorkState[1] * MagicNumber) + 1; WorkState[2] := AbUpdateCrc32(WorkState[1] shr 24, WorkState[2]); {move onto the next byte} inc(Buffer); end; {save the state} FState[0] := WorkState[0]; FState[1] := WorkState[1]; FState[2] := WorkState[2]; end; {--------} function TAbZipDecryptEngine.VerifyHeader(const aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint) : boolean; type TLongAsBytes = packed record L1, L2, L3, L4 : byte end; var i : integer; Temp : longint; WorkHeader : TAbZipEncryptHeader; begin {check for programming errors} Assert(aPassphrase <> '', 'TAbZipDecryptEngine.VerifyHeader: need a passphrase'); {initialize the decryption state} zdeInitState(aPassphrase); {decrypt the bytes in the header} for i := 0 to 11 do begin {calculate the next decoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; WorkHeader[i] := aHeader[i] xor ((Temp * (Temp xor 1)) shr 8); {mix the decoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(WorkHeader[i], FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {the header is valid if the twelfth byte of the decrypted header equals the fourth byte of the check value} Result := WorkHeader[11] = TLongAsBytes(aCheckValue).L4; {note: zips created with PKZIP prior to version 2.0 also checked that the tenth byte of the decrypted header equals the third byte of the check value} FReady := Result; end; {--------} procedure TAbZipDecryptEngine.zdeInitState(const aPassphrase : AnsiString); var i : integer; begin {initialize the decryption state} FState[0] := StateInit1; FState[1] := StateInit2; FState[2] := StateInit3; {mix in the passphrase to the state (uses inlined update_keys)} for i := 1 to length(aPassphrase) do begin FState[0] := AbUpdateCrc32(byte(aPassphrase[i]), FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; end; {====================================================================} {====================================================================} constructor TAbDfDecryptStream.Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); begin {create the ancestor} inherited Create; {save the parameters} FStream := aStream; FCheckValue := aCheckValue; FPassphrase := aPassphrase; {create the decryption engine} FEngine := TAbZipDecryptEngine.Create; end; {--------} destructor TAbDfDecryptStream.Destroy; {new !!.02} begin FEngine.Free; if FOwnsStream then FStream.Free; inherited Destroy; end; {--------} function TAbDfDecryptStream.IsValid : boolean; var Header : TAbZipEncryptHeader; begin {read the header from the stream} FStream.ReadBuffer(Header, sizeof(Header)); {check to see if the decryption engine agrees it's valid} Result := FEngine.VerifyHeader(Header, FPassphrase, FCheckValue); {if it isn't valid, reposition the stream, ready for the next try} if not Result then begin FStream.Seek(-sizeof(Header), soCurrent); FReady := false; end {otherwise, the stream is ready for decrypting data} else FReady := true; end; {--------} function TAbDfDecryptStream.Read(var aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(FReady, 'TAbDfDecryptStream.Read: the stream header has not been verified'); {read the data from the underlying stream} Result := FStream.Read(aBuffer, aCount); {decrypt the data} FEngine.DecodeBuffer(aBuffer, Result); end; {--------} function TAbDfDecryptStream.Seek(aOffset : longint; aOrigin : word) : longint; begin Result := FStream.Seek(aOffset, aOrigin); end; {--------} function TAbDfDecryptStream.Write(const aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(false, 'TAbDfDecryptStream.Write: the stream is read-only'); Result := 0; end; {====================================================================} {===TAbZipEncryptEngine==============================================} constructor TAbZipEncryptEngine.Create; begin {create the ancestor} inherited Create; {we're not ready for encryption yet since a header hasn't been properly generated with CreateHeader} FReady := false; end; {--------} procedure TAbZipEncryptEngine.CreateHeader( var aHeader : TAbZipEncryptHeader; const aPassphrase : AnsiString; aCheckValue : longint); type TLongAsBytes = packed record L1, L2, L3, L4 : byte end; var Ch : byte; i : integer; Temp : longint; WorkHeader : TAbZipEncryptHeader; begin {check for programming errors} Assert(aPassphrase <> '', 'TAbZipEncryptEngine.CreateHeader: need a passphrase'); {set the first ten bytes of the header with random values (in fact, we use a random value for each byte and mix it in with the state)} {initialize the decryption state} zeeInitState(aPassphrase); {for the first ten bytes...} for i := 0 to 9 do begin {get a random value} Ch := Random( 256 ); {calculate the XOR encoding byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); {set the current byte of the header} WorkHeader[i] := Ch xor Temp; end; {now encrypt the first ten bytes of the header (this merely sets up the state so that we can encrypt the last two bytes)} {reinitialize the decryption state} zeeInitState(aPassphrase); {for the first ten bytes...} for i := 0 to 9 do begin {calculate the XOR encoding byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(WorkHeader[i], FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); {set the current byte of the header} WorkHeader[i] := WorkHeader[i] xor Temp; end; {now initialize byte 10 of the header, and encrypt it} Ch := TLongAsBytes(aCheckValue).L3; Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); WorkHeader[10] := Ch xor Temp; {now initialize byte 11 of the header, and encrypt it} Ch := TLongAsBytes(aCheckValue).L4; Temp := (FState[2] and $FFFF) or 2; Temp := (Temp * (Temp xor 1)) shr 8; FState[0] := AbUpdateCrc32(Ch, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); WorkHeader[11] := Ch xor Temp; {we're now ready to encrypt} FReady := true; {return the header} aHeader := WorkHeader; end; {--------} function TAbZipEncryptEngine.Encode(aCh : byte) : byte; var Temp : longint; begin {check for programming error} Assert(FReady, 'TAbZipEncryptEngine.Encode: must call CreateHeader first'); {calculate the encoded byte (uses inlined decrypt_byte)} Temp := (FState[2] and $FFFF) or 2; Result := aCh xor (Temp * (Temp xor 1)) shr 8; {mix the unencoded byte into the state (uses inlined update_keys)} FState[0] := AbUpdateCrc32(aCh, FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; {--------} procedure TAbZipEncryptEngine.EncodeBuffer(var aBuffer; aCount : integer); var Ch : byte; i : integer; Temp : longint; Buffer : PAnsiChar; WorkState : array [0..2] of longint; begin {check for programming error} Assert(FReady, 'TAbZipEncryptEngine.EncodeBuffer: must call CreateHeader first'); {move the state to a local variable--for better speed} WorkState[0] := FState[0]; WorkState[1] := FState[1]; WorkState[2] := FState[2]; {reference the buffer as a PChar--easier arithmetic} Buffer := @aBuffer; {for each byte in the buffer...} for i := 0 to pred(aCount) do begin {calculate the next encoded byte (uses inlined decrypt_byte)} Temp := (WorkState[2] and $FFFF) or 2; Ch := byte(Buffer^); Buffer^ := AnsiChar(Ch xor ((Temp * (Temp xor 1)) shr 8)); {mix the decoded byte into the state (uses inlined update_keys)} WorkState[0] := AbUpdateCrc32(Ch, WorkState[0]); WorkState[1] := WorkState[1] + (WorkState[0] and $FF); WorkState[1] := (WorkState[1] * MagicNumber) + 1; WorkState[2] := AbUpdateCrc32(WorkState[1] shr 24, WorkState[2]); {move onto the next byte} inc(Buffer); end; {save the state} FState[0] := WorkState[0]; FState[1] := WorkState[1]; FState[2] := WorkState[2]; end; {--------} procedure TAbZipEncryptEngine.zeeInitState(const aPassphrase : AnsiString); var i : integer; begin {initialize the decryption state} FState[0] := StateInit1; FState[1] := StateInit2; FState[2] := StateInit3; {mix in the passphrase to the state (uses inlined update_keys)} for i := 1 to length(aPassphrase) do begin FState[0] := AbUpdateCrc32(byte(aPassphrase[i]), FState[0]); FState[1] := FState[1] + (FState[0] and $FF); FState[1] := (FState[1] * MagicNumber) + 1; FState[2] := AbUpdateCrc32(FState[1] shr 24, FState[2]); end; end; {====================================================================} {===TAbDfEncryptStream===============================================} constructor TAbDfEncryptStream.Create(aStream : TStream; aCheckValue : longint; const aPassphrase : AnsiString); var Header : TAbZipEncryptHeader; begin {create the ancestor} inherited Create; {save the stream parameter} FStream := aStream; {create the encryption engine} FEngine := TAbZipEncryptEngine.Create; {generate the encryption header, write it to the stream} FEngine.CreateHeader(Header, aPassphrase, aCheckValue); aStream.WriteBuffer(Header, sizeof(Header)); end; {--------} destructor TAbDfEncryptStream.Destroy; begin {free the internal buffer if used} if (FBuffer <> nil) then FreeMem(FBuffer); {free the engine} FEngine.Free; {destroy the ancestor} inherited Destroy; end; {--------} function TAbDfEncryptStream.Read(var aBuffer; aCount : longint) : longint; begin {check for programming error} Assert(false, 'TAbDfEncryptStream.Read: the stream is write-only'); Result := 0; end; {--------} function TAbDfEncryptStream.Seek(aOffset : longint; aOrigin : word) : longint; begin Result := FStream.Seek(aOffset, aOrigin); end; {--------} function TAbDfEncryptStream.Write(const aBuffer; aCount : longint) : longint; begin {note: since we cannot alter a const parameter, we should copy the data to our own buffer, encrypt it and then write it} {check that our buffer is large enough} if (FBufSize < aCount) then begin if (FBuffer <> nil) then FreeMem(FBuffer); GetMem(FBuffer, aCount); FBufSize := aCount; end; {copy the data to our buffer} Move(aBuffer, FBuffer^, aCount); {encrypt the data in our buffer} FEngine.EncodeBuffer(FBuffer^, aCount); {write the data in our buffer to the underlying stream} Result := FStream.Write(FBuffer^, aCount); end; {====================================================================} end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/fparchive/abbitbkt.pas����������������������������������������������0000644�0001750�0000144�00000015600�12014201074�022030� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbBitBkt.pas *} {*********************************************************} {* ABBREVIA: Bit bucket memory stream class *} {*********************************************************} unit AbBitBkt; {$I AbDefine.inc} interface uses Classes, AbUtils; type TAbBitBucketStream = class(TStream) private FBuffer : {$IFDEF UNICODE}PByte{$ELSE}PAnsiChar{$ENDIF}; FBufSize : longint; FBufPosn : longint; FPosn : Int64; FSize : Int64; FTail : Int64; protected public constructor Create(aBufSize : cardinal); destructor Destroy; override; function Read(var Buffer; Count : Longint) : Longint; override; function Write(const Buffer; Count : Longint) : Longint; override; function Seek(const Offset : Int64; Origin : TSeekOrigin) : Int64; override; procedure ForceSize(aSize : Int64); end; implementation uses Math, SysUtils, AbExcept; {Notes: The buffer is a circular queue without a head pointer; FTail is where data is next going to be written and it wraps indescriminately. The buffer can never be empty--it is always full (initially it is full of binary zeros. The class is designed to act as a bit bucket for the test feature of Abbrevia's zip code; it is not intended as a complete class with many possible applications. It is designed to be written to in a steady progression with some reading back in the recently written stream (the buffer size details how far back the Seek method will work). Seeking outside this buffer will result in exceptions being generated. For testing deflated files, the buffer size should be 32KB, for imploded files, either 8KB or 4KB. The Create constructor limits the buffer size to these values.} {===TAbBitBucketStream===============================================} constructor TAbBitBucketStream.Create(aBufSize : cardinal); begin inherited Create; if (aBufSize <> 4096) and (aBufSize <> 8192) and (aBufSize <> 32768) then FBufSize := 32768 else FBufSize := aBufSize; {add a 1KB leeway} inc(FBufSize, 1024); GetMem(FBuffer, FBufSize); end; {--------} destructor TAbBitBucketStream.Destroy; begin if (FBuffer <> nil) then FreeMem(FBuffer, FBufSize); inherited Destroy; end; {--------} procedure TAbBitBucketStream.ForceSize(aSize : Int64); begin FSize := aSize; end; {--------} function TAbBitBucketStream.Read(var Buffer; Count : Longint) : Longint; var Chunk2Size : Int64; Chunk1Size : Int64; OutBuffer : PByte; begin OutBuffer := @Buffer; {we cannot read more bytes than there is buffer} if (Count > FBufSize) then raise EAbBBSReadTooManyBytes.Create(Count); {calculate the size of the chunks} if (FBufPosn <= FTail) then begin Chunk1Size := FTail - FBufPosn; if (Chunk1Size > Count) then Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk1Size := FBufSize - FBufPosn; if (Chunk1Size > Count) then begin Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk2Size := FTail; if (Chunk2Size > (Count - Chunk1Size)) then Chunk2Size := Count - Chunk1Size; end end; {we cannot read more bytes than there are available} if (Count > (Chunk1Size + Chunk2Size)) then raise EAbBBSReadTooManyBytes.Create(Count); {perform the read} if (Chunk1Size > 0) then begin Move(FBuffer[FBufPosn], OutBuffer^, Chunk1Size); inc(FBufPosn, Chunk1Size); inc(FPosn, Chunk1Size); end; if (Chunk2Size > 0) then begin {we've wrapped} Move(FBuffer[0], (OutBuffer + Chunk1Size)^, Chunk2Size); FBufPosn := Chunk2Size; inc(FPosn, Chunk2Size); end; Result := Count; end; {--------} function TAbBitBucketStream.Write(const Buffer; Count : Longint) : Longint; var Chunk2Size : Int64; Chunk1Size : Int64; InBuffer : PByte; Overage : longint; begin Result := Count; InBuffer := @Buffer; {we cannot write more bytes than there is buffer} while Count > FBufSize do begin Overage := Min(FBufSize, Count - FBufSize); Write(InBuffer^, Overage); Inc(PtrInt(InBuffer), Overage); Dec(Count, Overage); end; {calculate the size of the chunks} Chunk1Size := FBufSize - FTail; if (Chunk1Size > Count) then begin Chunk1Size := Count; Chunk2Size := 0; end else begin Chunk2Size := Count - Chunk1Size; end; {write the first chunk} if (Chunk1Size > 0) then begin Move(InBuffer^, FBuffer[FTail], Chunk1Size); inc(FTail, Chunk1Size); end; {if the second chunk size is not zero, write the second chunk; note that we have wrapped} if (Chunk2Size > 0) then begin Move((InBuffer + Chunk1Size)^, FBuffer[0], Chunk2Size); FTail := Chunk2Size; end; {the stream size and position have changed} inc(FSize, Count); FPosn := FSize; FBufPosn := FTail; end; {--------} function TAbBitBucketStream.Seek(const Offset : Int64; Origin : TSeekOrigin): Int64; var Posn : Int64; BytesBack : longint; begin {calculate the new position} case Origin of soBeginning : Posn := Offset; soCurrent : Posn := FPosn + Offset; soEnd : if (Offset = 0) then begin {special case: position at end of stream} FBufPosn := FTail; FPosn := FSize; Result := FSize; Exit; end else begin Posn := FSize + Offset; end; else raise EAbBBSInvalidOrigin.Create; end; {calculate whether the new position is within the buffer; if not, raise exception} if (Posn > FSize) or (Posn <= (FSize - FBufSize)) then raise EAbBBSSeekOutsideBuffer.Create; {set the internal fields for the new position} FPosn := Posn; BytesBack := FSize - Posn; if (BytesBack <= FTail) then FBufPosn := FTail - BytesBack else FBufPosn := longint(FTail) + FBufSize - BytesBack; {return the new position} Result := Posn; end; {====================================================================} end. ��������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�016411� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/ZipApp.pas������������������������������������������������������0000644�0001750�0000144�00000011265�12627367014�020315� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are 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/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: ZipApp.pas *} {*********************************************************} {* ABBREVIA: Additional classes and routines *} {*********************************************************} unit ZipApp; {$mode objfpc}{$H+} interface uses Classes, SysUtils, AbArcTyp, AbZipKit, AbUtils; const {$IF DEFINED(MSWINDOWS)} faFolder = faDirectory; {$ELSE} faFolder = AB_FMODE_DIR or AB_FPERMISSION_GENERIC or AB_FPERMISSION_OWNEREXECUTE; {$ENDIF} type { TAbArchiveItemHelper } TAbArchiveItemHelper = class helper for TAbArchiveItem function MatchesPath(const Path : String; Recursive : Boolean = False) : Boolean; function MatchesPathEx(const Paths : String; Recursive : Boolean = False) : Boolean; end; { TAbArchiveAccess } TAbArchiveAccess = class(TAbArchive) end; { TAbZipKit } TAbZipKit = class(TAbCustomZipKit) public {en Delete directory entry and all file and directory entries matching the same path recursively } procedure DeleteDirectoriesRecursively(const Paths : String); {en Test specific item in the archive } procedure TestItemAt(Index : Integer); end; {en See if DirPath matches PathToMatch. If Recursive=True it is allowed for DirPath to point to a subdirectory of PathToMatch, for example: PathToMatch = 'dir/', DirPath = 'dir/subdir' - Result is True. } function AbDirMatch(DirPath : String; PathToMatch : String; Recursive : Boolean) : Boolean; {en From a list of paths separated with AbPathSep (';') extracts a path from the position StartPos (counted from 1) and modifies StartPos to point to next entry. When no more entries are found, returns empty string. } function AbExtractEntry(const Entries : String; var StartPos : Integer) : String; implementation uses AbExcept; { TAbArchiveItemHelper } function TAbArchiveItemHelper.MatchesPath(const Path: String; Recursive: Boolean): Boolean; var Value : string; Drive, Dir, Name : string; begin Value := Path; if (Value <> '') and (RightStr(Value, 1) <> AbPathDelim) then Value := Value + AbPathDelim; AbUnfixName(Value); AbParseFileName(Path, Drive, Dir, Name); Value := Dir + Name; Name := FileName; AbUnfixName(Name); Result := AbDirMatch(Name, Value, Recursive); end; function TAbArchiveItemHelper.MatchesPathEx(const Paths: String; Recursive: Boolean): Boolean; var Position: Integer; Path: String; begin Result := True; Position := 1; while True do begin Path := AbExtractEntry(Paths, Position); if Path = '' then Break; if MatchesPath(Path, Recursive) then Exit; end; Result := False; end; { TAbZipKit } procedure TAbZipKit.DeleteDirectoriesRecursively(const Paths: String); var I : Integer; begin TAbArchiveAccess(Archive).CheckValid; if Count > 0 then begin for I := Pred(Count) downto 0 do begin with Archive.ItemList[I] do if MatchesPathEx(Paths, True) then DeleteAt(I); end; end; end; procedure TAbZipKit.TestItemAt(Index: Integer); begin if (Archive <> nil) then TAbArchiveAccess(Archive).TestItemAt(Index) else raise EAbNoArchive.Create; end; function AbDirMatch(DirPath : String; PathToMatch : String; Recursive : Boolean) : Boolean; begin if Recursive then PathToMatch := PathToMatch + '*'; // append wildcard Result := AbPatternMatch(DirPath, 1, PathToMatch, 1); end; function AbExtractEntry(const Entries : String; var StartPos : Integer) : String; var I : Integer; Len: Integer; begin Result := ''; Len := Length(Entries); I := StartPos; if (I >= 1) and (I <= Len) then begin while (I <= Len) and (Entries[I] <> AbPathSep) do Inc(I); Result := Copy(Entries, StartPos, I - StartPos); if (I <= Len) and (Entries[I] = AbPathSep) then Inc(I); StartPos := I; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/ZipConfDlg.lfm��������������������������������������������������0000644�0001750�0000144�00000010775�12324541656�021111� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object DialogBox: TDialogBox Left = 526 Height = 299 Top = 165 Width = 424 AutoSize = True BorderIcons = [biSystemMenu] BorderStyle = bsDialog Caption = 'Zip plugin configuration' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 299 ClientWidth = 424 OnShow = DialogBoxShow Position = poScreenCenter LCLVersion = '1.1' object lblAbout: TLabel Left = 6 Height = 115 Top = 6 Width = 412 Align = alClient Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 Caption = 'Zip plugin supports PKZIP-compatible, TAR, GZip and BZip2 data compression and archiving.'#13#10#13#10'Copyright (C) 2006-2014 Alexander Koblov (alexx2000@mail.ru)' ParentColor = False WordWrap = True end object gbCompression: TGroupBox Left = 6 Height = 152 Top = 141 Width = 412 Align = alBottom AutoSize = True BorderSpacing.Top = 20 Caption = 'Compression' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 6 ClientHeight = 134 ClientWidth = 408 TabOrder = 0 object lblCompressionMethodToUse: TLabel AnchorSideLeft.Control = gbCompression AnchorSideTop.Control = gbCompression Left = 6 Height = 13 Top = 6 Width = 137 Caption = 'Compression method to use:' ParentColor = False end object lblDeflationOption: TLabel AnchorSideLeft.Control = gbCompression AnchorSideTop.Control = lblCompressionMethodToUse AnchorSideTop.Side = asrBottom Left = 6 Height = 13 Top = 37 Width = 80 BorderSpacing.Top = 18 Caption = 'Deflation option:' ParentColor = False end object cbCompressionMethodToUse: TComboBox AnchorSideLeft.Control = lblCompressionMethodToUse AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = lblCompressionMethodToUse AnchorSideTop.Side = asrCenter AnchorSideRight.Control = gbCompression AnchorSideRight.Side = asrBottom Left = 155 Height = 21 Top = 2 Width = 247 Anchors = [akTop, akLeft, akRight] BorderSpacing.Left = 12 BorderSpacing.Right = 6 ItemHeight = 13 ItemIndex = 2 Items.Strings = ( 'smStored' 'smDeflated' 'smBestMethod' ) OnChange = ComboBoxChange Style = csDropDownList TabOrder = 0 Text = 'smBestMethod' end object cbDeflationOption: TComboBox AnchorSideLeft.Control = cbCompressionMethodToUse AnchorSideTop.Control = lblDeflationOption AnchorSideTop.Side = asrCenter AnchorSideRight.Control = cbCompressionMethodToUse AnchorSideRight.Side = asrBottom Left = 155 Height = 21 Top = 33 Width = 247 Anchors = [akTop, akLeft, akRight] ItemHeight = 13 ItemIndex = 0 Items.Strings = ( 'doNormal' 'doMaximum' 'doFast' 'doSuperFast' ) OnChange = ComboBoxChange Style = csDropDownList TabOrder = 1 Text = 'doNormal' end object btnOK: TButton AnchorSideTop.Control = btnCancel AnchorSideTop.Side = asrCenter AnchorSideRight.Control = btnCancel Left = 296 Height = 23 Top = 105 Width = 40 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Right = 8 Caption = 'OK' OnClick = ButtonClick TabOrder = 3 end object btnCancel: TButton AnchorSideTop.Control = chkTarAutoHandle AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDeflationOption AnchorSideRight.Side = asrBottom Left = 344 Height = 23 Top = 105 Width = 58 Anchors = [akTop, akRight] AutoSize = True BorderSpacing.Top = 24 Caption = 'Cancel' OnClick = ButtonClick TabOrder = 4 end object chkTarAutoHandle: TCheckBox AnchorSideLeft.Control = lblDeflationOption AnchorSideTop.Control = cbDeflationOption AnchorSideTop.Side = asrBottom AnchorSideRight.Control = cbDeflationOption AnchorSideRight.Side = asrBottom Left = 6 Height = 17 Top = 64 Width = 396 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 10 Caption = 'Open *.tar.xxx archives at one step (slowly with big archives)' TabOrder = 2 end end end ���doublecmd-0.7.1/plugins/wcx/zip/src/ZipConfDlg.pas��������������������������������������������������0000644�0001750�0000144�00000012264�12601037351�021077� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.bz2, *.tar, *.tgz, *.tbz archives Copyright (C) 2008-2014 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit ZipConfDlg; {$mode objfpc}{$H+} {$include calling.inc} {$R ZipConfDlg.lfm} interface uses SysUtils, Extension; procedure CreateZipConfDlg; procedure LoadConfig; procedure SaveConfig; implementation uses ZipFunc, AbZipTyp, DCClassesUtf8; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; var iIndex: Integer; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin case gCompressionMethodToUse of smStored: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 0, 0); smDeflated: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 1, 0); smBestMethod: SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTSETITEMINDEX, 2, 0); end; // case case gDeflationOption of doNormal: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 0, 0); doMaximum: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 1, 0); doFast: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 2, 0); doSuperFast: SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTSETITEMINDEX, 3, 0); end; // case SendDlgMsg(pDlg, 'chkTarAutoHandle', DM_SETCHECK, PtrInt(gTarAutoHandle), 0); end; DN_CLICK: if DlgItemName = 'btnOK' then begin iIndex:= SendDlgMsg(pDlg, 'cbCompressionMethodToUse', DM_LISTGETITEMINDEX, 0, 0); case iIndex of 0: gCompressionMethodToUse:= smStored; 1: gCompressionMethodToUse:= smDeflated; 2: gCompressionMethodToUse:= smBestMethod; end; // case iIndex:= SendDlgMsg(pDlg, 'cbDeflationOption', DM_LISTGETITEMINDEX, 0, 0); case iIndex of 0: gDeflationOption:= doNormal; 1: gDeflationOption:= doMaximum; 2: gDeflationOption:= doFast; 3: gDeflationOption:= doSuperFast; end; // case gTarAutoHandle:= Boolean(SendDlgMsg(pDlg, 'chkTarAutoHandle', DM_GETCHECK, 0, 0)); SaveConfig; SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end;// case end; // with end; procedure CreateZipConfDlg; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; procedure LoadConfig; var gIni: TIniFileEx; begin gIni:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try gCompressionMethodToUse:= TAbZipSupportedMethod(gIni.ReadInteger('Configuration', 'CompressionMethodToUse', Integer(AbDefCompressionMethodToUse))); gDeflationOption:= TAbZipDeflationOption(gIni.ReadInteger('Configuration', 'DeflationOption', Integer(AbDefDeflationOption))); gTarAutoHandle:= gIni.ReadBool('Configuration', 'TarAutoHandle', True); finally gIni.Free; end; end; procedure SaveConfig; var gIni: TIniFileEx; begin gIni:= TIniFileEx.Create(gStartupInfo.PluginConfDir + IniFileName); try gIni.WriteInteger('Configuration', 'CompressionMethodToUse', Integer(gCompressionMethodToUse)); gIni.WriteInteger('Configuration', 'DeflationOption', Integer(gDeflationOption)); gIni.WriteBool('Configuration', 'TarAutoHandle', gTarAutoHandle); gIni.UpdateFile; finally gIni.Free; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/fpc-extra.cfg���������������������������������������������������0000644�0001750�0000144�00000000157�11673054716�020757� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/ZipFunc.pas�����������������������������������������������������0000644�0001750�0000144�00000040433�12627371706�020472� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- WCX plugin for working with *.zip, *.gz, *.tar, *.tgz archives Copyright (C) 2007-2014 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit ZipFunc; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, WcxPlugin, AbArcTyp, AbZipTyp, Extension, AbExcept, AbUtils, AbConst, ZipApp; type { TAbZipKitEx } TAbZipKitEx = class (TAbZipKit) private FOperationResult: LongInt; FProcessDataProcW : TProcessDataProcW; procedure AbArchiveItemProgressEvent(Sender : TObject; Item : TAbArchiveItem; Progress : Byte; var Abort : Boolean); procedure AbArchiveProgressEvent (Sender : TObject; Progress : Byte; var Abort : Boolean); procedure AbNeedPasswordEvent(Sender : TObject; var NewPassword : AnsiString); procedure AbProcessItemFailureEvent(Sender: TObject; Item: TAbArchiveItem; ProcessType: TAbProcessType; ErrorClass: TAbErrorClass; ErrorCode: Integer); public constructor Create(AOwner: TComponent); override; function GetFileName(aFileIndex: Integer): String; end; {Mandatory functions} function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; function GetPackerCaps : Integer;dcpcall; procedure ConfigurePacker (Parent: HWND; DllInstance: THandle);dcpcall; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; {Extension API} procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; const IniFileName = 'zip.ini'; var gStartupInfo: TExtensionStartupInfo; gCompressionMethodToUse : TAbZipSupportedMethod; gDeflationOption : TAbZipDeflationOption; gTarAutoHandle : Boolean; implementation uses SysUtils, LazUTF8, ZipConfDlg, AbBrowse, DCOSUtils, DCStrUtils, DCConvertEncoding; threadvar gProcessDataProcW : TProcessDataProcW; procedure StringToArrayW(src: UnicodeString; pDst: PWideChar; MaxDstLength: Integer); begin if Length(src) < MaxDstLength then MaxDstLength := Length(src) else MaxDstLength := MaxDstLength - 1; // for ending #0 if Length(src) > 0 then Move(src[1], pDst^, SizeOf(WideChar) * MaxDstLength); pDst[MaxDstLength] := WideChar(0); end; function StrEndsWith(S : String; SearchPhrase : String) : Boolean; begin Result := (RightStr(S, Length(SearchPhrase)) = SearchPhrase); end; function GetArchiveError(const E : Exception): Integer; begin if E is EAbUserAbort then Result := E_EABORTED else if E is EAbFileNotFound then Result := E_EOPEN else if E is EAbUnhandledType then Result := E_UNKNOWN_FORMAT else if E is EFCreateError then Result := E_ECREATE else if E is EFOpenError then Result := E_EOPEN else if E is EReadError then Result := E_EREAD else if E is EWriteError then Result := E_EWRITE else Result := E_BAD_DATA; end; // -- Exported functions ------------------------------------------------------ function OpenArchive (var ArchiveData : tOpenArchiveData) : TArcHandle;dcpcall; begin Result := 0; ArchiveData.OpenResult := E_NOT_SUPPORTED; end; function OpenArchiveW(var ArchiveData : tOpenArchiveDataW) : TArcHandle;dcpcall; var Arc : TAbZipKitEx; begin Result := 0; Arc := TAbZipKitEx.Create(nil); try Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.OnNeedPassword:= @Arc.AbNeedPasswordEvent; Arc.TarAutoHandle := gTarAutoHandle; Arc.OpenArchive(UTF16ToUTF8(UnicodeString(ArchiveData.ArcName))); Arc.Tag := 0; Result := TArcHandle(Arc); except on E: Exception do begin Arc.Free; ArchiveData.OpenResult := GetArchiveError(E); end; end; end; function ReadHeader(hArcData : TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; begin Result := E_NOT_SUPPORTED; end; function ReadHeaderExW(hArcData : TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; var Arc : TAbZipKitEx; sFileName : String; begin Arc := TAbZipKitEx(Pointer(hArcData)); if Arc.Tag > Arc.Count - 1 then Exit(E_END_ARCHIVE); sFileName := Arc.GetFileName(Arc.Tag); StringToArrayW(UTF8Decode(sFileName), @HeaderData.FileName, SizeOf(HeaderData.FileName)); with Arc.Items[Arc.Tag] do begin HeaderData.PackSize := Lo(CompressedSize); HeaderData.PackSizeHigh := Hi(CompressedSize); HeaderData.UnpSize := Lo(UncompressedSize); HeaderData.UnpSizeHigh := Hi(UncompressedSize); HeaderData.FileCRC := CRC32; HeaderData.FileTime := NativeLastModFileTime; HeaderData.FileAttr := NativeFileAttributes; if IsDirectory then begin HeaderData.FileAttr := HeaderData.FileAttr or faFolder; end; end; Result := E_SUCCESS; end; function ProcessFile (hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PChar) : Integer;dcpcall; begin Result := E_NOT_SUPPORTED; end; function ProcessFileW(hArcData : TArcHandle; Operation : Integer; DestPath, DestName : PWideChar) : Integer;dcpcall; var Arc : TAbZipKitEx; DestNameUtf8: String; begin Arc := TAbZipKitEx(Pointer(hArcData)); try Arc.FOperationResult := E_SUCCESS; case Operation of PK_TEST: begin Arc.TestItemAt(Arc.Tag); // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin if Arc.FProcessDataProcW(PWideChar(UTF8Decode(Arc.Items[Arc.Tag].FileName)), Arc.Items[Arc.Tag].UncompressedSize) = 0 then Arc.FOperationResult := E_EABORTED; end; end; PK_EXTRACT: begin DestNameUtf8 := UTF16ToUTF8(UnicodeString(DestName)); if (DestPath <> nil) and (DestPath[0] <> #0) then Arc.BaseDirectory := DestPath else Arc.BaseDirectory := ExtractFilePath(DestNameUtf8); Arc.ExtractAt(Arc.Tag, DestNameUtf8); // Show progress and ask if aborting. if Assigned(Arc.FProcessDataProcW) then begin if Arc.FProcessDataProcW(PWideChar(UTF8Decode(Arc.Items[Arc.Tag].FileName)), Arc.Items[Arc.Tag].UncompressedSize) = 0 then Arc.FOperationResult := E_EABORTED; end; end; PK_SKIP: begin end; end; {case} except on E: Exception do Arc.FOperationResult := GetArchiveError(E); end; Result:= Arc.FOperationResult; Arc.Tag := Arc.Tag + 1; end; function CloseArchive (hArcData : TArcHandle) : Integer;dcpcall; var Arc : TAbZipKitEx; begin Arc := TAbZipKitEx(Pointer(hArcData)); Arc.CloseArchive; FreeAndNil(Arc); Result := E_SUCCESS; end; procedure SetChangeVolProc (hArcData : TArcHandle; pChangeVolProc : PChangeVolProc);dcpcall; begin end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; begin end; procedure SetProcessDataProc (hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; begin end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; var Arc : TAbZipKitEx; begin if (hArcData <> wcxInvalidHandle) then // if archive is open begin Arc := TAbZipKitEx(Pointer(hArcData)); Arc.FProcessDataProcW := pProcessDataProc; end else // if archive is close gProcessDataProcW := pProcessDataProc; end; {Optional functions} function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; var Arc : TAbZipKitEx; FilePath: String; FileName: UnicodeString; sPassword: AnsiString; sPackedFile: String; begin Arc := TAbZipKitEx.Create(nil); try Arc.AutoSave := False; Arc.TarAutoHandle:= True; Arc.CompressionMethodToUse:= gCompressionMethodToUse; Arc.DeflationOption:= gDeflationOption; Arc.FProcessDataProcW := gProcessDataProcW; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.StoreOptions := Arc.StoreOptions + [soReplace]; sPackedFile := UTF16ToUTF8(UnicodeString(PackedFile)); if ((Flags and PK_PACK_ENCRYPT) <> 0) and (LowerCase(ExtractFileExt(sPackedFile)) = '.zip') then // only zip supports encryption begin Arc.AbNeedPasswordEvent(Arc, sPassword); Arc.Password:= sPassword; end; try Arc.OpenArchive(sPackedFile); Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; Arc.BaseDirectory := UTF16ToUTF8(UnicodeString(SrcPath)); FilePath:= UTF16ToUTF8(UnicodeString(SubPath)); while True do begin FileName := UnicodeString(AddList); Arc.Archive.AddEntry(UTF16ToUTF8(FileName), FilePath); if (AddList + Length(FileName) + 1)^ = #0 then Break; Inc(AddList, Length(FileName) + 1); end; Arc.Save; Arc.CloseArchive; except on E: Exception do Arc.FOperationResult := GetArchiveError(E); end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function DeleteFilesW(PackedFile, DeleteList : PWideChar) : Integer;dcpcall; var Arc : TAbZipKitEx; pFileName : PWideChar; FileName : UnicodeString; FileNameUTF8 : String; begin Arc := TAbZipKitEx.Create(nil); try Arc.TarAutoHandle:= True; Arc.FProcessDataProcW := gProcessDataProcW; Arc.OnProcessItemFailure := @Arc.AbProcessItemFailureEvent; Arc.OnNeedPassword:= @Arc.AbNeedPasswordEvent; try Arc.OpenArchive(UTF16ToUTF8(UnicodeString(PackedFile))); // Set this after opening archive, to get only progress of deleting. Arc.OnArchiveItemProgress := @Arc.AbArchiveItemProgressEvent; Arc.OnArchiveProgress := @Arc.AbArchiveProgressEvent; // Parse file list. pFileName := DeleteList; while pFileName^ <> #0 do begin FileName := pFileName; // Convert PWideChar to UnicodeString (up to first #0). FileNameUTF8 := UTF16ToUTF8(FileName); // If ends with '.../*.*' or '.../' then delete directory. if StrEndsWith(FileNameUTF8, PathDelim + '*.*') or StrEndsWith(FileNameUTF8, PathDelim) then Arc.DeleteDirectoriesRecursively(ExtractFilePath(FileNameUTF8)) else Arc.DeleteFiles(FileNameUTF8); pFileName := pFileName + Length(FileName) + 1; // move after filename and ending #0 if pFileName^ = #0 then Break; // end of list end; Arc.Save; Arc.CloseArchive; except on E: Exception do Arc.FOperationResult := GetArchiveError(E); end; finally Result := Arc.FOperationResult; FreeAndNil(Arc); end; end; function GetPackerCaps : Integer;dcpcall; begin Result := PK_CAPS_NEW or PK_CAPS_DELETE or PK_CAPS_MODIFY or PK_CAPS_MULTIPLE or PK_CAPS_OPTIONS or PK_CAPS_BY_CONTENT or PK_CAPS_ENCRYPT; end; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle);dcpcall; begin CreateZipConfDlg; end; function CanYouHandleThisFileW(FileName: PWideChar): Boolean; dcpcall; begin try Result:= (AbDetermineArcType(UTF16ToUTF8(UnicodeString(FileName)), atUnknown) <> atUnknown); except Result := False; end; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; begin gStartupInfo:= StartupInfo^; // Load configuration from ini file LoadConfig; end; { TAbZipKitEx } constructor TAbZipKitEx.Create(AOwner: TComponent); begin inherited Create(AOwner); FOperationResult := E_SUCCESS; FProcessDataProcW := nil; TempDirectory := GetTempDir; end; function TAbZipKitEx.GetFileName(aFileIndex: Integer): String; begin Result := Items[aFileIndex].FileName; if (ArchiveType in [atGzip, atGzippedTar]) and (Result = 'unknown') then begin Result := ExtractOnlyFileName(FileName); if (ArchiveType = atGzippedTar) then begin if (TarAutoHandle = False) and (ExtractOnlyFileExt(Result) <> 'tar') then Result := Result + '.tar'; end; end; DoDirSeparators(Result); Result := ExcludeFrontPathDelimiter(Result); Result := ExcludeTrailingPathDelimiter(Result); end; procedure TAbZipKitEx.AbProcessItemFailureEvent(Sender: TObject; Item: TAbArchiveItem; ProcessType: TAbProcessType; ErrorClass: TAbErrorClass; ErrorCode: Integer); var Message: AnsiString; begin case ErrorClass of ecFileOpenError: begin ErrorCode:= AbFCIFileOpenError; FOperationResult:= E_EOPEN; end; ecFileCreateError: begin ErrorCode:= AbFCICreateError; FOperationResult:= E_ECREATE; end else case ErrorCode of AbUserAbort: FOperationResult:= E_EABORTED; AbZipBadCRC: FOperationResult:= E_BAD_ARCHIVE; AbFileNotFound: FOperationResult:= E_NO_FILES; AbReadError: FOperationResult:= E_EREAD; else FOperationResult:= E_BAD_DATA; end; end; if ProcessType in [ptAdd, ptFreshen, ptReplace] then begin Message:= AbStrRes(ErrorCode) + ': ' + Item.FileName; if gStartupInfo.MessageBox(PAnsiChar(Message), nil, MB_OKCANCEL) = ID_OK then FOperationResult:= E_SUCCESS else begin raise EAbUserAbort.Create; end; end; end; procedure TAbZipKitEx.AbArchiveItemProgressEvent(Sender: TObject; Item: TAbArchiveItem; Progress: Byte; var Abort: Boolean); begin try if Assigned(FProcessDataProcW) then begin if Assigned(Item) then Abort := (FProcessDataProcW(PWideChar(UTF8Decode(Item.FileName)), -(Progress + 1000)) = 0) else Abort := (FProcessDataProcW(nil, -(Progress + 1000)) = 0); end; except Abort := True; end; end; procedure TAbZipKitEx.AbArchiveProgressEvent(Sender: TObject; Progress: Byte; var Abort: Boolean); begin try if Assigned(FProcessDataProcW) then Abort := (FProcessDataProcW(nil, -(Progress)) = 0); except Abort := True; end; end; procedure TAbZipKitEx.AbNeedPasswordEvent(Sender: TObject; var NewPassword: AnsiString); var aNewPassword: array[0..MAX_PATH-1] of AnsiChar; Result: Boolean; begin aNewPassword := Copy(NewPassword, 1, MAX_PATH); Result:= gStartupInfo.InputBox('Zip', 'Please enter the password:', True, PAnsiChar(aNewPassword), MAX_PATH); if Result then NewPassword := aNewPassword else raise EAbUserAbort.Create; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/Zip.dpr���������������������������������������������������������0000644�0001750�0000144�00000001024�12630665441�017645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library Zip; uses FPCAdds, SysUtils, Classes, ZipFunc in 'ZipFunc.pas'; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } PackFilesW, DeleteFilesW, GetPackerCaps, ConfigurePacker, CanYouHandleThisFileW, { Extension API } ExtensionInitialize; {$R *.res} begin {$IFDEF UNIX} WriteLN('Zip plugin is loaded'); {$ENDIF} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/src/Zip.lpi���������������������������������������������������������0000644�0001750�0000144�00000011253�12451527075�017652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <ProjectOptions> <Version Value="9"/> <PathDelim Value="\"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="ZIP WCX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/zip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../fparchive;../../../../sdk;../lzma/compression/LZ;../lzma/compression/LZMA;../lzma/compression/RangeCoder"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="2" Valid="True"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="Zip.dpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <Target> <Filename Value="../lib/zip.wcx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);../../../../sdk"/> <OtherUnitFiles Value="../fparchive;../../../../sdk;../lzma/compression/LZ;../lzma/compression/LZMA;../lzma/compression/RangeCoder"/> <UnitOutputDirectory Value="../lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'linux') then begin LinkerOptions += ' -z relro'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <ConfigFile> <CustomConfigFile Value="True"/> <ConfigFilePath Value="fpc-extra.cfg"/> </ConfigFile> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/lzma/���������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�016565� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/lzma/LGPL.txt�������������������������������������������������������0000644�0001750�0000144�00000063514�12014201074�020043� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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 library's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. <signature of Ty Coon>, 1 April 1990 Ty Coon, President of Vice That's all there is to it! ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/lzma/7zC.txt��������������������������������������������������������0000644�0001750�0000144�00000015114�12014201074�017741� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������7z ANSI-C Decoder 4.23 ---------------------- 7z ANSI-C Decoder 4.23 Copyright (C) 1999-2005 Igor Pavlov 7z ANSI-C provides 7z/LZMA decoding. 7z ANSI-C version is simplified version ported from C++ code. LZMA is default and general compression method of 7z format in 7-Zip compression program (www.7-zip.org). LZMA provides high compression ratio and very fast decompression. LICENSE ------- Read lzma.txt for information about license. Files --------------------- 7zAlloc.* - Allocate and Free 7zBuffer.* - Buffer structure 7zCrc.* - CRC32 code 7zDecode.* - Low level memory->memory decoding 7zExtract.* - High level stream->memory decoding 7zHeader.* - .7z format constants 7zIn.* - .7z archive opening 7zItem.* - .7z structures 7zMain.c - Test application 7zMethodID.* - MethodID structure 7zTypes.h - Base types and constants How To Use ---------- You must download 7-Zip program from www.7-zip.org. You can create .7z archive with 7z.exe or 7za.exe: 7za.exe a archive.7z *.htm -r -mx -m0fb=255 -mf=off If you have big number of files in archive, and you need fast extracting, you can use partly-solid archives: 7za.exe a archive.7z *.htm -ms=512K -r -mx -m0fb=255 -m0d=512K -mf=off In that example 7-Zip will use 512KB solid blocks. So it needs to decompress only 512KB for extracting one file from such archive. Limitations of current version of 7z ANSI-C Decoder --------------------------------------------------- - It reads only "FileName", "Size", and "CRC" information for each file in archive. - It supports only LZMA and Copy (no compression) methods. - It converts original UTF-16 Unicode file names to UTF-8 Unicode file names. These limitations will be fixed in future versions. Using 7z ANSI-C Decoder Test application: ----------------------------------------- Usage: 7zDec <command> <archive_name> <Command>: e: Extract files from archive l: List contents of archive t: Test integrity of archive Example: 7zDec l archive.7z lists contents of archive.7z 7zDec e archive.7z extracts files from archive.7z to current folder. How to use .7z Decoder ---------------------- .7z Decoder can be compiled in one of two modes: 1) Default mode. In that mode 7z Decoder will read full compressed block to RAM before decompressing. 2) Mode with defined _LZMA_IN_CB. In that mode 7z Decoder can read compressed block by parts. And you can specify desired buffer size. So memory requirements can be reduced. But decompressing speed will be 5-10% lower and code size is slightly larger. Memory allocation ~~~~~~~~~~~~~~~~~ 7z Decoder uses two memory pools: 1) Temporary pool 2) Main pool Such scheme can allow you to avoid fragmentation of allocated blocks. Steps for using 7z decoder -------------------------- Use code at 7zMain.c as example. 1) Declare variables: inStream /* implements ISzInStream interface */ CArchiveDatabaseEx db; /* 7z archive database structure */ ISzAlloc allocImp; /* memory functions for main pool */ ISzAlloc allocTempImp; /* memory functions for temporary pool */ 2) call InitCrcTable(); function to initialize CRC structures. 3) call SzArDbExInit(&db); function to initialize db structures. 4) call SzArchiveOpen(inStream, &db, &allocMain, &allocTemp) to open archive This function opens archive "inStream" and reads headers to "db". All items in "db" will be allocated with "allocMain" functions. SzArchiveOpen function allocates and frees temporary structures by "allocTemp" functions. 5) List items or Extract items Listing code: ~~~~~~~~~~~~~ { UInt32 i; for (i = 0; i < db.Database.NumFiles; i++) { CFileItem *f = db.Database.Files + i; printf("%10d %s\n", (int)f->Size, f->Name); } } Extracting code: ~~~~~~~~~~~~~~~~ SZ_RESULT SzExtract( ISzInStream *inStream, CArchiveDatabaseEx *db, UInt32 fileIndex, /* index of file */ UInt32 *blockIndex, /* index of solid block */ Byte **outBuffer, /* pointer to pointer to output buffer (allocated with allocMain) */ size_t *outBufferSize, /* buffer size for output buffer */ size_t *offset, /* offset of stream for required file in *outBuffer */ size_t *outSizeProcessed, /* size of file in *outBuffer */ ISzAlloc *allocMain, ISzAlloc *allocTemp); If you need to decompress more than one file, you can send these values from previous call: blockIndex, outBuffer, outBufferSize, You can consider "outBuffer" as cache of solid block. If your archive is solid, it will increase decompression speed. After decompressing you must free "outBuffer": allocImp.Free(outBuffer); 6) call SzArDbExFree(&db, allocImp.Free) to free allocated items in "db". Memory requirements for .7z decoding ------------------------------------ Memory usage for Archive opening: - Temporary pool: - Memory for compressed .7z headers (if _LZMA_IN_CB is not defined) - Memory for uncompressed .7z headers - some other temporary blocks - Main pool: - Memory for database: Estimated size of one file structures in solid archive: - Size (4 or 8 Bytes) - CRC32 (4 bytes) - Some file information (4 bytes) - File Name (variable length) + pointer + allocation structures Memory usage for archive Decompressing: - Temporary pool: - Memory for compressed solid block (if _LZMA_IN_CB is not defined) - Memory for LZMA decompressing structures - Main pool: - Memory for decompressed solid block If _LZMA_IN_CB is defined, 7z Decoder will not allocate memory for compressed blocks. Instead of this, you must allocate buffer with desired size before calling 7z Decoder. Use 7zMain.c as example. EXIT codes ----------- 7z Decoder functions can return one of the following codes: #define SZ_OK (0) #define SZE_DATA_ERROR (1) #define SZE_OUTOFMEMORY (2) #define SZE_CRC_ERROR (3) #define SZE_NOTIMPL (4) #define SZE_FAIL (5) #define SZE_ARCHIVE_ERROR (6) LZMA Defines ------------ _LZMA_IN_CB - Use special callback mode for input stream to reduce memory requirements _SZ_FILE_SIZE_64 - define it if you need support for files larger than 4 GB _SZ_NO_INT_64 - define it if your compiler doesn't support long long int _LZMA_PROB32 - it can increase LZMA decompressing speed on some 32-bit CPUs. _SZ_ONE_DIRECTORY - define it if you want to locate all source files to one directory _SZ_ALLOC_DEBUG - define it if you want to debug alloc/free operations to stderr. --- http://www.7-zip.org http://www.7-zip.org/support.html ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wcx/zip/lzma/CPL.html�������������������������������������������������������0000644�0001750�0000144�00000035531�11222206571�020055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD><TITLE>Common Public License - v 1.0

    Common Public License - v 1.0

    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

    1. DEFINITIONS

    "Contribution" means:

      a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
      b) in the case of each subsequent Contributor:
      i) changes to the Program, and
      ii) additions to the Program;
      where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

    "Contributor" means any person or entity that distributes the Program.

    "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

    "Program" means the Contributions distributed in accordance with this Agreement.

    "Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

    2. GRANT OF RIGHTS

      a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
      b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
      c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
      d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

    3. REQUIREMENTS

    A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

      a) it complies with the terms and conditions of this Agreement; and
      b) its license agreement:
      i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
      ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
      iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
      iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

    When the Program is made available in source code form:

      a) it must be made available under this Agreement; and
      b) a copy of this Agreement must be included with each copy of the Program.

    Contributors may not remove or alter any copyright notices contained within the Program.

    Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

    4. COMMERCIAL DISTRIBUTION

    Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

    For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

    5. NO WARRANTY

    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

    6. DISCLAIMER OF LIABILITY

    EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

    7. GENERAL

    If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

    If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

    All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

    Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

    This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

    doublecmd-0.7.1/plugins/wcx/zip/lzma/LZMAAlone.dpr0000644000175000001440000000176012014201074020770 0ustar alexxusersprogram LZMAAlone; {$MODE Delphi} uses UCRC in 'UCRC.pas', ULZBinTree in 'compression\LZ\ULZBinTree.pas', ULZInWindow in 'compression\LZ\ULZInWindow.pas', ULZOutWindow in 'compression\LZ\ULZOutWindow.pas', ULZMABase in 'compression\LZMA\ULZMABase.pas', ULZMACommon in 'compression\LZMA\ULZMACommon.pas', ULZMADecoder in 'compression\LZMA\ULZMADecoder.pas', ULZMAEncoder in 'compression\LZMA\ULZMAEncoder.pas', UBitTreeDecoder in 'compression\RangeCoder\UBitTreeDecoder.pas', UBitTreeEncoder in 'compression\RangeCoder\UBitTreeEncoder.pas', URangeDecoder in 'compression\RangeCoder\URangeDecoder.pas', URangeEncoder in 'compression\RangeCoder\URangeEncoder.pas', UBufferedFS in 'UBufferedFS.pas', ULZMAAlone in 'ULZMAAlone.pas', ULZMABench in 'ULZMABench.pas',SysUtils; var lz:TLZMAAlone; {$IFDEF MSWINDOWS} {$APPTYPE CONSOLE} {$ENDIF} begin try lz:=TLZMAAlone.Create; lz.Main; lz.Free; except on e:exception do writeln(e.message); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/7zFormat.txt0000644000175000001440000001617212014201074021014 0ustar alexxusers7z Format description (2.30 Beta 25) ----------------------------------- This file contains description of 7z archive format. 7z archive can contain files compressed with any method. See "Methods.txt" for description for defined compressing methods. Format structure Overview ------------------------- Some fields can be optional. Archive structure ~~~~~~~~~~~~~~~~~ SignatureHeader [PackedStreams] [PackedStreamsForHeaders] [ Header or { Packed Header HeaderInfo } ] Header structure ~~~~~~~~~~~~~~~~ { ArchiveProperties AdditionalStreams { PackInfo { PackPos NumPackStreams Sizes[NumPackStreams] CRCs[NumPackStreams] } CodersInfo { NumFolders Folders[NumFolders] { NumCoders CodersInfo[NumCoders] { ID NumInStreams; NumOutStreams; PropertiesSize Properties[PropertiesSize] } NumBindPairs BindPairsInfo[NumBindPairs] { InIndex; OutIndex; } PackedIndices } UnPackSize[Folders][Folders.NumOutstreams] CRCs[NumFolders] } SubStreamsInfo { NumUnPackStreamsInFolders[NumFolders]; UnPackSizes[] CRCs[] } } MainStreamsInfo { (Same as in AdditionalStreams) } FilesInfo { NumFiles Properties[] { ID Size Data } } } HeaderInfo structure ~~~~~~~~~~~~~~~~~~~~ { (Same as in AdditionalStreams) } Notes about Notation and encoding --------------------------------- 7z uses little endian encoding. 7z archive format has optional headers that are marked as [] Header [] REAL_UINT64 means real UINT64. UINT64 means real UINT64 encoded with the following scheme: Size of encoding sequence depends from first byte: First_Byte Extra_Bytes Value (binary) 0xxxxxxx : ( xxxxxxx ) 10xxxxxx BYTE y[1] : ( xxxxxx << (8 * 1)) + y 110xxxxx BYTE y[2] : ( xxxxx << (8 * 2)) + y ... 1111110x BYTE y[6] : ( x << (8 * 6)) + y 11111110 BYTE y[7] : y 11111111 BYTE y[8] : y Property IDs ------------ 0x00 = kEnd, 0x01 = kHeader, 0x02 = kArchiveProperties, 0x03 = kAdditionalStreamsInfo, 0x04 = kMainStreamsInfo, 0x05 = kFilesInfo, 0x06 = kPackInfo, 0x07 = kUnPackInfo, 0x08 = kSubStreamsInfo, 0x09 = kSize, 0x0A = kCRC, 0x0B = kFolder, 0x0C = kCodersUnPackSize, 0x0D = kNumUnPackStream, 0x0E = kEmptyStream, 0x0F = kEmptyFile, 0x10 = kAnti, 0x11 = kName, 0x12 = kCreationTime, 0x13 = kLastAccessTime, 0x14 = kLastWriteTime, 0x15 = kWinAttributes, 0x16 = kComment, 0x17 = kEncodedHeader, 7z format headers ----------------- SignatureHeader ~~~~~~~~~~~~~~~ BYTE kSignature[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C}; ArchiveVersion { BYTE Major; // now = 0 BYTE Minor; // now = 2 }; UINT32 StartHeaderCRC; StartHeader { REAL_UINT64 NextHeaderOffset REAL_UINT64 NextHeaderSize UINT32 NextHeaderCRC } ........................... ArchiveProperties ~~~~~~~~~~~~~~~~~ BYTE NID::kArchiveProperties (0x02) while(true) { BYTE PropertyType; if (aType == 0) break; UINT64 PropertySize; BYTE PropertyData[PropertySize]; } Digests (NumStreams) ~~~~~~~~~~~~~~~~~~~~~ BYTE AllAreDefined if (AllAreDefined == 0) { for(NumStreams) BIT Defined } UINT32 CRCs[NumDefined] PackInfo ~~~~~~~~~~~~ BYTE NID::kPackInfo (0x06) UINT64 PackPos UINT64 NumPackStreams [] BYTE NID::kSize (0x09) UINT64 PackSizes[NumPackStreams] [] [] BYTE NID::kCRC (0x0A) PackStreamDigests[NumPackStreams] [] BYTE NID::kEnd Folder ~~~~~~ UINT64 NumCoders; for (NumCoders) { BYTE { 0:3 DecompressionMethod.IDSize 4: 0 - IsSimple 1 - Is not simple 5: 0 - No Attributes 1 - There Are Attributes 7: 0 - Last Method in Alternative_Method_List 1 - There are more alternative methods } BYTE DecompressionMethod.ID[DecompressionMethod.IDSize] if (!IsSimple) { UINT64 NumInStreams; UINT64 NumOutStreams; } if (DecompressionMethod[0] != 0) { UINT64 PropertiesSize BYTE Properties[PropertiesSize] } } NumBindPairs = NumOutStreamsTotal - 1; for (NumBindPairs) { UINT64 InIndex; UINT64 OutIndex; } NumPackedStreams = NumInStreamsTotal - NumBindPairs; if (NumPackedStreams > 1) for(NumPackedStreams) { UINT64 Index; }; Coders Info ~~~~~~~~~~~ BYTE NID::kUnPackInfo (0x07) BYTE NID::kFolder (0x0B) UINT64 NumFolders BYTE External switch(External) { case 0: Folders[NumFolders] case 1: UINT64 DataStreamIndex } BYTE ID::kCodersUnPackSize (0x0C) for(Folders) for(Folder.NumOutStreams) UINT64 UnPackSize; [] BYTE NID::kCRC (0x0A) UnPackDigests[NumFolders] [] BYTE NID::kEnd SubStreams Info ~~~~~~~~~~~~~~ BYTE NID::kSubStreamsInfo; (0x08) [] BYTE NID::kNumUnPackStream; (0x0D) UINT64 NumUnPackStreamsInFolders[NumFolders]; [] [] BYTE NID::kSize (0x09) UINT64 UnPackSizes[] [] [] BYTE NID::kCRC (0x0A) Digests[Number of streams with unknown CRC] [] BYTE NID::kEnd Streams Info ~~~~~~~~~~~~ [] PackInfo [] [] CodersInfo [] [] SubStreamsInfo [] BYTE NID::kEnd FilesInfo ~~~~~~~~~ BYTE NID::kFilesInfo; (0x05) UINT64 NumFiles while(true) { BYTE PropertyType; if (aType == 0) break; UINT64 Size; switch(PropertyType) { kEmptyStream: (0x0E) for(NumFiles) BIT IsEmptyStream kEmptyFile: (0x0F) for(EmptyStreams) BIT IsEmptyFile kAnti: (0x10) for(EmptyStreams) BIT IsAntiFile case kCreationTime: (0x12) case kLastAccessTime: (0x13) case kLastWriteTime: (0x14) BYTE AllAreDefined if (AllAreDefined == 0) { for(NumFiles) BIT TimeDefined } BYTE External; if(External != 0) UINT64 DataIndex [] for(Definded Items) UINT32 Time [] kNames: (0x11) BYTE External; if(External != 0) UINT64 DataIndex [] for(Files) { wchar_t Names[NameSize]; wchar_t 0; } [] kAttributes: (0x15) BYTE AllAreDefined if (AllAreDefined == 0) { for(NumFiles) BIT AttributesAreDefined } BYTE External; if(External != 0) UINT64 DataIndex [] for(Definded Attributes) UINT32 Attributes [] } } Header ~~~~~~ BYTE NID::kHeader (0x01) [] ArchiveProperties [] [] BYTE NID::kAdditionalStreamsInfo; (0x03) StreamsInfo [] [] BYTE NID::kMainStreamsInfo; (0x04) StreamsInfo [] [] FilesInfo [] BYTE NID::kEnd HeaderInfo ~~~~~~~~~~ [] BYTE NID::kEncodedHeader; (0x17) StreamsInfo for Encoded Header [] --- End of document doublecmd-0.7.1/plugins/wcx/zip/lzma/UCRC.pas0000644000175000001440000000266312014201074020003 0ustar alexxusersunit UCRC; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface type TCRC=class public Value:integer; constructor Create; procedure Init; procedure Update(const data: array of byte;const offset,size:integer);overload; procedure Update(const data: array of byte);overload; procedure UpdateByte(const b:integer); function GetDigest:integer; end; implementation var Table: array [0..255] of integer; constructor TCRC.Create; begin Value:=-1; end; procedure TCRC.Init; begin Value:=-1; end; procedure TCRC.Update(const data: array of byte;const offset,size:integer); var i:integer; begin for i := 0 to size-1 do value := Table[(value xor data[offset + i]) and $FF] xor (value shr 8); end; procedure TCRC.Update(const data: array of byte); var size:integer; i:integer; begin size := length(data); for i := 0 to size - 1 do value := Table[(value xor data[i]) and $FF] xor (value shr 8); end; procedure TCRC.UpdateByte(const b:integer); begin value := Table[(value xor b) and $FF] xor (value shr 8); end; function TCRC.GetDigest:integer; begin result:=value xor (-1); end; procedure InitCRC; var i,j,r:integer; begin for i := 0 to 255 do begin r := i; for j := 0 to 7 do begin if ((r and 1) <> 0) then r := (r shr 1) xor integer($EDB88320) else r := r shr 1; end; Table[i] := r; end; end; initialization InitCRC; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/UBufferedFS.pas0000644000175000001440000001160512014201074021343 0ustar alexxusersunit UBufferedFS; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,Math; const BufferSize=$10000;//64K type TBFSMode=(BFMRead,BFMWrite); TBufferedFS=class(TFileStream) private membuffer:array [0..BufferSize-1] of byte; bytesinbuffer:integer; bufferpos:integer; bufferdirty:boolean; Mode:TBFSMode; procedure Init; procedure ReadBuffer; public constructor Create(const FileName: string; Mode: Word); overload; constructor Create(const FileName: string; Mode: Word; Rights: Cardinal); overload; destructor Destroy; override; procedure Flush; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 0)} function ReadQWord: QWord; procedure WriteQWord(q: QWord); {$ENDIF} function Read(var Buffer; Count: Longint): Longint; override; function Write(const Buffer; Count: Longint): Longint; override; function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override; end; type TByteArray = array of byte; PByteArray = ^TByteArray; implementation function MovePointer(const P: Pointer; const dist: PtrInt): Pointer; begin Result:= Pointer(PtrInt(p) + dist); end; procedure TBufferedFS.Init; begin bytesinbuffer:=0; bufferpos:=0; bufferdirty:=false; mode:=BFMWrite; end; procedure TBufferedFS.Flush; begin if bufferdirty then inherited Write(membuffer[0],bufferpos); bufferdirty:=false; bytesinbuffer:=0; bufferpos:=0; end; constructor TBufferedFS.Create(const FileName: string; Mode: Word); begin inherited Create(FileName, Mode); init; end; constructor TBufferedFS.Create(const FileName: string; Mode: Word; Rights: Cardinal); begin inherited Create(FileName, Mode, Rights); init; end; destructor TBufferedFS.Destroy; begin flush; inherited Destroy; end; procedure TBufferedFS.ReadBuffer; begin flush; bytesinbuffer:=inherited Read(membuffer,buffersize); bufferpos:=0; end; {$IF (FPC_VERSION <= 2) and (FPC_RELEASE <= 4) and (FPC_PATCH <= 0)} function TBufferedFS.ReadQWord: QWord; var q: QWord; begin ReadBuffer(q, SizeOf(QWord)); ReadQWord:= q; end; procedure TBufferedFS.WriteQWord(q: QWord); begin WriteBuffer(q, SizeOf(QWord)); end; {$ENDIF} function TBufferedFS.Read(var Buffer; Count: Longint): Longint; var p:PByteArray; bytestoread:integer; b:PtrInt; begin if Mode=BFMWrite then flush; mode:=BFMRead; result:=0; if count<=bytesinbuffer then begin //all data already in buffer move(membuffer[bufferpos],buffer,count); bytesinbuffer:=bytesinbuffer-count; bufferpos:=bufferpos+count; result:=count; end else begin bytestoread:=count; if (bytestoread<>0)and(bytesinbuffer<>0) then begin //read data remaining in buffer and increment data pointer b:=Read(buffer,bytesinbuffer); p:=PByteArray(@(TByteArray(buffer)[b])); bytestoread:=bytestoread-b; result:=b; end else p:=@buffer; if bytestoread>=BufferSize then begin //data to read is larger than the buffer, read it directly result:=result+inherited Read(p^,bytestoread); end else begin //refill buffer ReadBuffer; //recurse result:=result+Read(p^,math.Min(bytestoread,bytesinbuffer)); end; end; end; function TBufferedFS.Write(const Buffer; Count: Longint): Longint; var p:pointer; bytestowrite:integer; b:PtrInt; begin if mode=BFMRead then begin seek(-BufferSize+bufferpos,soFromCurrent); bytesinbuffer:=0; bufferpos:=0; end; mode:=BFMWrite; result:=0; if count<=BufferSize-bytesinbuffer then begin //all data fits in buffer bufferdirty:=true; move(buffer,membuffer[bufferpos],count); bytesinbuffer:=bytesinbuffer+count; bufferpos:=bufferpos+count; result:=count; end else begin bytestowrite:=count; if (bytestowrite<>0)and(bytesinbuffer<>BufferSize)and(bytesinbuffer<>0) then begin //write data to remaining space in buffer and increment data pointer b:=Write(buffer,BufferSize-bytesinbuffer); p:=MovePointer(@buffer,b); bytestowrite:=bytestowrite-b; result:=b; end else p:=@buffer; if bytestowrite>=BufferSize then begin //empty buffer Flush; //data to write is larger than the buffer, write it directly result:=result+inherited Write(p^,bytestowrite); end else begin //empty buffer Flush; //recurse result:=result+Write(p^,bytestowrite); end; end; end; function TBufferedFS.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; begin if (Origin=soCurrent)and(Offset=0) then result:=inherited seek(Offset,origin)+bufferpos else begin flush; result:=inherited Seek(offset,origin); end; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/LZMAAlone.cfg0000644000175000001440000000066211222206571020751 0ustar alexxusers-$A8 -$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 -AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -H+ -W+ -M -$M16384,1048576 -K$00400000 -LE"c:\program files\borland\delphi7\Projects\Bpl" -LN"c:\program files\borland\delphi7\Projects\Bpl" -w-UNSAFE_TYPE -w-UNSAFE_CODE -w-UNSAFE_CAST doublecmd-0.7.1/plugins/wcx/zip/lzma/Methods.txt0000644000175000001440000000516212014201074020703 0ustar alexxusersCompression method IDs (4.38) ----------------------------- Each compression method in 7z has unique binary value (ID). The length of ID in bytes is arbitrary but it can not exceed 15 bytes. If you want to add some new ID, you have two ways: 1) Write request for allocating IDs to 7-zip developers. 2) Use such random ID: 03 E0 ZZ ... ZZ MM ... MM VV ... VV ZZ != 0, MM != 0, VV != 0 03 E0 - Prefix for random IDs ZZ ... ZZ - Developer ID. (length >= 4). Use real random bytes. You can notify 7-Zip developers about your Developer ID. MM ... MM - Method ID (length >= 1) VV ... VV - Version (length >= 1) Note: Use new ID (MM ... MM VV .. VV) only if old codec can not decode data encoded with new version. List of defined IDs ------------------- 00 - Copy 01 - Reserved 02 - Common 03 Swap - 2 Swap2 - 4 Swap4 04 Delta (subject to change) 03 - 7z 01 - LZMA 01 - Version 03 - Branch 01 - x86 03 - BCJ 1B - BCJ2 02 - PPC 05 - BC_PPC_B (Big Endian) 03 - Alpha 01 - BC_Alpha 04 - IA64 01 - BC_IA64 05 - ARM 01 - BC_ARM 06 - M68 05 - BC_M68_B (Big Endian) 07 - ARM Thumb 01 - BC_ARMThumb 08 - SPARC 05 - BC_SPARC 04 - PPMD 01 - Version 80 - reserved for independent developers E0 - Random IDs 04 - Misc 00 - Reserved 01 - Zip 00 - Copy (not used). Use {00} instead 01 - Shrink 06 - Implode 08 - Deflate 09 - Deflate64 12 - BZip2 (not used). Use {04 02 02} instead 02 - BZip 02 - BZip2 03 - Rar 01 - Rar15 02 - Rar20 03 - Rar29 04 - Arj 01 - Arj (1,2,3) 02 - Arj 4 05 - Z 06 - Lzh 07 - Reserved for 7z 08 - Cab 09 - NSIS 01 - DeflateNSIS 02 - BZip2NSIS 06 - Crypto 00 - 01 - AES 0x - AES-128 4x - AES-192 8x - AES-256 x0 - ECB x1 - CBC x2 - CFB x3 - OFB 07 - Reserved 0F - Reserved F0 - Misc Ciphers (Real Ciphers without hashing algo) F1 - Misc Ciphers (Combine) 01 - Zip 01 - Main Zip crypto algo 03 - RAR 02 - 03 - Rar29 AES-128 + (modified SHA-1) 07 - 7z 01 - AES-256 + SHA-256 07 - Hash (subject to change) 00 - 01 - CRC 02 - SHA-1 03 - SHA-256 04 - SHA-384 05 - SHA-512 F0 - Misc Hash F1 - Misc 03 - RAR 03 - Rar29 Password Hashing (modified SHA1) 07 - 7z 01 - SHA-256 Password Hashing --- End of document doublecmd-0.7.1/plugins/wcx/zip/lzma/LZMAAlone.dof0000644000175000001440000001501511222206571020760 0ustar alexxusers[FileVersion] Version=7.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=0 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=0 V=1 W=0 X=1 Y=1 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; NamespacePrefix= SymbolDeprecated=1 SymbolLibrary=1 SymbolPlatform=1 UnitLibrary=1 UnitPlatform=1 UnitDeprecated=1 HResultCompat=1 HidingMember=1 HiddenVirtual=1 Garbage=1 BoundsError=1 ZeroNilCompat=1 StringConstTruncated=1 ForLoopVarVarPar=1 TypedConstVarPar=1 AsgToTypedConst=1 CaseLabelRange=1 ForVariable=1 ConstructingAbstract=1 ComparisonFalse=1 ComparisonTrue=1 ComparingSignedUnsigned=1 CombiningSignedUnsigned=1 UnsupportedConstruct=1 FileOpen=1 FileOpenUnitSrc=1 BadGlobalSymbol=1 DuplicateConstructorDestructor=1 InvalidDirective=1 PackageNoLink=1 PackageThreadVar=1 ImplicitImport=1 HPPEMITIgnored=1 NoRetVal=1 UseBeforeDef=1 ForLoopVarUndef=1 UnitNameMismatch=1 NoCFGFileFound=1 MessageDirective=1 ImplicitVariants=1 UnicodeToLocale=1 LocaleToUnicode=1 ImagebaseMultiple=1 SuspiciousTypecast=1 PrivatePropAccessor=1 UnsafeType=0 UnsafeCode=0 UnsafeCast=0 [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir= UnitOutputDir= PackageDLLOutputDir= PackageDCPOutputDir= SearchPath= Packages=PFMod;PDirDialog;pamixer;PMedia;DJcl;JvStdCtrlsD7R;JvAppFrmD7R;JvCoreD7R;JvBandsD7R;JvBDED7R;JvDBD7R;JvDlgsD7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;qrpt;JvGlobusD7R;JvHMID7R;JvInspectorD7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvSystemD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;ppsvApplicationHook Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams=e "c:\desktop\badlzma\dgaport.inf" "c:\desktop\test.lz" HostApplication=C:\Program Files\Borland\Delphi7\Projects\lzmabench\Project1.exe Launcher= UseLauncher=0 DebugCWD= [Version Info] IncludeVerInfo=0 AutoIncBuild=0 MajorVer=1 MinorVer=0 Release=0 Build=0 Debug=0 PreRelease=0 Special=0 Private=0 DLL=0 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName= FileDescription= FileVersion=1.0.0.0 InternalName= LegalCopyright= LegalTrademarks= OriginalFilename= ProductName= ProductVersion=1.0.0.0 Comments= [Excluded Packages] C:\Program Files\Borland\Delphi7\Bin\dbx70.bpl=Borland SQL Explorer UI Package c:\program files\borland\delphi7\Bin\dclshlctrls70.bpl=Shell Control Property and Component Editors c:\program files\borland\delphi7\bin\dclRave70.bpl=Rave Reports BE 5.0 Package c:\program files\borland\delphi7\Projects\Bpl\L207vd70.bpl=TurboPower LockBox 2.07 Design-time package - VCL60 C:\Program Files\Borland\Delphi7\Bin\dclstd70.bpl=Borland Standard Components c:\program files\borland\delphi7\Bin\dclie70.bpl=Internet Explorer Components c:\program files\borland\delphi7\Bin\dcl31w70.bpl=Delphi 1.0 Compatibility Components c:\program files\borland\delphi7\Bin\dclIntraweb_50_70.bpl=Intraweb 5.0 Design Package for Delphi 7 c:\program files\borland\delphi7\Bin\dclofficexp70.bpl=Microsoft Office XP Sample Automation Server Wrapper Components c:\program files\borland\delphi7\Projects\Bpl\CrossKylix.bpl=CrossKylix IDE Plugin c:\program files\borland\delphi7\Projects\Bpl\VirtualTreesD7D.bpl=Virtual Treeview design time package c:\program files\borland\delphi7\Projects\Bpl\dclIndyCore70.bpl=Indy 10 Core Design Time c:\program files\borland\delphi7\Projects\Bpl\dclIndyProtocols70.bpl=Indy 10 Protocols Design Time c:\program files\borland\delphi7\Projects\Bpl\Png Delphi for Delphi 7.bpl=PNG Delphi (http://pngdelphi.sourceforge.net) c:\program files\borland\delphi7\Projects\Bpl\PDAB.bpl=(untitled) C:\Program Files\Borland\Delphi7\Projects\Bpl\Plinklists.bpl=(untitled) C:\Program Files\Borland\Delphi7\Projects\Bpl\PGIF.bpl=(untitled) c:\program files\borland\delphi7\Bin\idl2paswizardpkg.bpl=Borland IDL2PAS wizard package c:\program files\borland\delphi7\Bin\dclite70.bpl=Borland Integrated Translation Environment c:\program files\borland\delphi7\Bin\dclnet70.bpl=Borland Internet Components c:\program files\borland\delphi7\Bin\dclmcn70.bpl=Borland DataSnap Connection Components C:\Program Files\Borland\Delphi7\Bin\dclmid70.bpl=Borland MyBase DataAccess Components C:\Program Files\Borland\Delphi7\Bin\dcldb70.bpl=Borland Database Components c:\program files\borland\delphi7\Bin\dclsoap70.bpl=Borland SOAP Components c:\program files\borland\delphi7\Bin\dclocx70.bpl=Borland Sample Imported ActiveX Controls c:\program files\borland\delphi7\Bin\dclsmp70.bpl=Borland Sample Components c:\program files\borland\delphi7\Bin\dcldbx70.bpl=Borland dbExpress Components c:\program files\borland\delphi7\Bin\dcldbxcds70.bpl=Borland SimpleDataset Component (DBX) c:\program files\borland\delphi7\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package C:\Program Files\Borland\Delphi7\Bin\dclbde70.bpl=Borland BDE DB Components c:\program files\borland\delphi7\Bin\dclwbm70.bpl=Borland InternetExpress Components c:\program files\borland\delphi7\Bin\dclwebsnap70.bpl=Borland WebSnap Components c:\program files\borland\delphi7\Bin\dclado70.bpl=Borland ADO DB Components c:\program files\borland\delphi7\Bin\DCLIB70.bpl=InterBase Data Access Components c:\program files\borland\delphi7\Bin\dcltee70.bpl=TeeChart Components c:\program files\borland\delphi7\Bin\dcldss70.bpl=Borland Decision Cube Components c:\program files\borland\delphi7\Bin\dclclxdb70.bpl=Borland CLX Database Components C:\Program Files\Borland\Delphi7\Bin\dclclxstd70.bpl=Borland CLX Standard Components c:\program files\borland\delphi7\Bin\dclsmpedit70.bpl=Borland Editor Script Enhancements c:\program files\borland\delphi7\Bin\applet70.bpl=Borland Control Panel Applet Package c:\program files\borland\delphi7\Bin\dclemacsedit70.bpl=Borland Editor Emacs Enhancements c:\program files\borland\delphi7\Bin\dclact70.bpl=Borland ActionBar Components c:\program files\borland\delphi7\Bin\dclmlwiz70.bpl=Borland Markup Language Wizards D:\WINDOWS\system32\ibevnt70.bpl=Borland Interbase Event Alerter Component c:\program files\borland\delphi7\Bin\dclindy70.bpl=Internet Direct (Indy) for D7 Property and Component Editors [HistoryLists\hlUnitAliases] Count=1 Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [HistoryLists\hlSearchPath] Count=1 Item0=C:\Program Files\Promixis\Girder\includes doublecmd-0.7.1/plugins/wcx/zip/lzma/LZMAAlone.lpi0000644000175000001440000001454111222206571020777 0ustar alexxusers doublecmd-0.7.1/plugins/wcx/zip/lzma/ULZMABench.pas0000644000175000001440000003332212014201074021073 0ustar alexxusersunit ULZMABench; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,UCRC,ULZMACommon,windows,ULZMAEncoder,ULZMADecoder; type TLZMABench=class public function GetLogSize(const size:integer):integer; function MyMultDiv64(const value, elapsedTime:int64):int64; function GetCompressRating(const dictionarySize:integer;const elapsedTime,size:int64):int64; function GetDecompressRating(const elapsedTime:int64;const outSize,inSize:int64):int64; function GetTotalRating(const dictionarySize:int64;const elapsedTimeEn, sizeEn, elapsedTimeDe, inSizeDe, outSizeDe:int64):int64; procedure PrintValue(const v:int64); procedure PrintRating(const rating:int64); procedure PrintResults(const dictionarySize:integer;const elapsedTime, size:int64;const decompressMode:boolean;const secondSize:int64); function LzmaBenchmark(const numIterations, dictionarySize:integer):integer; end; TLZMARandomGenerator=class public A1:integer; A2:integer; constructor Create; procedure Init; function GetRnd:integer; end; TLZMABenchBitRandomGenerator=class public RG:TLZMARandomGenerator; Value:integer; NumBits:integer; constructor Create; destructor Destroy;override; procedure Init; function GetRnd(numBits:integer):integer; end; TLZMABenchRandomGenerator=class public RG:TLZMABenchBitRandomGenerator; Pos:integer; Rep0:integer; Buffer:array of byte; BufferSize:integer; constructor Create; destructor Destroy;override; procedure _Set(const bufferSize:integer); function GetRndBit:integer; function GetLogRandBits(const numBits:integer):integer; function GetOffset:integer; function GetLen1:integer; function GetLen2:integer; procedure Generate; end; TCRCStream=class(TStream) public CRC:TCRC; constructor Create; destructor Destroy;override; procedure Init; function GetDigest:integer; function Write(const Buffer; Count: Longint): Longint;override; end; TByteArray=array of byte; PByteArray=^TByteArray; TMyOutputStream=class(TStream) public _buffer:PByteArray; _size:integer; _pos:integer; constructor Create(const buffer:PByteArray); procedure Reset; function Write(const Buffer; Count: Longint): Longint;override; function Size:integer; end; TMyInputStream=class(TStream) public _buffer:PByteArray; _size:integer; _pos:integer; constructor Create(const buffer:PByteArray;const size:integer); procedure Reset; function Read(var Buffer; Count: Longint): Longint;override; end; TLZMAProgressInfo=class public ApprovedStart:int64; InSize:int64; Time:cardinal; procedure Init; procedure OnProgress(const Action:TLZMAProgressAction;const Value:int64); end; implementation uses SysUtils; const kAdditionalSize = (1 shl 21); kCompressedAdditionalSize = (1 shl 10); kSubBits = 8; constructor TLZMARandomGenerator.Create; begin Init; end; procedure TLZMARandomGenerator.Init; begin A1 := 362436069; A2 := 521288629; end; function TLZMARandomGenerator.GetRnd:integer; begin A1 := 36969 * (A1 and $ffff) + (A1 shr 16); A2 := 18000 * (A2 and $ffff) + (A2 shr 16); result:=(A1 shl 16) xor (A2); end; constructor TLZMABenchBitRandomGenerator.Create; begin RG:=TLZMARandomGenerator.Create; end; destructor TLZMABenchBitRandomGenerator.Destroy; begin RG.Free; end; procedure TLZMABenchBitRandomGenerator.Init; begin Value := 0; NumBits := 0; end; function TLZMABenchBitRandomGenerator.GetRnd(numBits:integer):integer; begin if self.NumBits > numBits then begin result := Value and ((1 shl numBits) - 1); Value := Value shr numBits; self.NumBits := self.NumBits - numBits; exit; end; numBits := numBits - self.NumBits; result := (Value shl numBits); Value := RG.GetRnd; result := result or (Value and ((1 shl numBits) - 1)); Value := value shr numBits; self.NumBits := 32 - numBits; end; constructor TLZMABenchRandomGenerator.Create; begin RG:=TLZMABenchBitRandomGenerator.Create; end; destructor TLZMABenchRandomGenerator.Destroy; begin RG.free; end; procedure TLZMABenchRandomGenerator._Set(const bufferSize:integer); begin setlength(Buffer,bufferSize); Pos := 0; self.BufferSize := bufferSize; end; function TLZMABenchRandomGenerator.GetLogRandBits(const numBits:integer):integer; var len:integer; begin len := RG.GetRnd(numBits); result:=RG.GetRnd(len); end; function TLZMABenchRandomGenerator.GetRndBit:integer; begin result:=RG.GetRnd(1); end; function TLZMABenchRandomGenerator.GetOffset:integer; begin if GetRndBit = 0 then result:=GetLogRandBits(4) else result:=(GetLogRandBits(4) shl 10) or RG.GetRnd(10); end; function TLZMABenchRandomGenerator.GetLen1:integer; begin result:=RG.GetRnd(1 + RG.GetRnd(2)); end; function TLZMABenchRandomGenerator.GetLen2:integer; begin result:=RG.GetRnd(2 + RG.GetRnd(2)); end; procedure TLZMABenchRandomGenerator.Generate; var len,i:integer; begin RG.Init; Rep0 := 1; while Pos < BufferSize do begin if (GetRndBit = 0) or (Pos < 1) then begin Buffer[Pos] := RG.GetRnd(8); inc(pos); end else begin if RG.GetRnd(3) = 0 then len := 1 + GetLen1 else begin repeat Rep0 := GetOffset; until not (Rep0 >= Pos); inc(Rep0); len := 2 + GetLen2; end; i:=0; while (i < len) and (Pos < BufferSize) do begin Buffer[Pos] := Buffer[Pos - Rep0]; inc(i); inc(pos); end; end; end; end; constructor TCRCStream.Create; begin CRC:=TCRC.Create; end; destructor TCRCStream.Destroy; begin CRC.Free; end; procedure TCRCStream.Init; begin CRC.Init; end; function TCRCStream.GetDigest:integer; begin result:=CRC.GetDigest; end; function TCRCStream.Write(const Buffer; Count: Longint): Longint; var p:^byte; i:integer; begin p:=@buffer; for i:=0 to count -1 do begin CRC.UpdateByte(p^); inc(p); end; result:=count; end; constructor TMyOutputStream.Create(const buffer:PByteArray); begin _buffer:=buffer; _size:=length(buffer^); end; procedure TMyOutputStream.Reset; begin _pos:=0; end; function TMyOutputStream.Write(const Buffer; Count: Longint): Longint; begin if _pos+count>=_size then raise Exception.Create('Error'); move(buffer,_buffer^[_pos],count); _pos:=_pos+count; result:=count; end; function TMyOutputStream.Size:integer; begin result:=_pos; end; constructor TMyInputStream.Create(const buffer:PByteArray;const size:integer); begin _buffer:=buffer; _size:=size; end; procedure TMyInputStream.Reset; begin _pos:=0; end; function TMyInputStream.Read(var Buffer; Count: Longint): Longint; var b:int64; begin try b:=_size-_pos; if b>count then b:=count; result:=b; move(_buffer^[_pos],buffer,b); _pos:=_pos+b; except writeln('inread error'); end; end; procedure TLZMAProgressInfo.Init; begin InSize:=0; end; procedure TLZMAProgressInfo.OnProgress(const Action:TLZMAProgressAction;const Value:int64); begin if Action=LPAMax then exit; if (value >= ApprovedStart) and (InSize = 0) then begin Time := GetTickCount; InSize := value; end; end; function TLZMABench.GetLogSize(const size:integer):integer; var i,j:integer; begin for i := kSubBits to 31 do for j := 0 to 1 shl kSubBits -1 do if (size <= (1 shl i) + (j shl (i - kSubBits))) then begin result:=(i shl kSubBits) + j; exit; end; result:=32 shl kSubBits; end; function TLZMABench.MyMultDiv64(const value, elapsedTime:int64):int64; var freq,elTime:int64; begin freq := 1000; // ms elTime := elapsedTime; while freq > 1000000 do begin freq := freq shr 1; elTime :=elTime shr 1; end; if elTime = 0 then elTime := 1; result:=value * freq div elTime; end; function TLZMABench.GetCompressRating(const dictionarySize:integer;const elapsedTime,size:int64):int64; var t,numCommandsForOne,numCommands:int64; begin t := GetLogSize(dictionarySize) - (18 shl kSubBits); numCommandsForOne := 1060 + ((t * t * 10) shr (2 * kSubBits)); numCommands := size * numCommandsForOne; result:=MyMultDiv64(numCommands, elapsedTime); end; function TLZMABench.GetDecompressRating(const elapsedTime:int64;const outSize,inSize:int64):int64; var numCommands:int64; begin numCommands := inSize * 220 + outSize * 20; result:=MyMultDiv64(numCommands, elapsedTime); end; function TLZMABench.GetTotalRating(const dictionarySize:int64;const elapsedTimeEn, sizeEn, elapsedTimeDe, inSizeDe, outSizeDe:int64):int64; begin result:=(GetCompressRating(dictionarySize, elapsedTimeEn, sizeEn) + GetDecompressRating(elapsedTimeDe, inSizeDe, outSizeDe)) div 2; end; procedure TLZMABench.PrintValue(const v:int64); var s:string; i:integer; begin s:=inttostr(v); i:=0; while i+length(s)<6 do begin write(' '); inc(i); end; write(s); end; procedure TLZMABench.PrintRating(const rating:int64); begin PrintValue(rating div 1000000); write(' MIPS'); end; procedure TLZMABench.PrintResults(const dictionarySize:integer;const elapsedTime, size:int64;const decompressMode:boolean;const secondSize:int64); var speed:int64; rating:int64; begin speed := MyMultDiv64(size, elapsedTime); PrintValue(speed div 1024); write(' KB/s '); if decompressMode then rating := GetDecompressRating(elapsedTime, size, secondSize) else rating := GetCompressRating(dictionarySize, elapsedTime, size); PrintRating(rating); end; function TLZMABench.LzmaBenchmark(const numIterations, dictionarySize:integer):integer; var encoder:TLZMAEncoder; decoder:TLZMADecoder; kBufferSize,kCompressedBufferSize:integer; propStream:TMemoryStream; proparray:array of byte; rg:TLZMABenchRandomGenerator; crc:TCRC; progressInfo:TLZMAProgressInfo; totalBenchSize,totalEncodeTime,totalDecodeTime,totalCompressedSize:int64; inStream:TMyInputStream; compressedBuffer:array of byte; compressedStream:TMyOutputStream; CrcOutStream:TCRCStream; inputCompressedStream:TMyInputStream; compressedSize,i,j:integer; encodeTime,decodeTime:cardinal; outSize,startTime,benchSize:int64; begin if numIterations <= 0 then begin result:=0; exit; end; if dictionarySize < (1 shl 18) then begin writeln(#10'Error: dictionary size for benchmark must be >= 18 (256 KB)'); result:=1; exit; end; write(#10' Compressing Decompressing'#10#10); encoder := TLZMAEncoder.Create; decoder := TLZMADecoder.Create; if not encoder.SetDictionarySize(dictionarySize) then raise Exception.Create('Incorrect dictionary size'); kBufferSize := dictionarySize + kAdditionalSize; kCompressedBufferSize := (kBufferSize div 2) + kCompressedAdditionalSize; propstream:=TMemoryStream.Create; encoder.WriteCoderProperties(propStream); setlength(proparray,propstream.size); propstream.Position:=0; propstream.Read(propArray[0],propstream.Size); decoder.SetDecoderProperties(propArray); rg := TLZMABenchRandomGenerator.Create; rg._Set(kBufferSize); rg.Generate; crc := TCRC.Create; crc.Init; crc.Update(rg.Buffer[0], 0, rg.BufferSize); progressInfo := TLZMAProgressInfo.Create; progressInfo.ApprovedStart := dictionarySize; totalBenchSize := 0; totalEncodeTime := 0; totalDecodeTime := 0; totalCompressedSize := 0; inStream := TMyInputStream.Create(@(rg.Buffer), rg.BufferSize); setlength(compressedBuffer,kCompressedBufferSize); compressedStream := TMyOutputStream.Create(@compressedBuffer); crcOutStream :=TCRCStream.Create; inputCompressedStream := nil; compressedSize := 0; for i := 0 to numIterations -1 do begin progressInfo.Init; inStream.reset; compressedStream.reset; encoder.OnProgress:=progressInfo.OnProgress; encoder.Code(inStream, compressedStream, rg.BufferSize, -1); encodeTime := GetTickCount - progressInfo.Time; if i = 0 then begin compressedSize := compressedStream.size; inputCompressedStream := TMyInputStream.Create(@compressedBuffer, compressedSize); end else if compressedSize <> compressedStream.size then raise Exception.Create('Encoding error'); if progressInfo.InSize = 0 then raise Exception.Create('Internal ERROR 1282'); decodeTime := 0; for j := 0 to 1 do begin inputCompressedStream.reset; crcOutStream.Init; outSize := kBufferSize; startTime := GetTickCount; if not decoder.Code(inputCompressedStream, crcOutStream, outSize) then raise Exception.Create('Decoding Error'); decodeTime := GetTickCount - startTime; if crcOutStream.GetDigest <> crc.GetDigest then raise Exception.Create('CRC Error'); end; benchSize := kBufferSize - progressInfo.InSize; PrintResults(dictionarySize, encodeTime, benchSize, false, 0); write(' '); PrintResults(dictionarySize, decodeTime, kBufferSize, true, compressedSize); writeln(''); totalBenchSize := totalBenchSize + benchSize; totalEncodeTime := totalEncodeTime + encodeTime; totalDecodeTime := totalDecodeTime + decodeTime; totalCompressedSize := totalCompressedSize + compressedSize; end; writeln('---------------------------------------------------'); PrintResults(dictionarySize, totalEncodeTime, totalBenchSize, false, 0); write(' '); PrintResults(dictionarySize, totalDecodeTime, kBufferSize * numIterations, true, totalCompressedSize); writeln(' Average'); result:=0; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/ULZMAAlone.pas0000644000175000001440000002221312014201074021107 0ustar alexxusersunit ULZMAAlone; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses ULZMABench,ULZMAEncoder,ULZMADecoder,UBufferedFS,ULZMACommon,Classes; const kEncode=0; kDecode=1; kBenchmark=2; type TCommandLine=class public command:integer; NumBenchMarkPasses:integer; DictionarySize:integer; DictionarySizeIsDefined:boolean; Lc:integer; Lp:integer; Pb:integer; Fb:integer; FbIsDefined:boolean; Eos:boolean; Algorithm:integer; MatchFinder:integer; InFile:string; OutFile:string; constructor Create; function ParseSwitch(const s:string):boolean; function Parse:boolean; end; TLZMAAlone=class public procedure PrintHelp; procedure Main; end; implementation uses SysUtils; constructor TCommandLine.Create; begin Command:=-1; NumBenchMarkPasses:=10; DictionarySize:=1 shl 23; DictionarySizeIsDefined:= false; Lc:= 3; Lp:= 0; Pb:= 2; Fb:= 128; FbIsDefined:= false; Eos:= false; Algorithm:= 2; MatchFinder:= 1; end; function GetStr(const str:string;const offset:integer):string; var i:integer; begin result:=''; for i:=offset to length(str) do result:=result+str[i]; end; function GetInt(const str:string;const offset:integer):integer; var s:string; begin s:=GetStr(s,offset); result:=strtoint(s); end; function TCommandLine.ParseSwitch(const s:string):boolean; var l:integer; mfs:string; begin result:=false; l:=length(s); if l=0 then exit; case s[1] of 'd': begin DictionarySize := 1 shl GetInt(s,2); DictionarySizeIsDefined := true; result:=true; end; 'f': begin if (l>=2)and(s[2]='b') then begin fb:=GetInt(s,3); FbIsDefined := true; result:=true; end; end; 'a': begin Algorithm := GetInt(s,2); result:=true; end; 'l': begin if (l>=2) then begin if s[2]='c' then begin Lc:=GetInt(s,3); result:=true; end; if s[2]='p' then begin Lp:=GetInt(s,3); result:=true; end; end; end; 'p': begin if (l>=2)and(s[2]='b') then begin Pb:=GetInt(s,3); result:=true; end; end; 'e': begin if (l>=3)and(s[2]='o')and(s[3]='s') then begin eos:=true; result:=true; end; end; 'm': begin if (l>=2)and(s[2]='f') then begin mfs:=GetStr(s,3); if mfs='bt2' then MatchFinder:=0 else if mfs='bt4' then MatchFinder:=1 else if mfs='bt4b' then MatchFinder:=2 else begin result:=false; exit; end; end; end; else result:=false; end; end; function TCommandLine.Parse:boolean; var pos:integer; switchMode:boolean; i,l:integer; s,sw:string; begin pos := 1; switchMode := true; l:=ParamCount; for i := 1 to l do begin s := ParamStr(i); if length(s) = 0 then begin result:=false; exit; end; if switchMode then begin if comparestr(s,'--')= 0 then begin switchMode := false; continue; end; if s[1]='-' then begin sw := AnsiLowerCase(GetStr(s,2)); if length(sw) = 0 then begin result:=false; exit; end; try if not ParseSwitch(sw) then begin result:=false; exit; end; except on e:EConvertError do begin result:=false; exit; end; end; continue; end; end; if pos = 1 then begin if comparetext(s,'e')=0 then Command := kEncode else if comparetext(s,'d')=0 then Command := kDecode else if comparetext(s,'b')=0 then Command := kBenchmark else begin result:=false; exit; end; end else if pos = 2 then begin if Command = kBenchmark then begin try NumBenchmarkPasses := strtoint(s); if NumBenchmarkPasses < 1 then begin result:=false; exit; end; except on e:EConvertError do begin result:=false; exit; end; end; end else InFile := s; end else if pos = 3 then OutFile := s else begin result:=false; exit; end; inc(pos); continue; end; result:=true; exit; end; procedure TLZMAAlone.PrintHelp; begin writeln( #10'Usage: LZMA [...] inputFile outputFile'#10 + ' e: encode file'#10 + ' d: decode file'#10 + ' b: Benchmark'#10 + ''#10 + // ' -a{N}: set compression mode - [0, 1], default: 1 (max)\n' + ' -d{N}: set dictionary - [0,28], default: 23 (8MB)'#10 + ' -fb{N}: set number of fast bytes - [5, 273], default: 128'#10 + ' -lc{N}: set number of literal context bits - [0, 8], default: 3'#10 + ' -lp{N}: set number of literal pos bits - [0, 4], default: 0'#10 + ' -pb{N}: set number of pos bits - [0, 4], default: 2'#10 + ' -mf{MF_ID}: set Match Finder: [bt2, bt4], default: bt4'#10 + ' -eos: write End Of Stream marker'#10 ); end; procedure TLZMAAlone.Main; var params:TCommandLine; dictionary:integer; lzmaBench:tlzmabench; inStream:TBufferedFS; outStream:TBufferedFS; eos:boolean; encoder:TLZMAEncoder; filesize:int64; i:integer; properties:array[0..4] of byte; decoder:TLZMADecoder; outSize:int64; v:byte; const propertiessize=5; begin writeln(#10'LZMA (Pascal) 4.42 Copyright (c) 1999-2006 Igor Pavlov 2006-05-15'#10); if paramcount<1 then begin PrintHelp; exit; end; params:=TCommandLine.Create; if not params.Parse then begin writeln(#10'Incorrect command'); exit; end; if params.command=kBenchmark then begin dictionary:=1 shl 21; if params.DictionarySizeIsDefined then dictionary:=params.DictionarySize; if params.MatchFinder>1 then raise Exception.Create('Unsupported match finder'); lzmaBench:=TLZMABench.Create; lzmaBench.LzmaBenchmark(params.NumBenchMarkPasses,dictionary); lzmaBench.Free; end else if (params.command=kEncode)or(params.command=kDecode) then begin inStream:=TBufferedFS.Create(params.InFile,fmOpenRead or fmsharedenynone); outStream:=TBufferedFS.Create(params.OutFile,fmcreate); eos := false; if params.Eos then eos := true; if params.Command = kEncode then begin encoder:=TLZMAEncoder.Create; if not encoder.SetAlgorithm(params.Algorithm) then raise Exception.Create('Incorrect compression mode'); if not encoder.SetDictionarySize(params.DictionarySize) then raise Exception.Create('Incorrect dictionary size'); if not encoder.SeNumFastBytes(params.Fb) then raise Exception.Create('Incorrect -fb value'); if not encoder.SetMatchFinder(params.MatchFinder) then raise Exception.Create('Incorrect -mf value'); if not encoder.SetLcLpPb(params.Lc, params.Lp, params.Pb) then raise Exception.Create('Incorrect -lc or -lp or -pb value'); encoder.SetEndMarkerMode(eos); encoder.WriteCoderProperties(outStream); if eos then fileSize := -1 else fileSize := inStream.Size; for i := 0 to 7 do WriteByte(outStream,(fileSize shr (8 * i)) and $FF); encoder.Code(inStream, outStream, -1, -1); encoder.free; end else begin if inStream.read(properties, propertiesSize) <> propertiesSize then raise Exception.Create('input .lzma file is too short'); decoder := TLZMADecoder.Create; if not decoder.SetDecoderProperties(properties) then raise Exception.Create('Incorrect stream properties'); outSize := 0; for i := 0 to 7 do begin v := {shortint}(ReadByte(inStream)); if v < 0 then raise Exception.Create('Can''t read stream size'); outSize := outSize or v shl (8 * i); end; if not decoder.Code(inStream, outStream, outSize) then raise Exception.Create('Error in data stream'); decoder.Free; end; outStream.Free; inStream.Free; end else raise Exception.Create('Incorrect command'); params.Free; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/0000755000175000001440000000000012675717732021126 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/zip/lzma/compression/RangeCoder/0000755000175000001440000000000012675717732023137 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/zip/lzma/compression/RangeCoder/URangeDecoder.pas0000644000175000001440000000474212014201074026270 0ustar alexxusersunit URangeDecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,ULZMACommon; type TRangeDecoder=class public Range,Code:integer; Stream:TStream; procedure SetStream(const Stream:TStream); procedure ReleaseStream; procedure Init; function DecodeDirectBits(const numTotalBits:integer):integer; function DecodeBit(var probs: array of smallint;const index:integer):integer; end; procedure InitBitModels(var probs: array of smallint); implementation const kTopMask = not ((1 shl 24) - 1); kNumBitModelTotalBits = 11; kBitModelTotal = (1 shl kNumBitModelTotalBits); kNumMoveBits = 5; procedure TRangeDecoder.SetStream(const Stream:TStream); begin self.Stream:=Stream; end; procedure TRangeDecoder.ReleaseStream; begin stream:=nil; end; procedure TRangeDecoder.Init; var i:integer; begin code:=0; Range:=-1; for i:=0 to 4 do begin code:=(code shl 8) or byte(ReadByte(stream)); end; end; function TRangeDecoder.DecodeDirectBits(const numTotalBits:integer):integer; var i,t:integer; begin result:=0; for i := numTotalBits downto 1 do begin range:=range shr 1; t := (cardinal(Code - Range) shr 31); Code := integer(Code - Range and (t - 1)); result := (result shl 1) or (1 - t); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; end; end; function TRangeDecoder.DecodeBit(var probs: array of smallint;const index:integer):integer; var prob,newbound:integer; begin prob:=probs[index]; newbound:= integer((Range shr kNumBitModelTotalBits) * prob); if (integer((integer(Code) xor integer($80000000))) < integer((integer(newBound) xor integer($80000000)))) then begin Range := newBound; probs[index] := (prob + ((kBitModelTotal - prob) shr kNumMoveBits)); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; result:=0; end else begin Range := integer(Range - newBound); Code := integer(Code - newBound); probs[index] := (prob - ((prob) shr kNumMoveBits)); if ((Range and kTopMask) = 0) then begin Code := (Code shl 8) or ReadByte(stream); Range := Range shl 8; end; result:=1; end; end; procedure InitBitModels(var probs: array of smallint); var i:integer; begin for i:=0 to length(probs)-1 do probs[i] := kBitModelTotal shr 1; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/RangeCoder/UBitTreeEncoder.pas0000644000175000001440000000612212014201074026576 0ustar alexxusersunit UBitTreeEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses URangeDecoder,URangeEncoder; type TBitTreeEncoder=class public Models: array of smallint; NumBitLevels:integer; constructor Create(const numBitLevels:integer); procedure Init; procedure Encode(const rangeEncoder:TRangeEncoder;const symbol:integer); procedure ReverseEncode(const rangeEncoder:TRangeEncoder;symbol:integer); function GetPrice(const symbol:integer):integer; function ReverseGetPrice(symbol:integer):integer;overload; end; procedure ReverseEncode(var Models:array of smallint;const startIndex:integer;const rangeEncoder:TRangeEncoder;const NumBitLevels:integer; symbol:integer); function ReverseGetPrice(var Models:array of smallint;const startIndex,NumBitLevels:integer; symbol:integer):integer; implementation constructor TBitTreeEncoder.Create(const numBitLevels:integer); begin self.NumBitLevels:=numBitLevels; setlength(Models,1 shl numBitLevels); end; procedure TBitTreeEncoder.Init; begin URangeDecoder.InitBitModels(Models); end; procedure TBitTreeEncoder.Encode(const rangeEncoder:TRangeEncoder;const symbol:integer); var m,bitindex,bit:integer; begin m := 1; for bitIndex := NumBitLevels -1 downto 0 do begin bit := (symbol shr bitIndex) and 1; rangeEncoder.Encode(Models, m, bit); m := (m shl 1) or bit; end; end; procedure TBitTreeEncoder.ReverseEncode(const rangeEncoder:TRangeEncoder;symbol:integer); var m,i,bit:integer; begin m:=1; for i:= 0 to NumBitLevels -1 do begin bit := symbol and 1; rangeEncoder.Encode(Models, m, bit); m := (m shl 1) or bit; symbol := symbol shr 1; end; end; function TBitTreeEncoder.GetPrice(const symbol:integer):integer; var price,m,bitindex,bit:integer; begin price := 0; m := 1; for bitIndex := NumBitLevels - 1 downto 0 do begin bit := (symbol shr bitIndex) and 1; price := price + RangeEncoder.GetPrice(Models[m], bit); m := (m shl 1) + bit; end; result:=price; end; function TBitTreeEncoder.ReverseGetPrice(symbol:integer):integer; var price,m,i,bit:integer; begin price := 0; m := 1; for i:= NumBitLevels downto 1 do begin bit := symbol and 1; symbol := symbol shr 1; price :=price + RangeEncoder.GetPrice(Models[m], bit); m := (m shl 1) or bit; end; result:=price; end; function ReverseGetPrice(var Models:array of smallint;const startIndex,NumBitLevels:integer;symbol:integer):integer; var price,m,i,bit:integer; begin price := 0; m := 1; for i := NumBitLevels downto 1 do begin bit := symbol and 1; symbol := symbol shr 1; price := price + RangeEncoder.GetPrice(Models[startIndex + m], bit); m := (m shl 1) or bit; end; result:=price; end; procedure ReverseEncode(var Models:array of smallint;const startIndex:integer;const rangeEncoder:TRangeEncoder;const NumBitLevels:integer;symbol:integer); var m,i,bit:integer; begin m:=1; for i := 0 to NumBitLevels -1 do begin bit := symbol and 1; rangeEncoder.Encode(Models, startIndex + m, bit); m := (m shl 1) or bit; symbol := symbol shr 1; end; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/RangeCoder/URangeEncoder.pas0000644000175000001440000001032312014201074026272 0ustar alexxusersunit URangeEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes,ULZMACommon; const kNumBitPriceShiftBits = 6; kTopMask = not ((1 shl 24) - 1); kNumBitModelTotalBits = 11; kBitModelTotal = (1 shl kNumBitModelTotalBits); kNumMoveBits = 5; kNumMoveReducingBits = 2; type TRangeEncoder=class private ProbPrices: array [0..kBitModelTotal shr kNumMoveReducingBits-1] of integer; public Stream:TStream; Low,Position:int64; Range,cacheSize,cache:integer; procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init; procedure FlushData; procedure FlushStream; procedure ShiftLow; procedure EncodeDirectBits(const v,numTotalBits:integer); function GetProcessedSizeAdd:int64; procedure Encode(var probs: array of smallint;const index,symbol:integer); constructor Create; function GetPrice(const Prob,symbol:integer):integer; function GetPrice0(const Prob:integer):integer; function GetPrice1(const Prob:integer):integer; end; var RangeEncoder:TRangeEncoder; procedure InitBitModels(var probs:array of smallint); implementation procedure TRangeEncoder.SetStream(const stream:TStream); begin self.Stream:=Stream; end; procedure TRangeEncoder.ReleaseStream; begin stream:=nil; end; procedure TRangeEncoder.Init; begin position := 0; Low := 0; Range := -1; cacheSize := 1; cache := 0; end; procedure TRangeEncoder.FlushData; var i:integer; begin for i:=0 to 4 do ShiftLow(); end; procedure TRangeEncoder.FlushStream; begin //stream.flush; end; procedure TRangeEncoder.ShiftLow; var LowHi:integer; temp:integer; begin LowHi := (Low shr 32); if (LowHi <> 0) or (Low < int64($FF000000)) then begin position := position + cacheSize; temp := cache; repeat WriteByte(stream,byte(temp + LowHi)); temp := $FF; dec(cacheSize); until(cacheSize = 0); cache := (Low shr 24); end; inc(cacheSize); Low := (Low and integer($FFFFFF)) shl 8; end; procedure TRangeEncoder.EncodeDirectBits(const v,numTotalBits:integer); var i:integer; begin for i := numTotalBits - 1 downto 0 do begin Range := Range shr 1; if (((v shr i) and 1) = 1) then Low := Low + Range; if ((Range and kTopMask) = 0) then begin Range := range shl 8; ShiftLow; end; end; end; function TRangeEncoder.GetProcessedSizeAdd:int64; begin result:=cacheSize + position + 4; end; procedure InitBitModels(var probs:array of smallint); var i:integer; begin for i := 0 to length(probs) -1 do probs[i] := kBitModelTotal shr 1; end; procedure TRangeEncoder.Encode(var probs: array of smallint;const index,symbol:integer); var prob,newbound:integer; begin prob := probs[index]; newBound := integer((Range shr kNumBitModelTotalBits) * prob); if (symbol = 0) then begin Range := newBound; probs[index] := (prob + ((kBitModelTotal - prob) shr kNumMoveBits)); end else begin Low := Low + (newBound and int64($FFFFFFFF)); Range := integer(Range - newBound); probs[index] := (prob - ((prob) shr kNumMoveBits)); end; if ((Range and kTopMask) = 0) then begin Range := Range shl 8; ShiftLow; end; end; constructor TRangeEncoder.Create; var kNumBits:integer; i,j,start,_end:integer; begin kNumBits := (kNumBitModelTotalBits - kNumMoveReducingBits); for i := kNumBits - 1 downto 0 do begin start := 1 shl (kNumBits - i - 1); _end := 1 shl (kNumBits - i); for j := start to _end -1 do ProbPrices[j] := (i shl kNumBitPriceShiftBits) + (((_end - j) shl kNumBitPriceShiftBits) shr (kNumBits - i - 1)); end; end; function TRangeEncoder.GetPrice(const Prob,symbol:integer):integer; begin result:=ProbPrices[(((Prob - symbol) xor ((-symbol))) and (kBitModelTotal - 1)) shr kNumMoveReducingBits]; end; function TRangeEncoder.GetPrice0(const Prob:integer):integer; begin result:= ProbPrices[Prob shr kNumMoveReducingBits]; end; function TRangeEncoder.GetPrice1(const Prob:integer):integer; begin result:= ProbPrices[(kBitModelTotal - Prob) shr kNumMoveReducingBits]; end; initialization RangeEncoder:=TRangeEncoder.Create; finalization RangeEncoder.Free; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/RangeCoder/UBitTreeDecoder.pas0000644000175000001440000000350712014201074026570 0ustar alexxusersunit UBitTreeDecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses URangeDecoder; type TBitTreeDecoder=class public Models: array of smallint; NumBitLevels:integer; constructor Create(const numBitLevels:integer); procedure Init; function Decode(const rangeDecoder:TRangeDecoder):integer; function ReverseDecode(const rangeDecoder:TRangeDecoder):integer;overload; end; function ReverseDecode(var Models: array of smallint; const startIndex:integer;const rangeDecoder:TRangeDecoder; const NumBitLevels:integer):integer;overload; implementation constructor TBitTreeDecoder.Create(const numBitLevels:integer); begin self.NumBitLevels := numBitLevels; setlength(Models,1 shl numBitLevels); end; procedure TBitTreeDecoder.Init; begin urangedecoder.InitBitModels(Models); end; function TBitTreeDecoder.Decode(const rangeDecoder:TRangeDecoder):integer; var m,bitIndex:integer; begin m:=1; for bitIndex := NumBitLevels downto 1 do begin m:=m shl 1 + rangeDecoder.DecodeBit(Models, m); end; result:=m - (1 shl NumBitLevels); end; function TBitTreeDecoder.ReverseDecode(const rangeDecoder:TRangeDecoder):integer; var m,symbol,bitindex,bit:integer; begin m:=1; symbol:=0; for bitindex:=0 to numbitlevels-1 do begin bit:=rangeDecoder.DecodeBit(Models, m); m:=(m shl 1) + bit; symbol:=symbol or (bit shl bitIndex); end; result:=symbol; end; function ReverseDecode(var Models: array of smallint;const startIndex:integer; const rangeDecoder:TRangeDecoder;const NumBitLevels:integer):integer; var m,symbol,bitindex,bit:integer; begin m:=1; symbol:=0; for bitindex:=0 to numbitlevels -1 do begin bit := rangeDecoder.DecodeBit(Models, startIndex + m); m := (m shl 1) + bit; symbol := symbol or bit shl bitindex; end; result:=symbol; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZMA/0000755000175000001440000000000012675717732021671 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZMA/ULZMACommon.pas0000644000175000001440000000115212014201074024404 0ustar alexxusersunit ULZMACommon; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZMAProgressAction=(LPAMax,LPAPos); TLZMAProgress=procedure (const Action:TLZMAProgressAction;const Value:int64) of object; function ReadByte(const stream:TStream):byte; procedure WriteByte(const stream:TStream;const b:byte); const CodeProgressInterval = 50;//approx. number of times an OnProgress event will be fired during coding implementation function ReadByte(const stream:TStream):byte; begin stream.Read(result,1); end; procedure WriteByte(const stream:TStream;const b:byte); begin stream.Write(b,1); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZMA/ULZMABase.pas0000644000175000001440000000470612014201074024036 0ustar alexxusersunit ULZMABase; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface function StateInit:integer; function StateUpdateChar(const index:integer):integer; function StateUpdateMatch(const index:integer):integer; function StateUpdateRep(const index:integer):integer; function StateUpdateShortRep(const index:integer):integer; function StateIsCharState(const index:integer):boolean; function GetLenToPosState(len:integer):integer; const kNumRepDistances = 4; kNumStates = 12; kNumPosSlotBits = 6; kDicLogSizeMin = 0; // kDicLogSizeMax = 28; // kDistTableSizeMax = kDicLogSizeMax * 2; kNumLenToPosStatesBits = 2; // it's for speed optimization kNumLenToPosStates = 1 shl kNumLenToPosStatesBits; kMatchMinLen = 2; kNumAlignBits = 4; kAlignTableSize = 1 shl kNumAlignBits; kAlignMask = (kAlignTableSize - 1); kStartPosModelIndex = 4; kEndPosModelIndex = 14; kNumPosModels = kEndPosModelIndex - kStartPosModelIndex; kNumFullDistances = 1 shl (kEndPosModelIndex div 2); kNumLitPosStatesBitsEncodingMax = 4; kNumLitContextBitsMax = 8; kNumPosStatesBitsMax = 4; kNumPosStatesMax = (1 shl kNumPosStatesBitsMax); kNumPosStatesBitsEncodingMax = 4; kNumPosStatesEncodingMax = (1 shl kNumPosStatesBitsEncodingMax); kNumLowLenBits = 3; kNumMidLenBits = 3; kNumHighLenBits = 8; kNumLowLenSymbols = 1 shl kNumLowLenBits; kNumMidLenSymbols = 1 shl kNumMidLenBits; kNumLenSymbols = kNumLowLenSymbols + kNumMidLenSymbols + (1 shl kNumHighLenBits); kMatchMaxLen = kMatchMinLen + kNumLenSymbols - 1; implementation function StateInit:integer; begin result:=0; end; function StateUpdateChar(const index:integer):integer; begin if (index < 4) then result:=0 else if (index < 10) then result:=index - 3 else result:=index - 6; end; function StateUpdateMatch(const index:integer):integer; begin if index<7 then result:=7 else result:=10; end; function StateUpdateRep(const index:integer):integer; begin if index<7 then result:=8 else result:=11; end; function StateUpdateShortRep(const index:integer):integer; begin if index<7 then result:=9 else result:=11; end; function StateIsCharState(const index:integer):boolean; begin result:=index<7; end; function GetLenToPosState(len:integer):integer; begin len := len - kMatchMinLen; if (len < kNumLenToPosStates) then result:=len else result:=(kNumLenToPosStates - 1); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZMA/ULZMAEncoder.pas0000644000175000001440000015275212014201074024550 0ustar alexxusersunit ULZMAEncoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses UBitTreeEncoder,ULZMABase,ULZBinTree,URangeEncoder,Classes,Math,ULZMACommon; const EMatchFinderTypeBT2 = 0; EMatchFinderTypeBT4 = 1; kIfinityPrice:integer = $FFFFFFF; kDefaultDictionaryLogSize = 22; kNumFastBytesDefault = $20; kNumLenSpecSymbols = ULZMABase.kNumLowLenSymbols + ULZMABase.kNumMidLenSymbols; kNumOpts = 1 shl 12; kPropSize = 5; type TLZMAEncoder2=class; TLZMALiteralEncoder=class; TLZMAOptimal=class; TLZMALenPriceTableEncoder=class; TLZMAEncoder=class private FOnProgress:TLZMAProgress; procedure DoProgress(const Action:TLZMAProgressAction;const Value:integer); public g_FastPos:array [0..1 shl 11-1] of byte; _state:integer; _previousByte:byte; _repDistances:array [0..ULZMABase.kNumRepDistances-1] of integer; _optimum: array [0..kNumOpts-1] of TLZMAOptimal; _matchFinder:TLZBinTree; _rangeEncoder:TRangeEncoder; _isMatch:array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1]of smallint; _isRep:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG0:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG1:array [0..ULZMABase.kNumStates-1] of smallint; _isRepG2:array [0..ULZMABase.kNumStates-1] of smallint; _isRep0Long:array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1]of smallint; _posSlotEncoder:array [0..ULZMABase.kNumLenToPosStates-1] of TBitTreeEncoder; // kNumPosSlotBits _posEncoders:array [0..ULZMABase.kNumFullDistances-ULZMABase.kEndPosModelIndex-1]of smallint; _posAlignEncoder:TBitTreeEncoder; _lenEncoder:TLZMALenPriceTableEncoder; _repMatchLenEncoder:TLZMALenPriceTableEncoder; _literalEncoder:TLZMALiteralEncoder; _matchDistances:array [0..ULZMABase.kMatchMaxLen*2+1] of integer; _numFastBytes:integer; _longestMatchLength:integer; _numDistancePairs:integer; _additionalOffset:integer; _optimumEndIndex:integer; _optimumCurrentIndex:integer; _longestMatchWasFound:boolean; _posSlotPrices:array [0..1 shl (ULZMABase.kNumPosSlotBits+ULZMABase.kNumLenToPosStatesBits)-1] of integer; _distancesPrices:array [0..ULZMABase.kNumFullDistances shl ULZMABase.kNumLenToPosStatesBits-1] of integer; _alignPrices:array [0..ULZMABase.kAlignTableSize-1] of integer; _alignPriceCount:integer; _distTableSize:integer; _posStateBits:integer; _posStateMask:integer; _numLiteralPosStateBits:integer; _numLiteralContextBits:integer; _dictionarySize:integer; _dictionarySizePrev:integer; _numFastBytesPrev:integer; nowPos64:int64; _finished:boolean; _inStream:TStream; _matchFinderType:integer; _writeEndMark:boolean; _needReleaseMFStream:boolean; reps:array [0..ULZMABase.kNumRepDistances-1]of integer; repLens:array [0..ULZMABase.kNumRepDistances-1] of integer; backRes:integer; processedInSize:int64; processedOutSize:int64; finished:boolean; properties:array [0..kPropSize] of byte; tempPrices:array [0..ULZMABase.kNumFullDistances-1]of integer; _matchPriceCount:integer; constructor Create; destructor Destroy;override; function GetPosSlot(const pos:integer):integer; function GetPosSlot2(const pos:integer):integer; procedure BaseInit; procedure _Create; procedure SetWriteEndMarkerMode(const writeEndMarker:boolean); procedure Init; function ReadMatchDistances:integer; procedure MovePos(const num:integer); function GetRepLen1Price(const state,posState:integer):integer; function GetPureRepPrice(const repIndex, state, posState:integer):integer; function GetRepPrice(const repIndex, len, state, posState:integer):integer; function GetPosLenPrice(const pos, len, posState:integer):integer; function Backward(cur:integer):integer; function GetOptimum(position:integer):integer; function ChangePair(const smallDist, bigDist:integer):boolean; procedure WriteEndMarker(const posState:integer); procedure Flush(const nowPos:integer); procedure ReleaseMFStream; procedure CodeOneBlock(var inSize,outSize:int64;var finished:boolean); procedure FillDistancesPrices; procedure FillAlignPrices; procedure SetOutStream(const outStream:TStream); procedure ReleaseOutStream; procedure ReleaseStreams; procedure SetStreams(const inStream, outStream:TStream;const inSize, outSize:int64); procedure Code(const inStream, outStream:TStream;const inSize, outSize:int64); procedure WriteCoderProperties(const outStream:TStream); function SetAlgorithm(const algorithm:integer):boolean; function SetDictionarySize(dictionarySize:integer):boolean; function SeNumFastBytes(const numFastBytes:integer):boolean; function SetMatchFinder(const matchFinderIndex:integer):boolean; function SetLcLpPb(const lc,lp,pb:integer):boolean; procedure SetEndMarkerMode(const endMarkerMode:boolean); property OnProgress:TLZMAProgress read FOnProgress write FOnProgress; end; TLZMALiteralEncoder=class public m_Coders: array of TLZMAEncoder2; m_NumPrevBits:integer; m_NumPosBits:integer; m_PosMask:integer; procedure _Create(const numPosBits,numPrevBits:integer); destructor Destroy;override; procedure Init; function GetSubCoder(const pos:integer;const prevByte:byte):TLZMAEncoder2; end; TLZMAEncoder2=class public m_Encoders: array[0..$300-1] of smallint; procedure Init; procedure Encode(const rangeEncoder:TRangeEncoder;const symbol:byte); procedure EncodeMatched(const rangeEncoder:TRangeEncoder;const matchByte,symbol:byte); function GetPrice(const matchMode:boolean;const matchByte,symbol:byte):integer; end; TLZMALenEncoder=class public _choice:array[0..1] of smallint; _lowCoder: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of TBitTreeEncoder; _midCoder: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of TBitTreeEncoder; _highCoder:TBitTreeEncoder; constructor Create; destructor Destroy;override; procedure Init(const numPosStates:integer); procedure Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer);virtual; procedure SetPrices(const posState,numSymbols:integer;var prices:array of integer;const st:integer); end; TLZMALenPriceTableEncoder=class(TLZMALenEncoder) public _prices: array [0..ULZMABase.kNumLenSymbols shl ULZMABase.kNumPosStatesBitsEncodingMax-1] of integer; _tableSize:integer; _counters: array [0..ULZMABase.kNumPosStatesEncodingMax-1] of integer; procedure SetTableSize(const tableSize:integer); function GetPrice(const symbol,posState:integer):integer; procedure UpdateTable(const posState:integer); procedure UpdateTables(const numPosStates:integer); procedure Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer);override; end; TLZMAOptimal=class public State:integer; Prev1IsChar:boolean; Prev2:boolean; PosPrev2:integer; BackPrev2:integer; Price:integer; PosPrev:integer; BackPrev:integer; Backs0:integer; Backs1:integer; Backs2:integer; Backs3:integer; procedure MakeAsChar; procedure MakeAsShortRep; function IsShortRep:boolean; end; implementation constructor TLZMAEncoder.Create; var kFastSlots,c,slotFast,j,k:integer; begin kFastSlots := 22; c := 2; g_FastPos[0] := 0; g_FastPos[1] := 1; for slotFast := 2 to kFastSlots -1 do begin k := (1 shl ((slotFast shr 1) - 1)); for j := 0 to k -1 do begin g_FastPos[c] := slotFast; inc(c); end; end; _state := ULZMABase.StateInit(); _matchFinder:=nil; _rangeEncoder:=TRangeEncoder.Create; _posAlignEncoder:=TBitTreeEncoder.Create(ULZMABase.kNumAlignBits); _lenEncoder:=TLZMALenPriceTableEncoder.Create; _repMatchLenEncoder:=TLZMALenPriceTableEncoder.Create; _literalEncoder:=TLZMALiteralEncoder.Create; _numFastBytes:= kNumFastBytesDefault; _distTableSize:= (kDefaultDictionaryLogSize * 2); _posStateBits:= 2; _posStateMask:= (4 - 1); _numLiteralPosStateBits:= 0; _numLiteralContextBits:= 3; _dictionarySize:= (1 shl kDefaultDictionaryLogSize); _dictionarySizePrev:= -1; _numFastBytesPrev:= -1; _matchFinderType:= EMatchFinderTypeBT4; _writeEndMark:= false; _needReleaseMFStream:= false; end; destructor TLZMAEncoder.Destroy; var i:integer; begin _rangeEncoder.Free; _posAlignEncoder.Free; _lenEncoder.Free; _repMatchLenEncoder.Free; _literalEncoder.Free; if _matchFinder<>nil then _matchFinder.Free; for i := 0 to kNumOpts -1 do _optimum[i].Free; for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i].Free; end; procedure TLZMAEncoder._Create; var bt:TLZBinTree; numHashBytes,i:integer; begin if _matchFinder = nil then begin bt := TLZBinTree.Create; numHashBytes:= 4; if _matchFinderType = EMatchFinderTypeBT2 then numHashBytes := 2; bt.SetType(numHashBytes); _matchFinder := bt; end; _literalEncoder._Create(_numLiteralPosStateBits, _numLiteralContextBits); if (_dictionarySize = _dictionarySizePrev) and (_numFastBytesPrev = _numFastBytes) then exit; _matchFinder._Create(_dictionarySize, kNumOpts, _numFastBytes, ULZMABase.kMatchMaxLen + 1); _dictionarySizePrev := _dictionarySize; _numFastBytesPrev := _numFastBytes; for i := 0 to kNumOpts -1 do _optimum[i]:=TLZMAOptimal.Create; for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i] :=TBitTreeEncoder.Create(ULZMABase.kNumPosSlotBits); end; function TLZMAEncoder.GetPosSlot(const pos:integer):integer; begin if (pos < (1 shl 11)) then result:=g_FastPos[pos] else if (pos < (1 shl 21)) then result:=(g_FastPos[pos shr 10] + 20) else result:=(g_FastPos[pos shr 20] + 40); end; function TLZMAEncoder.GetPosSlot2(const pos:integer):integer; begin if (pos < (1 shl 17)) then result:=(g_FastPos[pos shr 6] + 12) else if (pos < (1 shl 27)) then result:=(g_FastPos[pos shr 16] + 32) else result:=(g_FastPos[pos shr 26] + 52); end; procedure TLZMAEncoder.BaseInit; var i:integer; begin _state := ulzmaBase.StateInit; _previousByte := 0; for i := 0 to ULZMABase.kNumRepDistances -1 do _repDistances[i] := 0; end; procedure TLZMAEncoder.SetWriteEndMarkerMode(const writeEndMarker:boolean); begin _writeEndMark := writeEndMarker; end; procedure TLZMAEncoder.Init; var i:integer; begin BaseInit; _rangeEncoder.Init; URangeEncoder.InitBitModels(_isMatch); URangeEncoder.InitBitModels(_isRep0Long); URangeEncoder.InitBitModels(_isRep); URangeEncoder.InitBitModels(_isRepG0); URangeEncoder.InitBitModels(_isRepG1); URangeEncoder.InitBitModels(_isRepG2); URangeEncoder.InitBitModels(_posEncoders); _literalEncoder.Init(); for i := 0 to ULZMABase.kNumLenToPosStates -1 do _posSlotEncoder[i].Init; _lenEncoder.Init(1 shl _posStateBits); _repMatchLenEncoder.Init(1 shl _posStateBits); _posAlignEncoder.Init; _longestMatchWasFound := false; _optimumEndIndex := 0; _optimumCurrentIndex := 0; _additionalOffset := 0; end; function TLZMAEncoder.ReadMatchDistances:integer; var lenRes:integer; begin lenRes := 0; _numDistancePairs := _matchFinder.GetMatches(_matchDistances); if _numDistancePairs > 0 then begin lenRes := _matchDistances[_numDistancePairs - 2]; if lenRes = _numFastBytes then lenRes := lenRes + _matchFinder.GetMatchLen(lenRes - 1, _matchDistances[_numDistancePairs - 1], ULZMABase.kMatchMaxLen - lenRes); end; inc(_additionalOffset); result:=lenRes; end; procedure TLZMAEncoder.MovePos(const num:integer); begin if num > 0 then begin _matchFinder.Skip(num); _additionalOffset := _additionalOffset + num; end; end; function TLZMAEncoder.GetRepLen1Price(const state,posState:integer):integer; begin result:=RangeEncoder.GetPrice0(_isRepG0[state]) + RangeEncoder.GetPrice0(_isRep0Long[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); end; function TLZMAEncoder.GetPureRepPrice(const repIndex, state, posState:integer):integer; var price:integer; begin if repIndex = 0 then begin price := RangeEncoder.GetPrice0(_isRepG0[state]); price := price + RangeEncoder.GetPrice1(_isRep0Long[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); end else begin price := RangeEncoder.GetPrice1(_isRepG0[state]); if repIndex = 1 then price := price + RangeEncoder.GetPrice0(_isRepG1[state]) else begin price := price + RangeEncoder.GetPrice1(_isRepG1[state]); price := price + RangeEncoder.GetPrice(_isRepG2[state], repIndex - 2); end; end; result:=price; end; function TLZMAEncoder.GetRepPrice(const repIndex, len, state, posState:integer):integer; var price:integer; begin price := _repMatchLenEncoder.GetPrice(len - ULZMABase.kMatchMinLen, posState); result := price + GetPureRepPrice(repIndex, state, posState); end; function TLZMAEncoder.GetPosLenPrice(const pos, len, posState:integer):integer; var price,lenToPosState:integer; begin lenToPosState := ULZMABase.GetLenToPosState(len); if pos < ULZMABase.kNumFullDistances then price := _distancesPrices[(lenToPosState * ULZMABase.kNumFullDistances) + pos] else price := _posSlotPrices[(lenToPosState shl ULZMABase.kNumPosSlotBits) + GetPosSlot2(pos)] + _alignPrices[pos and ULZMABase.kAlignMask]; result := price + _lenEncoder.GetPrice(len - ULZMABase.kMatchMinLen, posState); end; function TLZMAEncoder.Backward(cur:integer):integer; var posMem,backMem,posPrev,backCur:integer; begin _optimumEndIndex := cur; posMem := _optimum[cur].PosPrev; backMem := _optimum[cur].BackPrev; repeat if _optimum[cur].Prev1IsChar then begin _optimum[posMem].MakeAsChar; _optimum[posMem].PosPrev := posMem - 1; if _optimum[cur].Prev2 then begin _optimum[posMem - 1].Prev1IsChar := false; _optimum[posMem - 1].PosPrev := _optimum[cur].PosPrev2; _optimum[posMem - 1].BackPrev := _optimum[cur].BackPrev2; end; end; posPrev := posMem; backCur := backMem; backMem := _optimum[posPrev].BackPrev; posMem := _optimum[posPrev].PosPrev; _optimum[posPrev].BackPrev := backCur; _optimum[posPrev].PosPrev := cur; cur := posPrev; until not (cur > 0); backRes := _optimum[0].BackPrev; _optimumCurrentIndex := _optimum[0].PosPrev; result:=_optimumCurrentIndex; end; function TLZMAEncoder.GetOptimum(position:integer):integer; var lenRes,lenMain,numDistancePairs,numAvailableBytes,repMaxIndex,i:integer; matchPrice,repMatchPrice,shortRepPrice,lenEnd,len,repLen,price:integer; curAndLenPrice,normalMatchPrice,Offs,distance,cur,newLen:integer; posPrev,state,pos,curPrice,curAnd1Price,numAvailableBytesFull:integer; lenTest2,t,state2,posStateNext,nextRepMatchPrice,offset:integer; startLen,repIndex,lenTest,lenTestTemp,curAndLenCharPrice:integer; nextMatchPrice,curBack:integer; optimum,opt,nextOptimum:TLZMAOptimal; currentByte,matchByte,posState:byte; nextIsChar:boolean; begin if (_optimumEndIndex <> _optimumCurrentIndex) then begin lenRes := _optimum[_optimumCurrentIndex].PosPrev - _optimumCurrentIndex; backRes := _optimum[_optimumCurrentIndex].BackPrev; _optimumCurrentIndex := _optimum[_optimumCurrentIndex].PosPrev; result:=lenRes; exit; end;//if optimumendindex _optimumCurrentIndex := 0; _optimumEndIndex := 0; if not _longestMatchWasFound then begin lenMain := ReadMatchDistances(); end else begin //if not longest lenMain := _longestMatchLength; _longestMatchWasFound := false; end;//if not longest else numDistancePairs := _numDistancePairs; numAvailableBytes := _matchFinder.GetNumAvailableBytes + 1; if numAvailableBytes < 2 then begin backRes := -1; result:=1; exit; end;//if numavailable {if numAvailableBytes > ULZMABase.kMatchMaxLen then numAvailableBytes := ULZMABase.kMatchMaxLen;} repMaxIndex := 0; for i := 0 to ULZMABase.kNumRepDistances-1 do begin reps[i] := _repDistances[i]; repLens[i] := _matchFinder.GetMatchLen(0 - 1, reps[i], ULZMABase.kMatchMaxLen); if repLens[i] > repLens[repMaxIndex] then repMaxIndex := i; end;//for i if repLens[repMaxIndex] >= _numFastBytes then begin backRes := repMaxIndex; lenRes := repLens[repMaxIndex]; MovePos(lenRes - 1); result:=lenRes; exit; end;//if replens[] if lenMain >= _numFastBytes then begin backRes := _matchDistances[numDistancePairs - 1] + ULZMABase.kNumRepDistances; MovePos(lenMain - 1); result:=lenMain; exit; end;//if lenMain currentByte := _matchFinder.GetIndexByte(0 - 1); matchByte := _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - 1); if (lenMain < 2) and (currentByte <> matchByte) and (repLens[repMaxIndex] < 2) then begin backRes := -1; result:=1; exit; end;//if lenmain<2 _optimum[0].State := _state; posState := (position and _posStateMask); _optimum[1].Price := RangeEncoder.GetPrice0(_isMatch[(_state shl ULZMABase.kNumPosStatesBitsMax) + posState]) + _literalEncoder.GetSubCoder(position, _previousByte).GetPrice(not ULZMABase.StateIsCharState(_state), matchByte, currentByte); _optimum[1].MakeAsChar(); matchPrice := RangeEncoder.GetPrice1(_isMatch[(_state shl ULZMABase.kNumPosStatesBitsMax) + posState]); repMatchPrice := matchPrice + RangeEncoder.GetPrice1(_isRep[_state]); if matchByte = currentByte then begin shortRepPrice := repMatchPrice + GetRepLen1Price(_state, posState); if shortRepPrice < _optimum[1].Price then begin _optimum[1].Price := shortRepPrice; _optimum[1].MakeAsShortRep; end;//if shortrepprice end;//if matchbyte if lenMain >= repLens[repMaxIndex] then lenEnd:=lenMain else lenEnd:=repLens[repMaxIndex]; if lenEnd < 2 then begin backRes := _optimum[1].BackPrev; result:=1; exit; end;//if lenend<2 _optimum[1].PosPrev := 0; _optimum[0].Backs0 := reps[0]; _optimum[0].Backs1 := reps[1]; _optimum[0].Backs2 := reps[2]; _optimum[0].Backs3 := reps[3]; len := lenEnd; repeat _optimum[len].Price := kIfinityPrice; dec(len); until not (len >= 2); for i := 0 to ULZMABase.kNumRepDistances -1 do begin repLen := repLens[i]; if repLen < 2 then continue; price := repMatchPrice + GetPureRepPrice(i, _state, posState); repeat curAndLenPrice := price + _repMatchLenEncoder.GetPrice(repLen - 2, posState); optimum := _optimum[repLen]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := 0; optimum.BackPrev := i; optimum.Prev1IsChar := false; end;//if curandlenprice dec(replen); until not (repLen >= 2); end;//for i normalMatchPrice := matchPrice + RangeEncoder.GetPrice0(_isRep[_state]); if repLens[0] >= 2 then len:=repLens[0] + 1 else len:=2; if len <= lenMain then begin offs := 0; while len > _matchDistances[offs] do offs := offs + 2; while (true) do begin distance := _matchDistances[offs + 1]; curAndLenPrice := normalMatchPrice + GetPosLenPrice(distance, len, posState); optimum := _optimum[len]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := 0; optimum.BackPrev := distance + ULZMABase.kNumRepDistances; optimum.Prev1IsChar := false; end;//if curlenandprice if len = _matchDistances[offs] then begin offs := offs + 2; if offs = numDistancePairs then break; end;//if len=_match inc(len); end;//while (true) end;//if len<=lenmain cur := 0; while (true) do begin inc(cur); if cur = lenEnd then begin result:=Backward(cur); exit; end;//if cur=lenEnd newLen := ReadMatchDistances; numDistancePairs := _numDistancePairs; if newLen >= _numFastBytes then begin _longestMatchLength := newLen; _longestMatchWasFound := true; result:=Backward(cur); exit; end;//if newlen=_numfast inc(position); posPrev := _optimum[cur].PosPrev; if _optimum[cur].Prev1IsChar then begin dec(posPrev); if _optimum[cur].Prev2 then begin state := _optimum[_optimum[cur].PosPrev2].State; if _optimum[cur].BackPrev2 < ULZMABase.kNumRepDistances then state := ULZMABase.StateUpdateRep(state) else state := ULZMABase.StateUpdateMatch(state); end//if _optimum[cur].Prev2 else state := _optimum[posPrev].State; state := ULZMABase.StateUpdateChar(state); end//if _optimum[cur].Prev1IsChar else state := _optimum[posPrev].State; if posPrev = cur - 1 then begin if _optimum[cur].IsShortRep then state := ULZMABase.StateUpdateShortRep(state) else state := ULZMABase.StateUpdateChar(state); end //if posPrev = cur - 1 else begin if _optimum[cur].Prev1IsChar and _optimum[cur].Prev2 then begin posPrev := _optimum[cur].PosPrev2; pos := _optimum[cur].BackPrev2; state := ULZMABase.StateUpdateRep(state); end//if _optimum[cur].Prev1IsChar else begin pos := _optimum[cur].BackPrev; if pos < ULZMABase.kNumRepDistances then state := ULZMABase.StateUpdateRep(state) else state := ULZMABase.StateUpdateMatch(state); end;//if else _optimum[cur].Prev1IsChar opt := _optimum[posPrev]; if pos < ULZMABase.kNumRepDistances then begin if pos = 0 then begin reps[0] := opt.Backs0; reps[1] := opt.Backs1; reps[2] := opt.Backs2; reps[3] := opt.Backs3; end//if pos=0 else if pos = 1 then begin reps[0] := opt.Backs1; reps[1] := opt.Backs0; reps[2] := opt.Backs2; reps[3] := opt.Backs3; end //if pos=1 else if pos = 2 then begin reps[0] := opt.Backs2; reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs3; end//if pos=2 else begin reps[0] := opt.Backs3; reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs2; end;//else if pos= end// if pos < ULZMABase.kNumRepDistances else begin reps[0] := (pos - ULZMABase.kNumRepDistances); reps[1] := opt.Backs0; reps[2] := opt.Backs1; reps[3] := opt.Backs2; end;//if else pos < ULZMABase.kNumRepDistances end;//if else posPrev = cur - 1 _optimum[cur].State := state; _optimum[cur].Backs0 := reps[0]; _optimum[cur].Backs1 := reps[1]; _optimum[cur].Backs2 := reps[2]; _optimum[cur].Backs3 := reps[3]; curPrice := _optimum[cur].Price; currentByte := _matchFinder.GetIndexByte(0 - 1); matchByte := _matchFinder.GetIndexByte(0 - reps[0] - 1 - 1); posState := (position and _posStateMask); curAnd1Price := curPrice + RangeEncoder.GetPrice0(_isMatch[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]) + _literalEncoder.GetSubCoder(position, _matchFinder.GetIndexByte(0 - 2)). GetPrice(not ULZMABase.StateIsCharState(state), matchByte, currentByte); nextOptimum := _optimum[cur + 1]; nextIsChar := false; if curAnd1Price < nextOptimum.Price then begin nextOptimum.Price := curAnd1Price; nextOptimum.PosPrev := cur; nextOptimum.MakeAsChar; nextIsChar := true; end;//if curand1price matchPrice := curPrice + RangeEncoder.GetPrice1(_isMatch[(state shl ULZMABase.kNumPosStatesBitsMax) + posState]); repMatchPrice := matchPrice + RangeEncoder.GetPrice1(_isRep[state]); if (matchByte = currentByte) and (not ((nextOptimum.PosPrev < cur) and (nextOptimum.BackPrev = 0))) then begin shortRepPrice := repMatchPrice + GetRepLen1Price(state, posState); if shortRepPrice <= nextOptimum.Price then begin nextOptimum.Price := shortRepPrice; nextOptimum.PosPrev := cur; nextOptimum.MakeAsShortRep; nextIsChar := true; end;//if shortRepPrice <= nextOptimum.Price end;//if (matchByte = currentByte) and numAvailableBytesFull := _matchFinder.GetNumAvailableBytes + 1; numAvailableBytesFull := min(kNumOpts - 1 - cur, numAvailableBytesFull); numAvailableBytes := numAvailableBytesFull; if numAvailableBytes < 2 then continue; if numAvailableBytes > _numFastBytes then numAvailableBytes := _numFastBytes; if (not nextIsChar) and (matchByte <> currentByte) then begin // try Literal + rep0 t := min(numAvailableBytesFull - 1, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(0, reps[0], t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateChar(state); posStateNext := (position + 1) and _posStateMask; nextRepMatchPrice := curAnd1Price + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + RangeEncoder.GetPrice1(_isRep[state2]); begin offset := cur + 1 + lenTest2; while lenEnd < offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenend curAndLenPrice := nextRepMatchPrice + GetRepPrice( 0, lenTest2, state2, posStateNext); optimum := _optimum[offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := false; end;//if curandlenprice end;//none end;//if lentest end;//if not nextischar and ... startLen := 2; // speed optimization for repIndex := 0 to ULZMABase.kNumRepDistances -1 do begin lenTest := _matchFinder.GetMatchLen(0 - 1, reps[repIndex], numAvailableBytes); if lenTest < 2 then continue; lenTestTemp := lenTest; repeat while lenEnd < cur + lenTest do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState); optimum := _optimum[cur + lenTest]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur; optimum.BackPrev := repIndex; optimum.Prev1IsChar := false; end;//if curandlen dec(lenTest); until not (lenTest >= 2); lenTest := lenTestTemp; if repIndex = 0 then startLen := lenTest + 1; // if (_maxMode) if lenTest < numAvailableBytesFull then begin t := min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(lenTest, reps[repIndex], t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateRep(state); posStateNext := (position + lenTest) and _posStateMask; curAndLenCharPrice := repMatchPrice + GetRepPrice(repIndex, lenTest, state, posState) + RangeEncoder.GetPrice0(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + _literalEncoder.GetSubCoder(position + lenTest, _matchFinder.GetIndexByte(lenTest - 1 - 1)).GetPrice(true, _matchFinder.GetIndexByte(lenTest - 1 - (reps[repIndex] + 1)), _matchFinder.GetIndexByte(lenTest - 1)); state2 := ULZMABase.StateUpdateChar(state2); posStateNext := (position + lenTest + 1) and _posStateMask; nextMatchPrice := curAndLenCharPrice + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]); nextRepMatchPrice := nextMatchPrice + RangeEncoder.GetPrice1(_isRep[state2]); // for(; lenTest2 >= 2; lenTest2--) begin offset := lenTest + 1 + lenTest2; while lenEnd < cur + offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); optimum := _optimum[cur + offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + lenTest + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := true; optimum.PosPrev2 := cur; optimum.BackPrev2 := repIndex; end;//if curAndLenPrice < optimum.Price end;//none end;//if lenTest2 >= 2 end;//if lenTest < numAvailableBytesFull end;//for repIndex if newLen > numAvailableBytes then begin newLen := numAvailableBytes; numDistancePairs := 0; while newLen > _matchDistances[numDistancePairs] do numDistancePairs := numDistancePairs + 2; _matchDistances[numDistancePairs] := newLen; numDistancePairs := numDistancePairs + 2; end;//if newLen > numAvailableBytes if newLen >= startLen then begin normalMatchPrice := matchPrice + RangeEncoder.GetPrice0(_isRep[state]); while lenEnd < cur + newLen do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd offs := 0; while startLen > _matchDistances[offs] do offs := offs + 2; lenTest := startLen; while (true) do begin curBack := _matchDistances[offs + 1]; curAndLenPrice := normalMatchPrice + GetPosLenPrice(curBack, lenTest, posState); optimum := _optimum[cur + lenTest]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur; optimum.BackPrev := curBack + ULZMABase.kNumRepDistances; optimum.Prev1IsChar := false; end;//if curAndLenPrice < optimum.Price if lenTest = _matchDistances[offs] then begin if lenTest < numAvailableBytesFull then begin t := min(numAvailableBytesFull - 1 - lenTest, _numFastBytes); lenTest2 := _matchFinder.GetMatchLen(lenTest, curBack, t); if lenTest2 >= 2 then begin state2 := ULZMABase.StateUpdateMatch(state); posStateNext := (position + lenTest) and _posStateMask; curAndLenCharPrice := curAndLenPrice + RangeEncoder.GetPrice0(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]) + _literalEncoder.GetSubCoder(position + lenTest, _matchFinder.GetIndexByte(lenTest - 1 - 1)). GetPrice(true, _matchFinder.GetIndexByte(lenTest - (curBack + 1) - 1), _matchFinder.GetIndexByte(lenTest - 1)); state2 := ULZMABase.StateUpdateChar(state2); posStateNext := (position + lenTest + 1) and _posStateMask; nextMatchPrice := curAndLenCharPrice + RangeEncoder.GetPrice1(_isMatch[(state2 shl ULZMABase.kNumPosStatesBitsMax) + posStateNext]); nextRepMatchPrice := nextMatchPrice + RangeEncoder.GetPrice1(_isRep[state2]); offset := lenTest + 1 + lenTest2; while lenEnd < cur + offset do begin inc(lenEnd); _optimum[lenEnd].Price := kIfinityPrice; end;//while lenEnd curAndLenPrice := nextRepMatchPrice + GetRepPrice(0, lenTest2, state2, posStateNext); optimum := _optimum[cur + offset]; if curAndLenPrice < optimum.Price then begin optimum.Price := curAndLenPrice; optimum.PosPrev := cur + lenTest + 1; optimum.BackPrev := 0; optimum.Prev1IsChar := true; optimum.Prev2 := true; optimum.PosPrev2 := cur; optimum.BackPrev2 := curBack + ULZMABase.kNumRepDistances; end;//if curAndLenPrice < optimum.Price end;//if lenTest2 >= 2 end;//lenTest < numAvailableBytesFull offs :=offs + 2; if offs = numDistancePairs then break; end;//if lenTest = _matchDistances[offs] inc(lenTest); end;//while(true) end;//if newLen >= startLen end;//while (true) end; function TLZMAEncoder.ChangePair(const smallDist, bigDist:integer):boolean; var kDif:integer; begin kDif := 7; result:= (smallDist < (1 shl (32 - kDif))) and (bigDist >= (smallDist shl kDif)); end; procedure TLZMAEncoder.WriteEndMarker(const posState:integer); var len,posSlot,lenToPosState,footerBits,posReduced:integer; begin if not _writeEndMark then exit; _rangeEncoder.Encode(_isMatch, (_state shl ULZMABase.kNumPosStatesBitsMax) + posState, 1); _rangeEncoder.Encode(_isRep, _state, 0); _state := ULZMABase.StateUpdateMatch(_state); len := ULZMABase.kMatchMinLen; _lenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); posSlot := (1 shl ULZMABase.kNumPosSlotBits) - 1; lenToPosState := ULZMABase.GetLenToPosState(len); _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); footerBits := 30; posReduced := (1 shl footerBits) - 1; _rangeEncoder.EncodeDirectBits(posReduced shr ULZMABase.kNumAlignBits, footerBits - ULZMABase.kNumAlignBits); _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced and ULZMABase.kAlignMask); end; procedure TLZMAEncoder.Flush(const nowPos:integer); begin ReleaseMFStream; WriteEndMarker(nowPos and _posStateMask); _rangeEncoder.FlushData(); _rangeEncoder.FlushStream(); end; procedure TLZMAEncoder.CodeOneBlock(var inSize,outSize:int64;var finished:boolean); var progressPosValuePrev:int64; posState,len,pos,complexState,distance,i,posSlot,lenToPosState:integer; footerBits,baseVal,posReduced:integer; curByte,matchByte:byte; subcoder:TLZMAEncoder2; begin inSize := 0; outSize := 0; finished := true; if _inStream <>nil then begin _matchFinder.SetStream(_inStream); _matchFinder.Init; _needReleaseMFStream := true; _inStream := nil; end; if _finished then exit; _finished := true; progressPosValuePrev := nowPos64; if nowPos64 = 0 then begin if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(nowPos64); exit; end; ReadMatchDistances; posState := integer(nowPos64) and _posStateMask; _rangeEncoder.Encode(_isMatch, (_state shl ULZMABase.kNumPosStatesBitsMax) + posState, 0); _state := ULZMABase.StateUpdateChar(_state); curByte := _matchFinder.GetIndexByte(0 - _additionalOffset); _literalEncoder.GetSubCoder(integer(nowPos64), _previousByte).Encode(_rangeEncoder, curByte); _previousByte := curByte; dec(_additionalOffset); inc(nowPos64); end; if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(integer(nowPos64)); exit; end; while true do begin len := GetOptimum(integer(nowPos64)); pos := backRes; posState := integer(nowPos64) and _posStateMask; complexState := (_state shl ULZMABase.kNumPosStatesBitsMax) + posState; if (len = 1) and (pos = -1) then begin _rangeEncoder.Encode(_isMatch, complexState, 0); curByte := _matchFinder.GetIndexByte(0 - _additionalOffset); subCoder := _literalEncoder.GetSubCoder(integer(nowPos64), _previousByte); if not ULZMABase.StateIsCharState(_state) then begin matchByte := _matchFinder.GetIndexByte(0 - _repDistances[0] - 1 - _additionalOffset); subCoder.EncodeMatched(_rangeEncoder, matchByte, curByte); end else subCoder.Encode(_rangeEncoder, curByte); _previousByte := curByte; _state := ULZMABase.StateUpdateChar(_state); end else begin _rangeEncoder.Encode(_isMatch, complexState, 1); if pos < ULZMABase.kNumRepDistances then begin _rangeEncoder.Encode(_isRep, _state, 1); if pos = 0 then begin _rangeEncoder.Encode(_isRepG0, _state, 0); if len = 1 then _rangeEncoder.Encode(_isRep0Long, complexState, 0) else _rangeEncoder.Encode(_isRep0Long, complexState, 1); end else begin _rangeEncoder.Encode(_isRepG0, _state, 1); if pos = 1 then _rangeEncoder.Encode(_isRepG1, _state, 0) else begin _rangeEncoder.Encode(_isRepG1, _state, 1); _rangeEncoder.Encode(_isRepG2, _state, pos - 2); end; end; if len = 1 then _state := ULZMABase.StateUpdateShortRep(_state) else begin _repMatchLenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); _state := ULZMABase.StateUpdateRep(_state); end; distance := _repDistances[pos]; if pos <> 0 then begin for i := pos downto 1 do _repDistances[i] := _repDistances[i - 1]; _repDistances[0] := distance; end; end else begin _rangeEncoder.Encode(_isRep, _state, 0); _state := ULZMABase.StateUpdateMatch(_state); _lenEncoder.Encode(_rangeEncoder, len - ULZMABase.kMatchMinLen, posState); pos := pos - ULZMABase.kNumRepDistances; posSlot := GetPosSlot(pos); lenToPosState := ULZMABase.GetLenToPosState(len); _posSlotEncoder[lenToPosState].Encode(_rangeEncoder, posSlot); if posSlot >= ULZMABase.kStartPosModelIndex then begin footerBits := integer((posSlot shr 1) - 1); baseVal := ((2 or (posSlot and 1)) shl footerBits); posReduced := pos - baseVal; if posSlot < ULZMABase.kEndPosModelIndex then UBitTreeEncoder.ReverseEncode(_posEncoders, baseVal - posSlot - 1, _rangeEncoder, footerBits, posReduced) else begin _rangeEncoder.EncodeDirectBits(posReduced shr ULZMABase.kNumAlignBits, footerBits - ULZMABase.kNumAlignBits); _posAlignEncoder.ReverseEncode(_rangeEncoder, posReduced and ULZMABase.kAlignMask); inc(_alignPriceCount); end; end; distance := pos; for i := ULZMABase.kNumRepDistances - 1 downto 1 do _repDistances[i] := _repDistances[i - 1]; _repDistances[0] := distance; inc(_matchPriceCount); end; _previousByte := _matchFinder.GetIndexByte(len - 1 - _additionalOffset); end; _additionalOffset := _additionalOffset - len; nowPos64 := nowPos64 + len; if _additionalOffset = 0 then begin // if (!_fastMode) if _matchPriceCount >= (1 shl 7) then FillDistancesPrices; if _alignPriceCount >= ULZMABase.kAlignTableSize then FillAlignPrices; inSize := nowPos64; outSize := _rangeEncoder.GetProcessedSizeAdd; if _matchFinder.GetNumAvailableBytes = 0 then begin Flush(integer(nowPos64)); exit; end; if (nowPos64 - progressPosValuePrev >= (1 shl 12)) then begin _finished := false; finished := false; exit; end; end; end; end; procedure TLZMAEncoder.ReleaseMFStream; begin if (_matchFinder <>nil) and _needReleaseMFStream then begin _matchFinder.ReleaseStream; _needReleaseMFStream := false; end; end; procedure TLZMAEncoder.SetOutStream(const outStream:TStream); begin _rangeEncoder.SetStream(outStream); end; procedure TLZMAEncoder.ReleaseOutStream; begin _rangeEncoder.ReleaseStream; end; procedure TLZMAEncoder.ReleaseStreams; begin ReleaseMFStream; ReleaseOutStream; end; procedure TLZMAEncoder.SetStreams(const inStream, outStream:TStream;const inSize, outSize:int64); begin _inStream := inStream; _finished := false; _Create(); SetOutStream(outStream); Init(); // if (!_fastMode) FillDistancesPrices; FillAlignPrices; _lenEncoder.SetTableSize(_numFastBytes + 1 - ULZMABase.kMatchMinLen); _lenEncoder.UpdateTables(1 shl _posStateBits); _repMatchLenEncoder.SetTableSize(_numFastBytes + 1 - ULZMABase.kMatchMinLen); _repMatchLenEncoder.UpdateTables(1 shl _posStateBits); nowPos64 := 0; end; procedure TLZMAEncoder.Code(const inStream, outStream:TStream;const inSize, outSize:int64); var lpos:int64; progint:int64; inputsize:int64; begin if insize=-1 then inputsize:=instream.Size-instream.Position else inputsize:=insize; progint:=inputsize div CodeProgressInterval; lpos:=progint; _needReleaseMFStream := false; DoProgress(LPAMax,inputsize); try SetStreams(inStream, outStream, inSize, outSize); while true do begin CodeOneBlock(processedInSize, processedOutSize, finished); if finished then begin DoProgress(LPAPos,inputsize); exit; end; if (processedInSize>=lpos) then begin DoProgress(LPAPos,processedInSize); lpos:=lpos+progint; end; end; finally ReleaseStreams(); end; end; procedure TLZMAEncoder.WriteCoderProperties(const outStream:TStream); var i:integer; begin properties[0] := (_posStateBits * 5 + _numLiteralPosStateBits) * 9 + _numLiteralContextBits; for i := 0 to 3 do properties[1 + i] := byte(_dictionarySize shr (8 * i)); outStream.write(properties, kPropSize); end; procedure TLZMAEncoder.FillDistancesPrices; var i,posSlot,footerBits,baseVal,lenToPosState,st,st2:integer; encoder:TBitTreeEncoder; begin for i := ULZMABase.kStartPosModelIndex to ULZMABase.kNumFullDistances -1 do begin posSlot := GetPosSlot(i); footerBits := integer((posSlot shr 1) - 1); baseVal := (2 or (posSlot and 1)) shl footerBits; tempPrices[i] := ReverseGetPrice(_posEncoders, baseVal - posSlot - 1, footerBits, i - baseVal); end; for lenToPosState := 0 to ULZMABase.kNumLenToPosStates -1 do begin encoder := _posSlotEncoder[lenToPosState]; st := (lenToPosState shl ULZMABase.kNumPosSlotBits); for posSlot := 0 to _distTableSize -1 do _posSlotPrices[st + posSlot] := encoder.GetPrice(posSlot); for posSlot := ULZMABase.kEndPosModelIndex to _distTableSize -1 do _posSlotPrices[st + posSlot] := _posSlotPrices[st + posSlot] + ((((posSlot shr 1) - 1) - ULZMABase.kNumAlignBits) shl kNumBitPriceShiftBits); st2 := lenToPosState * ULZMABase.kNumFullDistances; for i := 0 to ULZMABase.kStartPosModelIndex -1 do _distancesPrices[st2 + i] := _posSlotPrices[st + i]; for i := ULZMABase.kStartPosModelIndex to ULZMABase.kNumFullDistances-1 do _distancesPrices[st2 + i] := _posSlotPrices[st + GetPosSlot(i)] + tempPrices[i]; end; _matchPriceCount := 0; end; procedure TLZMAEncoder.FillAlignPrices; var i:integer; begin for i := 0 to ULZMABase.kAlignTableSize -1 do _alignPrices[i] := _posAlignEncoder.ReverseGetPrice(i); _alignPriceCount := 0; end; function TLZMAEncoder.SetAlgorithm(const algorithm:integer):boolean; begin { _fastMode = (algorithm == 0); _maxMode = (algorithm >= 2); } result:=true; end; function TLZMAEncoder.SetDictionarySize(dictionarySize:integer):boolean; var kDicLogSizeMaxCompress,dicLogSize:integer; begin kDicLogSizeMaxCompress := 29; if (dictionarySize < (1 shl ULZMABase.kDicLogSizeMin)) or (dictionarySize > (1 shl kDicLogSizeMaxCompress)) then begin result:=false; exit; end; _dictionarySize := dictionarySize; dicLogSize := 0; while dictionarySize > (1 shl dicLogSize) do inc(dicLogSize); _distTableSize := dicLogSize * 2; result:=true; end; function TLZMAEncoder.SeNumFastBytes(const numFastBytes:integer):boolean; begin if (numFastBytes < 5) or (numFastBytes > ULZMABase.kMatchMaxLen) then begin result:=false; exit; end; _numFastBytes := numFastBytes; result:=true; end; function TLZMAEncoder.SetMatchFinder(const matchFinderIndex:integer):boolean; var matchFinderIndexPrev:integer; begin if (matchFinderIndex < 0) or (matchFinderIndex > 2) then begin result:=false; exit; end; matchFinderIndexPrev := _matchFinderType; _matchFinderType := matchFinderIndex; if (_matchFinder <> nil) and (matchFinderIndexPrev <> _matchFinderType) then begin _dictionarySizePrev := -1; _matchFinder := nil; end; result:=true; end; function TLZMAEncoder.SetLcLpPb(const lc,lp,pb:integer):boolean; begin if (lp < 0) or (lp > ULZMABase.kNumLitPosStatesBitsEncodingMax) or (lc < 0) or (lc > ULZMABase.kNumLitContextBitsMax) or (pb < 0) or (pb > ULZMABase.kNumPosStatesBitsEncodingMax) then begin result:=false; exit; end; _numLiteralPosStateBits := lp; _numLiteralContextBits := lc; _posStateBits := pb; _posStateMask := ((1) shl _posStateBits) - 1; result:=true; end; procedure TLZMAEncoder.SetEndMarkerMode(const endMarkerMode:boolean); begin _writeEndMark := endMarkerMode; end; procedure TLZMAEncoder2.Init; begin URangeEncoder.InitBitModels(m_Encoders); end; procedure TLZMAEncoder2.Encode(const rangeEncoder:TRangeEncoder;const symbol:byte); var context:integer; bit,i:integer; begin context := 1; for i := 7 downto 0 do begin bit := ((symbol shr i) and 1); rangeEncoder.Encode(m_Encoders, context, bit); context := (context shl 1) or bit; end; end; procedure TLZMAEncoder2.EncodeMatched(const rangeEncoder:TRangeEncoder;const matchByte,symbol:byte); var context,i,bit,state,matchbit:integer; same:boolean; begin context := 1; same := true; for i := 7 downto 0 do begin bit := ((symbol shr i) and 1); state := context; if same then begin matchBit := ((matchByte shr i) and 1); state :=state + ((1 + matchBit) shl 8); same := (matchBit = bit); end; rangeEncoder.Encode(m_Encoders, state, bit); context := (context shl 1) or bit; end; end; function TLZMAEncoder2.GetPrice(const matchMode:boolean;const matchByte,symbol:byte):integer; var price,context,i,matchbit,bit:integer; begin price := 0; context := 1; i := 7; if matchMode then while i>=0 do begin matchBit := (matchByte shr i) and 1; bit := (symbol shr i) and 1; price := price + RangeEncoder.GetPrice(m_Encoders[((1 + matchBit) shl 8) + context], bit); context := (context shl 1) or bit; if (matchBit <> bit) then begin dec(i); break; end; dec(i); end; while i>=0 do begin bit := (symbol shr i) and 1; price := price + RangeEncoder.GetPrice(m_Encoders[context], bit); context := (context shl 1) or bit; dec(i); end; result:=price; end; procedure TLZMALiteralEncoder._Create(const numPosBits,numPrevBits:integer); var numstates:integer; i:integer; begin if (length(m_Coders)<>0) and (m_NumPrevBits = numPrevBits) and (m_NumPosBits = numPosBits) then exit; m_NumPosBits := numPosBits; m_PosMask := (1 shl numPosBits) - 1; m_NumPrevBits := numPrevBits; numStates := 1 shl (m_NumPrevBits + m_NumPosBits); setlength(m_coders,numStates); for i := 0 to numStates-1 do m_Coders[i] := TLZMAEncoder2.Create; end; destructor TLZMALiteralEncoder.Destroy; var i:integer; begin for i:=low(m_Coders) to high(m_Coders) do if m_Coders[i]<>nil then m_Coders[i].Free; inherited; end; procedure TLZMALiteralEncoder.Init; var numstates,i:integer; begin numStates := 1 shl (m_NumPrevBits + m_NumPosBits); for i := 0 to numStates-1 do m_Coders[i].Init; end; function TLZMALiteralEncoder.GetSubCoder(const pos:integer;const prevByte:byte):TLZMAEncoder2; begin result:=m_Coders[((pos and m_PosMask) shl m_NumPrevBits) + ((prevByte and $FF) shr (8 - m_NumPrevBits))]; end; constructor TLZMALenEncoder.Create; var posState:integer; begin _highCoder := TBitTreeEncoder.Create(ULZMABase.kNumHighLenBits); for posState := 0 to ULZMABase.kNumPosStatesEncodingMax-1 do begin _lowCoder[posState] := TBitTreeEncoder.Create(ULZMABase.kNumLowLenBits); _midCoder[posState] := TBitTreeEncoder.Create(ULZMABase.kNumMidLenBits); end; end; destructor TLZMALenEncoder.Destroy; var posState:integer; begin _highCoder.Free; for posState := 0 to ULZMABase.kNumPosStatesEncodingMax-1 do begin _lowCoder[posState].Free; _midCoder[posState].Free; end; inherited; end; procedure TLZMALenEncoder.Init(const numPosStates:integer); var posState:integer; begin URangeEncoder.InitBitModels(_choice); for posState := 0 to numPosStates -1 do begin _lowCoder[posState].Init; _midCoder[posState].Init; end; _highCoder.Init; end; procedure TLZMALenEncoder.Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer); begin if (symbol < ULZMABase.kNumLowLenSymbols) then begin rangeEncoder.Encode(_choice, 0, 0); _lowCoder[posState].Encode(rangeEncoder, symbol); end else begin symbol := symbol - ULZMABase.kNumLowLenSymbols; rangeEncoder.Encode(_choice, 0, 1); if symbol < ULZMABase.kNumMidLenSymbols then begin rangeEncoder.Encode(_choice, 1, 0); _midCoder[posState].Encode(rangeEncoder, symbol); end else begin rangeEncoder.Encode(_choice, 1, 1); _highCoder.Encode(rangeEncoder, symbol - ULZMABase.kNumMidLenSymbols); end; end; end; procedure TLZMALenEncoder.SetPrices(const posState,numSymbols:integer;var prices:array of integer;const st:integer); var a0,a1,b0,b1,i:integer; begin a0 := RangeEncoder.GetPrice0(_choice[0]); a1 := RangeEncoder.GetPrice1(_choice[0]); b0 := a1 + RangeEncoder.GetPrice0(_choice[1]); b1 := a1 + RangeEncoder.GetPrice1(_choice[1]); i:=0; while i= numSymbols then exit; prices[st + i] := a0 + _lowCoder[posState].GetPrice(i); inc(i); end; while i < ULZMABase.kNumLowLenSymbols + ULZMABase.kNumMidLenSymbols do begin if i >= numSymbols then exit; prices[st + i] := b0 + _midCoder[posState].GetPrice(i - ULZMABase.kNumLowLenSymbols); inc(i); end; while i < numSymbols do begin prices[st + i] := b1 + _highCoder.GetPrice(i - ULZMABase.kNumLowLenSymbols - ULZMABase.kNumMidLenSymbols); inc(i); end; end; procedure TLZMALenPriceTableEncoder.SetTableSize(const tableSize:integer); begin _tableSize := tableSize; end; function TLZMALenPriceTableEncoder.GetPrice(const symbol,posState:integer):integer; begin result:=_prices[posState * ULZMABase.kNumLenSymbols + symbol] end; procedure TLZMALenPriceTableEncoder.UpdateTable(const posState:integer); begin SetPrices(posState, _tableSize, _prices, posState * ULZMABase.kNumLenSymbols); _counters[posState] := _tableSize; end; procedure TLZMALenPriceTableEncoder.UpdateTables(const numPosStates:integer); var posState:integer; begin for posState := 0 to numPosStates -1 do UpdateTable(posState); end; procedure TLZMALenPriceTableEncoder.Encode(const rangeEncoder:TRangeEncoder;symbol:integer;const posState:integer); begin inherited Encode(rangeEncoder, symbol, posState); dec(_counters[posState]); if (_counters[posState] = 0) then UpdateTable(posState); end; procedure TLZMAOptimal.MakeAsChar; begin BackPrev := -1; Prev1IsChar := false; end; procedure TLZMAOptimal.MakeAsShortRep; begin BackPrev := 0; Prev1IsChar := false; end; function TLZMAOptimal.IsShortRep:boolean; begin result:=BackPrev = 0; end; procedure TLZMAEncoder.DoProgress(const Action:TLZMAProgressAction;const Value:integer); begin if assigned(fonprogress) then fonprogress(action,value); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZMA/ULZMADecoder.pas0000644000175000001440000003414012014201074024524 0ustar alexxusersunit ULZMADecoder; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses ULZMABase,UBitTreeDecoder,ULZOutWindow,URangeDecoder,Math,Classes,ULZMACommon; type TLZMALenDecoder = class; TLZMALiteralDecoder = class; TLZMADecoder = class private FOnProgress:TLZMAProgress; procedure DoProgress(const Action:TLZMAProgressAction;const Value:integer); public m_OutWindow:TLZOutWindow; m_RangeDecoder:TRangeDecoder; m_IsMatchDecoders: array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1] of smallint; m_IsRepDecoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG0Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG1Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRepG2Decoders: array [0..ULZMABase.kNumStates-1] of smallint; m_IsRep0LongDecoders: array [0..ULZMABase.kNumStates shl ULZMABase.kNumPosStatesBitsMax-1] of smallint; m_PosSlotDecoder: array [0..ULZMABase.kNumLenToPosStates-1] of TBitTreeDecoder; m_PosDecoders: array [0..ULZMABase.kNumFullDistances - ULZMABase.kEndPosModelIndex-1] of smallint; m_PosAlignDecoder:TBitTreeDecoder; m_LenDecoder:TLZMALenDecoder; m_RepLenDecoder:TLZMALenDecoder; m_LiteralDecoder:TLZMALiteralDecoder; m_DictionarySize:integer; m_DictionarySizeCheck:integer; m_PosStateMask:integer; constructor Create; destructor Destroy;override; function SetDictionarySize(const dictionarySize:integer):boolean; function SetLcLpPb(const lc,lp,pb:integer):boolean; procedure Init; function Code(const inStream,outStream:TStream;outSize:int64):boolean; function SetDecoderProperties(const properties:array of byte):boolean; property OnProgress:TLZMAProgress read FOnProgress write FOnProgress; end; TLZMALenDecoder = class public m_Choice:array [0..1] of smallint; m_LowCoder: array[0..ULZMABase.kNumPosStatesMax-1] of TBitTreeDecoder; m_MidCoder: array[0..ULZMABase.kNumPosStatesMax-1] of TBitTreeDecoder; m_HighCoder: TBitTreeDecoder; m_NumPosStates:integer; constructor Create; destructor Destroy;override; procedure _Create(const numPosStates:integer); procedure Init; function Decode(const rangeDecoder:TRangeDecoder;const posState:integer):integer; end; TLZMADecoder2 = class public m_Decoders: array [0..$300-1] of smallint; procedure Init; function DecodeNormal(const rangeDecoder:TRangeDecoder):byte; function DecodeWithMatchByte(const rangeDecoder:TRangeDecoder;matchByte:byte):byte; end; TLZMALiteralDecoder = class public m_Coders: array of TLZMADecoder2; m_NumPrevBits:integer; m_NumPosBits:integer; m_PosMask:integer; procedure _Create(const numPosBits, numPrevBits:integer); procedure Init; function GetDecoder(const pos:integer;const prevByte:byte):TLZMADecoder2; destructor Destroy;override; end; implementation constructor TLZMALenDecoder.Create; begin m_HighCoder:=TBitTreeDecoder.Create(ULZMABase.kNumHighLenBits); m_NumPosStates:=0; end; destructor TLZMALenDecoder.Destroy; var i:integer; begin m_HighCoder.free; for i:=low(m_LowCoder) to high(m_LowCoder) do begin if m_LowCoder[i]<>nil then m_LowCoder[i].free; if m_MidCoder[i]<>nil then m_MidCoder[i].free; end; inherited; end; procedure TLZMALenDecoder._Create(const numPosStates:integer); begin while m_NumPosStates < numPosStates do begin m_LowCoder[m_NumPosStates] := TBitTreeDecoder.Create(ULZMABase.kNumLowLenBits); m_MidCoder[m_NumPosStates] := TBitTreeDecoder.Create(ULZMABase.kNumMidLenBits); inc(m_NumPosStates); end; end; procedure TLZMALenDecoder.Init; var posState:integer; begin URangeDecoder.InitBitModels(m_Choice); for posState := 0 to m_NumPosStates-1 do begin m_LowCoder[posState].Init; m_MidCoder[posState].Init; end; m_HighCoder.Init; end; function TLZMALenDecoder.Decode(const rangeDecoder:TRangeDecoder;const posState:integer):integer; var symbol:integer; begin if (rangeDecoder.DecodeBit(m_Choice, 0) = 0) then begin result:=m_LowCoder[posState].Decode(rangeDecoder); exit; end; symbol := ULZMABase.kNumLowLenSymbols; if (rangeDecoder.DecodeBit(m_Choice, 1) = 0) then symbol := symbol + m_MidCoder[posState].Decode(rangeDecoder) else symbol := symbol + ULZMABase.kNumMidLenSymbols + m_HighCoder.Decode(rangeDecoder); result:=symbol; end; procedure TLZMADecoder2.Init; begin URangeDecoder.InitBitModels(m_Decoders); end; function TLZMADecoder2.DecodeNormal(const rangeDecoder:TRangeDecoder):byte; var symbol:integer; begin symbol := 1; repeat symbol := (symbol shl 1) or rangeDecoder.DecodeBit(m_Decoders, symbol); until not (symbol < $100); result:= byte(symbol); end; function TLZMADecoder2.DecodeWithMatchByte(const rangeDecoder:TRangeDecoder;matchByte:byte):byte; var symbol:integer; matchbit:integer; bit:integer; begin symbol := 1; repeat matchBit := (matchByte shr 7) and 1; matchByte := byte(matchByte shl 1); bit := rangeDecoder.DecodeBit(m_Decoders, ((1 + matchBit) shl 8) + symbol); symbol := (symbol shl 1) or bit; if (matchBit <> bit) then begin while (symbol < $100) do begin symbol := (symbol shl 1) or rangeDecoder.DecodeBit(m_Decoders, symbol); end; break; end; until not (symbol < $100); result:= byte(symbol); end; procedure TLZMALiteralDecoder._Create(const numPosBits, numPrevBits:integer); var numStates,i:integer; begin if (length(m_Coders) <> 0) and (m_NumPrevBits = numPrevBits) and (m_NumPosBits = numPosBits) then exit; m_NumPosBits := numPosBits; m_PosMask := (1 shl numPosBits) - 1; m_NumPrevBits := numPrevBits; numStates := 1 shl (m_NumPrevBits + m_NumPosBits); setlength(m_Coders,numStates); for i :=0 to numStates-1 do m_Coders[i] := TLZMADecoder2.Create; end; destructor TLZMALiteralDecoder.Destroy; var i:integer; begin for i :=low(m_Coders) to high(m_Coders) do if m_Coders[i]<>nil then m_Coders[i].Free; inherited; end; procedure TLZMALiteralDecoder.Init; var numStates,i:integer; begin numStates := 1 shl (m_NumPrevBits + m_NumPosBits); for i := 0 to numStates -1 do m_Coders[i].Init; end; function TLZMALiteralDecoder.GetDecoder(const pos:integer;const prevByte:byte):TLZMADecoder2; begin result:=m_Coders[((pos and m_PosMask) shl m_NumPrevBits) + ((prevByte and $FF) shr (8 - m_NumPrevBits))]; end; constructor TLZMADecoder.Create; var i:integer; begin FOnProgress:=nil; m_OutWindow:=TLZOutWindow.Create; m_RangeDecoder:=TRangeDecoder.Create; m_PosAlignDecoder:=TBitTreeDecoder.Create(ULZMABase.kNumAlignBits); m_LenDecoder:=TLZMALenDecoder.Create; m_RepLenDecoder:=TLZMALenDecoder.Create; m_LiteralDecoder:=TLZMALiteralDecoder.Create; m_DictionarySize:= -1; m_DictionarySizeCheck:= -1; for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i] :=TBitTreeDecoder.Create(ULZMABase.kNumPosSlotBits); end; destructor TLZMADecoder.Destroy; var i:integer; begin m_OutWindow.Free; m_RangeDecoder.Free; m_PosAlignDecoder.Free; m_LenDecoder.Free; m_RepLenDecoder.Free; m_LiteralDecoder.Free; for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i].Free; end; function TLZMADecoder.SetDictionarySize(const dictionarySize:integer):boolean; begin if dictionarySize < 0 then result:=false else begin if m_DictionarySize <> dictionarySize then begin m_DictionarySize := dictionarySize; m_DictionarySizeCheck := max(m_DictionarySize, 1); m_OutWindow._Create(max(m_DictionarySizeCheck, (1 shl 12))); end; result:=true; end; end; function TLZMADecoder.SetLcLpPb(const lc,lp,pb:integer):boolean; var numPosStates:integer; begin if (lc > ULZMABase.kNumLitContextBitsMax) or (lp > 4) or (pb > ULZMABase.kNumPosStatesBitsMax) then begin result:=false; exit; end; m_LiteralDecoder._Create(lp, lc); numPosStates := 1 shl pb; m_LenDecoder._Create(numPosStates); m_RepLenDecoder._Create(numPosStates); m_PosStateMask := numPosStates - 1; result:=true; end; procedure TLZMADecoder.Init; var i:integer; begin m_OutWindow.Init(false); URangeDecoder.InitBitModels(m_IsMatchDecoders); URangeDecoder.InitBitModels(m_IsRep0LongDecoders); URangeDecoder.InitBitModels(m_IsRepDecoders); URangeDecoder.InitBitModels(m_IsRepG0Decoders); URangeDecoder.InitBitModels(m_IsRepG1Decoders); URangeDecoder.InitBitModels(m_IsRepG2Decoders); URangeDecoder.InitBitModels(m_PosDecoders); m_LiteralDecoder.Init(); for i := 0 to ULZMABase.kNumLenToPosStates -1 do m_PosSlotDecoder[i].Init; m_LenDecoder.Init; m_RepLenDecoder.Init; m_PosAlignDecoder.Init; m_RangeDecoder.Init; end; function TLZMADecoder.Code(const inStream,outStream:TStream;outSize:int64):boolean; var state,rep0,rep1,rep2,rep3:integer; nowPos64:int64; prevByte:byte; posState:integer; decoder2:TLZMADecoder2; len,distance,posSlot,numDirectBits:integer; lpos:int64; progint:int64; begin DoProgress(LPAMax,outSize); m_RangeDecoder.SetStream(inStream); m_OutWindow.SetStream(outStream); Init; state := ULZMABase.StateInit; rep0 := 0; rep1 := 0; rep2 := 0; rep3 := 0; nowPos64 := 0; prevByte := 0; progint:=outsize div CodeProgressInterval; lpos:=progint; while (outSize < 0) or (nowPos64 < outSize) do begin if (nowPos64 >=lpos) then begin DoProgress(LPAPos,nowPos64); lpos:=lpos+progint; end; posState := nowPos64 and m_PosStateMask; if (m_RangeDecoder.DecodeBit(m_IsMatchDecoders, (state shl ULZMABase.kNumPosStatesBitsMax) + posState) = 0) then begin decoder2 := m_LiteralDecoder.GetDecoder(nowPos64, prevByte); if not ULZMABase.StateIsCharState(state) then prevByte := decoder2.DecodeWithMatchByte(m_RangeDecoder, m_OutWindow.GetByte(rep0)) else prevByte := decoder2.DecodeNormal(m_RangeDecoder); m_OutWindow.PutByte(prevByte); state := ULZMABase.StateUpdateChar(state); inc(nowPos64); end else begin if (m_RangeDecoder.DecodeBit(m_IsRepDecoders, state) = 1) then begin len := 0; if (m_RangeDecoder.DecodeBit(m_IsRepG0Decoders, state) = 0) then begin if (m_RangeDecoder.DecodeBit(m_IsRep0LongDecoders, (state shl ULZMABase.kNumPosStatesBitsMax) + posState) = 0) then begin state := ULZMABase.StateUpdateShortRep(state); len := 1; end; end else begin if m_RangeDecoder.DecodeBit(m_IsRepG1Decoders, state) = 0 then distance := rep1 else begin if (m_RangeDecoder.DecodeBit(m_IsRepG2Decoders, state) = 0) then distance := rep2 else begin distance := rep3; rep3 := rep2; end; rep2 := rep1; end; rep1 := rep0; rep0 := distance; end; if len = 0 then begin len := m_RepLenDecoder.Decode(m_RangeDecoder, posState) + ULZMABase.kMatchMinLen; state := ULZMABase.StateUpdateRep(state); end; end else begin rep3 := rep2; rep2 := rep1; rep1 := rep0; len := ULZMABase.kMatchMinLen + m_LenDecoder.Decode(m_RangeDecoder, posState); state := ULZMABase.StateUpdateMatch(state); posSlot := m_PosSlotDecoder[ULZMABase.GetLenToPosState(len)].Decode(m_RangeDecoder); if posSlot >= ULZMABase.kStartPosModelIndex then begin numDirectBits := (posSlot shr 1) - 1; rep0 := ((2 or (posSlot and 1)) shl numDirectBits); if posSlot < ULZMABase.kEndPosModelIndex then rep0 := rep0 + UBitTreeDecoder.ReverseDecode(m_PosDecoders, rep0 - posSlot - 1, m_RangeDecoder, numDirectBits) else begin rep0 := rep0 + (m_RangeDecoder.DecodeDirectBits( numDirectBits - ULZMABase.kNumAlignBits) shl ULZMABase.kNumAlignBits); rep0 := rep0 + m_PosAlignDecoder.ReverseDecode(m_RangeDecoder); if rep0 < 0 then begin if rep0 = -1 then break; result:=false; exit; end; end; end else rep0 := posSlot; end; if (rep0 >= nowPos64) or (rep0 >= m_DictionarySizeCheck) then begin m_OutWindow.Flush(); result:=false; exit; end; m_OutWindow.CopyBlock(rep0, len); nowPos64 := nowPos64 + len; prevByte := m_OutWindow.GetByte(0); end; end; m_OutWindow.Flush(); m_OutWindow.ReleaseStream(); m_RangeDecoder.ReleaseStream(); DoProgress(LPAPos,nowPos64); result:=true; end; function TLZMADecoder.SetDecoderProperties(const properties:array of byte):boolean; var val,lc,remainder,lp,pb,dictionarysize,i:integer; begin if length(properties) < 5 then begin result:=false; exit; end; val := properties[0] and $FF; lc := val mod 9; remainder := val div 9; lp := remainder mod 5; pb := remainder div 5; dictionarySize := 0; for i := 0 to 3 do dictionarySize := dictionarysize + ((properties[1 + i]) and $FF) shl (i * 8); if (not SetLcLpPb(lc, lp, pb)) then begin result:=false; exit; end; result:=SetDictionarySize(dictionarySize); end; procedure TLZMADecoder.DoProgress(const Action:TLZMAProgressAction;const Value:integer); begin if assigned(fonprogress) then fonprogress(action,value); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZ/0000755000175000001440000000000012675717732021453 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZ/ULZOutWindow.pas0000644000175000001440000000410712014201074024462 0ustar alexxusersunit ULZOutWindow; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZOutWindow=class public buffer: array of byte; pos:integer; windowSize:integer; streamPos:integer; stream:TStream; procedure _Create(const windowSize:integer); procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init(const solid:boolean); procedure Flush; procedure CopyBlock(const distance:integer; len:integer); procedure PutByte(const b:byte); function GetByte(const distance:integer):byte; end; implementation procedure TLZOutWindow._Create(const windowSize:integer); begin if (length(buffer)=0) or (self.windowSize <> windowSize) then setlength(buffer,windowSize); self.windowSize := windowSize; pos := 0; streamPos := 0; end; procedure TLZOutWindow.SetStream(const stream:TStream); begin ReleaseStream; self.stream:=stream; end; procedure TLZOutWindow.ReleaseStream; begin flush; self.stream:=nil; end; procedure TLZOutWindow.Init(const solid:boolean); begin if not solid then begin streamPos:=0; Pos:=0; end; end; procedure TLZOutWindow.Flush; var size:integer; begin size := pos - streamPos; if (size = 0) then exit; stream.write(buffer[streamPos], size); if (pos >= windowSize) then pos := 0; streamPos := pos; end; procedure TLZOutWindow.CopyBlock(const distance:integer;len:integer); var pos:integer; begin pos := self.pos - distance - 1; if pos < 0 then pos := pos + windowSize; while len<>0 do begin if pos >= windowSize then pos := 0; buffer[self.pos] := buffer[pos]; inc(self.pos); inc(pos); if self.pos >= windowSize then Flush(); dec(len); end; end; procedure TLZOutWindow.PutByte(const b:byte); begin buffer[pos] := b; inc(pos); if (pos >= windowSize) then Flush(); end; function TLZOutWindow.GetByte(const distance:integer):byte; var pos:integer; begin pos := self.pos - distance - 1; if (pos < 0) then pos := pos + windowSize; result:=buffer[pos]; end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/compression/LZ/ULZInWindow.pas0000644000175000001440000001116512014201074024263 0ustar alexxusersunit ULZInWindow; {$IFDEF FPC} {$MODE Delphi} {$ENDIF} interface uses Classes; type TLZInWindow=class public bufferBase: array of byte;// pointer to buffer with data stream:TStream; posLimit:integer; // offset (from _buffer) of first byte when new block reading must be done streamEndWasReached:boolean; // if (true) then _streamPos shows real end of stream pointerToLastSafePosition:integer; bufferOffset:integer; blockSize:integer; // Size of Allocated memory block pos:integer; // offset (from _buffer) of curent byte keepSizeBefore:integer; // how many BYTEs must be kept in buffer before _pos keepSizeAfter:integer; // how many BYTEs must be kept buffer after _pos streamPos:integer; // offset (from _buffer) of first not read byte from Stream procedure MoveBlock; procedure ReadBlock; procedure _Free; procedure _Create(const keepSizeBefore, keepSizeAfter, keepSizeReserv:integer);virtual; procedure SetStream(const stream:TStream); procedure ReleaseStream; procedure Init;virtual; procedure MovePos;virtual; function GetIndexByte(const index:integer):byte; // index + limit have not to exceed _keepSizeAfter; function GetMatchLen(const index:integer;distance,limit:integer):integer; function GetNumAvailableBytes:integer; procedure ReduceOffsets(const subValue:integer); end; implementation procedure TLZInWindow.MoveBlock; var offset,numbytes,i:integer; begin offset := bufferOffset + pos - keepSizeBefore; // we need one additional byte, since MovePos moves on 1 byte. if (offset > 0) then dec(offset); numBytes := bufferOffset + streamPos - offset; // check negative offset ???? for i := 0 to numBytes -1 do bufferBase[i] := bufferBase[offset + i]; bufferOffset := bufferOffset - offset; end; procedure TLZInWindow.ReadBlock; var size,numreadbytes,pointerToPostion:integer; begin if streamEndWasReached then exit; while (true) do begin size := (0 - bufferOffset) + blockSize - streamPos; if size = 0 then exit; numReadBytes := stream.Read(bufferBase[bufferOffset + streamPos], size); if (numReadBytes = 0) then begin posLimit := streamPos; pointerToPostion := bufferOffset + posLimit; if (pointerToPostion > pointerToLastSafePosition) then posLimit := pointerToLastSafePosition - bufferOffset; streamEndWasReached := true; exit; end; streamPos := streamPos + numReadBytes; if (streamPos >= pos + keepSizeAfter) then posLimit := streamPos - keepSizeAfter; end; end; procedure TLZInWindow._Free; begin setlength(bufferBase,0); end; procedure TLZInWindow._Create(const keepSizeBefore, keepSizeAfter, keepSizeReserv:integer); var blocksize:integer; begin self.keepSizeBefore := keepSizeBefore; self.keepSizeAfter := keepSizeAfter; blockSize := keepSizeBefore + keepSizeAfter + keepSizeReserv; if (length(bufferBase) = 0) or (self.blockSize <> blockSize) then begin _Free; self.blockSize := blockSize; setlength(bufferBase,self.blockSize); end; pointerToLastSafePosition := self.blockSize - keepSizeAfter; end; procedure TLZInWindow.SetStream(const stream:TStream); begin self.stream:=stream; end; procedure TLZInWindow.ReleaseStream; begin stream:=nil; end; procedure TLZInWindow.Init; begin bufferOffset := 0; pos := 0; streamPos := 0; streamEndWasReached := false; ReadBlock; end; procedure TLZInWindow.MovePos; var pointerToPostion:integer; begin inc(pos); if pos > posLimit then begin pointerToPostion := bufferOffset + pos; if pointerToPostion > pointerToLastSafePosition then MoveBlock; ReadBlock; end; end; function TLZInWindow.GetIndexByte(const index:integer):byte; begin result:=bufferBase[bufferOffset + pos + index]; end; function TLZInWindow.GetMatchLen(const index:integer;distance,limit:integer):integer; var pby,i:integer; begin if streamEndWasReached then if (pos + index) + limit > streamPos then limit := streamPos - (pos + index); inc(distance); // Byte *pby = _buffer + (size_t)_pos + index; pby := bufferOffset + pos + index; i:=0; while (i 2); if HASH_ARRAY then begin kNumHashDirectBytes := 0; kMinMatchCheck := 4; kFixHashSize := kHash2Size + kHash3Size; end else begin kNumHashDirectBytes := 2; kMinMatchCheck := 2 + 1; kFixHashSize := 0; end; end; procedure TLZBinTree.Init; var i:integer; begin inherited init; for i := 0 to hashSizeSum - 1 do hash[i] := kEmptyHashValue; cyclicBufferPos := 0; ReduceOffsets(-1); end; procedure TLZBinTree.MovePos; begin inc(cyclicBufferPos); if cyclicBufferPos >= cyclicBufferSize then cyclicBufferPos := 0; inherited MovePos; if pos = kMaxValForNormalize then Normalize; end; function TLZBinTree._Create(const historySize,keepAddBufferBefore,matchMaxLen,keepAddBufferAfter:integer):boolean; var windowReservSize:integer; cyclicBufferSize:integer; hs:integer; begin if (historySize > kMaxValForNormalize - 256) then begin result:=false; exit; end; cutValue := 16 + (matchMaxLen shr 1); windowReservSize := (historySize + keepAddBufferBefore + matchMaxLen + keepAddBufferAfter) div 2 + 256; inherited _Create(historySize + keepAddBufferBefore, matchMaxLen + keepAddBufferAfter, windowReservSize); self.matchMaxLen := matchMaxLen; cyclicBufferSize := historySize + 1; if self.cyclicBufferSize <> cyclicBufferSize then begin self.cyclicBufferSize:=cyclicBufferSize; setlength(son,cyclicBufferSize * 2); end; hs := kBT2HashSize; if HASH_ARRAY then begin hs := historySize - 1; hs := hs or (hs shr 1); hs := hs or (hs shr 2); hs := hs or (hs shr 4); hs := hs or (hs shr 8); hs := hs shr 1; hs := hs or $FFFF; if (hs > (1 shl 24)) then hs := hs shr 1; hashMask := hs; inc(hs); hs := hs + kFixHashSize; end; if (hs <> hashSizeSum) then begin hashSizeSum := hs; setlength(hash,hashSizeSum); end; result:=true; end; function TLZBinTree.GetMatches(var distances:array of integer):integer; var lenLimit:integer; offset,matchMinPos,cur,maxlen,hashvalue,hash2value,hash3value:integer; temp,curmatch,curmatch2,curmatch3,ptr0,ptr1,len0,len1,count:integer; delta,cyclicpos,pby1,len:integer; begin if pos + matchMaxLen <= streamPos then lenLimit := matchMaxLen else begin lenLimit := streamPos - pos; if lenLimit < kMinMatchCheck then begin MovePos(); result:=0; exit; end; end; offset := 0; if (pos > cyclicBufferSize) then matchMinPos:=(pos - cyclicBufferSize) else matchMinPos:=0; cur := bufferOffset + pos; maxLen := kStartMaxLen; // to avoid items for len < hashSize; hash2Value := 0; hash3Value := 0; if HASH_ARRAY then begin temp := CrcTable[bufferBase[cur] and $FF] xor (bufferBase[cur + 1] and $FF); hash2Value := temp and (kHash2Size - 1); temp := temp xor ((bufferBase[cur + 2] and $FF) shl 8); hash3Value := temp and (kHash3Size - 1); hashValue := (temp xor (CrcTable[bufferBase[cur + 3] and $FF] shl 5)) and hashMask; end else hashValue := ((bufferBase[cur] and $FF) xor ((bufferBase[cur + 1] and $FF) shl 8)); curMatch := hash[kFixHashSize + hashValue]; if HASH_ARRAY then begin curMatch2 := hash[hash2Value]; curMatch3 := hash[kHash3Offset + hash3Value]; hash[hash2Value] := pos; hash[kHash3Offset + hash3Value] := pos; if curMatch2 > matchMinPos then if bufferBase[bufferOffset + curMatch2] = bufferBase[cur] then begin maxLen := 2; distances[offset] := maxLen; inc(offset); distances[offset] := pos - curMatch2 - 1; inc(offset); end; if curMatch3 > matchMinPos then if bufferBase[bufferOffset + curMatch3] = bufferBase[cur] then begin if curMatch3 = curMatch2 then offset := offset - 2; maxLen := 3; distances[offset] := maxlen; inc(offset); distances[offset] := pos - curMatch3 - 1; inc(offset); curMatch2 := curMatch3; end; if (offset <> 0) and (curMatch2 = curMatch) then begin offset := offset - 2; maxLen := kStartMaxLen; end; end; hash[kFixHashSize + hashValue] := pos; ptr0 := (cyclicBufferPos shl 1) + 1; ptr1 := (cyclicBufferPos shl 1); len0 := kNumHashDirectBytes; len1 := len0; if kNumHashDirectBytes <> 0 then begin if (curMatch > matchMinPos) then begin if (bufferBase[bufferOffset + curMatch + kNumHashDirectBytes] <> bufferBase[cur + kNumHashDirectBytes]) then begin maxLen := kNumHashDirectBytes; distances[offset] := maxLen; inc(offset); distances[offset] := pos - curMatch - 1; inc(offset); end; end; end; count := cutValue; while (true) do begin if (curMatch <= matchMinPos) or (count = 0) then begin son[ptr1] := kEmptyHashValue; son[ptr0] := son[ptr1]; break; end; dec(count); delta := pos - curMatch; if delta<=cyclicBufferPos then cyclicpos:=(cyclicBufferPos - delta) shl 1 else cyclicpos:=(cyclicBufferPos - delta + cyclicBufferSize) shl 1; pby1 := bufferOffset + curMatch; len := min(len0, len1); if bufferBase[pby1 + len] = bufferBase[cur + len] then begin inc(len); while (len <> lenLimit) do begin if (bufferBase[pby1 + len] <> bufferBase[cur + len]) then break; inc(len); end; if maxLen < len then begin maxLen := len; distances[offset] := maxlen; inc(offset); distances[offset] := delta - 1; inc(offset); if (len = lenLimit) then begin son[ptr1] := son[cyclicPos]; son[ptr0] := son[cyclicPos + 1]; break; end; end; end; if (bufferBase[pby1 + len] and $FF) < (bufferBase[cur + len] and $FF) then begin son[ptr1] := curMatch; ptr1 := cyclicPos + 1; curMatch := son[ptr1]; len1 := len; end else begin son[ptr0] := curMatch; ptr0 := cyclicPos; curMatch := son[ptr0]; len0 := len; end; end; MovePos; result:=offset; end; procedure TLZBinTree.Skip(num:integer); var lenLimit,matchminpos,cur,hashvalue,temp,hash2value,hash3value,curMatch:integer; ptr0,ptr1,len,len0,len1,count,delta,cyclicpos,pby1:integer; begin repeat if pos + matchMaxLen <= streamPos then lenLimit := matchMaxLen else begin lenLimit := streamPos - pos; if lenLimit < kMinMatchCheck then begin MovePos(); dec(num); continue; end; end; if pos>cyclicBufferSize then matchminpos:=(pos - cyclicBufferSize) else matchminpos:=0; cur := bufferOffset + pos; if HASH_ARRAY then begin temp := CrcTable[bufferBase[cur] and $FF] xor (bufferBase[cur + 1] and $FF); hash2Value := temp and (kHash2Size - 1); hash[hash2Value] := pos; temp := temp xor ((bufferBase[cur + 2] and $FF) shl 8); hash3Value := temp and (kHash3Size - 1); hash[kHash3Offset + hash3Value] := pos; hashValue := (temp xor (CrcTable[bufferBase[cur + 3] and $FF] shl 5)) and hashMask; end else hashValue := ((bufferBase[cur] and $FF) xor ((bufferBase[cur + 1] and $FF) shl 8)); curMatch := hash[kFixHashSize + hashValue]; hash[kFixHashSize + hashValue] := pos; ptr0 := (cyclicBufferPos shl 1) + 1; ptr1 := (cyclicBufferPos shl 1); len0 := kNumHashDirectBytes; len1 := kNumHashDirectBytes; count := cutValue; while true do begin if (curMatch <= matchMinPos) or (count = 0) then begin son[ptr1] := kEmptyHashValue; son[ptr0] := son[ptr1]; break; end else dec(count); delta := pos - curMatch; if (delta <= cyclicBufferPos) then cyclicpos:=(cyclicBufferPos - delta) shl 1 else cyclicpos:=(cyclicBufferPos - delta + cyclicBufferSize) shl 1; pby1 := bufferOffset + curMatch; len := min(len0, len1); if bufferBase[pby1 + len] = bufferBase[cur + len] then begin inc(len); while (len <> lenLimit) do begin if bufferBase[pby1 + len] <> bufferBase[cur + len] then break; inc(len); end; if len = lenLimit then begin son[ptr1] := son[cyclicPos]; son[ptr0] := son[cyclicPos + 1]; break; end; end; if ((bufferBase[pby1 + len] and $FF) < (bufferBase[cur + len] and $FF)) then begin son[ptr1] := curMatch; ptr1 := cyclicPos + 1; curMatch := son[ptr1]; len1 := len; end else begin son[ptr0] := curMatch; ptr0 := cyclicPos; curMatch := son[ptr0]; len0 := len; end; end; MovePos; dec(num); until num=0; end; procedure TLZBinTree.NormalizeLinks(var items:array of integer;const numItems,subValue:integer); var i,value:integer; begin for i:=0 to NumItems-1 do begin value := items[i]; if value <= subValue then value := kEmptyHashValue else value := value - subValue; items[i] := value; end; end; procedure TLZBinTree.Normalize; var subvalue:integer; begin subValue := pos - cyclicBufferSize; NormalizeLinks(son, cyclicBufferSize * 2, subValue); NormalizeLinks(hash, hashSizeSum, subValue); ReduceOffsets(subValue); end; procedure TLZBinTree.SetCutValue(const cutvalue:integer); begin self.cutValue:=cutValue; end; procedure InitCRC; var i,r,j:integer; begin for i := 0 to 255 do begin r := i; for j := 0 to 7 do if ((r and 1) <> 0) then r := (r shr 1) xor integer($EDB88320) else r := r shr 1; CrcTable[i] := r; end; end; initialization InitCRC; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/LZMAAlone.lpr0000644000175000001440000000176012014201074021000 0ustar alexxusersprogram LZMAAlone; {$MODE Delphi} uses UCRC in 'UCRC.pas', ULZBinTree in 'compression\LZ\ULZBinTree.pas', ULZInWindow in 'compression\LZ\ULZInWindow.pas', ULZOutWindow in 'compression\LZ\ULZOutWindow.pas', ULZMABase in 'compression\LZMA\ULZMABase.pas', ULZMACommon in 'compression\LZMA\ULZMACommon.pas', ULZMADecoder in 'compression\LZMA\ULZMADecoder.pas', ULZMAEncoder in 'compression\LZMA\ULZMAEncoder.pas', UBitTreeDecoder in 'compression\RangeCoder\UBitTreeDecoder.pas', UBitTreeEncoder in 'compression\RangeCoder\UBitTreeEncoder.pas', URangeDecoder in 'compression\RangeCoder\URangeDecoder.pas', URangeEncoder in 'compression\RangeCoder\URangeEncoder.pas', UBufferedFS in 'UBufferedFS.pas', ULZMAAlone in 'ULZMAAlone.pas', ULZMABench in 'ULZMABench.pas',SysUtils; var lz:TLZMAAlone; {$IFDEF MSWINDOWS} {$APPTYPE CONSOLE} {$ENDIF} begin try lz:=TLZMAAlone.Create; lz.Main; lz.Free; except on e:exception do writeln(e.message); end; end. doublecmd-0.7.1/plugins/wcx/zip/lzma/lzma.txt0000644000175000001440000005121212014201074020240 0ustar alexxusersLZMA SDK 4.42 ------------- LZMA SDK Copyright (C) 1999-2006 Igor Pavlov LZMA SDK provides the documentation, samples, header files, libraries, and tools you need to develop applications that use LZMA compression. LZMA is default and general compression method of 7z format in 7-Zip compression program (www.7-zip.org). LZMA provides high compression ratio and very fast decompression. LZMA is an improved version of famous LZ77 compression algorithm. It was improved in way of maximum increasing of compression ratio, keeping high decompression speed and low memory requirements for decompressing. LICENSE ------- LZMA SDK is available under any of the following licenses: 1) GNU Lesser General Public License (GNU LGPL) 2) Common Public License (CPL) 3) Simplified license for unmodified code (read SPECIAL EXCEPTION) 4) Proprietary license It means that you can select one of these four options and follow rules of that license. 1,2) GNU LGPL and CPL licenses are pretty similar and both these licenses are classified as - "Free software licenses" at http://www.gnu.org/ - "OSI-approved" at http://www.opensource.org/ 3) SPECIAL EXCEPTION Igor Pavlov, as the author of this code, expressly permits you to statically or dynamically link your code (or bind by name) to the files from LZMA SDK without subjecting your linked code to the terms of the CPL or GNU LGPL. Any modifications or additions to files from LZMA SDK, however, are subject to the GNU LGPL or CPL terms. SPECIAL EXCEPTION allows you to use LZMA SDK in applications with closed code, while you keep LZMA SDK code unmodified. SPECIAL EXCEPTION #2: Igor Pavlov, as the author of this code, expressly permits you to use this code under the same terms and conditions contained in the License Agreement you have for any previous version of LZMA SDK developed by Igor Pavlov. SPECIAL EXCEPTION #2 allows owners of proprietary licenses to use latest version of LZMA SDK as update for previous versions. SPECIAL EXCEPTION #3: Igor Pavlov, as the author of this code, expressly permits you to use code of the following files: BranchTypes.h, LzmaTypes.h, LzmaTest.c, LzmaStateTest.c, LzmaAlone.cpp, LzmaAlone.cs, LzmaAlone.java as public domain code. 4) Proprietary license LZMA SDK also can be available under a proprietary license which can include: 1) Right to modify code without subjecting modified code to the terms of the CPL or GNU LGPL 2) Technical support for code To request such proprietary license or any additional consultations, send email message from that page: http://www.7-zip.org/support.html You should have received a copy of the GNU Lesser 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 You should have received a copy of the Common Public License along with this library. LZMA SDK Contents ----------------- LZMA SDK includes: - C++ source code of LZMA compressing and decompressing - ANSI-C compatible source code for LZMA decompressing - C# source code for LZMA compressing and decompressing - Java source code for LZMA compressing and decompressing - Compiled file->file LZMA compressing/decompressing program for Windows system ANSI-C LZMA decompression code was ported from original C++ sources to C. Also it was simplified and optimized for code size. But it is fully compatible with LZMA from 7-Zip. UNIX/Linux version ------------------ To compile C++ version of file->file LZMA, go to directory C/7zip/Compress/LZMA_Alone and type "make" or "make clean all" to recompile all. In some UNIX/Linux versions you must compile LZMA with static libraries. To compile with static libraries, change string in makefile LIB = -lm to string LIB = -lm -static Files --------------------- C - C / CPP source code CS - C# source code Java - Java source code lzma.txt - LZMA SDK description (this file) 7zFormat.txt - 7z Format description 7zC.txt - 7z ANSI-C Decoder description (this file) methods.txt - Compression method IDs for .7z LGPL.txt - GNU Lesser General Public License CPL.html - Common Public License lzma.exe - Compiled file->file LZMA encoder/decoder for Windows history.txt - history of the LZMA SDK Source code structure --------------------- C - C / CPP files Common - common files for C++ projects Windows - common files for Windows related code 7zip - files related to 7-Zip Project Common - common files for 7-Zip Compress - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm BinTree - Binary Tree Match Finder for LZ algorithm HashChain - Hash Chain Match Finder for LZ algorithm Patricia - Patricia Match Finder for LZ algorithm RangeCoder - Range Coder (special code of compression/decompression) LZMA - LZMA compression/decompression on C++ LZMA_Alone - file->file LZMA compression/decompression LZMA_C - ANSI-C compatible LZMA decompressor LzmaDecode.h - interface for LZMA decoding on ANSI-C LzmaDecode.c - LZMA decoding on ANSI-C (new fastest version) LzmaDecodeSize.c - LZMA decoding on ANSI-C (old size-optimized version) LzmaTest.c - test application that decodes LZMA encoded file LzmaTypes.h - basic types for LZMA Decoder LzmaStateDecode.h - interface for LZMA decoding (State version) LzmaStateDecode.c - LZMA decoding on ANSI-C (State version) LzmaStateTest.c - test application (State version) Branch - Filters for x86, IA-64, ARM, ARM-Thumb, PowerPC and SPARC code Archive - files related to archiving 7z_C - 7z ANSI-C Decoder CS - C# files 7zip Common - some common files for 7-Zip Compress - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm LZMA - LZMA compression/decompression LzmaAlone - file->file LZMA compression/decompression RangeCoder - Range Coder (special code of compression/decompression) Java - Java files SevenZip Compression - files related to compression/decompression LZ - files related to LZ (Lempel-Ziv) compression algorithm LZMA - LZMA compression/decompression RangeCoder - Range Coder (special code of compression/decompression) C/C++ source code of LZMA SDK is part of 7-Zip project. You can find ANSI-C LZMA decompressing code at folder C/7zip/Compress/LZMA_C 7-Zip doesn't use that ANSI-C LZMA code and that code was developed specially for this SDK. And files from LZMA_C do not need files from other directories of SDK for compiling. 7-Zip source code can be downloaded from 7-Zip's SourceForge page: http://sourceforge.net/projects/sevenzip/ LZMA features ------------- - Variable dictionary size (up to 1 GB) - Estimated compressing speed: about 1 MB/s on 1 GHz CPU - Estimated decompressing speed: - 8-12 MB/s on 1 GHz Intel Pentium 3 or AMD Athlon - 500-1000 KB/s on 100 MHz ARM, MIPS, PowerPC or other simple RISC - Small memory requirements for decompressing (8-32 KB + DictionarySize) - Small code size for decompressing: 2-8 KB (depending from speed optimizations) LZMA decoder uses only integer operations and can be implemented in any modern 32-bit CPU (or on 16-bit CPU with some conditions). Some critical operations that affect to speed of LZMA decompression: 1) 32*16 bit integer multiply 2) Misspredicted branches (penalty mostly depends from pipeline length) 3) 32-bit shift and arithmetic operations Speed of LZMA decompressing mostly depends from CPU speed. Memory speed has no big meaning. But if your CPU has small data cache, overall weight of memory speed will slightly increase. How To Use ---------- Using LZMA encoder/decoder executable -------------------------------------- Usage: LZMA inputFile outputFile [...] e: encode file d: decode file b: Benchmark. There are two tests: compressing and decompressing with LZMA method. Benchmark shows rating in MIPS (million instructions per second). Rating value is calculated from measured speed and it is normalized with AMD Athlon 64 X2 CPU results. Also Benchmark checks possible hardware errors (RAM errors in most cases). Benchmark uses these settings: (-a1, -d21, -fb32, -mfbt4). You can change only -d. Also you can change number of iterations. Example for 30 iterations: LZMA b 30 Default number of iterations is 10. -a{N}: set compression mode 0 = fast, 1 = normal default: 1 (normal) d{N}: Sets Dictionary size - [0, 30], default: 23 (8MB) The maximum value for dictionary size is 1 GB = 2^30 bytes. Dictionary size is calculated as DictionarySize = 2^N bytes. For decompressing file compressed by LZMA method with dictionary size D = 2^N you need about D bytes of memory (RAM). -fb{N}: set number of fast bytes - [5, 273], default: 128 Usually big number gives a little bit better compression ratio and slower compression process. -lc{N}: set number of literal context bits - [0, 8], default: 3 Sometimes lc=4 gives gain for big files. -lp{N}: set number of literal pos bits - [0, 4], default: 0 lp switch is intended for periodical data when period is equal 2^N. For example, for 32-bit (4 bytes) periodical data you can use lp=2. Often it's better to set lc0, if you change lp switch. -pb{N}: set number of pos bits - [0, 4], default: 2 pb switch is intended for periodical data when period is equal 2^N. -mf{MF_ID}: set Match Finder. Default: bt4. Algorithms from hc* group doesn't provide good compression ratio, but they often works pretty fast in combination with fast mode (-a0). Memory requirements depend from dictionary size (parameter "d" in table below). MF_ID Memory Description bt2 d * 9.5 + 4MB Binary Tree with 2 bytes hashing. bt3 d * 11.5 + 4MB Binary Tree with 3 bytes hashing. bt4 d * 11.5 + 4MB Binary Tree with 4 bytes hashing. hc4 d * 7.5 + 4MB Hash Chain with 4 bytes hashing. -eos: write End Of Stream marker. By default LZMA doesn't write eos marker, since LZMA decoder knows uncompressed size stored in .lzma file header. -si: Read data from stdin (it will write End Of Stream marker). -so: Write data to stdout Examples: 1) LZMA e file.bin file.lzma -d16 -lc0 compresses file.bin to file.lzma with 64 KB dictionary (2^16=64K) and 0 literal context bits. -lc0 allows to reduce memory requirements for decompression. 2) LZMA e file.bin file.lzma -lc0 -lp2 compresses file.bin to file.lzma with settings suitable for 32-bit periodical data (for example, ARM or MIPS code). 3) LZMA d file.lzma file.bin decompresses file.lzma to file.bin. Compression ratio hints ----------------------- Recommendations --------------- To increase compression ratio for LZMA compressing it's desirable to have aligned data (if it's possible) and also it's desirable to locate data in such order, where code is grouped in one place and data is grouped in other place (it's better than such mixing: code, data, code, data, ...). Using Filters ------------- You can increase compression ratio for some data types, using special filters before compressing. For example, it's possible to increase compression ratio on 5-10% for code for those CPU ISAs: x86, IA-64, ARM, ARM-Thumb, PowerPC, SPARC. You can find C/C++ source code of such filters in folder "7zip/Compress/Branch" You can check compression ratio gain of these filters with such 7-Zip commands (example for ARM code): No filter: 7z a a1.7z a.bin -m0=lzma With filter for little-endian ARM code: 7z a a2.7z a.bin -m0=bc_arm -m1=lzma With filter for big-endian ARM code (using additional Swap4 filter): 7z a a3.7z a.bin -m0=swap4 -m1=bc_arm -m2=lzma It works in such manner: Compressing = Filter_encoding + LZMA_encoding Decompressing = LZMA_decoding + Filter_decoding Compressing and decompressing speed of such filters is very high, so it will not increase decompressing time too much. Moreover, it reduces decompression time for LZMA_decoding, since compression ratio with filtering is higher. These filters convert CALL (calling procedure) instructions from relative offsets to absolute addresses, so such data becomes more compressible. Source code of these CALL filters is pretty simple (about 20 lines of C++), so you can convert it from C++ version yourself. For some ISAs (for example, for MIPS) it's impossible to get gain from such filter. LZMA compressed file format --------------------------- Offset Size Description 0 1 Special LZMA properties for compressed data 1 4 Dictionary size (little endian) 5 8 Uncompressed size (little endian). -1 means unknown size 13 Compressed data ANSI-C LZMA Decoder ~~~~~~~~~~~~~~~~~~~ To compile ANSI-C LZMA Decoder you can use one of the following files sets: 1) LzmaDecode.h + LzmaDecode.c + LzmaTest.c (fastest version) 2) LzmaDecode.h + LzmaDecodeSize.c + LzmaTest.c (old size-optimized version) 3) LzmaStateDecode.h + LzmaStateDecode.c + LzmaStateTest.c (zlib-like interface) Memory requirements for LZMA decoding ------------------------------------- LZMA decoder doesn't allocate memory itself, so you must allocate memory and send it to LZMA. Stack usage of LZMA decoding function for local variables is not larger than 200 bytes. How To decompress data ---------------------- LZMA Decoder (ANSI-C version) now supports 5 interfaces: 1) Single-call Decompressing 2) Single-call Decompressing with input stream callback 3) Multi-call Decompressing with output buffer 4) Multi-call Decompressing with input callback and output buffer 5) Multi-call State Decompressing (zlib-like interface) Variant-5 is similar to Variant-4, but Variant-5 doesn't use callback functions. Decompressing steps ------------------- 1) read LZMA properties (5 bytes): unsigned char properties[LZMA_PROPERTIES_SIZE]; 2) read uncompressed size (8 bytes, little-endian) 3) Decode properties: CLzmaDecoderState state; /* it's 24-140 bytes structure, if int is 32-bit */ if (LzmaDecodeProperties(&state.Properties, properties, LZMA_PROPERTIES_SIZE) != LZMA_RESULT_OK) return PrintError(rs, "Incorrect stream properties"); 4) Allocate memory block for internal Structures: state.Probs = (CProb *)malloc(LzmaGetNumProbs(&state.Properties) * sizeof(CProb)); if (state.Probs == 0) return PrintError(rs, kCantAllocateMessage); LZMA decoder uses array of CProb variables as internal structure. By default, CProb is unsigned_short. But you can define _LZMA_PROB32 to make it unsigned_int. It can increase speed on some 32-bit CPUs, but memory usage will be doubled in that case. 5) Main Decompressing You must use one of the following interfaces: 5.1 Single-call Decompressing ----------------------------- When to use: RAM->RAM decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: no defines Memory Requirements: - Input buffer: compressed size - Output buffer: uncompressed size - LZMA Internal Structures (~16 KB for default settings) Interface: int res = LzmaDecode(&state, inStream, compressedSize, &inProcessed, outStream, outSize, &outProcessed); 5.2 Single-call Decompressing with input stream callback -------------------------------------------------------- When to use: File->RAM or Flash->RAM decompressing. Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_IN_CB Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Output buffer: uncompressed size - LZMA Internal Structures (~16 KB for default settings) Interface: typedef struct _CBuffer { ILzmaInCallback InCallback; FILE *File; unsigned char Buffer[kInBufferSize]; } CBuffer; int LzmaReadCompressed(void *object, const unsigned char **buffer, SizeT *size) { CBuffer *bo = (CBuffer *)object; *buffer = bo->Buffer; *size = MyReadFile(bo->File, bo->Buffer, kInBufferSize); return LZMA_RESULT_OK; } CBuffer g_InBuffer; g_InBuffer.File = inFile; g_InBuffer.InCallback.Read = LzmaReadCompressed; int res = LzmaDecode(&state, &g_InBuffer.InCallback, outStream, outSize, &outProcessed); 5.3 Multi-call decompressing with output buffer ----------------------------------------------- When to use: RAM->File decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_OUT_READ Memory Requirements: - Input buffer: compressed size - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { LzmaDecode(&state, inBuffer, inAvail, &inProcessed, g_OutBuffer, outAvail, &outProcessed); inAvail -= inProcessed; inBuffer += inProcessed; } while you need more bytes see LzmaTest.c for more details. 5.4 Multi-call decompressing with input callback and output buffer ------------------------------------------------------------------ When to use: File->File decompressing Compile files: LzmaDecode.h, LzmaDecode.c Compile defines: _LZMA_IN_CB, _LZMA_OUT_READ Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { LzmaDecode(&state, &bo.InCallback, g_OutBuffer, outAvail, &outProcessed); } while you need more bytes see LzmaTest.c for more details: 5.5 Multi-call State Decompressing (zlib-like interface) ------------------------------------------------------------------ When to use: file->file decompressing Compile files: LzmaStateDecode.h, LzmaStateDecode.c Compile defines: Memory Requirements: - Buffer for input stream: any size (for example, 16 KB) - Buffer for output stream: any size (for example, 16 KB) - LZMA Internal Structures (~16 KB for default settings) - LZMA dictionary (dictionary size is encoded in stream properties) Interface: state.Dictionary = (unsigned char *)malloc(state.Properties.DictionarySize); LzmaDecoderInit(&state); do { res = LzmaDecode(&state, inBuffer, inAvail, &inProcessed, g_OutBuffer, outAvail, &outProcessed, finishDecoding); inAvail -= inProcessed; inBuffer += inProcessed; } while you need more bytes see LzmaStateTest.c for more details: 6) Free all allocated blocks Note ---- LzmaDecodeSize.c is size-optimized version of LzmaDecode.c. But compiled code of LzmaDecodeSize.c can be larger than compiled code of LzmaDecode.c. So it's better to use LzmaDecode.c in most cases. EXIT codes ----------- LZMA decoder can return one of the following codes: #define LZMA_RESULT_OK 0 #define LZMA_RESULT_DATA_ERROR 1 If you use callback function for input data and you return some error code, LZMA Decoder also returns that code. LZMA Defines ------------ _LZMA_IN_CB - Use callback for input data _LZMA_OUT_READ - Use read function for output data _LZMA_LOC_OPT - Enable local speed optimizations inside code. _LZMA_LOC_OPT is only for LzmaDecodeSize.c (size-optimized version). _LZMA_LOC_OPT doesn't affect LzmaDecode.c (speed-optimized version) and LzmaStateDecode.c _LZMA_PROB32 - It can increase speed on some 32-bit CPUs, but memory usage will be doubled in that case _LZMA_UINT32_IS_ULONG - Define it if int is 16-bit on your compiler and long is 32-bit. _LZMA_SYSTEM_SIZE_T - Define it if you want to use system's size_t. You can use it to enable 64-bit sizes supporting C++ LZMA Encoder/Decoder ~~~~~~~~~~~~~~~~~~~~~~~~ C++ LZMA code use COM-like interfaces. So if you want to use it, you can study basics of COM/OLE. By default, LZMA Encoder contains all Match Finders. But for compressing it's enough to have just one of them. So for reducing size of compressing code you can define: #define COMPRESS_MF_BT #define COMPRESS_MF_BT4 and it will use only bt4 match finder. --- http://www.7-zip.org http://www.7-zip.org/support.html doublecmd-0.7.1/plugins/wcx/zip/lzma/history.txt0000644000175000001440000000171012014201074020774 0ustar alexxusersHISTORY of the LZMA SDK ----------------------- Version 4.42b 2006-06-13 -------------------------------------- - Fixed bug in ULZBinTree which caused an infinite loop on some files - Fixed bug in ULZMAEncoder which caused encoding to fail on some files - Fixed code layout problems caused by a mixture of tabs and spaces Version 4.42a 2006-06-05 -------------------------------------- - Added port of LZMA benchmark Version 4.42 2006-06-01 -------------------------------------- - First version of Pascal SDK ported from Java SDK HISTORY of the LZMA ------------------- 2001-2004: Improvements to LZMA compressing/decompressing code, keeping compatibility with original LZMA format 1996-2001: Development of LZMA compression format Some milestones: 2001-08-30: LZMA compression was added to 7-Zip 1999-01-02: First version of 7-Zip was released End of document doublecmd-0.7.1/plugins/wcx/zip/lib/0000755000175000001440000000000012675717732016370 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/zip/COPYING.txt0000644000175000001440000004313112014201074017443 0ustar alexxusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. doublecmd-0.7.1/plugins/wcx/unrar/0000755000175000001440000000000012675717731016146 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/unrar/src/0000755000175000001440000000000012675717731016735 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/unrar/src/unrar.lpi0000644000175000001440000001117512451527075020567 0ustar alexxusers doublecmd-0.7.1/plugins/wcx/unrar/src/fpc-extra.cfg0000644000175000001440000000015711673054716021304 0ustar alexxusers#IFDEF CPU64 #IFDEF FPC_CROSSCOMPILING -Fl/usr/lib/gcc/i486-linux-gnu/4.6/64 -Fl/usr/local/lib64 #ENDIF #ENDIF doublecmd-0.7.1/plugins/wcx/unrar/src/unrarfunc.pas0000644000175000001440000005432212555116524021441 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- WCX plugin for unpacking RAR archives This is simple wrapper for unrar.dll or libunrar.so Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit UnRARFunc; {$mode objfpc}{$H+} {$include calling.inc} interface uses DynLibs, WcxPlugin, Extension; const {$IF DEFINED(MSWINDOWS)} // libunrar must be built with sizeof(wchar_t) = 2 (default on Windows) _unrar = 'unrar.dll'; {$ELSEIF DEFINED(DARWIN)} // libunrar must be built with sizeof(wchar_t) = 4 (default on Unix) _unrar = 'libunrar.dylib'; {$ELSEIF DEFINED(UNIX)} // libunrar must be built with sizeof(wchar_t) = 4 (default on Unix) _unrar = 'libunrar.so'; {$ENDIF} const // Unrar callback messages. UCM_CHANGEVOLUME = 0; UCM_PROCESSDATA = 1; UCM_NEEDPASSWORD = 2; UCM_CHANGEVOLUMEW = 3; UCM_NEEDPASSWORDW = 4; // Main header flags. MHD_VOLUME = $0001; MHD_COMMENT = $0002; MHD_LOCK = $0004; MHD_SOLID = $0008; MHD_PACK_COMMENT = $0010; MHD_NEWNUMBERING = $0010; MHD_AV = $0020; // (archive signed) MHD_PROTECT = $0040; MHD_PASSWORD = $0080; MHD_FIRSTVOLUME = $0100; MHD_ENCRYPTVER = $0200; type {$IFDEF UNIX} TRarUnicodeChar = UCS4Char; TRarUnicodeString = UCS4String; {$ENDIF} {$IFDEF WINDOWS} TRarUnicodeChar = WideChar; // assuming 2 byte WideChar TRarUnicodeString = WideString; {$ENDIF} PRarUnicodeChar = ^TRarUnicodeChar; TRarUnicodeArray = packed array [0..1023] of TRarUnicodeChar; RARHeaderData = packed record ArcName: packed array[0..259] of Char; FileName: packed array[0..259] of Char; // a zero terminated string of the file name in OEM (DOS) encoding. Flags: LongWord; PackSize: LongWord; UnpSize: LongWord; HostOS: LongWord; FileCRC: LongWord; FileTime: LongWord; UnpVer: LongWord; Method: LongWord; FileAttr: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; end; RARHeaderDataEx = packed record ArcName: packed array [0..1023] of Char; ArcNameW: TRarUnicodeArray; FileName: packed array [0..1023] of Char; FileNameW: TRarUnicodeArray; Flags: LongWord; PackSize: LongWord; PackSizeHigh: LongWord; UnpSize: LongWord; UnpSizeHigh: LongWord; HostOS: LongWord; FileCRC: LongWord; FileTime: LongWord; UnpVer: LongWord; Method: LongWord; FileAttr: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; Reserved: packed array [0..1023] of LongWord; end; RAROpenArchiveData = packed record ArcName: PChar; OpenMode: LongWord; OpenResult: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; end; {$IFDEF MSWINDOWS}{$CALLING STDCALL}{$ELSE}{$CALLING CDECL}{$ENDIF} TUnrarCallback = function(Msg: LongWord; UserData, P1, P2: PtrInt) : Integer; TUnrarChangeVolProc = function(ArcName: PChar; Mode: Integer): Integer; TUnrarProcessDataProc = function(BufAddr: Pointer; BufSize: Integer): Integer; RAROpenArchiveDataEx = packed record ArcName: PAnsiChar; ArcNameW: PRarUnicodeChar; OpenMode: LongWord; OpenResult: LongWord; CmtBuf: PChar; CmtBufSize: LongWord; CmtSize: LongWord; CmtState: LongWord; Flags: LongWord; Callback: TUnrarCallback; UserData: PtrInt; Reserved: packed array [0..27] of LongWord; end; TRAROpenArchive = function(var ArchiveData: RAROpenArchiveData) : TArcHandle; TRAROpenArchiveEx = function(var ArchiveData: RAROpenArchiveDataEx) : TArcHandle; TRARCloseArchive = function(hArcData: TArcHandle) : Integer; TRARReadHeader = function(hArcData: TArcHandle; var HeaderData: RARHeaderData) : Integer; TRARReadHeaderEx = function (hArcData: TArcHandle; var HeaderData: RARHeaderDataEx) : Integer; TRARProcessFile = function(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PAnsiChar) : Integer; TRARProcessFileW = function(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PRarUnicodeChar) : Integer; TRARSetCallback = procedure(hArcData: TArcHandle; UnrarCallback: TUnrarCallback; UserData: PtrInt); TRARSetChangeVolProc = procedure(hArcData: TArcHandle; ChangeVolProc: TUnrarChangeVolProc); TRARSetProcessDataProc = procedure(hArcData: TArcHandle; ProcessDataProc: TUnrarProcessDataProc); TRARSetPassword = procedure(hArcData: TArcHandle; Password: PChar); TRARGetDllVersion = function: Integer; {$CALLING DEFAULT} var RAROpenArchive : TRAROpenArchive = nil; RAROpenArchiveEx : TRAROpenArchiveEx = nil; RARCloseArchive : TRARCloseArchive = nil; RARReadHeader : TRARReadHeader = nil; RARReadHeaderEx : TRARReadHeaderEx = nil; RARProcessFile : TRARProcessFile = nil; RARProcessFileW : TRARProcessFileW = nil; RARSetCallback : TRARSetCallback = nil; RARSetChangeVolProc : TRARSetChangeVolProc = nil; RARSetProcessDataProc : TRARSetProcessDataProc = nil; RARSetPassword : TRARSetPassword = nil; RARGetDllVersion : TRARGetDllVersion = nil; ModuleHandle : TLibHandle = NilHandle; function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle;dcpcall; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW) : TArcHandle;dcpcall; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; function ReadHeaderEx(hArcData: TArcHandle; var HeaderData: THeaderDataEx) : Integer;dcpcall; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PChar) : Integer;dcpcall; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer;dcpcall; function CloseArchive(hArcData: TArcHandle): Integer;dcpcall; procedure SetChangeVolProc(hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; function GetPackerCaps : Integer; dcpcall; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; var gStartupInfo: TExtensionStartupInfo; implementation uses DCBasicTypes, DCDateTimeUtils, DCConvertEncoding, DCFileAttributes; type // From libunrar (dll.hpp) RarHostSystem = ( HOST_MSDOS = 0, HOST_OS2 = 1, HOST_WIN32 = 2, HOST_UNIX = 3, HOST_MACOS = 4, HOST_BEOS = 5, HOST_MAX ); var ChangeVolProc : TChangeVolProc = nil; ChangeVolProcW : TChangeVolProcW = nil; ProcessDataProc : TProcessDataProc = nil; ProcessDataProcW : TProcessDataProcW = nil; // These variables store currently processed file name. // They cannot be dynamic strings, because if they are created from the // main thread of the calling program and then they're freed from another // thread of the calling program there's a crash. // It is because currently the library can only be statically linked with RTL // and so it doesn't know about the main program's multithreading. ProcessedFileName: array [0..1023] of Char; ProcessedFileNameW: array [0..1023] of WideChar; ProcessedFileHostOS: RarHostSystem; procedure StringToArrayA(src: AnsiString; pDst: PAnsiChar; MaxDstLength: Integer); begin if Length(src) < MaxDstLength then MaxDstLength := Length(src) else MaxDstLength := MaxDstLength - 1; // for ending #0 if Length(src) > 0 then Move(src[1], pDst^, SizeOf(AnsiChar) * MaxDstLength); pDst[MaxDstLength] := AnsiChar(0); end; procedure StringToArrayW(src: WideString; pDst: PWideChar; MaxDstLength: Integer); begin if Length(src) < MaxDstLength then MaxDstLength := Length(src) else MaxDstLength := MaxDstLength - 1; // for ending #0 if Length(src) > 0 then Move(src[1], pDst^, SizeOf(WideChar) * MaxDstLength); pDst[MaxDstLength] := WideChar(0); end; function RarUnicodeStringToWideString(src: TRarUnicodeString): WideString; begin {$IFDEF UNIX} Result := UCS4StringToWideString(src); {$ELSE} Result := src; {$ENDIF} end; function WideStringToRarUnicodeString(src: WideString): TRarUnicodeString; begin {$IFDEF UNIX} Result := WideStringToUCS4String(src); {$ELSE} Result := src; {$ENDIF} end; function GetSystemSpecificFileName(HostOS: RarHostSystem; FileName: AnsiString) : AnsiString; begin Result:= FileName; if HostOS in [HOST_MSDOS, HOST_WIN32] then begin Result:= CeOemToSys(Result); end; {$IFDEF MSWINDOWS} if HostOS in [HOST_UNIX, HOST_MACOS] then begin Result:= CeUTF8ToAnsi(Result); end; {$ENDIF} end; function SetSystemSpecificFileName(HostOS: RarHostSystem; FileName: AnsiString) : AnsiString; begin Result:= FileName; {$IFDEF MSWINDOWS} if HostOS in [HOST_MSDOS, HOST_WIN32] then begin Result:= CeSysToOem(Result); end; if HostOS in [HOST_UNIX, HOST_MACOS] then begin Result:= CeSysToOem(Result); end; {$ENDIF} end; function GetSystemSpecificFileTime(FileTime: LongInt) : LongInt; begin Result := FileTime; {$IFDEF UNIX} Result := LongInt(DateTimeToUnixFileTime(DosFileTimeToDateTime(TDosFileTime(Result)))); {$ENDIF} end; function GetSystemSpecificAttributes(HostOS: RarHostSystem; Attrs: LongInt): LongInt; begin Result := Attrs; {$IFDEF MSWINDOWS} if (HostOS = HOST_UNIX) or // Ugly hack: $1FFFF is max value of attributes on Windows (Result > $1FFFF) then begin Result := LongInt(UnixToWinFileAttr(TFileAttrs(Attrs))); end; {$ENDIF} {$IFDEF UNIX} if HostOS in [HOST_MSDOS, HOST_WIN32] then Result := LongInt(WinToUnixFileAttr(TFileAttrs(Result))); {$ENDIF} end; function UnrarCallback(Msg: LongWord; UserData, P1, P2: PtrInt) : Integer; dcpcall; begin Result := 0; case Msg of UCM_CHANGEVOLUME: begin if Assigned(ChangeVolProcW) then begin if ChangeVolProcW(PWideChar(UTF8Decode(AnsiToUtf8(PChar(P1)))), LongInt(P2)) = 0 then Result := -1; end else if Assigned(ChangeVolProc) then begin if ChangeVolProc(PChar(P1), LongInt(P2)) = 0 then Result := -1; end end; UCM_PROCESSDATA: begin // P1 - pointer to data buffer (first param of ProcessDataProc) // P2 - number of bytes in the buffer (second param of ProcessDataProc) if Assigned(ProcessDataProcW) then begin if ProcessDataProcW(PWideChar(ProcessedFileNameW), LongInt(P2)) = 0 then Result := -1; end else if Assigned(ProcessDataProc) then begin if ProcessDataProc(PAnsiChar(ProcessedFileName), LongInt(P2)) = 0 then Result := -1; end; end; UCM_NEEDPASSWORD: begin // DLL needs a password to process archive. This message must be // processed if you wish to be able to handle encrypted archives. // Return zero or a positive value to continue process or -1 // to cancel the archive operation. // P1 - contains the address pointing to the buffer for // a password in single byte encoding. You need to copy a password // here. // P2 - contains the size of password buffer. if not gStartupInfo.InputBox('Unrar', 'Please enter the password:', True, PAnsiChar(P1), P2) then Result := -1; end; end; end; function OpenArchive(var ArchiveData: TOpenArchiveData) : TArcHandle;dcpcall; var RarArchiveData: RAROpenArchiveData; begin if Assigned(RAROpenArchive) then begin RarArchiveData.ArcName := ArchiveData.ArcName; RarArchiveData.OpenMode := ArchiveData.OpenMode; RarArchiveData.CmtBuf := ArchiveData.CmtBuf; RarArchiveData.CmtBufSize := ArchiveData.CmtBufSize; Result := RAROpenArchive(RarArchiveData); ArchiveData.OpenResult := RarArchiveData.OpenResult; if Result <> 0 then begin ArchiveData.CmtSize := RarArchiveData.CmtSize; ArchiveData.CmtState := RarArchiveData.CmtState; RARSetCallback(Result, @UnrarCallback, 0); end; end else begin ArchiveData.OpenResult := E_EOPEN; Result := 0; end; end; function OpenArchiveW(var ArchiveData: tOpenArchiveDataW) : TArcHandle;dcpcall; var RarArchiveData: RAROpenArchiveDataEx; RarArcName: TRarUnicodeString; begin if Assigned(RAROpenArchiveEx) then begin RarArcName := WideStringToRarUnicodeString(ArchiveData.ArcName); FillChar(RarArchiveData, SizeOf(RAROpenArchiveDataEx), #0); RarArchiveData.ArcNameW := PRarUnicodeChar(RarArcName); RarArchiveData.OpenMode := ArchiveData.OpenMode; RarArchiveData.Callback := @UnrarCallback; Result := RAROpenArchiveEx(RarArchiveData); ArchiveData.OpenResult := RarArchiveData.OpenResult; if Result <> 0 then begin ArchiveData.CmtSize := RarArchiveData.CmtSize; ArchiveData.CmtState := RarArchiveData.CmtState; RARSetCallback(Result, @UnrarCallback, 0); end; end else begin ArchiveData.OpenResult := E_EOPEN; Result := 0; end; end; function ReadHeader(hArcData: TArcHandle; var HeaderData: THeaderData) : Integer;dcpcall; var RarHeader: RARHeaderData; begin if Assigned(RARReadHeader) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeader(hArcData, RarHeader); {$PUSH} {$Q-} {$R-} HeaderData.ArcName := RarHeader.ArcName; StringToArrayA( GetSystemSpecificFileName(RarHostSystem(RarHeader.HostOS), AnsiString(RarHeader.FileName)), @HeaderData.FileName, SizeOf(HeaderData.FileName) ); HeaderData.Flags := RarHeader.Flags; HeaderData.PackSize := RarHeader.PackSize; HeaderData.UnpSize := RarHeader.UnpSize; HeaderData.HostOS := RarHeader.HostOS; HeaderData.FileCRC := RarHeader.FileCRC; HeaderData.FileTime := RarHeader.FileTime; HeaderData.UnpVer := RarHeader.UnpVer; HeaderData.Method := RarHeader.Method; HeaderData.FileAttr := RarHeader.FileAttr; HeaderData.CmtSize := RarHeader.CmtSize; HeaderData.CmtState := RarHeader.CmtState; HeaderData.FileAttr := GetSystemSpecificAttributes(RarHostSystem(HeaderData.HostOS), HeaderData.FileAttr); HeaderData.FileTime := GetSystemSpecificFileTime(HeaderData.FileTime); {$POP} Move(HeaderData.FileName, ProcessedFileName, SizeOf(HeaderData.FileName)); ProcessedFileNameW := ''; ProcessedFileHostOS:= RarHostSystem(HeaderData.HostOS); end else Result := E_EREAD; end; function ReadHeaderEx(hArcData: TArcHandle; var HeaderData: THeaderDataEx) : Integer;dcpcall; var RarHeader: RARHeaderDataEx; begin if Assigned(RARReadHeaderEx) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeaderEx(hArcData, RarHeader); {$PUSH} {$Q-} {$R-} HeaderData.ArcName := RarHeader.ArcName; StringToArrayA( GetSystemSpecificFileName(RarHostSystem(RarHeader.HostOS), AnsiString(RarHeader.FileName)), @HeaderData.FileName, SizeOf(HeaderData.FileName) ); HeaderData.Flags := RarHeader.Flags; HeaderData.PackSize := RarHeader.PackSize; HeaderData.PackSizeHigh := RarHeader.PackSizeHigh; HeaderData.UnpSize := RarHeader.UnpSize; HeaderData.UnpSizeHigh := RarHeader.UnpSizeHigh; HeaderData.HostOS := RarHeader.HostOS; HeaderData.FileCRC := RarHeader.FileCRC; HeaderData.FileTime := RarHeader.FileTime; HeaderData.UnpVer := RarHeader.UnpVer; HeaderData.Method := RarHeader.Method; HeaderData.FileAttr := RarHeader.FileAttr; HeaderData.CmtSize := RarHeader.CmtSize; HeaderData.CmtState := RarHeader.CmtState; HeaderData.FileAttr := GetSystemSpecificAttributes(RarHostSystem(HeaderData.HostOS), HeaderData.FileAttr); HeaderData.FileTime := GetSystemSpecificFileTime(HeaderData.FileTime); {$POP} ProcessedFileName := HeaderData.FileName; ProcessedFileNameW := ''; ProcessedFileHostOS:= RarHostSystem(HeaderData.HostOS); end else Result := E_EREAD; end; function ReadHeaderExW(hArcData: TArcHandle; var HeaderData: THeaderDataExW) : Integer;dcpcall; var RarHeader: RARHeaderDataEx; begin if Assigned(RARReadHeaderEx) then begin FillChar(RarHeader, SizeOf(RarHeader), 0); RarHeader.CmtBuf := HeaderData.CmtBuf; RarHeader.CmtBufSize := HeaderData.CmtBufSize; Result := RARReadHeaderEx(hArcData, RarHeader); {$PUSH} {$Q-} {$R-} StringToArrayW( RarUnicodeStringToWideString(TRarUnicodeString(RarHeader.ArcNameW)), @HeaderData.ArcName, SizeOf(HeaderData.ArcName)); StringToArrayW( RarUnicodeStringToWideString(TRarUnicodeString(RarHeader.FileNameW)), @HeaderData.FileName, SizeOf(HeaderData.FileName)); HeaderData.Flags := RarHeader.Flags; HeaderData.PackSize := RarHeader.PackSize; HeaderData.PackSizeHigh := RarHeader.PackSizeHigh; HeaderData.UnpSize := RarHeader.UnpSize; HeaderData.UnpSizeHigh := RarHeader.UnpSizeHigh; HeaderData.HostOS := RarHeader.HostOS; HeaderData.FileCRC := RarHeader.FileCRC; HeaderData.FileTime := RarHeader.FileTime; HeaderData.UnpVer := RarHeader.UnpVer; HeaderData.Method := RarHeader.Method; HeaderData.FileAttr := RarHeader.FileAttr; HeaderData.CmtSize := RarHeader.CmtSize; HeaderData.CmtState := RarHeader.CmtState; HeaderData.FileAttr := GetSystemSpecificAttributes(RarHostSystem(HeaderData.HostOS), HeaderData.FileAttr); HeaderData.FileTime := GetSystemSpecificFileTime(HeaderData.FileTime); {$POP} ProcessedFileName := RarHeader.FileName; ProcessedFileNameW := HeaderData.FileName; end else Result := E_EREAD; end; function ProcessFile(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PChar) : Integer;dcpcall; var pacDestPath: PAnsiChar = nil; pacDestName: PAnsiChar = nil; SysSpecDestPath, SysSpecDestName: AnsiString; begin if Assigned(RARProcessFile) then begin // Both DestPath and DestName must be in OEM encoding // if HostOS is MS DOS or MS Windows and archive is open under MS Windows. if DestPath <> nil then begin SysSpecDestPath:= SetSystemSpecificFileName(ProcessedFileHostOS, DestPath); pacDestPath := PAnsiChar(SysSpecDestPath); end; if DestName <> nil then begin SysSpecDestName:= SetSystemSpecificFileName(ProcessedFileHostOS, DestName); pacDestName := PAnsiChar(SysSpecDestName); end; Result := RARProcessFile(hArcData, Operation, pacDestPath, pacDestName); end else Result := E_EREAD; end; function ProcessFileW(hArcData: TArcHandle; Operation: Integer; DestPath, DestName: PWideChar) : Integer;dcpcall; var pwcDestPath: PRarUnicodeChar = nil; pwcDestName: PRarUnicodeChar = nil; SysSpecDestPath, SysSpecDestName: TRarUnicodeString; begin if Assigned(RARProcessFileW) then begin if DestPath <> nil then begin SysSpecDestPath:= WideStringToRarUnicodeString(DestPath); pwcDestPath := PRarUnicodeChar(SysSpecDestPath); end; if DestName <> nil then begin SysSpecDestName:= WideStringToRarUnicodeString(DestName); pwcDestName := PRarUnicodeChar(SysSpecDestName); end; Result := RARProcessFileW(hArcData, Operation, pwcDestPath, pwcDestName); end else Result := E_EREAD; end; function CloseArchive(hArcData: TArcHandle) : Integer;dcpcall; begin if Assigned(RARCloseArchive) then Result := RARCloseArchive(hArcData) else Result := E_ECLOSE; end; procedure SetChangeVolProc(hArcData : TArcHandle; pChangeVolProc : TChangeVolProc);dcpcall; begin ChangeVolProc := pChangeVolProc; end; procedure SetChangeVolProcW(hArcData : TArcHandle; pChangeVolProc : TChangeVolProcW);dcpcall; begin ChangeVolProcW := pChangeVolProc; end; procedure SetProcessDataProc(hArcData : TArcHandle; pProcessDataProc : TProcessDataProc);dcpcall; begin ProcessDataProc := pProcessDataProc; end; procedure SetProcessDataProcW(hArcData : TArcHandle; pProcessDataProc : TProcessDataProcW);dcpcall; begin ProcessDataProcW := pProcessDataProc; end; function GetPackerCaps: Integer; dcpcall; begin Result := PK_CAPS_MULTIPLE or PK_CAPS_BY_CONTENT {$IF DEFINED(MSWINDOWS)} or PK_CAPS_NEW or PK_CAPS_MODIFY or PK_CAPS_DELETE or PK_CAPS_OPTIONS or PK_CAPS_ENCRYPT {$ENDIF} ; end; procedure ExtensionInitialize(StartupInfo: PExtensionStartupInfo); dcpcall; begin gStartupInfo := StartupInfo^; if ModuleHandle = NilHandle then begin gStartupInfo.MessageBox('Cannot load library ' + _unrar + '! Please check your installation.', nil, MB_OK or MB_ICONERROR); end; end; finalization if ModuleHandle <> 0 then UnloadLibrary(ModuleHandle); end. doublecmd-0.7.1/plugins/wcx/unrar/src/rarfunc.pas0000644000175000001440000001606012631063312021062 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- Wcx plugin for packing RAR archives Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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. } unit RarFunc; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WcxPlugin; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer; dcpcall; var IniFileName: String; implementation uses Process, LazUTF8, DCProcessUtf8, DCOSUtils, UnRARFunc, RarConfDlg; const UTF16LEBOM: WideChar = #$FEFF; LineEndingW = WideChar(#13) + WideChar(#10); function RarToWcx(Error: Integer): Integer; begin case Error of 0: Result:= E_SUCCESS; // Successful operation 1: Result:= E_SUCCESS; // Warning. Non fatal error(s) occurred 2: Result:= E_BAD_ARCHIVE; // A fatal error occurred 3: Result:= E_BAD_DATA; // Invalid checksum. Data is damaged 4: Result:= E_EOPEN; // Attempt to modify a locked archive 5: Result:= E_EWRITE; // Write error 6: Result:= E_EOPEN; // File open error 7: Result:= E_NOT_SUPPORTED; // Wrong command line option 8: Result:= E_NO_MEMORY; // Not enough memory 9: Result:= E_ECREATE; // File create error 10: Result:= E_BAD_DATA; // No files matching the specified mask and options were found 11: Result:= E_BAD_DATA; // Wrong password 255: Result:= E_EABORTED; // User break end; end; function ExecuteRar(Process: TProcessUtf8; FileList : UnicodeString): Integer; var FileName: String; TempFile: THandle; begin FileName:= GetTempFileName; TempFile:= FileCreate(FileName); if (TempFile = feInvalidHandle) then Exit(E_ECREATE); try FileWrite(TempFile, FileList[1], Length(FileList) * SizeOf(WideChar)); FileClose(TempFile); Process.Parameters.Add('@' + SysToUTF8(FileName)); Process.Execute; Process.WaitOnExit; Result:= RarToWcx(Process.ExitStatus); finally DeleteFile(FileName); end; end; procedure PackSetDefaultParams(dps: PPackDefaultParamStruct); dcpcall; begin IniFileName:= dps^.DefaultIniName; LoadConfig; end; procedure ConfigurePacker(Parent: HWND; DllInstance: THandle); dcpcall; begin CreateRarConfDlg; end; function DeleteFilesW(PackedFile, DeleteList: PWideChar): Integer; dcpcall; var FileName : UnicodeString; FolderName: UnicodeString; Process : TProcessUtf8; FileList : UnicodeString; begin Process := TProcessUtf8.Create(nil); try Process.Executable:= mbExpandEnvironmentStrings(WinRar); Process.Parameters.Add('d'); Process.Parameters.Add('-c-'); Process.Parameters.Add('-r-'); Process.Parameters.Add(UTF16ToUTF8(UnicodeString(PackedFile))); try // Parse file list FileList:= UTF16LEBOM; while DeleteList^ <> #0 do begin FileName := DeleteList; // Convert PWideChar to UnicodeString (up to first #0). FileList += FileName + LineEndingW; // If ends with '*' then delete directory if FileName[Length(FileName)] = '*' then begin FolderName:= FileName; Delete(FolderName, Length(FileName) - 3, 4); FileList += FolderName + LineEndingW; end; DeleteList := DeleteList + Length(FileName) + 1; // move after filename and ending #0 end; Result:= ExecuteRar(Process, FileList); except Result:= E_EOPEN; end; finally Process.Free; end; end; function PackFilesW(PackedFile: PWideChar; SubPath: PWideChar; SrcPath: PWideChar; AddList: PWideChar; Flags: Integer): Integer;dcpcall; var FileName: UnicodeString; FolderName: UnicodeString; Process : TProcessUtf8; FileList: UnicodeString; Password: array[0..MAX_PATH] of AnsiChar; begin Process := TProcessUtf8.Create(nil); try Process.Executable:= mbExpandEnvironmentStrings(WinRar); if (Flags and PK_PACK_MOVE_FILES <> 0) then Process.Parameters.Add('m') else begin Process.Parameters.Add('a'); end; Process.Parameters.Add('-c-'); Process.Parameters.Add('-r-'); // Create solid archive if Solid then Process.Parameters.Add('-s'); // Compression method Process.Parameters.Add('-m' + IntToStr(Method)); // Add user command line parameters if Length(Args) > 0 then CommandToList(Args, Process.Parameters); // Add data recovery record if Recovery and (Pos('-rr', Args) = 0) then Process.Parameters.Add('-rr3p'); // Encrypt archive if (Flags and PK_PACK_ENCRYPT <> 0) then begin FillChar(Password, SizeOf(Password), #0); if gStartupInfo.InputBox('Rar', 'Please enter the password:', True, PAnsiChar(Password), MAX_PATH) then begin if Encrypt then Process.Parameters.Add('-hp' + Password) else begin Process.Parameters.Add('-p' + Password); end; end else begin Exit(E_EABORTED); end; end; // Destination path if Assigned(SubPath) then begin Process.Parameters.Add('-ap' + UTF16ToUTF8(UnicodeString(SubPath))); end; Process.Parameters.Add(UTF16ToUTF8(UnicodeString(PackedFile))); // Source path if Assigned(SrcPath) then begin Process.CurrentDirectory:= UTF16ToUTF8(UnicodeString(SrcPath)); end; try // Parse file list FileList:= UTF16LEBOM; while AddList^ <> #0 do begin FileName := UnicodeString(AddList); FileList += FileName + LineEndingW; // If ends with '/' then add directory if FileName[Length(FileName)] = PathDelim then begin FolderName:= FileName; Delete(FolderName, Length(FileName), 1); FileList += FolderName + LineEndingW; end; Inc(AddList, Length(FileName) + 1); end; Result:= ExecuteRar(Process, FileList); except Result:= E_EOPEN; end; finally Process.Free; end; end; end. doublecmd-0.7.1/plugins/wcx/unrar/src/rarconfdlg.pas0000644000175000001440000000720312572532061021550 0ustar alexxusersunit RarConfDlg; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils; procedure LoadConfig; procedure CreateRarConfDlg; var Args: String; Method: Integer; Recovery: Boolean; Encrypt: Boolean; Solid: Boolean; WinRar: String = '%ProgramFiles%\WinRAR\WinRAR.exe'; implementation uses IniFiles, UnRARFunc, Extension, RarFunc; {$R *.lfm} procedure LoadConfig; var gIni: TIniFile; begin try gIni:= TIniFile.Create(IniFileName); try Args:= gIni.ReadString('unrar', 'Args', EmptyStr); WinRar:= gIni.ReadString('unrar', 'Path', WinRar); Method:= gIni.ReadInteger('unrar', 'Method', 3); Recovery:= gIni.ReadBool('unrar', 'Recovery', False); Encrypt:= gIni.ReadBool('unrar', 'Encrypt', False); Solid:= gIni.ReadBool('unrar', 'Solid', False); finally gIni.Free; end; except end; end; procedure SaveConfig; var gIni: TIniFile; begin try gIni:= TIniFile.Create(IniFileName); try gIni.WriteString('unrar', 'Args', Args); gIni.WriteString('unrar', 'Path', WinRar); gIni.WriteInteger('unrar', 'Method', Method); gIni.WriteBool('unrar', 'Recovery', Recovery); gIni.WriteBool('unrar', 'Encrypt', Encrypt); gIni.WriteBool('unrar', 'Solid', Solid); finally gIni.Free; end; except end; end; function DlgProc (pDlg: PtrUInt; DlgItemName: PAnsiChar; Msg, wParam, lParam: PtrInt): PtrInt; dcpcall; begin Result:= 0; with gStartupInfo do begin case Msg of DN_INITDIALOG: begin SendDlgMsg(pDlg, 'cmbMethod', DM_LISTSETITEMINDEX, Method, 0); SendDlgMsg(pDlg, 'chkRecovery', DM_SETCHECK, PtrInt(Recovery), 0); SendDlgMsg(pDlg, 'chkEncrypt', DM_SETCHECK, PtrInt(Encrypt), 0); SendDlgMsg(pDlg, 'chkSolid', DM_SETCHECK, PtrInt(Solid), 0); SendDlgMsg(pDlg, 'edtArgs', DM_SETTEXT, PtrInt(PAnsiChar(Args)), 0); SendDlgMsg(pDlg, 'fnePath', DM_SETTEXT, PtrInt(PAnsiChar(WinRar)), 0); end; DN_CLICK: if DlgItemName = 'btnSave' then begin Args:= PAnsiChar(SendDlgMsg(pDlg, 'edtArgs', DM_GETTEXT, 0, 0)); WinRar:= PAnsiChar(SendDlgMsg(pDlg, 'fnePath', DM_GETTEXT, 0, 0)); Method:= SendDlgMsg(pDlg, 'cmbMethod', DM_LISTGETITEMINDEX, 0, 0); Recovery:= Boolean(SendDlgMsg(pDlg, 'chkRecovery', DM_GETCHECK, 0, 0)); Encrypt:= Boolean(SendDlgMsg(pDlg, 'chkEncrypt', DM_GETCHECK, 0, 0)); Solid:= Boolean(SendDlgMsg(pDlg, 'chkSolid', DM_GETCHECK, 0, 0)); SaveConfig; SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 1, 0); end else if DlgItemName = 'btnCancel' then SendDlgMsg(pDlg, DlgItemName, DM_CLOSE, 2, 0); end;// case end; // with end; procedure CreateRarConfDlg; var ResHandle: TFPResourceHandle = 0; ResGlobal: TFPResourceHGLOBAL = 0; ResData: Pointer = nil; ResSize: LongWord; begin try ResHandle := FindResource(HINSTANCE, PChar('TDIALOGBOX'), MAKEINTRESOURCE(10) {RT_RCDATA}); if ResHandle <> 0 then begin ResGlobal := LoadResource(HINSTANCE, ResHandle); if ResGlobal <> 0 then begin ResData := LockResource(ResGlobal); ResSize := SizeofResource(HINSTANCE, ResHandle); with gStartupInfo do begin DialogBoxLRS(ResData, ResSize, @DlgProc); end; end; end; finally if ResGlobal <> 0 then begin UnlockResource(ResGlobal); FreeResource(ResGlobal); end; end; end; end. doublecmd-0.7.1/plugins/wcx/unrar/src/rarconfdlg.lfm0000644000175000001440000001047012555107027021544 0ustar alexxusersobject DialogBox: TDialogBox Left = 373 Height = 282 Top = 194 Width = 320 AutoSize = True BorderStyle = bsDialog Caption = 'Options' ChildSizing.LeftRightSpacing = 10 ChildSizing.TopBottomSpacing = 10 ClientHeight = 282 ClientWidth = 320 OnShow = DialogBoxShow Position = poOwnerFormCenter LCLVersion = '1.4.2.0' object fnePath: TFileNameEdit AnchorSideLeft.Control = lblPath AnchorSideTop.Control = lblPath AnchorSideTop.Side = asrBottom Left = 10 Height = 23 Top = 31 Width = 296 FilterIndex = 0 HideDirectories = False ButtonWidth = 23 NumGlyphs = 1 BorderSpacing.Top = 6 MaxLength = 0 TabOrder = 0 end object lblPath: TLabel AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner Left = 10 Height = 15 Top = 10 Width = 143 Caption = 'Path to Win&RAR executable' ParentColor = False end object gbOptions: TGroupBox AnchorSideLeft.Control = cmbMethod AnchorSideTop.Control = edtArgs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 85 Top = 158 Width = 300 Anchors = [akTop, akLeft, akRight] AutoSize = True BorderSpacing.Top = 6 Caption = 'Archiving options' ChildSizing.LeftRightSpacing = 6 ChildSizing.TopBottomSpacing = 4 ChildSizing.Layout = cclLeftToRightThenTopToBottom ChildSizing.ControlsPerLine = 1 ClientHeight = 65 ClientWidth = 296 TabOrder = 2 object chkRecovery: TCheckBox Left = 6 Height = 19 Top = 4 Width = 127 Caption = 'Add r&ecovery record' TabOrder = 0 end object chkEncrypt: TCheckBox Left = 6 Height = 19 Top = 23 Width = 127 Caption = 'Encrypt file &names' TabOrder = 1 end object chkSolid: TCheckBox Left = 6 Height = 19 Top = 42 Width = 127 Caption = 'Create &solid archive' TabOrder = 2 end end object lblMethod: TLabel AnchorSideLeft.Control = fnePath AnchorSideTop.Control = fnePath AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 60 Width = 115 BorderSpacing.Top = 6 Caption = '&Compression method' ParentColor = False end object cmbMethod: TComboBox AnchorSideLeft.Control = lblMethod AnchorSideTop.Control = lblMethod AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 79 Width = 300 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 4 ItemHeight = 15 ItemIndex = 3 Items.Strings = ( 'Store' 'Fastest' 'Fast' 'Normal' 'Good' 'Best' ) Style = csDropDownList TabOrder = 1 Text = 'Normal' end object brnCancel: TButton AnchorSideTop.Control = gbOptions AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 235 Height = 25 Top = 253 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Top = 10 Caption = 'Cancel' ModalResult = 2 OnClick = ButtonClick TabOrder = 4 end object btnSave: TButton AnchorSideTop.Control = brnCancel AnchorSideRight.Control = brnCancel Left = 154 Height = 25 Top = 253 Width = 75 Anchors = [akTop, akRight] BorderSpacing.Right = 6 Caption = 'OK' ModalResult = 1 OnClick = ButtonClick TabOrder = 3 end object lblArgs: TLabel AnchorSideLeft.Control = cmbMethod AnchorSideTop.Control = cmbMethod AnchorSideTop.Side = asrBottom Left = 10 Height = 15 Top = 108 Width = 117 BorderSpacing.Top = 6 Caption = 'Additional parameters' ParentColor = False end object edtArgs: TEdit AnchorSideLeft.Control = lblArgs AnchorSideTop.Control = lblArgs AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom Left = 10 Height = 23 Top = 129 Width = 300 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 6 TabOrder = 5 end end doublecmd-0.7.1/plugins/wcx/unrar/src/unrar.dpr0000644000175000001440000000356012631063312020554 0ustar alexxuserslibrary unrar; uses FPCAdds, SysUtils, DynLibs, UnRARFunc {$IF DEFINED(MSWINDOWS)} , RarFunc {$ENDIF} ; exports { Mandatory } OpenArchive, OpenArchiveW, ReadHeader, ReadHeaderEx, ReadHeaderExW, ProcessFile, ProcessFileW, CloseArchive, SetChangeVolProc, SetChangeVolProcW, SetProcessDataProc, SetProcessDataProcW, { Optional } GetPackerCaps, {$IF DEFINED(MSWINDOWS)} PackFilesW, DeleteFilesW, ConfigurePacker, PackSetDefaultParams, {$ENDIF} { Extension API } ExtensionInitialize; {$R *.res} begin ModuleHandle := LoadLibrary(_unrar); if ModuleHandle = NilHandle then ModuleHandle := LoadLibrary(GetEnvironmentVariable('COMMANDER_PATH') + PathDelim + _unrar); if ModuleHandle <> NilHandle then begin RAROpenArchive := TRAROpenArchive(GetProcAddress(ModuleHandle, 'RAROpenArchive')); RAROpenArchiveEx := TRAROpenArchiveEx(GetProcAddress(ModuleHandle, 'RAROpenArchiveEx')); RARCloseArchive := TRARCloseArchive(GetProcAddress(ModuleHandle, 'RARCloseArchive')); RARReadHeader := TRARReadHeader(GetProcAddress(ModuleHandle, 'RARReadHeader')); RARReadHeaderEx := TRARReadHeaderEx(GetProcAddress(ModuleHandle, 'RARReadHeaderEx')); RARProcessFile := TRARProcessFile(GetProcAddress(ModuleHandle, 'RARProcessFile')); RARProcessFileW := TRARProcessFileW(GetProcAddress(ModuleHandle, 'RARProcessFileW')); RARSetCallback := TRARSetCallback(GetProcAddress(ModuleHandle, 'RARSetCallback')); RARSetChangeVolProc := TRARSetChangeVolProc(GetProcAddress(ModuleHandle, 'RARSetChangeVolProc')); RARSetProcessDataProc := TRARSetProcessDataProc(GetProcAddress(ModuleHandle, 'RARSetProcessDataProc')); RARSetPassword := TRARSetPassword(GetProcAddress(ModuleHandle, 'RARSetPassword')); RARGetDllVersion := TRARGetDllVersion(GetProcAddress(ModuleHandle, 'RARGetDllVersion')); end; end. doublecmd-0.7.1/plugins/wcx/unrar/lib/0000755000175000001440000000000012675717731016714 5ustar alexxusersdoublecmd-0.7.1/plugins/wcx/unrar/readme.txt0000644000175000001440000000130312014201074020110 0ustar alexxusersFor using this plugin you need unrar library. You can download it from http://www.rarlab.com/rar_add.htm Windows: Download "UnRAR.dll" - Self-extracting archive UnRARDLL.exe, unpack it and copy unrar.dll in Double Commander (or %windir%\system32) directory Linux: Download "UnRAR source" unrarsrc-x.x.x.tar.gz, unpack it: $ tar -xf unrarsrc-x.x.x.tar.gz go to "unrar" directory: $ cd unrar make symlink makefile.unix -> makefile: $ ln -s makefile.unix makefile set CXX environment variable to "g++ -DSILENT" $export CXX="g++ -DSILENT" and build library: $ make lib After compiling, copy "libunrar.so" in "/usr/lib" directory: $ cp libunrar.so /usr/lib/libunrar.sodoublecmd-0.7.1/plugins/wdx/0000755000175000001440000000000012675717732015021 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/xpi_wdx/0000755000175000001440000000000012675717732016503 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/xpi_wdx/src/0000755000175000001440000000000012675717732017272 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/xpi_wdx/src/xpi_wdx_intf.pas0000644000175000001440000001462012014201074022452 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } unit xpi_wdx_intf; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WdxPlugin; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; implementation uses xpi_def, xpi_io; const IDX_ID = 0; IDX_NAME = 1; IDX_VERSION = 2; IDX_TYPE = 3; IDX_DESCRIPTION = 4; IDX_CREATOR = 5; IDX_DEVELOPER = 6; IDX_CONTRIBUTOR = 7; IDX_TRANSLATOR = 8; IDX_HOMEPAGEURL = 9; IDX_UPDATEURL = 10; IDX_PLATFORM = 11; IDX_COMPATIBILITY = 12; IDX_FIREFOX = 13; IDX_MOZILLA = 14; IDX_SEAMONKEY = 15; IDX_THUNDERBIRD = 16; IDX_FLOCK = 17; IDX_SUNBIRD = 18; IDX_FENNEC = 19; FIELD_COUNT = 20; var CurrentFileName: AnsiString; // Current *.xpi file InstallManifest: TInstallManifest; // Cache for current file function EnsureLength(S: AnsiString; MaxLen: Integer): AnsiString; begin Result := S; if Length(Result) >= MaxLen then begin Result := Copy(Result, 1, MaxLen - 4); Result := Result + '...'; end; end; procedure ContentGetDetectString(DetectString: PAnsiChar; MaxLen: Integer); dcpcall; begin StrPLCopy(DetectString, 'EXT="XPI"', MaxLen) end; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var Field: AnsiString; begin StrPCopy(Units, EmptyStr); if FieldIndex >= FIELD_COUNT then begin Result := FT_NOMOREFIELDS; Exit; end; Result := FT_STRING; case FieldIndex of IDX_ID: Field := 'ID'; IDX_NAME: Field := 'Name'; IDX_VERSION: Field := 'Version'; IDX_TYPE: Field := 'Type'; IDX_DESCRIPTION: Field := 'Description'; IDX_CREATOR: Field := 'Creator'; IDX_DEVELOPER: Field := 'Developer(s)'; IDX_CONTRIBUTOR: Field := 'Contributor(s)'; IDX_TRANSLATOR: Field := 'Translator(s)'; IDX_HOMEPAGEURL: Field := 'Home page'; IDX_UPDATEURL: Field := 'Update URL'; IDX_PLATFORM: Field := 'Platform(s)'; IDX_COMPATIBILITY: Field := 'Compatibility'; IDX_FIREFOX: Field := 'Firefox'; IDX_MOZILLA: Field := 'Mozilla Suite'; IDX_SEAMONKEY: Field := 'SeaMonkey'; IDX_THUNDERBIRD: Field := 'Mozilla Thunderbird'; IDX_FLOCK: Field := 'Flock'; IDX_SUNBIRD: Field := 'Sunbird'; IDX_FENNEC: Field := 'Fennec'; end; StrPLCopy(FieldName, Field, MaxLen); end; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; var Value : AnsiString; begin Result := FT_FILEERROR; if not FileExists(FileName) then Exit; if CurrentFileName <> FileName then begin if not ParseInsatallManifest(FileName, InstallManifest) then Exit; CurrentFileName := FileName; end; if (FieldIndex >= FIELD_COUNT) then begin Result := FT_NOSUCHFIELD; Exit; end; Result := FT_STRING; case FieldIndex of IDX_ID: Value := InstallManifest.ID; IDX_NAME: Value := InstallManifest.Name; IDX_VERSION: Value := InstallManifest.Version; IDX_TYPE: Value := InstallManifest.AddonType; IDX_DESCRIPTION: Value := InstallManifest.Description; IDX_CREATOR: Value := InstallManifest.Creator; IDX_DEVELOPER: Value := InstallManifest.Developer; IDX_CONTRIBUTOR: Value := InstallManifest.Contributor; IDX_TRANSLATOR: Value := InstallManifest.Translator; IDX_HOMEPAGEURL: Value := InstallManifest.HomePageURL; IDX_UPDATEURL: Value := InstallManifest.UpdateURL; IDX_PLATFORM: Value := InstallManifest.TargetPlatform; IDX_COMPATIBILITY: Value := InstallManifest.Compatibility; IDX_FIREFOX: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[0]]; IDX_MOZILLA: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[1]]; IDX_SEAMONKEY: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[2]]; IDX_THUNDERBIRD: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[3]]; IDX_FLOCK: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[4]]; IDX_SUNBIRD: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[5]]; IDX_FENNEC: Value := InstallManifest.TargetApplication.Values[ApplicationList.Names[6]]; else Result := FT_FIELDEMPTY; Exit; end; StrPLCopy(PAnsiChar(FieldValue), EnsureLength(Value, MaxLen), MaxLen); end; initialization CurrentFileName := EmptyStr; InstallManifest := TInstallManifest.Create; finalization FreeAndNil(InstallManifest); end. doublecmd-0.7.1/plugins/wdx/xpi_wdx/src/xpi_wdx.lpr0000644000175000001440000000226212014201074021443 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } library xpi_wdx; {$mode objfpc}{$H+} uses Classes, xpi_wdx_intf, xpi_def, xpi_io { you can add units after this }; exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. doublecmd-0.7.1/plugins/wdx/xpi_wdx/src/xpi_def.pas0000644000175000001440000000547212014201074021373 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } unit xpi_def; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type { TInstallManifest } TInstallManifest = class public ID, Name, Version, Description, Creator, Developer, Contributor, Translator, HomePageURL, UpdateURL, TargetPlatform, Compatibility, AddonType: AnsiString; TargetApplication: TStringList; public constructor Create; destructor Destroy; override; procedure Clear; end; var ApplicationList: TStringList; implementation { TInstallManifest } procedure TInstallManifest.Clear; begin ID := EmptyStr; Name := EmptyStr; Version := EmptyStr; Description := EmptyStr; Creator := EmptyStr; Developer := EmptyStr; Contributor := EmptyStr; Translator := EmptyStr; HomePageURL := EmptyStr; UpdateURL := EmptyStr; TargetPlatform := EmptyStr; Compatibility := EmptyStr; TargetApplication.Clear; end; constructor TInstallManifest.Create; begin TargetApplication:= TStringList.Create; end; destructor TInstallManifest.Destroy; begin FreeAndNil(TargetApplication); inherited Destroy; end; initialization ApplicationList:= TStringList.Create; ApplicationList.Add('{ec8030f7-c20a-464f-9b0e-13a3a9e97384}=fx'); // Firefox ApplicationList.Add('{86c18b42-e466-45a9-ae7a-9b95ba6f5640}=mz'); // Mozilla Suite ApplicationList.Add('{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}=sm'); // SeaMonkey ApplicationList.Add('{3550f703-e582-4d05-9a08-453d09bdfdc6}=mt'); // Mozilla Thunderbird ApplicationList.Add('{a463f10c-3994-11da-9945-000d60ca027b}=fl'); // Flock ApplicationList.Add('{718e30fb-e89b-41dd-9da7-e25a45638b28}=sb'); // Sunbird ApplicationList.Add('{a23983c0-fd0e-11dc-95ff-0800200c9a66}=fc'); // Fennec //ApplicationList.Add(''); finalization FreeAndNil(ApplicationList); end. doublecmd-0.7.1/plugins/wdx/xpi_wdx/src/xpi_wdx.lpi0000644000175000001440000001174612451527526021463 0ustar alexxusers doublecmd-0.7.1/plugins/wdx/xpi_wdx/src/xpi_io.pas0000644000175000001440000001470312014201074021241 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- xpi_wdx is destined to obtainin the information from xpi-files in which extensions and themes for Gecko-based applications are distributed. Copyright (C) 2010 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } unit xpi_io; {$mode objfpc}{$H+} interface uses Classes, SysUtils, xpi_def; function ParseInsatallManifest(FileName: PAnsiChar; out InstallManifest: TInstallManifest): Boolean; implementation uses Unzip, ZipUtils, DOM, XMLRead; function ExtractInstallManifest(FileName: PAnsiChar; out MemoryStream: TMemoryStream): Boolean; var xpiFile: unzFile = nil; rdfInfo: unz_file_info; iError: LongInt; FileBuffer: Pointer = nil; begin Result:= False; xpiFile:= unzOpen(FileName); if Assigned(xpiFile) then try iError:= unzLocateFile(xpiFile, 'install.rdf', 0); if iError <> UNZ_OK then Exit; iError:= unzGetCurrentFileInfo(xpiFile, @rdfInfo, nil, 0, nil, 0, nil, 0); if iError <> UNZ_OK then Exit; FileBuffer:= AllocMem(rdfInfo.uncompressed_size); if FileBuffer = nil then Exit; iError := unzOpenCurrentFile(xpiFile); if iError <> UNZ_OK then Exit; iError := unzReadCurrentFile(xpiFile, FileBuffer, rdfInfo.uncompressed_size); if iError < 0 then Exit; if MemoryStream.Write(FileBuffer^, iError) = iError then Result:= True; iError := unzCloseCurrentFile(xpiFile); finally iError := unzClose(xpiFile); if Assigned(FileBuffer) then FreeMem(FileBuffer); end; end; function AddonType(const sType: AnsiString): AnsiString; var iType: Integer; begin iType:= StrToIntDef(sType, 0); case iType of 2: Result:= 'Extension'; 4: Result:= 'Theme'; 8: Result:= 'Locale'; 16: Result:= 'Plugin'; 32: Result:= 'Multiple Item Package'; else Result:= 'Unknown'; end; end; function AddString(const TargetStr, SourceStr: AnsiString): AnsiString; begin if Length(TargetStr) = 0 then Result:= SourceStr else Result:= TargetStr + ', ' + SourceStr; end; procedure AddApplication(const InstallManifest: TInstallManifest; Node: TDOMNode); var I: LongWord; Application: AnsiString; ID, MinVersion, MaxVersion: AnsiString; begin Node:= Node.FindNode('Description'); if Assigned(Node) then begin for I:= 0 to Node.ChildNodes.Count - 1 do with Node.ChildNodes.Item[I] do begin if nodeName = 'em:id' then ID:= FirstChild.NodeValue else if nodeName = 'em:minVersion' then MinVersion:= FirstChild.NodeValue else if nodeName = 'em:maxVersion' then MaxVersion:= FirstChild.NodeValue end; if InstallManifest.TargetApplication.IndexOfName(ID) < 0 then begin InstallManifest.TargetApplication.Add(ID + '=' + MinVersion + '-' + MaxVersion); Application:= ApplicationList.Values[ID]; if Length(Application) <> 0 then begin InstallManifest.Compatibility:= AddString(InstallManifest.Compatibility, Application); end; end; end; end; function ParseInsatallManifest(FileName: PAnsiChar; out InstallManifest: TInstallManifest): Boolean; var I: LongWord; MemoryStream: TMemoryStream = nil; Doc: TXMLDocument = nil; mainNode: TDOMNode = nil; childNode: TDOMNode = nil; begin Result:= False; MemoryStream:= TMemoryStream.Create; try if ExtractInstallManifest(FileName, MemoryStream) then; begin MemoryStream.Position:= 0; ReadXMLFile(Doc, MemoryStream); if Assigned(Doc.documentElement) then mainNode:= Doc.documentElement.FindNode('Description'); { if not Assigned(mainNode) then mainNode:= Doc.documentElement.FindNode('RDF:Description'); } if Assigned(mainNode) then begin InstallManifest.Clear; for I:= 0 to mainNode.ChildNodes.Count - 1 do begin childNode := mainNode.ChildNodes.Item[I]; if Assigned(childNode) then with childNode do begin if nodeName = 'em:id' then InstallManifest.ID:= FirstChild.NodeValue else if nodeName = 'em:name' then InstallManifest.Name:= FirstChild.NodeValue else if nodeName = 'em:version' then InstallManifest.Version:= FirstChild.NodeValue else if nodeName = 'em:type' then InstallManifest.AddonType:= AddonType(FirstChild.NodeValue) else if nodeName = 'em:description' then InstallManifest.Description:= FirstChild.NodeValue else if nodeName = 'em:creator' then InstallManifest.Creator:= FirstChild.NodeValue else if nodeName = 'em:contributor' then InstallManifest.Contributor:= AddString(InstallManifest.Contributor, FirstChild.NodeValue) else if nodeName = 'em:developer' then InstallManifest.Developer:= AddString(InstallManifest.Developer, FirstChild.NodeValue) else if nodeName = 'em:translator' then InstallManifest.Translator:= AddString(InstallManifest.Translator, FirstChild.NodeValue) else if nodeName = 'em:homepageURL' then InstallManifest.HomePageURL:= FirstChild.NodeValue else if nodeName = 'em:updateURL' then InstallManifest.UpdateURL:= FirstChild.NodeValue else if nodeName = 'em:targetPlatform' then InstallManifest.TargetPlatform:= AddString(InstallManifest.TargetPlatform, FirstChild.NodeValue) else if nodeName = 'em:targetApplication' then AddApplication(InstallManifest, childNode) end; end; Result:= True; end; FreeAndNil(Doc); end; finally FreeAndNil(MemoryStream); end; end; end. doublecmd-0.7.1/plugins/wdx/xpi_wdx/lib/0000755000175000001440000000000012675717732017251 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/xpi_wdx/COPYING.txt0000644000175000001440000001674312014201074020335 0ustar alexxusers GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. doublecmd-0.7.1/plugins/wdx/scripts/0000755000175000001440000000000012675717732016510 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/scripts/simplewdx.lua0000644000175000001440000000141511610606331021204 0ustar alexxusers-- Simple example of how to write wdx-scripts function ContentSetDefaultParams(IniFileName,PlugApiVerHi,PlugApiVerLow) --Initialization code here end first=true; function ContentGetSupportedField(Index) if (not first) then return '','', 0; -- ft_nomorefields end if (first) then first=false; return 'FieldName','', 8; -- FieldName,Units,ft_string end end function ContentGetDefaultSortOrder(FieldIndex) return 1; --or -1 end function ContentGetDetectString() return 'EXT="TXT"'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) return "test"; --return string end --function ContentGetSupportedFieldFlags(FieldIndex) --return 0; -- return flags --end --function ContentStopGetValue(Filename) --end doublecmd-0.7.1/plugins/wdx/scripts/descriptionwdx.lua0000644000175000001440000000220311610606331022232 0ustar alexxusers-- This script reads file descriptions from descript.ion first=true; function ContentGetSupportedField(Index) if (not first) then return '','', 0; -- ft_nomorefields end if (first) then first=false; return 'Description','', 8; -- FieldName,Units,ft_string end end function ContentGetDefaultSortOrder(FieldIndex) return 1; --or -1 end function ContentGetDetectString() return 'EXT="*"'; -- return detect string end function ContentGetValue(FileName, FieldIndex, UnitIndex, flags) if FieldIndex==0 then --Linux paths only local pat="/.*/" i,j=string.find(FileName,pat); if i~=nil then local path=string.sub(FileName,i,j); fn=string.sub(FileName,string.len(path)+1,-1); if fn~=".." then return GetDesc(path,fn); else return ""; end end end end function GetDesc(Path,Name) local f=io.open(Path..'descript.ion',"r"); if not f then return ""; end for line in f:lines() do if string.find(line,Name..' ') then f:close(); return string.sub(line,string.len(Name..' ')+1,-1); end end f:close(); return ""; end doublecmd-0.7.1/plugins/wdx/deb_wdx/0000755000175000001440000000000012675717732016435 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/deb_wdx/src/0000755000175000001440000000000012675717732017224 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/deb_wdx/src/deb_wdx.dpr0000644000175000001440000000126012014201074021314 0ustar alexxusers//*************************************************************** // This file is part of DEBWDX, a content plugin for // Total Commander handling Debian Linux package. // // Copyright (C) 2005 Ralgh Young (yang.guilong@gmail.com) //*************************************************************** // Add some changes for Lazarus and Linux compatibility // // Copyright (C) 2009 Koblov Alexander (Alexx2000@mail.ru) //*************************************************************** library deb_wdx; uses SysUtils, Classes, WdxPlugin, deb_wdx_intf in 'deb_wdx_intf.pas'; exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/dpkg_deb.pas0000644000175000001440000002476312014201074021452 0ustar alexxusersunit dpkg_deb; //Debian Linux package unpacker implemented as TFileStream //v1.0.1 add option ReadAfterDataMember, to avoid unnecessary read after data.tar.gz interface uses Classes; const MEMBER_CONTROL = 1; MEMBER_DATA = 2; type ar_hdr = record //converted from /usr/include/ar.h ar_name: array [0..Pred(16)] of char; (* name *) ar_date: array [0..Pred(12)] of char; (* modification time *) ar_uid: array [0..Pred(6)] of char; (* user id *) ar_gid: array [0..Pred(6)] of char; (* group id *) ar_mode: array [0..Pred(8)] of char; (* octal file permissions *) ar_size: array [0..Pred(10)] of char; (* size in bytes *) ar_fmag: array [0..Pred(2)] of char; (* consistency check *) end; TDebianPackage = class private //FMemberList: array of ar_hdr; FPkgVersion: string; //FDebStrm: TFileStream; FCheckHeader : boolean; //constructor Create; override; //destructor Destory; override; FFileName : string; function DoCheckHeader(arh: ar_hdr; infobuf: PChar; memberlen: integer): boolean; //function GetFileList: TStrings; function ParseHeaderLength(inh: PChar; Len: integer): integer; function SkipMember(Strm: TStream; memberlen: integer): boolean; public FMemberList: array of ar_hdr; ReadAfterDataMember: boolean; constructor Create; function ReadFromFile(DebPkgFile: string): integer; function ExtractMemberToStream(MemberIdx: integer; OutputStrm: TStream): boolean; function ExtractMemberToFile(idx: integer; OutputFile: string): boolean; published property PkgVersion: string read FPkgVersion; property CheckHeader: boolean read FCheckHeader write FCheckHeader default false; //property MemberList: array of ar_hdr read FMemberList; default; //property FileList: TStrings read GetFileList; //property GetControlFile: //need tar+gzip to implement this end; implementation uses SysUtils{$IFDEF GDEBUG}, dbugintf {$ENDIF}; const (* Pre-4BSD archives had these magic numbers in them. *) OARMAG1 = $FF6D; OARMAG2 = $FF65; ARMAG = '!'#10; (* ar "magic number" *) SARMAG = 8; (* strlen(ARMAG); *) AR_EFMT1 = '#1/'; (* extended format #1 *) ARFMAG = '`'#10''; (* static void skipmember(FILE *ar, const char *fn, long memberlen) { int c; memberlen += (memberlen&1); while (memberlen > 0) { if ((c= getc(ar)) == EOF) readfail(ar,fn,"skipped member data"); memberlen--; } } *) function TDebianPackage.SkipMember(Strm: TStream; memberlen: integer): boolean; begin Result := false; Inc(memberlen, (memberlen and 1)); if Strm.Position + memberlen > Strm.Size then exit; Strm.Seek(memberlen, soFromCurrent); Result := true; end; //return the number of members found function TDebianPackage.ReadFromFile(DebPkgFile: string): integer; var debStrm: TFileStream; MagicHeaderBuf: array[0..10] of char; //memberbuf: PChar; verinfobuf : array [0..100] of char; arh: ar_hdr; memberlen, memberidx: integer; n: integer; begin Result := 0; SetLength(FMemberList, 0); //if not Assigned(DebStrm) then raise Exception.Create('Stream not assigned'); if not FileExists(DebPkgFile) then raise Exception.Create('File not exists!'); FFileName := DebPkgFile; debStrm := TFileStream.Create(DebPkgFile, fmOpenRead or fmShareDenyWrite); try //debStrm.LoadFromFile(DebPkgFile); if DebStrm.Size < sizeof(ARMAG) + 2*sizeof(ar_hdr) then raise Exception.Create('Size of file is too small. maybe its not a debian package'); DebStrm.Seek(0, soFromBeginning); //rewind DebStrm.Read(MagicHeaderBuf, SARMAG); if StrLComp(MagicHeaderBuf, ARMAG, SARMAG)=0 then //if MagicHeaderBuf='!\n' begin memberidx:=0; repeat n := DebStrm.Read(arh, sizeof(arh)); if n=0 then break else if n0 then raise Exception.Create('bad magic at end of first header'); memberlen := ParseHeaderLength(arh.ar_size, sizeof(arh.ar_size)); if memberlen<0 then raise Exception.Create('corrputed package'); //ohshit("file `%.250s' is corrupt - negative member length %ld",debar,memberlen); //save header (member info) into list SetLength(FMemberList, memberidx+1); FMemberList[memberidx] := arh; Inc(memberidx); if (memberidx=0) and FCheckHeader then //package header begin //GetMem(memberbuf, memberlen + 1); try //if DebStrm.Read(memberbuf, memberlen + (memberlen and 1))=DebStrm.Size); Result := memberidx + 1; end else if StrLComp(MagicHeaderBuf,'!',7)=0 then raise Exception.Create('Bad magic header. maybe it''s not a debian package') //"file looks like it might be an archive which has been\n" //"corrupted by being downloaded in ASCII mode.\n" else if StrLComp(MagicHeaderBuf,'0.93',4)=0 then raise Exception.Create('Old format debian package not supported') else raise Exception.Create('Bad magic header. maybe it''s not a debian package'); finally DebStrm.Free; end; end; function TDebianPackage.ExtractMemberToStream(MemberIdx: integer; OutputStrm: TStream): boolean; var idx, memberlen: integer; DebStrm : TFileStream; arh: ar_hdr; begin Result := false; if not Assigned(OutputStrm) then exit; if MemberIdx > High(FMemberList) then exit; DebStrm := TFileStream.Create(FFileName, fmOpenRead or fmShareDenyWrite); try DebStrm.Seek(SARMAG, soFromBeginning); //rewind to the first member idx := 0; while(idx<=memberidx) do begin arh := FMemberList[idx]; if DebStrm.Read(arh, sizeof(arh))High(FMemberList) then exit; AFileStrm := TFileStream.Create(OutputFile, fmCreate or fmOpenWrite or fmShareDenyWrite); try Result := ExtractMemberToStream(idx, AFileStrm); finally AFileStrm.Free; end; end; function TDebianPackage.ParseHeaderLength(inh: PChar; Len: integer): integer; (*static unsigned long parseheaderlength(const char *inh, size_t len, const char *fn, const char *what) { char lintbuf[15]; unsigned long r; char *endp; if (memchr(inh,0,len)) ohshit("file `%.250s' is corrupt - %.250s length contains nulls",fn,what); assert(sizeof(lintbuf) > len); memcpy(lintbuf,inh,len); lintbuf[len]= ' '; *strchr(lintbuf,' ')= 0; r= strtoul(lintbuf,&endp,10); if ( *endp ) ohshit("file `%.250s' is corrupt - bad digit (code %d) in %s",fn,*endp,what); return r; *) var lintbuf: array[0..14] of char; begin if len> sizeof(lintbuf) then raise Exception.Create('ParseMemberLength'); StrLCopy(lintbuf, inh, len); lintbuf[len] := #0; StrScan(lintbuf, ' ')^ := #0; Result := StrToInt(StrPas(lintbuf)); end; //return the length of control.tar.gz (*function TDebianPackage.CheckControlFile(DebStrm: TMemoryStream; arh: ar_hdr; memberlen: integer; OutputFile: String): integer; begin end; *) //if any error encounted, return false function TDebianPackage.DoCheckHeader(arh: ar_hdr; infobuf: PChar; memberlen: integer): boolean; const DebianSign = 'debian-binary '; var verinfobuf: array[0..20] of char; cur: PChar; begin Result := false; if StrLComp(arh.ar_name, DebianSign, sizeof(arh.ar_name))<>0 then exit; //ohshit("file `%.250s' is not a debian binary archive (try dpkg-split?)",debar); //memberlen = ParseArchiveLength(arh.ar_size,sizeof(arh.ar_size)); infobuf[memberlen] := #0; cur := StrScan(infobuf, #10); if (cur=nil) then exit; //ohshit("archive has no newlines in header"); cur^ := #0; cur := StrScan(infobuf,'.'); if (cur=nil) then exit; //ohshit("archive has no dot in version number"); cur^ := #0; if (StrComp(infobuf,'2')<>0) then exit; //ohshit("archive version %.250s not understood, get newer " BACKEND, infobuf); cur^ := '.'; //restore version delimiter //StrLCopy(verinfobuf, infobuf, min(sizeof(verinfobuf)-1, memberlen); //got the package version info StrLCopy(verinfobuf, infobuf, sizeof(verinfobuf)-1); verinfobuf[sizeof(verinfobuf)-1] := #0; FPkgVersion := StrPas(verinfobuf); Result := true; end; constructor TDebianPackage.Create; begin CheckHeader := True; ReadAfterDataMember := false; end; end.doublecmd-0.7.1/plugins/wdx/deb_wdx/src/debunpak.pas0000644000175000001440000001244712014201074021500 0ustar alexxusersunit debunpak; {$mode delphi}{$H+} interface uses SysUtils {$IFDEF GDEBUG} , dbugintf {$ENDIF}; //extract `control' in control.tar.gz function Deb_ExtractCtrlInfoFile(debfile: string; var descfile: string): boolean; //list out files int data.tar.gz function Deb_ListFileInDataMember(debfile: string; var FileList: string): integer; implementation uses dpkg_deb, minigzip, tarfile, {$IFDEF USE_LIBTAR}libtar{$ELSE}untar, classes{$ENDIF}; var DebPkg: TDebianPackage; //dpkg_deb // TarArch: TTarArchive; //libtar TempDir: array[0..MAX_PATH] of char; //member: 1: control.tar.gz, 2: data.tar.gz //return: full path of extracted file (${TEMP}\debXXXX\foo.tar.gz, function UnpackDebFile(DebFile: string; memberidx: integer): string; var TempFile: array[0..MAX_PATH] of char; FileSource, FileDestination: String; begin {$IFDEF GDEBUG} SendMethodEnter('UnpackDebFile: memberidx='+IntToStr(memberidx)); {$ENDIF} Result := ''; if (memberidx<>MEMBER_CONTROL) and (memberidx<>MEMBER_DATA) then exit; //error repeat GetTempFileName(TempDir, 'deb', random(1000), TempFile); StrLCopy(TempFile, PChar(ChangeFileExt(StrPas(TempFile), '.tar.gz')), MAX_PATH); until not FileExists(StrPas(TempFile)); {$IFDEF GDEBUG} SendDebug('TempFile=' + TempFile); {$ENDIF} DebPkg := TDebianPackage.Create; if DebPkg.ReadFromFile(DebFile) < 2 then exit; //a debian package must have control.tar.gz and data.tar.gz //extract 'control.tar.gz' if not DebPkg.ExtractMemberToFile(memberidx, StrPas(TempFile)) then exit; FileSource := StrPas(TempFile); // X:\some\where\foo.tar.gz FileDestination := StrPas(TempDir) + ChangeFileExt(ExtractFileName(FileSource), ''); // ${TempDir}\foo.tar file_uncompress(FileSource); if not FileExists(FileDestination) then begin DeleteFile(TempFile); //foo.tar.gz Exit; end; Result := FileDestination; DeleteFile(PChar(FileSource)); {$IFDEF GDEBUG} SendMethodExit('UnpackDebFile'); {$ENDIF} end; //function Deb_ExtractDataFileList(debfile: string; var FileList: string): integer; function Deb_ListFileInDataMember; var tarfilename: string; fname : string; fsize : integer; TarFile: TTarFile; begin tarfilename := UnpackDebFile(debfile, MEMBER_DATA); {$IFDEF GDEBUG} SendDebug('tarfilename=' + tarfilename); {$ENDIF} FileList:=''; Result := 0; if not FileExists(tarfilename) then exit; TarFile := TTarFile.Create(tarfilename); try while not TarFile.Eof do begin fname := TarFile.GetNextFilename; fsize := TarFile.GetNextSize; if fsize>0 then begin TarFile.GetNextDate; TarFile.SkipFile; end; if FileList='' then FileList := fname else FileList := FileList + #13#10 + fname; Inc(Result); end; finally TarFile.Free; DeleteFile(PChar(tarfilename)); end; end; //function ExtractDebInfoFile(debfile: string; var descfile: string): boolean; //debfile: full path of .deb file to extract member from //descfile: [out] full path of extracted control file (${TEMP}\debXXXX\control) // you should remove this file (and the temp folder ${TEMP}\debXXXX after use. //return: succeed or not function Deb_ExtractCtrlInfoFile; var tarfilename: string; {$IFDEF USE_LIBTAR} TA: TTarArchive; DirRec: TTarDirRec; {$ELSE USE_TARFILE} Untar1: TUntar; strlst: TStringList; {$ENDIF} begin Result := false; {$IFDEF GDEBUG} SendMethodEnter('ExtractDebInfoFile'); {$ENDIF} tarfilename := UnpackDebFile(debfile, MEMBER_CONTROL); {$IFDEF GDEBUG} SendDebug('tarfilename=' + tarfilename); {$ENDIF} if not FileExists(tarfilename) then exit; {$IFDEF USE_LIBTAR} //libtar seems to be bad descfile := StrPas(TempDir) + 'control.txt'; {$IFDEF GDEBUG} SendDebug('descfile=' + descfile); {$ENDIF} TA := TTarArchive.Create(tarfilename); TA.Reset; while TA.FindNext(DirRec) do begin {$IFDEF GDEBUG} SendDebug('DirRec.Name=' + DirRec.Name); {$ENDIF} if (DirRec.Name = './control') or (DirRec.Name = '.\control') or (DirRec.Name = 'control') then begin TA.ReadFile(descfile); break; end; end; TA.Free; {$ELSE} Untar1 := TUntar.Create(nil); Untar1.FileSource := tarfilename; //Untar1.UnpackPath := TempDir + 'deb4wii'; Untar1.UnpackPath := TempDir + ChangeFileExt(ExtractFileName(Untar1.FileSource), ''); // ${TempDir}\foo {$IFDEF GDEBUG} SendDebug('UnpackPath=' + Untar1.UnpackPath); {$ENDIF} strlst := TStringList.Create; strlst.Add('control'); strlst.Add('./control'); strlst.Add('.\control'); Untar1.OverwriteMode := omReplace; //shit! Untar1.UntarSelected(strlst); //Untar1.Untar; //untar all descfile := IncludeTrailingBackSlash(Untar1.UnpackPath) + 'control'; strlst.Free; Untar1.Free; {$ENDIF} DeleteFile(PChar(tarfilename)); //foo.tar Result := true; {$IFDEF GDEBUG} SendMethodExit('ExtractDebInfoFile'); {$ENDIF} (* filelist := ''; TA := TarArchive.Create('data.tar.gz'); WHILE TA.FindNext(DirRec) DO BEGIN filelist := filelist + DirRec.Name + #13#10; end; TA.Free; *) end; initialization DebPkg := TDebianPackage.Create; TempDir:= GetTempDir; Randomize; finalization DebPkg.Free; // TarArc.Free; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/minigzip.pas0000644000175000001440000001144412014201074021531 0ustar alexxusers{ minigzip.c -- simulate gzip using the zlib compression library Copyright (C) 1995-1998 Jean-loup Gailly. minigzip is a minimal implementation of the gzip utility. This is only an example of using zlib and isn't meant to replace the full-featured gzip. No attempt is made to deal with file systems limiting names to 14 or 8+3 characters, etc... Error checking is very limited. So use minigzip only for testing; use gzip for the real thing. On MSDOS, use only on file names without extension or in pipe mode. Pascal tranlastion based on code contributed by Francisco Javier Crespo Copyright (C) 1998 by Jacques Nomssi Nzali For conditions of distribution and use, see copyright notice in readme.txt } unit minigzip; {$mode fpc}{$H+} interface uses gzio; procedure gz_compress (var infile:file; outfile:gzFile); procedure gz_uncompress (infile:gzFile; var outfile:file); procedure file_compress (filename:string; mode:string); procedure file_uncompress (filename:string); implementation const BUFLEN = 16384 ; GZ_SUFFIX = '.gz' ; {$DEFINE MAXSEF_64K} var buf : packed array [0..BUFLEN-1] of byte; { Global uses BSS instead of stack } prog : string; { ERROR ===================================================================== Display error message and exit ============================================================================} procedure error (msg:string); begin writeln (prog,': ',msg); halt(1); end; { GZ_COMPRESS =============================================================== Compress input to output then close both files ============================================================================} procedure gz_compress (var infile:file; outfile:gzFile); var len : cardinal; ioerr : integer; err : integer; begin while true do begin {$I-} blockread (infile, buf, BUFLEN, len); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('read error: ',ioerr); halt(1); end; if (len = 0) then break; if (gzwrite (outfile, @buf, len) <> len) then error (gzerror (outfile, err)); end; {WHILE} close (infile); if (gzclose (outfile) <> 0{Z_OK}) then error ('gzclose error'); end; { GZ_UNCOMPRESS ============================================================= Uncompress input to output then close both files ============================================================================} procedure gz_uncompress (infile:gzFile; var outfile:file); var len : integer; written : cardinal; ioerr : integer; err : integer; begin while true do begin len := gzread (infile, @buf, BUFLEN); if (len < 0) then error (gzerror (infile, err)); if (len = 0) then break; {$I-} blockwrite (outfile, buf, len, written); {$I+} if (written <> len) then error ('write error'); end; {WHILE} {$I-} close (outfile); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('close error: ',ioerr); halt(1); end; if (gzclose (infile) <> 0{Z_OK}) then error ('gzclose error'); end; { FILE_COMPRESS ============================================================= Compress the given file: create a corresponding .gz file and remove the original ============================================================================} procedure file_compress (filename:string; mode:string); var infile : file; outfile : gzFile; ioerr : integer; outname : string; begin Assign (infile, filename); {$I-} Reset (infile,1); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('open error: ',ioerr); halt(1); end; outname := filename + GZ_SUFFIX; outfile := gzopen (outname, mode); if (outfile = NIL) then begin writeln (prog,': can''t gzopen ',outname); halt(1); end; gz_compress(infile, outfile); erase (infile); end; { FILE_UNCOMPRESS =========================================================== Uncompress the given file and remove the original ============================================================================} procedure file_uncompress (filename:string); var inname : string; outname : string; infile : gzFile; outfile : file; ioerr : integer; len : integer; begin len := Length(filename); if (copy(filename,len-2,3) = GZ_SUFFIX) then begin inname := filename; outname := copy(filename,0,len-3); end else begin inname := filename + GZ_SUFFIX; outname := filename; end; infile := gzopen (inname, 'r'); if (infile = NIL) then begin writeln (prog,': can''t gzopen ',inname); halt(1); end; Assign (outfile, outname); {$I-} Rewrite (outfile,1); {$I+} ioerr := IOResult; if (ioerr <> 0) then begin writeln ('open error: ',ioerr); halt(1); end; gz_uncompress (infile, outfile); { erase (infile); } end; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/tarfile.pas0000644000175000001440000001354012014201074021330 0ustar alexxusersunit tarfile; interface uses classes, sysutils, math; const EXP_FILENAME = 0; EXP_SIZE = 1; EXP_DATE = 2; EXP_BODY = 3; EXP_ERROR = 4; EXP_EOF = 5; SECSIZE = 512; // SECSPERBLOCK = 120; BUFSIZE = SECSIZE; // * SECSPERBLOCK; type TBuffer = Array [0..Pred(BUFSIZE)] Of byte; TDateTimeRec = record sec : integer; min : integer; hour : integer; day : integer; month : integer; year : integer; end; TTarFile = class private FTarF : TFileStream; FExpecting : byte; FName : string; FBuffer : TBuffer; FLen : longint; FUnreadSec : integer; function CrackUnixDateTime( UnixDate : longint) : TDateTimeRec; procedure AdjustFilename( var filename : string); public constructor Create( filename : string); destructor Free; function EOF : boolean; function Progress : integer; function GetNextFilename : string; function GetNextSize : longint; function GetNextDate : TDateTimeRec; function ReadFile( var buffer; maximum : longint) : longint; Procedure SkipFile; protected end; implementation // ************************************************** // Private part // ************************************************** {$WRITEABLECONST ON} function TTarFile.CrackUnixDateTime( UnixDate : longint) : TDateTimeRec; Const monlen : Array [1..12] Of byte = (31,28,31,30,31,30,31,31,30,31,30,31); var dt : TDateTimeRec; begin dt.sec := UnixDate mod 60; UnixDate := UnixDate div 60; dt.min := UnixDate mod 60; UnixDate := UnixDate div 60; dt.hour := UnixDate mod 24; UnixDate := UnixDate div 24; dt.year := 1970; while ((UnixDate>=365) and (dt.year mod 4 <> 0)) or ((UnixDate>=366) and (dt.year mod 4 = 0 )) do begin if dt.year mod 4 = 0 then UnixDate := UnixDate - 1; UnixDate := UnixDate - 365; Inc(dt.year) end; dt.month := 1; if dt.year mod 4 = 0 then Inc(monlen[2]); while UnixDate>=monlen[dt.month] do begin UnixDate := UnixDate - monlen[dt.month]; Inc(dt.month) end; if dt.year mod 4 = 0 then Dec(monlen[2]); dt.day := UnixDate + 1; Result := dt end; Procedure TTarFile.AdjustFilename(Var filename : string); Const badletter : Set Of char = ['+',' ',':','<','>','|']; Var i : byte; Begin { openfile } For i := Length(filename) DownTo 1 Do Begin If filename[i] = '/' Then filename[i] := '\'; If filename[i] In badletter Then filename[i] := '_'; End end; // ************************************************** // Public part // ************************************************** constructor TTarFile.Create( filename : string); begin FTarF := TFileStream.Create( filename, fmOpenRead or fmShareDenyWrite); end; destructor TTarFile.Free; begin FTarF.Free; end; function TTarFile.EOF : boolean; begin EOF := FTarF.Size = FTarF.Position; end; function TTarFile.Progress : integer; begin Progress := Floor((FTarF.Position / FTarF.Size) * 100) end; function TTarFile.GetNextFilename : string; var iread : integer; i : integer; begin FName := ''; if (not(EOF) and (FExpecting = EXP_FILENAME)) then begin iread := FTarF.Read( FBuffer, SECSIZE); If iread <> SECSIZE Then FExpecting := EXP_ERROR else begin i := 0; While (FBuffer[i] <> 0) And (i < 254) Do begin FName := FName + char(FBuffer[i]); Inc(i); end; if i > 0 then begin FExpecting := EXP_SIZE; AdjustFilename( FName) end else begin i := 0; // Lazy evaluation needed to prvent reading from FBuffer[SECSIZE] while (i < SECSIZE) and (FBuffer[i]=0) do Inc(i); if i < SECSIZE then FExpecting := EXP_FILENAME else begin FExpecting := EXP_EOF; FTarF.Position := FTarF.Size end end end end; Result := FName; end; function TTarFile.GetNextSize : longint; var i : byte; begin FLen := 0; GetNextSize := 0; if (not(EOF) and (FExpecting = EXP_SIZE)) then begin For i := $7C To $86 Do If (FBuffer[i] >= 48) And (FBuffer[i] <= 55) Then FLen := 8*FLen + FBuffer[i] - 48; if FLen > 0 then FExpecting := EXP_DATE else FExpecting := EXP_FILENAME; GetNextSize := FLen end; FUnreadSec := (SECSIZE - (FLen mod SECSIZE)) mod SECSIZE end; function TTarFile.GetNextDate : TDateTimeRec; var UnixDate : longint; i : byte; begin UnixDate := 0; if FExpecting = EXP_DATE then begin For i := $88 To $92 Do If (FBuffer[i] >= 48) And (FBuffer[i] <= 55) Then UnixDate := 8*UnixDate + FBuffer[i] - 48; FExpecting := EXP_BODY end; Result := CrackUnixDateTime( UnixDate) end; function TTarFile.ReadFile( var buffer; maximum : longint) : longint; var iread : longint; buff : TBuffer; begin iread := 0; if (FLen > FTarF.Size - FTarF.Position) or (FExpecting <> EXP_BODY) then FExpecting := EXP_ERROR else begin iread := FTarF.Read( buffer, min(maximum,FLen)); FLen := FLen - iread; if FLen = 0 then begin FExpecting := EXP_FILENAME; if FUnreadSec > 0 then FTarF.Read( buff, FUnreadSec) end end; ReadFile := iread end; procedure TTarFile.SkipFile; begin if (FLen > FTarF.Size - FTarF.Position) or (FExpecting <> EXP_BODY) then FExpecting := EXP_ERROR else begin FTarF.Position := FTarF.Position + FLen + FUnreadSec; FExpecting := EXP_FILENAME end end; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/deb_wdx_intf.pas0000644000175000001440000001357512014201074022346 0ustar alexxusers//*************************************************************** // This file is part of DEBWDX, a content plugin for // Total Commander handling Debian Linux package. // // Copyright (C) 2005 Ralgh Young (yang.guilong@gmail.com) //*************************************************************** // This program is free software; you can redistribute it and/or modify it // under the GPL. // // Only version 2.0 package is supported, and I would not to add support for // old format since I haven't old packages. But if you have some package of old format, // and you're interested in, you're welcomed to modify the source by yourself. // FYI: refer to dpkg-deb/extract.c in dpkg-deb's source, // and search '0.93' in function extracthalf, you're find something useful. {$A-,I-} //no alignment, no I/O error autochecking unit deb_wdx_intf; {$mode delphi}{$H+} {$include calling.inc} interface uses Classes, WdxPlugin; procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); dcpcall; function ContentGetSupportedField(FieldIndex:integer;FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; implementation uses SysUtils{$IFDEF GDEBUG}, DbugIntf{$ENDIF}, debunpak; var IDX_PACKAGE, IDX_VERSION, IDX_SECTION, IDX_PRIORITY, IDX_ARCH, IDX_DEPENDS, IDX_RECOMMENDS, IDX_SUGGESTS, IDX_CONFLICTS, IDX_INSTALLED_SIZE, IDX_MAINTAINER, IDX_SOURCE, IDX_SUMMARY, IDX_DESCRIPTION : integer; CurrentPackageFile: String; FieldList : TStrings; FileInfo : TStrings; procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); begin StrPCopy(DetectString, 'EXT="DEB"'); end; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; begin StrPCopy(Units, ''); if FieldIndex =IDX_INSTALLED_SIZE then begin StrPCopy(FieldName, FieldList.Strings[FieldIndex]); StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); Result := FT_NUMERIC_64; end else if FieldIndex < FieldList.Count then begin StrPCopy(FieldName, FieldList.Strings[FieldIndex]); Result := FT_STRING; end else Result := FT_NOMOREFIELDS; end; {$WRITEABLECONST ON} function ContentGetValue(FileName:pchar; FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; function EnsureLength(S: string; nMaxlen: integer): string; begin Result := S; if length(Result)>=nMaxlen then begin Result := Copy(Result, 1, nMaxlen-4); Result := Result + '...'; end; end; const DescTmpFile: String = ''; var Field, Value : String; i, where_start_desc : integer; size : int64; begin Result := FT_FILEERROR; if not FileExists(FileName) then exit; if CurrentPackageFile<>FileName then begin if FileExists(DescTmpFile) then begin DeleteFile(DescTmpFile); RemoveDir(ExtractFileDir(DescTmpFile)); end; if not Deb_ExtractCtrlInfoFile(FileName, DescTmpFile) then exit; if not FileExists(DescTmpFile) then exit; FileInfo.Clear; FileInfo.LoadFromFile(DescTmpFile); CurrentPackageFile := FileName; end {$IFDEF GDEBUG} else SendDebug('Cached info reused for '+FileName); {$ENDIF}; if (FieldIndex>=FieldList.Count) then begin Result := FT_NOSUCHFIELD; exit; end; if FieldIndex<>IDX_DESCRIPTION then begin if FieldIndex=IDX_SUMMARY then //for 'Summary', return the value of Description Field := 'Description' else Field := FieldList.Strings[FieldIndex]; Value := ''; Value := FileInfo.Values[Field]; if Value='' then begin Result := FT_FIELDEMPTY; exit; end; if FieldIndex=IDX_INSTALLED_SIZE then begin size := StrToInt64Def(Value, -1); case UnitIndex of 0: //bytes size := size * 1024; // 1: //kbytes // pass 2: //mbytes size := size div 1024; 3: //gbytes size := size div (1024 * 1024); end; Move(size, FieldValue^, sizeof(size)); Result := FT_NUMERIC_64; end else //other fields, just string begin StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); Result := FT_STRING; end; end else //IDX_DESCRIPTION, begin Value := ''; where_start_desc := -1; for i:=0 to FileInfo.Count-1 do begin if FileInfo.Names[i]='Description' then begin where_start_desc := i; break; end; end; if where_start_desc>=0 then begin for i:=where_start_desc+1 to FileInfo.Count-1 do begin Value := Value + FileInfo.Strings[i]; end; StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); //Result := FT_FULLTEXT; Result := FT_STRING; end; end end; initialization FileInfo := TStringList.Create; FileInfo.NameValueSeparator := ':'; CurrentPackageFile := ''; FieldList := TStringList.Create; IDX_PACKAGE := FieldList.Add('Package'); IDX_VERSION := FieldList.Add('Version'); IDX_SECTION := FieldList.Add('Section'); IDX_PRIORITY := FieldList.Add('Priority'); IDX_ARCH := FieldList.Add('Architecture'); IDX_DEPENDS := FieldList.Add('Depends'); IDX_RECOMMENDS:= FieldList.Add('Recommends'); IDX_SUGGESTS := FieldList.Add('Suggests'); IDX_CONFLICTS := FieldList.Add('Conflicts'); IDX_INSTALLED_SIZE := FieldList.Add('Installed-Size'); IDX_MAINTAINER := FieldList.Add('Maintainer'); IDX_SOURCE := FieldList.Add('Source'); IDX_SUMMARY := FieldList.Add('Summary'); IDX_DESCRIPTION := FieldList.Add('Description'); finalization FileInfo.Free; FieldList.Free; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/untar.pas0000644000175000001440000002250612014201074021035 0ustar alexxusersunit UnTar; {$mode delphi}{$H+} interface uses SysUtils, Classes, {$IFDEF ABOUTDLG}DsgnIntf, {$ENDIF}tarfile; CONST BUFSIZE = 512 * 128; // 512 = SECSIZE in unit tarfile type TZeroHundred = 0..100; TOverwriteMode = ( omSkip, omRename, omReplace ); TNextFile = record name : string; size : longint; timestamp : TDateTime end; {$IFDEF ABOUTDLG} TAboutProperty = class(TPropertyEditor) public procedure Edit; override; function GetAttributes: TPropertyAttributes; override; function GetValue: string; override; end; {$ENDIF} TUnTar = class(TComponent) private { Private declarations } {$IFDEF ABOUTDLG} FAbout : TAboutProperty; {$ENDIF} FOnNextFile : TNotifyEvent; FNextFile : TNextFile; FCreateEmptyDir: boolean; FOnExtractOverwrite : TNotifyEvent; FOnProgress : TNotifyEvent; FProgress : integer; FProgressStep : TZeroHundred; FOverwriteMode : TOverwriteMode; FOverwriteThisTime : TOverwriteMode; FOverwriteFilename : String; FFileSource : string; FUnpackPath : string; FNewFileName : string; procedure DoProgress( tarfile : TTarFile); procedure CreateNextFile( tarfile: TTarfile); function TranslateDate(dt: TDateTimeRec): longint; protected { Protected declarations } procedure DoOnNextFile; virtual; procedure DoOnExtractOverwrite; virtual; procedure DoOnProgress; virtual; public { Public declarations } constructor Create( AOwner: TComponent); override; // destructor Free; procedure UnTar; procedure UnTarSelected( list: TStringList); procedure GetInfo; property Progress : integer read FProgress; property NextFile : TNextfile read FNextFile; property OverwriteThisTime : TOverwriteMode read FOverwriteThisTime write FOverwriteThisTime; property OverwriteFilename : String read FOverwriteFilename write FOverwriteFilename; published { Published declarations } {$IFDEF ABOUTDLG} property About: TAboutProperty read FAbout write FAbout; {$ENDIF} property FileSource : String read FFileSource write FFileSource; property UnpackPath : String read FUnpackPath write FUnpackPath; property ProgressStep : TZeroHundred read FProgressStep write FProgressStep; property OnProgress : TNotifyEvent read FOnProgress write FOnProgress; Property OverwriteMode : TOverwriteMode read FOverwriteMode write FOverwriteMode; Property CreateEmptyDir: boolean read FCreateEmptyDir write FCreateEmptyDir; Property OnExtractOverwrite : TNotifyEvent read FOnExtractOverwrite write FOnExtractOverwrite; Property OnNextFile : TNotifyEvent read FOnNextFile write FOnNextFile; end; procedure Register; implementation {$IFDEF ABOUTDLG}uses utils;{$ENDIF} {$IFDEF ABOUTDLG} procedure TAboutProperty.Edit; var utils : TUtils; begin ShowMessage(utils.CreateAboutMsg('DelphiUnTar')) end; function TAboutProperty.GetAttributes: TPropertyAttributes; begin Result := [paMultiSelect, paDialog, paReadOnly]; end; function TAboutProperty.GetValue: string; begin Result := 'DelphiUnTar'; end; {$ENDIF} constructor TUnTar.Create( AOwner: TComponent); begin inherited Create( AOwner); FFileSource := ''; FUnpackPath := ''; FProgressStep := 0; FCreateEmptyDir := false; //FOverwriteMode := omRename FOverwriteMode := omReplace; end; procedure TUnTar.DoOnNextFile; begin if Assigned (FOnNextFile) then FOnNextFile (self) end; procedure TUnTar.DoOnExtractOverwrite; begin if Assigned (FOnExtractOverwrite) then FOnExtractOverwrite (self) end; procedure TUnTar.DoOnProgress; begin if Assigned (FOnProgress) then FOnProgress (self) end; procedure TUnTar.DoProgress( tarfile : TTarFile); var dummy : integer; begin if FProgressStep > 0 then begin dummy := tarfile.Progress; if (dummy >= FProgress + FProgressStep) or (dummy = 100) then begin FProgress := dummy - (dummy mod FProgressStep); if dummy = 100 then FProgress := dummy; DoOnProgress end end end; function TUnTar.TranslateDate( dt : TDateTimeRec) : longint; begin Result := DateTimeToFileDate( EncodeDate( dt.year, dt.month, dt.day) + EncodeTime( dt.hour, dt.min, dt.sec, 0)) end; procedure TUnTar.CreateNextFile( tarfile: TTarfile); type TBuffer = Array [0..Pred(BUFSIZE)] Of byte; var outfiledir: string; outf: TFileStream; iread: longint; buffer: TBuffer; begin outfileDir := ExtractFileDir(FNextFile.name); // Check if sub-dir exists, if not create if not(DirectoryExists(outfileDir)) and (outfileDir<>'') then begin outfileDir := ExpandFileName(outfileDir); ForceDirectories(outfileDir); end; if outfileDir <> '' then outfileDir := outfileDir + PathDelim; FNewFilename := outfileDir+ExtractFileName(FNextFile.name); FOverwriteThisTime := omRename; while (FileExists( FNewFilename)) and (FOverwriteMode = omRename)and (FOverwriteThisTime = omRename) do begin FOverwriteFilename := ''; // Raise event to ask what should be done DoOnExtractOverwrite; if (FOverwriteThisTime = omRename) and (FOverwriteFilename <> '') then FNewFilename := FOverwriteFilename end; if (not FileExists( FNewFilename)) or (FOverwriteMode = omReplace) or (FOverwriteThisTime = omReplace) then begin outf := TFileStream.Create(FNewFilename, fmCreate or fmShareDenyWrite); while FNextFile.size > 0 do begin iread := tarfile.ReadFile( buffer, BUFSIZE); outf.Write( buffer, iread); FNextFile.size := FNextFile.size - iread; DoProgress(tarfile) end; FileSetDate(outf.Handle, DateTimeToFileDate(FNextFile.timestamp)); outf.Free end else begin tarfile.SkipFile; // We do not need the file DoProgress(tarfile) end end; procedure TUnTar.UnTar; var oldDir, outfileDir : string; tarfile : TTarFile; begin FProgress := 0; oldDir := getCurrentDir; // check if destination-path exists if FUnpackPath <> '' then begin if not(DirectoryExists(FUnpackPath)) then ForceDirectories(FUnpackPath); setCurrentDir(FUnpackPath); end; tarfile := TTarFile.Create( FFileSource); DoProgress(tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; DoProgress( tarfile); outfileDir := ExtractFileDir(FNextFile.name); if FCreateEmptyDir then // Check if sub-dir exists, if not create if not(DirectoryExists(outfileDir)) and (outfileDir<>'') then begin outfileDir := ExpandFileName(outfileDir); ForceDirectories(outfileDir); end; FNextFile.size := tarfile.GetNextSize; if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); DoOnNextFile; // raise event that we start with new file // Info is now read and in FNextFile // Create the file CreateNextFile(tarfile) end end; DoProgress( tarfile); tarfile.Free; setCurrentDir(oldDir) end; procedure TUnTar.UnTarSelected( list: TStringList); var oldDir, outfileDir : string; tarfile : TTarFile; begin FProgress := 0; oldDir := getCurrentDir; // check if destination-path exists if FUnpackPath <> '' then begin if not(DirectoryExists(FUnpackPath)) then ForceDirectories(FUnpackPath); setCurrentDir(FUnpackPath); end; tarfile := TTarFile.Create( FFileSource); DoProgress(tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; DoProgress( tarfile); outfileDir := ExtractFileDir(FNextFile.name); FNextFile.size := tarfile.GetNextSize; if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); if list.IndexOf(FNextFile.Name) > -1 then begin DoOnNextFile; // raise event that we start with new file // Info is now read and in FNextFile // Create the file CreateNextFile(tarfile) end else tarFile.SkipFile end end; DoProgress( tarfile); tarfile.Free; setCurrentDir(oldDir) end; procedure TUnTar.GetInfo; var tarfile : TTarFile; begin FProgress := 0; tarfile := TTarFile.Create( FFileSource); DoProgress( tarfile); while not( tarfile.EOF) do begin FNextFile.name := tarfile.GetNextFilename; FNextFile.size := tarfile.GetNextSize; DoProgress( tarfile); if FNextFile.size > 0 then begin //FNextFile.timestamp := tarfile.GetNextDate; FNextFile.timestamp := TranslateDate(tarfile.GetNextDate); tarfile.SkipFile; DoOnNextFile; DoProgress( tarfile) end end; DoProgress( tarfile); tarfile.Free; end; procedure Register; begin RegisterComponents('Samples', [TUnTar]); {$IFDEF ABOUTDLG} RegisterPropertyEditor(TypeInfo(TAboutProperty), TUnTar, 'ABOUT', TAboutProperty); {$ENDIF} end; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/DbugIntf.pas0000644000175000001440000001132112014201074021377 0ustar alexxusersunit DbugIntf; interface uses Windows, Dialogs; // We need "Dialogs" for TMsgDlgType procedure SendBoolean(const Identifier: string; const Value: Boolean); procedure SendDateTime(const Identifier: string; const Value: TDateTime); procedure SendDebugEx(const Msg: string; MType: TMsgDlgType); procedure SendDebug(const Msg: string); procedure SendDebugClear; procedure SendInteger(const Identifier: string; const Value: Integer); procedure SendMethodEnter(const MethodName: string); procedure SendMethodExit(const MethodName: string); procedure SendSeparator; procedure SendDebugFmt(const Msg: string; const Args: array of const); procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TMsgDlgType); function StartDebugWin: hWnd; implementation uses Messages, SysUtils, Registry, Forms; // We need "Forms" for the Application object threadvar MsgPrefix: AnsiString; const chrClearCommand = #3; var PastFailedAttemptToStartDebugWin: Boolean = False; function StartDebugWin: hWnd; var DebugFilename: string; Buf: array[0..MAX_PATH + 1] of Char; si: TStartupInfo; pi: TProcessInformation; begin MsgPrefix := ''; Result := 0; if PastFailedAttemptToStartDebugWin then Exit; with TRegIniFile.Create('\Software\GExperts') do try DebugFilename := ReadString('Debug', 'FilePath', ''); finally Free; end; if Trim(DebugFileName) = '' then begin GetModuleFileName(HINSTANCE, Buf, SizeOf(Buf)-1); DebugFileName := ExtractFilePath(StrPas(Buf))+'GDebug.exe'; end; if (Trim(DebugFilename) = '') or not FileExists(DebugFilename) then begin PastFailedAttemptToStartDebugWin := True; Exit; end; FillChar(si, SizeOf(si), #0); si.cb := SizeOf(si); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_SHOW; if not CreateProcess(PChar(DebugFilename), nil, nil, nil, False, 0, nil, nil, si, pi) then begin PastFailedAttemptToStartDebugWin := True; Exit; end; try WaitForInputIdle(pi.hProcess, 3 * 1000); // wait for 3 seconds to get idle finally CloseHandle(pi.hThread); CloseHandle(pi.hProcess); end; Result := FindWindow('TfmDebug', nil); end; procedure SendDebugEx(const Msg: string; MType: TMsgDlgType); var CDS: TCopyDataStruct; DebugWin: hWnd; MessageString: string; {$IFDEF LINUX} const MTypeStr: array[TMsgDlgType] of string = ('Waring: ', 'Error: ', 'Information: ', 'Confirmation: ', 'Custom: '); {$ENDIF LINUX} begin {$IFDEF LINUX} Writeln('GX: ' + MTypeStr[MType] + Msg); {$ENDIF LINUX} {$IFNDEF LINUX} DebugWin := FindWindow('TfmDebug', nil); if DebugWin = 0 then DebugWin := StartDebugWin; if DebugWin <> 0 then begin MessageString := MsgPrefix + Msg; CDS.cbData := Length(MessageString) + 4; CDS.dwData := 0; if Msg = chrClearCommand then CDS.lpData := PChar(chrClearCommand+Char(Ord(MType) + 1)+ MessageString +#0) else CDS.lpData := PChar(#1+Char(Ord(MType) + 1)+ MessageString +#0); SendMessage(DebugWin, WM_COPYDATA, WParam(Application.Handle), LParam(@CDS)); end; {$ENDIF not LINUX} end; procedure SendDebug(const Msg: string); begin SendDebugEx(Msg, mtInformation); end; procedure SendDebugFmt(const Msg: string; const Args: array of const); begin SendDebugEx(Format(Msg, Args), mtInformation); end; procedure SendDebugFmtEx(const Msg: string; const Args: array of const; MType: TMsgDlgType); begin SendDebugEx(Format(Msg, Args), MType); end; procedure SendDebugClear; begin SendDebug(chrClearCommand); end; const Indentation = ' '; procedure SendMethodEnter(const MethodName: string); begin MsgPrefix := MsgPrefix + Indentation; SendDebugEx('Entering ' + MethodName, mtInformation); end; procedure SendMethodExit(const MethodName: string); begin SendDebugEx('Exiting ' + MethodName, mtInformation); Delete(MsgPrefix, 1, Length(Indentation)); end; procedure SendSeparator; const SeparatorString = '------------------------------'; begin SendDebugEx(SeparatorString, mtInformation); end; procedure SendBoolean(const Identifier: string; const Value: Boolean); begin // Note: We deliberately leave "True" and "False" as // hard-coded string constants, since these are // technical terminology which should not be localised. if Value then SendDebugEx(Identifier + '= True', mtInformation) else SendDebugEx(Identifier + '= False', mtInformation); end; procedure SendInteger(const Identifier: string; const Value: Integer); begin SendDebugEx(Format('%s = %d', [Identifier, Value]), mtInformation); end; procedure SendDateTime(const Identifier: string; const Value: TDateTime); begin SendDebugEx(Identifier + '=' + DateTimeToStr(Value), mtInformation); end; end. doublecmd-0.7.1/plugins/wdx/deb_wdx/src/deb_wdx.lpi0000644000175000001440000001066712451527526021350 0ustar alexxusers doublecmd-0.7.1/plugins/wdx/deb_wdx/lib/0000755000175000001440000000000012675717732017203 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/rpm_wdx/0000755000175000001440000000000012675717732016501 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/rpm_wdx/src/0000755000175000001440000000000012675717732017270 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/rpm_wdx/src/rpm_wdx.lpi0000644000175000001440000001134012451527526021445 0ustar alexxusers doublecmd-0.7.1/plugins/wdx/rpm_wdx/src/rpm_io.pas0000644000175000001440000001724711172641244021256 0ustar alexxusers//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** //*************************************************************** // This code was improved by Sergio Daniel Freue (sfreue@dc.uba.ar) //*************************************************************** {$A-,I-} unit rpm_io; {$MODE Delphi} interface uses SysUtils, rpm_def; type TStrBuf = array[1..260] of Char; function RPM_ReadLead(var f : file; var lead : RPM_Lead) : Boolean; function RPM_ReadSignature(var f : file; sig_type : Word; var signature : RPM_Header) : Boolean; function RPM_ReadHeader(var f : file; align_data : Boolean; var header : RPM_Header; var info : RPM_InfoRec) : Boolean; function RPM_ReadEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo) : Boolean; function RPM_ProcessEntry(var f : file; data_start : LongInt; var entry : RPM_EntryInfo; var info : RPM_InfoRec) : Boolean; procedure swap_value(var value; size : Integer); procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); function get_archivename(var fname : String;is_bz2file:boolean) : String; function read_string(var f : file; var s : AnsiString) : Boolean; function read_int32(var f : file; var int32 : LongWord) : Boolean; implementation uses Classes; procedure swap_value(var value; size:Integer); type byte_array = array[1..MaxInt] of Byte; var i : Integer; avalue : Byte; begin for i:=1 to size div 2 do begin avalue := byte_array(value)[i]; byte_array(value)[i] := byte_array(value)[size + 1 - i]; byte_array(value)[size + 1 - i] := avalue; end; end; procedure copy_str2buf(var buf : TStrBuf; s : AnsiString); var i_char : Integer; begin FillChar(buf, Sizeof(buf), 0); if Length(s) = 0 then Exit; if Length(s) > 259 then SetLength(s, 259); s := s + #0; for i_char := 1 to Length(s) do buf[i_char] := s[i_char]; end; function get_archivename(var fname : String;is_bz2file:boolean) : String; var tmp_str : String; i_char : Integer; fgFound : Boolean; begin tmp_str := ExtractFileName(fname); fgFound := False; for i_char := Length(tmp_str) downto 1 do if tmp_str[i_char] = '.' then begin fgFound := True; Break; end; if fgFound then SetLength(tmp_str, i_char - 1); if is_bz2file then tmp_str := tmp_str + '.cpio.bz2' else tmp_str := tmp_str + '.cpio.gz'; Result := tmp_str; end; function RPM_ReadLead; begin Result := False; BlockRead(f, lead, Sizeof(Lead)); if IOResult = 0 then Result := True; with lead do begin swap_value(rpmtype, 2); swap_value(archnum, 2); swap_value(osnum, 2); swap_value(signature_type, 2); end; end; function RPM_ReadHeader; var i_entry : LongWord; start : Integer; entry : RPM_EntryInfo; begin Result := False; BlockRead(f, header, Sizeof(header)); if IOResult = 0 then begin with header do begin swap_value(count, 4); swap_value(data_size, 4); start := FilePos(f) + LongInt(count) * Sizeof(entry); for i_entry := 0 to count - 1 do begin if not RPM_ReadEntry(f, start, entry) then Exit else if not RPM_ProcessEntry(f, start, entry, info) then Exit; end; end; start := start + LongInt(header.data_size); // Move file pointer on padded to a multiple of 8 bytes position if align_data then if (start mod 8) <> 0 then begin start := start and $FFFFFFF8; Inc(start, 8); end; Seek(f, start); Result := True; end; end; function RPM_ReadEntry; begin Result := False; BlockRead(f, entry, Sizeof(entry)); if IOResult = 0 then Result := True; with entry do begin swap_value(tag, 4); swap_value(etype, 4); swap_value(offset, 4); offset := data_start + LongInt(offset); swap_value(count, 4); end; end; function RPM_ReadSignature; var info : RPM_InfoRec; begin Result := False; case sig_type of RPMSIG_PGP262_1024 : ; // Old PGP signature RPMSIG_MD5 : ; // RPMSIG_MD5_PGP : ; // RPMSIG_HEADERSIG : // New header signature begin if RPM_ReadHeader(f, True, signature, info) then Result := True; end; end;{case signature type} end; procedure CRtoCRLF(var instr:string); var s:string; i,l:integer; ch,ch2:char; begin instr:=instr+' '; {Avoid overflow} l:=length(instr)-1; for i:=1 to l do begin ch:=instr[i]; ch2:=instr[i+1]; if ((ch=#13) and (ch2<>#10)) or ((ch=#10) and (ch2<>#13)) then s:=s+#13#10 else s:=s+ch; end; instr:=s; end; function RPM_ProcessEntry; var save_pos : Integer; fgError : Boolean; begin result:=true; if entry.tag = RPMTAG_FILENAMES then exit; fgError := False; save_pos := FilePos(f); Seek(f, entry.offset); if IOResult = 0 then begin case entry.tag of RPMTAG_NAME : if entry.etype = 6 then fgError := not read_string(f, info.name); RPMTAG_VERSION : if entry.etype = 6 then fgError := not read_string(f, info.version); RPMTAG_RELEASE : if entry.etype = 6 then fgError := not read_string(f, info.release); RPMTAG_SUMMARY : if entry.etype = 9 then fgError := not read_string(f, info.summary); RPMTAG_DESCRIPTION : if entry.etype = 9 then begin fgError := not read_string(f, info.description); if not fgError then CRtoCRLF(info.description); end; RPMTAG_BUILDTIME : if entry.etype = 4 then fgError := not read_int32(f, info.buildtime); RPMTAG_DISTRIBUTION : if entry.etype = 6 then fgError := not read_string(f, info.distribution); RPMTAG_VENDOR : if entry.etype = 6 then fgError := not read_string(f, info.vendor); RPMTAG_LICENSE : if entry.etype = 6 then fgError := not read_string(f, info.license); RPMTAG_PACKAGER : if entry.etype = 6 then fgError := not read_string(f, info.packager); RPMTAG_GROUP : if entry.etype = 9 then fgError := not read_string(f, info.group); RPMTAG_OS : if entry.etype = 6 then fgError := not read_string(f, info.os); RPMTAG_ARCH : if entry.etype = 6 then fgError := not read_string(f, info.arch); RPMTAG_SOURCERPM : if entry.etype = 6 then fgError := not read_string(f, info.sourcerpm); end;{case} end else fgError := True; Result := not fgError; Seek(f, save_pos); end; function read_string(var f : file; var s : AnsiString) : Boolean; var i_char : Char; fgError : Boolean; begin fgError := False; SetLength(s, 0); while not eof(f) do begin BlockRead(f, i_char, 1); if IOResult <> 0 then begin fgError := True; Break; end; if i_char = #0 then Break else s := s + i_char; end; Result := not fgError; end; function read_int32(var f : file; var int32 : LongWord) : Boolean; begin BlockRead(f, int32, Sizeof(LongWord)); swap_value(int32, Sizeof(LongWord)); if IOResult = 0 then Result := True else Result := False; end; procedure RPM_CreateInfoRec(var info : RPM_InfoRec); begin end; procedure RPM_DeleteInfoRec(var info : RPM_InfoRec); begin end; end. doublecmd-0.7.1/plugins/wdx/rpm_wdx/src/rpm_wdx.dpr0000644000175000001440000000155612014201074021434 0ustar alexxuserslibrary rpm_wdx; {$MODE Delphi} { Important note about DLL memory management: ShareMem must be the first unit in your library's USES clause AND your project's (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. } uses SysUtils, Classes, rpm_io in 'rpm_io.pas', rpm_wdx_intf in 'rpm_wdx_intf.pas', rpm_def in 'rpm_def.pas'; {$E wdx} exports ContentGetDetectString, ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. doublecmd-0.7.1/plugins/wdx/rpm_wdx/src/rpm_def.pas0000644000175000001440000000572411172641244021402 0ustar alexxusers//*************************************************************** // This file is part of RPMWCX, a archiver plugin for // Windows Commander. // Copyright (C) 2000 Mandryka Yurij e-mail:braingroup@hotmail.ru //*************************************************************** //*************************************************************** // This code based on Christian Ghisler (support@ghisler.com) sources //*************************************************************** {$A-,I-} unit rpm_def; {$MODE Delphi} interface uses Classes; {$ifdef ver90} type longword=longint; {$endif} {$ifdef ver100} type longword=longint; {$endif} //values for TArchiveRec.headers (pseudo-files to show) const HDR_INFO = 0; HDR_DATA = 1; const MAX_PHANTOM_FILES = 13; const RPM_MAGIC = $DBEEABED; RPM_TYPE_BINARY = 0; // binary package type RPM_TYPE_SOURCE = 1; // source package type RPMSIG_PGP262_1024 = 1; RPMSIG_MD5 = 3; RPMSIG_MD5_PGP = 4; RPMSIG_HEADERSIG = 5; const RPMTAG_NAME = 1000; RPMTAG_VERSION = 1001; RPMTAG_RELEASE = 1002; RPMTAG_SUMMARY = 1004; RPMTAG_DESCRIPTION = 1005; RPMTAG_BUILDTIME = 1006; RPMTAG_DISTRIBUTION = 1010; RPMTAG_VENDOR = 1011; RPMTAG_LICENSE = 1014; RPMTAG_PACKAGER = 1015; RPMTAG_GROUP = 1016; RPMTAG_OS = 1021; RPMTAG_ARCH = 1022; RPMTAG_FILENAMES = 1027; RPMTAG_FILEMTIMES = 1034; RPMTAG_SOURCERPM = 1044; RPMTAG_ARCHIVESIZE = 1046; type RPM_EntryInfo = record tag : LongWord; etype : LongWord; offset : LongWord; count : LongWord; end;{EntryInfo} type RPM_Lead = record magic : LongWord; major_ver : Byte; minor_ver : Byte; rpmtype : Word; archnum : Word; name : array[1..66] of Char; osnum : Word; signature_type : Word; reserved : array[1..16] of Char; end;{RPM_Lead} RPM_Header =record magic : array [1..3] of byte; header_ver : Byte; reserved : array [1..4] of Byte; count : LongWord; data_size : LongWord; end;{RPM_Header} RPM_InfoRec = record name : AnsiString; // RPMTAG_NAME version : AnsiString; // RPMTAG_VERSION release : AnsiString; // RPMTAG_RELEASE summary : AnsiString; // RPMTAG_SUMMARY description : AnsiString; // RPMTAG_DESCRIPTION distribution : AnsiString; // RPMTAG_DISTRIBUTION buildtime : LongWord; // RPMTAG_BUILDTIME vendor : AnsiString; // RPMTAG_VENDOR license : AnsiString; // RPMTAG_LICENSE packager : AnsiString; // RPMTAG_PACKAGER group : AnsiString; // RPMTAG_GROUP os : AnsiString; // RPMTAG_OS arch : AnsiString; // RPMTAG_ARCH sourcerpm : AnsiString; // RPMTAG_SOURCERPM end;{RPM_Info} implementation end. doublecmd-0.7.1/plugins/wdx/rpm_wdx/src/rpm_wdx_intf.pas0000644000175000001440000001256712014201074022456 0ustar alexxusersunit rpm_wdx_intf; {$mode delphi} {$include calling.inc} interface procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); dcpcall; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; dcpcall; function ContentGetValue(FileName:pchar;FieldIndex,UnitIndex:integer;FieldValue:pbyte; maxlen,flags:integer):integer; dcpcall; implementation uses SysUtils, WdxPlugin, rpm_io, rpm_def; const IDX_PACKAGE = 0; IDX_VERSION = 1; IDX_RELEASE = 2; IDX_DISTRIBUTION = 3; IDX_VENDER = 4; IDX_LICENSE = 5; IDX_PACKAGER = 6; IDX_GROUP = 7; IDX_OS = 8; IDX_ARCH = 9; IDX_SOURCE_RPM = 10; IDX_SUMMARY = 11; IDX_DESCRIPTION = 12; FIELDS_COUNT = 13; // IDX_BUILDTIME , // IDX_ARCHIVE_SIZE var CurrentPackageFile: String; FileInfoCache : RPM_InfoRec; //cache procedure ContentGetDetectString(DetectString:pchar; maxlen:integer); begin StrPCopy(DetectString, 'EXT="RPM"'); end; function ContentGetSupportedField(FieldIndex:integer; FieldName:pchar; Units:pchar;maxlen:integer):integer; var Field: String; begin StrPCopy(Units, ''); // if FieldIndex =IDX_ARCHIVE_SIZE then // begin // StrPCopy(FieldName, FieldList.Strings[FieldIndex]); // StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); // Result := FT_NUMERIC_64; // exit; // end // else if FieldIndex >= FIELDS_COUNT then begin Result := FT_NOMOREFIELDS; exit; end; Result := FT_STRING; case FieldIndex of IDX_PACKAGE: Field := 'Package'; IDX_VERSION: Field := 'Version'; IDX_RELEASE: Field := 'Release'; IDX_DISTRIBUTION:Field := 'Distribution'; IDX_VENDER: Field := 'Vender'; IDX_LICENSE: Field := 'License'; IDX_PACKAGER: Field := 'Packager'; IDX_GROUP: Field := 'Group'; IDX_OS: Field := 'OS'; IDX_ARCH: Field := 'Arch'; IDX_SOURCE_RPM: Field := 'Source-RPM'; IDX_SUMMARY: Field := 'Summary'; IDX_DESCRIPTION: Field := 'Description'; // IDX_BUILD_TIME: Field := 'Build-Time'; // IDX_ARCHIVE_SIZE: // begin // Field := 'Archive-Size'; // StrPCopy(FieldName, Field); // StrPCopy(Units, 'bytes|kbytes|Mbytes|Gbytes'+#0); // Result := FT_NUMERIC_64; // exit; end; StrPCopy(FieldName, Field); end; function ContentGetValue(FileName:pchar; FieldIndex,UnitIndex:integer; FieldValue:pbyte; maxlen,flags:integer):integer; function ReadRPMInfo(filename: String): integer; var fh: integer; fh_file: file; r_lead: RPM_Lead; signature, r_header: RPM_Header; //r_info: RPM_InfoRec; begin Result := -1; fh := FileOpen(filename, fmOpenRead or fmShareDenyNone); if fh=-1 then exit; AssignFile(fh_file, filename); try FileMode := 0; Reset(fh_file, 1); if IOResult <> 0 then exit; RPM_ReadLead(fh_file, r_lead); if r_lead.magic <> RPM_MAGIC then exit; if not RPM_ReadSignature(fh_file, r_lead.signature_type, signature) then exit; if not RPM_ReadHeader(fh_file, false, r_header, FileInfoCache) then exit; Result := 0; finally CloseFile(fh_file); FileClose(fh); //oppsition to FileOpen end; end; function EnsureLength(S: string; nMaxlen: integer): string; begin Result := S; if length(Result)>=nMaxlen then begin Result := Copy(Result, 1, nMaxlen-4); Result := Result + '...'; end; end; var Value : String; begin Result := FT_FILEERROR; if not FileExists(FileName) then exit; if CurrentPackageFile<>FileName then begin if ReadRPMInfo(FileName) <0 then exit; CurrentPackageFile := FileName; end {$IFDEF GDEBUG} else SendDebug('Cached info reused for '+FileName); {$ENDIF}; if (FieldIndex>=FIELDS_COUNT) then begin Result := FT_NOSUCHFIELD; exit; end; Result := FT_STRING; case FieldIndex of IDX_PACKAGE: Value := FileInfoCache.name; IDX_VERSION: Value := FileInfoCache.version; IDX_RELEASE: Value := FileInfoCache.release; IDX_DISTRIBUTION: Value := FileInfoCache.distribution; IDX_VENDER: Value := FileInfoCache.version; IDX_LICENSE: Value := FileInfoCache.license; IDX_PACKAGER: Value := FileInfoCache.packager; IDX_GROUP: Value := FileInfoCache.group; IDX_OS: Value := FileInfoCache.os; IDX_ARCH: Value := FileInfoCache.arch; IDX_SOURCE_RPM: Value := FileInfoCache.sourcerpm; IDX_SUMMARY: Value := FileInfoCache.summary; IDX_DESCRIPTION: Value := FileINfoCache.description; // IDX_BUILD_TIME: // //??? // IDX_ARCHIVE_SIZE: // Result := FT_NUMERIC_64; // size := FileInfoCache.archive_size; // case UnitIndex of // 0: //bytes // size := size * 1024; // // 1: //kbytes // // pass // 2: //mbytes // size := size div 1024; // 3: //gbytes // size := size div (1024 * 1024); // end; // exit; else Result := FT_FIELDEMPTY; exit; end; StrPCopy(PChar(FieldValue), EnsureLength(Value, maxlen)); end; initialization CurrentPackageFile := ''; end. doublecmd-0.7.1/plugins/wdx/rpm_wdx/lib/0000755000175000001440000000000012675717732017247 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/svn_wdx/0000755000175000001440000000000012675717732016511 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/svn_wdx/src/0000755000175000001440000000000012675717732017300 5ustar alexxusersdoublecmd-0.7.1/plugins/wdx/svn_wdx/src/svn_wdx_intf.pas0000644000175000001440000001005312014201074022462 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- svn_wdx is a content plugin that displays some information from subversion Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } unit svn_wdx_intf; {$mode objfpc}{$H+} {$include calling.inc} interface uses Classes, SysUtils, WdxPlugin; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; implementation uses md5, svn_def, svn_io; const IDX_SVN_AUTHOR = 0; IDX_SVN_REVISION = 1; IDX_SVN_STATUS = 2; FIELD_COUNT = 3; threadvar CurrentFilePath: AnsiString; // Current file path CurrentFileName: AnsiString; // Current file name CurrentFileIndex: Integer; // Current file index function EnsureLength(S: AnsiString; MaxLen: Integer): AnsiString; begin Result := S; if Length(Result) >= MaxLen then begin Result := Copy(Result, 1, MaxLen - 4); Result := Result + '...'; end; end; function ContentGetSupportedField(FieldIndex: Integer; FieldName: PAnsiChar; Units: PAnsiChar; MaxLen: Integer): Integer; dcpcall; var Field: AnsiString; begin StrPCopy(Units, EmptyStr); if FieldIndex >= FIELD_COUNT then begin Result := FT_NOMOREFIELDS; Exit; end; Result := FT_STRING; case FieldIndex of IDX_SVN_AUTHOR: Field := 'SVN Author'; IDX_SVN_REVISION: Field := 'SVN Revision'; IDX_SVN_STATUS: Field := 'SVN Status'; end; StrPLCopy(FieldName, Field, MaxLen); end; function ContentGetValue(FileName: PAnsiChar; FieldIndex, UnitIndex: Integer; FieldValue: PByte; MaxLen, Flags: Integer): Integer; dcpcall; var Value, FilePath, CheckSum: AnsiString; FileAttr: LongInt; begin Result := FT_FILEERROR; FileAttr:= FileGetAttr(FileName); if (FileAttr < 0) or Boolean(FileAttr and faDirectory) then Exit; FilePath:= ExtractFileDir(FileName); if CurrentFilePath <> FilePath then begin if not ParseEntries(FilePath) then Exit; CurrentFilePath := FilePath; end; if CurrentFileName <> FileName then begin CurrentFileIndex:= FileNameIndex(ExtractFileName(FileName)); CurrentFileName := FileName; end; if (FieldIndex >= FIELD_COUNT) then begin Result := FT_NOSUCHFIELD; Exit; end; Result := FT_STRING; case FieldIndex of IDX_SVN_AUTHOR: Value := GetSvnInfo(CurrentFileIndex, SVN_AUTHOR); IDX_SVN_REVISION: Value := GetSvnInfo(CurrentFileIndex, SVN_REVISION); IDX_SVN_STATUS: begin if CurrentFileIndex < 0 then Value:= 'Unversioned' else begin // Get file checksum from subversion Value := GetSvnInfo(CurrentFileIndex, SVN_CHECKSUM); // Calculate file checksum CheckSum:= MD5Print(MD5File(FileName)); // Compare checksums if not SameText(Value, CheckSum) then Value:= 'Modified' else Value:= 'Normal'; end; end else Result := FT_FIELDEMPTY; Exit; end; StrPLCopy(PAnsiChar(FieldValue), EnsureLength(Value, MaxLen), MaxLen); end; end. doublecmd-0.7.1/plugins/wdx/svn_wdx/src/svn_io.pas0000644000175000001440000000443112014201074021252 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- svn_wdx is a content plugin that displays some information from subversion Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } unit svn_io; {$mode objfpc}{$H+} interface uses Classes, SysUtils, svn_def; function ParseEntries(const FilePath: AnsiString): Boolean; function FileNameIndex(const FileName: AnsiString): Integer; function GetSvnInfo(FileIndex, Offset: Integer): AnsiString; implementation threadvar EntriesFile: array of AnsiString; // Current svn entries file function ParseEntries(const FilePath: AnsiString): Boolean; var I: LongWord; FileName: AnsiString; StringList: TStringList = nil; begin Result:= False; FileName:= FilePath + PathDelim + '.svn' + PathDelim + 'entries'; if not FileExists(FileName) then Exit; StringList:= TStringList.Create; try StringList.LoadFromFile(FileName); SetLength(EntriesFile, StringList.Count); for I:= 0 to StringList.Count - 1 do EntriesFile[I]:= StringList[I]; Result:= True; finally FreeAndNil(StringList); end; end; function FileNameIndex(const FileName: AnsiString): Integer; var I: LongWord; begin Result:= -1; for I:= Low(EntriesFile) to High(EntriesFile) do begin if SameText(EntriesFile[I], FileName) then Exit(I); end; end; function GetSvnInfo(FileIndex, Offset: Integer): AnsiString; var Index: Integer; begin Result:= EmptyStr; if FileIndex < 0 then Exit; Index:= FileIndex + Offset; if (Index >= Low(EntriesFile)) and (Index <= High(EntriesFile)) then Result:= EntriesFile[Index]; end; end. doublecmd-0.7.1/plugins/wdx/svn_wdx/src/svn_wdx.lpr0000644000175000001440000000212412014201074021454 0ustar alexxusers{ Double commander ------------------------------------------------------------------------- svn_wdx is a content plugin that displays some information from subversion Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . } library svn_wdx; {$mode objfpc}{$H+} uses Classes, svn_wdx_intf, svn_def, svn_io { you can add units after this }; exports ContentGetSupportedField, ContentGetValue; {$R *.res} begin end. doublecmd-0.7.1/plugins/wdx/svn_wdx/src/svn_wdx.lpi0000644000175000001440000001200512451527526021464 0ustar alexxusers <UseAppBundle Value="False"/> <ResourceType Value="res"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <MinorVersionNr Value="1"/> <StringTable FileDescription="SVN WDX plugin for Double Commander" LegalCopyright="Copyright (C) 2006-2012 Koblov Alexander" ProductVersion=""/> </VersionInfo> <BuildModes Count="2"> <Item1 Name="Release" Default="True"/> <Item2 Name="Debug"> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\svn_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <IOChecks Value="True"/> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> <StackChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> <UseHeaptrc Value="True"/> <UseExternalDbgSyms Value="True"/> </Debugging> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </Item2> </BuildModes> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <HostApplicationFilename Value="D:\totalcmd\totalcmd.exe"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <Units Count="4"> <Unit0> <Filename Value="svn_wdx.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="svn_wdx"/> </Unit0> <Unit1> <Filename Value="xpi_wdx_intf.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="xpi_wdx_intf"/> </Unit1> <Unit2> <Filename Value="xpi_def.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="xpi_def"/> </Unit2> <Unit3> <Filename Value="xpi_io.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="xpi_io"/> </Unit3> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> <Filename Value="..\lib\svn_wdx.wdx" ApplyConventions="False"/> </Target> <SearchPaths> <IncludeFiles Value="$(ProjOutDir);..\..\..\..\sdk"/> <OtherUnitFiles Value="..\..\..\..\sdk"/> <UnitOutputDirectory Value="..\lib"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; end; if (TargetOS = 'darwin') then begin LinkerOptions += ' -no_order_inits'; end;"/> <CodeGeneration> <SmartLinkUnit Value="True"/> <Optimizations> <OptimizationLevel Value="3"/> </Optimizations> </CodeGeneration> <Linking> <Debugging> <GenerateDebugInfo Value="False"/> </Debugging> <LinkSmart Value="True"/> <Options> <PassLinkerOptions Value="True"/> <ExecutableType Value="Library"/> </Options> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="3"> <Item1> <Name Value="EAbort"/> </Item1> <Item2> <Name Value="ECodetoolError"/> </Item2> <Item3> <Name Value="EFOpenError"/> </Item3> </Exceptions> </Debugging> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wdx/svn_wdx/src/svn_def.pas�������������������������������������������������0000644�0001750�0000144�00000002143�12014201074�021377� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- svn_wdx is a content plugin that displays some information from subversion Copyright (C) 2011 Koblov Alexander (Alexx2000@mail.ru) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. } unit svn_def; {$mode objfpc}{$H+} interface uses Classes, SysUtils; const // Information offset relative to file name index SVN_CHECKSUM = 7; SVN_REVISION = 9; SVN_AUTHOR = 10; implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wdx/svn_wdx/lib/������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717732�017257� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/plugins/wdx/svn_wdx/COPYING.txt�����������������������������������������������������0000644�0001750�0000144�00000016743�12014201074�020343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. �����������������������������doublecmd-0.7.1/plugins/build.sh��������������������������������������������������������������������0000755�0001750�0000144�00000001661�12660674103�015645� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Build all plugins # Do not execute this script directly. # This script is called from ../build.sh. # CD to plugins directory basedir=$(pwd) cd plugins # WCX plugins $lazbuild wcx/cpio/src/cpio.lpi $DC_ARCH $lazbuild wcx/deb/src/deb.lpi $DC_ARCH $lazbuild wcx/rpm/src/rpm.lpi $DC_ARCH $lazbuild wcx/unrar/src/unrar.lpi $DC_ARCH $lazbuild wcx/zip/src/Zip.lpi $DC_ARCH # WDX plugins $lazbuild wdx/rpm_wdx/src/rpm_wdx.lpi $DC_ARCH $lazbuild wdx/deb_wdx/src/deb_wdx.lpi $DC_ARCH $lazbuild wdx/svn_wdx/src/svn_wdx.lpi $DC_ARCH $lazbuild wdx/xpi_wdx/src/xpi_wdx.lpi $DC_ARCH # WFX plugins $lazbuild wfx/ftp/src/ftp.lpi $DC_ARCH # Don't build under OS X if [ -z $(uname | grep Darwin) ]; then $lazbuild wfx/samba/src/samba.lpi $DC_ARCH # WLX plugins $lazbuild wlx/WlxMplayer/src/wlxMplayer.lpi $DC_ARCH fi # DSX plugins $lazbuild dsx/DSXLocate/src/DSXLocate.lpi $DC_ARCH # Return from plugins directory cd $basedir �������������������������������������������������������������������������������doublecmd-0.7.1/pixmaps.txt�������������������������������������������������������������������������0000644�0001750�0000144�00000000667�12014201074�014737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������avi=video-x-generic bat=application-x-shellscript deb=application-x-deb doc=x-office-document htm=text-html html=text-html iso=application-x-cd-image jpeg=image-x-generic jpg=image-x-generic log=text-x-log mp2=audio-x-generic mp3=audio-x-generic ods=x-office-spreadsheet odt=x-office-document pas=text-x-pascal pdf=application-pdf po=text-x-po rpm=application-x-rpm sh=application-x-shellscript txt=text-x-generic xls=x-office-spreadsheet �������������������������������������������������������������������������doublecmd-0.7.1/docgen.bat��������������������������������������������������������������������������0000644�0001750�0000144�00000000174�11740433676�014461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������REM http://pasdoc.sourceforge.net pasdoc --marker en --output doc\en\dev-help --define MSWINDOWS --source units-doc-win.txt����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/�������������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�014723� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�016553� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/dcpcrypt.pas����������������������������������������������������0000644�0001750�0000144�00000000570�12573066072�021101� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit dcpcrypt; interface uses DCPbase64, DCPblockciphers, DCPconst, DCPcrypt2, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPsha1, DCPsha256, DCPsha512, DCPtiger, DCPcrc32, DCcrc32, DCblake2, DCPblake2; implementation end. ����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/dcpcrypt.lpk����������������������������������������������������0000644�0001750�0000144�00000010164�12573066072�021104� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <Name Value="dcpcrypt"/> <Author Value="David Barton, Barko & Graeme Geldenhuys"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <OtherUnitFiles Value="Ciphers;Hashes;$(PkgOutDir)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> <CStyleOperator Value="False"/> <IncludeAssertionCode Value="True"/> <AllowLabel Value="False"/> <CPPInline Value="False"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CustomOptions Value="-Xd"/> </Other> </CompilerOptions> <Description Value="DCPcrypt Cryptographic Component Library "/> <License Value="DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. www.cityinthesky.co.uk/cryptography.html "/> <Version Major="2" Release="4" Build="1"/> <Files Count="21"> <Item1> <Filename Value="dcpbase64.pas"/> <UnitName Value="DCPbase64"/> </Item1> <Item2> <Filename Value="dcpblockciphers.pas"/> <UnitName Value="DCPblockciphers"/> </Item2> <Item3> <Filename Value="dcpconst.pas"/> <UnitName Value="DCPconst"/> </Item3> <Item4> <Filename Value="dcpcrypt2.pas"/> <UnitName Value="DCPcrypt2"/> </Item4> <Item5> <Filename Value="Hashes/dcphaval.pas"/> <UnitName Value="DCPhaval"/> </Item5> <Item6> <Filename Value="Hashes/dcpmd4.pas"/> <UnitName Value="DCPmd4"/> </Item6> <Item7> <Filename Value="Hashes/dcpmd5.pas"/> <UnitName Value="DCPmd5"/> </Item7> <Item8> <Filename Value="Hashes/dcpripemd128.pas"/> <UnitName Value="DCPripemd128"/> </Item8> <Item9> <Filename Value="Hashes/dcpripemd160.pas"/> <UnitName Value="DCPripemd160"/> </Item9> <Item10> <Filename Value="Hashes/dcpsha1.pas"/> <UnitName Value="DCPsha1"/> </Item10> <Item11> <Filename Value="Hashes/dcpsha256.pas"/> <UnitName Value="DCPsha256"/> </Item11> <Item12> <Filename Value="Hashes/dcpsha512.pas"/> <UnitName Value="DCPsha512"/> </Item12> <Item13> <Filename Value="Hashes/dcptiger.pas"/> <UnitName Value="DCPtiger"/> </Item13> <Item14> <Filename Value="Hashes/DCPhaval3.inc"/> <Type Value="Include"/> </Item14> <Item15> <Filename Value="Hashes/DCPhaval4.inc"/> <Type Value="Include"/> </Item15> <Item16> <Filename Value="Hashes/DCPhaval5.inc"/> <Type Value="Include"/> </Item16> <Item17> <Filename Value="Hashes/dcpcrc32.pas"/> <UnitName Value="DCPcrc32"/> </Item17> <Item18> <Filename Value="Hashes/DCPtiger.inc"/> <Type Value="Include"/> </Item18> <Item19> <Filename Value="Hashes/dccrc32.pp"/> <UnitName Value="DCcrc32"/> </Item19> <Item20> <Filename Value="Hashes/dcblake2.pp"/> <UnitName Value="DCblake2"/> </Item20> <Item21> <Filename Value="Hashes/dcpblake2.pas"/> <UnitName Value="DCPblake2"/> </Item21> </Files> <RequiredPkgs Count="2"> <Item1> <PackageName Value="multithreadprocslaz"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/CHANGELOG.txt���������������������������������������������������0000644�0001750�0000144�00000001415�12014201074�020552� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Change in v2.0.4.1 by Graeme Geldenhuys (2010) * Version number bumped to v2.0.4.1 * More fixes for 64-bit support * Removed a lot of compiler warnings - tested with FPC 2.4.1 Change in v2.0.4 by Graeme Geldenhuys (2009) * Version number bumped to v2.0.4 * Split the Lazarus package into two separate packages - one is runtime only package and GUI toolkit independent. - one is Lazarus design-time only package which installs components in component palette. * Updated code to be compilable with FPC 2.4.0-rc1 * Updated code to be compilable with 64-bit FPC 2.4.0-rc1. - Tested under 32-bit & 64-bit Linux on x86 systems. Changes since DCPCrypt v2 Beta 3: * Ported DCPCrypt to Lazarus by Barko in 2006 -=-=-=-=-=-=-=-=-=-=-=-=-=-=- ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/dcpcrypt2.pas���������������������������������������������������0000644�0001750�0000144�00000052061�11652036011�021150� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Main component definitions *************************************************} {******************************************************************************} {* Copyright (c) 1999-2003 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPcrypt2; {$MODE Delphi} interface uses Classes, Sysutils, DCPbase64; //{$DEFINE DCP1COMPAT} { DCPcrypt v1.31 compatiblity mode - see documentation } {******************************************************************************} { A few predefined types to help out } type {$IFNDEF FPC} Pbyte= ^byte; Pword= ^word; Pdword= ^dword; Pint64= ^int64; dword= longword; Pwordarray= ^Twordarray; Twordarray= array[0..19383] of word; {$ENDIF} Pdwordarray= ^Tdwordarray; Tdwordarray= array[0..8191] of dword; {******************************************************************************} { The base class from which all hash algorithms are to be derived } type EDCP_hash= class(Exception); TDCP_hash= class(TComponent) protected fInitialized: boolean; { Whether or not the algorithm has been initialized } procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector } procedure DeadStr(Value: string); { Knudge to display vars in the object inspector } private function _GetId: integer; function _GetAlgorithm: string; function _GetHashSize: integer; public property Initialized: boolean read fInitialized; class function GetId: integer; virtual; { Get the algorithm id } class function GetAlgorithm: string; virtual; { Get the algorithm name } class function GetHashSize: integer; virtual; { Get the size of the digest produced - in bits } class function SelfTest: boolean; virtual; { Tests the implementation with several test vectors } procedure Init; virtual; { Initialize the hash algorithm } procedure Final(var Digest); virtual; { Create the final digest and clear the stored information. The size of the Digest var must be at least equal to the hash size } procedure Burn; virtual; { Clear any stored information with out creating the final digest } procedure Update(const Buffer; Size: longword); virtual; { Update the hash buffer with Size bytes of data from Buffer } procedure UpdateStream(Stream: TStream; Size: longword); { Update the hash buffer with Size bytes of data from the stream } procedure UpdateStr(const Str: string); { Update the hash buffer with the string } destructor Destroy; override; published property Id: integer read _GetId write DeadInt; property Algorithm: string read _GetAlgorithm write DeadStr; property HashSize: integer read _GetHashSize write DeadInt; end; TDCP_hashclass= class of TDCP_hash; {******************************************************************************} { The base class from which all encryption components will be derived. } { Stream ciphers will be derived directly from this class where as } { Block ciphers will have a further foundation class TDCP_blockcipher. } type EDCP_cipher= class(Exception); TDCP_cipher= class(TComponent) protected fInitialized: boolean; { Whether or not the key setup has been done yet } procedure DeadInt(Value: integer); { Knudge to display vars in the object inspector } procedure DeadStr(Value: string); { Knudge to display vars in the object inspector } private function _GetId: integer; function _GetAlgorithm: string; function _GetMaxKeySize: integer; public property Initialized: boolean read fInitialized; class function GetId: integer; virtual; { Get the algorithm id } class function GetAlgorithm: string; virtual; { Get the algorithm name } class function GetMaxKeySize: integer; virtual; { Get the maximum key size (in bits) } class function SelfTest: boolean; virtual; { Tests the implementation with several test vectors } procedure Init(const Key; Size: longword; InitVector: pointer); virtual; { Do key setup based on the data in Key, size is in bits } procedure InitStr(const Key: string; HashType: TDCP_hashclass); { Do key setup based on a hash of the key string } procedure Burn; virtual; { Clear all stored key information } procedure Reset; virtual; { Reset any stored chaining information } procedure Encrypt(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data and place in Outdata } procedure Decrypt(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data and place in Outdata } function EncryptStream(InStream, OutStream: TStream; Size: longword): longword; { Encrypt size bytes of data from InStream and place in OutStream } function DecryptStream(InStream, OutStream: TStream; Size: longword): longword; { Decrypt size bytes of data from InStream and place in OutStream } function EncryptString(const Str: string): string; virtual; { Encrypt a string and return Base64 encoded } function DecryptString(const Str: string): string; virtual; { Decrypt a Base64 encoded string } constructor Create(AOwner: TComponent); override; destructor Destroy; override; published property Id: integer read _GetId write DeadInt; property Algorithm: string read _GetAlgorithm write DeadStr; property MaxKeySize: integer read _GetMaxKeySize write DeadInt; end; TDCP_cipherclass= class of TDCP_cipher; {******************************************************************************} { The base class from which all block ciphers are to be derived, this } { extra class takes care of the different block encryption modes. } type TDCP_ciphermode= (cmCBC, cmCFB8bit, cmCFBblock, cmOFB, cmCTR); // cmCFB8bit is equal to DCPcrypt v1.xx's CFB mode EDCP_blockcipher= class(EDCP_cipher); TDCP_blockcipher= class(TDCP_cipher) protected fCipherMode: TDCP_ciphermode; { The cipher mode the encrypt method uses } procedure InitKey(const Key; Size: longword); virtual; private function _GetBlockSize: integer; public class function GetBlockSize: integer; virtual; { Get the block size of the cipher (in bits) } procedure SetIV(const Value); virtual; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); virtual; { Returns the current chaining information, not the actual IV } procedure Encrypt(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data and place in Outdata using CipherMode } procedure Decrypt(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data and place in Outdata using CipherMode } function EncryptString(const Str: string): string; override; { Encrypt a string and return Base64 encoded } function DecryptString(const Str: string): string; override; { Decrypt a Base64 encoded string } procedure EncryptECB(const Indata; var Outdata); virtual; { Encrypt a block of data using the ECB method of encryption } procedure DecryptECB(const Indata; var Outdata); virtual; { Decrypt a block of data using the ECB method of decryption } procedure EncryptCBC(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); virtual; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); virtual; { Decrypt size bytes of data using the CTR method of decryption } constructor Create(AOwner: TComponent); override; published property BlockSize: integer read _GetBlockSize write DeadInt; property CipherMode: TDCP_ciphermode read fCipherMode write fCipherMode default cmCBC; end; TDCP_blockcipherclass= class of TDCP_blockcipher; {******************************************************************************} { Helper functions } procedure XorBlock(var InData1, InData2; Size: longword); // Supposed to be an optimized version of XorBlock() using 32-bit xor procedure XorBlockEx(var InData1, InData2; Size: longword); // removes the compiler hint due to first param being 'var' instead of 'out' procedure dcpFillChar(out x; count: SizeInt; Value: Byte); overload; procedure dcpFillChar(out x; count: SizeInt; Value: Char); overload; procedure ZeroMemory(Destination: Pointer; Length: PtrUInt); implementation {$Q-}{$R-} {** TDCP_hash *****************************************************************} procedure TDCP_hash.DeadInt(Value: integer); begin end; procedure TDCP_hash.DeadStr(Value: string); begin end; function TDCP_hash._GetId: integer; begin Result:= GetId; end; function TDCP_hash._GetAlgorithm: string; begin Result:= GetAlgorithm; end; function TDCP_hash._GetHashSize: integer; begin Result:= GetHashSize; end; class function TDCP_hash.GetId: integer; begin Result:= -1; end; class function TDCP_hash.GetAlgorithm: string; begin Result:= ''; end; class function TDCP_hash.GetHashSize: integer; begin Result:= -1; end; class function TDCP_hash.SelfTest: boolean; begin Result:= false; end; procedure TDCP_hash.Init; begin end; procedure TDCP_hash.Final(var Digest); begin end; procedure TDCP_hash.Burn; begin end; procedure TDCP_hash.Update(const Buffer; Size: longword); begin end; procedure TDCP_hash.UpdateStream(Stream: TStream; Size: longword); var Buffer: array[0..8191] of byte; i, read: integer; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); for i:= 1 to (Size div Sizeof(Buffer)) do begin read:= Stream.Read(Buffer,Sizeof(Buffer)); Update(Buffer,read); end; if (Size mod Sizeof(Buffer))<> 0 then begin read:= Stream.Read(Buffer,Size mod Sizeof(Buffer)); Update(Buffer,read); end; end; procedure TDCP_hash.UpdateStr(const Str: string); begin Update(Str[1],Length(Str)); end; destructor TDCP_hash.Destroy; begin if fInitialized then Burn; inherited Destroy; end; {** TDCP_cipher ***************************************************************} procedure TDCP_cipher.DeadInt(Value: integer); begin end; procedure TDCP_cipher.DeadStr(Value: string); begin end; function TDCP_cipher._GetId: integer; begin Result:= GetId; end; function TDCP_cipher._GetAlgorithm: string; begin Result:= GetAlgorithm; end; function TDCP_cipher._GetMaxKeySize: integer; begin Result:= GetMaxKeySize; end; class function TDCP_cipher.GetId: integer; begin Result:= -1; end; class function TDCP_cipher.GetAlgorithm: string; begin Result:= ''; end; class function TDCP_cipher.GetMaxKeySize: integer; begin Result:= -1; end; class function TDCP_cipher.SelfTest: boolean; begin Result:= false; end; procedure TDCP_cipher.Init(const Key; Size: longword; InitVector: pointer); begin if fInitialized then Burn; if (Size <= 0) or ((Size and 3)<> 0) or (Size> longword(GetMaxKeySize)) then raise EDCP_cipher.Create('Invalid key size') else fInitialized:= true; end; procedure TDCP_cipher.InitStr(const Key: string; HashType: TDCP_hashclass); var Hash: TDCP_hash; Digest: pointer; begin if fInitialized then Burn; try GetMem(Digest,HashType.GetHashSize div 8); Hash:= HashType.Create(Self); Hash.Init; Hash.UpdateStr(Key); Hash.Final(Digest^); Hash.Free; if MaxKeySize< HashType.GetHashSize then begin Init(Digest^,MaxKeySize,nil); end else begin Init(Digest^,HashType.GetHashSize,nil); end; FillChar(Digest^,HashType.GetHashSize div 8,$FF); FreeMem(Digest); except raise EDCP_cipher.Create('Unable to allocate sufficient memory for hash digest'); end; end; procedure TDCP_cipher.Burn; begin fInitialized:= false; end; procedure TDCP_cipher.Reset; begin end; procedure TDCP_cipher.Encrypt(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_cipher.Decrypt(const Indata; var Outdata; Size: longword); begin end; function TDCP_cipher.EncryptStream(InStream, OutStream: TStream; Size: longword): longword; var Buffer: array[0..8191] of byte; i, Read: longword; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); Result:= 0; for i:= 1 to (Size div Sizeof(Buffer)) do begin Read:= InStream.Read(Buffer,Sizeof(Buffer)); Inc(Result,Read); Encrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; if (Size mod Sizeof(Buffer))<> 0 then begin Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer)); Inc(Result,Read); Encrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; end; function TDCP_cipher.DecryptStream(InStream, OutStream: TStream; Size: longword): longword; var Buffer: array[0..8191] of byte; i, Read: longword; begin dcpFillChar(Buffer, SizeOf(Buffer), 0); Result:= 0; for i:= 1 to (Size div Sizeof(Buffer)) do begin Read:= InStream.Read(Buffer,Sizeof(Buffer)); Inc(Result,Read); Decrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; if (Size mod Sizeof(Buffer))<> 0 then begin Read:= InStream.Read(Buffer,Size mod Sizeof(Buffer)); Inc(Result,Read); Decrypt(Buffer,Buffer,Read); OutStream.Write(Buffer,Read); end; end; function TDCP_cipher.EncryptString(const Str: string): string; begin SetLength(Result,Length(Str)); Encrypt(Str[1],Result[1],Length(Str)); Result:= Base64EncodeStr(Result); end; function TDCP_cipher.DecryptString(const Str: string): string; begin Result:= Base64DecodeStr(Str); Decrypt(Result[1],Result[1],Length(Result)); end; constructor TDCP_cipher.Create(AOwner: TComponent); begin inherited Create(AOwner); Burn; end; destructor TDCP_cipher.Destroy; begin if fInitialized then Burn; inherited Destroy; end; {** TDCP_blockcipher **********************************************************} procedure TDCP_blockcipher.InitKey(const Key; Size: longword); begin end; function TDCP_blockcipher._GetBlockSize: integer; begin Result:= GetBlockSize; end; class function TDCP_blockcipher.GetBlockSize: integer; begin Result:= -1; end; procedure TDCP_blockcipher.SetIV(const Value); begin end; procedure TDCP_blockcipher.GetIV(var Value); begin end; procedure TDCP_blockcipher.Encrypt(const Indata; var Outdata; Size: longword); begin case fCipherMode of cmCBC: EncryptCBC(Indata,Outdata,Size); cmCFB8bit: EncryptCFB8bit(Indata,Outdata,Size); cmCFBblock: EncryptCFBblock(Indata,Outdata,Size); cmOFB: EncryptOFB(Indata,Outdata,Size); cmCTR: EncryptCTR(Indata,Outdata,Size); end; end; function TDCP_blockcipher.EncryptString(const Str: string): string; begin SetLength(Result,Length(Str)); EncryptCFB8bit(Str[1],Result[1],Length(Str)); Result:= Base64EncodeStr(Result); end; function TDCP_blockcipher.DecryptString(const Str: string): string; begin Result:= Base64DecodeStr(Str); DecryptCFB8bit(Result[1],Result[1],Length(Result)); end; procedure TDCP_blockcipher.Decrypt(const Indata; var Outdata; Size: longword); begin case fCipherMode of cmCBC: DecryptCBC(Indata,Outdata,Size); cmCFB8bit: DecryptCFB8bit(Indata,Outdata,Size); cmCFBblock: DecryptCFBblock(Indata,Outdata,Size); cmOFB: DecryptOFB(Indata,Outdata,Size); cmCTR: DecryptCTR(Indata,Outdata,Size); end; end; procedure TDCP_blockcipher.EncryptECB(const Indata; var Outdata); begin end; procedure TDCP_blockcipher.DecryptECB(const Indata; var Outdata); begin end; procedure TDCP_blockcipher.EncryptCBC(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCBC(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCFB8bit(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCFB8bit(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCFBblock(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCFBblock(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptOFB(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptOFB(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.EncryptCTR(const Indata; var Outdata; Size: longword); begin end; procedure TDCP_blockcipher.DecryptCTR(const Indata; var Outdata; Size: longword); begin end; constructor TDCP_blockcipher.Create(AOwner: TComponent); begin inherited Create(AOwner); fCipherMode:= cmCBC; end; {** Helpher functions *********************************************************} procedure XorBlock(var InData1, InData2; Size: longword); var b1: PByteArray; b2: PByteArray; i: longword; begin b1 := @InData1; b2 := @InData2; for i := 0 to size-1 do b1[i] := b1[i] xor b2[i]; end; procedure dcpFillChar(out x; count: SizeInt; Value: Byte); begin {$HINTS OFF} FillChar(x, count, value); {$HINTS ON} end; procedure ZeroMemory(Destination: Pointer; Length: PtrUInt); begin FillChar(Destination^, Length, 0); end; procedure dcpFillChar(out x; count: SizeInt; Value: Char); begin {$HINTS OFF} FillChar(x, count, Value); {$HINTS ON} end; // Supposed to be an optimized version of XorBlock() using 32-bit xor procedure XorBlockEx(var InData1, InData2; Size: longword); var l1: PIntegerArray; l2: PIntegerArray; b1: PByteArray; b2: PByteArray; i: integer; c: integer; begin l1 := @inData1; l2 := @inData2; for i := 0 to size div sizeof(LongWord)-1 do l1[i] := l1[i] xor l2[i]; // the rest of the buffer (3 bytes) c := size mod sizeof(longWord); if c > 0 then begin b1 := @InData1; b2 := @InData2; for i := (size-c) to size-1 do b1[i] := b1[i] xor b2[i]; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/dcpconst.pas����������������������������������������������������0000644�0001750�0000144�00000006222�12573066072�021066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Constants for use with DCPcrypt ********************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPconst; interface {******************************************************************************} const { Component registration } DCPcipherpage = 'DCPciphers'; DCPhashpage = 'DCPhashes'; { ID values } DCP_rc2 = 1; DCP_sha1 = 2; DCP_rc5 = 3; DCP_rc6 = 4; DCP_blowfish = 5; DCP_twofish = 6; DCP_cast128 = 7; DCP_gost = 8; DCP_rijndael = 9; DCP_ripemd160 = 10; DCP_misty1 = 11; DCP_idea = 12; DCP_mars = 13; DCP_haval = 14; DCP_cast256 = 15; DCP_md5 = 16; DCP_md4 = 17; DCP_tiger = 18; DCP_rc4 = 19; DCP_ice = 20; DCP_thinice = 21; DCP_ice2 = 22; DCP_des = 23; DCP_3des = 24; DCP_tea = 25; DCP_serpent = 26; DCP_ripemd128 = 27; DCP_sha256 = 28; DCP_sha384 = 29; DCP_sha512 = 30; DCP_blake2s = 97; DCP_blake2sp = 98; DCP_crc32 = 99; {******************************************************************************} {******************************************************************************} implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/Docs/�����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�017443� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/dcpcrypt/Docs/Ciphers.html�����������������������������������������������0000644�0001750�0000144�00000042071�11652036011�021704� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <title>DCPcrypt v2: Users Guide - Ciphers

    Ciphers - TDCP_cipher

    All ciphers are inherited from the TDCP_cipher component either directly for stream ciphers (such as RC4) or via the TDCP_blockcipher component.

    The TDCP_cipher component implements key initialisation features and the basic encryption/decryption interface. Functions available are:

          property Initialized: boolean;
          property Id: integer;
          property Algorithm: string;
          property MaxKeySize: integer;
      
          class function SelfTest: boolean;
      
          procedure Init(const Key; Size: longword; InitVector: pointer); 
          procedure InitStr(const Key: string; HashType: TDCP_hashclass);
          procedure Burn; 
          procedure Reset;
          procedure Encrypt(const Indata; var Outdata; Size: longword); 
          procedure Decrypt(const Indata; var Outdata; Size: longword); 
          function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
          function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
          function EncryptString(const Str: string): string; 
          function DecryptString(const Str: string): string; 
        

    Example usage:


    Function descriptions

    property Initialized: boolean;

    Once key initialization has been performed this property is set to true, otherwise it is set to false. Calling Burn will immediately set this to false.

    property Id: integer;

    Every algorithm I implement gets given a unique ID number so that if I use several different algorithms within a program I can determine which one was used. This is a purely arbitrary numbering system.

    property Algorithm: string;

    This contains the name of the algorithm implemented within the component.

    property MaxKeySize: integer;

    This is the maximum size of key you can pass to the cipher (in bits!).

    class function SelfTest: boolean;

    In order to test whether the implementations have all been compiled correctly you can call the SelfTest function. This compares the results of several encryption/decryption operations with known results for the algorithms (so called test vectors). If all the tests are passed then true is returned. If ANY of the tests are failed then false is returned. You may want to run this function for all the components when you first install the DCPcrypt package and again if you modify any of the source files, you don't need to run this everytime your program is run. Note: this only performs a selection of tests, it is not exhaustive.

    procedure Init(const Key; Size: longword; InitVector: pointer);

    This procedure initializes the cipher with the keying material supplied in Key. The Size of the keying material is specified in BITS. The InitVector is a pointer to chaining information (only used for block ciphers). The variable that this points to should be equal to the block size of the algorithm. If nil is specified then (if necessary) an initialization vector is automatically generated from the key. Note: the method for generating automatic IVs is different from DCPcrypt v1.31, if this is a problem uncomment the DCPcrypt v1.31 compatibility mode line in DCPcrypt2.pas.

    Init example: use the hash of a string to initialize the cipher

      procedure TForm1.Button1Click(Sender: TObject);
      var
        Cipher: TDCP_rc4;
        Hash: TDCP_sha1;
        Digest: array[0..19] of byte;  // SHA-1 produces a 160bit (20byte) output
      begin
        Hash:= TDCP_sha1.Create(Self);
        Hash.Init;                     // initialize the hash
        Hash.UpdateStr(Edit1.Text);    // generate a hash of Edit1.Text
        Hash.Final(Digest);            // save the hash in Digest
        Hash.Free;
        Cipher:= TDCP_rc4.Create(Self);
        Cipher.Init(Digest,Sizeof(Digest)*8,nil);  // remember size is in BITS (hence sizeof*8)
        ...
        

    procedure InitStr(const Key: string; HashType: TDCP_hashclass);

    This procedure initializes the cipher with a hash of the key string using the specified hash type (in a way similar to the example above). To replicate the behaviour from DCPcrypt v2 Beta 1 use Cipher.InitStr(KeyStr,TDCP_sha1).

    InitStr example: prompt the user for a passphrase to initialize the cipher

      procedure TForm1.Button1Click(Sender: TObject);
      var
        Cipher: TDCP_rc4;
      begin
        Cipher:= TDCP_rc4.Create(Self);
        Cipher.InitStr(InputBox('Passphrase','Enter a passphrase',''),TDCP_sha1); // prompt for a passphrase
        ...
        

    procedure Burn;

    Once you have finished encrypting/decrypting all your data call Burn to erase all keying information. This is automatically called once the cipher is freed, however it is a good habit to call this procedure explicitly.

    procedure Reset;

    Stream ciphers (and block ciphers in chaining modes) generally store chaining information that is dependant on the information already encrypted. Consequently decrypting a block of information immediately after encrypting it won't result in the original information because when you called the decrypt procedure the chaining information was different from when you called the encrypt procedure. Hence use Reset to restore the chaining information to it's original state.

    Remember that calling EncryptString, DecryptString, EncryptStream and DecryptStream will also affect the chaining information.

    Reset example: encrypting and decrypting

      function TestCipher: boolean;
      const
        InData: array[0..9] of byte= ($01,$23,$45,$56,$67,$78,$89,$10,$AB,$FF);
      var
        Cipher: TDCP_rc4;
        Data: array[0..9] of byte;
      begin
        Cipher:= TDCP_rc4.Create(nil);
        Cipher.InitStr('Hello World',TDCP_sha1);   // initialize the cipher
        Cipher.Encrypt(InData,Data,Sizeof(Data));  // encrypt some known data
        Cipher.Decrypt(Data,Data,Sizeof(Data));    // now decrypt it
        Cipher.Burn;                               // clear keying information
        Cipher.Free;
        Result:= CompareMem(@InData,@Data,Sizeof(Data));  // compare input and output
      end;
        
    The above will ALWAYS result in false due to the chaining information.
      function TestCipher: boolean;
      const
        InData: array[0..9] of byte= ($01,$23,$45,$56,$67,$78,$89,$10,$AB,$FF);
      var
        Cipher: TDCP_rc4;
        Data: array[0..9] of byte;
      begin
        Cipher:= TDCP_rc4.Create(nil);
        Cipher.InitStr('Hello World',TDCP_sha1);   // initialize the cipher
        Cipher.Encrypt(InData,Data,Sizeof(Data));  // encrypt some known data
        Cipher.Reset;                              // reset chaining information
        Cipher.Decrypt(Data,Data,Sizeof(Data));    // now decrypt it
        Cipher.Burn;                               // clear keying information
        Cipher.Free;
        Result:= CompareMem(@InData,@Data,Sizeof(Data));  // compare input and output
      end;
        
    The above should always return true.

    procedure Encrypt(const Indata; var Outdata; Size: longword);

    Encrypt Size bytes from Indata and place it in Outdata. Block ciphers encrypt the data using the method specified by the CipherMode property. Also see the notes on Reset.

    procedure Decrypt(const Indata; var Outdata; Size: longword);

    Decrypt Size bytes from Indata and place it in Outdata. Block ciphers decrypt the data using the method specified by the CipherMode property. Also see the notes on Reset.

    function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;

    Encrypt Size bytes from the InStream and place it in the OutStream, returns the number of bytes read from the InStream. Encryption is done by calling the Encrypt procedure. Also see the notes on Reset.

    function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;

    Decrypt Size bytes from the InStream and place it in the OutStream, returns the number of bytes read from the InStream. Decryption is done by calling the Decrypt procedure. Also see the notes on Reset.

    function EncryptString(const Str: string): string;

    Encrypt the string Str then Base64 encode it and return the result. For stream ciphers the Encrypt procedure is called to do the encryption, for block ciphers the CFB8bit method is always used. Base64 encoding is used to ensure that the output string doesn't contain non-printing characters.

    function DecryptString(const Str: string): string;

    Base64 decode the string then decrypt it and return the result. For stream ciphers the Decrypt procedure is called to do the decryption, for block ciphers the CFB8bit method is always used.


    Example 1: String encryption

    This example shows how you can encrypt the contents of a TMemo and leave the contents printable.

      procedure TForm1.btnEncryptClick(Sender: TObject);
      var
        i: integer;
        Cipher: TDCP_rc4;
        KeyStr: string;
      begin
        KeyStr:= '';
        if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
        begin
          Cipher:= TDCP_rc4.Create(Self);
          Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
          for i:= 0 to Memo1.Lines.Count-1 do       // encrypt the contents of the memo
            Memo1.Lines[i]:= Cipher.EncryptString(Memo1.Lines[i]);
          Cipher.Burn;
          Cipher.Free;
        end;
      end;
      
      procedure TForm1.btnDecryptClick(Sender: TObject);
      var
        i: integer;
        Cipher: TDCP_rc4;
        KeyStr: string;
      begin
        KeyStr:= '';
        if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
        begin
          Cipher:= TDCP_rc4.Create(Self);
          Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
          for i:= 0 to Memo1.Lines.Count-1 do       // decrypt the contents of the memo
            Memo1.Lines[i]:= Cipher.DecryptString(Memo1.Lines[i]);
          Cipher.Burn;
          Cipher.Free;
        end;
      end;
        

    Example 2: File encryption

    This example shows how you can encrypt the contents of a file, takes the input and output file names from two edit boxes: boxInputFile and boxOutputFile.

      procedure TForm1.btnEncryptClick(Sender: TObject);
      var
        Cipher: TDCP_rc4;
        KeyStr: string;
        Source, Dest: TFileStream;
      begin
        KeyStr:= '';
        if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
        begin
          try
            Source:= TFileStream.Create(boxInputFile.Text,fmOpenRead);
            Dest:= TFileStream.Create(boxOutputFile.Text,fmCreate);
            Cipher:= TDCP_rc4.Create(Self);
            Cipher.InitStr(KeyStr,TDCP_sha1);              // initialize the cipher with a hash of the passphrase
            Cipher.EncryptStream(Source,Dest,Source.Size); // encrypt the contents of the file
            Cipher.Burn;
            Cipher.Free;
            Dest.Free;
            Source.Free;
            MessageDlg('File encrypted',mtInformation,[mbOK],0);
          except
            MessageDlg('File IO error',mtError,[mbOK],0);
          end;
        end;
      end;
      
      procedure TForm1.btnDecryptClick(Sender: TObject);
      var
        Cipher: TDCP_rc4;
        KeyStr: string;
        Source, Dest: TFileStream;
      begin
        KeyStr:= '';
        if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
        begin
          try
            Source:= TFileStream.Create(boxInputFile.Text,fmOpenRead);
            Dest:= TFileStream.Create(boxOutputFile.Text,fmCreate);
            Cipher:= TDCP_rc4.Create(Self);
            Cipher.InitStr(KeyStr,TDCP_sha1);              // initialize the cipher with a hash of the passphrase
            Cipher.DecryptStream(Source,Dest,Source.Size); // decrypt the contents of the file
            Cipher.Burn;
            Cipher.Free;
            Dest.Free;
            Source.Free;
            MessageDlg('File decrypted',mtInformation,[mbOK],0);
          except
            MessageDlg('File IO error',mtError,[mbOK],0);
          end;
        end;
      end;
        

    Example 3: General encryption

    This hypothetical example shows how you might encrypt a packet of information before transmission across a network.

      type
        TSomePacket= record
          Date: double;
          ToUserID: integer;
          FromUserID: integer;
          MsgLen: integer;
          Msg: string;
        end;
        
      procedure EncryptPacket(Cipher: TDCP_cipher; var Packet: TSomePacket);
      // encrypt the information packet with the cipher
      // if the cipher isn't initialized then prompt for passphrase
      begin
        if Cipher= nil then
          raise Exception.Create('Cipher hasn''t been created!')
        else
        begin
          if not Cipher.Initialized then        // check the cipher has been initialized
            Cipher.InitStr(InputBox('Passphrase','Enter passphrase',''),TDCP_sha1);
          if Cipher is TDCP_blockcipher then    // if a block cipher use CFB 8bit as encrypting small packets
            TDCP_blockcipher(Cipher).CipherMode:= cmCFB8bit; 
          // encrypt the record part by part, could do this in one go if it was a packed record
          Cipher.Encrypt(Packet.Date,Packet.Date,Sizeof(Packet.Date));  
          Cipher.Encrypt(Packet.ToUserID,Packet.ToUserID,Sizeof(Packet.ToUserID));
          Cipher.Encrypt(Packet.FromUserID,Packet.FromUserID,Sizeof(Packet.FromUserID));
          Cipher.Encrypt(Packet.MsgLen,Packet.MsgLen,Sizeof(Packet.MsgLen));
          Cipher.Encrypt(Packet.Msg[1],Packet.Msg[1],Length(Packet.Msg));  // slightly different for strings
          // don't bother resetting the cipher, instead keep the chaining information
        end;  
      end;
        

     

    Index, Block Ciphers, Hashes

     

    DCPcrypt is copyrighted © 1999-2002 David Barton.
    All trademarks are property of their respective owners.
    doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/0000755000175000001440000000000012675717723021245 5ustar alexxusersdoublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_MD4.bmp0000644000175000001440000000062611652036011023121 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_RIPEMD128.bmp0000644000175000001440000000062611652036011023750 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA384.bmp0000644000175000001440000000062611652036011023407 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_MD5.bmp0000644000175000001440000000062611652036011023122 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_TIGER.bmp0000644000175000001440000000062611652036011023407 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_RIPEMD160.bmp0000644000175000001440000000062611652036011023744 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_HAVAL.bmp0000644000175000001440000000062611652036011023370 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA512.bmp0000644000175000001440000000062611652036011023400 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA256.bmp0000644000175000001440000000062611652036011023405 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPhashes/TDCP_SHA1.bmp0000644000175000001440000000062611652036011023231 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/Index.html0000644000175000001440000002532411652036011021360 0ustar alexxusers DCPcrypt v2: Users Guide - Index

    DCPcrypt Cryptographic Component Library v2 Beta 3
    Copyright © 1999-2002 David Barton
    http://www.cityinthesky.co.uk/
    crypto@cityinthesky.co.uk

    Introduction

    DCPcrypt is a collection of cryptographic components for the Borland Delphi(tm), C++ Builder(tm) and Kylix(tm) programming languages. The supported versions are Delphi 4, 5, 6 and 7, C++ Builder (3?), 4, 5, 6 and Kylix 1 (untested) and 2.

    The idea behind DCPcrypt is that it should be possible to "drop in" any algorithm implementation to replace another with minimum or no code changes. To aid in this goal all cryptographic components are descended from one of several base classes, TDCP_cipher for encryption algorithms and TDCP_hash for message digest algorithms.

    DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. However, I am currently a student and if you are making money from my software I would really appreciate a donation of some sort, whether financial or a license for the software you develop (or if anyone wants to sponsor a Mathematical Modelling (Masters) student for their final year...). Please note THIS IS NOT COMPULSORY IN ANY WAY. See http://www.cityinthesky.co.uk/cryptography.html for details on donations.

    This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative.

    If you maintain a website then a link to my page at http://www.cityinthesky.co.uk/ would be great!

     

    What's New

    Changes since DCPcrypt v2 Beta 2:

    • Corrected C++ Builder compilation problem.

    Changes since DCPcrypt v2 Beta 1:

    • Renamed source code files for hashes and ciphers to DCPxxx.pas
    • Change the format of Cipher.InitStr so that the hash algorithm used to generate the key is explicitly specified. In order to get the same functionality as before, use TDCP_sha1. e.g. Cipher.InitStr('Hello World',TDCP_sha1);
    • Block ciphers are now inherited from an intermediate component that implements the block size specific chaining mode encryption routines.
    • Remove the internal component registration, it was more hassle than it was worth. If there is a demand for this to be put back then I might...
    • Added the full range of operation modes for Haval. By changing the defines at the top of DCPhaval.pas you can specify the number of passes and the output hash size.
    • Added the Tiger hash algorithm (192bit digest).
    • Changed the name of the file containing TDCP_ripemd160 for consistency to DCPripemd160 from DCPrmd160.
    • GOST no longer appears on the component palette pending verifying what the actual standard is (the code is still included however).
    • Added the RipeMD-128 hash algorithm (128bit digest).
    • Added the Serpent block cipher (AES finalist).
    • Added the SHA-256,384,512 hash algorithms (256, 384, 512bit digest respectively).
    • Added CTR chaining mode to all block ciphers.

     

    Installation

    Delphi Open the appropriate package, DCPdelphiX.dpk where X is your version of Delphi (either 4, 5 or 6). Then press the install button.
    C++ Builder Create a new design time package and add all the .pas files from the DCPcrypt2.zip archive including all those in the Ciphers and Hashes subdirectories. Then press the install button.
    Kylix Open the DCPkylix.dpk package and then press the install button (note: Kylix 1 users may need to create a new package as with C++ Builder as this is a Kylix 2 package).

    You may need to add the directory containing DCPcrypt (and the Ciphers and Hashes subdirectories) to your library search path (found under Environment Options).

    Once installed you will find two extra pages of components on your component palette, namely DCPciphers and DCPhashes. You can now place these components onto the form of your application to start using the algorithms.

     

    Usage

    Please note that an appreciation of the basic principles of encryption/decryption and key management is needed to ensure the correct usage of the ciphers implemented within this package. A good introduction on this subject is provided by Bruce Schneier's "Applied Cryptography" (ISBN: 0-471-11709-9) also see the NIST publication SP800-38A for information on the block cipher chaining modes.

    • Ciphers - the basic building block of DCPcrypt, the TDCP_cipher component.
    • Block Ciphers - the base of all block ciphers, the TDCP_blockcipher component.
    • Hashes - the base of all hash algorithms, the TDCP_hash component.

    DCPcrypt v2 contains the following ciphers and hash algorithms:

    Ciphers
    Name Patents Block Size Max Key Size*
    Blowfish None 64 bits 448 bits
    Cast-128 None 64 bits 128 bits
    Cast-256 Patented? 128 bits 256 bits
    DES None 64 bits** 64 bits
    3DES None 64 bits 192 bits
    Ice None? 64 bits 64 bits
    Thin Ice None? 64 bits 64 bits
    Ice 2 None? 64 bits 128 bits
    IDEA Free for non-commercial use 64 bits 128 bits
    MARS Patented? 128 bits 1248 bits
    Misty1 Free for non-commercial use 64 bits 128 bits
    RC2 None 64 bits 1024 bits
    RC4 None N/A 2048 bits
    RC5 Patented 64 bits 2048 bits
    RC6 Patented 128 bits 2048 bits
    Rijndael (AES) None 128 bits 256 bits
    Serpent None 128 bits 256 bits
    TEA None 64 bits 128 bits
    Twofish None 128 bits 256 bits

    * although the quoted maximum key size may extremely large it doen't mean that the algorithm is secure to the same level.
    ** a 64bit key is used for DES then every 8th bit is discarded (parity) so the effective size is 56 bits.

    Hash Algorithms
    Name Patents Digest Size
    Haval None 128, 160, 192, 224, 256 bits*
    MD4 None 128 bits
    MD5 None 128 bits
    RipeMD-128 None 128 bits
    RipeMD-160 None 160 bits
    SHA-1 None 160 bits
    SHA-256 None 256 bits
    SHA-384 None 384 bits
    SHA-512 None 512 bits
    Tiger None 192 bits

    * The different digest sizes of Haval can be accessed by uncommenting the $defines at the start of DCPhaval.pas.

     

    Contact

    I appreciate knowing what DCPcrypt is being used for and also if you have any queries or bug reports please email me at crypto@cityinthesky.co.uk.

     

    DCPcrypt is copyrighted © 1999-2003 David Barton.
    All trademarks are property of their respective owners.
    doublecmd-0.7.1/components/dcpcrypt/Docs/MIT_license.txt0000644000175000001440000000210612014201074022304 0ustar alexxusersThe MIT License Copyright (c) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/0000755000175000001440000000000012675717723021427 5ustar alexxusersdoublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_MISTY1.bmp0000644000175000001440000000062611652036011023705 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_RC6.bmp0000644000175000001440000000062611652036011023311 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_SERPENT.bmp0000644000175000001440000000062611652036011024037 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_THINICE.bmp0000644000175000001440000000062611652036011024002 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_RC4.bmp0000644000175000001440000000062611652036011023307 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_BLOWFISH.bmp0000644000175000001440000000062611652036011024134 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_DES.bmp0000644000175000001440000000062611652036011023332 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_ICE.bmp0000644000175000001440000000062611652036011023317 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_GOST.bmp0000644000175000001440000000062611652036011023473 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_IDEA.bmp0000644000175000001440000000062611652036011023421 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_RC5.bmp0000644000175000001440000000062611652036011023310 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_3DES.bmp0000644000175000001440000000062611652036011023415 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_CAST128.bmp0000644000175000001440000000062611652036011023704 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_RC2.bmp0000644000175000001440000000062611652036011023305 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_CAST256.bmp0000644000175000001440000000062611652036011023706 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_MARS.bmp0000644000175000001440000000062611652036011023461 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_TWOFISH.bmp0000644000175000001440000000062611652036011024042 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_TEA.bmp0000644000175000001440000000062611652036011023330 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_ICE2.bmp0000644000175000001440000000062611652036011023401 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/DCPciphers/TDCP_RIJNDAEL.bmp0000644000175000001440000000062611652036011024107 0ustar alexxusersBMv( doublecmd-0.7.1/components/dcpcrypt/Docs/BlockCiphers.html0000644000175000001440000001604711652036011022663 0ustar alexxusers DCPcrypt v2: Users Guide - Block Ciphers

    DCPcrypt Cryptographic Component Library v2
    Copyright © 1999-2002 David Barton
    http://www.cityinthesky.co.uk/
    crypto@cityinthesky.co.uk

    Block Ciphers - TDCP_blockcipher

    All block ciphers are inherited from the TDCP_blockcipher component via either the TDCP_blockcipher64 and TDCP_blockcipher128 components (the latter implement the block size specific code).

    The TDCP_blockcipher component extends the TDCP_cipher component to provide chaining mode functions. Functions available are:

          property Initialized: boolean;
          property Id: integer;
          property Algorithm: string;
          property MaxKeySize: integer;
          property BlockSize: integer;
          property CipherMode: TDCP_ciphermode;
      
          class function SelfTest: boolean;
     
          procedure SetIV(const Value);
          procedure GetIV(var Value);
     
          procedure Init(const Key; Size: longword; InitVector: pointer); 
          procedure InitStr(const Key: string; HashType: TDCP_hashclass);
          procedure Burn; 
          procedure Reset;
          procedure Encrypt(const Indata; var Outdata; Size: longword); 
          procedure Decrypt(const Indata; var Outdata; Size: longword); 
          function EncryptStream(InStream, OutStream: TStream; Size: longword): longword;
          function DecryptStream(InStream, OutStream: TStream; Size: longword): longword;
          function EncryptString(const Str: string): string; 
          function DecryptString(const Str: string): string; 
          procedure EncryptECB(const Indata; var Outdata);
          procedure DecryptECB(const Indata; var Outdata);
          procedure EncryptCBC(const Indata; var Outdata; Size: longword);
          procedure DecryptCBC(const Indata; var Outdata; Size: longword);
          procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword);
          procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword);
          procedure EncryptCFBblock(const Indata; var Outdata; Size: longword);
          procedure DecryptCFBblock(const Indata; var Outdata; Size: longword);
          procedure EncryptOFB(const Indata; var Outdata; Size: longword);
          procedure DecryptOFB(const Indata; var Outdata; Size: longword);
          procedure EncryptCTR(const Indata; var Outdata; Size: longword);
          procedure DecryptCTR(const Indata; var Outdata; Size: longword);
        

    Function descriptions

    property BlockSize: integer;

    This contains the block size of the cipher in BITS.

    property CipherMode: TDCP_ciphermode;

    This is the current chaining mode used when Encrypt is called. The available modes are:

    • cmCBC - Cipher block chaining.
    • cmCFB8bit - 8bit cipher feedback.
    • cmCFBblock - Cipher feedback (using the block size of the algorithm).
    • cmOFB - Output feedback.
    • cmCTR - Counter.

    Each chaining mode has it's own pro's and cons. See any good book on cryptography or the NIST publication SP800-38A for details on each.

    procedure SetIV(const Value);

    Use this procedure to set the current chaining mode information to Value. This variable should be the same size as the block size. When Reset is called subsequent to this, the chaining information will be set back to Value.

    procedure GetIV(var Value);

    This returns in Value the current chaining mode information, to get the initial chaining mode information you need to call Reset before calling GetIV. The variable passed in Value must be at least the same size as the block size otherwise you will get a buffer overflow.

    procedure EncryptCBC(const Indata; var Outdata; Size: longword);
    procedure DecryptCBC(const Indata; var Outdata; Size: longword);
    procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword);
    procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword);
    procedure EncryptCFBblock(const Indata; var Outdata; Size: longword);
    procedure DecryptCFBblock(const Indata; var Outdata; Size: longword);
    procedure EncryptOFB(const Indata; var Outdata; Size: longword);
    procedure DecryptOFB(const Indata; var Outdata; Size: longword);
    procedure EncryptCTR(const Indata; var Outdata; Size: longword);
    procedure DecryptCTR(const Indata; var Outdata; Size: longword);

    These procedures encrypt/decrypt Size bytes of data from Indata and places the result in Outdata. These all employ chaining mode methods of encryption/decryption and so may need to be used inconjunction with Reset. The CBC method uses short block encryption as specified in Bruce Schneier's "Applied Cryptography" for data blocks that are not multiples of the block size.

     

    Index, Ciphers, Hashes

     

    DCPcrypt is copyrighted © 1999-2002 David Barton.
    All trademarks are property of their respective owners.
    doublecmd-0.7.1/components/dcpcrypt/Docs/Hashes.html0000644000175000001440000001443211652036011021522 0ustar alexxusers DCPcrypt v2: Users Guide - Hash Algorithms

    DCPcrypt Cryptographic Component Library v2
    Copyright © 1999-2002 David Barton
    http://www.cityinthesky.co.uk/
    crypto@cityinthesky.co.uk

    Hash Algorithms - TDCP_hash

    All hashes are derived from the TDCP_hash component. It provides a range of functions to allow the hashing of virtually every type of data.

    Functions available are:

          property Initialized: boolean;
          property Id: integer;
          property Algorithm: string;
          property HashSize: integer;
      
          class function SelfTest: boolean; 
      
          procedure Init; 
          procedure Final(var Digest); 
          procedure Burn; 
      
          procedure Update(const Buffer; Size: longword); 
          procedure UpdateStream(Stream: TStream; Size: longword);
          procedure UpdateStr(const Str: string);
        

    Example usage:


    property Initialized: boolean;

    This is set to true after Init has been called.

    property Id: integer;

    Every algorithm I implement gets given a unique ID number so that if I use several different algorithms within a program I can determine which one was used. This is a purely arbitrary numbering system.

    property Algorithm: string;

    This is the name of the algorithm implemented in the component.

    property HashSize: integer;

    This is the size of the output of the hash algorithm in BITS.

    class function SelfTest: boolean;

    In order to test whether the implementations have all been compiled correctly you can call the SelfTest function. This compares the results of several hash operations with known results for the algorithms (so called test vectors). If all the tests are passed then true is returned. If ANY of the tests are failed then false is returned. You may want to run this function for all the components when you first install the DCPcrypt package and again if you modify any of the source files, you don't need to run this everytime your program is run. Note: this only performs a selection of tests, it is not exhaustive.

    procedure Init;

    Call this procedure to initialize the hash algorithm, this must be called before using the Update procedure.

    procedure Final(var Digest);

    This procedure returns the final message digest (hash) in Digest. This variable must be the same size as the hash size. This procedure also calls Burn to clear any stored information.

    procedure Burn;

    Call this procedure if you want to abort the hashing operation (normally Final is used). This clears all information stored within the hash. Before the hash can be used again Init must be called.

    procedure Update(const Buffer; Size: longword);

    This procedure hashes Size bytes of Buffer. To get the hash result call Final.

    Update example:

      procedure HashBuffer(const Buffer; Size: longint; var Output);
      var
        Hash: TDCP_ripemd160;
      begin
        Hash:= TDCP_ripemd160.Create(nil);
        Hash.Init;
        Hash.Update(Buffer,Size);
        Hash.Final(Output);
        Hash.Free;
      end;
        

    procedure UpdateStream(Stream: TStream; Size: longword);

    This procedure hashes Size bytes from Stream. To get the hash result call Final.

    procedure UpdateStr(const Str: string);

    This procedure hashes the string Str. To get the hash result call Final.


    Example 1 - File hashing

    This example shows how you can hash the contents of a file

      procedure TForm1.Button1Click(Sender: TObject);
      var
        Hash: TDCP_ripemd160;
        Digest: array[0..19] of byte;  // RipeMD-160 produces a 160bit digest (20bytes)
        Source: TFileStream;
        i: integer;
        s: string;
      begin
        Source:= nil;
        try
          Source:= TFileStream.Create(Edit1.Text,fmOpenRead);  // open the file specified by Edit1
        except
          MessageDlg('Unable to open file',mtError,[mbOK],0);
        end;
        if Source <> nil then
        begin
          Hash:= TDCP_ripemd160.Create(Self);          // create the hash
          Hash.Init;                                   // initialize it
          Hash.UpdateStream(Source,Source.Size);       // hash the stream contents
          Hash.Final(Digest);                          // produce the digest
          Source.Free;
          s:= '';
          for i:= 0 to 19 do
            s:= s + IntToHex(Digest[i],2);
          Edit2.Text:= s;                              // display the digest
        end;
      end;
        

     

    Index, Ciphers, Block Ciphers

     

    DCPcrypt is copyrighted © 1999-2002 David Barton.
    All trademarks are property of their respective owners.
    doublecmd-0.7.1/components/dcpcrypt/Docs/osi-certified-120x100.png0000644000175000001440000001551711652036011023573 0ustar alexxusersPNG  IHDRxdcetIME,k59IDATx}ytwUwLϞd$@@E\P6]{W ЏEP,-ʚe!Lf魾?wM ΄Nt=US~ꩥk BG䁵[p(>Q}DG %m@PEY^^q WjJE)J%lo½KtLՙ_/WTT^^:nG$!!ajRm1Z-i]KKHq o^vSąreB '0! @! ȋ< @AJ?ўdw=Z"B?~hYmc-Z&*T (#q0KOX;:8oԛze|faQ$վ rʯNIi(R(u<+01R`BK#~_[>h D=O}ƦFN}@Kר$Đ@A!8D<}\=M!C<"[;؎D8.Ԕ!Moґ$A OTy]n;;s̬OLDZv*ۍl0^o041sr\vyO{|L"4{O߯Uʘ&¥kŷ!SI7vnYݖQ^f;ha<ڶZ}lI )6@k9RS>{Y="M+I4˱ӖLݾdKys#)!iݼG]G/%5n4TQb "WL\w9J$zW5z۬NT!>}Nb11]zW]^WԴG#R,=b5)TYD0KXS/QS luﮙsA) Jo$ 0tJ~ktFW^4br! "GdULW#^'z}lt1yF@{߁R Օ+6/-G>XΘWǑHh3e4͗?~_#0D:ЙCX%HR%tNsODh IkKxIQ+rBq)0bBiuGw:}We \:u?kmnX.H q5+ 0y$ Lj5GJ#:A;q'e'ݜ!F?}~%Q BVRf6MCPSaP!;.L5`)Y][E pġ藜\nKQTĎzjkKU6u.IHl%QRőTssniPU뮨 *B8hHT }wר5/Wn\qe^ʹ8Ka*dU8߰<}0rDG3`2 $!&xa IiLv9#Tx- l2lϮ-ɡ}0_#x)A#8A]Pa<(` 6TA""D'TJ "Bꔐz6AcVX?_cPj$$"'($sRHJGD6jɖd >T tfCن廃e83ExZTTzbzh YiY~9P,I@rV^;y!`c]~gLy0!R]NFm2L 7/z7fԥ\Sx1Ҿ.ё/Ӡ7l1u9$w Ceu֗GN)),i5ʅVtgQ!gyPa_T~C|nbXZp%nPG_[ik._}YlNWo"#2V^WrD ⑂!0a,e\1KOSj'\ CJIjKBG;0eL.1!>b1:wq~g 0㤂l8hdfXm$JU/'{$KZbM{t8ޗ`kXԌ>k^o6 oԺ?6aDJk05>/:}dQ1ĉ!?K< =X?kyzWI (guNwm t)^ U諌SR7iQk &]"DtSkZguލ+b8z]n=6 \Ԁ$IV3,B~[ygw)+,^wJ6s-4mr؝#\^wDA>J?PBe|5 |)!6! ' oz}ކc6/Tr>3ֶСWv/fZmHH@#4df.}m }^~`ۡ3$$y}޷?}r?UaUwDĐϽ9id~y.~ >Ⱦ0v@) 66]k|7?3jiߟX1,ze{Sʚmvk9~Q i5w9deO=룭G]. "|niPC վ}ڦ]x$BT;w4ɜu:ssn~ͣgA'x75s#ϭ?E@ (!p8hu493[K恅c3b[咕VN55c3p1륆Vy@`wFjTH@kqܴ'.-!쁵uCf=3m+l3o?Mܻg>PC ?[>uJV>15 3O;ֳZH;+]4MwLK<=d'TT\H*ɒ>] K{YU)Uշ~]ٺOgeu%)Z\E4^k߶zZ[W,t4*W=h4O|z٩ތ߮PZ띴Scjr7iZRA{aﰹ'cm]{7Z/i+ZNUmUG<^E 8DPqO-ږۊaئloŬ3?È^ßL߇F{h^WpgѶ 5Dj1;lsD?K %':J݀|ݺu߿?I%m6۞={Ν;G4ayyyEEE¢(8qcR B;wd'hjtT\xϟo6Geee-7lؐ&̜͛7M&a$Ij7l:tAرcV-;CaΜ9#_ϙ3'6!֨QJJJv8q /PWw^EQl4gϞSN_ɓnݺ3 zѵkמ={d21_ зo߽{߿eɓ'*++yJ5{lVf? qyWՁ/[,999L:!vcbb:ubŊӧO{< xh$I|Wv2p?rE 4H^lٲE$PyyyrrlF۷Bعs}\_~eРA8?hO?Եk6ߕ?}ߞh7o^~!4o<CT*0LLL AGm.@4AÆ EQ<}tZZZ+**|> }% gV\4iԺxg*z}-[555~_N~].rl6so555A*++baY)%%ѣyvn֬BðZ ϗݿR]] 0UUUr!BB;Wj4@^@bbbNNαcm|Z֛L)SL2a+W>}6mr8UV͞=bV7NQ@AB $P &_ 6iժU֭ -"Ir_"IB[ A,*I0-<m(k׮]v}ǎ;tPh#ѷ\780SSS}>CKL8QjJƴFKju$I6m*.2C>t{y9J8 t;/f*6EУG6~6U$)O/oNhsz-P*#F-XaǏ;Vv[Jrm۶ 8pǎ_-[&(ϝ;W|dTUU5 Y9ŋS;P(,KeeebbbΝk~f:TnZ{!ښTh/==y9sȒ.]j233͒zdX;&)++饗Bz(-YjBr5ɚW^,\PD,^>+++++8YyQ,$YZZ*/;v8p]~sssz0 *qĉ6id52=fqw H6oBkʯȑ# qɒ%!IN {l޽{7Kaaa2NSL :999)))@t<(7ѣG͜9SY`ѢE*j3f8-|g}699YP`222Fx_t]rrرcSSS 0L՚L{lɒ%'Nlyyy{G[;܁Ο?O#.]yGv/\@QԸqV\ٽ{w9uz0t>Sݻc!y_~y-zaŋm6-Z~~ 6eʔ Re6KJJYeYVcv=$r!3n_F %':JOtp(>QAHIENDB`doublecmd-0.7.1/components/dcpcrypt/Hashes/0000755000175000001440000000000012675717723017766 5ustar alexxusersdoublecmd-0.7.1/components/dcpcrypt/Hashes/dcphaval.pas0000644000175000001440000003656612014201074022243 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of Haval ********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPhaval; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_haval= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..7] of DWord; HashBuffer: array[0..127] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; { Choose how many passes (previous versions of DCPcrypt uses 5 passes) } { ONLY UNCOMMENT ONE! } //{$DEFINE PASS3} //{$DEFINE PASS4} {$DEFINE PASS5} { Choose digest length (previous versions of DCPcrypt uses 256bits) } { ONLY UNCOMMENT ONE! } //{$DEFINE DIGEST128} //{$DEFINE DIGEST160} //{$DEFINE DIGEST192} //{$DEFINE DIGEST224} {$DEFINE DIGEST256} {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_haval.Compress; var t7, t6, t5, t4, t3, t2, t1, t0: DWord; W: array[0..31] of DWord; Temp: dword; begin dcpFillChar(W, SizeOf(W), 0); t0:= CurrentHash[0]; t1:= CurrentHash[1]; t2:= CurrentHash[2]; t3:= CurrentHash[3]; t4:= CurrentHash[4]; t5:= CurrentHash[5]; t6:= CurrentHash[6]; t7:= CurrentHash[7]; Move(HashBuffer,W,Sizeof(W)); {$IFDEF PASS3} {$INCLUDE DCPhaval3.inc} {$ELSE} {$IFDEF PASS4} {$INCLUDE DCPhaval4.inc} {$ELSE} {$INCLUDE DCPhaval5.inc} {$ENDIF} {$ENDIF} Inc(CurrentHash[0],t0); Inc(CurrentHash[1],t1); Inc(CurrentHash[2],t2); Inc(CurrentHash[3],t3); Inc(CurrentHash[4],t4); Inc(CurrentHash[5],t5); Inc(CurrentHash[6],t6); Inc(CurrentHash[7],t7); FillChar(W,Sizeof(W),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_haval.GetHashSize: integer; begin {$IFDEF DIGEST128} Result:= 128; {$ELSE} {$IFDEF DIGEST160} Result:= 160; {$ELSE} {$IFDEF DIGEST192} Result:= 192; {$ELSE} {$IFDEF DIGEST224} Result:= 224; {$ELSE} Result:= 256; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} end; class function TDCP_haval.GetId: integer; begin Result:= DCP_haval; end; class function TDCP_haval.GetAlgorithm: string; begin Result:= 'Haval ('; {$IFDEF DIGEST128} Result:= Result+'128bit, '; {$ELSE} {$IFDEF DIGEST160} Result:= Result+'160bit, '; {$ELSE} {$IFDEF DIGEST192} Result:= Result+'192bit, '; {$ELSE} {$IFDEF DIGEST224} Result:= Result+'224bit, '; {$ELSE} Result:= Result+'256bit, '; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$IFDEF PASS3} Result:= Result+'3 passes)'; {$ELSE} {$IFDEF PASS4} Result:= Result+'4 passes)'; {$ELSE} Result:= Result+'5 passes)'; {$ENDIF} {$ENDIF} end; class function TDCP_haval.SelfTest: boolean; {$IFDEF PASS3} {$IFDEF DIGEST128} const Test1Out: array[0..15] of byte= ($1B,$DC,$55,$6B,$29,$AD,$02,$EC,$09,$AF,$8C,$66,$47,$7F,$2A,$87); var TestHash: TDCP_haval; TestOut: array[0..15] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr(''); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} {$IFDEF DIGEST160} const Test1Out: array[0..19] of byte= ($5E,$16,$10,$FC,$ED,$1D,$3A,$DB,$0B,$B1, $8E,$92,$AC,$2B,$11,$F0,$BD,$99,$D8,$ED); var TestHash: TDCP_haval; TestOut: array[0..19] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF PASS4} {$IFDEF DIGEST192} const Test1Out: array[0..23] of byte= ($74,$AA,$31,$18,$2F,$F0,$9B,$CC,$E4,$53,$A7,$F7, $1B,$5A,$7C,$5E,$80,$87,$2F,$A9,$0C,$D9,$3A,$E4); var TestHash: TDCP_haval; TestOut: array[0..23] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('HAVAL'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} {$IFDEF DIGEST224} const Test1Out: array[0..27] of byte= ($14,$4C,$B2,$DE,$11,$F0,$5D,$F7,$C3,$56,$28,$2A,$3B,$48, $57,$96,$DA,$65,$3F,$6B,$70,$28,$68,$C7,$DC,$F4,$AE,$76); var TestHash: TDCP_haval; TestOut: array[0..27] of byte; begin TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('0123456789'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Free; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF DIGEST256} const Test1Out: array[0..31] of byte= ($1A,$1D,$C8,$09,$9B,$DA,$A7,$F3,$5B,$4D,$A4,$E8,$05,$F1,$A2,$8F, $EE,$90,$9D,$8D,$EE,$92,$01,$98,$18,$5C,$BC,$AE,$D8,$A1,$0A,$8D); Test2Out: array[0..31] of byte= ($C5,$64,$7F,$C6,$C1,$87,$7F,$FF,$96,$74,$2F,$27,$E9,$26,$6B,$68, $74,$89,$4F,$41,$A0,$8F,$59,$13,$03,$3D,$9D,$53,$2A,$ED,$DB,$39); var TestHash: TDCP_haval; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_haval.Create(nil); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; {$ELSE} begin Result:= true; {$ENDIF} {$ENDIF} {$ENDIF} end; procedure TDCP_haval.Init; begin Burn; CurrentHash[0]:= $243F6A88; CurrentHash[1]:= $85A308D3; CurrentHash[2]:= $13198A2E; CurrentHash[3]:= $03707344; CurrentHash[4]:= $A4093822; CurrentHash[5]:= $299F31D0; CurrentHash[6]:= $082EFA98; CurrentHash[7]:= $EC4E6C89; fInitialized:= true; end; procedure TDCP_haval.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_haval.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_haval.Final(var Digest); {$IFNDEF DIGEST256} {$IFNDEF DIGEST224} var temp: dword; {$ENDIF} {$ENDIF} begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 118 then Compress; {$IFDEF PASS3} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (3 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF PASS4} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (4 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ELSE} {$IFDEF DIGEST128} HashBuffer[118]:= ((128 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (2128 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST160} HashBuffer[118]:= ((160 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (160 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST192} HashBuffer[118]:= ((192 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (192 shr 2) and $FF; {$ELSE} {$IFDEF DIGEST224} HashBuffer[118]:= ((224 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (224 shr 2) and $FF; {$ELSE} HashBuffer[118]:= ((256 and 3) shl 6) or (5 shl 3) or 1; HashBuffer[119]:= (256 shr 2) and $FF; {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} PDWord(@HashBuffer[120])^:= LenLo; PDWord(@HashBuffer[124])^:= LenHi; Compress; {$IFDEF DIGEST128} temp:= (CurrentHash[7] and $000000FF) or (CurrentHash[6] and $FF000000) or (CurrentHash[5] and $00FF0000) or (CurrentHash[4] and $0000FF00); Inc(CurrentHash[0],(temp shr 8) or (temp shl 24)); temp:= (CurrentHash[7] and $0000FF00) or (CurrentHash[6] and $000000FF) or (CurrentHash[5] and $FF000000) or (CurrentHash[4] and $00FF0000); Inc(CurrentHash[1],(temp shr 16) or (temp shl 16)); temp:= (CurrentHash[7] and $00FF0000) or (CurrentHash[6] and $0000FF00) or (CurrentHash[5] and $000000FF) or (CurrentHash[4] and $FF000000); Inc(CurrentHash[2],(temp shr 24) or (temp shl 8)); temp:= (CurrentHash[7] and $FF000000) or (CurrentHash[6] and $00FF0000) or (CurrentHash[5] and $0000FF00) or (CurrentHash[4] and $000000FF); Inc(CurrentHash[3],temp); Move(CurrentHash,Digest,128 div 8); {$ELSE} {$IFDEF DIGEST160} temp:= (CurrentHash[7] and $3F) or (CurrentHash[6] and ($7F shl 25)) or (CurrentHash[5] and ($3F shl 19)); Inc(CurrentHash[0],(temp shr 19) or (temp shl 13)); temp:= (CurrentHash[7] and ($3F shl 6)) or (CurrentHash[6] and $3F) or (CurrentHash[5] and ($7F shl 25)); Inc(CurrentHash[1],(temp shr 25) or (temp shl 7)); temp:= (CurrentHash[7] and ($7F shl 12)) or (CurrentHash[6] and ($3F shl 6)) or (CurrentHash[5] and $3F); Inc(CurrentHash[2],temp); temp:= (CurrentHash[7] and ($3F shl 19)) or (CurrentHash[6] and ($7F shl 12)) or (CurrentHash[5] and ($3F shl 6)); Inc(CurrentHash[3],temp shr 6); temp:= (CurrentHash[7] and ($7F shl 25)) or (CurrentHash[6] and ($3F shl 19)) or (CurrentHash[5] and ($7F shl 12)); Inc(CurrentHash[4],temp shr 12); Move(CurrentHash,Digest,160 div 8); {$ELSE} {$IFDEF DIGEST192} temp:= (CurrentHash[7] and $1F) or (CurrentHash[6] and ($3F shl 26)); Inc(CurrentHash[0],(temp shr 26) or (temp shl 6)); temp:= (CurrentHash[7] and ($1F shl 5)) or (CurrentHash[6] and $1F); Inc(CurrentHash[1],temp); temp:= (CurrentHash[7] and ($3F shl 10)) or (CurrentHash[6] and ($1F shl 5)); Inc(CurrentHash[2],temp shr 5); temp:= (CurrentHash[7] and ($1F shl 16)) or (CurrentHash[6] and ($3F shl 10)); Inc(CurrentHash[3],temp shr 10); temp:= (CurrentHash[7] and ($1F shl 21)) or (CurrentHash[6] and ($1F shl 16)); Inc(CurrentHash[4],temp shr 16); temp:= (CurrentHash[7] and ($3F shl 26)) or (CurrentHash[6] and ($1F shl 21)); Inc(CurrentHash[5],temp shr 21); Move(CurrentHash,Digest,192 div 8); {$ELSE} {$IFDEF DIGEST224} Inc(CurrentHash[0],(CurrentHash[7] shr 27) and $1F); Inc(CurrentHash[1],(CurrentHash[7] shr 22) and $1F); Inc(CurrentHash[2],(CurrentHash[7] shr 18) and $F); Inc(CurrentHash[3],(CurrentHash[7] shr 13) and $1F); Inc(CurrentHash[4],(CurrentHash[7] shr 9) and $F); Inc(CurrentHash[5],(CurrentHash[7] shr 4) and $1F); Inc(CurrentHash[6],CurrentHash[7] and $F); Move(CurrentHash,Digest,224 div 8); {$ELSE} Move(CurrentHash,Digest,256 div 8); {$ENDIF} {$ENDIF} {$ENDIF} {$ENDIF} Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcptiger.pas0000644000175000001440000003055012014201074022245 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of Tiger ********************************} {******************************************************************************} {* Copyright (c) 2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPtiger; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_tiger= class(TDCP_hash) protected Len: int64; Index: DWord; CurrentHash: array[0..2] of int64; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$INCLUDE DCPtiger.inc} procedure TDCP_tiger.Compress; var a, b, c, aa, bb, cc: int64; x: array[0..7] of int64; begin dcpFillChar(x, SizeOf(x), 0); a:= CurrentHash[0]; aa:= a; b:= CurrentHash[1]; bb:= b; c:= CurrentHash[2]; cc:= c; Move(HashBuffer,x,Sizeof(x)); c:= c xor x[0]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[1]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; b:= b xor x[2]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 5; c:= c xor x[3]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[4]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; b:= b xor x[5]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 5; c:= c xor x[6]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 5; a:= a xor x[7]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 5; x[0]:= x[0] - (x[7] xor $A5A5A5A5A5A5A5A5); x[1]:= x[1] xor x[0]; x[2]:= x[2] + x[1]; x[3]:= x[3] - (x[2] xor ((not x[1]) shl 19)); x[4]:= x[4] xor x[3]; x[5]:= x[5] + x[4]; x[6]:= x[6] - (x[5] xor ((not x[4]) shr 23)); x[7]:= x[7] xor x[6]; x[0]:= x[0] + x[7]; x[1]:= x[1] - (x[0] xor ((not x[7]) shl 19)); x[2]:= x[2] xor x[1]; x[3]:= x[3] + x[2]; x[4]:= x[4] - (x[3] xor ((not x[2]) shr 23)); x[5]:= x[5] xor x[4]; x[6]:= x[6] + x[5]; x[7]:= x[7] - (x[6] xor $0123456789ABCDEF); b:= b xor x[0]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[1]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; a:= a xor x[2]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 7; b:= b xor x[3]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[4]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; a:= a xor x[5]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 7; b:= b xor x[6]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 7; c:= c xor x[7]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 7; x[0]:= x[0] - (x[7] xor $A5A5A5A5A5A5A5A5); x[1]:= x[1] xor x[0]; x[2]:= x[2] + x[1]; x[3]:= x[3] - (x[2] xor ((not x[1]) shl 19)); x[4]:= x[4] xor x[3]; x[5]:= x[5] + x[4]; x[6]:= x[6] - (x[5] xor ((not x[4]) shr 23)); x[7]:= x[7] xor x[6]; x[0]:= x[0] + x[7]; x[1]:= x[1] - (x[0] xor ((not x[7]) shl 19)); x[2]:= x[2] xor x[1]; x[3]:= x[3] + x[2]; x[4]:= x[4] - (x[3] xor ((not x[2]) shr 23)); x[5]:= x[5] xor x[4]; x[6]:= x[6] + x[5]; x[7]:= x[7] - (x[6] xor $0123456789ABCDEF); a:= a xor x[0]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[1]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; c:= c xor x[2]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 9; a:= a xor x[3]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[4]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; c:= c xor x[5]; a:= a - (t1[c and $FF] xor t2[(c shr 16) and $FF] xor t3[(c shr 32) and $FF] xor t4[(c shr 48) and $FF]); b:= b + (t4[(c shr 8) and $FF] xor t3[(c shr 24) and $FF] xor t2[(c shr 40) and $FF] xor t1[(c shr 56) and $FF]); b:= b * 9; a:= a xor x[6]; b:= b - (t1[a and $FF] xor t2[(a shr 16) and $FF] xor t3[(a shr 32) and $FF] xor t4[(a shr 48) and $FF]); c:= c + (t4[(a shr 8) and $FF] xor t3[(a shr 24) and $FF] xor t2[(a shr 40) and $FF] xor t1[(a shr 56) and $FF]); c:= c * 9; b:= b xor x[7]; c:= c - (t1[b and $FF] xor t2[(b shr 16) and $FF] xor t3[(b shr 32) and $FF] xor t4[(b shr 48) and $FF]); a:= a + (t4[(b shr 8) and $FF] xor t3[(b shr 24) and $FF] xor t2[(b shr 40) and $FF] xor t1[(b shr 56) and $FF]); a:= a * 9; CurrentHash[0]:= a xor aa; CurrentHash[1]:= b - bb; CurrentHash[2]:= c + cc; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_tiger.GetHashSize: integer; begin Result:= 192; end; class function TDCP_tiger.GetId: integer; begin Result:= DCP_tiger; end; class function TDCP_tiger.GetAlgorithm: string; begin Result:= 'Tiger'; end; class function TDCP_tiger.SelfTest: boolean; const Test1Out: array[0..2] of int64= ($87FB2A9083851CF7,$470D2CF810E6DF9E,$B586445034A5A386); Test2Out: array[0..2] of int64= ($0C410A042968868A,$1671DA5A3FD29A72,$5EC1E457D3CDB303); var TestHash: TDCP_tiger; TestOut: array[0..2] of int64; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_tiger.Create(nil); TestHash.Init; TestHash.UpdateStr('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_tiger.Init; begin Burn; fInitialized:= true; CurrentHash[0]:= $0123456789ABCDEF; CurrentHash[1]:= $FEDCBA9876543210; CurrentHash[2]:= $F096A5B4C3B2E187; end; procedure TDCP_tiger.Burn; begin Len:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_tiger.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(Len,Size*8); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_tiger.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $01; if Index>= 56 then Compress; Pint64(@HashBuffer[56])^:= Len; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/DCPhaval3.inc0000644000175000001440000003731312014201074022143 0ustar alexxuserstemp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t2 and (t4 xor t3) xor t6 and t0 xor t5 and t1 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t1 and (t3 xor t2) xor t5 and t7 xor t4 and t0 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t0 and (t2 xor t1) xor t4 and t6 xor t3 and t7 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t7 and (t1 xor t0) xor t3 and t5 xor t2 and t6 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t6 and (t0 xor t7) xor t2 and t4 xor t1 and t5 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t5 and (t7 xor t6) xor t1 and t3 xor t0 and t4 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t4 and (t6 xor t5) xor t0 and t2 xor t7 and t3 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t3 and (t5 xor t4) xor t7 and t1 xor t6 and t2 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t5 and (t3 and not t0 xor t1 and t2 xor t4 xor t6) xor t1 and (t3 xor t2) xor t0 and t2 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t4 and (t2 and not t7 xor t0 and t1 xor t3 xor t5) xor t0 and (t2 xor t1) xor t7 and t1 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t3 and (t1 and not t6 xor t7 and t0 xor t2 xor t4) xor t7 and (t1 xor t0) xor t6 and t0 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t2 and (t0 and not t5 xor t6 and t7 xor t1 xor t3) xor t6 and (t0 xor t7) xor t5 and t7 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t1 and (t7 and not t4 xor t5 and t6 xor t0 xor t2) xor t5 and (t7 xor t6) xor t4 and t6 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t0 and (t6 and not t3 xor t4 and t5 xor t7 xor t1) xor t4 and (t6 xor t5) xor t3 and t5 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t7 and (t5 and not t2 xor t3 and t4 xor t6 xor t0) xor t3 and (t5 xor t4) xor t2 and t4 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t6 and (t4 and not t1 xor t2 and t3 xor t5 xor t7) xor t2 and (t4 xor t3) xor t1 and t3 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t3 and (t5 and t4 xor t6 xor t0) xor t5 and t2 xor t4 and t1 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t2 and (t4 and t3 xor t5 xor t7) xor t4 and t1 xor t3 and t0 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t1 and (t3 and t2 xor t4 xor t6) xor t3 and t0 xor t2 and t7 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t0 and (t2 and t1 xor t3 xor t5) xor t2 and t7 xor t1 and t6 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t7 and (t1 and t0 xor t2 xor t4) xor t1 and t6 xor t0 and t5 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t6 and (t0 and t7 xor t1 xor t3) xor t0 and t5 xor t7 and t4 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t5 and (t7 and t6 xor t0 xor t2) xor t7 and t4 xor t6 and t3 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t4 and (t6 and t5 xor t7 xor t1) xor t6 and t3 xor t5 and t2 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpripemd160.pas0000644000175000001440000007345012014201074022650 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of RipeMD-160 ***************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPripemd160; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_ripemd160= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..4] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_ripemd160.Compress; var aa, bb, cc, dd, ee, aaa, bbb, ccc, ddd, eee: DWord; X: array[0..15] of DWord; begin dcpFillChar(X, SizeOf(X), 0); Move(HashBuffer,X,Sizeof(X)); aa:= CurrentHash[0]; aaa:= CurrentHash[0]; bb:= CurrentHash[1]; bbb:= CurrentHash[1]; cc:= CurrentHash[2]; ccc:= CurrentHash[2]; dd:= CurrentHash[3]; ddd:= CurrentHash[3]; ee:= CurrentHash[4]; eee:= CurrentHash[4]; aa:= aa + (bb xor cc xor dd) + X[ 0]; aa:= ((aa shl 11) or (aa shr (32-11))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[ 1]; ee:= ((ee shl 14) or (ee shr (32-14))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[ 2]; dd:= ((dd shl 15) or (dd shr (32-15))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[ 3]; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[ 4]; bb:= ((bb shl 5) or (bb shr (32-5))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[ 5]; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[ 6]; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[ 7]; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[ 8]; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[ 9]; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[10]; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor bb xor cc) + X[11]; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor aa xor bb) + X[12]; dd:= ((dd shl 6) or (dd shr (32-6))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor ee xor aa) + X[13]; cc:= ((cc shl 7) or (cc shr (32-7))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor dd xor ee) + X[14]; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor cc xor dd) + X[15]; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 7] + $5a827999; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[ 4] + $5a827999; dd:= ((dd shl 6) or (dd shr (32-6))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[13] + $5a827999; cc:= ((cc shl 8) or (cc shr (32-8))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[ 1] + $5a827999; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[10] + $5a827999; aa:= ((aa shl 11) or (aa shr (32-11))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 6] + $5a827999; ee:= ((ee shl 9) or (ee shr (32-9))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[15] + $5a827999; dd:= ((dd shl 7) or (dd shr (32-7))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[ 3] + $5a827999; cc:= ((cc shl 15) or (cc shr (32-15))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[12] + $5a827999; bb:= ((bb shl 7) or (bb shr (32-7))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[ 0] + $5a827999; aa:= ((aa shl 12) or (aa shr (32-12))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 9] + $5a827999; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and aa) or ((not ee) and bb)) + X[ 5] + $5a827999; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and ee) or ((not dd) and aa)) + X[ 2] + $5a827999; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and dd) or ((not cc) and ee)) + X[14] + $5a827999; bb:= ((bb shl 7) or (bb shr (32-7))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and cc) or ((not bb) and dd)) + X[11] + $5a827999; aa:= ((aa shl 13) or (aa shr (32-13))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and bb) or ((not aa) and cc)) + X[ 8] + $5a827999; ee:= ((ee shl 12) or (ee shr (32-12))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[ 3] + $6ed9eba1; dd:= ((dd shl 11) or (dd shr (32-11))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[10] + $6ed9eba1; cc:= ((cc shl 13) or (cc shr (32-13))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[14] + $6ed9eba1; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[ 4] + $6ed9eba1; aa:= ((aa shl 7) or (aa shr (32-7))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 9] + $6ed9eba1; ee:= ((ee shl 14) or (ee shr (32-14))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[15] + $6ed9eba1; dd:= ((dd shl 9) or (dd shr (32-9))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[ 8] + $6ed9eba1; cc:= ((cc shl 13) or (cc shr (32-13))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[ 1] + $6ed9eba1; bb:= ((bb shl 15) or (bb shr (32-15))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[ 2] + $6ed9eba1; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 7] + $6ed9eba1; ee:= ((ee shl 8) or (ee shr (32-8))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[ 0] + $6ed9eba1; dd:= ((dd shl 13) or (dd shr (32-13))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd or (not ee)) xor aa) + X[ 6] + $6ed9eba1; cc:= ((cc shl 6) or (cc shr (32-6))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc or (not dd)) xor ee) + X[13] + $6ed9eba1; bb:= ((bb shl 5) or (bb shr (32-5))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb or (not cc)) xor dd) + X[11] + $6ed9eba1; aa:= ((aa shl 12) or (aa shr (32-12))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa or (not bb)) xor cc) + X[ 5] + $6ed9eba1; ee:= ((ee shl 7) or (ee shr (32-7))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee or (not aa)) xor bb) + X[12] + $6ed9eba1; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 1] + $8f1bbcdc; cc:= ((cc shl 11) or (cc shr (32-11))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[ 9] + $8f1bbcdc; bb:= ((bb shl 12) or (bb shr (32-12))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[11] + $8f1bbcdc; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[10] + $8f1bbcdc; ee:= ((ee shl 15) or (ee shr (32-15))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 0] + $8f1bbcdc; dd:= ((dd shl 14) or (dd shr (32-14))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 8] + $8f1bbcdc; cc:= ((cc shl 15) or (cc shr (32-15))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[12] + $8f1bbcdc; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[ 4] + $8f1bbcdc; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[13] + $8f1bbcdc; ee:= ((ee shl 9) or (ee shr (32-9))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 3] + $8f1bbcdc; dd:= ((dd shl 14) or (dd shr (32-14))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 7] + $8f1bbcdc; cc:= ((cc shl 5) or (cc shr (32-5))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + ((cc and ee) or (dd and (not ee))) + X[15] + $8f1bbcdc; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + ((bb and dd) or (cc and (not dd))) + X[14] + $8f1bbcdc; aa:= ((aa shl 8) or (aa shr (32-8))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + ((aa and cc) or (bb and (not cc))) + X[ 5] + $8f1bbcdc; ee:= ((ee shl 6) or (ee shr (32-6))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + ((ee and bb) or (aa and (not bb))) + X[ 6] + $8f1bbcdc; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + ((dd and aa) or (ee and (not aa))) + X[ 2] + $8f1bbcdc; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[ 4] + $a953fd4e; bb:= ((bb shl 9) or (bb shr (32-9))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 0] + $a953fd4e; aa:= ((aa shl 15) or (aa shr (32-15))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[ 5] + $a953fd4e; ee:= ((ee shl 5) or (ee shr (32-5))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[ 9] + $a953fd4e; dd:= ((dd shl 11) or (dd shr (32-11))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[ 7] + $a953fd4e; cc:= ((cc shl 6) or (cc shr (32-6))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[12] + $a953fd4e; bb:= ((bb shl 8) or (bb shr (32-8))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 2] + $a953fd4e; aa:= ((aa shl 13) or (aa shr (32-13))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[10] + $a953fd4e; ee:= ((ee shl 12) or (ee shr (32-12))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[14] + $a953fd4e; dd:= ((dd shl 5) or (dd shr (32-5))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[ 1] + $a953fd4e; cc:= ((cc shl 12) or (cc shr (32-12))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[ 3] + $a953fd4e; bb:= ((bb shl 13) or (bb shr (32-13))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aa:= aa + (bb xor (cc or (not dd))) + X[ 8] + $a953fd4e; aa:= ((aa shl 14) or (aa shr (32-14))) + ee; cc:= ((cc shl 10) or (cc shr (32-10))); ee:= ee + (aa xor (bb or (not cc))) + X[11] + $a953fd4e; ee:= ((ee shl 11) or (ee shr (32-11))) + dd; bb:= ((bb shl 10) or (bb shr (32-10))); dd:= dd + (ee xor (aa or (not bb))) + X[ 6] + $a953fd4e; dd:= ((dd shl 8) or (dd shr (32-8))) + cc; aa:= ((aa shl 10) or (aa shr (32-10))); cc:= cc + (dd xor (ee or (not aa))) + X[15] + $a953fd4e; cc:= ((cc shl 5) or (cc shr (32-5))) + bb; ee:= ((ee shl 10) or (ee shr (32-10))); bb:= bb + (cc xor (dd or (not ee))) + X[13] + $a953fd4e; bb:= ((bb shl 6) or (bb shr (32-6))) + aa; dd:= ((dd shl 10) or (dd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[ 5] + $50a28be6; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[14] + $50a28be6; eee:= ((eee shl 9) or (eee shr (32-9))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 7] + $50a28be6; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[ 0] + $50a28be6; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 9] + $50a28be6; bbb:= ((bbb shl 13) or (bbb shr (32-13))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[ 2] + $50a28be6; aaa:= ((aaa shl 15) or (aaa shr (32-15))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[11] + $50a28be6; eee:= ((eee shl 15) or (eee shr (32-15))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 4] + $50a28be6; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[13] + $50a28be6; ccc:= ((ccc shl 7) or (ccc shr (32-7))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 6] + $50a28be6; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[15] + $50a28be6; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor (bbb or (not ccc))) + X[ 8] + $50a28be6; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor (aaa or (not bbb))) + X[ 1] + $50a28be6; ddd:= ((ddd shl 14) or (ddd shr (32-14))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor (eee or (not aaa))) + X[10] + $50a28be6; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor (ddd or (not eee))) + X[ 3] + $50a28be6; bbb:= ((bbb shl 12) or (bbb shr (32-12))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor (ccc or (not ddd))) + X[12] + $50a28be6; aaa:= ((aaa shl 6) or (aaa shr (32-6))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 6] + $5c4dd124; eee:= ((eee shl 9) or (eee shr (32-9))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[11] + $5c4dd124; ddd:= ((ddd shl 13) or (ddd shr (32-13))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[ 3] + $5c4dd124; ccc:= ((ccc shl 15) or (ccc shr (32-15))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[ 7] + $5c4dd124; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[ 0] + $5c4dd124; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[13] + $5c4dd124; eee:= ((eee shl 8) or (eee shr (32-8))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[ 5] + $5c4dd124; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[10] + $5c4dd124; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[14] + $5c4dd124; bbb:= ((bbb shl 7) or (bbb shr (32-7))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[15] + $5c4dd124; aaa:= ((aaa shl 7) or (aaa shr (32-7))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 8] + $5c4dd124; eee:= ((eee shl 12) or (eee shr (32-12))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and bbb) or (aaa and (not bbb))) + X[12] + $5c4dd124; ddd:= ((ddd shl 7) or (ddd shr (32-7))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and aaa) or (eee and (not aaa))) + X[ 4] + $5c4dd124; ccc:= ((ccc shl 6) or (ccc shr (32-6))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and eee) or (ddd and (not eee))) + X[ 9] + $5c4dd124; bbb:= ((bbb shl 15) or (bbb shr (32-15))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ddd) or (ccc and (not ddd))) + X[ 1] + $5c4dd124; aaa:= ((aaa shl 13) or (aaa shr (32-13))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and ccc) or (bbb and (not ccc))) + X[ 2] + $5c4dd124; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[15] + $6d703ef3; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 5] + $6d703ef3; ccc:= ((ccc shl 7) or (ccc shr (32-7))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[ 1] + $6d703ef3; bbb:= ((bbb shl 15) or (bbb shr (32-15))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[ 3] + $6d703ef3; aaa:= ((aaa shl 11) or (aaa shr (32-11))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 7] + $6d703ef3; eee:= ((eee shl 8) or (eee shr (32-8))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[14] + $6d703ef3; ddd:= ((ddd shl 6) or (ddd shr (32-6))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 6] + $6d703ef3; ccc:= ((ccc shl 6) or (ccc shr (32-6))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[ 9] + $6d703ef3; bbb:= ((bbb shl 14) or (bbb shr (32-14))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[11] + $6d703ef3; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 8] + $6d703ef3; eee:= ((eee shl 13) or (eee shr (32-13))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[12] + $6d703ef3; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd or (not eee)) xor aaa) + X[ 2] + $6d703ef3; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc or (not ddd)) xor eee) + X[10] + $6d703ef3; bbb:= ((bbb shl 13) or (bbb shr (32-13))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb or (not ccc)) xor ddd) + X[ 0] + $6d703ef3; aaa:= ((aaa shl 13) or (aaa shr (32-13))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa or (not bbb)) xor ccc) + X[ 4] + $6d703ef3; eee:= ((eee shl 7) or (eee shr (32-7))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee or (not aaa)) xor bbb) + X[13] + $6d703ef3; ddd:= ((ddd shl 5) or (ddd shr (32-5))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[ 8] + $7a6d76e9; ccc:= ((ccc shl 15) or (ccc shr (32-15))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[ 6] + $7a6d76e9; bbb:= ((bbb shl 5) or (bbb shr (32-5))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 4] + $7a6d76e9; aaa:= ((aaa shl 8) or (aaa shr (32-8))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 1] + $7a6d76e9; eee:= ((eee shl 11) or (eee shr (32-11))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[ 3] + $7a6d76e9; ddd:= ((ddd shl 14) or (ddd shr (32-14))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[11] + $7a6d76e9; ccc:= ((ccc shl 14) or (ccc shr (32-14))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[15] + $7a6d76e9; bbb:= ((bbb shl 6) or (bbb shr (32-6))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 0] + $7a6d76e9; aaa:= ((aaa shl 14) or (aaa shr (32-14))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 5] + $7a6d76e9; eee:= ((eee shl 6) or (eee shr (32-6))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[12] + $7a6d76e9; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[ 2] + $7a6d76e9; ccc:= ((ccc shl 12) or (ccc shr (32-12))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + ((ccc and ddd) or ((not ccc) and eee)) + X[13] + $7a6d76e9; bbb:= ((bbb shl 9) or (bbb shr (32-9))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + ((bbb and ccc) or ((not bbb) and ddd)) + X[ 9] + $7a6d76e9; aaa:= ((aaa shl 12) or (aaa shr (32-12))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + ((aaa and bbb) or ((not aaa) and ccc)) + X[ 7] + $7a6d76e9; eee:= ((eee shl 5) or (eee shr (32-5))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + ((eee and aaa) or ((not eee) and bbb)) + X[10] + $7a6d76e9; ddd:= ((ddd shl 15) or (ddd shr (32-15))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + ((ddd and eee) or ((not ddd) and aaa)) + X[14] + $7a6d76e9; ccc:= ((ccc shl 8) or (ccc shr (32-8))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[12]; bbb:= ((bbb shl 8) or (bbb shr (32-8))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[15]; aaa:= ((aaa shl 5) or (aaa shr (32-5))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[10]; eee:= ((eee shl 12) or (eee shr (32-12))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 4]; ddd:= ((ddd shl 9) or (ddd shr (32-9))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 1]; ccc:= ((ccc shl 12) or (ccc shr (32-12))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[ 5]; bbb:= ((bbb shl 5) or (bbb shr (32-5))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[ 8]; aaa:= ((aaa shl 14) or (aaa shr (32-14))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[ 7]; eee:= ((eee shl 6) or (eee shr (32-6))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 6]; ddd:= ((ddd shl 8) or (ddd shr (32-8))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 2]; ccc:= ((ccc shl 13) or (ccc shr (32-13))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[13]; bbb:= ((bbb shl 6) or (bbb shr (32-6))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); aaa:= aaa + (bbb xor ccc xor ddd) + X[14]; aaa:= ((aaa shl 5) or (aaa shr (32-5))) + eee; ccc:= ((ccc shl 10) or (ccc shr (32-10))); eee:= eee + (aaa xor bbb xor ccc) + X[ 0]; eee:= ((eee shl 15) or (eee shr (32-15))) + ddd; bbb:= ((bbb shl 10) or (bbb shr (32-10))); ddd:= ddd + (eee xor aaa xor bbb) + X[ 3]; ddd:= ((ddd shl 13) or (ddd shr (32-13))) + ccc; aaa:= ((aaa shl 10) or (aaa shr (32-10))); ccc:= ccc + (ddd xor eee xor aaa) + X[ 9]; ccc:= ((ccc shl 11) or (ccc shr (32-11))) + bbb; eee:= ((eee shl 10) or (eee shr (32-10))); bbb:= bbb + (ccc xor ddd xor eee) + X[11]; bbb:= ((bbb shl 11) or (bbb shr (32-11))) + aaa; ddd:= ((ddd shl 10) or (ddd shr (32-10))); ddd:= ddd + cc + CurrentHash[1]; CurrentHash[1]:= CurrentHash[2] + dd + eee; CurrentHash[2]:= CurrentHash[3] + ee + aaa; CurrentHash[3]:= CurrentHash[4] + aa + bbb; CurrentHash[4]:= CurrentHash[0] + bb + ccc; CurrentHash[0]:= ddd; FillChar(X,Sizeof(X),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_ripemd160.GetHashSize: integer; begin Result:= 160; end; class function TDCP_ripemd160.GetId: integer; begin Result:= DCP_ripemd160; end; class function TDCP_ripemd160.GetAlgorithm: string; begin Result:= 'RipeMD-160'; end; class function TDCP_ripemd160.SelfTest: boolean; const Test1Out: array[0..19] of byte= ($0B,$DC,$9D,$2D,$25,$6B,$3E,$E9,$DA,$AE,$34,$7B,$E6,$F4,$DC,$83,$5A,$46,$7F,$FE); Test2Out: array[0..19] of byte= ($F7,$1C,$27,$10,$9C,$69,$2C,$1B,$56,$BB,$DC,$EB,$5B,$9D,$28,$65,$B3,$70,$8D,$BC); var TestHash: TDCP_ripemd160; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_ripemd160.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_ripemd160.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; CurrentHash[4]:= $c3d2e1f0; fInitialized:= true; end; procedure TDCP_ripemd160.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_ripemd160.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_ripemd160.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/DCPhaval4.inc0000644000175000001440000005506012014201074022143 0ustar alexxuserstemp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t3 and (t0 xor t1) xor t5 and t6 xor t4 and t2 xor t0); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t2 and (t7 xor t0) xor t4 and t5 xor t3 and t1 xor t7); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t1 and (t6 xor t7) xor t3 and t4 xor t2 and t0 xor t6); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t0 and (t5 xor t6) xor t2 and t3 xor t1 and t7 xor t5); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t7 and (t4 xor t5) xor t1 and t2 xor t0 and t6 xor t4); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t6 and (t3 xor t4) xor t0 and t1 xor t7 and t5 xor t3); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t5 and (t2 xor t3) xor t7 and t0 xor t6 and t4 xor t2); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t4 and (t1 xor t2) xor t6 and t7 xor t5 and t3 xor t1); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t1 and (t6 and not t0 xor t2 and t5 xor t3 xor t4) xor t2 and (t6 xor t5) xor t0 and t5 xor t4); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t0 and (t5 and not t7 xor t1 and t4 xor t2 xor t3) xor t1 and (t5 xor t4) xor t7 and t4 xor t3); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t7 and (t4 and not t6 xor t0 and t3 xor t1 xor t2) xor t0 and (t4 xor t3) xor t6 and t3 xor t2); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t6 and (t3 and not t5 xor t7 and t2 xor t0 xor t1) xor t7 and (t3 xor t2) xor t5 and t2 xor t1); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t5 and (t2 and not t4 xor t6 and t1 xor t7 xor t0) xor t6 and (t2 xor t1) xor t4 and t1 xor t0); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t4 and (t1 and not t3 xor t5 and t0 xor t6 xor t7) xor t5 and (t1 xor t0) xor t3 and t0 xor t7); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t3 and (t0 and not t2 xor t4 and t7 xor t5 xor t6) xor t4 and (t0 xor t7) xor t2 and t7 xor t6); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t2 and (t7 and not t1 xor t3 and t6 xor t4 xor t5) xor t3 and (t7 xor t6) xor t1 and t6 xor t5); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t6 and (t2 and t0 xor t1 xor t5) xor t2 and t3 xor t0 and t4 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t5 and (t1 and t7 xor t0 xor t4) xor t1 and t2 xor t7 and t3 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t4 and (t0 and t6 xor t7 xor t3) xor t0 and t1 xor t6 and t2 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t3 and (t7 and t5 xor t6 xor t2) xor t7 and t0 xor t5 and t1 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t2 and (t6 and t4 xor t5 xor t1) xor t6 and t7 xor t4 and t0 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t1 and (t5 and t3 xor t4 xor t0) xor t5 and t6 xor t3 and t7 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t0 and (t4 and t2 xor t3 xor t7) xor t4 and t5 xor t2 and t6 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t7 and (t3 and t1 xor t2 xor t6) xor t3 and t4 xor t1 and t5 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24] + $7A325381; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 4] + $28958677; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 0] + $3B8F4898; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[14] + $6B4BB9AF; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $C4BFE81B; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 7] + $66282193; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $61D809CC; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23] + $FB21A991; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[26] + $487CAC60; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $5DEC8032; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[30] + $EF845D5D; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $E98575B1; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DC262302; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $EB651B88; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[19] + $23893E81; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 3] + $D396ACC5; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[22] + $0F6D6FF3; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[11] + $83F44239; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[31] + $2E0B4482; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[21] + $A4842004; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 8] + $69C8F04A; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[27] + $9E1F9B5E; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[12] + $21C66842; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 9] + $F6E96C9A; temp:= (t0 and (t4 and not t2 xor t5 and not t6 xor t1 xor t6 xor t3) xor t5 and (t1 and t2 xor t4 xor t6) xor t2 and t6 xor t3); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 1] + $670C9C61; temp:= (t7 and (t3 and not t1 xor t4 and not t5 xor t0 xor t5 xor t2) xor t4 and (t0 and t1 xor t3 xor t5) xor t1 and t5 xor t2); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[29] + $ABD388F0; temp:= (t6 and (t2 and not t0 xor t3 and not t4 xor t7 xor t4 xor t1) xor t3 and (t7 and t0 xor t2 xor t4) xor t0 and t4 xor t1); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 5] + $6A51A0D2; temp:= (t5 and (t1 and not t7 xor t2 and not t3 xor t6 xor t3 xor t0) xor t2 and (t6 and t7 xor t1 xor t3) xor t7 and t3 xor t0); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[15] + $D8542F68; temp:= (t4 and (t0 and not t6 xor t1 and not t2 xor t5 xor t2 xor t7) xor t1 and (t5 and t6 xor t0 xor t2) xor t6 and t2 xor t7); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $960FA728; temp:= (t3 and (t7 and not t5 xor t0 and not t1 xor t4 xor t1 xor t6) xor t0 and (t4 and t5 xor t7 xor t1) xor t5 and t1 xor t6); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $AB5133A3; temp:= (t2 and (t6 and not t4 xor t7 and not t0 xor t3 xor t0 xor t5) xor t7 and (t3 and t4 xor t6 xor t0) xor t4 and t0 xor t5); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $6EEF0B6C; temp:= (t1 and (t5 and not t3 xor t6 and not t7 xor t2 xor t7 xor t4) xor t6 and (t2 and t3 xor t5 xor t7) xor t3 and t7 xor t4); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[13] + $137A3BE4; doublecmd-0.7.1/components/dcpcrypt/Hashes/dcblake2.pp0000644000175000001440000003327712573066072022001 0ustar alexxusers{ BLAKE2 reference source code package - reference C implementations Written in 2012 by Samuel Neves Pascal tranlastion in 2014-2015 by Alexander Koblov (alexx2000@mail.ru) To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty. You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see . } unit DCblake2; {$mode objfpc}{$H+} {$macro on}{$R-}{$Q-} {$define USE_MTPROCS} interface uses SysUtils, CTypes; const PARALLELISM_DEGREE = 8; BLAKE2S_BLOCKBYTES = 64; BLAKE2S_OUTBYTES = 32; BLAKE2S_KEYBYTES = 32; BLAKE2S_SALTBYTES = 8; BLAKE2S_PERSONALBYTES = 8; type {$packrecords 1} Pblake2s_param = ^blake2s_param; blake2s_param = record digest_length: cuint8; // 1 key_length: cuint8; // 2 fanout: cuint8; // 3 depth: cuint8; // 4 leaf_length: cuint32; // 8 node_offset: array[0..5] of cuint8;// 14 node_depth: cuint8; // 15 inner_length: cuint8; // 16 // uint8_t reserved[0]; salt: array[0..Pred(BLAKE2S_SALTBYTES)] of cuint8; // 24 personal: array[0..Pred(BLAKE2S_PERSONALBYTES)] of cuint8; // 32 end; {$packrecords 8} Pblake2s_state = ^blake2s_state; blake2s_state = record h: array[0..7] of cuint32; t: array[0..1] of cuint32; f: array[0..1] of cuint32; buf: array[0..Pred(2 * BLAKE2S_BLOCKBYTES)] of cuint8; buflen: csize_t; last_node: cuint8; end; {$packrecords 1} Pblake2sp_state = ^blake2sp_state; blake2sp_state = record S: array[0..7] of blake2s_state; R: blake2s_state; buf: array[0..Pred(8 * BLAKE2S_BLOCKBYTES)] of cuint8; buflen: csize_t; inlen: csize_t; inp: PByte; end; {$packrecords default} function blake2s_init( S: Pblake2s_state; const outlen: cuint8 ): cint; function blake2s_update( S: Pblake2s_state; inp: pcuint8; inlen: cuint64 ): cint; function blake2s_final( S: Pblake2s_state; outp: pcuint8; outlen: cuint8 ): cint; function blake2sp_init( S: Pblake2sp_state; const outlen: cuint8 ): cint; function blake2sp_update( S: Pblake2sp_state; inp: pcuint8; inlen: cuint64 ): cint; function blake2sp_final( S: Pblake2sp_state; outp: pcuint8; const outlen: cuint8 ): cint; implementation {$IF DEFINED(USE_MTPROCS)} uses MTProcs; {$ELSE} type TMultiThreadProcItem = Pointer; {$ENDIF} const blake2s_IV: array[0..7] of cuint32 = ( $6A09E667, $BB67AE85, $3C6EF372, $A54FF53A, $510E527F, $9B05688C, $1F83D9AB, $5BE0CD19 ); const blake2s_sigma: array[0..9] of array[0..15] of cuint8 = ( ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ) , ( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 ) , ( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 ) , ( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 ) , ( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 ) , ( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 ) , ( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 ) , ( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 ) , ( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 ) , ( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0 ) ); function load32( const src: Pointer ): cuint32; inline; begin Result := NtoLE(pcuint32(src)^); end; function load64( const src: pointer ): cuint64; inline; begin Result := NtoLE(pcuint64(src)^); end; procedure store32( dst: pointer; w: cuint32 ); inline; begin pcuint32(dst)^ := LEtoN(w); end; procedure store64( dst: pointer; w: cuint64 ); inline; begin pcuint64(dst)^ := LEtoN(w); end; function load48( const src: pointer ): cuint64; inline; var w: cuint64; p: pcuint8; begin p := pcuint8(src); w := p^; Inc(p); w := w or cuint64( p^ ) shl 8; inc(p); w := w or cuint64( p^ ) shl 16; inc(p); w := w or cuint64( p^ ) shl 24; inc(p); w := w or cuint64( p^ ) shl 32; inc(p); w := w or cuint64( p^ ) shl 40; inc(p); Result := w; end; procedure store48( dst: pointer; w: cuint64 ); inline; var p: pcuint8; begin p := pcuint8(dst); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); w := w shr 8; inc(p); p^ := cuint8(w); inc(p); end; function blake2s_set_lastnode( S: Pblake2s_state ): cint; inline; begin S^.f[1] := $FFFFFFFF; Result := 0; end; function blake2s_clear_lastnode( S: Pblake2s_state ): cint; inline; begin S^.f[1] := 0; Result := 0; end; //* Some helper functions, not necessarily useful */ function blake2s_set_lastblock( S: Pblake2s_state ): cint; inline; begin if( S^.last_node <> 0 ) then blake2s_set_lastnode( S ); S^.f[0] := $FFFFFFFF; Result := 0; end; function blake2s_clear_lastblock( S: Pblake2s_state ): cint; inline; begin if( S^.last_node <> 0 ) then blake2s_clear_lastnode( S ); S^.f[0] := 0; Result := 0; end; function blake2s_increment_counter( S: Pblake2s_state; const inc: cuint32 ): cint; inline; begin S^.t[0] += inc; S^.t[1] += cuint32( S^.t[0] < inc ); Result := 0; end; function blake2s_init0( S: Pblake2s_state ): cint; inline; var i: cint; begin FillChar( S^, sizeof( blake2s_state ), 0 ); for i := 0 to 8 - 1 do S^.h[i] := blake2s_IV[i]; Result := 0; end; //* init2 xors IV with input parameter block */ function blake2s_init_param( S: Pblake2s_state; const P: Pblake2s_param ): cint; var i: csize_t; pp: pcuint32; begin blake2s_init0( S ); pp := pcuint32( P ); //* IV XOR ParamBlock */ // for i := 0; i < 8; ++i ) for i := 0 to 8 - 1 do S^.h[i] := S^.h[i] xor load32( @pp[i] ); Result := 0; end; // Sequential blake2s initialization function blake2s_init( S: Pblake2s_state; const outlen: cuint8 ): cint; var P: blake2s_param; begin //* Move interval verification here? */ if ( ( outlen = 0 ) or ( outlen > BLAKE2S_OUTBYTES ) ) then Exit(-1); P.digest_length := outlen; P.key_length := 0; P.fanout := 1; P.depth := 1; store32( @P.leaf_length, 0 ); store48( @P.node_offset, 0 ); P.node_depth := 0; P.inner_length := 0; // memset(P^.reserved, 0, sizeof(P^.reserved) ); FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result := blake2s_init_param( S, @P ); end; function blake2s_compress( S: Pblake2s_state; const block: pcuint8 ): cint; var i: csize_t; m: array[0..15] of cuint32; v: array[0..15] of cuint32; procedure G(r,i: cuint32; var a,b,c,d: cuint32); inline; begin a := a + b + m[blake2s_sigma[r][2*i+0]]; d := RorDWord(d xor a, 16); c := c + d; b := RorDWord(b xor c, 12); a := a + b + m[blake2s_sigma[r][2*i+1]]; d := RorDWord(d xor a, 8); c := c + d; b := RorDWord(b xor c, 7); end; {$define ROUND_MACRO:= G(r_,0,v[ 0],v[ 4],v[ 8],v[12]); G(r_,1,v[ 1],v[ 5],v[ 9],v[13]); G(r_,2,v[ 2],v[ 6],v[10],v[14]); G(r_,3,v[ 3],v[ 7],v[11],v[15]); G(r_,4,v[ 0],v[ 5],v[10],v[15]); G(r_,5,v[ 1],v[ 6],v[11],v[12]); G(r_,6,v[ 2],v[ 7],v[ 8],v[13]); G(r_,7,v[ 3],v[ 4],v[ 9],v[14]); } begin for i := 0 to 15 do m[i] := load32( @block[i * sizeof( m[i] )] ); for i := 0 to 7 do v[i] := S^.h[i]; v[ 8] := blake2s_IV[0]; v[ 9] := blake2s_IV[1]; v[10] := blake2s_IV[2]; v[11] := blake2s_IV[3]; v[12] := S^.t[0] xor blake2s_IV[4]; v[13] := S^.t[1] xor blake2s_IV[5]; v[14] := S^.f[0] xor blake2s_IV[6]; v[15] := S^.f[1] xor blake2s_IV[7]; {$define r_:= 0} ROUND_MACRO; {$define r_:= 1} ROUND_MACRO; {$define r_:= 2} ROUND_MACRO; {$define r_:= 3} ROUND_MACRO; {$define r_:= 4} ROUND_MACRO; {$define r_:= 5} ROUND_MACRO; {$define r_:= 6} ROUND_MACRO; {$define r_:= 7} ROUND_MACRO; {$define r_:= 8} ROUND_MACRO; {$define r_:= 9} ROUND_MACRO; for i := 0 to 7 do S^.h[i] := S^.h[i] xor v[i] xor v[i + 8]; Result := 0; end; function blake2s_update( S: Pblake2s_state; inp: pcuint8; inlen: cuint64 ): cint; var left, fill: csize_t; begin while( inlen > 0 ) do begin left := S^.buflen; fill := 2 * BLAKE2S_BLOCKBYTES - left; if( inlen > fill ) then begin Move( inp^, S^.buf[left], fill ); // Fill buffer S^.buflen += fill; blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S^.buf ); // Compress Move( S^.buf[BLAKE2S_BLOCKBYTES], S^.buf, BLAKE2S_BLOCKBYTES ); // Shift buffer left S^.buflen -= BLAKE2S_BLOCKBYTES; inp += fill; inlen -= fill; end else // inlen <= fill begin Move( inp^, S^.buf [left], inlen ); S^.buflen += inlen; // Be lazy, do not compress inp += inlen; inlen -= inlen; end; end; Result := 0; end; function blake2s_final( S: Pblake2s_state; outp: pcuint8; outlen: cuint8 ): cint; var i: cint; buffer: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if( S^.buflen > BLAKE2S_BLOCKBYTES ) then begin blake2s_increment_counter( S, BLAKE2S_BLOCKBYTES ); blake2s_compress( S, S^.buf); S^.buflen -= BLAKE2S_BLOCKBYTES; Move( S^.buf[BLAKE2S_BLOCKBYTES], S^.buf, S^.buflen ); end; blake2s_increment_counter( S, cuint32(S^.buflen) ); blake2s_set_lastblock( S ); FillChar( S^.buf[S^.buflen], 2 * BLAKE2S_BLOCKBYTES - S^.buflen, 0 ); //* Padding */ blake2s_compress( S, S^.buf ); for i := 0 to 7 do //* Output full hash to temp buffer */ store32( @buffer[sizeof( S^.h[i] ) * i], S^.h[i] ); Move( buffer, outp^, outlen ); Result := 0; end; function blake2sp_init_leaf(S: Pblake2s_state; outlen: cuint8; keylen: cuint8; offset: cuint64):cint; inline; var P: blake2s_param; begin P.digest_length := outlen; P.key_length := keylen; P.fanout := PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store48( @P.node_offset[0], offset ); P.node_depth := 0; P.inner_length := BLAKE2S_OUTBYTES; FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result:= blake2s_init_param( S, @P ); end; function blake2sp_init_root( S: Pblake2s_state; outlen: cuint8; keylen: cuint8 ): cint; inline; var P: blake2s_param; begin P.digest_length := outlen; P.key_length := keylen; P.fanout := PARALLELISM_DEGREE; P.depth := 2; store32( @P.leaf_length, 0 ); store48( @P.node_offset[0], 0 ); P.node_depth := 1; P.inner_length := BLAKE2S_OUTBYTES; FillChar( P.salt, sizeof( P.salt ), 0 ); FillChar( P.personal, sizeof( P.personal ), 0 ); Result:= blake2s_init_param( S, @P ); end; function blake2sp_init( S: Pblake2sp_state; const outlen: cuint8 ): cint; var i: csize_t; begin if (outlen = 0) or (outlen > BLAKE2S_OUTBYTES) then Exit(-1); FillChar( S^.buf, sizeof( S^.buf ), 0 ); S^.buflen := 0; if( blake2sp_init_root( @S^.R, outlen, 0 ) < 0 ) then Exit(-1); for i := 0 to PARALLELISM_DEGREE - 1 do if ( blake2sp_init_leaf( @S^.S[i], outlen, 0, i ) < 0 ) then Exit(-1); S^.R.last_node := 1; S^.S[PARALLELISM_DEGREE - 1].last_node := 1; Result := 0; end; procedure MTProcedure(id__: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var in__: pcuint8; inlen__: cuint64; S: Pblake2sp_state absolute Data; begin in__ := S^.inp; inlen__ := S^.inlen; in__ += id__ * BLAKE2S_BLOCKBYTES; while ( inlen__ >= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ) do begin blake2s_update( @S^.S[id__], in__, BLAKE2S_BLOCKBYTES ); in__ += PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; inlen__ -= PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES; end; end; function blake2sp_update( S: Pblake2sp_state; inp: pcuint8; inlen: cuint64 ): cint; var i, left, fill: csize_t; begin left := S^.buflen; fill := sizeof( S^.buf ) - left; if ( left <> 0) and (inlen >= fill ) then begin Move(inp^, S^.buf[left], fill); for i := 0 to PARALLELISM_DEGREE - 1 do blake2s_update( @S^.S[i], @S^.buf[ i * BLAKE2S_BLOCKBYTES], BLAKE2S_BLOCKBYTES ); inp += fill; inlen -= fill; left := 0; end; S^.inp := inp; S^.inlen := inlen; {$IF DEFINED(USE_MTPROCS)} ProcThreadPool.DoParallel(@MTProcedure, 0, PARALLELISM_DEGREE - 1, S); {$ELSE} for i := 0 to PARALLELISM_DEGREE - 1 do MTProcedure(i, S, nil); {$ENDIF} inp += inlen - inlen mod ( PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES ); inlen := inlen mod (PARALLELISM_DEGREE * BLAKE2S_BLOCKBYTES); if ( inlen > 0 ) then Move(inp^, S^.buf[left], inlen ); S^.buflen := left + inlen; Result := 0; end; function blake2sp_final( S: Pblake2sp_state; outp: pcuint8; const outlen: cuint8 ): cint; var i, left: csize_t; hash: array[0..Pred(PARALLELISM_DEGREE), 0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin for i := 0 to PARALLELISM_DEGREE - 1 do begin if ( S^.buflen > i * BLAKE2S_BLOCKBYTES ) then begin left := S^.buflen - i * BLAKE2S_BLOCKBYTES; if ( left > BLAKE2S_BLOCKBYTES ) then left := BLAKE2S_BLOCKBYTES; blake2s_update( @S^.S[i], @S^.buf[i * BLAKE2S_BLOCKBYTES], left ); end; blake2s_final( @S^.S[i], hash[i], BLAKE2S_OUTBYTES ); end; for i := 0 to PARALLELISM_DEGREE - 1 do blake2s_update( @S^.R, hash[i], BLAKE2S_OUTBYTES ); blake2s_final( @S^.R, outp, outlen ); Result := 0; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpripemd128.pas0000644000175000001440000004101612014201074022645 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of RipeMD-128 ***************************} {******************************************************************************} {* Copyright (c) 2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPripemd128; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_ripemd128= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} procedure TDCP_ripemd128.Compress; var X: array[0..15] of DWord; a, aa, b, bb, c, cc, d, dd, t: dword; begin dcpFillChar(X, SizeOf(X), 0); Move(HashBuffer,X,Sizeof(X)); a:= CurrentHash[0]; aa:= a; b:= CurrentHash[1]; bb:= b; c:= CurrentHash[2]; cc:= c; d:= CurrentHash[3]; dd:= d; t:= a + (b xor c xor d) + X[ 0]; a:= (t shl 11) or (t shr (32-11)); t:= d + (a xor b xor c) + X[ 1]; d:= (t shl 14) or (t shr (32-14)); t:= c + (d xor a xor b) + X[ 2]; c:= (t shl 15) or (t shr (32-15)); t:= b + (c xor d xor a) + X[ 3]; b:= (t shl 12) or (t shr (32-12)); t:= a + (b xor c xor d) + X[ 4]; a:= (t shl 5) or (t shr (32-5)); t:= d + (a xor b xor c) + X[ 5]; d:= (t shl 8) or (t shr (32-8)); t:= c + (d xor a xor b) + X[ 6]; c:= (t shl 7) or (t shr (32-7)); t:= b + (c xor d xor a) + X[ 7]; b:= (t shl 9) or (t shr (32-9)); t:= a + (b xor c xor d) + X[ 8]; a:= (t shl 11) or (t shr (32-11)); t:= d + (a xor b xor c) + X[ 9]; d:= (t shl 13) or (t shr (32-13)); t:= c + (d xor a xor b) + X[10]; c:= (t shl 14) or (t shr (32-14)); t:= b + (c xor d xor a) + X[11]; b:= (t shl 15) or (t shr (32-15)); t:= a + (b xor c xor d) + X[12]; a:= (t shl 6) or (t shr (32-6)); t:= d + (a xor b xor c) + X[13]; d:= (t shl 7) or (t shr (32-7)); t:= c + (d xor a xor b) + X[14]; c:= (t shl 9) or (t shr (32-9)); t:= b + (c xor d xor a) + X[15]; b:= (t shl 8) or (t shr (32-8)); t:= a + ((b and c) or (not b and d)) + X[ 7]+$5A827999; a:= (t shl 7) or (t shr (32-7)); t:= d + ((a and b) or (not a and c)) + X[ 4]+$5A827999; d:= (t shl 6) or (t shr (32-6)); t:= c + ((d and a) or (not d and b)) + X[13]+$5A827999; c:= (t shl 8) or (t shr (32-8)); t:= b + ((c and d) or (not c and a)) + X[ 1]+$5A827999; b:= (t shl 13) or (t shr (32-13)); t:= a + ((b and c) or (not b and d)) + X[10]+$5A827999; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and b) or (not a and c)) + X[ 6]+$5A827999; d:= (t shl 9) or (t shr (32-9)); t:= c + ((d and a) or (not d and b)) + X[15]+$5A827999; c:= (t shl 7) or (t shr (32-7)); t:= b + ((c and d) or (not c and a)) + X[ 3]+$5A827999; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b and c) or (not b and d)) + X[12]+$5A827999; a:= (t shl 7) or (t shr (32-7)); t:= d + ((a and b) or (not a and c)) + X[ 0]+$5A827999; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d and a) or (not d and b)) + X[ 9]+$5A827999; c:= (t shl 15) or (t shr (32-15)); t:= b + ((c and d) or (not c and a)) + X[ 5]+$5A827999; b:= (t shl 9) or (t shr (32-9)); t:= a + ((b and c) or (not b and d)) + X[ 2]+$5A827999; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and b) or (not a and c)) + X[14]+$5A827999; d:= (t shl 7) or (t shr (32-7)); t:= c + ((d and a) or (not d and b)) + X[11]+$5A827999; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c and d) or (not c and a)) + X[ 8]+$5A827999; b:= (t shl 12) or (t shr (32-12)); t:= a + ((b or not c) xor d) + X[ 3]+$6ED9EBA1; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a or not b) xor c) + X[10]+$6ED9EBA1; d:= (t shl 13) or (t shr (32-13)); t:= c + ((d or not a) xor b) + X[14]+$6ED9EBA1; c:= (t shl 6) or (t shr (32-6)); t:= b + ((c or not d) xor a) + X[ 4]+$6ED9EBA1; b:= (t shl 7) or (t shr (32-7)); t:= a + ((b or not c) xor d) + X[ 9]+$6ED9EBA1; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a or not b) xor c) + X[15]+$6ED9EBA1; d:= (t shl 9) or (t shr (32-9)); t:= c + ((d or not a) xor b) + X[ 8]+$6ED9EBA1; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c or not d) xor a) + X[ 1]+$6ED9EBA1; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b or not c) xor d) + X[ 2]+$6ED9EBA1; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a or not b) xor c) + X[ 7]+$6ED9EBA1; d:= (t shl 8) or (t shr (32-8)); t:= c + ((d or not a) xor b) + X[ 0]+$6ED9EBA1; c:= (t shl 13) or (t shr (32-13)); t:= b + ((c or not d) xor a) + X[ 6]+$6ED9EBA1; b:= (t shl 6) or (t shr (32-6)); t:= a + ((b or not c) xor d) + X[13]+$6ED9EBA1; a:= (t shl 5) or (t shr (32-5)); t:= d + ((a or not b) xor c) + X[11]+$6ED9EBA1; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d or not a) xor b) + X[ 5]+$6ED9EBA1; c:= (t shl 7) or (t shr (32-7)); t:= b + ((c or not d) xor a) + X[12]+$6ED9EBA1; b:= (t shl 5) or (t shr (32-5)); t:= a + ((b and d) or (c and not d)) + X[ 1]+$8F1BBCDC; a:= (t shl 11) or (t shr (32-11)); t:= d + ((a and c) or (b and not c)) + X[ 9]+$8F1BBCDC; d:= (t shl 12) or (t shr (32-12)); t:= c + ((d and b) or (a and not b)) + X[11]+$8F1BBCDC; c:= (t shl 14) or (t shr (32-14)); t:= b + ((c and a) or (d and not a)) + X[10]+$8F1BBCDC; b:= (t shl 15) or (t shr (32-15)); t:= a + ((b and d) or (c and not d)) + X[ 0]+$8F1BBCDC; a:= (t shl 14) or (t shr (32-14)); t:= d + ((a and c) or (b and not c)) + X[ 8]+$8F1BBCDC; d:= (t shl 15) or (t shr (32-15)); t:= c + ((d and b) or (a and not b)) + X[12]+$8F1BBCDC; c:= (t shl 9) or (t shr (32-9)); t:= b + ((c and a) or (d and not a)) + X[ 4]+$8F1BBCDC; b:= (t shl 8) or (t shr (32-8)); t:= a + ((b and d) or (c and not d)) + X[13]+$8F1BBCDC; a:= (t shl 9) or (t shr (32-9)); t:= d + ((a and c) or (b and not c)) + X[ 3]+$8F1BBCDC; d:= (t shl 14) or (t shr (32-14)); t:= c + ((d and b) or (a and not b)) + X[ 7]+$8F1BBCDC; c:= (t shl 5) or (t shr (32-5)); t:= b + ((c and a) or (d and not a)) + X[15]+$8F1BBCDC; b:= (t shl 6) or (t shr (32-6)); t:= a + ((b and d) or (c and not d)) + X[14]+$8F1BBCDC; a:= (t shl 8) or (t shr (32-8)); t:= d + ((a and c) or (b and not c)) + X[ 5]+$8F1BBCDC; d:= (t shl 6) or (t shr (32-6)); t:= c + ((d and b) or (a and not b)) + X[ 6]+$8F1BBCDC; c:= (t shl 5) or (t shr (32-5)); t:= b + ((c and a) or (d and not a)) + X[ 2]+$8F1BBCDC; b:= (t shl 12) or (t shr (32-12)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 5]+$50A28BE6; aa:= (t shl 8) or (t shr (32-8)); t:= dd + ((aa and cc) or (bb and not cc)) + X[14]+$50A28BE6; dd:= (t shl 9) or (t shr (32-9)); t:= cc + ((dd and bb) or (aa and not bb)) + X[ 7]+$50A28BE6; cc:= (t shl 9) or (t shr (32-9)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 0]+$50A28BE6; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 9]+$50A28BE6; aa:= (t shl 13) or (t shr (32-13)); t:= dd + ((aa and cc) or (bb and not cc)) + X[ 2]+$50A28BE6; dd:= (t shl 15) or (t shr (32-15)); t:= cc + ((dd and bb) or (aa and not bb)) + X[11]+$50A28BE6; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 4]+$50A28BE6; bb:= (t shl 5) or (t shr (32-5)); t:= aa + ((bb and dd) or (cc and not dd)) + X[13]+$50A28BE6; aa:= (t shl 7) or (t shr (32-7)); t:= dd + ((aa and cc) or (bb and not cc)) + X[ 6]+$50A28BE6; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd and bb) or (aa and not bb)) + X[15]+$50A28BE6; cc:= (t shl 8) or (t shr (32-8)); t:= bb + ((cc and aa) or (dd and not aa)) + X[ 8]+$50A28BE6; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and dd) or (cc and not dd)) + X[ 1]+$50A28BE6; aa:= (t shl 14) or (t shr (32-14)); t:= dd + ((aa and cc) or (bb and not cc)) + X[10]+$50A28BE6; dd:= (t shl 14) or (t shr (32-14)); t:= cc + ((dd and bb) or (aa and not bb)) + X[ 3]+$50A28BE6; cc:= (t shl 12) or (t shr (32-12)); t:= bb + ((cc and aa) or (dd and not aa)) + X[12]+$50A28BE6; bb:= (t shl 6) or (t shr (32-6)); t:= aa + ((bb or not cc) xor dd) + X[ 6]+$5C4DD124; aa:= (t shl 9) or (t shr (32-9)); t:= dd + ((aa or not bb) xor cc) + X[11]+$5C4DD124; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd or not aa) xor bb) + X[ 3]+$5C4DD124; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc or not dd) xor aa) + X[ 7]+$5C4DD124; bb:= (t shl 7) or (t shr (32-7)); t:= aa + ((bb or not cc) xor dd) + X[ 0]+$5C4DD124; aa:= (t shl 12) or (t shr (32-12)); t:= dd + ((aa or not bb) xor cc) + X[13]+$5C4DD124; dd:= (t shl 8) or (t shr (32-8)); t:= cc + ((dd or not aa) xor bb) + X[ 5]+$5C4DD124; cc:= (t shl 9) or (t shr (32-9)); t:= bb + ((cc or not dd) xor aa) + X[10]+$5C4DD124; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb or not cc) xor dd) + X[14]+$5C4DD124; aa:= (t shl 7) or (t shr (32-7)); t:= dd + ((aa or not bb) xor cc) + X[15]+$5C4DD124; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd or not aa) xor bb) + X[ 8]+$5C4DD124; cc:= (t shl 12) or (t shr (32-12)); t:= bb + ((cc or not dd) xor aa) + X[12]+$5C4DD124; bb:= (t shl 7) or (t shr (32-7)); t:= aa + ((bb or not cc) xor dd) + X[ 4]+$5C4DD124; aa:= (t shl 6) or (t shr (32-6)); t:= dd + ((aa or not bb) xor cc) + X[ 9]+$5C4DD124; dd:= (t shl 15) or (t shr (32-15)); t:= cc + ((dd or not aa) xor bb) + X[ 1]+$5C4DD124; cc:= (t shl 13) or (t shr (32-13)); t:= bb + ((cc or not dd) xor aa) + X[ 2]+$5C4DD124; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and cc) or (not bb and dd)) + X[15]+$6D703EF3; aa:= (t shl 9) or (t shr (32-9)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 5]+$6D703EF3; dd:= (t shl 7) or (t shr (32-7)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 1]+$6D703EF3; cc:= (t shl 15) or (t shr (32-15)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 3]+$6D703EF3; bb:= (t shl 11) or (t shr (32-11)); t:= aa + ((bb and cc) or (not bb and dd)) + X[ 7]+$6D703EF3; aa:= (t shl 8) or (t shr (32-8)); t:= dd + ((aa and bb) or (not aa and cc)) + X[14]+$6D703EF3; dd:= (t shl 6) or (t shr (32-6)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 6]+$6D703EF3; cc:= (t shl 6) or (t shr (32-6)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 9]+$6D703EF3; bb:= (t shl 14) or (t shr (32-14)); t:= aa + ((bb and cc) or (not bb and dd)) + X[11]+$6D703EF3; aa:= (t shl 12) or (t shr (32-12)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 8]+$6D703EF3; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd and aa) or (not dd and bb)) + X[12]+$6D703EF3; cc:= (t shl 5) or (t shr (32-5)); t:= bb + ((cc and dd) or (not cc and aa)) + X[ 2]+$6D703EF3; bb:= (t shl 14) or (t shr (32-14)); t:= aa + ((bb and cc) or (not bb and dd)) + X[10]+$6D703EF3; aa:= (t shl 13) or (t shr (32-13)); t:= dd + ((aa and bb) or (not aa and cc)) + X[ 0]+$6D703EF3; dd:= (t shl 13) or (t shr (32-13)); t:= cc + ((dd and aa) or (not dd and bb)) + X[ 4]+$6D703EF3; cc:= (t shl 7) or (t shr (32-7)); t:= bb + ((cc and dd) or (not cc and aa)) + X[13]+$6D703EF3; bb:= (t shl 5) or (t shr (32-5)); t:= aa + (bb xor cc xor dd) + X[ 8]; aa:= (t shl 15) or (t shr (32-15)); t:= dd + (aa xor bb xor cc) + X[ 6]; dd:= (t shl 5) or (t shr (32-5)); t:= cc + (dd xor aa xor bb) + X[ 4]; cc:= (t shl 8) or (t shr (32-8)); t:= bb + (cc xor dd xor aa) + X[ 1]; bb:= (t shl 11) or (t shr (32-11)); t:= aa + (bb xor cc xor dd) + X[ 3]; aa:= (t shl 14) or (t shr (32-14)); t:= dd + (aa xor bb xor cc) + X[11]; dd:= (t shl 14) or (t shr (32-14)); t:= cc + (dd xor aa xor bb) + X[15]; cc:= (t shl 6) or (t shr (32-6)); t:= bb + (cc xor dd xor aa) + X[ 0]; bb:= (t shl 14) or (t shr (32-14)); t:= aa + (bb xor cc xor dd) + X[ 5]; aa:= (t shl 6) or (t shr (32-6)); t:= dd + (aa xor bb xor cc) + X[12]; dd:= (t shl 9) or (t shr (32-9)); t:= cc + (dd xor aa xor bb) + X[ 2]; cc:= (t shl 12) or (t shr (32-12)); t:= bb + (cc xor dd xor aa) + X[13]; bb:= (t shl 9) or (t shr (32-9)); t:= aa + (bb xor cc xor dd) + X[ 9]; aa:= (t shl 12) or (t shr (32-12)); t:= dd + (aa xor bb xor cc) + X[ 7]; dd:= (t shl 5) or (t shr (32-5)); t:= cc + (dd xor aa xor bb) + X[10]; cc:= (t shl 15) or (t shr (32-15)); t:= bb + (cc xor dd xor aa) + X[14]; bb:= (t shl 8) or (t shr (32-8)); Inc(dd,c + CurrentHash[1]); CurrentHash[1]:= CurrentHash[2] + d + aa; CurrentHash[2]:= CurrentHash[3] + a + bb; CurrentHash[3]:= CurrentHash[0] + b + cc; CurrentHash[0]:= dd; FillChar(X,Sizeof(X),0); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_ripemd128.GetHashSize: integer; begin Result:= 128; end; class function TDCP_ripemd128.GetId: integer; begin Result:= DCP_ripemd128; end; class function TDCP_ripemd128.GetAlgorithm: string; begin Result:= 'RipeMD-128'; end; class function TDCP_ripemd128.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($86,$be,$7a,$fa,$33,$9d,$0f,$c7,$cf,$c7,$85,$e7,$2f,$57,$8d,$33); Test2Out: array[0..15] of byte= ($fd,$2a,$a6,$07,$f7,$1d,$c8,$f5,$10,$71,$49,$22,$b3,$71,$83,$4e); var TestHash: TDCP_ripemd128; TestOut: array[0..15] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_ripemd128.Create(nil); TestHash.Init; TestHash.UpdateStr('a'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_ripemd128.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_ripemd128.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_ripemd128.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_ripemd128.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/DCPtiger.inc0000644000175000001440000005522112014201074022075 0ustar alexxusersconst t1: array[0..255] of int64= ( $02AAB17CF7E90C5E, $AC424B03E243A8EC, $72CD5BE30DD5FCD3, $6D019B93F6F97F3A, $CD9978FFD21F9193, $7573A1C9708029E2, $B164326B922A83C3, $46883EEE04915870, $EAACE3057103ECE6, $C54169B808A3535C, $4CE754918DDEC47C, $0AA2F4DFDC0DF40C, $10B76F18A74DBEFA, $C6CCB6235AD1AB6A, $13726121572FE2FF, $1A488C6F199D921E, $4BC9F9F4DA0007CA, $26F5E6F6E85241C7, $859079DBEA5947B6, $4F1885C5C99E8C92, $D78E761EA96F864B, $8E36428C52B5C17D, $69CF6827373063C1, $B607C93D9BB4C56E, $7D820E760E76B5EA, $645C9CC6F07FDC42, $BF38A078243342E0, $5F6B343C9D2E7D04, $F2C28AEB600B0EC6, $6C0ED85F7254BCAC, $71592281A4DB4FE5, $1967FA69CE0FED9F, $FD5293F8B96545DB, $C879E9D7F2A7600B, $860248920193194E, $A4F9533B2D9CC0B3, $9053836C15957613, $DB6DCF8AFC357BF1, $18BEEA7A7A370F57, $037117CA50B99066, $6AB30A9774424A35, $F4E92F02E325249B, $7739DB07061CCAE1, $D8F3B49CECA42A05, $BD56BE3F51382F73, $45FAED5843B0BB28, $1C813D5C11BF1F83, $8AF0E4B6D75FA169, $33EE18A487AD9999, $3C26E8EAB1C94410, $B510102BC0A822F9, $141EEF310CE6123B, $FC65B90059DDB154, $E0158640C5E0E607, $884E079826C3A3CF, $930D0D9523C535FD, $35638D754E9A2B00, $4085FCCF40469DD5, $C4B17AD28BE23A4C, $CAB2F0FC6A3E6A2E, $2860971A6B943FCD, $3DDE6EE212E30446, $6222F32AE01765AE, $5D550BB5478308FE, $A9EFA98DA0EDA22A, $C351A71686C40DA7, $1105586D9C867C84, $DCFFEE85FDA22853, $CCFBD0262C5EEF76, $BAF294CB8990D201, $E69464F52AFAD975, $94B013AFDF133E14, $06A7D1A32823C958, $6F95FE5130F61119, $D92AB34E462C06C0, $ED7BDE33887C71D2, $79746D6E6518393E, $5BA419385D713329, $7C1BA6B948A97564, $31987C197BFDAC67, $DE6C23C44B053D02, $581C49FED002D64D, $DD474D6338261571, $AA4546C3E473D062, $928FCE349455F860, $48161BBACAAB94D9, $63912430770E6F68, $6EC8A5E602C6641C, $87282515337DDD2B, $2CDA6B42034B701B, $B03D37C181CB096D, $E108438266C71C6F, $2B3180C7EB51B255, $DF92B82F96C08BBC, $5C68C8C0A632F3BA, $5504CC861C3D0556, $ABBFA4E55FB26B8F, $41848B0AB3BACEB4, $B334A273AA445D32, $BCA696F0A85AD881, $24F6EC65B528D56C, $0CE1512E90F4524A, $4E9DD79D5506D35A, $258905FAC6CE9779, $2019295B3E109B33, $F8A9478B73A054CC, $2924F2F934417EB0, $3993357D536D1BC4, $38A81AC21DB6FF8B, $47C4FBF17D6016BF, $1E0FAADD7667E3F5, $7ABCFF62938BEB96, $A78DAD948FC179C9, $8F1F98B72911E50D, $61E48EAE27121A91, $4D62F7AD31859808, $ECEBA345EF5CEAEB, $F5CEB25EBC9684CE, $F633E20CB7F76221, $A32CDF06AB8293E4, $985A202CA5EE2CA4, $CF0B8447CC8A8FB1, $9F765244979859A3, $A8D516B1A1240017, $0BD7BA3EBB5DC726, $E54BCA55B86ADB39, $1D7A3AFD6C478063, $519EC608E7669EDD, $0E5715A2D149AA23, $177D4571848FF194, $EEB55F3241014C22, $0F5E5CA13A6E2EC2, $8029927B75F5C361, $AD139FABC3D6E436, $0D5DF1A94CCF402F, $3E8BD948BEA5DFC8, $A5A0D357BD3FF77E, $A2D12E251F74F645, $66FD9E525E81A082, $2E0C90CE7F687A49, $C2E8BCBEBA973BC5, $000001BCE509745F, $423777BBE6DAB3D6, $D1661C7EAEF06EB5, $A1781F354DAACFD8, $2D11284A2B16AFFC, $F1FC4F67FA891D1F, $73ECC25DCB920ADA, $AE610C22C2A12651, $96E0A810D356B78A, $5A9A381F2FE7870F, $D5AD62EDE94E5530, $D225E5E8368D1427, $65977B70C7AF4631, $99F889B2DE39D74F, $233F30BF54E1D143, $9A9675D3D9A63C97, $5470554FF334F9A8, $166ACB744A4F5688, $70C74CAAB2E4AEAD, $F0D091646F294D12, $57B82A89684031D1, $EFD95A5A61BE0B6B, $2FBD12E969F2F29A, $9BD37013FEFF9FE8, $3F9B0404D6085A06, $4940C1F3166CFE15, $09542C4DCDF3DEFB, $B4C5218385CD5CE3, $C935B7DC4462A641, $3417F8A68ED3B63F, $B80959295B215B40, $F99CDAEF3B8C8572, $018C0614F8FCB95D, $1B14ACCD1A3ACDF3, $84D471F200BB732D, $C1A3110E95E8DA16, $430A7220BF1A82B8, $B77E090D39DF210E, $5EF4BD9F3CD05E9D, $9D4FF6DA7E57A444, $DA1D60E183D4A5F8, $B287C38417998E47, $FE3EDC121BB31886, $C7FE3CCC980CCBEF, $E46FB590189BFD03, $3732FD469A4C57DC, $7EF700A07CF1AD65, $59C64468A31D8859, $762FB0B4D45B61F6, $155BAED099047718, $68755E4C3D50BAA6, $E9214E7F22D8B4DF, $2ADDBF532EAC95F4, $32AE3909B4BD0109, $834DF537B08E3450, $FA209DA84220728D, $9E691D9B9EFE23F7, $0446D288C4AE8D7F, $7B4CC524E169785B, $21D87F0135CA1385, $CEBB400F137B8AA5, $272E2B66580796BE, $3612264125C2B0DE, $057702BDAD1EFBB2, $D4BABB8EACF84BE9, $91583139641BC67B, $8BDC2DE08036E024, $603C8156F49F68ED, $F7D236F7DBEF5111, $9727C4598AD21E80, $A08A0896670A5FD7, $CB4A8F4309EBA9CB, $81AF564B0F7036A1, $C0B99AA778199ABD, $959F1EC83FC8E952, $8C505077794A81B9, $3ACAAF8F056338F0, $07B43F50627A6778, $4A44AB49F5ECCC77, $3BC3D6E4B679EE98, $9CC0D4D1CF14108C, $4406C00B206BC8A0, $82A18854C8D72D89, $67E366B35C3C432C, $B923DD61102B37F2, $56AB2779D884271D, $BE83E1B0FF1525AF, $FB7C65D4217E49A9, $6BDBE0E76D48E7D4, $08DF828745D9179E, $22EA6A9ADD53BD34, $E36E141C5622200A, $7F805D1B8CB750EE, $AFE5C7A59F58E837, $E27F996A4FB1C23C, $D3867DFB0775F0D0, $D0E673DE6E88891A, $123AEB9EAFB86C25, $30F1D5D5C145B895, $BB434A2DEE7269E7, $78CB67ECF931FA38, $F33B0372323BBF9C, $52D66336FB279C74, $505F33AC0AFB4EAA, $E8A5CD99A2CCE187, $534974801E2D30BB, $8D2D5711D5876D90, $1F1A412891BC038E, $D6E2E71D82E56648, $74036C3A497732B7, $89B67ED96361F5AB, $FFED95D8F1EA02A2, $E72B3BD61464D43D, $A6300F170BDC4820, $EBC18760ED78A77A); t2: array[0..255] of int64= ( $E6A6BE5A05A12138, $B5A122A5B4F87C98, $563C6089140B6990, $4C46CB2E391F5DD5, $D932ADDBC9B79434, $08EA70E42015AFF5, $D765A6673E478CF1, $C4FB757EAB278D99, $DF11C6862D6E0692, $DDEB84F10D7F3B16, $6F2EF604A665EA04, $4A8E0F0FF0E0DFB3, $A5EDEEF83DBCBA51, $FC4F0A2A0EA4371E, $E83E1DA85CB38429, $DC8FF882BA1B1CE2, $CD45505E8353E80D, $18D19A00D4DB0717, $34A0CFEDA5F38101, $0BE77E518887CAF2, $1E341438B3C45136, $E05797F49089CCF9, $FFD23F9DF2591D14, $543DDA228595C5CD, $661F81FD99052A33, $8736E641DB0F7B76, $15227725418E5307, $E25F7F46162EB2FA, $48A8B2126C13D9FE, $AFDC541792E76EEA, $03D912BFC6D1898F, $31B1AAFA1B83F51B, $F1AC2796E42AB7D9, $40A3A7D7FCD2EBAC, $1056136D0AFBBCC5, $7889E1DD9A6D0C85, $D33525782A7974AA, $A7E25D09078AC09B, $BD4138B3EAC6EDD0, $920ABFBE71EB9E70, $A2A5D0F54FC2625C, $C054E36B0B1290A3, $F6DD59FF62FE932B, $3537354511A8AC7D, $CA845E9172FADCD4, $84F82B60329D20DC, $79C62CE1CD672F18, $8B09A2ADD124642C, $D0C1E96A19D9E726, $5A786A9B4BA9500C, $0E020336634C43F3, $C17B474AEB66D822, $6A731AE3EC9BAAC2, $8226667AE0840258, $67D4567691CAECA5, $1D94155C4875ADB5, $6D00FD985B813FDF, $51286EFCB774CD06, $5E8834471FA744AF, $F72CA0AEE761AE2E, $BE40E4CDAEE8E09A, $E9970BBB5118F665, $726E4BEB33DF1964, $703B000729199762, $4631D816F5EF30A7, $B880B5B51504A6BE, $641793C37ED84B6C, $7B21ED77F6E97D96, $776306312EF96B73, $AE528948E86FF3F4, $53DBD7F286A3F8F8, $16CADCE74CFC1063, $005C19BDFA52C6DD, $68868F5D64D46AD3, $3A9D512CCF1E186A, $367E62C2385660AE, $E359E7EA77DCB1D7, $526C0773749ABE6E, $735AE5F9D09F734B, $493FC7CC8A558BA8, $B0B9C1533041AB45, $321958BA470A59BD, $852DB00B5F46C393, $91209B2BD336B0E5, $6E604F7D659EF19F, $B99A8AE2782CCB24, $CCF52AB6C814C4C7, $4727D9AFBE11727B, $7E950D0C0121B34D, $756F435670AD471F, $F5ADD442615A6849, $4E87E09980B9957A, $2ACFA1DF50AEE355, $D898263AFD2FD556, $C8F4924DD80C8FD6, $CF99CA3D754A173A, $FE477BACAF91BF3C, $ED5371F6D690C12D, $831A5C285E687094, $C5D3C90A3708A0A4, $0F7F903717D06580, $19F9BB13B8FDF27F, $B1BD6F1B4D502843, $1C761BA38FFF4012, $0D1530C4E2E21F3B, $8943CE69A7372C8A, $E5184E11FEB5CE66, $618BDB80BD736621, $7D29BAD68B574D0B, $81BB613E25E6FE5B, $071C9C10BC07913F, $C7BEEB7909AC2D97, $C3E58D353BC5D757, $EB017892F38F61E8, $D4EFFB9C9B1CC21A, $99727D26F494F7AB, $A3E063A2956B3E03, $9D4A8B9A4AA09C30, $3F6AB7D500090FB4, $9CC0F2A057268AC0, $3DEE9D2DEDBF42D1, $330F49C87960A972, $C6B2720287421B41, $0AC59EC07C00369C, $EF4EAC49CB353425, $F450244EEF0129D8, $8ACC46E5CAF4DEB6, $2FFEAB63989263F7, $8F7CB9FE5D7A4578, $5BD8F7644E634635, $427A7315BF2DC900, $17D0C4AA2125261C, $3992486C93518E50, $B4CBFEE0A2D7D4C3, $7C75D6202C5DDD8D, $DBC295D8E35B6C61, $60B369D302032B19, $CE42685FDCE44132, $06F3DDB9DDF65610, $8EA4D21DB5E148F0, $20B0FCE62FCD496F, $2C1B912358B0EE31, $B28317B818F5A308, $A89C1E189CA6D2CF, $0C6B18576AAADBC8, $B65DEAA91299FAE3, $FB2B794B7F1027E7, $04E4317F443B5BEB, $4B852D325939D0A6, $D5AE6BEEFB207FFC, $309682B281C7D374, $BAE309A194C3B475, $8CC3F97B13B49F05, $98A9422FF8293967, $244B16B01076FF7C, $F8BF571C663D67EE, $1F0D6758EEE30DA1, $C9B611D97ADEB9B7, $B7AFD5887B6C57A2, $6290AE846B984FE1, $94DF4CDEACC1A5FD, $058A5BD1C5483AFF, $63166CC142BA3C37, $8DB8526EB2F76F40, $E10880036F0D6D4E, $9E0523C9971D311D, $45EC2824CC7CD691, $575B8359E62382C9, $FA9E400DC4889995, $D1823ECB45721568, $DAFD983B8206082F, $AA7D29082386A8CB, $269FCD4403B87588, $1B91F5F728BDD1E0, $E4669F39040201F6, $7A1D7C218CF04ADE, $65623C29D79CE5CE, $2368449096C00BB1, $AB9BF1879DA503BA, $BC23ECB1A458058E, $9A58DF01BB401ECC, $A070E868A85F143D, $4FF188307DF2239E, $14D565B41A641183, $EE13337452701602, $950E3DCF3F285E09, $59930254B9C80953, $3BF299408930DA6D, $A955943F53691387, $A15EDECAA9CB8784, $29142127352BE9A0, $76F0371FFF4E7AFB, $0239F450274F2228, $BB073AF01D5E868B, $BFC80571C10E96C1, $D267088568222E23, $9671A3D48E80B5B0, $55B5D38AE193BB81, $693AE2D0A18B04B8, $5C48B4ECADD5335F, $FD743B194916A1CA, $2577018134BE98C4, $E77987E83C54A4AD, $28E11014DA33E1B9, $270CC59E226AA213, $71495F756D1A5F60, $9BE853FB60AFEF77, $ADC786A7F7443DBF, $0904456173B29A82, $58BC7A66C232BD5E, $F306558C673AC8B2, $41F639C6B6C9772A, $216DEFE99FDA35DA, $11640CC71C7BE615, $93C43694565C5527, $EA038E6246777839, $F9ABF3CE5A3E2469, $741E768D0FD312D2, $0144B883CED652C6, $C20B5A5BA33F8552, $1AE69633C3435A9D, $97A28CA4088CFDEC, $8824A43C1E96F420, $37612FA66EEEA746, $6B4CB165F9CF0E5A, $43AA1C06A0ABFB4A, $7F4DC26FF162796B, $6CBACC8E54ED9B0F, $A6B7FFEFD2BB253E, $2E25BC95B0A29D4F, $86D6A58BDEF1388C, $DED74AC576B6F054, $8030BDBC2B45805D, $3C81AF70E94D9289, $3EFF6DDA9E3100DB, $B38DC39FDFCC8847, $123885528D17B87E, $F2DA0ED240B1B642, $44CEFADCD54BF9A9, $1312200E433C7EE6, $9FFCC84F3A78C748, $F0CD1F72248576BB, $EC6974053638CFE4, $2BA7B67C0CEC4E4C, $AC2F4DF3E5CE32ED, $CB33D14326EA4C11, $A4E9044CC77E58BC, $5F513293D934FCEF, $5DC9645506E55444, $50DE418F317DE40A, $388CB31A69DDE259, $2DB4A83455820A86, $9010A91E84711AE9, $4DF7F0B7B1498371, $D62A2EABC0977179, $22FAC097AA8D5C0E); t3: array[0..255] of int64= ( $F49FCC2FF1DAF39B, $487FD5C66FF29281, $E8A30667FCDCA83F, $2C9B4BE3D2FCCE63, $DA3FF74B93FBBBC2, $2FA165D2FE70BA66, $A103E279970E93D4, $BECDEC77B0E45E71, $CFB41E723985E497, $B70AAA025EF75017, $D42309F03840B8E0, $8EFC1AD035898579, $96C6920BE2B2ABC5, $66AF4163375A9172, $2174ABDCCA7127FB, $B33CCEA64A72FF41, $F04A4933083066A5, $8D970ACDD7289AF5, $8F96E8E031C8C25E, $F3FEC02276875D47, $EC7BF310056190DD, $F5ADB0AEBB0F1491, $9B50F8850FD58892, $4975488358B74DE8, $A3354FF691531C61, $0702BBE481D2C6EE, $89FB24057DEDED98, $AC3075138596E902, $1D2D3580172772ED, $EB738FC28E6BC30D, $5854EF8F63044326, $9E5C52325ADD3BBE, $90AA53CF325C4623, $C1D24D51349DD067, $2051CFEEA69EA624, $13220F0A862E7E4F, $CE39399404E04864, $D9C42CA47086FCB7, $685AD2238A03E7CC, $066484B2AB2FF1DB, $FE9D5D70EFBF79EC, $5B13B9DD9C481854, $15F0D475ED1509AD, $0BEBCD060EC79851, $D58C6791183AB7F8, $D1187C5052F3EEE4, $C95D1192E54E82FF, $86EEA14CB9AC6CA2, $3485BEB153677D5D, $DD191D781F8C492A, $F60866BAA784EBF9, $518F643BA2D08C74, $8852E956E1087C22, $A768CB8DC410AE8D, $38047726BFEC8E1A, $A67738B4CD3B45AA, $AD16691CEC0DDE19, $C6D4319380462E07, $C5A5876D0BA61938, $16B9FA1FA58FD840, $188AB1173CA74F18, $ABDA2F98C99C021F, $3E0580AB134AE816, $5F3B05B773645ABB, $2501A2BE5575F2F6, $1B2F74004E7E8BA9, $1CD7580371E8D953, $7F6ED89562764E30, $B15926FF596F003D, $9F65293DA8C5D6B9, $6ECEF04DD690F84C, $4782275FFF33AF88, $E41433083F820801, $FD0DFE409A1AF9B5, $4325A3342CDB396B, $8AE77E62B301B252, $C36F9E9F6655615A, $85455A2D92D32C09, $F2C7DEA949477485, $63CFB4C133A39EBA, $83B040CC6EBC5462, $3B9454C8FDB326B0, $56F56A9E87FFD78C, $2DC2940D99F42BC6, $98F7DF096B096E2D, $19A6E01E3AD852BF, $42A99CCBDBD4B40B, $A59998AF45E9C559, $366295E807D93186, $6B48181BFAA1F773, $1FEC57E2157A0A1D, $4667446AF6201AD5, $E615EBCACFB0F075, $B8F31F4F68290778, $22713ED6CE22D11E, $3057C1A72EC3C93B, $CB46ACC37C3F1F2F, $DBB893FD02AAF50E, $331FD92E600B9FCF, $A498F96148EA3AD6, $A8D8426E8B6A83EA, $A089B274B7735CDC, $87F6B3731E524A11, $118808E5CBC96749, $9906E4C7B19BD394, $AFED7F7E9B24A20C, $6509EADEEB3644A7, $6C1EF1D3E8EF0EDE, $B9C97D43E9798FB4, $A2F2D784740C28A3, $7B8496476197566F, $7A5BE3E6B65F069D, $F96330ED78BE6F10, $EEE60DE77A076A15, $2B4BEE4AA08B9BD0, $6A56A63EC7B8894E, $02121359BA34FEF4, $4CBF99F8283703FC, $398071350CAF30C8, $D0A77A89F017687A, $F1C1A9EB9E423569, $8C7976282DEE8199, $5D1737A5DD1F7ABD, $4F53433C09A9FA80, $FA8B0C53DF7CA1D9, $3FD9DCBC886CCB77, $C040917CA91B4720, $7DD00142F9D1DCDF, $8476FC1D4F387B58, $23F8E7C5F3316503, $032A2244E7E37339, $5C87A5D750F5A74B, $082B4CC43698992E, $DF917BECB858F63C, $3270B8FC5BF86DDA, $10AE72BB29B5DD76, $576AC94E7700362B, $1AD112DAC61EFB8F, $691BC30EC5FAA427, $FF246311CC327143, $3142368E30E53206, $71380E31E02CA396, $958D5C960AAD76F1, $F8D6F430C16DA536, $C8FFD13F1BE7E1D2, $7578AE66004DDBE1, $05833F01067BE646, $BB34B5AD3BFE586D, $095F34C9A12B97F0, $247AB64525D60CA8, $DCDBC6F3017477D1, $4A2E14D4DECAD24D, $BDB5E6D9BE0A1EEB, $2A7E70F7794301AB, $DEF42D8A270540FD, $01078EC0A34C22C1, $E5DE511AF4C16387, $7EBB3A52BD9A330A, $77697857AA7D6435, $004E831603AE4C32, $E7A21020AD78E312, $9D41A70C6AB420F2, $28E06C18EA1141E6, $D2B28CBD984F6B28, $26B75F6C446E9D83, $BA47568C4D418D7F, $D80BADBFE6183D8E, $0E206D7F5F166044, $E258A43911CBCA3E, $723A1746B21DC0BC, $C7CAA854F5D7CDD3, $7CAC32883D261D9C, $7690C26423BA942C, $17E55524478042B8, $E0BE477656A2389F, $4D289B5E67AB2DA0, $44862B9C8FBBFD31, $B47CC8049D141365, $822C1B362B91C793, $4EB14655FB13DFD8, $1ECBBA0714E2A97B, $6143459D5CDE5F14, $53A8FBF1D5F0AC89, $97EA04D81C5E5B00, $622181A8D4FDB3F3, $E9BCD341572A1208, $1411258643CCE58A, $9144C5FEA4C6E0A4, $0D33D06565CF620F, $54A48D489F219CA1, $C43E5EAC6D63C821, $A9728B3A72770DAF, $D7934E7B20DF87EF, $E35503B61A3E86E5, $CAE321FBC819D504, $129A50B3AC60BFA6, $CD5E68EA7E9FB6C3, $B01C90199483B1C7, $3DE93CD5C295376C, $AED52EDF2AB9AD13, $2E60F512C0A07884, $BC3D86A3E36210C9, $35269D9B163951CE, $0C7D6E2AD0CDB5FA, $59E86297D87F5733, $298EF221898DB0E7, $55000029D1A5AA7E, $8BC08AE1B5061B45, $C2C31C2B6C92703A, $94CC596BAF25EF42, $0A1D73DB22540456, $04B6A0F9D9C4179A, $EFFDAFA2AE3D3C60, $F7C8075BB49496C4, $9CC5C7141D1CD4E3, $78BD1638218E5534, $B2F11568F850246A, $EDFABCFA9502BC29, $796CE5F2DA23051B, $AAE128B0DC93537C, $3A493DA0EE4B29AE, $B5DF6B2C416895D7, $FCABBD25122D7F37, $70810B58105DC4B1, $E10FDD37F7882A90, $524DCAB5518A3F5C, $3C9E85878451255B, $4029828119BD34E2, $74A05B6F5D3CECCB, $B610021542E13ECA, $0FF979D12F59E2AC, $6037DA27E4F9CC50, $5E92975A0DF1847D, $D66DE190D3E623FE, $5032D6B87B568048, $9A36B7CE8235216E, $80272A7A24F64B4A, $93EFED8B8C6916F7, $37DDBFF44CCE1555, $4B95DB5D4B99BD25, $92D3FDA169812FC0, $FB1A4A9A90660BB6, $730C196946A4B9B2, $81E289AA7F49DA68, $64669A0F83B1A05F, $27B3FF7D9644F48B, $CC6B615C8DB675B3, $674F20B9BCEBBE95, $6F31238275655982, $5AE488713E45CF05, $BF619F9954C21157, $EABAC46040A8EAE9, $454C6FE9F2C0C1CD, $419CF6496412691C, $D3DC3BEF265B0F70, $6D0E60F5C3578A9E); t4: array[0..255] of int64= ( $5B0E608526323C55, $1A46C1A9FA1B59F5, $A9E245A17C4C8FFA, $65CA5159DB2955D7, $05DB0A76CE35AFC2, $81EAC77EA9113D45, $528EF88AB6AC0A0D, $A09EA253597BE3FF, $430DDFB3AC48CD56, $C4B3A67AF45CE46F, $4ECECFD8FBE2D05E, $3EF56F10B39935F0, $0B22D6829CD619C6, $17FD460A74DF2069, $6CF8CC8E8510ED40, $D6C824BF3A6ECAA7, $61243D581A817049, $048BACB6BBC163A2, $D9A38AC27D44CC32, $7FDDFF5BAAF410AB, $AD6D495AA804824B, $E1A6A74F2D8C9F94, $D4F7851235DEE8E3, $FD4B7F886540D893, $247C20042AA4BFDA, $096EA1C517D1327C, $D56966B4361A6685, $277DA5C31221057D, $94D59893A43ACFF7, $64F0C51CCDC02281, $3D33BCC4FF6189DB, $E005CB184CE66AF1, $FF5CCD1D1DB99BEA, $B0B854A7FE42980F, $7BD46A6A718D4B9F, $D10FA8CC22A5FD8C, $D31484952BE4BD31, $C7FA975FCB243847, $4886ED1E5846C407, $28CDDB791EB70B04, $C2B00BE2F573417F, $5C9590452180F877, $7A6BDDFFF370EB00, $CE509E38D6D9D6A4, $EBEB0F00647FA702, $1DCC06CF76606F06, $E4D9F28BA286FF0A, $D85A305DC918C262, $475B1D8732225F54, $2D4FB51668CCB5FE, $A679B9D9D72BBA20, $53841C0D912D43A5, $3B7EAA48BF12A4E8, $781E0E47F22F1DDF, $EFF20CE60AB50973, $20D261D19DFFB742, $16A12B03062A2E39, $1960EB2239650495, $251C16FED50EB8B8, $9AC0C330F826016E, $ED152665953E7671, $02D63194A6369570, $5074F08394B1C987, $70BA598C90B25CE1, $794A15810B9742F6, $0D5925E9FCAF8C6C, $3067716CD868744E, $910AB077E8D7731B, $6A61BBDB5AC42F61, $93513EFBF0851567, $F494724B9E83E9D5, $E887E1985C09648D, $34B1D3C675370CFD, $DC35E433BC0D255D, $D0AAB84234131BE0, $08042A50B48B7EAF, $9997C4EE44A3AB35, $829A7B49201799D0, $263B8307B7C54441, $752F95F4FD6A6CA6, $927217402C08C6E5, $2A8AB754A795D9EE, $A442F7552F72943D, $2C31334E19781208, $4FA98D7CEAEE6291, $55C3862F665DB309, $BD0610175D53B1F3, $46FE6CB840413F27, $3FE03792DF0CFA59, $CFE700372EB85E8F, $A7BE29E7ADBCE118, $E544EE5CDE8431DD, $8A781B1B41F1873E, $A5C94C78A0D2F0E7, $39412E2877B60728, $A1265EF3AFC9A62C, $BCC2770C6A2506C5, $3AB66DD5DCE1CE12, $E65499D04A675B37, $7D8F523481BFD216, $0F6F64FCEC15F389, $74EFBE618B5B13C8, $ACDC82B714273E1D, $DD40BFE003199D17, $37E99257E7E061F8, $FA52626904775AAA, $8BBBF63A463D56F9, $F0013F1543A26E64, $A8307E9F879EC898, $CC4C27A4150177CC, $1B432F2CCA1D3348, $DE1D1F8F9F6FA013, $606602A047A7DDD6, $D237AB64CC1CB2C7, $9B938E7225FCD1D3, $EC4E03708E0FF476, $FEB2FBDA3D03C12D, $AE0BCED2EE43889A, $22CB8923EBFB4F43, $69360D013CF7396D, $855E3602D2D4E022, $073805BAD01F784C, $33E17A133852F546, $DF4874058AC7B638, $BA92B29C678AA14A, $0CE89FC76CFAADCD, $5F9D4E0908339E34, $F1AFE9291F5923B9, $6E3480F60F4A265F, $EEBF3A2AB29B841C, $E21938A88F91B4AD, $57DFEFF845C6D3C3, $2F006B0BF62CAAF2, $62F479EF6F75EE78, $11A55AD41C8916A9, $F229D29084FED453, $42F1C27B16B000E6, $2B1F76749823C074, $4B76ECA3C2745360, $8C98F463B91691BD, $14BCC93CF1ADE66A, $8885213E6D458397, $8E177DF0274D4711, $B49B73B5503F2951, $10168168C3F96B6B, $0E3D963B63CAB0AE, $8DFC4B5655A1DB14, $F789F1356E14DE5C, $683E68AF4E51DAC1, $C9A84F9D8D4B0FD9, $3691E03F52A0F9D1, $5ED86E46E1878E80, $3C711A0E99D07150, $5A0865B20C4E9310, $56FBFC1FE4F0682E, $EA8D5DE3105EDF9B, $71ABFDB12379187A, $2EB99DE1BEE77B9C, $21ECC0EA33CF4523, $59A4D7521805C7A1, $3896F5EB56AE7C72, $AA638F3DB18F75DC, $9F39358DABE9808E, $B7DEFA91C00B72AC, $6B5541FD62492D92, $6DC6DEE8F92E4D5B, $353F57ABC4BEEA7E, $735769D6DA5690CE, $0A234AA642391484, $F6F9508028F80D9D, $B8E319A27AB3F215, $31AD9C1151341A4D, $773C22A57BEF5805, $45C7561A07968633, $F913DA9E249DBE36, $DA652D9B78A64C68, $4C27A97F3BC334EF, $76621220E66B17F4, $967743899ACD7D0B, $F3EE5BCAE0ED6782, $409F753600C879FC, $06D09A39B5926DB6, $6F83AEB0317AC588, $01E6CA4A86381F21, $66FF3462D19F3025, $72207C24DDFD3BFB, $4AF6B6D3E2ECE2EB, $9C994DBEC7EA08DE, $49ACE597B09A8BC4, $B38C4766CF0797BA, $131B9373C57C2A75, $B1822CCE61931E58, $9D7555B909BA1C0C, $127FAFDD937D11D2, $29DA3BADC66D92E4, $A2C1D57154C2ECBC, $58C5134D82F6FE24, $1C3AE3515B62274F, $E907C82E01CB8126, $F8ED091913E37FCB, $3249D8F9C80046C9, $80CF9BEDE388FB63, $1881539A116CF19E, $5103F3F76BD52457, $15B7E6F5AE47F7A8, $DBD7C6DED47E9CCF, $44E55C410228BB1A, $B647D4255EDB4E99, $5D11882BB8AAFC30, $F5098BBB29D3212A, $8FB5EA14E90296B3, $677B942157DD025A, $FB58E7C0A390ACB5, $89D3674C83BD4A01, $9E2DA4DF4BF3B93B, $FCC41E328CAB4829, $03F38C96BA582C52, $CAD1BDBD7FD85DB2, $BBB442C16082AE83, $B95FE86BA5DA9AB0, $B22E04673771A93F, $845358C9493152D8, $BE2A488697B4541E, $95A2DC2DD38E6966, $C02C11AC923C852B, $2388B1990DF2A87B, $7C8008FA1B4F37BE, $1F70D0C84D54E503, $5490ADEC7ECE57D4, $002B3C27D9063A3A, $7EAEA3848030A2BF, $C602326DED2003C0, $83A7287D69A94086, $C57A5FCB30F57A8A, $B56844E479EBE779, $A373B40F05DCBCE9, $D71A786E88570EE2, $879CBACDBDE8F6A0, $976AD1BCC164A32F, $AB21E25E9666D78B, $901063AAE5E5C33C, $9818B34448698D90, $E36487AE3E1E8ABB, $AFBDF931893BDCB4, $6345A0DC5FBBD519, $8628FE269B9465CA, $1E5D01603F9C51EC, $4DE44006A15049B7, $BF6C70E5F776CBB1, $411218F2EF552BED, $CB0C0708705A36A3, $E74D14754F986044, $CD56D9430EA8280E, $C12591D7535F5065, $C83223F1720AEF96, $C3A0396F7363A51F); doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpsha1.pas0000644000175000001440000003550112014201074021770 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA1 *********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha1; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_sha1= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..4] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function SwapDWord(a: dword): dword; begin Result:= ((a and $FF) shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24); end; procedure TDCP_sha1.Compress; var A, B, C, D, E: DWord; W: array[0..79] of DWord; i: longword; begin Index:= 0; dcpFillChar(W, SizeOf(W), 0); Move(HashBuffer,W,Sizeof(HashBuffer)); for i:= 0 to 15 do W[i]:= SwapDWord(W[i]); for i:= 16 to 79 do W[i]:= ((W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]) shl 1) or ((W[i-3] xor W[i-8] xor W[i-14] xor W[i-16]) shr 31); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; E:= CurrentHash[4]; Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[ 0]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[ 1]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[ 2]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[ 3]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[ 4]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[ 5]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[ 6]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[ 7]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[ 8]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[ 9]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[10]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[11]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[12]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[13]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[14]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (D xor (B and (C xor D))) + $5A827999 + W[15]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (C xor (A and (B xor C))) + $5A827999 + W[16]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (B xor (E and (A xor B))) + $5A827999 + W[17]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (A xor (D and (E xor A))) + $5A827999 + W[18]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (E xor (C and (D xor E))) + $5A827999 + W[19]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[20]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[21]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[22]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[23]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[24]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[25]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[26]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[27]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[28]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[29]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[30]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[31]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[32]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[33]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[34]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $6ED9EBA1 + W[35]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $6ED9EBA1 + W[36]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $6ED9EBA1 + W[37]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $6ED9EBA1 + W[38]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $6ED9EBA1 + W[39]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[40]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[41]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[42]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[43]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[44]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[45]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[46]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[47]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[48]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[49]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[50]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[51]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[52]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[53]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[54]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + ((B and C) or (D and (B or C))) + $8F1BBCDC + W[55]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + ((A and B) or (C and (A or B))) + $8F1BBCDC + W[56]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + ((E and A) or (B and (E or A))) + $8F1BBCDC + W[57]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + ((D and E) or (A and (D or E))) + $8F1BBCDC + W[58]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + ((C and D) or (E and (C or D))) + $8F1BBCDC + W[59]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[60]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[61]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[62]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[63]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[64]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[65]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[66]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[67]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[68]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[69]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[70]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[71]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[72]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[73]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[74]); C:= (C shl 30) or (C shr 2); Inc(E,((A shl 5) or (A shr 27)) + (B xor C xor D) + $CA62C1D6 + W[75]); B:= (B shl 30) or (B shr 2); Inc(D,((E shl 5) or (E shr 27)) + (A xor B xor C) + $CA62C1D6 + W[76]); A:= (A shl 30) or (A shr 2); Inc(C,((D shl 5) or (D shr 27)) + (E xor A xor B) + $CA62C1D6 + W[77]); E:= (E shl 30) or (E shr 2); Inc(B,((C shl 5) or (C shr 27)) + (D xor E xor A) + $CA62C1D6 + W[78]); D:= (D shl 30) or (D shr 2); Inc(A,((B shl 5) or (B shr 27)) + (C xor D xor E) + $CA62C1D6 + W[79]); C:= (C shl 30) or (C shr 2); CurrentHash[0]:= CurrentHash[0] + A; CurrentHash[1]:= CurrentHash[1] + B; CurrentHash[2]:= CurrentHash[2] + C; CurrentHash[3]:= CurrentHash[3] + D; CurrentHash[4]:= CurrentHash[4] + E; FillChar(W,Sizeof(W),0); FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_sha1.GetAlgorithm: string; begin Result:= 'SHA1'; end; class function TDCP_sha1.GetId: integer; begin Result:= DCP_sha1; end; class function TDCP_sha1.GetHashSize: integer; begin Result:= 160; end; class function TDCP_sha1.SelfTest: boolean; const Test1Out: array[0..19] of byte= ($A9,$99,$3E,$36,$47,$06,$81,$6A,$BA,$3E,$25,$71,$78,$50,$C2,$6C,$9C,$D0,$D8,$9D); Test2Out: array[0..19] of byte= ($84,$98,$3E,$44,$1C,$3B,$D2,$6E,$BA,$AE,$4A,$A1,$F9,$51,$29,$E5,$E5,$46,$70,$F1); var TestHash: TDCP_sha1; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha1.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha1.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $EFCDAB89; CurrentHash[2]:= $98BADCFE; CurrentHash[3]:= $10325476; CurrentHash[4]:= $C3D2E1F0; fInitialized:= true; end; procedure TDCP_sha1.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha1.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_sha1.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= SwapDWord(LenHi); PDWord(@HashBuffer[60])^:= SwapDWord(LenLo); Compress; CurrentHash[0]:= SwapDWord(CurrentHash[0]); CurrentHash[1]:= SwapDWord(CurrentHash[1]); CurrentHash[2]:= SwapDWord(CurrentHash[2]); CurrentHash[3]:= SwapDWord(CurrentHash[3]); CurrentHash[4]:= SwapDWord(CurrentHash[4]); Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpmd4.pas0000644000175000001440000002121512014201074021615 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of MD4 **********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPmd4; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_md4= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function LRot32(a, b: longword): longword; begin Result:= (a shl b) or (a shr (32-b)); end; procedure TDCP_md4.Compress; var Data: array[0..15] of dword; A, B, C, D: dword; begin dcpFillChar(Data, SizeOf(Data), 0); Move(HashBuffer,Data,Sizeof(Data)); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 0],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 1],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 2],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 3],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 4],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 5],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[ 6],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[ 7],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[ 8],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[ 9],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[10],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[11],19); A:= LRot32(A + (D xor (B and (C xor D))) + Data[12],3); D:= LRot32(D + (C xor (A and (B xor C))) + Data[13],7); C:= LRot32(C + (B xor (D and (A xor B))) + Data[14],11); B:= LRot32(B + (A xor (C and (D xor A))) + Data[15],19); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 0] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 4] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 8] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[12] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 1] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 5] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[ 9] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[13] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 2] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 6] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[10] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[14] + $5a827999,13); A:= LRot32(A + ((B and C) or (B and D) or (C and D)) + Data[ 3] + $5a827999,3); D:= LRot32(D + ((A and B) or (A and C) or (B and C)) + Data[ 7] + $5a827999,5); C:= LRot32(C + ((D and A) or (D and B) or (A and B)) + Data[11] + $5a827999,9); B:= LRot32(B + ((C and D) or (C and A) or (D and A)) + Data[15] + $5a827999,13); A:= LRot32(A + (B xor C xor D) + Data[ 0] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[ 8] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 4] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[12] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 2] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[10] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 6] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[14] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 1] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[ 9] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 5] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[13] + $6ed9eba1,15); A:= LRot32(A + (B xor C xor D) + Data[ 3] + $6ed9eba1,3); D:= LRot32(D + (A xor B xor C) + Data[11] + $6ed9eba1,9); C:= LRot32(C + (D xor A xor B) + Data[ 7] + $6ed9eba1,11); B:= LRot32(B + (C xor D xor A) + Data[15] + $6ed9eba1,15); Inc(CurrentHash[0],A); Inc(CurrentHash[1],B); Inc(CurrentHash[2],C); Inc(CurrentHash[3],D); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_md4.GetHashSize: integer; begin Result:= 128; end; class function TDCP_md4.GetId: integer; begin Result:= DCP_md4; end; class function TDCP_md4.GetAlgorithm: string; begin Result:= 'MD4'; end; class function TDCP_md4.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($a4,$48,$01,$7a,$af,$21,$d8,$52,$5f,$c1,$0a,$e8,$7a,$a6,$72,$9d); Test2Out: array[0..15] of byte= ($d7,$9e,$1c,$30,$8a,$a5,$bb,$cd,$ee,$a8,$ed,$63,$df,$41,$2d,$a9); var TestHash: TDCP_md4; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_md4.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_md4.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_md4.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_md4.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_md4.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpcrc32.pas0000644000175000001440000001006612573022170022057 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible (with Total Commander) implementation of CRC32 *} {******************************************************************************} {* Copyright (C) 2011-2015 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPcrc32; {$mode objfpc}{$H+} interface uses Classes, Sysutils, DCPcrypt2, DCPconst, DCcrc32; type { TDCP_crc32 } TDCP_crc32 = class(TDCP_hash) protected CurrentHash: LongWord; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; constructor Create(AOwner: TComponent); override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation {$R-}{$Q-} { TDCP_crc32 } class function TDCP_crc32.GetHashSize: integer; begin Result:= 32; end; class function TDCP_crc32.GetId: integer; begin Result:= DCP_crc32; end; class function TDCP_crc32.GetAlgorithm: string; begin Result:= 'CRC32'; end; class function TDCP_crc32.SelfTest: boolean; const Test1Out: array[0..3] of byte=($35,$24,$41,$C2); Test2Out: array[0..3] of byte=($4C,$27,$50,$BD); var TestHash: TDCP_crc32; TestOut: array[0..3] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_crc32.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; constructor TDCP_crc32.Create(AOwner: TComponent); begin inherited Create(AOwner); end; procedure TDCP_crc32.Init; begin Burn; crc32_init; CurrentHash:= 0; fInitialized:= true; end; procedure TDCP_crc32.Burn; begin CurrentHash:= 0; fInitialized:= false; end; procedure TDCP_crc32.Update(const Buffer; Size: longword); var Bytes: PByte; begin Bytes:= @Buffer; CurrentHash:= crc32_16bytes(Bytes, Size, CurrentHash); end; procedure TDCP_crc32.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); CurrentHash:= SwapEndian(CurrentHash); Move(CurrentHash, Digest, Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpsha512.pas0000644000175000001440000011037212014201074022137 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA512 *******************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha512; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_sha512base= class(TDCP_hash) protected LenHi, LenLo: int64; Index: DWord; CurrentHash: array[0..7] of int64; HashBuffer: array[0..127] of byte; procedure Compress; public procedure Update(const Buffer; Size: longword); override; procedure Burn; override; end; TDCP_sha384= class(TDCP_sha512base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; end; TDCP_sha512= class(TDCP_sha512base) public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function SwapDWord(a: int64): int64; begin Result:= ((a and $FF) shl 56) or ((a and $FF00) shl 40) or ((a and $FF0000) shl 24) or ((a and $FF000000) shl 8) or ((a and $FF00000000) shr 8) or ((a and $FF0000000000) shr 24) or ((a and $FF000000000000) shr 40) or ((a and $FF00000000000000) shr 56); end; procedure TDCP_sha512base.Compress; var a, b, c, d, e, f, g, h, t1, t2: int64; W: array[0..79] of int64; i: longword; begin Index:= 0; dcpFillChar(W, SizeOf(W), 0); a:= CurrentHash[0]; b:= CurrentHash[1]; c:= CurrentHash[2]; d:= CurrentHash[3]; e:= CurrentHash[4]; f:= CurrentHash[5]; g:= CurrentHash[6]; h:= CurrentHash[7]; Move(HashBuffer,W,Sizeof(HashBuffer)); for i:= 0 to 15 do W[i]:= SwapDWord(W[i]); for i:= 16 to 79 do W[i]:= (((W[i-2] shr 19) or (W[i-2] shl 45)) xor ((W[i-2] shr 61) or (W[i-2] shl 3)) xor (W[i-2] shr 6)) + W[i-7] + (((W[i-15] shr 1) or (W[i-15] shl 63)) xor ((W[i-15] shr 8) or (W[i-15] shl 56)) xor (W[i-15] shr 7)) + W[i-16]; { Non-optimised version for i:= 0 to 79 do begin t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + K[i] + W[i]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); h:= g; g:= f; f:= e; e:= d + t1; d:= c; c:= b; b:= a; a:= t1 + t2; end; } t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $428a2f98d728ae22 + W[0]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $7137449123ef65cd + W[1]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b5c0fbcfec4d3b2f + W[2]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $e9b5dba58189dbbc + W[3]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $3956c25bf348b538 + W[4]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $59f111f1b605d019 + W[5]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $923f82a4af194f9b + W[6]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $ab1c5ed5da6d8118 + W[7]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $d807aa98a3030242 + W[8]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $12835b0145706fbe + W[9]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $243185be4ee4b28c + W[10]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $550c7dc3d5ffb4e2 + W[11]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $72be5d74f27b896f + W[12]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $80deb1fe3b1696b1 + W[13]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $9bdc06a725c71235 + W[14]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c19bf174cf692694 + W[15]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $e49b69c19ef14ad2 + W[16]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $efbe4786384f25e3 + W[17]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $0fc19dc68b8cd5b5 + W[18]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $240ca1cc77ac9c65 + W[19]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $2de92c6f592b0275 + W[20]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4a7484aa6ea6e483 + W[21]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5cb0a9dcbd41fbd4 + W[22]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $76f988da831153b5 + W[23]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $983e5152ee66dfab + W[24]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a831c66d2db43210 + W[25]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $b00327c898fb213f + W[26]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $bf597fc7beef0ee4 + W[27]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $c6e00bf33da88fc2 + W[28]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d5a79147930aa725 + W[29]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $06ca6351e003826f + W[30]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $142929670a0e6e70 + W[31]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $27b70a8546d22ffc + W[32]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $2e1b21385c26c926 + W[33]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $4d2c6dfc5ac42aed + W[34]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $53380d139d95b3df + W[35]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $650a73548baf63de + W[36]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $766a0abb3c77b2a8 + W[37]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $81c2c92e47edaee6 + W[38]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $92722c851482353b + W[39]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $a2bfe8a14cf10364 + W[40]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $a81a664bbc423001 + W[41]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $c24b8b70d0f89791 + W[42]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $c76c51a30654be30 + W[43]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $d192e819d6ef5218 + W[44]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $d69906245565a910 + W[45]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $f40e35855771202a + W[46]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $106aa07032bbd1b8 + W[47]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $19a4c116b8d2d0c8 + W[48]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $1e376c085141ab53 + W[49]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $2748774cdf8eeb99 + W[50]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $34b0bcb5e19b48a8 + W[51]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $391c0cb3c5c95a63 + W[52]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $4ed8aa4ae3418acb + W[53]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5b9cca4f7763e373 + W[54]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $682e6ff3d6b2b8a3 + W[55]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $748f82ee5defb2fc + W[56]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $78a5636f43172f60 + W[57]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $84c87814a1f0ab72 + W[58]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $8cc702081a6439ec + W[59]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $90befffa23631e28 + W[60]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $a4506cebde82bde9 + W[61]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $bef9a3f7b2c67915 + W[62]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $c67178f2e372532b + W[63]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $ca273eceea26619c + W[64]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $d186b8c721c0c207 + W[65]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $eada7dd6cde0eb1e + W[66]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $f57d4f7fee6ed178 + W[67]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $06f067aa72176fba + W[68]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $0a637dc5a2c898a6 + W[69]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $113f9804bef90dae + W[70]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $1b710b35131c471b + W[71]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; t1:= h + (((e shr 14) or (e shl 50)) xor ((e shr 18) or (e shl 46)) xor ((e shr 41) or (e shl 23))) + ((e and f) xor (not e and g)) + $28db77f523047d84 + W[72]; t2:= (((a shr 28) or (a shl 36)) xor ((a shr 34) or (a shl 30)) xor ((a shr 39) or (a shl 25))) + ((a and b) xor (a and c) xor (b and c)); d:= d + t1; h:= t1 + t2; t1:= g + (((d shr 14) or (d shl 50)) xor ((d shr 18) or (d shl 46)) xor ((d shr 41) or (d shl 23))) + ((d and e) xor (not d and f)) + $32caab7b40c72493 + W[73]; t2:= (((h shr 28) or (h shl 36)) xor ((h shr 34) or (h shl 30)) xor ((h shr 39) or (h shl 25))) + ((h and a) xor (h and b) xor (a and b)); c:= c + t1; g:= t1 + t2; t1:= f + (((c shr 14) or (c shl 50)) xor ((c shr 18) or (c shl 46)) xor ((c shr 41) or (c shl 23))) + ((c and d) xor (not c and e)) + $3c9ebe0a15c9bebc + W[74]; t2:= (((g shr 28) or (g shl 36)) xor ((g shr 34) or (g shl 30)) xor ((g shr 39) or (g shl 25))) + ((g and h) xor (g and a) xor (h and a)); b:= b + t1; f:= t1 + t2; t1:= e + (((b shr 14) or (b shl 50)) xor ((b shr 18) or (b shl 46)) xor ((b shr 41) or (b shl 23))) + ((b and c) xor (not b and d)) + $431d67c49c100d4c + W[75]; t2:= (((f shr 28) or (f shl 36)) xor ((f shr 34) or (f shl 30)) xor ((f shr 39) or (f shl 25))) + ((f and g) xor (f and h) xor (g and h)); a:= a + t1; e:= t1 + t2; t1:= d + (((a shr 14) or (a shl 50)) xor ((a shr 18) or (a shl 46)) xor ((a shr 41) or (a shl 23))) + ((a and b) xor (not a and c)) + $4cc5d4becb3e42b6 + W[76]; t2:= (((e shr 28) or (e shl 36)) xor ((e shr 34) or (e shl 30)) xor ((e shr 39) or (e shl 25))) + ((e and f) xor (e and g) xor (f and g)); h:= h + t1; d:= t1 + t2; t1:= c + (((h shr 14) or (h shl 50)) xor ((h shr 18) or (h shl 46)) xor ((h shr 41) or (h shl 23))) + ((h and a) xor (not h and b)) + $597f299cfc657e2a + W[77]; t2:= (((d shr 28) or (d shl 36)) xor ((d shr 34) or (d shl 30)) xor ((d shr 39) or (d shl 25))) + ((d and e) xor (d and f) xor (e and f)); g:= g + t1; c:= t1 + t2; t1:= b + (((g shr 14) or (g shl 50)) xor ((g shr 18) or (g shl 46)) xor ((g shr 41) or (g shl 23))) + ((g and h) xor (not g and a)) + $5fcb6fab3ad6faec + W[78]; t2:= (((c shr 28) or (c shl 36)) xor ((c shr 34) or (c shl 30)) xor ((c shr 39) or (c shl 25))) + ((c and d) xor (c and e) xor (d and e)); f:= f + t1; b:= t1 + t2; t1:= a + (((f shr 14) or (f shl 50)) xor ((f shr 18) or (f shl 46)) xor ((f shr 41) or (f shl 23))) + ((f and g) xor (not f and h)) + $6c44198c4a475817 + W[79]; t2:= (((b shr 28) or (b shl 36)) xor ((b shr 34) or (b shl 30)) xor ((b shr 39) or (b shl 25))) + ((b and c) xor (b and d) xor (c and d)); e:= e + t1; a:= t1 + t2; CurrentHash[0]:= CurrentHash[0] + a; CurrentHash[1]:= CurrentHash[1] + b; CurrentHash[2]:= CurrentHash[2] + c; CurrentHash[3]:= CurrentHash[3] + d; CurrentHash[4]:= CurrentHash[4] + e; CurrentHash[5]:= CurrentHash[5] + f; CurrentHash[6]:= CurrentHash[6] + g; CurrentHash[7]:= CurrentHash[7] + h; FillChar(W,Sizeof(W),0); FillChar(HashBuffer,Sizeof(HashBuffer),0); end; procedure TDCP_sha512base.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha512base.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; {******************************************************************************} class function TDCP_sha384.GetAlgorithm: string; begin Result:= 'SHA384'; end; class function TDCP_sha384.GetId: integer; begin Result:= DCP_sha384; end; class function TDCP_sha384.GetHashSize: integer; begin Result:= 384; end; class function TDCP_sha384.SelfTest: boolean; const Test1Out: array[0..47] of byte= ($cb,$00,$75,$3f,$45,$a3,$5e,$8b,$b5,$a0,$3d,$69,$9a,$c6,$50,$07, $27,$2c,$32,$ab,$0e,$de,$d1,$63,$1a,$8b,$60,$5a,$43,$ff,$5b,$ed, $80,$86,$07,$2b,$a1,$e7,$cc,$23,$58,$ba,$ec,$a1,$34,$c8,$25,$a7); Test2Out: array[0..47] of byte= ($09,$33,$0c,$33,$f7,$11,$47,$e8,$3d,$19,$2f,$c7,$82,$cd,$1b,$47, $53,$11,$1b,$17,$3b,$3b,$05,$d2,$2f,$a0,$80,$86,$e3,$b0,$f7,$12, $fc,$c7,$c7,$1a,$55,$7e,$2d,$b9,$66,$c3,$e9,$fa,$91,$74,$60,$39); var TestHash: TDCP_sha384; TestOut: array[0..47] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha384.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha384.Init; begin Burn; CurrentHash[0]:= $cbbb9d5dc1059ed8; CurrentHash[1]:= $629a292a367cd507; CurrentHash[2]:= $9159015a3070dd17; CurrentHash[3]:= $152fecd8f70e5939; CurrentHash[4]:= $67332667ffc00b31; CurrentHash[5]:= $8eb44a8768581511; CurrentHash[6]:= $db0c2e0d64f98fa7; CurrentHash[7]:= $47b5481dbefa4fa4; fInitialized:= true; end; procedure TDCP_sha384.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 112 then Compress; Pint64(@HashBuffer[112])^:= SwapDWord(LenHi); Pint64(@HashBuffer[120])^:= SwapDWord(LenLo); Compress; CurrentHash[0]:= SwapDWord(CurrentHash[0]); CurrentHash[1]:= SwapDWord(CurrentHash[1]); CurrentHash[2]:= SwapDWord(CurrentHash[2]); CurrentHash[3]:= SwapDWord(CurrentHash[3]); CurrentHash[4]:= SwapDWord(CurrentHash[4]); CurrentHash[5]:= SwapDWord(CurrentHash[5]); Move(CurrentHash,Digest,384 div 8); Burn; end; {******************************************************************************} class function TDCP_sha512.GetAlgorithm: string; begin Result:= 'SHA512'; end; class function TDCP_sha512.GetId: integer; begin Result:= DCP_sha512; end; class function TDCP_sha512.GetHashSize: integer; begin Result:= 512; end; class function TDCP_sha512.SelfTest: boolean; const Test1Out: array[0..63] of byte= ($dd,$af,$35,$a1,$93,$61,$7a,$ba,$cc,$41,$73,$49,$ae,$20,$41,$31, $12,$e6,$fa,$4e,$89,$a9,$7e,$a2,$0a,$9e,$ee,$e6,$4b,$55,$d3,$9a, $21,$92,$99,$2a,$27,$4f,$c1,$a8,$36,$ba,$3c,$23,$a3,$fe,$eb,$bd, $45,$4d,$44,$23,$64,$3c,$e8,$0e,$2a,$9a,$c9,$4f,$a5,$4c,$a4,$9f); Test2Out: array[0..63] of byte= ($8e,$95,$9b,$75,$da,$e3,$13,$da,$8c,$f4,$f7,$28,$14,$fc,$14,$3f, $8f,$77,$79,$c6,$eb,$9f,$7f,$a1,$72,$99,$ae,$ad,$b6,$88,$90,$18, $50,$1d,$28,$9e,$49,$00,$f7,$e4,$33,$1b,$99,$de,$c4,$b5,$43,$3a, $c7,$d3,$29,$ee,$b6,$dd,$26,$54,$5e,$96,$e5,$5b,$87,$4b,$e9,$09); var TestHash: TDCP_sha512; TestOut: array[0..63] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha512.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha512.Init; begin Burn; CurrentHash[0]:= $6a09e667f3bcc908; CurrentHash[1]:= $bb67ae8584caa73b; CurrentHash[2]:= $3c6ef372fe94f82b; CurrentHash[3]:= $a54ff53a5f1d36f1; CurrentHash[4]:= $510e527fade682d1; CurrentHash[5]:= $9b05688c2b3e6c1f; CurrentHash[6]:= $1f83d9abfb41bd6b; CurrentHash[7]:= $5be0cd19137e2179; fInitialized:= true; end; procedure TDCP_sha512.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 112 then Compress; Pint64(@HashBuffer[112])^:= SwapDWord(LenHi); Pint64(@HashBuffer[120])^:= SwapDWord(LenLo); Compress; CurrentHash[0]:= SwapDWord(CurrentHash[0]); CurrentHash[1]:= SwapDWord(CurrentHash[1]); CurrentHash[2]:= SwapDWord(CurrentHash[2]); CurrentHash[3]:= SwapDWord(CurrentHash[3]); CurrentHash[4]:= SwapDWord(CurrentHash[4]); CurrentHash[5]:= SwapDWord(CurrentHash[5]); CurrentHash[6]:= SwapDWord(CurrentHash[6]); CurrentHash[7]:= SwapDWord(CurrentHash[7]); Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpsha256.pas0000644000175000001440000006624312014201074022153 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of SHA256 *******************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPsha256; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_sha256= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..7] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Final(var Digest); override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} function SwapDWord(a: dword): dword; begin Result:= ((a and $FF) shl 24) or ((a and $FF00) shl 8) or ((a and $FF0000) shr 8) or ((a and $FF000000) shr 24); end; procedure TDCP_sha256.Compress; var a, b, c, d, e, f, g, h, t1, t2: DWord; W: array[0..63] of DWord; i: longword; begin Index:= 0; dcpFillChar(W, SizeOf(W), 0); a:= CurrentHash[0]; b:= CurrentHash[1]; c:= CurrentHash[2]; d:= CurrentHash[3]; e:= CurrentHash[4]; f:= CurrentHash[5]; g:= CurrentHash[6]; h:= CurrentHash[7]; Move(HashBuffer,W,Sizeof(HashBuffer)); for i:= 0 to 15 do W[i]:= SwapDWord(W[i]); for i:= 16 to 63 do W[i]:= (((W[i-2] shr 17) or (W[i-2] shl 15)) xor ((W[i-2] shr 19) or (W[i-2] shl 13)) xor (W[i-2] shr 10)) + W[i-7] + (((W[i-15] shr 7) or (W[i-15] shl 25)) xor ((W[i-15] shr 18) or (W[i-15] shl 14)) xor (W[i-15] shr 3)) + W[i-16]; { Non-optimised version for i:= 0 to 63 do begin t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + K[i] + W[i]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= g; g:= f; f:= e; e:= d + t1; d:= c; c:= b; b:= a; a:= t1 + t2; end; } t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $428a2f98 + W[0]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $71374491 + W[1]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $b5c0fbcf + W[2]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $e9b5dba5 + W[3]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $3956c25b + W[4]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $59f111f1 + W[5]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $923f82a4 + W[6]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $ab1c5ed5 + W[7]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $d807aa98 + W[8]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $12835b01 + W[9]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $243185be + W[10]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $550c7dc3 + W[11]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $72be5d74 + W[12]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $80deb1fe + W[13]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $9bdc06a7 + W[14]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $c19bf174 + W[15]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $e49b69c1 + W[16]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $efbe4786 + W[17]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $0fc19dc6 + W[18]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $240ca1cc + W[19]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $2de92c6f + W[20]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $4a7484aa + W[21]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $5cb0a9dc + W[22]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $76f988da + W[23]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $983e5152 + W[24]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $a831c66d + W[25]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $b00327c8 + W[26]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $bf597fc7 + W[27]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $c6e00bf3 + W[28]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $d5a79147 + W[29]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $06ca6351 + W[30]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $14292967 + W[31]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $27b70a85 + W[32]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $2e1b2138 + W[33]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $4d2c6dfc + W[34]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $53380d13 + W[35]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $650a7354 + W[36]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $766a0abb + W[37]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $81c2c92e + W[38]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $92722c85 + W[39]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $a2bfe8a1 + W[40]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $a81a664b + W[41]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $c24b8b70 + W[42]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $c76c51a3 + W[43]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $d192e819 + W[44]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $d6990624 + W[45]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $f40e3585 + W[46]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $106aa070 + W[47]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $19a4c116 + W[48]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $1e376c08 + W[49]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $2748774c + W[50]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $34b0bcb5 + W[51]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $391c0cb3 + W[52]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $4ed8aa4a + W[53]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $5b9cca4f + W[54]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $682e6ff3 + W[55]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; t1:= h + (((e shr 6) or (e shl 26)) xor ((e shr 11) or (e shl 21)) xor ((e shr 25) or (e shl 7))) + ((e and f) xor (not e and g)) + $748f82ee + W[56]; t2:= (((a shr 2) or (a shl 30)) xor ((a shr 13) or (a shl 19)) xor ((a shr 22) xor (a shl 10))) + ((a and b) xor (a and c) xor (b and c)); h:= t1 + t2; d:= d + t1; t1:= g + (((d shr 6) or (d shl 26)) xor ((d shr 11) or (d shl 21)) xor ((d shr 25) or (d shl 7))) + ((d and e) xor (not d and f)) + $78a5636f + W[57]; t2:= (((h shr 2) or (h shl 30)) xor ((h shr 13) or (h shl 19)) xor ((h shr 22) xor (h shl 10))) + ((h and a) xor (h and b) xor (a and b)); g:= t1 + t2; c:= c + t1; t1:= f + (((c shr 6) or (c shl 26)) xor ((c shr 11) or (c shl 21)) xor ((c shr 25) or (c shl 7))) + ((c and d) xor (not c and e)) + $84c87814 + W[58]; t2:= (((g shr 2) or (g shl 30)) xor ((g shr 13) or (g shl 19)) xor ((g shr 22) xor (g shl 10))) + ((g and h) xor (g and a) xor (h and a)); f:= t1 + t2; b:= b + t1; t1:= e + (((b shr 6) or (b shl 26)) xor ((b shr 11) or (b shl 21)) xor ((b shr 25) or (b shl 7))) + ((b and c) xor (not b and d)) + $8cc70208 + W[59]; t2:= (((f shr 2) or (f shl 30)) xor ((f shr 13) or (f shl 19)) xor ((f shr 22) xor (f shl 10))) + ((f and g) xor (f and h) xor (g and h)); e:= t1 + t2; a:= a + t1; t1:= d + (((a shr 6) or (a shl 26)) xor ((a shr 11) or (a shl 21)) xor ((a shr 25) or (a shl 7))) + ((a and b) xor (not a and c)) + $90befffa + W[60]; t2:= (((e shr 2) or (e shl 30)) xor ((e shr 13) or (e shl 19)) xor ((e shr 22) xor (e shl 10))) + ((e and f) xor (e and g) xor (f and g)); d:= t1 + t2; h:= h + t1; t1:= c + (((h shr 6) or (h shl 26)) xor ((h shr 11) or (h shl 21)) xor ((h shr 25) or (h shl 7))) + ((h and a) xor (not h and b)) + $a4506ceb + W[61]; t2:= (((d shr 2) or (d shl 30)) xor ((d shr 13) or (d shl 19)) xor ((d shr 22) xor (d shl 10))) + ((d and e) xor (d and f) xor (e and f)); c:= t1 + t2; g:= g + t1; t1:= b + (((g shr 6) or (g shl 26)) xor ((g shr 11) or (g shl 21)) xor ((g shr 25) or (g shl 7))) + ((g and h) xor (not g and a)) + $bef9a3f7 + W[62]; t2:= (((c shr 2) or (c shl 30)) xor ((c shr 13) or (c shl 19)) xor ((c shr 22) xor (c shl 10))) + ((c and d) xor (c and e) xor (d and e)); b:= t1 + t2; f:= f + t1; t1:= a + (((f shr 6) or (f shl 26)) xor ((f shr 11) or (f shl 21)) xor ((f shr 25) or (f shl 7))) + ((f and g) xor (not f and h)) + $c67178f2 + W[63]; t2:= (((b shr 2) or (b shl 30)) xor ((b shr 13) or (b shl 19)) xor ((b shr 22) xor (b shl 10))) + ((b and c) xor (b and d) xor (c and d)); a:= t1 + t2; e:= e + t1; CurrentHash[0]:= CurrentHash[0] + a; CurrentHash[1]:= CurrentHash[1] + b; CurrentHash[2]:= CurrentHash[2] + c; CurrentHash[3]:= CurrentHash[3] + d; CurrentHash[4]:= CurrentHash[4] + e; CurrentHash[5]:= CurrentHash[5] + f; CurrentHash[6]:= CurrentHash[6] + g; CurrentHash[7]:= CurrentHash[7] + h; FillChar(W,Sizeof(W),0); FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_sha256.GetAlgorithm: string; begin Result:= 'SHA256'; end; class function TDCP_sha256.GetId: integer; begin Result:= DCP_sha256; end; class function TDCP_sha256.GetHashSize: integer; begin Result:= 256; end; class function TDCP_sha256.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($ba,$78,$16,$bf,$8f,$01,$cf,$ea,$41,$41,$40,$de,$5d,$ae,$22,$23, $b0,$03,$61,$a3,$96,$17,$7a,$9c,$b4,$10,$ff,$61,$f2,$00,$15,$ad); Test2Out: array[0..31] of byte= ($24,$8d,$6a,$61,$d2,$06,$38,$b8,$e5,$c0,$26,$93,$0c,$3e,$60,$39, $a3,$3c,$e4,$59,$64,$ff,$21,$67,$f6,$ec,$ed,$d4,$19,$db,$06,$c1); var TestHash: TDCP_sha256; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_sha256.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_sha256.Init; begin Burn; CurrentHash[0]:= $6a09e667; CurrentHash[1]:= $bb67ae85; CurrentHash[2]:= $3c6ef372; CurrentHash[3]:= $a54ff53a; CurrentHash[4]:= $510e527f; CurrentHash[5]:= $9b05688c; CurrentHash[6]:= $1f83d9ab; CurrentHash[7]:= $5be0cd19; fInitialized:= true; end; procedure TDCP_sha256.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_sha256.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_sha256.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= SwapDWord(LenHi); PDWord(@HashBuffer[60])^:= SwapDWord(LenLo); Compress; CurrentHash[0]:= SwapDWord(CurrentHash[0]); CurrentHash[1]:= SwapDWord(CurrentHash[1]); CurrentHash[2]:= SwapDWord(CurrentHash[2]); CurrentHash[3]:= SwapDWord(CurrentHash[3]); CurrentHash[4]:= SwapDWord(CurrentHash[4]); CurrentHash[5]:= SwapDWord(CurrentHash[5]); CurrentHash[6]:= SwapDWord(CurrentHash[6]); CurrentHash[7]:= SwapDWord(CurrentHash[7]); Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpblake2.pas0000644000175000001440000001614012573066072022313 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of BLAKE2S and BLAKE2SP *****************} {******************************************************************************} {* Copyright (C) 2014-2015 Alexander Koblov (alexx2000@mail.ru) *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPblake2; {$mode delphi} interface uses Classes, SysUtils, CTypes, DCPcrypt2, DCPconst, DCblake2; type { TDCP_blake2s } TDCP_blake2s = class(TDCP_hash) protected S: blake2s_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; { TDCP_blake2sp } TDCP_blake2sp = class(TDCP_hash) protected S: blake2sp_state; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; implementation { TDCP_blake2s } class function TDCP_blake2s.GetId: integer; begin Result:= DCP_blake2s; end; class function TDCP_blake2s.GetAlgorithm: string; begin Result:= 'BLAKE2S'; end; class function TDCP_blake2s.GetHashSize: integer; begin Result:= 256; end; class function TDCP_blake2s.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($50, $8c, $5e, $8c, $32, $7c, $14, $e2, $e1, $a7, $2b, $a3, $4e, $eb, $45, $2f, $37, $45, $8b, $20, $9e, $d6, $3a, $29, $4d, $99, $9b, $4c, $86, $67, $59, $82); Test2Out: array[0..31] of byte= ($6f, $4d, $f5, $11, $6a, $6f, $33, $2e, $da, $b1, $d9, $e1, $0e, $e8, $7d, $f6, $55, $7b, $ea, $b6, $25, $9d, $76, $63, $f3, $bc, $d5, $72, $2c, $13, $f1, $89 ); var TestHash: TDCP_blake2s; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2s.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2s.Init; begin if blake2s_init( @S, BLAKE2S_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2s_init'); fInitialized:= true; end; procedure TDCP_blake2s.Burn; begin fInitialized:= false; end; procedure TDCP_blake2s.Update(const Buffer; Size: longword); var Bytes: PByte; begin Bytes:= @Buffer; if blake2s_update(@S, Bytes, Size) < 0 then raise EDCP_hash.Create('blake2s_update'); end; procedure TDCP_blake2s.Final(var Digest); var Hash: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2s_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2s_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; { TDCP_blake2sp } class function TDCP_blake2sp.GetId: integer; begin Result:= DCP_blake2sp; end; class function TDCP_blake2sp.GetAlgorithm: string; begin Result:= 'BLAKE2SP'; end; class function TDCP_blake2sp.GetHashSize: integer; begin Result:= 256; end; class function TDCP_blake2sp.SelfTest: boolean; const Test1Out: array[0..31] of byte= ($70, $f7, $5b, $58, $f1, $fe, $ca, $b8, $21, $db, $43, $c8, $8a, $d8, $4e, $dd, $e5, $a5, $26, $00, $61, $6c, $d2, $25, $17, $b7, $bb, $14, $d4, $40, $a7, $d5); Test2Out: array[0..31] of byte= ($3d, $10, $7e, $42, $f1, $7c, $13, $c8, $2b, $43, $6e, $bb, $65, $1a, $48, $de, $f6, $7e, $77, $72, $fa, $06, $f4, $73, $8e, $e9, $68, $c7, $f4, $d8, $b4, $8b); var TestHash: TDCP_blake2sp; TestOut: array[0..31] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_blake2sp.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out))); TestHash.Init; TestHash.UpdateStr('abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq'); TestHash.Final(TestOut); Result:= boolean(CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out))) and Result; TestHash.Free; end; procedure TDCP_blake2sp.Init; begin if blake2sp_init( @S, BLAKE2S_OUTBYTES ) < 0 then raise EDCP_hash.Create('blake2sp_init'); fInitialized:= true; end; procedure TDCP_blake2sp.Burn; begin fInitialized:= false; end; procedure TDCP_blake2sp.Update(const Buffer; Size: longword); var Bytes: PByte; begin Bytes:= @Buffer; if blake2sp_update(@S, Bytes, Size) < 0 then raise EDCP_hash.Create('blake2sp_update'); end; procedure TDCP_blake2sp.Final(var Digest); var Hash: array[0..Pred(BLAKE2S_OUTBYTES)] of cuint8; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); if blake2sp_final(@S, Hash, SizeOf(Hash)) < 0 then raise EDCP_hash.Create('blake2sp_final'); Move(Hash, Digest, Sizeof(Hash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dccrc32.pp0000644000175000001440000001072212573022170021532 0ustar alexxusers{ Double Commander ------------------------------------------------------------------------- Fast CRC32 calculation algorithm http://create.stephan-brumme.com/crc32 Copyright (C) 2011-2015 Stephan Brumme. All rights reserved. Slicing-by-16 contributed by Bulat Ziganshin See http://create.stephan-brumme.com/disclaimer.html Pascal tranlastion Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This software is provided 'as-is', without any express or implied warranty. In no event will the author be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. 2. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. } unit DCcrc32; {$mode objfpc}{$H+} interface uses Classes, SysUtils; procedure crc32_init; function crc32_16bytes(const data: PByte; length: Integer; previousCrc32: Cardinal = 0): Cardinal; implementation {$R-}{$Q-} const /// zlib's CRC32 polynomial Polynomial: Cardinal = $EDB88320; var HaveTable: Boolean = False; Crc32Lookup: array[0..15, 0..255] of Cardinal; procedure crc32_init; var i, j: Integer; crc: Cardinal; slice: Integer; begin if HaveTable then Exit; //// same algorithm as crc32_bitwise for i := 0 to $FF do begin crc := Cardinal(i); for j := 0 to 7 do begin if (crc and 1) <> 0 then crc := Polynomial xor (crc shr 1) else crc := (crc shr 1); end; Crc32Lookup[0][i] := crc; end; // ... and the following slicing-by-8 algorithm (from Intel): // http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf // http://sourceforge.net/projects/slicing-by-8/ for i := 0 to $FF do begin for slice := 1 to 15 do Crc32Lookup[slice][i] := (Crc32Lookup[slice - 1][i] shr 8) xor Crc32Lookup[0][Crc32Lookup[slice - 1][i] and $FF]; end; HaveTable:= True; end; /// compute CRC32 (Slicing-by-16 algorithm) function crc32_16bytes(const data: PByte; length: Integer; previousCrc32: Cardinal = 0): Cardinal; const Unroll = 4; BytesAtOnce = 16 * Unroll; var crc: cardinal; unrolling: integer; current: PLongWord; currentChar: PByte; one, two, three, four: cardinal; begin crc := previousCrc32 xor $FFFFFFFF; current := PLongWord(data); // enabling optimization (at least -O2) automatically unrolls the inner for-loop while (length >= BytesAtOnce) do begin for unrolling := 0 to Unroll - 1 do begin one := current^ xor crc; Inc(current); two := current^; Inc(current); three := current^; Inc(current); four := current^; Inc(current); crc := Crc32Lookup[ 0][(four shr 24) and $FF] xor Crc32Lookup[ 1][(four shr 16) and $FF] xor Crc32Lookup[ 2][(four shr 8) and $FF] xor Crc32Lookup[ 3][ four and $FF] xor Crc32Lookup[ 4][(three shr 24) and $FF] xor Crc32Lookup[ 5][(three shr 16) and $FF] xor Crc32Lookup[ 6][(three shr 8) and $FF] xor Crc32Lookup[ 7][ three and $FF] xor Crc32Lookup[ 8][(two shr 24) and $FF] xor Crc32Lookup[ 9][(two shr 16) and $FF] xor Crc32Lookup[10][(two shr 8) and $FF] xor Crc32Lookup[11][ two and $FF] xor Crc32Lookup[12][(one shr 24) and $FF] xor Crc32Lookup[13][(one shr 16) and $FF] xor Crc32Lookup[14][(one shr 8) and $FF] xor Crc32Lookup[15][ one and $FF]; end; length -= BytesAtOnce; end; currentChar := PByte(current); // remaining 1 to 63 bytes (standard algorithm) while (length <> 0) do begin crc := (crc shr 8) xor Crc32Lookup[0][(crc and $FF) xor currentChar^]; Inc(currentChar); Dec(length); end; Result:= crc xor $FFFFFFFF; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/dcpmd5.pas0000644000175000001440000002363612570657777021667 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A binary compatible implementation of MD5 **********************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPmd5; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2, DCPconst; type TDCP_md5= class(TDCP_hash) protected LenHi, LenLo: longword; Index: DWord; CurrentHash: array[0..3] of DWord; HashBuffer: array[0..63] of byte; procedure Compress; public class function GetId: integer; override; class function GetAlgorithm: string; override; class function GetHashSize: integer; override; class function SelfTest: boolean; override; procedure Init; override; procedure Burn; override; procedure Update(const Buffer; Size: longword); override; procedure Final(var Digest); override; end; {******************************************************************************} {******************************************************************************} implementation {$R-}{$Q-} {$macro on}{$define LRot32:=RolDWord} procedure TDCP_md5.Compress; var Data: array[0..15] of dword; A, B, C, D: dword; begin dcpFillChar(Data, SizeOf(Data), 0); Move(HashBuffer,Data,Sizeof(Data)); A:= CurrentHash[0]; B:= CurrentHash[1]; C:= CurrentHash[2]; D:= CurrentHash[3]; A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 0] + $d76aa478,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 1] + $e8c7b756,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 2] + $242070db,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 3] + $c1bdceee,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 4] + $f57c0faf,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 5] + $4787c62a,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[ 6] + $a8304613,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[ 7] + $fd469501,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[ 8] + $698098d8,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[ 9] + $8b44f7af,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[10] + $ffff5bb1,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[11] + $895cd7be,22); A:= B + LRot32(A + (D xor (B and (C xor D))) + Data[12] + $6b901122,7); D:= A + LRot32(D + (C xor (A and (B xor C))) + Data[13] + $fd987193,12); C:= D + LRot32(C + (B xor (D and (A xor B))) + Data[14] + $a679438e,17); B:= C + LRot32(B + (A xor (C and (D xor A))) + Data[15] + $49b40821,22); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 1] + $f61e2562,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 6] + $c040b340,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[11] + $265e5a51,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 0] + $e9b6c7aa,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 5] + $d62f105d,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[10] + $02441453,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[15] + $d8a1e681,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 4] + $e7d3fbc8,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[ 9] + $21e1cde6,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[14] + $c33707d6,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 3] + $f4d50d87,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[ 8] + $455a14ed,20); A:= B + LRot32(A + (C xor (D and (B xor C))) + Data[13] + $a9e3e905,5); D:= A + LRot32(D + (B xor (C and (A xor B))) + Data[ 2] + $fcefa3f8,9); C:= D + LRot32(C + (A xor (B and (D xor A))) + Data[ 7] + $676f02d9,14); B:= C + LRot32(B + (D xor (A and (C xor D))) + Data[12] + $8d2a4c8a,20); A:= B + LRot32(A + (B xor C xor D) + Data[ 5] + $fffa3942,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 8] + $8771f681,11); C:= D + LRot32(C + (D xor A xor B) + Data[11] + $6d9d6122,16); B:= C + LRot32(B + (C xor D xor A) + Data[14] + $fde5380c,23); A:= B + LRot32(A + (B xor C xor D) + Data[ 1] + $a4beea44,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 4] + $4bdecfa9,11); C:= D + LRot32(C + (D xor A xor B) + Data[ 7] + $f6bb4b60,16); B:= C + LRot32(B + (C xor D xor A) + Data[10] + $bebfbc70,23); A:= B + LRot32(A + (B xor C xor D) + Data[13] + $289b7ec6,4); D:= A + LRot32(D + (A xor B xor C) + Data[ 0] + $eaa127fa,11); C:= D + LRot32(C + (D xor A xor B) + Data[ 3] + $d4ef3085,16); B:= C + LRot32(B + (C xor D xor A) + Data[ 6] + $04881d05,23); A:= B + LRot32(A + (B xor C xor D) + Data[ 9] + $d9d4d039,4); D:= A + LRot32(D + (A xor B xor C) + Data[12] + $e6db99e5,11); C:= D + LRot32(C + (D xor A xor B) + Data[15] + $1fa27cf8,16); B:= C + LRot32(B + (C xor D xor A) + Data[ 2] + $c4ac5665,23); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 0] + $f4292244,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 7] + $432aff97,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[14] + $ab9423a7,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 5] + $fc93a039,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[12] + $655b59c3,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[ 3] + $8f0ccc92,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[10] + $ffeff47d,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 1] + $85845dd1,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 8] + $6fa87e4f,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[15] + $fe2ce6e0,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 6] + $a3014314,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[13] + $4e0811a1,21); A:= B + LRot32(A + (C xor (B or (not D))) + Data[ 4] + $f7537e82,6); D:= A + LRot32(D + (B xor (A or (not C))) + Data[11] + $bd3af235,10); C:= D + LRot32(C + (A xor (D or (not B))) + Data[ 2] + $2ad7d2bb,15); B:= C + LRot32(B + (D xor (C or (not A))) + Data[ 9] + $eb86d391,21); Inc(CurrentHash[0],A); Inc(CurrentHash[1],B); Inc(CurrentHash[2],C); Inc(CurrentHash[3],D); Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); end; class function TDCP_md5.GetHashSize: integer; begin Result:= 128; end; class function TDCP_md5.GetId: integer; begin Result:= DCP_md5; end; class function TDCP_md5.GetAlgorithm: string; begin Result:= 'MD5'; end; class function TDCP_md5.SelfTest: boolean; const Test1Out: array[0..15] of byte= ($90,$01,$50,$98,$3c,$d2,$4f,$b0,$d6,$96,$3f,$7d,$28,$e1,$7f,$72); Test2Out: array[0..15] of byte= ($c3,$fc,$d3,$d7,$61,$92,$e4,$00,$7d,$fb,$49,$6c,$ca,$67,$e1,$3b); var TestHash: TDCP_md5; TestOut: array[0..19] of byte; begin dcpFillChar(TestOut, SizeOf(TestOut), 0); TestHash:= TDCP_md5.Create(nil); TestHash.Init; TestHash.UpdateStr('abc'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test1Out,Sizeof(Test1Out)); TestHash.Init; TestHash.UpdateStr('abcdefghijklmnopqrstuvwxyz'); TestHash.Final(TestOut); Result:= CompareMem(@TestOut,@Test2Out,Sizeof(Test2Out)) and Result; TestHash.Free; end; procedure TDCP_md5.Init; begin Burn; CurrentHash[0]:= $67452301; CurrentHash[1]:= $efcdab89; CurrentHash[2]:= $98badcfe; CurrentHash[3]:= $10325476; fInitialized:= true; end; procedure TDCP_md5.Burn; begin LenHi:= 0; LenLo:= 0; Index:= 0; FillChar(HashBuffer,Sizeof(HashBuffer),0); FillChar(CurrentHash,Sizeof(CurrentHash),0); fInitialized:= false; end; procedure TDCP_md5.Update(const Buffer; Size: longword); var PBuf: ^byte; begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); Inc(LenHi,Size shr 29); Inc(LenLo,Size*8); if LenLo< (Size*8) then Inc(LenHi); PBuf:= @Buffer; while Size> 0 do begin if (Sizeof(HashBuffer)-Index)<= DWord(Size) then begin Move(PBuf^,HashBuffer[Index],Sizeof(HashBuffer)-Index); Dec(Size,Sizeof(HashBuffer)-Index); Inc(PBuf,Sizeof(HashBuffer)-Index); Compress; end else begin Move(PBuf^,HashBuffer[Index],Size); Inc(Index,Size); Size:= 0; end; end; end; procedure TDCP_md5.Final(var Digest); begin if not fInitialized then raise EDCP_hash.Create('Hash not initialized'); HashBuffer[Index]:= $80; if Index>= 56 then Compress; PDWord(@HashBuffer[56])^:= LenLo; PDWord(@HashBuffer[60])^:= LenHi; Compress; Move(CurrentHash,Digest,Sizeof(CurrentHash)); Burn; end; end. doublecmd-0.7.1/components/dcpcrypt/Hashes/DCPhaval5.inc0000644000175000001440000007033012014201074022141 0ustar alexxuserstemp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 1]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 2]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 5]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 6]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 7]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 8]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[10]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[11]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[12]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[13]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[14]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[16]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[17]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[18]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[19]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[20]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[21]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[22]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23]; temp:= (t2 and (t6 xor t1) xor t5 and t4 xor t0 and t3 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24]; temp:= (t1 and (t5 xor t0) xor t4 and t3 xor t7 and t2 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[25]; temp:= (t0 and (t4 xor t7) xor t3 and t2 xor t6 and t1 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26]; temp:= (t7 and (t3 xor t6) xor t2 and t1 xor t5 and t0 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[27]; temp:= (t6 and (t2 xor t5) xor t1 and t0 xor t4 and t7 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28]; temp:= (t5 and (t1 xor t4) xor t0 and t7 xor t3 and t6 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[29]; temp:= (t4 and (t0 xor t3) xor t7 and t6 xor t2 and t5 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[30]; temp:= (t3 and (t7 xor t2) xor t6 and t5 xor t1 and t4 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[31]; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $452821E6; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $38D01377; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[26] + $BE5466CF; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[18] + $34E90C6C; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[11] + $C0AC29B7; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[28] + $C97C50DD; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 7] + $3F84D5B5; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[16] + $B5470917; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 0] + $9216D5D9; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $8979FB1B; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[20] + $D1310BA6; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $98DFB5AC; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $2FFD72DB; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $D01ADFB7; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 4] + $B8E1AFED; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 8] + $6A267E96; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[30] + $BA7C9045; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $F12C7F99; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $24A19947; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 9] + $B3916CF7; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $0801F2E2; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[24] + $858EFC16; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[29] + $636920D8; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 6] + $71574E69; temp:= (t3 and (t4 and not t0 xor t1 and t2 xor t6 xor t5) xor t1 and (t4 xor t2) xor t0 and t2 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $A458FEA3; temp:= (t2 and (t3 and not t7 xor t0 and t1 xor t5 xor t4) xor t0 and (t3 xor t1) xor t7 and t1 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[12] + $F4933D7E; temp:= (t1 and (t2 and not t6 xor t7 and t0 xor t4 xor t3) xor t7 and (t2 xor t0) xor t6 and t0 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[15] + $0D95748F; temp:= (t0 and (t1 and not t5 xor t6 and t7 xor t3 xor t2) xor t6 and (t1 xor t7) xor t5 and t7 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[13] + $728EB658; temp:= (t7 and (t0 and not t4 xor t5 and t6 xor t2 xor t1) xor t5 and (t0 xor t6) xor t4 and t6 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $718BCD58; temp:= (t6 and (t7 and not t3 xor t4 and t5 xor t1 xor t0) xor t4 and (t7 xor t5) xor t3 and t5 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $82154AEE; temp:= (t5 and (t6 and not t2 xor t3 and t4 xor t0 xor t7) xor t3 and (t6 xor t4) xor t2 and t4 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $7B54A41D; temp:= (t4 and (t5 and not t1 xor t2 and t3 xor t7 xor t6) xor t2 and (t5 xor t3) xor t1 and t3 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $C25A59B5; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $9C30D539; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $2AF26013; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 4] + $C5D1B023; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $286085F0; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[28] + $CA417918; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[17] + $B8DB38EF; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 8] + $8E79DCB0; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[22] + $603A180E; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[29] + $6C9E0E8B; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[14] + $B01E8A3E; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[25] + $D71577C1; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[12] + $BD314B27; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[24] + $78AF2FDA; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[30] + $55605C60; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $E65525F3; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[26] + $AA55AB94; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[31] + $57489862; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[15] + $63E81440; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 7] + $55CA396A; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 3] + $2AAB10B6; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 1] + $B4CC5C34; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 0] + $1141E8CE; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[18] + $A15486AF; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[27] + $7C72E993; temp:= (t4 and (t1 and t3 xor t2 xor t5) xor t1 and t0 xor t3 and t6 xor t5); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[13] + $B3EE1411; temp:= (t3 and (t0 and t2 xor t1 xor t4) xor t0 and t7 xor t2 and t5 xor t4); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $636FBC2A; temp:= (t2 and (t7 and t1 xor t0 xor t3) xor t7 and t6 xor t1 and t4 xor t3); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $2BA9C55D; temp:= (t1 and (t6 and t0 xor t7 xor t2) xor t6 and t5 xor t0 and t3 xor t2); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[10] + $741831F6; temp:= (t0 and (t5 and t7 xor t6 xor t1) xor t5 and t4 xor t7 and t2 xor t1); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[23] + $CE5C3E16; temp:= (t7 and (t4 and t6 xor t5 xor t0) xor t4 and t3 xor t6 and t1 xor t0); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $9B87931E; temp:= (t6 and (t3 and t5 xor t4 xor t7) xor t3 and t2 xor t5 and t0 xor t7); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[ 5] + $AFD6BA33; temp:= (t5 and (t2 and t4 xor t3 xor t6) xor t2 and t1 xor t4 and t7 xor t6); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 2] + $6C24CF5C; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[24] + $7A325381; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 4] + $28958677; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 0] + $3B8F4898; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[14] + $6B4BB9AF; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 2] + $C4BFE81B; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 7] + $66282193; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $61D809CC; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[23] + $FB21A991; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[26] + $487CAC60; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 6] + $5DEC8032; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[30] + $EF845D5D; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[20] + $E98575B1; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DC262302; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[25] + $EB651B88; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[19] + $23893E81; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 3] + $D396ACC5; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[22] + $0F6D6FF3; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[11] + $83F44239; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[31] + $2E0B4482; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[21] + $A4842004; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 8] + $69C8F04A; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[27] + $9E1F9B5E; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[12] + $21C66842; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[ 9] + $F6E96C9A; temp:= (t3 and (t5 and not t0 xor t2 and not t1 xor t4 xor t1 xor t6) xor t2 and (t4 and t0 xor t5 xor t1) xor t0 and t1 xor t6); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 1] + $670C9C61; temp:= (t2 and (t4 and not t7 xor t1 and not t0 xor t3 xor t0 xor t5) xor t1 and (t3 and t7 xor t4 xor t0) xor t7 and t0 xor t5); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[29] + $ABD388F0; temp:= (t1 and (t3 and not t6 xor t0 and not t7 xor t2 xor t7 xor t4) xor t0 and (t2 and t6 xor t3 xor t7) xor t6 and t7 xor t4); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[ 5] + $6A51A0D2; temp:= (t0 and (t2 and not t5 xor t7 and not t6 xor t1 xor t6 xor t3) xor t7 and (t1 and t5 xor t2 xor t6) xor t5 and t6 xor t3); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[15] + $D8542F68; temp:= (t7 and (t1 and not t4 xor t6 and not t5 xor t0 xor t5 xor t2) xor t6 and (t0 and t4 xor t1 xor t5) xor t4 and t5 xor t2); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $960FA728; temp:= (t6 and (t0 and not t3 xor t5 and not t4 xor t7 xor t4 xor t1) xor t5 and (t7 and t3 xor t0 xor t4) xor t3 and t4 xor t1); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[10] + $AB5133A3; temp:= (t5 and (t7 and not t2 xor t4 and not t3 xor t6 xor t3 xor t0) xor t4 and (t6 and t2 xor t7 xor t3) xor t2 and t3 xor t0); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[16] + $6EEF0B6C; temp:= (t4 and (t6 and not t1 xor t3 and not t2 xor t5 xor t2 xor t7) xor t3 and (t5 and t1 xor t6 xor t2) xor t1 and t2 xor t7); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[13] + $137A3BE4; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[27] + $BA3BF050; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 3] + $7EFB2A98; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[21] + $A1F1651D; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[26] + $39AF0176; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[17] + $66CA593E; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[11] + $82430E88; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[20] + $8CEE8619; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[29] + $456F9FB4; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[19] + $7D84A5C3; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 0] + $3B8B5EBE; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[12] + $E06F75D8; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[ 7] + $85C12073; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[13] + $401A449F; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 8] + $56C16AA6; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[31] + $4ED3AA62; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[10] + $363F7706; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 5] + $1BFEDF72; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[ 9] + $429B023D; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[14] + $37D0D724; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[30] + $D00A1248; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[18] + $DB0FEAD3; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 6] + $49F1C09B; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[28] + $075372C9; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[24] + $80991B7B; temp:= (t1 and (t3 and t4 and t6 xor not t5) xor t3 and t0 xor t4 and t5 xor t6 and t2); t7:= ((temp shr 7) or (temp shl 25)) + ((t7 shr 11) or (t7 shl 21)) + w[ 2] + $25D479D8; temp:= (t0 and (t2 and t3 and t5 xor not t4) xor t2 and t7 xor t3 and t4 xor t5 and t1); t6:= ((temp shr 7) or (temp shl 25)) + ((t6 shr 11) or (t6 shl 21)) + w[23] + $F6E8DEF7; temp:= (t7 and (t1 and t2 and t4 xor not t3) xor t1 and t6 xor t2 and t3 xor t4 and t0); t5:= ((temp shr 7) or (temp shl 25)) + ((t5 shr 11) or (t5 shl 21)) + w[16] + $E3FE501A; temp:= (t6 and (t0 and t1 and t3 xor not t2) xor t0 and t5 xor t1 and t2 xor t3 and t7); t4:= ((temp shr 7) or (temp shl 25)) + ((t4 shr 11) or (t4 shl 21)) + w[22] + $B6794C3B; temp:= (t5 and (t7 and t0 and t2 xor not t1) xor t7 and t4 xor t0 and t1 xor t2 and t6); t3:= ((temp shr 7) or (temp shl 25)) + ((t3 shr 11) or (t3 shl 21)) + w[ 4] + $976CE0BD; temp:= (t4 and (t6 and t7 and t1 xor not t0) xor t6 and t3 xor t7 and t0 xor t1 and t5); t2:= ((temp shr 7) or (temp shl 25)) + ((t2 shr 11) or (t2 shl 21)) + w[ 1] + $04C006BA; temp:= (t3 and (t5 and t6 and t0 xor not t7) xor t5 and t2 xor t6 and t7 xor t0 and t4); t1:= ((temp shr 7) or (temp shl 25)) + ((t1 shr 11) or (t1 shl 21)) + w[25] + $C1A94FB6; temp:= (t2 and (t4 and t5 and t7 xor not t6) xor t4 and t1 xor t5 and t6 xor t7 and t3); t0:= ((temp shr 7) or (temp shl 25)) + ((t0 shr 11) or (t0 shl 21)) + w[15] + $409F60C4; doublecmd-0.7.1/components/dcpcrypt/Readme.txt0000644000175000001440000001125712014201074020465 0ustar alexxusers =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= = DCPcrypt Cryptographic Component Library v2 Beta 3 = = Copyright (c) 1999-2003 David Barton = = http://www.cityinthesky.co.uk/ = = crypto@cityinthesky.co.uk = =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Introduction: DCPcrypt is a collection of cryptographic components for the Borland Delphi(tm), C++ Builder(tm) and Kylix(tm) programming languages. The supported versions are Delphi 4, 5, 6, 7, 2005, C++ Builder (3?), 4, 5, (6?) and Kylix 1 (untested), 2 and 3 (untested). Thanks to Manuel C. for the modifications to make DCPcrypt work under Delphi 2005! The idea behind DCPcrypt is that it should be possible to "drop in" any algorithm implementation to replace another with minimum or no code changes. To aid in this goal all cryptographic components are descended from one of several base classes, TDCP_cipher for encryption algorithms and TDCP_hash for message digest algorithms. DCPcrypt is open source software (released under the MIT license) and as such there is no charge for inclusion in other software. However, I am currently a student and if you are making money from my software I would really appreciate a donation of some sort, whether financial or a license for the software you develop (or if anyone wants to sponsor a Mathematical Modelling (Masters) student for their final year...). Please note THIS IS NOT COMPULSORY IN ANY WAY. See http://www.cityinthesky.co.uk/cryptography.html for details on financial donations. This software is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative. If you maintain a website then a link to my page at http://www.cityinthesky.co.uk/ would be great! What's New: Changes since DCPcrypt v2 Beta 2 include * Corrected C++ Builder compilation problem. Changes since DCPcrypt v2 Beta 1 include * Renamed source code files for hashes and ciphers to DCPxxx.pas * Change the format of Cipher.InitStr so that the hash algorithm used to generate the key is explicitly specified. In order to get the same functionality as before, use TDCP_sha1. e.g. Cipher.InitStr('Hello World',TDCP_sha1); * Block ciphers are now inherited from an intermediate component that implements the block size specific chaining mode encryption routines. * Remove the internal component registration, it was more hassle than it was worth. If there is a demand for this to be put back then I might... * Added the full range of operation modes for Haval. By changing the defines at the top of DCPhaval.pas you can specify the number of passes and the output hash size. * Added the Tiger hash algorithm (192bit digest). * Changed the name of the file containing TDCP_ripemd160 for consistency to DCPripemd160 from DCPrmd160. * GOST no longer appears on the component palette pending verifying what the actual standard is (the code is still included however). * Added the RipeMD-128 hash algorithm (128bit digest). * Added the Serpent block cipher (AES finalist). * Added the SHA-256,384,512 hash algorithms (256, 384, 512bit digest respectively). * Added CTR chaining mode to all block ciphers. Installation: Delphi: Open the appropriate package, DCPdelphiX.dpk where X is your version of Delphi (either 4, 5 or 6). Then press the install button. C++ Builder: Create a new design time package and add all the .pas files from the DCPcrypt2.zip archive including all those in the Ciphers and Hashes subdirectories. Then press the install button. Kylix: Open the DCPkylix.dpk package and then press the install button (note: Kylix 1 users may need to create a new package as with C++ Builder as this is a Kylix 2 package). You may need to add the directory containing DCPcrypt (and the Ciphers and Hashes subdirectories) to your library search path (found under Environment Options). Once installed you will find two extra pages of components on your component palette, namely DCPciphers and DCPhashes. You can now place these components onto the form of your application to start using the algorithms. Usage: See the main html documentation in the Docs subdirectory. Contact: I appreciate knowing what DCPcrypt is being used for and also if you have any queries or bug reports please email me at crypto@cityinthesky.co.uk. DCPcrypt is copyrighted (c) 1999-2003 David Barton. All trademarks are property of their respective owners. doublecmd-0.7.1/components/dcpcrypt/dcpblockciphers.pas0000644000175000001440000005205412014201074022373 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* Block cipher component definitions *****************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPblockciphers; {$MODE Delphi} interface uses Classes, Sysutils, DCPcrypt2; {******************************************************************************} { Base type definition for 64 bit block ciphers } type TDCP_blockcipher64= class(TDCP_blockcipher) private IV, CV: array[0..7] of byte; procedure IncCounter; public class function GetBlockSize: integer; override; { Get the block size of the cipher (in bits) } procedure Reset; override; { Reset any stored chaining information } procedure Burn; override; { Clear all stored key information and chaining information } procedure SetIV(const Value); override; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); override; { Returns the current chaining information, not the actual IV } procedure Init(const Key; Size: longword; InitVector: pointer); override; { Do key setup based on the data in Key, size is in bits } procedure EncryptCBC(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CTR method of decryption } end; {******************************************************************************} { Base type definition for 128 bit block ciphers } type TDCP_blockcipher128= class(TDCP_blockcipher) private IV, CV: array[0..15] of byte; procedure IncCounter; public class function GetBlockSize: integer; override; { Get the block size of the cipher (in bits) } procedure Reset; override; { Reset any stored chaining information } procedure Burn; override; { Clear all stored key information and chaining information } procedure SetIV(const Value); override; { Sets the IV to Value and performs a reset } procedure GetIV(var Value); override; { Returns the current chaining information, not the actual IV } procedure Init(const Key; Size: longword; InitVector: pointer); override; { Do key setup based on the data in Key, size is in bits } procedure EncryptCBC(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CBC method of encryption } procedure DecryptCBC(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CBC method of decryption } procedure EncryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (8 bit) method of encryption } procedure DecryptCFB8bit(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (8 bit) method of decryption } procedure EncryptCFBblock(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CFB (block) method of encryption } procedure DecryptCFBblock(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CFB (block) method of decryption } procedure EncryptOFB(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the OFB method of encryption } procedure DecryptOFB(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the OFB method of decryption } procedure EncryptCTR(const Indata; var Outdata; Size: longword); override; { Encrypt size bytes of data using the CTR method of encryption } procedure DecryptCTR(const Indata; var Outdata; Size: longword); override; { Decrypt size bytes of data using the CTR method of decryption } end; implementation {** TDCP_blockcipher64 ********************************************************} procedure TDCP_blockcipher64.IncCounter; var i: integer; begin Inc(CV[7]); i:= 7; while (i> 0) and (CV[i] = 0) do begin Inc(CV[i-1]); Dec(i); end; end; class function TDCP_blockcipher64.GetBlockSize: integer; begin Result:= 64; end; procedure TDCP_blockcipher64.Init(const Key; Size: longword; InitVector: pointer); begin inherited Init(Key,Size,InitVector); InitKey(Key,Size); if InitVector= nil then begin FillChar(IV,8,{$IFDEF DCP1COMPAT}$FF{$ELSE}0{$ENDIF}); EncryptECB(IV,IV); Reset; end else begin Move(InitVector^,IV,8); Reset; end; end; procedure TDCP_blockcipher64.SetIV(const Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(Value,IV,8); Reset; end; procedure TDCP_blockcipher64.GetIV(var Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(CV,Value,8); end; procedure TDCP_blockcipher64.Reset; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized') else Move(IV,CV,8); end; procedure TDCP_blockcipher64.Burn; begin FillChar(IV,8,$FF); FillChar(CV,8,$FF); inherited Burn; end; procedure TDCP_blockcipher64.EncryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin Move(p1^,p2^,8); XorBlock(p2^,CV,8); EncryptECB(p2^,p2^); Move(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); dcpFillChar(Temp, SizeOf(Temp), 0); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin Move(p1^,p2^,8); Move(p1^,Temp,8); DecryptECB(p2^,p2^); XorBlock(p2^,CV,8); Move(Temp,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],8-1); CV[7]:= p2^; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher64.DecryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; TempByte: byte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin TempByte:= p1^; EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],8-1); CV[7]:= TempByte; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher64.EncryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); Move(p2^,CV,8); p1:= pointer(pointer(p1) + 8); p2:= pointer(pointer(p2) + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..7] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin Move(p1^,Temp,8); EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); Move(Temp,CV,8); p1:= pointer(pointer(p1) + 8); p2:= pointer(pointer(p2) + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 8) do begin EncryptECB(CV,CV); Move(p1^,p2^,8); XorBlock(p2^,CV,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 8); XorBlock(p2^,CV,Size mod 8); end; end; procedure TDCP_blockcipher64.EncryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..7] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,8); XorBlock(p2^,temp,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 8); XorBlock(p2^,temp,Size mod 8); end; end; procedure TDCP_blockcipher64.DecryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..7] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 8) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,8); XorBlock(p2^,temp,8); p1:= pointer(p1 + 8); p2:= pointer(p2 + 8); end; if (Size mod 8)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 8); XorBlock(p2^,temp,Size mod 8); end; end; {** TDCP_blockcipher128 ********************************************************} procedure TDCP_blockcipher128.IncCounter; var i: integer; begin Inc(CV[15]); i:= 15; while (i> 0) and (CV[i] = 0) do begin Inc(CV[i-1]); Dec(i); end; end; class function TDCP_blockcipher128.GetBlockSize: integer; begin Result:= 128; end; procedure TDCP_blockcipher128.Init(const Key; Size: longword; InitVector: pointer); begin inherited Init(Key,Size,InitVector); InitKey(Key,Size); if InitVector= nil then begin FillChar(IV,16,{$IFDEF DCP1COMPAT}$FF{$ELSE}0{$ENDIF}); EncryptECB(IV,IV); Reset; end else begin Move(InitVector^,IV,16); Reset; end; end; procedure TDCP_blockcipher128.SetIV(const Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(Value,IV,16); Reset; end; procedure TDCP_blockcipher128.GetIV(var Value); begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); Move(CV,Value,16); end; procedure TDCP_blockcipher128.Reset; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized') else Move(IV,CV,16); end; procedure TDCP_blockcipher128.Burn; begin FillChar(IV,16,$FF); FillChar(CV,16,$FF); inherited Burn; end; procedure TDCP_blockcipher128.EncryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin Move(p1^,p2^,16); XorBlock(p2^,CV,16); EncryptECB(p2^,p2^); Move(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCBC(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin Move(p1^,p2^,16); Move(p1^,Temp,16); DecryptECB(p2^,p2^); XorBlock(p2^,CV,16); Move(Temp,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],15); CV[15]:= p2^; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher128.DecryptCFB8bit(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; TempByte: byte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to Size do begin TempByte:= p1^; EncryptECB(CV,Temp); p2^:= p1^ xor Temp[0]; Move(CV[1],CV[0],15); CV[15]:= TempByte; Inc(p1); Inc(p2); end; end; procedure TDCP_blockcipher128.EncryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); Move(p2^,CV,16); p1:= pointer(pointer(p1) + 16); p2:= pointer(pointer(p2) + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCFBblock(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: Pbyte; Temp: array[0..15] of byte; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin Move(p1^,Temp,16); EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); Move(Temp,CV,16); p1:= pointer(pointer(p1) + 16); p2:= pointer(pointer(p2) + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptOFB(const Indata; var Outdata; Size: longword); var i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; for i:= 1 to (Size div 16) do begin EncryptECB(CV,CV); Move(p1^,p2^,16); XorBlock(p2^,CV,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,CV); Move(p1^,p2^,Size mod 16); XorBlock(p2^,CV,Size mod 16); end; end; procedure TDCP_blockcipher128.EncryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..15] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,16); XorBlock(p2^,temp,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 16); XorBlock(p2^,temp,Size mod 16); end; end; procedure TDCP_blockcipher128.DecryptCTR(const Indata; var Outdata; Size: longword); var temp: array[0..15] of byte; i: longword; p1, p2: pointer; begin if not fInitialized then raise EDCP_blockcipher.Create('Cipher not initialized'); p1:= @Indata; p2:= @Outdata; dcpFillChar(Temp, SizeOf(Temp), 0); for i:= 1 to (Size div 16) do begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,16); XorBlock(p2^,temp,16); p1:= pointer(p1 + 16); p2:= pointer(p2 + 16); end; if (Size mod 16)<> 0 then begin EncryptECB(CV,temp); IncCounter; Move(p1^,p2^,Size mod 16); XorBlock(p2^,temp,Size mod 16); end; end; end. doublecmd-0.7.1/components/dcpcrypt/dcp.pas0000644000175000001440000000077212014201074020002 0ustar alexxusers{ This file was automatically created by Lazarus. do not edit! This source is only used to compile and install the package. } unit dcp; interface uses DCPbase64, DCPblockciphers, DCPconst, DCPcrypt2, DCPblowfish, DCPcast128, DCPcast256, DCPdes, DCPgost, DCPice, DCPidea, DCPmars, DCPmisty1, DCPrc2, DCPrc4, DCPrc5, DCPrc6, DCPrijndael, DCPserpent, DCPtea, DCPtwofish, DCPhaval, DCPmd4, DCPmd5, DCPripemd128, DCPripemd160, DCPsha1, DCPsha256, DCPsha512, DCPtiger; implementation end. doublecmd-0.7.1/components/dcpcrypt/DCPciphers.lrs0000644000175000001440000007536611652036011021254 0ustar alexxusersLazarusResources.Add('TDCP_3DES','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#255#238#238#255#254#239#255#255#255#254#204#206#254#204#204#239#236#206#255 +#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206#236#238#206 +#255#255#238#236#239#255#255#254#206#236#238#204#239#255#236#206#255#255#255 +#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238#206#238#254 +#206#236#239#255#255#254#204#206#254#204#204#239#236#206#255#255#255#255#238 +#239#255#238#238#255#254#239#255#255#255#255#255#255#255#254#239#255#255#255 +#255#255#255#255#255#255#255#236#206#255#255#255#255#255#255#255#255#255#254 +#206#236#239#255#255#255#255#255#255#255#255#255#238#236#239#255#255#255#255 +#255#255#255#255#255#236#206#255#255#255#255#255#255#255#255#255#255#238#236 +#239#255#255#255#255#255#255#255#255#254#206#236#239#255#255#255#255#255#255 +#255#255#255#236#206#255#255#255#255#255#255#255#255#255#255#254#239#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_BLOWFISH','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254#255#255#254 +#238#255#238#239#255#239#254#255#236#239#255#236#204#238#204#206#254#206#236 +#239#236#239#255#254#206#255#238#236#238#206#236#239#236#238#255#254#206#255 +#254#236#238#206#236#239#236#204#239#254#206#255#236#206#254#204#204#239#236 +#238#255#254#206#254#206#239#254#206#236#239#236#238#239#254#206#254#206#238 +#254#206#236#239#236#204#206#236#204#239#236#204#238#206#236#239#254#238#239 +#254#238#255#254#238#255#239#254#255#254#238#255#254#238#239#254#239#255#254 +#254#255#236#204#239#236#204#206#236#206#255#236#236#239#236#238#206#236#238 +#238#206#236#238#206#206#206#236#238#206#236#239#254#206#236#238#206#206#206 +#236#204#239#236#239#254#206#236#238#206#206#206#236#238#206#236#239#254#206 +#236#238#206#238#206#236#238#206#236#239#254#206#236#238#206#254#206#236#204 +#239#236#239#255#236#206#254#206#254#206#254#238#255#254#255#255#254#239#255 +#239#255#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_CAST128','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#254#238#239#255#238#255#255#255#255#254#204#206#236#204#206#254#204#239#255 +#255#255#255#236#239#236#238#239#236#238#206#255#255#255#255#236#239#254#206 +#255#236#238#206#255#255#255#255#236#239#255#236#239#254#204#239#255#255#255 +#255#236#239#254#254#206#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#238#239#254#255#239#254#238#255#255 +#239#255#254#204#206#236#238#206#236#204#239#254#206#255#236#238#239#236#238 +#206#254#238#206#254#206#255#236#239#255#236#238#206#255#238#206#254#206#255 +#236#239#255#236#204#206#254#204#239#254#206#255#236#239#255#236#238#206#236 +#238#255#254#206#255#236#238#239#236#238#206#236#238#239#254#206#255#254#204 +#206#254#204#239#254#204#206#236#204#239#255#238#239#255#238#255#255#238#239 +#254#238#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_CAST256','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#238 +#255#238#239#255#254#239#255#255#255#254#204#204#238#204#206#255#236#206#255 +#255#255#255#236#238#255#238#236#238#206#236#239#255#255#255#255#206#255#238 +#236#238#206#236#239#255#255#255#255#236#238#204#206#254#204#206#255#255#255 +#255#239#236#238#206#239#254#206#238#255#255#255#254#206#236#238#206#238#254 +#206#236#239#255#255#255#236#206#254#204#204#255#236#206#255#255#255#255#254 +#239#255#238#238#255#254#239#255#255#255#238#239#254#255#239#254#238#255#255 +#239#255#254#204#206#236#238#206#236#204#239#254#206#255#236#238#239#236#238 +#206#254#238#206#254#206#255#236#239#255#236#238#206#255#238#206#254#206#255 +#236#239#255#236#204#206#254#204#239#254#206#255#236#239#255#236#238#206#236 +#238#255#254#206#255#236#238#239#236#238#206#236#238#239#254#206#255#254#204 +#206#254#204#239#254#204#206#236#204#239#255#238#239#255#238#255#255#238#239 +#254#238#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_DES','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#238#238#255#254#239#255#255#255#254#204#206#254#204#204#239 +#236#206#255#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206 +#236#238#206#255#255#238#236#239#255#255#254#206#236#238#204#239#255#236#206 +#255#255#255#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#254#204#204#239#236#206#255#255 +#255#255#238#239#255#238#238#255#254#239#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_GOST','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#239#255#254#239#255#238#239#255#254#255#255#236#206#255#236#206#254#204 +#206#255#236#239#254#206#236#238#206#236#239#238#236#239#236#239#254#206#204 +#238#206#236#239#254#236#239#236#239#254#206#238#254#206#236#239#236#206#255 +#236#239#254#206#254#254#206#236#238#206#239#255#236#239#254#206#236#238#206 +#236#238#206#238#255#236#239#255#236#206#255#236#206#255#236#204#238#204#206 +#255#254#239#255#254#239#255#254#238#255#238#239#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_ICE2','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#238#239#255#255#255#255#255#255#255#255#255#236#204#206#255#255#255#255 +#255#255#255#255#255#236#238#239#255#255#255#255#255#255#255#255#255#254#206 +#255#255#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255 +#255#255#255#254#254#206#255#255#255#255#255#255#255#255#255#236#238#206#255 +#255#255#255#255#255#255#255#255#254#204#239#255#255#255#255#255#255#255#255 +#255#255#238#255#255#255#255#255#255#255#255#238#239#255#238#239#254#238#239 +#255#255#255#254#204#206#254#204#206#236#204#206#255#255#255#255#236#239#236 +#238#239#236#238#239#255#255#255#255#236#239#236#239#255#236#238#255#255#255 +#255#255#236#239#236#239#255#236#204#239#255#255#255#255#236#239#236#239#255 +#236#238#255#255#255#255#255#236#239#236#238#239#236#238#239#255#255#255#254 +#204#206#254#204#206#236#204#206#255#255#255#255#238#239#255#238#239#254#238 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_ICE','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#238#239#254#238#239#255#255#255#254#204#206#254#204#206#236 +#204#206#255#255#255#255#236#239#236#238#239#236#238#239#255#255#255#255#236 +#239#236#239#255#236#238#255#255#255#255#255#236#239#236#239#255#236#204#239 +#255#255#255#255#236#239#236#239#255#236#238#255#255#255#255#255#236#239#236 +#238#239#236#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255#255 +#255#255#238#239#255#238#239#254#238#239#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_IDEA','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#238#239#254#238#255#254#238#239#254#255#239#254#204#206#236#204#239#236#204 +#206#236#238#206#255#236#239#236#238#206#236#238#239#236#238#206#255#236#239 +#236#238#206#236#238#255#236#238#206#255#236#239#236#238#206#236#204#239#236 +#204#206#255#236#239#236#238#206#236#238#255#236#238#206#255#236#239#236#238 +#206#236#238#239#236#238#206#254#204#206#236#204#239#236#204#206#254#204#239 +#255#238#239#254#238#255#254#238#239#255#238#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_MARS','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#239#255#239#239#254#254#255#239#238#239#255#254#206#254#206#206#236#236#238 +#206#204#206#255#254#206#238#206#206#236#236#238#206#238#236#239#254#206#206 +#206#206#236#236#238#206#254#236#239#254#206#206#206#204#204#236#204#239#236 +#206#255#254#204#236#206#206#236#236#238#206#206#239#255#254#204#236#206#206 +#236#236#238#206#206#238#255#254#206#254#206#236#206#236#204#239#236#204#239 +#255#239#255#239#254#239#254#238#255#254#238#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_MISTY1','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#238#239#255#255#255#255#255#255#255#255#255#254#204#206#255#255#255#255 +#255#255#255#255#255#255#236#239#255#255#255#255#255#255#255#255#255#255#236 +#239#255#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255 +#255#255#255#255#236#239#255#255#255#255#255#255#255#255#255#254#204#239#255 +#255#255#255#255#255#255#255#255#255#236#239#255#255#255#255#255#255#255#255 +#255#255#254#255#255#255#255#255#255#254#255#254#254#238#254#238#255#254#255 +#238#255#236#239#236#236#204#236#204#239#236#238#204#239#236#238#236#238#206 +#254#238#206#236#239#238#206#236#236#236#238#206#255#238#206#236#239#254#206 +#236#236#236#238#206#254#204#239#236#239#236#206#236#206#204#238#206#236#238 +#255#236#238#206#206#236#206#204#238#206#236#238#239#236#238#206#206#236#239 +#236#236#204#238#204#206#204#206#206#206#254#255#254#254#238#255#238#239#238 +#239#239#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RC2','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#238#238#255#255#255#254#206#236#239#236#204#238 +#204#204#239#255#255#254#206#236#238#206#238#254#206#238#255#255#255#254#206 +#236#238#206#255#255#236#239#255#255#255#254#204#206#254#206#255#255#254#206 +#255#255#255#254#206#236#238#206#255#255#239#236#239#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#255#236#204#239#236#206#255#255 +#255#255#238#239#255#254#238#255#254#239#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RC4','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#255#239#255#255#255#254#206#236#239#236#204#239 +#254#206#255#255#255#254#206#236#238#206#238#255#238#206#255#255#255#254#206 +#236#238#206#255#254#204#204#239#255#255#254#204#206#254#206#255#254#206#206 +#255#255#255#254#206#236#238#206#255#254#206#239#255#255#255#254#206#236#238 +#206#238#254#206#255#255#255#255#254#204#206#255#236#204#238#206#255#255#255 +#255#255#238#239#255#254#238#255#239#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RC5','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#238#239#255#255#255#254#206#236#239#236#204#238 +#204#206#255#255#255#254#206#236#238#206#238#255#238#236#239#255#255#254#206 +#236#238#206#255#255#238#236#239#255#255#254#204#206#254#206#255#254#204#206 +#255#255#255#254#206#236#238#206#255#254#206#239#255#255#255#254#206#236#238 +#206#238#254#206#238#255#255#255#254#204#206#255#236#204#238#204#204#239#255 +#255#255#238#239#255#254#238#255#238#238#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RC6','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#239#254#255#254#238#255#254#239#255#255#255#254#206#236#239#236#204#239 +#236#206#255#255#255#254#206#236#238#206#238#254#206#236#239#255#255#254#206 +#236#238#206#255#254#206#236#239#255#255#254#204#206#254#206#255#254#204#206 +#255#255#255#254#206#236#238#206#255#254#206#238#255#255#255#254#206#236#238 +#206#238#254#206#236#239#255#255#254#204#206#255#236#204#239#236#206#255#255 +#255#255#238#239#255#254#238#255#254#239#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RIJNDAEL','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254#238#255#254 +#255#239#254#238#239#238#238#255#236#204#239#236#238#206#236#204#206#204#204 +#239#236#238#206#236#238#206#236#238#238#206#238#255#236#238#206#236#238#206 +#236#238#254#206#255#255#236#238#206#236#204#206#236#204#238#206#255#255#236 +#238#206#236#238#206#236#238#254#206#255#255#236#238#206#236#238#206#236#238 +#238#206#255#255#236#204#239#254#204#239#236#204#206#206#255#255#254#238#255 +#255#238#255#254#238#239#239#255#255#254#255#239#254#238#255#254#255#255#239 +#254#255#236#238#206#236#204#239#236#239#254#206#236#239#236#238#206#254#206 +#254#206#206#254#206#236#239#236#238#206#254#206#254#206#206#254#206#204#239 +#236#204#239#254#206#255#238#206#254#206#204#239#236#238#206#254#206#255#254 +#206#254#204#236#239#236#238#206#254#206#255#238#206#254#204#236#239#236#204 +#239#236#204#238#204#204#238#206#236#239#254#238#255#254#238#255#238#238#255 +#239#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SERPENT','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#239#255#254 +#238#239#239#254#255#254#255#255#254#206#255#236#204#206#206#236#239#236#239 +#255#254#206#255#236#238#238#206#204#239#236#239#255#254#206#239#236#238#254 +#206#204#239#236#239#255#254#204#206#236#204#238#204#204#239#236#239#255#254 +#206#236#236#238#254#204#236#239#236#239#255#254#206#236#236#238#238#204#236 +#238#236#238#255#254#204#206#236#204#206#206#236#236#204#204#239#255#238#239 +#254#238#239#239#254#254#238#238#255#255#255#238#239#255#238#238#255#239#254 +#255#255#255#254#204#206#254#204#204#238#206#236#239#255#255#255#238#236#238 +#206#238#254#206#236#239#255#255#255#254#236#238#206#239#254#206#236#239#255 +#255#255#236#206#254#204#206#254#204#206#255#255#255#254#206#239#254#206#239 +#254#206#236#239#255#255#254#206#238#254#206#238#254#206#236#239#255#255#255 +#236#204#238#204#204#238#204#206#255#255#255#255#254#238#255#238#238#255#254 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TEA','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#254#255#255#238#238#255#239#254#255#255#255#255#236#239#254#204#204#238 +#206#236#239#255#255#255#236#239#254#206#238#254#206#236#239#255#255#255#236 +#239#254#206#255#254#206#236#239#255#255#255#236#239#254#204#239#254#204#204 +#239#255#255#255#236#239#254#206#255#254#206#236#239#255#255#254#236#238#254 +#206#238#254#206#236#239#255#255#236#204#204#238#204#204#239#236#206#255#255 +#255#254#238#238#255#238#238#255#254#239#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_THINICE','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#255#238#239#254#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255 +#255#255#255#236#239#236#238#239#236#238#239#255#255#255#255#236#239#236#239 +#255#236#238#255#255#255#255#255#236#239#236#239#255#236#204#239#255#255#255 +#255#236#239#236#239#255#236#238#255#255#255#255#255#236#239#236#238#239#236 +#238#239#255#255#255#254#204#206#254#204#206#236#204#206#255#255#255#255#238 +#239#255#238#239#254#238#239#255#255#255#254#255#254#255#239#254#238#255#239 +#254#255#255#236#239#236#238#206#236#204#238#206#236#239#255#236#239#236#238 +#206#254#206#254#206#236#239#255#236#239#236#238#206#254#206#254#206#204#239 +#255#236#239#236#204#206#254#206#254#206#204#239#255#236#239#236#238#206#254 +#206#254#204#236#239#255#236#239#236#238#206#254#206#254#204#236#239#254#204 +#206#236#238#206#236#204#238#206#236#239#255#238#239#254#255#239#254#238#255 +#239#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TWOFISH','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254#255#255#254 +#238#255#238#239#255#239#254#255#236#239#255#236#204#238#204#206#254#206#236 +#239#236#239#255#254#206#255#238#236#238#206#236#239#236#238#255#254#206#255 +#254#236#238#206#236#239#236#204#239#254#206#255#236#206#254#204#204#239#236 +#238#255#254#206#254#206#239#254#206#236#239#236#238#239#254#206#254#206#238 +#254#206#236#239#236#204#206#236#204#239#236#204#238#206#236#239#254#238#239 +#254#238#255#254#238#255#239#254#255#255#255#254#255#255#254#254#255#255#238 +#255#255#255#255#236#239#255#236#236#239#254#204#239#255#255#255#236#239#254 +#206#206#206#236#238#206#255#255#255#236#239#254#206#206#206#236#238#206#255 +#255#255#236#239#254#206#206#206#236#238#206#255#255#255#236#239#254#206#238 +#206#236#238#206#255#255#254#236#238#254#206#254#206#236#238#206#255#255#236 +#204#204#238#206#254#206#254#204#239#255#255#254#238#238#255#239#255#239#255 +#238#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); doublecmd-0.7.1/components/dcpcrypt/Ciphers/0000755000175000001440000000000012675717723020150 5ustar alexxusersdoublecmd-0.7.1/components/dcpcrypt/DCPhashes.lrs0000644000175000001440000003660211652036011021060 0ustar alexxusersLazarusResources.Add('TDCP_HAVAL','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#254#254#254#255#239#254#254#254#238#255#255#236#236#236#236#238#206#236 +#236#236#204#239#255#236#236#236#236#236#236#236#236#236#238#255#255#236#236 +#236#236#236#236#236#236#236#239#255#255#236#204#236#204#236#236#236#204#236 +#239#255#255#236#236#236#236#236#236#236#236#236#239#255#255#236#236#236#236 +#236#236#236#236#236#239#255#255#236#236#238#206#236#236#238#206#236#239#255 +#255#254#254#255#239#254#254#255#239#254#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_MD4','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#255#254#255#238#239#255#255#239#255#255#255#236#239#236#238#204#206#255 +#254#206#255#255#255#236#239#236#238#206#236#239#238#206#255#255#255#236#238 +#236#238#206#236#238#204#204#239#255#255#236#236#236#238#206#236#238#206#206 +#255#255#255#236#236#236#238#206#236#238#206#239#255#255#255#236#206#204#238 +#206#236#238#206#255#255#255#255#236#239#236#238#204#206#254#206#255#255#255 +#255#254#255#254#255#238#239#255#239#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_MD5','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#255#254#255#238#239#255#238#239#255#255#255#236#239#236#238#204#206#254 +#204#206#255#255#255#236#239#236#238#206#236#239#238#236#239#255#255#236#238 +#236#238#206#236#239#254#236#239#255#255#236#236#236#238#206#236#239#236#204 +#239#255#255#236#236#236#238#206#236#238#206#238#255#255#255#236#206#204#238 +#206#236#238#206#238#255#255#255#236#239#236#238#204#206#254#204#204#239#255 +#255#254#255#254#255#238#239#255#238#238#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RIPEMD128','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#254#238#239#255#238#255#255#255#255#254#204#206#236#204#206#254#204#239#255 +#255#255#255#236#239#254#206#239#236#238#206#255#255#255#255#236#239#255#236 +#239#236#238#206#255#255#255#255#236#239#254#254#206#254#204#239#255#255#255 +#255#236#239#236#238#206#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#254#255#239#254#255#254#255#238#239 +#255#255#255#236#238#206#236#239#236#238#204#206#255#255#255#236#238#206#236 +#239#236#238#206#236#239#255#255#236#238#206#236#238#236#238#206#236#239#255 +#255#236#204#239#236#236#236#238#206#236#239#255#255#236#238#206#236#236#236 +#238#206#236#239#255#255#236#238#206#236#206#204#238#206#236#239#255#255#236 +#204#239#236#239#236#238#204#206#255#255#255#254#238#255#254#255#254#255#238 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_RIPEMD160','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#255#238#255#255#238#255#255#255#255#254#204#206#254#204#239#254#204#239#255 +#255#255#255#236#239#236#238#206#236#238#206#255#255#255#255#236#239#236#238 +#206#236#238#206#255#255#255#255#236#239#236#204#239#236#238#206#255#255#255 +#255#236#239#236#238#239#236#238#206#255#255#255#254#204#239#236#238#206#236 +#238#206#255#255#255#255#236#239#254#204#239#254#204#239#255#255#255#255#254 +#255#255#238#255#255#238#255#255#255#255#254#255#239#254#255#254#255#238#239 +#255#255#255#236#238#206#236#239#236#238#204#206#255#255#255#236#238#206#236 +#239#236#238#206#236#239#255#255#236#238#206#236#238#236#238#206#236#239#255 +#255#236#204#239#236#236#236#238#206#236#239#255#255#236#238#206#236#236#236 +#238#206#236#239#255#255#236#238#206#236#206#204#238#206#236#239#255#255#236 +#204#239#236#239#236#238#204#206#255#255#255#254#238#255#254#255#254#255#238 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA1','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128#128#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254 +#238#255#254#255#239#254#255#239#254#238#255#236#204#239#236#238#206#236#238 +#206#236#204#239#254#238#206#236#238#206#236#238#206#254#206#255#255#238#206 +#236#238#206#236#238#206#254#206#255#254#204#239#236#204#206#236#204#206#254 +#206#255#236#238#255#236#238#206#236#238#206#254#206#255#236#238#239#236#238 +#206#236#238#206#236#206#255#254#204#206#236#238#206#254#204#239#254#206#255 +#255#238#239#254#255#239#255#238#255#255#239#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA256','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#238 +#255#238#239#255#254#239#255#255#255#254#204#204#238#204#206#255#236#206#255 +#255#255#255#236#238#255#238#236#238#206#236#239#255#255#255#254#206#255#254 +#236#238#206#236#239#255#255#255#239#236#239#236#206#254#204#206#255#255#255 +#254#206#236#238#206#239#254#206#239#255#255#255#254#206#236#238#206#238#254 +#206#238#255#255#255#255#236#206#254#204#204#239#236#204#239#255#255#255#254 +#239#255#238#238#255#254#238#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA384','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#255#254#239#255#255#239#255#255#255#254#204#206#255#236#206#255#238#206#255 +#255#255#255#238#236#238#206#236#238#204#204#239#255#255#255#254#236#238#206 +#236#238#206#206#255#255#255#255#236#206#255#236#206#254#206#206#255#255#255 +#255#254#236#238#206#236#238#206#239#255#255#255#255#238#236#238#206#236#239 +#236#239#255#255#255#254#204#206#255#236#206#255#236#239#255#255#255#255#238 +#239#255#254#239#255#254#255#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_SHA512','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#238#239 +#255#254#238#255#238#238#255#255#255#254#204#206#255#236#204#238#204#204#239 +#255#255#255#238#236#239#254#206#255#236#238#255#255#255#255#254#236#239#254 +#206#255#254#206#255#255#255#255#236#206#255#254#206#255#239#236#239#255#255 +#254#206#239#255#254#206#254#206#236#239#255#255#254#206#238#255#236#206#254 +#206#236#239#255#255#254#204#204#239#254#206#255#236#206#255#255#255#255#238 +#238#255#255#239#255#254#239#255#255#255#255#238#239#255#239#254#255#239#254 +#255#255#255#254#204#206#254#206#236#238#206#236#239#255#255#255#238#236#238 +#206#236#238#206#236#239#255#255#255#254#236#238#206#236#238#206#236#239#255 +#255#255#236#206#254#204#204#238#204#204#239#255#255#254#206#239#254#206#236 +#238#206#236#239#255#255#254#206#238#254#206#236#238#206#236#239#255#255#255 +#236#204#238#206#236#239#236#206#255#255#255#255#254#238#255#239#254#255#254 +#239#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('TDCP_TIGER','BMP',[ 'BM'#150#1#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#24#0#0#0#24#0#0#0#1#0#4#0#0#0#0#0' ' +#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0#128#0#0#0#128#128 +#0#128#0#0#0#128#0#128#0#128#128#0#0#128#128#128#0#192#192#192#0#0#0#255#0#0 +#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255#255#255#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#254#255#238#239#238#239#238#239#238#239#255#255#236#238#204#206#204#206#204 +#206#206#206#255#255#236#239#236#238#206#206#206#238#206#206#255#255#236#239 +#236#238#206#206#206#238#206#206#255#255#236#239#236#238#204#238#204#206#204 +#239#255#255#236#239#236#238#206#238#206#238#206#206#255#255#236#239#236#238 +#206#206#206#238#206#206#255#254#204#206#204#206#204#206#204#206#204#239#255 +#255#238#239#238#239#238#239#238#239#238#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); doublecmd-0.7.1/components/dcpcrypt/dcpbase64.pas0000644000175000001440000001263012014201074021003 0ustar alexxusers{******************************************************************************} {* DCPcrypt v2.0 written by David Barton (crypto@cityinthesky.co.uk) **********} {******************************************************************************} {* A Base64 encoding/decoding unit ********************************************} {******************************************************************************} {* Copyright (c) 1999-2002 David Barton *} {* Permission is hereby granted, free of charge, to any person obtaining a *} {* copy of this software and associated documentation files (the "Software"), *} {* to deal in the Software without restriction, including without limitation *} {* the rights to use, copy, modify, merge, publish, distribute, sublicense, *} {* and/or sell copies of the Software, and to permit persons to whom the *} {* Software is furnished to do so, subject to the following conditions: *} {* *} {* The above copyright notice and this permission notice shall be included in *} {* all copies or substantial portions of the Software. *} {* *} {* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *} {* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *} {* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *} {* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *} {* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING *} {* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER *} {* DEALINGS IN THE SOFTWARE. *} {******************************************************************************} unit DCPbase64; interface uses Sysutils; function Base64EncodeStr(const Value: string): string; { Encode a string into Base64 format } function Base64DecodeStr(const Value: string): string; { Decode a Base64 format string } function Base64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint; { Encode a lump of raw data (output is (4/3) times bigger than input) } function Base64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint; { Decode a lump of raw data } {******************************************************************************} {******************************************************************************} implementation {$Q-}{$R-} const B64: array[0..63] of byte= (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108, 109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53, 54,55,56,57,43,47); function Base64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint; var i, iptr, optr: integer; Input, Output: PByteArray; begin Input:= PByteArray(pInput); Output:= PByteArray(pOutput); iptr:= 0; optr:= 0; for i:= 1 to (Size div 3) do begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)]; Output^[optr+2]:= B64[((Input^[iptr+1] and 15) shl 2) + (Input^[iptr+2] shr 6)]; Output^[optr+3]:= B64[Input^[iptr+2] and 63]; Inc(optr,4); Inc(iptr,3); end; case (Size mod 3) of 1: begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[(Input^[iptr] and 3) shl 4]; Output^[optr+2]:= byte('='); Output^[optr+3]:= byte('='); end; 2: begin Output^[optr+0]:= B64[Input^[iptr] shr 2]; Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)]; Output^[optr+2]:= B64[(Input^[iptr+1] and 15) shl 2]; Output^[optr+3]:= byte('='); end; end; Result:= ((Size+2) div 3) * 4; end; function Base64EncodeStr(const Value: string): string; begin SetLength(Result,((Length(Value)+2) div 3) * 4); Base64Encode(@Value[1],@Result[1],Length(Value)); end; function Base64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint; var i, j, iptr, optr: integer; Temp: array[0..3] of byte; Input, Output: PByteArray; begin Input:= PByteArray(pInput); Output:= PByteArray(pOutput); iptr:= 0; optr:= 0; Result:= 0; for i:= 1 to (Size div 4) do begin for j:= 0 to 3 do begin case Input^[iptr] of 65..90 : Temp[j]:= Input^[iptr] - Ord('A'); 97..122: Temp[j]:= Input^[iptr] - Ord('a') + 26; 48..57 : Temp[j]:= Input^[iptr] - Ord('0') + 52; 43 : Temp[j]:= 62; 47 : Temp[j]:= 63; 61 : Temp[j]:= $FF; end; Inc(iptr); end; Output^[optr]:= (Temp[0] shl 2) or (Temp[1] shr 4); Result:= optr+1; if (Temp[2]<> $FF) and (Temp[3]= $FF) then begin Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2); Result:= optr+2; Inc(optr) end else if (Temp[2]<> $FF) then begin Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2); Output^[optr+2]:= (Temp[2] shl 6) or Temp[3]; Result:= optr+3; Inc(optr,2); end; Inc(optr); end; end; function Base64DecodeStr(const Value: string): string; begin SetLength(Result,(Length(Value) div 4) * 3); SetLength(Result,Base64Decode(@Value[1],@Result[1],Length(Value))); end; end. doublecmd-0.7.1/components/multithreadprocs/0000755000175000001440000000000012675717723020314 5ustar alexxusersdoublecmd-0.7.1/components/multithreadprocs/mtputils.pas0000644000175000001440000001411612573027524022673 0ustar alexxusers{ Utilities using light weight threads. This file is part of the Free Pascal run time library. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} { Abstract: Utility functions using mtprocs. For example a parallel sort. } unit MTPUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, MTProcs; type TSortPartEvent = procedure(aList: PPointer; aCount: PtrInt); { TParallelSortPointerList } TParallelSortPointerList = class protected fBlockSize: PtrInt; fBlockCntPowOf2Offset: PtrInt; FMergeBuffer: PPointer; procedure MTPSort(Index: PtrInt; {%H-}Data: Pointer; Item: TMultiThreadProcItem); public List: PPointer; Count: PtrInt; Compare: TListSortCompare; BlockCnt: PtrInt; OnSortPart: TSortPartEvent; constructor Create(aList: PPointer; aCount: PtrInt; const aCompare: TListSortCompare; MaxThreadCount: integer = 0); procedure Sort; end; { Sort a list in parallel using merge sort. You must provide a compare function. You can provide your own sort function for the blocks which are sorted in a single thread, for example a normal quicksort. } procedure ParallelSortFPList(List: TFPList; const Compare: TListSortCompare; MaxThreadCount: integer = 0; const OnSortPart: TSortPartEvent = nil); implementation procedure ParallelSortFPList(List: TFPList; const Compare: TListSortCompare; MaxThreadCount: integer; const OnSortPart: TSortPartEvent); var Sorter: TParallelSortPointerList; begin if List.Count<=1 then exit; Sorter:=TParallelSortPointerList.Create(@List.List[0],List.Count,Compare, MaxThreadCount); try Sorter.OnSortPart:=OnSortPart; Sorter.Sort; finally Sorter.Free; end; end; { TParallelSortPointerList } procedure TParallelSortPointerList.MTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); procedure MergeSort(L, M, R: PtrInt; Recursive: boolean); var Src1: PtrInt; Src2: PtrInt; Dest1: PtrInt; begin if R-L<=1 then begin // sort lists of 1 and 2 items directly if L0 then begin FMergeBuffer[L]:=List[L]; List[L]:=List[R]; List[R]:=FMergeBuffer[L]; end; end; exit; end; // sort recursively if Recursive then begin MergeSort(L,(L+M) div 2,M-1,true); MergeSort(M,(M+R+1) div 2,R,true); end; // merge both blocks Src1:=L; Src2:=M; Dest1:=L; repeat if (Src1R) or (Compare(List[Src1],List[Src2])<=0)) then begin FMergeBuffer[Dest1]:=List[Src1]; inc(Dest1); inc(Src1); end else if (Src2<=R) then begin FMergeBuffer[Dest1]:=List[Src2]; inc(Dest1); inc(Src2); end else break; until false; // write the mergebuffer back Src1:=L; Dest1:=l; while Src1<=R do begin List[Dest1]:=FMergeBuffer[Src1]; inc(Src1); inc(Dest1); end; end; var L, M, R: PtrInt; i: integer; NormIndex: Integer; Range: integer; MergeIndex: Integer; begin L:=fBlockSize*Index; R:=L+fBlockSize-1; if R>=Count then R:=Count-1; // last block //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' sort block: ',L,' ',(L+R+1) div 2,' ',R); if Assigned(OnSortPart) then OnSortPart(@List[L],R-L+1) else MergeSort(L,(L+R+1) div 2,R,true); // merge // 0 1 2 3 4 5 6 7 // \/ \/ \/ \/ // \/ \/ // \/ // For example: BlockCnt = 5 => Index in 0..4 // fBlockCntPowOf2Offset = 3 (=8-5) // NormIndex = Index + 3 => NormIndex in 3..7 NormIndex:=Index+fBlockCntPowOf2Offset; i:=0; repeat Range:=1 shl i; if NormIndex and Range=0 then break; // merge left and right block(s) MergeIndex:=NormIndex-Range-fBlockCntPowOf2Offset; if (MergeIndex+Range-1>=0) then begin // wait until left blocks have finished //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' wait for block ',MergeIndex); if (MergeIndex>=0) and (not Item.WaitForIndex(MergeIndex)) then exit; // compute left and right block bounds M:=L; L:=(MergeIndex-Range+1)*fBlockSize; if L<0 then L:=0; //WriteLn('TParallelSortPointerList.LWTSort Index=',Index,' merge blocks ',L,' ',M,' ',R); MergeSort(L,M,R,false); end; inc(i); until false; //WriteLn('TParallelSortPointerList.LWTSort END Index='+IntToStr(Index)); end; constructor TParallelSortPointerList.Create(aList: PPointer; aCount: PtrInt; const aCompare: TListSortCompare; MaxThreadCount: integer); begin List:=aList; Count:=aCount; Compare:=aCompare; BlockCnt:=Count div 100; // at least 100 items per thread if BlockCnt>ProcThreadPool.MaxThreadCount then BlockCnt:=ProcThreadPool.MaxThreadCount; if (MaxThreadCount>0) and (BlockCnt>MaxThreadCount) then BlockCnt:=MaxThreadCount; if BlockCnt<1 then BlockCnt:=1; end; procedure TParallelSortPointerList.Sort; begin if (Count<=1) then exit; fBlockSize:=(Count+BlockCnt-1) div BlockCnt; fBlockCntPowOf2Offset:=1; while fBlockCntPowOf2Offset close asap ); TProcThreadGroup = class private FEndIndex: PtrInt; FException: Exception; FFirstRunningIndex: PtrInt; FFirstThread: TProcThread; FLastRunningIndex: PtrInt; FMaxThreads: PtrInt; FNext, FPrev: TProcThreadGroup; FPool: TProcThreadPool; FStarterItem: TMultiThreadProcItem; FStartIndex: PtrInt; FState: TMTPGroupState; FTaskData: Pointer; FTaskFrame: Pointer; FTaskMethod: TMTMethod; FTaskProcedure: TMTProcedure; FThreadCount: PtrInt; procedure AddToList(var First: TProcThreadGroup; ListType: TMTPGroupState); inline; procedure RemoveFromList(var First: TProcThreadGroup); inline; function NeedMoreThreads: boolean; inline; procedure IncreaseLastRunningIndex(Item: TMultiThreadProcItem); procedure AddThread(AThread: TProcThread); procedure RemoveThread(AThread: TProcThread); inline; procedure Run(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); inline; procedure IndexComplete(Index: PtrInt); procedure WakeThreadsWaitingForIndex; function HasFinishedIndex(aStartIndex, aEndIndex: PtrInt): boolean; procedure EnterExceptionState(E: Exception); public constructor Create; destructor Destroy; override; property Pool: TProcThreadPool read FPool; property StartIndex: PtrInt read FStartIndex; property EndIndex: PtrInt read FEndIndex; property FirstRunningIndex: PtrInt read FFirstRunningIndex; // first started property LastRunningIndex: PtrInt read FLastRunningIndex; // last started property TaskData: Pointer read FTaskData; property TaskMethod: TMTMethod read FTaskMethod; property TaskProcedure: TMTProcedure read FTaskProcedure; property TaskFrame: Pointer read FTaskFrame; property MaxThreads: PtrInt read FMaxThreads; property StarterItem: TMultiThreadProcItem read FStarterItem; end; { TLightWeightThreadPool Group 0 are the inactive threads } { TProcThreadPool } TProcThreadPool = class private FMaxThreadCount: PtrInt; FThreadCount: PtrInt; FFirstInactiveThread: TProcThread; FFirstActiveThread: TProcThread; FFirstTerminatedThread: TProcThread; FFirstGroupNeedThreads: TProcThreadGroup; FFirstGroupFinishing: TProcThreadGroup; FCritSection: TRTLCriticalSection; FDestroying: boolean; procedure SetMaxThreadCount(const AValue: PtrInt); procedure CleanTerminatedThreads; procedure DoParallelIntern(const AMethod: TMTMethod; const AProc: TMTProcedure; const AFrame: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); public // for debugging only: the critical section is public: procedure EnterPoolCriticalSection; inline; procedure LeavePoolCriticalSection; inline; public constructor Create; destructor Destroy; override; procedure DoParallel(const AMethod: TMTMethod; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); inline; procedure DoParallel(const AProc: TMTProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); inline; // experimental procedure DoParallelLocalProc(const LocalProc: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer = nil; MaxThreads: PtrInt = 0); // do not make this inline! // utility functions for loops: procedure CalcBlockSize(LoopLength: PtrInt; out BlockCount, BlockSize: PtrInt; MinBlockSize: PtrInt = 0); inline; public property MaxThreadCount: PtrInt read FMaxThreadCount write SetMaxThreadCount; property ThreadCount: PtrInt read FThreadCount; end; var ProcThreadPool: TProcThreadPool = nil; threadvar CurrentThread: TThread; // TProcThread sets this, you can set this for your own TThreads descendants implementation { TMultiThreadProcItem } destructor TMultiThreadProcItem.Destroy; begin if fWaitForPool<>nil then begin RTLeventdestroy(fWaitForPool); fWaitForPool:=nil; end; inherited Destroy; end; function TMultiThreadProcItem.WaitForIndexRange( StartIndex, EndIndex: PtrInt): boolean; var aPool: TProcThreadPool; begin //WriteLn('TLightWeightThreadItem.WaitForIndexRange START Index='+IntToStr(Index)+' StartIndex='+IntToStr(StartIndex)+' EndIndex='+IntToStr(EndIndex)); if (EndIndex>=Index) then exit(false); if EndIndexnil then FNext[ListType].FPrev[ListType]:=Self; First:=Self; end; procedure TProcThread.RemoveFromList(var First: TProcThread; ListType: TMTPThreadList); begin if First=Self then First:=FNext[ListType]; if FNext[ListType]<>nil then FNext[ListType].FPrev[ListType]:=FPrev[ListType]; if FPrev[ListType]<>nil then FPrev[ListType].FNext[ListType]:=FNext[ListType]; FNext[ListType]:=nil; FPrev[ListType]:=nil; end; procedure TProcThread.Terminating(aPool: TProcThreadPool; E: Exception); begin aPool.EnterPoolCriticalSection; try // remove from group if Item.FGroup<>nil then begin // an exception occured Item.FGroup.EnterExceptionState(E); Item.FGroup.RemoveThread(Self); Item.FGroup:=nil; end; // move to pool's terminated threads case Item.FState of mtptsActive: RemoveFromList(aPool.FFirstActiveThread,mtptlPool); mtptsInactive: RemoveFromList(aPool.FFirstInactiveThread,mtptlPool); end; AddToList(aPool.FFirstTerminatedThread,mtptlPool); Item.FState:=mtptsTerminated; finally aPool.LeavePoolCriticalSection; end; end; constructor TProcThread.Create; begin inherited Create(true); fItem:=TMultiThreadProcItem.Create; fItem.fWaitForPool:=RTLEventCreate; fItem.FThread:=Self; end; destructor TProcThread.Destroy; begin FreeAndNil(FItem); inherited Destroy; end; procedure TProcThread.Execute; var aPool: TProcThreadPool; Group: TProcThreadGroup; ok: Boolean; E: Exception; begin MTProcs.CurrentThread:=Self; aPool:=Item.Group.Pool; ok:=false; try repeat // work Group:=Item.Group; Group.Run(Item.Index,Group.TaskData,Item); aPool.EnterPoolCriticalSection; try Group.IndexComplete(Item.Index); // find next work if Group.LastRunningIndexnil then begin // add to new group aPool.FFirstGroupNeedThreads.AddThread(Self); Group:=Item.Group; end else begin // mark inactive RemoveFromList(aPool.FFirstActiveThread,mtptlPool); AddToList(aPool.FFirstInactiveThread,mtptlPool); Item.FState:=mtptsInactive; RTLeventResetEvent(Item.fWaitForPool); end; end; finally aPool.LeavePoolCriticalSection; end; // wait for new work if Item.FState=mtptsInactive then RTLeventWaitFor(Item.fWaitForPool); until Item.Group=nil; ok:=true; except // stop the exception and store it E:=Exception(AcquireExceptionObject); Terminating(aPool,E); end; if ok then Terminating(aPool,nil); end; { TProcThreadGroup } procedure TProcThreadGroup.AddToList(var First: TProcThreadGroup; ListType: TMTPGroupState); begin FNext:=First; if FNext<>nil then FNext.FPrev:=Self; First:=Self; FState:=ListType; end; procedure TProcThreadGroup.RemoveFromList( var First: TProcThreadGroup); begin if First=Self then First:=FNext; if FNext<>nil then FNext.FPrev:=FPrev; if FPrev<>nil then FPrev.FNext:=FNext; FNext:=nil; FPrev:=nil; FState:=mtpgsNone; end; function TProcThreadGroup.NeedMoreThreads: boolean; begin Result:=(FLastRunningIndexmtpgsException); end; procedure TProcThreadGroup.IncreaseLastRunningIndex(Item: TMultiThreadProcItem); begin inc(FLastRunningIndex); Item.FIndex:=FLastRunningIndex; if NeedMoreThreads then exit; if FState=mtpgsNeedThreads then begin RemoveFromList(Pool.FFirstGroupNeedThreads); AddToList(Pool.FFirstGroupFinishing,mtpgsFinishing); end; end; procedure TProcThreadGroup.AddThread(AThread: TProcThread); begin AThread.Item.FGroup:=Self; AThread.AddToList(FFirstThread,mtptlGroup); inc(FThreadCount); IncreaseLastRunningIndex(AThread.Item); end; procedure TProcThreadGroup.RemoveThread(AThread: TProcThread); begin AThread.RemoveFromList(FFirstThread,mtptlGroup); dec(FThreadCount); end; procedure TProcThreadGroup.Run(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); inline; begin if Assigned(FTaskFrame) then begin CallLocalProc(FTaskProcedure,FTaskFrame,Index,Data,Item) end else begin if Assigned(FTaskProcedure) then FTaskProcedure(Index,Data,Item) else FTaskMethod(Index,Data,Item) end; end; procedure TProcThreadGroup.IndexComplete(Index: PtrInt); var AThread: TProcThread; NewFirstRunningThread: PtrInt; begin // update FirstRunningIndex NewFirstRunningThread:=FStarterItem.Index; AThread:=FFirstThread; while AThread<>nil do begin if (NewFirstRunningThread>aThread.Item.Index) and (aThread.Item.Index<>Index) then NewFirstRunningThread:=aThread.Item.Index; aThread:=aThread.FNext[mtptlGroup]; end; FFirstRunningIndex:=NewFirstRunningThread; // wake up threads (Note: do this even if FFirstRunningIndex has not changed) WakeThreadsWaitingForIndex; end; procedure TProcThreadGroup.WakeThreadsWaitingForIndex; var aThread: TProcThread; begin if FState<>mtpgsException then begin // wake up waiting threads aThread:=FFirstThread; while aThread<>nil do begin if (aThread.Item.FState=mtptsWaitingForIndex) and HasFinishedIndex(aThread.Item.WaitingForIndexStart, aThread.Item.WaitingForIndexEnd) then begin // wake up the thread aThread.Item.FState:=mtptsActive; RTLeventSetEvent(aThread.Item.fWaitForPool); end; aThread:=aThread.FNext[mtptlGroup]; end; if (FStarterItem.FState=mtptsWaitingForIndex) and HasFinishedIndex(FStarterItem.WaitingForIndexStart,FStarterItem.WaitingForIndexEnd) then begin // wake up the starter thread of this group FStarterItem.FState:=mtptsActive; RTLeventSetEvent(FStarterItem.fWaitForPool); end; end else begin // end group: wake up waiting threads aThread:=FFirstThread; while aThread<>nil do begin if (aThread.Item.FState=mtptsWaitingForIndex) then begin // end group: wake up the thread aThread.Item.FState:=mtptsWaitingFailed; RTLeventSetEvent(aThread.Item.fWaitForPool); end; aThread:=aThread.FNext[mtptlGroup]; end; if (FStarterItem.FState=mtptsWaitingForIndex) then begin // end group: wake up the starter thread of this group FStarterItem.FState:=mtptsWaitingFailed; RTLeventSetEvent(FStarterItem.fWaitForPool); end; end; end; function TProcThreadGroup.HasFinishedIndex( aStartIndex, aEndIndex: PtrInt): boolean; var AThread: TProcThread; begin // test the finished range if FFirstRunningIndex>aEndIndex then exit(true); // test the unfinished range if FLastRunningIndexnil do begin if (AThread.Item.Index>=aStartIndex) and (AThread.Item.Index<=aEndIndex) then exit(false); AThread:=AThread.FNext[mtptlGroup]; end; if (FStarterItem.Index>=aStartIndex) and (FStarterItem.Index<=aEndIndex) then exit(false); Result:=true; end; procedure TProcThreadGroup.EnterExceptionState(E: Exception); begin if FState=mtpgsException then exit; case FState of mtpgsFinishing: RemoveFromList(Pool.FFirstGroupFinishing); mtpgsNeedThreads: RemoveFromList(Pool.FFirstGroupNeedThreads); end; FState:=mtpgsException; FException:=E; WakeThreadsWaitingForIndex; end; constructor TProcThreadGroup.Create; begin FStarterItem:=TMultiThreadProcItem.Create; FStarterItem.FGroup:=Self; end; destructor TProcThreadGroup.Destroy; begin FreeAndNil(FStarterItem); inherited Destroy; end; { TProcThreadPool } procedure TProcThreadPool.SetMaxThreadCount(const AValue: PtrInt); begin if FMaxThreadCount=AValue then exit; if AValue<1 then raise Exception.Create('TLightWeightThreadPool.SetMaxThreadCount'); FMaxThreadCount:=AValue; end; procedure TProcThreadPool.CleanTerminatedThreads; var AThread: TProcThread; begin while FFirstTerminatedThread<>nil do begin AThread:=FFirstTerminatedThread; AThread.RemoveFromList(FFirstTerminatedThread,mtptlPool); AThread.Free; end; end; constructor TProcThreadPool.Create; begin FMaxThreadCount:=GetSystemThreadCount; if FMaxThreadCount<1 then FMaxThreadCount:=1; InitCriticalSection(FCritSection); end; destructor TProcThreadPool.Destroy; procedure WakeWaitingStarterItems(Group: TProcThreadGroup); begin while Group<>nil do begin if Group.StarterItem.FState=mtptsWaitingForIndex then begin Group.StarterItem.FState:=mtptsWaitingFailed; RTLeventSetEvent(Group.StarterItem.fWaitForPool); end; Group:=Group.FNext; end; end; var AThread: TProcThread; begin FDestroying:=true; // wake up all waiting threads EnterPoolCriticalSection; try AThread:=FFirstActiveThread; while AThread<>nil do begin if aThread.Item.FState=mtptsWaitingForIndex then begin aThread.Item.FState:=mtptsWaitingFailed; RTLeventSetEvent(AThread.Item.fWaitForPool); end; AThread:=AThread.FNext[mtptlPool]; end; WakeWaitingStarterItems(FFirstGroupNeedThreads); WakeWaitingStarterItems(FFirstGroupFinishing); finally LeavePoolCriticalSection; end; // wait for all active threads to become inactive while FFirstActiveThread<>nil do Sleep(10); // wake up all inactive threads (without new work they will terminate) EnterPoolCriticalSection; try AThread:=FFirstInactiveThread; while AThread<>nil do begin RTLeventSetEvent(AThread.Item.fWaitForPool); AThread:=AThread.FNext[mtptlPool]; end; finally LeavePoolCriticalSection; end; // wait for all threads to terminate while FFirstInactiveThread<>nil do Sleep(10); // free threads CleanTerminatedThreads; DoneCriticalsection(FCritSection); inherited Destroy; end; procedure TProcThreadPool.EnterPoolCriticalSection; begin EnterCriticalsection(FCritSection); end; procedure TProcThreadPool.LeavePoolCriticalSection; begin LeaveCriticalsection(FCritSection); end; procedure TProcThreadPool.DoParallel(const AMethod: TMTMethod; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); begin if not Assigned(AMethod) then exit; DoParallelIntern(AMethod,nil,nil,StartIndex,EndIndex,Data,MaxThreads); end; procedure TProcThreadPool.DoParallel(const AProc: TMTProcedure; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); begin if not Assigned(AProc) then exit; DoParallelIntern(nil,AProc,nil,StartIndex,EndIndex,Data,MaxThreads); end; procedure TProcThreadPool.DoParallelLocalProc(const LocalProc: Pointer; StartIndex, EndIndex: PtrInt; Data: Pointer; MaxThreads: PtrInt); var Frame: Pointer; begin if not Assigned(LocalProc) then exit; Frame:=get_caller_frame(get_frame); DoParallelIntern(nil,TMTProcedure(LocalProc),Frame,StartIndex,EndIndex, Data,MaxThreads); end; procedure TProcThreadPool.CalcBlockSize(LoopLength: PtrInt; out BlockCount, BlockSize: PtrInt; MinBlockSize: PtrInt); begin if LoopLength<=0 then begin BlockCount:=0; BlockSize:=1; exit; end; // split work into equally sized blocks BlockCount:=ProcThreadPool.MaxThreadCount; BlockSize:=(LoopLength div BlockCount); if (BlockSizeEndIndex) then exit; // nothing to do if FDestroying then raise Exception.Create('Pool destroyed'); if (MaxThreads>MaxThreadCount) or (MaxThreads<=0) then MaxThreads:=MaxThreadCount; if (StartIndex=EndIndex) or (MaxThreads<=1) then begin // single threaded Item:=TMultiThreadProcItem.Create; try for Index:=StartIndex to EndIndex do begin Item.FIndex:=Index; if Assigned(AFrame) then begin CallLocalProc(AProc,AFrame,Index,Data,Item) end else begin if Assigned(AProc) then AProc(Index,Data,Item) else AMethod(Index,Data,Item) end; end; finally Item.Free; end; exit; end; // create a new group Group:=TProcThreadGroup.Create; Group.FPool:=Self; Group.FTaskData:=Data; Group.FTaskMethod:=AMethod; Group.FTaskProcedure:=AProc; Group.FTaskFrame:=AFrame; Group.FStartIndex:=StartIndex; Group.FEndIndex:=EndIndex; Group.FFirstRunningIndex:=StartIndex; Group.FLastRunningIndex:=StartIndex; Group.FMaxThreads:=MaxThreads; Group.FThreadCount:=1; Group.FStarterItem.FState:=mtptsActive; Group.FStarterItem.FIndex:=StartIndex; HelperThreadException:=nil; try // start threads EnterPoolCriticalSection; try Group.AddToList(FFirstGroupNeedThreads,mtpgsNeedThreads); while Group.NeedMoreThreads do begin AThread:=FFirstInactiveThread; NewThread:=false; if AThread<>nil then begin AThread.RemoveFromList(FFirstInactiveThread,mtptlPool); end else if FThreadCountmtpgsException) then begin inc(Group.FLastRunningIndex); Index:=Group.FLastRunningIndex; end else begin Index:=StartIndex; end; finally LeavePoolCriticalSection; end; until Index=StartIndex; finally // wait for Group to finish if Group.FFirstThread<>nil then begin EnterPoolCriticalSection; try Group.FStarterItem.FState:=mtptsInactive; Group.FStarterItem.fIndex:=EndIndex;// needed for Group.HasFinishedIndex // wake threads waiting for starter thread to finish if Group.FStarterItem.FState<>mtptsInactive then Group.EnterExceptionState(nil) else Group.WakeThreadsWaitingForIndex; finally LeavePoolCriticalSection; end; // waiting with exponential spin lock Index:=0; while Group.FFirstThread<>nil do begin sleep(Index); Index:=Index*2+1; if Index>30 then Index:=30; end; end; // remove group from pool EnterPoolCriticalSection; try case Group.FState of mtpgsNeedThreads: Group.RemoveFromList(FFirstGroupNeedThreads); mtpgsFinishing: Group.RemoveFromList(FFirstGroupFinishing); end; finally LeavePoolCriticalSection; end; HelperThreadException:=Group.FException; Group.Free; // free terminated threads (terminated, because of exceptions) CleanTerminatedThreads; end; // if the exception occured in a helper thread raise it now if HelperThreadException<>nil then raise HelperThreadException; end; initialization ProcThreadPool:=TProcThreadPool.Create; CurrentThread:=nil; finalization ProcThreadPool.Free; ProcThreadPool:=nil; end. doublecmd-0.7.1/components/multithreadprocs/Readme.txt0000644000175000001440000000011012573027524022230 0ustar alexxusersOfficial page: http://wiki.lazarus.freepascal.org/Parallel_procedures doublecmd-0.7.1/components/multithreadprocs/mtpcpu.pas0000644000175000001440000000515212573027524022322 0ustar alexxusers{ System depending code for light weight threads. This file is part of the Free Pascal run time library. Copyright (C) 2008 Mattias Gaertner mattias@freepascal.org See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. **********************************************************************} unit MTPCPU; {$mode objfpc}{$H+} {$inline on} interface {$IF defined(windows)} uses Windows; {$ELSEIF defined(freebsd) or defined(darwin)} uses ctypes, sysctl; {$ELSEIF defined(linux)} {$linklib c} uses ctypes; {$ENDIF} function GetSystemThreadCount: integer; procedure CallLocalProc(AProc, Frame: Pointer; Param1: PtrInt; Param2, Param3: Pointer); inline; implementation {$IFDEF Linux} const _SC_NPROCESSORS_ONLN = 83; function sysconf(i: cint): clong; cdecl; external name 'sysconf'; {$ENDIF} function GetSystemThreadCount: integer; // returns a good default for the number of threads on this system {$IF defined(windows)} //returns total number of processors available to system including logical hyperthreaded processors var i: Integer; ProcessAffinityMask, SystemAffinityMask: DWORD_PTR; Mask: DWORD; SystemInfo: SYSTEM_INFO; begin if GetProcessAffinityMask(GetCurrentProcess, ProcessAffinityMask, SystemAffinityMask) then begin Result := 0; for i := 0 to 31 do begin Mask := DWord(1) shl i; if (ProcessAffinityMask and Mask)<>0 then inc(Result); end; end else begin //can't get the affinity mask so we just report the total number of processors GetSystemInfo(SystemInfo); Result := SystemInfo.dwNumberOfProcessors; end; end; {$ELSEIF defined(UNTESTEDsolaris)} begin t = sysconf(_SC_NPROC_ONLN); end; {$ELSEIF defined(freebsd) or defined(darwin)} var mib: array[0..1] of cint; len: cint; t: cint; begin mib[0] := CTL_HW; mib[1] := HW_NCPU; len := sizeof(t); fpsysctl(pchar(@mib), 2, @t, @len, Nil, 0); Result:=t; end; {$ELSEIF defined(linux)} begin Result:=sysconf(_SC_NPROCESSORS_ONLN); end; {$ELSE} begin Result:=1; end; {$ENDIF} procedure CallLocalProc(AProc, Frame: Pointer; Param1: PtrInt; Param2, Param3: Pointer); inline; type PointerLocal = procedure(_EBP: Pointer; Param1: PtrInt; Param2, Param3: Pointer); begin PointerLocal(AProc)(Frame, Param1, Param2, Param3); end; end. doublecmd-0.7.1/components/multithreadprocs/examples/0000755000175000001440000000000012675717723022132 5ustar alexxusersdoublecmd-0.7.1/components/multithreadprocs/examples/simplemtp1.lpi0000644000175000001440000000300612573027524024720 0ustar alexxusers </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="simplemtp1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="SimpleMTP1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/recursivemtp1.lpr������������������������������0000644�0001750�0000144�00000002265�12573027524�025455� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program RecursiveMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} MTProcs; type TArrayOfInteger = array of integer; var Items: TArrayOfInteger; type TFindMaximumParallelData = record Items: TArrayOfInteger; Left, Middle, Right: integer; LeftMaxIndex, RightMaxIndex: integer; end; PFindMaximumParallelData = ^TFindMaximumParallelData; procedure FindMaximumParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var Params: PFindMaximumParallelData absolute Data; LeftParams, RightParams: TFindMaximumParallelData; begin if Params^.Left+1000>Params^.Right then begin // compute the maximum of the few remaining items Params^.LeftMaxIndex:=Params^.Items[Params^.Left]; for i:=Params^.Left+1 to Params^.Right do if Params^.Items[i]>Params^.LeftMaxIndex then end else begin end; end; function FindMaximumIndex(Items: TArrayOfInteger): integer; begin end; begin SetLength(Items,10000000); for i:=0 to length(Items)-1 do Items[i]:=Random(1000); ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/parallelloop1.lpr������������������������������0000644�0001750�0000144�00000006360�12573027524�025413� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Example for a parallel loop with MTProcs. Copyright (C) 2009 Mattias Gaertner mattias@freepascal.org 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } program ParallelLoop1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} Classes, SysUtils, MTProcs; type TFindBestData = record List: TList; Value: Pointer; BlockCount: integer; Results: array of integer; end; PFindBestData = ^TFindBestData; procedure FindBestParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: integer; begin with PFindBestData(Data)^ do begin Results[Index]:=-1; i:=Index; while i<List.Count-1 do begin if List[i]=Value then // hier wuerde die teure Vergleichsoperation stehen Results[Index]:=i; inc(i,BlockCount); end; end; end; function FindBest(aList: TList; aValue: Pointer): integer; var Index: integer; Data: TFindBestData; begin with Data do begin List:=aList; Value:=aValue; BlockCount:=ProcThreadPool.MaxThreadCount; SetLength(Results,BlockCount); ProcThreadPool.DoParallel(@FindBestParallel,0,BlockCount-1,@Data); // Ergebnisse zusammenfassen Result:=-1; for Index:=0 to BlockCount-1 do if Results[Index]>=0 then Result:=Results[Index]; end; end; function FindBest1(List: TList; Value: Pointer): integer; var i: integer; begin Result:=-1; i:=0; while i<List.Count do begin if List[i]=Value then // hier wuerde die teure Vergleichsoperation stehen Result:=i; inc(i); end; end; var List: TList; i: Integer; begin List:=TList.Create; for i:=0 to 100000000 do List.Add(Pointer(i)); i:=FindBest(List,Pointer(9999)); //i:=FindBest1(List,Pointer(9999)); writeln('i=',i); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/recursivemtp1.lpi������������������������������0000644�0001750�0000144�00000002763�12573027524�025447� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="7"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> <Title Value="recursivemtp1"/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="recursivemtp1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="RecursiveMTP1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �������������doublecmd-0.7.1/components/multithreadprocs/examples/testmtp1.lpr�����������������������������������0000644�0001750�0000144�00000025102�12573027524�024420� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program TestMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} Math, SysUtils, Classes, MTProcs, MTPUtils, MultiThreadProcsLaz; type { TTestItem } TTestItem = class private FIndex: int64; public property Index: int64 read FIndex; constructor Create(NewIndex: int64); end; { TTests } TTests = class public procedure Work(Seconds: integer); // RTLeventSetEvent, RTLeventWaitFor procedure TestRTLevent_Set_WaitFor; // single thread test procedure TestSingleThread; procedure MTPLoop_TestSingleThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // two threads test: run once procedure TestTwoThreads1; procedure MTPLoop_TestTwoThreads1(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // 0 runs two seconds, // 1 runs a second then waits for 0 then runs a second // 2 runs a second then waits for 1 // 3 waits for 0 // 4 waits for 1 // 5 waits for 2 procedure TestMTPWaitForIndex; procedure MTPLoop_TestMTPWaitForIndex(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // two threads test: various run times procedure TestMTPTwoThreads2; procedure MTPLoop_TestTwoThreads2(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test exception in starter thread procedure TestMTPExceptionInStarterThread; procedure MTPLoop_TestExceptionInStarterThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test exception in helper thread procedure TestMTPExceptionInHelperThread; procedure MTPLoop_TestExceptionInHelperThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // test parallel sort procedure TestMTPSort; procedure MTPLoop_TestDoubleMTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); end; { TTestItem } constructor TTestItem.Create(NewIndex: int64); begin FIndex:=NewIndex; end; { TTests } procedure TTests.Work(Seconds: integer); var Start: TDateTime; begin Start:=Now; while (Now-Start)*86400<Seconds do if GetCurrentDir='' then ; end; procedure TTests.TestRTLevent_Set_WaitFor; var e: PRTLEvent; begin e:=RTLEventCreate; RTLeventSetEvent(e); RTLeventWaitFor(e); RTLeventdestroy(e); end; procedure TTests.TestSingleThread; begin ProcThreadPool.DoParallel(@MTPLoop_TestSingleThread,1,3,nil,1); end; procedure TTests.MTPLoop_TestSingleThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin writeln('TTests.MTPLoop_TestSingleThread Index=',Index); end; procedure TTests.TestTwoThreads1; begin WriteLn('TTests.TestTwoThreads1 START'); ProcThreadPool.DoParallel(@MTPLoop_TestTwoThreads1,1,2,nil,2); WriteLn('TTests.TestTwoThreads1 END'); end; procedure TTests.MTPLoop_TestTwoThreads1(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin for i:=1 to 3 do begin WriteLn('TTests.MTPLoop_TestTwoThreads1 Index=',Index,' ',i); Work(1); end; end; procedure TTests.TestMTPWaitForIndex; var IndexStates: PInteger; begin ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); WriteLn('TTests.TestMTPWaitForIndex START'); ProcThreadPool.DoParallel(@MTPLoop_TestMTPWaitForIndex,0,5,IndexStates); FreeMem(IndexStates); WriteLn('TTests.TestMTPWaitForIndex END'); end; procedure TTests.MTPLoop_TestMTPWaitForIndex(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); // 0 runs two seconds, // 1 runs a second then waits for 0 then runs a second // 2 runs a second then waits for 1 // 3 waits for 0 // 4 waits for 1 // 5 waits for 2 procedure WaitFor(OtherIndex: PtrInt); begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' waiting for '+IntToStr(OtherIndex)+' ...'); Item.WaitForIndex(OtherIndex); WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' waited for '+IntToStr(OtherIndex)+'. working ...'); if PInteger(Data)[OtherIndex]<>2 then begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' ERROR: waited for '+IntToStr(OtherIndex)+' failed: OtherState='+IntToStr(PInteger(Data)[OtherIndex])); end; end; begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' START'); if PInteger(Data)[Index]<>0 then begin WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); end; PInteger(Data)[Index]:=1; case Index of 0: Work(2); 1:begin Work(1); WaitFor(0); Work(1); end; 2:begin Work(1); WaitFor(1); end; 3:begin WaitFor(0); end; 4:begin WaitFor(1); end; 5:begin WaitFor(2); end; end; WriteLn('TTests.MTPLoop_TestMTPWaitForIndex Index='+IntToStr(Index)+' END'); PInteger(Data)[Index]:=2; end; procedure TTests.TestMTPTwoThreads2; begin WriteLn('TTests.TestMTPTwoThreads1 START'); ProcThreadPool.DoParallel(@MTPLoop_TestTwoThreads2,1,6,nil,2); WriteLn('TTests.TestMTPTwoThreads1 END'); end; procedure TTests.MTPLoop_TestTwoThreads2(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin for i:=1 to (Index mod 3)+1 do begin WriteLn('TTests.MTPLoop_TestTwoThreads1 Index=',Index,' i=',i,' ID=',PtrUint(GetThreadID)); Work(1); end; end; type TMyException = class(Exception); procedure TTests.TestMTPExceptionInStarterThread; var IndexStates: PInteger; begin WriteLn('TTests.TestMTPExceptionInStarterThread START'); ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); try ProcThreadPool.DoParallel(@MTPLoop_TestExceptionInStarterThread,1,3,IndexStates,2); except on E: Exception do begin WriteLn('TTests.TestMTPExceptionInHelperThread E.ClassName=',E.ClassName,' E.Message=',E.Message); end; end; FreeMem(IndexStates); WriteLn('TTests.TestMTPExceptionInStarterThread END'); end; procedure TTests.MTPLoop_TestExceptionInStarterThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin WriteLn('TTests.MTPLoop_TestExceptionInStarterThread START Index='+IntToStr(Index)); if PInteger(Data)[Index]<>0 then WriteLn('TTests.MTPLoop_TestExceptionInStarterThread Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); PInteger(Data)[Index]:=1; case Index of 1: begin // Main Thread Work(1); WriteLn('TTests.MTPLoop_TestExceptionInStarterThread raising exception in Index='+IntToStr(Index)+' ...'); raise Exception.Create('Exception in starter thread'); end; else Work(Index); end; PInteger(Data)[Index]:=2; WriteLn('TTests.MTPLoop_TestExceptionInStarterThread END Index='+IntToStr(Index)); end; procedure TTests.TestMTPExceptionInHelperThread; var IndexStates: PInteger; begin WriteLn('TTests.TestMTPExceptionInHelperThread START'); ProcThreadPool.MaxThreadCount:=8; IndexStates:=nil; GetMem(IndexStates,SizeOf(Integer)*10); FillByte(IndexStates^,SizeOf(Integer)*10,0); try ProcThreadPool.DoParallel(@MTPLoop_TestExceptionInHelperThread,1,3,IndexStates,2); except on E: Exception do begin WriteLn('TTests.TestMTPExceptionInHelperThread E.ClassName=',E.ClassName,' E.Message=',E.Message); end; end; FreeMem(IndexStates); WriteLn('TTests.TestMTPExceptionInHelperThread END'); end; procedure TTests.MTPLoop_TestExceptionInHelperThread(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); begin WriteLn('TTests.MTPLoop_TestExceptionInHelperThread START Index='+IntToStr(Index)); if PInteger(Data)[Index]<>0 then WriteLn('TTests.MTPLoop_TestExceptionInHelperThread Index='+IntToStr(Index)+' ERROR: IndexState='+IntToStr(PInteger(Data)[Index])); PInteger(Data)[Index]:=1; case Index of 2: begin // Helper Thread 2 Work(1); WriteLn('TTests.MTPLoop_TestExceptionInHelperThread raising exception in Index='+IntToStr(Index)+' ...'); raise TMyException.Create('Exception in helper thread'); end; else Work(Index+1); end; PInteger(Data)[Index]:=2; WriteLn('TTests.MTPLoop_TestExceptionInHelperThread END Index='+IntToStr(Index)); end; function CompareTestItems(Data1, Data2: Pointer): integer; begin if TTestItem(Data1).Index>TTestItem(Data2).Index then Result:=1 else if TTestItem(Data1).Index<TTestItem(Data2).Index then Result:=-1 else Result:=0; end; procedure TTests.TestMTPSort; var OuterLoop: Integer; InnerLoop: Integer; begin OuterLoop:=1; InnerLoop:=0; if Paramcount=1 then begin InnerLoop:=StrToInt(ParamStr(1)); end else if Paramcount=2 then begin OuterLoop:=StrToInt(ParamStr(1)); InnerLoop:=StrToInt(ParamStr(2)); end; writeln('TTests.TestMTPSort Running ',OuterLoop,'x',InnerLoop); ProcThreadPool.DoParallel(@MTPLoop_TestDoubleMTPSort,1,OuterLoop,@InnerLoop); end; procedure TTests.MTPLoop_TestDoubleMTPSort(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; List: TFPList; t: double; begin // create an unsorted list of values List:=TFPList.Create; for i:=1 to 10000000 do List.Add(TTestItem.Create(Random(99999999999))); //QuickSort(List,0,List.Count-1,@AnsiCompareText); t:=Now; ParallelSortFPList(List,@CompareTestItems,PInteger(Data)^); t:=Now-t; writeln('TTests.TestMTPSort ',t*86400); // check sleep(1); for i:=0 to List.Count-2 do if CompareTestItems(List[i],List[i+1])>0 then raise Exception.Create('not sorted'); for i:=0 to List.Count-1 do TObject(List[i]).Free; List.Free; end; var Tests: TTests; begin writeln('threads=',ProcThreadPool.MaxThreadCount); ProcThreadPool.MaxThreadCount:=8; Tests:=TTests.Create; //Tests.Test1; //Tests.Test2; //Tests.TestTwoThreads2; //Tests.TestRTLevent_Set_WaitFor; //Tests.TestMTPWaitForIndex; //Tests.TestMTPExceptionInStarterThread; Tests.TestMTPExceptionInHelperThread; //Tests.TestMTPSort; Tests.Free; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/simplemtp1.lpr���������������������������������0000644�0001750�0000144�00000000717�12573027524�024737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program SimpleMTP1; {$mode objfpc}{$H+} uses {$IFDEF UNIX} cthreads, cmem, {$ENDIF} MTProcs; // a simple parallel procedure procedure DoSomethingParallel(Index: PtrInt; Data: Pointer; Item: TMultiThreadProcItem); var i: Integer; begin writeln(Index); for i:=1 to Index*1000000 do ; // do some work end; begin ProcThreadPool.DoParallel(@DoSomethingParallel,1,5,nil); // address, startindex, endindex, optional data end. �������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/testmtp1.lpi�����������������������������������0000644�0001750�0000144�00000002553�12573027524�024414� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="/"/> <Version Value="6"/> <General> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="testmtp1.lpr"/> <IsPartOfProject Value="True"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/multithreadprocs/examples/parallelloop1.lpi������������������������������0000644�0001750�0000144�00000002763�12573027524�025405� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <Version Value="7"/> <General> <Flags> <LRSInOutputDirectory Value="False"/> </Flags> <SessionStorage Value="InProjectDir"/> <MainUnit Value="0"/> <TargetFileExt Value=""/> <Title Value="parallelloop1"/> </General> <VersionInfo> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="MultiThreadProcsLaz"/> <MinVersion Valid="True"/> <DefaultFilename Value="../multithreadprocslaz.lpk"/> </Item1> </RequiredPackages> <Units Count="1"> <Unit0> <Filename Value="parallelloop1.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="ParallelLoop1"/> </Unit0> </Units> </ProjectOptions> <CompilerOptions> <Version Value="8"/> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> </CONFIG> �������������doublecmd-0.7.1/components/multithreadprocs/multithreadprocslaz.lpk���������������������������������0000644�0001750�0000144�00000002766�12573027524�025125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="MultiThreadProcsLaz"/> <Author Value="Mattias Gaertner mattias@freepascal.org"/> <CompilerOptions> <Version Value="10"/> <SearchPaths> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Running procedures and methods parallel via a thread pool."/> <License Value="modified LGPL2"/> <Version Major="1" Minor="2" Release="1"/> <Files Count="3"> <Item1> <Filename Value="mtprocs.pas"/> <UnitName Value="MTProcs"/> </Item1> <Item2> <Filename Value="mtputils.pas"/> <UnitName Value="MTPUtils"/> </Item2> <Item3> <Filename Value="mtpcpu.pas"/> <UnitName Value="MTPCPU"/> </Item3> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="1"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> </RequiredPkgs> <UsageOptions> <CustomOptions Value="-dUseCThreads"/> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ����������doublecmd-0.7.1/components/doublecmd/���������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�016661� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcunix.pas�����������������������������������������������������0000644�0001750�0000144�00000003313�12624144710�020640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This unit contains Unix specific functions Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCUnix; {$mode objfpc}{$H+} interface uses InitC, BaseUnix; {en Change owner and group of a file (does not follow symbolic links) @param(path Full path to file) @param(owner User ID) @param(group Group ID) @returns(On success, zero is returned. On error, -1 is returned, and errno is set appropriately) } function fpLChown(path : String; owner : TUid; group : TGid): cInt; implementation uses DCConvertEncoding; function lchown(path : PChar; owner : TUid; group : TGid): cInt; cdecl; external clib name 'lchown'; function fpLChown(path: String; owner: TUid; group: TGid): cInt; begin Result := lchown(PAnsiChar(CeUtf8ToSys(path)), owner, group); if Result = -1 then fpseterrno(fpgetCerrno); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcprocessutf8.pas����������������������������������������������0000644�0001750�0000144�00000021036�12600310410�022126� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Based on process.inc from the Free Component Library (FCL) Copyright (c) 1999-2008 by the Free Pascal development team See the file COPYING.FPC, included in this distribution, for details about the copyright. 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. } unit DCProcessUtf8; {$mode objfpc}{$H+} interface uses Classes, SysUtils {$IF DEFINED(MSWINDOWS)} , Process, Windows, Pipes {$ELSEIF DEFINED(UNIX)} , UTF8Process {$ENDIF} ; type { TProcessUtf8 } {$IF DEFINED(UNIX)} TProcessUtf8 = UTF8Process.TProcessUTF8; {$ELSEIF DEFINED(MSWINDOWS)} TProcessUtf8 = class(TProcess) public procedure Execute; override; end; {$ENDIF} implementation {$IF DEFINED(MSWINDOWS)} {$WARN SYMBOL_DEPRECATED OFF} {$IF FPC_FULLVERSION < 30000} type TStartupInfoW = TStartupInfo; {$ENDIF} resourcestring SNoCommandLine = 'Cannot execute empty command-line'; SErrCannotExecute = 'Failed to execute %s : %d'; const PriorityConstants: array [TProcessPriority] of Cardinal = (HIGH_PRIORITY_CLASS, IDLE_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, REALTIME_PRIORITY_CLASS); function GetStartupFlags(P: TProcess): Cardinal; begin with P do begin Result := 0; if poUsePipes in Options then Result := Result or Startf_UseStdHandles; if suoUseShowWindow in StartupOptions then Result := Result or startf_USESHOWWINDOW; if suoUSESIZE in StartupOptions then Result := Result or startf_usesize; if suoUsePosition in StartupOptions then Result := Result or startf_USEPOSITION; if suoUSECOUNTCHARS in StartupOptions then Result := Result or startf_usecountchars; if suoUsefIllAttribute in StartupOptions then Result := Result or startf_USEFILLATTRIBUTE; end; end; function GetCreationFlags(P: TProcess): Cardinal; begin with P do begin Result := 0; if poNoConsole in Options then Result := Result or Detached_Process; if poNewConsole in Options then Result := Result or Create_new_console; if poNewProcessGroup in Options then Result := Result or CREATE_NEW_PROCESS_GROUP; if poRunSuspended in Options then Result := Result or Create_Suspended; if poDebugProcess in Options then Result := Result or DEBUG_PROCESS; if poDebugOnlyThisProcess in Options then Result := Result or DEBUG_ONLY_THIS_PROCESS; if poDefaultErrorMode in Options then Result := Result or CREATE_DEFAULT_ERROR_MODE; Result := Result or PriorityConstants[Priority]; end; end; function StringsToPWideChars(List: TStrings): Pointer; var I: Integer; EnvBlock: WideString; begin EnvBlock := ''; for I := 0 to List.Count - 1 do EnvBlock := EnvBlock + UTF8Decode(List[I]) + #0; EnvBlock := EnvBlock + #0; GetMem(Result, Length(EnvBlock) * SizeOf(Widechar)); CopyMemory(Result, @EnvBlock[1], Length(EnvBlock) * SizeOf(Widechar)); end; procedure InitProcessAttributes(P: TProcess; var PA: TSecurityAttributes); begin FillChar(PA, SizeOf(PA), 0); PA.nLength := SizeOf(PA); end; procedure InitThreadAttributes(P: TProcess; var TA: TSecurityAttributes); begin FillChar(TA, SizeOf(TA), 0); TA.nLength := SizeOf(TA); end; procedure InitStartupInfo(P: TProcess; var SI: TStartupInfoW); const SWC: array [TShowWindowOptions] of Cardinal = (0, SW_HIDE, SW_Maximize, SW_Minimize, SW_Restore, SW_Show, SW_ShowDefault, SW_ShowMaximized, SW_ShowMinimized, SW_showMinNOActive, SW_ShowNA, SW_ShowNoActivate, SW_ShowNormal); begin FillChar(SI, SizeOf(SI), 0); with SI do begin dwFlags := GetStartupFlags(P); if P.ShowWindow <> swoNone then dwFlags := dwFlags or Startf_UseShowWindow else dwFlags := dwFlags and not Startf_UseShowWindow; wShowWindow := SWC[P.ShowWindow]; if (poUsePipes in P.Options) then begin dwFlags := dwFlags or Startf_UseStdHandles; end; if P.FillAttribute <> 0 then begin dwFlags := dwFlags or Startf_UseFillAttribute; dwFillAttribute := P.FillAttribute; end; dwXCountChars := P.WindowColumns; dwYCountChars := P.WindowRows; dwYsize := P.WindowHeight; dwXsize := P.WindowWidth; dwy := P.WindowTop; dwX := P.WindowLeft; end; end; { The handles that are to be passed to the child process must be inheritable. On the other hand, only non-inheritable handles allow the sending of EOF when the write-end is closed. This function is used to duplicate the child process's ends of the handles into inheritable ones, leaving the parent-side handles non-inheritable. } function DuplicateHandleFP(var Handle: THandle): Boolean; var oldHandle: THandle; begin oldHandle := Handle; Result := DuplicateHandle(GetCurrentProcess(), oldHandle, GetCurrentProcess(), @Handle, 0, True, DUPLICATE_SAME_ACCESS); if Result then Result := CloseHandle(oldHandle); end; procedure CreatePipes(var HI, HO, HE: THandle; var SI: TStartupInfoW; CE: Boolean; APipeBufferSize: Cardinal); begin CreatePipeHandles(SI.hStdInput, HI, APipeBufferSize); DuplicateHandleFP(SI.hStdInput); CreatePipeHandles(HO, Si.hStdOutput, APipeBufferSize); DuplicateHandleFP(Si.hStdOutput); if CE then begin CreatePipeHandles(HE, SI.hStdError, APipeBufferSize); DuplicateHandleFP(SI.hStdError); end else begin SI.hStdError := SI.hStdOutput; HE := HO; end; end; function MaybeQuote(const S: String): String; begin if (Pos(' ', S) <> 0) then Result := '"' + S + '"' else Result := S; end; function MaybeQuoteIfNotQuoted(const S: String): String; begin if (Pos(' ', S) <> 0) and (pos('"', S) = 0) then Result := '"' + S + '"' else Result := S; end; { TProcessUtf8 } procedure TProcessUtf8.Execute; var I: Integer; PName, PDir, PCommandLine: PWideChar; FEnv: Pointer; FCreationFlags: Cardinal; FProcessAttributes: TSecurityAttributes; FThreadAttributes: TSecurityAttributes; FProcessInformation: TProcessInformation; FStartupInfo: TStartupInfoW; HI, HO, HE: THandle; Cmd: String; begin InheritHandles := True; PName := nil; PCommandLine := nil; PDir := nil; if (ApplicationName = '') and (CommandLine = '') and (Executable = '') then raise EProcess.Create(SNoCommandline); if (ApplicationName <> '') then begin PName := PWideChar(UTF8Decode(ApplicationName)); PCommandLine := PWideChar(UTF8Decode(CommandLine)); end else if (CommandLine <> '') then PCommandLine := PWideChar(UTF8Decode(CommandLine)) else if (Executable <> '') then begin Cmd := MaybeQuoteIfNotQuoted(Executable); for I := 0 to Parameters.Count - 1 do Cmd := Cmd + ' ' + MaybeQuoteIfNotQuoted(Parameters[I]); PCommandLine := PWideChar(UTF8Decode(Cmd)); end; if CurrentDirectory <> '' then PDir := PWideChar(UTF8Decode(CurrentDirectory)); if Environment.Count <> 0 then FEnv := StringsToPWideChars(Environment) else FEnv := nil; try FCreationFlags := GetCreationFlags(Self); InitProcessAttributes(Self, FProcessAttributes); InitThreadAttributes(Self, FThreadAttributes); InitStartupInfo(Self, FStartUpInfo); if poUsePipes in Options then CreatePipes(HI, HO, HE, FStartupInfo, not (poStdErrToOutPut in Options), PipeBufferSize); try if not CreateProcessW(PName, PCommandLine, @FProcessAttributes, @FThreadAttributes, InheritHandles, FCreationFlags, FEnv, PDir, FStartupInfo, FProcessInformation) then raise EProcess.CreateFmt(SErrCannotExecute, [CommandLine, GetLastError]); PHandle(@ProcessHandle)^ := FProcessInformation.hProcess; PHandle(@ThreadHandle)^ := FProcessInformation.hThread; PInteger(@ProcessID)^ := FProcessINformation.dwProcessID; finally if poUsePipes in Options then begin FileClose(FStartupInfo.hStdInput); FileClose(FStartupInfo.hStdOutput); if not (poStdErrToOutPut in Options) then FileClose(FStartupInfo.hStdError); CreateStreams(HI, HO, HE); end; end; FRunning := True; finally if FEnv <> nil then FreeMem(FEnv); end; if not (csDesigning in ComponentState) and // This would hang the IDE ! (poWaitOnExit in Options) and not (poRunSuspended in Options) then WaitOnExit; end; {$ENDIF} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcstrutils.pas�������������������������������������������������0000644�0001750�0000144�00000074735�12653160106�021565� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Useful functions dealing with strings. Copyright (C) 2006-2016 Alexander Koblov (alexx2000@mail.ru) Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 DCStrUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; type TPathType = (ptNone, ptRelative, ptAbsolute); {en Checks if StringToCheck contains any of the single characters in PossibleCharacters. Only ASCII can be searched. } function ContainsOneOf(StringToCheck: String; PossibleCharacters: String): Boolean; {en Convert known directory separators to the current directory separator. } function NormalizePathDelimiters(const Path: String): String; {en Get last directory name in path @returns(Last directory name in path) } function GetLastDir(Path : String) : String; {en Retrieves the root directory for a path. @param(sPath Absolute path to a directory or a file.) @returns(Root directory or an empty string if the path is not absolute.) } function GetRootDir(sPath : String) : String; {en Retrieves parent directory for a path (removes the last subdirectory in the path). @param(sPath Absolute or relative path to a directory or a file.) @returns(Parent directory or an empty string if the path does not have a parent directory.) } function GetParentDir(sPath : String) : String; {en Gets the deepest (longest) path that exist. } function GetDeepestExistingPath(const sPath : String) : String; function GetSplitFileName(var sFileName, sPath : String) : String; function MakeFileName(const sPath, sFileNameDef : String) : String; {en Split path into list of directories @param(DirName Path) @param(Dirs List of directories names) @returns(The function returns the number of directories found, or -1 if none were found.) } function GetDirs (DirName : String; var Dirs : TStringList) : Longint; {en Get absolute file name from relative file name @param(sPath Current path) @param(sRelativeFileName Relative file name) @returns(Absolute file name) } function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; {en Checks if a path to a directory or file is absolute or relative. @returns(ptNone if a path is just a directory or file name (MyDir) ptRelative if a path is relative (MyDir/MySubDir) ptAbsolute if a path is absolute) (/root/MyDir) } function GetPathType(const sPath : String): TPathType; {en Get file name without path and extension @param(FileName File name) @returns(File name without path and extension) } function ExtractOnlyFileName(const FileName: string): string; {en Get file extension without the '.' at the front. } function ExtractOnlyFileExt(const FileName: string): string; {en Remove file extension with the '.' from file name. } function RemoveFileExt(const FileName: String): String; function RemoveInvalidCharsFromFileName(const FileName: String): String; function ContainsWildcards(const Path: String): Boolean; {en Expands an absolute file path by removing all relative references. Processes '/../' and '/./'. Example: /home/user/files/../somedirectory/./file.txt = /home/user/somedirectory/file.txt @param(Path path to expand.) } function ExpandAbsolutePath(const Path: String): String; function HasPathInvalidCharacters(Path: String): Boolean; {en Checks if a file or directory belongs in the specified path. Only strings are compared, no file-system checks are done. @param(sBasePath Absolute path where the path to check should be in.) @param(sPathToCheck Absolute path to file or directory to check.) @param(AllowSubDirs If @true, allows the sPathToCheck to point to a file or directory in some subdirectory of sBasePath. If @false, only allows the sPathToCheck to point directly to a file or directory in sBasePath.) @param(AllowSame If @true, returns @true if sBasePath = sPathToCheck. If @false, returns @false if sBasePath = sPathToCheck.) @return(@true if sPathToCheck points to a directory or file in sBasePath. @false otherwise.) Examples: IsInPath('/home', '/home/somedir/somefile', True, False) = True IsInPath('/home', '/home/somedir/somefile', False, False) = False IsInPath('/home', '/home/somedir/', False, False) = True IsInPath('/home', '/home', False, False) = False IsInPath('/home', '/home', False, True) = True } function IsInPath(sBasePath : String; sPathToCheck : String; AllowSubDirs : Boolean; AllowSame : Boolean) : Boolean; {en Changes a path to be relative to some parent directory. @param(sPrefix Absolute path that is a parent of sPath.) @param(sPath Path to change. Must be a subpath of sPrefix, otherwise no change is made.) Examples: ExtractDirLevel('/home', '/home/somedir/somefile') = '/somedir/somefile' } function ExtractDirLevel(const sPrefix, sPath: String): String; {en Adds a path delimiter at the beginning of the string, if it not exists. } function IncludeFrontPathDelimiter(s: String): String; {en Removes a path delimiter at the beginning of the string, if it exists. } function ExcludeFrontPathDelimiter(s: String): String; {en Removes a path delimiter at the ending of the string, if it exists. Doesn't remove path delimiter if it is the only character in the path (root dir), so it is safer to use than ExcludeTrailingPathDelimiter, especially on Unix. } function ExcludeBackPathDelimiter(const Path: String): String; {en Return position of character in string begun from start position @param(C character) @param(S String) @param(StartPos Start position) @returns(Position of character in string) } function CharPos(C: Char; const S: string; StartPos: Integer = 1): Integer; {en Split file name on name and extension @param(sFileName File name) @param(n Name) @param(e Extension) } procedure DivFileName(const sFileName:String; out n,e:String); {en Split file mask on name mask and extension mask @param(DestMask File mask) @param(DestNameMask Name mask) @param(DestExtMask Extension mask) } procedure SplitFileMask(const DestMask: String; out DestNameMask: String; out DestExtMask: String); {en Apply name and extension mask to the file name @param(aFileName File name) @param(NameMask Name mask) @param(ExtMask Extension mask) } function ApplyRenameMask(aFileName: String; NameMask: String; ExtMask: String): String; {en Get count of character in string @param(Char Character) @param(S String) @returns(Count of character) } function NumCountChars(const Char: Char; const S: String): Integer; {en Remove last line ending in text @param(sText Text) @param(TextLineBreakStyle Text line break style) } function TrimRightLineEnding(const sText: String; TextLineBreakStyle: TTextLineBreakStyle): String; function mbCompareText(const s1, s2: String): PtrInt; function StrNewW(const mbString: String): PWideChar; procedure StrDisposeW(var pStr : PWideChar); function StrLCopyW(Dest, Source: PWideChar; MaxLen: SizeInt): PWideChar; function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar; function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar; {en Checks if a string begins with another string. @returns(@true if StringToCheck begins with StringToMatch. StringToCheck may be longer than StringToMatch.) } function StrBegins(const StringToCheck, StringToMatch: String): Boolean; {en Checks if a string ends with another string. @returns(@true if StringToCheck ends with StringToMatch. StringToCheck may be longer than StringToMatch.) } function StrEnds(const StringToCheck, StringToMatch: String): Boolean; {en Adds a string to another string. If the source string is not empty adds a separator before adding the string. } procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: Char = ' '); procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: String); procedure ParseLineToList(sLine: String; ssItems: TStrings); {en Convert a number specified as an octal number to it's decimal value. @param(Value Octal number as string) @returns(Decimal number) } function OctToDec(Value: String): LongInt; {en Convert a number specified as an decimal number to it's octal value. @param(Value Decimal number) @returns(Octal number as string) } function DecToOct(Value: LongInt): String; procedure AddString(var anArray: TDynamicStringArray; const sToAdd: String); {en Splits a string into different parts delimited by the specified delimiter character. } function SplitString(const S: String; Delimiter: AnsiChar): TDynamicStringArray; {en Checks if the second array is the beginning of first. If BothWays is @true then also checks the other way around, if the first array is the beginning of second. For Array1=[1,2] Array2=[1,2] returns @true. For Array1=[1,2,...] Array2=[1,2] returns @true. For Array1=[1,3,...] Array2=[1,2] returns @false. If BothWays = True then also For Array1=[1] Array2=[1,2] returns @true. For Array1=[1] Array2=[2] returns @false. } function ArrBegins(const Array1, Array2: array of String; BothWays: Boolean): Boolean; function ArrayToString(const anArray: TDynamicStringArray; const Separator: Char = ' '): String; {en Compares length and contents of the arrays. If lengths differ or individual elements differ returns @false, otherwise @true. } function Compare(const Array1, Array2: array of String): Boolean; {en Copies open array to dynamic array. } function CopyArray(const anArray: array of String): TDynamicStringArray; function ContainsOneOf(const ArrayToSearch, StringsToSearch: array of String): Boolean; function Contains(const ArrayToSearch: array of String; const StringToSearch: String): Boolean; procedure DeleteString(var anArray: TDynamicStringArray; const Index: Integer); procedure DeleteString(var anArray: TDynamicStringArray; const sToDelete: String); function GetArrayFromStrings(Strings: TStrings): TDynamicStringArray; procedure SetStringsFromArray(Strings: TStrings; const anArray: TDynamicStringArray); {en Replaces old value of Key or adds a new Key=NewValue string to the array. } procedure SetValue(var anArray: TDynamicStringArray; Key, NewValue: String); procedure SetValue(var anArray: TDynamicStringArray; Key: String; NewValue: Boolean); function ShortcutsToText(const Shortcuts: TDynamicStringArray): String; function GetDateTimeInStrEZSortable(DateTime:TDateTime):string; implementation uses DCOSUtils; function NormalizePathDelimiters(const Path: String): String; {$IFDEF UNIX} begin Result:= Path; end; {$ELSE} const AllowPathDelimiters : set of char = ['\','/']; var I : LongInt; begin Result:= Path; // If path is not URI if Pos('://', Result) = 0 then begin for I:= 1 to Length(Path) do if Path[I] in AllowPathDelimiters then Result[I]:= DirectorySeparator; end; end; {$ENDIF} function GetLastDir(Path : String) : String; begin Result:= ExtractFileName(ExcludeTrailingPathDelimiter(Path)); if Result = '' then Result:= ExtractFileDrive(Path); if Result = '' then Result:= PathDelim; end; function GetRootDir(sPath : String) : String; begin {$IF DEFINED(MSWINDOWS)} Result := ExtractFileDrive(sPath); if Result <> '' then Result := Result + PathDelim; {$ELSEIF DEFINED(UNIX)} Result := PathDelim; // Hardcoded {$ELSE} Result := ''; {$ENDIF} end; function GetParentDir(sPath : String) : String; var i : Integer; begin Result := ''; sPath := ExcludeTrailingPathDelimiter(sPath); // Start from one character before last. for i := length(sPath) - 1 downto 1 do if sPath[i] = DirectorySeparator then begin Result := Copy(sPath, 1, i); Break; end; end; function GetDeepestExistingPath(const sPath : String) : String; begin Result := sPath; while Result <> EmptyStr do begin if not mbDirectoryExists(Result) then Result := GetParentDir(Result) else Break; end; end; function GetSplitFileName(var sFileName, sPath : String) : String; begin if Pos(PathDelim, sFileName) <> 0 then begin Result := sFileName; sPath := ExtractFilePath(sFileName); sFileName := ExtractFileName(sFileName); end else Result := sPath + sFileName; end; function MakeFileName(const sPath, sFileNameDef : String) : String; begin Result:= ExtractFileName(ExcludeTrailingBackslash(sPath)); if Result = EmptyStr then Result:= sFileNameDef; end; function GetDirs (DirName : String; var Dirs : TStringList) : Longint; var I : Longint; len : Integer; sDir : String; begin I:= 1; Result:= -1; len := Length(DirName); while I <= len do begin if DirName[I]=PathDelim then begin Inc(Result); sDir := Copy(DirName, 1, len - (len - I + 1)); if dirs.IndexOf(sDir) < 0 then dirs.Add(sDir); end; Inc(I); end; if Result > -1 then inc(Result); end; function GetAbsoluteFileName(const sPath, sRelativeFileName : String) : String; begin case GetPathType(sRelativeFileName) of ptNone: Result := sPath + sRelativeFileName; ptRelative: Result := ExpandAbsolutePath(sPath + sRelativeFileName); ptAbsolute: Result := sRelativeFileName; end; end; function GetPathType(const sPath : String): TPathType; begin if sPath <> EmptyStr then begin {$IFDEF MSWINDOWS} { Absolute path in Windows } if { X:\... [Disk] ":" is reserved otherwise } ( Pos( DriveDelim, sPath ) > 0 ) or { \\... [UNC] \... [Root of current drive] } ( sPath[1] = PathDelim ) then {$ENDIF MSWINDOWS} {$IFDEF UNIX} { UNIX absolute paths start with a slash } if (sPath[1] = PathDelim) then {$ENDIF UNIX} Result := ptAbsolute else if ( Pos( PathDelim, sPath ) > 0 ) then Result := ptRelative else Result := ptNone; end else Result := ptNone; end; function ExtractOnlyFileName(const FileName: string): string; var I, Index : LongInt; EndSep : Set of Char; begin // Find a dot index I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then Index := I else Index := MaxInt; // Find file name index EndSep := EndSep - [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); Result := Copy(FileName, I + 1, Index - I - 1); end; function ExtractOnlyFileExt(const FileName: string): string; var I : LongInt; EndSep : Set of Char; begin I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then Result := Copy(FileName, I + 1, MaxInt) else Result := ''; end; function RemoveFileExt(const FileName: String): String; var I : LongInt; EndSep : Set of Char; begin I := Length(FileName); EndSep:= AllowDirectorySeparators + AllowDriveSeparators + [ExtensionSeparator]; while (I > 0) and not (FileName[I] in EndSep) do Dec(I); if (I > 0) and (FileName[I] = ExtensionSeparator) then Result := Copy(FileName, 1, I - 1) else Result := FileName; end; function ContainsWildcards(const Path: String): Boolean; begin Result := ContainsOneOf(Path, '*?'); end; { RemoveInvalidCharsFromFileName } function RemoveInvalidCharsFromFileName(const FileName: String): String; const {$IFDEF MSWINDOWS} ForbiddenChars : set of char = ['<','>',':','"','/','\','|','?','*']; {$ELSE} ForbiddenChars : set of char = ['/']; {$ENDIF} var I : LongInt; begin Result:= ''; for I:= 1 to Length(FileName) do if not (FileName[I] in ForbiddenChars) then Result:=Result+FileName[I]; end; function ExpandAbsolutePath(const Path: String): String; var I, J: Integer; begin Result := Path; {First remove all references to '\.\'} I := Pos (DirectorySeparator + '.' + DirectorySeparator, Result); while I <> 0 do begin Delete (Result, I, 2); I := Pos (DirectorySeparator + '.' + DirectorySeparator, Result); end; if StrEnds(Result, DirectorySeparator + '.') then Delete (Result, Length(Result) - 1, 2); {Then remove all references to '\..\'} I := Pos (DirectorySeparator + '..', Result); while (I <> 0) do begin J := Pred (I); while (J > 0) and (Result [J] <> DirectorySeparator) do Dec (J); if (J = 0) then Delete (Result, I, 3) else Delete (Result, J, I - J + 3); I := Pos (DirectorySeparator + '..', Result); end; end; function HasPathInvalidCharacters(Path: String): Boolean; begin Result := ContainsOneOf(Path, '*?'); end; function IsInPath(sBasePath : String; sPathToCheck : String; AllowSubDirs : Boolean; AllowSame : Boolean) : Boolean; var BasePathLength, PathToCheckLength: Integer; DelimiterPos: Integer; begin if sBasePath = '' then Exit(False); sBasePath := IncludeTrailingPathDelimiter(sBasePath); BasePathLength := Length(sBasePath); PathToCheckLength := Length(sPathToCheck); if PathToCheckLength > BasePathLength then begin if CompareStr(Copy(sPathToCheck, 1, BasePathLength), sBasePath) = 0 then begin if AllowSubDirs then Result := True else begin // Additionally check if the remaining path is a relative path. // Look for a path delimiter in the middle of the filepath. sPathToCheck := Copy(sPathToCheck, 1 + BasePathLength, PathToCheckLength - BasePathLength); DelimiterPos := Pos(DirectorySeparator, sPathToCheck); // If no delimiter was found or it was found at then end (directories // may end with it), then the 'sPathToCheck' is in 'sBasePath'. Result := (DelimiterPos = 0) or (DelimiterPos = PathToCheckLength - BasePathLength); end; end else Result := False; end else Result := AllowSame and (((PathToCheckLength = BasePathLength) and (CompareStr(sPathToCheck, sBasePath) = 0)) or ((PathToCheckLength = BasePathLength - 1) and (CompareStr(Copy(sBasePath, 1, PathToCheckLength), sPathToCheck) = 0))); end; function ExtractDirLevel(const sPrefix, sPath: String): String; var PrefixLength: Integer; begin if IsInPath(sPrefix, sPath, True, True) then begin PrefixLength := Length(sPrefix); Result := Copy(sPath, 1 + PrefixLength, Length(sPath) - PrefixLength) end else Result := sPath; end; function IncludeFrontPathDelimiter(s: String): String; begin if (Length(s) > 0) and (s[1] = PathDelim) then Result:= s else Result:= PathDelim + s; end; function ExcludeFrontPathDelimiter(s: String): String; begin if (Length(s) > 0) and (s[1] = PathDelim) then Result := Copy(s, 2, Length(s) - 1) else Result := s; end; function ExcludeBackPathDelimiter(const Path: String): String; var L: Integer; begin L:= Length(Path); if (L > 1) and (Path[L] in AllowDirectorySeparators) then Result:= Copy(Path, 1, L - 1) else Result:= Path; end; procedure DivFileName(const sFileName:String; out n,e:String); var i:Integer; begin for i:= length(sFileName) downto 1 do if sFileName[i]='.' then begin // if i>1 then // hidden files?? e:=Copy(sFileName,i,Length(sFileName)-i+1); n:=Copy(sFileName,1,i-1); Exit; end; e:=''; n:=sFileName; end; procedure SplitFileMask(const DestMask: String; out DestNameMask: String; out DestExtMask: String); var iPos: LongInt; begin // Special case for mask that contains '*.*' ('*.*.old' for example) iPos:= Pos('*.*', DestMask); if (iPos = 0) then DivFileName(DestMask, DestNameMask, DestExtMask) else begin DestNameMask := Copy(DestMask, 1, iPos); DestExtMask := Copy(DestMask, iPos + 1, MaxInt); end; // Treat empty mask as '*.*'. if (DestNameMask = '') and (DestExtMask = '') then begin DestNameMask := '*'; DestExtMask := '.*'; end; end; function ApplyRenameMask(aFileName: String; NameMask: String; ExtMask: String): String; function ApplyMask(const TargetString: String; Mask: String): String; var i:Integer; begin Result:=''; for i:=1 to Length(Mask) do begin if Mask[i]= '?' then Result:=Result + TargetString[i] else if Mask[i]= '*' then Result:=Result + Copy(TargetString, i, Length(TargetString) - i + 1) else Result:=Result + Mask[i]; end; end; var sDstExt: String; sDstName: String; begin if ((NameMask = '*') and (ExtMask = '.*')) then Result := aFileName else begin DivFileName(aFileName, sDstName, sDstExt); sDstName := ApplyMask(sDstName, NameMask); sDstExt := ApplyMask(sDstExt, ExtMask); Result := sDstName; if sDstExt <> '.' then Result := Result + sDstExt; end; end; function CharPos(C: Char; const S: string; StartPos: Integer = 1): Integer; var sNewStr : String; begin if StartPos <> 1 then begin sNewStr := Copy(S, StartPos, Length(S) - StartPos + 1); Result := Pos(C, sNewStr); if Result <> 0 then Result := Result + StartPos - 1; end else Result := Pos(C, S); 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; function TrimRightLineEnding(const sText: String; TextLineBreakStyle: TTextLineBreakStyle): String; const TextLineBreakArray: array[TTextLineBreakStyle] of Integer = (1, 2, 1); var I, L: Integer; begin L:= Length(sText); I:= TextLineBreakArray[TextLineBreakStyle]; Result:= Copy(sText, 1, L - I); // Copy without last line ending end; function mbCompareText(const s1, s2: String): PtrInt; inline; begin // From 0.9.31 LazUtils can be used but this package does not exist in 0.9.30. // Result := LazUTF8.UTF8CompareText(s1, s2); Result := WideCompareText(UTF8Decode(s1), UTF8Decode(s2)); end; function StrNewW(const mbString: String): PWideChar; var wsString: WideString; iLength: PtrInt; begin Result:= nil; wsString:= UTF8Decode(mbString); iLength:= (Length(wsString) * SizeOf(WideChar)) + 1; Result:= GetMem(iLength); if Result <> nil then Move(PWideChar(wsString)^, Result^, iLength); end; procedure StrDisposeW(var pStr : PWideChar); begin FreeMem(pStr); pStr := nil; end; function StrLCopyW(Dest, Source: PWideChar; MaxLen: SizeInt): PWideChar; var I: SizeInt; begin Result := Dest; for I:= 0 to MaxLen - 1 do begin if Source^ = #0 then Break; Dest^ := Source^; Inc(Source); Inc(Dest); end; Dest^ := #0; end; function StrPCopyW(Dest: PWideChar; const Source: WideString): PWideChar; begin Result := StrLCopyW(Dest, PWideChar(Source), Length(Source)); end; function StrPLCopyW(Dest: PWideChar; const Source: WideString; MaxLen: Cardinal): PWideChar; begin Result := StrLCopyW(Dest, PWideChar(Source), MaxLen); end; function StrBegins(const StringToCheck, StringToMatch: String): Boolean; begin Result := (Length(StringToCheck) >= Length(StringToMatch)) and (CompareChar(StringToCheck[1], StringToMatch[1], Length(StringToMatch)) = 0); end; function StrEnds(const StringToCheck, StringToMatch: String): Boolean; begin Result := (Length(StringToCheck) >= Length(StringToMatch)) and (CompareChar(StringToCheck[1 + Length(StringToCheck) - Length(StringToMatch)], StringToMatch[1], Length(StringToMatch)) = 0); end; procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: Char); begin if (Length(SourceString) > 0) and (Length(StringToAdd) > 0) then SourceString := SourceString + Separator; SourceString := SourceString + StringToAdd; end; procedure AddStrWithSep(var SourceString: String; const StringToAdd: String; const Separator: String); begin if (Length(SourceString) > 0) and (Length(StringToAdd) > 0) then SourceString := SourceString + Separator; SourceString := SourceString + StringToAdd; end; procedure ParseLineToList(sLine: String; ssItems: TStrings); var xPos: Integer; begin ssItems.Clear; while sLine <> '' do begin xPos:= Pos(';', sLine); if xPos > 0 then begin ssItems.Add(Copy(sLine, 1, xPos - 1)); Delete(sLine, 1, xPos); end else begin ssItems.Add(sLine); Exit; end; end; end; function ContainsOneOf(StringToCheck: String; PossibleCharacters: String): Boolean; var i, j: SizeInt; pc : PChar; begin pc := @StringToCheck[1]; for i := 1 to Length(StringToCheck) do begin for j := 1 to Length(PossibleCharacters) do if pc^ = PossibleCharacters[j] then Exit(True); Inc(pc); end; Result := False; end; function OctToDec(Value: String): LongInt; var I: Integer; begin Result:= 0; for I:= 1 to Length(Value) do Result:= Result * 8 + StrToInt(Copy(Value, I, 1)); end; function DecToOct(Value: LongInt): String; var iMod: Integer; begin Result := ''; while Value >= 8 do begin iMod:= Value mod 8; Value:= Value div 8; Result:= IntToStr(iMod) + Result; end; Result:= IntToStr(Value) + Result; end; procedure AddString(var anArray: TDynamicStringArray; const sToAdd: String); var Len: Integer; begin Len := Length(anArray); SetLength(anArray, Len + 1); anArray[Len] := sToAdd; end; function SplitString(const S: String; Delimiter: AnsiChar): TDynamicStringArray; var Start: Integer = 1; Len, Finish: Integer; begin Len:= Length(S); for Finish:= 1 to Len - 1 do begin if S[Finish] = Delimiter then begin AddString(Result, Copy(S, Start, Finish - Start)); Start:= Finish + 1; end; end; if Start <= Len then begin AddString(Result, Copy(S, Start, Len - Start + 1)); end; end; function ArrBegins(const Array1, Array2: array of String; BothWays: Boolean): Boolean; var Len1, Len2: Integer; i: Integer; begin Len1 := Length(Array1); Len2 := Length(Array2); if not BothWays and (Len1 < Len2) then Result := False else begin if Len1 > Len2 then Len1 := Len2; for i := 0 to Len1 - 1 do if Array1[i] <> Array2[i] then Exit(False); Result := True; end; end; function ArrayToString(const anArray: TDynamicStringArray; const Separator: Char): String; var i: Integer; begin Result := ''; for i := Low(anArray) to High(anArray) do AddStrWithSep(Result, anArray[i], Separator); end; function Compare(const Array1, Array2: array of String): Boolean; var Len1, Len2: Integer; i: Integer; begin Len1 := Length(Array1); Len2 := Length(Array2); if Len1 <> Len2 then Result := False else begin for i := 0 to Len1 - 1 do if Array1[i] <> Array2[i] then Exit(False); Result := True; end; end; function CopyArray(const anArray: array of String): TDynamicStringArray; var i: Integer; begin SetLength(Result, Length(anArray)); for i := Low(anArray) to High(anArray) do Result[i] := anArray[i]; end; function ContainsOneOf(const ArrayToSearch, StringsToSearch: array of String): Boolean; var i: Integer; begin for i := Low(StringsToSearch) to High(StringsToSearch) do if Contains(ArrayToSearch, StringsToSearch[i]) then Exit(True); Result := False; end; function Contains(const ArrayToSearch: array of String; const StringToSearch: String): Boolean; var i: Integer; begin for i := Low(ArrayToSearch) to High(ArrayToSearch) do if ArrayToSearch[i] = StringToSearch then Exit(True); Result := False; end; procedure DeleteString(var anArray: TDynamicStringArray; const Index: Integer); var Len: Integer; i: Integer; begin Len := Length(anArray); for i := Index + 1 to Len - 1 do anArray[i - 1] := anArray[i]; SetLength(anArray, Len - 1); end; procedure DeleteString(var anArray: TDynamicStringArray; const sToDelete: String); var i: Integer; begin for i := Low(anArray) to High(anArray) do if anArray[i] = sToDelete then begin DeleteString(anArray, i); Exit; end; end; function GetArrayFromStrings(Strings: TStrings): TDynamicStringArray; var LinesCount: Integer; i: Integer; begin LinesCount := Strings.Count; if LinesCount > 0 then begin if Strings[LinesCount-1] = '' then Dec(LinesCount); SetLength(Result, LinesCount); for i := 0 to LinesCount - 1 do Result[i] := Strings[i]; end; end; procedure SetStringsFromArray(Strings: TStrings; const anArray: TDynamicStringArray); var s: String; begin Strings.Clear; for s in anArray do Strings.Add(s); end; procedure SetValue(var anArray: TDynamicStringArray; Key, NewValue: String); var i: Integer; begin Key := Key + '='; for i := Low(anArray) to High(anArray) do if StrBegins(anArray[i], Key) then begin anArray[i] := Key + NewValue; Exit; end; AddString(anArray, Key + NewValue); end; procedure SetValue(var anArray: TDynamicStringArray; Key: String; NewValue: Boolean); begin if NewValue then SetValue(anArray, Key, 'true') else SetValue(anArray, Key, 'false'); end; function ShortcutsToText(const Shortcuts: TDynamicStringArray): String; begin Result := ArrayToString(Shortcuts, ' '); end; { GetDateTimeInStrEZSortable: Return the date and time in string format with YYYY-MM-DD@HH-MM-SS so it can be integrate in a filename. Also, because of the order of the terms, it make it useful when things are sorted BECAUSE it will also sort by date/time at the same time} function GetDateTimeInStrEZSortable(DateTime:TDateTime):string; var MyYear, MyMonth, MyDay, MyHour, MyMin, MySec, MyMilSec: word; begin DecodeDate(DateTime, MyYear, MyMonth, MyDay); DecodeTime(DateTime, MyHour, MyMin, MySec, MyMilSec); result:=Format('%d-%2.2d-%2.2d@%2.2d-%2.2d-%2.2d', [MyYear, MyMonth, MyDay, MyHour, MyMin, MySec]); end; end. �����������������������������������doublecmd-0.7.1/components/doublecmd/dcwindows.pas��������������������������������������������������0000644�0001750�0000144�00000011314�12576532550�021360� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This unit contains Windows specific functions Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA } unit DCWindows; {$mode objfpc}{$H+} interface uses Windows; {en Converts file name in UTF-8 encoding to file name with UTF-16 encoding with extended-length path prefix } function UnicodeLongName(const FileName: String): UnicodeString; {en Enable a privilege @param(hToken Access token handle) @param(lpszPrivilege Name of privilege to enable) @returns(The function returns @true if successful, @false otherwise) } function EnablePrivilege(hToken: HANDLE; lpszPrivilege: LPCTSTR): Boolean; {en Copy permissions specific to the NTFS file system, like read and write permissions, and the file owner } function CopyNtfsPermissions(const Source, Target: String): Boolean; implementation uses JwaAclApi, JwaWinNT, JwaAccCtrl, JwaWinBase, JwaWinType; function UnicodeLongName(const FileName: String): UnicodeString; begin if Pos('\\', FileName) = 0 then Result := '\\?\' + UTF8Decode(FileName) else begin Result := '\\?\UNC\' + UTF8Decode(Copy(FileName, 3, MaxInt)); end; end; function EnablePrivilege(hToken: HANDLE; lpszPrivilege: LPCTSTR): Boolean; var tp: TTokenPrivileges; luid: TLuid = (LowPart: 0; HighPart: 0); begin if (not LookupPrivilegeValue(nil, lpszPrivilege, luid)) then Exit(False); tp.PrivilegeCount:= 1; tp.Privileges[0].Luid:= luid; tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED; // Enable privilege in the specified access token if (not AdjustTokenPrivileges(hToken, False, @tp, SizeOf(TTokenPrivileges), nil, nil)) then Exit(False); // Not all privileges or groups referenced are assigned to the caller Result:= not (GetLastError() = ERROR_NOT_ALL_ASSIGNED); end; function CopyNtfsPermissions(const Source, Target: String): Boolean; const DisabledPrivilege: Boolean = True; var Dacl, Sacl: PACL; lpdwRevision: DWORD = 0; ProcessToken: HANDLE = 0; SidOwner, SidGroup: PSID; SecDescPtr: PSECURITY_DESCRIPTOR = nil; SecDescCtl: SECURITY_DESCRIPTOR_CONTROL = 0; SecurityInfo: SECURITY_INFORMATION = DACL_SECURITY_INFORMATION or SACL_SECURITY_INFORMATION or OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION; begin if DisabledPrivilege then begin DisabledPrivilege:= False; Result:= OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, ProcessToken); if not Result then Exit(False) else begin EnablePrivilege(ProcessToken, SE_BACKUP_NAME); EnablePrivilege(ProcessToken, SE_RESTORE_NAME); EnablePrivilege(ProcessToken, SE_SECURITY_NAME); CloseHandle(ProcessToken); end; end; Result:= GetNamedSecurityInfoW(PWideChar(UTF8Decode(Source)), SE_FILE_OBJECT, SecurityInfo, @SidOwner, @SidGroup, @Dacl, @Sacl, SecDescPtr) = ERROR_SUCCESS; if Result then begin if GetSecurityDescriptorControl(SecDescPtr, SecDescCtl, lpdwRevision) then begin // Need to copy DACL inheritance if (SecDescCtl and SE_DACL_PROTECTED <> 0) then SecurityInfo:= SecurityInfo or PROTECTED_DACL_SECURITY_INFORMATION else begin SecurityInfo:= SecurityInfo or UNPROTECTED_DACL_SECURITY_INFORMATION; end; // Need to copy SACL inheritance if (SecDescCtl and SE_SACL_PROTECTED <> 0) then SecurityInfo:= SecurityInfo or PROTECTED_SACL_SECURITY_INFORMATION else begin SecurityInfo:= SecurityInfo or UNPROTECTED_SACL_SECURITY_INFORMATION; end; Result:= SetNamedSecurityInfoW(PWideChar(UTF8Decode(Target)), SE_FILE_OBJECT, SecurityInfo, SidOwner, SidGroup, Dacl, Sacl) = ERROR_SUCCESS; end; {$PUSH}{$HINTS OFF}{$WARNINGS OFF} LocalFree(HLOCAL(SecDescPtr)); {$POP} end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcconvertencoding.pas������������������������������������������0000644�0001750�0000144�00000031436�12650700750�023054� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit DCConvertEncoding; {$mode objfpc}{$H+} {$IF DEFINED(DARWIN)} {$modeswitch objectivec1} {$ENDIF} interface uses Classes, SysUtils; {$IF NOT DECLARED(RawByteString)} type RawByteString = AnsiString; {$IFEND} var {en Convert from OEM to System encoding, if needed } CeOemToSys: function (const Source: String): RawByteString; CeSysToOem: function (const Source: String): RawByteString; {en Convert from OEM to UTF-8 encoding, if needed } CeOemToUtf8: function (const Source: String): RawByteString; CeUtf8ToOem: function (const Source: String): RawByteString; {en Convert from Ansi to System encoding, if needed } CeAnsiToSys: function (const Source: String): RawByteString; CeSysToAnsi: function (const Source: String): RawByteString; {en Convert from ANSI to UTF-8 encoding, if needed } CeAnsiToUtf8: function (const Source: String): RawByteString; CeUtf8ToAnsi: function (const Source: String): RawByteString; {en Convert from Utf8 to System encoding, if needed } CeUtf8ToSys: function (const Source: String): RawByteString; CeSysToUtf8: function (const Source: String): RawByteString; function CeRawToUtf8(const Source: String): RawByteString; {$IF DEFINED(MSWINDOWS)} function CeTryEncode(const aValue: UnicodeString; aCodePage: Cardinal; aAllowBestFit: Boolean; out aResult: AnsiString): Boolean; function CeTryDecode(const aValue: AnsiString; aCodePage: Cardinal; out aResult: UnicodeString): Boolean; {$ELSEIF DEFINED(UNIX)} var SystemEncodingUtf8: Boolean = False; SystemLanguage, SystemEncoding, SystemLocale: String; {$ENDIF} implementation uses {$IF DEFINED(UNIX)} iconvenc_dyn {$IF DEFINED(DARWIN)} , MacOSAll, CocoaAll {$ENDIF} {$ELSEIF DEFINED(MSWINDOWS)} Windows {$ENDIF} ; {$IF DEFINED(FPC_HAS_CPSTRING)} var FileSystemCodePage: TSystemCodePage; {$ENDIF} function UTF8CharacterStrictLength(P: PAnsiChar): integer; begin if p=nil then exit(0); if ord(p^)<%10000000 then begin // regular single byte character exit(1); end else if ord(p^)<%11000000 then begin // invalid single byte character exit(0); end else if ((ord(p^) and %11100000) = %11000000) then begin // should be 2 byte character if (ord(p[1]) and %11000000) = %10000000 then exit(2) else exit(0); end else if ((ord(p^) and %11110000) = %11100000) then begin // should be 3 byte character if ((ord(p[1]) and %11000000) = %10000000) and ((ord(p[2]) and %11000000) = %10000000) then exit(3) else exit(0); end else if ((ord(p^) and %11111000) = %11110000) then begin // should be 4 byte character if ((ord(p[1]) and %11000000) = %10000000) and ((ord(p[2]) and %11000000) = %10000000) and ((ord(p[3]) and %11000000) = %10000000) then exit(4) else exit(0); end else exit(0); end; function CeRawToUtf8(const Source: String): RawByteString; var P: PAnsiChar; I, L: LongInt; begin L:= Length(Source); // Try UTF-8 (this includes ASCII) P:= PAnsiChar(Source); repeat if Ord(P^) < 128 then begin // ASCII if (P^ = #0) and (P - PAnsiChar(Source) >= L) then begin Result:= Source; Exit; end; Inc(P); end else begin I:= UTF8CharacterStrictLength(P); if I = 0 then Break; Inc(P, I); end; until False; Result:= CeSysToUtf8(Source); end; function Dummy(const Source: String): RawByteString; begin Result:= Source; end; {$IF DEFINED(FPC_HAS_CPSTRING)} function Sys2UTF8(const Source: String): RawByteString; begin Result:= Source; SetCodePage(Result, FileSystemCodePage, False); SetCodePage(Result, CP_UTF8, True); // Prevent another codepage appear in the strings // we don't need codepage conversion magic in our code SetCodePage(Result, DefaultSystemCodePage, False); end; function UTF82Sys(const Source: String): RawByteString; begin Result:= Source; SetCodePage(Result, CP_UTF8, False); SetCodePage(Result, FileSystemCodePage, True); // Prevent another codepage appear in the strings // we don't need codepage conversion magic in our code SetCodePage(Result, DefaultSystemCodePage, False); end; {$ELSE} function Sys2UTF8(const Source: String): RawByteString; begin Result:= UTF8Encode(Source); end; function UTF82Sys(const Source: String): RawByteString; begin Result:= UTF8Decode(Source); end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} function CeTryEncode(const aValue: UnicodeString; aCodePage: Cardinal; aAllowBestFit: Boolean; out aResult: AnsiString): Boolean; // Try to encode the given Unicode string as the requested codepage const WC_NO_BEST_FIT_CHARS = $00000400; Flags: array[Boolean] of DWORD = (WC_NO_BEST_FIT_CHARS, 0); var UsedDefault: BOOL; begin if not aAllowBestFit and not CheckWin32Version(4, 1) then Result := False else begin SetLength(aResult, WideCharToMultiByte(aCodePage, Flags[aAllowBestFit], PWideChar(aValue), Length(aValue), nil, 0, nil, @UsedDefault)); SetLength(aResult, WideCharToMultiByte(aCodePage, Flags[aAllowBestFit], PWideChar(aValue), Length(aValue), PAnsiChar(aResult), Length(aResult), nil, @UsedDefault)); Result := not UsedDefault; end; end; function CeTryDecode(const aValue: AnsiString; aCodePage: Cardinal; out aResult: UnicodeString): Boolean; begin SetLength(aResult, MultiByteToWideChar(aCodePage, MB_ERR_INVALID_CHARS, LPCSTR(aValue), Length(aValue), nil, 0) * SizeOf(UnicodeChar)); SetLength(aResult, MultiByteToWideChar(aCodePage, MB_ERR_INVALID_CHARS, LPCSTR(aValue), Length(aValue), PWideChar(aResult), Length(aResult))); Result := Length(aResult) > 0; end; function Oem2Utf8(const Source: String): RawByteString; var UnicodeResult: UnicodeString; begin if CeTryDecode(Source, CP_OEMCP, UnicodeResult) then Result:= UTF8Encode(UnicodeResult) else Result:= Source; end; function Utf82Oem(const Source: String): RawByteString; var AnsiResult: AnsiString; begin if CeTryEncode(UTF8Decode(Source), CP_OEMCP, False, AnsiResult) then Result:= AnsiResult else Result:= Source; end; function OEM2Ansi(const Source: String): RawByteString; var Dst: PAnsiChar; begin Result:= Source; Dst:= AllocMem((Length(Result) + 1) * SizeOf(AnsiChar)); if OEMToChar(PAnsiChar(Result), Dst) then Result:= StrPas(Dst); FreeMem(Dst); end; function Ansi2OEM(const Source: String): RawByteString; var Dst: PAnsiChar; begin Result := Source; Dst := AllocMem((Length(Result) + 1) * SizeOf(AnsiChar)); if CharToOEM(PAnsiChar(Result), Dst) then Result := StrPas(Dst); FreeMem(Dst); end; procedure Initialize; begin CeOemToSys:= @OEM2Ansi; CeSysToOem:= @Ansi2OEM; CeOemToUtf8:= @Oem2Utf8; CeUtf8ToOem:= @Utf82Oem; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeAnsiToUtf8:= @Sys2UTF8; CeUtf8ToAnsi:= @UTF82Sys; CeSysToUtf8:= @Sys2UTF8; CeUtf8ToSys:= @UTF82Sys; end; {$ELSEIF DEFINED(UNIX)} {$I dcconvertencoding.inc} const EncodingUTF8 = 'UTF-8'; // UTF-8 Encoding var EncodingOEM, // OEM Encoding EncodingANSI: String; // ANSI Encoding function GetSystemEncoding: Boolean; {$IF DEFINED(DARWIN)} var Country: String; CurrentLocale: NSLocale; LanguageCFRef: CFStringRef = nil; LanguageCFArray: CFArrayRef = nil; begin // System encoding SystemEncoding:= EncodingUTF8; // Get system language LanguageCFArray:= CFLocaleCopyPreferredLanguages; try Result:= CFArrayGetCount(LanguageCFArray) > 0; if Result then begin LanguageCFRef:= CFArrayGetValueAtIndex(LanguageCFArray, 0); SetLength(SystemLanguage, MAX_PATH); Result:= CFStringGetCString(LanguageCFRef, PAnsiChar(SystemLanguage), MAX_PATH, kCFStringEncodingUTF8 ); end; finally CFRelease(LanguageCFArray); end; if Result then begin // Crop to terminating zero SystemLanguage:= PAnsiChar(SystemLanguage); // Get system country CurrentLocale:= NSLocale.currentLocale(); Country:= NSString(CurrentLocale.objectForKey(NSLocaleCountryCode)).UTF8String; // Combine system locale if (Length(SystemLanguage) > 0) and (Length(Country) > 0) then begin SystemLocale:= SystemLanguage + '_' + Country; end; end; end; {$ELSE} var I: Integer; Lang: String; begin Result:= True; Lang:= SysUtils.GetEnvironmentVariable('LC_ALL'); if Length(Lang) = 0 then begin Lang:= SysUtils.GetEnvironmentVariable('LC_MESSAGES'); if Length(Lang) = 0 then begin Lang:= SysUtils.GetEnvironmentVariable('LANG'); if Length(Lang) = 0 then Exit(False); end; end; I:= Pos('_', Lang); if (I = 0) then SystemLanguage:= Lang else begin SystemLanguage:= Copy(Lang, 1, I - 1); end; I:= System.Pos('.', Lang); if (I > 0) then begin SystemLocale:= Copy(Lang, 1, I - 1); SystemEncoding:= Copy(Lang, I + 1, Length(Lang) - I); end else begin SystemLocale:= Lang; SystemEncoding:= EncodingUTF8; end; end; {$ENDIF} {$IF DEFINED(DARWIN)} function InitIconv(var Error: String): Boolean; begin Error:= EmptyStr; Result:= TryLoadLib('libiconv.dylib', Error); IconvLibFound:= IconvLibFound or Result; end; {$ENDIF} function FindEncoding: Boolean; var Index: Integer; begin // Try to find by language and country for Index:= Low(charset_relation) to High(charset_relation) do begin if CompareStr(charset_relation[Index, 1], SystemLocale) = 0 then begin EncodingANSI:= charset_relation[Index, 2]; EncodingOEM:= charset_relation[Index, 3]; Exit(True); end; end; // Try to find by language only for Index:= Low(charset_relation) to High(charset_relation) do begin if CompareStr(charset_relation[Index, 0], SystemLanguage) = 0 then begin EncodingANSI:= charset_relation[Index, 2]; EncodingOEM:= charset_relation[Index, 3]; Exit(True); end; end; Result:= False; end; function Oem2Utf8(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingOEM, EncodingUTF8); end; function Utf82Oem(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingUTF8, EncodingOEM); end; function OEM2Sys(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingOEM, SystemEncoding); end; function Sys2OEM(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), SystemEncoding, EncodingOEM); end; function Ansi2Sys(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingANSI, SystemEncoding); end; function Sys2Ansi(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), SystemEncoding, EncodingANSI); end; function Ansi2Utf8(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingANSI, EncodingUTF8); end; function Utf82Ansi(const Source: String): RawByteString; begin Result:= Source; Iconvert(Source, String(Result), EncodingUTF8, EncodingANSI); end; procedure Initialize; var Error: String = ''; begin CeOemToSys:= @Dummy; CeSysToOem:= @Dummy; CeOemToUtf8:= @Dummy; CeUtf8ToOem:= @Dummy; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeUtf8ToSys:= @Dummy; CeSysToUtf8:= @Dummy; CeAnsiToUtf8:= @Dummy; CeUtf8ToAnsi:= @Dummy; // Try to get system encoding and initialize Iconv library if not (GetSystemEncoding and InitIconv(Error)) then WriteLn(Error) else begin SystemEncodingUtf8:= (SysUtils.CompareText(SystemEncoding, 'UTF-8') = 0) or (SysUtils.CompareText(SystemEncoding, 'UTF8') = 0); if FindEncoding then begin if (Length(EncodingOEM) > 0) then begin CeOemToSys:= @OEM2Sys; CeSysToOem:= @Sys2OEM; CeOemToUtf8:= @Oem2Utf8; CeUtf8ToOem:= @Utf82Oem; end; if (Length(EncodingANSI) > 0) then begin CeAnsiToSys:= @Ansi2Sys; CeSysToAnsi:= @Sys2Ansi; CeAnsiToUtf8:= @Ansi2Utf8; CeUtf8ToAnsi:= @Utf82Ansi; end; end; if not SystemEncodingUtf8 then begin CeUtf8ToSys:= @UTF82Sys; CeSysToUtf8:= @Sys2UTF8; end; end; end; {$ELSE} procedure Initialize; begin CeOemToSys:= @Dummy; CeSysToOem:= @Dummy; CeOemToUtf8:= @Dummy; CeUtf8ToOem:= @Dummy; CeAnsiToSys:= @Dummy; CeSysToAnsi:= @Dummy; CeUtf8ToSys:= @Dummy; CeSysToUtf8:= @Dummy; CeAnsiToUtf8:= @Dummy; CeUtf8ToAnsi:= @Dummy; end; {$ENDIF} initialization {$IF DEFINED(FPC_HAS_CPSTRING)} FileSystemCodePage:= WideStringManager.GetStandardCodePageProc(scpFileSystemSingleByte); {$ENDIF} Initialize; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcclassesutf8.pas����������������������������������������������0000644�0001750�0000144�00000012512�12602272236�022123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- This module contains classes with UTF8 file names support. Copyright (C) 2008-2015 Alexander Koblov (alexx2000@mail.ru) 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 DCClassesUtf8; {$mode objfpc}{$H+} interface uses Classes, RtlConsts, SysUtils, IniFiles; type { TFileStreamEx class } TFileStreamEx = class(THandleStream) private FHandle: THandle; FFileName: String; public constructor Create(const AFileName: String; Mode: Word); destructor Destroy; override; function Read(var Buffer; Count: LongInt): LongInt; override; property FileName: String read FFileName; end; { TStringListEx } TStringListEx = class(TStringList) public function IndexOfValue(const Value: String): Integer; procedure LoadFromFile(const FileName: String); override; procedure SaveToFile(const FileName: String); override; end; { TIniFileEx } TIniFileEx = class(TMemIniFile) private FReadOnly: Boolean; public constructor Create(const AFileName: String; Mode: Word); virtual; constructor Create(const AFileName: String; AEscapeLineFeeds : Boolean = False); override; procedure UpdateFile; override; public property ReadOnly: Boolean read FReadOnly; end; implementation uses DCOSUtils; { TFileStreamEx } constructor TFileStreamEx.Create(const AFileName: String; Mode: Word); begin if (Mode and fmCreate) <> 0 then begin FHandle:= mbFileCreate(AFileName, Mode); if FHandle = feInvalidHandle then raise EFCreateError.CreateFmt(SFCreateError, [AFileName]) else inherited Create(FHandle); end else begin FHandle:= mbFileOpen(AFileName, Mode); if FHandle = feInvalidHandle then raise EFOpenError.CreateFmt(SFOpenError, [AFilename]) else inherited Create(FHandle); end; FFileName:= AFileName; end; destructor TFileStreamEx.Destroy; begin inherited Destroy; // Close handle after destroying the base object, because it may use Handle in Destroy. if FHandle >= 0 then FileClose(FHandle); end; function TFileStreamEx.Read(var Buffer; Count: LongInt): LongInt; begin Result:= FileRead(FHandle, Buffer, Count); if Result = -1 then raise EReadError.Create(mbSysErrorMessage(GetLastOSError)); end; { TStringListEx } function TStringListEx.IndexOfValue(const Value: String): Integer; var iStart: LongInt; sTemp: String; begin CheckSpecialChars; Result:= 0; while (Result < Count) do begin sTemp:= Strings[Result]; iStart:= Pos(NameValueSeparator, sTemp) + 1; if (iStart > 0) and (DoCompareText(Value, Copy(sTemp, iStart, MaxInt)) = 0) then Exit; Inc(result); end; Result:= -1; end; procedure TStringListEx.LoadFromFile(const FileName: String); var fsFileStream: TFileStreamEx; begin fsFileStream:= TFileStreamEx.Create(FileName, fmOpenRead or fmShareDenyNone); try LoadFromStream(fsFileStream); finally fsFileStream.Free; end; end; procedure TStringListEx.SaveToFile(const FileName: String); var fsFileStream: TFileStreamEx = nil; begin try if mbFileExists(FileName) then begin fsFileStream:= TFileStreamEx.Create(FileName, fmOpenWrite or fmShareDenyWrite); fsFileStream.Position:= 0; fsFileStream.Size:= 0; end else fsFileStream:= TFileStreamEx.Create(FileName, fmCreate); SaveToStream(fsFileStream); finally fsFileStream.Free; end; end; { TIniFileEx } constructor TIniFileEx.Create(const AFileName: String; Mode: Word); var slLines : TStringListEx; begin FReadOnly := ((Mode and $03) = fmOpenRead); inherited Create(EmptyStr); if ((Mode and $03) <> fmOpenWrite) then begin if mbFileExists(AFileName) then begin slLines := TStringListEx.Create; try slLines.LoadFromFile(AFileName); SetStrings(slLines); finally slLines.Free; end; end; end; Rename(AFileName, False); end; constructor TIniFileEx.Create(const AFileName: String; AEscapeLineFeeds: Boolean); var Mode: Word; begin if not mbFileExists(AFileName) then Mode := fmOpenWrite or fmShareDenyWrite else if mbFileAccess(AFileName, fmOpenReadWrite or fmShareDenyWrite) then Mode := fmOpenReadWrite or fmShareDenyWrite else begin Mode := fmOpenRead or fmShareDenyNone; end; Create(AFileName, Mode); end; procedure TIniFileEx.UpdateFile; var slLines: TStringListEx; begin if not FReadOnly then begin slLines := TStringListEx.Create; try GetStrings(slLines); slLines.SaveToFile(FileName); PBoolean(@Dirty)^:= False; finally slLines.Free; end; end; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcosutils.pas��������������������������������������������������0000644�0001750�0000144�00000113271�12660674103�021370� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- This unit contains platform dependent functions dealing with operating system. Copyright (C) 2006-2015 Alexander Koblov (alexx2000@mail.ru) 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 DCOSUtils; {$mode objfpc}{$H+} interface uses SysUtils, Classes, DynLibs, DCClassesUtf8, DCBasicTypes; type TFileMapRec = record FileHandle : System.THandle; FileSize : Int64; {$IFDEF MSWINDOWS} MappingHandle : System.THandle; {$ENDIF} MappedFile : Pointer; end; TCopyAttributesOption = (caoCopyAttributes, caoCopyTime, caoCopyOwnership, caoCopyPermissions, caoRemoveReadOnlyAttr); TCopyAttributesOptions = set of TCopyAttributesOption; const faInvalidAttributes: TFileAttrs = TFileAttrs(-1); CopyAttributesOptionCopyAll = [caoCopyAttributes, caoCopyTime, caoCopyOwnership]; {en Is file a directory @param(iAttr File attributes) @returns(@true if file is a directory, @false otherwise) } function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; {en Is file a symbolic link @param(iAttr File attributes) @returns(@true if file is a symbolic link, @false otherwise) } function FPS_ISLNK(iAttr: TFileAttrs) : Boolean; {en Is file executable @param(sFileName File name) @returns(@true if file is executable, @false otherwise) } function FileIsExeLib(const sFileName : String) : Boolean; {en Copies a file attributes (attributes, date/time, owner & group, permissions). @param(sSrc String expression that specifies the name of the file to be copied) @param(sDst String expression that specifies the target file name) @param(bDropReadOnlyFlag Drop read only attribute if @true) @returns(The function returns @true if successful, @false otherwise) } function FileIsReadOnly(iAttr: TFileAttrs): Boolean; {en Returns path to a temporary name. It ensures that returned path doesn't exist, i.e., there is no filesystem entry by that name. If it could not create a unique temporary name then it returns empty string. @param(PathPrefix This parameter is added at the beginning of each path that is tried. The directories in this path are not created if they don't exist. If it is empty then the system temporary directory is used. For example: If PathPrefix is '/tmp/myfile' then files '/tmp/myfileXXXXXX' are tried. The path '/tmp' must already exist.) } function GetTempName(PathPrefix: String): String; (* File mapping/unmapping routines *) {en Create memory map of a file @param(sFileName Name of file to mapping) @param(FileMapRec TFileMapRec structure) @returns(The function returns @true if successful, @false otherwise) } function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boolean; {en Unmap previously mapped file @param(FileMapRec TFileMapRec structure) } procedure UnMapFile(var FileMapRec : TFileMapRec); {en Convert from console to UTF8 encoding. } function ConsoleToUTF8(const Str: AnsiString): String; { File handling functions} function mbFileOpen(const FileName: String; Mode: Word): System.THandle; function mbFileCreate(const FileName: String): System.THandle; overload; function mbFileCreate(const FileName: String; ShareMode: Longint): System.THandle; overload; function mbFileCreate(const FileName: String; ShareMode: Longint; Rights: Longint): System.THandle; overload; function mbFileAge(const FileName: String): DCBasicTypes.TFileTime; function mbFileSame(const FirstName, SecondName: String): Boolean; // On success returns True. function mbFileGetTime(const FileName: String; var ModificationTime: DCBasicTypes.TFileTime; var CreationTime : DCBasicTypes.TFileTime; var LastAccessTime : DCBasicTypes.TFileTime): Boolean; // On success returns True. function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean; {en Checks if a given file exists - it can be a real file or a link to a file, but it can be opened and read from. Even if the result is @false, we can't be sure a file by that name can be created, because there may still exist a directory or link by that name. } function mbFileExists(const FileName: String): Boolean; function mbFileAccess(const FileName: String; Mode: Word): Boolean; function mbFileGetAttr(const FileName: String): TFileAttrs; overload; function mbFileSetAttr(const FileName: String; Attr: TFileAttrs) : LongInt; function mbFileGetAttr(const FileName: String; out Attr: TSearchRec): Boolean; overload; {en If any operation in Options is performed and does not succeed it is included in the result set. If all performed operations succeed the function returns empty set. For example for Options=[caoCopyTime, caoCopyOwnership] setting ownership doesn't succeed then the function returns [caoCopyOwnership]. } function mbFileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; // Returns True on success. function mbFileSetReadOnly(const FileName: String; ReadOnly: Boolean): Boolean; function mbDeleteFile(const FileName: String): Boolean; function mbRenameFile(const OldName: String; NewName: String): Boolean; function mbFileSize(const FileName: String): Int64; function FileFlush(Handle: System.THandle): Boolean; { Directory handling functions} function mbGetCurrentDir: String; function mbSetCurrentDir(const NewDir: String): Boolean; {en Checks if a given directory exists - it may be a real directory or a link to directory. Even if the result is @false, we can't be sure a directory by that name can be created, because there may still exist a file or link by that name. } function mbDirectoryExists(const Directory : String) : Boolean; function mbCreateDir(const NewDir: String): Boolean; function mbRemoveDir(const Dir: String): Boolean; {en Checks if any file system entry exists at given path. It can be file, directory, link, etc. (links are not followed). } function mbFileSystemEntryExists(const Path: String): Boolean; function mbCompareFileNames(const FileName1, FileName2: String): Boolean; function mbSameFile(const FileName1, FileName2: String): Boolean; { Other functions } function mbGetEnvironmentString(Index : Integer) : String; {en Expands environment-variable strings and replaces them with the values defined for the current user } function mbExpandEnvironmentStrings(const FileName: String): String; function mbSysErrorMessage(ErrorCode: Integer): String; function mbLoadLibrary(const Name: String): TLibHandle; function SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer; implementation uses {$IF DEFINED(MSWINDOWS)} Windows, JwaWinNetWk, DCDateTimeUtils, DCWindows, {$ENDIF} {$IF DEFINED(UNIX)} BaseUnix, Unix, dl, DCUnix, {$ENDIF} DCConvertEncoding, DCStrUtils, LazUTF8; {$IFDEF UNIX} function SetModeReadOnly(mode: TMode; ReadOnly: Boolean): TMode; begin mode := mode and not (S_IWUSR or S_IWGRP or S_IWOTH); if ReadOnly = False then begin if (mode AND S_IRUSR) = S_IRUSR then mode := mode or S_IWUSR; if (mode AND S_IRGRP) = S_IRGRP then mode := mode or S_IWGRP; if (mode AND S_IROTH) = S_IROTH then mode := mode or S_IWOTH; end; Result := mode; end; {$ENDIF} {$IF DEFINED(MSWINDOWS)} const AccessModes: array[0..2] of DWORD = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); ShareModes: array[0..4] of DWORD = ( 0, 0, FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE); var CurrentDirectory: String; {$ELSEIF DEFINED(UNIX)} const AccessModes: array[0..2] of LongInt = ( O_RdOnly, O_WrOnly, O_RdWr); {$ENDIF} (*Is Directory*) function FPS_ISDIR(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_DIRECTORY <> 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISDIR(iAttr); end; {$ENDIF} (*Is Link*) function FPS_ISLNK(iAttr: TFileAttrs) : Boolean; inline; {$IFDEF MSWINDOWS} begin Result := (iAttr and FILE_ATTRIBUTE_REPARSE_POINT <> 0); end; {$ELSE} begin Result := BaseUnix.FPS_ISLNK(iAttr); end; {$ENDIF} function FileIsExeLib(const sFileName : String) : Boolean; var fsExeLib : TFileStreamEx; {$IFDEF MSWINDOWS} Sign : Word; {$ELSE} Sign : DWord; {$ENDIF} begin Result := False; if mbFileExists(sFileName) and (mbFileSize(sFileName) >= SizeOf(Sign)) then begin fsExeLib := TFileStreamEx.Create(sFileName, fmOpenRead or fmShareDenyNone); try {$IFDEF MSWINDOWS} Sign := fsExeLib.ReadWord; Result := (Sign = $5A4D); {$ELSE} Sign := fsExeLib.ReadDWord; Result := (Sign = $464C457F); {$ENDIF} finally fsExeLib.Free; end; end; end; function FileIsReadOnly(iAttr: TFileAttrs): Boolean; {$IFDEF MSWINDOWS} begin Result:= (iAttr and faReadOnly) <> 0; end; {$ELSE} begin Result:= (((iAttr AND S_IRUSR) = S_IRUSR) and ((iAttr AND S_IWUSR) <> S_IWUSR)); end; {$ENDIF} function mbFileCopyAttr(const sSrc, sDst: String; Options: TCopyAttributesOptions): TCopyAttributesOptions; {$IFDEF MSWINDOWS} var Attr : TFileAttrs; ModificationTime, CreationTime, LastAccessTime: DCBasicTypes.TFileTime; begin Result := []; if caoCopyAttributes in Options then begin Attr := mbFileGetAttr(sSrc); if Attr <> faInvalidAttributes then begin if (caoRemoveReadOnlyAttr in Options) and ((Attr and faReadOnly) <> 0) then Attr := (Attr and not faReadOnly); if mbFileSetAttr(sDst, Attr) <> 0 then Include(Result, caoCopyAttributes); end else Include(Result, caoCopyAttributes); end; if caoCopyTime in Options then begin if not (mbFileGetTime(sSrc, ModificationTime, CreationTime, LastAccessTime) and mbFileSetTime(sDst, ModificationTime, CreationTime, LastAccessTime)) then Include(Result, caoCopyTime); end; if caoCopyPermissions in Options then begin if not CopyNtfsPermissions(sSrc, sDst) then begin Include(Result, caoCopyPermissions); end; end; end; {$ELSE} // *nix var StatInfo : BaseUnix.Stat; utb : BaseUnix.TUTimBuf; mode : TMode; begin if fpLStat(UTF8ToSys(sSrc), StatInfo) >= 0 then begin Result := []; if FPS_ISLNK(StatInfo.st_mode) then begin if caoCopyOwnership in Options then begin // Only group/owner can be set for links. if fpLChown(sDst, StatInfo.st_uid, StatInfo.st_gid) = -1 then begin Include(Result, caoCopyOwnership); end; end; end else begin if caoCopyTime in Options then begin utb.actime := time_t(StatInfo.st_atime); // last access time utb.modtime := time_t(StatInfo.st_mtime); // last modification time if fputime(UTF8ToSys(sDst), @utb) <> 0 then Include(Result, caoCopyTime); end; if caoCopyOwnership in Options then begin if fpChown(PChar(UTF8ToSys(sDst)), StatInfo.st_uid, StatInfo.st_gid) = -1 then begin Include(Result, caoCopyOwnership); end; end; if caoCopyAttributes in Options then begin mode := StatInfo.st_mode; if caoRemoveReadOnlyAttr in Options then mode := SetModeReadOnly(mode, False); if fpChmod(UTF8ToSys(sDst), mode) = -1 then begin Include(Result, caoCopyAttributes); end; end; end; end else Result := Options; end; {$ENDIF} function GetTempName(PathPrefix: String): String; const MaxTries = 100; var TryNumber: Integer = 0; begin if PathPrefix = '' then PathPrefix := GetTempDir; repeat Result := PathPrefix + IntToStr(System.Random(MaxInt)); // or use CreateGUID() Inc(TryNumber); if TryNumber = MaxTries then Exit(''); until not mbFileSystemEntryExists(Result); end; function MapFile(const sFileName : String; out FileMapRec : TFileMapRec) : Boolean; {$IFDEF MSWINDOWS} begin Result := False; with FileMapRec do begin MappedFile := nil; MappingHandle := 0; FileHandle := feInvalidHandle; FileSize := mbFileSize(sFileName); if FileSize = 0 then Exit; // Cannot map empty files FileHandle := mbFileOpen(sFileName, fmOpenRead); if FileHandle = feInvalidHandle then Exit; MappingHandle := CreateFileMapping(FileHandle, nil, PAGE_READONLY, 0, 0, nil); if MappingHandle <> 0 then begin MappedFile := MapViewOfFile(MappingHandle, FILE_MAP_READ, 0, 0, 0); if not Assigned(MappedFile) then begin UnMapFile(FileMapRec); Exit; end; end else begin UnMapFile(FileMapRec); Exit; end; end; Result := True; end; {$ELSE} var StatInfo: BaseUnix.Stat; begin Result:= False; with FileMapRec do begin MappedFile := nil; FileHandle:= fpOpen(UTF8ToSys(sFileName), O_RDONLY); if FileHandle = feInvalidHandle then Exit; if fpfstat(FileHandle, StatInfo) <> 0 then begin UnMapFile(FileMapRec); Exit; end; FileSize := StatInfo.st_size; if FileSize = 0 then // Cannot map empty files begin UnMapFile(FileMapRec); Exit; end; MappedFile:= fpmmap(nil,FileSize,PROT_READ, MAP_PRIVATE{SHARED},FileHandle,0 ); if MappedFile = MAP_FAILED then begin MappedFile := nil; UnMapFile(FileMapRec); Exit; end; end; Result := True; end; {$ENDIF} procedure UnMapFile(var FileMapRec : TFileMapRec); {$IFDEF MSWINDOWS} begin with FileMapRec do begin if Assigned(MappedFile) then begin UnmapViewOfFile(MappedFile); MappedFile := nil; end; if MappingHandle <> 0 then begin CloseHandle(MappingHandle); MappingHandle := 0; end; if FileHandle <> feInvalidHandle then begin FileClose(FileHandle); FileHandle := feInvalidHandle; end; end; end; {$ELSE} begin with FileMapRec do begin if FileHandle <> feInvalidHandle then begin fpClose(FileHandle); FileHandle := feInvalidHandle; end; if Assigned(MappedFile) then begin fpmunmap(MappedFile,FileSize); MappedFile := nil; end; end; end; {$ENDIF} function ConsoleToUTF8(const Str: AnsiString): String; {$IFDEF MSWINDOWS} var Dst: PChar; {$ENDIF} begin Result:= Str; {$IFDEF MSWINDOWS} Dst:= AllocMem((Length(Result) + 1) * SizeOf(Char)); if OEMToChar(PChar(Result), Dst) then Result:= SysToUTF8(Dst); FreeMem(Dst); {$ENDIF} end; function mbFileOpen(const FileName: String; Mode: Word): System.THandle; {$IFDEF MSWINDOWS} begin Result:= CreateFileW(PWideChar(UTF8Decode(FileName)), AccessModes[Mode and 3], ShareModes[(Mode and $F0) shr 4], nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); end; {$ELSE} begin Result:= fpOpen(UTF8ToSys(FileName), AccessModes[Mode and 3]); end; {$ENDIF} function mbFileCreate(const FileName: String): System.THandle; {$IFDEF MSWINDOWS} begin Result := mbFileCreate(FileName, fmShareDenyWrite, 0); end; {$ELSE} begin Result:= fpOpen(UTF8ToSys(FileName), O_Creat or O_RdWr or O_Trunc); end; {$ENDIF} function mbFileCreate(const FileName: String; ShareMode: Longint): System.THandle; {$IFDEF MSWINDOWS} begin Result:= mbFileCreate(FileName, ShareMode, 0); end; {$ELSE} begin {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} Result:= FileCreate(UTF8ToSys(FileName), ShareMode, 438); // 438 = 666 octal {$ELSE} Result:= FileCreate(UTF8ToSys(FileName), 438); // 438 = 666 octal {$ENDIF} end; {$ENDIF} function mbFileCreate(const FileName: String; ShareMode: Longint; Rights: Longint): System.THandle; {$IFDEF MSWINDOWS} begin Result:= CreateFileW(PWideChar(UTF8Decode(FileName)), GENERIC_READ or GENERIC_WRITE, ShareModes[(ShareMode and $F0) shr 4], nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); end; {$ELSE} begin {$IF (FPC_VERSION > 2) or ((FPC_VERSION = 2) and (FPC_RELEASE >= 5))} Result:= FileCreate(UTF8ToSys(FileName), ShareMode, Rights); {$ELSE} Result:= FileCreate(UTF8ToSys(FileName), Rights); {$ENDIF} end; {$ENDIF} function mbFileAge(const FileName: String): DCBasicTypes.TFileTime; {$IFDEF MSWINDOWS} var Handle: System.THandle; FindData: TWin32FindDataW; begin Handle := FindFirstFileW(PWideChar(UTF8Decode(FileName)), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then Exit(DCBasicTypes.TWinFileTime(FindData.ftLastWriteTime)); end; Result:= DCBasicTypes.TFileTime(-1); end; {$ELSE} var Info: BaseUnix.Stat; begin Result:= DCBasicTypes.TFileTime(-1); if fpStat(UTF8ToSys(FileName), Info) >= 0 then {$PUSH}{$R-} Result := Info.st_mtime; {$POP} end; {$ENDIF} function mbFileSame(const FirstName, SecondName: String): Boolean; {$IFDEF MSWINDOWS} var Handle: System.THandle; lpFirstFileInfo, lpSecondFileInfo: TByHandleFileInformation; begin // Read first file info Handle:= CreateFileW(PWideChar(UTF8Decode(FirstName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if Handle = INVALID_HANDLE_VALUE then Exit(False); Result:= GetFileInformationByHandle(Handle, lpFirstFileInfo); CloseHandle(Handle); if not Result then Exit; // Read second file info Handle:= CreateFileW(PWideChar(UTF8Decode(SecondName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); if Handle = INVALID_HANDLE_VALUE then Exit(False); Result:= GetFileInformationByHandle(Handle, lpSecondFileInfo); CloseHandle(Handle); if not Result then Exit; // Compare file info Result:= CompareByte(lpFirstFileInfo, lpSecondFileInfo, SizeOf(TByHandleFileInformation)) = 0; end; {$ELSE} var FirstStat, SecondStat: BaseUnix.Stat; begin // Read first file info if fpStat(UTF8ToSys(FirstName), FirstStat) < 0 then Exit(False); // Read second file info if fpStat(UTF8ToSys(SecondName), SecondStat) < 0 then Exit(False); // Compare file info Result:= (FirstStat.st_dev = SecondStat.st_dev) and (FirstStat.st_ino = SecondStat.st_ino); end; {$ENDIF} function mbFileGetTime(const FileName: String; var ModificationTime: DCBasicTypes.TFileTime; var CreationTime : DCBasicTypes.TFileTime; var LastAccessTime : DCBasicTypes.TFileTime): Boolean; {$IFDEF MSWINDOWS} var Handle: System.THandle; begin Handle := CreateFileW(PWideChar(UTF8Decode(FileName)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, // needed for opening directories 0); if Handle <> INVALID_HANDLE_VALUE then begin Result := Windows.GetFileTime(Handle, @CreationTime, @LastAccessTime, @ModificationTime); CloseHandle(Handle); end else Result := False; end; {$ELSE} var StatInfo : BaseUnix.Stat; begin Result := fpLStat(UTF8ToSys(FileName), StatInfo) >= 0; if Result then begin LastAccessTime := StatInfo.st_atime; ModificationTime := StatInfo.st_mtime; CreationTime := StatInfo.st_ctime; end; end; {$ENDIF} function mbFileSetTime(const FileName: String; ModificationTime: DCBasicTypes.TFileTime; CreationTime : DCBasicTypes.TFileTime = 0; LastAccessTime : DCBasicTypes.TFileTime = 0): Boolean; {$IFDEF MSWINDOWS} var Handle: System.THandle; PWinModificationTime: Windows.LPFILETIME = nil; PWinCreationTime: Windows.LPFILETIME = nil; PWinLastAccessTime: Windows.LPFILETIME = nil; begin Handle := CreateFileW(PWideChar(UTF8Decode(FileName)), FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, // needed for opening directories 0); if Handle <> INVALID_HANDLE_VALUE then begin if ModificationTime <> 0 then begin PWinModificationTime := @ModificationTime; end; if CreationTime <> 0 then begin PWinCreationTime := @CreationTime; end; if LastAccessTime <> 0 then begin PWinLastAccessTime := @LastAccessTime; end; Result := Windows.SetFileTime(Handle, PWinCreationTime, PWinLastAccessTime, PWinModificationTime); CloseHandle(Handle); end else Result := False; end; {$ELSE} var t: TUTimBuf; CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime: DCBasicTypes.TFileTime; begin if mbFileGetTime(FileName,CurrentModificationTime, CurrentCreationTime, CurrentLastAccessTime) then begin if LastAccessTime<>0 then t.actime := time_t(LastAccessTime) else t.actime := time_t(CurrentLastAccessTime); if ModificationTime<>0 then t.modtime := time_t(ModificationTime) else t.modtime := time_t(CurrentModificationTime); Result := (fputime(UTF8ToSys(FileName), @t) <> -1); end else begin Result:=False; end; end; {$ENDIF} function mbFileExists(const FileName: String) : Boolean; {$IFDEF MSWINDOWS} var Attr: DWORD; begin Attr:= GetFileAttributesW(PWideChar(UTF8Decode(FileName))); if Attr <> DWORD(-1) then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) = 0 else Result:=False; end; {$ELSE} var Info: BaseUnix.Stat; begin // Can use fpStat, because link to an existing filename can be opened as if it were a real file. if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result:= fpS_ISREG(Info.st_mode) else Result:= False; end; {$ENDIF} function mbFileAccess(const FileName: String; Mode: Word): Boolean; {$IFDEF MSWINDOWS} const AccessMode: array[0..2] of DWORD = ( GENERIC_READ, GENERIC_WRITE, GENERIC_READ or GENERIC_WRITE); var hFile: System.THandle; dwDesiredAccess: DWORD; dwShareMode: DWORD = 0; begin dwDesiredAccess := AccessMode[Mode and 3]; if Mode = fmOpenRead then // If checking Read mode no sharing mode given Mode := Mode or fmShareDenyNone; dwShareMode := ShareModes[(Mode and $F0) shr 4]; hFile:= CreateFileW(PWideChar(UTF8Decode(FileName)), dwDesiredAccess, dwShareMode, nil, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0); Result := hFile <> INVALID_HANDLE_VALUE; if Result then FileClose(hFile); end; {$ELSE} const AccessMode: array[0..2] of LongInt = ( R_OK, W_OK, R_OK or W_OK); begin Result:= fpAccess(UTF8ToSys(FileName), AccessMode[Mode and 3]) = 0; end; {$ENDIF} {$IFOPT R+} {$DEFINE uOSUtilsRangeCheckOn} {$R-} {$ENDIF} function mbFileGetAttr(const FileName: String): TFileAttrs; {$IFDEF MSWINDOWS} begin Result := GetFileAttributesW(PWideChar(UTF8Decode(FileName))); end; {$ELSE} var Info: BaseUnix.Stat; begin if fpLStat(UTF8ToSys(FileName), @Info) >= 0 then Result:= Info.st_mode else Result:= faInvalidAttributes; end; {$ENDIF} function mbFileSetAttr(const FileName: String; Attr: TFileAttrs): LongInt; {$IFDEF MSWINDOWS} begin if SetFileAttributesW(PWideChar(UTF8Decode(FileName)), Attr) then Result:= 0 else Result:= GetLastError; end; {$ELSE} begin Result:= fpchmod(UTF8ToSys(FileName), Attr); end; {$ENDIF} function mbFileGetAttr(const FileName: String; out Attr: TSearchRec): Boolean; {$IFDEF MSWINDOWS} var FileInfo: Windows.TWin32FileAttributeData; begin Result:= GetFileAttributesExW(PWideChar(UTF8Decode(FileName)), GetFileExInfoStandard, @FileInfo); if Result then begin WinToDosTime(FileInfo.ftLastWriteTime, Attr.Time); Int64Rec(Attr.Size).Lo:= FileInfo.nFileSizeLow; Int64Rec(Attr.Size).Hi:= FileInfo.nFileSizeHigh; Attr.Attr:= FileInfo.dwFileAttributes; end; end; {$ELSE} var StatInfo: BaseUnix.Stat; begin Result:= fpLStat(UTF8ToSys(FileName), StatInfo) >= 0; if Result then begin Attr.Time:= StatInfo.st_mtime; Attr.Size:= StatInfo.st_size; Attr.Attr:= StatInfo.st_mode; end; end; {$ENDIF} {$IFDEF uOSUtilsRangeCheckOn} {$R+} {$UNDEF uOSUtilsRangeCheckOn} {$ENDIF} function mbFileSetReadOnly(const FileName: String; ReadOnly: Boolean): Boolean; {$IFDEF MSWINDOWS} var iAttr: DWORD; wFileName: UnicodeString; begin wFileName:= UTF8Decode(FileName); iAttr := GetFileAttributesW(PWideChar(wFileName)); if iAttr = DWORD(-1) then Exit(False); if ReadOnly then iAttr:= iAttr or faReadOnly else iAttr:= iAttr and not faReadOnly; Result:= SetFileAttributesW(PWideChar(wFileName), iAttr) = True; end; {$ELSE} var StatInfo: BaseUnix.Stat; mode: TMode; begin if fpStat(UTF8ToSys(FileName), StatInfo) <> 0 then Exit(False); mode := SetModeReadOnly(StatInfo.st_mode, ReadOnly); Result:= fpchmod(UTF8ToSys(FileName), mode) = 0; end; {$ENDIF} function mbDeleteFile(const FileName: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= Windows.DeleteFileW(PWideChar(UTF8Decode(FileName))); end; {$ELSE} begin Result:= fpUnLink(UTF8ToSys(FileName)) = 0; end; {$ENDIF} function mbRenameFile(const OldName: String; NewName: String): Boolean; {$IFDEF MSWINDOWS} var wOldName, wNewName: UnicodeString; begin wOldName:= UTF8Decode(OldName); wNewName:= UTF8Decode(NewName); Result:= MoveFileExW(PWChar(wOldName), PWChar(wNewName), MOVEFILE_REPLACE_EXISTING); end; {$ELSE} var tmpFileName: String; OldFileStat, NewFileStat: stat; begin if GetPathType(NewName) <> ptAbsolute then NewName := ExtractFilePath(OldName) + NewName; if OldName = NewName then Exit(True); if fpLstat(UTF8ToSys(OldName), OldFileStat) <> 0 then Exit(False); // Check if target file exists. if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // Check if source and target are the same files (same inode and same device). if (OldFileStat.st_ino = NewFileStat.st_ino) and (OldFileStat.st_dev = NewFileStat.st_dev) then begin // Check number of links. // If it is 1 then source and target names most probably differ only // by case on a case-insensitive filesystem. Direct rename() in such case // fails on Linux, so we use a temporary file name and rename in two stages. // If number of links is more than 1 then it's enough to simply unlink // the source file, since both files are technically identical. // (On Linux rename() returns success but doesn't do anything // if renaming a file to its hard link.) // We cannot use st_nlink for directories because it means "number of // subdirectories"; hard links to directories are not supported on Linux // or Windows anyway (on MacOSX they are). Therefore we always treat // directories as if they were a single link and rename them using temporary name. if (NewFileStat.st_nlink = 1) or BaseUnix.fpS_ISDIR(NewFileStat.st_mode) then begin tmpFileName := GetTempName(OldName); if FpRename(UTF8ToSys(OldName), UTF8ToSys(tmpFileName)) = 0 then begin if fpLstat(UTF8ToSys(NewName), NewFileStat) = 0 then begin // We have renamed the old file but the new file name still exists, // so this wasn't a single file on a case-insensitive filesystem // accessible by two names that differ by case. FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. {$IFDEF DARWIN} // If it's a directory with multiple hard links then simply unlink the source. if BaseUnix.fpS_ISDIR(NewFileStat.st_mode) and (NewFileStat.st_nlink > 1) then Result := (fpUnLink(UTF8ToSys(OldName)) = 0) else {$ENDIF} Result := False; end else if FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(NewName)) = 0 then begin Result := True; end else begin FpRename(UTF8ToSys(tmpFileName), UTF8ToSys(OldName)); // Restore old file. Result := False; end; end else Result := False; end else begin // Multiple links - simply unlink the source file. Result := (fpUnLink(UTF8ToSys(OldName)) = 0); end; Exit; end; end; Result := FpRename(UTF8ToSys(OldName), UTF8ToSys(NewName)) = 0; end; {$ENDIF} function mbFileSize(const FileName: String): Int64; {$IFDEF MSWINDOWS} var Handle: System.THandle; FindData: TWin32FindDataW; begin Result:= 0; Handle := FindFirstFileW(PWideChar(UTF8Decode(FileName)), FindData); if Handle <> INVALID_HANDLE_VALUE then begin Windows.FindClose(Handle); if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then begin Int64Rec(Result).Lo:= FindData.nFileSizeLow; Int64Rec(Result).Hi:= FindData.nFileSizeHigh; end; end; end; {$ELSE} var Info: BaseUnix.Stat; begin Result:= 0; if fpStat(UTF8ToSys(FileName), Info) >= 0 then Result:= Info.st_size; end; {$ENDIF} function FileFlush(Handle: System.THandle): Boolean; {$IFDEF MSWINDOWS} begin Result:= FlushFileBuffers(Handle); end; {$ELSE} begin Result:= (fpfsync(Handle) = 0); end; {$ENDIF} function mbGetCurrentDir: String; {$IFDEF MSWINDOWS} var dwSize: DWORD; wsDir: UnicodeString; begin if Length(CurrentDirectory) > 0 then Result:= CurrentDirectory else begin dwSize:= GetCurrentDirectoryW(0, nil); if dwSize = 0 then Result:= EmptyStr else begin SetLength(wsDir, dwSize + 1); SetLength(wsDir, GetCurrentDirectoryW(dwSize, PWideChar(wsDir))); Result:= UTF16ToUTF8(wsDir); end; end; end; {$ELSE} begin GetDir(0, Result); Result := SysToUTF8(Result); end; {$ENDIF} function mbSetCurrentDir(const NewDir: String): Boolean; {$IFDEF MSWINDOWS} var Handle: THandle; wsNewDir: UnicodeString; FindData: TWin32FindDataW; NetResource: TNetResourceW; begin // Function WNetAddConnection2W works very slow // when the final character is a backslash ('\') wsNewDir:= UTF8Decode(ExcludeTrailingPathDelimiter(NewDir)); if Pos('\\', wsNewDir) = 1 then begin FillChar(NetResource, SizeOf(NetResource), #0); NetResource.dwType:= RESOURCETYPE_ANY; NetResource.lpRemoteName:= PWideChar(wsNewDir); WNetAddConnection2W(NetResource, nil, nil, CONNECT_INTERACTIVE); end; wsNewDir:= wsNewDir + DirectorySeparator + '*'; Handle:= FindFirstFileW(PWideChar(wsNewDir), FindData); Result:= (Handle <> INVALID_HANDLE_VALUE) or (GetLastError = ERROR_FILE_NOT_FOUND); if (Handle <> INVALID_HANDLE_VALUE) then FindClose(Handle); if Result then CurrentDirectory:= NewDir; end; {$ELSE} begin Result:= fpChDir(UTF8ToSys(NewDir)) = 0; end; {$ENDIF} function mbDirectoryExists(const Directory: String) : Boolean; {$IFDEF MSWINDOWS} var Attr: DWORD; begin Attr:= GetFileAttributesW(PWideChar(UTF8Decode(Directory))); if Attr <> DWORD(-1) then Result:= (Attr and FILE_ATTRIBUTE_DIRECTORY) > 0 else Result:= False; end; {$ELSE} var Info: BaseUnix.Stat; begin // We can use fpStat here instead of fpLstat, so that True is returned // when target is a directory or a link to an existing directory. // Note that same behaviour would be achieved by passing paths // that end with path delimiter to fpLstat. // Paths with links can be used the same way as if they were real directories. if fpStat(UTF8ToSys(Directory), Info) >= 0 then Result:= fpS_ISDIR(Info.st_mode) else Result:= False; end; {$ENDIF} function mbCreateDir(const NewDir: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= CreateDirectoryW(PWideChar(UTF8Decode(NewDir)), nil); end; {$ELSE} begin Result:= fpMkDir(UTF8ToSys(NewDir), $1FF) = 0; // $1FF = &0777 end; {$ENDIF} function mbRemoveDir(const Dir: String): Boolean; {$IFDEF MSWINDOWS} begin Result:= RemoveDirectoryW(PWideChar(UTF8Decode(Dir))); end; {$ELSE} begin Result:= fpRmDir(UTF8ToSys(Dir)) = 0; end; {$ENDIF} function mbFileSystemEntryExists(const Path: String): Boolean; begin Result := mbFileGetAttr(Path) <> faInvalidAttributes; end; function mbCompareFileNames(const FileName1, FileName2: String): Boolean; inline; {$IF DEFINED(WINDOWS) OR DEFINED(DARWIN)} begin Result:= (WideCompareText(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0); end; {$ELSE} begin Result:= (WideCompareStr(UTF8Decode(FileName1), UTF8Decode(FileName2)) = 0); end; {$ENDIF} function mbSameFile(const FileName1, FileName2: String): Boolean; {$IF DEFINED(MSWINDOWS)} var FileHandle1, FileHandle2: System.THandle; FileInfo1, FileInfo2: BY_HANDLE_FILE_INFORMATION; begin Result := mbCompareFileNames(FileName1, FileName2); if not Result then begin FileHandle1 := CreateFileW(PWideChar(UTF8Decode(FileName1)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); if FileHandle1 <> INVALID_HANDLE_VALUE then begin FileHandle2 := CreateFileW(PWideChar(UTF8Decode(FileName2)), FILE_READ_ATTRIBUTES, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, 0, 0); if FileHandle2 <> INVALID_HANDLE_VALUE then begin if GetFileInformationByHandle(FileHandle1, FileInfo1) and GetFileInformationByHandle(FileHandle2, FileInfo2) then begin // Check if both files have the same index on the same volume. // This check is valid only while both files are open. Result := (FileInfo1.dwVolumeSerialNumber = FileInfo2.dwVolumeSerialNumber) and (FileInfo1.nFileIndexHigh = FileInfo2.nFileIndexHigh) and (FileInfo1.nFileIndexLow = FileInfo2.nFileIndexLow); end; CloseHandle(FileHandle2); end; CloseHandle(FileHandle1); end end; end; {$ELSEIF DEFINED(UNIX)} var File1Stat, File2Stat: stat; begin Result := mbCompareFileNames(FileName1, FileName2) or ( (fpLstat(UTF8ToSys(FileName1), File1Stat) = 0) and (fpLstat(UTF8ToSys(FileName2), File2Stat) = 0) and (File1Stat.st_ino = File2Stat.st_ino) and (File1Stat.st_dev = File2Stat.st_dev) ); end; {$ENDIF} function mbGetEnvironmentString(Index: Integer): String; {$IFDEF MSWINDOWS} var hp, p: PWideChar; begin Result:= ''; p:= GetEnvironmentStringsW; hp:= p; if (hp <> nil) then begin while (hp^ <> #0) and (Index > 1) do begin Dec(Index); hp:= hp + lstrlenW(hp) + 1; end; if (hp^ <> #0) then Result:= UTF16ToUTF8(UnicodeString(hp)); end; FreeEnvironmentStringsW(p); end; {$ELSE} begin Result:= SysToUTF8(GetEnvironmentString(Index)); end; {$ENDIF} function mbExpandEnvironmentStrings(const FileName: String): String; {$IF DEFINED(MSWINDOWS)} var dwSize: DWORD; wsResult: UnicodeString; begin SetLength(wsResult, MAX_PATH + 1); dwSize:= ExpandEnvironmentStringsW(PWideChar(UTF8Decode(FileName)), PWideChar(wsResult), MAX_PATH); if (dwSize = 0) or (dwSize > MAX_PATH) then Result:= FileName else begin SetLength(wsResult, dwSize - 1); Result:= UTF16ToUTF8(wsResult); end; end; {$ELSE} var Index: Integer = 1; EnvCnt, EqualPos: Integer; EnvVar, EnvName, EnvValue: String; begin Result:= FileName; EnvCnt:= GetEnvironmentVariableCount; while (Index <= EnvCnt) and (Pos('$', Result) > 0) do begin EnvVar:= mbGetEnvironmentString(Index); EqualPos:= Pos('=', EnvVar); if EqualPos = 0 then Continue; EnvName:= Copy(EnvVar, 1, EqualPos - 1); EnvValue:= Copy(EnvVar, EqualPos + 1, MaxInt); Result:= StringReplace(Result, '$' + EnvName, EnvValue, [rfReplaceAll, rfIgnoreCase]); Inc(Index); end; end; {$ENDIF} function mbSysErrorMessage(ErrorCode: Integer): String; begin Result := CeSysToUtf8(SysErrorMessage(ErrorCode)); end; function mbLoadLibrary(const Name: String): TLibHandle; {$IFDEF MSWINDOWS} begin Result:= LoadLibraryW(PWideChar(UTF8Decode(Name))); end; {$ELSE} begin Result:= TLibHandle(dlopen(PChar(UTF8ToSys(Name)), RTLD_LAZY)); end; {$ENDIF} function SafeGetProcAddress(Lib: TLibHandle; const ProcName: AnsiString): Pointer; begin Result:= GetProcedureAddress(Lib, ProcName); if (Result = nil) then raise Exception.Create(ProcName); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcdatetimeutils.pas��������������������������������������������0000644�0001750�0000144�00000043336�12424773626�022557� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Date and time functions. Copyright (C) 2009-2012 Przemysław Nagay (cobines@gmail.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 DCDateTimeUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes {$IF DEFINED(MSWINDOWS)} , Windows {$ELSEIF DEFINED(UNIX)} , unixutil {$ENDIF} ; function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime; function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; {en Converts system specific UTC time to local time. } function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime; out LocalFileTime: DCBasicTypes.TFileTime): LongBool; {en Converts system specific local time to UTC time. } function LocalFileTimeToFileTime(const LocalFileTime: DCBasicTypes.TFileTime; out FileTime: DCBasicTypes.TFileTime): LongBool; {en Converts Windows UTC file time to Windows local file time. @param(lpFileTime TWinFileTime structure containing the UTC-based file time) @param(lpLocalFileTime TWinFileTime structure to receive the converted local file time) @returns(The function returns @true if successful, @false otherwise) } function WinFileTimeToLocalFileTime(const FileTime: TWinFileTime; out LocalFileTime: TWinFileTime): LongBool; {en Converts Windows local file time to Windows UTC file time. @param(lpLocalFileTime TWinFileTime structure that specifies the local file time) @param(lpFileTime TWinFileTime structure to receive the converted UTC-based file time) @returns(The function returns @true if successful, @false otherwise) } function WinLocalFileTimeToFileTime(const LocalFileTime: TWinFileTime; out FileTime: TWinFileTime): LongBool; {en Converts Windows UTC file time to a file time in TDateTime format. @param(ft TWinFileTime structure containing the UTC-based file time) @returns(File time in TDateTime format) } function WinFileTimeToDateTime(ft : TWinFileTime) : TDateTime; {en Converts a file time in TDateTime format to Windows UTC file time. @param(dt File time in TDateTime format) @returns(Windows UTC-based file time) } function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime; function DosFileTimeToDateTime(const DosTime: TDosFileTime): TDateTime; function DateTimeToDosFileTime(const DateTime: TDateTime): TDosFileTime; {$IFDEF MSWINDOWS} function WinFileTimeToDateTime(ft : Windows.FILETIME) : TDateTime; inline; overload; function WinToDosTime(const WinTime: Windows.FILETIME; var DosTime: TDosFileTime): LongBool; overload; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: Windows.FILETIME): LongBool; overload; function WinToDosTime(const WinTime: TWinFileTime; var DosTime: TDosFileTime): LongBool; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: TWinFileTime): LongBool; {$ENDIF} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; function DateTimeToUnixFileTime(DateTime: TDateTime) : TUnixFileTime; function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime; function GetTimeZoneBias: LongInt; {en Converts a month short name to month number. @param(ShortMonthName Month short name) @param(Default Default month number) @returns(Month number) } function MonthToNumberDef(const ShortMonthName: String; Default: Word): Word; {en Converts a year short record to year long record if need (10 -> 2010). @param(Year Year short record) @returns(Year long record) } function YearShortToLong(Year: Word): Word; function TwelveToTwentyFour(Hour: Word; Modifier: AnsiString): Word; function FileTimeCompare(SourceTime, TargetTime: TDateTime; NtfsShift: Boolean): Integer; type EDateOutOfRange = class(EConvertError) private FDateTime: TDateTime; public constructor Create(ADateTime: TDateTime); property DateTime: TDateTime read FDateTime; end; implementation uses DateUtils; const { Short names of months. } ShortMonthNames: TMonthNameArray = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'); SecsPerHour = SecsPerMin * MinsPerHour; {$IF DEFINED(MSWINDOWS)} var WinTimeZoneBias: LongInt; {$ENDIF} function AdjustUnixFileTime(const FileTime: DCBasicTypes.TFileTime; out AdjustedFileTime: DCBasicTypes.TFileTime; AdjustValue: Int64): Boolean; begin if AdjustValue < 0 then begin if FileTime < DCBasicTypes.TFileTime(-AdjustValue) then begin AdjustedFileTime := 0; Result := False; end else begin AdjustedFileTime := FileTime - DCBasicTypes.TFileTime(-AdjustValue); Result := True; end; end else begin if High(FileTime) - FileTime < DCBasicTypes.TFileTime(AdjustValue) then begin AdjustedFileTime := High(FileTime); Result := False; end else begin AdjustedFileTime := FileTime + DCBasicTypes.TFileTime(AdjustValue); Result := True; end; end; end; function AdjustWinFileTime(const FileTime: TWinFileTime; out AdjustedFileTime: TWinFileTime; AdjustValue: Int64): Boolean; begin if AdjustValue < 0 then begin if FileTime < DCBasicTypes.TWinFileTime(-AdjustValue) then begin AdjustedFileTime := 0; Result := False; end else begin AdjustedFileTime := FileTime - DCBasicTypes.TWinFileTime(-AdjustValue); Result := True; end; end else begin if High(FileTime) - FileTime < DCBasicTypes.TWinFileTime(AdjustValue) then begin AdjustedFileTime := High(FileTime); Result := False; end else begin AdjustedFileTime := FileTime + DCBasicTypes.TWinFileTime(AdjustValue); Result := True; end; end; end; function FileTimeToDateTime(FileTime : DCBasicTypes.TFileTime) : TDateTime; {$IF DEFINED(MSWINDOWS)} begin Result := WinFileTimeToDateTime(FileTime); end; {$ELSEIF DEFINED(UNIX)} var Hrs, Mins, Secs : Word; TodaysSecs : DCBasicTypes.TFileTime; begin FileTimeToLocalFileTime(FileTime, FileTime); TodaysSecs := FileTime mod SecsPerDay; Hrs := Word(TodaysSecs div SecsPerHour); TodaysSecs := TodaysSecs - (Hrs * SecsPerHour); Mins := Word(TodaysSecs div SecsPerMin); Secs := Word(TodaysSecs - (Mins * SecsPerMin)); Result := UnixEpoch + // Epoch start + (FileTime div SecsPerDay) + // Number of days + EncodeTime(Hrs, Mins, Secs, 0); // Time end; {$ELSE} begin Result := 0; end; {$ENDIF} function DateTimeToFileTime(DateTime : TDateTime) : DCBasicTypes.TFileTime; {$IF DEFINED(MSWINDOWS)} begin Result := DateTimeToWinFileTime(DateTime); end; {$ELSEIF DEFINED(UNIX)} var Hrs, Mins, Secs, MSecs : Word; Dt, Tm : TDateTime; BigTime: QWord; begin Dt := Trunc(DateTime); Tm := DateTime - Dt; if Dt < UnixEpoch then raise EDateOutOfRange.Create(DateTime) else {$PUSH}{$Q-} BigTime := Trunc(Dt - UnixEpoch) * SecsPerDay; {$POP} DecodeTime(Tm, Hrs, Mins, Secs, MSecs); {$PUSH}{$Q-} BigTime := BigTime + QWord(Hrs * SecsPerHour) + QWord(Mins * SecsPerMin) + Secs; {$POP} {$IFDEF cpu32} if BigTime > High(DCBasicTypes.TFileTime) then raise EDateOutOfRange.Create(DateTime) else {$ENDIF} LocalFileTimeToFileTime(BigTime, Result); end; {$ELSE} begin Result := 0; end; {$ENDIF} function FileTimeToLocalFileTime(const FileTime: DCBasicTypes.TFileTime; out LocalFileTime: DCBasicTypes.TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.FileTimeToLocalFileTime(@Windows.FILETIME(FileTime), @Windows.FILETIME(LocalFileTime)); end; {$ELSE} begin Result := AdjustUnixFileTime(FileTime, LocalFileTime, Tzseconds); end; {$ENDIF} function LocalFileTimeToFileTime(const LocalFileTime: DCBasicTypes.TFileTime; out FileTime: DCBasicTypes.TFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.LocalFileTimeToFileTime(@Windows.FILETIME(LocalFileTime), @Windows.FILETIME(FileTime)); end; {$ELSE} begin Result := AdjustUnixFileTime(LocalFileTime, FileTime, -Tzseconds); end; {$ENDIF} function WinFileTimeToLocalFileTime(const FileTime: TWinFileTime; out LocalFileTime: TWinFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.FileTimeToLocalFileTime(@Windows.FILETIME(FileTime), @Windows.FILETIME(LocalFileTime)); end; {$ELSE} begin Result := AdjustWinFileTime(FileTime, LocalFileTime, 10000000 * Int64(TZSeconds)); end; {$ENDIF} function WinLocalFileTimeToFileTime(const LocalFileTime: TWinFileTime; out FileTime: TWinFileTime): LongBool; {$IFDEF MSWINDOWS} begin Result := Windows.LocalFileTimeToFileTime(@Windows.FILETIME(LocalFileTime), @Windows.FILETIME(FileTime)); end; {$ELSE} begin Result := AdjustWinFileTime(LocalFileTime, FileTime, -10000000 * Int64(TZSeconds)); end; {$ENDIF} function WinFileTimeToDateTime(ft : TWinFileTime) : TDateTime; begin WinFileTimeToLocalFileTime(ft,ft); Result := (ft / 864000000000.0) - 109205.0; end; function DateTimeToWinFileTime(dt : TDateTime) : TWinFileTime; begin Result := Round((Extended(dt) + 109205.0) * 864000000000.0); WinLocalFileTimeToFileTime(Result, Result); end; function DosFileTimeToDateTime(const DosTime: TDosFileTime): TDateTime; var Yr, Mo, Dy : Word; Hr, Mn, S : Word; FileDate, FileTime : Word; begin FileDate := LongRec(DosTime).Hi; FileTime := LongRec(DosTime).Lo; Yr := FileDate shr 9 + 1980; Mo := FileDate shr 5 and 15; if Mo < 1 then Mo := 1; if Mo > 12 then Mo := 12; Dy := FileDate and 31; if Dy < 1 then Dy := 1; if Dy > DaysInAMonth(Yr, Mo) then Dy := DaysInAMonth(Yr, Mo); Hr := FileTime shr 11; if Hr > 23 then Hr := 23; Mn := FileTime shr 5 and 63; if Mn > 59 then Mn := 59; S := FileTime and 31 shl 1; if S > 59 then S := 59; Result := ComposeDateTime(EncodeDate(Yr, Mo, Dy), EncodeTime(Hr, Mn, S, 0)); end; function DateTimeToDosFileTime(const DateTime: TDateTime): TDosFileTime; var Yr, Mo, Dy : Word; Hr, Mn, S, MS: Word; begin DecodeDate(DateTime, Yr, Mo, Dy); if (Yr < 1980) or (Yr > 2107) then // outside DOS file date year range Yr := 1980; DecodeTime(DateTime, Hr, Mn, S, MS); LongRec(Result).Lo := (S shr 1) or (Mn shl 5) or (Hr shl 11); LongRec(Result).Hi := Dy or (Mo shl 5) or (Word(Yr - 1980) shl 9); end; {$IFDEF MSWINDOWS} function WinFileTimeToDateTime(ft : Windows.FILETIME) : TDateTime; begin Result := WinFileTimeToDateTime(TWinFileTime(ft)); end; function WinToDosTime(const WinTime: Windows.FILETIME; var DosTime: TDosFileTime): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: Windows.FILETIME): LongBool; var lft : Windows.TFILETIME; begin Result := Windows.DosDateTimeToFileTime(LongRec(DosTime).Hi, LongRec(DosTime).Lo, @lft) and Windows.LocalFileTimeToFileTime(@lft, @Windows.FILETIME(WinTime)); end; function WinToDosTime(const WinTime: TWinFileTime; var DosTime: TDosFileTime): LongBool; var lft : Windows.TFILETIME; begin Result:= Windows.FileTimeToLocalFileTime(@Windows.FILETIME(WinTime), @lft) and Windows.FileTimeToDosDateTime(@lft, @LongRec(Dostime).Hi, @LongRec(DosTime).Lo); end; function DosToWinTime(const DosTime: TDosFileTime; var WinTime: TWinFileTime): LongBool; var lft : Windows.TFILETIME; begin Result := Windows.DosDateTimeToFileTime(LongRec(DosTime).Hi, LongRec(DosTime).Lo, @lft) and Windows.LocalFileTimeToFileTime(@lft, @Windows.FILETIME(WinTime)); end; {$ENDIF} function UnixFileTimeToDateTime(UnixTime: TUnixFileTime) : TDateTime; var Hrs, Mins, Secs : Word; TodaysSecs : LongInt; {$IFDEF MSWINDOWS} LocalWinFileTime, WinFileTime: TWinFileTime; {$ENDIF} {$IFDEF UNIX} LocalUnixTime: TUnixFileTime; {$ENDIF} begin {$IFDEF UNIX} if FileTimeToLocalFileTime(UnixTime, LocalUnixTime) then UnixTime := LocalUnixTime; {$ENDIF} TodaysSecs := UnixTime mod SecsPerDay; Hrs := TodaysSecs div SecsPerHour; TodaysSecs := TodaysSecs - (Hrs * SecsPerHour); Mins := TodaysSecs div SecsPerMin; Secs := TodaysSecs - (Mins * SecsPerMin); Result := UnixDateDelta + (UnixTime div SecsPerDay) + EncodeTime(Hrs, Mins, Secs, 0); {$IFDEF MSWINDOWS} // Convert universal to local TDateTime. WinFileTime := DateTimeToWinFileTime(Result); if FileTimeToLocalFileTime(WinFileTime, LocalWinFileTime) then WinFileTime := LocalWinFileTime; Result := WinFileTimeToDateTime(WinFileTime); {$ENDIF} end; function DateTimeToUnixFileTime(DateTime : TDateTime): TUnixFileTime; var Hrs, Mins, Secs, MSecs : Word; Dt, Tm : TDateTime; {$IFDEF MSWINDOWS} LocalWinFileTime, WinFileTime: TWinFileTime; {$ENDIF} {$IFDEF UNIX} UnixTime: TUnixFileTime; {$ENDIF} begin {$IFDEF MSWINDOWS} // Convert local to universal TDateTime. LocalWinFileTime := DateTimeToWinFileTime(DateTime); if LocalFileTimeToFileTime(LocalWinFileTime, WinFileTime) then LocalWinFileTime := WinFileTime; DateTime := WinFileTimeToDateTime(LocalWinFileTime); {$ENDIF} Dt := Trunc(DateTime); Tm := DateTime - Dt; if Dt < UnixDateDelta then Result := 0 else Result := Trunc(Dt - UnixDateDelta) * SecsPerDay; DecodeTime(Tm, Hrs, Mins, Secs, MSecs); Result := Result + (Hrs * SecsPerHour) + (Mins * SecsPerMin) + Secs; {$IFDEF UNIX} if LocalFileTimeToFileTime(Result, UnixTime) then Result := UnixTime; {$ENDIF} end; function UnixFileTimeToDosTime(UnixTime: TUnixFileTime): TDosFileTime; begin Result := DateTimeToDosFileTime(UnixFileTimeToDateTime(UnixTime)); end; function UnixFileTimeToWinTime(UnixTime: TUnixFileTime): TWinFileTime; var WinFileTime: TWinFileTime; begin WinFileTime := $019DB1DED53E8000; // Unix epoch start if not AdjustWinFileTime(WinFileTime, Result, 10000000 * Int64(UnixTime)) then Result := WinFileTime; end; function GetTimeZoneBias: LongInt; begin {$IF DEFINED(MSWINDOWS)} Result := WinTimeZoneBias; {$ELSEIF DEFINED(UNIX)} Result := -Tzseconds div 60; {$ELSE} Result := 0; {$ENDIF} end; function MonthToNumberDef(const ShortMonthName: String; Default: Word): Word; var I: Word; begin Result:= Default; if ShortMonthName = EmptyStr then Exit; for I:= 1 to 12 do if SameText(ShortMonthName, ShortMonthNames[I]) then Exit(I); end; function YearShortToLong(Year: Word): Word; begin Result:= Year; if (Year < 100) then begin if (Year < 80) then Result:= Year + 2000 else Result:= Year + 1900; end; end; function TwelveToTwentyFour(Hour: Word; Modifier: AnsiString): Word; begin if Modifier = EmptyStr then Exit(Hour); case LowerCase(Modifier[1]) of 'a': begin if (Hour = 12) then Result:= 0; end; 'p': begin if (Hour < 12) then Result:= Hour + 12; end; end; end; function FileTimeCompare(SourceTime, TargetTime: TDateTime; NtfsShift: Boolean): Integer; const TimeDiff = 3100 / MSecsPerDay; NtfsDiff = MinsPerHour * SecsPerMin; var FileTimeDiff, NtfsTimeDiff: TDateTime; begin FileTimeDiff:= SourceTime - TargetTime; if NtfsShift then begin NtfsTimeDiff:= FileTimeDiff - NtfsDiff; if (NtfsTimeDiff > -TimeDiff) and (NtfsTimeDiff < TimeDiff) then Exit(0); NtfsTimeDiff:= FileTimeDiff + NtfsDiff; if (NtfsTimeDiff > -TimeDiff) and (NtfsTimeDiff < TimeDiff) then Exit(0); end; if (FileTimeDiff > -TimeDiff) and (FileTimeDiff < TimeDiff) then Result:= 0 else if FileTimeDiff > 0 then Result:= +1 else if FileTimeDiff < 0 then Result:= -1; end; { EDateOutOfRange } constructor EDateOutOfRange.Create(ADateTime: TDateTime); begin inherited Create(EmptyStr); FDateTime := ADateTime; end; {$IF DEFINED(MSWINDOWS)} procedure InitTimeZoneBias; var TZInfo: TTimeZoneInformation; begin case GetTimeZoneInformation(@TZInfo) of TIME_ZONE_ID_UNKNOWN: WinTimeZoneBias := TZInfo.Bias; TIME_ZONE_ID_STANDARD: WinTimeZoneBias := TZInfo.Bias + TZInfo.StandardBias; TIME_ZONE_ID_DAYLIGHT: WinTimeZoneBias := TZInfo.Bias + TZInfo.DaylightBias; else WinTimeZoneBias := 0; end; end; initialization InitTimeZoneBias; {$ENDIF} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcfileattributes.pas�������������������������������������������0000644�0001750�0000144�00000023775�12422245751�022724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Functions handling file attributes. Copyright (C) 2012 Przemysław Nagay (cobines@gmail.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 DCFileAttributes; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCBasicTypes; const // Windows attributes FILE_ATTRIBUTE_READONLY = $0001; FILE_ATTRIBUTE_HIDDEN = $0002; FILE_ATTRIBUTE_SYSTEM = $0004; FILE_ATTRIBUTE_DIRECTORY = $0010; FILE_ATTRIBUTE_ARCHIVE = $0020; FILE_ATTRIBUTE_NORMAL = $0080; FILE_ATTRIBUTE_TEMPORARY = $0100; FILE_ATTRIBUTE_SPARSE_FILE = $0200; FILE_ATTRIBUTE_REPARSE_POINT = $0400; FILE_ATTRIBUTE_COMPRESSED = $0800; FILE_ATTRIBUTE_OFFLINE = $1000; FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = $2000; FILE_ATTRIBUTE_ENCRYPTED = $4000; FILE_ATTRIBUTE_VIRTUAL = $20000; // Unix attributes { attributes mask } S_IFMT = $F000; { first-in/first-out (FIFO/pipe) } S_IFIFO = $1000; { character-special file (tty/console) } S_IFCHR = $2000; { directory } S_IFDIR = $4000; { blocking device (unused) } S_IFBLK = $6000; { regular } S_IFREG = $8000; { symbolic link (unused) } S_IFLNK = $A000; { Berkeley socket } S_IFSOCK = $C000; { mode_t possible values } S_IRUSR = %0100000000; { Read permission for owner } S_IWUSR = %0010000000; { Write permission for owner } S_IXUSR = %0001000000; { Exec permission for owner } S_IRGRP = %0000100000; { Read permission for group } S_IWGRP = %0000010000; { Write permission for group } S_IXGRP = %0000001000; { Exec permission for group } S_IROTH = %0000000100; { Read permission for world } S_IWOTH = %0000000010; { Write permission for world } S_IXOTH = %0000000001; { Exec permission for world } S_IRWXU = S_IRUSR or S_IWUSR or S_IXUSR; S_IRWXG = S_IRGRP or S_IWGRP or S_IXGRP; S_IRWXO = S_IROTH or S_IWOTH or S_IXOTH; { POSIX setuid(), setgid(), and sticky bit } S_ISUID = $0800; S_ISGID = $0400; S_ISVTX = $0200; function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs; function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs; function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs; function SingleStrToFileAttr(sAttr: String): TFileAttrs; function WinSingleStrToFileAttr(sAttr: String): TFileAttrs; function UnixSingleStrToFileAttr(sAttr: String): TFileAttrs; {en Convert file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function StrToFileAttr(sAttr: String): TFileAttrs; {en Convert file attributes to string in the format of "attr1+attr2+attr3+". @param(Attributes File attributes) @returns(File attributes as string) } function FileAttrToStr(Attr: TFileAttrs): String; {en Convert Windows file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function WinStrToFileAttr(sAttr: String): TFileAttrs; {en Convert Unix file attributes from string to number @param(Attributes File attributes as string) @returns(File attributes as number) } function UnixStrToFileAttr(sAttr: String): TFileAttrs; implementation uses DCStrUtils; type TAttrStrToFileAttr = record Str: String; Attr: TFileAttrs; end; const WinAttrStrToFileAttr: array[0..9] of TAttrStrToFileAttr = ( (Str: 'r'; Attr: FILE_ATTRIBUTE_READONLY), (Str: 'h'; Attr: FILE_ATTRIBUTE_HIDDEN), (Str: 's'; Attr: FILE_ATTRIBUTE_SYSTEM), (Str: 'd'; Attr: FILE_ATTRIBUTE_DIRECTORY), (Str: 'a'; Attr: FILE_ATTRIBUTE_ARCHIVE), (Str: 't'; Attr: FILE_ATTRIBUTE_TEMPORARY), (Str: 'p'; Attr: FILE_ATTRIBUTE_SPARSE_FILE), (Str: 'l'; Attr: FILE_ATTRIBUTE_REPARSE_POINT), (Str: 'c'; Attr: FILE_ATTRIBUTE_COMPRESSED), (Str: 'e'; Attr: FILE_ATTRIBUTE_ENCRYPTED)); UnixAttrStrToFileAttr: array[0..18] of TAttrStrToFileAttr = ( // Permissions (Str: 'ur'; Attr: S_IRUSR), (Str: 'uw'; Attr: S_IWUSR), (Str: 'ux'; Attr: S_IXUSR), (Str: 'gr'; Attr: S_IRGRP), (Str: 'gw'; Attr: S_IWGRP), (Str: 'gx'; Attr: S_IXGRP), (Str: 'or'; Attr: S_IROTH), (Str: 'ow'; Attr: S_IWOTH), (Str: 'ox'; Attr: S_IXOTH), (Str: 'us'; Attr: S_ISUID), (Str: 'gs'; Attr: S_ISGID), (Str: 'sb'; Attr: S_ISVTX), // File types (Str: 'f'; Attr: S_IFIFO), (Str: 'c'; Attr: S_IFCHR), (Str: 'd'; Attr: S_IFDIR), (Str: 'b'; Attr: S_IFBLK), (Str: 'r'; Attr: S_IFREG), (Str: 'l'; Attr: S_IFLNK), (Str: 's'; Attr: S_IFSOCK)); function WinToUnixFileAttr(Attr: TFileAttrs): TFileAttrs; begin Result := S_IRUSR or S_IRGRP or S_IROTH; if (Attr and faReadOnly) = 0 then Result := Result or S_IWUSR; if (Attr and faDirectory) <> 0 then Result := Result or S_IFDIR else Result := Result or S_IFREG; end; function UnixToWinFileAttr(Attr: TFileAttrs): TFileAttrs; begin Result := 0; case (Attr and S_IFMT) of 0, S_IFREG: Result := faArchive; S_IFLNK: Result := Result or faSymLink; S_IFDIR: Result := Result or faDirectory; S_IFIFO, S_IFCHR, S_IFBLK, S_IFSOCK: Result := Result or faSysFile; end; if (Attr and S_IWUSR) = 0 then Result := Result or faReadOnly; end; function UnixToWinFileAttr(const FileName: String; Attr: TFileAttrs): TFileAttrs; begin Result := UnixToWinFileAttr(Attr); if (Length(FileName) > 1) and (FileName[1] = '.') and (FileName[2] <> '.') then Result := Result or faHidden; end; function SingleStrToFileAttr(sAttr: String): TFileAttrs; begin {$IF DEFINED(MSWINDOWS)} Result := WinSingleStrToFileAttr(sAttr); {$ELSEIF DEFINED(UNIX)} Result := UnixSingleStrToFileAttr(sAttr); {$ENDIF} end; function WinSingleStrToFileAttr(sAttr: String): TFileAttrs; var i: Integer; begin for i := Low(WinAttrStrToFileAttr) to High(WinAttrStrToFileAttr) do begin if sAttr = WinAttrStrToFileAttr[i].Str then Exit(WinAttrStrToFileAttr[i].Attr); end; Result := 0; end; function UnixSingleStrToFileAttr(sAttr: String): TFileAttrs; var i: Integer; begin if Length(sAttr) > 0 then begin if sAttr[1] in ['0'..'7'] then begin // Octal representation. Exit(TFileAttrs(OctToDec(sAttr))); end else begin for i := Low(UnixAttrStrToFileAttr) to High(UnixAttrStrToFileAttr) do begin if sAttr = UnixAttrStrToFileAttr[i].Str then Exit(UnixAttrStrToFileAttr[i].Attr); end; end; end; Result := 0; end; function StrToFileAttr(sAttr: String): TFileAttrs; inline; begin {$IF DEFINED(MSWINDOWS)} Result := WinStrToFileAttr(sAttr); {$ELSEIF DEFINED(UNIX)} Result := UnixStrToFileAttr(sAttr); {$ENDIF} end; function FileAttrToStr(Attr: TFileAttrs): String; var i: Integer; begin Result := ''; {$IF DEFINED(MSWINDOWS)} for i := Low(WinAttrStrToFileAttr) to High(WinAttrStrToFileAttr) do begin if Attr and WinAttrStrToFileAttr[i].Attr <> 0 then Result := Result + WinAttrStrToFileAttr[i].Str + '+'; end; {$ELSEIF DEFINED(UNIX)} for i := Low(UnixAttrStrToFileAttr) to High(UnixAttrStrToFileAttr) do begin if Attr and UnixAttrStrToFileAttr[i].Attr <> 0 then Result := Result + UnixAttrStrToFileAttr[i].Str + '+'; end; {$ENDIF} end; function WinStrToFileAttr(sAttr: String): TFileAttrs; var I: LongInt; begin Result:= 0; sAttr:= LowerCase(sAttr); for I:= 1 to Length(sAttr) do case sAttr[I] of 'd': Result := Result or FILE_ATTRIBUTE_DIRECTORY; 'l': Result := Result or FILE_ATTRIBUTE_REPARSE_POINT; 'r': Result := Result or FILE_ATTRIBUTE_READONLY; 'a': Result := Result or FILE_ATTRIBUTE_ARCHIVE; 'h': Result := Result or FILE_ATTRIBUTE_HIDDEN; 's': Result := Result or FILE_ATTRIBUTE_SYSTEM; end; end; function UnixStrToFileAttr(sAttr: String): TFileAttrs; begin Result:= 0; if Length(sAttr) < 10 then Exit; if sAttr[1] = 'd' then Result:= Result or S_IFDIR; if sAttr[1] = 'l' then Result:= Result or S_IFLNK; if sAttr[1] = 's' then Result:= Result or S_IFSOCK; if sAttr[1] = 'f' then Result:= Result or S_IFIFO; if sAttr[1] = 'b' then Result:= Result or S_IFBLK; if sAttr[1] = 'c' then Result:= Result or S_IFCHR; if sAttr[2] = 'r' then Result:= Result or S_IRUSR; if sAttr[3] = 'w' then Result:= Result or S_IWUSR; if sAttr[4] = 'x' then Result:= Result or S_IXUSR; if sAttr[5] = 'r' then Result:= Result or S_IRGRP; if sAttr[6] = 'w' then Result:= Result or S_IWGRP; if sAttr[7] = 'x' then Result:= Result or S_IXGRP; if sAttr[8] = 'r' then Result:= Result or S_IROTH; if sAttr[9] = 'w' then Result:= Result or S_IWOTH; if sAttr[10] = 'x' then Result:= Result or S_IXOTH; if sAttr[4] = 'S' then Result:= Result or S_ISUID; if sAttr[7] = 'S' then Result:= Result or S_ISGID; if sAttr[10] = 'T' then Result:= Result or S_ISVTX; if sAttr[4] = 's' then Result:= Result or S_IXUSR or S_ISUID; if sAttr[7] = 's' then Result:= Result or S_IXGRP or S_ISGID; if sAttr[10] = 't' then Result:= Result or S_IXOTH or S_ISVTX; end; end. ���doublecmd-0.7.1/components/doublecmd/dcxmlconfig.pas������������������������������������������������0000644�0001750�0000144�00000061576�12625644723�021674� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Implementation of configuration file in XML. Based on XmlConf from fcl-xml package. Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.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 DCXmlConfig; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DOM, XMLRead, XMLWrite; type // Define type aliases so we don't have to include DOM if we want to use config. TXmlNode = TDOMNode; TXmlPath = DOMString; { TXmlConfig } TXmlConfig = class private FFileName: String; FDoc: TXMLDocument; function GetRootNode: TXmlNode; procedure SplitPathToNodeAndAttr(const Path: DOMString; out NodePath: DOMString; out AttrName: DOMString); public constructor Create; virtual; constructor Create(const AFileName: String; AutoLoad: Boolean = False); virtual; destructor Destroy; override; procedure Clear; function AddNode(const RootNode: TDOMNode; const ValueName: DOMString): TDOMNode; procedure DeleteNode(const RootNode: TDOMNode; const Path: DOMString); procedure DeleteNode(const Node: TDOMNode); procedure ClearNode(const Node: TDOMNode); function FindNode(const RootNode: TDOMNode; const Path: DOMString; bCreate: Boolean = False): TDOMNode; function GetContent(const Node: TDOMNode): String; function IsEmpty: Boolean; procedure SetContent(const Node: TDOMNode; const AValue: String); // ------------------------------------------------------------------------ function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; function GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; function GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; // The Try... functions return True if the attribute/node was found and only then set AValue. function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; function TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; function TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; // ------------------------------------------------------------------------ // AddValue functions always add a new node. procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: String); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Boolean); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Integer); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Int64); procedure AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Double); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: String); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Boolean); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Integer); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Int64); procedure AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Double); // SetValue functions can only set values for unique paths. procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); procedure SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); procedure SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); // ------------------------------------------------------------------------ procedure GetFont(const aNode: TXmlNode; Path: TXmlPath; out Name: String; out Size: Integer; out Style, Quality: Integer; const DefName: String; const DefSize: Integer; const DefStyle, DefQuality: Integer); procedure SetFont(const aNode: TXmlNode; Path: TXmlPath; const Name: String; const Size: Integer; const Style, Quality: Integer); // ------------------------------------------------------------------------ procedure ReadFromFile(const AFilename: String); procedure ReadFromStream(AStream: TStream); procedure WriteToFile(const AFilename: String); procedure WriteToStream(AStream: TStream); function Load: Boolean; function LoadBypassingErrors: Boolean; function Save: Boolean; {en Get path of form "<RootNodeName>/<Child1NodeName>/<Child2NodeName>...". } function GetPathFromNode(aNode: TDOMNode): String; property FileName: String read FFileName write FFileName; property RootNode: TXmlNode read GetRootNode; end; EXmlConfigEmpty = class(EFilerError); EXmlConfigNotFound = class(EFilerError); implementation uses LazUTF8, LazLogger, DCOSUtils, DCClassesUtf8, URIParser; const BoolStrings: array[Boolean] of DOMString = ('False', 'True'); constructor TXmlConfig.Create; begin Clear; end; constructor TXmlConfig.Create(const AFileName: String; AutoLoad: Boolean); begin FFileName := AFileName; if not (AutoLoad and LoadBypassingErrors) then Clear; end; destructor TXmlConfig.Destroy; begin FreeAndNil(FDoc); inherited Destroy; end; procedure TXmlConfig.Clear; begin FreeAndNil(FDoc); FDoc := TXMLDocument.Create; FDoc.AppendChild(FDoc.CreateElement(ApplicationName)); end; function TXmlConfig.GetRootNode: TXmlNode; begin Result := FDoc.DocumentElement; end; // ------------------------------------------------------------------------ function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.GetAttr(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; begin if not TryGetAttr(RootNode, Path, Result) then Result := ADefault; end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; var Node: TDOMNode; Attr: TDOMAttr; NodePath, AttrName: DOMString; begin SplitPathToNodeAndAttr(Path, NodePath, AttrName); if NodePath <> EmptyWideStr then begin Node := FindNode(RootNode, NodePath, False); if not Assigned(Node) then Exit(False); end else Node := RootNode; Attr := TDOMElement(Node).GetAttributeNode(AttrName); Result := Assigned(Attr); if Result then AValue := UTF16ToUTF8(Attr.Value); end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue); if Result then begin if SameText(sValue, 'TRUE') then AValue := True else if SameText(sValue, 'FALSE') then AValue := False else Result := False; // If other text then return not found. end; end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToInt(sValue, AValue); end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToInt64(sValue, AValue); end; function TXmlConfig.TryGetAttr(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; var sValue: String; begin Result := TryGetAttr(RootNode, Path, sValue) and TryStrToFloat(sValue, AValue); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: String): String; var Node: TDOMNode; begin Node := FindNode(RootNode, Path, False); if Assigned(Node) then Result := UTF16ToUTF8(Node.TextContent) else Result := ADefault; end; function TXmlConfig.IsEmpty: Boolean; begin Result := RootNode.ChildNodes.Count = 0; end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Boolean): Boolean; var sValue: String; begin sValue := GetValue(RootNode, Path, ''); if SameText(sValue, 'TRUE') then Result := True else if SameText(sValue, 'FALSE') then Result := False else Result := ADefault; end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Integer): Integer; begin Result := StrToIntDef(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Int64): Int64; begin Result := StrToInt64Def(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.GetValue(const RootNode: TDOMNode; const Path: DOMString; const ADefault: Double): Double; begin Result := StrToFloatDef(GetValue(RootNode, Path, ''), ADefault); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: String): Boolean; var Node: TDOMNode; begin Node := FindNode(RootNode, Path, False); Result := Assigned(Node); if Result then AValue := UTF16ToUTF8(Node.TextContent); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Boolean): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue); if Result then begin if SameText(sValue, 'TRUE') then AValue := True else if SameText(sValue, 'FALSE') then AValue := False else Result := False; // If other text then return not found. end; end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Integer): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToInt(sValue, AValue); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Int64): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToInt64(sValue, AValue); end; function TXmlConfig.TryGetValue(const RootNode: TDOMNode; const Path: DOMString; out AValue: Double): Boolean; var sValue: String; begin Result := TryGetValue(RootNode, Path, sValue) and TryStrToFloat(sValue, AValue); end; // ---------------------------------------------------------------------------- procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: String); var Node: TDOMNode; begin Node := RootNode.AppendChild(FDoc.CreateElement(ValueName)); Node.TextContent := UTF8ToUTF16(AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Boolean); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Double); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Int64); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: Integer); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValueDef(const RootNode: TDOMNode; const ValueName: DOMString; const AValue, DefaultValue: String); begin if AValue <> DefaultValue then AddValue(RootNode, ValueName, AValue); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Boolean); begin AddValue(RootNode, ValueName, BoolStrings[AValue]); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Integer); begin AddValue(RootNode, ValueName, IntToStr(AValue)); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Int64); begin AddValue(RootNode, ValueName, IntToStr(AValue)); end; procedure TXmlConfig.AddValue(const RootNode: TDOMNode; const ValueName: DOMString; const AValue: Double); begin AddValue(RootNode, ValueName, FloatToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); var Node: TDOMNode; NodePath, AttrName: DOMString; begin SplitPathToNodeAndAttr(Path, NodePath, AttrName); if NodePath <> EmptyWideStr then begin Node := FindNode(RootNode, NodePath, True); TDOMElement(Node)[AttrName] := UTF8ToUTF16(AValue); end else TDOMElement(RootNode)[AttrName] := UTF8ToUTF16(AValue); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); begin SetAttr(RootNode, Path, BoolStrings[AValue]); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); begin SetAttr(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); begin SetAttr(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetAttr(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); begin SetAttr(RootNode, Path, FloatToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: String); var Node: TDOMNode; begin Node := FindNode(RootNode, Path, True); Node.TextContent := UTF8ToUTF16(AValue); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Boolean); begin SetValue(RootNode, Path, BoolStrings[AValue]); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Integer); begin SetValue(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Int64); begin SetValue(RootNode, Path, IntToStr(AValue)); end; procedure TXmlConfig.SetValue(const RootNode: TDOMNode; const Path: DOMString; const AValue: Double); begin SetValue(RootNode, Path, FloatToStr(AValue)); end; // ---------------------------------------------------------------------------- procedure TXmlConfig.ReadFromFile(const AFilename: String); var FileStream: TStream; TmpDoc: TXMLDocument; begin FileStream := TFileStreamEx.Create(AFilename, fmOpenRead or fmShareDenyWrite); try if FileStream.Size = 0 then raise EXmlConfigEmpty.Create(''); ReadXMLFile(TmpDoc, FileStream, FilenameToURI(AFilename)); if TmpDoc.DocumentElement.NodeName <> ApplicationName then raise EXMLReadError.Create('Root element is not <' + ApplicationName + '>.'); FDoc.Free; FDoc := TmpDoc; finally FileStream.Free; end; end; procedure TXmlConfig.ReadFromStream(AStream: TStream); var TmpDoc: TXMLDocument; begin if AStream.Size = 0 then raise EXmlConfigEmpty.Create(''); ReadXMLFile(TmpDoc, AStream); FDoc.Free; FDoc := TmpDoc; end; procedure TXmlConfig.WriteToFile(const AFilename: String); var FileStream: TStream; begin FileStream := TFileStreamEx.Create(AFilename, fmCreate or fmShareDenyWrite); try WriteToStream(FileStream); finally FileStream.Free; end; end; procedure TXmlConfig.WriteToStream(AStream: TStream); var Position: Int64; MemoryStream: TMemoryStream; begin MemoryStream:= TMemoryStream.Create; try WriteXMLFile(FDoc, MemoryStream); Position:= AStream.Position; AStream.Size:= MemoryStream.Size; AStream.Position:= Position; MemoryStream.SaveToStream(AStream); finally MemoryStream.Free; end; end; function TXmlConfig.Load: Boolean; begin Result := False; if FFileName = '' then Exit; if not mbFileExists(FileName) then raise EXmlConfigNotFound.Create(''); if not mbFileAccess(FileName, fmOpenRead or fmShareDenyWrite) then raise EFOpenError.Create(SysErrorMessage(GetLastOSError)); ReadFromFile(FileName); Result := True; end; function TXmlConfig.LoadBypassingErrors: Boolean; var ErrMsg: String; begin try Result := Load; except on e: Exception do begin ErrMsg := 'Error loading configuration file ' + FileName; if e.Message <> EmptyStr then ErrMsg := ErrMsg + ': ' + e.Message; DebugLogger.DebugLn(ErrMsg); Result := False; end; end; end; function TXmlConfig.Save: Boolean; var bFileExists: Boolean; sTmpConfigFileName: String; begin Result := False; if FFileName = '' then Exit; bFileExists := mbFileExists(FileName); // Write to temporary file and if successfully written rename to proper name. if (not bFileExists) or mbFileAccess(FileName, fmOpenWrite or fmShareDenyWrite) then begin sTmpConfigFileName := GetTempName(FileName); try WriteToFile(sTmpConfigFileName); if bFileExists then begin mbFileCopyAttr(FileName, sTmpConfigFileName, [caoCopyOwnership, caoCopyPermissions]); end; if not mbRenameFile(sTmpConfigFileName, FileName) then begin mbDeleteFile(sTmpConfigFileName); DebugLogger.Debugln('Cannot save configuration file ', FileName); end else Result := True; except on e: EStreamError do begin mbDeleteFile(sTmpConfigFileName); DebugLogger.Debugln('Error saving configuration file ', FileName, ': ' + e.Message); end; end; end else begin DebugLogger.Debugln('Cannot save configuration file ', FileName, ' - check permissions'); end; end; procedure TXmlConfig.SplitPathToNodeAndAttr(const Path: DOMString; out NodePath: DOMString; out AttrName: DOMString); var AttrSepPos: Integer; begin // Last part of the path is the attr name. AttrSepPos := Length(Path); while (AttrSepPos > 0) and (Path[AttrSepPos] <> '/') do Dec(AttrSepPos); if (AttrSepPos = 0) or (AttrSepPos = Length(Path)) then begin NodePath := EmptyWideStr; AttrName := Path; end else begin NodePath := Copy(Path, 1, AttrSepPos - 1); AttrName := Copy(Path, AttrSepPos + 1, Length(Path) - AttrSepPos); end; end; function TXmlConfig.AddNode(const RootNode: TDOMNode; const ValueName: DOMString): TDOMNode; begin Result := RootNode.AppendChild(FDoc.CreateElement(ValueName)); end; procedure TXmlConfig.DeleteNode(const RootNode: TDOMNode; const Path: DOMString); begin DeleteNode(FindNode(RootNode, Path, False)); end; procedure TXmlConfig.DeleteNode(const Node: TDOMNode); begin if Assigned(Node) and Assigned(Node.ParentNode) then Node.ParentNode.DetachChild(Node); end; procedure TXmlConfig.ClearNode(const Node: TDOMNode); var Attr: TDOMAttr; begin while Assigned(Node.FirstChild) do Node.RemoveChild(Node.FirstChild); if Node.HasAttributes then begin Attr := TDOMAttr(Node.Attributes[0]); while Assigned(Attr) do begin TDOMElement(Node).RemoveAttributeNode(Attr); Attr := TDOMAttr(Attr.NextSibling); end; end; end; function TXmlConfig.FindNode(const RootNode: TDOMNode; const Path: DOMString; bCreate: Boolean = False): TDOMNode; var StartPos, EndPos: Integer; PathLen: Integer; Child: TDOMNode; function CompareDOMStrings(const s1, s2: DOMPChar; l1, l2: integer): integer; var i: integer; begin Result:=l1-l2; i:=0; while (i<l1) and (Result=0) do begin Result:=ord(s1[i])-ord(s2[i]); inc(i); end; end; begin Result := RootNode; PathLen := Length(Path); if PathLen = 0 then Exit; StartPos := 1; while Assigned(Result) do begin EndPos := StartPos; while (EndPos <= PathLen) and (Path[EndPos] <> '/') do Inc(EndPos); Child := Result.FirstChild; while Assigned(Child) and not ((Child.NodeType = ELEMENT_NODE) and (0 = CompareDOMStrings(DOMPChar(Child.NodeName), @Path[StartPos], Length(Child.NodeName), EndPos-StartPos))) do Child := Child.NextSibling; if not Assigned(Child) and bCreate then begin Child := FDoc.CreateElementBuf(@Path[StartPos], EndPos-StartPos); Result.AppendChild(Child); end; Result := Child; StartPos := EndPos + 1; if StartPos > PathLen then Break; end; end; function TXmlConfig.GetContent(const Node: TDOMNode): String; begin Result := UTF16ToUTF8(Node.TextContent); end; procedure TXmlConfig.SetContent(const Node: TDOMNode; const AValue: String); begin Node.TextContent := UTF8ToUTF16(AValue); end; function TXmlConfig.GetPathFromNode(aNode: TDOMNode): String; begin Result := aNode.NodeName; aNode := aNode.ParentNode; while Assigned(aNode) and (aNode <> RootNode) do begin Result := aNode.NodeName + '/' + Result; aNode := aNode.ParentNode; end; end; procedure TXmlConfig.GetFont(const aNode: TXmlNode; Path: TXmlPath; out Name: String; out Size: Integer; out Style, Quality: Integer; const DefName: String; const DefSize: Integer; const DefStyle, DefQuality: Integer); begin if Path <> '' then Path := Path + '/'; Name := GetValue(aNode, Path + 'Name', DefName); Size := GetValue(aNode, Path + 'Size', DefSize); Style := GetValue(aNode, Path + 'Style', DefStyle); Quality := GetValue(aNode, Path + 'Quality', DefQuality); end; procedure TXmlConfig.SetFont(const aNode: TXmlNode; Path: TXmlPath; const Name: String; const Size: Integer; const Style, Quality: Integer); begin if Path <> '' then Path := Path + '/'; SetValue(aNode, Path + 'Name', Name); SetValue(aNode, Path + 'Size', Size); SetValue(aNode, Path + 'Style', Style); SetValue(aNode, Path + 'Quality', Quality); end; end. ����������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/doublecmd_common.lpk�������������������������������������������0000644�0001750�0000144�00000005365�12430732504�022667� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="doublecmd_common"/> <Author Value="Alexander Koblov"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Conditionals Value="if (TargetCPU <> 'arm') then begin CustomOptions += '-fPIC'; UsageCustomOptions += '-fPIC'; end"/> <Parsing> <SyntaxOptions> <IncludeAssertionCode Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerMessages> <MsgFileName Value=""/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Common units for Double Commander"/> <License Value="GNU GPL 2"/> <Version Minor="3" Release="1"/> <Files Count="9"> <Item1> <Filename Value="dcclassesutf8.pas"/> <UnitName Value="DCClassesUtf8"/> </Item1> <Item2> <Filename Value="dcosutils.pas"/> <UnitName Value="DCOSUtils"/> </Item2> <Item3> <Filename Value="dcstrutils.pas"/> <UnitName Value="DCStrUtils"/> </Item3> <Item4> <Filename Value="dcbasictypes.pas"/> <UnitName Value="DCBasicTypes"/> </Item4> <Item5> <Filename Value="dcfileattributes.pas"/> <UnitName Value="DCFileAttributes"/> </Item5> <Item6> <Filename Value="dcconvertencoding.pas"/> <UnitName Value="DCConvertEncoding"/> </Item6> <Item7> <Filename Value="dcdatetimeutils.pas"/> <UnitName Value="DCDateTimeUtils"/> </Item7> <Item8> <Filename Value="dcxmlconfig.pas"/> <UnitName Value="DCXmlConfig"/> </Item8> <Item9> <Filename Value="dcprocessutf8.pas"/> <UnitName Value="DCProcessUtf8"/> </Item9> </Files> <RequiredPkgs Count="2"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> <PackageName Value="LazUtils"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcbasictypes.pas�����������������������������������������������0000644�0001750�0000144�00000003052�12262250007�022016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double commander ------------------------------------------------------------------------- Definitions of basic types. Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 DCBasicTypes; interface type TDynamicStringArray = array of String; TCharSet = set of Char; TFileAttrs = Cardinal; // file attributes type regardless of system TWinFileTime = QWord; // NTFS time (UTC) (2 x DWORD) TDosFileTime = LongInt; // MS-DOS time (local) {$IFDEF MSWINDOWS} TFileTime = TWinFileTime; {$ELSE} // Unix time (UTC). // Unix defines time_t as signed integer, // but we define it as unsigned because sign is not needed. {$IFDEF cpu64} TFileTime = QWord; {$ELSE} TFileTime = DWord; {$ENDIF} {$ENDIF} TUnixFileTime = TFileTime; PFileTime = ^TFileTime; PWinFileTime = ^TWinFileTime; implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/doublecmd_common.pas�������������������������������������������0000644�0001750�0000144�00000000513�12430732504�022652� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit doublecmd_common; interface uses DCClassesUtf8, DCOSUtils, DCStrUtils, DCBasicTypes, DCFileAttributes, DCConvertEncoding, DCDateTimeUtils, DCXmlConfig, DCProcessUtf8; implementation end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/doublecmd/dcconvertencoding.inc������������������������������������������0000644�0001750�0000144�00000041413�12650700750�023036� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Do not edit this file! It is autogenerated from C program natspec.c } const charset_relation: array[0..253, 0..3] of String = ( ('C' , 'C' , 'CP1252' , 'IBM437' ), ('POSIX' , 'POSIX' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_DJ' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ER' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ER@saaho' , 'CP1252' , 'IBM437' ), ('aa' , 'aa_ET' , 'CP1252' , 'IBM437' ), ('af' , 'af_ZA' , 'CP1252' , 'IBM850' ), ('am' , 'am_ET' , 'CP1252' , 'IBM437' ), ('an' , 'an_ES' , 'CP1252' , 'IBM437' ), ('ar' , 'ar_AE' , 'CP1256' , '' ), ('ar' , 'ar_BH' , 'CP1256' , '' ), ('ar' , 'ar_DZ' , 'CP1256' , '' ), ('ar' , 'ar_EG' , 'CP1256' , '' ), ('ar' , 'ar_IN' , 'CP1256' , '' ), ('ar' , 'ar_IQ' , 'CP1256' , '' ), ('ar' , 'ar_JO' , 'CP1256' , '' ), ('ar' , 'ar_KW' , 'CP1256' , '' ), ('ar' , 'ar_LB' , 'CP1256' , '' ), ('ar' , 'ar_LY' , 'CP1256' , '' ), ('ar' , 'ar_MA' , 'CP1256' , '' ), ('ar' , 'ar_OM' , 'CP1256' , '' ), ('ar' , 'ar_QA' , 'CP1256' , '' ), ('ar' , 'ar_SA' , 'CP1256' , '' ), ('ar' , 'ar_SD' , 'CP1256' , '' ), ('ar' , 'ar_SY' , 'CP1256' , '' ), ('ar' , 'ar_TN' , 'CP1256' , '' ), ('ar' , 'ar_YE' , 'CP1256' , '' ), ('as' , 'as_IN' , 'CP1252' , 'IBM437' ), ('ast' , 'ast_ES' , 'CP1252' , 'IBM437' ), ('az' , 'az_AZ' , 'CP1254' , 'IBM857' ), ('be' , 'be_BY' , 'CP1251' , 'IBM849' ), ('be' , 'be_BY@latin' , 'CP1251' , 'IBM849' ), ('ber' , 'ber_DZ' , 'CP1252' , 'IBM437' ), ('ber' , 'ber_MA' , 'CP1252' , 'IBM437' ), ('bg' , 'bg_BG' , 'CP1251' , 'IBM866' ), ('bn' , 'bn_BD' , 'CP1252' , 'IBM437' ), ('bn' , 'bn_IN' , 'CP1252' , 'IBM437' ), ('bo' , 'bo_CN' , 'CP1252' , 'IBM437' ), ('bo' , 'bo_IN' , 'CP1252' , 'IBM437' ), ('br' , 'br_FR' , 'CP1252' , 'IBM850' ), ('br' , 'br_FR@euro' , 'CP1252' , 'IBM850' ), ('bs' , 'bs_BA' , 'CP1252' , 'IBM437' ), ('byn' , 'byn_ER' , 'CP1252' , 'IBM437' ), ('ca' , 'ca_AD' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_ES' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_ES@euro' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_FR' , 'CP1252' , 'IBM850' ), ('ca' , 'ca_IT' , 'CP1252' , 'IBM850' ), ('crh' , 'crh_UA' , 'CP1252' , 'IBM437' ), ('cs' , 'cs_CZ' , 'CP1250' , 'IBM852' ), ('csb' , 'csb_PL' , 'CP1252' , 'IBM437' ), ('cy' , 'cy_GB' , 'ISO885914' , 'IBM850' ), ('da' , 'da_DK' , 'CP1252' , 'IBM850' ), ('de' , 'de_AT' , 'CP1252' , 'IBM850' ), ('de' , 'de_AT@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_BE' , 'CP1252' , 'IBM850' ), ('de' , 'de_BE@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_CH' , 'CP1252' , 'IBM850' ), ('de' , 'de_DE' , 'CP1252' , 'IBM850' ), ('de' , 'de_DE@euro' , 'CP1252' , 'IBM850' ), ('de' , 'de_LU' , 'CP1252' , 'IBM850' ), ('de' , 'de_LU@euro' , 'CP1252' , 'IBM850' ), ('dz' , 'dz_BT' , 'CP1252' , 'IBM437' ), ('el' , 'el_CY' , 'CP1253' , '' ), ('el' , 'el_GR' , 'CP1253' , '' ), ('en' , 'en_AG' , 'CP1252' , 'IBM437' ), ('en' , 'en_AU' , 'CP1252' , 'IBM850' ), ('en' , 'en_BW' , 'CP1252' , 'IBM437' ), ('en' , 'en_CA' , 'CP1252' , 'IBM850' ), ('en' , 'en_DK' , 'CP1252' , 'IBM437' ), ('en' , 'en_GB' , 'CP1252' , 'IBM850' ), ('en' , 'en_HK' , 'CP1252' , 'IBM437' ), ('en' , 'en_IE' , 'CP1252' , 'IBM850' ), ('en' , 'en_IE@euro' , 'CP1252' , 'IBM850' ), ('en' , 'en_IN' , 'CP1252' , 'IBM437' ), ('en' , 'en_NG' , 'CP1252' , 'IBM437' ), ('en' , 'en_NZ' , 'CP1252' , 'IBM850' ), ('en' , 'en_PH' , 'CP1252' , 'IBM437' ), ('en' , 'en_SG' , 'CP1252' , 'IBM437' ), ('en' , 'en_US' , 'CP1252' , 'IBM437' ), ('en' , 'en_ZA' , 'CP1252' , 'IBM437' ), ('en' , 'en_ZW' , 'CP1252' , 'IBM437' ), ('es' , 'es_AR' , 'CP1252' , 'IBM850' ), ('es' , 'es_BO' , 'CP1252' , 'IBM850' ), ('es' , 'es_CL' , 'CP1252' , 'IBM850' ), ('es' , 'es_CO' , 'CP1252' , 'IBM850' ), ('es' , 'es_CR' , 'CP1252' , 'IBM850' ), ('es' , 'es_DO' , 'CP1252' , 'IBM850' ), ('es' , 'es_EC' , 'CP1252' , 'IBM850' ), ('es' , 'es_ES' , 'CP1252' , 'IBM850' ), ('es' , 'es_ES@euro' , 'CP1252' , 'IBM850' ), ('es' , 'es_GT' , 'CP1252' , 'IBM850' ), ('es' , 'es_HN' , 'CP1252' , 'IBM850' ), ('es' , 'es_MX' , 'CP1252' , 'IBM850' ), ('es' , 'es_NI' , 'CP1252' , 'IBM850' ), ('es' , 'es_PA' , 'CP1252' , 'IBM850' ), ('es' , 'es_PE' , 'CP1252' , 'IBM850' ), ('es' , 'es_PR' , 'CP1252' , 'IBM850' ), ('es' , 'es_PY' , 'CP1252' , 'IBM850' ), ('es' , 'es_SV' , 'CP1252' , 'IBM850' ), ('es' , 'es_US' , 'CP1252' , 'IBM850' ), ('es' , 'es_UY' , 'CP1252' , 'IBM850' ), ('es' , 'es_VE' , 'CP1252' , 'IBM850' ), ('et' , 'et_EE' , 'CP1257' , '' ), ('eu' , 'eu_ES' , 'CP1252' , 'IBM850' ), ('eu' , 'eu_ES@euro' , 'CP1252' , 'IBM850' ), ('fa' , 'fa_IR' , 'CP1256' , '' ), ('fi' , 'fi_FI' , 'CP1252' , 'IBM850' ), ('fi' , 'fi_FI@euro' , 'CP1252' , 'IBM850' ), ('fil' , 'fil_PH' , 'CP1252' , 'IBM437' ), ('fo' , 'fo_FO' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_BE' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_BE@euro' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_CA' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_CH' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_FR' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_FR@euro' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_LU' , 'CP1252' , 'IBM850' ), ('fr' , 'fr_LU@euro' , 'CP1252' , 'IBM850' ), ('fur' , 'fur_IT' , 'CP1252' , 'IBM437' ), ('fy' , 'fy_DE' , 'CP1252' , 'IBM437' ), ('fy' , 'fy_NL' , 'CP1252' , 'IBM437' ), ('ga' , 'ga_IE' , 'CP1252' , 'IBM437' ), ('ga' , 'ga_IE@euro' , 'CP1252' , 'IBM437' ), ('gd' , 'gd_GB' , 'CP1252' , 'IBM850' ), ('gez' , 'gez_ER' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ER@abegede' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ET' , 'CP1252' , 'IBM437' ), ('gez' , 'gez_ET@abegede' , 'CP1252' , 'IBM437' ), ('gl' , 'gl_ES' , 'CP1252' , 'IBM850' ), ('gl' , 'gl_ES@euro' , 'CP1252' , 'IBM850' ), ('gv' , 'gv_GB' , 'CP1252' , 'IBM850' ), ('ha' , 'ha_NG' , 'CP1252' , 'IBM437' ), ('he' , 'he_IL' , 'CP1255' , 'IBM862' ), ('hne' , 'hne_IN' , 'CP1252' , 'IBM437' ), ('hr' , 'hr_HR' , 'CP1250' , 'IBM852' ), ('hsb' , 'hsb_DE' , 'CP1252' , 'IBM437' ), ('ht' , 'ht_HT' , 'CP1252' , 'IBM437' ), ('hu' , 'hu_HU' , 'CP1250' , 'IBM852' ), ('hy' , 'hy_AM' , 'CP1252' , 'IBM437' ), ('id' , 'id_ID' , 'CP1252' , 'IBM850' ), ('ig' , 'ig_NG' , 'CP1252' , 'IBM437' ), ('ik' , 'ik_CA' , 'CP1252' , 'IBM437' ), ('is' , 'is_IS' , 'CP1252' , 'IBM850' ), ('it' , 'it_CH' , 'CP1252' , 'IBM850' ), ('it' , 'it_IT' , 'CP1252' , 'IBM850' ), ('it' , 'it_IT@euro' , 'CP1252' , 'IBM850' ), ('iu' , 'iu_CA' , 'CP1252' , 'IBM437' ), ('iw' , 'iw_IL' , 'CP1252' , 'IBM437' ), ('ja' , 'ja_JP' , 'CP932' , 'CP932' ), ('kk' , 'kk_KZ' , 'CP1251' , 'IBM866' ), ('kl' , 'kl_GL' , 'CP1252' , 'IBM437' ), ('km' , 'km_KH' , 'CP1252' , 'IBM437' ), ('ko' , 'ko_KR' , 'CP949' , 'CP949' ), ('ks' , 'ks_IN' , 'CP1252' , 'IBM437' ), ('ks' , 'ks_IN@devanagari' , 'CP1252' , 'IBM437' ), ('ku' , 'ku_TR' , 'CP1252' , 'IBM437' ), ('kw' , 'kw_GB' , 'CP1252' , 'IBM850' ), ('ky' , 'ky_KG' , 'CP1251' , 'IBM866' ), ('lg' , 'lg_UG' , 'CP1252' , 'IBM437' ), ('li' , 'li_BE' , 'CP1252' , 'IBM437' ), ('li' , 'li_NL' , 'CP1252' , 'IBM437' ), ('lo' , 'lo_LA' , 'CP1252' , 'IBM437' ), ('lt' , 'lt_LT' , 'CP1257' , '' ), ('lv' , 'lv_LV' , 'CP1257' , '' ), ('mai' , 'mai_IN' , 'CP1252' , 'IBM437' ), ('mg' , 'mg_MG' , 'CP1252' , 'IBM437' ), ('mi' , 'mi_NZ' , 'CP1252' , 'IBM437' ), ('mk' , 'mk_MK' , 'CP1251' , 'IBM866' ), ('ml' , 'ml_IN' , 'CP1252' , 'IBM437' ), ('mn' , 'mn_MN' , 'CP1251' , 'IBM866' ), ('ms' , 'ms_MY' , 'CP1252' , 'IBM850' ), ('mt' , 'mt_MT' , 'CP1252' , 'IBM437' ), ('nan' , 'nan_TW@latin' , 'CP1252' , 'IBM437' ), ('nb' , 'nb_NO' , 'CP1252' , 'IBM850' ), ('nds' , 'nds_DE' , 'CP1252' , 'IBM437' ), ('nds' , 'nds_NL' , 'CP1252' , 'IBM437' ), ('ne' , 'ne_NP' , 'CP1252' , 'IBM437' ), ('nl' , 'nl_AW' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_BE' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_BE@euro' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_NL' , 'CP1252' , 'IBM850' ), ('nl' , 'nl_NL@euro' , 'CP1252' , 'IBM850' ), ('nn' , 'nn_NO' , 'CP1252' , 'IBM850' ), ('no' , 'no_NO' , 'CP1252' , 'IBM437' ), ('nr' , 'nr_ZA' , 'CP1252' , 'IBM437' ), ('nso' , 'nso_ZA' , 'CP1252' , 'IBM437' ), ('oc' , 'oc_FR' , 'CP1252' , 'IBM437' ), ('om' , 'om_ET' , 'CP1252' , 'IBM437' ), ('om' , 'om_KE' , 'CP1252' , 'IBM437' ), ('or' , 'or_IN' , 'CP1252' , 'IBM437' ), ('pap' , 'pap_AN' , 'CP1252' , 'IBM437' ), ('pl' , 'pl_PL' , 'CP1250' , 'IBM852' ), ('pt' , 'pt_BR' , 'CP1252' , 'IBM850' ), ('pt' , 'pt_PT' , 'CP1252' , 'IBM850' ), ('pt' , 'pt_PT@euro' , 'CP1252' , 'IBM850' ), ('ro' , 'ro_RO' , 'CP1250' , 'IBM852' ), ('ru' , 'ru_RU' , 'CP1251' , 'IBM866' ), ('ru' , 'ru_UA' , 'CP1251' , 'IBM866' ), ('rw' , 'rw_RW' , 'CP1252' , 'IBM437' ), ('sc' , 'sc_IT' , 'CP1252' , 'IBM437' ), ('sd' , 'sd_IN' , 'CP1252' , 'IBM437' ), ('sd' , 'sd_IN@devanagari' , 'CP1252' , 'IBM437' ), ('se' , 'se_NO' , 'CP1252' , 'IBM437' ), ('shs' , 'shs_CA' , 'CP1252' , 'IBM437' ), ('si' , 'si_LK' , 'CP1252' , 'IBM437' ), ('sid' , 'sid_ET' , 'CP1252' , 'IBM437' ), ('sk' , 'sk_SK' , 'CP1250' , 'IBM852' ), ('sl' , 'sl_SI' , 'CP1250' , 'IBM852' ), ('so' , 'so_DJ' , 'CP1252' , 'IBM437' ), ('so' , 'so_ET' , 'CP1252' , 'IBM437' ), ('so' , 'so_KE' , 'CP1252' , 'IBM437' ), ('so' , 'so_SO' , 'CP1252' , 'IBM437' ), ('sq' , 'sq_AL' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_ME' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_RS' , 'CP1250' , 'IBM852' ), ('sr' , 'sr_RS@latin' , 'CP1250' , 'IBM852' ), ('ss' , 'ss_ZA' , 'CP1252' , 'IBM437' ), ('st' , 'st_ZA' , 'CP1252' , 'IBM437' ), ('sv' , 'sv_FI' , 'CP1252' , 'IBM850' ), ('sv' , 'sv_FI@euro' , 'CP1252' , 'IBM850' ), ('sv' , 'sv_SE' , 'CP1252' , 'IBM850' ), ('tg' , 'tg_TJ' , 'CP1252' , 'IBM437' ), ('th' , 'th_TH' , 'IBM874' , 'IBM874' ), ('ti' , 'ti_ER' , 'CP1252' , 'IBM437' ), ('ti' , 'ti_ET' , 'CP1252' , 'IBM437' ), ('tig' , 'tig_ER' , 'CP1252' , 'IBM437' ), ('tk' , 'tk_TM' , 'CP1252' , 'IBM437' ), ('tl' , 'tl_PH' , 'CP1252' , 'IBM437' ), ('tn' , 'tn_ZA' , 'CP1252' , 'IBM437' ), ('tr' , 'tr_CY' , 'CP1254' , 'IBM857' ), ('tr' , 'tr_TR' , 'CP1254' , 'IBM857' ), ('ts' , 'ts_ZA' , 'CP1252' , 'IBM437' ), ('tt' , 'tt_RU' , 'CP1251' , 'IBM866' ), ('tt' , 'tt_RU@iqtelif' , 'CP1251' , 'IBM866' ), ('ug' , 'ug_CN' , 'CP1252' , 'IBM437' ), ('uk' , 'uk_UA' , 'CP1251' , 'CP1125' ), ('ur' , 'ur_PK' , 'CP1256' , '' ), ('uz' , 'uz_UZ' , 'CP1251' , 'IBM866' ), ('uz' , 'uz_UZ@cyrillic' , 'CP1254' , 'IBM857' ), ('ve' , 've_ZA' , 'CP1252' , 'IBM437' ), ('vi' , 'vi_VN' , 'CP1258' , 'CP1258' ), ('wa' , 'wa_BE' , 'CP1252' , 'IBM850' ), ('wa' , 'wa_BE@euro' , 'CP1252' , 'IBM850' ), ('wo' , 'wo_SN' , 'CP1252' , 'IBM437' ), ('xh' , 'xh_ZA' , 'CP1252' , 'IBM437' ), ('yi' , 'yi_US' , 'CP1252' , 'IBM437' ), ('yo' , 'yo_NG' , 'CP1252' , 'IBM437' ), ('zh' , 'zh_CN' , 'CP936' , 'CP936' ), ('zh' , 'zh_HK' , 'BIG5' , 'BIG5' ), ('zh' , 'zh_SG' , 'CP936' , 'CP936' ), ('zh' , 'zh_TW' , 'BIG5' , 'BIG5' ), ('zu' , 'zu_ZA' , 'CP1252' , 'IBM437' ), ('POSIX' , 'POSIX' , 'CP1252' , 'IBM437' ) ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717724�020165� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/registervirtualtreeview.pas������������������������������0000644�0001750�0000144�00000001172�12014201074�025646� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit registervirtualtreeview; {$Mode ObjFpc} {$H+} interface uses Classes, SysUtils, LResources, LazarusPackageIntf, VirtualTrees, VTHeaderPopup; procedure Register; implementation procedure RegisterUnitVirtualTrees; begin RegisterComponents('Virtual Controls', [TVirtualDrawTree, TVirtualStringTree]); end; procedure RegisterUnitVTHeaderPopup; begin RegisterComponents('Virtual Controls', [TVTHeaderPopupMenu]); end; procedure Register; begin RegisterUnit('VirtualTrees', @RegisterUnitVirtualTrees); RegisterUnit('VTHeaderPopup', @RegisterUnitVTHeaderPopup); end; initialization {$i ideicons.lrs} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/�������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�021607� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/��������������������������������������������0000755�0001750�0000144�00000000000�12675717724�022550� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/qt/�����������������������������������������0000755�0001750�0000144�00000000000�12675717724�023174� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/qt/olemethods.inc���������������������������0000644�0001750�0000144�00000000035�12014201074�025775� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/qt/vtgraphicsi.inc��������������������������0000644�0001750�0000144�00000105213�12203745772�026203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses qt4, qtobjects; {$ASMMODE INTEL} procedure AlphaBlendLineConstant(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using a constant alpha value. // The layout of a pixel must be BGRA where A is ignored (but is calculated as the other components). // ConstantAlpha must be in the range 0..255 where 0 means totally transparent (destination pixel only) // and 255 totally opaque (source pixel only). // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains ConstantAlpha // R8D contains Bias //.NOFRAME // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. {$ifdef windows} MOVD XMM3, R9D // ConstantAlpha {$else} MOVD XMM3, ECX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. {$ifdef windows} MOVD XMM5, [Bias] {$else} MOVD XMM5, R8D //Bias {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLinePerPixel(Source, Destination: Pointer; Count, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the alpha value of the source pixels. // The layout of a pixel must be BGRA. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains Bias //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains Bias //.NOFRAME // Load XMM5 with the bias value. {$ifdef windows} MOVD XMM5, R9D // Bias {$else} MOVD XMM5, ECX // Bias {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM3 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM3, XMM0 PUNPCKHWD XMM3, XMM3 PUNPCKHDQ XMM3, XMM3 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // Bias is on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM6 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F0 /// MOVQ MM6, MM0 DB $0F, $69, $F6 /// PUNPCKHWD MM6, MM6 DB $0F, $6A, $F6 /// PUNPCKHDQ MM6, MM6 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMaster(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the source pixel and a constant alpha value. // The layout of a pixel must be BGRA. // ConstantAlpha must be in the range 0..255. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} //windows // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //non windows // RDI contains Source // RSI contains Destination // EDX contains Count // ECX contains ConstantAlpha // R8D contains Bias //.SAVENV XMM6 //todo see how implement in fpc // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. {$ifdef windows} MOVD XMM3, R9D // ConstantAlpha {$else} MOVD XMM3, ECX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. {$ifdef windows} MOV R10D, [Bias] MOVD XMM5, R10D {$else} MOVD XMM5, R8D {$endif} PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. {$ifdef windows} MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned {$else} MOVD XMM1, DWORD PTR [RDI] // data is unaligned MOVD XMM2, DWORD PTR [RSI] // data is unaligned {$endif} PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RCX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM6 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM6, XMM0 PUNPCKHWD XMM6, XMM6 PUNPCKHDQ XMM6, XMM6 PMULLW XMM6, XMM3 // source alpha * master alpha PSRLW XMM6, 8 // divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM6 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RDX], XMM0 // store the result {$else} MOVD DWORD PTR [RSI], XMM0 // store the result {$endif} @3: {$ifdef windows} ADD RCX, 4 ADD RDX, 4 DEC R8D {$else} ADD RDI, 4 ADD RSI, 4 DEC EDX {$endif} JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM7 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F8 /// MOVQ MM7, MM0 DB $0F, $69, $FF /// PUNPCKHWD MM7, MM7 DB $0F, $6A, $FF /// PUNPCKHDQ MM7, MM7 DB $0F, $D5, $FE /// PMULLW MM7, MM6, source alpha * master alpha DB $0F, $71, $D7, $08 /// PSRLW MM7, 8, divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C7 /// PMULLW MM0, MM7, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMasterAndColor(Destination: Pointer; Count: Integer; ConstantAlpha, Color: Integer); // Blends a line of Count pixels in Destination against the given color using a constant alpha value. // The layout of a pixel must be BGRA and Color must be rrggbb00 (as stored by a COLORREF). // ConstantAlpha must be in the range 0..255. asm {$ifdef CPU64} //windows // RCX contains Destination // EDX contains Count // R8D contains ConstantAlpha // R9D contains Color //non windows // RDI contains Destination // ESI contains Count // EDX contains ConstantAlpha // ECX contains Color //.NOFRAME // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) {$ifdef windows} MOVD XMM3, R8D // ConstantAlpha {$else} MOVD XMM3, EDX // ConstantAlpha {$endif} PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Calculate factor 2. MOV R10D, $100 MOVD XMM2, R10D PUNPCKLWD XMM2, XMM2 PUNPCKLDQ XMM2, XMM2 PSUBW XMM2, XMM3 // XMM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in XMM3, but the r and b components of Color must be swapped. {$ifdef windows} BSWAP R9D // Color ROR R9D, 8 MOVD XMM1, R9D // Load the color and convert to word sized values. {$else} BSWAP ECX // Color ROR ECX, 8 MOVD XMM1, ECX // Load the color and convert to word sized values. {$endif} PXOR XMM4, XMM4 PUNPCKLBW XMM1, XMM4 PMULLW XMM1, XMM3 // XMM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. {$ifdef windows} MOVD XMM0, DWORD PTR [RCX] {$else} MOVD XMM0, DWORD PTR [RDI] {$endif} PUNPCKLBW XMM0, XMM4 PMULLW XMM0, XMM2 // calculate F1 + F2 * target PADDW XMM0, XMM1 PSRLW XMM0, 8 // divide by 256 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation {$ifdef windows} MOVD DWORD PTR [RCX], XMM0 // store the result ADD RCX, 4 DEC EDX {$else} MOVD DWORD PTR [RDI], XMM0 // store the result ADD RDI, 4 DEC ESI {$endif} JNZ @1 {$else} // EAX contains Destination // EDX contains Count // ECX contains ConstantAlpha // Color is passed on the stack // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load MM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) DB $0F, $6E, $D9 /// MOVD MM3, ECX DB $0F, $61, $DB /// PUNPCKLWD MM3, MM3 DB $0F, $62, $DB /// PUNPCKLDQ MM3, MM3 // Calculate factor 2. MOV ECX, $100 DB $0F, $6E, $D1 /// MOVD MM2, ECX DB $0F, $61, $D2 /// PUNPCKLWD MM2, MM2 DB $0F, $62, $D2 /// PUNPCKLDQ MM2, MM2 DB $0F, $F9, $D3 /// PSUBW MM2, MM3 // MM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in MM3, but the r and b components of Color must be swapped. MOV ECX, [Color] BSWAP ECX ROR ECX, 8 DB $0F, $6E, $C9 /// MOVD MM1, ECX // Load the color and convert to word sized values. DB $0F, $EF, $E4 /// PXOR MM4, MM4 DB $0F, $60, $CC /// PUNPCKLBW MM1, MM4 DB $0F, $D5, $CB /// PMULLW MM1, MM3 // MM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. DB $0F, $6E, $00 /// MOVD MM0, [EAX] DB $0F, $60, $C4 /// PUNPCKLBW MM0, MM4 DB $0F, $D5, $C2 /// PMULLW MM0, MM2 // calculate F1 + F2 * target DB $0F, $FD, $C1 /// PADDW MM0, MM1 DB $0F, $71, $D0, $08 /// PSRLW MM0, 8 // divide by 256 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0 // convert words to bytes with saturation DB $0F, $7E, $00 /// MOVD [EAX], MM0 // store the result ADD EAX, 4 DEC EDX JNZ @1 {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure EMMS; // Reset MMX state to use the FPU for other tasks again. {$ifdef CPU64} inline; begin end; {$else} asm DB $0F, $77 /// EMMS end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromDeviceContext(DC: HDC; out Width, Height: Integer): Pointer; // Helper function used to retrieve the bitmap selected into the given device context. If there is a bitmap then // the function will return a pointer to its bits otherwise nil is returned. // Additionally the dimensions of the bitmap are returned. var Bitmap: HBITMAP; DIB: TDIBSection; begin Result := nil; Width := 0; Height := 0; Bitmap := GetCurrentObject(DC, OBJ_BITMAP); if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; Width := DIB.dsBmih.biWidth; Height := DIB.dsBmih.biHeight; end; end; Assert(Result <> nil, 'Alpha blending DC error: no bitmap available.'); end; //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; var DIB: TDIBSection; begin Result := nil; if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; // Helper function to calculate the start address for the given row. begin //todo: Height is always > 0 in LCL { if Height > 0 then // bottom-up DIB Row := Height - Row - 1; } // Return DWORD aligned address of the requested scanline. Result := Bits + Row * ((Width * 32 + 31) and not 31) div 8; end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); // Optimized alpha blend procedure using MMX instructions to perform as quick as possible. // For this procedure to work properly it is important that both source and target bitmap use the 32 bit color format. // R describes the source rectangle to work on. // Target is the place (upper left corner) in the target bitmap where to blend to. Note that source width + X offset // must be less or equal to the target width. Similar for the height. // If Mode is bmConstantAlpha then the blend operation uses the given ConstantAlpha value for all pixels. // If Mode is bmPerPixelAlpha then each pixel is blended using its individual alpha value (the alpha value of the source). // If Mode is bmMasterAlpha then each pixel is blended using its individual alpha value multiplied by ConstantAlpha. // If Mode is bmConstantAlphaAndColor then each destination pixel is blended using ConstantAlpha but also a constant // color which will be obtained from Bias. In this case no offset value is added, otherwise Bias is used as offset. // Blending of a color into target only (bmConstantAlphaAndColor) ignores Source (the DC) and Target (the position). // CAUTION: This procedure does not check whether MMX instructions are actually available! Call it only if MMX is really // usable. var Y: Integer; SourceRun, TargetRun: PByte; SourceBits, DestBits: Pointer; SourceWidth, SourceHeight, DestWidth, DestHeight: Integer; //BlendColor: TQColor; begin if not IsRectEmpty(R) then begin {$ifdef CPU64} //avoid MasterAlpha due to incomplete AlphaBlendLineMaster. See comment in procedure if Mode = bmMasterAlpha then Mode := bmConstantAlpha; {$endif} // Note: it is tempting to optimize the special cases for constant alpha 0 and 255 by just ignoring soure // (alpha = 0) or simply do a blit (alpha = 255). But this does not take the bias into account. case Mode of bmConstantAlpha: begin // Get a pointer to the bitmap bits for the source and target device contexts. // Note: this supposes that both contexts do actually have bitmaps assigned! SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLineConstant(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmPerPixelAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLinePerPixel(SourceRun, TargetRun, R.Right - R.Left, Bias); end; end; EMMS; end; bmMasterAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * Target.X); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); AlphaBlendLineMaster(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmConstantAlphaAndColor: begin //todo: see why is not working { QColor_fromRgb(@BlendColor, Bias and $000000FF, (Bias shr 8) and $000000FF, (Bias shr 16) and $000000FF, ConstantAlpha); QPainter_fillRect(TQTDeviceContext(Destination).Widget, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top, @BlendColor); } // Source is ignored since there is a constant color value. DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + R.Top); Inc(TargetRun, 4 * R.Left); AlphaBlendLineMasterAndColor(TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; end; end; end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/qt/vtvdragmanager.inc�����������������������0000644�0001750�0000144�00000000036�12014201074�026643� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/dummyolemethods.inc�������������������������0000644�0001750�0000144�00000034730�12014201074�026436� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function TBaseVirtualTree.GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; // Returns the owner/sender of the given data object by means of a special clipboard format // or nil if the sender is in another process or no virtual tree at all. var Medium: TStgMedium; Data: PVTReference; begin Result := nil; { if Assigned(DataObject) then begin StandardOLEFormat.cfFormat := CF_VTREFERENCE; if DataObject.GetData(StandardOLEFormat, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns a memory expression of all currently selected nodes in the Medium structure. // Note: The memory requirement of this method might be very high. This depends however on the requested storage format. // For HGlobal (a global memory block) we need to render first all nodes to local memory and copy this then to // the global memory in Medium. This is necessary because we have first to determine how much // memory is needed before we can allocate it. Hence for a short moment we need twice the space as used by the // nodes alone (plus the amount the nodes need in the tree anyway)! // With IStream this does not happen. We directly stream out the nodes and pass the constructed stream along. //--------------- local function -------------------------------------------- { procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; } begin { FillChar(Medium, SizeOf(Medium), 0); // We can render the native clipboard format in two different storage media. if (FormatEtcIn.cfFormat = CF_VIRTUALTREE) and (FormatEtcIn.tymed and (TYMED_HGLOBAL or TYMED_ISTREAM) <> 0) then begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end else // Ask application descendants to render self defined formats. Result := DoRenderOLEData(FormatEtcIn, Medium, ForClipboard); } end; //---------------------------------------------------------------------------------------------------------------------- type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin //raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); raise EStreamError.Create(SCantWriteResourceStreamError); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil according to Mode. Optimized can be set to True if the entire operation // happens within the same process (i.e. sender and receiver of the OLE operation are located in the same process). // Optimize = True makes only sense if the operation to carry out is a move hence it is also the indication of the // operation to be done here. Source is the source of the OLE data and only of use (and usually assigned) when // an OLE operation takes place in the same application. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Medium: TStgMedium; Stream: TStream; Data: Pointer; Node: PVirtualNode; Nodes: TNodeArray; I: Integer; Res: HRESULT; ChangeReason: TChangeReason; begin { Nodes := nil; // Check the data format available by the data object. with StandardOLEFormat do begin // Read best format. cfFormat := CF_VIRTUALTREE; end; Result := DataObject.QueryGetData(StandardOLEFormat) = S_OK; if Result and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; Result := False; try if TargetNode = nil then TargetNode := FRoot; if TargetNode = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Optimized means source is known and in the same process so we can access its pointers, which avoids duplicating // the data while doing a serialization. Can only be used with cut'n paste and drag'n drop with move effect. if Optimized then begin if tsOLEDragging in Source.FStates then Nodes := Source.FDragSelection else Nodes := Source.GetSortedCutCopySet(True); if Mode in [amInsertBefore,amAddChildLast] then begin for I := 0 to High(Nodes) do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end else begin for I := High(Nodes) downto 0 do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end; Result := True; end else begin if Source = Self then ChangeReason := crNodeCopied else ChangeReason := crNodeAdded; Res := DataObject.GetData(StandardOLEFormat, Medium); if Res = S_OK then begin case Medium.tymed of TYMED_ISTREAM, // IStream interface TYMED_HGLOBAL: // global memory block begin Stream := nil; if Medium.tymed = TYMED_ISTREAM then Stream := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Stream := TOLEMemoryStream.Create; TOLEMemoryStream(Stream).SetPointer(Data, I); end; end; if Assigned(Stream) then try while Stream.Position < Stream.Size do begin Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, Mode); InternalAddFromStream(Stream, VTTreeStreamVersion, Node); // This seems a bit strange because of the callback for granting to add the node // which actually comes after the node has been added. The reason is that the node must // contain valid data otherwise I don't see how the application can make a funded decision. if not DoNodeCopying(Node, TargetNode) then DeleteNode(Node) else DoNodeCopied(Node); StructureChange(Node, ChangeReason); // In order to maintain the same node order when restoring nodes in the case of amInsertAfter // we have to move the reference node continously. Othwise we would end up with reversed node order. if Mode = amInsertAfter then TargetNode := Node; end; Result := True; finally Stream.Free; if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; end; end; ReleaseStgMedium(@Medium); end; end; finally EndUpdate; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; // This method constructs a shareable memory object filled with string data in the required format. Supported are: // CF_TEXT - plain ANSI text (Unicode text is converted using the user's current locale) // CF_UNICODETEXT - plain Unicode text // CF_CSV - comma separated plain ANSI text // CF_VRTF + CF_RTFNOOBS - rich text (plain ANSI) // CF_HTML - HTML text encoded using UTF-8 // // Result is the handle to a globally allocated memory block which can directly be used for clipboard and drag'n drop // transfers. The caller is responsible for freeing the memory. If for some reason the content could not be rendered // the Result is 0. //--------------- local function -------------------------------------------- { procedure MakeFragment(var HTML: string); // Helper routine to build a properly-formatted HTML fragment. const Version = 'Version:1.0'#13#10; StartHTML = 'StartHTML:'; EndHTML = 'EndHTML:'; StartFragment = 'StartFragment:'; EndFragment = 'EndFragment:'; DocType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; HTMLIntro = '<html><head><META http-equiv=Content-Type content="text/html; charset=utf-8">' + '</head><body><!--StartFragment-->'; HTMLExtro = '<!--EndFragment--></body></html>'; NumberLengthAndCR = 10; // Let the compiler determine the description length. DescriptionLength = Length(Version) + Length(StartHTML) + Length(EndHTML) + Length(StartFragment) + Length(EndFragment) + 4 * NumberLengthAndCR; var Description: string; StartHTMLIndex, EndHTMLIndex, StartFragmentIndex, EndFragmentIndex: Integer; begin // The HTML clipboard format is defined by using byte positions in the entire block where HTML text and // fragments start and end. These positions are written in a description. Unfortunately the positions depend on the // length of the description but the description may change with varying positions. // To solve this dilemma the offsets are converted into fixed length strings which makes it possible to know // the description length in advance. StartHTMLIndex := DescriptionLength; // position 0 after the description StartFragmentIndex := StartHTMLIndex + Length(DocType) + Length(HTMLIntro); EndFragmentIndex := StartFragmentIndex + Length(HTML); EndHTMLIndex := EndFragmentIndex + Length(HTMLExtro); Description := Version + SysUtils.Format('%s%.8d', [StartHTML, StartHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndHTML, EndHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [StartFragment, StartFragmentIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndFragment, EndFragmentIndex]) + #13#10; HTML := Description + DocType + HTMLIntro + HTML + HTMLExtro; end; } //--------------- end local function ---------------------------------------- var Data: Pointer; DataSize: Cardinal; S: string; WS: WideString; P: Pointer; begin Result := 0; { case Format of CF_TEXT: begin S := ContentToText(Source, #9) + #0; Data := PChar(S); DataSize := Length(S); end; CF_UNICODETEXT: begin WS := ContentToUnicode(Source, #9) + #0; Data := PWideChar(WS); DataSize := 2 * Length(WS); end; else if Format = CF_CSV then S := ContentToText(Source, ListSeparator) + #0 else if (Format = CF_VRTF) or (Format = CF_VRTFNOOBJS) then S := ContentToRTF(Source) + #0 else if Format = CF_HTML then begin S := ContentToHTML(Source); // Build a valid HTML clipboard fragment. MakeFragment(S); S := S + #0; end; Data := PChar(S); DataSize := Length(S); end; if DataSize > 0 then begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; } end; ����������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk/����������������������������������������0000755�0001750�0000144�00000000000�12675717724�023335� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk/olemethods.inc��������������������������0000644�0001750�0000144�00000000035�12014201074�026136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk/vtgraphicsi.inc�������������������������0000644�0001750�0000144�00000003766�12014201074�026334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses gtkdef, gtkint, CairoXlib, gdk, Cairo, glib; //procedure gdk_drawable_get_size(drawable: PGdkDrawable; width, height: Pgint); cdecl; external gdkdll; procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function CreateSurface(GtkDC: TGtkDeviceContext): Pcairo_surface_t; var Width, Height: gint; Visual: PGdkVisual; begin Result := nil; if (GtkDC <> nil) and (GtkDC.Drawable <> nil) then begin gdk_window_get_size(GtkDC.Drawable, @Width, @Height); Visual := gdk_visual_get_system; Result := cairo_xlib_surface_create( GDK_WINDOW_XDISPLAY(PGdkWindowPrivate(GtkDC.Drawable)), GDK_WINDOW_XWINDOW(PGdkWindowPrivate(GtkDC.Drawable)), GDK_VISUAL_XVISUAL(PGdkVisualPrivate(Visual)), Width, Height); end; end; var SrcDC: TGtkDeviceContext absolute Source; DestDC: TGtkDeviceContext absolute Destination; SrcSurface, DestSurface: Pcairo_surface_t; SrcContext, DestContext: Pcairo_t; begin case Mode of bmConstantAlpha:; bmPerPixelAlpha:; bmMasterAlpha:; bmConstantAlphaAndColor: begin DestSurface := CreateSurface(DestDC); if DestSurface <> nil then begin DestContext := cairo_create(DestSurface); cairo_set_source_rgba(DestContext, (Bias and $000000FF) / 255, ((Bias shr 8) and $000000FF) / 255, ((Bias shr 16) and $000000FF) / 255, ConstantAlpha / 255 ); cairo_rectangle(DestContext, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top); cairo_fill(DestContext); cairo_destroy(DestContext); cairo_surface_destroy(DestSurface); end; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end; ����������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk/vtvdragmanager.inc����������������������0000644�0001750�0000144�00000000036�12014201074�027004� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/carbon/�������������������������������������0000755�0001750�0000144�00000000000�12675717723�024013� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/carbon/olemethods.inc�����������������������0000644�0001750�0000144�00000000035�12014201074�026615� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/carbon/vtgraphicsi.inc����������������������0000644�0001750�0000144�00000001156�12014201074�027002� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//todo: properly implement procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); begin case Mode of bmConstantAlpha, bmPerPixelAlpha, bmMasterAlpha, bmConstantAlphaAndColor: begin BitBlt(Destination, Target.X, Target.Y, R.Right - R.Left, R.Bottom - R.Top, Source, R.Left, R.Right, SRCCOPY); end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end;������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/carbon/vtvdragmanager.inc�������������������0000644�0001750�0000144�00000000036�12014201074�027463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/dummydragmanager.inc������������������������0000644�0001750�0000144�00000060304�12014201074�026537� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; { FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; { var AClone: TEnumFormatEtc; } begin { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc;pceltFetched:pULong=nil): HResult; { var CopyCount: LongWord; } begin { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); begin inherited Create; { FOwner := AOwner; FForClipboard := ForClipboard; FOwner.GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in FOwner.FStates) then FOwner.CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; { var I: integer; } begin { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. { var Size: Cardinal; Data, NewData: PChar; } begin { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). { var InternalMedium: PStgMedium; } begin { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAdvise(Out enumAdvise : IEnumStatData):HResult; begin { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; { var NewList: TEnumFormatEtc; } begin { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(FOwner, FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. { var I: Integer; Data: PVTReference; } begin { // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in FOwner.FStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := FOwner; GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := FOwner.RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; { var I: Integer; } begin { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc; {$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. { var Index: Integer; LocalStgMedium: PStgMedium; } begin { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; { // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. Pointer(FOwner.FDragManager) := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. { if Assigned(FDataObject) then Result := FDataObject else begin Result := FOwner.DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TBaseVirtualTree; begin //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin //Result := FIsDropTarget; Result := True; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(FOwner.Handle, DataObject, Pt, Effect); FDragSource := FOwner.GetTreeFromDataObject(DataObject); Result := FOwner.DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; FOwner.DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := FOwner.DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := FOwner.DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk2/���������������������������������������0000755�0001750�0000144�00000000000�12675717724�023417� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk2/olemethods.inc�������������������������0000644�0001750�0000144�00000000035�12014201074�026220� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummyolemethods.inc} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk2/vtgraphicsi.inc������������������������0000644�0001750�0000144�00000003072�12140233030�026401� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses gtk2def, gdk2, GTK2Proc, Cairo, LCLVersion; {$MACRO ON} {$if lcl_fullversion > 1000000} {$define TGtk2DeviceContext:=TGtkDeviceContext} {$endif} function gdk_cairo_create(drawable: PGdkDrawable): Pcairo_t cdecl external gdklib; procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function GetContext(GtkDC: TGtk2DeviceContext): Pcairo_t; begin Result := nil; if (GtkDC <> nil) and (GtkDC.Drawable <> nil) then Result := gdk_cairo_create(GtkDC.Drawable); end; var SrcDC: TGtk2DeviceContext absolute Source; DestDC: TGtk2DeviceContext absolute Destination; SrcContext, DestContext: Pcairo_t; begin case Mode of bmConstantAlpha:; bmPerPixelAlpha:; bmMasterAlpha:; bmConstantAlphaAndColor: begin DestContext := GetContext(DestDC); if DestContext <> nil then begin cairo_set_source_rgba(DestContext, (Bias and $000000FF) / 255, ((Bias shr 8) and $000000FF) / 255, ((Bias shr 16) and $000000FF) / 255, ConstantAlpha / 255 ); cairo_rectangle(DestContext, R.Left + Target.x, R.Top + Target.y, R.Right - R.Left, R.Bottom - R.Top); cairo_fill(DestContext); cairo_destroy(DestContext); end; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; begin Result := nil; end; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; begin Result := nil; end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/gtk2/vtvdragmanager.inc���������������������0000644�0001750�0000144�00000000036�12014201074�027066� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$i ../dummydragmanager.inc} ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/win32/��������������������������������������0000755�0001750�0000144�00000000000�12675717724�023512� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/win32/olemethods.inc������������������������0000644�0001750�0000144�00000034666�12014201074�026334� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function TBaseVirtualTree.GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; // Returns the owner/sender of the given data object by means of a special clipboard format // or nil if the sender is in another process or no virtual tree at all. var Medium: TStgMedium; Data: PVTReference; begin Result := nil; if Assigned(DataObject) then begin StandardOLEFormat.cfFormat := CF_VTREFERENCE; if DataObject.GetData(StandardOLEFormat, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns a memory expression of all currently selected nodes in the Medium structure. // Note: The memory requirement of this method might be very high. This depends however on the requested storage format. // For HGlobal (a global memory block) we need to render first all nodes to local memory and copy this then to // the global memory in Medium. This is necessary because we have first to determine how much // memory is needed before we can allocate it. Hence for a short moment we need twice the space as used by the // nodes alone (plus the amount the nodes need in the tree anyway)! // With IStream this does not happen. We directly stream out the nodes and pass the constructed stream along. //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin FillChar(Medium, SizeOf(Medium), 0); // We can render the native clipboard format in two different storage media. if (FormatEtcIn.cfFormat = CF_VIRTUALTREE) and (FormatEtcIn.tymed and (TYMED_HGLOBAL or TYMED_ISTREAM) <> 0) then begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end else // Ask application descendants to render self defined formats. Result := DoRenderOLEData(FormatEtcIn, Medium, ForClipboard); end; //---------------------------------------------------------------------------------------------------------------------- type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin //raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); raise EStreamError.Create(SCantWriteResourceStreamError); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil according to Mode. Optimized can be set to True if the entire operation // happens within the same process (i.e. sender and receiver of the OLE operation are located in the same process). // Optimize = True makes only sense if the operation to carry out is a move hence it is also the indication of the // operation to be done here. Source is the source of the OLE data and only of use (and usually assigned) when // an OLE operation takes place in the same application. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Medium: TStgMedium; Stream: TStream; Data: Pointer; Node: PVirtualNode; Nodes: TNodeArray; I: Integer; Res: HRESULT; ChangeReason: TChangeReason; begin Nodes := nil; // Check the data format available by the data object. with StandardOLEFormat do begin // Read best format. cfFormat := CF_VIRTUALTREE; end; Result := DataObject.QueryGetData(StandardOLEFormat) = S_OK; if Result and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; Result := False; try if TargetNode = nil then TargetNode := FRoot; if TargetNode = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Optimized means source is known and in the same process so we can access its pointers, which avoids duplicating // the data while doing a serialization. Can only be used with cut'n paste and drag'n drop with move effect. if Optimized then begin if tsOLEDragging in Source.FStates then Nodes := Source.FDragSelection else Nodes := Source.GetSortedCutCopySet(True); if Mode in [amInsertBefore,amAddChildLast] then begin for I := 0 to High(Nodes) do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end else begin for I := High(Nodes) downto 0 do if not HasAsParent(TargetNode, Nodes[I]) then Source.MoveTo(Nodes[I], TargetNode, Mode, False); end; Result := True; end else begin if Source = Self then ChangeReason := crNodeCopied else ChangeReason := crNodeAdded; Res := DataObject.GetData(StandardOLEFormat, Medium); if Res = S_OK then begin case Medium.tymed of TYMED_ISTREAM, // IStream interface TYMED_HGLOBAL: // global memory block begin Stream := nil; if Medium.tymed = TYMED_ISTREAM then Stream := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Stream := TOLEMemoryStream.Create; TOLEMemoryStream(Stream).SetPointer(Data, I); end; end; if Assigned(Stream) then try while Stream.Position < Stream.Size do begin Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, Mode); InternalAddFromStream(Stream, VTTreeStreamVersion, Node); // This seems a bit strange because of the callback for granting to add the node // which actually comes after the node has been added. The reason is that the node must // contain valid data otherwise I don't see how the application can make a funded decision. if not DoNodeCopying(Node, TargetNode) then DeleteNode(Node) else DoNodeCopied(Node); StructureChange(Node, ChangeReason); // In order to maintain the same node order when restoring nodes in the case of amInsertAfter // we have to move the reference node continously. Othwise we would end up with reversed node order. if Mode = amInsertAfter then TargetNode := Node; end; Result := True; finally Stream.Free; if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; end; end; ReleaseStgMedium(@Medium); end; end; finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; // This method constructs a shareable memory object filled with string data in the required format. Supported are: // CF_TEXT - plain ANSI text (Unicode text is converted using the user's current locale) // CF_UNICODETEXT - plain Unicode text // CF_CSV - comma separated plain ANSI text // CF_VRTF + CF_RTFNOOBS - rich text (plain ANSI) // CF_HTML - HTML text encoded using UTF-8 // // Result is the handle to a globally allocated memory block which can directly be used for clipboard and drag'n drop // transfers. The caller is responsible for freeing the memory. If for some reason the content could not be rendered // the Result is 0. //--------------- local function -------------------------------------------- procedure MakeFragment(var HTML: string); // Helper routine to build a properly-formatted HTML fragment. const Version = 'Version:1.0'#13#10; StartHTML = 'StartHTML:'; EndHTML = 'EndHTML:'; StartFragment = 'StartFragment:'; EndFragment = 'EndFragment:'; DocType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">'; HTMLIntro = '<html><head><META http-equiv=Content-Type content="text/html; charset=utf-8">' + '</head><body><!--StartFragment-->'; HTMLExtro = '<!--EndFragment--></body></html>'; NumberLengthAndCR = 10; // Let the compiler determine the description length. DescriptionLength = Length(Version) + Length(StartHTML) + Length(EndHTML) + Length(StartFragment) + Length(EndFragment) + 4 * NumberLengthAndCR; var Description: string; StartHTMLIndex, EndHTMLIndex, StartFragmentIndex, EndFragmentIndex: Integer; begin // The HTML clipboard format is defined by using byte positions in the entire block where HTML text and // fragments start and end. These positions are written in a description. Unfortunately the positions depend on the // length of the description but the description may change with varying positions. // To solve this dilemma the offsets are converted into fixed length strings which makes it possible to know // the description length in advance. StartHTMLIndex := DescriptionLength; // position 0 after the description StartFragmentIndex := StartHTMLIndex + Length(DocType) + Length(HTMLIntro); EndFragmentIndex := StartFragmentIndex + Length(HTML); EndHTMLIndex := EndFragmentIndex + Length(HTMLExtro); Description := Version + SysUtils.Format('%s%.8d', [StartHTML, StartHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndHTML, EndHTMLIndex]) + #13#10 + SysUtils.Format('%s%.8d', [StartFragment, StartFragmentIndex]) + #13#10 + SysUtils.Format('%s%.8d', [EndFragment, EndFragmentIndex]) + #13#10; HTML := Description + DocType + HTMLIntro + HTML + HTMLExtro; end; //--------------- end local function ---------------------------------------- var Data: Pointer; DataSize: Cardinal; S: string; WS: UnicodeString; P: Pointer; begin Result := 0; case Format of CF_TEXT: begin S := ContentToAnsi(Source, #9) + #0; Data := PChar(S); DataSize := Length(S); end; CF_UNICODETEXT: begin WS := ContentToUTF16(Source, #9) + #0; Data := PWideChar(WS); DataSize := 2 * Length(WS); end; else if Format = CF_CSV then S := ContentToAnsi(Source, ListSeparator) + #0 else if (Format = CF_VRTF) or (Format = CF_VRTFNOOBJS) then S := ContentToRTF(Source) + #0 else if Format = CF_HTML then begin S := ContentToHTML(Source); // Build a valid HTML clipboard fragment. MakeFragment(S); S := S + #0; end; Data := PChar(S); DataSize := Length(S); end; if DataSize > 0 then begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; end; ��������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/win32/vtgraphicsi.inc�����������������������0000644�0001750�0000144�00000076455�12140233030�026513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {$ASMMODE INTEL} procedure AlphaBlendLineConstant(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using a constant alpha value. // The layout of a pixel must be BGRA where A is ignored (but is calculated as the other components). // ConstantAlpha must be in the range 0..255 where 0 means totally transparent (destination pixel only) // and 255 totally opaque (source pixel only). // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //.NOFRAME // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. MOVD XMM3, R9D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. MOVD XMM5, [Bias] PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLinePerPixel(Source, Destination: Pointer; Count, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the alpha value of the source pixels. // The layout of a pixel must be BGRA. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains Bias //.NOFRAME // Load XMM5 with the bias value. MOVD XMM5, R9D // Bias PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RDX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM3 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM3, XMM0 PUNPCKHWD XMM3, XMM3 PUNPCKHDQ XMM3, XMM3 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM3 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // Bias is on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM6 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F0 /// MOVQ MM6, MM0 DB $0F, $69, $F6 /// PUNPCKHWD MM6, MM6 DB $0F, $6A, $F6 /// PUNPCKHDQ MM6, MM6 // calculation is: target = (alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C6 /// PMULLW MM0, MM6, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMaster(Source, Destination: Pointer; Count: Integer; ConstantAlpha, Bias: Integer); // Blends a line of Count pixels from Source to Destination using the source pixel and a constant alpha value. // The layout of a pixel must be BGRA. // ConstantAlpha must be in the range 0..255. // Bias is an additional value which gets added to every component and must be in the range -128..127 asm {$ifdef CPU64} // RCX contains Source // RDX contains Destination // R8D contains Count // R9D contains ConstantAlpha // Bias is on the stack //.SAVENV XMM6 //todo see how implement in fpc AlphaBlendLineMaster // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. MOVD XMM3, R9D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Load XMM5 with the bias value. MOV R10D, [Bias] MOVD XMM5, R10D PUNPCKLWD XMM5, XMM5 PUNPCKLDQ XMM5, XMM5 // Load XMM4 with 128 to allow for saturated biasing. MOV R10D, 128 MOVD XMM4, R10D PUNPCKLWD XMM4, XMM4 PUNPCKLDQ XMM4, XMM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. MOVD XMM1, DWORD PTR [RCX] // data is unaligned MOVD XMM2, DWORD PTR [RDX] // data is unaligned PXOR XMM0, XMM0 // clear source pixel register for unpacking PUNPCKLBW XMM0, XMM1{[RCX]} // unpack source pixel byte values into words PSRLW XMM0, 8 // move higher bytes to lower bytes PXOR XMM1, XMM1 // clear target pixel register for unpacking PUNPCKLBW XMM1, XMM2{[RCX]} // unpack target pixel byte values into words MOVQ XMM2, XMM1 // make a copy of the shifted values, we need them again PSRLW XMM1, 8 // move higher bytes to lower bytes // Load XMM6 with the source alpha value (replicate it for every component). // Expand it to word size. MOVQ XMM6, XMM0 PUNPCKHWD XMM6, XMM6 PUNPCKHDQ XMM6, XMM6 PMULLW XMM6, XMM3 // source alpha * master alpha PSRLW XMM6, 8 // divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 PSUBW XMM0, XMM1 // source - target PMULLW XMM0, XMM6 // alpha * (source - target) PADDW XMM0, XMM2 // add target (in shifted form) PSRLW XMM0, 8 // divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. PSUBW XMM0, XMM4 PADDSW XMM0, XMM5 PADDW XMM0, XMM4 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RDX], XMM0 // store the result @3: ADD RCX, 4 ADD RDX, 4 DEC R8D JNZ @1 {$else} // EAX contains Source // EDX contains Destination // ECX contains Count // ConstantAlpha and Bias are on the stack PUSH ESI // save used registers PUSH EDI MOV ESI, EAX // ESI becomes the actual source pointer MOV EDI, EDX // EDI becomes the actual target pointer // Load MM6 with the constant alpha value (replicate it for every component). // Expand it to word size. MOV EAX, [ConstantAlpha] DB $0F, $6E, $F0 /// MOVD MM6, EAX DB $0F, $61, $F6 /// PUNPCKLWD MM6, MM6 DB $0F, $62, $F6 /// PUNPCKLDQ MM6, MM6 // Load MM5 with the bias value. MOV EAX, [Bias] DB $0F, $6E, $E8 /// MOVD MM5, EAX DB $0F, $61, $ED /// PUNPCKLWD MM5, MM5 DB $0F, $62, $ED /// PUNPCKLDQ MM5, MM5 // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 @1: // The pixel loop calculates an entire pixel in one run. // Note: The pixel byte values are expanded into the higher bytes of a word due // to the way unpacking works. We compensate for this with an extra shift. DB $0F, $EF, $C0 /// PXOR MM0, MM0, clear source pixel register for unpacking DB $0F, $60, $06 /// PUNPCKLBW MM0, [ESI], unpack source pixel byte values into words DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, move higher bytes to lower bytes DB $0F, $EF, $C9 /// PXOR MM1, MM1, clear target pixel register for unpacking DB $0F, $60, $0F /// PUNPCKLBW MM1, [EDI], unpack target pixel byte values into words DB $0F, $6F, $D1 /// MOVQ MM2, MM1, make a copy of the shifted values, we need them again DB $0F, $71, $D1, $08 /// PSRLW MM1, 8, move higher bytes to lower bytes // Load MM7 with the source alpha value (replicate it for every component). // Expand it to word size. DB $0F, $6F, $F8 /// MOVQ MM7, MM0 DB $0F, $69, $FF /// PUNPCKHWD MM7, MM7 DB $0F, $6A, $FF /// PUNPCKHDQ MM7, MM7 DB $0F, $D5, $FE /// PMULLW MM7, MM6, source alpha * master alpha DB $0F, $71, $D7, $08 /// PSRLW MM7, 8, divide by 256 // calculation is: target = (alpha * master alpha * (source - target) + 256 * target) / 256 DB $0F, $F9, $C1 /// PSUBW MM0, MM1, source - target DB $0F, $D5, $C7 /// PMULLW MM0, MM7, alpha * (source - target) DB $0F, $FD, $C2 /// PADDW MM0, MM2, add target (in shifted form) DB $0F, $71, $D0, $08 /// PSRLW MM0, 8, divide by 256 // Bias is accounted for by conversion of range 0..255 to -128..127, // doing a saturated add and convert back to 0..255. DB $0F, $F9, $C4 /// PSUBW MM0, MM4 DB $0F, $ED, $C5 /// PADDSW MM0, MM5 DB $0F, $FD, $C4 /// PADDW MM0, MM4 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0, convert words to bytes with saturation DB $0F, $7E, $07 /// MOVD [EDI], MM0, store the result @3: ADD ESI, 4 ADD EDI, 4 DEC ECX JNZ @1 POP EDI POP ESI {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlendLineMasterAndColor(Destination: Pointer; Count: Integer; ConstantAlpha, Color: Integer); // Blends a line of Count pixels in Destination against the given color using a constant alpha value. // The layout of a pixel must be BGRA and Color must be rrggbb00 (as stored by a COLORREF). // ConstantAlpha must be in the range 0..255. asm {$ifdef CPU64} // RCX contains Destination // EDX contains Count // R8D contains ConstantAlpha // R9D contains Color //.NOFRAME // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load XMM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) MOVD XMM3, R8D // ConstantAlpha PUNPCKLWD XMM3, XMM3 PUNPCKLDQ XMM3, XMM3 // Calculate factor 2. MOV R10D, $100 MOVD XMM2, R10D PUNPCKLWD XMM2, XMM2 PUNPCKLDQ XMM2, XMM2 PSUBW XMM2, XMM3 // XMM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in XMM3, but the r and b components of Color must be swapped. BSWAP R9D // Color ROR R9D, 8 MOVD XMM1, R9D // Load the color and convert to word sized values. PXOR XMM4, XMM4 PUNPCKLBW XMM1, XMM4 PMULLW XMM1, XMM3 // XMM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. MOVD XMM0, DWORD PTR [RCX] PUNPCKLBW XMM0, XMM4 PMULLW XMM0, XMM2 // calculate F1 + F2 * target PADDW XMM0, XMM1 PSRLW XMM0, 8 // divide by 256 PACKUSWB XMM0, XMM0 // convert words to bytes with saturation MOVD DWORD PTR [RCX], XMM0 // store the result ADD RCX, 4 DEC EDX JNZ @1 {$else} // EAX contains Destination // EDX contains Count // ECX contains ConstantAlpha // Color is passed on the stack // The used formula is: target = (alpha * color + (256 - alpha) * target) / 256. // alpha * color (factor 1) and 256 - alpha (factor 2) are constant values which can be calculated in advance. // The remaining calculation is therefore: target = (F1 + F2 * target) / 256 // Load MM3 with the constant alpha value (replicate it for every component). // Expand it to word size. (Every calculation here works on word sized operands.) DB $0F, $6E, $D9 /// MOVD MM3, ECX DB $0F, $61, $DB /// PUNPCKLWD MM3, MM3 DB $0F, $62, $DB /// PUNPCKLDQ MM3, MM3 // Calculate factor 2. MOV ECX, $100 DB $0F, $6E, $D1 /// MOVD MM2, ECX DB $0F, $61, $D2 /// PUNPCKLWD MM2, MM2 DB $0F, $62, $D2 /// PUNPCKLDQ MM2, MM2 DB $0F, $F9, $D3 /// PSUBW MM2, MM3 // MM2 contains now: 255 - alpha = F2 // Now calculate factor 1. Alpha is still in MM3, but the r and b components of Color must be swapped. MOV ECX, [Color] BSWAP ECX ROR ECX, 8 DB $0F, $6E, $C9 /// MOVD MM1, ECX // Load the color and convert to word sized values. DB $0F, $EF, $E4 /// PXOR MM4, MM4 DB $0F, $60, $CC /// PUNPCKLBW MM1, MM4 DB $0F, $D5, $CB /// PMULLW MM1, MM3 // MM1 contains now: color * alpha = F1 @1: // The pixel loop calculates an entire pixel in one run. DB $0F, $6E, $00 /// MOVD MM0, [EAX] DB $0F, $60, $C4 /// PUNPCKLBW MM0, MM4 DB $0F, $D5, $C2 /// PMULLW MM0, MM2 // calculate F1 + F2 * target DB $0F, $FD, $C1 /// PADDW MM0, MM1 DB $0F, $71, $D0, $08 /// PSRLW MM0, 8 // divide by 256 DB $0F, $67, $C0 /// PACKUSWB MM0, MM0 // convert words to bytes with saturation DB $0F, $7E, $00 /// MOVD [EAX], MM0 // store the result ADD EAX, 4 DEC EDX JNZ @1 {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure EMMS; // Reset MMX state to use the FPU for other tasks again. {$ifdef CPU64} inline; begin end; {$else} asm DB $0F, $77 /// EMMS end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromDeviceContext(DC: HDC; out Width, Height: Integer): Pointer; // Helper function used to retrieve the bitmap selected into the given device context. If there is a bitmap then // the function will return a pointer to its bits otherwise nil is returned. // Additionally the dimensions of the bitmap are returned. var Bitmap: HBITMAP; DIB: TDIBSection; begin Result := nil; Width := 0; Height := 0; Bitmap := GetCurrentObject(DC, OBJ_BITMAP); if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; Width := DIB.dsBmih.biWidth; Height := DIB.dsBmih.biHeight; end; end; Assert(Result <> nil, 'Alpha blending DC error: no bitmap available.'); end; //---------------------------------------------------------------------------------------------------------------------- function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; var DIB: TDIBSection; begin Result := nil; if Bitmap <> 0 then begin if GetObject(Bitmap, SizeOf(DIB), @DIB) = SizeOf(DIB) then begin Assert(DIB.dsBm.bmPlanes * DIB.dsBm.bmBitsPixel = 32, 'Alpha blending error: bitmap must use 32 bpp.'); Result := DIB.dsBm.bmBits; end; end; end; function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; // Helper function to calculate the start address for the given row. begin //todo: Height is always > 0 in LCL { if Height > 0 then // bottom-up DIB Row := Height - Row - 1; } // Return DWORD aligned address of the requested scanline. Result := Bits + Row * ((Width * 32 + 31) and not 31) div 8; end; //---------------------------------------------------------------------------------------------------------------------- procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); // Optimized alpha blend procedure using MMX instructions to perform as quick as possible. // For this procedure to work properly it is important that both source and target bitmap use the 32 bit color format. // R describes the source rectangle to work on. // Target is the place (upper left corner) in the target bitmap where to blend to. Note that source width + X offset // must be less or equal to the target width. Similar for the height. // If Mode is bmConstantAlpha then the blend operation uses the given ConstantAlpha value for all pixels. // If Mode is bmPerPixelAlpha then each pixel is blended using its individual alpha value (the alpha value of the source). // If Mode is bmMasterAlpha then each pixel is blended using its individual alpha value multiplied by ConstantAlpha. // If Mode is bmConstantAlphaAndColor then each destination pixel is blended using ConstantAlpha but also a constant // color which will be obtained from Bias. In this case no offset value is added, otherwise Bias is used as offset. // Blending of a color into target only (bmConstantAlphaAndColor) ignores Source (the DC) and Target (the position). // CAUTION: This procedure does not check whether MMX instructions are actually available! Call it only if MMX is really // usable. var Y: Integer; SourceRun, TargetRun: PByte; SourceBits, DestBits: Pointer; SourceWidth, SourceHeight, DestWidth, DestHeight: Integer; begin if not IsRectEmpty(R) then begin {$ifdef CPU64} //avoid MasterAlpha due to incomplete AlphaBlendLineMaster. See comment in procedure if Mode = bmMasterAlpha then Mode := bmConstantAlpha; {$endif} // Note: it is tempting to optimize the special cases for constant alpha 0 and 255 by just ignoring soure // (alpha = 0) or simply do a blit (alpha = 255). But this does not take the bias into account. case Mode of bmConstantAlpha: begin // Get a pointer to the bitmap bits for the source and target device contexts. // Note: this supposes that both contexts do actually have bitmaps assigned! SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLineConstant(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmPerPixelAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * R.Left); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); Inc(TargetRun, 4 * Target.X); AlphaBlendLinePerPixel(SourceRun, TargetRun, R.Right - R.Left, Bias); end; end; EMMS; end; bmMasterAlpha: begin SourceBits := GetBitmapBitsFromDeviceContext(Source, SourceWidth, SourceHeight); DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(SourceBits) and Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin SourceRun := CalculateScanline(SourceBits, SourceWidth, SourceHeight, Y + R.Top); Inc(SourceRun, 4 * Target.X); TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + Target.Y); AlphaBlendLineMaster(SourceRun, TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; bmConstantAlphaAndColor: begin // Source is ignored since there is a constant color value. DestBits := GetBitmapBitsFromDeviceContext(Destination, DestWidth, DestHeight); if Assigned(DestBits) then begin for Y := 0 to R.Bottom - R.Top - 1 do begin TargetRun := CalculateScanline(DestBits, DestWidth, DestHeight, Y + R.Top); Inc(TargetRun, 4 * R.Left); AlphaBlendLineMasterAndColor(TargetRun, R.Right - R.Left, ConstantAlpha, Bias); end; end; EMMS; end; end; end; end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/intf/win32/vtvdragmanager.inc��������������������0000644�0001750�0000144�00000057657�12140233030�027203� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; pceltFetched:pULong=nil): HResult; var CopyCount: LongWord; begin Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; if pceltFetched <> nil then pceltFetched^ := CopyCount; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin FCurrentIndex := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); begin inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; FOwner.GetNativeClipboardFormats(FFormatEtcArray); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in FOwner.FStates) then FOwner.CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PByte; begin Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAdvise(Out enumAdvise : IEnumStatData):HResult; begin if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(FOwner, FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in FOwner.FStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := FOwner; GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := FOwner.RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc; const Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. Pointer(FOwner.FDragManager) := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := FOwner.DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TBaseVirtualTree; begin Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(FOwner.Handle, DataObject, Pt, Effect); FDragSource := FOwner.GetTreeFromDataObject(DataObject); Result := FOwner.DragEnter(KeyState, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; FOwner.DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := FOwner.DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := FOwner.DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; end; //---------------------------------------------------------------------------------------------------------------------- {$IF FPC_FULLVERSION < 020601} function TVTDragManager.GiveFeedback(Effect: Longint): HResult; {$ELSE} function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; {$ENDIF} begin Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- {$IF FPC_FULLVERSION < 020601} function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: Longint): HResult; {$ELSE} function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; {$ENDIF} var RButton, LButton: Boolean; begin LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; end; ���������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/arch/��������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022524� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/arch/i386/���������������������������������������0000755�0001750�0000144�00000000000�12675717723�023215� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/arch/x86_64/�������������������������������������0000755�0001750�0000144�00000000000�12675717723�023462� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/include/arch/pascal/�������������������������������������0000755�0001750�0000144�00000000000�12675717723�023767� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/���������������������������������������������������0000755�0001750�0000144�00000000000�12675717724�021327� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/qt/������������������������������������������������0000755�0001750�0000144�00000000000�12675717724�021753� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/qt/virtualpanningwindow.pas������������������������0000644�0001750�0000144�00000002012�12014201074�026711� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/qt/fakeactivex.pas���������������������������������0000644�0001750�0000144�00000000054�12014201074�024716� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/qt/virtualdragmanager.pas��������������������������0000644�0001750�0000144�00000170107�12014201074�026312� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger {$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/qt/fakemmsystem.pas��������������������������������0000644�0001750�0000144�00000000650�12014201074�025133� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation uses LCLIntf; function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/dummyactivex.inc�����������������������������������0000644�0001750�0000144�00000040560�12014201074�024513� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ {fake unit just to compile - not used under non windows} {$mode delphi} interface uses {$ifdef Windows} Windows, {$endif} Classes, SysUtils, Types; const TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool = LongBool; Bool = WinBool; ULONG = cardinal; PULONG = ^ULONG; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next (Celt:ULong;Out xcelt;pceltfetched : PUlong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;pceltFetched:pULong=nil):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAdvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: DWORD):HResult;StdCall; function GiveFeedback(dwEffect: DWORD): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; implementation function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; procedure OleUninitialize; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleFlushClipboard: WINOLEAPI; begin // Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin //Logger.SendError([lcOle],'Ole function called in Linux'); //Logger.SendCallStack([lcOle],'Stack'); end; end. ������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk/�����������������������������������������������0000755�0001750�0000144�00000000000�12675717724�022114� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk/virtualpanningwindow.pas�����������������������0000644�0001750�0000144�00000002012�12014201074�027052� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk/fakeactivex.pas��������������������������������0000644�0001750�0000144�00000000054�12014201074�025057� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk/virtualdragmanager.pas�������������������������0000644�0001750�0000144�00000170106�12014201074�026452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk/fakemmsystem.pas�������������������������������0000644�0001750�0000144�00000000752�12014201074�025277� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; var ATime: TSystemTime; begin //todo: properly implement GetLocalTime(ATime); Result := ATime.MilliSecond; end; end. ����������������������doublecmd-0.7.1/components/virtualtreeview/units/carbon/��������������������������������������������0000755�0001750�0000144�00000000000�12675717724�022573� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/carbon/virtualpanningwindow.pas��������������������0000644�0001750�0000144�00000002012�12014201074�027531� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/carbon/fakeactivex.pas�����������������������������0000644�0001750�0000144�00000000054�12014201074�025536� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/carbon/virtualdragmanager.pas����������������������0000644�0001750�0000144�00000170106�12014201074�027131� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/carbon/fakemmsystem.pas����������������������������0000644�0001750�0000144�00000000650�12014201074�025753� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation uses LCLIntf; function timeBeginPeriod(x1: DWord): DWord; begin end; function timeEndPeriod(x1: DWord): DWord; begin end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk2/����������������������������������������������0000755�0001750�0000144�00000000000�12675717724�022176� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk2/virtualpanningwindow.pas����������������������0000644�0001750�0000144�00000002012�12014201074�027134� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {$mode objfpc}{$H+} interface uses LCLType, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FOwnerHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; begin end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); begin FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk2/fakeactivex.pas�������������������������������0000644�0001750�0000144�00000000054�12014201074�025141� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit FakeActiveX; {$i ../dummyactivex.inc} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk2/virtualdragmanager.pas������������������������0000644�0001750�0000144�00000170106�12014201074�026534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {fake unit just to compile - not used under non windows} {$mode delphi} interface uses Classes, SysUtils, Types; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = 1; TYMED_ISTREAM = 4; DVASPECT_CONTENT = 1; CLSCTX_INPROC_SERVER = $0010; DROPEFFECT_COPY = 1; DROPEFFECT_LINK = 4; DROPEFFECT_MOVE = 2; DROPEFFECT_NONE = 0; DROPEFFECT_SCROLL = dword($80000000); DATADIR_GET = 1; type //types from win unit Long = LongInt; WinBool= LongBool; Bool= WinBool; ULONG = cardinal; LONGLONG = int64; LPDWORD = ^DWORD; LPVOID = pointer; TCOLORREF = cardinal; TIID = TGUID; LARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : LONG); 1: (QuadPart : LONGLONG); end; PLARGE_INTEGER = ^LARGE_INTEGER; _LARGE_INTEGER = LARGE_INTEGER; TLargeInteger = Int64; PLargeInteger = ^TLargeInteger; ULARGE_INTEGER = record case byte of 0: (LowPart : DWORD; HighPart : DWORD); 1: (QuadPart : LONGLONG); end; PULARGE_INTEGER = ^ULARGE_INTEGER; _ULARGE_INTEGER = ULARGE_INTEGER; HANDLE = System.THandle; HWND = HANDLE; //HRESULT = System.HResult; HBITMAP = HANDLE; HENHMETAFILE = HANDLE; //activex types IMoniker = Interface; WINOLEAPI = HResult; TLCID = DWORD; OleChar = WChar; LPOLESTR = ^OLECHAR; HMetaFilePict = Pointer; tagBIND_OPTS = Record cvStruct, // sizeof(BIND_OPTS) grfFlags, grfMode, dwTickCountDeadline : DWord; End; TBind_Opts = tagBIND_OPTS; TCLIPFORMAT = Word; tagDVTARGETDEVICE = Record tdSize : DWord; tdDriverNameOffset, tdDeviceNameOffset, tdPortNameOffset, tdExtDevmodeOffset : Word; Data : Record End; End; DVTARGETDEVICE = TagDVTARGETDEVICE; PDVTARGETDEVICE = ^tagDVTARGETDEVICE; tagFORMATETC = Record CfFormat : Word {TCLIPFORMAT}; Ptd : PDVTARGETDEVICE; dwAspect : DWORD; lindex : Long; tymed : DWORD; End; FORMATETC = TagFORMATETC; TFORMATETC = FORMATETC; LPFORMATETC = ^FORMATETC; PFormatEtc = LPFORMATETC; tagSTATDATA = Record // field used by: FORMATETC : Tformatetc; // EnumAdvise, EnumData (cache), EnumFormats advf : DWord; // EnumAdvise, EnumData (cache) padvSink : Pointer {IAdviseSink}; // EnumAdvise dwConnection: DWord; // EnumAdvise End; STATDATA = TagStatData; TagSTGMEDIUM = Record Tymed : DWord; Case Integer Of 0 : (HBITMAP : hBitmap; PUnkForRelease : Pointer {IUnknown}); 1 : (HMETAFILEPICT : hMetaFilePict ); 2 : (HENHMETAFILE : hEnhMetaFile ); 3 : (HGLOBAL : hGlobal ); 4 : (lpszFileName : LPOLESTR ); 5 : (pstm : Pointer{IStream} ); 6 : (pstg : Pointer{IStorage} ); End; USTGMEDIUM = TagSTGMEDIUM; STGMEDIUM = USTGMEDIUM; TStgMedium = TagSTGMEDIUM; PStgMedium = ^TStgMedium; LPSTGMEDIUM = ^STGMEDIUM; IEnumString = Interface (IUnknown) ['{00000101-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out xcelt;Out Celtfetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out celt;Out Celtfetched:ULong):HResult; StdCall; Function Skip (Celt:ULong):Hresult;StdCall; Function Reset:HResult;StdCall; Function Clone(Out penum:IEnumString):HResult;StdCall; End; IEnumMoniker = Interface (IUnknown) ['{00000102-0000-0000-C000-000000000046}'] Function Next(celt:ULong; out Elt;out celftfetched: ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong; Out rgelt;out celtfetched :ULong):Hresult; StdCall; Function Skip(celt:Ulong):HResult; StdCall; Function Reset:HResult; StdCall; Function Close(out penum:IEnumMoniker):HResult;StdCall; End; IEnumSTATDATA = Interface (IUnknown) ['{00000105-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:statdata;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumstatdata):HResult;StdCall; End; IEnumFORMATETC = Interface (IUnknown) ['{00000103-0000-0000-C000-000000000046}'] Function Next(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; // Function RemoteNext(Celt:ULong;Out Rgelt:FormatEtc;Out pceltFetched:ULong):HResult; StdCall; Function Skip(Celt:ULong):HResult;StdCall; Function Reset:HResult;StdCall; Function Clone(out penum:IEnumFORMATETC):HResult;StdCall; End; IPersist = Interface (IUnknown) ['{0000010c-0000-0000-C000-000000000046}'] Function GetClassId(clsid:TClsId):HResult; StdCall; End; IPersistStream = Interface(IPersist) ['{00000109-0000-0000-C000-000000000046}'] Function IsDirty:HResult; StdCall; Function Load(Const stm: IStream):HResult; StdCall; Function Save(Const stm: IStream;fClearDirty:Bool):HResult;StdCall; Function GetSizeMax(Out cbSize:ULarge_Integer):HResult; StdCall; End; IRunningObjectTable = Interface (IUnknown) ['{00000010-0000-0000-C000-000000000046}'] Function Register (grfFlags :DWord;const unkobject:IUnknown;Const mkObjectName:IMoniker;Out dwregister:DWord):HResult;StdCall; Function Revoke (dwRegister:DWord):HResult; StdCall; Function IsRunning (Const mkObjectName: IMoniker):HResult;StdCall; Function GetObject (Const mkObjectName: IMoniker; Out punkObject:IUnknown):HResult; StdCall; Function NoteChangeTime(dwRegister :DWord;Const FileTime: TFileTime):HResult;StdCall; Function GetTimeOfLastChange(Const mkObjectName:IMoniker;Out filetime:TFileTime):HResult; StdCall; Function EnumRunning (Out enumMoniker: IEnumMoniker):HResult; StdCall; End; IBindCtx = Interface (IUnknown) ['{0000000e-0000-0000-C000-000000000046}'] Function RegisterObjectBound(Const punk:IUnknown):HResult; stdCall; Function RevokeObjectBound (Const Punk:IUnknown):HResult; stdCall; Function ReleaseBoundObjects :HResult; StdCall; Function SetBindOptions(Const bindOpts:TBind_Opts):HResult; stdCall; // Function RemoteSetBindOptions(Const bind_opts: TBind_Opts2):HResult;StdCall; Function GetBindOptions(var BindOpts:TBind_Opts):HResult; stdCall; // Function RemoteGetBindOptions(Var bind_opts: TBind_Opts2):HResult;StdCall; Function GetRunningObjectTable(Out rot : IRunningObjectTable):Hresult; StdCall; Function RegisterObjectParam(Const pszkey:LPOleStr;const punk:IUnknown):HResult; Function GetObjectParam(Const pszkey:LPOleStr; out punk: IUnknown):HResult; StdCall; Function EnumObjectParam (out enum:IEnumString):Hresult;StdCall; Function RevokeObjectParam(pszKey:LPOleStr):HResult;StdCall; End; PIMoniker = ^IMoniker; IMoniker = Interface (IPersistStream) ['{0000000f-0000-0000-C000-000000000046}'] Function BindToObject (const pbc:IBindCtx;const mktoleft:IMoniker; RiidResult:TIID;Out vresult):HResult;StdCall; // Function RemoteBindToObject (const pbc:IBindCtx;const mktoleft:IMoniker;RiidResult:TIID;Out vresult):HResult;StdCall; Function BindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; // Function RemoteBindToStorage(Const Pbc:IBindCtx;Const mktoLeft:IMoniker; Riid:TIID;Out vobj):HResult; StdCall; Function Reduce (const pbc:IBindCtx; dwReduceHowFar:DWord; mktoLeft: PIMoniker; Out mkReduced:IMoniker):HResult; StdCall; Function ComposeWith(Const MkRight:IMoniker;fOnlyIfNotGeneric:BOOL; OUT mkComposite:IMoniker):HResult; StdCall; Function Enum(fForward:Bool;Out enumMoniker:IEnumMoniker):HResult;StdCall; Function IsEqual(Const mkOtherMoniker:IMoniker):HResult;StdCall; Function Hash (Out dwHash:Dword):HResult;StdCall; Function IsRunning(Const bc:IBindCtx;Const MkToLeft:IMoniker;Const mknewlyRunning:IMoniker):HResult;StdCall; Function GetTimeOfLastChange(Const bc:IBindCtx;Const mkToLeft:IMoniker; out ft : FileTime):HResult; StdCall; Function Inverse(out mk : IMoniker):HResult; StdCall; Function CommonPrefixWith (Const mkOther:IMoniker):HResult; StdCall; Function RelativePathTo(Const mkother:IMoniker; Out mkRelPath : IMoniker):HResult;StdCall; Function GetDisplayName(Const bc:IMoniker;const mktoleft:IMoniker;Out szDisplayName: pOleStr):HResult; StdCall; Function ParseDisplayName(Const bc:IBindCtx;Const mkToLeft:IMoniker;szDisplayName:POleStr;out cheaten:ULong;out mkOut:IMoniker):HResult; StdCall; Function IsSystemMonitor(Out dwMkSys:DWord):HResult;StdCall; End; IAdviseSink = Interface (IUnknown) ['{0000010f-0000-0000-C000-000000000046}'] {$ifdef midl500} ['{00000150-0000-0000-C000-000000000046}'] {$endif} Procedure OnDataChange (Const pformatetc : Formatetc;const pstgmed : STGMEDIUM); StdCall; Procedure OnViewChange (dwAspect : DWord; lindex : Long); StdCall; Procedure OnRename (Const pmk : IMoniker); StdCall; Procedure OnSave; StdCall; Procedure OnClose; StdCall; End; //Fake interfaces IDataObject = Interface (IUnknown) ['{0000010e-0000-0000-C000-000000000046}'] Function GetData(Const formatetcIn : FORMATETC;Out medium : STGMEDIUM):HRESULT; STDCALL; Function GetDataHere(CONST pformatetc : FormatETC; Out medium : STGMEDIUM):HRESULT; STDCALL; Function QueryGetData(const pformatetc : FORMATETC):HRESULT; STDCALL; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; STDCALl; Function SetData (Const pformatetc : FORMATETC;const medium:STGMEDIUM;FRelease : BOOL):HRESULT; StdCall; Function EnumFormatEtc(dwDirection : DWord; OUT enumformatetcpara : IENUMFORMATETC):HRESULT; StdCall; Function DAdvise(const formatetc : FORMATETC;advf :DWORD; CONST AdvSink : IAdviseSink;OUT dwConnection:DWORD):HRESULT;StdCall; Function DUnadvise(dwconnection :DWord) :HRESULT;StdCall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;StdCall; End; IDropTarget = interface(IUnknown) ['{00000122-0000-0000-C000-000000000046}'] function DragEnter(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragOver(grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD): HResult;StdCall; function DragLeave: HResult;StdCall; function Drop(const dataObj: IDataObject; grfKeyState: DWORD; pt: TPoint; var dwEffect: DWORD):HResult;StdCall; end; IDropSource = interface(IUnknown) ['{00000121-0000-0000-C000-000000000046}'] function QueryContinueDrag(fEscapePressed: BOOL; grfKeyState: LongWord):HResult;StdCall; function GiveFeedback(dwEffect: LongWord): HResult;StdCall; end; IDataAdviseHolder = Interface (IUnknown) ['{00000110-0000-0000-C000-000000000046}'] Function Advise (CONST pdataObject : IDataObject;CONST fetc:FORMATETC;advf : DWORD;Const pAdvise:IAdviseSink;Out DwConnection:DWord):HResult; StdCall; Function Unadvise (dwConnection:Dword):HResult; StdCall; Function EnumAdvise(out penumAdvise : IEnumStatData):HResult;StdCall; Function SendOnDataChange(const pDataObject :IDataObject;DwReserved,advf : DWord):HResult; StdCall; End; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TObject); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall; procedure OleUninitialize;stdcall; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall; function OleFlushClipboard:WINOLEAPI;stdcall; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls {$ifdef DEBUG_VTV}, vtlogger{$endif}; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RegisterDragDrop(hwnd: HWND; pDropTarget: IDropTarget): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RevokeDragDrop(hwnd: HWND): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function DoDragDrop(pDataObj: IDataObject; pDropSource: IDropSource; dwOKEffects: DWORD; pdwEffect: LPDWORD): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleInitialize(pvReserved: LPVOID): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure OleUninitialize; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; procedure ReleaseStgMedium(_para1: LPSTGMEDIUM); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleSetClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleGetClipboard(out ppDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleFlushClipboard: WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function OleIsCurrentClipboard(pDataObj: IDataObject): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CreateStreamOnHGlobal(hGlobal: HGLOBAL; fDeleteOnRelease: BOOL; out stm: IStream): WINOLEAPI; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function CoCreateInstance(const _para1: TCLSID; _para2: IUnknown; _para3: DWORD; const _para4: TIID; out _para5): HRESULT; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; { //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- } var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; } end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; } end; procedure UnlockMediumData(Medium: TStgMedium); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); } end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; } end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); } end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FCurrentIndex := 0; Result := S_OK; } end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; } end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; } end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} // The tree reference format is always supported and returned from here. { if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); } end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TObject); begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); } end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; } end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; } end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} //Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin {$ifdef DEBUG_VTV}Logger.SendError([lcOle],'Ole function called in Linux');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcOle],'Stack');{$endif} { LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; } end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/gtk2/fakemmsystem.pas������������������������������0000644�0001750�0000144�00000000650�12014201074�025356� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit fakemmsystem; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Types, LCLIntf; function timeBeginPeriod(x1: DWord): DWord; function timeEndPeriod(x1: DWord): DWord; function timeGetTime: DWORD; implementation function timeBeginPeriod(x1: DWord): DWord; begin // end; function timeEndPeriod(x1: DWord): DWord; begin // end; function timeGetTime: DWORD; begin Result := GetTickCount; end; end. ����������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/win32/���������������������������������������������0000755�0001750�0000144�00000000000�12675717724�022271� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/win32/virtualpanningwindow.pas���������������������0000644�0001750�0000144�00000005212�12140233030�027231� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualpanningwindow; {Adapted from VirtualTrees by Luiz Amrico to work in LCL/Lazarus} {$mode objfpc}{$H+} interface uses Windows, Graphics, Classes, SysUtils; type { TVirtualPanningWindow } TVirtualPanningWindow = class private FHandle: THandle; FImage: TBitmap; procedure HandlePaintMessage; public procedure Start(OwnerHandle: THandle; const Position: TPoint); procedure Stop; procedure Show(ClipRegion: HRGN); property Image: TBitmap read FImage; property Handle: THandle read FHandle; end; implementation {$ifdef DEBUG_VTV} uses vtlogger; {$endif} function PanningWindowProc(Window: HWnd; Msg: UInt;WPara: WParam; LPara: LParam): LResult; stdcall; var PanningObject: TVirtualPanningWindow; begin if Msg = WM_PAINT then begin PanningObject:=TVirtualPanningWindow(GetWindowLongPtrW(Window,GWL_USERDATA)); if Assigned(PanningObject) then PanningObject.HandlePaintMessage; Result := 0; end else Result := DefWindowProc(Window,Msg,WPara,LPara); end; var PanningWindowClass: TWndClass = ( style: 0; lpfnWndProc: @PanningWindowProc; cbClsExtra: 0; cbWndExtra: 0; hInstance: 0; hIcon: 0; hCursor: 0; hbrBackground: 0; lpszMenuName: nil; lpszClassName: 'VTPanningWindow' ); { TVirtualPanningWindow } procedure TVirtualPanningWindow.HandlePaintMessage; var PS: PaintStruct; begin BeginPaint(FHandle, PS); BitBlt(PS.hdc,0,0,FImage.Width,FImage.Height,FImage.Canvas.Handle,0,0,SRCCOPY); EndPaint(FHandle, PS); end; procedure TVirtualPanningWindow.Start(OwnerHandle: THandle; const Position: TPoint); var TempClass: TWndClass; begin // Register the helper window class. if not GetClassInfo(HInstance, PanningWindowClass.lpszClassName, TempClass) then begin PanningWindowClass.hInstance := HInstance; Windows.RegisterClass(PanningWindowClass); end; // Create the helper window and show it at the given position without activating it. with Position do FHandle := CreateWindowEx(WS_EX_TOOLWINDOW, PanningWindowClass.lpszClassName, nil, WS_POPUP, X - 16, Y - 16, 32, 32, OwnerHandle, 0, HInstance, nil); SetWindowLongPtr(FHandle,GWL_USERDATA,LONG_PTR(Self)); FImage := TBitmap.Create; end; procedure TVirtualPanningWindow.Stop; begin // Destroy the helper window. DestroyWindow(FHandle); FImage.Free; FImage := nil; end; procedure TVirtualPanningWindow.Show(ClipRegion: HRGN); begin {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPanning],'Panning Image',FImage);{$endif} //todo: move SetWindowRgn to DelphiCompat SetWindowRgn(FHandle, ClipRegion, False); ShowWindow(FHandle, SW_SHOWNOACTIVATE); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/units/win32/virtualdragmanager.pas�����������������������0000644�0001750�0000144�00000116567�12014201074�026642� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit virtualdragmanager; {$mode delphi} interface uses Windows, ActiveX, Classes, SysUtils; const // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; //Bridge to ActiveX constants TYMED_HGLOBAL = ActiveX.TYMED_HGLOBAL; TYMED_ISTREAM = ActiveX.TYMED_ISTREAM; DVASPECT_CONTENT = ActiveX.DVASPECT_CONTENT; CLSCTX_INPROC_SERVER = ActiveX.CLSCTX_INPROC_SERVER; DROPEFFECT_COPY = ActiveX.DROPEFFECT_COPY; DROPEFFECT_LINK = ActiveX.DROPEFFECT_LINK; DROPEFFECT_MOVE = ActiveX.DROPEFFECT_MOVE; DROPEFFECT_NONE = ActiveX.DROPEFFECT_NONE; DROPEFFECT_SCROLL = ActiveX.DROPEFFECT_SCROLL; DATADIR_GET = ActiveX.DATADIR_GET; type //Bridge to ActiveX Types IDataObject = ActiveX.IDataObject; IDropTarget = ActiveX.IDropTarget; IDropSource = ActiveX.IDropSource; IEnumFormatEtc = ActiveX.IEnumFORMATETC; //WINOLEAPI = ActiveX.WINOLEAPI; TFormatEtc = ActiveX.TFORMATETC; TStgMedium = ActiveX.TStgMedium; PDVTargetDevice = ActiveX.PDVTARGETDEVICE; // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TObject; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TObject read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private //FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FOwner: TObject; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TObject read FOwner; public constructor Create(AOwner: TObject; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAvise(Out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; Function GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc; {$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TObject; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TObject; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TComponent); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; end; //Ole helper functions function Succeeded(Status : HRESULT) : BOOLEAN; function Failed(Status : HRESULT) : BOOLEAN; //ActiveX functions that have wrong calling convention in fpc function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop'; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;external 'ole32.dll' name 'RevokeDragDrop'; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'DoDragDrop'; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleInitialize'; procedure OleUninitialize;stdcall;external 'ole32.dll' name 'OleUninitialize'; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;external 'ole32.dll' name 'ReleaseStgMedium'; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetClipboard'; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetClipboard'; function OleFlushClipboard:WINOLEAPI;stdcall;external 'ole32.dll' name 'OleFlushClipboard'; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleIsCurrentClipboard'; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateStreamOnHGlobal'; function CoCreateInstance(const _para1:TCLSID; _para2:IUnknown; _para3:DWORD;const _para4:TIID;out _para5):HRESULT;stdcall; external 'ole32.dll' name 'CoCreateInstance'; //helper functions to isolate windows/OLE specific code function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; function GetStreamFromMedium(Medium:TStgMedium):TStream; procedure UnlockMediumData(Medium:TStgMedium); function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; function AllocateGlobal(Data: Pointer; DataSize:Cardinal): HGLOBAL; implementation uses VirtualTrees, Controls, oleutils; type TVirtualTreeAccess = class (TBaseVirtualTree) end; function Succeeded(Status : HRESULT) : BOOLEAN; begin Succeeded:=Status and HRESULT($80000000)=0; end; function Failed(Status : HRESULT) : BOOLEAN; begin Failed:=Status and HRESULT($80000000)<>0; end; function RenderOLEData(Tree: TObject; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; //--------------- local function -------------------------------------------- procedure WriteNodes(Stream: TStream); var Selection: TNodeArray; I: Integer; begin with TVirtualTreeAccess(Tree) do begin if ForClipboard then Selection := GetSortedCutCopySet(True) else Selection := GetSortedSelection(True); for I := 0 to High(Selection) do WriteNode(Stream, Selection[I]); end; end; //--------------- end local function ---------------------------------------- var Data: PCardinal; ResPointer: Pointer; ResSize: Integer; OLEStream: IStream; VCLStream: TStream; begin VCLStream := nil; try Medium.PunkForRelease := nil; // Return data in one of the supported storage formats, prefer IStream. if FormatEtcIn.tymed and TYMED_ISTREAM <> 0 then begin // Create an IStream on a memory handle (here it is 0 which indicates to implicitely allocated a handle). // Do not use TStreamAdapter as it is not compatible with OLE (when flushing the clipboard OLE wants the HGlobal // back which is not supported by TStreamAdapater). CreateStreamOnHGlobal(0, True, OLEStream); VCLStream := TOLEStream.Create(OLEStream); WriteNodes(VCLStream); // Rewind stream. VCLStream.Position := 0; Medium.tymed := TYMED_ISTREAM; IUnknown(Medium.Pstm) := OLEStream; Result := S_OK; end else begin VCLStream := TMemoryStream.Create; WriteNodes(VCLStream); ResPointer := TMemoryStream(VCLStream).Memory; ResSize := VCLStream.Position; // Allocate memory to hold the string. if ResSize > 0 then begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, ResSize + SizeOf(Cardinal)); Data := GlobalLock(Medium.hGlobal); // Store the size of the data too, for easy retrival. Data^ := ResSize; Inc(Data); Move(ResPointer^, Data^, ResSize); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Result := S_OK; end else Result := E_FAIL; end; finally // We can free the VCL stream here since it was either a pure memory stream or only a wrapper around // the OLEStream which exists independently. VCLStream.Free; end; end; type // needed to handle OLE global memory objects TOLEMemoryStream = class(TCustomMemoryStream) public function Write(const Buffer; Count: Integer): Longint; override; end; //---------------------------------------------------------------------------------------------------------------------- function TOLEMemoryStream.Write(const Buffer; Count: Integer): Integer; begin {$ifdef COMPILER_5_UP} raise EStreamError.CreateRes(PResStringRec(@SCantWriteResourceStreamError)); {$else} raise EStreamError.Create(SCantWriteResourceStreamError); {$endif COMPILER_5_UP} end; function GetStreamFromMedium(Medium: TStgMedium): TStream; var Data: Pointer; I: Integer; begin Result := nil; if Medium.tymed = TYMED_ISTREAM then Result := TOLEStream.Create(IUnknown(Medium.Pstm) as IStream) else begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin // Get the total size of data to retrieve. I := PCardinal(Data)^; Inc(PCardinal(Data)); Result := TOLEMemoryStream.Create; TOLEMemoryStream(Result).SetPointer(Data, I); end; end; end; procedure UnlockMediumData(Medium: TStgMedium); begin if Medium.tymed = TYMED_HGLOBAL then GlobalUnlock(Medium.hGlobal); end; function GetTreeFromDataObject(const DataObject: IDataObject; var Format: TFormatEtc): TObject; var Medium: TStgMedium; Data: PVTReference; begin Result := nil; if Assigned(DataObject) then begin Format.cfFormat := CF_VTREFERENCE; if DataObject.GetData(Format, Medium) = S_OK then begin Data := GlobalLock(Medium.hGlobal); if Assigned(Data) then begin if Data.Process = GetCurrentProcessID then Result := Data.Tree; GlobalUnlock(Medium.hGlobal); end; ReleaseStgMedium(@Medium); end; end; end; function AllocateGlobal(Data: Pointer; DataSize: Cardinal): HGLOBAL; var P:Pointer; begin Result := GlobalAlloc(GHND or GMEM_SHARE, DataSize); P := GlobalLock(Result); Move(Data^, P^, DataSize); GlobalUnlock(Result); end; //---------------------------------------------------------------------------------------------------------------------- // OLE drag and drop support classes // This is quite heavy stuff (compared with the VCL implementation) but is much better suited to fit the needs // of DD'ing various kinds of virtual data and works also between applications. //----------------- TEnumFormatEtc ------------------------------------------------------------------------------------- constructor TEnumFormatEtc.Create(Tree: TObject; AFormatEtcArray: TFormatEtcArray); var I: Integer; begin inherited Create; FTree := Tree; // Make a local copy of the format data. SetLength(FFormatEtcArray, Length(AFormatEtcArray)); for I := 0 to High(AFormatEtcArray) do FFormatEtcArray[I] := AFormatEtcArray[I]; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Clone(out Enum: IEnumFormatEtc): HResult; var AClone: TEnumFormatEtc; begin Result := S_OK; try AClone := TEnumFormatEtc.Create(nil, FFormatEtcArray); AClone.FCurrentIndex := FCurrentIndex; Enum := AClone as IEnumFormatEtc; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Next(celt: LongWord; out elt: FormatEtc; out pceltFetched: LongWord): HResult; var CopyCount: LongWord; begin Result := S_FALSE; CopyCount := Length(FFormatEtcArray) - FCurrentIndex; if celt < CopyCount then CopyCount := celt; if CopyCount > 0 then begin Move(FFormatEtcArray[FCurrentIndex], elt, CopyCount * SizeOf(TFormatEtc)); Inc(FCurrentIndex, CopyCount); Result := S_OK; end; //todo_lcl_check Delphi treats pceltFetched an PInteger. Implemented like in fpc.activex. What heappens with // a C Program call with a NULL in pCeltFetcjed?? //Answer: Yes. Is necessary a check here if @pceltFetched <> nil then pceltFetched := CopyCount; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Reset: HResult; begin FCurrentIndex := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TEnumFormatEtc.Skip(celt: LongWord): HResult; begin if FCurrentIndex + celt < High(FFormatEtcArray) then begin Inc(FCurrentIndex, celt); Result := S_Ok; end else Result := S_FALSE; end; //----------------- TVTDataObject -------------------------------------------------------------------------------------- constructor TVTDataObject.Create(AOwner: TObject; ForClipboard: Boolean); begin inherited Create; FOwner := AOwner; FForClipboard := ForClipboard; TVirtualTreeAccess(FOwner).GetNativeClipboardFormats(FFormatEtcArray); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDataObject.Destroy; var I: Integer; StgMedium: PStgMedium; begin // Cancel a pending clipboard operation if this data object was created for the clipboard and // is freed because something else is placed there. if FForClipboard and not (tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates) then TVirtualTreeAccess(FOwner).CancelCutOrCopy; // Release any internal clipboard formats for I := 0 to High(FormatEtcArray) do begin StgMedium := FindInternalStgMedium(FormatEtcArray[I].cfFormat); if Assigned(StgMedium) then ReleaseStgMedium(StgMedium); end; FormatEtcArray := nil; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; // Uses COM object identity: An explicit call to the IUnknown::QueryInterface method, requesting the IUnknown // interface, will always return the same pointer. begin if Assigned(TestUnknown) then begin if TestUnknown.QueryInterface(IUnknown, Result) = 0 then Result._Release // Don't actually need it just need the pointer value else Result := TestUnknown end else Result := TestUnknown end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; begin Result := (FormatEtc1.cfFormat = FormatEtc2.cfFormat) and (FormatEtc1.ptd = FormatEtc2.ptd) and (FormatEtc1.dwAspect = FormatEtc2.dwAspect) and (FormatEtc1.lindex = FormatEtc2.lindex) and (FormatEtc1.tymed and FormatEtc2.tymed <> 0); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; var I: integer; begin Result := -1; for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(TestFormatEtc, FormatEtcArray[I]) then begin Result := I; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.FindInternalStgMedium(Format: TClipFormat): PStgMedium; var I: integer; begin Result := nil; for I := 0 to High(InternalStgMediumArray) do begin if Format = InternalStgMediumArray[I].Format then begin Result := @InternalStgMediumArray[I].Medium; Break; end end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.HGlobalClone(HGlobal: THandle): THandle; // Returns a global memory block that is a copy of the passed memory block. var Size: Cardinal; Data, NewData: PChar; begin Size := GlobalSize(HGlobal); Result := GlobalAlloc(GPTR, Size); Data := GlobalLock(hGlobal); try NewData := GlobalLock(Result); try Move(Data^, NewData^, Size); finally GlobalUnLock(Result); end finally GlobalUnLock(hGlobal); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; // Tries to render one of the formats which have been stored via the SetData method. // Since this data is already there it is just copied or its reference count is increased (depending on storage medium). var InternalMedium: PStgMedium; begin Result := True; InternalMedium := FindInternalStgMedium(FormatEtcIn.cfFormat); if Assigned(InternalMedium) then OLEResult := StgMediumIncRef(InternalMedium^, Medium, False, Self as IDataObject) else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; // InStgMedium is the data that is requested, OutStgMedium is the data that we are to return either a copy of or // increase the IDataObject's reference and send ourselves back as the data (unkForRelease). The InStgMedium is usually // the result of a call to find a particular FormatEtc that has been stored locally through a call to SetData. // If CopyInMedium is not true we already have a local copy of the data when the SetData function was called (during // that call the CopyInMedium must be true). Then as the caller asks for the data through GetData we do not have to make // copy of the data for the caller only to have them destroy it then need us to copy it again if necessary. // This way we increase the reference count to ourselves and pass the STGMEDIUM structure initially stored in SetData. // This way when the caller frees the structure it sees the unkForRelease is not nil and calls Release on the object // instead of destroying the actual data. var Len: Integer; begin Result := S_OK; // Simply copy all fields to start with. OutStgMedium := InStgMedium; // The data handled here always results from a call of SetData we got. This ensures only one storage format // is indicated and hence the case statement below is safe (IDataObject.GetData can optionally use several // storage formats). case InStgMedium.tymed of TYMED_HGLOBAL: begin if CopyInMedium then begin // Generate a unique copy of the data passed OutStgMedium.hGlobal := HGlobalClone(InStgMedium.hGlobal); if OutStgMedium.hGlobal = 0 then Result := E_OUTOFMEMORY end else // Don't generate a copy just use ourselves and the copy previously saved. OutStgMedium.PunkForRelease := Pointer(DataObject); // Does not increase RefCount. end; TYMED_FILE: begin //todo_lcl_check Len := Length(WideString(InStgMedium.lpszFileName)) + 1; // Don't forget the terminating null character. OutStgMedium.lpszFileName := CoTaskMemAlloc(2 * Len); Move(InStgMedium.lpszFileName^, OutStgMedium.lpszFileName^, 2 * Len); end; TYMED_ISTREAM: IUnknown(OutStgMedium.Pstm)._AddRef; TYMED_ISTORAGE: IUnknown(OutStgMedium.Pstg)._AddRef; TYMED_GDI: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy GDI objects right now. TYMED_MFPICT: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy MetaFile objects right now. TYMED_ENHMF: if not CopyInMedium then // Don't generate a copy just use ourselves and the previously saved data. OutStgMedium.PunkForRelease := Pointer(DataObject) // Does not increase RefCount. else Result := DV_E_TYMED; // Don't know how to copy enhanced metafiles objects right now. else Result := DV_E_TYMED; end; if (Result = S_OK) and Assigned(OutStgMedium.PunkForRelease) then IUnknown(OutStgMedium.PunkForRelease)._AddRef; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; // Advise sink management is greatly simplified by the IDataAdviseHolder interface. // We use this interface and forward all concerning calls to it. begin Result := S_OK; if FAdviseHolder = nil then Result := CreateDataAdviseHolder(FAdviseHolder); if Result = S_OK then Result := FAdviseHolder.Advise(Self as IDataObject, FormatEtc, advf, advSink, dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.DUnadvise(dwConnection: DWord): HResult; begin if FAdviseHolder = nil then Result := E_NOTIMPL else Result := FAdviseHolder.Unadvise(dwConnection); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumDAvise(Out enumAdvise : IEnumStatData):HResult; begin if FAdviseHolder = nil then Result := OLE_E_ADVISENOTSUPPORTED else Result := FAdviseHolder.EnumAdvise(enumAdvise); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; var NewList: TEnumFormatEtc; begin Result := E_FAIL; if Direction = DATADIR_GET then begin NewList := TEnumFormatEtc.Create(TVirtualTreeAccess(FOwner), FormatEtcArray); EnumFormatEtc := NewList as IEnumFormatEtc; Result := S_OK; end else EnumFormatEtc := nil; if EnumFormatEtc = nil then Result := OLE_S_USEREG; end; //---------------------------------------------------------------------------------------------------------------------- Function TVTDataObject.GetCanonicalFormatTEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; begin Result := DATA_S_SAMEFORMATETC; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; // Data is requested by clipboard or drop target. This method dispatchs the call // depending on the data being requested. var I: Integer; Data: PVTReference; begin // The tree reference format is always supported and returned from here. if FormatEtcIn.cfFormat = CF_VTREFERENCE then begin // Note: this format is not used while flushing the clipboard to avoid a dangling reference // when the owner tree is destroyed before the clipboard data is replaced with something else. if tsClipboardFlushing in TVirtualTreeAccess(FOwner).TreeStates then Result := E_FAIL else begin Medium.hGlobal := GlobalAlloc(GHND or GMEM_SHARE, SizeOf(TVTReference)); Data := GlobalLock(Medium.hGlobal); Data.Process := GetCurrentProcessID; Data.Tree := TBaseVirtualTree(FOwner); GlobalUnlock(Medium.hGlobal); Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; end else begin try // See if we accept this type and if not get the correct return value. Result := QueryGetData(FormatEtcIn); if Result = S_OK then begin for I := 0 to High(FormatEtcArray) do begin if EqualFormatEtc(FormatEtcIn, FormatEtcArray[I]) then begin if not RenderInternalOLEData(FormatEtcIn, Medium, Result) then Result := TVirtualTreeAccess(FOwner).RenderOLEData(FormatEtcIn, Medium, FForClipboard); Break; end; end end except FillChar(Medium, SizeOf(Medium), #0); Result := E_FAIL; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.QueryGetData(const FormatEtc: TFormatEtc): HResult; var I: Integer; begin Result := DV_E_CLIPFORMAT; for I := 0 to High(FFormatEtcArray) do begin if FormatEtc.cfFormat = FFormatEtcArray[I].cfFormat then begin if (FormatEtc.tymed and FFormatEtcArray[I].tymed) <> 0 then begin if FormatEtc.dwAspect = FFormatEtcArray[I].dwAspect then begin if FormatEtc.lindex = FFormatEtcArray[I].lindex then begin Result := S_OK; Break; end else Result := DV_E_LINDEX; end else Result := DV_E_DVASPECT; end else Result := DV_E_TYMED; end; end end; //---------------------------------------------------------------------------------------------------------------------- function TVTDataObject.SetData(const FormatEtc: TFormatEtc;{$ifdef VER2_0}var{$else}const{$endif} Medium: TStgMedium; DoRelease: BOOL): HResult; // Allows dynamic adding to the IDataObject during its existance. Most noteably it is used to implement // IDropSourceHelper and allows to set a special format for optimized moves during a shell transfer. var Index: Integer; LocalStgMedium: PStgMedium; begin // See if we already have a format of that type available. Index := FindFormatEtc(FormatEtc, FormatEtcArray); if Index > - 1 then begin // Just use the TFormatEct in the array after releasing the data. LocalStgMedium := FindInternalStgMedium(FormatEtcArray[Index].cfFormat); if Assigned(LocalStgMedium) then begin ReleaseStgMedium(LocalStgMedium); FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; end else begin // It is a new format so create a new TFormatCollectionItem, copy the // FormatEtc parameter into the new object and and put it in the list. SetLength(FFormatEtcArray, Length(FormatEtcArray) + 1); FormatEtcArray[High(FormatEtcArray)] := FormatEtc; // Create a new InternalStgMedium and initialize it and associate it with the format. SetLength(FInternalStgMediumArray, Length(InternalStgMediumArray) + 1); InternalStgMediumArray[High(InternalStgMediumArray)].Format := FormatEtc.cfFormat; LocalStgMedium := @InternalStgMediumArray[High(InternalStgMediumArray)].Medium; FillChar(LocalStgMedium^, SizeOf(LocalStgMedium^), #0); end; if DoRelease then begin // We are simply being given the data and we take control of it. LocalStgMedium^ := Medium; Result := S_OK end else begin // We need to reference count or copy the data and keep our own references to it. Result := StgMediumIncRef(Medium, LocalStgMedium^, True, Self as IDataObject); // Can get a circular reference if the client calls GetData then calls SetData with the same StgMedium. // Because the unkForRelease for the IDataObject can be marshalled it is necessary to get pointers that // can be correctly compared. See the IDragSourceHelper article by Raymond Chen at MSDN. if Assigned(LocalStgMedium.PunkForRelease) then begin if CanonicalIUnknown(Self) = CanonicalIUnknown(IUnknown(LocalStgMedium.PunkForRelease)) then IUnknown(LocalStgMedium.PunkForRelease) := nil; // release the interface end; end; // Tell all registered advice sinks about the data change. if Assigned(FAdviseHolder) then FAdviseHolder.SendOnDataChange(Self as IDataObject, 0, 0); end; //----------------- TVTDragManager ------------------------------------------------------------------------------------- constructor TVTDragManager.Create(AOwner: TComponent); begin inherited Create; FOwner := AOwner; // Create an instance of the drop target helper interface. This will fail but not harm on systems which do // not support this interface (everything below Windows 2000); CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDropTargetHelper, FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragManager.Destroy; begin // Set the owner's reference to us to nil otherwise it will access an invalid pointer // after our desctruction is complete. TVirtualTreeAccess(FOwner).FreeDragManager; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDataObject: IDataObject; begin // When the owner tree starts a drag operation then it gets a data object here to pass it to the OLE subsystem. // In this case there is no local reference to a data object and one is created (but not stored). // If there is a local reference then the owner tree is currently the drop target and the stored interface is // that of the drag initiator. if Assigned(FDataObject) then Result := FDataObject else begin Result := TVirtualTreeAccess(FOwner).DoCreateDataObject; if Result = nil then Result := TVTDataObject.Create(FOwner, False) as IDataObject; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDragSource: TObject; begin Result := FDragSource; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetDropTargetHelperSupported: Boolean; begin Result := Assigned(FDropTargetHelper); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GetIsDropTarget: Boolean; begin Result := FIsDropTarget; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin FDataObject := DataObject; FIsDropTarget := True; SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @FFullDragging, 0); // If full dragging of window contents is disabled in the system then our tree windows will be locked // and cannot be updated during a drag operation. With the following call painting is again enabled. if not FFullDragging then LockWindowUpdate(0); if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragEnter(TBaseVirtualTree(FOwner).Handle, DataObject, Pt, Effect); FDragSource := TVirtualTreeAccess(FOwner).GetTreeFromDataObject(DataObject); Result := TVirtualTreeAccess(FOwner).DragEnter(KeyState, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragLeave: HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; TVirtualTreeAccess(FOwner).DragLeave; FIsDropTarget := False; FDragSource := nil; FDataObject := nil; Result := NOERROR; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragOver(Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragOver(FDragSource, KeyState, dsDragMove, Pt, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.Drop(DataObject, Pt, Effect); Result := TVirtualTreeAccess(FOwner).DragDrop(DataObject, KeyState, Pt, Effect); FIsDropTarget := False; FDataObject := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragManager.ForceDragLeave; // Some drop targets, e.g. Internet Explorer leave a drag image on screen instead removing it when they receive // a drop action. This method calls the drop target helper's DragLeave method to ensure it removes the drag image from // screen. Unfortunately, sometimes not even this does help (e.g. when dragging text from VT to a text field in IE). begin if Assigned(FDropTargetHelper) and FFullDragging then FDropTargetHelper.DragLeave; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.GiveFeedback(Effect: LongWord): HResult; begin Result := DRAGDROP_S_USEDEFAULTCURSORS; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragManager.QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; var RButton, LButton: Boolean; begin LButton := (KeyState and MK_LBUTTON) <> 0; RButton := (KeyState and MK_RBUTTON) <> 0; // Drag'n drop canceled by pressing both mouse buttons or Esc? if (LButton and RButton) or EscapePressed then Result := DRAGDROP_S_CANCEL else // Drag'n drop finished? if not (LButton or RButton) then Result := DRAGDROP_S_DROP else Result := S_OK; end; end. �����������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VirtualTrees.pas�����������������������������������������0000644�0001750�0000144�00004457643�12140233030�023314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VirtualTrees; {$mode delphi}{$H+} {$packset 1} // Version 4.8.7 // // The contents of this file are 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/MPL/ // // Alternatively, you may redistribute this library, use and/or modify it under the terms of the // GNU Lesser General Public License as published by the Free Software Foundation; // either version 2.1 of the License, or (at your option) any later version. // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. // // 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. // // The original code is VirtualTrees.pas, released September 30, 2000. // // The initial developer of the original code is digital publishing AG (Munich, Germany, www.digitalpublishing.de), // written by Mike Lischke (public@soft-gems.net, www.soft-gems.net). // // Portions created by digital publishing AG are Copyright // (C) 1999-2001 digital publishing AG. All Rights Reserved. //---------------------------------------------------------------------------------------------------------------------- // // April 2010 // - Bug fix: Removed active column changing from TBaseVirtualTree.WMKeyDown to re-gain standard conforming // behaviour for VK_NEXT and VK_PRIOR // - Bug fix: Paint option toUseExplorerTheme works properly without defining columns // - Bug fix: TBaseVirtualTree.PrepareBitmaps now correctly closes the theme handle // January 2010 // - Bug fix: TBaseVirtualTree.AdjustTotalHeight now longer calculates wrong total heights if nodes have been // made invisible // - Bug fix: TCustomVirtualStringTree.OnMeasureTextWidth now works as intended // - Bug fix: Added missing $IFDEFs concerning theming support // - Bug fix: Removed default from properties TVirtualTreeColumn.Color and TVirtualTreeColumn.BiDiMode // July 2009 // - Bug fix: TWorkerThread will no longer reference the tree after it has been destroyed (Mantis issue #384) // - Bug fix: TBaseVirtualTree.InternalConnectNode checked the expanded state of the wrong node if Mode was // amAddChildFirst or amAddChildLast // June 2009 // - Bug fix: fixed some issues concerning the vista theme handling // - Improvement: removed hidden node handling in this branch // - Improvement: reverted header click handling to old version to keep compatibility in this branch // - Improvement: removed TVTPaintOption toHideTreeLinesIfThemed // May 2009 // - Improvement: new TVTMiscOption toEditOnClick, toEditOnDblClick to control if editing can be started with a single // click or a double click // - Bug fix: the internal pointers of TBufferedAnsiString are now PAnsiChar to work correctly with Delphi 2009 // April 2009 // - Bug fix: TBaseVirtualTree.GetVisibleParent no longer returns the given node in case it is fully visible // - Improvement: fixed a potential issue in TVirtualTreeColumns.TotalWidth in case it is called before // FPositionToIndex is initialized // - Bug fix: TBaseVirtualTree.CollectSelectedNodesLTR and TBaseVirtualTree.CollectSelectedNodesRTL handle straight // vertical selection rectangles no longer as empty // - Bug fix: TCheckImageKind.ckSystemDefault now works as intended // - Improvement: made the following methods of TBaseVirtualTree virtual: PrepareCell, AddChild, BeginUpdate, // EndUpdate and SortTree // - Improvement: made TBaseVirtualTree.PrepareCell protected // - Improvement: moved some members of TVTEdit and TStringEditLink from private to protected // - Improvement: re-designed header click handling // - Improvement: new TVTPaintOption toShowHiddenNodes to globally ignore the hidden state of nodes // - Improvement: individual nodes can now be hidden without affecting their children // - Improvement: re-designed Explorer theme drawing // - Bug fix: corrected allocation problems in TBufferedAnsiString and TWideBufferedString // March 2009 // - Bug fix: fixed an issue in TVirtualTreeColumns.HandleClick that could lead to a case where no header click event // is triggered // - Bug fix: fixed an issue in TBaseVirtualTree.HandleHotTrack that could lead to an endless loop under certain // conditions // - Improvement: removed unused variables in TVirtualTreeColumn.ComputeHeaderLayout // - Bug fix: corrected TBaseVirtualTree.GetVisibleParent // - Improvement: extended hot node tracking to track the hot column too // - Improvement: new THitPosition hiOnItemButtonExact used to draw hot buttons when using Windows Vista's Explorer // theme // - Improvement: new TVTPaintOption toHideTreeLinesIfThemed to consider toShowTreeLines only if running unthemed // - Improvement: new TVTPaintOption toUseExplorerTheme to draw the tree like Windows Vista's Explorer treeview // February 2009 // - Bug fix: reverted the implementation of DrawTextW back to the one prior to 4.8.1 as the line end detection // lead to a compiler warning under Delphi 2009 // - Bug fix: corrected implementation of GetStringDrawRect to match its declaration (UnicodeString vs WideString) // - Bug fix: the node focus will no longer change if a TVTMiscOption.toGridExtensions is set and one clicks right of // (or left of, if right-to-left reading) the last column // - Bug fix: fixed an issue with TVTHeader.Assign that could lead to an access violation if the header is created at // runtime // - Bug fix: one can no longer change a node's height with the right mouse button even if toNodeHeightResize and // toRightClickSelect are set // - Improvement: TVTAutoOption.toDisableAutoScrollOnFocus now works for nodes too // - Improvement: new property TBaseVirtualTree.SelectionLocked to disable changing the selection // - Improvement: made the dual-scroll effect in TBaseVirtualTree.ToggleNode much smoother // - Bug fix: removed off-by-1 errors in TBaseVirtualTree.ToggleNode // - Bug fix: added a check for FUpdateCount to TBaseVirtualTree.SetUpdateState as otherwise every call to // TBaseVirtualTree.DoBeforeCellPaint to get the cell content margin within an Begin/EndUpdate-block would // re-enable painting // - Bug fix: TVTHeader.HandleMessage could provide a wrong column index to OnBeforeColumnWidthTracking in some cases // - Improvement: new properties TBaseVirtualTree.OnBeforeAutoFitColumn, TBaseVirtualTree.OnAfterAutoFitColumn // - Improvement: new procedures TBaseVirtualTree.CancelOperation, TBaseVirtualTree.BeginOperation, // TBaseVirtualTree.EndOperation and new property TBaseVirtualTree.OperationCanceled to enable the // application to stop (possibly) long-running operations // - Improvement: integrated changes from Andreas Hausladen // - Improvement: integrated changes from Dmitry Zegebart where applicable // - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetDisplayRect // - Bug fix: changed the size of the buffer used in TBaseVirtualTree.PaintTree to paint the area below the last node // as the bitmap was not completely erased using previous size under certain conditions // - Bug fix: fixed TBaseVirtualTree.GetPreviousLevel // January 2009 // - Bug fix: removed off-by-1 error in TBaseVirtualTree.GetBottomNode // - Improvement: improved speed of TBaseVirtualTree.GetMaxColumnWidth when using UseSmartColumnWidth // - Version is now 4.8.0 // December 2008 // - Bug fix: modified TBaseVirtualTree.UpdateHorizontalScrollbar and TBaseVirtualTree.UpdateVerticalScrollbar to // recalculate the tree's dimensions even if an update is in progress // - Improvement: renamed TVTHeaderState hsTracking and hsTrackPending to hsColumnWidthTracking and // hsColumnWidthTrackPending // - Improvement: modified TBaseVirtualTree.GetFirstVisible and TBaseVirtualTree.GetFirstVisibleNoInit to optionally // take a node to specify where to start // - Improvement: modified TVTAfterGetMaxColumnWidthEvent to make the result of TBaseVirtualTree.GetMaxColumnWidth // changable // - Bug fix: corrected TBaseVirtualTree.GetMaxColumnWidth to consider toFixedIndent and no longer take nodes into // account that are just above or below the visible area // - Improvement: new property TVirtualTreeColumns.DefaultWidth // - Improvement: new property TVTHeader.FixedAreaConstraints (new class TVTFixedAreaConstraints) to limit the // fixed area (header, fixed columns) to a percentage of the client area // November 2008 // - Improvement: new cursor added: crVertSplit used for height tracking // - Improvement: changed type of TVTHeader.Height from Cardinal to Integer to make boundary checks easier // - Improvement: new properties TVTHeader.MinHeight and TVTHeader.MaxHeight // - Improvement: new VirtualTreeStates tsNodeHeightTracking and tsNodeHeightTrackPending // - Improvement: new HeaderStates hsHeightTracking and hsHeightTrackPending // - Improvement: new TVTMiscOption toNodeHeightResize to allow changing node heights via mouse // - Improvement: new TVTHeaderOption hoHeightResize to allow changing header height via mouse // - Improvement: new properties TBaseVirtualTree.OnHeaderHeightTracking, TBaseVirtualTree.OnHeaderDblClickResize, // TBaseVirtualTree.OnColumnWidthTracking, TBaseVirtualTree.OnColumnWidthDblClickResize, // TBaseVirtualTree.OnNodeHeightTracking, TBaseVirtualTree.OnNodeHeightDblClickResize // - Improvement: new function TVTHeader.ResizeColumns to resize multiple columns at once // - Improvement: TVTHeader.DetermineSplitterIndex is no longer influenced by non-resizable columns // - Bug fix: TBaseVirtualTree.ToggleNode now uses DoStateChange to modify FStates // - Bug fix: TBaseVirtualTree.DoBeforeCellPaint now saves the update rect if CellPaintMode is cpmGetContentMargin // and restores it afterwards // - Improvement: modified TBaseVirtualTree.CmMouseWheel to handle mice with wheel delta < 120 correctly // - Improvement: modified TVTHeader.LoadFromStream and WriteToStream to save ParentFont // - Improvement: TVTHeader.Font is now only stored by Delphi if ParentFont is False (Mantis issue #217) // - Bug fix: corrected TVTHeader.Create to set TVTHeader.FOptions correctly to the default value (Mantis issue #333) // - Improvement: new TVTAnimationOption toAdvancedAnimatedToggle to scroll the node to be toggled animatedly instead // of just scroll its child nodes animatedly // - Improvement: added VirtualTreeState tsToggling to eliminate artefacts caused by TBaseVirtualTree.DoSetOffsetXY // while toggling // - Bug fix: corrected button handling when toFixedIndent is set // - Improvement: redesigned TBaseVirtualTree.ToggleNode to harmonize the visual toggle behaviour independent of // toChildrenAbove // - Improvement: made TBaseVirtualTree.CanEdit public // - Improvement: added parameter ConsiderChildrenAbove to TGetNextNodeProc // - Improvement: modified all variants of TBaseVirtualTree.GetFirst and TBaseVirtualTree.GetLast to optionally // consider toChildrenAbove // October 2008 // - Bugfix: removed 'FVisibleCount := 0' from TBaseVirtualTree.Clear as this would lead to incorrect VisibleCount in // read-only mode // - Bugfix: fixed a condition in TBaseVirtualTree.ToggleCallback that could lead to artefacts // - Improvement: changed the implementation of TBaseVirtualTree.GetNext/GetPrevious so that no penalties occur if // toChildrenAbove is not set // - Improvement: TBaseVirtualTree.ToggleNode will no longer leave nodes with state vsToggeling if an exception // occurs // - Improvement: improved behaviour of TBaseVirtualTree.ToggleNode in case toChildrenAbove is set // - Bug fix: corrected TBaseVirtualTree.ScrollIntoView to behave as expected when no fixed columns exist // - Bug fix: extended TBaseVirtualTree.InitializeLineImageAndSelectLevel to eliminate artifacts while scrolling with // toChildrenAbove set // - Bug fix: corrected CompareNodePositions to consider toChildrenAbove // - Bug fix: corrected ToggleNode to scroll correctly if toChildrenAbove and toAnimatedToggle are set // - Improvement: new TVTPaintOption toFixedIndent to draw the tree with a fixed ident (instead of node level // dependent indents) // - Improvement: new TVTPaintOption toChildrenAbove to draw children nodes above their parent // August 2008 // - Improvement: redesigned and overloaded TBaseVirtualTree.ScrollIntoView in order to use vertical scrolling // separately // - Improvement: optimized TBaseVirtualTree.ScrollIntoView for horizontal scrolling // - Improvement: in TBaseVirtualTree.WMKeyDown column navigation for VK_PRIOR and VK_NEXT is now handled in same way // as row navigation // - Improvement: new TVTHeaderOption hoDisableAnimatedResize to disable animated resize for all columns // - Improvement: new TVTColumnOption coDisableAnimatedResize to disable animated resize for a specific column // - Improvement: in TBaseVirtualTree.UpdateHorizontalScrollBar and TBaseVirtualTree.UpdateVerticalScrollBar scrollbar // updates now avoided for tsUpdating in FStates // July 2008 // - Improvement: in TBaseVirtualTree.WMHScroll the horizontal page scrolling now considers fixed columns // - Improvement: in TBaseVirtualTree.ScrollIntoView the case of FFocusedColumn being invalid is considered // - Improvement: in TBaseVirtualTree.HandleMouseDown DoFocusNode is not called if node focus did not change // - Improvement: in TBaseVirtualTree.SetFocusedColumn the focused node will only be invalidate if it was actually // scrolled into view // - Improvement: new TVTColumnOption coAllowFocus to affect column focus behaviour // - Improvement: new function TVTHeader.AllowFocus to check wether a column can be focused // - Improvement: in TBaseVirtualTree.SetFocusedColumn the old colunm and the new column are both invalidated // - Improvement: merged latest changes from Jim into current code base. // June 2008 // - Improvement: new property TVirtualTreeColumns.Count // - Bug fix: in TVirtualTreeColumns.AnimatedResize the column is validated (to avoid "List index out of bounds") // - Improvement: the content retangle of the cell can be modified via the OnBeforeCellPaint event, the cell paint // mode indicates wether OnBeforeCellPaint is called for painting the cell or just for getting the // cell content margin // - Improvement: new functions added: TBaseVirtualTree.DoGetCellContentMargins, // TCustomVirtualDrawTree.DoGetCellContentMargin // - Improvement: new property: TCustomVirtualDrawTree.OnGetCellContentMargin // - Improvement: in TBaseVirtualTree.GetMaxColumnWidth the cell content margin is considered // - Improvement: in TBaseVirtualTree.CMHintShow the cell content margin is considered for singleline tooltips // - Improvement: new function added: TVTHeader.DoGetPopupMenu (to query the application via TreeView.FOnGetPopupMenu // for a column specific header popup menu) // - Improvement: new property added: TBaseVirtualTree.OnCanSplitterResizeColumn, // new function added: TVirtualTreeColumns.GetScrollWidth // - Improvement: horizontal page scrolling now uses the average column width (of all visible, non-fixed columns) as // scroll amount // - Improvement: procedure TBaseVirtualTree.CMMouseWheel redesigned // - Bug fix: TVTHeader.DetermineSplitterIndex works correctly even when using fixed columns // - Bug fix: on right-to-left BiDiMode TVirtualTreeColumns.PaintHeader respects (left) scroll bar correctly // - Bug fix: for multiline tooltips also the column width is checked to determine the tooltip is needed or // unnecessary // - Improvement: the result value of GetUseSmartColumnWidth is initialized correctly // - Improvement: added hoFullRepaintOnResize to TVTHeaderOption to enable full header repainting (instead of // repainting all subsequent columns only) on resizing a column // - Bug fix: horizontal page scrolling via mouse wheel now works correctly, i.e. in TBaseVirtualTree.CMMouseWheel // ScrollCount includes GetVisibleFixedWidth and FIndent // - Improvement: new TVTColumnOption coSmartResize to avoid contradicting the virtual paradigm // - Improvement: horizontal scrolling via mouse wheel can be forced by holding the shift key // - Improvement: new parameter for function TBaseVirtualTree.GetMaxColumnWidth added: UseSmartColumnWidth (to // avoid contradicting the virtual paradigm, i.e. leave nodes out of consideration which are not in // view) // - Improvement: new parameters for TVTHeader.AutoFitColumns added: SmartAutoFitType, RangeStartCol and // RangeEndCol // - Improvement: new parameters for events FOUnknownnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth // and FOnBeforeGetMaxColumnWidth added // - Version is now 4.6.0 // May 2008 // - Improvement: new properties: FOnAfterAutoFitColumns, FOnBeforeAutoFitColumns, FOnAfterGetMaxColumnWidth and // FOnBeforeGetMaxColumnWidth // - Bug fix: FDropTargetNode is considered in TBaseVirtualTree.DoFreeNode // August 2007 // - for accessibility, added an OnGetImageText event that can be used to give accessible text to images used in nodes. // - Implemented an ImageText property used by the VTAccessibility unit to retrieve text for a given node and its column. // - Switched loading of accessibility libraries to dynamic from static to avoid problems in Win95 // June 2007 // - Bug fix: Fixed a problem with potentially large amount of nodes (larger than 2 billion) in // TBaseVirtualTree.SetChildCount. // - Bug fix: remove hint if any in case the tree loses the focus. // - Improvement: TVirtualTreeColumns.HandleClick is now virtual, introduced TVTHeader.DoSetSortColumn. // - Bug fix: compiler error due to old variable reference when enabling flat scrollbars. // May 2007 // - Improvement: new functions: GetPreviousSelected, GetPreviousChecked, GetCheckedCount, // GetPreviousCutCopy, GetCutCopyCount, GetFirstLeaf, GetNextLeaf, // GetPreviousLeaf, GetFirstLevel, GetNextLevel, GetPreviousLevel // - Improvement: new properties: CheckedCount, CutCopyCount // - Improvement: DoFocusChanging for finding a valid column (TBaseVirtualTree.WMKeyDown) // March 2007 // - Improvement: adjusted accessibility implementation to compile with pre-BDS IDEs. // - If a column is not visible, MultiColumnAccessibility now will not include it. // January 2007 // - Improvement: added code donation from Marco Zehe (with help from Sebastian Modersohn) which implements the // MS accessibility interface for Virtual Treeview. // December 2006 // - Improvement: bidi mode implementation finished (toAutoBidiColumnOrdering introduced) // - Change: right-to-left flag removed from shorten string methods/events (not necessary) // - Version is now 4.5.0 // November 2006 // - Bug fix: Total height is wrong on reading from stream // September 2006 // - Bug fix: Mantis issue #326 // July 2006 // - Change: value for crHeaderSplit cursor conflicts with other resource IDs, so I changed it. // - Published OnStartDrag in VirtualDrawTree. // April 2006 // - Bug fix: check for MMX availabiltiy is missing in some places before calling MMX code // - Bug fix: flag for VCL dragging was removed too late causing all kind of problems with mouse up code in VCL drag mode. // - Bug fix: If the past mode in ProcessOLEData is amInsertAfter then nodes where inserted in the wrong order. // March 2006 // - Bug fix: total count and total height is wrong after loading from stream // - Bug fix: variable node height computation // - Bug fix: FLastChangedNode was not reset in DoFreeNode // February 2006 // - Improvement: GetFirstChecked now also has a default value for its state parameter. // - Improvement: avoid potential reentrancy problems in paint code by checking for the paint state there. // January 2006 // - Bug fix: disabled images are now drawn like enabled ones (with respect to position, indices etc.). // - Improvement: New property BottomSpace, allows to specify an additional area below the last node in the tree. // - Bug fix: VT.EndUpdate did not invalidate the cache so the cache was never used again after that. // - Improvement: tree states for double clicks (left, middle, right). // December 2005 // - Bug fix: check for column index for auto setting main column if the current one is deleted. // // For full document history see help file. // // Credits for their valuable assistance and code donations go to: // Freddy Ertl, Marian Aldenh?vel, Thomas Bogenrieder, Jim Kuenemann, Werner Lehmann, Jens Treichler, // Paul Gallagher (IBO tree), Ondrej Kelle, Ronaldo Melo Ferraz, Heri Bender, Roland Bed?rftig (BCB) // Anthony Mills, Alexander Egorushkin (BCB), Mathias Torell (BCB), Frank van den Bergh, Vadim Sedulin, Peter Evans, // Milan Vandrovec (BCB), Steve Moss, Joe White, David Clark, Anders Thomsen, Igor Afanasyev, Eugene Programmer, // Corbin Dunn, Richard Pringle, Uli Gerhardt, Azza, Igor Savkic, Daniel Bauten, Timo Tegtmeier, Dmitry Zegebart, // Andreas Hausladen // Beta testers: // Freddy Ertl, Hans-J?rgen Schnorrenberg, Werner Lehmann, Jim Kueneman, Vadim Sedulin, Moritz Franckenstein, // Wim van der Vegt, Franc v/d Westelaken // Indirect contribution (via publicly accessible work of those persons): // Alex Denissov, Hiroyuki Hori (MMXAsm expert) // Documentation: // Markus Spoettl and toolsfactory GbR (http://www.doc-o-matic.com/, sponsoring Soft Gems development // with a free copy of the Doc-O-Matic help authoring system), Sven H. (Step by step tutorial) // CLX: // Dmitri Dmitrienko (initial developer) // Source repository: // Subversion (server), TortoiseSVN (client tools), Fisheye (Web interface) // Accessability implementation: // Marco Zehe (with help from Sebastian Modersohn) // LCL Port: // Luiz Am?rico Pereira C?mara //---------------------------------------------------------------------------------------------------------------------- interface {$I VTConfig.inc} uses {$ifdef Windows} Windows, ActiveX, CommCtrl, {$else} FakeActiveX, {$endif} OleUtils, LCLIntf, {$ifdef USE_DELPHICOMPAT} DelphiCompat, LclExt, {$endif} virtualpanningwindow, VTGraphics, //alpha blend functions {$ifdef DEBUG_VTV} vtlogger, {$endif} LCLType, LResources, LMessages, Types, SysUtils, Classes, Graphics, Controls, Forms, ImgList, StdCtrls, Menus, Printers, SyncObjs, // Thread support Clipbrd // Clipboard support {$ifdef ThemeSupport} , Themes , TmSchema {$endif ThemeSupport} {$ifdef EnableAccessible} , oleacc // for MSAA IAccessible support {$endif}; const {$I lclconstants.inc} {$if defined(LCLGtk) or defined(LCLGtk2)} {$define Gtk} {$endif} {$if defined(Gtk)} {$define ManualClipNeeded} {$endif} {$if defined(LCLGtk2) or defined(LCLCarbon) or defined(LCLQt)} {$define ContextMenuBeforeMouseUp} {$endif} VTMajorVersion = 4; VTMinorVersion = 8; VTReleaseVersion = 7; VTTreeStreamVersion = 2; VTHeaderStreamVersion = 6; // The header needs an own stream version to indicate changes only relevant to the header. CacheThreshold = 2000; // Number of nodes a tree must at least have to start caching and at the same // time the maximum number of nodes between two cache entries. FadeAnimationStepCount = 255; // Number of animation steps for hint fading (0..255). ShadowSize = 5; // Size in pixels of the hint shadow. This value has no influence on Win2K and XP systems // as those OSes have native shadow support. // Special identifiers for columns. NoColumn = -1; InvalidColumn = -2; // Indices for check state images used for checking. ckEmpty = 0; // an empty image used as place holder // radio buttons ckRadioUncheckedNormal = 1; ckRadioUncheckedHot = 2; ckRadioUncheckedPressed = 3; ckRadioUncheckedDisabled = 4; ckRadioCheckedNormal = 5; ckRadioCheckedHot = 6; ckRadioCheckedPressed = 7; ckRadioCheckedDisabled = 8; // check boxes ckCheckUncheckedNormal = 9; ckCheckUncheckedHot = 10; ckCheckUncheckedPressed = 11; ckCheckUncheckedDisabled = 12; ckCheckCheckedNormal = 13; ckCheckCheckedHot = 14; ckCheckCheckedPressed = 15; ckCheckCheckedDisabled = 16; ckCheckMixedNormal = 17; ckCheckMixedHot = 18; ckCheckMixedPressed = 19; ckCheckMixedDisabled = 20; // simple button ckButtonNormal = 21; ckButtonHot = 22; ckButtonPressed = 23; ckButtonDisabled = 24; // Instead using a TTimer class for each of the various events I use Windows timers with messages // as this is more economical. ExpandTimer = 1; EditTimer = 2; ScrollTimer = 4; ChangeTimer = 5; StructureChangeTimer = 6; SearchTimer = 7; // Need to use this message to release the edit link interface asynchronously. WM_CHANGESTATE = WM_APP + 32; // Virtual Treeview does not need to be subclassed by an eventual Theme Manager instance as it handles // Windows XP theme painting itself. Hence the special message is used to prevent subclassing. CM_DENYSUBCLASSING = CM_BASE + 2000; // Decoupling message for auto-adjusting the internal edit window. CM_AUTOADJUST = CM_BASE + 2005; // VT's own clipboard formats, // Note: The reference format is used internally to allow to link to a tree reference // to implement optimized moves and other back references. CFSTR_VIRTUALTREE = 'Virtual Tree Data'; CFSTR_VTREFERENCE = 'Virtual Tree Reference'; CFSTR_HTML = 'HTML Format'; CFSTR_RTF = 'Rich Text Format'; CFSTR_RTFNOOBJS = 'Rich Text Format Without Objects'; CFSTR_CSV = 'CSV'; // Drag image helpers for Windows 2000 and up. IID_IDropTargetHelper: TGUID = (D1: $4657278B; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); IID_IDragSourceHelper: TGUID = (D1: $DE5BF786; D2: $477A; D3: $11D2; D4: ($83, $9D, $00, $C0, $4F, $D9, $18, $D0)); IID_IDropTarget: TGUID = (D1: $00000122; D2: $0000; D3: $0000; D4: ($C0, $00, $00, $00, $00, $00, $00, $46)); CLSID_DragDropHelper: TGUID = (D1: $4657278A; D2: $411B; D3: $11D2; D4: ($83, $9A, $00, $C0, $4F, $D9, $18, $D0)); SID_IDropTargetHelper = '{4657278B-411B-11D2-839A-00C04FD918D0}'; SID_IDragSourceHelper = '{DE5BF786-477A-11D2-839D-00C04FD918D0}'; SID_IDropTarget = '{00000122-0000-0000-C000-000000000046}'; // Help identifiers for exceptions. Application developers are responsible to link them with actual help topics. hcTFEditLinkIsNil = 2000; hcTFWrongMoveError = 2001; hcTFWrongStreamFormat = 2002; hcTFWrongStreamVersion = 2003; hcTFStreamTooSmall = 2004; hcTFCorruptStream1 = 2005; hcTFCorruptStream2 = 2006; hcTFClipboardFailed = 2007; hcTFCannotSetUserData = 2008; // Header standard split cursor. crHeaderSplit = TCursor(63); // Height changing cursor. crVertSplit = TCursor(62); //Panning Cursors crVT_MOVEALL = TCursor(64); crVT_MOVEEW = TCursor(65); crVT_MOVENS = TCursor(66); crVT_MOVENW = TCursor(67); crVT_MOVESW = TCursor(68); crVT_MOVENE = TCursor(69); crVT_MOVESE = TCursor(70); crVT_MOVEW = TCursor(71); crVT_MOVEE = TCursor(72); crVT_MOVEN = TCursor(73); crVT_MOVES = TCursor(74); UtilityImageSize = 16; // Needed by descendants for hittests. {$if defined(LCLCarbon) or defined(LCLCocoa)} ssCtrlOS = ssMeta; // Mac OS X fix {$else} ssCtrlOS = ssCtrl; {$endif} var // Clipboard format IDs used in OLE drag'n drop and clipboard transfers. CF_VIRTUALTREE, CF_VTREFERENCE, CF_VRTF, CF_VRTFNOOBJS, // Unfortunately CF_RTF* is already defined as being // registration strings so I have to use different identifiers. CF_HTML, CF_CSV: Word; MMXAvailable: Boolean; // necessary to know because the blend code uses MMX instructions IsWinNT: Boolean; // Necessary to fix bugs in Win95/WinME (non-client area region intersection, edit resize) // and to allow for check of system dependent hint animation. IsWinVistaOrAbove: Boolean; type // The exception used by the trees. EVirtualTreeError = class(Exception); // Limits the speed interval which can be used for auto scrolling (milliseconds). TAutoScrollInterval = 1..1000; // Need to declare the correct WMNCPaint record as the VCL (D5-) doesn't. TRealWMNCPaint = packed record Msg: Cardinal; Rgn: HRGN; lParam: Integer; Result: Integer; end; // Be careful when adding new states as this might change the size of the type which in turn // changes the alignment in the node record as well as the stream chunks. // Do not reorder the states and always add new states at the end of this enumeration in order to avoid // breaking existing code. TVirtualNodeState = ( vsInitialized, // Set after the node has been initialized. vsChecking, // Node's check state is changing, avoid propagation. vsCutOrCopy, // Node is selected as cut or copy and paste source. vsDisabled, // Set if node is disabled. vsDeleting, // Set when the node is about to be freed. vsExpanded, // Set if the node is expanded. vsHasChildren, // Indicates the presence of child nodes without actually setting them. vsVisible, // Indicate whether the node is visible or not (independant of the expand states of its parents). vsSelected, // Set if the node is in the current selection. vsInitialUserData, // Set if (via AddChild or InsertNode) initial user data has been set which requires OnFreeNode. vsAllChildrenHidden, // Set if vsHasChildren is set and no child node has the vsVisible flag set. vsClearing, // A node's children are being deleted. Don't register structure change event. vsMultiline, // Node text is wrapped at the cell boundaries instead of being shorted. vsHeightMeasured, // Node height has been determined and does not need a recalculation. vsToggling // Set when a node is expanded/collapsed to prevent recursive calls. ); TVirtualNodeStates = set of TVirtualNodeState; // States used in InitNode to indicate states a node shall initially have. TVirtualNodeInitState = ( ivsDisabled, ivsExpanded, ivsHasChildren, ivsMultiline, ivsSelected ); TVirtualNodeInitStates = set of TVirtualNodeInitState; TVTScrollBarStyle = ( sbmRegular, sbmFlat, sbm3D ); // Options per column. TVTColumnOption = ( coAllowClick, // Column can be clicked (must be enabled too). coDraggable, // Column can be dragged. coEnabled, // Column is enabled. coParentBidiMode, // Column uses the parent's bidi mode. coParentColor, // Column uses the parent's background color. coResizable, // Column can be resized. coShowDropMark, // Column shows the drop mark if it is currently the drop target. coVisible, // Column is shown. coAutoSpring, // Column takes part in the auto spring feature of the header (must be resizable too). coFixed, // Column is fixed and can not be selected or scrolled etc. coSmartResize, // Column is resized to its largest entry which is in view (instead of its largest // visible entry). coAllowFocus, // Column can be focused. coDisableAnimatedResize, // Column resizing is not animated. coWrapCaption, // Caption could be wrapped across several header lines to fit columns width. coUseCaptionAlignment // Column's caption has its own aligment. ); TVTColumnOptions = set of TVTColumnOption; // These flags are used to indicate where a click in the header happened. TVTHeaderHitPosition = ( hhiNoWhere, // No column is involved (possible only if the tree is smaller than the client area). hhiOnColumn, // On a column. hhiOnIcon, // On the bitmap associated with a column. hhiOnCheckbox // On the checkbox if enabled. ); TVTHeaderHitPositions = set of TVTHeaderHitPosition; // These flags are returned by the hit test method. THitPosition = ( hiAbove, // above the client area (if relative) or the absolute tree area hiBelow, // below the client area (if relative) or the absolute tree area hiNowhere, // no node is involved (possible only if the tree is not as tall as the client area) hiOnItem, // on the bitmaps/buttons or label associated with an item hiOnItemButton, // on the button associated with an item hiOnItemButtonExact, // exactly on the button associated with an item hiOnItemCheckbox, // on the checkbox if enabled hiOnItemIndent, // in the indentation area in front of a node hiOnItemLabel, // on the normal text area associated with an item hiOnItemLeft, // in the area to the left of a node's text area (e.g. when right aligned or centered) hiOnItemRight, // in the area to the right of a node's text area (e.g. if left aligned or centered) hiOnNormalIcon, // on the "normal" image hiOnStateIcon, // on the state image hiToLeft, // to the left of the client area (if relative) or the absolute tree area hiToRight, // to the right of the client area (if relative) or the absolute tree area hiUpperSplitter, // in the upper splitter area of a node hiLowerSplitter // in the lower splitter area of a node ); THitPositions = set of THitPosition; TCheckType = ( ctNone, ctTriStateCheckBox, ctCheckBox, ctRadioButton, ctButton ); // The check states include both, transient and fluent (temporary) states. The only temporary state defined so // far is the pressed state. TCheckState = ( csUncheckedNormal, // unchecked and not pressed csUncheckedPressed, // unchecked and pressed csCheckedNormal, // checked and not pressed csCheckedPressed, // checked and pressed csMixedNormal, // 3-state check box and not pressed csMixedPressed // 3-state check box and pressed ); TCheckImageKind = ( ckLightCheck, // gray cross ckDarkCheck, // black cross ckLightTick, // gray tick mark ckDarkTick, // black tick mark ckFlat, // flat images (no 3D border) ckXP, // Windows XP style ckCustom, // application defined check images ckSystemFlat, // Flat system defined check images. ckSystemDefault // Uses the system check images, theme aware. ); // mode to describe a move action TVTNodeAttachMode = ( amNoWhere, // just for simplified tests, means to ignore the Add/Insert command amInsertBefore, // insert node just before destination (as sibling of destination) amInsertAfter, // insert node just after destionation (as sibling of destination) amAddChildFirst, // add node as first child of destination amAddChildLast // add node as last child of destination ); // modes to determine drop position further TDropMode = ( dmNowhere, dmAbove, dmOnNode, dmBelow ); // operations basically allowed during drag'n drop TDragOperation = ( doCopy, doMove, doLink ); TDragOperations = set of TDragOperation; TVTImageKind = ( ikNormal, ikSelected, ikState, ikOverlay ); TVTHintMode = ( hmDefault, // show the hint of the control hmHint, // show node specific hint string returned by the application hmHintAndDefault, // same as hmHint but show the control's hint if no node is concerned hmTooltip // show the text of the node if it isn't already fully shown ); // Indicates how to format a tooltip. TVTTooltipLineBreakStyle = ( hlbDefault, // Use multi-line style of the node. hlbForceSingleLine, // Use single line hint. hlbForceMultiLine // Use multi line hint. ); TMouseButtons = set of TMouseButton; // Used to describe the action to do when using the OnBeforeItemErase event. TItemEraseAction = ( eaColor, // Use the provided color to erase the background instead the one of the tree. eaDefault, // The tree should erase the item's background (bitmap or solid). eaNone // Do nothing. Let the application paint the background. ); // There is a heap of switchable behavior in the tree. Since published properties may never exceed 4 bytes, // which limits sets to at most 32 members, and because for better overview tree options are splitted // in various sub-options and are held in a commom options class. // // Options to customize tree appearance: TVTPaintOption = ( toHideFocusRect, // Avoid drawing the dotted rectangle around the currently focused node. toHideSelection, // Selected nodes are drawn as unselected nodes if the tree is unfocused. toHotTrack, // Track which node is under the mouse cursor. toPopupMode, // Paint tree as would it always have the focus (useful for tree combo boxes etc.) toShowBackground, // Use the background image if there's one. toShowButtons, // Display collapse/expand buttons left to a node. toShowDropmark, // Show the dropmark during drag'n drop operations. toShowHorzGridLines, // Display horizontal lines to simulate a grid. toShowRoot, // Show lines also at top level (does not show the hidden/internal root node). toShowTreeLines, // Display tree lines to show hierarchy of nodes. toShowVertGridLines, // Display vertical lines (depending on columns) to simulate a grid. toThemeAware, // Draw UI elements (header, tree buttons etc.) according to the current theme if // enabled (Windows XP+ only, application must be themed). toUseBlendedImages, // Enable alpha blending for ghosted nodes or those which are being cut/copied. toGhostedIfUnfocused, // Ghosted images are still shown as ghosted if unfocused (otherwise the become non-ghosted // images). toFullVertGridLines, // Display vertical lines over the full client area, not only the space occupied by nodes. // This option only has an effect if toShowVertGridLines is enabled too. toAlwaysHideSelection, // Do not draw node selection, regardless of focused state. toUseBlendedSelection, // Enable alpha blending for node selections. toStaticBackground, // Show simple static background instead of a tiled one. toChildrenAbove, // Display child nodes above their parent. toFixedIndent, // Draw the tree with a fixed indent. toUseExplorerTheme // Use the explorer theme if run under Windows Vista (or above). ); TVTPaintOptions = set of TVTPaintOption; // Options to toggle animation support: TVTAnimationOption = ( toAnimatedToggle, // Expanding and collapsing a node is animated (quick window scroll). toAdvancedAnimatedToggle // Do some advanced animation effects when toggling a node. ); TVTAnimationOptions = set of TVTAnimationOption; // Options which toggle automatic handling of certain situations: TVTAutoOption = ( toAutoDropExpand, // Expand node if it is the drop target for more than a certain time. toAutoExpand, // Nodes are expanded (collapsed) when getting (losing) the focus. toAutoScroll, // Scroll if mouse is near the border while dragging or selecting. toAutoScrollOnExpand, // Scroll as many child nodes in view as possible after expanding a node. toAutoSort, // Sort tree when Header.SortColumn or Header.SortDirection change or sort node if // child nodes are added. toAutoSpanColumns, // Large entries continue into next column(s) if there's no text in them (no clipping). toAutoTristateTracking, // Checkstates are automatically propagated for tri state check boxes. toAutoHideButtons, // Node buttons are hidden when there are child nodes, but all are invisible. toAutoDeleteMovedNodes, // Delete nodes which where moved in a drag operation (if not directed otherwise). toDisableAutoscrollOnFocus, // Disable scrolling a node or column into view if it gets focused. toDisableAutoscrollHorizontal, // Only autoscroll on focus vertically never horizontally toAutoChangeScale, // Change default node height automatically if the system's font scale is set to big fonts. toAutoFreeOnCollapse, // Frees any child node after a node has been collapsed (HasChildren flag stays there). toDisableAutoscrollOnEdit, // Do not center a node horizontally when it is edited. toAutoBidiColumnOrdering // When set then columns (if any exist) will be reordered from lowest index to highest index // and vice versa when the tree's bidi mode is changed. ); TVTAutoOptions = set of TVTAutoOption; // Options which determine the tree's behavior when selecting nodes: TVTSelectionOption = ( toDisableDrawSelection, // Prevent user from selecting with the selection rectangle in multiselect mode. toExtendedFocus, // Entries other than in the main column can be selected, edited etc. toFullRowSelect, // Hit test as well as selection highlight are not constrained to the text of a node. toLevelSelectConstraint, // Constrain selection to the same level as the selection anchor. toMiddleClickSelect, // Allow selection, dragging etc. with the middle mouse button. This and toWheelPanning // are mutual exclusive. toMultiSelect, // Allow more than one node to be selected. toRightClickSelect, // Allow selection, dragging etc. with the right mouse button. toSiblingSelectConstraint, // Constrain selection to nodes with same parent. toCenterScrollIntoView, // Center nodes vertically in the client area when scrolling into view. toSimpleDrawSelection // Simplifies draw selection, so a node's caption does not need to intersect with the // selection rectangle. ); TVTSelectionOptions = set of TVTSelectionOption; // Options which do not fit into any of the other groups: TVTMiscOption = ( toAcceptOLEDrop, // Register tree as OLE accepting drop target toCheckSupport, // Show checkboxes/radio buttons. toEditable, // Node captions can be edited. toFullRepaintOnResize, // Fully invalidate the tree when its window is resized (CS_HREDRAW/CS_VREDRAW). toGridExtensions, // Use some special enhancements to simulate and support grid behavior. toInitOnSave, // Initialize nodes when saving a tree to a stream. toReportMode, // Tree behaves like TListView in report mode. toToggleOnDblClick, // Toggle node expansion state when it is double clicked. toWheelPanning, // Support for mouse panning (wheel mice only). This option and toMiddleClickSelect are // mutal exclusive, where panning has precedence. toReadOnly, // The tree does not allow to be modified in any way. No action is executed and // node editing is not possible. toVariableNodeHeight, // When set then GetNodeHeight will trigger OnMeasureItem to allow variable node heights. toFullRowDrag, // Start node dragging by clicking anywhere in it instead only on the caption or image. // Must be used together with toDisableDrawSelection. toNodeHeightResize, // Allows changing a node's height via mouse. toNodeHeightDblClickResize, // Allows to reset a node's height to FDefaultNodeHeight via a double click. toEditOnClick, // Editing mode can be entered with a single click toEditOnDblClick // Editing mode can be entered with a double click ); TVTMiscOptions = set of TVTMiscOption; // Options to control data export TVTExportMode = ( emAll, // export all records (regardless checked state) emChecked, // export checked records only emUnchecked // export unchecked records only ); const DefaultPaintOptions = [toShowButtons, toShowDropmark, toShowTreeLines, toShowRoot, toThemeAware, toUseBlendedImages]; DefaultAnimationOptions = []; DefaultAutoOptions = [toAutoDropExpand, toAutoTristateTracking, toAutoScrollOnExpand, toAutoDeleteMovedNodes]; DefaultSelectionOptions = []; DefaultMiscOptions = [toAcceptOLEDrop, toFullRepaintOnResize, toInitOnSave, toToggleOnDblClick, toWheelPanning, toEditOnClick]; DefaultColumnOptions = [coAllowClick, coDraggable, coEnabled, coParentColor, coParentBidiMode, coResizable, coShowDropmark, coVisible, coAllowFocus]; type TBaseVirtualTree = class; TVirtualTreeClass = class of TBaseVirtualTree; PVirtualNode = ^TVirtualNode; TColumnIndex = type Integer; TColumnPosition = type Cardinal; // This record must already be defined here and not later because otherwise BCB users will not be able // to compile (conversion done by BCB is wrong). TCacheEntry = record Node: PVirtualNode; AbsoluteTop: Cardinal; end; TCache = array of TCacheEntry; TNodeArray = array of PVirtualNode; TCustomVirtualTreeOptions = class(TPersistent) private FOwner: TBaseVirtualTree; FPaintOptions: TVTPaintOptions; FAnimationOptions: TVTAnimationOptions; FAutoOptions: TVTAutoOptions; FSelectionOptions: TVTSelectionOptions; FMiscOptions: TVTMiscOptions; FExportMode: TVTExportMode; procedure SetAnimationOptions(const Value: TVTAnimationOptions); procedure SetAutoOptions(const Value: TVTAutoOptions); procedure SetMiscOptions(const Value: TVTMiscOptions); procedure SetPaintOptions(const Value: TVTPaintOptions); procedure SetSelectionOptions(const Value: TVTSelectionOptions); protected property AnimationOptions: TVTAnimationOptions read FAnimationOptions write SetAnimationOptions default DefaultAnimationOptions; property AutoOptions: TVTAutoOptions read FAutoOptions write SetAutoOptions default DefaultAutoOptions; property ExportMode: TVTExportMode read FExportMode write FExportMode default emAll; property MiscOptions: TVTMiscOptions read FMiscOptions write SetMiscOptions default DefaultMiscOptions; property PaintOptions: TVTPaintOptions read FPaintOptions write SetPaintOptions default DefaultPaintOptions; property SelectionOptions: TVTSelectionOptions read FSelectionOptions write SetSelectionOptions default DefaultSelectionOptions; public constructor Create(AOwner: TBaseVirtualTree); virtual; procedure AssignTo(Dest: TPersistent); override; property Owner: TBaseVirtualTree read FOwner; end; TTreeOptionsClass = class of TCustomVirtualTreeOptions; TVirtualTreeOptions = class(TCustomVirtualTreeOptions) published property AnimationOptions; property AutoOptions; property ExportMode; property MiscOptions; property PaintOptions; property SelectionOptions; end; // Used in the CF_VTREFERENCE clipboard format. PVTReference = ^TVTReference; TVTReference = record Process: Cardinal; Tree: TBaseVirtualTree; end; TVirtualNode = record Index, // index of node with regard to its parent ChildCount: Cardinal; // number of child nodes NodeHeight: Word; // height in pixels States: TVirtualNodeStates; // states describing various properties of the node (expanded, initialized etc.) Align: Byte; // line/button alignment CheckState: TCheckState; // indicates the current check state (e.g. checked, pressed etc.) CheckType: TCheckType; // indicates which check type shall be used for this node Dummy: Byte; // dummy value to fill DWORD boundary TotalCount, // sum of this node, all of its child nodes and their child nodes etc. TotalHeight: Cardinal; // height in pixels this node covers on screen including the height of all of its // children // Note: Some copy routines require that all pointers (as well as the data area) in a node are // located at the end of the node! Hence if you want to add new member fields (except pointers to internal // data) then put them before field Parent. Parent, // reference to the node's parent (for the root this contains the treeview) PrevSibling, // link to the node's previous sibling or nil if it is the first node NextSibling, // link to the node's next sibling or nil if it is the last node FirstChild, // link to the node's first child... LastChild: PVirtualNode; // link to the node's last child... Data: record end; // this is a placeholder, each node gets extra data determined by NodeDataSize end; // Structure used when info about a certain position in the tree is needed. THitInfo = record HitNode: PVirtualNode; HitPositions: THitPositions; HitColumn: TColumnIndex; end; // auto scroll directions TScrollDirections = set of ( sdLeft, sdUp, sdRight, sdDown ); // OLE drag'n drop support TFormatEtcArray = array of TFormatEtc; TFormatArray = array of Word; // IDataObject.SetData support TInternalStgMedium = packed record Format: TClipFormat; Medium: TStgMedium; end; TInternalStgMediumArray = array of TInternalStgMedium; TEnumFormatEtc = class(TInterfacedObject, IEnumFormatEtc) private FTree: TBaseVirtualTree; FFormatEtcArray: TFormatEtcArray; FCurrentIndex: Integer; public constructor Create(Tree: TBaseVirtualTree; AFormatEtcArray: TFormatEtcArray); function Clone(out Enum: IEnumFormatEtc): HResult; stdcall; function Next(celt: LongWord; out elt: FormatEtc;pceltFetched:pULong=nil): HResult; stdcall; function Reset: HResult; stdcall; function Skip(celt: LongWord): HResult; stdcall; end; // ----- OLE drag'n drop handling IDropTargetHelper = interface(IUnknown) [SID_IDropTargetHelper] function DragEnter(hwndTarget: HWND; pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function DragLeave: HRESULT; stdcall; function DragOver(var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Drop(pDataObject: IDataObject; var ppt: TPoint; dwEffect: LongWord): HRESULT; stdcall; function Show(fShow: Boolean): HRESULT; stdcall; end; PSHDragImage = ^TSHDragImage; TSHDragImage = packed record sizeDragImage: TSize; ptOffset: TPoint; hbmpDragImage: HBITMAP; ColorRef: TColorRef; end; IDragSourceHelper = interface(IUnknown) [SID_IDragSourceHelper] function InitializeFromBitmap(var SHDragImage: TSHDragImage; pDataObject: IDataObject): HRESULT; stdcall; function InitializeFromWindow(Window: HWND; var ppt: TPoint; pDataObject: IDataObject): HRESULT; stdcall; end; IVTDragManager = interface(IUnknown) ['{C4B25559-14DA-446B-8901-0C879000EB16}'] procedure ForceDragLeave; stdcall; function GetDataObject: IDataObject; stdcall; function GetDragSource: TBaseVirtualTree; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; property DataObject: IDataObject read GetDataObject; property DragSource: TBaseVirtualTree read GetDragSource; property DropTargetHelperSupported: Boolean read GetDropTargetHelperSupported; property IsDropTarget: Boolean read GetIsDropTarget; end; // This data object is used in two different places. One is for clipboard operations and the other while dragging. TVTDataObject = class(TInterfacedObject, IDataObject) private FOwner: TBaseVirtualTree; // The tree which provides clipboard or drag data. FForClipboard: Boolean; // Determines which data to render with GetData. FFormatEtcArray: TFormatEtcArray; FInternalStgMediumArray: TInternalStgMediumArray; // The available formats in the DataObject FAdviseHolder: IDataAdviseHolder; // Reference to an OLE supplied implementation for advising. protected function CanonicalIUnknown(TestUnknown: IUnknown): IUnknown; function EqualFormatEtc(FormatEtc1, FormatEtc2: TFormatEtc): Boolean; function FindFormatEtc(TestFormatEtc: TFormatEtc; const FormatEtcArray: TFormatEtcArray): integer; function FindInternalStgMedium(Format: TClipFormat): PStgMedium; function HGlobalClone(HGlobal: THandle): THandle; function RenderInternalOLEData(const FormatEtcIn: TFormatEtc; var Medium: TStgMedium; var OLEResult: HResult): Boolean; function StgMediumIncRef(const InStgMedium: TStgMedium; var OutStgMedium: TStgMedium; CopyInMedium: Boolean; DataObject: IDataObject): HRESULT; property ForClipboard: Boolean read FForClipboard; property FormatEtcArray: TFormatEtcArray read FFormatEtcArray write FFormatEtcArray; property InternalStgMediumArray: TInternalStgMediumArray read FInternalStgMediumArray write FInternalStgMediumArray; property Owner: TBaseVirtualTree read FOwner; public constructor Create(AOwner: TBaseVirtualTree; ForClipboard: Boolean); virtual; destructor Destroy; override; function DAdvise(const FormatEtc: TFormatEtc; advf: DWord; const advSink: IAdviseSink; out dwConnection: DWord): HResult; virtual; stdcall; function DUnadvise(dwConnection: DWord): HResult; virtual; stdcall; Function EnumDAdvise(out enumAdvise : IEnumStatData):HResult;virtual;StdCall; function EnumFormatEtc(Direction: DWord; out EnumFormatEtc: IEnumFormatEtc): HResult; virtual; stdcall; function GetCanonicalFormatEtc(const pformatetcIn : FORMATETC;Out pformatetcOut : FORMATETC):HResult; virtual; STDCALl; function GetData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function GetDataHere(const FormatEtc: TFormatEtc; out Medium: TStgMedium): HResult; virtual; stdcall; function QueryGetData(const FormatEtc: TFormatEtc): HResult; virtual; stdcall; function SetData(const FormatEtc: TFormatEtc; const Medium: TStgMedium; DoRelease: BOOL): HResult; virtual; stdcall; end; // TVTDragManager is a class to manage drag and drop in a Virtual Treeview. TVTDragManager = class(TInterfacedObject, IVTDragManager, IDropSource, IDropTarget) private FOwner, // The tree which is responsible for drag management. FDragSource: TBaseVirtualTree; // Reference to the source tree if the source was a VT, might be different than // the owner tree. FIsDropTarget: Boolean; // True if the owner is currently the drop target. FDataObject: IDataObject; // A reference to the data object passed in by DragEnter (only used when the owner // tree is the current drop target). FDropTargetHelper: IDropTargetHelper; // Win2k > Drag image support FFullDragging: BOOL; // True, if full dragging is currently enabled in the system. function GetDataObject: IDataObject; stdcall; function GetDragSource: TBaseVirtualTree; stdcall; function GetDropTargetHelperSupported: Boolean; stdcall; function GetIsDropTarget: Boolean; stdcall; public constructor Create(AOwner: TBaseVirtualTree); virtual; destructor Destroy; override; function DragEnter(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function DragLeave: HResult; stdcall; function DragOver(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; function Drop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; stdcall; procedure ForceDragLeave; stdcall; {$IF (FPC_FULLVERSION < 020601) and DEFINED(LCLWin32)} function GiveFeedback(Effect: Longint): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: Longint): HResult; stdcall; {$ELSE} function GiveFeedback(Effect: LongWord): HResult; stdcall; function QueryContinueDrag(EscapePressed: BOOL; KeyState: LongWord): HResult; stdcall; {$ENDIF} end; PVTHintData = ^TVTHintData; TVTHintData = record Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; HintRect: TRect; // used for draw trees only, string trees get the size from the hint string DefaultHint: String; // used only if there is no node specific hint string available // or a header hint is about to appear HintText: String; // set when size of the hint window is calculated HintInfo: PHintInfo; end; // The trees need an own hint window class because of Unicode output and adjusted font. { TVirtualTreeHintWindow } TVirtualTreeHintWindow = class(THintWindow) private FHintData: TVTHintData; procedure WMShowWindow(var Message: TLMShowWindow); message LM_SHOWWINDOW; public function CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect; override; procedure Paint; override; end; // Drag image support for the tree. TVTTransparency = 0..255; TVTBias = -128..127; // Simple move limitation for the drag image. TVTDragMoveRestriction = ( dmrNone, dmrHorizontalOnly, dmrVerticalOnly ); TVTDragImageStates = set of ( disHidden, // Internal drag image is currently hidden (always hidden if drag image helper interfaces are used). disInDrag, // Drag image class is currently being used. disPrepared, // Drag image class is prepared. disSystemSupport // Running on Windows 2000 or higher. System supports drag images natively. ); // Class to manage header and tree drag image during a drag'n drop operation. TVTDragImage = class private FOwner: TBaseVirtualTree; FBackImage, // backup of overwritten screen area FAlphaImage, // target for alpha blending FDragImage: TBitmap; // the actual drag image to blend to screen FImagePosition, // position of image (upper left corner) in screen coordinates FLastPosition: TPoint; // last mouse position in screen coordinates FTransparency: TVTTransparency; // alpha value of the drag image (0 - fully transparent, 255 - fully opaque) FPreBlendBias, // value to darken or lighten the drag image before it is blended FPostBlendBias: TVTBias; // value to darken or lighten the alpha blend result FFade: Boolean; // determines whether to fade the drag image from center to borders or not FRestriction: TVTDragMoveRestriction; // determines in which directions the drag image can be moved FColorKey: TColor; // color to make fully transparent regardless of any other setting FStates: TVTDragImageStates; // Determines the states of the drag image class. function GetVisible: Boolean; // True if the drag image is currently hidden (used only when dragging) protected procedure InternalShowDragImage(ScreenDC: HDC); procedure MakeAlphaChannel(Source, Target: TBitmap); public constructor Create(AOwner: TBaseVirtualTree); destructor Destroy; override; function DragTo(const P: TPoint; ForceRepaint: Boolean): Boolean; procedure EndDrag; function GetDragImageRect: TRect; procedure HideDragImage; procedure PrepareDrag(DragImage: TBitmap; const ImagePosition, HotSpot: TPoint; const DataObject: IDataObject); procedure RecaptureBackground(Tree: TBaseVirtualTree; R: TRect; VisibleRegion: HRGN; CaptureNCArea, ReshowDragImage: Boolean); procedure ShowDragImage; function WillMove(const P: TPoint): Boolean; property ColorKey: TColor read FColorKey write FColorKey default clWindow; property Fade: Boolean read FFade write FFade default False; property MoveRestriction: TVTDragMoveRestriction read FRestriction write FRestriction default dmrNone; property PostBlendBias: TVTBias read FPostBlendBias write FPostBlendBias default 0; property PreBlendBias: TVTBias read FPreBlendBias write FPreBlendBias default 0; property Transparency: TVTTransparency read FTransparency write FTransparency default 128; property Visible: Boolean read GetVisible; end; // tree columns implementation TVirtualTreeColumns = class; TVTHeader = class; TVirtualTreeColumnStyle = ( vsText, vsOwnerDraw ); TVTHeaderColumnLayout = ( blGlyphLeft, blGlyphRight, blGlyphTop, blGlyphBottom ); TVirtualTreeColumn = class(TCollectionItem) private FText, FHint: String; FLeft, FWidth: Integer; FPosition: TColumnPosition; FMinWidth: Integer; FMaxWidth: Integer; FStyle: TVirtualTreeColumnStyle; FImageIndex: TImageIndex; FBiDiMode: TBiDiMode; FLayout: TVTHeaderColumnLayout; FMargin, FSpacing: Integer; FOptions: TVTColumnOptions; FTag: Integer; FAlignment: TAlignment; FCaptionAlignment: TAlignment; // Alignment of the caption. FLastWidth: Integer; FColor: TColor; FBonusPixel: Boolean; FSpringRest: Single; // Accumulator for width adjustment when auto spring option is enabled. FCaptionText: String; FCheckBox: Boolean; FCheckType: TCheckType; FCheckState: TCheckState; FImageRect: TRect; FHasImage: Boolean; function GetCaptionAlignment: TAlignment; function GetLeft: Integer; function IsBiDiModeStored: Boolean; function IsCaptionAlignmentStored: Boolean; function IsColorStored: Boolean; procedure SetAlignment(const Value: TAlignment); procedure SetBiDiMode(Value: TBiDiMode); procedure SetCaptionAlignment(const Value: TAlignment); procedure SetCheckBox(Value: Boolean); procedure SetCheckState(Value: TCheckState); procedure SetCheckType(Value: TCheckType); procedure SetColor(const Value: TColor); procedure SetImageIndex(Value: TImageIndex); procedure SetLayout(Value: TVTHeaderColumnLayout); procedure SetMargin(Value: Integer); procedure SetMaxWidth(Value: Integer); procedure SetMinWidth(Value: Integer); procedure SetOptions(Value: TVTColumnOptions); procedure SetPosition(Value: TColumnPosition); procedure SetSpacing(Value: Integer); procedure SetStyle(Value: TVirtualTreeColumnStyle); procedure SetText(const Value: String); procedure SetWidth(Value: Integer); protected procedure ComputeHeaderLayout(DC: HDC; const Client: TRect; UseHeaderGlyph, UseSortGlyph: Boolean; var HeaderGlyphPos, SortGlyphPos: TPoint; var TextBounds: TRect; DrawFormat: Cardinal; CalculateTextRect: Boolean = False); procedure GetAbsoluteBounds(var Left, Right: Integer); function GetDisplayName: string; override; function GetOwner: TVirtualTreeColumns; reintroduce; public constructor Create(Collection: TCollection); override; destructor Destroy; override; procedure Assign(Source: TPersistent); override; function Equals(OtherColumnObj: TObject): Boolean; virtual; function GetRect: TRect; virtual; procedure LoadFromStream(const Stream: TStream; Version: Integer); procedure ParentBiDiModeChanged; procedure ParentColorChanged; procedure RestoreLastWidth; procedure SaveToStream(const Stream: TStream); function UseRightToLeftReading: Boolean; property Left: Integer read GetLeft; property Owner: TVirtualTreeColumns read GetOwner; published property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property BiDiMode: TBiDiMode read FBiDiMode write SetBiDiMode stored IsBiDiModeStored default bdLeftToRight; property CaptionAlignment: TAlignment read GetCaptionAlignment write SetCaptionAlignment stored IsCaptionAlignmentStored default taLeftJustify; property CaptionText: String read FCaptionText stored False; property CheckType: TCheckType read FCheckType write SetCheckType default ctCheckBox; property CheckState: TCheckState read FCheckState write SetCheckState default csUncheckedNormal; property CheckBox: Boolean read FCheckBox write SetCheckBox default False; property Color: TColor read FColor write SetColor stored IsColorStored; property Hint: String read FHint write FHint; property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1; property Layout: TVTHeaderColumnLayout read FLayout write SetLayout default blGlyphLeft; property Margin: Integer read FMargin write SetMargin default 4; property MaxWidth: Integer read FMaxWidth write SetMaxWidth default 10000; property MinWidth: Integer read FMinWidth write SetMinWidth default 10; property Options: TVTColumnOptions read FOptions write SetOptions default DefaultColumnOptions; property Position: TColumnPosition read FPosition write SetPosition; property Spacing: Integer read FSpacing write SetSpacing default 4; property Style: TVirtualTreeColumnStyle read FStyle write SetStyle default vsText; property Tag: Integer read FTag write FTag default 0; property Text: String read FText write SetText; property Width: Integer read FWidth write SetWidth default 50; end; TVirtualTreeColumnClass = class of TVirtualTreeColumn; TColumnsArray = array of TVirtualTreeColumn; TCardinalArray = array of Cardinal; TIndexArray = array of TColumnIndex; TVirtualTreeColumns = class(TCollection) private FHeader: TVTHeader; FHeaderBitmap: TBitmap; // backbuffer for drawing FHoverIndex, // currently "hot" column FDownIndex, // Column on which a mouse button is held down. FTrackIndex: TColumnIndex; // Index of column which is currently being resized FClickIndex: TColumnIndex; // last clicked column FPositionToIndex: TIndexArray; FDefaultWidth: Integer; // the width columns are created with FNeedPositionsFix: Boolean; // True if FixPositions must still be called after DFM loading or Bidi mode change. FClearing: Boolean; // True if columns are being deleted entirely. // drag support FDragIndex: TColumnIndex; // index of column currently being dragged FDropTarget: TColumnIndex; // current target column (index) while dragging FDropBefore: Boolean; // True if drop position is in the left half of a column, False for the right // side to drop the dragged column to function GetCount: Integer; function GetItem(Index: TColumnIndex): TVirtualTreeColumn; function GetNewIndex(P: TPoint; var OldIndex: TColumnIndex): Boolean; procedure SetDefaultWidth(Value: Integer); procedure SetItem(Index: TColumnIndex; Value: TVirtualTreeColumn); protected procedure AdjustAutoSize(CurrentIndex: TColumnIndex; Force: Boolean = False); function AdjustDownColumn(P: TPoint): TColumnIndex; function AdjustHoverColumn(const P: TPoint): Boolean; procedure AdjustPosition(Column: TVirtualTreeColumn; Position: Cardinal); function CanSplitterResize(P: TPoint; Column: TColumnIndex): Boolean; procedure DoCanSplitterResize(P: TPoint; Column: TColumnIndex; var Allowed: Boolean); procedure DrawButtonText(DC: HDC; Caption: String; Bounds: TRect; Enabled, Hot: Boolean; DrawFormat: Cardinal; WrapCaption: Boolean); procedure DrawXPButton(DC: HDC; const ButtonR: TRect; DrawSplitter, Down, Hover: Boolean); procedure FixPositions; function GetColumnAndBounds(const P: TPoint; var ColumnLeft, ColumnRight: Integer; Relative: Boolean = True): Integer; function GetOwner: TPersistent; override; procedure HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); virtual; procedure IndexChanged(OldIndex, NewIndex: Integer); procedure InitializePositionArray; procedure ReorderColumns(RTL: Boolean); procedure Update(Item: TCollectionItem); override; procedure UpdatePositions(Force: Boolean = False); property HeaderBitmap: TBitmap read FHeaderBitmap; property PositionToIndex: TIndexArray read FPositionToIndex; public constructor Create(AOwner: TVTHeader); destructor Destroy; override; function Add: TVirtualTreeColumn; virtual; procedure AnimatedResize(Column: TColumnIndex; NewWidth: Integer); procedure Assign(Source: TPersistent); override; procedure Clear; virtual; function ColumnFromPosition(const P: TPoint; Relative: Boolean = True): TColumnIndex; overload; virtual; function ColumnFromPosition(PositionIndex: TColumnPosition): TColumnIndex; overload; virtual; function Equals(OtherColumnsObj: TObject): Boolean; procedure GetColumnBounds(Column: TColumnIndex; out Left, Right: Integer); function GetFirstVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetLastVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetNextColumn(Column: TColumnIndex): TColumnIndex; function GetNextVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetPreviousColumn(Column: TColumnIndex): TColumnIndex; function GetPreviousVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; function GetScrollWidth: Integer; function GetVisibleColumns: TColumnsArray; function GetVisibleFixedWidth: Integer; function IsValidColumn(Column: TColumnIndex): Boolean; procedure LoadFromStream(const Stream: TStream; Version: Integer); procedure PaintHeader(DC: HDC; const R: TRect; HOffset: Integer); virtual; procedure SaveToStream(const Stream: TStream); function TotalWidth: Integer; property Count: Integer read GetCount; property ClickIndex: TColumnIndex read FClickIndex; property DefaultWidth: Integer read FDefaultWidth write SetDefaultWidth default 50; property Items[Index: TColumnIndex]: TVirtualTreeColumn read GetItem write SetItem; default; property Header: TVTHeader read FHeader; property TrackIndex: TColumnIndex read FTrackIndex; end; TVirtualTreeColumnsClass = class of TVirtualTreeColumns; TVTConstraintPercent = 0..100; TVTFixedAreaConstraints = class(TPersistent) private FHeader: TVTHeader; FMaxHeightPercent, FMaxWidthPercent, FMinHeightPercent, FMinWidthPercent: TVTConstraintPercent; FOnChange: TNotifyEvent; procedure SetConstraints(Index: Integer; Value: TVTConstraintPercent); protected procedure Change; property Header: TVTHeader read FHeader; public constructor Create(AOwner: TVTHeader); procedure Assign(Source: TPersistent); override; property OnChange: TNotifyEvent read FOnChange write FOnChange; published property MaxHeightPercent: TVTConstraintPercent index 0 read FMaxHeightPercent write SetConstraints default 0; property MaxWidthPercent: TVTConstraintPercent index 1 read FMaxWidthPercent write SetConstraints default 0; property MinHeightPercent: TVTConstraintPercent index 2 read FMinHeightPercent write SetConstraints default 0; property MinWidthPercent: TVTConstraintPercent index 3 read FMinWidthPercent write SetConstraints default 0; end; TVTHeaderStyle = ( hsThickButtons, // TButton look and feel hsFlatButtons, // flatter look than hsThickButton, like an always raised flat TToolButton hsPlates, // flat TToolButton look and feel (raise on hover etc.) hsXPStyle // Windows XP style ); TVTHeaderOption = ( hoAutoResize, // Adjust a column so that the header never exceeds the client width of the owner control. hoColumnResize, // Resizing columns with the mouse is allowed. hoDblClickResize, // Allows a column to resize itself to its largest entry. hoDrag, // Dragging columns is allowed. hoHotTrack, // Header captions are highlighted when mouse is over a particular column. hoOwnerDraw, // Header items with the owner draw style can be drawn by the application via event. hoRestrictDrag, // Header can only be dragged horizontally. hoShowHint, // Show application defined header hint. hoShowImages, // Show header images. hoShowSortGlyphs, // Allow visible sort glyphs. hoVisible, // Header is visible. hoAutoSpring, // Distribute size changes of the header to all columns, which are sizable and have the // coAutoSpring option enabled. hoAutoResize must be enabled too. hoFullRepaintOnResize, // Fully invalidate the header (instead of subsequent columns only) when a column is resized. hoDisableAnimatedResize, // Disable animated resize for all columns. hoHeightResize, // Allow resizing header height via mouse. hoHeightDblClickResize // Allow the header to resize itself to its default height. ); TVTHeaderOptions = set of TVTHeaderOption; THeaderState = ( hsAutoSizing, // auto size chain is in progess, do not trigger again on WM_SIZE hsDragging, // header dragging is in progress (only if enabled) hsDragPending, // left button is down, user might want to start dragging a column hsLoading, // The header currently loads from stream, so updates are not necessary. hsColumnWidthTracking, // column resizing is in progress hsColumnWidthTrackPending, // left button is down, user might want to start resize a column hsHeightTracking, // height resizing is in progress hsHeightTrackPending, // left button is down, user might want to start changing height hsResizing, // multi column resizing in progress hsScaling, // the header is scaled after a change of FixedAreaConstraints or client size hsNeedScaling // the header needs to be scaled ); THeaderStates = set of THeaderState; TSortDirection = ( sdAscending, sdDescending ); // describes the used column resize behaviour for AutoFitColumns TSmartAutoFitType = ( smaAllColumns, // consider nodes in view only for all columns smaNoColumn, // consider nodes in view only for no column smaUseColumnOption // use coSmartResize of the corresponding column ); // desribes what made a structure change event happen TChangeReason = ( crIgnore, // used as placeholder crAccumulated, // used for delayed changes crChildAdded, // one or more child nodes have been added crChildDeleted, // one or more child nodes have been deleted crNodeAdded, // a node has been added crNodeCopied, // a node has been duplicated crNodeMoved // a node has been moved to a new place ); TVTHeader = class(TPersistent) private FOwner: TBaseVirtualTree; FColumns: TVirtualTreeColumns; FHeight: Integer; FFont: TFont; FParentFont: Boolean; FOptions: TVTHeaderOptions; FStates: THeaderStates; // Used to keep track of internal states the header can enter. FTrackPoint: TPoint; // Client coordinate where the tracking started. FStyle: TVTHeaderStyle; // button style FBackground: TColor; FAutoSizeIndex: TColumnIndex; FPopupMenu: TPopupMenu; FMainColumn: TColumnIndex; // the column which holds the tree FMaxHeight: Integer; FMinHeight: Integer; FDefaultHeight: Integer; FFixedAreaConstraints: TVTFixedAreaConstraints; // Percentages for the fixed area (header, fixed columns). FImages: TCustomImageList; FImageChangeLink: TChangeLink; // connections to the image list to get notified about changes FSortColumn: TColumnIndex; FSortDirection: TSortDirection; FTrackStart: TPoint; // client coordinates of the tracking start point FDragStart: TPoint; // initial mouse drag position FDragImage: TVTDragImage; // drag image management during header drag FLastWidth: Integer; // Used to adjust spring columns. This is the width of all visible columns, // not the header rectangle. procedure FontChanged(Sender: TObject); function GetMainColumn: TColumnIndex; function GetUseColumns: Boolean; function IsFontStored: Boolean; procedure SetAutoSizeIndex(Value: TColumnIndex); procedure SetBackground(Value: TColor); procedure SetColumns(Value: TVirtualTreeColumns); procedure SetDefaultHeight(Value: Integer); procedure SetFont(const Value: TFont); procedure SetHeight(Value: Integer); procedure SetImages(const Value: TCustomImageList); procedure SetMainColumn(Value: TColumnIndex); procedure SetMaxHeight(Value: Integer); procedure SetMinHeight(Value: Integer); procedure SetOptions(Value: TVTHeaderOptions); procedure SetParentFont(Value: Boolean); procedure SetSortColumn(Value: TColumnIndex); procedure SetSortDirection(const Value: TSortDirection); procedure SetStyle(Value: TVTHeaderStyle); protected procedure ChangeScale(M, D: Integer); virtual; function DetermineSplitterIndex(const P: TPoint): Boolean; virtual; procedure DoAfterAutoFitColumn(Column: TColumnIndex); virtual; procedure DoAfterColumnWidthTracking(Column: TColumnIndex); virtual; procedure DoAfterHeightTracking; virtual; function DoBeforeAutoFitColumn(Column: TColumnIndex; SmartAutoFitType: TSmartAutoFitType): Boolean; virtual; procedure DoBeforeColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoBeforeHeightTracking(Shift: TShiftState); virtual; function DoColumnWidthDblClickResize(Column: TColumnIndex; P: TPoint; Shift: TShiftState): Boolean; virtual; function DoColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; virtual; function DoGetPopupMenu(Column: TColumnIndex; Position: TPoint): TPopupMenu; virtual; function DoHeightTracking(var P: TPoint; Shift: TShiftState): Boolean; virtual; function DoHeightDblClickResize(var P: TPoint; Shift: TShiftState): Boolean; virtual; procedure DoSetSortColumn(Value: TColumnIndex); virtual; procedure DragTo(const P: TPoint); procedure FixedAreaConstraintsChanged(Sender: TObject); function GetColumnsClass: TVirtualTreeColumnsClass; virtual; function GetOwner: TPersistent; override; function GetShiftState: TShiftState; function HandleHeaderMouseMove(var Message: TLMMouseMove): Boolean; function HandleMessage(var Message: TLMessage): Boolean; virtual; procedure ImageListChange(Sender: TObject); procedure PrepareDrag(P, Start: TPoint); procedure RecalculateHeader; virtual; procedure RescaleHeader; procedure UpdateMainColumn; procedure UpdateSpringColumns; public constructor Create(AOwner: TBaseVirtualTree); virtual; destructor Destroy; override; function AllowFocus(ColumnIndex: TColumnIndex): Boolean; procedure Assign(Source: TPersistent); override; procedure AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn); function InHeader(const P: TPoint): Boolean; virtual; function InHeaderSplitterArea(P: TPoint): Boolean; virtual; procedure Invalidate(Column: TVirtualTreeColumn; ExpandToBorder: Boolean = False); procedure LoadFromStream(const Stream: TStream); virtual; function ResizeColumns(ChangeBy: Integer; RangeStartCol: TColumnIndex; RangeEndCol: TColumnIndex; Options: TVTColumnOptions = [coVisible]): Integer; procedure RestoreColumns; procedure SaveToStream(const Stream: TStream); virtual; property DragImage: TVTDragImage read FDragImage; property States: THeaderStates read FStates; property Treeview: TBaseVirtualTree read FOwner; property UseColumns: Boolean read GetUseColumns; published property AutoSizeIndex: TColumnIndex read FAutoSizeIndex write SetAutoSizeIndex; property Background: TColor read FBackground write SetBackground default clBtnFace; property Columns: TVirtualTreeColumns read FColumns write SetColumns; property DefaultHeight: Integer read FDefaultHeight write SetDefaultHeight; property Font: TFont read FFont write SetFont stored IsFontStored; property FixedAreaConstraints: TVTFixedAreaConstraints read FFixedAreaConstraints write FFixedAreaConstraints; property Height: Integer read FHeight write SetHeight default 17; property Images: TCustomImageList read FImages write SetImages; property MainColumn: TColumnIndex read GetMainColumn write SetMainColumn default 0; property MaxHeight: Integer read FMaxHeight write SetMaxHeight default 10000; property MinHeight: Integer read FMinHeight write SetMinHeight default 10; property Options: TVTHeaderOptions read FOptions write SetOptions default [hoColumnResize, hoDrag, hoShowSortGlyphs]; property ParentFont: Boolean read FParentFont write SetParentFont default False; property PopupMenu: TPopupMenu read FPopupMenu write FPopUpMenu; property SortColumn: TColumnIndex read FSortColumn write SetSortColumn default NoColumn; property SortDirection: TSortDirection read FSortDirection write SetSortDirection default sdAscending; property Style: TVTHeaderStyle read FStyle write SetStyle default hsThickButtons; end; TVTHeaderClass = class of TVTHeader; // Communication interface between a tree editor and the tree itself (declared as using stdcall in case it // is implemented in a (C/C++) DLL). The GUID is not nessecary in Delphi but important for BCB users // to allow QueryInterface and _uuidof calls. IVTEditLink = interface ['{2BE3EAFA-5ACB-45B4-9D9A-B58BCC496E17}'] function BeginEdit: Boolean; stdcall; // Called when editing actually starts. function CancelEdit: Boolean; stdcall; // Called when editing has been cancelled by the tree. function EndEdit: Boolean; stdcall; // Called when editing has been finished by the tree. function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; stdcall; // Called after creation to allow a setup. function GetBounds: TRect; stdcall; // Called to get the current size of the edit window // (only important if the edit resizes itself). procedure ProcessMessage(var Message: TLMessage); stdcall; // Used to forward messages to the edit window(s)- procedure SetBounds(R: TRect); stdcall; // Called to place the editor. end; // Indicates in the OnUpdating event what state the tree is currently in. TVTUpdateState = ( usBegin, // The tree just entered the update state (BeginUpdate call for the first time). usBeginSynch, // The tree just entered the synch update state (BeginSynch call for the first time). usSynch, // Begin/EndSynch has been called but the tree did not change the update state. usUpdate, // Begin/EndUpdate has been called but the tree did not change the update state. usEnd, // The tree just left the update state (EndUpdate called for the last level). usEndSynch // The tree just left the synch update state (EndSynch called for the last level). ); // Used during owner draw of the header to indicate which drop mark for the column must be drawn. TVTDropMarkMode = ( dmmNone, dmmLeft, dmmRight ); // This structure carries all important information about header painting and is used in the advanced header painting. THeaderPaintInfo = record TargetCanvas: TCanvas; Column: TVirtualTreeColumn; PaintRectangle: TRect; TextRectangle: TRect; IsHoverIndex, IsDownIndex, IsEnabled, ShowHeaderGlyph, ShowSortGlyph, ShowRightBorder: Boolean; DropMark: TVTDropMarkMode; GlyphPos, SortGlyphPos: TPoint; end; // These elements are used both to query the application, which of them it wants to draw itself and to tell it during // painting, which elements must be drawn during the advanced custom draw events. THeaderPaintElements = set of ( hpeBackground, hpeDropMark, hpeHeaderGlyph, hpeSortGlyph, hpeText ); // Various events must be handled at different places than they were initiated or need // a persistent storage until they are reset. TVirtualTreeStates = set of ( tsCancelHintAnimation, // Set when a new hint is about to show but an old hint is still being animated. tsChangePending, // A selection change is pending. tsCheckPropagation, // Set during automatic check state propagation. tsCollapsing, // A full collapse operation is in progress. tsToggleFocusedSelection, // Node selection was modifed using Ctrl-click. Change selection state on next mouse up. tsClearPending, // Need to clear the current selection on next mouse move. tsClipboardFlushing, // Set during flushing the clipboard to avoid freeing the content. tsCopyPending, // Indicates a pending copy operation which needs to be finished. tsCutPending, // Indicates a pending cut operation which needs to be finished. tsDrawSelPending, // Multiselection only. User held down the left mouse button on a free // area and might want to start draw selection. tsDrawSelecting, // Multiselection only. Draw selection has actually started. tsEditing, // Indicates that an edit operation is currently in progress. tsEditPending, // An mouse up start edit if dragging has not started. tsExpanding, // A full expand operation is in progress. tsNodeHeightTracking, // A node height changing operation is in progress. tsNodeHeightTrackPending, // left button is down, user might want to start changing a node's height. tsHint, // Set when our hint is visible or soon will be. tsInAnimation, // Set if the tree is currently in an animation loop. tsIncrementalSearching, // Set when the user starts incremental search. tsIncrementalSearchPending, // Set in WM_KEYDOWN to tell to use the char in WM_CHAR for incremental search. tsIterating, // Set when IterateSubtree is currently in progress. tsKeyCheckPending, // A check operation is under way, initiated by a key press (space key). Ignore mouse. tsLeftButtonDown, // Set when the left mouse button is down. tsLeftDblClick, // Set when the left mouse button was doubly clicked. tsMouseCheckPending, // A check operation is under way, initiated by a mouse click. Ignore space key. tsMiddleButtonDown, // Set when the middle mouse button is down. tsMiddleDblClick, // Set when the middle mouse button was doubly clicked. tsNeedScale, // On next ChangeScale scale the default node height. tsNeedRootCountUpdate, // Set if while loading a root node count is set. tsOLEDragging, // OLE dragging in progress. tsOLEDragPending, // User has requested to start delayed dragging. tsPainting, // The tree is currently painting itself. tsRightButtonDown, // Set when the right mouse button is down. tsRightDblClick, // Set when the right mouse button was doubly clicked. tsPopupMenuShown, // The user clicked the right mouse button, which might cause a popup menu to appear. tsScrolling, // Set when autoscrolling is active. tsScrollPending, // Set when waiting for the scroll delay time to elapse. tsSizing, // Set when the tree window is being resized. This is used to prevent recursive calls // due to setting the scrollbars when sizing. tsStopValidation, // Cache validation can be stopped (usually because a change has occured meanwhile). tsStructureChangePending, // The structure of the tree has been changed while the update was locked. tsSynchMode, // Set when the tree is in synch mode, where no timer events are triggered. tsThumbTracking, // Stop updating the horizontal scroll bar while dragging the vertical thumb and vice versa. tsToggling, // A toggle operation (for some node) is in progress. tsUpdateHiddenChildrenNeeded, // Pending update for the hidden children flag after massive visibility changes. tsUpdating, // The tree does currently not update its window because a BeginUpdate has not yet ended. tsUseCache, // The tree's node caches are validated and non-empty. tsUserDragObject, // Signals that the application created an own drag object in OnStartDrag. tsUseThemes, // The tree runs under WinXP+, is theme aware and themes are enabled. tsValidating, // The tree's node caches are currently validated. tsValidationNeeded, // Something in the structure of the tree has changed. The cache needs validation. tsVCLDragging, // VCL drag'n drop in progress. tsVCLDragPending, // One-shot flag to avoid clearing the current selection on implicit mouse up for VCL drag. tsWheelPanning, // Wheel mouse panning is active or soon will be. tsWheelScrolling, // Wheel mouse scrolling is active or soon will be. tsWindowCreating // Set during window handle creation to avoid frequent unnecessary updates. ); TChangeStates = set of ( csStopValidation, // Cache validation can be stopped (usually because a change has occured meanwhile). csUseCache, // The tree's node caches are validated and non-empty. csValidating, // The tree's node caches are currently validated. csValidationNeeded // Something in the structure of the tree has changed. The cache needs validation. ); // determines whether and how the drag image is to show TVTDragImageKind = ( diComplete, // show a complete drag image with all columns, only visible columns are shown diMainColumnOnly, // show only the main column (the tree column) diNoImage // don't show a drag image at all ); // Switch for OLE and VCL drag'n drop. Because it is not possible to have both simultanously. TVTDragType = ( dtOLE, dtVCL ); // options which determine what to draw in PaintTree TVTInternalPaintOption = ( poBackground, // draw background image if there is any and it is enabled poColumnColor, // erase node's background with the column's color poDrawFocusRect, // draw focus rectangle around the focused node poDrawSelection, // draw selected nodes with the normal selection color poDrawDropMark, // draw drop mark if a node is currently the drop target poGridLines, // draw grid lines if enabled poMainOnly, // draw only the main column poSelectedOnly // draw only selected nodes ); TVTInternalPaintOptions = set of TVTInternalPaintOption; // Determines the look of a tree's lines. TVTLineStyle = ( lsCustomStyle, // application provides a line pattern lsDotted, // usual dotted lines (default) lsSolid // simple solid lines ); // TVTLineType is used during painting a tree TVTLineType = ( ltNone, // no line at all ltBottomRight, // a line from bottom to the center and from there to the right ltTopDown, // a line from top to bottom ltTopDownRight, // a line from top to bottom and from center to the right ltRight, // a line from center to the right ltTopRight, // a line from bottom to center and from there to the right // special styles for alternative drawings of tree lines ltLeft, // a line from top to bottom at the left ltLeftBottom // a combination of ltLeft and a line at the bottom from left to right ); // Determines how to draw tree lines. TVTLineMode = ( lmNormal, // usual tree lines (as in TTreeview) lmBands // looks similar to a Nassi-Schneidermann diagram ); // A collection of line type IDs which is used while painting a node. TLineImage = array of TVTLineType; TVTScrollIncrement = 1..10000; // Export type TVTExportType = ( etRTF, // contentToRTF etHTML, // contentToHTML etText, // contentToText etExcel, // supported by external tools etWord, // supported by external tools etCustom // supported by external tools ); TVTNodeExportEvent = function (Sender: TBaseVirtualTree; aExportType: TVTExportType; Node: PVirtualNode): Boolean of object; TVTColumnExportEvent = procedure (Sender: TBaseVirtualTree; aExportType: TVTExportType; Column: TVirtualTreeColumn) of object; TVTTreeExportEvent = procedure(Sender: TBaseVirtualTree; aExportType: TVTExportType) of object; // A class to manage scroll bar aspects. TScrollBarOptions = class(TPersistent) private FAlwaysVisible: Boolean; FOwner: TBaseVirtualTree; FScrollBars: TScrollStyle; // used to hide or show vertical and/or horizontal scrollbar FScrollBarStyle: TVTScrollBarStyle; // kind of scrollbars to use FIncrementX, FIncrementY: TVTScrollIncrement; // number of pixels to scroll in one step (when auto scrolling) procedure SetAlwaysVisible(Value: Boolean); procedure SetScrollBars(Value: TScrollStyle); procedure SetScrollBarStyle(Value: TVTScrollBarStyle); protected function GetOwner: TPersistent; override; public constructor Create(AOwner: TBaseVirtualTree); procedure Assign(Source: TPersistent); override; published property AlwaysVisible: Boolean read FAlwaysVisible write SetAlwaysVisible default False; property HorizontalIncrement: TVTScrollIncrement read FIncrementX write FIncrementX default 20; property ScrollBars: TScrollStyle read FScrollbars write SetScrollBars default ssBoth; property ScrollBarStyle: TVTScrollBarStyle read FScrollBarStyle write SetScrollBarStyle default sbmRegular; property VerticalIncrement: TVTScrollIncrement read FIncrementY write FIncrementY default 20; end; // class to collect all switchable colors into one place TVTColors = class(TPersistent) private FOwner: TBaseVirtualTree; FColors: array[0..14] of TColor; function GetColor(const Index: Integer): TColor; procedure SetColor(const Index: Integer; const Value: TColor); public constructor Create(AOwner: TBaseVirtualTree); procedure Assign(Source: TPersistent); override; published property BorderColor: TColor index 7 read GetColor write SetColor default clBtnFace; property DisabledColor: TColor index 0 read GetColor write SetColor default clBtnShadow; property DropMarkColor: TColor index 1 read GetColor write SetColor default clHighlight; property DropTargetColor: TColor index 2 read GetColor write SetColor default clHighLight; property DropTargetBorderColor: TColor index 11 read GetColor write SetColor default clHighLight; property FocusedSelectionColor: TColor index 3 read GetColor write SetColor default clHighLight; property FocusedSelectionBorderColor: TColor index 9 read GetColor write SetColor default clHighLight; property GridLineColor: TColor index 4 read GetColor write SetColor default clBtnFace; property HeaderHotColor: TColor index 14 read GetColor write SetColor default clBtnShadow; property HotColor: TColor index 8 read GetColor write SetColor default clWindowText; property SelectionRectangleBlendColor: TColor index 12 read GetColor write SetColor default clHighlight; property SelectionRectangleBorderColor: TColor index 13 read GetColor write SetColor default clHighlight; property TreeLineColor: TColor index 5 read GetColor write SetColor default clBtnShadow; property UnfocusedSelectionColor: TColor index 6 read GetColor write SetColor default clBtnFace; property UnfocusedSelectionBorderColor: TColor index 10 read GetColor write SetColor default clBtnFace; end; // For painting a node and its columns/cells a lot of information must be passed frequently around. TVTImageInfo = record Index: Integer; // Index in the associated image list. XPos, // Horizontal position in the current target canvas. YPos: Integer; // Vertical position in the current target canvas. Ghosted: Boolean; // Flag to indicate that the image must be drawn slightly lighter. Images: TCustomImageList; // The image list to be used for painting. end; TVTImageInfoIndex = ( iiNormal, iiState, iiCheck, iiOverlay ); // Options which are used when modifying the scroll offsets. TScrollUpdateOptions = set of ( suoRepaintHeader, // if suoUpdateNCArea is also set then invalidate the header suoRepaintScrollbars, // if suoUpdateNCArea is also set then repaint both scrollbars after updating them suoScrollClientArea, // scroll and invalidate the proper part of the client area suoUpdateNCArea // update non-client area (scrollbars, header) ); // Determines the look of a tree's buttons. TVTButtonStyle = ( bsRectangle, // traditional Windows look (plus/minus buttons) bsTriangle // traditional Macintosh look ); // TButtonFillMode is only used when the button style is bsRectangle and determines how to fill the interior. TVTButtonFillMode = ( fmTreeColor, // solid color, uses the tree's background color fmWindowColor, // solid color, uses clWindow fmShaded, // color gradient, Windows XP style (legacy code, use toThemeAware on Windows XP instead) fmTransparent // transparent color, use the item's background color ); TVTPaintInfo = record Canvas: TCanvas; // the canvas to paint on PaintOptions: TVTInternalPaintOptions; // a copy of the paint options passed to PaintTree Node: PVirtualNode; // the node to paint Column: TColumnIndex; // the node's column index to paint Position: TColumnPosition; // the column position of the node CellRect, // the node cell ContentRect: TRect; // the area of the cell used for the node's content NodeWidth: Integer; // the actual node width Alignment: TAlignment; // how to align within the node rectangle CaptionAlignment: TAlignment; // how to align text within the caption rectangle BidiMode: TBidiMode; // directionality to be used for painting BrushOrigin: TPoint; // the alignment for the brush used to draw dotted lines ImageInfo: array[TVTImageInfoIndex] of TVTImageInfo; // info about each possible node image end; // Method called by the Animate routine for each animation step. TVTAnimationCallback = function(Step, StepSize: Integer; Data: Pointer): Boolean of object; TVTIncrementalSearch = ( isAll, // search every node in tree, initialize if necessary isNone, // disable incremental search isInitializedOnly, // search only initialized nodes, skip others isVisibleOnly // search only visible nodes, initialize if necessary ); // Determines which direction to use when advancing nodes during an incremental search. TVTSearchDirection = ( sdForward, sdBackward ); // Determines where to start incremental searching for each key press. TVTSearchStart = ( ssAlwaysStartOver, // always use the first/last node (depending on direction) to search from ssLastHit, // use the last found node ssFocusedNode // use the currently focused node ); // Determines how to use the align member of a node. TVTNodeAlignment = ( naFromBottom, // the align member specifies amount of units (usually pixels) from top border of the node naFromTop, // align is to be measured from bottom naProportional // align is to be measure in percent of the entire node height and relative to top ); // Determines how to draw the selection rectangle used for draw selection. TVTDrawSelectionMode = ( smDottedRectangle, // same as DrawFocusRect smBlendedRectangle // alpha blending, uses special colors (see TVTColors) ); // Determines for which purpose the cell paint event is called. TVTCellPaintMode = ( cpmPaint, // painting the cell cpmGetContentMargin // getting cell content margin ); // Determines which sides of the cell content margin should be considered. TVTCellContentMarginType = ( ccmtAllSides, // consider all sides ccmtTopLeftOnly, // consider top margin and left margin only ccmtBottomRightOnly // consider bottom margin and right margin only ); TClipboardFormats = class(TStringList) private FOwner: TBaseVirtualTree; public constructor Create(AOwner: TBaseVirtualTree); virtual; function Add(const S: string): Integer; override; procedure Insert(Index: Integer; const S: string); override; property Owner: TBaseVirtualTree read FOwner; end; // ----- Event prototypes: // node enumeration TVTGetNodeProc = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean) of object; // node events TVTChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var Allowed: Boolean) of object; TVTCheckChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var NewState: TCheckState; var Allowed: Boolean) of object; TVTChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTStructureChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Reason: TChangeReason) of object; TVTEditCancelEvent = procedure(Sender: TBaseVirtualTree; Column: TColumnIndex) of object; TVTEditChangingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean) of object; TVTEditChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex) of object; TVTFreeNodeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTFocusChangingEvent = procedure(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex; var Allowed: Boolean) of object; TVTFocusChangeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex) of object; TVTGetImageEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer) of object; TVTGetImageExEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer; var ImageList: TCustomImageList) of object; TVTGetImageTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String) of object; TVTHotNodeChangeEvent = procedure(Sender: TBaseVirtualTree; OldNode, NewNode: PVirtualNode) of object; TVTInitChildrenEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal) of object; TVTInitNodeEvent = procedure(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates) of object; TVTPopupEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; const P: TPoint; var AskParent: Boolean; var PopupMenu: TPopupMenu) of object; TVTHelpContextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var HelpContext: Integer) of object; TVTCreateEditorEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; out EditLink: IVTEditLink) of object; TVTSaveNodeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Stream: TStream) of object; // header/column events TVTHeaderClickEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; TVTHeaderMouseEvent = procedure(Sender: TVTHeader; Button: TMouseButton; Shift: TShiftState; X, Y: Integer) of object; TVTHeaderMouseMoveEvent = procedure(Sender: TVTHeader; Shift: TShiftState; X, Y: Integer) of object; TVTBeforeHeaderHeightTrackingEvent = procedure(Sender: TVTHeader; Shift: TShiftState) of object; TVTAfterHeaderHeightTrackingEvent = procedure(Sender: TVTHeader) of object; TVTHeaderHeightTrackingEvent = procedure(Sender: TVTHeader; var P: TPoint; Shift: TShiftState; var Allowed: Boolean) of object; TVTHeaderHeightDblClickResizeEvent = procedure(Sender: TVTHeader; var P: TPoint; Shift: TShiftState; var Allowed: Boolean) of object; TVTHeaderNotifyEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTHeaderDraggingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var Allowed: Boolean) of object; TVTHeaderDraggedEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; OldPosition: Integer) of object; TVTHeaderDraggedOutEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; const DropPosition: TPoint) of object; TVTHeaderPaintEvent = procedure(Sender: TVTHeader; HeaderCanvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode) of object; TVTHeaderPaintQueryElementsEvent = procedure(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements) of object; TVTAdvancedHeaderPaintEvent = procedure(Sender: TVTHeader; var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements) of object; TVTBeforeAutoFitColumnsEvent = procedure(Sender: TVTHeader; var SmartAutoFitType: TSmartAutoFitType) of object; TVTBeforeAutoFitColumnEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var SmartAutoFitType: TSmartAutoFitType; var Allowed: Boolean) of object; TVTAfterAutoFitColumnEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTAfterAutoFitColumnsEvent = procedure(Sender: TVTHeader) of object; TVTColumnClickEvent = procedure (Sender: TBaseVirtualTree; Column: TColumnIndex; Shift: TShiftState) of object; TVTColumnDblClickEvent = procedure (Sender: TBaseVirtualTree; Column: TColumnIndex; Shift: TShiftState) of object; TVTColumnWidthDblClickResizeEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState; P: TPoint; var Allowed: Boolean) of object; TVTBeforeColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState) of object; TVTAfterColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex) of object; TVTColumnWidthTrackingEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint; var Allowed: Boolean) of object; TVTGetHeaderCursorEvent = procedure(Sender: TVTHeader; var Cursor: HCURSOR) of object; TVTBeforeGetMaxColumnWidthEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var UseSmartColumnWidth: Boolean) of object; TVTAfterGetMaxColumnWidthEvent = procedure(Sender: TVTHeader; Column: TColumnIndex; var MaxWidth: Integer) of object; TVTCanSplitterResizeColumnEvent = procedure(Sender: TVTHeader; P: TPoint; Column: TColumnIndex; var Allowed: Boolean) of object; // move, copy and node tracking events TVTNodeMovedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTNodeMovingEvent = procedure(Sender: TBaseVirtualTree; Node, Target: PVirtualNode; var Allowed: Boolean) of object; TVTNodeCopiedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode) of object; TVTNodeCopyingEvent = procedure(Sender: TBaseVirtualTree; Node, Target: PVirtualNode; var Allowed: Boolean) of object; TVTNodeHeightTrackingEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint; var Allowed: Boolean) of object; TVTNodeHeightDblClickResizeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint; var Allowed: Boolean) of object; // drag'n drop/OLE events TVTCreateDragManagerEvent = procedure(Sender: TBaseVirtualTree; out DragManager: IVTDragManager) of object; TVTCreateDataObjectEvent = procedure(Sender: TBaseVirtualTree; out IDataObject: IDataObject) of object; TVTDragAllowedEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean) of object; TVTDragOverEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean) of object; TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; {DataObject: IDataObject;} Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode) of object; TVTRenderOLEDataEvent = procedure(Sender: TBaseVirtualTree; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean; var Result: HRESULT) of object; TVTGetUserClipboardFormatsEvent = procedure(Sender: TBaseVirtualTree; var Formats: TFormatEtcArray) of object; // paint events TVTBeforeItemEraseEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction) of object; TVTAfterItemEraseEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect) of object; TVTBeforeItemPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var CustomDraw: Boolean) of object; TVTAfterItemPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect) of object; TVTBeforeCellPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect) of object; TVTAfterCellPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect) of object; TVTPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas) of object; TVTBackgroundPaintEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; const R: TRect; var Handled: Boolean) of object; TVTGetLineStyleEvent = procedure(Sender: TBaseVirtualTree; var Bits: Pointer) of object; TVTMeasureItemEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer) of object; // search, sort TVTCompareEvent = procedure(Sender: TBaseVirtualTree; Node1, Node2: PVirtualNode; Column: TColumnIndex; var Result: Integer) of object; TVTIncrementalSearchEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; const SearchText: String; var Result: Integer) of object; // miscellaneous TVTGetNodeDataSizeEvent = procedure(Sender: TBaseVirtualTree; var NodeDataSize: Integer) of object; TVTKeyActionEvent = procedure(Sender: TBaseVirtualTree; var CharCode: Word; var Shift: TShiftState; var DoDefault: Boolean) of object; TVTScrollEvent = procedure(Sender: TBaseVirtualTree; DeltaX, DeltaY: Integer) of object; TVTUpdatingEvent = procedure(Sender: TBaseVirtualTree; State: TVTUpdateState) of object; TVTGetCursorEvent = procedure(Sender: TBaseVirtualTree; var Cursor: TCursor) of object; TVTStateChangeEvent = procedure(Sender: TBaseVirtualTree; Enter, Leave: TVirtualTreeStates) of object; TVTGetCellIsEmptyEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var IsEmpty: Boolean) of object; TVTScrollbarShowEvent = procedure(Sender: TBaseVirtualTree; Bar: Integer; Show: Boolean) of object; // Helper types for node iterations. TGetFirstNodeProc = function: PVirtualNode of object; TGetNextNodeProc = function(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode of object; // ----- TBaseVirtualTree TBaseVirtualTree = class(TCustomControl) private //FBorderStyle: TBorderStyle; FHeader: TVTHeader; FRoot: PVirtualNode; FDefaultNodeHeight, FIndent: Cardinal; FOptions: TCustomVirtualTreeOptions; FUpdateCount: Cardinal; // update stopper, updates of the tree control are only done if = 0 FSynchUpdateCount: Cardinal; // synchronizer, causes all events which are usually done via timers // to happen immediately, regardless of the normal update state FNodeDataSize: Integer; // number of bytes to allocate with each node (in addition to its base // structure and the internal data), if -1 then do callback FStates: TVirtualTreeStates; // various active/pending states the tree needs to consider FLastSelected, FFocusedNode: PVirtualNode; FEditColumn, // column to be edited (focused node) FFocusedColumn: TColumnIndex; // NoColumn if no columns are active otherwise the last hit column of // the currently focused node FHeightTrackPoint: TPoint; // Starting point of a node's height changing operation. FHeightTrackNode: PVirtualNode; // Node which height is being changed. FHeightTrackColumn: TColumnIndex; // Initial column where the height changing operation takes place. FScrollDirections: TScrollDirections; // directions to scroll client area into depending on mouse position FLastStructureChangeReason: TChangeReason; // Used for delayed structure change event. FLastStructureChangeNode, // dito FLastChangedNode, // used for delayed change event FCurrentHotNode: PVirtualNode; // Node over which the mouse is hovering. FCurrentHotColumn: TColumnIndex; // Column over which the mouse is hovering. FHotNodeButtonHit: Boolean; // Indicates wether the mouse is hovering over the hot node's button. FLastSelRect, FNewSelRect: TRect; // used while doing draw selection FHotCursor: TCursor; // can be set to additionally indicate the current hot node FHintMode: TVTHintMode; // determines the kind of the hint window FHintData: TVTHintData; // used while preparing the hint window FChangeDelay: Cardinal; // used to delay OnChange event FEditDelay: Cardinal; // determines time to elapse before a node goes into edit mode FPositionCache: TCache; // array which stores node references ordered by vertical positions // (see also DoValidateCache for more information) FVisibleCount: Cardinal; // number of currently visible nodes FStartIndex: Cardinal; // index to start validating cache from FSelection: TNodeArray; // list of currently selected nodes FSelectionCount: Integer; // number of currently selected nodes (size of FSelection might differ) FSelectionLocked: Boolean; // prevents the tree from changing the selection FRangeAnchor: PVirtualNode; // anchor node for selection with the keyboard, determines start of a // selection range FCheckNode: PVirtualNode; // node which "captures" a check event FPendingCheckState: TCheckState; // the new state the check node will get if all went fine FCheckPropagationCount: Cardinal; // nesting level of check propagation (WL, 05.02.2004) FLastSelectionLevel: Integer; // keeps the last node level for constrained multiselection FDrawSelShiftState: TShiftState; // keeps the initial shift state when the user starts selection with // the mouse FEditLink: IVTEditLink; // used to comunicate with an application defined editor FTempNodeCache: TNodeArray; // used at various places to hold temporarily a bunch of node refs. FTempNodeCount: Cardinal; // number of nodes in FTempNodeCache FBackground: TPicture; // A background image loadable at design and runtime. FMargin: Integer; // horizontal border distance FTextMargin: Integer; // space between the node's text and its horizontal bounds FBackgroundOffsetX, FBackgroundOffsetY: Integer; // used to fine tune the position of the background image FAnimationDuration: Cardinal; // specifies how long an animation shall take (expanding, hint) FWantTabs: Boolean; // If True then the tree also consumes the tab key. FNodeAlignment: TVTNodeAlignment; // determines how to interpret the align member of a node FHeaderRect: TRect; // Space which the header currently uses in the control (window coords). FLastHintRect: TRect; // Area which the mouse must leave to reshow a hint. FUpdateRect: TRect; // paint support and images FPlusBM, FMinusBM, // small bitmaps used for tree buttons FHotPlusBM, FHotMinusBM: TBitmap; // small bitmaps used for hot tree buttons FImages, // normal images in the tree FStateImages: TCustomImageList; // state images in the tree FCustomCheckImages: TBitmap; // application defined check images FCheckImageKind: TCheckImageKind; // light or dark, cross marks or tick marks FCheckImages: TBitmap; // Reference to global image list to be used for the check images. FImageChangeLink, FStateChangeLink, FCustomCheckChangeLink: TChangeLink; // connections to the image lists FOldFontChange: TNotifyEvent; // helper method pointer for tracking font changes in the off screen buffer FFontChanged: Boolean; // flag for keeping informed about font changes in the off screen buffer FColors: TVTColors; // class comprising all customizable colors in the tree FButtonStyle: TVTButtonStyle; // style of the tree buttons FButtonFillMode: TVTButtonFillMode; // for rectangular tree buttons only: how to fill them FLineStyle: TVTLineStyle; // style of the tree lines FLineMode: TVTLineMode; // tree lines or bands etc. FDottedBrush: HBRUSH; // used to paint dotted lines without special pens FSelectionCurveRadius: Cardinal; // radius for rounded selection rectangles FSelectionBlendFactor: Byte; // Determines the factor by which the selection rectangle is to be // faded if enabled. FDrawSelectionMode: TVTDrawSelectionMode; // determines the paint mode for draw selection // alignment and directionality support FAlignment: TAlignment; // default alignment of the tree if no columns are shown // drag'n drop and clipboard support FDragImageKind: TVTDragImageKind; // determines whether or not and what to show in the drag image FDragOperations: TDragOperations; // determines which operations are allowed during drag'n drop FDragThreshold: Integer; // used to determine when to actually start a drag'n drop operation FDragManager: IVTDragManager; // drag'n drop, cut'n paste FDropTargetNode: PVirtualNode; // node currently selected as drop target FLastDropMode: TDropMode; // set while dragging and used to track changes FDragSelection: TNodeArray; // temporary copy of FSelection used during drag'n drop FDragType: TVTDragType; // used to switch between OLE and VCL drag'n drop FDragImage: TVTDragImage; // drag image management FDragWidth, FDragHeight: Integer; // size of the drag image, the larger the more CPU power is needed FClipboardFormats: TClipboardFormats; // a list of clipboard format descriptions enabled for this tree FLastVCLDragTarget: PVirtualNode; // A node cache for VCL drag'n drop (keywords: DragLeave on DragDrop). FVCLDragEffect: LongWord; // A cache for VCL drag'n drop to keep the current drop effect. // scroll support FScrollBarOptions: TScrollBarOptions; // common properties of horizontal and vertical scrollbar FAutoScrollInterval: TAutoScrollInterval; // determines speed of auto scrolling FAutoScrollDelay: Cardinal; // amount of milliseconds to wait until autoscrolling becomes active FAutoExpandDelay: Cardinal; // amount of milliseconds to wait until a node is expanded if it is the // drop target FOffsetX: Integer; FOffsetY: Integer; // Determines left and top scroll offset. FEffectiveOffsetX: Integer; // Actual position of the horizontal scroll bar (varies depending on bidi mode). FRangeX, FRangeY: Cardinal; // current virtual width and height of the tree FBottomSpace: Cardinal; // Extra space below the last node. FDefaultPasteMode: TVTNodeAttachMode; // Used to determine where to add pasted nodes to. FSingletonNodeArray: TNodeArray; // Contains only one element for quick addition of single nodes // to the selection. FDragScrollStart: Cardinal; // Contains the start time when a tree does auto scrolling as drop target. // search FIncrementalSearch: TVTIncrementalSearch; // Used to determine whether and how incremental search is to be used. FSearchTimeout: Cardinal; // Number of milliseconds after which to stop incremental searching. FSearchBuffer: String; // Collects a sequence of keypresses used to do incremental searching. FLastSearchNode: PVirtualNode; // Reference to node which was last found as search fit. FSearchDirection: TVTSearchDirection; // Direction to incrementally search the tree. FSearchStart: TVTSearchStart; // Where to start iteration on each key press. // miscellanous FTotalInternalDataSize: Cardinal; // Cache of the sum of the necessary internal data size for all tree // classes derived from this base class. FPanningWindow: TVirtualPanningWindow; // Helper window for wheel panning FLastClickPos: TPoint; // Used for retained drag start and wheel mouse scrolling. FOperationCount: Cardinal; // Counts how many nested long-running operations are in progress. FOperationCanceled: Boolean; // Used to indicate that a long-running operation should be canceled. {$ifdef EnableAccessible} // MSAA support FAccessible: IAccessible; // The IAccessible interface to the window itself. FAccessibleItem: IAccessible; // The IAccessible to the item that currently has focus. FAccessibleName: string; // The name the window is given for screen readers. {$endif} // export FOnBeforeNodeExport: TVTNodeExportEvent; // called before exporting a node FOnNodeExport: TVTNodeExportEvent; FOnAfterNodeExport: TVTNodeExportEvent; // called after exporting a node FOnBeforeColumnExport: TVTColumnExportEvent; // called before exporting a column FOnColumnExport: TVTColumnExportEvent; FOnAfterColumnExport: TVTColumnExportEvent; // called after exporting a column FOnBeforeTreeExport: TVTTreeExportEvent; // called before starting the export FOnAfterTreeExport: TVTTreeExportEvent; // called after finishing the export FOnBeforeHeaderExport: TVTTreeExportEvent; // called before exporting the header FOnAfterHeaderExport: TVTTreeExportEvent; // called after exporting the header // common events FOnChange: TVTChangeEvent; // selection change FOnStructureChange: TVTStructureChangeEvent; // structural change like adding nodes etc. FOnInitChildren: TVTInitChildrenEvent; // called when a node's children are needed (expanding etc.) FOnInitNode: TVTInitNodeEvent; // called when a node needs to be initialized (child count etc.) FOnFreeNode: TVTFreeNodeEvent; // called when a node is about to be destroyed, user data can and should // be freed in this event FOnGetImage: TVTGetImageEvent; // Used to retrieve the image index of a given node. FOnGetImageEx: TVTGetImageExEvent; // Used to retrieve the image index of a given node along with a custom // image list. FOnGetImageText: TVTGetImageTextEvent; // Used to retrieve the image alternative text of a given node. // Used by the accessibility interface to provide useful text for status images. FOnHotChange: TVTHotNodeChangeEvent; // called when the current "hot" node (that is, the node under the mouse) // changes and hot tracking is enabled FOnExpanding, // called just before a node is expanded FOnCollapsing: TVTChangingEvent; // called just before a node is collapsed FOnChecking: TVTCheckChangingEvent; // called just before a node's check state is changed FOnExpanded, // called after a node has been expanded FOnCollapsed, // called after a node has been collapsed FOnChecked: TVTChangeEvent; // called after a node's check state has been changed FOnResetNode: TVTChangeEvent; // called when a node is set to be uninitialized FOnNodeMoving: TVTNodeMovingEvent; // called just before a node is moved from one parent node to another // (this can be cancelled) FOnNodeMoved: TVTNodeMovedEvent; // called after a node and its children have been moved to another // parent node (probably another tree, but within the same application) FOnNodeCopying: TVTNodeCopyingEvent; // called when an node is copied to another parent node (probably in // another tree, but within the same application, can be cancelled) FOnNodeHeightTracking: TVTNodeHeightTrackingEvent; // called when a node's height is being changed via mouse FOnNodeHeightDblClickResize: TVTNodeHeightDblClickResizeEvent; // called when a node's vertical splitter is double clicked FOnNodeCopied: TVTNodeCopiedEvent; // call after a node has been copied FOnEditing: TVTEditChangingEvent; // called just before a node goes into edit mode FOnEditCancelled: TVTEditCancelEvent; // called when editing has been cancelled FOnEdited: TVTEditChangeEvent; // called when editing has successfully been finished FOnFocusChanging: TVTFocusChangingEvent; // called when the focus is about to go to a new node and/or column // (can be cancelled) FOnFocusChanged: TVTFocusChangeEvent; // called when the focus goes to a new node and/or column FOnGetPopupMenu: TVTPopupEvent; // called when the popup for a node or the header needs to be shown FOnGetHelpContext: TVTHelpContextEvent; // called when a node specific help theme should be called FOnCreateEditor: TVTCreateEditorEvent; // called when a node goes into edit mode, this allows applications // to supply their own editor FOnLoadNode, // called after a node has been loaded from a stream (file, clipboard, // OLE drag'n drop) to allow an application to load their own data // saved in OnSaveNode FOnSaveNode: TVTSaveNodeEvent; // called when a node needs to be serialized into a stream // (see OnLoadNode) to give the application the opportunity to save // their node specific, persistent data (note: never save memory // references) // header/column mouse events FOnAfterAutoFitColumn: TVTAfterAutoFitColumnEvent; FOnAfterAutoFitColumns: TVTAfterAutoFitColumnsEvent; FOnBeforeAutoFitColumns: TVTBeforeAutoFitColumnsEvent; FOnBeforeAutoFitColumn: TVTBeforeAutoFitColumnEvent; FOnHeaderClick, // mouse events for the header, just like those for a control FOnHeaderImageClick, FOnHeaderCheckBoxClick: TVTHeaderClickEvent; FOnHeaderDblClick: TVTHeaderClickEvent; FOnAfterHeaderHeightTracking: TVTAfterHeaderHeightTrackingEvent; FOnBeforeHeaderHeightTracking: TVTBeforeHeaderHeightTrackingEvent; FOnHeaderHeightTracking: TVTHeaderHeightTrackingEvent; FOnHeaderHeightDblClickResize: TVTHeaderHeightDblClickResizeEvent; FOnHeaderMouseDown, FOnHeaderMouseUp: TVTHeaderMouseEvent; FOnHeaderMouseMove: TVTHeaderMouseMoveEvent; FOnAfterGetMaxColumnWidth: TVTAfterGetMaxColumnWidthEvent; FOnBeforeGetMaxColumnWidth: TVTBeforeGetMaxColumnWidthEvent; FOnColumnClick: TVTColumnClickEvent; FOnColumnDblClick: TVTColumnDblClickEvent; FOnColumnResize: TVTHeaderNotifyEvent; FOnColumnWidthDblClickResize: TVTColumnWidthDblClickResizeEvent; FOnAfterColumnWidthTracking: TVTAfterColumnWidthTrackingEvent; FOnBeforeColumnWidthTracking: TVTBeforeColumnWidthTrackingEvent; FOnColumnWidthTracking: TVTColumnWidthTrackingEvent; FOnGetHeaderCursor: TVTGetHeaderCursorEvent; // triggered to allow the app. to use customized cursors for the header FOnCanSplitterResizeColumn: TVTCanSplitterResizeColumnEvent; // paint events FOnAfterPaint, // triggered when the tree has entirely been painted FOnBeforePaint: TVTPaintEvent; // triggered when the tree is about to be painted FOnAfterItemPaint: TVTAfterItemPaintEvent; // triggered after an item has been painted FOnBeforeItemPaint: TVTBeforeItemPaintEvent; // triggered when an item is about to be painted FOnBeforeItemErase: TVTBeforeItemEraseEvent; // triggered when an item's background is about to be erased FOnAfterItemErase: TVTAfterItemEraseEvent; // triggered after an item's background has been erased FOnAfterCellPaint: TVTAfterCellPaintEvent; // triggered after a column of an item has been painted FOnBeforeCellPaint: TVTBeforeCellPaintEvent; // triggered when a column of an item is about to be painted FOnHeaderDraw: TVTHeaderPaintEvent; // Used when owner draw is enabled for the header and a column is set // to owner draw mode. FOnHeaderDrawQueryElements: TVTHeaderPaintQueryElementsEvent; // Used for advanced header painting to query the // application for the elements, which are drawn by it and which should // be drawn by the tree. FOnAdvancedHeaderDraw: TVTAdvancedHeaderPaintEvent; // Used when owner draw is enabled for the header and a column // is set to owner draw mode. But only if OnHeaderDrawQueryElements // returns at least one element to be drawn by the application. // In this case OnHeaderDraw is not used. FOnGetLineStyle: TVTGetLineStyleEvent; // triggered when a custom line style is used and the pattern brush // needs to be build FOnPaintBackground: TVTBackgroundPaintEvent; // triggered if a part of the tree's background must be erased which is // not covered by any node FOnMeasureItem: TVTMeasureItemEvent; // Triggered when a node is about to be drawn and its height was not yet // determined by the application. // drag'n drop events FOnCreateDragManager: TVTCreateDragManagerEvent; // called to allow for app./descendant defined drag managers FOnCreateDataObject: TVTCreateDataObjectEvent; // called to allow for app./descendant defined data objects FOnDragAllowed: TVTDragAllowedEvent; // used to get permission for manual drag in mouse down FOnDragOver: TVTDragOverEvent; // called for every mouse move FOnDragDrop: TVTDragDropEvent; // called on release of mouse button (if drop was allowed) FOnHeaderDragged: TVTHeaderDraggedEvent; // header (column) drag'n drop FOnHeaderDraggedOut: TVTHeaderDraggedOutEvent; // header (column) drag'n drop, which did not result in a valid drop. FOnHeaderDragging: TVTHeaderDraggingEvent; // header (column) drag'n drop FOnRenderOLEData: TVTRenderOLEDataEvent; // application/descendant defined clipboard formats FOnGetUserClipboardFormats: TVTGetUserClipboardFormatsEvent; // gives application/descendants the opportunity to // add own clipboard formats on the fly // miscellanous events FOnGetNodeDataSize: TVTGetNodeDataSizeEvent; // Called if NodeDataSize is -1. FOnKeyAction: TVTKeyActionEvent; // Used to selectively prevent key actions (full expand on Ctrl+'+' etc.). FOnScroll: TVTScrollEvent; // Called when one or both paint offsets changed. FOnUpdating: TVTUpdatingEvent; // Called from BeginUpdate, EndUpdate, BeginSynch and EndSynch. FOnGetCursor: TVTGetCursorEvent; // Called to allow the app. to set individual cursors. FOnStateChange: TVTStateChangeEvent; // Called whenever a state in the tree changes. FOnGetCellIsEmpty: TVTGetCellIsEmptyEvent; // Called when the tree needs to know if a cell is empty. FOnShowScrollbar: TVTScrollbarShowEvent; // Called when a scrollbar is changed in its visibility. // search, sort FOnCompareNodes: TVTCompareEvent; // used during sort FOnIncrementalSearch: TVTIncrementalSearchEvent; // triggered on every key press (not key down) procedure AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer); procedure AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect; var ImageInfo: TVTImageInfo); procedure AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); procedure AdjustTotalHeight(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); function CalculateCacheEntryCount: Integer; procedure CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign, VButtonAlign: Integer); function ChangeCheckState(Node: PVirtualNode; Value: TCheckState): Boolean; function CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; function CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; procedure ClearNodeBackground(const PaintInfo: TVTPaintInfo; UseBackground, Floating: Boolean; R: TRect); function CompareNodePositions(Node1, Node2: PVirtualNode; ConsiderChildrenAbove: Boolean = False): Integer; function DetermineLineImageAndSelectLevel(Node: PVirtualNode; out LineImage: TLineImage): Integer; procedure DrawLineImage(const PaintInfo: TVTPaintInfo; X, Y, H, VAlign: Integer; Style: TVTLineType; Reverse: Boolean); function FindInPositionCache(Node: PVirtualNode; var CurrentPos: Cardinal): PVirtualNode; overload; function FindInPositionCache(Position: Cardinal; var CurrentPos: Cardinal): PVirtualNode; overload; procedure FixupTotalCount(Node: PVirtualNode); procedure FixupTotalHeight(Node: PVirtualNode); function GetBottomNode: PVirtualNode; function GetCheckedCount: Integer; function GetCheckState(Node: PVirtualNode): TCheckState; function GetCheckType(Node: PVirtualNode): TCheckType; function GetChildCount(Node: PVirtualNode): Cardinal; function GetChildrenInitialized(Node: PVirtualNode): Boolean; function GetCutCopyCount: Integer; function GetDisabled(Node: PVirtualNode): Boolean; function GetDragManager: IVTDragManager; function GetExpanded(Node: PVirtualNode): Boolean; function GetFullyVisible(Node: PVirtualNode): Boolean; function GetHasChildren(Node: PVirtualNode): Boolean; function GetMultiline(Node: PVirtualNode): Boolean; function GetNodeHeight(Node: PVirtualNode): Cardinal; function GetNodeParent(Node: PVirtualNode): PVirtualNode; function GetOffsetXY: TPoint; function GetRootNodeCount: Cardinal; function GetSelected(Node: PVirtualNode): Boolean; function GetTopNode: PVirtualNode; function GetTotalCount: Cardinal; function GetVerticalAlignment(Node: PVirtualNode): Byte; function GetVisible(Node: PVirtualNode): Boolean; function GetVisiblePath(Node: PVirtualNode): Boolean; procedure HandleClickSelection(LastFocused, NewNode: PVirtualNode; Shift: TShiftState; DragPending: Boolean); function HandleDrawSelection(X, Y: Integer): Boolean; function HasVisibleNextSibling(Node: PVirtualNode): Boolean; function HasVisiblePreviousSibling(Node: PVirtualNode): Boolean; procedure ImageListChange(Sender: TObject); procedure InitializeFirstColumnValues(var PaintInfo: TVTPaintInfo); procedure InitRootNode(OldSize: Cardinal = 0); procedure InterruptValidation; function IsFirstVisibleChild(Parent, Node: PVirtualNode): Boolean; function IsLastVisibleChild(Parent, Node: PVirtualNode): Boolean; procedure LimitPaintingToArea(Canvas: TCanvas; ClipRect: TRect; VisibleRegion: HRGN = 0); //lcl procedure LoadPanningCursors; function MakeNewNode: PVirtualNode; {$ifdef PACKARRAYPASCAL} function PackArray(const TheArray: TNodeArray; Count: Integer): Integer; {$else} function PackArray(TheArray: TNodeArray; Count: Integer): Integer; {$endif} procedure PrepareBitmaps(NeedButtons, NeedLines: Boolean); procedure SetAlignment(const Value: TAlignment); procedure SetAnimationDuration(const Value: Cardinal); procedure SetBackground(const Value: TPicture); procedure SetBackgroundOffset(const Index, Value: Integer); procedure SetBottomNode(Node: PVirtualNode); procedure SetBottomSpace(const Value: Cardinal); procedure SetButtonFillMode(const Value: TVTButtonFillMode); procedure SetButtonStyle(const Value: TVTButtonStyle); procedure SetCheckImageKind(Value: TCheckImageKind); procedure SetCheckState(Node: PVirtualNode; Value: TCheckState); procedure SetCheckType(Node: PVirtualNode; Value: TCheckType); procedure SetChildCount(Node: PVirtualNode; NewChildCount: Cardinal); procedure SetClipboardFormats(const Value: TClipboardFormats); procedure SetColors(const Value: TVTColors); procedure SetCustomCheckImages(const Value: TBitmap); procedure SetDefaultNodeHeight(Value: Cardinal); procedure SetDisabled(Node: PVirtualNode; Value: Boolean); procedure SetExpanded(Node: PVirtualNode; Value: Boolean); procedure SetFocusedColumn(Value: TColumnIndex); procedure SetFocusedNode(Value: PVirtualNode); procedure SetFullyVisible(Node: PVirtualNode; Value: Boolean); procedure SetHasChildren(Node: PVirtualNode; Value: Boolean); procedure SetHeader(const Value: TVTHeader); procedure SetImages(const Value: TCustomImageList); procedure SetIndent(Value: Cardinal); procedure SetLineMode(const Value: TVTLineMode); procedure SetLineStyle(const Value: TVTLineStyle); procedure SetMargin(Value: Integer); procedure SetMultiline(Node: PVirtualNode; const Value: Boolean); procedure SetNodeAlignment(const Value: TVTNodeAlignment); procedure SetNodeDataSize(Value: Integer); procedure SetNodeHeight(Node: PVirtualNode; Value: Cardinal); procedure SetNodeParent(Node: PVirtualNode; const Value: PVirtualNode); procedure SetOffsetX(const Value: Integer); procedure SetOffsetXY(const Value: TPoint); procedure SetOffsetY(const Value: Integer); procedure SetOptions(const Value: TCustomVirtualTreeOptions); procedure SetRootNodeCount(Value: Cardinal); procedure SetScrollBarOptions(Value: TScrollBarOptions); procedure SetSearchOption(const Value: TVTIncrementalSearch); procedure SetSelected(Node: PVirtualNode; Value: Boolean); procedure SetSelectionCurveRadius(const Value: Cardinal); procedure SetStateImages(const Value: TCustomImageList); procedure SetTextMargin(Value: Integer); procedure SetTopNode(Node: PVirtualNode); procedure SetUpdateState(Updating: Boolean); procedure SetVerticalAlignment(Node: PVirtualNode; Value: Byte); procedure SetVisible(Node: PVirtualNode; Value: Boolean); procedure SetVisiblePath(Node: PVirtualNode; Value: Boolean); procedure StaticBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; const R: TRect); procedure TileBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; R: TRect); function ToggleCallback(Step, StepSize: Integer; Data: Pointer): Boolean; protected procedure CMColorChange(var Message: TLMessage); message CM_COLORCHANGED; procedure CMBiDiModeChanged(var Message: TLMessage); message CM_BIDIMODECHANGED; procedure CMDenySubclassing(var Message: TLMessage); message CM_DENYSUBCLASSING; //procedure CMDrag(var Message: TCMDrag); message CM_DRAG; procedure CMFontChanged(var Message: TLMessage); message CM_FONTCHANGED; procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW; procedure CMMouseLeave(var Message: TLMessage); message CM_MOUSELEAVE; procedure CMMouseWheel(var Message: TLMMouseEvent); message LM_MOUSEWHEEL; {$ifdef EnableNativeTVM} procedure TVMGetItem(var Message: TLMessage); message TVM_GETITEM; procedure TVMGetItemRect(var Message: TLMessage); message TVM_GETITEMRECT; procedure TVMGetNextItem(var Message: TLMessage); message TVM_GETNEXTITEM; {$endif} procedure WMCancelMode(var Message: TLMNoParams); message LM_CANCELMODE; procedure WMChangeState(var Message: TLMessage); message WM_CHANGESTATE; procedure WMChar(var Message: TLMChar); message LM_CHAR; procedure WMContextMenu(var Message: TLMContextMenu); message LM_CONTEXTMENU; procedure WMCopy(var Message: TLMNoParams); message LM_COPY; procedure WMCut(var Message: TLMNoParams); message LM_CUT; procedure WMEnable(var Message: TLMNoParams); message LM_ENABLE; procedure WMEraseBkgnd(var Message: TLMEraseBkgnd); message LM_ERASEBKGND; procedure WMGetDlgCode(var Message: TLMNoParams); message LM_GETDLGCODE; {$ifdef EnableAccessible} procedure WMGetObject(var Message: TLMessage);{ message WM_GETOBJECT;} {$endif} procedure WMHScroll(var Message: TLMHScroll); message LM_HSCROLL; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; procedure WMKeyUp(var Message: TLMKeyUp); message LM_KEYUP; procedure WMKillFocus(var Msg: TLMKillFocus); message LM_KILLFOCUS; procedure WMLButtonDblClk(var Message: TLMLButtonDblClk); message LM_LBUTTONDBLCLK; procedure WMLButtonDown(var Message: TLMLButtonDown); message LM_LBUTTONDOWN; procedure WMLButtonUp(var Message: TLMLButtonUp); message LM_LBUTTONUP; procedure WMMButtonDblClk(var Message: TLMMButtonDblClk); message LM_MBUTTONDBLCLK; procedure WMMButtonDown(var Message: TLMMButtonDown); message LM_MBUTTONDOWN; procedure WMMButtonUp(var Message: TLMMButtonUp); message LM_MBUTTONUP; {$ifdef EnableNCFunctions} procedure WMNCCalcSize(var Message: TWMNCCalcSize); message WM_NCCALCSIZE; procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; procedure WMNCPaint(var Message: TRealWMNCPaint); message WM_NCPAINT; {$endif} procedure WMPaint(var Message: TLMPaint); message LM_PAINT; procedure WMPaste(var Message: TLMNoParams); message LM_PASTE; {$ifdef EnablePrintFunctions} procedure WMPrint(var Message: TWMPrint); message WM_PRINT; procedure WMPrintClient(var Message: TWMPrintClient); message WM_PRINTCLIENT; {$endif} procedure WMRButtonDblClk(var Message: TLMRButtonDblClk); message LM_RBUTTONDBLCLK; procedure WMRButtonDown(var Message: TLMRButtonDown); message LM_RBUTTONDOWN; procedure WMRButtonUp(var Message: TLMRButtonUp); message LM_RBUTTONUP; procedure WMSetFocus(var Msg: TLMSetFocus); message LM_SETFOCUS; procedure WMSize(var Message: TLMSize); message LM_SIZE; procedure WMTimer(var Message: TLMTimer); message LM_TIMER; {$ifdef ThemeSupport} {$ifdef Windows} procedure WMThemeChanged(var Message: TLMessage); message WM_THEMECHANGED; {$endif} {$endif ThemeSupport} procedure WMVScroll(var Message: TLMVScroll); message LM_VSCROLL; procedure AddToSelection(Node: PVirtualNode); overload; virtual; procedure AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); overload; virtual; procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); virtual; procedure AdjustPanningCursor(X, Y: Integer); virtual; procedure AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); virtual; function AllocateInternalDataArea(Size: Cardinal): Cardinal; virtual; procedure Animate(Steps, Duration: Cardinal; Callback: TVTAnimationCallback; Data: Pointer); virtual; procedure BeginOperation; function CalculateSelectionRect(X, Y: Integer): Boolean; virtual; function CanAutoScroll: Boolean; virtual; function CanScroll(const ClientMousePos: TPoint): Boolean; virtual; function CanShowDragImage: Boolean; virtual; procedure Change(Node: PVirtualNode); virtual; procedure ChangeScale(M, D: Integer); override; //lcl procedure CheckImageListNeeded; function CheckParentCheckState(Node: PVirtualNode; NewCheckState: TCheckState): Boolean; virtual; procedure ClearTempCache; virtual; function ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; function ComputeRTLOffset(ExcludeScrollbar: Boolean = False): Integer; virtual; function CountLevelDifference(Node1, Node2: PVirtualNode): Integer; virtual; function CountVisibleChildren(Node: PVirtualNode): Cardinal; virtual; procedure CreateParams(var Params: TCreateParams); override; procedure CreateWnd; override; procedure DestroyHandle; override; procedure DetermineHiddenChildrenFlag(Node: PVirtualNode); virtual; procedure DetermineHiddenChildrenFlagAllNodes; virtual; procedure DetermineHitPositionLTR(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); virtual; procedure DetermineHitPositionRTL(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); virtual; function DetermineNextCheckState(CheckType: TCheckType; CheckState: TCheckState): TCheckState; virtual; function DetermineScrollDirections(X, Y: Integer): TScrollDirections; virtual; procedure DoAdvancedHeaderDraw(var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); virtual; procedure DoAfterCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect); virtual; procedure DoAfterItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); virtual; procedure DoAfterItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); virtual; procedure DoAfterPaint(Canvas: TCanvas); virtual; procedure DoAutoScroll(X, Y: Integer); virtual; procedure DoAutoSize; override; function DoBeforeDrag(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; procedure DoBeforeCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); virtual; procedure DoBeforeItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction); virtual; function DoBeforeItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect): Boolean; virtual; procedure DoBeforePaint(Canvas: TCanvas); virtual; function DoCancelEdit: Boolean; virtual; procedure DoCanEdit(Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); virtual; procedure DoChange(Node: PVirtualNode); virtual; procedure DoCheckClick(Node: PVirtualNode; NewCheckState: TCheckState); virtual; procedure DoChecked(Node: PVirtualNode); virtual; function DoChecking(Node: PVirtualNode; var NewCheckState: TCheckState): Boolean; virtual; procedure DoCollapsed(Node: PVirtualNode); virtual; function DoCollapsing(Node: PVirtualNode): Boolean; virtual; procedure DoColumnClick(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoColumnDblClick(Column: TColumnIndex; Shift: TShiftState); virtual; procedure DoColumnResize(Column: TColumnIndex); virtual; function DoCompare(Node1, Node2: PVirtualNode; Column: TColumnIndex): Integer; virtual; function DoCreateDataObject: IDataObject; virtual; function DoCreateDragManager: IVTDragManager; virtual; function DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; virtual; procedure DoDragging(P: TPoint); virtual; procedure DoDragExpand; virtual; function DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean): LRESULT; override; function DoDragOver(Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord): Boolean; virtual; procedure DoDragDrop(Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); virtual; procedure DoEdit; virtual; procedure DoEndDrag(Target: TObject; X, Y: Integer); override; function DoEndEdit: Boolean; virtual; procedure DoExpanded(Node: PVirtualNode); virtual; function DoExpanding(Node: PVirtualNode): Boolean; virtual; procedure DoFocusChange(Node: PVirtualNode; Column: TColumnIndex); virtual; function DoFocusChanging(OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex): Boolean; virtual; procedure DoFocusNode(Node: PVirtualNode; Ask: Boolean); virtual; procedure DoFreeNode(Node: PVirtualNode); virtual; function DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; virtual; procedure DoGetCursor(var Cursor: TCursor); virtual; procedure DoGetHeaderCursor(var Cursor: HCURSOR); virtual; function DoGetImageIndex(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer): TCustomImageList; virtual; procedure DoGetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String); virtual; procedure DoGetLineStyle(var Bits: Pointer); virtual; function DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; virtual; function DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; virtual; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; virtual; function DoGetPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint): TPopupMenu; virtual; procedure DoGetUserClipboardFormats(var Formats: TFormatEtcArray); virtual; procedure DoHeaderClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderDblClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderImageClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderCheckBoxClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderDragged(Column: TColumnIndex; OldPosition: TColumnPosition); virtual; procedure DoHeaderDraggedOut(Column: TColumnIndex; const DropPosition: TPoint); virtual; function DoHeaderDragging(Column: TColumnIndex): Boolean; virtual; procedure DoHeaderDraw(Canvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode); virtual; procedure DoHeaderDrawQueryElements(var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); virtual; procedure DoHeaderMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderMouseMove(Shift: TShiftState; X, Y: Integer); virtual; procedure DoHeaderMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); virtual; procedure DoHotChange(Old, New: PVirtualNode); virtual; function DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; virtual; procedure DoInitChildren(Node: PVirtualNode; var ChildCount: Cardinal); virtual; procedure DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates); virtual; function DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; virtual; procedure DoLoadUserData(Node: PVirtualNode; Stream: TStream); virtual; procedure DoMeasureItem(TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); virtual; procedure DoNodeCopied(Node: PVirtualNode); virtual; function DoNodeCopying(Node, NewParent: PVirtualNode): Boolean; virtual; function DoNodeHeightDblClickResize(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint): Boolean; virtual; function DoNodeHeightTracking(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; virtual; procedure DoNodeMoved(Node: PVirtualNode); virtual; function DoNodeMoving(Node, NewParent: PVirtualNode): Boolean; virtual; function DoPaintBackground(Canvas: TCanvas; const R: TRect): Boolean; virtual; procedure DoPaintDropMark(Canvas: TCanvas; Node: PVirtualNode; const R: TRect); virtual; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); virtual; procedure DoPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint); virtual; function DoRenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HRESULT; virtual; procedure DoReset(Node: PVirtualNode); virtual; procedure DoSaveUserData(Node: PVirtualNode; Stream: TStream); virtual; procedure DoScroll(DeltaX, DeltaY: Integer); virtual; function DoSetOffsetXY(Value: TPoint; Options: TScrollUpdateOptions; ClipRect: PRect = nil): Boolean; virtual; procedure DoShowScrollbar(Bar: Integer; Show: Boolean); virtual; procedure DoStartDrag(var DragObject: TDragObject); override; procedure DoStateChange(Enter: TVirtualTreeStates; Leave: TVirtualTreeStates = []); virtual; procedure DoStructureChange(Node: PVirtualNode; Reason: TChangeReason); virtual; procedure DoTimerScroll; virtual; procedure DoUpdating(State: TVTUpdateState); virtual; function DoValidateCache: Boolean; virtual; procedure DragAndDrop(AllowedEffects: LongWord; DataObject: IDataObject; DragEffect: LongWord); virtual; procedure DragCanceled; override; function DragDrop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; reintroduce; virtual; function DragEnter(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; virtual; procedure DragFinished; virtual; procedure DragLeave; virtual; function DragOver(Source: TObject; KeyState: LongWord; DragState: TDragState; Pt: TPoint; var Effect: LongWord): HResult; reintroduce; virtual; procedure DrawDottedHLine(const PaintInfo: TVTPaintInfo; Left, Right, Top: Integer); virtual; procedure DrawDottedVLine(const PaintInfo: TVTPaintInfo; Top, Bottom, Left: Integer); virtual; procedure EndOperation; function FindNodeInSelection(P: PVirtualNode; out Index: Integer; LowBound, HighBound: Integer): Boolean; virtual; procedure FinishChunkHeader(Stream: TStream; StartPos, EndPos: Integer); virtual; procedure FontChanged(AFont: TObject); virtual; function GetBorderDimensions: TSize; virtual; function GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer; virtual; function GetClientRect: TRect; override; function GetColumnClass: TVirtualTreeColumnClass; virtual; function GetHeaderClass: TVTHeaderClass; virtual; function GetHintWindowClass: THintWindowClass; virtual; procedure GetImageIndex(var Info: TVTPaintInfo; Kind: TVTImageKind; InfoIndex: TVTImageInfoIndex; DefaultImages: TCustomImageList); virtual; function GetMaxRightExtend: Cardinal; virtual; procedure GetNativeClipboardFormats(var Formats: TFormatEtcArray); virtual; function GetOperationCanceled: Boolean; function GetOptionsClass: TTreeOptionsClass; virtual; function GetTreeFromDataObject(const DataObject: IDataObject): TBaseVirtualTree; virtual; procedure HandleHotTrack(X, Y: Integer); virtual; procedure HandleIncrementalSearch(CharCode: Word); virtual; procedure HandleMouseDblClick(var Message: TLMMouse; const HitInfo: THitInfo); virtual; procedure HandleMouseDown(var Message: TLMMouse; var HitInfo: THitInfo); virtual; procedure HandleMouseUp(Keys: PtrUInt; const HitInfo: THitInfo); virtual; function HasImage(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): Boolean; virtual; function HasPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Pos: TPoint): Boolean; virtual; procedure InitChildren(Node: PVirtualNode); virtual; procedure InitNode(Node: PVirtualNode); virtual; procedure InternalAddFromStream(Stream: TStream; Version: Integer; Node: PVirtualNode); virtual; function InternalAddToSelection(Node: PVirtualNode; ForceInsert: Boolean): Boolean; overload; function InternalAddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean): Boolean; overload; procedure InternalCacheNode(Node: PVirtualNode); virtual; procedure InternalClearSelection; virtual; procedure InternalConnectNode(Node, Destination: PVirtualNode; Target: TBaseVirtualTree; Mode: TVTNodeAttachMode); virtual; function InternalData(Node: PVirtualNode): Pointer; procedure InternalDisconnectNode(Node: PVirtualNode; KeepFocus: Boolean; Reindex: Boolean = True); virtual; function InternalGetNodeAt(X, Y: Integer): PVirtualNode; overload; function InternalGetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; overload; procedure InternalRemoveFromSelection(Node: PVirtualNode); virtual; procedure InvalidateCache; procedure Loaded; override; procedure MainColumnChanged; virtual; procedure MarkCutCopyNodes; virtual; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; {$ifdef EnableNCFunctions} procedure OriginalWMNCPaint(DC: HDC); virtual; {$endif} procedure Paint; override; procedure PaintCheckImage(const PaintInfo: TVTPaintInfo); virtual; procedure PaintImage(var PaintInfo: TVTPaintInfo; ImageInfoIndex: TVTImageInfoIndex; DoOverlay: Boolean); virtual; procedure PaintNodeButton(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const R: TRect; ButtonX, ButtonY: Integer; BidiMode: TBiDiMode); virtual; procedure PaintTreeLines(const PaintInfo: TVTPaintInfo; VAlignment, IndentSize: Integer; LineImage: TLineImage); virtual; procedure PaintSelectionRectangle(Target: TCanvas; WindowOrgX: Integer; const SelectionRect: TRect; TargetRect: TRect); virtual; procedure PrepareCell(var PaintInfo: TVTPaintInfo; WindowOrgX, MaxWidth: Integer); virtual; function ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; virtual; procedure ReadNode(Stream: TStream; Version: Integer; Node: PVirtualNode); virtual; procedure RedirectFontChangeEvent(Canvas: TCanvas); virtual; procedure RemoveFromSelection(Node: PVirtualNode); virtual; function RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; virtual; procedure ResetRangeAnchor; virtual; procedure RestoreFontChangeEvent(Canvas: TCanvas); virtual; procedure SelectNodes(StartNode, EndNode: PVirtualNode; AddOnly: Boolean); virtual; procedure SetFocusedNodeAndColumn(Node: PVirtualNode; Column: TColumnIndex); virtual; procedure SkipNode(Stream: TStream); virtual; procedure StartWheelPanning(const Position: TPoint); virtual; procedure StopWheelPanning; virtual; procedure StructureChange(Node: PVirtualNode; Reason: TChangeReason); virtual; function SuggestDropEffect(Source: TObject; Shift: TShiftState; const Pt: TPoint; AllowedEffects: LongWord): LongWord; virtual; procedure ToggleSelection(StartNode, EndNode: PVirtualNode); virtual; procedure UnselectNodes(StartNode, EndNode: PVirtualNode); virtual; //lcl procedure UpdateCheckImageList; procedure UpdateColumnCheckState(Col: TVirtualTreeColumn); procedure UpdateDesigner; virtual; procedure UpdateEditBounds; virtual; procedure UpdateHeaderRect; virtual; procedure UpdateWindowAndDragImage(const Tree: TBaseVirtualTree; TreeRect: TRect; UpdateNCArea, ReshowDragImage: Boolean); virtual; procedure ValidateCache; virtual; procedure ValidateNodeDataSize(var Size: Integer); virtual; procedure WndProc(var Message: TLMessage); override; procedure WriteChunks(Stream: TStream; Node: PVirtualNode); virtual; procedure WriteNode(Stream: TStream; Node: PVirtualNode); virtual; property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify; property AnimationDuration: Cardinal read FAnimationDuration write SetAnimationDuration default 200; property AutoExpandDelay: Cardinal read FAutoExpandDelay write FAutoExpandDelay default 1000; property AutoScrollDelay: Cardinal read FAutoScrollDelay write FAutoScrollDelay default 1000; property AutoScrollInterval: TAutoScrollInterval read FAutoScrollInterval write FAutoScrollInterval default 1; property Background: TPicture read FBackground write SetBackground; property BackgroundOffsetX: Integer index 0 read FBackgroundOffsetX write SetBackgroundOffset default 0; property BackgroundOffsetY: Integer index 1 read FBackgroundOffsetY write SetBackgroundOffset default 0; //property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle; property BottomSpace: Cardinal read FBottomSpace write SetBottomSpace default 0; property ButtonFillMode: TVTButtonFillMode read FButtonFillMode write SetButtonFillMode default fmTreeColor; property ButtonStyle: TVTButtonStyle read FButtonStyle write SetButtonStyle default bsRectangle; property ChangeDelay: Cardinal read FChangeDelay write FChangeDelay default 0; property CheckImageKind: TCheckImageKind read FCheckImageKind write SetCheckImageKind default ckSystemDefault; property ClipboardFormats: TClipboardFormats read FClipboardFormats write SetClipboardFormats; property Colors: TVTColors read FColors write SetColors; property CustomCheckImages: TBitmap read FCustomCheckImages write SetCustomCheckImages; property DefaultNodeHeight: Cardinal read FDefaultNodeHeight write SetDefaultNodeHeight default 18; property DefaultPasteMode: TVTNodeAttachMode read FDefaultPasteMode write FDefaultPasteMode default amAddChildLast; property DragHeight: Integer read FDragHeight write FDragHeight default 350; property DragImageKind: TVTDragImageKind read FDragImageKind write FDragImageKind default diComplete; property DragOperations: TDragOperations read FDragOperations write FDragOperations default [doCopy, doMove]; property DragSelection: TNodeArray read FDragSelection; property DragType: TVTDragType read FDragType write FDragType default dtOLE; property DragWidth: Integer read FDragWidth write FDragWidth default 200; property DrawSelectionMode: TVTDrawSelectionMode read FDrawSelectionMode write FDrawSelectionMode default smDottedRectangle; property EditColumn: TColumnIndex read FEditColumn write FEditColumn; property EditDelay: Cardinal read FEditDelay write FEditDelay default 1000; property Header: TVTHeader read FHeader write SetHeader; property HeaderRect: TRect read FHeaderRect; property HintMode: TVTHintMode read FHintMode write FHintMode default hmDefault; property HotCursor: TCursor read FHotCursor write FHotCursor default crDefault; property Images: TCustomImageList read FImages write SetImages; property IncrementalSearch: TVTIncrementalSearch read FIncrementalSearch write SetSearchOption default isNone; property IncrementalSearchDirection: TVTSearchDirection read FSearchDirection write FSearchDirection default sdForward; property IncrementalSearchStart: TVTSearchStart read FSearchStart write FSearchStart default ssFocusedNode; property IncrementalSearchTimeout: Cardinal read FSearchTimeout write FSearchTimeout default 1000; property Indent: Cardinal read FIndent write SetIndent default 18; property LastClickPos: TPoint read FLastClickPos write FLastClickPos; property LastDropMode: TDropMode read FLastDropMode write FlastDropMode; property LineMode: TVTLineMode read FLineMode write SetLineMode default lmNormal; property LineStyle: TVTLineStyle read FLineStyle write SetLineStyle default lsDotted; property Margin: Integer read FMargin write SetMargin default 4; property NodeAlignment: TVTNodeAlignment read FNodeAlignment write SetNodeAlignment default naProportional; property NodeDataSize: Integer read FNodeDataSize write SetNodeDataSize default -1; property OperationCanceled: Boolean read GetOperationCanceled; property RootNodeCount: Cardinal read GetRootNodeCount write SetRootNodeCount default 0; property ScrollBarOptions: TScrollBarOptions read FScrollBarOptions write SetScrollBarOptions; property SelectionBlendFactor: Byte read FSelectionBlendFactor write FSelectionBlendFactor default 128; property SelectionCurveRadius: Cardinal read FSelectionCurveRadius write SetSelectionCurveRadius default 0; property StateImages: TCustomImageList read FStateImages write SetStateImages; property TextMargin: Integer read FTextMargin write SetTextMargin default 4; property TotalInternalDataSize: Cardinal read FTotalInternalDataSize; property TreeOptions: TCustomVirtualTreeOptions read FOptions write SetOptions; property WantTabs: Boolean read FWantTabs write FWantTabs default False; property OnAdvancedHeaderDraw: TVTAdvancedHeaderPaintEvent read FOnAdvancedHeaderDraw write FOnAdvancedHeaderDraw; property OnAfterAutoFitColumn: TVTAfterAutoFitColumnEvent read FOnAfterAutoFitColumn write FOnAfterAutoFitColumn; property OnAfterAutoFitColumns: TVTAfterAutoFitColumnsEvent read FOnAfterAutoFitColumns write FOnAfterAutoFitColumns; property OnAfterCellPaint: TVTAfterCellPaintEvent read FOnAfterCellPaint write FOnAfterCellPaint; property OnAfterColumnExport : TVTColumnExportEvent read FOnAfterColumnExport write FOnAfterColumnExport; property OnAfterColumnWidthTracking: TVTAfterColumnWidthTrackingEvent read FOnAfterColumnWidthTracking write FOnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth: TVTAfterGetMaxColumnWidthEvent read FOnAfterGetMaxColumnWidth write FOnAfterGetMaxColumnWidth; property OnAfterHeaderExport: TVTTreeExportEvent read FOnBeforeHeaderExport write FOnBeforeHeaderExport; property OnAfterHeaderHeightTracking: TVTAfterHeaderHeightTrackingEvent read FOnAfterHeaderHeightTracking write FOnAfterHeaderHeightTracking; property OnAfterItemErase: TVTAfterItemEraseEvent read FOnAfterItemErase write FOnAfterItemErase; property OnAfterItemPaint: TVTAfterItemPaintEvent read FOnAfterItemPaint write FOnAfterItemPaint; property OnAfterNodeExport: TVTNodeExportEvent read FOnAfterNodeExport write FOnAfterNodeExport; property OnAfterPaint: TVTPaintEvent read FOnAfterPaint write FOnAfterPaint; property OnAfterTreeExport: TVTTreeExportEvent read FOnAfterTreeExport write FOnAfterTreeExport; property OnBeforeAutoFitColumn: TVTBeforeAutoFitColumnEvent read FOnBeforeAutoFitColumn write FOnBeforeAutoFitColumn; property OnBeforeAutoFitColumns: TVTBeforeAutoFitColumnsEvent read FOnBeforeAutoFitColumns write FOnBeforeAutoFitColumns; property OnBeforeCellPaint: TVTBeforeCellPaintEvent read FOnBeforeCellPaint write FOnBeforeCellPaint; property OnBeforeColumnExport: TVTColumnExportEvent read FOnBeforeColumnExport write FOnBeforeColumnExport; property OnBeforeColumnWidthTracking: TVTBeforeColumnWidthTrackingEvent read FOnBeforeColumnWidthTracking write FOnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth: TVTBeforeGetMaxColumnWidthEvent read FOnBeforeGetMaxColumnWidth write FOnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport: TVTTreeExportEvent read FOnBeforeHeaderExport write FOnBeforeHeaderExport; property OnBeforeHeaderHeightTracking: TVTBeforeHeaderHeightTrackingEvent read FOnBeforeHeaderHeightTracking write FOnBeforeHeaderHeightTracking; property OnBeforeItemErase: TVTBeforeItemEraseEvent read FOnBeforeItemErase write FOnBeforeItemErase; property OnBeforeItemPaint: TVTBeforeItemPaintEvent read FOnBeforeItemPaint write FOnBeforeItemPaint; property OnBeforeNodeExport: TVTNodeExportEvent read FOnBeforeNodeExport write FOnBeforeNodeExport; property OnBeforePaint: TVTPaintEvent read FOnBeforePaint write FOnBeforePaint; property OnBeforeTreeExport: TVTTreeExportEvent read FOnBeforeTreeExport write FOnBeforeTreeExport; property OnCanSplitterResizeColumn: TVTCanSplitterResizeColumnEvent read FOnCanSplitterResizeColumn write FOnCanSplitterResizeColumn; property OnChange: TVTChangeEvent read FOnChange write FOnChange; property OnChecked: TVTChangeEvent read FOnChecked write FOnChecked; property OnChecking: TVTCheckChangingEvent read FOnChecking write FOnChecking; property OnCollapsed: TVTChangeEvent read FOnCollapsed write FOnCollapsed; property OnCollapsing: TVTChangingEvent read FOnCollapsing write FOnCollapsing; property OnColumnClick: TVTColumnClickEvent read FOnColumnClick write FOnColumnClick; property OnColumnDblClick: TVTColumnDblClickEvent read FOnColumnDblClick write FOnColumnDblClick; property OnColumnExport : TVTColumnExportEvent read FOnColumnExport write FOnColumnExport; property OnColumnResize: TVTHeaderNotifyEvent read FOnColumnResize write FOnColumnResize; property OnColumnWidthDblClickResize: TVTColumnWidthDblClickResizeEvent read FOnColumnWidthDblClickResize write FOnColumnWidthDblClickResize; property OnColumnWidthTracking: TVTColumnWidthTrackingEvent read FOnColumnWidthTracking write FOnColumnWidthTracking; property OnCompareNodes: TVTCompareEvent read FOnCompareNodes write FOnCompareNodes; property OnCreateDataObject: TVTCreateDataObjectEvent read FOnCreateDataObject write FOnCreateDataObject; property OnCreateDragManager: TVTCreateDragManagerEvent read FOnCreateDragManager write FOnCreateDragManager; property OnCreateEditor: TVTCreateEditorEvent read FOnCreateEditor write FOnCreateEditor; property OnDragAllowed: TVTDragAllowedEvent read FOnDragAllowed write FOnDragAllowed; property OnDragOver: TVTDragOverEvent read FOnDragOver write FOnDragOver; property OnDragDrop: TVTDragDropEvent read FOnDragDrop write FOnDragDrop; property OnEditCancelled: TVTEditCancelEvent read FOnEditCancelled write FOnEditCancelled; property OnEditing: TVTEditChangingEvent read FOnEditing write FOnEditing; property OnEdited: TVTEditChangeEvent read FOnEdited write FOnEdited; property OnExpanded: TVTChangeEvent read FOnExpanded write FOnExpanded; property OnExpanding: TVTChangingEvent read FOnExpanding write FOnExpanding; property OnFocusChanged: TVTFocusChangeEvent read FOnFocusChanged write FOnFocusChanged; property OnFocusChanging: TVTFocusChangingEvent read FOnFocusChanging write FOnFocusChanging; property OnFreeNode: TVTFreeNodeEvent read FOnFreeNode write FOnFreeNode; property OnGetCellIsEmpty: TVTGetCellIsEmptyEvent read FOnGetCellIsEmpty write FOnGetCellIsEmpty; property OnGetCursor: TVTGetCursorEvent read FOnGetCursor write FOnGetCursor; property OnGetHeaderCursor: TVTGetHeaderCursorEvent read FOnGetHeaderCursor write FOnGetHeaderCursor; property OnGetHelpContext: TVTHelpContextEvent read FOnGetHelpContext write FOnGetHelpContext; property OnGetImageIndex: TVTGetImageEvent read FOnGetImage write FOnGetImage; property OnGetImageIndexEx: TVTGetImageExEvent read FOnGetImageEx write FOnGetImageEx; property OnGetImageText: TVTGetImageTextEvent read FOnGetImageText write FOnGetImageText; property OnGetLineStyle: TVTGetLineStyleEvent read FOnGetLineStyle write FOnGetLineStyle; property OnGetNodeDataSize: TVTGetNodeDataSizeEvent read FOnGetNodeDataSize write FOnGetNodeDataSize; property OnGetPopupMenu: TVTPopupEvent read FOnGetPopupMenu write FOnGetPopupMenu; property OnGetUserClipboardFormats: TVTGetUserClipboardFormatsEvent read FOnGetUserClipboardFormats write FOnGetUserClipboardFormats; property OnHeaderCheckBoxClick: TVTHeaderClickEvent read FOnHeaderCheckBoxClick write FOnHeaderCheckBoxClick; property OnHeaderClick: TVTHeaderClickEvent read FOnHeaderClick write FOnHeaderClick; property OnHeaderDblClick: TVTHeaderClickEvent read FOnHeaderDblClick write FOnHeaderDblClick; property OnHeaderDragged: TVTHeaderDraggedEvent read FOnHeaderDragged write FOnHeaderDragged; property OnHeaderDraggedOut: TVTHeaderDraggedOutEvent read FOnHeaderDraggedOut write FOnHeaderDraggedOut; property OnHeaderDragging: TVTHeaderDraggingEvent read FOnHeaderDragging write FOnHeaderDragging; property OnHeaderDraw: TVTHeaderPaintEvent read FOnHeaderDraw write FOnHeaderDraw; property OnHeaderDrawQueryElements: TVTHeaderPaintQueryElementsEvent read FOnHeaderDrawQueryElements write FOnHeaderDrawQueryElements; property OnHeaderHeightTracking: TVTHeaderHeightTrackingEvent read FOnHeaderHeightTracking write FOnHeaderHeightTracking; property OnHeaderHeightDblClickResize: TVTHeaderHeightDblClickResizeEvent read FOnHeaderHeightDblClickResize write FOnHeaderHeightDblClickResize; property OnHeaderImageClick: TVTHeaderClickEvent read FOnHeaderImageClick write FOnHeaderImageClick; property OnHeaderMouseDown: TVTHeaderMouseEvent read FOnHeaderMouseDown write FOnHeaderMouseDown; property OnHeaderMouseMove: TVTHeaderMouseMoveEvent read FOnHeaderMouseMove write FOnHeaderMouseMove; property OnHeaderMouseUp: TVTHeaderMouseEvent read FOnHeaderMouseUp write FOnHeaderMouseUp; property OnHotChange: TVTHotNodeChangeEvent read FOnHotChange write FOnHotChange; property OnIncrementalSearch: TVTIncrementalSearchEvent read FOnIncrementalSearch write FOnIncrementalSearch; property OnInitChildren: TVTInitChildrenEvent read FOnInitChildren write FOnInitChildren; property OnInitNode: TVTInitNodeEvent read FOnInitNode write FOnInitNode; property OnKeyAction: TVTKeyActionEvent read FOnKeyAction write FOnKeyAction; property OnLoadNode: TVTSaveNodeEvent read FOnLoadNode write FOnLoadNode; property OnMeasureItem: TVTMeasureItemEvent read FOnMeasureItem write FOnMeasureItem; property OnNodeCopied: TVTNodeCopiedEvent read FOnNodeCopied write FOnNodeCopied; property OnNodeCopying: TVTNodeCopyingEvent read FOnNodeCopying write FOnNodeCopying; property OnNodeExport: TVTNodeExportEvent read FOnNodeExport write FOnNodeExport; property OnNodeHeightTracking: TVTNodeHeightTrackingEvent read FOnNodeHeightTracking write FOnNodeHeightTracking; property OnNodeHeightDblClickResize: TVTNodeHeightDblClickResizeEvent read FOnNodeHeightDblClickResize write FOnNodeHeightDblClickResize; property OnNodeMoved: TVTNodeMovedEvent read FOnNodeMoved write FOnNodeMoved; property OnNodeMoving: TVTNodeMovingEvent read FOnNodeMoving write FOnNodeMoving; property OnPaintBackground: TVTBackgroundPaintEvent read FOnPaintBackground write FOnPaintBackground; property OnRenderOLEData: TVTRenderOLEDataEvent read FOnRenderOLEData write FOnRenderOLEData; property OnResetNode: TVTChangeEvent read FOnResetNode write FOnResetNode; property OnSaveNode: TVTSaveNodeEvent read FOnSaveNode write FOnSaveNode; property OnScroll: TVTScrollEvent read FOnScroll write FOnScroll; property OnShowScrollbar: TVTScrollbarShowEvent read FOnShowScrollbar write FOnShowScrollbar; property OnStateChange: TVTStateChangeEvent read FOnStateChange write FOnStateChange; property OnStructureChange: TVTStructureChangeEvent read FOnStructureChange write FOnStructureChange; property OnUpdating: TVTUpdatingEvent read FOnUpdating write FOnUpdating; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; function AbsoluteIndex(Node: PVirtualNode): Cardinal; function AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode; virtual; procedure AddFromStream(Stream: TStream; TargetNode: PVirtualNode); procedure AfterConstruction; override; procedure Assign(Source: TPersistent); override; procedure BeginDrag(Immediate: Boolean; Threshold: Integer = -1); procedure BeginSynch; procedure BeginUpdate; virtual; procedure CancelCutOrCopy; function CancelEditNode: Boolean; procedure CancelOperation; function CanEdit(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; procedure Clear; virtual; procedure ClearChecked; procedure ClearSelection; function CopyTo(Source: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; overload; function CopyTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; overload; procedure CopyToClipBoard; virtual; procedure CutToClipBoard; virtual; procedure DefaultHandler(var AMessage); override; procedure DeleteChildren(Node: PVirtualNode; ResetHasChildren: Boolean = False); procedure DeleteNode(Node: PVirtualNode; Reindex: Boolean = True); procedure DeleteSelectedNodes; virtual; function Dragging: Boolean; function EditNode(Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; function EndEditNode: Boolean; procedure EndSynch; procedure EndUpdate; virtual; function ExecuteAction(Action: TBasicAction): Boolean; override; procedure FinishCutOrCopy; procedure FlushClipboard; procedure FullCollapse(Node: PVirtualNode = nil); virtual; procedure FullExpand(Node: PVirtualNode = nil); virtual; {$ifndef fpc} function GetControlsAlignment: TAlignment; override; {$endif} function GetDisplayRect(Node: PVirtualNode; Column: TColumnIndex; TextOnly: Boolean; Unclipped: Boolean = False; ApplyCellContentMargin: Boolean = False): TRect; function GetFirst(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstChecked(State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstChild(Node: PVirtualNode): PVirtualNode; function GetFirstCutCopy(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstInitialized(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstLeaf: PVirtualNode; function GetFirstLevel(NodeLevel: Cardinal): PVirtualNode; function GetFirstNoInit(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstSelected(ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetFirstVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetFirstVisibleChild(Node: PVirtualNode): PVirtualNode; function GetFirstVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; function GetFirstVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; procedure GetHitTestInfoAt(X, Y: Integer; Relative: Boolean; var HitInfo: THitInfo); virtual; function GetLast(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastInitialized(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetLastChild(Node: PVirtualNode): PVirtualNode; function GetLastChildNoInit(Node: PVirtualNode): PVirtualNode; function GetLastVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetLastVisibleChild(Node: PVirtualNode): PVirtualNode; function GetLastVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; function GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer; function GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextLeaf(Node: PVirtualNode): PVirtualNode; function GetNextLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; function GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSibling(Node: PVirtualNode): PVirtualNode; function GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; function GetNextVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNodeAt(X, Y: Integer): PVirtualNode; overload; function GetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; overload; function GetNodeData(Node: PVirtualNode): Pointer; function GetNodeLevel(Node: PVirtualNode): Cardinal; function GetPrevious(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousLeaf(Node: PVirtualNode): PVirtualNode; function GetPreviousLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; function GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSibling(Node: PVirtualNode): PVirtualNode; function GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; function GetPreviousVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetSortedCutCopySet(Resolve: Boolean): TNodeArray; function GetSortedSelection(Resolve: Boolean): TNodeArray; procedure GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); virtual; function GetTreeRect: TRect; function GetVisibleParent(Node: PVirtualNode): PVirtualNode; function HasAsParent(Node, PotentialParent: PVirtualNode): Boolean; function InsertNode(Node: PVirtualNode; Mode: TVTNodeAttachMode; UserData: Pointer = nil): PVirtualNode; procedure InvalidateChildren(Node: PVirtualNode; Recursive: Boolean); procedure InvalidateColumn(Column: TColumnIndex); function InvalidateNode(Node: PVirtualNode): TRect; virtual; procedure InvalidateToBottom(Node: PVirtualNode); procedure InvertSelection(VisibleOnly: Boolean); function IsEditing: Boolean; function IsMouseSelecting: Boolean; function IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer; Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode; procedure LoadFromFile(const FileName: TFileName); virtual; procedure LoadFromStream(Stream: TStream); virtual; procedure MeasureItemHeight(const Canvas: TCanvas; Node: PVirtualNode); procedure MoveTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload; procedure MoveTo(Node: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); overload; procedure PaintTree(TargetCanvas: TCanvas; const Window: TRect; Target: TPoint; PaintOptions: TVTInternalPaintOptions; PixelFormat: TPixelFormat = pfDevice); function PasteFromClipboard: Boolean; virtual; procedure PrepareDragImage(HotSpot: TPoint; const DataObject: IDataObject); {$ifdef EnablePrint} procedure Print(Printer: TPrinter; PrintHeader: Boolean); {$endif} function ProcessDrop(DataObject: IDataObject; TargetNode: PVirtualNode; var Effect: LongWord; Mode: TVTNodeAttachMode): Boolean; function ProcessOLEData(Source: TBaseVirtualTree; DataObject: IDataObject; TargetNode: PVirtualNode; Mode: TVTNodeAttachMode; Optimized: Boolean): Boolean; procedure RepaintNode(Node: PVirtualNode); procedure ReinitChildren(Node: PVirtualNode; Recursive: Boolean); virtual; procedure ReinitNode(Node: PVirtualNode; Recursive: Boolean); virtual; procedure ResetNode(Node: PVirtualNode); virtual; procedure SaveToFile(const FileName: TFileName); procedure SaveToStream(Stream: TStream; Node: PVirtualNode = nil); virtual; function ScrollIntoView(Node: PVirtualNode; Center: Boolean; Horizontally: Boolean = False): Boolean; overload; function ScrollIntoView(Column: TColumnIndex; Center: Boolean): Boolean; overload; procedure SelectAll(VisibleOnly: Boolean); procedure Sort(Node: PVirtualNode; Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); virtual; procedure SortTree(Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); virtual; procedure ToggleNode(Node: PVirtualNode); function UpdateAction(Action: TBasicAction): Boolean; override; procedure UpdateHorizontalScrollBar(DoRepaint: Boolean); procedure UpdateScrollBars(DoRepaint: Boolean); virtual; procedure UpdateVerticalScrollBar(DoRepaint: Boolean); //lcl: reenable in case TControl implementation change to match Delphi // function UseRightToLeftReading: Boolean; procedure ValidateChildren(Node: PVirtualNode; Recursive: Boolean); procedure ValidateNode(Node: PVirtualNode; Recursive: Boolean); {$ifdef EnableAccessible} property Accessible: IAccessible read FAccessible write FAccessible; property AccessibleItem: IAccessible read FAccessibleItem write FAccessibleItem; property AccessibleName: string read FAccessibleName write FAccessibleName; {$endif} property BottomNode: PVirtualNode read GetBottomNode write SetBottomNode; property CheckedCount: Integer read GetCheckedCount; property CheckImages: TBitmap read FCheckImages; property CheckState[Node: PVirtualNode]: TCheckState read GetCheckState write SetCheckState; property CheckType[Node: PVirtualNode]: TCheckType read GetCheckType write SetCheckType; property ChildCount[Node: PVirtualNode]: Cardinal read GetChildCount write SetChildCount; property ChildrenInitialized[Node: PVirtualNode]: Boolean read GetChildrenInitialized; property CutCopyCount: Integer read GetCutCopyCount; property DragImage: TVTDragImage read FDragImage; property VTVDragManager: IVTDragManager read GetDragManager; property DropTargetNode: PVirtualNode read FDropTargetNode; property EditLink: IVTEditLink read FEditLink; property Expanded[Node: PVirtualNode]: Boolean read GetExpanded write SetExpanded; property FocusedColumn: TColumnIndex read FFocusedColumn write SetFocusedColumn default InvalidColumn; property FocusedNode: PVirtualNode read FFocusedNode write SetFocusedNode; property Font; property FullyVisible[Node: PVirtualNode]: Boolean read GetFullyVisible write SetFullyVisible; property HasChildren[Node: PVirtualNode]: Boolean read GetHasChildren write SetHasChildren; property HotNode: PVirtualNode read FCurrentHotNode; property IsDisabled[Node: PVirtualNode]: Boolean read GetDisabled write SetDisabled; property IsVisible[Node: PVirtualNode]: Boolean read GetVisible write SetVisible; property MultiLine[Node: PVirtualNode]: Boolean read GetMultiline write SetMultiline; property NodeHeight[Node: PVirtualNode]: Cardinal read GetNodeHeight write SetNodeHeight; property NodeParent[Node: PVirtualNode]: PVirtualNode read GetNodeParent write SetNodeParent; property OffsetX: Integer read FOffsetX write SetOffsetX; property OffsetXY: TPoint read GetOffsetXY write SetOffsetXY; property OffsetY: Integer read FOffsetY write SetOffsetY; property RootNode: PVirtualNode read FRoot; property SearchBuffer: String read FSearchBuffer; property Selected[Node: PVirtualNode]: Boolean read GetSelected write SetSelected; property SelectionLocked: Boolean read FSelectionLocked write FSelectionLocked; property TotalCount: Cardinal read GetTotalCount; property TreeStates: TVirtualTreeStates read FStates write FStates; property SelectedCount: Integer read FSelectionCount; property TopNode: PVirtualNode read GetTopNode write SetTopNode; property VerticalAlignment[Node: PVirtualNode]: Byte read GetVerticalAlignment write SetVerticalAlignment; property VisibleCount: Cardinal read FVisibleCount; property VisiblePath[Node: PVirtualNode]: Boolean read GetVisiblePath write SetVisiblePath; property UpdateCount: Cardinal read FUpdateCount; end; // --------- TCustomVirtualStringTree // Options regarding strings (useful only for the string tree and descendants): TVTStringOption = ( toSaveCaptions, // If set then the caption is automatically saved with the tree node, regardless of what is // saved in the user data. toShowStaticText, // Show static text in a caption which can be differently formatted than the caption // but cannot be edited. toAutoAcceptEditChange // Automatically accept changes during edit if the user finishes editing other then // VK_RETURN or ESC. If not set then changes are cancelled. ); TVTStringOptions = set of TVTStringOption; const DefaultStringOptions = [toSaveCaptions, toAutoAcceptEditChange]; type TCustomStringTreeOptions = class(TCustomVirtualTreeOptions) private FStringOptions: TVTStringOptions; procedure SetStringOptions(const Value: TVTStringOptions); protected property StringOptions: TVTStringOptions read FStringOptions write SetStringOptions default DefaultStringOptions; public constructor Create(AOwner: TBaseVirtualTree); override; procedure AssignTo(Dest: TPersistent); override; end; TStringTreeOptions = class(TCustomStringTreeOptions) published property AnimationOptions; property AutoOptions; property ExportMode; property MiscOptions; property PaintOptions; property SelectionOptions; property StringOptions; end; TCustomVirtualStringTree = class; // Edit support classes. TStringEditLink = class; { TVTEdit } TVTEdit = class(TCustomEdit) private procedure CMAutoAdjust(var Message: TLMessage); message CM_AUTOADJUST; procedure CMExit(var Message: TLMessage); message CM_EXIT; procedure CNCommand(var Message: TLMCommand); message CN_COMMAND; procedure DoRelease(Data: PtrInt); procedure WMChar(var Message: TLMChar); message LM_CHAR; procedure WMDestroy(var Message: TLMDestroy); message LM_DESTROY; procedure WMGetDlgCode(var Message: TLMNoParams); message LM_GETDLGCODE; procedure WMKeyDown(var Message: TLMKeyDown); message LM_KEYDOWN; protected FRefLink: IVTEditLink; FLink: TStringEditLink; procedure AutoAdjustSize; virtual; procedure CreateParams(var Params: TCreateParams); override; public constructor Create(Link: TStringEditLink); reintroduce; procedure Release; property AutoSelect; property AutoSize; property BorderStyle; property CharCase; //property HideSelection; property MaxLength; //property OEMConvert; property PasswordChar; end; TStringEditLink = class(TInterfacedObject, IVTEditLink) private FEdit: TVTEdit; // A normal custom edit control. procedure SetEdit(const Value: TVTEdit); protected FTree: TCustomVirtualStringTree; // A back reference to the tree calling. FNode: PVirtualNode; // The node to be edited. FColumn: TColumnIndex; // The column of the node. FAlignment: TAlignment; FTextBounds: TRect; // Smallest rectangle around the text. FStopping: Boolean; // Set to True when the edit link requests stopping the edit action. public constructor Create; virtual; destructor Destroy; override; function BeginEdit: Boolean; virtual; stdcall; function CancelEdit: Boolean; virtual; stdcall; property Edit: TVTEdit read FEdit write SetEdit; function EndEdit: Boolean; virtual; stdcall; function GetBounds: TRect; virtual; stdcall; function PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; virtual; stdcall; procedure ProcessMessage(var Message: TLMessage); virtual; stdcall; procedure SetBounds(R: TRect); virtual; stdcall; end; // Describes the type of text to return in the text and draw info retrival events. TVSTTextType = ( ttNormal, // normal label of the node, this is also the text which can be edited ttStatic // static (non-editable) text after the normal text ); // Describes the source to use when converting a string tree into a string for clipboard etc. TVSTTextSourceType = ( tstAll, // All nodes are rendered. Initialization is done on the fly. tstInitialized, // Only initialized nodes are rendered. tstSelected, // Only selected nodes are rendered. tstCutCopySet, // Only nodes currently marked as being in the cut/copy clipboard set are rendered. tstVisible // Only visible nodes are rendered. ); TVTPaintText = procedure(Sender: TBaseVirtualTree; const TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType) of object; TVSTGetTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: String) of object; TVSTGetHintEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle; var HintText: String) of object; // New text can only be set for variable caption. TVSTNewTextEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; const NewText: String) of object; TVSTShortenStringEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; TextSpace: Integer; var Result: String; var Done: Boolean) of object; TVTMeasureTextWidthEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String; var Width: Integer) of object; TVTDrawTextEvent = procedure(Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String; const CellRect: TRect; var DefaultDraw: Boolean) of object; // Helper class to speed up rendering text formats for clipboard and drag'n drop transfers. { TBufferedUTF8String } TBufferedUTF8String = class private FStart, FPosition, FEnd: PChar; function GetAsAnsiString: AnsiString; function GetAsUTF16String: UnicodeString; function GetAsUTF8String: String; public destructor Destroy; override; procedure Add(const S: String); procedure AddNewLine; property AsAnsiString: AnsiString read GetAsAnsiString; property AsUTF8String: String read GetAsUTF8String; property AsUTF16String: UnicodeString read GetAsUTF16String; end; { TCustomVirtualStringTree } TCustomVirtualStringTree = class(TBaseVirtualTree) private FDefaultText: String; // text to show if there's no OnGetText event handler (e.g. at design time) FTextHeight: Integer; // true size of the font FEllipsisWidth: Integer; // width of '...' for the current font FInternalDataOffset: Cardinal; // offset to the internal data of the string tree FOnPaintText: TVTPaintText; // triggered before either normal or fixed text is painted to allow // even finer customization (kind of sub cell painting) FOnGetText: TVSTGetTextEvent; // used to retrieve the string to be displayed for a specific node FOnGetHint: TVSTGetHintEvent; // used to retrieve the hint to be displayed for a specific node FOnNewText: TVSTNewTextEvent; // used to notify the application about an edited node caption FOnShortenString: TVSTShortenStringEvent; // used to allow the application a customized string shortage FOnMeasureTextWidth: TVTMeasureTextWidthEvent; // used to adjust the width of the cells FOnDrawText: TVTDrawTextEvent; // used to custom draw the node text procedure AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String); function GetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): String; procedure GetRenderStartValues(Source: TVSTTextSourceType; out Node: PVirtualNode; out NextNodeProc: TGetNextNodeProc); function GetOptions: TCustomStringTreeOptions; function GetText(Node: PVirtualNode; Column: TColumnIndex): String; procedure InitializeTextProperties(var PaintInfo: TVTPaintInfo); procedure PaintNormalText(var PaintInfo: TVTPaintInfo; TextOutFlags: Integer; Text: String); procedure PaintStaticText(const PaintInfo: TVTPaintInfo; TextOutFlags: Integer; const Text: String); procedure SetDefaultText(const Value: String); procedure SetOptions(const Value: TCustomStringTreeOptions); procedure SetText(Node: PVirtualNode; Column: TColumnIndex; const Value: String); procedure CMFontChanged(var Msg: TLMessage); message CM_FONTCHANGED; protected procedure AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); override; function CanExportNode(Node: PVirtualNode): Boolean; function CalculateTextWidth(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; virtual; function ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; override; function DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; override; function DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; override; function DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; override; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; override; procedure DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: String); virtual; function DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; override; procedure DoNewText(Node: PVirtualNode; Column: TColumnIndex; const Text: String); virtual; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; procedure DoPaintText(Node: PVirtualNode; const Canvas: TCanvas; Column: TColumnIndex; TextType: TVSTTextType); virtual; function DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; virtual; procedure DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); virtual; function DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; virtual; function GetOptionsClass: TTreeOptionsClass; override; function InternalData(Node: PVirtualNode): Pointer; procedure MainColumnChanged; override; function ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; override; function RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; override; procedure WriteChunks(Stream: TStream; Node: PVirtualNode); override; property DefaultText: String read FDefaultText write SetDefaultText; property EllipsisWidth: Integer read FEllipsisWidth; property TreeOptions: TCustomStringTreeOptions read GetOptions write SetOptions; property OnGetHint: TVSTGetHintEvent read FOnGetHint write FOnGetHint; property OnGetText: TVSTGetTextEvent read FOnGetText write FOnGetText; property OnNewText: TVSTNewTextEvent read FOnNewText write FOnNewText; property OnPaintText: TVTPaintText read FOnPaintText write FOnPaintText; property OnShortenString: TVSTShortenStringEvent read FOnShortenString write FOnShortenString; property OnMeasureTextWidth: TVTMeasureTextWidthEvent read FOnMeasureTextWidth write FOnMeasureTextWidth; property OnDrawText: TVTDrawTextEvent read FOnDrawText write FOnDrawText; public constructor Create(AOwner: TComponent); override; function ComputeNodeHeight(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; S: String = ''): Integer; virtual; function ContentToClipboard(Format: Word; Source: TVSTTextSourceType): HGLOBAL; procedure ContentToCustom(Source: TVSTTextSourceType); function ContentToHTML(Source: TVSTTextSourceType; const Caption: String = ''): String; function ContentToRTF(Source: TVSTTextSourceType): AnsiString; function ContentToAnsi(Source: TVSTTextSourceType; const Separator: String): AnsiString; function ContentToText(Source: TVSTTextSourceType; const Separator: String): AnsiString; inline; function ContentToUnicode(Source: TVSTTextSourceType; const Separator: String): UnicodeString; inline; function ContentToUTF16(Source: TVSTTextSourceType; const Separator: String): UnicodeString; function ContentToUTF8(Source: TVSTTextSourceType; const Separator: String): String; {$ifndef LCLWin32} procedure CopyToClipBoard; override; procedure CutToClipBoard; override; {$endif} procedure GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); override; function InvalidateNode(Node: PVirtualNode): TRect; override; function Path(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; Delimiter: Char): String; procedure ReinitNode(Node: PVirtualNode; Recursive: Boolean); override; property ImageText[Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex]: String read GetImageText; property Text[Node: PVirtualNode; Column: TColumnIndex]: String read GetText write SetText; end; TVirtualStringTree = class(TCustomVirtualStringTree) private function GetOptions: TStringTreeOptions; procedure SetOptions(const Value: TStringTreeOptions); protected function GetOptionsClass: TTreeOptionsClass; override; public property Canvas; published {$ifdef EnableAccessible} property AccessibleName; {$endif} property Action; property Align; property Alignment; property Anchors; property AnimationDuration; property AutoExpandDelay; property AutoScrollDelay; property AutoScrollInterval; property Background; property BackgroundOffsetX; property BackgroundOffsetY; property BiDiMode; //property BevelEdges; //property BevelInner; //property BevelOuter; //property BevelKind; //property BevelWidth; property BorderSpacing; property BorderStyle default bsSingle; property BottomSpace; property ButtonFillMode; property ButtonStyle; property BorderWidth; property ChangeDelay; property CheckImageKind; property ClipboardFormats; property Color; property Colors; property Constraints; //todo: see a way to set CustomCheckImages at design time //property CustomCheckImages; property DefaultNodeHeight; property DefaultPasteMode; property DefaultText; property DragCursor; property DragHeight; property DragKind; property DragImageKind; property DragMode; property DragOperations; property DragType; property DragWidth; property DrawSelectionMode; property EditDelay; property Enabled; property Font; property Header; property HintMode; property HotCursor; property Images; property IncrementalSearch; property IncrementalSearchDirection; property IncrementalSearchStart; property IncrementalSearchTimeout; property Indent; property LineMode; property LineStyle; property Margin; property NodeAlignment; property NodeDataSize; property OperationCanceled; property ParentBiDiMode; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property RootNodeCount; property ScrollBarOptions; property SelectionBlendFactor; property SelectionCurveRadius; property ShowHint; property StateImages; property TabOrder; property TabStop default True; property TextMargin; property TreeOptions: TStringTreeOptions read GetOptions write SetOptions; property Visible; property WantTabs; property OnAdvancedHeaderDraw; property OnAfterAutoFitColumn; property OnAfterAutoFitColumns; property OnAfterCellPaint; property OnAfterColumnExport; property OnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth; property OnAfterHeaderExport; property OnAfterHeaderHeightTracking; property OnAfterItemErase; property OnAfterItemPaint; property OnAfterNodeExport; property OnAfterPaint; property OnAfterTreeExport; property OnBeforeAutoFitColumn; property OnBeforeAutoFitColumns; property OnBeforeCellPaint; property OnBeforeColumnExport; property OnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport; property OnBeforeHeaderHeightTracking; property OnBeforeItemErase; property OnBeforeItemPaint; property OnBeforeNodeExport; property OnBeforePaint; property OnBeforeTreeExport; property OnCanSplitterResizeColumn; property OnChange; property OnChecked; property OnChecking; property OnClick; property OnCollapsed; property OnCollapsing; property OnColumnClick; property OnColumnDblClick; property OnColumnExport; property OnColumnResize; property OnColumnWidthDblClickResize; property OnColumnWidthTracking; property OnCompareNodes; property OnContextPopup; property OnCreateDataObject; property OnCreateDragManager; property OnCreateEditor; property OnDblClick; property OnDragAllowed; property OnDragOver; property OnDragDrop; property OnDrawText; property OnEditCancelled; property OnEdited; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnExpanded; property OnExpanding; property OnFocusChanged; property OnFocusChanging; property OnFreeNode; property OnGetCellIsEmpty; property OnGetCursor; property OnGetHeaderCursor; property OnGetText; property OnPaintText; property OnGetHelpContext; property OnGetImageIndex; property OnGetImageIndexEx; property OnGetImageText; property OnGetHint; property OnGetLineStyle; property OnGetNodeDataSize; property OnGetPopupMenu; property OnGetUserClipboardFormats; property OnHeaderCheckBoxClick; property OnHeaderClick; property OnHeaderDblClick; property OnHeaderDragged; property OnHeaderDraggedOut; property OnHeaderDragging; property OnHeaderDraw; property OnHeaderDrawQueryElements; property OnHeaderHeightDblClickResize; property OnHeaderHeightTracking; property OnHeaderImageClick; property OnHeaderMouseDown; property OnHeaderMouseMove; property OnHeaderMouseUp; property OnHotChange; property OnIncrementalSearch; property OnInitChildren; property OnInitNode; property OnKeyAction; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnLoadNode; property OnMeasureItem; property OnMeasureTextWidth; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnNewText; property OnNodeCopied; property OnNodeCopying; property OnNodeExport; property OnNodeHeightDblClickResize; property OnNodeHeightTracking; property OnNodeMoved; property OnNodeMoving; property OnPaintBackground; property OnRenderOLEData; property OnResetNode; property OnResize; property OnSaveNode; property OnScroll; property OnShortenString; property OnShowScrollbar; property OnStartDock; property OnStartDrag; property OnStateChange; property OnStructureChange; property OnUpdating; property OnUTF8KeyPress; end; TVTDrawHintEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex) of object; TVTDrawNodeEvent = procedure(Sender: TBaseVirtualTree; const PaintInfo: TVTPaintInfo) of object; TVTGetCellContentMarginEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType; var CellContentMargin: TPoint) of object; TVTGetNodeWidthEvent = procedure(Sender: TBaseVirtualTree; HintCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; var NodeWidth: Integer) of object; TVTGetHintSizeEvent = procedure(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; var R: TRect) of object; // Tree descendant to let an application draw its stuff itself. TCustomVirtualDrawTree = class(TBaseVirtualTree) private FOnDrawNode: TVTDrawNodeEvent; FOnGetCellContentMargin: TVTGetCellContentMarginEvent; FOnGetNodeWidth: TVTGetNodeWidthEvent; FOnGetHintSize: TVTGetHintSizeEvent; FOnDrawHint: TVTDrawHintEvent; protected procedure DoDrawHint(Canvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex); function DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; override; procedure DoGetHintSize(Node: PVirtualNode; Column: TColumnIndex; var R: TRect); virtual; function DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; override; procedure DoPaintNode(var PaintInfo: TVTPaintInfo); override; property OnDrawHint: TVTDrawHintEvent read FOnDrawHint write FOnDrawHint; property OnDrawNode: TVTDrawNodeEvent read FOnDrawNode write FOnDrawNode; property OnGetCellContentMargin: TVTGetCellContentMarginEvent read FOnGetCellContentMargin write FOnGetCellContentMargin; property OnGetHintSize: TVTGetHintSizeEvent read FOnGetHintSize write FOnGetHintSize; property OnGetNodeWidth: TVTGetNodeWidthEvent read FOnGetNodeWidth write FOnGetNodeWidth; end; TVirtualDrawTree = class(TCustomVirtualDrawTree) private function GetOptions: TVirtualTreeOptions; procedure SetOptions(const Value: TVirtualTreeOptions); protected function GetOptionsClass: TTreeOptionsClass; override; public property Canvas; published property Action; property Align; property Alignment; property Anchors; property AnimationDuration; property AutoExpandDelay; property AutoScrollDelay; property AutoScrollInterval; property Background; property BackgroundOffsetX; property BackgroundOffsetY; property BiDiMode; //property BevelEdges; //property BevelInner; //property BevelOuter; //property BevelKind; // property BevelWidth; property BorderSpacing; property BorderStyle default bsSingle; property BottomSpace; property ButtonFillMode; property ButtonStyle; property BorderWidth; property ChangeDelay; property CheckImageKind; property ClipboardFormats; property Color; property Colors; property Constraints; property CustomCheckImages; property DefaultNodeHeight; property DefaultPasteMode; property DragCursor; property DragHeight; property DragKind; property DragImageKind; property DragMode; property DragOperations; property DragType; property DragWidth; property DrawSelectionMode; property EditDelay; property Enabled; property Font; property Header; property HintMode; property HotCursor; property Images; property IncrementalSearch; property IncrementalSearchDirection; property IncrementalSearchStart; property IncrementalSearchTimeout; property Indent; property LineMode; property LineStyle; property Margin; property NodeAlignment; property NodeDataSize; property OperationCanceled; property ParentBiDiMode; property ParentColor default False; property ParentFont; property ParentShowHint; property PopupMenu; property RootNodeCount; property ScrollBarOptions; property SelectionBlendFactor; property SelectionCurveRadius; property ShowHint; property StateImages; property TabOrder; property TabStop default True; property TextMargin; property TreeOptions: TVirtualTreeOptions read GetOptions write SetOptions; property Visible; property WantTabs; property OnAdvancedHeaderDraw; property OnAfterAutoFitColumn; property OnAfterAutoFitColumns; property OnAfterCellPaint; property OnAfterColumnExport; property OnAfterColumnWidthTracking; property OnAfterGetMaxColumnWidth; property OnAfterHeaderExport; property OnAfterHeaderHeightTracking; property OnAfterItemErase; property OnAfterItemPaint; property OnAfterNodeExport; property OnAfterPaint; property OnAfterTreeExport; property OnBeforeAutoFitColumn; property OnBeforeAutoFitColumns; property OnBeforeCellPaint; property OnBeforeColumnExport; property OnBeforeColumnWidthTracking; property OnBeforeGetMaxColumnWidth; property OnBeforeHeaderExport; property OnBeforeHeaderHeightTracking; property OnBeforeItemErase; property OnBeforeItemPaint; property OnBeforeNodeExport; property OnBeforePaint; property OnBeforeTreeExport; property OnCanSplitterResizeColumn; property OnChange; property OnChecked; property OnChecking; property OnClick; property OnCollapsed; property OnCollapsing; property OnColumnClick; property OnColumnDblClick; property OnColumnExport; property OnColumnResize; property OnColumnWidthDblClickResize; property OnColumnWidthTracking; property OnCompareNodes; property OnContextPopup; property OnCreateDataObject; property OnCreateDragManager; property OnCreateEditor; property OnDblClick; property OnDragAllowed; property OnDragOver; property OnDragDrop; property OnDrawHint; property OnDrawNode; property OnEdited; property OnEditing; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnExpanded; property OnExpanding; property OnFocusChanged; property OnFocusChanging; property OnFreeNode; property OnGetCellIsEmpty; property OnGetCursor; property OnGetHeaderCursor; property OnGetHelpContext; property OnGetHintSize; property OnGetImageIndex; property OnGetImageIndexEx; property OnGetLineStyle; property OnGetNodeDataSize; property OnGetNodeWidth; property OnGetPopupMenu; property OnGetUserClipboardFormats; property OnHeaderCheckBoxClick; property OnHeaderClick; property OnHeaderDblClick; property OnHeaderDragged; property OnHeaderDraggedOut; property OnHeaderDragging; property OnHeaderDraw; property OnHeaderDrawQueryElements; property OnHeaderHeightTracking; property OnHeaderHeightDblClickResize; property OnHeaderImageClick; property OnHeaderMouseDown; property OnHeaderMouseMove; property OnHeaderMouseUp; property OnHotChange; property OnIncrementalSearch; property OnInitChildren; property OnInitNode; property OnKeyAction; property OnKeyDown; property OnKeyPress; property OnKeyUp; property OnLoadNode; property OnMeasureItem; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheel; property OnNodeCopied; property OnNodeCopying; property OnNodeExport; property OnNodeHeightTracking; property OnNodeHeightDblClickResize; property OnNodeMoved; property OnNodeMoving; property OnPaintBackground; property OnRenderOLEData; property OnResetNode; property OnResize; property OnSaveNode; property OnScroll; property OnShowScrollbar; property OnStartDock; property OnStartDrag; property OnStateChange; property OnStructureChange; property OnUpdating; property OnUTF8KeyPress; end; // OLE Clipboard and drag'n drop helper procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; const List: TStrings); overload; procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray); overload; function GetVTClipboardFormatDescription(AFormat: Word): string; procedure RegisterVTClipboardFormat(AFormat: Word; TreeClass: TVirtualTreeClass; Priority: Cardinal); overload; function RegisterVTClipboardFormat(Description: string; TreeClass: TVirtualTreeClass; Priority: Cardinal; tymed: Integer = TYMED_HGLOBAL; ptd: PDVTargetDevice = nil; dwAspect: Integer = DVASPECT_CONTENT; lindex: Integer = -1): Word; overload; // utility routines {$ifdef EnablePrint} procedure PrtStretchDrawDIB(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap); {$endif} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; function TreeFromNode(Node: PVirtualNode): TBaseVirtualTree; procedure GetStringDrawRect(DC: HDC; const S: String; var Bounds: TRect; DrawFormat: Cardinal); function WrapString(DC: HDC; const S: String; const Bounds: TRect; RTL: Boolean; DrawFormat: Cardinal): String; //---------------------------------------------------------------------------------------------------------------------- implementation uses StrUtils, Math, {$ifdef EnableOLE} //AxCtrls, // TOLEStream {$endif} {$ifdef UseFlatScrollbars} FlatSB, // wrapper for systems without flat SB support {$endif UseFlatScrollbars} {$ifdef Windows} MMSystem, // for animation timer (does not include further resources) {$else} FakeMMSystem, {$endif} TypInfo, // for migration stuff ActnList, StdActns, // for standard action support GraphType, LCLProc {$ifdef EnableAccessible} ,VTAccessibilityFactory {$endif}; // accessibility helper class resourcestring // Localizable strings. SEditLinkIsNil = 'Edit link must not be nil.'; SWrongMoveError = 'Target node cannot be a child node of the node to be moved.'; SWrongStreamFormat = 'Unable to load tree structure, the format is wrong.'; SWrongStreamVersion = 'Unable to load tree structure, the version is unknown.'; SStreamTooSmall = 'Unable to load tree structure, not enough data available.'; SCorruptStream1 = 'Stream data corrupt. A node''s anchor chunk is missing.'; SCorruptStream2 = 'Stream data corrupt. Unexpected data after node''s end position.'; SClipboardFailed = 'Clipboard operation failed.'; SCannotSetUserData = 'Cannot set initial user data because there is not enough user data space allocated.'; const ClipboardStates = [tsCopyPending, tsCutPending]; DefaultScrollUpdateFlags = [suoRepaintHeader, suoRepaintScrollbars, suoScrollClientArea, suoUpdateNCArea]; MinimumTimerInterval = 1; // minimum resolution for timeGetTime TreeNodeSize = (SizeOf(TVirtualNode) + 3) and not 3; // used for node allocation and access to internal data // Lookup to quickly convert a specific check state into its pressed counterpart and vice versa. PressedState: array[TCheckState] of TCheckState = ( csUncheckedPressed, csUncheckedPressed, csCheckedPressed, csCheckedPressed, csMixedPressed, csMixedPressed ); UnpressedState: array[TCheckState] of TCheckState = ( csUncheckedNormal, csUncheckedNormal, csCheckedNormal, csCheckedNormal, csMixedNormal, csMixedNormal ); MouseButtonDown = [tsLeftButtonDown, tsMiddleButtonDown, tsRightButtonDown]; // Do not modify the copyright in any way! Usage of this unit is prohibited without the copyright notice // in the compiled binary file. Copyright: string = 'Virtual Treeview ? 1999, 2010 Mike Lischke'; var //Workaround to LCL bug 8553 {$ifndef LCLWin32} pf32bit: TPixelFormat = pfDevice; {$endif} StandardOLEFormat: TFormatEtc = ( // Format must later be set. cfFormat: 0; // No specific target device to render on. ptd: nil; // Normal content to render. dwAspect: DVASPECT_CONTENT; // No specific page of multipage data (we don't use multipage data by default). lindex: -1; // Acceptable storage formats are IStream and global memory. The first is preferred. tymed: TYMED_ISTREAM or TYMED_HGLOBAL; ); type // streaming support TMagicID = array[0..5] of Char; TChunkHeader = record ChunkType, ChunkSize: Integer; // contains the size of the chunk excluding the header end; // base information about a node TBaseChunkBody = packed record ChildCount, NodeHeight: Cardinal; States: TVirtualNodeStates; Align: Byte; CheckState: TCheckState; CheckType: TCheckType; Reserved: Cardinal; end; TBaseChunk = packed record Header: TChunkHeader; Body: TBaseChunkBody; end; // Toggle animation modes. TToggleAnimationMode = ( tamScrollUp, tamScrollDown, tamNoScroll ); // Internally used data for animations. TToggleAnimationData = record Window: HWND; // copy of the tree's window handle DC: HDC; // the DC of the window to erase uncovered parts Brush: HBRUSH; // the brush to be used to erase uncovered parts R1, R2: TRect; // animation rectangles Mode1, Mode2: TToggleAnimationMode; // animation modes ScaleFactor: Double; // the factor between the missing step size when doing two animations MissedSteps: Double; end; const CheckImagesStrings: array [TCheckImageKind] of String = ('VT_CHECK_LIGHT', 'VT_CHECK_DARK', 'VT_TICK_LIGHT', 'VT_TICK_DARK', 'VT_FLAT', 'VT_XP', '',//ckCustom, // Only the button images are used for ckSystem * // The check buttons are draw at fly as requested 'VT_FLAT',//ckSystemFlat 'VT_CHECK_DARK' //ckSystemDefault ); MagicID: TMagicID = (#$45, 'V', 'T', Char(VTTreeStreamVersion), ' ', #$46); // chunk IDs NodeChunk = 1; BaseChunk = 2; // chunk containing node state, check state, child node count etc. // this chunk is immediately followed by all child nodes CaptionChunk = 3; // used by the string tree to store a node's caption UserChunk = 4; // used for data supplied by the application {$ifdef UseFlatScrollbars} ScrollBarProp: array[TScrollBarStyle] of Integer = ( FSB_REGULAR_MODE, FSB_FLAT_MODE, FSB_ENCARTA_MODE ); {$endif} RTLFlag: array[Boolean] of Integer = (0, ETO_RTLREADING); AlignmentToDrawFlag: array[TAlignment] of Cardinal = (DT_LEFT, DT_RIGHT, DT_CENTER); WideCR = WideChar(#13); WideLF = WideChar(#10); type // internal worker thread TWorkerThread = class(TThread) private FCurrentTree: TBaseVirtualTree; FWaiterList: TThreadList; FRefCount: Cardinal; protected procedure CancelValidation(Tree: TBaseVirtualTree); procedure ChangeTreeStates(EnterStates, LeaveStates: TChangeStates); procedure Execute; override; public constructor Create(CreateSuspended: Boolean); destructor Destroy; override; procedure AddTree(Tree: TBaseVirtualTree); procedure RemoveTree(Tree: TBaseVirtualTree); property CurrentTree: TBaseVirtualTree read FCurrentTree; end; var WorkerThread: TWorkerThread; WorkEvent: TEvent; UtilityImages: TBitmap; // some small additional images (e.g for header dragging) Initialized: Boolean; // True if global structures have been initialized. NeedToUnitialize: Boolean; // True if the OLE subsystem could be initialized successfully. //----------------- TClipboardFormats ---------------------------------------------------------------------------------- type PClipboardFormatListEntry = ^TClipboardFormatListEntry; TClipboardFormatListEntry = record Description: string; // The string used to register the format with Windows. TreeClass: TVirtualTreeClass; // The tree class which supports rendering this format. Priority: Cardinal; // Number which determines the order of formats used in IDataObject. FormatEtc: TFormatEtc; // The definition of the format in the IDataObject. end; TClipboardFormatList = class private FList: TFpList; procedure Sort; public constructor Create; destructor Destroy; override; procedure Add(FormatString: string; AClass: TVirtualTreeClass; Priority: Cardinal; AFormatEtc: TFormatEtc); procedure Clear; procedure EnumerateFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray; const AllowedFormats: TClipboardFormats = nil); overload; procedure EnumerateFormats(TreeClass: TVirtualTreeClass; const Formats: TStrings); overload; function FindFormat(FormatString: string): PClipboardFormatListEntry; overload; function FindFormat(FormatString: string; var Fmt: Word): TVirtualTreeClass; overload; function FindFormat(Fmt: Word; out Description: string): TVirtualTreeClass; overload; end; var InternalClipboardFormats: TClipboardFormatList; //---------------------------------------------------------------------------------------------------------------------- constructor TClipboardFormatList.Create; begin FList := TFpList.Create; end; //---------------------------------------------------------------------------------------------------------------------- destructor TClipboardFormatList.Destroy; begin Clear; FList.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Sort; // Sorts all entry for priority (increasing priority value). //--------------- local function -------------------------------------------- procedure QuickSort(L, R: Integer); var I, J: Integer; P, T: PClipboardFormatListEntry; begin repeat I := L; J := R; P := FList[(L + R) shr 1]; repeat while PClipboardFormatListEntry(FList[I]).Priority < P.Priority do Inc(I); while PClipboardFormatListEntry(Flist[J]).Priority > P.Priority do Dec(J); if I <= J then begin T := Flist[I]; FList[I] := FList[J]; FList[J] := T; Inc(I); Dec(J); end; until I > J; if L < J then QuickSort(L, J); L := I; until I >= R; end; //--------------- end local function ---------------------------------------- begin if FList.Count > 1 then QuickSort(0, FList.Count - 1); end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Add(FormatString: string; AClass: TVirtualTreeClass; Priority: Cardinal; AFormatEtc: TFormatEtc); // Adds the given data to the internal list. The priority value is used to sort formats for importance. Larger priority // values mean less priority. var Entry: PClipboardFormatListEntry; begin New(Entry); Entry.Description := FormatString; Entry.TreeClass := AClass; Entry.Priority := Priority; Entry.FormatEtc := AFormatEtc; FList.Add(Entry); Sort; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.Clear; var I: Integer; begin for I := 0 to FList.Count - 1 do Dispose(PClipboardFormatListEntry(FList[I])); FList.Clear; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.EnumerateFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray; const AllowedFormats: TClipboardFormats = nil); // Returns a list of format records for the given class. If assigned the AllowedFormats is used to limit the // enumerated formats to those described in the list. var I, Count: Integer; Entry: PClipboardFormatListEntry; begin SetLength(Formats, FList.Count); Count := 0; for I := 0 to FList.Count - 1 do begin Entry := FList[I]; // Does the tree class support this clipboard format? if TreeClass.InheritsFrom(Entry.TreeClass) then begin // Is this format allowed to be included? if (AllowedFormats = nil) or (AllowedFormats.IndexOf(Entry.Description) > -1) then begin // The list could change before we use the FormatEtc so it is best not to pass a pointer to the true FormatEtc // structure. Instead make a copy and send that. Formats[Count] := Entry.FormatEtc; Inc(Count); end; end; end; SetLength(Formats, Count); end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormatList.EnumerateFormats(TreeClass: TVirtualTreeClass; const Formats: TStrings); // Returns a list of format descriptions for the given class. var I: Integer; Entry: PClipboardFormatListEntry; begin for I := 0 to FList.Count - 1 do begin Entry := FList[I]; if TreeClass.InheritsFrom(Entry.TreeClass) then Formats.Add(Entry.Description); end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(FormatString: string): PClipboardFormatListEntry; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if CompareText(Entry.Description, FormatString) = 0 then begin Result := Entry; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(FormatString: string; var Fmt: Word): TVirtualTreeClass; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if CompareText(Entry.Description, FormatString) = 0 then begin Result := Entry.TreeClass; Fmt := Entry.FormatEtc.cfFormat; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormatList.FindFormat(Fmt: Word; out Description: string): TVirtualTreeClass; var I: Integer; Entry: PClipboardFormatListEntry; begin Result := nil; for I := FList.Count - 1 downto 0 do begin Entry := FList[I]; if Entry.FormatEtc.cfFormat = Fmt then begin Result := Entry.TreeClass; Description := Entry.Description; Break; end; end; end; //---------------------------------------------------------------------------------------------------------------------- type TClipboardFormatEntry = record ID: Word; Description: string; end; var ClipboardDescriptions: array [1..CF_MAX - 1] of TClipboardFormatEntry = ( (ID: CF_TEXT; Description: 'Plain text'), // Do not localize (ID: CF_BITMAP; Description: 'Windows bitmap'), // Do not localize (ID: CF_METAFILEPICT; Description: 'Windows metafile'), // Do not localize (ID: CF_SYLK; Description: 'Symbolic link'), // Do not localize (ID: CF_DIF; Description: 'Data interchange format'), // Do not localize (ID: CF_TIFF; Description: 'Tiff image'), // Do not localize (ID: CF_OEMTEXT; Description: 'OEM text'), // Do not localize (ID: CF_DIB; Description: 'DIB image'), // Do not localize (ID: CF_PALETTE; Description: 'Palette data'), // Do not localize (ID: CF_PENDATA; Description: 'Pen data'), // Do not localize (ID: CF_RIFF; Description: 'Riff audio data'), // Do not localize (ID: CF_WAVE; Description: 'Wav audio data'), // Do not localize (ID: CF_UNICODETEXT; Description: 'Unicode text'), // Do not localize (ID: CF_ENHMETAFILE; Description: 'Enhanced metafile image'), // Do not localize (ID: CF_HDROP; Description: 'File name(s)'), // Do not localize (ID: CF_LOCALE; Description: 'Locale descriptor') // Do not localize ); //---------------------------------------------------------------------------------------------------------------------- procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; const List: TStrings); begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; InternalClipboardFormats.EnumerateFormats(TreeClass, List); end; //---------------------------------------------------------------------------------------------------------------------- procedure EnumerateVTClipboardFormats(TreeClass: TVirtualTreeClass; var Formats: TFormatEtcArray); begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; InternalClipboardFormats.EnumerateFormats(TreeClass, Formats); end; //---------------------------------------------------------------------------------------------------------------------- function GetVTClipboardFormatDescription(AFormat: Word): string; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; if InternalClipboardFormats.FindFormat(AFormat, Result) = nil then Result := ''; end; //---------------------------------------------------------------------------------------------------------------------- procedure RegisterVTClipboardFormat(AFormat: Word; TreeClass: TVirtualTreeClass; Priority: Cardinal); // Registers the given clipboard format for the given TreeClass. var I: Integer; FormatEtc: TFormatEtc; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; // Assumes a HGlobal format. FormatEtc.cfFormat := AFormat; FormatEtc.ptd := nil; FormatEtc.dwAspect := DVASPECT_CONTENT; FormatEtc.lindex := -1; FormatEtc.tymed := TYMED_HGLOBAL; // Determine description string of the given format. For predefined formats we need the lookup table because they // don't have a description string. For registered formats the description string is the string which was used // to register them. if AFormat < CF_MAX then begin for I := 1 to High(ClipboardDescriptions) do if ClipboardDescriptions[I].ID = AFormat then begin InternalClipboardFormats.Add(ClipboardDescriptions[I].Description, TreeClass, Priority, FormatEtc); Break; end; end else begin InternalClipboardFormats.Add(ClipboardFormatToMimeType(AFormat), TreeClass, Priority, FormatEtc); end; end; //---------------------------------------------------------------------------------------------------------------------- function RegisterVTClipboardFormat(Description: string; TreeClass: TVirtualTreeClass; Priority: Cardinal; tymed: Integer = TYMED_HGLOBAL; ptd: PDVTargetDevice = nil; dwAspect: Integer = DVASPECT_CONTENT; lindex: Integer = -1): Word; // Alternative method to register a certain clipboard format for a given tree class. Registration with the // clipboard is done here too and the assigned ID returned by the function. // tymed may contain or'ed TYMED constants which allows to register several storage formats for one clipboard format. var FormatEtc: TFormatEtc; begin if InternalClipboardFormats = nil then InternalClipboardFormats := TClipboardFormatList.Create; Result := ClipboardRegisterFormat(Description); FormatEtc.cfFormat := Result; FormatEtc.ptd := ptd; FormatEtc.dwAspect := dwAspect; FormatEtc.lindex := lindex; FormatEtc.tymed := tymed; InternalClipboardFormats.Add(Description, TreeClass, Priority, FormatEtc); end; //----------------- utility functions ---------------------------------------------------------------------------------- procedure ShowError(Msg: String; HelpContext: Integer); begin raise EVirtualTreeError.CreateHelp(Msg, HelpContext); end; //---------------------------------------------------------------------------------------------------------------------- function TreeFromNode(Node: PVirtualNode): TBaseVirtualTree; // Returns the tree the node currently belongs to or nil if the node is not attached to a tree. begin Assert(Assigned(Node), 'Node must not be nil.'); // The root node is marked by having its NextSibling (and PrevSibling) pointing to itself. while Assigned(Node) and (Node.NextSibling <> Node) do Node := Node.Parent; if Assigned(Node) then Result := TBaseVirtualTree(Node.Parent) else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function OrderRect(const R: TRect): TRect; // Converts the incoming rectangle so that left and top are always less than or equal to right and bottom. begin if R.Left < R.Right then begin Result.Left := R.Left; Result.Right := R.Right; end else begin Result.Left := R.Right; Result.Right := R.Left; end; if R.Top < R.Bottom then begin Result.Top := R.Top; Result.Bottom := R.Bottom; end else begin Result.Top := R.Bottom; Result.Bottom := R.Top; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure QuickSort(const TheArray: TNodeArray; L, R: Integer); var I, J: Integer; P, T: Pointer; begin repeat I := L; J := R; P := TheArray[(L + R) shr 1]; repeat while TheArray[I] < P do Inc(I); while TheArray[J] > P do Dec(J); if I <= J then begin T := TheArray[I]; TheArray[I] := TheArray[J]; TheArray[J] := T; Inc(I); Dec(J); end; until I > J; if L < J then QuickSort(TheArray, L, J); L := I; until I >= R; end; //---------------------------------------------------------------------------------------------------------------------- //todo: Unify the procedure or change to widgetset specific // Currently the UTF-8 version is broken. // the unicode version is used when all winapi is available {$ifndef INCOMPLETE_WINAPI} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; // Adjusts the given string S so that it fits into the given width. EllipsisWidth gives the width of // the three points to be added to the shorted string. If this value is 0 then it will be determined implicitely. // For higher speed (and multiple entries to be shorted) specify this value explicitely. // Note: It is assumed that the string really needs shortage. Check this in advance. var Size: TSize; Len: Integer; L, H, N, W: Integer; WideStr: UnicodeString; begin WideStr := UTF8Decode(S); Len := Length(WideStr); if (Len = 0) or (Width <= 0) then Result := '' else begin // Determine width of triple point using the current DC settings (if not already done). if EllipsisWidth = 0 then begin GetTextExtentPoint32W(DC, '...', 3, Size); EllipsisWidth := Size.cx; end; if Width <= EllipsisWidth then Result := '' else begin // Do a binary search for the optimal string length which fits into the given width. L := 0; H := Len - 1; while L < H do begin N := (L + H + 1) shr 1; GetTextExtentPoint32W(DC, PWideChar(WideStr), N, Size); W := Size.cx + EllipsisWidth; if W <= Width then L := N else H := N - 1; end; Result := UTF8Encode(Copy(WideStr, 1, L) + '...'); end; end; end; {$else} function ShortenString(DC: HDC; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; // Adjusts the given string S so that it fits into the given width. EllipsisWidth gives the width of // the three points to be added to the shorted string. If this value is 0 then it will be determined implicitely. // For higher speed (and multiple entries to be shorted) specify this value explicitely. // Note: It is assumed that the string really needs shortage. Check this in advance. var Size: TSize; Len: Integer; L, H, N, W: Integer; begin Len := Length(S); if (Len = 0) or (Width <= 0) then Result := '' else begin // Determine width of triple point using the current DC settings (if not already done). if EllipsisWidth = 0 then begin GetTextExtentPoint32(DC, '...', 3, Size); EllipsisWidth := Size.cx; end; if Width <= EllipsisWidth then Result := '' else begin // Do a binary search for the optimal string length which fits into the given width. L := 0; H := Len - 1; while L < H do begin N := (L + H + 1) shr 1; GetTextExtentPoint32(DC, PAnsiChar(S), N, Size); W := Size.cx + EllipsisWidth; if W <= Width then L := N else H := N - 1; end; Result := Copy(S, 1, L) + '...'; end; end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function WrapString(DC: HDC; const S: String; const Bounds: TRect; RTL: Boolean; DrawFormat: Cardinal): String; // Wrap the given string S so that it fits into a space of given width. // RTL determines if right-to-left reading is active. var Width, Len, WordCounter, WordsInLine, I, W: Integer; Buffer, Line: String; Words: Array of String; R: TRect; begin Result := ''; Width := Bounds.Right - Bounds.Left; R := Rect(0, 0, 0, 0); // Leading and trailing are ignored. Buffer := Trim(S); Len := Length(Buffer); if Len < 1 then Exit; // Count the words in the string. WordCounter := 1; for I := 1 to Len do if Buffer[I] = ' ' then Inc(WordCounter); SetLength(Words, WordCounter); if RTL then begin // At first we split the string into words with the last word being the // first element in Words. W := 0; for I := 1 to Len do if Buffer[I] = ' ' then Inc(W) else Words[W] := Words[W] + Buffer[I]; // Compose Result. while WordCounter > 0 do begin WordsInLine := 0; Line := ''; while WordCounter > 0 do begin GetStringDrawRect(DC, Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter - 1], R, DrawFormat); if R.Right > Width then begin // If at least one word fits into this line then continue with the next line. if WordsInLine > 0 then Break; Buffer := Words[WordCounter - 1]; if Len > 1 then begin for Len := Length(Buffer) - 1 downto 2 do begin GetStringDrawRect(DC, RightStr(Buffer, Len), R, DrawFormat); if R.Right <= Width then Break; end; end else Len := Length(Buffer); Line := Line + RightStr(Buffer, Max(Len, 1)); Words[WordCounter - 1] := LeftStr(Buffer, Length(Buffer) - Max(Len, 1)); if Words[WordCounter - 1] = '' then Dec(WordCounter); Break; end else begin Dec(WordCounter); Line := Words[WordCounter] + IfThen(WordsInLine > 0, ' ', '') + Line; Inc(WordsInLine); end; end; Result := Result + Line + LineEnding; end; end else begin // At first we split the string into words with the last word being the // first element in Words. W := WordCounter - 1; for I := 1 to Len do if Buffer[I] = ' ' then Dec(W) else Words[W] := Words[W] + Buffer[I]; // Compose Result. while WordCounter > 0 do begin WordsInLine := 0; Line := ''; while WordCounter > 0 do begin GetStringDrawRect(DC, Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter - 1], R, DrawFormat); if R.Right > Width then begin // If at least one word fits into this line then continue with the next line. if WordsInLine > 0 then Break; Buffer := Words[WordCounter - 1]; if Len > 1 then begin for Len := Length(Buffer) - 1 downto 2 do begin GetStringDrawRect(DC, LeftStr(Buffer, Len), R, DrawFormat); if R.Right <= Width then Break; end; end else Len := Length(Buffer); Line := Line + LeftStr(Buffer, Max(Len, 1)); Words[WordCounter - 1] := RightStr(Buffer, Length(Buffer) - Max(Len, 1)); if Words[WordCounter - 1] = '' then Dec(WordCounter); Break; end else begin Dec(WordCounter); Line := Line + IfThen(WordsInLine > 0, ' ', '') + Words[WordCounter]; Inc(WordsInLine); end; end; Result := Result + Line + LineEnding; end; end; Len := Length(Result) - Length(LineEnding); if CompareByte(Result[Len + 1], String(LineEnding)[1], Length(LineEnding)) = 0 then SetLength(Result, Len); end; //---------------------------------------------------------------------------------------------------------------------- // Calculates bounds of a drawing rectangle for the given string procedure GetStringDrawRect(DC: HDC; const S: String; var Bounds: TRect; DrawFormat: Cardinal); begin Bounds.Right := Bounds.Left + 1; Bounds.Bottom := Bounds.Top + 1; DrawText(DC, PChar(S), Length(S), Bounds, DrawFormat or DT_CALCRECT); end; //---------------------------------------------------------------------------------------------------------------------- procedure FillDragRectangles(DragWidth, DragHeight, DeltaX, DeltaY: Integer; out RClip, RScroll, RSamp1, RSamp2, RDraw1, RDraw2: TRect); // Fills the given rectangles with values which can be used while dragging around an image // (used in DragMove of the drag manager and DragTo of the header columns). begin // ScrollDC limits RClip := Rect(0, 0, DragWidth, DragHeight); if DeltaX > 0 then begin // move to the left if DeltaY = 0 then begin // move only to the left // background movement RScroll := Rect(0, 0, DragWidth - DeltaX, DragHeight); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RDraw1 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end else if DeltaY < 0 then begin // move to bottom left RScroll := Rect(0, -DeltaY, DragWidth - DeltaX, DragHeight); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RSamp2 := Rect(DeltaX, DragHeight + DeltaY, DragWidth - DeltaX, -DeltaY); RDraw1 := Rect(0, 0, DragWidth - DeltaX, -DeltaY); RDraw2 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end else begin // move to upper left RScroll := Rect(0, 0, DragWidth - DeltaX, DragHeight - DeltaY); RSamp1 := Rect(0, 0, DeltaX, DragHeight); RSamp2 := Rect(DeltaX, 0, DragWidth - DeltaX, DeltaY); RDraw1 := Rect(0, DragHeight - DeltaY, DragWidth - DeltaX, DeltaY); RDraw2 := Rect(DragWidth - DeltaX, 0, DeltaX, DragHeight); end; end else if DeltaX = 0 then begin // vertical movement only if DeltaY < 0 then begin // move downwards RScroll := Rect(0, -DeltaY, DragWidth, DragHeight); RSamp2 := Rect(0, DragHeight + DeltaY, DragWidth, -DeltaY); RDraw2 := Rect(0, 0, DragWidth, -DeltaY); end else begin // move upwards RScroll := Rect(0, 0, DragWidth, DragHeight - DeltaY); RSamp2 := Rect(0, 0, DragWidth, DeltaY); RDraw2 := Rect(0, DragHeight - DeltaY, DragWidth, DeltaY); end; end else begin // move to the right if DeltaY > 0 then begin // move up right RScroll := Rect(-DeltaX, 0, DragWidth, DragHeight); RSamp1 := Rect(0, 0, DragWidth + DeltaX, DeltaY); RSamp2 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); RDraw2 := Rect(-DeltaX, DragHeight - DeltaY, DragWidth + DeltaX, DeltaY); end else if DeltaY = 0 then begin // to the right only RScroll := Rect(-DeltaX, 0, DragWidth, DragHeight); RSamp1 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); end else begin // move down right RScroll := Rect(-DeltaX, -DeltaY, DragWidth, DragHeight); RSamp1 := Rect(0, DragHeight + DeltaY, DragWidth + DeltaX, -DeltaY); RSamp2 := Rect(DragWidth + DeltaX, 0, -DeltaX, DragHeight); RDraw1 := Rect(0, 0, -DeltaX, DragHeight); RDraw2 := Rect(-DeltaX, 0, DragWidth + DeltaX, -DeltaY); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function GetRGBColor(Value: TColor): DWORD; // Little helper to convert a Delphi color to an image list color. begin Result := ColorToRGB(Value); case Result of clNone: Result := CLR_NONE; clDefault: Result := CLR_DEFAULT; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef CPU64} function HasMMX: Boolean; begin Result := True; end; {$else} function HasMMX: Boolean; // Helper method to determine whether the current processor supports MMX. asm PUSH EBX XOR EAX, EAX // Result := False PUSHFD // determine if the processor supports the CPUID command POP EDX MOV ECX, EDX XOR EDX, $200000 PUSH EDX POPFD PUSHFD POP EDX XOR ECX, EDX JZ @1 // no CPUID support so we can't even get to the feature information PUSH EDX POPFD MOV EAX, 1 DW $A20F // CPUID, EAX contains now version info and EDX feature information MOV EBX, EAX // free EAX to get the result value XOR EAX, EAX // Result := False CMP EBX, $50 JB @1 // if processor family is < 5 then it is not a Pentium class processor TEST EDX, $800000 JZ @1 // if the MMX bit is not set then we don't have MMX INC EAX // Result := True @1: POP EBX end; {$endif} //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrint} procedure PrtStretchDrawDIB(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap); // Stretch draw on to the new canvas. var Header, Bits: Pointer; HeaderSize, BitsSize: Cardinal; begin GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize); GetMem(Header, HeaderSize); GetMem(Bits, BitsSize); try GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^); StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top, DestRect.Right - DestRect.Left, DestRect.Bottom - DestRect.Top, 0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^), DIB_RGB_COLORS, SRCCOPY); finally FreeMem(Header); FreeMem(Bits); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableAccessible} procedure GetAccessibilityFactory; // Accessibility helper function to create a singleton class that will create or return // the IAccessible interface for the tree and the focused node. begin // Check to see if the class has already been created. if VTAccessibleFactory = nil then VTAccessibleFactory := TVTAccessibilityFactory.Create; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure InitializeGlobalStructures; // initialization of stuff global to the unit begin Initialized := True; // For the drag image a fast MMX blend routine is used. We have to make sure MMX is available. MMXAvailable := HasMMX; // There is a bug in Win95 and WinME (and potentially in Win98 too) regarding GetDCEx which causes sometimes // serious trouble within GDI (see method WMNCPaint). //IsWinNT := (Win32Platform and VER_PLATFORM_WIN32_NT) <> 0; IsWinNT := True; {$ifdef EnableOLE} // Initialize OLE subsystem for drag'n drop and clipboard operations. //todo: replace by Suceeded (see in windows unit) NeedToUnitialize := OleInitialize(nil) in [S_FALSE,S_OK]; {$endif} // Register the tree reference clipboard format. Others will be handled in InternalClipboarFormats. CF_VTREFERENCE := ClipboardRegisterFormat(CFSTR_VTREFERENCE); UtilityImages := TBitmap.Create; UtilityImages.Transparent := True; UtilityImages.LoadFromLazarusResource('VT_UTILITIES'); // Specify an useful timer resolution for timeGetTime. timeBeginPeriod(MinimumTimerInterval); // Delphi (at least version 6 and lower) does not provide a standard split cursor. // Hence we have to load our own. Screen.Cursors[crHeaderSplit] := LoadCursorFromLazarusResource('VT_HEADERSPLIT'); Screen.Cursors[crVertSplit] := LoadCursorFromLazarusResource('VT_VERTSPLIT'); // Clipboard format registration. // Native clipboard format. Needs a new identifier and has an average priority to allow other formats to take over. // This format is supposed to use the IStream storage format but unfortunately this does not work when // OLEFlushClipboard is used. Hence it is disabled until somebody finds a solution. CF_VIRTUALTREE := RegisterVTClipboardFormat(CFSTR_VIRTUALTREE, TBaseVirtualTree, 50, TYMED_HGLOBAL {or TYMED_ISTREAM}); // Specialized string tree formats. CF_HTML := RegisterVTClipboardFormat(CFSTR_HTML, TCustomVirtualStringTree, 80); CF_VRTFNOOBJS := RegisterVTClipboardFormat(CFSTR_RTFNOOBJS, TCustomVirtualStringTree, 84); CF_VRTF := RegisterVTClipboardFormat(CFSTR_RTF, TCustomVirtualStringTree, 85); CF_CSV := RegisterVTClipboardFormat(CFSTR_CSV, TCustomVirtualStringTree, 90); // Predefined clipboard formats. Just add them to the internal list. RegisterVTClipboardFormat(CF_TEXT, TCustomVirtualStringTree, 100); RegisterVTClipboardFormat(CF_UNICODETEXT, TCustomVirtualStringTree, 95); end; //---------------------------------------------------------------------------------------------------------------------- procedure FinalizeGlobalStructures; begin timeEndPeriod(MinimumTimerInterval); FreeAndNil(UtilityImages); if NeedToUnitialize then OleUninitialize; end; //----------------- TWorkerThread -------------------------------------------------------------------------------------- procedure AddThreadReference; begin if WorkerThread = nil then begin // Create an event used to trigger our worker thread when something is to do. WorkEvent := TEvent.Create(nil, False, False, ''); //todo: see how to check if a event was succesfully created under linux since handle is allways 0 {$ifdef Windows} if WorkEvent.Handle = TEventHandle(0) then Raise Exception.Create('VirtualTreeView - Error creating TEvent instance'); {$endif} // Create worker thread, initialize it and send it to its wait loop. WorkerThread := TWorkerThread.Create(False); end; Inc(WorkerThread.FRefCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure ReleaseThreadReference(Tree: TBaseVirtualTree); begin if Assigned(WorkerThread) then begin Dec(WorkerThread.FRefCount); // Make sure there is no reference remaining to the releasing tree. Tree.InterruptValidation; if WorkerThread.FRefCount = 0 then begin with WorkerThread do begin Terminate; WorkEvent.SetEvent; //lcl: probably not necessary under fpc. Remove later // The following work around is no longer necessary with Delphi 6 and up. {$ifndef fpc} // There is a problem when the thread is freed in the exit code of a DLL. This can happen when a tree is // destroyed on unload of a DLL (e.g. control panel applet). In this case only the main thread will get // CPU time, other threads will never awake again. The VCL however waits for a thread when freeing it // which will result in a deadlock (the WaitFor call does not return because the thread does not get CPU time). // If a thread is however suspended then the VCL does not wait and all is fine. if IsLibrary then Suspend; {$endif} WorkerThread.Free; end; WorkerThread := nil; WorkEvent.Free; end; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TWorkerThread.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended); FWaiterList := TThreadList.Create; end; //---------------------------------------------------------------------------------------------------------------------- destructor TWorkerThread.Destroy; begin // First let the ancestor stop the thread before freeing our resources. inherited; FWaiterList.Free; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.CancelValidation(Tree: TBaseVirtualTree); var Msg: TMsg; begin // Wait for any references to this tree to be released. // Pump WM_CHANGESTATE messages so the thread doesn't block on SendMessage calls. while FCurrentTree = Tree do begin if Tree.HandleAllocated and PeekMessage(Msg, Tree.Handle, WM_CHANGESTATE, WM_CHANGESTATE, PM_REMOVE) then begin //todo: see if is correct / will work Application.ProcessMessages; //TranslateMessage(Msg); //DispatchMessage(Msg); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.ChangeTreeStates(EnterStates, LeaveStates: TChangeStates); begin if Assigned(FCurrentTree) and (FCurrentTree.HandleAllocated) then SendMessage(FCurrentTree.Handle, WM_CHANGESTATE, Byte(EnterStates), Byte(LeaveStates)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.Execute; // Does some background tasks, like validating tree caches. var EnterStates, LeaveStates: TChangeStates; begin while not Terminated do begin WorkEvent.WaitFor(INFINITE); if not Terminated then begin // Get the next waiting tree. with FWaiterList.LockList do try if Count > 0 then begin FCurrentTree := Items[0]; // Remove this tree from waiter list. Delete(0); // If there is yet another tree to work on then set the work event to keep looping. if Count > 0 then WorkEvent.SetEvent; end else FCurrentTree := nil; finally FWaiterList.UnlockList; end; // Something to do? if Assigned(FCurrentTree) then begin try ChangeTreeStates([csValidating], [csUseCache]); EnterStates := []; if not (tsStopValidation in FCurrentTree.FStates) and FCurrentTree.DoValidateCache then EnterStates := [csUseCache]; finally LeaveStates := [csValidating, csStopValidation]; if csUseCache in EnterStates then Include(LeaveStates, csValidationNeeded); ChangeTreeStates(EnterStates, LeaveStates); FCurrentTree := nil; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.AddTree(Tree: TBaseVirtualTree); begin Assert(Assigned(Tree), 'Tree must not be nil.'); // Remove validation stop flag, just in case it is still set. Tree.DoStateChange([], [tsStopValidation]); with FWaiterList.LockList do try if IndexOf(Tree) = -1 then Add(Tree); finally FWaiterList.UnlockList; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TWorkerThread.RemoveTree(Tree: TBaseVirtualTree); begin Assert(Assigned(Tree), 'Tree must not be nil.'); with FWaiterList.LockList do try Remove(Tree); finally FWaiterList.UnlockList; end; CancelValidation(Tree); end; //----------------- TBufferedUTF8String -------------------------------------------------------------------------------- const AllocIncrement = 2 shl 11; // Must be a power of 2. destructor TBufferedUTF8String.Destroy; begin FreeMem(FStart); inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsAnsiString: AnsiString; begin //an implicit conversion is done Result := AsUTF16String; end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsUTF16String: UnicodeString; begin //todo: optimize Result := UTF8Decode(AsUTF8String); end; //---------------------------------------------------------------------------------------------------------------------- function TBufferedUTF8String.GetAsUTF8String: String; begin SetString(Result, FStart, FPosition - FStart); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBufferedUTF8String.Add(const S: String); var NewLen, LastOffset, Len: Integer; begin Len := Length(S); // Make room for the new string. if FEnd - FPosition <= Len then begin // Round up NewLen so it is always a multiple of AllocIncrement. NewLen := FEnd - FStart + (Len + AllocIncrement - 1) and not (AllocIncrement - 1); // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. LastOffset := FPosition - FStart; ReallocMem(FStart, NewLen); FPosition := FStart + LastOffset; FEnd := FStart + NewLen; end; Move(PChar(S)^, FPosition^, Len); Inc(FPosition, Len); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBufferedUTF8String.AddNewLine; var NewLen, LastOffset: Integer; begin // Make room for the CR/LF characters. if FEnd - FPosition <= 4 then begin //todo: see in calculation of NewLen is correct for String // Round up NewLen so it is always a multiple of AllocIncrement. NewLen := FEnd - FStart + (2 + AllocIncrement - 1) and not (AllocIncrement - 1); // Keep last offset to restore it correctly in the case that FStart gets a new memory block assigned. LastOffset := FPosition - FStart; ReallocMem(FStart, NewLen); FPosition := FStart + LastOffset; FEnd := FStart + NewLen; end; FPosition^ := #13; Inc(FPosition); FPosition^ := #10; Inc(FPosition); end; //----------------- TCustomVirtualTreeOptions -------------------------------------------------------------------------- constructor TCustomVirtualTreeOptions.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FPaintOptions := DefaultPaintOptions; FAnimationOptions := DefaultAnimationOptions; FAutoOptions := DefaultAutoOptions; FSelectionOptions := DefaultSelectionOptions; FMiscOptions := DefaultMiscOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetAnimationOptions(const Value: TVTAnimationOptions); begin FAnimationOptions := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetAutoOptions(const Value: TVTAutoOptions); var ChangedOptions: TVTAutoOptions; begin if FAutoOptions <> Value then begin // Exclusive ORing to get all entries wich are in either set but not in both. ChangedOptions := FAutoOptions + Value - (FAutoOptions * Value); FAutoOptions := Value; with FOwner do if (toAutoSpanColumns in ChangedOptions) and not (csLoading in ComponentState) and HandleAllocated then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetMiscOptions(const Value: TVTMiscOptions); var ToBeSet, ToBeCleared: TVTMiscOptions; begin if FMiscOptions <> Value then begin ToBeSet := Value - FMiscOptions; ToBeCleared := FMiscOptions - Value; FMiscOptions := Value; {$ifndef Windows} Exclude(FMiscOptions,toAcceptOLEDrop); Exclude(ToBeCleared,toAcceptOLEDrop); Exclude(ToBeSet,toAcceptOLEDrop); {$endif} with FOwner do if not (csLoading in ComponentState) and HandleAllocated then begin if toCheckSupport in ToBeSet + ToBeCleared then begin CheckImageListNeeded; Invalidate; end; if not (csDesigning in ComponentState) then begin if toFullRepaintOnResize in (TobeSet + ToBeCleared) then //todo_lcl_check RecreateWnd(FOwner); if toAcceptOLEDrop in ToBeSet then RegisterDragDrop(Handle, DragManager as IDropTarget); if toAcceptOLEDrop in ToBeCleared then RevokeDragDrop(Handle); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetPaintOptions(const Value: TVTPaintOptions); var ToBeSet, ToBeCleared: TVTPaintOptions; begin if FPaintOptions <> Value then begin ToBeSet := Value - FPaintOptions; ToBeCleared := FPaintOptions - Value; FPaintOptions := Value; with FOwner do if HandleAllocated then begin {$ifdef ThemeSupport} //todo // if (tsUseThemes in FStates) or (toThemeAware in ToBeSet) then // if (toUseExplorerTheme in ToBeSet) and IsWinVistaOrAbove then // SetWindowTheme(Handle, 'explorer', nil) // else // SetWindowTheme(Handle, '', nil); {$endif ThemeSupport} if not (csLoading in ComponentState) then begin {$ifdef ThemeSupport} if (toThemeAware in ToBeSet + ToBeCleared) or (toUseExplorerTheme in ToBeSet + ToBeCleared) then begin if (toThemeAware in ToBeSet) and ThemeServices.ThemesEnabled then DoStateChange([tsUseThemes]) else if (toThemeAware in ToBeCleared) then DoStateChange([], [tsUseThemes]); PrepareBitmaps(True, False); RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_VALIDATE or RDW_FRAME); end else {$endif ThemeSupport} Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.SetSelectionOptions(const Value: TVTSelectionOptions); var ToBeSet, ToBeCleared: TVTSelectionOptions; begin if FSelectionOptions <> Value then begin ToBeSet := Value - FSelectionOptions; ToBeCleared := FSelectionOptions - Value; FSelectionOptions := Value; with FOwner do begin if (toMultiSelect in (ToBeCleared + ToBeSet)) or ([toLevelSelectConstraint, toSiblingSelectConstraint] * ToBeSet <> []) then ClearSelection; if (toExtendedFocus in ToBeCleared) and (FFocusedColumn > 0) and HandleAllocated then begin FFocusedColumn := FHeader.MainColumn; Invalidate; end; if not (toExtendedFocus in FSelectionOptions) then FFocusedColumn := FHeader.MainColumn; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualTreeOptions.AssignTo(Dest: TPersistent); begin if Dest is TCustomVirtualTreeOptions then begin with TCustomVirtualTreeOptions(Dest) do begin PaintOptions := Self.PaintOptions; AnimationOptions := Self.AnimationOptions; AutoOptions := Self.AutoOptions; SelectionOptions := Self.SelectionOptions; MiscOptions := Self.MiscOptions; end; end else inherited; end; {$i vtvdragmanager.inc} //----------------- TVirtualTreeHintWindow ----------------------------------------------------------------------------- procedure TVirtualTreeHintWindow.WMShowWindow(var Message: TLMShowWindow); // Clear hint data when the window becomes hidden. begin if not Message.Show then begin // Don't touch the last hint rectangle stored in the associated tree to avoid flickering in certain situations. Finalize(FHintData); FillChar(FHintData, SizeOf(FHintData), 0); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeHintWindow.Paint; begin with FHintData do begin if Tree is TCustomVirtualDrawTree and Assigned(Node) then begin // The draw tree has by default no hint text so let it draw the hint itself. // HintBorderWidth is a private constant in hint code and is set to two TCustomVirtualDrawTree(Tree).DoDrawHint(Canvas, Node, Rect(0, 0, Width - 2, Height - 2), Column); end else inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeHintWindow.CalcHintRect(MaxWidth: Integer; const AHint: string; AData: Pointer): TRect; var P: TPoint; begin if AData = nil then // Defensive approach, it *can* happen that AData is nil. Maybe when several user defined hint classes are used. Result := Rect(0, 0, 0, 0) else begin FHintData := PVTHintData(AData)^; with FHintData do begin // The draw tree gets its hint size by the application (but only if not a header hint is about to show). // This size has already been determined in CMHintShow. if (Tree is TCustomVirtualDrawTree) and Assigned(Node) then Result := HintRect else begin //todo remove this define as soon as 0.9.30 is released to avoid future problems if Column <= NoColumn then begin BidiMode := Tree.BidiMode; Alignment := Tree.Alignment; end else begin BidiMode := Tree.Header.Columns[Column].BidiMode; Alignment := Tree.Header.Columns[Column].Alignment; end; //select font according to the type of hint if (Node = nil) or (Tree.FHintMode <> hmToolTip) then Canvas.Font := Screen.HintFont else begin Canvas.Font := Tree.Font; //necessary to set customized fonts if Tree is TCustomVirtualStringTree then with TCustomVirtualStringTree(Tree) do DoPaintText(Node, Self.Canvas, Column, ttNormal); //force the default hint font color Canvas.Font.Color := Screen.HintFont.Color; end; //let THintWindow do the job Result := inherited CalcHintRect(MaxWidth, AHint, AData); //fix position taking into account bidimode and control bounds if (Tree.HintMode <> hmTooltip) or ((Result.Right - Result.Left) < Tree.Width) then begin if BiDiMode = bdLeftToRight then begin P := Tree.ClientToScreen(Point(0, 0)); HintInfo^.HintPos.X := Max(P.X, HintInfo^.HintPos.X); end else begin if (Tree.HintMode = hmTooltip) and (Node <> nil) then begin P := Tree.ClientToScreen(Point(Min(Tree.ClientWidth, HintInfo^.CursorRect.Right), 0)); Dec(P.X, Result.Right); HintInfo^.HintPos.X := Max(P.X, HintInfo^.HintPos.X); end else Dec(HintInfo^.HintPos.X, Result.Right - 20); end; end; end; end; end; end; //----------------- TVTDragImage --------------------------------------------------------------------------------------- constructor TVTDragImage.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FTransparency := 128; FPreBlendBias := 0; FPostBlendBias := 0; FFade := False; FRestriction := dmrNone; FColorKey := clNone; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTDragImage.Destroy; begin EndDrag; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.GetVisible: Boolean; // Returns True if the internal drag image is used (i.e. the system does not natively support drag images) and // the internal image is currently visible on screen. begin Result := FStates * [disHidden, disInDrag, disPrepared, disSystemSupport] = [disInDrag, disPrepared]; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.InternalShowDragImage(ScreenDC: HDC); // Frequently called helper routine to actually do the blend and put it onto the screen. // Only used if the system does not support drag images. var BlendMode: TBlendMode; begin with FAlphaImage do BitBlt(Canvas.Handle, 0, 0, Width, Height, FBackImage.Canvas.Handle, 0, 0, SRCCOPY); if not FFade and (FColorKey = clNone) then BlendMode := bmConstantAlpha else BlendMode := bmMasterAlpha; with FDragImage do AlphaBlend(Canvas.Handle, FAlphaImage.Canvas.Handle, Rect(0, 0, Width, Height), Point(0, 0), BlendMode, FTransparency, FPostBlendBias); with FAlphaImage do BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.MakeAlphaChannel(Source, Target: TBitmap); // Helper method to create a proper alpha channel in Target (which must be in 32 bit pixel format), depending // on the settings for the drag image and the color values in Source. // Only used if the system does not support drag images. type PBGRA = ^TBGRA; TBGRA = packed record case Boolean of False: (Color: Cardinal); True: (BGR: array[0..2] of Byte; Alpha: Byte); end; var Color, ColorKeyRef: COLORREF; UseColorKey: Boolean; SourceRun, TargetRun: PBGRA; X, Y, MaxDimension, HalfWidth, HalfHeight: Integer; T: Extended; SourceBits, TargetBits: Pointer; begin {$ifdef EnableAdvancedGraphics} SourceBits := GetBitmapBitsFromBitmap(Source.Handle); TargetBits := GetBitmapBitsFromBitmap(Target.Handle); if (SourceBits = nil) or (TargetBits = nil) then Exit; UseColorKey := ColorKey <> clNone; ColorKeyRef := ColorToRGB(ColorKey) and $FFFFFF; // Color values are in the form BGR (red on LSB) while bitmap colors are in the form ARGB (blue on LSB) // hence we have to swap red and blue in the color key. with TBGRA(ColorKeyRef) do begin X := BGR[0]; BGR[0] := BGR[2]; BGR[2] := X; end; with Target do begin MaxDimension := Max(Width, Height); HalfWidth := Width div 2; HalfHeight := Height div 2; for Y := 0 to Height - 1 do begin TargetRun := CalculateScanline(TargetBits, Width, Height, Y); SourceRun := CalculateScanline(SourceBits, Source.Width, Source.Height, Y); for X := 0 to Width - 1 do begin Color := SourceRun.Color and $FFFFFF; if UseColorKey and (Color = ColorKeyRef) then TargetRun.Alpha := 0 else begin // If the color is not the given color key (or none is used) then do full calculation of a bell curve. T := exp(-8 * Sqrt(Sqr((X - HalfWidth) / MaxDimension) + Sqr((Y - HalfHeight) / MaxDimension))); TargetRun.Alpha := Round(255 * T); end; Inc(SourceRun); Inc(TargetRun); end; end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.DragTo(const P: TPoint; ForceRepaint: Boolean): Boolean; // Moves the drag image to a new position, which is determined from the passed point P and the previous // mouse position. // ForceRepaint is True if something on the screen changed and the back image must be refreshed. var ScreenDC: HDC; DeltaX, DeltaY: Integer; // optimized drag image move support RSamp1, RSamp2, // newly added parts from screen which will be overwritten RDraw1, RDraw2, // parts to be restored to screen RScroll, RClip: TRect; // ScrollDC of the existent background begin // Determine distances to move the drag image. Take care for restrictions. case FRestriction of dmrHorizontalOnly: begin DeltaX := FLastPosition.X - P.X; DeltaY := 0; end; dmrVerticalOnly: begin DeltaX := 0; DeltaY := FLastPosition.Y - P.Y; end; else // dmrNone DeltaX := FLastPosition.X - P.X; DeltaY := FLastPosition.Y - P.Y; end; Result := (DeltaX <> 0) or (DeltaY <> 0) or ForceRepaint; if Result then begin if Visible then begin // All this stuff is only called if we have to handle the drag image ourselves. If the system supports // drag image then this is all never executed. ScreenDC := GetDC(0); try if (Abs(DeltaX) >= FDragImage.Width) or (Abs(DeltaY) >= FDragImage.Height) or ForceRepaint then begin // If moved more than image size then just restore old screen and blit image to new position. BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, FBackImage.Width, FBackImage.Height, FBackImage.Canvas.Handle, 0, 0, SRCCOPY); if ForceRepaint then UpdateWindow(FOwner.Handle); Inc(FImagePosition.X, -DeltaX); Inc(FImagePosition.Y, -DeltaY); BitBlt(FBackImage.Canvas.Handle, 0, 0, FBackImage.Width, FBackImage.Height, ScreenDC, FImagePosition.X, FImagePosition.Y, SRCCOPY); end else begin // overlapping copy FillDragRectangles(FDragImage.Width, FDragImage.Height, DeltaX, DeltaY, RClip, RScroll, RSamp1, RSamp2, RDraw1, RDraw2); with FBackImage.Canvas do begin // restore uncovered areas of the screen if DeltaX = 0 then begin with RDraw2 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end else begin if DeltaY = 0 then begin with RDraw1 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end else begin with RDraw1 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); with RDraw2 do BitBlt(ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, Right, Bottom, Handle, Left, Top, SRCCOPY); end; end; //todo: implement ScrollDC. Alternatively reimplement drag operations {$ifndef INCOMPLETE_WINAPI} // move existent background ScrollDC(Handle, DeltaX, DeltaY, RScroll, RClip, 0, nil); {$endif} Inc(FImagePosition.X, -DeltaX); Inc(FImagePosition.Y, -DeltaY); // Get first and second additional rectangle from screen. if DeltaX = 0 then begin with RSamp2 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end else if DeltaY = 0 then begin with RSamp1 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end else begin with RSamp1 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); with RSamp2 do BitBlt(Handle, Left, Top, Right, Bottom, ScreenDC, FImagePosition.X + Left, FImagePosition.Y + Top, SRCCOPY); end; end; end; InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; FLastPosition.X := P.X; FLastPosition.Y := P.Y; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.EndDrag; begin HideDragImage; FStates := FStates - [disInDrag, disPrepared]; FBackImage.Free; FBackImage := nil; FDragImage.Free; FDragImage := nil; FAlphaImage.Free; FAlphaImage := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.GetDragImageRect: TRect; // Returns the current size and position of the drag image (screen coordinates). begin if Visible then begin with FBackImage do Result := Rect(FImagePosition.X, FImagePosition.Y, FImagePosition.X + Width, FImagePosition.Y + Height); end else Result := Rect(0, 0, 0, 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.HideDragImage; var ScreenDC: HDC; begin if Visible then begin Include(FStates, disHidden); ScreenDC := GetDC(0); try // restore screen with FBackImage do BitBlt(ScreenDC, FImagePosition.X, FImagePosition.Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); finally ReleaseDC(0, ScreenDC); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.PrepareDrag(DragImage: TBitmap; const ImagePosition, HotSpot: TPoint; const DataObject: IDataObject); // Creates all necessary structures to do alpha blended dragging using the given image. // ImagePostion and Hotspot are given in screen coordinates. The first determines where to place the drag image while // the second is the initial mouse position. // This method also determines whether the system supports drag images natively. If so then only minimal structures // are created. var Width, Height: Integer; DragSourceHelper: IDragSourceHelper; DragInfo: TSHDragImage; begin Width := DragImage.Width; Height := DragImage.Height; // Determine whether the system supports the drag helper interfaces. if Assigned(DataObject) and Succeeded(CoCreateInstance(CLSID_DragDropHelper, nil, CLSCTX_INPROC_SERVER, IID_IDragSourceHelper, DragSourceHelper)) then begin Include(FStates, disSystemSupport); // Supply the drag source helper with our drag image. DragInfo.sizeDragImage.cx := Width; DragInfo.sizeDragImage.cy := Height; DragInfo.ptOffset.x := Width div 2; DragInfo.ptOffset.y := Height div 2; //todo: replace CopyImage. Alternatively reimplement Drag support {$ifndef INCOMPLETE_WINAPI} DragInfo.hbmpDragImage := CopyImage(DragImage.Handle, IMAGE_BITMAP, Width, Height, LR_COPYRETURNORG); {$else} DragInfo.hbmpDragImage := 0; {$endif} DragInfo.ColorRef := ColorToRGB(FColorKey); if not Succeeded(DragSourceHelper.InitializeFromBitmap(DragInfo, DataObject)) then begin DeleteObject(DragInfo.hbmpDragImage); Exclude(FStates, disSystemSupport); end; end else Exclude(FStates, disSystemSupport); if MMXAvailable and not (disSystemSupport in FStates) then begin FLastPosition := HotSpot; FDragImage := TBitmap.Create; FDragImage.PixelFormat := pf32Bit; FDragImage.Width := Width; FDragImage.Height := Height; FAlphaImage := TBitmap.Create; FAlphaImage.PixelFormat := pf32Bit; FAlphaImage.Width := Width; FAlphaImage.Height := Height; FBackImage := TBitmap.Create; FBackImage.PixelFormat := pf32Bit; FBackImage.Width := Width; FBackImage.Height := Height; // Copy the given drag image and apply pre blend bias if required. if FPreBlendBias = 0 then with FDragImage do BitBlt(Canvas.Handle, 0, 0, Width, Height, DragImage.Canvas.Handle, 0, 0, SRCCOPY) else AlphaBlend(DragImage.Canvas.Handle, FDragImage.Canvas.Handle, Rect(0, 0, Width, Height), Point(0, 0), bmConstantAlpha, 255, FPreBlendBias); // Create a proper alpha channel also if no fading is required (transparent parts). MakeAlphaChannel(DragImage, FDragImage); FImagePosition := ImagePosition; // Initially the drag image is hidden and will be shown during the immediately following DragEnter event. FStates := FStates + [disInDrag, disHidden, disPrepared]; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.RecaptureBackground(Tree: TBaseVirtualTree; R: TRect; VisibleRegion: HRGN; CaptureNCArea, ReshowDragImage: Boolean); // Notification by the drop target tree to update the background image because something in the tree has changed. // Note: The passed rectangle is given in client coordinates of the current drop target tree (given in Tree). // The caller does not check if the given rectangle is actually within the drag image. Hence this method must do // all the checks. // This method does nothing if the system manages the drag image. {$ifndef INCOMPLETE_WINAPI} var DragRect, ClipRect: TRect; PaintTarget: TPoint; PaintOptions: TVTInternalPaintOptions; ScreenDC: HDC; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} // Recapturing means we want the tree to paint the new part into our back bitmap instead to the screen. if Visible then begin // Create the minimum rectangle to be recaptured. MapWindowPoints(Tree.Handle, 0, R, 2); DragRect := GetDragImageRect; IntersectRect(R, R, DragRect); OffsetRgn(VisibleRegion, -DragRect.Left, -DragRect.Top); // The target position for painting in the drag image is relative and can be determined from screen coordinates too. PaintTarget.X := R.Left - DragRect.Left; PaintTarget.Y := R.Top - DragRect.Top; // The source rectangle is determined by the offsets in the tree. MapWindowPoints(0, Tree.Handle, R, 2); OffsetRect(R, -Tree.FOffsetX, -Tree.FOffsetY); // Finally let the tree paint the relevant part and upate the drag image on screen. PaintOptions := [poBackground, poColumnColor, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]; with FBackImage do begin ClipRect.TopLeft := PaintTarget; ClipRect.Right := ClipRect.Left + R.Right - R.Left; ClipRect.Bottom := ClipRect.Top + R.Bottom - R.Top; Tree.LimitPaintingToArea(Canvas, ClipRect, VisibleRegion); Tree.PaintTree(Canvas, R, PaintTarget, PaintOptions); if CaptureNCArea then begin // For the non-client area we only need the visible region of the window as limit for painting. SelectClipRgn(Canvas.Handle, VisibleRegion); // Since WM_PRINT cannot be given a position where to draw we simply move the window origin and // get the same effect. GetWindowRect(Tree.Handle, ClipRect); SetWindowOrgEx(Canvas.Handle, DragRect.Left - ClipRect.Left, DragRect.Top - ClipRect.Top, nil); //todo: see what todo here //Tree.Perform(WM_PRINT, Integer(Canvas.Handle), PRF_NONCLIENT); SetWindowOrgEx(Canvas.Handle, 0, 0, nil); end; SelectClipRgn(Canvas.Handle, 0); if ReshowDragImage then begin GDIFlush; ScreenDC := GetDC(0); try InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTDragImage.ShowDragImage; // Shows the drag image after it has been hidden by HideDragImage. // Note: there might be a new background now. // Also this method does nothing if the system manages the drag image. {$ifndef INCOMPLETE_WINAPI} var ScreenDC: HDC; {$endif} begin {$ifndef INCOMPLETE_WINAPI} if FStates * [disInDrag, disHidden, disPrepared, disSystemSupport] = [disInDrag, disHidden, disPrepared] then begin Exclude(FStates, disHidden); GDIFlush; ScreenDC := GetDC(0); try BitBlt(FBackImage.Canvas.Handle, 0, 0, FBackImage.Width, FBackImage.Height, ScreenDC, FImagePosition.X, FImagePosition.Y, SRCCOPY); InternalShowDragImage(ScreenDC); finally ReleaseDC(0, ScreenDC); end; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TVTDragImage.WillMove(const P: TPoint): Boolean; // This method determines whether the drag image would "physically" move when DragTo would be called with the same // target point. // Always returns False if the system drag image support is available. var DeltaX, DeltaY: Integer; begin Result := Visible; if Result then begin // Determine distances to move the drag image. Take care for restrictions. case FRestriction of dmrHorizontalOnly: begin DeltaX := FLastPosition.X - P.X; DeltaY := 0; end; dmrVerticalOnly: begin DeltaX := 0; DeltaY := FLastPosition.Y - P.Y; end; else // dmrNone DeltaX := FLastPosition.X - P.X; DeltaY := FLastPosition.Y - P.Y; end; Result := (DeltaX <> 0) or (DeltaY <> 0); end; end; //----------------- TVirtualTreeColumn --------------------------------------------------------------------------------- constructor TVirtualTreeColumn.Create(Collection: TCollection); begin FMinWidth := 10; FMaxWidth := 10000; FImageIndex := -1; FMargin := 4; FSpacing := 4; FText := ''; FOptions := DefaultColumnOptions; FAlignment := taLeftJustify; FBidiMode := bdLeftToRight; FColor := clWindow; FLayout := blGlyphLeft; FBonusPixel := False; FCaptionAlignment := taLeftJustify; FCheckType := ctCheckBox; FCheckState := csUncheckedNormal; FCheckBox := False; FHasImage := False; inherited Create(Collection); FWidth := Owner.FDefaultWidth; FLastWidth := Owner.FDefaultWidth; //lcl: setting FPosition here will override the Design time value //FPosition := Owner.Count - 1; // Read parent bidi mode and color values as default values. ParentBiDiModeChanged; ParentColorChanged; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVirtualTreeColumn.Destroy; var I: Integer; //--------------- local function --------------------------------------------- procedure AdjustColumnIndex(var ColumnIndex: TColumnIndex); begin if Index = ColumnIndex then ColumnIndex := NoColumn else if Index < ColumnIndex then Dec(ColumnIndex); end; //--------------- end local function ----------------------------------------- begin // Check if this column is somehow referenced by its collection parent or the header. with Owner do begin // If the columns collection object is currently deleting all columns // then we don't need to check the various cached indices individually. if not FClearing then begin IndexChanged(Index, -1); AdjustColumnIndex(FHoverIndex); AdjustColumnIndex(FDownIndex); AdjustColumnIndex(FTrackIndex); AdjustColumnIndex(FClickIndex); with Header do begin AdjustColumnIndex(FAutoSizeIndex); if Index = FMainColumn then begin // If the current main column is about to be destroyed then we have to find a new main column. FMainColumn := NoColumn; for I := 0 to Count - 1 do if I <> Index then begin FMainColumn := I; Break; end; end; AdjustColumnIndex(FSortColumn); end; end; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetCaptionAlignment: TAlignment; begin if coUseCaptionAlignment in FOptions then Result := FCaptionAlignment else Result := FAlignment; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetLeft: Integer; begin Result := FLeft; if [coVisible, coFixed] * FOptions <> [coVisible, coFixed] then Dec(Result, Owner.Header.Treeview.FEffectiveOffsetX); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsBiDiModeStored: Boolean; begin Result := not (coParentBiDiMode in FOptions); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsCaptionAlignmentStored: Boolean; begin Result := coUseCaptionAlignment in FOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.IsColorStored: Boolean; begin Result := not (coParentColor in FOptions); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; Changed(False); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetBiDiMode(Value: TBiDiMode); begin if Value <> FBiDiMode then begin FBiDiMode := Value; Exclude(FOptions, coParentBiDiMode); Changed(False); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCaptionAlignment(const Value: TAlignment); begin if not (coUseCaptionAlignment in FOptions) or (FCaptionAlignment <> Value) then begin FCaptionAlignment := Value; Exclude(FOptions, coUseCaptionAlignment); // Setting the alignment affects also the tree, hence invalidate it too. Owner.Header.Invalidate(Self); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetColor(const Value: TColor); begin if FColor <> Value then begin FColor := Value; Exclude(FOptions, coParentColor); Changed(False); Owner.Header.TreeView.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckBox(Value: boolean); begin if Value <> FCheckBox then begin FCheckBox := Value; //lcl if FCheckBox then Owner.Header.Treeview.CheckImageListNeeded; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckState(Value: TCheckState); begin if Value <> FCheckState then begin FCheckState := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetCheckType(Value: TCheckType); begin if Value <> FCheckType then begin FCheckType := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetImageIndex(Value: TImageIndex); begin if Value <> FImageIndex then begin FImageIndex := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetLayout(Value: TVTHeaderColumnLayout); begin if FLayout <> Value then begin FLayout := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMargin(Value: Integer); begin // Compatibility setting for -1. if Value < 0 then Value := 4; if FMargin <> Value then begin FMargin := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMaxWidth(Value: Integer); begin if Value < FMinWidth then Value := FMinWidth; if not IsWinNT and (Value > 10000) then Value := 10000; FMaxWidth := Value; SetWidth(FWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetMinWidth(Value: Integer); begin if Value < 0 then Value := 0; if Value > FMaxWidth then Value := FMaxWidth; FMinWidth := Value; SetWidth(FWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetOptions(Value: TVTColumnOptions); var ToBeSet, ToBeCleared: TVTColumnOptions; AVisibleChanged, ColorChanged: Boolean; begin if FOptions <> Value then begin ToBeCleared := FOptions - Value; ToBeSet := Value - FOptions; FOptions := Value; AVisibleChanged := coVisible in (ToBeSet + ToBeCleared); ColorChanged := coParentColor in ToBeSet; if coParentBidiMode in ToBeSet then ParentBiDiModeChanged; if ColorChanged then ParentColorChanged; if coAutoSpring in ToBeSet then FSpringRest := 0; if ((coFixed in ToBeSet) or (coFixed in ToBeCleared)) and (coVisible in FOptions) then Owner.Header.RescaleHeader; Changed(False); // Need to repaint and adjust the owner tree too. //lcl: fpc refuses to compile the original code by no aparent reason. //Found: Was confounding TControl.VisibleChanged with Owner, Header.Treeview do if not (csLoading in ComponentState) and (AVisibleChanged or ColorChanged) and (UpdateCount = 0) and HandleAllocated then begin Invalidate; if AVisibleChanged then UpdateHorizontalScrollBar(False); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetPosition(Value: TColumnPosition); var Temp: TColumnIndex; begin if csLoading in Owner.Header.Treeview.ComponentState then // Only cache the position for final fixup when loading from DFM. FPosition := Value else begin if Value >= TColumnPosition(Collection.Count) then Value := Collection.Count - 1; if FPosition <> Value then begin with Owner do begin InitializePositionArray; Header.Treeview.CancelEditNode; AdjustPosition(Self, Value); Self.Changed(False); // Need to repaint. with Header do begin if (UpdateCount = 0) and Treeview.HandleAllocated then begin Invalidate(Self); Treeview.Invalidate; end; end; end; // If the moved column is now within the fixed columns then we make it fixed as well. If it's not // we clear the fixed state (in case that fixed column is moved outside fixed area). if (coFixed in FOptions) and (FPosition > 0) then Temp := Owner.ColumnFromPosition(FPosition - 1) else Temp := Owner.ColumnFromPosition(FPosition + 1); if Temp <> NoColumn then begin if coFixed in Owner[Temp].Options then Options := Options + [coFixed] else Options := Options - [coFixed] end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetSpacing(Value: Integer); begin if FSpacing <> Value then begin FSpacing := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetStyle(Value: TVirtualTreeColumnStyle); begin if FStyle <> Value then begin FStyle := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetText(const Value: String); begin if FText <> Value then begin FText := Value; Changed(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SetWidth(Value: Integer); var EffectiveMaxWidth, EffectiveMinWidth, TotalFixedMaxWidth, TotalFixedMinWidth: Integer; I: TColumnIndex; begin if not (hsScaling in Owner.FHeader.FStates) then if ([coVisible, coFixed] * FOptions = [coVisible, coFixed]) then begin with Owner, FHeader, FFixedAreaConstraints, TreeView do begin TotalFixedMinWidth := 0; TotalFixedMaxWidth := 0; for I := 0 to FColumns.Count - 1 do if ([coVisible, coFixed] * FColumns[I].FOptions = [coVisible, coFixed]) then begin Inc(TotalFixedMaxWidth, FColumns[I].FMaxWidth); Inc(TotalFixedMinWidth, FColumns[I].FMinWidth); end; // The percentage values have precedence over the pixel values. TotalFixedMinWidth := IfThen(FMaxWidthPercent > 0, Min((ClientWidth * FMaxWidthPercent) div 100, TotalFixedMinWidth), TotalFixedMinWidth); TotalFixedMaxWidth := IfThen(FMinWidthPercent > 0, Max((ClientWidth * FMinWidthPercent) div 100, TotalFixedMaxWidth), TotalFixedMaxWidth); EffectiveMaxWidth := Min(TotalFixedMaxWidth - (GetVisibleFixedWidth - Self.FWidth), FMaxWidth); EffectiveMinWidth := Max(TotalFixedMinWidth - (GetVisibleFixedWidth - Self.FWidth), FMinWidth); Value := Min(Max(Value, EffectiveMinWidth), EffectiveMaxWidth); if FMinWidthPercent > 0 then Value := Max((ClientWidth * FMinWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value); if FMaxWidthPercent > 0 then Value := Min((ClientWidth * FMaxWidthPercent) div 100 - GetVisibleFixedWidth + Self.FWidth, Value); end; end else Value := Min(Max(Value, FMinWidth), FMaxWidth); if FWidth <> Value then begin FLastWidth := FWidth; if not (hsResizing in Owner.Header.States) then FBonusPixel := False; with Owner, Header do begin if not (hoAutoResize in FOptions) or (Index <> FAutoSizeIndex) then begin FWidth := Value; UpdatePositions; end; if not (csLoading in Treeview.ComponentState) and (UpdateCount = 0) then begin if hoAutoResize in FOptions then AdjustAutoSize(Index); Treeview.DoColumnResize(Index); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ComputeHeaderLayout(DC: HDC; const Client: TRect; UseHeaderGlyph, UseSortGlyph: Boolean; var HeaderGlyphPos, SortGlyphPos: TPoint; var TextBounds: TRect; DrawFormat: Cardinal; CalculateTextRect: Boolean = False); // The layout of a column header is determined by a lot of factors. This method takes them all into account and // determines all necessary positions and bounds: // - for the header text // - the header glyph // - the sort glyph var TextSize: TSize; TextPos, ClientSize, HeaderGlyphSize, SortGlyphSize: TPoint; CurrentAlignment: TAlignment; MinLeft, MaxRight, TextSpacing: Integer; UseText: Boolean; R: TRect; begin UseText := Length(FText) > 0; // If nothing is to show then don't waste time with useless preparation. if not (UseText or UseHeaderGlyph or UseSortGlyph) then Exit; CurrentAlignment := CaptionAlignment; if FBidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(CurrentAlignment); // Calculate sizes of the involved items. ClientSize := Point(Client.Right - Client.Left, Client.Bottom - Client.Top); with Owner, Header do begin if UseHeaderGlyph then if not FCheckBox then HeaderGlyphSize := Point(FImages.Width, FImages.Height) else HeaderGlyphSize := Point(Treeview.CheckImages.Width, Treeview.CheckImages.Height) else HeaderGlyphSize := Point(0, 0); if UseSortGlyph then begin SortGlyphSize := Point(UtilityImages.Height, UtilityImages.Height); // In any case, the sort glyph is vertically centered. SortGlyphPos.Y := (ClientSize.Y - SortGlyphSize.Y) div 2; end else SortGlyphSize := Point(0, 0); end; if UseText then begin if not (coWrapCaption in FOptions) then begin FCaptionText := FText; GetTextExtentPoint32(DC, PChar(FText), Length(FText), TextSize); Inc(TextSize.cx, 2); TextBounds := Rect(0, 0, TextSize.cx, TextSize.cy); end else begin R := Client; if FCaptionText = '' then FCaptionText := FText; GetStringDrawRect(DC, FCaptionText, R, DrawFormat); TextSize.cx := Client.Right - Client.Left; TextSize.cy := R.Bottom - R.Top; TextBounds := Rect(0, 0, TextSize.cx, TextSize.cy); end; TextSpacing := FSpacing; end else begin TextSpacing := 0; TextSize.cx := 0; TextSize.cy := 0; end; // Check first for the special case where nothing is shown except the sort glyph. if UseSortGlyph and not (UseText or UseHeaderGlyph) then begin // Center the sort glyph in the available area if nothing else is there. SortGlyphPos := Point((ClientSize.X - SortGlyphSize.X) div 2, (ClientSize.Y - SortGlyphSize.Y) div 2); end else begin // Determine extents of text and glyph and calculate positions which are clear from the layout. if (Layout in [blGlyphLeft, blGlyphRight]) or not UseHeaderGlyph then begin HeaderGlyphPos.Y := (ClientSize.Y - HeaderGlyphSize.Y) div 2; // If the text is taller than the given height, perform no vertical centration as this // would make the text even less readable. if TextSize.cy >= ClientSize.Y then TextPos.Y := 0 else TextPos.Y := (ClientSize.Y - TextSize.cy) div 2; end else begin if Layout = blGlyphTop then begin HeaderGlyphPos.Y := (ClientSize.Y - HeaderGlyphSize.Y - TextSize.cy - TextSpacing) div 2; TextPos.Y := HeaderGlyphPos.Y + HeaderGlyphSize.Y + TextSpacing; end else begin TextPos.Y := (ClientSize.Y - HeaderGlyphSize.Y - TextSize.cy - TextSpacing) div 2; HeaderGlyphPos.Y := TextPos.Y + TextSize.cy + TextSpacing; end; end; // Each alignment needs special consideration. case CurrentAlignment of taLeftJustify: begin MinLeft := FMargin; if UseSortGlyph and (FBidiMode <> bdLeftToRight) then begin // In RTL context is the sort glyph placed on the left hand side. SortGlyphPos.X := MinLeft; Inc(MinLeft, SortGlyphSize.X + FSpacing); end; if Layout in [blGlyphTop, blGlyphBottom] then begin // Header glyph is above or below text, so both must be considered when calculating // the left positition of the sort glyph (if it is on the right hand side). TextPos.X := MinLeft; if UseHeaderGlyph then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; if HeaderGlyphPos.X < MinLeft then HeaderGlyphPos.X := MinLeft; MinLeft := Max(TextPos.X + TextSize.cx + TextSpacing, HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing); end else MinLeft := TextPos.X + TextSize.cx + TextSpacing; end else begin // Everything is lined up. TextSpacing might be 0 if there is no text. // This simplifies the calculation because no extra tests are necessary. if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + FSpacing); end; TextPos.X := MinLeft; Inc(MinLeft, TextSize.cx + TextSpacing); if UseHeaderGlyph and (Layout = blGlyphRight) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + FSpacing); end; end; if UseSortGlyph and (FBidiMode = bdLeftToRight) then SortGlyphPos.X := MinLeft; end; taCenter: begin if Layout in [blGlyphTop, blGlyphBottom] then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; TextPos.X := (ClientSize.X - TextSize.cx) div 2; if UseSortGlyph then Dec(TextPos.X, SortGlyphSize.X div 2); end else begin MinLeft := (ClientSize.X - HeaderGlyphSize.X - TextSpacing - TextSize.cx) div 2; if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MinLeft; Inc(MinLeft, HeaderGlyphSize.X + TextSpacing); end; TextPos.X := MinLeft; Inc(MinLeft, TextSize.cx + TextSpacing); if UseHeaderGlyph and (Layout = blGlyphRight) then HeaderGlyphPos.X := MinLeft; end; if UseHeaderGlyph then begin MinLeft := Min(HeaderGlyphPos.X, TextPos.X); MaxRight := Max(HeaderGlyphPos.X + HeaderGlyphSize.X, TextPos.X + TextSize.cx); end else begin MinLeft := TextPos.X; MaxRight := TextPos.X + TextSize.cx; end; // Place the sort glyph directly to the left or right of the larger item. if UseSortGlyph then if FBidiMode = bdLeftToRight then begin // Sort glyph on the right hand side. SortGlyphPos.X := MaxRight + FSpacing; end else begin // Sort glyph on the left hand side. SortGlyphPos.X := MinLeft - FSpacing - SortGlyphSize.X; end; end; else // taRightJustify MaxRight := ClientSize.X - FMargin; if UseSortGlyph and (FBidiMode = bdLeftToRight) then begin // In LTR context is the sort glyph placed on the right hand side. Dec(MaxRight, SortGlyphSize.X); SortGlyphPos.X := MaxRight; Dec(MaxRight, FSpacing); end; if Layout in [blGlyphTop, blGlyphBottom] then begin TextPos.X := MaxRight - TextSize.cx; if UseHeaderGlyph then begin HeaderGlyphPos.X := (ClientSize.X - HeaderGlyphSize.X) div 2; if HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing > MaxRight then HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X - FSpacing; MaxRight := Min(TextPos.X - TextSpacing, HeaderGlyphPos.X - FSpacing); end else MaxRight := TextPos.X - TextSpacing; end else begin // Everything is lined up. TextSpacing might be 0 if there is no text. // This simplifies the calculation because no extra tests are necessary. if UseHeaderGlyph and (Layout = blGlyphRight) then begin HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; MaxRight := HeaderGlyphPos.X - FSpacing; end; TextPos.X := MaxRight - TextSize.cx; MaxRight := TextPos.X - TextSpacing; if UseHeaderGlyph and (Layout = blGlyphLeft) then begin HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; MaxRight := HeaderGlyphPos.X - FSpacing; end; end; if UseSortGlyph and (FBidiMode <> bdLeftToRight) then SortGlyphPos.X := MaxRight - SortGlyphSize.X; end; end; // Once the position of each element is determined there remains only one but important step. // The horizontal positions of every element must be adjusted so that it always fits into the // given header area. This is accomplished by shorten the text appropriately. // These are the maximum bounds. Nothing goes beyond them. MinLeft := FMargin; MaxRight := ClientSize.X - FMargin; if UseSortGlyph then begin if FBidiMode = bdLeftToRight then begin // Sort glyph on the right hand side. if SortGlyphPos.X + SortGlyphSize.X > MaxRight then SortGlyphPos.X := MaxRight - SortGlyphSize.X; MaxRight := SortGlyphPos.X - FSpacing; end; // Consider also the left side of the sort glyph regardless of the bidi mode. if SortGlyphPos.X < MinLeft then SortGlyphPos.X := MinLeft; // Left border needs only adjustment if the sort glyph marks the left border. if FBidiMode <> bdLeftToRight then MinLeft := SortGlyphPos.X + SortGlyphSize.X + FSpacing; // Finally transform sort glyph to its actual position. with SortGlyphPos do begin Inc(X, Client.Left); Inc(Y, Client.Top); end; end; if UseHeaderGlyph then begin if HeaderGlyphPos.X + HeaderGlyphSize.X > MaxRight then HeaderGlyphPos.X := MaxRight - HeaderGlyphSize.X; if Layout = blGlyphRight then MaxRight := HeaderGlyphPos.X - FSpacing; if HeaderGlyphPos.X < MinLeft then HeaderGlyphPos.X := MinLeft; if Layout = blGlyphLeft then MinLeft := HeaderGlyphPos.X + HeaderGlyphSize.X + FSpacing; // Finally transform header glyph to its actual position. with HeaderGlyphPos do begin Inc(X, Client.Left); Inc(Y, Client.Top); end; end; if UseText then begin if TextPos.X < MinLeft then TextPos.X := MinLeft; OffsetRect(TextBounds, TextPos.X, TextPos.Y); if TextBounds.Right > MaxRight then TextBounds.Right := MaxRight; OffsetRect(TextBounds, Client.Left, Client.Top); if coWrapCaption in FOptions then begin // Wrap the column caption if necessary. R := TextBounds; FCaptionText := WrapString(DC, FText, R, DT_RTLREADING and DrawFormat <> 0, DrawFormat); GetStringDrawRect(DC, FCaptionText, R, DrawFormat); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.GetAbsoluteBounds(var Left, Right: Integer); // Returns the column's left and right bounds in header coordinates, that is, independant of the scrolling position. begin Left := FLeft; Right := FLeft + FWidth; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetDisplayName: string; // Returns the column text otherwise the column id is returned begin if Length(FText) > 0 then Result := FText else Result := Format('Column %d', [Index]); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetOwner: TVirtualTreeColumns; begin Result := Collection as TVirtualTreeColumns; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.Assign(Source: TPersistent); var OldOptions: TVTColumnOptions; begin if Source is TVirtualTreeColumn then begin OldOptions := FOptions; FOptions := []; BiDiMode := TVirtualTreeColumn(Source).BiDiMode; ImageIndex := TVirtualTreeColumn(Source).ImageIndex; Layout := TVirtualTreeColumn(Source).Layout; Margin := TVirtualTreeColumn(Source).Margin; MaxWidth := TVirtualTreeColumn(Source).MaxWidth; MinWidth := TVirtualTreeColumn(Source).MinWidth; Position := TVirtualTreeColumn(Source).Position; Spacing := TVirtualTreeColumn(Source).Spacing; Style := TVirtualTreeColumn(Source).Style; Text := TVirtualTreeColumn(Source).Text; Hint := TVirtualTreeColumn(Source).Hint; Width := TVirtualTreeColumn(Source).Width; Alignment := TVirtualTreeColumn(Source).Alignment; CaptionAlignment := TVirtualTreeColumn(Source).CaptionAlignment; Color := TVirtualTreeColumn(Source).Color; Tag := TVirtualTreeColumn(Source).Tag; // Order is important. Assign options last. FOptions := OldOptions; Options := TVirtualTreeColumn(Source).Options; Changed(False); end else inherited Assign(Source); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.Equals(OtherColumnObj: TObject): Boolean; var OtherColumn : TVirtualTreeColumn; begin if OtherColumnObj is TVirtualTreeColumn then begin OtherColumn := TVirtualTreeColumn (OtherColumnObj); Result := (BiDiMode = OtherColumn.BiDiMode) and (ImageIndex = OtherColumn.ImageIndex) and (Layout = OtherColumn.Layout) and (Margin = OtherColumn.Margin) and (MaxWidth = OtherColumn.MaxWidth) and (MinWidth = OtherColumn.MinWidth) and (Position = OtherColumn.Position) and (Spacing = OtherColumn.Spacing) and (Style = OtherColumn.Style) and (Text = OtherColumn.Text) and (Hint = OtherColumn.Hint) and (Width = OtherColumn.Width) and (Alignment = OtherColumn.Alignment) and (CaptionAlignment = OtherColumn.CaptionAlignment) and (Color = OtherColumn.Color) and (Tag = OtherColumn.Tag) and (Options = OtherColumn.Options) end else Result := False end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.GetRect: TRect; // Returns the rectangle this column occupies in the header (relative to (0, 0) of the non-client area). begin with TVirtualTreeColumns(GetOwner).FHeader do Result := Treeview.FHeaderRect; Inc(Result.Left, FLeft); Result.Right := Result.Left + FWidth; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.LoadFromStream(const Stream: TStream; Version: Integer); var Dummy: Integer; S: String; begin with Stream do begin ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(S, Dummy); ReadBuffer(PChar(S)^, Dummy); Text := S; ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(FHint, Dummy); ReadBuffer(PChar(FHint)^, Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Width := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); MinWidth := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); MaxWidth := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Style := TVirtualTreeColumnStyle(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); ImageIndex := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Layout := TVTHeaderColumnLayout(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Margin := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Spacing := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); BiDiMode := TBiDiMode(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Options := TVTColumnOptions(Word(Dummy and $FFFF)); // Parts which have been introduced/changed with header stream version 1+. // LCL port started with header stream version 6 so no need to do the check here ReadBuffer(Dummy, SizeOf(Dummy)); Tag := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Alignment := TAlignment(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Color := TColor(Dummy); if coUseCaptionAlignment in FOptions then begin ReadBuffer(Dummy, SizeOf(Dummy)); CaptionAlignment := TAlignment(Dummy); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ParentBiDiModeChanged; var Columns: TVirtualTreeColumns; begin if coParentBiDiMode in FOptions then begin Columns := GetOwner as TVirtualTreeColumns; if Assigned(Columns) and (FBidiMode <> Columns.FHeader.Treeview.BiDiMode) then begin FBiDiMode := Columns.FHeader.Treeview.BiDiMode; Changed(False); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.ParentColorChanged; var Columns: TVirtualTreeColumns; TreeViewColor: TColor; begin if coParentColor in FOptions then begin Columns := GetOwner as TVirtualTreeColumns; if Assigned(Columns) then begin TreeViewColor := Columns.FHeader.Treeview.Brush.Color; if FColor <> TreeViewColor then begin FColor := TreeViewColor; Changed(False); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.RestoreLastWidth; begin TVirtualTreeColumns(GetOwner).AnimatedResize(Index, FLastWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumn.SaveToStream(const Stream: TStream); var Dummy: Integer; begin with Stream do begin Dummy := Length(FText); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PChar(FText)^, Dummy); Dummy := Length(FHint); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PChar(FHint)^, Dummy); WriteBuffer(FWidth, SizeOf(FWidth)); WriteBuffer(FMinWidth, SizeOf(FMinWidth)); WriteBuffer(FMaxWidth, SizeOf(FMaxWidth)); Dummy := Ord(FStyle); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FImageIndex; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Ord(FLayout); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(FMargin, SizeOf(FMargin)); WriteBuffer(FSpacing, SizeOf(FSpacing)); Dummy := Ord(FBiDiMode); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Word(FOptions); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 1 WriteBuffer(FTag, SizeOf(Dummy)); Dummy := Cardinal(FAlignment); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 2 Dummy := Integer(FColor); WriteBuffer(Dummy, SizeOf(Dummy)); // parts introduced with stream version 6 if coUseCaptionAlignment in FOptions then begin Dummy := Cardinal(FCaptionAlignment); WriteBuffer(Dummy, SizeOf(Dummy)); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumn.UseRightToLeftReading: Boolean; begin Result := FBiDiMode <> bdLeftToRight; end; //----------------- TVirtualTreeColumns -------------------------------------------------------------------------------- constructor TVirtualTreeColumns.Create(AOwner: TVTHeader); var ColumnClass: TVirtualTreeColumnClass; begin FHeader := AOwner; // Determine column class to be used in the header. ColumnClass := AOwner.FOwner.GetColumnClass; // The owner tree always returns the default tree column class if not changed by application/descendants. inherited Create(ColumnClass); FHeaderBitmap := TBitmap.Create; FHeaderBitmap.PixelFormat := pf32Bit; FHoverIndex := NoColumn; FDownIndex := NoColumn; FClickIndex := NoColumn; FDropTarget := NoColumn; FTrackIndex := NoColumn; FDefaultWidth := 50; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVirtualTreeColumns.Destroy; begin FHeaderBitmap.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetCount: Integer; begin Result := inherited Count; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetItem(Index: TColumnIndex): TVirtualTreeColumn; begin Result := TVirtualTreeColumn(inherited GetItem(Index)); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNewIndex(P: TPoint; var OldIndex: TColumnIndex): Boolean; var NewIndex: Integer; begin Result := False; // convert to local coordinates Inc(P.Y, FHeader.FHeight); NewIndex := ColumnFromPosition(P); if NewIndex <> OldIndex then begin if OldIndex > NoColumn then FHeader.Invalidate(Items[OldIndex]); OldIndex := NewIndex; if OldIndex > NoColumn then FHeader.Invalidate(Items[OldIndex]); Result := True; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SetDefaultWidth(Value: Integer); begin FDefaultWidth := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SetItem(Index: TColumnIndex; Value: TVirtualTreeColumn); begin inherited SetItem(Index, Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AdjustAutoSize(CurrentIndex: TColumnIndex; Force: Boolean = False); // Called only if the header is in auto-size mode which means a column needs to be so large // that it fills all the horizontal space not occupied by the other columns. // CurrentIndex (if not InvalidColumn) describes which column has just been resized. var NewValue, AutoIndex, Index, RestWidth: Integer; begin if Count > 0 then begin // Determine index to be used for auto resizing. This is usually given by the owner's AutoSizeIndex, but // could be different if the column whose resize caused the invokation here is either the auto column itself // or visually to the right of the auto size column. AutoIndex := FHeader.FAutoSizeIndex; if (AutoIndex < 0) or (AutoIndex >= Count) then AutoIndex := Count - 1; if AutoIndex >= 0 then begin with FHeader.Treeview do begin if HandleAllocated then RestWidth := ClientWidth else RestWidth := Width; end; // Go through all columns and calculate the rest space remaining. for Index := 0 to Count - 1 do if (Index <> AutoIndex) and (coVisible in Items[Index].FOptions) then Dec(RestWidth, Items[Index].Width); with Items[AutoIndex] do begin NewValue := Max(MinWidth, Min(MaxWidth, RestWidth)); if Force or (FWidth <> NewValue) then begin FWidth := NewValue; UpdatePositions; FHeader.Treeview.DoColumnResize(AutoIndex); end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.AdjustDownColumn(P: TPoint): TColumnIndex; // Determines the column from the given position and returns it. If this column is allowed to be clicked then // it is also kept for later use. begin // Convert to local coordinates. Inc(P.Y, FHeader.FHeight); Result := ColumnFromPosition(P); if (Result > NoColumn) and (Result <> FDownIndex) and (coAllowClick in Items[Result].FOptions) and (coEnabled in Items[Result].FOptions) then begin if FDownIndex > NoColumn then FHeader.Invalidate(Items[FDownIndex]); FDownIndex := Result; FHeader.Invalidate(Items[FDownIndex]); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.AdjustHoverColumn(const P: TPoint): Boolean; // Determines the new hover column index and returns True if the index actually changed else False. begin Result := GetNewIndex(P, FHoverIndex); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AdjustPosition(Column: TVirtualTreeColumn; Position: Cardinal); // Reorders the column position array so that the given column gets the given position. var OldPosition: Cardinal; begin OldPosition := Column.Position; if OldPosition <> Position then begin if OldPosition < Position then begin // column will be moved up so move down other entries Move(FPositionToIndex[OldPosition + 1], FPositionToIndex[OldPosition], (Position - OldPosition) * SizeOf(Cardinal)); end else begin // column will be moved down so move up other entries Move(FPositionToIndex[Position], FPositionToIndex[Position + 1], (OldPosition - Position) * SizeOf(Cardinal)); end; FPositionToIndex[Position] := Column.Index; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.CanSplitterResize(P: TPoint; Column: TColumnIndex): Boolean; begin Result := (Column > NoColumn) and ([coResizable, coVisible] * Items[Column].FOptions = [coResizable, coVisible]); DoCanSplitterResize(P, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.DoCanSplitterResize(P: TPoint; Column: TColumnIndex; var Allowed: Boolean); begin if Assigned(FHeader.Treeview.FOnCanSplitterResizeColumn) then FHeader.Treeview.FOnCanSplitterResizeColumn(FHeader, P, Column, Allowed); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.DrawButtonText(DC: HDC; Caption: String; Bounds: TRect; Enabled, Hot: Boolean; DrawFormat: Cardinal; WrapCaption: Boolean); var TextSpace: Integer; Size: TSize; begin if not WrapCaption then begin // Do we need to shorten the caption due to limited space? GetTextExtentPoint32(DC, PChar(Caption), Length(Caption), Size); TextSpace := Bounds.Right - Bounds.Left; if TextSpace < Size.cx then Caption := ShortenString(DC, Caption, TextSpace); end; SetBkMode(DC, TRANSPARENT); if not Enabled then begin OffsetRect(Bounds, 1, 1); SetTextColor(DC, ColorToRGB(clBtnHighlight)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); OffsetRect(Bounds, -1, -1); SetTextColor(DC, ColorToRGB(clBtnShadow)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); end else begin if Hot then SetTextColor(DC, ColorToRGB(FHeader.Treeview.FColors.HeaderHotColor)) else SetTextColor(DC, ColorToRGB(FHeader.FFont.Color)); DrawText(DC, PChar(Caption), Length(Caption), Bounds, DrawFormat); end; end; //---------------------------------------------------------------------------------------------------------------------- // XP style header button legacy code. This procedure is only used on non-XP systems to simulate the themed // header style. // Note: the theme elements displayed here only correspond to the standard themes of Windows XP const XPMainHeaderColorUp = $DBEAEB; // Main background color of the header if drawn as being not pressed. XPMainHeaderColorDown = $D8DFDE; // Main background color of the header if drawn as being pressed. XPMainHeaderColorHover = $F3F8FA; // Main background color of the header if drawn as being under the mouse pointer. XPDarkSplitBarColor = $B2C5C7; // Dark color of the splitter bar. XPLightSplitBarColor = $FFFFFF; // Light color of the splitter bar. XPDarkGradientColor = $B8C7CB; // Darkest color in the bottom gradient. Other colors will be interpolated. XPDownOuterLineColor = $97A5A5; // Down state border color. XPDownMiddleLineColor = $B8C2C1; // Down state border color. XPDownInnerLineColor = $C9D1D0; // Down state border color. procedure TVirtualTreeColumns.DrawXPButton(DC: HDC; const ButtonR: TRect; DrawSplitter, Down, Hover: Boolean); // Helper procedure to draw an Windows XP like header button. var PaintBrush: HBRUSH; Pen, OldPen: HPEN; PenColor, FillColor: COLORREF; dRed, dGreen, dBlue: Single; Width, XPos: Integer; begin if Down then FillColor := XPMainHeaderColorDown else if Hover then FillColor := XPMainHeaderColorHover else FillColor := XPMainHeaderColorUp; PaintBrush := CreateSolidBrush(FillColor); FillRect(DC, ButtonR, PaintBrush); DeleteObject(PaintBrush); if DrawSplitter and not (Down or Hover) then begin // One solid pen for the dark line... Pen := CreatePen(PS_SOLID, 1, XPDarkSplitBarColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Right - 2, ButtonR.Top + 3, nil); LineTo(DC, ButtonR.Right - 2, ButtonR.Bottom - 5); // ... and one solid pen for the light line. Pen := CreatePen(PS_SOLID, 1, XPLightSplitBarColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Right - 1, ButtonR.Top + 3, nil); LineTo(DC, ButtonR.Right - 1, ButtonR.Bottom - 5); SelectObject(DC, OldPen); DeleteObject(Pen); end; if Down then begin // Down state. Three lines to draw. // First one is the outer line, drawn at left, bottom and right. Pen := CreatePen(PS_SOLID, 1, XPDownOuterLineColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Left, ButtonR.Top, nil); LineTo(DC, ButtonR.Left, ButtonR.Bottom - 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Bottom - 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Top - 1); // Second one is the middle line, which is a bit lighter. Pen := CreatePen(PS_SOLID, 1, XPDownMiddleLineColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left + 1, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Left + 1, ButtonR.Top); LineTo(DC, ButtonR.Right - 1, ButtonR.Top); // Third line is the inner line, which is even lighter than the middle line. Pen := CreatePen(PS_SOLID, 1, XPDownInnerLineColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left + 2, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Left + 2, ButtonR.Top + 1); LineTo(DC, ButtonR.Right - 1, ButtonR.Top + 1); // Housekeeping: SelectObject(DC, OldPen); DeleteObject(Pen); end else if Hover then begin // Hover state. There are three lines at the bottom border, but they are rendered in a way which // requires expensive construction. Width := ButtonR.Right - ButtonR.Left; if Width <= 32 then begin BitBlt(DC, ButtonR.Right - 16, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 8 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); BitBlt(DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, UtilityImages.Canvas.Handle, 6 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, Width div 2, 3, CLR_NONE, // CLR_NONE, ILD_NORMAL); end else begin BitBlt(DC, ButtonR.Left, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 6 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 6, DC, ButtonR.Left, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); // Replicate inner part as many times as need to fill up the button rectangle. XPos := ButtonR.Left + 16; repeat BitBlt(DC, XPos, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 7 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 7, DC, XPos, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, ILD_NORMAL); Inc(XPos, 16); until XPos + 16 >= ButtonR.Right; BitBlt(DC, ButtonR.Right - 16, ButtonR.Bottom - 3, UtilityImageSize, 3, UtilityImages.Canvas.Handle, 8 * UtilityImageSize, 0, SRCCOPY); //ImageList_DrawEx(UtilityImages.Handle, 8, DC, ButtonR.Right - 16, ButtonR.Bottom - 3, 16, 3, CLR_NONE, CLR_NONE, // ILD_NORMAL); end; end else begin // There is a three line gradient near the bottom border which transforms from the button color to a dark, // clBtnFace like color (here XPDarkGradientColor). PenColor := XPMainHeaderColorUp; dRed := ((PenColor and $FF) - (XPDarkGradientColor and $FF)) / 3; dGreen := (((PenColor shr 8) and $FF) - ((XPDarkGradientColor shr 8) and $FF)) / 3; dBlue := (((PenColor shr 16) and $FF) - ((XPDarkGradientColor shr 16) and $FF)) / 3; // First line: PenColor := PenColor - Round(dRed) - Round(dGreen) shl 8 - Round(dBlue) shl 16; Pen := CreatePen(PS_SOLID, 1, PenColor); OldPen := SelectObject(DC, Pen); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 3, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 3); // Second line: PenColor := PenColor - Round(dRed) - Round(dGreen) shl 8 - Round(dBlue) shl 16; Pen := CreatePen(PS_SOLID, 1, PenColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 2, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 2); // Third line: Pen := CreatePen(PS_SOLID, 1, XPDarkGradientColor); DeleteObject(SelectObject(DC, Pen)); MoveToEx(DC, ButtonR.Left, ButtonR.Bottom - 1, nil); LineTo(DC, ButtonR.Right, ButtonR.Bottom - 1); // Housekeeping: DeleteObject(SelectObject(DC, OldPen)); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.FixPositions; // Fixes column positions after loading from DFM or Bidi mode change. var I: Integer; begin for I := 0 to Count - 1 do FPositionToIndex[Items[I].Position] := I; FNeedPositionsFix := False; UpdatePositions(True); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetColumnAndBounds(const P: TPoint; var ColumnLeft, ColumnRight: Integer; Relative: Boolean = True): Integer; // Returns the column where the mouse is currently in as well as the left and right bound of // this column (Left and Right are undetermined if no column is involved). var I: Integer; begin Result := InvalidColumn; if Relative and (P.X > Header.Columns.GetVisibleFixedWidth) then ColumnLeft := -FHeader.Treeview.FEffectiveOffsetX else ColumnLeft := 0; if FHeader.Treeview.UseRightToLeftAlignment then Inc(ColumnLeft, FHeader.Treeview.ComputeRTLOffset(True)); for I := 0 to Count - 1 do with Items[FPositionToIndex[I]] do if coVisible in FOptions then begin ColumnRight := ColumnLeft + FWidth; if P.X < ColumnRight then begin Result := FPositionToIndex[I]; Exit; end; ColumnLeft := ColumnRight; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetOwner: TPersistent; begin Result := FHeader; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.HandleClick(P: TPoint; Button: TMouseButton; Force, DblClick: Boolean); // Generates a click event if the mouse button has been released over the same column it was pressed first. // Alternatively, Force might be set to True to indicate that the down index does not matter (right, middle and // double click). var NewClickIndex: Integer; Shift: TShiftState; begin // Convert vertical position to local coordinates. Inc(P.Y, FHeader.FHeight); NewClickIndex := ColumnFromPosition(P); if (NewClickIndex > NoColumn) and (coAllowClick in Items[NewClickIndex].FOptions) and ((NewClickIndex = FDownIndex) or Force) then begin FClickIndex := NewClickIndex; Shift := FHeader.GetShiftState; if DblClick then Shift := Shift + [ssDouble]; if Items[NewClickIndex].FHasImage and PtInRect(Items[NewClickIndex].FImageRect, P) then begin if Items[NewClickIndex].CheckBox then begin FHeader.Treeview.UpdateColumnCheckState(Items[NewClickIndex]); FHeader.Treeview.DoHeaderCheckBoxClick(NewClickIndex, Button, Shift, P.X, P.Y); end else FHeader.Treeview.DoHeaderImageClick(NewClickIndex, Button, Shift, P.X, P.Y) end else FHeader.Treeview.DoHeaderClick(NewClickIndex, Button, Shift, P.X, P.Y); FHeader.Invalidate(Items[NewClickIndex]); end else FClickIndex := NoColumn; if (FClickIndex > NoColumn) and (FClickIndex <> NewClickIndex) then FHeader.Invalidate(Items[FClickIndex]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.IndexChanged(OldIndex, NewIndex: Integer); // Called by a column when its index in the collection changes. If NewIndex is -1 then the column is // about to be removed, otherwise it is moved to a new index. // The method will then update the position array to reflect the change. var I: Integer; Increment: Integer; Lower, Upper: Integer; begin if NewIndex = -1 then begin // Find position in the array with the old index. Upper := High(FPositionToIndex); for I := 0 to Upper do begin if FPositionToIndex[I] = OldIndex then begin // Index found. Move all higher entries one step down and remove the last entry. if I < Upper then Move(FPositionToIndex[I + 1], FPositionToIndex[I], (Upper - I) * SizeOf(Integer)); end; // Decrease all indices, which are greater than the index to be deleted. if FPositionToIndex[I] > OldIndex then Dec(FPositionToIndex[I]); end; SetLength(FPositionToIndex, High(FPositionToIndex)); end else begin if OldIndex < NewIndex then Increment := -1 else Increment := 1; Lower := Min(OldIndex, NewIndex); Upper := Max(OldIndex, NewIndex); for I := 0 to High(FPositionToIndex) do begin if (FPositionToIndex[I] >= Lower) and (FPositionToIndex[I] < Upper) then Inc(FPositionToIndex[I], Increment) else if FPositionToIndex[I] = OldIndex then FPositionToIndex[I] := NewIndex; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.InitializePositionArray; // Ensures that the column position array contains as many entries as columns are defined. // The array is resized and initialized with default values if needed. var I, OldSize: Integer; Changed: Boolean; begin if Count <> Length(FPositionToIndex) then begin OldSize := Length(FPositionToIndex); SetLength(FPositionToIndex, Count); if Count > OldSize then begin // New items have been added, just set their position to the same as their index. for I := OldSize to Count - 1 do FPositionToIndex[I] := I; end else begin // Items have been deleted, so reindex remaining entries by decrementing values larger than the highest // possible index until no entry is higher than this limit. repeat Changed := False; for I := 0 to Count - 1 do if FPositionToIndex[I] >= Count then begin Dec(FPositionToIndex[I]); Changed := True; end; until not Changed; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.ReorderColumns(RTL: Boolean); var I: Integer; begin if RTL then begin for I := 0 to Count - 1 do FPositionToIndex[I] := Count - I - 1; end else begin for I := 0 to Count - 1 do FPositionToIndex[I] := I; end; UpdatePositions(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Update(Item: TCollectionItem); begin //lcl // Skip while Destroying if csDestroying in FHeader.TreeView.ComponentState then Exit; // This is the only place which gets notified when a new column has been added or removed // and we need this event to adjust the column position array. InitializePositionArray; if csLoading in Header.Treeview.ComponentState then FNeedPositionsFix := True else UpdatePositions; // The first column which is created is by definition also the main column. if (Count > 0) and (Header.FMainColumn < 0) then FHeader.FMainColumn := 0; if not (csLoading in Header.Treeview.ComponentState) and not (hsLoading in FHeader.FStates) then begin with FHeader do begin if hoAutoResize in FOptions then AdjustAutoSize(InvalidColumn); if Assigned(Item) then Invalidate(Item as TVirtualTreeColumn) else if Treeview.HandleAllocated then begin Treeview.UpdateHorizontalScrollBar(False); Invalidate(nil); Treeview.Invalidate; end; if not (tsUpdating in Treeview.FStates) then // This is mainly to let the designer know when a change occurs at design time which // doesn't involve the object inspector (like column resizing with the mouse). // This does NOT include design time code as the communication is done via an interface. Treeview.UpdateDesigner; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.UpdatePositions(Force: Boolean = False); // Recalculates the left border of every column and updates their position property according to the // PostionToIndex array which primarily determines where each column is placed visually. var I, RunningPos: Integer; begin if not FNeedPositionsFix and (Force or (UpdateCount = 0)) then begin RunningPos := 0; for I := 0 to High(FPositionToIndex) do with Items[FPositionToIndex[I]] do begin FPosition := I; FLeft := RunningPos; if coVisible in FOptions then Inc(RunningPos, FWidth); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.Add: TVirtualTreeColumn; begin Result := TVirtualTreeColumn(inherited Add); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.AnimatedResize(Column: TColumnIndex; NewWidth: Integer); // Resizes the given column animated by scrolling the window DC. {$ifndef INCOMPLETE_WINAPI} var OldWidth: Integer; DC: HDC; I, Steps, DX: Integer; HeaderScrollRect, ScrollRect, R: TRect; NewBrush, LastBrush: HBRUSH; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} if not IsValidColumn(Column) then exit; // Just in case. // Make sure the width constrains are considered. if NewWidth < Items[Column].FMinWidth then NewWidth := Items[Column].FMinWidth; if NewWidth > Items[Column].FMaxWidth then NewWidth := Items[Column].FMaxWidth; OldWidth := Items[Column].Width; // Nothing to do if the width is the same. if OldWidth <> NewWidth then begin if not ( (hoDisableAnimatedResize in FHeader.Options) or (coDisableAnimatedResize in Items[Column].Options) ) then begin DC := GetWindowDC(FHeader.Treeview.Handle); with FHeader.Treeview do try Steps := 32; DX := (NewWidth - OldWidth) div Steps; // Determination of the scroll rectangle is a bit complicated since we neither want // to scroll the scrollbars nor the border of the treeview window. HeaderScrollRect := FHeaderRect; ScrollRect := HeaderScrollRect; // Exclude the header itself from scrolling. ScrollRect.Top := ScrollRect.Bottom; ScrollRect.Bottom := ScrollRect.Top + ClientHeight; ScrollRect.Right := ScrollRect.Left + ClientWidth; with Items[Column] do Inc(ScrollRect.Left, FLeft + FWidth); HeaderScrollRect.Left := ScrollRect.Left; HeaderScrollRect.Right := ScrollRect.Right; // When the new width is larger then avoid artefacts on the left hand side // by deleting a small stripe if NewWidth > OldWidth then begin R := ScrollRect; NewBrush := CreateSolidBrush(ColorToRGB(Brush.Color)); LastBrush := SelectObject(DC, NewBrush); R.Right := R.Left + DX; FillRect(DC, R, NewBrush); SelectObject(DC, LastBrush); DeleteObject(NewBrush); end else begin Inc(HeaderScrollRect.Left, DX); Inc(ScrollRect.Left, DX); end; for I := 0 to Steps - 1 do begin ScrollDC(DC, DX, 0, HeaderScrollRect, HeaderScrollRect, 0, nil); Inc(HeaderScrollRect.Left, DX); ScrollDC(DC, DX, 0, ScrollRect, ScrollRect, 0, nil); Inc(ScrollRect.Left, DX); Sleep(1); end; finally ReleaseDC(Handle, DC); end; end; Items[Column].Width := NewWidth; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Assign(Source: TPersistent); begin // Let the collection class assign the items. inherited; if Source is TVirtualTreeColumns then begin // Copying the position array is the only needed task here. FPositionToIndex := Copy(TVirtualTreeColumns(Source).FPositionToIndex, 0, MaxInt); // Make sure the left edges are correct after assignment. FNeedPositionsFix := False; UpdatePositions(True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.Clear; begin FClearing := True; try // Since we're freeing all columns, the following have to be true when we're done. FHoverIndex := NoColumn; FDownIndex := NoColumn; FTrackIndex := NoColumn; FClickIndex := NoColumn; with Header do if not (hsLoading in FStates) then begin FAutoSizeIndex := NoColumn; FMainColumn := NoColumn; FSortColumn := NoColumn; end; inherited Clear; finally FClearing := False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.ColumnFromPosition(const P: TPoint; Relative: Boolean = True): TColumnIndex; // Determines the current column based on the position passed in P. var I, Sum: Integer; begin Result := InvalidColumn; // The position must be within the header area, but we extend the vertical bounds to the entire treeview area. if (P.X >= 0) and (P.Y >= 0) and (P.Y <= FHeader.TreeView.Height) then with FHeader, Treeview do begin if Relative and (P.X > GetVisibleFixedWidth) then Sum := -FEffectiveOffsetX else Sum := 0; if UseRightToLeftAlignment then Inc(Sum, ComputeRTLOffset(True)); for I := 0 to Count - 1 do if coVisible in Items[FPositionToIndex[I]].FOptions then begin Inc(Sum, Items[FPositionToIndex[I]].Width); if P.X < Sum then begin Result := FPositionToIndex[I]; Break; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.ColumnFromPosition(PositionIndex: TColumnPosition): TColumnIndex; // Returns the index of the column at the given position. begin if Integer(PositionIndex) < Length(FPositionToIndex) then Result := FPositionToIndex[PositionIndex] else Result := NoColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.Equals(OtherColumnsObj: TObject): Boolean; // Compares itself with the given set of columns and returns True if all published properties are the same // (including column order), otherwise False is returned. var I: Integer; OtherColumns : TVirtualTreeColumns; begin if not (OtherColumnsObj is TVirtualTreeColumns) then begin Result := False; Exit end; OtherColumns := TVirtualTreeColumns (OtherColumnsObj); // Same number of columns? Result := OtherColumns.Count = Count; if Result then begin // Same order of columns? Result := CompareMem(Pointer(FPositionToIndex), Pointer(OtherColumns.FPositionToIndex), Length(FPositionToIndex) * SizeOf(TColumnIndex)); if Result then begin for I := 0 to Count - 1 do if not Items[I].Equals(OtherColumns[I]) then begin Result := False; Break; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.GetColumnBounds(Column: TColumnIndex; out Left, Right: Integer); // Returns the left and right bound of the given column. If Column is NoColumn then the entire client width is returned. begin if Column <= NoColumn then begin Left := 0; Right := FHeader.Treeview.ClientWidth; end else begin Left := Items[Column].Left; Right := Left + Items[Column].Width; if FHeader.Treeview.UseRightToLeftAlignment then begin Inc(Left, FHeader.Treeview.ComputeRTLOffset(True)); Inc(Right, FHeader.Treeview.ComputeRTLOffset(True)); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetScrollWidth: Integer; // Returns the average width of all visible, non-fixed columns. If there is no such column the indent is returned. var I: Integer; ScrollColumnCount: Integer; begin Result := 0; ScrollColumnCount := 0; for I := 0 to FHeader.Columns.Count - 1 do begin if ([coVisible, coFixed] * FHeader.Columns[I].Options = [coVisible]) then begin Inc(Result, FHeader.Columns[I].Width); Inc(ScrollColumnCount); end; end; if ScrollColumnCount > 0 then // use average width Result := Round(Result / ScrollColumnCount) else // use indent Result := Integer(FHeader.Treeview.FIndent); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetFirstVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the index of the first visible column or "InvalidColumn" if either no columns are defined or // all columns are hidden. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. var I: Integer; begin Result := InvalidColumn; for I := 0 to Count - 1 do if (coVisible in Items[FPositionToIndex[I]].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[FPositionToIndex[I]].FOptions) ) then begin Result := FPositionToIndex[I]; Break; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetLastVisibleColumn(ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the index of the last visible column or "InvalidColumn" if either no columns are defined or // all columns are hidden. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. var I: Integer; begin Result := InvalidColumn; for I := Count - 1 downto 0 do if (coVisible in Items[FPositionToIndex[I]].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[FPositionToIndex[I]].FOptions) ) then begin Result := FPositionToIndex[I]; Break; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNextColumn(Column: TColumnIndex): TColumnIndex; // Returns the next column in display order. Column is the index of an item in the collection (a column). var Position: Integer; begin if Column < 0 then Result := InvalidColumn else begin Position := Items[Column].Position; if Position < Count - 1 then Result := FPositionToIndex[Position + 1] else Result := InvalidColumn; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetNextVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the next visible column in display order, Column is an index into the columns list. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. begin Result := Column; repeat Result := GetNextColumn(Result); until (Result = InvalidColumn) or ( (coVisible in Items[Result].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[Result].FOptions) ) ); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetPreviousColumn(Column: TColumnIndex): TColumnIndex; // Returns the previous column in display order, Column is an index into the columns list. var Position: Integer; begin if Column < 0 then Result := InvalidColumn else begin Position := Items[Column].Position; if Position > 0 then Result := FPositionToIndex[Position - 1] else Result := InvalidColumn; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetPreviousVisibleColumn(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex; // Returns the previous visible column in display order, Column is an index into the columns list. // If ConsiderAllowFocus is True then the column has not only to be visible but also focus has to be allowed. begin Result := Column; repeat Result := GetPreviousColumn(Result); until (Result = InvalidColumn) or ( (coVisible in Items[Result].FOptions) and ( (not ConsiderAllowFocus) or (coAllowFocus in Items[Result].FOptions) ) ); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetVisibleColumns: TColumnsArray; // Returns a list of all currently visible columns in actual order. var I, Counter: Integer; begin SetLength(Result, Count); Counter := 0; for I := 0 to Count - 1 do if coVisible in Items[FPositionToIndex[I]].FOptions then begin Result[Counter] := Items[FPositionToIndex[I]]; Inc(Counter); end; // Set result length to actual visible count. SetLength(Result, Counter); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.GetVisibleFixedWidth: Integer; // Determines the horizontal space all visible and fixed columns occupy. var I: Integer; begin Result := 0; for I := 0 to Count - 1 do begin if Items[I].Options * [coVisible, coFixed] = [coVisible, coFixed] then Inc(Result, Items[I].Width); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.IsValidColumn(Column: TColumnIndex): Boolean; // Determines whether the given column is valid or not, that is, whether it is one of the current columns. begin Result := (Column > NoColumn) and (Column < Count); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.LoadFromStream(const Stream: TStream; Version: Integer); var I, ItemCount: Integer; begin Clear; Stream.ReadBuffer(ItemCount, SizeOf(ItemCount)); // number of columns if ItemCount > 0 then begin BeginUpdate; try for I := 0 to ItemCount - 1 do Add.LoadFromStream(Stream, Version); SetLength(FPositionToIndex, ItemCount); Stream.ReadBuffer(FPositionToIndex[0], ItemCount * SizeOf(Cardinal)); UpdatePositions(True); finally EndUpdate; end; end; // Data introduced with header stream version 5 // LCL port started with header stream version 6 so no need to do the check here Stream.ReadBuffer(FDefaultWidth, SizeOf(FDefaultWidth)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.PaintHeader(DC: HDC; const R: TRect; HOffset: Integer); // Main paint method to draw the header. const SortGlyphs: array[TSortDirection, Boolean] of Integer = ( // ascending/descending, normal/XP style (3, 5) {ascending}, (2, 4) {descending} ); var I, Y, SortIndex: Integer; Run: TRect; RightBorderFlag, NormalButtonStyle, NormalButtonFlags, PressedButtonStyle, PressedButtonFlags, RaisedButtonStyle, RaisedButtonFlags: Cardinal; DrawFormat: Cardinal; Images: TCustomImageList; ButtonRgn: HRGN; OwnerDraw, WrapCaption, AdvancedOwnerDraw: Boolean; {$ifdef ThemeSupport} Details: TThemedElementDetails; {$endif ThemeSupport} PaintInfo: THeaderPaintInfo; RequestedElements, ActualElements: THeaderPaintElements; Temp: TRect; ColCaptionText: String; ColImages: TCustomImageList; ColImageIndex: Integer; begin Run := FHeader.Treeview.FHeaderRect; FHeaderBitmap.Width := Max(Run.Right, R.Right - R.Left); FHeaderBitmap.Height := Run.Bottom; OwnerDraw := (hoOwnerDraw in FHeader.FOptions) and Assigned(FHeader.Treeview.FOnHeaderDraw) and not (csDesigning in FHeader.Treeview.ComponentState); AdvancedOwnerDraw := (hoOwnerDraw in FHeader.FOptions) and Assigned(FHeader.Treeview.FOnAdvancedHeaderDraw) and Assigned(FHeader.Treeview.FOnHeaderDrawQueryElements) and not (csDesigning in FHeader.Treeview.ComponentState); // If both draw posibillities are specified then prefer the advanced way. if AdvancedOwnerDraw then OwnerDraw := False; FillChar(PaintInfo, SizeOf(PaintInfo),#0); PaintInfo.TargetCanvas := FHeaderBitmap.Canvas; with PaintInfo, TargetCanvas do begin Font := FHeader.FFont; RaisedButtonStyle := 0; RaisedButtonFlags := 0; case FHeader.Style of hsThickButtons: begin NormalButtonStyle := BDR_RAISEDINNER or BDR_RAISEDOUTER; NormalButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_SOFT or BF_ADJUST; PressedButtonStyle := BDR_RAISEDINNER or BDR_RAISEDOUTER; PressedButtonFlags := NormalButtonFlags or BF_RIGHT or BF_FLAT or BF_ADJUST; end; hsFlatButtons: begin NormalButtonStyle := BDR_RAISEDINNER; NormalButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_ADJUST; PressedButtonStyle := BDR_SUNKENOUTER; PressedButtonFlags := BF_RECT or BF_MIDDLE or BF_ADJUST; end; else // hsPlates or hsXPStyle, values are not used in the latter case begin NormalButtonStyle := BDR_RAISEDINNER; NormalButtonFlags := BF_RECT or BF_MIDDLE or BF_SOFT or BF_ADJUST; PressedButtonStyle := BDR_SUNKENOUTER; PressedButtonFlags := BF_RECT or BF_MIDDLE or BF_ADJUST; RaisedButtonStyle := BDR_RAISEDINNER; RaisedButtonFlags := BF_LEFT or BF_TOP or BF_BOTTOM or BF_MIDDLE or BF_ADJUST; end; end; // Use shortcut for the images. Images := FHeader.FImages; // Erase background of the header. // See if the application wants to do that on its own. RequestedElements := []; if AdvancedOwnerDraw then begin PaintInfo.PaintRectangle := R; PaintInfo.Column := nil; FHeader.Treeview.DoHeaderDrawQueryElements(PaintInfo, RequestedElements); end; if hpeBackground in RequestedElements then begin FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, [hpeBackground]); end else begin {$ifdef ThemeSupport} if tsUseThemes in FHeader.Treeview.FStates then begin Details := ThemeServices.GetElementDetails(thHeaderItemRightNormal); ThemeServices.DrawElement(Handle, Details, R, @R); end else {$endif ThemeSupport} if FHeader.Style = hsXPStyle then DrawXPButton(Handle, Run, False, False, False) else begin Brush.Color := FHeader.FBackground; FillRect(R); end; end; Run.Top := R.Top; Run.Right := R.Left; Run.Bottom := R.Bottom; // Run.Left is set in the loop // Consider right-to-left directionality. with FHeader.Treeview do if UseRightToLeftAlignment then Inc(Run.Right, ComputeRTLOffset); Temp := Run; //todo_lcl_check ShowRightBorder := (FHeader.Style = hsThickButtons) or not (hoAutoResize in FHeader.FOptions);// or //(FHeader.Treeview.BevelKind = bkNone); // Now go for each button. for I := 0 to Count - 1 do begin with Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if not (coFixed in FOptions) then begin Inc(Run.Right, HOffset); HOffset := 0; end; Temp := Rect(Temp.Right, Run.Top, Max(Temp.Right, Run.Right + Width), Run.Bottom); Run.Left := Run.Right; Inc(Run.Right, Width); // Skip columns which are not visible at all. if (Run.Right > R.Left) and (Run.Right > Temp.Left) then begin // Stop painting if the rectangle is filled. if Run.Left > R.Right then Break; // Create a clip region to avoid overpainting any other area which does not belong to this column. if Temp.Right > R.Right then Temp.Right := R.Right; if Temp.Left < R.Left then Temp.Left := R.Left; ButtonRgn := CreateRectRgnIndirect(Temp); SelectClipRgn(Handle, ButtonRgn); DeleteObject(ButtonRgn); //lclheader //Under Delphi/VCL, unlike LCL, the hover index is not changed while dragging. //Here we check if dragging and not draw as hover IsHoverIndex := (Integer(FPositionToIndex[I]) = FHoverIndex) and (hoHotTrack in FHeader.FOptions) and (coEnabled in FOptions) and not (hsDragging in FHeader.States); IsDownIndex := Integer(FPositionToIndex[I]) = FDownIndex; if (coShowDropMark in FOptions) and (Integer(FPositionToIndex[I]) = FDropTarget) and (Integer(FPositionToIndex[I]) <> FDragIndex) then begin if FDropBefore then DropMark := dmmLeft else DropMark := dmmRight; end else DropMark := dmmNone; IsEnabled := (coEnabled in FOptions) and (FHeader.Treeview.Enabled); ShowHeaderGlyph := (hoShowImages in FHeader.FOptions) and Assigned(Images) and (FImageIndex > -1); ShowSortGlyph := (Integer(FPositionToIndex[I]) = FHeader.FSortColumn) and (hoShowSortGlyphs in FHeader.FOptions); WrapCaption := coWrapCaption in FOptions; PaintRectangle := Run; // This path for text columns or advanced owner draw. if (Style = vsText) or not OwnerDraw or AdvancedOwnerDraw then begin // See if the application wants to draw part of the header itself. RequestedElements := []; if AdvancedOwnerDraw then begin PaintInfo.Column := Items[FPositionToIndex[I]]; FHeader.Treeview.DoHeaderDrawQueryElements(PaintInfo, RequestedElements); end; if ShowRightBorder or (I < Count - 1) then RightBorderFlag := BF_RIGHT else RightBorderFlag := 0; if hpeBackground in RequestedElements then FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, [hpeBackground]) else begin // Draw button first before setting the clip region. {$ifdef ThemeSupport} if tsUseThemes in FHeader.Treeview.FStates then begin if IsDownIndex then Details := ThemeServices.GetElementDetails(thHeaderItemPressed) else if IsHoverIndex then Details := ThemeServices.GetElementDetails(thHeaderItemHot) else Details := ThemeServices.GetElementDetails(thHeaderItemNormal); ThemeServices.DrawElement(Handle, Details, PaintRectangle, @PaintRectangle); end else {$endif ThemeSupport} begin if FHeader.Style = hsXPStyle then DrawXPButton(Handle, PaintRectangle, RightBorderFlag <> 0, IsDownIndex, IsHoverIndex) else if IsDownIndex then DrawEdge(Handle, PaintRectangle, PressedButtonStyle, PressedButtonFlags) else // Plates have the special case of raising on mouse over. if (FHeader.Style = hsPlates) and IsHoverIndex and (coAllowClick in FOptions) and (coEnabled in FOptions) then DrawEdge(Handle, PaintRectangle, RaisedButtonStyle, RaisedButtonFlags or RightBorderFlag) else DrawEdge(Handle, PaintRectangle, NormalButtonStyle, NormalButtonFlags or RightBorderFlag); end; end; end; PaintRectangle := Run; if (Style = vsText) or not OwnerDraw or AdvancedOwnerDraw then begin // calculate text and glyph position InflateRect(PaintRectangle, -2, -2); DrawFormat := DT_TOP or DT_NOPREFIX; case CaptionAlignment of taLeftJustify : DrawFormat := DrawFormat or DT_LEFT; taRightJustify : DrawFormat := DrawFormat or DT_RIGHT; taCenter : DrawFormat := DrawFormat or DT_CENTER; end; if UseRightToLeftReading then DrawFormat := DrawFormat + DT_RTLREADING; ComputeHeaderLayout(Handle, PaintRectangle, ShowHeaderGlyph, ShowSortGlyph, GlyphPos, SortGlyphPos, TextRectangle, DrawFormat); // Move glyph and text one pixel to the right and down to simulate a pressed button. if IsDownIndex then begin OffsetRect(TextRectangle, 1, 1); Inc(GlyphPos.X); Inc(GlyphPos.Y); Inc(SortGlyphPos.X); Inc(SortGlyphPos.Y); end; // Advanced owner draw allows to paint elements, which would normally not be painted (because of space // limitations, empty captions etc.). ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark, hpeText]; // main glyph FHasImage := False; if not (hpeHeaderGlyph in ActualElements) and ShowHeaderGlyph and (not ShowSortGlyph or (FBidiMode <> bdLeftToRight) or (GlyphPos.X + Images.Width <= SortGlyphPos.X) ) then begin if not FCheckBox then begin ColImages := Images; ColImageIndex := FImageIndex; ColImages.Draw(FHeaderBitmap.Canvas, GlyphPos.X, GlyphPos.Y, ColImageIndex, IsEnabled ); end else begin with Header.Treeview do begin CheckImageListNeeded; ColImageIndex := GetCheckImage(nil, FCheckType, FCheckState, IsEnabled); {$ifdef USE_DELPHICOMPAT} with FCheckImages do DirectMaskBlt(FHeaderBitmap.Canvas.Handle, GlyphPos.X, GlyphPos.Y, Height, Height, Canvas.Handle, ColImageIndex * Height, 0, MaskHandle); {$else} with FCheckImages do StretchMaskBlt(FHeaderBitmap.Canvas.Handle, GlyphPos.X, GlyphPos.Y, Height, Height, Canvas.Handle, ColImageIndex * Height, 0, Height, Height, MaskHandle, ColImageIndex * Height, 0, SRCCOPY); {$endif} end; end; FHasImage := True; with FImageRect do begin Left := GlyphPos.X; Top := GlyphPos.Y; Right := Left + ColImages.Width; Bottom := Top + ColImages.Height; end; end; // caption if WrapCaption then ColCaptionText := FCaptionText else ColCaptionText := Text; if not (hpeText in ActualElements) and (Length(Text) > 0) then DrawButtonText(Handle, ColCaptionText, TextRectangle, IsEnabled, IsHoverIndex and (hoHotTrack in FHeader.FOptions) and not (tsUseThemes in FHeader.Treeview.FStates), DrawFormat, WrapCaption ); // sort glyph if not (hpeSortGlyph in ActualElements) and ShowSortGlyph then begin SortIndex := SortGlyphs[FHeader.FSortDirection, tsUseThemes in FHeader.Treeview.FStates]; {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, SortIndex * UtilityImageSize, 0, UtilityImages.MaskHandle); {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, SortGlyphPos.X, SortGlyphPos.Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, SortIndex * UtilityImageSize, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle,SortIndex * UtilityImageSize, 0, SRCCOPY); {$endif} end; // Show an indication if this column is the current drop target in a header drag operation. if not (hpeDropMark in ActualElements) and (DropMark <> dmmNone) then begin Y := (PaintRectangle.Top + PaintRectangle.Bottom - UtilityImages.Height) div 2; if DropMark = dmmLeft then {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Left, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, 0, 0, UtilityImages.MaskHandle) {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Left, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, 0, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle, 0, 0, SRCCOPY) {$endif} else {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Right - 16, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, UtilityImageSize, 0, UtilityImages.MaskHandle); {$else} StretchMaskBlt(FHeaderBitmap.Canvas.Handle, PaintRectangle.Right - 16, Y, UtilityImageSize, UtilityImageSize, UtilityImages.Canvas.Handle, UtilityImageSize, 0, UtilityImageSize, UtilityImageSize, UtilityImages.MaskHandle, UtilityImageSize, 0, SRCCOPY); {$endif} end; if ActualElements <> [] then begin SaveHandleState; FHeader.Treeview.DoAdvancedHeaderDraw(PaintInfo, ActualElements); RestoreHandleState; end; end else // Let application draw the header. FHeader.Treeview.DoHeaderDraw(FHeaderBitmap.Canvas, Items[FPositionToIndex[I]], PaintRectangle, IsHoverIndex, IsDownIndex, DropMark); SelectClipRgn(Handle, 0); end; end; end; // Blit the result to target. with R do BitBlt(DC, Left, Top, Right - Left, Bottom - Top, Handle, Left, Top, SRCCOPY); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualTreeColumns.SaveToStream(const Stream: TStream); var I: Integer; begin I := Count; Stream.WriteBuffer(I, SizeOf(I)); if I > 0 then begin for I := 0 to Count - 1 do TVirtualTreeColumn(Items[I]).SaveToStream(Stream); Stream.WriteBuffer(FPositionToIndex[0], Count * SizeOf(Cardinal)); end; // Data introduced with header stream version 5. Stream.WriteBuffer(DefaultWidth, SizeOf(DefaultWidth)); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeColumns.TotalWidth: Integer; var LastColumn: TColumnIndex; begin Result := 0; if (Count > 0) and (Length(FPositionToIndex) > 0) then begin LastColumn := FPositionToIndex[Count - 1]; if not (coVisible in Items[LastColumn].FOptions) then LastColumn := GetPreviousVisibleColumn(LastColumn); if LastColumn > NoColumn then with Items[LastColumn] do Result := FLeft + FWidth end; end; //----------------- TVTFixedAreaConstraints ---------------------------------------------------------------------------- constructor TVTFixedAreaConstraints.Create(AOwner: TVTHeader); begin inherited Create; FHeader := AOwner; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.SetConstraints(Index: Integer; Value: TVTConstraintPercent); begin case Index of 0: if Value <> FMaxHeightPercent then begin FMaxHeightPercent := Value; if (Value > 0) and (Value < FMinHeightPercent) then FMinHeightPercent := Value; Change; end; 1: if Value <> FMaxWidthPercent then begin FMaxWidthPercent := Value; if (Value > 0) and (Value < FMinWidthPercent) then FMinWidthPercent := Value; Change; end; 2: if Value <> FMinHeightPercent then begin FMinHeightPercent := Value; if (FMaxHeightPercent > 0) and (Value > FMaxHeightPercent) then FMaxHeightPercent := Value; Change; end; 3: if Value <> FMinWidthPercent then begin FMinWidthPercent := Value; if (FMaxWidthPercent > 0) and (Value > FMaxWidthPercent) then FMaxWidthPercent := Value; Change; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.Change; begin if Assigned(FOnChange) then FOnChange(Self); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTFixedAreaConstraints.Assign(Source: TPersistent); begin if Source is TVTFixedAreaConstraints then begin FMaxHeightPercent := TVTFixedAreaConstraints(Source).FMaxHeightPercent; FMaxWidthPercent := TVTFixedAreaConstraints(Source).FMaxWidthPercent; FMinHeightPercent := TVTFixedAreaConstraints(Source).FMinHeightPercent; FMinWidthPercent := TVTFixedAreaConstraints(Source).FMinWidthPercent; Change; end else inherited; end; //----------------- TVTHeader ----------------------------------------------------------------------------------------- constructor TVTHeader.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; FColumns := GetColumnsClass.Create(Self); FHeight := 17; FDefaultHeight := 17; FMinHeight := 10; FMaxHeight := 10000; FFont := TFont.Create; FFont.OnChange := FontChanged; FParentFont := False; FBackground := clBtnFace; FOptions := [hoColumnResize, hoDrag, hoShowSortGlyphs]; FImageChangeLink := TChangeLink.Create; FImageChangeLink.OnChange := ImageListChange; FSortColumn := NoColumn; FSortDirection := sdAscending; FMainColumn := NoColumn; FDragImage := TVTDragImage.Create(AOwner); with FDragImage do begin Fade := False; PostBlendBias := 0; PreBlendBias := -50; Transparency := 140; end; FFixedAreaConstraints := TVTFixedAreaConstraints.Create(Self); FFixedAreaConstraints.OnChange := FixedAreaConstraintsChanged; end; //---------------------------------------------------------------------------------------------------------------------- destructor TVTHeader.Destroy; begin FDragImage.Free; FFixedAreaConstraints.Free; FImageChangeLink.Free; FFont.Free; FColumns.Clear; // TCollection's Clear method is not virtual, so we have to call our own Clear method manually. FColumns.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.FontChanged(Sender: TObject); begin Invalidate(nil); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetMainColumn: TColumnIndex; begin if FColumns.Count > 0 then Result := FMainColumn else Result := NoColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetUseColumns: Boolean; begin Result := FColumns.Count > 0; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.IsFontStored: Boolean; begin Result := not ParentFont; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetAutoSizeIndex(Value: TColumnIndex); begin if FAutoSizeIndex <> Value then begin FAutoSizeIndex := Value; if hoAutoResize in FOptions then Columns.AdjustAutoSize(InvalidColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetBackground(Value: TColor); begin if FBackground <> Value then begin FBackground := Value; Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetColumns(Value: TVirtualTreeColumns); begin FColumns.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetDefaultHeight(Value: Integer); begin if Value < FMinHeight then Value := FMinHeight; if Value > FMaxHeight then Value := FMaxHeight; if FHeight = FDefaultHeight then SetHeight(Value); FDefaultHeight := Value; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetFont(const Value: TFont); begin FFont.Assign(Value); FParentFont := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetHeight(Value: Integer); var RelativeMaxHeight, RelativeMinHeight, EffectiveMaxHeight, EffectiveMinHeight: Integer; begin if not TreeView.HandleAllocated then begin FHeight := Value; Include(FStates, hsNeedScaling); end else begin with FFixedAreaConstraints do begin RelativeMaxHeight := ((Treeview.ClientHeight + FHeight) * FMaxHeightPercent) div 100; RelativeMinHeight := ((Treeview.ClientHeight + FHeight) * FMinHeightPercent) div 100; EffectiveMinHeight := IfThen(FMaxHeightPercent > 0, Min(RelativeMaxHeight, FMinHeight), FMinHeight); EffectiveMaxHeight := IfThen(FMinHeightPercent > 0, Max(RelativeMinHeight, FMaxHeight), FMaxHeight); Value := Min(Max(Value, EffectiveMinHeight), EffectiveMaxHeight); if FMinHeightPercent > 0 then Value := Max(RelativeMinHeight, Value); if FMaxHeightPercent > 0 then Value := Min(RelativeMaxHeight, Value); end; if FHeight <> Value then begin FHeight := Value; if not (csLoading in Treeview.ComponentState) and not (hsScaling in FStates) then RecalculateHeader; Treeview.Invalidate; UpdateWindow(Treeview.Handle); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetImages(const Value: TCustomImageList); begin if FImages <> Value then begin if Assigned(FImages) then begin FImages.UnRegisterChanges(FImageChangeLink); FImages.RemoveFreeNotification(FOwner); end; FImages := Value; if Assigned(FImages) then begin FImages.RegisterChanges(FImageChangeLink); FImages.FreeNotification(FOwner); end; if not (csLoading in Treeview.ComponentState) then Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMainColumn(Value: TColumnIndex); begin if csLoading in Treeview.ComponentState then FMainColumn := Value else begin if Value < 0 then Value := 0; if Value > FColumns.Count - 1 then Value := FColumns.Count - 1; if Value <> FMainColumn then begin FMainColumn := Value; if Treeview.HandleAllocated then begin Treeview.MainColumnChanged; if not (toExtendedFocus in Treeview.FOptions.FSelectionOptions) then Treeview.FocusedColumn := Value; Treeview.Invalidate; end else begin if not (toExtendedFocus in Treeview.FOptions.FSelectionOptions) then Treeview.FFocusedColumn := Value; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMaxHeight(Value: Integer); begin if Value < FMinHeight then Value := FMinHeight; if not IsWinNT and (Value > 10000) then Value := 10000; FMaxHeight := Value; SetHeight(FHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetMinHeight(Value: Integer); begin if Value < 0 then Value := 0; if Value > FMaxHeight then Value := FMaxHeight; FMinHeight := Value; SetHeight(FHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetOptions(Value: TVTHeaderOptions); var ToBeSet, ToBeCleared: TVTHeaderOptions; begin ToBeSet := Value - FOptions; ToBeCleared := FOptions - Value; FOptions := Value; if (hoAutoResize in (ToBeSet + ToBeCleared)) and (FColumns.Count > 0) then begin FColumns.AdjustAutoSize(InvalidColumn); if Treeview.HandleAllocated then begin Treeview.UpdateHorizontalScrollBar(False); if hoAutoResize in ToBeSet then Treeview.Invalidate; end; end; if not (csLoading in Treeview.ComponentState) and Treeview.HandleAllocated then begin if hoVisible in (ToBeSet + ToBeCleared) then RecalculateHeader; Invalidate(nil); Treeview.Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetParentFont(Value: Boolean); begin if FParentFont <> Value then begin FParentFont := Value; if FParentFont then FFont.Assign(FOwner.Font); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetSortColumn(Value: TColumnIndex); begin if csLoading in Treeview.ComponentState then FSortColumn := Value else DoSetSortColumn(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetSortDirection(const Value: TSortDirection); begin if Value <> FSortDirection then begin FSortDirection := Value; Invalidate(nil); if (toAutoSort in Treeview.FOptions.FAutoOptions) and (Treeview.FUpdateCount = 0) then Treeview.SortTree(FSortColumn, FSortDirection, True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SetStyle(Value: TVTHeaderStyle); begin if FStyle <> Value then begin FStyle := Value; if not (csLoading in Treeview.ComponentState) then Invalidate(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.ChangeScale(M, D: Integer); begin FFont.Size := MulDiv(FFont.Size, M, D); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DetermineSplitterIndex(const P: TPoint): Boolean; // Tries to find the index of that column whose right border corresponds to P. // Result is True if column border was hit (with -3..+5 pixels tolerance). // For continuous resizing the current track index and the column's left/right border are set. // Note: The hit test is checking from right to left (or left to right in RTL mode) to make enlarging of zero-sized // columns possible. var I, VisibleFixedWidth: Integer; SplitPoint: Integer; //--------------- local function -------------------------------------------- function IsNearBy(IsFixedCol: Boolean; LeftTolerance, RightTolerance: Integer): Boolean; begin if IsFixedCol then Result := (P.X < SplitPoint + Treeview.FEffectiveOffsetX + RightTolerance) and (P.X > SplitPoint + Treeview.FEffectiveOffsetX - LeftTolerance) else Result := (P.X > VisibleFixedWidth) and (P.X < SplitPoint + RightTolerance) and (P.X > SplitPoint - LeftTolerance); end; //--------------- end local function ---------------------------------------- begin Result := False; FColumns.FTrackIndex := NoColumn; VisibleFixedWidth := FColumns.GetVisibleFixedWidth; if FColumns.Count > 0 then begin if Treeview.UseRightToLeftAlignment then begin SplitPoint := -Treeview.FEffectiveOffsetX; if Integer(Treeview.FRangeX) < Treeview.ClientWidth then Inc(SplitPoint, Treeview.ClientWidth - Integer(Treeview.FRangeX)); for I := 0 to FColumns.Count - 1 do with FColumns, Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if IsNearBy(coFixed in FOptions, 5, 3) then begin if CanSplitterResize(P, FPositionToIndex[I]) then begin Result := True; FTrackIndex := FPositionToIndex[I]; // Keep the right border of this column. This and the current mouse position // directly determine the current column width. FTrackPoint.X := SplitPoint + IfThen(coFixed in FOptions, Treeview.FEffectiveOffsetX) + FWidth; FTrackPoint.Y := P.Y; Break; end; end; Inc(SplitPoint, FWidth); end; end else begin SplitPoint := -Treeview.FEffectiveOffsetX + Integer(Treeview.FRangeX); for I := FColumns.Count - 1 downto 0 do with FColumns, Items[FPositionToIndex[I]] do if coVisible in FOptions then begin if IsNearBy(coFixed in FOptions, 3, 5) then begin if CanSplitterResize(P, FPositionToIndex[I]) then begin Result := True; FTrackIndex := FPositionToIndex[I]; // Keep the left border of this column. This and the current mouse position // directly determine the current column width. FTrackPoint.X := SplitPoint + IfThen(coFixed in FOptions, Treeview.FEffectiveOffsetX) - FWidth; FTrackPoint.Y := P.Y; Break; end; end; Dec(SplitPoint, FWidth); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterAutoFitColumn(Column: TColumnIndex); begin if Assigned(TreeView.FOnAfterAutoFitColumn) then TreeView.FOnAfterAutoFitColumn(Self, Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterColumnWidthTracking(Column: TColumnIndex); // Tell the application that a column width tracking operation has been finished. begin if Assigned(TreeView.FOnAfterColumnWidthTracking) then TreeView.FOnAfterColumnWidthTracking(Self, Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoAfterHeightTracking; // Tell the application that a height tracking operation has been finished. begin if Assigned(TreeView.FOnAfterHeaderHeightTracking) then TreeView.FOnAfterHeaderHeightTracking(Self); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoBeforeAutoFitColumn(Column: TColumnIndex; SmartAutoFitType: TSmartAutoFitType): Boolean; // Query the application if we may autofit a column. begin Result := True; if Assigned(TreeView.FOnBeforeAutoFitColumn) then TreeView.FOnBeforeAutoFitColumn(Self, Column, SmartAutoFitType, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoBeforeColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState); // Tell the a application that a column width tracking operation may begin. begin if Assigned(TreeView.FOnBeforeColumnWidthTracking) then TreeView.FOnBeforeColumnWidthTracking(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoBeforeHeightTracking(Shift: TShiftState); // Tell the application that a height tracking operation may begin. begin if Assigned(TreeView.FOnBeforeHeaderHeightTracking) then TreeView.FOnBeforeHeaderHeightTracking(Self, Shift); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoColumnWidthDblClickResize(Column: TColumnIndex; P: TPoint; Shift: TShiftState): Boolean; // Queries the application whether a double click on the column splitter should resize the column. begin Result := True; if Assigned(TreeView.FOnColumnWidthDblClickResize) then TreeView.FOnColumnWidthDblClickResize(Self, Column, Shift, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoColumnWidthTracking(Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; begin Result := True; if Assigned(TreeView.FOnColumnWidthTracking) then TreeView.FOnColumnWidthTracking(Self, Column, Shift, TrackPoint, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoGetPopupMenu(Column: TColumnIndex; Position: TPoint): TPopupMenu; // Queries the application whether there is a column specific header popup menu. var AskParent: Boolean; begin Result := nil; if Assigned(TreeView.FOnGetPopupMenu) then TreeView.FOnGetPopupMenu(TreeView, nil, Column, Position, AskParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoHeightTracking(var P: TPoint; Shift: TShiftState): Boolean; begin Result := True; if Assigned(TreeView.FOnHeaderHeightTracking) then TreeView.FOnHeaderHeightTracking(Self, P, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.DoHeightDblClickResize(var P: TPoint; Shift: TShiftState): Boolean; begin Result := True; if Assigned(TreeView.FOnHeaderHeightDblClickResize) then TreeView.FOnHeaderHeightDblClickResize(Self, P, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DoSetSortColumn(Value: TColumnIndex); begin if Value < NoColumn then Value := NoColumn; if Value > Columns.Count - 1 then Value := Columns.Count - 1; if FSortColumn <> Value then begin if FSortColumn > NoColumn then Invalidate(Columns[FSortColumn]); FSortColumn := Value; if FSortColumn > NoColumn then Invalidate(Columns[FSortColumn]); if (toAutoSort in Treeview.FOptions.FAutoOptions) and (Treeview.FUpdateCount = 0) then Treeview.SortTree(FSortColumn, FSortDirection, True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.DragTo(const P: TPoint); // Moves the drag image to a new position, which is determined from the passed point P and the previous // mouse position. var I, NewTarget: Integer; // optimized drag image move support ClientP: TPoint; Left, Right: Integer; NeedRepaint: Boolean; // True if the screen needs an update (changed drop target or drop side) begin // Determine new drop target and which side of it is prefered. ClientP := Treeview.ScreenToClient(P); // Make coordinates relative to (0, 0) of the non-client area. Inc(ClientP.Y, FHeight); NewTarget := FColumns.ColumnFromPosition(ClientP); NeedRepaint := (NewTarget <> InvalidColumn) and (NewTarget <> FColumns.FDropTarget); if NewTarget >= 0 then begin FColumns.GetColumnBounds(NewTarget, Left, Right); if (ClientP.X < ((Left + Right) div 2)) <> FColumns.FDropBefore then begin NeedRepaint := True; FColumns.FDropBefore := not FColumns.FDropBefore; end; end; if NeedRepaint then begin // Invalidate columns which need a repaint. if FColumns.FDropTarget > NoColumn then begin I := FColumns.FDropTarget; FColumns.FDropTarget := NoColumn; Invalidate(FColumns.Items[I]); end; if (NewTarget > NoColumn) and (NewTarget <> FColumns.FDropTarget) then begin Invalidate(FColumns.Items[NewTarget]); FColumns.FDropTarget := NewTarget; end; end; FDragImage.DragTo(P, NeedRepaint); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.FixedAreaConstraintsChanged(Sender: TObject); // This method gets called when FFixedAreaConstraints is changed. begin Include(FStates, hsNeedScaling); if Treeview.HandleAllocated then RescaleHeader; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetColumnsClass: TVirtualTreeColumnsClass; // Returns the class to be used for the actual column implementation. descendants may optionally override this and // return their own class. begin Result := TVirtualTreeColumns; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetOwner: TPersistent; begin Result := FOwner; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.GetShiftState: TShiftState; begin Result := []; if GetKeyState(VK_SHIFT) < 0 then Include(Result, ssShift); if GetKeyState(VK_LWIN) < 0 then // Mac OS X substitute of ssCtrl Include(Result, ssMeta); if GetKeyState(VK_CONTROL) < 0 then Include(Result, ssCtrl); if GetKeyState(VK_MENU) < 0 then Include(Result, ssAlt); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.HandleHeaderMouseMove(var Message: TLMMouseMove): Boolean; var P: TPoint; I: TColumnIndex; begin Result := False; with Message do begin P := Point(XPos, YPos); if hsColumnWidthTrackPending in FStates then begin FStates := FStates - [hsColumnWidthTrackPending] + [hsColumnWidthTracking]; HandleHeaderMouseMove := True; Result := 0; end else if hsHeightTrackPending in FStates then begin FStates := FStates - [hsHeightTrackPending] + [hsHeightTracking]; HandleHeaderMouseMove := True; Result := 0; end else if hsColumnWidthTracking in FStates then begin if DoColumnWidthTracking(FColumns.FTrackIndex, GetShiftState, FTrackPoint, P) then if Treeview.UseRightToLeftAlignment then FColumns[FColumns.FTrackIndex].Width := FTrackPoint.X - XPos else FColumns[FColumns.FTrackIndex].Width := XPos - FTrackPoint.X; HandleHeaderMouseMove := True; Result := 0; end else if hsHeightTracking in FStates then begin //lclheader //fixes setting height Dec(P.Y, FHeight); if DoHeightTracking(P, GetShiftState) then SetHeight(Integer(FHeight) + P.Y); HandleHeaderMouseMove := True; Result := 0; end else begin if hsDragPending in FStates then begin P := Treeview.ClientToScreen(P); // start actual dragging if allowed if (hoDrag in FOptions) and Treeview.DoHeaderDragging(FColumns.FDownIndex) then begin if ((Abs(FDragStart.X - P.X) > DragManager.DragThreshold) or (Abs(FDragStart.Y - P.Y) > DragManager.DragThreshold)) then begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag], 'HandleHeaderMouseMove - DragIndex: %d - DownIndex: %d', [FColumns.FDragIndex, FColumns.FDownIndex]);{$endif} I := FColumns.FDownIndex; FColumns.FDownIndex := NoColumn; FColumns.FHoverIndex := NoColumn; if I > NoColumn then Invalidate(FColumns[I]); //todo: implement drag image under gtk PrepareDrag(P, FDragStart); FStates := FStates - [hsDragPending] + [hsDragging]; HandleHeaderMouseMove := True; Result := 0; end; end; end else if hsDragging in FStates then begin DragTo(Treeview.ClientToScreen(P)); HandleHeaderMouseMove := True; Result := 0; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.HandleMessage(var Message: TLMessage): Boolean; // The header gets here the opportunity to handle certain messages before they reach the tree. This is important // because the tree needs to handle various non-client area messages for the header as well as some dragging/tracking // events. // By returning True the message will not be handled further, otherwise the message is then dispatched // to the proper message handlers. var P: TPoint; R: TRect; I: TColumnIndex; OldPosition: Integer; HitIndex: TColumnIndex; NewCursor: HCURSOR; Button: TMouseButton; Menu: TPopupMenu; IsInHeader, IsHSplitterHit, IsVSplitterHit: Boolean; //--------------- local function -------------------------------------------- function HSPlitterHit: Boolean; var NextCol: TColumnIndex; begin Result := (hoColumnResize in FOptions) and DetermineSplitterIndex(P); if Result and not InHeader(P) then begin NextCol := FColumns.GetNextVisibleColumn(FColumns.FTrackIndex); if not (coFixed in FColumns[FColumns.FTrackIndex].Options) or (NextCol <= NoColumn) or (coFixed in FColumns[NextCol].Options) or (P.Y > Integer(Treeview.FRangeY)) then Result := False; end; end; //--------------- end local function ---------------------------------------- begin Result := False; case Message.Msg of LM_SIZE: begin if not (tsWindowCreating in FOwner.FStates) then if (hoAutoResize in FOptions) and not (hsAutoSizing in FStates) then begin FColumns.AdjustAutoSize(InvalidColumn); Invalidate(nil); end else if not (hsScaling in FStates) then begin RescaleHeader; Invalidate(nil); end; end; CM_PARENTFONTCHANGED: if FParentFont then FFont.Assign(FOwner.Font); CM_BIDIMODECHANGED: for I := 0 to FColumns.Count - 1 do if coParentBiDiMode in FColumns[I].FOptions then FColumns[I].ParentBiDiModeChanged; LM_MBUTTONDOWN: begin //lclheader: NCMessages are given in screen coordinates unlike the ordinary with TLMMButtonDown(Message) do P:= Point(XPos, YPos); //P := Treeview.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then FOwner.DoHeaderMouseDown(mbMiddle, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_MBUTTONUP: begin with TLMMButtonUp(Message) do P:= Point(XPos, YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then begin FColumns.HandleClick(P, mbMiddle, True, False); FOwner.DoHeaderMouseUp(mbMiddle, GetShiftState, P.X, P.Y + Integer(FHeight)); FColumns.FDownIndex := NoColumn; end; end; LM_LBUTTONDBLCLK, LM_MBUTTONDBLCLK, LM_RBUTTONDBLCLK: begin with TLMLButtonDblClk(Message) do P := Point(XPos, YPos); if (hoHeightDblClickResize in FOptions) and InHeaderSplitterArea(P) and (FDefaultHeight > 0) then begin if DoHeightDblClickResize(P, GetShiftState) and (FDefaultHeight > 0) then SetHeight(FMinHeight); Result := True; end else if HSplitterHit and (Message.Msg = LM_LBUTTONDBLCLK) and (hoDblClickResize in FOptions) and (FColumns.FTrackIndex > NoColumn) then begin // If the click was on a splitter then resize column to smallest width. if DoColumnWidthDblClickResize(FColumns.FTrackIndex, P, GetShiftState) then AutoFitColumns(True, smaUseColumnOption, Columns.FTrackIndex, Columns.FTrackIndex); Message.Result := 0; Result := True; end else if InHeader(P) and (Message.Msg <> LM_LBUTTONDBLCLK) then begin case Message.Msg of LM_MBUTTONDBLCLK: Button := mbMiddle; LM_RBUTTONDBLCLK: Button := mbRight; else // WM_NCLBUTTONDBLCLK Button := mbLeft; end; FColumns.HandleClick(P, Button, True, True); end; end; // The "hot" area of the headers horizontal splitter is partly within the client area of the the tree, so we need // to handle WM_LBUTTONDOWN here, too. LM_LBUTTONDOWN: begin if csDesigning in Treeview.ComponentState then Exit; Application.CancelHint; // make sure no auto scrolling is active... KillTimer(Treeview.Handle, ScrollTimer); Treeview.DoStateChange([], [tsScrollPending, tsScrolling]); // ... pending editing is cancelled (actual editing remains active) KillTimer(Treeview.Handle, EditTimer); Treeview.DoStateChange([], [tsEditPending]); with TLMLButtonDown(Message) do begin // want the drag start point in screen coordinates P := Point(XPos, YPos); FDragStart := Treeview.ClientToScreen(P); //FDragStart := Point(XPos, YPos); //P := Treeview.ScreenToClient(FDragStart); end; IsInHeader := InHeader(P); IsVSplitterHit := (hoHeightResize in FOptions) and InHeaderSplitterArea(P); IsHSplitterHit := HSplitterHit; if IsVSplitterHit or IsHSplitterHit then begin FTrackStart := P; FColumns.FHoverIndex := NoColumn; if IsVSplitterHit then begin DoBeforeHeightTracking(GetShiftState); Include(FStates, hsHeightTrackPending) end else begin DoBeforeColumnWidthTracking(FColumns.FTrackIndex, GetShiftState); Include(FStates, hsColumnWidthTrackPending); end; SetCapture(Treeview.Handle); Result := True; Message.Result := 0; end else if IsInHeader then begin HitIndex := Columns.AdjustDownColumn(P); if (hoDrag in FOptions) and (HitIndex > NoColumn) and (coDraggable in FColumns[HitIndex].FOptions) then begin // Show potential drag operation. // Disabled columns do not start a drag operation because they can't be clicked. Include(FStates, hsDragPending); SetCapture(Treeview.Handle); Result := True; Message.Result := 0; end; end; // This is a good opportunity to notify the application. if IsInHeader then FOwner.DoHeaderMouseDown(mbLeft, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_RBUTTONDOWN: begin with TLMRButtonDown(Message) do P:=Point(XPos,YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then FOwner.DoHeaderMouseDown(mbRight, GetShiftState, P.X, P.Y + Integer(FHeight)); end; LM_RBUTTONUP: if not (csDesigning in FOwner.ComponentState) then with TLMRButtonUp(Message) do begin Application.CancelHint; P := Point(XPos,YPos); //P := FOwner.ScreenToClient(Point(XPos, YPos)); if InHeader(P) then begin FColumns.HandleClick(P, mbRight, True, False); FOwner.DoHeaderMouseUp(mbRight, GetShiftState, P.X, P.Y + Integer(FHeight)); FColumns.FDownIndex := NoColumn; FColumns.FTrackIndex := NoColumn; Menu := FPopupMenu; if not Assigned(Menu) then Menu := DoGetPopupMenu(FColumns.ColumnFromPosition(Point(P.X, P.Y + Integer(FHeight))), P); // Trigger header popup if there's one. if Assigned(Menu) then begin KillTimer(Treeview.Handle, ScrollTimer); FColumns.FHoverIndex := NoColumn; Treeview.DoStateChange([], [tsScrollPending, tsScrolling]); Menu.PopupComponent := Treeview; P := Treeview.ClientToScreen(Point(XPos, YPos)); Menu.Popup(P.X, P.Y); HandleMessage := True; end; end; end; // When the tree window has an active mouse capture then we only get "client-area" messages. LM_LBUTTONUP: begin Application.CancelHint; if FStates <> [] then begin ReleaseCapture; //lcl if hsColumnWidthTracking in FStates then begin if not InHeader(SmallPointToPoint(TLMLButtonUp(Message).Pos)) then TreeView.Cursor := crDefault; end; if hsDragging in FStates then begin // successfull dragging moves columns with TLMLButtonUp(Message) do P := Treeview.ClientToScreen(Point(XPos, YPos)); GetWindowRect(Treeview.Handle, R); {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / R',R);{$endif} with FColumns do begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropTarget: %d FDragIndex: %d FDragIndexPosition: %d', [FDropTarget, FDragIndex, FColumns[FDragIndex].Position]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropBefore', FColumns.FDropBefore);{$endif} FDragImage.EndDrag; if (FDropTarget > -1) and (FDropTarget <> FDragIndex) and PtInRect(R, P) then begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Header - EndDrag / FDropTargetPosition', FColumns[FDropTarget].Position);{$endif} OldPosition := FColumns[FDragIndex].Position; if FColumns.FDropBefore then begin if FColumns[FDragIndex].Position < FColumns[FDropTarget].Position then FColumns[FDragIndex].Position := Max(0, FColumns[FDropTarget].Position - 1) else FColumns[FDragIndex].Position := FColumns[FDropTarget].Position; end else begin if FColumns[FDragIndex].Position < FColumns[FDropTarget].Position then FColumns[FDragIndex].Position := FColumns[FDropTarget].Position else FColumns[FDragIndex].Position := FColumns[FDropTarget].Position + 1; end; Treeview.DoHeaderDragged(FDragIndex, OldPosition); end else Treeview.DoHeaderDraggedOut(FDragIndex, P); FDropTarget := NoColumn; end; Invalidate(nil); end; Result := True; Message.Result := 0; end; case Message.Msg of LM_LBUTTONUP: with TLMLButtonUp(Message) do begin if FColumns.FDownIndex > NoColumn then FColumns.HandleClick(Point(XPos, YPos), mbLeft, False, False); if FStates <> [] then FOwner.DoHeaderMouseUp(mbLeft, KeysToShiftState(Keys), XPos, YPos); end; //todo: there's a difference here { LM_NCLBUTTONUP: with TLMLButtonUp(Message) do begin P := FOwner.ScreenToClient(Point(XPos, YPos)); FColumns.HandleClick(P, mbLeft, False, False); FOwner.DoHeaderMouseUp(mbLeft, GetShiftState, P.X, P.Y + Integer(FHeight)); end; } end; if FColumns.FTrackIndex > NoColumn then begin if hsColumnWidthTracking in FStates then DoAfterColumnWidthTracking(FColumns.FTrackIndex); Invalidate(Columns[FColumns.FTrackIndex]); FColumns.FTrackIndex := NoColumn; end; if FColumns.FDownIndex > NoColumn then begin Invalidate(Columns[FColumns.FDownIndex]); FColumns.FDownIndex := NoColumn; end; if hsHeightTracking in FStates then DoAfterHeightTracking; FStates := FStates - [hsDragging, hsDragPending, hsColumnWidthTracking, hsColumnWidthTrackPending, hsHeightTracking, hsHeightTrackPending]; end; // hovering, mouse leave detection CM_MOUSELEAVE: with FColumns do begin if FHoverIndex > NoColumn then Invalidate(Items[FHoverIndex]); FHoverIndex := NoColumn; FClickIndex := NoColumn; FDownIndex := NoColumn; end; //todo: see the difference to below LM_MOUSEMOVE: with TLMMouseMove(Message), FColumns do begin //lcl HandleMessage := HandleHeaderMouseMove(TLMMouseMove(Message)); P := Point(XPos,YPos); //P := Treeview.ScreenToClient(Point(XPos, YPos)); IsInHeader := InHeader(P); if IsInHeader then begin Treeview.DoHeaderMouseMove(GetShiftState, P.X, P.Y); if ((AdjustHoverColumn(P)) or ((FDownIndex > NoColumn) and (FHoverIndex <> FDownIndex))) then begin Invalidate(nil); // todo: under lcl, the hint is show even if HintMouseMessage is not implemented // Is it necessary here? // use Delphi's internal hint handling for header hints too if hoShowHint in FOptions then begin // client coordinates! XPos := P.x; YPos := P.y; Application.HintMouseMessage(Treeview, Message); end; end; end else begin if FHoverIndex > NoColumn then Invalidate(Items[FHoverIndex]); FHoverIndex := NoColumn; FClickIndex := NoColumn; FDownIndex := NoColumn; end; //Adjust Cursor if not (csDesigning in FOwner.ComponentState) and (FStates = []) then begin //todo: see a way to store the user defined cursor. IsHSplitterHit := IsInHeader and HSplitterHit; IsVSplitterHit := (hoHeightResize in FOptions) and InHeaderSplitterArea(P); if IsVSplitterHit or IsHSplitterHit then begin NewCursor := crDefault; if IsVSplitterHit and (hoHeightResize in FOptions) then NewCursor := crVertSplit else if IsHSplitterHit then NewCursor := crHeaderSplit; Treeview.DoGetHeaderCursor(NewCursor); if NewCursor <> crDefault then begin Treeview.Cursor := NewCursor; HandleMessage := True; Message.Result := 1; end; end; end else begin Message.Result := 1; HandleMessage := True; end; end; LM_KEYDOWN, LM_KILLFOCUS: if (Message.Msg = LM_KILLFOCUS) or (TLMKeyDown(Message).CharCode = VK_ESCAPE) then begin if hsDragging in FStates then begin ReleaseCapture; FDragImage.EndDrag; Exclude(FStates, hsDragging); FColumns.FDropTarget := NoColumn; Invalidate(nil); Result := True; Message.Result := 0; end else begin if [hsColumnWidthTracking, hsHeightTracking] * FStates <> [] then begin ReleaseCapture; if hsColumnWidthTracking in FStates then DoAfterColumnWidthTracking(FColumns.FTrackIndex); if hsHeightTracking in FStates then DoAfterHeightTracking; Result := True; Message.Result := 0; end; FStates := FStates - [hsColumnWidthTracking, hsColumnWidthTrackPending, hsHeightTracking, hsHeightTrackPending]; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.ImageListChange(Sender: TObject); begin if not (csDestroying in Treeview.ComponentState) then Invalidate(nil); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.PrepareDrag(P, Start: TPoint); // Initializes dragging of the header, P is the current mouse postion and Start the initial mouse position. var HeaderR: TRect; Image: TBitmap; ImagePos: TPoint; DragColumn: TVirtualTreeColumn; begin // Determine initial position of drag image (screen coordinates). FColumns.FDropTarget := NoColumn; Start := Treeview.ScreenToClient(Start); FColumns.FDragIndex := FColumns.ColumnFromPosition(Start); DragColumn := FColumns[FColumns.FDragIndex]; HeaderR := Treeview.FHeaderRect; // Set right border of the header rectangle to the maximum extent. // Adjust top border too, it is already covered elsewhere. HeaderR.Right := FColumns.TotalWidth; HeaderR.Top := 0; // Take out influence of border since we need a seamless drag image. OffsetRect(HeaderR, -Treeview.BorderWidth, -Treeview.BorderWidth); if Treeview.UseRightToLeftAlignment then Dec(HeaderR.Left, Treeview.ComputeRTLOffset); Image := TBitmap.Create; with Image do try PixelFormat := pf32Bit; Width := DragColumn.Width; Height := FHeight; // Erase the entire image with the color key value, for the case not everything // in the image is covered by the header image. Canvas.Brush.Color := clBtnFace; Canvas.FillRect(Rect(0, 0, Width, Height)); // Now move the window origin of bitmap DC so that although the entire header is painted // only the dragged column becomes visible. SetWindowOrgEx(Canvas.Handle, DragColumn.FLeft, 0, nil); FColumns.PaintHeader(Canvas.Handle, HeaderR, 0); SetWindowOrgEx(Canvas.Handle, 0, 0, nil); if Treeview.UseRightToLeftAlignment then ImagePos := Treeview.ClientToScreen(Point(DragColumn.Left + Treeview.ComputeRTLOffset(True), 0)) else ImagePos := Treeview.ClientToScreen(Point(DragColumn.Left, 0)); //lclheader // Column rectangles are given in local window coordinates not client coordinates. // The above statement is not valid under LCL //Dec(ImagePos.Y, FHeight); if hoRestrictDrag in FOptions then FDragImage.MoveRestriction := dmrHorizontalOnly else FDragImage.MoveRestriction := dmrNone; FDragImage.PrepareDrag(Image, ImagePos, P, nil); FDragImage.ShowDragImage; finally Image.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RecalculateHeader; // Initiate a recalculation of the non-client area of the owner tree. begin if Treeview.HandleAllocated then begin Treeview.UpdateHeaderRect; //lclheader //not necessary since header is draw inside client area //SetWindowPos(Treeview.Handle, 0, 0, 0, 0, 0, SWP_FRAMECHANGED or SWP_NOMOVE or SWP_NOACTIVATE or SWP_NOOWNERZORDER or // SWP_NOSENDCHANGING or SWP_NOSIZE or SWP_NOZORDER); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RescaleHeader; // Rescale the fixed elements (fixed columns, header itself) to FixedAreaConstraints. var FixedWidth, MaxFixedWidth, MinFixedWidth: Integer; //--------------- local function -------------------------------------------- procedure ComputeConstraints; var I: TColumnIndex; begin with FColumns do begin I := GetFirstVisibleColumn; while I > NoColumn do begin if (coFixed in FColumns[I].Options) and (FColumns[I].Width < FColumns[I].MinWidth) then FColumns[I].FWidth := FColumns[I].FMinWidth; I := GetNextVisibleColumn(I); end; FixedWidth := GetVisibleFixedWidth; end; with FFixedAreaConstraints do begin MinFixedWidth := (TreeView.ClientWidth * FMinWidthPercent) div 100; MaxFixedWidth := (TreeView.ClientWidth * FMaxWidthPercent) div 100; end; end; //----------- end local function -------------------------------------------- begin if ([csLoading, csReading, csWriting, csDestroying] * Treeview.ComponentState = []) and not (hsLoading in FStates) and Treeview.HandleAllocated then begin Include(FStates, hsScaling); SetHeight(FHeight); RecalculateHeader; with FFixedAreaConstraints do if (FMinHeightPercent > 0) or (FMaxHeightPercent > 0) then begin ComputeConstraints; with FColumns do if (FMaxWidthPercent > 0) and (FixedWidth > MaxFixedWidth) then ResizeColumns(MaxFixedWidth - FixedWidth, 0, Count - 1, [coVisible, coFixed]) else if (FMinWidthPercent > 0) and (FixedWidth < MinFixedWidth) then ResizeColumns(MinFixedWidth - FixedWidth, 0, Count - 1, [coVisible, coFixed]); FColumns.UpdatePositions; end; Exclude(FStates, hsScaling); Exclude(FStates, hsNeedScaling); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.UpdateMainColumn; // Called once the load process of the owner tree is done. begin if FMainColumn < 0 then FMainColumn := 0; if FMainColumn > FColumns.Count - 1 then FMainColumn := FColumns.Count - 1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.UpdateSpringColumns; var I: TColumnIndex; SpringCount: Integer; Sign: Integer; ChangeBy: Single; Difference: Single; NewAccumulator: Single; begin with TreeView do ChangeBy := FHeaderRect.Right - FHeaderRect.Left - FLastWidth; if (hoAutoSpring in FOptions) and (FLastWidth <> 0) and (ChangeBy <> 0) then begin // Stay positive if downsizing the control. if ChangeBy < 0 then Sign := -1 else Sign := 1; ChangeBy := Abs(ChangeBy); // Count how many columns have spring enabled. SpringCount := 0; for I := 0 to FColumns.Count-1 do if [coVisible, coAutoSpring] * FColumns[I].FOptions = [coVisible, coAutoSpring] then Inc(SpringCount); if SpringCount > 0 then begin // Calculate the size to add/sub to each columns. Difference := ChangeBy / SpringCount; // Adjust the column's size accumulators and resize if the result is >= 1. for I := 0 to FColumns.Count - 1 do if [coVisible, coAutoSpring] * FColumns[I].FOptions = [coVisible, coAutoSpring] then begin // Sum up rest changes from previous runs and the amount from this one and store it in the // column. If there is at least one pixel difference then do a resize and reset the accumulator. NewAccumulator := FColumns[I].FSpringRest + Difference; // Set new width if at least one pixel size difference is reached. if NewAccumulator >= 1 then FColumns[I].SetWidth(FColumns[I].FWidth + (Trunc(NewAccumulator) * Sign)); FColumns[I].FSpringRest := Frac(NewAccumulator); // Keep track of the size count. ChangeBy := ChangeBy - Difference; // Exit loop if resize count drops below freezing point. if ChangeBy < 0 then Break; end; end; end; with TreeView do FLastWidth := FHeaderRect.Right - FHeaderRect.Left; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.AllowFocus(ColumnIndex: TColumnIndex): Boolean; begin Result := False; if not FColumns.IsValidColumn(ColumnIndex) then exit; // Just in case. Result := (coAllowFocus in FColumns[ColumnIndex].Options); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.Assign(Source: TPersistent); begin if Source is TVTHeader then begin AutoSizeIndex := TVTHeader(Source).AutoSizeIndex; Background := TVTHeader(Source).Background; Columns := TVTHeader(Source).Columns; Font := TVTHeader(Source).Font; FixedAreaConstraints.Assign(TVTHeader(Source).FixedAreaConstraints); Height := TVTHeader(Source).Height; Images := TVTHeader(Source).Images; MainColumn := TVTHeader(Source).MainColumn; Options := TVTHeader(Source).Options; ParentFont := TVTHeader(Source).ParentFont; PopupMenu := TVTHeader(Source).PopupMenu; SortColumn := TVTHeader(Source).SortColumn; SortDirection := TVTHeader(Source).SortDirection; Style := TVTHeader(Source).Style; RescaleHeader; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.AutoFitColumns(Animated: Boolean = True; SmartAutoFitType: TSmartAutoFitType = smaUseColumnOption; RangeStartCol: Integer = NoColumn; RangeEndCol: Integer = NoColumn); //--------------- local functions ------------------------------------------- function GetUseSmartColumnWidth(ColumnIndex: TColumnIndex): Boolean; begin Result := False; case SmartAutoFitType of smaAllColumns: Result := True; smaNoColumn: Result := False; smaUseColumnOption: Result := coSmartResize in FColumns.Items[ColumnIndex].FOptions; end; end; //---------------------------------------------------------------------------- procedure DoAutoFitColumn(Column: TColumnIndex); begin with FColumns do if ([coResizable, coVisible] * Items[FPositionToIndex[Column]].FOptions = [coResizable, coVisible]) and DoBeforeAutoFitColumn(FPositionToIndex[Column], SmartAutoFitType) and not TreeView.OperationCanceled then begin if Animated then AnimatedResize(FPositionToIndex[Column], Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column]))) else FColumns[FPositionToIndex[Column]].Width := Treeview.GetMaxColumnWidth(FPositionToIndex[Column], GetUseSmartColumnWidth(FPositionToIndex[Column])); DoAfterAutoFitColumn(FPositionToIndex[Column]); end; end; //--------------- end local functions ---------------------------------------- var I: Integer; StartCol, EndCol: Integer; begin StartCol := Max(NoColumn + 1, RangeStartCol); if RangeEndCol <= NoColumn then EndCol := FColumns.Count - 1 else EndCol := Min(RangeEndCol, FColumns.Count - 1); if StartCol > EndCol then Exit; // nothing to do TreeView.BeginOperation; if Assigned(TreeView.FOnBeforeAutoFitColumns) then TreeView.FOnBeforeAutoFitColumns(Self, SmartAutoFitType); for I := StartCol to EndCol do DoAutoFitColumn(I); if Assigned(TreeView.FOnAfterAutoFitColumns) then TreeView.FOnAfterAutoFitColumns(Self); Treeview.EndOperation; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.InHeader(const P: TPoint): Boolean; // Determines whether the given point (client coordinates!) is within the header rectangle (non-client coordinates). begin //lclheader //todo: remove this function and use PtInRect directly ?? Result := PtInRect(TreeView.FHeaderRect, P); end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.InHeaderSplitterArea(P: TPoint): Boolean; // Determines whether the given point (client coordinates!) hits the horizontal splitter area of the header. var R: TRect; begin Result := (hoVisible in FOptions); if Result then begin R := Treeview.FHeaderRect; R.Top := R.Bottom - 2; Inc(R.Bottom, 2); Result := PtInRect(R, P); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.Invalidate(Column: TVirtualTreeColumn; ExpandToBorder: Boolean = False); // Because the header is in the non-client area of the tree it needs some special handling in order to initiate its // repainting. // If ExpandToBorder is True then not only the given column but everything or (depending on hoFullRepaintOnResize) just // everything to its right (or left, in RTL mode) will be invalidated (useful for resizing). This makes only sense when // a column is given. var R: TRect; begin if (hoVisible in FOptions) and Treeview.HandleAllocated then with Treeview do begin if Column = nil then R := FHeaderRect else begin R := Column.GetRect; if not (coFixed in Column.Options) then OffsetRect(R, -FEffectiveOffsetX, 0); if UseRightToLeftAlignment then OffsetRect(R, ComputeRTLOffset, 0); if ExpandToBorder then begin if (hoFullRepaintOnResize in FHeader.FOptions) then begin R.Left := FHeaderRect.Left; R.Right := FHeaderRect.Right; end else begin if UseRightToLeftAlignment then R.Left := FHeaderRect.Left else R.Right := FHeaderRect.Right; end; end; end; //lclheader RedrawWindow(Handle, @R, 0, RDW_FRAME or RDW_INVALIDATE or RDW_VALIDATE or RDW_NOINTERNALPAINT or RDW_NOERASE or RDW_NOCHILDREN); { // Current position of the owner in screen coordinates. GetWindowRect(Handle, RW); // Consider the header within this rectangle. OffsetRect(R, RW.Left, RW.Top); // Expressed in client coordinates (because RedrawWindow wants them so, they will actually become negative). MapWindowPoints(0, Handle, R, 2); RedrawWindow(Handle, @R, 0, RDW_FRAME or RDW_INVALIDATE or RDW_VALIDATE or RDW_NOINTERNALPAINT or RDW_NOERASE or RDW_NOCHILDREN); } end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.LoadFromStream(const Stream: TStream); // restore the state of the header from the given stream var Dummy, Version: Integer; S: AnsiString; OldOptions: TVTHeaderOptions; begin Include(FStates, hsLoading); with Stream do try // Switch off all options which could influence loading the columns (they will be later set again). OldOptions := FOptions; FOptions := []; // Determine whether the stream contains data without a version number. ReadBuffer(Dummy, SizeOf(Dummy)); if Dummy > -1 then begin // Seek back to undo the read operation if this is an old stream format. Seek(-SizeOf(Dummy), soFromCurrent); Version := -1; end else // Read version number if this is a "versionized" format. ReadBuffer(Version, SizeOf(Version)); Columns.LoadFromStream(Stream, Version); ReadBuffer(Dummy, SizeOf(Dummy)); AutoSizeIndex := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Background := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Height := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); FOptions := OldOptions; Options := TVTHeaderOptions(Word(Dummy)); // PopupMenu is neither saved nor restored ReadBuffer(Dummy, SizeOf(Dummy)); Style := TVTHeaderStyle(Dummy); // TFont has no own save routine so we do it manually with Font do begin ReadBuffer(Dummy, SizeOf(Dummy)); Color := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); Height := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SetLength(S, Dummy); ReadBuffer(PAnsiChar(S)^, Dummy); Name := S; ReadBuffer(Dummy, SizeOf(Dummy)); Pitch := TFontPitch(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); Style := TFontStyles(LongWord(Dummy)); end; // LCL port started with header stream version 6 so no need to do the check here // Read data introduced by stream version 1+. ReadBuffer(Dummy, SizeOf(Dummy)); MainColumn := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SortColumn := Dummy; ReadBuffer(Dummy, SizeOf(Dummy)); SortDirection := TSortDirection(Byte(Dummy)); // Read data introduced by stream version 5+. ReadBuffer(Dummy, SizeOf(Dummy)); ParentFont := Boolean(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMaxHeight := Integer(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMinHeight := Integer(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FDefaultHeight := Integer(Dummy); with FFixedAreaConstraints do begin ReadBuffer(Dummy, SizeOf(Dummy)); FMaxHeightPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, Sizeof(Dummy)); FMaxWidthPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, SizeOf(Dummy)); FMinHeightPercent := TVTConstraintPercent(Dummy); ReadBuffer(Dummy, Sizeof(Dummy)); FMinWidthPercent := TVTConstraintPercent(Dummy); end finally Exclude(FStates, hsLoading); Treeview.DoColumnResize(NoColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- function TVTHeader.ResizeColumns(ChangeBy: Integer; RangeStartCol: TColumnIndex; RangeEndCol: TColumnIndex; Options: TVTColumnOptions = [coVisible]): Integer; // Distribute the given width change to a range of columns. A 'fair' way is used to distribute ChangeBy to the columns, // while ensuring that everything that can be distributed will be distributed. var Start, I: TColumnIndex; ColCount, ToGo, Sign, Rest, MaxDelta, Difference: Integer; Constraints, Widths: Array of Integer; BonusPixel: Boolean; //--------------- local functions ------------------------------------------- function IsResizable (Column: TColumnIndex): Boolean; begin if BonusPixel then Result := Widths[Column - RangeStartCol] < Constraints[Column - RangeStartCol] else Result := Widths[Column - RangeStartCol] > Constraints[Column - RangeStartCol]; end; //--------------------------------------------------------------------------- procedure IncDelta(Column: TColumnIndex); begin if BonusPixel then Inc(MaxDelta, FColumns[Column].MaxWidth - Widths[Column - RangeStartCol]) else Inc(MaxDelta, Widths[Column - RangeStartCol] - Constraints[Column - RangeStartCol]); end; //--------------------------------------------------------------------------- function ChangeWidth(Column: TColumnIndex; Delta: Integer): Integer; begin if Delta > 0 then Delta := Min(Delta, Constraints[Column - RangeStartCol] - Widths[Column - RangeStartCol]) else Delta := Max(Delta, Constraints[Column - RangeStartCol] - Widths[Column - RangeStartCol]); Inc(Widths[Column - RangeStartCol], Delta); Dec(ToGo, Abs(Delta)); Result := Abs(Delta); end; //--------------------------------------------------------------------------- function ReduceConstraints: Boolean; var MaxWidth, MaxReserveCol, Column: TColumnIndex; begin Result := True; if not (hsScaling in FStates) or BonusPixel then Exit; MaxWidth := 0; MaxReserveCol := NoColumn; for Column := RangeStartCol to RangeEndCol do if (Options * FColumns[Column].FOptions = Options) and (FColumns[Column].FWidth > MaxWidth) then begin MaxWidth := Widths[Column - RangeStartCol]; MaxReserveCol := Column; end; if (MaxReserveCol <= NoColumn) or (Constraints[MaxReserveCol - RangeStartCol] <= 10) then Result := False else Dec(Constraints[MaxReserveCol - RangeStartCol], Constraints[MaxReserveCol - RangeStartCol] div 10); end; //----------- end local functions ------------------------------------------- begin Result := 0; if ChangeBy <> 0 then begin // Do some initialization here BonusPixel := ChangeBy > 0; Sign := IfThen(BonusPixel, 1, -1); Start := IfThen(BonusPixel, RangeStartCol, RangeEndCol); ToGo := Abs(ChangeBy); SetLength(Widths, RangeEndCol - RangeStartCol + 1); SetLength(Constraints, RangeEndCol - RangeStartCol + 1); for I := RangeStartCol to RangeEndCol do begin Widths[I - RangeStartCol] := FColumns[I].FWidth; Constraints[I - RangeStartCol] := IfThen(BonusPixel, FColumns[I].MaxWidth, FColumns[I].MinWidth); end; repeat repeat MaxDelta := 0; ColCount := 0; for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then begin Inc(ColCount); IncDelta(I); end; if MaxDelta < Abs(ChangeBy) then if not ReduceConstraints then Break; until (MaxDelta >= Abs(ChangeBy)) or not (hsScaling in FStates); if ColCount = 0 then Break; ToGo := Min(ToGo, MaxDelta); Difference := ToGo div ColCount; Rest := ToGo mod ColCount; if Difference > 0 then for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then ChangeWidth(I, Difference * Sign); // Now distribute Rest. I := Start; while Rest > 0 do begin if (Options * FColumns[I].FOptions = Options) and IsResizable(I) then if FColumns[I].FBonusPixel <> BonusPixel then begin Dec(Rest, ChangeWidth(I, Sign)); FColumns[I].FBonusPixel := BonusPixel; end; Inc(I, Sign); if (BonusPixel and (I > RangeEndCol)) or (not BonusPixel and (I < RangeStartCol)) then begin for I := RangeStartCol to RangeEndCol do if Options * FColumns[I].FOptions = Options then FColumns[I].FBonusPixel := not FColumns[I].FBonusPixel; I := Start; end; end; until ToGo <= 0; // Now set the computed widths. We also compute the result here. Include(FStates, hsResizing); for I := RangeStartCol to RangeEndCol do if (Options * FColumns[I].FOptions = Options) then begin Inc(Result, Widths[I - RangeStartCol] - FColumns[I].FWidth); FColumns[I].SetWidth(Widths[I - RangeStartCol]); end; Exclude(FStates, hsResizing); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.RestoreColumns; // Restores all columns to their width which they had before they have been auto fitted. var I: TColumnIndex; begin with FColumns do for I := Count - 1 downto 0 do if [coResizable, coVisible] * Items[FPositionToIndex[I]].FOptions = [coResizable, coVisible] then Items[I].RestoreLastWidth; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeader.SaveToStream(const Stream: TStream); // Saves the complete state of the header into the provided stream. var Dummy: Integer; Tmp: AnsiString; begin with Stream do begin // In previous version of VT was no header stream version defined. // For feature enhancements it is necessary, however, to know which stream // format we are trying to load. // In order to distict from non-version streams an indicator is inserted. Dummy := -1; WriteBuffer(Dummy, SizeOf(Dummy)); // Write current stream version number, nothing more is required at the time being. Dummy := VTHeaderStreamVersion; WriteBuffer(Dummy, SizeOf(Dummy)); // Save columns in case they depend on certain options (like auto size). Columns.SaveToStream(Stream); Dummy := FAutoSizeIndex; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FBackground; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FHeight; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Word(FOptions); WriteBuffer(Dummy, SizeOf(Dummy)); // PopupMenu is neither saved nor restored Dummy := Ord(FStyle); WriteBuffer(Dummy, SizeOf(Dummy)); // TFont has no own save routine so we do it manually with Font do begin Dummy := Color; WriteBuffer(Dummy, SizeOf(Dummy)); // Need only to write one: size or height, I decided to write height. Dummy := Height; WriteBuffer(Dummy, SizeOf(Dummy)); Tmp := Name; Dummy := Length(Tmp); WriteBuffer(Dummy, SizeOf(Dummy)); WriteBuffer(PAnsiChar(Tmp)^, Dummy); Dummy := Ord(Pitch); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(Style); WriteBuffer(Dummy, SizeOf(Dummy)); end; // Data introduced by stream version 1. Dummy := FMainColumn; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := FSortColumn; WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Byte(FSortDirection); WriteBuffer(Dummy, SizeOf(Dummy)); // Data introduced by stream version 5. Dummy := Integer(ParentFont); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMaxHeight); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinHeight); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FDefaultHeight); WriteBuffer(Dummy, SizeOf(Dummy)); with FFixedAreaConstraints do begin Dummy := Integer(FMaxHeightPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMaxWidthPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinHeightPercent); WriteBuffer(Dummy, SizeOf(Dummy)); Dummy := Integer(FMinWidthPercent); WriteBuffer(Dummy, SizeOf(Dummy)); end end; end; //----------------- TScrollBarOptions ---------------------------------------------------------------------------------- constructor TScrollBarOptions.Create(AOwner: TBaseVirtualTree); begin inherited Create; FOwner := AOwner; FAlwaysVisible := False; FScrollBarStyle := sbmRegular; FScrollBars := ssBoth; FIncrementX := 20; FIncrementY := 20; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetAlwaysVisible(Value: Boolean); begin if FAlwaysVisible <> Value then begin FAlwaysVisible := Value; //todo_lcl_check if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then RecreateWnd(FOwner); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetScrollBars(Value: TScrollStyle); begin if FScrollbars <> Value then begin FScrollBars := Value; //todo_lcl_check if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then RecreateWnd(FOwner); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.SetScrollBarStyle(Value: TVTScrollBarStyle); begin {$ifndef UseFlatScrollbars} Assert(Value = sbmRegular, 'Flat scrollbars styles are disabled. Enable UseFlatScrollbars in VTConfig.inc for' + 'flat scrollbar support.'); {$endif UseFlatScrollbars} if FScrollBarStyle <> Value then begin FScrollBarStyle := Value; {$ifdef UseFlatScrollbars} if FOwner.HandleAllocated then begin // If set to regular style then don't use the emulation mode of the FlatSB APIs but the original APIs. // This is necessary because the FlatSB APIs don't respect NC paint request with limited update region // (which is necessary for the transparent drag image). FOwner.RecreateWnd; end; {$endif UseFlatScrollbars} end; end; //---------------------------------------------------------------------------------------------------------------------- function TScrollBarOptions.GetOwner: TPersistent; begin Result := FOwner; end; //---------------------------------------------------------------------------------------------------------------------- procedure TScrollBarOptions.Assign(Source: TPersistent); begin if Source is TScrollBarOptions then begin AlwaysVisible := TScrollBarOptions(Source).AlwaysVisible; HorizontalIncrement := TScrollBarOptions(Source).HorizontalIncrement; ScrollBars := TScrollBarOptions(Source).ScrollBars; ScrollBarStyle := TScrollBarOptions(Source).ScrollBarStyle; VerticalIncrement := TScrollBarOptions(Source).VerticalIncrement; end else inherited; end; //----------------- TVTColors ------------------------------------------------------------------------------------------ constructor TVTColors.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; FColors[0] := clBtnShadow; // DisabledColor FColors[1] := clHighlight; // DropMarkColor FColors[2] := clHighLight; // DropTargetColor FColors[3] := clHighLight; // FocusedSelectionColor FColors[4] := clBtnFace; // GridLineColor FColors[5] := clBtnShadow; // TreeLineColor FColors[6] := clBtnFace; // UnfocusedSelectionColor FColors[7] := clBtnFace; // BorderColor FColors[8] := clWindowText; // HotColor FColors[9] := clHighLight; // FocusedSelectionBorderColor FColors[10] := clBtnFace; // UnfocusedSelectionBorderColor FColors[11] := clHighlight; // DropTargetBorderColor FColors[12] := clHighlight; // SelectionRectangleBlendColor FColors[13] := clHighlight; // SelectionRectangleBorderColor FColors[14] := clBtnShadow; // HeaderHotColor end; //---------------------------------------------------------------------------------------------------------------------- function TVTColors.GetColor(const Index: Integer): TColor; begin Result := FColors[Index]; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTColors.SetColor(const Index: Integer; const Value: TColor); begin if FColors[Index] <> Value then begin FColors[Index] := Value; if not (csLoading in FOwner.ComponentState) and FOwner.HandleAllocated then begin // Cause helper bitmap rebuild if the button color changed. case Index of 5: begin FOwner.PrepareBitmaps(True, False); FOwner.Invalidate; end; 7: RedrawWindow(FOwner.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN) else FOwner.Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTColors.Assign(Source: TPersistent); begin if Source is TVTColors then begin FColors := TVTColors(Source).FColors; if FOwner.FUpdateCount = 0 then FOwner.Invalidate; end else inherited; end; //----------------- TClipboardFormats ---------------------------------------------------------------------------------- constructor TClipboardFormats.Create(AOwner: TBaseVirtualTree); begin FOwner := AOwner; Sorted := True; Duplicates := dupIgnore; end; //---------------------------------------------------------------------------------------------------------------------- function TClipboardFormats.Add(const S: string): Integer; // Restrict additions to the clipbard formats to only those which are registered with the owner tree or one of its // ancestors. var Format: Word; RegisteredClass: TVirtualTreeClass; begin RegisteredClass := InternalClipboardFormats.FindFormat(S, Format); if Assigned(RegisteredClass) and FOwner.ClassType.InheritsFrom(RegisteredClass) then Result := inherited Add(S) else Result := -1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TClipboardFormats.Insert(Index: Integer; const S: string); // Restrict additions to the clipbard formats to only those which are registered with the owner tree or one of its // ancestors. var Format: Word; RegisteredClass: TVirtualTreeClass; begin RegisteredClass := InternalClipboardFormats.FindFormat(S, Format); if Assigned(RegisteredClass) and FOwner.ClassType.InheritsFrom(RegisteredClass) then inherited Insert(Index, S); end; //----------------- TBaseVirtualTree ----------------------------------------------------------------------------------- constructor TBaseVirtualTree.Create(AOwner: TComponent); begin if not Initialized then InitializeGlobalStructures; inherited; ControlStyle := ControlStyle - [csSetCaption] + [csCaptureMouse, csOpaque, csReplicatable, csDisplayDragImage, csReflector]; FTotalInternalDataSize := 0; FNodeDataSize := -1; Width := 200; Height := 100; TabStop := True; ParentColor := False; FDefaultNodeHeight := 18; FDragOperations := [doCopy, doMove]; FHotCursor := crDefault; FScrollBarOptions := TScrollBarOptions.Create(Self); FFocusedColumn := NoColumn; FDragImageKind := diComplete; FLastSelectionLevel := -1; FSelectionBlendFactor := 128; FIndent := 18; FPlusBM := TBitmap.Create; FHotPlusBM := TBitmap.Create; FMinusBM := TBitmap.Create; FHotMinusBM := TBitmap.Create; BorderStyle := bsSingle; FButtonStyle := bsRectangle; FButtonFillMode := fmTreeColor; FHeader := GetHeaderClass.Create(Self); // we have an own double buffer handling DoubleBuffered := False; FCheckImageKind := ckSystemDefault; FImageChangeLink := TChangeLink.Create; FImageChangeLink.OnChange := ImageListChange; FStateChangeLink := TChangeLink.Create; FStateChangeLink.OnChange := ImageListChange; FCustomCheckChangeLink := TChangeLink.Create; FCustomCheckChangeLink.OnChange := ImageListChange; FAutoExpandDelay := 1000; FAutoScrollDelay := 1000; FAutoScrollInterval := 1; FBackground := TPicture.Create; FDefaultPasteMode := amAddChildLast; FMargin := 4; FTextMargin := 4; FDragType := dtOLE; FDragHeight := 350; FDragWidth := 200; FColors := TVTColors.Create(Self); FEditDelay := 1000; FDragImage := TVTDragImage.Create(Self); with FDragImage do begin Fade := True; PostBlendBias := 0; PreBlendBias := 0; Transparency := 200; end; SetLength(FSingletonNodeArray, 1); FAnimationDuration := 200; FSearchTimeout := 1000; FSearchStart := ssFocusedNode; FNodeAlignment := naProportional; FLineStyle := lsDotted; FIncrementalSearch := isNone; FClipboardFormats := TClipboardFormats.Create(Self); FOptions := GetOptionsClass.Create(Self); {$ifdef EnableThreadSupport} AddThreadReference; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- destructor TBaseVirtualTree.Destroy; begin Exclude(FOptions.FMiscOptions, toReadOnly); {$ifdef EnableThreadSupport} ReleaseThreadReference(Self); {$endif} StopWheelPanning; //lcl FPanningWindow.Free; // Just in case it didn't happen already release the edit link. FEditLink := nil; FClipboardFormats.Free; // Clear will also free the drag manager if it is still alive. Clear; FDragImage.Free; FColors.Free; FBackground.Free; FImageChangeLink.Free; FStateChangeLink.Free; FCustomCheckChangeLink.Free; FScrollBarOptions.Free; FOptions.Free; // The window handle must be destroyed before the header is freed because it is needed in WM_NCDESTROY. //todo_lcl_check { if HandleAllocated then DestroyWindowHandle; } FreeAndNil(FHeader); if FCheckImages <> FCustomCheckImages then FCheckImages.Free; FreeMem(FRoot); FPlusBM.Free; FHotPlusBM.Free; FMinusBM.Free; FHotMinusBM.Free; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustCoordinatesByIndent(var PaintInfo: TVTPaintInfo; Indent: Integer); // During painting of the main column some coordinates must be adjusted due to the tree lines. // The offset resulting from the tree lines and indentation level is given in Indent. var Offset: Integer; begin with PaintInfo do begin Offset := Indent * Integer(FIndent); if BidiMode = bdLeftToRight then begin Inc(ContentRect.Left, Offset); Inc(ImageInfo[iiNormal].XPos, Offset); Inc(ImageInfo[iiState].XPos, Offset); Inc(ImageInfo[iiCheck].XPos, Offset); end else begin Dec(ContentRect.Right, Offset); Dec(ImageInfo[iiNormal].XPos, Offset); Dec(ImageInfo[iiState].XPos, Offset); Dec(ImageInfo[iiCheck].XPos, Offset); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustImageBorder(ImageWidth, ImageHeight: Integer; BidiMode: TBidiMode; VAlign: Integer; var R: TRect; var ImageInfo: TVTImageInfo); // Depending on the width of the image list as well as the given bidi mode R must be adjusted. begin if BidiMode = bdLeftToRight then begin ImageInfo.XPos := R.Left; Inc(R.Left, ImageWidth + 2); end else begin ImageInfo.XPos := R.Right - Images.Width; Dec(R.Right, ImageWidth + 2); end; ImageInfo.YPos := R.Top + VAlign - ImageHeight div 2; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustTotalCount(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); // Sets a node's total count to the given value and recursively adjusts the parent's total count // (actually, the adjustment is done iteratively to avoid function call overheads). var Difference: Integer; Run: PVirtualNode; begin if Relative then Difference := Value else Difference := Integer(Value) - Integer(Node.TotalCount); if Difference <> 0 then begin Run := Node; // Root node has as parent the tree view. while Assigned(Run) and (Run <> Pointer(Self)) do begin Inc(Integer(Run.TotalCount), Difference); Run := Run.Parent; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustTotalHeight(Node: PVirtualNode; Value: Integer; Relative: Boolean = False); // Sets a node's total height to the given value and recursively adjusts the parent's total height. var Difference: Integer; Run: PVirtualNode; begin if Relative then Difference := Value else Difference := Integer(Value) - Integer(Node.TotalHeight); if Difference <> 0 then begin Run := Node; repeat Inc(Integer(Run.TotalHeight), Difference); // If the node is not visible or the parent node is not expanded or we are already at the top // then nothing more remains to do. if not (vsVisible in Run.States) or (Run = FRoot) or (Run.Parent = nil) or not (vsExpanded in Run.Parent.States) then Break; Run := Run.Parent; until False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CalculateCacheEntryCount: Integer; // Calculates the size of the position cache. begin if FVisibleCount > 1 then Result := Ceil(FVisibleCount / CacheThreshold) else Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CalculateVerticalAlignments(ShowImages, ShowStateImages: Boolean; Node: PVirtualNode; out VAlign, VButtonAlign: Integer); // Calculates the vertical alignment of the given node and its associated expand/collapse button during // a node paint cycle depending on the required node alignment style. begin // For absolute alignment the calculation is trivial. case FNodeAlignment of naFromTop: VAlign := Node.Align; naFromBottom: VAlign := NodeHeight[Node] - Node.Align; else // naProportional // Consider button and line alignment, but make sure neither the image nor the button (whichever is taller) // go out of the entire node height (100% means bottom alignment to the node's bounds). if ShowImages or ShowStateImages then begin if ShowImages then VAlign := FImages.Height else VAlign := FStateImages.Height; VAlign := MulDiv((Integer(NodeHeight[Node]) - VAlign), Node.Align, 100) + VAlign div 2; end else if toShowButtons in FOptions.FPaintOptions then VAlign := MulDiv((Integer(NodeHeight[Node]) - FPlusBM.Height), Node.Align, 100) + FPlusBM.Height div 2 else VAlign := MulDiv(Node.NodeHeight, Node.Align, 100); end; VButtonAlign := VAlign - FPlusBM.Height div 2; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ChangeCheckState(Node: PVirtualNode; Value: TCheckState): Boolean; // Sets the check state of the node according to the given value and the node's check type. // If the check state must be propagated to the parent nodes and one of them refuses to change then // nothing happens and False is returned, otherwise True. var Run: PVirtualNode; UncheckedCount, MixedCheckCount, CheckedCount: Cardinal; begin Result := not (vsChecking in Node.States); with Node^ do if Result then begin Include(States, vsChecking); if not (vsInitialized in States) then InitNode(Node); // Indicate that we are going to propagate check states up and down the hierarchy. if FCheckPropagationCount = 0 then // WL, 05.02.2004: Do not enter tsCheckPropagation more than once DoStateChange([tsCheckPropagation]); Inc(FCheckPropagationCount); // WL, 05.02.2004 // Do actions which are associated with the given check state. case CheckType of // Check state change with additional consequences for check states of the children. ctTriStateCheckBox: begin // Propagate state down to the children. if toAutoTristateTracking in FOptions.FAutoOptions then case Value of csUncheckedNormal: if Node.ChildCount > 0 then begin Run := FirstChild; CheckedCount := 0; MixedCheckCount := 0; UncheckedCount := 0; while Assigned(Run) do begin if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin SetCheckState(Run, csUncheckedNormal); // Check if the new child state was set successfully, otherwise we have to adjust the // node's new check state accordingly. case Run.CheckState of csCheckedNormal: Inc(CheckedCount); csMixedNormal: Inc(MixedCheckCount); csUncheckedNormal: Inc(UncheckedCount); end; end; Run := Run.NextSibling; end; // If there is still a mixed state child node checkbox then this node must be mixed checked too. if MixedCheckCount > 0 then Value := csMixedNormal else // If nodes are normally checked child nodes then the unchecked count determines what // to set for the node itself. if CheckedCount > 0 then if UncheckedCount > 0 then Value := csMixedNormal else Value := csCheckedNormal; end; csCheckedNormal: if Node.ChildCount > 0 then begin Run := FirstChild; CheckedCount := 0; MixedCheckCount := 0; UncheckedCount := 0; while Assigned(Run) do begin if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin SetCheckState(Run, csCheckedNormal); // Check if the new child state was set successfully, otherwise we have to adjust the // node's new check state accordingly. case Run.CheckState of csCheckedNormal: Inc(CheckedCount); csMixedNormal: Inc(MixedCheckCount); csUncheckedNormal: Inc(UncheckedCount); end; end; Run := Run.NextSibling; end; // If there is still a mixed state child node checkbox then this node must be mixed checked too. if MixedCheckCount > 0 then Value := csMixedNormal else // If nodes are normally checked child nodes then the unchecked count determines what // to set for the node itself. if CheckedCount > 0 then if UncheckedCount > 0 then Value := csMixedNormal else Value := csCheckedNormal; end; end; end; // radio button check state change ctRadioButton: if Value = csCheckedNormal then begin // Make sure only this node is checked. Run := Parent.FirstChild; while Assigned(Run) do begin if Run.CheckType = ctRadioButton then Run.CheckState := csUncheckedNormal; Run := Run.NextSibling; end; Invalidate; end; end; if Result then CheckState := Value // Set new check state else CheckState := UnpressedState[CheckState]; // Reset dynamic check state. // Propagate state up to the parent. if not (vsInitialized in Parent.States) then InitNode(Parent); if (toAutoTristateTracking in FOptions.FAutoOptions) and ([vsChecking, vsDisabled] * Parent.States = []) and (CheckType in [ctCheckBox, ctTriStateCheckBox]) and (Parent <> FRoot) and (Parent.CheckType = ctTriStateCheckBox) then Result := CheckParentCheckState(Node, Value) else Result := True; InvalidateNode(Node); Exclude(States, vsChecking); Dec(FCheckPropagationCount); // WL, 05.02.2004 if FCheckPropagationCount = 0 then // WL, 05.02.2004: Allow state change event after all check operations finished DoStateChange([], [tsCheckPropagation]); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; // Helper routine used when a draw selection takes place. This version handles left-to-right directionality. // In the process of adding or removing nodes the current selection is modified which requires to pack it after // the function returns. Another side effect of this method is that a temporary list of nodes will be created // (see also InternalCacheNode) which must be inserted into the current selection by the caller. var Run, NextNode: PVirtualNode; TextRight, TextLeft, CheckOffset, CurrentTop, CurrentRight, NextTop, NextColumn, NodeWidth, Dummy: Integer; MinY, MaxY: Integer; ImageOffset, StateImageOffset: Integer; IsInOldRect, IsInNewRect: Boolean; // quick check variables for various parameters WithCheck, WithImages, WithStateImages, DoSwitch, AutoSpan: Boolean; SimpleSelection: Boolean; begin // A priori nothing changes. Result := False; // Determine minimum and maximum vertical coordinates to limit iteration to. MinY := Min(OldRect.Top, NewRect.Top); MaxY := Max(OldRect.Bottom, NewRect.Bottom); // Initialize short hand variables to speed up tests below. DoSwitch := ssCtrlOS in FDrawSelShiftState; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); // Don't check the events here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; AutoSpan := FHeader.UseColumns and (toAutoSpanColumns in FOptions.FAutoOptions); SimpleSelection := toSimpleDrawSelection in FOptions.FSelectionOptions; // This is the node to start with. Run := InternalGetNodeAt(0, MinY, False, CurrentTop); if Assigned(Run) then begin // The initial minimal left border is determined by the identation level of the node and is dynamically adjusted. if toShowRoot in FOptions.FPaintOptions then Inc(NodeLeft, Integer((GetNodeLevel(Run) + 1) * FIndent) + FMargin) else Inc(NodeLeft, Integer(GetNodeLevel(Run) * FIndent) + FMargin); // ----- main loop // Change selection depending on the node's rectangle being in the selection rectangle or not, but // touch only those nodes which overlap either the old selection rectangle or the new one but not both. repeat // Collect offsets for check, normal and state images. TextLeft := NodeLeft; if WithCheck and (Run.CheckType <> ctNone) then Inc(TextLeft, CheckOffset); if WithImages and HasImage(Run, ikNormal, MainColumn) then Inc(TextLeft, ImageOffset); if WithStateImages and HasImage(Run, ikState, MainColumn) then Inc(TextLeft, StateImageOffset); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Run); NextTop := CurrentTop + Integer(NodeHeight[Run]); // Simple selection allows to draw the selection rectangle anywhere. No intersection with node captions is // required. Only top and bottom bounds of the rectangle matter. if SimpleSelection then begin IsInOldRect := (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end else begin // The right column border might be extended if column spanning is enabled. if AutoSpan then begin with FHeader.FColumns do begin NextColumn := MainColumn; repeat Dummy := GetNextVisibleColumn(NextColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(Run, Dummy) or (Items[Dummy].BidiMode <> bdLeftToRight) then Break; NextColumn := Dummy; until False; if NextColumn = MainColumn then CurrentRight := NodeRight else GetColumnBounds(NextColumn, Dummy, CurrentRight); end; end else CurrentRight := NodeRight; // Check if we need the node's width. This is the case when the node is not left aligned or the // left border of the selection rectangle is to the right of the left node border. if (TextLeft < OldRect.Left) or (TextLeft < NewRect.Left) or (Alignment <> taLeftJustify) then begin NodeWidth := DoGetNodeWidth(Run, MainColumn); if NodeWidth >= (CurrentRight - TextLeft) then TextRight := CurrentRight else case Alignment of taLeftJustify: TextRight := TextLeft + NodeWidth; taCenter: begin TextLeft := (TextLeft + CurrentRight - NodeWidth) div 2; TextRight := TextLeft + NodeWidth; end; else // taRightJustify TextRight := CurrentRight; TextLeft := TextRight - NodeWidth; end; end else TextRight := CurrentRight; // Now determine whether we need to change the state. IsInOldRect := (OldRect.Left <= TextRight) and (OldRect.Right >= TextLeft) and (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NewRect.Left <= TextRight) and (NewRect.Right >= TextLeft) and (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end; if IsInOldRect xor IsInNewRect then begin Result := True; if DoSwitch then begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); end else begin if IsInNewRect then InternalCacheNode(Run) else InternalRemoveFromSelection(Run); end; end; CurrentTop := NextTop; // Get next visible node and update left node position. NextNode := GetNextVisibleNoInit(Run, True); if NextNode = nil then Break; Inc(NodeLeft, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; until CurrentTop > MaxY; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight: Integer; Alignment: TAlignment; OldRect: TRect; const NewRect: TRect): Boolean; // Helper routine used when a draw selection takes place. This version handles right-to-left directionality. // See also comments in CollectSelectedNodesLTR. var Run, NextNode: PVirtualNode; TextRight, TextLeft, CheckOffset, CurrentTop, CurrentLeft, NextTop, NextColumn, NodeWidth, Dummy: Integer; MinY, MaxY: Integer; ImageOffset, StateImageOffset: Integer; IsInOldRect, IsInNewRect: Boolean; // quick check variables for various parameters WithCheck, WithImages, WithStateImages, DoSwitch, AutoSpan: Boolean; SimpleSelection: Boolean; begin // A priori nothing changes. Result := False; // Switch the alignment to the opposite value in RTL context. ChangeBiDiModeAlignment(Alignment); // Determine minimum and maximum vertical coordinates to limit iteration to. MinY := Min(OldRect.Top, NewRect.Top); MaxY := Max(OldRect.Bottom, NewRect.Bottom); // Initialize short hand variables to speed up tests below. DoSwitch := ssCtrlOS in FDrawSelShiftState; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); // Don't check the events here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; AutoSpan := FHeader.UseColumns and (toAutoSpanColumns in FOptions.FAutoOptions); SimpleSelection := toSimpleDrawSelection in FOptions.FSelectionOptions; // This is the node to start with. Run := InternalGetNodeAt(0, MinY, False, CurrentTop); if Assigned(Run) then begin // The initial minimal left border is determined by the identation level of the node and is dynamically adjusted. if toShowRoot in FOptions.FPaintOptions then Dec(NodeRight, Integer((GetNodeLevel(Run) + 1) * FIndent) + FMargin) else Dec(NodeRight, Integer(GetNodeLevel(Run) * FIndent) + FMargin); // ----- main loop // Change selection depending on the node's rectangle being in the selection rectangle or not, but // touch only those nodes which overlap either the old selection rectangle or the new one but not both. repeat // Collect offsets for check, normal and state images. TextRight := NodeRight; if WithCheck and (Run.CheckType <> ctNone) then Dec(TextRight, CheckOffset); if WithImages and HasImage(Run, ikNormal, MainColumn) then Dec(TextRight, ImageOffset); if WithStateImages and HasImage(Run, ikState, MainColumn) then Dec(TextRight, StateImageOffset); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Run); NextTop := CurrentTop + Integer(NodeHeight[Run]); // Simple selection allows to draw the selection rectangle anywhere. No intersection with node captions is // required. Only top and bottom bounds of the rectangle matter. if SimpleSelection then begin IsInOldRect := (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end else begin // The left column border might be extended if column spanning is enabled. if AutoSpan then begin NextColumn := MainColumn; repeat Dummy := FHeader.FColumns.GetPreviousVisibleColumn(NextColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(Run, Dummy) or (FHeader.FColumns[Dummy].BiDiMode = bdLeftToRight) then Break; NextColumn := Dummy; until False; if NextColumn = MainColumn then CurrentLeft := NodeLeft else FHeader.FColumns.GetColumnBounds(NextColumn, CurrentLeft, Dummy); end else CurrentLeft := NodeLeft; // Check if we need the node's width. This is the case when the node is not left aligned (in RTL context this // means actually right aligned) or the right border of the selection rectangle is to the left // of the right node border. if (TextRight > OldRect.Right) or (TextRight > NewRect.Right) or (Alignment <> taRightJustify) then begin NodeWidth := DoGetNodeWidth(Run, MainColumn); if NodeWidth >= (TextRight - CurrentLeft) then TextLeft := CurrentLeft else case Alignment of taLeftJustify: begin TextLeft := CurrentLeft; TextRight := TextLeft + NodeWidth; end; taCenter: begin TextLeft := (TextRight + CurrentLeft - NodeWidth) div 2; TextRight := TextLeft + NodeWidth; end; else // taRightJustify TextLeft := TextRight - NodeWidth; end; end else TextLeft := CurrentLeft; // Now determine whether we need to change the state. IsInOldRect := (OldRect.Right >= TextLeft) and (OldRect.Left <= TextRight) and (NextTop > OldRect.Top) and (CurrentTop < OldRect.Bottom); IsInNewRect := (NewRect.Right >= TextLeft) and (NewRect.Left <= TextRight) and (NextTop > NewRect.Top) and (CurrentTop < NewRect.Bottom); end; if IsInOldRect xor IsInNewRect then begin Result := True; if DoSwitch then begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); end else begin if IsInNewRect then InternalCacheNode(Run) else InternalRemoveFromSelection(Run); end; end; CurrentTop := NextTop; // Get next visible node and update left node position. NextNode := GetNextVisibleNoInit(Run, True); if NextNode = nil then Break; Dec(NodeRight, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; until CurrentTop > MaxY; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearNodeBackground(const PaintInfo: TVTPaintInfo; UseBackground, Floating: Boolean; R: TRect); // Erases a node's background depending on what the application decides to do. // UseBackground determines whether or not to use the background picture, while Floating indicates // that R is given in coordinates of the small node bitmap or the superordinated target bitmap used in PaintTree. var BackColor: TColor; EraseAction: TItemEraseAction; Offset: TPoint; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'ClearNodeBackground');{$endif} with PaintInfo do begin EraseAction := eaDefault; BackColor := Brush.Color; if Floating then begin Offset := Point(-FEffectiveOffsetX, R.Top); OffsetRect(R, 0, -Offset.Y); end else Offset := Point(0, 0); DoBeforeItemErase(Canvas, Node, R, Backcolor, EraseAction); with Canvas do begin case EraseAction of eaNone: ; eaColor: begin // User has given a new background color. Brush.Color := BackColor; FillRect(R); end; else // eaDefault if UseBackground then begin if toStaticBackground in TreeOptions.PaintOptions then StaticBackground(FBackground.Bitmap, Canvas, Offset, R) else TileBackground(FBackground.Bitmap, Canvas, Offset, R); end else begin //clear the node background //note there's a bug in original VTV that can lead to wrong node paint //so, here the node is always cleared even if is selected Brush.Color := Self.Brush.Color; FillRect(R); {$ifdef DEBUG_VTV}Logger.SendColor([lcPaintDetails],'Clearing a node background - Brush.Color', Brush.Color);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Clearing Rectangle (R)', R);{$endif} if (poDrawSelection in PaintOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (vsSelected in Node.States) and not (toUseBlendedSelection in FOptions.PaintOptions) and not ((tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) and IsWinVistaOrAbove) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails, lcDrag], 'Draw the background of a selected node');{$endif} if toShowHorzGridLines in FOptions.PaintOptions then Dec(R.Bottom); if Focused or (toPopupMode in FOptions.FPaintOptions) then begin Brush.Color := FColors.FocusedSelectionColor; Pen.Color := FColors.FocusedSelectionBorderColor; end else begin Brush.Color := FColors.UnfocusedSelectionColor; Pen.Color := FColors.UnfocusedSelectionBorderColor; end; with R do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end; end; end; DoAfterItemErase(Canvas, Node, R); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'ClearNodeBackground');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CompareNodePositions(Node1, Node2: PVirtualNode; ConsiderChildrenAbove: Boolean = False): Integer; // Tries hard and smart to quickly determine whether Node1's structural position is before Node2's position. // If ConsiderChildrenAbove is True, the nodes will be compared with their visual order in mind. // Returns 0 if Node1 = Node2, < 0 if Node1 is located before Node2 else > 0. var Run1, Run2: PVirtualNode; Level1, Level2: Cardinal; begin Assert(Assigned(Node1) and Assigned(Node2), 'Nodes must never be nil.'); if Node1 = Node2 then Result := 0 else begin if HasAsParent(Node1, Node2) then Result := IfThen(ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions), -1, 1) else if HasAsParent(Node2, Node1) then Result := IfThen(ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions), 1, -1) else begin // the given nodes are neither equal nor are they parents of each other, so go up to FRoot // for each node and compare the child indices of the top level parents // Note: neither Node1 nor Node2 can be FRoot at this point as this (a bit strange) circumstance would // be caught by the previous code. // start lookup at the same level Level1 := GetNodeLevel(Node1); Level2 := GetNodeLevel(Node2); Run1 := Node1; while Level1 > Level2 do begin Run1 := Run1.Parent; Dec(Level1); end; Run2 := Node2; while Level2 > Level1 do begin Run2 := Run2.Parent; Dec(Level2); end; // now go up until we find a common parent node (loop will safely stop at FRoot if the nodes // don't share a common parent) while Run1.Parent <> Run2.Parent do begin Run1 := Run1.Parent; Run2 := Run2.Parent; end; Result := Integer(Run1.Index) - Integer(Run2.Index); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineLineImageAndSelectLevel(Node: PVirtualNode; out LineImage: TLineImage): Integer; // This method is used during paint cycles and initializes an array of line type IDs. These IDs are used to paint // the tree lines in front of the given node. // Additionally an initial count of selected parents is determined and returned which is used for specific painting. var X: Integer; Run: PVirtualNode; begin Result := 0; if toShowRoot in FOptions.FPaintOptions then X := 1 else X := 0; Run := Node; // Determine indentation level of top node. while Run.Parent <> FRoot do begin Inc(X); Run := Run.Parent; // Count selected nodes (FRoot is never selected). if vsSelected in Run.States then Inc(Result); end; // Set initial size of line index array, this will automatically initialized all entries to ltNone. SetLength(LineImage, X); // Only use lines if requested. if toShowTreeLines in FOptions.FPaintOptions then begin if toChildrenAbove in FOptions.FPaintOptions then begin Dec(X); if not HasVisiblePreviousSibling(Node) then begin if (Node.Parent <> FRoot) or HasVisibleNextSibling(Node) then LineImage[X] := ltBottomRight else LineImage[X] := ltRight; end else if (Node.Parent = FRoot) and (not HasVisibleNextSibling(Node)) then LineImage[X] := ltTopRight else LineImage[X] := ltTopDownRight; // Now go up to the root to determine the rest. Run := Node.Parent; while Run <> FRoot do begin Dec(X); if HasVisiblePreviousSibling(Run) then LineImage[X] := ltTopDown; Run := Run.Parent; end; end else begin // Start over parent traversal if necessary. Run := Node; if Run.Parent <> FRoot then begin // The very last image (the one immediately before the item label) is different. if HasVisibleNextSibling(Run) then LineImage[X - 1] := ltTopDownRight else LineImage[X - 1] := ltTopRight; Run := Run.Parent; // Now go up all parents. repeat if Run.Parent = FRoot then Break; Dec(X); if HasVisibleNextSibling(Run) then LineImage[X - 1] := ltTopDown else LineImage[X - 1] := ltNone; Run := Run.Parent; until False; end; // Prepare root level. Run points at this stage to a top level node. if (toShowRoot in FOptions.FPaintOptions) and (toShowTreeLines in FOptions.FPaintOptions) then begin // Is the top node a root node? if Run = Node then begin // First child gets the bottom-right bitmap if it isn't also the only child. if IsFirstVisibleChild(FRoot, Run) then // Is it the only child? if IsLastVisibleChild(FRoot, Run) then LineImage[0] := ltRight else LineImage[0] := ltBottomRight else // real last child if IsLastVisibleChild(FRoot, Run) then LineImage[0] := ltTopRight else LineImage[0] := ltTopDownRight; end else begin // No, top node is not a top level node. So we need different painting. if HasVisibleNextSibling(Run) then LineImage[0] := ltTopDown else LineImage[0] := ltNone; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawLineImage(const PaintInfo: TVTPaintInfo; X, Y, H, VAlign: Integer; Style: TVTLineType; Reverse: Boolean); // Draws (depending on Style) one of the 5 line types of the tree. // If Reverse is True then a right-to-left column is being drawn, hence horizontal lines must be mirrored. // X and Y describe the left upper corner of the line image rectangle, while H denotes its height (and width). var HalfWidth, TargetX: Integer; begin HalfWidth := Integer(FIndent) div 2; if Reverse then TargetX := 0 else TargetX := FIndent; with PaintInfo.Canvas do begin case Style of ltBottomRight: begin DrawDottedVLine(PaintInfo, Y + VAlign, Y + H, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltTopDown: DrawDottedVLine(PaintInfo, Y, Y + H, X + HalfWidth); ltTopDownRight: begin DrawDottedVLine(PaintInfo, Y, Y + H, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltRight: DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); ltTopRight: begin DrawDottedVLine(PaintInfo, Y, Y + VAlign, X + HalfWidth); DrawDottedHLine(PaintInfo, X + HalfWidth, X + TargetX, Y + VAlign); end; ltLeft: // left can also mean right for RTL context if Reverse then DrawDottedVLine(PaintInfo, Y, Y + H, X + Integer(FIndent)) else DrawDottedVLine(PaintInfo, Y, Y + H, X); ltLeftBottom: if Reverse then begin DrawDottedVLine(PaintInfo, Y, Y + H, X + Integer(FIndent)); DrawDottedHLine(PaintInfo, X, X + Integer(FIndent), Y + H); end else begin DrawDottedVLine(PaintInfo, Y, Y + H, X); DrawDottedHLine(PaintInfo, X, X + Integer(FIndent), Y + H); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindInPositionCache(Node: PVirtualNode; var CurrentPos: Cardinal): PVirtualNode; // Looks through the position cache and returns the node whose top position is the largest one which is smaller or equal // to the position of the given node. var L, H, I: Integer; begin L := 0; H := High(FPositionCache); while L <= H do begin I := (L + H) shr 1; if CompareNodePositions(FPositionCache[I].Node, Node) <= 0 then L := I + 1 else H := I - 1; end; if L = 0 then // High(FPositionCache) = -1 begin Result := nil; CurrentPos := 0; end else begin Result := FPositionCache[L - 1].Node; CurrentPos := FPositionCache[L - 1].AbsoluteTop; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindInPositionCache(Position: Cardinal; var CurrentPos: Cardinal): PVirtualNode; // Looks through the position cache and returns the node whose top position is the largest one which is smaller or equal // to the given vertical position. // The returned node does not necessarily occupy the given position but is the nearest one to start // iterating from to approach the real node for a given position. CurrentPos receives the actual position of the found // node which is needed for further iteration. var L, H, I: Integer; begin L := 0; H := High(FPositionCache); while L <= H do begin I := (L + H) shr 1; if FPositionCache[I].AbsoluteTop <= Position then L := I + 1 else H := I - 1; end; if L = 0 then // High(FPositionCache) = -1 begin Result := nil; CurrentPos := 0; end else begin Result := FPositionCache[L - 1].Node; CurrentPos := FPositionCache[L - 1].AbsoluteTop; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FixupTotalCount(Node: PVirtualNode); // Called after loading a subtree from stream. The child count in each node is already set but not // their total count. var Child: PVirtualNode; begin // Initial total count is set to one on node creation. Child := Node.FirstChild; while Assigned(Child) do begin FixupTotalCount(Child); Inc(Node.TotalCount, Child.TotalCount); Child := Child.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FixupTotalHeight(Node: PVirtualNode); // Called after loading a subtree from stream. The individual height of each node is set already, // but their total height needs an adjustment depending on their visibility state. var Child: PVirtualNode; begin // Initial total height is set to the node height on load. Child := Node.FirstChild; if vsExpanded in Node.States then begin while Assigned(Child) do begin FixupTotalHeight(Child); if vsVisible in Child.States then Inc(Node.TotalHeight, Child.TotalHeight); Child := Child.NextSibling; end; end else begin // The node is collapsed, so just update the total height of its child nodes. while Assigned(Child) do begin FixupTotalHeight(Child); Child := Child.NextSibling; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetBottomNode: PVirtualNode; begin Result := InternalGetNodeAt(0, ClientHeight - 1); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckedCount: Integer; var Node: PVirtualNode; begin Result := 0; Node := GetFirstChecked; while Assigned(Node) do begin Inc(Result); Node := GetNextChecked(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckState(Node: PVirtualNode): TCheckState; begin Result := Node.CheckState; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckType(Node: PVirtualNode): TCheckType; begin Result := Node.CheckType; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetChildCount(Node: PVirtualNode): Cardinal; begin if (Node = nil) or (Node = FRoot) then Result := FRoot.ChildCount else Result := Node.ChildCount; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetChildrenInitialized(Node: PVirtualNode): Boolean; begin Result := not (vsHasChildren in Node.States) or (Node.ChildCount > 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCutCopyCount: Integer; var Node: PVirtualNode; begin Result := 0; Node := GetFirstCutCopy; while Assigned(Node) do begin Inc(Result); Node := GetNextCutCopy(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDisabled(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (vsDisabled in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDragManager: IVTDragManager; // Returns the internal drag manager interface. If this does not yet exist then it is created here. begin if FDragManager = nil then begin FDragManager := DoCreateDragManager; if FDragManager = nil then FDragManager := TVTDragManager.Create(Self); end; Result := FDragManager; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetExpanded(Node: PVirtualNode): Boolean; begin if Assigned(Node) then Result := vsExpanded in Node.States else Result := False; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFullyVisible(Node: PVirtualNode): Boolean; // Determines whether the given node has the visibility flag set as well as all its parents are expanded. begin Assert(Assigned(Node), 'Invalid parameter.'); Result := vsVisible in Node.States; if Result and (Node <> FRoot) then Result := VisiblePath[Node]; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHasChildren(Node: PVirtualNode): Boolean; begin if Assigned(Node) then Result := vsHasChildren in Node.States else Result := vsHasChildren in FRoot.States; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMultiline(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (Node <> FRoot) and (vsMultiline in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeHeight(Node: PVirtualNode): Cardinal; begin if Assigned(Node) and (Node <> FRoot) then begin if toVariableNodeHeight in FOptions.FMiscOptions then begin if not (vsInitialized in Node.States) then InitNode(Node); // Ensure the node's height is determined. MeasureItemHeight(Canvas, Node); end; Result := Node.NodeHeight end else Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeParent(Node: PVirtualNode): PVirtualNode; begin if Assigned(Node) and (Node.Parent <> FRoot) then Result := Node.Parent else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOffsetXY: TPoint; begin Result := Point(FOffsetX, FOffsetY); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetRootNodeCount: Cardinal; begin Result := FRoot.ChildCount; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSelected(Node: PVirtualNode): Boolean; begin Result := Assigned(Node) and (vsSelected in Node.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTopNode: PVirtualNode; begin Result := InternalGetNodeAt(0, 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTotalCount: Cardinal; begin Inc(FUpdateCount); try ValidateNode(FRoot, True); finally Dec(FUpdateCount); end; // The root node itself doesn't count as node. Result := FRoot.TotalCount - 1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVerticalAlignment(Node: PVirtualNode): Byte; begin Result := Node.Align; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisible(Node: PVirtualNode): Boolean; // Determines if the given node is marked as being visible. begin if Node = nil then Node := FRoot; if not (vsInitialized in Node.States) then InitNode(Node); Result := vsVisible in Node.States; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisiblePath(Node: PVirtualNode): Boolean; // Determines if all parents of the given node are expanded and have the visibility flag set. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameters.'); // FRoot is always expanded repeat Node := Node.Parent; until (Node = FRoot) or not (vsExpanded in Node.States) or not (vsVisible in Node.States); Result := Node = FRoot; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleClickSelection(LastFocused, NewNode: PVirtualNode; Shift: TShiftState; DragPending: Boolean); // Handles multi-selection with mouse click. begin // Ctrl key down if ssCtrlOS in Shift then begin if ssShift in Shift then begin SelectNodes(FRangeAnchor, NewNode, True); Invalidate; end else begin if not (toSiblingSelectConstraint in FOptions.SelectionOptions) then FRangeAnchor := NewNode; // Delay selection change if a drag operation is pending. // Otherwise switch selection state here. if DragPending then DoStateChange([tsToggleFocusedSelection]) else if vsSelected in NewNode.States then RemoveFromSelection(NewNode) else AddToSelection(NewNode); end; end else // Shift key down if ssShift in Shift then begin if FRangeAnchor = nil then FRangeAnchor := FRoot.FirstChild; // select node range if Assigned(FRangeAnchor) then begin SelectNodes(FRangeAnchor, NewNode, False); Invalidate; end; end else begin // any other case if not (vsSelected in NewNode.States) then begin AddToSelection(NewNode); InvalidateNode(NewNode); end; // assign new reference item FRangeAnchor := NewNode; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HandleDrawSelection(X, Y: Integer): Boolean; // Handles multi-selection with a focus rectangle. // Result is True if something changed in selection. var OldRect, NewRect: TRect; MainColumn: TColumnIndex; MaxValue: Integer; // limits of a node and its text NodeLeft, NodeRight: Integer; // alignment and directionality CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; begin Result := False; // Selection changes are only done if the user drew a selection rectangle large // enough to exceed the threshold. if (FRoot.TotalCount > 1) and (tsDrawSelecting in FStates) then begin // Effective handling of node selection is done by using two rectangles stored in FSelectRec. OldRect := OrderRect(FLastSelRect); NewRect := OrderRect(FNewSelRect); ClearTempCache; MainColumn := FHeader.MainColumn; // Alignment and bidi mode determine where the node text is located within a node. if MainColumn <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[MainColumn].BidiMode; CurrentAlignment := FHeader.FColumns[MainColumn].Alignment; end; // Determine initial left border of first node (take column reordering into account). if FHeader.UseColumns then begin // The mouse coordinates don't include any horizontal scrolling hence take this also // out from the returned column position. NodeLeft := FHeader.FColumns[MainColumn].Left - FEffectiveOffsetX; NodeRight := NodeLeft + FHeader.FColumns[MainColumn].Width; end else begin NodeLeft := 0; NodeRight := ClientWidth; end; if CurrentBidiMode = bdLeftToRight then Result := CollectSelectedNodesLTR(MainColumn, NodeLeft, NodeRight, CurrentAlignment, OldRect, NewRect) else Result := CollectSelectedNodesRTL(MainColumn, NodeLeft, NodeRight, CurrentAlignment, OldRect, NewRect); end; if Result then begin // Do some housekeeping if there was a change. MaxValue := PackArray(FSelection, FSelectionCount); if MaxValue > -1 then begin FSelectionCount := MaxValue; SetLength(FSelection, FSelectionCount); end; if FTempNodeCount > 0 then begin AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; end; Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasVisibleNextSibling(Node: PVirtualNode): Boolean; // Helper method to determine if the given node has a visible next sibling. This is needed to // draw correct tree lines. begin // Check if there is a sibling at all. Result := Assigned(Node.NextSibling); if Result then begin repeat Node := Node.NextSibling; Result := vsVisible in Node.States; until Result or (Node.NextSibling = nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasVisiblePreviousSibling(Node: PVirtualNode): Boolean; // Helper method to determine if the given node has a visible previous sibling. This is needed to // draw correct tree lines. begin // Check if there is a sibling at all. Result := Assigned(Node.PrevSibling); if Result then begin repeat Node := Node.PrevSibling; Result := vsVisible in Node.States; until Result or (Node.PrevSibling = nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ImageListChange(Sender: TObject); begin if not (csDestroying in ComponentState) then Invalidate; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitializeFirstColumnValues(var PaintInfo: TVTPaintInfo); // Determines initial index, position and cell size of the first visible column. begin PaintInfo.Column := FHeader.FColumns.GetFirstVisibleColumn; with FHeader.FColumns, PaintInfo do begin if Column > NoColumn then begin CellRect.Right := CellRect.Left + Items[Column].Width; Position := Items[Column].Position; end else Position := 0; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitRootNode(OldSize: Cardinal = 0); // Reinitializes the root node. var NewSize: Cardinal; begin NewSize := TreeNodeSize + FTotalInternalDataSize; if FRoot = nil then FRoot := AllocMem(NewSize) else begin ReallocMem(FRoot, NewSize); FillChar(PAnsiChar(PAnsiChar(FRoot) + OldSize)^, NewSize - OldSize, 0); end; with FRoot^ do begin // Indication that this node is the root node. PrevSibling := FRoot; NextSibling := FRoot; Parent := Pointer(Self); States := [vsInitialized, vsExpanded, vsHasChildren, vsVisible]; TotalHeight := FDefaultNodeHeight; TotalCount := 1; TotalHeight := FDefaultNodeHeight; NodeHeight := FDefaultNodeHeight; Align := 50; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InterruptValidation; var WasValidating: Boolean; begin DoStateChange([tsStopValidation], [tsUseCache]); {$ifdef EnableThreadSupport} // Check the worker thread existance. It might already be gone (usually on destruction of the last tree). if Assigned(WorkerThread) then begin WasValidating := (tsValidating in FStates); WorkerThread.RemoveTree(Self); if WasValidating then DoStateChange([tsValidationNeeded]); end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsFirstVisibleChild(Parent, Node: PVirtualNode): Boolean; // Helper method to check if Node is the same as the first visible child of Parent. var Run: PVirtualNode; begin // Find first visible child. Run := Parent.FirstChild; while Assigned(Run) and not (vsVisible in Run.States) do Run := Run.NextSibling; Result := Assigned(Run) and (Run = Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsLastVisibleChild(Parent, Node: PVirtualNode): Boolean; // Helper method to check if Node is the same as the last visible child of Parent. var Run: PVirtualNode; begin // Find last visible child. Run := Parent.LastChild; while Assigned(Run) and not (vsVisible in Run.States) do Run := Run.PrevSibling; Result := Assigned(Run) and (Run = Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LimitPaintingToArea(Canvas: TCanvas; ClipRect: TRect; VisibleRegion: HRGN = 0); // Limits further painting onto the given canvas to the given rectangle. // VisibleRegion is an optional region which can be used to limit drawing further. var ClipRegion: HRGN; begin // Regions expect their coordinates in device coordinates, hence we have to transform the region rectangle. LPtoDP(Canvas.Handle, ClipRect, 2); ClipRegion := CreateRectRgnIndirect(ClipRect); if VisibleRegion <> 0 then CombineRgn(ClipRegion, ClipRegion, VisibleRegion, RGN_AND); SelectClipRgn(Canvas.Handle, ClipRegion); DeleteObject(ClipRegion); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadPanningCursors; begin with Screen do begin Cursors[crVT_MOVEALL]:=LoadCursorFromLazarusResource('VT_MOVEALL'); Cursors[crVT_MOVEEW]:=LoadCursorFromLazarusResource('VT_MOVEEW'); Cursors[crVT_MOVENS]:=LoadCursorFromLazarusResource('VT_MOVENS'); Cursors[crVT_MOVENW]:=LoadCursorFromLazarusResource('VT_MOVENW'); Cursors[crVT_MOVESW]:=LoadCursorFromLazarusResource('VT_MOVESW'); Cursors[crVT_MOVESE]:=LoadCursorFromLazarusResource('VT_MOVESE'); Cursors[crVT_MOVENE]:=LoadCursorFromLazarusResource('VT_MOVENE'); Cursors[crVT_MOVEW]:=LoadCursorFromLazarusResource('VT_MOVEW'); Cursors[crVT_MOVEE]:=LoadCursorFromLazarusResource('VT_MOVEE'); Cursors[crVT_MOVEN]:=LoadCursorFromLazarusResource('VT_MOVEN'); Cursors[crVT_MOVES]:=LoadCursorFromLazarusResource('VT_MOVES'); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.MakeNewNode: PVirtualNode; var Size: Cardinal; begin Size := TreeNodeSize; if not (csDesigning in ComponentState) then begin // Make sure FNodeDataSize is valid. if FNodeDataSize = -1 then ValidateNodeDataSize(FNodeDataSize); // Take record alignment into account. Inc(Size, FNodeDataSize); end; Result := AllocMem(Size + FTotalInternalDataSize); // Fill in some default values. with Result^ do begin TotalCount := 1; TotalHeight := FDefaultNodeHeight; NodeHeight := FDefaultNodeHeight; States := [vsVisible]; Align := 50; end; end; {$ifdef PACKARRAYPASCAL} function TBaseVirtualTree.PackArray(const TheArray: TNodeArray; Count: Integer): Integer; var Source, Dest: ^PVirtualNode; ConstOne: PtrInt; begin Source := Pointer(TheArray); ConstOne := 1; Result := 0; // Do the fastest scan possible to find the first entry while (Count <> 0) and {not Odd(NativeInt(Source^))} (PtrInt(Source^) and ConstOne = 0) do begin Inc(Result); Inc(Source); Dec(Count); end; if Count <> 0 then begin Dest := Source; repeat // Skip odd entries if {not Odd(NativeInt(Source^))} PtrInt(Source^) and ConstOne = 0 then begin Dest^ := Source^; Inc(Result); Inc(Dest); end; Inc(Source); // Point to the next entry Dec(Count); until Count = 0; end; end; {$else} //---------------------------------------------------------------------------------------------------------------------- {$IMPLICITEXCEPTIONS OFF} function TBaseVirtualTree.PackArray(TheArray: TNodeArray; Count: Integer): Integer; assembler; // Removes all entries from the selection array which are no longer in use. The selection array must be sorted for this // algo to work. Values which must be removed are marked with bit 0 (LSB) set. This little trick works because memory // is always allocated DWORD aligned. Since the selection array must be sorted while determining the entries to be // removed it is much more efficient to increment the entry in question instead of setting it to nil (which would break // the ordered appearance of the list). // // On enter EAX contains self reference, EDX the address to TheArray and ECX Count // The returned value is the number of remaining entries in the array, so the caller can reallocate (shorten) // the selection array if needed or -1 if nothing needs to be changed. asm PUSH EBX PUSH EDI PUSH ESI MOV ECX, EDX //fpc: count is in EDX. Move to ECX MOV ESI, [EBP+8] //fpc: TheArray is in EBP+8 MOV EDX, -1 JCXZ @@Finish // Empty list? INC EDX // init remaining entries counter MOV EDI, ESI // source and destination point to the list memory MOV EBX, 1 // use a register instead of immediate operant to check against @@PreScan: TEST [ESI], EBX // do the fastest scan possible to find the first entry // which must be removed JNZ @@DoMainLoop INC EDX ADD ESI, 4 DEC ECX JNZ @@PreScan JMP @@Finish @@DoMainLoop: MOV EDI, ESI @@MainLoop: TEST [ESI], EBX // odd entry? JNE @@Skip // yes, so skip this one MOVSD // else move the entry to new location INC EDX // count the moved entries DEC ECX JNZ @@MainLoop // do it until all entries are processed JMP @@Finish @@Skip: ADD ESI, 4 // point to the next entry DEC ECX JNZ @@MainLoop // do it until all entries are processed @@Finish: MOV EAX, EDX // prepare return value POP ESI POP EDI POP EBX end; {$IMPLICITEXCEPTIONS ON} {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareBitmaps(NeedButtons, NeedLines: Boolean); // initializes the contents of the internal bitmaps const LineBitsDotted: array [0..8] of Word = ($55, $AA, $55, $AA, $55, $AA, $55, $AA, $55); LineBitsSolid: array [0..7] of Word = (0, 0, 0, 0, 0, 0, 0, 0); var PatternBitmap: HBITMAP; Bits: Pointer; Size: TSize; {$ifdef ThemeSupport} //Theme: HTHEME; R: TRect; const TVP_HOTGLYPH = 4; {$endif ThemeSupport} //--------------- local function -------------------------------------------- procedure FillBitmap (ABitmap: TBitmap); begin with ABitmap, Canvas do begin ABitmap.Width := Size.cx; ABitmap.Height := Size.cy; {$Ifdef ThemeSupport} if IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) then begin if (FHeader.FMainColumn > NoColumn) and not (coParentColor in FHeader.FColumns[FHeader.FMainColumn].FOptions) then Brush.Color := FHeader.FColumns[FHeader.FMainColumn].Color else Brush.Color := Self.Brush.Color; end else begin {$EndIf ThemeSupport} MaskHandle := 0; Transparent := True; TransparentColor := clFuchsia; Brush.Color := clFuchsia; {$Ifdef ThemeSupport} end; {$EndIf ThemeSupport} FillRect(Rect(0, 0, ABitmap.Width, ABitmap.Height)); end; end; //--------------- end local function ---------------------------------------- begin Size.cx := 9; Size.cy := 9; {$ifdef ThemeSupport} //todo { if tsUseThemes in FStates then begin Theme := OpenThemeData(Handle, 'TREEVIEW'); if IsWinVistaOrAbove and (toUseExplorerTheme in FOptions.FPaintOptions) then begin R := Rect(0, 0, 100, 100); GetThemePartSize(Theme, FPlusBM.Canvas.Handle, TVP_GLYPH, GLPS_OPENED, @R, TS_TRUE, Size); end; end else Theme := 0; } {$endif ThemeSupport} if NeedButtons then begin with FMinusBM, Canvas do begin // box is always of odd size FillBitmap(FMinusBM); FillBitmap(FHotMinusBM); if not (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then begin if FButtonStyle = bsTriangle then begin Brush.Color := clBlack; Pen.Color := clBlack; Polygon([Point(0, 2), Point(8, 2), Point(4, 6)]); end else begin // Button style is rectangular. Now ButtonFillMode determines how to fill the interior. if FButtonFillMode in [fmTreeColor, fmWindowColor, fmTransparent] then begin case FButtonFillMode of fmTreeColor: Brush.Color := Self.Brush.Color; fmWindowColor: Brush.Color := clWindow; end; Pen.Color := FColors.TreeLineColor; Rectangle(0, 0, Width, Height); Pen.Color := Self.Font.Color; MoveTo(2, Width div 2); LineTo(Width - 2 , Width div 2); end else FMinusBM.LoadFromLazarusResource('VT_XPBUTTONMINUS'); FHotMinusBM.Canvas.Draw(0, 0, FMinusBM); end; end; end; with FPlusBM, Canvas do begin FillBitmap(FPlusBM); FillBitmap(FHotPlusBM); if not (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then begin if FButtonStyle = bsTriangle then begin Brush.Color := clBlack; Pen.Color := clBlack; Polygon([Point(2, 0), Point(6, 4), Point(2, 8)]); end else begin // Button style is rectangular. Now ButtonFillMode determines how to fill the interior. if FButtonFillMode in [fmTreeColor, fmWindowColor, fmTransparent] then begin case FButtonFillMode of fmTreeColor: Brush.Color := Self.Brush.Color; fmWindowColor: Brush.Color := clWindow; end; Pen.Color := FColors.TreeLineColor; Rectangle(0, 0, Width, Height); Pen.Color := Self.Font.Color; MoveTo(2, Width div 2); LineTo(Width - 2 , Width div 2); MoveTo(Width div 2, 2); LineTo(Width div 2, Width - 2); end else FPlusBM.LoadFromLazarusResource('VT_XPBUTTONPLUS'); FHotPlusBM.Canvas.Draw(0, 0, FPlusBM); end; end; end; {$ifdef ThemeSupport} //todo // Overwrite glyph images if theme is active. { if (tsUseThemes in FStates) and (Theme <> 0) then begin R := Rect(0, 0, Size.cx, Size.cy); DrawThemeBackground(Theme, FPlusBM.Canvas.Handle, TVP_GLYPH, GLPS_CLOSED, R, nil); DrawThemeBackground(Theme, FMinusBM.Canvas.Handle, TVP_GLYPH, GLPS_OPENED, R, nil); if IsWinVistaOrAbove and (toUseExplorerTheme in FOptions.FPaintOptions) then begin DrawThemeBackground(Theme, FHotPlusBM.Canvas.Handle, TVP_HOTGLYPH, GLPS_CLOSED, R, nil); DrawThemeBackground(Theme, FHotMinusBM.Canvas.Handle, TVP_HOTGLYPH, GLPS_OPENED, R, nil); end else begin FHotPlusBM.Canvas.Draw(0, 0, FPlusBM); FHotMinusBM.Canvas.Draw(0, 0, FMinusBM); end; end; } {$endif ThemeSupport} end; if NeedLines then begin if FDottedBrush <> 0 then DeleteObject(FDottedBrush); case FLineStyle of lsDotted: Bits := @LineBitsDotted; lsSolid: Bits := @LineBitsSolid; else // lsCustomStyle Bits := @LineBitsDotted; DoGetLineStyle(Bits); end; PatternBitmap := CreateBitmap(8, 8, 1, 1, Bits); FDottedBrush := CreatePatternBrush(PatternBitmap); DeleteObject(PatternBitmap); end; {$ifdef ThemeSupport} // if Theme <> 0 then // CloseThemeData(Theme); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetAlignment(const Value: TAlignment); begin if FAlignment <> Value then begin FAlignment := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetAnimationDuration(const Value: Cardinal); begin FAnimationDuration := Value; if FAnimationDuration = 0 then Exclude(FOptions.FAnimationOptions, toAnimatedToggle) else Include(FOptions.FAnimationOptions, toAnimatedToggle); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBackground(const Value: TPicture); begin FBackground.Assign(Value); Invalidate; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBackgroundOffset(const Index, Value: Integer); begin case Index of 0: if FBackgroundOffsetX <> Value then begin FBackgroundOffsetX := Value; Invalidate; end; 1: if FBackgroundOffsetY <> Value then begin FBackgroundOffsetY := Value; Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- { procedure TBaseVirtualTree.SetBorderStyle(Value: TBorderStyle); begin if FBorderStyle <> Value then begin FBorderStyle := Value; RecreateWnd; end; end; } //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBottomNode(Node: PVirtualNode); var Run: PVirtualNode; R: TRect; begin if Assigned(Node) then begin // make sure all parents of the node are expanded Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; R := GetDisplayRect(Node, FHeader.MainColumn, True); DoSetOffsetXY(Point(FOffsetX, FOffsetY + ClientHeight - R.Top - Integer(NodeHeight[Node])), [suoRepaintScrollbars, suoUpdateNCArea]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetBottomSpace(const Value: Cardinal); begin if FBottomSpace <> Value then begin FBottomSpace := Value; UpdateVerticalScrollbar(True); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetButtonFillMode(const Value: TVTButtonFillMode); begin if FButtonFillMode <> Value then begin FButtonFillMode := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetButtonStyle(const Value: TVTButtonStyle); begin if FButtonStyle <> Value then begin FButtonStyle := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckImageKind(Value: TCheckImageKind); begin if FCheckImageKind <> Value then begin FCheckImageKind := Value; if toCheckSupport in FOptions.FMiscOptions then UpdateCheckImageList; if HandleAllocated and (FUpdateCount = 0) and not (csLoading in ComponentState) then InvalidateRect(Handle, nil, False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckState(Node: PVirtualNode; Value: TCheckState); begin if (Node.CheckState <> Value) and not (vsDisabled in Node.States) and DoChecking(Node, Value) then DoCheckClick(Node, Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCheckType(Node: PVirtualNode; Value: TCheckType); begin if (Node.CheckType <> Value) and not (toReadOnly in FOptions.FMiscOptions) then begin Node.CheckType := Value; Node.CheckState := csUncheckedNormal; // For check boxes with tri-state check box parents we have to initialize differently. if (toAutoTriStateTracking in FOptions.FAutoOptions) and (Value in [ctCheckBox, ctTriStateCheckBox]) and (Node.Parent <> FRoot) then begin if not (vsInitialized in Node.Parent.States) then InitNode(Node.Parent); if (Node.Parent.CheckType = ctTriStateCheckBox) and (Node.Parent.CheckState in [csUncheckedNormal, csCheckedNormal]) then CheckState[Node] := Node.Parent.CheckState; end; InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetChildCount(Node: PVirtualNode; NewChildCount: Cardinal); // Changes a node's child structure to accomodate the new child count. This is used to add or delete // child nodes to/from the end of the node's child list. To insert or delete a specific node a separate // routine is used. var Remaining: Cardinal; Index: Cardinal; Child: PVirtualNode; Count: Integer; NewHeight: Integer; begin if not (toReadOnly in FOptions.FMiscOptions) then begin if Node = nil then Node := FRoot; if NewChildCount = 0 then DeleteChildren(Node) else begin // If nothing changed then do nothing. if NewChildCount <> Node.ChildCount then begin InterruptValidation; NewHeight := 0; if NewChildCount > Node.ChildCount then begin Remaining := NewChildCount - Node.ChildCount; Count := Remaining; // New nodes to add. if Assigned(Node.LastChild) then Index := Node.LastChild.Index + 1 else begin Index := 0; Include(Node.States, vsHasChildren); end; Node.States := Node.States - [vsAllChildrenHidden, vsHeightMeasured]; // New nodes are by default always visible, so we don't need to check the visibility. while Remaining > 0 do begin Child := MakeNewNode; Child.Index := Index; Child.PrevSibling := Node.LastChild; if Assigned(Node.LastChild) then Node.LastChild.NextSibling := Child; Child.Parent := Node; Node.LastChild := Child; if Node.FirstChild = nil then Node.FirstChild := Child; Dec(Remaining); Inc(Index); // The actual node height will later be computed once it is clear // whether this node has a variable node height or not. Inc(NewHeight, Child.NodeHeight); end; if vsExpanded in Node.States then begin AdjustTotalHeight(Node, NewHeight, True); if FullyVisible[Node] then Inc(Integer(FVisibleCount), Count); end; AdjustTotalCount(Node, Count, True); Node.ChildCount := NewChildCount; if (FUpdateCount = 0) and (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then Sort(Node, FHeader.FSortColumn, FHeader.FSortDirection, True); InvalidateCache; end else begin // Nodes have to be deleted. Remaining := Node.ChildCount - NewChildCount; while Remaining > 0 do begin DeleteNode(Node.LastChild); Dec(Remaining); end; end; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; if Node = FRoot then StructureChange(nil, crChildAdded) else StructureChange(Node, crChildAdded); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetClipboardFormats(const Value: TClipboardFormats); var I: Integer; begin // Add string by string instead doing an Assign or AddStrings because the list may return -1 for // invalid entries which cause trouble for the standard implementation. FClipboardFormats.Clear; for I := 0 to Value.Count - 1 do FClipboardFormats.Add(Value[I]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetColors(const Value: TVTColors); begin FColors.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetCustomCheckImages(const Value: TBitmap); begin if FCustomCheckImages <> Value then begin if Assigned(FCustomCheckImages) then begin // Reset the internal check image list reference too, if necessary. if FCheckImages = FCustomCheckImages then FCheckImages := nil; end; FCustomCheckImages := Value; // Check if currently custom check images are active. if FCheckImageKind = ckCustom then FCheckImages := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetDefaultNodeHeight(Value: Cardinal); begin if Value = 0 then Value := 18; if FDefaultNodeHeight <> Value then begin DoStateChange([tsNeedScale]); Inc(Integer(FRoot.TotalHeight), Integer(Value) - Integer(FDefaultNodeHeight)); Inc(SmallInt(FRoot.NodeHeight), Integer(Value) - Integer(FDefaultNodeHeight)); FDefaultNodeHeight := Value; InvalidateCache; if (FUpdateCount = 0) and HandleAllocated and not (csLoading in ComponentState) then begin ValidateCache; UpdateScrollBars(True); ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetDisabled(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and (Value xor (vsDisabled in Node.States)) then begin if Value then Include(Node.States, vsDisabled) else Exclude(Node.States, vsDisabled); if FUpdateCount = 0 then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetExpanded(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and (Node <> FRoot) and (Value xor (vsExpanded in Node.States)) then ToggleNode(Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedColumn(Value: TColumnIndex); begin if (FFocusedColumn <> Value) and DoFocusChanging(FFocusedNode, FFocusedNode, FFocusedColumn, Value) then begin CancelEditNode; InvalidateColumn(FFocusedColumn); InvalidateColumn(Value); FFocusedColumn := Value; if Assigned(FFocusedNode) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then begin if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)) then InvalidateNode(FFocusedNode); end; if Assigned(FDropTargetNode) then InvalidateNode(FDropTargetNode); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedNode(Value: PVirtualNode); var WasDifferent: Boolean; begin WasDifferent := Value <> FFocusedNode; DoFocusNode(Value, True); // Do change event only if there was actually a change. if WasDifferent and (FFocusedNode = Value) then DoFocusChange(FFocusedNode, FFocusedColumn); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFullyVisible(Node: PVirtualNode; Value: Boolean); // This method ensures that a node is visible and all its parent nodes are expanded and also visible // if Value is True. Otherwise the visibility flag of the node is reset but the expand state // of the parent nodes stays untouched. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter'); IsVisible[Node] := Value; if Value then begin repeat Node := Node.Parent; if Node = FRoot then Break; if not (vsExpanded in Node.States) then ToggleNode(Node); if not (vsVisible in Node.States) then IsVisible[Node] := True; until False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetHasChildren(Node: PVirtualNode; Value: Boolean); begin if Assigned(Node) and not (toReadOnly in FOptions.FMiscOptions) then begin if Value then Include(Node.States, vsHasChildren) else begin Exclude(Node.States, vsHasChildren); DeleteChildren(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetHeader(const Value: TVTHeader); begin FHeader.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetImages(const Value: TCustomImageList); begin if FImages <> Value then begin if Assigned(FImages) then begin FImages.UnRegisterChanges(FImageChangeLink); FImages.RemoveFreeNotification(Self); end; FImages := Value; if Assigned(FImages) then begin FImages.RegisterChanges(FImageChangeLink); FImages.FreeNotification(Self); end; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetIndent(Value: Cardinal); begin if FIndent <> Value then begin FIndent := Value; if not (csLoading in ComponentState) and (FUpdateCount = 0) and HandleAllocated then begin UpdateScrollBars(True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetLineMode(const Value: TVTLineMode); begin if FLineMode <> Value then begin FLineMode := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetLineStyle(const Value: TVTLineStyle); begin if FLineStyle <> Value then begin FLineStyle := Value; if not (csLoading in ComponentState) then begin PrepareBitmaps(False, True); if HandleAllocated then Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetMargin(Value: Integer); begin if FMargin <> Value then begin FMargin := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetMultiline(Node: PVirtualNode; const Value: Boolean); begin if Assigned(Node) and (Node <> FRoot) then if Value <> (vsMultiline in Node.States) then begin if Value then Include(Node.States, vsMultiline) else Exclude(Node.States, vsMultiline); if FUpdateCount = 0 then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeAlignment(const Value: TVTNodeAlignment); begin if FNodeAlignment <> Value then begin FNodeAlignment := Value; if HandleAllocated and not (csReading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeDataSize(Value: Integer); var LastRootCount: Cardinal; begin if Value < -1 then Value := -1; if FNodeDataSize <> Value then begin FNodeDataSize := Value; if not (csLoading in ComponentState) and not (csDesigning in ComponentState) then begin LastRootCount := FRoot.ChildCount; Clear; SetRootNodeCount(LastRootCount); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeHeight(Node: PVirtualNode; Value: Cardinal); var Difference: Integer; begin if Assigned(Node) and (Node <> FRoot) and (Node.NodeHeight <> Value) and not (toReadOnly in FOptions.FMiscOptions) then begin Difference := Integer(Value) - Integer(Node.NodeHeight); Node.NodeHeight := Value; AdjustTotalHeight(Node, Difference, True); // If an edit operation is currently active then update the editors boundaries as well. UpdateEditBounds; // Stay away from touching the node cache while it is being validated. if not (tsValidating in FStates) and FullyVisible[Node] then begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; InvalidateToBottom(Node); UpdateScrollBars(True); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetNodeParent(Node: PVirtualNode; const Value: PVirtualNode); begin if Assigned(Node) and Assigned(Value) and (Node.Parent <> Value) then MoveTo(Node, Value, amAddChildLast, False); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetX(const Value: Integer); begin DoSetOffsetXY(Point(Value, FOffsetY), DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetXY(const Value: TPoint); begin DoSetOffsetXY(Value, DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOffsetY(const Value: Integer); begin DoSetOffsetXY(Point(FOffsetX, Value), DefaultScrollUpdateFlags); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetOptions(const Value: TCustomVirtualTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetRootNodeCount(Value: Cardinal); begin // Don't set the root node count until all other properties (in particular the OnInitNode event) have been set. if csLoading in ComponentState then begin FRoot.ChildCount := Value; DoStateChange([tsNeedRootCountUpdate]); end else if FRoot.ChildCount <> Value then begin BeginUpdate; InterruptValidation; SetChildCount(FRoot, Value); EndUpdate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetScrollBarOptions(Value: TScrollBarOptions); begin FScrollBarOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSearchOption(const Value: TVTIncrementalSearch); begin if FIncrementalSearch <> Value then begin FIncrementalSearch := Value; if FIncrementalSearch = isNone then begin KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSelected(Node: PVirtualNode; Value: Boolean); begin if not FSelectionLocked and Assigned(Node) and (Node <> FRoot) and (Value xor (vsSelected in Node.States)) then begin if Value then begin if FSelectionCount = 0 then FRangeAnchor := Node else if not (toMultiSelect in FOptions.FSelectionOptions) then ClearSelection; AddToSelection(Node); // Make sure there is a valid column selected (if there are columns at all). if ((FFocusedColumn < 0) or not (coVisible in FHeader.Columns[FFocusedColumn].Options)) and (FHeader.MainColumn > NoColumn) then if ([coVisible, coAllowFocus] * FHeader.Columns[FHeader.MainColumn].Options = [coVisible, coAllowFocus]) then FFocusedColumn := FHeader.MainColumn else FFocusedColumn := FHeader.Columns.GetFirstVisibleColumn(True); if FRangeAnchor = nil then FRangeAnchor := Node; end else begin RemoveFromSelection(Node); if FSelectionCount = 0 then ResetRangeAnchor; end; if FullyVisible[Node] then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetSelectionCurveRadius(const Value: Cardinal); begin if FSelectionCurveRadius <> Value then begin FSelectionCurveRadius := Value; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetStateImages(const Value: TCustomImageList); begin if FStateImages <> Value then begin if Assigned(FStateImages) then begin FStateImages.UnRegisterChanges(FStateChangeLink); FStateImages.RemoveFreeNotification(Self); end; FStateImages := Value; if Assigned(FStateImages) then begin FStateImages.RegisterChanges(FStateChangeLink); FStateImages.FreeNotification(Self); end; if HandleAllocated and not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetTextMargin(Value: Integer); begin if FTextMargin <> Value then begin FTextMargin := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetTopNode(Node: PVirtualNode); var R: TRect; Run: PVirtualNode; begin if Assigned(Node) then begin // make sure all parents of the node are expanded Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; R := GetDisplayRect(Node, FHeader.MainColumn, True); //lclheader if hoVisible in FHeader.Options then Dec(R.Top, FHeader.Height); SetOffsetY(FOffsetY - R.Top); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetUpdateState(Updating: Boolean); begin // The check for visibility is necessary otherwise the tree is automatically shown when // updating is allowed. As this happens internally the VCL does not get notified and // still assumes the control is hidden. This results in weird "cannot focus invisible control" errors. //lcl todo if Visible and HandleAllocated and (FUpdateCount = 0) then SendMessage(Handle, WM_SETREDRAW, Ord(not Updating), 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVerticalAlignment(Node: PVirtualNode; Value: Byte); begin if Value > 100 then Value := 100; if Node.Align <> Value then begin Node.Align := Value; if FullyVisible[Node] then InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVisible(Node: PVirtualNode; Value: Boolean); // Sets the visibility style of the given node according to Value. var NeedUpdate: Boolean; begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); if Value <> (vsVisible in Node.States) then begin InterruptValidation; NeedUpdate := False; if Value then begin Include(Node.States, vsVisible); if vsExpanded in Node.Parent.States then AdjustTotalHeight(Node.Parent, Node.TotalHeight, True); if VisiblePath[Node] then begin Inc(FVisibleCount, 1 + CountVisibleChildren(Node)); NeedUpdate := True; end; // Update the hidden children flag of the parent. // Since this node is now visible we simply have to remove the flag. Exclude(Node.Parent.States, vsAllChildrenHidden); end else begin Exclude(Node.States, vsVisible); if vsExpanded in Node.Parent.States then AdjustTotalHeight(Node.Parent, -Integer(Node.TotalHeight), True); if VisiblePath[Node] then begin Dec(FVisibleCount, 1 + CountVisibleChildren(Node)); NeedUpdate := True; end; if FUpdateCount = 0 then DetermineHiddenChildrenFlag(Node.Parent) else Include(FStates, tsUpdateHiddenChildrenNeeded) end; InvalidateCache; if NeedUpdate and (FUpdateCount = 0) then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetVisiblePath(Node: PVirtualNode; Value: Boolean); // If Value is True then all parent nodes of Node are expanded. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); if Value then begin repeat Node := Node.Parent; if Node = FRoot then Break; if not (vsExpanded in Node.States) then ToggleNode(Node); until False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StaticBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; const R: TRect); // Draws the given source graphic so that it stays static in the given rectangle which is relative to the target bitmap. // The graphic is aligned so that it always starts at the upper left corner of the target canvas. // Offset gives the position of the target window as a possible superordinated surface. const DST = $00AA0029; // Ternary Raster Operation - Destination unchanged var PicRect: TRect; AreaRect: TRect; DrawRect: TRect; begin // clear background Target.Brush.Color := Brush.Color; Target.FillRect(R); // Picture rect in relation to client viewscreen. PicRect := Rect(FBackgroundOffsetX, FBackgroundOffsetY, FBackgroundOffsetX + Source.Width, FBackgroundOffsetY + Source.Height); // Area to be draw in relation to client viewscreen. AreaRect := Rect(Offset.X + R.Left, Offset.Y + R.Top, Offset.X + R.Right, Offset.Y + R.Bottom); // If picture falls in AreaRect, return intersection (DrawRect). if IntersectRect(DrawRect, PicRect, AreaRect) then begin // Draw portion of image which falls in canvas area. if Source.Transparent then begin // Leave transparent area as destination unchanged (DST), copy non-transparent areas to canvas (SRCCOPY). with DrawRect do MaskBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X), (Bottom - Offset.Y) - (Top - Offset.Y), Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top, Source.MaskHandle, Left - PicRect.Left, Top - PicRect.Top, MakeROP4(DST, SRCCOPY)); end else begin // copy image to destination with DrawRect do BitBlt(Target.Handle, Left - Offset.X, Top - Offset.Y, (Right - Offset.X) - (Left - Offset.X), (Bottom - Offset.Y) - (Top - Offset.Y) + R.Top, Source.Canvas.Handle, Left - PicRect.Left, DrawRect.Top - PicRect.Top, SRCCOPY); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TileBackground(Source: TBitmap; Target: TCanvas; const Offset: TPoint; R: TRect); // Draws the given source graphic so that it tiles into the given rectangle which is relative to the target bitmap. // The graphic is aligned so that it always starts at the upper left corner of the target canvas. // Offset gives the position of the target window in an possible superordinated surface. var SourceX, SourceY, TargetX, DeltaY: Integer; begin with Target do begin SourceY := (R.Top + Offset.Y + FBackgroundOffsetY) mod Source.Height; // Always wrap the source coordinates into positive range. if SourceY < 0 then SourceY := Source.Height + SourceY; // Tile image vertically until target rect is filled. while R.Top < R.Bottom do begin SourceX := (R.Left + Offset.X + FBackgroundOffsetX) mod Source.Width; // always wrap the source coordinates into positive range if SourceX < 0 then SourceX := Source.Width + SourceX; TargetX := R.Left; // height of strip to draw DeltaY := Min(R.Bottom - R.Top, Source.Height - SourceY); // tile the image horizontally while TargetX < R.Right do begin BitBlt(Handle, TargetX, R.Top, Min(R.Right - TargetX, Source.Width - SourceX), DeltaY, Source.Canvas.Handle, SourceX, SourceY, SRCCOPY); Inc(TargetX, Source.Width - SourceX); SourceX := 0; end; Inc(R.Top, Source.Height - SourceY); SourceY := 0; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ToggleCallback(Step, StepSize: Integer; Data: Pointer): Boolean; var Column: TColumnIndex; Run: TRect; SecondaryStepSize: Integer; //--------------- local functions ------------------------------------------- procedure EraseLine; var LocalBrush: HBRUSH; begin with TToggleAnimationData(Data^), FHeader.FColumns do begin // Iterate through all columns and erase background in their local color. // LocalBrush is a brush in the color of the particular column. Column := GetFirstVisibleColumn; while (Column > InvalidColumn) and (Run.Left < ClientWidth) do begin GetColumnBounds(Column, Run.Left, Run.Right); if coParentColor in Items[Column].FOptions then FillRect(DC, Run, Brush) else begin LocalBrush := CreateSolidBrush(ColorToRGB(Items[Column].Color)); FillRect(DC, Run, LocalBrush); DeleteObject(LocalBrush); end; Column := GetNextVisibleColumn(Column); end; end; end; //--------------------------------------------------------------------------- procedure DoScrollUp(DC: HDC; Brush: HBRUSH; Area: TRect; Steps: Integer); begin {$ifndef INCOMPLETE_WINAPI} ScrollDC(DC, 0, -Steps, Area, Area, 0, nil); {$endif} if Step = 0 then if not FHeader.UseColumns then FillRect(DC, Rect(Area.Left, Area.Bottom - Steps - 1, Area.Right, Area.Bottom), Brush) else begin Run := Rect(Area.Left, Area.Bottom - Steps - 1, Area.Right, Area.Bottom); EraseLine; end; end; //--------------------------------------------------------------------------- procedure DoScrollDown(DC: HDC; Brush: HBRUSH; Area: TRect; Steps: Integer); begin {$ifndef INCOMPLETE_WINAPI} ScrollDC(DC, 0, Steps, Area, Area, 0, nil); {$endif} if Step = 0 then if not FHeader.UseColumns then FillRect(DC, Rect(Area.Left, Area.Top, Area.Right, Area.Top + Steps + 1), Brush) else begin Run := Rect(Area.Left, Area.Top, Area.Right, Area.Top + Steps + 1); EraseLine; end; end; //--------------- end local functions --------------------------------------- begin Result := True; if StepSize > 0 then begin SecondaryStepSize := 0; with TToggleAnimationData(Data^) do begin if Mode1 <> tamNoScroll then begin if Mode1 = tamScrollUp then DoScrollUp(DC, Brush, R1, StepSize) else DoScrollDown(DC, Brush, R1, StepSize); if (Mode2 <> tamNoScroll) and (ScaleFactor > 0) then begin // As this routine is able to scroll two independent areas at once, the missing StepSize is // computed in that case. To ensure the maximal accuracy the rounding error is accumulated. SecondaryStepSize := Round((StepSize + MissedSteps) * ScaleFactor); MissedSteps := MissedSteps + StepSize * ScaleFactor - SecondaryStepSize; end; end else SecondaryStepSize := StepSize; if Mode2 <> tamNoScroll then if Mode2 = tamScrollUp then DoScrollUp(DC, Brush, R2, SecondaryStepSize) else DoScrollDown(DC, Brush, R2, SecondaryStepSize); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMColorChange(var Message: TLMessage); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'CMColorChange');{$endif} if not (csLoading in ComponentState) then begin PrepareBitmaps(True, False); if HandleAllocated then Invalidate; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'CMColorChange');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMBiDiModeChanged(var Message: TLMessage); begin inherited; if UseRightToLeftAlignment then FEffectiveOffsetX := Integer(FRangeX) - ClientWidth + FOffsetX else FEffectiveOffsetX := -FOffsetX; if FEffectiveOffsetX < 0 then FEffectiveOffsetX := 0; if toAutoBidiColumnOrdering in FOptions.FAutoOptions then FHeader.FColumns.ReorderColumns(UseRightToLeftAlignment); FHeader.Invalidate(nil); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX after CMBidiModeChanged',FEffectiveOffsetX);{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMDenySubclassing(var Message: TLMessage); // If a Windows XP Theme Manager component is used in the application it will try to subclass all controls which do not // explicitly deny this. Virtual Treeview knows how to handle XP themes so it does not need subclassing. begin Message.Result := 1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoDragMsg(ADragMessage: TDragMessage; APosition: TPoint; ADragObject: TDragObject; ATarget: TControl; ADocking: Boolean): LRESULT; var S: TObject; KeyState: LongWord; P: TPoint; Formats: TFormatArray; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoDragMsg');{$endif} S := ADragObject; Formats := nil; // Let the ancestor handle dock operations. if S is TDragDockObject then inherited else begin // We need an extra check for the control drag object as there might be other objects not derived from // this class (e.g. TActionDragObject). if not (tsUserDragObject in FStates) and (S is TDragControlObject) then S := (S as TDragControlObject).Control; case ADragMessage of dmDragEnter, dmDragLeave, dmDragMove: begin if ADragMessage = dmDragEnter then DoStateChange([tsVCLDragging]); if ADragMessage = dmDragLeave then DoStateChange([], [tsVCLDragging]); if ADragMessage = dmDragMove then with ScreenToClient(APosition) do DoAutoScroll(X, Y); KeyState := 0; // Alt key will be queried by the KeysToShiftState function in DragOver. if GetKeyState(VK_SHIFT) < 0 then KeyState := KeyState or MK_SHIFT; if GetKeyState(VK_CONTROL) < 0 then KeyState := KeyState or MK_CONTROL; // Allowed drop effects are simulated for VCL dd. FVCLDragEffect := DROPEFFECT_MOVE or DROPEFFECT_COPY; DragOver(S, KeyState, TDragState(ADragMessage), APosition, FVCLDragEffect); Result := LRESULT(FVCLDragEffect); FLastVCLDragTarget := FDropTargetNode; if (ADragMessage = dmDragLeave) and Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; dmDragDrop: begin KeyState := 0; // Alt key will be queried by the KeysToShiftState function in DragOver if GetKeyState(VK_SHIFT) < 0 then KeyState := KeyState or MK_SHIFT; if GetKeyState(VK_CONTROL) < 0 then KeyState := KeyState or MK_CONTROL; // allowed drop effects are simulated for VCL dd, // replace target node with cached node from other VCL dd messages if Assigned(FDropTargetNode) then InvalidateNode(FDropTargetNode); FDropTargetNode := FLastVCLDragTarget; P := ScreenToClient(APosition); DoDragDrop(S, nil, Formats, KeysToShiftState(KeyState), P, FVCLDragEffect, FLastDropMode); if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; dmFindTarget: begin Result := LRESULT(ControlAtPos(ScreenToClient(APosition), False)); if Result = 0 then Result := LRESULT(Self); // This is a reliable place to check whether VCL drag has // really begun. if tsVCLDragPending in FStates then DoStateChange([tsVCLDragging], [tsVCLDragPending, tsEditPending, tsClearPending]); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoDragMsg');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMFontChanged(var Message: TLMessage); var HeaderMessage: TLMessage; begin inherited; if not (csLoading in ComponentState) then PrepareBitmaps(True, False); HeaderMessage.Msg := CM_PARENTFONTCHANGED; HeaderMessage.WParam := 0; HeaderMessage.LParam := 0; HeaderMessage.Result := 0; FHeader.HandleMessage(HeaderMessage); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMHintShow(var Message: TCMHintShow); // Determines hint message (tooltip) and out-of-hint rect. // Note: A special handling is needed here because we cannot pass wide strings back to the caller. // I had to introduce the hint data record anyway so we can use this to pass the hint string. // We still need to set a dummy hint string in the message to make the VCL showing the hint window. var NodeRect: TRect; SpanColumn, Dummy, ColLeft, ColRight: Integer; HitInfo: THitInfo; ShowOwnHint: Boolean; IsFocusedOrEditing: Boolean; ParentForm: TCustomForm; BottomRightCellContentMargin: TPoint; LineBreakStyle: TVTTooltipLineBreakStyle; begin with Message do begin Result := 1; if PtInRect(FLastHintRect, HintInfo.CursorPos) then Exit; // Determine node for which to show hint/tooltip. with HintInfo^ do GetHitTestInfoAt(CursorPos.X, CursorPos.Y, True, HitInfo); // Make sure a hint is only shown if the tree or at least its parent form is active. // Active editing is ok too as long as we don't want the hint for the current edit node. if IsEditing then IsFocusedOrEditing := HitInfo.HitNode <> FFocusedNode else begin IsFocusedOrEditing := Focused; ParentForm := GetParentForm(Self); if Assigned(ParentForm) then IsFocusedOrEditing := ParentForm.Focused or Application.Active; end; if (GetCapture = 0) and ShowHint and not (Dragging or IsMouseSelecting) and ([tsScrolling] * FStates = []) and (FHeader.States = []) and IsFocusedOrEditing then begin with HintInfo^ do begin Result := 0; ShowOwnHint := False; // First check whether there is a header hint to show. if FHeader.UseColumns and (hoShowHint in FHeader.FOptions) and FHeader.InHeader(CursorPos) then begin CursorRect := FHeaderRect; // Convert the cursor rectangle into real client coordinates. OffsetRect(CursorRect, 0, -Integer(FHeader.FHeight)); HitInfo.HitColumn := FHeader.FColumns.GetColumnAndBounds(CursorPos, CursorRect.Left, CursorRect.Right); // align the vertical hint position on the bottom bound of the header, but // avoid overlapping of mouse cursor and hint HintPos.Y := Max(HintPos.Y, ClientToScreen(Point(0, CursorRect.Bottom)).Y); // Note: the test for the left mouse button in ControlState might cause problems whenever the VCL does not // realize when the button is released. This, for instance, happens when doing OLE drag'n drop and // cancel this with ESC. if (HitInfo.HitColumn > -1) and not (csLButtonDown in ControlState) then begin FHintData.DefaultHint := FHeader.FColumns[HitInfo.HitColumn].FHint; if FHintData.DefaultHint <> '' then ShowOwnHint := True else Result := 1; end else Result := 1; end else begin // Default mode is handled as would the tree be a usual VCL control (no own hint window necessary). if FHintMode = hmDefault then HintStr := GetShortHint(Hint) else begin if Assigned(HitInfo.HitNode) and (HitInfo.HitColumn > InvalidColumn) then begin // A draw tree should only display a hint when at least its OnGetHintSize // event handler is assigned. if Self is TCustomVirtualDrawTree then begin FHintData.HintRect := Rect(0, 0, 0, 0); with Self as TCustomVirtualDrawTree do DoGetHintSize(HitInfo.HitNode, HitInfo.HitColumn, FHintData.HintRect); ShowOwnHint := not IsRectEmpty(FHintData.HintRect); end else // For string trees a decision about showing the hint or not is based // on the hint string (if it is empty then no hint is shown). ShowOwnHint := True; if ShowOwnHint then begin if HitInfo.HitColumn > NoColumn then begin FHeader.FColumns.GetColumnBounds(HitInfo.HitColumn, ColLeft, ColRight); // The right column border might be extended if column spanning is enabled. if toAutoSpanColumns in FOptions.FAutoOptions then begin SpanColumn := HitInfo.HitColumn; repeat Dummy := FHeader.FColumns.GetNextVisibleColumn(SpanColumn); if (Dummy = InvalidColumn) or not ColumnIsEmpty(HitInfo.HitNode, Dummy) then Break; SpanColumn := Dummy; until False; if SpanColumn <> HitInfo.HitColumn then FHeader.FColumns.GetColumnBounds(SpanColumn, Dummy, ColRight); end; end else begin ColLeft := 0; ColRight := ClientWidth; end; FHintData.DefaultHint := ''; if FHintMode <> hmTooltip then begin // Node specific hint text. CursorRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, False); CursorRect.Left := ColLeft; CursorRect.Right := ColRight; // Align the vertical hint position on the bottom bound of the node, but // avoid overlapping of mouse cursor and hint. HintPos.Y := Max(HintPos.Y, ClientToScreen(CursorRect.BottomRight).Y) + 2; end else begin // Tool tip to show. This means the full caption of the node must be displayed. if vsMultiline in HitInfo.HitNode.States then begin if hiOnItemLabel in HitInfo.HitPositions then begin ShowOwnHint := True; NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, False); end; end else begin NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, True, True); BottomRightCellContentMargin := DoGetCellContentMargin(HitInfo.HitNode, HitInfo.HitColumn, ccmtBottomRightOnly); ShowOwnHint := (HitInfo.HitColumn > InvalidColumn) and PtInRect(NodeRect, CursorPos) and (CursorPos.X <= ColRight) and (CursorPos.X >= ColLeft) and ( // Show hint also if the node text is partially out of the client area. // "ColRight - 1", since the right column border is not part of this cell. ( (NodeRect.Right + BottomRightCellContentMargin.X) > Min(ColRight - 1, ClientWidth) ) or (NodeRect.Left < Max(ColLeft, 0)) or ( (NodeRect.Bottom + BottomRightCellContentMargin.Y) > ClientHeight ) or (NodeRect.Top < 0) ); end; if ShowOwnHint then begin // Node specific hint text given will be retrieved when needed. FHintData.DefaultHint := ''; HintPos := ClientToScreen(Point(NodeRect.Left, NodeRect.Top)); CursorRect := NodeRect; end else // nothing to show Result := 1; end; end else Result := 1; // Avoid hint if this is a draw tree returning an empty hint rectangle. end else begin // No node so fall back to control's hint (if indicated) or show nothing. if FHintMode = hmHintAndDefault then HintStr := GetShortHint(Hint) else Result := 1; end; end; end; {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'ShowOwnHint: %s Result: %d', [BoolToStr(ShowOwnHint, True), Result]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'CursorRect', CursorRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'CursorPos', CursorPos);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcHint], 'HintMaxWidth', HintMaxWidth);{$endif} // If hint must be show and is not the control's hint then get the hint // from the node or from the DefaultHint if ShowOwnHint and (Result = 0) then begin LineBreakStyle := hlbDefault; FLastHintRect := CursorRect; if Length(FHintData.DefaultHint) > 0 then HintStr := FHintData.DefaultHint else if FHintMode = hmToolTip then HintStr := DoGetNodeToolTip(HitInfo.HitNode, HitInfo.HitColumn, LineBreakStyle) else HintStr := DoGetNodeHint(HitInfo.HitNode, HitInfo.HitColumn, LineBreakStyle); // Determine actual line break style depending on what was returned by the methods and what's in the node. if (LineBreakStyle = hlbDefault) and Assigned(HitInfo.HitNode) and (vsMultiline in HitInfo.HitNode.States) then LineBreakStyle := hlbForceMultiLine; if LineBreakStyle = hlbForceMultiLine then begin // NodeRect is already calculated for ToolTip if FHintMode <> hmTooltip then NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, False); HintMaxWidth := NodeRect.Right - NodeRect.Left; end; HintWindowClass := GetHintWindowClass; FHintData.Tree := Self; FHintData.Column := HitInfo.HitColumn; FHintData.Node := HitInfo.HitNode; FHintData.HintInfo := HintInfo; HintData := @FHintData; end else FLastHintRect := Rect(0, 0, 0, 0); end; // Remind that a hint is about to show. if Result = 0 then DoStateChange([tsHint]) else DoStateChange([], [tsHint]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMMouseLeave(var Message: TLMessage); var LeaveStates: TVirtualTreeStates; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'CMMouseLeave');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcMessages],'FCurrentHotNode',hexStr(FCurrentHotNode));{$endif} // Reset the last used hint rectangle in case the mouse enters the window within the bounds if Assigned(FHintData.Tree) then FHintData.Tree.FLastHintRect := Rect(0, 0, 0, 0); LeaveStates := [tsHint]; if [tsWheelPanning, tsWheelScrolling] * FStates = [] then begin if HandleAllocated then KillTimer(Handle, ScrollTimer); LeaveStates := LeaveStates + [tsScrollPending, tsScrolling]; end; DoStateChange([], LeaveStates); if Assigned(FCurrentHotNode) then begin DoHotChange(FCurrentHotNode, nil); if (toHotTrack in FOptions.PaintOptions) or (toCheckSupport in FOptions.FMiscOptions) then InvalidateNode(FCurrentHotNode); FCurrentHotNode := nil; end; Header.FColumns.FDownIndex := NoColumn; Header.FColumns.FHoverIndex := NoColumn; inherited CMMouseLeave(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'CMMouseLeave');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CMMouseWheel(var Message: TLMMouseEvent); var ScrollAmount: Integer; ScrollLines: DWORD; RTLFactor: Integer; WheelFactor: Double; begin //todo: rename to WM* {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'CMMouseWheel');{$endif} StopWheelPanning; inherited WMMouseWheel(Message); if Message.Result = 0 then begin with Message do begin Result := 1; WheelFactor := WheelDelta / WHEEL_DELTA; if (FRangeY > Cardinal(ClientHeight)) and (not (ssShift in State)) then begin {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'Scroll Vertical - WheelDelta', WheelDelta);{$endif} // Scroll vertically if there's something to scroll... if ssCtrlOS in State then ScrollAmount := Trunc(WheelFactor * ClientHeight) else begin SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0); if ScrollLines = WHEEL_PAGESCROLL then ScrollAmount := Integer(Trunc(WheelFactor * ClientHeight)) else ScrollAmount := Integer(Trunc(WheelFactor * ScrollLines * FDefaultNodeHeight)); end; SetOffsetY(FOffsetY + ScrollAmount); end else begin // ...else scroll horizontally if there's something to scroll. if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; if ssCtrlOS in State then ScrollAmount := Trunc(WheelFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)) else begin SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, @ScrollLines, 0); ScrollAmount := Trunc(WheelFactor * ScrollLines * FHeader.Columns.GetScrollWidth); end; SetOffsetX(FOffsetX + RTLFactor * ScrollAmount); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'CMMouseWheel');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNativeTVM} procedure TBaseVirtualTree.TVMGetItem(var Message: TLMessage); // Screen reader support function. The method returns information about a particular node. const StateMask = TVIS_STATEIMAGEMASK or TVIS_OVERLAYMASK or TVIS_EXPANDED or TVIS_DROPHILITED or TVIS_CUT or TVIS_SELECTED or TVIS_FOCUSED; var Item: PTVItemEx; Node: PVirtualNode; Ghosted: Boolean; ImageIndex: Integer; R: TRect; Text: String; {$ifndef UNICODE} ANSIText: ANSIString; {$endif} begin // We can only return valid data if a nodes reference is given. Item := Pointer(Message.LParam); Message.Result := Ord(((Item.mask and TVIF_HANDLE) <> 0) and Assigned(Item.hItem)); if Message.Result = 1 then begin Node := Pointer(Item.hItem); // Child count requested? if (Item.mask and TVIF_CHILDREN) <> 0 then Item.cChildren := Node.ChildCount; // Index for normal image requested? if (Item.mask and TVIF_IMAGE) <> 0 then begin Item.iImage := -1; DoGetImageIndex(Node, ikNormal, -1, Ghosted, Item.iImage); end; // Index for selected image requested? if (Item.mask and TVIF_SELECTEDIMAGE) <> 0 then begin Item.iSelectedImage := -1; DoGetImageIndex(Node, ikSelected, -1, Ghosted, Item.iSelectedImage); end; // State info requested? if (Item.mask and TVIF_STATE) <> 0 then begin // Everything, which is possible is returned. Item.stateMask := StateMask; Item.state := 0; if Node = FFocusedNode then Item.state := Item.state or TVIS_FOCUSED; if vsSelected in Node.States then Item.state := Item.state or TVIS_SELECTED; if vsCutOrCopy in Node.States then Item.state := Item.state or TVIS_CUT; if Node = FDropTargetNode then Item.state := Item.state or TVIS_DROPHILITED; if vsExpanded in Node.States then Item.state := Item.state or TVIS_EXPANDED; // Construct state image and overlay image indices. They are one based, btw. // and zero means there is no image. ImageIndex := -1; DoGetImageIndex(Node, ikState, -1, Ghosted, ImageIndex); Item.state := Item.state or Byte(IndexToStateImageMask(ImageIndex + 1)); ImageIndex := -1; DoGetImageIndex(Node, ikOverlay, -1, Ghosted, ImageIndex); Item.state := Item.state or Byte(IndexToOverlayMask(ImageIndex + 1)); end; // Node caption requested? if (Item.mask and TVIF_TEXT) <> 0 then begin GetTextInfo(Node, -1, Font, R, Text); {$ifdef UNICODE} StrLCopy(Item.pszText, PChar(Text), Item.cchTextMax - 1); Item.pszText[Length(Text)] := #0; {$else} // Convert the Unicode implicitely to ANSI using the current locale. ANSIText := Text; StrLCopy(Item.pszText, PChar(ANSIText), Item.cchTextMax - 1); Item.pszText[Length(ANSIText)] := #0; {$endif} end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TVMGetItemRect(var Message: TLMessage); // Screen read support function. This method returns a node's display rectangle. var TextOnly: Boolean; Node: PVirtualNode; begin // The lparam member is used two-way. On enter it contains a pointer to the item (node). // On exit it is to be considered as pointer to a rectangle structure. Node := Pointer(Pointer(Message.LParam)^); Message.Result := Ord(IsVisible[Node]); if Message.Result <> 0 then begin TextOnly := Message.WParam <> 0; PRect(Message.LParam)^ := GetDisplayRect(Node, -1, TextOnly); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.TVMGetNextItem(var Message: TLMessage); // Screen read support function. This method returns a node depending on the requested case. var Node: PVirtualNode; begin // Start with a nil result. Message.Result := 0; Node := Pointer(Message.LParam); case Message.WParam of TVGN_CARET: Message.Result := Integer(FFocusedNode); TVGN_CHILD: if Assigned(Node) then Message.Result := Integer(GetFirstChild(Node)); TVGN_DROPHILITE: Message.Result := Integer(FDropTargetNode); TVGN_FIRSTVISIBLE: Message.Result := Integer(GetFirstVisible(nil, True)); TVGN_LASTVISIBLE: Message.Result := Integer(GetLastVisible(nil, True)); TVGN_NEXT: if Assigned(Node) then Message.Result := Integer(GetNextSibling(Node)); TVGN_NEXTVISIBLE: if Assigned(Node) then Message.Result := Integer(GetNextVisible(Node, True)); TVGN_PARENT: if Assigned(Node) and (Node <> FRoot) and (Node.Parent <> FRoot) then Message.Result := Integer(Node.Parent); TVGN_PREVIOUS: if Assigned(Node) then Message.Result := Integer(GetPreviousSibling(Node)); TVGN_PREVIOUSVISIBLE: if Assigned(Node) then Message.Result := Integer(GetPreviousVisible(Node, True)); TVGN_ROOT: Message.Result := Integer(GetFirst); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCancelMode(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCancelMode');{$endif} // Clear any transient state. KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsClearPending, tsEditPending, tsOLEDragPending, tsVCLDragPending, tsDrawSelecting, tsDrawSelPending, tsIncrementalSearching]); //lcl does not has a inherited procedure //inherited WMCancelMode(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCancelMode');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMChangeState(var Message: TLMessage); var EnterStates, LeaveStates: TVirtualTreeStates; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMChangeState');{$endif} EnterStates := []; if csStopValidation in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsStopValidation); if csUseCache in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsUseCache); if csValidating in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsValidating); if csValidationNeeded in TChangeStates(Byte(Message.WParam)) then Include(EnterStates, tsValidationNeeded); LeaveStates := []; if csStopValidation in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsStopValidation); if csUseCache in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsUseCache); if csValidating in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsValidating); if csValidationNeeded in TChangeStates(Byte(Message.LParam)) then Include(LeaveStates, tsValidationNeeded); DoStateChange(EnterStates, LeaveStates); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMChangeState');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMChar(var Message: TLMChar); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMChar');{$endif} if tsIncrementalSearchPending in FStates then begin HandleIncrementalSearch(Message.CharCode); DoStateChange([], [tsIncrementalSearchPending]); end; inherited WMChar(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMChar');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMContextMenu(var Message: TLMContextMenu); // This method is called when a popup menu is about to be displayed. // We have to cancel some pending states here to avoid interferences. //lcl: handle mouse up here because MouseUp is not called when popup is show var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMContextMenu');{$endif} DoStateChange([], [tsClearPending, tsEditPending, tsOLEDragPending, tsVCLDragPending]); {$ifdef ContextMenuBeforeMouseUp} if Assigned(PopupMenu) then begin if FHeader.FStates = [] then begin Application.CancelHint; if IsMouseSelecting then begin // Reset selection state already here, before the inherited handler opens the default menu. DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end; inherited WMContextMenu(Message); if (toRightClickSelect in FOptions.FSelectionOptions) then begin // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(0, HitInfo); end; end; end else inherited WMContextMenu(Message); {$else} if not (tsPopupMenuShown in FStates) then inherited WMContextMenu(Message); {$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMContextMenu');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCopy(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCopy');{$endif} CopyToClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCopy');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMCut(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMCut');{$endif} CutToClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMCut');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMEnable(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMEnable');{$endif} //LCL does not has inherited WMEnable //inherited WMEnable(Message); RedrawWindow(Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN); {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMEnable');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMEraseBkgnd(var Message: TLMEraseBkgnd); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcEraseBkgnd],'WMEraseBkgnd');{$endif} Message.Result := 1; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcEraseBkgnd],'WMEraseBkgnd');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMGetDlgCode(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.Send([lcMessages],'WMGetDlgCode');{$endif} Message.Result := DLGC_WANTCHARS or DLGC_WANTARROWS; if FWantTabs then Message.Result := Message.Result or DLGC_WANTTAB; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableAccessible} procedure TBaseVirtualTree.WMGetObject(var Message: TLMessage); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMGetObject');{$endif} if GetAccessibilityFactory <> nil then begin // Create the IAccessibles for the tree view and tree view items, if necessary. if FAccessible = nil then FAccessible := GetAccessibilityFactory.CreateIAccessible(Self); if FAccessibleItem = nil then FAccessibleItem := GetAccessibilityFactory.CreateIAccessible(Self); if Cardinal(Message.LParam) = OBJID_CLIENT then if Assigned(Accessible) then Message.Result := LresultFromObject(IID_IAccessible, Message.WParam, FAccessible) else Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMGetObject');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMHScroll(var Message: TLMHScroll); //--------------- local functions ------------------------------------------- function GetRealScrollPosition: Integer; var SI: TScrollInfo; Code: Integer; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_TRACKPOS; Code := SB_HORZ; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, Code, SI); {$else} GetScrollInfo(Handle, Code, SI); {$endif UseFlatScrollbars} Result := SI.nTrackPos; end; //--------------- end local functions --------------------------------------- var RTLFactor: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMHScroll');{$endif} if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; case Message.ScrollCode of SB_BOTTOM: SetOffsetX(-Integer(FRangeX)); SB_ENDSCROLL: begin DoStateChange([], [tsThumbTracking]); // avoiding to adjust the vertical scroll position while tracking makes it much smoother // but we need to adjust the final position here then UpdateHorizontalScrollBar(False); end; SB_LINELEFT: SetOffsetX(FOffsetX + RTLFactor * FScrollBarOptions.FIncrementX); SB_LINERIGHT: SetOffsetX(FOffsetX - RTLFactor * FScrollBarOptions.FIncrementX); SB_PAGELEFT: SetOffsetX(FOffsetX + RTLFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)); SB_PAGERIGHT: SetOffsetX(FOffsetX - RTLFactor * (ClientWidth - FHeader.Columns.GetVisibleFixedWidth)); SB_THUMBPOSITION, SB_THUMBTRACK: begin DoStateChange([tsThumbTracking]); {$if DEFINED(LCLQt) OR DEFINED(LCLCarbon)} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + Message.Pos) else SetOffsetX(-Message.Pos); {$else} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + GetRealScrollPosition) else SetOffsetX(-GetRealScrollPosition); {$endif} end; SB_TOP: SetOffsetX(0); end; Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMHScroll');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKeyDown(var Message: TLMKeyDown); // Keyboard event handling for node focus, selection, node specific popup menus and help invokation. // For a detailed description of every action done here read the help. var Shift: TShiftState; Node, Temp, LastFocused: PVirtualNode; Offset: Integer; ClearPending, NeedInvalidate, DoRangeSelect, HandleMultiSelect: Boolean; Context: Integer; ParentControl: TWinControl; R: TRect; NewCheckState: TCheckState; TempColumn, NewColumn: TColumnIndex; ActAsGrid: Boolean; ForceSelection: Boolean; NewWidth, NewHeight: Integer; RTLFactor: Integer; // for tabulator handling GetStartColumn: function(ConsiderAllowFocus: Boolean = False): TColumnIndex of object; GetNextColumn: function(Column: TColumnIndex; ConsiderAllowFocus: Boolean = False): TColumnIndex of object; GetNextNode: TGetNextNodeProc; KeyState: TKeyboardState; Buffer: array[0..1] of Char; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKeyDown');{$endif} // Make form key preview work and let application modify the key if it wants this. inherited WMKeyDown(Message); with Message do begin Shift := KeyDataToShiftState(KeyData); // Ask the application if the default key handling is desired. if DoKeyAction(CharCode, Shift) then begin if (tsKeyCheckPending in FStates) and (CharCode <> VK_SPACE) then begin DoStateChange([], [tskeyCheckPending]); FCheckNode.CheckState := UnpressedState[FCheckNode.CheckState]; RepaintNode(FCheckNode); FCheckNode := nil; end; if CharCode in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT, VK_BACK, VK_TAB] then begin HandleMultiSelect := (ssShift in Shift) and (toMultiSelect in FOptions.FSelectionOptions) and not IsEditing; // Flag to avoid range selection in case of single node advance. DoRangeSelect := (CharCode in [VK_HOME, VK_END, VK_PRIOR, VK_NEXT]) and HandleMultiSelect and not IsEditing; NeedInvalidate := DoRangeSelect or (FSelectionCount > 1); ActAsGrid := toGridExtensions in FOptions.FMiscOptions; ClearPending := (Shift = []) or (ActAsGrid and not (ssShift in Shift)) or not (toMultiSelect in FOptions.FSelectionOptions) or (CharCode in [VK_TAB, VK_BACK]); // Keep old focused node for range selection. Use a default node if none was focused until now. LastFocused := FFocusedNode; if (LastFocused = nil) and (Shift <> []) then LastFocused := GetFirstVisible(nil, True); // Set an initial range anchor if there is not yet one. if FRangeAnchor = nil then FRangeAnchor := GetFirstSelected; if FRangeAnchor = nil then FRangeAnchor := GetFirst; if UseRightToLeftAlignment then RTLFactor := -1 else RTLFactor := 1; // Determine new focused node. case CharCode of VK_HOME, VK_END: begin if (CharCode = VK_END) xor UseRightToLeftAlignment then begin GetStartColumn := FHeader.FColumns.GetLastVisibleColumn; GetNextColumn := FHeader.FColumns.GetPreviousVisibleColumn; GetNextNode := GetPreviousVisible; Node := GetLastVisible(nil, True); end else begin GetStartColumn := FHeader.FColumns.GetFirstVisibleColumn; GetNextColumn := FHeader.FColumns.GetNextVisibleColumn; GetNextNode := GetNextVisible; Node := GetFirstVisible(nil, True); end; // Advance to next/previous visible column. if FHeader.UseColumns then NewColumn := GetStartColumn else NewColumn := NoColumn; // Find a column for the new/current node which can be focused. // Make the 'DoFocusChanging' for finding a valid column // identifiable from the 'DoFocusChanging' raised later on by // "FocusedNode := Node;" while (NewColumn > NoColumn) and not DoFocusChanging(FFocusedNode, FFocusedNode, FFocusedColumn, NewColumn) do NewColumn := GetNextColumn(NewColumn); if NewColumn > InvalidColumn then begin if (Shift = [ssCtrlOS]) and not ActAsGrid then begin ScrollIntoView(Node, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); if (CharCode = VK_HOME) and not UseRightToLeftAlignment then SetOffsetX(0) else SetOffsetX(-MaxInt); end else begin if not ActAsGrid or (ssCtrlOS in Shift) then FocusedNode := Node; if ActAsGrid and not (toFullRowSelect in FOptions.FSelectionOptions) then FocusedColumn := NewColumn; end; end; end; VK_PRIOR: if ssCtrlOS in Shift then SetOffsetY(FOffsetY + ClientHeight) else begin Offset := 0; // If there's no focused node then just take the very first visible one. if FFocusedNode = nil then Node := GetFirstVisible(nil, True) else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FFocusedNode; while True do begin Temp := GetPreviousVisible(Node, True); NewHeight := NodeHeight[Node]; if (Temp = nil) or (Offset + NewHeight >= ClientHeight) then Break; Node := Temp; Inc(Offset, NodeHeight[Node]); end; end; FocusedNode := Node; end; VK_NEXT: if ssCtrlOS in Shift then SetOffsetY(FOffsetY - ClientHeight) else begin Offset := 0; // If there's no focused node then just take the very last one. if FFocusedNode = nil then Node := GetLastVisible(nil, True) else begin // Go up as many nodes as comprise together a size of ClientHeight. Node := FFocusedNode; while True do begin Temp := GetNextVisible(Node, True); NewHeight := NodeHeight[Node]; if (Temp = nil) or (Offset + NewHeight >= ClientHeight) then Break; Node := Temp; Inc(Offset, NewHeight); end; end; FocusedNode := Node; end; VK_UP: begin // scrolling without selection change if ssCtrlOS in Shift then SetOffsetY(FOffsetY + Integer(FDefaultNodeHeight)) else begin if FFocusedNode = nil then Node := GetLastVisible(nil, True) else Node := GetPreviousVisible(FFocusedNode, True); if Assigned(Node) then begin EndEditNode; if HandleMultiSelect and (CompareNodePositions(LastFocused, FRangeAnchor) > 0) and Assigned(FFocusedNode) then RemoveFromSelection(FFocusedNode); if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; FocusedNode := Node; end else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); end; end; VK_DOWN: begin // scrolling without selection change if ssCtrlOS in Shift then SetOffsetY(FOffsetY - Integer(FDefaultNodeHeight)) else begin if FFocusedNode = nil then Node := GetFirstVisible(nil, True) else Node := GetNextVisible(FFocusedNode, True); if Assigned(Node) then begin EndEditNode; if HandleMultiSelect and (CompareNodePositions(LastFocused, FRangeAnchor) < 0) and Assigned(FFocusedNode) then RemoveFromSelection(FFocusedNode); if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; FocusedNode := Node; end else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); end; end; VK_LEFT: begin // special handling if ssCtrlOS in Shift then SetOffsetX(FOffsetX + RTLFactor * FHeader.Columns.GetScrollWidth) else begin // other special cases Context := NoColumn; if (toExtendedFocus in FOptions.FSelectionOptions) and (toGridExtensions in FOptions.FMiscOptions) then begin Context := FHeader.Columns.GetPreviousVisibleColumn(FFocusedColumn, True); if Context > -1 then FocusedColumn := Context end else if Assigned(FFocusedNode) and (vsExpanded in FFocusedNode.States) and (Shift = []) and (vsHasChildren in FFocusedNode.States) then ToggleNode(FFocusedNode) else begin if FFocusedNode = nil then FocusedNode := GetFirstVisible(nil, True) else begin if FFocusedNode.Parent <> FRoot then Node := FFocusedNode.Parent else Node := nil; if Assigned(Node) then begin if HandleMultiSelect then begin // and a third special case if FFocusedNode.Index > 0 then DoRangeSelect := True else if CompareNodePositions(Node, FRangeAnchor) > 0 then RemoveFromSelection(FFocusedNode); end; FocusedNode := Node; end; end; end; end; end; VK_RIGHT: begin // special handling if ssCtrlOS in Shift then SetOffsetX(FOffsetX - RTLFactor * FHeader.Columns.GetScrollWidth) else begin // other special cases Context := NoColumn; if (toExtendedFocus in FOptions.FSelectionOptions) and (toGridExtensions in FOptions.FMiscOptions) then begin Context := FHeader.Columns.GetNextVisibleColumn(FFocusedColumn, True); if Context > -1 then FocusedColumn := Context; end else if Assigned(FFocusedNode) and not (vsExpanded in FFocusedNode.States) and (Shift = []) and (vsHasChildren in FFocusedNode.States) then ToggleNode(FFocusedNode) else begin if FFocusedNode = nil then FocusedNode := GetFirstVisible(nil, True) else begin Node := GetFirstVisibleChild(FFocusedNode); if Assigned(Node) then begin if HandleMultiSelect and (CompareNodePositions(Node, FRangeAnchor) < 0) then RemoveFromSelection(FFocusedNode); FocusedNode := Node; end; end; end; end; end; VK_BACK: if tsIncrementalSearching in FStates then DoStateChange([tsIncrementalSearchPending]) else if Assigned(FFocusedNode) and (FFocusedNode.Parent <> FRoot) then FocusedNode := FocusedNode.Parent; VK_TAB: if (toExtendedFocus in FOptions.FSelectionOptions) and FHeader.UseColumns then begin // In order to avoid duplicating source code just to change the direction // we use function variables. if ssShift in Shift then begin GetStartColumn := FHeader.FColumns.GetLastVisibleColumn; GetNextColumn := FHeader.FColumns.GetPreviousVisibleColumn; GetNextNode := GetPreviousVisible; end else begin GetStartColumn := FHeader.FColumns.GetFirstVisibleColumn; GetNextColumn := FHeader.FColumns.GetNextVisibleColumn; GetNextNode := GetNextVisible; end; // Advance to next/previous visible column/node. Node := FFocusedNode; NewColumn := GetNextColumn(FFocusedColumn, True); repeat // Find a column for the current node which can be focused. while (NewColumn > NoColumn) and not DoFocusChanging(FFocusedNode, Node, FFocusedColumn, NewColumn) do NewColumn := GetNextColumn(NewColumn, True); if NewColumn > NoColumn then begin // Set new node and column in one go. SetFocusedNodeAndColumn(Node, NewColumn); Break; end; // No next column was accepted for the current node. So advance to next node and try again. Node := GetNextNode(Node); NewColumn := GetStartColumn; until Node = nil; end; end; // Clear old selection if required but take care to select the new focused node if it was not selected before. ForceSelection := False; if ClearPending and ((LastFocused <> FFocusedNode) or (FSelectionCount <> 1)) then begin ClearSelection; ForceSelection := True; end; // Determine new selection anchor. if Shift = [] then begin FRangeAnchor := FFocusedNode; FLastSelectionLevel := GetNodeLevel(FFocusedNode); end; // Finally change the selection for a specific range of nodes. if DoRangeSelect then ToggleSelection(LastFocused, FFocusedNode); // Make sure the new focused node is also selected. if Assigned(FFocusedNode) and ((LastFocused <> FFocusedNode) or ForceSelection) then AddToSelection(FFocusedNode); // If a repaint is needed then paint the entire tree because of the ClearSelection call, if NeedInvalidate then Invalidate; {$ifdef LCLGtk2} //workaround for changing focus bug if CharCode <> VK_TAB then CharCode := 0; {$endif} end else begin // Second chance for keys not directly concerned with selection changes. // For +, -, /, * keys on the main keyboard (not numpad) there is no virtual key code defined. // We have to do special processing to get them working too. //todo: reimplement {$ifndef INCOMPLETE_WINAPI} GetKeyboardState(KeyState); // Avoid conversion to control characters. We have captured the control key state already in Shift. KeyState[VK_CONTROL] := 0; if ToASCII(Message.CharCode, (Message.KeyData shr 16) and 7, KeyState, @Buffer, 0) > 0 then begin case Buffer[0] of '*': CharCode := VK_MULTIPLY; '+': CharCode := VK_ADD; '/': CharCode := VK_DIVIDE; '-': CharCode := VK_SUBTRACT; end; end; // According to http://www.it-faq.pl/mskb/99/337.HTM there is a problem with ToASCII when used in conjunction // with dead chars. The article recommends to call ToASCII twice to restore a deleted flag in the key message // structure under certain circumstances. It turned out it is best to always call ToASCII twice. ToASCII(Message.CharCode, (Message.KeyData shr 16) and 7, KeyState, @Buffer, 0); {$endif} case CharCode of VK_F2: if (Shift = []) and Assigned(FFocusedNode) and CanEdit(FFocusedNode, FFocusedColumn) then begin FEditColumn := FFocusedColumn; DoEdit; end; VK_ADD: if not (tsIncrementalSearching in FStates) then begin if ssCtrlOS in Shift then if {$ifdef ReverseFullExpandHotKey} not {$endif ReverseFullExpandHotKey} (ssShift in Shift) then FullExpand else FHeader.AutoFitColumns else if Assigned(FFocusedNode) and not (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_SUBTRACT: if not (tsIncrementalSearching in FStates) then begin if ssCtrlOS in Shift then if {$ifdef ReverseFullExpandHotKey} not {$endif ReverseFullExpandHotKey} (ssShift in Shift) then FullCollapse else FHeader.RestoreColumns else if Assigned(FFocusedNode) and (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_MULTIPLY: if not (tsIncrementalSearching in FStates) then begin if Assigned(FFocusedNode) then FullExpand(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_DIVIDE: if not (tsIncrementalSearching in FStates) then begin if Assigned(FFocusedNode) then FullCollapse(FFocusedNode); end else DoStateChange([tsIncrementalSearchPending]); VK_ESCAPE: // cancel actions currently in progress begin if IsMouseSelecting then begin DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end //gtk1 does not like to free a component in KeyDown {$ifndef LCLGtk} else if IsEditing then CancelEditNode; {$endif} end; VK_SPACE: if (toCheckSupport in FOptions.FMiscOptions) and Assigned(FFocusedNode) and (FFocusedNode.CheckType <> ctNone) then begin if (FStates * [tsKeyCheckPending, tsMouseCheckPending] = []) and Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) then begin with FFocusedNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(FFocusedNode, NewCheckState) then begin DoStateChange([tsKeyCheckPending]); FCheckNode := FFocusedNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; RepaintNode(FCheckNode); end; end; end else DoStateChange([tsIncrementalSearchPending]); VK_F1: if Assigned(FOnGetHelpContext) then begin Context := 0; if Assigned(FFocusedNode) then begin Node := FFocusedNode; // Traverse the tree structure up to the root. repeat FOnGetHelpContext(Self, Node, 0, Context); Node := Node.Parent; until (Node = FRoot) or (Context <> 0); end; // If no help context could be found try the tree's one or its parent's contexts. ParentControl := Self; while Assigned(ParentControl) and (Context = 0) do begin Context := ParentControl.HelpContext; ParentControl := ParentControl.Parent; end; if Context <> 0 then Application.HelpContext(Context); end; VK_APPS: if Assigned(FFocusedNode) then begin R := GetDisplayRect(FFocusedNode, FFocusedColumn, True); Offset := DoGetNodeWidth(FFocusedNode, FFocusedColumn); if FFocusedColumn >= 0 then begin if Offset > FHeader.Columns[FFocusedColumn].Width then Offset := FHeader.Columns[FFocusedColumn].Width; end else begin if Offset > ClientWidth then Offset := ClientWidth; end; DoPopupMenu(FFocusedNode, FFocusedColumn, Point(R.Left + Offset div 2, (R.Top + R.Bottom) div 2)); end; Ord('a'), Ord('A'): if ssCtrlOS in Shift then SelectAll(True) else DoStateChange([tsIncrementalSearchPending]); else begin // Use the key for incremental search. // Since we are dealing with Unicode all the time there should be a more sophisticated way // of checking for valid characters for incremental search. // This is available but would require to include a significant amount of Unicode character // properties, so we stick with the simple space check. if (Shift * [ssCtrlOS, ssAlt] = []) and (CharCode >= 32) then DoStateChange([tsIncrementalSearchPending]); end; end; end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKeyDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKeyUp(var Message: TLMKeyUp); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKeyUp');{$endif} inherited WMKeyUp(Message); case Message.CharCode of VK_SPACE: if tsKeyCheckPending in FStates then begin DoStateChange([], [tskeyCheckPending]); if FCheckNode = FFocusedNode then DoCheckClick(FCheckNode, FPendingCheckState); InvalidateNode(FCheckNode); FCheckNode := nil; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKeyUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMKillFocus(var Msg: TLMKillFocus); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMKillFocus');{$endif} inherited WMKillFocus(Msg); // Remove hint if shown currently. Application.CancelHint; // Stop wheel panning if active. StopWheelPanning; // Don't let any timer continue if the tree is no longer the active control (except change timers). KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsScrollPending, tsScrolling, tsEditPending, tsLeftButtonDown, tsRightButtonDown, tsMiddleButtonDown, tsOLEDragPending, tsVCLDragPending, tsIncrementalSearching, tsNodeHeightTrackPending, tsNodeHeightTracking]); if (FSelectionCount > 0) or not (toGhostedIfUnfocused in FOptions.FPaintOptions) then Invalidate else if Assigned(FFocusedNode) then InvalidateNode(FFocusedNode); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMKillFocus');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonDblClk(var Message: TLMLButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMLButtonDblClk');{$endif} DoStateChange([tsLeftDblClick]); inherited WMLButtonDblClk(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); DoStateChange([], [tsLeftDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonDown(var Message: TLMLButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMLButtonDown');{$endif} DoStateChange([tsLeftButtonDown]); inherited WMLButtonDown(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); {$ifdef DEBUG_VTV} if HitInfo.HitNode <> nil then Logger.Send([lcPaintHeader, lcMouseEvent],'WMLButtonDown - HitNode.Index', HitInfo.HitNode^.Index); {$endif} HandleMouseDown(Message, HitInfo); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMLButtonUp(var Message: TLMLButtonUp); var HitInfo: THitInfo; begin DoStateChange([], [tsLeftButtonDown, tsNodeHeightTracking, tsNodeHeightTrackPending]); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(Message.Keys, HitInfo); inherited WMLButtonUp(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMLButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonDblClk(var Message: TLMMButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonDblClk');{$endif} DoStateChange([tsMiddleDblClick]); inherited WMMButtonDblClk(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); end; DoStateChange([], [tsMiddleDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMMButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonDown(var Message: TLMMButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonDown');{$endif} DoStateChange([tsMiddleButtonDown]); if FHeader.FStates = [] then begin inherited WMMButtonDown(Message); // Start wheel panning or scrolling if not already active, allowed and scrolling is useful at all. if (toWheelPanning in FOptions.FMiscOptions) and ([tsWheelScrolling, tsWheelPanning] * FStates = []) and ((Integer(FRangeX) > ClientWidth) or (Integer(FRangeY) > ClientHeight)) then begin FLastClickPos := SmallPointToPoint(Message.Pos); StartWheelPanning(FLastClickPos); end else begin StopWheelPanning; // Get information about the hit. if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDown(Message, HitInfo); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMMButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMMButtonUp(var Message: TLMMButtonUp); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMMButtonUp');{$endif} DoStateChange([], [tsMiddleButtonDown]); // If wheel panning/scrolling is active and the mouse has not yet been moved then the user starts wheel auto scrolling. // Indicate this by removing the panning flag. Otherwise (the mouse has moved meanwhile) stop panning. if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin if tsWheelScrolling in FStates then DoStateChange([], [tsWheelPanning]) else StopWheelPanning; end else if FHeader.FStates = [] then begin inherited WMMButtonUp(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseUp(Message.Keys, HitInfo); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod('WMMButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNCFunctions} procedure TBaseVirtualTree.WMNCCalcSize(var Message: TLMNCCalcSize); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCCalcSize');{$endif} inherited WMNCCalcSize(Message); with FHeader do if hoVisible in FHeader.FOptions then with Message.CalcSize_Params^ do Inc(rgrc[0].Top, FHeight); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCCalcSize');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMNCHitTest(var Message: TWMNCHitTest); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCHitTest');{$endif} inherited WMNCHitTest(Message); if not (csDesigning in ComponentState) and (hoVisible in FHeader.FOptions) and FHeader.InHeader(ScreenToClient(SmallPointToPoint(Message.Pos))) then Message.Result := HTBORDER; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCHitTest');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMNCPaint(var Message: TRealWMNCPaint); var DC: HDC; R: TRect; Flags: DWORD; {$ifdef ThemeSupport} ExStyle: Integer; TempRgn: HRGN; BorderWidth, BorderHeight: Integer; {$endif ThemeSupport} begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMNCPaint');{$endif} {$ifdef ThemeSupport} if tsUseThemes in FStates then begin // If theming is enabled and the client edge border is set for the window then prevent the default window proc // from painting the old border to avoid flickering. ExStyle := GetWindowLong(Handle, GWL_EXSTYLE); if (ExStyle and WS_EX_CLIENTEDGE) <> 0 then begin GetWindowRect(Handle, R); // Determine width of the client edge. BorderWidth := GetSystemMetrics(SM_CXEDGE); BorderHeight := GetSystemMetrics(SM_CYEDGE); InflateRect(R, -BorderWidth, -BorderHeight); TempRgn := CreateRectRgnIndirect(R); // Exclude the border from the message region if there is one. Otherwise just use the inflated // window area region. if Message.Rgn <> 1 then CombineRgn(TempRgn, Message.Rgn, TempRgn, RGN_AND); DefWindowProc(Handle, Message.Msg, Integer(TempRgn), 0); DeleteObject(TempRgn); end else DefaultHandler(Message); end else {$endif ThemeSupport} DefaultHandler(Message); Flags := DCX_CACHE or DCX_CLIPSIBLINGS or DCX_WINDOW or DCX_VALIDATE; if (Message.Rgn = 1) or not IsWinNT then DC := GetDCEx(Handle, 0, Flags) else DC := GetDCEx(Handle, Message.Rgn, Flags or DCX_INTERSECTRGN); if DC <> 0 then begin if hoVisible in FHeader.FOptions then begin R := FHeaderRect; FHeader.FColumns.PaintHeader(DC, R, -FEffectiveOffsetX); end; OriginalWMNCPaint(DC); ReleaseDC(Handle, DC); end; {$ifdef ThemeSupport} if tsUseThemes in FStates then ThemeServices.PaintBorder(Self, False); {$endif ThemeSupport} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMNCPaint');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPaint(var Message: TLMPaint); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPaint');{$endif} //todo: //Windows.GetUpdateRect is always empty because BeginPaint was called //see if PaintStruct has the same rect {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(False); {$endif} if csPaintCopy in ControlState then FUpdateRect := ClientRect else FUpdateRect := Message.PaintStruct^.rcPaint; {$ifdef DEBUG_VTV}Logger.Send([lcPaint],'FUpdateRect', FUpdateRect);{$endif} inherited WMPaint(Message); {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(True); {$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPaint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPaste(var Message: TLMNoParams); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPaste');{$endif} PasteFromClipboard; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPaste');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrintFunctions} procedure TBaseVirtualTree.WMPrint(var Message: TWMPrint); // This message is sent to request that the tree draws itself to a given device context. This includes not only // the client area but also the non-client area (header!). begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPrint');{$endif} // Draw only if the window is visible or visibility is not required. if ((Message.Flags and PRF_CHECKVISIBLE) = 0) or IsWindowVisible(Handle) then Header.Columns.PaintHeader(Message.DC, FHeaderRect, -FEffectiveOffsetX); inherited WMPrint(Message); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPrint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMPrintClient(var Message: TWMPrintClient); var Window: TRect; Target: TPoint; Canvas: TCanvas; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMPrintClient');{$endif} // Draw only if the window is visible or visibility is not required. if ((Message.Flags and PRF_CHECKVISIBLE) = 0) or IsWindowVisible(Handle) then begin // Determine area of the entire tree to be displayed in the control. Window := ClientRect; Target := Window.TopLeft; // The Window rectangle is given in client coordinates. We have to convert it into // a sliding window of the tree image. OffsetRect(Window, FEffectiveOffsetX, -FOffsetY); Canvas := TCanvas.Create; try Canvas.Handle := Message.DC; PaintTree(Canvas, Window, Target, [poBackground, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]); finally Canvas.Handle := 0; Canvas.Free; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMPrintClient');{$endif} end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonDblClk(var Message: TLMRButtonDblClk); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonDblClk');{$endif} DoStateChange([tsRightDblClick]); inherited WMRButtonDblClk(Message); // get information about the hit if toMiddleClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDblClick(Message, HitInfo); end; DoStateChange([], [tsRightDblClick]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonDblClk');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonDown(var Message: TLMRButtonDown); var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonDown');{$endif} DoStateChange([tsRightButtonDown]); if FHeader.FStates = [] then begin inherited WMRButtonDown(Message); // get information about the hit if toRightClickSelect in FOptions.FSelectionOptions then begin GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); HandleMouseDown(Message, HitInfo); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonDown');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMRButtonUp(var Message: TLMRButtonUp); // handle right click selection and node specific popup menu var HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMRButtonUp');{$endif} DoStateChange([], [tsPopupMenuShown, tsRightButtonDown]); if FHeader.FStates = [] then begin Application.CancelHint; if IsMouseSelecting and Assigned(PopupMenu) then begin // Reset selection state already here, before the inherited handler opens the default menu. DoStateChange([], [tsDrawSelecting, tsDrawSelPending]); Invalidate; end; inherited WMRButtonUp(Message); // get information about the hit GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); if toRightClickSelect in FOptions.FSelectionOptions then HandleMouseUp(Message.Keys, HitInfo); if not Assigned(PopupMenu) then DoPopupMenu(HitInfo.HitNode, HitInfo.HitColumn, Point(Message.XPos, Message.YPos)); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMRButtonUp');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMSetFocus(var Msg: TLMSetFocus); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMSetFocus') ;{$endif} inherited WMSetFocus(Msg); if (FSelectionCount > 0) or not (toGhostedIfUnfocused in FOptions.FPaintOptions) then Invalidate; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMSetFocus');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMSize(var Message: TLMSize); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'WMSize');{$endif} inherited WMSize(Message); // Need to update scroll bars here. This will cause a recursion because of the change of the client area // when changing a scrollbar. Usually this is no problem since with the second level recursion no change of the // window size happens (the same values for the scrollbars are set, which shouldn't cause a window size change). // Appearently, this applies not to all systems, however. if HandleAllocated and ([tsSizing, tsWindowCreating] * FStates = []) and (ClientHeight > 0) then try DoStateChange([tsSizing]); // This call will invalidate the entire non-client area which needs recalculation on resize. FHeader.RescaleHeader; FHeader.UpdateSpringColumns; UpdateScrollBars(True); if (tsEditing in FStates) and not FHeader.UseColumns then UpdateEditBounds; finally DoStateChange([], [tsSizing]); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'WMSize');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef ThemeSupport} {$ifdef Windows} //todo procedure TBaseVirtualTree.WMThemeChanged(var Message: TLMessage); begin inherited; ThemeServices.UpdateThemes; if ThemeServices.ThemesEnabled and (toThemeAware in TreeOptions.PaintOptions) then DoStateChange([tsUseThemes]) else DoStateChange([], [tsUseThemes]); RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_VALIDATE or RDW_FRAME); end; {$endif} {$endif ThemeSupport} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMTimer(var Message: TLMTimer); // centralized timer handling happens here begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages,lcTimer],'WMTimer');{$endif} with Message do begin {$ifdef DEBUG_VTV}Logger.Send([lcTimer],'TimerId',TimerId);{$endif} case TimerID of ExpandTimer: DoDragExpand; EditTimer: DoEdit; ScrollTimer: begin if tsScrollPending in FStates then begin Application.CancelHint; // Scroll delay has elapsed, set to normal scroll interval now. SetTimer(Handle, ScrollTimer, FAutoScrollInterval, nil); DoStateChange([tsScrolling], [tsScrollPending]); end; DoTimerScroll; end; ChangeTimer: DoChange(FLastChangedNode); StructureChangeTimer: DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); SearchTimer: begin // When this event triggers then the user did not pressed any key for the specified timeout period. // Hence incremental searching is stopped. DoStateChange([], [tsIncrementalSearching]); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages,lcTimer],'WMTimer');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WMVScroll(var Message: TLMVScroll); //--------------- local functions ------------------------------------------- function GetRealScrollPosition: Integer; var SI: TScrollInfo; Code: Integer; begin SI.cbSize := SizeOf(TScrollInfo); SI.fMask := SIF_TRACKPOS; Code := SB_VERT; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, Code, SI); {$else} GetScrollInfo(Handle, Code, SI); {$endif UseFlatScrollbars} Result := SI.nTrackPos; {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'GetRealScrollPosition',Result);{$endif} end; //--------------- end local functions --------------------------------------- begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'WMVScroll');{$endif} //{$ifdef DEBUG_VTV}Logger.SendCallStack([lcScroll],'CallStack');{$endif} case Message.ScrollCode of SB_BOTTOM: SetOffsetY(-Integer(FRoot.TotalHeight)); SB_ENDSCROLL: begin DoStateChange([], [tsThumbTracking]); // Avoiding to adjust the horizontal scroll position while tracking makes scrolling much smoother // but we need to adjust the final position here then. UpdateScrollBars(True); // Really weird invalidation needed here (and I do it only because it happens so rarely), because // when showing the horizontal scrollbar while scrolling down using the down arrow button, // the button will be repainted on mouse up (at the wrong place in the far right lower corner)... RedrawWindow(Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_NOERASE or RDW_NOCHILDREN); end; SB_LINEUP: SetOffsetY(FOffsetY + FScrollBarOptions.FIncrementY); SB_LINEDOWN: SetOffsetY(FOffsetY - FScrollBarOptions.FIncrementY); SB_PAGEUP: SetOffsetY(FOffsetY + ClientHeight); SB_PAGEDOWN: SetOffsetY(FOffsetY - ClientHeight); SB_THUMBPOSITION, SB_THUMBTRACK: begin DoStateChange([tsThumbTracking]); {$if DEFINED(LCLQt) OR DEFINED(LCLCarbon)} SetOffsetY(-Message.Pos); {$else} SetOffsetY(-GetRealScrollPosition); {$endif} end; SB_TOP: SetOffsetY(0); end; Message.Result := 0; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'WMVScroll');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddToSelection(Node: PVirtualNode); var Changed: Boolean; begin if not FSelectionLocked then begin Assert(Assigned(Node), 'Node must not be nil!'); FSingletonNodeArray[0] := Node; Changed := InternalAddToSelection(FSingletonNodeArray, 1, False); if Changed then begin InvalidateNode(Node); Change(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean = False); // Adds the given items all at once into the current selection array. NewLength is the amount of // nodes to add (necessary to allow NewItems to be larger than the actual used entries). // ForceInsert is True if nodes must be inserted without consideration of level select constraint or // already set selected flags (e.g. when loading from stream). // Note: In the case ForceInsert is True the caller is responsible for making sure the new nodes aren't already in the // selection array! var Changed: Boolean; begin Changed := InternalAddToSelection(NewItems, NewLength, ForceInsert); if Changed then begin if NewLength = 1 then begin InvalidateNode(NewItems[0]); Change(NewItems[0]); end else begin Invalidate; Change(nil); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); // Used in descendants to modify the paint rectangle of the current column while painting a certain node. begin // Since cells are always drawn from left to right the next column index is independent of the // bidi mode, but not the column borders, which might change depending on the cell's content. NextNonEmpty := FHeader.FColumns.GetNextVisibleColumn(PaintInfo.Column); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdjustPanningCursor(X, Y: Integer); // Triggered by a mouse move when wheel panning/scrolling is active. // Loads the proper cursor which indicates into which direction scrolling is done. var NewCursor: HCURSOR; ScrollHorizontal, ScrollVertical: Boolean; begin ScrollHorizontal := Integer(FRangeX) > ClientWidth; ScrollVertical := Integer(FRangeY) > ClientHeight; if (Abs(X - FLastClickPos.X) < 8) and (Abs(Y - FLastClickPos.Y) < 8) then begin // Mouse is in the neutral zone. if ScrollHorizontal then begin if ScrollVertical then NewCursor := crVT_MOVEALL else NewCursor := crVT_MOVEEW end else NewCursor := crVT_MOVENS; end else begin // One of 8 directions applies: north, north-east, east, south-east, south, south-west, west and north-west. // Check also if scrolling in the particular direction is possible. if ScrollVertical and ScrollHorizontal then begin // All directions allowed. if X - FlastClickPos.X < -8 then begin // Left hand side. if Y - FLastClickPos.Y < -8 then NewCursor := crVT_MOVENW else if Y - FLastClickPos.Y > 8 then NewCursor := crVT_MOVESW else NewCursor := crVT_MOVEW; end else if X - FLastClickPos.X > 8 then begin // Right hand side. if Y - FLastClickPos.Y < -8 then NewCursor := crVT_MOVENE else if Y - FLastClickPos.Y > 8 then NewCursor := crVT_MOVESE else NewCursor := crVT_MOVEE; end else begin // Up or down. if Y < FLastClickPos.Y then NewCursor := crVT_MOVEN else NewCursor := crVT_MOVES; end; end else if ScrollHorizontal then begin // Only horizontal movement allowed. if X < FlastClickPos.X then NewCursor := crVT_MOVEW else NewCursor := crVT_MOVEE; end else begin // Only vertical movement allowed. if Y < FlastClickPos.Y then NewCursor := crVT_MOVEN else NewCursor := crVT_MOVES; end; end; // Now load the cursor and apply it. {$ifdef Windows} LCLIntf.SetCursor(Screen.Cursors[NewCursor]); {$else} Cursor := NewCursor; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AdviseChangeEvent(StructureChange: Boolean; Node: PVirtualNode; Reason: TChangeReason); // Used to register a delayed change event. If StructureChange is False then we have a selection change event (without // a specific reason) otherwise it is a structure change. begin if StructureChange then begin if tsStructureChangePending in FStates then begin if HandleAllocated then KillTimer(Handle,StructureChangeTimer); end else DoStateChange([tsStructureChangePending]); FLastStructureChangeNode := Node; if FLastStructureChangeReason = crIgnore then FLastStructureChangeReason := Reason else if Reason <> crIgnore then FLastStructureChangeReason := crAccumulated; end else begin if tsChangePending in FStates then KillTimer(Handle, ChangeTimer) else DoStateChange([tsChangePending]); FLastChangedNode := Node; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AllocateInternalDataArea(Size: Cardinal): Cardinal; // Simple registration method to be called by each descendant to claim their internal data area. // Result is the offset from the begin of the node to the internal data area of the calling tree class. begin Assert((FRoot = nil) or (FRoot.ChildCount = 0), 'Internal data allocation must be done before any node is created.'); {$ifdef DEBUG_VTV}Logger.Send('FTotalInternalDataSize BEFORE',FTotalInternalDataSize);{$endif} {$ifdef DEBUG_VTV}Logger.Send('Size',Size);{$endif} {$ifdef DEBUG_VTV}Logger.Send('TreeNodeSize',TreeNodeSize);{$endif} Result := TreeNodeSize + FTotalInternalDataSize; {$ifdef DEBUG_VTV}Logger.Send('Result',Result);{$endif} Inc(FTotalInternalDataSize, (Size + 3) and not 3); {$ifdef DEBUG_VTV}Logger.Send('FTotalInternalDataSize AFTER', FTotalInternalDataSize);{$endif} InitRootNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Animate(Steps, Duration: Cardinal; Callback: TVTAnimationCallback; Data: Pointer); // This method does the calculation part of an animation as used for node toggling and hint animations. // Steps is the maximum amount of animation steps to do and Duration determines the milliseconds the animation // has to run. Callback is a task specific method which is called in the loop for every step and Data is simply // something to pass on to the callback. // The callback is called with the current step, the current step size and the Data parameter. Since the step amount // as well as the step size are possibly adjusted during the animation, it is impossible to determine if the current // step is the last step, even if the original step amount is known. To solve this problem the callback will be // called after the loop has finished with a step size of 0 indicating so to execute any post processing. var StepSize, RemainingTime, RemainingSteps, NextTimeStep, CurrentStep, StartTime, CurrentTime: Cardinal; begin {$ifndef Windows} //Is necessary to properly implement timeGetTime in non Windows Exit; {$endif} if not (tsInAnimation in FStates) and (Duration > 0) then begin DoStateChange([tsInAnimation]); try RemainingTime := Duration; RemainingSteps := Steps; // Determine the initial step size which is either 1 if the needed steps are less than the number of // steps possible given by the duration or > 1 otherwise. StepSize := Round(Max(1, RemainingSteps / Duration)); RemainingSteps := RemainingSteps div StepSize; CurrentStep := 0; while (RemainingSteps > 0) and (RemainingTime > 0) and not Application.Terminated do begin StartTime := timeGetTime; NextTimeStep := StartTime + RemainingTime div RemainingSteps; if not Callback(CurrentStep, StepSize, Data) then Break; // Keep duration for this step for rest calculation. CurrentTime := timeGetTime; // Wait until the calculated time has been reached. while CurrentTime < NextTimeStep do CurrentTime := timeGetTime; // Subtract the time this step really needed. if RemainingTime >= CurrentTime - StartTime then begin Dec(RemainingTime, CurrentTime - StartTime); Dec(RemainingSteps); end else begin RemainingTime := 0; RemainingSteps := 0; end; // If the remaining time per step is less than one time step then we have to decrease the // step count and increase the step size. if (RemainingSteps > 0) and ((RemainingTime div RemainingSteps) < 1) then begin repeat Inc(StepSize); RemainingSteps := RemainingTime div StepSize; until (RemainingSteps <= 0) or ((RemainingTime div RemainingSteps) >= 1); end; CurrentStep := Cardinal(Steps) - RemainingSteps; end; if not Application.Terminated then Callback(0, 0, Data); finally DoStateChange([], [tsCancelHintAnimation, tsInAnimation]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginOperation; // Called to indicate that a long-running operation has been started. begin Inc(FOperationCount); if FOperationCount = 1 then FOperationCanceled := False; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CalculateSelectionRect(X, Y: Integer): Boolean; // Recalculates old and new selection rectangle given that X, Y are new mouse coordinates. // Returns True if there was a change since the last call. var MaxValue: Integer; begin //lclheader if hoVisible in FHeader.Options then Dec(Y, FHeader.Height); if tsDrawSelecting in FStates then FLastSelRect := FNewSelRect; FNewSelRect.BottomRight := Point(X + FEffectiveOffsetX, Y - FOffsetY); if FNewSelRect.Right < 0 then FNewSelRect.Right := 0; if FNewSelRect.Bottom < 0 then FNewSelRect.Bottom := 0; MaxValue := ClientWidth; if FRangeX > Cardinal(MaxValue) then MaxValue := FRangeX; if FNewSelRect.Right > MaxValue then FNewSelRect.Right := MaxValue; MaxValue := ClientHeight; if FRangeY > Cardinal(MaxValue) then MaxValue := FRangeY; if FNewSelRect.Bottom > MaxValue then FNewSelRect.Bottom := MaxValue; Result := not CompareMem(@FLastSelRect, @FNewSelRect, SizeOf(FNewSelRect)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanAutoScroll: Boolean; // Determines if auto scrolling is currently allowed. var IsDropTarget: Boolean; IsDrawSelecting: Boolean; IsWheelPanning: Boolean; begin // Don't scroll the client area if the header is currently doing tracking or dragging. // Do auto scroll only if there is a draw selection in progress or the tree is the current drop target or // wheel panning/scrolling is active. IsDropTarget := Assigned(FDragManager) and VTVDragManager.IsDropTarget; IsDrawSelecting := [tsDrawSelPending, tsDrawSelecting] * FStates <> []; IsWheelPanning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; Result := ((toAutoScroll in FOptions.FAutoOptions) or IsWheelPanning) and (FHeader.FStates = []) and (IsDrawSelecting or IsDropTarget or (tsVCLDragging in FStates) or IsWheelPanning); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanShowDragImage: Boolean; // Determines whether a drag image should be shown. begin Result := FDragImageKind <> diNoImage; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Change(Node: PVirtualNode); begin AdviseChangeEvent(False, Node, crIgnore); if FUpdateCount = 0 then begin if (FChangeDelay > 0) and not (tsSynchMode in FStates) then SetTimer(Handle, ChangeTimer, FChangeDelay, nil) else DoChange(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ChangeScale(M, D: Integer); var DoScale: Boolean; begin inherited; if (M <> D) and (toAutoChangeScale in FOptions.FAutoOptions) then begin if (csLoading in ComponentState) then DoScale := tsNeedScale in FStates else DoScale := True; if DoScale then begin FDefaultNodeHeight := MulDiv(FDefaultNodeHeight, M, D); FHeader.ChangeScale(M, D); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CheckParentCheckState(Node: PVirtualNode; NewCheckState: TCheckState): Boolean; // Checks all siblings of node to determine which check state Node's parent must get. var CheckCount, BoxCount: Cardinal; PartialCheck: Boolean; Run: PVirtualNode; begin CheckCount := 0; BoxCount := 0; PartialCheck := False; Run := Node.Parent.FirstChild; while Assigned(Run) do begin if Run = Node then begin // The given node cannot be checked because it does not yet have its new check state (as this depends // on the outcome of this method). Instead NewCheckState is used as this contains the new state the node // will get if this method returns True. if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin Inc(BoxCount); if NewCheckState in [csCheckedNormal, csCheckedPressed] then Inc(CheckCount); PartialCheck := PartialCheck or (NewCheckState = csMixedNormal); end; end else if Run.CheckType in [ctCheckBox, ctTriStateCheckBox] then begin Inc(BoxCount); if Run.CheckState in [csCheckedNormal, csCheckedPressed] then Inc(CheckCount); PartialCheck := PartialCheck or (Run.CheckState = csMixedNormal); end; Run := Run.NextSibling; end; if (CheckCount = 0) and not PartialCheck then NewCheckState := csUncheckedNormal else if CheckCount < BoxCount then NewCheckState := csMixedNormal else NewCheckState := csCheckedNormal; Node := Node.Parent; Result := DoChecking(Node, NewCheckState); if Result then begin DoCheckClick(Node, NewCheckState); // Recursively adjust parent of parent. with Node^ do begin if not (vsInitialized in Parent.States) then InitNode(Parent); if ([vsChecking, vsDisabled] * Parent.States = []) and (Parent <> FRoot) and (Parent.CheckType = ctTriStateCheckBox) then Result := CheckParentCheckState(Node, NewCheckState); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearTempCache; // make sure the temporary node cache is in a reliable state begin FTempNodeCache := nil; FTempNodeCount := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Returns True if the given column is to be considered as being empty. This will usually be determined by // descendants as the base tree implementation has not enough information to decide. begin Result := True; if Assigned(FOnGetCellIsEmpty) then FOnGetCellIsEmpty(Self, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ComputeRTLOffset(ExcludeScrollbar: Boolean): Integer; // Computes the horizontal offset needed when all columns are automatically right aligned (in RTL bidi mode). // ExcludeScrollbar determines if the left-hand vertical scrollbar is to be included (if visible) or not. var HeaderWidth: Integer; ScrollbarVisible: Boolean; begin ScrollbarVisible := (Integer(FRangeY) > ClientHeight) and (ScrollbarOptions.Scrollbars in [ssVertical, ssBoth]); if ScrollbarVisible then Result := GetSystemMetrics(SM_CXVSCROLL) else Result := 0; // Make everything right aligned. HeaderWidth := FHeaderRect.Right - FHeaderRect.Left; if Integer(FRangeX) + Result <= HeaderWidth then Result := HeaderWidth - Integer(FRangeX); // Otherwise take only left-hand vertical scrollbar into account. if ScrollbarVisible and ExcludeScrollbar then Dec(Result, GetSystemMetrics(SM_CXVSCROLL)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CountLevelDifference(Node1, Node2: PVirtualNode): Integer; // This method counts how many indentation levels the given nodes are apart. If both nodes have the same parent then the // difference is 0 otherwise the result is basically GetNodeLevel(Node2) - GetNodeLevel(Node1), but with sign. // If the result is negative then Node2 is less intended than Node1. var Level1, Level2: Integer; begin Assert(Assigned(Node1) and Assigned(Node2), 'Both nodes must be Assigned.'); Level1 := 0; while Node1.Parent <> FRoot do begin Inc(Level1); Node1 := Node1.Parent; end; Level2 := 0; while Node2.Parent <> FRoot do begin Inc(Level2); Node2 := Node2.Parent; end; Result := Level2 - Level1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CountVisibleChildren(Node: PVirtualNode): Cardinal; // Returns the number of visible child nodes of the given node. begin Result := 0; // The node's direct children... if vsExpanded in Node.States then begin // ...and their children. Node := Node.FirstChild; while Assigned(Node) do begin if vsVisible in Node.States then Inc(Result, CountVisibleChildren(Node) + 1); Node := Node.NextSibling; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CreateParams(var Params: TCreateParams); const ScrollBar: array[TScrollStyle] of Cardinal = (0, WS_HSCROLL, WS_VSCROLL, WS_HSCROLL or WS_VSCROLL, 0,0,0); begin //todo_lcl inherited CreateParams(Params); with Params do begin Style := Style or WS_CLIPCHILDREN or WS_CLIPSIBLINGS or ScrollBar[ScrollBarOptions.FScrollBars]; if toFullRepaintOnResize in FOptions.FMiscOptions then WindowClass.style := WindowClass.style or CS_HREDRAW or CS_VREDRAW else WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW); //lcl: Ctl3D is not used in LCL. Has the same meaning of BorderStyle = bsSingle { if BorderStyle = bsSingle then begin if Ctl3D then begin ExStyle := ExStyle or WS_EX_CLIENTEDGE; Style := Style and not WS_BORDER; end else Style := Style or WS_BORDER; end else Style := Style and not WS_BORDER; } //todo_lcl_low //AddBiDiModeExStyle(ExStyle); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CreateWnd; // Initializes data which depends on a valid window handle. begin DoStateChange([tsWindowCreating]); inherited; {$ifdef DEBUG_VTV}Logger.Send([lcInfo],'Handle (CreateWnd)',Handle);{$endif} DoStateChange([], [tsWindowCreating]); {$ifdef ThemeSupport} if ThemeServices.ThemesEnabled and (toThemeAware in TreeOptions.PaintOptions) then begin DoStateChange([tsUseThemes]); //todo //if (toUseExplorerTheme in FOptions.FPaintOptions) and IsWinVistaOrAbove then // SetWindowTheme(Handle, 'explorer', nil); end else {$endif ThemeSupport} DoStateChange([], [tsUseThemes]); // Because of the special recursion and update stopper when creating the window (or resizing it) // we have to manually trigger the auto size calculation here. if hsNeedScaling in FHeader.FStates then FHeader.RescaleHeader; //lcl: Call with Force argument to true since AdjustAutoSize is not called in Loaded if hoAutoResize in FHeader.FOptions then FHeader.FColumns.AdjustAutoSize(InvalidColumn, True); // Initialize flat scroll bar library if required. {$ifdef UseFlatScrollbars} if FScrollBarOptions.FScrollBarStyle <> sbmRegular then begin InitializeFlatSB(Handle); FlatSB_SetScrollProp(Handle, WSB_PROP_HSTYLE, ScrollBarProp[FScrollBarOptions.ScrollBarStyle], False); FlatSB_SetScrollProp(Handle, WSB_PROP_VSTYLE, ScrollBarProp[FScrollBarOptions.ScrollBarStyle], False); end; {$endif UseFlatScrollbars} PrepareBitmaps(True, True); {$ifdef Windows} // Register tree as OLE drop target. if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.FMiscOptions) then RegisterDragDrop(Handle, VTVDragManager as IDropTarget); {$endif} if toCheckSupport in FOptions.FMiscOptions then CheckImageListNeeded; UpdateScrollBars(True); UpdateHeaderRect; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DestroyHandle; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcMessages],'DestroyHandle');{$endif} //lcl: this code was originally called is response to WM_NCDESTROY // see if there will be issues calling here InterruptValidation; KillTimer(Handle, ChangeTimer); KillTimer(Handle, StructureChangeTimer); {$ifdef Windows} if not (csDesigning in ComponentState) and (toAcceptOLEDrop in FOptions.FMiscOptions) then RevokeDragDrop(Handle); {$endif} // Clean up other stuff. DeleteObject(FDottedBrush); FDottedBrush := 0; CancelEditNode; inherited; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcMessages],'DestroyHandle');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHiddenChildrenFlag(Node: PVirtualNode); // Update the hidden children flag of the given node. var Run: PVirtualNode; begin if Node.ChildCount = 0 then begin if vsHasChildren in Node.States then Exclude(Node.States, vsAllChildrenHidden) else Include(Node.States, vsAllChildrenHidden); end else begin // Iterate through all siblings and stop when one visible is found. Run := Node.FirstChild; while Assigned(Run) do Run := Run.NextSibling; if Assigned(Run) then Exclude(Node.States, vsAllChildrenHidden) else Include(Node.States, vsAllChildrenHidden); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHiddenChildrenFlagAllNodes; var Run: PVirtualNode; begin Run := GetFirstNoInit(False); while Assigned(Run) do begin DetermineHiddenChildrenFlag(Run); Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHitPositionLTR(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); // This method determines the hit position within a node with left-to-right orientation. var MainColumnHit: Boolean; Run: PVirtualNode; Indent, TextWidth, ImageOffset: Integer; begin MainColumnHit := HitInfo.HitColumn = FHeader.MainColumn; Indent := 0; // If columns are not used or the main column is hit then the tree indentation must be considered too. if MainColumnHit then begin if toFixedIndent in FOptions.FPaintOptions then Indent := FIndent else begin Run := HitInfo.HitNode; while (Run.Parent <> FRoot) do begin Inc(Indent, FIndent); Run := Run.Parent; end; if toShowRoot in FOptions.FPaintOptions then Inc(Indent, FIndent); end; end; if Offset < Indent then begin // Position is to the left of calculated indentation which can only happen for the main column. // Check whether it corresponds to a button/checkbox. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in HitInfo.HitNode.States) then begin // Position of button is interpreted very generously to avoid forcing the user // to click exactly into the 9x9 pixels area. The entire node height and one full // indentation level is accepted as button hit. if Offset >= Indent - Integer(FIndent) then Include(HitInfo.HitPositions, hiOnItemButton); if Offset >= Indent - FPlusBM.Width then Include(HitInfo.HitPositions, hiOnItemButtonExact); end; // no button hit so position is on indent if HitInfo.HitPositions = [] then Include(HitInfo.HitPositions, hiOnItemIndent); end else begin // The next hit positions can be: // - on the check box // - on the state image // - on the normal image // - to the left of the text area // - on the label or // - to the right of the text area // (in this order). // In report mode no hit other than in the main column is possible. if MainColumnHit or not (toReportMode in FOptions.FMiscOptions) then begin ImageOffset := Indent + FMargin; // Check support is only available for the main column. if MainColumnHit and (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (HitInfo.HitNode.CheckType <> ctNone) then Inc(ImageOffset, FCheckImages.Height + 2); if MainColumnHit and (Offset < ImageOffset) then begin HitInfo.HitPositions := [hiOnItem]; if (HitInfo.HitNode.CheckType <> ctNone) then Include(HitInfo.HitPositions, hiOnItemCheckBox); end else begin if Assigned(FStateImages) and HasImage(HitInfo.HitNode, ikState, HitInfo.HitColumn) then Inc(ImageOffset, FStateImages.Width + 2); if Offset < ImageOffset then Include(HitInfo.HitPositions, hiOnStateIcon) else begin if Assigned(FImages) and HasImage(HitInfo.HitNode, ikNormal, HitInfo.HitColumn) then Inc(ImageOffset, FImages.Width + 2); if Offset < ImageOffset then Include(HitInfo.HitPositions, hiOnNormalIcon) else begin // ImageOffset contains now the left border of the node label area. This is used to calculate the // correct alignment in the column. TextWidth := DoGetNodeWidth(HitInfo.HitNode, HitInfo.HitColumn); // Check if the text can be aligned at all. This is only possible if there is enough room // in the remaining text rectangle. if TextWidth > Right - ImageOffset then Include(HitInfo.HitPositions, hiOnItemLabel) else begin case Alignment of taCenter: begin Indent := (ImageOffset + Right - TextWidth) div 2; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else if Offset < Indent + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight) end; taRightJustify: begin Indent := Right - TextWidth; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else Include(HitInfo.HitPositions, hiOnItemLabel); end; else // taLeftJustify if Offset < ImageOffset + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight); end; end; end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DetermineHitPositionRTL(var HitInfo: THitInfo; Offset, Right: Integer; Alignment: TAlignment); // This method determines the hit position within a node with right-to-left orientation. var MainColumnHit: Boolean; Run: PVirtualNode; Indent, TextWidth, ImageOffset: Integer; begin MainColumnHit := HitInfo.HitColumn = FHeader.MainColumn; // If columns are not used or the main column is hit then the tree indentation must be considered too. if MainColumnHit then begin if toFixedIndent in FOptions.FPaintOptions then Dec(Right, FIndent) else begin Run := HitInfo.HitNode; while (Run.Parent <> FRoot) do begin Dec(Right, FIndent); Run := Run.Parent; end; if toShowRoot in FOptions.FPaintOptions then Dec(Right, FIndent); end; end; if Offset >= Right then begin // Position is to the right of calculated indentation which can only happen for the main column. // Check whether it corresponds to a button/checkbox. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in HitInfo.HitNode.States) then begin // Position of button is interpreted very generously to avoid forcing the user // to click exactly into the 9x9 pixels area. The entire node height and one full // indentation level is accepted as button hit. if Offset <= Right + Integer(FIndent) then Include(HitInfo.HitPositions, hiOnItemButton); if Offset <= Right + FPlusBM.Width then Include(HitInfo.HitPositions, hiOnItemButtonExact); end; // no button hit so position is on indent if HitInfo.HitPositions = [] then Include(HitInfo.HitPositions, hiOnItemIndent); end else begin // The next hit positions can be: // - on the check box // - on the state image // - on the normal image // - to the left of the text area // - on the label or // - to the right of the text area // (in this order). // In report mode no hit other than in the main column is possible. if MainColumnHit or not (toReportMode in FOptions.FMiscOptions) then begin ImageOffset := Right - FMargin; // Check support is only available for the main column. if MainColumnHit and (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (HitInfo.HitNode.CheckType <> ctNone) then Dec(ImageOffset, FCheckImages.Height + 2); if MainColumnHit and (Offset > ImageOffset) then begin HitInfo.HitPositions := [hiOnItem]; if (HitInfo.HitNode.CheckType <> ctNone) then Include(HitInfo.HitPositions, hiOnItemCheckBox); end else begin if Assigned(FStateImages) and HasImage(HitInfo.HitNode, ikState, HitInfo.HitColumn) then Dec(ImageOffset, FStateImages.Width + 2); if Offset > ImageOffset then Include(HitInfo.HitPositions, hiOnStateIcon) else begin if Assigned(FImages) and HasImage(HitInfo.HitNode, ikNormal, HitInfo.HitColumn) then Dec(ImageOffset, FImages.Width + 2); if Offset > ImageOffset then Include(HitInfo.HitPositions, hiOnNormalIcon) else begin // ImageOffset contains now the right border of the node label area. This is used to calculate the // correct alignment in the column. TextWidth := DoGetNodeWidth(HitInfo.HitNode, HitInfo.HitColumn); // Check if the text can be aligned at all. This is only possible if there is enough room // in the remaining text rectangle. if TextWidth > ImageOffset then Include(HitInfo.HitPositions, hiOnItemLabel) else begin // Consider bidi mode here. In RTL context does left alignment actually mean right alignment // and vice versa. ChangeBiDiModeAlignment(Alignment); case Alignment of taCenter: begin Indent := (ImageOffset - TextWidth) div 2; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else if Offset < Indent + TextWidth then Include(HitInfo.HitPositions, hiOnItemLabel) else Include(HitInfo.HitPositions, hiOnItemRight) end; taRightJustify: begin Indent := ImageOffset - TextWidth; if Offset < Indent then Include(HitInfo.HitPositions, hiOnItemLeft) else Include(HitInfo.HitPositions, hiOnItemLabel); end; else // taLeftJustify if Offset > TextWidth then Include(HitInfo.HitPositions, hiOnItemRight) else Include(HitInfo.HitPositions, hiOnItemLabel); end; end; end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineNextCheckState(CheckType: TCheckType; CheckState: TCheckState): TCheckState; // Determines the next check state in case the user click the check image or pressed the space key. begin case CheckType of ctTriStateCheckBox, ctCheckBox: if CheckState = csCheckedNormal then Result := csUncheckedNormal else Result := csCheckedNormal; ctRadioButton: Result := csCheckedNormal; ctButton: Result := csUncheckedNormal; else Result := csMixedNormal; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DetermineScrollDirections(X, Y: Integer): TScrollDirections; // Determines which direction the client area must be scrolled depending on the given position. begin Result:= []; if CanAutoScroll then begin // Calculation for wheel panning/scrolling is a bit different to normal auto scroll. if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin if (X - FLastClickPos.X) < -8 then Include(Result, sdLeft); if (X - FLastClickPos.X) > 8 then Include(Result, sdRight); if (Y - FLastClickPos.Y) < -8 then Include(Result, sdUp); if (Y - FLastClickPos.Y) > 8 then Include(Result, sdDown); end else begin if (X < Integer(FDefaultNodeHeight)) and (FEffectiveOffsetX <> 0) then Include(Result, sdLeft); if (ClientWidth + FEffectiveOffsetX < Integer(FRangeX)) and (X > ClientWidth - Integer(FDefaultNodeHeight)) then Include(Result, sdRight); //lclheader if (ClientHeight - FOffsetY < Integer(FRangeY)) and (Y > inherited GetClientRect.Bottom - Integer(FDefaultNodeHeight)) then Include(Result, sdDown); if hoVisible in FHeader.FOptions then Dec(Y, FHeader.Height); if (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then Include(Result, sdUp); //todo: probably the code below is bug due to poor timeGetTime implementation // Since scrolling during dragging is not handled via the timer we do a check here whether the auto // scroll timeout already has elapsed or not. if (Result <> []) and ((Assigned(FDragManager) and VTVDragManager.IsDropTarget) or (FindDragTarget(Point(X, Y), False) = Self)) then begin if FDragScrollStart = 0 then FDragScrollStart := timeGetTime; // Reset any scroll direction to avoid scroll in the case the user is dragging and the auto scroll time has not // yet elapsed. if ((timeGetTime - FDragScrollStart) < FAutoScrollDelay) then Result := []; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAdvancedHeaderDraw(var PaintInfo: THeaderPaintInfo; const Elements: THeaderPaintElements); begin if Assigned(FOnAdvancedHeaderDraw) then FOnAdvancedHeaderDraw(FHeader, PaintInfo, Elements); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const CellRect: TRect); begin if Assigned(FOnAfterCellPaint) then FOnAfterCellPaint(Self, Canvas, Node, Column, CellRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); begin if Assigned(FOnAfterItemErase) then FOnAfterItemErase(Self, Canvas, Node, ItemRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect); begin if Assigned(FOnAfterItemPaint) then FOnAfterItemPaint(Self, Canvas, Node, ItemRect); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAfterPaint(Canvas: TCanvas); begin if Assigned(FOnAfterPaint) then FOnAfterPaint(Self, Canvas); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoAutoScroll(X, Y: Integer); begin FScrollDirections := DetermineScrollDirections(X, Y); if FStates * [tsWheelPanning, tsWheelScrolling] = [] then begin if FScrollDirections = [] then begin if ((FStates * [tsScrollPending, tsScrolling]) <> []) then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; end else begin // start auto scroll if not yet done if (FStates * [tsScrollPending, tsScrolling]) = [] then begin DoStateChange([tsScrollPending]); SetTimer(Handle, ScrollTimer, FAutoScrollDelay, nil); end; end; end; end; procedure TBaseVirtualTree.DoAutoSize; begin //The default DoAutoSize makes the editors be placed wrongly when scrolling end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoBeforeDrag(Node: PVirtualNode; Column: TColumnIndex): Boolean; begin Result := False; if Assigned(FOnDragAllowed) then FOnDragAllowed(Self, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforeCellPaint(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect); {$ifdef LCLWin32} var UpdateRect: TRect; {$endif} begin //todo: implement under non win32 if Assigned(FOnBeforeCellPaint) then begin {$ifdef LCLWin32} if CellPaintMode = cpmGetContentMargin then begin // Prevent drawing if we are only about to get the margin. As this also clears the update rect we need to save it. GetUpdateRect(Handle, UpdateRect, False); SetUpdateState(True); end; {$endif} FOnBeforeCellPaint(Self, Canvas, Node, Column, CellPaintMode, CellRect, ContentRect); {$ifdef LCLWin32} if CellPaintMode = cpmGetContentMargin then begin SetUpdateState(False); InvalidateRect(Handle, @UpdateRect, False); end; {$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforeItemErase(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect; var Color: TColor; var EraseAction: TItemEraseAction); begin if Assigned(FOnBeforeItemErase) then FOnBeforeItemErase(Self, Canvas, Node, ItemRect, Color, EraseAction); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoBeforeItemPaint(Canvas: TCanvas; Node: PVirtualNode; const ItemRect: TRect): Boolean; begin // By default custom draw will not be used, so the tree handles drawing the node. Result := False; if Assigned(FOnBeforeItemPaint) then FOnBeforeItemPaint(Self, Canvas, Node, ItemRect, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoBeforePaint(Canvas: TCanvas); begin if Assigned(FOnBeforePaint) then FOnBeforePaint(Self, Canvas); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCancelEdit: Boolean; // Called when the current edit action or a pending edit must be cancelled. begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); Result := (tsEditing in FStates) and FEditLink.CancelEdit; if Result then begin DoStateChange([], [tsEditing]); if Assigned(FOnEditCancelled) then FOnEditCancelled(Self, FEditColumn); FEditLink := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCanEdit(Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean); begin if Assigned(FOnEditing) then FOnEditing(Self, Node, Column, Allowed); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoChange(Node: PVirtualNode); begin KillTimer(Handle, ChangeTimer); if Assigned(FOnChange) then FOnChange(Self, Node); // This is a good place to reset the cached node. This is the same as the node passed in here. // This is necessary to allow descendants to override this method and get the node then. DoStateChange([], [tsChangePending]); FLastChangedNode := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCheckClick(Node: PVirtualNode; NewCheckState: TCheckState); begin if ChangeCheckState(Node, NewCheckState) then DoChecked(Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoChecked(Node: PVirtualNode); begin if Assigned(FOnChecked) then FOnChecked(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoChecking(Node: PVirtualNode; var NewCheckState: TCheckState): Boolean; // Determines if a node is allowed to change its check state to NewCheckState. begin if toReadOnly in FOptions.FMiscOptions then Result := False else begin Result := True; if Assigned(FOnChecking) then FOnChecking(Self, Node, NewCheckState, Result); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoCollapsed(Node: PVirtualNode); begin if Assigned(FOnCollapsed) then FOnCollapsed(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCollapsing(Node: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnCollapsing) then FOnCollapsing(Self, Node, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnClick(Column: TColumnIndex; Shift: TShiftState); begin if Assigned(FOnColumnClick) then FOnColumnClick(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnDblClick(Column: TColumnIndex; Shift: TShiftState); begin if Assigned(FOnColumnDblClick) then FOnColumnDblClick(Self, Column, Shift); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoColumnResize(Column: TColumnIndex); var R: TRect; Run: PVirtualNode; begin if not (csLoading in ComponentState) and HandleAllocated then begin // Reset all vsHeightMeasured flags if we are in multiline mode. Run := GetFirstInitialized; while Assigned(Run) do begin if vsMultiline in Run.States then Exclude(Run.States, vsHeightMeasured); Run := GetNextInitialized(Run); end; UpdateHorizontalScrollBar(True); if Column > NoColumn then begin // Invalidate client area from the current column all to the right (or left in RTL mode). R := ClientRect; //lclheader if hoVisible in FHeader.FOptions then Inc(R.Bottom, FHeader.Height); if not (toAutoSpanColumns in FOptions.FAutoOptions) then if UseRightToLeftAlignment then R.Right := FHeader.Columns[Column].Left + FHeader.Columns[Column].Width + ComputeRTLOffset else R.Left := FHeader.Columns[Column].Left; InvalidateRect(Handle, @R, False); FHeader.Invalidate(FHeader.Columns[Column], True); end; if [hsColumnWidthTracking, hsResizing] * FHeader.States = [hsColumnWidthTracking] then UpdateWindow(Handle); if not (tsUpdating in FStates) then UpdateDesigner; // design time only if Assigned(FOnColumnResize) and not (hsResizing in FHeader.States) then FOnColumnResize(FHeader, Column); // If the tree is currently in edit state then notify edit link. if tsEditing in FStates then UpdateEditBounds; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCompare(Node1, Node2: PVirtualNode; Column: TColumnIndex): Integer; begin Result := 0; if Assigned(FOnCompareNodes) then FOnCompareNodes(Self, Node1, Node2, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateDataObject: IDataObject; begin Result := nil; if Assigned(FOnCreateDataObject) then FOnCreateDataObject(Self, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateDragManager: IVTDragManager; begin Result := nil; if Assigned(FOnCreateDragManager) then FOnCreateDragManager(Self, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; begin Result := nil; if Assigned(FOnCreateEditor) then begin FOnCreateEditor(Self, Node, Column, Result); if Result = nil then ShowError(SEditLinkIsNil, hcTFEditLinkIsNil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragging(P: TPoint); // Initiates finally the drag'n drop operation and returns after DD is finished. //--------------- local function -------------------------------------------- function GetDragOperations: LongWord; begin if FDragOperations = [] then Result := DROPEFFECT_COPY or DROPEFFECT_MOVE or DROPEFFECT_LINK else begin Result := 0; if doCopy in FDragOperations then Result := Result or DROPEFFECT_COPY; if doLink in FDragOperations then Result := Result or DROPEFFECT_LINK; if doMove in FDragOperations then Result := Result or DROPEFFECT_MOVE; end; end; //--------------- end local function ---------------------------------------- var DragEffect, AllowedEffects: LongWord; I: Integer; DragObject: TDragObject; DataObject: IDataObject; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoDragging');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcDrag],'Stack');{$endif} DataObject := nil; // Dragging is dragging, nothing else. DoCancelEdit; if Assigned(FCurrentHotNode) then begin InvalidateNode(FCurrentHotNode); FCurrentHotNode := nil; end; // Select the focused node if not already done. if Assigned(FFocusedNode) and not (vsSelected in FFocusedNode.States) then begin InternalAddToSelection(FFocusedNode, False); InvalidateNode(FFocusedNode); end; UpdateWindow(Handle); // Keep a list of all currently selected nodes as this list might change, // but we have probably to delete currently selected nodes. FDragSelection := GetSortedSelection(True); try DoStateChange([tsOLEDragging], [tsOLEDragPending, tsClearPending]); // An application might create a drag object like used during VCL dd. This is not required for OLE dd but // required as parameter. DragObject := nil; DoStartDrag(DragObject); DragObject.Free; DataObject := VTVDragManager.DataObject; PrepareDragImage(P, DataObject); FLastDropMode := dmOnNode; // Don't forget to initialize the result. It might never be touched. DragEffect := DROPEFFECT_NONE; AllowedEffects := GetDragOperations; try DragAndDrop(AllowedEffects, DataObject, DragEffect); VTVDragManager.ForceDragLeave; finally GetCursorPos(P); P := ScreenToClient(P); DoEndDrag(Self, P.X, P.Y); FDragImage.EndDrag; // Finish the operation. if (DragEffect = DROPEFFECT_MOVE) and (toAutoDeleteMovedNodes in TreeOptions.AutoOptions) then begin // The operation was a move so delete the previously selected nodes. BeginUpdate; try // The list of selected nodes was retrieved in resolved state. That means there can never be a node // in the list whose parent (or its parent etc.) is also selected. for I := 0 to High(FDragSelection) do DeleteNode(FDragSelection[I]); finally EndUpdate; end; end; DoStateChange([], [tsOLEDragging]); end; finally FDragSelection := nil; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoDragging');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragExpand; var SourceTree: TBaseVirtualTree; begin KillTimer(Handle, ExpandTimer); if Assigned(FDropTargetNode) and (vsHasChildren in FDropTargetNode.States) and not (vsExpanded in FDropTargetNode.States) then begin if Assigned(FDragManager) then SourceTree := TBaseVirtualTree(VTVDragManager.DragSource) else SourceTree := nil; if not VTVDragManager.DropTargetHelperSupported and Assigned(SourceTree) then SourceTree.FDragImage.HideDragImage; ToggleNode(FDropTargetNode); UpdateWindow(Handle); if not VTVDragManager.DropTargetHelperSupported and Assigned(SourceTree) then SourceTree.FDragImage.ShowDragImage; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoDragOver(Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord): Boolean; begin Result := False; if Assigned(FOnDragOver) then FOnDragOver(Self, Source, Shift, State, Pt, Mode, Effect, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoDragDrop(Source: TObject; DataObject: IDataObject; Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode); begin if Assigned(FOnDragDrop) then FOnDragDrop(Self, Source, {DataObject, }Formats, Shift, Pt, Effect, Mode); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoEdit; begin Application.CancelHint; KillTimer(Handle, ScrollTimer); KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); if Assigned(FFocusedNode) and not (vsDisabled in FFocusedNode.States) and not (toReadOnly in FOptions.FMiscOptions) and (FEditLink = nil) then begin FEditLink := DoCreateEditor(FFocusedNode, FEditColumn); if Assigned(FEditLink) then begin DoStateChange([tsEditing], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection, tsOLEDragPending, tsOLEDragging, tsClearPending, tsScrollPending, tsScrolling, tsMouseCheckPending]); ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollOnEdit in FOptions.AutoOptions)); if FEditLink.PrepareEdit(Self, FFocusedNode, FEditColumn) then begin UpdateEditBounds; // Node needs repaint because the selection rectangle and static text must disappear. InvalidateNode(FFocusedNode); if not FEditLink.BeginEdit then DoStateChange([], [tsEditing]); end else DoStateChange([], [tsEditing]); if not (tsEditing in FStates) then FEditLink := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoEndDrag(Target: TObject; X, Y: Integer); // Does some housekeeping for VCL drag'n drop; begin inherited; DragFinished; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoEndEdit: Boolean; begin KillTimer(Handle, EditTimer); Result := (tsEditing in FStates) and FEditLink.EndEdit; if Result then begin DoStateChange([], [tsEditing]); FEditLink := nil; if Assigned(FOnEdited) then FOnEdited(Self, FFocusedNode, FEditColumn); end; DoStateChange([], [tsEditPending]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoExpanded(Node: PVirtualNode); begin if Assigned(FOnExpanded) then FOnExpanded(Self, Node); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoExpanding(Node: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnExpanding) then FOnExpanding(Self, Node, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFocusChange(Node: PVirtualNode; Column: TColumnIndex); begin if Assigned(FOnFocusChanged) then FOnFocusChanged(Self, Node, Column); {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_NAMECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_VALUECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_STATECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_SELECTION, Handle, OBJID_CLIENT, CHILDID_SELF); NotifyWinEvent(EVENT_OBJECT_FOCUS, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoFocusChanging(OldNode, NewNode: PVirtualNode; OldColumn, NewColumn: TColumnIndex): Boolean; begin Result := (OldColumn = NewColumn) or FHeader.AllowFocus(NewColumn); if Assigned(FOnFocusChanging) then FOnFocusChanging(Self, OldNode, NewNode, OldColumn, NewColumn, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFocusNode(Node: PVirtualNode; Ask: Boolean); begin if not (tsEditing in FStates) or EndEditNode then begin if Node = FRoot then Node := nil; if (FFocusedNode <> Node) and (not Ask or DoFocusChanging(FFocusedNode, Node, FFocusedColumn, FFocusedColumn)) then begin if Assigned(FFocusedNode) then begin // Do automatic collapsing of last focused node if enabled. This is however only done if // old and new focused node have a common parent node. if (toAutoExpand in FOptions.FAutoOptions) and Assigned(Node) and (Node.Parent = FFocusedNode.Parent) and (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode) else InvalidateNode(FFocusedNode); end; FFocusedNode := Node; end; // Have to scroll the node into view, even it is the same node as before. if Assigned(FFocusedNode) then begin // Make sure a valid column is set if columns are used and no column has currently the focus. if FHeader.UseColumns and (not FHeader.FColumns.IsValidColumn(FFocusedColumn)) then FFocusedColumn := FHeader.MainColumn; // Do automatic expansion of the newly focused node if enabled. if (toAutoExpand in FOptions.FAutoOptions) and not (vsExpanded in FFocusedNode.States) then ToggleNode(FFocusedNode); InvalidateNode(FFocusedNode); if (FUpdateCount = 0) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then ScrollIntoView(FFocusedNode, (toCenterScrollIntoView in FOptions.SelectionOptions) and (MouseButtonDown * FStates = []), not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); end; // Reset range anchor if necessary. if FSelectionCount = 0 then ResetRangeAnchor; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoFreeNode(Node: PVirtualNode); begin if Node = FLastChangedNode then FLastChangedNode := nil; if Node = FCurrentHotNode then FCurrentHotNode := nil; if Node = FDropTargetNode then FDropTargetNode := nil; if Assigned(FOnFreeNode) and ([vsInitialized, vsInitialUserData] * Node.States <> []) then FOnFreeNode(Self, Node); FreeMem(Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; // Determines the margins of the content rectangle caused by DoBeforeCellPaint. // Note that shrinking the content rectangle results in positive margins whereas enlarging the content rectangle results // in negative margins. var CellRect, ContentRect: TRect; begin Result := Point(0, 0); if Assigned(FOnBeforeCellPaint) then // Otherwise DoBeforeCellPaint has no effect. begin if Canvas = nil then Canvas := Self.Canvas; // Determine then node's cell rectangle and content rectangle before calling DoBeforeCellPaint. CellRect := GetDisplayRect(Node, Column, True); ContentRect := CellRect; DoBeforeCellPaint(Canvas, Node, Column, cpmGetContentMargin, CellRect, ContentRect); // Calculate the changes caused by DoBeforeCellPaint. case CellContentMarginType of ccmtAllSides: // Calculate the width difference and high difference. Result := Point((CellRect.Right - CellRect.Left) - (ContentRect.Right - ContentRect.Left), (CellRect.Bottom - CellRect.Top) - (ContentRect.Bottom - ContentRect.Top)); ccmtTopLeftOnly: // Calculate the left margin and top margin only. Result := Point(ContentRect.Left - CellRect.Left, ContentRect.Top - CellRect.Top); ccmtBottomRightOnly: // Calculate the right margin and bottom margin only. Result := Point(CellRect.Right - ContentRect.Right, CellRect.Bottom - ContentRect.Bottom); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetCursor(var Cursor: TCursor); begin if Assigned(FOnGetCursor) then FOnGetCursor(Self, Cursor); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetHeaderCursor(var Cursor: HCURSOR); begin if Assigned(FOnGetHeaderCursor) then FOnGetHeaderCursor(FHeader, Cursor); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetImageIndex(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer): TCustomImageList; // Queries the application/descendant about certain image properties for a node. // Returns a custom image list if given by the callee, otherwise nil. begin Result := nil; // First try the enhanced event to allow for custom image lists. if Assigned(FOnGetImageEx) then FOnGetImageEx(Self, Node, Kind, Column, Ghosted, Index, Result) else if Assigned(FOnGetImage) then FOnGetImage(Self, Node, Kind, Column, Ghosted, Index); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var ImageText: String); // Queries the application/descendant about alternative image text for a node. begin if Assigned(FOnGetImageText) then FOnGetImageText(Self, Node, Kind, Column, ImageText); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetLineStyle(var Bits: Pointer); begin if Assigned(FOnGetLineStyle) then FOnGetLineStyle(Self, Bits); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := Hint; LineBreakStyle := hlbDefault; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := Hint; LineBreakStyle := hlbDefault; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; begin Result := 0; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoGetPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint): TPopupMenu; // Queries the application whether there is a node specific popup menu. var Run: PVirtualNode; AskParent: Boolean; begin Result := nil; if Assigned(FOnGetPopupMenu) then begin Run := Node; if Assigned(Run) then begin AskParent := True; repeat FOnGetPopupMenu(Self, Run, Column, Position, AskParent, Result); Run := Run.Parent; until (Run = FRoot) or Assigned(Result) or not AskParent; end else FOnGetPopupMenu(Self, nil, -1, Position, AskParent, Result); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoGetUserClipboardFormats(var Formats: TFormatEtcArray); begin if Assigned(FOnGetUserClipboardFormats) then FOnGetUserClipboardFormats(Self, Formats); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderClick) then FOnHeaderClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDblClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderDblClick) then FOnHeaderDblClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderImageClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderImageClick) then FOnHeaderImageClick(FHeader, Column, Button, Shift, X, Y) else if Assigned(FOnHeaderClick) then FOnHeaderClick(FHeader, Column, Button, Shift, X, Y) end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderCheckBoxClick(Column: TColumnIndex; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderCheckBoxClick) then FOnHeaderCheckBoxClick(FHeader, Column, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDragged(Column: TColumnIndex; OldPosition: TColumnPosition); begin if Assigned(FOnHeaderDragged) then FOnHeaderDragged(FHeader, Column, OldPosition); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDraggedOut(Column: TColumnIndex; const DropPosition: TPoint); begin if Assigned(FOnHeaderDraggedOut) then FOnHeaderDraggedOut(FHeader, Column, DropPosition); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoHeaderDragging(Column: TColumnIndex): Boolean; begin Result := True; if Assigned(FOnHeaderDragging) then FOnHeaderDragging(FHeader, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDraw(Canvas: TCanvas; Column: TVirtualTreeColumn; const R: TRect; Hover, Pressed: Boolean; DropMark: TVTDropMarkMode); begin if Assigned(FOnHeaderDraw) then FOnHeaderDraw(FHeader, Canvas, Column, R, Hover, Pressed, DropMark); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderDrawQueryElements(var PaintInfo: THeaderPaintInfo; var Elements: THeaderPaintElements); begin if Assigned(FOnHeaderDrawQueryElements) then FOnHeaderDrawQueryElements(FHeader, PaintInfo, Elements); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseDown) then FOnHeaderMouseDown(FHeader, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseMove(Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseMove) then FOnHeaderMouseMove(FHeader, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHeaderMouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Assigned(FOnHeaderMouseUp) then FOnHeaderMouseUp(FHeader, Button, Shift, X, Y); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoHotChange(Old, New: PVirtualNode); begin if Assigned(FOnHotChange) then FOnHotChange(Self, Old, New); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; begin Result := 0; if Assigned(FOnIncrementalSearch) then FOnIncrementalSearch(Self, Node, Text, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoInitChildren(Node: PVirtualNode; var ChildCount: Cardinal); begin if Assigned(FOnInitChildren) then FOnInitChildren(Self, Node, ChildCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoInitNode(Parent, Node: PVirtualNode; var InitStates: TVirtualNodeInitStates); begin if Assigned(FOnInitNode) then FOnInitNode(Self, Parent, Node, InitStates); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoKeyAction(var CharCode: Word; var Shift: TShiftState): Boolean; begin Result := True; if Assigned(FOnKeyAction) then FOnKeyAction(Self, CharCode, Shift, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoLoadUserData(Node: PVirtualNode; Stream: TStream); begin if Assigned(FOnLoadNode) then if Node = FRoot then FOnLoadNode(Self, nil, Stream) else FOnLoadNode(Self, Node, Stream); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoMeasureItem(TargetCanvas: TCanvas; Node: PVirtualNode; var NodeHeight: Integer); begin if Assigned(FOnMeasureItem) then FOnMeasureItem(Self, TargetCanvas, Node, NodeHeight); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoNodeCopied(Node: PVirtualNode); begin if Assigned(FOnNodeCopied) then FOnNodeCopied(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeCopying(Node, NewParent: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnNodeCopying) then FOnNodeCopying(Self, Node, NewParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeHeightDblClickResize(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; P: TPoint): Boolean; begin Result := True; if Assigned(FOnNodeHeightDblClickResize) then FOnNodeHeightDblClickResize(Self, Node, Column, Shift, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeHeightTracking(Node: PVirtualNode; Column: TColumnIndex; Shift: TShiftState; var TrackPoint: TPoint; P: TPoint): Boolean; begin Result := True; if Assigned(FOnNodeHeightTracking) then FOnNodeHeightTracking(Self, Node, Column, Shift, TrackPoint, P, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoNodeMoved(Node: PVirtualNode); begin if Assigned(FOnNodeMoved) then FOnNodeMoved(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoNodeMoving(Node, NewParent: PVirtualNode): Boolean; begin Result := True; if Assigned(FOnNodeMoving) then FOnNodeMoving(Self, Node, NewParent, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoPaintBackground(Canvas: TCanvas; const R: TRect): Boolean; begin Result := False; if Assigned(FOnPaintBackground) then FOnPaintBackground(Self, Canvas, R, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPaintDropMark(Canvas: TCanvas; Node: PVirtualNode; const R: TRect); // draws the drop mark into the given rectangle // Note: Changed properties of the given canvas should be reset to their previous values. var SaveBrushColor: TColor; SavePenStyle: TPenStyle; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoPaintDropMark');{$endif} if FLastDropMode in [dmAbove, dmBelow] then with Canvas do begin {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'DropMode in [dmAbove,dmBelow]');{$endif} SavePenStyle := Pen.Style; Pen.Style := psClear; SaveBrushColor := Brush.Color; Brush.Color := FColors.DropMarkColor; {$ifdef DEBUG_VTV}Logger.SendColor([lcDrag],'Brush.Color',Brush.Color);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'R',R);{$endif} if FLastDropMode = dmAbove then begin Polygon([Point(R.Left + 2, R.Top), Point(R.Right - 2, R.Top), Point(R.Right - 2, R.Top + 6), Point(R.Right - 6, R.Top + 2), Point(R.Left + 6 , R.Top + 2), Point(R.Left + 2, R.Top + 6) ]); end else Polygon([Point(R.Left + 2, R.Bottom - 1), Point(R.Right - 2, R.Bottom - 1), Point(R.Right - 2, R.Bottom - 8), Point(R.Right - 7, R.Bottom - 3), Point(R.Left + 7 , R.Bottom - 3), Point(R.Left + 2, R.Bottom - 8) ]); Brush.Color := SaveBrushColor; Pen.Style := SavePenStyle; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoPaintDropMark');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPaintNode(var PaintInfo: TVTPaintInfo); begin end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Position: TPoint); // Support for node dependent popup menus. var Menu: TPopupMenu; begin Menu := DoGetPopupMenu(Node, Column, Position); if Assigned(Menu) then begin DoStateChange([tsPopupMenuShown]); KillTimer(Handle, EditTimer); Menu.PopupComponent := Self; with ClientToScreen(Position) do Menu.Popup(X, Y); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoRenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HRESULT; begin Result := E_FAIL; if Assigned(FOnRenderOLEData) then FOnRenderOLEData(Self, FormatEtcIn, Medium, ForClipboard, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoReset(Node: PVirtualNode); begin if Assigned(FOnResetNode) then FOnResetNode(Self, Node); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoSaveUserData(Node: PVirtualNode; Stream: TStream); begin if Assigned(FOnSaveNode) then if Node = FRoot then FOnSaveNode(Self, nil, Stream) else FOnSaveNode(Self, Node, Stream); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoScroll(DeltaX, DeltaY: Integer); begin if Assigned(FOnScroll) then FOnScroll(Self, DeltaX, DeltaY); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoSetOffsetXY(Value: TPoint; Options: TScrollUpdateOptions; ClipRect: PRect = nil): Boolean; // Actual offset setter used to scroll the client area, update scroll bars and invalidating the header (all optional). // Returns True if the offset really changed otherwise False is returned. var DeltaX: Integer; DeltaY: Integer; DWPStructure: THandle;//HDWP; I: Integer; P: TPoint; R: TRect; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcScroll],'DoSetOffsetXY');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'Value',Value);{$endif} //{$ifdef DEBUG_VTV}Logger.SendCallStack([lcScroll],'CallStack');{$endif} // Range check, order is important here. if Value.X < (ClientWidth - Integer(FRangeX)) then Value.X := ClientWidth - Integer(FRangeX); if Value.X > 0 then Value.X := 0; DeltaX := Value.X - FOffsetX; if UseRightToLeftAlignment then DeltaX := -DeltaX; if Value.Y < (ClientHeight - Integer(FRangeY)) then Value.Y := ClientHeight - Integer(FRangeY); if Value.Y > 0 then Value.Y := 0; DeltaY := Value.Y - FOffsetY; {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'FOffsetX: %d FOffsetY: %d',[FOffsetX,FOffsetY]);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcScroll],'DeltaX: %d DeltaY: %d',[DeltaX,DeltaY]);{$endif} Result := (DeltaX <> 0) or (DeltaY <> 0); if Result then begin FOffsetX := Value.X; FOffsetY := Value.Y; Application.CancelHint; if FUpdateCount = 0 then begin // The drag image from VCL controls need special consideration. {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(False); {$endif} if (suoScrollClientArea in Options) and not (tsToggling in FStates) then begin // Have to invalidate the entire window if there's a background. if (toShowBackground in FOptions.FPaintOptions) and (FBackground.Graphic is TBitmap) then begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} // Since we don't use ScrollWindow here we have to move all client windows ourselves. DWPStructure := BeginDeferWindowPos(ControlCount); for I := 0 to ControlCount - 1 do if Controls[I] is TWinControl then begin with Controls[I] as TWinControl do DWPStructure := DeferWindowPos(DWPStructure, Handle, 0, Left + DeltaX, Top + DeltaY, 0, 0, SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOSIZE); if DWPStructure = 0 then Break; end; if DWPStructure <> 0 then EndDeferWindowPos(DWPStructure); InvalidateRect(Handle, nil, False); {$endif} end else begin if (DeltaX <> 0) and (Header.Columns.GetVisibleFixedWidth > 0) then begin // When fixed columns exists we have to scroll separately horizontally and vertically. // Horizontally is scroll only the client area not occupied by fixed columns and // vertically entire client area (or clipping area if one exists). R := ClientRect; R.Left := Header.Columns.GetVisibleFixedWidth; //lclheader if hoVisible in FHeader.FOptions then begin Inc(R.Top,FHeader.Height); Inc(R.Bottom,FHeader.Height); end; //scrollwindow implementation under gtk is broken {$ifdef Gtk} InvalidateRect(Handle, nil, True); {$else} ScrollWindow(Handle, DeltaX, 0, @R, @R); if DeltaY <> 0 then ScrollWindow(Handle, 0, DeltaY, @R, @R); {$endif} end else begin //lclheader if ClipRect <> nil then begin {$ifdef DEBUG_VTV}Logger.SendWarning([lcWarning], 'DoSetOffsetXY called with a non nil ClipRect');{$endif} R := ClipRect^; end else R := ClientRect; if hoVisible in FHeader.FOptions then begin Inc(R.Top, FHeader.Height); Inc(R.Bottom, FHeader.Height); end; {$ifdef DEBUG_VTV}Logger.Send([lcScroll], 'Rect to Scroll', R);{$endif} //todo: temporary hack to avoid some drawing problems. //Will be removed when scrollwindowex is properly implemented in all widgets {$ifdef LCLQt} ScrollWindow(Handle, DeltaX, DeltaY, @R, @R); {$else} {$ifdef Gtk} InvalidateRect(Handle, nil, True); {$else} ScrollWindowEx(Handle, DeltaX, DeltaY, @R, @R,0, nil, SW_INVALIDATE or SW_SCROLLCHILDREN); {$endif} {$endif} end; end; end; if suoUpdateNCArea in Options then begin if DeltaX <> 0 then begin if (suoRepaintHeader in Options) and (hoVisible in FHeader.FOptions) then FHeader.Invalidate(nil); if not (tsSizing in FStates) and (FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth]) then UpdateHorizontalScrollBar(suoRepaintScrollbars in Options); end; if (DeltaY <> 0) and ([tsThumbTracking, tsSizing] * FStates = []) then begin UpdateVerticalScrollBar(suoRepaintScrollbars in Options); if not (FHeader.UseColumns or IsMouseSelecting) and (FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth]) then UpdateHorizontalScrollBar(suoRepaintScrollbars in Options); end; end; {$ifndef INCOMPLETE_WINAPI} if tsVCLDragging in FStates then ImageList_DragShowNolock(True); {$endif} end; // Finally update "hot" node if hot tracking is activated GetCursorPos(P); P := ScreenToClient(P); if PtInRect(ClientRect, P) then HandleHotTrack(P.X, P.Y); DoScroll(DeltaX, DeltaY); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcScroll],'DoSetOffsetXY');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoShowScrollbar(Bar: Integer; Show: Boolean); begin {$ifdef UseFlatScrollbars} FlatSB_ShowScrollBar(Handle, Bar, Show); {$else} ShowScrollBar(Handle, Bar, Show); {$endif UseFlatScrollbars}; if Assigned(FOnShowScrollbar) then FOnShowScrollbar(Self, Bar, Show); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStartDrag(var DragObject: TDragObject); begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DoStartDrag');{$endif} {$ifdef DEBUG_VTV}Logger.SendCallStack([lcDrag],'Stack');{$endif} inherited; // Check if the application created an own drag object. This is needed to pass the correct source in // OnDragOver and OnDragDrop. if Assigned(DragObject) then DoStateChange([tsUserDragObject]); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DoStartDrag');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStateChange(Enter: TVirtualTreeStates; Leave: TVirtualTreeStates = []); var ActualEnter, ActualLeave: TVirtualTreeStates; begin if Assigned(FOnStateChange) then begin ActualEnter := Enter - FStates; ActualLeave := FStates * Leave; if (ActualEnter + ActualLeave) <> [] then FOnStateChange(Self, Enter, Leave); end; FStates := FStates + Enter - Leave; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoStructureChange(Node: PVirtualNode; Reason: TChangeReason); begin if HandleAllocated then KillTimer(Handle, StructureChangeTimer); if Assigned(FOnStructureChange) then FOnStructureChange(Self, Node, Reason); // This is a good place to reset the cached node and reason. These are the same as the values passed in here. // This is necessary to allow descendants to override this method and get them. DoStateChange([], [tsStructureChangePending]); FLastStructureChangeNode := nil; FLastStructureChangeReason := crIgnore; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoTimerScroll; var P, ClientP: TPoint; InRect, Panning: Boolean; R, ClipRect: TRect; DeltaX, DeltaY: Integer; begin GetCursorPos(P); //lclheader R := inherited GetClientRect; ClipRect := R; {$ifndef INCOMPLETE_WINAPI} MapWindowPoints(Handle, 0, R, 2); {$endif} InRect := PtInRect(R, P); ClientP := ScreenToClient(P); Panning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; if IsMouseSelecting or InRect or Panning or CanScroll(ClientP) then begin DeltaX := 0; DeltaY := 0; if sdUp in FScrollDirections then begin if Panning then DeltaY := FLastClickPos.Y - ClientP.Y - 8 else if InRect then DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight) else DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight) * Abs(R.Top - P.Y); if FOffsetY = 0 then Exclude(FScrollDirections, sdUp); end; if sdDown in FScrollDirections then begin if Panning then DeltaY := FLastClickPos.Y - ClientP.Y + 8 else if InRect then DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight) else DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight) * Abs(P.Y - R.Bottom); if (ClientHeight - FOffsetY) = Integer(FRangeY) then Exclude(FScrollDirections, sdDown); end; if sdLeft in FScrollDirections then begin if Panning then DeltaX := FLastClickPos.X - ClientP.X - 8 else if InRect then DeltaX := FScrollBarOptions.FIncrementX else DeltaX := FScrollBarOptions.FIncrementX * Abs(R.Left - P.X); if FEffectiveOffsetX = 0 then Exclude(FScrollDirections, sdleft); end; if sdRight in FScrollDirections then begin if Panning then DeltaX := FLastClickPos.X - ClientP.X + 8 else if InRect then DeltaX := -FScrollBarOptions.FIncrementX else DeltaX := -FScrollBarOptions.FIncrementX * Abs(P.X - R.Right); if (ClientWidth + FEffectiveOffsetX) = Integer(FRangeX) then Exclude(FScrollDirections, sdRight); end; if UseRightToLeftAlignment then DeltaX := - DeltaX; if IsMouseSelecting then begin // In order to avoid scrolling the area which needs a repaint due to the changed selection rectangle // we limit the scroll area explicitely. OffsetRect(ClipRect, DeltaX, DeltaY); DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), DefaultScrollUpdateFlags, @ClipRect); // When selecting with the mouse then either update only the parts of the window which have been uncovered // by the scroll operation if no change in the selection happend or invalidate and redraw the entire // client area otherwise (to avoid the time consuming task of determining the display rectangles of every // changed node). if CalculateSelectionRect(ClientP.X, ClientP.Y) and HandleDrawSelection(ClientP.X, ClientP.Y) then InvalidateRect(Handle, nil, False) else begin // The selection did not change so invalidate only the part of the window which really needs an update. // 1) Invalidate the parts uncovered by the scroll operation. Add another offset range, we have to // scroll only one stripe but have to update two. OffsetRect(ClipRect, DeltaX, DeltaY); SubtractRect(ClipRect, ClientRect, ClipRect); InvalidateRect(Handle, @ClipRect, False); // 2) Invalidate the selection rectangles. UnionRect(ClipRect, OrderRect(FNewSelRect), OrderRect(FLastSelRect)); OffsetRect(ClipRect, FOffsetX, FOffsetY); InvalidateRect(Handle, @ClipRect, False); end; end else begin // Scroll only if there is no drag'n drop in progress. Drag'n drop scrolling is handled in DragOver. if ((FDragManager = nil) or not VTVDragManager.IsDropTarget) and ((DeltaX <> 0) or (DeltaY <> 0)) then DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), DefaultScrollUpdateFlags, nil); end; UpdateWindow(Handle); if (FScrollDirections = []) and ([tsWheelPanning, tsWheelScrolling] * FStates = []) then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DoUpdating(State: TVTUpdateState); begin if Assigned(FOnUpdating) then FOnUpdating(Self, State); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DoValidateCache: Boolean; // This method fills the cache, which is used to speed up searching for nodes. // The strategy is simple: Take the current number of visible nodes and distribute evenly a number of marks // (which are stored in FPositionCache) so that iterating through the tree doesn't cost too much time. // If there are less than 'CacheThreshold' nodes in the tree then the cache remains empty. // Result is True if the cache was filled without interruption, otherwise False. // Note: You can adjust the maximum number of nodes between two cache entries by changing CacheThreshold. var EntryCount, CurrentTop, Index: Cardinal; CurrentNode, Temp: PVirtualNode; begin EntryCount := 0; if not (tsStopValidation in FStates) then begin if FStartIndex = 0 then FPositionCache := nil; if FVisibleCount > CacheThreshold then begin EntryCount := CalculateCacheEntryCount; SetLength(FPositionCache, EntryCount); if FStartIndex > EntryCount then FStartIndex := EntryCount; // Optimize validation by starting with FStartIndex if set. if (FStartIndex > 0) and Assigned(FPositionCache[FStartIndex - 1].Node) then begin // Index is the current entry in FPositionCache. Index := FStartIndex - 1; // Running term for absolute top value. CurrentTop := FPositionCache[Index].AbsoluteTop; // Running node pointer. CurrentNode := FPositionCache[Index].Node; end else begin // Index is the current entry in FPositionCache. Index := 0; // Running term for absolute top value. CurrentTop := 0; // Running node pointer. CurrentNode := GetFirstVisibleNoInit(nil, True); end; // EntryCount serves as counter for processed nodes here. This value can always start at 0 as // the validation either starts also at index 0 or an index which is always a multiple of CacheThreshold // and EntryCount is only used with modulo CacheThreshold. EntryCount := 0; if Assigned(CurrentNode) then begin while not (tsStopValidation in FStates) do begin if (EntryCount mod CacheThreshold) = 0 then begin // New cache entry to set up. with FPositionCache[Index] do begin Node := CurrentNode; AbsoluteTop := CurrentTop; end; Inc(Index); end; Inc(CurrentTop, NodeHeight[CurrentNode]); // Advance to next visible node. Temp := GetNextVisibleNoInit(CurrentNode, True); // If there is no further node or the cache is full then stop the loop. if (Temp = nil) or (Integer(Index) = Length(FPositionCache)) then Break; CurrentNode := Temp; Inc(EntryCount); end; end; // Finalize the position cache so no nil entry remains there. if not (tsStopValidation in FStates) and (Integer(Index) <= High(FPositionCache)) then begin SetLength(FPositionCache, Index + 1); with FPositionCache[Index] do begin Node := CurrentNode; AbsoluteTop := CurrentTop; end; end; end; end; Result := (EntryCount > 0) and not (tsStopValidation in FStates); // In variable node height mode it might have happend that some or all of the nodes have been adjusted in their // height. During validation updates of the scrollbars is disabled so let's do this here. if Result and (toVariableNodeHeight in FOptions.FMiscOptions) then UpdateScrollbars(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragAndDrop(AllowedEffects: LongWord; DataObject: IDataObject; DragEffect: LongWord); begin {$ifdef Windows} ActiveX.DoDragDrop(DataObject, VTVDragManager as IDropSource, AllowedEffects, @DragEffect); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragCanceled; // Does some housekeeping for VCL drag'n drop; begin inherited; DragFinished; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragDrop(const DataObject: IDataObject; KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; var Shift: TShiftState; EnumFormat: IEnumFormatEtc; Fetched: LongWord; OLEFormat: TFormatEtc; Formats: TFormatArray; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragDrop');{$endif} KillTimer(Handle, ExpandTimer); KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); Formats := nil; // Ask explicitly again whether the action is allowed. Otherwise we may accept a drop which is intentionally not // allowed but cannot be prevented by the application because when the tree was scrolling while dropping // no DragOver event is created by the OLE subsystem. Result := DragOver(VTVDragManager.DragSource, KeyState, dsDragMove, Pt, Effect); try if (Result <> NOERROR) or ((Effect and not DROPEFFECT_SCROLL) = DROPEFFECT_NONE) then Result := E_FAIL else begin try Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); Pt := ScreenToClient(Pt); // Determine which formats we can get and pass them along with the data object to the drop handler. Result := DataObject.EnumFormatEtc(DATADIR_GET, EnumFormat); if Failed(Result) then Abort; Result := EnumFormat.Reset; if Failed(Result) then Abort; // create a list of available formats while EnumFormat.Next(1, OLEFormat, @Fetched) = S_OK do begin SetLength(Formats, Length(Formats) + 1); Formats[High(Formats)] := OLEFormat.cfFormat; end; DoDragDrop(VTVDragManager.DragSource, DataObject, Formats, Shift, Pt, Effect, FLastDropMode); except // An unhandled exception here leaks memory. Application.HandleException(Self); Result := E_UNEXPECTED; end; end; finally if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragDrop');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragEnter(KeyState: LongWord; Pt: TPoint; var Effect: LongWord): HResult; // callback routine for the drop target interface var Shift: TShiftState; Accept: Boolean; R: TRect; HitInfo: THitInfo; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragEnter');{$endif} try // Determine acceptance of drag operation and reset scroll start time. FDragScrollStart := 0; Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); Pt := ScreenToClient(Pt); Effect := SuggestDropEffect(VTVDragManager.DragSource, Shift, Pt, Effect); Accept := DoDragOver(VTVDragManager.DragSource, Shift, dsDragEnter, Pt, FLastDropMode, Effect); if not Accept then Effect := DROPEFFECT_NONE else begin // Set initial drop target node and drop mode. GetHitTestInfoAt(Pt.X, Pt.Y, True, HitInfo); if Assigned(HitInfo.HitNode) then begin FDropTargetNode := HitInfo.HitNode; R := GetDisplayRect(HitInfo.HitNode, FHeader.MainColumn, False); if hiOnItemLabel in HitInfo.HitPositions then FLastDropMode := dmOnNode else if ((R.Top + R.Bottom) div 2) > Pt.Y then FLastDropMode := dmAbove else FLastDropMode := dmBelow; end else FLastDropMode := dmNowhere; end; // If the drag source is a virtual tree then we know how to control the drag image // and can show it even if the source is not the target tree. // This is only necessary if we cannot use the drag image helper interfaces. if not VTVDragManager.DropTargetHelperSupported and Assigned(VTVDragManager.DragSource) then TBaseVirtualTree(VTVDragManager.DragSource).FDragImage.ShowDragImage; Result := NOERROR; except Result := E_UNEXPECTED; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragEnter');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragFinished; // Called by DragCancelled or EndDrag to make up for the still missing mouse button up messages. // These are important for such important things like popup menus. var P: TPoint; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragFinished');{$endif} DoStateChange([], [tsVCLDragPending, tsVCLDragging, tsUserDragObject]); GetCursorPos(P); P := ScreenToClient(P); if tsRightButtonDown in FStates then Perform(LM_RBUTTONUP, 0, Longint(PointToSmallPoint(P))) else if tsMiddleButtonDown in FStates then Perform(LM_MBUTTONUP, 0, Longint(PointToSmallPoint(P))) else Perform(LM_LBUTTONUP, 0, Longint(PointToSmallPoint(P))); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragFinished');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DragLeave; var Effect: LongWord; begin KillTimer(Handle, ExpandTimer); if not VTVDragManager.DropTargetHelperSupported and Assigned(VTVDragManager.DragSource) then TBaseVirtualTree(VTVDragManager.DragSource).FDragImage.HideDragImage; if Assigned(FDropTargetNode) then begin InvalidateNode(FDropTargetNode); FDropTargetNode := nil; end; UpdateWindow(Handle); Effect := 0; DoDragOver(nil, [], dsDragLeave, Point(0, 0), FLastDropMode, Effect); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.DragOver(Source: TObject; KeyState: LongWord; DragState: TDragState; Pt: TPoint; var Effect: LongWord): HResult; // callback routine for the drop target interface var Shift: TShiftState; Accept, DragImageWillMove, WindowScrolled: Boolean; OldR, R: TRect; NewDropMode: TDropMode; HitInfo: THitInfo; ImageHit: Boolean; LabelHit: Boolean; DragPos: TPoint; Tree: TBaseVirtualTree; LastNode: PVirtualNode; DeltaX, DeltaY: Integer; ScrollOptions: TScrollUpdateOptions; begin //{$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'DragOver');{$endif} //todo: the check to FDragManager disable drag images in non windows. //This should be reviewed as soon as drag image is implemented in non windows if Assigned(FDragManager) and not VTVDragManager.DropTargetHelperSupported and (Source is TBaseVirtualTree) then begin Tree := Source as TBaseVirtualTree; ScrollOptions := [suoUpdateNCArea]; end else begin Tree := nil; ScrollOptions := DefaultScrollUpdateFlags; end; try DragPos := Pt; Pt := ScreenToClient(Pt); //{$ifdef DEBUG_VTV}Logger.Send([lcDrag],'Pt',Pt);{$endif} // Check if we have to scroll the client area. FScrollDirections := DetermineScrollDirections(Pt.X, Pt.Y); DeltaX := 0; DeltaY := 0; if FScrollDirections <> [] then begin // Determine amount to scroll. if sdUp in FScrollDirections then begin DeltaY := Min(FScrollBarOptions.FIncrementY, ClientHeight); if FOffsetY = 0 then Exclude(FScrollDirections, sdUp); end; if sdDown in FScrollDirections then begin DeltaY := -Min(FScrollBarOptions.FIncrementY, ClientHeight); if (ClientHeight - FOffsetY) = Integer(FRangeY) then Exclude(FScrollDirections, sdDown); end; if sdLeft in FScrollDirections then begin DeltaX := FScrollBarOptions.FIncrementX; if FEffectiveOffsetX = 0 then Exclude(FScrollDirections, sdleft); end; if sdRight in FScrollDirections then begin DeltaX := -FScrollBarOptions.FIncrementX; if (ClientWidth + FEffectiveOffsetX) = Integer(FRangeX) then Exclude(FScrollDirections, sdRight); end; WindowScrolled := DoSetOffsetXY(Point(FOffsetX + DeltaX, FOffsetY + DeltaY), ScrollOptions, nil); end else WindowScrolled := False; // Determine acceptance of drag operation as well as drag target. Shift := KeysToShiftState(KeyState); if tsLeftButtonDown in FStates then Include(Shift, ssLeft); if tsMiddleButtonDown in FStates then Include(Shift, ssMiddle); if tsRightButtonDown in FStates then Include(Shift, ssRight); GetHitTestInfoAt(Pt.X, Pt.Y, True, HitInfo); ImageHit := HitInfo.HitPositions * [hiOnNormalIcon, hiOnStateIcon] <> []; LabelHit := hiOnItemLabel in HitInfo.HitPositions; // In report mode only direct hits of the node captions/images in the main column are accepted as hits. if (toReportMode in FOptions.FMiscOptions) and not ((LabelHit or ImageHit) and (HitInfo.HitColumn = FHeader.MainColumn)) then HitInfo.HitNode := nil; if Assigned(HitInfo.HitNode) then begin R := GetDisplayRect(HitInfo.HitNode, NoColumn, False); if LabelHit or ImageHit or not (toShowDropmark in FOptions.FPaintOptions) then NewDropMode := dmOnNode else if ((R.Top + R.Bottom) div 2) > Pt.Y then NewDropMode := dmAbove else NewDropMode := dmBelow; end else begin NewDropMode := dmNowhere; R := Rect(0, 0, 0, 0); end; if Assigned(Tree) then DragImageWillMove := Tree.FDragImage.WillMove(DragPos) else DragImageWillMove := False; if (HitInfo.HitNode <> FDropTargetNode) or (FLastDropMode <> NewDropMode) then begin // Something in the tree will change. This requires to update the screen and/or the drag image. FLastDropMode := NewDropMode; if HitInfo.HitNode <> FDropTargetNode then begin KillTimer(Handle, ExpandTimer); // The last target node is needed for the rectangle determination but must already be set for // the recapture call, hence it must be stored somewhere. LastNode := FDropTargetNode; FDropTargetNode := HitInfo.HitNode; // In order to show a selection rectangle a column must be focused. if FFocusedColumn <= NoColumn then FFocusedColumn := FHeader.MainColumn; if Assigned(LastNode) and Assigned(FDropTargetNode) then begin // Optimize the case that the selection moved between two nodes. OldR := GetDisplayRect(LastNode, NoColumn, False); UnionRect(R, R, OldR); if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, True, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end else begin if Assigned(LastNode) then begin // Repaint last target node. OldR := GetDisplayRect(LastNode, NoColumn, False); if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, OldR, False, not DragImageWillMove); end else InvalidateRect(Handle, @OldR, False); end else begin if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end; end; // Start auto expand timer if necessary. if (toAutoDropExpand in FOptions.FAutoOptions) and Assigned(FDropTargetNode) and (vsHasChildren in FDropTargetNode.States) then SetTimer(Handle, ExpandTimer, FAutoExpandDelay, nil); end else begin // Only the drop mark position changed so invalidate the current drop target node. if Assigned(Tree) then begin if WindowScrolled then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove) else UpdateWindowAndDragImage(Tree, R, False, not DragImageWillMove); end else InvalidateRect(Handle, @R, False); end; end else begin // No change in the current drop target or drop mode. This might still mean horizontal or vertical scrolling. if Assigned(Tree) and ((DeltaX <> 0) or (DeltaY <> 0)) then UpdateWindowAndDragImage(Tree, ClientRect, WindowScrolled, not DragImageWillMove); end; Update; if Assigned(Tree) and DragImageWillMove then Tree.FDragImage.DragTo(DragPos, False); Effect := SuggestDropEffect(Source, Shift, Pt, Effect); Accept := DoDragOver(Source, Shift, DragState, Pt, FLastDropMode, Effect); if not Accept then Effect := DROPEFFECT_NONE; if WindowScrolled then Effect := Effect or LongWord(DROPEFFECT_SCROLL); Result := NOERROR; except Result := E_UNEXPECTED; end; //{$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'DragOver');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawDottedHLine(const PaintInfo: TVTPaintInfo; Left, Right, Top: Integer); // Draws a horizontal line with alternating pixels (this style is not supported for pens under Win9x). var R: TRect; begin with PaintInfo, Canvas do begin Brush.Color := Self.Brush.Color; R := Rect(Min(Left, Right), Top, Max(Left, Right) + 1, Top + 1); LCLIntf.FillRect(Handle, R, FDottedBrush); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DrawDottedVLine(const PaintInfo: TVTPaintInfo; Top, Bottom, Left: Integer); // Draws a vertical line with alternating pixels (this style is not supported for pens under Win9x). var R: TRect; begin with PaintInfo, Canvas do begin Brush.Color := Self.Brush.Color; R := Rect(Left, Min(Top, Bottom), Left + 1, Max(Top, Bottom) + 1); LCLIntf.FillRect(Handle, R, FDottedBrush); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndOperation; // Called to indicate that a long-running operation has finished. begin Assert(FOperationCount > 0, 'EndOperation must not be called when no operation in progress.'); Dec(FOperationCount); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.FindNodeInSelection(P: PVirtualNode; out Index: Integer; LowBound, HighBound: Integer): Boolean; // Search routine to find a specific node in the selection array. // LowBound and HighBound determine the range in which to search the node. // Either value can be -1 to denote the maximum range otherwise LowBound must be less or equal HighBound. var L, H, I, C: PtrInt; begin Result := False; L := 0; if LowBound >= 0 then L := LowBound; H := FSelectionCount - 1; if HighBound >= 0 then H := HighBound; while L <= H do begin I := (L + H) shr 1; C := PtrInt(FSelection[I]) - PtrInt(P); if C < 0 then L := I + 1 else begin H := I - 1; if C = 0 then begin Result := True; L := I; end; end; end; Index := L; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FinishChunkHeader(Stream: TStream; StartPos, EndPos: Integer); // used while streaming out a node to finally write out the size of the chunk var Size: Integer; begin // seek back to the second entry in the chunk header Stream.Position := StartPos + SizeOf(Integer); // determine size of chunk without the chunk header Size := EndPos - StartPos - SizeOf(TChunkHeader); // write the size... Stream.Write(Size, SizeOf(Size)); // ... and seek to the last endposition Stream.Position := EndPos; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FontChanged(AFont: TObject); // Little helper function for font changes (as they are not tracked in TBitmap/TCanvas.OnChange). begin FFontChanged := True; FOldFontChange(AFont); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetBorderDimensions: TSize; // Returns the overall width of the current window border, depending on border styles. // Note: these numbers represent the system's standards not special properties, which can be set for TWinControl // (e.g. bevels, border width). var Styles: Integer; begin Result.cx := 0; Result.cy := 0; Styles := GetWindowLong(Handle, GWL_STYLE); if (Styles and WS_BORDER) <> 0 then begin Dec(Result.cx); Dec(Result.cy); end; if (Styles and WS_THICKFRAME) <> 0 then begin Dec(Result.cx, GetSystemMetrics(SM_CXFIXEDFRAME)); Dec(Result.cy, GetSystemMetrics(SM_CYFIXEDFRAME)); end; Styles := GetWindowLong(Handle, GWL_EXSTYLE); if (Styles and WS_EX_CLIENTEDGE) <> 0 then begin Dec(Result.cx, GetSystemMetrics(SM_CXEDGE)); Dec(Result.cy, GetSystemMetrics(SM_CYEDGE)); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetCheckImage(Node: PVirtualNode; ImgCheckType: TCheckType = ctNone; ImgCheckState: TCheckState = csUncheckedNormal; ImgEnabled: Boolean = False): Integer; // Determines the index into the check image list for the given node depending on the check type // and enabled state. const // Four dimensional array consisting of image indices for the check type, the check state, the enabled state and the // hot state. CheckStateToCheckImage: array[ctCheckBox..ctButton, csUncheckedNormal..csMixedPressed, Boolean, Boolean] of Integer = ( // ctCheckBox, ctTriStateCheckBox ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckCheckUncheckedDisabled, ckCheckUncheckedDisabled), (ckCheckUncheckedNormal, ckCheckUncheckedHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckCheckUncheckedDisabled, ckCheckUncheckedDisabled), (ckCheckUncheckedPressed, ckCheckUncheckedPressed)), // csCheckedNormal ((ckCheckCheckedDisabled, ckCheckCheckedDisabled), (ckCheckCheckedNormal, ckCheckCheckedHot)), // csCheckedPressed ((ckCheckCheckedDisabled, ckCheckCheckedDisabled), (ckCheckCheckedPressed, ckCheckCheckedPressed)), // csMixedNormal ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ), // ctRadioButton ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckRadioUncheckedDisabled, ckRadioUncheckedDisabled), (ckRadioUncheckedNormal, ckRadioUncheckedHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckRadioUncheckedDisabled, ckRadioUncheckedDisabled), (ckRadioUncheckedPressed, ckRadioUncheckedPressed)), // csCheckedNormal ((ckRadioCheckedDisabled, ckRadioCheckedDisabled), (ckRadioCheckedNormal, ckRadioCheckedHot)), // csCheckedPressed ((ckRadioCheckedDisabled, ckRadioCheckedDisabled), (ckRadioCheckedPressed, ckRadioCheckedPressed)), // csMixedNormal (should never appear with ctRadioButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed (should never appear with ctRadioButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ), // ctButton ( // csUncheckedNormal (disabled [not hot, hot], enabled [not hot, hot]) ((ckButtonDisabled, ckButtonDisabled), (ckButtonNormal, ckButtonHot)), // csUncheckedPressed (disabled [not hot, hot], enabled [not hot, hot]) ((ckButtonDisabled, ckButtonDisabled), (ckButtonPressed, ckButtonPressed)), // csCheckedNormal ((ckButtonDisabled, ckButtonDisabled), (ckButtonNormal, ckButtonHot)), // csCheckedPressed ((ckButtonDisabled, ckButtonDisabled), (ckButtonPressed, ckButtonPressed)), // csMixedNormal (should never appear with ctButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedNormal, ckCheckMixedHot)), // csMixedPressed (should never appear with ctButton) ((ckCheckMixedDisabled, ckCheckMixedDisabled), (ckCheckMixedPressed, ckCheckMixedPressed)) ) ); var AType: TCheckType; begin if not Assigned(Node) then Result := CheckStateToCheckImage[ImgCheckType, ImgCheckState, ImgEnabled, False] else if Node.CheckType = ctNone then Result := -1 else begin AType := Node.CheckType; if AType = ctTriStateCheckBox then AType := ctCheckBox; Result := CheckStateToCheckImage[AType, Node.CheckState, not (vsDisabled in Node.States) and Enabled, Node = FCurrentHotNode]; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CheckImageListNeeded; begin if FCheckImages <> nil then Exit; if FCheckImageKind = ckCustom then FCheckImages := FCustomCheckImages else begin FCheckImages := TBitmap.Create; FCheckImages.Transparent := True; FCheckImages.LoadFromLazarusResource(CheckImagesStrings[FCheckImageKind]); end; end; function TBaseVirtualTree.GetClientRect: TRect; begin Result := inherited; //lclheader if HandleAllocated and (hoVisible in FHeader.FOptions) then Dec(Result.Bottom, FHeader.Height); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetColumnClass: TVirtualTreeColumnClass; begin Result := TVirtualTreeColumn; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHeaderClass: TVTHeaderClass; begin Result := TVTHeader; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetHintWindowClass: THintWindowClass; // Returns the default hint window class used for the tree. Descendants can override it to use their own classes. begin Result := TVirtualTreeHintWindow; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetImageIndex(var Info: TVTPaintInfo; Kind: TVTImageKind; InfoIndex: TVTImageInfoIndex; DefaultImages: TCustomImageList); // Retrieves the image index and an eventual customized image list for drawing. var CustomImages: TCustomImageList; begin with Info do begin ImageInfo[InfoIndex].Index := -1; ImageInfo[InfoIndex].Ghosted := False; CustomImages := DoGetImageIndex(Node, Kind, Column, ImageInfo[InfoIndex].Ghosted, ImageInfo[InfoIndex].Index); if Assigned(CustomImages) then ImageInfo[InfoIndex].Images := CustomImages else ImageInfo[InfoIndex].Images := DefaultImages; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMaxRightExtend: Cardinal; // Determines the maximum with of the currently visible part of the tree, depending on the length // of the node texts. This method is used for determining the horizontal scroll range if no columns are used. var Node, NextNode: PVirtualNode; TopPosition: Integer; NodeLeft, CurrentWidth: Integer; WithCheck: Boolean; CheckOffset: Integer; begin Node := InternalGetNodeAt(0, 0, True, TopPosition); Result := 0; if toShowRoot in FOptions.FPaintOptions then NodeLeft := (GetNodeLevel(Node) + 1) * FIndent else NodeLeft := GetNodeLevel(Node) * FIndent; if Assigned(FStateImages) then Inc(NodeLeft, FStateImages.Width + 2); if Assigned(FImages) then Inc(NodeLeft, FImages.Width + 2); WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); if WithCheck then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; while Assigned(Node) do begin if not (vsInitialized in Node.States) then InitNode(Node); if WithCheck and (Node.CheckType <> ctNone) then Inc(NodeLeft, CheckOffset); CurrentWidth := DoGetNodeWidth(Node, NoColumn); if Integer(Result) < (NodeLeft + CurrentWidth) then Result := NodeLeft + CurrentWidth; Inc(TopPosition, NodeHeight[Node]); //lclheader: Height -> ClientHeight if TopPosition > ClientHeight then Break; if WithCheck and (Node.CheckType <> ctNone) then Dec(NodeLeft, CheckOffset); // Get next visible node and update left node position. NextNode := GetNextVisible(Node, True); if NextNode = nil then Break; Inc(NodeLeft, CountLevelDifference(Node, NextNode) * Integer(FIndent)); Node := NextNode; end; Inc(Result, FMargin); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetNativeClipboardFormats(var Formats: TFormatEtcArray); // Returns the supported clipboard formats of the tree. begin InternalClipboardFormats.EnumerateFormats(TVirtualTreeClass(ClassType), Formats, FClipboardFormats); // Ask application/descendants for self defined formats. DoGetUserClipboardFormats(Formats); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOperationCanceled; begin Result := FOperationCanceled and (FOperationCount > 0); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetOptionsClass: TTreeOptionsClass; begin Result := TCustomVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- {$i olemethods.inc} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleHotTrack(X, Y: Integer); // Updates the current "hot" node. var HitInfo: THitInfo; CheckPositions: THitPositions; ButtonIsHit, DoInvalidate: Boolean; begin DoInvalidate := False; // Get information about the hit. GetHitTestInfoAt(X, Y, True, HitInfo); // Only make the new node being "hot" if its label is hit or full row selection is enabled. CheckPositions := [hiOnItemLabel, hiOnItemCheckbox]; // If running under Windows Vista using the explorer theme hitting the buttons makes the node hot, too. if (IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions)) then Include(CheckPositions, hiOnItemButtonExact); if (CheckPositions * HitInfo.HitPositions = []) and not (toFullRowSelect in FOptions.FSelectionOptions) then HitInfo.HitNode := nil; if (HitInfo.HitNode <> FCurrentHotNode) or (HitInfo.HitColumn <> FCurrentHotColumn) then begin DoInvalidate := (toHotTrack in FOptions.PaintOptions) or (toCheckSupport in FOptions.FMiscOptions); DoHotChange(FCurrentHotNode, HitInfo.HitNode); if Assigned(FCurrentHotNode) and DoInvalidate then InvalidateNode(FCurrentHotNode); FCurrentHotNode := HitInfo.HitNode; FCurrentHotColumn := HitInfo.HitColumn; end; ButtonIsHit := (hiOnItemButtonExact in HitInfo.HitPositions) and (toHotTrack in FOptions.FPaintOptions); if Assigned(FCurrentHotNode) and ((FHotNodeButtonHit <> ButtonIsHit) or DoInvalidate) then begin FHotNodeButtonHit := ButtonIsHit and (toHotTrack in FOptions.FPaintOptions); InvalidateNode(FCurrentHotNode); end else if not Assigned(FCurrentHotNode) then FHotNodeButtonHit := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleIncrementalSearch(CharCode: Word); var Run, Stop: PVirtualNode; GetNextNode: TGetNextNodeProc; NewSearchText: String; SingleLetter, PreviousSearch: Boolean; // True if VK_BACK was sent. SearchDirection: TVTSearchDirection; //--------------- local functions ------------------------------------------- procedure SetupNavigation; // If the search buffer is empty then we start searching with the next node after the last one, otherwise // we continue with the last one. Node navigation function is set up too here, to avoid frequent checks. var FindNextNode: Boolean; begin FindNextNode := (Length(FSearchBuffer) = 0) or (Run = nil) or SingleLetter or PreviousSearch; case FIncrementalSearch of isVisibleOnly: if SearchDirection = sdForward then begin GetNextNode := GetNextVisible; if FindNextNode then begin if Run = nil then Run := GetFirstVisible(nil, True) else begin Run := GetNextVisible(Run, True); // Do wrap around. if Run = nil then Run := GetFirstVisible(nil, True); end; end; end else begin GetNextNode := GetPreviousVisible; if FindNextNode then begin if Run = nil then Run := GetLastVisible(nil, True) else begin Run := GetPreviousVisible(Run, True); // Do wrap around. if Run = nil then Run := GetLastVisible(nil, True); end; end; end; isInitializedOnly: if SearchDirection = sdForward then begin GetNextNode := GetNextNoInit; if FindNextNode then begin if Run = nil then Run := GetFirstNoInit else begin Run := GetNextNoInit(Run); // Do wrap around. if Run = nil then Run := GetFirstNoInit; end; end; end else begin GetNextNode := GetPreviousNoInit; if FindNextNode then begin if Run = nil then Run := GetLastNoInit else begin Run := GetPreviousNoInit(Run); // Do wrap around. if Run = nil then Run := GetLastNoInit; end; end; end; else // isAll if SearchDirection = sdForward then begin GetNextNode := GetNext; if FindNextNode then begin if Run = nil then Run := GetFirst else begin Run := GetNext(Run); // Do wrap around. if Run = nil then Run := GetFirst; end; end; end else begin GetNextNode := GetPrevious; if FindNextNode then begin if Run = nil then Run := GetLast else begin Run := GetPrevious(Run); // Do wrap around. if Run = nil then Run := GetLast; end; end; end; end; end; //--------------------------------------------------------------------------- //todo: reimplement {$ifndef INCOMPLETE_WINAPI} function CodePageFromLocale(Language: DWord): Integer; // Determines the code page for a given locale. // Unfortunately there is no easier way than this, currently. var Buf: array[0..6] of Char; begin GetLocaleInfo(Language, LOCALE_IDEFAULTANSICODEPAGE, Buf, 6); Result := StrToIntDef(Buf, GetACP); end; //--------------------------------------------------------------------------- function KeyUnicode(C: Char): WideChar; // Converts the given character into its corresponding Unicode character // depending on the active keyboard layout. begin MultiByteToWideChar(CodePageFromLocale(GetKeyboardLayout(0) and $FFFF), MB_USEGLYPHCHARS, @C, 1, @Result, 1); end; {$endif} //--------------- end local functions --------------------------------------- var FoundMatch: Boolean; NewChar: WideChar; begin //todo: handle correctly unicode char after WideString -> String conversion KillTimer(Handle, SearchTimer); if FIncrementalSearch <> isNone then begin if CharCode <> 0 then begin DoStateChange([tsIncrementalSearching]); // Convert the given virtual key code into a Unicode character based on the current locale. //todo: reimplement {$ifndef INCOMPLETE_WINAPI} NewChar := KeyUnicode(Char(CharCode)); {$else} NewChar := Char(CharCode); {$endif} PreviousSearch := NewChar = WideChar(VK_BACK); // We cannot do a search with an empty search buffer. if not PreviousSearch or (FSearchBuffer <> '') then begin // Determine which method to use to advance nodes and the start node to search from. case FSearchStart of ssAlwaysStartOver: Run := nil; ssFocusedNode: Run := FFocusedNode; else // ssLastHit Run := FLastSearchNode; end; // Make sure the start node corresponds to the search criterion. if Assigned(Run) then begin case FIncrementalSearch of isInitializedOnly: if not (vsInitialized in Run.States) then Run := nil; isVisibleOnly: if not FullyVisible[Run] then Run := nil; end; end; Stop := Run; // VK_BACK temporarily changes search direction to opposite mode. if PreviousSearch then begin if SearchDirection = sdBackward then SearchDirection := sdForward else SearchDirection := sdBackward end else SearchDirection := FSearchDirection; // The "single letter mode" is used to advance quickly from node to node when pressing the same key several times. SingleLetter := (Length(FSearchBuffer) = 1) and not PreviousSearch and (FSearchBuffer[1] = NewChar); // However if the current hit (if there is one) would fit also with a repeated character then // don't use single letter mode. if SingleLetter and (DoIncrementalSearch(Run, FSearchBuffer + NewChar) = 0) then SingleLetter := False; SetupNavigation; FoundMatch := False; if Assigned(Run) then begin if SingleLetter then NewSearchText := FSearchBuffer else if PreviousSearch then begin SetLength(FSearchBuffer, Length(FSearchBuffer) - 1); NewSearchText := FSearchBuffer; end else NewSearchText := FSearchBuffer + NewChar; repeat if DoIncrementalSearch(Run, NewSearchText) = 0 then begin FoundMatch := True; Break; end; // Advance to next node if we have not found a match. Run := GetNextNode(Run); // Do wrap around start or end of tree. if (Run <> Stop) and (Run = nil) then SetupNavigation; until Run = Stop; end; if FoundMatch then begin ClearSelection; FSearchBuffer := NewSearchText; FLastSearchNode := Run; FocusedNode := Run; Selected[Run] := True; FLastSearchNode := Run; end else // Play an acoustic signal if nothing could be found but don't beep if only the currently // focused node matches. if Assigned(Run) and (DoIncrementalSearch(Run, NewSearchText) <> 0) then Beep; end; end; // Restart search timeout interval. SetTimer(Handle, SearchTimer, FSearchTimeout, nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseDblClick(var Message: TLMMouse; const HitInfo: THitInfo); var NewCheckState: TCheckState; Node: PVirtualNode; MayEdit: Boolean; begin MayEdit := not (tsEditing in FStates) and (toEditOnDblClick in FOptions.FMiscOptions); if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin if HitInfo.HitColumn = FHeader.FColumns.FClickIndex then DoColumnDblClick(HitInfo.HitColumn, KeysToShiftState(Message.Keys)); Node := nil; if (hiOnItem in HitInfo.HitPositions) and (hitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].FOptions) then begin if hiUpperSplitter in HitInfo.HitPositions then Node := GetPreviousVisible(HitInfo.HitNode, True) else if hiLowerSplitter in HitInfo.HitPositions then Node := HitInfo.HitNode end; if Assigned(Node) and (Node <> FRoot) and (toNodeHeightDblClickResize in FOptions.FMiscOptions) then begin if DoNodeHeightDblClickResize(Node, HitInfo.HitColumn, KeysToShiftState(Message.Keys), Point(Message.XPos, Message.YPos)) then begin SetNodeHeight(Node, FDefaultNodeHeight); UpdateWindow(Handle); MayEdit := False; end; end else if hiOnItemCheckBox in HitInfo.HitPositions then begin if (FStates * [tsMouseCheckPending, tsKeyCheckPending] = []) and not (vsDisabled in HitInfo.HitNode.States) then begin with HitInfo.HitNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(HitInfo.HitNode, NewCheckState) then begin DoStateChange([tsMouseCheckPending]); FCheckNode := HitInfo.HitNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; InvalidateNode(HitInfo.HitNode); MayEdit := False; end; end; end else begin if hiOnItemButton in HitInfo.HitPositions then begin ToggleNode(HitInfo.HitNode); MayEdit := False; end else begin if toToggleOnDblClick in FOptions.FMiscOptions then begin if ((([hiOnItemButton, hiOnItemLabel, hiOnNormalIcon, hiOnStateIcon] * HitInfo.HitPositions) <> []) or ((toFullRowSelect in FOptions.FSelectionOptions) and Assigned(HitInfo.HitNode))) then begin ToggleNode(HitInfo.HitNode); MayEdit := False; end; end; end; end; end; if MayEdit and Assigned(FFocusedNode) and (FFocusedNode = HitInfo.HitNode) and (FFocusedColumn = HitInfo.HitColumn) and CanEdit(FFocusedNode, HitInfo.HitColumn) then begin DoStateChange([tsEditPending]); FEditColumn := FFocusedcolumn; SetTimer(Handle, EditTimer, FEditDelay, nil); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseDown(var Message: TLMMouse; var HitInfo: THitInfo); // centralized mouse button down handling var LastFocused: PVirtualNode; Column: TColumnIndex; ShiftState: TShiftState; // helper variables to shorten boolean equations/expressions AutoDrag, // automatic (or allowed) drag start IsHit, // the node's caption or images are hit IsCellHit, // for grid extension or full row select (but not check box, button) IsAnyHit, // either IsHit or IsCellHit IsHeightTracking, // height tracking MultiSelect, // multiselection is enabled ShiftEmpty, // ShiftState = [] NodeSelected: Boolean; // the new node (if any) is selected NewColumn: Boolean; // column changed NewNode: Boolean; // Node changed. NeedChange: Boolean; // change event is required for selection change CanClear: Boolean; NewCheckState: TCheckState; AltPressed: Boolean; // Pressing the Alt key enables special processing for selection. FullRowDrag: Boolean; // Start dragging anywhere within a node's bound. NodeRect: TRect; FocusCanChange: Boolean; begin if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin StopWheelPanning; Exit; end; if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin // Focus change. Don't use the SetFocus method as this does not work for MDI windows. if not Focused and CanFocus then begin LCLIntf.SetFocus(Handle); // Repeat the hit test as an OnExit event might got triggered that could modify the tree. GetHitTestInfoAt(Message.XPos, Message.YPos, True, HitInfo); end; // Keep clicked column in case the application needs it. FHeader.FColumns.FClickIndex := HitInfo.HitColumn; // Change column only if we have hit the node label. if (hiOnItemLabel in HitInfo.HitPositions) or (toFullRowSelect in FOptions.FSelectionOptions) or (toGridExtensions in FOptions.FMiscOptions) then begin NewColumn := FFocusedColumn <> HitInfo.HitColumn; if toExtendedFocus in FOptions.FSelectionOptions then Column := HitInfo.HitColumn else Column := FHeader.MainColumn; end else begin NewColumn := False; Column := FFocusedColumn; end; if NewColumn and (not FHeader.AllowFocus(Column)) then begin NewColumn := False; Column := FFocusedColumn; end; NewNode := FFocusedNode <> HitInfo.HitNode; // Translate keys and filter out shift and control key. ShiftState := KeysToShiftState(Message.Keys) * [ssShift, ssCtrlOS, ssAlt]; if ssAlt in ShiftState then begin AltPressed := True; // Remove the Alt key from the shift state. It is not meaningful there. Exclude(ShiftState, ssAlt); end else AltPressed := False; // Various combinations determine what states the tree enters now. // We initialize shorthand variables to avoid the following expressions getting too large // and to avoid repeative expensive checks. IsHit := not AltPressed and not (toSimpleDrawSelection in FOptions.FSelectionOptions) and ((hiOnItemLabel in HitInfo.HitPositions) or (hiOnNormalIcon in HitInfo.HitPositions)); IsCellHit := not AltPressed and not IsHit and Assigned(HitInfo.HitNode) and ([hiOnItemButton, hiOnItemCheckBox] * HitInfo.HitPositions = []) and ((toFullRowSelect in FOptions.FSelectionOptions) or ((toGridExtensions in FOptions.FMiscOptions) and (HitInfo.HitColumn > NoColumn))); IsAnyHit := IsHit or IsCellHit; MultiSelect := toMultiSelect in FOptions.FSelectionOptions; ShiftEmpty := ShiftState = []; NodeSelected := IsAnyHit and (vsSelected in HitInfo.HitNode.States); FullRowDrag := toFullRowDrag in FOptions.FMiscOptions; IsHeightTracking := (Message.Msg = LM_LBUTTONDOWN) and (toNodeHeightResize in FOptions.FMiscOptions) and (hiOnItem in HitInfo.HitPositions) and ([hiUpperSplitter, hiLowerSplitter] * HitInfo.HitPositions <> []) and ((HitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].Options)); // Dragging might be started in the inherited handler manually (which is discouraged for stability reasons) // the test for manual mode is done below (after the focused node is set). AutoDrag := ((DragMode = dmAutomatic) or Dragging) and (not IsCellHit or FullRowDrag); // Query the application to learn if dragging may start now (if set to dmManual). if Assigned(HitInfo.HitNode) and not AutoDrag and (DragMode = dmManual) then AutoDrag := DoBeforeDrag(HitInfo.HitNode, Column) and (not IsCellHit or FullRowDrag); // handle node height tracking if IsHeightTracking then begin if hiUpperSplitter in HitInfo.HitPositions then FHeightTrackNode := GetPreviousVisible(HitInfo.HitNode, True) else FHeightTrackNode := HitInfo.HitNode; if Assigned(FHeightTrackNode) and (FHeightTrackNode <> FRoot) then begin FHeightTrackColumn := HitInfo.HitColumn; NodeRect := GetDisplayRect(FHeightTrackNode, FHeightTrackColumn, False); FHeightTrackPoint := Point(NodeRect.Left, NodeRect.Top); DoStateChange([tsNodeHeightTrackPending]); Exit; end; end; // handle button clicks if (hiOnItemButton in HitInfo.HitPositions) and (vsHasChildren in HitInfo.HitNode.States) then begin ToggleNode(HitInfo.HitNode); Exit; end; // check event if hiOnItemCheckBox in HitInfo.HitPositions then begin if (FStates * [tsMouseCheckPending, tsKeyCheckPending] = []) and not (vsDisabled in HitInfo.HitNode.States) then begin with HitInfo.HitNode^ do NewCheckState := DetermineNextCheckState(CheckType, CheckState); if DoChecking(HitInfo.HitNode, NewCheckState) then begin DoStateChange([tsMouseCheckPending]); FCheckNode := HitInfo.HitNode; FPendingCheckState := NewCheckState; FCheckNode.CheckState := PressedState[FCheckNode.CheckState]; InvalidateNode(HitInfo.HitNode); end; end; Exit; end; // Keep this node's level in case we need it for constraint selection. if (FRoot.ChildCount > 0) and ShiftEmpty or (FSelectionCount = 0) then if Assigned(HitInfo.HitNode) then FLastSelectionLevel := GetNodeLevel(HitInfo.HitNode) else FLastSelectionLevel := GetNodeLevel(GetLastVisibleNoInit(nil, True)); // pending clearance if MultiSelect and ShiftEmpty and not (hiOnItemCheckbox in HitInfo.HitPositions) and IsAnyHit and AutoDrag and NodeSelected and not FSelectionLocked then DoStateChange([tsClearPending]); // immediate clearance // Determine for the right mouse button if there is a popup menu. In this case and if drag'n drop is pending // the current selection has to stay as it is. with HitInfo, Message do CanClear := not AutoDrag and (not (tsRightButtonDown in FStates) or not HasPopupMenu(HitNode, HitColumn, Point(XPos, YPos))); //lcl FocusCanChange := DoFocusChanging(FFocusedNode, HitInfo.HitNode, FFocusedColumn, Column); if not FSelectionLocked and FocusCanChange and ((not (IsAnyHit or FullRowDrag) and MultiSelect and ShiftEmpty) or (IsAnyHit and (not NodeSelected or (NodeSelected and CanClear)) and (ShiftEmpty or not MultiSelect))) then begin Assert(not (tsClearPending in FStates), 'Pending and direct clearance are mutual exclusive!'); // If the currently hit node was already selected then we have to reselect it again after clearing the current // selection, but without a change event if it is the only selected node. // The same applies if the Alt key is pressed, which allows to start drawing the selection rectangle also // on node captions and images. Here the previous selection state does not matter, though. if NodeSelected or (AltPressed and Assigned(HitInfo.HitNode) and (HitInfo.HitColumn = FHeader.MainColumn)) then begin NeedChange := FSelectionCount > 1; InternalClearSelection; InternalAddToSelection(HitInfo.HitNode, True); if NeedChange then begin Invalidate; Change(nil); end; end else ClearSelection; end; // pending node edit if Focused and ((hiOnItemLabel in HitInfo.HitPositions) or ((toGridExtensions in FOptions.FMiscOptions) and (hiOnItem in HitInfo.HitPositions))) and NodeSelected and not NewColumn and ShiftEmpty then DoStateChange([tsEditPending]); // User starts a selection with a selection rectangle. if not (toDisableDrawSelection in FOptions.FSelectionOptions) and not (IsHit or FullRowDrag) and MultiSelect then begin SetCapture(Handle); DoStateChange([tsDrawSelPending]); FDrawSelShiftState := ShiftState; FNewSelRect := Rect(Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY, Message.XPos + FEffectiveOffsetX, Message.YPos - FOffsetY); //lclheader if hoVisible in FHeader.Options then OffsetRect(FNewSelRect, 0, -FHeader.Height); {$ifdef DEBUG_VTV}Logger.Send([lcSelection],'FNewSelRect', FNewSelRect);{$endif} FLastSelRect := Rect(0, 0, 0, 0); if not IsCellHit then Exit; end; // Keep current mouse position. FLastClickPos := Point(Message.XPos, Message.YPos); // Handle selection and node focus change. if IsAnyHit and FocusCanChange then begin if NewColumn then begin InvalidateColumn(FFocusedColumn); InvalidateColumn(Column); FFocusedColumn := Column; end; if DragKind = dkDock then begin KillTimer(Handle, ScrollTimer); DoStateChange([], [tsScrollPending, tsScrolling]); end; // Get the currently focused node to make multiple multi-selection blocks possible. LastFocused := FFocusedNode; if NewNode then DoFocusNode(HitInfo.HitNode, False); if MultiSelect and not ShiftEmpty then HandleClickSelection(LastFocused, HitInfo.HitNode, ShiftState, AutoDrag) else begin if ShiftEmpty then FRangeAnchor := HitInfo.HitNode; // If the hit node is not yet selected then do it now. if not NodeSelected then AddToSelection(HitInfo.HitNode); end; if NewNode or NewColumn then begin ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; // Drag'n drop initiation // If we lost focus in the interim the button states would be cleared in WM_KILLFOCUS. if AutoDrag and IsAnyHit and (FStates * [tsLeftButtonDown, tsRightButtonDown, tsMiddleButtonDown] <> []) then BeginDrag(False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.HandleMouseUp(Keys: PtrUInt; const HitInfo: THitInfo); // Counterpart to the mouse down handler. var ReselectFocusedNode: Boolean; begin ReleaseCapture; if not (tsVCLDragPending in FStates) then begin // reset pending or persistent states if IsMouseSelecting then begin DoStateChange([], [tsDrawSelecting, tsDrawSelPending, tsToggleFocusedSelection]); Invalidate; end; if tsClearPending in FStates then begin ReselectFocusedNode := Assigned(FFocusedNode) and (vsSelected in FFocusedNode.States); ClearSelection; if ReselectFocusedNode then AddToSelection(FFocusedNode); end; if (tsToggleFocusedSelection in FStates) and (HitInfo.HitNode = FFocusedNode) then begin if vsSelected in HitInfo.HitNode.States then RemoveFromSelection(HitInfo.HitNode) else AddToSelection(HitInfo.HitNode); InvalidateNode(HitInfo.HitNode); end; DoStateChange([], [tsOLEDragPending, tsOLEDragging, tsClearPending, tsDrawSelPending, tsToggleFocusedSelection, tsScrollPending, tsScrolling]); KillTimer(Handle, ScrollTimer); if tsMouseCheckPending in FStates then begin DoStateChange([], [tsMouseCheckPending]); // Is the mouse still over the same node? if (HitInfo.HitNode = FCheckNode) and (hiOnItem in HitInfo.HitPositions) then DoCheckClick(FCheckNode, FPendingCheckState) else FCheckNode.CheckState := UnpressedState[FCheckNode.CheckState]; InvalidateNode(FCheckNode); FCheckNode := nil; end; if (FHeader.FColumns.FClickIndex > NoColumn) and (FHeader.FColumns.FClickIndex = HitInfo.HitColumn) then DoColumnClick(HitInfo.HitColumn, KeysToShiftState(Keys)); // handle a pending edit event if tsEditPending in FStates then begin // Is the mouse still over the same node? if (HitInfo.HitNode = FFocusedNode) and (hiOnItem in HitInfo.HitPositions) and CanEdit(FFocusedNode, HitInfo.HitColumn) and (toEditOnClick in FOptions.FMiscOptions) then begin FEditColumn := FFocusedColumn; SetTimer(Handle, EditTimer, FEditDelay, nil); end else DoStateChange([], [tsEditPending]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasImage(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): Boolean; // Determines whether the given node has got an image of the given kind in the given column. // Returns True if so, otherwise False. var Ghosted: Boolean; Index: Integer; begin Index := -1; Ghosted := False; DoGetImageIndex(Node, Kind, Column, Ghosted, Index); Result := Index > -1; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasPopupMenu(Node: PVirtualNode; Column: TColumnIndex; const Pos: TPoint): Boolean; // Determines whether the tree got a popup menu, either in its PopupMenu property, via the OnGetPopupMenu event or // through inheritance. The latter case must be checked by the descendant which must override this method. begin Result := Assigned(PopupMenu) or Assigned(DoGetPopupMenu(Node, Column, Pos)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitChildren(Node: PVirtualNode); // Initiates the initialization of the child number of the given node. var Count: Cardinal; begin if Assigned(Node) and (Node <> FRoot) and (vsHasChildren in Node.States) then begin Count := Node.ChildCount; DoInitChildren(Node, Count); if Count = 0 then begin // Remove any child node which is already there. DeleteChildren(Node); Exclude(Node.States, vsHasChildren); end else SetChildCount(Node, Count); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InitNode(Node: PVirtualNode); // Initiates the initialization of the given node to allow the application to load needed data for it. var InitStates: TVirtualNodeInitStates; begin with Node^ do begin Include(States, vsInitialized); InitStates := []; if Parent = FRoot then DoInitNode(nil, Node, InitStates) else DoInitNode(Parent, Node, InitStates); if ivsDisabled in InitStates then Include(States, vsDisabled); if ivsHasChildren in InitStates then Include(States, vsHasChildren); if ivsSelected in InitStates then begin FSingletonNodeArray[0] := Node; InternalAddToSelection(FSingletonNodeArray, 1, False); end; if ivsMultiline in InitStates then Include(States, vsMultiline); // Expanded may already be set (when called from ReinitNode) or be set in DoInitNode, allow both. if (vsExpanded in Node.States) xor (ivsExpanded in InitStates) then begin // Expand node if not yet done (this will automatically initialize child nodes). if ivsExpanded in InitStates then ToggleNode(Node) else // If the node already was expanded then explicitly trigger child initialization. if vsHasChildren in Node.States then InitChildren(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalAddFromStream(Stream: TStream; Version: Integer; Node: PVirtualNode); // Loads all details for Node (including its children) from the given stream. // Because the new nodes might be selected this method also fixes the selection array. var Stop: PVirtualNode; Index: Integer; LastTotalHeight: Cardinal; WasFullyVisible: Boolean; begin Assert(Node <> FRoot, 'The root node cannot be loaded from stream.'); // Keep the current total height value of Node as it has already been applied // but might change in the load and fixup code. We have to adjust that afterwards. LastTotalHeight := Node.TotalHeight; WasFullyVisible := FullyVisible[Node]; // Read in the new nodes. ReadNode(Stream, Version, Node); // One time update of node-internal states and the global visibility counter. // This is located here to ease and speed up the loading process. FixupTotalCount(Node); AdjustTotalCount(Node.Parent, Node.TotalCount - 1, True); // -1 because Node itself was already set. FixupTotalHeight(Node); AdjustTotalHeight(Node.Parent, Node.TotalHeight - LastTotalHeight, True); // New nodes are always visible, so the visible node count has been increased already. // If Node is now invisible we have to take back this increment and don't need to add any visible child node. if not FullyVisible[Node] then begin if WasFullyVisible then Dec(FVisibleCount); end else // It can never happen that the node is now fully visible but was not before as this would require // that the visibility state of one of its parents has changed, which cannot happen during loading. Inc(FVisibleCount, CountVisibleChildren(Node)); // Fix selection array. ClearTempCache; if Node = FRoot then Stop := nil else Stop := Node.NextSibling; if toMultiSelect in FOptions.FSelectionOptions then begin // Add all nodes which were selected before to the current selection (unless they are already there). while Node <> Stop do begin if (vsSelected in Node.States) and not FindNodeInSelection(Node, Index, 0, High(FSelection)) then InternalCacheNode(Node); Node := GetNextNoInit(Node); end; if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount, True); ClearTempCache; end else // No further selected nodes allowed so delete the corresponding flag in all new nodes. while Node <> Stop do begin Exclude(Node.States, vsSelected); Node := GetNextNoInit(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalAddToSelection(Node: PVirtualNode; ForceInsert: Boolean): Boolean; begin Assert(Assigned(Node), 'Node must not be nil!'); FSingletonNodeArray[0] := Node; Result := InternalAddToSelection(FSingletonNodeArray, 1, ForceInsert); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalAddToSelection(const NewItems: TNodeArray; NewLength: Integer; ForceInsert: Boolean): Boolean; // Internal version of method AddToSelection which does not trigger OnChange events var I, J: Integer; CurrentEnd: Integer; Constrained, SiblingConstrained: Boolean; begin // The idea behind this code is to use a kind of reverse merge sort. QuickSort is quite fast // and would do the job here too but has a serious problem with already sorted lists like FSelection. // 1) Remove already selected items, mark all other as being selected. if ForceInsert then begin for I := 0 to NewLength - 1 do Include(NewItems[I].States, vsSelected); end else begin Constrained := toLevelSelectConstraint in FOptions.FSelectionOptions; if Constrained and (FLastSelectionLevel = -1) then FLastSelectionLevel := GetNodeLevel(NewItems[0]); SiblingConstrained := toSiblingSelectConstraint in FOptions.FSelectionOptions; if SiblingConstrained and (FRangeAnchor = nil) then FRangeAnchor := NewItems[0]; for I := 0 to NewLength - 1 do if ([vsSelected, vsDisabled] * NewItems[I].States <> []) or (Constrained and (Cardinal(FLastSelectionLevel) <> GetNodeLevel(NewItems[I]))) or (SiblingConstrained and (FRangeAnchor.Parent <> NewItems[I].Parent)) then Inc(PtrUInt(NewItems[I])) else Include(NewItems[I].States, vsSelected); end; I := PackArray(NewItems, NewLength); if I > -1 then NewLength := I; Result := NewLength > 0; if Result then begin // 2) Sort the new item list so we can easily traverse it. if NewLength > 1 then QuickSort(NewItems, 0, NewLength - 1); // 3) Make room in FSelection for the new items. if FSelectionCount + NewLength >= Length(FSelection) then SetLength(FSelection, FSelectionCount + NewLength); // 4) Merge in new items J := NewLength - 1; CurrentEnd := FSelectionCount - 1; while J >= 0 do begin // First insert all new entries which are greater than the greatest entry in the old list. // If the current end marker is < 0 then there's nothing more to move in the selection // array and only the remaining new items must be inserted. if CurrentEnd >= 0 then begin while (J >= 0) and (NewItems[J] > FSelection[CurrentEnd]) do begin FSelection[CurrentEnd + J + 1] := NewItems[J]; Dec(J); end; // early out if nothing more needs to be copied if J < 0 then Break; end else begin // insert remaining new entries at position 0 Move(NewItems[0], FSelection[0], (J + 1) * SizeOf(Pointer)); // nothing more to do so exit main loop Break; end; // find the last entry in the remaining selection list which is smaller then the largest // entry in the remaining new items list FindNodeInSelection(NewItems[J], I, 0, CurrentEnd); Dec(I); // move all entries which are greater than the greatest entry in the new items list up // so the remaining gap travels down to where new items must be inserted Move(FSelection[I + 1], FSelection[I + J + 2], (CurrentEnd - I) * SizeOf(Pointer)); CurrentEnd := I; end; Inc(FSelectionCount, NewLength); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalCacheNode(Node: PVirtualNode); // Adds the given node to the temporary node cache (used when collecting possibly large amounts of nodes). var Len: Cardinal; begin Len := Length(FTempNodeCache); if FTempNodeCount = Len then begin if Len < 100 then Len := 100 else Len := Len + Len div 10; SetLength(FTempNodeCache, Len); end; FTempNodeCache[FTempNodeCount] := Node; Inc(FTempNodeCount); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalClearSelection; var Count: Integer; begin // It is possible that there are invalid node references in the selection array // if the tree update is locked and changes in the structure were made. // Handle this potentially dangerous situation by packing the selection array explicitely. if FUpdateCount > 0 then begin Count := PackArray(FSelection, FSelectionCount); if Count > -1 then begin FSelectionCount := Count; SetLength(FSelection, FSelectionCount); end; end; while FSelectionCount > 0 do begin Dec(FSelectionCount); Exclude(FSelection[FSelectionCount].States, vsSelected); end; ResetRangeAnchor; FSelection := nil; DoStateChange([], [tsClearPending]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalConnectNode(Node, Destination: PVirtualNode; Target: TBaseVirtualTree; Mode: TVTNodeAttachMode); // Connects Node with Destination depending on Mode. // No error checking takes place. Node as well as Destination must be valid. Node must never be a root node and // Destination must not be a root node if Mode is amInsertBefore or amInsertAfter. var Run: PVirtualNode; begin // Keep in mind that the destination node might belong to another tree. with Target do begin case Mode of amInsertBefore: begin Node.PrevSibling := Destination.PrevSibling; Destination.PrevSibling := Node; Node.NextSibling := Destination; Node.Parent := Destination.Parent; Node.Index := Destination.Index; if Node.PrevSibling = nil then Node.Parent.FirstChild := Node else Node.PrevSibling.NextSibling := Node; // reindex all following nodes Run := Destination; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.Parent.ChildCount); Include(Destination.Parent.States, vsHasChildren); AdjustTotalCount(Destination.Parent, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination.Parent, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amInsertAfter: begin Node.NextSibling := Destination.NextSibling; Destination.NextSibling := Node; Node.PrevSibling := Destination; Node.Parent := Destination.Parent; if Node.NextSibling = nil then Node.Parent.LastChild := Node else Node.NextSibling.PrevSibling := Node; Node.Index := Destination.Index; // reindex all following nodes Run := Node; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.Parent.ChildCount); Include(Destination.Parent.States, vsHasChildren); AdjustTotalCount(Destination.Parent, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination.Parent, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amAddChildFirst: begin if Assigned(Destination.FirstChild) then begin // If there's a first child then there must also be a last child. Destination.FirstChild.PrevSibling := Node; Node.NextSibling := Destination.FirstChild; Destination.FirstChild := Node; end else begin // First child node at this location. Destination.FirstChild := Node; Destination.LastChild := Node; Node.NextSibling := nil; end; Node.PrevSibling := nil; Node.Parent := Destination; Node.Index := 0; // reindex all following nodes Run := Node.NextSibling; while Assigned(Run) do begin Inc(Run.Index); Run := Run.NextSibling; end; Inc(Destination.ChildCount); Include(Destination.States, vsHasChildren); AdjustTotalCount(Destination, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; amAddChildLast: begin if Assigned(Destination.LastChild) then begin // If there's a last child then there must also be a first child. Destination.LastChild.NextSibling := Node; Node.PrevSibling := Destination.LastChild; Destination.LastChild := Node; end else begin // first child node at this location Destination.FirstChild := Node; Destination.LastChild := Node; Node.PrevSibling := nil; end; Node.NextSibling := nil; Node.Parent := Destination; if Assigned(Node.PrevSibling) then Node.Index := Node.PrevSibling.Index + 1 else Node.Index := 0; Inc(Destination.ChildCount); Include(Destination.States, vsHasChildren); AdjustTotalCount(Destination, Node.TotalCount, True); // Add the new node's height only if its parent is expanded. if Destination.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible] then AdjustTotalHeight(Destination, Node.TotalHeight, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node) + 1); end; else // amNoWhere: do nothing end; // Remove temporary states. Node.States := Node.States - [vsChecking, vsCutOrCopy, vsDeleting, vsClearing]; // Update the hidden children flag of the parent. if (Mode <> amNoWhere) and (Node.Parent <> FRoot) then begin // If we have added a visible node then simply remove the all-children-hidden flag. if vsVisible in Node.States then Exclude(Node.Parent.States, vsAllChildrenHidden) else // If we have added an invisible node and this is the only child node then // make sure the all-children-hidden flag is in a determined state. // If there were child nodes before then no action is needed. if Node.Parent.ChildCount = 1 then Include(Node.Parent.States, vsAllChildrenHidden); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalData(Node: PVirtualNode): Pointer; begin Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalDisconnectNode(Node: PVirtualNode; KeepFocus: Boolean; Reindex: Boolean = True); // Disconnects the given node from its parent and siblings. The node's pointer are not reset so they can still be used // after return from this method (probably a very short time only!). // If KeepFocus is True then the focused node is not reset. This is useful if the given node is reconnected to the tree // immediately after return of this method and should stay being the focused node if it was it before. // Note: Node must not be nil or the root node. var Parent, Run: PVirtualNode; Index: Integer; AdjustHeight: Boolean; begin Assert(Assigned(Node) and (Node <> FRoot), 'Node must neither be nil nor the root node.'); if (Node = FFocusedNode) and not KeepFocus then begin DoFocusNode(nil, False); DoFocusChange(FFocusedNode, FFocusedColumn); end; if Node = FRangeAnchor then ResetRangeAnchor; // Update the hidden children flag of the parent. if (Node.Parent <> FRoot) and not (vsClearing in Node.Parent.States) then if FUpdateCount = 0 then DetermineHiddenChildrenFlag(Node.Parent) else Include(FStates, tsUpdateHiddenChildrenNeeded); if not (vsDeleting in Node.States) then begin // Some states are only temporary so take them out. Node.States := Node.States - [vsChecking]; Parent := Node.Parent; Dec(Parent.ChildCount); AdjustHeight := Parent.States * [vsExpanded, vsVisible] = [vsExpanded, vsVisible]; if Parent.ChildCount = 0 then begin Parent.States := Parent.States - [vsAllChildrenHidden, vsHasChildren]; if (Parent <> FRoot) and (vsExpanded in Parent.States) then Exclude(Parent.States, vsExpanded); end; AdjustTotalCount(Parent, -Integer(Node.TotalCount), True); if AdjustHeight then AdjustTotalHeight(Parent, -Integer(Node.TotalHeight), True); if FullyVisible[Node] then Dec(FVisibleCount, CountVisibleChildren(Node) + 1); if Assigned(Node.PrevSibling) then Node.PrevSibling.NextSibling := Node.NextSibling else Parent.FirstChild := Node.NextSibling; if Assigned(Node.NextSibling) then begin Node.NextSibling.PrevSibling := Node.PrevSibling; // Reindex all following nodes. if Reindex then begin Run := Node.NextSibling; Index := Node.Index; while Assigned(Run) do begin Run.Index := Index; Inc(Index); Run := Run.NextSibling; end; end; end else Parent.LastChild := Node.PrevSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalGetNodeAt(X, Y: Integer): PVirtualNode; var Dummy: Integer; begin Result := InternalGetNodeAt(X, Y, True, Dummy); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InternalGetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; //lclheader this is the original version of GetNodeAt used internally since expects coordinates // relative to the image tree. In LCL the image tree and control coordinates are different // when header is visible // This method returns the node that occupies the specified point, or nil if there's none. // If Relative is True then X and Y are given in client coordinates otherwise they are considered as being // absolute values into the virtual tree image (regardless of the current offsets in the tree window). // NodeTop gets the absolute or relative top position of the node returned or is untouched if no node // could be found. var AbsolutePos, CurrentPos: Cardinal; begin if Y < 0 then Exit(nil); AbsolutePos := Y; if Relative then Inc(AbsolutePos, -FOffsetY); // CurrentPos tracks a running term of the current position to test for. // It corresponds always to the top position of the currently considered node. CurrentPos := 0; // If the cache is available then use it. if tsUseCache in FStates then Result := FindInPositionCache(AbsolutePos, CurrentPos) else Result := GetFirstVisibleNoInit(nil, True); // Determine node, of which position and height corresponds to the scroll position most closely. while Assigned(Result) and (Result <> FRoot) do begin if AbsolutePos < (CurrentPos + NodeHeight[Result]) then Break; Inc(CurrentPos, NodeHeight[Result]); Result := GetNextVisibleNoInit(Result, True); end; if Result = FRoot then Result := nil; // Since the given vertical position is likely not the same as the top position // of the found node this top position is returned. if Assigned(Result) then begin NodeTop := CurrentPos; if Relative then Inc(NodeTop, FOffsetY); //{$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'GetNodeAt Result: ',Result^.Index);{$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InternalRemoveFromSelection(Node: PVirtualNode); // Special version to mark a node to be no longer in the current selection. PackArray must // be used to remove finally those entries. var Index: Integer; begin // Because pointers are always DWORD aligned we can simply increment all those // which we want to have removed (see also PackArray) and still have the // order in the list preserved. if FindNodeInSelection(Node, Index, -1, -1) then begin Exclude(Node.States, vsSelected); Inc(PtrUInt(FSelection[Index])); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateCache; // Marks the cache as invalid. begin DoStateChange([tsValidationNeeded], [tsUseCache]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MarkCutCopyNodes; // Sets the vsCutOrCopy style in every currently selected but not disabled node to indicate it is // now part of a clipboard operation. var Nodes: TNodeArray; I: Integer; begin Nodes := nil; if FSelectionCount > 0 then begin // need the current selection sorted to exclude selected nodes which are children, grandchildren etc. of // already selected nodes Nodes := GetSortedSelection(False); for I := 0 to High(Nodes) do with Nodes[I]^ do if not (vsDisabled in States) then Include(States, vsCutOrCopy); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Loaded; var LastRootCount: Cardinal; IsReadOnly: Boolean; begin inherited; // If a root node count has been set during load of the tree then update its child structure now // as this hasn't been done yet in this case. if (tsNeedRootCountUpdate in FStates) and (FRoot.ChildCount > 0) then begin DoStateChange([], [tsNeedRootCountUpdate]); IsReadOnly := toReadOnly in FOptions.FMiscOptions; Exclude(FOptions.FMiscOptions, toReadOnly); LastRootCount := FRoot.ChildCount; FRoot.ChildCount := 0; BeginUpdate; SetChildCount(FRoot, LastRootCount); EndUpdate; if IsReadOnly then Include(FOptions.FMiscOptions, toReadOnly); end; // Prevent the object inspector at design time from marking the header as being modified // when auto resize is enabled. Updating; try FHeader.UpdateMainColumn; FHeader.FColumns.FixPositions; if toAutoBidiColumnOrdering in FOptions.FAutoOptions then FHeader.FColumns.ReorderColumns(UseRightToLeftAlignment); FHeader.RecalculateHeader; //lclheader //AdjustAutoSize is called inside CreateWnd. Don't call here //Keep the commented code until we get sure of not being necessary //if hoAutoResize in FHeader.FOptions then // FHeader.FColumns.AdjustAutoSize(InvalidColumn, True); finally Updated; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MainColumnChanged; begin DoCancelEdit; {$ifdef EnableAccessible} NotifyWinEvent(EVENT_OBJECT_NAMECHANGE, Handle, OBJID_CLIENT, CHILDID_SELF); {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MouseMove(Shift: TShiftState; X, Y: Integer); var R: TRect; NewCursor: TCursor; HitInfo: THitInfo; P: TPoint; Node: PVirtualNode; begin // lcl: Adjust cursor if ([tsWheelPanning, tsWheelScrolling] * FStates = []) then begin // Apply own cursors only if there is no global cursor set. if Screen.Cursor = crDefault then begin NewCursor := crDefault; if (toNodeHeightResize in FOptions.FMiscOptions) then begin GetCursorPos(P); P := ScreenToClient(P); GetHitTestInfoAt(P.X, P.Y, True, HitInfo); if (hiOnItem in HitInfo.HitPositions) and ([hiUpperSplitter, hiLowerSplitter] * HitInfo.HitPositions <> []) and ((hitInfo.HitColumn > NoColumn) and (coFixed in FHeader.FColumns[HitInfo.HitColumn].FOptions)) then begin if hiUpperSplitter in HitInfo.HitPositions then Node := GetPreviousVisible(HitInfo.HitNode, True) else Node := HitInfo.HitNode; if Assigned(Node) and (Node <> FRoot) then NewCursor := crVertSplit; end; end; if (NewCursor = crDefault) and (toHotTrack in FOptions.PaintOptions) and Assigned(FCurrentHotNode) then NewCursor := FHotCursor; DoGetCursor(NewCursor); Cursor := NewCursor; end; end; if tsNodeHeightTrackPending in FStates then begin // Remove hint if shown currently. Application.CancelHint; // Stop wheel panning if active. StopWheelPanning; // Stop timers KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([tsNodeHeightTracking], [tsScrollPending, tsScrolling, tsEditPending, tsOLEDragPending, tsVCLDragPending, tsIncrementalSearching, tsNodeHeightTrackPending]); end; if tsDrawSelPending in FStates then begin // Remove current selection in case the user clicked somewhere in the window (but not a node) // and moved the mouse. if CalculateSelectionRect(X, Y) then begin //lclheader R := FNewSelRect; if hoVisible in FHeader.Options then OffsetRect(R, 0, FHeader.Height); InvalidateRect(Handle, @R, False); UpdateWindow(Handle); if (Abs(FNewSelRect.Right - FNewSelRect.Left) > DragManager.DragThreshold) or (Abs(FNewSelRect.Bottom - FNewSelRect.Top) > DragManager.DragThreshold) then begin if tsClearPending in FStates then begin DoStateChange([], [tsClearPending]); ClearSelection; end; DoStateChange([tsDrawSelecting], [tsDrawSelPending]); // Reset to main column for multiselection. FocusedColumn := FHeader.MainColumn; // The current rectangle may already include some node captions. Handle this. if HandleDrawSelection(X, Y) then InvalidateRect(Handle, nil, False); end; end; end else begin if tsNodeHeightTracking in FStates then begin // Handle height tracking. if DoNodeHeightTracking(FHeightTrackNode, FHeightTrackColumn, FHeader.GetShiftState, FHeightTrackPoint, Point(X, Y)) then begin // Avoid negative (or zero) node heights. if FHeightTrackPoint.Y >= Y then Y := FHeightTrackPoint.Y + 1; SetNodeHeight(FHeightTrackNode, Y - FHeightTrackPoint.Y); UpdateWindow(Handle); Exit; end; end; // If both wheel panning and auto scrolling are pending then the user moved the mouse while holding down the // middle mouse button. This means panning is being used, hence remove the wheel scroll flag. if [tsWheelPanning, tsWheelScrolling] * FStates = [tsWheelPanning, tsWheelScrolling] then begin if ((Abs(FLastClickPos.X - X) >= DragManager.DragThreshold) or (Abs(FLastClickPos.Y - Y) >= DragManager.DragThreshold)) then DoStateChange([], [tsWheelScrolling]); end; // Really start dragging if the mouse has been moved more than the threshold. if (tsOLEDragPending in FStates) and ((Abs(FLastClickPos.X - X) >= FDragThreshold) or (Abs(FLastClickPos.Y - Y) >= FDragThreshold)) then DoDragging(FLastClickPos) else begin if CanAutoScroll then DoAutoScroll(X, Y); if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then AdjustPanningCursor(X, Y); if not IsMouseSelecting then begin HandleHotTrack(X, Y); inherited MouseMove(Shift, X, Y); end else begin // Handle draw selection if required, but don't do the work twice if the // auto scrolling code already cares about the selection. if not (tsScrolling in FStates) and CalculateSelectionRect(X, Y) then begin // If something in the selection changed then invalidate the entire // tree instead trying to figure out the display rects of all changed nodes. if HandleDrawSelection(X, Y) then InvalidateRect(Handle, nil, False) else begin UnionRect(R, OrderRect(FNewSelRect), OrderRect(FLastSelRect)); OffsetRect(R, -FEffectiveOffsetX, FOffsetY); if hoVisible in FHeader.Options then OffsetRect(R, 0, FHeader.Height); InvalidateRect(Handle, @R, False); end; UpdateWindow(Handle); end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Notification(AComponent: TComponent; Operation: TOperation); begin if (AComponent <> Self) and (Operation = opRemove) then begin // Check for components linked to the tree. if AComponent = FImages then begin Images := nil; if not (csDestroying in ComponentState) then Invalidate; end else if AComponent = FStateImages then begin StateImages := nil; if not (csDestroying in ComponentState) then Invalidate; end else if AComponent = PopupMenu then PopupMenu := nil else // Check for components linked to the header. if AComponent = FHeader.FImages then FHeader.Images := nil else if AComponent = FHeader.PopupMenu then FHeader.PopupMenu := nil; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnableNCFunctions} procedure TBaseVirtualTree.OriginalWMNCPaint(DC: HDC); // Unfortunately, the painting for the non-client area in TControl is not always correct and does also not consider // existing clipping regions, so it has been modified here to take this into account. const InnerStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENINNER, BDR_RAISEDINNER, 0); OuterStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENOUTER, BDR_RAISEDOUTER, 0); EdgeStyles: array[TBevelKind] of Integer = (0, 0, BF_SOFT, BF_FLAT); Ctl3DStyles: array[Boolean] of Integer = (BF_MONO, 0); var RC, RW: TRect; EdgeSize: Integer; Size: TSize; begin if (BevelKind <> bkNone) or (BorderWidth > 0) then begin RC := Rect(0, 0, Width, Height); Size := GetBorderDimensions; InflateRect(RC, Size.cx, Size.cy); RW := RC; if BevelKind <> bkNone then begin DrawEdge(DC, RC, InnerStyles[BevelInner] or OuterStyles[BevelOuter], Byte(BevelEdges) or EdgeStyles[BevelKind] or Ctl3DStyles[Ctl3D]); EdgeSize := 0; if BevelInner <> bvNone then Inc(EdgeSize, BevelWidth); if BevelOuter <> bvNone then Inc(EdgeSize, BevelWidth); with RC do begin if beLeft in BevelEdges then Inc(Left, EdgeSize); if beTop in BevelEdges then Inc(Top, EdgeSize); if beRight in BevelEdges then Dec(Right, EdgeSize); if beBottom in BevelEdges then Dec(Bottom, EdgeSize); end; end; // Repaint only the part in the original clipping region and not yet drawn parts. IntersectClipRect(DC, RC.Left, RC.Top, RC.Right, RC.Bottom); // Determine inner rectangle to exclude (RC corresponds then to the client area). InflateRect(RC, -BorderWidth, -BorderWidth); // Remove the inner rectangle. ExcludeClipRect(DC, RC.Left, RC.Top, RC.Right, RC.Bottom); // Erase parts not drawn. Brush.Color := FColors.BorderColor; Windows.FillRect(DC, RW, Brush.Handle); end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Paint; // Window paint routine. Used when the tree window needs to be updated. var Window: TRect; Target: TPoint; Temp: Integer; Options: TVTInternalPaintOptions; RTLOffset: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaint],'Paint');{$endif} Options := [poBackground, poColumnColor, poDrawFocusRect, poDrawDropMark, poDrawSelection, poGridLines]; if UseRightToLeftAlignment and FHeader.UseColumns then RTLOffset := ComputeRTLOffset(True) else RTLOffset := 0; // The update rect has already been filled in WMPaint, as it is the window's update rect, which gets // reset when BeginPaint is called (in the ancestor). // The difference to the DC's clipbox is that it is also valid with internal paint operations used // e.g. by the Explorer while dragging, but show window content while dragging is disabled. if not IsRectEmpty(FUpdateRect) then begin Temp := Header.Columns.GetVisibleFixedWidth; if Temp = 0 then begin Window := FUpdateRect; {$ifdef DEBUG_VTV}Logger.Send([lcHeaderOffset], 'FUpdateRect', FUpdateRect);{$endif} Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then begin if Target.Y < FHeader.Height then begin Window.Top := 0; Target.Y := FHeader.Height; end else begin Dec(Window.Top, FHeader.Height); end; Dec(Window.Bottom, FHeader.Height); if RectVisible(Canvas.Handle, FHeaderRect) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'RectVisible = True');{$endif} FHeader.FColumns.PaintHeader(Canvas.Handle, FHeaderRect, -FEffectiveOffsetX); end; with FHeaderRect do ExcludeClipRect(Canvas.Handle, Left, Top, Right, Bottom); end; // The clipping rectangle is given in client coordinates of the window. We have to convert it into // a sliding window of the tree image. {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);{$endif} OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY); //{$ifdef DEBUG_VTV}Logger.Active:=Logger.CalledBy('DoDragging');{$endif} PaintTree(Canvas, Window, Target, Options); //{$ifdef DEBUG_VTV}Logger.Active:=True;{$endif} end else begin {$ifdef DEBUG_VTV}Logger.Send([lcPaint],'VisibleFixedWidth > 0');{$endif} // First part, fixed columns Window := ClientRect; Window.Right := Temp; Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then begin //Target is always (0,0) due to call to ClientRect, so no need set Top to 0 //also no need to decrease bottom because ClientRect already computes header Inc(Target.Y, FHeader.Height); if RectVisible(Canvas.Handle, FHeaderRect) then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader], 'RectVisible = True');{$endif} FHeader.FColumns.PaintHeader(Canvas.Handle, FHeaderRect, -FEffectiveOffsetX); end; with FHeaderRect do ExcludeClipRect(Canvas.Handle,Left,Top,Right,Bottom); end; OffsetRect(Window, -RTLOffset, -FOffsetY); PaintTree(Canvas, Window, Target, Options); // Second part, other columns Window := GetClientRect; if Temp > Window.Right then begin {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'Paint');{$endif} Exit; end; Window.Left := Temp; Target := Window.TopLeft; //lclheader if hoVisible in FHeader.FOptions then Inc(Target.Y, FHeader.Height); {$ifdef DEBUG_VTV}Logger.Send([lcDrag],'FEffectiveOffsetX: %d, RTLOffset: %d, OffsetY: %d',[FEffectiveOffsetX,RTLOffset,FOffsetY]);{$endif} OffsetRect(Window, FEffectiveOffsetX - RTLOffset, -FOffsetY); PaintTree(Canvas, Window, Target, Options); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'Paint');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintCheckImage(const PaintInfo: TVTPaintInfo); procedure DrawCheckButton(Canvas: TCanvas; Index: Integer; const R: TRect; Flat: Boolean); var ButtonState: Cardinal; ButtonType: Cardinal; begin if Index < 8 then ButtonType := DFCS_BUTTONRADIO else ButtonType := DFCS_BUTTONCHECK; if Index >= 16 then ButtonType := ButtonType or DFCS_BUTTON3STATE; case Index mod 4 of 0: ButtonState := 0; 1: ButtonState := DFCS_HOT; 2: ButtonState := DFCS_PUSHED; else ButtonState := DFCS_INACTIVE; end; if Index in [4..7, 12..19] then ButtonState := ButtonState or DFCS_CHECKED; if Flat then ButtonState := ButtonState or DFCS_FLAT; DrawFrameControl(Canvas.Handle, R, DFC_BUTTON, ButtonType or ButtonState); end; var R: TRect; {$ifdef ThemeSupport} Details: TThemedElementDetails; {$endif} UseThemes: Boolean; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcCheck],'PaintCheckImage');{$endif} with PaintInfo, ImageInfo[iiCheck] do begin {$ifdef ThemeSupport} UseThemes := (tsUseThemes in FStates) and (FCheckImageKind = ckSystemDefault); {$else} UseThemes := False; {$endif} if UseThemes or ((FCheckImageKind in [ckSystemFlat, ckSystemDefault]) and not (Index in [21..24])) then begin {$ifdef ThemeSupport} if UseThemes then begin R := Rect(XPos - 1, YPos, XPos + 16, YPos + 16); Details.Element := teButton; case Index of 0..8: // radio buttons begin Details.Part := BP_RADIOBUTTON; Details.State := Index; end; 9..20: // check boxes begin Details.Part := BP_CHECKBOX; Details.State := Index - 8; end; 21..24: // buttons begin Details.Part := BP_PUSHBUTTON; Details.State := Index - 20; end; else Details.Part := 0; Details.State := 0; end; ThemeServices.DrawElement(Canvas.Handle, Details, R); {$ifdef USE_DELPHICOMPAT} if Index in [21..24] then with UtilityImages do DirectMaskBlt(PaintInfo.Canvas.Handle, XPos - 1, YPos, Height, Height, Canvas.Handle, 4 * Height, 0, MaskHandle); {$else} if Index in [21..24] then with UtilityImages do StretchMaskBlt(PaintInfo.Canvas.Handle, XPos - 1, YPos, Height, Height, Canvas.Handle, 4 * Height, 0, Height, Height, MaskHandle, 4 * Height, 0, SRCCOPY); {$endif} end else {$endif} begin R := Rect(XPos + 1, YPos + 1, XPos + 14, YPos + 14); DrawCheckButton(Canvas, Index - 1, R, FCheckImageKind = ckSystemFlat); end; end else with FCheckImages do begin {$ifdef USE_DELPHICOMPAT} DirectMaskBlt(PaintInfo.Canvas.Handle, XPos, YPos, Height, Height, Canvas.Handle, Index * Height, 0, MaskHandle); {$else} StretchMaskBlt(PaintInfo.Canvas.Handle, XPos, YPos, Height, Height, Canvas.Handle, Index * Height, 0, Height, Height, MaskHandle, Index * Height, 0, SRCCOPY); {$endif} end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcCheck],'PaintCheckImage');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintImage(var PaintInfo: TVTPaintInfo; ImageInfoIndex: TVTImageInfoIndex; DoOverlay: Boolean); var CutNode: Boolean; PaintFocused: Boolean; DrawEffect: TGraphicsDrawEffect; begin with PaintInfo do begin CutNode := (vsCutOrCopy in Node.States) and (tsCutPending in FStates); PaintFocused := Focused or (toGhostedIfUnfocused in FOptions.FPaintOptions); // Since the overlay image must be specified together with the image to draw // it is meaningfull to retrieve it in advance. if DoOverlay then GetImageIndex(PaintInfo, ikOverlay, iiOverlay, Images) else PaintInfo.ImageInfo[iiOverlay].Index := -1; with ImageInfo[ImageInfoIndex] do begin if (vsSelected in Node.States) and not (Ghosted or CutNode) then begin if PaintFocused or (toPopupMode in FOptions.FPaintOptions) then Images.BlendColor := FColors.FocusedSelectionColor else Images.BlendColor := FColors.UnfocusedSelectionColor; end else Images.BlendColor := Color; if (vsDisabled in Node.States) or not Enabled then DrawEffect := gdeDisabled else // Blend image if enabled and the tree has the focus (or ghosted images must be drawn also if unfocused) ... if (toUseBlendedImages in FOptions.FPaintOptions) and PaintFocused // ... and the image is ghosted... and (Ghosted or // ... or it is not the check image and the node is selected (but selection is not for the entire row)... ((vsSelected in Node.States) and not (toFullRowSelect in FOptions.FSelectionOptions) and not (toGridExtensions in FOptions.FMiscOptions)) or // ... or the node must be shown in cut mode. CutNode) then DrawEffect := gdeShadowed else DrawEffect := gdeNormal; if (vsSelected in Node.States) and not Ghosted then Images.BlendColor := clDefault; Images.Draw(Canvas, XPos, YPos, Index, DrawEffect); // Now, draw the overlay. // Delphi version has the ability to use the built in overlay indices of windows system image lists // Since this is system dependent the LCL version will support only custom overlays // Note: XPos and YPos are those of the normal images. if PaintInfo.ImageInfo[iiOverlay].Index >= 0 then ImageInfo[iiOverlay].Images.Draw(Canvas, XPos, YPos, ImageInfo[iiOverlay].Index); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintNodeButton(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const R: TRect; ButtonX, ButtonY: Integer; BidiMode: TBiDiMode); var Bitmap: TBitmap; XPos: Integer; IsHot: Boolean; begin IsHot := (toHotTrack in FOptions.FPaintOptions) and (FCurrentHotNode = Node) and FHotNodeButtonHit; if vsExpanded in Node.States then begin if IsHot then Bitmap := FHotMinusBM else Bitmap := FMinusBM; end else begin if IsHot then Bitmap := FHotPlusBM else Bitmap := FPlusBM; end; // Draw the node's plus/minus button according to the directionality. if BidiMode = bdLeftToRight then XPos := R.Left + ButtonX else XPos := R.Right - ButtonX - Bitmap.Width; // Need to draw this masked. Canvas.Draw(XPos, R.Top + ButtonY, Bitmap); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintTreeLines(const PaintInfo: TVTPaintInfo; VAlignment, IndentSize: Integer; LineImage: TLineImage); var I: Integer; XPos, Offset: Integer; NewStyles: TLineImage; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintTreeLines');{$endif} NewStyles := nil; with PaintInfo do begin if BidiMode = bdLeftToRight then begin XPos := CellRect.Left; Offset := FIndent; end else begin Offset := -Integer(FIndent); XPos := CellRect.Right + Offset; end; case FLineMode of lmBands: if poGridLines in PaintInfo.PaintOptions then begin // Convert the line images in correct bands. SetLength(NewStyles, Length(LineImage)); for I := IndentSize - 1 downto 0 do begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FLineMode = lmBands');{$endif} if (vsExpanded in Node.States) and not (vsAllChildrenHidden in Node.States) then NewStyles[I] := ltLeft else case LineImage[I] of ltRight, ltBottomRight, ltTopDownRight, ltTopRight: NewStyles[I] := ltLeftBottom; ltNone: // Have to take over the image to the right of this one. A no line entry can never appear as // last entry so I don't need an end check here. if LineImage[I + 1] in [ltNone, ltTopRight] then NewStyles[I] := NewStyles[I + 1] else NewStyles[I] := ltLeft; ltTopDown: // Have to check the image to the right of this one. A top down line can never appear as // last entry so I don't need an end check here. if LineImage[I + 1] in [ltNone, ltTopRight] then NewStyles[I] := NewStyles[I + 1] else NewStyles[I] := ltLeft; end; end; PaintInfo.Canvas.Font.Color := FColors.GridLineColor; for I := 0 to IndentSize - 1 do begin DrawLineImage(PaintInfo, XPos, CellRect.Top, NodeHeight[Node] - 1, VAlignment, NewStyles[I], BidiMode <> bdLeftToRight); Inc(XPos, Offset); end; end; else // lmNormal {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FLineMode = lmNormal');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} PaintInfo.Canvas.Font.Color := FColors.TreeLineColor; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Font.Color);{$endif} for I := 0 to IndentSize - 1 do begin DrawLineImage(PaintInfo, XPos, CellRect.Top, NodeHeight[Node], VAlignment, LineImage[I], BidiMode <> bdLeftToRight); Inc(XPos, Offset); end; end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintTreeLines');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintSelectionRectangle(Target: TCanvas; WindowOrgX: Integer; const SelectionRect: TRect; TargetRect: TRect); // Helper routine to draw a selection rectangle in the mode determined by DrawSelectionMode. var BlendRect: TRect; TextColorBackup, BackColorBackup: COLORREF; // used to restore forground and background colors when drawing a selection rectangle begin {$ifdef DEBUG_VTV}Logger.Send([lcSelection], 'SelectionRect at PaintSelection', SelectionRect);{$endif} if ((FDrawSelectionMode = smDottedRectangle) and not (tsUseThemes in FStates)) or not MMXAvailable then begin // Classical selection rectangle using dotted borderlines. TextColorBackup := GetTextColor(Target.Handle); SetTextColor(Target.Handle, $FFFFFF); BackColorBackup := GetBkColor(Target.Handle); SetBkColor(Target.Handle, 0); Target.DrawFocusRect(SelectionRect); SetTextColor(Target.Handle, TextColorBackup); SetBkColor(Target.Handle, BackColorBackup); end else begin // Modern alpha blended style. OffsetRect(TargetRect, WindowOrgX, 0); if IntersectRect(BlendRect, OrderRect(SelectionRect), TargetRect) then begin OffsetRect(BlendRect, -WindowOrgX, 0); AlphaBlend(0, Target.Handle, BlendRect, Point(0, 0), bmConstantAlphaAndColor, FSelectionBlendFactor, ColorToRGB(FColors.SelectionRectangleBlendColor)); Target.Brush.Color := FColors.SelectionRectangleBorderColor; Target.FrameRect(SelectionRect); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareCell(var PaintInfo: TVTPaintInfo; WindowOrgX, MaxWidth: Integer); // This method is called immediately before a cell's content is drawn und is responsible to paint selection colors etc. var TextColorBackup, BackColorBackup: COLORREF; FocusRect, InnerRect: TRect; {$ifdef ThemeSupport} RowRect: TRect; //Theme: HTHEME; {$endif ThemeSupport} //--------------- local functions ------------------------------------------- procedure AlphaBlendSelection(Color: TColor); var R: TRect; begin // Take into account any window offset and size limitations in the target bitmap, as this is only as large // as necessary and might not cover the whole node. For normal painting this does not matter (because of // clipping) but for the MMX code there is no such check and it will crash badly when bitmap boundaries are // crossed. R := InnerRect; OffsetRect(R, -WindowOrgX, 0); if R.Left < 0 then R.Left := 0; if R.Right > MaxWidth then R.Right := MaxWidth; AlphaBlend(0, PaintInfo.Canvas.Handle, R, Point(0, 0), bmConstantAlphaAndColor, FSelectionBlendFactor, ColorToRGB(Color)); end; //--------------------------------------------------------------------------- {$ifdef ThemeSupport} //todo { procedure DrawBackground(State: Integer); begin with PaintInfo do if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, State, RowRect, @CellRect) else DrawThemeBackground(Theme, Canvas.Handle, TVP_TREEITEM, State, InnerRect, nil); end; } {$endif ThemeSupport} //--------------- end local functions --------------------------------------- begin {$ifdef ThemeSupport} //todo { if IsWinVistaOrAbove and (tsUseThemes in FStates) and (toUseExplorerTheme in FOptions.FPaintOptions) then begin RowRect := Rect(0, PaintInfo.CellRect.Top, FRangeX, PaintInfo.CellRect.Bottom); if toShowVertGridLines in FOptions.PaintOptions then Dec(RowRect.Right); Theme := OpenThemeData(Handle, 'TREEVIEW'); end else Theme := 0; } {$endif ThemeSupport} with PaintInfo, Canvas do begin // Fill cell background if its color differs from tree background. with FHeader.FColumns do if poColumnColor in PaintOptions then begin Brush.Color := Items[Column].Color; FillRect(CellRect); end; // Let the application customize the cell background and the content rectangle. DoBeforeCellPaint(Canvas, Node, Column, cpmPaint, CellRect, ContentRect); InnerRect := ContentRect; // The selection rectangle depends on alignment. if not (toGridExtensions in FOptions.FMiscOptions) then begin case Alignment of taLeftJustify: with InnerRect do if Left + NodeWidth < Right then Right := Left + NodeWidth; taCenter: with InnerRect do if (Right - Left) > NodeWidth then begin Left := (Left + Right - NodeWidth) div 2; Right := Left + NodeWidth; end; taRightJustify: with InnerRect do if (Right - Left) > NodeWidth then Left := Right - NodeWidth; end; end; if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin // Fill the selection rectangle. if poDrawSelection in PaintOptions then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States) then begin Brush.Color := FColors.DropTargetColor; Pen.Color := FColors.DropTargetBorderColor; if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then InnerRect := CellRect; if not IsRectEmpty(InnerRect) then if MMXAvailable and (toUseBlendedSelection in FOptions.PaintOptions) then AlphaBlendSelection(Brush.Color) else with InnerRect do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end else begin //lcl: Is not necessary to set the style here //Brush.Style := bsClear; end; end else if vsSelected in Node.States then begin if Focused or (toPopupMode in FOptions.FPaintOptions) then begin Brush.Color := FColors.FocusedSelectionColor; Pen.Color := FColors.FocusedSelectionBorderColor; end else begin Brush.Color := FColors.UnfocusedSelectionColor; Pen.Color := FColors.UnfocusedSelectionBorderColor; end; if (toGridExtensions in FOptions.FMiscOptions) or (toFullRowSelect in FOptions.FSelectionOptions) then InnerRect := CellRect; if not IsRectEmpty(InnerRect) then {$ifdef ThemeSupport} //todo { if Theme <> 0 then begin // If the node is also hot, its background will be drawn later. if not (toHotTrack in FOptions.FPaintOptions) or (Node <> FCurrentHotNode) or ((Column <> FCurrentHotColumn) and not (toFullRowSelect in FOptions.FSelectionOptions)) then DrawBackground(IfThen(Self.Focused, TREIS_SELECTED, TREIS_SELECTEDNOTFOCUS)); end else } {$endif ThemeSupport} if MMXAvailable and (toUseBlendedSelection in FOptions.PaintOptions) then AlphaBlendSelection(Brush.Color) else with InnerRect do RoundRect(Left, Top, Right, Bottom, FSelectionCurveRadius, FSelectionCurveRadius); end; end; end; {$ifdef ThemeSupport} //todo { if (Theme <> 0) and (toHotTrack in FOptions.FPaintOptions) and (Node = FCurrentHotNode) and ((Column = FCurrentHotColumn) or (toFullRowSelect in FOptions.FSelectionOptions)) then DrawBackground(IfThen((vsSelected in Node.States) and not (toAlwaysHideSelection in FOptions.FPaintOptions), TREIS_HOTSELECTED, TREIS_HOT)); } {$endif ThemeSupport} if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin // draw focus rect if (poDrawFocusRect in PaintOptions) and (Focused or (toPopupMode in FOptions.FPaintOptions)) and (FFocusedNode = Node) and ( (Column = FFocusedColumn) {$ifdef ThemeSupport} //todo { or (not (toExtendedFocus in FOptions.FSelectionOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (Theme <> 0) ) } {$endif ThemeSupport} ) then begin TextColorBackup := GetTextColor(Handle); SetTextColor(Handle, $FFFFFF); BackColorBackup := GetBkColor(Handle); SetBkColor(Handle, 0); {$ifdef ThemeSupport} //todo { if not (toExtendedFocus in FOptions.FSelectionOptions) and (toFullRowSelect in FOptions.FSelectionOptions) and (Theme <> 0) then FocusRect := RowRect else } {$endif ThemeSupport} if toGridExtensions in FOptions.FMiscOptions then FocusRect := CellRect else FocusRect := InnerRect; {$ifdef ThemeSupport} //todo { if Theme <> 0 then InflateRect(FocusRect, -1, -1); } {$endif ThemeSupport} LCLIntf.DrawFocusRect(Handle, FocusRect); SetTextColor(Handle, TextColorBackup); SetBkColor(Handle, BackColorBackup); end; end; end; {$ifdef ThemeSupport} //todo { if Theme <> 0 then CloseThemeData(Theme); } {$endif ThemeSupport} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; // Called while loading a tree structure, Node is already valid (allocated) at this point. // The function handles the base and user chunks, any other chunk is marked as being unknown (result becomes False) // and skipped. descendants may handle them by overriding this method. // Returns True if the chunk could be handled, otherwise False. var ChunkBody: TBaseChunkBody; Run: PVirtualNode; LastPosition: Integer; begin case ChunkType of BaseChunk: begin // Load base chunk's body (chunk header has already been consumed). Stream.Read(ChunkBody, SizeOf(ChunkBody)); with Node^ do begin // Set states first, in case the node is invisible. States := ChunkBody.States; NodeHeight := ChunkBody.NodeHeight; TotalHeight := NodeHeight; Align := ChunkBody.Align; CheckState := ChunkBody.CheckState; CheckType := ChunkBody.CheckType; ChildCount := ChunkBody.ChildCount; // Create and read child nodes. while ChunkBody.ChildCount > 0 do begin Run := MakeNewNode; Run.PrevSibling := Node.LastChild; if Assigned(Run.PrevSibling) then Run.Index := Run.PrevSibling.Index + 1; if Assigned(Node.LastChild) then Node.LastChild.NextSibling := Run else Node.FirstChild := Run; Node.LastChild := Run; Run.Parent := Node; ReadNode(Stream, Version, Run); Dec(ChunkBody.ChildCount); end; end; Result := True; end; UserChunk: if ChunkSize > 0 then begin // need to know whether the data was read LastPosition := Stream.Position; DoLoadUserData(Node, Stream); // compare stream position to learn whether the data was read Result := Stream.Position > LastPosition; // Improve stability by advancing the stream to the chunk's real end if // the application did not read what has been written. if not Result or (Stream.Position <> (LastPosition + ChunkSize)) then Stream.Position := LastPosition + ChunkSize; end else Result := True; else // unknown chunk, skip it Stream.Position := Stream.Position + ChunkSize; Result := False; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReadNode(Stream: TStream; Version: Integer; Node: PVirtualNode); // Reads the anchor chunk of each node and initiates reading the sub chunks for this node var Header: TChunkHeader; EndPosition: Integer; begin with Stream do begin // Read anchor chunk of the node. Stream.Read(Header, SizeOf(Header)); if Header.ChunkType = NodeChunk then begin EndPosition := Stream.Position + Header.ChunkSize; // Read all subchunks until the indicated chunk end position is reached in the stream. while Position < EndPosition do begin // Read new chunk header. Stream.Read(Header, SizeOf(Header)); ReadChunk(Stream, Version, Node, Header.ChunkType, Header.ChunkSize); end; // If the last chunk does not end at the given end position then there is something wrong. if Position <> EndPosition then ShowError(SCorruptStream2, hcTFCorruptStream2); end else ShowError(SCorruptStream1, hcTFCorruptStream1); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RedirectFontChangeEvent(Canvas: TCanvas); begin if @Canvas.Font.OnChange <> @FOldFontChange then begin FOldFontChange := Canvas.Font.OnChange; Canvas.Font.OnChange := FontChanged; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RemoveFromSelection(Node: PVirtualNode); var Index: Integer; begin if not FSelectionLocked then begin Assert(Assigned(Node), 'Node must not be nil!'); if vsSelected in Node.States then begin Exclude(Node.States, vsSelected); if FindNodeInSelection(Node, Index, -1, -1) and (Index < FSelectionCount - 1) then Move(FSelection[Index + 1], FSelection[Index], (FSelectionCount - Index - 1) * 4); if FSelectionCount > 0 then Dec(FSelectionCount); SetLength(FSelection, FSelectionCount); if FSelectionCount = 0 then ResetRangeAnchor; Change(Node); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ResetRangeAnchor; // Called when there is no selected node anymore and the selection range anchor needs a new value. begin FRangeAnchor := FFocusedNode; FLastSelectionLevel := -1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RestoreFontChangeEvent(Canvas: TCanvas); begin Canvas.Font.OnChange := FOldFontChange; FOldFontChange := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SelectNodes(StartNode, EndNode: PVirtualNode; AddOnly: Boolean); // Selects a range of nodes and unselects all other eventually selected nodes which are not in this range if // AddOnly is False. // EndNode must be visible while StartNode does not necessarily as in the case where the last focused node is the start // node but it is a child of a node which has been collapsed previously. In this case the first visible parent node // is used as start node. StartNode can be nil in which case the very first node in the tree is used. var NodeFrom, NodeTo, LastAnchor: PVirtualNode; Index: Integer; begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if not FSelectionLocked then begin ClearTempCache; if StartNode = nil then StartNode := GetFirstVisibleNoInit(nil, True) else if not FullyVisible[StartNode] then begin StartNode := GetPreviousVisible(StartNode, True); if StartNode = nil then StartNode := GetFirstVisibleNoInit(nil, True) end; if CompareNodePositions(StartNode, EndNode, True) < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; // The range anchor will be reset by the following call. LastAnchor := FRangeAnchor; if not AddOnly then InternalClearSelection; while NodeFrom <> NodeTo do begin InternalCacheNode(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // select last node too InternalCacheNode(NodeFrom); // now add them all in "one" step AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; if Assigned(LastAnchor) and FindNodeInSelection(LastAnchor, Index, -1, -1) then FRangeAnchor := LastAnchor; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SetFocusedNodeAndColumn(Node: PVirtualNode; Column: TColumnIndex); var OldColumn: TColumnIndex; WasDifferent: Boolean; begin if not FHeader.AllowFocus(Column) then Column := FFocusedColumn; WasDifferent := (Node <> FFocusedNode) or (Column <> FFocusedColumn); OldColumn := FFocusedColumn; FFocusedColumn := Column; DoFocusNode(Node, True); // Check if the change was accepted. if FFocusedNode = Node then begin CancelEditNode; if WasDifferent then DoFocusChange(FFocusedNode, FFocusedColumn); end else // If the user did not accept the new cell to focus then set also the focused column back // to its original state. FFocusedColumn := OldColumn; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SkipNode(Stream: TStream); // Skips the data for the next node in the given stream (including the child nodes). var Header: TChunkHeader; begin with Stream do begin // read achor chunk of the node Stream.Read(Header, SizeOf(Header)); if Header.ChunkType = NodeChunk then Stream.Position := Stream.Position + Header.ChunkSize else ShowError(SCorruptStream1, hcTFCorruptStream1); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StartWheelPanning(const Position: TPoint); // Called when wheel panning should start. A little helper window is created to indicate the reference position, // which determines in which direction and how far wheel panning/scrolling will happen. //--------------- local function -------------------------------------------- function CreateClipRegion: HRGN; // In order to avoid doing all the transparent drawing ourselves we use a // window region for the wheel window. // Since we only work on a very small image (32x32 pixels) this is acceptable. var Start, X, Y, ImageHeight, ImageWidth: Integer; Temp: HRGN; begin Assert(not FPanningWindow.Image.Empty, 'Invalid wheel panning image.'); ImageWidth := FPanningWindow.Image.Width; ImageHeight := FPanningWindow.Image.Height; // Create an initial region on which we operate. Result := CreateRectRgn(0, 0, 0, 0); with FPanningWindow.Image.Canvas do begin for Y := 0 to ImageHeight - 1 do begin Start := -1; for X := 0 to ImageWidth - 1 do begin // Start a new span if we found a non-transparent pixel and no span is currently started. if (Start = -1) and (Pixels[X, Y] <> clFuchsia) then Start := X else if (Start > -1) and (Pixels[X, Y] = clFuchsia) then begin // A non-transparent span is finished. Add it to the result region. Temp := CreateRectRgn(Start, Y, X, Y + 1); CombineRgn(Result, Result, Temp, RGN_OR); DeleteObject(Temp); Start := -1; end; end; // If there is an open span then add this also to the result region. if Start > -1 then begin Temp := CreateRectRgn(Start, Y, ImageWidth, Y + 1); CombineRgn(Result, Result, Temp, RGN_OR); DeleteObject(Temp); end; end; end; // The resulting region is used as window region so we must not delete it. // Windows will own it after the assignment below. end; //--------------- end local function ---------------------------------------- var ImageName: string; begin // Set both panning and scrolling flag. One will be removed shortly depending on whether the middle mouse button is // released before the mouse is moved or vice versa. The first case is referred to as wheel scrolling while the // latter is called wheel panning. KillTimer(Handle, ScrollTimer); DoStateChange([tsWheelPanning, tsWheelScrolling]); if FPanningWindow = nil then begin FPanningWindow := TVirtualPanningWindow.Create; LoadPanningCursors; end; FPanningWindow.Start(Handle, ClientToScreen(Position)); if Integer(FRangeX) > ClientWidth then begin if Integer(FRangeY) > ClientHeight then ImageName := 'VT_MOVEALL_BMP' else ImageName := 'VT_MOVEEW_BMP' end else ImageName := 'VT_MOVENS_BMP'; FPanningWindow.Image.LoadFromLazarusResource(ImageName); FPanningWindow.Show(CreateClipRegion); // Setup the panscroll timer and capture all mouse input. SetFocus; SetCapture(Handle); AdjustPanningCursor(Position.X, Position.Y); SetTimer(Handle, ScrollTimer, 20, nil); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StopWheelPanning; // Stops panning if currently active and destroys the helper window. begin if [tsWheelPanning, tsWheelScrolling] * FStates <> [] then begin // Release the mouse capture and stop the panscroll timer. KillTimer(Handle, ScrollTimer); ReleaseCapture; DoStateChange([], [tsWheelPanning, tsWheelScrolling]); FPanningWindow.Stop; {$ifndef Windows} Cursor := crDefault; {$endif} end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.StructureChange(Node: PVirtualNode; Reason: TChangeReason); begin AdviseChangeEvent(True, Node, Reason); if FUpdateCount = 0 then begin if (FChangeDelay > 0) and not (tsSynchMode in FStates) then SetTimer(Handle, StructureChangeTimer, FChangeDelay, nil) else DoStructureChange(Node, Reason); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.SuggestDropEffect(Source: TObject; Shift: TShiftState; const Pt: TPoint; AllowedEffects: LongWord): LongWord; // determines the drop action to take if the drag'n drop operation ends on this tree // Note: Source can be any Delphi object not just a virtual tree begin Result := AllowedEffects; // prefer MOVE if source and target are the same control, otherwise whatever is allowed as initial value if Assigned(Source) and (Source = Self) then if (AllowedEffects and DROPEFFECT_MOVE) <> 0 then Result := DROPEFFECT_MOVE else // no change else // drag between different applicatons if (AllowedEffects and DROPEFFECT_COPY) <> 0 then Result := DROPEFFECT_COPY; // consider modifier keys and what is allowed at the moment, if none of the following conditions apply then // the initial value just set is used if ssCtrlOS in Shift then begin // copy or link if ssShift in Shift then begin // link if (AllowedEffects and DROPEFFECT_LINK) <> 0 then Result := DROPEFFECT_LINK; end else begin // copy if (AllowedEffects and DROPEFFECT_COPY) <> 0 then Result := DROPEFFECT_COPY; end; end else begin // move, link or default if ssShift in Shift then begin // move if (AllowedEffects and DROPEFFECT_MOVE) <> 0 then Result := DROPEFFECT_MOVE; end else begin // link or default if ssAlt in Shift then begin // link if (AllowedEffects and DROPEFFECT_LINK) <> 0 then Result := DROPEFFECT_LINK; end; // else default end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ToggleSelection(StartNode, EndNode: PVirtualNode); // Switchs the selection state of a range of nodes. // Note: This method is specifically designed to help selecting ranges with the keyboard and considers therefore // the range anchor. var NodeFrom, NodeTo: PVirtualNode; NewSize: Integer; Position: Integer; begin if not FSelectionLocked then begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if StartNode = nil then StartNode := FRoot.FirstChild else if not FullyVisible[StartNode] then StartNode := GetPreviousVisible(StartNode, True); Position := CompareNodePositions(StartNode, EndNode); // nothing to do if start and end node are the same if Position <> 0 then begin if Position < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; ClearTempCache; // 1) toggle the start node if it is before the range anchor if CompareNodePositions(NodeFrom, FRangeAnchor) < 0 then if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); // 2) toggle all nodes within the range NodeFrom := GetNextVisible(NodeFrom, True); while NodeFrom <> NodeTo do begin if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // 3) toggle end node if it is after the range anchor if CompareNodePositions(NodeFrom, FRangeAnchor) > 0 then if not (vsSelected in NodeFrom.States) then InternalCacheNode(NodeFrom) else InternalRemoveFromSelection(NodeFrom); // Do some housekeeping if there was a change. NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; // If the range went over the anchor then we need to reselect it. if not (vsSelected in FRangeAnchor.States) then InternalCacheNode(FRangeAnchor); if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UnselectNodes(StartNode, EndNode: PVirtualNode); // Deselects a range of nodes. // EndNode must be visible while StartNode must not as in the case where the last focused node is the start node // but it is a child of a node which has been collapsed previously. In this case the first visible parent node // is used as start node. StartNode can be nil in which case the very first node in the tree is used. var NodeFrom, NodeTo: PVirtualNode; NewSize: Integer; begin if not FSelectionLocked then begin Assert(Assigned(EndNode), 'EndNode must not be nil!'); if StartNode = nil then StartNode := FRoot.FirstChild else if not FullyVisible[StartNode] then begin StartNode := GetPreviousVisible(StartNode, True); if StartNode = nil then StartNode := FRoot.FirstChild end; if CompareNodePositions(StartNode, EndNode) < 0 then begin NodeFrom := StartNode; NodeTo := EndNode; end else begin NodeFrom := EndNode; NodeTo := StartNode; end; while NodeFrom <> NodeTo do begin InternalRemoveFromSelection(NodeFrom); NodeFrom := GetNextVisible(NodeFrom, True); end; // Deselect last node too. InternalRemoveFromSelection(NodeFrom); // Do some housekeeping. NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateCheckImageList; begin if FCheckImages <> FCustomCheckImages then FCheckImages.Free; FCheckImages := nil; CheckImageListNeeded; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateColumnCheckState(Col: TVirtualTreeColumn); begin Col.CheckState := DetermineNextCheckState(Col.CheckType, Col.CheckState); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateDesigner; var ParentForm: TCustomForm; begin if (csDesigning in ComponentState) and not (csUpdating in ComponentState) then begin ParentForm := GetParentForm(Self); if Assigned(ParentForm) and Assigned(ParentForm.Designer) then ParentForm.Designer.Modified; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateHeaderRect; // Calculates the rectangle the header occupies in non-client area. // These coordinates are in window rectangle. var OffsetX, OffsetY: Integer; //EdgeSize: Integer; Size: TSize; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintHeader],'UpdateHeaderRect');{$endif} FHeaderRect := Rect(0, 0, Width, Height); // Consider borders... Size := GetBorderDimensions; //lclheader //Adjust rect size Inc(FHeaderRect.Right,Size.cx*2); // ... and bevels. OffsetX := BorderWidth; OffsetY := BorderWidth; //todo_lcl { if BevelKind <> bkNone then begin EdgeSize := 0; if BevelInner <> bvNone then Inc(EdgeSize, BevelWidth); if BevelOuter <> bvNone then Inc(EdgeSize, BevelWidth); if beLeft in BevelEdges then Inc(OffsetX, EdgeSize); if beTop in BevelEdges then Inc(OffsetY, EdgeSize); end; } InflateRect(FHeaderRect, -OffsetX, -OffsetY); if hoVisible in FHeader.FOptions then begin if FHeaderRect.Left <= FHeaderRect.Right then FHeaderRect.Bottom := FHeaderRect.Top + Integer(FHeader.FHeight) else FHeaderRect := Rect(0, 0, 0, 0); end else FHeaderRect.Bottom := FHeaderRect.Top; {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'FHeaderRect',FHeaderRect);{$endif} {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintHeader],'UpdateHeaderRect');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateEditBounds; // Used to update the bounds of the current node editor if editing is currently active. var R: TRect; Dummy: Integer; CurrentAlignment: TAlignment; CurrentBidiMode: TBidiMode; begin if tsEditing in FStates then begin if vsMultiline in FFocusedNode.States then R := GetDisplayRect(FFocusedNode, FEditColumn, True, False) else R := GetDisplayRect(FFocusedNode, FEditColumn, True, True); if (toGridExtensions in FOptions.FMiscOptions) then begin // Adjust edit bounds depending on alignment and bidi mode. if FEditColumn <= NoColumn then begin CurrentAlignment := Alignment; CurrentBidiMode := BiDiMode; end else begin CurrentAlignment := FHeader.Columns[FEditColumn].FAlignment; CurrentBidiMode := FHeader.Columns[FEditColumn].FBidiMode; end; // Consider bidi mode here. In RTL context does left alignment actually mean right alignment and vice versa. if CurrentBidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(CurrentAlignment); if CurrentAlignment = taLeftJustify then FHeader.Columns.GetColumnBounds(FEditColumn, Dummy, R.Right) else FHeader.Columns.GetColumnBounds(FEditColumn, R.Left, Dummy); end; if toShowHorzGridLines in TreeOptions.PaintOptions then Dec(R.Bottom); FEditLink.SetBounds(R); end; end; //---------------------------------------------------------------------------------------------------------------------- const ScrollMasks: array[Boolean] of Cardinal = (0, SIF_DISABLENOSCROLL); const // Region identifiers for GetRandomRgn { CLIPRGN = 1; METARGN = 2; APIRGN = 3; } SYSRGN = 4; procedure TBaseVirtualTree.UpdateWindowAndDragImage(const Tree: TBaseVirtualTree; TreeRect: TRect; UpdateNCArea, ReshowDragImage: Boolean); // Method to repaint part of the window area which is not covered by the drag image and to initiate a recapture // of the drag image. // Note: This method must only be called during a drag operation and the tree passed in is the one managing the current // drag image (so it is the actual drag source). {$ifndef INCOMPLETE_WINAPI} var DragRegion, // the region representing the drag image UpdateRegion, // the unclipped region within the tree to be updated NCRegion: HRGN; // the region representing the non-client area of the tree DragRect, NCRect: TRect; RedrawFlags: Cardinal; VisibleTreeRegion: HRGN; DC: HDC; {$endif} begin //todo: reimplement {$ifndef INCOMPLETE_WINAPI} if IntersectRect(TreeRect, TreeRect, ClientRect) then begin // Retrieve the visible region of the window. This is important to avoid overpainting parts of other windows // which overlap this one. VisibleTreeRegion := CreateRectRgn(0, 0, 1, 1); DC := GetDCEx(Handle, 0, DCX_CACHE or DCX_WINDOW or DCX_CLIPSIBLINGS or DCX_CLIPCHILDREN); GetRandomRgn(DC, VisibleTreeRegion, SYSRGN); ReleaseDC(Handle, DC); // In Win9x the returned visible region is given in client coordinates. We need it in screen coordinates, though. if not IsWinNT then with ClientToScreen(Point(0, 0)) do OffsetRgn(VisibleTreeRegion, X, Y); // The drag image will figure out itself what part of the rectangle can be recaptured. // Recapturing is not done by taking a snapshot of the screen, but by letting the tree draw itself // into the back bitmap of the drag image. So the order here is unimportant. Tree.FDragImage.RecaptureBackground(Self, TreeRect, VisibleTreeRegion, UpdateNCArea, ReshowDragImage); // Calculate the screen area not covered by the drag image and which needs an update. DragRect := Tree.FDragImage.GetDragImageRect; MapWindowPoints(0, Handle, DragRect, 2); DragRegion := CreateRectRgnIndirect(DragRect); // Start with non-client area if requested. if UpdateNCArea then begin // Compute the part of the non-client area which must be updated. // Determine the outer rectangle of the entire tree window. GetWindowRect(Handle, NCRect); // Express the tree window rectangle in client coordinates (because RedrawWindow wants them so). MapWindowPoints(0, Handle, NCRect, 2); NCRegion := CreateRectRgnIndirect(NCRect); // Determine client rect in screen coordinates and create another region for it. UpdateRegion := CreateRectRgnIndirect(ClientRect); // Create a region which only contains the NC part by subtracting out the client area. CombineRgn(NCRegion, NCRegion, UpdateRegion, RGN_DIFF); // Subtract also out what is hidden by the drag image. CombineRgn(NCRegion, NCRegion, DragRegion, RGN_DIFF); RedrawWindow(Handle, nil, NCRegion, RDW_FRAME or RDW_NOERASE or RDW_NOCHILDREN or RDW_INVALIDATE or RDW_VALIDATE or RDW_UPDATENOW); DeleteObject(NCRegion); DeleteObject(UpdateRegion); end; UpdateRegion := CreateRectRgnIndirect(TreeRect); RedrawFlags := RDW_INVALIDATE or RDW_VALIDATE or RDW_UPDATENOW or RDW_NOERASE or RDW_NOCHILDREN; // Remove the part of the update region which is covered by the drag image. CombineRgn(UpdateRegion, UpdateRegion, DragRegion, RGN_DIFF); RedrawWindow(Handle, nil, UpdateRegion, RedrawFlags); DeleteObject(UpdateRegion); DeleteObject(DragRegion); DeleteObject(VisibleTreeRegion); end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateCache; // Starts cache validation if not already done by adding this instance to the worker thread's waiter list // (if not already there) and signalling the thread it can start validating. begin // Wait for thread to stop validation if it is currently validating this tree's cache. InterruptValidation; FStartIndex := 0; {$ifdef EnableThreadSupport} if tsValidationNeeded in FStates then begin // Tell the thread this tree needs actually something to do. WorkerThread.AddTree(Self); WorkEvent.SetEvent; end; {$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateNodeDataSize(var Size: Integer); begin Size := 0; if Assigned(FOnGetNodeDataSize) then FOnGetNodeDataSize(Self, Size); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WndProc(var Message: TLMessage); var Handled: Boolean; begin Handled := False; // Try the header whether it needs to take this message. if Assigned(FHeader) and (FHeader.FStates <> []) then Handled := FHeader.HandleMessage(Message); if not Handled then begin // For auto drag mode, let tree handle itself, instead of TControl. if not (csDesigning in ComponentState) and ((Message.Msg = LM_LBUTTONDOWN) or (Message.Msg = LM_LBUTTONDBLCLK)) then begin Handled := (DragMode = dmAutomatic) and (DragKind = dkDrag); if Handled then begin if not IsControlMouseMsg(TLMMouse(Message)) then begin //lclheader //let the header handle the message here //otherwise no header click event will be fired FHeader.HandleMessage(Message); ControlState := ControlState + [csLButtonDown]; Dispatch(Message); // overrides TControl's BeginDrag end; end; end; if not Handled and Assigned(FHeader) then Handled := FHeader.HandleMessage(Message); if not Handled then inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WriteChunks(Stream: TStream; Node: PVirtualNode); // Writes the core chunks for Node into the stream. // Note: descendants can optionally override this method to add other node specific chunks. // Keep in mind that this method is also called for the root node. Using this fact in descendants you can // create a kind of "global" chunks not directly bound to a specific node. var Header: TChunkHeader; LastPosition, ChunkSize: Integer; Chunk: TBaseChunk; Run: PVirtualNode; begin with Stream do begin // 1. The base chunk... LastPosition := Position; Chunk.Header.ChunkType := BaseChunk; with Node^, Chunk do begin Body.ChildCount := ChildCount; Body.NodeHeight := NodeHeight; // Some states are only temporary so take them out as they make no sense at the new location. Body.States := States - [vsChecking, vsCutOrCopy, vsDeleting, vsInitialUserData, vsHeightMeasured]; Body.Align := Align; Body.CheckState := CheckState; Body.CheckType := CheckType; Body.Reserved := 0; end; // write the base chunk Write(Chunk, SizeOf(Chunk)); // 2. ... directly followed by the child node chunks (actually they are child chunks of // the base chunk) if vsInitialized in Node.States then begin Run := Node.FirstChild; while Assigned(Run) do begin WriteNode(Stream, Run); Run := Run.NextSibling; end; end; FinishChunkHeader(Stream, LastPosition, Position); // 3. write user data LastPosition := Position; Header.ChunkType := UserChunk; Write(Header, SizeOf(Header)); DoSaveUserData(Node, Stream); // check if the application actually wrote data ChunkSize := Position - LastPosition - SizeOf(TChunkHeader); // seek back to start of chunk if nothing has been written if ChunkSize = 0 then begin Position := LastPosition; Size := Size - SizeOf(Header); end else FinishChunkHeader(Stream, LastPosition, Position); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.WriteNode(Stream: TStream; Node: PVirtualNode); // Writes the "cover" chunk for Node to Stream and initiates writing child nodes and chunks. var LastPosition: Integer; Header: TChunkHeader; begin // Initialize the node first if necessary and wanted. if toInitOnSave in FOptions.FMiscOptions then begin if not (vsInitialized in Node.States) then InitNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); end; with Stream do begin LastPosition := Position; // Emit the anchor chunk. Header.ChunkType := NodeChunk; Write(Header, SizeOf(Header)); // Write other chunks to stream taking their size into this chunk's size. WriteChunks(Stream, Node); // Update chunk size. FinishChunkHeader(Stream, LastPosition, Position); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AbsoluteIndex(Node: PVirtualNode): Cardinal; begin Result := 0; while Assigned(Node) and (Node <> FRoot) do begin if not (vsInitialized in Node.States) then InitNode(Node); if Assigned(Node.PrevSibling) then begin // if there's a previous sibling then add its total count to the result Node := Node.PrevSibling; Inc(Result, Node.TotalCount); end else begin Node := Node.Parent; if Node <> FRoot then Inc(Result); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode; // Adds a new node to the given parent node. This is simply done by increasing the child count of the // parent node. If Parent is nil then the new node is added as (last) top level node. // UserData can be used to set the first 4 bytes of the user data area to an initial value which can be used // in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet // "officially" initialized. // AddChild is a compatibility method and will implicitly validate the parent node. This is however // against the virtual paradigm and hence I dissuade from its usage. var NodeData: ^Pointer; begin if not (toReadOnly in FOptions.FMiscOptions) then begin CancelEditNode; if Parent = nil then Parent := FRoot; if not (vsInitialized in Parent.States) then InitNode(Parent); // Locally stop updates of the tree in order to avoid usage of the new node before it is correctly set up. // If the update count was 0 on enter then there will be a correct update at the end of this method. Inc(FUpdateCount); try SetChildCount(Parent, Parent.ChildCount + 1); // Update the hidden children flag of the parent. Nodes are added as being visible by default. Exclude(Parent.States, vsAllChildrenHidden); finally Dec(FUpdateCount); end; Result := Parent.LastChild; // Check if there is initial user data and there is also enough user data space allocated. if Assigned(UserData) then if FNodeDataSize >= 4 then begin NodeData := Pointer(PByte(@Result.Data) + FTotalInternalDataSize); NodeData^ := UserData; Include(Result.States, vsInitialUserData); end else ShowError(SCannotSetUserData, hcTFCannotSetUserData); InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; if tsStructureChangePending in FStates then begin if Parent = FRoot then StructureChange(nil, crChildAdded) else StructureChange(Parent, crChildAdded); end; if (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then Sort(Parent, FHeader.FSortColumn, FHeader.FSortDirection, True); InvalidateToBottom(Parent); //lcl //Calling UpdateHorizontalScrollBar without a header leads to a //wrong NodeWidth because the node is not initialized at this time. //As result the horizontal scrollbar is not correctly //sized and the node can not be selected by a click. if HandleAllocated then UpdateVerticalScrollBar(True) end; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AddFromStream(Stream: TStream; TargetNode: PVirtualNode); // loads nodes from the given stream and adds them to TargetNode // the current content is not cleared before the load process starts (see also LoadFromStream) var ThisID: TMagicID; Version, Count: Cardinal; Node: PVirtualNode; begin if not (toReadOnly in FOptions.FMiscOptions) then begin // check first whether this is a stream we can read Stream.ReadBuffer(ThisID, SizeOf(TMagicID)); if (ThisID[0] = MagicID[0]) and (ThisID[1] = MagicID[1]) and (ThisID[2] = MagicID[2]) and (ThisID[5] = MagicID[5]) then begin Version := Word(ThisID[3]); if Version <= VTTreeStreamVersion then begin BeginUpdate; try if Version < 2 then Count := MaxInt else Stream.ReadBuffer(Count, SizeOf(Count)); while (Stream.Position < Stream.Size) and (Count > 0) do begin Dec(Count); Node := MakeNewNode; InternalConnectNode(Node, TargetNode, Self, amAddChildLast); InternalAddFromStream(Stream, Version, Node); end; if TargetNode = FRoot then DoNodeCopied(nil) else DoNodeCopied(TargetNode); finally EndUpdate; end; end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.AfterConstruction; begin inherited; if FRoot = nil then InitRootNode; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Assign(Source: TPersistent); begin if (Source is TBaseVirtualTree) and not (toReadOnly in FOptions.FMiscOptions) then with Source as TBaseVirtualTree do begin Self.Align := Align; Self.Anchors := Anchors; Self.AutoScrollDelay := AutoScrollDelay; Self.AutoScrollInterval := AutoScrollInterval; Self.AutoSize := AutoSize; Self.Background := Background; //todo_lcl { Self.BevelEdges := BevelEdges; Self.BevelInner := BevelInner; Self.BevelKind := BevelKind; Self.BevelOuter := BevelOuter; Self.BevelWidth := BevelWidth; } Self.BiDiMode := BiDiMode; Self.BorderStyle := BorderStyle; Self.BorderWidth := BorderWidth; Self.ChangeDelay := ChangeDelay; Self.CheckImageKind := CheckImageKind; Self.Color := Color; Self.Colors.Assign(Colors); Self.Constraints.Assign(Constraints); Self.DefaultNodeHeight := DefaultNodeHeight; Self.DefaultPasteMode := DefaultPasteMode; Self.DragCursor := DragCursor; Self.DragImageKind := DragImageKind; Self.DragKind := DragKind; Self.DragMode := DragMode; Self.Enabled := Enabled; Self.Font := Font; Self.Header := Header; Self.HintMode := HintMode; Self.HotCursor := HotCursor; Self.Images := Images; //Self.ImeMode := ImeMode; //Self.ImeName := ImeName; Self.Indent := Indent; Self.Margin := Margin; Self.NodeAlignment := NodeAlignment; Self.NodeDataSize := NodeDataSize; Self.TreeOptions := TreeOptions; //Self.ParentBiDiMode := ParentBiDiMode; Self.ParentColor := ParentColor; Self.ParentFont := ParentFont; Self.ParentShowHint := ParentShowHint; Self.PopupMenu := PopupMenu; Self.RootNodeCount := RootNodeCount; Self.ScrollBarOptions := ScrollBarOptions; Self.ShowHint := ShowHint; Self.StateImages := StateImages; Self.TabOrder := TabOrder; Self.TabStop := TabStop; Self.Visible := Visible; Self.SelectionCurveRadius := SelectionCurveRadius; Self.SelectionBlendFactor := SelectionBlendFactor; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginDrag(Immediate: Boolean; Threshold: Integer); // Reintroduced method to allow to start OLE drag'n drop as well as VCL drag'n drop. begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcDrag],'BeginDrag');{$endif} if FDragType = dtVCL then begin DoStateChange([tsVCLDragPending]); inherited; end else if (FStates * [tsOLEDragPending, tsOLEDragging]) = [] then begin // Drag start position has already been recorded in WMMouseDown. if Threshold < 0 then FDragThreshold := DragManager.DragThreshold else FDragThreshold := Threshold; if Immediate then DoDragging(FLastClickPos) else DoStateChange([tsOLEDragPending]); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcDrag],'BeginDrag');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginSynch; // Starts the synchronous update mode (if not already active). begin if not (csDestroying in ComponentState) then begin if FSynchUpdateCount = 0 then begin DoUpdating(usBeginSynch); // Stop all timers... KillTimer(Handle, ChangeTimer); KillTimer(Handle, StructureChangeTimer); KillTimer(Handle, ExpandTimer); KillTimer(Handle, EditTimer); KillTimer(Handle, ScrollTimer); KillTimer(Handle, SearchTimer); FSearchBuffer := ''; FLastSearchNode := nil; DoStateChange([], [tsEditPending, tsScrollPending, tsScrolling, tsIncrementalSearching]); // ...and trigger pending update states. if tsStructureChangePending in FStates then DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); if tsChangePending in FStates then DoChange(FLastChangedNode); end else DoUpdating(usSynch); end; Inc(FSynchUpdateCount); DoStateChange([tsSynchMode]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.BeginUpdate; begin if not (csDestroying in ComponentState) then begin if FUpdateCount = 0 then begin DoUpdating(usBegin); SetUpdateState(True); end else DoUpdating(usUpdate); end; Inc(FUpdateCount); DoStateChange([tsUpdating]); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CancelCutOrCopy; // Resets nodes which are marked as being cut. var Run: PVirtualNode; begin if ([tsCutPending, tsCopyPending] * FStates) <> [] then begin Run := FRoot.FirstChild; while Assigned(Run) do begin if vsCutOrCopy in Run.States then Exclude(Run.States, vsCutOrCopy); Run := GetNextNoInit(Run); end; end; DoStateChange([], [tsCutPending, tsCopyPending]); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CancelEditNode: Boolean; // Called by the application or the current edit link to cancel the edit action. begin if HandleAllocated and ([tsEditing, tsEditPending] * FStates <> []) then Result := DoCancelEdit else Result := True; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CancelOperation; // Called by the application to cancel a long-running operation. begin if FOperationCount > 0 then FOperationCanceled := True; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CanEdit(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Returns True if the given node can be edited. begin Result := (toEditable in FOptions.FMiscOptions) and Enabled and not (toReadOnly in FOptions.FMiscOptions); DoCanEdit(Node, Column, Result); end; function TBaseVirtualTree.CanScroll(const ClientMousePos: TPoint): Boolean; // Determines whether auto scrolling can occur based on current mouse cursor position. begin Result := False; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Clear; begin if not (toReadOnly in FOptions.FMiscOptions) or (csDestroying in ComponentState) then begin BeginUpdate; try InterruptValidation; if IsEditing then CancelEditNode; if ClipboardStates * FStates <> [] then begin OleSetClipBoard(nil); DoStateChange([], ClipboardStates); end; ClearSelection; FFocusedNode := nil; FLastSelected := nil; FCurrentHotNode := nil; FDropTargetNode := nil; FLastChangedNode := nil; FRangeAnchor := nil; FCheckNode := nil; FLastVCLDragTarget := nil; FLastSearchNode := nil; DeleteChildren(FRoot, True); FOffsetX := 0; FOffsetY := 0; finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearChecked; var Node: PVirtualNode; begin Node := RootNode.FirstChild; while Assigned(Node) do begin if Node.CheckState <> csUncheckedNormal then CheckState[Node] := csUncheckedNormal; Node := GetNextNoInit(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ClearSelection; var Node: PVirtualNode; R: TRect; Counter: Integer; begin if not FSelectionLocked and (FSelectionCount > 0) and not (csDestroying in ComponentState) then begin if (FUpdateCount = 0) and HandleAllocated and (FVisibleCount > 0) then begin // Iterate through nodes currently visible in the client area and invalidate them. Node := TopNode; if Assigned(Node) then R := GetDisplayRect(Node, NoColumn, False); Counter := FSelectionCount; while Assigned(Node) do begin R.Bottom := R.Top + Integer(NodeHeight[Node]); if vsSelected in Node.States then begin InvalidateRect(Handle, @R, False); Dec(Counter); // Only try as many nodes as are selected. if Counter = 0 then Break; end; R.Top := R.Bottom; if R.Top > ClientHeight then Break; Node := GetNextVisibleNoInit(Node, True); end; end; InternalClearSelection; Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CopyTo(Source: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; // A simplified CopyTo method to allow to copy nodes to the root of another tree. begin Result := CopyTo(Source, Tree.FRoot, Mode, ChildrenOnly); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.CopyTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean): PVirtualNode; // Copies Source and all its child nodes to Target. // Mode is used to specify further where to add the new node actually (as sibling of Target or as child of Target). // Result is the newly created node to which source has been copied if ChildrenOnly is False or just contains Target // in the other case. // ChildrenOnly determines whether to copy also the source node or only its child nodes. var TargetTree: TBaseVirtualTree; Stream: TMemoryStream; begin Assert(TreeFromNode(Source) = Self, 'The source tree must contain the source node.'); Result := nil; if (Mode <> amNoWhere) and Assigned(Source) and (Source <> FRoot) then begin // Assume that an empty destination means the root in this (the source) tree. if Target = nil then begin TargetTree := Self; Target := FRoot; Mode := amAddChildFirst; end else TargetTree := TreeFromNode(Target); if not (toReadOnly in TargetTree.FOptions.FMiscOptions) then begin if Target = TargetTree.FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; Stream := TMemoryStream.Create; try // Write all nodes into a temprary stream depending on the ChildrenOnly flag. if not ChildrenOnly then WriteNode(Stream, Source) else begin Source := Source.FirstChild; while Assigned(Source) do begin WriteNode(Stream, Source); Source := Source.NextSibling; end; end; // Now load the serialized nodes into the target node (tree). TargetTree.BeginUpdate; try Stream.Position := 0; while Stream.Position < Stream.Size do begin Result := TargetTree.MakeNewNode; InternalConnectNode(Result, Target, TargetTree, Mode); TargetTree.InternalAddFromStream(Stream, VTTreeStreamVersion, Result); if not DoNodeCopying(Result, Target) then begin TargetTree.DeleteNode(Result); Result := nil; end else DoNodeCopied(Result); end; if ChildrenOnly then Result := Target; finally TargetTree.EndUpdate; end; finally Stream.Free; end; with TargetTree do begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollBars(True); Invalidate; end; StructureChange(Source, crNodeCopied); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CopyToClipBoard; var DataObject: IDataObject; begin if FSelectionCount > 0 then begin DataObject := TVTDataObject.Create(Self, True) as IDataObject; if OleSetClipBoard(DataObject) = S_OK then begin MarkCutCopyNodes; DoStateChange([tsCopyPending]); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.CutToClipBoard; var DataObject: IDataObject; begin if (FSelectionCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin DataObject := TVTDataObject.Create(Self, True) as IDataObject; if OleSetClipBoard(DataObject) = S_OK then begin MarkCutCopyNodes; DoStateChange([tsCutPending], [tsCopyPending]); Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DefaultHandler(var AMessage); begin //used to avoid default handler of LM_MOUSEWHEEL end; procedure TBaseVirtualTree.DeleteChildren(Node: PVirtualNode; ResetHasChildren: Boolean = False); // Removes all children and their children from memory without changing the vsHasChildren style by default. var Run, Mark: PVirtualNode; LastTop, LastLeft, NewSize: Integer; ParentVisible: Boolean; begin if (Node.ChildCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin Assert(not (tsIterating in FStates), 'Deleting nodes during tree iteration leads to invalid pointers.'); // The code below uses some flags for speed improvements which may cause invalid pointers if updates of // the tree happen. Hence switch updates off until we have finished the operation. Inc(FUpdateCount); try InterruptValidation; LastLeft := -FEffectiveOffsetX; LastTop := FOffsetY; // Make a local copy of the visibility state of this node to speed up // adjusting the visible nodes count. ParentVisible := Node = FRoot; if not ParentVisible then ParentVisible := FullyVisible[Node] and (vsExpanded in Node.States); // Show that we are clearing the child list, to avoid registering structure change events. Include(Node.States, vsClearing); Run := Node.LastChild; while Assigned(Run) do begin if ParentVisible and (vsVisible in Run.States) then Dec(FVisibleCount); Include(Run.States, vsDeleting); Mark := Run; Run := Run.PrevSibling; // Important, to avoid exchange of invalid pointers while disconnecting the node. if Assigned(Run) then Run.NextSibling := nil; DeleteNode(Mark); end; Exclude(Node.States, vsClearing); if ResetHasChildren then Exclude(Node.States, vsHasChildren); if Node <> FRoot then Exclude(Node.States, vsExpanded); Node.ChildCount := 0; if (Node = FRoot) or (vsDeleting in Node.States) then begin Node.TotalHeight := FDefaultNodeHeight + NodeHeight[Node]; Node.TotalCount := 1; end else begin AdjustTotalHeight(Node, NodeHeight[Node]); AdjustTotalCount(Node, 1); end; Node.FirstChild := nil; Node.LastChild := nil; finally Dec(FUpdateCount); end; InvalidateCache; if FUpdateCount = 0 then begin NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; ValidateCache; UpdateScrollbars(True); // Invalidate entire tree if it scrolled e.g. to make the last node also the // bottom node in the treeview. if (LastLeft <> FOffsetX) or (LastTop <> FOffsetY) then Invalidate else InvalidateToBottom(Node); end; StructureChange(Node, crChildDeleted); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DeleteNode(Node: PVirtualNode; Reindex: Boolean = True); var LastTop, LastLeft: Integer; LastParent: PVirtualNode; WasInSynchMode: Boolean; ParentClearing: Boolean; begin if Assigned(Node) and (Node <> FRoot) and not (toReadOnly in FOptions.FMiscOptions) then begin Assert(not (tsIterating in FStates), 'Deleting nodes during tree iteration leads to invalid pointers.'); // Determine parent node for structure change notification. ParentClearing := vsClearing in Node.Parent.States; LastParent := Node.Parent; if not ParentClearing then begin if LastParent = FRoot then StructureChange(nil, crChildDeleted) else StructureChange(LastParent, crChildDeleted); end; LastLeft := -FEffectiveOffsetX; LastTop := FOffsetY; if vsSelected in Node.States then begin if FUpdateCount = 0 then begin // Go temporarily into sync mode to avoid a delayed change event for the node // when unselecting. WasInSynchMode := tsSynchMode in FStates; Include(FStates, tsSynchMode); RemoveFromSelection(Node); if not WasInSynchMode then Exclude(FStates, tsSynchMode); InvalidateToBottom(LastParent); end else InternalRemoveFromSelection(Node); end else InvalidateToBottom(LastParent); if tsHint in FStates then begin Application.CancelHint; DoStateChange([], [tsHint]); end; DeleteChildren(Node); InternalDisconnectNode(Node, False, Reindex); DoFreeNode(Node); if not ParentClearing then begin DetermineHiddenChildrenFlag(LastParent); InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; UpdateScrollbars(True); // Invalidate entire tree if it scrolled e.g. to make the last node also the // bottom node in the treeview. if (LastLeft <> FOffsetX) or (LastTop <> FOffsetY) then Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.DeleteSelectedNodes; // Deletes all currently selected nodes (including their child nodes). var Nodes: TNodeArray; I: Integer; LevelChange: Boolean; begin Nodes := nil; if (FSelectionCount > 0) and not (toReadOnly in FOptions.FMiscOptions) then begin BeginUpdate; try Nodes := GetSortedSelection(True); for I := High(Nodes) downto 1 do begin LevelChange := Nodes[I].Parent <> Nodes[I - 1].Parent; DeleteNode(Nodes[I], LevelChange); end; DeleteNode(Nodes[0]); finally EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.Dragging: Boolean; begin // Check for both OLE drag'n drop as well as VCL drag'n drop. Result := ([tsOLEDragPending, tsOLEDragging] * FStates <> []) or inherited Dragging; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.EditNode(Node: PVirtualNode; Column: TColumnIndex): Boolean; // Application triggered edit event for the given node. // Returns True if the tree started editing otherwise False. begin Assert(Assigned(Node), 'Node must not be nil.'); Assert((Column > InvalidColumn) and (Column < FHeader.Columns.Count), 'Column must be a valid column index (-1 if no header is shown).'); Result := tsEditing in FStates; // If the tree is already editing then we don't disrupt this. if not Result and not (toReadOnly in FOptions.FMiscOptions) then begin FocusedNode := Node; if Assigned(FFocusedNode) and (Node = FFocusedNode) and CanEdit(FFocusedNode, Column) then begin FEditColumn := Column; if not (vsInitialized in Node.States) then InitNode(Node); DoEdit; Result := tsEditing in FStates; end else Result := False; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.EndEditNode: Boolean; // Called to finish a current edit action or stop the edit timer if an edit operation is pending. begin if [tsEditing, tsEditPending] * FStates <> [] then Result := DoEndEdit else Result := True; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndSynch; begin if FSynchUpdateCount > 0 then Dec(FSynchUpdateCount); if not (csDestroying in ComponentState) then begin if FSynchUpdateCount = 0 then begin DoStateChange([], [tsSynchMode]); DoUpdating(usEndSynch); end else DoUpdating(usSynch); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.EndUpdate; var NewSize: Integer; begin if FUpdateCount > 0 then Dec(FUpdateCount); if not (csDestroying in ComponentState) then begin if (FUpdateCount = 0) and (tsUpdating in FStates) then begin if tsUpdateHiddenChildrenNeeded in FStates then begin DetermineHiddenChildrenFlagAllNodes; Exclude(FStates, tsUpdateHiddenChildrenNeeded); end; DoStateChange([], [tsUpdating]); NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); end; InvalidateCache; ValidateCache; if HandleAllocated then UpdateScrollBars(False); if tsStructureChangePending in FStates then DoStructureChange(FLastStructureChangeNode, FLastStructureChangeReason); try if tsChangePending in FStates then DoChange(FLastChangedNode); finally if toAutoSort in FOptions.FAutoOptions then SortTree(FHeader.FSortColumn, FHeader.FSortDirection, True); SetUpdateState(False); if HandleAllocated then Invalidate; UpdateDesigner; end; end; if FUpdateCount = 0 then DoUpdating(usEnd) else DoUpdating(usUpdate); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ExecuteAction(Action: TBasicAction): Boolean; // Some support for standard actions. begin Result := inherited ExecuteAction(Action); if not Result then begin Result := Action is TEditSelectAll; if Result then SelectAll(False) else begin Result := Action is TEditCopy; if Result then CopyToClipboard else if not (toReadOnly in FOptions.FMiscOptions) then begin Result := Action is TEditCut; if Result then CutToClipBoard else begin Result := Action is TEditPaste; if Result then PasteFromClipboard else begin Result := Action is TEditDelete; if Result then DeleteSelectedNodes end; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FinishCutOrCopy; // Deletes nodes which are marked as being cutted. var Run, ToDelete: PVirtualNode; begin if tsCutPending in FStates then begin Run := FRoot.FirstChild; while Assigned(Run) do begin if vsCutOrCopy in Run.States then begin ToDelete := Run; Run := GetNextNoInit(Run); DeleteNode(ToDelete); end else Run := GetNextNoInit(Run); end; DoStateChange([], [tsCutPending]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FlushClipboard; // Used to render the data which is currently on the clipboard (finishes delayed rendering). begin if ClipboardStates * FStates <> [] then begin DoStateChange([tsClipboardFlushing]); OleFlushClipboard; CancelCutOrCopy; DoStateChange([], [tsClipboardFlushing]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FullCollapse(Node: PVirtualNode = nil); // This routine collapses all expanded nodes in the subtree given by Node or the whole tree if Node is FRoot or nil. // Only nodes which are expanded will be collapsed. This excludes uninitialized nodes but nodes marked as visible // will still be collapsed if they are expanded. var Stop: PVirtualNode; begin if FRoot.TotalCount > 1 then begin if Node = FRoot then Node := nil; DoStateChange([tsCollapsing]); BeginUpdate; try Stop := Node; Node := GetLastVisibleNoInit(Node, True); if Assigned(Node) then begin repeat if [vsHasChildren, vsExpanded] * Node.States = [vsHasChildren, vsExpanded] then ToggleNode(Node); Node := GetPreviousNoInit(Node); until Node = Stop; // Collapse the start node too. if Assigned(Node) and ([vsHasChildren, vsExpanded] * Node.States = [vsHasChildren, vsExpanded]) then ToggleNode(Node); end; finally EndUpdate; DoStateChange([], [tsCollapsing]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.FullExpand(Node: PVirtualNode = nil); // This routine expands all collapsed nodes in the subtree given by Node or the whole tree if Node is FRoot or nil. // All nodes on the way down are initialized so this procedure might take a long time. // Since all nodes are validated, the tree cannot make use of optimatizations. Hence it is counter productive and you // should consider avoiding its use. var Stop: PVirtualNode; begin if FRoot.TotalCount > 1 then begin DoStateChange([tsExpanding]); BeginUpdate; try if Node = nil then begin Node := FRoot.FirstChild; Stop := nil; end else begin Stop := Node.NextSibling; if Stop = nil then begin Stop := Node; repeat Stop := Stop.Parent; until (Stop = FRoot) or Assigned(Stop.NextSibling); if Stop = FRoot then Stop := nil else Stop := Stop.NextSibling; end; end; // Initialize the start node. Others will be initialized in GetNext. if not (vsInitialized in Node.States) then InitNode(Node); repeat if not (vsExpanded in Node.States) then ToggleNode(Node); Node := GetNext(Node); until Node = Stop; finally EndUpdate; DoStateChange([], [tsExpanding]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifndef fpc} function TBaseVirtualTree.GetControlsAlignment: TAlignment; begin Result := FAlignment; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetDisplayRect(Node: PVirtualNode; Column: TColumnIndex; TextOnly: Boolean; Unclipped: Boolean = False; ApplyCellContentMargin: Boolean = False): TRect; // Determines the client coordinates the given node covers, depending on scrolling, expand state etc. // If the given node cannot be found (because one of its parents is collapsed or it is invisible) then an empty // rectangle is returned. // If TextOnly is True then only the text bounds are returned, that is, the resulting rectangle's left and right border // are updated according to bidi mode, alignment and text width of the node. // If Unclipped is True (which only makes sense if also TextOnly is True) then the calculated text rectangle is // not clipped if the text does not entirely fit into the text space. This is special handling needed for hints. // If ApplyCellContentMargin is True (which only makes sense if also TextOnly is True) then the calculated text // rectangle respects the cell content margin. // If Column is -1 then the entire client width is used before determining the node's width otherwise the bounds of the // particular column are used. // Note: Column must be a valid column and is used independent of whether the header is visible or not. var Temp: PVirtualNode; Offset: Cardinal; Indent, TextWidth: Integer; MainColumnHit: Boolean; CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; MaxUnclippedHeight: Integer; TM: TTextMetric; ExtraVerticalMargin: Integer; begin //{$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintHeader],'GetDisplayRect');{$endif} Assert(Assigned(Node), 'Node must not be nil.'); Assert(Node <> FRoot, 'Node must not be the hidden root node.'); MainColumnHit := (Column + 1) in [0, FHeader.MainColumn + 1]; if not (vsInitialized in Node.States) then InitNode(Node); Result := Rect(0, 0, 0, 0); // Check whether the node is visible (determine indentation level btw.). Temp := Node; if not (vsVisible in Temp.States) then Exit; Indent := 0; while Temp <> FRoot do begin if not (vsVisible in Temp.States) or not (vsExpanded in Temp.Parent.States) then Exit; Temp := Temp.Parent; if MainColumnHit and (Temp <> FRoot) then Inc(Indent, FIndent); end; // Here we know the node is visible. Offset := 0; if tsUseCache in FStates then begin // If we can use the position cache then do a binary search to find a cached node which is as close as possible // to the current node. Iterate then through all following and visible nodes and sum up their heights. Temp := FindInPositionCache(Node, Offset); while Assigned(Temp) and (Temp <> Node) do begin Inc(Offset, NodeHeight[Temp]); Temp := GetNextVisibleNoInit(Temp, True); end; end else begin // If the cache is not available then go straight through all nodes up to the root and sum up their heights. Temp := Node; repeat Temp := GetPreviousVisibleNoInit(Temp, True); if Temp = nil then Break; Inc(Offset, NodeHeight[Temp]); until False; end; Result := Rect(0, Offset, Max(FRangeX, ClientWidth), Offset + NodeHeight[Node]); // Limit left and right bounds to the given column (if any) and move bounds according to current scroll state. if Column > NoColumn then begin FHeader.FColumns.GetColumnBounds(Column, Result.Left, Result.Right); // The right column border is not part of this cell. Dec(Result.Right); OffsetRect(Result, 0, FOffsetY); end else OffsetRect(Result, -FEffectiveOffsetX, FOffsetY); // Limit left and right bounds further if only the text area is required. if TextOnly then begin // Start with the offset of the text in the column and consider the indentation level too. Offset := FMargin + Indent; // If the text of a node is involved then we have to consider directionality and alignment too. if Column <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[Column].BidiMode; CurrentAlignment := FHeader.FColumns[Column].Alignment; end; if MainColumnHit then begin if toShowRoot in FOptions.FPaintOptions then Inc(Offset, FIndent); if (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages) and (Node.CheckType <> ctNone) then Inc(Offset, FCheckImages.Height + 2); end; // Consider associated images. if Assigned(FStateImages) and HasImage(Node, ikState, Column) then Inc(Offset, FStateImages.Width + 2); if Assigned(FImages) and HasImage(Node, ikNormal, Column) then Inc(Offset, FImages.Width + 2); // Offset contains now the distance from the left or right border of the rectangle (depending on bidi mode). // Now consider the alignment too and calculate the final result. if CurrentBidiMode = bdLeftToRight then begin Inc(Result.Left, Offset); // Left-to-right reading does not need any special adjustment of the alignment. end else begin Dec(Result.Right, Offset); // Consider bidi mode here. In RTL context does left alignment actually mean right alignment and vice versa. ChangeBiDiModeAlignment(CurrentAlignment); end; TextWidth := DoGetNodeWidth(Node, Column); // Keep cell height before applying cell content margin in order to increase cell height if text does not fit // and Unclipped it true (see below). MaxUnclippedHeight := Result.Bottom - Result.Top; if ApplyCellContentMargin then DoBeforeCellPaint(Self.Canvas, Node, Column, cpmGetContentMargin, Result, Result); if Unclipped then begin // The caller requested the text coordinates unclipped. This means they must be calculated so as would // there be enough space, regardless of column bounds etc. // The layout still depends on the available space too, because this determines the position // of the unclipped text rectangle. if Result.Right - Result.Left < TextWidth - 1 then if CurrentBidiMode = bdLeftToRight then CurrentAlignment := taLeftJustify else CurrentAlignment := taRightJustify; // Increase cell height (up to MaxUnclippedHeight determined above) if text does not fit. GetTextMetrics(Self.Canvas.Handle, TM); ExtraVerticalMargin := Math.Min(TM.tmHeight, MaxUnclippedHeight) - (Result.Bottom - Result.Top); if ExtraVerticalMargin > 0 then InflateRect(Result, 0, (ExtraVerticalMargin + 1) div 2); case CurrentAlignment of taCenter: begin Result.Left := (Result.Left + Result.Right - TextWidth) div 2; Result.Right := Result.Left + TextWidth; end; taRightJustify: Result.Left := Result.Right - TextWidth; else // taLeftJustify Result.Right := Result.Left + TextWidth - 1; end; end else // Modify rectangle only if the text fits entirely into the given room. if Result.Right - Result.Left > TextWidth then case CurrentAlignment of taCenter: begin Result.Left := (Result.Left + Result.Right - TextWidth) div 2; Result.Right := Result.Left + TextWidth; end; taRightJustify: Result.Left := Result.Right - TextWidth; else // taLeftJustify Result.Right := Result.Left + TextWidth; end; end; //lclheader //todo: add a parameter to decide if the result must be returned as //a tree offset or a control offset if hoVisible in FHeader.FOptions then OffsetRect(Result, 0, FHeader.Height); //{$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'DisplayRect for Node '+IntToStr(Node^.Index),Result);{$endif} //{$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintHeader],'GetDisplayRect');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirst(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree while optionally considering toChildrenAbove. begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin if vsHasChildren in FRoot.States then begin Result := FRoot; // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); end; end else Result := nil; end else Result := nil; end else Result := FRoot.FirstChild; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstChecked(State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree with the given check state. begin Result := GetNextChecked(nil, State, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstChild(Node: PVirtualNode): PVirtualNode; // Returns the first child of the given node. The result node is initialized before exit. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.FirstChild else begin if not (vsInitialized in Node.States) then InitNode(Node); if vsHasChildren in Node.States then begin if Node.ChildCount = 0 then InitChildren(Node); Result := Node.FirstChild; end else Result := nil; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstCutCopy(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree which is currently marked for a clipboard operation. // See also GetNextCutCopy for comments on initialization. begin Result := GetNextCutCopy(nil, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstInitialized(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node which is already initialized. begin Result := GetFirstNoInit(ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then Result := GetNextInitialized(Result, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstLeaf: PVirtualNode; // Returns the first node in the tree which has currently no children. // The result is initialized if necessary. begin Result := GetNextLeaf(nil); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstLevel(NodeLevel: Cardinal): PVirtualNode; // Returns the first node in the tree on a specific level. // The result is initialized if necessary. begin Result := GetFirstNoInit(True); while Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) do Result := GetNextNoInit(Result, True); if Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) then // i.e. there is no node with the desired level in the tree Result := nil; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstNoInit(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the tree while optionally considering toChildrenAbove. // No initialization is performed. begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin if vsHasChildren in FRoot.States then begin Result := FRoot; // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin while Assigned(Result.FirstChild) do Result := Result.FirstChild; end else Result := nil; end else Result := nil; end else Result := FRoot.FirstChild; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstSelected(ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the first node in the current selection while optionally considering toChildrenAbove. begin Result := GetNextSelected(nil, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the first visible node in the tree while optionally considering toChildrenAbove. // If necessary nodes are initialized on demand. begin Result := Node; if not Assigned(Result) then Result := FRoot; if vsHasChildren in Result.States then begin if Result.ChildCount = 0 then InitChildren(Result); // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin Result := GetFirstChild(Result); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Search the first visible sibling. while Assigned(Result.NextSibling) and not (vsVisible in Result.States) do begin Result := Result.NextSibling; // Init node on demand as this might change the visibility. if not (vsInitialized in Result.States) then InitNode(Result); end; // If there a no visible siblings take the parent. if not (vsVisible in Result.States) then begin Result := Result.Parent; if Result = FRoot then Result := nil; Break; end else begin if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); if (not Assigned(Result.FirstChild)) or (not (vsExpanded in Result.States)) then Break; end; Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); until False; end else begin // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; // The visible state can be removed during initialization so init the node first. if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end else Result := nil; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleChild(Node: PVirtualNode): PVirtualNode; // Returns the first visible child node of Node. If necessary nodes are initialized on demand. begin if Node = nil then Node := FRoot; Result := GetFirstChild(Node); if Assigned(Result) and not (vsVisible in Result.States) then Result := GetNextVisibleSibling(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; // Returns the first visible child node of Node. begin if Node = nil then Node := FRoot; Result := Node.FirstChild; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetNextVisibleSiblingNoInit(ResulT); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetFirstVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the first visible node in the tree or given subtree while optionally considering toChildrenAbove. // No initialization is performed. begin Result := Node; if not Assigned(Result) then Result := FRoot; if vsHasChildren in Result.States then begin // Child nodes are the first choice if possible. if Assigned(Result.FirstChild) then begin Result := Result.FirstChild; if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Search the first visible sibling. while Assigned(Result.NextSibling) and not (vsVisible in Result.States) do Result := Result.NextSibling; // If there a no visible siblings take the parent. if not (vsVisible in Result.States) then begin Result := Result.Parent; if Result = FRoot then Result := nil; Break; end else if (not Assigned(Result.FirstChild)) or (not (vsExpanded in Result.States))then Break; Result := Result.FirstChild; until False; end else begin // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end else Result := nil; end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetHitTestInfoAt(X, Y: Integer; Relative: Boolean; var HitInfo: THitInfo); // Determines the node that occupies the specified point or nil if there's none. The parameter Relative determines // whether to consider X and Y as being client coordinates (if True) or as being absolute tree coordinates. // HitInfo is filled with flags describing the hit further. var ColLeft, ColRight: Integer; NodeTop: Integer; InitialColumn, NextColumn: TColumnIndex; CurrentBidiMode: TBidiMode; CurrentAlignment: TAlignment; NodeRect: TRect; begin HitInfo.HitNode := nil; HitInfo.HitPositions := []; HitInfo.HitColumn := NoColumn; // Determine if point lies in the tree's client area. if X < 0 then Include(HitInfo.HitPositions, hiToLeft) else if X > Max(FRangeX, ClientWidth) then Include(HitInfo.HitPositions, hiToRight); //lclheader if Y < IfThen(hoVisible in FHeader.Options, FHeader.Height) then Include(HitInfo.HitPositions, hiAbove) else if Y > Max(FRangeY, inherited GetClientRect.Bottom) then Include(HitInfo.HitPositions, hiBelow); // If the point is in the tree area then check the nodes. if HitInfo.HitPositions = [] then begin // Convert position into absolute coordinate if necessary. if Relative then begin if X > Header.Columns.GetVisibleFixedWidth then Inc(X, FEffectiveOffsetX); //lclheader if hoVisible in FHeader.Options then Dec(Y, FHeader.Height); Dec(Y, FOffsetY); end; HitInfo.HitNode := InternalGetNodeAt(X, Y, False, NodeTop); if HitInfo.HitNode = nil then Include(HitInfo.HitPositions, hiNowhere) else begin // At this point we need some info about the node, so it must be initialized. if not (vsInitialized in HitInfo.HitNode.States) then InitNode(HitInfo.HitNode); if FHeader.UseColumns then begin HitInfo.HitColumn := FHeader.Columns.GetColumnAndBounds(Point(X, Y), ColLeft, ColRight, False); // If auto column spanning is enabled then look for the last non empty column. if toAutoSpanColumns in FOptions.FAutoOptions then begin InitialColumn := HitInfo.HitColumn; // Search to the left of the hit column for empty columns. while (HitInfo.HitColumn > NoColumn) and ColumnIsEmpty(HitInfo.HitNode, HitInfo.HitColumn) do begin NextColumn := FHeader.FColumns.GetPreviousVisibleColumn(HitInfo.HitColumn); if NextColumn = InvalidColumn then Break; HitInfo.HitColumn := NextColumn; Dec(ColLeft, FHeader.FColumns[NextColumn].Width); end; // Search to the right of the hit column for empty columns. repeat InitialColumn := FHeader.FColumns.GetNextVisibleColumn(InitialColumn); if (InitialColumn = InvalidColumn) or not ColumnIsEmpty(HitInfo.HitNode, InitialColumn) then Break; Inc(ColRight, FHeader.FColumns[InitialColumn].Width); until False; end; // Make the X position and the right border relative to the start of the column. Dec(X, ColLeft); Dec(ColRight, ColLeft); end else begin HitInfo.HitColumn := NoColumn; ColRight := Max(FRangeX, ClientWidth); end; ColLeft := 0; if HitInfo.HitColumn = InvalidColumn then Include(HitInfo.HitPositions, hiNowhere) else begin // From now on X is in "column" coordinates (relative to the left column border). HitInfo.HitPositions := [hiOnItem]; // Avoid getting the display rect if this is not necessary. if toNodeHeightResize in FOptions.FMiscOptions then begin NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, False); if Y <= (NodeRect.Top - FOffsetY + 1) then Include(HitInfo.HitPositions, hiUpperSplitter) else if Y >= (NodeRect.Bottom - FOffsetY - 3) then Include(HitInfo.HitPositions, hiLowerSplitter); end; if HitInfo.HitColumn <= NoColumn then begin CurrentBidiMode := BidiMode; CurrentAlignment := Alignment; end else begin CurrentBidiMode := FHeader.FColumns[HitInfo.HitColumn].BidiMode; CurrentAlignment := FHeader.FColumns[HitInfo.HitColumn].Alignment; end; if CurrentBidiMode = bdLeftToRight then DetermineHitPositionLTR(HitInfo, X, ColRight, CurrentAlignment) else DetermineHitPositionRTL(HitInfo, X, ColRight, CurrentAlignment); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLast(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last node in the tree branch given by Node and initializes the nodes all the way down including the // result. toChildrenAbove is optionally considered. By using Node = nil the very last node in the tree is returned. var Next: PVirtualNode; begin Result := GetLastChild(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last child. If not keep the node from the last run. // Otherwise use the next last child. Next := GetLastChild(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastInitialized(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last initialized child node in the tree branch given by Node. begin Result := GetLastNoInit(Node, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then Result := GetPreviousInitialized(Result, ConsiderChildrenAbove); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the very last node in the tree branch given by Node without initialization. var Next: PVirtualNode; begin Result := GetLastChildNoInit(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last child. If not keep the node from the last run. // Otherwise use the next last child. Next := GetLastChildNoInit(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastChild(Node: PVirtualNode): PVirtualNode; // Determines the last child of the given node and initializes it if there is one. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else begin if not (vsInitialized in Node.States) then InitNode(Node); if vsHasChildren in Node.States then begin if Node.ChildCount = 0 then InitChildren(Node); Result := Node.LastChild; end else Result := nil; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastChildNoInit(Node: PVirtualNode): PVirtualNode; // Determines the last child of the given node but does not initialize it. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else begin if vsHasChildren in Node.States then Result := Node.LastChild else Result := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisible(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the very last visible node in the tree while optionally considering toChildrenAbove. // The nodes are intialized all the way down including the result node. var Next: PVirtualNode; begin Result := GetLastVisibleChild(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last visible child. If not keep the node from the last run. // Otherwise use the next last visible child. Next := GetLastVisibleChild(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleChild(Node: PVirtualNode): PVirtualNode; // Determines the last visible child of the given node and initializes it if necessary. begin if (Node = nil) or (Node = FRoot) then Result := GetLastChild(FRoot) else if FullyVisible[Node] and (vsExpanded in Node.States) then Result := GetLastChild(Node) else Result := nil; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetPreviousVisibleSibling(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleChildNoInit(Node: PVirtualNode): PVirtualNode; // Determines the last visible child of the given node without initialization. begin if (Node = nil) or (Node = FRoot) then Result := GetLastChildNoInit(FRoot) else if FullyVisible[Node] and (vsExpanded in Node.States) then Result := GetLastChildNoInit(Node) else Result := nil; if Assigned(Result) and not (vsVisible in Result.States) then Result := GetPreviousVisibleSiblingNoInit(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetLastVisibleNoInit(Node: PVirtualNode = nil; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the very last visible node in the tree while optionally considering toChildrenAbove. // No initialization is performed. var Next: PVirtualNode; begin Result := GetLastVisibleChildNoInit(Node); if not ConsiderChildrenAbove or not (toChildrenAbove in FOptions.FPaintOptions) then while Assigned(Result) do begin // Test if there is a next last visible child. If not keep the node from the last run. // Otherwise use the next last visible child. Next := GetLastVisibleChildNoInit(Result); if Next = nil then Break; Result := Next; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetMaxColumnWidth(Column: TColumnIndex; UseSmartColumnWidth: Boolean = False): Integer; // This method determines the width of the largest node in the given column. // If UseSmartColumnWidth is True then only the visible nodes which are in view will be considered // Note: If UseSmartColumnWidth is False then every visible node in the tree will be initialized contradicting so // the virtual paradigm. var Run, LastNode, NextNode: PVirtualNode; NodeLeft, TextLeft, CurrentWidth: Integer; WithCheck, WithImages, WithStateImages: Boolean; CheckOffset, ImageOffset, StateImageOffset: Integer; begin if OperationCanceled then begin // Behave non-destructive. Result := FHeader.FColumns[Column].Width; Exit; end else Result := 0; BeginOperation; if Assigned(FOnBeforeGetMaxColumnWidth) then FOnBeforeGetMaxColumnWidth(FHeader, Column, UseSmartColumnWidth); // Don't check the event here as descendant trees might have overriden the DoGetImageIndex method. WithImages := Assigned(FImages); if WithImages then ImageOffset := FImages.Width + 2 else ImageOffset := 0; WithStateImages := Assigned(FStateImages); if WithStateImages then StateImageOffset := FStateImages.Width + 2 else StateImageOffset := 0; if Assigned(FCheckImages) then CheckOffset := FCheckImages.Height + 2 else CheckOffset := 0; if UseSmartColumnWidth then // Get first visible node which is in view. Run := GetTopNode else Run := GetFirstVisible(nil, True); if Column = FHeader.MainColumn then begin if toFixedIndent in FOptions.FPaintOptions then NodeLeft := FIndent else begin if toShowRoot in FOptions.FPaintOptions then NodeLeft := Integer((GetNodeLevel(Run) + 1) * FIndent) else NodeLeft := Integer(GetNodeLevel(Run) * FIndent); end; WithCheck := (toCheckSupport in FOptions.FMiscOptions) and Assigned(FCheckImages); end else begin NodeLeft := 0; WithCheck := False; end; // Consider node margin at the left of the nodes. Inc(NodeLeft, FMargin); // Decide where to stop. if UseSmartColumnWidth then LastNode := GetNextVisible(BottomNode) else LastNode := nil; while Assigned(Run) and not OperationCanceled do begin TextLeft := NodeLeft; if WithCheck and (Run.CheckType <> ctNone) then Inc(TextLeft, CheckOffset); if WithImages and HasImage(Run, ikNormal, Column) then Inc(TextLeft, ImageOffset); if WithStateImages and HasImage(Run, ikState, Column) then Inc(TextLeft, StateImageOffset); CurrentWidth := DoGetNodeWidth(Run, Column); Inc(CurrentWidth, DoGetCellContentMargin(Run, Column).X); if Result < (TextLeft + CurrentWidth) then Result := TextLeft + CurrentWidth; // Get next visible node and update left node position if needed. NextNode := GetNextVisible(Run, True); if NextNode = LastNode then Break; if (Column = Header.MainColumn) and not (toFixedIndent in FOptions.FPaintOptions) then Inc(NodeLeft, CountLevelDifference(Run, NextNode) * Integer(FIndent)); Run := NextNode; end; if toShowVertGridLines in FOptions.FPaintOptions then Inc(Result); if Assigned(FOnAfterGetMaxColumnWidth) then FOnAfterGetMaxColumnWidth(FHeader, Column, Result); EndOperation; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNext(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns next node in tree while optionally considering toChildrenAbove. The Result will be initialized if needed. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If this node has no siblings use the parent. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; end; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; // Has this node got children? Initialize them if necessary. if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); // Now take a look at the children. while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); end; end; end else begin // Has this node got children? if vsHasChildren in Result.States then begin // Yes, there are child nodes. Initialize them if necessary. if Result.ChildCount = 0 then InitChildren(Result); end; // if there is no child node try siblings if Assigned(Result.FirstChild) then Result := Result.FirstChild else begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and (Result.CheckState <> State) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in the tree which is currently marked for a clipboard operation. Since only visible nodes can // be marked (or they are hidden after they have been marked) it is not necessary to initialize nodes to check for // child nodes. The result, however, is initialized if necessary. begin if ClipboardStates * FStates <> [] then begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsCutOrCopy in Result.States) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in tree which is initialized. begin Result := Node; repeat Result := GetNextNoInit(Result, ConsiderChildrenAbove); until (Result = nil) or (vsInitialized in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextLeaf(Node: PVirtualNode): PVirtualNode; // Returns the next node in the tree which has currently no children. // The result is initialized if necessary. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.FirstChild else Result := GetNext(Node); while Assigned(Result) and (vsHasChildren in Result.States) do Result := GetNext(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; // Returns the next node in the tree on a specific level. // The result is initialized if necessary. var StartNodeLevel: Cardinal; begin Result := nil; if Assigned(Node) and (Node <> FRoot) then begin StartNodeLevel := GetNodeLevel(Node); if StartNodeLevel < NodeLevel then begin Result := GetNext(Node); if Assigned(Result) and (GetNodeLevel(Result) <> NodeLevel) then Result := GetNextLevel(Result, NodeLevel); end else if StartNodeLevel = NodeLevel then begin Result := Node.NextSibling; if not Assigned(Result) then // i.e. start node was a last sibling begin Result := Node.Parent; if Assigned(Result) then begin // go to next anchestor of the start node which has a next sibling (if exists) while Assigned(Result) and not Assigned(Result.NextSibling) do Result := Result.Parent; if Assigned(Result) then Result := GetNextLevel(Result.NextSibling, NodeLevel); end; end; end else // i.e. StartNodeLevel > NodeLevel Result := GetNextLevel(Node.Parent, NodeLevel); end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean): PVirtualNode; // Optimized version of GetNext performing no initialization, but optionally considering toChildrenAbove. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If this node has no siblings use the parent. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; end; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; // Now take a look at the children. while Assigned(Result.FirstChild) do begin Result := Result.FirstChild; end; end; end else begin // If there is no child node try siblings. if Assigned(Result.FirstChild) then Result := Result.FirstChild else begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the next node in the tree which is currently selected. Since children of unitialized nodes cannot be // in the current selection (because they simply do not exist yet) it is not necessary to initialize nodes here. // The result however is initialized if necessary. begin if FSelectionCount > 0 then begin if (Node = nil) or (Node = FRoot) then Result := GetFirstNoInit(ConsiderChildrenAbove) else Result := GetNextNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsSelected in Result.States) do Result := GetNextNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSibling(Node: PVirtualNode): PVirtualNode; // Returns the next sibling of Node and initializes it if necessary. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.NextSibling; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the next sibling of Node performing no initialization. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns next node in tree, with regard to Node, which is visible. // Nodes which need an initialization (including the result) are initialized. // toChildrenAbove is optionally considered which is the default here. var ForceSearch: Boolean; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); // If the given node is not visible then look for a parent node which is visible, otherwise we will // likely go unnecessarily through a whole bunch of invisible nodes. if not FullyVisible[Result] then Result := GetVisibleParent(Result); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // If there a no siblings anymore, go up one level. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; Break; end; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; if not (vsInitialized in Result.States) then InitNode(Result); if not (vsVisible in Result.States) then Continue; // Now take a look at the children. // As the children are initialized while toggling, we don't need to do this here. while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsInitialized in Result.States) then InitNode(Result); if not (vsVisible in Result.States) then Break; end; // If we found a visible node we don't need to search any longer. if vsVisible in Result.States then Break; end; until False; end else begin // Has this node got children? if [vsHasChildren, vsExpanded] * Result.States = [vsHasChildren, vsExpanded] then begin // Yes, there are child nodes. Initialize them if necessary. if Result.ChildCount = 0 then InitChildren(Result); end; // Child nodes are the first choice if possible. if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then begin Result := GetFirstChild(Result); ForceSearch := False; end else ForceSearch := True; // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if Assigned(Result) and (ForceSearch or not (vsVisible in Result.States)) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the next node in tree, with regard to Node, which is visible. // toChildrenAbove is optionally considered (which is the default). No initialization is done. var ForceSearch: Boolean; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // If there a no siblings anymore, go up one level. if not Assigned(Result.NextSibling) then begin Result := Result.Parent; if Result = FRoot then begin Result := nil; Break; end; if vsVisible in Result.States then Break; end else begin // There is at least one sibling so take it. Result := Result.NextSibling; if not (vsVisible in Result.States) then Continue; // Now take a look at the children. while (vsExpanded in Result.States) and Assigned(Result.FirstChild) do begin Result := Result.FirstChild; if not (vsVisible in Result.States) then Break; end; // If we found a visible node we don't need to search any longer. if vsVisible in Result.States then Break; end; until False; end else begin // If the given node is not visible then look for a parent node which is visible, otherwise we will // likely go unnecessarily through a whole bunch of invisible nodes. if not FullyVisible[Result] then Result := GetVisibleParent(Result); // Child nodes are the first choice if possible. if (vsExpanded in Result.States) and Assigned(Result.FirstChild) then begin Result := Result.FirstChild; ForceSearch := False; end else ForceSearch := True; // If there are no children or the first child is not visible then search the sibling nodes or traverse parents. if ForceSearch or not (vsVisible in Result.States) then begin repeat // Is there a next sibling? if Assigned(Result.NextSibling) then begin Result := Result.NextSibling; if vsVisible in Result.States then Break; end else begin // No sibling anymore, so use the parent's next sibling. if Result.Parent <> FRoot then Result := Result.Parent else begin // There are no further nodes to examine, hence there is no further visible node. Result := nil; Break; end; end; until False; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; // Returns the next visible sibling after Node. Initialization is done implicitly. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := GetNextSibling(Result); until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNextVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the next visible sibling after Node. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := Result.NextSibling; until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeAt(X, Y: Integer): PVirtualNode; // Overloaded variant of GetNodeAt to easy life of application developers which do not need to have the exact // top position returned and always use client coordinates. var Dummy: Integer; begin Result := GetNodeAt(X, Y, True, Dummy); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeAt(X, Y: Integer; Relative: Boolean; var NodeTop: Integer): PVirtualNode; var OffsetByHeader: Boolean; begin //lclheader OffsetByHeader := Relative and (hoVisible in FHeader.Options); if OffsetByHeader then Dec(Y, FHeader.Height); Result := InternalGetNodeAt(X, Y, Relative, NodeTop); //lclheader if OffsetByHeader then Inc(NodeTop, FHeader.Height); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeData(Node: PVirtualNode): Pointer; // Returns the address of the user defined data area in the node. begin Assert(FNodeDataSize > 0, 'NodeDataSize not initialized.'); if (FNodeDataSize <= 0) or (Node = nil) or (Node = FRoot) then Result := nil else Result := PByte(@Node.Data) + FTotalInternalDataSize; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetNodeLevel(Node: PVirtualNode): Cardinal; // returns the level of the given node var Run: PVirtualNode; begin Result := 0; if Assigned(Node) and (Node <> FRoot) then begin Run := Node.Parent; while Run <> FRoot do begin Run := Run.Parent; Inc(Result); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPrevious(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns previous node in tree. If ConsiderChildrenAbove is True the function considers // whether toChildrenAbove is currently set, otherwise the result will always be the previous // node in top-down order regardless of the current PaintOptions. // The Result will be initialized if needed. var Run: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // Has this node got children? Initialize them if necessary. if (vsHasChildren in Result.States) and (Result.ChildCount = 0) then InitChildren(Result); // If there is a last child, take it; if not try the previous sibling. if Assigned(Result.LastChild) then Result := Result.LastChild else if Assigned(Result.PrevSibling) then Result := Result.PrevSibling else begin // If neither a last child nor a previous sibling exist, go the tree upwards and // look, wether one of the parent nodes have a previous sibling. If not the result // will ne nil. repeat Result := Result.Parent; Run := nil; if Result <> FRoot then Run := Result.PrevSibling else Result := nil; until Assigned(Run) or (Result = nil); if Assigned(Run) then Result := Run; end; end else begin // Is there a previous sibling? if Assigned(Node.PrevSibling) then begin // Go down and find the last child node. Result := GetLast(Node.PrevSibling); if Result = nil then Result := Node.PrevSibling; end else // no previous sibling so the parent of the node is the previous visible node if Node.Parent <> FRoot then Result := Node.Parent else Result := nil; end; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousChecked(Node: PVirtualNode; State: TCheckState = csCheckedNormal; ConsiderChildrenAbove: Boolean = False): PVirtualNode; begin if (Node = nil) or (Node = FRoot) then Result := GetLastNoInit(nil, ConsiderChildrenAbove) else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and (Result.CheckState <> State) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousCutCopy(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in the tree which is currently marked for a clipboard operation. Since only visible nodes can // be marked (or they are hidden after they have been marked) it is not necessary to initialize nodes to check for // child nodes. The result, however, is initialized if necessary. begin if ClipboardStates * FStates <> [] then begin if (Node = nil) or (Node = FRoot) then Result := GetLastNoInit(nil, ConsiderChildrenAbove) else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsCutOrCopy in Result.States) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousInitialized(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in tree which is initialized. begin Result := Node; repeat Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); until (Result = nil) or (vsInitialized in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousLeaf(Node: PVirtualNode): PVirtualNode; // Returns the previous node in the tree which has currently no children. // The result is initialized if necessary. begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else Result := GetPrevious(Node); while Assigned(Result) and (vsHasChildren in Result.States) do Result := GetPrevious(Result); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousLevel(Node: PVirtualNode; NodeLevel: Cardinal): PVirtualNode; // Returns the previous node in the tree on a specific level. // The result is initialized if necessary. var StartNodeLevel: Cardinal; Run: PVirtualNode; begin Result := nil; if Assigned(Node) and (Node <> FRoot) then begin StartNodeLevel := GetNodeLevel(Node); if StartNodeLevel < NodeLevel then begin Result := Node.PrevSibling; if Assigned(Result) then begin // go to last descendant of previous sibling with desired node level (if exists) Run := Result; while Assigned(Run) and (GetNodeLevel(Run) < NodeLevel) do begin Result := Run; Run := GetLastChild(Run); end; if Assigned(Run) and (GetNodeLevel(Run) = NodeLevel) then Result := Run else begin if Assigned(Result.PrevSibling) then Result := GetPreviousLevel(Result, NodeLevel) else if Assigned(Result) and (Result.Parent <> FRoot) then Result := GetPreviousLevel(Result.Parent, NodeLevel) else Result := nil; end; end else Result := GetPreviousLevel(Node.Parent, NodeLevel); end else if StartNodeLevel = NodeLevel then begin Result := Node.PrevSibling; if not Assigned(Result) then // i.e. start node was a first sibling begin Result := Node.Parent; if Assigned(Result) then Result := GetPreviousLevel(Result, NodeLevel); end; end else // i.e. StartNodeLevel > NodeLevel Result := GetPreviousLevel(Node.Parent, NodeLevel); end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns previous node in tree, optionally considering toChildrenAbove. No initialization is performed. var Run: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin // If there is a last child, take it; if not try the previous sibling. if Assigned(Result.LastChild) then Result := Result.LastChild else if Assigned(Result.PrevSibling) then Result := Result.PrevSibling else begin // If neither a last child nor a previous sibling exist, go the tree upwards and // look, wether one of the parent nodes have a previous sibling. If not the result // will ne nil. repeat Result := Result.Parent; Run := nil; if Result <> FRoot then Run := Result.PrevSibling else Result := nil; until Assigned(Run) or (Result = nil); if Assigned(Run) then Result := Run; end; end else begin // Is there a previous sibling? if Assigned(Node.PrevSibling) then begin // Go down and find the last child node. Result := GetLastNoInit(Node.PrevSibling); if Result = nil then Result := Node.PrevSibling; end else // No previous sibling so the parent of the node is the previous node. if Node.Parent <> FRoot then Result := Node.Parent else Result := nil end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; // Returns the previous node in the tree which is currently selected. Since children of unitialized nodes cannot be // in the current selection (because they simply do not exist yet) it is not necessary to initialize nodes here. // The result however is initialized if necessary. begin if FSelectionCount > 0 then begin if (Node = nil) or (Node = FRoot) then Result := FRoot.LastChild else Result := GetPreviousNoInit(Node, ConsiderChildrenAbove); while Assigned(Result) and not (vsSelected in Result.States) do Result := GetPreviousNoInit(Result, ConsiderChildrenAbove); if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSibling(Node: PVirtualNode): PVirtualNode; // Get next sibling of Node, initialize it if necessary. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.PrevSibling; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Get next sibling of Node, performes no initialization. begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); Result := Result.PrevSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. // Nodes which need an initialization (including the result) are initialized. // toChildrenAbove is optionally considered which is the default here. var Marker: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); repeat // If the given node is not visible then look for a parent node which is visible and use its last visible // child or the parent node (if there is no visible child) as result. if not FullyVisible[Result] then begin Result := GetVisibleParent(Result); if Result = FRoot then Result := nil; Marker := GetLastVisible(Result, True); if Assigned(Marker) then Result := Marker; end else begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat if Assigned(Result.LastChild) and (vsExpanded in Result.States) then begin Result := Result.LastChild; if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then Break; end else if Assigned(Result.PrevSibling) then begin if not (vsInitialized in Result.PrevSibling.States) then InitNode(Result.PrevSibling); if vsVisible in Result.PrevSibling.States then begin Result := Result.PrevSibling; Break; end; end else begin Marker := nil; repeat Result := Result.Parent; if Result <> FRoot then Marker := GetPreviousVisibleSibling(Result) else Result := nil; until Assigned(Marker) or (Result = nil); if Assigned(Marker) then Result := Marker; Break; end; until False; end else begin repeat // Is there a previous sibling node? if Assigned(Result.PrevSibling) then begin Result := Result.PrevSibling; // Initialize the new node and check its visibility. if not (vsInitialized in Result.States) then InitNode(Result); if vsVisible in Result.States then begin // If there are visible child nodes then use the last one. Marker := GetLastVisible(Result, True); if Assigned(Marker) then Result := Marker; Break; end; end else begin // No previous sibling there so the parent node is the nearest previous node. Result := Result.Parent; if Result = FRoot then Result := nil; Break; end; until False; end; if Assigned(Result) and not (vsInitialized in Result.States) then InitNode(Result); end; until not Assigned(Result) or (vsVisible in Result.States); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. // toChildrenAbove is optionally considered which is the default here. var Marker: PVirtualNode; begin Result := Node; if Assigned(Result) then begin Assert(Result <> FRoot, 'Node must not be the hidden root node.'); repeat // If the given node is not visible then look for a parent node which is visible and use its last visible // child or the parent node (if there is no visible child) as result. if not FullyVisible[Result] then begin Result := GetVisibleParent(Result); if Result = FRoot then Result := nil; Marker := GetLastVisibleNoInit(Result, True); if Assigned(Marker) then Result := Marker; end else begin if ConsiderChildrenAbove and (toChildrenAbove in FOptions.FPaintOptions) then begin repeat // Is the current node expanded and has children? if (vsExpanded in Result.States) and Assigned(Result.LastChild) then begin Result := Result.LastChild; if vsVisible in Result.States then Break; end else if Assigned(Result.PrevSibling) then begin // No children anymore, so take the previous sibling. if vsVisible in Result.PrevSibling.States then begin Result := Result.PrevSibling; Break; end; end else begin // No children and no previous siblings, so walk up the tree and look wether // a parent has a previous visible sibling. If that is the case take it, // otherwise there is no previous visible node. Marker := nil; repeat Result := Result.Parent; if Result <> FRoot then Marker := GetPreviousVisibleSiblingNoInit(Result) else Result := nil; until Assigned(Marker) or (Result = nil); if Assigned(Marker) then Result := Marker; Break; end; until False; end else begin repeat // Is there a previous sibling node? if Assigned(Result.PrevSibling) then begin Result := Result.PrevSibling; if vsVisible in Result.States then begin // If there are visible child nodes then use the last one. Marker := GetLastVisibleNoInit(Result, True); if Assigned(Marker) then Result := Marker; Break; end; end else begin // No previous sibling there so the parent node is the nearest previous node. Result := Result.Parent; if Result = FRoot then Result := nil; Break; end; until False; end; end; until not Assigned(Result) or (vsVisible in Result.States); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; // Returns the previous visible sibling before Node. Initialization is done implicitly. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := GetPreviousSibling(Result); until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetPreviousVisibleSiblingNoInit(Node: PVirtualNode): PVirtualNode; // Returns the previous visible sibling before Node. begin Assert(Assigned(Node) and (Node <> FRoot), 'Invalid parameter.'); Result := Node; repeat Result := Result.PrevSibling; until not Assigned(Result) or (vsVisible in Result.States); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSortedCutCopySet(Resolve: Boolean): TNodeArray; // Same as GetSortedSelection but with nodes marked as being part in the current cut/copy set (e.g. for clipboard). var Run: PVirtualNode; Counter: Cardinal; //--------------- local function -------------------------------------------- procedure IncludeThisNode(Node: PVirtualNode); // adds the given node to the result var Len: Cardinal; begin Len := Length(Result); if Counter = Len then begin if Len < 100 then Len := 100 else Len := Len + Len div 10; SetLength(Result, Len); end; Result[Counter] := Node; Inc(Counter); end; //--------------- end local function ---------------------------------------- begin Run := FRoot.FirstChild; Counter := 0; if Resolve then begin // Resolving is actually easy: just find the first cutted node in logical order // and then never go deeper in level than this node as long as there's a sibling node. // Restart the search for a cutted node (at any level) if there are no further siblings. while Assigned(Run) do begin if vsCutOrCopy in Run.States then begin IncludeThisNode(Run); if Assigned(Run.NextSibling) then Run := Run.NextSibling else begin // If there are no further siblings then go up one or more levels until a node is // found or all nodes have been processed. Although we consider here only initialized // nodes we don't need to make any special checks as only initialized nodes can also be selected. repeat Run := Run.Parent; until (Run = FRoot) or Assigned(Run.NextSibling); if Run = FRoot then Break else Run := Run.NextSibling; end; end else Run := GetNextNoInit(Run); end; end else while Assigned(Run) do begin if vsCutOrCopy in Run.States then IncludeThisNode(Run); Run := GetNextNoInit(Run); end; // set the resulting array to its real length SetLength(Result, Counter); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetSortedSelection(Resolve: Boolean): TNodeArray; // Returns a list of selected nodes sorted in logical order, that is, as they appear in the tree. // If Resolve is True then nodes which are children of other selected nodes are not put into the new array. // This feature is in particuar important when doing drag'n drop as in this case all selected node plus their children // need to be considered. A selected node which is child (grand child etc.) of another selected node is then // automatically included and doesn't need to be explicitely mentioned in the returned selection array. // // Note: The caller is responsible for freeing the array. Allocation is done here. Usually, though, freeing the array // doesn't need additional attention as it is automatically freed by Delphi when it gets out of scope. var Run: PVirtualNode; Counter: Cardinal; begin SetLength(Result, FSelectionCount); if FSelectionCount > 0 then begin Run := FRoot.FirstChild; Counter := 0; if Resolve then begin // Resolving is actually easy: just find the first selected node in logical order // and then never go deeper in level than this node as long as there's a sibling node. // Restart the search for a selected node (at any level) if there are no further siblings. while Assigned(Run) do begin if vsSelected in Run.States then begin Result[Counter] := Run; Inc(Counter); if Assigned(Run.NextSibling) then Run := Run.NextSibling else begin // If there are no further siblings then go up one or more levels until a node is // found or all nodes have been processed. Although we consider here only initialized // nodes we don't need to make any special checks as only initialized nodes can also be selected. repeat Run := Run.Parent; until (Run = FRoot) or Assigned(Run.NextSibling); if Run = FRoot then Break else Run := Run.NextSibling; end; end else Run := GetNextNoInit(Run); end; end else while Assigned(Run) do begin if vsSelected in Run.States then begin Result[Counter] := Run; Inc(Counter); end; Run := GetNextNoInit(Run); end; // Since we may have skipped some nodes the result array is likely to be smaller than the // selection array, hence shorten the result to true length. if Integer(Counter) < Length(Result) then SetLength(Result, Counter); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); // Generic base method for editors, hint windows etc. to get some info about a node. begin R := Rect(0, 0, 0, 0); Text := ''; AFont.Assign(Font); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetTreeRect: TRect; // Returns the true size of the tree in pixels. This size is at least ClientHeight x ClientWidth and depends on // the expand state, header size etc. // Note: if no columns are used then the width of the tree is determined by the largest node which is currently in the // client area. This might however not be the largest node in the entire tree. begin Result := Rect(0, 0, Max(FRangeX, ClientWidth), Max(FRangeY, ClientHeight)); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.GetVisibleParent(Node: PVirtualNode): PVirtualNode; // Returns the first (nearest) parent node of Node which is visible. // This method is one of the seldom cases where the hidden root node could be returned. begin Assert(Assigned(Node), 'Node must not be nil.'); Assert(Node <> FRoot, 'Node must not be the hidden root node.'); Result := Node.Parent; while (Result <> FRoot) and not FullyVisible[Result] do Result := Result.Parent; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.HasAsParent(Node, PotentialParent: PVirtualNode): Boolean; // Determines whether Node has got PotentialParent as one of its parents. var Run: PVirtualNode; begin Result := Assigned(Node) and Assigned(PotentialParent) and (Node <> PotentialParent); if Result then begin Run := Node; while (Run <> FRoot) and (Run <> PotentialParent) do Run := Run.Parent; Result := Run = PotentialParent; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InsertNode(Node: PVirtualNode; Mode: TVTNodeAttachMode; UserData: Pointer = nil): PVirtualNode; // Adds a new node relative to Node. The final position is determined by Mode. // UserData can be used to set the first 4 bytes of the user data area to an initial value which can be used // in OnInitNode and will also cause to trigger the OnFreeNode event (if <> nil) even if the node is not yet // "officially" initialized. // InsertNode is a compatibility method and will implicitly validate the given node if the new node // is to be added as child node. This is however against the virtual paradigm and hence I dissuade from its usage. var NodeData: ^Pointer; begin if Mode <> amNoWhere then begin CancelEditNode; if Node = nil then Node := FRoot; // we need a new node... Result := MakeNewNode; // avoid erronous attach modes if Node = FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Validate given node in case the new node becomes its child. if (Mode in [amAddChildFirst, amAddChildLast]) and not (vsInitialized in Node.States) then InitNode(Node); InternalConnectNode(Result, Node, Self, Mode); // Check if there is initial user data and there is also enough user data space allocated. if Assigned(UserData) then if FNodeDataSize >= 4 then begin NodeData := Pointer(PByte(@Result.Data) + FTotalInternalDataSize); NodeData^ := UserData; Include(Result.States, vsInitialUserData); end else ShowError(SCannotSetUserData, hcTFCannotSetUserData); if FUpdateCount = 0 then begin // If auto sort is enabled then sort the node or its parent (depending on the insert mode). if (toAutoSort in FOptions.FAutoOptions) and (FHeader.FSortColumn > InvalidColumn) then case Mode of amInsertBefore, amInsertAfter: // Here no initialization is necessary because *if* a node has already got children then it // must also be initialized. // Note: Node can never be FRoot at this point. Sort(Node.Parent, FHeader.FSortColumn, FHeader.FSortDirection, True); amAddChildFirst, amAddChildLast: Sort(Node, FHeader.FSortColumn, FHeader.FSortDirection, True); end; UpdateScrollbars(True); if Mode = amInsertBefore then InvalidateToBottom(Result) else InvalidateToBottom(Node); end; StructureChange(Result, crNodeAdded); end else Result := nil; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateChildren(Node: PVirtualNode; Recursive: Boolean); // Invalidates Node and its immediate children. // If Recursive is True then all grandchildren are invalidated as well. // The node itself is initialized if necessary and its child nodes are created (and initialized too if // Recursive is True). var Run: PVirtualNode; begin if Assigned(Node) then begin if not (vsInitialized in Node.States) then InitNode(Node); InvalidateNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Run := Node.FirstChild; end else Run := FRoot.FirstChild; while Assigned(Run) do begin InvalidateNode(Run); if Recursive then InvalidateChildren(Run, True); Run := Run.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateColumn(Column: TColumnIndex); // Invalidates the client area part of a column. var R: TRect; begin if (FUpdateCount = 0) and HandleAllocated and FHeader.FColumns.IsValidColumn(Column) then begin R := ClientRect; //lclheader if hoVisible in FHeader.FOptions then OffsetRect(R, 0, FHeader.Height); FHeader.Columns.GetColumnBounds(Column, R.Left, R.Right); InvalidateRect(Handle, @R, False); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.InvalidateNode(Node: PVirtualNode): TRect; // Initiates repaint of the given node and returns the just invalidated rectangle. begin if (FUpdateCount = 0) and HandleAllocated then begin Result := GetDisplayRect(Node, NoColumn, False); InvalidateRect(Handle, @Result, False); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvalidateToBottom(Node: PVirtualNode); // Initiates repaint of client area starting at given node. If this node is not visible or not yet initialized // then nothing happens. var R: TRect; begin if FUpdateCount = 0 then begin if (Node = nil) or (Node = FRoot) then Invalidate else if (vsInitialized in Node.States) and (vsVisible in Node.States) then begin R := GetDisplayRect(Node, -1, False); if R.Top < ClientHeight then begin if (toChildrenAbove in FOptions.FPaintOptions) and (vsExpanded in Node.States) then Dec(R.Top, Node.TotalHeight + NodeHeight[Node]); R.Bottom := ClientHeight; //lclheader if hoVisible in FHeader.FOptions then Inc(R.Bottom, FHeader.Height); InvalidateRect(Handle, @R, False); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.InvertSelection(VisibleOnly: Boolean); // Inverts the current selection (so nodes which are selected become unselected and vice versa). // If VisibleOnly is True then only visible nodes are considered. var Run: PVirtualNode; NewSize: Integer; NextFunction: TGetNextNodeProc; TriggerChange: Boolean; begin if not FSelectionLocked and (toMultiSelect in FOptions.FSelectionOptions) then begin Run := FRoot.FirstChild; ClearTempCache; if VisibleOnly then NextFunction := GetNextVisibleNoInit else NextFunction := GetNextNoInit; while Assigned(Run) do begin if vsSelected in Run.States then InternalRemoveFromSelection(Run) else InternalCacheNode(Run); Run := NextFunction(Run); end; // do some housekeeping // Need to trigger the OnChange event from here if nodes were only deleted but not added. TriggerChange := False; NewSize := PackArray(FSelection, FSelectionCount); if NewSize > -1 then begin FSelectionCount := NewSize; SetLength(FSelection, FSelectionCount); TriggerChange := True; end; if FTempNodeCount > 0 then begin AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; TriggerChange := False; end; Invalidate; if TriggerChange then Change(nil); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsEditing: Boolean; begin Result := tsEditing in FStates; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IsMouseSelecting: Boolean; begin Result := (tsDrawSelPending in FStates) or (tsDrawSelecting in FStates); end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.IterateSubtree(Node: PVirtualNode; Callback: TVTGetNodeProc; Data: Pointer; Filter: TVirtualNodeStates = []; DoInit: Boolean = False; ChildNodesOnly: Boolean = False): PVirtualNode; // Iterates through the all children and grandchildren etc. of Node (or the entire tree if Node = nil) // and calls for each node the provided callback method (which must not be empty). // Filter determines which nodes to consider (an empty set denotes all nodes). // If DoInit is True then nodes which aren't initialized yet will be initialized. // Note: During execution of the callback the application can set Abort to True. In this case the iteration is stopped // and the last accessed node (the one on which the callback set Abort to True) is returned to the caller. // Otherwise (no abort) nil is returned. var Stop: PVirtualNode; Abort: Boolean; GetNextNode: TGetNextNodeProc; WasIterating: Boolean; begin Assert(Node <> FRoot, 'Node must not be the hidden root node.'); WasIterating := tsIterating in FStates; DoStateChange([tsIterating]); try // prepare function to be used when advancing if DoInit then GetNextNode := GetNext else GetNextNode := GetNextNoInit; Abort := False; if Node = nil then Stop := nil else begin if not (vsInitialized in Node.States) and DoInit then InitNode(Node); // The stopper does not need to be initialized since it is not taken into the enumeration. Stop := Node.NextSibling; if Stop = nil then begin Stop := Node; repeat Stop := Stop.Parent; until (Stop = FRoot) or Assigned(Stop.NextSibling); if Stop = FRoot then Stop := nil else Stop := Stop.NextSibling; end; end; // Use first node if we start with the root. if Node = nil then Node := GetFirstNoInit; if Assigned(Node) then begin if not (vsInitialized in Node.States) and DoInit then InitNode(Node); // Skip given node if only the child nodes are requested. if ChildNodesOnly then begin if Node.ChildCount = 0 then Node := nil else Node := GetNextNode(Node); end; if Filter = [] then begin // unfiltered loop while Assigned(Node) and (Node <> Stop) do begin Callback(Self, Node, Data, Abort); if Abort then Break; Node := GetNextNode(Node); end; end else begin // filtered loop while Assigned(Node) and (Node <> Stop) do begin if Node.States * Filter = Filter then Callback(Self, Node, Data, Abort); if Abort then Break; Node := GetNextNode(Node) end; end; end; if Abort then Result := Node else Result := nil; finally if not WasIterating then DoStateChange([], [tsIterating]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadFromFile(const FileName: TFileName); var FileStream: TFileStream; begin FileStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try LoadFromStream(FileStream); finally FileStream.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.LoadFromStream(Stream: TStream); // Clears the current content of the tree and loads a new structure from the given stream. var ThisID: TMagicID; Version, Count: Cardinal; Node: PVirtualNode; begin if not (toReadOnly in FOptions.FMiscOptions) then begin Clear; // Check first whether this is a stream we can read. if Stream.Read(ThisID, SizeOf(TMagicID)) < SizeOf(TMagicID) then ShowError(SStreamTooSmall, hcTFStreamTooSmall); if (ThisID[0] = MagicID[0]) and (ThisID[1] = MagicID[1]) and (ThisID[2] = MagicID[2]) and (ThisID[5] = MagicID[5]) then begin Version := Word(ThisID[3]); if Version <= VTTreeStreamVersion then begin BeginUpdate; try // LCL port started with tree stream version 2 so no need to do the check here Stream.ReadBuffer(Count, SizeOf(Count)); while (Stream.Position < Stream.Size) and (Count > 0) do begin Dec(Count); Node := MakeNewNode; InternalConnectNode(Node, FRoot, Self, amAddChildLast); InternalAddFromStream(Stream, Version, Node); end; DoNodeCopied(nil); finally EndUpdate; end; end else ShowError(SWrongStreamVersion, hcTFWrongStreamVersion); end else ShowError(SWrongStreamFormat, hcTFWrongStreamFormat); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MeasureItemHeight(const Canvas: TCanvas; Node: PVirtualNode); // If the height of the given node has not yet been measured then do it now. var NewNodeHeight: Integer; begin if not (vsHeightMeasured in Node.States) then begin Include(Node.States, vsHeightMeasured); NewNodeHeight := Node.NodeHeight; DoMeasureItem(Canvas, Node, NewNodeHeight); if NewNodeHeight <> Node.NodeHeight then SetNodeHeight(Node, NewNodeHeight); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MoveTo(Node: PVirtualNode; Tree: TBaseVirtualTree; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); // A simplified method to allow to move nodes to the root of another tree. begin MoveTo(Node, Tree.FRoot, Mode, ChildrenOnly); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.MoveTo(Source, Target: PVirtualNode; Mode: TVTNodeAttachMode; ChildrenOnly: Boolean); // Moves the given node (and all its children) to Target. Source must belong to the tree instance which calls this // MoveTo method. Mode determines how to connect Source to Target. // This method might involve a change of the tree if Target belongs to a different tree than Source. var TargetTree: TBaseVirtualTree; Allowed: Boolean; NewNode: PVirtualNode; Stream: TMemoryStream; begin Assert(TreeFromNode(Source) = Self, 'The source tree must contain the source node.'); // When moving nodes then source and target must not be the same node unless only the source's children are // moved and they are inserted before or after the node itself. Allowed := (Source <> Target) or ((Mode in [amInsertBefore, amInsertAfter]) and ChildrenOnly); if Allowed and (Mode <> amNoWhere) and Assigned(Source) and (Source <> FRoot) and not (toReadOnly in FOptions.FMiscOptions) then begin // Assume that an empty destination means the root in this (the source) tree. if Target = nil then begin TargetTree := Self; Target := FRoot; Mode := amAddChildFirst; end else TargetTree := TreeFromNode(Target); if Target = TargetTree.FRoot then begin case Mode of amInsertBefore: Mode := amAddChildFirst; amInsertAfter: Mode := amAddChildLast; end; end; // Make sure the target node is initialized. if not (vsInitialized in Target.States) then InitNode(Target) else if (vsHasChildren in Target.States) and (Target.ChildCount = 0) then InitChildren(Target); if TargetTree = Self then begin // Simple case: move node(s) within the same tree. if Target = FRoot then Allowed := DoNodeMoving(Source, nil) else Allowed := DoNodeMoving(Source, Target); if Allowed then begin // Check first that Source is not added as new child to a target node which // is already a child of Source. // Consider the case Source and Target are the same node, but only child nodes are moved. if (Source <> Target) and HasAsParent(Target, Source) then ShowError(SWrongMoveError, hcTFWrongMoveError); if not ChildrenOnly then begin // Disconnect from old location. InternalDisconnectNode(Source, True); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); end else begin // Only child nodes should be moved. Insertion order depends on move mode. if Mode = amAddChildFirst then begin Source := Source.LastChild; while Assigned(Source) do begin NewNode := Source.PrevSibling; // Disconnect from old location. InternalDisconnectNode(Source, True, False); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); Source := NewNode; end; end else begin Source := Source.FirstChild; while Assigned(Source) do begin NewNode := Source.NextSibling; // Disconnect from old location. InternalDisconnectNode(Source, True, False); // Connect to new location. InternalConnectNode(Source, Target, Self, Mode); DoNodeMoved(Source); Source := NewNode; end; end; end; end; end else begin // Difficult case: move node(s) to another tree. // In opposition to node copying we ask only once if moving is allowed because // we cannot take back a move once done. if Target = TargetTree.FRoot then Allowed := DoNodeMoving(Source, nil) else Allowed := DoNodeMoving(Source, Target); if Allowed then begin Stream := TMemoryStream.Create; try // Write all nodes into a temporary stream depending on the ChildrenOnly flag. if not ChildrenOnly then WriteNode(Stream, Source) else begin Source := Source.FirstChild; while Assigned(Source) do begin WriteNode(Stream, Source); Source := Source.NextSibling; end; end; // Now load the serialized nodes into the target node (tree). TargetTree.BeginUpdate; try Stream.Position := 0; while Stream.Position < Stream.Size do begin NewNode := TargetTree.MakeNewNode; InternalConnectNode(NewNode, Target, TargetTree, Mode); TargetTree.InternalAddFromStream(Stream, VTTreeStreamVersion, NewNode); DoNodeMoved(NewNode); end; finally TargetTree.EndUpdate; end; finally Stream.Free; end; // finally delete original nodes BeginUpdate; try if ChildrenOnly then DeleteChildren(Source) else DeleteNode(Source); finally EndUpdate; end; end; end; InvalidateCache; if (FUpdateCount = 0) and Allowed then begin ValidateCache; UpdateScrollBars(True); Invalidate; if TargetTree <> Self then TargetTree.Invalidate; end; StructureChange(Source, crNodeMoved); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PaintTree(TargetCanvas: TCanvas; const Window: TRect; Target: TPoint; PaintOptions: TVTInternalPaintOptions; PixelFormat: TPixelFormat); // This is the core paint routine of the tree. It is responsible for maintaining the paint cycles per node as well // as coordinating drawing of the various parts of the tree image. // TargetCanvas is the canvas to which to draw the tree image. This is usually the tree window itself but could well // be a bitmap or printer canvas. // Window determines which part of the entire tree image to draw. The full size of the virtual image is determined // by GetTreeRect. // Target is the position in TargetCanvas where to draw the tree part specified by Window. // PaintOptions determines what of the tree to draw. For different tasks usually different parts need to be drawn, with // a full image in the window, selected only nodes for a drag image etc. const ImageKind: array[Boolean] of TVTImageKind = (ikNormal, ikSelected); var DrawSelectionRect, UseBackground, ShowImages, ShowStateImages, ShowCheckImages, UseColumns, IsMainColumn: Boolean; {$ifdef ManualClipNeeded} YCorrect, {$endif} VAlign, IndentSize, ButtonX, ButtonY: Integer; LineImage: TLineImage; PaintInfo: TVTPaintInfo; // all necessary information about a node to pass to the paint routines R, // the area of an entire node in its local coordinate TargetRect, // the area of a node (part) in the target canvas SelectionRect: TRect; // ordered rectangle used for drawing the selection focus rect NextColumn: TColumnIndex; BaseOffset: Integer; // top position of the top node to draw given in absolute tree coordinates NodeBitmap: TBitmap; // small buffer to draw flicker free MaximumRight, // maximum horizontal target position MaximumBottom: Integer; // maximum vertical target position SelectLevel: Integer; // > 0 if current node is selected or child/grandchild etc. of a selected node FirstColumn: TColumnIndex; // index of first column which is at least partially visible in the given window begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaint],'PaintTree');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'Window',Window);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'Target',Target);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'ClientRect',ClientRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'TreeRect',GetTreeRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader],'OffsetX: %d OffsetY: %d',[OffsetX,OffsetY]);{$endif} //lcl changes to 24bit color depth when screen depth is 32 bit //todo: remove when this limitation is removed {$ifdef Windows} if (PixelFormat = pfDevice) and (ScreenInfo.ColorDepth = 32) then PixelFormat := pf32bit; {$endif} if not (tsPainting in FStates) then begin DoStateChange([tsPainting]); try DoBeforePaint(TargetCanvas); // Create small bitmaps and initialize default values. // The bitmaps are used to paint one node at a time and to draw the result to the target (e.g. screen) in one step, // to prevent flickering. NodeBitmap := TBitmap.Create; // For alpha blending we need the 32 bit pixel format. For other targets there might be a need for a certain // pixel format (e.g. printing). if MMXAvailable and ((FDrawSelectionMode = smBlendedRectangle) or (tsUseThemes in FStates) or (toUseBlendedSelection in FOptions.PaintOptions)) then NodeBitmap.PixelFormat := pf32Bit else NodeBitmap.PixelFormat := PixelFormat; // Prepare paint info structure and lock the back bitmap canvas to avoid that it gets freed on the way. FillChar(PaintInfo, SizeOf(PaintInfo), 0); PaintInfo.Canvas := NodeBitmap.Canvas; NodeBitmap.Canvas.Lock; try {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FNewSelRect', FNewSelRect);{$endif} // Prepare the current selection rectangle once. The corner points are absolute tree coordinates. SelectionRect := OrderRect(FNewSelRect); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails, lcSelection],'SelectionRect', SelectionRect);{$endif} DrawSelectionRect := IsMouseSelecting and not IsRectEmpty(SelectionRect); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'DrawSelectionRect',DrawSelectionRect);{$endif} // R represents an entire node (all columns), but is a bit unprecise when it comes to // trees without any column defined, because FRangeX only represents the maximum width of all // nodes in the client area (not all defined nodes). There might be, however, wider nodes somewhere. Without full // validation I cannot better determine the width, though. By using at least the control's width it is ensured // that the tree is fully displayed on screen. R := Rect(0, 0, Max(FRangeX, ClientWidth), 0); NodeBitmap.Width := Window.Right - Window.Left; // For quick checks some intermediate variables are used. UseBackground := (toShowBackground in FOptions.FPaintOptions) and (FBackground.Graphic is TBitmap) and (poBackground in PaintOptions); ShowImages := Assigned(FImages); ShowStateImages := Assigned(FStateImages); ShowCheckImages := Assigned(FCheckImages) and (toCheckSupport in FOptions.FMiscOptions); {$ifdef DEBUG_VTV}Logger.Send([lcCheck],'ShowCheckImages',ShowCheckImages);{$endif} UseColumns := FHeader.UseColumns; // Adjust paint options to tree settings. Hide selection if told so or the tree is unfocused. if (toAlwaysHideSelection in FOptions.FPaintOptions) or (not Focused and (toHideSelection in FOptions.FPaintOptions)) then Exclude(PaintOptions, poDrawSelection); if toHideFocusRect in FOptions.FPaintOptions then Exclude(PaintOptions, poDrawFocusRect); // Determine node to start drawing with. BaseOffset := 0; PaintInfo.Node := InternalGetNodeAt(0, Window.Top, False, BaseOffset); if PaintInfo.Node = nil then BaseOffset := Window.Top; {$ifdef DEBUG_VTV}Logger.Send([lcPaint, lcHeaderOffset],'BaseOffset',BaseOffset);{$endif} // Transform selection rectangle into node bitmap coordinates. if DrawSelectionRect then OffsetRect(SelectionRect, 0, -BaseOffset); {$ifdef DEBUG_VTV}Logger.Send([lcSelection], 'SelectionRect fixed by BaseOffset', SelectionRect);{$endif} // The target rectangle holds the coordinates of the exact area to blit in target canvas coordinates. // It is usually smaller than an entire node and wanders while the paint loop advances. MaximumRight := Target.X + (Window.Right - Window.Left); MaximumBottom := Target.Y + (Window.Bottom - Window.Top); {$ifdef DEBUG_VTV}Logger.Send([lcPaintHeader, lcHeaderOffset],'MaximumRight: %d MaximumBottom: %d',[MaximumRight,MaximumBottom]);{$endif} TargetRect := Rect(Target.X, Target.Y - (Window.Top - BaseOffset), MaximumRight, 0); TargetRect.Bottom := TargetRect.Top; // This marker gets the index of the first column which is visible in the given window. // This is needed for column based background colors. FirstColumn := InvalidColumn; if Assigned(PaintInfo.Node) then begin ButtonX := Round((Integer(FIndent) - FPlusBM.Width) / 2); // ----- main node paint loop while Assigned(PaintInfo.Node) do begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintNode');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeIndex',PaintInfo.Node^.Index);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'BaseOffset',BaseOffset);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Determine LineImage, SelectionLevel and IndentSize SelectLevel := DetermineLineImageAndSelectLevel(PaintInfo.Node, LineImage); IndentSize := Length(LineImage); if not (toFixedIndent in FOptions.FPaintOptions) then ButtonX := (IndentSize - 1) * FIndent + Round((FIndent - FPlusBM.Width) / 2); // Initialize node if not already done. if not (vsInitialized in PaintInfo.Node.States) then InitNode(PaintInfo.Node); if (vsSelected in PaintInfo.Node.States) and not (toChildrenAbove in FOptions.FPaintOptions) then Inc(SelectLevel); // Ensure the node's height is determined. MeasureItemHeight(PaintInfo.Canvas, PaintInfo.Node); // Adjust the brush origin for dotted lines depending on the current source position. // It is applied some lines later, as the canvas might get reallocated, when changing the node bitmap. PaintInfo.BrushOrigin := Point(Window.Left and 1, BaseOffset and 1); Inc(BaseOffset, PaintInfo.Node.NodeHeight); TargetRect.Bottom := TargetRect.Top + PaintInfo.Node.NodeHeight; {$ifdef DEBUG_VTV}Logger.Send([lcHeaderOffset], 'TargetRect for Node ' + IntToStr(PaintInfo.Node.Index), TargetRect);{$endif} // If poSelectedOnly is active then do the following stuff only for selected nodes or nodes // which are children of selected nodes. if (SelectLevel > 0) or not (poSelectedOnly in PaintOptions) then begin // Adjust height of temporary node bitmap. with NodeBitmap do begin if Height <> PaintInfo.Node.NodeHeight then begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Setting the Node Height');{$endif} Height := PaintInfo.Node.NodeHeight; // Make sure the buffer bitmap and target bitmap use the same transformation mode. {$ifndef Gtk} SetMapMode(Canvas.Handle, GetMapMode(TargetCanvas.Handle)); {$endif} SetWindowOrgEx(Canvas.Handle, Window.Left, 0, nil); R.Bottom := PaintInfo.Node.NodeHeight; end; // Set the origin of the canvas' brush. This depends on the node heights. //todo: see if is necessary. According to docs is only necessary when HALFTONE is set {$ifndef INCOMPLETE_WINAPI} with PaintInfo do SetBrushOrgEx(Canvas.Handle, BrushOrigin.X, BrushOrigin.Y, nil); {$endif} end; CalculateVerticalAlignments(ShowImages, ShowStateImages, PaintInfo.Node, VAlign, ButtonY); // Let application decide whether the node should normally be drawn or by the application itself. if not DoBeforeItemPaint(PaintInfo.Canvas, PaintInfo.Node, R) then begin // Init paint options for the background painting. PaintInfo.PaintOptions := PaintOptions; {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // The node background can contain a single color, a bitmap or can be drawn by the application. ClearNodeBackground(PaintInfo, UseBackground, True, Rect(Window.Left, TargetRect.Top, Window.Right, TargetRect.Bottom)); {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'After Clear BackGround',NodeBitmap);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Prepare column, position and node clipping rectangle. PaintInfo.CellRect := R; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'PaintInfo.CellRect',PaintInfo.CellRect);{$endif} if UseColumns then InitializeFirstColumnValues(PaintInfo); // Now go through all visible columns (there's still one run if columns aren't used). with FHeader.FColumns do begin while ((PaintInfo.Column > InvalidColumn) or not UseColumns) and (PaintInfo.CellRect.Left < Window.Right) do begin if UseColumns then begin PaintInfo.Column := FPositionToIndex[PaintInfo.Position]; if FirstColumn = InvalidColumn then FirstColumn := PaintInfo.Column; PaintInfo.BidiMode := Items[PaintInfo.Column].FBiDiMode; PaintInfo.Alignment := Items[PaintInfo.Column].FAlignment; end else begin PaintInfo.Column := NoColumn; PaintInfo.BidiMode := BidiMode; PaintInfo.Alignment := FAlignment; end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails], 'Column Paint - PaintInfo.Position: %d PaintInfo.Column: %d',[PaintInfo.Position,PaintInfo.Column]);{$endif} PaintInfo.PaintOptions := PaintOptions; with PaintInfo do begin if (tsEditing in FStates) and (Node = FFocusedNode) and ((Column = FEditColumn) or not UseColumns) then Exclude(PaintOptions, poDrawSelection); if not UseColumns or ((vsSelected in Node.States) and (toFullRowSelect in FOptions.FSelectionOptions) and (poDrawSelection in PaintOptions)) or (coParentColor in Items[PaintInfo.Column].Options) then Exclude(PaintOptions, poColumnColor); end; IsMainColumn := PaintInfo.Column = FHeader.MainColumn; // Consider bidi mode here. In RTL context means left alignment actually right alignment and vice versa. if PaintInfo.BidiMode <> bdLeftToRight then ChangeBiDiModeAlignment(PaintInfo.Alignment); // Paint the current cell if it is marked as being visible or columns aren't used and // if this cell belongs to the main column if only the main column should be drawn. if (not UseColumns or (coVisible in Items[PaintInfo.Column].FOptions)) and (not (poMainOnly in PaintOptions) or IsMainColumn) then begin AdjustPaintCellRect(PaintInfo, NextColumn); // Paint the cell only if it is in the current window. if PaintInfo.CellRect.Right > Window.Left then begin with PaintInfo do begin // Fill in remaining values in the paint info structure. NodeWidth := DoGetNodeWidth(Node, Column, Canvas); // Not the entire cell is covered by text. Hence we need a running rectangle to follow up. ContentRect := CellRect; // Set up the distance from column border (margin). if BidiMode <> bdLeftToRight then Dec(ContentRect.Right, FMargin) else Inc(ContentRect.Left, FMargin); if ShowCheckImages and IsMainColumn then begin ImageInfo[iiCheck].Index := GetCheckImage(Node); if ImageInfo[iiCheck].Index > -1 then begin AdjustImageBorder(FCheckImages.Height, FCheckImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiCheck]); ImageInfo[iiCheck].Ghosted := False; end; end else ImageInfo[iiCheck].Index := -1; if ShowStateImages then begin GetImageIndex(PaintInfo, ikState, iiState, FStateImages); if ImageInfo[iiState].Index > -1 then AdjustImageBorder(FStateImages.Width, FStateImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiState]); end else ImageInfo[iiState].Index := -1; if ShowImages then begin GetImageIndex(PaintInfo, ImageKind[vsSelected in Node.States], iiNormal, FImages); if ImageInfo[iiNormal].Index > -1 then AdjustImageBorder(FImages.Width, FImages.Height, BidiMode, VAlign, ContentRect, ImageInfo[iiNormal]); end else ImageInfo[iiNormal].Index := -1; // Take the space for the tree lines into account. if IsMainColumn then AdjustCoordinatesByIndent(PaintInfo, IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize)); if UseColumns then LimitPaintingToArea(Canvas, CellRect); // Paint the horizontal grid line. if (poGridLines in PaintOptions) and (toShowHorzGridLines in FOptions.FPaintOptions) then begin Canvas.Font.Color := FColors.GridLineColor; if IsMainColumn and (FLineMode = lmBands) then begin if BidiMode = bdLeftToRight then begin DrawDottedHLine(PaintInfo, CellRect.Left + IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize) * Integer(FIndent), CellRect.Right - 1, CellRect.Bottom - 1); end else begin DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right - IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize) * Integer(FIndent) - 1, CellRect.Bottom - 1); end; end else DrawDottedHLine(PaintInfo, CellRect.Left, CellRect.Right, CellRect.Bottom - 1); Dec(CellRect.Bottom); Dec(ContentRect.Bottom); end; if UseColumns then begin // Paint vertical grid line. // Don't draw if this is the last column and the header is in autosize mode. if (poGridLines in PaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions) or (Position < TColumnPosition(Count - 1))) then begin if (BidiMode = bdLeftToRight) or not ColumnIsEmpty(Node, Column) then begin Canvas.Font.Color := FColors.GridLineColor; DrawDottedVLine(PaintInfo, CellRect.Top, CellRect.Bottom, CellRect.Right - 1); end; Dec(CellRect.Right); Dec(ContentRect.Right); end; end; // Prepare background and focus rect for the current cell. PrepareCell(PaintInfo, Window.Left, NodeBitmap.Width); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Some parts are only drawn for the main column. if IsMainColumn then begin if toShowTreeLines in FOptions.FPaintOptions then PaintTreeLines(PaintInfo, VAlign, IfThen(toFixedIndent in FOptions.FPaintOptions, 1, IndentSize), LineImage); // Show node button if allowed, if there child nodes and at least one of the child // nodes is visible or auto button hiding is disabled. if (toShowButtons in FOptions.FPaintOptions) and (vsHasChildren in Node.States) and not ((vsAllChildrenHidden in Node.States) and (toAutoHideButtons in TreeOptions.FAutoOptions)) then PaintNodeButton(Canvas, Node, Column, CellRect, ButtonX, ButtonY, BidiMode); if ImageInfo[iiCheck].Index > -1 then PaintCheckImage(PaintInfo); end; {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} if ImageInfo[iiState].Index > -1 then PaintImage(PaintInfo, iiState, False); if ImageInfo[iiNormal].Index > -1 then PaintImage(PaintInfo, iiNormal, True); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} // Now let descendants or applications draw whatever they want, // but don't draw the node if it is currently being edited. if not ((tsEditing in FStates) and (Node = FFocusedNode) and ((Column = FEditColumn) or not UseColumns)) then DoPaintNode(PaintInfo); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'Brush.Color',PaintInfo.Canvas.Brush.Color);{$endif} DoAfterCellPaint(Canvas, Node, Column, CellRect); end; end; // leave after first run if columns aren't used if not UseColumns then Break; end else NextColumn := GetNextVisibleColumn(PaintInfo.Column); SelectClipRgn(PaintInfo.Canvas.Handle, 0); // Stop column loop if there are no further columns in the given window. if (PaintInfo.CellRect.Left >= Window.Right) or (NextColumn = InvalidColumn) then Break; // Move on to next column which might not be the one immediately following the current one // because of auto span feature. PaintInfo.Position := Items[NextColumn].Position; // Move clip rectangle and continue. if coVisible in Items[NextColumn].FOptions then with PaintInfo do begin Items[NextColumn].GetAbsoluteBounds(CellRect.Left, CellRect.Right); CellRect.Bottom := Node.NodeHeight; ContentRect.Bottom := Node.NodeHeight; end; end; end; // This node is finished, notify descendants/application. with PaintInfo do begin DoAfterItemPaint(Canvas, Node, R); // Final touch for this node: mark it if it is the current drop target node. if (Node = FDropTargetNode) and (toShowDropmark in FOptions.FPaintOptions) and (poDrawDropMark in PaintOptions) then DoPaintDropMark(Canvas, Node, R); end; end; with PaintInfo.Canvas do begin if DrawSelectionRect then begin PaintSelectionRectangle(PaintInfo.Canvas, Window.Left, SelectionRect, Rect(0, 0, NodeBitmap.Width, NodeBitmap.Height)); end; {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'NodeBitmap ' + IntToStr(PaintInfo.Node^.Index), NodeBitmap);{$endif} {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintDetails, lcHeaderOffset],'TargetRect.Top < Target.Y '+ Logger.RectToStr(TargetRect) +' '+Logger.PointToStr(Target),TargetRect.Top < Target.Y);{$endif} {$ifdef Gtk} //lclheader // This is a brute force fix AKA hack to prevent the header being cleared // when the tree is scrolled (YOffset < 0) and the mouse is over the header // Other widgetsets are not affected because excludecliprect works different (better?) // this must be removed when/if the paint coordinate is modified to be header aware YCorrect := 0; if hoVisible in FHeader.Options then begin if TargetRect.Top < FHeader.Height then YCorrect := FHeader.Height - TargetRect.Top; end; {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintDetails],'YCorrect ' + IntToStr(YCorrect), YCorrect > 0);{$endif} {$endif} // Put the constructed node image onto the target canvas. with TargetRect, NodeBitmap do BitBlt(TargetCanvas.Handle, Left, Top {$ifdef ManualClipNeeded} + YCorrect{$endif}, Width, Height, Canvas.Handle, Window.Left, {$ifdef ManualClipNeeded}YCorrect{$else}0{$endif}, SRCCOPY); end; end; Inc(TargetRect.Top, PaintInfo.Node.NodeHeight); {$ifdef DEBUG_VTV}Logger.SendIf([lcPaintHeader,lcDrag],'Last Node to be painted: '+ IntToStr(PaintInfo.Node^.Index) +' (TargetRect.Top >= MaximumBottom)',TargetRect.Top >= MaximumBottom);{$endif} if TargetRect.Top >= MaximumBottom then begin {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNode');{$endif} Break; end; // Keep selection rectangle coordinates in sync. if DrawSelectionRect then OffsetRect(SelectionRect, 0, -PaintInfo.Node.NodeHeight); // Advance to next visible node. PaintInfo.Node := GetNextVisible(PaintInfo.Node, True); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNode');{$endif} end; end; // Erase rest of window not covered by a node. if TargetRect.Top < MaximumBottom then begin {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'UseBackground',UseBackground);{$endif} {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'UseColumns',UseColumns);{$endif} // Keep the horizontal target position to determine the selection rectangle offset later (if necessary). BaseOffset := Target.X; Target := TargetRect.TopLeft; R := Rect(TargetRect.Left, 0, TargetRect.Left, MaximumBottom - Target.Y); TargetRect := Rect(0, 0, MaximumRight - Target.X, MaximumBottom - Target.Y); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Handle',NodeBitmap.Handle);{$endif} NodeBitmap.PixelFormat := pf32Bit; NodeBitmap.Width := TargetRect.Right - TargetRect.Left; NodeBitmap.Height := TargetRect.Bottom - TargetRect.Top; // Make sure the buffer bitmap and target bitmap use the same transformation mode. {$ifndef Gtk} SetMapMode(NodeBitmap.Canvas.Handle, GetMapMode(TargetCanvas.Handle)); {$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Handle after changing height to background',NodeBitmap.Handle);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'TargetRect',TargetRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap Width: %d Height: %d',[NodeBitmap.Width,NodeBitmap.Height]);{$endif} // Call back application/descendants whether they want to erase this area. SetWindowOrgEx(NodeBitmap.Canvas.Handle, Target.X, 0, nil); if not DoPaintBackground(NodeBitmap.Canvas, TargetRect) then begin if UseBackground then begin SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); if toStaticBackground in TreeOptions.PaintOptions then StaticBackground(FBackground.Bitmap, NodeBitmap.Canvas, Target, TargetRect) else TileBackground(FBackground.Bitmap, NodeBitmap.Canvas, Target, TargetRect); end else begin // Consider here also colors of the columns. if UseColumns then begin with FHeader.FColumns do begin // If there is no content in the tree then the first column has not yet been determined. if FirstColumn = InvalidColumn then begin FirstColumn := GetFirstVisibleColumn; repeat if FirstColumn <> InvalidColumn then begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; if R.Right > TargetRect.Left then Break; FirstColumn := GetNextVisibleColumn(FirstColumn); end; until FirstColumn = InvalidColumn; end else begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; end; NodeBitmap.Canvas.Font.Color := FColors.GridLineColor; while (FirstColumn <> InvalidColumn) and (R.Left < TargetRect.Right + Target.X) do begin if (poGridLines in PaintOptions) and (toFullVertGridLines in FOptions.FPaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions) or (Cardinal(FirstColumn) < TColumnPosition(Count - 1))) then begin DrawDottedVLine(PaintInfo, R.Top, R.Bottom, R.Right - 1); Dec(R.Right); end; if not (coParentColor in Items[FirstColumn].FOptions) then NodeBitmap.Canvas.Brush.Color := Items[FirstColumn].FColor else NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(R); FirstColumn := GetNextVisibleColumn(FirstColumn); if FirstColumn <> InvalidColumn then begin R.Left := Items[FirstColumn].Left; R.Right := R.Left + Items[FirstColumn].FWidth; end; end; // Erase also the part of the tree not covert by a column. if R.Right < TargetRect.Right + Target.X then begin R.Left := R.Right; R.Right := TargetRect.Right + Target.X; // Prevent erasing the last vertical grid line. if (poGridLines in PaintOptions) and (toFullVertGridLines in FOptions.FPaintOptions) and (toShowVertGridLines in FOptions.FPaintOptions) and (not (hoAutoResize in FHeader.FOptions)) then Inc(R.Left); NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(R); end; end; SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); end else begin {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'ErasingBackGround');{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'TargetRect',TargetRect);{$endif} // No columns nor bitmap background. Simply erase it with the tree color. SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); NodeBitmap.Canvas.Brush.Color := Brush.Color; NodeBitmap.Canvas.FillRect(TargetRect); end; end; end; SetWindowOrgEx(NodeBitmap.Canvas.Handle, 0, 0, nil); {$ifdef DEBUG_VTV}Logger.Watch([lcPaintDetails],'DrawSelectionRect',DrawSelectionRect);{$endif} if DrawSelectionRect then begin R := OrderRect(FNewSelRect); // Remap the selection rectangle to the current window of the tree. // Since Target has been used for other tasks BaseOffset got the left extent of the target position here. OffsetRect(R, -Target.X + BaseOffset - Window.Left, -Target.Y + FOffsetY); //todo: see if is necessary {$ifndef INCOMPLETE_WINAPI} SetBrushOrgEx(NodeBitmap.Canvas.Handle, 0, Target.X and 1, nil); {$endif} PaintSelectionRectangle(NodeBitmap.Canvas, 0, R, TargetRect); end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Canvas.Height',NodeBitmap.Canvas.Height);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'NodeBitmap.Canvas.ClipRect',NodeBitmap.Canvas.ClipRect);{$endif} {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Target',Target);{$endif} {$ifdef DEBUG_VTV}Logger.SendBitmap([lcPaintBitmap],'BackGroundBitmap',NodeBitmap);{$endif} with Target, NodeBitmap do BitBlt(TargetCanvas.Handle, X, Y, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); end; finally NodeBitmap.Canvas.Unlock; NodeBitmap.Free; end; DoAfterPaint(TargetCanvas); finally DoStateChange([], [tsPainting]); end; end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaint],'PaintTree');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.PasteFromClipboard: Boolean; // Reads what is currently on the clipboard into the tree (if the format is supported). // Note: If the application wants to have text or special formats to be inserted then it must implement // its own code (OLE). Here only the native tree format is accepted. var Data: IDataObject; Source: TBaseVirtualTree; begin Result := False; if not (toReadOnly in FOptions.FMiscOptions) then begin if OleGetClipboard(Data) <> S_OK then ShowError(SClipboardFailed, hcTFClipboardFailed) else try // Try to get the source tree of the operation to optimize the operation. Source := GetTreeFromDataObject(Data); Result := ProcessOLEData(Source, Data, FFocusedNode, FDefaultPasteMode, Assigned(Source) and (tsCutPending in Source.FStates)); if Assigned(Source) then if Source <> Self then Source.FinishCutOrCopy else DoStateChange([], [tsCutPending]); finally Data := nil; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.PrepareDragImage(Hotspot: TPoint; const DataObject: IDataObject); // Initiates an image drag operation. Hotspot is the position of the mouse in client coordinates. var PaintOptions: TVTInternalPaintOptions; TreeRect, PaintRect: TRect; LocalSpot, ImagePos, PaintTarget: TPoint; Image: TBitmap; begin if CanShowDragImage then begin // Determine the drag rectangle which is a square around the hot spot. Operate in virtual tree space. LocalSpot := HotSpot; Dec(LocalSpot.X, -FEffectiveOffsetX); Dec(LocalSpot.Y, FOffsetY); TreeRect := Rect(LocalSpot.X - FDragWidth div 2, LocalSpot.Y - FDragHeight div 2, LocalSpot.X + FDragWidth div 2, LocalSpot.Y + FDragHeight div 2); // Check that we have a valid rectangle. with TreeRect do begin PaintRect := TreeRect; //lclheader if hoVisible in FHeader.Options then OffsetRect(PaintRect, 0, -FHeader.Height); if Left < 0 then begin PaintTarget.X := -Left; PaintRect.Left := 0; end else PaintTarget.X := 0; if Top < 0 then begin PaintTarget.Y := -PaintRect.Top; PaintRect.Top := 0; end else PaintTarget.Y := 0; end; Image := TBitmap.Create; with Image do try PixelFormat := pf32Bit; Width := TreeRect.Right - TreeRect.Left; Height := TreeRect.Bottom - TreeRect.Top; // Erase the entire image with the color key value, for the case not everything // in the image is covered by the tree image. Canvas.Brush.Color := Brush.Color; Canvas.FillRect(Rect(0, 0, Width, Height)); PaintOptions := [poDrawSelection, poSelectedOnly]; if FDragImageKind = diMainColumnOnly then Include(PaintOptions, poMainOnly); PaintTree(Image.Canvas, PaintRect, PaintTarget, PaintOptions); // Once we have got the drag image we can convert all necessary coordinates into screen space. OffsetRect(TreeRect, -FEffectiveOffsetX, FOffsetY); ImagePos := ClientToScreen(TreeRect.TopLeft); HotSpot := ClientToScreen(HotSpot); FDragImage.ColorKey := Brush.Color; FDragImage.PrepareDrag(Image, ImagePos, HotSpot, DataObject); finally Image.Free; end; end; end; //---------------------------------------------------------------------------------------------------------------------- {$ifdef EnablePrint} procedure TBaseVirtualTree.Print(Printer: TPrinter; PrintHeader: Boolean); var SaveTreeFont: TFont; // Remembers the tree's current font. SaveHeaderFont: TFont; // Remembers the header's current font. ImgRect, // Describes the dimensions of Image. TreeRect, // The total VTree dimensions. DestRect, // Dimensions of PrinterImage. SrcRect: TRect; // Clip dimensions from Image -> PrinterImage P: TPoint; // Used by PaintTree. Options: TVTInternalPaintOptions; // Used by PaintTree. Image, // Complete Tree is drawn to this image. PrinterImage: TBitmap; // This is the image that gets printed. SaveColor: TColor; // Remembers the VTree Color. pTxtHeight, // Height of font in the TPrinter.Canvas vTxtHeight, // Height of font in the VTree Canvas vPageWidth, vPageHeight, // Printer height in VTree resolution xPageNum, yPageNum, // # of pages (except the occasional last one) xPage, yPage: Integer; // Loop counter Scale: Extended; // Scale factor between Printer Canvas and VTree Canvas LogFont: TLogFont; begin if Assigned(Printer) then begin BeginUpdate; // Grid lines are the only parts which are desirable when printing. Options := [poGridLines]; // Remember the tree font. SaveTreeFont := TFont.Create; SaveTreeFont.Assign(Font); // Create a new font for printing which does not use clear type output (but is antialiased, if possible) // and which has the highest possible quality. GetObject(Font.Handle, SizeOf(TLogFont), @LogFont); LogFont.lfQuality := ANTIALIASED_QUALITY; Font.Handle := CreateFontIndirect(LogFont); // Create an image that will hold the complete VTree Image := TBitmap.Create; Image.PixelFormat := pf32Bit; PrinterImage := nil; try TreeRect := GetTreeRect; Image.Width := TreeRect.Right - TreeRect.Left; P := Point(0, 0); if (hoVisible in FHeader.Options) and PrintHeader then begin Inc(TreeRect.Bottom, FHeader.Height); Inc(P.Y, FHeader.Height); end; Image.Height := TreeRect.Bottom - TreeRect.Top; ImgRect.Left := 0; ImgRect.Top := 0; ImgRect.Right := Image.Width; // Force the background to white color during the rendering. SaveColor := Color; Color := clWhite; // Print header if it is visible. if (hoVisible in FHeader.Options) and PrintHeader then begin SaveHeaderFont := TFont.Create; try SaveHeaderFont.Assign(FHeader.Font); // Create a new font for printing which does not use clear type output (but is antialiased, if possible) // and which has the highest possible quality. GetObject(FHeader.Font.Handle, SizeOf(TLogFont), @LogFont); LogFont.lfQuality := ANTIALIASED_QUALITY; FHeader.Font.Handle := CreateFontIndirect(LogFont); ImgRect.Bottom := FHeader.Height; FHeader.FColumns.PaintHeader(Image.Canvas.Handle, ImgRect, 0); FHeader.Font := SaveHeaderFont; finally SaveHeaderFont.Free; end; end; // The image's height is already adjusted for the header if it is visible. ImgRect.Bottom := Image.Height; PaintTree(Image.Canvas, ImgRect, P, Options, pf32Bit); Color := SaveColor; // Activate the printer Printer.BeginDoc; Printer.Canvas.Font := Font; // Now we can calculate the scaling : pTxtHeight := Printer.Canvas.TextHeight('Tj'); vTxtHeight := Canvas.TextHeight('Tj'); Scale := pTxtHeight / vTxtHeight; // Create an Image that has the same dimensions as the printer canvas but // scaled to the VTree resolution: PrinterImage := TBitmap.Create; vPageHeight := Round(Printer.PageHeight / Scale); vPageWidth := Round(Printer.PageWidth / Scale); // We do a minumum of one page. xPageNum := Trunc(Image.Width / vPageWidth); yPageNum := Trunc(Image.Height / vPageHeight); PrinterImage.Width := vPageWidth; PrinterImage.Height := vPageHeight; // Split vertically: for yPage := 0 to yPageNum do begin DestRect.Left := 0; DestRect.Top := 0; DestRect.Right := PrinterImage.Width; DestRect.Bottom := PrinterImage.Height; // Split horizontally: for xPage := 0 to xPageNum do begin SrcRect.Left := vPageWidth * xPage; SrcRect.Top := vPageHeight * yPage; SrcRect.Right := vPageWidth * xPage + PrinterImage.Width; SrcRect.Bottom := SrcRect.Top + vPageHeight; // Clear the image PrinterImage.Canvas.Brush.Color := clWhite; PrinterImage.Canvas.FillRect(Rect(0, 0, PrinterImage.Width, PrinterImage.Height)); PrinterImage.Canvas.CopyRect(DestRect, Image.Canvas, SrcRect); PrtStretchDrawDIB(Printer.Canvas, Rect(0, 0, Printer.PageWidth, Printer.PageHeight - 1), PrinterImage); if xPage <> xPageNum then Printer.NewPage; end; if yPage <> yPageNum then Printer.NewPage; end; // Restore tree font. Font := SaveTreeFont; SaveTreeFont.Free; Printer.EndDoc; finally PrinterImage.Free; Image.Free; EndUpdate; end; end; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ProcessDrop(DataObject: IDataObject; TargetNode: PVirtualNode; var Effect: LongWord; Mode: TVTNodeAttachMode): Boolean; // Recreates the (sub) tree structure serialized into memory and provided by DataObject. The new nodes are attached to // the passed node or FRoot if TargetNode is nil. // Returns True on success, i.e. the CF_VIRTUALTREE format is supported by the data object and the structure could be // recreated, otherwise False. var Source: TBaseVirtualTree; begin Result := False; if Mode = amNoWhere then Effect := DROPEFFECT_NONE else begin BeginUpdate; // try to get the source tree of the operation Source := GetTreeFromDataObject(DataObject); if Assigned(Source) then Source.BeginUpdate; try try // Before adding the new nodes try to optimize the operation if source and target tree reside in // the same application and operation is a move. if ((Effect and DROPEFFECT_MOVE) <> 0) and Assigned(Source) then begin // If both copy and move are specified then prefer a copy because this is not destructing. Result := ProcessOLEData(Source, DataObject, TargetNode, Mode, (Effect and DROPEFFECT_COPY) = 0); // Since we made an optimized move or a copy there's no reason to act further after DoDragging returns. Effect := DROPEFFECT_NONE; end else // Act only if move or copy operation is requested. if (Effect and (DROPEFFECT_MOVE or DROPEFFECT_COPY)) <> 0 then Result := ProcessOLEData(Source, DataObject, TargetNode, Mode, False) else Result := False; except Effect := DROPEFFECT_NONE; end; finally if Assigned(Source) then Source.EndUpdate; EndUpdate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReinitChildren(Node: PVirtualNode; Recursive: Boolean); // Forces all child nodes of Node to be reinitialized. // If Recursive is True then also the grandchildren are reinitialized. var Run: PVirtualNode; begin if Assigned(Node) then begin InitChildren(Node); Run := Node.FirstChild; end else begin InitChildren(FRoot); Run := FRoot.FirstChild; end; while Assigned(Run) do begin ReinitNode(Run, Recursive); Run := Run.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ReinitNode(Node: PVirtualNode; Recursive: Boolean); // Forces the given node and all its children (if recursive is True) to be initialized again without // modifying any data in the nodes nor deleting children (unless the application requests a different amount). begin if Assigned(Node) and (Node <> FRoot) then begin // Remove dynamic styles. Node.States := Node.States - [vsChecking, vsCutOrCopy, vsDeleting, vsHeightMeasured]; InitNode(Node); end; if Recursive then ReinitChildren(Node, True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.RepaintNode(Node: PVirtualNode); // Causes an immediate repaint of the given node. var R: Trect; begin if Assigned(Node) and (Node <> FRoot) then begin R := GetDisplayRect(Node, -1, False); RedrawWindow(Handle, @R, 0, RDW_INVALIDATE or RDW_UPDATENOW or RDW_NOERASE or RDW_VALIDATE or RDW_NOCHILDREN); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ResetNode(Node: PVirtualNode); // Deletes all children of the given node and marks it as being uninitialized. begin DoCancelEdit; if (Node = nil) or (Node = FRoot) then Clear else begin DoReset(Node); DeleteChildren(Node); // Remove initialized and other dynamic styles, keep persistent styles. Node.States := Node.States - [vsInitialized, vsChecking, vsCutOrCopy, vsDeleting, vsHasChildren, vsExpanded, vsHeightMeasured]; InvalidateNode(Node); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SaveToFile(const FileName: TFileName); // Saves the entire content of the tree into a file (see further notes in SaveToStream). var FileStream: TFileStream; begin FileStream := TFileStream.Create(FileName, fmCreate); try SaveToStream(FileStream); finally FileStream.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SaveToStream(Stream: TStream; Node: PVirtualNode = nil); // Saves Node and all its children to Stream. If Node is nil then all top level nodes will be stored. // Note: You should be careful about assuming what is actually saved. The problem here is that we are dealing with // virtual data. The tree can so not know what it has to save. The only fact we reliably know is the tree's // structure. To be flexible for future enhancements as well as unknown content (unknown to the tree class which // is saving/loading the stream) a chunk based approach is used here. Every tree class handles only those // chunks which are not handled by an anchestor class and are known by the class. // // The base tree class saves only the structure of the tree along with application provided data. descendants may // optionally add their own chunks to store additional information. See: WriteChunks. var Count: Cardinal; begin Stream.Write(MagicID, SizeOf(MagicID)); if Node = nil then begin // Keep number of top level nodes for easy restauration. Count := FRoot.ChildCount; Stream.WriteBuffer(Count, SizeOf(Count)); // Save entire tree here. Node := FRoot.FirstChild; while Assigned(Node) do begin WriteNode(Stream, Node); Node := Node.NextSibling; end; end else begin Count := 1; Stream.WriteBuffer(Count, SizeOf(Count)); WriteNode(Stream, Node); end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ScrollIntoView(Node: PVirtualNode; Center: Boolean; Horizontally: Boolean = False): Boolean; // Scrolls the tree so that the given node is in the client area and returns True if the tree really has been // scrolled (e.g. to avoid further updates) else returns False. If extened focus is enabled then the tree will also // be horizontally scrolled if needed. // Note: All collapsed parents of the node are expanded. var R: TRect; Run: PVirtualNode; UseColumns, HScrollBarVisible: Boolean; ScrolledVertically, ScrolledHorizontally: Boolean; OffY, OffYM: Integer; begin //todo: minimize calls to ClientHeight and ClientWidth ScrolledVertically := False; ScrolledHorizontally := False; if Assigned(Node) and (Node <> FRoot) then begin // Make sure all parents of the node are expanded. Run := Node.Parent; while Run <> FRoot do begin if not (vsExpanded in Run.States) then ToggleNode(Run); Run := Run.Parent; end; UseColumns := FHeader.UseColumns; if UseColumns and FHeader.FColumns.IsValidColumn(FFocusedColumn) then R := GetDisplayRect(Node, FFocusedColumn, not (toGridExtensions in FOptions.FMiscOptions)) else R := GetDisplayRect(Node, NoColumn, not (toGridExtensions in FOptions.FMiscOptions)); // The returned rectangle can never be empty after the expand code above. // 1) scroll vertically //lclheader if hoVisible in FHeader.FOptions then OffsetRect(R, 0, -FHeader.Height); if R.Top < 0 then begin if Center then SetOffsetY(FOffsetY - R.Top + ClientHeight div 2) else SetOffsetY(FOffsetY - R.Top); ScrolledVertically := True; end else if (R.Bottom > ClientHeight) or Center then begin HScrollBarVisible := (ScrollBarOptions.ScrollBars in [ssBoth, ssHorizontal]) and (ScrollBarOptions.AlwaysVisible or (Integer(FRangeX) > ClientWidth)); if Center then SetOffsetY(FOffsetY - R.Bottom + ClientHeight div 2) else begin // Leave additional space at the bottom to have scrollrect start with full row. OffY := FOffsetY - R.Bottom + ClientHeight; OffYM := OffY mod DefaultNodeHeight; if OffYM <> 0 then OffY := OffY - (DefaultNodeHeight + OffYM); SetOffsetY(OffY); end; // When scrolling up and the horizontal scroll appears because of the operation // then we have to move up the node the horizontal scrollbar's height too // in order to avoid that the scroll bar hides the node which we wanted to have in view. if not UseColumns and not HScrollBarVisible and (Integer(FRangeX) > ClientWidth) then SetOffsetY(FOffsetY - GetSystemMetrics(SM_CYHSCROLL)); ScrolledVertically := True; end; if Horizontally then // 2) scroll horizontally ScrolledHorizontally := ScrollIntoView(FFocusedColumn, Center); end; Result := ScrolledVertically or ScrolledHorizontally; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.ScrollIntoView(Column: TColumnIndex; Center: Boolean): Boolean; // Scrolls the columns so that the given column is in the client area and returns True if the columns really have been // scrolled (e.g. to avoid further updates) else returns False. var ColumnLeft, ColumnRight: Integer; NewOffset: Integer; begin Result := False; if not FHeader.UseColumns then exit; if not FHeader.Columns.IsValidColumn(Column) then exit; // Just in case. ColumnLeft := Header.Columns.Items[Column].Left; ColumnRight := ColumnLeft + Header.Columns.Items[Column].Width; NewOffset := FEffectiveOffsetX; if Center then begin NewOffset := FEffectiveOffsetX + ColumnLeft - (Header.Columns.GetVisibleFixedWidth div 2) - (ClientWidth div 2) + ((ColumnRight - ColumnLeft) div 2); if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + NewOffset) else SetOffsetX(-NewOffset); end; Result := True; end else begin if FHeader.Columns.Count > 1 then begin if ColumnRight > ClientWidth then NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); end; if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + NewOffset) else SetOffsetX(-NewOffset); end; Result := True; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SelectAll(VisibleOnly: Boolean); // Select all nodes in the tree. // If VisibleOnly is True then only visible nodes are selected. var Run: PVirtualNode; NextFunction: TGetNextNodeProc; begin if not FSelectionLocked and (toMultiSelect in FOptions.FSelectionOptions) then begin ClearTempCache; if VisibleOnly then begin Run := GetFirstVisible(nil, True); NextFunction := GetNextVisible; end else begin Run := GetFirst; NextFunction := GetNext; end; while Assigned(Run) do begin if not(vsSelected in Run.States) then InternalCacheNode(Run); Run := NextFunction(Run); end; if FTempNodeCount > 0 then AddToSelection(FTempNodeCache, FTempNodeCount); ClearTempCache; Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Sort(Node: PVirtualNode; Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); // Sorts the given node. The application is queried about how to sort via the OnCompareNodes event. // Column is simply passed to the the compare function so the application can also sort in a particular column. // In order to free the application from taking care about the sort direction the parameter Direction is used. // This way the application can always sort in increasing order, while this method reorders nodes according to this flag. //--------------- local functions ------------------------------------------- function MergeAscending(A, B: PVirtualNode): PVirtualNode; // Merges A and B (which both must be sorted via Compare) into one list. var Dummy: TVirtualNode; begin // This avoids checking for Result = nil in the loops. Result := @Dummy; while Assigned(A) and Assigned(B) do begin if DoCompare(A, B, Column) <= 0 then begin Result.NextSibling := A; Result := A; A := A.NextSibling; end else begin Result.NextSibling := B; Result := B; B := B.NextSibling; end; end; // Just append the list which is not nil (or set end of result list to nil if both lists are nil). if Assigned(A) then Result.NextSibling := A else Result.NextSibling := B; // return start of the new merged list Result := Dummy.NextSibling; end; //--------------------------------------------------------------------------- function MergeDescending(A, B: PVirtualNode): PVirtualNode; // Merges A and B (which both must be sorted via Compare) into one list. var Dummy: TVirtualNode; begin // this avoids checking for Result = nil in the loops Result := @Dummy; while Assigned(A) and Assigned(B) do begin if DoCompare(A, B, Column) >= 0 then begin Result.NextSibling := A; Result := A; A := A.NextSibling; end else begin Result.NextSibling := B; Result := B; B := B.NextSibling; end; end; // Just append the list which is not nil (or set end of result list to nil if both lists are nil). if Assigned(A) then Result.NextSibling := A else Result.NextSibling := B; // Return start of the newly merged list. Result := Dummy.NextSibling; end; //--------------------------------------------------------------------------- function MergeSortAscending(var Node: PVirtualNode; N: Cardinal): PVirtualNode; // Sorts the list of nodes given by Node (which must not be nil). var A, B: PVirtualNode; begin if N > 1 then begin A := MergeSortAscending(Node, N div 2); B := MergeSortAscending(Node, (N + 1) div 2); Result := MergeAscending(A, B); end else begin Result := Node; Node := Node.NextSibling; Result.NextSibling := nil; end; end; //--------------------------------------------------------------------------- function MergeSortDescending(var Node: PVirtualNode; N: Cardinal): PVirtualNode; // Sorts the list of nodes given by Node (which must not be nil). var A, B: PVirtualNode; begin if N > 1 then begin A := MergeSortDescending(Node, N div 2); B := MergeSortDescending(Node, (N + 1) div 2); Result := MergeDescending(A, B); end else begin Result := Node; Node := Node.NextSibling; Result.NextSibling := nil; end; end; //--------------- end local functions --------------------------------------- var Run: PVirtualNode; Index: Cardinal; begin InterruptValidation; if tsEditPending in FStates then begin KillTimer(Handle, EditTimer); DoStateChange([], [tsEditPending]); end; if not (tsEditing in FStates) or DoEndEdit then begin if Node = nil then Node := FRoot; if vsHasChildren in Node.States then begin if (Node.ChildCount = 0) and DoInit then InitChildren(Node); // Make sure the children are valid, so they can be sorted at all. if DoInit and (Node.ChildCount > 0) then ValidateChildren(Node, False); // Child count might have changed. if Node.ChildCount > 1 then begin // Sort the linked list, check direction flag only once. if Direction = sdAscending then Node.FirstChild := MergeSortAscending(Node.FirstChild, Node.ChildCount) else Node.FirstChild := MergeSortDescending(Node.FirstChild, Node.ChildCount); // Consolidate the child list finally. Run := Node.FirstChild; Run.PrevSibling := nil; Index := 0; repeat Run.Index := Index; Inc(Index); if Run.NextSibling = nil then Break; Run.NextSibling.PrevSibling := Run; Run := Run.NextSibling; until False; Node.LastChild := Run; InvalidateCache; end; if FUpdateCount = 0 then begin ValidateCache; Invalidate; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.SortTree(Column: TColumnIndex; Direction: TSortDirection; DoInit: Boolean = True); //--------------- local function -------------------------------------------- procedure DoSort(Node: PVirtualNode); // Recursively sorts Node and its child nodes. var Run: PVirtualNode; begin Sort(Node, Column, Direction, DoInit); Run := Node.FirstChild; while Assigned(Run) do begin if DoInit and not (vsInitialized in Run.States) then InitNode(Run); if vsInitialized in Run.States then DoSort(Run); Run := Run.NextSibling; end; end; //--------------- end local function ---------------------------------------- begin // Instead of wrapping the sort using BeginUpdate/EndUpdate simply the update counter // is modified. Otherwise the EndUpdate call will recurse here. Inc(FUpdateCount); try if Column > InvalidColumn then DoSort(FRoot); InvalidateCache; finally if FUpdateCount > 0 then Dec(FUpdateCount); if FUpdateCount = 0 then begin ValidateCache; Invalidate; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ToggleNode(Node: PVirtualNode); // Changes a node's expand state to the opposite state. var Child: PVirtualNode; HeightDelta, StepsR1, StepsR2, Steps: Integer; TogglingTree, ChildrenInView, NeedFullInvalidate, NeedUpdate, NodeInView, PosHoldable, TotalFit: Boolean; ToggleData: TToggleAnimationData; //--------------- local functions ------------------------------------------- procedure UpdateRanges; // This function is used to adjust FRangeX/FRangeY in order to correctly // reflect the tree's state after a toggle, because it is essential that // these values are correct if we need to scroll afterwards. To avoid a // useless call to UpdateScrollbars we do it right here. begin if FRoot.TotalHeight < FDefaultNodeHeight then FRoot.TotalHeight := FDefaultNodeHeight; FRangeY := FRoot.TotalHeight - FRoot.NodeHeight + FBottomSpace; if FHeader.UseColumns then FRangeX := FHeader.FColumns.TotalWidth else FRangeX := GetMaxRightExtend; end; //--------------------------------------------------------------------------- procedure PrepareAnimation; // Prepares ToggleData. var R: TRect; S: Integer; M: TToggleAnimationMode; begin with ToggleData do begin Window := Handle; DC := GetDC(Handle); //lcl: setting Color to Brush seems not necessary //Self.Brush.Color := Color; Brush := Self.Brush.Reference.Handle; if (Mode1 <> tamNoScroll) and (Mode2 <> tamNoScroll) then begin if StepsR1 < StepsR2 then begin // As the primary rectangle is always R1 we will get a much smoother // animation if R1 is the one that will be scrolled more. R := R2; R2 := R1; R1 := R; M := Mode2; Mode2 := Mode1; Mode1 := M; S := StepsR2; StepsR2 := StepsR1; StepsR1 := S; end; ScaleFactor := StepsR2 / StepsR1; MissedSteps := 0; end; if Mode1 <> tamNoScroll then Steps := StepsR1 else Steps := StepsR2; end; end; //--------------- end local functions --------------------------------------- begin Assert(Assigned(Node), 'Node must not be nil.'); TogglingTree := tsToggling in FStates; ChildrenInView := False; HeightDelta := 0; NeedFullInvalidate := False; NeedUpdate := False; NodeInView := False; PosHoldable := False; TotalFit := False; // We don't need to switch the expand state if the node is being deleted otherwise some // updates (e.g. visible node count) are done twice with disasterous results). if [vsDeleting, vsToggling] * Node.States = [] then begin try DoStateChange([tsToggling]); Include(Node.States, vsToggling); if vsExpanded in Node.States then begin if DoCollapsing(Node) then begin NeedUpdate := True; if (FUpdateCount = 0) and (toAnimatedToggle in FOptions.FAnimationOptions) and not (tsCollapsing in FStates) then begin Application.CancelHint; UpdateWindow(Handle); // animated collapsing with ToggleData do begin // Determine the animation behaviour and rectangle. If toChildrenAbove is set, the behaviour is depending // on the position of the node to be collapsed. R1 := GetDisplayRect(Node, NoColumn, False); Mode2 := tamNoScroll; HeightDelta := -Node.TotalHeight + NodeHeight[Node]; if toChildrenAbove in FOptions.FPaintOptions then begin PosHoldable := (FOffsetY + (Integer(Node.TotalHeight - NodeHeight[Node]))) <= 0; NodeInView := R1.Top < ClientHeight; StepsR1 := 0; if NodeInView then begin if PosHoldable or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) then begin // Scroll the child nodes down. Mode1 := tamScrollDown; R1.Bottom := R1.Top; R1.Top := 0; StepsR1 := Min(R1.Bottom - R1.Top + 1, Node.TotalHeight - NodeHeight[Node]); end else begin // The position cannot be kept. So scroll the node up to its future position. Mode1 := tamScrollUp; R1.Top := Max(0, R1.Top + HeightDelta); R1.Bottom := ClientHeight; StepsR1 := FOffsetY - HeightDelta; end; end; end else begin if (Integer(FRangeY) + FOffsetY - R1.Bottom + HeightDelta >= ClientHeight - R1.Bottom) or (Integer(FRangeY) <= ClientHeight) or (FOffsetY = 0) or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) then begin // Do a simple scroll up over the child nodes. Mode1 := tamScrollUp; Inc(R1.Top, NodeHeight[Node]); R1.Bottom := ClientHeight; StepsR1 := Min(R1.Bottom - R1.Top + 1, -HeightDelta); end else begin // Scroll the node down to its future position. As FOffsetY will change we need to invalidate the // whole tree. Mode1 := tamScrollDown; StepsR1 := Min(-FOffsetY, ClientHeight - Integer(FRangeY) -FOffsetY - HeightDelta); R1.Top := 0; R1.Bottom := Min(ClientHeight, R1.Bottom + Steps); NeedFullInvalidate := True; end; end; // No animation necessary if the node is below the current client height. if R1.Top < ClientHeight then begin PrepareAnimation; try Animate(Steps, FAnimationDuration, ToggleCallback, @ToggleData); finally ReleaseDC(Window, DC); end; end; end; end; // collapse the node AdjustTotalHeight(Node, NodeHeight[Node]); if FullyVisible[Node] then Dec(FVisibleCount, CountVisibleChildren(Node)); Exclude(Node.States, vsExpanded); DoCollapsed(Node); // Remove child nodes now, if enabled. if (toAutoFreeOnCollapse in FOptions.FAutoOptions) and (Node.ChildCount > 0) then begin DeleteChildren(Node); Include(Node.States, vsHasChildren); end; end; end else if DoExpanding(Node) then begin NeedUpdate := True; // expand the node, need to adjust the height if not (vsInitialized in Node.States) then InitNode(Node); if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); // Avoid setting the vsExpanded style if there are no child nodes. if Node.ChildCount > 0 then begin // Iterate through the child nodes without initializing them. We have to determine the entire height. Child := Node.FirstChild; repeat if vsVisible in Child.States then Inc(HeightDelta, Child.TotalHeight); Child := Child.NextSibling; until Child = nil; // Getting the display rectangle is already done here as it is needed for toChildrenAbove in any case. if (toChildrenAbove in FOptions.FPaintOptions) or (FUpdateCount = 0) then begin with ToggleData do begin R1 := GetDisplayRect(Node, NoColumn, False); Mode2 := tamNoScroll; TotalFit := HeightDelta + Integer(NodeHeight[Node]) <= ClientHeight; if toChildrenAbove in FOptions.FPaintOptions then begin // The main goal with toChildrenAbove being set is to keep the nodes visual position so the user does // not get confused. Therefore we need to scroll the view when the expanding is done. PosHoldable := TotalFit and (Integer(FRangeY) - ClientHeight >= 0) ; ChildrenInView := (R1.Top - HeightDelta) >= 0; NodeInView := R1.Bottom <= ClientHeight; end else begin PosHoldable := TotalFit; ChildrenInView := R1.Bottom + HeightDelta <= ClientHeight; end; R1.Bottom := ClientHeight; end; end; if FUpdateCount = 0 then begin // Do animated expanding if enabled. if (ToggleData.R1.Top < ClientHeight) and ([tsPainting, tsExpanding] * FStates = []) and (toAnimatedToggle in FOptions.FAnimationOptions)then begin Application.CancelHint; UpdateWindow(Handle); // animated expanding with ToggleData do begin if toChildrenAbove in FOptions.FPaintOptions then begin // At first check if we hold the position, which is the most common case. if not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) or (PosHoldable and ( (NodeInView and ChildrenInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) )) then begin Mode1 := tamScrollUp; R1 := Rect(R1.Left, 0, R1.Right, R1.Top); StepsR1 := Min(HeightDelta, R1.Bottom); end else begin // If we will not hold the node's visual position we mostly scroll in both directions. Mode1 := tamScrollDown; Mode2 := tamScrollUp; R2 := Rect(R1.Left, 0, R1.Right, R1.Top); if not (toAutoScrollOnExpand in FOptions.FAutoOptions) then begin // If we shall not or cannot scroll to the desired extent we calculate the new position (with // max FOffsetY applied) and animate it that way. StepsR1 := -FOffsetY - Max(Integer(FRangeY) + HeightDelta - ClientHeight, 0) + HeightDelta; if (Integer(FRangeY) + HeightDelta - ClientHeight) <= 0 then Mode2 := tamNoScroll else StepsR2 := Min(Integer(FRangeY) + HeightDelta - ClientHeight, R2.Bottom); end else begin if TotalFit and NodeInView and (Integer(FRangeY) + HeightDelta > ClientHeight) then begin // If the whole subtree will fit into the client area and the node is currently fully visible, // the first child will be made the top node if possible. if HeightDelta >= R1.Top then StepsR1 := Abs(R1.Top - HeightDelta) else StepsR1 := ClientHeight - Integer(FRangeY); end else if Integer(FRangeY) + HeightDelta <= ClientHeight then begin // We cannot make the first child the top node as we cannot scroll to that extent, // so we do a simple scroll down. Mode2 := tamNoScroll; StepsR1 := HeightDelta; end else // If the subtree does not fit into the client area at once, the expanded node will // be made the bottom node. StepsR1 := ClientHeight - R1.Top - Integer(NodeHeight[Node]); if Mode2 <> tamNoScroll then begin if StepsR1 > 0 then StepsR2 := Min(R1.Top, HeightDelta - StepsR1) else begin // If the node is already at the bottom scrolling is needed. Mode1 := tamNoScroll; StepsR2 := Min(HeightDelta, R1.Bottom); end; end; end; end; end else begin // toChildrenAbove is not set. if (PosHoldable and ChildrenInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) or not (toAdvancedAnimatedToggle in FOptions.FAnimationOptions) or (R1.Top <= 0) then begin // If the node will stay at its visual position, do a simple down-scroll. Mode1 := tamScrollDown; Inc(R1.Top, NodeHeight[Node]); StepsR1 := Min(R1.Bottom - R1.Top, HeightDelta); end else begin // We will not hold the nodes visual position so perform a double scroll. Mode1 := tamScrollUp; Mode2 := tamScrollDown; R1.Bottom := R1.Top + Integer(NodeHeight[Node]) + 1; R1.Top := 0; R2 := Rect(R1.Left, R1.Bottom, R1.Right, ClientHeight); StepsR1 := Min(HeightDelta - (ClientHeight - R2.Top), R1.Bottom - Integer(NodeHeight[Node])); StepsR2 := ClientHeight - R2.Top; end; end; if ClientHeight >= R1.Top then begin PrepareAnimation; try Animate(Steps, FAnimationDuration, ToggleCallback, @ToggleData); finally ReleaseDC(Window, DC); end; end; end; end; end; Include(Node.States, vsExpanded); AdjustTotalHeight(Node, HeightDelta, True); if FullyVisible[Node] then Inc(FVisibleCount, CountVisibleChildren(Node)); DoExpanded(Node); end; end; if NeedUpdate then begin InvalidateCache; if FUpdateCount = 0 then begin ValidateCache; if Node.ChildCount > 0 then begin UpdateRanges; if [tsPainting, tsExpanding] * FStates = [] then begin if (vsExpanded in Node.States) and ((toAutoScrollOnExpand in FOptions.FAutoOptions) or (toChildrenAbove in FOptions.FPaintOptions)) then begin if toChildrenAbove in FOptions.FPaintOptions then begin NeedFullInvalidate := True; if (PosHoldable and ChildrenInView and NodeInView) or not (toAutoScrollOnExpand in FOptions.FAutoOptions) then SetOffsetY(FOffsetY - Integer(HeightDelta)) else if TotalFit and NodeInView then SetOffsetY(FOffsetY - GetDisplayRect(GetFirstVisible(Node, True), NoColumn, False).Top) else BottomNode := Node; end else begin // Scroll as much child nodes into view as possible if the node has been expanded. if PosHoldable then NeedFullInvalidate := ScrollIntoView(GetLastVisible(Node, True), False) else begin TopNode := Node; NeedFullInvalidate := True; end; end; end else begin // If we have collapsed the node or toAutoScrollOnExpand is not set, we try to keep the nodes // visual position. if toChildrenAbove in FOptions.FPaintOptions then SetOffsetY(FOffsetY - Integer(HeightDelta)); NeedFullInvalidate := True; end; end; UpdateScrollbars(True); // Check for automatically scrolled tree. if NeedFullInvalidate then Invalidate else InvalidateToBottom(Node); end else InvalidateNode(Node); end else UpdateRanges; end; finally Exclude(Node.States, vsToggling); if not TogglingTree then DoStateChange([], [tsToggling]); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TBaseVirtualTree.UpdateAction(Action: TBasicAction): Boolean; // Support for standard actions. begin if not Focused then Result := inherited UpdateAction(Action) else begin Result := (Action is TEditCut) or (Action is TEditCopy) or (Action is TEditDelete); if Result then TAction(Action).Enabled := (FSelectionCount > 0) and ((Action is TEditDelete) or (FClipboardFormats.Count > 0)) else begin Result := Action is TEditPaste; if Result then TAction(Action).Enabled := True else begin Result := Action is TEditSelectAll; if Result then TAction(Action).Enabled := (toMultiSelect in FOptions.FSelectionOptions) and (FVisibleCount > 0) else Result := inherited UpdateAction(Action); end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateHorizontalScrollBar(DoRepaint: Boolean); var ScrollInfo: TScrollInfo; begin if FHeader.UseColumns then FRangeX := FHeader.FColumns.TotalWidth else FRangeX := GetMaxRightExtend; if tsUpdating in FStates then exit; // Adjust effect scroll offset depending on bidi mode. if UseRightToLeftAlignment then FEffectiveOffsetX := Integer(FRangeX) - ClientWidth + FOffsetX else FEffectiveOffsetX := -FOffsetX; if FScrollBarOptions.ScrollBars in [ssHorizontal, ssBoth] then begin FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); //LCL automatically set cbSize field //ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_ALL; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, SB_HORZ, ScrollInfo); {$else} GetScrollInfo(Handle, SB_HORZ, ScrollInfo); {$endif UseFlatScrollbars} if (Integer(FRangeX) > ClientWidth) or FScrollBarOptions.AlwaysVisible then begin DoShowScrollBar(SB_HORZ, True); ScrollInfo.nMin := 0; ScrollInfo.nMax := FRangeX; ScrollInfo.nPos := FEffectiveOffsetX; ScrollInfo.nPage := Max(0, ClientWidth); ScrollInfo.fMask := SIF_ALL or ScrollMasks[FScrollBarOptions.AlwaysVisible]; {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_HORZ, ScrollInfo, DoRepaint); {$else} SetScrollInfo(Handle, SB_HORZ, ScrollInfo, DoRepaint); {$endif UseFlatScrollbars} end else begin ScrollInfo.nMin := 0; ScrollInfo.nMax := 0; ScrollInfo.nPos := 0; ScrollInfo.nPage := 0; DoShowScrollBar(SB_HORZ, False); {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_HORZ, ScrollInfo, False); {$else} SetScrollInfo(Handle, SB_HORZ, ScrollInfo, False); {$endif UseFlatScrollbars} end; // Since the position is automatically changed if it doesn't meet the range // we better read the current position back to stay synchronized. {$ifdef UseFlatScrollbars} FEffectiveOffsetX := FlatSB_GetScrollPos(Handle, SB_HORZ); {$else} //todo: Use get scrollinfo instead of GetScrollPos?? FEffectiveOffsetX := GetScrollPos(Handle, SB_HORZ); {$endif UseFlatScrollbars} if UseRightToLeftAlignment then SetOffsetX(-Integer(FRangeX) + ClientWidth + FEffectiveOffsetX) else SetOffsetX(-FEffectiveOffsetX); end else begin DoShowScrollBar(SB_HORZ, False); // Reset the current horizontal offset to account for window resize etc. SetOffsetX(FOffsetX); end; {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'FEffectiveOffsetX after UpdateHScrollbar',FEffectiveOffsetX);{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateScrollBars(DoRepaint: Boolean); // adjusts scrollbars to reflect current size and paint offset of the tree begin if HandleAllocated then begin UpdateVerticalScrollBar(DoRepaint); UpdateHorizontalScrollBar(DoRepaint); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.UpdateVerticalScrollBar(DoRepaint: Boolean); var ScrollInfo: TScrollInfo; begin // Total node height includes the height of the invisible root node. if FRoot.TotalHeight < FDefaultNodeHeight then FRoot.TotalHeight := FDefaultNodeHeight; FRangeY := FRoot.TotalHeight - FRoot.NodeHeight + FBottomSpace; if tsUpdating in FStates then exit; if FScrollBarOptions.ScrollBars in [ssVertical, ssBoth] then begin //LCL automatically set cbSize field //ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_ALL; {$ifdef UseFlatScrollbars} FlatSB_GetScrollInfo(Handle, SB_VERT, ScrollInfo); {$else} GetScrollInfo(Handle, SB_VERT, ScrollInfo); {$endif UseFlatScrollbars} if (Integer(FRangeY) > ClientHeight) or FScrollBarOptions.AlwaysVisible then begin DoShowScrollBar(SB_VERT, True); ScrollInfo.nMin := 0; ScrollInfo.nMax := FRangeY; ScrollInfo.nPos := -FOffsetY; ScrollInfo.nPage := Max(0, ClientHeight); ScrollInfo.fMask := SIF_ALL or ScrollMasks[FScrollBarOptions.AlwaysVisible]; {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_VERT, ScrollInfo, DoRepaint); {$else} SetScrollInfo(Handle, SB_VERT, ScrollInfo, DoRepaint); {$endif UseFlatScrollbars} end else begin ScrollInfo.nMin := 0; ScrollInfo.nMax := 0; ScrollInfo.nPos := 0; ScrollInfo.nPage := 0; DoShowScrollBar(SB_VERT, False); {$ifdef UseFlatScrollbars} FlatSB_SetScrollInfo(Handle, SB_VERT, ScrollInfo, False); {$else} SetScrollInfo(Handle, SB_VERT, ScrollInfo, False); {$endif UseFlatScrollbars} end; // Since the position is automatically changed if it doesn't meet the range // we better read the current position back to stay synchronized. {$ifdef UseFlatScrollbars} SetOffsetY(-FlatSB_GetScrollPos(Handle, SB_VERT)); {$else} SetOffsetY(-GetScrollPos(Handle, SB_VERT)); {$endif UseFlatScrollBars} end else begin DoShowScrollbar(SB_VERT, False); // Reset the current vertical offset to account for window resize etc. SetOffsetY(FOffsetY); end; end; //---------------------------------------------------------------------------------------------------------------------- //lcl: the current implementation in TControl is exactly equal to this. // disable for now and reenable in the case the TControl implementation change { function TBaseVirtualTree.UseRightToLeftReading: Boolean; // The tree can handle right-to-left reading also on non-middle-east systems, so we cannot use the same function as // it is implemented in TControl. begin Result := BiDiMode <> bdLeftToRight; end; } //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateChildren(Node: PVirtualNode; Recursive: Boolean); // Ensures that the children of the given node (and all their children, if Recursive is True) are initialized. // Node must already be initialized var Child: PVirtualNode; begin if Node = nil then Node := FRoot; if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Child := Node.FirstChild; while Assigned(Child) do begin ValidateNode(Child, Recursive); Child := Child.NextSibling; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.ValidateNode(Node: PVirtualNode; Recursive: Boolean); // Ensures that the given node (and all its children, if Recursive is True) are initialized. var Child: PVirtualNode; begin if Node = nil then Node := FRoot else if not (vsInitialized in Node.States) then InitNode(Node); if Recursive then begin if (vsHasChildren in Node.States) and (Node.ChildCount = 0) then InitChildren(Node); Child := Node.FirstChild; while Assigned(Child) do begin ValidateNode(Child, recursive); Child := Child.NextSibling; end; end; end; //----------------- TCustomStringTreeOptions --------------------------------------------------------------------------- constructor TCustomStringTreeOptions.Create(AOwner: TBaseVirtualTree); begin inherited; FStringOptions := DefaultStringOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomStringTreeOptions.SetStringOptions(const Value: TVTStringOptions); var ChangedOptions: TVTStringOptions; begin if FStringOptions <> Value then begin // Exclusive ORing to get all entries wich are in either set but not in both. ChangedOptions := FStringOptions + Value - (FStringOptions * Value); FStringOptions := Value; with FOwner do if (toShowStaticText in ChangedOptions) and not (csLoading in ComponentState) and HandleAllocated then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomStringTreeOptions.AssignTo(Dest: TPersistent); begin if Dest is TCustomStringTreeOptions then begin with TCustomStringTreeOptions(Dest) do StringOptions := Self.StringOptions; end; // Let ancestors assign their options to the destination class. inherited; end; //----------------- TVTEdit -------------------------------------------------------------------------------------------- // Implementation of a generic node caption editor. constructor TVTEdit.Create(Link: TStringEditLink); begin inherited Create(nil); ShowHint := False; ParentShowHint := False; // This assignment increases the reference count for the interface. FRefLink := Link; // This reference is used to access the link. FLink := Link; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CMAutoAdjust(var Message: TLMessage); begin AutoAdjustSize; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CMExit(var Message: TLMessage); begin if Assigned(FLink) and not FLink.FStopping then with FLink, FTree do begin if (toAutoAcceptEditChange in TreeOptions.StringOptions) then DoEndEdit else DoCancelEdit; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CNCommand(var Message: TLMCommand); begin if Assigned(FLink) and Assigned(FLink.FTree) and (Message.NotifyCode = EN_UPDATE) and not (toGridExtensions in FLink.FTree.FOptions.FMiscOptions) and not (vsMultiline in FLink.FNode.States) then // Instead directly calling AutoAdjustSize it is necessary on Win9x/Me to decouple this notification message // and eventual resizing. Hence we use a message to accomplish that. if IsWinNT then AutoAdjustSize else PostMessage(Handle, CM_AUTOADJUST, 0, 0); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.DoRelease(Data: PtrInt); begin Free; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMChar(var Message: TLMChar); begin if not (Message.CharCode in [VK_ESCAPE, VK_TAB]) then inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMDestroy(var Message: TLMDestroy); begin // If editing stopped by other means than accept or cancel then we have to do default processing for // pending changes. if Assigned(FLink) and not FLink.FStopping then begin with FLink, FTree do begin if (toAutoAcceptEditChange in TreeOptions.StringOptions) and Modified then Text[FNode, FColumn] := FEdit.Text; end; FLink := nil; FRefLink := nil; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMGetDlgCode(var Message: TLMNoParams); begin inherited; Message.Result := Message.Result or DLGC_WANTALLKEYS or DLGC_WANTTAB or DLGC_WANTARROWS; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.WMKeyDown(var Message: TLMKeyDown); // Handles some control keys. var Shift: TShiftState; EndEdit: Boolean; Tree: TBaseVirtualTree; begin case Message.CharCode of VK_ESCAPE: begin Tree := FLink.FTree; FLink.FTree.DoCancelEdit; Tree.SetFocus; end; VK_RETURN: begin EndEdit := not (vsMultiline in FLink.FNode.States); if not EndEdit then begin // If a multiline node is being edited the finish editing only if Ctrl+Enter was pressed, // otherwise allow to insert line breaks into the text. Shift := KeyDataToShiftState(Message.KeyData); EndEdit := ssCtrlOS in Shift; end; if EndEdit then begin Tree := FLink.FTree; FLink.FTree.InvalidateNode(FLink.FNode); FLink.FTree.DoEndEdit; Tree.SetFocus; end; end; VK_UP: begin if not (vsMultiline in FLink.FNode.States) then Message.CharCode := VK_LEFT; inherited; end; VK_DOWN: begin if not (vsMultiline in FLink.FNode.States) then Message.CharCode := VK_RIGHT; inherited; end; else inherited; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.AutoAdjustSize; // Changes the size of the edit to accomodate as much as possible of its text within its container window. // NewChar describes the next character which will be added to the edit's text. var DC: HDC; Size: TSize; LastFont: THandle; begin if not (vsMultiline in FLink.FNode.States) then begin DC := GetDC(Handle); LastFont := SelectObject(DC, Font.Reference.Handle); try // Read needed space for the current text. GetTextExtentPoint32(DC, PChar(Text), Length(Text), Size); Inc(Size.cx, 2 * FLink.FTree.FTextMargin); // Repaint associated node if the edit becomes smaller. if Size.cx < Width then FLink.FTree.InvalidateNode(FLink.FNode); if FLink.FAlignment = taRightJustify then FLink.SetBounds(Rect(Left + Width - Size.cx, Top, Left + Width, Top + Height)) else FLink.SetBounds(Rect(Left, Top, Left + Size.cx, Top + Height)); finally SelectObject(DC, LastFont); ReleaseDC(Handle, DC); end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.CreateParams(var Params: TCreateParams); begin inherited; // Only with multiline style we can use the text formatting rectangle. // This does not harm formatting as single line control, if we don't use word wrapping. with Params do begin //todo: delphi uses Multiline for all //Style := Style or ES_MULTILINE; if vsMultiline in FLink.FNode.States then begin Style := Style and not (ES_AUTOHSCROLL or WS_HSCROLL) or WS_VSCROLL or ES_AUTOVSCROLL; Style := Style or ES_MULTILINE; end; if tsUseThemes in FLink.FTree.FStates then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; end else begin Style := Style or WS_BORDER; ExStyle := ExStyle and not WS_EX_CLIENTEDGE; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTEdit.Release; begin if HandleAllocated then Application.QueueAsyncCall(DoRelease, 0); end; //----------------- TStringEditLink ------------------------------------------------------------------------------------ constructor TStringEditLink.Create; begin inherited; FEdit := TVTEdit.Create(Self); with FEdit do begin Visible := False; BorderStyle := bsSingle; AutoSize := False; end; end; //---------------------------------------------------------------------------------------------------------------------- destructor TStringEditLink.Destroy; begin FEdit.Release; inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.BeginEdit: Boolean; // Notifies the edit link that editing can start now. descendants may cancel node edit // by returning False. begin Result := not FStopping; if Result then begin FEdit.Show; FEdit.SelectAll; FEdit.SetFocus; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.SetEdit(const Value: TVTEdit); begin if Assigned(FEdit) then FEdit.Free; FEdit := Value; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.CancelEdit: Boolean; begin Result := not FStopping; if Result then begin FStopping := True; FEdit.Hide; FTree.CancelEditNode; FEdit.FLink := nil; FEdit.FRefLink := nil; end; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.EndEdit: Boolean; begin Result := not FStopping; if Result then try FStopping := True; if FEdit.Modified then FTree.Text[FNode, FColumn] := FEdit.Text; FEdit.Hide; FEdit.FLink := nil; FEdit.FRefLink := nil; except FStopping := False; raise; end; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.GetBounds: TRect; begin Result := FEdit.BoundsRect; end; //---------------------------------------------------------------------------------------------------------------------- function TStringEditLink.PrepareEdit(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean; // Retrieves the true text bounds from the owner tree. var Text: String; begin Result := Tree is TCustomVirtualStringTree; if Result then begin FTree := Tree as TCustomVirtualStringTree; FNode := Node; FColumn := Column; // Initial size, font and text of the node. FTree.GetTextInfo(Node, Column, FEdit.Font, FTextBounds, Text); FEdit.Font.Color := clWindowText; FEdit.Parent := Tree; FEdit.HandleNeeded; FEdit.Text := Text; if Column <= NoColumn then begin FEdit.BidiMode := FTree.BidiMode; FAlignment := FTree.Alignment; end else begin FEdit.BidiMode := FTree.Header.Columns[Column].BidiMode; FAlignment := FTree.Header.Columns[Column].Alignment; end; if FEdit.BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(FAlignment); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.ProcessMessage(var Message: TLMessage); begin FEdit.WindowProc(Message); end; //---------------------------------------------------------------------------------------------------------------------- procedure TStringEditLink.SetBounds(R: TRect); // Sets the outer bounds of the edit control and the actual edit area in the control. var Offset: Integer; begin if not FStopping then begin with R do begin // Set the edit's bounds but make sure there's a minimum width and the right border does not // extend beyond the parent's left/right border. if Left < 0 then Left := 0; if Right - Left < 30 then begin if FAlignment = taRightJustify then Left := Right - 30 else Right := Left + 30; end; if Right > FTree.ClientWidth then Right := FTree.ClientWidth; FEdit.BoundsRect := R; // The selected text shall exclude the text margins and be centered vertically. // We have to take out the two pixel border of the edit control as well as a one pixel "edit border" the // control leaves around the (selected) text. R := FEdit.ClientRect; Offset := 2; if tsUseThemes in FTree.FStates then Inc(Offset); InflateRect(R, -FTree.FTextMargin + Offset, Offset); if not (vsMultiline in FNode.States) then OffsetRect(R, 0, FTextBounds.Top - FEdit.Top); SendMessage(FEdit.Handle, EM_SETRECTNP, 0, PtrUInt(@R)); end; end; end; //----------------- TCustomVirtualString ------------------------------------------------------------------------------- constructor TCustomVirtualStringTree.Create(AOwner: TComponent); begin inherited; if (Owner = nil) or (([csReading, csDesigning] * Owner.ComponentState) = [csDesigning]) then FDefaultText := 'Node'; FInternalDataOffset := AllocateInternalDataArea(SizeOf(Cardinal)); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.GetRenderStartValues(Source: TVSTTextSourceType; out Node: PVirtualNode; out NextNodeProc: TGetNextNodeProc); begin case Source of tstInitialized: begin Node := GetFirstInitialized; NextNodeProc := GetNextInitialized; end; tstSelected: begin Node := GetFirstSelected; NextNodeProc := GetNextSelected; end; tstCutCopySet: begin Node := GetFirstCutCopy; NextNodeProc := GetNextCutCopy; end; tstVisible: begin Node := GetFirstVisible(nil, True); NextNodeProc := GetNextVisible; end; else // tstAll Node := GetFirst; NextNodeProc := GetNext; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetImageText(Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex): String; begin Assert(Assigned(Node), 'Node must not be nil.'); if not (vsInitialized in Node.States) then InitNode(Node); Result := ''; DoGetImageText(Node, Kind, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetOptions: TCustomStringTreeOptions; begin Result := FOptions as TCustomStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetText(Node: PVirtualNode; Column: TColumnIndex): String; begin Assert(Assigned(Node), 'Node must not be nil.'); if not (vsInitialized in Node.States) then InitNode(Node); Result := FDefaultText; DoGetText(Node, Column, ttNormal, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.InitializeTextProperties(var PaintInfo: TVTPaintInfo); // Initializes default values for customization in PaintNormalText. begin with PaintInfo do begin // Set default font values first. Canvas.Font := Font; if (toHotTrack in FOptions.FPaintOptions) and (Node = FCurrentHotNode) then begin if not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions) then Canvas.Font.Style := Canvas.Font.Style + [fsUnderline]; Canvas.Font.Color := FColors.HotColor; end; // Change the font color only if the node also is drawn in selected style. if poDrawSelection in PaintOptions then begin if (Column = FFocusedColumn) or (toFullRowSelect in FOptions.FSelectionOptions) then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States) and (not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions)) then Canvas.Font.Color := clHighlightText; end else if vsSelected in Node.States then begin if (Focused or (toPopupMode in FOptions.FPaintOptions)) and (not IsWinVistaOrAbove or not (tsUseThemes in FStates) or not (toUseExplorerTheme in FOptions.FPaintOptions)) then Canvas.Font.Color := clHighlightText; end; end; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.PaintNormalText(var PaintInfo: TVTPaintInfo; TextOutFlags: Integer; Text: String); // This method is responsible for painting the given text to target canvas (under consideration of the given rectangles). // The text drawn here is considered as the normal text in a node. // Note: NodeWidth is the actual width of the text to be drawn. This does not necessarily correspond to the width of // the node rectangle. The clipping rectangle comprises the entire node (including tree lines, buttons etc.). var TripleWidth: Integer; R: TRect; DrawFormat: Cardinal; Size: TSize; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintNormalText') ;{$endif} InitializeTextProperties(PaintInfo); with PaintInfo do begin R := ContentRect; //todo_lcl See how TextStyle should be set //Canvas.TextFlags := 0; // Multiline nodes don't need special font handling or text manipulation. // Note: multiline support requires the Unicode version of DrawText, which is able to do word breaking. // The emulation in this unit does not support this so we have to use the OS version. However // DrawTextW is only available on NT/2000/XP and up. Hence there is only partial multiline support // for 9x/Me. if vsMultiline in Node.States then begin InflateRect(R, -FTextMargin, 0); DoPaintText(Node, Canvas, Column, ttNormal); // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; // The edit control flag will ensure that no partial line is displayed, that is, only lines // which are (vertically) fully visible are drawn. DrawFormat := DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment]; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; end else begin InflateRect(R, -FTextMargin, 0); FFontChanged := False; TripleWidth := FEllipsisWidth; DoPaintText(Node, Canvas, Column, ttNormal); if FFontChanged then begin // If the font has been changed then the ellipsis width must be recalculated. TripleWidth := 0; // Recalculate also the width of the normal text. GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Size); NodeWidth := Size.cx + 2 * FTextMargin; end; // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; // Check if the text must be shortend. if (Column > -1) and ((NodeWidth - 2 * FTextMargin) > R.Right - R.Left) then begin Text := DoShortenString(Canvas, Node, Column, Text, R.Right - R.Left, TripleWidth); if Alignment = taRightJustify then DrawFormat := DrawFormat or DT_RIGHT else DrawFormat := DrawFormat or DT_LEFT; end else DrawFormat := DrawFormat or AlignmentToDrawFlag[Alignment]; end; //todo_lcl_check if not Canvas.TextStyle.Opaque then SetBkMode(Canvas.Handle, TRANSPARENT) else SetBkMode(Canvas.Handle, OPAQUE); {$ifdef DEBUG_VTV}Logger.Send([lcPaintDetails],'Canvas.Brush.Color',Canvas.Brush.Color);{$endif} DoTextDrawing(PaintInfo, Text, R, DrawFormat); end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintNormalText');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.PaintStaticText(const PaintInfo: TVTPaintInfo; TextOutFlags: Integer; const Text: String); // This method retrives and draws the static text bound to a particular node. var R: TRect; DrawFormat: Cardinal; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'PaintStaticText');{$endif} with PaintInfo do begin Canvas.Font := Font; if toFullRowSelect in FOptions.FSelectionOptions then begin if Node = FDropTargetNode then begin if (FLastDropMode = dmOnNode) or (vsSelected in Node.States)then Canvas.Font.Color := clHighlightText else Canvas.Font.Color := Font.Color; end else if vsSelected in Node.States then begin if Focused or (toPopupMode in FOptions.FPaintOptions) then Canvas.Font.Color := clHighlightText else Canvas.Font.Color := Font.Color; end; end; DrawFormat := DT_NOPREFIX or DT_VCENTER or DT_SINGLELINE; //todo_lcl See how Canvas.TextStyle should be //Canvas.TextFlags := 0; DoPaintText(Node, Canvas, Column, ttStatic); // Disabled node color overrides all other variants. if (vsDisabled in Node.States) or not Enabled then Canvas.Font.Color := FColors.DisabledColor; R := ContentRect; if Alignment = taRightJustify then Dec(R.Right, NodeWidth + FTextMargin) else Inc(R.Left, NodeWidth + FTextMargin); //todo_lcl_check if not Canvas.TextStyle.Opaque then SetBkMode(Canvas.Handle, TRANSPARENT) else SetBkMode(Canvas.Handle, OPAQUE); DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat) end; {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'PaintStaticText');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetDefaultText(const Value: String); begin if FDefaultText <> Value then begin FDefaultText := Value; if not (csLoading in ComponentState) then Invalidate; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetOptions(const Value: TCustomStringTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.SetText(Node: PVirtualNode; Column: TColumnIndex; const Value: String); begin DoNewText(Node, Column, Value); InvalidateNode(Node); end; //---------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.CMFontChanged(var Msg: TLMessage); // Whenever a new font is applied to the tree some default values are determined to avoid frequent // determination of the same value. var MemDC: HDC; Run: PVirtualNode; TM: TTextMetric; Size: TSize; Data: PInteger; begin inherited; MemDC := CreateCompatibleDC(0); try SelectObject(MemDC, Font.Reference.Handle); GetTextMetrics(MemDC, TM); FTextHeight := TM.tmHeight; GetTextExtentPoint32(MemDC, '...', 3, Size); FEllipsisWidth := Size.cx; finally DeleteDC(MemDC); end; // Have to reset all node widths. Run := FRoot.FirstChild; while Assigned(Run) do begin Data := InternalData(Run); if Assigned(Data) then Data^ := 0; Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.AdjustPaintCellRect(var PaintInfo: TVTPaintInfo; out NextNonEmpty: TColumnIndex); // In the case a node spans several columns (if enabled) we need to determine how many columns. // Note: the autospan feature can only be used with left-to-right layout. begin if (toAutoSpanColumns in FOptions.FAutoOptions) and FHeader.UseColumns and (PaintInfo.BidiMode = bdLeftToRight) then with FHeader.FColumns, PaintInfo do begin // Start with the directly following column. NextNonEmpty := GetNextVisibleColumn(Column); // Auto spanning columns can only be used for left-to-right directionality because the tree is drawn // from left to right. For RTL directionality it would be necessary to draw it from right to left. // While this could be managed, it becomes impossible when directionality is mixed. repeat if (NextNonEmpty = InvalidColumn) or not ColumnIsEmpty(Node, NextNonEmpty) or (Items[NextNonEmpty].BidiMode <> bdLeftToRight) then Break; Inc(CellRect.Right, Items[NextNonEmpty].Width); NextNonEmpty := GetNextVisibleColumn(NextNonEmpty); until False; end else inherited; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.CalculateTextWidth(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; // Determines the width of the given text. begin Result := 2 * FTextMargin; if Length(Text) > 0 then begin Canvas.Font := Font; DoPaintText(Node, Canvas, Column, ttNormal); Inc(Result, DoTextMeasuring(Canvas, Node, Column, Text)); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ColumnIsEmpty(Node: PVirtualNode; Column: TColumnIndex): Boolean; // For hit tests it is necessary to consider cases where columns are empty and automatic column spanning is enabled. // This method simply checks the given column's text and if this is empty then the column is considered as being empty. begin Result := Length(Text[Node, Column]) = 0; // If there is no text then let the ancestor decide if the column is to be considered as being empty // (e.g. by asking the application). If there is text then the column is never be considered as being empty. if Result then Result := inherited ColumnIsEmpty(Node, Column); end; //---------------------------------------------------------------------------------------------------------------------- {$ifndef LCLWin32} procedure TCustomVirtualStringTree.CopyToClipBoard; begin if FSelectionCount > 0 then begin MarkCutCopyNodes; DoStateChange([tsCopyPending]); Clipboard.AsText := ContentToUTF8(tstCutCopySet, #9); DoStateChange([], [tsCopyPending]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.CutToClipBoard; begin //todo: currently there's no way in LCL to know when the clipboard was used CopyToClipBoard; end; {$endif} //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoCreateEditor(Node: PVirtualNode; Column: TColumnIndex): IVTEditLink; begin Result := inherited DoCreateEditor(Node, Column); // Enable generic label editing support if the application does not have own editors. if Result = nil then Result := TStringEditLink.Create; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeHint(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := inherited DoGetNodeHint(Node, Column, LineBreakStyle); if Assigned(FOnGetHint) then FOnGetHint(Self, Node, Column, LineBreakStyle, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeTooltip(Node: PVirtualNode; Column: TColumnIndex; var LineBreakStyle: TVTTooltipLineBreakStyle): String; begin Result := inherited DoGetNodeToolTip(Node, Column, LineBreakStyle); if Assigned(FOnGetHint) then FOnGetHint(Self, Node, Column, LineBreakStyle, Result) else Result := Text[Node, Column]; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; // Returns the text width of the given node in pixels. // This width is stored in the node's data member to increase access speed. var Data: PInteger; begin if (Column > NoColumn) and (vsMultiline in Node.States) then Result := FHeader.Columns[Column].Width else begin if Canvas = nil then Canvas := Self.Canvas; if Column = FHeader.MainColumn then begin // Primary column or no columns. Data := InternalData(Node); if Assigned(Data) then begin Result := Data^; if Result = 0 then begin Data^ := CalculateTextWidth(Canvas, Node, Column, Text[Node, Column]); Result := Data^; end; end else Result := 0; end else // any other column Result := CalculateTextWidth(Canvas, Node, Column, Text[Node, Column]); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoGetText(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var Text: String); begin if Assigned(FOnGetText) then FOnGetText(Self, Node, Column, TextType, Text); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoIncrementalSearch(Node: PVirtualNode; const Text: String): Integer; // Since the string tree has access to node text it can do incremental search on its own. Use the event to // override the default behavior. begin Result := 0; if Assigned(FOnIncrementalSearch) then FOnIncrementalSearch(Self, Node, Text, Result) else // Default behavior is to match the search string with the start of the node text. if Pos(Text, GetText(Node, FocusedColumn)) <> 1 then Result := 1; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoNewText(Node: PVirtualNode; Column: TColumnIndex; const Text: String); begin if Assigned(FOnNewText) then FOnNewText(Self, Node, Column, Text); // The width might have changed, so update the scrollbar. if FUpdateCount = 0 then UpdateHorizontalScrollBar(True); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoPaintNode(var PaintInfo: TVTPaintInfo); // Main output routine to print the text of the given node using the space provided in PaintInfo.ContentRect. var S: String; TextOutFlags: Integer; begin {$ifdef DEBUG_VTV}Logger.EnterMethod([lcPaintDetails],'TCustomVirtualStringTree.DoPaintNode');{$endif} // Set a new OnChange event for the canvas' font so we know if the application changes it in the callbacks. // This long winded procedure is necessary because font changes (as well as brush and pen changes) are // unfortunately not announced via the Canvas.OnChange event. RedirectFontChangeEvent(PaintInfo.Canvas); // Determine main text direction as well as other text properties. TextOutFlags := ETO_CLIPPED or RTLFlag[PaintInfo.BidiMode <> bdLeftToRight]; S := Text[PaintInfo.Node, PaintInfo.Column]; // Paint the normal text first... if Length(S) > 0 then PaintNormalText(PaintInfo, TextOutFlags, S); // ... and afterwards the static text if not centered and the node is not multiline enabled. if (Alignment <> taCenter) and not (vsMultiline in PaintInfo.Node.States) and (toShowStaticText in TreeOptions.FStringOptions) then begin S := ''; with PaintInfo do DoGetText(Node, Column, ttStatic, S); if Length(S) > 0 then PaintStaticText(PaintInfo, TextOutFlags, S); end; RestoreFontChangeEvent(PaintInfo.Canvas); {$ifdef DEBUG_VTV}Logger.ExitMethod([lcPaintDetails],'TCustomVirtualStringTree.DoPaintNode');{$endif} end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoPaintText(Node: PVirtualNode; const Canvas: TCanvas; Column: TColumnIndex; TextType: TVSTTextType); begin if Assigned(FOnPaintText) then FOnPaintText(Self, Canvas, Node, Column, TextType); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoShortenString(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const S: String; Width: Integer; EllipsisWidth: Integer = 0): String; var Done: Boolean; begin Done := False; if Assigned(FOnShortenString) then FOnShortenString(Self, Canvas, Node, Column, S, Width, Result, Done); if not Done then Result := ShortenString(Canvas.Handle, S, Width, EllipsisWidth); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.DoTextDrawing(var PaintInfo: TVTPaintInfo; const Text: String; CellRect: TRect; DrawFormat: Cardinal); var DefaultDraw: Boolean; begin DefaultDraw := True; if Assigned(FOnDrawText) then FOnDrawText(Self, PaintInfo.Canvas, PaintInfo.Node, PaintInfo.Column, Text, CellRect, DefaultDraw); if DefaultDraw then DrawText(PaintInfo.Canvas.Handle, PChar(Text), Length(Text), CellRect, DrawFormat); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.DoTextMeasuring(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; const Text: String): Integer; var Size: TSize; R: TRect; DrawFormat: Integer; begin GetTextExtentPoint32(Canvas.Handle, PChar(Text), Length(Text), Size); if vsMultiLine in Node.States then begin DrawFormat := DT_CALCRECT or DT_NOPREFIX or DT_WORDBREAK or DT_END_ELLIPSIS or DT_EDITCONTROL or AlignmentToDrawFlag[Alignment]; if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RTLREADING; R := Rect(0, 0, Size.cx, MaxInt); DrawText(Canvas.Handle, PChar(Text), Length(Text), R, DrawFormat); Size.cx := R.Right - R.Left; end; Result := Size.cx; if Assigned(FOnMeasureTextWidth) then FOnMeasureTextWidth(Self, Canvas, Node, Column, Text, Result); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.GetOptionsClass: TTreeOptionsClass; begin Result := TCustomStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.InternalData(Node: PVirtualNode): Pointer; begin if (Node = FRoot) or (Node = nil) then Result := nil else Result := PByte(Node) + FInternalDataOffset; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.MainColumnChanged; var Run: PVirtualNode; Data: PInteger; begin inherited; // Have to reset all node widths. Run := FRoot.FirstChild; while Assigned(Run) do begin Data := InternalData(Run); if Assigned(Data) then Data^ := 0; Run := GetNextNoInit(Run); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ReadChunk(Stream: TStream; Version: Integer; Node: PVirtualNode; ChunkType, ChunkSize: Integer): Boolean; // read in the caption chunk if there is one var NewText: String; begin case ChunkType of CaptionChunk: begin NewText := ''; if ChunkSize > 0 then begin SetLength(NewText, ChunkSize); Stream.Read(PChar(NewText)^, ChunkSize); end; // Do a new text event regardless of the caption content to allow removing the default string. Text[Node, FHeader.MainColumn] := NewText; Result := True; end; else Result := inherited ReadChunk(Stream, Version, Node, ChunkType, ChunkSize); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.RenderOLEData(const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean): HResult; // Returns string expressions of all currently selected nodes in the Medium structure. begin Result := inherited RenderOLEData(FormatEtcIn, Medium, ForClipboard); if Failed(Result) then try if ForClipboard then Medium.hGlobal := ContentToClipboard(FormatEtcIn.cfFormat, tstCutCopySet) else Medium.hGlobal := ContentToClipboard(FormatEtcIn.cfFormat, tstSelected); // Fill rest of the Medium structure if rendering went fine. if Medium.hGlobal <> 0 then begin Medium.tymed := TYMED_HGLOBAL; Medium.PunkForRelease := nil; Result := S_OK; end; except Result := E_FAIL; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.WriteChunks(Stream: TStream; Node: PVirtualNode); // Adds another sibling chunk for Node storing the label if the node is initialized. // Note: If the application stores a node's caption in the node's data member (which will be quite common) and needs to // store more node specific data then it should use the OnSaveNode event rather than the caption autosave function // (take out soSaveCaption from StringOptions). Otherwise the caption is unnecessarily stored twice. var Header: TChunkHeader; S: String; Len: Integer; begin inherited; if (toSaveCaptions in TreeOptions.FStringOptions) and (Node <> FRoot) and (vsInitialized in Node.States) then with Stream do begin // Read the node's caption (primary column only). S := Text[Node, FHeader.MainColumn]; Len := Length(S); if Len > 0 then begin // Write a new sub chunk. Header.ChunkType := CaptionChunk; Header.ChunkSize := Len; Write(Header, SizeOf(Header)); Write(PChar(S)^, Len); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ComputeNodeHeight(Canvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; S: String): Integer; // Default node height calculation for multi line nodes. This method can be used by the application to delegate the // computation to the string tree. // Canvas is used to compute that value by using its current font settings. // Node and Column describe the cell to be used for the computation. // S is the string for which the height must be computed. If this string is empty the cell text is used instead. var DrawFormat: Cardinal; BidiMode: TBidiMode; Alignment: TAlignment; PaintInfo: TVTPaintInfo; Dummy: TColumnIndex; LineImage: TLineImage; begin if Length(S) = 0 then S := Text[Node, Column]; DrawFormat := DT_TOP or DT_NOPREFIX or DT_CALCRECT or DT_WORDBREAK; if Column <= NoColumn then begin BidiMode := Self.BidiMode; Alignment := Self.Alignment; end else begin BidiMode := Header.Columns[Column].BidiMode; Alignment := Header.Columns[Column].Alignment; end; if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); // Allow for autospanning. PaintInfo.Node := Node; PaintInfo.BidiMode := BidiMode; PaintInfo.Column := Column; PaintInfo.CellRect := Rect(0, 0, 0, 0); if Column > NoColumn then begin PaintInfo.CellRect.Right := FHeader.Columns[Column].Width - FTextMargin; PaintInfo.CellRect.Left := FTextMargin + FMargin; if Column = Header.MainColumn then begin if toFixedIndent in FOptions.FPaintOptions then SetLength(LineImage, 1) else DetermineLineImageAndSelectLevel(Node, LineImage); Inc(PaintInfo.CellRect.Left, Length(LineImage) * Integer(Indent)); end; end else PaintInfo.CellRect.Right := ClientWidth; AdjustPaintCellRect(PaintInfo, Dummy); if BidiMode <> bdLeftToRight then DrawFormat := DrawFormat or DT_RIGHT or DT_RTLREADING else DrawFormat := DrawFormat or DT_LEFT; DrawText(Canvas.Handle, PChar(S), Length(S), PaintInfo.CellRect, DrawFormat); Result := PaintInfo.CellRect.Bottom - PaintInfo.CellRect.Top; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToHTML(Source: TVSTTextSourceType; const Caption: String = ''): String; // Renders the current tree content (depending on Source) as HTML text encoded in UTF-8. // If Caption is not empty then it is used to create and fill the header for the table built here. // Based on ideas and code from Frank van den Bergh and Andreas H?rstemeier. var Buffer: TBufferedUTF8String; //--------------------------------------------------------------------------- procedure WriteColorAsHex(Color: TColor); var WinColor: COLORREF; I: Integer; Component, Value: Byte; begin Buffer.Add('#'); WinColor := ColorToRGB(Color); I := 1; while I <= 6 do begin Component := WinColor and $FF; Value := 48 + (Component shr 4); if Value > $39 then Inc(Value, 7); Buffer.Add(AnsiChar(Value)); Inc(I); Value := 48 + (Component and $F); if Value > $39 then Inc(Value, 7); Buffer.Add(AnsiChar(Value)); Inc(I); WinColor := WinColor shr 8; end; end; //--------------------------------------------------------------------------- procedure WriteStyle(const Name: AnsiString; Font: TFont); // Creates a CSS style entry with the given name for the given font. // If Name is empty then the entry is created as inline style. begin if Length(Name) = 0 then Buffer.Add(' style="{font:') else begin Buffer.Add('.'); Buffer.Add(Name); Buffer.Add('{font:'); end; if fsUnderline in Font.Style then Buffer.Add(' underline'); if fsItalic in Font.Style then Buffer.Add(' italic'); if fsBold in Font.Style then Buffer.Add(' bold'); if Font.Size < 0 then Buffer.Add(Format(' %dpx "%s";', [Font.Height, Font.Name])) else Buffer.Add(Format(' %dpt "%s";', [Font.Size, Font.Name])); Buffer.Add('color:'); WriteColorAsHex(Font.Color); Buffer.Add(';}'); if Length(Name) = 0 then Buffer.Add('"'); end; //--------------- end local functions --------------------------------------- var I, J : Integer; Level, MaxLevel: Cardinal; AddHeader: String; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; Text: String; RenderColumns: Boolean; Columns: TColumnsArray; ColumnColors: array of String; Index: Integer; IndentWidth, LineStyleText: String; Alignment: TAlignment; BidiMode: TBidiMode; CellPadding: String; begin Buffer := TBufferedUTF8String.Create; try // For customization by the application or descendants we use again the redirected font change event. RedirectFontChangeEvent(Canvas); CellPadding := Format('padding-left:%dpx;padding-right:%0:dpx;', [FMargin]); IndentWidth := IntToStr(FIndent); AddHeader := ' '; // Add title if adviced so by giving a caption. if Length(Caption) > 0 then AddHeader := AddHeader + 'caption="' + Caption + '"'; if Borderstyle <> bsNone then AddHeader := AddHeader + Format(' border="%d" frame=box', [BorderWidth + 1]); Buffer.Add('<META http-equiv="Content-Type" content="text/html; charset=utf-8">'); // Create HTML table based on the tree structure. To simplify formatting we use styles defined in a small CSS area. Buffer.Add('<style type="text/css">'); Buffer.AddNewLine; WriteStyle('default', Font); Buffer.AddNewLine; WriteStyle('header', FHeader.Font); Buffer.AddNewLine; // Determine grid/table lines and create CSS for it. // Vertical and/or horizontal border to show. if FLineStyle = lsSolid then LineStyleText := 'solid;' else LineStyleText := 'dotted;'; if toShowHorzGridLines in FOptions.FPaintOptions then begin Buffer.Add('.noborder{border-style:'); Buffer.Add(LineStyleText); Buffer.Add(' border-bottom:1;border-left:0;border-right:0; border-top:0;'); Buffer.Add(CellPadding); Buffer.Add('}'); end else begin Buffer.Add('.noborder{border-style:none;'); Buffer.Add(CellPadding); Buffer.Add('}'); end; Buffer.AddNewLine; Buffer.Add('.normalborder {border-top:none; border-left:none; vertical-align:top;'); if toShowVertGridLines in FOptions.FPaintOptions then Buffer.Add('border-right:1 ' + LineStyleText) else Buffer.Add('border-right:none;'); if toShowHorzGridLines in FOptions.FPaintOptions then Buffer.Add('border-bottom:1 ' + LineStyleText) else Buffer.Add('border-bottom:none;'); Buffer.Add(CellPadding); Buffer.Add('}'); Buffer.Add('</style>'); Buffer.AddNewLine; // General table properties. Buffer.Add('<table class="default" bgcolor='); WriteColorAsHex(Color); Buffer.Add(AddHeader); Buffer.Add(' cellspacing="0" cellpadding='); Buffer.Add(IntToStr(FMargin) + '>'); Buffer.AddNewLine; Columns := nil; ColumnColors := nil; RenderColumns := FHeader.UseColumns; if RenderColumns then begin Columns := FHeader.FColumns.GetVisibleColumns; SetLength(ColumnColors, Length(Columns)); end; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; MaxLevel := 0; // The table consists of visible columns and rows as used in the tree, but the main tree column is splitted // into several HTML columns to accomodate the indentation. while Assigned(Run) do begin if (CanExportNode(Run)) then begin Level := GetNodeLevel(Run); if Level > MaxLevel then MaxLevel := Level; end; Run := GetNextNode(Run); end; if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FOnBeforeHeaderExport(Self, etHTML); Buffer.Add('<tr class="header" style="'); Buffer.Add(CellPadding); Buffer.Add('">'); Buffer.AddNewLine; // Make the first row in the HTML table an image of the tree header. for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etHTML, Columns[I]); Buffer.Add('<th height="'); Buffer.Add(IntToStr(FHeader.FHeight)); Buffer.Add('px"'); Alignment := Columns[I].CaptionAlignment; // Consider directionality. if Columns[I].FBiDiMode <> bdLeftToRight then begin ChangeBidiModeAlignment(Alignment); Buffer.Add(' dir="rtl"'); end; // Consider aligment. case Alignment of taRightJustify: Buffer.Add(' align=right'); taCenter: Buffer.Add(' align=center'); else Buffer.Add(' align=left'); end; Index := Columns[I].Index; // Merge cells of the header emulation in the main column. if (MaxLevel > 0) and (Index = Header.MainColumn) then begin Buffer.Add(' colspan="'); Buffer.Add(IntToStr(MaxLevel + 1)); Buffer.Add('"'); end; // The color of the header is usually clBtnFace. Buffer.Add(' bgcolor='); WriteColorAsHex(clBtnFace); // Set column width in pixels. Buffer.Add(' width="'); Buffer.Add(IntToStr(Columns[I].Width)); Buffer.Add('px">'); if Length(Columns[I].Text) > 0 then Buffer.Add(Columns[I].Text); Buffer.Add('</th>'); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport(Self, etHTML, Columns[I]); end; Buffer.Add('</tr>'); Buffer.AddNewLine; if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(self, etHTML); end; // Now go through the tree. Run := Save; while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FonBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etHTML, Run)))) then begin Run := GetNextNode(Run); Continue; end; Level := GetNodeLevel(Run); Buffer.Add(' <tr class="default">'); Buffer.AddNewLine; I := 0; while (I < Length(Columns)) or not RenderColumns do begin if RenderColumns then Index := Columns[I].Index else Index := NoColumn; if not RenderColumns or (coVisible in Columns[I].FOptions) then begin // Call back the application to know about font customization. Canvas.Font := Font; FFontChanged := False; DoPaintText(Run, Canvas, Index, ttNormal); if Index = Header.MainColumn then begin // Create a cell for each indentation level. if RenderColumns and not (coParentColor in Columns[I].FOptions) then begin for J := 1 to Level do begin Buffer.Add('<td class="noborder" width="'); Buffer.Add(IndentWidth); Buffer.Add('" height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); if not (coParentColor in Columns[I].FOptions) then begin Buffer.Add(' bgcolor='); WriteColorAsHex(Columns[I].Color); end; Buffer.Add('> </td>'); end; end else begin for J := 1 to Level do if J = 1 then begin Buffer.Add(' <td height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"> </td>'); end else Buffer.Add(' <td> </td>'); end; end; if FFontChanged then begin Buffer.Add(' <td class="normalborder" '); WriteStyle('', Canvas.Font); Buffer.Add(' height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); end else begin Buffer.Add(' <td class="normalborder" height="'); Buffer.Add(IntToStr(NodeHeight[Run])); Buffer.Add('px"'); end; if RenderColumns then begin Alignment := Columns[I].Alignment; BidiMode := Columns[I].BidiMode; end else begin Alignment := Self.Alignment; BidiMode := Self.BidiMode; end; // Consider directionality. if BiDiMode <> bdLeftToRight then begin ChangeBidiModeAlignment(Alignment); Buffer.Add(' dir="rtl"'); end; // Consider aligment. case Alignment of taRightJustify: Buffer.Add(' align=right'); taCenter: Buffer.Add(' align=center'); else Buffer.Add(' align=left'); end; // Merge cells in the main column. if (MaxLevel > 0) and (Index = FHeader.MainColumn) and (Level < MaxLevel) then begin Buffer.Add(' colspan="'); Buffer.Add(IntToStr(MaxLevel - Level + 1)); Buffer.Add('"'); end; if RenderColumns and not (coParentColor in Columns[I].FOptions) then begin Buffer.Add(' bgcolor='); WriteColorAsHex(Columns[I].Color); end; Buffer.Add('>'); Text := Self.Text[Run, Index]; if Length(Text) > 0 then Buffer.Add(Text); Buffer.Add('</td>'); end; if not RenderColumns then Break; Inc(I); end; if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etHTML, Run); Run := GetNextNode(Run); Buffer.Add(' </tr>'); Buffer.AddNewLine; end; Buffer.Add('</table>'); RestoreFontChangeEvent(Canvas); Result := Buffer.AsUTF8String; finally Buffer.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.CanExportNode(Node: PVirtualNode ): Boolean; begin Result := True; case FOptions.ExportMode of emChecked: Result := Node.CheckState = csCheckedNormal; emUnchecked: Result := Node.CheckState = csUncheckedNormal; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToRTF(Source: TVSTTextSourceType): AnsiString; // Renders the current tree content (depending on Source) as RTF (rich text). // Based on ideas and code from Frank van den Bergh and Andreas H?rstemeier. var Fonts: TStringList; Colors: TFpList; CurrentFontIndex, CurrentFontColor, CurrentFontSize: Integer; Buffer: TBufferedUTF8String; //--------------- local functions ------------------------------------------- procedure SelectFont(Font: string); var I: Integer; begin I := Fonts.IndexOf(Font); if I > -1 then begin // Font has already been used if I <> CurrentFontIndex then begin Buffer.Add('\f'); Buffer.Add(IntToStr(I)); CurrentFontIndex := I; end; end else begin I := Fonts.Add(Font); Buffer.Add('\f'); Buffer.Add(IntToStr(I)); CurrentFontIndex := I; end; end; //--------------------------------------------------------------------------- procedure SelectColor(Color: TColor); var I: Integer; begin I := Colors.IndexOf(Pointer(Color)); if I > -1 then begin // Color has already been used if I <> CurrentFontColor then begin Buffer.Add('\cf'); Buffer.Add(IntToStr(I + 1)); CurrentFontColor := I; end; end else begin I := Colors.Add(Pointer(Color)); Buffer.Add('\cf'); Buffer.Add(IntToStr(I + 1)); CurrentFontColor := I; end; end; //--------------------------------------------------------------------------- procedure TextPlusFont(const Text: String; Font: TFont); var UseUnderline, UseItalic, UseBold: Boolean; I: Integer; WText: UnicodeString; begin if Length(Text) > 0 then begin WText := UTF8Decode(Text); UseUnderline := fsUnderline in Font.Style; if UseUnderline then Buffer.Add('\ul'); UseItalic := fsItalic in Font.Style; if UseItalic then Buffer.Add('\i'); UseBold := fsBold in Font.Style; if UseBold then Buffer.Add('\b'); SelectFont(Font.Name); SelectColor(Font.Color); if Font.Size <> CurrentFontSize then begin // Font size must be given in half points. Buffer.Add('\fs'); Buffer.Add(IntToStr(2 * Font.Size)); CurrentFontSize := Font.Size; end; // Use escape sequences to note Unicode text. Buffer.Add(' '); // Note: Unicode values > 32767 must be expressed as negative numbers. This is implicitly done // by interpreting the wide chars (word values) as small integers. for I := 1 to Length(WText) do begin if (Text[I] = WideLF) then Buffer.Add( '{\par}' ) else if (Text[i] <> WideCR) then begin Buffer.Add(Format('\u%d\''3f', [SmallInt(WText[I])])); Continue; end; end; if UseUnderline then Buffer.Add('\ul0'); if UseItalic then Buffer.Add('\i0'); if UseBold then Buffer.Add('\b0'); end; end; //--------------- end local functions --------------------------------------- var Level, LastLevel: Integer; I, J: Integer; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; S, Tabs : String; Text: String; Twips: Integer; RenderColumns: Boolean; Columns: TColumnsArray; Index: Integer; Alignment: TAlignment; BidiMode: TBidiMode; begin Buffer := TBufferedUTF8String.Create; try // For customization by the application or descendants we use again the redirected font change event. RedirectFontChangeEvent(Canvas); Fonts := TStringList.Create; Colors := TFpList.Create; CurrentFontIndex := -1; CurrentFontColor := -1; CurrentFontSize := -1; Columns := nil; Tabs := ''; LastLevel := 0; RenderColumns := FHeader.UseColumns; if RenderColumns then Columns := FHeader.FColumns.GetVisibleColumns; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; // First make a table structure. The \rtf and other header stuff is included // when the font and color tables are created. Buffer.Add('\uc1\trowd\trgaph70'); J := 0; if RenderColumns then begin for I := 0 to High(Columns) do begin Inc(J, Columns[I].Width); // This value must be expressed in twips (1 inch = 1440 twips). Twips := Round(1440 * J / Screen.PixelsPerInch); Buffer.Add('\cellx'); Buffer.Add(IntToStr(Twips)); end; end else begin Twips := Round(1440 * ClientWidth / Screen.PixelsPerInch); Buffer.Add('\cellx'); Buffer.Add(IntToStr(Twips)); end; // Fill table header. if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FonBeforeHeaderExport(Self, etRTF); Buffer.Add('\pard\intbl'); for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etRTF, Columns[I]); Alignment := Columns[I].CaptionAlignment; BidiMode := Columns[I].BidiMode; // Alignment is not supported with older RTF formats, however it will be ignored. if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); case Alignment of taRightJustify: Buffer.Add('\qr'); taCenter: Buffer.Add('\qc'); end; TextPlusFont(Columns[I].Text, Header.Font); Buffer.Add('\cell'); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport( self, etRTF, Columns[I] ); end; Buffer.Add('\row'); if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(Self, etRTF); end; // Now write the contents. Run := Save; while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etRTF, Run)))) then begin Run := GetNextNode(Run); Continue; end; I := 0; while not RenderColumns or (I < Length(Columns)) do begin if RenderColumns then begin Index := Columns[I].Index; Alignment := Columns[I].Alignment; BidiMode := Columns[I].BidiMode; end else begin Index := NoColumn; Alignment := FAlignment; BidiMode := Self.BidiMode; end; if not RenderColumns or (coVisible in Columns[I].Options) then begin Text := Self.Text[Run, Index]; Buffer.Add('\pard\intbl'); // Alignment is not supported with older RTF formats, however it will be ignored. if BidiMode <> bdLeftToRight then ChangeBidiModeAlignment(Alignment); case Alignment of taRightJustify: Buffer.Add('\qr'); taCenter: Buffer.Add('\qc'); end; // Call back the application to know about font customization. Canvas.Font := Font; FFontChanged := False; DoPaintText(Run, Canvas, Index, ttNormal); if Index = Header.MainColumn then begin Level := GetNodeLevel(Run); if Level <> LastLevel then begin LastLevel := Level; Tabs := ''; for J := 0 to Level - 1 do Tabs := Tabs + '\tab'; end; if Level > 0 then begin Buffer.Add(Tabs); Buffer.Add(' '); TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end else begin TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end; end else begin TextPlusFont(Text, Canvas.Font); Buffer.Add('\cell'); end; end; if not RenderColumns then Break; Inc(I); end; Buffer.Add('\row'); if (Assigned(FOnAfterNodeExport)) then FOnAfterNodeExport(Self, etRTF, Run); Run := GetNextNode(Run); end; Buffer.Add('\pard\par'); // Build lists with fonts and colors. They have to be at the start of the document. S := '{\rtf1\ansi\ansicpg1252\deff0\deflang1043{\fonttbl'; for I := 0 to Fonts.Count - 1 do S := S + Format('{\f%d %s;}', [I, Fonts[I]]); S := S + '}'; S := S + '{\colortbl;'; for I := 0 to Colors.Count - 1 do begin J := ColorToRGB(TColor(Colors[I])); S := S + Format('\red%d\green%d\blue%d;', [J and $FF, (J shr 8) and $FF, (J shr 16) and $FF]); end; S := S + '}'; Result := S + Buffer.AsAnsiString + '}'; Fonts.Free; Colors.Free; RestoreFontChangeEvent(Canvas); finally Buffer.Free; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.ContentToCustom(Source: TVSTTextSourceType); // Generic export procedure which polls the application at every stage of the export. var I: Integer; Save, Run: PVirtualNode; GetNextNode: TGetNextNodeProc; RenderColumns: Boolean; Columns: TColumnsArray; begin Columns := nil; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; RenderColumns := FHeader.UseColumns and ( hoVisible in FHeader.Options ); if Assigned(FOnBeforeTreeExport) then FOnBeforeTreeExport(Self, etCustom); // Fill table header. if RenderColumns then begin if Assigned(FOnBeforeHeaderExport) then FOnBeforeHeaderExport(Self, etCustom); Columns := FHeader.FColumns.GetVisibleColumns; for I := 0 to High(Columns) do begin if Assigned(FOnBeforeColumnExport) then FOnBeforeColumnExport(Self, etCustom, Columns[I]); if Assigned(FOnColumnExport) then FOnColumnExport(Self, etCustom, Columns[I]); if Assigned(FOnAfterColumnExport) then FOnAfterColumnExport(Self, etCustom, Columns[I]); end; if Assigned(FOnAfterHeaderExport) then FOnAfterHeaderExport(Self, etCustom); end; // Now write the content. Run := Save; while Assigned(Run) do begin if CanExportNode(Run) then begin if Assigned(FOnBeforeNodeExport) then FOnBeforeNodeExport(Self, etCustom, Run); if Assigned(FOnNodeExport) then FOnNodeExport(Self, etCustom, Run); if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etCustom, Run); end; Run := GetNextNode(Run); end; if Assigned(FOnAfterTreeExport) then FOnAfterTreeExport(Self, etCustom); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToAnsi(Source: TVSTTextSourceType; const Separator: String): AnsiString; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsAnsiString; Buffer.Destroy; end; end; function TCustomVirtualStringTree.ContentToText(Source: TVSTTextSourceType; const Separator: String): AnsiString; begin Result := ContentToAnsi(Source, Separator); end; function TCustomVirtualStringTree.ContentToUnicode(Source: TVSTTextSourceType; const Separator: String): UnicodeString; begin Result := ContentToUTF16(Source, Separator); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.AddContentToBuffer(Buffer: TBufferedUTF8String; Source: TVSTTextSourceType; const Separator: String); // Renders the current tree content (depending on Source) as UTF8 text. // If an entry contains the separator char or double quotes then it is wrapped with double quotes // and existing double quotes are duplicated. var RenderColumns: Boolean; Tabs: String; GetNextNode: TGetNextNodeProc; Run, Save: PVirtualNode; Level, MaxLevel: Cardinal; Columns: TColumnsArray; LastColumn: TVirtualTreeColumn; Index, I: Integer; Text: String; begin Columns := nil; RenderColumns := FHeader.UseColumns; if RenderColumns then Columns := FHeader.FColumns.GetVisibleColumns; GetRenderStartValues(Source, Run, GetNextNode); Save := Run; // The text consists of visible groups representing the columns, which are separated by one or more separator // characters. There are always MaxLevel separator chars in a line (main column only). Either before the caption // to ident it or after the caption to make the following column aligned. MaxLevel := 0; while Assigned(Run) do begin Level := GetNodeLevel(Run); If Level > MaxLevel then MaxLevel := Level; Run := GetNextNode(Run); end; Tabs := DupeString(Separator, MaxLevel); // First line is always the header if used. if RenderColumns then begin LastColumn := Columns[High(Columns)]; for I := 0 to High(Columns) do begin Buffer.Add(Columns[I].Text); if Columns[I] <> LastColumn then begin if Columns[I].Index = Header.MainColumn then begin Buffer.Add(Tabs); Buffer.Add(Separator); end else Buffer.Add(Separator); end; end; Buffer.AddNewLine; end else LastColumn := nil; Run := Save; if RenderColumns then begin while Assigned(Run) do begin if (not CanExportNode(Run) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etText, Run)))) then begin Run := GetNextNode(Run); Continue; end; for I := 0 to High(Columns) do begin if coVisible in Columns[I].Options then begin Index := Columns[I].Index; // This line implicitly converts the Unicode text to ANSI. Text := Self.Text[Run, Index]; if Index = Header.MainColumn then begin Level := GetNodeLevel(Run); Buffer.Add(Copy(Tabs, 1, Integer(Level) * Length(Separator))); // Wrap the text with quotation marks if it contains the separator character. if (Pos(Separator, Text) > 0) or (Pos('"', Text) > 0) then Buffer.Add(AnsiQuotedStr(Text, '"')) else Buffer.Add(Text); Buffer.Add(Copy(Tabs, 1, Integer(MaxLevel - Level) * Length(Separator))); end else if (Pos(Separator, Text) > 0) or (Pos('"', Text) > 0) then Buffer.Add(AnsiQuotedStr(Text, '"')) else Buffer.Add(Text); if Columns[I] <> LastColumn then Buffer.Add(Separator); end; end; if Assigned(FOnAfterNodeExport) then FOnAfterNodeExport(Self, etText, Run); Run := GetNextNode(Run); Buffer.AddNewLine; end; end else begin while Assigned(Run) do begin if ((not CanExportNode(Run)) or (Assigned(FOnBeforeNodeExport) and (not FOnBeforeNodeExport(Self, etText, Run)))) then begin Run := GetNextNode(Run); Continue; end; // This line implicitly converts the Unicode text to ANSI. Text := Self.Text[Run, NoColumn]; Level := GetNodeLevel(Run); Buffer.Add(Copy(Tabs, 1, Integer(Level) * Length(Separator))); Buffer.Add(Text); Buffer.AddNewLine; if Assigned(FOnAfterNodeExport) then FonAfterNodeExport(Self, etText, Run); Run := GetNextNode(Run); end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToUTF16(Source: TVSTTextSourceType; const Separator: String): UnicodeString; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsUTF16String; Buffer.Destroy; end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.ContentToUTF8(Source: TVSTTextSourceType; const Separator: String): String; var Buffer: TBufferedUTF8String; begin Buffer := TBufferedUTF8String.Create; try AddContentToBuffer(Buffer, Source, Separator); finally Result := Buffer.AsUTF8String; Buffer.Destroy; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.GetTextInfo(Node: PVirtualNode; Column: TColumnIndex; const AFont: TFont; var R: TRect; out Text: String); // Returns the font, the text and its bounding rectangle to the caller. R is returned as the closest // bounding rectangle around Text. var NewHeight: Integer; TM: TTextMetric; begin // Get default font and initialize the other parameters. //inherited GetTextInfo(Node, Column, AFont, R, Text); Canvas.Font := AFont; FFontChanged := False; RedirectFontChangeEvent(Canvas); DoPaintText(Node, Canvas, Column, ttNormal); if FFontChanged then begin AFont.Assign(Canvas.Font); GetTextMetrics(Canvas.Handle, TM); NewHeight := TM.tmHeight; end else // Otherwise the correct font is already there and we only need to set the correct height. NewHeight := FTextHeight; RestoreFontChangeEvent(Canvas); // Alignment to the actual text. Text := Self.Text[Node, Column]; R := GetDisplayRect(Node, Column, True, not (vsMultiline in Node.States)); if toShowHorzGridLines in TreeOptions.PaintOptions then Dec(R.Bottom); InflateRect(R, 0, -(R.Bottom - R.Top - NewHeight) div 2); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.InvalidateNode(Node: PVirtualNode): TRect; var Data: PInteger; begin Result := inherited InvalidateNode(Node); // Reset node width so changed text attributes are applied correctly. if Assigned(Node) then begin Data := InternalData(Node); if Assigned(Data) then Data^ := 0; // Reset height measured flag too to cause a re-issue of the OnMeasureItem event. Exclude(Node.States, vsHeightMeasured); end; end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualStringTree.Path(Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; Delimiter: Char): String; // Constructs a string containing the node and all its parents. The last character in the returned path is always the // given delimiter. var S: String; begin if (Node = nil) or (Node = FRoot) then Result := Delimiter else begin Result := ''; while Node <> FRoot do begin DoGetText(Node, Column, TextType, S); Result := S + Delimiter + Result; Node := Node.Parent; end; end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualStringTree.ReinitNode(Node: PVirtualNode; Recursive: Boolean); var Data: PInteger; begin inherited; // Reset node width so changed text attributes are applied correctly. if Assigned(Node) and (Node <> FRoot) then begin Data := InternalData(Node); if Assigned(Data) then Data^ := 0; // vsHeightMeasured is already removed in the base tree. end; end; //----------------- TVirtualStringTree --------------------------------------------------------------------------------- function TVirtualStringTree.GetOptions: TStringTreeOptions; begin Result := FOptions as TStringTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualStringTree.SetOptions(const Value: TStringTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualStringTree.GetOptionsClass: TTreeOptionsClass; begin Result := TStringTreeOptions; end; //----------------- TCustomVirtualDrawTree ----------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoDrawHint(Canvas: TCanvas; Node: PVirtualNode; const R: TRect; Column: TColumnIndex); begin if Assigned(FOnDrawHint) then FOnDrawHint(Self, Canvas, Node, R, Column); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualDrawTree.DoGetCellContentMargin(Node: PVirtualNode; Column: TColumnIndex; CellContentMarginType: TVTCellContentMarginType = ccmtAllSides; Canvas: TCanvas = nil): TPoint; begin Result := Point(0, 0); if Canvas = nil then Canvas := Self.Canvas; if Assigned(FOnGetCellContentMargin) then FOnGetCellContentMargin(Self, Canvas, Node, Column, CellContentMarginType, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoGetHintSize(Node: PVirtualNode; Column: TColumnIndex; var R: TRect); begin if Assigned(FOnGetHintSize) then FOnGetHintSize(Self, Node, Column, R); end; //---------------------------------------------------------------------------------------------------------------------- function TCustomVirtualDrawTree.DoGetNodeWidth(Node: PVirtualNode; Column: TColumnIndex; Canvas: TCanvas = nil): Integer; begin Result := 2 * FTextMargin; if Canvas = nil then Canvas := Self.Canvas; if Assigned(FOnGetNodeWidth) then FOnGetNodeWidth(Self, Canvas, Node, Column, Result); end; //---------------------------------------------------------------------------------------------------------------------- procedure TCustomVirtualDrawTree.DoPaintNode(var PaintInfo: TVTPaintInfo); begin if Assigned(FOnDrawNode) then FOnDrawNode(Self, PaintInfo); end; //----------------- TVirtualDrawTree ----------------------------------------------------------------------------------- function TVirtualDrawTree.GetOptions: TVirtualTreeOptions; begin Result := FOptions as TVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVirtualDrawTree.SetOptions(const Value: TVirtualTreeOptions); begin FOptions.Assign(Value); end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualDrawTree.GetOptionsClass: TTreeOptionsClass; begin Result := TVirtualTreeOptions; end; //---------------------------------------------------------------------------------------------------------------------- initialization {$I virtualtrees.lrs} // Necessary for dynamic package loading. Initialized := False; NeedToUnitialize := False; finalization if Initialized then FinalizeGlobalStructures; InternalClipboardFormats.Free; InternalClipboardFormats := nil; {$ifdef EnableAccessible} if VTAccessibleFactory <> nil then begin VTAccessibleFactory.Free; VTAccessibleFactory := nil; end; {$endif} end. ���������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/ideicons.lrs���������������������������������������������0000644�0001750�0000144�00000006617�11727533326�022505� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('tvirtualdrawtree','XPM',[ '/* XPM */'#10'static char * tvirtualdrawtree_xpm[] = {'#10'"24 24 8 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c None",'#10'"@'#9'c #808000",'#10'"#'#9'c #20A' +'080",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0A000",'#10'"&'#9'c #C0C0C0",'#10 +'"*'#9'c #FFFFFF",'#10'"++++++..++++++++++++++++",'#10'"+++++.&&............' +'.+++",'#10'"++++.***&&&&&&&&&&$$@.++",'#10'"++++.************@$$$.++",'#10 +'"+++.************@$$$$.++",'#10'"++++...@********.$$$$.++",'#10'"+++++++...' +'......$$$$@+++",'#10'"+++++++.$$$$$$$$***$.+++",'#10'"+++++++.*******%***&.' +'+++",'#10'"+++++++.*.****%%%**$.+++",'#10'"+++++++.*...*%%%%%*.++++",'#10'"' +'+++++++.*.**%%%%%%%.++++",'#10'"++++++.**.***####**.++++",'#10'"+++++.$**.*' +'*######*.++++",'#10'"+++++.&**..*######*.++++",'#10'"+++++.******######*.++' +'++",'#10'"+++++.*******####**&.+++",'#10'"+...+.***.....******.+++",'#10'"+' +'.&&@....&&&&&.****$.+++",'#10'"+.&&&&&&&&&&&&&.**&.++++",'#10'"++.$&&&&&&&&' +'&&&.&&&.++++",'#10'"++.$$$$$$$$$$$$$.&.+++++",'#10'"+++...............+++++' +'+",'#10'"++++++++++++++++++++++++"};'#10 ]); LazarusResources.Add('tvirtualstringtree','XPM',[ '/* XPM */'#10'static char * tvirtualstringtree_xpm[] = {'#10'"24 24 8 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c None",'#10'"@'#9'c #808000",'#10'"#'#9'c #20A' +'080",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0A000",'#10'"&'#9'c #C0C0C0",'#10 +'"*'#9'c #FFFFFF",'#10'"++++++..++++++++++++++++",'#10'"+++++.&&............' +'.+++",'#10'"++++.***&&&&&&&&&&$$@.++",'#10'"++++.************@$$$.++",'#10 +'"+++.************@$$$$.++",'#10'"++++...@********.$$$$.++",'#10'"+++++++...' +'......$$$$@+++",'#10'"+++++++.$$$$$$$$***$.+++",'#10'"+++++++.***********&.' +'+++",'#10'"+++++++.*.**......*$.+++",'#10'"+++++++.*....%%%%.*.++++",'#10'"' +'+++++++.*.**......*.++++",'#10'"++++++.**.*********.++++",'#10'"+++++.$**.*' +'*......*.++++",'#10'"+++++.&**....####.*.++++",'#10'"+++++.******......*.++' +'++",'#10'"+++++.*************&.+++",'#10'"+...+.***.....******.+++",'#10'"+' +'.&&@....&&&&&.****$.+++",'#10'"+.&&&&&&&&&&&&&.**&.++++",'#10'"++.$&&&&&&&&' +'&&&.&&&.++++",'#10'"++.$$$$$$$$$$$$$.&.+++++",'#10'"+++...............+++++' +'+",'#10'"++++++++++++++++++++++++"};'#10 ]); LazarusResources.Add('tvtheaderpopupmenu','XPM',[ '/* XPM */'#10'static char * tvtheaderpopupmenu_xpm[] = {'#10'"24 24 7 1",'#10 +'".'#9'c #000000",'#10'"+'#9'c #000080",'#10'"@'#9'c None",'#10'"#'#9'c #808' +'000",'#10'"$'#9'c #808080",'#10'"%'#9'c #C0C0C0",'#10'"&'#9'c #FFFFFF",'#10 +'"@@@@@@..@@@@@@@@@@@@@@@@",'#10'"@@@@@.%%.............@@@",'#10'"@@@@.&&&%%' +'%%%%%%%%$$#.@@",'#10'"@@@@.&&&&&&&&&&&&#$$$.@@",'#10'"@@@.&&&&&&&&&&&&#$$$$' +'.@@",'#10'"@@@@...#&&&&&&&&.$$$$.@@",'#10'"@@@@@@@.........$$$$#@@@",'#10'"' +'@@@@@@@.$$$$$$$$&&&$.@@@",'#10'"@@@@@@@.$&&&&&&.&&&%.@@@",'#10'"@@@@@@@.$&+' +'++&&.&&&$.@@@",'#10'"@@@@@@@.$&&&&&&.&&&.@@@@",'#10'"@@@@@@@.$&+++++.&&&.@@' +'@@",'#10'"@@@@@@.&$+&&&+&+&&&.@@@@",'#10'"@@@@@.$&$&++++&&+&&.@@@@",'#10'"@' +'@@@@.%&$&&&&+&&&+&.@@@@",'#10'"@@@@@.&&$....+&&&&+.@@@@",'#10'"@@@@@.&&&&&&' +'&+&&&++++@@@",'#10'"@...@.&&&....+&&&&+&.@@@",'#10'"@.%%#....%%%%+&++&&+.@@' +'@",'#10'"@.%%%%%%%%%%%++$+&&+@@@@",'#10'"@@.$%%%%%%%%%+%.%+&&+@@@",'#10'"@@' +'.$$$$$$$$$$$$$.+&&+@@@",'#10'"@@@...............++@@@@",'#10'"@@@@@@@@@@@@@' +'@@@@@@@@@@@"};'#10 ]); �����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/virtualtreeview_package_doublecmd.lpk��������������������0000644�0001750�0000144�00000005171�11751527542�027622� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="virtualtreeview_package_doublecmd"/> <AddToProjectUsesSection Value="True"/> <Author Value="Mike Lischke (LCL Port: Luiz Américo)"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <IncludeFiles Value="include/intf/$(LCLWidgetType);units;include/intf"/> <OtherUnitFiles Value="units/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Virtual Treeview is an advanced component originally created for Delphi "/> <License Value=" Mozilla Public License 1.1 (MPL 1.1) or GNU Lesser General Public License "/> <Version Major="4" Minor="8" Release="7" Build="1"/> <Files Count="7"> <Item1> <Filename Value="virtualtrees.lrs"/> <Type Value="LRS"/> </Item1> <Item2> <Filename Value="VirtualTrees.pas"/> <UnitName Value="VirtualTrees"/> </Item2> <Item3> <Filename Value="VTHeaderPopup.pas"/> <UnitName Value="VTHeaderPopup"/> </Item3> <Item4> <Filename Value="registervirtualtreeview.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="registervirtualtreeview"/> </Item4> <Item5> <Filename Value="ideicons.lrs"/> <Type Value="LRS"/> </Item5> <Item6> <Filename Value="VTConfig.inc"/> <Type Value="Include"/> </Item6> <Item7> <Filename Value="VTGraphics.pas"/> <UnitName Value="VTGraphics"/> </Item7> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="lclextensions_package_doublecmd"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VTConfig.inc���������������������������������������������0000644�0001750�0000144�00000003346�12140233030�022307� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Configuration file for VirtualTrees.pas (see www.soft-gems.net). // // The content of this file is public domain. You may do with it whatever you like, provided the header stays fully intact // in all version and derivative work. // // The original code is VTConfig.inc, released October 5, 2004. // // The initial developer of the original code is Mike Lischke (public@soft-gems.net, www.soft-gems.net). //---------------------------------------------------------------------------------------------------------------------- {.$define UseFlatScrollbars} {.$define ReverseFullExpandHotKey} // Used to define Ctrl+'+' instead of Ctrl+Shift+'+' for full expand (and similar for collapsing). // Enable this switch for Windows XP theme support. If you compile with Delphi 6 or lower you must download and install // the Soft Gems Theme Manager package. {.$define ThemeSupport} // Virtual Treeview can use a tiny but very effective local memory manager for node allocation. // The local memory manager was implemented by David Clark from Caelo Software Inc. // See below for more info about it. {.$define UseLocalMemoryManager} //Lazarus port options {.$define EnableOLE} {.$define EnableNativeTVM} {.$define EnablePrint} {.$define EnableNCFunctions} {$define EnableAdvancedGraphics} {$define EnableAlphaBlend} {.$define EnableAccessible} {$define ThemeSupport} {$if defined(LCLWin32) or defined(LCLWinCE)} {$define LCLWin} {$endif} {.$define DEBUG_VTV} {$define USE_DELPHICOMPAT} //since {$if not defined(USE_DELPHICOMPAT) and not defined(LCLWin)} {$define INCOMPLETE_WINAPI} {$endif} //under linux the performance is poor with threading enabled {$ifdef Windows} {.$define EnableThreadSupport} {$endif} {$ifdef CPU64} {$define PACKARRAYPASCAL} {$endif} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/vtlogger.pas���������������������������������������������0000644�0001750�0000144�00000003356�12014201074�022477� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit vtlogger; {$mode objfpc}{$H+} interface uses multiloglcl, multilog; const //lc stands for LogClass //it's possible to define the constants to suit any need lcAll = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]; lcDebug = 0; lcError = 1; lcInfo = 2; lcWarning = 3; lcEvents = 4; lcPaint = 5; lcPaintHeader = 6; lcDummyFunctions = 7; lcMessages = 8; lcPaintSelection = 9; lcSetCursor = 10;//it generates a lot of messages. so it will be debugged alone lcPaintBitmap = 11; lcScroll = 12; lcPaintDetails = 13; lcCheck = 14; lcEditLink = 15; lcEraseBkgnd = 16; lcColumnPosition = 17; lcTimer = 18; lcDrag = 19; lcOle = 20; lcPanning = 21; lcHeaderOffset = 22; lcSelection = 23; lcAlphaBlend = 24; lcHint = 25; lcMouseEvent = 26; var Logger: TLCLLogger; function GetSelectedNodes(Sender: TLogger; Data: Pointer; var DoSend: Boolean): String; implementation uses VirtualTrees, sysutils; type TNodeData = record Title: String; end; PNodeData = ^TNodeData; function GetSelectedNodes(Sender: TLogger; Data: Pointer; var DoSend: Boolean): String; var i: Integer; TempNode: PVirtualNode; begin with TBaseVirtualTree(Data) do begin Result:='SelectedCount: '+IntToStr(SelectedCount)+LineEnding; TempNode:=GetFirstSelected; if TempNode = nil then exit; Result:=Result+PNodeData(GetNodeData(TempNode))^.Title+LineEnding; for i:= 1 to SelectedCount -1 do begin TempNode:=GetNextSelected(TempNode); Result:=Result+PNodeData(GetNodeData(TempNode))^.Title+LineEnding; end; end; end; initialization Logger:=TLCLLogger.Create; finalization Logger.Free; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/virtualtrees.lrs�����������������������������������������0000644�0001750�0000144�00000505021�11727533326�023432� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('VT_VERTSPLIT','CUR',[ #0#0#2#0#1#0' '#2#0#14#0#15#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#2#0#0#0#2#0#0#0#0#0#0#0#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#6#0#0#0#9#0#0#0#16#128#0#0 +' @'#0#0#25#128#0#0#9#0#0#0#9#0#0#7#249#254#0#4#0#2#0#4#0#2#0#7#249#254#0#0#9 +#0#0#0#9#0#0#0#25#128#0#0' @'#0#0#16#128#0#0#9#0#0#0#6#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#249 +#255#255#255#240#255#255#255#224#127#255#255#192'?'#255#255#224#127#255#255 +#240#255#255#255#240#255#255#248#0#1#255#248#0#1#255#248#0#1#255#248#0#1#255 +#255#240#255#255#255#240#255#255#255#224#127#255#255#192'?'#255#255#224#127 +#255#255#240#255#255#255#249#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255 ]); LazarusResources.Add('VT_HEADERSPLIT','CUR',[ #0#0#2#0#1#0' '#0#0#15#0#14#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#7 +#128#0#0#4#128#0#0#4#128#0#0#4#128#0#0#4#128#0#0'D'#136#0#0#164#148#0#1'<' +#242#0#2#0#1#0#2#0#1#0#1'<'#242#0#0#164#148#0#0'D'#136#0#0#4#128#0#0#4#128#0 +#0#4#128#0#0#4#128#0#0#7#128#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#248#127 +#255#255#248#127#255#255#248#127#255#255#248#127#255#255#248#127#255#255#184 +'w'#255#255#24'c'#255#254#0#1#255#252#0#0#255#252#0#0#255#254#0#1#255#255#24 +'c'#255#255#184'w'#255#255#248#127#255#255#248#127#255#255#248#127#255#255 +#248#127#255#255#248#127#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEALL','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0'0'#1#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#1#0#0#0#0#0#0#1#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#1#128#0#0#2'@'#0#0#4' '#0#0#8#16#0#0#16#8 +#0#0' '#4#0#0#127#254#0#0#160#5#0#1' '#4#128#2'!'#132'@'#4'"D '#8'$$'#16#8'$' +'$'#16#4'"D '#2'!'#132'@'#1' '#4#128#0#160#5#0#0#127#254#0#0' '#4#0#0#16#8#0 +#0#8#16#0#0#4' '#0#0#2'@'#0#0#1#128#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254#127#255#255 +#252'?'#255#255#248#31#255#255#240#15#255#255#224#7#255#255#192#3#255#255#128 +#1#255#255#31#248#255#254#31#248#127#252#30'x?'#248#28'8'#31#240#24#24#15#240 +#24#24#15#248#28'8'#31#252#30'x?'#254#31#248#127#255#31#248#255#255#128#1#255 +#255#192#3#255#255#224#7#255#255#240#15#255#255#248#31#255#255#252'?'#255#255 +#254#127#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#15#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#240#0#0#0#0#0#0#0#0#0#0#15#240 +#0#15#0#15#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#0#240#0#0#0#0#0#0#0#0#15#0#0#240 +#15#0#0#15#0#0#0#0#0#0#0#0#15#0#0#240#15#0#0#15#0#0#0#0#0#0#0#0#0#240#15#0#15 +#0#0#240#0#0#0#0#0#0#0#0#0#15#240#0#15#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#0#15#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#251#255#255#255#249#255#255#255#248#255#255#255#248#127 +#255#254'x?'#255#252'8'#31#255#248#24#15#255#248#24#15#255#252'8'#31#255#254 +'x?'#255#255#248#127#255#255#248#255#255#255#249#255#255#255#251#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEEW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#15#240#0#0#0#0#0#0#0#0 +#240#240#0#0#0#0#15#15#0#0#0#0#0#0#0#15#0#240#0#0#0#0#15#0#240#0#0#0#0#0#0 +#240#0#240#0#15#240#0#15#0#15#0#0#0#0#0#15#0#0#240#0#240#15#0#15#0#0#240#0#0 +#0#0#240#0#0#240#15#0#0#240#15#0#0#15#0#0#0#0#240#0#0#240#15#0#0#240#15#0#0 +#15#0#0#0#0#15#0#0#240#0#240#15#0#15#0#0#240#0#0#0#0#0#240#0#240#0#15#240#0 +#15#0#15#0#0#0#0#0#0#15#0#240#0#0#0#0#15#0#240#0#0#0#0#0#0#0#240#240#0#0#0#0 +#15#15#0#0#0#0#0#0#0#0#15#240#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#223#251 +#255#255#159#249#255#255#31#248#255#254#31#248#127#252#30'x?'#248#28'8'#31 +#240#24#24#15#240#24#24#15#248#28'8'#31#252#30'x?'#254#31#248#127#255#31#248 +#255#255#159#249#255#255#223#251#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEN','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#255#255#255#255#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#240#0#0#0#0#0#0#0#0#0 +#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#240 +#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#127#255#255#252'?'#255#255#248#31#255#255#248#31#255#255#252'?' +#255#255#254#127#255#255#255#255#255#255#0#0#255#255#128#1#255#255#192#3#255 +#255#224#7#255#255#240#15#255#255#248#31#255#255#252'?'#255#255#254#127#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVENE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#240#15#0#0#0#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#15#240#0#0 +#0#0#0#0#0#0#0#15#0#0#240#0#240#240#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#240#0#0 +#0#0#0#0#0#0#0#0#15#240#0#240#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0 +#0#0#0#0#0#0#0#0#0#240#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0 +#0#0#0#0#0#240#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0 +#0#255#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#254#127#255#255#252'?'#127#255#248#30#127#255#248#28#127#255#252 +'8'#127#255#254'p'#127#255#255#224#127#255#255#192#127#255#255#128#127#255 +#255#0#127#255#254#0#127#255#252#0#127#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVENS','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240 +#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#255#255#255#255#255 +#255#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0 +#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#255#255#255#255 +#255#255#240#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0 +#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#254#127#255#255#252'?'#255 +#255#248#31#255#255#240#15#255#255#224#7#255#255#192#3#255#255#128#1#255#255 +#255#255#255#255#255#255#255#255#254#127#255#255#252'?'#255#255#248#31#255 +#255#248#31#255#255#252'?'#255#255#254#127#255#255#255#255#255#255#255#255 +#255#255#128#1#255#255#192#3#255#255#224#7#255#255#240#15#255#255#248#31#255 +#255#252'?'#255#255#254#127#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVENW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0 +#0#0#0#0#0#15#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#15#240#0#15#0#0#240#0#0#0#0#0 +#0#0#0#0#15#15#0#15#0#0#240#0#0#0#0#0#0#0#0#0#15#0#240#0#240#15#0#0#0#0#0#0#0 +#0#0#0#15#0#15#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0 +#0#15#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0 +#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#255#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#127#255#254#252'?'#255#254'x'#31#255#254'8'#31#255#254#28'?'#255 +#254#14#127#255#254#7#255#255#254#3#255#255#254#1#255#255#254#0#255#255#254#0 +#127#255#254#0'?'#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVES','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240 +#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#15#0#0#0#0#0#0#0#0#0#15#0#0#0#0#0#0#240#0#0 +#0#0#0#0#0#0#255#255#255#255#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#15#0#0#0#0#0#0 +#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0 +#0#0#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#254#127#255#255#252'?'#255#255#248#31#255#255#240#15#255 +#255#224#7#255#255#192#3#255#255#128#1#255#255#0#0#255#255#255#255#255#255 +#254#127#255#255#252'?'#255#255#248#31#255#255#248#31#255#255#252'?'#255#255 +#254#127#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVESE','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#240#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0 +#240#0#0#0#0#0#0#0#0#0#0#0#240#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0 +#0#0#0#0#0#0#0#0#0#0#0#240#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0 +#0#0#0#0#0#0#15#240#0#240#0#240#0#0#0#0#0#0#0#0#0#0#240#15#0#15#0#240#0#0#0#0 +#0#0#0#0#0#15#0#0#240#0#240#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#15#240#0#0#0#0 +#0#0#0#0#0#0#240#15#0#0#0#240#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#252 +#0#127#255#254#0#127#255#255#0#127#255#255#128#127#255#255#192#127#255#255 +#224#127#255#254'p'#127#255#252'8'#127#255#248#28#127#255#248#30#127#255#252 +'?'#127#255#254#127#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255 ]); LazarusResources.Add('VT_MOVESW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#15#255#255#255#255#255#0#0#0#0#0#0#0#0#0#0#15#0#0#0#0#240#0#0#0 +#0#0#0#0#0#0#0#15#0#0#0#15#0#0#0#0#0#0#0#0#0#0#0#15#0#0#0#240#0#0#0#0#0#0#0#0 +#0#0#0#15#0#0#15#0#0#0#0#0#0#0#0#0#0#0#0#15#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0 +#15#0#15#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#240#0#240#15#0#0#0#0#0#0#0#0#0#0 +#15#15#0#15#0#0#240#0#0#0#0#0#0#0#0#0#15#240#0#15#0#0#240#0#0#0#0#0#0#0#0#0 +#15#0#0#0#240#15#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254#0'?'#255#254 +#0#127#255#254#0#255#255#254#1#255#255#254#3#255#255#254#7#255#255#254#14#127 +#255#254#28'?'#255#254'8'#31#255#254'x'#31#255#254#252'?'#255#255#254#127#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_MOVEW','CUR',[ #0#0#2#0#1#0' '#0#0#16#0#16#0#232#2#0#0#22#0#0#0'('#0#0#0' '#0#0#0'@'#0#0#0#1 +#0#4#0#0#0#0#0#128#2#0#0#0#0#0#0#0#0#0#0#16#0#0#0#0#0#0#0#0#0#0#0#0#0#128#0#0 +#128#0#0#0#128#128#0#128#0#0#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240 +#240#0#0#0#0#0#0#0#0#0#0#0#0#0#15#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#240#0#240#0 +#15#240#0#0#0#0#0#0#0#0#0#15#0#0#240#0#240#15#0#0#0#0#0#0#0#0#0#240#0#0#240 +#15#0#0#240#0#0#0#0#0#0#0#0#240#0#0#240#15#0#0#240#0#0#0#0#0#0#0#0#15#0#0#240 +#0#240#15#0#0#0#0#0#0#0#0#0#0#240#0#240#0#15#240#0#0#0#0#0#0#0#0#0#0#15#0#240 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#240#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#15#240#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#240#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#223#255#255#255#159#255#255#255#31#255#255#254 +#31#255#255#252#30#127#255#248#28'?'#255#240#24#31#255#240#24#31#255#248#28 +'?'#255#252#30#127#255#254#31#255#255#255#31#255#255#255#159#255#255#255#223 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 ]); LazarusResources.Add('VT_XPBUTTONPLUS','BMP',[ 'BM4'#1#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#9#0#0#0#9#0#0#0#1#0#24#0#0#0#0#0#0#0#0#0 +#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#211#194#176#181#152'x'#181#152'x'#181 +#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#181#152'x' +#191#204#210#174#190#198#168#184#194#167#184#193#167#184#193#166#183#192#170 +#186#195#181#152'x'#0#181#152'x'#217#225#228#207#216#220#201#211#216#0#0#0 +#198#209#214#192#204#210#187#200#207#181#152'x'#0#181#152'x'#238#242#242#236 +#240#240#231#237#237#0#0#0#227#233#234#217#224#227#204#214#219#181#152'x'#0 +#181#152'x'#241#245#245#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#210#219#223#181#152'x' +#0#181#152'x'#245#247#247#245#247#247#244#247#247#0#0#0#244#246#246#235#240 +#241#218#225#229#181#152'x'#0#181#152'x'#251#252#252#251#253#253#251#253#253 +#0#0#0#251#252#252#250#252#252#243#246#247#181#152'x'#0#181#152'x'#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#181#152'x'#0#211#194#176#181#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152 +'x'#181#152'x'#181#152'x'#211#194#176#0#0#0 ]); LazarusResources.Add('VT_XPBUTTONMINUS','BMP',[ 'BM4'#1#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#9#0#0#0#9#0#0#0#1#0#24#0#0#0#0#0#0#0#0#0 +#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#211#194#176#181#152'x'#181#152'x'#181 +#152'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#181#152'x' +#191#204#210#174#190#198#168#184#194#167#184#193#167#184#193#166#183#192#170 +#186#195#181#152'x'#0#181#152'x'#217#225#228#207#216#220#201#211#216#199#210 +#215#198#209#214#192#204#210#187#200#207#181#152'x'#0#181#152'x'#238#242#242 +#236#240#240#231#237#237#230#235#236#227#233#234#217#224#227#204#214#219#181 +#152'x'#0#181#152'x'#241#245#245#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#210#219#223 +#181#152'x'#0#181#152'x'#245#247#247#245#247#247#244#247#247#244#247#247#244 +#246#246#235#240#241#218#225#229#181#152'x'#0#181#152'x'#251#252#252#251#253 +#253#251#253#253#251#253#253#251#252#252#250#252#252#243#246#247#181#152'x'#0 +#181#152'x'#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#181#152'x'#0#211#194#176#181#152'x'#181#152'x'#181#152 +'x'#181#152'x'#181#152'x'#181#152'x'#181#152'x'#211#194#176#0#0#0 ]); LazarusResources.Add('VT_CHECK_LIGHT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""332"""""332"""""332"""""332""' +'"""332"""""332"""""332"""""332"""#33332""#33332""#33332""#33332""#33332""#3' +'3332""#33332""#33332""#33332""#33332""#33332""#33332"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""3'#17#17#19'""""3'#17#17#19'""""3333"""' +'"3333""""3'#17#17#19'""""3'#17#17#19'""""3333""""3333"""4'#17#17#17#17#19'"' +'"4'#17#17#17#17#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19 +'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!3' +'33333B!333333B$333333'#18'!333333B"""""""""#A'#17#17#17'2""#A'#17#17#17'2""' +'#C3332""#C3332""#A'#19'3'#17'2""#A'#19'3'#17'2""#C3332""#C3332""4'#17#17#17 +#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'A'#17'D'#19'""4'#20'A'#17 +'D'#19'""44C3D3""44C3D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333' +'333B!333333B$333333'#18'!333333B"""""""""$'#17#17#17#17#19'""$'#17#17#17#17 +#19'""$33333""$33333""$'#17'DDA'#19'""$'#17'DDA'#19'""$3DDC3""$3DDC3""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'D'#20'D'#19'""4'#20 +'D'#20'D'#19'""44D4D3""44D4D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD' +'3"!333333B!333333B$333'#3'33'#18'!333333B"""""""""4'#17#17#17#17#19'""4'#17 +#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC' +'3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44D' +'DD3"!330333B!330333B$330'#0'33'#18'!334333B"""""""""4'#17#17#17#17#19'""4' +#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43' +'DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17#20'D'#17 +#19'""4'#17#20'D'#17#19'""434D33""434D33""4'#20'DDD'#19'""4'#20'DDD'#19'""44' +'DDD3""44DDD3"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33DC33B"""""""""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC' +#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17'DDA'#19'""4'#17'DDA'#19'""43DDC3""43DDC3""4'#20'DDD'#19'""4'#20'DDD' +#19'""44DDD3""44DDD3"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B""""""' +'"""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433' +'333""433333""4'#20'D'#20'D'#19'""4'#20'D'#20'D'#19'""44D4D3""44D4D3""4'#20 +'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$33333' +'3'#18'!3DDDC3B"""""""""$1'#17#17#17'2""$1'#17#17#17'2""$33332""$33332""$1' +#19'3'#17'2""$1'#19'3'#17'2""$33332""$33332""4'#17#17#17#17#19'""4'#17#17#17 +#17#19'""433333""433333""4'#20'A'#17'D'#19'""4'#20'A'#17'D'#19'""44C3D3""44C' +'3D3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333333B!333333B$333333' +#18'!333333B"""""""""#C'#17#17#20'2""#C'#17#17#20'2""#C3342""#C3342""#C'#17 +#17#20'2""#C'#17#17#20'2""#C3342""#C3342""4'#17#17#17#17#19'""4'#17#17#17#17 +#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!333333B!333333B$3' +'33333'#18'!333333B""""""""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC"""' +'"4DDC""""4DDC"""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DD' +'DDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC"!333333B!333333B$333333'#18'!333333B"""' +'""""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""#3333' +'2""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""' +'#33332""#33332"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17 +#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_CHECK_DARK','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""DDB"""""DDB"""""DDB"""""DDB""' +'"""DDB"""""DDB"""""DDB"""""DDB"""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$D' +'DDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""D'#17#17#20'""""D'#17#17#20'""""D334"""' +'"D334""""D'#17#17#20'""""D'#17#17#20'""""D334""""D334"""@'#17#17#17#17#20'"' +'"@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20 +'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!3' +'33333B!333333B$333333'#18'!333333B"""""""""$'#1#17#17#17'B""$'#1#17#17#17'B' +'""$'#3'333B""$'#3'333B""$'#1#20'D'#17'B""$'#1#20'D'#17'B""$'#3'4D3B""$'#3'4' +'D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#16#1#17#0#20 +'""@'#16#1#17#0#20'""@0'#3'3'#0'4""@0'#3'3'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0 +#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18'!333333B""""""""" '#17 +#17#17#17#20'"" '#17#17#17#17#20'"" 33334"" 33334"" '#17#0#0#1#20'"" '#17#0#0 +#1#20'"" 3'#0#0#3'4"" 3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3' +'3334""@33334""@'#16#0#16#0#20'""@'#16#0#16#0#20'""@0'#0'0'#0'4""@0'#0'0'#0 +'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$3' +'33'#3'33'#18'!333333B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3333' +'4""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17 +#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0 +#1#20'""@3'#0#0#3'4""@3'#0#0#3'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0 +'4""@4DDD4"!330333B!330333B$330'#0'33'#18'!334333B"""""""""@'#17#17#17#17#20 +'""@'#17#17#17#17#20'""@33334""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4' +#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@3333' +'4""@'#17#16#0#17#20'""@'#17#16#0#17#20'""@30'#0'34""@30'#0'34""@'#16#0#0#0 +#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3 +'3'#18'!33DC33B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@333' +'34""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17 +#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20 +'""@3'#0#0#3'4""@3'#0#0#3'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""' +'@4DDD4"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B"""""""""@'#17#17#17 +#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20 +'""@3'#0#0#3'4""@3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334"' +'"@33334""@'#16#0#16#0#20'""@'#16#0#16#0#20'""@0'#0'0'#0'4""@0'#0'0'#0'4""@' +#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!3'#0#0#0#3'3B!3'#0#0#0#3 +'3B$333333'#18'!3DDDC3B""""""""" A'#17#17#17'B"" A'#17#17#17'B"" C333B"" C33' +'3B"" A'#20'D'#17'B"" A'#20'D'#17'B"" C4D3B"" C4D3B""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#16#1#17#0#20'""@'#16#1#17#0#20'""@0'#3 +'3'#0'4""@0'#3'3'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4' +'"!333333B!333333B$333333'#18'!333333B"""""""""$'#4#17#17#16'B""$'#4#17#17#16 +'B""$'#4'330B""$'#4'330B""$'#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4 +'330B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17 +#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17 +#20'""@33334""@33334"!333333B!333333B$333333'#18'!333333B""""""""""@'#0#0#4 +'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0 +#4'""""@'#0#0#4'"""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'"!333333B!333333B$333333'#18'!' +'333333B"""""""""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""""D' +'D""""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB' +'""$DDDDB""$DDDDB""$DDDDB"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$D' +'DDDDDB!'#17#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' ,'"""""""""""""""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_FLAT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""'#0#0'""""""'#0#0'""""""'#0#0 +'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""" '#0#0#0#0#0 +#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0 +#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0 +#0#0#0#0#0'" '#0#0#0#0#0#0'""'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0 +#2'"'#0#0#0#0#0#0#2'""""""""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0 +#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'"" '#0#0#0#0#0#0 +'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0 +#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0 +#0#0#0#0'" '#0#0#0#0#0#0'""'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'"'#0'33333'#2'"' +#0#0#0#0#0#0#2'""""""""" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0 +'33'#0#2'"" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2'" ' +#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17#17#17#0 +'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'""'#0#17#17#17#17#16#2'"'#0 +#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'33330'#2'""""""""" '#1#17#17#16 +#2'"" '#1#17#17#16#2'"" '#3'330'#2'"" '#3'330'#2'"" '#1#17#17#16#2'"" '#1#17 +#17#16#2'"" '#3'330'#2'"" '#3'330'#2'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0 +'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#1#17#17#0'" '#1#17#1#17#17#0'" '#3'3'#3 +'33'#0'" '#3'3'#3'33'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3 +'DDDC'#0'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2 +'"'#0'33330'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0 +'""'#0'3333'#0'""'#0#17#16#1#17#0'""'#0#17#16#1#17#0'""'#0'30'#3'3'#0'""'#0 +'30'#3'3'#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333' +#0'" '#1#16#0#17#17#0'" '#1#16#0#17#17#0'" '#3'0'#0'33'#0'" '#3'0'#0'33'#0'"' +' '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#17#1 +#17#16#2'"'#0#17#17#1#17#16#2'"'#0#17#17#1#17#19#2'"'#0'33'#3'30'#2'""""""""' +'"'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0'""'#0'3333'#0'""'#0#17 +#0#0#17#0'""'#0#17#0#0#17#0'""'#0'3'#0#0'3'#0'""'#0'3'#0#0'3'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#0#0#1#17#0'" ' +#1#0#0#1#17#0'" '#3#0#0#3'3'#0'" '#3#0#0#3'3'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1 +#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#16#0#17#16#2'"'#0#17#16#0#17#16#2 +'"'#0#17#16#0#17#19#2'"'#0'30'#0'30'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17 +#17#17#0'""'#0'3333'#0'""'#0'3333'#0'""'#0#17#0#0#17#0'""'#0#17#0#0#17#0'""' +#0'3'#0#0'3'#0'""'#0'3'#0#0'3'#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" ' +#3'3333'#0'" '#3'3333'#0'" '#1#0#16#0#17#0'" '#1#0#16#0#17#0'" '#3#0'0'#0'3' +#0'" '#3#0'0'#0'3'#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'D' +'DDC'#0'""'#0#17#0#0#1#16#2'"'#0#17#0#0#1#16#2'"'#0#17#0#0#1#19#2'"'#0'3'#0#0 +#3'0'#2'"""""""""'#0#17#17#17#17#0'""'#0#17#17#17#17#0'""'#0'3333'#0'""'#0'3' +'333'#0'""'#0#17#16#1#17#0'""'#0#17#16#1#17#0'""'#0'30'#3'3'#0'""'#0'30'#3'3' +#0'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1 +#1#17#0#1#0'" '#1#1#17#0#1#0'" '#3#3'3'#0#3#0'" '#3#3'3'#0#3#0'" '#1#0#0#0#1 +#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#16#0#0#0#16#2'"'#0#16 +#0#0#0#16#2'"'#0#16#0#0#0#19#2'"'#0'0'#0#0#0'0'#2'""""""""" '#1#17#17#16#2'"' +'" '#1#17#17#16#2'"" '#3'330'#2'"" '#3'330'#2'"" '#1#17#17#16#2'"" '#1#17#17 +#16#2'"" '#3'330'#2'"" '#3'330'#2'" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" ' +#3'3333'#0'" '#3'3333'#0'" '#1#17#17#16#1#0'" '#1#17#17#16#1#0'" '#3'330'#3#0 +'" '#3'330'#3#0'" '#1#0#0#0#1#0'" '#1#0#0#0#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0 +'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'333' +'30'#2'""""""""" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2 +'"" '#0#17#17#0#2'"" '#0#17#17#0#2'"" '#0'33'#0#2'"" '#0'33'#0#2'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17#17#1#0 +'" '#1#17#17#17#1#0'" '#3'333'#3#0'" '#3'333'#3#0'" '#1#0#0#0#1#0'" '#1#0#0#0 +#1#0'" '#3#0#0#0#3#0'" '#3'DDDC'#0'""'#0#17#17#17#17#16#2'"'#0#17#17#17#17#16 +#2'"'#0#17#17#17#17#19#2'"'#0'33330'#2'""""""""""'#0#0#0#0'""""'#0#0#0#0'"""' ,'"'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0#0#0'""""'#0#0 +#0#0'"" '#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" ' +#1#17#17#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'" '#1#17#17 +#17#17#0'" '#1#17#17#17#17#0'" '#3'3333'#0'" '#3'3333'#0'""'#0#17#17#17#17#16 +#2'"'#0#17#17#17#17#16#2'"'#0#17#17#17#17#19#2'"'#0'33330'#2'"""""""""""'#0#0 +'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'""""""'#0#0'"""' +'"""'#0#0'""" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0 +'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0 +#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'""'#0#0#0#0#0#0#2'"'#0#0 +#0#0#0#0#2'"'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'"""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" ' +#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0 +'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0#0#0'" '#0#0#0#0 +#0#0'""'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'"'#0#0#0#0#0#0#2'""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_TICK_DARK','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""DDB"""""DDB"""""DDB"""""DDB""' +'"""DDB"""""DDB"""""DDB"""""DDB"""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$D' +'DDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""D'#17#17#20'""""D'#17#17#20'""""D334"""' +'"D334""""D'#17#17#20'""""D'#17#17#20'""""D334""""D334"""@'#17#17#17#17#20'"' +'"@'#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20 +'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!3' +'33333B!333333B$333333'#18'!333333B"""""""""$'#1#17#17#17'B""$'#1#17#17#17'B' +'""$'#3'333B""$'#3'333B""$'#1#20'D'#17'B""$'#1#20'D'#17'B""$'#3'4D3B""$'#3'4' +'D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17#16#17#17 +#20'""@'#17#16#17#17#20'""@30334""@30334""@'#16#0#0#0#20'""@'#16#0#0#0#20'""' +'@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18'!333333B""""""""" '#17#17#17 +#17#20'"" '#17#17#17#17#20'"" 33334"" 33334"" '#17#0#0#1#20'"" '#17#0#0#1#20 +'"" 3'#0#0#3'4"" 3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334"' +'"@33334""@'#17#0#1#17#20'""@'#17#0#1#17#20'""@3'#0#3'34""@3'#0#3'34""@'#16#0 +#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333'#3'33'#18 +'!333333B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@' +#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20 +'""@'#17#17#17#17#20'""@33334""@33334""@'#16#0#0#17#20'""@'#16#0#0#17#20'""@' +'0'#0#0'34""@0'#0#0'34""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD' +'4"!330333B!330333B$330'#0'33'#18'!334333B"""""""""@'#17#17#17#17#20'""@'#17 +#17#17#17#20'""@33334""@33334""@'#20#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4' +'""@4'#0#0#4'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#16 +#1#0#1#20'""@'#16#1#0#1#20'""@0'#3#0#3'4""@0'#3#0#3'4""@'#16#0#0#0#20'""@'#16 +#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33' +'DC33B"""""""""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#20 +#0#0#4#20'""@'#20#0#0#4#20'""@4'#0#0#4'4""@4'#0#0#4'4""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#17#17#16#0#20'""@'#17#17#16#0#20'""@330' +#0'4""@330'#0'4""@'#16#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!30'#0 +#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B"""""""""@'#17#17#17#17#20'""@'#17 +#17#17#17#20'""@33334""@33334""@'#17#0#0#1#20'""@'#17#0#0#1#20'""@3'#0#0#3'4' +'""@3'#0#0#3'4""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334""@'#17 +#17#17#0#20'""@'#17#17#17#0#20'""@333'#0'4""@333'#0'4""@'#16#0#0#0#20'""@'#16 +#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$333333'#18'!3DD' +'DC3B""""""""" A'#17#17#17'B"" A'#17#17#17'B"" C333B"" C333B"" A'#20'D'#17'B' +'"" A'#20'D'#17'B"" C4D3B"" C4D3B""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@' +'33334""@33334""@'#17#17#17#16#20'""@'#17#17#17#16#20'""@33304""@33304""@'#16 +#0#0#0#20'""@'#16#0#0#0#20'""@0'#0#0#0'4""@4DDD4"!333333B!333333B$333333'#18 +'!333333B"""""""""$'#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4'330B""$' +#4#17#17#16'B""$'#4#17#17#16'B""$'#4'330B""$'#4'330B""@'#17#17#17#17#20'""@' +#17#17#17#17#20'""@33334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@3' +'3334""@33334""@'#17#17#17#17#20'""@'#17#17#17#17#20'""@33334""@33334"!33333' +'3B!333333B$333333'#18'!333333B""""""""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4 +'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'""""@'#0#0#4'"""@'#0#0#0 +#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0 +#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4'""@'#0#0#0#0#4 +'""@'#0#0#0#0#4'"!333333B!333333B$333333'#18'!333333B"""""""""""DD""""""DD""' +'""""DD""""""DD""""""DD""""""DD""""""DD""""""DD""""$DDDDB""$DDDDB""$DDDDB""$' +'DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB""$DDDDB"!'#17 +#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17#17#17#17#17#17#18'"' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' ,'""""""""""""""""""""""""' ]); LazarusResources.Add('VT_TICK_LIGHT','BMP',[ 'BM'#246#12#0#0#0#0#0#0'v'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#4#0#0#0#0#0 +#128#12#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#0#255#0#255#0 +#192#192#192#0#128#128#128#0#128#0#128#0#128#128#0#0#192#192#192#0#128#128 +#128#0#0#0#255#0#0#255#0#0#0#255#255#0#255#0#0#0#255#0#255#0#255#255#0#0#255 +#255#255#0'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'""""""""""""""""""""""""""""""""""""""""""""""332"""""332"""""332"""""332""' +'"""332"""""332"""""332"""""332"""#33332""#33332""#33332""#33332""#33332""#3' +'3332""#33332""#33332""#33332""#33332""#33332""#33332"!DDDDDDB!DDDDDDB$'#17 +#17#17#17#17#17#18'!DDDDDDB""""""""""3'#17#17#19'""""3'#17#17#19'""""3333"""' +'"3333""""3'#17#17#19'""""3'#17#17#19'""""3333""""3333"""4'#17#17#17#17#19'"' +'"4'#17#17#17#17#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19 +'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!3' +'33333B!333333B$333333'#18'!333333B"""""""""#A'#17#17#17'2""#A'#17#17#17'2""' +'#C3332""#C3332""#A'#19'3'#17'2""#A'#19'3'#17'2""#C3332""#C3332""4'#17#17#17 +#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17#20#17#17#19'""4'#17#20#17 +#17#19'""434333""434333""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333' +'333B!333333B$333333'#18'!333333B"""""""""$'#17#17#17#17#19'""$'#17#17#17#17 +#19'""$33333""$33333""$'#17'DDA'#19'""$'#17'DDA'#19'""$3DDC3""$3DDC3""4'#17 +#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DA'#17#19'""4'#17'D' +'A'#17#19'""43DC33""43DC33""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!' +'333333B!333333B$333'#3'33'#18'!333333B"""""""""4'#17#17#17#17#19'""4'#17#17 +#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC3""' +'4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'DD'#17#19'""4' +#20'DD'#17#19'""44DD33""44DD33""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DD' +'D3"!330333B!330333B$330'#0'33'#18'!334333B"""""""""4'#17#17#17#17#19'""4'#17 +#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43DDC3""43DDC' +'3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#20'ADA'#19'""' +'4'#20'ADA'#19'""44CDC3""44CDC3""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44D' +'DD3"!33'#0#3'33B!33'#0#3'33B$33'#0#0#3'3'#18'!33DC33B"""""""""4'#17#17#17#17 +#19'""4'#17#17#17#17#19'""433333""433333""4'#19'DDC'#19'""4'#19'DDC'#19'""43' +'DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17 +#17#20'D'#19'""4'#17#17#20'D'#19'""4334D3""4334D3""4'#20'DDD'#19'""4'#20'DDD' +#19'""44DDD3""44DDD3"!30'#0#0'33B!30'#0#0'33B$30'#0#0#0'3'#18'!34DD33B""""""' +'"""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333""4'#17'DDA'#19'""' +'4'#17'DDA'#19'""43DDC3""43DDC3""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433' +'333""433333""4'#17#17#17'D'#19'""4'#17#17#17'D'#19'""4333D3""4333D3""4'#20 +'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!3'#0#0#0#3'3B!3'#0#0#0#3'3B$33333' +'3'#18'!3DDDC3B"""""""""$1'#17#17#17'2""$1'#17#17#17'2""$33332""$33332""$1' +#19'3'#17'2""$1'#19'3'#17'2""$33332""$33332""4'#17#17#17#17#19'""4'#17#17#17 +#17#19'""433333""433333""4'#17#17#17#20#19'""4'#17#17#17#20#19'""433343""433' +'343""4'#20'DDD'#19'""4'#20'DDD'#19'""44DDD3""44DDD3"!333333B!333333B$333333' +#18'!333333B"""""""""#C'#17#17#20'2""#C'#17#17#20'2""#C3342""#C3342""#C'#17 +#17#20'2""#C'#17#17#20'2""#C3342""#C3342""4'#17#17#17#17#19'""4'#17#17#17#17 +#19'""433333""433333""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333' +'""4'#17#17#17#17#19'""4'#17#17#17#17#19'""433333""433333"!333333B!333333B$3' +'33333'#18'!333333B""""""""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC""""4DDC"""' +'"4DDC""""4DDC"""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC""4DD' +'DDC""4DDDDC""4DDDDC""4DDDDC""4DDDDC"!333333B!333333B$333333'#18'!333333B"""' +'""""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""""33""""#3333' +'2""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""#33332""' +'#33332""#33332"!'#17#17#17#17#17#17#18'!'#17#17#17#17#17#17#18'$DDDDDDB!'#17 +#17#17#17#17#17#18'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""' +'"""""""""""""""""""""""""""""""""""""""""""' ]); LazarusResources.Add('VT_UTILITIES','BMP',[ 'BM6'#13#0#0#0#0#0#0'6'#4#0#0'('#0#0#0#144#0#0#0#16#0#0#0#1#0#8#0#0#0#0#0#0#0 +#0#0#19#11#0#0#19#11#0#0#0#1#0#0#0#1#0#0'www'#255'%r'#207#255'*u'#208#255#255 +#0#255#255#246#24#248#255#225'V'#232#255'O'#145#227#255'X'#150#227#255#134 +#134#134#255#140#140#140#255#147#147#147#255#154#154#154#255#190#190#190#255 +#184#199#203#255#197#197#197#255#204#204#204#255#195#210#213#255#221#221#221 +#255#240#251#255#255#255#255#255#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255 +#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0 +#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0 +#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#0#0#0#255#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#17#15#14#14#14#15#17#3#3#3#3#3 +#3#3#3#3#17#15#14#14#14#15#17#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#17#12#11#9#9#9#11#12#17#3#3#3#3#3#3 +#3#17#12#11#9#9#9#11#12#17#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#17#12#18#18#18#18#18#0#10#12#17#3#3#3#3#3 +#17#12#18#18#18#18#18#0#10#12#17#3#3#3#3#3#3#3#3#3#3#19#3#3#3#3#3#3#3#3#3#3#3 +#19#19#19#19#19#19#19#19#19#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#15#18#18#18#18#8#18#18#0#11#15 +#3#3#3#3#3#15#18#18#8#18#18#18#18#0#11#15#3#3#3#3#3#3#3#3#3#8#14#19#3#3#3#3#3 +#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#3#11#3#3#3#3#3#3#3#3#3 +#3#3#11#11#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#18#18#18#18#8 +#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#18#18#18#18#9#14#3#3#3#3#3#3#3#3#3#8 +#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#11#11 +#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 ,#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#18#18#18#8#8#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#8#18#18#18#9#14#3#3 +#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3 +#3#3#3#3#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#18#18#8#8#8#8#18#18#18#9#14#3#3#3#3#3#18#18#18#8#8#8#8 +#18#18#9#14#3#3#3#3#3#3#3#3#8#14#14#14#19#3#3#3#3#3#3#3#3#3#3#3#8#14#14#14#19 +#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3#3#3#3#11#11#11#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#18#18#18#8#8#8#18#18#18#11#15#3#3#3#3#3#18 +#18#18#8#8#8#18#18#18#11#15#3#3#3#3#3#3#3#8#14#14#14#14#14#19#3#3#3#3#3#3#3#3 +#3#3#3#8#14#19#3#3#3#3#3#3#3#3#3#3#11#11#11#11#11#11#11#11#11#3#3#3#3#3#3#3#3 +#3#3#3#11#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#18#18#18#18#8#8#18#18#18#12 +#17#3#3#3#3#3#18#18#18#8#8#18#18#18#18#12#17#3#3#3#3#3#3#3#8#14#14#14#14#14 +#19#3#3#3#3#3#3#3#3#3#3#3#8#14#19#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#18#18#18#18#8#18 +#18#12#17#3#3#3#3#3#3#3#18#18#8#18#18#18#18#12#17#3#3#3#3#3#3#3#8#8#8#8#8#8#8 +#8#19#3#3#3#3#3#3#3#3#3#3#3#19#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#18#18#18#18#18 +#15#17#3#3#3#3#3#3#3#3#3#18#18#18#18#18#15#17#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#4#5#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#13#13#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1 +#1#1#1#1#1#1#1#1#1#1#1#1#1#1#1#13#13#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#16#1#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6#6 +#6#6#6#6#6#6#6#6#2#16#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3 +#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#3#1#6#7#7#7#7#7#7 +#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7#7 +#6#1 ]); LazarusResources.Add('VT_XP','BMP',[ 'BM8K'#0#0#0#0#0#0'6'#0#0#0'('#0#0#0#144#1#0#0#16#0#0#0#1#0#24#0#0#0#0#0#0#0#0 +#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224#214#231#221#211 +#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233 +#224#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#238#231#223#233#224#214#231#221#211#233#224#214#238#231#223#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224#214#231#221#211#233 +#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#238#231#223#233#224 +#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#238#231#223#233#224#214#231#221#211#233#224#214#238#231#223#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#225#217#237'_'#140'y#oL'#6'b7'#6 +'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDX'#138't'#238#244#250#255 +#0#255#236#216#223'_'#140'y#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6 +'b7'#6'b7'#24'iDX'#138't'#248#241#243#255#0#255#225#217#237'_'#140'y#oL'#6'b' +'7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDX'#138't'#238#244 +#250#255#0#255#255#255#255#184#196#202#184#196#202#184#196#202#184#196#202 +#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184 +#196#202#184#196#202#184#196#202#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#226#214#201#220#206#191#217#202#186#216#201#184#217#202#186#220 +#206#191#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#224#212#198#217#201#185#213#196#178#211 +#194#175#213#196#178#217#201#185#224#212#198#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#220 +#206#191#217#202#186#216#201#184#217#202#186#220#206#191#226#214#201#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#226#214#201#220#206#191#217#202#186#216#201#184#217#202 +#186#220#206#191#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#220#206#191#217#202 +#186#216#201#184#217#202#186#220#206#191#226#214#201#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#226#214 +#201#220#206#191#217#202#186#216#201#184#217#202#186#220#206#191#226#214#201 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255'V'#17#0'V'#17#0'U'#19#0'U'#16#0'V'#17#0'R'#14#1'W'#16#2'T'#18#0'U'#15#2 +'U'#16#0'W'#18#0'T'#18#0'V'#17#0#255#0#255#255#0#255#255#0#255'W'#19#0'W'#18 +#1'Y'#19#2'^'#18#0'W'#20#0'V'#18#0'W'#18#1'V'#17#0'W'#19#0'X'#17#3'U'#21#0'Z' +#21#2'X'#18#1#255#0#255#255#0#255#255#0#255'V'#19#0'T'#19#4'W'#18#1'W'#18#1 +'Z'#18#0'X'#19#0'W'#17#0'W'#18#0'Z'#18#1'X'#19#0'V'#22#0'W'#18#0'X'#20#1#255 +#0#255#255#0#255#255#0#255#168#183#185#170#183#185#171#184#186#169#184#186 +#168#183#185#170#183#185#169#182#184#168#183#185#169#184#187#170#183#185#171 +#184#186#168#183#185#168#183#185#255#0#255#255#0#255#255#0#255'W'#18#0'U'#18 +#3'R'#19#0'V'#18#0'U'#19#0'U'#15#0'U'#19#0'T'#18#0'S'#17#0'Y'#17#0'T'#18#0'U' +#16#1'V'#19#0#255#0#255#255#0#255#255#0#255'U'#17#4'Y'#20#0'W'#20#0'Y'#16#2 +'U'#17#0'Z'#17#3'V'#15#1'Z'#19#0'U'#19#1'U'#17#0'X'#18#1'X'#20#1'Y'#17#0#255 +#0#255#255#0#255#255#0#255'X'#19#0'U'#19#0'X'#18#1'W'#20#0'U'#16#1'X'#19#0'X' +#18#1'U'#19#0'Y'#17#0'X'#21#0'V'#18#0'U'#19#0'Y'#20#1#255#0#255#255#0#255#255 +#0#255#168#183#185#170#183#185#171#183#183#170#183#185#171#184#186#169#182 +#184#170#183#185#169#185#184#169#182#184#170#183#185#168#183#185#167#182#184 +#170#183#185#255#0#255#255#0#255#255#0#255'W'#18#0'U'#18#3'R'#19#0'V'#18#0'U' +#19#0'U'#15#0'U'#19#0'T'#18#0'S'#17#0'Y'#17#0'T'#18#0'U'#16#1'V'#19#0#255#0 +#255#255#0#255#255#0#255'U'#17#4'Y'#20#0'W'#20#0'Y'#16#2'U'#17#0'Z'#17#3'V' +#15#1'Z'#19#0'U'#19#1'U'#17#0'X'#18#1'X'#20#1'Y'#17#0#255#0#255#255#0#255#255 +#0#255'X'#19#0'U'#19#0'X'#18#1'W'#20#0'U'#16#1'X'#19#0'X'#18#1'U'#19#0'Y'#17 +#0'X'#21#0'V'#18#0'U'#19#0'Y'#20#1#255#0#255#255#0#255#255#0#255#168#183#185 +#170#183#185#171#183#183#170#183#185#171#184#186#169#182#184#170#183#185#169 +#185#184#169#182#184#170#183#185#168#183#185#167#182#184#170#183#185#255#0 +#255#255#0#255#255#0#255'N'#131'lD}c'#152#178#199#184#209#227#184#209#227#184 +#209#227#184#209#227#184#209#227#184#209#227#184#209#227#183#209#226#182#208 +#226#164#177#201'B|aU'#136'r'#255#0#255'N'#131'ludu%r'#207'%r'#207'%r'#207'%' +'r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'%r'#207'rbsU'#136'r' +#255#0#255'N'#131'lG'#130'f'#166#203#216#226#243#246#228#244#248#228#244#248 +#228#244#248#228#244#248#228#244#248#228#244#248#228#245#248#229#245#248#190 +#218#228'H'#132'iU'#136'r'#255#0#255#184#196#202#201#211#217#221#231#235#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#225#235#239#201#211#217#184#196#202#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#223#210#196#185#153#131#154'jN'#129'D#q,'#8#129'D#'#154 +'jN'#185#153#131#223#210#196#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#220#205#190#181#147'{'#151'eH'#127'A'#31'q,'#7#127 +'A'#31#151'eH'#181#147'{'#220#205#190#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#223#210#196#185#153#131#154'jN'#129'D#q,'#8 +#129'D#'#154'jN'#185#153#131#223#210#196#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#213#221#222#197#208 +#210#188#200#203#197#208#210#213#221#222#233#237#238#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196#185#153 +#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196#185 +#153#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#223#210#196 +#185#153#131#154'jN'#129'D#q,'#8#129'D#'#154'jN'#185#153#131#223#210#196#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#208#216#215#190#201#199#180#192#190#190#201#199#208#216#215#230 +#234#234#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255'V'#17#0#244#249#247#248#247#251#248#248#248#248#248#248#251#249#249#247 +#248#246#248#248#248#247#249#249#248#248#248#245#247#248#248#247#249'V'#17#0 +#255#0#255#255#0#255#255#0#255'U'#20#0#136#195#251#132#193#249#130#194#248 +#135#195#249#135#195#249#132#199#244#138#195#250#132#196#244#136#191#252#130 +#195#246#132#197#248'X'#20#0#255#0#255#255#0#255#255#0#255'Z'#18#0#201#210 +#213#197#211#210#198#210#210#198#210#214#196#208#208#198#212#211#198#209#213 +#199#211#213#198#209#213#197#211#210#200#213#211'V'#20#2#255#0#255#255#0#255 +#255#0#255#167#182#184#226#239#241#227#239#241#225#238#240#225#238#240#225 +#237#239#226#239#241#225#238#240#225#238#240#226#238#240#226#238#240#227#240 +#242#169#182#184#255#0#255#255#0#255#255#0#255'V'#17#0#251#249#248#250#248 +#247#245#247#247#244#250#245#248#249#247#250#248#248#248#247#249#247#249#250 +#247#246#248#250#248#247#249#247#246'V'#17#2#255#0#255#255#0#255#255#0#255'X' +#18#1#133#196#246#130#194#249#132#195#245#137#196#246#138#196#248#135#198#248 ,#132#197#248#136#196#250#133#192#248#136#196#250#132#195#246'Z'#20#0#255#0 +#255#255#0#255#255#0#255'W'#18#1#197#213#212#198#210#216#197#210#208#199#210 +#214#199#211#213#196#208#212#200#210#210#192#210#209#197#209#211#200#211#215 +#199#211#213'X'#18#1#255#0#255#255#0#255#255#0#255#170#183#185#227#239#239 +#227#237#237#226#238#238#226#238#240#227#239#241#225#237#239#226#240#239#227 +#239#241#227#239#241#225#238#240#226#239#241#171#184#186#255#0#255#255#0#255 +#255#0#255'V'#17#0#251#249#248#250#248#247#245#247#247#244#250#245#248#249 +#247#250#248#248#248#247#249#247#249#250#247#246#248#250#248#247#249#247#246 +'V'#17#2#255#0#255#255#0#255#255#0#255'X'#18#1#133#196#246#130#194#249#132 +#195#245#137#196#246#138#196#248#135#198#248#132#197#248#136#196#250#133#192 +#248#136#196#250#132#195#246'Z'#20#0#255#0#255#255#0#255#255#0#255'W'#18#1 +#197#213#212#198#210#216#197#210#208#199#210#214#199#211#213#196#208#212#200 +#210#210#192#210#209#197#209#211#200#211#215#199#211#213'X'#18#1#255#0#255 +#255#0#255#255#0#255#170#183#185#227#239#239#227#237#237#226#238#238#226#238 +#240#227#239#241#225#237#239#226#240#239#227#239#241#227#239#241#225#238#240 +#226#239#241#171#184#186#255#0#255#255#0#255#255#0#255#24'iD'#179#200#215#201 +#225#236#200#224#234#200#224#235#201#225#236#201#225#236#201#225#236#201#225 +#236#201#225#236#200#224#235#198#221#234#193#216#230#170#185#205#24'iD'#255#0 +#255#24'iDc'#153#221'O'#145#227'O'#145#227'N'#144#227'O'#145#227'O'#145#227 +'O'#145#227'O'#145#227'O'#145#227'O'#145#227'O'#145#227'O'#145#227'a'#152#219 +#24'iD'#255#0#255#24'iD'#176#196#212#211#233#238#216#236#242#217#237#242#217 +#237#242#216#236#242#216#236#242#216#236#242#217#237#242#217#237#242#219#238 +#243#221#238#244#183#208#222#24'iD'#255#0#255#184#196#202#225#235#239#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#225#235#239#184#196#202#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249#247 +#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#210#190#173#158'pT'#129'g`~'#147#176'q'#167 +#223'c'#171#243'q'#167#223'~'#147#176#129'g`'#158'pT'#210#190#173#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#213#195#179#162'v['#150'kR'#180#161 +#147#196#192#187#200#203#203#196#192#187#180#161#147#150'kR'#162'v['#213#195 +#179#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#217#224#226 +#208#217#219#228#233#234#244#246#247#254#254#254#244#246#247#228#233#234#208 +#217#219#217#224#226#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249#247#245#228#215 +#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143#228#215#207#249 +#247#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#213#195#179#162'v['#150'dH'#192#162#143 +#228#215#207#249#247#245#228#215#207#192#162#143#150'dH'#162'v['#213#195#179 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#213#220#219#203 +#212#210#225#230#229#243#245#245#253#254#254#243#245#245#225#230#229#203#212 +#210#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +'V'#17#0#246#248#249#248#248#248#246#249#247#248#248#248#249#247#247#249#248 +#250#246#248#249#250#248#248#246#248#248#248#249#247#249#249#249'V'#17#0#255 +#0#255#255#0#255#255#0#255'Y'#20#1#129#195#246#248#248#248#244#249#247#245 +#247#247#249#248#252#249#246#248#250#249#245#244#249#248#248#247#249#250#248 +#248#133#196#246'W'#18#3#255#0#255#255#0#255#255#0#255'W'#18#1#197#209#213 +#195#208#210#196#205#209#194#204#211#194#205#209#196#205#209#193#207#206#194 +#206#208#195#208#210#195#207#209#199#210#214'W'#18#1#255#0#255#255#0#255#255 +#0#255#170#183#185#224#237#239#225#237#239#225#237#239#224#236#238#225#237 +#239#224#236#238#223#236#238#225#237#239#224#236#238#224#236#236#226#238#238 +#170#183#185#255#0#255#255#0#255#255#0#255'T'#18#0#245#247#247#248#248#248 +#248#248#248#245#248#252#251#247#252#248#247#249#250#248#247#246#248#248#248 +#249#245#246#248#248#243#248#246'V'#17#0#255#0#255#255#0#255#255#0#255'X'#19 +#0#134#197#248#250#249#245#245#247#247#244#249#248#244#249#247#251#247#252 +#246#248#248#246#250#245#246#248#248#249#247#247#132#196#250'W'#19#0#255#0 +#255#255#0#255#255#0#255'X'#21#0#199#210#214#195#205#212#197#209#211#202#208 +#207#196#209#211#203#208#211#196#205#209#194#207#209#202#205#213#194#206#210 +#200#213#215'Z'#18#0#255#0#255#255#0#255#255#0#255#168#183#186#224#237#239 +#225#237#237#225#237#237#225#237#239#227#239#241#227#239#241#225#238#240#224 +#236#238#224#236#238#227#239#241#226#239#241#169#182#184#255#0#255#255#0#255 ,#255#0#255'T'#18#0#245#247#247#248#248#248#248#248#248#245#248#252#251#247 +#252#248#247#249#250#248#247#246#248#248#248#249#245#246#248#248#243#248#246 +'V'#17#0#255#0#255#255#0#255#255#0#255'X'#19#0#134#197#248#250#249#245#245 +#247#247#244#249#248#244#249#247#251#247#252#246#248#248#246#250#245#246#248 +#248#249#247#247#132#196#250'W'#19#0#255#0#255#255#0#255#255#0#255'X'#21#0 +#199#210#214#195#205#212#197#209#211#202#208#207#196#209#211#203#208#211#196 +#205#209#194#207#209#202#205#213#194#206#210#200#213#215'Z'#18#0#255#0#255 +#255#0#255#255#0#255#168#183#186#224#237#239#225#237#237#225#237#237#225#237 +#239#227#239#241#227#239#241#225#238#240#224#236#238#224#236#238#227#239#241 +#226#239#241#169#182#184#255#0#255#255#0#255#255#0#255#6'b7'#225#243#246#224 +#243#246#224#243#246#224#243#246#224#243#246#224#243#246#224#243#246#224#243 +#246#224#243#246#224#243#246#222#241#246#214#235#242#204#228#238#6'b7'#255#0 +#255#6'b7X'#150#227'X'#150#227#224#242#245#224#242#245#224#242#245#224#242 +#245#224#242#245#224#242#245#224#242#245#224#242#245#222#240#245'X'#150#227 +'V'#149#227#6'b7'#255#0#255#6'b7'#190#213#227#197#220#231#201#225#234#202#226 +#234#202#226#234#202#226#234#202#226#234#202#226#234#202#226#234#202#226#234 +#203#227#235#206#228#236#207#229#237#6'b7'#255#0#255#184#196#202#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#184#196 +#202#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#226#214#201#161'tY'#178#141'v'#249#248#245#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#249#248#245#178#141'v'#161'tY'#226 +#214#201#255#0#255#255#0#255#255#0#255#224#212#198#158'pT'#136#135#143'~'#180 +#234#179#210#240#223#235#247#250#250#251#223#235#247#179#210#240'~'#180#234 +#136#135#143#158'pT'#224#212#198#255#0#255#255#0#255#255#0#255#226#214#201 +#161'tY'#173#144'}'#207#210#209#202#206#207#202#206#207#202#206#207#202#206 +#207#202#206#207#207#210#209#173#144'}'#161'tY'#226#214#201#255#0#255#255#0 +#255#255#0#255#255#0#255#217#224#226#224#229#231#254#254#254#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#254#254#254#224#229#231#217#224 +#226#255#0#255#255#0#255#255#0#255#255#0#255#226#214#201#161'tY'#178#141'v' +#248#245#242#247#243#240#237#230#223#233#225#215#237#230#223#247#243#240#248 +#245#242#178#141'v'#161'tY'#226#214#201#255#0#255#255#0#255#255#0#255#226#214 +#201#161'tY'#178#141'v'#248#245#242#247#243#240#237#230#223#233#225#215#237 +#230#223#247#243#240#248#245#242#178#141'v'#161'tY'#226#214#201#255#0#255#255 +#0#255#255#0#255#226#214#201#161'tY'#178#141'v'#248#245#242#247#243#240#237 +#230#223#233#225#215#237#230#223#247#243#240#248#245#242#178#141'v'#161'tY' +#226#214#201#255#0#255#255#0#255#255#0#255#255#0#255#213#220#219#220#226#225 +#254#254#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#254 +#254#254#220#226#225#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255'V'#17#0#246#248#249#248#249#247#250#247#249#249#248#250#250#246#245 +#246#248#249#250#248#247#246#248#248#250#247#249#249#249#249#249#248#250'V' +#17#0#255#0#255#255#0#255#255#0#255'X'#19#2#133#193#247#249#249#249#252#247 +#248#250#248#247#247#248#246#252#247#249#243#248#247#248#249#247#248#248#248 +#249#250#246#130#194#249'['#19#1#255#0#255#255#0#255#255#0#255'V'#17#0#195 +#210#213#195#207#207#194#204#204#193#206#204#195#206#203#197#205#204#193#204 +#208#194#205#209#192#204#208#196#208#208#198#209#213'Z'#19#0#255#0#255#255#0 +#255#255#0#255#168#183#185#224#237#239#226#238#240#224#236#238#224#236#238 +#224#236#238#225#237#239#223#236#238#224#236#238#225#237#239#225#237#237#225 +#237#239#171#184#186#255#0#255#255#0#255#255#0#255'U'#15#2#245#251#246#250 +#246#251#249#249#249#247#247#247#2#134#0#248#247#249#244#249#247#247#249#250 +#246#245#247#252#248#247#250#246#251'V'#18#0#255#0#255#255#0#255#255#0#255'X' +#20#1#135#191#250#248#247#249#250#246#251#246#248#248#0#135#0#247#247#247#249 +#246#248#247#250#248#248#247#249#247#248#246#129#195#248'X'#19#0#255#0#255 +#255#0#255#255#0#255'W'#18#3#196#210#209#200#208#208#203#210#207#200#208#215 +#0'e'#3#205#208#216#198#207#211#198#204#209#193#206#204#194#207#215#197#211 +#210'Y'#20#0#255#0#255#255#0#255#255#0#255#169#184#187#227#239#241#225#237 +#237#226#238#238#228#240#242#161#173#175#226#238#240#227#239#241#225#238#240 +#225#237#239#224#237#239#224#237#239#171#184#186#255#0#255#255#0#255#255#0 +#255'U'#15#2#245#251#246#250#246#251#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#252#248#247#250#246#251'V'#18#0#255#0#255#255#0#255#255#0 +#255'X'#20#1#135#191#250#248#247#249#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#247#248#246#129#195#248'X'#19#0#255#0#255#255#0#255#255#0 +#255'W'#18#3#196#210#209#200#208#208#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 ,#0#139#0#0#139#0#194#207#215#197#211#210'Y'#20#0#255#0#255#255#0#255#255#0 +#255#169#184#187#227#239#241#225#237#237#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#163#176#178#163#176#178#224#237#239#224#237#239#171 +#184#186#255#0#255#255#0#255#255#0#255#6'b7'#226#244#247#226#244#247#225#243 +#246#225#243#246#225#243#246#225#243#246#154#154#154#225#243#246#225#243#246 +#225#243#246#223#242#246#216#237#242#207#228#238#6'b7'#255#0#255#6'b7\'#153 +#228']'#154#229#225#242#245#225#242#245#225#242#245#225#242#245#154#154#154 +#225#242#245#225#242#245#225#242#245#223#241#245'\'#153#228'\'#153#228#6'b7' +#255#0#255#6'b7'#189#212#226#196#219#230#201#225#234#202#226#234#202#226#234 +#202#226#234#154#154#154#202#226#234#202#226#234#202#226#234#203#226#234#204 +#228#236#206#228#236#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233 +#242#246#233#242#246#233#242#246#233#242#246#154#154#154#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#185#153#131#147'_A'#241#236#229#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#241#236#229#147'_A'#185#153#131#255 +#0#255#255#0#255#255#0#255#183#150#127#128'f^{'#176#228#220#228#236#254#254 +#253#255#255#255#255#255#255#255#255#255#254#254#253#220#228#236'{'#176#228 +#128'f^'#183#150#127#255#0#255#255#0#255#255#0#255#185#153#131#147'fL'#202 +#203#199#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206 +#207#202#206#207#202#203#199#147'fL'#185#153#131#255#0#255#255#0#255#255#0 +#255#233#237#238#208#217#219#254#254#254#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#254#254#254#208#217#219#255 +#0#255#255#0#255#255#0#255#255#0#255#185#153#131#147'_A'#241#236#229#247#243 +#240#227#216#204#214#198#181#211#194#175#214#198#181#227#216#204#247#243#240 +#241#236#229#147'_A'#185#153#131#255#0#255#255#0#255#255#0#255#185#153#131 +#147'_A'#241#236#229#247#243#240#227#216#204#214#198#181#211#194#175#214#198 +#181#227#216#204#247#243#240#241#236#229#147'_A'#185#153#131#255#0#255#255#0 +#255#255#0#255#185#153#131#147'_A'#241#236#229#247#243#240#227#216#204#214 +#198#181#211#194#175#214#198#181#227#216#204#247#243#240#241#236#229#147'_A' +#185#153#131#255#0#255#255#0#255#255#0#255#230#234#234#203#212#210#254#254 +#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#254#254#254#203#212#210#230#234#234#255#0#255#255#0#255#255#0 +#255#255#0#255'V'#17#0#246#248#248#248#249#247#246#248#248#250#248#247#249 +#250#246#246#248#249#250#248#248#245#248#246#248#249#247#248#249#247#249#247 +#247'V'#17#0#255#0#255#255#0#255#255#0#255'S'#16#1#130#196#245#244#246#246 +#252#249#245#248#248#248#244#249#247#250#248#248#248#247#249#248#248#248#250 +#248#247#246#248#248#131#197#246'X'#19#0#255#0#255#255#0#255#255#0#255'W'#18 +#0#198#209#213#195#208#210#201#206#207#199#204#205#195#204#207#197#205#204 +#193#205#205#196#204#204#197#204#207#197#206#209#197#209#213'X'#20#1#255#0 +#255#255#0#255#255#0#255#167#182#184#224#237#239#224#236#238#224#236#238#224 +#237#239#223#235#237#226#238#240#223#236#238#225#237#239#224#236#238#224#237 +#239#228#240#242#170#183#185#255#0#255#255#0#255#255#0#255'V'#15#1#245#250 +#248#248#248#248#249#247#246#1#137#1#0#141#2#0#135#0#246#248#249#251#248#243 +#249#249#249#250#247#249#246#247#251'W'#17#0#255#0#255#255#0#255#255#0#255'Y' +#17#0#130#194#248#252#247#248#251#250#246#0#135#0#1#135#0#3#134#0#248#249#247 +#245#247#247#245#247#248#247#249#249#134#193#249'Z'#18#0#255#0#255#255#0#255 +#255#0#255'Z'#19#0#198#211#213#198#208#215#202#209#212#2'e'#1#1'j'#3#2'f'#0 +#204#209#212#196#209#211#195#204#208#195#207#209#196#210#208'X'#18#1#255#0 +#255#255#0#255#255#0#255#169#184#186#224#237#239#226#238#238#227#239#239#163 +#175#177#165#177#179#164#176#178#227#239#241#225#238#240#226#238#240#224#236 +#238#227#239#241#170#183#185#255#0#255#255#0#255#255#0#255'V'#15#1#245#250 +#248#248#248#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#250 +#247#249#246#247#251'W'#17#0#255#0#255#255#0#255#255#0#255'Y'#17#0#130#194 +#248#252#247#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#247 +#249#249#134#193#249'Z'#18#0#255#0#255#255#0#255#255#0#255'Z'#19#0#198#211 +#213#198#208#215#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#195 +#207#209#196#210#208'X'#18#1#255#0#255#255#0#255#255#0#255#169#184#186#224 +#237#239#226#238#238#163#176#178#163#176#178#163#176#178#163#176#178#163#176 +#178#163#176#178#163#176#178#224#236#238#227#239#241#170#183#185#255#0#255 +#255#0#255#255#0#255#6'b7'#227#245#248#227#245#248#226#244#247#226#244#247 +#226#244#247#154#154#154#154#154#154#154#154#154#226#244#247#226#244#247#225 +#243#246#217#238#243#208#229#238#6'b7'#255#0#255#6'b7c'#158#229'c'#158#229 ,#226#243#246#226#243#246#226#243#246#154#154#154#154#154#154#154#154#154#226 +#243#246#226#243#246#225#242#245'c'#158#229'b'#157#229#6'b7'#255#0#255#6'b7' +#189#211#227#197#219#231#202#225#234#203#226#235#203#226#235#154#154#154#154 +#154#154#154#154#154#203#226#235#203#226#235#204#226#235#206#227#236#206#228 +#237#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#154#154#154#154#154#154#154#154#154#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#152'hK'#181#147 +'}'#250#247#245#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255 +#255#0#255#151'eHz'#143#170#170#196#223#250#248#246#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#250#248#246#170#196#223'z'#143#170#151 +'eH'#255#0#255#255#0#255#255#0#255#152'hK'#172#150#134#199#202#202#202#206 +#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#199#202#202#172#150#134#152'hK'#255#0#255#255#0#255#255#0#255#213#221#222 +#228#233#234#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#228#233#234#213#221#222#255#0 +#255#255#0#255#255#0#255#152'hK'#181#147'}'#250#247#245#237#230#223#170#187 +#145'V'#162'K'#24#148#28'V'#162'K'#170#187#145#237#230#223#250#247#245#181 +#147'}'#152'hK'#255#0#255#255#0#255#255#0#255#152'hK'#181#147'}'#250#247#245 +#237#230#223#170#187#145'V'#162'K'#24#148#28'V'#162'K'#170#187#145#237#230 +#223#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255#255#0#255#152'hK'#181 +#147'}'#250#247#245#237#230#223#170#187#145'V'#162'K'#24#148#28'V'#162'K'#170 +#187#145#237#230#223#250#247#245#181#147'}'#152'hK'#255#0#255#255#0#255#255#0 +#255#208#216#215#225#230#229#255#255#255#255#255#255#238#241#241#207#215#214 +#183#195#193#207#215#214#238#241#241#255#255#255#255#255#255#225#230#229#208 +#216#215#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#245#244#246#244#243 +#245#246#244#244#241#245#246#251#246#247#248#248#248#248#247#249#248#248#248 +#247#246#248#250#248#248#246#249#247'V'#17#0#255#0#255#255#0#255#255#0#255'Z' +#18#0#129#193#248#247#246#248#244#246#246#246#245#249#249#249#249#243#248#247 +#253#248#250#246#248#249#252#247#248#247#249#249#133#194#250'V'#19#0#255#0 +#255#255#0#255#255#0#255'X'#18#1#195#209#208#193#205#205#194#203#206#193#205 +#205#194#204#204#193#206#204#196#203#206#193#206#204#195#204#208#195#206#210 +#198#210#212'X'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#225#238#240 +#225#237#239#224#237#239#222#235#237#224#236#238#224#236#238#224#236#238#224 +#236#238#224#236#238#223#236#238#226#238#240#171#184#186#255#0#255#255#0#255 +#255#0#255'T'#17#2#246#248#249#254#246#246#3#136#2#0#139#0#0#137#0#0#140#0#4 +#136#0#247#248#246#249#248#250#251#249#249#245#249#244'W'#18#0#255#0#255#255 +#0#255#255#0#255'W'#18#1#132#194#248#246#250#245#0#136#1#3#138#0#0#137#0#0 +#141#0#0#135#0#249#247#247#251#251#245#249#246#248#134#197#248'['#20#0#255#0 +#255#255#0#255#255#0#255'W'#17#0#195#208#216#200#206#211#0'g'#0#0'i'#2#0'j'#0 +#3'k'#0#1'g'#2#203#208#217#200#206#211#197#207#207#198#207#216'X'#19#0#255#0 +#255#255#0#255#255#0#255#168#183#185#226#239#241#225#237#237#161#173#173#163 +#176#178#163#176#178#163#176#178#163#177#176#227#240#242#226#238#240#226#238 +#240#226#238#240#170#183#185#255#0#255#255#0#255#255#0#255'T'#17#2#246#248 +#249#254#246#246#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#251 +#249#249#245#249#244'W'#18#0#255#0#255#255#0#255#255#0#255'W'#18#1#132#194 +#248#246#250#245#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#249 +#246#248#134#197#248'['#20#0#255#0#255#255#0#255#255#0#255'W'#17#0#195#208 +#216#200#206#211#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#197 +#207#207#198#207#216'X'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#226 +#239#241#225#237#237#163#176#178#163#176#178#163#176#178#163#176#178#163#176 +#178#163#176#178#163#176#178#226#238#240#226#238#240#170#183#185#255#0#255 +#255#0#255#255#0#255#6'b7'#228#245#248#228#245#248#227#244#247#227#244#247 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#227#244#247#226 +#243#246#218#238#243#210#229#238#6'b7'#255#0#255#6'b7j'#162#230'j'#162#230 +#227#243#246#227#243#246#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#227#243#246#226#242#245'j'#162#230'j'#162#230#6'b7'#255#0#255#6'b7' +#190#211#227#198#219#231#203#225#234#204#226#235#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#204#226#235#207#226#235#208#227#236#207#228 +#237#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242#246#233#242 +#246#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#233#242#246 +#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#127'B '#210#189 +#173#252#251#250#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#252#251#250#210#189#173#127'B '#255#0#255#255#0#255 +#255#0#255#127'A'#31'k'#159#213#207#213#218#253#252#251#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#253#252#251#207#213#218'k'#159#213 +#127'A'#31#255#0#255#255#0#255#255#0#255#127'B '#185#176#167#200#204#204#202 +#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206 +#207#200#204#204#185#176#167#127'B '#255#0#255#255#0#255#255#0#255#197#208 +#210#244#246#247#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#244#246#247#197#208#210#255 +#0#255#255#0#255#255#0#255#127'B '#210#189#173#252#251#250#233#225#215'W'#164 +'M'#13#146#19#13#146#19#13#146#19'W'#164'M'#233#225#215#252#251#250#210#189 +#173#127'B '#255#0#255#255#0#255#255#0#255#127'B '#210#189#173#252#251#250 +#233#225#215'W'#164'M'#13#146#19#13#146#19#13#146#19'W'#164'M'#233#225#215 +#252#251#250#210#189#173#127'B '#255#0#255#255#0#255#255#0#255#127'B '#210 +#189#173#252#251#250#233#225#215'W'#164'M'#13#146#19#13#146#19#13#146#19'W' +#164'M'#233#225#215#252#251#250#210#189#173#127'B '#255#0#255#255#0#255#255#0 +#255#190#201#199#243#245#245#255#255#255#255#255#255#207#215#214#178#191#189 +#178#191#189#178#191#189#207#215#214#255#255#255#255#255#255#243#245#245#190 +#201#199#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#242#242#242#239#241 +#241#241#240#244#238#244#243#244#244#244#245#246#244#245#244#246#247#246#248 +#248#247#249#245#248#246#248#247#249'V'#17#0#255#0#255#255#0#255#255#0#255'Z' +#18#1#132#189#250#236#240#241#239#241#241#244#242#242#244#244#244#245#244#246 +#239#246#243#251#248#250#252#247#246#242#249#244#135#197#251'W'#19#0#255#0 +#255#255#0#255#255#0#255'W'#19#0#191#206#209#191#204#206#193#204#202#194#205 +#203#196#203#206#191#205#203#197#204#207#193#205#207#193#205#207#196#206#206 +#202#208#213'W'#18#0#255#0#255#255#0#255#255#0#255#169#182#184#225#239#238 +#225#237#239#224#236#238#225#237#239#226#237#241#225#237#239#224#236#238#225 +#237#239#226#238#238#224#236#238#227#239#241#167#183#182#255#0#255#255#0#255 +#255#0#255'W'#18#0#240#243#247#240#243#248#1#135#0#2#135#1#254#249#248#0#137 +#0#0#137#0#0#137#0#247#248#246#246#247#251#247#249#249'V'#16#0#255#0#255#255 +#0#255#255#0#255'W'#18#0#129#188#250#246#245#249#0#137#0#2#136#0#248#249#247 +#1#133#3#1#137#1#0#137#0#244#247#251#246#249#247#137#199#247'U'#19#0#255#0 +#255#255#0#255#255#0#255'W'#18#1#192#205#213#203#208#209#2'e'#1#0'g'#0#208 +#210#218#4'g'#0#0'i'#2#2'e'#1#204#211#214#196#209#207#200#209#212'W'#20#0#255 +#0#255#255#0#255#255#0#255#171#183#187#226#238#240#229#239#239#161#173#175 +#163#175#177#229#241#243#163#175#177#163#175#177#162#175#177#227#239#241#226 +#238#240#225#238#240#170#183#185#255#0#255#255#0#255#255#0#255'W'#18#0#240 +#243#247#240#243#248#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#246#247#251#247#249#249'V'#16#0#255#0#255#255#0#255#255#0#255'W'#18#0#129 +#188#250#246#245#249#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#246#249#247#137#199#247'U'#19#0#255#0#255#255#0#255#255#0#255'W'#18#1#192 +#205#213#203#208#209#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#196#209#207#200#209#212'W'#20#0#255#0#255#255#0#255#255#0#255#171#183#187 +#226#238#240#229#239#239#163#176#178#163#176#178#163#176#178#163#176#178#163 +#176#178#163#176#178#163#176#178#226#238#240#225#238#240#170#183#185#255#0 +#255#255#0#255#255#0#255#6'b7'#233#249#250#233#249#250#232#250#251#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#231#249#251#224#243#247#214#235#242#6'b7'#255#0#255#6'b7'#146#187#236#139 +#184#235#232#249#250#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#231#248#250#139#184#235#145#186#235#6'b7'#255#0 +#255#6'b7'#193#215#228#200#222#234#207#228#237#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#210#229#238#211#230 +#238#211#231#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242 +#246#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255'q,'#8 +#224#211#197#250#247#245#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#250#247#245#224#211#197'q,'#8#255#0#255#255 +#0#255#255#0#255'q,'#7'^'#164#234#226#217#208#250#248#246#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#250#248#246#226#217#208'^'#164#234 +'q,'#7#255#0#255#255#0#255#255#0#255'q,'#8#187#185#178#199#202#202#202#206 ,#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#199#202#202#187#185#178'q,'#8#255#0#255#255#0#255#255#0#255#188#200#203#254 +#254#254#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#254#254#254#188#200#203#255#0#255 +#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245#237#230#223#25#149#29#13 +#146#19#13#146#19#13#146#19#25#149#29#237#230#223#250#247#245#224#211#197'q,' +#8#255#0#255#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245#237#230#223#25 +#149#29#13#146#19#13#146#19#13#146#19#25#149#29#237#230#223#250#247#245#224 +#211#197'q,'#8#255#0#255#255#0#255#255#0#255'q,'#8#224#211#197#250#247#245 +#237#230#223#25#149#29#13#146#19#13#146#19#13#146#19#25#149#29#237#230#223 +#250#247#245#224#211#197'q,'#8#255#0#255#255#0#255#255#0#255#180#192#190#253 +#254#254#255#255#255#255#255#255#183#195#193#178#191#189#178#191#189#178#191 +#189#183#195#193#255#255#255#255#255#255#253#254#254#180#192#190#255#0#255 +#255#0#255#255#0#255#255#0#255'V'#17#0#233#235#236#230#235#234#231#236#235 +#235#238#236#237#239#240#237#239#240#242#242#242#246#244#243#240#246#245#247 +#247#247#250#248#248'V'#17#0#255#0#255#255#0#255#255#0#255'U'#19#1'w'#190#240 +#234#233#235#235#233#233#231#236#235#233#239#238#239#238#240#237#241#242#238 +#245#242#243#246#244#250#246#251#134#193#249'W'#20#0#255#0#255#255#0#255#255 +#0#255'X'#18#1#192#204#206#192#201#204#194#202#202#189#202#200#190#202#202 +#193#203#203#195#202#205#196#204#203#196#203#206#192#204#208#197#208#212'Y' +#20#1#255#0#255#255#0#255#255#0#255#170#183#185#224#238#237#225#237#239#224 +#236#238#225#237#239#223#235#237#227#239#239#224#236#238#224#236#238#224#235 +#239#225#237#239#225#237#237#170#183#185#255#0#255#255#0#255#255#0#255'P'#19 +#0#229#235#242#238#237#239#3#135#0#241#240#244#246#240#245#250#243#250#1#137 +#1#0#137#0#0#136#0#244#249#247#251#249#249'V'#16#0#255#0#255#255#0#255#255#0 +#255'W'#19#0#129#188#244#234#237#241#0#133#0#243#239#244#240#243#248#245#245 +#245#4#134#3#0#140#1#2#136#0#247#247#247#136#196#248'X'#19#0#255#0#255#255#0 +#255#255#0#255'Y'#20#0#192#205#207#193#205#205#0'f'#1#195#205#212#200#205#208 +#197#203#214#0'g'#0#1'h'#0#2'f'#0#201#208#211#197#208#212'Z'#19#0#255#0#255 +#255#0#255#255#0#255#168#183#185#225#238#240#226#238#240#161#173#175#227#239 +#241#226#239#241#227#238#242#163#174#178#163#175#177#160#173#175#225#238#240 +#227#239#241#170#183#185#255#0#255#255#0#255#255#0#255'P'#19#0#229#235#242 +#238#237#239#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#244#249 +#247#251#249#249'V'#16#0#255#0#255#255#0#255#255#0#255'W'#19#0#129#188#244 +#234#237#241#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#247#247 +#247#136#196#248'X'#19#0#255#0#255#255#0#255#255#0#255'Y'#20#0#192#205#207 +#193#205#205#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#201#208 +#211#197#208#212'Z'#19#0#255#0#255#255#0#255#255#0#255#168#183#185#225#238 +#240#226#238#240#163#176#178#163#176#178#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#225#238#240#227#239#241#170#183#185#255#0#255#255#0 +#255#255#0#255#6'b7'#235#249#250#235#249#250#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#225#243#247#215#235#242#6'b7'#255#0#255#6'b7'#150#190#237#139#184#235#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#139#184#235#150#190#237#6'b7'#255#0#255#6'b7' +#193#215#228#200#222#234#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#211#230#238#211#231 +#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#154#154#154#154#154 +#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154#154 +#154#154#154#233#242#246#233#242#246#184#196#202#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#128'C!'#205#183 +#165#243#238#232#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255 +#255#0#255#128'B l'#160#214#199#201#203#243#238#233#254#254#253#255#255#255 +#255#255#255#255#255#255#254#254#253#243#238#233#199#201#203'l'#160#214#128 +'B '#255#0#255#255#0#255#255#0#255#128'C!'#182#173#163#196#198#195#202#206 +#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207#202#206#207 +#196#198#195#182#173#163#128'C!'#255#0#255#255#0#255#255#0#255#197#208#210 +#244#246#247#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#244#246#247#197#208#210#255#0 +#255#255#0#255#255#0#255#128'C!'#205#183#165#243#238#232#247#243#240']'#172 +'X'#13#146#19#13#146#19#13#146#19']'#172'X'#247#243#240#243#238#232#205#183 +#165#128'C!'#255#0#255#255#0#255#255#0#255#128'C!'#205#183#165#243#238#232 ,#247#243#240']'#172'X'#13#146#19#13#146#19#13#146#19']'#172'X'#247#243#240 +#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255#255#0#255#128'C!'#205 +#183#165#243#238#232#247#243#240']'#172'X'#13#146#19#13#146#19#13#146#19']' +#172'X'#247#243#240#243#238#232#205#183#165#128'C!'#255#0#255#255#0#255#255#0 +#255#190#201#199#243#245#245#255#255#255#255#255#255#207#215#214#178#191#189 +#178#191#189#178#191#189#207#215#214#255#255#255#255#255#255#243#245#245#190 +#201#199#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#227#230#234#226#230 +#231#225#229#230#229#234#233#234#235#233#231#236#235#235#237#237#235#240#239 +#241#242#240#243#242#244#247#249#249'V'#17#0#255#0#255#255#0#255#255#0#255'W' +#18#0'|'#181#243#225#227#228#227#226#228#222#230#230#230#232#232#229#231#231 +#233#235#236#233#237#238#242#237#238#241#243#243#131#194#245'W'#18#1#255#0 +#255#255#0#255#255#0#255'W'#18#0#189#203#202#188#200#200#185#199#198#188#202 +#201#188#200#202#192#201#204#191#204#202#191#204#202#190#202#204#192#204#206 +#196#210#209'W'#19#0#255#0#255#255#0#255#255#0#255#170#183#185#225#238#240 +#224#236#238#223#235#237#223#235#237#225#237#239#225#237#237#224#236#238#223 +#236#238#223#235#239#224#236#238#225#237#237#171#184#186#255#0#255#255#0#255 +#255#0#255'Z'#18#1#224#227#231#224#228#229#226#229#233#228#233#232#233#233 +#233#238#236#236#245#239#244#5#137#0#0#137#2#250#247#249#246#246#246'V'#17#2 +#255#0#255#255#0#255#255#0#255'Y'#20#1'y'#181#241#229#230#228#231#229#229#231 +#230#232#229#234#232#234#235#239#245#239#244#1#134#0#0#138#0#246#248#248#133 +#192#248'['#20#0#255#0#255#255#0#255#255#0#255'V'#17#2#188#200#206#190#202 +#204#195#198#206#191#203#205#192#201#204#196#203#206#201#203#213#0'f'#1#0'f' +#1#195#206#210#196#209#211'W'#19#0#255#0#255#255#0#255#255#0#255#168#183#185 +#225#239#238#225#237#237#226#238#238#227#239#239#223#237#236#226#238#240#227 +#239#241#163#175#177#162#174#176#228#240#242#228#237#240#171#183#185#255#0 +#255#255#0#255#255#0#255'Z'#18#1#224#227#231#224#228#229#0#139#0#0#139#0#0 +#139#0#0#139#0#0#139#0#0#139#0#0#139#0#250#247#249#246#246#246'V'#17#2#255#0 +#255#255#0#255#255#0#255'Y'#20#1'y'#181#241#229#230#228#0#139#0#0#139#0#0#139 +#0#0#139#0#0#139#0#0#139#0#0#139#0#246#248#248#133#192#248'['#20#0#255#0#255 +#255#0#255#255#0#255'V'#17#2#188#200#206#190#202#204#0#139#0#0#139#0#0#139#0 +#0#139#0#0#139#0#0#139#0#0#139#0#195#206#210#196#209#211'W'#19#0#255#0#255 +#255#0#255#255#0#255#168#183#185#225#239#238#225#237#237#163#176#178#163#176 +#178#163#176#178#163#176#178#163#176#178#163#176#178#163#176#178#228#240#242 +#228#237#240#171#183#185#255#0#255#255#0#255#255#0#255#6'b7'#237#251#252#236 +#251#252#236#251#252#236#251#252#236#251#252#236#251#252#236#251#252#236#251 +#252#236#251#252#236#251#252#236#250#251#228#244#249#219#237#244#6'b7'#255#0 +#255#6'b7'#156#196#238#139#184#235#237#251#252#237#251#252#237#251#252#237 +#251#252#237#251#252#237#251#252#237#251#252#237#251#252#236#250#251#139#184 +#235#156#196#238#6'b7'#255#0#255#6'b7'#195#216#229#202#224#234#208#229#238 +#211#230#238#211#230#238#211#230#238#211#230#238#211#230#238#211#230#238#211 +#230#238#211#230#238#212#231#238#213#231#238#6'b7'#255#0#255#184#196#202#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#184#196#202#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#156'lP'#178#142'v'#233#224#214#251#250#248#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#251#250#248#233#224#214#178 +#142'v'#156'lP'#255#0#255#255#0#255#255#0#255#155'kO{'#143#171#161#185#208 +#229#218#207#243#238#233#250#248#246#253#252#251#250#248#246#243#238#233#229 +#218#207#161#185#208'{'#143#171#155'kO'#255#0#255#255#0#255#255#0#255#156'lP' +#170#146#129#191#191#186#200#204#203#202#206#207#202#206#207#202#206#207#202 +#206#207#202#206#207#200#204#203#191#191#186#170#146#129#156'lP'#255#0#255 +#255#0#255#255#0#255#213#221#222#228#233#234#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#228#233#234#213#221#222#255#0#255#255#0#255#255#0#255#156'lP'#178#142'v'#233 +#224#214#250#247#245#196#222#191'`'#177'_'#26#151#31'`'#177'_'#196#222#191 +#250#247#245#233#224#214#178#142'v'#156'lP'#255#0#255#255#0#255#255#0#255#156 +'lP'#178#142'v'#233#224#214#250#247#245#196#222#191'`'#177'_'#26#151#31'`' +#177'_'#196#222#191#250#247#245#233#224#214#178#142'v'#156'lP'#255#0#255#255 +#0#255#255#0#255#156'lP'#178#142'v'#233#224#214#250#247#245#196#222#191'`' +#177'_'#26#151#31'`'#177'_'#196#222#191#250#247#245#233#224#214#178#142'v' +#156'lP'#255#0#255#255#0#255#255#0#255#208#216#215#225#230#229#255#255#255 +#255#255#255#238#241#241#207#215#214#183#195#193#207#215#214#238#241#241#255 +#255#255#255#255#255#225#230#229#208#216#215#255#0#255#255#0#255#255#0#255 ,#255#0#255'V'#17#0#217#226#230#221#225#226#221#227#226#225#227#227#226#232 +#227#230#232#232#228#231#235#236#233#235#234#236#236#234#239#242#238#241#245 +'V'#17#0#255#0#255#255#0#255#255#0#255'['#19#1't'#177#241#217#225#218#216#222 +#221#220#223#221#217#225#224#226#228#228#224#229#227#233#233#227#235#234#236 +#234#240#239'}'#189#247'X'#18#1#255#0#255#255#0#255#255#0#255'V'#16#3#183#201 +#200#189#200#198#186#198#198#186#200#199#186#200#196#188#201#199#189#201#201 +#191#201#201#191#200#203#191#204#202#194#206#208'W'#18#0#255#0#255#255#0#255 +#255#0#255#170#182#186#224#237#239#226#237#241#225#237#239#224#236#238#224 +#235#239#224#236#238#225#237#239#224#236#238#223#237#236#225#238#240#225#238 +#240#168#184#183#255#0#255#255#0#255#255#0#255'Y'#17#0#212#221#224#216#220 +#221#215#220#221#219#224#223#218#226#225#224#229#228#227#230#234#233#234#238 +#1#133#2#236#240#241#240#242#242'W'#17#0#255#0#255#255#0#255#255#0#255'V'#21 +#0't'#178#242#217#222#221#216#221#222#217#222#223#220#225#223#224#231#228#227 +#231#232#236#235#239#0#133#3#237#238#242'~'#189#249'Z'#19#0#255#0#255#255#0 +#255#255#0#255'T'#18#0#184#203#200#189#198#201#189#198#202#186#199#201#190 +#198#197#189#201#201#189#201#203#200#205#208#2'f'#0#190#205#207#194#206#210 +'W'#18#0#255#0#255#255#0#255#255#0#255#168#181#183#225#238#240#225#237#239 +#223#235#237#225#237#239#225#237#239#224#236#238#226#238#240#228#240#242#159 +#172#174#226#238#238#225#237#239#171#184#186#255#0#255#255#0#255#255#0#255'Y' +#17#0#212#221#224#216#220#221#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0 +#0#139#0#236#240#241#240#242#242'W'#17#0#255#0#255#255#0#255#255#0#255'V'#21 +#0't'#178#242#217#222#221#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0 +#139#0#237#238#242'~'#189#249'Z'#19#0#255#0#255#255#0#255#255#0#255'T'#18#0 +#184#203#200#189#198#201#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0#139#0#0 +#139#0#190#205#207#194#206#210'W'#18#0#255#0#255#255#0#255#255#0#255#168#181 +#183#225#238#240#225#237#239#163#176#178#163#176#178#163#176#178#163#176#178 +#163#176#178#163#176#178#163#176#178#226#238#238#225#237#239#171#184#186#255 +#0#255#255#0#255#255#0#255#6'b7'#240#253#254#239#253#254#239#253#254#239#253 +#254#239#253#254#239#253#254#239#253#254#239#253#254#239#253#254#239#253#254 +#238#253#254#232#247#251#224#241#246#6'b7'#255#0#255#6'b7'#161#198#238#139 +#184#235#240#253#254#240#253#254#240#253#254#240#253#254#240#253#254#240#253 +#254#240#253#254#240#253#254#239#253#254#139#184#235#161#198#238#6'b7'#255#0 +#255#6'b7'#195#217#229#202#224#234#210#230#238#212#233#238#213#233#238#213 +#233#238#213#233#238#213#233#238#213#233#238#213#233#238#213#233#238#213#233 +#238#214#233#238#6'b7'#255#0#255#184#196#202#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#184#196#202#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#196 +#169#152#147'_B'#222#208#194#233#224#214#243#238#232#250#247#245#252#251#250 +#250#247#245#243#238#232#233#224#214#222#208#194#147'_B'#196#169#152#255#0 +#255#255#0#255#255#0#255#196#169#151#130'ibx'#171#222#197#195#192#222#209#195 +#229#218#207#232#222#212#229#218#207#222#209#195#197#195#192'x'#171#222#130 +'ib'#196#169#151#255#0#255#255#0#255#255#0#255#196#169#152#147'fM'#191#187 +#179#191#191#186#196#198#195#199#202#202#200#204#204#199#202#202#196#198#195 +#191#191#186#191#187#179#147'fM'#196#169#152#255#0#255#255#0#255#255#0#255 +#255#0#255#208#217#219#254#254#254#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#254#254#254#208#217#219#255#0 +#255#255#0#255#255#0#255#255#0#255#196#169#152#147'_B'#222#208#194#233#224 +#214#243#238#232#250#247#245#252#251#250#250#247#245#243#238#232#233#224#214 +#222#208#194#147'_B'#196#169#152#255#0#255#255#0#255#255#0#255#196#169#152 +#147'_B'#222#208#194#233#224#214#243#238#232#250#247#245#252#251#250#250#247 +#245#243#238#232#233#224#214#222#208#194#147'_B'#196#169#152#255#0#255#255#0 +#255#255#0#255#196#169#152#147'_B'#222#208#194#233#224#214#243#238#232#250 +#247#245#252#251#250#250#247#245#243#238#232#233#224#214#222#208#194#147'_B' +#196#169#152#255#0#255#255#0#255#255#0#255#255#0#255#203#212#210#254#254#254 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#254#254#254#203#212#210#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255'V'#17#0#219#223#224#214#225#223#222#224#224#221#224#228#222#225#229 +#223#227#228#225#230#228#229#231#232#227#231#232#236#236#236#236#241#242'V' +#17#0#255#0#255#255#0#255#255#0#255'Y'#20#1'p'#173#235#214#217#215#213#218 +#217#217#219#220#219#221#221#218#223#222#223#226#224#221#224#228#224#229#227 +#234#232#231'}'#185#244'['#20#0#255#0#255#255#0#255#255#0#255'Y'#20#0#187#199 +#199#185#198#200#185#197#197#185#197#201#184#199#202#189#198#202#188#200#200 ,#188#200#202#183#200#203#192#204#206#189#204#207'Y'#19#2#255#0#255#255#0#255 +#255#0#255#173#185#187#226#238#240#226#237#241#225#237#239#224#236#238#225 +#237#239#225#237#237#224#236#238#225#237#239#224#236#236#225#237#239#226#238 +#240#170#184#183#255#0#255#255#0#255#255#0#255'Y'#19#2#211#216#219#204#218 +#217#214#216#216#213#218#221#215#221#220#215#221#226#219#224#222#225#227#228 +#226#229#234#228#233#231#231#236#237'V'#14#2#255#0#255#255#0#255#255#0#255'W' +#19#0'p'#175#235#207#218#216#213#218#217#220#220#220#221#221#221#224#221#223 +#221#226#225#226#228#229#230#230#230#235#236#234#128#185#246'['#19#2#255#0 +#255#255#0#255#255#0#255'Y'#20#1#188#200#200#185#199#198#185#198#200#186#199 +#201#187#197#197#184#196#200#188#200#204#193#201#201#190#199#208#194#203#206 +#195#204#207'T'#20#2#255#0#255#255#0#255#255#0#255#173#185#189#225#237#239 +#227#239#241#226#238#240#225#237#239#224#236#238#224#236#238#225#237#239#226 +#238#238#226#240#239#225#237#237#226#238#238#170#184#183#255#0#255#255#0#255 +#255#0#255'Y'#19#2#211#216#219#204#218#217#214#216#216#213#218#221#215#221 +#220#215#221#226#219#224#222#225#227#228#226#229#234#228#233#231#231#236#237 +'V'#14#2#255#0#255#255#0#255#255#0#255'W'#19#0'p'#175#235#207#218#216#213#218 +#217#220#220#220#221#221#221#224#221#223#221#226#225#226#228#229#230#230#230 +#235#236#234#128#185#246'['#19#2#255#0#255#255#0#255#255#0#255'Y'#20#1#188 +#200#200#185#199#198#185#198#200#186#199#201#187#197#197#184#196#200#188#200 +#204#193#201#201#190#199#208#194#203#206#195#204#207'T'#20#2#255#0#255#255#0 +#255#255#0#255#173#185#189#225#237#239#227#239#241#226#238#240#225#237#239 +#224#236#238#224#236#238#225#237#239#226#238#238#226#240#239#225#237#237#226 +#238#238#170#184#183#255#0#255#255#0#255#255#0#255'#oL'#180#221#228#245#255 +#255#245#255#255#245#255#255#245#255#255#245#255#255#245#255#255#245#255#255 +#245#255#255#245#255#255#245#255#255#244#255#255#180#221#228'#oL'#255#0#255 +'#oL'#149#197#252#139#184#235#150#190#237#150#190#237#150#190#237#150#190#237 +#150#190#237#150#190#237#150#190#237#150#190#237#150#190#237#139#184#235#149 +#197#252'#oL'#255#0#255'#oL'#149#175#196#185#208#227#191#212#228#194#216#230 +#195#217#231#195#217#231#195#217#231#195#217#231#195#217#231#195#217#231#194 +#216#230#196#218#231#158#189#206'#oL'#255#0#255#184#196#202#221#231#235#233 +#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242 +#246#233#242#246#233#242#246#233#242#246#233#242#246#221#231#235#184#196#202 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#167'}e'#172#133'm'#219#204#189#222#209#195#226#214#201 +#228#217#205#226#214#201#222#209#195#219#204#189#172#133'm'#167'}e'#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#166'}d'#138#136#145'x'#171#222#159 +#182#204#191#190#189#209#194#178#191#190#189#159#182#204'x'#171#222#138#136 +#145#166'}d'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#168 +#138'v'#189#185#176#185#183#177#187#186#180#188#187#182#187#186#180#185#183 +#177#189#185#176#168#138'v'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#217#224#226#224#229#231#254#254#254#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#254#254#254#224#229#231#217#224#226#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#172#133'm'#219#204#189 +#222#209#195#226#214#201#228#217#205#226#214#201#222#209#195#219#204#189#172 +#133'm'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#167'}e'#172 +#133'm'#219#204#189#222#209#195#226#214#201#228#217#205#226#214#201#222#209 +#195#219#204#189#172#133'm'#167'}e'#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#167'}e'#172#133'm'#219#204#189#222#209#195#226#214#201#228#217#205 +#226#214#201#222#209#195#219#204#189#172#133'm'#167'}e'#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#213#220#219#220#226#225#254#254#254#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#254#254#254#220#226#225 +#213#220#219#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255'V'#17#0#214 +#226#226#218#222#227#220#223#227#221#226#229#221#227#226#223#229#228#224#230 +#229#222#231#228#229#232#237#230#233#237#232#238#237'V'#17#0#255#0#255#255#0 +#255#255#0#255'X'#19#0'l'#177#240'o'#172#236'm'#174#235'q'#176#236'r'#177#237 +'t'#177#239's'#182#239't'#181#236'u'#178#240'v'#181#241'y'#184#245'T'#18#0 +#255#0#255#255#0#255#255#0#255'V'#18#0#187#201#199#185#199#205#184#197#199 +#184#199#201#187#199#201#186#199#201#188#200#202#188#199#203#188#202#201#193 +#202#206#193#205#205'W'#19#0#255#0#255#255#0#255#255#0#255#170#182#184#227 +#239#239#225#237#239#227#239#239#226#238#238#225#237#239#226#238#238#226#238 +#240#226#238#238#225#237#239#225#237#239#227#239#239#170#182#186#255#0#255 +#255#0#255#255#0#255'T'#18#0#206#215#219#209#214#217#209#214#215#210#215#218 +#212#215#219#209#218#221#216#223#220#217#222#221#220#226#225#214#228#227#224 ,#230#235'T'#18#0#255#0#255#255#0#255#255#0#255'X'#19#0'n'#176#241'n'#171#235 +'p'#173#235'm'#179#232's'#179#237'r'#180#239'r'#180#239's'#181#240'v'#179#243 +'t'#183#240'u'#184#247'Y'#20#1#255#0#255#255#0#255#255#0#255'W'#19#0#188#201 +#203#187#199#205#183#198#200#184#198#197#186#199#201#188#201#203#189#199#199 +#189#200#204#189#198#208#183#201#202#192#203#211'X'#20#1#255#0#255#255#0#255 +#255#0#255#169#182#184#227#239#239#226#238#238#225#237#237#226#238#238#226 +#238#238#226#238#238#224#236#236#229#238#241#225#237#239#225#237#237#227#239 +#239#169#182#184#255#0#255#255#0#255#255#0#255'T'#18#0#206#215#219#209#214 +#217#209#214#215#210#215#218#212#215#219#209#218#221#216#223#220#217#222#221 +#220#226#225#214#228#227#224#230#235'T'#18#0#255#0#255#255#0#255#255#0#255'X' +#19#0'n'#176#241'n'#171#235'p'#173#235'm'#179#232's'#179#237'r'#180#239'r' +#180#239's'#181#240'v'#179#243't'#183#240'u'#184#247'Y'#20#1#255#0#255#255#0 +#255#255#0#255'W'#19#0#188#201#203#187#199#205#183#198#200#184#198#197#186 +#199#201#188#201#203#189#199#199#189#200#204#189#198#208#183#201#202#192#203 +#211'X'#20#1#255#0#255#255#0#255#255#0#255#169#182#184#227#239#239#226#238 +#238#225#237#237#226#238#238#226#238#238#226#238#238#224#236#236#229#238#241 +#225#237#239#225#237#237#227#239#239#169#182#184#255#0#255#255#0#255#255#0 +#255'['#137'uM'#138'm'#180#222#229#246#255#255#246#255#255#246#255#255#246 +#255#255#246#255#255#246#255#255#246#255#255#246#255#255#246#255#255#201#235 +#238'M'#138'm['#138'v'#255#0#255'['#137'u|'#140#137#149#197#252#149#197#252 +#149#197#252#149#197#252#149#197#252#149#197#252#149#197#252#149#197#252#149 +#197#252#149#197#252#149#197#252'|'#140#137'['#138'v'#255#0#255'['#137'u@z`' +#145#167#192#178#204#222#179#205#223#180#205#223#180#205#223#180#205#223#180 +#205#223#180#205#223#180#205#223#180#205#223#164#178#201'C|b['#138'v'#255#0 +#255#184#196#202#201#211#217#221#231#235#233#242#246#233#242#246#233#242#246 +#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#233#242#246#225 +#235#239#201#211#217#184#196#202#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g'#148 +'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC'#168 +#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#168#127'g'#131'jd|'#144#173'l'#160#214']'#164#233'l'#160#214'|'#144#173#131 +'jd'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#168#127'g'#148'hN'#170#146#129#179#169#158#182#178#170#179#169#158 +#170#146#129#148'hN'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#217#224#226#208#217#219#228#233#234#244#246#247#254 +#254#254#244#246#247#228#233#234#208#217#219#217#224#226#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g'#148'aC'#178#142 +'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC'#168#127'g'#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#168#127'g' +#148'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178#142'v'#148'aC' +#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#168#127'g'#148'aC'#178#142'v'#200#177#157#214#198#180#200#177#157#178 +#142'v'#148'aC'#168#127'g'#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#213#220#219#203#212#210#225#230#229#243#245#245#253#254 +#254#243#245#245#225#230#229#203#212#210#213#220#219#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0 +'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0'V'#17#0#255#0#255 +#255#0#255#255#0#255'^'#17#1'W'#19#0'X'#20#1'Z'#19#0'X'#19#0'['#19#1'Y'#18#0 +'['#20#0'V'#21#0'X'#19#0'X'#21#0'V'#17#0'X'#21#0#255#0#255#255#0#255#255#0 +#255'W'#18#1'X'#20#1'V'#19#0'Y'#21#2'Z'#18#1'W'#19#0'X'#19#0'X'#19#0'Y'#17#0 +'V'#17#0'W'#16#2'W'#19#0'U'#19#0#255#0#255#255#0#255#255#0#255#168#183#185 +#170#184#183#170#183#185#170#183#185#168#183#185#169#184#186#169#185#184#170 +#183#185#171#184#186#168#183#186#169#184#186#169#182#184#171#183#187#255#0 +#255#255#0#255#255#0#255'T'#18#0'X'#19#2'S'#17#0'U'#19#1'W'#19#0'X'#19#0'Q' +#19#1'T'#15#0'W'#19#0'V'#18#0'S'#17#0'W'#18#0'W'#18#1#255#0#255#255#0#255#255 +#0#255'_'#19#1'X'#19#0'Z'#21#2'Z'#20#0'X'#19#0'X'#17#3'U'#19#0'Z'#18#1'X'#19 +#0'['#20#0'Q'#20#0'Y'#20#1'W'#18#0#255#0#255#255#0#255#255#0#255'X'#19#2'W' +#19#0'X'#20#1'Z'#18#0']'#18#4'X'#18#1'T'#21#0'Z'#18#0'S'#19#1'X'#19#0'U'#23#0 +'X'#18#1'W'#18#0#255#0#255#255#0#255#255#0#255#171#184#186#171#184#186#170 +#183#185#171#184#186#168#181#183#170#183#185#169#182#184#172#185#187#169#181 +#185#171#184#186#171#184#186#170#183#185#170#185#188#255#0#255#255#0#255#255 +#0#255'T'#18#0'X'#19#2'S'#17#0'U'#19#1'W'#19#0'X'#19#0'Q'#19#1'T'#15#0'W'#19 +#0'V'#18#0'S'#17#0'W'#18#0'W'#18#1#255#0#255#255#0#255#255#0#255'_'#19#1'X' ,#19#0'Z'#21#2'Z'#20#0'X'#19#0'X'#17#3'U'#19#0'Z'#18#1'X'#19#0'['#20#0'Q'#20#0 +'Y'#20#1'W'#18#0#255#0#255#255#0#255#255#0#255'X'#19#2'W'#19#0'X'#20#1'Z'#18 +#0']'#18#4'X'#18#1'T'#21#0'Z'#18#0'S'#19#1'X'#19#0'U'#23#0'X'#18#1'W'#18#0 +#255#0#255#255#0#255#255#0#255#171#184#186#171#184#186#170#183#185#171#184 +#186#168#181#183#170#183#185#169#182#184#172#185#187#169#181#185#171#184#186 +#171#184#186#170#183#185#170#185#188#255#0#255#255#0#255#255#0#255#209#196 +#219'['#137'u#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'i' +'DO'#131'm'#213#201#223#255#0#255#222#196#200'['#137'u#oL'#6'b7'#6'b7'#6'b7' +#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#24'iDO'#131'm'#226#201#205#255#0#255#209 +#196#219'['#137'u#oL'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7'#6'b7' +#24'iDO'#131'm'#213#201#223#255#0#255#255#255#255#184#196#202#184#196#202#184 +#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196#202#184#196 +#202#184#196#202#184#196#202#184#196#202#184#196#202#255#255#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#202#177#162#160'sY'#130'F%q-'#8#130'F%'#160's' +'Y'#202#177#162#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#233#237#238#213#221#222#197#208#210#188#200 +#203#197#208#210#213#221#222#233#237#238#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#202#177#162#160'sY' +#130'F%q-'#8#130'F%'#160'sY'#202#177#162#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#208#216#215 +#190#201#199#180#192#190#190#201#199#208#216#215#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#0#0 ]); LazarusResources.Add('VT_MOVENS_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 ,#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ]); LazarusResources.Add('VT_MOVEEW_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0 ,#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0 +#0#255#255#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255 +#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255 +#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ]); LazarusResources.Add('VT_MOVEALL_BMP','BMP',[ 'BM6'#12#0#0#0#0#0#0'6'#0#0#0'('#0#0#0' '#0#0#0' '#0#0#0#1#0#24#0#0#0#0#0#0#12 +#0#0#18#11#0#0#18#11#0#0#0#0#0#0#0#0#0#0#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255 +#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255#255#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0 +#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0 +#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0 +#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 ,#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255 +#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255 +#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#255 +#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0 +#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255 +#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0 +#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#255#255#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255 +#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255 +#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0 +#0#0#0#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0#0#0#0#0#0#0#0#255 +#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#255#255#0#0#0#0#0 +#0#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#255#255#255#255#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 ,#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255 +#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0#255#255#0 +#255#255#0#255#255#0#255#255#0#255 ]); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/virtualtreeview_package_doublecmd.pas��������������������0000644�0001750�0000144�00000000754�12014201074�027577� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit virtualtreeview_package_doublecmd; interface uses VirtualTrees, VTHeaderPopup, registervirtualtreeview, VTGraphics, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('registervirtualtreeview', @registervirtualtreeview.Register); end; initialization RegisterPackage('virtualtreeview_package_doublecmd', @Register); end. ��������������������doublecmd-0.7.1/components/virtualtreeview/lclfunctions.inc�����������������������������������������0000644�0001750�0000144�00000006713�12014201074�023337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������//Used in DrawTextW { function GetTextAlign(DC: HDC): UINT; begin Logger.AddCheckPoint(lcDummyFunctions,'GetTextAlign'); Result:=TA_TOP or TA_LEFT; end; } //Used in DrawTextW, ShortenString, TVirtualTreeColumn.ComputeHeaderLayout, TVirtualTreeColumns.DrawButtonText, // TVTEdit.AutoAdjustSize, TCustomVirtualStringTree.PaintNormalText, TCustomVirtualStringTree.WMSetFont // TCustomVirtualStringTree.DoTextMeasuring { function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; var Size: TSize): Boolean; var TempStr: String; begin Logger.AddCheckPoint(lcDummyFunctions,'GetTextExtentPoint32W'); TempStr:=WideCharToString(Str); Result:=GetTextExtentPoint(DC, PChar(TempStr), Length(TempStr), Size); end; } //Used in DrawTextW { function ExtTextOutW(DC: HDC; X, Y: Integer; Options: LongInt; Rect: PRect; Str: PWideChar; Count: LongInt; Dx: PInteger): Boolean; var TempStr: String; begin Logger.AddCheckPoint(lcDummyFunctions,'ExtTextOutW'); TempStr:=WideCharToString(Str); Result:= ExtTextOut(DC, X, Y, Options, Rect, PChar(TempStr), Length(TempStr), Dx); end; } //Used in TVirtualTreeHintWindow.CalcHintRect, TVirtualTreeColumn.ComputeHeaderLayout // TBaseVirtualTree.CollectSelectedNodesRTL, TBaseVirtualTree.DetermineHitPositionRTL // TBaseVirtualTree.UpdateEditBounds, TBaseVirtualTree.GetDisplayRect, PaintTree, // TStringEditLink.PrepareEdit, TCustomVirtualStringTree.ComputeNodeHeight etc function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; var I:Integer; XOffset, YOffset: SmallInt; FromRect,ToRect: TRect; begin GetWindowRect(hWndFrom,FromRect); GetWindowRect(hWndTo,ToRect); XOffset:=(FromRect.Left - ToRect.Left); YOffset:=(FromRect.Top - ToRect.Top); for i:=0 to cPoints - 1 do begin { Mode Delphi does not support treating a pointer as a array if ObjFpc is used than this syntax is preferred PPoint(@lpPoints)[i].x:= XOffset + PPoint(@lpPoints)[i].x; PPoint(@lpPoints)[i].y:= YOffset + PPoint(@lpPoints)[i].y; } PPoint(@lpPoints+i)^.x:= XOffset + PPoint(@lpPoints+i)^.x; PPoint(@lpPoints+i)^.y:= YOffset + PPoint(@lpPoints+i)^.y; end; Result:=MakeLong(XOffset,YOffset); end; {$ifndef UseExternalDragManager} function RegisterDragDrop(hwnd:HWND; pDropTarget:IDropTarget):WINOLEAPI;stdcall;external 'ole32.dll' name 'RegisterDragDrop'; function RevokeDragDrop(hwnd:HWND):WINOLEAPI;stdcall;external 'ole32.dll' name 'RevokeDragDrop'; function DoDragDrop(pDataObj:IDataObject; pDropSource:IDropSource; dwOKEffects:DWORD; pdwEffect:LPDWORD):WINOLEAPI;stdcall;external 'ole32.dll' name 'DoDragDrop'; function OleInitialize(pvReserved:LPVOID):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleInitialize'; procedure OleUninitialize;stdcall;external 'ole32.dll' name 'OleUninitialize'; procedure ReleaseStgMedium(_para1:LPSTGMEDIUM);stdcall;external 'ole32.dll' name 'ReleaseStgMedium'; function OleSetClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleSetClipboard'; function OleGetClipboard(out ppDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleGetClipboard'; function OleFlushClipboard:WINOLEAPI;stdcall;external 'ole32.dll' name 'OleFlushClipboard'; function OleIsCurrentClipboard(pDataObj:IDataObject):WINOLEAPI;stdcall;external 'ole32.dll' name 'OleIsCurrentClipboard'; function CreateStreamOnHGlobal(hGlobal:HGLOBAL; fDeleteOnRelease:BOOL;out stm:IStream):WINOLEAPI;stdcall;external 'ole32.dll' name 'CreateStreamOnHGlobal'; {$endif} �����������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/virtualtreeview_package.pas������������������������������0000644�0001750�0000144�00000000735�12014201074�025560� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit virtualtreeview_package; interface uses VirtualTrees, VTHeaderPopup, registervirtualtreeview, VTGraphics, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('registervirtualtreeview', @registervirtualtreeview.Register); end; initialization RegisterPackage('virtualtreeview_package', @Register); end. �����������������������������������doublecmd-0.7.1/components/virtualtreeview/virtualtreeview_package.lpk������������������������������0000644�0001750�0000144�00000004555�12140233030�025564� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="virtualtreeview_package"/> <AddToProjectUsesSection Value="True"/> <Author Value="Mike Lischke (LCL Port: Luiz Amrico)"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <IncludeFiles Value="include/intf/$(LCLWidgetType);units;include/intf"/> <OtherUnitFiles Value="units/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Virtual Treeview is an advanced component originally created for Delphi "/> <License Value=" Mozilla Public License 1.1 (MPL 1.1) or GNU Lesser General Public License "/> <Version Major="4" Minor="8" Release="7" Build="3"/> <Files Count="7"> <Item1> <Filename Value="virtualtrees.lrs"/> <Type Value="LRS"/> </Item1> <Item2> <Filename Value="VirtualTrees.pas"/> <UnitName Value="VirtualTrees"/> </Item2> <Item3> <Filename Value="VTHeaderPopup.pas"/> <UnitName Value="VTHeaderPopup"/> </Item3> <Item4> <Filename Value="registervirtualtreeview.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="registervirtualtreeview"/> </Item4> <Item5> <Filename Value="ideicons.lrs"/> <Type Value="LRS"/> </Item5> <Item6> <Filename Value="VTConfig.inc"/> <Type Value="Include"/> </Item6> <Item7> <Filename Value="VTGraphics.pas"/> <UnitName Value="VTGraphics"/> </Item7> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="lclextensions_package"/> <MinVersion Minor="5" Valid="True"/> </Item1> <Item2> <PackageName Value="LCL"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VTGraphics.pas�������������������������������������������0000644�0001750�0000144�00000001516�12140233030�022651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTGraphics; {$mode delphi} interface uses DelphiCompat, Types, LCLIntf, LCLType; type // Describes the mode how to blend pixels. TBlendMode = ( bmConstantAlpha, // apply given constant alpha bmPerPixelAlpha, // use alpha value of the source pixel bmMasterAlpha, // use alpha value of source pixel and multiply it with the constant alpha value bmConstantAlphaAndColor // blend the destination color with the given constant color und the constant alpha value ); procedure AlphaBlend(Source, Destination: HDC; const R: TRect; const Target: TPoint; Mode: TBlendMode; ConstantAlpha, Bias: Integer); function CalculateScanline(Bits: Pointer; Width, Height, Row: Integer): Pointer; function GetBitmapBitsFromBitmap(Bitmap: HBITMAP): Pointer; implementation {$i vtgraphicsi.inc} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/doublecmd.diff�������������������������������������������0000644�0001750�0000144�00000032653�12203745772�022755� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: VTConfig.inc =================================================================== --- VTConfig.inc (revision 2731) +++ VTConfig.inc (working copy) @@ -22,7 +22,7 @@ //Lazarus port options -{$define EnableOLE} +{.$define EnableOLE} {.$define EnableNativeTVM} {.$define EnablePrint} {.$define EnableNCFunctions} @@ -42,7 +42,7 @@ //under linux the performance is poor with threading enabled {$ifdef Windows} - {$define EnableThreadSupport} + {.$define EnableThreadSupport} {$endif} {$ifdef CPU64} {$define PACKARRAYPASCAL} Index: VirtualTrees.pas =================================================================== --- VirtualTrees.pas (revision 2731) +++ VirtualTrees.pas (working copy) @@ -745,6 +745,7 @@ toAutoHideButtons, // Node buttons are hidden when there are child nodes, but all are invisible. toAutoDeleteMovedNodes, // Delete nodes which where moved in a drag operation (if not directed otherwise). toDisableAutoscrollOnFocus, // Disable scrolling a node or column into view if it gets focused. + toDisableAutoscrollHorizontal, // Only autoscroll on focus vertically never horizontally toAutoChangeScale, // Change default node height automatically if the system's font scale is set to big fonts. toAutoFreeOnCollapse, // Frees any child node after a node has been collapsed (HasChildren flag stays there). toDisableAutoscrollOnEdit, // Do not center a node horizontally when it is edited. @@ -2018,7 +2019,7 @@ var Allowed: Boolean) of object; TVTDragOverEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; Shift: TShiftState; State: TDragState; const Pt: TPoint; Mode: TDropMode; var Effect: LongWord; var Accept: Boolean) of object; - TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; DataObject: IDataObject; + TVTDragDropEvent = procedure(Sender: TBaseVirtualTree; Source: TObject; {DataObject: IDataObject;} Formats: TFormatArray; Shift: TShiftState; const Pt: TPoint; var Effect: LongWord; Mode: TDropMode) of object; TVTRenderOLEDataEvent = procedure(Sender: TBaseVirtualTree; const FormatEtcIn: TFormatEtc; out Medium: TStgMedium; ForClipboard: Boolean; var Result: HRESULT) of object; @@ -2543,6 +2544,7 @@ procedure BeginOperation; function CalculateSelectionRect(X, Y: Integer): Boolean; virtual; function CanAutoScroll: Boolean; virtual; + function CanScroll(const ClientMousePos: TPoint): Boolean; virtual; function CanShowDragImage: Boolean; virtual; procedure Change(Node: PVirtualNode); virtual; procedure ChangeScale(M, D: Integer); override; @@ -3015,6 +3017,7 @@ function GetNextNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetNextSibling(Node: PVirtualNode): PVirtualNode; + function GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetNextVisibleSibling(Node: PVirtualNode): PVirtualNode; @@ -3033,6 +3036,7 @@ function GetPreviousNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSelected(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = False): PVirtualNode; function GetPreviousSibling(Node: PVirtualNode): PVirtualNode; + function GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; function GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleNoInit(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; function GetPreviousVisibleSibling(Node: PVirtualNode): PVirtualNode; @@ -13858,7 +13862,7 @@ FFocusedColumn := Value; if Assigned(FFocusedNode) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then begin - if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, True) then + if ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)) then InvalidateNode(FFocusedNode); end; @@ -15036,7 +15040,8 @@ LeaveStates := [tsHint]; if [tsWheelPanning, tsWheelScrolling] * FStates = [] then begin - KillTimer(Handle, ScrollTimer); + if HandleAllocated then + KillTimer(Handle, ScrollTimer); LeaveStates := LeaveStates + [tsScrollPending, tsScrolling]; end; DoStateChange([], LeaveStates); @@ -15660,7 +15665,7 @@ if (Shift = [ssCtrlOS]) and not ActAsGrid then begin ScrollIntoView(Node, toCenterScrollIntoView in FOptions.SelectionOptions, - not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions)); + not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); if (CharCode = VK_HOME) and not UseRightToLeftAlignment then SetOffsetX(0) else @@ -17879,7 +17884,7 @@ if hoVisible in FHeader.FOptions then Dec(Y, FHeader.Height); - if (Y > 0) and (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then + if (Y < Integer(FDefaultNodeHeight)) and (FOffsetY <> 0) then Include(Result, sdUp); //todo: probably the code below is bug due to poor timeGetTime implementation @@ -18424,7 +18429,7 @@ begin if Assigned(FOnDragDrop) then - FOnDragDrop(Self, Source, DataObject, Formats, Shift, Pt, Effect, Mode); + FOnDragDrop(Self, Source, {DataObject, }Formats, Shift, Pt, Effect, Mode); end; //---------------------------------------------------------------------------------------------------------------------- @@ -18576,7 +18581,7 @@ InvalidateNode(FFocusedNode); if (FUpdateCount = 0) and not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions) then ScrollIntoView(FFocusedNode, (toCenterScrollIntoView in FOptions.SelectionOptions) and - (MouseButtonDown * FStates = []), True); + (MouseButtonDown * FStates = []), not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); end; // Reset range anchor if necessary. @@ -19392,7 +19397,7 @@ ClientP := ScreenToClient(P); Panning := [tsWheelPanning, tsWheelScrolling] * FStates <> []; - if IsMouseSelecting or InRect or Panning then + if IsMouseSelecting or InRect or Panning or CanScroll(ClientP) then begin DeltaX := 0; DeltaY := 0; @@ -21111,7 +21116,7 @@ if NewNode or NewColumn then begin ScrollIntoView(FFocusedNode, toCenterScrollIntoView in FOptions.SelectionOptions, - not (toDisableAutoscrollOnFocus in FOptions.FAutoOptions)); + not (toDisableAutoscrollHorizontal in FOptions.FAutoOptions)); DoFocusChange(FFocusedNode, FFocusedColumn); end; end; @@ -21809,7 +21814,7 @@ begin if Y < 0 then - Y := 0; + Exit(nil); AbsolutePos := Y; if Relative then @@ -24335,6 +24340,12 @@ DoCanEdit(Node, Column, Result); end; +function TBaseVirtualTree.CanScroll(const ClientMousePos: TPoint): Boolean; +// Determines whether auto scrolling can occur based on current mouse cursor position. +begin + Result := False; +end; + //---------------------------------------------------------------------------------------------------------------------- procedure TBaseVirtualTree.Clear; @@ -26446,6 +26457,22 @@ //---------------------------------------------------------------------------------------------------------------------- +function TBaseVirtualTree.GetNextSiblingNoInit(Node: PVirtualNode): PVirtualNode; + +// Returns the next sibling of Node performing no initialization. + +begin + Result := Node; + if Assigned(Result) then + begin + Assert(Result <> FRoot, 'Node must not be the hidden root node.'); + + Result := Result.NextSibling; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + function TBaseVirtualTree.GetNextVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns next node in tree, with regard to Node, which is visible. @@ -27064,6 +27091,22 @@ //---------------------------------------------------------------------------------------------------------------------- +function TBaseVirtualTree.GetPreviousSiblingNoInit(Node: PVirtualNode): PVirtualNode; + +// Get next sibling of Node, performes no initialization. + +begin + Result := Node; + if Assigned(Result) then + begin + Assert(Result <> FRoot, 'Node must not be the hidden root node.'); + + Result := Result.PrevSibling; + end; +end; + +//---------------------------------------------------------------------------------------------------------------------- + function TBaseVirtualTree.GetPreviousVisible(Node: PVirtualNode; ConsiderChildrenAbove: Boolean = True): PVirtualNode; // Returns the previous node in tree, with regard to Node, which is visible. @@ -29252,6 +29295,7 @@ HScrollBarVisible: Boolean; ScrolledVertically, ScrolledHorizontally: Boolean; + OffY, OffYM: Integer; begin //todo: minimize calls to ClientHeight and ClientWidth @@ -29296,7 +29340,14 @@ if Center then SetOffsetY(FOffsetY - R.Bottom + ClientHeight div 2) else - SetOffsetY(FOffsetY - R.Bottom + ClientHeight); + begin + // Leave additional space at the bottom to have scrollrect start with full row. + OffY := FOffsetY - R.Bottom + ClientHeight; + OffYM := OffY mod DefaultNodeHeight; + if OffYM <> 0 then + OffY := OffY - (DefaultNodeHeight + OffYM); + SetOffsetY(OffY); + end; // When scrolling up and the horizontal scroll appears because of the operation // then we have to move up the node the horizontal scrollbar's height too // in order to avoid that the scroll bar hides the node which we wanted to have in view. @@ -29350,10 +29401,13 @@ end else begin - if ColumnRight > ClientWidth then - NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) - else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then - NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); + if FHeader.Columns.Count > 1 then + begin + if ColumnRight > ClientWidth then + NewOffset := FEffectiveOffsetX + (ColumnRight - ClientWidth) + else if ColumnLeft < Header.Columns.GetVisibleFixedWidth then + NewOffset := FEffectiveOffsetX - (Header.Columns.GetVisibleFixedWidth - ColumnLeft); + end; if NewOffset <> FEffectiveOffsetX then begin if UseRightToLeftAlignment then Index: include/intf/qt/vtgraphicsi.inc =================================================================== --- include/intf/qt/vtgraphicsi.inc (revision 2731) +++ include/intf/qt/vtgraphicsi.inc (working copy) @@ -284,7 +284,7 @@ // Load MM4 with 128 to allow for saturated biasing. MOV EAX, 128 - DB $0F, $6E, AlphaBlendLineConstant$E0 /// MOVD MM4, EAX + DB $0F, $6E, $E0 /// MOVD MM4, EAX DB $0F, $61, $E4 /// PUNPCKLWD MM4, MM4 DB $0F, $62, $E4 /// PUNPCKLDQ MM4, MM4 Index: units/carbon/fakemmsystem.pas =================================================================== --- units/carbon/fakemmsystem.pas (revision 2731) +++ units/carbon/fakemmsystem.pas (working copy) @@ -15,6 +15,9 @@ implementation +uses + LCLIntf; + function timeBeginPeriod(x1: DWord): DWord; begin @@ -26,12 +29,8 @@ end; function timeGetTime: DWORD; -var - ATime: TSystemTime; begin - //todo: properly implement - GetLocalTime(ATime); - Result := ATime.MilliSecond; + Result := GetTickCount; end; end. Index: units/qt/fakemmsystem.pas =================================================================== --- units/qt/fakemmsystem.pas (revision 2731) +++ units/qt/fakemmsystem.pas (working copy) @@ -15,6 +15,9 @@ implementation +uses + LCLIntf; + function timeBeginPeriod(x1: DWord): DWord; begin @@ -26,12 +29,8 @@ end; function timeGetTime: DWORD; -var - ATime: TSystemTime; begin - //todo: properly implement - GetLocalTime(ATime); - Result := ATime.MilliSecond; + Result := GetTickCount; end; end. Index: units/win32/virtualpanningwindow.pas =================================================================== --- units/win32/virtualpanningwindow.pas (revision 2731) +++ units/win32/virtualpanningwindow.pas (working copy) @@ -41,9 +41,10 @@ PanningObject:=TVirtualPanningWindow(GetWindowLongPtrW(Window,GWL_USERDATA)); if Assigned(PanningObject) then PanningObject.HandlePaintMessage; + Result := 0; end else - DefWindowProc(Window,Msg,WPara,LPara); + Result := DefWindowProc(Window,Msg,WPara,LPara); end; var @@ -87,8 +88,7 @@ with Position do FHandle := CreateWindowEx(WS_EX_TOOLWINDOW, PanningWindowClass.lpszClassName, nil, WS_POPUP, X - 16, Y - 16, 32, 32, OwnerHandle, 0, HInstance, nil); - //todo use SetWindowLongPtr later - SetWindowLong(FHandle,GWL_USERDATA,PtrInt(Self)); + SetWindowLongPtr(FHandle,GWL_USERDATA,LONG_PTR(Self)); FImage := TBitmap.Create; end; �������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/readme.txt�����������������������������������������������0000644�0001750�0000144�00000000331�12014201074�022125� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Virtual Tree View from Lazarus CCR https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/virtualtreeview-new/branches/4.8 Rev. 2200 Some modifications done for Double Commander (see doublecmd.diff). �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VTAccessibility.pas��������������������������������������0000644�0001750�0000144�00000063440�12014201074�023707� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTAccessibility; // This unit implements iAccessible interfaces for the VirtualTree visual components // and the currently focused node. // // Written by Marco Zehe. (c) 2007 interface uses Windows, Classes, ActiveX, oleacc, VirtualTrees, VTAccessibilityFactory, Controls; type TVirtualTreeAccessibility = class(TInterfacedObject, IDispatch, IAccessible) private FVirtualTree: TVirtualStringTree; public { IAccessibility } function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall; function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall; function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall; function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall; function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall; function Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; stdcall; function Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant; out pidTopic: Integer): HResult; stdcall; function Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; stdcall; function Get_accFocus(out pvarChild: OleVariant): HResult; stdcall; function Get_accSelection(out pvarChildren: OleVariant): HResult; stdcall; function Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; stdcall; function accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; stdcall; function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall; function accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; stdcall; function accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; stdcall; function accDoDefaultAction(varChild: OleVariant): HResult; stdcall; function Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall; function Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; stdcall; {IDispatch} function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount: Integer; LocaleID: Integer; DispIDs: Pointer): HRESULT; stdcall; function GetTypeInfo(Index: Integer; LocaleID: Integer; out TypeInfo): HRESULT; stdcall; function GetTypeInfoCount(out Count: Integer): HRESULT; stdcall; function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult: Pointer; ExcepInfo: Pointer; ArgErr: Pointer): HRESULT; stdcall; constructor Create(VirtualTree: TVirtualStringTree); end; TVirtualTreeItemAccessibility = class(TVirtualTreeAccessibility, IAccessible) public { IAccessibility } function Get_accParent(out ppdispParent: IDispatch): HResult; stdcall; function Get_accChildCount(out pcountChildren: Integer): HResult; stdcall; function Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; stdcall; function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; function Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; stdcall; function Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; stdcall; function accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; stdcall; constructor Create(VirtualTree: TVirtualStringTree); end; TVTMultiColumnItemAccessibility = class(TVirtualTreeItemAccessibility, IAccessible) private function GetItemDescription(varChild: OleVariant; out pszDescription: WideString; IncludeMainColumn: boolean): HResult; stdcall; public { IAccessibility } function Get_accName(varChild: OleVariant; out pszName: WideString): HResult; stdcall; function Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; stdcall; end; TVTDefaultAccessibleProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTDefaultAccessibleItemProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTMultiColumnAccessibleItemProvider = class(TInterfacedObject, IVTAccessibleProvider) function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; implementation uses Variants, SysUtils, Types, Forms; { TVirtualTreeAccessibility } //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accDoDefaultAction(varChild: OleVariant): HResult; // a default action is not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accHitTest(xLeft: Integer; yTop: Integer; out pvarChild: OleVariant): HResult; // returns the iAccessible object at the given point, if applicable. var Pt: TPoint; HitInfo: THitInfo; begin Result := S_FALSE; if FVirtualTree <> nil then begin // VariantInit(pvarChild); // TVarData(pvarChild).VType := VT_I4; Pt := fVirtualTree.ScreenToClient(Point(xLeft, yTop)); if fVirtualTree.FocusedNode <> nil then begin fVirtualTree.GetHitTestInfoAt(xLeft, yTop, false, HitInfo); if FVirtualTree.FocusedNode = HitInfo.HitNode then begin pvarChild := FVirtualTree.AccessibleItem; Result := S_OK; exit; end; end; if PtInRect(FVirtualTree.BoundsRect, Pt) then begin pvarChild := CHILDID_SELF; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accLocation(out pxLeft: Integer; out pyTop: Integer; out pcxWidth: Integer; out pcyHeight: Integer; varChild: OleVariant): HResult; // returns the location of the VirtualStringTree object. var P: TPoint; begin Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin P := FVirtualTree.ClientToScreen(FVirtualTree.ClientRect.TopLeft); pxLeft := P.X; pyTop := P.Y; pcxWidth := FVirtualTree.Width; pcyHeight := FVirtualTree.Height; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accNavigate(navDir: Integer; varStart: OleVariant; out pvarEndUpAt: OleVariant): HResult; // This is not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accSelection(out pvarChildren: OleVariant): HResult; // returns the selected child ID, if any. begin Result := s_false; if FVirtualTree <> nil then if fVirtualTree.FocusedNode <> nil then begin pvarChildren := 1; result := s_OK; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TVirtualTreeAccessibility.Create(VirtualTree: TVirtualStringTree); // assigns the parent and current fields, and lets the control's iAccessible object know its address. begin fVirtualTree := VirtualTree; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HRESULT; // Not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.GetTypeInfoCount( out Count: Integer): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; // returns the iAccessible child, whicfh represents the focused item. begin if varChild = CHILDID_SELF then begin ppdispChild := FVirtualTree.AccessibleItem; Result := S_OK; end else Result := E_INVALIDARG end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accChildCount(out pcountChildren: Integer): HResult; // Returns the number 1 for the one child: The focused item. begin pcountChildren := 1; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accDefaultAction(varChild: OleVariant; out pszDefaultAction: WideString): HResult; // Not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; // returns the hint of the control, if assigned. begin pszDescription := ''; Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then pszDescription := GetLongHint(fVirtualTree.Hint); end; if Length(pszDescription) > 0 then Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accFocus(out pvarChild: OleVariant): HResult; // returns the child ID of 1, if assigned. begin Result := s_false; if fVirtualTree <> nil then begin if FVirtualTree.FocusedNode <> nil then begin pvarChild := fVirtualTree.AccessibleItem; result := s_OK; end else begin pvarChild := childid_self; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accHelp(varChild: OleVariant; out pszHelp: WideString): HResult; // Not supported. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accHelpTopic(out pszHelpFile: WideString; varChild: OleVariant; out pidTopic: Integer): HResult; // Returns the HelpContext ID, if present. begin pszHelpFile := ''; pidTopic := 0; Result := S_OK; if varChild = CHILDID_SELF then if FVirtualTree <> nil then begin pszHelpFile := Application.HelpFile; pidTopic := FVirtualTree.HelpContext; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accKeyboardShortcut(varChild: OleVariant; out pszKeyboardShortcut: WideString): HResult; // Not supported. begin pszKeyboardShortcut := ''; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; // if set, returns the new published AccessibleName property. // otherwise, returns the default text. begin pszName := ''; Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin if FVirtualTree.AccessibleName <> '' then pszName := FVirtualTree.AccessibleName else PSZName := FVirtualTree.DefaultText; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accParent(out ppdispParent: IDispatch): HResult; // Returns false, the tree itself does not have a parent. begin ppdispParent := nil; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; // tells MSAA that it is a TreeView. begin Result := S_OK; // VariantInit(pvarRole); // TVarData(pvarRole).VType := VT_I4; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then pvarRole := ROLE_SYSTEM_OUTLINE end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.accSelect(flagsSelect: Integer; varChild: OleVariant): HResult; // since we're not supporting more than one item, this is not supported currently. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; // returns the state of the control. const IsEnabled: array[Boolean] of Integer = (STATE_SYSTEM_UNAVAILABLE, 0); HasPopup: array[Boolean] of Integer = (0, STATE_SYSTEM_HASPOPUP); IsVisible: array[Boolean] of Integer = (STATE_SYSTEM_INVISIBLE, 0); begin Result := S_OK; // VariantInit(pvarState); // TVarData(pvarState).VType := VT_I4; if varChild = CHILDID_SELF then begin if FVirtualTree <> nil then begin pvarState := STATE_SYSTEM_FOCUSED or STATE_SYSTEM_FOCUSABLE or STATE_SYSTEM_HOTTRACKED; pvarState := pvarState or IsVisible[FVirtualTree.Visible]; pvarState := pvarState or IsEnabled[FVirtualTree.Enabled]; end else Result := E_INVALIDARG; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; // the TreeView control itself does not have a value, returning false here. begin pszValue := ''; Result := S_FALSE;//DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HRESULT; // not supported. begin Result := E_NOTIMPL; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Set_accName(varChild: OleVariant; const pszName: WideString): HResult; stdcall; // not supported. begin Result := DISP_E_MEMBERNOTFOUND end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeAccessibility.Set_accValue(varChild: OleVariant; const pszValue: WideString): HResult; // not supported. begin Result := DISP_E_MEMBERNOTFOUND end; { TVirtualTreeItemAccessibility } //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.accLocation(out pxLeft, pyTop, pcxWidth, pcyHeight: Integer; varChild: OleVariant): HResult; // returns the location of the current accessible item. var P: TPoint; DisplayRect: TRect; begin Result := S_FALSE; if varChild = CHILDID_SELF then begin if FVirtualTree.FocusedNode <> nil then begin DisplayRect := FVirtualTree.GetDisplayRect(FVirtualTree.FocusedNode, -1, TRUE, FALSE); P := FVirtualTree.ClientToScreen(DisplayRect.TopLeft); pxLeft := P.X; pyTop := P.Y; pcxWidth := DisplayRect.Right - DisplayRect.Left; pcyHeight := DisplayRect.Bottom - DisplayRect.Top; Result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- constructor TVirtualTreeItemAccessibility.Create(VirtualTree: TVirtualStringTree); // sets up the parent/child relationship. begin fVirtualTree := VirtualTree; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accChild(varChild: OleVariant; out ppdispChild: IDispatch): HResult; // the item does not have children. Returning false. begin ppdispChild := nil; Result := S_FALSE; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accChildCount(out pcountChildren: Integer): HResult; // the item itself does not have children, returning 0. begin pcountChildren := 0; Result := S_OK; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accDescription(varChild: OleVariant; out pszDescription: WideString): HResult; // not supported for an item. begin Result := DISP_E_MEMBERNOTFOUND; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; // the name is the node's caption. begin pszName := ''; Result := S_FALSE; if varChild = childid_self then begin if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin pszName := FVirtualTree.Text[FVirtualTree.FocusedNode, FVirtualTree.Header.MainColumn]; result := S_OK; end else begin PSZName := FVirtualTree.DefaultText; result := S_OK; end; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accParent(out ppdispParent: IDispatch): HResult; // tells MSAA that the VritualStringTree is its parent. begin result := S_FALSE; if FVirtualTree <> nil then begin ppdispParent := FVirtualTree.Accessible; Result := S_OK; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accRole(varChild: OleVariant; out pvarRole: OleVariant): HResult; // tells MSAA that it is a TreeView item as opposed to the TreeView itself. begin Result := S_OK; // VariantInit(pvarRole); // TVarData(pvarRole).VType := VT_I4; if varChild = childid_self then begin if FVirtualTree <> nil then pvarRole := ROLE_SYSTEM_OUTLINEITEM end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accState(varChild: OleVariant; out pvarState: OleVariant): HResult; // Tells MSAA the state the item is in. const IsEnabled: array[Boolean] of Integer = (STATE_SYSTEM_UNAVAILABLE, 0); HasPopup: array[Boolean] of Integer = (0, STATE_SYSTEM_HASPOPUP); IsVisible: array[Boolean] of Integer = (STATE_SYSTEM_INVISIBLE, 0); IsChecked: array[Boolean] of Integer = (0, STATE_SYSTEM_CHECKED); IsExpanded: array[Boolean] of Integer = (0, STATE_SYSTEM_EXPANDED); IsCollapsed: array[Boolean] of Integer = (0, STATE_SYSTEM_COLLAPSED); begin Result := S_OK; // VariantInit(pvarState); // TVarData(pvarState).VType := VT_I4; if varChild = childid_self then begin if FVirtualTree <> nil then begin pvarState := STATE_SYSTEM_FOCUSED or STATE_SYSTEM_FOCUSABLE or STATE_SYSTEM_HOTTRACKED; pvarState := pvarState or IsVisible[FVirtualTree.Visible]; pvarState := pvarState or IsEnabled[FVirtualTree.Enabled]; if fVirtualTree.FocusedNode <> nil then begin pvarState := pvarState or IsChecked[csCheckedNormal = FVirtualTree.FocusedNode.CheckState]; pvarState := pvarState or IsExpanded[VSExpanded in FVirtualTree.FocusedNode.States]; if not (vsExpanded in FVirtualTree.FocusedNode.States) then pvarState:= PvarState or IsCollapsed[vsHasChildren in FVirtualTree.FocusedNode.States]; end; end else Result := E_INVALIDARG; end; end; //---------------------------------------------------------------------------------------------------------------------- function TVirtualTreeItemAccessibility.Get_accValue(varChild: OleVariant; out pszValue: WideString): HResult; // for a TreeView item, the value is the nesting level number, 0-based. begin pszValue := ''; Result := S_FALSE;//DISP_E_MEMBERNOTFOUND; if varChild = childid_self then if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin PSZValue := IntToStr(FVirtualTree.GetNodeLevel(FVirtualTree.FocusedNode)); result := S_OK; end; end; { TVTMultiColumnItemAccessibility } function TVTMultiColumnItemAccessibility.GetItemDescription( varChild: OleVariant; out pszDescription: WideString; IncludeMainColumn: boolean): HResult; var I: Integer; sTemp: WideString; begin pszDescription := ''; Result := S_FALSE; if varChild = childid_self then begin if FVirtualTree <> nil then if FVirtualTree.FocusedNode <> nil then begin if IncludeMainColumn then pszDescription := FVirtualTree.Text[FVirtualTree.FocusedNode, FVirtualTree.Header.MainColumn] +'; '; for I := 0 to FVirtualTree.Header.Columns.Count - 1 do if FVirtualTree.Header.MainColumn <> I then begin sTemp := FVirtualTree.Text[FVirtualTree.FocusedNode, I]; if sTemp <> '' then pszDescription := pszDescription +FVirtualTree.Header.Columns[I].Text +': ' +sTemp +'; '; end; if pszDescription <> '' then if pszDescription[Length(pszDescription)-1] = ';' then Delete(pszDescription, length(pszDescription)-1, 2); result := S_OK; end else begin PSZDescription := FVirtualTree.DefaultText; result := S_OK; end; end; end; function TVTMultiColumnItemAccessibility.Get_accDescription( varChild: OleVariant; out pszDescription: WideString): HResult; begin result := GetItemDescription(varChild, pszDescription, false) end; function TVTMultiColumnItemAccessibility.Get_accName(varChild: OleVariant; out pszName: WideString): HResult; begin result := GetItemDescription(varChild, pszName, true) end; { TVTDefaultAccessibleProvider } function TVTDefaultAccessibleProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := TVirtualTreeAccessibility.Create(TVirtualStringTree(ATree)); end; { TVTDefaultAccessibleItemProvider } function TVTDefaultAccessibleItemProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := TVirtualTreeItemAccessibility.Create(TVirtualStringTree(ATree)); end; { TVTMultiColumnAccessibleItemProvider } function TVTMultiColumnAccessibleItemProvider.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; begin result := nil; if TVirtualStringTree(ATree).Header.UseColumns then result := TVTMultiColumnItemAccessibility.Create(TVirtualStringTree(ATree)); end; var IDefaultAccessibleProvider: TVTDefaultAccessibleProvider; IDefaultAccessibleItemProvider: TVTDefaultAccessibleItemProvider; IMultiColumnAccessibleProvider: TVTMultiColumnAccessibleItemProvider; initialization if VTAccessibleFactory = nil then VTAccessibleFactory := TVTAccessibilityFactory.Create; if IDefaultAccessibleProvider = nil then begin IDefaultAccessibleProvider := TVTDefaultAccessibleProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IDefaultAccessibleProvider); end; if IDefaultAccessibleItemProvider = nil then begin IDefaultAccessibleItemProvider := TVTDefaultAccessibleItemProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IDefaultAccessibleItemProvider); end; if IMultiColumnAccessibleProvider = nil then begin IMultiColumnAccessibleProvider := TVTMultiColumnAccessibleItemProvider.Create; VTAccessibleFactory.RegisterAccessibleProvider(IMultiColumnAccessibleProvider); end; finalization if VTAccessibleFactory <> nil then begin VTAccessibleFactory.UnRegisterAccessibleProvider(IMultiColumnAccessibleProvider); IMultiColumnAccessibleProvider := nil; VTAccessibleFactory.UnRegisterAccessibleProvider(IDefaultAccessibleItemProvider); IDefaultAccessibleItemProvider := nil; VTAccessibleFactory.UnRegisterAccessibleProvider(IDefaultAccessibleProvider); IDefaultAccessibleProvider := nil; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VTHeaderPopup.pas����������������������������������������0000644�0001750�0000144�00000021312�12014201074�023324� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTHeaderPopup; //---------------------------------------------------------------------------------------------------------------------- // The contents of this file are 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/MPL/ // // Alternatively, you may redistribute this library, use and/or modify it under the terms of the // GNU Lesser General Public License as published by the Free Software Foundation; // either version 2.1 of the License, or (at your option) any later version. // You may obtain a copy of the LGPL at http://www.gnu.org/copyleft/. // // 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. // // The Original Code is VTHeaderPopup.pas. // // The Initial Developer of the Original Code is Ralf Junker <delphi@zeitungsjunge.de>. All Rights Reserved. // // September 2004: // - Bug fix: TVTHeaderPopupMenu.OnMenuItemClick used the wrong Tag member for the event. // // Modified 12 Dec 2003 by Ralf Junker <delphi@zeitungsjunge.de>. // - Added missing default storage specifier for Options property. // - To avoid mixing up image lists of different trees sharing the same header // popup, set the popup's image list to nil if hoShowImages is not in the // tree's header options. // - Added an additional check for the PopupComponent property before casting // it hardly to a Virtual Treeview in OnMenuItemClick. See entry 31 Mar 2003. // // Modified 14 Sep 2003 by Mike Lischke <public@delphi-gems.com>. // - Renamed event type name to be consistent with other event types (e.g. used in VT). // - Added event for hiding/showing columns. // - DoXXX method are now virtual. // - Conditional code rearrangement to get back Ctrl+Shift+Up/Down navigation. // // Modified 31 Mar 2003 by Mike Lischke <public@soft-gems.net>. // - Added a check for the PopupComponent property before casting it hardly to // a Virtual Treeview. People might (accidentally) misuse the header popup. // // Modified 20 Oct 2002 by Borut Maricic <borut.maricic@pobox.com>. // - Added the possibility to use Troy Wolbrink's Unicode aware popup menu. // Define the compiler symbol TNT to enable it. You can get Troy's Unicode // controls collection from http://home.ccci.org/wolbrink/tnt/delphi_unicode_controls.htm. // // Modified 24 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. // - Fixed a bug where the OnAddHeaderPopupItem would interfere with // poAllowHideAll options. // - All column indexes now consistently use TColumnIndex (instead of Integer). // // Modified 23 Feb 2002 by Ralf Junker <delphi@zeitungsjunge.de>. // - Added option to show menu items in the same order as the columns or in // original order. // - Added option to prevent the user to hide all columns. // // Modified 17 Feb 2002 by Jim Kueneman <jimdk@mindspring.com>. // - Added the event to filter the items as they are added to the menu. //---------------------------------------------------------------------------------------------------------------------- {$mode delphi} interface uses {$ifdef TNT} TntMenus, {$else} Menus, {$endif TNT} VirtualTrees; type TVTHeaderPopupOption = ( poOriginalOrder, // Show menu items in original column order as they were added to the tree. poAllowHideAll // Allows to hide all columns, including the last one. ); TVTHeaderPopupOptions = set of TVTHeaderPopupOption; TAddPopupItemType = ( apNormal, apDisabled, apHidden ); TAddHeaderPopupItemEvent = procedure(const Sender: TBaseVirtualTree; const Column: TColumnIndex; var Cmd: TAddPopupItemType) of object; TColumnChangeEvent = procedure(const Sender: TBaseVirtualTree; const Column: TColumnIndex; Visible: Boolean) of object; {$ifdef TNT} TVTMenuItem = TTntMenuItem; {$else} TVTMenuItem = TMenuItem; {$endif} {$ifdef TNT} TVTHeaderPopupMenu = class(TTntPopupMenu) {$else} TVTHeaderPopupMenu = class(TPopupMenu) {$endif} private FOptions: TVTHeaderPopupOptions; FOnAddHeaderPopupItem: TAddHeaderPopupItemEvent; FOnColumnChange: TColumnChangeEvent; protected procedure DoAddHeaderPopupItem(const Column: TColumnIndex; out Cmd: TAddPopupItemType); virtual; procedure DoColumnChange(Column: TColumnIndex; Visible: Boolean); virtual; procedure OnMenuItemClick(Sender: TObject); public procedure Popup(x, y: Integer); override; published property Options: TVTHeaderPopupOptions read FOptions write FOptions default []; property OnAddHeaderPopupItem: TAddHeaderPopupItemEvent read FOnAddHeaderPopupItem write FOnAddHeaderPopupItem; property OnColumnChange: TColumnChangeEvent read FOnColumnChange write FOnColumnChange; end; //---------------------------------------------------------------------------------------------------------------------- implementation uses {$ifdef TNT} TnTClasses {$else} Classes {$endif TNT}; type TVirtualTreeCast = class(TBaseVirtualTree); // Necessary to make the header accessible. //----------------- TVTHeaderPopupMenu --------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.DoAddHeaderPopupItem(const Column: TColumnIndex; out Cmd: TAddPopupItemType); begin Cmd := apNormal; if Assigned(FOnAddHeaderPopupItem) then FOnAddHeaderPopupItem(TVirtualTreeCast(PopupComponent), Column, Cmd); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.DoColumnChange(Column: TColumnIndex; Visible: Boolean); begin if Assigned(FOnColumnChange) then FOnColumnChange(TVirtualTreeCast(PopupComponent), Column, Visible); end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.OnMenuItemClick(Sender: TObject); begin if Assigned(PopupComponent) and (PopupComponent is TBaseVirtualTree) then with TVTMenuItem(Sender), TVirtualTreeCast(PopupComponent).Header.Columns.Items[Tag] do begin if Checked then Options := Options - [coVisible] else Options := Options + [coVisible]; DoColumnChange(TVTMenuItem(Sender).Tag, not Checked); end; end; //---------------------------------------------------------------------------------------------------------------------- procedure TVTHeaderPopupMenu.Popup(x, y: Integer); var I: Integer; ColPos: TColumnPosition; ColIdx: TColumnIndex; NewMenuItem: TVTMenuItem; Cmd: TAddPopupItemType; VisibleCounter: Cardinal; VisibleItem: TVTMenuItem; begin if Assigned(PopupComponent) and (PopupComponent is TBaseVirtualTree) then begin // Delete existing menu items. I := Items.Count; while I > 0 do begin Dec(I); Items[I].Free; end; // Add column menu items. with TVirtualTreeCast(PopupComponent).Header do begin if hoShowImages in Options then Self.Images := Images else // Remove a possible reference to image list of another tree previously assigned. Self.Images := nil; VisibleItem := nil; VisibleCounter := 0; for ColPos := 0 to Columns.Count - 1 do begin if poOriginalOrder in FOptions then ColIdx := ColPos else ColIdx := Columns.ColumnFromPosition(ColPos); with Columns[ColIdx] do begin if coVisible in Options then Inc(VisibleCounter); DoAddHeaderPopupItem(ColIdx, Cmd); if Cmd <> apHidden then begin NewMenuItem := TVTMenuItem.Create(Self); NewMenuItem.Tag := ColIdx; NewMenuItem.Caption := Text; NewMenuItem.Hint := Hint; NewMenuItem.ImageIndex := ImageIndex; NewMenuItem.Checked := coVisible in Options; NewMenuItem.OnClick := OnMenuItemClick; if Cmd = apDisabled then NewMenuItem.Enabled := False else if coVisible in Options then VisibleItem := NewMenuItem; Items.Add(NewMenuItem); end; end; end; // Conditionally disable menu item of last enabled column. if (VisibleCounter = 1) and (VisibleItem <> nil) and not (poAllowHideAll in FOptions) then VisibleItem.Enabled := False; end; end; inherited; end; //---------------------------------------------------------------------------------------------------------------------- end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/lclconstants.inc�����������������������������������������0000644�0001750�0000144�00000007501�12014201074�023337� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Message constants that are not defined in LCL WM_APP = $8000; // ExtTextOut Options ETO_RTLREADING = 128; //DrawText options DT_RTLREADING = 131072; // Clipboard constants CF_BITMAP = 2; CF_DIB = 8; CF_PALETTE = 9; CF_ENHMETAFILE = 14; CF_METAFILEPICT = 3; CF_OEMTEXT = 7; CF_TEXT = 1; CF_UNICODETEXT = 13; CF_DIF = 5; CF_DSPBITMAP = 130; CF_DSPENHMETAFILE = 142; CF_DSPMETAFILEPICT = 131; CF_DSPTEXT = 129; CF_GDIOBJFIRST = 768; CF_GDIOBJLAST = 1023; CF_HDROP = 15; CF_LOCALE = 16; CF_OWNERDISPLAY = 128; CF_PENDATA = 10; CF_PRIVATEFIRST = 512; CF_PRIVATELAST = 767; CF_RIFF = 11; CF_SYLK = 4; CF_WAVE = 12; CF_TIFF = 6; CF_MAX = 17; // Win32 colors CLR_NONE = $ffffffff; CLR_DEFAULT = $ff000000; //DrawFrameControl constants DFCS_HOT = $1000; //Thread support //This values is for win32, how about others?? INFINITE = $FFFFFFFF; //OLE Support E_OUTOFMEMORY = HRESULT($8007000E); E_INVALIDARG = HRESULT($80070057); E_NOINTERFACE = HRESULT($80004002); E_POINTER = HRESULT($80004003); E_HANDLE = HRESULT($80070006); E_ABORT = HRESULT($80004004); E_FAIL = HRESULT($80004005); E_ACCESSDENIED = HRESULT($80070005); DV_E_TYMED = HRESULT($80040069); DV_E_CLIPFORMAT = HRESULT($8004006A); DV_E_LINDEX = HRESULT($80040068); DV_E_DVASPECT = HRESULT($8004006B); OLE_E_ADVISENOTSUPPORTED = HRESULT($80040003); OLE_S_USEREG = HRESULT($00040000); DATA_S_SAMEFORMATETC = HRESULT($00040130); DRAGDROP_S_DROP = HRESULT($00040100); DRAGDROP_S_CANCEL = HRESULT($00040101); DRAGDROP_S_USEDEFAULTCURSORS = HRESULT($00040102); NOERROR = 0; SPI_GETDRAGFULLWINDOWS = 38; // windows management SWP_HIDEWINDOW = 128; SWP_SHOWWINDOW = 64; //Imagelists ILD_NORMAL = 0; // Set WindowPos SWP_FRAMECHANGED = 32; SWP_NOOWNERZORDER = 512; SWP_NOSENDCHANGING = 1024; { RedrawWindow } RDW_ERASE = 4; RDW_FRAME = 1024; RDW_INTERNALPAINT = 2; RDW_INVALIDATE = 1; RDW_NOERASE = 32; RDW_NOFRAME = 2048; RDW_NOINTERNALPAINT = 16; RDW_VALIDATE = 8; RDW_ERASENOW = 512; RDW_UPDATENOW = 256; RDW_ALLCHILDREN = 128; RDW_NOCHILDREN = 64; //SetRedraw WM_SETREDRAW = 11; //Dummy CM_PARENTFONTCHANGED = 1999; //Wheel WHEEL_DELTA = 120; WHEEL_PAGESCROLL = High(DWord); SPI_GETWHEELSCROLLLINES = 104; //MultiByte MB_USEGLYPHCHARS = 4; LOCALE_IDEFAULTANSICODEPAGE = 4100; //Image list ILD_TRANSPARENT = $00000001; ILD_MASK = $00000010; ILD_IMAGE = $00000020; ILD_ROP = $00000040; ILD_BLEND25 = $00000002; ILD_BLEND50 = $00000004; ILD_OVERLAYMASK = $00000F00; { GetDCEx } DCX_WINDOW = $1; DCX_CACHE = $2; DCX_PARENTCLIP = $20; DCX_CLIPSIBLINGS = $10; DCX_CLIPCHILDREN = $8; DCX_NORESETATTRS = $4; DCX_LOCKWINDOWUPDATE = $400; DCX_EXCLUDERGN = $40; DCX_INTERSECTRGN = $80; DCX_VALIDATE = $200000; SCantWriteResourceStreamError = 'CantWriteResourceStreamError'; //command EN_UPDATE = 1024; ES_AUTOHSCROLL = $80; ES_AUTOVSCROLL = $40; ES_CENTER = $1; ES_LEFT = 0; ES_LOWERCASE = $10; ES_MULTILINE = $4; ES_NOHIDESEL = $100; EM_SETRECTNP = 180; DT_END_ELLIPSIS = 32768; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/virtualtreeview/VTAccessibilityFactory.pas�������������������������������0000644�0001750�0000144�00000007557�12014201074�025246� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit VTAccessibilityFactory; // class to create IAccessibles for the tree passed into it. // If not already assigned, creates IAccessibles for the tree itself // and the focused item // the tree accessible is returned when the tree receives an WM_GETOBJECT message // the AccessibleItem is returned when the Accessible is being asked for the first child // To create your own IAccessibles, use the VTStandardAccessible unit as a reference, // and assign your Accessibles to the variables in tthe unit's initialization. // You only need to add the unit to your project, and voil, you have an accessible string tree! // // Written by Marco Zehe. (c) 2007 interface uses Classes, oleacc, VirtualTrees; type IVTAccessibleProvider = interface function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; end; TVTAccessibilityFactory = class(TObject) private FAccessibleProviders: TInterfaceList; public constructor Create; destructor Destroy; override; function CreateIAccessible(ATree: TBaseVirtualTree): IAccessible; procedure RegisterAccessibleProvider(AProvider: IVTAccessibleProvider); procedure UnRegisterAccessibleProvider(AProvider: IVTAccessibleProvider); end; var VTAccessibleFactory: TVTAccessibilityFactory; implementation { TVTAccessibilityFactory } constructor TVTAccessibilityFactory.Create; begin inherited; FAccessibleProviders := TInterfaceList.Create; FAccessibleProviders.Clear; end; function TVTAccessibilityFactory.CreateIAccessible( ATree: TBaseVirtualTree): IAccessible; var I: Integer; TmpIAccessible: IAccessible; // returns an IAccessible. // 1. If the Accessible property of the passed-in tree is nil, // the first registered element will be returned. // Usually, this is the IAccessible that provides information about the tree itself. // If it is not nil, we'll check whether the AccessibleItem is nil. // If it is, we'll look in the registered IAccessibles for the appropriate one. // Each IAccessibleProvider will check the tree for properties to determine whether it is responsible. // We'll work top to bottom, from the most complicated to the most simple. // The index for these should all be greater than 0, e g the IAccessible for the tree itself should always be registered first, then any IAccessible items. begin result := nil; if ATree <> nil then begin if ATree.Accessible = nil then begin if FAccessibleProviders.Count > 0 then begin result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(ATree); exit; end; end; if ATree.AccessibleItem = nil then begin if FAccessibleProviders.Count > 0 then begin for I := FAccessibleProviders.Count - 1 downto 1 do begin TmpIAccessible := IVTAccessibleProvider(FAccessibleProviders.Items[I]).CreateIAccessible(ATree); if TmpIAccessible <> nil then begin result := TmpIAccessible; break; end; end; if TmpIAccessible = nil then begin result := IVTAccessibleProvider(FAccessibleProviders.Items[0]).CreateIAccessible(ATree); end; end; end else begin result := ATree.AccessibleItem; end; end; end; destructor TVTAccessibilityFactory.Destroy; begin FAccessibleProviders.Free; FAccessibleProviders := nil; inherited; end; procedure TVTAccessibilityFactory.RegisterAccessibleProvider( AProvider: IVTAccessibleProvider); // Ads a provider if it is not already registered begin if FAccessibleProviders.IndexOf(AProvider) < 0 then FAccessibleProviders.Add(AProvider) end; procedure TVTAccessibilityFactory.UnRegisterAccessibleProvider( AProvider: IVTAccessibleProvider); // Unregisters/removes an IAccessible provider if it is present begin if FAccessibleProviders.IndexOf(AProvider) >= 0 then FAccessibleProviders.Remove(AProvider); end; end. �������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�016224� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/unicodeutils.pas��������������������������������������������������0000644�0001750�0000144�00000032472�12612514062�021426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Most of this code is based on similar functions from Lazarus LCLProc. } unit UnicodeUtils; {$mode objfpc}{$H+} interface uses Classes, SysUtils; {en Retrieves length in bytes of the next UTF-8 character. @param(P Pointer to the UTF-8 characters.) @param(aMaxBytes States how many bytes from P can be read.) @param(InvalidCharLen If an invalid UTF-8 character was found then InvalidCharLen has the number of bytes this character spans. If the character was valid InvalidCharLen is zero.) } function SafeUTF8NextCharLen(P: PByte; aMaxBytes: Integer; out InvalidCharLen: Integer): Integer; {en Retrieves length in bytes of the previous UTF-8 character. It does not read from P, but rather from memory locations before P. @param(P Pointer to the UTF-8 characters.) @param(aMaxBytes States how many bytes from P *backwards* can be read. So, to safely read 3 bytes backwards ([p-1], [p-2], [p-3]) this parameter should be at least 3.) @param(InvalidCharLen If an invalid UTF-8 character was found then InvalidCharLen has the number of bytes this character spans. If the character was valid InvalidCharLen is zero.) } function SafeUTF8PrevCharLen(P: PByte; aMaxBytes: Integer; out InvalidCharLen: Integer): Integer; function SafeUTF8NextCharStart(UTF8Str: PByte; Len: PtrInt): PByte; function SafeUTF8PrevCharEnd(UTF8Str: PByte; Len: PtrInt): PByte; {en Returns UTF-16 character length, which is either 1 or 2. @param(utf16char Any UTF-16 char or one of the surrogate pairs.) } function UTF16CharLen(utf16char: Word): Integer; {en Converts an UTF-16 surrogate pair into a unicode character. } function utf16PairToUnicode(u1, u2: Word): Cardinal; function Utf16LEToUtf8(const s: string): string; // UTF16-LE 2 or 4 byte little endian function Utf16BEToUtf8(const s: string): string; // UTF16-BE 2 or 4 byte big endian function Utf32LEToUtf8(const s: string): string; // UTF32-LE 4 byte little endian function Utf32BEToUtf8(const s: string): string; // UTF32-BE 4 byte big endian function Utf8ToUtf16LE(const s: string): string; // UTF16-LE 2 or 4 byte little endian function Utf8ToUtf16BE(const s: string): string; // UTF16-BE 2 or 4 byte big endian function UTF8ToUCS4(const UTF8Text: String): UCS4String; {en Replaces invalid UTF-8 characters with '?'. } function Utf8ReplaceBroken(const s: String): String; implementation uses LCLProc, LazUTF8; const maxUTF8Len = 7; // really is 4, but this includes any invalid characters up to length 7 function SafeUTF8NextCharLen(P: PByte; aMaxBytes: Integer; out InvalidCharLen: Integer): Integer; var BytesLen: Integer; i: Integer; begin if (p=nil) or (aMaxBytes = 0) then begin InvalidCharLen := 0; Result := 0; end else if p^<%10000000 then begin // regular single byte character InvalidCharLen := 0; Result := 1; end else if p^<%11000000 then begin // invalid single byte character InvalidCharLen := 1; Result := 1; end else begin // Read length of UTF-8 character in bytes. if ((p^ and %11100000) = %11000000) then BytesLen := 2 else if ((p^ and %11110000) = %11100000) then BytesLen := 3 else if ((p^ and %11111000) = %11110000) then BytesLen := 4 else if ((p^ and %11111100) = %11111000) then BytesLen := 5 else if ((p^ and %11111110) = %11111100) then BytesLen := 6 else if ((p^ and %11111111) = %11111110) then BytesLen := 7 else begin InvalidCharLen := 1; exit(1); end; // Check if the next bytes are from the middle of a character. for i := 1 to BytesLen - 1 do begin if (aMaxBytes < i) or ((p[i] and %11000000) <> %10000000) then begin InvalidCharLen := i; exit(1); end; end; InvalidCharLen := 0; Result := BytesLen; end; end; function SafeUTF8PrevCharLen(P: PByte; aMaxBytes: Integer; out InvalidCharLen: Integer): Integer; var BytesLen: Integer; signature: Byte; begin if (p=nil) or (aMaxBytes = 0) then begin InvalidCharLen := 0; Result := 0; end else if p[-1]<%10000000 then begin // regular single byte character InvalidCharLen := 0; Result := 1; end else begin for BytesLen := 1 to maxUTF8Len do begin if (aMaxBytes < BytesLen) then begin InvalidCharLen := aMaxBytes; exit(1); end; // Move past all the bytes in the middle of a character. if (p[-BytesLen] and %11000000) <> %10000000 then break; if BytesLen = maxUTF8Len then begin InvalidCharLen := BytesLen; exit(1); end; end; if p[-BytesLen]<%11000000 then begin // invalid first byte of a character InvalidCharLen := BytesLen; Result := 1; end else begin signature := Byte($FF shl (7 - BytesLen)); if (p[-BytesLen] and signature) = Byte(signature shl 1) then begin // Correct first byte of a character. InvalidCharLen := 0; Result := BytesLen; end else begin // Invalid first byte of a character, or p is in the middle of a character. InvalidCharLen := BytesLen; Result := 1; end; end; end; end; function SafeUTF8NextCharStart(UTF8Str: PByte; Len: PtrInt): PByte; var CharLen: LongInt; InvalidCharLen: Integer; begin Result:=UTF8Str; if Result<>nil then begin while (Len>0) do begin CharLen := SafeUTF8NextCharLen(Result, Len, InvalidCharLen); if InvalidCharLen > 0 then begin dec(Len,InvalidCharLen); inc(Result,InvalidCharLen); end else if CharLen = 0 then exit(nil) else exit(Result); end; Result:=nil; end; end; function SafeUTF8PrevCharEnd(UTF8Str: PByte; Len: PtrInt): PByte; var CharLen: LongInt; InvalidCharLen: Integer; begin Result:=UTF8Str; if Result<>nil then begin while (Len>0) do begin CharLen := SafeUTF8PrevCharLen(Result, Len, InvalidCharLen); if InvalidCharLen > 0 then begin dec(Len,InvalidCharLen); dec(Result,InvalidCharLen); end else if CharLen = 0 then exit(nil) else exit(Result); // Result is the character beginning end; Result:=nil; end; end; function UTF16CharLen(utf16char: Word): Integer; inline; begin if (utf16char < $D800) or (utf16char > $DFFF) then Result := 1 else Result := 2; end; function utf16PairToUnicode(u1, u2: Word): Cardinal; begin if (u1 >= $D800) and (u1 <= $DBFF) then begin if (u2 >= $DC00) and (u2 <= $DFFF) then Result := (Cardinal(u1 - $D800) shl 10) + Cardinal(u2 - $DC00) + $10000 else Result := 0; end else Result := u1; end; function Utf16LEToUtf8(const s: string): string; var len: Integer; Src, Limit: PWord; Dest: PAnsiChar; u: Cardinal; begin if Length(s) < 2 then begin Result:=''; exit; end; Src:=PWord(Pointer(s)); Limit := PWord(Pointer(Src) + Length(s)); SetLength(Result, length(s) * 2); Dest:=PAnsiChar(Result); while Src + 1 <= Limit do begin len := UTF16CharLen(Src^); if len = 1 then u := LEtoN(Src^) else begin if Src + 2 <= Limit then u := utf16PairToUnicode(LEtoN(Src[0]), LEtoN(Src[1])) else break; end; inc(Src, len); if u<128 then begin Dest^:=chr(u); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(u,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); if len>length(Result) then RaiseGDBException(''); SetLength(Result,len); end; function Utf16BEToUtf8(const s: string): string; var len: Integer; Src, Limit: PWord; Dest: PAnsiChar; u: Cardinal; begin if Length(s) < 2 then begin Result:=''; exit; end; Src:=PWord(Pointer(s)); Limit := PWord(Pointer(Src) + Length(s)); SetLength(Result, length(s) * 2); Dest:=PAnsiChar(Result); while Src + 1 <= Limit do begin len := UTF16CharLen(Src^); if len = 1 then u := BEtoN(Src^) else begin if Src + 2 <= Limit then u := utf16PairToUnicode(BEtoN(Src[0]), BEtoN(Src[1])) else break; end; inc(Src, len); if u<128 then begin Dest^:=chr(u); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(u,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); if len>length(Result) then RaiseGDBException(''); SetLength(Result,len); end; function Utf32LEToUtf8(const s: string): string; var len: Integer; Src: PLongWord; Dest: PAnsiChar; i: Integer; c: LongWord; begin if Length(s) < 4 then begin Result:=''; exit; end; len:=length(s) div 4; SetLength(Result,len*4); Src:=PLongWord(Pointer(s)); Dest:=PAnsiChar(Result); for i:=1 to len do begin c:=LEtoN(Src^); inc(Src); if c<128 then begin Dest^:=chr(c); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(c,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); if len>length(Result) then RaiseGDBException(''); SetLength(Result,len); end; function Utf32BEToUtf8(const s: string): string; var len: Integer; Src: PLongWord; Dest: PAnsiChar; i: Integer; c: LongWord; begin if Length(s) < 4 then begin Result:=''; exit; end; len:=length(s) div 4; SetLength(Result,len*4); Src:=PLongWord(Pointer(s)); Dest:=PAnsiChar(Result); for i:=1 to len do begin c:=BEtoN(Src^); inc(Src); if c<128 then begin Dest^:=chr(c); inc(Dest); end else begin inc(Dest,UnicodeToUTF8SkipErrors(c,Dest)); end; end; len:=PtrUInt(Dest)-PtrUInt(Result); if len>length(Result) then RaiseGDBException(''); SetLength(Result,len); end; function Utf8ToUtf16LE(const s: string): string; var P: PWord; I, L: SizeUInt; begin if Length(S) = 0 then begin Result := ''; Exit; end; // Wide chars of UTF-16 <= bytes of UTF-8 string SetLength(Result, Length(S) * SizeOf(WideChar)); if ConvertUTF8ToUTF16(PWideChar(PAnsiChar(Result)), Length(Result) + SizeOf(WideChar), PAnsiChar(S), Length(S), [toInvalidCharToSymbol], L) <> trNoError then Result := '' else begin SetLength(Result, (L - 1) * SizeOf(WideChar)); // Swap endian if needed if (NtoLE($FFFE) <> $FFFE) then begin P := PWord(PAnsiChar(Result)); for I := 0 to L - 1 do begin P[I] := SwapEndian(P[I]); end; end; end; end; function Utf8ToUtf16BE(const s: string): string; var P: PWord; I, L: SizeUInt; begin if Length(S) = 0 then begin Result := ''; Exit; end; // Wide chars of UTF-16 <= bytes of UTF-8 string SetLength(Result, Length(S) * SizeOf(WideChar)); if ConvertUTF8ToUTF16(PWideChar(PAnsiChar(Result)), Length(Result) + SizeOf(WideChar), PAnsiChar(S), Length(S), [toInvalidCharToSymbol], L) <> trNoError then Result := '' else begin SetLength(Result, (L - 1) * SizeOf(WideChar)); // Swap endian if needed if (NtoBE($FEFF) <> $FEFF) then begin P := PWord(PAnsiChar(Result)); for I := 0 to L - 1 do begin P[I] := SwapEndian(P[I]); end; end; end; end; function UTF8ToUCS4(const UTF8Text: String): UCS4String; var Len: PtrInt; Index: Integer; CharLen: Integer; SrcPos: PAnsiChar; begin Len:= Length(UTF8Text); SetLength(Result, Len); if Len = 0 then Exit; Index:= 0; SrcPos:= PAnsiChar(UTF8Text); while Len > 0 do begin Result[Index]:= UTF8CharacterToUnicode(SrcPos, CharLen); Inc(SrcPos, CharLen); Dec(Len, CharLen); Inc(Index); end; SetLength(Result, Index); end; function Utf8ReplaceBroken(const s: String): String; var Src, Dst, LastGoodPos: PByte; BytesLeft: Integer; InvalidCharLen: Integer; CharLen: Integer; begin if Length(s) = 0 then Exit(s); BytesLeft := Length(s); SetLength(Result, BytesLeft); // at most the same length Src := PByte(s); Dst := PByte(Result); LastGoodPos := Src; while BytesLeft > 0 do begin CharLen := SafeUTF8NextCharLen(Src, BytesLeft, InvalidCharLen); if InvalidCharLen > 0 then begin if LastGoodPos < Src then begin System.Move(LastGoodPos^, Dst^, Src - LastGoodPos); Inc(Dst, Src - LastGoodPos); end; Inc(Src, InvalidCharLen); Dec(BytesLeft, InvalidCharLen); LastGoodPos := Src; Dst^ := ord('?'); Inc(Dst); end else begin Inc(Src, CharLen); Dec(BytesLeft, CharLen); end; end; if LastGoodPos = PByte(s) then Result := s // All characters are good. else begin if LastGoodPos < Src then begin System.Move(LastGoodPos^, Dst^, Src - LastGoodPos); Inc(Dst, Src - LastGoodPos); end; SetLength(Result, Dst - PByte(Result)); end; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/viewerpackage.lpk�������������������������������������������������0000644�0001750�0000144�00000003131�12334452644�021535� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="viewerpackage"/> <Author Value="Radek Červinka"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Version Major="1"/> <Files Count="2"> <Item1> <Filename Value="viewercontrol.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="ViewerControl"/> </Item1> <Item2> <Filename Value="unicodeutils.pas"/> <UnitName Value="UnicodeUtils"/> </Item2> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="LCL"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <DestinationDirectory Value="$(TestDir)\publishedpackage\"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/MappingFile.pas���������������������������������������������������0000644�0001750�0000144�00000022025�12014201074�021073� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ **************************************************** } { MappingFile unit v1.0 for Delphi } { Copyright (c) Razumikhin Dmitry, 2005 } { E-mail: razumikhin_d@mail.ru } { } { Use under terms LGPL license: } { http://www.gnu.org/copyleft/lesser.html } { **************************************************** } unit MappingFile; interface uses SysUtils, Windows, Classes, RTLConsts; type EFileMappingError = class(Exception); TMappingFile = class private fHandle: Integer; //file handle fFileName: string; //file name fMode: Word; //file open mode fMappingHandle: THandle; //handle of mapping file fBaseAddress: PChar; //address of file image in memory fPos: Integer; //current position fSize: Integer; //size of real data fCapacity: Integer; //size of allocated memory fExtraMem: Integer; function GetChar(Index: Integer): Char; procedure SetSize(const Value: Integer); procedure SetChar(Index: Integer; const Value: Char); procedure TryMount; procedure ReMount; procedure SetCapacity(const Value: Integer); procedure SetPos(const Value: Integer); public property BaseAddress: PChar read fBaseAddress; property Size: Integer read fSize write SetSize; property Capacity: Integer read fCapacity write SetCapacity; property ExtraMem: Integer read fExtraMem write fExtraMem; property Ch[Index: Integer]: Char read GetChar write SetChar; property Position: Integer read fPos write SetPos; function Seek(Offset, Origin: Integer): Integer; //read functions function ReadCh(out Ch: Char): Boolean; function ReadStr(out Str: string; Len: Integer): Boolean; overload; function ReadStr(const Index, Len: Integer): string; overload; function Find(Ch: Char; StartIndex: Integer = 0): Integer; //write functions procedure WriteCh(const Ch: Char); procedure WriteStr(const Str: string); overload; procedure WriteStr(const Str: string; Index: Integer); overload; procedure WriteBuffer(const Buf: PChar; Count: Integer); overload; procedure WriteBuffer(const Buf: PChar; Index, Count: Integer); overload; //insert functions (expand + write) procedure InsertBuffer(const Buf: PChar; Count: Integer); overload; procedure InsertBuffer(const Buf: PChar; Index, Count: Integer); overload; procedure InsertStr(const Str: string); overload; procedure InsertStr(const Str: string; Index: Integer); overload; constructor Create(const FileName: string; Mode: Word); destructor Destroy; override; end; function FileResize(Handle: THandle; Size: Integer): LongBool; function FileMount(var MappingHandle: THandle; const FileHandle: Integer; ReadOnly: Boolean = True): Pointer; procedure FileUmount(MappingHandle: THandle; BaseAddress: Pointer); implementation { TMappingFile } constructor TMappingFile.Create(const FileName: string; Mode: Word); begin inherited Create; fFileName:=FileName; fMode:=Mode; fPos:=0; fSize:=0; fCapacity:=0; fExtraMem:=1024; fBaseAddress:=nil; if Mode = fmCreate then begin fHandle:=FileCreate(FileName); if fHandle < 0 then raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end else begin fHandle:=FileOpen(FileName, Mode); if fHandle < 0 then raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]); end; fSize:=GetFileSize(fHandle, nil); fCapacity:=fSize; TryMount; end; destructor TMappingFile.Destroy; begin FileUmount(fMappingHandle, fBaseAddress); if fSize <> fCapacity then FileResize(fHandle, fSize); if fHandle >=0 then FileClose(fHandle); inherited; end; function TMappingFile.Find(Ch: Char; StartIndex: Integer): Integer; var i: Integer; begin for i:=StartIndex to fSize-1 do if Ch = PChar(fBaseAddress + i)^ then begin Result:=i; Exit; end; Result:=-1; end; function TMappingFile.GetChar(Index: Integer): Char; begin Result:=PChar(fBaseAddress + Index)^; //Not control the bounds end; procedure TMappingFile.InsertBuffer(const Buf: PChar; Count: Integer); begin InsertBuffer(Buf, fPos, Count); Inc(fPos, Count); end; procedure TMappingFile.InsertBuffer(const Buf: PChar; Index, Count: Integer); var MoveCount: Integer; begin if Count <> 0 then begin MoveCount:=fSize - Index; SetSize(fSize + Count); Move(PChar(fBaseAddress + Index)^, PChar(fBaseAddress + Index + Count)^, MoveCount); Move(Buf^, PChar(fBaseAddress + Index)^, Count); end; end; procedure TMappingFile.InsertStr(const Str: string); begin InsertBuffer(PChar(Str), Length(Str)); end; procedure TMappingFile.InsertStr(const Str: string; Index: Integer); begin InsertBuffer(PChar(Str), Index, Length(Str)); end; function TMappingFile.ReadCh(out Ch: Char): Boolean; begin Result:=fPos < fSize; if Result then begin Ch:=PChar(fBaseAddress + fPos)^; Inc(fPos, SizeOf(Char)); end else Ch:=#0; end; function TMappingFile.ReadStr(out Str: string; Len: Integer): Boolean; begin Result:=(fPos + Len) <= fSize; SetLength(Str, Len); Move(PChar(fBaseAddress + fPos)^, Str[1], Len); Inc(fPos, Len); end; function TMappingFile.ReadStr(const Index, Len: Integer): string; begin SetLength(Result, Len); Move(PChar(fBaseAddress + Index)^, Result[1], Len); end; procedure TMappingFile.Remount; begin if Assigned(fBaseAddress) then FileUmount(fMappingHandle, fBaseAddress); TryMount; end; function TMappingFile.Seek(Offset, Origin: Integer): Integer; var NewPos: Integer; begin Result:=-1; case Origin of 0: begin if Offset >= 0 then begin if (Offset > fSize) then SetSize(Offset); fPos:=Offset; Result:=Offset; end; end; 1: begin NewPos:= fPos + Offset; if NewPos >=0 then begin if (NewPos > fSize) then SetSize(NewPos); fPos:=NewPos; Result:=NewPos; end; end; 2: begin NewPos:=fSize - Offset - 1; if NewPos >=0 then begin if (NewPos > fSize) then SetSize(NewPos); fPos:=NewPos; Result:=NewPos; end; end; end; end; procedure TMappingFile.SetCapacity(const Value: Integer); begin if fCapacity <> Value then begin fCapacity := Value; FileResize(fHandle, fCapacity); Remount; end; end; procedure TMappingFile.SetChar(Index: Integer; const Value: Char); begin PChar(fBaseAddress + Index)^:=Value; //Not control the bounds end; procedure TMappingFile.SetPos(const Value: Integer); begin Seek(Value, 0); end; procedure TMappingFile.SetSize(const Value: Integer); begin if fSize <> Value then begin fSize := Value; if fPos >= fSize then fPos:=fSize - 1; if fSize > fCapacity then SetCapacity(fSize + fExtraMem); end; end; procedure TMappingFile.TryMount; begin if fSize > 0 then begin fBaseAddress:=FileMount(fMappingHandle, fHandle, fMode = fmOpenRead); if not Assigned(fBaseAddress) then raise EFileMappingError.CreateFmt('Could not mapped file ''%s''',[fFileName]); end; end; procedure TMappingFile.WriteBuffer(const Buf: PChar; Count: Integer); begin if (fPos + Count) > fSize then SetSize(fPos + Count); Move(Buf^, PChar(fBaseAddress + fPos)^, Count); fPos:=fPos + Count; end; procedure TMappingFile.WriteBuffer(const Buf: PChar; Index, Count: Integer); begin if (Index + Count) > fSize then SetSize(Index + Count); Move(Buf^, PChar(fBaseAddress + Index)^, Count); end; procedure TMappingFile.WriteCh(const Ch: Char); begin WriteBuffer(@Ch, SizeOf(Char)); end; procedure TMappingFile.WriteStr(const Str: string); begin WriteBuffer(PChar(Str), Length(Str)); end; procedure TMappingFile.WriteStr(const Str: string; Index: Integer); begin WriteBuffer(PChar(Str), Index, Length(Str)); end; //----------------------------------------------------------------------- function FileMount(var MappingHandle: THandle; const FileHandle: Integer; ReadOnly: Boolean = True): Pointer; var FileMappingMode, MapViewMode: DWORD; begin if ReadOnly then begin FileMappingMode:=PAGE_READONLY; MapViewMode:=FILE_MAP_READ; end else begin FileMappingMode:=PAGE_READWRITE; MapViewMode:=FILE_MAP_READ + FILE_MAP_WRITE; end; MappingHandle:=CreateFileMapping(FileHandle, nil, FileMappingMode, 0, 0, nil); if MappingHandle <> 0 then begin Result:=MapViewOfFile(MappingHandle, MapViewMode, 0, 0, 0); end else Result:=nil; end; procedure FileUmount(MappingHandle: THandle; BaseAddress: Pointer); begin if Assigned(BaseAddress) then UnmapViewOfFile(BaseAddress); if MappingHandle <> 0 then CloseHandle(MappingHandle); end; function FileResize(Handle: THandle; Size: Integer): LongBool; begin FileSeek(Handle, Size, 0); Result:=SetEndOfFile(Handle); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/viewercontrol.pas�������������������������������������������������0000644�0001750�0000144�00000255617�12654724456�021651� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Component ViewerControl (Free Pascal) show file in text (wraped or not) or bin or hex mode This is part of Seksi Commander To searching use uFindMmap, to movement call Upxxxx, Downxxxx, or set Position Realised under GNU GPL 2 author Radek Cervinka (radek.cervinka@centrum.cz) changes: 5.7. (RC) - selecting text with mouse - CopyToclipBoard, SelectAll ?.6. - LoadFromStdIn and loading first 64Kb of files with size=0 :) (/proc fs ..) 17.6. (RC) - mapfile (in error set FMappedFile=nil) - writetext TABs fixed (tab is replaced by 9 spaces) - set correct position for modes hex, bin (SetPosition) 21.7 - wrap text on 80 character lines works better now (by Radek Polak) - problems with function UpLine for specific lines: (lines of 80(=cTextWidth) character ended with ENTER (=#10) 6.2. (RC) - ported to fpc for linux (CustomControl and gtk) 7.2. (RC) - use temp to new implementation of LoadFromStdIn (and mmap temp file) - faster drawing of text (I hope) contributors: Copyright (C) 2006-2013 Alexander Koblov (alexx2000@mail.ru) TODO: a) File mapping blocks writing into file by other processes. Either: + Open small text files by reading them all into memory (done). - Add optional custom loading/caching portions of file in memory and only reading from file when neccessary. b) Searching in Unicode encodings and case-insensitive searching. c) Selecting text does not work well with composed Unicode characters (characters that are composed of multiple Unicode characters). d) Drawing/selecting text does not work correctly with RTL (right to left) text. e) FTextHeight is unreliable with complex unicode characters. It should be calculated based on currently displayed text (get max from each line's height). } unit ViewerControl; {$mode objfpc}{$H+} interface uses SysUtils, Classes, Controls, StdCtrls, fgl; const MaxMemSize = $400000; // 4 Mb type TViewerMode = (vmBin, vmHex, vmText, vmWrap, vmBook); TDataAccess = (dtMmap, dtNothing); TCharSide = (csBefore, csLeft, csRight, csAfter); TPtrIntList = specialize TFPGList<PtrInt>; TGuessEncodingEvent = function(const s: string): string; type // If additional encodings are added they should be also supported by: // - GetNextCharAsAscii // - GetPrevCharAsAscii // - GetNextCharAsUtf8 // - ConvertToUTF8 // - UpdateSelection TViewerEncoding = (veAutoDetect, veUtf8, veUtf8bom, veAnsi, veCp1250, veCp1251, veCp1252, veCp1253, veCp1254, veCp1255, veCp1256, veCp1257, veCp1258, veCp437, veCp850, veCp852, veCp866, veCp874, veCp932, veCp936, veCp949, veCp950, veIso88591, veIso88592, veKoi8, veUcs2le, veUcs2be, veUtf16le, veUtf16be, veUtf32le, // = ucs4le veUtf32be); // = ucs4be TViewerEncodings = set of TViewerEncoding; const ViewerEncodingsNames: array [TViewerEncoding] of string = ('Auto-detect', 'UTF-8', 'UTF-8BOM', 'Ansi', 'CP1250', 'CP1251', 'CP1252', 'CP1253', 'CP1254', 'CP1255', 'CP1256', 'CP1257', 'CP1258', 'CP437', 'CP850', 'CP852', 'CP866', 'CP874', 'CP932', 'CP936', 'CP949', 'CP950', 'ISO-8859-1', 'ISO-8859-2', 'KOI-8', 'UCS-2LE', 'UCS-2BE', 'UTF-16LE', 'UTF-16BE', 'UTF-32LE', 'UTF-32BE'); const ViewerEncodingMultiByte: TViewerEncodings = [ veUtf8, veUtf8bom, veUcs2le, veUcs2be, veUtf16le, veUtf16be, veUtf32le, veUtf32be]; type { TViewerControl } TViewerControl = class(TCustomControl) protected FEncoding: TViewerEncoding; FViewerMode: TViewerMode; FFileName: String; FFileHandle: THandle; FFileSize: Int64; FMappingHandle: THandle; FMappedFile: Pointer; FPosition: PtrInt; FHPosition: Integer; // Tab for text during horizontal scroll FHLowEnd: Integer; // End for HPosition (string with max char) FVisibleOffset: PtrInt; // Offset in symbols for current line (see IsVisible and MakeVisible) FLowLimit: PtrInt; // Lowest possible value for Position FHighLimit: PtrInt; // Position cannot reach this value FBOMLength: Integer; FLineList: TPtrIntList; FBlockBeg: PtrInt; FBlockEnd: PtrInt; FMouseBlockBeg: PtrInt; FMouseBlockSide: TCharSide; FSelecting: Boolean; FTextWidth: Integer; // max char count or width in window FTextHeight: Integer; // measured values of font, rec calc at font changed FScrollBarVert: TScrollBar; FScrollBarHorz: TScrollBar; FOnPositionChanged: TNotifyEvent; FUpdateScrollBarPos: Boolean; // used to block updating of scrollbar FScrollBarPosition: Integer; // for updating vertical scrollbar based on Position FHScrollBarPosition: Integer; // for updating horizontal scrollbar based on HPosition FColCount: Integer; FOnGuessEncoding: TGuessEncodingEvent; function GetPercent: Integer; procedure SetPercent(const AValue: Integer); procedure SetBlockBegin(const AValue: PtrInt); procedure SetBlockEnd(const AValue: PtrInt); procedure SetPosition(Value: PtrInt); virtual; procedure SetHPosition(Value: Integer); procedure SetPosition(Value: PtrInt; Force: Boolean); overload; procedure SetHPosition(Value: Integer; Force: Boolean); overload; procedure SetEncoding(AEncoding: TViewerEncoding); function GetEncodingName: string; procedure SetEncodingName(AEncodingName: string); procedure SetViewerMode(Value: TViewerMode); procedure SetColCount(const AValue: Integer); {en Returns how many lines (given current FTextHeight) will fit into the window. } function GetClientHeightInLines: Integer; inline; {en Calculates how many lines can be displayed from given position. @param(FromPosition Position from which to check. It should point to a start of a line.) @param(LastLineReached If it is set to @true when the function returns, then the last line of text was reached when scanning. This means that there are no more lines to be displayed other than the ones scanned from FromPosition. In other words: SetPosition(GetStartOfNextLine(FromPosition)) will be one line too many and will be scrolled back.) } function GetLinesTillEnd(FromPosition: PtrInt; out LastLineReached: Boolean): Integer; function GetBomLength: Integer; procedure UpdateLimits; {en @param(iStartPos Should point to start of a line. It is increased by the amount of parsed data (with line endings).) @param(aLimit Position which cannot be reached while reading from file.) @param(DataLength It is length in bytes of parsed data without any line endings. iStartPos is moved beyond the line endings though.) } function CalcTextLineLength(var iStartPos: PtrInt; const aLimit: Int64; out DataLength: PtrInt): Integer; function GetStartOfLine(aPosition: PtrInt): PtrInt; function GetEndOfLine(aPosition: PtrInt): PtrInt; function GetStartOfPrevLine(aPosition: PtrInt): PtrInt; function GetStartOfNextLine(aPosition: PtrInt): PtrInt; {en Changes the value of aPosition to X lines back or forward. @param(aPosition File position to change.) @param(iLines Nr of lines to scroll. If positive the position is increased by iLines lines, if negative the position is decreased by -iLines lines.) } function ScrollPosition(var aPosition: PtrInt; iLines: Integer): Boolean; {en Calculates (x,y) cursor position to a position within file. @param(x Client X coordinate of mouse cursor.) @param(y Client Y coordinate of mouse cursor.) @param(CharSide To which side of a character at returned position the (x,y) points to. Only valid if returned position is not -1.) @returns(Position in file to which (x,y) points to, based on what is currently displayed. Returns -1 if (x,y) doesn't point to any position (outside of the text for example).) } function XYPos2Adr(x, y: Integer; out CharSide: TCharSide): PtrInt; procedure OutText(x, y: Integer; StartPos: PtrInt; DataLength: Integer); procedure OutHex(x, y: Integer; sText: string; StartPos: PtrInt; DataLength: Integer); procedure OutBin(x, y: Integer; sText: string; StartPos: PtrInt; DataLength: Integer); procedure WriteText; procedure WriteHex; virtual; procedure WriteBin; function TransformText(const sText: String; const Xoffset: Integer): String; function TransformHex(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; function TransformBin(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; procedure AddLineOffset(iOffset: PtrInt); inline; function MapFile(const sFileName: String): Boolean; procedure UnMapFile; procedure SetFileName(const sFileName: String); procedure UpdateScrollbars; procedure ViewerResize(Sender: TObject); {en Returns next unicode character from the file, depending on Encoding. It is a faster version, which does as little conversion as possible, but only Ascii values are guaranteed to be valid (0-127). Other unicode values may/may not be valid, so shouldn't be tested. This function is used for reading pure ascii characters such as line endings, tabs, white spaces, etc. } function GetNextCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; function GetPrevCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; {en Retrieve next character from the file depending on encoding and automatically convert it to UTF-8. If CharLenInBytes is greater than 0 but the result is an empty string then it's possible there was no appropriate UTF-8 character for the next character of the current encoding. } function GetNextCharAsUtf8(const iPosition: PtrInt; out CharLenInBytes: Integer): String; procedure ReReadFile; function IsFileOpen: Boolean; inline; {en Searches for an ASCII character. @param(aPosition Position from where the search starts.) @param(aMaxBytes How many bytes are available for reading.) @param(AsciiChars The function searches for any character that this string contains.) @param(bFindNotIn If @true searches for first character not included in AsciiChars. If @false searches for first character included in AsciiChars.) } function FindAsciiSetForward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; {en Same as FindForward but it searches backwards from pAdr. aMaxBytes must be number of available bytes for reading backwards from pAdr. } function FindAsciiSetBackward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; {en Checks if current selection is still valid given current viewer mode and encoding. For example checks if selection is not in the middle of a unicode character. } procedure UpdateSelection; procedure ScrollBarVertScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); procedure ScrollBarHorzScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); function GetText(const StartPos, Len: PtrInt; const Xoffset: Integer): string; protected procedure KeyDown(var Key: word; Shift: TShiftState); override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; function DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; override; function DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure Paint; override; {en Scrolls the displayed text in the window. @param(iLines Nr of lines to scroll. If positive the text is scrolled downwards, if negative the text is scrolled upwards.) @returns(@true if the text was scrolled.) } function Scroll(iLines: Integer): Boolean; function HScroll(iSymbols: Integer): Boolean; procedure PageUp; procedure PageDown; procedure GoHome; procedure GoEnd; procedure HPageUp; procedure HPageDown; procedure HGoHome; procedure HGoEnd; function GetDataAdr: Pointer; procedure SelectAll; procedure SelectText(AStart, AEnd: PtrInt); procedure CopyToClipboard; function IsVisible(const aPosition: PtrInt): Boolean; overload; procedure MakeVisible(const aPosition: PtrInt); function ConvertToUTF8(const sText: AnsiString): String; function ConvertFromUTF8(const sText: String): AnsiString; function FindUtf8Text(iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): PtrInt; procedure ResetEncoding; function DetectEncoding: TViewerEncoding; procedure GetSupportedEncodings(List: TStrings); property Percent: Integer Read GetPercent Write SetPercent; property Position: PtrInt Read FPosition Write SetPosition; property FileSize: Int64 Read FFileSize; property SelectionStart: PtrInt Read FBlockBeg Write SetBlockBegin; property SelectionEnd: PtrInt Read FBlockEnd Write SetBlockEnd; property EncodingName: string Read GetEncodingName Write SetEncodingName; property ColCount: Integer Read FColCount Write SetColCount; property OnGuessEncoding: TGuessEncodingEvent Read FOnGuessEncoding Write FOnGuessEncoding; published property ViewerMode: TViewerMode Read FViewerMode Write SetViewerMode default vmWrap; property FileName: String Read FFileName Write SetFileName; property Encoding: TViewerEncoding Read FEncoding Write SetEncoding default veAutoDetect; property OnPositionChanged: TNotifyEvent Read FOnPositionChanged Write FOnPositionChanged; property OnClick; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnMouseWheelUp; property OnMouseWheelDown; property Align; property Color; property Cursor default crIBeam; property Font; property ParentColor default False; property TabStop default True; end; procedure Register; implementation uses LCLType, LCLVersion, Graphics, Forms, LCLProc, Clipbrd, LConvEncoding, UnicodeUtils, LCLIntf {$IF DEFINED(UNIX)} , BaseUnix, Unix {$ELSEIF DEFINED(WINDOWS)} , Windows {$ENDIF}; const //cTextWidth = 80; // wrap on 80 chars cBinWidth = 80; cMaxTextWidth = 65535; // maximum of chars on one line unwrapped text cHexWidth = 16; cTabSpaces = 8; // tab stop - allow to set in settings cHexOffsetWidth = 8; cHexStartHex = cHexOffsetWidth + 2; // ': ' cHexEndHex = cHexStartHex + (cHexWidth * 3); cHexStartAscii = cHexStartHex + (cHexWidth * 3) + 2; // ' ' // These strings must be Ascii only. sNonCharacter: string = ' !"#$%&''()*+,-./:;<=>?@[\]^`{|}~'#13#10#9; sWhiteSpace : string = ' '#13#10#9#8; // ---------------------------------------------------------------------------- constructor TViewerControl.Create(AOwner: TComponent); begin inherited Create(AOwner); Cursor := crIBeam; ParentColor := False; DoubleBuffered := True; ControlStyle := ControlStyle + [csTripleClicks, csOpaque]; TabStop := True; // so that it can get keyboard focus FEncoding := veAutoDetect; FViewerMode := vmText; FFileName := ''; FMappedFile := nil; FFileHandle := 0; FMappingHandle := 0; FPosition := 0; FHPosition := 0; FHLowEnd := 0; FLowLimit := 0; FHighLimit := 0; FBOMLength := 0; FTextHeight := 14; // dummy value FColCount := 1; FLineList := TPtrIntList.Create; FScrollBarVert := TScrollBar.Create(Self); FScrollBarVert.Parent := Self; FScrollBarVert.Kind := sbVertical; FScrollBarVert.Align := alRight; FScrollBarVert.OnScroll := @ScrollBarVertScroll; FScrollBarVert.TabStop := False; FScrollBarVert.PageSize := 0; FScrollBarHorz := TScrollBar.Create(Self); FScrollBarHorz.Parent := Self; FScrollBarHorz.Kind := sbHorizontal; FScrollBarHorz.Align := alBottom; FScrollBarHorz.OnScroll := @ScrollBarHorzScroll; FScrollBarHorz.TabStop := False; FScrollBarHorz.PageSize := 0; FUpdateScrollBarPos := True; FScrollBarPosition := 0; FHScrollBarPosition := 0; FOnPositionChanged := nil; FOnGuessEncoding := nil; OnResize := @ViewerResize; end; destructor TViewerControl.Destroy; begin UnMapFile; if Assigned(FLineList) then FreeAndNil(FLineList); inherited Destroy; end; procedure TViewerControl.Paint; begin if not IsFileOpen then Exit; Canvas.Font := Self.Font; Canvas.Brush.Color := Self.Color; {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 093100)} Canvas.Brush.Style := bsSolid; Canvas.FillRect(ClientRect); {$ENDIF} Canvas.Brush.Style := bsClear; FTextHeight := Canvas.TextHeight('Wg') + 2; if FViewerMode = vmBook then FTextWidth := ((ClientWidth - (Canvas.TextWidth('W') * FColCount)) div FColCount) else FTextWidth := ClientWidth div Canvas.TextWidth('W') - 2; FLineList.Clear; case FViewerMode of vmBin : WriteBin; vmHex : WriteHex; vmText: WriteText; vmWrap: WriteText; vmBook: WriteText; end; end; procedure TViewerControl.SetViewerMode(Value: TViewerMode); begin if not (csDesigning in ComponentState) then begin FLineList.Clear; // do not use cache from previous mode // Take limits into account for selection. FBlockBeg := FBlockBeg + (GetDataAdr - FMappedFile); FBlockEnd := FBlockEnd + (GetDataAdr - FMappedFile); FViewerMode := Value; FHPosition := 0; FBOMLength := GetBomLength; UpdateLimits; // Take limits into account for selection. FBlockBeg := FBlockBeg - (GetDataAdr - FMappedFile); FBlockEnd := FBlockEnd - (GetDataAdr - FMappedFile); UpdateSelection; // Force recalculating position. SetPosition(FPosition, True); SetHPosition(FHPosition, True); UpdateScrollbars; Invalidate; end else FViewerMode := Value; end; procedure TViewerControl.SetColCount(const AValue: Integer); begin if AValue > 0 then FColCount := AValue else FColCount := 1; end; function TViewerControl.ScrollPosition(var aPosition: PtrInt; iLines: Integer): Boolean; var i: Integer; NewPos: PtrInt; begin Result := False; NewPos := aPosition; if iLines < 0 then for i := 1 to -iLines do NewPos := GetStartOfPrevLine(NewPos) else for i := 1 to iLines do NewPos := GetStartOfNextLine(NewPos); Result := aPosition <> NewPos; aPosition := NewPos; end; function TViewerControl.Scroll(iLines: Integer): Boolean; var aPosition: PtrInt; begin aPosition := FPosition; Result := ScrollPosition(aPosition, iLines); if aPosition <> FPosition then SetPosition(aPosition); end; function TViewerControl.HScroll(iSymbols: Integer): Boolean; var newPos: integer; begin newPos := FHPosition; if (FHLowEnd - FTextWidth) > 0 then begin newPos := newPos+ iSymbols; if newPos < 0 then newPos := 0; if newPos > FHLowEnd-FTextWidth then newPos := FHLowEnd-FTextWidth; end; if newPos <> FHPosition then SetHPosition(newPos); end; function TViewerControl.GetText(const StartPos, Len: PtrInt; const Xoffset: Integer): string; begin SetString(Result, GetDataAdr + StartPos, Len); Result := TransformText(ConvertToUTF8(Result), Xoffset); end; function TViewerControl.CalcTextLineLength(var iStartPos: PtrInt; const aLimit: Int64; out DataLength: PtrInt): Integer; var MaxLineLength: Boolean; CharLenInBytes: Integer; OldPos, LastSpacePos: PtrInt; LastSpaceResult: Integer; begin Result := 0; DataLength := 0; LastSpacePos := -1; MaxLineLength := True; OldPos := iStartPos; while MaxLineLength and (iStartPos < aLimit) do begin case GetNextCharAsAscii(iStartPos, CharLenInBytes) of 9: // tab Inc(Result, cTabSpaces - Result mod cTabSpaces); 10: // stroka begin DataLength := iStartPos - OldPos; iStartPos := iStartPos + CharLenInBytes; Exit; end; 13: // karetka begin DataLength := iStartPos - OldPos; iStartPos := iStartPos + CharLenInBytes; // Move after possible #10. if (iStartPos < aLimit) and (GetNextCharAsAscii(iStartPos, CharLenInBytes) = 10) then Inc(iStartPos, CharLenInBytes); Exit; end; 32, 33, 40, 41, 44, 45, 46, 47, 92, 58, 59, 63, 91, 93: //probel begin Inc(Result, 1); LastSpacePos := iStartPos + CharLenInBytes; LastSpaceResult := Result; end; else Inc(Result, 1); end; if CharLenInBytes = 0 then // End of data or invalid character. break; iStartPos := iStartPos + CharLenInBytes; DataLength := iStartPos - OldPos; case FViewerMode of vmText: MaxLineLength := Result < cMaxTextWidth; vmWrap: MaxLineLength := Result < FTextWidth; vmBook: MaxLineLength := Canvas.TextWidth(GetText(OldPos, DataLength, 0)) < FTextWidth; else Exit; end; end; if (not MaxLineLength) and (LastSpacePos <> -1) then begin iStartPos := LastSpacePos; Result := LastSpaceResult; DataLength := iStartPos - OldPos; end; end; function TViewerControl.TransformText(const sText: String; const Xoffset: Integer): String; var c: AnsiChar; i: Integer; begin Result := ''; for i := 1 to Length(sText) do begin c := sText[i]; // Parse only ASCII chars. case c of #9: Result := Result + StringOfChar(' ', cTabSpaces - (UTF8Length(Result) + Xoffset) mod cTabSpaces); else begin if c < ' ' then Result := Result + ' ' else Result := Result + c; end; end; end; end; function TViewerControl.TransformHex(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; function LineFormat(const sHex, sAscii: AnsiString; iOffset: PtrInt): AnsiString; begin Result := Format('%s: %s', [IntToHex(iOffset, cHexOffsetWidth), sHex]); if Length(sHex) < cHexWidth * 3 then Result := Result + StringOfChar(' ', cHexWidth * 3 - Length(sHex)); Result := Result + ' '; Result := Result + sAscii; end; var c: AnsiChar; i: Integer; sStr: string = ''; sHex: string = ''; aStartOffset: PtrInt; begin if aPosition >= aLimit then Exit(''); aStartOffset := aPosition; for i := 0 to cHexWidth - 1 do begin if aPosition >= aLimit then Break; c := PAnsiChar(GetDataAdr)[aPosition]; if c < ' ' then sStr := sStr + '.' else if c > #127 then sStr := sStr + '.' else sStr := sStr + c; sHex := sHex + IntToHex(Ord(c), 2); if ((i and 7) = 7) and (i <> cHexWidth - 1) then sHex := sHex + '|' else sHex := sHex + ' '; Inc(aPosition); end; Result := LineFormat(sHex, sStr, aStartOffset) end; function TViewerControl.TransformBin(var aPosition: PtrInt; aLimit: PtrInt): AnsiString; var c: AnsiChar; i: Integer; begin Result := ''; for i := 0 to cBinWidth - 1 do begin if aPosition >= aLimit then Break; c := PAnsiChar(GetDataAdr)[aPosition]; if c < ' ' then Result := Result + '.' else if c > #127 then Result := Result + '.' else Result := Result + c; Inc(aPosition); end; end; function TViewerControl.GetStartOfLine(aPosition: PtrInt): PtrInt; function GetStartOfLineText: PtrInt; var tmpPos, LineStartPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; CharLenInBytes: Integer; begin prevChar := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); // Check if this already is not a start of line (if previous char is #10). if prevChar = 10 then Exit(aPosition); tmpPos := aPosition - CharLenInBytes; if tmpPos <= FLowLimit then Exit(FLowLimit); // Check if we're not in the middle of line ending // (previous char is #13, current char is #10). if (prevChar = 13) and (GetNextCharAsAscii(aPosition, CharLenInBytes) = 10) then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; if tmpPos <= FLowLimit then Exit(FLowLimit); // Search for real start of line. while (not (prevChar in [10, 13])) and (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; Dec(tmpPos, CharLenInBytes); end; // Previous end of line not found and there are no more data to check. if (not (prevChar in [10, 13])) and (tmpPos <= FLowLimit) then Exit(FLowLimit); // Move forward to first non-line ending character. Inc(tmpPos, CharLenInBytes); // Search for start of real line or wrapped line. while True do begin LineStartPos := tmpPos; CalcTextLineLength(tmpPos, FHighLimit, DataLength); if tmpPos = aPosition then begin if aPosition < FHighLimit then Exit(aPosition) // aPosition is already at start of a line else Exit(LineStartPos); // aPosition points to end of file so return start of this line end else if tmpPos > aPosition then Exit(LineStartPos); // Found start of line end; end; function GetStartOfLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); end; var i: Integer; begin if aPosition <= FLowLimit then Exit(FLowLimit) else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := FLineList.Count - 1 downto 0 do if FLineList.Items[i] <= aPosition then Exit(FLineList.Items[i]); end; case FViewerMode of vmBin: Result := GetStartOfLineFixed(cBinWidth); vmHex: Result := GetStartOfLineFixed(cHexWidth); vmText, vmWrap, vmBook: Result := GetStartOfLineText; else Result := aPosition; end; end; function TViewerControl.GetEndOfLine(aPosition: PtrInt): PtrInt; function GetEndOfLineText: PtrInt; var tmpPos: PtrInt; DataLength: PtrInt; begin Result := GetStartOfLine(aPosition); tmpPos := Result; CalcTextLineLength(tmpPos, FHighLimit, DataLength); Result := Result + DataLength; if Result < aPosition then Result := aPosition; end; function GetEndOfLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth) + aFixedWidth; end; begin case FViewerMode of vmBin: Result := GetEndOfLineFixed(cBinWidth); vmHex: Result := GetEndOfLineFixed(cHexWidth); vmText, vmWrap, vmBook: Result := GetEndOfLineText; else Result := aPosition; end; end; function TViewerControl.GetStartOfPrevLine(aPosition: PtrInt): PtrInt; function GetPrevLineText: PtrInt; var tmpPos, LineStartPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; CharLenInBytes: Integer; begin prevChar := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); tmpPos := aPosition - CharLenInBytes; // start search from previous character if tmpPos <= FLowLimit then Exit(FLowLimit); // Check if we're not in the middle of line ending // (previous char is #13, current char is #10). if (prevChar = 13) and (GetNextCharAsAscii(aPosition, CharLenInBytes) = 10) then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end else begin // Bypass possible end of previous line. if prevChar = 10 then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; if prevChar = 13 then begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Exit(aPosition); Dec(tmpPos, CharLenInBytes); end; end; if tmpPos <= FLowLimit then Exit(FLowLimit); // Search for real start of line. while (not (prevChar in [10, 13])) and (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; Dec(tmpPos, CharLenInBytes); end; // Move forward to first non-line ending character. Inc(tmpPos, CharLenInBytes); // Search for start of real line or wrapped line. while True do begin LineStartPos := tmpPos; CalcTextLineLength(tmpPos, aPosition, DataLength); if tmpPos >= aPosition then Exit(LineStartPos); // Found start of line end; end; function GetPrevLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); if Result >= aFixedWidth then Result := Result - aFixedWidth; end; var i: Integer; begin if aPosition <= FLowLimit then Exit(FLowLimit) else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := FLineList.Count - 1 downto 0 do if FLineList.Items[i] < aPosition then Exit(FLineList.Items[i]); end; case FViewerMode of vmBin: Result := GetPrevLineFixed(cBinWidth); vmHex: Result := GetPrevLineFixed(cHexWidth); vmText, vmWrap, vmBook: Result := GetPrevLineText; else Result := aPosition; end; end; function TViewerControl.GetStartOfNextLine(aPosition: PtrInt): PtrInt; function GetNextLineText: PtrInt; var tmpPos: PtrInt; DataLength: PtrInt; prevChar: Cardinal; CharLenInBytes: Integer; begin tmpPos := aPosition; // This might not be a real start of line (it may be start of wrapped line). // Search for start of line. while (tmpPos > FLowLimit) do begin prevChar := GetPrevCharAsAscii(tmpPos, CharLenInBytes); if CharLenInBytes = 0 then Break; if (prevChar in [10, 13]) then Break else Dec(tmpPos, CharLenInBytes); end; // Now we know we are at the start of a line, search the start of next line. while True do begin CalcTextLineLength(tmpPos, FHighLimit, DataLength); if tmpPos >= aPosition then Exit(tmpPos); // Found start of line end; end; function GetNextLineFixed(aFixedWidth: Integer): PtrInt; begin Result := aPosition - (aPosition mod aFixedWidth); if Result + aFixedWidth < FHighLimit then Result := Result + aFixedWidth; end; var i: Integer; begin if aPosition < FLowLimit then aPosition := FLowLimit // search from the start of the file else if aPosition >= FHighLimit then aPosition := FHighLimit; // search from the end of the file // Speedup for currently displayed positions. if (FLineList.Count > 0) and (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) then begin for i := 0 to FLineList.Count - 1 do if FLineList.Items[i] > aPosition then Exit(FLineList.Items[i]); end; case FViewerMode of vmBin: Result := GetNextLineFixed(cBinWidth); vmHex: Result := GetNextLineFixed(cHexWidth); vmText, vmWrap, vmBook: Result := GetNextLineText; else Result := aPosition; end; end; procedure TViewerControl.PageUp; var H: Integer; begin H := GetClientHeightInLines * FColCount - 1; if H <= 0 then H := 1; Scroll(-H); end; procedure TViewerControl.HPageUp; var H: Integer; begin H := FHPosition - FTextWidth; if H <= 0 then H := FHPosition else H:= FTextWidth; HScroll(-H); end; procedure TViewerControl.PageDown; var H: Integer; begin H := GetClientHeightInLines * FColCount - 1; if H <= 0 then H := 1; Scroll(H); end; procedure TViewerControl.HPageDown; var H: Integer; begin H := FHLowEnd - FHPosition; if H > FTextWidth then H := FTextWidth ; HScroll(H); end; procedure TViewerControl.GoHome; begin Position := FLowLimit; end; procedure TViewerControl.GoEnd; begin Position := FHighLimit; end; procedure TViewerControl.HGoHome; begin HScroll (-FHPosition); end; procedure TViewerControl.HGoEnd; begin HScroll (FHLowEnd-FHPosition); end; procedure TViewerControl.SetFileName(const sFileName: String); begin if not (csDesigning in ComponentState) then begin UnMapFile; if sFileName <> '' then begin if MapFile(sFileName) then begin FFileName := sFileName; // Detect encoding if needed. if FEncoding = veAutoDetect then FEncoding := DetectEncoding; ReReadFile; end; end; end else FFileName := sFileName; end; function TViewerControl.MapFile(const sFileName: String): Boolean; function ReadFile: Boolean; inline; begin FMappedFile := GetMem(FFileSize); Result := (FileRead(FFileHandle, FMappedFile^, FFileSize) = FFileSize); FileClose(FFileHandle); FFileHandle := 0; end; {$IFDEF MSWINDOWS} var wFileName: WideString; begin Result := False; if Assigned(FMappedFile) then UnMapFile; // if needed wFileName := UTF8Decode(sFileName); FFileHandle := CreateFileW(PWChar(wFileName), GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if FFileHandle = INVALID_HANDLE_VALUE then begin FFileHandle := 0; Exit; end; FFileSize := GetFileSize(FFileHandle, nil); if (FFileSize < MaxMemSize) then begin Result := ReadFile; Exit; end; FMappingHandle := CreateFileMapping(FFileHandle, nil, PAGE_READONLY, 0, 0, nil); if FMappingHandle <> 0 then FMappedFile := MapViewOfFile(FMappingHandle, FILE_MAP_READ, 0, 0, 0) else begin FMappedFile := nil; FileClose(FFileHandle); FFileHandle := 0; Exit; end; Result := True; end; {$ELSE} var StatBuf: Stat; begin Result := False; if Assigned(FMappedFile) then UnMapFile; // if needed FFileHandle := fpOpen(PChar(sFileName), O_RDONLY); if FFileHandle = feInvalidHandle then begin FFileHandle := 0; Exit; end; if fpFStat(FFileHandle, StatBuf) <> 0 then begin fpClose(FFileHandle); FFileHandle := 0; Exit; end; FFileSize := StatBuf.st_size; if (FFileSize < MaxMemSize) then begin Result := ReadFile; Exit; end; FMappedFile := fpmmap(nil, FFileSize, PROT_READ, MAP_PRIVATE{SHARED}, FFileHandle, 0); if FMappedFile = MAP_FAILED then begin FMappedFile:= nil; fpClose(FFileHandle); FFileHandle := 0; Exit; end; Result:= True; end; {$ENDIF} procedure TViewerControl.UnMapFile; begin if (FFileSize < MaxMemSize) then begin if Assigned(FMappedFile) then begin FreeMem(FMappedFile); FMappedFile := nil; end; end; {$IFDEF MSWINDOWS} if Assigned(FMappedFile) then begin UnmapViewOfFile(FMappedFile); FMappedFile := nil; end; if FMappingHandle <> 0 then begin CloseHandle(FMappingHandle); FMappingHandle := 0; end; if FFileHandle <> 0 then begin FileClose(FFileHandle); FFileHandle := 0; end; {$ELSE} if Assigned(FMappedFile) then begin if fpmunmap(FMappedFile, FFileSize) = -1 then DebugLn('Error unmapping file: ', SysErrorMessage(fpgeterrno)); FMappedFile := nil; end; if FFileHandle <> 0 then begin fpClose(FFileHandle); FFileHandle := 0; end; {$ENDIF} FFileName := ''; FFileSize := 0; Position := 0; FLowLimit := 0; FHighLimit := 0; FBOMLength := 0; FBlockBeg := 0; FBlockEnd := 0; end; procedure TViewerControl.WriteText; var yIndex, xIndex, w, scrollTab, i: Integer; LineStart, iPos: PtrInt; DataLength: PtrInt; begin iPos := FPosition; if ViewerMode = vmBook then w := Width div FColCount else w := 0; if (ViewerMode = vmText) and (FHPosition>0) then scrollTab := -FHPosition * Canvas.TextWidth('W') else scrollTab :=0; for xIndex := 0 to FColCount-1 do begin for yIndex := 0 to GetClientHeightInLines - 1 do begin if iPos >= FHighLimit then Break; AddLineOffset(iPos); LineStart := iPos; i := CalcTextLineLength(iPos, FHighLimit, DataLength); if i > FHLowEnd then FHLowEnd:=i; if DataLength > 0 then OutText(scrollTab+xIndex*w, yIndex * FTextHeight, LineStart, DataLength) end; end; end; procedure TViewerControl.WriteHex; var yIndex: Integer; iPos, LineStart: PtrInt; s: string; begin iPos := FPosition; for yIndex := 0 to GetClientHeightInLines - 1 do begin if iPos >= FHighLimit then Break; LineStart := iPos; AddLineOffset(iPos); s := TransformHex(iPos, FHighLimit); if s <> '' then OutHex(0, yIndex * FTextHeight, s, LineStart, iPos - LineStart); end; end; procedure TViewerControl.WriteBin; var yIndex: Integer; iPos, LineStart: PtrInt; s: string; begin iPos := FPosition; for yIndex := 0 to GetClientHeightInLines - 1 do begin if iPos >= FHighLimit then Break; LineStart := iPos; AddLineOffset(iPos); s := TransformBin(iPos, FHighLimit); if s <> '' then OutBin(0, yIndex * FTextHeight, s, LineStart, iPos - LineStart); end; end; function TViewerControl.GetDataAdr: Pointer; begin case FViewerMode of vmText, vmWrap, vmBook: Result := FMappedFile + FBOMLength; else Result := FMappedFile; end; end; procedure TViewerControl.SetPosition(Value: PtrInt); begin SetPosition(Value, False); end; procedure TViewerControl.SetHPosition(Value: Integer); begin SetHPosition(Value, False); end; procedure TViewerControl.SetHPosition(Value: Integer; Force: Boolean); begin if not IsFileOpen then Exit; FHPosition := Value; // Set new scroll position. if (FHLowEnd - FTextWidth) > 0 then begin if FHPosition > 0 then FHScrollBarPosition := FHPosition * 100 div (FHLowEnd - FTextWidth) else FHScrollBarPosition := 0; end; // Update scrollbar position. if FUpdateScrollBarPos then begin if FScrollBarHorz.Position <> FHScrollBarPosition then begin // Workaround for bug: http://bugs.freepascal.org/view.php?id=23815 {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 1010000)} FScrollBarHorz.OnScroll := nil; FScrollBarHorz.Position := FHScrollBarPosition; Application.ProcessMessages; // Skip message FScrollBarHorz.OnScroll := @ScrollBarHorzScroll; {$ELSE} FScrollBarHorz.Position := FHScrollBarPosition; {$ENDIF} end; end; // else the scrollbar position will be updated in ScrollBarVertScroll Invalidate; end; procedure TViewerControl.SetPosition(Value: PtrInt; Force: Boolean); var LinesTooMany: Integer; LastLineReached: Boolean; begin if not IsFileOpen then Exit; // Speedup if total nr of lines is less then nr of lines that can be displayed. if (FPosition = FLowLimit) and // only if already at the top (FLineList.Count > 0) and (FLineList.Count < GetClientHeightInLines) then Value := FLowLimit else // Boundary checks are done in GetStartOfLine. Value := GetStartOfLine(Value); if (Value <> FPosition) or Force then begin // Don't allow empty lines at the bottom of the control. LinesTooMany := GetClientHeightInLines - GetLinesTillEnd(Value, LastLineReached); if LinesTooMany > 0 then ScrollPosition(Value, -LinesTooMany); // scroll back upwards FPosition := Value; if Assigned(FOnPositionChanged) then FOnPositionChanged(Self); Invalidate; // Set new scroll position. if LastLineReached then FScrollBarPosition := 100 else FScrollBarPosition := Percent; end; // Update scrollbar position. if FUpdateScrollBarPos then begin if FScrollBarVert.Position <> FScrollBarPosition then begin // Workaround for bug: http://bugs.freepascal.org/view.php?id=23815 {$IF DEFINED(LCLQT) and (LCL_FULLVERSION < 1010000)} FScrollBarVert.OnScroll := nil; FScrollBarVert.Position := FScrollBarPosition; Application.ProcessMessages; // Skip message FScrollBarVert.OnScroll := @ScrollBarVertScroll; {$ELSE} FScrollBarVert.Position := FScrollBarPosition; {$ENDIF} end; end; // else the scrollbar position will be updated in ScrollBarVertScroll end; procedure TViewerControl.SetEncoding(AEncoding: TViewerEncoding); begin if not (csDesigning in ComponentState) then begin if AEncoding = veAutoDetect then FEncoding := DetectEncoding else FEncoding := AEncoding; ReReadFile; end else FEncoding := AEncoding; end; function TViewerControl.GetEncodingName: string; begin Result := ViewerEncodingsNames[FEncoding]; end; procedure TViewerControl.SetEncodingName(AEncodingName: string); var i: TViewerEncoding; begin for i := Low(TViewerEncoding) to High(TViewerEncoding) do if NormalizeEncoding(ViewerEncodingsNames[i]) = NormalizeEncoding(AEncodingName) then begin SetEncoding(i); break; end; end; function TViewerControl.GetClientHeightInLines: Integer; begin if FViewerMode <> vmText then Result:= 0 else // Take horizontal scrollbar into account Result:= GetSystemMetrics(SM_CYHSCROLL); if FTextHeight > 0 then Result := (ClientRect.Bottom - ClientRect.Top - Result) div FTextHeight // or Self.Height div FTextHeight? else Result := 0; end; function TViewerControl.GetLinesTillEnd(FromPosition: PtrInt; out LastLineReached: Boolean): Integer; var yIndex: Integer; iPos: PtrInt; DataLength: PtrInt; begin Result := 0; iPos := FromPosition; for yIndex := 0 to GetClientHeightInLines - 1 do begin if iPos >= FHighLimit then Break; Inc(Result, 1); case ViewerMode of vmBin: iPos := iPos + cBinWidth; vmHex: iPos := iPos + cHexWidth; vmText, vmWrap, vmBook: CalcTextLineLength(iPos, FHighLimit, DataLength); end; end; LastLineReached := (iPos >= FHighLimit); end; function TViewerControl.GetPercent: Integer; begin if FHighLimit - FLowLimit > 0 then Result := (Int64(FPosition - FLowLimit) * 100) div Int64(FHighLimit - FLowLimit) else Result := 0; end; procedure TViewerControl.SetPercent(const AValue: Integer); begin if FHighLimit - FLowLimit > 0 then Position := Int64(AValue) * (Int64(FHighLimit - FLowLimit) div 100) + FLowLimit else Position := 0; end; procedure TViewerControl.SetBlockBegin(const AValue: PtrInt); begin if (AValue >= FLowLimit) and (AValue < FHighLimit) then begin if FBlockEnd < AValue then FBlockEnd := AValue; FBlockBeg := AValue; Invalidate; end; end; procedure TViewerControl.SetBlockEnd(const AValue: PtrInt); begin if (AValue >= FLowLimit) and (AValue < FHighLimit) then begin if FBlockBeg > AValue then FBlockBeg := AValue; FBlockEnd := AValue; Invalidate; end; end; procedure TViewerControl.OutText(x, y: Integer; StartPos: PtrInt; DataLength: Integer); var pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; xOffset: Integer; sText: string; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd < pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then //after begin // out of selection, draw normal Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, GetText(StartPos, DataLength, 0)); Exit; end; // Get selection start/end. if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; xOffset := 0; // Text before selection. if iBegDrawIndex - pBegLine > 0 then begin sText := GetText(StartPos, iBegDrawIndex - pBegLine, xOffset); Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, sText); x := x + Canvas.TextWidth(sText); xOffset := xOffset + UTF8Length(sText); end; // Selected text. sText := GetText(StartPos + iBegDrawIndex - pBegLine, iEndDrawIndex - iBegDrawIndex, xOffset); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; // Cannot simply draw text with brush with TextOut // because it differs between widgetsets. Canvas.Brush.Style := bsSolid; Canvas.FillRect(Bounds(x, y, Canvas.TextWidth(sText), FTextHeight)); Canvas.Brush.Style := bsClear; // Or use TextRect instead of TextOut with Opaque = True. //ts := Canvas.TextStyle; //ts.Opaque := True; //ts.Clipping := True; //Canvas.TextRect(Bounds(X, Y, Canvas.TextWidth(sText), FTextHeight), X, Y, sText, ts); Canvas.TextOut(x, y, sText); x := x + Canvas.TextWidth(sText); xOffset := xOffset + UTF8Length(sText); // restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text after selection. if pEndLine - iEndDrawIndex > 0 then begin sText := GetText(StartPos + iEndDrawIndex - pBegLine, pEndLine - iEndDrawIndex, xOffset); Canvas.TextOut(x, y, sText); end; end; procedure TViewerControl.OutHex(x, y: Integer; sText: string; StartPos: PtrInt; DataLength: Integer); var pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; sNextText: String = ''; sTmpText: String; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd <= pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then //after begin // out of selection, draw normal Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, sText); Exit; end; // Get selection start/end. if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; // Text before selection (offset and hex part). sTmpText := Copy(sText, 1, cHexStartHex + (iBegDrawIndex - pBegLine) * 3); Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // Selected text (hex part). sTmpText := Copy(sText, 1 + cHexStartHex + (iBegDrawIndex - pBegLine) * 3, (iEndDrawIndex - iBegDrawIndex) * 3); // Move last character from selection to not selected text. sNextText := Copy(sTmpText, Length(sTmpText), 1); Delete(sTmpText, Length(sTmpText), 1); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.Brush.Style := bsSolid; Canvas.FillRect(Bounds(x, y, Canvas.TextWidth(sTmpText), FTextHeight)); Canvas.Brush.Style := bsClear; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text after selection (hex part). if pEndLine - iEndDrawIndex > 0 then begin sTmpText := sNextText + Copy(sText, 1 + cHexStartHex + (iEndDrawIndex - pBegLine) * 3, (pEndLine - iEndDrawIndex) * 3); sNextText := ''; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); end; // Space after hex if data doesn't span full line. if DataLength < cHexWidth then sNextText := sNextText + Copy(sText, 1 + cHexStartHex + DataLength * 3, (cHexWidth - DataLength) * 3); // Space between hex and ascii. sTmpText := sNextText + ' '; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // Text before selection (ascii part). if iBegDrawIndex - pBegLine > 0 then begin sTmpText := Copy(sText, 1 + cHexStartAscii, iBegDrawIndex - pBegLine); Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); end; // Selected text (ascii part). sTmpText := Copy(sText, 1 + cHexStartAscii + iBegDrawIndex - pBegLine, iEndDrawIndex - iBegDrawIndex); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.Brush.Style := bsSolid; Canvas.FillRect(Bounds(x, y, Canvas.TextWidth(sTmpText), FTextHeight)); Canvas.Brush.Style := bsClear; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // restore background color Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text after selection. if pEndLine - iEndDrawIndex > 0 then begin sTmpText := Copy(sText, 1 + cHexStartAscii + iEndDrawIndex - pBegLine, pEndLine - iEndDrawIndex); Canvas.TextOut(x, y, sTmpText); end; end; procedure TViewerControl.OutBin(x, y: Integer; sText: string; StartPos: PtrInt; DataLength: Integer); var pBegLine, pEndLine: PtrInt; iBegDrawIndex, iEndDrawIndex: PtrInt; sTmpText: String; begin pBegLine := StartPos; pEndLine := pBegLine + DataLength; if ((FBlockEnd - FBlockBeg) = 0) or ((FBlockBeg < pBegLine) and (FBlockEnd < pBegLine)) or // before ((FBlockBeg > pEndLine) and (FBlockEnd > pEndLine)) then //after begin // out of selection, draw normal Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, sText); Exit; end; // Get selection start/end. if (FBlockBeg <= pBegLine) then iBegDrawIndex := pBegLine else iBegDrawIndex := FBlockBeg; if (FBlockEnd < pEndLine) then iEndDrawIndex := FBlockEnd else iEndDrawIndex := pEndLine; // Text before selection. if iBegDrawIndex - pBegLine > 0 then begin sTmpText := Copy(sText, 1, iBegDrawIndex - pBegLine); Canvas.Font.Color := Font.Color; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); end; // Selected text. sTmpText := Copy(sText, 1 + iBegDrawIndex - pBegLine, iEndDrawIndex - iBegDrawIndex); Canvas.Brush.Color := clHighlight; Canvas.Font.Color := clHighlightText; Canvas.Brush.Style := bsSolid; Canvas.FillRect(Bounds(x, y, Canvas.TextWidth(sTmpText), FTextHeight)); Canvas.Brush.Style := bsClear; Canvas.TextOut(x, y, sTmpText); x := x + Canvas.TextWidth(sTmpText); // restore previous canvas settings Canvas.Brush.Color := Color; Canvas.Font.Color := Font.Color; // Text after selection. if pEndLine - iEndDrawIndex > 0 then begin sTmpText := Copy(sText, 1 + iEndDrawIndex - pBegLine, pEndLine - iEndDrawIndex); Canvas.TextOut(x, y, sTmpText); end; end; procedure TViewerControl.AddLineOffset(iOffset: PtrInt); begin FLineList.Add(iOffset); end; procedure TViewerControl.KeyDown(var Key: word; Shift: TShiftState); begin if Shift = [] then begin case Key of VK_DOWN: begin Key := 0; Scroll(1); end; VK_UP: begin Key := 0; Scroll(-1); end; VK_HOME: begin Key := 0; GoHome; end; VK_END: begin Key := 0; GoEnd; end; VK_PRIOR: begin Key := 0; PageUp; end; VK_NEXT: begin Key := 0; PageDown; end; else inherited KeyDown(Key, Shift); end; end else if Shift = [ssCtrl] then begin case Key of VK_HOME: begin Key := 0; GoHome; end; VK_END: begin Key := 0; GoEnd; end; else inherited KeyDown(Key, Shift); end; end else inherited KeyDown(Key, Shift); end; function TViewerControl.FindAsciiSetForward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; var i: Integer; found: Boolean; u: Cardinal; CharLenInBytes: Integer; begin Result := -1; while aMaxBytes > 0 do begin u := GetNextCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit; if not bFindNotIn then begin for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then Exit(aPosition); end else begin found := False; for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then begin found := True; break; end; if not found then Exit(aPosition); end; Inc(aPosition, CharLenInBytes); Dec(aMaxBytes, CharLenInBytes); end; end; function TViewerControl.FindAsciiSetBackward(aPosition, aMaxBytes: PtrInt; const AsciiChars: String; bFindNotIn: Boolean): PtrInt; var i: Integer; found: Boolean; u: Cardinal; CharLenInBytes: Integer; begin Result := -1; while aMaxBytes > 0 do begin u := GetPrevCharAsAscii(aPosition, CharLenInBytes); if CharLenInBytes = 0 then Exit; if not bFindNotIn then begin for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then Exit(aPosition); end else begin found := False; for i := 1 to Length(AsciiChars) do if u = ord(AsciiChars[i]) then begin found := True; break; end; if not found then Exit(aPosition); end; Dec(aPosition, CharLenInBytes); Dec(aMaxBytes, CharLenInBytes); end; end; procedure TViewerControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var LineBegin, LineEnd: PtrInt; ClickPos: PtrInt; CharSide: TCharSide; begin inherited; SetFocus; if not IsFileOpen then Exit; case Button of mbLeft: begin if Shift * [ssDouble, ssTriple] = [] then begin // Single click. ClickPos := XYPos2Adr(x, y, CharSide); if ClickPos <> -1 then begin FBlockBeg := ClickPos; FBlockEnd := ClickPos; FMouseBlockBeg := ClickPos; FMouseBlockSide := CharSide; FSelecting := True; Invalidate; end else FSelecting := False; end else // if double click or triple click begin FSelecting := False; LineBegin := GetStartOfLine(FMouseBlockBeg); LineEnd := GetEndOfLine(FMouseBlockBeg); if ssDouble in Shift then begin // Select word with double-click. FBlockBeg := FindAsciiSetBackward(FMouseBlockBeg, FMouseBlockBeg - LineBegin, sNonCharacter, False); FBlockEnd := FindAsciiSetForward(FMouseBlockBeg, LineEnd - FMouseBlockBeg, sNonCharacter, False); end else if ssTriple in Shift then begin // Select line with triple-click. FBlockBeg := FindAsciiSetForward(LineBegin, LineEnd - LineBegin, sWhiteSpace, True); FBlockEnd := FindAsciiSetBackward(LineEnd, LineEnd - LineBegin, sWhiteSpace, True); end; if FBlockBeg = -1 then FBlockBeg := LineBegin; if FBlockEnd = -1 then FBlockEnd := LineEnd; if FBlockBeg > FBlockEnd then FBlockEnd := FBlockBeg; CopyToClipboard; Invalidate; end; end; // mbLeft end; // case end; procedure TViewerControl.MouseMove(Shift: TShiftState; X, Y: Integer); procedure MoveOneChar(var aPosition: PtrInt); var CharLenInBytes: Integer; begin GetNextCharAsAscii(aPosition, CharLenInBytes); aPosition := aPosition + CharLenInBytes; end; procedure MoveOneCharByMouseSide(var aPosition: PtrInt); begin if FMouseBlockSide in [csRight, csAfter] then MoveOneChar(aPosition); end; var ClickPos: PtrInt; CharSide: TCharSide; begin inherited; if FSelecting then begin if y < FTextHeight then Scroll(-3) else if y > ClientHeight - FTextHeight then Scroll(3); ClickPos := XYPos2Adr(x, y, CharSide); if ClickPos <> -1 then begin if ClickPos < FMouseBlockBeg then begin // Got a new beginning. FBlockBeg := ClickPos; FBlockEnd := FMouseBlockBeg; // Move end beyond last character. MoveOneCharByMouseSide(FBlockEnd); // When selecting from right to left, the current selected side must be // either csLeft or csBefore, otherwise current position is not included. if not (CharSide in [csLeft, csBefore]) then begin // Current position should not be included in selection. // Move beginning after first character. MoveOneChar(FBlockBeg); end; end else if ClickPos > FMouseBlockBeg then begin // Got a new end. FBlockBeg := FMouseBlockBeg; FBlockEnd := ClickPos; // Move beginning after first character. MoveOneCharByMouseSide(FBlockBeg); // When selecting from left to right, the current selected side must be // either csRight or csAfter, otherwise current position is not included. if CharSide in [csRight, csAfter] then begin // Current position should be included in selection. // Move end beyond last character. MoveOneChar(FBlockEnd); end; end else if FMouseBlockSide <> CharSide then begin // Same position but changed side of the character. FBlockBeg := FMouseBlockBeg; FBlockEnd := FMouseBlockBeg; if ((FMouseBlockSide in [csBefore, csLeft]) and (CharSide in [csRight, csAfter])) or ((FMouseBlockSide in [csRight, csAfter]) and (CharSide in [csBefore, csLeft])) then begin // Move end beyond last character. MoveOneChar(FBlockEnd); end; end else begin FBlockBeg := FMouseBlockBeg; FBlockEnd := FMouseBlockBeg; end; Invalidate; end; end; end; procedure TViewerControl.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin inherited; if FSelecting and (Button = mbLeft) and (Shift * [ssDouble, ssTriple] = []) then begin CopyToClipboard; FSelecting := False; end; end; function TViewerControl.DoMouseWheelDown(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result := inherited; if not Result then Result := Scroll(Mouse.WheelScrollLines); end; function TViewerControl.DoMouseWheelUp(Shift: TShiftState; MousePos: TPoint): Boolean; begin Result := inherited; if not Result then Result := Scroll(-Mouse.WheelScrollLines); end; function TViewerControl.XYPos2Adr(x, y: Integer; out CharSide: TCharSide): PtrInt; var yIndex: Integer; StartLine, EndLine: PtrInt; function XYPos2AdrBin: PtrInt; var i: Integer; px: Integer = 0; charWidth: Integer; sText: String; tmpPosition: PtrInt; begin tmpPosition := StartLine; sText := TransformBin(tmpPosition, EndLine); for i := 1 to Length(sText) do begin charWidth := Canvas.TextWidth(string(sText[i])); if px + charWidth > x then begin if px + charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + i - 1); // -1 because we count from 1 end; px := px + charWidth; end; CharSide := csBefore; Result := EndLine; end; function XYPos2AdrHex: PtrInt; var i: Integer; px: Integer = 0; charWidth: Integer; sText, sPartialText: String; tmpPosition: PtrInt; begin tmpPosition := StartLine; sText := TransformHex(tmpPosition, EndLine); // Clicked on offset. sPartialText := Copy(sText, 1, cHexStartHex); charWidth := Canvas.TextWidth(sPartialText); px := px + charWidth; if px > x then begin CharSide := csBefore; Exit(StartLine); end; // Clicked on hex part. for i := 0 to cHexWidth - 1 do begin sPartialText := Copy(sText, 1 + cHexStartHex + i * 3, 2); charWidth := Canvas.TextWidth(sPartialText); if px + charWidth > x then begin // Check if we're not after end of data. if StartLine + i >= EndLine then begin CharSide := csBefore; Exit(EndLine); end; if px + charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + i); end; // Space after hex number. charWidth := charWidth + Canvas.TextWidth(string(sText[1 + cHexStartHex + i * 3 + 2])); if px + charWidth > x then begin CharSide := csAfter; Exit(StartLine + i); end; px := px + charWidth; end; // Clicked between hex and ascii. sPartialText := Copy(sText, 1 + cHexEndHex, cHexStartAscii - cHexEndHex); charWidth := Canvas.TextWidth(sPartialText); if px + charWidth > x then begin Exit(-1); // No position. end; px := px + charWidth; // Clicked on ascii part. for i := 0 to cHexWidth - 1 do begin charWidth := Canvas.TextWidth(string(sText[1 + cHexStartAscii + i])); if px + charWidth > x then begin // Check if we're not after end of data. if StartLine + i >= EndLine then begin CharSide := csBefore; Exit(EndLine); end; if px + charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(StartLine + i); end; px := px + charWidth; end; CharSide := csBefore; Result := EndLine; end; function XYPos2AdrText: PtrInt; var i: Integer; px: Integer = 0; charWidth: Integer; len: Integer = 0; CharLenInBytes: Integer; s: String; begin i := StartLine; while i < EndLine do begin s := GetNextCharAsUtf8(i, CharLenInBytes); if CharLenInBytes = 0 then Break; // Check if the conversion to UTF-8 was successful. if Length(s) > 0 then begin if s = #9 then begin s := StringOfChar(' ', cTabSpaces - len mod cTabSpaces); len := len + (cTabSpaces - len mod cTabSpaces); end else Inc(len); // Assume there is one character after conversion // (otherwise use Inc(len, UTF8Length(s))). if len <= FHPosition then begin i := i + CharLenInBytes; Continue; end; charWidth := Canvas.TextWidth(s); if px + charWidth > x then begin if px + charWidth div 2 > x then CharSide := csLeft else CharSide := csRight; Exit(i); end; px := px + charWidth; end; i := i + CharLenInBytes; end; CharSide := csBefore; Result := EndLine; end; begin if FLineList.Count = 0 then Exit(-1); yIndex := y div FTextHeight; if yIndex >= FLineList.Count then yIndex := FLineList.Count - 1; if yIndex < 0 then yIndex := 0; // Get position of first character of the line. StartLine := FLineList.Items[yIndex]; // Get position of last character of the line. EndLine := GetEndOfLine(StartLine); if x = 0 then begin CharSide := csBefore; Exit(StartLine); end; case ViewerMode of vmBin: Result := XYPos2AdrBin; vmHex: Result := XYPos2AdrHex; vmText, vmWrap, vmBook: Result := XYPos2AdrText; else raise Exception.Create('Invalid viewer mode'); end; end; procedure TViewerControl.SelectAll; begin SelectText(FLowLimit, FHighLimit); end; procedure TViewerControl.SelectText(AStart, AEnd: PtrInt); begin if AStart < FLowLimit then AStart := FLowLimit; if AEnd > FHighLimit then AEnd := FHighLimit; if AStart <= AEnd then begin FBlockBeg := AStart; FBlockEnd := AEnd; Invalidate; end; end; procedure TViewerControl.CopyToClipboard; var sText, utf8Text: string; begin if (FBlockEnd - FBlockBeg) <= 0 then Exit; if (FBlockEnd - FBlockBeg) > 1024 * 1024 then // Max 1 MB to clipboard Exit; SetString(sText, GetDataAdr + FBlockBeg, FBlockEnd - FBlockBeg); utf8Text := ConvertToUTF8(sText); {$IFDEF LCLGTK2} // Workaround for Lazarus bug #0021453. LCL adds trailing zero to clipboard in Clipboard.AsText. Clipboard.Clear; Clipboard.AddFormat(PredefinedClipboardFormat(pcfText), utf8Text[1], Length(utf8Text)); {$ELSE} Clipboard.AsText := utf8Text; {$ENDIF} end; function TViewerControl.GetNextCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; var u1, u2: Word; InvalidCharLen: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: begin if iPosition < FHighLimit then begin CharLenInBytes := SafeUTF8NextCharLen(GetDataAdr + iPosition, FHighLimit - iPosition, InvalidCharLen); // It's enough to only return Ascii. if CharLenInBytes = 1 then Result := PByte(GetDataAdr)[iPosition]; // Full conversion: // Result := UTF8CharacterToUnicode(PAnsiChar(GetDataAdr + iPosition), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: if iPosition < FHighLimit then begin Result := PByte(GetDataAdr)[iPosition]; CharLenInBytes := 1; end else CharLenInBytes := 0; veUcs2be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin Result := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUcs2le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin Result := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUtf16be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition + SizeOf(Word) * CharLenInBytes - 1 < FHighLimit then begin u2 := BEtoN(PWord(GetDataAdr + iPosition)[1]); Result := utf16PairToUnicode(u1, u2); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition + SizeOf(Word) * CharLenInBytes - 1 < FHighLimit then begin u2 := LEtoN(PWord(GetDataAdr + iPosition)[1]); Result := utf16PairToUnicode(u1, u2); end else CharLenInBytes := 0; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be: if iPosition + SizeOf(LongWord) - 1 < FHighLimit then begin Result := BEtoN(PLongWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veUtf32le: if iPosition + SizeOf(LongWord) - 1 < FHighLimit then begin Result := LEtoN(PLongWord(GetDataAdr + iPosition)[0]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; else raise Exception.Create('Unsupported viewer encoding'); end; end; function TViewerControl.GetPrevCharAsAscii(const iPosition: PtrInt; out CharLenInBytes: Integer): Cardinal; var u1, u2: Word; InvalidCharLen: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: begin if iPosition > FLowLimit then begin CharLenInBytes := SafeUTF8PrevCharLen(GetDataAdr + iPosition, iPosition - FLowLimit, InvalidCharLen); // It's enough to only return Ascii. if CharLenInBytes = 1 then Result := PByte(GetDataAdr)[iPosition - 1]; // Full conversion: // Result := UTF8CharacterToUnicode(PAnsiChar(GetDataAdr + iPosition - CharLenInBytes), CharLenInBytes); end else CharLenInBytes := 0; end; veAnsi, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: if iPosition > FLowLimit then begin Result := PByte(GetDataAdr + iPosition)[-1]; CharLenInBytes := 1; end else CharLenInBytes := 0; veUcs2be: if iPosition >= FLowLimit + SizeOf(Word) then begin Result := BEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUcs2le: if iPosition >= FLowLimit + SizeOf(Word) then begin Result := LEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(Word); end else CharLenInBytes := 0; veUtf16be: if iPosition >= FLowLimit + SizeOf(Word) then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition >= FLowLimit + SizeOf(Word) * CharLenInBytes then begin u2 := BEtoN(PWord(GetDataAdr + iPosition)[-2]); // u2 is the first, u1 is the second value of the pair Result := utf16PairToUnicode(u2, u1); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition >= FLowLimit + SizeOf(Word) then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := UTF16CharacterLength(@u1); if CharLenInBytes = 1 then begin Result := u1; end else if iPosition >= FLowLimit + SizeOf(Word) * CharLenInBytes then begin u2 := LEtoN(PWord(GetDataAdr + iPosition)[-2]); // u2 is the first, u1 is the second value of the pair Result := utf16PairToUnicode(u2, u1); end; CharLenInBytes := CharLenInBytes * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be: if iPosition >= FLowLimit + SizeOf(LongWord) then begin Result := BEtoN(PLongWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; veUtf32le: if iPosition >= FLowLimit + SizeOf(LongWord) then begin Result := LEtoN(PLongWord(GetDataAdr + iPosition)[-1]); CharLenInBytes := SizeOf(LongWord); end else CharLenInBytes := 0; else raise Exception.Create('Unsupported viewer encoding'); end; end; function TViewerControl.GetNextCharAsUtf8(const iPosition: PtrInt; out CharLenInBytes: Integer): String; var u1: Word; s: string; InvalidCharLen: Integer; begin Result := ''; case FEncoding of veUtf8, veUtf8bom: CharLenInBytes := SafeUTF8NextCharLen(GetDataAdr + iPosition, FHighLimit - iPosition, InvalidCharLen); veAnsi, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: CharLenInBytes := 1; veUcs2be, veUcs2le: CharLenInBytes := 2; veUtf16be: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := BEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1) * SizeOf(Word); end else CharLenInBytes := 0; veUtf16le: if iPosition + SizeOf(Word) - 1 < FHighLimit then begin u1 := LEtoN(PWord(GetDataAdr + iPosition)[0]); CharLenInBytes := UTF16CharacterLength(@u1) * SizeOf(Word); end else CharLenInBytes := 0; veUtf32be, veUtf32le: CharLenInBytes := 4; else raise Exception.Create('Unsupported viewer encoding'); end; if (CharLenInBytes > 0) and (iPosition + CharLenInBytes - 1 < FHighLimit) then begin SetString(s, GetDataAdr + iPosition, CharLenInBytes); Result := ConvertToUTF8(s); end else Result := ''; end; function TViewerControl.ConvertToUTF8(const sText: AnsiString): String; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; // Force detect encoding. case FEncoding of veAutoDetect: ; veUtf8, veUtf8bom: Result := Utf8ReplaceBroken(sText); veUtf16be: Result := Utf16BEToUtf8(sText); veUtf16le: Result := Utf16LEToUtf8(sText); veUtf32be: Result := Utf32BEToUtf8(sText); veUtf32le: Result := Utf32LEToUtf8(sText); else Result := LConvEncoding.ConvertEncoding(sText, ViewerEncodingsNames[FEncoding], EncodingUTF8); end; end; function TViewerControl.ConvertFromUTF8(const sText: String): AnsiString; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; // Force detect encoding. case FEncoding of veAutoDetect: ; veUtf8, veUtf8bom: Result := sText; veUtf16be: Result := Utf8ToUtf16BE(sText); veUtf16le: Result := Utf8ToUtf16LE(sText); veUtf32be: Result := '';//Utf8ToUtf32BE(sText); veUtf32le: Result := '';//Utf8ToUtf32LE(sText); else Result := LConvEncoding.ConvertEncoding(sText, EncodingUTF8, ViewerEncodingsNames[FEncoding]); end; end; function TViewerControl.IsVisible(const aPosition: PtrInt): Boolean; var StartPos: PtrInt; CharLenInBytes: Integer; begin if IsFileOpen and (FLineList.Count > 0) then begin FVisibleOffset:= 0; StartPos:= GetStartOfLine(aPosition); // Calculate horizontal offset in symbols while (StartPos < aPosition) do begin GetNextCharAsAscii(StartPos, CharLenInBytes); Inc(StartPos, CharLenInBytes); Inc(FVisibleOffset); end; Result := (aPosition >= FLineList.Items[0]) and (aPosition <= FLineList.Items[FLineList.Count - 1]) and (FVisibleOffset >= FHPosition) and (FVisibleOffset <= FHPosition + FTextWidth); end else Result := False; end; procedure TViewerControl.MakeVisible(const aPosition: PtrInt); var Offset: Integer; LastLine: Boolean; begin if not IsVisible(aPosition) then begin SetPosition(aPosition); Offset:= GetLinesTillEnd(aPosition, LastLine); if (Offset > 4) and (LastLine = False) then Scroll(-4); Update; if (FVisibleOffset < FHPosition) or (FVisibleOffset > FHPosition + FTextWidth) then begin SetHPosition(FVisibleOffset); HScroll(-1); end; end; end; procedure TViewerControl.ScrollBarVertScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin FUpdateScrollBarPos := False; case ScrollCode of scLineUp: Scroll(-1); scLineDown: Scroll(1); scPageUp: PageUp; scPageDown: PageDown; scTop: GoHome; scBottom: GoEnd; scTrack, scPosition: begin // This check helps avoiding loops if changing ScrollPos below // triggers another scPosition message. if (ScrollCode = scTrack) or (ScrollPos <> FScrollBarPosition) then begin if ScrollPos = 0 then GoHome else if ScrollPos = 100 then GoEnd else Percent := ScrollPos; end; end; scEndScroll: begin end; end; ScrollPos := FScrollBarPosition; FUpdateScrollBarPos := True; end; procedure TViewerControl.ScrollBarHorzScroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin FUpdateScrollBarPos := False; case ScrollCode of scLineUp: HScroll(-1); scLineDown: HScroll(1); scPageUp: HPageUp; scPageDown: HPageDown; scTop: HGoHome; scBottom: HGoEnd; scTrack, scPosition: begin // This check helps avoiding loops if changing ScrollPos below // triggers another scPosition message. if (ScrollCode = scTrack) or (ScrollPos <> FHScrollBarPosition) then begin if ScrollPos = 0 then HGoHome else if ScrollPos = 100 then HGoEnd else HScroll((FHLowEnd - FTextWidth) * ScrollPos div 100 - FHPosition); end; end; scEndScroll: begin end; end; ScrollPos := FHScrollBarPosition; FUpdateScrollBarPos := True; end; procedure TViewerControl.UpdateScrollbars; begin FScrollBarVert.LargeChange := GetClientHeightInLines - 1; case ViewerMode of vmBin, vmHex: begin //FScrollBarVert.PageSize := // ((FHighLimit div cHexWidth - GetClientHeightInLines) div 100); end else FScrollBarVert.PageSize := 1; end; FScrollBarHorz.Visible:= (FViewerMode = vmText); end; procedure TViewerControl.ViewerResize(Sender: TObject); begin UpdateScrollbars; // Force recalculating position. SetPosition(FPosition); SetHPosition(FHPosition); end; procedure TViewerControl.ReReadFile; begin FBlockBeg := 0; FBlockEnd := 0; FBOMLength := GetBomLength; UpdateLimits; UpdateScrollbars; Invalidate; end; function TViewerControl.IsFileOpen: Boolean; begin Result := Assigned(FMappedFile); end; function TViewerControl.DetectEncoding: TViewerEncoding; var DetectStringLength: Integer = 2048; // take first 2kB of the file to detect encoding DetectString: String; DetectedEncodingName: String; Enc: TViewerEncoding; begin if IsFileOpen then begin // Default to Ansi in case encoding cannot be detected or is unsupported. Result := veAnsi; if FFileSize < DetectStringLength then DetectStringLength := FFileSize; SetString(DetectString, PAnsiChar(FMappedFile), DetectStringLength); if Assigned(FOnGuessEncoding) then DetectedEncodingName := FOnGuessEncoding(DetectString) else DetectedEncodingName := LConvEncoding.GuessEncoding(DetectString); if DetectedEncodingName <> '' then begin DetectedEncodingName := NormalizeEncoding(DetectedEncodingName); // Map UCS-2 to UTF-16. if DetectedEncodingName = 'ucs2le' then DetectedEncodingName := 'utf16le' else if DetectedEncodingName = 'ucs2be' then DetectedEncodingName := 'utf16be'; for Enc := Low(TViewerEncoding) to High(TViewerEncoding) do begin if NormalizeEncoding(ViewerEncodingsNames[Enc]) = DetectedEncodingName then begin Result := Enc; break; end; end; end; end else Result := veAutoDetect; end; procedure TViewerControl.GetSupportedEncodings(List: TStrings); var Enc: TViewerEncoding; begin for Enc := Low(TViewerEncoding) to High(TViewerEncoding) do List.Add(ViewerEncodingsNames[Enc]); end; function TViewerControl.GetBomLength: Integer; begin Result := 0; case FEncoding of veUtf8, veUtf8bom: if (FFileSize >= 3) and (PByte(FMappedFile)[0] = $EF) and (PByte(FMappedFile)[1] = $BB) and (PByte(FMappedFile)[2] = $BF) then begin Result := 3; end; veUcs2be, veUtf16be: if (FFileSize >= 2) and (PByte(FMappedFile)[0] = $FE) and (PByte(FMappedFile)[1] = $FF) then begin Result := 2; end; veUcs2le, veUtf16le: if (FFileSize >= 2) and (PByte(FMappedFile)[0] = $FF) and (PByte(FMappedFile)[1] = $FE) then begin Result := 2; end; veUtf32be: if (FFileSize >= 4) and (PByte(FMappedFile)[0] = $00) and (PByte(FMappedFile)[1] = $00) and (PByte(FMappedFile)[2] = $FE) and (PByte(FMappedFile)[3] = $FF) then begin Result := 4; end; veUtf32le: if (FFileSize >= 4) and (PByte(FMappedFile)[0] = $00) and (PByte(FMappedFile)[1] = $00) and (PByte(FMappedFile)[2] = $FF) and (PByte(FMappedFile)[3] = $FE) then begin Result := 4; end; end; end; procedure TViewerControl.UpdateLimits; begin if FEncoding = veAutoDetect then FEncoding := DetectEncoding; FBOMLength := GetBomLength; case FViewerMode of vmText, vmWrap, vmBook: begin FLowLimit := 0; FHighLimit := FFileSize - FBOMLength; end; else begin FLowLimit := 0; FHighLimit := FFileSize; end; end; end; procedure TViewerControl.UpdateSelection; procedure Check(var aPosition: PtrInt; Backwards: Boolean); var CharStart: Pointer; begin case FEncoding of veUtf8, veUtf8bom: begin if not Backwards then begin CharStart := SafeUTF8NextCharStart(GetDataAdr + aPosition, FHighLimit - aPosition); if Assigned(CharStart) then aPosition := CharStart - GetDataAdr else aPosition := 0; end else begin CharStart := SafeUTF8PrevCharEnd(GetDataAdr + aPosition, aPosition - FLowLimit); if Assigned(CharStart) then aPosition := CharStart - GetDataAdr else aPosition := 0; end; end; veAnsi, veCp1250..veCp950, veIso88591, veIso88592, veKoi8: ; // any position allowed veUcs2be, veUcs2le: aPosition := ((aPosition - FLowLimit) and not 1) + FLowLimit; veUtf16be, veUtf16le: // todo: check if not in the middle of utf-16 character aPosition := ((aPosition - FLowLimit) and not 1) + FLowLimit; veUtf32be, veUtf32le: aPosition := ((aPosition - FLowLimit) and not 3) + FLowLimit; else raise Exception.Create('Unsupported viewer encoding'); end; end; begin if (FBlockBeg < FLowLimit) or (FBlockBeg >= FHighLimit) or (FBlockEnd < FLowLimit) or (FBlockEnd >= FHighLimit) then begin FBlockBeg := FLowLimit; FBlockEnd := FLowLimit; end else begin case FViewerMode of vmText, vmWrap, vmBook: begin Check(FBlockBeg, False); Check(FBlockEnd, True); if (FBlockBeg < FLowLimit) or (FBlockBeg >= FHighLimit) or (FBlockEnd < FLowLimit) or (FBlockEnd >= FHighLimit) or (FBlockEnd < FBlockBeg) then begin FBlockBeg := FLowLimit; FBlockEnd := FLowLimit; end; end; // In non-text modes any selection is valid. end; end; end; function TViewerControl.FindUtf8Text(iStartPos: PtrInt; const sSearchText: String; bCaseSensitive: Boolean; bSearchBackwards: Boolean): PtrInt; var SearchTextLength: Integer; sSearchChars: array of String; pCurrentAddr, pEndAddr: PtrInt; i, charLen: Integer; function sPos2(pAdr: PtrInt):Boolean; var curChr:String; i, charLen: Integer; begin Result := False; for i := 0 to SearchTextLength-1 do begin curChr:=GetNextCharAsUtf8(pAdr,charLen); case bCaseSensitive of False: if UTF8UpperCase(curChr) <> UTF8UpperCase(sSearchChars[i]) then Exit; True : if curChr <> sSearchChars[i] then Exit; end; if charLen>0 then pAdr:=pAdr+charLen else Inc(pAdr); end; Result:=True; end; begin Result := PtrInt(-1); SearchTextLength := UTF8Length(sSearchText); if (SearchTextLength <= 0) then Exit; setLength(sSearchChars,SearchTextLength); for i:=1 to SearchTextLength do sSearchChars[i-1]:=UTF8Copy(sSearchText,i,1); pCurrentAddr := iStartPos; pEndAddr := FHighLimit - Length(ConvertFromUTF8(sSearchText)); if bSearchBackwards and (pCurrentAddr > pEndAddr) then // Move to the first possible position for searching backwards. pCurrentAddr := pEndAddr; if (pEndAddr < 0) or (pCurrentAddr < 0) or (pCurrentAddr > pEndAddr) then Exit; while True do begin if (pCurrentAddr > pEndAddr) or (pCurrentAddr < 0) then Exit; if sPos2(pCurrentAddr) then begin Result := pCurrentAddr; Exit; end; case bSearchBackwards of False: begin GetNextCharAsUtf8(pCurrentAddr,charLen); if charLen>0 then pCurrentAddr:=pCurrentAddr+charLen else Inc(pCurrentAddr); end; True : Dec(pCurrentAddr); end; end; end; procedure TViewerControl.ResetEncoding; begin FEncoding:= veAutoDetect; end; procedure Register; begin RegisterComponents('SeksiCmd', [TViewerControl]); end; end. �����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/viewer/viewerpackage.pas�������������������������������������������������0000644�0001750�0000144�00000000617�12014201074�021520� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. do not edit ! This source is only used to compile and install the package. } unit viewerpackage; interface uses ViewerControl, UnicodeUtils, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('ViewerControl', @ViewerControl.Register); end; initialization RegisterPackage('viewerpackage', @Register); end. �����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/build.bat����������������������������������������������������������������0000644�0001750�0000144�00000001006�12666540554�016503� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������@echo off rem Compiling components rem Do not execute this script directly. rem This script is called from ..\build.bat. pushd components lazbuild chsdet\chsdet.lpk %DC_ARCH% lazbuild CmdLine\cmdbox.lpk %DC_ARCH% lazbuild multithreadprocs\multithreadprocslaz.lpk %DC_ARCH% lazbuild dcpcrypt\dcpcrypt.lpk %DC_ARCH% lazbuild doublecmd\doublecmd_common.lpk %DC_ARCH% lazbuild KASToolBar\kascomp.lpk %DC_ARCH% lazbuild viewer\viewerpackage.lpk %DC_ARCH% lazbuild gifanim\pkg_gifanim.lpk %DC_ARCH% popd ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/�����������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�017615� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/lclext.pas�������������������������������������������������0000644�0001750�0000144�00000003507�12014201074�021570� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit LclExt; { LCL Extension Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } {$mode objfpc}{$H+} interface uses Classes, SysUtils, LCLType, Graphics; function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; implementation {$i uses_lclext.inc} {$i lclext.inc} end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/���������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�021240� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/qt/������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�021664� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/qt/delphicompat.inc��������������������������������0000644�0001750�0000144�00000003675�12014201074�025011� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Qt Interface Initial implementation by Zeljan Rikalo } {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$define HAS_GETTEXTALIGN} {$define HAS_GETWINDOWDC} {$define HAS_OFFSETRGN} {$define HAS_SETBRUSHORGEX} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} function GetBkColor(DC:HDC):COLORREF; var Color: PQColor; begin if QtWidgetSet.IsValidDC(DC) then begin Color := TQtDeviceContext(DC).BackgroundBrush.getColor; TQColorToColorRef(Color^, Result); end else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; begin Result := QtWidgetSet.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; function GetTextAlign(hDC:HDC): LongWord; var QtDC: TQtDeviceContext; QtFontMetrics: QFontMetricsH; QtFont: QFontH; begin Result := 0; if not QtWidgetSet.IsValidDC(hdC) then Exit; QtDC := TQtDeviceContext(hDC); QtFont := QtDC.vFont.FHandle; QtFontMetrics := QFontMetrics_create(QtFont); try {TODO: FIXME we should save somehow text flags into QtDC cause we don't have any function which returns current flags !} finally QFontMetrics_destroy(QtFontMetrics); end; end; function GetWindowDC(hWnd:HWND): HDC; begin Result := LCLIntf.GetDC(hWnd); end; function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; var Region: TQtRegion; begin Region := TQtRegion(hrgn); QRegion_translate(Region.FHandle, nxOffset, nYOffset); Result := Region.GetRegionType; end; function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; var QtDC: TQtDeviceContext; begin Result := False; if not QtWidgetSet.IsValidDC(DC) then Exit; QtDC := TQtDeviceContext(DC); if lppt <> nil then QtDC.getBrushOrigin(lppt); QtDC.setBrushOrigin(nXorg, nYOrg); Result := True; end; �������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/qt/uses.inc����������������������������������������0000644�0001750�0000144�00000000114�12014201074�023300� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ InterfaceBase, LCLIntf, Graphics, qt4, qtint, qtobjects, qtwidgets, Math, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/qt/lclext.inc��������������������������������������0000644�0001750�0000144�00000000447�12014201074�023625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := StretchMaskBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, 0, 0, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/qt/uses_lclext.inc���������������������������������0000644�0001750�0000144�00000000017�12014201074�024655� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses LclIntf;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk/�����������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022025� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk/delphicompat.inc�������������������������������0000644�0001750�0000144�00000010274�12014201074�025143� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$define HAS_DRAWFRAMECONTROL} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := GTKWidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, 0, XSrc, YSrc, Rop); end; function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: LongWord): Boolean; begin Result := LCLIntf.DrawFrameControl(DC, Rect, uType, uState); end; function GetBkColor(DC:HDC):COLORREF; begin if GTKWidgetSet.IsValidDC(DC) then Result := TGtkDeviceContext(DC).CurrentBackColor.ColorRef else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: ObjPas.PInteger; var Size: TSize): BOOL; var lbearing, rbearing, width, ascent,descent: LongInt; UseFont : PGDKFont; IsDBCSFont: Boolean; NewCount,Accumulator,i: Integer; begin //based in lcl code Result := GTKWidgetSet.IsValidDC(DC); if Result then with TGtkDeviceContext(DC) do begin if (CurrentFont = nil) or (CurrentFont^.GDIFontObject = nil) then begin UseFont := GTKWidgetSet.GetDefaultGtkFont(false); end else begin UseFont := CurrentFont^.GDIFontObject; end; If UseFont = nil then DebugLn('WARNING: [TGtkWidgetSet.GetTextExtentPoint] Missing font') else begin descent:=0; { UpdateDCTextMetric(TDeviceContext(DC)); IsDBCSFont:=TDeviceContext(DC).DCTextMetric.IsDoubleByteChar; if IsDBCSFont then begin NewCount:=Count*2; if FExtUTF8OutCacheSize<NewCount then begin ReAllocMem(FExtUTF8OutCache,NewCount); FExtUTF8OutCacheSize:=NewCount; end; NewCount:=UTF8ToDoubleByte(Str,Count,FExtUTF8OutCache)*2; gdk_text_extents(UseFont, FExtUTF8OutCache, NewCount, @lbearing, @rBearing, @width, @ascent, @descent); end else begin gdk_text_extents(UseFont, Str, Count, @lbearing, @rBearing, @width, @ascent, @descent); end; } gdk_text_extents(UseFont, Str, Count,@lbearing, @rBearing, @width, @ascent, @descent); Size.cX := Width; Size.cY := ascent+descent; if PartialWidths <> nil then begin Accumulator:=0; for i:= 0 to Count - 1 do begin Inc(Accumulator,gdk_char_width(UseFont,(Str+i)^)); PartialWidths[i]:=Accumulator; end; end; end; end; end; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk/uses.inc���������������������������������������0000644�0001750�0000144�00000000106�12014201074�023442� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ LCLIntf, Graphics, gtkdef, gdk, GTKProc, GtkInt, glib, gtk, Math, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk/lclext.inc�������������������������������������0000644�0001750�0000144�00000000475�12014201074�023767� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := GTKWidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, XSrc, YSrc, SRCCOPY); end; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk/uses_lclext.inc��������������������������������0000644�0001750�0000144�00000000017�12014201074�025016� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses GtkInt; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/carbon/��������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022504� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/carbon/delphicompat.inc����������������������������0000644�0001750�0000144�00000000710�11751527542�025636� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { Carbon Interface Dummy implementation. Not tested. Waiting for someone with a Mac to implement it } { Only a few functions are necessary to compile VirtualTreeView: } {.$define HAS_GETTEXTEXTENTEXPOINT} {.$define HAS_GETTEXTALIGN} {.$define HAS_GETWINDOWDC} {.$define HAS_OFFSETRGN} {.$define HAS_SETBRUSHORGEX} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} ��������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/carbon/uses.inc������������������������������������0000644�0001750�0000144�00000000102�12014201074�024115� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ InterfaceBase, LCLIntf, Graphics, CarbonInt, CarbonCanvas, Math,��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/carbon/lclext.inc����������������������������������0000644�0001750�0000144�00000000447�12014201074�024445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := StretchMaskBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, 0, 0, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/carbon/uses_lclext.inc�����������������������������0000644�0001750�0000144�00000000017�12014201074�025475� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses LclIntf;�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/generic/�������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022654� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/generic/independentfunctions.inc�������������������0000644�0001750�0000144�00000001571�12014201074�027547� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; var i: Integer; XOffset, YOffset: SmallInt; FromPoint, ToPoint: TPoint; begin FromPoint := Point(0, 0); ToPoint := Point(0, 0); if hWndFrom <> 0 then ClientToScreen(hWndFrom, FromPoint); if hWndTo <> 0 then ClientToScreen(hWndTo, ToPoint); XOffset := (FromPoint.X - ToPoint.X); YOffset := (FromPoint.Y - ToPoint.Y); for i := 0 to cPoints - 1 do begin PPoint(@lpPoints)[i].x := XOffset + PPoint(@lpPoints)[i].x; PPoint(@lpPoints)[i].y := YOffset + PPoint(@lpPoints)[i].y; end; Result := MakeLong(XOffset, YOffset); end; {$ifndef HAS_BITBLT} function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := LCLIntf.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop); end; {$endif} ���������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/generic/stubs.inc����������������������������������0000644�0001750�0000144�00000010360�12140233030�024452� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function BeginDeferWindowPos(nNumWindows:longint):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function CopyImage(hImage:THANDLE; uType:LongWord; cxDesired, cyDesired: LongInt; fuFlags:LongWord):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter:THandle; x, y, cx, cy:longint; uFlags:LongWord):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function EndDeferWindowPos(hWinPosInfo:THandle):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GdiFlush: Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetACP:LongWord; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_GETBKCOLOR} function GetBkColor(DC:HDC):COLORREF; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function GetDCEx(hWnd:HWND; hrgnClip:HRGN; flags:DWORD):HDC; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetKeyboardLayout(dwLayout:DWORD):THandle; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetKeyboardState(lpKeyState: System.PByte):BOOLEAN; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetLocaleInfo(Locale, LCType:LongWord; lpLCData:PChar; cchData:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_GETTEXTEXTENTEXPOINT} function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; begin Result := LCLIntf.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; {$endif} {$ifndef HAS_GETTEXTALIGN} function GetTextAlign(hDC:HDC): LongWord; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} {$ifndef HAS_GETWINDOWDC} function GetWindowDC(hWnd:HWND):HDC; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ImageList_DragShowNolock(fShow: Boolean): Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; function MultiByteToWideChar(CodePage, dwFlags:DWORD; lpMultiByteStr:PChar; cchMultiByte:longint; lpWideCharStr:PWideChar;cchWideChar:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_OFFSETRGN} function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ScrollDC(DC:HDC; dx:longint; dy:longint; var lprcScroll:TRECT; var lprcClip:TRECT;hrgnUpdate:HRGN; lprcUpdate:PRECT):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$ifndef HAS_SETBRUSHORGEX} function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; begin Result := False; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; {$endif} function ToAscii(uVirtKey, uScanCode:LongWord; lpKeyState: System.PByte; lpChar: System.PWord; uFlags:LongWord):longint; begin Result := 0; {$ifdef DEBUG_DELPHICOMPAT} Logger.SendCallStack('Dummy WinAPI Implementation'); {$endif} end; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/generic/unicodefunctions.inc�����������������������0000644�0001750�0000144�00000002022�12014201074�026670� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { GetUTF8ByteCount returns the number of bytes necessary to hold the requested number of characters (count). Not necessarily the number of characters is equal to the widestring length but here we assume it to skip the extra overhead } //todo do a function that convert the str and the count at one pass function GetUTF8ByteCount(const UTF8Str: UTF8String; WideCount: Integer): Integer; var CharCount, CharLen, StrLen: Integer; P: PChar; begin Result := 0; CharCount := 0; P := PChar(UTF8Str); StrLen := Length(UTF8Str); WideCount := Min(WideCount, StrLen); while (CharCount < WideCount) do begin CharLen := UTF8CharacterLength(P); Inc(P, CharLen); Inc(Result, CharLen); Inc(CharCount); end; Result := Min(Result, StrLen); end; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; var TempStr: UTF8String; begin TempStr := UTF8Encode(WideString(Str)); Result := GetTextExtentPoint(DC, PChar(TempStr), GetUTF8ByteCount(TempStr, Count), Size); end; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk2/����������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022107� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk2/delphicompat.inc������������������������������0000644�0001750�0000144�00000006346�12203745772�025254� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } {$MACRO ON} {$define HAS_GETBKCOLOR} {$define HAS_GETTEXTEXTENTEXPOINT} {$i ../generic/stubs.inc} {$i ../generic/independentfunctions.inc} {$i ../generic/unicodefunctions.inc} procedure pango_extents_to_pixels (ink_rect: PPangoRectangle; logical_rect: PPangoRectangle); cdecl; external 'libpango-1.0.so.0'; function GetBkColor(DC:HDC):COLORREF; begin if GTK2WidgetSet.IsValidDC(DC) then Result := TGtkDeviceContext(DC).CurrentBackColor.ColorRef else Result := CLR_INVALID; end; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; var layout: PPangoLayout; i: Integer; Rect: TPangoRectangle; iter : PPangoLayoutIter; begin Result := GTK2WidgetSet.IsValidDC(DC); if Result then with TGtk2DeviceContext(DC) do begin if (CurrentFont = nil) or (CurrentFont^.GDIFontObject = nil) then layout := GTK2WidgetSet.GetDefaultGtkFont(false) else layout := CurrentFont^.GDIFontObject; pango_layout_set_text(layout, Str, Count); if PartialWidths = nil then pango_layout_get_pixel_size (layout, @Size.cx, @Size.cy) else begin i := 0; Size.cx := 0; Size.cy := 0; iter := pango_layout_get_iter(layout); repeat pango_layout_iter_get_char_extents(iter,@Rect); pango_extents_to_pixels(nil,@Rect); inc(Size.cx, Rect.Width); PartialWidths[i] := Size.cx; if Size.cy < Rect.Height then Size.cy := Rect.Height; inc(i); until not pango_layout_iter_next_char(iter); pango_layout_iter_free(iter); end; end; end; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk2/uses.inc��������������������������������������0000644�0001750�0000144�00000000077�12014201074�023533� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ LCLIntf, Graphics, Gtk2Def, Gtk2Proc, Gtk2Int, pango, math, �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk2/lclext.inc������������������������������������0000644�0001750�0000144�00000000474�12014201074�024050� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; begin //todo: see if is possible todo it faster Result := GTK2WidgetSet.StretchCopyArea(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Width, Height, Mask, XSrc, YSrc, SRCCOPY); end; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/gtk2/uses_lclext.inc�������������������������������0000644�0001750�0000144�00000000020�12014201074�025072� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������uses Gtk2Int; ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/win32/���������������������������������������������0000755�0001750�0000144�00000000000�12675717723�022202� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/win32/delphicompat.inc�����������������������������0000644�0001750�0000144�00000012755�12014201074�025326� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ { This file is part of Delphi Compatibility Unit Copyright (C) 2007 Luiz Américo Pereira Câmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } function BeginDeferWindowPos(nNumWindows: longint): THandle; begin Result:=Windows.BeginDeferWindowPos(nNumWindows); end; function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; begin Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop); end; function CopyImage(hImage: THANDLE; uType: LongWord; cxDesired, cyDesired: LongInt; fuFlags: LongWord): THandle; begin Result := Windows.CopyImage(hImage,uType,cxDesired,cyDesired,fuFlags); end; function CreatePatternBrush(hbmp: HBITMAP): HBRUSH; begin Result := Windows.CreatePatternBrush(hbmp); end; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter: THandle; x, y, cx, cy: longint; uFlags: LongWord): THandle; begin Result := Windows.DeferWindowPos(hWinPosInfo,hWnd,hWndInsertAfter,x,y,cx,cy,uFlags); end; function DrawFrameControl(DC: HDC; const Rect: TRect; uType, uState: LongWord): Boolean; begin Result := Windows.DrawFrameControl(DC,Rect,uType,uState); end; function EndDeferWindowPos(hWinPosInfo: THandle): Boolean; begin Result:=Windows.EndDeferWindowPos(hWinPosInfo); end; function GdiFlush: Boolean; begin Result := Windows.GdiFlush; end; function GetACP: LongWord; begin Result := Windows.GetACP; end; function GetBkColor(DC: HDC): LCLType.COLORREF; begin Result := Windows.GetBkColor(DC); end; function GetDCEx(hWnd: HWND; hrgnClip: HRGN; flags: DWORD): HDC; begin Result := Windows.GetDCEx(hWnd,hrgnClip,flags); end; function GetKeyboardLayout(dwLayout: DWORD): THandle; begin Result := Windows.GetKeyboardLayout(dwLayout); end; function GetKeyboardState(lpKeyState: PBYTE): BOOLEAN; begin Result := Windows.GetKeyboardState(lpKeyState); end; function GetLocaleInfo(Locale, LCType: LongWord; lpLCData: PChar; cchData: longint): longint; begin Result := Windows.GetLocaleInfo(Locale,LCType,lpLCData,cchData); end; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; external 'GDI32.DLL'; function GetTextAlign(hDC: HDC): LongWord; begin Result := Windows.GetTextAlign(hDC); end; function GetTextExtentExPoint(DC: LCLType.HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: ObjPas.PInteger; var Size: TSize): BOOL; begin Result := Windows.GetTextExtentExPoint(DC, Str, Count, MaxWidth, MaxCount, PartialWidths, Size); end; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; begin Result := Windows.GetTextExtentPointW(DC, Str, Count, Size); end; function GetWindowDC(hWnd: HWND): HDC; begin Result := Windows.GetWindowDC(hWnd); end; function ImageList_DragShowNolock(fShow: Boolean): Boolean; begin Result := CommCtrl.ImageList_DragShowNolock(fShow); end; function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT ): Integer; begin Result:=Windows.MapWindowPoints(hWndFrom,hWndTo,lpPoints,cPoints); end; function MultiByteToWideChar(CodePage, dwFlags: DWORD; lpMultiByteStr: PChar; cchMultiByte: longint; lpWideCharStr: PWideChar; cchWideChar: longint ): longint; begin Result := Windows.MultiByteToWideChar(CodePage,dwFlags,lpMultiByteStr,cchMultiByte,lpWideCharStr,cchWideChar); end; function OffsetRgn(hrgn: HRGN; nxOffset, nYOffset: longint): longint; begin Result := Windows.OffsetRgn(hrgn,nxOffset,nYOffset); end; function SetBrushOrgEx(DC: LCLType.HDC; nXOrg, nYOrg: longint; lppt: Types.PPoint): Boolean; begin Result := Windows.SetBrushOrgEx(DC,nXOrg,nYOrg,lppt); end; function ScrollDC(DC: LCLType.HDC; dx: longint; dy: longint; var lprcScroll: Types.TRect; var lprcClip: Types.TRect; hrgnUpdate: LCLType.HRGN; lprcUpdate: Types.PRect): Boolean; begin Result := Windows.ScrollDC(DC, dx, dy, lprcScroll, lprcClip, hrgnUpdate, lprcUpdate); end; function ToAscii(uVirtKey, uScanCode: LongWord; lpKeyState: PBYTE; lpChar: PWORD; uFlags: LongWord): longint; begin Result := Windows.ToAscii(uVirtKey,uScanCode,lpKeyState,lpChar,uFlags); end; �������������������doublecmd-0.7.1/components/lclextensions/include/win32/uses.inc�������������������������������������0000644�0001750�0000144�00000000042�12014201074�023616� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Windows, win32proc, CommCtrl, ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/win32/lclext.inc�����������������������������������0000644�0001750�0000144�00000002007�12014201074�024135� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������function DirectMaskBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Mask: HBITMAP): Boolean; var MaskDC: HDC; MaskObj: HGDIOBJ; PrevTextColor, PrevBkColor: COLORREF; begin //this is a stripped version of LCL.StretchMaskBlt if Mask <> 0 then begin MaskDC := Windows.CreateCompatibleDC(DestDC); MaskObj := Windows.SelectObject(MaskDC, Mask); PrevTextColor := Windows.SetTextColor(DestDC, $00000000); PrevBkColor := Windows.SetBkColor(DestDC, $00FFFFFF); Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); Windows.BitBlt(DestDC, X, Y, Width, Height, MaskDC, XSrc, YSrc, SRCAND); Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCINVERT); Windows.SetTextColor(DestDC, PrevTextColor); Windows.SetBkColor(DestDC, PrevBkColor); Windows.SelectObject(MaskDC, MaskObj); Windows.DeleteDC(MaskDC); end else Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, SRCCOPY); end; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/include/win32/uses_lclext.inc������������������������������0000644�0001750�0000144�00000000024�12014201074�025171� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ uses Windows; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/oleutils.pas�����������������������������������������������0000644�0001750�0000144�00000010623�12014201074�022132� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit oleutils; { OLE helper functions Copyright (C) 2007 Luiz Amrico Pereira Cmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } //todo: add error handling {$mode objfpc}{$H+} interface {$ifdef Windows} uses Windows, Classes, SysUtils, ActiveX; type { TOLEStream } TOLEStream = class (TStream) private FSrcStream: IStream; procedure InternalSetSize(NewSize: LARGE_INTEGER); public constructor Create(const Stream: IStream); function Read(var Buffer; Count: Integer): Integer; override; function Seek(Offset: Integer; Origin: Word): Integer; overload; override; procedure SetSize(const NewSize: Int64); override; procedure SetSize(NewSize: Longint); override; function Write(const Buffer; Count: Integer): Integer; override; end; {$endif} implementation {$ifdef Windows} function ErrorString(Error: HRESULT): String; begin case Error of E_PENDING: Result:='E_PENDING'; S_FALSE: Result:='S_FALSE'; STG_E_MEDIUMFULL: Result:='STG_E_MEDIUMFULL'; STG_E_ACCESSDENIED: Result:= 'STG_E_ACCESSDENIED'; STG_E_CANTSAVE: Result:='STG_E_CANTSAVE'; STG_E_INVALIDPOINTER: Result:='STG_E_INVALIDPOINTER'; STG_E_REVERTED: Result:='STG_E_REVERTED'; STG_E_WRITEFAULT: Result:='STG_E_WRITEFAULT'; STG_E_INVALIDFUNCTION: Result:='STG_E_INVALIDFUNCTION'; else Result:='Unknow error'; end; end; { TOLEStream } constructor TOLEStream.Create(const Stream: IStream); begin inherited Create; FSrcStream:=Stream; end; function TOLEStream.Read(var Buffer; Count: Integer): Integer; var Res: HRESULT; begin Res:=FSrcStream.Read(@Buffer, Count, @Result); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while reading: '+ErrorString(Res)); end; function TOLEStream.Seek(Offset: Integer; Origin: Word): Integer; var liResult, liOffset : LARGE_INTEGER; Res: HRESULT; begin //soFrom* constants are equal to STREAM_SEEK_* constants. Assume it here liOffset.LowPart:=Offset; liOffset.HighPart:=0; Res:=FSrcStream.Seek(Int64(liOffset), Origin, Int64(liResult)); Result:=liResult.LowPart; if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while seeking: '+ErrorString(Res)); end; procedure TOLEStream.SetSize(NewSize: Longint); var liSize: LARGE_INTEGER; begin liSize.LowPart:=NewSize; liSize.HighPart:=0; InternalSetSize(liSize); end; procedure TOLEStream.SetSize(const NewSize: Int64); var liSize: LARGE_INTEGER; begin liSize.QuadPart:=NewSize; InternalSetSize(liSize); end; procedure TOLEStream.InternalSetSize(NewSize: LARGE_INTEGER); var Res:HRESULT; begin Res:=FSrcStream.SetSize(Int64(NewSize)); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while setting size: '+ErrorString(Res)); end; function TOLEStream.Write(const Buffer; Count: Integer): Integer; var Res: HRESULT; begin Res:=FSrcStream.Write(@Buffer,Count,@Result); if Res <> S_OK then Raise Exception.Create('TOLEStream - Error while writing: '+ErrorString(Res)); end; {$endif} end. �������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/delphicompat.pas�������������������������������������������0000644�0001750�0000144�00000010710�12014201074�022740� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit DelphiCompat; { Delphi Compatibility Unit Copyright (C) 2007 Luiz Amrico Pereira Cmara pascalive@bol.com.br 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 with the following modification: As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules,and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU 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. } {$mode objfpc}{$H+} {.$define DEBUG_DELPHICOMPAT} interface uses LMessages, Types, LCLType, Classes; const //Messages WM_GETDLGCODE = LM_GETDLGCODE; WM_ERASEBKGND = LM_ERASEBKGND; WM_VSCROLL = LM_VSCROLL; WM_HSCROLL = LM_HSCROLL; WM_CHAR = LM_CHAR; WM_KEYDOWN = LM_KEYDOWN; WM_KEYUP = LM_KEYUP; WM_KILLFOCUS = LM_KILLFOCUS; WM_SIZE = LM_SIZE; WM_LBUTTONDBLCLK = LM_LBUTTONDBLCLK; WM_LBUTTONDOWN = LM_LBUTTONDOWN; type //TWM* types TMessage = TLMessage; TWMHScroll = TLMHScroll; TWMVScroll = TLMVScroll; TWMChar = TLMChar; TWMKeyDown = TLMKeyDown; TWMKeyUp = TLMKeyUp; TWMKillFocus = TLMKillFocus; TWMSize = TLMSize; TWMLButtonDblClk = TLMLButtonDblClk; TWMMeasureItem = TLMMeasureItem; TWMDrawItem = TLMDrawItems; function BeginDeferWindowPos(nNumWindows: LongInt):THandle; function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; function CopyImage(hImage: THandle; uType:LongWord; cxDesired, cyDesired: LongInt; fuFlags:LongWord):THandle; function DeferWindowPos(hWinPosInfo, hWnd, hWndInsertAfter:THandle; x, y, cx, cy:longint; uFlags:LongWord):THandle; function EndDeferWindowPos(hWinPosInfo:THandle):Boolean; function GdiFlush: Boolean; function GetACP:LongWord; function GetBkColor(DC:HDC):COLORREF; function GetDCEx(hWnd:HWND; hrgnClip:HRGN; flags:DWORD):HDC; function GetKeyboardLayout(dwLayout:DWORD):THandle; function GetKeyboardState(lpKeyState:PBYTE):BOOLEAN; function GetLocaleInfo(Locale, LCType:LongWord; lpLCData:PChar; cchData:longint):longint; function GetRandomRgn(DC: HDC; Rgn: HRGN; iNum: Integer): Integer; stdcall; function GetTextAlign(hDC:HDC): LongWord; function GetTextExtentExPoint(DC: HDC; Str: PChar; Count, MaxWidth: Integer; MaxCount, PartialWidths: PInteger; var Size: TSize): BOOL; function GetTextExtentPoint32W(DC: HDC; Str: PWideChar; Count: Integer; out Size: TSize): Boolean; function GetWindowDC(hWnd:HWND):HDC; function ImageList_DragShowNolock(fShow: Boolean): Boolean; function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints; cPoints: UINT): Integer; function MultiByteToWideChar(CodePage, dwFlags:DWORD; lpMultiByteStr:PChar; cchMultiByte:longint; lpWideCharStr:PWideChar;cchWideChar:longint):longint; function OffsetRgn(hrgn:HRGN; nxOffset, nYOffset:longint):longint; function ScrollDC(DC:HDC; dx:longint; dy:longint; var lprcScroll:TRECT; var lprcClip:TRECT;hrgnUpdate:HRGN; lprcUpdate:PRECT):Boolean; function SetBrushOrgEx(DC:HDC; nXOrg, nYOrg:longint; lppt:PPOINT):Boolean; function ToAscii(uVirtKey, uScanCode:LongWord; lpKeyState: PByte; lpChar: PWord; uFlags:LongWord): LongInt; implementation uses {$i uses.inc} LCLProc, Controls {$ifdef DEBUG_DELPHICOMPAT} ,multiloglcl, filechannel {$endif} ; {$ifdef DEBUG_DELPHICOMPAT} const //Logger classes lcInfo = 0; lcStack = 1; var Logger: TLCLLogger; {$endif} {$i delphicompat.inc} end. ��������������������������������������������������������doublecmd-0.7.1/components/lclextensions/lclextensions_package_doublecmd.pas������������������������0000644�0001750�0000144�00000000565�12014201074�026661� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit lclextensions_package_doublecmd; interface uses DelphiCompat, oleutils, LclExt, LazarusPackageIntf; implementation procedure Register; begin end; initialization RegisterPackage('lclextensions_package_doublecmd', @Register); end. �������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/lclextensions_package_doublecmd.lpk������������������������0000644�0001750�0000144�00000003504�11751527542�026702� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="lclextensions_package_doublecmd"/> <AddToProjectUsesSection Value="True"/> <Author Value="Luiz Americo Pereira Câmara"/> <CompilerOptions> <Version Value="10"/> <SearchPaths> <IncludeFiles Value="include/$(LCLWidgetType)"/> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)-$(LCLWidgetType)"/> </SearchPaths> <Parsing> <SyntaxOptions> <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <GenerateDebugInfo Value="True"/> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerMessages> <UseMsgFile Value="True"/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="LCL Extensions provides additional functions to be used together with LCL "/> <License Value="Modified LGPL "/> <Version Minor="4"/> <Files Count="3"> <Item1> <Filename Value="delphicompat.pas"/> <UnitName Value="DelphiCompat"/> </Item1> <Item2> <Filename Value="oleutils.pas"/> <UnitName Value="oleutils"/> </Item2> <Item3> <Filename Value="lclext.pas"/> <UnitName Value="LclExt"/> </Item3> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/lclextensions/readme.txt�������������������������������������������������0000644�0001750�0000144�00000000167�12014201074�021565� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������lclextensions v0.4 http://code.google.com/p/luipack/ Some modifications done so that it only compiles VirtualTreeView.���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/������������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717722�016174� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/chsdet.pas��������������������������������������������������������0000644�0001750�0000144�00000001145�12014201074�020123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit chsdet; interface uses Big5Freq, CharDistribution, chsdIntf, CustomDetector, EUCKRFreq, EUCSampler, EUCTWFreq, GB2312Freq, JISFreq, JpCntx, MBUnicodeMultiProber, MultiModelProber, nsCodingStateMachine, nsCore, nsEscCharsetProber, nsGroupProber, nsHebrewProber, nsLatin1Prober, nsMBCSMultiProber, nsPkg, nsSBCharSetProber, nsSBCSGroupProber, nsUniversalDetector, LangBulgarianModel, LangCyrillicModel, LangGreekModel, LangHebrewModel; implementation end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/ReadMe.txt��������������������������������������������������������0000644�0001750�0000144�00000013747�12014201074�020055� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������-----------Summary Charset Detector - as the name says - is a stand alone executable module for automatic charset detection of a given text. It can be useful for internationalisation support in multilingual applications such as web-script editors or Unicode editors. Given input buffer will be analysed to guess used encoding. The result can be used as control parameter for charset conversation procedure. Charset Detector can be compiled (and hopefully used) for MS Windows (as dll - dynamic link library) or Linux. Based on Mozilla's i18n component - http://www.mozilla.org/projects/intl/. -----------State Version 0.2.6 stable. The latest version can be found at http://chsdet.sourceforge.net. -----------Requirements Charset Detector doesn't need any external components. -----------Output As result you will get guessed charset as MS Windows Code Page id and charset name. -----------Licence Charset Detector is open source project and distributed under Lesser GPL. See the GNU Lesser General Public License for more details - http://www.opensource.org/licenses/lgpl-license.php -----------Supported charsets +-----------+---------------------------+------------------------+ | Code pade | Name | Note | +-----------+---------------------------+------------------------+ | 0 | ASCII | Pseudo code page. | | 855 | IBM855 | | | 866 | IBM866 | | | 932 | Shift_JIS | | | 950 | Big5 | | | 1200 | UTF-16LE | | | 1201 | UTF-16BE | | | 1251 | windows-1251 | | | 1252 | windows-1252 | | | 1253 | windows-1253 | | | 1255 | windows-1255 | | | 10007 | x-mac-cyrillic | | | 12000 | X-ISO-10646-UCS-4-2143 | | | 12000 | UTF-32LE | MS Windows hasn't CP.| | | | Try to use USC-4. | | 12001 | X-ISO-10646-UCS-4-3412 | | | 12001 | UTF-32BE | MS Windows hasn't CP.| | | | Try to use USC-4. | | 20866 | KOI8-R | | | 28595 | ISO-8859-5 | | | 28595 | ISO-8859-5 | | | 28597 | ISO-8859-7 | | | 28598 | ISO-8859-8 | | | 50222 | ISO-2022-JP | | | 50225 | ISO-2022-KR | | | 50227 | ISO-2022-CN | | | 51932 | EUC-JP | | | 51936 | x-euc-tw | | | 51949 | EUC-KR | | | 52936 | HZ-GB-2312 | | | 54936 | GB18030 | | | 65001 | UTF-8 | | +-----------+---------------------------+------------------------+ -----------Types Return values NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; Returned types rCharsetInfo = record Name: pChar; // charset GNU canonical name CodePage: integer; // MS Windows CodePage id Language: pChar; // end; rAboutHolder = record MajorVersionNr: Cardinal; // Library's Major Version # MinorVersionNr: Cardinal; // Library's Minor Version # BuildVersionNr: Cardinal; // Library's Build/Release Version # About: pChar; // Copyleft information; end; -----------Exported functions procedure chsd_Reset; stdcall; Reset Charset Detector state. Prepare to new analyse. function chsd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; Analyse given buffer. Parameters aBuf - pointer to buffer with text. sLen - buffer length; Return value NS_ERROR_OUT_OF_MEMORY - failure. Unable to create internal objects. NS_OK - success. Note Function can be called more that one time to continue guessing. Charset Detector remember last state until chsd_Reset called. function chsd_Done: Boolean; stdcall; Return value TRUE - Charset Detector is sure about text encoding. FALSE - Overwise. Note If input buffer is smaller then 1K Charset Detector returns anyway FALSE. procedure chsd_DataEnd; stdcall; Signalise data end. If Charset Detector hasn't sure result (Done = FALSE) the best guessed encoding will be set as result. function chsd_GetDetectedCharset: rCharsetInfo; stdcall; Returns guessed charset. procedure chsd_GetKnownCharsets(var KnownCharsets: pChar); Fills the parameter with all supported charsets in form "CodePage - Name LineFeed". procedure chsd_GetAbout(var About: rAboutHolder); stdcall; Fills the parameter with version and copyleft information. -----------Sample The definition file "chsd_dll_intf.pas" can be found in the same direcory. Bellow is small usage sample. // WS: WideString; // Wide string which can be used in Unicode controls. // Get encoding of some buffer chsd_Reset; chsd_HandleData(aBuf, aLen); if not chsd_Done then chsd_DataEnd; ChSInfo := chsd_GetDetectedCharset(); // convert buffer to WideString OutputLength := MultiByteToWideChar(ChSInfo.CodePage, 0, aBuf, aLen, nil, 0); SetLength(WS, OutputLength); MultiByteToWideChar(ChSInfo.CodePage, 0, aBuf, aLen, PWideChar(WS), OutputLength); // If you using Unicode SynEdit SynEdit.Lines.Text := WS; Nikolaj Yakowlew 2006-2008 �������������������������doublecmd-0.7.1/components/chsdet/src/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�016764� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/CustomDetector.pas��������������������������������������������0000644�0001750�0000144�00000002774�12014201074�022415� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit CustomDetector; interface uses {$I dbg.inc} nscore; type TCustomDetector = class(TObject) protected mState: eProbingState; mEnabled: Boolean; // procedure Init; virtual; abstract; procedure SetEnabled(NewValue: Boolean); virtual; function GetEnabled: Boolean; virtual; public constructor Create; virtual; function GetDetectedCharset: eInternalCharsetID; virtual; abstract; function HandleData(aBuf: PChar; aLen: integer): eProbingState; virtual; function GetState: eProbingState; virtual; function GetConfidence: float; virtual; abstract; procedure Reset; virtual; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); virtual; {$endif} property Enabled: Boolean read GetEnabled write SetEnabled; end; implementation { TCustomDetector } constructor TCustomDetector.Create; begin mEnabled := true; end; function TCustomDetector.GetEnabled: Boolean; begin Result := mEnabled; end; procedure TCustomDetector.SetEnabled(NewValue: Boolean); begin mEnabled := NewValue; end; function TCustomDetector.GetState: eProbingState; begin Result := mState; end; function TCustomDetector.HandleData(aBuf: PChar; aLen: integer): eProbingState; begin if not mEnabled then begin mState := psNotMe; end; Result := mState; end; procedure TCustomDetector.Reset; begin mState := psDetecting; end; {$ifdef DEBUG_chardet} procedure TCustomDetector.DumpStatus(Dump: string); begin addDump(Dump); end; {$endif} end. ����doublecmd-0.7.1/components/chsdet/src/nsLatin1Prober.pas��������������������������������������������0000644�0001750�0000144�00000015371�12014201074�022311� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsLatin1Prober.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsLatin1Prober; interface uses nsCore, CustomDetector; type TnsLatin1Prober = class(TCustomDetector) private mLastCharClass: Char; mFreqCounter: array of PRUint32; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function GetConfidence: float; override; {$ifdef DEBUG_chardet} procedure DumpStatus; override; {$endif} end; implementation uses SysUtils; const FREQ_CAT_NUM = 4; UDF = 0; (* undefined*) OTH = 1; (*other*) ASC = 2; (* ascii capital letter*) ASS = 3; (* ascii small letter*) ACV = 4; (* accent capital vowel*) ACO = 5; (* accent capital other*) ASV = 6; (* accent small vowel*) ASO = 7; (* accent small other*) CLASS_NUM = 8; (* total classes*) Latin1_CharToClass: array [0..255] of byte = ( OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 00 - 07 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 08 - 0F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 10 - 17 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 18 - 1F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 20 - 27 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 28 - 2F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 30 - 37 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 38 - 3F OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 40 - 47 ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 48 - 4F ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, // 50 - 57 ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, // 58 - 5F OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 60 - 67 ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 68 - 6F ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, // 70 - 77 ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, // 78 - 7F OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, // 80 - 87 OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, // 88 - 8F UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // 90 - 97 OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, // 98 - 9F OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A0 - A7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // A8 - AF OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B0 - B7 OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, // B8 - BF ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, // C0 - C7 ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, // C8 - CF ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, // D0 - D7 ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, // D8 - DF ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, // E0 - E7 ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, // E8 - EF ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, // F0 - F7 ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO // F8 - FF ); (* 0 : illegal 1 : very unlikely 2 : normal 3 : very likely *) Latin1ClassModel: array [0..63] of byte = ( (* UDF OTH ASC ASS ACV ACO ASV ASO *) (*UDF*) 0, 0, 0, 0, 0, 0, 0, 0, (*OTH*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASC*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASS*) 0, 3, 3, 3, 1, 1, 3, 3, (*ACV*) 0, 3, 3, 3, 1, 2, 1, 2, (*ACO*) 0, 3, 3, 3, 3, 3, 3, 3, (*ASV*) 0, 3, 1, 3, 1, 1, 1, 3, (*ASO*) 0, 3, 1, 3, 1, 1, 3, 3 ); { TnsLatin1Prober } constructor TnsLatin1Prober.Create; begin inherited Create; SetLength(mFreqCounter, FREQ_CAT_NUM); Reset; end; destructor TnsLatin1Prober.Destroy; begin SetLength(mFreqCounter, 0); inherited; end; {$ifdef DEBUG_chardet} procedure TnsLatin1Prober.DumpStatus; begin printf(' Latin1Prober: %1.3f [%s]r'#13#10'',GetConfidence,GetCharSetName); end; {$endif} function TnsLatin1Prober.GetDetectedCharset: eInternalCharsetID; begin Result := WINDOWS_1252_CHARSET; end; function TnsLatin1Prober.GetConfidence: float; var confidence: float; total: cardinal; i: integer; begin if mState = psNotMe then begin Result := SURE_NO; exit; end; total := 0; for i := 0 to Pred(FREQ_CAT_NUM) do total := total + mFreqCounter[i]; if total = 0 then confidence := 0.0 else begin confidence := mFreqCounter[3] * 1.0 / total; confidence := confidence - (mFreqCounter[1] * 20.0 /total); end; if confidence < 0.0 then confidence := 0.0; confidence := confidence * (0.50); (* lower the confidence of latin1 so that other more accurate detector *) (* can take priority.*) Result := confidence; end; function TnsLatin1Prober.HandleData(aBuf: PChar; aLen: integer): eProbingState; var newBuf1: PChar; newLen1: integer; charClass: char; freq: byte; i: integer; begin Result := inherited HandleData(aBuf, aLen); if Result = psNotMe then exit; newBuf1 := nil; newLen1 := 0; newBuf1 := AllocMem(aLen); try if not FilterWithEnglishLetters(aBuf,aLen,newBuf1,newLen1) then begin newBuf1 := aBuf; newLen1 := aLen; end; for i := 0 to Pred(newLen1) do begin charClass := char(Latin1_CharToClass[integer(newBuf1[i])]); freq := Latin1ClassModel[byte(mLastCharClass) * CLASS_NUM + byte(charClass)]; if freq = 0 then begin mState:= psNotMe; break; end; inc(mFreqCounter[freq]); mLastCharClass := charClass; end; finally FreeMem(newBuf1, aLen); end; Result := mState; end; procedure TnsLatin1Prober.Reset; var i: integer; begin mState := psDetecting; mLastCharClass := Char(OTH); for i := 0 to Pred(FREQ_CAT_NUM) do mFreqCounter[i] := 0; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsSBCSGroupProber.pas�����������������������������������������0000644�0001750�0000144�00000012302�12014201074�022717� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsSBCSGroupProber.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsSBCSGroupProber; interface uses nsCore, nsGroupProber; type TnsSBCSGroupProber = class(TnsGroupProber) public constructor Create; reintroduce; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; // {$ifdef DEBUG_chardet} // procedure DumpStatus; override; // {$endif} end; implementation uses SysUtils, nsHebrewProber, nsSBCharSetProber, LangCyrillicModel, LangGreekModel, LangBulgarianModel, LangHebrewModel; { TnsSBCSGroupProber } const NUM_OF_PROBERS = 13; constructor TnsSBCSGroupProber.Create; var hebprober: TnsHebrewProber; i: integer; begin mNumOfProbers := NUM_OF_PROBERS; SetLength(mProbers, NUM_OF_PROBERS); SetLength(mIsActive, NUM_OF_PROBERS); SetLength(mProberStates, NUM_OF_PROBERS); mProbers[0] := TnsSingleByteCharSetProber.Create(Win1251Model); mProbers[1] := TnsSingleByteCharSetProber.Create(Koi8rModel); mProbers[2] := TnsSingleByteCharSetProber.Create(Latin5Model); mProbers[3] := TnsSingleByteCharSetProber.Create(MacCyrillicModel); mProbers[4] := TnsSingleByteCharSetProber.Create(Ibm866Model); mProbers[5] := TnsSingleByteCharSetProber.Create(Ibm855Model); mProbers[6] := TnsSingleByteCharSetProber.Create(Latin7Model); mProbers[7] := TnsSingleByteCharSetProber.Create(Win1253Model); mProbers[8] := TnsSingleByteCharSetProber.Create(Latin5BulgarianModel); mProbers[9] := TnsSingleByteCharSetProber.Create(Win1251BulgarianModel); hebprober := TnsHebrewProber.Create; // Notice: Any change in these indexes - 10,11,12 must be reflected // in the code below as well. mProbers[10]:= hebprober; mProbers[11]:= TnsSingleByteCharSetProber.Create(Win1255Model,FALSE,hebprober);(* Logical Hebrew*) mProbers[12]:= TnsSingleByteCharSetProber.Create(Win1255Model,TRUE,hebprober); (* Visual Hebrew*) (* Tell the Hebrew prober about the logical and visual probers*) if (mProbers[10]<>nil)and(mProbers[11]<>nil)and(mProbers[12]<>nil) then (* all are not null*) hebprober.SetModelProbers(mProbers[11],mProbers[12]) else (* One or more is null. avoid any Hebrew probing, null them all*) for i := 10 to 12 do begin mProbers[i].Free; mProbers[i] := nil; end; inherited Create; (* disable latin2 before latin1 is available, otherwise all latin1 *) (* will be detected as latin2 because of their similarity.*) // mProbers[10] = new nsSingleByteCharSetProber(&Latin2HungarianModel); // mProbers[11] = new nsSingleByteCharSetProber(&Win1250HungarianModel); end; function TnsSBCSGroupProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var newBuf1: PChar; newLen1: integer; begin newBuf1 := AllocMem(aLen); newLen1 := 0; (*apply filter to original buffer, and we got new buffer back*) (*depend on what script it is, we will feed them the new buffer *) (*we got after applying proper filter*) (*this is done without any consideration to KeepEnglishLetters*) (*of each prober since as of now, there are no probers here which*) (*recognize languages with English characters.*) Result := mState; try if (not FilterWithoutEnglishLetters(aBuf,aLen,newBuf1,newLen1)) or (newLen1 = 0) then exit; (* Nothing to see here, move on.*) inherited HandleData(newBuf1, newLen1); finally FreeMem(newBuf1, aLen); end; Result:= mState; end; {$ifdef DEBUG_chardet} procedure TnsSBCSGroupProber.DumpStatus; var i: integer; cf: float; i: integer; begin cf := GetConfidence; printf(' SBCS Group Prober --------begin status r'#13#10''); for i := 0 to Pred(NUM_OF_SBCS_PROBERS) do begin if 0 = mIsActive[i] then printf(' inactive: [%s] (i.e. confidence is too low).r'#13#10'',mProbers[i].GetCharSetName) else mProbers[i].DumpStatus; end; printf(' SBCS Group found best match [%s] confidence %f.r'#13#10'',mProbers[mBestGuess].GetCharSetName,cf); end; {$endif} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/���������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�017737� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/EUCKRStatistics.inc��������������������������������������0000644�0001750�0000144�00000012071�12014201074�023325� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCKRStat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000412, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.057502, // FreqH[b0] 0.033182, // FreqH[b1] 0.002267, // FreqH[b2] 0.016076, // FreqH[b3] 0.014633, // FreqH[b4] 0.032976, // FreqH[b5] 0.004122, // FreqH[b6] 0.011336, // FreqH[b7] 0.058533, // FreqH[b8] 0.024526, // FreqH[b9] 0.025969, // FreqH[ba] 0.054411, // FreqH[bb] 0.019580, // FreqH[bc] 0.063273, // FreqH[bd] 0.113974, // FreqH[be] 0.029885, // FreqH[bf] 0.150041, // FreqH[c0] 0.059151, // FreqH[c1] 0.002679, // FreqH[c2] 0.009893, // FreqH[c3] 0.014839, // FreqH[c4] 0.026381, // FreqH[c5] 0.015045, // FreqH[c6] 0.069456, // FreqH[c7] 0.089860, // FreqH[c8] 0.000000, // FreqH[c9] 0.000000, // FreqH[ca] 0.000000, // FreqH[cb] 0.000000, // FreqH[cc] 0.000000, // FreqH[cd] 0.000000, // FreqH[ce] 0.000000, // FreqH[cf] 0.000000, // FreqH[d0] 0.000000, // FreqH[d1] 0.000000, // FreqH[d2] 0.000000, // FreqH[d3] 0.000000, // FreqH[d4] 0.000000, // FreqH[d5] 0.000000, // FreqH[d6] 0.000000, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000000, // FreqH[de] 0.000000, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.000000, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.025593; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.647437; // Lead Byte Weight mSecoundByteFreq: ( 0.016694, // FreqL[a1] 0.000000, // FreqL[a2] 0.012778, // FreqL[a3] 0.030091, // FreqL[a4] 0.002679, // FreqL[a5] 0.006595, // FreqL[a6] 0.001855, // FreqL[a7] 0.000824, // FreqL[a8] 0.005977, // FreqL[a9] 0.004740, // FreqL[aa] 0.003092, // FreqL[ab] 0.000824, // FreqL[ac] 0.019580, // FreqL[ad] 0.037304, // FreqL[ae] 0.008244, // FreqL[af] 0.014633, // FreqL[b0] 0.001031, // FreqL[b1] 0.000000, // FreqL[b2] 0.003298, // FreqL[b3] 0.002061, // FreqL[b4] 0.006183, // FreqL[b5] 0.005977, // FreqL[b6] 0.000824, // FreqL[b7] 0.021847, // FreqL[b8] 0.014839, // FreqL[b9] 0.052968, // FreqL[ba] 0.017312, // FreqL[bb] 0.007626, // FreqL[bc] 0.000412, // FreqL[bd] 0.000824, // FreqL[be] 0.011129, // FreqL[bf] 0.000000, // FreqL[c0] 0.000412, // FreqL[c1] 0.001649, // FreqL[c2] 0.005977, // FreqL[c3] 0.065746, // FreqL[c4] 0.020198, // FreqL[c5] 0.021434, // FreqL[c6] 0.014633, // FreqL[c7] 0.004122, // FreqL[c8] 0.001649, // FreqL[c9] 0.000824, // FreqL[ca] 0.000824, // FreqL[cb] 0.051937, // FreqL[cc] 0.019580, // FreqL[cd] 0.023289, // FreqL[ce] 0.026381, // FreqL[cf] 0.040396, // FreqL[d0] 0.009068, // FreqL[d1] 0.001443, // FreqL[d2] 0.003710, // FreqL[d3] 0.007420, // FreqL[d4] 0.001443, // FreqL[d5] 0.013190, // FreqL[d6] 0.002885, // FreqL[d7] 0.000412, // FreqL[d8] 0.003298, // FreqL[d9] 0.025969, // FreqL[da] 0.000412, // FreqL[db] 0.000412, // FreqL[dc] 0.006183, // FreqL[dd] 0.003298, // FreqL[de] 0.066983, // FreqL[df] 0.002679, // FreqL[e0] 0.002267, // FreqL[e1] 0.011129, // FreqL[e2] 0.000412, // FreqL[e3] 0.010099, // FreqL[e4] 0.015251, // FreqL[e5] 0.007626, // FreqL[e6] 0.043899, // FreqL[e7] 0.003710, // FreqL[e8] 0.002679, // FreqL[e9] 0.001443, // FreqL[ea] 0.010923, // FreqL[eb] 0.002885, // FreqL[ec] 0.009068, // FreqL[ed] 0.019992, // FreqL[ee] 0.000412, // FreqL[ef] 0.008450, // FreqL[f0] 0.005153, // FreqL[f1] 0.000000, // FreqL[f2] 0.010099, // FreqL[f3] 0.000000, // FreqL[f4] 0.001649, // FreqL[f5] 0.012160, // FreqL[f6] 0.011542, // FreqL[f7] 0.006595, // FreqL[f8] 0.001855, // FreqL[f9] 0.010923, // FreqL[fa] 0.000412, // FreqL[fb] 0.023702, // FreqL[fc] 0.003710, // FreqL[fd] 0.001855 // FreqL[fe] ); mSecoundByteStdDev: 0.013937; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.352563 // Trial Byte Weight ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/Big5Statistics.inc���������������������������������������0000644�0001750�0000144�00000012070�12014201074�023241� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const Big5Stat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.114427, // FreqH[a4] 0.061058, // FreqH[a5] 0.075598, // FreqH[a6] 0.048386, // FreqH[a7] 0.063966, // FreqH[a8] 0.027094, // FreqH[a9] 0.095787, // FreqH[aa] 0.029525, // FreqH[ab] 0.031331, // FreqH[ac] 0.036915, // FreqH[ad] 0.021805, // FreqH[ae] 0.019349, // FreqH[af] 0.037496, // FreqH[b0] 0.018068, // FreqH[b1] 0.012760, // FreqH[b2] 0.030053, // FreqH[b3] 0.017339, // FreqH[b4] 0.016731, // FreqH[b5] 0.019501, // FreqH[b6] 0.011240, // FreqH[b7] 0.032973, // FreqH[b8] 0.016658, // FreqH[b9] 0.015872, // FreqH[ba] 0.021458, // FreqH[bb] 0.012378, // FreqH[bc] 0.017003, // FreqH[bd] 0.020802, // FreqH[be] 0.012454, // FreqH[bf] 0.009239, // FreqH[c0] 0.012829, // FreqH[c1] 0.007922, // FreqH[c2] 0.010079, // FreqH[c3] 0.009815, // FreqH[c4] 0.010104, // FreqH[c5] 0.000000, // FreqH[c6] 0.000000, // FreqH[c7] 0.000000, // FreqH[c8] 0.000053, // FreqH[c9] 0.000035, // FreqH[ca] 0.000105, // FreqH[cb] 0.000031, // FreqH[cc] 0.000088, // FreqH[cd] 0.000027, // FreqH[ce] 0.000027, // FreqH[cf] 0.000026, // FreqH[d0] 0.000035, // FreqH[d1] 0.000024, // FreqH[d2] 0.000034, // FreqH[d3] 0.000375, // FreqH[d4] 0.000025, // FreqH[d5] 0.000028, // FreqH[d6] 0.000020, // FreqH[d7] 0.000024, // FreqH[d8] 0.000028, // FreqH[d9] 0.000031, // FreqH[da] 0.000059, // FreqH[db] 0.000040, // FreqH[dc] 0.000030, // FreqH[dd] 0.000079, // FreqH[de] 0.000037, // FreqH[df] 0.000040, // FreqH[e0] 0.000023, // FreqH[e1] 0.000030, // FreqH[e2] 0.000027, // FreqH[e3] 0.000064, // FreqH[e4] 0.000020, // FreqH[e5] 0.000027, // FreqH[e6] 0.000025, // FreqH[e7] 0.000074, // FreqH[e8] 0.000019, // FreqH[e9] 0.000023, // FreqH[ea] 0.000021, // FreqH[eb] 0.000018, // FreqH[ec] 0.000017, // FreqH[ed] 0.000035, // FreqH[ee] 0.000021, // FreqH[ef] 0.000019, // FreqH[f0] 0.000025, // FreqH[f1] 0.000017, // FreqH[f2] 0.000037, // FreqH[f3] 0.000018, // FreqH[f4] 0.000018, // FreqH[f5] 0.000019, // FreqH[f6] 0.000022, // FreqH[f7] 0.000033, // FreqH[f8] 0.000032, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.020606; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.675261; // Lead Byte Weight mSecoundByteFreq: ( 0.020256, // FreqL[a1] 0.003293, // FreqL[a2] 0.045811, // FreqL[a3] 0.016650, // FreqL[a4] 0.007066, // FreqL[a5] 0.004146, // FreqL[a6] 0.009229, // FreqL[a7] 0.007333, // FreqL[a8] 0.003296, // FreqL[a9] 0.005239, // FreqL[aa] 0.008282, // FreqL[ab] 0.003791, // FreqL[ac] 0.006116, // FreqL[ad] 0.003536, // FreqL[ae] 0.004024, // FreqL[af] 0.016654, // FreqL[b0] 0.009334, // FreqL[b1] 0.005429, // FreqL[b2] 0.033392, // FreqL[b3] 0.006121, // FreqL[b4] 0.008983, // FreqL[b5] 0.002801, // FreqL[b6] 0.004221, // FreqL[b7] 0.010357, // FreqL[b8] 0.014695, // FreqL[b9] 0.077937, // FreqL[ba] 0.006314, // FreqL[bb] 0.004020, // FreqL[bc] 0.007331, // FreqL[bd] 0.007150, // FreqL[be] 0.005341, // FreqL[bf] 0.009195, // FreqL[c0] 0.005350, // FreqL[c1] 0.005698, // FreqL[c2] 0.004472, // FreqL[c3] 0.007242, // FreqL[c4] 0.004039, // FreqL[c5] 0.011154, // FreqL[c6] 0.016184, // FreqL[c7] 0.004741, // FreqL[c8] 0.012814, // FreqL[c9] 0.007679, // FreqL[ca] 0.008045, // FreqL[cb] 0.016631, // FreqL[cc] 0.009451, // FreqL[cd] 0.016487, // FreqL[ce] 0.007287, // FreqL[cf] 0.012688, // FreqL[d0] 0.017421, // FreqL[d1] 0.013205, // FreqL[d2] 0.031480, // FreqL[d3] 0.003404, // FreqL[d4] 0.009149, // FreqL[d5] 0.008921, // FreqL[d6] 0.007514, // FreqL[d7] 0.008683, // FreqL[d8] 0.008203, // FreqL[d9] 0.031403, // FreqL[da] 0.011733, // FreqL[db] 0.015617, // FreqL[dc] 0.015306, // FreqL[dd] 0.004004, // FreqL[de] 0.010899, // FreqL[df] 0.009961, // FreqL[e0] 0.008388, // FreqL[e1] 0.010920, // FreqL[e2] 0.003925, // FreqL[e3] 0.008585, // FreqL[e4] 0.009108, // FreqL[e5] 0.015546, // FreqL[e6] 0.004659, // FreqL[e7] 0.006934, // FreqL[e8] 0.007023, // FreqL[e9] 0.020252, // FreqL[ea] 0.005387, // FreqL[eb] 0.024704, // FreqL[ec] 0.006963, // FreqL[ed] 0.002625, // FreqL[ee] 0.009512, // FreqL[ef] 0.002971, // FreqL[f0] 0.008233, // FreqL[f1] 0.010000, // FreqL[f2] 0.011973, // FreqL[f3] 0.010553, // FreqL[f4] 0.005945, // FreqL[f5] 0.006349, // FreqL[f6] 0.009401, // FreqL[f7] 0.008577, // FreqL[f8] 0.008186, // FreqL[f9] 0.008159, // FreqL[fa] 0.005033, // FreqL[fb] 0.008714, // FreqL[fc] 0.010614, // FreqL[fd] 0.006554 // FreqL[fe] ); mSecoundByteStdDev: 0.009909; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.324739 // Trial Byte Weight ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/EUCJPStatistics.inc��������������������������������������0000644�0001750�0000144�00000012071�12014201074�023322� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCJPStat: rEUCStatistics = ( mFirstByteFreq: ( 0.364808, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.145325, // FreqH[a4] 0.304891, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.001835, // FreqH[b0] 0.010771, // FreqH[b1] 0.006462, // FreqH[b2] 0.001157, // FreqH[b3] 0.002114, // FreqH[b4] 0.003231, // FreqH[b5] 0.001356, // FreqH[b6] 0.007420, // FreqH[b7] 0.004189, // FreqH[b8] 0.003231, // FreqH[b9] 0.003032, // FreqH[ba] 0.033190, // FreqH[bb] 0.006303, // FreqH[bc] 0.006064, // FreqH[bd] 0.009973, // FreqH[be] 0.002354, // FreqH[bf] 0.003670, // FreqH[c0] 0.009135, // FreqH[c1] 0.001675, // FreqH[c2] 0.002792, // FreqH[c3] 0.002194, // FreqH[c4] 0.014720, // FreqH[c5] 0.011928, // FreqH[c6] 0.000878, // FreqH[c7] 0.013124, // FreqH[c8] 0.001077, // FreqH[c9] 0.009295, // FreqH[ca] 0.003471, // FreqH[cb] 0.002872, // FreqH[cc] 0.002433, // FreqH[cd] 0.000957, // FreqH[ce] 0.001636, // FreqH[cf] 0.000000, // FreqH[d0] 0.000000, // FreqH[d1] 0.000000, // FreqH[d2] 0.000000, // FreqH[d3] 0.000000, // FreqH[d4] 0.000000, // FreqH[d5] 0.000000, // FreqH[d6] 0.000000, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000080, // FreqH[de] 0.000279, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.000000, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000080, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.050407; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.640871; // Lead Byte Weight mSecoundByteFreq: ( 0.002473, // FreqL[a1] 0.039134, // FreqL[a2] 0.152745, // FreqL[a3] 0.009694, // FreqL[a4] 0.000359, // FreqL[a5] 0.022180, // FreqL[a6] 0.000758, // FreqL[a7] 0.004308, // FreqL[a8] 0.000160, // FreqL[a9] 0.002513, // FreqL[aa] 0.003072, // FreqL[ab] 0.001316, // FreqL[ac] 0.003830, // FreqL[ad] 0.001037, // FreqL[ae] 0.003590, // FreqL[af] 0.000957, // FreqL[b0] 0.000160, // FreqL[b1] 0.000239, // FreqL[b2] 0.006462, // FreqL[b3] 0.001596, // FreqL[b4] 0.031554, // FreqL[b5] 0.001316, // FreqL[b6] 0.002194, // FreqL[b7] 0.016555, // FreqL[b8] 0.003271, // FreqL[b9] 0.000678, // FreqL[ba] 0.000598, // FreqL[bb] 0.206438, // FreqL[bc] 0.000718, // FreqL[bd] 0.001077, // FreqL[be] 0.003710, // FreqL[bf] 0.001356, // FreqL[c0] 0.001356, // FreqL[c1] 0.000439, // FreqL[c2] 0.004388, // FreqL[c3] 0.005704, // FreqL[c4] 0.000878, // FreqL[c5] 0.010172, // FreqL[c6] 0.007061, // FreqL[c7] 0.014680, // FreqL[c8] 0.000638, // FreqL[c9] 0.025730, // FreqL[ca] 0.002792, // FreqL[cb] 0.000718, // FreqL[cc] 0.001795, // FreqL[cd] 0.091551, // FreqL[ce] 0.000758, // FreqL[cf] 0.003909, // FreqL[d0] 0.000558, // FreqL[d1] 0.031195, // FreqL[d2] 0.007061, // FreqL[d3] 0.001316, // FreqL[d4] 0.022579, // FreqL[d5] 0.006981, // FreqL[d6] 0.007260, // FreqL[d7] 0.001117, // FreqL[d8] 0.000239, // FreqL[d9] 0.012127, // FreqL[da] 0.000878, // FreqL[db] 0.003790, // FreqL[dc] 0.001077, // FreqL[dd] 0.000758, // FreqL[de] 0.002114, // FreqL[df] 0.002234, // FreqL[e0] 0.000678, // FreqL[e1] 0.002992, // FreqL[e2] 0.003311, // FreqL[e3] 0.023416, // FreqL[e4] 0.001237, // FreqL[e5] 0.002753, // FreqL[e6] 0.005146, // FreqL[e7] 0.002194, // FreqL[e8] 0.007021, // FreqL[e9] 0.008497, // FreqL[ea] 0.013763, // FreqL[eb] 0.011768, // FreqL[ec] 0.006303, // FreqL[ed] 0.001915, // FreqL[ee] 0.000638, // FreqL[ef] 0.008776, // FreqL[f0] 0.000918, // FreqL[f1] 0.003431, // FreqL[f2] 0.057603, // FreqL[f3] 0.000439, // FreqL[f4] 0.000439, // FreqL[f5] 0.000758, // FreqL[f6] 0.002872, // FreqL[f7] 0.001675, // FreqL[f8] 0.011050, // FreqL[f9] 0.000000, // FreqL[fa] 0.000279, // FreqL[fb] 0.012127, // FreqL[fc] 0.000718, // FreqL[fd] 0.007380 // FreqL[fe] ); mSecoundByteStdDev: 0.028247; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.359129 // Trial Byte Weight ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/GB2312Statistics.inc�������������������������������������0000644�0001750�0000144�00000012072�12014201074�023255� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const GB2312Stat: rEUCStatistics = ( mFirstByteFreq: ( 0.011628, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.011628, // FreqH[b0] 0.012403, // FreqH[b1] 0.009302, // FreqH[b2] 0.003876, // FreqH[b3] 0.017829, // FreqH[b4] 0.037209, // FreqH[b5] 0.008527, // FreqH[b6] 0.010078, // FreqH[b7] 0.019380, // FreqH[b8] 0.054264, // FreqH[b9] 0.010078, // FreqH[ba] 0.041085, // FreqH[bb] 0.020930, // FreqH[bc] 0.018605, // FreqH[bd] 0.010078, // FreqH[be] 0.013178, // FreqH[bf] 0.016279, // FreqH[c0] 0.006202, // FreqH[c1] 0.009302, // FreqH[c2] 0.017054, // FreqH[c3] 0.011628, // FreqH[c4] 0.008527, // FreqH[c5] 0.004651, // FreqH[c6] 0.006202, // FreqH[c7] 0.017829, // FreqH[c8] 0.024806, // FreqH[c9] 0.020155, // FreqH[ca] 0.013953, // FreqH[cb] 0.032558, // FreqH[cc] 0.035659, // FreqH[cd] 0.068217, // FreqH[ce] 0.010853, // FreqH[cf] 0.036434, // FreqH[d0] 0.117054, // FreqH[d1] 0.027907, // FreqH[d2] 0.100775, // FreqH[d3] 0.010078, // FreqH[d4] 0.017829, // FreqH[d5] 0.062016, // FreqH[d6] 0.012403, // FreqH[d7] 0.000000, // FreqH[d8] 0.000000, // FreqH[d9] 0.000000, // FreqH[da] 0.000000, // FreqH[db] 0.000000, // FreqH[dc] 0.000000, // FreqH[dd] 0.000000, // FreqH[de] 0.000000, // FreqH[df] 0.000000, // FreqH[e0] 0.000000, // FreqH[e1] 0.000000, // FreqH[e2] 0.000000, // FreqH[e3] 0.000000, // FreqH[e4] 0.000000, // FreqH[e5] 0.000000, // FreqH[e6] 0.000000, // FreqH[e7] 0.000000, // FreqH[e8] 0.000000, // FreqH[e9] 0.001550, // FreqH[ea] 0.000000, // FreqH[eb] 0.000000, // FreqH[ec] 0.000000, // FreqH[ed] 0.000000, // FreqH[ee] 0.000000, // FreqH[ef] 0.000000, // FreqH[f0] 0.000000, // FreqH[f1] 0.000000, // FreqH[f2] 0.000000, // FreqH[f3] 0.000000, // FreqH[f4] 0.000000, // FreqH[f5] 0.000000, // FreqH[f6] 0.000000, // FreqH[f7] 0.000000, // FreqH[f8] 0.000000, // FreqH[f9] 0.000000, // FreqH[fa] 0.000000, // FreqH[fb] 0.000000, // FreqH[fc] 0.000000, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.020081; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.586533; // Lead Byte Weight mSecoundByteFreq: ( 0.006202, // FreqL[a1] 0.031008, // FreqL[a2] 0.005426, // FreqL[a3] 0.003101, // FreqL[a4] 0.001550, // FreqL[a5] 0.003101, // FreqL[a6] 0.082171, // FreqL[a7] 0.014729, // FreqL[a8] 0.006977, // FreqL[a9] 0.001550, // FreqL[aa] 0.013953, // FreqL[ab] 0.000000, // FreqL[ac] 0.013953, // FreqL[ad] 0.010078, // FreqL[ae] 0.008527, // FreqL[af] 0.006977, // FreqL[b0] 0.004651, // FreqL[b1] 0.003101, // FreqL[b2] 0.003101, // FreqL[b3] 0.003101, // FreqL[b4] 0.008527, // FreqL[b5] 0.003101, // FreqL[b6] 0.005426, // FreqL[b7] 0.005426, // FreqL[b8] 0.005426, // FreqL[b9] 0.003101, // FreqL[ba] 0.001550, // FreqL[bb] 0.006202, // FreqL[bc] 0.014729, // FreqL[bd] 0.010853, // FreqL[be] 0.000000, // FreqL[bf] 0.011628, // FreqL[c0] 0.000000, // FreqL[c1] 0.031783, // FreqL[c2] 0.013953, // FreqL[c3] 0.030233, // FreqL[c4] 0.039535, // FreqL[c5] 0.008527, // FreqL[c6] 0.015504, // FreqL[c7] 0.000000, // FreqL[c8] 0.003101, // FreqL[c9] 0.008527, // FreqL[ca] 0.016279, // FreqL[cb] 0.005426, // FreqL[cc] 0.001550, // FreqL[cd] 0.013953, // FreqL[ce] 0.013953, // FreqL[cf] 0.044961, // FreqL[d0] 0.003101, // FreqL[d1] 0.004651, // FreqL[d2] 0.006977, // FreqL[d3] 0.001550, // FreqL[d4] 0.005426, // FreqL[d5] 0.012403, // FreqL[d6] 0.001550, // FreqL[d7] 0.015504, // FreqL[d8] 0.000000, // FreqL[d9] 0.006202, // FreqL[da] 0.001550, // FreqL[db] 0.000000, // FreqL[dc] 0.007752, // FreqL[dd] 0.006977, // FreqL[de] 0.001550, // FreqL[df] 0.009302, // FreqL[e0] 0.011628, // FreqL[e1] 0.004651, // FreqL[e2] 0.010853, // FreqL[e3] 0.012403, // FreqL[e4] 0.017829, // FreqL[e5] 0.005426, // FreqL[e6] 0.024806, // FreqL[e7] 0.000000, // FreqL[e8] 0.006202, // FreqL[e9] 0.000000, // FreqL[ea] 0.082171, // FreqL[eb] 0.015504, // FreqL[ec] 0.004651, // FreqL[ed] 0.000000, // FreqL[ee] 0.006977, // FreqL[ef] 0.004651, // FreqL[f0] 0.000000, // FreqL[f1] 0.008527, // FreqL[f2] 0.012403, // FreqL[f3] 0.004651, // FreqL[f4] 0.003876, // FreqL[f5] 0.003101, // FreqL[f6] 0.022481, // FreqL[f7] 0.024031, // FreqL[f8] 0.001550, // FreqL[f9] 0.047287, // FreqL[fa] 0.009302, // FreqL[fb] 0.001550, // FreqL[fc] 0.005426, // FreqL[fd] 0.017054 // FreqL[fe] ); mSecoundByteStdDev: 0.014156; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.413467 // Trial Byte Weight ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/stat/EUCTWStatistics.inc��������������������������������������0000644�0001750�0000144�00000012071�12014201074�023343� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCKTWtat: rEUCStatistics = ( mFirstByteFreq: ( 0.000000, // FreqH[a1] 0.000000, // FreqH[a2] 0.000000, // FreqH[a3] 0.000000, // FreqH[a4] 0.000000, // FreqH[a5] 0.000000, // FreqH[a6] 0.000000, // FreqH[a7] 0.000000, // FreqH[a8] 0.000000, // FreqH[a9] 0.000000, // FreqH[aa] 0.000000, // FreqH[ab] 0.000000, // FreqH[ac] 0.000000, // FreqH[ad] 0.000000, // FreqH[ae] 0.000000, // FreqH[af] 0.000000, // FreqH[b0] 0.000000, // FreqH[b1] 0.000000, // FreqH[b2] 0.000000, // FreqH[b3] 0.000000, // FreqH[b4] 0.000000, // FreqH[b5] 0.000000, // FreqH[b6] 0.000000, // FreqH[b7] 0.000000, // FreqH[b8] 0.000000, // FreqH[b9] 0.000000, // FreqH[ba] 0.000000, // FreqH[bb] 0.000000, // FreqH[bc] 0.000000, // FreqH[bd] 0.000000, // FreqH[be] 0.000000, // FreqH[bf] 0.000000, // FreqH[c0] 0.000000, // FreqH[c1] 0.000000, // FreqH[c2] 0.000000, // FreqH[c3] 0.119286, // FreqH[c4] 0.052233, // FreqH[c5] 0.044126, // FreqH[c6] 0.052494, // FreqH[c7] 0.045906, // FreqH[c8] 0.019038, // FreqH[c9] 0.032465, // FreqH[ca] 0.026252, // FreqH[cb] 0.025502, // FreqH[cc] 0.015963, // FreqH[cd] 0.052493, // FreqH[ce] 0.019256, // FreqH[cf] 0.015137, // FreqH[d0] 0.031782, // FreqH[d1] 0.017370, // FreqH[d2] 0.018494, // FreqH[d3] 0.015575, // FreqH[d4] 0.016621, // FreqH[d5] 0.007444, // FreqH[d6] 0.011642, // FreqH[d7] 0.013916, // FreqH[d8] 0.019159, // FreqH[d9] 0.016445, // FreqH[da] 0.007851, // FreqH[db] 0.011079, // FreqH[dc] 0.022842, // FreqH[dd] 0.015513, // FreqH[de] 0.010033, // FreqH[df] 0.009950, // FreqH[e0] 0.010347, // FreqH[e1] 0.013103, // FreqH[e2] 0.015371, // FreqH[e3] 0.012502, // FreqH[e4] 0.007436, // FreqH[e5] 0.018253, // FreqH[e6] 0.014134, // FreqH[e7] 0.008907, // FreqH[e8] 0.005411, // FreqH[e9] 0.009570, // FreqH[ea] 0.013598, // FreqH[eb] 0.006092, // FreqH[ec] 0.007409, // FreqH[ed] 0.008432, // FreqH[ee] 0.005816, // FreqH[ef] 0.009349, // FreqH[f0] 0.005472, // FreqH[f1] 0.007170, // FreqH[f2] 0.007420, // FreqH[f3] 0.003681, // FreqH[f4] 0.007523, // FreqH[f5] 0.004610, // FreqH[f6] 0.006154, // FreqH[f7] 0.003348, // FreqH[f8] 0.005074, // FreqH[f9] 0.005922, // FreqH[fa] 0.005254, // FreqH[fb] 0.004682, // FreqH[fc] 0.002093, // FreqH[fd] 0.000000 // FreqH[fe] ); mFirstByteStdDev: 0.016681; // Lead Byte StdDev mFirstByteMean: 0.010638; // Lead Byte Mean mFirstByteWeight: 0.715599; // Lead Byte Weight mSecoundByteFreq: ( 0.028933, // FreqL[a1] 0.011371, // FreqL[a2] 0.011053, // FreqL[a3] 0.007232, // FreqL[a4] 0.010192, // FreqL[a5] 0.004093, // FreqL[a6] 0.015043, // FreqL[a7] 0.011752, // FreqL[a8] 0.022387, // FreqL[a9] 0.008410, // FreqL[aa] 0.012448, // FreqL[ab] 0.007473, // FreqL[ac] 0.003594, // FreqL[ad] 0.007139, // FreqL[ae] 0.018912, // FreqL[af] 0.006083, // FreqL[b0] 0.003302, // FreqL[b1] 0.010215, // FreqL[b2] 0.008791, // FreqL[b3] 0.024236, // FreqL[b4] 0.014107, // FreqL[b5] 0.014108, // FreqL[b6] 0.010303, // FreqL[b7] 0.009728, // FreqL[b8] 0.007877, // FreqL[b9] 0.009719, // FreqL[ba] 0.007952, // FreqL[bb] 0.021028, // FreqL[bc] 0.005764, // FreqL[bd] 0.009341, // FreqL[be] 0.006591, // FreqL[bf] 0.012517, // FreqL[c0] 0.005921, // FreqL[c1] 0.008982, // FreqL[c2] 0.008771, // FreqL[c3] 0.012802, // FreqL[c4] 0.005926, // FreqL[c5] 0.008342, // FreqL[c6] 0.003086, // FreqL[c7] 0.006843, // FreqL[c8] 0.007576, // FreqL[c9] 0.004734, // FreqL[ca] 0.016404, // FreqL[cb] 0.008803, // FreqL[cc] 0.008071, // FreqL[cd] 0.005349, // FreqL[ce] 0.008566, // FreqL[cf] 0.010840, // FreqL[d0] 0.015401, // FreqL[d1] 0.031904, // FreqL[d2] 0.008670, // FreqL[d3] 0.011479, // FreqL[d4] 0.010936, // FreqL[d5] 0.007617, // FreqL[d6] 0.008995, // FreqL[d7] 0.008114, // FreqL[d8] 0.008658, // FreqL[d9] 0.005934, // FreqL[da] 0.010452, // FreqL[db] 0.009142, // FreqL[dc] 0.004519, // FreqL[dd] 0.008339, // FreqL[de] 0.007476, // FreqL[df] 0.007027, // FreqL[e0] 0.006025, // FreqL[e1] 0.021804, // FreqL[e2] 0.024248, // FreqL[e3] 0.015895, // FreqL[e4] 0.003768, // FreqL[e5] 0.010171, // FreqL[e6] 0.010007, // FreqL[e7] 0.010178, // FreqL[e8] 0.008316, // FreqL[e9] 0.006832, // FreqL[ea] 0.006364, // FreqL[eb] 0.009141, // FreqL[ec] 0.009148, // FreqL[ed] 0.012081, // FreqL[ee] 0.011914, // FreqL[ef] 0.004464, // FreqL[f0] 0.014257, // FreqL[f1] 0.006907, // FreqL[f2] 0.011292, // FreqL[f3] 0.018622, // FreqL[f4] 0.008149, // FreqL[f5] 0.004636, // FreqL[f6] 0.006612, // FreqL[f7] 0.013478, // FreqL[f8] 0.012614, // FreqL[f9] 0.005186, // FreqL[fa] 0.048285, // FreqL[fb] 0.006816, // FreqL[fc] 0.006743, // FreqL[fd] 0.008671 // FreqL[fe] ); mSecoundByteStdDev: 0.006630; // Trail Byte StdDev mSecoundByteMean: 0.010638; // Trail Byte Mean mSecoundByteWeight: 0.284401 // Trial Byte Weight ); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsUniversalDetector.pas���������������������������������������0000644�0001750�0000144�00000027565�12014201074�023461� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsUniversalDetector.pas,v 1.5 2008/06/22 09:04:20 ya_nick Exp $ unit nsUniversalDetector; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUM_OF_CHARSET_PROBERS = 4; type nsInputState = ( ePureAscii = 0, eEscAscii = 1, eHighbyte = 2 ) ; TnsUniversalDetector = class (TObject) protected mInputState: nsInputState; mDone: Boolean; mStart: Boolean; mGotData: Boolean; mLastChar: Char; mDetectedCharset: eInternalCharsetID; mCharSetProbers: array [0..Pred(NUM_OF_CHARSET_PROBERS)] of TCustomDetector; mEscCharSetProber: TCustomDetector; mDetectedBOM: eBOMKind; procedure Report(aCharsetID: eInternalCharsetID); function CheckBOM(aBuf: pChar; aLen: integer): integer; function GetCharsetID(CodePage: integer): eInternalCharsetID; procedure DoEnableCharset(Charset: eInternalCharsetID; SetEnabledTo: Boolean); public constructor Create; destructor Destroy; override; procedure Reset; function HandleData(aBuf: PChar; aLen: integer): nsResult; procedure DataEnd; function GetDetectedCharsetInfo: nsCore.rCharsetInfo; function GetKnownCharset(out KnownCharsets: pChar): integer; procedure GetAbout(out About: rAboutHolder); procedure DisableCharset(CodePage: integer); property Done: Boolean read mDone; property BOMDetected: eBOMKind read mDetectedBOM; end; implementation uses SysUtils, nsGroupProber, nsMBCSMultiProber, nsSBCSGroupProber, nsEscCharsetProber, nsLatin1Prober, MBUnicodeMultiProber; const MINIMUM_THRESHOLD: float = 0.20; AboutInfo: rAboutHolder = ( MajorVersionNr: 0; MinorVersionNr: 2; BuildVersionNr: 6; About: 'Charset Detector Library. Copyright (C) 2006 - 2008, Nick Yakowlew. http://chsdet.sourceforge.net'; ); { TnsUniversalDetector } constructor TnsUniversalDetector.Create; begin inherited Create; mCharSetProbers[0] := TnsMBCSMultiProber.Create; mCharSetProbers[1] := TnsSBCSGroupProber.Create; mCharSetProbers[2] := TnsLatin1Prober.Create; mCharSetProbers[3] := TMBUnicodeMultiProber.Create; mEscCharSetProber := TnsEscCharSetProber.Create; Reset; end; destructor TnsUniversalDetector.Destroy; var i: integer; begin for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do mCharSetProbers[i].Free; mEscCharSetProber.Free; inherited; end; procedure TnsUniversalDetector.DataEnd; var proberConfidence: float; maxProberConfidence: float; maxProber: PRInt32; i: integer; begin if not mGotData then (* we haven't got any data yet, return immediately *) (* caller program sometimes call DataEnd before anything has been sent to detector*) exit; if mDetectedCharset <> UNKNOWN_CHARSET then begin mDone := TRUE; Report(mDetectedCharset); exit; end; case mInputState of eHighbyte: begin maxProberConfidence := 0.0; maxProber := 0; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin proberConfidence := mCharSetProbers[i].GetConfidence; if proberConfidence > maxProberConfidence then begin maxProberConfidence := proberConfidence; maxProber := i; end; end; (*do not report anything because we are not confident of it, that's in fact a negative answer*) if maxProberConfidence > MINIMUM_THRESHOLD then Report(mCharSetProbers[maxProber].GetDetectedCharset); end; eEscAscii: begin mDetectedCharset := mEscCharSetProber.GetDetectedCharset; end; else begin mDetectedCharset := PURE_ASCII_CHARSET; end; end;{case} {$ifdef DEBUG_chardet} AddDump('Universal detector - DataEnd'); {$endif} end; function TnsUniversalDetector.HandleData(aBuf: PChar; aLen: integer): nsResult; var i: integer; st: eProbingState; // startAt: integer; //newBuf: pChar; //BufPtr: pChar; //b: integer; //tmpBOM: eBOMKind; begin // startAt := 0; if mDone then begin Result := NS_OK; exit; end; if aLen > 0 then mGotData := TRUE; (*If the data starts with BOM, we know it is Unicode*) if mStart then begin mStart := FALSE; // startAt := CheckBOM(aBuf, aLen); CheckBOM(aBuf, aLen); // case mDetectedBOM of // BOM_UCS4_BE: mDetectedCharset := UCS4_BE_CHARSET; // BOM_UCS4_LE: mDetectedCharset := UCS4_LE_CHARSET; // BOM_UTF16_BE: mDetectedCharset := UTF16_BE_CHARSET; // BOM_UTF16_LE: mDetectedCharset := UTF16_LE_CHARSET; // BOM_UTF8: mDetectedCharset := UTF8_CHARSET; // // BOM_UCS4_2143: mDetectedCharset := UCS4_BE_CHARSET; // BOM_UCS4_3412: mDetectedCharset := UCS4_LE_CHARSET; // end; // TODO - some stuppid ASCII text can starts with BOM. What to do? if mDetectedCharset <> UNKNOWN_CHARSET then begin // mDone := TRUE; // Result := NS_OK; // exit; end; end; {if mStart} for i := 0 to Pred(aLen) do (*other than 0xa0, if every othe character is ascii, the page is ascii*) if (aBuf[i] > #$80) and (aBuf[i] <> #$A0) then begin (*Since many Ascii only page contains NBSP *) (*we got a non-ascii byte (high-byte)*) if mInputState <> eHighbyte then begin (*adjust state*) mInputState := eHighbyte; end; end else begin (*ok, just pure ascii so *) if (mInputState = ePureAscii) and ((aBuf[i] = #$1B) or (aBuf[i] = '{') and (mLastChar = '~')) then (*found escape character or HZ "~{"*) mInputState := eEscAscii; mLastChar := aBuf[i]; end; case mInputState of eEscAscii: begin {$ifdef DEBUG_chardet} AddDump('Universal detector - Escape Detector started'); {$endif} st := mEscCharSetProber.HandleData(aBuf,aLen); if st = psFoundIt then begin mDone := TRUE; mDetectedCharset := mEscCharSetProber.GetDetectedCharset; end; end; eHighbyte: begin {$ifdef DEBUG_chardet} AddDump('Universal detector - HighByte Detector started'); {$endif} for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin //newBuf := AllocMem(aLen+StartAt); //BufPtr := newBuf; //try //tmpBOM := BOM_Not_Found; //if mDetectedBOM = BOM_Not_Found then //begin ////case mCharSetProbers[i].GetDetectedCharset of //// UTF16_BE_CHARSET: tmpBOM := BOM_UCS4_BE; //// UTF16_LE_CHARSET: tmpBOM := BOM_UCS4_LE; //// else //// tmpBOM := BOM_Not_Found; ////end; //tmpBOM := BOM_UTF16_BE; //end; //for b:=0 to integer(KnownBOM[tmpBOM][0])-1 do //begin //BufPtr^ := KnownBOM[tmpBOM][b+1]; //inc(BufPtr); //end; // //for b:=0 to aLen do //begin //BufPtr^ := aBuf[b]; //inc(BufPtr); //end; st := mCharSetProbers[i].HandleData(aBuf,aLen); // st := mCharSetProbers[i].HandleData(newBuf,aLen+startAt); if st = psFoundIt then begin mDone:= TRUE; mDetectedCharset := mCharSetProbers[i].GetDetectedCharset; // Result := NS_OK; break; end; //finally //FreeMem(newBuf, aLen); //end; end; end; else (*pure ascii*) begin (*do nothing here*) end; end;{case} Result := NS_OK; end; procedure TnsUniversalDetector.Report(aCharsetID: eInternalCharsetID); begin if (aCharsetID <> UNKNOWN_CHARSET) and (mDetectedCharset = UNKNOWN_CHARSET) then mDetectedCharset := aCharsetID; end; procedure TnsUniversalDetector.Reset; var i: integer; begin mDone := FALSE; mStart := TRUE; mDetectedCharset := UNKNOWN_CHARSET; mGotData := FALSE; mInputState := ePureAscii; mLastChar := #0; (*illegal value as signal*) mEscCharSetProber.Reset; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do mCharSetProbers[i].Reset; mDetectedBOM := BOM_Not_Found; end; function TnsUniversalDetector.GetDetectedCharsetInfo: nsCore.rCharsetInfo; begin Result := KNOWN_CHARSETS[mDetectedCharset]; end; function TnsUniversalDetector.GetKnownCharset(out KnownCharsets: pChar): integer; var s: ANSIstring; i: integer; begin s := ''; for i := integer(low(KNOWN_CHARSETS)) to integer(High(KNOWN_CHARSETS)) do s := s + #10 + KNOWN_CHARSETS[eInternalCharsetID(i)].Name + ' - ' + inttostr(KNOWN_CHARSETS[eInternalCharsetID(i)].CodePage); KnownCharsets := pChar(s); Result := Length(s); end; procedure TnsUniversalDetector.GetAbout(out About: rAboutHolder); begin About := AboutInfo; end; function TnsUniversalDetector.CheckBOM(aBuf: pChar; aLen: integer): integer; function BOMLength(BOM: eBOMKind): integer; begin Result := integer(KnownBOM[BOM, 0]); end; var i, b: integer; Same: Boolean; begin Result := 0; for i := integer(low(KnownBOM))+1 to integer(high(KnownBOM)) do if aLen > BOMLength(eBOMKind(i)) then begin Same := true; for b := 0 to BOMLength(eBOMKind(i)) - 1 do if (aBuf[b] <> KnownBOM[eBOMKind(i), b+1]) then begin Same := false; break; end; if Same then begin mDetectedBOM := eBOMKind(i); Result := BOMLength(mDetectedBOM); exit; end; end; end; procedure TnsUniversalDetector.DisableCharset(CodePage: integer); begin DoEnableCharset(GetCharsetID(CodePage), false); end; function TnsUniversalDetector.GetCharsetID(CodePage: integer): eInternalCharsetID; var i: integer; begin for i := integer(low(KNOWN_CHARSETS))+1 to integer(high(KNOWN_CHARSETS)) do if (KNOWN_CHARSETS[eInternalCharsetID(i)].CodePage = CodePage) then begin Result := eInternalCharsetID(i); exit; end; Result := UNKNOWN_CHARSET; end; procedure TnsUniversalDetector.DoEnableCharset(Charset: eInternalCharsetID; SetEnabledTo: Boolean); var i: integer; begin if Charset = UNKNOWN_CHARSET then exit; for i := 0 to Pred(NUM_OF_CHARSET_PROBERS) do begin if (mCharSetProbers[i] is TnsGroupProber) then begin if TnsGroupProber(mCharSetProbers[i]).EnableCharset(Charset, SetEnabledTo) then exit; end; if (mCharSetProbers[i] is TnsEscCharSetProber) then begin TnsEscCharSetProber(mCharSetProbers[i]).Enabled := SetEnabledTo; end; if (mCharSetProbers[i] is TCustomDetector) then begin if TCustomDetector(mCharSetProbers[i]).GetDetectedCharset = Charset then TCustomDetector(mCharSetProbers[i]).Enabled := SetEnabledTo; end; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/EUCKRFreq.pas�������������������������������������������������0000644�0001750�0000144�00000133165�12014201074�021137� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: EUCKRFreq.pas,v 1.2 2007/05/20 15:46:03 ya_nick Exp $ unit EUCKRFreq; interface //Sampling from about 20M text materials include literature and computer technology (****************************************************************************** * 128 --> 0.79 * 256 --> 0.92 * 512 --> 0.986 * 1024 --> 0.99944 * 2048 --> 0.99999 * * Ideal Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 * Random Distribution Ration = 512 / (2350-512) = 0.279. * * Typical Distribution Ratio *****************************************************************************) uses nsCore; const EUCKR_TYPICAL_DISTRIBUTION_RATIO: float = 6.0; EUCKR_TABLE_SIZE = 2352; //Char to FreqOrder table , EUCKRCharToFreqOrder: array [0..EUCKR_TABLE_SIZE-1] of PRInt16 = ( 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, 1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, 1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, 1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, 1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, 1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, 1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, 1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, 1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, 1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, 1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, 1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, 1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, 1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, 1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, 1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, 1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, 1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, 1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, 1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, 1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, 1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, 1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, 1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, 1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, 1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, 1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, 1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, 1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, 2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, 2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, 2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, 2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, 2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, 1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, 2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, 1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, 2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, 2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, 1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, 2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, 2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, 2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, 1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, 2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, 2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, 2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, 2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, 2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, 2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, 1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, 2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, 2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, 2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, 2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, 2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, 1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, 1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, 2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, 1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, 2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, 1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, 2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, 2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, 2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, 2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, 2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, 1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, 1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, 2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, 1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, 2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, 2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, 1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, 2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, 1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, 2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, 1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, 2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, 2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, 1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, 1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, 2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, 2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, 2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, 2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, 2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, 2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, 1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, 2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, 2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, 2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, 2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, 2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, 2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, 1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, 2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642 //512, 256 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, 2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, 2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, 2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, 2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, 2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, 2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, 2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, 2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, 2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, 2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, 2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, 2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, 2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, 1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, 2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, 2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, 2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, 2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, 2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, 2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, 2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, 2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, 2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, 3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, 3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, 3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, 3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, 3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, 3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, 3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, 3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, 3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, 3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, 3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, 3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, 3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, 3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, 3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, 3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, 3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, 3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, 3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, 3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, 3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, 3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, 3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, 3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, 3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, 3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, 3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, 3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, 3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, 3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, 3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, 3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, 1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, 1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, 3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, 3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, 3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, 3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, 3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, 3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, 3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, 3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, 3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, 3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, 3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, 3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, 3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, 1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, 3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, 3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, 3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, 3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, 3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, 3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, 3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, 1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, 3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, 3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, 3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, 3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, 1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, 3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, 3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, 3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, 3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, 3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, 3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, 3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, 4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, 4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, 1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, 4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, 4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, 4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, 4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, 4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, 4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, 4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, 4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, 4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, 4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, 4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, 4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, 4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, 4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, 4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, 4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, 4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, 4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, 4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, 4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, 4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, 4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, 4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, 4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, 4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, 4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, 4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, 4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, 4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, 4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, 4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, 4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, 4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, 4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, 4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, 4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, 4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, 4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, 4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, 4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, 4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, 4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, 1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, 4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, 4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, 4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, 4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, 4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, 4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, 4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, 4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, 4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, 4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, 4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, 4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, 4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, 4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, 4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, 4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, 4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, 4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, 4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, 4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, 5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, 5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, 1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, 5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, 5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, 5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, 5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, 5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, 1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, 5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, 5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, 5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, 5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, 5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, 1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, 5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, 5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, 5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, 5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, 5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, 5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, 5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, 5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, 5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, 5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, 5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, 5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, 5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, 5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, 5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, 5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, 5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, 5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, 5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, 5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, 5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, 5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, 5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, 1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, 5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, 5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, 5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, 5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, 1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, 5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, 5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, 5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, 5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, 5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, 1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, 5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, 1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, 5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, 5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, 5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, 5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, 5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, 5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, 5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, 5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, 5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, 5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, 5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, 5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, 5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, 5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, 6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, 6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, 6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, 6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, 6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, 6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, 6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, 6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, 6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, 6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, 6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, 6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, 6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, 6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, 6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, 6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, 6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, //1024 6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, 6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, 6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, 6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, 6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, 6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, 6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, 6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, 6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, 6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, 6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, 6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, 6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, 6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, 6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, 6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, 6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, 6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, 1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, 6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, 6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, 6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, 6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, 6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, 1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, 6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, 1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, 6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, 6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, 6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, 1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, 6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, 6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, 6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, 6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, 6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, 6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, 6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, 6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, 6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, 6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, 6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, 6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, 6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, 6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, 6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, 6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, 6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, 7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, 7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, 7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, 7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, 7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, 7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, 7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, 7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, 7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, 7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, 7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, 7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, 7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, 7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, 7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, 7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, 7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, 7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, 7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, 7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, 7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, 7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, 7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, 7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, 7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, 7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, 7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, 7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, 7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, 7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, 7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, 7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, 7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, 7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, 7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, 7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, 7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, 7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, 7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, 7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, 7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, 7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, 7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, 7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, 7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, 7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, 7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, 7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, 7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, 7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, 7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, 7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, 7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, 7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, 7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, 7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, 7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, 8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, 8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, 8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, 8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, 8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, 8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, 8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, 8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, 8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, 8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, 8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, 8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, 8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, 8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, 8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, 8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, 8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, 8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, 8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, 8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, 8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, 8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, 8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, 8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, 8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, 8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, 8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, 8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, 8736,8737,8738,8739,8740,8741 ****************************************************************************************) ); implementation end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/chsdIntf.pas��������������������������������������������������0000644�0001750�0000144�00000005645�12014201074�021213� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: chsdIntf.pas,v 1.4 2008/06/22 09:04:20 ya_nick Exp $ unit chsdIntf; interface uses nsCore; procedure csd_Reset; stdcall; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; function csd_Done: boolean; stdcall; procedure csd_DataEnd; stdcall; function csd_GetDetectedCharset: rCharsetInfo; stdcall; function csd_GetKnownCharsets(var KnownCharsets: pChar): integer; stdcall; procedure csd_GetAbout(var About: rAboutHolder); stdcall; function csd_GetDetectedBOM: eBOMKind; stdcall; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; implementation uses nsUniversalDetector; var Detector: TnsUniversalDetector = nil; procedure csd_Reset; stdcall; begin Detector.Reset; end; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; begin Result := Detector.HandleData(aBuf, aLen); end; function csd_Done: boolean; stdcall; begin Result := Detector.Done; end; procedure csd_DataEnd; stdcall; begin Detector.DataEnd; end; function csd_GetDetectedCharset: rCharsetInfo; stdcall; begin Result := Detector.GetDetectedCharsetInfo; end; function csd_GetKnownCharsets(var KnownCharsets: pChar): integer; stdcall; begin Result := Detector.GetKnownCharset(KnownCharsets); end; procedure csd_GetAbout(var About: rAboutHolder); stdcall; begin Detector.GetAbout(About); end; function csd_GetDetectedBOM: eBOMKind; stdcall; begin Result := Detector.BOMDetected; end; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; begin Detector.DisableCharset(CodePage); end; initialization Detector := TnsUniversalDetector.Create; finalization if Detector <> nil then Detector.Free; end. �������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/chsdet.dof����������������������������������������������������0000644�0001750�0000144�00000016621�11670731366�020727� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[FileVersion] Version=6.0 [Compiler] A=8 B=0 C=1 D=1 E=0 F=0 G=1 H=1 I=1 J=1 K=0 L=1 M=0 N=1 O=1 P=1 Q=0 R=0 S=0 T=0 U=1 V=1 W=0 X=1 Y=2 Z=1 ShowHints=1 ShowWarnings=1 UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; [Linker] MapFile=0 OutputObjs=0 ConsoleApp=1 DebugInfo=0 RemoteSymbols=0 MinStackSize=16384 MaxStackSize=1048576 ImageBase=4194304 ExeDescription= [Directories] OutputDir=..\ UnitOutputDir=..\dcu PackageDLLOutputDir= PackageDCPOutputDir= SearchPath=.\mbclass;.\sbseq;.\stat Packages=VCL50;VCLX50;VCLSMP50;QRPT50;VCLDB50;VCLIE50;INETDB50;INET50;NMFAST50;dclocx50;dclaxserver50;DJCL50;JVAPPFRMD5R;JVCORED5R;JVBANDSD5R;JVDLGSD5R;JVCMPD5R;JVCRYPTD5R;JVCTRLSD5R;JVCUSTOMD5R;JVDOCKINGD5R;JVDOTNETCTRLSD5R;JVEDID5R;JVGLOBUSD5R;JVHMID5R;JVINSPECTORD5R;JVINTERPRETERD5R;JVJANSD5R;JVMANAGEDTHREADSD5R;JVMMD5R;JVNETD5R;JVSTDCTRLSD5R;JVPAGECOMPSD5R;JVPLUGIND5R;JVPRINTPREVIEWD5R;JVSYSTEMD5R;JVTIMEFRAMEWORKD5R;JVUIBD5R;JVVALIDATORSD5R;JVWIZARDD5R;JVXPCTRLSD5R;vcl Conditionals= DebugSourceDirs= UsePackages=0 [Parameters] RunParams= HostApplication= Launcher= UseLauncher=0 DebugCWD= [Language] ActiveLang= ProjectLang=$00000407 [Version Info] IncludeVerInfo=1 AutoIncBuild=0 MajorVer=0 MinorVer=2 Release=6 Build=2 Debug=0 PreRelease=0 Special=0 Private=0 DLL=1 Locale=2057 CodePage=1252 [Version Info Keys] CompanyName= FileDescription=Charset detector FileVersion=0.2.6.2 InternalName= LegalCopyright=Nick Yakowlew, ya_nick@users.sourceforge.net LegalTrademarks= OriginalFilename=chsdet.dll ProductName=Charset detector ProductVersion=0.2 Comments=LGPL Licence [Excluded Packages] E:\Data\Yan\Delphi\log4delphi\bin\log4delphi_D6.bpl=Log4Delphi 0.5 c:\program files\borland\delphi6\Bin\DCLNMF60.bpl=NetMasters Fastnet Tools C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TBX_D6.BPL=Toolbar2000 -- TBX Extensions (Alex Denisov) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TB2K_D6.BPL=Toolbar2000 Components (Jordan Russell) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TBXDSGN_D6.BPL=Toolbar2000 -- TBX Extensions Design Package (Alex Denisov) C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TB2KDSGN_D6.BPL=Toolbar2000 Design Package (Jordan Russell) c:\program files\borland\delphi6\Projects\Bpl\IEDcomp.bpl=Internet EDiting components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\TNTUNICODEVCL_D60.BPL=Tnt Unicode Controls c:\program files\borland\delphi6\Projects\Bpl\SmpltCP.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\devFileMonitorPkg.bpl=(untitled) c:\program files\borland\delphi6\Bin\dclsoap60.bpl=Borland SOAP Components c:\program files\borland\delphi6\Projects\Bpl\SpTBXLibDsgn_d6.bpl=Toolbar2000 -- SpTBXLib Design Package c:\program files\borland\delphi6\Projects\Bpl\LSFindReplaceDialogW_6.bpl=LS Find/Replace Dialog for Wide Strings c:\program files\borland\delphi6\Projects\Bpl\Unicode6.bpl=Unicode components c:\program files\borland\delphi6\Projects\Bpl\credit.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\pActivePorts.bpl=LGM ActivePorts Component c:\program files\borland\delphi6\Projects\Bpl\USE.bpl=Unicode Syntax Edit control C:\Program Files\Borland\Delphi6\Projects\Bpl\JvAppFrmD6D.bpl=JVCL Application and Form Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVCORED6D.BPL=JVCL Core Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCmpD6D.bpl=JVCL Non-Visual Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCryptD6D.bpl=JVCL Encryption and Compression Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCtrlsD6D.bpl=JVCL Visual Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvCustomD6D.bpl=JVCL Custom Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDlgsD6D.bpl=JVCL Dialog Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDockingD6D.bpl=JVCL Docking Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvGlobusD6D.bpl=JVCL Globus Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvHMID6D.bpl=JVCL HMI Controls design time unit C:\Program Files\Borland\Delphi6\Projects\Bpl\JvJansD6D.bpl=JVCL Jans Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvManagedThreadsD6D.bpl=JVCL Managed Threads C:\Program Files\Borland\Delphi6\Projects\Bpl\JvMMD6D.bpl=JVCL Multimedia and Image Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVSTDCTRLSD6D.BPL=JVCL Standard Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPageCompsD6D.bpl=JVCL Page Style Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPluginD6D.bpl=JVCL Plugin Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvSystemD6D.bpl=JVCL System Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvTimeFrameworkD6D.bpl=JVCL Time Framework C:\Program Files\Borland\Delphi6\Projects\Bpl\JvValidatorsD6D.bpl=JVCL Validators and Error Provider Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvXPCtrlsD6D.bpl=JVCL XP Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvBandsD6D.bpl=JVCL Band Objects C:\Program Files\Borland\Delphi6\Projects\Bpl\JvBDED6D.bpl=JVCL BDE Components C:\PROGRAM FILES\BORLAND\DELPHI6\PROJECTS\BPL\JVDBD6D.BPL=JVCL Database Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvDotNetCtrlsD6D.bpl=JVCL DotNet Controls C:\Program Files\Borland\Delphi6\Projects\Bpl\JvEDID6D.bpl=JVCL EDI Components Designtime Package C:\Program Files\Borland\Delphi6\Projects\Bpl\JvInspectorD6D.bpl=JVCL Inspector Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvInterpreterD6D.bpl=JVCL Interpreter Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvNetD6D.bpl=JVCL Network Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvPrintPreviewD6D.bpl=JVCL Print Preview Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvUIBD6D.bpl=JVCL Unified Interbase Components C:\Program Files\Borland\Delphi6\Projects\Bpl\JvWizardD6D.bpl=JVCL Wizard Design Time Package c:\program files\borland\delphi6\Projects\Bpl\components.bpl=Components for tsWebEditor c:\program files\borland\delphi6\Projects\Bpl\CoolTrayIcon_D6plus.bpl=CoolTrayIcon and Friends C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DCLBDE60.BPL=Borland BDE DB Components C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DBX60.BPL=Borland SQL Explorer UI Package c:\program files\borland\delphi6\Projects\Bpl\ClassBrowsing.bpl=ClassBrowsing components c:\program files\borland\delphi6\Bin\dclqrt60.bpl=QuickReport Components c:\program files\borland\delphi6\Bin\dclcds60.bpl=Borland Base Cached ClientDataset Component C:\PROGRAM FILES\BORLAND\DELPHI6\BIN\DCLMID60.BPL=Borland MyBase DataAccess Components c:\program files\borland\delphi6\Bin\dclbdecds60.bpl=Borland Local BDE ClientDataset Components c:\program files\borland\delphi6\Bin\dcltee60.bpl=TeeChart Components c:\program files\borland\delphi6\Bin\dcltqr60.bpl=TeeChart for QuickReport Components c:\program files\borland\delphi6\Bin\dclib60.bpl=InterBase Data Access Components c:\program files\borland\delphi6\Bin\dcldbxcds60.bpl=Borland Local DBX ClientDataset Components c:\program files\borland\delphi6\Bin\DBWEBXPRT.BPL=Borland Web Wizard Package c:\program files\borland\delphi6\Projects\Bpl\prgInternet6.bpl=Progsan Internet Components c:\program files\borland\delphi6\Projects\Bpl\Comps_D6.bpl=(untitled) c:\program files\borland\delphi6\Projects\Bpl\SynEdit_D6.bpl=SynEdit component suite c:\program files\borland\delphi6\Projects\Bpl\DevCpp.bpl=Dev-c++ components ���������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/dbg.inc�������������������������������������������������������0000644�0001750�0000144�00000000150�12014201074�020155� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{.$DEFINE DEBUG_chardet} // Uncomment this for debug dump.*) {$ifdef DEBUG_chardet} Dump, {$endif} ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsCore.pas����������������������������������������������������0000644�0001750�0000144�00000027141�12014201074�020675� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsCore.pas,v 1.4 2008/06/22 09:04:20 ya_nick Exp $ unit nsCore; interface type PRInt16 = smallint; PRUint16 = word; PRInt32 = integer; PRUint32 = cardinal; pByteArray = array of Byte; pPRUint32 = ^PRUint32; aPRUint32 = array of PRUint32; pPRint16 = ^PRint16; aPRint16 = array of PRint16; const SURE_YES: double = 0.99; SURE_NO: double = 0.01; const ENOUGH_DATA_THRESHOLD: cardinal = 1024; SHORTCUT_THRESHOLD = 0.95; type eProbingState = ( psDetecting = 0, //We are still detecting, no sure answer yet, but caller can ask for confidence. psFoundIt = 1, //That's a positive answer psNotMe = 2 //Negative answer ); type nsResult = PRUint32; const NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; type float = double; rAboutHolder = record MajorVersionNr: Cardinal; MinorVersionNr: Cardinal; BuildVersionNr: Cardinal; About: pChar; end; eBOMKind = ( BOM_Not_Found, BOM_UCS4_BE, // 00 00 FE FF UCS-4, big-endian machine (1234 order) BOM_UCS4_LE, // FF FE 00 00 UCS-4, little-endian machine (4321 order) BOM_UCS4_2143, // 00 00 FF FE UCS-4, unusual octet order (2143) BOM_UCS4_3412, // FE FF 00 00 UCS-4, unusual octet order (3412) BOM_UTF16_BE, // FE FF ## ## UTF-16, big-endian BOM_UTF16_LE, // FF FE ## ## UTF-16, little-endian BOM_UTF8 // EF BB BF UTF-8 ); const KnownBOM: array [eBOMKind] of array [0..4] of Char = ( // first element = byte count (#$00, #$00, #$00, #$00, #$00), (#$04, #$00, #$00, #$FE, #$FF), (#$04, #$FF, #$FE, #$00, #$00), (#$04, #$00, #$00, #$FF, #$FE), (#$04, #$FE, #$FF, #$00, #$00), (#$02, #$FE, #$FF, #$00, #$00), (#$02, #$FF, #$FE, #$00, #$00), (#$03, #$EF, #$BB, #$BF, #$00) ); // "extended" charset info type rCharsetInfo = record Name: pChar; CodePage: integer; Language: pChar; end; eInternalCharsetID = ( UNKNOWN_CHARSET = 000, PURE_ASCII_CHARSET = 001, UTF8_CHARSET = 002, UCS4_BE_CHARSET = 003, UTF16_BE_CHARSET = 004, UTF32_BE_CHARSET = 005, UCS4_LE_CHARSET = 006, UTF32_LE_CHARSET = 007, UTF16_LE_CHARSET = 008, LATIN5_BULGARIAN_CHARSET = 009, WINDOWS_BULGARIAN_CHARSET = 010, KOI8_R_CHARSET = 011, WINDOWS_1251_CHARSET = 012, ISO_8859_5_CHARSET = 013, X_MAC_CYRILLIC_CHARSET = 014, IBM866_CHARSET = 015, IBM855_CHARSET = 016, ISO_8859_7_CHARSET = 017, WINDOWS_1253_CHARSET = 018, ISO_8859_8_CHARSET = 019, WINDOWS_1255_CHARSET = 020, BIG5_CHARSET = 021, ISO_2022_CN_CHARSET = 022, ISO_2022_JP_CHARSET = 023, ISO_2022_KR_CHARSET = 024, EUC_JP_CHARSET = 025, EUC_KR_CHARSET = 026, X_EUC_TW_CHARSET = 027, SHIFT_JIS_CHARSET = 028, GB18030_CHARSET = 029, HZ_GB_2312_CHARSET = 030, WINDOWS_1252_CHARSET = 031 ); const KNOWN_CHARSETS: array [eInternalCharsetID] of rCharsetInfo = ( // UNKNOWN_CHARSET ( Name: 'Unknown'; CodePage: -1; Language: 'Unknown' ), // PURE_ASCII_CHARSET ( Name: 'ASCII'; CodePage: 0; Language: 'ASCII' ), // UTF8_CHARSET ( Name: 'UTF-8'; CodePage: 65001; Language: 'Unicode' ), // UCS4_BE_CHARSET ( Name: 'X-ISO-10646-UCS-4-3412'; CodePage: 12001; Language: 'Unicode' ), // UTF16_BE_CHARSET ( Name: 'UTF-16BE'; CodePage: 1201; Language: 'Unicode' ), // UTF32_BE_CHARSET ( Name: 'UTF-32BE'; CodePage: 12001; Language: 'Unicode' ), // UCS4_LE_CHARSET ( Name: 'X-ISO-10646-UCS-4-2143'; CodePage: 12000; Language: 'Unicode' ), // UTF32_LE_CHARSET ( Name: 'UTF-32LE'; CodePage: 12000; Language: 'Unicode' ), // UTF16_LE_CHARSET ( Name: 'UTF-16LE'; CodePage: 1200; Language: 'Unicode' ), // LATIN5_BULGARIAN_CHARSET ( Name: 'ISO-8859-5'; CodePage: 28595; Language: 'Bulgarian' ), // WINDOWS_BULGARIAN_CHARSET ( Name: 'windows-1251'; CodePage: 1251; Language: 'Bulgarian' ), // KOI8_R_CHARSET ( Name: 'KOI8-R'; CodePage: 20866; Language: 'russian' ), // WINDOWS_1251_CHARSET ( Name: 'windows-1251'; CodePage: 1251; Language: 'russian' ), // ISO_8859_5_CHARSET ( Name: 'ISO-8859-5'; CodePage: 28595; Language: 'russian' ), // X_MAC_CYRILLIC_CHARSET ( Name: 'x-mac-cyrillic'; CodePage: 10007; Language: 'russian' ), // IBM866_CHARSET ( Name: 'IBM866'; CodePage: 866; Language: 'russian' ), // IBM855_CHARSET ( Name: 'IBM855'; CodePage: 855; Language: 'russian' ), // ISO_8859_7_CHARSET ( Name: 'ISO-8859-7'; CodePage: 28597; Language: 'greek' ), // WINDOWS_1253_CHARSET ( Name: 'windows-1253'; CodePage: 1253; Language: 'greek' ), // ISO_8859_8_CHARSET ( Name: 'ISO-8859-8'; CodePage: 28598; Language: 'hebrew' ), // WINDOWS_1255_CHARSET ( Name: 'windows-1255'; CodePage: 1255; Language: 'hebrew' ), // BIG5_CHARSET ( Name: 'Big5'; CodePage: 950; Language: 'ch' ), // ISO_2022_CN_CHARSET ( Name: 'ISO-2022-CN'; CodePage: 50227; Language: 'ch'; ), // ISO_2022_JP_CHARSET ( Name: 'ISO-2022-JP'; CodePage: 50222; Language: 'japanese'; ), // ISO_2022_KR_CHARSET ( Name: 'ISO-2022-KR'; CodePage: 50225; Language: 'kr'; ), // EUC_JP_CHARSET ( Name: 'EUC-JP'; CodePage: 51932; Language: 'japanese'; ), // EUC_KR_CHARSET ( Name: 'EUC-KR'; CodePage: 51949; Language: 'kr'; ), // X_EUC_TW_CHARSET ( Name: 'x-euc-tw'; CodePage: 51936; Language: 'ch'; ), // SHIFT_JIS_CHARSET ( Name: 'Shift_JIS'; CodePage: 932; Language: 'japanese'; ), // GB18030_CHARSET ( Name: 'GB18030'; CodePage: 54936; Language: 'ch'; ), // HZ_GB_2312_CHARSET ( Name: 'HZ-GB-2312'; CodePage: 52936; Language: 'ch'; ), // WINDOWS_1252_CHARSET ( Name: 'windows-1252'; CodePage: 1252; Language: 'eu'; ) ); (* Helper functions used in the Latin1 and Group probers.*) (* both functions Allocate a new buffer for newBuf. This buffer should be *) (* freed by the caller using PR_FREEIF.*) (* Both functions return PR_FALSE in case of memory allocation failure.*) function FilterWithoutEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; function FilterWithEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; implementation function FilterWithEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; var newptr: pChar; prevPtr: pChar; curPtr: pChar; isInTag: Boolean; begin //do filtering to reduce load to probers isInTag := FALSE; newLen := 0; newptr := newBuf; if (newptr = nil) then begin Result := FALSE; exit; end; prevPtr := aBuf; curPtr := prevPtr; while (curPtr < aBuf+aLen) do begin if (curPtr^ = '>') then isInTag := FALSE else if (curPtr^ = '<') then isInTag := TRUE; if ((curPtr^ < #$80) and ((curPtr^ < 'A') or ((curPtr^ > 'Z') and (curPtr^ < 'a')) or (curPtr^ > 'z')) ) then begin if ((curPtr > prevPtr) and (not isInTag)) then // Current segment contains more than just a symbol // and it is not inside a tag, keep it. begin while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; inc(prevPtr); newptr^ := ' '; inc(newptr); end else prevPtr := curPtr+1; end; inc(curPtr); end; // If the current segment contains more than just a symbol // and it is not inside a tag then keep it. if ( not isInTag) then while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; newLen := newptr - newBuf; Result := TRUE; end; function FilterWithoutEnglishLetters(aBuf: PChar; aLen: integer; var newBuf: PChar; var newLen: integer): Boolean; var newPtr: pChar; prevPtr: pChar; curPtr: pChar; meetMSB: Boolean; begin (*This filter applies to all scripts which do not use English characters*) Result := FALSE; newLen := 0; meetMSB:= FALSE; if newBuf = nil then exit; newPtr := newBuf; curPtr := aBuf; prevPtr := curPtr; while curPtr < aBuf+aLen do begin if curPtr^ > #$80 then meetMSB := TRUE else if ((curPtr^ < 'A') or ((curPtr^ > 'Z') and (curPtr^ < 'a')) or (curPtr^ > 'z')) then begin //current char is a symbol, most likely a punctuation. we treat it as segment delimiter if (meetMSB and (curPtr > prevPtr)) then //this segment contains more than single symbol, and it has upper ASCII, we need to keep it begin while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; inc(prevPtr); newptr^ := ' '; inc(newptr); meetMSB := FALSE; end else //ignore current segment. (either because it is just a symbol or just an English word) prevPtr := curPtr+1; end; inc(curPtr); end; if (meetMSB and (curPtr > prevPtr)) then while (prevPtr < curPtr) do begin newptr^ := prevPtr^; inc(newptr); inc(prevPtr); end; newLen := newptr - newBuf; Result := TRUE; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/MultiModelProber.pas������������������������������������������0000644�0001750�0000144�00000013314�12014201074�022666� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit MultiModelProber; interface uses {$I dbg.inc} nsCore, CustomDetector, nsCodingStateMachine; type TMultiModelProber = class (TCustomDetector) private protected mDetectedCharset: eInternalCharsetID; mActiveSM: integer; mCharsetsCount: integer; mSMState: array of eProbingState; mCodingSM: array of TnsCodingStateMachine; procedure AddCharsetModel(Model: SMModel); public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} function GetConfidence: float; override; end; implementation {$ifdef DEBUG_chardet} uses SysUtils, TypInfo; {$endif} { TMultiModelProber } constructor TMultiModelProber.Create; begin inherited; mCharsetsCount := 0; end; destructor TMultiModelProber.Destroy; var i: integer; begin for i := 0 to Pred(mCharsetsCount) do begin mCodingSM[i].Free; mCodingSM[i] := nil; end; SetLength(mCodingSM, 0); inherited; end; procedure TMultiModelProber.AddCharsetModel(Model: SMModel); begin inc(mCharsetsCount); SetLength(mCodingSM, mCharsetsCount); SetLength(mSMState, mCharsetsCount); mCodingSM[Pred(mCharsetsCount)] := TnsCodingStateMachine.Create(Model); mSMState[Pred(mCharsetsCount)] := psDetecting; Reset; end; function TMultiModelProber.GetDetectedCharset: eInternalCharsetID; begin Result := mDetectedCharset; end; function TMultiModelProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var codingState: nsSMState; j: integer; i: integer; begin {$IFDEF DEBUG_chardet} AddDump('Multi Model - HandleData - start'); {$endif} Result := mState; for i := 0 to Pred(aLen) do begin // if mState = psDetecting then // break; for j := mCharsetsCount - 1 downto 0 do begin // skip disabled if (not mCodingSM[j].Enabled) or (mSMState[j] = psNotMe) then continue; (*byte is feed to all active state machine *) codingState := mCodingSM[j].NextState(aBuf[i]); if codingState = eError then begin (*got negative answer for this state machine, make it inactive*) mSMState[j] := psNotMe; dec(mActiveSM); if mActiveSM = 0 then begin mState:= psNotMe; Result:= mState; {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - NOT ME!'); {$endif} exit; end; end else if codingState = eItsMe then begin {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - FOUND IT!'); {$endif} mSMState[j] := psFoundIt; mState := psFoundIt; mDetectedCharset := mCodingSM[j].GetCharsetID; Result:= mState; exit; end; end; // if codingState = eError end; if mActiveSM = 1 then begin for i := 0 to Pred(mCharsetsCount) do if (mSMState[i] <> psNotMe) then begin // TODO - set confidience ? or.... // signalised that it's not sure if GetConfidence > SURE_NO then begin mSMState[i] := psFoundIt; mState := psFoundIt; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end; end else Result := mState; {$IFDEF DEBUG_chardet} DumpStatus('Multi Model - HandleData - EXIT.'); {$endif} end; procedure TMultiModelProber.Reset; var i: integer; begin mState:= psDetecting; for i := 0 to Pred(mCharsetsCount) do begin mCodingSM[i].Reset; if mCodingSM[i].Enabled then mSMState[i] := psDetecting else mSMState[i] := psNotMe; end; mActiveSM := mCharsetsCount; mDetectedCharset := UNKNOWN_CHARSET; end; function TMultiModelProber.EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; var i: integer; begin for i := 0 to Pred(mCharsetsCount) do if mCodingSM[i].GetCharsetID = Charset then begin Result := true; mCodingSM[i].Enabled := NewValue; exit; end; Result := false; end; function TMultiModelProber.GetConfidence: float; var i: integer; begin Result := SURE_NO; case mState of psNotMe: begin Result := SURE_NO; mDetectedCharset := UNKNOWN_CHARSET; end; else for i := 0 to Pred(mCharsetsCount) do if (mSMState[i] = psFoundIt) or ((mSMState[i] = psDetecting) and (mActiveSM = 1)) then begin Result := SURE_YES; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end;{case} end; {$ifdef DEBUG_chardet} procedure TMultiModelProber.DumpStatus(Dump: string); var i: integer; begin inherited DumpStatus(Dump + ' Current state ' + GetEnumName(TypeInfo(eProbingState), integer(mState))); inherited DumpStatus(Format('%30s - %5s', ['Prober', 'State' ])); for i := 0 to Pred(mCharsetsCount) do inherited DumpStatus(Format('%30s - %5s', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mCodingSM[i].GetCharsetID)), GetEnumName(TypeInfo(eProbingState), integer(mSMState[i])) ])); end; {$endif} end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/EUCSampler.pas������������������������������������������������0000644�0001750�0000144�00000010021�12014201074�021371� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit EUCSampler; interface const FreqSize = 94; type rEUCStatistics = record mFirstByteFreq: array[0..Pred(FreqSize)] of Double; mFirstByteStdDev, mFirstByteMean, mFirstByteWeight: Double; mSecoundByteFreq: array [0..Pred(FreqSize)] of Double; mSecoundByteStdDev, mSecoundByteMean, mSecoundByteWeight: Double; end; prEUCStatistics = ^rEUCStatistics; type TEUCSampler = class (TObject) private mTotal, mThreshold, mState: integer; mFirstByteCnt: array [0..Pred(FreqSize)] of integer; mSecondByteCnt: array [0..Pred(FreqSize)] of integer; mFirstByteFreq: array [0..Pred(FreqSize)] of double; mSecondByteFreq: array [0..Pred(FreqSize)] of double; public constructor Create; destructor Destroy; override; function Sample(aIn: pChar; aLen: integer): Boolean; function GetSomeData: Boolean; function EnoughData: Boolean; procedure CalFreq; function GetScore(const aFirstByteFreq: array of Double; aFirstByteWeight: Double; const aSecondByteFreq: array of Double; aSecondByteWeight: Double): double; overload; virtual; function GetScore(const array1, array2: array of Double): double; overload; virtual; procedure Reset; end; implementation { TEUCSampler } procedure TEUCSampler.CalFreq; var i: integer; begin for i := 0 to Pred(FreqSize) do begin mFirstByteFreq[i] := mFirstByteCnt[i] / mTotal; mSecondByteFreq[i] := mSecondByteCnt[i] / mTotal; end; end; constructor TEUCSampler.Create; begin inherited; Reset; end; destructor TEUCSampler.Destroy; begin inherited; end; function TEUCSampler.EnoughData: Boolean; begin Result := mTotal > mThreshold; end; function TEUCSampler.GetScore(const aFirstByteFreq: array of Double; aFirstByteWeight: Double; const aSecondByteFreq: array of Double; aSecondByteWeight: Double): double; begin Result := aFirstByteWeight * GetScore(aFirstByteFreq, mFirstByteFreq) + aSecondByteWeight * GetScore(aSecondByteFreq, mSecondByteFreq); end; function TEUCSampler.GetScore(const array1, array2: array of Double): double; var s, sum: Double; i: integer; begin sum := 0.0; for i := 0 to Pred(FreqSize) do begin s := array1[i] - array2[i]; sum := sum + s * s; end; Result := sqrt(sum) / (FreqSize*1.0); end; function TEUCSampler.GetSomeData: Boolean; begin Result := mTotal > 1; end; procedure TEUCSampler.Reset; var i: integer; begin mTotal := 0; mThreshold := 200; mState := 0; for i := 0 to Pred(FreqSize) do begin mFirstByteCnt[i] := 0; mSecondByteCnt[i] := 0; end; end; function TEUCSampler.Sample(aIn: pChar; aLen: integer): Boolean; const MAX_LENGTH: integer = MaxInt;// $80000000; var i: integer; p: pChar; begin if (mState = 1) then begin Result := FALSE; exit; end; p := aIn; if (aLen + mTotal > MAX_LENGTH) then aLen := MAX_LENGTH - mTotal; i := 0; while (i < aLen) and (mState <> 1) do begin case mState of 0: if (byte(p^) and $0080) > 0 then begin if (byte(p^) = $00ff) or ( byte(p^) < $00a1) then mState := 1 else begin Inc(mTotal); Inc(mFirstByteCnt[byte(p^) - $00a1]); mState := 2; end; end; 1: begin end; 2: if ( byte(p^) and $0080) > 0 then begin if(byte(p^) = $00ff) or (byte(p^) < $00a1) then mState := 1 else begin Inc(mTotal); Inc(mSecondByteCnt[byte(p^) - $00a1]); mState := 0; end; end else mState := 1; else mState := 1; end; Inc(i); Inc(p); end; Result := ( mState <> 1 ); end; end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsEscCharsetProber.pas����������������������������������������0000644�0001750�0000144�00000004447�12014201074�023207� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsEscCharsetProber.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsEscCharsetProber; interface uses nsCore, MultiModelProber; type TnsEscCharSetProber = class (TMultiModelProber) public constructor Create; override; function GetConfidence: float; override; end; implementation uses nsCodingStateMachine, CustomDetector; {$I '.\mbclass\ISO2022KRLangModel.inc'} {$I '.\mbclass\ISO2022JPLangModel.inc'} {$I '.\mbclass\ISO2022CNLangModel.inc'} {$I '.\mbclass\HZLangModel.inc'} { TnsEscCharSetProber } const NUM_OF_ESC_CHARSETS = 4; constructor TnsEscCharSetProber.Create; begin inherited; AddCharsetModel(HZSMModel); AddCharsetModel(ISO2022CNSMModel); AddCharsetModel(ISO2022JPSMModel); AddCharsetModel(ISO2022KRSMModel); Reset; end; function TnsEscCharSetProber.GetConfidence: float; begin case mState of psFoundIt: Result := SURE_YES; psNotMe: Result := SURE_NO; psDetecting: Result := (SURE_YES + SURE_NO) / 2; else Result := 1.1 * SURE_NO; end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsCodingStateMachine.pas��������������������������������������0000644�0001750�0000144�00000007105�12014201074�023474� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsCodingStateMachine.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsCodingStateMachine; {$R-} interface uses nsCore; type nsSMState = ( eStart = 0, eError = 1, eItsMe = 2 ); (*state machine model*) type SMModel = record classTable: Pointer; //nsPkgInt; classFactor: PRUint32; stateTable: Pointer; //nsPkgInt; charLenTable: Pointer; // pByteArray; // array of byte; // pPRUint32; CharsetID: eInternalCharsetID; end; pSMModel = ^SMModel; type TnsCodingStateMachine = class (TObject) protected mCurrentState: nsSMState; mCurrentCharLen: PRUint32; mCurrentBytePos: PRUint32; mModel: SMModel; public Enabled: Boolean; constructor Create(sm: SMModel); destructor Destroy; override; function NextState(c: char): nsSMState; function GetCurrentCharLen: PRUint32; procedure Reset; function GetCharsetID: eInternalCharsetID; property LangModel: SMModel read mModel; end; implementation { TnsCodingStateMachine } constructor TnsCodingStateMachine.Create(sm: SMModel); begin mCurrentState:= eStart; mModel := sm; Enabled := true; end; destructor TnsCodingStateMachine.Destroy; begin mModel.classTable := nil; mModel.stateTable := nil; mModel.charLenTable := nil; inherited; end; function TnsCodingStateMachine.NextState(c: char): nsSMState; var byteCls: PRUint32; begin if not Enabled then begin Result := eError; exit; end; (*for each byte we get its class , if it is first byte, we also get byte length*) byteCls := pByteArray(mModel.classTable)[integer(c)]; if mCurrentState = eStart then begin mCurrentBytePos := 0; mCurrentCharLen := pByteArray(mModel.charLenTable)[byteCls]; end; (*from byte's class and stateTable, we get its next state*) mCurrentState := nsSMState(pByteArray(mModel.stateTable)[cardinal(mCurrentState) * mModel.classFactor + byteCls]); inc(mCurrentBytePos); //if mCurrentBytePos > mCurrentCharLen then // mCurrentState := eError; Result:= mCurrentState; end; function TnsCodingStateMachine.GetCurrentCharLen: PRUint32; begin Result:= mCurrentCharLen; end; procedure TnsCodingStateMachine.Reset; begin mCurrentState:= eStart; end; function TnsCodingStateMachine.GetCharsetID: eInternalCharsetID; begin Result:= mModel.CharsetID; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/Big5Freq.pas��������������������������������������������������0000644�0001750�0000144�00000244362�12014201074�021056� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: Big5Freq.pas,v 1.2 2007/05/20 15:46:02 ya_nick Exp $ unit Big5Freq; // Big5 frequency table // by Taiwan's Mandarin Promotion Council // <http://www.edu.tw:81/mandr/> (****************************************************************************** * 128 --> 0.42261 * 256 --> 0.57851 * 512 --> 0.74851 * 1024 --> 0.89384 * 2048 --> 0.97583 * * Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 * Random Distribution Ration = 512/(5401-512)=0.105 * * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR *****************************************************************************) interface uses nsCore; const BIG5_TYPICAL_DISTRIBUTION_RATIO: float = 0.75; //Char to FreqOrder table , BIG5_TABLE_SIZE = 5376; Big5CharToFreqOrder: array [0..BIG5_TABLE_SIZE-1] of PRInt16 = ( 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, // 16 3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, // 32 1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, // 48 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, // 64 3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, // 80 4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, // 96 5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, // 112 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, // 128 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, // 144 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, // 160 2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, // 176 1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, // 192 3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, // 208 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, // 224 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, // 240 3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, // 256 2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, // 272 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, // 288 3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, // 304 1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, // 320 5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, // 336 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, // 352 5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, // 368 1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, // 384 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, // 400 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, // 416 3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, // 432 3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, // 448 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, // 464 2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, // 480 2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, // 496 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, // 512 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, // 528 3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, // 544 1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, // 560 1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, // 576 1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, // 592 2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, // 608 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, // 624 4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, // 640 1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, // 656 5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, // 672 2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, // 688 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, // 704 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, // 720 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, // 736 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, // 752 5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, // 768 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, // 784 1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, // 800 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, // 816 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, // 832 5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, // 848 1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, // 864 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, // 880 3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, // 896 4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, // 912 3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, // 928 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, // 944 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, // 960 1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, // 976 4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, // 992 3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, // 1008 3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, // 1024 2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, // 1040 5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, // 1056 3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, // 1072 5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, // 1088 1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, // 1104 2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, // 1120 1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, // 1136 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, // 1152 1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, // 1168 4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, // 1184 3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, // 1200 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, // 1216 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, // 1232 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, // 1248 2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, // 1264 5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, // 1280 1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, // 1296 2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, // 1312 1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, // 1328 1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, // 1344 5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, // 1360 5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, // 1376 5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, // 1392 3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, // 1408 4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, // 1424 4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, // 1440 2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, // 1456 5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, // 1472 3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, // 1488 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, // 1504 5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, // 1520 5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, // 1536 1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, // 1552 2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, // 1568 3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, // 1584 4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, // 1600 5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, // 1616 3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, // 1632 4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, // 1648 1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, // 1664 1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, // 1680 4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, // 1696 1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, // 1712 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, // 1728 1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, // 1744 1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, // 1760 3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, // 1776 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, // 1792 5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, // 1808 2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, // 1824 1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, // 1840 1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, // 1856 5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, // 1872 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, // 1888 4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, // 1904 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, // 1920 2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, // 1936 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, // 1952 1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, // 1968 1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, // 1984 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, // 2000 4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, // 2016 4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, // 2032 1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, // 2048 3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, // 2064 5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, // 2080 5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, // 2096 1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, // 2112 2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, // 2128 1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, // 2144 3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, // 2160 2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, // 2176 3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, // 2192 2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, // 2208 4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, // 2224 4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, // 2240 3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, // 2256 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, // 2272 3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, // 2288 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, // 2304 3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, // 2320 4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, // 2336 3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, // 2352 1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, // 2368 5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, // 2384 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, // 2400 5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, // 2416 1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, // 2432 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, // 2448 4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, // 2464 4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, // 2480 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, // 2496 2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, // 2512 2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, // 2528 3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, // 2544 1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, // 2560 4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, // 2576 2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, // 2592 1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, // 2608 1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, // 2624 2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, // 2640 3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, // 2656 1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, // 2672 5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, // 2688 1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, // 2704 4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, // 2720 1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, // 2736 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, // 2752 1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, // 2768 4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, // 2784 4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, // 2800 2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, // 2816 1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, // 2832 4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, // 2848 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, // 2864 5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, // 2880 2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, // 2896 3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, // 2912 4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, // 2928 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, // 2944 5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, // 2960 5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, // 2976 1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, // 2992 4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, // 3008 4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, // 3024 2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, // 3040 3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, // 3056 3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, // 3072 2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, // 3088 1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, // 3104 4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, // 3120 3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, // 3136 3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, // 3152 2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, // 3168 4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, // 3184 5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, // 3200 3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, // 3216 2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, // 3232 3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, // 3248 1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, // 3264 2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, // 3280 3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, // 3296 4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, // 3312 2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, // 3328 2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, // 3344 5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, // 3360 1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, // 3376 2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, // 3392 1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, // 3408 3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, // 3424 4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, // 3440 2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, // 3456 3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, // 3472 3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, // 3488 2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, // 3504 4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, // 3520 2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, // 3536 3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, // 3552 4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, // 3568 5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, // 3584 3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, // 3600 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, // 3616 1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, // 3632 4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, // 3648 1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, // 3664 4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, // 3680 5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, // 3696 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, // 3712 5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, // 3728 5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, // 3744 2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, // 3760 3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, // 3776 2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, // 3792 2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, // 3808 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, // 3824 1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, // 3840 4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, // 3856 3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, // 3872 3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, // 3888 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, // 3904 2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, // 3920 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, // 3936 2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, // 3952 4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, // 3968 1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, // 3984 4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, // 4000 1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, // 4016 3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, // 4032 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, // 4048 3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, // 4064 5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, // 4080 5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, // 4096 3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, // 4112 3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, // 4128 1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, // 4144 2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, // 4160 5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, // 4176 1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, // 4192 1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, // 4208 3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, // 4224 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, // 4240 1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, // 4256 4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, // 4272 5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, // 4288 2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, // 4304 3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, // 4320 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, // 4336 1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, // 4352 2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, // 4368 2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, // 4384 5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, // 4400 5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, // 4416 5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, // 4432 2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, // 4448 2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, // 4464 1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, // 4480 4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, // 4496 3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, // 4512 3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, // 4528 4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, // 4544 4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, // 4560 2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, // 4576 2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, // 4592 5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, // 4608 4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, // 4624 5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, // 4640 4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, // 4656 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, // 4672 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, // 4688 1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, // 4704 3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, // 4720 4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, // 4736 1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, // 4752 5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, // 4768 2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, // 4784 2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, // 4800 3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, // 4816 5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, // 4832 1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, // 4848 3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, // 4864 5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, // 4880 1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, // 4896 5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, // 4912 2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, // 4928 3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, // 4944 2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, // 4960 3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, // 4976 3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, // 4992 3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, // 5008 4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, // 5024 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, // 5040 2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, // 5056 4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, // 5072 3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, // 5088 5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, // 5104 1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, // 5120 5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, // 5136 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, // 5152 1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, // 5168 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, // 5184 4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, // 5200 1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, // 5216 4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, // 5232 1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, // 5248 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, // 5264 3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, // 5280 4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, // 5296 5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, // 5312 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, // 5328 3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, // 5344 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, // 5360 2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798 // 5376 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, // 5392 2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, // 5408 5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, // 5424 5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, // 5440 5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, // 5456 5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, // 5472 5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, // 5488 5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, // 5504 5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, // 5520 5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, // 5536 5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, // 5552 5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, // 5568 5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, // 5584 5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, // 5600 6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, // 5616 6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, // 5632 6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, // 5648 6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, // 5664 6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, // 5680 6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, // 5696 6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, // 5712 6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, // 5728 6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, // 5744 6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, // 5760 6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, // 5776 6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, // 5792 6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, // 5808 6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, // 5824 6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, // 5840 6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, // 5856 6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, // 5872 6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, // 5888 6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, // 5904 6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, // 5920 6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, // 5936 6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, // 5952 6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, // 5968 6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, // 5984 6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, // 6000 6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, // 6016 6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, // 6032 6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, // 6048 6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, // 6064 6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, // 6080 6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, // 6096 6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, // 6112 6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, // 6128 6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, // 6144 6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, // 6160 6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, // 6176 6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, // 6192 6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, // 6208 6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, // 6224 6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, // 6240 6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, // 6256 3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, // 6272 6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, // 6288 6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, // 6304 3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, // 6320 6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, // 6336 6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, // 6352 6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, // 6368 6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, // 6384 6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, // 6400 6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, // 6416 6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, // 6432 4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, // 6448 6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, // 6464 6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, // 6480 3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, // 6496 6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, // 6512 6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, // 6528 6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, // 6544 6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, // 6560 6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, // 6576 6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, // 6592 6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, // 6608 6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, // 6624 6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, // 6640 6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, // 6656 6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, // 6672 7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, // 6688 7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, // 6704 7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, // 6720 7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, // 6736 7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, // 6752 7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, // 6768 7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, // 6784 7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, // 6800 7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, // 6816 7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, // 6832 7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, // 6848 7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, // 6864 7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, // 6880 7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, // 6896 7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, // 6912 7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, // 6928 7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, // 6944 7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, // 6960 7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, // 6976 7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, // 6992 7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, // 7008 7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, // 7024 7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, // 7040 7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, // 7056 7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, // 7072 7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, // 7088 7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, // 7104 7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, // 7120 7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, // 7136 7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, // 7152 7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, // 7168 7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, // 7184 7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, // 7200 7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, // 7216 7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, // 7232 7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, // 7248 7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, // 7264 7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, // 7280 7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, // 7296 7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, // 7312 7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, // 7328 7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, // 7344 7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, // 7360 7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, // 7376 7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, // 7392 7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, // 7408 7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, // 7424 7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, // 7440 3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, // 7456 7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, // 7472 7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, // 7488 7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, // 7504 7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, // 7520 4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7536 7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, // 7552 7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, // 7568 7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, // 7584 7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, // 7600 7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, // 7616 7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, // 7632 7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, // 7648 7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, // 7664 7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, // 7680 7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, // 7696 7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, // 7712 8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, // 7728 8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, // 7744 8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, // 7760 8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, // 7776 8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, // 7792 8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, // 7808 8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, // 7824 8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, // 7840 8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, // 7856 8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, // 7872 8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, // 7888 8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, // 7904 8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, // 7920 8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, // 7936 8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, // 7952 8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, // 7968 8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, // 7984 8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, // 8000 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, // 8016 8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, // 8032 8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, // 8048 8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, // 8064 8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, // 8080 8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, // 8096 8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, // 8112 8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, // 8128 8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, // 8144 8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, // 8160 8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, // 8176 8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, // 8192 8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, // 8208 8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, // 8224 8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, // 8240 8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, // 8256 8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, // 8272 8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, // 8288 8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, // 8304 8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, // 8320 8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, // 8336 8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, // 8352 8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, // 8368 8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, // 8384 8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, // 8400 8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, // 8416 8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, // 8432 8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, // 8448 8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, // 8464 8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, // 8480 8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, // 8496 8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, // 8512 8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, // 8528 8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, // 8544 8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, // 8560 8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, // 8576 8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, // 8592 8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, // 8608 8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, // 8624 8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, // 8640 8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, // 8656 8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, // 8672 8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, // 8688 4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, // 8704 8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, // 8720 8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, // 8736 8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, // 8752 8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, // 8768 9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, // 8784 9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, // 8800 9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, // 8816 9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, // 8832 9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, // 8848 9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, // 8864 9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, // 8880 9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, // 8896 9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, // 8912 9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, // 8928 9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, // 8944 9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, // 8960 9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, // 8976 9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, // 8992 9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, // 9008 9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, // 9024 9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, // 9040 9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, // 9056 9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, // 9072 9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, // 9088 9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, // 9104 9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, // 9120 9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, // 9136 9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, // 9152 9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, // 9168 9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, // 9184 9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, // 9200 9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, // 9216 9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, // 9232 9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, // 9248 9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, // 9264 9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, // 9280 9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, // 9296 9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, // 9312 9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, // 9328 9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, // 9344 9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, // 9360 9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, // 9376 3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, // 9392 9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, // 9408 9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, // 9424 9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, // 9440 4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, // 9456 9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, // 9472 9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, // 9488 9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, // 9504 9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, // 9520 9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, // 9536 9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, // 9552 9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, // 9568 9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, // 9584 9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, // 9600 9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, // 9616 9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, // 9632 9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, // 9648 9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, // 9664 9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, // 9680 9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, // 9696 9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, // 9712 9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, // 9728 9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, // 9744 9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, // 9760 9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, // 9776 9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, // 9792 9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, // 9808 9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, // 9824 10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, // 9840 10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, // 9856 10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, // 9872 10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, // 9888 10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, // 9904 10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, // 9920 10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, // 9936 10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, // 9952 10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, // 9968 4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, // 9984 10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, //10000 10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, //10016 10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, //10032 10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, //10048 10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, //10064 10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, //10080 10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, //10096 10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, //10112 4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, //10128 10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, //10144 10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, //10160 10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, //10176 10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, //10192 10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, //10208 10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, //10224 10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, //10240 10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, //10256 10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, //10272 10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, //10288 10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, //10304 10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, //10320 10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, //10336 10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, //10352 10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, //10368 10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, //10384 10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, //10400 4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, //10416 10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, //10432 10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, //10448 10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, //10464 10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, //10480 10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, //10496 10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, //10512 10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, //10528 10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, //10544 10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, //10560 10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, //10576 10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, //10592 10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, //10608 10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, //10624 10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, //10640 10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, //10656 10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, //10672 10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, //10688 10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, //10704 10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, //10720 10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, //10736 10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, //10752 10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, //10768 10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, //10784 10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, //10800 10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, //10816 10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, //10832 10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, //10848 10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, //10864 10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, //10880 10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, //10896 11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, //10912 11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, //10928 11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, //10944 4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, //10960 11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, //10976 11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, //10992 11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, //11008 11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, //11024 11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, //11040 11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, //11056 11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, //11072 11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, //11088 11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, //11104 11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, //11120 11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, //11136 11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, //11152 11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, //11168 11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, //11184 11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, //11200 11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, //11216 11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, //11232 11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, //11248 11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, //11264 11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, //11280 11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, //11296 11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, //11312 11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, //11328 11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, //11344 11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, //11360 11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, //11376 11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, //11392 11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, //11408 11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, //11424 11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, //11440 11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, //11456 11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, //11472 4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, //11488 11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, //11504 11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, //11520 11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, //11536 11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, //11552 11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, //11568 11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, //11584 11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, //11600 11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, //11616 11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, //11632 11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, //11648 11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, //11664 11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, //11680 11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, //11696 11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, //11712 11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, //11728 11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, //11744 11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, //11760 11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, //11776 11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, //11792 11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, //11808 11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, //11824 11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, //11840 11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, //11856 11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, //11872 11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, //11888 11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, //11904 11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, //11920 11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, //11936 12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, //11952 12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, //11968 12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, //11984 12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, //12000 12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, //12016 12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, //12032 12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, //12048 12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, //12064 12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, //12080 12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, //12096 12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, //12112 12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, //12128 12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, //12144 12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, //12160 12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, //12176 4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, //12192 4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, //12208 4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, //12224 12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, //12240 12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, //12256 12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, //12272 12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, //12288 12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, //12304 12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, //12320 12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, //12336 12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, //12352 12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, //12368 12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, //12384 12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, //12400 12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, //12416 12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, //12432 12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, //12448 12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, //12464 12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, //12480 12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, //12496 12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, //12512 12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, //12528 12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, //12544 12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, //12560 12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, //12576 12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, //12592 12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, //12608 12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, //12624 12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, //12640 12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, //12656 12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, //12672 12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, //12688 12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, //12704 12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, //12720 12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, //12736 12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, //12752 12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, //12768 12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, //12784 12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, //12800 12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, //12816 12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, //12832 12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, //12848 12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, //12864 12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, //12880 12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, //12896 12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, //12912 12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, //12928 12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, //12944 12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, //12960 12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, //12976 4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, //12992 13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, //13008 13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, //13024 13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, //13040 13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, //13056 13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, //13072 13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, //13088 13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, //13104 4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, //13120 13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, //13136 13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, //13152 13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, //13168 13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, //13184 13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, //13200 13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, //13216 13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, //13232 13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, //13248 13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, //13264 13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, //13280 13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, //13296 13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, //13312 13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, //13328 13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, //13344 13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, //13360 5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, //13376 13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, //13392 13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, //13408 13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, //13424 13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, //13440 13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, //13456 13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, //13472 13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, //13488 13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, //13504 13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, //13520 13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, //13536 13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, //13552 13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, //13568 13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, //13584 13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, //13600 13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, //13616 13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, //13632 13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, //13648 13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, //13664 13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, //13680 13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, //13696 13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, //13712 13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, //13728 13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, //13744 13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, //13760 13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, //13776 13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, //13792 13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, //13808 13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, //13824 13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, //13840 13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, //13856 13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, //13872 13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, //13888 13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, //13904 13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, //13920 13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, //13936 13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, //13952 13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, //13968 13968,13969,13970,13971,13972, //13973 ****************************************************************************************) ); implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/GB2312Freq.pas������������������������������������������������0000644�0001750�0000144�00000107611�12014201074�021063� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: GB2312Freq.pas,v 1.2 2007/05/20 15:46:04 ya_nick Exp $ unit GB2312Freq; //GB2312 most frequently used character table //Char to FreqOrder table , from hz6763 (****************************************************************************** * 512 --> 0.79 -- 0.79 * 1024 --> 0.92 -- 0.13 * 2048 --> 0.98 -- 0.06 * 6768 --> 1.00 -- 0.02 * * Idea Distribution Ratio = 0.79135/(1-0.79135) = 3.79 * Random Distribution Ration = 512 / (3755 - 512) = 0.157 * * Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR *****************************************************************************) interface uses nsCore; const GB2312_TYPICAL_DISTRIBUTION_RATIO: float = 0.9; GB2312_TABLE_SIZE = 3760; GB2312CharToFreqOrder: array [0..GB2312_TABLE_SIZE-1] of PRInt16 = ( 1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, 2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, 2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, 1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, 1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, 1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, 2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, 3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, 1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, 2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, 2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, 1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, 3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, 1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, 2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, 1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, 3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, 1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, 2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, 1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, 3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, 3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, 3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, 1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, 3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, 2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, 1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, 1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, 4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, 3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, 3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, 1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, 2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, 1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, 1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, 3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, 3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, 4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, 3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, 1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, 1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, 4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, 3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, 1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, 1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, 2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, 3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, 4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, 3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, 2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, 2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, 2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, 2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, 3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, 2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, 2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, 1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, 2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, 1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, 1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, 1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, 2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, 3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, 2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, 2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, 2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, 3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, 1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, 1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, 2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, 1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, 3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, 1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, 1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, 3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, 2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, 1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, 4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, 1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, 1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, 3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, 1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, 1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, 1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, 1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, 3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, 4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, 3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, 2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, 2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, 1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, 3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, 2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, 1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, 1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, 2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, 2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, 3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, 4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, 3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, 3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, 2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, 1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, 3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, 4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, 2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, 1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, 1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, 1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, 3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, 1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, 1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, 2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, 2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, 2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, 1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, 1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, 2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, 1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, 1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, 2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, 2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, 3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, 1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, 4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, 3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, 1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, 3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, 1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, 4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, 1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, 2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, 1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, 1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, 3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, 2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, 1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, 1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, 1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, 3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, 2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, 3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, 3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, 3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, 2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, 2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, 1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, 1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, 3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, 3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, 1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, 1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, 3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, 2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, 2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, 1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, 3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, 4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, 1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, 2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, 3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, 3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, 1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, 2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, 1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, 1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, 1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, 1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, 1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, 1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, 5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, 5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, 3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, 4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, 5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, 5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, 4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, 4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, 4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, 4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, 3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, 6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, 4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, 6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, 4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, 4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, 4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, 5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, 3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, 4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, 3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, 4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, 4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, 6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, 6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, 5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, 4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, 6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, 4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, 5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, 5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, 5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, 6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, 3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, 6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, 4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, 5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, 6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, 6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, 4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, 5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, 4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, 5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, 5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, 4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, 4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, 5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, 4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, 4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, 5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, 4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, 4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, 4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, 5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, 5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, 4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, 3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, 4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, 6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, 5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, 5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, 4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, 6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, 5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, 6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, 4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, 5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, 5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, 3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, 5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, 6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, 4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, 6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, 4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, 4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, 6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, 3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, 6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, 4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, 3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, 3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, 3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, 4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, 2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, 5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, 4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, 5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, 5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, 5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, 4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, 5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, 4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, 5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, 1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, 3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, 4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, 4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, 6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, 4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, 5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, 3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, 5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, 5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, 5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, 3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, 5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, 5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, 3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, 5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, 5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, 5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, 6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, 4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, 6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, 4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, 3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, 4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, 5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, 5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, 5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, 3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, 3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, 6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, 6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, 5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, 6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, 6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, 6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, 6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, 6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, 5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, 6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, 6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, 3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, 3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, 4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, 4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, 3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, 5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, 5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, 5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, 5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, 5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, 4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, 5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, 6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, 5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, 4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, 4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, 6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, 3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, 4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, 4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, 5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, 6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, 6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, 4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, 6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, 5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, 5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, 5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, 5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, 5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, 4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, 5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, 5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, 5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, 5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, 6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, 4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, 5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, 4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, 4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, 6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, 4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, 6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, 3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, 5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, 6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, 6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, 6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, 5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, 6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, 6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, 3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, 5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, 4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767, *******************************************************************************) ); implementation end. �����������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsMBCSMultiProber.pas�����������������������������������������0000644�0001750�0000144�00000021537�12014201074�022721� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsMBCSMultiProber.pas,v 1.2 2007/05/26 13:09:38 ya_nick Exp $ unit nsMBCSMultiProber; interface uses {$I dbg.inc} nsCore, MultiModelProber, JpCntx, CharDistribution; type TnsMBCSMultiProber = class (TMultiModelProber) private mDistributionAnalysis: array of TCharDistributionAnalysis; mContextAnalysis: array of TJapaneseContextAnalysis; mBestGuess: integer; function RunStatAnalyse(aBuf: PChar; aLen: integer): eProbingState; function GetConfidenceFor(index: integer): double; reintroduce; public constructor Create; reintroduce; destructor Destroy; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; function GetConfidence: double; override; procedure Reset; override; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} end; implementation uses SysUtils, nsCodingStateMachine {$ifdef DEBUG_chardet} ,TypInfo {$endif} ; {$I '.\mbclass\SJISLangModel.inc'} {$I '.\mbclass\EUCJPLangModel.inc'} {$I '.\mbclass\GB18030LangModel.inc'} {$I '.\mbclass\EUCKRLangModel.inc'} {$I '.\mbclass\Big5LangModel.inc'} {$I '.\mbclass\EUCTWLangModel.inc'} { TnsMBCSMultiProber } const NUM_OF_PROBERS = 6; constructor TnsMBCSMultiProber.Create; begin inherited Create; SetLength(mDistributionAnalysis, NUM_OF_PROBERS); SetLength(mContextAnalysis, NUM_OF_PROBERS); AddCharsetModel(SJISLangModel); mDistributionAnalysis[0] := TSJISDistributionAnalysis.Create; mContextAnalysis[0] := TSJISContextAnalysis.Create; AddCharsetModel(EUCJPLangModel); mDistributionAnalysis[1] := TEUCKRDistributionAnalysis.Create; mContextAnalysis[1] := nil; AddCharsetModel(GB18030LangModel); mDistributionAnalysis[2] := TGB2312DistributionAnalysis.Create; mContextAnalysis[2] := nil; AddCharsetModel(EUCKRLangModel); mDistributionAnalysis[3] := TEUCKRDistributionAnalysis.Create; mContextAnalysis[3] := nil; AddCharsetModel(Big5LangModel); mDistributionAnalysis[4] := TBig5DistributionAnalysis.Create; mContextAnalysis[4] := nil; AddCharsetModel(EUCTWLangModel); mDistributionAnalysis[5] := TEUCTWDistributionAnalysis.Create; mContextAnalysis[5] := nil; end; destructor TnsMBCSMultiProber.Destroy; var i: integer; begin inherited; for i := 0 to Pred(mCharsetsCount) do begin if mDistributionAnalysis[i] <> nil then mDistributionAnalysis[i].Free; if mContextAnalysis[i] <> nil then mContextAnalysis[i].Free; end; SetLength(mDistributionAnalysis, 0); SetLength(mContextAnalysis, 0); end; {$ifdef DEBUG_chardet} procedure TnsMBCSMultiProber.DumpStatus(Dump: string); var i: integer; begin AddDump(Dump + ' Current state ' + GetEnumName(TypeInfo(eProbingState), integer(mState))); AddDump(Format('%30s - %10s - %5s', ['Prober', 'State', 'Conf'])); for i := 0 to Pred(mCharsetsCount) do AddDump(Format('%30s - %10s - %1.5f', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mCodingSM[i].GetCharsetID)), GetEnumName(TypeInfo(eProbingState), integer(mSMState[i])), GetConfidenceFor(i) ])); end; {$endif} function TnsMBCSMultiProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: PChar; hptr: PChar; keepNext: Boolean; begin keepNext := TRUE; (*assume previous is not ascii, it will do no harm except add some noise*) highbyteBuf := AllocMem(aLen); try hptr:= highbyteBuf; if hptr = nil then begin Result := mState; exit; end; for i:=0 to Pred(aLen) do begin if (Byte(aBuf[i]) > $80) then begin inc(hptr); hptr^ := aBuf[i]; keepNext:= TRUE; end else begin (*if previous is highbyte, keep this even it is a ASCII*) if keepNext = TRUE then begin inc(hptr); hptr^ := aBuf[i]; keepNext:= FALSE; end; end; end; {$IFDEF DEBUG_chardet} AddDump('MultiByte - HandleData - start'); {$endif} inherited HandleData(highbyteBuf, hptr - highbyteBuf); {$IFDEF DEBUG_chardet} AddDump('MultiByte - HandleData - end'); {$endif} finally FreeMem(highbyteBuf, aLen); end; // if we have more when one candidat then // try statisic analyse if (mState <> psFoundIt) or (mState <> psNotMe) then RunStatAnalyse(aBuf, aLen); Result := mState; end; function TnsMBCSMultiProber.RunStatAnalyse(aBuf: PChar; aLen: integer): eProbingState; var i, c: integer; codingState: nsSMState; charLen: byte; mLastChar: array [0..1] of Char; begin {$IFDEF DEBUG_chardet} AddDump('MultiByte - Stat Analyse - start'); {$endif} for i := 0 to Pred(mCharsetsCount) do begin if (mSMState[i] = psFoundIt) or (mSMState[i] = psNotMe) then continue; if mDistributionAnalysis[i] = nil then continue; for c := 0 to Pred(aLen) do begin codingState := mCodingSM[i].NextState(aBuf[c]); if codingState = eStart then begin charLen := mCodingSM[i].GetCurrentCharLen; if c = 0 then begin mLastChar[1] := aBuf[0]; if mContextAnalysis[i] <> nil then mContextAnalysis[i].HandleOneChar(mLastChar,charLen); mDistributionAnalysis[i].HandleOneChar(mLastChar,charLen); end else begin if mContextAnalysis[i] <> nil then mContextAnalysis[i].HandleOneChar(aBuf+c-1,charLen); mDistributionAnalysis[i].HandleOneChar(aBuf+c-1,charLen); end; end; if (mContextAnalysis[i] <> nil) then if mContextAnalysis[i].GotEnoughData and (GetConfidenceFor(i) > SHORTCUT_THRESHOLD) then begin mState := psFoundIt; mDetectedCharset := mCodingSM[i].GetCharsetID; break; end; end; end; {$IFDEF DEBUG_chardet} AddDump('MultiByte - Stat Analyse - EXIT'); {$endif} Result := mState; end; function TnsMBCSMultiProber.GetConfidenceFor(index: integer): double; var contxtCf: double; distribCf: double; begin if mContextAnalysis[index] <> nil then contxtCf := mContextAnalysis[index].GetConfidence else contxtCf := -1; distribCf := mDistributionAnalysis[index].GetConfidence; if contxtCf > distribCf then Result := contxtCf else Result := distribCf; end; function TnsMBCSMultiProber.GetConfidence: double; var i: integer; conf, bestConf: double; begin mBestGuess := -1; bestConf := SURE_NO; for i := 0 to Pred(mCharsetsCount) do begin if (mSMState[i] = psFoundIt) or (mSMState[i] = psNotMe) then continue; if mDistributionAnalysis[i] = nil then continue; conf := GetConfidenceFor(i); if conf > bestConf then begin mBestGuess := i; bestConf := conf; end; end; Result := bestConf; if mBestGuess > -1 then mDetectedCharset := mCodingSM[mBestGuess].GetCharsetID else mDetectedCharset := UNKNOWN_CHARSET; end; procedure TnsMBCSMultiProber.Reset; var i: integer; begin inherited Reset; for i := 0 to Pred(mCharsetsCount) do begin if mDistributionAnalysis[i] <> nil then mDistributionAnalysis[i].Reset; if mContextAnalysis[i] <> nil then mContextAnalysis[i].Reset; end; end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/CharDistribution.pas������������������������������������������0000644�0001750�0000144�00000023534�12014201074�022723� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: CharDistribution.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit CharDistribution; {$R-} interface uses nsCore; type TCharDistributionAnalysis = class (TObject) protected //mDone: PRBool; (*If this flag is set to PR_TRUE, detection is done and conclusion has been made*) // YaN: nice idea. Unfortunately is not implemented :(( mFreqChars: PRUint32; (*The number of characters whose frequency order is less than 512*) mTotalChars: PRUint32; (*Total character encounted.*) mCharToFreqOrder: pPRInt16; (*Mapping table to get frequency order from char order (get from GetOrder())*) mTableSize: PRUint32; (*Size of above table*) mTypicalDistributionRatio: double;(*This is a constant value varies from language to language, it is used in calculating confidence. See my paper for further detail.*) //we do not handle character base on its original encoding string, but //convert this encoding string to a number, here called order. //This allow multiple encoding of a language to share one frequency table function GetOrder(str: PChar): PRInt32; virtual; abstract; (*feed a block of data and do distribution analysis*) // function HandleData(const aBuf: PChar; aLen: PRUint32): eProbingState; virtual; abstract; public destructor Destroy; override; (*This function is for future extension. Caller can use this function to control analyser's behavior*) // procedure SetOpion(); virtual; abstract; (*return confidence base on existing data*) function GetConfidence: float; virtual; (*Reset analyser, clear any state *) procedure Reset; virtual; (*It is not necessary to receive all data to draw conclusion. For charset detection, certain amount of data is enough*) function GotEnoughData: Boolean; (*Feed a character with known length*) procedure HandleOneChar(aStr: PChar; aCharLen: PRUint32); virtual; end; TEUCTWDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-TW encoding, we are interested *) (* first byte range: 0xc4 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; TEUCKRDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-KR encoding, we are interested *) (* first byte range: 0xb0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; TGB2312DistributionAnalysis = class (TCharDistributionAnalysis) (*for GB2312 encoding, we are interested *) (* first byte range: 0xb0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; TBig5DistributionAnalysis = class (TCharDistributionAnalysis) (*for big5 encoding, we are interested *) (* first byte range: 0xa4 -- 0xfe*) (* second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; TSJISDistributionAnalysis = class (TCharDistributionAnalysis) (*for sjis encoding, we are interested *) (* first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe*) (* second byte range: 0x40 -- 0x7e, 0x81 -- oxfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; TEUCJPDistributionAnalysis = class (TCharDistributionAnalysis) (*for euc-JP encoding, we are interested *) (* first byte range: 0xa0 -- 0xfe*) (* second byte range: 0xa1 -- 0xfe*) (*no validation needed here. State machine has done that*) protected function GetOrder(str: PChar): PRInt32; override; public constructor Create; reintroduce; end; implementation uses JISFreq, Big5Freq, EUCKRFreq, EUCTWFreq, GB2312Freq; destructor TCharDistributionAnalysis.Destroy; begin mCharToFreqOrder := nil; inherited; end; procedure TCharDistributionAnalysis.HandleOneChar(aStr: PChar; aCharLen: PRUint32); var order: integer; begin (*we only care about 2-bytes character in our distribution analysis*) if (aCharLen=2) then order := GetOrder(aStr) else order := -1; if order >= 0 then begin inc(mTotalChars); (*order is valid*) if order < integer(mTableSize) then begin if 512 > aPRint16(mCharToFreqOrder)[order] then inc(mFreqChars); end; end; end; function TCharDistributionAnalysis.GetConfidence: float; var r: float; begin (*if we didn't receive any character in our consideration range, return negative answer*) if mTotalChars <= 0 then begin Result := SURE_NO; exit; end; if mTotalChars <> mFreqChars then begin r := mFreqChars / ((mTotalChars - mFreqChars) * mTypicalDistributionRatio); if r < SURE_YES then begin Result := r; exit; end; end; (*normalize confidence, (we don't want to be 100% sure)*) Result := SURE_YES; end; procedure TCharDistributionAnalysis.Reset; begin mTotalChars := 0; mFreqChars := 0; end; function TCharDistributionAnalysis.GotEnoughData: Boolean; begin Result := (mTotalChars > ENOUGH_DATA_THRESHOLD); end; constructor TEUCTWDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @EUCTWCharToFreqOrder; mTableSize := EUCTW_TABLE_SIZE; mTypicalDistributionRatio := EUCTW_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCTWDistributionAnalysis.GetOrder(str: PChar): PRInt32; begin if byte(str^) >= $c4 then Result := 94 * (byte(str[0]) - $c4) + byte(str[1]) - byte($a1) else Result := -1; end; constructor TEUCKRDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @EUCKRCharToFreqOrder; mTableSize := EUCKR_TABLE_SIZE; mTypicalDistributionRatio := EUCKR_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCKRDistributionAnalysis.GetOrder(str: PChar): PRInt32; begin if byte(str^) >= $b0 then Result := 94 * (byte(str[0]) - $b0) + byte(str[1]) - $a1 else Result := -1; end; constructor TGB2312DistributionAnalysis.Create; begin inherited; mCharToFreqOrder := @GB2312CharToFreqOrder; mTableSize := GB2312_TABLE_SIZE; mTypicalDistributionRatio := GB2312_TYPICAL_DISTRIBUTION_RATIO; end; function TGB2312DistributionAnalysis.GetOrder(str: PChar): PRInt32; begin if (byte(str[0]) >= $b0) and (byte(str[1]) >= $a1) then Result := 94 * (byte(str[0]) - $b0) + byte(str[1]) - $a1 else Result := -1; end; constructor TBig5DistributionAnalysis.Create; begin inherited; mCharToFreqOrder := @Big5CharToFreqOrder; mTableSize := BIG5_TABLE_SIZE; mTypicalDistributionRatio := BIG5_TYPICAL_DISTRIBUTION_RATIO; end; function TBig5DistributionAnalysis.GetOrder(str: PChar): PRInt32; begin if byte(str[0]) >= $a4 then begin if byte(str[1]) >= $a1 then Result := 157 * (byte(str[0]) - $a4) + byte(str[1]) - $a1 + 63 else Result := 157 * (byte(str[0]) - $a4) + byte(str[1]) - $40; end else Result:= -1; end; constructor TSJISDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @JISCharToFreqOrder; mTableSize := JIS_TABLE_SIZE; mTypicalDistributionRatio := JIS_TYPICAL_DISTRIBUTION_RATIO; end; function TSJISDistributionAnalysis.GetOrder(str: PChar): PRInt32; var order: PRInt32; begin if (byte(str[0]) >= $81) and (byte(str[0]) <= $9f) then order := 188 * (byte(str[0]) - $81) else if (byte(str[0]) >= $e0) and (byte(str[0]) <= $ef) then order := 188 * (byte(str[0]) - $e0 + 31) else begin Result:= -1; exit; end; order := order + (byte((str+1)^) - $40); if byte(str[1]) > $7f then dec(order); Result := order; end; constructor TEUCJPDistributionAnalysis.Create; begin inherited Create; mCharToFreqOrder := @JISCharToFreqOrder; mTableSize := JIS_TABLE_SIZE; mTypicalDistributionRatio := JIS_TYPICAL_DISTRIBUTION_RATIO; end; function TEUCJPDistributionAnalysis.GetOrder(str: PChar): PRInt32; begin if byte(str[0]) >= $a0 then Result := 94 * (byte(str[0]) - $a1) + byte(str[1]) - $a1 else Result:= -1; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/chsdet.lpr����������������������������������������������������0000644�0001750�0000144�00000003413�12014201074�020724� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: chsdet.lpr,v 1.1 2009/03/20 17:40:22 ya_nick Exp $ library chsdet; uses chsdIntf in 'chsdIntf.pas', LangBulgarianModel in 'sbseq/LangBulgarianModel.pas', LangCyrillicModel in 'sbseq/LangCyrillicModel.pas', LangGreekModel in 'sbseq/LangGreekModel.pas', LangHebrewModel in 'sbseq/LangHebrewModel.pas' ; exports csd_Reset, csd_HandleData, csd_Done, csd_DataEnd, csd_GetDetectedCharset, csd_GetKnownCharsets, csd_GetAbout; {.chsdet$R *.res} {.chsdet$R chsdet.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/JISFreq.pas���������������������������������������������������0000644�0001750�0000144�00000136670�12014201074�020717� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: JISFreq.pas,v 1.2 2007/05/20 15:46:04 ya_nick Exp $ unit JISFreq; //Sampling from about 20M text materials include literature and computer technology // Japanese frequency table, applied to both S-JIS and EUC-JP //They are sorted in order. (****************************************************************************** * 128 --> 0.77094 * 256 --> 0.85710 * 512 --> 0.92635 * 1024 --> 0.97130 * 2048 --> 0.99431 * * Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 * Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 * * Typical Distribution Ratio, 25% of IDR *****************************************************************************) interface uses nsCore; const JIS_TYPICAL_DISTRIBUTION_RATIO: double = 3.0; //Char to FreqOrder table , JIS_TABLE_SIZE = 4368; JISCharToFreqOrder: array [0..JIS_TABLE_SIZE-1] of PRInt16 = ( 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, // 16 3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, // 32 1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, // 48 2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, // 64 2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, // 80 5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, // 96 1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, // 112 5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, // 128 5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, // 144 5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, // 160 5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, // 176 5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, // 192 5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, // 208 1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, // 224 1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, // 240 1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, // 256 2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, // 272 3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, // 288 3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, // 304 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, // 320 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, // 336 1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, // 352 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, // 368 5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, // 384 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, // 400 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, // 416 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, // 432 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, // 448 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, // 464 5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, // 480 5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, // 496 5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, // 512 4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, // 528 5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, // 544 5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, // 560 5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, // 576 5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, // 592 5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, // 608 5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, // 624 5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, // 640 5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, // 656 5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, // 672 3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, // 688 5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, // 704 5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, // 720 5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, // 736 5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, // 752 5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, // 768 5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, // 784 5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, // 800 5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, // 816 5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, // 832 5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, // 848 5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, // 864 5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, // 880 5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, // 896 5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, // 912 5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, // 928 5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, // 944 5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, // 960 5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, // 976 5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, // 992 5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, // 1008 5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, // 1024 5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, // 1040 5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, // 1056 5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, // 1072 5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, // 1088 5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, // 1104 5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, // 1120 5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, // 1136 5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, // 1152 5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, // 1168 5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, // 1184 5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, // 1200 5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, // 1216 5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, // 1232 5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, // 1248 5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, // 1264 5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, // 1280 5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, // 1296 6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, // 1312 6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, // 1328 6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, // 1344 6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, // 1360 6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, // 1376 6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, // 1392 6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, // 1408 6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, // 1424 4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, // 1440 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, // 1456 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, // 1472 1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, // 1488 1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, // 1504 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, // 1520 3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, // 1536 3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, // 1552 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, // 1568 3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, // 1584 3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, // 1600 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, // 1616 2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, // 1632 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, // 1648 3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, // 1664 1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, // 1680 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, // 1696 1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, // 1712 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, // 1728 2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, // 1744 2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, // 1760 2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, // 1776 2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, // 1792 1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, // 1808 1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, // 1824 1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, // 1840 1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, // 1856 2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, // 1872 1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, // 1888 2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, // 1904 1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, // 1920 1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, // 1936 1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, // 1952 1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, // 1968 1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, // 1984 1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, // 2000 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, // 2016 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, // 2032 1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, // 2048 2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, // 2064 2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, // 2080 2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, // 2096 3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, // 2112 3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, // 2128 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, // 2144 3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, // 2160 1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, // 2176 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, // 2192 2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, // 2208 1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, // 2224 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, // 2240 3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, // 2256 4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, // 2272 2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, // 2288 1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, // 2304 2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, // 2320 1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, // 2336 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, // 2352 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, // 2368 1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, // 2384 2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, // 2400 2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, // 2416 2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, // 2432 3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, // 2448 1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, // 2464 2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, // 2480 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, // 2496 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, // 2512 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, // 2528 1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, // 2544 2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, // 2560 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, // 2576 1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, // 2592 1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, // 2608 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, // 2624 1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, // 2640 1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, // 2656 1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, // 2672 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, // 2688 2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, // 2704 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, // 2720 2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, // 2736 3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, // 2752 2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, // 2768 1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, // 2784 6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, // 2800 1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, // 2816 2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, // 2832 1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, // 2848 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, // 2864 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, // 2880 3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, // 2896 3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, // 2912 1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, // 2928 1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, // 2944 1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, // 2960 1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, // 2976 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, // 2992 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, // 3008 2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, // 3024 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, // 3040 3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, // 3056 2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, // 3072 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, // 3088 1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, // 3104 2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, // 3120 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, // 3136 1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, // 3152 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, // 3168 4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, // 3184 2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, // 3200 1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, // 3216 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, // 3232 1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, // 3248 2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, // 3264 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, // 3280 6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, // 3296 1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, // 3312 1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, // 3328 2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, // 3344 3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, // 3360 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, // 3376 3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, // 3392 1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, // 3408 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, // 3424 1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, // 3440 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, // 3456 3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, // 3472 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, // 3488 2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, // 3504 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, // 3520 4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, // 3536 2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, // 3552 1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, // 3568 1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, // 3584 1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, // 3600 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, // 3616 1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, // 3632 3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, // 3648 1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, // 3664 3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, // 3680 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, // 3696 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, // 3712 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, // 3728 2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, // 3744 1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, // 3760 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, // 3776 1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, // 3792 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, // 3808 1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, // 3824 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, // 3840 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, // 3856 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, // 3872 1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, // 3888 1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, // 3904 2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, // 3920 4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, // 3936 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, // 3952 1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, // 3968 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, // 3984 1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, // 4000 3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, // 4016 1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, // 4032 2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, // 4048 2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, // 4064 1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, // 4080 1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, // 4096 2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, // 4112 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, // 4128 2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, // 4144 1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, // 4160 1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, // 4176 1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, // 4192 1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, // 4208 3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, // 4224 2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, // 4240 2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, // 4256 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, // 4272 3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, // 4288 3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, // 4304 1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, // 4320 2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, // 4336 1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, // 4352 2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137 // 4368 //last 512 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, // 4384 6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, // 4400 6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, // 4416 6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, // 4432 6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, // 4448 4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, // 4464 4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, // 4480 3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, // 4496 3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, // 4512 4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, // 4528 3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, // 4544 6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, // 4560 4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, // 4576 6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, // 4592 6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, // 4608 6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, // 4624 6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, // 4640 6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, // 4656 6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, // 4672 3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, // 4688 3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, // 4704 6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, // 4720 2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, // 4736 4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, // 4752 4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, // 4768 4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, // 4784 6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, // 4800 3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, // 4816 4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, // 4832 4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, // 4848 6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, // 4864 4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, // 4880 6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, // 4896 3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, // 4912 2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, // 4928 4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, // 4944 2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, // 4960 6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, // 4976 4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, // 4992 6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, // 5008 6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, // 5024 6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, // 5040 4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, // 5056 6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, // 5072 2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, // 5088 6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, // 5104 4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, // 5120 6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, // 5136 4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, // 5152 4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, // 5168 6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, // 5184 6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, // 5200 6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, // 5216 3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, // 5232 1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, // 5248 3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, // 5264 3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, // 5280 4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, // 5296 6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, // 5312 3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, // 5328 6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, // 5344 3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, // 5360 3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, // 5376 2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, // 5392 6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, // 5408 6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, // 5424 3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, // 5440 6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, // 5456 3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, // 5472 6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, // 5488 6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, // 5504 6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, // 5520 4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, // 5536 6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, // 5552 4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, // 5568 3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, // 5584 3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, // 5600 6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, // 5616 6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, // 5632 4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, // 5648 6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, // 5664 6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, // 5680 6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, // 5696 6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, // 5712 6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, // 5728 6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, // 5744 4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, // 5760 4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, // 5776 3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, // 5792 6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, // 5808 4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, // 5824 2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, // 5840 6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, // 5856 6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, // 5872 4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, // 5888 2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, // 5904 4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, // 5920 2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, // 5936 4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, // 5952 4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, // 5968 4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, // 5984 6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, // 6000 3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, // 6016 6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, // 6032 3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, // 6048 6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, // 6064 2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, // 6080 3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, // 6096 7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, // 6112 2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, // 6128 3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, // 6144 3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, // 6160 3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, // 6176 3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, // 6192 7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, // 6208 7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, // 6224 7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, // 6240 7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, // 6256 7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, // 6272 4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, // 6288 3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, // 6304 3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, // 6320 4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, // 6336 3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, // 6352 3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, // 6368 7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, // 6384 4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, // 6400 7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, // 6416 7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, // 6432 7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, // 6448 7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, // 6464 7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, // 6480 4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, // 6496 4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, // 6512 7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, // 6528 3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, // 6544 4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, // 6560 7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, // 6576 7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, // 6592 4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, // 6608 3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, // 6624 3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, // 6640 7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, // 6656 4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, // 6672 4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, // 6688 4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, // 6704 4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, // 6720 4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, // 6736 4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, // 6752 7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, // 6768 7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, // 6784 7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, // 6800 7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, // 6816 7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, // 6832 2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, // 6848 3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, // 6864 7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, // 6880 7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, // 6896 3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, // 6912 4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, // 6928 3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, // 6944 3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, // 6960 2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, // 6976 7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, // 6992 7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, // 7008 4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, // 7024 3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, // 7040 3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, // 7056 7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, // 7072 7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, // 7088 7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, // 7104 4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, // 7120 7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, // 7136 2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, // 7152 3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, // 7168 4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, // 7184 7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, // 7200 4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, // 7216 4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, // 7232 7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, // 7248 7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, // 7264 5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, // 7280 7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, // 7296 7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, // 7312 7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, // 7328 7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, // 7344 7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, // 7360 5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, // 7376 5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, // 7392 7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, // 7408 3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, // 7424 7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, // 7440 7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, // 7456 3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, // 7472 7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, // 7488 7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, // 7504 1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, // 7520 3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, // 7536 4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, // 7552 2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, // 7568 3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, // 7584 2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, // 7600 5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, // 7616 4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, // 7632 4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, // 7648 5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, // 7664 7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, // 7680 7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, // 7696 7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, // 7712 7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, // 7728 3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, // 7744 7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, // 7760 3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, // 7776 7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, // 7792 4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, // 7808 7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, // 7824 7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, // 7840 7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, // 7856 7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, // 7872 7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, // 7888 7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, // 7904 7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, // 7920 7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, // 7936 7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, // 7952 7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, // 7968 7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, // 7984 7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, // 8000 8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, // 8016 8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, // 8032 8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, // 8048 8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, // 8064 8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, // 8080 8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, // 8096 8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, // 8112 8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, // 8128 8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, // 8144 8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, // 8160 8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, // 8176 8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, // 8192 8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, // 8208 8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, // 8224 8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, // 8240 8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, // 8256 8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, // 8272 ****************************************************************************************) ); implementation end. ������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/MBUnicodeMultiProber.pas��������������������������������������0000644�0001750�0000144�00000007654�12014201074�023445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: MBUnicodeMultiProber.pas,v 1.2 2007/05/26 13:09:38 ya_nick Exp $ unit MBUnicodeMultiProber; interface uses {$I dbg.inc} nsCore, MultiModelProber; type TMBUnicodeMultiProber = class (TMultiModelProber) public constructor Create; reintroduce; destructor Destroy; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; // function GetConfidence: double; override; end; implementation uses SysUtils, nsCodingStateMachine; {$I '.\mbclass\UTF8LangModel.inc'} {$I '.\mbclass\UCS2BELangModel.inc'} {$I '.\mbclass\UCS2LELangModel.inc'} { TMBUnicodeMultiProber } const NUM_OF_PROBERS = 3; ONE_CHAR_PROB: float = 0.50; {$ifdef DEBUG_chardet} {$endif} constructor TMBUnicodeMultiProber.Create; begin inherited Create; AddCharsetModel(UTF8LangModel); AddCharsetModel(UCS2BELangModel); AddCharsetModel(UCS2LELangModel); end; destructor TMBUnicodeMultiProber.Destroy; begin inherited; end; function TMBUnicodeMultiProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var i: integer; (*do filtering to reduce load to probers*) highbyteBuf: PChar; hptr: PChar; keepNext: Boolean; begin keepNext := TRUE; (*assume previous is not ascii, it will do no harm except add some noise*) highbyteBuf := AllocMem(aLen); try hptr:= highbyteBuf; if hptr = nil then begin Result := mState; exit; end; for i:=0 to Pred(aLen) do begin if (Byte(aBuf[i]) > $80) then begin inc(hptr); hptr^ := aBuf[i]; keepNext:= TRUE; end else begin (*if previous is highbyte, keep this even it is a ASCII*) if keepNext = TRUE then begin inc(hptr); hptr^ := aBuf[i]; keepNext:= FALSE; end; end; end; // inherited HandleData(highbyteBuf, hptr - highbyteBuf); inherited HandleData(aBuf, aLen); finally FreeMem(highbyteBuf, aLen); end; Result := mState; end; //function TMBUnicodeMultiProber.GetConfidence: double; //var // i: integer; // conf, // bestConf: double; //begin // mBestGuess := -1; // bestConf := SURE_NO; // for i := 0 to Pred(mCharsetsCount) do // begin // if (mSMState[i] = psFoundIt) or // (mSMState[i] = psNotMe) then // continue; // // if conf > bestConf then // begin // mBestGuess := i; // bestConf := conf; // end; // end; // Result := bestConf; // if mBestGuess > 0 then // mDetectedCharset := mCodingSM[mBestGuess].GetCharsetID // else // mDetectedCharset := UNKNOWN_CHARSET; //end; end. ������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsGroupProber.pas���������������������������������������������0000644�0001750�0000144�00000014106�12014201074�022250� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsGroupProber.pas,v 1.2 2007/05/26 13:09:38 ya_nick Exp $ unit nsGroupProber; interface uses {$I dbg.inc} nsCore, CustomDetector; type TnsGroupProber = class(TCustomDetector) protected mNumOfProbers: integer; mProbers: array of TCustomDetector; mIsActive: array of Boolean; mBestGuess: integer; mActiveNum: integer; mProberStates: array of eProbingState; public constructor Create; override; destructor Destroy; override; procedure Reset; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; function GetConfidence: float; override; function EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; {$ifdef DEBUG_chardet} procedure DumpStatus(Dump: string); override; {$endif} end; implementation uses SysUtils {$ifdef DEBUG_chardet} ,TypInfo {$endif} ; { TnsGroupProber } constructor TnsGroupProber.Create; begin inherited Create; Self.Reset; end; destructor TnsGroupProber.Destroy; var i: integer; begin for i := 0 to Pred(mNumOfProbers) do if mProbers[i] <> nil then mProbers[i].Free; SetLength(mProbers, 0); SetLength(mProberStates, 0); SetLength(mIsActive, 0); inherited; end; function TnsGroupProber.GetDetectedCharset: eInternalCharsetID; begin (*if we have no answer yet*) if mBestGuess = -1 then begin GetConfidence; (*no charset seems positive*) if mBestGuess = -1 then mBestGuess:= 0; (*we will use default.*) end; Result := mProbers[mBestGuess].GetDetectedCharset; end; function TnsGroupProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var i: integer; begin {$IFDEF DEBUG_chardet} AddDump('Group Prober - HandleData - start'); {$endif} for i:=0 to Pred(mNumOfProbers) do begin if (mProberStates[i] = psNotMe) or (mProberStates[i] = psFoundIt) then continue; mProberStates[i] := mProbers[i].HandleData(aBuf, aLen); if mProberStates[i] = psFoundIt then begin mBestGuess := i; mState := psFoundIt; break; end else if mProberStates[i] = psNotMe then begin mIsActive[i] := FALSE; dec(mActiveNum); if mActiveNum <= 0 then begin mState := psNotMe; break; end; end; end; Result := mState; {$IFDEF DEBUG_chardet} DumpStatus('Group Prober - HandleData - exit'); {$endif} end; procedure TnsGroupProber.Reset; var i: integer; begin mActiveNum := 0; for i := 0 to Pred(mNumOfProbers) do begin if mProbers[i] <> nil then begin mProbers[i].Reset; mIsActive[i] := mProbers[i].Enabled; if mProbers[i].Enabled then begin mProberStates[i] := psDetecting; inc(mActiveNum); end else mProberStates[i] := psNotMe; end else mIsActive[i] := FALSE; end; mBestGuess := -1; mEnabled := (mActiveNum > 0); if mEnabled then mState := psDetecting else mState := psNotMe; end; function TnsGroupProber.GetConfidence: float; var i: integer; bestConf: float; cf: float; begin bestConf := 0.0; case mState of psFoundIt: begin Result := SURE_YES; (*sure yes*) exit; end; psNotMe: begin Result := SURE_NO; (*sure no*) exit; end; else for i := 0 to Pred(mNumOfProbers) do begin if not mIsActive[i] then continue; cf := mProbers[i].GetConfidence; if bestConf < cf then begin bestConf := cf; mBestGuess := i; end; end; end;{case} {$IFDEF DEBUG_chardet} DumpStatus('Group Prober - GetConfidience'); {$endif} Result := bestConf; end; function TnsGroupProber.EnableCharset(Charset: eInternalCharsetID; NewValue: Boolean): Boolean; var i: integer; begin for i := 0 to Pred(mNumOfProbers) do if mProbers[i].GetDetectedCharset = Charset then begin Result := true; mProbers[i].Enabled := NewValue; exit; end; Result := false; end; {$ifdef DEBUG_chardet} procedure TnsGroupProber.DumpStatus(Dump: string); var i: integer; begin inherited DumpStatus(Dump); inherited DumpStatus(Format('%30s - %5s - %5s', ['Prober', 'Active', 'Conf'])); for i := 0 to Pred(mNumOfProbers) do inherited DumpStatus(Format('%30s - %5s - %1.5f', [GetEnumName(TypeInfo(eInternalCharsetID), integer(mProbers[i].GetDetectedCharset)), BoolToStr(mIsActive[i], True), mProbers[i].GetConfidence])); end; {$endif} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsPkg.pas�����������������������������������������������������0000644�0001750�0000144�00000005254�12014201074�020527� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsPkg.pas,v 1.2 2007/05/20 15:46:11 ya_nick Exp $ unit nsPkg; interface uses nsCore; type nsIdxSft = ( eIdxSft4bits = 3 // NOT used // eIdxSft8bits = 2, // eIdxSft16bits = 1 ); nsSftMsk = ( eSftMsk4bits = 7 // NOT used // eSftMsk8bits = 3, // eSftMsk16bits = 1 ); nsBitSft = ( eBitSft4bits = 2 // NOT used // eBitSft8bits = 3, // eBitSft16bits = 4 ); nsUnitMsk = ( eUnitMsk4bits = $0000000F // NOT used // eUnitMsk8bits = $000000FF, // eUnitMsk16bits = $0000FFFF ); nsPkgInt = record idxsft: nsIdxSft; sftmsk: nsSftMsk; bitsft: nsBitSft; unitmsk: nsUnitMsk; data: pPRUint32; end; pnsPkgInt = ^nsPkgInt; function PCK4BITS(a, b, c, d, e, f, g, h: integer): integer; function GETFROMPCK(i: integer; c: pnsPkgInt): integer; implementation function PCK16BITS(a: integer; b: integer): integer; begin Result:= ((b shl 16) or a); end; function PCK8BITS(a, b, c, d: integer): integer; begin Result:= PCK16BITS(((b shl 8) or a), ((d shl 8) or c)); end; function PCK4BITS(a, b, c, d, e, f, g, h: integer): integer; begin Result:= PCK8BITS(((b shl 4) or a), ((d shl 4) or c), ((f shl 4) or e), ((h shl 4) or g)); end; function GETFROMPCK(i: integer; c: pnsPkgInt): integer; begin Result:= (((aPRUint32(c^.data)[i shr integer(c^.idxsft)]) shr (i and integer(c^.sftmsk) shl integer(c^.bitsft))) and integer(c^.unitmsk)); end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/chsdet.dpr����������������������������������������������������0000644�0001750�0000144�00000003033�12014201074�020712� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: chsdet.dpr,v 1.3 2007/05/26 13:07:21 ya_nick Exp $ library chsdet; uses chsdIntf in 'chsdIntf.pas'; exports csd_Reset, csd_HandleData, csd_Done, csd_DataEnd, csd_GetDetectedCharset, csd_GetKnownCharsets, csd_GetAbout; {$R *.res} begin end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/Dump.pas������������������������������������������������������0000644�0001750�0000144�00000000574�12014201074�020352� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit Dump; interface const nl = #13#10; var DumpStr: string; procedure AddDump(Dump: string); procedure ShowDump; implementation uses // Windows; UNIT1; procedure AddDump(Dump: string); begin UNIT1.Form1.Memo1.Lines.Add(Dump); // DumpStr := DumpStr + Dump + nl; end; procedure ShowDump; begin // OutputDebugString(pChar(DumpStr)); // DumpStr := ''; end; end. ������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsHebrewProber.pas��������������������������������������������0000644�0001750�0000144�00000035430�12014201074�022373� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsHebrewProber.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsHebrewProber; interface uses nsCore, CustomDetector; (* This prober doesn't actually recognize a language or a charset.*) (* It is a helper prober for the use of the Hebrew model probers*) type TnsHebrewProber = class(TCustomDetector) protected mFinalCharLogicalScore: PRInt32; mFinalCharVisualScore: PRInt32; (* The two last characters seen in the previous buffer.*) mPrev: char; mBeforePrev: char; (* These probers are owned by the group prober.*) mLogicalProb: TCustomDetector; mVisualProb: TCustomDetector; public constructor Create; override; destructor Destroy; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; function GetDetectedCharset: eInternalCharsetID; override; procedure Reset; override; function GetState: eProbingState; override; procedure SetModelProbers(logicalPrb: TCustomDetector; visualPrb: TCustomDetector); {$ifdef DEBUG_chardet} procedure DumpStatus; override; {$endif} function isFinal(c: char): Boolean; function isNonFinal(c: char): Boolean; function GetConfidence: float; override; end; implementation (* windows-1255 / ISO-8859-8 code points of interest*) const FINAL_KAF = (#$ea); NORMAL_KAF = (#$eb); FINAL_MEM = (#$ed); NORMAL_MEM = (#$ee); FINAL_NUN = (#$ef); NORMAL_NUN = (#$f0); FINAL_PE = (#$f3); NORMAL_PE = (#$f4); FINAL_TSADI = (#$f5); // YaN - Not used // NORMAL_TSADI = (#$f6); (* Minimum Visual vs Logical final letter score difference.*) (* If the difference is below this, don't rely solely on the final letter score distance.*) MIN_FINAL_CHAR_DISTANCE = (5); (* Minimum Visual vs Logical model score difference.*) (* If the difference is below this, don't rely at all on the model score distance.*) MIN_MODEL_DISTANCE = (0.01); var VISUAL_HEBREW_CHARSET, LOGICAL_HEBREW_CHARSET: eInternalCharsetID; { TnsHebrewProber } constructor TnsHebrewProber.Create; begin inherited Create; mLogicalProb := nil; mVisualProb := nil; VISUAL_HEBREW_CHARSET := ISO_8859_8_CHARSET; LOGICAL_HEBREW_CHARSET := WINDOWS_1255_CHARSET; Reset; end; destructor TnsHebrewProber.Destroy; begin inherited; end; {$ifdef DEBUG_chardet} procedure TnsHebrewProber.DumpStatus; begin printf(' HEB: %d - %d [Logical-Visual score]r'#13#10'',mFinalCharLogicalScore,mFinalCharVisualScore); end; {$endif} (* Make the decision: is it Logical or Visual?*) function TnsHebrewProber.GetDetectedCharset: eInternalCharsetID; var finalsub: PRInt32; modelsub: float; begin (* If the final letter score distance is dominant enough, rely on it.*) finalsub := mFinalCharLogicalScore-mFinalCharVisualScore; if finalsub >= MIN_FINAL_CHAR_DISTANCE then begin Result := LOGICAL_HEBREW_CHARSET; exit; end; if finalsub <= -(MIN_FINAL_CHAR_DISTANCE) then begin Result:= VISUAL_HEBREW_CHARSET; exit; end; (* It's not dominant enough, try to rely on the model scores instead.*) modelsub := mLogicalProb.GetConfidence - mVisualProb.GetConfidence; if modelsub > MIN_MODEL_DISTANCE then begin Result := LOGICAL_HEBREW_CHARSET; exit; end; if modelsub < -(MIN_MODEL_DISTANCE) then begin Result := VISUAL_HEBREW_CHARSET; exit; end; (* Still no good, back to final letter distance, maybe it'll save the day.*) if finalsub < 0 then begin Result := VISUAL_HEBREW_CHARSET; exit; end; (* (finalsub > 0 - Logical) or (don't know what to do) default to Logical.*) Result:= LOGICAL_HEBREW_CHARSET; end; function TnsHebrewProber.GetConfidence: float; begin Result := 0.0; end; function TnsHebrewProber.GetState: eProbingState; begin (* Remain active as long as any of the model probers are active.*) if (mLogicalProb.GetState = psNotMe) and (mVisualProb.GetState = psNotMe) then begin Result := psNotMe; exit; end; Result := psDetecting; end; function TnsHebrewProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; (* * Final letter analysis for logical-visual decision. * Look for evidence that the received buffer is either logical Hebrew or * visual Hebrew. * The following cases are checked: * 1) A word longer than 1 letter, ending with a final letter. This is an * indication that the text is laid out "naturally" since the final letter * really appears at the end. +1 for logical score. * 2) A word longer than 1 letter, ending with a Non-Final letter. In normal * Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with * the Non-Final form of that letter. Exceptions to this rule are mentioned * above in isNonFinal(). This is an indication that the text is laid out * backwards. +1 for visual score * 3) A word longer than 1 letter, starting with a final letter. Final letters * should not appear at the beginning of a word. This is an indication that * the text is laid out backwards. +1 for visual score. * * The visual score and logical score are accumulated throughout the text and * are finally checked against each other in GetCharSetName(). * No checking for final letters in the middle of words is done since that case * is not an indication for either Logical or Visual text. * * The input buffer should not contain any white spaces that are not (' ') * or any low-ascii punctuation marks. *) var curPtr: PChar; endPtr: PChar; cur: char; begin (* check prober enabled*) inherited HandleData(aBuf, aLen); (* Both model probers say it's not them. No reason to continue.*) if GetState = psNotMe then begin Result:= psNotMe; exit; end; endPtr := aBuf + aLen; curPtr := aBuf; while curPtr < endPtr do begin cur := curPtr^; if cur = ' ' then begin (* We stand on a space - a word just ended*) if mBeforePrev <> ' ' then begin (* *(curPtr-2) was not a space so prev is not a 1 letter word*) if isFinal(mPrev) then inc(mFinalCharLogicalScore) else (* case (1) [-2:not space][-1:final letter][cur:space]*) if isNonFinal(mPrev) then inc(mFinalCharVisualScore); (* case (2) [-2:not space][-1:Non-Final letter][cur:space]*) end; end else begin (* Not standing on a space*) if (mBeforePrev = ' ') and isFinal(mPrev) and (cur <> ' ') then inc(mFinalCharVisualScore); (* case (3) [-2:space][-1:final letter][cur:not space]*) end; mBeforePrev := mPrev; mPrev := cur; inc(curPtr); end; (* Forever detecting, till the end or until both model probers return psNotMe (handled above).*) Result := psDetecting; end; function TnsHebrewProber.isFinal(c: char): Boolean; begin Result := ((c=FINAL_KAF))or((c=FINAL_MEM))or((c=FINAL_NUN))or((c=FINAL_PE))or((c=FINAL_TSADI)); end; function TnsHebrewProber.isNonFinal(c: char): Boolean; begin Result:= ((c=NORMAL_KAF))or((c=NORMAL_MEM))or((c=NORMAL_NUN))or((c=NORMAL_PE)); (* The normal Tsadi is not a good Non-Final letter due to words like *) (* 'lechotet' (to chat) containing an apostrophe after the tsadi. This *) (* apostrophe is converted to a space in FilterWithoutEnglishLetters causing *) (* the Non-Final tsadi to appear at an end of a word even though this is not *) (* the case in the original text.*) (* The letters Pe and Kaf rarely display a related behavior of not being a *) (* good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for *) (* example legally end with a Non-Final Pe or Kaf. However, the benefit of *) (* these letters as Non-Final letters outweighs the damage since these words *) (* are quite rare.*) end; procedure TnsHebrewProber.Reset; begin mFinalCharLogicalScore := 0; mFinalCharVisualScore := 0; mPrev := ' '; mBeforePrev := ' '; (* mPrev and mBeforePrev are initialized to space in order to simulate a word *) (* delimiter at the beginning of the data*) end; procedure TnsHebrewProber.SetModelProbers(logicalPrb, visualPrb: TCustomDetector); begin mLogicalProb := logicalPrb; mVisualProb := visualPrb; end; (** * ** General ideas of the Hebrew charset recognition ** * * Four main charsets exist in Hebrew: * "ISO-8859-8" - Visual Hebrew * "windows-1255" - Logical Hebrew * "ISO-8859-8-I" - Logical Hebrew * "x-mac-hebrew" - ?? Logical Hebrew ?? * * Both "ISO" charsets use a completely identical set of code points, whereas * "windows-1255" and "x-mac-hebrew" are two different proper supersets of * these code points. windows-1255 defines additional characters in the range * 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific * diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. * x-mac-hebrew defines similar additional code points but with a different * mapping. * * As as an average Hebrew text with no diacritics is concerned, all four * charsets are identical with respect to code points. Meaning that for the * main Hebrew alphabet, all four map the same values to all 27 Hebrew letters * (including final letters). * * The dominant difference between these charsets is their directionality. * "Visual" directionality means that the text is ordered as if the renderer is * not aware of a BIDI rendering algorithm. The renderer sees the text and * draws it from left to right. The text itself when ordered naturally is read * backwards. A buffer of Visual Hebrew generally looks like so: * "[last word of first line spelled backwards] [whole line ordered backwards * and spelled backwards] [first word of first line spelled backwards] * [end of line] [last word of second line] ... etc' " * adding punctuation marks, numbers and English text to visual text is * naturally also "visual" and from left to right. * * "Logical" directionality means the text is ordered "naturally" according to * the order it is read. It is the responsibility of the renderer to display * the text from right to left. A BIDI algorithm is used to place general * punctuation marks, numbers and English text in the text. * * Texts in x-mac-hebrew are almost impossible to find on the Internet. From * what little evidence I could find, it seems that its general directionality * is Logical. * * To sum up all of the above, the Hebrew probing mechanism knows about two * charsets: * Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are * backwards while line order is natural. For charset recognition purposes * the line order is unimportant (In fact, for this implementation, even * word order is unimportant). * Logical Hebrew - "windows-1255" - normal, naturally ordered text. * * "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be * specifically identified. * "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew * that contain special punctuation marks or diacritics is displayed with * some unconverted characters showing as question marks. This problem might * be corrected using another model prober for x-mac-hebrew. Due to the fact * that x-mac-hebrew texts are so rare, writing another model prober isn't * worth the effort and performance hit. * * *** The Prober *** * * The prober is divided between two nsSBCharSetProbers and an nsHebrewProber, * all of which are managed, created, fed data, inquired and deleted by the * nsSBCSGroupProber. The two nsSBCharSetProbers identify that the text is in * fact some kind of Hebrew, Logical or Visual. The final decision about which * one is it is made by the nsHebrewProber by combining final-letter scores * with the scores of the two nsSBCharSetProbers to produce a final answer. * * The nsSBCSGroupProber is responsible for stripping the original text of HTML * tags, English characters, numbers, low-ASCII punctuation characters, spaces * and new lines. It reduces any sequence of such characters to a single space. * The buffer fed to each prober in the SBCS group prober is pure text in * high-ASCII. * The two nsSBCharSetProbers (model probers) share the same language model: * Win1255Model. * The first nsSBCharSetProber uses the model normally as any other * nsSBCharSetProber does, to recognize windows-1255, upon which this model was * built. The second nsSBCharSetProber is told to make the pair-of-letter * lookup in the language model backwards. This in practice exactly simulates * a visual Hebrew model using the windows-1255 logical Hebrew model. * * The nsHebrewProber is not using any language model. All it does is look for * final-letter evidence suggesting the text is either logical Hebrew or visual * Hebrew. Disjointed from the model probers, the results of the nsHebrewProber * alone are meaningless. nsHebrewProber always returns 0.00 as confidence * since it never identifies a charset by itself. Instead, the pointer to the * nsHebrewProber is passed to the model probers as a helper "Name Prober". * When the Group prober receives a positive identification from any prober, * it asks for the name of the charset identified. If the prober queried is a * Hebrew model prober, the model prober forwards the call to the * nsHebrewProber to make the final decision. In the nsHebrewProber, the * decision is made according to the final-letters scores maintained and Both * model probers scores. The answer is returned in the form of the name of the * charset identified, either "windows-1255" or "ISO-8859-8". * *) end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/chsdet.lpi����������������������������������������������������0000644�0001750�0000144�00000012243�11670731366�020737� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="/"/> <Version Value="6"/> <General> <Flags> <MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasTitleStatement Value="False"/> <Runnable Value="False"/> </Flags> <MainUnit Value="0"/> <IconPath Value="./"/> <TargetFileExt Value=""/> <UseAppBundle Value="False"/> <ActiveEditorIndexAtStart Value="0"/> </General> <VersionInfo> <UseVersionInfo Value="True"/> <ProjectVersion Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="10"> <Unit0> <Filename Value="chsdet.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="chsdet"/> <CursorPos X="9" Y="38"/> <TopLine Value="1"/> <EditorIndex Value="0"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit0> <Unit1> <Filename Value=""/> <UsageCount Value="10"/> </Unit1> <Unit2> <Filename Value="nsSBCharSetProber.pas"/> <UnitName Value="nsSBCharSetProber"/> <CursorPos X="1" Y="24"/> <TopLine Value="12"/> <EditorIndex Value="2"/> <UsageCount Value="10"/> <Loaded Value="True"/> </Unit2> <Unit3> <Filename Value="sbseq/LangHebrewModel.pas"/> <IsPartOfProject Value="True"/> <UsageCount Value="20"/> <SyntaxHighlighter Value="Text"/> </Unit3> <Unit4> <Filename Value="sbseq/LangBulgarianModel.pas"/> <IsPartOfProject Value="True"/> <UsageCount Value="20"/> <SyntaxHighlighter Value="Text"/> </Unit4> <Unit5> <Filename Value="sbseq/LangCyrillicModel.pas"/> <IsPartOfProject Value="True"/> <UsageCount Value="20"/> <SyntaxHighlighter Value="Text"/> </Unit5> <Unit6> <Filename Value="sbseq/LangGreekModel.pas"/> <IsPartOfProject Value="True"/> <UsageCount Value="20"/> <SyntaxHighlighter Value="Text"/> </Unit6> <Unit7> <Filename Value="chsdIntf.pas"/> <UnitName Value="chsdIntf"/> <CursorPos X="13" Y="31"/> <TopLine Value="9"/> <EditorIndex Value="1"/> <UsageCount Value="10"/> <Loaded Value="True"/> </Unit7> <Unit8> <Filename Value="nsCore.pas"/> <UnitName Value="nsCore"/> <CursorPos X="1" Y="1"/> <TopLine Value="17"/> <UsageCount Value="10"/> </Unit8> <Unit9> <Filename Value="dbg.inc"/> <CursorPos X="1" Y="1"/> <TopLine Value="1"/> <UsageCount Value="10"/> </Unit9> </Units> <JumpHistory Count="6" HistoryIndex="5"> <Position1> <Filename Value="nsSBCharSetProber.pas"/> <Caret Line="46" Column="19" TopLine="24"/> </Position1> <Position2> <Filename Value="nsSBCharSetProber.pas"/> <Caret Line="28" Column="10" TopLine="12"/> </Position2> <Position3> <Filename Value="nsSBCharSetProber.pas"/> <Caret Line="24" Column="1" TopLine="24"/> </Position3> <Position4> <Filename Value="nsSBCharSetProber.pas"/> <Caret Line="46" Column="19" TopLine="24"/> </Position4> <Position5> <Filename Value="chsdet.lpr"/> <Caret Line="35" Column="17" TopLine="1"/> </Position5> <Position6> <Filename Value="chsdet.lpr"/> <Caret Line="32" Column="12" TopLine="1"/> </Position6> </JumpHistory> </ProjectOptions> <CompilerOptions> <Version Value="5"/> <SearchPaths> <UnitOutputDirectory Value="/home/yan/chsdet/dcu"/> </SearchPaths> <Parsing> <SyntaxOptions> <DelphiCompat Value="True"/> </SyntaxOptions> </Parsing> <CodeGeneration> <SmartLinkUnit Value="True"/> <Generate Value="Faster"/> <TargetProcessor Value="3"/> <TargetCPU Value="i386"/> <TargetOS Value="Linux"/> </CodeGeneration> <Linking> <LinkSmart Value="True"/> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/nsSBCharSetProber.pas�����������������������������������������0000644�0001750�0000144�00000016220�12014201074�022731� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: nsSBCharSetProber.pas,v 1.3 2007/05/26 13:09:38 ya_nick Exp $ unit nsSBCharSetProber; interface uses {$I dbg.inc} nsCore, CustomDetector; const NUMBER_OF_SEQ_CAT = 4; type SequenceModel = record charToOrderMap: PChar; (* [256] table use to find a char's order*) precedenceMatrix: PChar; (* [SAMPLE_SIZE][SAMPLE_SIZE]; table to find a 2-char sequence's frequency*) mTypicalPositiveRatio: float; (* = freqSeqs / totalSeqs *) keepEnglishLetter: Boolean; (* says if this script contains English characters (not implemented)*) CharsetID: eInternalCharsetID; end; TnsSingleByteCharSetProber = class(TCustomDetector) protected mModel: SequenceModel; mReversed: Boolean; (* TRUE if we need to reverse every pair in the model lookup*) mLastOrder: byte; (*char order of last character*) mTotalSeqs: PRUint32; mSeqCounters: array [0..Pred(NUMBER_OF_SEQ_CAT)] of PRUint32; mTotalChar: PRUint32; (*characters that fall in our sampling range*) mFreqChar: PRUint32; (* Optional auxiliary prober for name decision. created and destroyed by the GroupProber*) mNameProber: TCustomDetector; public constructor Create(model: SequenceModel; reversed: Boolean = FALSE; nameProber: TCustomDetector = nil); reintroduce; destructor Destroy; override; function GetDetectedCharset: eInternalCharsetID; override; function HandleData(aBuf: PChar; aLen: integer): eProbingState; override; procedure Reset; override; function GetConfidence: float; override; (* This feature is not implemented yet. any current language model*) (* contain this parameter as PR_FALSE. No one is looking at this*) (* parameter or calling this method.*) (* Moreover, the nsSBCSGroupProber which calls the HandleData of this*) (* prober has a hard-coded call to FilterWithoutEnglishLetters which gets rid*) (* of the English letters.*) function KeepEnglishLetters: Boolean; virtual; (* (not implemented)*) end; implementation {$ifdef DEBUG_chardet} uses TypInfo, SysUtils; {$endif} const SAMPLE_SIZE: byte = 64; SB_ENOUGH_REL_THRESHOLD = 1024; POSITIVE_SHORTCUT_THRESHOLD = SHORTCUT_THRESHOLD; NEGATIVE_SHORTCUT_THRESHOLD = 1 - POSITIVE_SHORTCUT_THRESHOLD; SYMBOL_CAT_ORDER: byte = 250; POSITIVE_CAT = (NUMBER_OF_SEQ_CAT-1); (*#define NEGATIVE_APPROACH 1*) {$ifdef NEGATIVE_APPROACH} NEGATIVE_CAT = 0; {$endif} { TnsSingleByteCharSetProber } constructor TnsSingleByteCharSetProber.Create(model: SequenceModel; reversed: Boolean = FALSE; nameProber: TCustomDetector = nil); begin inherited Create; mModel := model; mReversed := reversed; mNameProber := nameProber; Reset; end; destructor TnsSingleByteCharSetProber.Destroy; begin inherited; end; function TnsSingleByteCharSetProber.GetDetectedCharset: eInternalCharsetID; begin if mNameProber = nil then begin Result := mModel.CharsetID; exit; end; Result := mNameProber.GetDetectedCharset; end; (*#define NEGATIVE_APPROACH 1*) function TnsSingleByteCharSetProber.GetConfidence: float; var r: float; begin {$ifdef NEGATIVE_APPROACH} if mTotalSeqs > 0 then if mTotalSeqs > mSeqCounters[NEGATIVE_CAT] * 10 then begin Result := (mTotalSeqs-mSeqCounters[NEGATIVE_CAT] * 10) / mTotalSeqs * mFreqChar / mTotalChar; exit; end; Result := SURE_NO; {$else} (*POSITIVE_APPROACH*) if mTotalSeqs > 0 then begin r := (1.0) * mSeqCounters[POSITIVE_CAT] / mTotalSeqs / mModel.mTypicalPositiveRatio; r := r * mFreqChar / mTotalChar; if r >= 1.0 then r := SURE_YES; Result := r; exit; end; Result := SURE_NO; {$endif} end; function TnsSingleByteCharSetProber.HandleData(aBuf: PChar; aLen: integer): eProbingState; var order: byte; i: integer; cf: float; begin Result := inherited HandleData(aBuf, aLen); if Result = psNotMe then exit; // TODO - move here call to FilterWithoutEnglishLetters from nsSBCSGroupProber.pas // if not mModel.keepEnglishLetter then ... for i := 0 to Pred(aLen) do begin order := byte(mModel.charToOrderMap[byte(aBuf[i])]); if order < SYMBOL_CAT_ORDER then inc(mTotalChar); if order < SAMPLE_SIZE then begin inc(mFreqChar); if mLastOrder < SAMPLE_SIZE then begin inc(mTotalSeqs); {$ifdef DEBUG_chardet} //if ((mLastOrder * SAMPLE_SIZE + order) >= 4096) then AddDump(Format('oredr %4d for byte %4d last order %4d'+#10#13+ 'array index %4d array high %8d'+#10#13+ 'LangModel %s', [order,byte(aBuf[i]),mLastOrder, (mLastOrder * SAMPLE_SIZE + order),4096, getEnumName(TypeInfo(eInternalCharsetID), integer(mModel.CharsetID))])); {$endif} if not mReversed then inc(mSeqCounters[cardinal(mModel.precedenceMatrix[mLastOrder * SAMPLE_SIZE + order])]) else inc(mSeqCounters[cardinal(mModel.precedenceMatrix[order * SAMPLE_SIZE + mLastOrder])]); (* reverse the order of the letters in the lookup*) end; end; mLastOrder:= order; end; if mState = psDetecting then if mTotalSeqs > SB_ENOUGH_REL_THRESHOLD then begin cf := GetConfidence; if cf > POSITIVE_SHORTCUT_THRESHOLD then mState:= psFoundIt else if cf < NEGATIVE_SHORTCUT_THRESHOLD then mState:= psNotMe; end; Result := mState; end; function TnsSingleByteCharSetProber.KeepEnglishLetters: Boolean; begin Result := mModel.keepEnglishLetter; end; procedure TnsSingleByteCharSetProber.Reset; var i: integer; begin if mEnabled then mState := psDetecting else mState := psNotMe; mLastOrder := 255; for i := 0 to Pred(NUMBER_OF_SEQ_CAT) do mSeqCounters[i] := 0; mTotalSeqs := 0; mTotalChar := 0; mFreqChar := 0; end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�020410� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/HZLangModel.inc���������������������������������������0000644�0001750�0000144�00000003670�12014201074�023163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const HZCharLenTable: array [0..5] of PRUint32 = (0, 0, 0, 0, 0, 0); HZ_cls: array [0..255] of Byte = ( 1,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,0,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,4,0,5,2,0, // 78 - 7f 1,1,1,1,1,1,1,1, // 80 - 87 1,1,1,1,1,1,1,1, // 88 - 8f 1,1,1,1,1,1,1,1, // 90 - 97 1,1,1,1,1,1,1,1, // 98 - 9f 1,1,1,1,1,1,1,1, // a0 - a7 1,1,1,1,1,1,1,1, // a8 - af 1,1,1,1,1,1,1,1, // b0 - b7 1,1,1,1,1,1,1,1, // b8 - bf 1,1,1,1,1,1,1,1, // c0 - c7 1,1,1,1,1,1,1,1, // c8 - cf 1,1,1,1,1,1,1,1, // d0 - d7 1,1,1,1,1,1,1,1, // d8 - df 1,1,1,1,1,1,1,1, // e0 - e7 1,1,1,1,1,1,1,1, // e8 - ef 1,1,1,1,1,1,1,1, // f0 - f7 1,1,1,1,1,1,1,1 // f8 - ff ); HZ_st: array [0..47] of Byte = ( Byte(eStart),Byte(eError), 3,Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eStart),Byte(eStart), 4,Byte(eError),//10-17 5,Byte(eError), 6,Byte(eError), 5, 5, 4,Byte(eError),//18-1f 4,Byte(eError), 4, 4, 4,Byte(eError), 4,Byte(eError),//20-27 4,Byte(eItsMe),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart)//28-2f ); HZSMModel: SMModel = ( classTable: @HZ_cls; classFactor: 6; stateTable: @HZ_st; charLenTable: @HZCharLenTable; CharsetID: HZ_GB_2312_CHARSET; );������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/EUCTWLangModel.inc������������������������������������0000644�0001750�0000144�00000004735�12014201074�023534� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCTWCharLenTable: array [0..6] of Byte = (0, 0, 1, 2, 2, 2, 3); //PCK4BITS(0,2,2,2,2,2,2,2, // 00 - 07 EUCTW_cls: array [0..255] of Byte = ( 2,2,2,2,2,2,2,2, // 00 - 07 2,2,2,2,2,2,0,0, // 08 - 0f 2,2,2,2,2,2,2,2, // 10 - 17 2,2,2,0,2,2,2,2, // 18 - 1f 2,2,2,2,2,2,2,2, // 20 - 27 2,2,2,2,2,2,2,2, // 28 - 2f 2,2,2,2,2,2,2,2, // 30 - 37 2,2,2,2,2,2,2,2, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,2, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,6,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,3,4,4,4,4,4,4, // a0 - a7 5,5,1,1,1,1,1,1, // a8 - af 1,1,1,1,1,1,1,1, // b0 - b7 1,1,1,1,1,1,1,1, // b8 - bf 1,1,3,1,3,3,3,3, // c0 - c7 3,3,3,3,3,3,3,3, // c8 - cf 3,3,3,3,3,3,3,3, // d0 - d7 3,3,3,3,3,3,3,3, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,3,3,3, // e8 - ef 3,3,3,3,3,3,3,3, // f0 - f7 3,3,3,3,3,3,3,0 // f8 - ff ); EUCTW_st: array [0..47] of Byte = ( Byte(eError),Byte(eError),Byte(eStart), 3, 3, 3, 4,Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eStart),Byte(eError),//10-17 Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//18-1f 5,Byte(eError),Byte(eError),Byte(eError),Byte(eStart),Byte(eError),Byte(eStart),Byte(eStart),//20-27 Byte(eStart),Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //28-2f ); EUCTWLangModel: SMModel = ( classTable: @EUCTW_cls; classFactor: 7; stateTable: @EUCTW_st; charLenTable: @EUCTWCharLenTable; CharsetID: X_EUC_TW_CHARSET; ); // EUCTWLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCTW_cls; // ); // classFactor: 7; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCTW_st; // ); // charLenTable: @EUCTWCharLenTable; // CharsetID: X_EUC_TW_CHARSET; // ); �����������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/UCS2BELangModel.inc�����������������������������������0000644�0001750�0000144�00000004107�12014201074�023561� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const UCS2BECharLenTable: array [0..5] of Byte = (2, 2, 2, 2, 2, 2); UCS2BE_cls: array [Char] of Byte = ( 0,0,0,0,0,0,0,0, // 00 - 07 //allow 0x00 as a legal value 0,0,1,0,0,2,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,3,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,3,3,3,3,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,0,0,0,0,0,0,0, // a0 - a7 0,0,0,0,0,0,0,0, // a8 - af 0,0,0,0,0,0,0,0, // b0 - b7 0,0,0,0,0,0,0,0, // b8 - bf 0,0,0,0,0,0,0,0, // c0 - c7 0,0,0,0,0,0,0,0, // c8 - cf 0,0,0,0,0,0,0,0, // d0 - d7 0,0,0,0,0,0,0,0, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,4,5 // f8 - ff ); UCS2BE_st: array [0..55] of Byte = ( 5, 7, 7,integer(eError), 4, 3,integer(eError),integer(eError),//00-07 integer(eError),integer(eError),integer(eError),integer(eError),integer(eItsMe),integer(eItsMe),integer(eItsMe),integer(eItsMe),//08-0f integer(eItsMe),integer(eItsMe), 6, 6, 6, 6,integer(eError),integer(eError),//10-17 6, 6, 6, 6, 6,integer(eItsMe), 6, 6,//18-1f 6, 6, 6, 6, 5, 7, 7,integer(eError),//20-27 5, 8, 6, 6,integer(eError), 6, 6, 6,//28-2f 6, 6, 6, 6,integer(eError),integer(eError),integer(eStart),integer(eStart) //30-37 ); UCS2BELangModel: SMModel = ( classTable: @UCS2BE_cls; classFactor: 6; stateTable: @UCS2BE_st; charLenTable: @UCS2BECharLenTable; CharsetID: UTF16_BE_CHARSET; );���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/EUCJPLangModel.inc������������������������������������0000644�0001750�0000144�00000004533�12014201074�023507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCJPCharLenTable: array [0..5] of byte = (2, 2, 2, 3, 1, 0); //PCK4BITS(5,4,4,4,4,4,4,4), // 00 - 07 EUCJP_cls: array [0..255] of byte = ( 4,4,4,4,4,4,4,4, // 00 - 07 4,4,4,4,4,4,5,5, // 08 - 0f 4,4,4,4,4,4,4,4, // 10 - 17 4,4,4,5,4,4,4,4, // 18 - 1f 4,4,4,4,4,4,4,4, // 20 - 27 4,4,4,4,4,4,4,4, // 28 - 2f 4,4,4,4,4,4,4,4, // 30 - 37 4,4,4,4,4,4,4,4, // 38 - 3f 4,4,4,4,4,4,4,4, // 40 - 47 4,4,4,4,4,4,4,4, // 48 - 4f 4,4,4,4,4,4,4,4, // 50 - 57 4,4,4,4,4,4,4,4, // 58 - 5f 4,4,4,4,4,4,4,4, // 60 - 67 4,4,4,4,4,4,4,4, // 68 - 6f 4,4,4,4,4,4,4,4, // 70 - 77 4,4,4,4,4,4,4,4, // 78 - 7f 5,5,5,5,5,5,5,5, // 80 - 87 5,5,5,5,5,5,1,3, // 88 - 8f 5,5,5,5,5,5,5,5, // 90 - 97 5,5,5,5,5,5,5,5, // 98 - 9f 5,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,0,5 // f8 - ff ); EUCJP_st: array [0..39] of byte = ( 3, 4, 3, 5,byte(eStart),byte(eError),byte(eError),byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eStart),byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError),//10-17 byte(eError),byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError), 3,byte(eError),//18-1f 3,byte(eError),byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //20-27 ); EUCJPLangModel: SMModel = ( classTable: @EUCJP_cls; classFactor: 6; stateTable: @EUCJP_st; charLenTable: @EUCJPCharLenTable; CharsetID: EUC_JP_CHARSET; ); // EUCJPLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCJP_cls; // ); // classFactor: 6; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCJP_st; // ); // charLenTable: @EUCJPCharLenTable; // CharsetID: EUC_JP_CHARSET; // ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/UTF8LangModel.inc�������������������������������������0000644�0001750�0000144�00000010154�12014201074�023363� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const UTF8_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 //allow 0x00 as a legal value 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 1,1,1,1,1,1,1,1, // 40 - 47 1,1,1,1,1,1,1,1, // 48 - 4f 1,1,1,1,1,1,1,1, // 50 - 57 1,1,1,1,1,1,1,1, // 58 - 5f 1,1,1,1,1,1,1,1, // 60 - 67 1,1,1,1,1,1,1,1, // 68 - 6f 1,1,1,1,1,1,1,1, // 70 - 77 1,1,1,1,1,1,1,1, // 78 - 7f 2,2,2,2,3,3,3,3, // 80 - 87 4,4,4,4,4,4,4,4, // 88 - 8f 4,4,4,4,4,4,4,4, // 90 - 97 4,4,4,4,4,4,4,4, // 98 - 9f 5,5,5,5,5,5,5,5, // a0 - a7 5,5,5,5,5,5,5,5, // a8 - af 5,5,5,5,5,5,5,5, // b0 - b7 5,5,5,5,5,5,5,5, // b8 - bf 0,0,6,6,6,6,6,6, // c0 - c7 6,6,6,6,6,6,6,6, // c8 - cf 6,6,6,6,6,6,6,6, // d0 - d7 6,6,6,6,6,6,6,6, // d8 - df 7,8,8,8,8,8,8,8, // e0 - e7 8,8,8,8,8,9,8,8, // e8 - ef 10,11,11,11,11,11,11,11, // f0 - f7 12,13,13,13,14,15,0,0 // f8 - ff ); UTF8CharLenTable: array [0..15] of byte = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6 ); UTF8_st: array [0..207] of byte = ( byte(eError),byte(eStart),byte(eError),byte(eError),byte(eError),byte(eError), 12, 10,//00-07 9, 11, 8, 7, 6, 5, 4, 3,//08-0f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//10-17 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//18-1f byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),//20-27 byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),//28-2f byte(eError),byte(eError), 5, 5, 5, 5,byte(eError),byte(eError),//30-37 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//38-3f byte(eError),byte(eError),byte(eError), 5, 5, 5,byte(eError),byte(eError),//40-47 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//48-4f byte(eError),byte(eError), 7, 7, 7, 7,byte(eError),byte(eError),//50-57 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//58-5f byte(eError),byte(eError),byte(eError),byte(eError), 7, 7,byte(eError),byte(eError),//60-67 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//68-6f byte(eError),byte(eError), 9, 9, 9, 9,byte(eError),byte(eError),//70-77 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//78-7f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), 9,byte(eError),byte(eError),//80-87 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//88-8f byte(eError),byte(eError), 12, 12, 12, 12,byte(eError),byte(eError),//90-97 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//98-9f byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), 12,byte(eError),byte(eError),//a0-a7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//a8-af byte(eError),byte(eError), 12, 12, 12,byte(eError),byte(eError),byte(eError),//b0-b7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),//b8-bf byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eError),byte(eError),//c0-c7 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError) //c8-cf ); UTF8LangModel: SMModel = ( classTable: @UTF8_cls; classFactor: 16; stateTable: @UTF8_st; charLenTable: @UTF8CharLenTable; CharsetID: UTF8_CHARSET; ); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/ISO2022JPLangModel.inc��������������������������������0000644�0001750�0000144�00000004643�12014201074�024035� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const ISO2022JPCharLenTable: array [0..7] of PRUint32 = (0, 0, 0, 0, 0, 0, 0, 0); ISO2022JP_cls: array [Char] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,2,2, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,7,0,0,0, // 20 - 27 3,0,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 6,0,4,0,8,0,0,0, // 40 - 47 0,9,5,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022JP_st: array [0..71] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),//00-07 Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//08-0f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//10-17 Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),//18-1f Byte(eError), 5,Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),Byte(eError),//20-27 Byte(eError),Byte(eError),Byte(eError), 6,Byte(eItsMe),Byte(eError),Byte(eItsMe),Byte(eError),//28-2f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),//30-37 Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//38-3f Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eStart),Byte(eStart)//40-47 ); ISO2022JPSMModel: SMModel = ( classTable: @ISO2022JP_cls; classFactor: 10; stateTable: @ISO2022JP_st; charLenTable: @ISO2022JPCharLenTable; CharsetID: ISO_2022_JP_CHARSET; ); ���������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/UCS2LELangModel.inc�����������������������������������0000644�0001750�0000144�00000004024�12014201074�023571� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const UCS2LECharLenTable: array [0..5] of PRUint32 = (2, 2, 2, 2, 2, 2); UCS2LE_cls: array [Char] of Byte = ( 0,0,0,0,0,0,0,0, // 00 - 07 //allow 0x00 as a legal value 0,0,1,0,0,2,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,3,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,3,3,3,3,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,0,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,0,0,0,0,0,0,0, // a0 - a7 0,0,0,0,0,0,0,0, // a8 - af 0,0,0,0,0,0,0,0, // b0 - b7 0,0,0,0,0,0,0,0, // b8 - bf 0,0,0,0,0,0,0,0, // c0 - c7 0,0,0,0,0,0,0,0, // c8 - cf 0,0,0,0,0,0,0,0, // d0 - d7 0,0,0,0,0,0,0,0, // d8 - df 0,0,0,0,0,0,0,0, // e0 - e7 0,0,0,0,0,0,0,0, // e8 - ef 0,0,0,0,0,0,0,0, // f0 - f7 0,0,0,0,0,0,4,5 // f8 - ff ); UCS2LE_st: array [0..55] of Byte = ( 6, 6, 7, 6, 4, 3,integer(eError),integer(eError),//00-07 integer(eError),integer(eError),integer(eError),integer(eError),integer(eItsMe),integer(eItsMe),integer(eItsMe),integer(eItsMe),//08-0f integer(eItsMe),integer(eItsMe), 5, 5, 5,integer(eError),integer(eItsMe),integer(eError),//10-17 5, 5, 5,integer(eError), 5,integer(eError), 6, 6,//18-1f 7, 6, 8, 8, 5, 5, 5,integer(eError),//20-27 5, 5, 5,integer(eError),integer(eError),integer(eError), 5, 5,//28-2f 5, 5, 5,integer(eError), 5,integer(eError),integer(eStart),integer(eStart) //30-37 ); UCS2LELangModel: SMModel = ( classTable: @UCS2LE_cls; classFactor: 6; stateTable: @UCS2LE_st; charLenTable: @UCS2LECharLenTable; CharsetID: UTF16_LE_CHARSET; ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/EUCKRLangModel.inc������������������������������������0000644�0001750�0000144�00000004026�12014201074�023507� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const EUCKRCharLenTable: array [0..3] of byte = (0, 1, 2, 0); //PCK4BITS(0,1,1,1,1,1,1,1, // 00 - 07 EUCKR_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 1,1,1,1,1,1,1,1, // 40 - 47 1,1,1,1,1,1,1,1, // 48 - 4f 1,1,1,1,1,1,1,1, // 50 - 57 1,1,1,1,1,1,1,1, // 58 - 5f 1,1,1,1,1,1,1,1, // 60 - 67 1,1,1,1,1,1,1,1, // 68 - 6f 1,1,1,1,1,1,1,1, // 70 - 77 1,1,1,1,1,1,1,1, // 78 - 7f 0,0,0,0,0,0,0,0, // 80 - 87 0,0,0,0,0,0,0,0, // 88 - 8f 0,0,0,0,0,0,0,0, // 90 - 97 0,0,0,0,0,0,0,0, // 98 - 9f 0,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,3,3,3, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,3,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,0 // f8 - ff ); EUCKR_st: array [0..15] of byte = ( byte(eError),byte(eStart), 3,byte(eError),byte(eError),byte(eError),byte(eError),byte(eError), //00-07 byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),byte(eStart) //08-0f ); EUCKRLangModel: SMModel =( classTable: @EUCKR_cls; classFactor: 4; stateTable: @EUCKR_st; charLenTable: @EUCKRCharLenTable; CharsetID: EUC_KR_CHARSET; ); // EUCKRLangModel: SMModel =( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCKR_cls; // ); // classFactor: 4; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @EUCKR_st; // ); // charLenTable: @EUCKRCharLenTable; // CharsetID: EUC_KR_CHARSET; // ); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/ISO2022CNLangModel.inc��������������������������������0000644�0001750�0000144�00000004460�12014201074�024021� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const ISO2022CNCharLenTable: array [0..8] of PRUint32 = (0, 0, 0, 0, 0, 0, 0, 0, 0); ISO2022CN_cls: array [Char] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,0,0,0,0, // 20 - 27 0,3,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,4,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022CN_st: array [0..63] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),//00-07 Byte(eStart),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//08-0f Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//10-17 Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),//18-1f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//20-27 5, 6,Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//28-2f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError),Byte(eError),//30-37 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eError),Byte(eStart) //38-3f ); ISO2022CNSMModel: SMModel = ( classTable: @ISO2022CN_cls; classFactor: 9; stateTable: @ISO2022CN_st; charLenTable: @ISO2022CNCharLenTable; CharsetID: ISO_2022_CN_CHARSET; );����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/ISO2022KRLangModel.inc��������������������������������0000644�0001750�0000144�00000003726�12014201074�024041� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const ISO2022KRCharLenTable: array [0..5] of PRUint32 = (0, 0, 0, 0, 0, 0); ISO2022KR_cls: array [Char] of Byte = ( 2,0,0,0,0,0,0,0, // 00 - 07 0,0,0,0,0,0,0,0, // 08 - 0f 0,0,0,0,0,0,0,0, // 10 - 17 0,0,0,1,0,0,0,0, // 18 - 1f 0,0,0,0,3,0,0,0, // 20 - 27 0,4,0,0,0,0,0,0, // 28 - 2f 0,0,0,0,0,0,0,0, // 30 - 37 0,0,0,0,0,0,0,0, // 38 - 3f 0,0,0,5,0,0,0,0, // 40 - 47 0,0,0,0,0,0,0,0, // 48 - 4f 0,0,0,0,0,0,0,0, // 50 - 57 0,0,0,0,0,0,0,0, // 58 - 5f 0,0,0,0,0,0,0,0, // 60 - 67 0,0,0,0,0,0,0,0, // 68 - 6f 0,0,0,0,0,0,0,0, // 70 - 77 0,0,0,0,0,0,0,0, // 78 - 7f 2,2,2,2,2,2,2,2, // 80 - 87 2,2,2,2,2,2,2,2, // 88 - 8f 2,2,2,2,2,2,2,2, // 90 - 97 2,2,2,2,2,2,2,2, // 98 - 9f 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 2,2,2,2,2,2,2,2, // e0 - e7 2,2,2,2,2,2,2,2, // e8 - ef 2,2,2,2,2,2,2,2, // f0 - f7 2,2,2,2,2,2,2,2 // f8 - ff ); ISO2022KR_st: array [0..39] of Byte = ( Byte(eStart), 3,Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),//08-0f Byte(eItsMe),Byte(eItsMe),Byte(eError),Byte(eError),Byte(eError), 4,Byte(eError),Byte(eError),//10-17 Byte(eError),Byte(eError),Byte(eError),Byte(eError), 5,Byte(eError),Byte(eError),Byte(eError),//18-1f Byte(eError),Byte(eError),Byte(eError),Byte(eItsMe),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //20-27 ); ISO2022KRSMModel: SMModel = ( classTable: @ISO2022KR_cls; classFactor: 6; stateTable: @ISO2022KR_st; charLenTable: @ISO2022KRCharLenTable; CharsetID: ISO_2022_KR_CHARSET; ); ������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/SJISLangModel.inc�������������������������������������0000644�0001750�0000144�00000004434�12014201074�023411� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const SJIS_cls: array [0..255] of byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,1, // 78 - 7f 3,3,3,3,3,3,3,3, // 80 - 87 3,3,3,3,3,3,3,3, // 88 - 8f 3,3,3,3,3,3,3,3, // 90 - 97 3,3,3,3,3,3,3,3, // 98 - 9f //0xa0 is illegal in sjis encoding, but some pages does //contain such byte. We need to be more error forgiven. 2,2,2,2,2,2,2,2, // a0 - a7 2,2,2,2,2,2,2,2, // a8 - af 2,2,2,2,2,2,2,2, // b0 - b7 2,2,2,2,2,2,2,2, // b8 - bf 2,2,2,2,2,2,2,2, // c0 - c7 2,2,2,2,2,2,2,2, // c8 - cf 2,2,2,2,2,2,2,2, // d0 - d7 2,2,2,2,2,2,2,2, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,4,4,4, // e8 - ef 4,4,4,4,4,4,4,4, // f0 - f7 4,4,4,4,4,0,0,0 // f8 - ff ); SJIS_st: array [0..23] of byte = ( byte(eError),byte(eStart),byte(eStart), 3,byte(eError),byte(eError),byte(eError),byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //10-17 ); SJISCharLenTable: array [0..5] of byte = (0, 1, 1, 2, 0, 0); SJISLangModel: SMModel = ( classTable: @SJIS_cls; classFactor: 6; stateTable: @SJIS_st; charLenTable: @SJISCharLenTable; CharsetID: SHIFT_JIS_CHARSET; ); // SJISLangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @SJIS_cls; // ); // classFactor: 6; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @SJIS_st; // ); // charLenTable: @SJISCharLenTable; // CharsetID: SHIFT_JIS_CHARSET; // ); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/GB18030LangModel.inc����������������������������������0000644�0001750�0000144�00000004710�12014201074�023522� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const GB18030CharLenTable: array [0..6] of byte = (0, 1, 1, 1, 1, 1, 2); GB18030_cls: array [0..255] of Byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 3,3,3,3,3,3,3,3, // 30 - 37 3,3,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,4, // 78 - 7f 5,6,6,6,6,6,6,6, // 80 - 87 6,6,6,6,6,6,6,6, // 88 - 8f 6,6,6,6,6,6,6,6, // 90 - 97 6,6,6,6,6,6,6,6, // 98 - 9f 6,6,6,6,6,6,6,6, // a0 - a7 6,6,6,6,6,6,6,6, // a8 - af 6,6,6,6,6,6,6,6, // b0 - b7 6,6,6,6,6,6,6,6, // b8 - bf 6,6,6,6,6,6,6,6, // c0 - c7 6,6,6,6,6,6,6,6, // c8 - cf 6,6,6,6,6,6,6,6, // d0 - d7 6,6,6,6,6,6,6,6, // d8 - df 6,6,6,6,6,6,6,6, // e0 - e7 6,6,6,6,6,6,6,6, // e8 - ef 6,6,6,6,6,6,6,6, // f0 - f7 6,6,6,6,6,6,6,0 // f8 - ff ); GB18030_st: array [0..47] of byte = ( byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart), 3,byte(eError),//00-07 byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eItsMe),//08-0f byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eItsMe),byte(eError),byte(eError),byte(eStart),//10-17 4,byte(eError),byte(eStart),byte(eStart),byte(eError),byte(eError),byte(eError),byte(eError),//18-1f byte(eError),byte(eError), 5,byte(eError),byte(eError),byte(eError),byte(eItsMe),byte(eError),//20-27 byte(eError),byte(eError),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart),byte(eStart) //28-2f ); GB18030LangModel: SMModel = ( classTable: @GB18030_cls; classFactor: 7; stateTable: @GB18030_st; charLenTable: @GB18030CharLenTable; CharsetID: GB18030_CHARSET; ); // GB18030LangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @GB18030_cls; // ); // classFactor: 7; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @GB18030_st; // ); // charLenTable: @GB18030CharLenTable; // CharsetID: GB18030_CHARSET; // ); ��������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/mbclass/Big5LangModel.inc�������������������������������������0000644�0001750�0000144�00000004217�12014201074�023426� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������const Big5CharLenTable: array [0..4] of Byte = (0, 1, 1, 2, 0); BIG5_cls: array [0..255] of Byte = ( 1,1,1,1,1,1,1,1, // 00 - 07 //allow 0x00 as legal value 1,1,1,1,1,1,0,0, // 08 - 0f 1,1,1,1,1,1,1,1, // 10 - 17 1,1,1,0,1,1,1,1, // 18 - 1f 1,1,1,1,1,1,1,1, // 20 - 27 1,1,1,1,1,1,1,1, // 28 - 2f 1,1,1,1,1,1,1,1, // 30 - 37 1,1,1,1,1,1,1,1, // 38 - 3f 2,2,2,2,2,2,2,2, // 40 - 47 2,2,2,2,2,2,2,2, // 48 - 4f 2,2,2,2,2,2,2,2, // 50 - 57 2,2,2,2,2,2,2,2, // 58 - 5f 2,2,2,2,2,2,2,2, // 60 - 67 2,2,2,2,2,2,2,2, // 68 - 6f 2,2,2,2,2,2,2,2, // 70 - 77 2,2,2,2,2,2,2,1, // 78 - 7f 4,4,4,4,4,4,4,4, // 80 - 87 4,4,4,4,4,4,4,4, // 88 - 8f 4,4,4,4,4,4,4,4, // 90 - 97 4,4,4,4,4,4,4,4, // 98 - 9f 4,3,3,3,3,3,3,3, // a0 - a7 3,3,3,3,3,3,3,3, // a8 - af 3,3,3,3,3,3,3,3, // b0 - b7 3,3,3,3,3,3,3,3, // b8 - bf 3,3,3,3,3,3,3,3, // c0 - c7 3,3,3,3,3,3,3,3, // c8 - cf 3,3,3,3,3,3,3,3, // d0 - d7 3,3,3,3,3,3,3,3, // d8 - df 3,3,3,3,3,3,3,3, // e0 - e7 3,3,3,3,3,3,3,3, // e8 - ef 3,3,3,3,3,3,3,3, // f0 - f7 3,3,3,3,3,3,3,0 // f8 - ff ); BIG5_st: array [0..23] of Byte = ( Byte(eError),Byte(eStart),Byte(eStart), 3,Byte(eError),Byte(eError),Byte(eError),Byte(eError),//00-07 Byte(eError),Byte(eError),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eItsMe),Byte(eError),//08-0f Byte(eError),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart),Byte(eStart) //10-17 ); Big5LangModel: SMModel = ( classTable: @BIG5_cls; classFactor: 5; stateTable: @BIG5_st; charLenTable: @Big5CharLenTable; CharsetID: BIG5_CHARSET; ); // Big5LangModel: SMModel = ( // classTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @BIG5_cls; // ); // classFactor: 5; // stateTable: ( // idxsft: eIdxSft4bits; // sftmsk: eSftMsk4bits; // bitsft: eBitSft4bits; // unitmsk: eUnitMsk4bits; // data: @BIG5_st; // ); // charLenTable: @Big5CharLenTable; // CharsetID: BIG5_CHARSET; // ); ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/JpCntx.pas����������������������������������������������������0000644�0001750�0000144�00000052455�12014201074�020660� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: JpCntx.pas,v 1.2 2007/05/20 15:46:05 ya_nick Exp $ unit JpCntx; interface uses nsCore; const NUM_OF_CATEGORY = 6; type TJapaneseContextAnalysis = class (TObject) private (*category counters, each interger counts sequence in its category*) mRelSample: array [0..Pred(NUM_OF_CATEGORY)] of PRUint32; (*total sequence received*) mTotalRel: PRUint32; (*The order of previous char*) mLastCharOrder: integer; (*if last byte in current buffer is not the last byte of a character, we*) (*need to know how many byte to skip in next buffer.*) mNeedToSkipCharNum: integer; (*If this flag is set to PR_TRUE, detection is done and conclusion has been made*) mDone: Boolean; function GetOrder(str: PChar; charLen: pPRUint32): PRInt32; overload; virtual; abstract; function GetOrder(str: PChar): PRInt32; overload; virtual; abstract; public constructor Create; destructor Destroy; override; procedure Reset; procedure HandleData(const aBuf: PChar; aLen: integer); procedure HandleOneChar(aStr: PChar; aCharLen: integer); function GotEnoughData: Boolean; function GetConfidence: float; end; TSJISContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: PChar; charLen: pPRUint32): PRInt32; overload; override; function GetOrder(str: PChar): PRInt32; overload; override; end; TEUCJPContextAnalysis = class (TJapaneseContextAnalysis) public function GetOrder(str: PChar; charLen: pPRUint32): PRInt32; overload; override; (*We only interested in Hiragana, so first byte is '\244'*) function GetOrder(str: PChar): PRInt32; overload; override; end; implementation const ENOUGH_REL_THRESHOLD = 100; MAX_REL_THRESHOLD = 1000; MINIMUM_DATA_THRESHOLD = 4; DONT_KNOW: float = -1; (*hiragana frequency category table*) //This is hiragana 2-char sequence table, the number in each cell represents its frequency category jp2CharContext: array [0..82, 0..82] of byte = ( ( 0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), ( 2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), ( 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), ( 0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), ( 1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), ( 0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), ( 0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), ( 0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), ( 0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), ( 0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), ( 2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), ( 0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), ( 0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), ( 0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), ( 2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), ( 0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), ( 1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), ( 0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), ( 0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), ( 0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), ( 0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), ( 0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), ( 0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), ( 0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), ( 0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), ( 0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), ( 0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), ( 0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), ( 0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), ( 1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), ( 0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), ( 0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), ( 0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), ( 0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), ( 0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), ( 2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), ( 0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), ( 0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), ( 0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), ( 0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), ( 0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), ( 0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), ( 0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), ( 0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), ( 0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), ( 0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), ( 0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), ( 0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), ( 0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), ( 0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), ( 0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), ( 0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), ( 0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), ( 0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), ( 0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), ( 2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), ( 0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), ( 0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), ( 0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), ( 0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), ( 1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), ( 0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), ( 0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), ( 0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), ( 0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), ( 0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), ( 0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), ( 0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), ( 0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), ( 1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), ( 0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), ( 0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), ( 0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), ( 0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), ( 0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1) ); constructor TJapaneseContextAnalysis.Create; begin inherited Create; Reset; end; destructor TJapaneseContextAnalysis.Destroy; begin inherited; end; procedure TJapaneseContextAnalysis.HandleOneChar(aStr: PChar; aCharLen: integer); var order: PRInt32; (*if we received enough data, stop here *) begin if mTotalRel > MAX_REL_THRESHOLD then mDone:= TRUE; if mDone then exit; (*Only 2-bytes characters are of our interest*) if (aCharLen=2) then order := GetOrder(aStr) else order := -1; if (order <> -1) and (mLastCharOrder <> -1) then begin inc(mTotalRel); inc(mRelSample[jp2CharContext[mLastCharOrder][order]]); (*count this sequence to its category counter*) end; mLastCharOrder:= order; end; function TJapaneseContextAnalysis.GotEnoughData: Boolean; begin Result := mTotalRel > ENOUGH_REL_THRESHOLD; end; function TJapaneseContextAnalysis.GetConfidence: float; begin (*This is just one way to calculate confidence. It works well for me.*) if mTotalRel > MINIMUM_DATA_THRESHOLD then Result := (mTotalRel - mRelSample[0]) div mTotalRel else Result := DONT_KNOW; end; procedure TJapaneseContextAnalysis.HandleData(const aBuf: PChar; aLen: integer); var charLen: PRUint32; order: PRInt32; i: integer; begin if mDone then exit; (*The buffer we got is byte oriented, and a character may span in more than one*) (*buffers. In case the last one or two byte in last buffer is not complete, we *) (*record how many byte needed to complete that character and skip these bytes here.*) (*We can choose to record those bytes as well and analyse the character once it *) (*is complete, but since a character will not make much difference, by simply skipping*) (*this character will simply our logic and improve performance.*) i := mNeedToSkipCharNum; while i < integer(aLen) do begin order := GetOrder(aBuf+i, @charLen); i := i + integer(charLen); if i > integer(aLen) then begin mNeedToSkipCharNum := i - aLen; mLastCharOrder := -1; end else begin if (order <> -1) and (mLastCharOrder <> -1) then begin inc(mTotalRel); if mTotalRel > MAX_REL_THRESHOLD then begin mDone:= TRUE; break; {<= !!!b possible in "switch" - then remove this line} end; inc(mRelSample[jp2CharContext[mLastCharOrder][order]]); end; mLastCharOrder:= order; end; end; end; procedure TJapaneseContextAnalysis.Reset; var i: integer; begin mTotalRel := 0; for i := 0 to Pred(NUM_OF_CATEGORY) do mRelSample[i] := 0; mNeedToSkipCharNum := 0; mLastCharOrder := -1; mDone := FALSE; end; { TSJISContextAnalysis } function TSJISContextAnalysis.GetOrder(str: PChar; charLen: pPRUint32): PRInt32; begin (*find out current char's byte length*) if (byte(str^) >= $81) and (byte(str^) <= $9f) or (byte(str^) >= $e0) and (byte(str^) <= $fc) then charLen^:=2 else charLen^:=1; (*return its order if it is hiragana*) if (str^ = #$82) and (byte((str+1)^) >= $9f) and (byte((str+1)^) <= $f1) then Result := byte((str+1)^) - $9f else Result:= -1; end; function TSJISContextAnalysis.GetOrder(str: PChar): PRInt32; begin (*We only interested in Hiragana, so first byte is '\202'*) if (str[0]=#$82) and (byte(str[1]) >= $9f) and (byte(str[1]) <= $f1) then Result := byte(str[1]) - $9f else Result := -1; end; { TEUCJPContextAnalysis } function TEUCJPContextAnalysis.GetOrder(str: PChar; charLen: pPRUint32): PRInt32; begin (*find out current char's byte length*) if (byte(str^) = $8e) or (byte(str^) >= $a1) and (byte(str^) <= $fe) then charLen^ := 2 else if byte(str^) = $8f then charLen^ := 3 else charLen^ := 1; (*return its order if it is hiragana*) if (byte(str^) = $a4) and (byte((str+1)^) >= $a1) and (byte((str+1)^) <= $f3) then Result := byte((str+1)^) - $a1 else Result:= -1; end; function TEUCJPContextAnalysis.GetOrder(str: PChar): PRInt32; begin if (str[0]=#$A4) and (byte(str[1]) >= $a1) and (byte(str[1]) <= $f3) then Result := byte(str[1]) - $a1 else Result := -1; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/sbseq/��������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�020101� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/sbseq/LangBulgarianModel.pas����������������������������������0000644�0001750�0000144�00000032013�12014201074�024242� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangBulgarianModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangBulgarianModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) //Character Mapping Table: //this talbe is modified base on win1251BulgarianCharToOrderMap, so //only number <64 is sure valid const Latin5_BulgarianCharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, //80 210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, //90 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, //a0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //b0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, //c0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //d0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, //e0 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253 //f0 ); win1251BulgarianCharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, //40 110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, //50 253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, //60 116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, //70 206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, //80 221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, //90 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, //a0 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, //b0 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, //c0 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, //d0 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, //e0 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16 //f0 ); //Model Table: //total sequences: 100% //first 512 sequences: 96.9392% //first 1024 sequences:3.0618% //rest sequences: 0.2992% //negative sequences: 0.0020% BulgarianLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, 3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, 0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, 0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, 0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, 3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, 2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, 3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, 3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, 1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, 3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, 1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, 2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, 2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, 3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, 1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, 2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, 2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, 1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, 2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, 2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, 2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, 1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, 2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, 1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, 3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, 1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, 3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, 1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, 2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, 1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, 2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, 1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, 2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, 1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, 2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, 1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, 2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, 1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, 0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, 1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, 1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, 1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, 0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, 1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, 1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, 1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 ); Latin5BulgarianModel: SequenceModel = ( charToOrderMap: @Latin5_BulgarianCharToOrderMap; precedenceMatrix: @BulgarianLangModel; mTypicalPositiveRatio: 0.969392; keepEnglishLetter: FALSE; CharsetID: ISO_8859_5_CHARSET; ); Win1251BulgarianModel: SequenceModel = ( charToOrderMap: @win1251BulgarianCharToOrderMap; precedenceMatrix: @BulgarianLangModel; mTypicalPositiveRatio: 0.969392; keepEnglishLetter: FALSE; CharsetID: WINDOWS_BULGARIAN_CHARSET; ); implementation end. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/sbseq/LangHebrewModel.pas�������������������������������������0000644�0001750�0000144�00000026707�12014201074�023567� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangHebrewModel.pas,v 1.1 2007/05/20 15:46:20 ya_nick Exp $ unit LangHebrewModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) //Windows-1255 language model //Character Mapping Table: const win1255_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, //40 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, //50 253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, //60 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, //70 124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, 215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, 106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, 238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253 ); //Model Table: //total sequences: 100% //first 512 sequences: 98.4004% //first 1024 sequences: 1.5981% //rest sequences: 0.087% //negative sequences: 0.0015% HebrewLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, 3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, 1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, 1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, 1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, 1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, 0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, 1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, 0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, 0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, 0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, 0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, 0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, 0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, 0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, 3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, 0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, 0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, 0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, 1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, 0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, 3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, 0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, 0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, 2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, 0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, 3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, 0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, 1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, 0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, 1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, 2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, 2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, 0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, 0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0 ); Win1255Model: SequenceModel = ( charToOrderMap: @win1255_CharToOrderMap; precedenceMatrix: @HebrewLangModel; mTypicalPositiveRatio: 0.984004; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1255_CHARSET; ); implementation end. ���������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/sbseq/LangCyrillicModel.pas�����������������������������������0000644�0001750�0000144�00000043454�12014201074�024123� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangCyrillicModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangCyrillicModel; interface uses nsCore, nsSBCharSetProber; (*KOI8-R language model*) const KOI8R_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, //80 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, //90 223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, //a0 238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, //b0 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, //c0 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, //d0 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, //e0 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70 //f0 ); win1251_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16 ); latin5_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255 ); macCyrillic_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255 ); IBM855_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, 206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, 220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, 230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, 250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255 ); IBM866_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, //40 155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, //50 253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, //60 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, //70 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, 191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, 207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, 223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, 239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255 ); //Model Table: //total sequences: 100% //first 512 sequences: 97.6601% //first 1024 sequences: 2.3389% //rest sequences: 0.1237% //negative sequences: 0.0009% RussianLangModel: array [0..Pred(32*128)] of byte = ( 0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, 3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, 0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, 2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, 1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, 1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, 2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, 1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, 3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, 1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, 2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, 1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, 1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, 1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, 1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, 3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, 1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, 2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, 1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, 2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, 0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, 1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, 1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, 1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, 3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, 2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, 3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, 1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, 1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, 0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, 1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, 1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, 1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, 2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, 1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, 1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, 2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, 1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, 2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, 1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, 1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, 0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, 1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, 1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, 0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, 2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, 0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 ); Koi8rModel: SequenceModel = ( charToOrderMap: @KOI8R_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: KOI8_R_CHARSET; ); Win1251Model: SequenceModel = ( charToOrderMap: @win1251_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1251_CHARSET; ); Latin5Model: SequenceModel = ( charToOrderMap: @latin5_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: ISO_8859_5_CHARSET; ); MacCyrillicModel: SequenceModel = ( charToOrderMap: @macCyrillic_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: X_MAC_CYRILLIC_CHARSET; ); Ibm866Model: SequenceModel = ( charToOrderMap: @IBM866_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: IBM866_CHARSET; ); Ibm855Model: SequenceModel = ( charToOrderMap: @IBM855_CharToOrderMap; precedenceMatrix: @RussianLangModel; mTypicalPositiveRatio: 0.976601; keepEnglishLetter: FALSE; CharsetID: IBM855_CHARSET; ); implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/sbseq/LangGreekModel.pas��������������������������������������0000644�0001750�0000144�00000031613�12014201074�023400� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: LangGreekModel.pas,v 1.1 2007/05/20 15:46:17 ya_nick Exp $ unit LangGreekModel; interface uses nsCore, nsSBCharSetProber; (**************************************************************** 255: Control characters that usually does not exist in any text 254: Carriage/Return 253: symbol (punctuation) that does not belong to word 252: 0 - 9 *****************************************************************) const //Character Mapping Table: Latin7_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 +253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, //b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253 //f0 ); win1253_CharToOrderMap: array [0..255] of byte = ( 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, //00 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //10 +253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, //20 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, //30 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, //40 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, //50 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, //60 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, //70 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //80 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //90 +253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, //a0 253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, //b0 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, //c0 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, //d0 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, //e0 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253 //f0 ); //Model Table: //total sequences: 100% //first 512 sequences: 98.2851% //first 1024 sequences:1.7001% //rest sequences: 0.0359% //negative sequences: 0.0148% GreekLangModel: array [0..Pred(32*128)] of byte = ( 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, 2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, 2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, 2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, 0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, 3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, 3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, 2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, 0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, 0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, 0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, 0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, 0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, 0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, 0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, 0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, 0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, 0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, 0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, 0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, 0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, 0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, 0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, 0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, 0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, 0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, 0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, 0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, 0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, 0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, 0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, 0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, 0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, 0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, 0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, 0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ); Latin7Model: SequenceModel = ( charToOrderMap: @Latin7_CharToOrderMap; precedenceMatrix: @GreekLangModel; mTypicalPositiveRatio: 0.982851; keepEnglishLetter: FALSE; CharsetID: ISO_8859_7_CHARSET; ); Win1253Model: SequenceModel = ( charToOrderMap: @win1253_CharToOrderMap; precedenceMatrix: @GreekLangModel; mTypicalPositiveRatio: 0.982851; keepEnglishLetter: FALSE; CharsetID: WINDOWS_1253_CHARSET; ); implementation end. ���������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/src/EUCTWFreq.pas�������������������������������������������������0000644�0001750�0000144�00000106272�12014201074�021154� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: EUCTWFreq.pas,v 1.2 2007/05/20 15:46:04 ya_nick Exp $ unit EUCTWFreq; // EUCTW frequency table // Converted from big5 work // by Taiwan's Mandarin Promotion Council // <http://www.edu.tw:81/mandr/> (****************************************************************************** * 128 --> 0.42261 * 256 --> 0.57851 * 512 --> 0.74851 * 1024 --> 0.89384 * 2048 --> 0.97583 * * Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 * Random Distribution Ration = 512/(5401-512)=0.105 * * Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR *****************************************************************************) interface uses nsCore; const EUCTW_TYPICAL_DISTRIBUTION_RATIO: float = 0.75; //Char to FreqOrder table , EUCTW_TABLE_SIZE = 8102-2742+16; EUCTWCharToFreqOrder: array [0..EUCTW_TABLE_SIZE-1] of PRInt16 = ( 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, // 2742 3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, // 2758 1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, // 2774 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, // 2790 3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, // 2806 4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, // 2822 7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, // 2838 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, // 2854 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, // 2870 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, // 2886 2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, // 2902 1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, // 2918 3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, // 2934 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, // 2950 1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, // 2966 3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, // 2982 2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, // 2998 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, // 3014 3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, // 3030 1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, // 3046 7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, // 3062 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, // 3078 7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, // 3094 1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, // 3110 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, // 3126 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, // 3142 3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, // 3158 3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, // 3174 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, // 3190 2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, // 3206 2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, // 3222 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, // 3238 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, // 3254 3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, // 3270 1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, // 3286 1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, // 3302 1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, // 3318 2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, // 3334 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, // 3350 4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, // 3366 1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, // 3382 7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, // 3398 2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, // 3414 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, // 3430 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, // 3446 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, // 3462 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, // 3478 7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, // 3494 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, // 3510 1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, // 3526 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, // 3542 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, // 3558 7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, // 3574 1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, // 3590 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, // 3606 3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, // 3622 4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, // 3638 3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, // 3654 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, // 3670 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, // 3686 1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, // 3702 4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, // 3718 3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, // 3734 3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, // 3750 2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, // 3766 7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, // 3782 3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, // 3798 7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, // 3814 1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, // 3830 2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, // 3846 1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, // 3862 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, // 3878 1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, // 3894 4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, // 3910 3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, // 3926 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, // 3942 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, // 3958 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, // 3974 2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, // 3990 7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, // 4006 1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, // 4022 2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, // 4038 1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, // 4054 1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, // 4070 7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, // 4086 7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, // 4102 7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, // 4118 3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, // 4134 4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, // 4150 1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, // 4166 7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, // 4182 2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, // 4198 7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, // 4214 3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, // 4230 3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, // 4246 7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, // 4262 2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, // 4278 7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, // 4294 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, // 4310 4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, // 4326 2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, // 4342 7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, // 4358 3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, // 4374 2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, // 4390 2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, // 4406 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, // 4422 2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, // 4438 1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, // 4454 1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, // 4470 2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, // 4486 1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, // 4502 7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, // 4518 7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, // 4534 2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, // 4550 4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, // 4566 1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, // 4582 7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, // 4598 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, // 4614 4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, // 4630 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, // 4646 2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, // 4662 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, // 4678 1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, // 4694 1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, // 4710 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, // 4726 3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, // 4742 3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, // 4758 1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, // 4774 3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, // 4790 7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, // 4806 7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, // 4822 1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, // 4838 2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, // 4854 1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, // 4870 3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, // 4886 2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, // 4902 3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, // 4918 2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, // 4934 4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, // 4950 4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, // 4966 3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, // 4982 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, // 4998 3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, // 5014 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, // 5030 3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, // 5046 3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, // 5062 3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, // 5078 1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, // 5094 7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, // 5110 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, // 5126 7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, // 5142 1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, // 5158 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, // 5174 4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, // 5190 3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, // 5206 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, // 5222 2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, // 5238 2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, // 5254 3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, // 5270 1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, // 5286 4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, // 5302 2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, // 5318 1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, // 5334 1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, // 5350 2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, // 5366 3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, // 5382 1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, // 5398 7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, // 5414 1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, // 5430 4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, // 5446 1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, // 5462 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, // 5478 1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, // 5494 3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, // 5510 3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, // 5526 2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, // 5542 1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, // 5558 4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, // 5574 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, // 5590 7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, // 5606 2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, // 5622 3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, // 5638 4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, // 5654 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, // 5670 7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, // 5686 7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, // 5702 1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, // 5718 4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, // 5734 3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, // 5750 2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, // 5766 3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, // 5782 3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, // 5798 2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, // 5814 1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, // 5830 4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, // 5846 3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, // 5862 3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, // 5878 2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, // 5894 4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, // 5910 7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, // 5926 3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, // 5942 2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, // 5958 3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, // 5974 1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, // 5990 2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, // 6006 3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, // 6022 4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, // 6038 2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, // 6054 2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, // 6070 7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, // 6086 1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, // 6102 2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, // 6118 1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, // 6134 3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, // 6150 4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, // 6166 2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, // 6182 3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, // 6198 3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, // 6214 2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, // 6230 4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, // 6246 2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, // 6262 3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, // 6278 4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, // 6294 7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, // 6310 3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, // 6326 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, // 6342 1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, // 6358 4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, // 6374 1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, // 6390 4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, // 6406 7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, // 6422 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, // 6438 7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, // 6454 2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, // 6470 1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, // 6486 1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, // 6502 3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, // 6518 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, // 6534 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, // 6550 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, // 6566 3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, // 6582 2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, // 6598 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, // 6614 7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, // 6630 1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, // 6646 3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, // 6662 7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, // 6678 1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, // 6694 7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, // 6710 4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, // 6726 1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, // 6742 2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, // 6758 2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, // 6774 4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, // 6790 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, // 6806 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, // 6822 3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, // 6838 3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, // 6854 1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, // 6870 2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, // 6886 7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, // 6902 1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, // 6918 1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, // 6934 3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, // 6950 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, // 6966 1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, // 6982 4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, // 6998 7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, // 7014 2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, // 7030 3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, // 7046 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, // 7062 1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, // 7078 2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, // 7094 2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, // 7110 7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, // 7126 7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, // 7142 7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, // 7158 2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, // 7174 2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, // 7190 1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, // 7206 4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, // 7222 3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, // 7238 3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, // 7254 4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, // 7270 4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, // 7286 2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, // 7302 2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, // 7318 7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, // 7334 4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, // 7350 7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, // 7366 2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, // 7382 1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, // 7398 3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, // 7414 4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, // 7430 2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, // 7446 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, // 7462 2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, // 7478 1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, // 7494 2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, // 7510 2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, // 7526 4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, // 7542 7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, // 7558 1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, // 7574 3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, // 7590 7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, // 7606 1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, // 7622 8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, // 7638 2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, // 7654 8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, // 7670 2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, // 7686 2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, // 7702 8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, // 7718 8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, // 7734 8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, // 7750 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, // 7766 8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, // 7782 4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, // 7798 3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, // 7814 8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, // 7830 1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, // 7846 8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, // 7862 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, // 7878 1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, // 7894 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, // 7910 4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, // 7926 1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, // 7942 4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, // 7958 1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, // 7974 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, // 7990 3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, // 8006 4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, // 8022 8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, // 8038 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, // 8054 3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, // 8070 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, // 8086 2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118 // 8102 (*************************************************************************************** *Everything below is of no interest for detection purpose * *************************************************************************************** 2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, // 8118 2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, // 8134 8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, // 8150 8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, // 8166 8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, // 8182 8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, // 8198 8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, // 8214 8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, // 8230 8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, // 8246 8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, // 8262 8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, // 8278 8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, // 8294 8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, // 8310 8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, // 8326 8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, // 8342 8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, // 8358 8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, // 8374 8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, // 8390 8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, // 8406 8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, // 8422 8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, // 8438 8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, // 8454 8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, // 8470 8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, // 8486 8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, // 8502 8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, // 8518 8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, // 8534 8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, // 8550 8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, // 8566 8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, // 8582 8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, // 8598 8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, // 8614 8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, // 8630 8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, // 8646 8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, // 8662 8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, // 8678 8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, // 8694 8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, // 8710 8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, // 8726 8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741, // 8742 //13973 ****************************************************************************************) ); implementation end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/chsdet.lpk��������������������������������������������������������0000644�0001750�0000144�00000015451�12144672601�020147� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="chsdet"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <OtherUnitFiles Value="src;src\sbseq"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> </CodeGeneration> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Files Count="46"> <Item1> <Filename Value="src\Big5Freq.pas"/> <UnitName Value="Big5Freq"/> </Item1> <Item2> <Filename Value="src\CharDistribution.pas"/> <UnitName Value="CharDistribution"/> </Item2> <Item3> <Filename Value="src\chsdIntf.pas"/> <UnitName Value="chsdIntf"/> </Item3> <Item4> <Filename Value="src\CustomDetector.pas"/> <UnitName Value="CustomDetector"/> </Item4> <Item5> <Filename Value="src\dbg.inc"/> <Type Value="Include"/> </Item5> <Item6> <Filename Value="src\EUCKRFreq.pas"/> <UnitName Value="EUCKRFreq"/> </Item6> <Item7> <Filename Value="src\EUCSampler.pas"/> <UnitName Value="EUCSampler"/> </Item7> <Item8> <Filename Value="src\EUCTWFreq.pas"/> <UnitName Value="EUCTWFreq"/> </Item8> <Item9> <Filename Value="src\GB2312Freq.pas"/> <UnitName Value="GB2312Freq"/> </Item9> <Item10> <Filename Value="src\JISFreq.pas"/> <UnitName Value="JISFreq"/> </Item10> <Item11> <Filename Value="src\JpCntx.pas"/> <UnitName Value="JpCntx"/> </Item11> <Item12> <Filename Value="src\mbclass\Big5LangModel.inc"/> <Type Value="Include"/> </Item12> <Item13> <Filename Value="src\mbclass\EUCJPLangModel.inc"/> <Type Value="Include"/> </Item13> <Item14> <Filename Value="src\mbclass\EUCKRLangModel.inc"/> <Type Value="Include"/> </Item14> <Item15> <Filename Value="src\mbclass\EUCTWLangModel.inc"/> <Type Value="Include"/> </Item15> <Item16> <Filename Value="src\mbclass\GB18030LangModel.inc"/> <Type Value="Include"/> </Item16> <Item17> <Filename Value="src\mbclass\HZLangModel.inc"/> <Type Value="Include"/> </Item17> <Item18> <Filename Value="src\mbclass\ISO2022CNLangModel.inc"/> <Type Value="Include"/> </Item18> <Item19> <Filename Value="src\mbclass\ISO2022JPLangModel.inc"/> <Type Value="Include"/> </Item19> <Item20> <Filename Value="src\mbclass\ISO2022KRLangModel.inc"/> <Type Value="Include"/> </Item20> <Item21> <Filename Value="src\mbclass\SJISLangModel.inc"/> <Type Value="Include"/> </Item21> <Item22> <Filename Value="src\mbclass\UCS2BELangModel.inc"/> <Type Value="Include"/> </Item22> <Item23> <Filename Value="src\mbclass\UCS2LELangModel.inc"/> <Type Value="Include"/> </Item23> <Item24> <Filename Value="src\mbclass\UTF8LangModel.inc"/> <Type Value="Include"/> </Item24> <Item25> <Filename Value="src\MBUnicodeMultiProber.pas"/> <UnitName Value="MBUnicodeMultiProber"/> </Item25> <Item26> <Filename Value="src\MultiModelProber.pas"/> <UnitName Value="MultiModelProber"/> </Item26> <Item27> <Filename Value="src\nsCodingStateMachine.pas"/> <UnitName Value="nsCodingStateMachine"/> </Item27> <Item28> <Filename Value="src\nsCore.pas"/> <UnitName Value="nsCore"/> </Item28> <Item29> <Filename Value="src\nsEscCharsetProber.pas"/> <UnitName Value="nsEscCharsetProber"/> </Item29> <Item30> <Filename Value="src\nsGroupProber.pas"/> <UnitName Value="nsGroupProber"/> </Item30> <Item31> <Filename Value="src\nsHebrewProber.pas"/> <UnitName Value="nsHebrewProber"/> </Item31> <Item32> <Filename Value="src\nsLatin1Prober.pas"/> <UnitName Value="nsLatin1Prober"/> </Item32> <Item33> <Filename Value="src\nsMBCSMultiProber.pas"/> <UnitName Value="nsMBCSMultiProber"/> </Item33> <Item34> <Filename Value="src\nsPkg.pas"/> <UnitName Value="nsPkg"/> </Item34> <Item35> <Filename Value="src\nsSBCharSetProber.pas"/> <UnitName Value="nsSBCharSetProber"/> </Item35> <Item36> <Filename Value="src\nsSBCSGroupProber.pas"/> <UnitName Value="nsSBCSGroupProber"/> </Item36> <Item37> <Filename Value="src\nsUniversalDetector.pas"/> <UnitName Value="nsUniversalDetector"/> </Item37> <Item38> <Filename Value="src\sbseq\LangBulgarianModel.pas"/> <UnitName Value="LangBulgarianModel"/> </Item38> <Item39> <Filename Value="src\sbseq\LangCyrillicModel.pas"/> <UnitName Value="LangCyrillicModel"/> </Item39> <Item40> <Filename Value="src\sbseq\LangGreekModel.pas"/> <UnitName Value="LangGreekModel"/> </Item40> <Item41> <Filename Value="src\sbseq\LangHebrewModel.pas"/> <UnitName Value="LangHebrewModel"/> </Item41> <Item42> <Filename Value="src\stat\Big5Statistics.inc"/> <Type Value="Include"/> </Item42> <Item43> <Filename Value="src\stat\EUCJPStatistics.inc"/> <Type Value="Include"/> </Item43> <Item44> <Filename Value="src\stat\EUCKRStatistics.inc"/> <Type Value="Include"/> </Item44> <Item45> <Filename Value="src\stat\EUCTWStatistics.inc"/> <Type Value="Include"/> </Item45> <Item46> <Filename Value="src\stat\GB2312Statistics.inc"/> <Type Value="Include"/> </Item46> </Files> <RequiredPkgs Count="1"> <Item1> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item1> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/Licence.txt�������������������������������������������������������0000644�0001750�0000144�00000057505�12014201074�020262� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/chsd_dll_intf.pas�������������������������������������������������0000644�0001750�0000144�00000006104�12014201074�021445� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// +----------------------------------------------------------------------+ // | chsdet - Charset Detector Library | // +----------------------------------------------------------------------+ // | Copyright (C) 2006, Nick Yakowlew http://chsdet.sourceforge.net | // +----------------------------------------------------------------------+ // | Based on Mozilla sources http://www.mozilla.org/projects/intl/ | // +----------------------------------------------------------------------+ // | This library 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 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 Lesser General Public License for more details. | // | http://www.opensource.org/licenses/lgpl-license.php | // +----------------------------------------------------------------------+ // // $Id: chsd_dll_intf.pas,v 1.4 2009/07/12 15:13:56 ya_nick Exp $ unit chsd_dll_intf; interface const NS_OK = 0; NS_ERROR_OUT_OF_MEMORY = $8007000e; type rCharsetInfo = record Name: pChar; CodePage: integer; Language: pChar; end; prCharsetInfo = ^rCharsetInfo; rAboutHolder = record MajorVersionNr: Cardinal; MinorVersionNr: Cardinal; BuildVersionNr: Cardinal; About: pChar; end; eBOMKind =( BOM_Not_Found, BOM_UCS4_BE, // 00 00 FE FF UCS-4, big-endian machine (1234 order) BOM_UCS4_LE, // FF FE 00 00 UCS-4, little-endian machine (4321 order) BOM_UCS4_2143, // 00 00 FF FE UCS-4, unusual octet order (2143) BOM_UCS4_3412, // FE FF 00 00 UCS-4, unusual octet order (3412) BOM_UTF16_BE, // FE FF ## ## UTF-16, big-endian BOM_UTF16_LE, // FF FE ## ## UTF-16, little-endian BOM_UTF8 // EF BB BF UTF-8 ); const CharsetDetectorLibrary = 'chsdet.dll'; procedure csd_Reset; stdcall; external CharsetDetectorLibrary; function csd_HandleData(aBuf: PChar; aLen: integer): integer; stdcall; external CharsetDetectorLibrary; function csd_Done: Boolean; stdcall; external CharsetDetectorLibrary; procedure csd_DataEnd; stdcall; external CharsetDetectorLibrary; function csd_GetDetectedCharset: rCharsetInfo; stdcall; external CharsetDetectorLibrary; procedure csd_GetKnownCharsets(var KnownCharsets: pChar); stdcall; external CharsetDetectorLibrary; procedure csd_GetAbout(var About: rAboutHolder); stdcall; external CharsetDetectorLibrary; function csd_GetDetectedBOM: eBOMKind; stdcall; external CharsetDetectorLibrary; procedure csd_DisableCharsetCP(CodePage: integer); stdcall; external CharsetDetectorLibrary; implementation end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/chsdet/dcu/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717722�016747� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717722�016235� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/cmdbox.pas�������������������������������������������������������0000644�0001750�0000144�00000000602�12014201074�020163� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Diese Datei wurde automatisch von Lazarus erzeugt. Sie darf nicht bearbeitet werden! Dieser Quelltext dient nur dem bersetzen und Installieren des Packages. } unit cmdbox; interface uses uCmdBox, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('uCmdBox', @uCmdBox.Register); end; initialization RegisterPackage('cmdbox', @Register); end. ������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/wnmainform.lfm���������������������������������������������������0000644�0001750�0000144�00000006110�11077656332�021102� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������object WMainForm: TWMainForm Left = 319 Height = 480 Top = 337 Width = 720 ActiveControl = CmdBox Caption = 'TCmdBox Example Application' ClientHeight = 480 ClientWidth = 720 OnCreate = FormCreate OnDestroy = FormDestroy Position = poScreenCenter LCLVersion = '0.9.25' object RightPanel: TPanel Left = 579 Height = 480 Width = 141 Align = alRight ClientHeight = 480 ClientWidth = 141 TabOrder = 0 object Label1: TLabel Left = 16 Height = 14 Top = 8 Width = 35 Caption = 'History' ParentColor = False end object Button1: TButton Left = 16 Height = 25 Top = 440 Width = 109 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = 'End Programm' OnClick = Button1Click TabOrder = 0 end object HistoryList: TListBox Left = 16 Height = 285 Top = 24 Width = 109 Anchors = [akTop, akLeft, akRight, akBottom] TabOrder = 1 end object Button2: TButton Left = 16 Height = 25 Top = 315 Width = 109 Anchors = [akLeft, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = 'Clear' OnClick = Button2Click TabOrder = 2 end object CbSetCaret: TComboBox Left = 16 Height = 21 Top = 397 Width = 109 Anchors = [akLeft, akRight, akBottom] AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending] ItemHeight = 13 ItemIndex = 0 Items.Strings = ( 'Caret-Line' 'Caret-Sub-Bar' 'Caret-Big-Bar' ) OnChange = CbSetCaretChange Style = csDropDownList TabOrder = 3 Text = 'Caret-Line' end object Button3: TButton Left = 16 Height = 25 Top = 353 Width = 109 Anchors = [akLeft, akRight, akBottom] Caption = 'Process' OnClick = Button3Click TabOrder = 4 end end object Splitter1: TSplitter Left = 574 Height = 480 Width = 5 Align = alRight Beveled = True ResizeAnchor = akRight end object CmdBox: TCmdBox Height = 480 Width = 574 Align = alClient CaretColor = 33023 CaretType = cartUser CaretWidth = 1 CaretHeight = 13 CaretYShift = 3 OnInput = CmdBoxInput LineCount = 1000 Font.CharSet = ANSI_CHARSET Font.Color = clSilver Font.Height = -16 Font.Name = 'Arial' Font.Pitch = fpVariable BackGroundColor = clNavy TabWidth = 60 PassWordChar = '*' HistoryMax = 10 InputSelColor = clPurple InputSelBackGround = clSilver CaretInterval = 500 GraphicalCharacterWidth = 10 AutoFollow = True end object ReaderTimer: TTimer Interval = 700 OnTimer = ReaderTimerTimer left = 66 top = 75 end object ProcessTimer: TTimer Enabled = False Interval = 100 OnTimer = ProcessTimerTimer left = 104 top = 75 end end ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/ucmdbox.pas������������������������������������������������������0000644�0001750�0000144�00000204201�12014201074�020351� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2007 Julian Schutsch This source is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. A copy of the GNU Lesser General Public License is available on the World Wide Web at <http://www.gnu.org/copyleft/lgpl.html>. You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Changelog: 9.27.2007 : Seperation from another Package, first Release under GPL Version 0.1 10.02.2007 : Licence Changed to LGPL Added : History Added : Password Input mode Fixed : Blank Screen when Resizing so that TopLine disappears. Added : Fixed Prompt Description infront of Input, moves along with it Etc : Functions, minor Bugs Missing : FreeLineWidth full support Version 0.2 10.08.2007 : Removed : Fixed Line Width Support, Source now less complex Added : Paste/Copy/Cut Ability, Select with Mouse and Shift/Keys Added : TRTLCriticalsection called FLock to make Writeln/Write Threadsafe Fixed : GTK 1/2 Linux support, several changes to make that work... Removed : LineWidth, can cause Property Loading Errors if used with old Apps ! Workarn : GTK Font height gets 2 added on all plattforms, means, win32 have two extra dots unecessarily, can't solve that ! Fixed : Pos 1/End Key changes Scrollbar (Different GTK behaviour !) Version 0.3 12.06.2008 : Optimized Color String output, still needs testing and PWD Strings are not changed yet. Improvement visible on Win32, but still to slow, any hacks? 17.06.2008 : TColorString changed completly, now using Arrays instead of linked lists 25.06.2008 : Fixed everything for Multispace support Added tabulator behaviour Caret type and Color now customizable Input Selection Colors published Speed improvement using precalculated Sum-Widths for TColorString Lots of minor UTF8 Bugs fixed 26.06.2008 : Escape Codes for some sort of Graphical output (Tables, lines, etc) Better moving Input Bug fixes in MakeInputVisible 27.06.2008 : Add FGraphicCharWidth 28.06.2008 : New Escape Code preprocessor Support for different modes (ANSI color, CmdBox, None(ignore)) 29.06.2008 : FStringBuffer added,Works without WakeMainThread now as well Fixed LineOutAndFill Added AutoFollow Todo : Input Masks Todo : Docu } unit uCmdBox; {$mode objfpc}{$H+} interface uses Classes, SysUtils, ExtCtrls, ComCtrls, Controls, Graphics, Forms, LCLType, LCLIntf, LMessages, LResources, ClipBrd, LCLProc; type TCaretType=(cartLine,cartSubBar,cartBigBar,cartUser); TEscapeCodeType=(esctCmdBox,esctAnsi,esctNone); TEscapeMode=(escmNone,escmOperation,escmData2,escmData1,escmAnsiOperation,escmAnsiSquare); type TCmdBox=class; type TColorstring=class; type EOnCmdBoxInput=Procedure(ACmdBox:TCmdBox;Input:String) of object; type EOnCmdBoxInputChange=Procedure(ACmdBox:TCmdBox;InputData:TColorstring) of object; type { TCmdBox } TCmdBox=class(TCustomControl) public constructor Create(AComponent:TComponent);override; destructor Destroy;override; protected procedure Paint;override; procedure Resize;override; procedure UTF8KeyPress(var Key:TUTF8Char);override; procedure KeyDown(var Key:Word;Shift:TShiftState);override; procedure CreateParams(var Params:TCreateParams);override; procedure CreateWnd;override; procedure WMVScroll(var message: TLMVScroll);message LM_VSCROLL; procedure MouseDown(Button:TMouseButton;Shift:TShiftState;x,y:Integer);override; procedure MouseUp(Button:TMouseButton;Shift:TShiftState;x,y:Integer);override; procedure MouseMove(Shift:TShiftState;x,y:Integer);override; procedure EraseBackground(DC:HDC);override; private FLock : System.TRTLCriticalSection; FCaretTimer : TTimer; FCaretVisible : Boolean; FLineCount : Integer; FLines : array of TColorstring; FLineHeights : array of Integer; FLineHeightSum : array of Integer; FTopLine : Integer; FPageHeight : Integer; FVisibleLines : Integer; FVSBVisible : Boolean; FVSBPos : Integer; FVSBWidth : Integer; FClientWidth : Integer; FClientHeight : Integer; FCaretX : Integer; FOutX,FOutY : Integer; FInputX,FInputY : Integer; FInputPos : Integer; FCharHeight : Integer; FLineOfTopLine : Integer; FVisibleLineCount : Integer; FInput : Boolean; FInputBuffer : TColorstring; FInputVisible : Boolean; FInputMinPos : Integer; FUTF8InputMinPos : Integer; FOnInput : EOnCmdBoxInput; FOnAny : EOnCmdBoxInputChange; FOnInputChange : EOnCmdBoxInputChange; FBackGroundColor : TColor; FCurrentColor : TColor; FCurrentBackGround : TColor; FFont : TFont; FPassWordChar : TUTF8Char; FInputIsPassWord : Boolean; FHistory : Array of TColorstring; FHistoryLength : Integer; FHistoryMax : Integer; FHistoryPos : Integer; FInputColor : TColor; FInputBackground : TColor; FInputSelColor : TColor; FInputSelBackGround : TColor; FMouseDown : Boolean; FSelStart,FSelEnd : Integer; FMouseDownInputPos : Integer; FCurrentString : String; FCaretColor : TColor; FCaretType : TCaretType; FCaretWidth : Integer; FCaretHeight : Integer; FCaretYShift : Integer; FTabWidth : Integer; FGraphicCharWidth : Integer; FEscapeCodeType : TEscapeCodeType; FEscapeMode : TEscapeMode; FEscapeData : String; FStringBuffer : TStringList; FAutoFollow : Boolean; procedure CaretTimerExecute(Sender:TObject); procedure SetLineCount(c:Integer); procedure SetTopLine(Nr:Integer); procedure AdjustScrollBars; function AdjustLineHeight(i:Integer):Integer; procedure MakeInputVisible; procedure MakeOutVisible; procedure SetFont(F:TFont); procedure SetBackGroundColor(c:Tcolor); function GetSystemMetricsGapSize(const Index:Integer):Integer; procedure ScrollBarRange(Which: Integer; aRange,aPage: Integer); procedure ScrollBarPosition(Which,Value:Integer); function UpdateLineHeights:Integer; procedure TranslateScrollBarPosition; procedure ScrollUp; procedure SetHistoryMax(v:Integer); procedure InsertHistory; procedure SetHistoryPos(v:Integer); function GetHistory(i:Integer):string; procedure DeleteHistoryEntry(i:Integer); procedure MakeFirstHistoryEntry(i:Integer); function MoveInputCaretTo(x,y:Integer;chl:Boolean):Boolean; procedure SetSelection(Start,Ende:Integer); procedure LeftSelection(Start,Ende:Integer); procedure RightSelection(Start,Ende:Integer); procedure DeleteSelected; procedure SetOutY(v:Integer); procedure IntWrite; procedure MultiWrite; procedure SetCaretType(ACaretType:TCaretType); procedure SetCaretWidth(AValue:Integer); procedure SetCaretHeight(AValue:Integer); procedure SetCaretYShift(AValue:Integer); procedure SetTabWidth(AValue:Integer); function GetCaretInterval:Integer; procedure SetCaretInterval(AValue:Integer); public function HistoryHas(s:string):Boolean; function HistoryIndexOf(s:string):Integer; procedure ClearHistory; procedure TextColor(C:TColor); procedure TextBackground(C:TColor); procedure TextColors(FC,BC:TColor); procedure Write(s:String); procedure Writeln(s:String); procedure WriteStream(Stream:TStream); procedure Clear; procedure StartRead(DFC,DBC:TColor;const Desc:String;IFC,IBC:TColor); procedure StartReadPassWord(DFC,DBC:TColor;const Desc:String;IFC,IBC:TColor); procedure StopRead; procedure CopyToClipBoard; procedure PasteFromClipBoard; procedure CutToClipBoard; procedure ClearLine; property OutX : Integer read FOutX write FOutX; property OutY : Integer read FOutY write SetOutY; property TopLine : Integer read FTopLine write SetTopLine; property History[i:Integer] : string read GetHistory; property InputPos : Integer read FInputPos write FInputPos; function HistoryCount : Integer; published property Align; property Anchors; property ShowHint; property CaretColor : TColor read FCaretColor write FCaretColor; property CaretType : TCaretType read FCaretType write SetCaretType; property CaretWidth : Integer read FCaretWidth write SetCaretWidth; property CaretHeight : Integer read FCaretHeight write SetCaretHeight; property CaretYShift : Integer read FCaretYShift write SetCaretYShift; property OnInput : EOnCmdBoxInput read FOnInput write FOnInput; property OnInputChange : EOnCmdBoxInputChange read FOnInputChange write FOnInputChange; property OnAny : EOnCmdBoxInputChange read FOnAny write FOnAny; property LineCount : Integer read FLineCount write SetLineCount; property Font : TFont read FFont write SetFont; property BackGroundColor : TColor read FBackgroundColor write SetBackGroundColor; property TabWidth : Integer read FTabWidth write SetTabWidth; property PassWordChar : TUTF8Char read FPassWordChar write FPassWordChar; property HistoryMax : Integer read FHistoryMax write SetHistoryMax; property InputSelColor : TColor read FInputSelColor write FInputSelColor; property InputSelBackGround : TColor read FInputSelBackGround write FInputSelBackGround; property CaretInterval : Integer read GetCaretInterval write SetCaretInterval; property EscapeCodeType : TEscapeCodeType read FEscapeCodeType write FEscapeCodeType; property GraphicalCharacterWidth : Integer read FGraphicCharWidth write FGraphicCharWidth; property AutoFollow : Boolean read FAutoFollow write FAutoFollow; property DoubleBuffered default true; end; type TColorChar=record FChar : TUTF8Char; FCharWidth : Integer; FSumWidth : Integer; FWordStart : Integer; FFrontColor : TColor; FBackColor : TColor; end; type TColorString=class private FChars : array of TColorChar; FSumWidth : Integer; FPassWordStart : Integer; FPassWordChar : TUTF8Char; FTabWidth : Integer; procedure MinimumLength(V:Integer;FC,BC:TColor); procedure MaximumLength(V:Integer); procedure UpdateSum; public constructor Create(AFont:TFont); destructor Destroy;override; procedure Clear; procedure OverWrite(S:String;Pos:Integer;FC,BC:TColor); procedure OverWriteChar(s:TUTF8Char;Pos,ADefWidth:Integer;FC,BC:TColor); procedure OverWrite(S:TColorstring;Pos:Integer); procedure OverWritePW(S:TColorstring;PWS,Pos:Integer;PWC:String); procedure PartOverWrite(S:TColorstring;Start,Ende,Pos:Integer); procedure LineOutAndFill(ACanvas:TCanvas;AX,AY,ALeftX,AWrapWidth,ACH,ACB,ACaretPos:Integer;ABC,ACC:TColor;ACaretHeight,ACaretWidth,ACaretYShift:Integer;ADrawCaret:Boolean); function Getstring:String; function GetPartstring(Start,Ende:Integer):String; procedure Delete(Index:Integer); procedure Delete(Index,Len:Integer); procedure Insert(Index:Integer;C:String;FC,BC:TColor); procedure BColorBlock(StartPos,EndPos:Integer;C:TColor); procedure ColorBlock(StartPos,EndPos:Integer;FC,BC:TColor); function LineCount(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; function GetLength:Integer; function GetLineOfCaret(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; function GetCharPosition(AWrapWidth,ALine,AXPos:Integer):Integer; private FFont : TFont; FDefaultBackGround : TColor; public property TabWidth : Integer read FTabWidth write FTabWidth; property PassWordChar : TUTF8Char read FPassWordChar write FPassWordChar; property PassWordStart : Integer read FPassWordStart write FPassWordStart; property Length : Integer read GetLength; property DefaultBackGround : TColor read FDefaultBackground write FDefaultBackground; property Font : TFont read FFont write FFont; end; procedure Register; implementation procedure TColorString.UpdateSum; var i : Integer; LastWordStart : Integer; SumWidth : Integer; begin LastWordStart := 0; SumWidth := 0; for i:=0 to High(FChars) do begin with FChars[i] do begin FWordStart := LastWordStart; case FChar[1] of #9: begin FCharWidth := (SumWidth div FTabWidth+1)*FTabWidth-SumWidth; LastWordStart := i+1; end; #27: begin case FChar[2] of #9: begin FCharWidth := (SumWidth div FTabWidth+1)*FTabWidth-SumWidth; LastWordStart := i+1; end; #10:LastWordStart:=i+1; #32,#46,#196,#205: begin FCharWidth := Ord(FChar[3]); LastWordStart := i+1; end; #33,#47,#197,#206: begin FCharWidth := (Ord(FChar[3])+Ord(FChar[4])*256)-SumWidth; if FCharWidth<0 then FCharWidth:=0; LastWordStart := i+1; end; end; end; else if FChar=' ' then LastWordStart:=i+1; end; SumWidth := SumWidth+FCharWidth; FSumWidth := SumWidth; end; end; FSumWidth:=SumWidth; end; function TColorString.GetLength:Integer; begin Result:=System.Length(FChars); end; procedure TCmdBox.SetTabWidth(AValue:Integer); var i:Integer; begin FTabWidth:=AValue; for i:=0 to FLineCount-1 do FLines[i].TabWidth:=AValue; UpdateLineHeights; Invalidate; end; procedure TCmdBox.SetCaretWidth(AValue:Integer); begin FCaretWidth := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretHeight(AValue:Integer); begin FCaretHeight := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretYShift(AValue:Integer); begin FCaretYShift := AValue; FCaretType := cartUser; end; procedure TCmdBox.SetCaretType(ACaretType:TCaretType); begin case ACaretType of cartLine: begin if HandleAllocated then FCaretHeight:=FFont.GetTextHeight('A')-3 else FCaretHeight:=-1; FCaretWidth := 1; FCaretYShift := 3; end; cartSubBar: begin FCaretWidth := -1; FCaretHeight := 3; FCaretYShift := 0; end; cartBigBar: begin if HandleAllocated then FCaretHeight:=FFont.GetTextHeight('A')-3 else FCaretHeight:=-1; FCaretWidth := -1; FCaretYShift := 3; end; end; Invalidate; FCaretType:=ACaretType; end; // TOdo : Use string buffer instead of string (speed improvement expected) procedure TColorString.LineOutAndFill(ACanvas:TCanvas;AX,AY,ALeftX,AWrapWidth,ACH,ACB,ACaretPos:Integer;ABC,ACC:TColor;ACaretHeight,ACaretWidth,ACaretYShift:Integer;ADrawCaret:Boolean); var LineStart : Integer; LineEnd : Integer; MidWidth : Integer; LineStartSumWidth : Integer; x : Integer; LastLineSumWidth : Integer; ACHH : Integer; ACBH : Integer; procedure DrawLine; var SameColor : String; SameForeColor : TColor; SameBackColor : TColor; SameColorX : Integer; SameColorWidth : Integer; LP : Integer; CaretX : Integer; CaretW : Integer; CW : Integer; xp : Integer; begin if (AY<=-ACH) and (AY>ACanvas.Height) then begin Inc(AY,ACH); Ax:=ALeftx; Exit; end; SameColor:=''; ACanvas.Brush.Style:=bsSolid; // TODO: Please try to reproduce this Ultra-Shit Error which couples GetTextWidth input to // TextOut Output. I can't solve this...i am not Stupid Enough for such errors! // (Is in bug report, should be fixed somewhere in the future!) ACanvas.Font.GetTextWidth('%%%_$%_Hallo\\\\\\\\\32489738'); // End of shit LP := LineStart; CaretX := -1; while LineStart<>LineEnd+1 do begin with FChars[LineStart] do begin CW:=FCharWidth; if FChar=#9 then begin if SameColor<>'' then begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,AY,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); Inc(SameColorX,SameColorWidth); SameColor:=''; end else SameColorX:=AX; ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); end else if FChar[1]=#27 then begin if SameColor<>'' then begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,AY,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); Inc(SameColorX,SameColorWidth); SameColor:=''; end else SameColorX:=AX; case FChar[2] of #9: begin case FChar[3] of #46: begin ACanvas.Pen.Color:=FFrontColor; ACanvas.Pen.Style:=psDash; ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); xp:=SameColorX; if xp mod 2<>0 then Inc(xp); while xp<SameColorX+FCharWidth do begin ACanvas.Pixels[xp,AY+ACH-3]:=FFrontColor; Inc(xp,2); end; end; #196: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Pen.Style := psSolid; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+FCharWidth,AY+ACHH); end; end; end; #10: begin CW:=AWrapWidth-SameColorX; case FChar[3] of #179: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.Line(SameColorX+CW-ACBH,AY,SameColorX+CW-ACBH,AY+ACH); end; #180: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.Line(SameColorX+CW-ACBH,AY,SameColorX+CW-ACBH,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+CW-ACBH,AY+ACHH); end; #191: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.MoveTo(SameColorX,AY+ACHH); ACanvas.LineTo(SameColorX+CW-ACBH,AY+ACHH); ACanvas.LineTo(SameColorX+CW-ACBH,AY+ACH); end; #196: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+CW,AY+ACHH); end; #205: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH-1,SameColorX+CW,AY+ACHH-1); ACanvas.Line(SameColorX,AY+ACHH+1,SameColorX+CW,AY+ACHH+1); end; #217: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+CW,AY+ACH); ACanvas.MoveTo(SameColorX,AY+ACHH); ACanvas.LineTo(SameColorX+CW-ACBH,AY+ACHH); ACanvas.LineTo(SameColorX+CW-ACBH,AY-1); end; end; end; #32,#33: begin ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); end; #46,#47: begin ACanvas.Pen.Color:=FFrontColor; ACanvas.Brush.Color:=FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); xp:=SameColorX; if xp mod 2<>0 then Inc(xp); while xp<SameColorX+FCharWidth do begin ACanvas.Pixels[xp,AY+ACH-3]:=FFrontColor; Inc(xp,2); end; end; #196,#197: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+FCharWidth,AY+ACHH); end; #179: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX+ACBH,AY,SameColorX+ACBH,AY+ACH); end; #193: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+ACB,AY+ACHH); ACanvas.Line(SameColorX+ACBH,AY,SameColorX+ACBH,AY+ACHH); end; #194: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+ACB,AY+ACHH); ACanvas.Line(SameColorX+ACBH,AY+ACHH,SameColorX+ACBH,AY+ACH); end; #198: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX,AY+ACHH,SameColorX+ACB,AY+ACHH); ACanvas.Line(SameColorX+ACBH,AY,SameColorX+ACBH,AY+ACH); end; #195: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.Line(SameColorX+ACBH,AY,SameColorX+ACBH,AY+ACH); ACanvas.Line(SameColorX+ACBH,AY+ACHH,SameColorX+ACB,AY+ACHH); end; #217: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.MoveTo(SameColorX+ACBH,AY); ACanvas.LineTo(SameColorX+ACBH,AY+ACHH); ACanvas.LineTo(SameColorX+ACB,AY+ACHH); end; #218: begin ACanvas.Pen.Color := FFrontColor; ACanvas.Brush.Color := FBackColor; ACanvas.Fillrect(SameColorX,AY,SameColorX+FCharWidth,AY+ACH); ACanvas.MoveTo(SameColorX+ACBH,AY+ACH); ACanvas.LineTo(SameColorX+ACBH,AY+ACHH); ACanvas.LineTo(SameColorX+ACB,AY+ACHH); end; end; end else if SameColor='' then begin if (LP>=FPassWordStart) then begin SameColor := FPassWordChar; SameColorWidth := FFont.GetTextWidth(FPassWordChar); end else begin SameColor := FChar; SameColorWidth := FCharWidth; end; SameColorX := AX; SameForeColor := FFrontColor; SameBackColor := FBackColor; end else begin if (SameForeColor=FFrontColor) and (SameBackColor=FBackColor) then begin if (LP>=FPassWordStart) then begin SameColor:=SameColor+FPassWordChar; Inc(SameColorWidth,FFont.GetTextWidth(FPassWordChar)); end else begin SameColor:=SameColor+FChar; Inc(SameColorWidth,FCharWidth); end; end else begin ACanvas.Font.Color :=SameForeColor; ACanvas.Brush.Color :=SameBackColor; ACanvas.FillRect(SameColorX,Ay,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); if (LP>=FPassWordStart) then begin SameColor := FPassWordChar; SameColorWidth := FFont.GetTextWidth(FPassWordChar); end else begin SameColor := FChar; SameColorWidth := FCharWidth; end; SameForeColor := FFrontColor; SameBackColor := FBackColor; SameColorX := AX; end; end; if LP=ACaretPos then begin CaretX:=AX; CaretW:=FCharWidth; end; Inc(AX,CW); Inc(LP); end; Inc(LineStart); end; if SameColor<>'' then begin ACanvas.Font.Color := SameForeColor; ACanvas.Brush.Color := SameBackColor; ACanvas.FillRect(SameColorX,Ay,SameColorX+SameColorWidth,Ay+ACH); ACanvas.TextOut(SameColorX,AY,SameColor); end; ACanvas.FillRect(AX,AY,AWrapWidth,AY+ACH); AX:=ALeftX; Inc(AY,ACH); if ADrawCaret and (CaretX>=0) then begin ACanvas.Brush.Color:=ACC; if ACaretWidth>=0 then CaretW:=ACaretWidth; ACanvas.FillRect(CaretX,AY-ACaretHeight-ACaretYShift,CaretX+CaretW,AY-ACaretYShift); end; end; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin ACanvas.Brush.Style := bsSolid; ACanvas.Brush.Color := ABC; ACanvas.FillRect(AX,AY,AWrapWidth,AY+ACH); Exit; end; ACHH := ACH div 2; ACBH := ACB div 2; MidWidth := FSumWidth div System.Length(FChars); LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; x := 0; while LineStart<System.Length(FChars) do begin x:=LineStart+AWrapWidth div MidWidth; if x>High(FChars) then x:=High(FChars); while (x<High(FChars)) and (FChars[x].FSumWidth-LineStartSumWidth<AWrapWidth) do Inc(x); while (x>LineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LineEnd:=x; DrawLine; LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; end; if ACaretPos>=LineStart then begin if ACaretWidth>=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); AX:=LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x; if Ax+x>AWrapWidth then begin Ax:=0; ACanvas.Brush.Color:=ABC; ACanvas.FillRect(0,AY,AWrapWidth,AY+ACH); Inc(Ay,ACH); end; if ADrawCaret then begin ACanvas.Brush.Color:=ACC; ACanvas.FillRect(AX,AY-ACaretHeight-ACaretYShift,AX+x,AY-ACaretYShift); end; end; end; function TColorString.GetCharPosition(AWrapWidth,ALine,AXPos:Integer):Integer; var x,MidWidth,LineStart,LineStartSumWidth,LastLineSumWidth,LastLineStart:Integer; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin Result:=0; Exit; end; MidWidth := FSumWidth div System.Length(FChars); if MidWidth=0 then begin Result:=0; Exit; end; LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; x:=0; while (LineStart<System.Length(FChars)) and (ALine>=0) do begin x:=LineStart+AWrapWidth div MidWidth; if x>High(FChars) then x:=High(FChars); while (x<High(FChars)) and (FChars[x].FSumWidth-LineStartSumWidth<AWrapWidth) do Inc(x); while (x>LineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LastLineStart := LineStart; LineStart := x+1; Dec(ALine); end; Result:=LastLineStart; while (Result<LineStart) and (FChars[Result].FSumWidth-LastLineSumWidth<=AXPos) do Inc(Result); end; function TColorString.GetLineOfCaret(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; var x,MidWidth,LineStart,LineStartSumWidth,LastLineSumWidth:Integer; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin Result:=0; Exit; end; MidWidth := FSumWidth div System.Length(FChars); if MidWidth=0 then begin Result:=0; Exit; end; LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; Result := 0; x:=0; while LineStart<System.Length(FChars) do begin x:=LineStart+AWrapWidth div MidWidth; if x>High(FChars) then x:=High(FChars); while (x<High(FChars)) and (FChars[x].FSumWidth-LineStartSumWidth<AWrapWidth) do Inc(x); while (x>LineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; if ACaretPos<x then Exit; Inc(Result); end; if ACaretWidth>=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); if (ACaretPos>LineStart) or (LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x+x<=AWrapWidth) then Dec(Result); end; function TColorString.LineCount(AWrapWidth,ACaretPos,ACaretWidth:Integer):Integer; var x : Integer; MidWidth : Integer; LineStart : Integer; LineStartSumWidth : Integer; LastLineSumWidth : Integer; begin if AWrapWidth<0 then AWrapWidth:=0; if System.Length(FChars)=0 then begin Result:=1; Exit; end; MidWidth := FSumWidth div System.Length(FChars); if MidWidth=0 then begin Result:=1; Exit; end; LineStart := 0; LineStartSumWidth := 0; LastLineSumWidth := 0; Result:=0; x:=0; while LineStart<System.Length(FChars) do begin x:=LineStart+AWrapWidth div MidWidth; if x>High(FChars) then x:=High(FChars); while (x<High(FChars)) and (FChars[x].FSumWidth-LineStartSumWidth<AWrapWidth) do Inc(x); while (x>LineStart) and (FChars[x].FSumWidth-LineStartSumWidth>=AWrapWidth) do with FChars[x] do if (FChar<>' ') and (FWordStart>LineStart) then x:=FWordStart-1 else Dec(x); LastLineSumWidth := LineStartSumWidth; LineStartSumWidth := FChars[x].FSumWidth; LineStart := x+1; Inc(Result); end; if ACaretWidth>=0 then x:=ACaretWidth else x:=FFont.GetTextWidth('A'); if (ACaretPos>=LineStart) and (LineStartSumWidth-LastLineSumWidth+(ACaretPos-LineStart)*x+x>AWrapWidth) then Inc(Result); end; constructor TColorString.Create(AFont:TFont); begin inherited Create; FTabWidth := 1; FFont := AFont; FPassWordStart := MaxInt; end; procedure TColorstring.BColorBlock(StartPos,EndPos:Integer;C:TColor); var i:Integer; begin if StartPos<0 then StartPos:=0; if EndPos>High(FChars) then EndPos:=High(FChars); for i:=StartPos to EndPos do FChars[i].FBackColor:=C; end; procedure TColorstring.ColorBlock(StartPos,EndPos:Integer;FC,BC:TColor); var i:Integer; begin if StartPos<0 then StartPos:=0; if EndPos>High(FChars) then EndPos:=High(FChars); for i:=StartPos to EndPos do begin FChars[i].FFrontColor := FC; FChars[i].FBackColor := BC; end; end; procedure TColorstring.Insert(Index:Integer;C:string;FC,BC:TColor); var i : Integer; l : Integer; Pp : Integer; OldLen : Integer; SLen : Integer; begin OldLen := System.Length(FChars); SLen := UTF8Length(C); if OldLen<Index then MinimumLength(Index+SLen,FC,BC) else begin MinimumLength(SLen+OldLen,FC,BC); for i:=OldLen-1 downto Index do FChars[i+SLen]:=FChars[i]; end; pp := 1; for i:=0 to SLen-1 do begin l:=UTF8CharacterLength(@C[Pp]); with FChars[Index+i] do begin FChar := Copy(C,Pp,l); if Index+i>=FPassWordStart then FCharWidth:=FFont.GetTextWidth(FPassWordChar) else FCharWidth:=FFont.GetTextWidth(FChar); FFrontColor := FC; FBackColor := BC; end; Inc(pp,l); end; UpdateSum; end; procedure TColorstring.Delete(Index,Len:Integer); var i:Integer; begin if (Len=0) or (Index>=System.Length(FChars)) then Exit; if Index+Len>System.Length(FChars) then Len:=System.Length(FChars)-Index; for i:=Index to System.Length(FChars)-Len-1 do FChars[i]:=FChars[i+Len]; SetLength(FChars,System.Length(FChars)-Len); UpdateSum; end; procedure TColorstring.Delete(Index:Integer); var i:Integer; begin if (Index>=System.Length(FChars)) then Exit; for i:=Index to System.Length(FChars)-2 do FChars[i]:=FChars[i+1]; SetLength(FChars,System.Length(FChars)-1); UpdateSum; end; function TColorstring.GetPartstring(Start,Ende:Integer):string; var i,n : Integer; Len : Integer; begin if Start<0 then Start:=0; if Ende>High(FChars) then Ende:=High(FChars); Len:=0; for i:=Start to Ende do Inc(Len,System.Length(FChars[i].FChar)); SetLength(Result,Len); Len:=1; for i:=Start to Ende do begin with FChars[i] do begin for n:=1 to System.Length(FChar) do begin Result[Len]:=FChar[n]; Inc(Len); end; end; end; end; function TColorstring.Getstring:String; var i,n : Integer; Len : Integer; begin Len := 0; for i:=0 to High(FChars) do Inc(Len,System.Length(FChars[i].FChar)); SetLength(Result,Len); Len := 1; for i:=0 to High(FChars) do begin with FChars[i] do begin for n:=1 to System.Length(FChar) do begin Result[Len]:=FChar[n]; Inc(Len); end; end; end; end; procedure TColorstring.OverWritePW(S:TColorstring;PWS,Pos:Integer;PWC:String); var i : Integer; CPassWordStart:Integer; begin MinimumLength(Pos+S.Length,CLSilver,S.FDefaultBackGround); CPassWordStart:=PWS; for i:=0 to S.Length-1 do begin FChars[i+Pos]:=S.FChars[i]; if CPassWordStart<=0 then FChars[i+Pos].FChar:=PWC; Dec(CPassWordStart); end; UpdateSum; end; procedure TColorstring.OverWrite(S:TColorstring;Pos:Integer); var i : Integer; begin MinimumLength(Pos+S.Length,CLSilver,S.FDefaultBackGround); for i:=0 to S.Length-1 do FChars[i+Pos]:=S.FChars[i]; UpdateSum; end; procedure TColorstring.PartOverWrite(S:TColorstring;Start,Ende,Pos:Integer); var i : Integer; begin MinimumLength(Pos+Ende-Start,CLSilver,S.FDefaultBackGround); for i:=0 to Ende-Start-1 do FChars[i+Pos]:=S.FChars[i+Start]; UpdateSum; end; procedure TColorstring.OverWrite(s:String;Pos:Integer;FC,BC:TColor); var i,Pp,l : Integer; begin MinimumLength(Pos+UTF8Length(S),FC,BC); Pp:=1; for i:=0 to UTF8Length(S)-1 do begin l:=UTF8CharacterLength(@s[Pp]); with FChars[i+Pos] do begin FChar := Copy(S,Pp,l); FCharWidth := FFont.GetTextWidth(FChar); FFrontColor := FC; FBackColor := BC; end; Inc(Pp,l); end; UpdateSum; end; procedure TColorstring.OverWriteChar(s:TUTF8Char;Pos,ADefWidth:Integer;FC,BC:TColor); begin MinimumLength(Pos+1,FC,BC); with FChars[Pos] do begin FChar := s; FCharWidth := ADefWidth; FFrontColor := FC; FBackColor := BC; end; UpdateSum; end; procedure TColorstring.MinimumLength(V:Integer;FC,BC:TColor); var OldLen,i:Integer; begin if System.Length(FChars)<V then begin OldLen:=System.Length(FChars); SetLength(FChars,V); for i:=OldLen to High(FChars) do begin with FChars[i] do begin FChar := ' '; FCharWidth := FFont.GetTextWidth(' '); FFrontColor := FC; FBackColor := BC; end; end; end; end; procedure TColorstring.MaximumLength(V:Integer); begin if System.Length(FChars)>V then SetLength(FChars,V); end; procedure TColorstring.Clear; begin FChars:=Nil; end; procedure TCmdBox.ClearLine; begin if FLines[FOutY].Length<>0 then begin FLines[FOutY].Clear; FOutX:=0; if FInput then FInputY:=FOutY; Invalidate; end; end; function TCmdBox.GetCaretInterval:Integer; begin Result:=FCaretTimer.Interval; end; procedure TCmdBox.SetCaretInterval(AValue:Integer); begin FCaretTimer.Interval:=AValue; end; procedure TCmdBox.MultiWrite; var DoWrite:Boolean; begin System.EnterCriticalSection(FLock); DoWrite:=FStringBuffer.Count<>0; if DoWrite then begin FCurrentString:=FStringBuffer[0]; FStringBuffer.Delete(0); end; System.LeaveCriticalSection(FLock); if DoWrite then IntWrite; end; procedure TCmdBox.Write(S:String); begin if ThreadID=MainThreadId then begin MultiWrite; FCurrentString:=S; IntWrite; end else begin System.EnterCriticalSection(FLock); FStringBuffer.Add(S); System.LeaveCriticalSection(FLock); if Assigned(WakeMainThread) then TThread.Synchronize(Nil,@MultiWrite); end; end; function TCmdBox.HistoryIndexOf(s:string):Integer; begin for Result:=0 to HistoryCount-1 do if History[Result]=s then Exit; Result:=-1; end; function TCmdBox.HistoryHas(s:string):Boolean; var i:Integer; begin Result := True; for i:=0 to HistoryCount-1 do if History[i]=s then Exit; Result := False; end; function TCmdBox.HistoryCount:Integer; begin HistoryCount:=FHistoryLength-Ord(FInput); end; function TCmdBox.GetHistory(i:Integer):string; begin Inc(i,Ord(FInput)); if (i>=0) and (i<FHistoryLength) then GetHistory:=FHistory[i].Getstring else GetHistory:=''; end; procedure TCmdBox.EraseBackGround(DC:HDC); begin end; procedure TCmdBox.ClearHistory; begin FHistoryLength := Ord(FInput); FHistoryPos := 0; end; procedure TCmdBox.SetHistoryMax(v:Integer); var i:Integer; begin if v<1 then v:=1; if v<>FHistoryMax then begin if FHistoryLength>v then FHistoryLength:=v; for i:=v to FHistoryMax-1 do FHistory[i].Free; SetLength(FHistory,v); for i:=FHistoryMax to v-1 do FHistory[i]:=TColorstring.Create(Canvas.Font); FHistoryMax:=v; end; end; procedure TCmdBox.WriteStream(Stream:TStream); var c:wideString; begin while Stream.Position<Stream.Size do begin // Not very efficient, but should work... Stream.Read(c,1); Write(c); end; end; procedure TCmdBox.LeftSelection(Start,Ende:Integer); begin if FSelStart=-1 then begin SetSelection(Start,Ende); end else begin if FSelStart=Start then SetSelection(-1,0) else begin if FSelStart<Start then begin SetSelection(FSelStart,Start); end else SetSelection(Start,FSelEnd+1); end; end; end; procedure TCmdBox.RightSelection(Start,Ende:Integer); begin if FSelStart=-1 then begin SetSelection(Start,Ende); end else begin if FSelEnd+1=Ende then SetSelection(-1,0) else begin if FSelstart<Start then begin SetSelection(FSelStart,Ende); end else SetSelection(Ende,FSelEnd+1); end; end; end; procedure TCmdBox.SetSelection(Start,Ende:Integer); begin if FSelStart<>-1 then FInputBuffer.ColorBlock(FSelStart,FSelEnd,FInputColor,FInputBackGround); if Start=Ende then FSelStart:=-1 else begin if Start<Ende then begin FSelStart := Start; FSelEnd := Ende-1; end else begin FSelStart := Ende; FSelEnd := Start-1; end; end; if FSelStart<>-1 then FInputBuffer.ColorBlock(FSelStart,FSelEnd,FInputSelColor,FInputSelBackGround); end; procedure TCmdBox.CopyToClipBoard; begin if FSelStart<>-1 then begin ClipBoard.AsText:=FInputBuffer.GetPartstring(FSelStart,FSelEnd); end; end; procedure TCmdBox.PasteFromClipBoard; var s:widestring; l,Pp:Integer; begin if ClipBoard.HasFormat(CF_TEXT) then begin s := ClipBoard.AsText; Pp := 1; while pp<=Length(s) do begin l := UTF8CharacterLength(@S[Pp]); if (l=1) and (Byte(S[Pp])<32) then Delete(s,Pp,1) else inc(Pp,l); end; FInputBuffer.Insert(InputPos,s,FInputColor,FInputBackGround); InputPos := InputPos + UTF8Length(s); FCaretX:=FInputX+InputPos; AdjustScrollBars; MakeInputVisible; FHistoryPos:=0; if Assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); if Assigned(FOnAny) then FOnAny(Self,FInputBuffer); end; end; procedure TCmdBox.DeleteSelected; begin if FSelStart<>-1 then begin FInputBuffer.Delete(FSelStart,FSelEnd-FSelStart+1); FInputPos := FSelStart; FCaretX := FInputX+FInputPos; FSelStart := -1; end; end; procedure TCmdBox.CutToClipBoard; begin if FSelStart<>-1 then begin ClipBoard.AsText:=FInputBuffer.GetPartstring(FSelStart,FSelEnd); DeleteSelected; end; end; procedure TCmdBox.MouseMove(Shift:TShiftState;x,y:Integer); begin if FMouseDown then begin if MoveInputCaretTo(x,y,false) then SetSelection(FMouseDownInputPos,FInputPos); end; end; function TCmdBox.MoveInputCaretTo(x,y:Integer;chl:Boolean):Boolean; var h,sl,q:Integer; begin if not FInput then Exit; y := y div FCharHeight; h := FLineHeightSum[FTopLine]+FLineOfTopLine+y; sl := FTopLine; while (sl<FLineCount-1) and (FLineHeightSum[sl+1]<=h) do inc(sl); if (sl=FInputY) or (not chl) then begin Dec(h,FLineHeightSum[FInputY]); q:=FInputBuffer.GetCharPosition(FClientWidth,h,x); if (q<FInputMinPos) then q:=FInputMinPos; if (q-FInputX>FInputBuffer.Length) then q:=FInputBuffer.Length-FInputX; FCaretX := q; FInputPos := FCaretX-FInputX; if Assigned(FOnAny) then FOnAny(Self,FInputBuffer); Invalidate; Result:=True; end else Result:=False; end; procedure TCmdBox.MouseDown(Button:TMouseButton;Shift:TShiftState;x,y:Integer); begin SetFocus; MoveInputCaretTo(x,y,True); FMouseDown:=True; SetSelection(-1,0); FMouseDownInputPos:=FInputPos; Invalidate; end; procedure TCmdBox.MouseUp(Button:TMouseButton;Shift:TShiftState;x,y:Integer); begin FMouseDown:=False; end; destructor TColorstring.Destroy; begin Clear; inherited Destroy; end; procedure TCmdBox.ScrollUp; var n:Integer; Firstwidestring : TColorstring; begin Firstwidestring:=FLines[0]; for n:=0 to Length(FLines)-2 do Flines[n] := FLines[n+1]; Firstwidestring.Clear; Firstwidestring.FDefaultBackGround := FBackGroundColor; Flines[High(Flines)]:=Firstwidestring; end; procedure TCmdBox.TextColors(FC,BC:TColor); begin FCurrentColor := FC; FCurrentBackGround := BC; end; procedure TCmdBox.TextColor(C:TColor); begin FCurrentColor:=C; end; procedure TCmdBox.TextBackGround(C:TColor); begin FCurrentBackGround:=C; end; procedure TCmdBox.TranslateScrollBarPosition; var GLine,Line : Integer; He :Integer; begin if (FLineOfTopLine<FLineHeights[FTopLine]) and (FLineHeightSum[FTopLine]+FLineOfTopLine=FVSBPos) then exit; UpdateLineHeights; Line := 0; GLine := 0; He:=FLineHeights[Line]; while (Line<LineCount-1) and (Gline+He<=FVSBPos) do begin Inc(Line); Inc(Gline,He); He:=FLineHeights[Line]; end; FTopLine := Line; FLineOfTopLine := FVSBPos-GLine; Invalidate; end; procedure TCmdBox.WMVScroll(var message: TLMVScroll); var CurrentPos :Integer; begin CurrentPos:=FLineHeightSum[FTopLine]+FLineOfTopLine; case message.ScrollCode of SB_TOP: CurrentPos := 0; SB_BOTTOM: CurrentPos := FVisibleLineCount-FPageHeight; SB_LINEDOWN: Inc(CurrentPos); SB_LINEUP: Dec(CurrentPos); SB_PAGEDOWN: Inc(CurrentPos,FPageHeight); SB_PAGEUP: Dec(CurrentPos,FPageHeight); SB_THUMBPOSITION: CurrentPos := message.Pos; SB_THUMBTRACK: CurrentPos := message.Pos; SB_ENDSCROLL: Exit; end; if CurrentPos<0 then CurrentPos:=0 else if Currentpos>FVisibleLineCount-FPageHeight then CurrentPos:=FVisibleLineCount-FPageHeight; {$IFNDEF LCLGTK} ScrollBarPosition(SB_VERT, CurrentPos); {$ENDIF} FVSBPos:=CurrentPos; TranslateScrollBarPosition; end; procedure TCmdBox.ScrollBarRange(Which: Integer; aRange,aPage: Integer); var ScrollInfo: TScrollInfo; begin if HandleAllocated then begin FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_RANGE or SIF_PAGE or SIF_DISABLENOSCROLL; // Dont't know, someone told me to kick it...so i did:P // {$ifdef Unix} { ScrollInfo.fMask := ScrollInfo.fMask or SIF_UPDATEPOLICY; if goThumbTracking in Options then ScrollInfo.ntrackPos := SB_POLICY_CONTINUOUS else ScrollInfo.ntrackPos := SB_POLICY_DISCONTINUOUS;} // {$endif}} ScrollInfo.nMin := 0; ScrollInfo.nMax := ARange; if APage<0 then APage := 0; ScrollInfo.nPage := APage; SetScrollInfo(Handle, Which, ScrollInfo, True); end; end; procedure TCmdBox.ScrollBarPosition(Which, Value: integer); var ScrollInfo : TScrollInfo; Vis : Boolean; begin if HandleAllocated then begin if Which = SB_VERT then Vis := FVSbVisible else FillChar(ScrollInfo, SizeOf(ScrollInfo), 0); ScrollInfo.cbSize := SizeOf(ScrollInfo); ScrollInfo.fMask := SIF_POS; ScrollInfo.nPos := Value; SetScrollInfo(Handle, Which, ScrollInfo, Vis); end; end; function TCmdBox.GetSystemMetricsGapSize(const Index:Integer):Integer; begin {$ifdef LCLWIN32} result:=0; {$else} result:=3; {$endif} end; procedure TCmdBox.SetBackGroundColor(c:TColor); begin if c<>FBackGroundColor then begin FBackGroundColor:=c; Invalidate; end; end; procedure TCmdBox.SetFont(F:TFont); var DC : HDC; Save : THandle; Metrics : TTextMetric; begin FFont.Assign(F); Canvas.Font := FFont; DC := GetDC(0); Save := SelectObject(DC,FFont.Handle); GetTextMetrics(DC, Metrics); SelectObject(DC, Save); ReleaseDC(0, DC); FCharHeight := Abs(Metrics.tmHeight)+2; Invalidate; end; // Still a Bug: Try having a cmdline with more lines than fit on screen : update doesn't work anymore... procedure TCmdBox.MakeInputVisible; var y : Integer; begin if not FAutoFollow then Exit; UpdateLineHeights; y:=FLineHeightSum[FInputY]+FInputBuffer.GetLineOfCaret(FClientWidth,FCaretX,FCaretWidth); if y>=FLineHeightSum[FTopLine]+FLineOfTopLine+FPageHeight then begin While y>=FLineHeightSum[FTopLine]+FLineHeights[FTopLine]+FPageHeight-1 do Inc(FTopLine); FLineOfTopLine:=y-(FLineHeightSum[FTopLine]+FPageHeight)+1; end else if y<FLineHeightSum[FTopLine]+FLineOfTopLine then begin FLineOfTopLine:=0; While y<FLineHeightSum[FTopLine] do Dec(FTopLine); FLineOfTopLine:=y-FLineHeightSum[FTopLine]; end; y:=FLineHeightSUm[FTopLine]+FLineOfTopLine; if y<>FVSBPos then begin FVSBPos:=y; if HandleAllocated then ScrollBarPosition(SB_Vert,y); end; end; procedure TCmdBox.MakeOutVisible; var y : Integer; begin if not FAutoFollow then Exit; UpdateLineHeights; y:=FLineHeightSum[FOutY]+FLines[FOutY].GetLineOfCaret(FClientWidth,FOutX,FCaretWidth); if y>=FLineHeightSum[FTopLine]+FLineOfTopLine+FPageHeight then begin While y>=FLineHeightSum[FTopLine]+FLineHeights[FTopLine]+FPageHeight-1 do Inc(FTopLine); FLineOfTopLine:=y-(FLineHeightSum[FTopLine]+FPageHeight)+1; end else if y<FLineHeightSum[FTopLine]+FLineOfTopLine then begin FLineOfTopLine:=0; While y<FLineHeightSum[FTopLine] do Dec(FTopLine); FLineOfTopLine:=y-FLineHeightSum[FTopLine]; end; y:=FLineHeightSUm[FTopLine]+FLineOfTopLine; if y<>FVSBPos then begin FVSBPos:=y; if HandleAllocated then ScrollBarPosition(SB_Vert,y); end; end; procedure TCmdBox.SetHistoryPos(v:Integer); begin if FInputIsPassWord then Exit; if v<0 then v:=FHistoryLength-1 else if v>=FHistoryLength then v:=0; if v<>FHistoryPos then begin if FHistoryPos=0 then begin FHistory[0].Clear; FHistory[0].PartOverWrite(FInputBuffer,FInputMinPos,FInputBuffer.Length,0); end; FInputBuffer.MaximumLength(FInputMinPos+FHistory[v].Length); FInputBuffer.OverWrite(FHistory[v],FInputMinPos); if FInputPos>FInputBuffer.Length then begin FInputPos:=FInputBuffer.Length; FCaretX:=FInputX+FInputPos; end; FHistoryPos:=v; end; if Assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); MakeInputVisible; AdjustLineHeight(FInputY); AdjustScrollBars; Invalidate; end; procedure TCmdBox.UTF8KeyPress(var Key:TUTF8Char); begin if not FInput then Exit; if key>=#32 then begin if FSelStart<>-1 then DeleteSelected; FInputBuffer.Insert(FInputPos,key,FInputColor,FInputBackGround); Inc(FInputPos); FCaretX:=FInputX+FInputPos; FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); end; if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; MakeInputVisible; If FInputVisible then Invalidate; end; procedure TCmdBox.KeyDown(var Key:Word;Shift:TShiftState); var s : String; i : Integer; begin if not FInput then Exit; case Key of VK_END: begin key:=0; if (not (ssAlt in Shift)) and FInput and (FInputPos<>FInputBuffer.Length) then begin if not (ssShift in Shift) then SetSelection(-1,0) else RightSelection(FInputPos,FInputBuffer.Length); FInputPos:=FInputBuffer.Length; FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_HOME: begin key:=0; if (not (ssAlt in Shift)) and FInput and (FInputPos<>FInputMinPos) then begin if not (ssShift in Shift) then SetSelection(-1,0) else LeftSelection(FInputMinPos,FInputPos); FInputPos:=FInputMinPos; FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_LEFT: begin if (not (ssAlt in Shift)) and (FInput and (FInputPos>FInputMinPos)) then begin if not (ssShift in Shift) then SetSelection(-1,0) else LeftSelection(FInputPos-1,FInputPos); Dec(FInputPos); FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_UP: begin if (not (ssAlt in Shift)) and FInput then begin SetSelection(-1,0); SetHistoryPos(FHistoryPos+1); end; end; VK_DOWN: begin if (not (ssAlt in Shift)) and FInput then begin SetSelection(-1,0); SetHistoryPos(FHistoryPos-1); end; end; VK_RIGHT: begin if (not (ssAlt in Shift)) and FInput and (FInputPos<FInputBuffer.Length) then begin if not (ssShift in Shift) then SetSelection(-1,0) else RightSelection(FInputPos,FInputPos+1); Inc(FInputPos); FCaretX:=FInputX+FInputPos; MakeInputVisible; Invalidate; end; end; VK_DELETE: begin if FInput then begin if FSelStart<>-1 then DeleteSelected else FInputBuffer.Delete(FInputPos); FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); MakeInputVisible; AdjustLineHeight(FInputY); AdjustScrollBars; end; end; VK_RETURN: begin if FInput then begin s := FInputBuffer.GetString; s := Copy(s,FUTF8InputMinPos+1,Length(s)); if (FHistoryPos=0) then begin if (FInputBuffer.Length=FInputMinPos) or FInputIsPassWord then begin DeleteHistoryEntry(0); end else begin i:=HistoryIndexOf(s); if i>=0 then begin DeleteHistoryEntry(0); MakeFirstHistoryEntry(i); end else begin FHistory[0].Clear; FHistory[0].PartOverWrite(FInputBuffer,FInputMinPos,FInputBuffer.Length,0); end; end; end else begin DeleteHistoryEntry(0); MakeFirstHistoryEntry(FHistoryPos); end; FInput := False; if FLines[FOutY].Length<>0 then begin if FOutY>=FLineCount-1 then begin ScrollUp; Dec(FOutY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; FLines[FOutY+1].Clear; FLines[FOutY+1].OverWrite(FLines[FOutY],0); FLines[FOutY].Clear; if FInputIsPassWord then FLines[FOutY].OverWritePW(FInputBuffer,FInputMinPos,FInputX,FPassWordChar) else FLines[FOutY].OverWrite(FInputBuffer,FInputX); end else begin if FInputIsPassWord then FLines[FOutY].OverWritePW(FInputBuffer,FInputMinPos,FInputX,FPassWordChar) else FLines[FOutY].OverWrite(FInputBuffer,FInputX); end; Inc(FOutY); if FOutY>=FLineCount then begin ScrollUp; Dec(FOutY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; FOutX := 0; FCaretX := 0; FInputBuffer.Clear; if Assigned(OnInput) then OnInput(Self,s); if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; Invalidate; end; end; VK_BACK: begin if FInput then begin if FSelStart<>-1 then DeleteSelected else begin If (FInputPos>FInputMinPos) then begin Dec(FInputPos); FInputBuffer.Delete(FInputPos); FCaretX:=FInputX+FInputPos; end; end; FHistoryPos:=0; if assigned(FOnInputChange) then FOnInputChange(Self,FInputBuffer); if Assigned(OnAny) then OnAny(Self,FInputBuffer); AdjustScrollBars; MakeInputVisible; If FInputVisible then Invalidate; end; end; VK_C: begin if (FInput) and (ssCtrl in Shift) then CopyToClipBoard; end; VK_V: begin if (FInput) and (ssCtrl in Shift) then PasteFromClipBoard; end; VK_X: begin if (FInput) and (ssCtrl in Shift) then CutToClipBoard; end; VK_A: begin if (FInput) and (ssCtrl in Shift) then begin SetSelection(FInputMinPos,FInputBuffer.Length); FInputPos:=FInputBuffer.Length; MakeInputVisible; if FInputVisible then Invalidate; end; end; end; if Assigned(OnAny) then OnAny(Self,FInputBuffer); end; procedure TCmdBox.InsertHistory; var i : Integer; t : TColorstring; begin t:=FHistory[FHistoryMax-1]; for i:=FHistoryMax-2 downto 0 do begin FHistory[i+1]:=FHistory[i]; end; FHistory[0] := t; FHistoryPos := 0; If FHistoryLength<FHistoryMax then Inc(FHistoryLength); end; procedure TCmdBox.StartRead(DFC,DBC:TColor;const Desc:String;IFC,IBC:TColor); var Pp,i,l:Integer; begin Inc(FCaretX,UTF8Length(Desc)); FInputX := FOutX; if FLines[FOutY].Length=0 then FInputY := FOutY else FInputY:=FOutY+1; FInputVisible := True; FInput := True; FUTF8InputMinPos := Length(Desc); i:=0; Pp:=1; while Pp<=Length(Desc) do begin if Desc[Pp]=#27 then begin if Pp+1>Length(Desc) then Break; case Desc[Pp+1] of #9,#10,#32,#46,#196: begin if Pp+2>Length(Desc) then Break; //Incomplete Escape Seq...ignore l:=3; end; #33,#47,#197: begin if Pp+3>Length(Desc) then Break; //Incomplete Escape Seq...ignore l:=4; end; else begin l:=2; end; end; end else l:=UTF8CharacterLength(@Desc[PP]); FInputBuffer.OverWriteChar(Copy(Desc,Pp,l),i,FGraphicCharWidth,DFC,DBC); Inc(i); Inc(Pp,l); end; FInputPos := i; FInputMinPos := i; // FInputBuffer.OverWrite(Desc,0,DFC,DBC); FInputIsPassWord := False; FInputColor := IFC; FInputBackground := IBC; FInputBuffer.PassWordStart:=MaxInt; InsertHistory; MakeInputVisible; end; procedure TCmdBox.StartReadPassWord(DFC,DBC:TColor;const Desc:string;IFC,IBC:TColor); begin StartRead(DFC,DBC,Desc,IFC,IBC); FInputBuffer.PassWordStart := UTF8Length(Desc); FInputBuffer.PassWordChar := FPassWordChar; FInputIsPassWord := True; end; procedure TCmdBox.StopRead; begin FInput:=False; end; procedure TCmdBox.DeleteHistoryEntry(i:Integer); var j:Integer; Temp:TColorstring; begin Temp:=FHistory[i]; for j:=i to FHistoryLength-2 do FHistory[j]:=FHistory[j+1]; FHistory[FHistoryLength-1]:=Temp; Dec(FHistoryLength); if FHistoryPos>=i then Dec(FHistoryPos); end; procedure TCmdBox.MakeFirstHistoryEntry(i:Integer); var Temp:TColorstring; begin if FHistoryPos<>0 then begin Temp:=FHistory[i]; for i:=i-1 downto 0 do FHistory[i+1]:=FHistory[i]; FHistory[0]:=Temp; end; end; procedure TCmdBox.Clear; var i:Integer; begin for i:=0 to Length(FLines)-1 do Flines[i].Clear; FCaretX := 0; FInputY := 0; FOutX := 0; FOutY := 0; if FInput then FInputY:=0; Invalidate; end; procedure TCmdBox.Writeln(s:string); begin write(s+#13#10); end; const AnsiColors:array['0'..'7'] of TColor=(clBlack,clRed,clGreen,clYellow,clBlue,clFuchsia,clAqua,clWhite); procedure TCmdBox.IntWrite; var Pp : Integer; l : Integer; s : String; EscPos : Integer; EscSubMode : Integer; begin S := FCurrentString; Pp := 1; while Pp<=Length(S) do begin l:=1; case FEscapeMode of escmNone: begin if S[Pp]=#27 then begin case FEscapeCodeType of esctCmdBox: begin FEscapeMode := escmOperation; FEscapeData := ''; end; esctAnsi: begin FEscapeMode := escmAnsiOperation; FEscapeData := ''; end; esctNone: begin // Simply ignore it end; end; end else begin l:=UTF8CharacterLength(@S[Pp]); if l=1 then begin case s[Pp] of #13:FOutX:=0; #10: begin AdjustLineHeight(FOutY); if FLines[FOutY].Length=0 then FLines[FOutY].DefaultBackGround:=FCurrentBackGround; Inc(FOutY); if FOutY>=Length(FLines) then begin ScrollUp; Dec(FOutY); AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; end; else begin FLines[FOutY].OverWrite(s[Pp],FOutX,FCurrentColor,FCurrentBackGround); Inc(FOutX); end; end; end else begin FLines[FOutY].OverWrite(Copy(s,Pp,l),FOutX,FCurrentColor,FCurrentBackGround); Inc(FOutX); end; end; end; escmOperation: begin case S[Pp] of #9,#10,#32,#46,#196: begin FEscapeData := S[Pp]; FEscapeMode := escmData1; end; #33,#47,#197: begin FEscapeData := S[Pp]; FEscapeMode := escmData2; end; else begin FLines[FOutY].OverWriteChar(#27+S[Pp],FOutX,FGraphicCharWidth,FCurrentColor,FCurrentBackGround); Inc(FOutX); FEscapeMode:=escmNone; end; end; end; escmData1: begin FLines[FOutY].OverWriteChar(#27+FEscapeData+S[Pp],FOutX,FGraphicCharWidth,FCurrentColor,FCurrentBackGround); Inc(FOutX); FEscapeMode:=escmNone; end; escmData2: begin FEscapeData := FEscapeData+S[Pp]; FEscapeMode := escmData1; end; escmAnsiOperation: begin case S[Pp] of '[':FEscapeMode:=escmAnsiSquare; else FEscapeMode:=escmNone; end; end; escmAnsiSquare: begin case S[Pp] of 'm': begin EscPos := 1; EscSubMode := 0; while EscPos<=Length(FEscapeData) do begin case EscSubMode of 0: begin case FEscapeData[EscPos] of '0': begin // No Reset Values know here...just assume FCurrentColor:=clSilver; FCurrentBackGround:=clBlack; end; '7': begin // Reverse? What now... end; '3':EscSubMode:=3; '4':EscSubMode:=4; end; end; 1: begin // Just collect the expected ";", not sure what to do if it isn't there... EscSubMode:=0; end; 3: begin if FEscapeData[EscPos] in ['0'..'7'] then FCurrentColor:=AnsiColors[FEscapeData[EscPos]]; EscSubMode:=1; end; 4: begin if FEscapeData[EscPos] in ['0'..'7'] then FCurrentBackGround:=AnsiColors[FEscapeData[EscPos]]; EscSubMode:=1; end; end; Inc(EscPos); end; FEscapeMode:=escmNone; end; else begin FEscapeData:=FEscapeData+S[Pp]; end; end; end; end; Inc(Pp,l); end; if FInput then begin if FLines[FOutY].Length=0 then begin if (FInputY<>FOutY) then FInputY:=FOutY; end else begin if FInputY<>FOutY+1 then FInputY:=FOutY+1; end; if FInputY>=FLineCount then begin ScrollUp; Dec(FOutY); Dec(FInputY); FInputY:=FOutY; AdjustLineHeight(FOutY); UpdateLineHeights; TranslateScrollBarPosition; end; MakeInputVisible; end else MakeOutVisible; AdjustLineHeight(FOutY); if not FInput then FCaretX:=FOutX; AdjustScrollBars; end; procedure TCmdBox.SetOutY(v:Integer); begin if v>FLineCount-1 then v:=FLineCount-1; FOutY:=v; end; procedure TCmdBox.Resize; begin inherited Resize; AdjustScrollBars; if FVSBPos>=FVisibleLineCount-FPageHeight then begin FVSBPos:=FVisibleLineCount-FPageHeight; if FVSBPos<0 then FVSBPos:=0; end; TranslateScrollBarPosition; end; function TCmdBox.AdjustLineHeight(i:Integer):Integer; var LineC : Integer; LineC2 : Integer; begin if (FInputY=i) then begin LineC := FLines[i].LineCount(FClientWidth,-1,FCaretWidth); LineC2 := FInputBuffer.LineCount(FClientWidth,FCaretX,FCaretWidth); if LineC2>LineC then LineC:=LineC2; end else LineC:=FLines[i].LineCount(FClientWidth,-1,FCaretWidth); Result := LineC; FLineHeights[i] := Result; end; function TCmdBox.UpdateLineHeights:integer; var i:integer; begin Result:=0; for i:=0 to FLineCount-1 do begin FLineHeightSum[i]:=Result; Inc(Result,AdjustLineHeight(i)); end; end; procedure TCmdBox.AdjustScrollBars; var LH : Integer; begin FClientWidth := Width-FVSBWidth; FClientHeight := Height; FPageHeight := FClientHeight div FCharHeight; FVisibleLines := FPageHeight+ord(FClientHeight mod FCharHeight<>0); LH := UpdateLineHeights; if LH<>FVisibleLineCount then begin FVisibleLineCount:=LH; if FVisibleLineCount<=FVSBPos+FPageHeight then begin FVSBPos:=FVisibleLineCount-FPageHeight; if FVSBPos<0 then FVSBPos:=0; if HandleAllocated then ScrollBarPosition(SB_Vert,FVSBPos); TranslateScrollBarPosition; end; end; if FVisibleLineCount<FPageHeight then begin if HandleAllocated then begin ScrollBarPosition(SB_VERT,0); ScrollBarRange(SB_VERT,0,FPageHeight); ShowScrollBar(Handle,SB_VERT,True); { Disable the Scrollbar ! } end; end else begin if HandleAllocated then begin ScrollBarRange(SB_VERT,FVisibleLineCount,FPageHeight); ShowScrollBar(Handle,SB_VERT,True); end; end; Invalidate; end; procedure TCmdBox.SetTopLine(Nr:Integer); begin if Nr<>FTopLine then begin FTopLine:=Nr; AdjustScrollBars; end; end; procedure TCmdBox.SetLineCount(c: Integer); var i:Integer; begin if c<1 then c:=1; if c<>FLineCount then begin for i:=0 to FLineCount-1 do FLines[i].Free; FLineCount:=c; SetLength(FLines,FLinecount); for i:=0 to FlineCount-1 do begin FLines[i]:=TColorstring.Create(Canvas.Font); FLines[i].DefaultBackGround:=FBackGroundColor; FLines[i].TabWidth:=FTabWidth; end; SetLength(FLineHeights,FLineCount); SetLength(FLineHeightSum,FLineCount); AdjustScrollBars; end; end; procedure TCmdBox.Paint; Var y,m : Integer; CurrentLine : Integer; begin inherited Paint; with canvas do begin if (csdesigning in componentstate) then begin Brush.Style := bsSolid; Brush.Color := clBlack; FillRect(0,0,FClientWidth,FClientHeight); exit; end; Font := FFont; Brush.Style := bsSolid; m := FVisibleLines-1; y := -FLineOfTopLine; CurrentLine := FTopLine; while (y<=m) and (CurrentLine<LineCount) do begin FLines[CurrentLine].LineOutAndFill(Canvas,0,y*FCharHeight,0,FClientWidth,FCharHeight,FGraphicCharWidth,-1,FBackGroundColor,FCaretColor,FCaretHeight,FCaretWidth,FCaretYShift,False); if (FInput) and (FInputY=CurrentLine) then begin if FInputIsPassWord then begin FInputBuffer.LineOutAndFill(Canvas,0,y*FCharHeight,0,FClientWidth,FCharHeight,FGraphicCharWidth,FCaretX,FBackGroundColor,FCaretColor,FCaretHeight,FCaretWidth,FCaretYShift,FCaretVisible and Focused); end else begin FInputBuffer.LineOutAndFill(Canvas,0,y*FCharHeight,0,FClientWidth,FCharHeight,FGraphicCharWidth,FCaretX,FBackGroundColor,FCaretColor,FCaretHeight,FCaretWidth,FCaretYShift,FCaretVisible and Focused); end; end; Inc(y,FLineHeights[CurrentLine]); Inc(CurrentLine); end; y:=y*FCharHeight; if y<FClientHeight then begin Brush.Color := FBackGroundColor; Brush.Style := bsSolid; FillRect(0,y,FClientWidth,FClientHeight); end; end; end; procedure TCmdBox.CaretTimerExecute(Sender:TObject); begin if Focused then begin if not Assigned(WakeMainThread) then MultiWrite; FCaretVisible:=not FCaretVisible; Invalidate; end; end; procedure TCmdBox.CreateWnd; begin inherited CreateWnd; FVSBWidth := GetSystemMetrics(SM_CXVSCROLL) + GetSystemMetricsGapSize(SM_CXVSCROLL); SetFont(FFont); if FCaretHeight=-1 then FCaretHeight := FFont.GetTextHeight('A')-3; { Little Hack to prevent "grey bar" Scrollbar at StartUp } ShowScrollBar(Handle,SB_VERT,False); ShowScrollBar(Handle,SB_VERT,True); AdjustScrollBars; end; procedure TCmdBox.CreateParams(var Params:TCreateParams); const ClassStylesOff = CS_VREDRAW or CS_HREDRAW; begin inherited CreateParams(Params); with Params do begin WindowClass.Style:=WIndowClass.Style and DWORD(not ClassStylesOff); Style := Style or WS_VSCROLL or WS_HSCROLL or WS_CLIPCHILDREN; end; end; constructor TCmdBox.Create(AComponent:TComponent); var i:integer; begin inherited Create(AComponent); System.InitCriticalSection(FLock); FStringBuffer := TStringList.Create; FCharHeight := 15; // Just a random value to prevent stupid exceptions FSelStart := -1; FLineCount := 1000; FInputVisible := False; FBackGroundColor := clBlack; FGraphicCharWidth := 10; FInputBuffer := TColorstring.Create(Canvas.Font); FEscapeCodeType := esctCmdBox; FAutoFollow := True; SetLength(FLines,FLineCount); SetLength(FLineHeights,FLineCount); SetLength(FLineHeightSum,FLineCount); FTabWidth := 60; for i:=0 to FLineCount-1 do begin FLines[i] := TColorstring.Create(Canvas.Font); FLines[i].DefaultBackGround := FBackGroundColor; FLines[i].TabWidth := FTabWidth; end; FCaretTimer := TTimer.Create(self); FCaretTimer.Interval := 500; FCaretTimer.OnTimer := @carettimerexecute; FCaretTimer.Enabled := True; FCaretVisible := True; FVSBVisible := True; FFont := Canvas.Font; FCurrentColor := clSilver; FCurrentBackground := clBlack; DoubleBuffered := True; FFont.Color := ClSilver; FCaretColor := clWhite; FCaretType := cartLine; FCaretWidth := 1; FCaretHeight := -1; FCaretYShift := 3; FInputSelBackground := clWhite; FInputSelColor := clBlue; FHistoryMax := 10; FHistoryLength := 0; SetBounds(0,0,200,200); SetLength(FHistory,FHistoryMax); for i:=0 to FHistoryMax-1 do FHistory[i]:=TColorstring.Create(Canvas.Font); end; destructor TCmdBox.Destroy; var i : Integer; begin FCaretTimer.Enabled := False; System.DoneCriticalSection(FLock); FInputBuffer.Free; FStringBuffer.Free; for i:=0 to Length(FLines)-1 do FLines[i].Free; for i:=0 to Length(FHistory)-1 do FHistory[i].Free; inherited Destroy; end; procedure Register; begin RegisterComponents('Other',[TCmdBox]); end; initialization {$I tcmdbox.lrs} end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/wnmainform.lrs���������������������������������������������������0000644�0001750�0000144�00000014364�11077656332�021136� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Das ist eine automatisch erzeugte Lazarus-Ressourcendatei } LazarusResources.Add('TWMainForm','FORMDATA',[ 'TPF0'#10'TWMainForm'#9'WMainForm'#4'Left'#3'?'#1#6'Height'#3#224#1#3'Top'#3 +'Q'#1#5'Width'#3#208#2#13'ActiveControl'#7#6'CmdBox'#7'Caption'#6#27'TCmdBox' +' Example Application'#12'ClientHeight'#3#224#1#11'ClientWidth'#3#208#2#8'On' +'Create'#7#10'FormCreate'#9'OnDestroy'#7#11'FormDestroy'#8'Position'#7#14'po' +'ScreenCenter'#10'LCLVersion'#6#6'0.9.25'#0#6'TPanel'#10'RightPanel'#4'Left' +#3'C'#2#6'Height'#3#224#1#5'Width'#3#141#0#5'Align'#7#7'alRight'#12'ClientHe' +'ight'#3#224#1#11'ClientWidth'#3#141#0#8'TabOrder'#2#0#0#6'TLabel'#6'Label1' +#4'Left'#2#16#6'Height'#2#14#3'Top'#2#8#5'Width'#2'#'#7'Caption'#6#7'History' +#11'ParentColor'#8#0#0#7'TButton'#7'Button1'#4'Left'#2#16#6'Height'#2#25#3'T' +'op'#3#184#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0 +#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#12'End Programm'#7'OnClick'#7 +#12'Button1Click'#8'TabOrder'#2#0#0#0#8'TListBox'#11'HistoryList'#4'Left'#2 +#16#6'Height'#3#29#1#3'Top'#2#24#5'Width'#2'm'#7'Anchors'#11#5'akTop'#6'akLe' +'ft'#7'akRight'#8'akBottom'#0#8'TabOrder'#2#1#0#0#7'TButton'#7'Button2'#4'Le' +'ft'#2#16#6'Height'#2#25#3'Top'#3';'#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft' +#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Caption'#6#5'C' +'lear'#7'OnClick'#7#12'Button2Click'#8'TabOrder'#2#2#0#0#9'TComboBox'#10'CbS' +'etCaret'#4'Left'#2#16#6'Height'#2#21#3'Top'#3#141#1#5'Width'#2'm'#7'Anchors' +#11#6'akLeft'#7'akRight'#8'akBottom'#0#16'AutoCompleteText'#11#22'cbactEndOf' +'LineComplete'#20'cbactSearchAscending'#0#10'ItemHeight'#2#13#9'ItemIndex'#2 +#0#13'Items.Strings'#1#6#10'Caret-Line'#6#13'Caret-Sub-Bar'#6#13'Caret-Big-B' +'ar'#0#8'OnChange'#7#16'CbSetCaretChange'#5'Style'#7#14'csDropDownList'#8'Ta' +'bOrder'#2#3#4'Text'#6#10'Caret-Line'#0#0#7'TButton'#7'Button3'#4'Left'#2#16 +#6'Height'#2#25#3'Top'#3'a'#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRigh' +'t'#8'akBottom'#0#7'Caption'#6#7'Process'#7'OnClick'#7#12'Button3Click'#8'Ta' +'bOrder'#2#4#0#0#0#9'TSplitter'#9'Splitter1'#4'Left'#3'>'#2#6'Height'#3#224#1 +#5'Width'#2#5#5'Align'#7#7'alRight'#7'Beveled'#9#12'ResizeAnchor'#7#7'akRigh' +'t'#0#0#7'TCmdBox'#6'CmdBox'#6'Height'#3#224#1#5'Width'#3'>'#2#5'Align'#7#8 +'alClient'#10'CaretColor'#4#255#128#0#0#9'CaretType'#7#8'cartUser'#10'CaretW' +'idth'#2#1#11'CaretHeight'#2#13#11'CaretYShift'#2#3#7'OnInput'#7#11'CmdBoxIn' +'put'#9'LineCount'#3#232#3#12'Font.CharSet'#7#12'ANSI_CHARSET'#10'Font.Color' +#7#8'clSilver'#11'Font.Height'#2#240#9'Font.Name'#6#5'Arial'#10'Font.Pitch'#7 +#10'fpVariable'#15'BackGroundColor'#7#6'clNavy'#8'TabWidth'#2'<'#12'PassWord' +'Char'#6#1'*'#10'HistoryMax'#2#10#13'InputSelColor'#7#8'clPurple'#18'InputSe' +'lBackGround'#7#8'clSilver'#13'CaretInterval'#3#244#1#23'GraphicalCharacterW' +'idth'#2#10#10'AutoFollow'#9#0#0#6'TTimer'#11'ReaderTimer'#8'Interval'#3#188 +#2#7'OnTimer'#7#16'ReaderTimerTimer'#4'left'#2'B'#3'top'#2'K'#0#0#6'TTimer' +#12'ProcessTimer'#7'Enabled'#8#8'Interval'#2'd'#7'OnTimer'#7#17'ProcessTimer' +'Timer'#4'left'#2'h'#3'top'#2'K'#0#0#0#10'TWMainForm'#9'WMainForm'#4'Left'#3 +'?'#1#6'Height'#3#224#1#3'Top'#3'Q'#1#5'Width'#3#208#2#13'ActiveControl'#7#6 +'CmdBox'#7'Caption'#6#27'TCmdBox Example Application'#12'ClientHeight'#3#224 +#1#11'ClientWidth'#3#208#2#8'OnCreate'#7#10'FormCreate'#9'OnDestroy'#7#11'Fo' +'rmDestroy'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.9.25'#0#6 +'TPanel'#10'RightPanel'#4'Left'#3'C'#2#6'Height'#3#224#1#5'Width'#3#141#0#5 +'Align'#7#7'alRight'#12'ClientHeight'#3#224#1#11'ClientWidth'#3#141#0#8'TabO' +'rder'#2#0#0#6'TLabel'#6'Label1'#4'Left'#2#16#6'Height'#2#14#3'Top'#2#8#5'Wi' +'dth'#2'#'#7'Caption'#6#7'History'#11'ParentColor'#8#0#0#7'TButton'#7'Button' +'1'#4'Left'#2#16#6'Height'#2#25#3'Top'#3#184#1#5'Width'#2'm'#7'Anchors'#11#6 +'akLeft'#7'akRight'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#4#7'Captio' +'n'#6#12'End Programm'#7'OnClick'#7#12'Button1Click'#8'TabOrder'#2#0#0#0#8'T' +'ListBox'#11'HistoryList'#4'Left'#2#16#6'Height'#3#29#1#3'Top'#2#24#5'Width' +#2'm'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#8'TabOrder'#2 +#1#0#0#7'TButton'#7'Button2'#4'Left'#2#16#6'Height'#2#25#3'Top'#3';'#1#5'Wid' +'th'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#25'BorderSpacing.' +'InnerBorder'#2#4#7'Caption'#6#5'Clear'#7'OnClick'#7#12'Button2Click'#8'TabO' +'rder'#2#2#0#0#9'TComboBox'#10'CbSetCaret'#4'Left'#2#16#6'Height'#2#21#3'Top' +#3#141#1#5'Width'#2'm'#7'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#16'A' +'utoCompleteText'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#10 +'ItemHeight'#2#13#9'ItemIndex'#2#0#13'Items.Strings'#1#6#10'Caret-Line'#6#13 +'Caret-Sub-Bar'#6#13'Caret-Big-Bar'#0#8'OnChange'#7#16'CbSetCaretChange'#5'S' +'tyle'#7#14'csDropDownList'#8'TabOrder'#2#3#4'Text'#6#10'Caret-Line'#0#0#7'T' +'Button'#7'Button3'#4'Left'#2#16#6'Height'#2#25#3'Top'#3'a'#1#5'Width'#2'm'#7 +'Anchors'#11#6'akLeft'#7'akRight'#8'akBottom'#0#7'Caption'#6#7'Process'#7'On' +'Click'#7#12'Button3Click'#8'TabOrder'#2#4#0#0#0#9'TSplitter'#9'Splitter1'#4 ,'Left'#3'>'#2#6'Height'#3#224#1#5'Width'#2#5#5'Align'#7#7'alRight'#7'Beveled' +#9#12'ResizeAnchor'#7#7'akRight'#0#0#7'TCmdBox'#6'CmdBox'#6'Height'#3#224#1#5 +'Width'#3'>'#2#5'Align'#7#8'alClient'#10'CaretColor'#4#255#128#0#0#9'CaretTy' +'pe'#7#8'cartUser'#10'CaretWidth'#2#1#11'CaretHeight'#2#13#11'CaretYShift'#2 +#3#7'OnInput'#7#11'CmdBoxInput'#9'LineCount'#3#232#3#12'Font.CharSet'#7#12'A' +'NSI_CHARSET'#10'Font.Color'#7#8'clSilver'#11'Font.Height'#2#240#9'Font.Name' +#6#5'Arial'#10'Font.Pitch'#7#10'fpVariable'#15'BackGroundColor'#7#6'clNavy'#8 +'TabWidth'#2'<'#12'PassWordChar'#6#1'*'#10'HistoryMax'#2#10#13'InputSelColor' +#7#8'clPurple'#18'InputSelBackGround'#7#8'clSilver'#13'CaretInterval'#3#244#1 +#23'GraphicalCharacterWidth'#2#10#10'AutoFollow'#9#0#0#6'TTimer'#11'ReaderTi' +'mer'#8'Interval'#3#188#2#7'OnTimer'#7#16'ReaderTimerTimer'#4'left'#2'B'#3't' +'op'#2'K'#0#0#6'TTimer'#12'ProcessTimer'#7'Enabled'#8#8'Interval'#2'd'#7'OnT' +'imer'#7#17'ProcessTimerTimer'#4'left'#2'h'#3'top'#2'K'#0#0#0 ]); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/COPYING����������������������������������������������������������0000644�0001750�0000144�00000105741�11077656332�017272� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU 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. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>.�������������������������������doublecmd-0.7.1/components/CmdLine/CmdLineExample.lpi�����������������������������������������������0000644�0001750�0000144�00000014176�11077656332�021575� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <ProjectOptions> <PathDelim Value="\"/> <Version Value="6"/> <General> <MainUnit Value="0"/> <IconPath Value="./"/> <TargetFileExt Value=".exe"/> <ActiveEditorIndexAtStart Value="1"/> </General> <VersionInfo> <ProjectVersion Value=""/> <Language Value=""/> <CharSet Value=""/> </VersionInfo> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> </PublishOptions> <RunParams> <local> <FormatVersion Value="1"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> </local> </RunParams> <RequiredPackages Count="1"> <Item1> <PackageName Value="LCL"/> </Item1> </RequiredPackages> <Units Count="8"> <Unit0> <Filename Value="CmdLineExample.lpr"/> <IsPartOfProject Value="True"/> <UnitName Value="CmdLineExample"/> <CursorPos X="27" Y="11"/> <TopLine Value="1"/> <UsageCount Value="148"/> </Unit0> <Unit1> <Filename Value="wnmainform.pas"/> <ComponentName Value="WMainForm"/> <IsPartOfProject Value="True"/> <ResourceBaseClass Value="Form"/> <ResourceFilename Value="wnmainform.lrs"/> <UnitName Value="wnmainform"/> <CursorPos X="63" Y="113"/> <TopLine Value="63"/> <EditorIndex Value="0"/> <UsageCount Value="148"/> <Loaded Value="True"/> </Unit1> <Unit2> <Filename Value="..\ucmdline.pas"/> <UnitName Value="ucmdline"/> <CursorPos X="48" Y="1083"/> <TopLine Value="146"/> <UsageCount Value="4"/> </Unit2> <Unit3> <Filename Value="wnmainform.lfm"/> <CursorPos X="1" Y="1"/> <TopLine Value="1"/> <UsageCount Value="46"/> <SyntaxHighlighter Value="LFM"/> </Unit3> <Unit4> <Filename Value="tcmdbox.lrs"/> <CursorPos X="17" Y="1"/> <TopLine Value="1"/> <UsageCount Value="13"/> </Unit4> <Unit5> <Filename Value="ucmdline.pas"/> <UnitName Value="ucmdline"/> <CursorPos X="8" Y="30"/> <TopLine Value="1"/> <UsageCount Value="30"/> </Unit5> <Unit6> <Filename Value="..\uflowcharteditor.pas"/> <UnitName Value="uflowcharteditor"/> <CursorPos X="25" Y="1039"/> <TopLine Value="1015"/> <UsageCount Value="16"/> </Unit6> <Unit7> <Filename Value="ucmdbox.pas"/> <UnitName Value="uCmdBox"/> <CursorPos X="45" Y="1488"/> <TopLine Value="1448"/> <EditorIndex Value="1"/> <UsageCount Value="48"/> <Loaded Value="True"/> </Unit7> </Units> <JumpHistory Count="17" HistoryIndex="16"> <Position1> <Filename Value="ucmdbox.pas"/> <Caret Line="994" Column="6" TopLine="964"/> </Position1> <Position2> <Filename Value="ucmdbox.pas"/> <Caret Line="309" Column="26" TopLine="278"/> </Position2> <Position3> <Filename Value="ucmdbox.pas"/> <Caret Line="229" Column="66" TopLine="203"/> </Position3> <Position4> <Filename Value="ucmdbox.pas"/> <Caret Line="1349" Column="47" TopLine="1312"/> </Position4> <Position5> <Filename Value="ucmdbox.pas"/> <Caret Line="1532" Column="69" TopLine="1495"/> </Position5> <Position6> <Filename Value="ucmdbox.pas"/> <Caret Line="1557" Column="68" TopLine="1520"/> </Position6> <Position7> <Filename Value="ucmdbox.pas"/> <Caret Line="2159" Column="45" TopLine="2122"/> </Position7> <Position8> <Filename Value="ucmdbox.pas"/> <Caret Line="2160" Column="48" TopLine="2123"/> </Position8> <Position9> <Filename Value="ucmdbox.pas"/> <Caret Line="2162" Column="50" TopLine="2125"/> </Position9> <Position10> <Filename Value="ucmdbox.pas"/> <Caret Line="2174" Column="31" TopLine="2144"/> </Position10> <Position11> <Filename Value="ucmdbox.pas"/> <Caret Line="2181" Column="34" TopLine="2144"/> </Position11> <Position12> <Filename Value="ucmdbox.pas"/> <Caret Line="308" Column="1" TopLine="271"/> </Position12> <Position13> <Filename Value="ucmdbox.pas"/> <Caret Line="174" Column="93" TopLine="159"/> </Position13> <Position14> <Filename Value="ucmdbox.pas"/> <Caret Line="1491" Column="34" TopLine="1454"/> </Position14> <Position15> <Filename Value="ucmdbox.pas"/> <Caret Line="86" Column="1" TopLine="49"/> </Position15> <Position16> <Filename Value="ucmdbox.pas"/> <Caret Line="165" Column="32" TopLine="128"/> </Position16> <Position17> <Filename Value="ucmdbox.pas"/> <Caret Line="850" Column="20" TopLine="829"/> </Position17> </JumpHistory> </ProjectOptions> <CompilerOptions> <Version Value="5"/> <PathDelim Value="\"/> <CodeGeneration> <Checks> <RangeChecks Value="True"/> <OverflowChecks Value="True"/> </Checks> <Generate Value="Faster"/> </CodeGeneration> <Linking> <Debugging> <StripSymbols Value="True"/> </Debugging> <LinkSmart Value="True"/> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Debugging> <Exceptions Count="2"> <Item1> <Name Value="ECodetoolError"/> </Item1> <Item2> <Name Value="EFOpenError"/> </Item2> </Exceptions> </Debugging> </CONFIG> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/demotext.txt�����������������������������������������������������0000644�0001750�0000144�00000003557�12014201074�020610� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Hello This is a little Demo for TCmdBox You can type commands while this text is written here ! Available commands : * help : Short list for all commands * stop : Stops me from reading this text... * pause : Interrupts me * resume : Continues at the last position pause was called... * start : Restarts reading this text.. * clear : Clears the output buffer * clearhistory : clears history buffer for previous input * exit : Exits the program A few details to TCmdBox... To put TCmdBox into Inputmode use (example) CmdBox.StartRead(clRed,clBlack,'>',clSilver,clBlack); If you give a string parameter to StartRead, it will be displayed directly before the input and will follow it. Input is received through an Event called OnInput. Changes can be watched by the programm by OnInputChange. To keep TCmdBox in Inputmode just call StartRead in OnInput again. If you resize the application or use splitter in the middle you notice lines are wrapped, there is no fixed or limited line width. Input is also saved in a history list with limited to HistoryMax entries including current input. Output content by using: CmdBox.Write('Text'); or CmdBox.Writeln('Text...'); These calls are supposed to be Threadsafe ! You can use all font and background colors possible on the Operating System, for example CmdBox.TextColor(clRed); CmdBox.TextBackGround(clSilver); or CmdBox.TextColors(clRed,clSilver); The background color of the last character in a line determines the background color of the rest of the line. The component should be able to show correct UTF8 codes of any kind (up to the whole 21 bits), therefore: €, ä, ö,ü should be correctly written as Euro, Ae, Oe, Ue (the last three are german) if you have selected a UTF8 capable Font and LCL-Interface. I hope you can use the component, if you find bugs or have suggestions contact me by email : kccmp@gmx.de�������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/tcmdbox.xpm������������������������������������������������������0000644�0001750�0000144�00000001724�11077656332�020421� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* XPM */ static char *tcmdbox[] = { /* width height num_colors chars_per_pixel */ " 24 24 8 1", /* colors */ "` c #C0C0C0", ". c #000000", "# c #000000", "a c #000000", "b c #000000", "c c #000000", "d c #000000", "e c #000000", /* pixels */ "````````````````````````", "`......................`", "`..`...`....`..``...``.`", "`.`..`.`....`..`.`.`...`", "`.`.....`..```.``..`...`", "`.`..`..`..`.`.`.`.`...`", "`..`.....`.`.`.``...``.`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`.````.................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "`......................`", "````````````````````````" }; ��������������������������������������������doublecmd-0.7.1/components/CmdLine/tcmdbox.lrs������������������������������������������������������0000644�0001750�0000144�00000002527�11077656332�020417� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('TCmdBox','XPM',[ '/* XPM */'#13#10'static char *tcmdbox[] = {'#13#10'/* width height num_color' +'s chars_per_pixel */'#13#10'" 24 24 8 1",'#13#10'/*' +' colors */'#13#10'"` c #C0C0C0",'#13#10'". c #000000",'#13#10'"# c #000000"' +','#13#10'"a c #000000",'#13#10'"b c #000000",'#13#10'"c c #000000",'#13#10 +'"d c #000000",'#13#10'"e c #000000",'#13#10'/* pixels */'#13#10'"``````````' +'``````````````",'#13#10'"`......................`",'#13#10'"`..`...`....`..' +'``...``.`",'#13#10'"`.`..`.`....`..`.`.`...`",'#13#10'"`.`.....`..```.``..`' +'...`",'#13#10'"`.`..`..`..`.`.`.`.`...`",'#13#10'"`..`.....`.`.`.``...``.`"' +','#13#10'"`......................`",'#13#10'"`......................`",'#13 +#10'"`......................`",'#13#10'"`......................`",'#13#10'"`' +'......................`",'#13#10'"`.````.................`",'#13#10'"`.....' +'.................`",'#13#10'"`......................`",'#13#10'"`..........' +'............`",'#13#10'"`......................`",'#13#10'"`...............' +'.......`",'#13#10'"`......................`",'#13#10'"`....................' +'..`",'#13#10'"`......................`",'#13#10'"`......................`",' +#13#10'"`......................`",'#13#10'"````````````````````````"'#13#10 +'};'#13#10 ]); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/CmdLineExample.lpr�����������������������������������������������0000644�0001750�0000144�00000000501�12014201074�021546� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������program CmdLineExample; {$mode objfpc}{$H+} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset Forms { add your units here }, wnmainform; begin Application.Initialize; Application.CreateForm(TWMainForm, WMainForm); Application.Run; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/COPYING.LESSER���������������������������������������������������0000644�0001750�0000144�00000017172�11077656332�020266� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library.������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/cmdbox.lpk�������������������������������������������������������0000644�0001750�0000144�00000002426�12144672601�020210� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="cmdbox"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <OtherUnitFiles Value="C:\Dokumente und Einstellungen\Nilius\Desktop\laz\CmdLine\"/> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Files Count="1"> <Item1> <Filename Value="ucmdbox.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="uCmdBox"/> </Item1> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="LCL"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/CmdLine/wnmainform.pas���������������������������������������������������0000644�0001750�0000144�00000015114�12014201074�021070� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2007 Julian Schutsch This source is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This code 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. A copy of the GNU General Public License is available on the World Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. This Software is GPL, not LGPL as the libary it uses ! Changelog 10.8.2007 : Added "Buttons" Unit to avoid "TButton" missing error on 0.9.22 (Linux) } unit wnmainform; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Graphics, Dialogs, ExtCtrls,LCLType, ucmdbox, StdCtrls, Controls, Buttons; type { TWMainForm } TWMainForm = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; CmdBox: TCmdBox; CbSetCaret: TComboBox; Label1: TLabel; HistoryList: TListBox; RightPanel: TPanel; Splitter1: TSplitter; ReaderTimer: TTimer; ProcessTimer: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CmdBoxInput(ACmdBox: TCmdBox; Input: String); procedure CbSetCaretChange(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure ProcessTimerTimer(Sender: TObject); procedure ReaderTimerTimer(Sender: TObject); private TextPosition : Integer; DText : TStringList; Rdpw : Boolean; FProcess : Integer; end; var WMainForm: TWMainForm; implementation { TWMainForm } procedure TWMainForm.ReaderTimerTimer(Sender: TObject); var i:Integer; begin CmdBox.TextColors(clRed,clNavy); for i:=0 to 0 do begin if TextPosition<DText.Count then begin CmdBox.ClearLine; CmdBox.Writeln(DText[TextPosition]); Inc(TextPosition); end; if TextPosition>=DText.Count then begin CmdBox.ClearLine; CmdBox.TextColor(clYellow); CmdBox.Writeln(#27#10#196); TextPosition := 0; ReaderTimer.Enabled := False; end; end; end; procedure TWMainForm.FormCreate(Sender: TObject); begin DoubleBuffered := True; DText := TStringList.Create; if FileExists('demotext.txt') then DText.LoadFromFile('demotext.txt'); CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy); CmdBox.TextColors(clWhite,clNavy); CmdBox.Writeln(#27#218#27#10#191); CmdBox.Writeln(#27#179'Type "help" to see a short list of available commands.'#27#10#179); CmdBox.Writeln(#27#217#27#10#217); end; procedure TWMainForm.CmdBoxInput(ACmdBox: TCmdBox; Input: String); var i:Integer; begin if rdpw then begin CmdBox.TextColors(clLime,clBlue); CmdBox.Writeln('Your Secret Password : '+Input); CmdBox.TextColors(clSilver,clNavy); rdpw:=false; end else begin rdpw:=false; Input:=LowerCase(Input); if Input='help' then begin CmdBox.TextColors(clLime,clNavy); CmdBox.Writeln(#27#218#27#197#128#0#27#194#27#10#191); CmdBox.Writeln(#27#179' Command'#27#33#128#0#27#179' Explanation'#27#10#179); CmdBox.Writeln(#27#195#27#197#128#0#27#198#27#10#180); CmdBox.Writeln(#27#179' help'#27#33#128#0#27#179' Gives this list of Commands'#27#10#179); CmdBox.Writeln(#27#179' clear'#27#33#128#0#27#179' Clears the Content of CmdBox'#27#10#179); CmdBox.Writeln(#27#179' start'#27#33#128#0#27#179' Outputs the Content of Demotext.txt from the beginning'#27#10#179); CmdBox.Writeln(#27#179' stop'#27#33#128#0#27#179' Stops output and resets to Start'#27#10#179); CmdBox.Writeln(#27#179' pause'#27#33#128#0#27#179' Interrupts output'#27#10#179); CmdBox.Writeln(#27#179' resume'#27#33#128#0#27#179' Resumes output from the last position'#27#10#179); CmdBox.Writeln(#27#179' clearhistory'#27#33#128#0#27#179' Clears all history entries'#27#10#179); CmdBox.Writeln(#27#179' readpwd'#27#33#128#0#27#179' Read a Password (just as a test)'#27#10#179); CmdBox.Writeln(#27#179' exit'#27#33#128#0#27#179' Exit program'#27#10#179); CmdBox.Writeln(#27#217#27#197#128#0#27#193#27#10#217); CmdBox.TextColor(clSilver); end else if Input='readpwd' then begin rdpw:=true; end else if Input='clearhistory' then begin CmdBox.TextColor(clYellow); CmdBox.Writeln('Clear History...'); CmdBox.TextColor(clSilver); CmdBox.ClearHistory; end else if Input='start' then begin TextPosition:=0; ReaderTimer.Enabled:=true; CmdBox.TextColors(clLime,clBlue); CmdBox.Writeln('Start...'); end else if Input='stop' then begin TextPosition:=0; ReaderTimer.Enabled:=false; CmdBox.TextColors(clRed,clBlue); CmdBox.Writeln('Stop...'); end else if Input='pause' then begin ReaderTimer.Enabled:=false; CmdBox.TextColors(clPurple,clBlue); CmdBox.Writeln('Pause...'); end else if Input='resume' then begin ReaderTimer.Enabled:=true; CmdBox.TextColors(clGreen,clBlue); CmdBox.Writeln('Continue...'); end else if Input='clear' then begin CmdBox.Clear; end else if Input='exit' then close else begin CmdBox.TextColors(clYellow,ClRed); CmdBox.Writeln('Invalid Command!'); end; end; if rdpw then CmdBox.StartReadPassWord(clYellow,clNavy,'Pwd:',clLime,clNavy) else CmdBox.StartRead(clRed,clNavy,'>',clYellow,clNavy); HistoryList.Clear; for i:=0 to CmdBox.HistoryCount-1 do HistoryList.Items.Add(CmdBox.History[i]); end; procedure TWMainForm.CbSetCaretChange(Sender: TObject); begin case cbSetCaret.ItemIndex of 0:CmdBox.CaretType := cartLine; 1:CmdBox.CaretType := cartSubBar; 2:CmdBox.CaretType := cartBigBar; end; CmdBox.SetFocus; end; procedure TWMainForm.Button2Click(Sender: TObject); begin CmdBox.ClearHistory; HistoryList.Clear; end; procedure TWMainForm.Button3Click(Sender: TObject); begin FProcess:=0; ProcessTimer.Enabled:=True; end; procedure TWMainForm.Button1Click(Sender: TObject); begin Close; end; procedure TWMainForm.FormDestroy(Sender: TObject); begin DText.Free; end; procedure TWMainForm.ProcessTimerTimer(Sender: TObject); begin if FProcess=100 then begin CmdBox.ClearLine; ProcessTimer.Enabled:=False; end else begin CmdBox.TextColors(clRed,clBlue); CmdBox.Write('Processing ['+IntToStr(FProcess)+'%]'#13); end; Inc(FProcess); end; initialization {$I wnmainform.lrs} end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/�����������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717723�016335� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/gifanim.pas������������������������������������������������������0000644�0001750�0000144�00000072142�12334444240�020441� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Copyright (C) 2009 Laurent Jacques This source 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 code 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. A copy of the GNU General Public License is available on the World Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Version 1.4 } unit GifAnim; {$mode objfpc}{$H+} interface uses Classes, LCLProc, Lresources, SysUtils, Controls, Graphics, ExtCtrls, IntfGraphics, FPimage, Contnrs, GraphType, dialogs, types; const EXT_INTRODUCER = $21; EXT_GRAPHICS_CONTROL = $F9; EXT_PLAIN_TEXT = $01; EXT_APPLICATION = $FF; EXT_COMMENT = $FE; DSC_LOCAL_IMAGE = $2C; ID_TRANSPARENT = $01; ID_COLOR_TABLE_SIZE = $07; ID_SORT = $20; ID_INTERLACED = $40; ID_COLOR_TABLE = $80; ID_IMAGE_DESCRIPTOR = $2C; ID_TRAILER = $3B; CODE_TABLE_SIZE = 4096; type TRGB = packed record Red, Green, Blue: byte; end; TGIFHeader = packed record Signature: array[0..2] of char; //* Header Signature (always "GIF") */ Version: array[0..2] of char; //* GIF format version("87a" or "89a") */ ScreenWidth: word; //* Width of Display Screen in Pixels */ ScreenHeight: word; //* Height of Display Screen in Pixels */ Packedbit, //* Screen and Color Map Information */ BackgroundColor, //* Background Color Index */ AspectRatio: byte; //* Pixel Aspect Ratio */ end; TGifImageDescriptor = packed record Left, //* X position of image on the display */ Top, //* Y position of image on the display */ Width, //* Width of the image in pixels */ Height: word; //* Height of the image in pixels */ Packedbit: byte; //* Image and Color Table Data Information */ end; TGifGraphicsControlExtension = packed record BlockSize, //* Size of remaining fields (always 04h) */ Packedbit: byte; //* Method of graphics disposal to use */ DelayTime: word; //* Hundredths of seconds to wait */ ColorIndex, //* Transparent Color Index */ Terminator: byte; //* Block Terminator (always 0) */ end; TGifAnim = class; { TGifImage } TGifImage = class private FBitmap: TBitmap; FPosX: word; FPosY: word; FDelay: word; FMethod: byte; public constructor Create; destructor Destroy; override; property Bitmap: TBitmap Read FBitmap; property Delay: word Read FDelay; property Method: byte Read FMethod; property PosX: word Read FPosX; property PosY: word Read FPosY; end; { TGifList } TGifList = class(TObjectList) private protected function GetItems(Index: integer): TGifImage; procedure SetItems(Index: integer; AGifImage: TGifImage); public function Add(AGifImage: TGifImage): integer; function Extract(Item: TGifImage): TGifImage; function Remove(AGifImage: TGifImage): integer; function IndexOf(AGifImage: TGifImage): integer; function First: TGifImage; function Last: TGifImage; procedure Insert(Index: integer; AGifImage: TGifImage); property Items[Index: integer]: TGifImage Read GetItems Write SetItems; default; end; { TGifLoader } TGifLoader = class private FGifHeader: TGIFHeader; FGifDescriptor: TGifImageDescriptor; FGifGraphicsCtrlExt: TGifGraphicsControlExtension; FGifUseGraphCtrlExt: boolean; FGifBackgroundColor: byte; FInterlaced: boolean; FScanLine: PByte; FLineSize: integer; FDisposalMethod: byte; FEmpty: boolean; FFileName: string; FHeight: integer; FIsTransparent: boolean; FWidth: integer; FPalette: TFPPalette; FLocalHeight: integer; FLocalWidth: integer; procedure ReadPalette(Stream: TStream; Size: integer); procedure ReadScanLine(Stream: TStream); procedure ReadHeader(Stream: TStream); procedure ReadGlobalPalette(Stream: TStream); procedure ReadGraphCtrlExt; procedure SetInterlaced(const AValue: boolean); procedure SetTransparent(const AValue: boolean); function SkipBlock(Stream: TStream): byte; procedure WriteScanLine(Img: TFPCustomImage); procedure ReadGifBitmap(Stream: TStream); public constructor Create(const FileName: string); destructor Destroy; override; function LoadAllBitmap(var AGifList: TGifList): boolean; function LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean; function LoadFirstBitmap(var ABitmap: TBitmap): boolean; property Empty: boolean Read FEmpty; property Height: integer Read FHeight; property Width: integer Read FWidth; property IsTransparent: boolean Read FIsTransparent Write SetTransparent; property Interlaced: boolean Read FInterlaced Write SetInterlaced; end; { TGifAnim } TGifAnim = class(TGraphicControl) private { Private declarations } FAnimate: boolean; FEmpty: boolean; FFileName: string; FGifBitmaps: TGifList; FOnFrameChanged: TNotifyEvent; FOnStart: TNotifyEvent; FOnStop: TNotifyEvent; FWait: TTimer; FCurrentImage: integer; FGifHeight: integer; FGifWidth: integer; procedure OnTime(Sender: TObject); procedure SetAnimate(const AValue: boolean); procedure SetFileName(const AValue: string); procedure DefineSize(AWidth, AHeight: integer); protected { Protected declarations } BufferImg: TBitmap; CurrentView: TBitmap; procedure CalculatePreferredSize( var PreferredWidth, PreferredHeight: integer; WithThemeSpace: boolean); override; procedure DoAutoSize; override; procedure DoStartAnim; procedure DoStopAnim; class function GetControlClassDefaultSize: TSize; override; procedure GifChanged; procedure LoadFromFile(const Filename: string); virtual; procedure Paint; override; procedure ResetImage; procedure SetColor(Value: TColor); override; public { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure NextFrame; procedure PriorFrame; property Empty: boolean Read FEmpty; property GifBitmaps: TGifList Read FGifBitmaps; property GifIndex: integer Read FCurrentImage; function LoadFromLazarusResource(const ResName: String): boolean; published { Published declarations } property Anchors; property AutoSize default True; property Animate: boolean Read FAnimate Write SetAnimate default True; property BorderSpacing; property Color default clBtnFace; property Constraints; property FileName: string Read FFileName Write SetFileName; property Height; property OnClick; property OnDblClick; property OnFrameChanged: TNotifyEvent Read FOnFrameChanged Write FOnFrameChanged; property OnMouseDown; property OnMouseEnter; property OnMouseLeave; property OnMouseMove; property OnMouseUp; property OnStartAnim: TNotifyEvent Read FOnStart Write FOnStart; property OnStopAnim: TNotifyEvent Read FOnStop Write FOnStop; property ParentShowHint; property ShowHint; property Visible; property Width; end; procedure Register; implementation procedure Register; begin RegisterComponents('Wile64', [TGifAnim]); end; { TGifAnim } constructor TGifAnim.Create(AOwner: TComponent); begin inherited Create(AOwner); ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks]; AutoSize := True; SetInitialBounds(0, 0, GetControlClassDefaultSize.CX, GetControlClassDefaultSize.CY); FEmpty := True; FCurrentImage := 0; CurrentView := TBitmap.Create; if not (csDesigning in ComponentState) then begin BufferImg := TBitmap.Create; FWait := TTimer.Create(Self); with FWait do begin Interval := 100; OnTimer := @OnTime; Enabled := False; end; end; Animate := True; end; destructor TGifAnim.Destroy; begin inherited Destroy; if assigned(FGifBitmaps) then FreeAndNil(FGifBitmaps); BufferImg.Free; CurrentView.Free; end; procedure TGifAnim.NextFrame; begin if (not FEmpty) and Visible and (not FAnimate) then begin if FCurrentImage >= GifBitmaps.Count - 1 then FCurrentImage := 0 else Inc(FCurrentImage); if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; procedure TGifAnim.PriorFrame; var DesiredImage: Integer; begin if (not FEmpty) and Visible and (not FAnimate) then begin if FCurrentImage = 0 then DesiredImage:= GifBitmaps.Count - 1 else DesiredImage:= FCurrentImage - 1; // For proper display repaint image from first frame to desired frame FCurrentImage:= 0; while FCurrentImage < DesiredImage do begin with GifBitmaps.Items[FCurrentImage] do begin BufferImg.Canvas.Brush.Color := (Self.Color); if FCurrentImage = 0 then BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); if Delay <> 0 then FWait.Interval := Delay * 10; BufferImg.Canvas.Draw(PosX, PosY, Bitmap); case Method of //0 : Not specified... //1 : No change Background 2: BufferImg.Canvas.FillRect( Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; Inc(FCurrentImage); end; if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; function TGifAnim.LoadFromLazarusResource(const ResName: String): boolean; var GifLoader: TGifLoader; StateAnimate: boolean; Resource: TLResource; begin Result:=false; StateAnimate:= Animate; FWait.Enabled:= false; ResetImage; Resource:=nil; Resource:=LazarusResources.Find(ResName); if Resource <> nil then if CompareText(LazarusResources.Find(ResName).ValueType, 'gif')=0 then begin GifLoader := TGifLoader.Create(Filename); FEmpty := not GifLoader.LoadFromLazarusResource(ResName, FGifBitmaps); DefineSize(GifLoader.Width, GifLoader.Height); GifLoader.Free; Result:= FEmpty; end; if not Empty then GifChanged; FWait.Enabled:= StateAnimate; end; procedure TGifAnim.LoadFromFile(const Filename: string); var GifLoader: TGifLoader; begin FEmpty := True; if not FileExists(Filename) then Exit; GifLoader := TGifLoader.Create(Filename); if (csDesigning in ComponentState) then FEmpty := not GifLoader.LoadFirstBitmap(CurrentView) else FEmpty := not GifLoader.LoadAllBitmap(FGifBitmaps); DefineSize(GifLoader.Width, GifLoader.Height); GifLoader.Free; end; procedure TGifAnim.OnTime(Sender: TObject); begin if (not Empty) and Visible then begin if FCurrentImage >= GifBitmaps.Count - 1 then FCurrentImage := 0 else Inc(FCurrentImage); if Assigned(FOnFrameChanged) then FOnFrameChanged(Self); Repaint; end; end; procedure TGifAnim.SetAnimate(const AValue: boolean); begin if FAnimate = AValue then exit; FAnimate := AValue; if not (csDesigning in ComponentState) then begin FWait.Enabled := Animate; if Animate then DoStartAnim else DoStopAnim; end; end; procedure TGifAnim.SetFileName(const AValue: string); begin if (FFileName = AValue) then Exit; FFileName := AValue; ResetImage; if (FFileName = '') then Exit; LoadFromFile(FFileName); if not Empty then GifChanged; end; procedure TGifAnim.DefineSize(AWidth, AHeight: integer); begin if (AWidth = FGifWidth) and (AHeight = FGifHeight) then Exit; FGifWidth := AWidth; FGifHeight := AHeight; Height := FGifHeight; Width := FGifWidth; if not (csDesigning in ComponentState) then begin BufferImg.Height := Height; BufferImg.Width := Width; end; end; procedure TGifAnim.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: boolean); begin PreferredWidth := FGifWidth; PreferredHeight := FGifHeight; end; procedure TGifAnim.DoAutoSize; var ModifyWidth, ModifyHeight: boolean; NewWidth: integer; NewHeight: integer; begin if AutoSizing then Exit; // we shouldn't come here in the first place BeginAutoSizing; try GetPreferredSize(NewWidth, NewHeight); ModifyWidth := [akLeft, akRight] * (Anchors + AnchorAlign[Align]) <> [akLeft, akRight]; ModifyHeight := [akTop, akBottom] * (Anchors + AnchorAlign[Align]) <> [akTop, akBottom]; if not ModifyWidth then NewWidth := Width; if not ModifyHeight then NewHeight := Height; if (NewWidth <> Width) or (NewHeight <> Height) then begin SetBounds(Left, Top, NewWidth, NewHeight); end; finally EndAutoSizing; end; end; class function TGifAnim.GetControlClassDefaultSize: TSize; begin Result.CX := 90; Result.CY := 90; end; procedure TGifAnim.GifChanged; begin if not (csDesigning in ComponentState) then begin BufferImg.Canvas.Brush.Color := (self.Color); BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); with GifBitmaps.Items[FCurrentImage] do BufferImg.Canvas.Draw(PosX, PosY, Bitmap); CurrentView.Assign(BufferImg); end; InvalidatePreferredSize; AdjustSize; end; procedure TGifAnim.Paint; begin if (not Empty) and Visible then begin if not (csDesigning in ComponentState) then begin if (FCurrentImage < GifBitmaps.Count) then with GifBitmaps.Items[FCurrentImage] do begin BufferImg.Canvas.Brush.Color := (self.Color); if FCurrentImage = 0 then BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); if Delay <> 0 then FWait.Interval := Delay * 10; BufferImg.Canvas.Draw(PosX, PosY, Bitmap); CurrentView.Assign(BufferImg); case Method of //0 : Not specified... //1 : No change Background 2: BufferImg.Canvas.FillRect( Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; end else begin Canvas.Brush.Color := (self.Color); Canvas.FillRect(Rect(0, 0, Width, Height)); end; Canvas.Draw(0, 0, CurrentView); end; inherited Paint; end; procedure TGifAnim.ResetImage; begin if assigned(FGifBitmaps) then FreeAndNil(FGifBitmaps); FCurrentImage:=0; with CurrentView do begin Canvas.Brush.Color := (self.Color); Canvas.FillRect(Rect(0, 0, Width, Height)); end; end; procedure TGifAnim.SetColor(Value: TColor); begin inherited SetColor(Value); end; procedure TGifAnim.DoStartAnim; begin if assigned(OnStartAnim) then OnStartAnim(Self); end; procedure TGifAnim.DoStopAnim; begin if assigned(OnStopAnim) then OnStartAnim(Self); end; { TGifLoader } constructor TGifLoader.Create(const FileName: string); begin FFileName := FileName; FGifUseGraphCtrlExt := False; FPalette := TFPPalette.Create(0); FHeight := 20; FWidth := 20; end; destructor TGifLoader.Destroy; begin inherited Destroy; FPalette.Free; end; function TGifLoader.LoadAllBitmap(var AGifList: TGifList): boolean; var GifStream: TMemoryStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; GifBitmap: TGifImage; begin Result := False; if not FileExists(FFileName) then exit; if not assigned(AGifList) then AGifList := TGifList.Create(True); GifStream := TMemoryStream.Create; GifStream.LoadFromFile(FFileName); GifStream.Position := 0; ReadHeader(GifStream); if (FGifHeader.Version <> '89a') then Exit; // skip first block extention if exist repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); repeat ReadGifBitmap(GifStream); // decode Gif bitmap in Scanline buffer ReadScanLine(GifStream); // Create temp Fp Image for put scanline pixel FPImage := TLazIntfImage.Create(FLocalWidth, FLocalHeight); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(FLocalWidth, FLocalHeight); FPImage.DataDescription := ImgFormatDescription; WriteScanLine(FPImage); GifBitmap := TGifImage.Create; GifBitmap.FBitmap.LoadFromIntfImage(FPImage); GifBitmap.FPosX := FGifDescriptor.Left; GifBitmap.FPosY := FGifDescriptor.Top; GifBitmap.FMethod := FDisposalMethod; GifBitmap.FDelay := FGifGraphicsCtrlExt.DelayTime; AGifList.Add(GifBitmap); FPImage.Free; FreeMem(FScanLine, FLineSize); // reset FGifUseGraphCtrlExt flag FGifUseGraphCtrlExt := False; repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); until (Introducer = ID_TRAILER); GifStream.Free; Result := True; end; function TGifLoader.LoadFromLazarusResource(const ResName: String; var AGifList: TGifList): boolean; var GifStream: TLazarusResourceStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; GifBitmap: TGifImage; begin Result := False; if not assigned(AGifList) then AGifList := TGifList.Create(True); GifStream := TLazarusResourceStream.Create(ResName, nil); GifStream.Position := 0; ReadHeader(GifStream); if (FGifHeader.Version <> '89a') then Exit; // skip first block extention if exist repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); repeat ReadGifBitmap(GifStream); // decode Gif bitmap in Scanline buffer ReadScanLine(GifStream); // Create temp Fp Image for put scanline pixel FPImage := TLazIntfImage.Create(FLocalWidth, FLocalHeight); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(FLocalWidth, FLocalHeight); FPImage.DataDescription := ImgFormatDescription; WriteScanLine(FPImage); GifBitmap := TGifImage.Create; GifBitmap.FBitmap.LoadFromIntfImage(FPImage); GifBitmap.FPosX := FGifDescriptor.Left; GifBitmap.FPosY := FGifDescriptor.Top; GifBitmap.FMethod := FDisposalMethod; GifBitmap.FDelay := FGifGraphicsCtrlExt.DelayTime; AGifList.Add(GifBitmap); FPImage.Free; FreeMem(FScanLine, FLineSize); // reset FGifUseGraphCtrlExt flag FGifUseGraphCtrlExt := False; repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); until (Introducer = ID_TRAILER); GifStream.Free; Result := True; end; function TGifLoader.LoadFirstBitmap(var ABitmap: TBitmap): boolean; var GifStream: TMemoryStream; Introducer: byte; FPImage: TLazIntfImage; ImgFormatDescription: TRawImageDescription; begin Result := False; if not FileExists(FFileName) then exit; if not assigned(ABitmap) then ABitmap := TBitmap.Create; GifStream := TMemoryStream.Create; GifStream.LoadFromFile(FFileName); GifStream.Position := 0; ReadHeader(GifStream); if (FGifHeader.Version <> '89a') then Exit; // skip first block extention if exist repeat Introducer := SkipBlock(GifStream); until (Introducer = ID_IMAGE_DESCRIPTOR) or (Introducer = ID_TRAILER); ReadGifBitmap(GifStream); // decode Gif bitmap in Scanline buffer ReadScanLine(GifStream); // Create temp Fp Image for put scanline pixel FPImage := TLazIntfImage.Create(FLocalWidth, FLocalHeight); ImgFormatDescription.Init_BPP32_B8G8R8A8_BIO_TTB(FLocalWidth, FLocalHeight); FPImage.DataDescription := ImgFormatDescription; WriteScanLine(FPImage); ABitmap.LoadFromIntfImage(FPImage); FPImage.Free; FreeMem(FScanLine, FLineSize); // reset FGifUseGraphCtrlExt flag FGifUseGraphCtrlExt := False; GifStream.Free; Result := True; end; procedure TGifLoader.SetTransparent(const AValue: boolean); begin if FIsTransparent = AValue then exit; FIsTransparent := AValue; end; function TGifLoader.SkipBlock(Stream: TStream): byte; var Introducer, Labels, SkipByte: byte; begin Introducer := 0; Labels := 0; SkipByte := 0; Stream.Read(Introducer, 1); if Introducer = EXT_INTRODUCER then begin Stream.Read(Labels, 1); case Labels of EXT_COMMENT, EXT_APPLICATION: while True do begin Stream.Read(SkipByte, 1); if SkipByte = 0 then Break; Stream.Seek(SkipByte, soFromCurrent); end; EXT_GRAPHICS_CONTROL: begin Stream.Read(FGifGraphicsCtrlExt, SizeOf(FGifGraphicsCtrlExt)); FGifUseGraphCtrlExt := True; end; EXT_PLAIN_TEXT: begin Stream.Read(SkipByte, 1); Stream.Seek(SkipByte, soFromCurrent); while True do begin Stream.Read(SkipByte, 1); if SkipByte = 0 then Break; Stream.Seek(SkipByte, soFromCurrent); end; end; end; end; Result := Introducer; end; procedure TGifLoader.ReadScanLine(Stream: TStream); var OldPos, UnpackedSize, PackedSize: longint; I: integer; Data, Bits, Code: cardinal; SourcePtr: PByte; InCode: cardinal; CodeSize: cardinal; CodeMask: cardinal; FreeCode: cardinal; OldCode: cardinal; Prefix: array[0..CODE_TABLE_SIZE - 1] of cardinal; Suffix, Stack: array [0..CODE_TABLE_SIZE - 1] of byte; StackPointer: PByte; DataComp, Target: PByte; B, FInitialCodeSize, FirstChar: byte; ClearCode, EOICode: word; begin FInitialCodeSize := 0; B := 0; DataComp := nil; // initialisation du dictionnaire de decompression Stream.Read(FInitialCodeSize, 1); // Recherche la taille des donnes compresser OldPos := Stream.Position; PackedSize := 0; repeat Stream.Read(B, 1); if B > 0 then begin Inc(PackedSize, B); Stream.Seek(B, soFromCurrent); end; until B = 0; Getmem(DataComp, PackedSize); // lecture des donnes conpresser SourcePtr := DataComp; Stream.Position := OldPos; repeat Stream.Read(B, 1); if B > 0 then begin Stream.ReadBuffer(SourcePtr^, B); Inc(SourcePtr, B); end; until B = 0; SourcePtr := DataComp; Target := FScanLine; CodeSize := FInitialCodeSize + 1; ClearCode := 1 shl FInitialCodeSize; EOICode := ClearCode + 1; FreeCode := ClearCode + 2; OldCode := CODE_TABLE_SIZE; CodeMask := (1 shl CodeSize) - 1; UnpackedSize := FLocalWidth * FLocalHeight; for I := 0 to ClearCode - 1 do begin Prefix[I] := CODE_TABLE_SIZE; Suffix[I] := I; end; StackPointer := @Stack; FirstChar := 0; Data := 0; Bits := 0; //Decompression LZW gif while (UnpackedSize > 0) and (PackedSize > 0) do begin Inc(Data, SourcePtr^ shl Bits); Inc(Bits, 8); while Bits >= CodeSize do begin Code := Data and CodeMask; Data := Data shr CodeSize; Dec(Bits, CodeSize); if Code = EOICode then Break; if Code = ClearCode then begin CodeSize := FInitialCodeSize + 1; CodeMask := (1 shl CodeSize) - 1; FreeCode := ClearCode + 2; OldCode := CODE_TABLE_SIZE; Continue; end; if Code > FreeCode then Break; if OldCode = CODE_TABLE_SIZE then begin FirstChar := Suffix[Code]; Target^ := FirstChar; Inc(Target); Dec(UnpackedSize); OldCode := Code; Continue; end; InCode := Code; if Code = FreeCode then begin StackPointer^ := FirstChar; Inc(StackPointer); Code := OldCode; end; while Code > ClearCode do begin StackPointer^ := Suffix[Code]; Inc(StackPointer); Code := Prefix[Code]; end; FirstChar := Suffix[Code]; StackPointer^ := FirstChar; Inc(StackPointer); Prefix[FreeCode] := OldCode; Suffix[FreeCode] := FirstChar; if (FreeCode = CodeMask) and (CodeSize < 12) then begin Inc(CodeSize); CodeMask := (1 shl CodeSize) - 1; end; if FreeCode < CODE_TABLE_SIZE - 1 then Inc(FreeCode); OldCode := InCode; repeat Dec(StackPointer); Target^ := StackPointer^; Inc(Target); Dec(UnpackedSize); until StackPointer = @Stack; end; Inc(SourcePtr); Dec(PackedSize); end; FreeMem(DataComp); end; procedure TGifLoader.ReadHeader(Stream: TStream); begin Stream.Read(FGifHeader, SizeOf(FGifHeader)); with FGifHeader do begin FGifBackgroundColor := BackgroundColor; FWidth := ScreenWidth; FHeight := ScreenHeight; FLocalWidth := ScreenWidth; FLocalHeight := ScreenHeight; IsTransparent := False; end; ReadGlobalPalette(Stream); end; procedure TGifLoader.ReadGlobalPalette(Stream: TStream); var ColorTableSize: integer; begin if (FGifHeader.Packedbit and ID_COLOR_TABLE) <> 0 then begin ColorTableSize := FGifHeader.Packedbit and ID_COLOR_TABLE_SIZE + 1; ReadPalette(Stream, 1 shl ColorTableSize); end; end; procedure TGifLoader.ReadGraphCtrlExt; var C: TFPColor; begin IsTransparent := (FGifGraphicsCtrlExt.Packedbit and ID_TRANSPARENT) <> 0; FDisposalMethod := (FGifGraphicsCtrlExt.Packedbit and $1C) shr 2; if IsTransparent then begin // if Transparent bitmap change alpha channel FGifBackgroundColor := FGifGraphicsCtrlExt.ColorIndex; C := FPalette[FGifBackgroundColor]; C.alpha := alphaTransparent; FPalette[FGifBackgroundColor] := C; end; end; procedure TGifLoader.SetInterlaced(const AValue: boolean); begin if FInterlaced = AValue then exit; FInterlaced := AValue; end; procedure TGifLoader.ReadPalette(Stream: TStream; Size: integer); var RGBEntry: TRGB; I: integer; C: TFPColor; begin FPalette.Clear; FPalette.Count := 0; Fillchar(RGBEntry, SizeOf(RGBEntry), 0); for I := 0 to Size - 1 do begin Stream.Read(RGBEntry, SizeOf(RGBEntry)); with C do begin Red := RGBEntry.Red or (RGBEntry.Red shl 8); Green := RGBEntry.Green or (RGBEntry.Green shl 8); Blue := RGBEntry.Blue or (RGBEntry.Blue shl 8); Alpha := alphaOpaque; end; FPalette.Add(C); end; end; procedure TGifLoader.WriteScanLine(Img: TFPCustomImage); var Row, Col: integer; Pass, Every: byte; P: PByte; begin P := FScanLine; if Interlaced then begin for Pass := 1 to 4 do begin case Pass of 1: begin Row := 0; Every := 8; end; 2: begin Row := 4; Every := 8; end; 3: begin Row := 2; Every := 4; end; 4: begin Row := 1; Every := 2; end; end; repeat for Col := 0 to FLocalWidth - 1 do begin Img.Colors[Col, Row] := FPalette[P^]; Inc(P); end; Inc(Row, Every); until Row >= FLocalHeight; end; end else begin for Row := 0 to FLocalHeight - 1 do for Col := 0 to FLocalWidth - 1 do begin Img.Colors[Col, Row] := FPalette[P^]; Inc(P); end; end; end; procedure TGifLoader.ReadGifBitmap(Stream: TStream); var ColorTableSize: integer; begin Stream.Read(FGifDescriptor, SizeOf(FGifDescriptor)); with FGifDescriptor do begin FLocalWidth := Width; FLocalHeight := Height; Interlaced := (Packedbit and ID_INTERLACED = ID_INTERLACED); end; FLineSize := FLocalWidth * (FLocalHeight + 1); GetMem(FScanLine, FLineSize); if (FGifDescriptor.Packedbit and ID_COLOR_TABLE) <> 0 then begin ColorTableSize := FGifDescriptor.Packedbit and ID_COLOR_TABLE_SIZE + 1; ReadPalette(Stream, 1 shl ColorTableSize); end; if FGifUseGraphCtrlExt then ReadGraphCtrlExt; end; { TGifImage } constructor TGifImage.Create; begin FBitmap := TBitmap.Create; FPosX := 0; FPosY := 0; FDelay := 0; FMethod := 0; end; destructor TGifImage.Destroy; begin inherited Destroy; FBitmap.Free; end; { TGifList } function TGifList.GetItems(Index: integer): TGifImage; begin Result := TGifImage(inherited Items[Index]); end; procedure TGifList.SetItems(Index: integer; AGifImage: TGifImage); begin Put(Index, AGifImage); end; function TGifList.Add(AGifImage: TGifImage): integer; begin Result := inherited Add(AGifImage); end; function TGifList.Extract(Item: TGifImage): TGifImage; begin Result := TGifImage(inherited Extract(Item)); end; function TGifList.Remove(AGifImage: TGifImage): integer; begin Result := inherited Remove(AGifImage); end; function TGifList.IndexOf(AGifImage: TGifImage): integer; begin Result := inherited IndexOf(AGifImage); end; function TGifList.First: TGifImage; begin Result := TGifImage(inherited First); end; function TGifList.Last: TGifImage; begin Result := TGifImage(inherited Last); end; procedure TGifList.Insert(Index: integer; AGifImage: TGifImage); begin inherited Insert(Index, AGifImage); end; initialization {$I gifanim.lrs} end. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/pkg_gifanim_dsgn.pas���������������������������������������������0000644�0001750�0000144�00000000617�12334444240�022313� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit pkg_gifanim_dsgn; interface uses GifAnimDsgn, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnimDsgn', @GifAnimDsgn.Register); end; initialization RegisterPackage('pkg_gifanim_dsgn', @Register); end. �����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/ressource-file.txt�����������������������������������������������0000644�0001750�0000144�00000000752�12014201074�021777� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ 1) Gif in ressource file ------------------------- - Create ressource file with lazres ex : lazres mygif.lrs gif1.gif gif2.gif - Put TGifAnim on your form - In the FormCreate add (see down) [code] procedure TForm1.FormCreate(Sender: TObject); begin GifAnim1.LoadFromLazarusResource('gif1'); GifAnim2.LoadFromLazarusResource('gif2'); end; [/code] - And insert ressouce file in initialization section (see down) [code] initialization {$I unit1.lrs} {$I mesgif.lrs} [/code] ����������������������doublecmd-0.7.1/components/gifanim/tgifanim.xpm�����������������������������������������������������0000644�0001750�0000144�00000002341�11376245253�020650� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* XPM */ static char * gifanim_xpm[] = { "24 24 31 1", " c None", ". c #959595", "+ c #E1E1E1", "@ c #919191", "# c #848484", "$ c #888888", "% c #EEEEEE", "& c #E6E9EC", "* c #D6DFE8", "= c #FFFFFF", "- c #E7F0F9", "; c #3783CE", "> c #FFF7F7", ", c #FFEFEF", "' c #F7F2F5", ") c #F7FAFD", "! c #FF5757", "~ c #FFDFDF", "{ c #FF4F4F", "] c #FFD7D7", "^ c #FF4747", "/ c #FF3F3F", "( c #8D8D8D", "_ c #EEE6E6", ": c #EED6D6", "< c #EECECE", "[ c #FAFAFA", "} c #F2F2F2", "| c #F6F6F6", "1 c #A2A2A2", "2 c #FAF2F2", " .++@ @++. ", " @@@##$$$$$$$$$$$$##@@@ ", " .++$#$$$$$$$$$$$$#$++. ", " .++@+%%&**&&**&%%+@++. ", " @@@@%==-;;--;;-==%@@@@ ", " .++.%==-;;--;;-==%.++. ", " .++.%>,'--))--',>%.++. ", " @@@@%,!~>====>~!,%@@@@ ", " .++.%>~{]~~~~]{~>%.++. ", " .++.%=>~^////^~>=%.++. ", " @@@(+%%_:<<<<:_%%+(@@@ ", " .++$#$$$$$$$$$$$$#$++. ", " .++$#$$$$$$$$$$$$#$++. ", " @@@(+%%&**&%%%%%%+(@@@ ", " .++.%==-;;-[}}[==%.++. ", " .++.%==-;;-|11|==%.++. ", " @@@@%>,'--)[}}2,>%@@@@ ", " .++.%,!~>====>~!,%.++. ", " .++.%>~{]~~~~]{~>%.++. ", " @@@@%=>~^////^~>=%@@@@ ", " .++@+%%_:<<<<:_%%+@++. ", " .++$#$$$$$$$$$$$$#$++. ", " @@@##$$$$$$$$$$$$##@@@ ", " .++@ @++. "}; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/pkg_gifanim.pas��������������������������������������������������0000644�0001750�0000144�00000000550�12014201074�021263� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit pkg_gifanim; interface uses GifAnim, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('GifAnim', @GifAnim.Register); end; initialization RegisterPackage('pkg_gifanim', @Register); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/gifanimdsgn.pas��������������������������������������������������0000644�0001750�0000144�00000001374�12334444240�021314� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit GifAnimDsgn; {$mode objfpc}{$H+} interface uses LazIDEIntf, PropEdits; Type TGifFileNamePropertyEditor = class(TFileNamePropertyEditor) protected function GetFilter: String; override; function GetInitialDirectory: string; override; end; procedure Register; implementation uses SysUtils, GifAnim; function TGifFileNamePropertyEditor.GetFilter: String; begin Result := 'GIF|*.gif'; end; function TGifFileNamePropertyEditor.GetInitialDirectory: string; begin Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); end; procedure Register; begin RegisterPropertyEditor(TypeInfo(String), TGifAnim, 'FileName', TGifFileNamePropertyEditor); end; end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/pkg_gifanim_dsgn.lpk���������������������������������������������0000644�0001750�0000144�00000002450�12334444240�022313� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim_dsgn"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerMessages> <MsgFileName Value=""/> </CompilerMessages> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <License Value="GPL"/> <Version Major="1" Minor="4"/> <Files Count="1"> <Item1> <Filename Value="gifanimdsgn.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="GifAnimDsgn"/> </Item1> </Files> <Type Value="DesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="IDEIntf"/> </Item1> <Item2> <PackageName Value="pkg_gifanim"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> </PublishOptions> </Package> </CONFIG> ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/doublecmd.diff���������������������������������������������������0000644�0001750�0000144�00000024102�12334444240�021103� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Index: gifanim.pas =================================================================== --- gifanim.pas (revision none) +++ gifanim.pas (working copy) @@ -26,7 +26,7 @@ uses Classes, LCLProc, Lresources, SysUtils, Controls, Graphics, ExtCtrls, - IntfGraphics, FPimage, Contnrs, GraphType, dialogs; + IntfGraphics, FPimage, Contnrs, GraphType, dialogs, types; const @@ -193,7 +193,7 @@ procedure DoAutoSize; override; procedure DoStartAnim; procedure DoStopAnim; - class function GetControlClassDefaultSize: TPoint; override; + class function GetControlClassDefaultSize: TSize; override; procedure GifChanged; procedure LoadFromFile(const Filename: string); virtual; procedure Paint; override; @@ -203,6 +203,8 @@ { Public declarations } constructor Create(AOwner: TComponent); override; destructor Destroy; override; + procedure NextFrame; + procedure PriorFrame; property Empty: boolean Read FEmpty; property GifBitmaps: TGifList Read FGifBitmaps; property GifIndex: integer Read FCurrentImage; @@ -237,28 +239,9 @@ implementation -uses LazIDEIntf, propedits; -Type - TGifFileNamePropertyEditor=class(TFileNamePropertyEditor) - protected - function GetFilter: String; override; - function GetInitialDirectory: string; override; - end; -function TGifFileNamePropertyEditor.GetFilter: String; -begin - Result := 'GIF|*.gif'; -end; - -function TGifFileNamePropertyEditor.GetInitialDirectory: string; -begin - Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); -end; - procedure Register; begin RegisterComponents('Wile64', [TGifAnim]); - RegisterPropertyEditor(TypeInfo(String), - TGifAnim, 'FileName', TGifFileNamePropertyEditor); end; { TGifAnim } @@ -268,7 +251,7 @@ inherited Create(AOwner); ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks]; AutoSize := True; - SetInitialBounds(0, 0, GetControlClassDefaultSize.X, GetControlClassDefaultSize.Y); + SetInitialBounds(0, 0, GetControlClassDefaultSize.CX, GetControlClassDefaultSize.CY); FEmpty := True; FCurrentImage := 0; CurrentView := TBitmap.Create; @@ -295,6 +278,59 @@ CurrentView.Free; end; +procedure TGifAnim.NextFrame; +begin + if (not FEmpty) and Visible and (not FAnimate) then + begin + if FCurrentImage >= GifBitmaps.Count - 1 then + FCurrentImage := 0 + else + Inc(FCurrentImage); + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; + end; +end; + +procedure TGifAnim.PriorFrame; +var + DesiredImage: Integer; +begin + if (not FEmpty) and Visible and (not FAnimate) then + begin + if FCurrentImage = 0 then + DesiredImage:= GifBitmaps.Count - 1 + else + DesiredImage:= FCurrentImage - 1; + // For proper display repaint image from first frame to desired frame + FCurrentImage:= 0; + while FCurrentImage < DesiredImage do + begin + with GifBitmaps.Items[FCurrentImage] do + begin + BufferImg.Canvas.Brush.Color := (Self.Color); + if FCurrentImage = 0 then + BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); + if Delay <> 0 then + FWait.Interval := Delay * 10; + BufferImg.Canvas.Draw(PosX, PosY, Bitmap); + case Method of + //0 : Not specified... + //1 : No change Background + 2: BufferImg.Canvas.FillRect( + Rect(PosX, PosY, Bitmap.Width + PosX, Bitmap.Height + PosY)); + + 3: BufferImg.Canvas.FillRect(Rect(0, 0, Width, Height)); + end; + end; + Inc(FCurrentImage); + end; + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; + end; +end; + function TGifAnim.LoadFromLazarusResource(const ResName: String): boolean; var GifLoader: TGifLoader; @@ -340,12 +376,13 @@ begin if (not Empty) and Visible then begin - if FCurrentImage > GifBitmaps.Count - 1 then - FCurrentImage := 0; - if assigned(FOnFrameChanged) then - FOnFrameChanged(self); - Paint; - Inc(FCurrentImage); + if FCurrentImage >= GifBitmaps.Count - 1 then + FCurrentImage := 0 + else + Inc(FCurrentImage); + if Assigned(FOnFrameChanged) then + FOnFrameChanged(Self); + Repaint; end; end; @@ -365,27 +402,12 @@ end; procedure TGifAnim.SetFileName(const AValue: string); -var - fn: string; begin - - if (FFileName = AValue) then - exit; + if (FFileName = AValue) then Exit; FFileName := AValue; ResetImage; - if (FFileName = '') then exit; - if (csDesigning in ComponentState) then - begin - fn:= ExtractFileName(AValue); - FFileName:= ExtractFilePath(AValue); - FFileName:= ExtractRelativepath(ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile) ,FFileName); - FFileName:=FFileName+fn; - LoadFromFile(FFileName+fn); - end - else begin - FFileName := AValue; - LoadFromFile(FFileName); - end; + if (FFileName = '') then Exit; + LoadFromFile(FFileName); if not Empty then GifChanged; end; @@ -441,10 +463,10 @@ end; end; -class function TGifAnim.GetControlClassDefaultSize: TPoint; +class function TGifAnim.GetControlClassDefaultSize: TSize; begin - Result.X := 90; - Result.Y := 90; + Result.CX := 90; + Result.CY := 90; end; procedure TGifAnim.GifChanged; Index: gifanimdsgn.pas =================================================================== --- gifanimdsgn.pas (revision 0) +++ gifanimdsgn.pas (revision 0) @@ -0,0 +1,41 @@ +unit GifAnimDsgn; + +{$mode objfpc}{$H+} + +interface + +uses + LazIDEIntf, PropEdits; + +Type + TGifFileNamePropertyEditor = class(TFileNamePropertyEditor) + protected + function GetFilter: String; override; + function GetInitialDirectory: string; override; + end; + +procedure Register; + +implementation + +uses + SysUtils, GifAnim; + +function TGifFileNamePropertyEditor.GetFilter: String; +begin + Result := 'GIF|*.gif'; +end; + +function TGifFileNamePropertyEditor.GetInitialDirectory: string; +begin + Result:= ExtractFilePath(LazarusIDE.ActiveProject.ProjectInfoFile); +end; + +procedure Register; +begin + RegisterPropertyEditor(TypeInfo(String), TGifAnim, + 'FileName', TGifFileNamePropertyEditor); +end; + +end. + Index: pkg_gifanim.lpk =================================================================== --- pkg_gifanim.lpk (revision none) +++ pkg_gifanim.lpk (working copy) @@ -1,15 +1,21 @@ -<?xml version="1.0"?> +<?xml version="1.0" encoding="UTF-8"?> <CONFIG> - <Package Version="3"> + <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim"/> + <AddToProjectUsesSection Value="True"/> <Author Value="Laurent Jacques"/> <CompilerOptions> - <Version Value="8"/> + <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> - <OtherUnitFiles Value="$(LazarusDir)\ide\"/> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf2Set"/> + </Debugging> + </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> @@ -33,15 +39,16 @@ <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> - <PackageName Value="FCL"/> + <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> - <PackageName Value="IDEIntf"/> + <PackageName Value="FCL"/> + <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> - <UnitPath Value="$(PkgOutDir)\"/> + <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> Index: pkg_gifanim_dsgn.lpk =================================================================== --- pkg_gifanim_dsgn.lpk (revision 0) +++ pkg_gifanim_dsgn.lpk (revision 0) @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="UTF-8"?> +<CONFIG> + <Package Version="4"> + <PathDelim Value="\"/> + <Name Value="pkg_gifanim_dsgn"/> + <CompilerOptions> + <Version Value="11"/> + <PathDelim Value="\"/> + <SearchPaths> + <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> + </SearchPaths> + <Linking> + <Debugging> + <DebugInfoType Value="dsDwarf2Set"/> + </Debugging> + </Linking> + <Other> + <CompilerMessages> + <MsgFileName Value=""/> + </CompilerMessages> + <CompilerPath Value="$(CompPath)"/> + </Other> + </CompilerOptions> + <License Value="GPL"/> + <Version Major="1" Minor="4"/> + <Files Count="1"> + <Item1> + <Filename Value="gifanimdsgn.pas"/> + <HasRegisterProc Value="True"/> + <UnitName Value="GifAnimDsgn"/> + </Item1> + </Files> + <Type Value="DesignTime"/> + <RequiredPkgs Count="2"> + <Item1> + <PackageName Value="IDEIntf"/> + </Item1> + <Item2> + <PackageName Value="pkg_gifanim"/> + </Item2> + </RequiredPkgs> + <UsageOptions> + <UnitPath Value="$(PkgOutDir)"/> + </UsageOptions> + <PublishOptions> + <Version Value="2"/> + </PublishOptions> + </Package> +</CONFIG> Index: pkg_gifanim_dsgn.pas =================================================================== --- pkg_gifanim_dsgn.pas (revision 0) +++ pkg_gifanim_dsgn.pas (revision 0) @@ -0,0 +1,21 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit pkg_gifanim_dsgn; + +interface + +uses + GifAnimDsgn, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('GifAnimDsgn', @GifAnimDsgn.Register); +end; + +initialization + RegisterPackage('pkg_gifanim_dsgn', @Register); +end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/readme.txt�������������������������������������������������������0000644�0001750�0000144�00000000247�12043464010�020307� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������GifAnim http://wile64.perso.neuf.fr/download/download.php?cat=4&id=8 Version 1.4 (14/09/2009) Some modifications done for Double Commander (see doublecmd.diff). ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/gifanim.lrs������������������������������������������������������0000644�0001750�0000144�00000003514�11376245253�020463� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LazarusResources.Add('tgifanim','XPM',[ '/* XPM */'#13#10'static char * gifanim_xpm[] = {'#13#10'"24 24 31 1",'#13#10 +'" '#9'c None",'#13#10'".'#9'c #959595",'#13#10'"+'#9'c #E1E1E1",'#13#10'"@' +#9'c #919191",'#13#10'"#'#9'c #848484",'#13#10'"$'#9'c #888888",'#13#10'"%'#9 +'c #EEEEEE",'#13#10'"&'#9'c #E6E9EC",'#13#10'"*'#9'c #D6DFE8",'#13#10'"='#9 +'c #FFFFFF",'#13#10'"-'#9'c #E7F0F9",'#13#10'";'#9'c #3783CE",'#13#10'">'#9 +'c #FFF7F7",'#13#10'",'#9'c #FFEFEF",'#13#10'"'''#9'c #F7F2F5",'#13#10'")'#9 +'c #F7FAFD",'#13#10'"!'#9'c #FF5757",'#13#10'"~'#9'c #FFDFDF",'#13#10'"{'#9 +'c #FF4F4F",'#13#10'"]'#9'c #FFD7D7",'#13#10'"^'#9'c #FF4747",'#13#10'"/'#9 +'c #FF3F3F",'#13#10'"('#9'c #8D8D8D",'#13#10'"_'#9'c #EEE6E6",'#13#10'":'#9 +'c #EED6D6",'#13#10'"<'#9'c #EECECE",'#13#10'"['#9'c #FAFAFA",'#13#10'"}'#9 +'c #F2F2F2",'#13#10'"|'#9'c #F6F6F6",'#13#10'"1'#9'c #A2A2A2",'#13#10'"2'#9 +'c #FAF2F2",'#13#10'" .++@ @++. ",'#13#10'" @@@##$$$$$$$$$$$$##' +'@@@ ",'#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" .++@+%%&**&&**&%%+@++. "' +','#13#10'" @@@@%==-;;--;;-==%@@@@ ",'#13#10'" .++.%==-;;--;;-==%.++. ",'#13 +#10'" .++.%>,''--))--'',>%.++. ",'#13#10'" @@@@%,!~>====>~!,%@@@@ ",'#13#10 +'" .++.%>~{]~~~~]{~>%.++. ",'#13#10'" .++.%=>~^////^~>=%.++. ",'#13#10'" @@@' +'(+%%_:<<<<:_%%+(@@@ ",'#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" .++$#$$$' +'$$$$$$$$$#$++. ",'#13#10'" @@@(+%%&**&%%%%%%+(@@@ ",'#13#10'" .++.%==-;;-[}' +'}[==%.++. ",'#13#10'" .++.%==-;;-|11|==%.++. ",'#13#10'" @@@@%>,''--)[}}2,>' +'%@@@@ ",'#13#10'" .++.%,!~>====>~!,%.++. ",'#13#10'" .++.%>~{]~~~~]{~>%.++.' +' ",'#13#10'" @@@@%=>~^////^~>=%@@@@ ",'#13#10'" .++@+%%_:<<<<:_%%+@++. ",' +#13#10'" .++$#$$$$$$$$$$$$#$++. ",'#13#10'" @@@##$$$$$$$$$$$$##@@@ ",'#13#10 +'" .++@ @++. "};'#13#10 ]); ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/gifanim/pkg_gifanim.lpk��������������������������������������������������0000644�0001750�0000144�00000003050�12334444240�021275� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <CONFIG> <Package Version="4"> <PathDelim Value="\"/> <Name Value="pkg_gifanim"/> <AddToProjectUsesSection Value="True"/> <Author Value="Laurent Jacques"/> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <SearchPaths> <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="Show Gif Animation "/> <License Value="GPL "/> <Version Major="1" Minor="4"/> <Files Count="2"> <Item1> <Filename Value="gifanim.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="GifAnim"/> </Item1> <Item2> <Filename Value="gifanim.lrs"/> <Type Value="LRS"/> </Item2> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="2"> <Item1> <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item1> <Item2> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item2> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/��������������������������������������������������������������0000755�0001750�0000144�00000000000�12675717722�016623� 5����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kascombobox.pas�����������������������������������������������0000644�0001750�0000144�00000007375�12474425205�021640� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander Components ------------------------------------------------------------------------- Extended ComboBox classes Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2015 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASComboBox; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TComboBoxWithDelItems } {en Combo box that allows removing items with Shift+Delete. } TComboBoxWithDelItems = class(TComboBox) protected procedure KeyDown(var Key: Word; Shift: TShiftState); override; end; { TComboBoxAutoWidth } TComboBoxAutoWidth = class(TComboBox) protected procedure CalculatePreferredSize( var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure CalculateSize(MaxWidth: Integer; var NeededWidth: Integer); end; procedure Register; implementation uses LCLType, LCLIntf; procedure Register; begin RegisterComponents('KASComponents',[TComboBoxWithDelItems, TComboBoxAutoWidth]); end; { TComboBoxWithDelItems } procedure TComboBoxWithDelItems.KeyDown(var Key: Word; Shift: TShiftState); var Index: Integer; begin if DroppedDown and (Key = VK_DELETE) and (Shift = [ssShift]) then begin Index := ItemIndex; if (Index >= 0) and (Index < Items.Count) then begin Items.Delete(Index); ItemIndex := Index; Key := 0; end; end; inherited KeyDown(Key, Shift); end; { TComboBoxAutoWidth } procedure TComboBoxAutoWidth.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); var AWidth: Integer; begin inherited CalculatePreferredSize(PreferredWidth, PreferredHeight, WithThemeSpace); if csDesigning in ComponentState then Exit; if (Parent = nil) or (not Parent.HandleAllocated) then Exit; AWidth := Constraints.MinMaxWidth(10000); CalculateSize(AWidth, PreferredWidth); end; procedure TComboBoxAutoWidth.CalculateSize(MaxWidth: Integer; var NeededWidth: Integer); var DC: HDC; R: TRect; I, M: Integer; Flags: Cardinal; OldFont: HGDIOBJ; LabelText: String; Idx: Integer = -1; begin if Items.Count = 0 then LabelText:= Text else begin M := Canvas.TextWidth(Text); for I := 0 to Items.Count - 1 do begin Flags := Canvas.TextWidth(Items[I]); if Flags > M then begin M := Flags; Idx := I; end; end; if Idx < 0 then LabelText := Text else begin LabelText := Items[Idx]; end; end; if LabelText = '' then begin NeededWidth := 1; Exit; end; DC := GetDC(Parent.Handle); try R := Rect(0, 0, MaxWidth, 10000); OldFont := SelectObject(DC, HGDIOBJ(Font.Reference.Handle)); Flags := DT_CALCRECT or DT_EXPANDTABS; DrawText(DC, PChar(LabelText), Length(LabelText), R, Flags); SelectObject(DC, OldFont); NeededWidth := R.Right - R.Left + GetSystemMetrics(SM_CXVSCROLL) * 2; finally ReleaseDC(Parent.Handle, DC); end; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kascomp.pas���������������������������������������������������0000644�0001750�0000144�00000001110�11752430571�020743� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ This file was automatically created by Lazarus. Do not edit! This source is only used to compile and install the package. } unit KASComp; interface uses KASToolBar, KASProgressBar, KASPathEdit, KASToolItems, KASComboBox, LazarusPackageIntf; implementation procedure Register; begin RegisterUnit('KASToolBar', @KASToolBar.Register); RegisterUnit('KASProgressBar', @KASProgressBar.Register); RegisterUnit('KASPathEdit', @KASPathEdit.Register); RegisterUnit('KASComboBox', @KASComboBox.Register); end; initialization RegisterPackage('KASComp', @Register); end. ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kascomp.lpk���������������������������������������������������0000644�0001750�0000144�00000004401�12144672601�020752� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0"?> <CONFIG> <Package Version="4"> <Name Value="KASComp"/> <AddToProjectUsesSection Value="True"/> <Author Value="Alexander Koblov"/> <CompilerOptions> <Version Value="11"/> <SearchPaths> <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> <SyntaxOptions> <SyntaxMode Value="Delphi"/> </SyntaxOptions> </Parsing> <Linking> <Debugging> <DebugInfoType Value="dsDwarf2Set"/> </Debugging> </Linking> <Other> <CompilerPath Value="$(CompPath)"/> </Other> </CompilerOptions> <Description Value="ToolBar that loading from *.ini file. Format of *.ini file KASBarMenu is popupmenu read *.bar file and uses *.bar buttons as menu items. "/> <License Value="GNU GPL 2 "/> <Version Major="1" Minor="8"/> <Files Count="5"> <Item1> <Filename Value="kastoolbar.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="KASToolBar"/> </Item1> <Item2> <Filename Value="kasprogressbar.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="KASProgressBar"/> </Item2> <Item3> <Filename Value="kaspathedit.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="KASPathEdit"/> </Item3> <Item4> <Filename Value="kastoolitems.pas"/> <UnitName Value="KASToolItems"/> </Item4> <Item5> <Filename Value="kascombobox.pas"/> <HasRegisterProc Value="True"/> <UnitName Value="KASComboBox"/> </Item5> </Files> <Type Value="RunAndDesignTime"/> <RequiredPkgs Count="3"> <Item1> <PackageName Value="doublecmd_common"/> <MinVersion Minor="3" Valid="True"/> </Item1> <Item2> <PackageName Value="LCL"/> <MinVersion Major="1" Valid="True"/> </Item2> <Item3> <PackageName Value="FCL"/> <MinVersion Major="1" Valid="True"/> </Item3> </RequiredPkgs> <UsageOptions> <UnitPath Value="$(PkgOutDir)"/> </UsageOptions> <PublishOptions> <Version Value="2"/> <IgnoreBinaries Value="False"/> </PublishOptions> </Package> </CONFIG> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kaspathedit.pas�����������������������������������������������0000644�0001750�0000144�00000020722�12630667552�021630� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander Components ------------------------------------------------------------------------- Path edit class with auto complete feature Copyright (C) 2012-2014 Alexander Koblov (alexx2000@mail.ru) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASPathEdit; {$mode delphi} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, ShellCtrls, LCLType; type { TKASPathEdit } TKASPathEdit = class(TEdit) private FPanel: THintWindow; FListBox: TListBox; FKeyDown: Word; FAutoComplete: Boolean; FObjectTypes: TObjectTypes; FFileSortType: TFileSortType; private procedure AutoComplete(const Path: String); procedure SetObjectTypes(const AValue: TObjectTypes); procedure FormChangeBoundsEvent(Sender: TObject); procedure ListBoxClick(Sender: TObject); procedure ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private procedure ShowListBox; procedure HideListBox; protected {$IF DEFINED(LCLWIN32)} procedure CreateWnd; override; {$ENDIF} procedure DoExit; override; procedure KeyDown(var Key: Word; Shift: TShiftState); override; procedure KeyUpAfterInterface(var Key: Word; Shift: TShiftState); override; public constructor Create(AOwner: TComponent); override; published property ObjectTypes: TObjectTypes read FObjectTypes write SetObjectTypes; property FileSortType: TFileSortType read FFileSortType write FFileSortType; end; procedure Register; implementation uses LazUTF8, Math {$IF DEFINED(LCLWIN32)} , ComObj {$ENDIF} ; {$IF DEFINED(LCLWIN32)} const SHACF_AUTOAPPEND_FORCE_ON = $40000000; SHACF_AUTOSUGGEST_FORCE_ON = $10000000; SHACF_FILESYS_ONLY = $00000010; SHACF_FILESYS_DIRS = $00000020; function SHAutoComplete(hwndEdit: HWND; dwFlags: DWORD): HRESULT; stdcall; external 'shlwapi.dll'; function SHAutoCompleteX(hwndEdit: HWND; ObjectTypes: TObjectTypes): Boolean; var dwFlags: DWORD; begin if (ObjectTypes = []) then Exit(False); dwFlags := SHACF_AUTOAPPEND_FORCE_ON or SHACF_AUTOSUGGEST_FORCE_ON; if (otNonFolders in ObjectTypes) then dwFlags := dwFlags or SHACF_FILESYS_ONLY else if (otFolders in ObjectTypes) then dwFlags := dwFlags or SHACF_FILESYS_DIRS; Result:= (SHAutoComplete(hwndEdit, dwFlags) = 0); end; {$ENDIF} procedure Register; begin RegisterComponents('KASComponents', [TKASPathEdit]); end; { TKASPathEdit } procedure TKASPathEdit.AutoComplete(const Path: String); var I: LongWord; BasePath: String; begin FListBox.Clear; if Pos(PathDelim, Path) > 0 then begin BasePath:= ExtractFilePath(Path); TCustomShellTreeView.GetFilesInDir( BasePath, ExtractFileName(Path) + '*', FObjectTypes, FListBox.Items, FFileSortType ); if (FListBox.Items.Count > 0) then begin ShowListBox; // Make absolute file name for I:= 0 to FListBox.Items.Count - 1 do FListBox.Items[I]:= BasePath + FListBox.Items[I]; // Calculate ListBox height with FListBox.ItemRect(0) do I:= Bottom - Top; // TListBox.ItemHeight sometimes don't work under GTK2 with FListBox do begin if Items.Count = 1 then FPanel.ClientHeight:= Self.Height else FPanel.ClientHeight:= I * IfThen(Items.Count > 10, 11, Items.Count + 1); end; end; end; if (FListBox.Items.Count = 0) then HideListBox; end; procedure TKASPathEdit.SetObjectTypes(const AValue: TObjectTypes); begin if FObjectTypes = AValue then Exit; FObjectTypes:= AValue; {$IF DEFINED(LCLWIN32)} if HandleAllocated then RecreateWnd(Self); if FAutoComplete then {$ENDIF} FAutoComplete:= (FObjectTypes <> []); end; procedure TKASPathEdit.FormChangeBoundsEvent(Sender: TObject); begin HideListBox; end; procedure TKASPathEdit.ListBoxClick(Sender: TObject); begin if FListBox.ItemIndex >= 0 then begin Text:= FListBox.Items[FListBox.ItemIndex]; SelStart:= UTF8Length(Text); HideListBox; SetFocus; end; end; procedure TKASPathEdit.ListBoxMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin FListBox.ItemIndex:= FListBox.ItemAtPos(Classes.Point(X, Y), True); end; procedure TKASPathEdit.ShowListBox; begin if (FPanel = nil) then begin FPanel:= THintWindow.Create(Self); FPanel.Color:= clForm; FListBox.Parent:= FPanel; with Parent.ClientToScreen(CLasses.Point(Left, Top)) do begin FPanel.Left:= X; FPanel.Top:= Y + Height; end; FPanel.Width:= Width; FPanel.Visible:= True; Application.AddOnDeactivateHandler(FormChangeBoundsEvent, True); GetParentForm(Self).AddHandlerOnChangeBounds(FormChangeBoundsEvent, True); end; end; procedure TKASPathEdit.HideListBox; begin if (FPanel <> nil) then begin FPanel.Visible:= False; FListBox.Parent:= nil; FreeAndNil(FPanel); Application.RemoveOnDeactivateHandler(FormChangeBoundsEvent); GetParentForm(Self).RemoveHandlerOnChangeBounds(FormChangeBoundsEvent); end; end; {$IF DEFINED(LCLWIN32)} procedure TKASPathEdit.CreateWnd; begin inherited CreateWnd; FAutoComplete:= not SHAutoCompleteX(Handle, FObjectTypes); end; {$ENDIF} procedure TKASPathEdit.DoExit; begin HideListBox; inherited DoExit; end; procedure TKASPathEdit.KeyDown(var Key: Word; Shift: TShiftState); begin FKeyDown:= Key; case Key of VK_ESCAPE, VK_RETURN, VK_SELECT: begin HideListBox; end; VK_UP: if Assigned(FPanel) then begin Key:= 0; if FListBox.ItemIndex = -1 then FListBox.ItemIndex:= FListBox.Items.Count - 1 else if FListBox.ItemIndex - 1 < 0 then FListBox.ItemIndex:= - 1 else FListBox.ItemIndex:= FListBox.ItemIndex - 1; if FListBox.ItemIndex >= 0 then Text:= FListBox.Items[FListBox.ItemIndex] else Text:= ExtractFilePath(Text); SelStart:= UTF8Length(Text); end; VK_DOWN: if Assigned(FPanel) then begin Key:= 0; if FListBox.ItemIndex + 1 >= FListBox.Items.Count then FListBox.ItemIndex:= -1 else if FListBox.ItemIndex = -1 then FListBox.ItemIndex:= IfThen(FListBox.Items.Count > 0, 0, -1) else FListBox.ItemIndex:= FListBox.ItemIndex + 1; if FListBox.ItemIndex >= 0 then Text:= FListBox.Items[FListBox.ItemIndex] else Text:= ExtractFilePath(Text); SelStart:= UTF8Length(Text); end; end; inherited KeyDown(Key, Shift); {$IFDEF LCLGTK2} // Workaround for GTK2 - up and down arrows moving through controls. if Key in [VK_UP, VK_DOWN] then Key:= 0; {$ENDIF} end; procedure TKASPathEdit.KeyUpAfterInterface(var Key: Word; Shift: TShiftState); begin if (FKeyDown = Key) and FAutoComplete and not (Key in [VK_ESCAPE, VK_RETURN, VK_SELECT, VK_UP, VK_DOWN]) then begin if Modified then begin Modified:= False; AutoComplete(Text); end; end; inherited KeyUpAfterInterface(Key, Shift); {$IF DEFINED(LCLWIN32)} // Windows auto-completer eats the TAB so LCL doesn't get it and doesn't move to next control. if not FAutoComplete and (Key = VK_TAB) then GetParentForm(Self).SelectNext(Self, True, True); {$ENDIF} end; constructor TKASPathEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FListBox:= TListBox.Create(Self); FListBox.TabStop:= False; FListBox.Align:= alClient; FListBox.ClickOnSelChange:= False; FListBox.OnClick:= ListBoxClick; FListBox.OnMouseMove:= ListBoxMouseMove; FAutoComplete:= True; FFileSortType:= fstFoldersFirst; FObjectTypes:= [otNonFolders, otFolders]; end; end. ����������������������������������������������doublecmd-0.7.1/components/KASToolBar/kasbarfiles.pas�����������������������������������������������0000644�0001750�0000144�00000025544�11462716745�021625� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ File name: kasbarfiles.pas Author: Dmitry Kolomiets (B4rr4cuda@rambler.ru) Class working with *.bar files. Based on KASToolBar functions Copyright (C) 2006-2007 Koblov Alexander (Alexx2000@mail.ru) contributors: 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASBarFiles; {$mode objfpc}{$H+} interface uses Classes, SysUtils,IniFiles; type //Button property's type //------------------------------------------------------ TInfor=(ButtonX, CmdX, ParamX, PathX, MenuX, IconicX, MiskX ); //------------------------------------------------------ //Class of button //--------------------------------- TKButton=class ButtonX:string; //Icon CmdX:string; //Command or path ParamX:string; //parameters PathX:string; MenuX:string; //Description IconicX:Integer; //-1 0 1 full default minimized ( as TC use) MiskX:string; //Aditional info (shortCut or extention or something else) end; //--------------------------------- { TBarClass } TBarClass=class CurrentBar:string; private XButtons:Tlist; FEnvVar : String; FChangePath : String; function GetButton(Index: Integer): TKButton; function GetButtonCount: Integer; function GetCmdDirFromEnvVar(sPath: String): String; function SetCmdDirAsEnvVar(sPath: String): String; procedure SetButton(Index:Integer; const AValue: TKButton); //------------------------------------------------------ public Constructor Create; destructor Destroy; override; //--------------------- function GetButtonX(Index:integer; What:TInfor):string; function InsertButtonX(InsertAt: Integer; ButtonX, CmdX, ParamX, PathX, MenuX, MiskX: String): Integer; function AddButtonX(ButtonX, CmdX, ParamX, PathX, MenuX, MiskX: String): Integer; //--------------------- procedure RemoveButton(Index: Integer); procedure DeleteAllButtons; procedure SetButtonX(Index:integer; What:Tinfor;Value: string); procedure LoadFromIniFile(IniFile : TIniFile); procedure SaveToIniFile(IniFile : TIniFile); procedure LoadFromFile(FileName : String); procedure LoadFromStringList(List:TStringList); procedure SaveToFile(FileName : String); //--------------------- property ButtonCount: Integer read GetButtonCount; property Buttons[Index:Integer]: TKButton read GetButton write SetButton; property EnvVar : String read FEnvVar write FEnvVar; property ChangePath : String read FChangePath write FChangePath; //------------------------------------------------------ end; implementation { TBarClass } constructor TBarClass.Create; begin XButtons:=TList.Create; end; destructor TBarClass.Destroy; var i:integer; begin if Assigned(XButtons) then begin if XButtons.Count>0 then for I := 0 to XButtons.Count - 1 do TKButton(XButtons.Items[I]).Free; FreeAndNil(XButtons); end; inherited Destroy; end; procedure TBarClass.SetButtonX(Index: integer; What: Tinfor; Value: string); begin If Index>=XButtons.Count then XButtons.Add(TKButton.Create); case What of ButtonX: TKButton(XButtons.Items[Index]).ButtonX:=Value; cmdX: TKButton(XButtons.Items[Index]).cmdX:=Value; paramX: TKButton(XButtons.Items[Index]).paramX:=Value; pathX: TKButton(XButtons.Items[Index]).pathX:=Value; MenuX: TKButton(XButtons.Items[Index]).menuX:=Value; iconicX: begin if Value='' then TKButton(XButtons.Items[Index]).iconicX:=0 else TKButton(XButtons.Items[Index]).iconicX:=StrToInt(Value); end; MiskX: TKButton(XButtons.Items[Index]).MiskX:=Value; end; end; procedure TBarClass.LoadFromIniFile(IniFile: TIniFile); var BtnCount, I : Integer; begin BtnCount := IniFile.ReadInteger('Buttonbar', 'Buttoncount', 0); CurrentBar:= IniFile.FileName; for I := 1 to BtnCount do begin XButtons.Add(TKButton.Create); TKButton(XButtons[I-1]).ButtonX :=IniFile.ReadString('Buttonbar', 'button' + IntToStr(I), ''); TKButton(XButtons[I-1]).CmdX := IniFile.ReadString('Buttonbar', 'cmd' + IntToStr(I), ''); TKButton(XButtons[I-1]).ParamX := IniFile.ReadString('Buttonbar', 'param' + IntToStr(I), ''); TKButton(XButtons[I-1]).PathX := IniFile.ReadString('Buttonbar', 'path' + IntToStr(I), ''); TKButton(XButtons[I-1]).MenuX := IniFile.ReadString('Buttonbar', 'menu' + IntToStr(I), ''); TKButton(XButtons[I-1]).IconicX := IniFile.ReadInteger('Buttonbar', 'icon' + IntToStr(I),0); TKButton(XButtons[I-1]).MiskX := IniFile.ReadString('Buttonbar', 'misk' + IntToStr(I), ''); end; end; procedure TBarClass.SaveToIniFile(IniFile: TIniFile); var I : Integer; begin //For cleaning. Without this saved file will contain removed buttons IniFile.EraseSection('Buttonbar'); IniFile.WriteInteger('Buttonbar', 'Buttoncount', XButtons.Count); for I := 0 to XButtons.Count - 1 do begin IniFile.WriteString('Buttonbar', 'button' + IntToStr(I + 1), SetCmdDirAsEnvVar(GetButtonX(I,ButtonX))); IniFile.WriteString('Buttonbar', 'cmd' + IntToStr(I + 1), SetCmdDirAsEnvVar(GetButtonX(I,CmdX))); IniFile.WriteString('Buttonbar', 'param' + IntToStr(I + 1), GetButtonX(I,ParamX) ); IniFile.WriteString('Buttonbar', 'path' + IntToStr(I + 1), GetButtonX(I,PathX) ); IniFile.WriteString('Buttonbar', 'menu' + IntToStr(I + 1),GetButtonX(I,MenuX) ); IniFile.WriteString('Buttonbar', 'misk' + IntToStr(I + 1),GetButtonX(I,MiskX) ); end; end; function TBarClass.GetButtonX(Index: integer; What: TInfor): string; begin if (index>=XButtons.Count) or (Index<0) then Exit; case What of ButtonX: Result := TKButton(XButtons.Items[Index]).ButtonX; cmdX: Result := TKButton(XButtons.Items[Index]).CmdX; paramX: Result := TKButton(XButtons.Items[Index]).ParamX; pathX: Result := TKButton(XButtons.Items[Index]).PathX; menuX: Result := TKButton(XButtons.Items[Index]).MenuX; iconicX: Result := IntToStr(TKButton(XButtons.Items[Index]).IconicX); MiskX: Result := TKButton(XButtons.Items[Index]).MiskX; end; end; function TBarClass.InsertButtonX(InsertAt: Integer; ButtonX, CmdX, ParamX, PathX, MenuX, MiskX: String): Integer; begin if InsertAt < 0 then InsertAt:= 0; if InsertAt > XButtons.Count then InsertAt:= XButtons.Count; XButtons.Insert(InsertAt, TKButton.Create); TKButton(XButtons[InsertAt]).CmdX:= CmdX; TKButton(XButtons[InsertAt]).ButtonX:= ButtonX; TKButton(XButtons[InsertAt]).ParamX:= ParamX; TKButton(XButtons[InsertAt]).PathX:= PathX; TKButton(XButtons[InsertAt]).MenuX:= MenuX; TKButton(XButtons[InsertAt]).MiskX:= MiskX; Result:= InsertAt; end; function TBarClass.AddButtonX(ButtonX, CmdX, ParamX, PathX, MenuX, MiskX: String): Integer; begin Result := InsertButtonX(XButtons.Count, ButtonX, CmdX, ParamX, PathX, MenuX, MiskX); end; procedure TBarClass.LoadFromFile(FileName: String); var IniFile : Tinifile; begin DeleteAllButtons; IniFile := Tinifile.Create(FileName); LoadFromIniFile(IniFile); IniFile.Free; end; procedure TBarClass.LoadFromStringList(List: TStringList); function ItemOfList(Item:string):string; begin if (List.IndexOfName(Item)>0) then Result:=List.ValueFromIndex[List.IndexOfName(Item)] else Result:=''; end; var BtnCount, I : Integer; begin DeleteAllButtons; if (List.IndexOfName('Buttoncount')<>0) then exit; BtnCount:=StrToInt(List.ValueFromIndex[List.IndexOfName('Buttoncount')]); CurrentBar:='Virtual'; for I := 1 to BtnCount do begin XButtons.Add(TKButton.Create); TKButton(XButtons[I-1]).ButtonX :=ItemOfList('button' + IntToStr(I)); TKButton(XButtons[I-1]).CmdX := ItemOfList('cmd' + IntToStr(I)); TKButton(XButtons[I-1]).ParamX :=ItemOfList('param' + IntToStr(I)); TKButton(XButtons[I-1]).PathX := ItemOfList('path' + IntToStr(I)); TKButton(XButtons[I-1]).MenuX := ItemOfList('menu' + IntToStr(I)); if (ItemOfList('icon' + IntToStr(I))<>'') then TKButton(XButtons[I-1]).IconicX := StrToInt(ItemOfList('icon' + IntToStr(I))); TKButton(XButtons[I-1]).MiskX := ItemOfList('misk' + IntToStr(I)); end; end; procedure TBarClass.SaveToFile(FileName: String); var IniFile : Tinifile; begin IniFile := Tinifile.Create(FileName); SaveToIniFile(IniFile); IniFile.Free; end; procedure TBarClass.RemoveButton(Index: Integer); begin TKButton(XButtons[Index]).Free; XButtons.Delete(Index); end; procedure TBarClass.DeleteAllButtons; begin while XButtons.Count>0 do begin TKButton(XButtons[0]).Free; XButtons.Delete(0); end; end; function TBarClass.GetButtonCount: Integer; begin Result := XButtons.Count; end; function TBarClass.GetButton(Index:Integer): TKButton; begin Result:=TKButton(XButtons[Index]); end; function TBarClass.GetCmdDirFromEnvVar(sPath: String): String; begin DoDirSeparators(sPath); if Pos(FEnvVar, sPath) <> 0 then Result := StringReplace(sPath, FEnvVar, ExcludeTrailingPathDelimiter(FChangePath), [rfIgnoreCase]) else Result := sPath; end; procedure TBarClass.SetButton(Index:Integer; const AValue: TKButton); begin XButtons[Index]:=AValue; end; function TBarClass.SetCmdDirAsEnvVar(sPath: String): String; begin DoDirSeparators(sPath); if Pos(FChangePath, sPath) <> 0 then Result := StringReplace(sPath, ExcludeTrailingPathDelimiter(FChangePath), FEnvVar, [rfIgnoreCase]) else Result := sPath; end; end. ������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/dwtaskbarlist.pas���������������������������������������������0000644�0001750�0000144�00000014466�12014201074�022170� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������unit dwTaskbarList; {$mode delphi}{$H+} interface uses Messages , Windows ; const CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11D0-958A-006097C9A090}'; CLSID_TaskbarList2: TGUID = '{602D4995-B13A-429B-A66E-1935E44F4317}'; CLSID_TaskbarList3: TGUID = '{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'; const THBF_ENABLED = $0000; THBF_DISABLED = $0001; THBF_DISMISSONCLICK = $0002; THBF_NOBACKGROUND = $0004; THBF_HIDDEN = $0008; const THB_BITMAP = $0001; THB_ICON = $0002; THB_TOOLTIP = $0004; THB_FLAGS = $0008; const THBN_CLICKED = $1800; const TBPF_NOPROGRESS = $00; TBPF_INDETERMINATE = $01; TBPF_NORMAL = $02; TBPF_ERROR= $04; TBPF_PAUSED = $08; const TBATF_USEMDITHUMBNAIL: DWORD = $00000001; TBATF_USEMDILIVEPREVIEW: DWORD = $00000002; const WM_DWMSENDICONICTHUMBNAIL = $0323; WM_DWMSENDICONICLIVEPREVIEWBITMAP = $0326; type TTipString = array[0..259] of WideChar; PTipString = ^TTipString; tagTHUMBBUTTON = packed record dwMask : DWORD; iId , iBitmap : UINT; hIcon : HICON; szTip : TTipString; dwFlags : DWORD; end; THUMBBUTTON = tagTHUMBBUTTON; THUMBBUTTONLIST = ^THUMBBUTTON; TThumbButton = THUMBBUTTON; TThumbButtonList = array of TThumbButton; type ITaskbarList = interface ['{56FDF342-FD6D-11D0-958A-006097C9A090}'] procedure HrInit; safecall; procedure AddTab(hwnd: HWND); safecall; procedure DeleteTab(hwnd: HWND); safecall; procedure ActivateTab(hwnd: HWND); safecall; procedure SetActiveAlt(hwnd: HWND); safecall; end; ITaskbarList2 = interface(ITaskbarList) ['{602D4995-B13A-429B-A66E-1935E44F4317}'] procedure MarkFullscreenWindow(hwnd: HWND; fFullscreen: Bool); safecall; end; ITaskbarList3 = interface(ITaskbarList2) ['{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}'] procedure SetProgressValue(hwnd: HWND; ullCompleted, ullTotal: ULONGLONG); safecall; procedure SetProgressState(hwnd: HWND; tbpFlags: DWORD); safecall; procedure RegisterTab(hwndTab: HWND; hwndMDI: HWND); safecall; procedure UnregisterTab(hwndTab: HWND); safecall; procedure SetTabOrder(hwndTab: HWND; hwndInsertBefore: HWND); safecall; procedure SetTabActive(hwndTab: HWND; hwndMDI: HWND; tbatFlags: DWORD); safecall; procedure ThumbBarAddButtons(hwnd: HWND; cButtons: UINT; Button: THUMBBUTTONLIST); safecall; procedure ThumbBarUpdateButtons(hwnd: HWND; cButtons: UINT; pButton: THUMBBUTTONLIST); safecall; procedure ThumbBarSetImageList(hwnd: HWND; himl: HIMAGELIST); safecall; procedure SetOverlayIcon(hwnd: HWND; hIcon: HICON; pszDescription: LPCWSTR); safecall; procedure SetThumbnailTooltip(hwnd: HWND; pszTip: LPCWSTR); safecall; procedure SetThumbnailClip(hwnd: HWND; prcClip: PRect); safecall; end; const DWM_SIT_DISPLAYFRAME = $00000001; // Display a window frame around the provided bitmap DWMWA_FORCE_ICONIC_REPRESENTATION = 7; // [set] Force this window to display iconic thumbnails. DWMWA_HAS_ICONIC_BITMAP = 10; // [set] Indicates an available bitmap when there is no better thumbnail representation. DWMWA_DISALLOW_PEEK = 11; // [set] Don't invoke Peek on the window. type TWMDwmSendIconicLivePreviewBitmap = TWMNoParams; TWMDwmSendIconicThumbnail = packed record Msg : Cardinal; Unused : Integer; Height , Width : Word; Result : LongInt; end; function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT; function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; implementation var hDWMAPI: HMODULE; _DwmInvalidateIconicBitmaps: function(hwnd: HWND): HRESULT; stdcall; _DwmSetIconicThumbnail: function(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; stdcall; _DwmSetIconicLivePreviewBitmap: function(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; stdcall; _DwmSetWindowAttribute: function(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; stdcall; _PrintWindow: function(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall; procedure InitDwmApi; begin if hDWMAPI = 0 then begin hDWMAPI := LoadLibrary('DWMAPI.DLL'); if hDWMAPI = 0 then begin hDWMAPI := THandle(-1); end else begin _DwmInvalidateIconicBitmaps := GetProcAddress(hDWMAPI, 'DwmInvalidateIconicBitmaps'); _DwmSetIconicLivePreviewBitmap := GetProcAddress(hDWMAPI, 'DwmSetIconicLivePreviewBitmap'); _DwmSetIconicThumbnail := GetProcAddress(hDWMAPI, 'DwmSetIconicThumbnail'); _DwmSetWindowAttribute := GetProcAddress(hDWMAPI, 'DwmSetWindowAttribute'); end; end; end; function DwmInvalidateIconicBitmaps(hwnd: HWND): HRESULT; begin InitDwmApi; if Assigned(_DwmInvalidateIconicBitmaps) then Result := _DwmInvalidateIconicBitmaps(hwnd) else Result := E_NOTIMPL; end; function DwmSetIconicLivePreviewBitmap(hwnd: HWND; hbmp: HBITMAP; pptClient: PPoint; dwSITFlags: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetIconicLivePreviewBitmap) then Result := _DwmSetIconicLivePreviewBitmap(hwnd, hbmp, pptClient, dwSITFlags) else Result := E_NOTIMPL; end; function DwmSetIconicThumbnail(hWnd: HWND; hBmp: HBITMAP; dwSITFlags: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetIconicThumbnail) then Result := _DwmSetIconicThumbnail(hWnd, hBmp, dwSITFlags) else Result := E_NOTIMPL; end; function DwmSetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HRESULT; begin InitDwmApi; if Assigned(_DwmSetWindowAttribute) then Result := _DwmSetWindowAttribute(hwnd, dwAttribute, pvAttribute, cbAttribute) else Result := E_NOTIMPL; end; {-----------------------------------------------} function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; begin if Assigned(_PrintWindow) then begin Result := _PrintWindow(hwnd, hdcBlt, nFlags); end else begin _PrintWindow := GetProcAddress(GetModuleHandle('user32.dll'), 'PrintWindow'); Result := Assigned(_PrintWindow) and _PrintWindow(hwnd, hdcBlt, nFlags); end; end; end. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kasbarmenu.pas������������������������������������������������0000644�0001750�0000144�00000012317�12014201074�021433� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ File name: kasbarmenu.pas KASBarMenu Copyright (C) 2008 Dmitry Kolomiets (B4rr4cuda@rambler.ru) Popup menu with *.bar's buttons as MenuItems Based on KASToolBar functions Copyright (C) 2006-2007 Koblov Alexander (Alexx2000@mail.ru) contributors: 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASBarMenu; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Menus, KASBarFiles, FileUtil, IniFiles; type TOnLoadButtonGlyph = function (sIconFileName : String; iIconSize : Integer; clBackColor : TColor) : TBitmap of object; TOnMenuButtonClick = procedure (Sender: TObject; NumberOfButton : Integer) of object; { TKASBarMenu } TKASBarMenu = class(TPopupMenu) private FBar:TBarClass; FOnLoadButtonGlyph : TOnLoadButtonGlyph; FOnMenuButtonClick : TOnMenuButtonClick; //------------------------------------------------------ procedure MenuOnClick(Sender: TObject); function LoadBtnIcon(IconPath: String): TBitMap; //------------------------------------------------------ protected public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; //--------------------- procedure Clear; procedure LoadFromStringList(List: TStringList); procedure LoadFromIniFile(IniFile : TIniFile); procedure SaveToIniFile(IniFile : TIniFile); procedure LoadBarFile(FileName:string); procedure SaveToFile(FileName : String); procedure MakeMenu; //------------------------------------------------------ published property BarFile: TBarClass read FBar write FBar; property OnLoadButtonGlyph : TOnLoadButtonGlyph read FOnLoadButtonGlyph write FOnLoadButtonGlyph; property OnMenuButtonClick: TOnMenuButtonClick read FOnMenuButtonClick write FOnMenuButtonClick; //------------------------------------------------------ end; procedure Register; implementation procedure Register; begin RegisterComponents('KASComponents',[TKASBarMenu]); end; { TKASBarMenu } function TKASBarMenu.LoadBtnIcon(IconPath: String): TBitMap; var PNG : TPortableNetworkGraphic; begin Result := Graphics.TBitmap.Create; if (IconPath <> '') and FileExists(IconPath) then begin if CompareFileExt(IconPath, 'png', false) = 0 then begin PNG := TPortableNetworkGraphic.Create; try PNG.LoadFromFile(IconPath); Result.Assign(PNG); finally FreeAndNil(PNG); end; end else begin Result.LoadFromFile(IconPath); end; end; end; procedure TKASBarMenu.MenuOnClick(Sender: TObject); begin if Assigned(FOnMenuButtonClick) then FOnMenuButtonClick(Self, (Sender as TMenuItem).Tag); end; constructor TKASBarMenu.Create(TheOwner: TComponent); begin FBar:=TBarClass.Create; inherited Create(TheOwner); end; destructor TKASBarMenu.Destroy; begin FBar.DeleteAllButtons; FreeAndNil(FBar); inherited Destroy; end; procedure TKASBarMenu.Clear; begin FBar.DeleteAllButtons; end; procedure TKASBarMenu.MakeMenu; var I:Integer; Item:TMenuItem; BitmapTmp: TBitmap; begin For I:=0 to Fbar.ButtonCount-1 do begin Item:=TMenuItem.Create(Self); if Fbar.GetButtonX(I,MiskX) <> '' then Item.Caption:=Fbar.GetButtonX(I,MenuX)+' ('+Fbar.GetButtonX(I,MiskX)+')' else Item.Caption:=Fbar.GetButtonX(I,MenuX); //------------------------------------------------------ if Assigned(FOnLoadButtonGlyph) then BitmapTmp := FOnLoadButtonGlyph(FBar.GetButtonX(I,ButtonX), 16, clMenu) else BitmapTmp := LoadBtnIcon(FBar.GetButtonX(I,ButtonX)); Item.Bitmap := BitmapTmp; if Assigned(BitmapTmp) then FreeAndNil(BitmapTmp); //------------------------------------------------------ Item.Tag:=I; Item.OnClick:=TNotifyEvent(@MenuOnClick); Self.Items.Insert(I,Item); end; end; procedure TKASBarMenu.LoadBarFile(FileName: string); begin FBar.DeleteAllButtons; Self.Items.Clear; FBar.LoadFromFile(FileName); MakeMenu; end; procedure TKASBarMenu.LoadFromStringList(List: TStringList); begin FBar.DeleteAllButtons; Self.Items.Clear; FBar.LoadFromStringList(List); MakeMenu; end; procedure TKASBarMenu.LoadFromIniFile(IniFile: TIniFile); begin FBar.DeleteAllButtons; Self.Items.Clear; FBar.LoadFromIniFile(IniFile); MakeMenu; end; procedure TKASBarMenu.SaveToIniFile(IniFile: TIniFile); begin FBar.SaveToIniFile(IniFile); end; procedure TKASBarMenu.SaveToFile(FileName: String); begin FBar.SaveToFile(FileName); end; end. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kasprogressbar.pas��������������������������������������������0000644�0001750�0000144�00000011315�12014201074�022330� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander Components ------------------------------------------------------------------------- Extended ProgressBar class Copyright (C) 2010 Przemyslaw Nagay (cobines@gmail.com) Copyright (C) 2011-2012 Koblov Alexander (Alexx2000@mail.ru) Windows 7 implementation based on "Windows 7 Component Library" by Daniel Wischnewski (http://www.gumpi.com/blog) 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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASProgressBar; {$mode objfpc}{$H+} interface uses LCLType, Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls {$IFDEF LCLWIN32} , InterfaceBase, ComObj, dwTaskbarList {$ENDIF} {$IFDEF LCLGTK2} , Gtk2 {$ENDIF} {$IFDEF LCLQT} , qt4, qtwidgets {$ENDIF} ; type { TKASProgressBar } TKASProgressBar = class(TProgressBar) private FShowInTaskbar: Boolean; {$IFDEF LCLWIN32} FTaskBarEntryHandle: HWND; FTaskbarList: ITaskbarList; FTaskbarList3: ITaskbarList3; {$ENDIF} protected {$IFDEF LCLWIN32} procedure InitializeWnd; override; {$ENDIF} procedure DoOnResize; override; public constructor Create(AOwner: TComponent); override; procedure SetProgress(CurrentValue: Int64; MaxValue: Int64; BarText: String = ''); published property ShowInTaskbar: Boolean read FShowInTaskbar write FShowInTaskbar default False; end; procedure Register; implementation procedure Register; begin RegisterComponents('KASComponents',[TKASProgressBar]); end; { TKASProgressBar } {$IFDEF LCLWIN32} procedure TKASProgressBar.InitializeWnd; var aOwnerForm: TWinControl; begin inherited InitializeWnd; if CheckWin32Version(6, 1) then begin aOwnerForm:= GetParentForm(Self); if Assigned(aOwnerForm) and (aOwnerForm <> Application.MainForm) then FTaskBarEntryHandle := aOwnerForm.Handle else FTaskBarEntryHandle := Widgetset.AppHandle; end; end; {$ENDIF} procedure TKASProgressBar.DoOnResize; begin inherited; Max := Width; end; constructor TKASProgressBar.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IFDEF LCLWIN32} FTaskbarList3 := nil; FTaskBarEntryHandle := INVALID_HANDLE_VALUE; // Works only under Windows 7 and higher if CheckWin32Version(6, 1) then try FTaskbarList := ITaskbarList(CreateComObject(CLSID_TaskbarList)); FTaskbarList.HrInit; FTaskbarList.QueryInterface(CLSID_TaskbarList3, FTaskbarList3); except FTaskbarList3 := nil; end; {$ENDIF} {$IFDEF LCLGTK2} // Have to disable LCLGTK2 default progress bar text // set in TGtk2WSProgressBar.UpdateProgressBarText. BarShowText := False; {$ENDIF} end; procedure TKASProgressBar.SetProgress(CurrentValue: Int64; MaxValue: Int64; BarText: String); {$IFDEF LCLGTK2} var wText: String; {$ENDIF} {$IFDEF LCLQT} var wText: WideString; {$ENDIF} begin if MaxValue <> 0 then Position := Round(CurrentValue * Max / MaxValue) else Position := 0; {$IFDEF LCLWIN32} if FShowInTaskbar and (FTaskBarEntryHandle <> INVALID_HANDLE_VALUE) and Assigned(FTaskbarList3) then begin FTaskbarList3.SetProgressValue(FTaskBarEntryHandle, Position, Max); end; {$ENDIF} {$IFDEF LCLGTK2} { %v - the current progress value. %l - the lower bound for the progress value. %u - the upper bound for the progress value. %p - the current progress percentage. } if BarText <> '' then wText := BarText + ' (%p%%)' else wText := '%p%%'; gtk_progress_set_format_string(PGtkProgress(Self.Handle), PChar(wText)); // Have to reset 'show_text' every time because LCLGTK2 will set it according to BarShowText. gtk_progress_set_show_text(PGtkProgress(Self.Handle), True); {$ENDIF} {$IFDEF LCLQT} { %p - is replaced by the percentage completed. %v - is replaced by the current value. %m - is replaced by the total number of steps. } if BarText <> '' then wText := WideString(BarText) + ' (%p%)' else wText := '%p%'; QProgressBar_setFormat(QProgressBarH(TQtProgressBar(Self.Handle).Widget), @wText); //QProgressBar_setTextVisible(QProgressBarH(TQtProgressBar(Self.Handle).Widget), True); {$ENDIF} end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kastoolbar.pas������������������������������������������������0000644�0001750�0000144�00000076613�12653160154�021471� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander components ------------------------------------------------------------------------- Toolbar panel class Copyright (C) 2006-2016 Koblov Alexander (Alexx2000@mail.ru) contributors: 2012 Przemyslaw Nagay (cobines@gmail.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 in a file called COPYING along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. } unit KASToolBar; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, ComCtrls, Graphics, Dialogs, ExtCtrls, Buttons, FileUtil, Menus, DCXmlConfig, KASToolItems, LCLVersion; type TOnToolButtonClick = procedure (Sender: TObject) of object; TOnToolButtonMouseUpDown = procedure (Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer) of object; TOnToolButtonMouseMove = procedure (Sender: TObject; Shift:TShiftState; X,Y:Integer; NumberOfButton: Integer) of object; TOnToolButtonDragOver = procedure(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean; NumberOfButton: Integer) of object; TOnToolButtonDragDrop = procedure(Sender, Source: TObject; X, Y: Integer) of object; TOnToolButtonEndDrag = procedure(Sender, Target: TObject; X,Y: Integer) of object; TOnLoadButtonGlyph = function (ToolItem: TKASToolItem; iIconSize: Integer; clBackColor: TColor): TBitmap of object; TOnToolItemExecute = procedure (ToolItem: TKASToolItem) of object; TOnConfigLoadItem = function (Config: TXmlConfig; Node: TXmlNode): TKASToolItem of object; TOnToolItemShortcutsHint = function (ToolItem: TKASNormalItem): String of object; TTypeOfConfigurationLoad = (tocl_FlushCurrentToolbarContent, tocl_AddToCurrentToolbarContent); TKASToolBar = class; { TKASToolButton } TKASToolButton = class(TSpeedButton) private FToolItem: TKASToolItem; function GetToolBar: TKASToolBar; protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; public constructor Create(AOwner: TComponent; Item: TKASToolItem); reintroduce; property ToolBar: TKASToolBar read GetToolBar; property ToolItem: TKASToolItem read FToolItem; end; { TKASToolDivider } TKASToolDivider = class(TKASToolButton) protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); override; procedure Paint; override; end; { TKASToolBar } TKASToolBar = class(TToolBar, IToolOwner) private FButtonHeight: Integer; FButtonWidth: Integer; FFlat: Boolean; FGlyphSize: Integer; FRadioToolBar: Boolean; FRowHeight: Integer; FShowDividerAsButton: Boolean; FToolItemExecutors: TFPList; FToolItems: TKASToolBarItems; FToolPopupMenu: TPopupMenu; FOwnsToolItems: Boolean; {$if lcl_fullversion < 1010000} FUpdateCount: Integer; {$endif} FOnToolButtonClick: TOnToolButtonClick; FOnToolButtonMouseDown: TOnToolButtonMouseUpDown; FOnToolButtonMouseUp: TOnToolButtonMouseUpDown; FOnToolButtonMouseMove: TOnToolButtonMouseMove; FOnToolButtonDragOver: TOnToolButtonDragOver; FOnToolButtonDragDrop: TOnToolButtonDragDrop; FOnToolButtonEndDrag: TOnToolButtonEndDrag; FOnLoadButtonGlyph: TOnLoadButtonGlyph; FOnToolItemExecute: TOnToolItemExecute; FOnToolItemShortcutsHint: TOnToolItemShortcutsHint; FKASToolBarFlags: TToolBarFlags; FResizeButtonsNeeded: Boolean; procedure AssignToolButtonProperties(ToolButton: TKASToolButton); procedure ClearExecutors; function CreateButton(Item: TKASToolItem): TKASToolButton; function ExecuteToolItem(Item: TKASToolItem): Boolean; function FindButton(Button: TKASToolButton): Integer; function GetChangePath: String; function GetEnvVar: String; function GetToolItemShortcutsHint(Item: TKASToolItem): String; function LoadBtnIcon(IconPath: String): TBitMap; procedure DrawLinkIcon(Image: TBitMap); function GetButton(Index: Integer): TKASToolButton; procedure InsertButton(InsertAt: Integer; ToolButton: TKASToolButton); procedure SetButtonHeight(const AValue: Integer); procedure SetButtonWidth(const AValue: Integer); procedure SetChangePath(const AValue: String); procedure SetEnvVar(const AValue: String); procedure SetFlat(const AValue: Boolean); procedure SetGlyphSize(const AValue: Integer); procedure ShowMenu(ToolButton: TKASToolButton); procedure ToolButtonClick(Sender: TObject); procedure ToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); procedure ToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); procedure ToolButtonMouseMove(Sender: TObject; Shift:TShiftState; X,Y:Integer); procedure ToolButtonDragOver(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); procedure ToolButtonDragDrop(Sender, Source: TObject; X,Y: Integer); procedure ToolButtonEndDrag(Sender, Target: TObject; X, Y: Integer); procedure ToolItemLoaded(Item: TKASToolItem); procedure ToolMenuClicked(Sender: TObject); procedure UpdateButtonsTags; protected procedure CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); override; procedure ControlsAligned; override; procedure FontChanged(Sender: TObject); override; function WrapButtons(UseWidth: integer; out NewWidth, NewHeight: Integer; Simulate: boolean): Boolean; procedure ResizeButtons; public constructor Create(TheOwner: TComponent); override; destructor Destroy; override; function AddButton(Item: TKASToolItem): TKASToolButton; procedure AddToolItemExecutor(ToolItemClass: TKASToolItemClass; ExecuteFunction: TOnToolItemExecute); procedure Clear; procedure ClickItem(ToolItemID: String); overload; function InsertButton(InsertAt: Integer; Item: TKASToolItem): TKASToolButton; function InsertButton(InsertAt: TKASToolButton; Item: TKASToolItem): TKASToolButton; procedure MoveButton(ButtonIndex, MovePosition: Integer); procedure MoveButton(SourceButton: TKASToolButton; TargetToolBar: TKASToolBar; InsertAt: TKASToolButton); procedure RemoveButton(Index: Integer); procedure RemoveButton(Button: TKASToolButton); procedure RemoveToolItemExecutor(ExecuteFunction: TOnToolItemExecute); procedure UncheckAllButtons; procedure UpdateIcon(ToolButton: TKASToolButton); procedure UseItems(AItems: TKASToolBarItems); procedure LoadConfiguration(Config: TXmlConfig; RootNode: TXmlNode; Loader: TKASToolBarLoader; ConfigurationLoadType:TTypeOfConfigurationLoad); procedure SaveConfiguration(Config: TXmlConfig; RootNode: TXmlNode); procedure BeginUpdate; override; procedure EndUpdate; override; procedure SetButtonSize(NewButtonWidth, NewButtonHeight: Integer); property Buttons[Index: Integer]: TKASToolButton read GetButton; property RowHeight: Integer read FRowHeight; published property OnLoadButtonGlyph : TOnLoadButtonGlyph read FOnLoadButtonGlyph write FOnLoadButtonGlyph; property OnToolButtonClick: TOnToolButtonClick read FOnToolButtonClick write FOnToolButtonClick; property OnToolButtonMouseDown: TOnToolButtonMouseUpDown read FOnToolButtonMouseDown write FOnToolButtonMouseDown; property OnToolButtonMouseUp: TOnToolButtonMouseUpDown read FOnToolButtonMouseUp write FOnToolButtonMouseUp; property OnToolButtonMouseMove: TOnToolButtonMouseMove read FOnToolButtonMouseMove write FOnToolButtonMouseMove; property OnToolButtonDragDrop: TOnToolButtonDragDrop read FOnToolButtonDragDrop write FOnToolButtonDragDrop; property OnToolButtonEndDrag: TOnToolButtonEndDrag read FOnToolButtonEndDrag write FOnToolButtonEndDrag; property OnToolButtonDragOver: TOnToolButtonDragOver read FOnToolButtonDragOver write FOnToolButtonDragOver; property OnToolItemExecute: TOnToolItemExecute read FOnToolItemExecute write FOnToolItemExecute; property OnToolItemShortcutsHint: TOnToolItemShortcutsHint read FOnToolItemShortcutsHint write FOnToolItemShortcutsHint; property RadioToolBar: Boolean read FRadioToolBar write FRadioToolBar default False; property Flat: Boolean read FFlat write SetFlat default False; property GlyphSize: Integer read FGlyphSize write SetGlyphSize; property ButtonHeight: Integer read FButtonHeight write SetButtonHeight default 22; property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 23; property ShowDividerAsButton: Boolean read FShowDividerAsButton write FShowDividerAsButton default False; property ChangePath: String read GetChangePath write SetChangePath; property EnvVar: String read GetEnvVar write SetEnvVar; end; procedure Register; implementation uses Themes, types, math, DCOSUtils; type PToolItemExecutor = ^TToolItemExecutor; TToolItemExecutor = record ToolItemClass: TKASToolItemClass; ToolItemExecute: TOnToolItemExecute; end; procedure Register; begin RegisterComponents('KASComponents',[TKASToolBar]); end; { TKASToolBar } procedure TKASToolBar.InsertButton(InsertAt: Integer; ToolButton: TKASToolButton); begin if InsertAt < 0 then InsertAt:= 0; if InsertAt > ButtonList.Count then InsertAt:= ButtonList.Count; ButtonList.Insert(InsertAt, ToolButton); FToolItems.Insert(InsertAt, ToolButton.ToolItem); UpdateButtonsTags; ResizeButtons; end; function TKASToolBar.InsertButton(InsertAt: TKASToolButton; Item: TKASToolItem): TKASToolButton; var Index: Integer; begin Index := ButtonList.IndexOf(InsertAt); if Index < 0 then Index := ButtonCount; Result := InsertButton(Index, Item); end; procedure TKASToolBar.CalculatePreferredSize(var PreferredWidth, PreferredHeight: Integer; WithThemeSpace: Boolean); begin WrapButtons(Width, PreferredWidth, PreferredHeight, True); end; procedure TKASToolBar.ControlsAligned; var NewWidth, NewHeight: integer; begin if tbfPlacingControls in FKASToolBarFlags then exit; Include(FKASToolBarFlags, tbfPlacingControls); try WrapButtons(Width, NewWidth, NewHeight, False); finally Exclude(FKASToolBarFlags, tbfPlacingControls); end; end; procedure TKASToolBar.FontChanged(Sender: TObject); begin inherited FontChanged(Sender); ResizeButtons; end; function TKASToolBar.WrapButtons(UseWidth: integer; out NewWidth, NewHeight: Integer; Simulate: boolean): Boolean; var ARect: TRect; x: Integer; y: Integer; CurControl: TControl; StartX: Integer; procedure CalculatePosition; var NewBounds: TRect; begin NewBounds := Bounds(x, y, CurControl.Width, RowHeight); repeat if (not Wrapable) or (NewBounds.Right <= ARect.Right) or (NewBounds.Left = StartX) then begin // control fits into the row x := NewBounds.Left; y := NewBounds.Top; break; end; // try next row NewBounds.Left := StartX; NewBounds.Right := NewBounds.Left + CurControl.Width; inc(NewBounds.Top, RowHeight); inc(NewBounds.Bottom, RowHeight); until false; end; var CurClientRect: TRect; AdjustClientFrame: TRect; i: Integer; w, h: Longint; begin Result := True; NewWidth := 0; NewHeight := 0; DisableAlign; BeginUpdate; try CurClientRect := ClientRect; inc(CurClientRect.Right, UseWidth - Width); ARect := CurClientRect; AdjustClientRect(ARect); AdjustClientFrame.Left := ARect.Left - CurClientRect.Left; AdjustClientFrame.Top := ARect.Top - CurClientRect.Top; AdjustClientFrame.Right := CurClientRect.Right - ARect.Right; AdjustClientFrame.Bottom := CurClientRect.Bottom - ARect.Bottom; //DebugLn(['TToolBar.WrapButtons ',DbgSName(Self),' ARect=',dbgs(ARect)]); // important: top, left button must start in the AdjustClientRect top, left // otherwise Toolbar.AutoSize=true will create an endless loop StartX := ARect.Left; x := StartX; y := ARect.Top; for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); if not CurControl.IsControlVisible then Continue; CalculatePosition; w := CurControl.Width; h := CurControl.Height; if (not Simulate) and ((CurControl.Left <> x) or (CurControl.Top <> y)) then begin CurControl.SetBounds(x,y,w,h); // Note: do not use SetBoundsKeepBase end; // adjust NewWidth, NewHeight NewWidth := Max(NewWidth, x + w + AdjustClientFrame.Right); NewHeight := Max(NewHeight, y + h + AdjustClientFrame.Bottom); // step to next position inc(x,w); end; finally EndUpdate; EnableAlign; end; end; procedure TKASToolBar.ResizeButtons; var w, h: LongInt; i: Integer; CurControl: TControl; begin if FUpdateCount > 0 then begin FResizeButtonsNeeded := True; Exit; end; InvalidatePreferredChildSizes; FRowHeight := ButtonHeight; // Row height is at least initial button height // First recalculate RowHeight. for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); w := ButtonWidth; h := ButtonHeight; CurControl.GetPreferredSize(w, h); if FRowHeight < h then FRowHeight := h; end; FResizeButtonsNeeded := False; // Now resize buttons. DisableAlign; BeginUpdate; try for i := 0 to ButtonList.Count - 1 do begin CurControl := TControl(ButtonList[i]); w := ButtonWidth; h := RowHeight; CurControl.GetPreferredSize(w, h); if (CurControl.Width <> w) or (CurControl.Height <> h) then CurControl.SetBounds(CurControl.Left, CurControl.Top, w, h); end; InvalidatePreferredSize; AdjustSize; finally EndUpdate; EnableAlign; end; end; procedure TKASToolBar.SaveConfiguration(Config: TXmlConfig; RootNode: TXmlNode); var Node: TXmlNode; Item: TKASToolItem; i: Integer; begin if ButtonCount > 0 then begin Node := Config.AddNode(RootNode, 'Row'); for i := 0 to ButtonCount - 1 do begin Item := TKASToolButton(Buttons[i]).ToolItem; Item.Save(Config, Node); end; end; end; procedure TKASToolBar.DrawLinkIcon(Image: TBitMap); var sizeLink : Integer; bmLinkIcon : TBitmap; {$IFDEF LCLGTK2} bmTempIcon : TBitmap; {$ENDIF} ToolItem: TKASNormalItem; begin if (Image = nil) or (FOnLoadButtonGlyph = nil) then Exit; sizeLink := FGlyphSize div 2; ToolItem := TKASNormalItem.Create; ToolItem.Icon := 'emblem-symbolic-link'; bmLinkIcon:= FOnLoadButtonGlyph(ToolItem, sizeLink, clBtnFace); ToolItem.Free; if Assigned(bmLinkIcon) then begin {$IFDEF LCLGTK2} // Under GTK2 can not draw over alpha transparent pixels bmTempIcon := TBitmap.Create; bmTempIcon.Assign(Image); Image.FreeImage; Image.SetSize(FGlyphSize, FGlyphSize); Image.Canvas.Brush.Color := clBtnFace; Image.Canvas.FillRect(0, 0, FGlyphSize, FGlyphSize); Image.Canvas.Draw(0, 0, bmTempIcon); bmTempIcon.Free; {$ENDIF} Image.Canvas.Draw(FGlyphSize-sizeLink+2,FGlyphSize-sizeLink+2, bmLinkIcon); Image.TransparentColor:= clBtnFace; Image.Transparent:= True; bmLinkIcon.Free; end; end; function TKASToolBar.LoadBtnIcon(IconPath: String): TBitMap; var picture: TPicture; begin if (IconPath = '') or (not mbFileExists(IconPath)) then Exit(nil); Picture := TPicture.Create; try Picture.LoadFromFile(IconPath); Result := TBitmap.Create; Result.Assign(Picture.Bitmap); finally FreeAndNil(Picture); end; end; procedure TKASToolBar.LoadConfiguration(Config: TXmlConfig; RootNode: TXmlNode; Loader: TKASToolBarLoader; ConfigurationLoadType:TTypeOfConfigurationLoad); var Node: TXmlNode; begin BeginUpdate; if ConfigurationLoadType=tocl_FlushCurrentToolbarContent then begin Clear; Application.ProcessMessages; end; try Node := Config.FindNode(RootNode, 'Row', False); if Assigned(Node) then Loader.Load(Config, Node, @ToolItemLoaded); finally EndUpdate; end; end; procedure TKASToolBar.AssignToolButtonProperties(ToolButton: TKASToolButton); begin ToolButton.OnClick:= @ToolButtonClick; ToolButton.OnMouseDown:= @ToolButtonMouseDown; ToolButton.OnMouseUp:= @ToolButtonMouseUp; ToolButton.OnMouseMove:= @ToolButtonMouseMove; ToolButton.OnDragDrop:= @ToolButtonDragDrop; ToolButton.OnDragOver:= @ToolButtonDragOver; ToolButton.OnEndDrag:= @ToolButtonEndDrag; end; function TKASToolBar.GetChangePath: String; begin end; function TKASToolBar.GetEnvVar: String; begin end; function TKASToolBar.GetToolItemShortcutsHint(Item: TKASToolItem): String; begin Result := ''; if Assigned(FOnToolItemShortcutsHint) and (Item is TKASNormalItem) then Result := FOnToolItemShortcutsHint(TKASNormalItem(Item)); end; function TKASToolBar.GetButton(Index: Integer): TKASToolButton; begin Result:= TKASToolButton(ButtonList.Items[Index]); end; procedure TKASToolBar.SetChangePath(const AValue: String); begin end; procedure TKASToolBar.SetEnvVar(const AValue: String); begin end; procedure TKASToolBar.SetFlat(const AValue: Boolean); var I: Integer; begin FFlat:= AValue; for I:= 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Flat:= FFlat; end; procedure TKASToolBar.SetGlyphSize(const AValue: Integer); var I: Integer; begin if FGlyphSize = AValue then Exit; FGlyphSize:= AValue; BeginUpdate; try for I := 0 to ButtonList.Count - 1 do UpdateIcon(TKASToolButton(ButtonList[i])); finally EndUpdate; end; end; procedure TKASToolBar.ShowMenu(ToolButton: TKASToolButton); var Depth: Integer = 0; procedure MakeMenu(PopupMenu: TMenuItem; MenuItem: TKASMenuItem); var I: Integer; Item: TKASToolItem; PopupMenuItem: TMenuItem; BitmapTmp: TBitmap = nil; sText: String; begin for I := 0 to MenuItem.SubItems.Count - 1 do begin Item := MenuItem.SubItems.Items[I]; if Item is TKASSeparatorItem then begin PopupMenu.AddSeparator; end else begin PopupMenuItem := TMenuItem.Create(PopupMenu); sText := Item.GetEffectiveText; if sText = '' then sText := Item.GetEffectiveHint; PopupMenuItem.Caption := StringReplace(StringReplace(sText, #$0A, ' | ', [rfReplaceAll]), ' | ----', '', [rfReplaceAll]); if Item is TKASNormalItem then begin if Assigned(FOnLoadButtonGlyph) then BitmapTmp := FOnLoadButtonGlyph(Item, 16, clMenu); if not Assigned(BitmapTmp) then BitmapTmp := LoadBtnIcon(TKASNormalItem(Item).Icon); PopupMenuItem.Bitmap := BitmapTmp; FreeAndNil(BitmapTmp); end; PopupMenuItem.Tag := PtrInt(Item); PopupMenuItem.OnClick := TNotifyEvent(@ToolMenuClicked); PopupMenu.Add(PopupMenuItem); if Item is TKASMenuItem then MakeMenu(PopupMenuItem, TKASMenuItem(Item)); end; end; end; var Point: TPoint; begin FToolPopupMenu.Free; FToolPopupMenu := TPopupMenu.Create(Self); MakeMenu(FToolPopupMenu.Items, ToolButton.ToolItem as TKASMenuItem); Point.x := ToolButton.Left; Point.y := ToolButton.Top + ToolButton.Height; Point := Self.ClientToScreen(Point); FToolPopupMenu.PopUp(Point.x, Point.y); end; procedure TKASToolBar.ToolButtonClick(Sender: TObject); var Button: TKASToolButton; begin Button := Sender as TKASToolButton; // Do not allow depressing down buttons. if FRadioToolBar and not Button.Down then Button.Down := True; if not ExecuteToolItem(Button.ToolItem) then begin if Assigned(FOnToolButtonClick) then FOnToolButtonClick(Button) else if Button.ToolItem is TKASMenuItem then begin ShowMenu(Button); end; end; end; procedure TKASToolBar.ToolButtonMouseDown(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseDown) then FOnToolButtonMouseDown(Sender, Button, Shift, X,Y); end; procedure TKASToolBar.ToolButtonMouseUp(Sender: TObject; Button: TMouseButton; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseUp) then FOnToolButtonMouseUp(Sender, Button, Shift, X,Y); end; procedure TKASToolBar.ToolItemLoaded(Item: TKASToolItem); begin AddButton(Item); end; procedure TKASToolBar.ToolMenuClicked(Sender: TObject); begin ExecuteToolItem(TKASToolItem((Sender as TMenuItem).Tag)); end; procedure TKASToolBar.ToolButtonMouseMove(Sender: TObject; Shift:TShiftState; X,Y:Integer); begin if Assigned(FOnToolButtonMouseMove) then FOnToolButtonMouseMove(Sender, Shift, X,Y, (Sender as TSpeedButton).Tag); end; procedure TKASToolBar.ToolButtonDragOver(Sender, Source: TObject; X,Y: Integer; State: TDragState; var Accept: Boolean); begin if Assigned(FOnToolButtonDragOver) then FOnToolButtonDragOver(Sender, Source, X,Y, State, Accept, (Sender as TSpeedButton).Tag); end; procedure TKASToolBar.ToolButtonDragDrop(Sender, Source: TObject; X,Y: Integer); begin if Assigned(FOnToolButtonDragDrop) then FOnToolButtonDragDrop(Sender, Source, X, Y); end; procedure TKASToolBar.ToolButtonEndDrag(Sender, Target: TObject; X, Y: Integer); begin if Assigned(FOnToolButtonEndDrag) then FOnToolButtonEndDrag(Sender, Target, X, Y); end; procedure TKASToolBar.MoveButton(ButtonIndex, MovePosition: Integer); begin ButtonList.Move(ButtonIndex, MovePosition); FToolItems.Move(ButtonIndex, MovePosition); UpdateButtonsTags; ResizeButtons; end; procedure TKASToolBar.MoveButton(SourceButton: TKASToolButton; TargetToolBar: TKASToolBar; InsertAt: TKASToolButton); var Index: Integer; ToolItem: TKASToolItem; begin Index := FindButton(SourceButton); if (Index <> -1) and (FToolItems[Index] = SourceButton.ToolItem) then begin SourceButton.FToolItem := nil; TargetToolBar.InsertButton(InsertAt, FToolItems.ReleaseItem(Index)); ButtonList.Delete(Index); Application.ReleaseComponent(SourceButton); // Free later UpdateButtonsTags; Resize; end; end; procedure TKASToolBar.UpdateButtonsTags; var I: Integer; begin for I:= 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Tag:= I; end; procedure TKASToolBar.UpdateIcon(ToolButton: TKASToolButton); var Bitmap: TBitmap = nil; begin try if Assigned(FOnLoadButtonGlyph) then Bitmap := FOnLoadButtonGlyph(ToolButton.ToolItem, FGlyphSize, clBtnFace); if not Assigned(Bitmap) and (ToolButton.ToolItem is TKASNormalItem) then Bitmap := LoadBtnIcon(TKASNormalItem(ToolButton.ToolItem).Icon); try if (ToolButton.ToolItem is TKASMenuItem) and Assigned(Bitmap) then DrawLinkIcon(Bitmap); ToolButton.Glyph.Assign(Bitmap); finally Bitmap.Free; end; except // Ignore end; end; procedure TKASToolBar.UseItems(AItems: TKASToolBarItems); var i: Integer; Button: TKASToolButton; begin if Assigned(AItems) then begin BeginUpdate; Clear; if FOwnsToolItems then FToolItems.Free; FToolItems := AItems; FOwnsToolItems := False; // Insert the existing items as buttons. for i := 0 to FToolItems.Count - 1 do begin Button := CreateButton(FToolItems.Items[i]); if Assigned(Button) then ButtonList.Insert(ButtonCount, Button); end; UpdateButtonsTags; ResizeButtons; EndUpdate; end; end; procedure TKASToolBar.Clear; var I: Integer; begin BeginUpdate; for I := 0 to ButtonList.Count - 1 do TKASToolButton(ButtonList.Items[I]).Free; ButtonList.Clear; if Assigned(FToolItems) then FToolItems.Clear; EndUpdate; end; procedure TKASToolBar.ClearExecutors; var I: Integer; begin for I := 0 to FToolItemExecutors.Count - 1 do Dispose(PToolItemExecutor(FToolItemExecutors[I])); FToolItemExecutors.Clear; end; procedure TKASToolBar.ClickItem(ToolItemID: String); var I: Integer; Button: TKASToolButton; NormalItem: TKASNormalItem; begin for I := 0 to ButtonList.Count - 1 do begin Button := TKASToolButton(ButtonList.Items[I]); if Button.ToolItem is TKASNormalItem then begin NormalItem := TKASNormalItem(Button.ToolItem); if NormalItem.ID = ToolItemID then begin Button.Click; Break; end; if Button.ToolItem.CheckExecute(ToolItemID) then Break; end; end; end; procedure TKASToolBar.SetButtonHeight(const AValue: Integer); begin SetButtonSize(ButtonWidth, AValue); end; procedure TKASToolBar.SetButtonWidth(const AValue: Integer); begin SetButtonSize(AValue, ButtonHeight); end; constructor TKASToolBar.Create(TheOwner: TComponent); begin inherited Create(TheOwner); FGlyphSize:= 16; // by default FUpdateCount:= 0; FButtonWidth := 23; FButtonHeight := 22; FKASToolBarFlags := []; FToolItemExecutors := TFPList.Create; FToolItems := TKASToolBarItems.Create; FOwnsToolItems := True; end; function TKASToolBar.CreateButton(Item: TKASToolItem): TKASToolButton; begin if Assigned(Item) then begin if FOwnsToolItems then Item.SetToolOwner(Self); if Item is TKASSeparatorItem then begin Result := TKASToolDivider.Create(Self, Item); end else begin Result := TKASToolButton.Create(Self, Item); Result.ShowHint := True; Result.Caption := Item.GetEffectiveText; Result.Hint := Item.GetEffectiveHint; end; Result.Flat := FFlat; if FRadioToolBar then begin Result.GroupIndex := 1; Result.AllowAllUp := True; end; Result.ShowCaption := ShowCaptions; UpdateIcon(Result); AssignToolButtonProperties(Result); Result.Parent := Self; end else Result := nil; end; destructor TKASToolBar.Destroy; begin if not FOwnsToolItems then FToolItems := nil; // Unassign before Clear so that items are not cleared. Clear; inherited Destroy; ClearExecutors; FToolItemExecutors.Free; if FOwnsToolItems then FToolItems.Free; end; function TKASToolBar.ExecuteToolItem(Item: TKASToolItem): Boolean; var I: Integer; Executor: PToolItemExecutor; BestMatch: PToolItemExecutor = nil; begin for I := 0 to FToolItemExecutors.Count - 1 do begin Executor := PToolItemExecutor(FToolItemExecutors[I]); if Assigned(Executor^.ToolItemExecute) and Item.InheritsFrom(Executor^.ToolItemClass) and (not Assigned(BestMatch) or (Executor^.ToolItemClass.InheritsFrom(BestMatch^.ToolItemClass))) then begin BestMatch := Executor; end; end; Result := Assigned(BestMatch); if Result then BestMatch^.ToolItemExecute(Item); end; procedure TKASToolBar.BeginUpdate; begin {$if lcl_fullversion < 1010000} Inc(FUpdateCount); {$endif} inherited BeginUpdate; DisableAutoSizing; end; procedure TKASToolBar.EndUpdate; begin EnableAutoSizing; inherited EndUpdate; {$if lcl_fullversion < 1010000} Dec(FUpdateCount); {$endif} if (FUpdateCount = 0) and FResizeButtonsNeeded then ResizeButtons; end; function TKASToolBar.FindButton(Button: TKASToolButton): Integer; var I: Integer; begin for I := 0 to ButtonList.Count - 1 do if TKASToolButton(ButtonList[I]) = Button then Exit(I); Result := -1; end; procedure TKASToolBar.SetButtonSize(NewButtonWidth, NewButtonHeight: Integer); begin FButtonWidth := NewButtonWidth; FButtonHeight := NewButtonHeight; ResizeButtons; end; function TKASToolBar.AddButton(Item: TKASToolItem): TKASToolButton; begin Result := InsertButton(ButtonCount, Item); end; procedure TKASToolBar.AddToolItemExecutor(ToolItemClass: TKASToolItemClass; ExecuteFunction: TOnToolItemExecute); var Executor: PToolItemExecutor; begin New(Executor); FToolItemExecutors.Add(Executor); Executor^.ToolItemClass := ToolItemClass; Executor^.ToolItemExecute := ExecuteFunction; end; function TKASToolBar.InsertButton(InsertAt: Integer; Item: TKASToolItem): TKASToolButton; begin Result := CreateButton(Item); if Assigned(Result) then InsertButton(InsertAt, Result); end; procedure TKASToolBar.RemoveButton(Index: Integer); var Button: TKASToolButton; begin Button := TKASToolButton(ButtonList.Items[Index]); ButtonList.Delete(Index); Button.Free; FToolItems.Remove(Index); UpdateButtonsTags; Resize; end; procedure TKASToolBar.RemoveButton(Button: TKASToolButton); var Index: Integer; begin Index := FindButton(Button); if Index <> -1 then RemoveButton(Index); end; procedure TKASToolBar.RemoveToolItemExecutor(ExecuteFunction: TOnToolItemExecute); var Executor: PToolItemExecutor; I: Integer; begin for I := FToolItemExecutors.Count - 1 downto 0 do begin Executor := PToolItemExecutor(FToolItemExecutors[I]); if (TMethod(Executor^.ToolItemExecute).Code = TMethod(ExecuteFunction).Code) and (TMethod(Executor^.ToolItemExecute).Data = TMethod(ExecuteFunction).Data) then begin Dispose(Executor); FToolItemExecutors.Delete(I); end; end; end; procedure TKASToolBar.UncheckAllButtons; var I: Integer; begin for I:= 0 to ButtonCount - 1 do Buttons[I].Down:= False; end; { TKASToolButton } procedure TKASToolButton.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); var TextSize: TSize; begin if Assigned(Parent) then begin if ShowCaption and (Caption <> EmptyStr) then begin // Size to extent of the icon + caption. // Minimum size is the ButtonWidth x RowHeight of the toolbar. TextSize := Canvas.TextExtent(Caption); PreferredWidth := Max(TextSize.cx + Glyph.Width + 16, ToolBar.ButtonWidth); PreferredHeight := Max(TextSize.cy + 4, ToolBar.RowHeight); end else begin PreferredWidth := ToolBar.ButtonWidth; PreferredHeight := ToolBar.RowHeight; end; end else inherited; end; constructor TKASToolButton.Create(AOwner: TComponent; Item: TKASToolItem); begin inherited Create(AOwner); FToolItem := Item; end; function TKASToolButton.GetToolBar: TKASToolBar; begin Result := Parent as TKASToolBar; end; { TKASToolDivider } procedure TKASToolDivider.CalculatePreferredSize(var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean); begin if Assigned(Parent) and (Parent is TKASToolBar) and not TKASToolBar(Parent).FShowDividerAsButton then begin PreferredWidth := 5; PreferredHeight := TKASToolBar(Parent).RowHeight; end else inherited; end; procedure TKASToolDivider.Paint; var DividerRect: TRect; Details: TThemedElementDetails; begin if Assigned(Parent) and (Parent is TKASToolBar) and not TKASToolBar(Parent).FShowDividerAsButton then begin DividerRect:= ClientRect; Details:= ThemeServices.GetElementDetails(ttbSeparatorNormal); // Theme services have no strict rule to draw divider in the center, // so we should calculate rectangle here // on windows 7 divider can't be less than 4 pixels if (DividerRect.Right - DividerRect.Left) > 5 then begin DividerRect.Left := (DividerRect.Left + DividerRect.Right) div 2 - 3; DividerRect.Right := DividerRect.Left + 5; end; ThemeServices.DrawElement(Canvas.GetUpdatedHandle([csBrushValid, csPenValid]), Details, DividerRect); end else inherited Paint; end; end. ���������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/KASToolBar/kastoolitems.pas����������������������������������������������0000644�0001750�0000144�00000035471�12205740427�022043� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������{ Double Commander ------------------------------------------------------------------------- Basic tool items types for KASToolBar Copyright (C) 2012 Przemyslaw Nagay (cobines@gmail.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 KASToolItems; {$mode objfpc}{$H+} interface uses Classes, SysUtils, DCXmlConfig, DCBasicTypes; type TKASToolBarItems = class; TKASToolItem = class; TOnLoadToolItem = procedure (Item: TKASToolItem) of object; {$interfaces corba} IToolOwner = interface ['{A7908D38-1E13-4E8D-8FA7-8830A2FF9290}'] function ExecuteToolItem(Item: TKASToolItem): Boolean; function GetToolItemShortcutsHint(Item: TKASToolItem): String; end; {$interfaces default} { TKASToolBarLoader } TKASToolBarLoader = class protected function CreateItem(Node: TXmlNode): TKASToolItem; virtual; public procedure Load(Config: TXmlConfig; RootNode: TXmlNode; OnLoadToolItem: TOnLoadToolItem); virtual; end; { TKASToolItem } TKASToolItem = class private FToolOwner: IToolOwner; FUserData: Pointer; protected property ToolOwner: IToolOwner read FToolOwner; public procedure Assign(OtherItem: TKASToolItem); virtual; function CheckExecute(ToolItemID: String): Boolean; virtual; function Clone: TKASToolItem; virtual; abstract; function ConfigNodeName: String; virtual; abstract; function GetEffectiveHint: String; virtual; abstract; function GetEffectiveText: String; virtual; abstract; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); virtual; abstract; procedure Save(Config: TXmlConfig; Node: TXmlNode); procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); virtual; abstract; procedure SetToolOwner(AToolOwner: IToolOwner); virtual; property UserData: Pointer read FUserData write FUserData; end; TKASToolItemClass = class of TKASToolItem; { TKASSeparatorItem } TKASSeparatorItem = class(TKASToolItem) procedure Assign(OtherItem: TKASToolItem); override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; function GetEffectiveHint: String; override; function GetEffectiveText: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; end; { TKASNormalItem } TKASNormalItem = class(TKASToolItem) strict private FID: String; // Unique identificator of the button function GetID: String; strict protected procedure SaveHint(Config: TXmlConfig; Node: TXmlNode); virtual; procedure SaveIcon(Config: TXmlConfig; Node: TXmlNode); virtual; procedure SaveText(Config: TXmlConfig; Node: TXmlNode); virtual; public Icon: String; Text: String; Hint: String; procedure Assign(OtherItem: TKASToolItem); override; function CheckExecute(ToolItemID: String): Boolean; override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; function GetEffectiveHint: String; override; function GetEffectiveText: String; override; function GetShortcutsHint: String; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; property ID: String read GetID; end; { TKASMenuItem } TKASMenuItem = class(TKASNormalItem) procedure ToolItemLoaded(Item: TKASToolItem); private FItems: TKASToolBarItems; public constructor Create; reintroduce; destructor Destroy; override; procedure Assign(OtherItem: TKASToolItem); override; function CheckExecute(ToolItemID: String): Boolean; override; function Clone: TKASToolItem; override; function ConfigNodeName: String; override; procedure Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); override; procedure SaveContents(Config: TXmlConfig; Node: TXmlNode); override; procedure SetToolOwner(AToolOwner: IToolOwner); override; property SubItems: TKASToolBarItems read FItems; end; { TKASToolBarItems } TKASToolBarItems = class private FButtons: TFPList; function GetButton(Index: Integer): TKASToolItem; function GetButtonCount: Integer; procedure SetButton(Index: Integer; const AValue: TKASToolItem); public constructor Create; destructor Destroy; override; function Add(Item: TKASToolItem): Integer; procedure Clear; function Insert(InsertAt: Integer; Item: TKASToolItem): Integer; procedure Move(FromIndex, ToIndex: Integer); {en Returns the item at Index, removes it from the list but does not free it like Remove. } function ReleaseItem(Index: Integer): TKASToolItem; procedure Remove(Index: Integer); property Count: Integer read GetButtonCount; property Items[Index: Integer]: TKASToolItem read GetButton write SetButton; default; end; { TKASToolBarSerializer } TKASToolBarSerializer = class private FDeserializedItem: TKASToolItem; procedure SetDeserializedItem(Item: TKASToolItem); public function Deserialize(Stream: TStream; Loader: TKASToolBarLoader): TKASToolItem; procedure Serialize(Stream: TStream; Item: TKASToolItem); end; const MenuItemConfigNode = 'Menu'; NormalItemConfigNode = 'Normal'; SeparatorItemConfigNode = 'Separator'; implementation uses DCStrUtils; { TKASToolItem } procedure TKASToolItem.Assign(OtherItem: TKASToolItem); begin FUserData := OtherItem.FUserData; end; function TKASToolItem.CheckExecute(ToolItemID: String): Boolean; begin Result := False; end; procedure TKASToolItem.Save(Config: TXmlConfig; Node: TXmlNode); begin Node := Config.AddNode(Node, ConfigNodeName); SaveContents(Config, Node); end; procedure TKASToolItem.SetToolOwner(AToolOwner: IToolOwner); begin FToolOwner := AToolOwner; end; { TKASToolBarSerializer } function TKASToolBarSerializer.Deserialize(Stream: TStream; Loader: TKASToolBarLoader): TKASToolItem; var Config: TXmlConfig; begin Result := nil; FDeserializedItem := nil; Config := TXmlConfig.Create; try Config.ReadFromStream(Stream); Loader.Load(Config, Config.RootNode, @SetDeserializedItem); Result := FDeserializedItem; finally Config.Free; end; end; procedure TKASToolBarSerializer.Serialize(Stream: TStream; Item: TKASToolItem); var Config: TXmlConfig; begin Config := TXmlConfig.Create; try Item.Save(Config, Config.RootNode); Config.WriteToStream(Stream); finally Config.Free; end; end; procedure TKASToolBarSerializer.SetDeserializedItem(Item: TKASToolItem); begin FDeserializedItem := Item; end; { TKASToolBarLoader } function TKASToolBarLoader.CreateItem(Node: TXmlNode): TKASToolItem; begin if Node.CompareName(MenuItemConfigNode) = 0 then Result := TKASMenuItem.Create else if Node.CompareName(NormalItemConfigNode) = 0 then Result := TKASNormalItem.Create else if Node.CompareName(SeparatorItemConfigNode) = 0 then Result := TKASSeparatorItem.Create else Result := nil; end; procedure TKASToolBarLoader.Load(Config: TXmlConfig; RootNode: TXmlNode; OnLoadToolItem: TOnLoadToolItem); var Node: TXmlNode; Item: TKASToolItem; begin Node := RootNode.FirstChild; while Assigned(Node) do begin Item := CreateItem(Node); if Assigned(Item) then try Item.Load(Config, Node, Self); OnLoadToolItem(Item); Item := nil; finally FreeAndNil(Item); end; Node := Node.NextSibling; end; end; { TKASMenuItem } procedure TKASMenuItem.Assign(OtherItem: TKASToolItem); var MenuItem: TKASMenuItem; Item: TKASToolItem; I: Integer; begin inherited Assign(OtherItem); if OtherItem is TKASMenuItem then begin MenuItem := TKASMenuItem(OtherItem); FItems.Clear; for I := 0 to MenuItem.SubItems.Count - 1 do begin Item := MenuItem.SubItems.Items[I].Clone; Item.SetToolOwner(ToolOwner); FItems.Add(Item); end; end; end; function TKASMenuItem.CheckExecute(ToolItemID: String): Boolean; var I: Integer; begin Result := inherited CheckExecute(ToolItemID); if not Result then begin for I := 0 to SubItems.Count - 1 do begin if SubItems[I].CheckExecute(ToolItemID) then Exit(True); end; end; end; function TKASMenuItem.Clone: TKASToolItem; begin Result := TKASMenuItem.Create; Result.Assign(Self); end; function TKASMenuItem.ConfigNodeName: String; begin Result := MenuItemConfigNode; end; constructor TKASMenuItem.Create; begin FItems := TKASToolBarItems.Create; end; destructor TKASMenuItem.Destroy; begin inherited Destroy; FItems.Free; end; procedure TKASMenuItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin inherited Load(Config, Node, Loader); SubItems.Clear; Node := Config.FindNode(Node, 'MenuItems', False); if Assigned(Node) then Loader.Load(Config, Node, @ToolItemLoaded); end; procedure TKASMenuItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); var I: Integer; begin inherited SaveContents(Config, Node); if SubItems.Count > 0 then begin Node := Config.AddNode(Node, 'MenuItems'); for I := 0 to SubItems.Count - 1 do SubItems.Items[I].Save(Config, Node); end; end; procedure TKASMenuItem.SetToolOwner(AToolOwner: IToolOwner); var I: Integer; begin inherited SetToolOwner(AToolOwner); for I := 0 to SubItems.Count - 1 do SubItems.Items[I].SetToolOwner(ToolOwner); end; procedure TKASMenuItem.ToolItemLoaded(Item: TKASToolItem); begin Item.SetToolOwner(ToolOwner); SubItems.Add(Item); end; { TKASDividerItem } procedure TKASSeparatorItem.Assign(OtherItem: TKASToolItem); begin inherited Assign(OtherItem); end; function TKASSeparatorItem.Clone: TKASToolItem; begin Result := TKASSeparatorItem.Create; Result.Assign(Self); end; function TKASSeparatorItem.ConfigNodeName: String; begin Result := SeparatorItemConfigNode; end; function TKASSeparatorItem.GetEffectiveHint: String; begin Result := ''; end; function TKASSeparatorItem.GetEffectiveText: String; begin Result := ''; end; procedure TKASSeparatorItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin // Empty. end; procedure TKASSeparatorItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin // Empty. end; { TKASNormalItem } procedure TKASNormalItem.Assign(OtherItem: TKASToolItem); var NormalItem: TKASNormalItem; begin inherited Assign(OtherItem); if OtherItem is TKASNormalItem then begin // Don't copy ID. NormalItem := TKASNormalItem(OtherItem); Icon := NormalItem.Icon; Text := NormalItem.Text; Hint := NormalItem.Hint; end; end; function TKASNormalItem.CheckExecute(ToolItemID: String): Boolean; begin Result := (ID = ToolItemID); if Result and Assigned(FToolOwner) then FToolOwner.ExecuteToolItem(Self); end; function TKASNormalItem.Clone: TKASToolItem; begin Result := TKASNormalItem.Create; Result.Assign(Self); end; function TKASNormalItem.ConfigNodeName: String; begin Result := NormalItemConfigNode; end; function TKASNormalItem.GetEffectiveHint: String; var ShortcutsHint: String; begin Result := Hint; ShortcutsHint := GetShortcutsHint; if ShortcutsHint <> '' then AddStrWithSep(Result, '(' + ShortcutsHint + ')', ' '); end; function TKASNormalItem.GetEffectiveText: String; begin Result := Text; end; function TKASNormalItem.GetID: String; var Guid: TGuid; begin if FID = EmptyStr then begin if CreateGUID(Guid) = 0 then FID := GUIDToString(Guid) else FID := IntToStr(Random(MaxInt)); end; Result := FID; end; function TKASNormalItem.GetShortcutsHint: String; begin if Assigned(FToolOwner) then Result := FToolOwner.GetToolItemShortcutsHint(Self) else Result := ''; end; procedure TKASNormalItem.Load(Config: TXmlConfig; Node: TXmlNode; Loader: TKASToolBarLoader); begin Node := Node.FirstChild; while Assigned(Node) do begin if Node.CompareName('ID') = 0 then FID := Config.GetContent(Node) else if Node.CompareName('Text') = 0 then Text := Config.GetContent(Node) else if Node.CompareName('Icon') = 0 then Icon := Config.GetContent(Node) else if Node.CompareName('Hint') = 0 then Hint := Config.GetContent(Node); Node := Node.NextSibling; end; end; procedure TKASNormalItem.SaveContents(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValue(Node, 'ID', ID); SaveText(Config, Node); SaveIcon(Config, Node); SaveHint(Config, Node); end; procedure TKASNormalItem.SaveHint(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Hint', Hint, ''); end; procedure TKASNormalItem.SaveIcon(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Icon', Icon, ''); end; procedure TKASNormalItem.SaveText(Config: TXmlConfig; Node: TXmlNode); begin Config.AddValueDef(Node, 'Text', Text, ''); end; { TKASToolBarItems } constructor TKASToolBarItems.Create; begin FButtons := TFPList.Create; end; destructor TKASToolBarItems.Destroy; begin Clear; inherited Destroy; FButtons.Free; end; function TKASToolBarItems.Insert(InsertAt: Integer; Item: TKASToolItem): Integer; begin FButtons.Insert(InsertAt, Item); Result := InsertAt; end; procedure TKASToolBarItems.Move(FromIndex, ToIndex: Integer); begin FButtons.Move(FromIndex, ToIndex); end; function TKASToolBarItems.ReleaseItem(Index: Integer): TKASToolItem; begin Result := TKASToolItem(FButtons[Index]); FButtons.Delete(Index); end; function TKASToolBarItems.Add(Item: TKASToolItem): Integer; begin Result := FButtons.Add(Item); end; procedure TKASToolBarItems.Remove(Index: Integer); begin TKASToolItem(FButtons[Index]).Free; FButtons.Delete(Index); end; procedure TKASToolBarItems.Clear; var i: Integer; begin for i := 0 to FButtons.Count - 1 do TKASToolItem(FButtons[i]).Free; FButtons.Clear; end; function TKASToolBarItems.GetButtonCount: Integer; begin Result := FButtons.Count; end; function TKASToolBarItems.GetButton(Index: Integer): TKASToolItem; begin Result := TKASToolItem(FButtons[Index]); end; procedure TKASToolBarItems.SetButton(Index: Integer; const AValue: TKASToolItem); begin TKASToolItem(FButtons[Index]).Free; FButtons[Index] := AValue; end; end. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/components/build.sh�����������������������������������������������������������������0000755�0001750�0000144�00000001620�12666540554�016354� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # Compiling components # Do not execute this script directly. # This script is called from ../build.sh. # Get processor architecture if [ -z $CPU_TARGET ] ; then export CPU_TARGET=$(fpc -iTP) fi # Generate PIC code if [ "$CPU_TARGET" != "arm" ] ; then if [ -f /etc/fpc.cfg ] ; then cp /etc/fpc.cfg ./ echo "-fPIC" >> fpc.cfg export PPC_CONFIG_PATH=$(pwd) fi fi # Build components basedir=$(pwd) cd components $lazbuild chsdet/chsdet.lpk $DC_ARCH $lazbuild CmdLine/cmdbox.lpk $DC_ARCH $lazbuild multithreadprocs/multithreadprocslaz.lpk $DC_ARCH $lazbuild dcpcrypt/dcpcrypt.lpk $DC_ARCH $lazbuild doublecmd/doublecmd_common.lpk $DC_ARCH $lazbuild KASToolBar/kascomp.lpk $DC_ARCH $lazbuild viewer/viewerpackage.lpk $DC_ARCH $lazbuild gifanim/pkg_gifanim.lpk $DC_ARCH cd $basedir # Remove temporary file if [ -f fpc.cfg ] ; then rm -f fpc.cfg export PPC_CONFIG_PATH= fi ����������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/clean.sh����������������������������������������������������������������������������0000755�0001750�0000144�00000002110�12575504727�014146� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh rm -f units/i386-linux-gtk2/* rm -f units/i386-linux-qt/* rm -f units/x86_64-linux-gtk2/* rm -f units/x86_64-linux-qt/* # Clean up components output directories rm -rf components/chsdet/lib/* rm -rf components/CmdLine/lib/* rm -rf components/dcpcrypt/lib/* rm -rf components/doublecmd/lib/* rm -rf components/gifanim/lib/* rm -rf components/KASToolBar/lib/* rm -rf components/multithreadprocs/lib/* rm -rf components/viewer/lib/* rm -rf components/ZVDateTimeCtrls/lib/* # Clean up all temporary files find . -iname '*.compiled' -delete find . -iname '*.ppu' -delete find . -iname '*.o' -delete find plugins -iname '*.w?x' -delete find plugins -iname '*.dsx' -delete find plugins -iname '*.or' -delete find plugins -iname '*.res' -delete find plugins -iname '*.a' -delete rm -f src/doublecmd.res doublecmd rm -f tools/extractdwrflnfo rm -f plugins/wcx/zip/lib/ZipConfDlg.lfm rm -f plugins/wcx/zip/lib/abresstring.rst rm -f plugins/wfx/ftp/lib/FtpConfDlg.lfm rm -f plugins/wfx/samba/lib/smbauthdlg.lfm # Remove debug files rm -f doublecmd.zdli doublecmd.dbg rm -rf doublecmd.dSYM ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������doublecmd-0.7.1/build.sh����������������������������������������������������������������������������0000755�0001750�0000144�00000003345�12407307365�014167� 0����������������������������������������������������������������������������������������������������ustar �alexx���������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh set -e # if you compile first time you must change variable "lazpath" and "lcl" # after it execute this script with parameter "all" at doublecmd dir # "./build.sh all" it build doublecmd # by Attid # You can execute this script with different parameters: # components - compiling components needed for DC # plugins - compiling all DC plugins # all - compiling components, plugins and DC # default - compiling DC only (using by default) # path to lazbuild export lazbuild=$(which lazbuild) # Set up widgetset: gtk or gtk2 or qt # Set up processor architecture: i386 or x86_64 if [ $2 ] then export lcl=$2 fi if [ $lcl ] && [ $CPU_TARGET ] then export DC_ARCH=$(echo "--widgetset=$lcl")" "$(echo "--cpu=$CPU_TARGET") elif [ $lcl ] then export DC_ARCH=$(echo "--widgetset=$lcl") elif [ $CPU_TARGET ] then export DC_ARCH=$(echo "--cpu=$CPU_TARGET") fi build_default() { $lazbuild src/doublecmd.lpi $DC_ARCH strip doublecmd } build_beta() { components/build.sh plugins/build.sh # Build Double Commander $lazbuild src/doublecmd.lpi --bm=beta $DC_ARCH # Build Dwarf LineInfo Extractor $lazbuild tools/extractdwrflnfo.lpi # Extract debug line info chmod a+x tools/extractdwrflnfo if [ -f doublecmd.dSYM/Contents/Resources/DWARF/doublecmd ]; then mv -f doublecmd.dSYM/Contents/Resources/DWARF/doublecmd $(pwd)/doublecmd.dbg fi tools/extractdwrflnfo doublecmd.dbg # Strip debug info strip doublecmd } build_all() { components/build.sh plugins/build.sh build_default } case $1 in components) components/build.sh;; plugins) plugins/build.sh;; beta) build_beta;; all) build_all;; *) build_default;; esac ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

    DCPcrypt Cryptographic Component Library v2
    Copyright © 1999-2002 David Barton
    http://www.cityinthesky.co.uk/
    crypto@cityinthesky.co.uk